- App.tsx: full navigation (Auth stack + Main tabs with 5 screens) - Auth: LoginScreen, RegisterScreen, ForgotPasswordScreen - HomeScreen: dashboard with IoT metrics, weather widget, alerts, quick actions, sensors - MapScreen: interactive map with layer toggles (6 layers) - MarketplaceScreen: categories (6), products (5), search - ChatScreen: AI chat with quick prompts (4), bot responses - ProfileScreen: user info, stats, menu (9 items), logout - AlertsScreen: alert list with severity, acknowledge - SensorsScreen: sensor list with type filters (6 types), search - ZonesScreen: zone cards with stats - SettingsScreen: language picker (FR/EN/ES/DE), privacy, about - Stores: iotStore (sensors, zones, alerts), notificationStore, uiStore + i18n - Hooks: useSensors, useAlerts, useNotifications, useLocation - Components: Card, Button, LoadingSpinner, ErrorBoundary, Header - Services: iotService, notificationService (with axios API client) - Utils: formatters (temp, AQI, noise, dates), validators (email, password, IBAN) - Theme: colors.ts with full design system (Blue Ocean palette) - Ditto: fixed MongoDB connection, new JWT secrets, official gateway image
124 lines
3.2 KiB
JavaScript
124 lines
3.2 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.stripIgnoredCharacters = stripIgnoredCharacters;
|
|
|
|
var _source = require("../language/source.js");
|
|
|
|
var _tokenKind = require("../language/tokenKind.js");
|
|
|
|
var _lexer = require("../language/lexer.js");
|
|
|
|
var _blockString = require("../language/blockString.js");
|
|
|
|
/**
|
|
* Strips characters that are not significant to the validity or execution
|
|
* of a GraphQL document:
|
|
* - UnicodeBOM
|
|
* - WhiteSpace
|
|
* - LineTerminator
|
|
* - Comment
|
|
* - Comma
|
|
* - BlockString indentation
|
|
*
|
|
* Note: It is required to have a delimiter character between neighboring
|
|
* non-punctuator tokens and this function always uses single space as delimiter.
|
|
*
|
|
* It is guaranteed that both input and output documents if parsed would result
|
|
* in the exact same AST except for nodes location.
|
|
*
|
|
* Warning: It is guaranteed that this function will always produce stable results.
|
|
* However, it's not guaranteed that it will stay the same between different
|
|
* releases due to bugfixes or changes in the GraphQL specification.
|
|
*
|
|
* Query example:
|
|
*
|
|
* query SomeQuery($foo: String!, $bar: String) {
|
|
* someField(foo: $foo, bar: $bar) {
|
|
* a
|
|
* b {
|
|
* c
|
|
* d
|
|
* }
|
|
* }
|
|
* }
|
|
*
|
|
* Becomes:
|
|
*
|
|
* query SomeQuery($foo:String!$bar:String){someField(foo:$foo bar:$bar){a b{c d}}}
|
|
*
|
|
* SDL example:
|
|
*
|
|
* """
|
|
* Type description
|
|
* """
|
|
* type Foo {
|
|
* """
|
|
* Field description
|
|
* """
|
|
* bar: String
|
|
* }
|
|
*
|
|
* Becomes:
|
|
*
|
|
* """Type description""" type Foo{"""Field description""" bar:String}
|
|
*/
|
|
function stripIgnoredCharacters(source) {
|
|
var sourceObj = (0, _source.isSource)(source) ? source : new _source.Source(source);
|
|
var body = sourceObj.body;
|
|
var lexer = new _lexer.Lexer(sourceObj);
|
|
var strippedBody = '';
|
|
var wasLastAddedTokenNonPunctuator = false;
|
|
|
|
while (lexer.advance().kind !== _tokenKind.TokenKind.EOF) {
|
|
var currentToken = lexer.token;
|
|
var tokenKind = currentToken.kind;
|
|
/**
|
|
* Every two non-punctuator tokens should have space between them.
|
|
* Also prevent case of non-punctuator token following by spread resulting
|
|
* in invalid token (e.g. `1...` is invalid Float token).
|
|
*/
|
|
|
|
var isNonPunctuator = !(0, _lexer.isPunctuatorTokenKind)(currentToken.kind);
|
|
|
|
if (wasLastAddedTokenNonPunctuator) {
|
|
if (isNonPunctuator || currentToken.kind === _tokenKind.TokenKind.SPREAD) {
|
|
strippedBody += ' ';
|
|
}
|
|
}
|
|
|
|
var tokenBody = body.slice(currentToken.start, currentToken.end);
|
|
|
|
if (tokenKind === _tokenKind.TokenKind.BLOCK_STRING) {
|
|
strippedBody += dedentBlockString(tokenBody);
|
|
} else {
|
|
strippedBody += tokenBody;
|
|
}
|
|
|
|
wasLastAddedTokenNonPunctuator = isNonPunctuator;
|
|
}
|
|
|
|
return strippedBody;
|
|
}
|
|
|
|
function dedentBlockString(blockStr) {
|
|
// skip leading and trailing triple quotations
|
|
var rawStr = blockStr.slice(3, -3);
|
|
var body = (0, _blockString.dedentBlockStringValue)(rawStr);
|
|
|
|
if ((0, _blockString.getBlockStringIndentation)(body) > 0) {
|
|
body = '\n' + body;
|
|
}
|
|
|
|
var lastChar = body[body.length - 1];
|
|
var hasTrailingQuote = lastChar === '"' && body.slice(-4) !== '\\"""';
|
|
|
|
if (hasTrailingQuote || lastChar === '\\') {
|
|
body += '\n';
|
|
}
|
|
|
|
return '"""' + body + '"""';
|
|
}
|