@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,140 @@
|
|
|
1
|
+
import { resolveLexicalQName, syntaxAttribute, syntaxElements, XSD_NAMESPACE } from '../loader/orderedSyntax.js';
|
|
2
|
+
import { isBuiltinType } from './canonicalGraph.js';
|
|
3
|
+
import { inspectNativeSourceConstruction } from './checkedSourcePreparation.js';
|
|
4
|
+
import { assertSimpleExtensionConstruction } from './finiteRe01Verification.js';
|
|
5
|
+
import { scalarSchemaAssessment } from './scalarSchemaAssessment.js';
|
|
6
|
+
import { schemaScalarContext } from './schemaScalarContext.js';
|
|
7
|
+
export const COMPONENT_CORRESPONDENCE = 'dated-XSD-2004-components-v1';
|
|
8
|
+
const issued = new WeakMap();
|
|
9
|
+
/** Receipt identity binds correspondence to the exact fresh native construction, never a diagnostic digest. */
|
|
10
|
+
export function inspectComponentCorrespondence(value, construction) {
|
|
11
|
+
if (issued.get(value) !== construction)
|
|
12
|
+
throw new TypeError('Fresh matching component correspondence required');
|
|
13
|
+
inspectNativeSourceConstruction(construction);
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
const forms = new Set(['schema', 'import', 'include', 'annotation', 'complexType', 'simpleType', 'complexContent', 'simpleContent',
|
|
17
|
+
'extension', 'restriction', 'enumeration', 'list', 'union', 'length', 'minLength', 'maxLength', 'whiteSpace', 'pattern',
|
|
18
|
+
'minInclusive', 'maxInclusive', 'minExclusive', 'maxExclusive', 'totalDigits', 'fractionDigits',
|
|
19
|
+
'element', 'attribute', 'attributeGroup', 'sequence', 'choice', 'all', 'group', 'any', 'anyAttribute']);
|
|
20
|
+
const contextual = new Set(['QName', 'NOTATION', 'ID', 'IDREF', 'IDREFS', 'ENTITY', 'ENTITIES', 'anyType', 'anySimpleType']);
|
|
21
|
+
/** Audit a closed representation fragment after whole native construction; this is not a second schema checker.
|
|
22
|
+
* @remarks Source syntax/values and component legality remain the native S4S, construction and aggregate owners.
|
|
23
|
+
* This sufficient route excludes redefine/chameleon, identity/substitution, non-string unions and wider faceted families,
|
|
24
|
+
* source complex restrictions, contextual/explicit ur-type references, foreign attributes and endpoint-shadowing witnesses.
|
|
25
|
+
* Endpoint-shadowing witnesses remain inconclusive until component-valued TYPE/SCOPE interpretation is established.
|
|
26
|
+
* @returns An authenticated correspondence or an inconclusive scope/resource result; never a schema-invalid judgment.
|
|
27
|
+
* @throws TypeError For copied/foreign construction or source. Cancellation callbacks propagate unchanged.
|
|
28
|
+
*/
|
|
29
|
+
export function checkComponentCorrespondence(input, supplied, options = {}) {
|
|
30
|
+
const construction = inspectNativeSourceConstruction(supplied, input);
|
|
31
|
+
const actual = construction.request.actual, { budget } = actual;
|
|
32
|
+
const check = () => { options.check?.(); budget.chargeWork(); };
|
|
33
|
+
const outside = (rule, node) => {
|
|
34
|
+
budget.chargeWork(64 + rule.length * 4);
|
|
35
|
+
return Object.freeze({ kind: 'inconclusive-correspondence', rule, ...(node ? { path: node.source.path } : {}), usage: Object.freeze({ ...budget.usage() }) });
|
|
36
|
+
};
|
|
37
|
+
return budget.guard(() => {
|
|
38
|
+
check();
|
|
39
|
+
if (!construction.nativeEstablished)
|
|
40
|
+
return outside('native-construction-unestablished');
|
|
41
|
+
if (!input.schemas.length)
|
|
42
|
+
return outside('no-schema-interpretation');
|
|
43
|
+
for (const schema of input.schemas) {
|
|
44
|
+
check();
|
|
45
|
+
budget.chargeWork(128 + schema.targetNamespace.length * 4);
|
|
46
|
+
if (schema.targetNamespace === XSD_NAMESPACE || schema.targetNamespace === 'http://www.w3.org/2000/xmlns/')
|
|
47
|
+
return outside('system-namespace-unqualified', schema.syntax);
|
|
48
|
+
if (schema.context.kind === 'include' && syntaxAttribute(schema.syntax, 'targetNamespace') === undefined && schema.targetNamespace !== '')
|
|
49
|
+
return outside('chameleon-interpretation', schema.syntax);
|
|
50
|
+
const stack = [{ node: schema.syntax }];
|
|
51
|
+
while (stack.length) {
|
|
52
|
+
check();
|
|
53
|
+
const { node, parent } = stack.pop();
|
|
54
|
+
budget.chargeWork(96 + node.attributes.length * 32 + node.children.length * 8);
|
|
55
|
+
if (node.name.namespace !== XSD_NAMESPACE || !forms.has(node.name.local))
|
|
56
|
+
return outside('source-form-' + node.name.local, node);
|
|
57
|
+
// @why Annotation contents are data under 2004 S4S; the native document owner already checks their syntax and IDs.
|
|
58
|
+
if (node.name.local === 'annotation')
|
|
59
|
+
continue;
|
|
60
|
+
if (node.name.local === 'restriction' && parent?.name.local !== 'simpleType')
|
|
61
|
+
return outside('source-complex-restriction', node);
|
|
62
|
+
for (const attribute of node.attributes) {
|
|
63
|
+
check();
|
|
64
|
+
budget.chargeWork(64 + attribute.value.length * 4);
|
|
65
|
+
if (attribute.name.namespace !== '')
|
|
66
|
+
return outside('foreign-source-attribute', node);
|
|
67
|
+
if (attribute.name.local === 'substitutionGroup')
|
|
68
|
+
return outside('source-substitution', node);
|
|
69
|
+
if (['type', 'base', 'itemType', 'memberTypes'].includes(attribute.name.local)) {
|
|
70
|
+
const words = attribute.name.local === 'memberTypes' ? attribute.value.trim().split(/[\t\r\n ]+/) : [attribute.value];
|
|
71
|
+
for (const word of words) {
|
|
72
|
+
check();
|
|
73
|
+
const name = resolveLexicalQName(word, node);
|
|
74
|
+
if (name.namespace === XSD_NAMESPACE && (!isBuiltinType(name.local) || contextual.has(name.local)))
|
|
75
|
+
return outside('scalar-correspondence-scope', node);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (['element', 'attribute'].includes(node.name.local) && syntaxAttribute(node, 'type') === undefined && syntaxAttribute(node, 'ref') === undefined
|
|
80
|
+
&& !syntaxElements(node).some(child => child.name.namespace === XSD_NAMESPACE && ['simpleType', 'complexType'].includes(child.name.local)))
|
|
81
|
+
return outside('implicit-opaque-declaration-type', node);
|
|
82
|
+
for (const child of syntaxElements(node)) {
|
|
83
|
+
check();
|
|
84
|
+
stack.push({ node: child, parent: node });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// @why #422 audits all actual named/inline/inherited scalar components after whole native formation.
|
|
89
|
+
// Native plans own flattened member order, QName resolution, facets and obligations; syntax alone grants no receipt.
|
|
90
|
+
const scalar = scalarSchemaAssessment(schemaScalarContext(actual));
|
|
91
|
+
for (const id of actual.members) {
|
|
92
|
+
check();
|
|
93
|
+
const found = actual.lookup(id);
|
|
94
|
+
if (found.kind !== 'found' || found.node.kind !== 'simpleType')
|
|
95
|
+
continue;
|
|
96
|
+
const owner = found.node, plan = scalar.ensure({ kind: 'local', target: id }, owner);
|
|
97
|
+
if (plan.obligations?.length)
|
|
98
|
+
return outside('scalar-source-obligations');
|
|
99
|
+
if (plan.variety === 'union') {
|
|
100
|
+
for (const reference of plan.members ?? []) {
|
|
101
|
+
check();
|
|
102
|
+
const member = scalar.ensure(reference, owner);
|
|
103
|
+
if (member.variety !== 'atomic' || member.primitive !== 'string' || member.obligations?.length)
|
|
104
|
+
return outside('scalar-union-correspondence-scope');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (plan.variety === 'atomic' && plan.layers.some(layer => layer.facets.some(facet => !['enumeration', 'whiteSpace'].includes(facet.name)))
|
|
108
|
+
&& plan.primitive !== 'string' && plan.primitive !== 'decimal')
|
|
109
|
+
return outside('scalar-facet-correspondence-scope');
|
|
110
|
+
}
|
|
111
|
+
const closure = construction.closure;
|
|
112
|
+
const proof = 'proof' in closure ? closure.proof : [];
|
|
113
|
+
if (proof.length)
|
|
114
|
+
return outside('constructed-component-interpretation-unestablished');
|
|
115
|
+
if ('actualScalarSlots' in closure && closure.actualScalarSlots.length)
|
|
116
|
+
return outside('generated-scalar-correspondence');
|
|
117
|
+
let constructedContexts = 0;
|
|
118
|
+
if ('simple' in closure) {
|
|
119
|
+
assertSimpleExtensionConstruction(actual, closure);
|
|
120
|
+
if (closure.kind !== 'checked-simple-extension-construction' || closure.unresolved.length)
|
|
121
|
+
return outside('simple-extension-premises-unestablished');
|
|
122
|
+
if (closure.complex.frontier.scalarSlots.length || closure.simple.some(item => item.frontier.scalarSlots.length))
|
|
123
|
+
return outside('generated-scalar-correspondence');
|
|
124
|
+
// @why cos-ct-extends.1.5 asks for an in-principle relation, not replacement of the stored actual base.
|
|
125
|
+
// Finite allocation keeps original identities and then binds TYPE/SCOPE edges unchanged. Each E owns
|
|
126
|
+
// its new local attributes/uses. Its checked extension from anySimpleType and D's paired restriction
|
|
127
|
+
// clauses 1-4 and 5.2 establish the two-step relation on D's unchanged effective properties. The exact
|
|
128
|
+
// simple-extension spine, whole-actual and fresh-middle closure, and all typed/scalar debts are native
|
|
129
|
+
// prerequisites of this authenticated receipt. Source/S4S/builtin/property restrictions above still apply.
|
|
130
|
+
constructedContexts = closure.simple.length;
|
|
131
|
+
}
|
|
132
|
+
check();
|
|
133
|
+
budget.chargeWork(256);
|
|
134
|
+
const receipt = Object.freeze({ kind: 'component-correspondence', basis: COMPONENT_CORRESPONDENCE,
|
|
135
|
+
scope: 'ordinary-source-components', interpretations: input.schemas.length, constructedContexts,
|
|
136
|
+
usage: Object.freeze({ ...budget.usage() }) });
|
|
137
|
+
issued.set(receipt, construction);
|
|
138
|
+
return receipt;
|
|
139
|
+
});
|
|
140
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { DirectOperationContract, DirectMessageRoot } from './directOperation.js';
|
|
2
|
+
import { expandProjectionValue } from './directValues.js';
|
|
3
|
+
import type { ComponentValueMapping, DirectApplicationValue, ProjectionValueReceipt } from './directValues.js';
|
|
4
|
+
import type { ComponentDecodedXml, DirectCodecFailure, DirectXmlLimits } from './directCodec.js';
|
|
5
|
+
import type { StandardSchemaElementDeclaration } from './standardSchemaComponents.js';
|
|
6
|
+
import type { NamespaceConstraint } from './wildcardAlgebra.js';
|
|
7
|
+
import type { ExpandedName, SyntaxElement } from '../loader/orderedSyntax.js';
|
|
8
|
+
import type { ResolverUsage } from './semanticBudget.js';
|
|
9
|
+
export interface ComponentRecordProjectionSpec {
|
|
10
|
+
readonly version: 'component-record-scope-v1';
|
|
11
|
+
readonly scope: 'records-with-declared-wrapper-scope';
|
|
12
|
+
/** Relative to the outer WSDL output element; the current family supports one direct wildcard boundary. */
|
|
13
|
+
readonly payloadPath: readonly ExpandedName[];
|
|
14
|
+
/** Relative to the companion output element; every step must select a unique declared native slot. */
|
|
15
|
+
readonly recordPath: readonly ExpandedName[];
|
|
16
|
+
/** Metadata is omitted; the wildcard is assessed in the explicit companion universe, not a merged wrapper universe. */
|
|
17
|
+
readonly opaqueExclusions: readonly Readonly<{
|
|
18
|
+
path: readonly ExpandedName[];
|
|
19
|
+
reason: 'standard-schema-metadata' | 'wrapper-declaration-universe';
|
|
20
|
+
}>[];
|
|
21
|
+
}
|
|
22
|
+
/** Explicit acknowledgement of the existing scope, with a record path only when it is a real choice.
|
|
23
|
+
* @since 1.1.7
|
|
24
|
+
*/
|
|
25
|
+
export interface ComponentRecordProjectionAssociation {
|
|
26
|
+
readonly scope: 'records-with-declared-wrapper-scope';
|
|
27
|
+
readonly recordPath?: readonly ExpandedName[];
|
|
28
|
+
}
|
|
29
|
+
export interface ComponentRecordProjection {
|
|
30
|
+
readonly kind: 'component-record-projection';
|
|
31
|
+
readonly version: 'component-record-scope-v1';
|
|
32
|
+
readonly direction: Readonly<{
|
|
33
|
+
kind: 'output';
|
|
34
|
+
}>;
|
|
35
|
+
readonly root: DirectMessageRoot;
|
|
36
|
+
readonly contextId: string;
|
|
37
|
+
readonly admitted: false;
|
|
38
|
+
readonly spec: ComponentRecordProjectionSpec;
|
|
39
|
+
readonly usage: ResolverUsage;
|
|
40
|
+
}
|
|
41
|
+
export interface ComponentRecordValue {
|
|
42
|
+
readonly kind: 'component-record-value';
|
|
43
|
+
readonly scope: 'records-with-declared-wrapper-scope';
|
|
44
|
+
readonly admitted: false;
|
|
45
|
+
readonly value: DirectApplicationValue;
|
|
46
|
+
readonly recordCount: number;
|
|
47
|
+
readonly companion: ProjectionValueReceipt;
|
|
48
|
+
}
|
|
49
|
+
export interface ComponentRecordDecodedXml {
|
|
50
|
+
readonly kind: 'component-record-decoded';
|
|
51
|
+
readonly admitted: false;
|
|
52
|
+
readonly payload: SyntaxElement;
|
|
53
|
+
readonly mapping: ComponentRecordProjection;
|
|
54
|
+
readonly validated: ComponentRecordValue;
|
|
55
|
+
readonly usage: ResolverUsage;
|
|
56
|
+
}
|
|
57
|
+
type Leaf = Readonly<{
|
|
58
|
+
kind: 'standard';
|
|
59
|
+
declaration: StandardSchemaElementDeclaration;
|
|
60
|
+
} | {
|
|
61
|
+
kind: 'boundary';
|
|
62
|
+
namespace: NamespaceConstraint;
|
|
63
|
+
}>;
|
|
64
|
+
type Owned = Readonly<{
|
|
65
|
+
outer: DirectOperationContract;
|
|
66
|
+
companion: DirectOperationContract;
|
|
67
|
+
parser: ComponentValueMapping;
|
|
68
|
+
mapping: ComponentValueMapping;
|
|
69
|
+
leaves: readonly Leaf[];
|
|
70
|
+
}>;
|
|
71
|
+
/** Identity-only dispatch; inspecting an unowned object's fields cannot select this mapping profile. */
|
|
72
|
+
export declare function isComponentRecordProjection(value: unknown): value is ComponentRecordProjection;
|
|
73
|
+
/** Build an explicit mapping from independently qualified native contracts.
|
|
74
|
+
* @remarks The current wrapper family is a unit sequence of fixed standard metadata elements and one strict
|
|
75
|
+
* wildcard. Native occurrence/EDC/UPA checks remain authoritative. The complete companion payload is retained;
|
|
76
|
+
* record paths establish intended record declarations, not permission to discard other payload fields.
|
|
77
|
+
* This is a buffered projection, not full-response XSD validation in a merged declaration universe or streaming.
|
|
78
|
+
* @returns An exact native projection or a specific unsupported/value/resource/cancellation result.
|
|
79
|
+
*/
|
|
80
|
+
export declare function createComponentRecordProjection(outer: DirectOperationContract, companion: DirectOperationContract, supplied: ComponentRecordProjectionSpec | ComponentRecordProjectionAssociation, options?: Readonly<{
|
|
81
|
+
signal?: AbortSignal;
|
|
82
|
+
}>): ComponentRecordProjection | DirectCodecFailure;
|
|
83
|
+
/** Native projection identity and exact outer contract are checked before reading projection fields. */
|
|
84
|
+
export declare function inspectComponentRecordProjection(projection: ComponentRecordProjection, outer?: DirectOperationContract): Owned;
|
|
85
|
+
export declare function inspectComponentRecordValue(value: ComponentRecordValue, projection: ComponentRecordProjection): ComponentRecordValue;
|
|
86
|
+
/** Revalidate the projected application value, including after JSON serialization.
|
|
87
|
+
* @remarks This uses the exact companion's existing inverse and scalar/structure owners. It establishes only
|
|
88
|
+
* projected-value validity; it cannot reconstruct or certify omitted wrapper metadata or SOAP protocol state.
|
|
89
|
+
*/
|
|
90
|
+
export declare function validateComponentRecordApplication(projection: ComponentRecordProjection, application: unknown, options?: Readonly<{
|
|
91
|
+
signal?: AbortSignal;
|
|
92
|
+
maxText?: number;
|
|
93
|
+
maxItems?: number;
|
|
94
|
+
}>): ReturnType<typeof expandProjectionValue>;
|
|
95
|
+
/** Decode once and validate the declared wrapper plus its explicitly selected companion payload.
|
|
96
|
+
* @remarks The complete companion value survives; only declared standard metadata is omitted. This function
|
|
97
|
+
* does not validate SOAP protocol grammar itself. Its protocol selector can choose only this projection or
|
|
98
|
+
* an actual declared fault mapping of the outer contract, always on nodes from the same parse.
|
|
99
|
+
*/
|
|
100
|
+
export declare function decodeComponentRecordXml(outer: DirectOperationContract, projection: ComponentRecordProjection, bytes: Uint8Array, options?: Readonly<{
|
|
101
|
+
signal?: AbortSignal;
|
|
102
|
+
limits?: DirectXmlLimits;
|
|
103
|
+
uri?: string;
|
|
104
|
+
selectPayload?: (root: SyntaxElement) => {
|
|
105
|
+
payload: SyntaxElement;
|
|
106
|
+
mapping: ComponentRecordProjection | ComponentValueMapping;
|
|
107
|
+
};
|
|
108
|
+
}>): ComponentRecordDecodedXml | ComponentDecodedXml | DirectCodecFailure;
|
|
109
|
+
export {};
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/** Explicit buffered companion-record projection; wrapper and record source contexts never merge. */
|
|
2
|
+
import { inspectDirectOperation } from './directOperation.js';
|
|
3
|
+
import { createComponentValueMapping, inspectComponentValueMapping, expandProjectionValue } from './directValues.js';
|
|
4
|
+
import { observeComponentXml, assertComponentObservedPayload, assessObservedComponentPayload } from './directCodec.js';
|
|
5
|
+
import { deriveActualComplexContent } from './complexTypeContent.js';
|
|
6
|
+
import { prepareSemanticParticleView } from './particleSemanticView.js';
|
|
7
|
+
import { checkDeclaredParticleLegality } from './particleLocalAssessment.js';
|
|
8
|
+
import { assessSourceAttributeUses } from './schemaAttributeUses.js';
|
|
9
|
+
import { assessStandardSchemaElement } from './standardSchemaComponents.js';
|
|
10
|
+
import { namespaceAllows } from './wildcardAlgebra.js';
|
|
11
|
+
import { directDataOwnership } from './directExecutionPolicy.js';
|
|
12
|
+
import { DataOwnershipLimitError } from './dataOwnership.js';
|
|
13
|
+
import { isXmlNCName, syntaxElements } from '../loader/orderedSyntax.js';
|
|
14
|
+
const issued = new WeakMap();
|
|
15
|
+
const values = new WeakMap();
|
|
16
|
+
/** Identity-only dispatch; inspecting an unowned object's fields cannot select this mapping profile. */
|
|
17
|
+
export function isComponentRecordProjection(value) {
|
|
18
|
+
return !!value && typeof value === 'object' && issued.has(value);
|
|
19
|
+
}
|
|
20
|
+
class ScopeStop extends Error {
|
|
21
|
+
kind;
|
|
22
|
+
rule;
|
|
23
|
+
constructor(kind, rule) {
|
|
24
|
+
super(rule);
|
|
25
|
+
this.kind = kind;
|
|
26
|
+
this.rule = rule;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const same = (a, b) => a.namespace === b.namespace && a.local === b.local;
|
|
30
|
+
const ownKeys = (value, keys) => Object.keys(value).length === keys.length && keys.every(key => Object.hasOwn(value, key));
|
|
31
|
+
/** Build an explicit mapping from independently qualified native contracts.
|
|
32
|
+
* @remarks The current wrapper family is a unit sequence of fixed standard metadata elements and one strict
|
|
33
|
+
* wildcard. Native occurrence/EDC/UPA checks remain authoritative. The complete companion payload is retained;
|
|
34
|
+
* record paths establish intended record declarations, not permission to discard other payload fields.
|
|
35
|
+
* This is a buffered projection, not full-response XSD validation in a merged declaration universe or streaming.
|
|
36
|
+
* @returns An exact native projection or a specific unsupported/value/resource/cancellation result.
|
|
37
|
+
*/
|
|
38
|
+
export function createComponentRecordProjection(outer, companion, supplied, options = {}) {
|
|
39
|
+
const { context } = inspectDirectOperation(outer);
|
|
40
|
+
inspectDirectOperation(companion);
|
|
41
|
+
const { budget } = context;
|
|
42
|
+
const check = () => { budget.chargeWork(); if (options.signal?.aborted)
|
|
43
|
+
throw new ScopeStop('cancelled', 'cooperative-cancellation'); };
|
|
44
|
+
const stop = rule => { throw new ScopeStop('unsupported', rule); };
|
|
45
|
+
const failure = (kind, rule) => Object.freeze({ kind, rule, usage: Object.freeze({ ...budget.usage() }) });
|
|
46
|
+
try {
|
|
47
|
+
const result = budget.guard(() => {
|
|
48
|
+
check();
|
|
49
|
+
if (outer.basis !== 'native-component-premises-v1' || companion.basis !== 'native-component-premises-v1'
|
|
50
|
+
|| outer.correspondence !== 'dated-XSD-2004-components-v1' || companion.correspondence !== 'dated-XSD-2004-components-v1')
|
|
51
|
+
stop('component-record-source-authority');
|
|
52
|
+
const requested = directDataOwnership(budget).freeze(directDataOwnership(budget).snapshot(supplied, check));
|
|
53
|
+
const association = requested && typeof requested === 'object' && !Object.hasOwn(requested, 'version');
|
|
54
|
+
if (association && (requested.scope !== 'records-with-declared-wrapper-scope'
|
|
55
|
+
|| !ownKeys(requested, Object.hasOwn(requested, 'recordPath') ? ['scope', 'recordPath'] : ['scope'])))
|
|
56
|
+
throw new ScopeStop('value-invalid', 'explicit-component-record-scope');
|
|
57
|
+
let spec = association ? { version: 'component-record-scope-v1', scope: requested.scope,
|
|
58
|
+
payloadPath: [companion.output.element.name], recordPath: requested.recordPath ?? [], opaqueExclusions: [] } : requested;
|
|
59
|
+
const validName = (name) => name && typeof name === 'object' && ownKeys(name, ['namespace', 'local'])
|
|
60
|
+
&& typeof name.namespace === 'string' && typeof name.local === 'string' && isXmlNCName(name.local);
|
|
61
|
+
const path = (names) => Array.isArray(names) && names.length > 0 && names.every(validName);
|
|
62
|
+
if (!spec || typeof spec !== 'object' || !ownKeys(spec, ['version', 'scope', 'payloadPath', 'recordPath', 'opaqueExclusions'])
|
|
63
|
+
|| spec.version !== 'component-record-scope-v1' || spec.scope !== 'records-with-declared-wrapper-scope'
|
|
64
|
+
|| !path(spec.payloadPath) || spec.payloadPath.length !== 1 || !(association && !Object.hasOwn(requested, 'recordPath') || path(spec.recordPath))
|
|
65
|
+
|| !Array.isArray(spec.opaqueExclusions) || !spec.opaqueExclusions.every(item => item && typeof item === 'object'
|
|
66
|
+
&& ownKeys(item, ['path', 'reason']) && path(item.path) && item.path.length === 1
|
|
67
|
+
&& ['standard-schema-metadata', 'wrapper-declaration-universe'].includes(item.reason)))
|
|
68
|
+
throw new ScopeStop('value-invalid', 'explicit-component-record-scope');
|
|
69
|
+
if (!same(spec.payloadPath[0], companion.output.element.name))
|
|
70
|
+
stop('companion-output-payload-path');
|
|
71
|
+
const parser = createComponentValueMapping(outer, { kind: 'input' }, options);
|
|
72
|
+
if (parser.kind !== 'component-mapping')
|
|
73
|
+
return parser;
|
|
74
|
+
const mapping = createComponentValueMapping(companion, { kind: 'output' }, options);
|
|
75
|
+
if (mapping.kind !== 'component-mapping')
|
|
76
|
+
return mapping;
|
|
77
|
+
const projection = inspectComponentValueMapping(mapping, companion).projection;
|
|
78
|
+
const records = new Map(projection.records.map(record => [record.type.id, record]));
|
|
79
|
+
if (association && !Object.hasOwn(requested, 'recordPath')) {
|
|
80
|
+
const candidates = [];
|
|
81
|
+
let recursive = false;
|
|
82
|
+
const pending = [
|
|
83
|
+
{ value: projection.root, prefix: [], ancestors: new Set() },
|
|
84
|
+
];
|
|
85
|
+
while (pending.length) {
|
|
86
|
+
check();
|
|
87
|
+
const { value, prefix, ancestors } = pending.pop();
|
|
88
|
+
if (value.kind !== 'record')
|
|
89
|
+
continue;
|
|
90
|
+
if (ancestors.has(value.type)) {
|
|
91
|
+
recursive = true;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const record = records.get(value.type);
|
|
95
|
+
if (!record)
|
|
96
|
+
stop('record-path-native-record');
|
|
97
|
+
const next = new Set(ancestors);
|
|
98
|
+
next.add(value.type);
|
|
99
|
+
for (const slot of record.slots) {
|
|
100
|
+
check();
|
|
101
|
+
const path = [...prefix, slot.element.name];
|
|
102
|
+
if (slot.value.kind === 'record' && slot.particle.occurs.max !== '1')
|
|
103
|
+
candidates.push(path);
|
|
104
|
+
pending.push({ value: slot.value, prefix: path, ancestors: next });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (!recursive && !candidates.length)
|
|
108
|
+
stop('record-path-complex-repeated-declaration');
|
|
109
|
+
if (recursive || candidates.length !== 1)
|
|
110
|
+
stop(`ambiguous-record-path: supply recordPath selecting one repeated complex declaration; candidates=${JSON.stringify(candidates)}; recursive=${recursive}`);
|
|
111
|
+
spec = { ...spec, recordPath: candidates[0] };
|
|
112
|
+
}
|
|
113
|
+
let value = projection.root;
|
|
114
|
+
for (let index = 0; index < spec.recordPath.length; index++) {
|
|
115
|
+
check();
|
|
116
|
+
if (value.kind !== 'record')
|
|
117
|
+
stop('record-path-record-parent');
|
|
118
|
+
const record = records.get(value.type);
|
|
119
|
+
if (!record)
|
|
120
|
+
stop('record-path-native-record');
|
|
121
|
+
const slots = record.slots.filter(slot => { check(); return same(slot.element.name, spec.recordPath[index]); });
|
|
122
|
+
if (slots.length !== 1)
|
|
123
|
+
stop('record-path-unique-declaration');
|
|
124
|
+
value = slots[0].value;
|
|
125
|
+
if (index === spec.recordPath.length - 1 && (value.kind !== 'record' || slots[0].particle.occurs.max === '1'))
|
|
126
|
+
stop('record-path-complex-repeated-declaration');
|
|
127
|
+
}
|
|
128
|
+
const root = outer.output.element;
|
|
129
|
+
if (root.nillable || root.abstract || root.value || root.substitutionGroup)
|
|
130
|
+
stop('record-wrapper-declaration');
|
|
131
|
+
const type = context.resolve(root.type);
|
|
132
|
+
if (type.kind !== 'found' || type.node.kind !== 'complexType' || type.node.abstract || type.node.mixed)
|
|
133
|
+
stop('record-wrapper-complex-type');
|
|
134
|
+
const attributes = assessSourceAttributeUses(context, type.node.id);
|
|
135
|
+
if (attributes.kind === 'resource-limit')
|
|
136
|
+
return failure('resource-limit', 'record-wrapper-attributes');
|
|
137
|
+
if (attributes.kind !== 'checked' || attributes.value.wildcard || attributes.value.attributes.length)
|
|
138
|
+
stop('record-wrapper-attribute-scope');
|
|
139
|
+
const content = deriveActualComplexContent(context, type.node.id);
|
|
140
|
+
if (content.kind === 'resource-limit')
|
|
141
|
+
return failure('resource-limit', 'record-wrapper-content');
|
|
142
|
+
if (content.kind !== 'checked' || content.view.content.kind !== 'element-only')
|
|
143
|
+
stop('record-wrapper-content');
|
|
144
|
+
const prepared = prepareSemanticParticleView(context, content.view, 'declared');
|
|
145
|
+
if (prepared.kind === 'resource-limit')
|
|
146
|
+
return failure('resource-limit', 'record-wrapper-particle');
|
|
147
|
+
if (prepared.kind !== 'checked')
|
|
148
|
+
stop('record-wrapper-particle');
|
|
149
|
+
const legal = checkDeclaredParticleLegality(context, prepared.view);
|
|
150
|
+
if (legal.kind === 'resource-limit')
|
|
151
|
+
return failure('resource-limit', 'record-wrapper-particle-legality');
|
|
152
|
+
if (legal.kind !== 'checked' || !legal.value)
|
|
153
|
+
stop('record-wrapper-particle-legality');
|
|
154
|
+
const leaves = [], pending = [prepared.view.root];
|
|
155
|
+
let boundaries = 0;
|
|
156
|
+
while (pending.length) {
|
|
157
|
+
check();
|
|
158
|
+
const particle = pending.pop();
|
|
159
|
+
if (particle.occurs.min !== '1' || particle.occurs.max !== '1')
|
|
160
|
+
stop('record-wrapper-unit-occurrence');
|
|
161
|
+
if (particle.kind === 'sequence')
|
|
162
|
+
for (let index = particle.children.length - 1; index >= 0; index--) {
|
|
163
|
+
check();
|
|
164
|
+
pending.push(particle.children[index]);
|
|
165
|
+
}
|
|
166
|
+
else if (particle.standardElement)
|
|
167
|
+
leaves.push(Object.freeze({ kind: 'standard', declaration: particle.standardElement }));
|
|
168
|
+
else if (particle.kind === 'any' && particle.wildcard?.processContents === 'strict') {
|
|
169
|
+
if (++boundaries > 1 || !namespaceAllows(particle.wildcard.namespace, spec.payloadPath[0].namespace, budget.chargeWork))
|
|
170
|
+
stop('record-wrapper-wildcard-boundary');
|
|
171
|
+
leaves.push(Object.freeze({ kind: 'boundary', namespace: particle.wildcard.namespace }));
|
|
172
|
+
}
|
|
173
|
+
else
|
|
174
|
+
stop('record-wrapper-terminal-scope');
|
|
175
|
+
}
|
|
176
|
+
if (boundaries !== 1)
|
|
177
|
+
stop('record-wrapper-one-boundary');
|
|
178
|
+
const metadata = leaves.filter((leaf) => leaf.kind === 'standard');
|
|
179
|
+
if (association)
|
|
180
|
+
spec = { ...spec, opaqueExclusions: [
|
|
181
|
+
...metadata.map(leaf => ({ path: [leaf.declaration.name], reason: 'standard-schema-metadata' })),
|
|
182
|
+
{ path: spec.payloadPath, reason: 'wrapper-declaration-universe' },
|
|
183
|
+
] };
|
|
184
|
+
const exclusions = spec.opaqueExclusions.filter(item => item.reason === 'standard-schema-metadata');
|
|
185
|
+
const universes = spec.opaqueExclusions.filter(item => item.reason === 'wrapper-declaration-universe');
|
|
186
|
+
if (metadata.length !== exclusions.length || metadata.some(leaf => exclusions.filter(item => same(item.path[0], leaf.declaration.name)).length !== 1)
|
|
187
|
+
|| universes.length !== 1 || !same(universes[0].path[0], spec.payloadPath[0]))
|
|
188
|
+
stop('record-wrapper-explicit-exclusions');
|
|
189
|
+
check();
|
|
190
|
+
const result = Object.freeze({ kind: 'component-record-projection', version: 'component-record-scope-v1',
|
|
191
|
+
direction: Object.freeze({ kind: 'output' }), root: outer.output, contextId: outer.contextId, admitted: false, spec: directDataOwnership(budget).freeze(spec),
|
|
192
|
+
usage: Object.freeze({ ...budget.usage() }) });
|
|
193
|
+
issued.set(result, Object.freeze({ outer, companion, parser, mapping, leaves: Object.freeze(leaves) }));
|
|
194
|
+
return result;
|
|
195
|
+
});
|
|
196
|
+
return result.kind === 'resource-limit' && !('rule' in result) ? failure('resource-limit', 'record-projection-budget') : result;
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
if (budget.exhausted())
|
|
200
|
+
return failure('resource-limit', 'record-projection-budget');
|
|
201
|
+
if (error instanceof DataOwnershipLimitError)
|
|
202
|
+
return failure('resource-limit', error.message);
|
|
203
|
+
if (error instanceof ScopeStop)
|
|
204
|
+
return failure(error.kind, error.rule);
|
|
205
|
+
throw error;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/** Native projection identity and exact outer contract are checked before reading projection fields. */
|
|
209
|
+
export function inspectComponentRecordProjection(projection, outer) {
|
|
210
|
+
const owned = issued.get(projection);
|
|
211
|
+
if (!owned || outer !== undefined && owned.outer !== outer)
|
|
212
|
+
throw new TypeError('Native matching component record projection required');
|
|
213
|
+
inspectDirectOperation(owned.outer);
|
|
214
|
+
inspectDirectOperation(owned.companion);
|
|
215
|
+
return owned;
|
|
216
|
+
}
|
|
217
|
+
export function inspectComponentRecordValue(value, projection) {
|
|
218
|
+
inspectComponentRecordProjection(projection);
|
|
219
|
+
if (values.get(value) !== projection)
|
|
220
|
+
throw new TypeError('Native matching component record value required');
|
|
221
|
+
return value;
|
|
222
|
+
}
|
|
223
|
+
/** Revalidate the projected application value, including after JSON serialization.
|
|
224
|
+
* @remarks This uses the exact companion's existing inverse and scalar/structure owners. It establishes only
|
|
225
|
+
* projected-value validity; it cannot reconstruct or certify omitted wrapper metadata or SOAP protocol state.
|
|
226
|
+
*/
|
|
227
|
+
export function validateComponentRecordApplication(projection, application, options = {}) {
|
|
228
|
+
const owned = inspectComponentRecordProjection(projection), { context } = inspectDirectOperation(owned.companion);
|
|
229
|
+
return expandProjectionValue(context, owned.mapping.root.element, application, options);
|
|
230
|
+
}
|
|
231
|
+
/** Decode once and validate the declared wrapper plus its explicitly selected companion payload.
|
|
232
|
+
* @remarks The complete companion value survives; only declared standard metadata is omitted. This function
|
|
233
|
+
* does not validate SOAP protocol grammar itself. Its protocol selector can choose only this projection or
|
|
234
|
+
* an actual declared fault mapping of the outer contract, always on nodes from the same parse.
|
|
235
|
+
*/
|
|
236
|
+
export function decodeComponentRecordXml(outer, projection, bytes, options = {}) {
|
|
237
|
+
const owned = inspectComponentRecordProjection(projection, outer), { context } = inspectDirectOperation(outer), { budget } = context;
|
|
238
|
+
const check = () => { budget.chargeWork(); if (options.signal?.aborted)
|
|
239
|
+
throw new ScopeStop('cancelled', 'cooperative-cancellation'); };
|
|
240
|
+
const failure = (kind, rule) => Object.freeze({ kind, rule, usage: Object.freeze({ ...budget.usage() }) });
|
|
241
|
+
try {
|
|
242
|
+
const result = budget.guard(() => {
|
|
243
|
+
check();
|
|
244
|
+
const observation = observeComponentXml(outer, owned.parser, bytes, options);
|
|
245
|
+
if (observation.kind !== 'observed-component-xml')
|
|
246
|
+
return observation;
|
|
247
|
+
const selected = options.selectPayload?.(observation.root) ?? { payload: observation.root, mapping: projection };
|
|
248
|
+
assertComponentObservedPayload(observation, selected.payload, check);
|
|
249
|
+
if (selected.mapping !== projection) {
|
|
250
|
+
const { mapping } = inspectComponentValueMapping(selected.mapping, outer);
|
|
251
|
+
if (mapping.direction.kind !== 'fault')
|
|
252
|
+
throw new TypeError('Record projection selection requires this output or a declared fault');
|
|
253
|
+
return assessObservedComponentPayload(outer, mapping, observation, selected.payload, options);
|
|
254
|
+
}
|
|
255
|
+
const wrapper = selected.payload;
|
|
256
|
+
if (!same(wrapper.name, outer.output.element.name))
|
|
257
|
+
throw new ScopeStop('mismatch', 'record-wrapper-root');
|
|
258
|
+
if (wrapper.attributes.length || wrapper.children.some(node => node.kind === 'text' && /[^\t\r\n ]/.test(node.value)))
|
|
259
|
+
throw new ScopeStop('mismatch', 'record-wrapper-attributes-or-text');
|
|
260
|
+
const children = syntaxElements(wrapper);
|
|
261
|
+
if (children.length !== owned.leaves.length)
|
|
262
|
+
throw new ScopeStop('mismatch', 'record-wrapper-child-count');
|
|
263
|
+
let payload;
|
|
264
|
+
for (let index = 0; index < owned.leaves.length; index++) {
|
|
265
|
+
check();
|
|
266
|
+
const leaf = owned.leaves[index], child = children[index];
|
|
267
|
+
if (leaf.kind === 'standard') {
|
|
268
|
+
if (!same(child.name, leaf.declaration.name))
|
|
269
|
+
throw new ScopeStop('mismatch', 'record-wrapper-standard-order');
|
|
270
|
+
const assessed = assessStandardSchemaElement(leaf.declaration, child, budget, { signal: options.signal, check });
|
|
271
|
+
if (assessed.kind !== 'schema-element-instance')
|
|
272
|
+
return failure(assessed.kind, assessed.kind === 'resource-limit' ? 'record-standard-budget' : assessed.rule);
|
|
273
|
+
if (assessed.remaining.length)
|
|
274
|
+
throw new ScopeStop('unsupported', 'record-standard-instance-obligations');
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
if (!same(child.name, projection.spec.payloadPath[0]) || !namespaceAllows(leaf.namespace, child.name.namespace, budget.chargeWork))
|
|
278
|
+
throw new ScopeStop('mismatch', 'record-wrapper-companion-boundary');
|
|
279
|
+
payload = child;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (!payload)
|
|
283
|
+
throw new TypeError('Native record boundary unavailable');
|
|
284
|
+
const decoded = assessObservedComponentPayload(owned.companion, owned.mapping, observation, payload, options);
|
|
285
|
+
if (decoded.kind !== 'component-decoded')
|
|
286
|
+
return decoded;
|
|
287
|
+
const recordCount = countRecords(observation, payload, projection.spec.recordPath, check);
|
|
288
|
+
const validated = Object.freeze({ kind: 'component-record-value', scope: 'records-with-declared-wrapper-scope',
|
|
289
|
+
admitted: false, value: decoded.validated.value, recordCount, companion: decoded.validated });
|
|
290
|
+
values.set(validated, projection);
|
|
291
|
+
check();
|
|
292
|
+
return Object.freeze({ kind: 'component-record-decoded', admitted: false, payload: wrapper, mapping: projection,
|
|
293
|
+
validated, usage: Object.freeze({ ...budget.usage() }) });
|
|
294
|
+
});
|
|
295
|
+
return result.kind === 'resource-limit' && !('rule' in result) ? failure('resource-limit', 'record-projection-budget') : result;
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
if (budget.exhausted())
|
|
299
|
+
return failure('resource-limit', 'record-projection-budget');
|
|
300
|
+
if (error instanceof ScopeStop)
|
|
301
|
+
return failure(error.kind, error.rule);
|
|
302
|
+
throw error;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
function countRecords(observation, payload, path, check) {
|
|
306
|
+
assertComponentObservedPayload(observation, payload, check);
|
|
307
|
+
let current = [payload];
|
|
308
|
+
for (const name of path) {
|
|
309
|
+
const next = [];
|
|
310
|
+
for (const parent of current)
|
|
311
|
+
for (const child of syntaxElements(parent)) {
|
|
312
|
+
check();
|
|
313
|
+
if (same(child.name, name))
|
|
314
|
+
next.push(child);
|
|
315
|
+
}
|
|
316
|
+
current = next;
|
|
317
|
+
}
|
|
318
|
+
return current.length;
|
|
319
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DirectOperationContract } from './directOperation.js';
|
|
2
|
+
import type { ExpandedName } from '../loader/orderedSyntax.js';
|
|
3
|
+
/** Own closed metadata for one invocation; runtime reconstruction never consumes this object.
|
|
4
|
+
* @since 1.1.7
|
|
5
|
+
* @constraints Every action and selection is checked against authentic native source before reuse.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ComponentSoapPreparation {
|
|
8
|
+
#private;
|
|
9
|
+
/** Prepare one source/service/binding within this invocation.
|
|
10
|
+
* @param contract Fresh native operation identity.
|
|
11
|
+
* @param selection Service/port choice checked before reuse.
|
|
12
|
+
* @param check Cancellation and resource checks owned by this invocation.
|
|
13
|
+
* @returns Resolves after closed metadata preparation; dependency objects remain private.
|
|
14
|
+
* @throws For foreign handles, unsupported selection, cancellation or bootstrap failures.
|
|
15
|
+
*/
|
|
16
|
+
prepare(contract: DirectOperationContract, selection: {
|
|
17
|
+
service: ExpandedName;
|
|
18
|
+
port: string;
|
|
19
|
+
}, check: () => void): Promise<void>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Invocation-local SOAP preparation ownership without exposing dependency metadata types.
|
|
2
|
+
* @since 1.1.7
|
|
3
|
+
*/
|
|
4
|
+
import { inspectDirectOperation } from './directOperation.js';
|
|
5
|
+
import { prepareComponentSoapWsdl, validateComponentSoapSelection } from './directSoapSource.js';
|
|
6
|
+
/** Own closed metadata for one invocation; runtime reconstruction never consumes this object.
|
|
7
|
+
* @since 1.1.7
|
|
8
|
+
* @constraints Every action and selection is checked against authentic native source before reuse.
|
|
9
|
+
*/
|
|
10
|
+
export class ComponentSoapPreparation {
|
|
11
|
+
#sources = new WeakMap();
|
|
12
|
+
/** Prepare one source/service/binding within this invocation.
|
|
13
|
+
* @param contract Fresh native operation identity.
|
|
14
|
+
* @param selection Service/port choice checked before reuse.
|
|
15
|
+
* @param check Cancellation and resource checks owned by this invocation.
|
|
16
|
+
* @returns Resolves after closed metadata preparation; dependency objects remain private.
|
|
17
|
+
* @throws For foreign handles, unsupported selection, cancellation or bootstrap failures.
|
|
18
|
+
*/
|
|
19
|
+
async prepare(contract, selection, check) {
|
|
20
|
+
const { source } = inspectDirectOperation(contract);
|
|
21
|
+
validateComponentSoapSelection(contract, selection, check);
|
|
22
|
+
const key = JSON.stringify([selection.service, selection.port, contract.selector.binding]);
|
|
23
|
+
let entries = this.#sources.get(source);
|
|
24
|
+
if (!entries) {
|
|
25
|
+
entries = new Map();
|
|
26
|
+
this.#sources.set(source, entries);
|
|
27
|
+
}
|
|
28
|
+
let prepared = entries.get(key);
|
|
29
|
+
if (!prepared) {
|
|
30
|
+
prepared = prepareComponentSoapWsdl(contract, selection, check);
|
|
31
|
+
entries.set(key, prepared);
|
|
32
|
+
}
|
|
33
|
+
await prepared;
|
|
34
|
+
check();
|
|
35
|
+
}
|
|
36
|
+
}
|