@techspokes/typescript-wsdl-client 1.1.4 → 1.1.8
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/README.md +81 -35
- package/dist/app/generateApp.d.ts +0 -1
- package/dist/app/generateApp.js +8 -6
- package/dist/app/generateCheckedApp.d.ts +38 -0
- package/dist/app/generateCheckedApp.js +108 -0
- package/dist/checkedPipeline.d.ts +155 -0
- package/dist/checkedPipeline.js +448 -0
- package/dist/checkedPlanning.d.ts +123 -0
- package/dist/checkedPlanning.js +245 -0
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +123 -5
- package/dist/client/checkedDirectRuntime.d.ts +96 -0
- package/dist/client/checkedDirectRuntime.js +43 -0
- package/dist/client/directClientRuntime.d.ts +74 -0
- package/dist/client/directClientRuntime.js +165 -0
- package/dist/client/directClientVersion.d.ts +6 -0
- package/dist/client/directClientVersion.js +6 -0
- package/dist/client/generateClient.d.ts +0 -1
- package/dist/client/generateClient.js +26 -12
- package/dist/client/generateDirectClient.d.ts +32 -0
- package/dist/client/generateDirectClient.js +268 -0
- package/dist/client/generateOperations.d.ts +0 -1
- package/dist/client/generateTypes.d.ts +0 -1
- package/dist/client/generateUtils.d.ts +0 -1
- package/dist/client/generateUtils.js +3 -1
- package/dist/compiler/applicationGroups.d.ts +53 -0
- package/dist/compiler/applicationGroups.js +403 -0
- package/dist/compiler/buildCanonicalGraph.d.ts +6 -0
- package/dist/compiler/buildCanonicalGraph.js +381 -0
- package/dist/compiler/canonicalGraph.d.ts +197 -0
- package/dist/compiler/canonicalGraph.js +37 -0
- package/dist/compiler/catalogErrors.d.ts +17 -0
- package/dist/compiler/catalogErrors.js +86 -0
- package/dist/compiler/catalogProvenance.d.ts +14 -0
- package/dist/compiler/catalogProvenance.js +229 -0
- package/dist/compiler/checkedAssessment.d.ts +90 -0
- package/dist/compiler/checkedAssessment.js +300 -0
- package/dist/compiler/checkedComponentSource.d.ts +16 -0
- package/dist/compiler/checkedComponentSource.js +31 -0
- package/dist/compiler/checkedSourcePreparation.d.ts +72 -0
- package/dist/compiler/checkedSourcePreparation.js +202 -0
- package/dist/compiler/complexTypeContent.d.ts +58 -0
- package/dist/compiler/complexTypeContent.js +558 -0
- package/dist/compiler/componentCorrespondence.d.ts +32 -0
- package/dist/compiler/componentCorrespondence.js +140 -0
- package/dist/compiler/componentRecordProjection.d.ts +109 -0
- package/dist/compiler/componentRecordProjection.js +319 -0
- package/dist/compiler/componentSoapPreparation.d.ts +20 -0
- package/dist/compiler/componentSoapPreparation.js +36 -0
- package/dist/compiler/composeCanonicalGraph.d.ts +68 -0
- package/dist/compiler/composeCanonicalGraph.js +252 -0
- package/dist/compiler/dataOwnership.d.ts +21 -0
- package/dist/compiler/dataOwnership.js +167 -0
- package/dist/compiler/datatypeValues.d.ts +46 -0
- package/dist/compiler/datatypeValues.js +275 -0
- package/dist/compiler/directCodec.d.ts +116 -0
- package/dist/compiler/directCodec.js +377 -0
- package/dist/compiler/directExecutionPolicy.d.ts +9 -0
- package/dist/compiler/directExecutionPolicy.js +17 -0
- package/dist/compiler/directOperation.d.ts +114 -0
- package/dist/compiler/directOperation.js +373 -0
- package/dist/compiler/directSoap.d.ts +66 -0
- package/dist/compiler/directSoap.js +391 -0
- package/dist/compiler/directSoapSource.d.ts +38 -0
- package/dist/compiler/directSoapSource.js +233 -0
- package/dist/compiler/directSourceCapsule.d.ts +169 -0
- package/dist/compiler/directSourceCapsule.js +727 -0
- package/dist/compiler/directStructure.d.ts +128 -0
- package/dist/compiler/directStructure.js +543 -0
- package/dist/compiler/directStructurePlan.d.ts +149 -0
- package/dist/compiler/directStructurePlan.js +623 -0
- package/dist/compiler/directValues.d.ts +128 -0
- package/dist/compiler/directValues.js +1116 -0
- package/dist/compiler/finiteRe01Construction.d.ts +69 -0
- package/dist/compiler/finiteRe01Construction.js +422 -0
- package/dist/compiler/finiteRe01Verification.d.ts +218 -0
- package/dist/compiler/finiteRe01Verification.js +1217 -0
- package/dist/compiler/generateCatalog.d.ts +0 -1
- package/dist/compiler/graphTraversal.d.ts +10 -0
- package/dist/compiler/graphTraversal.js +37 -0
- package/dist/compiler/hypotheticalScopedIdentity.d.ts +22 -0
- package/dist/compiler/hypotheticalScopedIdentity.js +81 -0
- package/dist/compiler/occurrenceAnalysis.d.ts +66 -0
- package/dist/compiler/occurrenceAnalysis.js +316 -0
- package/dist/compiler/originalSourceMembership.d.ts +5 -0
- package/dist/compiler/originalSourceMembership.js +31 -0
- package/dist/compiler/particleAttribution.d.ts +16 -0
- package/dist/compiler/particleAttribution.js +494 -0
- package/dist/compiler/particleDeclarationConsistency.d.ts +23 -0
- package/dist/compiler/particleDeclarationConsistency.js +206 -0
- package/dist/compiler/particleExtension.d.ts +21 -0
- package/dist/compiler/particleExtension.js +123 -0
- package/dist/compiler/particleLocalAssessment.d.ts +19 -0
- package/dist/compiler/particleLocalAssessment.js +92 -0
- package/dist/compiler/particleRestriction.d.ts +23 -0
- package/dist/compiler/particleRestriction.js +494 -0
- package/dist/compiler/particleSemanticView.d.ts +51 -0
- package/dist/compiler/particleSemanticView.js +310 -0
- package/dist/compiler/particleWildcardRelation.d.ts +87 -0
- package/dist/compiler/particleWildcardRelation.js +143 -0
- package/dist/compiler/projectionScalar.d.ts +32 -0
- package/dist/compiler/projectionScalar.js +184 -0
- package/dist/compiler/re01CandidateAssignments.d.ts +95 -0
- package/dist/compiler/re01CandidateAssignments.js +341 -0
- package/dist/compiler/re01CandidateCorrespondence.d.ts +85 -0
- package/dist/compiler/re01CandidateCorrespondence.js +701 -0
- package/dist/compiler/re01TypeProperties.d.ts +70 -0
- package/dist/compiler/re01TypeProperties.js +120 -0
- package/dist/compiler/re01TypePropertyValidation.d.ts +22 -0
- package/dist/compiler/re01TypePropertyValidation.js +161 -0
- package/dist/compiler/resolveCanonicalGraph.d.ts +41 -0
- package/dist/compiler/resolveCanonicalGraph.js +240 -0
- package/dist/compiler/scalarSchemaAssessment.d.ts +424 -0
- package/dist/compiler/scalarSchemaAssessment.js +5198 -0
- package/dist/compiler/schemaAttributeGroupProperties.d.ts +16 -0
- package/dist/compiler/schemaAttributeGroupProperties.js +53 -0
- package/dist/compiler/schemaAttributeProperties.d.ts +9 -0
- package/dist/compiler/schemaAttributeProperties.js +11 -0
- package/dist/compiler/schemaAttributeUses.d.ts +110 -0
- package/dist/compiler/schemaAttributeUses.js +798 -0
- package/dist/compiler/schemaBinaryWordReconstruction.d.ts +9 -0
- package/dist/compiler/schemaBinaryWordReconstruction.js +33 -0
- package/dist/compiler/schemaBuiltinFacets.d.ts +13 -0
- package/dist/compiler/schemaBuiltinFacets.js +51 -0
- package/dist/compiler/schemaCalendarImages.d.ts +7 -0
- package/dist/compiler/schemaCalendarImages.js +204 -0
- package/dist/compiler/schemaCalendarLanguage.d.ts +10 -0
- package/dist/compiler/schemaCalendarLanguage.js +227 -0
- package/dist/compiler/schemaCompiler.d.ts +0 -1
- package/dist/compiler/schemaComponentEquality.d.ts +27 -0
- package/dist/compiler/schemaComponentEquality.js +446 -0
- package/dist/compiler/schemaConstructionAssessment.d.ts +79 -0
- package/dist/compiler/schemaConstructionAssessment.js +745 -0
- package/dist/compiler/schemaDatatypeValues.d.ts +3 -0
- package/dist/compiler/schemaDatatypeValues.js +2 -0
- package/dist/compiler/schemaDecimalLanguage.d.ts +6 -0
- package/dist/compiler/schemaDecimalLanguage.js +102 -0
- package/dist/compiler/schemaDeclarationPrimitives.d.ts +39 -0
- package/dist/compiler/schemaDeclarationPrimitives.js +211 -0
- package/dist/compiler/schemaDocumentSyntax.d.ts +54 -0
- package/dist/compiler/schemaDocumentSyntax.js +294 -0
- package/dist/compiler/schemaDurationLanguage.d.ts +10 -0
- package/dist/compiler/schemaDurationLanguage.js +170 -0
- package/dist/compiler/schemaElementInstance.d.ts +30 -0
- package/dist/compiler/schemaElementInstance.js +45 -0
- package/dist/compiler/schemaElementProperties.d.ts +15 -0
- package/dist/compiler/schemaElementProperties.js +23 -0
- package/dist/compiler/schemaEndpointWordCapacity.d.ts +35 -0
- package/dist/compiler/schemaEndpointWordCapacity.js +39 -0
- package/dist/compiler/schemaExactCalendar.d.ts +72 -0
- package/dist/compiler/schemaExactCalendar.js +264 -0
- package/dist/compiler/schemaFacetAnnotation.d.ts +31 -0
- package/dist/compiler/schemaFacetAnnotation.js +199 -0
- package/dist/compiler/schemaGeneratedScalarShape.d.ts +34 -0
- package/dist/compiler/schemaGeneratedScalarShape.js +178 -0
- package/dist/compiler/schemaIdentityConstraints.d.ts +72 -0
- package/dist/compiler/schemaIdentityConstraints.js +362 -0
- package/dist/compiler/schemaIeeeLanguage.d.ts +42 -0
- package/dist/compiler/schemaIeeeLanguage.js +759 -0
- package/dist/compiler/schemaIntegerImages.d.ts +10 -0
- package/dist/compiler/schemaIntegerImages.js +113 -0
- package/dist/compiler/schemaLexicalPredicates.d.ts +28 -0
- package/dist/compiler/schemaLexicalPredicates.js +63 -0
- package/dist/compiler/schemaNotationProperties.d.ts +31 -0
- package/dist/compiler/schemaNotationProperties.js +84 -0
- package/dist/compiler/schemaNumericImageConditions.d.ts +23 -0
- package/dist/compiler/schemaNumericImageConditions.js +66 -0
- package/dist/compiler/schemaParticleWildcardProperties.d.ts +19 -0
- package/dist/compiler/schemaParticleWildcardProperties.js +43 -0
- package/dist/compiler/schemaPattern.d.ts +1061 -0
- package/dist/compiler/schemaPattern.js +581 -0
- package/dist/compiler/schemaRegularLanguage.d.ts +66 -0
- package/dist/compiler/schemaRegularLanguage.js +1166 -0
- package/dist/compiler/schemaScalarContext.d.ts +85 -0
- package/dist/compiler/schemaScalarContext.js +78 -0
- package/dist/compiler/schemaScalarKernel.d.ts +181 -0
- package/dist/compiler/schemaScalarKernel.js +391 -0
- package/dist/compiler/schemaScalarWitnesses.d.ts +5 -0
- package/dist/compiler/schemaScalarWitnesses.js +118 -0
- package/dist/compiler/schemaSimpleTypeProperties.d.ts +94 -0
- package/dist/compiler/schemaSimpleTypeProperties.js +103 -0
- package/dist/compiler/schemaSourceGrammar.d.ts +26 -0
- package/dist/compiler/schemaSourceGrammar.js +290 -0
- package/dist/compiler/schemaSourceLexical.d.ts +3 -0
- package/dist/compiler/schemaSourceLexical.js +12 -0
- package/dist/compiler/schemaSourceValues.d.ts +50 -0
- package/dist/compiler/schemaSourceValues.js +225 -0
- package/dist/compiler/schemaSourceWildcards.d.ts +27 -0
- package/dist/compiler/schemaSourceWildcards.js +249 -0
- package/dist/compiler/schemaSymbolicSequences.d.ts +15 -0
- package/dist/compiler/schemaSymbolicSequences.js +99 -0
- package/dist/compiler/schemaSymbolicValueSets.d.ts +31 -0
- package/dist/compiler/schemaSymbolicValueSets.js +149 -0
- package/dist/compiler/schemaSyntaxAssessment.d.ts +24 -0
- package/dist/compiler/schemaSyntaxAssessment.js +361 -0
- package/dist/compiler/schemaTemporalAliases.d.ts +5 -0
- package/dist/compiler/schemaTemporalAliases.js +195 -0
- package/dist/compiler/schemaTokenImages.d.ts +8 -0
- package/dist/compiler/schemaTokenImages.js +142 -0
- package/dist/compiler/schemaTypeIdentity.d.ts +38 -0
- package/dist/compiler/schemaTypeIdentity.js +80 -0
- package/dist/compiler/schemaTypeRelations.d.ts +37 -0
- package/dist/compiler/schemaTypeRelations.js +576 -0
- package/dist/compiler/schemaUri.d.ts +12 -0
- package/dist/compiler/schemaUri.js +103 -0
- package/dist/compiler/schemaValueContext.d.ts +25 -0
- package/dist/compiler/schemaValueContext.js +1 -0
- package/dist/compiler/schemaValueImages.d.ts +9 -0
- package/dist/compiler/schemaValueImages.js +142 -0
- package/dist/compiler/schemaValueSequences.d.ts +14 -0
- package/dist/compiler/schemaValueSequences.js +19 -0
- package/dist/compiler/semanticBudget.d.ts +67 -0
- package/dist/compiler/semanticBudget.js +193 -0
- package/dist/compiler/semanticCatalog.d.ts +121 -0
- package/dist/compiler/semanticCatalog.js +160 -0
- package/dist/compiler/semanticContext.d.ts +183 -0
- package/dist/compiler/semanticContext.js +1207 -0
- package/dist/compiler/semanticTypeDependencies.d.ts +7 -0
- package/dist/compiler/semanticTypeDependencies.js +64 -0
- package/dist/compiler/semanticTypeReference.d.ts +23 -0
- package/dist/compiler/semanticTypeReference.js +36 -0
- package/dist/compiler/shapeResolver.d.ts +1 -1
- package/dist/compiler/shapeResolver.js +7 -9
- package/dist/compiler/soapHeaders.d.ts +16 -0
- package/dist/compiler/soapHeaders.js +42 -0
- package/dist/compiler/sourceSchemaBinding.d.ts +25 -0
- package/dist/compiler/sourceSchemaBinding.js +39 -0
- package/dist/compiler/standardSchemaComponents.d.ts +71 -0
- package/dist/compiler/standardSchemaComponents.js +74 -0
- package/dist/compiler/standardSchemaConstruction.d.ts +20 -0
- package/dist/compiler/standardSchemaConstruction.js +34 -0
- package/dist/compiler/structuralCompanions.d.ts +15 -0
- package/dist/compiler/structuralCompanions.js +232 -0
- package/dist/compiler/validateSemanticGraph.d.ts +4 -0
- package/dist/compiler/validateSemanticGraph.js +376 -0
- package/dist/compiler/wildcardAlgebra.d.ts +25 -0
- package/dist/compiler/wildcardAlgebra.js +155 -0
- package/dist/compiler/wsdlPolicyRequirements.d.ts +43 -0
- package/dist/compiler/wsdlPolicyRequirements.js +239 -0
- package/dist/config.d.ts +0 -1
- package/dist/gateway/generateCheckedGateway.d.ts +32 -0
- package/dist/gateway/generateCheckedGateway.js +293 -0
- package/dist/gateway/generateGateway.d.ts +0 -1
- package/dist/gateway/generateGateway.js +2 -2
- package/dist/gateway/generators.d.ts +0 -1
- package/dist/gateway/helpers.d.ts +0 -1
- package/dist/generation/componentShape.d.ts +14 -0
- package/dist/generation/componentShape.js +269 -0
- package/dist/generation/preamble.d.ts +0 -1
- package/dist/generation/sourceLayout.d.ts +13 -0
- package/dist/generation/sourceLayout.js +40 -0
- package/dist/generation/writeGeneratedSource.d.ts +0 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +3 -0
- package/dist/loader/fetch.d.ts +0 -1
- package/dist/loader/orderedSyntax.d.ts +84 -0
- package/dist/loader/orderedSyntax.js +222 -0
- package/dist/loader/resolutionDepth.d.ts +6 -0
- package/dist/loader/resolutionDepth.js +65 -0
- package/dist/loader/schemaInput.d.ts +80 -0
- package/dist/loader/schemaInput.js +249 -0
- package/dist/loader/schemaResources.d.ts +60 -0
- package/dist/loader/schemaResources.js +333 -0
- package/dist/loader/wsdlLoader.d.ts +0 -1
- package/dist/openapi/casing.d.ts +0 -1
- package/dist/openapi/generateOpenAPI.d.ts +0 -1
- package/dist/openapi/generateOpenAPI.js +2 -2
- package/dist/openapi/generatePaths.d.ts +0 -1
- package/dist/openapi/generateSchemas.d.ts +0 -1
- package/dist/openapi/security.d.ts +0 -1
- package/dist/pipeline.d.ts +6 -2
- package/dist/pipeline.js +13 -0
- package/dist/test/generateCheckedTests.d.ts +17 -0
- package/dist/test/generateCheckedTests.js +60 -0
- package/dist/test/generateTests.d.ts +0 -1
- package/dist/test/generateTests.js +2 -2
- package/dist/test/generators.d.ts +0 -1
- package/dist/test/mockData.d.ts +0 -1
- package/dist/test/mockData.js +20 -14
- package/dist/util/attributeWildcards.d.ts +0 -1
- package/dist/util/builder.d.ts +0 -1
- package/dist/util/catalogMeta.d.ts +0 -1
- package/dist/util/checkedCliDiagnostics.d.ts +11 -0
- package/dist/util/checkedCliDiagnostics.js +22 -0
- package/dist/util/cli.d.ts +0 -1
- package/dist/util/errors.d.ts +0 -1
- package/dist/util/imports.d.ts +0 -1
- package/dist/util/runtimeSource.d.ts +0 -1
- package/dist/util/runtimeSource.js +3 -5
- package/dist/util/securityConfig.d.ts +0 -1
- package/dist/util/streamConfig.d.ts +0 -1
- package/dist/util/tools.d.ts +0 -1
- package/dist/util/xmlWhitespace.d.ts +2 -0
- package/dist/util/xmlWhitespace.js +4 -0
- package/dist/xsd/primitives.d.ts +0 -1
- package/docs/agent-skill.md +2 -0
- package/docs/api-reference.md +1 -1
- package/docs/checked-gateway.md +210 -0
- package/docs/checked-generation.md +161 -0
- package/docs/cli-reference.md +43 -1
- package/docs/concepts.md +136 -1
- package/docs/configuration.md +5 -1
- package/docs/corpus.md +33 -0
- package/docs/direct-values.md +311 -0
- package/docs/examples/checked-forecast.wsdl +19 -0
- package/docs/gateway-guide.md +1 -1
- package/docs/generated-code.md +10 -5
- package/docs/mapping-contract.md +114 -0
- package/docs/migration-playbook.md +1 -1
- package/docs/output-anatomy.md +1 -1
- package/docs/start-here.md +8 -2
- package/docs/supported-patterns.md +17 -5
- package/docs/testing.md +117 -31
- package/llms.txt +7 -7
- package/package.json +79 -25
- package/src/generation/preambles/direct-client/typescript.preamble +3 -0
- package/src/runtime/checkedGatewayHost.tpl.txt +157 -0
- package/src/runtime/streamXml.ts +1 -1
- package/dist/app/generateApp.d.ts.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/client/generateClient.d.ts.map +0 -1
- package/dist/client/generateOperations.d.ts.map +0 -1
- package/dist/client/generateTypes.d.ts.map +0 -1
- package/dist/client/generateUtils.d.ts.map +0 -1
- package/dist/compiler/generateCatalog.d.ts.map +0 -1
- package/dist/compiler/schemaCompiler.d.ts.map +0 -1
- package/dist/compiler/shapeResolver.d.ts.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/gateway/generateGateway.d.ts.map +0 -1
- package/dist/gateway/generators.d.ts.map +0 -1
- package/dist/gateway/helpers.d.ts.map +0 -1
- package/dist/generation/preamble.d.ts.map +0 -1
- package/dist/generation/writeGeneratedSource.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/loader/fetch.d.ts.map +0 -1
- package/dist/loader/wsdlLoader.d.ts.map +0 -1
- package/dist/openapi/casing.d.ts.map +0 -1
- package/dist/openapi/generateOpenAPI.d.ts.map +0 -1
- package/dist/openapi/generatePaths.d.ts.map +0 -1
- package/dist/openapi/generateSchemas.d.ts.map +0 -1
- package/dist/openapi/security.d.ts.map +0 -1
- package/dist/pipeline.d.ts.map +0 -1
- package/dist/runtime/jsonArray.d.ts +0 -24
- package/dist/runtime/jsonArray.d.ts.map +0 -1
- package/dist/runtime/jsonArray.js +0 -52
- package/dist/runtime/ndjson.d.ts +0 -24
- package/dist/runtime/ndjson.d.ts.map +0 -1
- package/dist/runtime/ndjson.js +0 -30
- package/dist/runtime/streamXml.d.ts +0 -45
- package/dist/runtime/streamXml.d.ts.map +0 -1
- package/dist/runtime/streamXml.js +0 -212
- package/dist/test/generateTests.d.ts.map +0 -1
- package/dist/test/generators.d.ts.map +0 -1
- package/dist/test/mockData.d.ts.map +0 -1
- package/dist/util/attributeWildcards.d.ts.map +0 -1
- package/dist/util/builder.d.ts.map +0 -1
- package/dist/util/catalogMeta.d.ts.map +0 -1
- package/dist/util/cli.d.ts.map +0 -1
- package/dist/util/errors.d.ts.map +0 -1
- package/dist/util/imports.d.ts.map +0 -1
- package/dist/util/runtimeSource.d.ts.map +0 -1
- package/dist/util/securityConfig.d.ts.map +0 -1
- package/dist/util/streamConfig.d.ts.map +0 -1
- package/dist/util/tools.d.ts.map +0 -1
- package/dist/xsd/primitives.d.ts.map +0 -1
- package/docs/AGENTS.md +0 -47
- package/docs/README.md +0 -56
- package/docs/architecture.md +0 -149
- package/docs/decisions/001-test-generation.md +0 -36
- package/docs/decisions/002-streamable-responses.md +0 -330
- package/docs/file-naming-and-path-organization.md +0 -213
- package/docs/releases/README.md +0 -94
- package/docs/releases/v0.20.0.md +0 -22
- package/docs/releases/v0.21.0.md +0 -30
- package/docs/releases/v0.22.0.md +0 -30
- package/docs/releases/v0.23.0.md +0 -31
- package/docs/releases/v0.24.0.md +0 -38
- package/docs/releases/v0.25.0.md +0 -31
- package/docs/releases/v0.25.2.md +0 -32
- package/docs/releases/v0.26.0.md +0 -32
- package/docs/releases/v0.27.0.md +0 -31
- package/docs/releases/v0.28.0.md +0 -32
- package/docs/releases/v0.29.0.md +0 -32
- package/docs/releases/v0.30.0.md +0 -30
- package/docs/releases/v0.30.1.md +0 -31
- package/docs/releases/v0.30.2.md +0 -30
- package/docs/releases/v0.30.3.md +0 -33
- package/docs/releases/v0.31.0.md +0 -33
- package/docs/releases/v0.32.0.md +0 -33
- package/docs/releases/v0.33.0.md +0 -34
- package/docs/releases/v0.34.0.md +0 -30
- package/docs/releases/v0.35.0.md +0 -33
- package/docs/releases/v0.36.0.md +0 -32
- package/docs/releases/v0.37.0.md +0 -33
- package/docs/releases/v0.38.0.md +0 -35
- package/docs/releases/v0.39.0.md +0 -35
- package/docs/releases/v0.40.0.md +0 -45
- package/docs/releases/v0.40.1.md +0 -34
- package/docs/releases/v1.0.0.md +0 -42
- package/docs/releases/v1.0.1.md +0 -38
- package/docs/releases/v1.0.2.md +0 -51
- package/docs/releases/v1.0.3.md +0 -37
- package/docs/releases/v1.0.4.md +0 -45
- package/docs/releases/v1.0.5.md +0 -41
- package/docs/releases/v1.0.6.md +0 -35
- package/docs/releases/v1.0.7.md +0 -36
- package/docs/releases/v1.1.0.md +0 -42
- package/docs/releases/v1.1.1.md +0 -44
- package/docs/releases/v1.1.2.md +0 -42
- package/docs/releases/v1.1.3.md +0 -36
- package/docs/releases/v1.1.4.md +0 -36
- package/docs/roadmap/README.md +0 -107
- package/docs/roadmap/v1.0-capability-conformance-framework.md +0 -582
- package/docs/roadmap/v1.0-choice-union-mode.md +0 -90
- package/docs/roadmap/v1.0-contract-audit.md +0 -75
- package/docs/roadmap/v1.0-json-array-streaming.md +0 -101
- package/docs/roadmap/v1.0-openapi-fastify-compatibility.md +0 -99
- package/docs/roadmap/v1.0-release-candidate-gates.md +0 -92
- package/docs/roadmap/v1.0-wsdl-coverage-matrix.md +0 -200
- package/docs/roadmap/v1.0-xs-anyattribute-wildcard-bag.md +0 -932
- package/src/runtime/jsonArray.ts +0 -55
- package/src/runtime/ndjson.ts +0 -32
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { assertSemanticTypeReferenceShape } from './semanticTypeReference.js';
|
|
2
|
+
import { validateFacetAnnotation } from './schemaFacetAnnotation.js';
|
|
3
|
+
const object = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
|
|
4
|
+
const facetNames = ['length', 'minLength', 'maxLength', 'pattern', 'enumeration', 'whiteSpace', 'maxInclusive', 'maxExclusive', 'minInclusive', 'minExclusive', 'totalDigits', 'fractionDigits'];
|
|
5
|
+
export function validateRawSimpleTypeShape(value, budget) {
|
|
6
|
+
budget.chargeWork(16);
|
|
7
|
+
if (!object(value) || typeof value.type !== 'string' || !object(value.base) || !Array.isArray(value.final) || !object(value.variety))
|
|
8
|
+
return false;
|
|
9
|
+
assertSemanticTypeReferenceShape(value.base, budget);
|
|
10
|
+
const binding = value.facetBinding;
|
|
11
|
+
const exact = value.facetComponentSet;
|
|
12
|
+
if (binding !== undefined) {
|
|
13
|
+
if (value.facetLayers !== undefined || exact !== undefined || !object(binding) || binding.kind !== 'original')
|
|
14
|
+
return false;
|
|
15
|
+
assertSemanticTypeReferenceShape(binding.type, budget);
|
|
16
|
+
}
|
|
17
|
+
else if (exact !== undefined ? value.facetLayers !== undefined || !Array.isArray(exact) : !Array.isArray(value.facetLayers))
|
|
18
|
+
return false;
|
|
19
|
+
const layers = binding !== undefined ? [] : (exact ?? value.facetLayers);
|
|
20
|
+
if (value.targetNamespace !== undefined && typeof value.targetNamespace !== 'string')
|
|
21
|
+
return false;
|
|
22
|
+
budget.chargeWork(value.type.length + value.final.length * 4 + layers.length * 4);
|
|
23
|
+
if (value.final.some(method => !['restriction', 'list', 'union'].includes(method)))
|
|
24
|
+
return false;
|
|
25
|
+
if (!['atomic', 'list', 'union'].includes(value.variety.kind))
|
|
26
|
+
return false;
|
|
27
|
+
if (value.variety.kind === 'list' && !object(value.variety.item) || value.variety.kind === 'union' && !Array.isArray(value.variety.members))
|
|
28
|
+
return false;
|
|
29
|
+
if (value.variety.kind === 'list')
|
|
30
|
+
assertSemanticTypeReferenceShape(value.variety.item, budget);
|
|
31
|
+
if (value.variety.kind === 'union')
|
|
32
|
+
for (const member of value.variety.members)
|
|
33
|
+
assertSemanticTypeReferenceShape(member, budget);
|
|
34
|
+
for (const layer of layers) {
|
|
35
|
+
budget.chargeWork(4);
|
|
36
|
+
if (!object(layer))
|
|
37
|
+
return false;
|
|
38
|
+
if (exact !== undefined && !('facets' in layer)) {
|
|
39
|
+
const pattern = Object.getOwnPropertyDescriptor(layer, 'builtinPattern');
|
|
40
|
+
if (pattern) {
|
|
41
|
+
if ('baseComponent' in layer || 'annotation' in layer || !('value' in pattern) || !object(pattern.value))
|
|
42
|
+
return false;
|
|
43
|
+
const name = Object.getOwnPropertyDescriptor(pattern.value, 'name'), index = Object.getOwnPropertyDescriptor(pattern.value, 'index');
|
|
44
|
+
if (!name || !('value' in name) || typeof name.value !== 'string' || !name.value
|
|
45
|
+
|| !index || !('value' in index) || !Number.isSafeInteger(index.value) || index.value < 0)
|
|
46
|
+
return false;
|
|
47
|
+
budget.chargeWork(name.value.length + 32);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const selected = Object.getOwnPropertyDescriptor(layer, 'baseComponent');
|
|
51
|
+
if ('annotation' in layer || !selected || !('value' in selected)
|
|
52
|
+
|| !Number.isSafeInteger(selected.value) || selected.value < 0)
|
|
53
|
+
return false;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (!Array.isArray(layer.facets) || exact !== undefined && !layer.facets.length)
|
|
57
|
+
return false;
|
|
58
|
+
if (exact !== undefined && 'builtinPattern' in layer)
|
|
59
|
+
return false;
|
|
60
|
+
budget.chargeWork(layer.facets.length * 4);
|
|
61
|
+
if (exact !== undefined) {
|
|
62
|
+
const first = layer.facets[0];
|
|
63
|
+
if (!object(first) || typeof first.name !== 'string'
|
|
64
|
+
|| layer.facets.some((facet) => !object(facet) || facet.name !== first.name)
|
|
65
|
+
|| layer.facets.length > 1 && !['pattern', 'enumeration'].includes(first.name))
|
|
66
|
+
return false;
|
|
67
|
+
const annotation = Object.getOwnPropertyDescriptor(layer, 'annotation');
|
|
68
|
+
if (annotation && (!('value' in annotation) || annotation.value !== undefined
|
|
69
|
+
&& !validateFacetAnnotation(annotation.value, budget)))
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
for (const facet of layer.facets) {
|
|
73
|
+
budget.chargeWork(8);
|
|
74
|
+
if (!object(facet) || !facetNames.includes(facet.name) || typeof facet.fixed !== 'boolean' || !object(facet.lexical) || typeof facet.lexical.value !== 'string' || !object(facet.lexical.context) || !object(facet.lexical.context.namespaces) || !object(facet.lexical.context.source))
|
|
75
|
+
return false;
|
|
76
|
+
budget.chargeWork(56);
|
|
77
|
+
const annotation = Object.getOwnPropertyDescriptor(facet, 'annotation');
|
|
78
|
+
if (annotation && (!('value' in annotation) || annotation.value !== undefined &&
|
|
79
|
+
(exact !== undefined || annotation.value !== 'absent')))
|
|
80
|
+
return false;
|
|
81
|
+
if (facet.operand !== undefined && (!object(facet.operand) || !object(facet.operand.type) || typeof facet.operand.owner !== 'string' || !['original', 'active'].includes(facet.operand.context)))
|
|
82
|
+
return false;
|
|
83
|
+
if (facet.operand !== undefined && !['enumeration', 'minInclusive', 'minExclusive', 'maxInclusive', 'maxExclusive'].includes(facet.name))
|
|
84
|
+
return false;
|
|
85
|
+
if (facet.operand !== undefined)
|
|
86
|
+
assertSemanticTypeReferenceShape(facet.operand.type, budget);
|
|
87
|
+
budget.chargeWork(facet.lexical.value.length + 4);
|
|
88
|
+
for (const namespace in facet.lexical.context.namespaces) {
|
|
89
|
+
budget.chargeWork(namespace.length + 1);
|
|
90
|
+
if (typeof facet.lexical.context.namespaces[namespace] !== 'string')
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (!object(value.provenance))
|
|
96
|
+
return false;
|
|
97
|
+
if (value.provenance.kind === 'actual-mapped')
|
|
98
|
+
return typeof value.provenance.original === 'string';
|
|
99
|
+
if (value.provenance.kind !== 'hypothetical-abstract' || !Array.isArray(value.provenance.originals))
|
|
100
|
+
return false;
|
|
101
|
+
budget.chargeWork(value.provenance.originals.length + 1);
|
|
102
|
+
return value.provenance.originals.every(id => typeof id === 'string');
|
|
103
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ExpandedName, SyntaxElement, SyntaxSource } from '../loader/orderedSyntax.js';
|
|
2
|
+
import type { SemanticBudget } from './semanticBudget.js';
|
|
3
|
+
export type SourceGrammarRole = 'schema' | 'include' | 'import' | 'redefine' | 'annotation' | 'appinfo' | 'documentation' | 'openAttrs' | 'annotated' | 'anyType' | 'complexType' | 'topLevelComplexType' | 'localComplexType' | 'complexContent' | 'simpleContent' | 'restrictionType' | 'complexRestrictionType' | 'extensionType' | 'simpleRestrictionType' | 'simpleExtensionType' | 'simpleType' | 'topLevelSimpleType' | 'localSimpleType' | 'restriction' | 'list' | 'union' | 'element' | 'topLevelElement' | 'localElement' | 'narrowMaxMin' | 'attribute' | 'topLevelAttribute' | 'attributeGroup' | 'namedAttributeGroup' | 'attributeGroupRef' | 'group' | 'realGroup' | 'namedGroup' | 'groupRef' | 'explicitGroup' | 'simpleExplicitGroup' | 'all' | 'localAll' | 'wildcard' | 'any' | 'selector' | 'field' | 'keybase' | 'keyref' | 'notation' | 'facet' | 'noFixedFacet' | 'numFacet' | 'totalDigits' | 'whiteSpace' | 'pattern';
|
|
4
|
+
export declare function globalSourceRole(name: ExpandedName): SourceGrammarRole | undefined;
|
|
5
|
+
export declare function namedSourceRole(name: ExpandedName): SourceGrammarRole | undefined;
|
|
6
|
+
export declare function sourceRoleTypeName(role: SourceGrammarRole): string | undefined;
|
|
7
|
+
export declare function abstractSourceRole(role: SourceGrammarRole): boolean;
|
|
8
|
+
export type SourceGrammarResult = Readonly<{
|
|
9
|
+
kind: 'checked';
|
|
10
|
+
hasIdAttributeUse: boolean;
|
|
11
|
+
attributes: readonly Readonly<{
|
|
12
|
+
index: number;
|
|
13
|
+
type: string;
|
|
14
|
+
}>[];
|
|
15
|
+
children: readonly Readonly<{
|
|
16
|
+
index: number;
|
|
17
|
+
role?: SourceGrammarRole;
|
|
18
|
+
}>[];
|
|
19
|
+
}> | Readonly<{
|
|
20
|
+
kind: 'invalid-schema';
|
|
21
|
+
rule: 'schema-for-schemas';
|
|
22
|
+
message: string;
|
|
23
|
+
source: SyntaxSource;
|
|
24
|
+
}>;
|
|
25
|
+
/** Immediate clauses only. The owned walk preserves roles, values and all scopes. */
|
|
26
|
+
export declare function assessSourceGrammar(role: SourceGrammarRole, node: SyntaxElement, budget: SemanticBudget): SourceGrammarResult;
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/** Closed contextual grammar of the dated 2004 Structures/Datatypes S4S. */
|
|
2
|
+
import { XSD_NAMESPACE } from '../loader/orderedSyntax.js';
|
|
3
|
+
const id = { id: 'ID' }, occurs = { minOccurs: 'nonNegativeInteger', maxOccurs: 'allNNI' };
|
|
4
|
+
const complexAttrs = { ...id, name: 'NCName', mixed: 'boolean', abstract: 'boolean', final: 'derivationSet', block: 'derivationSet' };
|
|
5
|
+
const commonElement = { ...id, name: 'NCName', type: 'QName', default: 'string', fixed: 'string', nillable: 'boolean', block: 'blockSet' };
|
|
6
|
+
const localElement = { ...commonElement, ref: 'QName', form: 'formChoice', ...occurs };
|
|
7
|
+
const attribute = { ...id, name: 'NCName', ref: 'QName', type: 'QName', use: '#use', default: 'string', fixed: 'string', form: 'formChoice' };
|
|
8
|
+
const wild = { ...id, namespace: 'namespaceList', processContents: '#process' };
|
|
9
|
+
const facet = { ...id, value: 'anySimpleType', fixed: 'boolean' };
|
|
10
|
+
const roles = Object.freeze({
|
|
11
|
+
schema: { attrs: { ...id, targetNamespace: 'anyURI', version: 'token', finalDefault: 'fullDerivationSet', blockDefault: 'blockSet',
|
|
12
|
+
attributeFormDefault: 'formChoice', elementFormDefault: 'formChoice' }, model: 'schema' },
|
|
13
|
+
include: { attrs: { ...id, schemaLocation: 'anyURI' }, required: ['schemaLocation'], annotation: true, model: 'none' },
|
|
14
|
+
import: { attrs: { ...id, namespace: 'anyURI', schemaLocation: 'anyURI' }, annotation: true, model: 'none' },
|
|
15
|
+
redefine: { attrs: { ...id, schemaLocation: 'anyURI' }, required: ['schemaLocation'], model: 'redefine' },
|
|
16
|
+
annotation: { attrs: id, model: 'annotation' },
|
|
17
|
+
appinfo: { attrs: { source: 'anyURI' }, model: 'mixed' }, documentation: { attrs: { source: 'anyURI' }, model: 'mixed' },
|
|
18
|
+
openAttrs: { attrs: {}, model: 'none', empty: true, typeName: 'openAttrs' },
|
|
19
|
+
annotated: { attrs: id, model: 'none', annotation: true, typeName: 'annotated' },
|
|
20
|
+
anyType: { attrs: {}, model: 'mixed', typeName: 'anyType' },
|
|
21
|
+
complexType: { attrs: complexAttrs, annotation: true, model: 'complex', abstract: true, typeName: 'complexType' },
|
|
22
|
+
topLevelComplexType: { attrs: complexAttrs, required: ['name'], annotation: true, model: 'complex', typeName: 'topLevelComplexType' },
|
|
23
|
+
localComplexType: { attrs: { ...id, mixed: 'boolean' }, annotation: true, model: 'complex', typeName: 'localComplexType' },
|
|
24
|
+
complexContent: { attrs: { ...id, mixed: 'boolean' }, annotation: true, model: 'complexContent' },
|
|
25
|
+
simpleContent: { attrs: id, annotation: true, model: 'simpleContent' },
|
|
26
|
+
restrictionType: { attrs: { ...id, base: 'QName' }, required: ['base'], annotation: true, model: 'restrictionType', typeName: 'restrictionType' },
|
|
27
|
+
complexRestrictionType: { attrs: { ...id, base: 'QName' }, required: ['base'], annotation: true, model: 'particleAttrs', typeName: 'complexRestrictionType' },
|
|
28
|
+
extensionType: { attrs: { ...id, base: 'QName' }, required: ['base'], annotation: true, model: 'particleAttrs', typeName: 'extensionType' },
|
|
29
|
+
simpleRestrictionType: { attrs: { ...id, base: 'QName' }, required: ['base'], annotation: true, model: 'simpleAttrs', typeName: 'simpleRestrictionType' },
|
|
30
|
+
simpleExtensionType: { attrs: { ...id, base: 'QName' }, required: ['base'], annotation: true, model: 'attrs', typeName: 'simpleExtensionType' },
|
|
31
|
+
simpleType: { attrs: { ...id, name: 'NCName', final: 'simpleDerivationSet' }, annotation: true, model: 'simple', abstract: true, typeName: 'simpleType' },
|
|
32
|
+
topLevelSimpleType: { attrs: { ...id, name: 'NCName', final: 'simpleDerivationSet' }, required: ['name'], annotation: true, model: 'simple', typeName: 'topLevelSimpleType' },
|
|
33
|
+
localSimpleType: { attrs: id, annotation: true, model: 'simple', typeName: 'localSimpleType' },
|
|
34
|
+
restriction: { attrs: { ...id, base: 'QName' }, annotation: true, model: 'restriction' },
|
|
35
|
+
list: { attrs: { ...id, itemType: 'QName' }, annotation: true, model: 'list' },
|
|
36
|
+
union: { attrs: { ...id, memberTypes: '#qnames' }, annotation: true, model: 'union' },
|
|
37
|
+
element: { attrs: { ...localElement, substitutionGroup: 'QName', abstract: 'boolean', final: 'derivationSet' }, annotation: true,
|
|
38
|
+
model: 'element', abstract: true, typeName: 'element' },
|
|
39
|
+
topLevelElement: { attrs: { ...commonElement, substitutionGroup: 'QName', abstract: 'boolean', final: 'derivationSet' }, required: ['name'],
|
|
40
|
+
annotation: true, model: 'element', typeName: 'topLevelElement' },
|
|
41
|
+
localElement: { attrs: localElement, annotation: true, model: 'element', typeName: 'localElement' },
|
|
42
|
+
narrowMaxMin: { attrs: { ...localElement, minOccurs: '#zeroOne', maxOccurs: '#maxZeroOne' }, annotation: true, model: 'element', typeName: 'narrowMaxMin' },
|
|
43
|
+
attribute: { attrs: attribute, annotation: true, model: 'attribute', typeName: 'attribute' },
|
|
44
|
+
topLevelAttribute: { attrs: { ...id, name: 'NCName', type: 'QName', default: 'string', fixed: 'string' }, required: ['name'],
|
|
45
|
+
annotation: true, model: 'attribute', typeName: 'topLevelAttribute' },
|
|
46
|
+
attributeGroup: { attrs: { ...id, name: 'NCName', ref: 'QName' }, annotation: true, model: 'attrs', abstract: true, typeName: 'attributeGroup' },
|
|
47
|
+
namedAttributeGroup: { attrs: { ...id, name: 'NCName' }, required: ['name'], annotation: true, model: 'attrs', typeName: 'namedAttributeGroup' },
|
|
48
|
+
attributeGroupRef: { attrs: { ...id, ref: 'QName' }, required: ['ref'], annotation: true, model: 'none', typeName: 'attributeGroupRef' },
|
|
49
|
+
group: { attrs: { ...id, name: 'NCName', ref: 'QName', ...occurs }, annotation: true, model: 'group', abstract: true, typeName: 'group' },
|
|
50
|
+
realGroup: { attrs: { ...id, name: 'NCName', ref: 'QName', ...occurs }, annotation: true, model: 'realGroup', typeName: 'realGroup' },
|
|
51
|
+
namedGroup: { attrs: { ...id, name: 'NCName' }, required: ['name'], annotation: true, model: 'namedGroup', typeName: 'namedGroup' },
|
|
52
|
+
groupRef: { attrs: { ...id, ref: 'QName', ...occurs }, required: ['ref'], annotation: true, model: 'none', typeName: 'groupRef' },
|
|
53
|
+
explicitGroup: { attrs: { ...id, ...occurs }, annotation: true, model: 'explicitGroup', typeName: 'explicitGroup' },
|
|
54
|
+
simpleExplicitGroup: { attrs: id, annotation: true, model: 'explicitGroup', typeName: 'simpleExplicitGroup' },
|
|
55
|
+
all: { attrs: { ...id, minOccurs: '#zeroOne', maxOccurs: '#maxOne' }, annotation: true, model: 'all', typeName: 'all' },
|
|
56
|
+
localAll: { attrs: id, annotation: true, model: 'all' },
|
|
57
|
+
wildcard: { attrs: wild, annotation: true, model: 'none', typeName: 'wildcard' },
|
|
58
|
+
any: { attrs: { ...wild, ...occurs }, annotation: true, model: 'none' },
|
|
59
|
+
selector: { attrs: { ...id, xpath: '#selector' }, required: ['xpath'], annotation: true, model: 'none' },
|
|
60
|
+
field: { attrs: { ...id, xpath: '#field' }, required: ['xpath'], annotation: true, model: 'none' },
|
|
61
|
+
keybase: { attrs: { ...id, name: 'NCName' }, required: ['name'], annotation: true, model: 'keybase', typeName: 'keybase' },
|
|
62
|
+
keyref: { attrs: { ...id, name: 'NCName', refer: 'QName' }, required: ['name', 'refer'], annotation: true, model: 'keybase' },
|
|
63
|
+
notation: { attrs: { ...id, name: 'NCName', public: 'public', system: 'anyURI' }, required: ['name'], annotation: true, model: 'none' },
|
|
64
|
+
facet: { attrs: facet, required: ['value'], annotation: true, model: 'none', typeName: 'facet' },
|
|
65
|
+
noFixedFacet: { attrs: { ...id, value: 'anySimpleType' }, required: ['value'], annotation: true, model: 'none', typeName: 'noFixedFacet' },
|
|
66
|
+
numFacet: { attrs: { ...facet, value: 'nonNegativeInteger' }, required: ['value'], annotation: true, model: 'none', typeName: 'numFacet' },
|
|
67
|
+
totalDigits: { attrs: { ...facet, value: 'positiveInteger' }, required: ['value'], annotation: true, model: 'none' },
|
|
68
|
+
whiteSpace: { attrs: { ...facet, value: '#whiteSpace' }, required: ['value'], annotation: true, model: 'none' },
|
|
69
|
+
pattern: { attrs: { ...id, value: 'string' }, required: ['value'], annotation: true, model: 'none' },
|
|
70
|
+
});
|
|
71
|
+
const globals = Object.freeze({
|
|
72
|
+
schema: 'schema', include: 'include', import: 'import', redefine: 'redefine', annotation: 'annotation', appinfo: 'appinfo', documentation: 'documentation',
|
|
73
|
+
complexType: 'topLevelComplexType', simpleType: 'topLevelSimpleType', complexContent: 'complexContent', simpleContent: 'simpleContent',
|
|
74
|
+
restriction: 'restriction', list: 'list', union: 'union', element: 'topLevelElement', attribute: 'topLevelAttribute', group: 'namedGroup',
|
|
75
|
+
attributeGroup: 'namedAttributeGroup', all: 'all', choice: 'explicitGroup', sequence: 'explicitGroup', any: 'any', anyAttribute: 'wildcard',
|
|
76
|
+
selector: 'selector', field: 'field', key: 'keybase', unique: 'keybase', keyref: 'keyref', notation: 'notation',
|
|
77
|
+
minExclusive: 'facet', minInclusive: 'facet', maxExclusive: 'facet', maxInclusive: 'facet', enumeration: 'noFixedFacet',
|
|
78
|
+
totalDigits: 'totalDigits', fractionDigits: 'numFacet', length: 'numFacet', minLength: 'numFacet', maxLength: 'numFacet',
|
|
79
|
+
whiteSpace: 'whiteSpace', pattern: 'pattern',
|
|
80
|
+
});
|
|
81
|
+
const named = new Map(Object.entries(roles).flatMap(([role, definition]) => definition.typeName ? [[definition.typeName, role]] : []));
|
|
82
|
+
const facets = new Set(['minExclusive', 'minInclusive', 'maxExclusive', 'maxInclusive', 'totalDigits', 'fractionDigits', 'length', 'minLength', 'maxLength', 'enumeration', 'whiteSpace', 'pattern']);
|
|
83
|
+
const schemaTop = new Set(['simpleType', 'complexType', 'group', 'attributeGroup', 'element', 'attribute', 'notation']);
|
|
84
|
+
const redefinable = new Set(['simpleType', 'complexType', 'group', 'attributeGroup']);
|
|
85
|
+
const nestedParticles = new Set(['element', 'group', 'choice', 'sequence', 'any']);
|
|
86
|
+
const particles = new Set([...nestedParticles, 'all']);
|
|
87
|
+
export function globalSourceRole(name) {
|
|
88
|
+
return name.namespace === XSD_NAMESPACE && Object.hasOwn(globals, name.local) ? globals[name.local] : undefined;
|
|
89
|
+
}
|
|
90
|
+
export function namedSourceRole(name) {
|
|
91
|
+
return name.namespace === XSD_NAMESPACE ? named.get(name.local) : undefined;
|
|
92
|
+
}
|
|
93
|
+
export function sourceRoleTypeName(role) { return roles[role].typeName; }
|
|
94
|
+
export function abstractSourceRole(role) { return roles[role].abstract === true; }
|
|
95
|
+
/** Immediate clauses only. The owned walk preserves roles, values and all scopes. */
|
|
96
|
+
export function assessSourceGrammar(role, node, budget) {
|
|
97
|
+
budget.chargeWork(15);
|
|
98
|
+
const definition = roles[role];
|
|
99
|
+
const invalid = (message) => ({ kind: 'invalid-schema', rule: 'schema-for-schemas', message, source: node.source });
|
|
100
|
+
const attributes = [], children = [];
|
|
101
|
+
const seen = new Set();
|
|
102
|
+
for (let index = 0; index < node.attributes.length; index++) {
|
|
103
|
+
const attr = node.attributes[index];
|
|
104
|
+
budget.chargeWork(6 + attr.name.local.length + attr.name.namespace.length);
|
|
105
|
+
if (role === 'anyType')
|
|
106
|
+
continue;
|
|
107
|
+
if (attr.name.namespace === XSD_NAMESPACE)
|
|
108
|
+
return invalid('The S4S attribute wildcard excludes the XSD namespace');
|
|
109
|
+
if (attr.name.namespace)
|
|
110
|
+
continue;
|
|
111
|
+
if (!Object.hasOwn(definition.attrs, attr.name.local))
|
|
112
|
+
return invalid('Attribute is not permitted by the selected S4S type');
|
|
113
|
+
budget.chargeWork(3);
|
|
114
|
+
seen.add(attr.name.local);
|
|
115
|
+
attributes.push({ index, type: definition.attrs[attr.name.local] });
|
|
116
|
+
}
|
|
117
|
+
for (const required of definition.required ?? []) {
|
|
118
|
+
budget.chargeWork(2);
|
|
119
|
+
if (!seen.has(required))
|
|
120
|
+
return invalid(`S4S ${required} attribute is required`);
|
|
121
|
+
}
|
|
122
|
+
const elements = [];
|
|
123
|
+
for (let index = 0; index < node.children.length; index++) {
|
|
124
|
+
const child = node.children[index];
|
|
125
|
+
budget.chargeWork(4);
|
|
126
|
+
if (child.kind === 'text') {
|
|
127
|
+
budget.chargeWork(child.value.length * 4);
|
|
128
|
+
if (definition.empty || definition.model !== 'mixed' && /[^\t\r\n ]/.test(child.value))
|
|
129
|
+
return invalid('Text is not permitted by the selected S4S content type');
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
budget.chargeWork(3);
|
|
133
|
+
elements.push({ node: child, index });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
let at = 0;
|
|
137
|
+
const local = () => {
|
|
138
|
+
budget.chargeWork(3);
|
|
139
|
+
const item = elements[at]?.node;
|
|
140
|
+
return item?.name.namespace === XSD_NAMESPACE ? item.name.local : undefined;
|
|
141
|
+
};
|
|
142
|
+
const take = (selected) => { budget.chargeWork(3); children.push({ index: elements[at++].index, role: selected }); };
|
|
143
|
+
const optional = (name, selected) => { if (local() !== name)
|
|
144
|
+
return false; take(selected); return true; };
|
|
145
|
+
const global = () => { const name = local(); take(globals[name]); };
|
|
146
|
+
const particle = () => {
|
|
147
|
+
const name = local();
|
|
148
|
+
if (name === 'group') {
|
|
149
|
+
take('groupRef');
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
if (name === 'all' || name === 'choice' || name === 'sequence') {
|
|
153
|
+
global();
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
return false;
|
|
157
|
+
};
|
|
158
|
+
const attrs = () => {
|
|
159
|
+
while (local() === 'attribute' || local() === 'attributeGroup')
|
|
160
|
+
take(local() === 'attribute' ? 'attribute' : 'attributeGroupRef');
|
|
161
|
+
optional('anyAttribute', 'wildcard');
|
|
162
|
+
};
|
|
163
|
+
const simpleRestriction = () => {
|
|
164
|
+
optional('simpleType', 'localSimpleType');
|
|
165
|
+
while (facets.has(local() ?? ''))
|
|
166
|
+
global();
|
|
167
|
+
};
|
|
168
|
+
if (definition.annotation)
|
|
169
|
+
optional('annotation', 'annotation');
|
|
170
|
+
switch (definition.model) {
|
|
171
|
+
case 'mixed':
|
|
172
|
+
while (at < elements.length)
|
|
173
|
+
take();
|
|
174
|
+
break;
|
|
175
|
+
case 'annotation':
|
|
176
|
+
while (local() === 'appinfo' || local() === 'documentation')
|
|
177
|
+
global();
|
|
178
|
+
break;
|
|
179
|
+
case 'schema': {
|
|
180
|
+
while (['include', 'import', 'redefine', 'annotation'].includes(local() ?? ''))
|
|
181
|
+
global();
|
|
182
|
+
while (schemaTop.has(local() ?? '')) {
|
|
183
|
+
global();
|
|
184
|
+
while (local() === 'annotation')
|
|
185
|
+
global();
|
|
186
|
+
}
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
case 'redefine':
|
|
190
|
+
while (local() === 'annotation' || redefinable.has(local() ?? ''))
|
|
191
|
+
global();
|
|
192
|
+
break;
|
|
193
|
+
case 'complex':
|
|
194
|
+
if (local() === 'simpleContent' || local() === 'complexContent')
|
|
195
|
+
global();
|
|
196
|
+
else {
|
|
197
|
+
particle();
|
|
198
|
+
attrs();
|
|
199
|
+
}
|
|
200
|
+
break;
|
|
201
|
+
case 'complexContent':
|
|
202
|
+
case 'simpleContent': {
|
|
203
|
+
const restriction = local() === 'restriction', extension = local() === 'extension';
|
|
204
|
+
if (!restriction && !extension)
|
|
205
|
+
return invalid('Content wrapper requires one derivation child');
|
|
206
|
+
take(definition.model === 'complexContent' ? restriction ? 'complexRestrictionType' : 'extensionType'
|
|
207
|
+
: restriction ? 'simpleRestrictionType' : 'simpleExtensionType');
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
case 'restrictionType':
|
|
211
|
+
if (!particle())
|
|
212
|
+
simpleRestriction();
|
|
213
|
+
attrs();
|
|
214
|
+
break;
|
|
215
|
+
case 'particleAttrs':
|
|
216
|
+
particle();
|
|
217
|
+
attrs();
|
|
218
|
+
break;
|
|
219
|
+
case 'simpleAttrs':
|
|
220
|
+
simpleRestriction();
|
|
221
|
+
attrs();
|
|
222
|
+
break;
|
|
223
|
+
case 'attrs':
|
|
224
|
+
attrs();
|
|
225
|
+
break;
|
|
226
|
+
case 'simple':
|
|
227
|
+
if (!['restriction', 'list', 'union'].includes(local() ?? ''))
|
|
228
|
+
return invalid('Simple type requires one derivation child');
|
|
229
|
+
else
|
|
230
|
+
global();
|
|
231
|
+
break;
|
|
232
|
+
case 'restriction':
|
|
233
|
+
simpleRestriction();
|
|
234
|
+
break;
|
|
235
|
+
case 'list':
|
|
236
|
+
optional('simpleType', 'localSimpleType');
|
|
237
|
+
break;
|
|
238
|
+
case 'union':
|
|
239
|
+
while (optional('simpleType', 'localSimpleType')) {
|
|
240
|
+
budget.chargeWork();
|
|
241
|
+
}
|
|
242
|
+
break;
|
|
243
|
+
case 'element':
|
|
244
|
+
if (local() === 'simpleType' || local() === 'complexType')
|
|
245
|
+
take(local() === 'simpleType' ? 'localSimpleType' : 'localComplexType');
|
|
246
|
+
while (['key', 'unique', 'keyref'].includes(local() ?? ''))
|
|
247
|
+
global();
|
|
248
|
+
break;
|
|
249
|
+
case 'attribute':
|
|
250
|
+
optional('simpleType', 'localSimpleType');
|
|
251
|
+
break;
|
|
252
|
+
case 'namedGroup':
|
|
253
|
+
if (local() === 'all')
|
|
254
|
+
take('localAll');
|
|
255
|
+
else if (local() === 'choice' || local() === 'sequence')
|
|
256
|
+
take('simpleExplicitGroup');
|
|
257
|
+
else
|
|
258
|
+
return invalid('Named group requires one compositor');
|
|
259
|
+
break;
|
|
260
|
+
case 'realGroup':
|
|
261
|
+
if (['all', 'choice', 'sequence'].includes(local() ?? ''))
|
|
262
|
+
global();
|
|
263
|
+
break;
|
|
264
|
+
case 'group':
|
|
265
|
+
case 'explicitGroup':
|
|
266
|
+
while ((definition.model === 'group' ? particles : nestedParticles).has(local() ?? '')) {
|
|
267
|
+
const name = local();
|
|
268
|
+
take(name === 'element' ? 'localElement' : name === 'group' ? 'groupRef' : globals[name]);
|
|
269
|
+
}
|
|
270
|
+
break;
|
|
271
|
+
case 'all':
|
|
272
|
+
while (optional('element', 'narrowMaxMin')) {
|
|
273
|
+
budget.chargeWork();
|
|
274
|
+
}
|
|
275
|
+
break;
|
|
276
|
+
case 'keybase':
|
|
277
|
+
if (!optional('selector', 'selector') || !optional('field', 'field'))
|
|
278
|
+
return invalid('Identity constraint requires selector and at least one field');
|
|
279
|
+
while (optional('field', 'field')) {
|
|
280
|
+
budget.chargeWork();
|
|
281
|
+
}
|
|
282
|
+
break;
|
|
283
|
+
case 'none': break;
|
|
284
|
+
}
|
|
285
|
+
if (at !== elements.length)
|
|
286
|
+
return invalid('Children do not match the selected contextual S4S grammar');
|
|
287
|
+
// Every ID use in this closed grammar is the unqualified id declaration.
|
|
288
|
+
// cvc-complex-type 5.2 depends on the use even when the attribute is absent.
|
|
289
|
+
return { kind: 'checked', hasIdAttributeUse: definition.attrs.id === 'ID', attributes, children };
|
|
290
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Exact source datatype spellings; callers charge the original lexical length. */
|
|
2
|
+
import { normalizeWhitespace } from '../util/xmlWhitespace.js';
|
|
3
|
+
export function schemaBooleanLexical(value) {
|
|
4
|
+
return ['true', 'false', '1', '0'].includes(normalizeWhitespace(value, 'collapse'));
|
|
5
|
+
}
|
|
6
|
+
export function schemaNonNegativeIntegerLexical(value) {
|
|
7
|
+
return /^(?:\+?[0-9]+|-0+)$/.test(normalizeWhitespace(value, 'collapse'));
|
|
8
|
+
}
|
|
9
|
+
export function schemaPositiveIntegerLexical(value) {
|
|
10
|
+
const normalized = normalizeWhitespace(value, 'collapse');
|
|
11
|
+
return schemaNonNegativeIntegerLexical(normalized) && /[1-9]/.test(normalized);
|
|
12
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ExpandedName, SyntaxElement, SyntaxSource } from '../loader/orderedSyntax.js';
|
|
2
|
+
import type { SchemaOperand } from './schemaDatatypeValues.js';
|
|
3
|
+
import type { SchemaLexicalOperand } from './schemaValueContext.js';
|
|
4
|
+
import type { ResourceLimitFailure, SemanticBudget } from './semanticBudget.js';
|
|
5
|
+
declare const fixedType: unique symbol;
|
|
6
|
+
export type FixedSimpleTypeHandle = Readonly<{
|
|
7
|
+
[fixedType]: true;
|
|
8
|
+
}>;
|
|
9
|
+
export type SourceIdentityFact = Readonly<{
|
|
10
|
+
kind: 'ID' | 'IDREF';
|
|
11
|
+
value: string;
|
|
12
|
+
source: SyntaxSource;
|
|
13
|
+
}>;
|
|
14
|
+
export type SourceValueObligation = Readonly<{
|
|
15
|
+
rule: string;
|
|
16
|
+
source: SyntaxSource;
|
|
17
|
+
name?: ExpandedName;
|
|
18
|
+
}>;
|
|
19
|
+
export type SourceValueFailure = Readonly<{
|
|
20
|
+
kind: 'invalid-schema' | 'unsupported-capability' | 'unresolved';
|
|
21
|
+
rule: string;
|
|
22
|
+
message: string;
|
|
23
|
+
source: SyntaxSource;
|
|
24
|
+
}>;
|
|
25
|
+
export type SourceValueResult = Readonly<{
|
|
26
|
+
kind: 'checked';
|
|
27
|
+
value: SchemaOperand;
|
|
28
|
+
type: FixedSimpleTypeHandle;
|
|
29
|
+
selectedMembers: readonly FixedSimpleTypeHandle[];
|
|
30
|
+
identityFacts: readonly SourceIdentityFact[];
|
|
31
|
+
obligations: readonly SourceValueObligation[];
|
|
32
|
+
}> | SourceValueFailure | ResourceLimitFailure;
|
|
33
|
+
export type FixedSimpleTypeLookup = Readonly<{
|
|
34
|
+
kind: 'found';
|
|
35
|
+
type: FixedSimpleTypeHandle;
|
|
36
|
+
}> | Readonly<{
|
|
37
|
+
kind: 'missing';
|
|
38
|
+
}> | ResourceLimitFailure;
|
|
39
|
+
/**
|
|
40
|
+
* Internal fixed descriptor factory. Handles are authentic only in this factory.
|
|
41
|
+
* Name/lexical/diagnostic records are borrowed immutable data from the authentic
|
|
42
|
+
* DTD-free ordered source traversal; this leaf does not establish membership.
|
|
43
|
+
*/
|
|
44
|
+
export declare function createSchemaSourceValues(budget: SemanticBudget): Readonly<{
|
|
45
|
+
/** Closed internal grammar domain; this never accepts caller descriptors. */
|
|
46
|
+
fixed: (name: string) => FixedSimpleTypeHandle;
|
|
47
|
+
lookup: (name: ExpandedName) => FixedSimpleTypeLookup;
|
|
48
|
+
assess: (type: FixedSimpleTypeHandle, lexical: SchemaLexicalOperand, owner: SyntaxElement) => SourceValueResult;
|
|
49
|
+
}>;
|
|
50
|
+
export {};
|