@vcollab/yaml-language-server-tag-validation 1.22.0
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/CHANGELOG.md +712 -0
- package/CONTRIBUTING.md +8 -0
- package/DCO +37 -0
- package/Dockerfile +11 -0
- package/LICENSE +21 -0
- package/README.md +475 -0
- package/bin/yaml-language-server +27 -0
- package/docs/scalaruri-custom-tags.md +269 -0
- package/l10n/bundle.l10n.de.json +62 -0
- package/l10n/bundle.l10n.fr.json +62 -0
- package/l10n/bundle.l10n.ja.json +62 -0
- package/l10n/bundle.l10n.json +61 -0
- package/l10n/bundle.l10n.ko.json +62 -0
- package/l10n/bundle.l10n.zh-cn.json +62 -0
- package/l10n/bundle.l10n.zh-tw.json +62 -0
- package/lib/esm/commands.d.ts +3 -0
- package/lib/esm/commands.js +9 -0
- package/lib/esm/commands.js.map +1 -0
- package/lib/esm/index.d.ts +3 -0
- package/lib/esm/index.js +4 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/languageserver/commandExecutor.d.ts +10 -0
- package/lib/esm/languageserver/commandExecutor.js +21 -0
- package/lib/esm/languageserver/commandExecutor.js.map +1 -0
- package/lib/esm/languageserver/handlers/languageHandlers.d.ts +61 -0
- package/lib/esm/languageserver/handlers/languageHandlers.js +236 -0
- package/lib/esm/languageserver/handlers/languageHandlers.js.map +1 -0
- package/lib/esm/languageserver/handlers/notificationHandlers.d.ts +29 -0
- package/lib/esm/languageserver/handlers/notificationHandlers.js +46 -0
- package/lib/esm/languageserver/handlers/notificationHandlers.js.map +1 -0
- package/lib/esm/languageserver/handlers/requestHandlers.d.ts +9 -0
- package/lib/esm/languageserver/handlers/requestHandlers.js +23 -0
- package/lib/esm/languageserver/handlers/requestHandlers.js.map +1 -0
- package/lib/esm/languageserver/handlers/schemaSelectionHandlers.d.ts +13 -0
- package/lib/esm/languageserver/handlers/schemaSelectionHandlers.js +72 -0
- package/lib/esm/languageserver/handlers/schemaSelectionHandlers.js.map +1 -0
- package/lib/esm/languageserver/handlers/settingsHandlers.d.ts +42 -0
- package/lib/esm/languageserver/handlers/settingsHandlers.js +316 -0
- package/lib/esm/languageserver/handlers/settingsHandlers.js.map +1 -0
- package/lib/esm/languageserver/handlers/validationHandlers.d.ts +15 -0
- package/lib/esm/languageserver/handlers/validationHandlers.js +108 -0
- package/lib/esm/languageserver/handlers/validationHandlers.js.map +1 -0
- package/lib/esm/languageserver/handlers/workspaceHandlers.d.ts +9 -0
- package/lib/esm/languageserver/handlers/workspaceHandlers.js +17 -0
- package/lib/esm/languageserver/handlers/workspaceHandlers.js.map +1 -0
- package/lib/esm/languageserver/telemetry.d.ts +9 -0
- package/lib/esm/languageserver/telemetry.js +20 -0
- package/lib/esm/languageserver/telemetry.js.map +1 -0
- package/lib/esm/languageservice/jsonASTTypes.d.ts +49 -0
- package/lib/esm/languageservice/jsonASTTypes.js +6 -0
- package/lib/esm/languageservice/jsonASTTypes.js.map +1 -0
- package/lib/esm/languageservice/jsonSchema.d.ts +103 -0
- package/lib/esm/languageservice/jsonSchema.js +12 -0
- package/lib/esm/languageservice/jsonSchema.js.map +1 -0
- package/lib/esm/languageservice/parser/ast-converter.d.ts +11 -0
- package/lib/esm/languageservice/parser/ast-converter.js +176 -0
- package/lib/esm/languageservice/parser/ast-converter.js.map +1 -0
- package/lib/esm/languageservice/parser/astNodeUtils.d.ts +4 -0
- package/lib/esm/languageservice/parser/astNodeUtils.js +48 -0
- package/lib/esm/languageservice/parser/astNodeUtils.js.map +1 -0
- package/lib/esm/languageservice/parser/custom-tag-provider.d.ts +7 -0
- package/lib/esm/languageservice/parser/custom-tag-provider.js +58 -0
- package/lib/esm/languageservice/parser/custom-tag-provider.js.map +1 -0
- package/lib/esm/languageservice/parser/isKubernetes.d.ts +4 -0
- package/lib/esm/languageservice/parser/isKubernetes.js +17 -0
- package/lib/esm/languageservice/parser/isKubernetes.js.map +1 -0
- package/lib/esm/languageservice/parser/jsonDocument.d.ts +83 -0
- package/lib/esm/languageservice/parser/jsonDocument.js +171 -0
- package/lib/esm/languageservice/parser/jsonDocument.js.map +1 -0
- package/lib/esm/languageservice/parser/scalar-type.d.ts +8 -0
- package/lib/esm/languageservice/parser/scalar-type.js +17 -0
- package/lib/esm/languageservice/parser/scalar-type.js.map +1 -0
- package/lib/esm/languageservice/parser/schemaValidation/baseValidator.d.ts +124 -0
- package/lib/esm/languageservice/parser/schemaValidation/baseValidator.js +1254 -0
- package/lib/esm/languageservice/parser/schemaValidation/baseValidator.js.map +1 -0
- package/lib/esm/languageservice/parser/schemaValidation/draft04Validator.d.ts +17 -0
- package/lib/esm/languageservice/parser/schemaValidation/draft04Validator.js +30 -0
- package/lib/esm/languageservice/parser/schemaValidation/draft04Validator.js.map +1 -0
- package/lib/esm/languageservice/parser/schemaValidation/draft07Validator.d.ts +15 -0
- package/lib/esm/languageservice/parser/schemaValidation/draft07Validator.js +28 -0
- package/lib/esm/languageservice/parser/schemaValidation/draft07Validator.js.map +1 -0
- package/lib/esm/languageservice/parser/schemaValidation/draft2019Validator.d.ts +28 -0
- package/lib/esm/languageservice/parser/schemaValidation/draft2019Validator.js +224 -0
- package/lib/esm/languageservice/parser/schemaValidation/draft2019Validator.js.map +1 -0
- package/lib/esm/languageservice/parser/schemaValidation/draft2020Validator.d.ts +17 -0
- package/lib/esm/languageservice/parser/schemaValidation/draft2020Validator.js +126 -0
- package/lib/esm/languageservice/parser/schemaValidation/draft2020Validator.js.map +1 -0
- package/lib/esm/languageservice/parser/schemaValidation/validatorFactory.d.ts +3 -0
- package/lib/esm/languageservice/parser/schemaValidation/validatorFactory.js +24 -0
- package/lib/esm/languageservice/parser/schemaValidation/validatorFactory.js.map +1 -0
- package/lib/esm/languageservice/parser/yaml-documents.d.ts +71 -0
- package/lib/esm/languageservice/parser/yaml-documents.js +258 -0
- package/lib/esm/languageservice/parser/yaml-documents.js.map +1 -0
- package/lib/esm/languageservice/parser/yamlParser07.d.ts +15 -0
- package/lib/esm/languageservice/parser/yamlParser07.js +50 -0
- package/lib/esm/languageservice/parser/yamlParser07.js.map +1 -0
- package/lib/esm/languageservice/services/crdUtil.d.ts +23 -0
- package/lib/esm/languageservice/services/crdUtil.js +74 -0
- package/lib/esm/languageservice/services/crdUtil.js.map +1 -0
- package/lib/esm/languageservice/services/documentSymbols.d.ts +12 -0
- package/lib/esm/languageservice/services/documentSymbols.js +67 -0
- package/lib/esm/languageservice/services/documentSymbols.js.map +1 -0
- package/lib/esm/languageservice/services/modelineUtil.d.ts +9 -0
- package/lib/esm/languageservice/services/modelineUtil.js +29 -0
- package/lib/esm/languageservice/services/modelineUtil.js.map +1 -0
- package/lib/esm/languageservice/services/schemaRequestHandler.d.ts +12 -0
- package/lib/esm/languageservice/services/schemaRequestHandler.js +84 -0
- package/lib/esm/languageservice/services/schemaRequestHandler.js.map +1 -0
- package/lib/esm/languageservice/services/validation/map-key-order.d.ts +7 -0
- package/lib/esm/languageservice/services/validation/map-key-order.js +35 -0
- package/lib/esm/languageservice/services/validation/map-key-order.js.map +1 -0
- package/lib/esm/languageservice/services/validation/types.d.ts +6 -0
- package/lib/esm/languageservice/services/validation/types.js +6 -0
- package/lib/esm/languageservice/services/validation/types.js.map +1 -0
- package/lib/esm/languageservice/services/validation/unused-anchors.d.ts +8 -0
- package/lib/esm/languageservice/services/validation/unused-anchors.js +91 -0
- package/lib/esm/languageservice/services/validation/unused-anchors.js.map +1 -0
- package/lib/esm/languageservice/services/validation/yaml-style.d.ts +12 -0
- package/lib/esm/languageservice/services/validation/yaml-style.js +28 -0
- package/lib/esm/languageservice/services/validation/yaml-style.js.map +1 -0
- package/lib/esm/languageservice/services/yamlCodeActions.d.ts +25 -0
- package/lib/esm/languageservice/services/yamlCodeActions.js +342 -0
- package/lib/esm/languageservice/services/yamlCodeActions.js.map +1 -0
- package/lib/esm/languageservice/services/yamlCodeLens.d.ts +11 -0
- package/lib/esm/languageservice/services/yamlCodeLens.js +46 -0
- package/lib/esm/languageservice/services/yamlCodeLens.js.map +1 -0
- package/lib/esm/languageservice/services/yamlCommands.d.ts +3 -0
- package/lib/esm/languageservice/services/yamlCommands.js +46 -0
- package/lib/esm/languageservice/services/yamlCommands.js.map +1 -0
- package/lib/esm/languageservice/services/yamlCompletion.d.ts +77 -0
- package/lib/esm/languageservice/services/yamlCompletion.js +1501 -0
- package/lib/esm/languageservice/services/yamlCompletion.js.map +1 -0
- package/lib/esm/languageservice/services/yamlDefinition.d.ts +9 -0
- package/lib/esm/languageservice/services/yamlDefinition.js +37 -0
- package/lib/esm/languageservice/services/yamlDefinition.js.map +1 -0
- package/lib/esm/languageservice/services/yamlFolding.d.ts +4 -0
- package/lib/esm/languageservice/services/yamlFolding.js +62 -0
- package/lib/esm/languageservice/services/yamlFolding.js.map +1 -0
- package/lib/esm/languageservice/services/yamlFormatter.d.ts +8 -0
- package/lib/esm/languageservice/services/yamlFormatter.js +46 -0
- package/lib/esm/languageservice/services/yamlFormatter.js.map +1 -0
- package/lib/esm/languageservice/services/yamlHover.d.ts +47 -0
- package/lib/esm/languageservice/services/yamlHover.js +366 -0
- package/lib/esm/languageservice/services/yamlHover.js.map +1 -0
- package/lib/esm/languageservice/services/yamlLinks.d.ts +8 -0
- package/lib/esm/languageservice/services/yamlLinks.js +27 -0
- package/lib/esm/languageservice/services/yamlLinks.js.map +1 -0
- package/lib/esm/languageservice/services/yamlOnTypeFormatting.d.ts +4 -0
- package/lib/esm/languageservice/services/yamlOnTypeFormatting.js +43 -0
- package/lib/esm/languageservice/services/yamlOnTypeFormatting.js.map +1 -0
- package/lib/esm/languageservice/services/yamlRename.d.ts +18 -0
- package/lib/esm/languageservice/services/yamlRename.js +184 -0
- package/lib/esm/languageservice/services/yamlRename.js.map +1 -0
- package/lib/esm/languageservice/services/yamlSchemaService.d.ts +99 -0
- package/lib/esm/languageservice/services/yamlSchemaService.js +1110 -0
- package/lib/esm/languageservice/services/yamlSchemaService.js.map +1 -0
- package/lib/esm/languageservice/services/yamlSelectionRanges.d.ts +3 -0
- package/lib/esm/languageservice/services/yamlSelectionRanges.js +130 -0
- package/lib/esm/languageservice/services/yamlSelectionRanges.js.map +1 -0
- package/lib/esm/languageservice/services/yamlValidation.d.ts +26 -0
- package/lib/esm/languageservice/services/yamlValidation.js +135 -0
- package/lib/esm/languageservice/services/yamlValidation.js.map +1 -0
- package/lib/esm/languageservice/telemetry.d.ts +16 -0
- package/lib/esm/languageservice/telemetry.js +6 -0
- package/lib/esm/languageservice/telemetry.js.map +1 -0
- package/lib/esm/languageservice/utils/arrUtils.d.ts +6 -0
- package/lib/esm/languageservice/utils/arrUtils.js +81 -0
- package/lib/esm/languageservice/utils/arrUtils.js.map +1 -0
- package/lib/esm/languageservice/utils/block-string-rewriter.d.ts +8 -0
- package/lib/esm/languageservice/utils/block-string-rewriter.js +215 -0
- package/lib/esm/languageservice/utils/block-string-rewriter.js.map +1 -0
- package/lib/esm/languageservice/utils/charCode.d.ts +415 -0
- package/lib/esm/languageservice/utils/charCode.js +6 -0
- package/lib/esm/languageservice/utils/charCode.js.map +1 -0
- package/lib/esm/languageservice/utils/diagnostic-filter.d.ts +50 -0
- package/lib/esm/languageservice/utils/diagnostic-filter.js +82 -0
- package/lib/esm/languageservice/utils/diagnostic-filter.js.map +1 -0
- package/lib/esm/languageservice/utils/documentPositionCalculator.d.ts +5 -0
- package/lib/esm/languageservice/utils/documentPositionCalculator.js +56 -0
- package/lib/esm/languageservice/utils/documentPositionCalculator.js.map +1 -0
- package/lib/esm/languageservice/utils/filePatternAssociation.d.ts +8 -0
- package/lib/esm/languageservice/utils/filePatternAssociation.js +23 -0
- package/lib/esm/languageservice/utils/filePatternAssociation.js.map +1 -0
- package/lib/esm/languageservice/utils/flow-style-rewriter.d.ts +6 -0
- package/lib/esm/languageservice/utils/flow-style-rewriter.js +53 -0
- package/lib/esm/languageservice/utils/flow-style-rewriter.js.map +1 -0
- package/lib/esm/languageservice/utils/indentationGuesser.d.ts +15 -0
- package/lib/esm/languageservice/utils/indentationGuesser.js +176 -0
- package/lib/esm/languageservice/utils/indentationGuesser.js.map +1 -0
- package/lib/esm/languageservice/utils/json.d.ts +11 -0
- package/lib/esm/languageservice/utils/json.js +79 -0
- package/lib/esm/languageservice/utils/json.js.map +1 -0
- package/lib/esm/languageservice/utils/math.d.ts +1 -0
- package/lib/esm/languageservice/utils/math.js +9 -0
- package/lib/esm/languageservice/utils/math.js.map +1 -0
- package/lib/esm/languageservice/utils/objects.d.ts +16 -0
- package/lib/esm/languageservice/utils/objects.js +92 -0
- package/lib/esm/languageservice/utils/objects.js.map +1 -0
- package/lib/esm/languageservice/utils/parseUtils.d.ts +17 -0
- package/lib/esm/languageservice/utils/parseUtils.js +2 -0
- package/lib/esm/languageservice/utils/parseUtils.js.map +1 -0
- package/lib/esm/languageservice/utils/paths.d.ts +5 -0
- package/lib/esm/languageservice/utils/paths.js +42 -0
- package/lib/esm/languageservice/utils/paths.js.map +1 -0
- package/lib/esm/languageservice/utils/schemaUrls.d.ts +14 -0
- package/lib/esm/languageservice/utils/schemaUrls.js +59 -0
- package/lib/esm/languageservice/utils/schemaUrls.js.map +1 -0
- package/lib/esm/languageservice/utils/schemaUtils.d.ts +19 -0
- package/lib/esm/languageservice/utils/schemaUtils.js +62 -0
- package/lib/esm/languageservice/utils/schemaUtils.js.map +1 -0
- package/lib/esm/languageservice/utils/strings.d.ts +10 -0
- package/lib/esm/languageservice/utils/strings.js +79 -0
- package/lib/esm/languageservice/utils/strings.js.map +1 -0
- package/lib/esm/languageservice/utils/textBuffer.d.ts +12 -0
- package/lib/esm/languageservice/utils/textBuffer.js +45 -0
- package/lib/esm/languageservice/utils/textBuffer.js.map +1 -0
- package/lib/esm/languageservice/utils/yamlAstUtils.d.ts +13 -0
- package/lib/esm/languageservice/utils/yamlAstUtils.js +108 -0
- package/lib/esm/languageservice/utils/yamlAstUtils.js.map +1 -0
- package/lib/esm/languageservice/utils/yamlScalar.d.ts +1 -0
- package/lib/esm/languageservice/utils/yamlScalar.js +69 -0
- package/lib/esm/languageservice/utils/yamlScalar.js.map +1 -0
- package/lib/esm/languageservice/yamlLanguageService.d.ts +135 -0
- package/lib/esm/languageservice/yamlLanguageService.js +101 -0
- package/lib/esm/languageservice/yamlLanguageService.js.map +1 -0
- package/lib/esm/languageservice/yamlTypes.d.ts +18 -0
- package/lib/esm/languageservice/yamlTypes.js +6 -0
- package/lib/esm/languageservice/yamlTypes.js.map +1 -0
- package/lib/esm/nodeTranslationSetup.d.ts +9 -0
- package/lib/esm/nodeTranslationSetup.js +34 -0
- package/lib/esm/nodeTranslationSetup.js.map +1 -0
- package/lib/esm/requestTypes.d.ts +63 -0
- package/lib/esm/requestTypes.js +46 -0
- package/lib/esm/requestTypes.js.map +1 -0
- package/lib/esm/server.d.ts +1 -0
- package/lib/esm/server.js +55 -0
- package/lib/esm/server.js.map +1 -0
- package/lib/esm/webworker/yamlServerMain.d.ts +1 -0
- package/lib/esm/webworker/yamlServerMain.js +40 -0
- package/lib/esm/webworker/yamlServerMain.js.map +1 -0
- package/lib/esm/yamlServerInit.d.ts +23 -0
- package/lib/esm/yamlServerInit.js +123 -0
- package/lib/esm/yamlServerInit.js.map +1 -0
- package/lib/esm/yamlSettings.d.ts +112 -0
- package/lib/esm/yamlSettings.js +69 -0
- package/lib/esm/yamlSettings.js.map +1 -0
- package/lib/umd/commands.d.ts +3 -0
- package/lib/umd/commands.js +22 -0
- package/lib/umd/commands.js.map +1 -0
- package/lib/umd/index.d.ts +3 -0
- package/lib/umd/index.js +32 -0
- package/lib/umd/index.js.map +1 -0
- package/lib/umd/languageserver/commandExecutor.d.ts +10 -0
- package/lib/umd/languageserver/commandExecutor.js +35 -0
- package/lib/umd/languageserver/commandExecutor.js.map +1 -0
- package/lib/umd/languageserver/handlers/languageHandlers.d.ts +61 -0
- package/lib/umd/languageserver/handlers/languageHandlers.js +250 -0
- package/lib/umd/languageserver/handlers/languageHandlers.js.map +1 -0
- package/lib/umd/languageserver/handlers/notificationHandlers.d.ts +29 -0
- package/lib/umd/languageserver/handlers/notificationHandlers.js +60 -0
- package/lib/umd/languageserver/handlers/notificationHandlers.js.map +1 -0
- package/lib/umd/languageserver/handlers/requestHandlers.d.ts +9 -0
- package/lib/umd/languageserver/handlers/requestHandlers.js +37 -0
- package/lib/umd/languageserver/handlers/requestHandlers.js.map +1 -0
- package/lib/umd/languageserver/handlers/schemaSelectionHandlers.d.ts +13 -0
- package/lib/umd/languageserver/handlers/schemaSelectionHandlers.js +86 -0
- package/lib/umd/languageserver/handlers/schemaSelectionHandlers.js.map +1 -0
- package/lib/umd/languageserver/handlers/settingsHandlers.d.ts +42 -0
- package/lib/umd/languageserver/handlers/settingsHandlers.js +330 -0
- package/lib/umd/languageserver/handlers/settingsHandlers.js.map +1 -0
- package/lib/umd/languageserver/handlers/validationHandlers.d.ts +15 -0
- package/lib/umd/languageserver/handlers/validationHandlers.js +122 -0
- package/lib/umd/languageserver/handlers/validationHandlers.js.map +1 -0
- package/lib/umd/languageserver/handlers/workspaceHandlers.d.ts +9 -0
- package/lib/umd/languageserver/handlers/workspaceHandlers.js +31 -0
- package/lib/umd/languageserver/handlers/workspaceHandlers.js.map +1 -0
- package/lib/umd/languageserver/telemetry.d.ts +9 -0
- package/lib/umd/languageserver/telemetry.js +34 -0
- package/lib/umd/languageserver/telemetry.js.map +1 -0
- package/lib/umd/languageservice/jsonASTTypes.d.ts +49 -0
- package/lib/umd/languageservice/jsonASTTypes.js +17 -0
- package/lib/umd/languageservice/jsonASTTypes.js.map +1 -0
- package/lib/umd/languageservice/jsonSchema.d.ts +103 -0
- package/lib/umd/languageservice/jsonSchema.js +25 -0
- package/lib/umd/languageservice/jsonSchema.js.map +1 -0
- package/lib/umd/languageservice/parser/ast-converter.d.ts +11 -0
- package/lib/umd/languageservice/parser/ast-converter.js +191 -0
- package/lib/umd/languageservice/parser/ast-converter.js.map +1 -0
- package/lib/umd/languageservice/parser/astNodeUtils.d.ts +4 -0
- package/lib/umd/languageservice/parser/astNodeUtils.js +64 -0
- package/lib/umd/languageservice/parser/astNodeUtils.js.map +1 -0
- package/lib/umd/languageservice/parser/custom-tag-provider.d.ts +7 -0
- package/lib/umd/languageservice/parser/custom-tag-provider.js +72 -0
- package/lib/umd/languageservice/parser/custom-tag-provider.js.map +1 -0
- package/lib/umd/languageservice/parser/isKubernetes.d.ts +4 -0
- package/lib/umd/languageservice/parser/isKubernetes.js +32 -0
- package/lib/umd/languageservice/parser/isKubernetes.js.map +1 -0
- package/lib/umd/languageservice/parser/jsonDocument.d.ts +83 -0
- package/lib/umd/languageservice/parser/jsonDocument.js +193 -0
- package/lib/umd/languageservice/parser/jsonDocument.js.map +1 -0
- package/lib/umd/languageservice/parser/scalar-type.d.ts +8 -0
- package/lib/umd/languageservice/parser/scalar-type.js +31 -0
- package/lib/umd/languageservice/parser/scalar-type.js.map +1 -0
- package/lib/umd/languageservice/parser/schemaValidation/baseValidator.d.ts +124 -0
- package/lib/umd/languageservice/parser/schemaValidation/baseValidator.js +1270 -0
- package/lib/umd/languageservice/parser/schemaValidation/baseValidator.js.map +1 -0
- package/lib/umd/languageservice/parser/schemaValidation/draft04Validator.d.ts +17 -0
- package/lib/umd/languageservice/parser/schemaValidation/draft04Validator.js +44 -0
- package/lib/umd/languageservice/parser/schemaValidation/draft04Validator.js.map +1 -0
- package/lib/umd/languageservice/parser/schemaValidation/draft07Validator.d.ts +15 -0
- package/lib/umd/languageservice/parser/schemaValidation/draft07Validator.js +42 -0
- package/lib/umd/languageservice/parser/schemaValidation/draft07Validator.js.map +1 -0
- package/lib/umd/languageservice/parser/schemaValidation/draft2019Validator.d.ts +28 -0
- package/lib/umd/languageservice/parser/schemaValidation/draft2019Validator.js +238 -0
- package/lib/umd/languageservice/parser/schemaValidation/draft2019Validator.js.map +1 -0
- package/lib/umd/languageservice/parser/schemaValidation/draft2020Validator.d.ts +17 -0
- package/lib/umd/languageservice/parser/schemaValidation/draft2020Validator.js +140 -0
- package/lib/umd/languageservice/parser/schemaValidation/draft2020Validator.js.map +1 -0
- package/lib/umd/languageservice/parser/schemaValidation/validatorFactory.d.ts +3 -0
- package/lib/umd/languageservice/parser/schemaValidation/validatorFactory.js +38 -0
- package/lib/umd/languageservice/parser/schemaValidation/validatorFactory.js.map +1 -0
- package/lib/umd/languageservice/parser/yaml-documents.d.ts +71 -0
- package/lib/umd/languageservice/parser/yaml-documents.js +274 -0
- package/lib/umd/languageservice/parser/yaml-documents.js.map +1 -0
- package/lib/umd/languageservice/parser/yamlParser07.d.ts +15 -0
- package/lib/umd/languageservice/parser/yamlParser07.js +65 -0
- package/lib/umd/languageservice/parser/yamlParser07.js.map +1 -0
- package/lib/umd/languageservice/services/crdUtil.d.ts +23 -0
- package/lib/umd/languageservice/services/crdUtil.js +89 -0
- package/lib/umd/languageservice/services/crdUtil.js.map +1 -0
- package/lib/umd/languageservice/services/documentSymbols.d.ts +12 -0
- package/lib/umd/languageservice/services/documentSymbols.js +81 -0
- package/lib/umd/languageservice/services/documentSymbols.js.map +1 -0
- package/lib/umd/languageservice/services/modelineUtil.d.ts +9 -0
- package/lib/umd/languageservice/services/modelineUtil.js +44 -0
- package/lib/umd/languageservice/services/modelineUtil.js.map +1 -0
- package/lib/umd/languageservice/services/schemaRequestHandler.d.ts +12 -0
- package/lib/umd/languageservice/services/schemaRequestHandler.js +98 -0
- package/lib/umd/languageservice/services/schemaRequestHandler.js.map +1 -0
- package/lib/umd/languageservice/services/validation/map-key-order.d.ts +7 -0
- package/lib/umd/languageservice/services/validation/map-key-order.js +49 -0
- package/lib/umd/languageservice/services/validation/map-key-order.js.map +1 -0
- package/lib/umd/languageservice/services/validation/types.d.ts +6 -0
- package/lib/umd/languageservice/services/validation/types.js +17 -0
- package/lib/umd/languageservice/services/validation/types.js.map +1 -0
- package/lib/umd/languageservice/services/validation/unused-anchors.d.ts +8 -0
- package/lib/umd/languageservice/services/validation/unused-anchors.js +105 -0
- package/lib/umd/languageservice/services/validation/unused-anchors.js.map +1 -0
- package/lib/umd/languageservice/services/validation/yaml-style.d.ts +12 -0
- package/lib/umd/languageservice/services/validation/yaml-style.js +42 -0
- package/lib/umd/languageservice/services/validation/yaml-style.js.map +1 -0
- package/lib/umd/languageservice/services/yamlCodeActions.d.ts +25 -0
- package/lib/umd/languageservice/services/yamlCodeActions.js +356 -0
- package/lib/umd/languageservice/services/yamlCodeActions.js.map +1 -0
- package/lib/umd/languageservice/services/yamlCodeLens.d.ts +11 -0
- package/lib/umd/languageservice/services/yamlCodeLens.js +60 -0
- package/lib/umd/languageservice/services/yamlCodeLens.js.map +1 -0
- package/lib/umd/languageservice/services/yamlCommands.d.ts +3 -0
- package/lib/umd/languageservice/services/yamlCommands.js +60 -0
- package/lib/umd/languageservice/services/yamlCommands.js.map +1 -0
- package/lib/umd/languageservice/services/yamlCompletion.d.ts +77 -0
- package/lib/umd/languageservice/services/yamlCompletion.js +1515 -0
- package/lib/umd/languageservice/services/yamlCompletion.js.map +1 -0
- package/lib/umd/languageservice/services/yamlDefinition.d.ts +9 -0
- package/lib/umd/languageservice/services/yamlDefinition.js +51 -0
- package/lib/umd/languageservice/services/yamlDefinition.js.map +1 -0
- package/lib/umd/languageservice/services/yamlFolding.d.ts +4 -0
- package/lib/umd/languageservice/services/yamlFolding.js +76 -0
- package/lib/umd/languageservice/services/yamlFolding.js.map +1 -0
- package/lib/umd/languageservice/services/yamlFormatter.d.ts +8 -0
- package/lib/umd/languageservice/services/yamlFormatter.js +60 -0
- package/lib/umd/languageservice/services/yamlFormatter.js.map +1 -0
- package/lib/umd/languageservice/services/yamlHover.d.ts +47 -0
- package/lib/umd/languageservice/services/yamlHover.js +380 -0
- package/lib/umd/languageservice/services/yamlHover.js.map +1 -0
- package/lib/umd/languageservice/services/yamlLinks.d.ts +8 -0
- package/lib/umd/languageservice/services/yamlLinks.js +41 -0
- package/lib/umd/languageservice/services/yamlLinks.js.map +1 -0
- package/lib/umd/languageservice/services/yamlOnTypeFormatting.d.ts +4 -0
- package/lib/umd/languageservice/services/yamlOnTypeFormatting.js +57 -0
- package/lib/umd/languageservice/services/yamlOnTypeFormatting.js.map +1 -0
- package/lib/umd/languageservice/services/yamlRename.d.ts +18 -0
- package/lib/umd/languageservice/services/yamlRename.js +198 -0
- package/lib/umd/languageservice/services/yamlRename.js.map +1 -0
- package/lib/umd/languageservice/services/yamlSchemaService.d.ts +99 -0
- package/lib/umd/languageservice/services/yamlSchemaService.js +1124 -0
- package/lib/umd/languageservice/services/yamlSchemaService.js.map +1 -0
- package/lib/umd/languageservice/services/yamlSelectionRanges.d.ts +3 -0
- package/lib/umd/languageservice/services/yamlSelectionRanges.js +144 -0
- package/lib/umd/languageservice/services/yamlSelectionRanges.js.map +1 -0
- package/lib/umd/languageservice/services/yamlValidation.d.ts +26 -0
- package/lib/umd/languageservice/services/yamlValidation.js +150 -0
- package/lib/umd/languageservice/services/yamlValidation.js.map +1 -0
- package/lib/umd/languageservice/telemetry.d.ts +16 -0
- package/lib/umd/languageservice/telemetry.js +17 -0
- package/lib/umd/languageservice/telemetry.js.map +1 -0
- package/lib/umd/languageservice/utils/arrUtils.d.ts +6 -0
- package/lib/umd/languageservice/utils/arrUtils.js +99 -0
- package/lib/umd/languageservice/utils/arrUtils.js.map +1 -0
- package/lib/umd/languageservice/utils/block-string-rewriter.d.ts +8 -0
- package/lib/umd/languageservice/utils/block-string-rewriter.js +229 -0
- package/lib/umd/languageservice/utils/block-string-rewriter.js.map +1 -0
- package/lib/umd/languageservice/utils/charCode.d.ts +415 -0
- package/lib/umd/languageservice/utils/charCode.js +17 -0
- package/lib/umd/languageservice/utils/charCode.js.map +1 -0
- package/lib/umd/languageservice/utils/diagnostic-filter.d.ts +50 -0
- package/lib/umd/languageservice/utils/diagnostic-filter.js +98 -0
- package/lib/umd/languageservice/utils/diagnostic-filter.js.map +1 -0
- package/lib/umd/languageservice/utils/documentPositionCalculator.d.ts +5 -0
- package/lib/umd/languageservice/utils/documentPositionCalculator.js +73 -0
- package/lib/umd/languageservice/utils/documentPositionCalculator.js.map +1 -0
- package/lib/umd/languageservice/utils/filePatternAssociation.d.ts +8 -0
- package/lib/umd/languageservice/utils/filePatternAssociation.js +37 -0
- package/lib/umd/languageservice/utils/filePatternAssociation.js.map +1 -0
- package/lib/umd/languageservice/utils/flow-style-rewriter.d.ts +6 -0
- package/lib/umd/languageservice/utils/flow-style-rewriter.js +67 -0
- package/lib/umd/languageservice/utils/flow-style-rewriter.js.map +1 -0
- package/lib/umd/languageservice/utils/indentationGuesser.d.ts +15 -0
- package/lib/umd/languageservice/utils/indentationGuesser.js +190 -0
- package/lib/umd/languageservice/utils/indentationGuesser.js.map +1 -0
- package/lib/umd/languageservice/utils/json.d.ts +11 -0
- package/lib/umd/languageservice/utils/json.js +93 -0
- package/lib/umd/languageservice/utils/json.js.map +1 -0
- package/lib/umd/languageservice/utils/math.d.ts +1 -0
- package/lib/umd/languageservice/utils/math.js +23 -0
- package/lib/umd/languageservice/utils/math.js.map +1 -0
- package/lib/umd/languageservice/utils/objects.d.ts +16 -0
- package/lib/umd/languageservice/utils/objects.js +112 -0
- package/lib/umd/languageservice/utils/objects.js.map +1 -0
- package/lib/umd/languageservice/utils/parseUtils.d.ts +17 -0
- package/lib/umd/languageservice/utils/parseUtils.js +15 -0
- package/lib/umd/languageservice/utils/parseUtils.js.map +1 -0
- package/lib/umd/languageservice/utils/paths.d.ts +5 -0
- package/lib/umd/languageservice/utils/paths.js +58 -0
- package/lib/umd/languageservice/utils/paths.js.map +1 -0
- package/lib/umd/languageservice/utils/schemaUrls.d.ts +14 -0
- package/lib/umd/languageservice/utils/schemaUrls.js +74 -0
- package/lib/umd/languageservice/utils/schemaUrls.js.map +1 -0
- package/lib/umd/languageservice/utils/schemaUtils.d.ts +19 -0
- package/lib/umd/languageservice/utils/schemaUtils.js +80 -0
- package/lib/umd/languageservice/utils/schemaUtils.js.map +1 -0
- package/lib/umd/languageservice/utils/strings.d.ts +10 -0
- package/lib/umd/languageservice/utils/strings.js +99 -0
- package/lib/umd/languageservice/utils/strings.js.map +1 -0
- package/lib/umd/languageservice/utils/textBuffer.d.ts +12 -0
- package/lib/umd/languageservice/utils/textBuffer.js +59 -0
- package/lib/umd/languageservice/utils/textBuffer.js.map +1 -0
- package/lib/umd/languageservice/utils/yamlAstUtils.d.ts +13 -0
- package/lib/umd/languageservice/utils/yamlAstUtils.js +126 -0
- package/lib/umd/languageservice/utils/yamlAstUtils.js.map +1 -0
- package/lib/umd/languageservice/utils/yamlScalar.d.ts +1 -0
- package/lib/umd/languageservice/utils/yamlScalar.js +83 -0
- package/lib/umd/languageservice/utils/yamlScalar.js.map +1 -0
- package/lib/umd/languageservice/yamlLanguageService.d.ts +135 -0
- package/lib/umd/languageservice/yamlLanguageService.js +115 -0
- package/lib/umd/languageservice/yamlLanguageService.js.map +1 -0
- package/lib/umd/languageservice/yamlTypes.d.ts +18 -0
- package/lib/umd/languageservice/yamlTypes.js +17 -0
- package/lib/umd/languageservice/yamlTypes.js.map +1 -0
- package/lib/umd/nodeTranslationSetup.d.ts +9 -0
- package/lib/umd/nodeTranslationSetup.js +48 -0
- package/lib/umd/nodeTranslationSetup.js.map +1 -0
- package/lib/umd/requestTypes.d.ts +63 -0
- package/lib/umd/requestTypes.js +59 -0
- package/lib/umd/requestTypes.js.map +1 -0
- package/lib/umd/server.d.ts +1 -0
- package/lib/umd/server.js +67 -0
- package/lib/umd/server.js.map +1 -0
- package/lib/umd/webworker/yamlServerMain.d.ts +1 -0
- package/lib/umd/webworker/yamlServerMain.js +52 -0
- package/lib/umd/webworker/yamlServerMain.js.map +1 -0
- package/lib/umd/yamlServerInit.d.ts +23 -0
- package/lib/umd/yamlServerInit.js +137 -0
- package/lib/umd/yamlServerInit.js.map +1 -0
- package/lib/umd/yamlSettings.d.ts +112 -0
- package/lib/umd/yamlSettings.js +84 -0
- package/lib/umd/yamlSettings.js.map +1 -0
- package/out/server/src/commands.d.ts +3 -0
- package/out/server/src/commands.js +12 -0
- package/out/server/src/commands.js.map +1 -0
- package/out/server/src/index.d.ts +3 -0
- package/out/server/src/index.js +22 -0
- package/out/server/src/index.js.map +1 -0
- package/out/server/src/languageserver/commandExecutor.d.ts +10 -0
- package/out/server/src/languageserver/commandExecutor.js +25 -0
- package/out/server/src/languageserver/commandExecutor.js.map +1 -0
- package/out/server/src/languageserver/handlers/languageHandlers.d.ts +61 -0
- package/out/server/src/languageserver/handlers/languageHandlers.js +240 -0
- package/out/server/src/languageserver/handlers/languageHandlers.js.map +1 -0
- package/out/server/src/languageserver/handlers/notificationHandlers.d.ts +29 -0
- package/out/server/src/languageserver/handlers/notificationHandlers.js +50 -0
- package/out/server/src/languageserver/handlers/notificationHandlers.js.map +1 -0
- package/out/server/src/languageserver/handlers/requestHandlers.d.ts +9 -0
- package/out/server/src/languageserver/handlers/requestHandlers.js +27 -0
- package/out/server/src/languageserver/handlers/requestHandlers.js.map +1 -0
- package/out/server/src/languageserver/handlers/schemaSelectionHandlers.d.ts +13 -0
- package/out/server/src/languageserver/handlers/schemaSelectionHandlers.js +76 -0
- package/out/server/src/languageserver/handlers/schemaSelectionHandlers.js.map +1 -0
- package/out/server/src/languageserver/handlers/settingsHandlers.d.ts +42 -0
- package/out/server/src/languageserver/handlers/settingsHandlers.js +320 -0
- package/out/server/src/languageserver/handlers/settingsHandlers.js.map +1 -0
- package/out/server/src/languageserver/handlers/validationHandlers.d.ts +15 -0
- package/out/server/src/languageserver/handlers/validationHandlers.js +112 -0
- package/out/server/src/languageserver/handlers/validationHandlers.js.map +1 -0
- package/out/server/src/languageserver/handlers/workspaceHandlers.d.ts +9 -0
- package/out/server/src/languageserver/handlers/workspaceHandlers.js +21 -0
- package/out/server/src/languageserver/handlers/workspaceHandlers.js.map +1 -0
- package/out/server/src/languageserver/telemetry.d.ts +9 -0
- package/out/server/src/languageserver/telemetry.js +24 -0
- package/out/server/src/languageserver/telemetry.js.map +1 -0
- package/out/server/src/languageservice/jsonASTTypes.d.ts +49 -0
- package/out/server/src/languageservice/jsonASTTypes.js +7 -0
- package/out/server/src/languageservice/jsonASTTypes.js.map +1 -0
- package/out/server/src/languageservice/jsonSchema.d.ts +103 -0
- package/out/server/src/languageservice/jsonSchema.js +15 -0
- package/out/server/src/languageservice/jsonSchema.js.map +1 -0
- package/out/server/src/languageservice/parser/ast-converter.d.ts +11 -0
- package/out/server/src/languageservice/parser/ast-converter.js +181 -0
- package/out/server/src/languageservice/parser/ast-converter.js.map +1 -0
- package/out/server/src/languageservice/parser/astNodeUtils.d.ts +4 -0
- package/out/server/src/languageservice/parser/astNodeUtils.js +54 -0
- package/out/server/src/languageservice/parser/astNodeUtils.js.map +1 -0
- package/out/server/src/languageservice/parser/custom-tag-provider.d.ts +7 -0
- package/out/server/src/languageservice/parser/custom-tag-provider.js +62 -0
- package/out/server/src/languageservice/parser/custom-tag-provider.js.map +1 -0
- package/out/server/src/languageservice/parser/isKubernetes.d.ts +4 -0
- package/out/server/src/languageservice/parser/isKubernetes.js +22 -0
- package/out/server/src/languageservice/parser/isKubernetes.js.map +1 -0
- package/out/server/src/languageservice/parser/jsonDocument.d.ts +83 -0
- package/out/server/src/languageservice/parser/jsonDocument.js +183 -0
- package/out/server/src/languageservice/parser/jsonDocument.js.map +1 -0
- package/out/server/src/languageservice/parser/scalar-type.d.ts +8 -0
- package/out/server/src/languageservice/parser/scalar-type.js +21 -0
- package/out/server/src/languageservice/parser/scalar-type.js.map +1 -0
- package/out/server/src/languageservice/parser/schemaValidation/baseValidator.d.ts +124 -0
- package/out/server/src/languageservice/parser/schemaValidation/baseValidator.js +1260 -0
- package/out/server/src/languageservice/parser/schemaValidation/baseValidator.js.map +1 -0
- package/out/server/src/languageservice/parser/schemaValidation/draft04Validator.d.ts +17 -0
- package/out/server/src/languageservice/parser/schemaValidation/draft04Validator.js +34 -0
- package/out/server/src/languageservice/parser/schemaValidation/draft04Validator.js.map +1 -0
- package/out/server/src/languageservice/parser/schemaValidation/draft07Validator.d.ts +15 -0
- package/out/server/src/languageservice/parser/schemaValidation/draft07Validator.js +32 -0
- package/out/server/src/languageservice/parser/schemaValidation/draft07Validator.js.map +1 -0
- package/out/server/src/languageservice/parser/schemaValidation/draft2019Validator.d.ts +28 -0
- package/out/server/src/languageservice/parser/schemaValidation/draft2019Validator.js +228 -0
- package/out/server/src/languageservice/parser/schemaValidation/draft2019Validator.js.map +1 -0
- package/out/server/src/languageservice/parser/schemaValidation/draft2020Validator.d.ts +17 -0
- package/out/server/src/languageservice/parser/schemaValidation/draft2020Validator.js +130 -0
- package/out/server/src/languageservice/parser/schemaValidation/draft2020Validator.js.map +1 -0
- package/out/server/src/languageservice/parser/schemaValidation/validatorFactory.d.ts +3 -0
- package/out/server/src/languageservice/parser/schemaValidation/validatorFactory.js +28 -0
- package/out/server/src/languageservice/parser/schemaValidation/validatorFactory.js.map +1 -0
- package/out/server/src/languageservice/parser/yaml-documents.d.ts +71 -0
- package/out/server/src/languageservice/parser/yaml-documents.js +264 -0
- package/out/server/src/languageservice/parser/yaml-documents.js.map +1 -0
- package/out/server/src/languageservice/parser/yamlParser07.d.ts +15 -0
- package/out/server/src/languageservice/parser/yamlParser07.js +55 -0
- package/out/server/src/languageservice/parser/yamlParser07.js.map +1 -0
- package/out/server/src/languageservice/services/crdUtil.d.ts +23 -0
- package/out/server/src/languageservice/services/crdUtil.js +79 -0
- package/out/server/src/languageservice/services/crdUtil.js.map +1 -0
- package/out/server/src/languageservice/services/documentSymbols.d.ts +12 -0
- package/out/server/src/languageservice/services/documentSymbols.js +71 -0
- package/out/server/src/languageservice/services/documentSymbols.js.map +1 -0
- package/out/server/src/languageservice/services/modelineUtil.d.ts +9 -0
- package/out/server/src/languageservice/services/modelineUtil.js +34 -0
- package/out/server/src/languageservice/services/modelineUtil.js.map +1 -0
- package/out/server/src/languageservice/services/schemaRequestHandler.d.ts +12 -0
- package/out/server/src/languageservice/services/schemaRequestHandler.js +88 -0
- package/out/server/src/languageservice/services/schemaRequestHandler.js.map +1 -0
- package/out/server/src/languageservice/services/validation/map-key-order.d.ts +7 -0
- package/out/server/src/languageservice/services/validation/map-key-order.js +39 -0
- package/out/server/src/languageservice/services/validation/map-key-order.js.map +1 -0
- package/out/server/src/languageservice/services/validation/types.d.ts +6 -0
- package/out/server/src/languageservice/services/validation/types.js +7 -0
- package/out/server/src/languageservice/services/validation/types.js.map +1 -0
- package/out/server/src/languageservice/services/validation/unused-anchors.d.ts +8 -0
- package/out/server/src/languageservice/services/validation/unused-anchors.js +95 -0
- package/out/server/src/languageservice/services/validation/unused-anchors.js.map +1 -0
- package/out/server/src/languageservice/services/validation/yaml-style.d.ts +12 -0
- package/out/server/src/languageservice/services/validation/yaml-style.js +32 -0
- package/out/server/src/languageservice/services/validation/yaml-style.js.map +1 -0
- package/out/server/src/languageservice/services/yamlCodeActions.d.ts +25 -0
- package/out/server/src/languageservice/services/yamlCodeActions.js +346 -0
- package/out/server/src/languageservice/services/yamlCodeActions.js.map +1 -0
- package/out/server/src/languageservice/services/yamlCodeLens.d.ts +11 -0
- package/out/server/src/languageservice/services/yamlCodeLens.js +50 -0
- package/out/server/src/languageservice/services/yamlCodeLens.js.map +1 -0
- package/out/server/src/languageservice/services/yamlCommands.d.ts +3 -0
- package/out/server/src/languageservice/services/yamlCommands.js +50 -0
- package/out/server/src/languageservice/services/yamlCommands.js.map +1 -0
- package/out/server/src/languageservice/services/yamlCompletion.d.ts +77 -0
- package/out/server/src/languageservice/services/yamlCompletion.js +1505 -0
- package/out/server/src/languageservice/services/yamlCompletion.js.map +1 -0
- package/out/server/src/languageservice/services/yamlDefinition.d.ts +9 -0
- package/out/server/src/languageservice/services/yamlDefinition.js +41 -0
- package/out/server/src/languageservice/services/yamlDefinition.js.map +1 -0
- package/out/server/src/languageservice/services/yamlFolding.d.ts +4 -0
- package/out/server/src/languageservice/services/yamlFolding.js +66 -0
- package/out/server/src/languageservice/services/yamlFolding.js.map +1 -0
- package/out/server/src/languageservice/services/yamlFormatter.d.ts +8 -0
- package/out/server/src/languageservice/services/yamlFormatter.js +50 -0
- package/out/server/src/languageservice/services/yamlFormatter.js.map +1 -0
- package/out/server/src/languageservice/services/yamlHover.d.ts +47 -0
- package/out/server/src/languageservice/services/yamlHover.js +370 -0
- package/out/server/src/languageservice/services/yamlHover.js.map +1 -0
- package/out/server/src/languageservice/services/yamlLinks.d.ts +8 -0
- package/out/server/src/languageservice/services/yamlLinks.js +31 -0
- package/out/server/src/languageservice/services/yamlLinks.js.map +1 -0
- package/out/server/src/languageservice/services/yamlOnTypeFormatting.d.ts +4 -0
- package/out/server/src/languageservice/services/yamlOnTypeFormatting.js +47 -0
- package/out/server/src/languageservice/services/yamlOnTypeFormatting.js.map +1 -0
- package/out/server/src/languageservice/services/yamlRename.d.ts +18 -0
- package/out/server/src/languageservice/services/yamlRename.js +188 -0
- package/out/server/src/languageservice/services/yamlRename.js.map +1 -0
- package/out/server/src/languageservice/services/yamlSchemaService.d.ts +99 -0
- package/out/server/src/languageservice/services/yamlSchemaService.js +1114 -0
- package/out/server/src/languageservice/services/yamlSchemaService.js.map +1 -0
- package/out/server/src/languageservice/services/yamlSelectionRanges.d.ts +3 -0
- package/out/server/src/languageservice/services/yamlSelectionRanges.js +134 -0
- package/out/server/src/languageservice/services/yamlSelectionRanges.js.map +1 -0
- package/out/server/src/languageservice/services/yamlValidation.d.ts +26 -0
- package/out/server/src/languageservice/services/yamlValidation.js +140 -0
- package/out/server/src/languageservice/services/yamlValidation.js.map +1 -0
- package/out/server/src/languageservice/telemetry.d.ts +16 -0
- package/out/server/src/languageservice/telemetry.js +7 -0
- package/out/server/src/languageservice/telemetry.js.map +1 -0
- package/out/server/src/languageservice/utils/arrUtils.d.ts +6 -0
- package/out/server/src/languageservice/utils/arrUtils.js +89 -0
- package/out/server/src/languageservice/utils/arrUtils.js.map +1 -0
- package/out/server/src/languageservice/utils/block-string-rewriter.d.ts +8 -0
- package/out/server/src/languageservice/utils/block-string-rewriter.js +219 -0
- package/out/server/src/languageservice/utils/block-string-rewriter.js.map +1 -0
- package/out/server/src/languageservice/utils/charCode.d.ts +415 -0
- package/out/server/src/languageservice/utils/charCode.js +7 -0
- package/out/server/src/languageservice/utils/charCode.js.map +1 -0
- package/out/server/src/languageservice/utils/diagnostic-filter.d.ts +50 -0
- package/out/server/src/languageservice/utils/diagnostic-filter.js +88 -0
- package/out/server/src/languageservice/utils/diagnostic-filter.js.map +1 -0
- package/out/server/src/languageservice/utils/documentPositionCalculator.d.ts +5 -0
- package/out/server/src/languageservice/utils/documentPositionCalculator.js +63 -0
- package/out/server/src/languageservice/utils/documentPositionCalculator.js.map +1 -0
- package/out/server/src/languageservice/utils/filePatternAssociation.d.ts +8 -0
- package/out/server/src/languageservice/utils/filePatternAssociation.js +27 -0
- package/out/server/src/languageservice/utils/filePatternAssociation.js.map +1 -0
- package/out/server/src/languageservice/utils/flow-style-rewriter.d.ts +6 -0
- package/out/server/src/languageservice/utils/flow-style-rewriter.js +57 -0
- package/out/server/src/languageservice/utils/flow-style-rewriter.js.map +1 -0
- package/out/server/src/languageservice/utils/indentationGuesser.d.ts +15 -0
- package/out/server/src/languageservice/utils/indentationGuesser.js +180 -0
- package/out/server/src/languageservice/utils/indentationGuesser.js.map +1 -0
- package/out/server/src/languageservice/utils/json.d.ts +11 -0
- package/out/server/src/languageservice/utils/json.js +83 -0
- package/out/server/src/languageservice/utils/json.js.map +1 -0
- package/out/server/src/languageservice/utils/math.d.ts +1 -0
- package/out/server/src/languageservice/utils/math.js +13 -0
- package/out/server/src/languageservice/utils/math.js.map +1 -0
- package/out/server/src/languageservice/utils/objects.d.ts +16 -0
- package/out/server/src/languageservice/utils/objects.js +102 -0
- package/out/server/src/languageservice/utils/objects.js.map +1 -0
- package/out/server/src/languageservice/utils/parseUtils.d.ts +17 -0
- package/out/server/src/languageservice/utils/parseUtils.js +5 -0
- package/out/server/src/languageservice/utils/parseUtils.js.map +1 -0
- package/out/server/src/languageservice/utils/paths.d.ts +5 -0
- package/out/server/src/languageservice/utils/paths.js +48 -0
- package/out/server/src/languageservice/utils/paths.js.map +1 -0
- package/out/server/src/languageservice/utils/schemaUrls.d.ts +14 -0
- package/out/server/src/languageservice/utils/schemaUrls.js +64 -0
- package/out/server/src/languageservice/utils/schemaUrls.js.map +1 -0
- package/out/server/src/languageservice/utils/schemaUtils.d.ts +19 -0
- package/out/server/src/languageservice/utils/schemaUtils.js +70 -0
- package/out/server/src/languageservice/utils/schemaUtils.js.map +1 -0
- package/out/server/src/languageservice/utils/strings.d.ts +10 -0
- package/out/server/src/languageservice/utils/strings.js +89 -0
- package/out/server/src/languageservice/utils/strings.js.map +1 -0
- package/out/server/src/languageservice/utils/textBuffer.d.ts +12 -0
- package/out/server/src/languageservice/utils/textBuffer.js +49 -0
- package/out/server/src/languageservice/utils/textBuffer.js.map +1 -0
- package/out/server/src/languageservice/utils/yamlAstUtils.d.ts +13 -0
- package/out/server/src/languageservice/utils/yamlAstUtils.js +116 -0
- package/out/server/src/languageservice/utils/yamlAstUtils.js.map +1 -0
- package/out/server/src/languageservice/utils/yamlScalar.d.ts +1 -0
- package/out/server/src/languageservice/utils/yamlScalar.js +73 -0
- package/out/server/src/languageservice/utils/yamlScalar.js.map +1 -0
- package/out/server/src/languageservice/yamlLanguageService.d.ts +135 -0
- package/out/server/src/languageservice/yamlLanguageService.js +105 -0
- package/out/server/src/languageservice/yamlLanguageService.js.map +1 -0
- package/out/server/src/languageservice/yamlTypes.d.ts +18 -0
- package/out/server/src/languageservice/yamlTypes.js +7 -0
- package/out/server/src/languageservice/yamlTypes.js.map +1 -0
- package/out/server/src/nodeTranslationSetup.d.ts +9 -0
- package/out/server/src/nodeTranslationSetup.js +38 -0
- package/out/server/src/nodeTranslationSetup.js.map +1 -0
- package/out/server/src/requestTypes.d.ts +63 -0
- package/out/server/src/requestTypes.js +49 -0
- package/out/server/src/requestTypes.js.map +1 -0
- package/out/server/src/server.d.ts +1 -0
- package/out/server/src/server.js +57 -0
- package/out/server/src/server.js.map +1 -0
- package/out/server/src/webworker/yamlServerMain.d.ts +1 -0
- package/out/server/src/webworker/yamlServerMain.js +42 -0
- package/out/server/src/webworker/yamlServerMain.js.map +1 -0
- package/out/server/src/yamlServerInit.d.ts +23 -0
- package/out/server/src/yamlServerInit.js +127 -0
- package/out/server/src/yamlServerInit.js.map +1 -0
- package/out/server/src/yamlSettings.d.ts +112 -0
- package/out/server/src/yamlSettings.js +74 -0
- package/out/server/src/yamlSettings.js.map +1 -0
- package/out/server/test/arrUtils.test.d.ts +1 -0
- package/out/server/test/arrUtils.test.js +60 -0
- package/out/server/test/arrUtils.test.js.map +1 -0
- package/out/server/test/astUtils.test.d.ts +1 -0
- package/out/server/test/astUtils.test.js +79 -0
- package/out/server/test/astUtils.test.js.map +1 -0
- package/out/server/test/autoCompletion.test.d.ts +1 -0
- package/out/server/test/autoCompletion.test.js +2832 -0
- package/out/server/test/autoCompletion.test.js.map +1 -0
- package/out/server/test/autoCompletionFix.test.d.ts +1 -0
- package/out/server/test/autoCompletionFix.test.js +1591 -0
- package/out/server/test/autoCompletionFix.test.js.map +1 -0
- package/out/server/test/bundlel10n.test.d.ts +1 -0
- package/out/server/test/bundlel10n.test.js +73 -0
- package/out/server/test/bundlel10n.test.js.map +1 -0
- package/out/server/test/code-action-schema.test.d.ts +1 -0
- package/out/server/test/code-action-schema.test.js +89 -0
- package/out/server/test/code-action-schema.test.js.map +1 -0
- package/out/server/test/customTags.test.d.ts +1 -0
- package/out/server/test/customTags.test.js +88 -0
- package/out/server/test/customTags.test.js.map +1 -0
- package/out/server/test/defaultSnippets.test.d.ts +1 -0
- package/out/server/test/defaultSnippets.test.js +384 -0
- package/out/server/test/defaultSnippets.test.js.map +1 -0
- package/out/server/test/diagnostic-filter.test.d.ts +1 -0
- package/out/server/test/diagnostic-filter.test.js +161 -0
- package/out/server/test/diagnostic-filter.test.js.map +1 -0
- package/out/server/test/documentPositionCalculator.test.d.ts +1 -0
- package/out/server/test/documentPositionCalculator.test.js +69 -0
- package/out/server/test/documentPositionCalculator.test.js.map +1 -0
- package/out/server/test/documentSymbols.test.d.ts +1 -0
- package/out/server/test/documentSymbols.test.js +267 -0
- package/out/server/test/documentSymbols.test.js.map +1 -0
- package/out/server/test/findLinks.test.d.ts +1 -0
- package/out/server/test/findLinks.test.js +58 -0
- package/out/server/test/findLinks.test.js.map +1 -0
- package/out/server/test/flow-style-rewriter.test.d.ts +1 -0
- package/out/server/test/flow-style-rewriter.test.js +79 -0
- package/out/server/test/flow-style-rewriter.test.js.map +1 -0
- package/out/server/test/formatter.test.d.ts +1 -0
- package/out/server/test/formatter.test.js +170 -0
- package/out/server/test/formatter.test.js.map +1 -0
- package/out/server/test/hover.test.d.ts +1 -0
- package/out/server/test/hover.test.js +1056 -0
- package/out/server/test/hover.test.js.map +1 -0
- package/out/server/test/integration.test.d.ts +1 -0
- package/out/server/test/integration.test.js +293 -0
- package/out/server/test/integration.test.js.map +1 -0
- package/out/server/test/invalid-metaschema.test.d.ts +1 -0
- package/out/server/test/invalid-metaschema.test.js +43 -0
- package/out/server/test/invalid-metaschema.test.js.map +1 -0
- package/out/server/test/jsonParser.test.d.ts +1 -0
- package/out/server/test/jsonParser.test.js +1682 -0
- package/out/server/test/jsonParser.test.js.map +1 -0
- package/out/server/test/multipleDocuments.test.d.ts +1 -0
- package/out/server/test/multipleDocuments.test.js +117 -0
- package/out/server/test/multipleDocuments.test.js.map +1 -0
- package/out/server/test/objects.test.d.ts +1 -0
- package/out/server/test/objects.test.js +110 -0
- package/out/server/test/objects.test.js.map +1 -0
- package/out/server/test/paths.test.d.ts +1 -0
- package/out/server/test/paths.test.js +223 -0
- package/out/server/test/paths.test.js.map +1 -0
- package/out/server/test/scalaruri.test.d.ts +1 -0
- package/out/server/test/scalaruri.test.js +363 -0
- package/out/server/test/scalaruri.test.js.map +1 -0
- package/out/server/test/schema.test.d.ts +1 -0
- package/out/server/test/schema.test.js +952 -0
- package/out/server/test/schema.test.js.map +1 -0
- package/out/server/test/schema2019Validation.test.d.ts +1 -0
- package/out/server/test/schema2019Validation.test.js +3630 -0
- package/out/server/test/schema2019Validation.test.js.map +1 -0
- package/out/server/test/schema2020Validation.test.d.ts +1 -0
- package/out/server/test/schema2020Validation.test.js +2037 -0
- package/out/server/test/schema2020Validation.test.js.map +1 -0
- package/out/server/test/schemaRequestHandler.test.d.ts +1 -0
- package/out/server/test/schemaRequestHandler.test.js +48 -0
- package/out/server/test/schemaRequestHandler.test.js.map +1 -0
- package/out/server/test/schemaSelectionHandlers.test.d.ts +1 -0
- package/out/server/test/schemaSelectionHandlers.test.js +99 -0
- package/out/server/test/schemaSelectionHandlers.test.js.map +1 -0
- package/out/server/test/schemaValidation.test.d.ts +1 -0
- package/out/server/test/schemaValidation.test.js +2269 -0
- package/out/server/test/schemaValidation.test.js.map +1 -0
- package/out/server/test/settingsHandlers.test.d.ts +1 -0
- package/out/server/test/settingsHandlers.test.js +299 -0
- package/out/server/test/settingsHandlers.test.js.map +1 -0
- package/out/server/test/strings.test.d.ts +1 -0
- package/out/server/test/strings.test.js +92 -0
- package/out/server/test/strings.test.js.map +1 -0
- package/out/server/test/telemetry.test.d.ts +1 -0
- package/out/server/test/telemetry.test.js +36 -0
- package/out/server/test/telemetry.test.js.map +1 -0
- package/out/server/test/textBuffer.test.d.ts +1 -0
- package/out/server/test/textBuffer.test.js +41 -0
- package/out/server/test/textBuffer.test.js.map +1 -0
- package/out/server/test/utils/errorMessages.d.ts +27 -0
- package/out/server/test/utils/errorMessages.js +38 -0
- package/out/server/test/utils/errorMessages.js.map +1 -0
- package/out/server/test/utils/serviceSetup.d.ts +17 -0
- package/out/server/test/utils/serviceSetup.js +74 -0
- package/out/server/test/utils/serviceSetup.js.map +1 -0
- package/out/server/test/utils/testHelper.d.ts +78 -0
- package/out/server/test/utils/testHelper.js +202 -0
- package/out/server/test/utils/testHelper.js.map +1 -0
- package/out/server/test/utils/testsTypes.d.ts +29 -0
- package/out/server/test/utils/testsTypes.js +61 -0
- package/out/server/test/utils/testsTypes.js.map +1 -0
- package/out/server/test/utils/verifyError.d.ts +8 -0
- package/out/server/test/utils/verifyError.js +82 -0
- package/out/server/test/utils/verifyError.js.map +1 -0
- package/out/server/test/yaml-documents.test.d.ts +1 -0
- package/out/server/test/yaml-documents.test.js +198 -0
- package/out/server/test/yaml-documents.test.js.map +1 -0
- package/out/server/test/yamlCodeActions.test.d.ts +1 -0
- package/out/server/test/yamlCodeActions.test.js +864 -0
- package/out/server/test/yamlCodeActions.test.js.map +1 -0
- package/out/server/test/yamlCodeLens.test.d.ts +1 -0
- package/out/server/test/yamlCodeLens.test.js +165 -0
- package/out/server/test/yamlCodeLens.test.js.map +1 -0
- package/out/server/test/yamlCommands.test.d.ts +1 -0
- package/out/server/test/yamlCommands.test.js +89 -0
- package/out/server/test/yamlCommands.test.js.map +1 -0
- package/out/server/test/yamlDefinition.test.d.ts +1 -0
- package/out/server/test/yamlDefinition.test.js +30 -0
- package/out/server/test/yamlDefinition.test.js.map +1 -0
- package/out/server/test/yamlFolding.test.d.ts +1 -0
- package/out/server/test/yamlFolding.test.js +142 -0
- package/out/server/test/yamlFolding.test.js.map +1 -0
- package/out/server/test/yamlLanguageService.test.d.ts +1 -0
- package/out/server/test/yamlLanguageService.test.js +90 -0
- package/out/server/test/yamlLanguageService.test.js.map +1 -0
- package/out/server/test/yamlOnTypeFormatting.test.d.ts +1 -0
- package/out/server/test/yamlOnTypeFormatting.test.js +69 -0
- package/out/server/test/yamlOnTypeFormatting.test.js.map +1 -0
- package/out/server/test/yamlParser.test.d.ts +1 -0
- package/out/server/test/yamlParser.test.js +242 -0
- package/out/server/test/yamlParser.test.js.map +1 -0
- package/out/server/test/yamlRename.test.d.ts +1 -0
- package/out/server/test/yamlRename.test.js +106 -0
- package/out/server/test/yamlRename.test.js.map +1 -0
- package/out/server/test/yamlSchema.test.d.ts +1 -0
- package/out/server/test/yamlSchema.test.js +62 -0
- package/out/server/test/yamlSchema.test.js.map +1 -0
- package/out/server/test/yamlSchemaService.test.d.ts +1 -0
- package/out/server/test/yamlSchemaService.test.js +403 -0
- package/out/server/test/yamlSchemaService.test.js.map +1 -0
- package/out/server/test/yamlSelectionRanges.test.d.ts +1 -0
- package/out/server/test/yamlSelectionRanges.test.js +248 -0
- package/out/server/test/yamlSelectionRanges.test.js.map +1 -0
- package/out/server/test/yamlValidation.test.d.ts +1 -0
- package/out/server/test/yamlValidation.test.js +303 -0
- package/out/server/test/yamlValidation.test.js.map +1 -0
- package/package.json +106 -0
- package/scripts/check-dependencies.js +21 -0
- package/tsconfig.esm.json +15 -0
- package/tsconfig.umd.json +14 -0
|
@@ -0,0 +1,2037 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/*---------------------------------------------------------------------------------------------
|
|
4
|
+
* Copyright (c) IBM Corporation. All rights reserved.
|
|
5
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
6
|
+
*--------------------------------------------------------------------------------------------*/
|
|
7
|
+
const testHelper_1 = require("./utils/testHelper");
|
|
8
|
+
const serviceSetup_1 = require("./utils/serviceSetup");
|
|
9
|
+
const chai_1 = require("chai");
|
|
10
|
+
const yamlSettings_1 = require("../src/yamlSettings");
|
|
11
|
+
const schemaUrls_1 = require("../src/languageservice/utils/schemaUrls");
|
|
12
|
+
describe('Validation Tests', () => {
|
|
13
|
+
let languageSettingsSetup;
|
|
14
|
+
let validationHandler;
|
|
15
|
+
let yamlSettings;
|
|
16
|
+
let schemaProvider;
|
|
17
|
+
const toContent = (data) => JSON.stringify(data, null, 2);
|
|
18
|
+
before(() => {
|
|
19
|
+
languageSettingsSetup = new serviceSetup_1.ServiceSetup()
|
|
20
|
+
.withValidate()
|
|
21
|
+
.withCompletion()
|
|
22
|
+
.withCustomTags(['!Test', '!Ref sequence'])
|
|
23
|
+
.withSchemaFileMatch({ uri: schemaUrls_1.KUBERNETES_SCHEMA_URL, fileMatch: ['.drone.yml'] })
|
|
24
|
+
.withSchemaFileMatch({ uri: 'https://json.schemastore.org/drone', fileMatch: ['.drone.yml'] })
|
|
25
|
+
.withSchemaFileMatch({ uri: schemaUrls_1.KUBERNETES_SCHEMA_URL, fileMatch: ['test.yml'] })
|
|
26
|
+
.withSchemaFileMatch({
|
|
27
|
+
uri: 'https://raw.githubusercontent.com/composer/composer/master/res/composer-schema.json',
|
|
28
|
+
fileMatch: ['test.yml'],
|
|
29
|
+
});
|
|
30
|
+
const { validationHandler: valHandler, yamlSettings: settings, schemaProvider: testSchemaProvider, } = (0, testHelper_1.setupLanguageService)(languageSettingsSetup.languageSettings);
|
|
31
|
+
validationHandler = valHandler;
|
|
32
|
+
yamlSettings = settings;
|
|
33
|
+
schemaProvider = testSchemaProvider;
|
|
34
|
+
});
|
|
35
|
+
function parseSetup(content, customSchemaID) {
|
|
36
|
+
const testTextDocument = (0, testHelper_1.setupSchemaIDTextDocument)(content, customSchemaID);
|
|
37
|
+
yamlSettings.documents = new yamlSettings_1.TextDocumentTestManager();
|
|
38
|
+
yamlSettings.documents.set(testTextDocument);
|
|
39
|
+
return validationHandler.validateTextDocument(testTextDocument);
|
|
40
|
+
}
|
|
41
|
+
afterEach(() => {
|
|
42
|
+
schemaProvider.deleteSchema(testHelper_1.SCHEMA_ID);
|
|
43
|
+
});
|
|
44
|
+
describe('keyword: prefixItems + items', () => {
|
|
45
|
+
describe('Open tuple', () => {
|
|
46
|
+
beforeEach(() => {
|
|
47
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
48
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
49
|
+
type: 'array',
|
|
50
|
+
prefixItems: [{ type: 'string' }, { type: 'number' }],
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
it('allows extra items by default (items is unconstrained)', async () => {
|
|
54
|
+
const content = `- hello
|
|
55
|
+
- 123
|
|
56
|
+
- { totally: "anything" }`;
|
|
57
|
+
const result = await parseSetup(content);
|
|
58
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
59
|
+
});
|
|
60
|
+
it('fails when a prefixItems position has the wrong type', async () => {
|
|
61
|
+
const content = `- 123\n- hello`;
|
|
62
|
+
const result = await parseSetup(content);
|
|
63
|
+
(0, chai_1.expect)(result).to.have.length(2);
|
|
64
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type');
|
|
65
|
+
(0, chai_1.expect)(result[0].message).to.include('string');
|
|
66
|
+
(0, chai_1.expect)(result[1].message).to.include('Incorrect type');
|
|
67
|
+
(0, chai_1.expect)(result[1].message).to.include('number');
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
describe('Closed tuple', () => {
|
|
71
|
+
beforeEach(() => {
|
|
72
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
73
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
74
|
+
type: 'array',
|
|
75
|
+
prefixItems: [{ type: 'string' }, { type: 'number' }],
|
|
76
|
+
items: false,
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
it('forbids extra items after prefixItems', async () => {
|
|
80
|
+
const content = `- hello\n- 123\n- extra`;
|
|
81
|
+
const result = await parseSetup(content);
|
|
82
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
83
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
|
|
84
|
+
});
|
|
85
|
+
it('passes when length is within prefixItems', async () => {
|
|
86
|
+
const content = `- hello\n- 123`;
|
|
87
|
+
const result = await parseSetup(content);
|
|
88
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe('Tuple with constrained extra items', () => {
|
|
92
|
+
beforeEach(() => {
|
|
93
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
94
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
95
|
+
type: 'array',
|
|
96
|
+
prefixItems: [{ type: 'string' }, { type: 'number' }],
|
|
97
|
+
items: { type: 'boolean' },
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
it('fails when an extra item does not match items schema', async () => {
|
|
101
|
+
const content = `- hello
|
|
102
|
+
- 123
|
|
103
|
+
- notBoolean`;
|
|
104
|
+
const result = await parseSetup(content);
|
|
105
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
106
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type');
|
|
107
|
+
(0, chai_1.expect)(result[0].message).to.include('boolean');
|
|
108
|
+
});
|
|
109
|
+
it('passes when extra items match items schema', async () => {
|
|
110
|
+
const content = `- hello
|
|
111
|
+
- 123
|
|
112
|
+
- true
|
|
113
|
+
- false`;
|
|
114
|
+
const result = await parseSetup(content);
|
|
115
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe('keyword: prefixItems', () => {
|
|
120
|
+
it('a schema given for prefixItems', async () => {
|
|
121
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
122
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
123
|
+
prefixItems: [{ type: 'integer' }, { type: 'string' }],
|
|
124
|
+
});
|
|
125
|
+
// correct types
|
|
126
|
+
let content = toContent([1, 'foo']);
|
|
127
|
+
let result = await parseSetup(content);
|
|
128
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
129
|
+
// wrong types
|
|
130
|
+
content = toContent(['foo', 1]);
|
|
131
|
+
result = await parseSetup(content);
|
|
132
|
+
(0, chai_1.expect)(result).to.have.length(2);
|
|
133
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type');
|
|
134
|
+
(0, chai_1.expect)(result[1].message).to.include('Incorrect type');
|
|
135
|
+
// incomplete array of items
|
|
136
|
+
content = toContent([1]);
|
|
137
|
+
result = await parseSetup(content);
|
|
138
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
139
|
+
// array with additional items
|
|
140
|
+
content = toContent([1, 'foo', true]);
|
|
141
|
+
result = await parseSetup(content);
|
|
142
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
143
|
+
// empty array
|
|
144
|
+
content = toContent([]);
|
|
145
|
+
result = await parseSetup(content);
|
|
146
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
147
|
+
// JavaScript pseudo-array is valid
|
|
148
|
+
content = toContent({
|
|
149
|
+
'0': 'invalid',
|
|
150
|
+
'1': 'valid',
|
|
151
|
+
length: 2,
|
|
152
|
+
});
|
|
153
|
+
result = await parseSetup(content);
|
|
154
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
155
|
+
});
|
|
156
|
+
it('prefixItems with boolean schemas', async () => {
|
|
157
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
158
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
159
|
+
prefixItems: [true, false],
|
|
160
|
+
});
|
|
161
|
+
// array with one item is valid
|
|
162
|
+
let content = toContent([1]);
|
|
163
|
+
let result = await parseSetup(content);
|
|
164
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
165
|
+
// array with two items is invalid
|
|
166
|
+
content = toContent([1, 'foo']);
|
|
167
|
+
result = await parseSetup(content);
|
|
168
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
169
|
+
(0, chai_1.expect)(result[0].message).to.include('Matches a schema that is not allowed');
|
|
170
|
+
// empty array is valid
|
|
171
|
+
content = toContent([]);
|
|
172
|
+
result = await parseSetup(content);
|
|
173
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
174
|
+
});
|
|
175
|
+
it('additional items are allowed by default', async () => {
|
|
176
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
177
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
178
|
+
prefixItems: [{ type: 'integer' }],
|
|
179
|
+
});
|
|
180
|
+
// only the first item is validated
|
|
181
|
+
const content = toContent([1, 'foo', false]);
|
|
182
|
+
const result = await parseSetup(content);
|
|
183
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
184
|
+
});
|
|
185
|
+
it('prefixItems with null instance elements', async () => {
|
|
186
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
187
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
188
|
+
prefixItems: [
|
|
189
|
+
{
|
|
190
|
+
type: 'null',
|
|
191
|
+
},
|
|
192
|
+
],
|
|
193
|
+
});
|
|
194
|
+
// allows null elements
|
|
195
|
+
const content = toContent([null]);
|
|
196
|
+
const result = await parseSetup(content);
|
|
197
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
describe('keyword: items', () => {
|
|
201
|
+
it('a schema given for items', async () => {
|
|
202
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
203
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
204
|
+
items: { type: 'integer' },
|
|
205
|
+
});
|
|
206
|
+
// valid items
|
|
207
|
+
let content = toContent([1, 2, 3]);
|
|
208
|
+
let result = await parseSetup(content);
|
|
209
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
210
|
+
// wrong type of items
|
|
211
|
+
content = toContent([1, 'x']);
|
|
212
|
+
result = await parseSetup(content);
|
|
213
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
214
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type');
|
|
215
|
+
// ignores non-arrays
|
|
216
|
+
content = toContent({ foo: 'bar' });
|
|
217
|
+
result = await parseSetup(content);
|
|
218
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
219
|
+
// JavaScript pseudo-array is valid
|
|
220
|
+
content = toContent({
|
|
221
|
+
'0': 'invalid',
|
|
222
|
+
length: 1,
|
|
223
|
+
});
|
|
224
|
+
result = await parseSetup(content);
|
|
225
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
226
|
+
});
|
|
227
|
+
it('items with boolean schema (true)', async () => {
|
|
228
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
229
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
230
|
+
items: true,
|
|
231
|
+
});
|
|
232
|
+
// any array is valid
|
|
233
|
+
let content = toContent([1, 'foo', true]);
|
|
234
|
+
let result = await parseSetup(content);
|
|
235
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
236
|
+
// empty array is valid
|
|
237
|
+
content = toContent([]);
|
|
238
|
+
result = await parseSetup(content);
|
|
239
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
240
|
+
});
|
|
241
|
+
it('items with boolean schema (false)', async () => {
|
|
242
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
243
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
244
|
+
items: false,
|
|
245
|
+
});
|
|
246
|
+
// any non-empty array is invalid
|
|
247
|
+
let content = toContent([1, 'foo', true]);
|
|
248
|
+
let result = await parseSetup(content);
|
|
249
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
250
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
|
|
251
|
+
// empty array is valid
|
|
252
|
+
content = toContent([]);
|
|
253
|
+
result = await parseSetup(content);
|
|
254
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
255
|
+
});
|
|
256
|
+
it('items and subitems', async () => {
|
|
257
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
258
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
259
|
+
$defs: {
|
|
260
|
+
item: {
|
|
261
|
+
type: 'array',
|
|
262
|
+
items: false,
|
|
263
|
+
prefixItems: [{ $ref: '#/$defs/sub-item' }, { $ref: '#/$defs/sub-item' }],
|
|
264
|
+
},
|
|
265
|
+
'sub-item': {
|
|
266
|
+
type: 'object',
|
|
267
|
+
required: ['foo'],
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
type: 'array',
|
|
271
|
+
items: false,
|
|
272
|
+
prefixItems: [{ $ref: '#/$defs/item' }, { $ref: '#/$defs/item' }, { $ref: '#/$defs/item' }],
|
|
273
|
+
});
|
|
274
|
+
// valid items
|
|
275
|
+
let content = toContent([
|
|
276
|
+
[{ foo: null }, { foo: null }],
|
|
277
|
+
[{ foo: null }, { foo: null }],
|
|
278
|
+
[{ foo: null }, { foo: null }],
|
|
279
|
+
]);
|
|
280
|
+
let result = await parseSetup(content);
|
|
281
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
282
|
+
// too many items
|
|
283
|
+
content = toContent([
|
|
284
|
+
[{ foo: null }, { foo: null }],
|
|
285
|
+
[{ foo: null }, { foo: null }],
|
|
286
|
+
[{ foo: null }, { foo: null }],
|
|
287
|
+
[{ foo: null }, { foo: null }],
|
|
288
|
+
]);
|
|
289
|
+
result = await parseSetup(content);
|
|
290
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
291
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items');
|
|
292
|
+
// too many sub-items
|
|
293
|
+
content = toContent([
|
|
294
|
+
[{ foo: null }, { foo: null }, { foo: null }],
|
|
295
|
+
[{ foo: null }, { foo: null }],
|
|
296
|
+
[{ foo: null }, { foo: null }],
|
|
297
|
+
]);
|
|
298
|
+
result = await parseSetup(content);
|
|
299
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
300
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items');
|
|
301
|
+
// wrong item
|
|
302
|
+
content = toContent([{ foo: null }, [{ foo: null }, { foo: null }], [{ foo: null }, { foo: null }]]);
|
|
303
|
+
result = await parseSetup(content);
|
|
304
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
305
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type');
|
|
306
|
+
// wrong sub-item
|
|
307
|
+
content = toContent([
|
|
308
|
+
[{}, { foo: null }],
|
|
309
|
+
[{ foo: null }, { foo: null }],
|
|
310
|
+
[{ foo: null }, { foo: null }],
|
|
311
|
+
]);
|
|
312
|
+
result = await parseSetup(content);
|
|
313
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
314
|
+
(0, chai_1.expect)(result[0].message).to.include('Missing property');
|
|
315
|
+
// fewer items is valid
|
|
316
|
+
content = toContent([[{ foo: null }], [{ foo: null }]]);
|
|
317
|
+
result = await parseSetup(content);
|
|
318
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
319
|
+
});
|
|
320
|
+
it('nested items', async () => {
|
|
321
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
322
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
323
|
+
type: 'array',
|
|
324
|
+
items: {
|
|
325
|
+
type: 'array',
|
|
326
|
+
items: {
|
|
327
|
+
type: 'array',
|
|
328
|
+
items: {
|
|
329
|
+
type: 'array',
|
|
330
|
+
items: {
|
|
331
|
+
type: 'number',
|
|
332
|
+
},
|
|
333
|
+
},
|
|
334
|
+
},
|
|
335
|
+
},
|
|
336
|
+
});
|
|
337
|
+
// valid nested array
|
|
338
|
+
let content = toContent([[[[1]], [[2], [3]]], [[[4], [5], [6]]]]);
|
|
339
|
+
let result = await parseSetup(content);
|
|
340
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
341
|
+
// nested array with invalid type
|
|
342
|
+
content = toContent([[[['1']], [[2], [3]]], [[[4], [5], [6]]]]);
|
|
343
|
+
result = await parseSetup(content);
|
|
344
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
345
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type');
|
|
346
|
+
// not deep enough
|
|
347
|
+
content = toContent([
|
|
348
|
+
[[1], [2], [3]],
|
|
349
|
+
[[4], [5], [6]],
|
|
350
|
+
]);
|
|
351
|
+
result = await parseSetup(content);
|
|
352
|
+
(0, chai_1.expect)(result).to.have.length(6);
|
|
353
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type');
|
|
354
|
+
});
|
|
355
|
+
it('prefixItems with no additional items allowed', async () => {
|
|
356
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
357
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
358
|
+
prefixItems: [{}, {}, {}],
|
|
359
|
+
items: false,
|
|
360
|
+
});
|
|
361
|
+
// empty array
|
|
362
|
+
let content = toContent([]);
|
|
363
|
+
let result = await parseSetup(content);
|
|
364
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
365
|
+
// fewer number of items present (1)
|
|
366
|
+
content = toContent([1]);
|
|
367
|
+
result = await parseSetup(content);
|
|
368
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
369
|
+
// fewer number of items present (2)
|
|
370
|
+
content = toContent([1, 2]);
|
|
371
|
+
result = await parseSetup(content);
|
|
372
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
373
|
+
// equal number of items present
|
|
374
|
+
content = toContent([1, 2, 3]);
|
|
375
|
+
result = await parseSetup(content);
|
|
376
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
377
|
+
// additional items are not permitted
|
|
378
|
+
content = toContent([1, 2, 3, 4]);
|
|
379
|
+
result = await parseSetup(content);
|
|
380
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
381
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items');
|
|
382
|
+
});
|
|
383
|
+
it('items does not look in applicators, valid case', async () => {
|
|
384
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
385
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
386
|
+
allOf: [{ prefixItems: [{ minimum: 3 }] }],
|
|
387
|
+
items: { minimum: 5 },
|
|
388
|
+
});
|
|
389
|
+
// prefixItems in allOf does not constrain items, invalid case
|
|
390
|
+
let content = toContent([3, 5]);
|
|
391
|
+
let result = await parseSetup(content);
|
|
392
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
393
|
+
(0, chai_1.expect)(result[0].message).to.include('Value is below the minimum of 5.');
|
|
394
|
+
// prefixItems in allOf does not constrain items, valid case
|
|
395
|
+
content = toContent([5, 5]);
|
|
396
|
+
result = await parseSetup(content);
|
|
397
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
398
|
+
});
|
|
399
|
+
it('prefixItems validation adjusts the starting index for items', async () => {
|
|
400
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
401
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
402
|
+
prefixItems: [{ type: 'string' }],
|
|
403
|
+
items: { type: 'integer' },
|
|
404
|
+
});
|
|
405
|
+
// valid items
|
|
406
|
+
let content = toContent(['x', 2, 3]);
|
|
407
|
+
let result = await parseSetup(content);
|
|
408
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
409
|
+
// wrong type of second item
|
|
410
|
+
content = toContent(['x', 'y']);
|
|
411
|
+
result = await parseSetup(content);
|
|
412
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
413
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type');
|
|
414
|
+
});
|
|
415
|
+
it('items with heterogeneous array', async () => {
|
|
416
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
417
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
418
|
+
prefixItems: [{}],
|
|
419
|
+
items: false,
|
|
420
|
+
});
|
|
421
|
+
// heterogeneous invalid instance
|
|
422
|
+
let content = toContent(['foo', 'bar', 37]);
|
|
423
|
+
let result = await parseSetup(content);
|
|
424
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
425
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items');
|
|
426
|
+
// valid instance
|
|
427
|
+
content = toContent([null]);
|
|
428
|
+
result = await parseSetup(content);
|
|
429
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
430
|
+
});
|
|
431
|
+
it('items with null instance elements', async () => {
|
|
432
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
433
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
434
|
+
items: {
|
|
435
|
+
type: 'null',
|
|
436
|
+
},
|
|
437
|
+
});
|
|
438
|
+
// allows null elements
|
|
439
|
+
const content = toContent([null]);
|
|
440
|
+
const result = await parseSetup(content);
|
|
441
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
442
|
+
});
|
|
443
|
+
});
|
|
444
|
+
describe('keyword: unevaluatedItems', () => {
|
|
445
|
+
it('unevaluatedItems true', async () => {
|
|
446
|
+
const schema = {
|
|
447
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
448
|
+
unevaluatedItems: true,
|
|
449
|
+
};
|
|
450
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
451
|
+
(0, chai_1.expect)(await parseSetup(toContent([]))).to.be.empty;
|
|
452
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo']))).to.be.empty;
|
|
453
|
+
});
|
|
454
|
+
it('unevaluatedItems false', async () => {
|
|
455
|
+
const schema = {
|
|
456
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
457
|
+
unevaluatedItems: false,
|
|
458
|
+
};
|
|
459
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
460
|
+
(0, chai_1.expect)(await parseSetup(toContent([]))).to.be.empty;
|
|
461
|
+
const result = await parseSetup(toContent(['foo']));
|
|
462
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
463
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
|
|
464
|
+
});
|
|
465
|
+
it('unevaluatedItems as schema', async () => {
|
|
466
|
+
const schema = {
|
|
467
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
468
|
+
unevaluatedItems: { type: 'string' },
|
|
469
|
+
};
|
|
470
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
471
|
+
(0, chai_1.expect)(await parseSetup(toContent([]))).to.be.empty;
|
|
472
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo']))).to.be.empty;
|
|
473
|
+
const result = await parseSetup(toContent([42]));
|
|
474
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
475
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type. Expected');
|
|
476
|
+
(0, chai_1.expect)(result[0].message).to.include('string');
|
|
477
|
+
});
|
|
478
|
+
it('unevaluatedItems with uniform items', async () => {
|
|
479
|
+
const schema = {
|
|
480
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
481
|
+
items: { type: 'string' },
|
|
482
|
+
unevaluatedItems: false,
|
|
483
|
+
};
|
|
484
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
485
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
|
|
486
|
+
});
|
|
487
|
+
it('unevaluatedItems with tuple', async () => {
|
|
488
|
+
const schema = {
|
|
489
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
490
|
+
prefixItems: [{ type: 'string' }],
|
|
491
|
+
unevaluatedItems: false,
|
|
492
|
+
};
|
|
493
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
494
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo']))).to.be.empty;
|
|
495
|
+
const result = await parseSetup(toContent(['foo', 'bar']));
|
|
496
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
497
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
|
|
498
|
+
});
|
|
499
|
+
it('unevaluatedItems with items and prefixItems', async () => {
|
|
500
|
+
const schema = {
|
|
501
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
502
|
+
prefixItems: [{ type: 'string' }],
|
|
503
|
+
items: true,
|
|
504
|
+
unevaluatedItems: false,
|
|
505
|
+
};
|
|
506
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
507
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 42]))).to.be.empty;
|
|
508
|
+
});
|
|
509
|
+
it('unevaluatedItems with items', async () => {
|
|
510
|
+
const schema = {
|
|
511
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
512
|
+
items: { type: 'number' },
|
|
513
|
+
unevaluatedItems: { type: 'string' },
|
|
514
|
+
};
|
|
515
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
516
|
+
(0, chai_1.expect)(await parseSetup(toContent([5, 6, 7, 8]))).to.be.empty;
|
|
517
|
+
const result = await parseSetup(toContent(['foo', 'bar', 'baz']));
|
|
518
|
+
(0, chai_1.expect)(result).to.have.length(3);
|
|
519
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type. Expected');
|
|
520
|
+
(0, chai_1.expect)(result[0].message).to.include('number');
|
|
521
|
+
});
|
|
522
|
+
it('unevaluatedItems with nested tuple', async () => {
|
|
523
|
+
const schema = {
|
|
524
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
525
|
+
prefixItems: [{ type: 'string' }],
|
|
526
|
+
allOf: [
|
|
527
|
+
{
|
|
528
|
+
prefixItems: [true, { type: 'number' }],
|
|
529
|
+
},
|
|
530
|
+
],
|
|
531
|
+
unevaluatedItems: false,
|
|
532
|
+
};
|
|
533
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
534
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 42]))).to.be.empty;
|
|
535
|
+
const result = await parseSetup(toContent(['foo', 42, true]));
|
|
536
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
537
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
|
|
538
|
+
});
|
|
539
|
+
it('unevaluatedItems with nested items', async () => {
|
|
540
|
+
const schema = {
|
|
541
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
542
|
+
unevaluatedItems: { type: 'boolean' },
|
|
543
|
+
anyOf: [{ items: { type: 'string' } }, true],
|
|
544
|
+
};
|
|
545
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
546
|
+
(0, chai_1.expect)(await parseSetup(toContent([true, false]))).to.be.empty;
|
|
547
|
+
(0, chai_1.expect)(await parseSetup(toContent(['yes', 'no']))).to.be.empty;
|
|
548
|
+
const result = await parseSetup(toContent(['yes', false]));
|
|
549
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
550
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type. Expected');
|
|
551
|
+
(0, chai_1.expect)(result[0].message).to.include('boolean');
|
|
552
|
+
});
|
|
553
|
+
it('unevaluatedItems with nested prefixItems and items', async () => {
|
|
554
|
+
const schema = {
|
|
555
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
556
|
+
allOf: [
|
|
557
|
+
{
|
|
558
|
+
prefixItems: [{ type: 'string' }],
|
|
559
|
+
items: true,
|
|
560
|
+
},
|
|
561
|
+
],
|
|
562
|
+
unevaluatedItems: false,
|
|
563
|
+
};
|
|
564
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
565
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo']))).to.be.empty;
|
|
566
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 42, true]))).to.be.empty;
|
|
567
|
+
});
|
|
568
|
+
it('unevaluatedItems with nested unevaluatedItems', async () => {
|
|
569
|
+
const schema = {
|
|
570
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
571
|
+
allOf: [
|
|
572
|
+
{
|
|
573
|
+
prefixItems: [{ type: 'string' }],
|
|
574
|
+
},
|
|
575
|
+
{ unevaluatedItems: true },
|
|
576
|
+
],
|
|
577
|
+
unevaluatedItems: false,
|
|
578
|
+
};
|
|
579
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
580
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo']))).to.be.empty;
|
|
581
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 42, true]))).to.be.empty;
|
|
582
|
+
});
|
|
583
|
+
it('unevaluatedItems with anyOf', async () => {
|
|
584
|
+
const schema = {
|
|
585
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
586
|
+
prefixItems: [{ const: 'foo' }],
|
|
587
|
+
anyOf: [
|
|
588
|
+
{
|
|
589
|
+
prefixItems: [true, { const: 'bar' }],
|
|
590
|
+
},
|
|
591
|
+
{
|
|
592
|
+
prefixItems: [true, true, { const: 'baz' }],
|
|
593
|
+
},
|
|
594
|
+
],
|
|
595
|
+
unevaluatedItems: false,
|
|
596
|
+
};
|
|
597
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
598
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
|
|
599
|
+
const result1 = await parseSetup(toContent(['foo', 'bar', 42]));
|
|
600
|
+
(0, chai_1.expect)(result1).to.have.length(1);
|
|
601
|
+
(0, chai_1.expect)(result1[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
|
|
602
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar', 'baz']))).to.be.empty;
|
|
603
|
+
const result2 = await parseSetup(toContent(['foo', 'bar', 'baz', 42]));
|
|
604
|
+
(0, chai_1.expect)(result2).to.have.length(1);
|
|
605
|
+
(0, chai_1.expect)(result2[0].message).to.include('Array has too many items according to schema. Expected 3 or fewer.');
|
|
606
|
+
});
|
|
607
|
+
it('unevaluatedItems with oneOf', async () => {
|
|
608
|
+
const schema = {
|
|
609
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
610
|
+
prefixItems: [{ const: 'foo' }],
|
|
611
|
+
oneOf: [
|
|
612
|
+
{
|
|
613
|
+
prefixItems: [true, { const: 'bar' }],
|
|
614
|
+
},
|
|
615
|
+
{
|
|
616
|
+
prefixItems: [true, { const: 'baz' }],
|
|
617
|
+
},
|
|
618
|
+
],
|
|
619
|
+
unevaluatedItems: false,
|
|
620
|
+
};
|
|
621
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
622
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
|
|
623
|
+
const result = await parseSetup(toContent(['foo', 'bar', 42]));
|
|
624
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
625
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
|
|
626
|
+
});
|
|
627
|
+
it('unevaluatedItems with not', async () => {
|
|
628
|
+
const schema = {
|
|
629
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
630
|
+
prefixItems: [{ const: 'foo' }],
|
|
631
|
+
not: {
|
|
632
|
+
not: {
|
|
633
|
+
prefixItems: [true, { const: 'bar' }],
|
|
634
|
+
},
|
|
635
|
+
},
|
|
636
|
+
unevaluatedItems: false,
|
|
637
|
+
};
|
|
638
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
639
|
+
const result = await parseSetup(toContent(['foo', 'bar']));
|
|
640
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
641
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
|
|
642
|
+
});
|
|
643
|
+
it('unevaluatedItems with if/then/else', async () => {
|
|
644
|
+
const schema = {
|
|
645
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
646
|
+
prefixItems: [{ const: 'foo' }],
|
|
647
|
+
if: {
|
|
648
|
+
prefixItems: [true, { const: 'bar' }],
|
|
649
|
+
},
|
|
650
|
+
then: {
|
|
651
|
+
prefixItems: [true, true, { const: 'then' }],
|
|
652
|
+
},
|
|
653
|
+
else: {
|
|
654
|
+
prefixItems: [true, true, true, { const: 'else' }],
|
|
655
|
+
},
|
|
656
|
+
unevaluatedItems: false,
|
|
657
|
+
};
|
|
658
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
659
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar', 'then']))).to.be.empty;
|
|
660
|
+
const result1 = await parseSetup(toContent(['foo', 'bar', 'then', 'else']));
|
|
661
|
+
(0, chai_1.expect)(result1).to.have.length(1);
|
|
662
|
+
(0, chai_1.expect)(result1[0].message).to.include('Array has too many items according to schema. Expected 3 or fewer.');
|
|
663
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 42, 42, 'else']))).to.be.empty;
|
|
664
|
+
const result2 = await parseSetup(toContent(['foo', 42, 42, 'else', 42]));
|
|
665
|
+
(0, chai_1.expect)(result2).to.have.length(1);
|
|
666
|
+
(0, chai_1.expect)(result2[0].message).to.include('Array has too many items according to schema. Expected 4 or fewer.');
|
|
667
|
+
});
|
|
668
|
+
it('unevaluatedItems with boolean schemas', async () => {
|
|
669
|
+
const schema = {
|
|
670
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
671
|
+
allOf: [true],
|
|
672
|
+
unevaluatedItems: false,
|
|
673
|
+
};
|
|
674
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
675
|
+
(0, chai_1.expect)(await parseSetup(toContent([]))).to.be.empty;
|
|
676
|
+
const result = await parseSetup(toContent(['foo']));
|
|
677
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
678
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
|
|
679
|
+
});
|
|
680
|
+
it('unevaluatedItems with $ref', async () => {
|
|
681
|
+
const schema = {
|
|
682
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
683
|
+
$ref: '#/$defs/bar',
|
|
684
|
+
prefixItems: [{ type: 'string' }],
|
|
685
|
+
unevaluatedItems: false,
|
|
686
|
+
$defs: {
|
|
687
|
+
bar: {
|
|
688
|
+
prefixItems: [true, { type: 'string' }],
|
|
689
|
+
},
|
|
690
|
+
},
|
|
691
|
+
};
|
|
692
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
693
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
|
|
694
|
+
const result = await parseSetup(toContent(['foo', 'bar', 'baz']));
|
|
695
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
696
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
|
|
697
|
+
});
|
|
698
|
+
it('unevaluatedItems before $ref', async () => {
|
|
699
|
+
const schema = {
|
|
700
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
701
|
+
unevaluatedItems: false,
|
|
702
|
+
prefixItems: [{ type: 'string' }],
|
|
703
|
+
$ref: '#/$defs/bar',
|
|
704
|
+
$defs: {
|
|
705
|
+
bar: {
|
|
706
|
+
prefixItems: [true, { type: 'string' }],
|
|
707
|
+
},
|
|
708
|
+
},
|
|
709
|
+
};
|
|
710
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
711
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
|
|
712
|
+
const result = await parseSetup(toContent(['foo', 'bar', 'baz']));
|
|
713
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
714
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
|
|
715
|
+
});
|
|
716
|
+
it('unevaluatedItems with $dynamicRef', async () => {
|
|
717
|
+
const schema = {
|
|
718
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
719
|
+
$id: 'https://example.com/unevaluated-items-with-dynamic-ref/derived',
|
|
720
|
+
$ref: './baseSchema',
|
|
721
|
+
$defs: {
|
|
722
|
+
derived: {
|
|
723
|
+
$dynamicAnchor: 'addons',
|
|
724
|
+
prefixItems: [true, { type: 'string' }],
|
|
725
|
+
},
|
|
726
|
+
baseSchema: {
|
|
727
|
+
$id: './baseSchema',
|
|
728
|
+
$comment: "unevaluatedItems comes first so it's more likely to catch bugs with implementations that are sensitive to keyword ordering",
|
|
729
|
+
unevaluatedItems: false,
|
|
730
|
+
type: 'array',
|
|
731
|
+
prefixItems: [{ type: 'string' }],
|
|
732
|
+
$dynamicRef: '#addons',
|
|
733
|
+
$defs: {
|
|
734
|
+
defaultAddons: {
|
|
735
|
+
$comment: 'Needed to satisfy the bookending requirement',
|
|
736
|
+
$dynamicAnchor: 'addons',
|
|
737
|
+
},
|
|
738
|
+
},
|
|
739
|
+
},
|
|
740
|
+
},
|
|
741
|
+
};
|
|
742
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
743
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
|
|
744
|
+
const result = await parseSetup(toContent(['foo', 'bar', 'baz']));
|
|
745
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
746
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
|
|
747
|
+
});
|
|
748
|
+
it("unevaluatedItems can't see inside cousins", async () => {
|
|
749
|
+
const schema = {
|
|
750
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
751
|
+
allOf: [
|
|
752
|
+
{
|
|
753
|
+
prefixItems: [true],
|
|
754
|
+
},
|
|
755
|
+
{ unevaluatedItems: false },
|
|
756
|
+
],
|
|
757
|
+
};
|
|
758
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
759
|
+
const result = await parseSetup(toContent([1]));
|
|
760
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
761
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
|
|
762
|
+
});
|
|
763
|
+
it('item is evaluated in an uncle schema to unevaluatedItems', async () => {
|
|
764
|
+
const schema = {
|
|
765
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
766
|
+
properties: {
|
|
767
|
+
foo: {
|
|
768
|
+
prefixItems: [{ type: 'string' }],
|
|
769
|
+
unevaluatedItems: false,
|
|
770
|
+
},
|
|
771
|
+
},
|
|
772
|
+
anyOf: [
|
|
773
|
+
{
|
|
774
|
+
properties: {
|
|
775
|
+
foo: {
|
|
776
|
+
prefixItems: [true, { type: 'string' }],
|
|
777
|
+
},
|
|
778
|
+
},
|
|
779
|
+
},
|
|
780
|
+
],
|
|
781
|
+
};
|
|
782
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
783
|
+
(0, chai_1.expect)(await parseSetup(toContent({ foo: ['test'] }))).to.be.empty;
|
|
784
|
+
const result = await parseSetup(toContent({ foo: ['test', 'test'] }));
|
|
785
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
786
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
|
|
787
|
+
});
|
|
788
|
+
it('unevaluatedItems depends on adjacent contains', async () => {
|
|
789
|
+
const schema = {
|
|
790
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
791
|
+
prefixItems: [true],
|
|
792
|
+
contains: { type: 'string' },
|
|
793
|
+
unevaluatedItems: false,
|
|
794
|
+
};
|
|
795
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
796
|
+
(0, chai_1.expect)(await parseSetup(toContent([1, 'foo']))).to.be.empty;
|
|
797
|
+
const result1 = await parseSetup(toContent([1, 2]));
|
|
798
|
+
(0, chai_1.expect)(result1).to.have.length(2);
|
|
799
|
+
(0, chai_1.expect)(result1[0].message).to.include('Array has too few items matching');
|
|
800
|
+
(0, chai_1.expect)(result1[0].message).to.include('Expected 1 or more.');
|
|
801
|
+
(0, chai_1.expect)(result1[1].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
|
|
802
|
+
const result2 = await parseSetup(toContent([1, 2, 'foo']));
|
|
803
|
+
(0, chai_1.expect)(result2).to.have.length(1);
|
|
804
|
+
(0, chai_1.expect)(result2[0].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
|
|
805
|
+
});
|
|
806
|
+
it('unevaluatedItems depends on multiple nested contains', async () => {
|
|
807
|
+
const schema = {
|
|
808
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
809
|
+
allOf: [{ contains: { multipleOf: 2 } }, { contains: { multipleOf: 3 } }],
|
|
810
|
+
unevaluatedItems: { multipleOf: 5 },
|
|
811
|
+
};
|
|
812
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
813
|
+
(0, chai_1.expect)(await parseSetup(toContent([2, 3, 4, 5, 6]))).to.be.empty;
|
|
814
|
+
const result = await parseSetup(toContent([2, 3, 4, 7, 8]));
|
|
815
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
816
|
+
(0, chai_1.expect)(result[0].message).to.include('Value is not divisible by 5.');
|
|
817
|
+
});
|
|
818
|
+
it('unevaluatedItems and contains interact to control item dependency relationship', async () => {
|
|
819
|
+
const schema = {
|
|
820
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
821
|
+
if: {
|
|
822
|
+
contains: { const: 'a' },
|
|
823
|
+
},
|
|
824
|
+
then: {
|
|
825
|
+
if: {
|
|
826
|
+
contains: { const: 'b' },
|
|
827
|
+
},
|
|
828
|
+
then: {
|
|
829
|
+
if: {
|
|
830
|
+
contains: { const: 'c' },
|
|
831
|
+
},
|
|
832
|
+
},
|
|
833
|
+
},
|
|
834
|
+
unevaluatedItems: false,
|
|
835
|
+
};
|
|
836
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
837
|
+
(0, chai_1.expect)(await parseSetup(toContent([]))).to.be.empty;
|
|
838
|
+
(0, chai_1.expect)(await parseSetup(toContent(['a', 'a']))).to.be.empty;
|
|
839
|
+
(0, chai_1.expect)(await parseSetup(toContent(['a', 'b', 'a', 'b', 'a']))).to.be.empty;
|
|
840
|
+
(0, chai_1.expect)(await parseSetup(toContent(['c', 'a', 'c', 'c', 'b', 'a']))).to.be.empty;
|
|
841
|
+
const result1 = await parseSetup(toContent(['b', 'b']));
|
|
842
|
+
(0, chai_1.expect)(result1).to.have.length(2);
|
|
843
|
+
(0, chai_1.expect)(result1[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
|
|
844
|
+
(0, chai_1.expect)(result1[1].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
|
|
845
|
+
const result2 = await parseSetup(toContent(['c', 'c']));
|
|
846
|
+
(0, chai_1.expect)(result2).to.have.length(2);
|
|
847
|
+
(0, chai_1.expect)(result2[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
|
|
848
|
+
(0, chai_1.expect)(result2[1].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
|
|
849
|
+
const result3 = await parseSetup(toContent(['c', 'b', 'c', 'b', 'c']));
|
|
850
|
+
(0, chai_1.expect)(result3).to.have.length(5);
|
|
851
|
+
(0, chai_1.expect)(result3[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
|
|
852
|
+
(0, chai_1.expect)(result3[1].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
|
|
853
|
+
(0, chai_1.expect)(result3[2].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
|
|
854
|
+
(0, chai_1.expect)(result3[3].message).to.include('Array has too many items according to schema. Expected 3 or fewer.');
|
|
855
|
+
(0, chai_1.expect)(result3[4].message).to.include('Array has too many items according to schema. Expected 4 or fewer.');
|
|
856
|
+
const result4 = await parseSetup(toContent(['c', 'a', 'c', 'a', 'c']));
|
|
857
|
+
(0, chai_1.expect)(result4).to.have.length(3);
|
|
858
|
+
(0, chai_1.expect)(result4[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
|
|
859
|
+
(0, chai_1.expect)(result4[1].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
|
|
860
|
+
(0, chai_1.expect)(result4[2].message).to.include('Array has too many items according to schema. Expected 4 or fewer.');
|
|
861
|
+
});
|
|
862
|
+
it('unevaluatedItems with minContains = 0', async () => {
|
|
863
|
+
const schema = {
|
|
864
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
865
|
+
contains: { type: 'string' },
|
|
866
|
+
minContains: 0,
|
|
867
|
+
unevaluatedItems: false,
|
|
868
|
+
};
|
|
869
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
870
|
+
(0, chai_1.expect)(await parseSetup(toContent([]))).to.be.empty;
|
|
871
|
+
const result1 = await parseSetup(toContent([0]));
|
|
872
|
+
(0, chai_1.expect)(result1).to.have.length(1);
|
|
873
|
+
(0, chai_1.expect)(result1[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
|
|
874
|
+
const result2 = await parseSetup(toContent(['foo', 0]));
|
|
875
|
+
(0, chai_1.expect)(result2).to.have.length(1);
|
|
876
|
+
(0, chai_1.expect)(result2[0].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
|
|
877
|
+
(0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
|
|
878
|
+
});
|
|
879
|
+
it('non-array instances are valid', async () => {
|
|
880
|
+
const schema = {
|
|
881
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
882
|
+
unevaluatedItems: false,
|
|
883
|
+
};
|
|
884
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
885
|
+
(0, chai_1.expect)(await parseSetup(toContent(true))).to.be.empty;
|
|
886
|
+
(0, chai_1.expect)(await parseSetup(toContent(123))).to.be.empty;
|
|
887
|
+
(0, chai_1.expect)(await parseSetup(toContent(1.0))).to.be.empty;
|
|
888
|
+
(0, chai_1.expect)(await parseSetup(toContent({}))).to.be.empty;
|
|
889
|
+
(0, chai_1.expect)(await parseSetup(toContent('foo'))).to.be.empty;
|
|
890
|
+
(0, chai_1.expect)(await parseSetup(toContent(null))).to.be.empty;
|
|
891
|
+
});
|
|
892
|
+
it('unevaluatedItems with null instance elements', async () => {
|
|
893
|
+
const schema = {
|
|
894
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
895
|
+
unevaluatedItems: { type: 'null' },
|
|
896
|
+
};
|
|
897
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
898
|
+
(0, chai_1.expect)(await parseSetup(toContent([null]))).to.be.empty;
|
|
899
|
+
});
|
|
900
|
+
it('unevaluatedItems can see annotations from if without then and else', async () => {
|
|
901
|
+
const schema = {
|
|
902
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
903
|
+
if: {
|
|
904
|
+
prefixItems: [{ const: 'a' }],
|
|
905
|
+
},
|
|
906
|
+
unevaluatedItems: false,
|
|
907
|
+
};
|
|
908
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
909
|
+
(0, chai_1.expect)(await parseSetup(toContent(['a']))).to.be.empty;
|
|
910
|
+
const result = await parseSetup(toContent(['b']));
|
|
911
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
912
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
|
|
913
|
+
});
|
|
914
|
+
it('Evaluated items collection needs to consider instance location', async () => {
|
|
915
|
+
const schema = {
|
|
916
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
917
|
+
prefixItems: [
|
|
918
|
+
{
|
|
919
|
+
prefixItems: [true, { type: 'string' }],
|
|
920
|
+
},
|
|
921
|
+
],
|
|
922
|
+
unevaluatedItems: false,
|
|
923
|
+
};
|
|
924
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
925
|
+
const result = await parseSetup(toContent([['foo', 'bar'], 'bar']));
|
|
926
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
927
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
|
|
928
|
+
});
|
|
929
|
+
});
|
|
930
|
+
describe('keyword: contains', () => {
|
|
931
|
+
it('contains keyword validation', async () => {
|
|
932
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
933
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
934
|
+
contains: { minimum: 5 },
|
|
935
|
+
});
|
|
936
|
+
// array with item matching schema (5) is valid
|
|
937
|
+
let content = toContent([3, 4, 5]);
|
|
938
|
+
let result = await parseSetup(content);
|
|
939
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
940
|
+
// array with item matching schema (6) is valid
|
|
941
|
+
content = toContent([3, 4, 6]);
|
|
942
|
+
result = await parseSetup(content);
|
|
943
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
944
|
+
// array with two items matching schema (5, 6) is valid
|
|
945
|
+
content = toContent([3, 4, 5, 6]);
|
|
946
|
+
result = await parseSetup(content);
|
|
947
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
948
|
+
// array without items matching schema is invalid
|
|
949
|
+
content = toContent([2, 3, 4]);
|
|
950
|
+
result = await parseSetup(content);
|
|
951
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
952
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
|
|
953
|
+
// empty array is invalid
|
|
954
|
+
content = toContent([]);
|
|
955
|
+
result = await parseSetup(content);
|
|
956
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
957
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
|
|
958
|
+
// not array is valid
|
|
959
|
+
content = toContent({});
|
|
960
|
+
result = await parseSetup(content);
|
|
961
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
962
|
+
});
|
|
963
|
+
it('contains keyword with const keyword', async () => {
|
|
964
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
965
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
966
|
+
contains: { const: 5 },
|
|
967
|
+
});
|
|
968
|
+
// array with item 5 is valid
|
|
969
|
+
let content = toContent([3, 4, 5]);
|
|
970
|
+
let result = await parseSetup(content);
|
|
971
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
972
|
+
// array with two items 5 is valid
|
|
973
|
+
content = toContent([3, 4, 5, 5]);
|
|
974
|
+
result = await parseSetup(content);
|
|
975
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
976
|
+
// array without item 5 is invalid
|
|
977
|
+
content = toContent([1, 2, 3, 4]);
|
|
978
|
+
result = await parseSetup(content);
|
|
979
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
980
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
|
|
981
|
+
});
|
|
982
|
+
it('contains keyword with boolean schema true', async () => {
|
|
983
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
984
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
985
|
+
contains: true,
|
|
986
|
+
});
|
|
987
|
+
// any non-empty array is valid
|
|
988
|
+
let content = toContent(['foo']);
|
|
989
|
+
let result = await parseSetup(content);
|
|
990
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
991
|
+
// empty array is invalid
|
|
992
|
+
content = toContent([]);
|
|
993
|
+
result = await parseSetup(content);
|
|
994
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
995
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
|
|
996
|
+
});
|
|
997
|
+
it('contains keyword with boolean schema false', async () => {
|
|
998
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
999
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1000
|
+
contains: false,
|
|
1001
|
+
});
|
|
1002
|
+
// any non-empty array is invalid
|
|
1003
|
+
let content = toContent(['foo']);
|
|
1004
|
+
let result = await parseSetup(content);
|
|
1005
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1006
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
|
|
1007
|
+
// empty array is invalid
|
|
1008
|
+
content = toContent([]);
|
|
1009
|
+
result = await parseSetup(content);
|
|
1010
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1011
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
|
|
1012
|
+
// non-arrays are valid
|
|
1013
|
+
content = toContent('contains does not apply to strings');
|
|
1014
|
+
result = await parseSetup(content);
|
|
1015
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
1016
|
+
});
|
|
1017
|
+
it('items + contains', async () => {
|
|
1018
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
1019
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1020
|
+
items: { multipleOf: 2 },
|
|
1021
|
+
contains: { multipleOf: 3 },
|
|
1022
|
+
});
|
|
1023
|
+
// matches items, does not match contains
|
|
1024
|
+
let content = toContent([2, 4, 8]);
|
|
1025
|
+
let result = await parseSetup(content);
|
|
1026
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1027
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
|
|
1028
|
+
// does not match items, matches contains
|
|
1029
|
+
content = toContent([3, 6, 9]);
|
|
1030
|
+
result = await parseSetup(content);
|
|
1031
|
+
(0, chai_1.expect)(result).to.have.length(2);
|
|
1032
|
+
(0, chai_1.expect)(result[0].message).to.include('Value is not divisible by 2.');
|
|
1033
|
+
(0, chai_1.expect)(result[1].message).to.include('Value is not divisible by 2.');
|
|
1034
|
+
// matches both items and contains
|
|
1035
|
+
content = toContent([6, 12]);
|
|
1036
|
+
result = await parseSetup(content);
|
|
1037
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
1038
|
+
// matches neither items nor contains
|
|
1039
|
+
content = toContent([1, 5]);
|
|
1040
|
+
result = await parseSetup(content);
|
|
1041
|
+
(0, chai_1.expect)(result).to.have.length(3);
|
|
1042
|
+
(0, chai_1.expect)(result[0].message).to.include('Value is not divisible by 2.');
|
|
1043
|
+
(0, chai_1.expect)(result[1].message).to.include('Value is not divisible by 2.');
|
|
1044
|
+
(0, chai_1.expect)(result[2].message).to.include('Array has too few items matching');
|
|
1045
|
+
});
|
|
1046
|
+
it('contains with false if subschema', async () => {
|
|
1047
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
1048
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1049
|
+
contains: {
|
|
1050
|
+
if: false,
|
|
1051
|
+
else: true,
|
|
1052
|
+
},
|
|
1053
|
+
});
|
|
1054
|
+
// any non-empty array is valid
|
|
1055
|
+
let content = toContent(['foo']);
|
|
1056
|
+
let result = await parseSetup(content);
|
|
1057
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
1058
|
+
// empty array is invalid
|
|
1059
|
+
content = toContent([]);
|
|
1060
|
+
result = await parseSetup(content);
|
|
1061
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1062
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
|
|
1063
|
+
});
|
|
1064
|
+
it('contains with null instance elements', async () => {
|
|
1065
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
1066
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1067
|
+
contains: {
|
|
1068
|
+
type: 'null',
|
|
1069
|
+
},
|
|
1070
|
+
});
|
|
1071
|
+
// allows null items
|
|
1072
|
+
const content = toContent([null]);
|
|
1073
|
+
const result = await parseSetup(content);
|
|
1074
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
1075
|
+
});
|
|
1076
|
+
});
|
|
1077
|
+
describe('contains and unevaluatedItems tests', () => {
|
|
1078
|
+
beforeEach(() => {
|
|
1079
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
1080
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1081
|
+
type: 'array',
|
|
1082
|
+
contains: { type: 'string' },
|
|
1083
|
+
unevaluatedItems: { type: 'number' },
|
|
1084
|
+
});
|
|
1085
|
+
});
|
|
1086
|
+
it('passes when there is at least one string and all non-matching items are numbers', async () => {
|
|
1087
|
+
const content = `- hello
|
|
1088
|
+
- 1
|
|
1089
|
+
- 2`;
|
|
1090
|
+
const result = await parseSetup(content);
|
|
1091
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
1092
|
+
});
|
|
1093
|
+
it('passes even if multiple items are strings (strings match contains => evaluated)', async () => {
|
|
1094
|
+
const content = `- hello
|
|
1095
|
+
- oops
|
|
1096
|
+
- 3`;
|
|
1097
|
+
const result = await parseSetup(content);
|
|
1098
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
1099
|
+
});
|
|
1100
|
+
it('fails if a non-matching item is not a number', async () => {
|
|
1101
|
+
const content = `- hello\n- a: 1`;
|
|
1102
|
+
const result = await parseSetup(content);
|
|
1103
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1104
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type');
|
|
1105
|
+
(0, chai_1.expect)(result[0].message).to.include('number');
|
|
1106
|
+
});
|
|
1107
|
+
it('fails if no item matches contains (minContains defaults to 1)', async () => {
|
|
1108
|
+
const content = `- 1\n- 2`;
|
|
1109
|
+
const result = await parseSetup(content);
|
|
1110
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1111
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
|
|
1112
|
+
(0, chai_1.expect)(result[0].message).to.include('contains');
|
|
1113
|
+
(0, chai_1.expect)(result[0].message).to.include('Expected 1 or more');
|
|
1114
|
+
});
|
|
1115
|
+
});
|
|
1116
|
+
it('passes ["a","b","ccc"] because "ccc" is evaluated by contains', async () => {
|
|
1117
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
1118
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1119
|
+
type: 'array',
|
|
1120
|
+
prefixItems: [{ type: 'string' }, { type: 'string' }],
|
|
1121
|
+
contains: { type: 'string', minLength: 3 },
|
|
1122
|
+
unevaluatedItems: false,
|
|
1123
|
+
});
|
|
1124
|
+
const content = `- a
|
|
1125
|
+
- b
|
|
1126
|
+
- ccc`;
|
|
1127
|
+
const result = await parseSetup(content);
|
|
1128
|
+
(0, chai_1.expect)(result).to.be.empty;
|
|
1129
|
+
});
|
|
1130
|
+
it('fails ["a","b","ccc"] using boolean-algebra workaround', async () => {
|
|
1131
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
|
|
1132
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1133
|
+
type: 'array',
|
|
1134
|
+
prefixItems: [{ type: 'string' }, { type: 'string' }],
|
|
1135
|
+
not: {
|
|
1136
|
+
items: {
|
|
1137
|
+
not: { type: 'string', minLength: 3 },
|
|
1138
|
+
},
|
|
1139
|
+
},
|
|
1140
|
+
unevaluatedItems: false,
|
|
1141
|
+
});
|
|
1142
|
+
const content = `- a
|
|
1143
|
+
- b
|
|
1144
|
+
- ccc`;
|
|
1145
|
+
const result = await parseSetup(content);
|
|
1146
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1147
|
+
(0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
|
|
1148
|
+
});
|
|
1149
|
+
describe('Mixed dialect subschema instance validation in Compound Schema Document', () => {
|
|
1150
|
+
it('draft-2020 root with draft-04 subschema', async () => {
|
|
1151
|
+
const schema = {
|
|
1152
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1153
|
+
type: 'object',
|
|
1154
|
+
properties: {
|
|
1155
|
+
age: {
|
|
1156
|
+
allOf: [
|
|
1157
|
+
{
|
|
1158
|
+
$schema: 'http://json-schema.org/draft-04/schema#',
|
|
1159
|
+
type: 'number',
|
|
1160
|
+
minimum: 0,
|
|
1161
|
+
exclusiveMinimum: true,
|
|
1162
|
+
},
|
|
1163
|
+
],
|
|
1164
|
+
},
|
|
1165
|
+
},
|
|
1166
|
+
};
|
|
1167
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1168
|
+
const failResult = await parseSetup('age: 0');
|
|
1169
|
+
(0, chai_1.expect)(failResult).to.have.length(1);
|
|
1170
|
+
(0, chai_1.expect)(failResult[0].message).to.include('exclusive minimum of 0');
|
|
1171
|
+
const passResult = await parseSetup('age: 1');
|
|
1172
|
+
(0, chai_1.expect)(passResult).to.be.empty;
|
|
1173
|
+
});
|
|
1174
|
+
it('draft-2020 root with draft-07 subschema', async () => {
|
|
1175
|
+
const schema = {
|
|
1176
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1177
|
+
type: 'object',
|
|
1178
|
+
properties: {
|
|
1179
|
+
score: {
|
|
1180
|
+
anyOf: [
|
|
1181
|
+
{
|
|
1182
|
+
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
1183
|
+
type: 'number',
|
|
1184
|
+
exclusiveMinimum: 0,
|
|
1185
|
+
},
|
|
1186
|
+
],
|
|
1187
|
+
},
|
|
1188
|
+
},
|
|
1189
|
+
};
|
|
1190
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1191
|
+
const failResult = await parseSetup('score: 0');
|
|
1192
|
+
(0, chai_1.expect)(failResult).to.have.length(1);
|
|
1193
|
+
(0, chai_1.expect)(failResult[0].message).to.include('exclusive minimum of 0');
|
|
1194
|
+
const passResult = await parseSetup('score: 1');
|
|
1195
|
+
(0, chai_1.expect)(passResult).to.be.empty;
|
|
1196
|
+
});
|
|
1197
|
+
it('draft-07 root with draft-2019 subschema', async () => {
|
|
1198
|
+
const schema = {
|
|
1199
|
+
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
1200
|
+
type: 'object',
|
|
1201
|
+
required: ['productId'],
|
|
1202
|
+
properties: {
|
|
1203
|
+
productId: { type: 'string' },
|
|
1204
|
+
metadata: {
|
|
1205
|
+
$schema: 'https://json-schema.org/draft/2019-09/schema',
|
|
1206
|
+
type: 'object',
|
|
1207
|
+
properties: {
|
|
1208
|
+
tags: {
|
|
1209
|
+
type: 'array',
|
|
1210
|
+
contains: { type: 'string' },
|
|
1211
|
+
maxContains: 5,
|
|
1212
|
+
},
|
|
1213
|
+
},
|
|
1214
|
+
},
|
|
1215
|
+
},
|
|
1216
|
+
};
|
|
1217
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1218
|
+
const failContent = `productId: "PROD-123"
|
|
1219
|
+
metadata:
|
|
1220
|
+
tags:
|
|
1221
|
+
- "electronics"
|
|
1222
|
+
- "sale"
|
|
1223
|
+
- "featured"
|
|
1224
|
+
- "new"
|
|
1225
|
+
- "popular"
|
|
1226
|
+
- "trending"`;
|
|
1227
|
+
const failResult = await parseSetup(failContent);
|
|
1228
|
+
(0, chai_1.expect)(failResult).to.have.length(1);
|
|
1229
|
+
(0, chai_1.expect)(failResult[0].message).to.include('too many items matching "contains"');
|
|
1230
|
+
(0, chai_1.expect)(failResult[0].message).to.include('5 or fewer');
|
|
1231
|
+
const passContent = `productId: "PROD-123"
|
|
1232
|
+
metadata:
|
|
1233
|
+
tags:
|
|
1234
|
+
- "electronics"
|
|
1235
|
+
- "sale"
|
|
1236
|
+
- "featured"
|
|
1237
|
+
- "new"
|
|
1238
|
+
- "popular"`;
|
|
1239
|
+
const passResult = await parseSetup(passContent);
|
|
1240
|
+
(0, chai_1.expect)(passResult).to.be.empty;
|
|
1241
|
+
});
|
|
1242
|
+
});
|
|
1243
|
+
describe('$dynamicAnchor and $dynamicRef resolution', () => {
|
|
1244
|
+
const treeSchema = {
|
|
1245
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1246
|
+
$id: 'http://localhost:1234/draft2020-12/tree.json',
|
|
1247
|
+
$dynamicAnchor: 'node',
|
|
1248
|
+
type: 'object',
|
|
1249
|
+
properties: {
|
|
1250
|
+
data: true,
|
|
1251
|
+
children: {
|
|
1252
|
+
type: 'array',
|
|
1253
|
+
items: { $dynamicRef: '#node' },
|
|
1254
|
+
},
|
|
1255
|
+
},
|
|
1256
|
+
};
|
|
1257
|
+
const extendibleDynamicRefSchema = {
|
|
1258
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1259
|
+
$id: 'http://localhost:1234/draft2020-12/extendible-dynamic-ref.json',
|
|
1260
|
+
type: 'object',
|
|
1261
|
+
additionalProperties: false,
|
|
1262
|
+
properties: {
|
|
1263
|
+
elements: {
|
|
1264
|
+
type: 'array',
|
|
1265
|
+
items: { $dynamicRef: '#elements' },
|
|
1266
|
+
},
|
|
1267
|
+
},
|
|
1268
|
+
$defs: {
|
|
1269
|
+
elements: {
|
|
1270
|
+
$comment: 'base dynamic anchor',
|
|
1271
|
+
$dynamicAnchor: 'elements',
|
|
1272
|
+
},
|
|
1273
|
+
},
|
|
1274
|
+
};
|
|
1275
|
+
const detachedDynamicRefSchema = {
|
|
1276
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1277
|
+
$id: 'http://localhost:1234/draft2020-12/detached-dynamicref.json',
|
|
1278
|
+
$defs: {
|
|
1279
|
+
foo: { $dynamicRef: '#number' },
|
|
1280
|
+
number: { $dynamicAnchor: 'number', type: 'number' },
|
|
1281
|
+
},
|
|
1282
|
+
};
|
|
1283
|
+
describe('basic $dynamicRef behavior', () => {
|
|
1284
|
+
it('A $dynamicRef to a $dynamicAnchor in the same schema resource behaves like a normal $ref to an $anchor', async () => {
|
|
1285
|
+
const schema = {
|
|
1286
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1287
|
+
$id: 'https://test.json-schema.org/dynamicRef-dynamicAnchor-same-schema/root',
|
|
1288
|
+
type: 'array',
|
|
1289
|
+
items: { $dynamicRef: '#items' },
|
|
1290
|
+
$defs: {
|
|
1291
|
+
foo: {
|
|
1292
|
+
$dynamicAnchor: 'items',
|
|
1293
|
+
type: 'string',
|
|
1294
|
+
},
|
|
1295
|
+
},
|
|
1296
|
+
};
|
|
1297
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1298
|
+
(0, chai_1.expect)(await parseSetup("['foo', 'bar']")).to.be.empty;
|
|
1299
|
+
const result = await parseSetup("['foo', 42]");
|
|
1300
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1301
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
|
|
1302
|
+
(0, chai_1.expect)(result[0].message).to.include('string');
|
|
1303
|
+
});
|
|
1304
|
+
it('A $dynamicRef to an $anchor in the same schema resource behaves like a normal $ref to an $anchor', async () => {
|
|
1305
|
+
const schema = {
|
|
1306
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1307
|
+
$id: 'https://test.json-schema.org/dynamicRef-anchor-same-schema/root',
|
|
1308
|
+
type: 'array',
|
|
1309
|
+
items: { $dynamicRef: '#items' },
|
|
1310
|
+
$defs: {
|
|
1311
|
+
foo: {
|
|
1312
|
+
$anchor: 'items',
|
|
1313
|
+
type: 'string',
|
|
1314
|
+
},
|
|
1315
|
+
},
|
|
1316
|
+
};
|
|
1317
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1318
|
+
(0, chai_1.expect)(await parseSetup("['foo', 'bar']")).to.be.empty;
|
|
1319
|
+
const result = await parseSetup("['foo', 42]");
|
|
1320
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1321
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
|
|
1322
|
+
(0, chai_1.expect)(result[0].message).to.include('string');
|
|
1323
|
+
});
|
|
1324
|
+
it('A $ref to a $dynamicAnchor in the same schema resource behaves like a normal $ref to an $anchor', async () => {
|
|
1325
|
+
const schema = {
|
|
1326
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1327
|
+
$id: 'https://test.json-schema.org/ref-dynamicAnchor-same-schema/root',
|
|
1328
|
+
type: 'array',
|
|
1329
|
+
items: { $ref: '#items' },
|
|
1330
|
+
$defs: {
|
|
1331
|
+
foo: {
|
|
1332
|
+
$dynamicAnchor: 'items',
|
|
1333
|
+
type: 'string',
|
|
1334
|
+
},
|
|
1335
|
+
},
|
|
1336
|
+
};
|
|
1337
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1338
|
+
(0, chai_1.expect)(await parseSetup("['foo', 'bar']")).to.be.empty;
|
|
1339
|
+
const result = await parseSetup("['foo', 42]");
|
|
1340
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1341
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
|
|
1342
|
+
(0, chai_1.expect)(result[0].message).to.include('string');
|
|
1343
|
+
});
|
|
1344
|
+
it('A $dynamicRef resolves to the first $dynamicAnchor still in scope that is encountered when the schema is evaluated', async () => {
|
|
1345
|
+
const schema = {
|
|
1346
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1347
|
+
$id: 'https://test.json-schema.org/typical-dynamic-resolution/root',
|
|
1348
|
+
$ref: 'list',
|
|
1349
|
+
$defs: {
|
|
1350
|
+
foo: {
|
|
1351
|
+
$dynamicAnchor: 'items',
|
|
1352
|
+
type: 'string',
|
|
1353
|
+
},
|
|
1354
|
+
list: {
|
|
1355
|
+
$id: 'list',
|
|
1356
|
+
type: 'array',
|
|
1357
|
+
items: { $dynamicRef: '#items' },
|
|
1358
|
+
$defs: {
|
|
1359
|
+
items: {
|
|
1360
|
+
$comment: 'This is only needed to satisfy the bookending requirement',
|
|
1361
|
+
$dynamicAnchor: 'items',
|
|
1362
|
+
},
|
|
1363
|
+
},
|
|
1364
|
+
},
|
|
1365
|
+
},
|
|
1366
|
+
};
|
|
1367
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1368
|
+
(0, chai_1.expect)(await parseSetup("['foo', 'bar']")).to.be.empty;
|
|
1369
|
+
const result = await parseSetup("['foo', 42]");
|
|
1370
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1371
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
|
|
1372
|
+
(0, chai_1.expect)(result[0].message).to.include('string');
|
|
1373
|
+
});
|
|
1374
|
+
it('A $dynamicRef without anchor in fragment behaves identical to $ref', async () => {
|
|
1375
|
+
const schema = {
|
|
1376
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1377
|
+
$id: 'https://test.json-schema.org/dynamicRef-without-anchor/root',
|
|
1378
|
+
$ref: 'list',
|
|
1379
|
+
$defs: {
|
|
1380
|
+
foo: {
|
|
1381
|
+
$dynamicAnchor: 'items',
|
|
1382
|
+
type: 'string',
|
|
1383
|
+
},
|
|
1384
|
+
list: {
|
|
1385
|
+
$id: 'list',
|
|
1386
|
+
type: 'array',
|
|
1387
|
+
items: { $dynamicRef: '#/$defs/items' },
|
|
1388
|
+
$defs: {
|
|
1389
|
+
items: {
|
|
1390
|
+
$comment: 'This is only needed to satisfy the bookending requirement',
|
|
1391
|
+
$dynamicAnchor: 'items',
|
|
1392
|
+
type: 'number',
|
|
1393
|
+
},
|
|
1394
|
+
},
|
|
1395
|
+
},
|
|
1396
|
+
},
|
|
1397
|
+
};
|
|
1398
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1399
|
+
const invalid = await parseSetup("['foo', 'bar']");
|
|
1400
|
+
(0, chai_1.expect)(invalid).to.have.length(1);
|
|
1401
|
+
(0, chai_1.expect)(invalid[0].message).to.include('Incorrect type.');
|
|
1402
|
+
(0, chai_1.expect)(invalid[0].message).to.include('number');
|
|
1403
|
+
(0, chai_1.expect)(await parseSetup('[24, 42]')).to.be.empty;
|
|
1404
|
+
});
|
|
1405
|
+
it("A $dynamicRef with intermediate scopes that don't include a matching $dynamicAnchor does not affect dynamic scope resolution", async () => {
|
|
1406
|
+
const schema = {
|
|
1407
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1408
|
+
$id: 'https://test.json-schema.org/dynamic-resolution-with-intermediate-scopes/root',
|
|
1409
|
+
$ref: 'intermediate-scope',
|
|
1410
|
+
$defs: {
|
|
1411
|
+
foo: {
|
|
1412
|
+
$dynamicAnchor: 'items',
|
|
1413
|
+
type: 'string',
|
|
1414
|
+
},
|
|
1415
|
+
'intermediate-scope': {
|
|
1416
|
+
$id: 'intermediate-scope',
|
|
1417
|
+
$ref: 'list',
|
|
1418
|
+
},
|
|
1419
|
+
list: {
|
|
1420
|
+
$id: 'list',
|
|
1421
|
+
type: 'array',
|
|
1422
|
+
items: { $dynamicRef: '#items' },
|
|
1423
|
+
$defs: {
|
|
1424
|
+
items: {
|
|
1425
|
+
$comment: 'This is only needed to satisfy the bookending requirement',
|
|
1426
|
+
$dynamicAnchor: 'items',
|
|
1427
|
+
},
|
|
1428
|
+
},
|
|
1429
|
+
},
|
|
1430
|
+
},
|
|
1431
|
+
};
|
|
1432
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1433
|
+
(0, chai_1.expect)(await parseSetup("['foo', 'bar']")).to.be.empty;
|
|
1434
|
+
const result = await parseSetup("['foo', 42]");
|
|
1435
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1436
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
|
|
1437
|
+
(0, chai_1.expect)(result[0].message).to.include('string');
|
|
1438
|
+
});
|
|
1439
|
+
it('An $anchor with the same name as a $dynamicAnchor is not used for dynamic scope resolution', async () => {
|
|
1440
|
+
const schema = {
|
|
1441
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1442
|
+
$id: 'https://test.json-schema.org/dynamic-resolution-ignores-anchors/root',
|
|
1443
|
+
$ref: 'list',
|
|
1444
|
+
$defs: {
|
|
1445
|
+
foo: {
|
|
1446
|
+
$anchor: 'items',
|
|
1447
|
+
type: 'string',
|
|
1448
|
+
},
|
|
1449
|
+
list: {
|
|
1450
|
+
$id: 'list',
|
|
1451
|
+
type: 'array',
|
|
1452
|
+
items: { $dynamicRef: '#items' },
|
|
1453
|
+
$defs: {
|
|
1454
|
+
items: {
|
|
1455
|
+
$comment: 'This is only needed to satisfy the bookending requirement',
|
|
1456
|
+
$dynamicAnchor: 'items',
|
|
1457
|
+
},
|
|
1458
|
+
},
|
|
1459
|
+
},
|
|
1460
|
+
},
|
|
1461
|
+
};
|
|
1462
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1463
|
+
(0, chai_1.expect)(await parseSetup("['foo', 42]")).to.be.empty;
|
|
1464
|
+
});
|
|
1465
|
+
it('A $dynamicRef without a matching $dynamicAnchor in the same schema resource behaves like a normal $ref to $anchor', async () => {
|
|
1466
|
+
const schema = {
|
|
1467
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1468
|
+
$id: 'https://test.json-schema.org/dynamic-resolution-without-bookend/root',
|
|
1469
|
+
$ref: 'list',
|
|
1470
|
+
$defs: {
|
|
1471
|
+
foo: {
|
|
1472
|
+
$dynamicAnchor: 'items',
|
|
1473
|
+
type: 'string',
|
|
1474
|
+
},
|
|
1475
|
+
list: {
|
|
1476
|
+
$id: 'list',
|
|
1477
|
+
type: 'array',
|
|
1478
|
+
items: { $dynamicRef: '#items' },
|
|
1479
|
+
$defs: {
|
|
1480
|
+
items: {
|
|
1481
|
+
$comment: 'This is only needed to give the reference somewhere to resolve to when it behaves like $ref',
|
|
1482
|
+
$anchor: 'items',
|
|
1483
|
+
},
|
|
1484
|
+
},
|
|
1485
|
+
},
|
|
1486
|
+
},
|
|
1487
|
+
};
|
|
1488
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1489
|
+
(0, chai_1.expect)(await parseSetup("['foo', 42]")).to.be.empty;
|
|
1490
|
+
});
|
|
1491
|
+
it('A $dynamicRef with a non-matching $dynamicAnchor in the same schema resource behaves like a normal $ref to $anchor', async () => {
|
|
1492
|
+
const schema = {
|
|
1493
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1494
|
+
$id: 'https://test.json-schema.org/unmatched-dynamic-anchor/root',
|
|
1495
|
+
$ref: 'list',
|
|
1496
|
+
$defs: {
|
|
1497
|
+
foo: {
|
|
1498
|
+
$dynamicAnchor: 'items',
|
|
1499
|
+
type: 'string',
|
|
1500
|
+
},
|
|
1501
|
+
list: {
|
|
1502
|
+
$id: 'list',
|
|
1503
|
+
type: 'array',
|
|
1504
|
+
items: { $dynamicRef: '#items' },
|
|
1505
|
+
$defs: {
|
|
1506
|
+
items: {
|
|
1507
|
+
$comment: 'This is only needed to give the reference somewhere to resolve to when it behaves like $ref',
|
|
1508
|
+
$anchor: 'items',
|
|
1509
|
+
$dynamicAnchor: 'foo',
|
|
1510
|
+
},
|
|
1511
|
+
},
|
|
1512
|
+
},
|
|
1513
|
+
},
|
|
1514
|
+
};
|
|
1515
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schema.$id, schema);
|
|
1516
|
+
(0, chai_1.expect)(await parseSetup("['foo', 42]")).to.be.empty;
|
|
1517
|
+
});
|
|
1518
|
+
});
|
|
1519
|
+
describe('relative dynamic references', () => {
|
|
1520
|
+
it('A $dynamicRef that initially resolves to a schema with a matching $dynamicAnchor resolves to the first $dynamicAnchor in the dynamic scope', async () => {
|
|
1521
|
+
const schema = {
|
|
1522
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1523
|
+
$id: 'https://test.json-schema.org/relative-dynamic-reference/root',
|
|
1524
|
+
$dynamicAnchor: 'meta',
|
|
1525
|
+
type: 'object',
|
|
1526
|
+
properties: {
|
|
1527
|
+
foo: { const: 'pass' },
|
|
1528
|
+
},
|
|
1529
|
+
$ref: 'extended',
|
|
1530
|
+
$defs: {
|
|
1531
|
+
extended: {
|
|
1532
|
+
$id: 'extended',
|
|
1533
|
+
$dynamicAnchor: 'meta',
|
|
1534
|
+
type: 'object',
|
|
1535
|
+
properties: {
|
|
1536
|
+
bar: { $ref: 'bar' },
|
|
1537
|
+
},
|
|
1538
|
+
},
|
|
1539
|
+
bar: {
|
|
1540
|
+
$id: 'bar',
|
|
1541
|
+
type: 'object',
|
|
1542
|
+
properties: {
|
|
1543
|
+
baz: { $dynamicRef: 'extended#meta' },
|
|
1544
|
+
},
|
|
1545
|
+
},
|
|
1546
|
+
},
|
|
1547
|
+
};
|
|
1548
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1549
|
+
(0, chai_1.expect)(await parseSetup(`foo: "pass"
|
|
1550
|
+
bar:
|
|
1551
|
+
baz:
|
|
1552
|
+
foo: pass`)).to.be.empty;
|
|
1553
|
+
const result = await parseSetup(`foo: "pass"
|
|
1554
|
+
bar:
|
|
1555
|
+
baz:
|
|
1556
|
+
foo: fail`);
|
|
1557
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1558
|
+
(0, chai_1.expect)(result[0].message).to.include('Value must be');
|
|
1559
|
+
(0, chai_1.expect)(result[0].message).to.include('pass');
|
|
1560
|
+
});
|
|
1561
|
+
it('A $dynamicRef that initially resolves to a schema without a matching $dynamicAnchor behaves like a normal $ref to $anchor', async () => {
|
|
1562
|
+
const schema = {
|
|
1563
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1564
|
+
$id: 'https://test.json-schema.org/relative-dynamic-reference-without-bookend/root',
|
|
1565
|
+
$dynamicAnchor: 'meta',
|
|
1566
|
+
type: 'object',
|
|
1567
|
+
properties: {
|
|
1568
|
+
foo: { const: 'pass' },
|
|
1569
|
+
},
|
|
1570
|
+
$ref: 'extended',
|
|
1571
|
+
$defs: {
|
|
1572
|
+
extended: {
|
|
1573
|
+
$id: 'extended',
|
|
1574
|
+
$anchor: 'meta',
|
|
1575
|
+
type: 'object',
|
|
1576
|
+
properties: {
|
|
1577
|
+
bar: { $ref: 'bar' },
|
|
1578
|
+
},
|
|
1579
|
+
},
|
|
1580
|
+
bar: {
|
|
1581
|
+
$id: 'bar',
|
|
1582
|
+
type: 'object',
|
|
1583
|
+
properties: {
|
|
1584
|
+
baz: { $dynamicRef: 'extended#meta' },
|
|
1585
|
+
},
|
|
1586
|
+
},
|
|
1587
|
+
},
|
|
1588
|
+
};
|
|
1589
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1590
|
+
(0, chai_1.expect)(await parseSetup(`foo: "pass"
|
|
1591
|
+
bar:
|
|
1592
|
+
baz:
|
|
1593
|
+
foo: fail`)).to.be.empty;
|
|
1594
|
+
});
|
|
1595
|
+
});
|
|
1596
|
+
it('multiple dynamic paths to the $dynamicRef keyword', async () => {
|
|
1597
|
+
const schema = {
|
|
1598
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1599
|
+
$id: 'https://test.json-schema.org/dynamic-ref-with-multiple-paths/main',
|
|
1600
|
+
if: {
|
|
1601
|
+
properties: {
|
|
1602
|
+
kindOfList: { const: 'numbers' },
|
|
1603
|
+
},
|
|
1604
|
+
required: ['kindOfList'],
|
|
1605
|
+
},
|
|
1606
|
+
then: { $ref: 'numberList' },
|
|
1607
|
+
else: { $ref: 'stringList' },
|
|
1608
|
+
$defs: {
|
|
1609
|
+
genericList: {
|
|
1610
|
+
$id: 'genericList',
|
|
1611
|
+
properties: {
|
|
1612
|
+
list: {
|
|
1613
|
+
items: { $dynamicRef: '#itemType' },
|
|
1614
|
+
},
|
|
1615
|
+
},
|
|
1616
|
+
$defs: {
|
|
1617
|
+
defaultItemType: {
|
|
1618
|
+
$comment: 'Only needed to satisfy bookending requirement',
|
|
1619
|
+
$dynamicAnchor: 'itemType',
|
|
1620
|
+
},
|
|
1621
|
+
},
|
|
1622
|
+
},
|
|
1623
|
+
numberList: {
|
|
1624
|
+
$id: 'numberList',
|
|
1625
|
+
$defs: {
|
|
1626
|
+
itemType: {
|
|
1627
|
+
$dynamicAnchor: 'itemType',
|
|
1628
|
+
type: 'number',
|
|
1629
|
+
},
|
|
1630
|
+
},
|
|
1631
|
+
$ref: 'genericList',
|
|
1632
|
+
},
|
|
1633
|
+
stringList: {
|
|
1634
|
+
$id: 'stringList',
|
|
1635
|
+
$defs: {
|
|
1636
|
+
itemType: {
|
|
1637
|
+
$dynamicAnchor: 'itemType',
|
|
1638
|
+
type: 'string',
|
|
1639
|
+
},
|
|
1640
|
+
},
|
|
1641
|
+
$ref: 'genericList',
|
|
1642
|
+
},
|
|
1643
|
+
},
|
|
1644
|
+
};
|
|
1645
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1646
|
+
(0, chai_1.expect)(await parseSetup(`kindOfList: "numbers"\nlist: [1.1]`)).to.be.empty;
|
|
1647
|
+
const numbersInvalid = await parseSetup(`kindOfList: "numbers"\nlist: ["foo"]`);
|
|
1648
|
+
(0, chai_1.expect)(numbersInvalid).to.have.length(1);
|
|
1649
|
+
(0, chai_1.expect)(numbersInvalid[0].message).to.include('Incorrect type.');
|
|
1650
|
+
(0, chai_1.expect)(numbersInvalid[0].message).to.include('number');
|
|
1651
|
+
const stringsInvalid = await parseSetup(`kindOfList: "strings"\nlist: [1.1]`);
|
|
1652
|
+
(0, chai_1.expect)(stringsInvalid).to.have.length(1);
|
|
1653
|
+
(0, chai_1.expect)(stringsInvalid[0].message).to.include('Incorrect type.');
|
|
1654
|
+
(0, chai_1.expect)(stringsInvalid[0].message).to.include('string');
|
|
1655
|
+
(0, chai_1.expect)(await parseSetup(`kindOfList: "strings"\nlist: ["foo"]`)).to.be.empty;
|
|
1656
|
+
});
|
|
1657
|
+
it('after leaving a dynamic scope, it is not used by a $dynamicRef', async () => {
|
|
1658
|
+
const schema = {
|
|
1659
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1660
|
+
$id: 'https://test.json-schema.org/dynamic-ref-leaving-dynamic-scope/main',
|
|
1661
|
+
if: {
|
|
1662
|
+
$id: 'first_scope',
|
|
1663
|
+
$defs: {
|
|
1664
|
+
thingy: {
|
|
1665
|
+
$comment: 'this is first_scope#thingy',
|
|
1666
|
+
$dynamicAnchor: 'thingy',
|
|
1667
|
+
type: 'number',
|
|
1668
|
+
},
|
|
1669
|
+
},
|
|
1670
|
+
},
|
|
1671
|
+
then: {
|
|
1672
|
+
$id: 'second_scope',
|
|
1673
|
+
$ref: 'start',
|
|
1674
|
+
$defs: {
|
|
1675
|
+
thingy: {
|
|
1676
|
+
$comment: 'this is second_scope#thingy, the final destination of the $dynamicRef',
|
|
1677
|
+
$dynamicAnchor: 'thingy',
|
|
1678
|
+
type: 'null',
|
|
1679
|
+
},
|
|
1680
|
+
},
|
|
1681
|
+
},
|
|
1682
|
+
$defs: {
|
|
1683
|
+
start: {
|
|
1684
|
+
$comment: 'this is the landing spot from $ref',
|
|
1685
|
+
$id: 'start',
|
|
1686
|
+
$dynamicRef: 'inner_scope#thingy',
|
|
1687
|
+
},
|
|
1688
|
+
thingy: {
|
|
1689
|
+
$comment: 'this is the first stop for the $dynamicRef',
|
|
1690
|
+
$id: 'inner_scope',
|
|
1691
|
+
$dynamicAnchor: 'thingy',
|
|
1692
|
+
type: 'string',
|
|
1693
|
+
},
|
|
1694
|
+
},
|
|
1695
|
+
};
|
|
1696
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
1697
|
+
const stringInvalid = await parseSetup('a string');
|
|
1698
|
+
(0, chai_1.expect)(stringInvalid).to.have.length(1);
|
|
1699
|
+
(0, chai_1.expect)(stringInvalid[0].message).to.include('null');
|
|
1700
|
+
const numberInvalid = await parseSetup('42');
|
|
1701
|
+
(0, chai_1.expect)(numberInvalid).to.have.length(1);
|
|
1702
|
+
(0, chai_1.expect)(stringInvalid[0].message).to.include('null');
|
|
1703
|
+
(0, chai_1.expect)(await parseSetup(null)).to.be.empty;
|
|
1704
|
+
});
|
|
1705
|
+
describe('strict-tree schema, guards against misspelled properties', () => {
|
|
1706
|
+
const strictTreeSchema = {
|
|
1707
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1708
|
+
$id: 'http://localhost:1234/draft2020-12/strict-tree.json',
|
|
1709
|
+
$dynamicAnchor: 'node',
|
|
1710
|
+
$ref: 'tree.json',
|
|
1711
|
+
unevaluatedProperties: false,
|
|
1712
|
+
};
|
|
1713
|
+
beforeEach(() => {
|
|
1714
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, treeSchema.$id, treeSchema);
|
|
1715
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, strictTreeSchema.$id, strictTreeSchema);
|
|
1716
|
+
});
|
|
1717
|
+
it('instance with misspelled field', async () => {
|
|
1718
|
+
const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-tree.json
|
|
1719
|
+
children:
|
|
1720
|
+
- daat: 1`);
|
|
1721
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1722
|
+
(0, chai_1.expect)(result[0].message).to.include('Property daat is not allowed.');
|
|
1723
|
+
});
|
|
1724
|
+
it('instance with correct field', async () => {
|
|
1725
|
+
(0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-tree.json
|
|
1726
|
+
children:
|
|
1727
|
+
- data: 1`)).to.be.empty;
|
|
1728
|
+
});
|
|
1729
|
+
});
|
|
1730
|
+
describe('tests for implementation dynamic anchor and reference link', () => {
|
|
1731
|
+
const strictExtendibleSchema = {
|
|
1732
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1733
|
+
$id: 'http://localhost:1234/draft2020-12/strict-extendible.json',
|
|
1734
|
+
$ref: 'extendible-dynamic-ref.json',
|
|
1735
|
+
$defs: {
|
|
1736
|
+
elements: {
|
|
1737
|
+
$dynamicAnchor: 'elements',
|
|
1738
|
+
properties: {
|
|
1739
|
+
a: true,
|
|
1740
|
+
},
|
|
1741
|
+
required: ['a'],
|
|
1742
|
+
additionalProperties: false,
|
|
1743
|
+
},
|
|
1744
|
+
},
|
|
1745
|
+
};
|
|
1746
|
+
beforeEach(() => {
|
|
1747
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, extendibleDynamicRefSchema.$id, extendibleDynamicRefSchema);
|
|
1748
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, strictExtendibleSchema.$id, strictExtendibleSchema);
|
|
1749
|
+
});
|
|
1750
|
+
it('incorrect parent schema', async () => {
|
|
1751
|
+
const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible.json
|
|
1752
|
+
a: true`);
|
|
1753
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1754
|
+
(0, chai_1.expect)(result[0].message).to.include('Property a is not allowed.');
|
|
1755
|
+
});
|
|
1756
|
+
it('incorrect extended schema', async () => {
|
|
1757
|
+
const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible.json
|
|
1758
|
+
elements:
|
|
1759
|
+
- b: 1`);
|
|
1760
|
+
(0, chai_1.expect)(result).to.have.length(2);
|
|
1761
|
+
(0, chai_1.expect)(result[0].message).to.include('Missing property');
|
|
1762
|
+
(0, chai_1.expect)(result[1].message).to.include('Property b is not allowed.');
|
|
1763
|
+
});
|
|
1764
|
+
it('correct extended schema', async () => {
|
|
1765
|
+
(0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible.json
|
|
1766
|
+
elements:
|
|
1767
|
+
- a: 1`)).to.be.empty;
|
|
1768
|
+
});
|
|
1769
|
+
});
|
|
1770
|
+
describe('$ref and $dynamicAnchor are independent of order - $defs first', () => {
|
|
1771
|
+
const schema = {
|
|
1772
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1773
|
+
$id: 'http://localhost:1234/draft2020-12/strict-extendible-allof-defs-first.json',
|
|
1774
|
+
allOf: [
|
|
1775
|
+
{
|
|
1776
|
+
$ref: 'extendible-dynamic-ref.json',
|
|
1777
|
+
},
|
|
1778
|
+
{
|
|
1779
|
+
$defs: {
|
|
1780
|
+
elements: {
|
|
1781
|
+
$dynamicAnchor: 'elements',
|
|
1782
|
+
properties: {
|
|
1783
|
+
a: true,
|
|
1784
|
+
},
|
|
1785
|
+
required: ['a'],
|
|
1786
|
+
additionalProperties: false,
|
|
1787
|
+
},
|
|
1788
|
+
},
|
|
1789
|
+
},
|
|
1790
|
+
],
|
|
1791
|
+
};
|
|
1792
|
+
beforeEach(() => {
|
|
1793
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, extendibleDynamicRefSchema.$id, extendibleDynamicRefSchema);
|
|
1794
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schema.$id, schema);
|
|
1795
|
+
});
|
|
1796
|
+
it('incorrect parent schema', async () => {
|
|
1797
|
+
const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible-allof-defs-first.json
|
|
1798
|
+
a: true`);
|
|
1799
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1800
|
+
(0, chai_1.expect)(result[0].message).to.include('Property a is not allowed.');
|
|
1801
|
+
});
|
|
1802
|
+
it('incorrect extended schema', async () => {
|
|
1803
|
+
const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible-allof-defs-first.json
|
|
1804
|
+
elements:
|
|
1805
|
+
- b: 1`);
|
|
1806
|
+
(0, chai_1.expect)(result).to.have.length(2);
|
|
1807
|
+
(0, chai_1.expect)(result.some((d) => d.message.includes('Missing property') && d.message.includes('a'))).to.eq(true);
|
|
1808
|
+
(0, chai_1.expect)(result.some((d) => d.message.includes('Property b is not allowed.'))).to.eq(true);
|
|
1809
|
+
});
|
|
1810
|
+
it('correct extended schema', async () => {
|
|
1811
|
+
(0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible-allof-defs-first.json
|
|
1812
|
+
elements:
|
|
1813
|
+
- a: 1`)).to.be.empty;
|
|
1814
|
+
});
|
|
1815
|
+
});
|
|
1816
|
+
describe('$ref and $dynamicAnchor are independent of order - $ref first', () => {
|
|
1817
|
+
const schema = {
|
|
1818
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1819
|
+
$id: 'http://localhost:1234/draft2020-12/strict-extendible-allof-ref-first.json',
|
|
1820
|
+
allOf: [
|
|
1821
|
+
{
|
|
1822
|
+
$defs: {
|
|
1823
|
+
elements: {
|
|
1824
|
+
$dynamicAnchor: 'elements',
|
|
1825
|
+
properties: {
|
|
1826
|
+
a: true,
|
|
1827
|
+
},
|
|
1828
|
+
required: ['a'],
|
|
1829
|
+
additionalProperties: false,
|
|
1830
|
+
},
|
|
1831
|
+
},
|
|
1832
|
+
},
|
|
1833
|
+
{
|
|
1834
|
+
$ref: 'extendible-dynamic-ref.json',
|
|
1835
|
+
},
|
|
1836
|
+
],
|
|
1837
|
+
};
|
|
1838
|
+
beforeEach(() => {
|
|
1839
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, extendibleDynamicRefSchema.$id, extendibleDynamicRefSchema);
|
|
1840
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schema.$id, schema);
|
|
1841
|
+
});
|
|
1842
|
+
it('incorrect parent schema', async () => {
|
|
1843
|
+
const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible-allof-ref-first.json
|
|
1844
|
+
a: true`);
|
|
1845
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1846
|
+
(0, chai_1.expect)(result[0].message).to.include('Property a is not allowed.');
|
|
1847
|
+
});
|
|
1848
|
+
it('incorrect extended schema', async () => {
|
|
1849
|
+
const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible-allof-ref-first.json
|
|
1850
|
+
elements:
|
|
1851
|
+
- b: 1`);
|
|
1852
|
+
(0, chai_1.expect)(result).to.have.length(2);
|
|
1853
|
+
(0, chai_1.expect)(result.some((d) => d.message.includes('Missing property') && d.message.includes('a'))).to.eq(true);
|
|
1854
|
+
(0, chai_1.expect)(result.some((d) => d.message.includes('Property b is not allowed.'))).to.eq(true);
|
|
1855
|
+
});
|
|
1856
|
+
it('correct extended schema', async () => {
|
|
1857
|
+
(0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible-allof-ref-first.json
|
|
1858
|
+
elements:
|
|
1859
|
+
- a: 1`)).to.be.empty;
|
|
1860
|
+
});
|
|
1861
|
+
});
|
|
1862
|
+
it('$ref to $dynamicRef finds detached $dynamicAnchor', async () => {
|
|
1863
|
+
const schemaId = 'http://localhost:4242/dynamic-ref-detached.json';
|
|
1864
|
+
const schema = {
|
|
1865
|
+
$ref: 'http://localhost:1234/draft2020-12/detached-dynamicref.json#/$defs/foo',
|
|
1866
|
+
};
|
|
1867
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, detachedDynamicRefSchema.$id, detachedDynamicRefSchema);
|
|
1868
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schemaId, schema);
|
|
1869
|
+
(0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=${schemaId}
|
|
1870
|
+
1`)).to.be.empty;
|
|
1871
|
+
const result = await parseSetup(`# yaml-language-server: $schema=${schemaId}
|
|
1872
|
+
a`);
|
|
1873
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1874
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
|
|
1875
|
+
(0, chai_1.expect)(result[0].message).to.include('number');
|
|
1876
|
+
});
|
|
1877
|
+
it('$dynamicRef points to a boolean schema', async () => {
|
|
1878
|
+
const schemaId = 'http://localhost:4242/dynamic-ref-boolean.json';
|
|
1879
|
+
const schema = {
|
|
1880
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1881
|
+
$defs: {
|
|
1882
|
+
true: true,
|
|
1883
|
+
false: false,
|
|
1884
|
+
},
|
|
1885
|
+
properties: {
|
|
1886
|
+
true: {
|
|
1887
|
+
$dynamicRef: '#/$defs/true',
|
|
1888
|
+
},
|
|
1889
|
+
false: {
|
|
1890
|
+
$dynamicRef: '#/$defs/false',
|
|
1891
|
+
},
|
|
1892
|
+
},
|
|
1893
|
+
};
|
|
1894
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schemaId, schema);
|
|
1895
|
+
(0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=${schemaId}
|
|
1896
|
+
"true": 1`)).to.be.empty;
|
|
1897
|
+
const result = await parseSetup(`# yaml-language-server: $schema=${schemaId}
|
|
1898
|
+
"false": 1`);
|
|
1899
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1900
|
+
(0, chai_1.expect)(result[0].message).to.include('Matches a schema that is not allowed.');
|
|
1901
|
+
});
|
|
1902
|
+
it('$dynamicRef skips over intermediate resources - direct reference', async () => {
|
|
1903
|
+
const schemaId = 'https://test.json-schema.org/dynamic-ref-skips-intermediate-resource/main';
|
|
1904
|
+
const schema = {
|
|
1905
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1906
|
+
$id: schemaId,
|
|
1907
|
+
type: 'object',
|
|
1908
|
+
properties: {
|
|
1909
|
+
'bar-item': {
|
|
1910
|
+
$ref: 'item',
|
|
1911
|
+
},
|
|
1912
|
+
},
|
|
1913
|
+
$defs: {
|
|
1914
|
+
bar: {
|
|
1915
|
+
$id: 'bar',
|
|
1916
|
+
type: 'array',
|
|
1917
|
+
items: {
|
|
1918
|
+
$ref: 'item',
|
|
1919
|
+
},
|
|
1920
|
+
$defs: {
|
|
1921
|
+
item: {
|
|
1922
|
+
$id: 'item',
|
|
1923
|
+
type: 'object',
|
|
1924
|
+
properties: {
|
|
1925
|
+
content: {
|
|
1926
|
+
$dynamicRef: '#content',
|
|
1927
|
+
},
|
|
1928
|
+
},
|
|
1929
|
+
$defs: {
|
|
1930
|
+
defaultContent: {
|
|
1931
|
+
$dynamicAnchor: 'content',
|
|
1932
|
+
type: 'integer',
|
|
1933
|
+
},
|
|
1934
|
+
},
|
|
1935
|
+
},
|
|
1936
|
+
content: {
|
|
1937
|
+
$dynamicAnchor: 'content',
|
|
1938
|
+
type: 'string',
|
|
1939
|
+
},
|
|
1940
|
+
},
|
|
1941
|
+
},
|
|
1942
|
+
},
|
|
1943
|
+
};
|
|
1944
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schema.$id, schema);
|
|
1945
|
+
(0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=${schemaId}
|
|
1946
|
+
bar-item:
|
|
1947
|
+
content: 42`)).to.be.empty;
|
|
1948
|
+
const result = await parseSetup(`# yaml-language-server: $schema=${schemaId}
|
|
1949
|
+
bar-item:
|
|
1950
|
+
content: value`);
|
|
1951
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
1952
|
+
(0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
|
|
1953
|
+
(0, chai_1.expect)(result[0].message).to.include('integer');
|
|
1954
|
+
});
|
|
1955
|
+
it('$dynamicRef avoids the root of each schema, but scopes are still registered', async () => {
|
|
1956
|
+
const schemaId = 'https://test.json-schema.org/dynamic-ref-avoids-root-of-each-schema/base';
|
|
1957
|
+
const schema = {
|
|
1958
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
1959
|
+
$id: schemaId,
|
|
1960
|
+
$ref: 'first#/$defs/stuff',
|
|
1961
|
+
$defs: {
|
|
1962
|
+
first: {
|
|
1963
|
+
$id: 'first',
|
|
1964
|
+
$defs: {
|
|
1965
|
+
stuff: {
|
|
1966
|
+
$ref: 'second#/$defs/stuff',
|
|
1967
|
+
},
|
|
1968
|
+
length: {
|
|
1969
|
+
$comment: 'unused, because there is no $dynamicAnchor here',
|
|
1970
|
+
maxLength: 1,
|
|
1971
|
+
},
|
|
1972
|
+
},
|
|
1973
|
+
},
|
|
1974
|
+
second: {
|
|
1975
|
+
$id: 'second',
|
|
1976
|
+
$defs: {
|
|
1977
|
+
stuff: {
|
|
1978
|
+
$ref: 'third#/$defs/stuff',
|
|
1979
|
+
},
|
|
1980
|
+
length: {
|
|
1981
|
+
$dynamicAnchor: 'length',
|
|
1982
|
+
maxLength: 2,
|
|
1983
|
+
},
|
|
1984
|
+
},
|
|
1985
|
+
},
|
|
1986
|
+
third: {
|
|
1987
|
+
$id: 'third',
|
|
1988
|
+
$defs: {
|
|
1989
|
+
stuff: {
|
|
1990
|
+
$dynamicRef: '#length',
|
|
1991
|
+
},
|
|
1992
|
+
length: {
|
|
1993
|
+
$dynamicAnchor: 'length',
|
|
1994
|
+
maxLength: 3,
|
|
1995
|
+
},
|
|
1996
|
+
},
|
|
1997
|
+
},
|
|
1998
|
+
},
|
|
1999
|
+
};
|
|
2000
|
+
schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schema.$id, schema);
|
|
2001
|
+
(0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=${schemaId}
|
|
2002
|
+
hi`)).to.be.empty;
|
|
2003
|
+
const result = await parseSetup(`# yaml-language-server: $schema=${schemaId}
|
|
2004
|
+
hey`);
|
|
2005
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
2006
|
+
(0, chai_1.expect)(result[0].message).to.include('String is longer than the maximum length of 2.');
|
|
2007
|
+
});
|
|
2008
|
+
it('does not infinite loop on cyclic $ref with siblings', async () => {
|
|
2009
|
+
const schema = {
|
|
2010
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
2011
|
+
$id: 'https://example.com/cyclic-ref-with-siblings.json',
|
|
2012
|
+
$defs: {
|
|
2013
|
+
a: {
|
|
2014
|
+
$ref: '#/$defs/b',
|
|
2015
|
+
properties: {
|
|
2016
|
+
a: { type: 'string' },
|
|
2017
|
+
},
|
|
2018
|
+
required: ['a'],
|
|
2019
|
+
},
|
|
2020
|
+
b: {
|
|
2021
|
+
$ref: '#/$defs/a',
|
|
2022
|
+
properties: {
|
|
2023
|
+
b: { type: 'string' },
|
|
2024
|
+
},
|
|
2025
|
+
required: ['b'],
|
|
2026
|
+
},
|
|
2027
|
+
},
|
|
2028
|
+
$ref: '#/$defs/a',
|
|
2029
|
+
};
|
|
2030
|
+
schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
|
|
2031
|
+
const result = await parseSetup(`a: hello`);
|
|
2032
|
+
(0, chai_1.expect)(result).to.have.length(1);
|
|
2033
|
+
(0, chai_1.expect)(result[0].message).to.include('Missing property "b".');
|
|
2034
|
+
});
|
|
2035
|
+
});
|
|
2036
|
+
});
|
|
2037
|
+
//# sourceMappingURL=schema2020Validation.test.js.map
|