summaryrefslogtreecommitdiff
path: root/school/node_modules/graphql/utilities/stripIgnoredCharacters.mjs
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2023-01-10 14:54:04 +0100
committerMinteck <contact@minteck.org>2023-01-10 14:54:04 +0100
commit99c1d9af689e5325f3cf535c4007b3aeb8325229 (patch)
treee663b3c2ebdbd67c818ac0c5147f0ce1d2463cda /school/node_modules/graphql/utilities/stripIgnoredCharacters.mjs
parent9871b03912fc28ad38b4037ebf26a78aa937baba (diff)
downloadpluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.gz
pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.bz2
pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.zip
Update - This is an automated commit
Diffstat (limited to 'school/node_modules/graphql/utilities/stripIgnoredCharacters.mjs')
-rw-r--r--school/node_modules/graphql/utilities/stripIgnoredCharacters.mjs113
1 files changed, 113 insertions, 0 deletions
diff --git a/school/node_modules/graphql/utilities/stripIgnoredCharacters.mjs b/school/node_modules/graphql/utilities/stripIgnoredCharacters.mjs
new file mode 100644
index 0000000..a0a0758
--- /dev/null
+++ b/school/node_modules/graphql/utilities/stripIgnoredCharacters.mjs
@@ -0,0 +1,113 @@
+import { Source, isSource } from "../language/source.mjs";
+import { TokenKind } from "../language/tokenKind.mjs";
+import { Lexer, isPunctuatorTokenKind } from "../language/lexer.mjs";
+import { dedentBlockStringValue, getBlockStringIndentation } from "../language/blockString.mjs";
+/**
+ * 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}
+ */
+
+export function stripIgnoredCharacters(source) {
+ var sourceObj = isSource(source) ? source : new Source(source);
+ var body = sourceObj.body;
+ var lexer = new Lexer(sourceObj);
+ var strippedBody = '';
+ var wasLastAddedTokenNonPunctuator = false;
+
+ while (lexer.advance().kind !== 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 = !isPunctuatorTokenKind(currentToken.kind);
+
+ if (wasLastAddedTokenNonPunctuator) {
+ if (isNonPunctuator || currentToken.kind === TokenKind.SPREAD) {
+ strippedBody += ' ';
+ }
+ }
+
+ var tokenBody = body.slice(currentToken.start, currentToken.end);
+
+ if (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 = dedentBlockStringValue(rawStr);
+
+ if (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 + '"""';
+}