summaryrefslogtreecommitdiff
path: root/alarm/node_modules/graphql/utilities/stripIgnoredCharacters.js
diff options
context:
space:
mode:
Diffstat (limited to 'alarm/node_modules/graphql/utilities/stripIgnoredCharacters.js')
-rw-r--r--alarm/node_modules/graphql/utilities/stripIgnoredCharacters.js123
1 files changed, 123 insertions, 0 deletions
diff --git a/alarm/node_modules/graphql/utilities/stripIgnoredCharacters.js b/alarm/node_modules/graphql/utilities/stripIgnoredCharacters.js
new file mode 100644
index 0000000..aac5ddc
--- /dev/null
+++ b/alarm/node_modules/graphql/utilities/stripIgnoredCharacters.js
@@ -0,0 +1,123 @@
+"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 + '"""';
+}