graphql 15.3.0 → 15.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +10 -0
- package/error/GraphQLError.js +8 -8
- package/error/GraphQLError.js.flow +2 -3
- package/error/GraphQLError.mjs +2 -2
- package/error/formatError.js +1 -1
- package/error/formatError.js.flow +0 -1
- package/error/index.js +4 -4
- package/error/index.js.flow +0 -1
- package/error/locatedError.d.ts +2 -2
- package/error/locatedError.js +10 -5
- package/error/locatedError.js.flow +10 -4
- package/error/locatedError.mjs +6 -4
- package/error/syntaxError.js +1 -1
- package/error/syntaxError.js.flow +0 -1
- package/execution/execute.d.ts +0 -15
- package/execution/execute.js +104 -104
- package/execution/execute.js.flow +119 -133
- package/execution/execute.mjs +86 -82
- package/execution/index.js +3 -3
- package/execution/index.js.flow +0 -1
- package/execution/values.js +11 -11
- package/execution/values.js.flow +0 -1
- package/graphql.js +5 -5
- package/graphql.js.flow +0 -1
- package/index.d.ts +1 -0
- package/index.js +9 -9
- package/index.js.flow +0 -1
- package/jsutils/ObjMap.js.flow +0 -1
- package/jsutils/Path.js.flow +0 -1
- package/jsutils/PromiseOrValue.js.flow +0 -1
- package/jsutils/defineInspect.js +2 -2
- package/jsutils/defineInspect.js.flow +0 -1
- package/jsutils/devAssert.js.flow +0 -1
- package/jsutils/didYouMean.js.flow +0 -1
- package/jsutils/identityFunc.js.flow +0 -1
- package/jsutils/inspect.js +1 -2
- package/jsutils/inspect.js.flow +10 -8
- package/jsutils/inspect.mjs +1 -1
- package/jsutils/instanceOf.js +15 -9
- package/jsutils/instanceOf.js.flow +13 -7
- package/jsutils/instanceOf.mjs +13 -5
- package/jsutils/invariant.js.flow +0 -1
- package/jsutils/isAsyncIterable.js +13 -0
- package/jsutils/isAsyncIterable.js.flow +14 -0
- package/jsutils/isAsyncIterable.mjs +10 -0
- package/jsutils/isObjectLike.js.flow +0 -1
- package/jsutils/isPromise.js.flow +0 -1
- package/jsutils/keyMap.js.flow +0 -1
- package/jsutils/keyValMap.js.flow +0 -1
- package/jsutils/mapValue.js +1 -1
- package/jsutils/mapValue.js.flow +0 -1
- package/jsutils/memoize3.js +2 -5
- package/jsutils/memoize3.js.flow +2 -5
- package/jsutils/memoize3.mjs +2 -5
- package/jsutils/naturalCompare.js +69 -0
- package/jsutils/naturalCompare.js.flow +59 -0
- package/jsutils/naturalCompare.mjs +61 -0
- package/jsutils/nodejsCustomInspectSymbol.js.flow +0 -1
- package/jsutils/printPathArray.js.flow +0 -1
- package/jsutils/promiseForObject.js.flow +0 -1
- package/jsutils/promiseReduce.js +1 -1
- package/jsutils/promiseReduce.js.flow +0 -1
- package/jsutils/safeArrayFrom.js +73 -0
- package/jsutils/safeArrayFrom.js.flow +59 -0
- package/jsutils/safeArrayFrom.mjs +66 -0
- package/jsutils/suggestionList.js +5 -1
- package/jsutils/suggestionList.js.flow +3 -2
- package/jsutils/suggestionList.mjs +3 -1
- package/jsutils/toObjMap.js +1 -1
- package/jsutils/toObjMap.js.flow +0 -1
- package/language/ast.js +1 -1
- package/language/ast.js.flow +0 -1
- package/language/blockString.d.ts +1 -1
- package/language/blockString.js +53 -32
- package/language/blockString.js.flow +51 -36
- package/language/blockString.mjs +54 -33
- package/language/directiveLocation.js.flow +0 -1
- package/language/experimentalOnlineParser/grammar.d.ts +1006 -0
- package/language/experimentalOnlineParser/grammar.js +987 -0
- package/language/experimentalOnlineParser/grammar.js.flow +1000 -0
- package/language/experimentalOnlineParser/grammar.mjs +980 -0
- package/language/experimentalOnlineParser/index.d.ts +6 -0
- package/language/experimentalOnlineParser/index.js +31 -0
- package/language/experimentalOnlineParser/index.js.flow +7 -0
- package/language/experimentalOnlineParser/index.mjs +1 -0
- package/language/experimentalOnlineParser/onlineParser.d.ts +125 -0
- package/language/experimentalOnlineParser/onlineParser.js +604 -0
- package/language/experimentalOnlineParser/onlineParser.js.flow +723 -0
- package/language/experimentalOnlineParser/onlineParser.mjs +587 -0
- package/language/index.js +12 -12
- package/language/index.js.flow +0 -1
- package/language/kinds.js.flow +0 -1
- package/language/lexer.js +242 -183
- package/language/lexer.js.flow +188 -184
- package/language/lexer.mjs +238 -179
- package/language/location.js.flow +0 -1
- package/language/parser.js +73 -68
- package/language/parser.js.flow +62 -57
- package/language/parser.mjs +64 -60
- package/language/predicates.js +1 -1
- package/language/predicates.js.flow +0 -1
- package/language/printLocation.js +1 -1
- package/language/printLocation.js.flow +0 -1
- package/language/printer.js +20 -13
- package/language/printer.js.flow +26 -25
- package/language/printer.mjs +18 -11
- package/language/source.d.ts +7 -0
- package/language/source.js +20 -3
- package/language/source.js.flow +21 -3
- package/language/source.mjs +14 -1
- package/language/tokenKind.js.flow +0 -1
- package/language/visitor.js +2 -2
- package/language/visitor.js.flow +0 -1
- package/package.json +2 -3
- package/polyfills/arrayFrom.js +2 -2
- package/polyfills/arrayFrom.js.flow +1 -2
- package/polyfills/arrayFrom.mjs +1 -1
- package/polyfills/find.js +1 -1
- package/polyfills/find.js.flow +1 -2
- package/polyfills/find.mjs +1 -1
- package/polyfills/isFinite.js +1 -1
- package/polyfills/isFinite.js.flow +1 -2
- package/polyfills/isFinite.mjs +1 -1
- package/polyfills/isInteger.js +1 -1
- package/polyfills/isInteger.js.flow +1 -2
- package/polyfills/isInteger.mjs +1 -1
- package/polyfills/objectEntries.js +1 -1
- package/polyfills/objectEntries.js.flow +1 -2
- package/polyfills/objectEntries.mjs +1 -1
- package/polyfills/objectValues.js +1 -1
- package/polyfills/objectValues.js.flow +1 -2
- package/polyfills/objectValues.mjs +1 -1
- package/polyfills/symbols.js +3 -5
- package/polyfills/symbols.js.flow +9 -6
- package/polyfills/symbols.mjs +3 -5
- package/subscription/index.js +1 -1
- package/subscription/index.js.flow +0 -1
- package/subscription/mapAsyncIterator.js +2 -2
- package/subscription/mapAsyncIterator.js.flow +8 -9
- package/subscription/mapAsyncIterator.mjs +1 -1
- package/subscription/subscribe.js +61 -73
- package/subscription/subscribe.js.flow +71 -85
- package/subscription/subscribe.mjs +53 -65
- package/type/definition.d.ts +16 -6
- package/type/definition.js +37 -32
- package/type/definition.js.flow +93 -63
- package/type/definition.mjs +19 -14
- package/type/directives.js +17 -16
- package/type/directives.js.flow +20 -13
- package/type/directives.mjs +6 -5
- package/type/index.js +6 -6
- package/type/index.js.flow +0 -1
- package/type/introspection.js +86 -65
- package/type/introspection.js.flow +75 -43
- package/type/introspection.mjs +79 -58
- package/type/scalars.js +9 -9
- package/type/scalars.js.flow +1 -2
- package/type/scalars.mjs +1 -1
- package/type/schema.js +13 -13
- package/type/schema.js.flow +2 -3
- package/type/schema.mjs +1 -1
- package/type/validate.js +52 -19
- package/type/validate.js.flow +54 -8
- package/type/validate.mjs +43 -9
- package/utilities/TypeInfo.js +7 -7
- package/utilities/TypeInfo.js.flow +1 -2
- package/utilities/assertValidName.js +2 -2
- package/utilities/assertValidName.js.flow +0 -1
- package/utilities/astFromValue.js +14 -16
- package/utilities/astFromValue.js.flow +6 -7
- package/utilities/astFromValue.mjs +6 -7
- package/utilities/buildASTSchema.js +17 -27
- package/utilities/buildASTSchema.js.flow +5 -21
- package/utilities/buildASTSchema.mjs +11 -21
- package/utilities/buildClientSchema.js +16 -15
- package/utilities/buildClientSchema.js.flow +28 -12
- package/utilities/buildClientSchema.mjs +5 -4
- package/utilities/coerceInputValue.js +17 -18
- package/utilities/coerceInputValue.js.flow +12 -10
- package/utilities/coerceInputValue.mjs +7 -7
- package/utilities/concatAST.js +9 -8
- package/utilities/concatAST.js.flow +8 -8
- package/utilities/concatAST.mjs +9 -6
- package/utilities/extendSchema.js +26 -19
- package/utilities/extendSchema.js.flow +19 -7
- package/utilities/extendSchema.mjs +8 -1
- package/utilities/findBreakingChanges.js +15 -11
- package/utilities/findBreakingChanges.js.flow +6 -3
- package/utilities/findBreakingChanges.mjs +5 -2
- package/utilities/findDeprecatedUsages.js +2 -2
- package/utilities/findDeprecatedUsages.js.flow +0 -1
- package/utilities/getIntrospectionQuery.d.ts +6 -0
- package/utilities/getIntrospectionQuery.js +8 -2
- package/utilities/getIntrospectionQuery.js.flow +17 -5
- package/utilities/getIntrospectionQuery.mjs +8 -2
- package/utilities/getOperationAST.js +1 -1
- package/utilities/getOperationAST.js.flow +0 -1
- package/utilities/getOperationRootType.js +1 -1
- package/utilities/getOperationRootType.js.flow +0 -1
- package/utilities/index.d.ts +3 -0
- package/utilities/index.js +22 -22
- package/utilities/index.js.flow +0 -1
- package/utilities/introspectionFromSchema.js +7 -5
- package/utilities/introspectionFromSchema.js.flow +2 -1
- package/utilities/introspectionFromSchema.mjs +3 -1
- package/utilities/lexicographicSortSchema.js +13 -9
- package/utilities/lexicographicSortSchema.js.flow +21 -13
- package/utilities/lexicographicSortSchema.mjs +5 -2
- package/utilities/printSchema.js +15 -16
- package/utilities/printSchema.js.flow +23 -16
- package/utilities/printSchema.mjs +5 -6
- package/utilities/separateOperations.js +46 -42
- package/utilities/separateOperations.js.flow +46 -37
- package/utilities/separateOperations.mjs +44 -40
- package/utilities/stripIgnoredCharacters.js +6 -16
- package/utilities/stripIgnoredCharacters.js.flow +4 -13
- package/utilities/stripIgnoredCharacters.mjs +3 -10
- package/utilities/typeComparators.js +1 -1
- package/utilities/typeComparators.js.flow +0 -1
- package/utilities/typeFromAST.js +6 -6
- package/utilities/typeFromAST.js.flow +2 -3
- package/utilities/typeFromAST.mjs +2 -2
- package/utilities/typedQueryDocumentNode.d.ts +20 -0
- package/utilities/valueFromAST.js +6 -6
- package/utilities/valueFromAST.js.flow +4 -2
- package/utilities/valueFromASTUntyped.js +4 -4
- package/utilities/valueFromASTUntyped.js.flow +0 -1
- package/validation/ValidationContext.js +3 -3
- package/validation/ValidationContext.js.flow +3 -4
- package/validation/index.js +38 -38
- package/validation/index.js.flow +0 -1
- package/validation/rules/ExecutableDefinitions.js +1 -1
- package/validation/rules/ExecutableDefinitions.js.flow +0 -1
- package/validation/rules/ExecutableDefinitionsRule.js +3 -3
- package/validation/rules/ExecutableDefinitionsRule.js.flow +0 -1
- package/validation/rules/FieldsOnCorrectTypeRule.js +8 -6
- package/validation/rules/FieldsOnCorrectTypeRule.js.flow +2 -2
- package/validation/rules/FieldsOnCorrectTypeRule.mjs +2 -1
- package/validation/rules/FragmentsOnCompositeTypesRule.js +4 -4
- package/validation/rules/FragmentsOnCompositeTypesRule.js.flow +0 -1
- package/validation/rules/KnownArgumentNamesRule.js +5 -5
- package/validation/rules/KnownArgumentNamesRule.js.flow +1 -1
- package/validation/rules/KnownDirectivesRule.js +6 -6
- package/validation/rules/KnownDirectivesRule.js.flow +4 -3
- package/validation/rules/KnownFragmentNamesRule.js +1 -1
- package/validation/rules/KnownFragmentNamesRule.js.flow +0 -1
- package/validation/rules/KnownTypeNamesRule.js +6 -6
- package/validation/rules/KnownTypeNamesRule.js.flow +1 -2
- package/validation/rules/LoneAnonymousOperationRule.js +2 -2
- package/validation/rules/LoneAnonymousOperationRule.js.flow +0 -1
- package/validation/rules/LoneSchemaDefinition.js +1 -1
- package/validation/rules/LoneSchemaDefinition.js.flow +0 -1
- package/validation/rules/LoneSchemaDefinitionRule.js +1 -1
- package/validation/rules/LoneSchemaDefinitionRule.js.flow +0 -1
- package/validation/rules/NoFragmentCyclesRule.js +1 -1
- package/validation/rules/NoFragmentCyclesRule.js.flow +1 -2
- package/validation/rules/NoUndefinedVariablesRule.js +1 -1
- package/validation/rules/NoUndefinedVariablesRule.js.flow +0 -1
- package/validation/rules/NoUnusedFragmentsRule.js +1 -1
- package/validation/rules/NoUnusedFragmentsRule.js.flow +0 -1
- package/validation/rules/NoUnusedVariablesRule.js +1 -1
- package/validation/rules/NoUnusedVariablesRule.js.flow +0 -1
- package/validation/rules/OverlappingFieldsCanBeMergedRule.js +20 -20
- package/validation/rules/OverlappingFieldsCanBeMergedRule.js.flow +14 -14
- package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs +12 -12
- package/validation/rules/PossibleFragmentSpreadsRule.js +5 -5
- package/validation/rules/PossibleFragmentSpreadsRule.js.flow +5 -2
- package/validation/rules/PossibleTypeExtensions.js +1 -1
- package/validation/rules/PossibleTypeExtensions.js.flow +0 -1
- package/validation/rules/PossibleTypeExtensionsRule.js +8 -8
- package/validation/rules/PossibleTypeExtensionsRule.js.flow +6 -4
- package/validation/rules/ProvidedRequiredArgumentsRule.js +7 -7
- package/validation/rules/ProvidedRequiredArgumentsRule.js.flow +4 -3
- package/validation/rules/ScalarLeafsRule.js +3 -3
- package/validation/rules/ScalarLeafsRule.js.flow +0 -1
- package/validation/rules/SingleFieldSubscriptionsRule.js +1 -1
- package/validation/rules/SingleFieldSubscriptionsRule.js.flow +0 -1
- package/validation/rules/UniqueArgumentNamesRule.js +1 -1
- package/validation/rules/UniqueArgumentNamesRule.js.flow +0 -1
- package/validation/rules/UniqueDirectiveNames.js +1 -1
- package/validation/rules/UniqueDirectiveNames.js.flow +0 -1
- package/validation/rules/UniqueDirectiveNamesRule.js +2 -2
- package/validation/rules/UniqueDirectiveNamesRule.js.flow +0 -1
- package/validation/rules/UniqueDirectiveNamesRule.mjs +1 -1
- package/validation/rules/UniqueDirectivesPerLocationRule.js +4 -4
- package/validation/rules/UniqueDirectivesPerLocationRule.js.flow +0 -1
- package/validation/rules/UniqueEnumValueNames.js +1 -1
- package/validation/rules/UniqueEnumValueNames.js.flow +0 -1
- package/validation/rules/UniqueEnumValueNamesRule.js +2 -2
- package/validation/rules/UniqueEnumValueNamesRule.js.flow +7 -2
- package/validation/rules/UniqueFieldDefinitionNames.js +1 -1
- package/validation/rules/UniqueFieldDefinitionNames.js.flow +0 -1
- package/validation/rules/UniqueFieldDefinitionNamesRule.js +3 -3
- package/validation/rules/UniqueFieldDefinitionNamesRule.js.flow +13 -4
- package/validation/rules/UniqueFieldDefinitionNamesRule.mjs +1 -1
- package/validation/rules/UniqueFragmentNamesRule.js +1 -1
- package/validation/rules/UniqueFragmentNamesRule.js.flow +0 -1
- package/validation/rules/UniqueInputFieldNamesRule.js +1 -1
- package/validation/rules/UniqueInputFieldNamesRule.js.flow +0 -1
- package/validation/rules/UniqueOperationNamesRule.js +1 -1
- package/validation/rules/UniqueOperationNamesRule.js.flow +0 -1
- package/validation/rules/UniqueOperationTypes.js +1 -1
- package/validation/rules/UniqueOperationTypes.js.flow +0 -1
- package/validation/rules/UniqueOperationTypesRule.js +1 -1
- package/validation/rules/UniqueOperationTypesRule.js.flow +7 -2
- package/validation/rules/UniqueTypeNames.js +1 -1
- package/validation/rules/UniqueTypeNames.js.flow +0 -1
- package/validation/rules/UniqueTypeNamesRule.js +2 -2
- package/validation/rules/UniqueTypeNamesRule.js.flow +0 -1
- package/validation/rules/UniqueTypeNamesRule.mjs +1 -1
- package/validation/rules/UniqueVariableNamesRule.js +1 -1
- package/validation/rules/UniqueVariableNamesRule.js.flow +0 -1
- package/validation/rules/ValuesOfCorrectTypeRule.js +8 -8
- package/validation/rules/ValuesOfCorrectTypeRule.js.flow +0 -1
- package/validation/rules/VariablesAreInputTypesRule.js +4 -4
- package/validation/rules/VariablesAreInputTypesRule.js.flow +0 -1
- package/validation/rules/VariablesInAllowedPositionRule.js +6 -6
- package/validation/rules/VariablesInAllowedPositionRule.js.flow +0 -1
- package/validation/rules/custom/NoDeprecatedCustomRule.js +47 -9
- package/validation/rules/custom/NoDeprecatedCustomRule.js.flow +56 -13
- package/validation/rules/custom/NoDeprecatedCustomRule.mjs +43 -8
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +3 -3
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js.flow +0 -1
- package/validation/specifiedRules.js +33 -33
- package/validation/specifiedRules.js.flow +0 -1
- package/validation/validate.js +7 -7
- package/validation/validate.js.flow +4 -5
- package/version.js +3 -3
- package/version.js.flow +3 -4
- package/version.mjs +3 -3
- package/jsutils/isCollection.js +0 -47
- package/jsutils/isCollection.js.flow +0 -39
- package/jsutils/isCollection.mjs +0 -40
- package/polyfills/flatMap.js +0 -30
- package/polyfills/flatMap.js.flow +0 -28
- package/polyfills/flatMap.mjs +0 -23
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
// @flow strict
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
3
|
* Produces the value of a block string from its parsed raw value, similar to
|
|
5
4
|
* CoffeeScript's block string, Python's docstring trim or Ruby's strip_heredoc.
|
|
@@ -13,7 +12,7 @@ export function dedentBlockStringValue(rawString: string): string {
|
|
|
13
12
|
const lines = rawString.split(/\r\n|[\n\r]/g);
|
|
14
13
|
|
|
15
14
|
// Remove common indentation from all lines but first.
|
|
16
|
-
const commonIndent = getBlockStringIndentation(
|
|
15
|
+
const commonIndent = getBlockStringIndentation(rawString);
|
|
17
16
|
|
|
18
17
|
if (commonIndent !== 0) {
|
|
19
18
|
for (let i = 1; i < lines.length; i++) {
|
|
@@ -22,52 +21,68 @@ export function dedentBlockStringValue(rawString: string): string {
|
|
|
22
21
|
}
|
|
23
22
|
|
|
24
23
|
// Remove leading and trailing blank lines.
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
let startLine = 0;
|
|
25
|
+
while (startLine < lines.length && isBlank(lines[startLine])) {
|
|
26
|
+
++startLine;
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
|
|
29
|
+
let endLine = lines.length;
|
|
30
|
+
while (endLine > startLine && isBlank(lines[endLine - 1])) {
|
|
31
|
+
--endLine;
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
// Return a string of the lines joined with U+000A.
|
|
33
|
-
return lines.join('\n');
|
|
35
|
+
return lines.slice(startLine, endLine).join('\n');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function isBlank(str: string): boolean {
|
|
39
|
+
for (let i = 0; i < str.length; ++i) {
|
|
40
|
+
if (str[i] !== ' ' && str[i] !== '\t') {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return true;
|
|
34
46
|
}
|
|
47
|
+
|
|
35
48
|
/**
|
|
36
49
|
* @internal
|
|
37
50
|
*/
|
|
38
|
-
export function getBlockStringIndentation(
|
|
39
|
-
|
|
40
|
-
|
|
51
|
+
export function getBlockStringIndentation(value: string): number {
|
|
52
|
+
let isFirstLine = true;
|
|
53
|
+
let isEmptyLine = true;
|
|
54
|
+
let indent = 0;
|
|
41
55
|
let commonIndent = null;
|
|
42
56
|
|
|
43
|
-
for (let i =
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
57
|
+
for (let i = 0; i < value.length; ++i) {
|
|
58
|
+
switch (value.charCodeAt(i)) {
|
|
59
|
+
case 13: // \r
|
|
60
|
+
if (value.charCodeAt(i + 1) === 10) {
|
|
61
|
+
++i; // skip \r\n as one symbol
|
|
62
|
+
}
|
|
63
|
+
// falls through
|
|
64
|
+
case 10: // \n
|
|
65
|
+
isFirstLine = false;
|
|
66
|
+
isEmptyLine = true;
|
|
67
|
+
indent = 0;
|
|
53
68
|
break;
|
|
54
|
-
|
|
69
|
+
case 9: // \t
|
|
70
|
+
case 32: // <space>
|
|
71
|
+
++indent;
|
|
72
|
+
break;
|
|
73
|
+
default:
|
|
74
|
+
if (
|
|
75
|
+
isEmptyLine &&
|
|
76
|
+
!isFirstLine &&
|
|
77
|
+
(commonIndent === null || indent < commonIndent)
|
|
78
|
+
) {
|
|
79
|
+
commonIndent = indent;
|
|
80
|
+
}
|
|
81
|
+
isEmptyLine = false;
|
|
55
82
|
}
|
|
56
83
|
}
|
|
57
84
|
|
|
58
|
-
return commonIndent
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function leadingWhitespace(str) {
|
|
62
|
-
let i = 0;
|
|
63
|
-
while (i < str.length && (str[i] === ' ' || str[i] === '\t')) {
|
|
64
|
-
i++;
|
|
65
|
-
}
|
|
66
|
-
return i;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function isBlank(str) {
|
|
70
|
-
return leadingWhitespace(str) === str.length;
|
|
85
|
+
return commonIndent ?? 0;
|
|
71
86
|
}
|
|
72
87
|
|
|
73
88
|
/**
|
|
@@ -79,8 +94,8 @@ function isBlank(str) {
|
|
|
79
94
|
*/
|
|
80
95
|
export function printBlockString(
|
|
81
96
|
value: string,
|
|
82
|
-
indentation
|
|
83
|
-
preferMultipleLines
|
|
97
|
+
indentation: string = '',
|
|
98
|
+
preferMultipleLines: boolean = false,
|
|
84
99
|
): string {
|
|
85
100
|
const isSingleLine = value.indexOf('\n') === -1;
|
|
86
101
|
const hasLeadingSpace = value[0] === ' ' || value[0] === '\t';
|
package/language/blockString.mjs
CHANGED
|
@@ -10,7 +10,7 @@ export function dedentBlockStringValue(rawString) {
|
|
|
10
10
|
// Expand a block string's raw value into independent lines.
|
|
11
11
|
var lines = rawString.split(/\r\n|[\n\r]/g); // Remove common indentation from all lines but first.
|
|
12
12
|
|
|
13
|
-
var commonIndent = getBlockStringIndentation(
|
|
13
|
+
var commonIndent = getBlockStringIndentation(rawString);
|
|
14
14
|
|
|
15
15
|
if (commonIndent !== 0) {
|
|
16
16
|
for (var i = 1; i < lines.length; i++) {
|
|
@@ -19,56 +19,78 @@ export function dedentBlockStringValue(rawString) {
|
|
|
19
19
|
} // Remove leading and trailing blank lines.
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
var startLine = 0;
|
|
23
|
+
|
|
24
|
+
while (startLine < lines.length && isBlank(lines[startLine])) {
|
|
25
|
+
++startLine;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
var endLine = lines.length;
|
|
29
|
+
|
|
30
|
+
while (endLine > startLine && isBlank(lines[endLine - 1])) {
|
|
31
|
+
--endLine;
|
|
28
32
|
} // Return a string of the lines joined with U+000A.
|
|
29
33
|
|
|
30
34
|
|
|
31
|
-
return lines.join('\n');
|
|
35
|
+
return lines.slice(startLine, endLine).join('\n');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function isBlank(str) {
|
|
39
|
+
for (var i = 0; i < str.length; ++i) {
|
|
40
|
+
if (str[i] !== ' ' && str[i] !== '\t') {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return true;
|
|
32
46
|
}
|
|
33
47
|
/**
|
|
34
48
|
* @internal
|
|
35
49
|
*/
|
|
36
50
|
|
|
37
|
-
export function getBlockStringIndentation(lines) {
|
|
38
|
-
var commonIndent = null;
|
|
39
51
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
var indent = leadingWhitespace(line);
|
|
43
|
-
|
|
44
|
-
if (indent === line.length) {
|
|
45
|
-
continue; // skip empty lines
|
|
46
|
-
}
|
|
52
|
+
export function getBlockStringIndentation(value) {
|
|
53
|
+
var _commonIndent;
|
|
47
54
|
|
|
48
|
-
|
|
49
|
-
|
|
55
|
+
var isFirstLine = true;
|
|
56
|
+
var isEmptyLine = true;
|
|
57
|
+
var indent = 0;
|
|
58
|
+
var commonIndent = null;
|
|
50
59
|
|
|
51
|
-
|
|
60
|
+
for (var i = 0; i < value.length; ++i) {
|
|
61
|
+
switch (value.charCodeAt(i)) {
|
|
62
|
+
case 13:
|
|
63
|
+
// \r
|
|
64
|
+
if (value.charCodeAt(i + 1) === 10) {
|
|
65
|
+
++i; // skip \r\n as one symbol
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// falls through
|
|
69
|
+
|
|
70
|
+
case 10:
|
|
71
|
+
// \n
|
|
72
|
+
isFirstLine = false;
|
|
73
|
+
isEmptyLine = true;
|
|
74
|
+
indent = 0;
|
|
52
75
|
break;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
76
|
|
|
57
|
-
|
|
58
|
-
}
|
|
77
|
+
case 9: // \t
|
|
59
78
|
|
|
60
|
-
|
|
61
|
-
|
|
79
|
+
case 32:
|
|
80
|
+
// <space>
|
|
81
|
+
++indent;
|
|
82
|
+
break;
|
|
62
83
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
84
|
+
default:
|
|
85
|
+
if (isEmptyLine && !isFirstLine && (commonIndent === null || indent < commonIndent)) {
|
|
86
|
+
commonIndent = indent;
|
|
87
|
+
}
|
|
66
88
|
|
|
67
|
-
|
|
68
|
-
}
|
|
89
|
+
isEmptyLine = false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
69
92
|
|
|
70
|
-
|
|
71
|
-
return leadingWhitespace(str) === str.length;
|
|
93
|
+
return (_commonIndent = commonIndent) !== null && _commonIndent !== void 0 ? _commonIndent : 0;
|
|
72
94
|
}
|
|
73
95
|
/**
|
|
74
96
|
* Print a block string in the indented block form by adding a leading and
|
|
@@ -78,7 +100,6 @@ function isBlank(str) {
|
|
|
78
100
|
* @internal
|
|
79
101
|
*/
|
|
80
102
|
|
|
81
|
-
|
|
82
103
|
export function printBlockString(value) {
|
|
83
104
|
var indentation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
84
105
|
var preferMultipleLines = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|