@techspokes/typescript-wsdl-client 1.1.5 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +80 -68
- package/dist/app/generateApp.d.ts +0 -1
- package/dist/app/generateApp.js +1 -1
- 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 +268 -0
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +92 -2
- package/dist/client/checkedDirectRuntime.d.ts +40 -3
- package/dist/client/checkedDirectRuntime.js +28 -8
- package/dist/client/directClientRuntime.d.ts +27 -2
- package/dist/client/directClientRuntime.js +142 -89
- package/dist/client/directClientVersion.d.ts +3 -1
- package/dist/client/directClientVersion.js +3 -0
- package/dist/client/generateClient.d.ts +0 -1
- package/dist/client/generateClient.js +98 -28
- package/dist/client/generateDirectClient.d.ts +21 -3
- package/dist/client/generateDirectClient.js +138 -6
- package/dist/client/generateOperations.d.ts +0 -1
- package/dist/client/generateOperations.js +30 -11
- package/dist/client/generateTypes.d.ts +0 -1
- package/dist/client/generateUtils.d.ts +0 -1
- package/dist/client/generateUtils.js +7 -1
- package/dist/compiler/applicationGroups.d.ts +53 -0
- package/dist/compiler/applicationGroups.js +403 -0
- package/dist/compiler/buildCanonicalGraph.d.ts +0 -1
- package/dist/compiler/canonicalGraph.d.ts +4 -16
- package/dist/compiler/canonicalGraph.js +1 -8
- package/dist/compiler/catalogErrors.d.ts +0 -1
- package/dist/compiler/catalogProvenance.d.ts +0 -1
- package/dist/compiler/checkedAssessment.d.ts +0 -1
- package/dist/compiler/checkedAssessment.js +1 -1
- package/dist/compiler/checkedComponentSource.d.ts +16 -0
- package/dist/compiler/checkedComponentSource.js +31 -0
- package/dist/compiler/checkedSourcePreparation.d.ts +38 -1
- package/dist/compiler/checkedSourcePreparation.js +71 -0
- package/dist/compiler/complexTypeContent.d.ts +5 -6
- package/dist/compiler/complexTypeContent.js +2 -2
- package/dist/compiler/componentCorrespondence.d.ts +32 -0
- package/dist/compiler/componentCorrespondence.js +140 -0
- package/dist/compiler/componentRecordProjection.d.ts +112 -0
- package/dist/compiler/componentRecordProjection.js +329 -0
- package/dist/compiler/componentSoapPreparation.d.ts +20 -0
- package/dist/compiler/componentSoapPreparation.js +36 -0
- package/dist/compiler/composeCanonicalGraph.d.ts +0 -1
- package/dist/compiler/dataOwnership.d.ts +0 -1
- package/dist/compiler/dataOwnership.js +14 -4
- package/dist/compiler/datatypeValues.d.ts +0 -1
- package/dist/compiler/declarationIdentity.d.ts +22 -0
- package/dist/compiler/declarationIdentity.js +9 -0
- package/dist/compiler/directCodec.d.ts +79 -2
- package/dist/compiler/directCodec.js +310 -92
- package/dist/compiler/directExecutionPolicy.d.ts +0 -1
- package/dist/compiler/directOperation.d.ts +72 -8
- package/dist/compiler/directOperation.js +164 -19
- package/dist/compiler/directSoap.d.ts +29 -5
- package/dist/compiler/directSoap.js +154 -44
- package/dist/compiler/directSoapSource.d.ts +24 -1
- package/dist/compiler/directSoapSource.js +166 -19
- package/dist/compiler/directSourceCapsule.d.ts +74 -2
- package/dist/compiler/directSourceCapsule.js +484 -6
- package/dist/compiler/directStructure.d.ts +83 -6
- package/dist/compiler/directStructure.js +353 -58
- package/dist/compiler/directStructurePlan.d.ts +144 -2
- package/dist/compiler/directStructurePlan.js +615 -30
- package/dist/compiler/directValues.d.ts +76 -5
- package/dist/compiler/directValues.js +967 -117
- package/dist/compiler/finiteRe01Construction.d.ts +69 -0
- package/dist/compiler/finiteRe01Construction.js +422 -0
- package/dist/compiler/finiteRe01Verification.d.ts +81 -3
- package/dist/compiler/finiteRe01Verification.js +391 -4
- package/dist/compiler/generateCatalog.d.ts +0 -1
- package/dist/compiler/graphTraversal.d.ts +0 -1
- package/dist/compiler/hypotheticalScopedIdentity.d.ts +0 -1
- package/dist/compiler/legacyDeclarations.d.ts +26 -0
- package/dist/compiler/legacyDeclarations.js +144 -0
- package/dist/compiler/occurrenceAnalysis.d.ts +2 -1
- package/dist/compiler/occurrenceAnalysis.js +23 -7
- package/dist/compiler/originalSourceMembership.d.ts +0 -1
- package/dist/compiler/particleAttribution.d.ts +0 -1
- package/dist/compiler/particleAttribution.js +20 -0
- package/dist/compiler/particleDeclarationConsistency.d.ts +0 -1
- package/dist/compiler/particleDeclarationConsistency.js +9 -0
- package/dist/compiler/particleExtension.d.ts +0 -1
- package/dist/compiler/particleExtension.js +5 -1
- package/dist/compiler/particleLocalAssessment.d.ts +0 -1
- package/dist/compiler/particleRestriction.d.ts +0 -1
- package/dist/compiler/particleRestriction.js +6 -1
- package/dist/compiler/particleSemanticView.d.ts +2 -1
- package/dist/compiler/particleSemanticView.js +16 -3
- package/dist/compiler/particleWildcardRelation.d.ts +0 -1
- package/dist/compiler/projectionScalar.d.ts +49 -0
- package/dist/compiler/projectionScalar.js +218 -0
- package/dist/compiler/re01CandidateAssignments.d.ts +95 -0
- package/dist/compiler/re01CandidateAssignments.js +341 -0
- package/dist/compiler/re01CandidateCorrespondence.d.ts +22 -1
- package/dist/compiler/re01CandidateCorrespondence.js +167 -38
- package/dist/compiler/re01TypeProperties.d.ts +0 -1
- package/dist/compiler/re01TypePropertyValidation.d.ts +0 -1
- package/dist/compiler/resolveCanonicalGraph.d.ts +5 -2
- package/dist/compiler/resolveCanonicalGraph.js +77 -7
- package/dist/compiler/rpcStringValues.d.ts +30 -0
- package/dist/compiler/rpcStringValues.js +196 -0
- package/dist/compiler/rpcTypedValues.d.ts +48 -0
- package/dist/compiler/rpcTypedValues.js +190 -0
- package/dist/compiler/scalarSchemaAssessment.d.ts +0 -1
- package/dist/compiler/schemaAttributeGroupProperties.d.ts +0 -1
- package/dist/compiler/schemaAttributeProperties.d.ts +0 -1
- package/dist/compiler/schemaAttributeUses.d.ts +22 -2
- package/dist/compiler/schemaAttributeUses.js +86 -13
- package/dist/compiler/schemaBinaryWordReconstruction.d.ts +0 -1
- package/dist/compiler/schemaBuiltinFacets.d.ts +0 -1
- package/dist/compiler/schemaCalendarImages.d.ts +0 -1
- package/dist/compiler/schemaCalendarLanguage.d.ts +0 -1
- package/dist/compiler/schemaCompiler.d.ts +0 -1
- package/dist/compiler/schemaCompiler.js +44 -109
- package/dist/compiler/schemaComponentEquality.d.ts +0 -1
- package/dist/compiler/schemaConstructionAssessment.d.ts +34 -1
- package/dist/compiler/schemaConstructionAssessment.js +88 -6
- package/dist/compiler/schemaDatatypeValues.d.ts +0 -1
- package/dist/compiler/schemaDecimalLanguage.d.ts +0 -1
- package/dist/compiler/schemaDeclarationPrimitives.d.ts +7 -2
- package/dist/compiler/schemaDeclarationPrimitives.js +18 -1
- package/dist/compiler/schemaDocumentSyntax.d.ts +0 -1
- package/dist/compiler/schemaDurationLanguage.d.ts +0 -1
- package/dist/compiler/schemaElementInstance.d.ts +30 -0
- package/dist/compiler/schemaElementInstance.js +45 -0
- package/dist/compiler/schemaElementProperties.d.ts +0 -1
- package/dist/compiler/schemaEndpointWordCapacity.d.ts +0 -1
- package/dist/compiler/schemaExactCalendar.d.ts +0 -1
- package/dist/compiler/schemaFacetAnnotation.d.ts +0 -1
- package/dist/compiler/schemaGeneratedScalarShape.d.ts +0 -1
- package/dist/compiler/schemaGeneratedScalarShape.js +2 -0
- package/dist/compiler/schemaIdentityConstraints.d.ts +0 -1
- package/dist/compiler/schemaIeeeLanguage.d.ts +0 -1
- package/dist/compiler/schemaIntegerImages.d.ts +0 -1
- package/dist/compiler/schemaLexicalPredicates.d.ts +0 -1
- package/dist/compiler/schemaNotationProperties.d.ts +0 -1
- package/dist/compiler/schemaNumericImageConditions.d.ts +0 -1
- package/dist/compiler/schemaParticleWildcardProperties.d.ts +0 -1
- package/dist/compiler/schemaPattern.d.ts +0 -1
- package/dist/compiler/schemaRegularLanguage.d.ts +0 -1
- package/dist/compiler/schemaScalarContext.d.ts +5 -1
- package/dist/compiler/schemaScalarKernel.d.ts +0 -1
- package/dist/compiler/schemaScalarWitnesses.d.ts +0 -1
- package/dist/compiler/schemaSimpleTypeProperties.d.ts +0 -1
- package/dist/compiler/schemaSourceGrammar.d.ts +0 -1
- package/dist/compiler/schemaSourceLexical.d.ts +0 -1
- package/dist/compiler/schemaSourceValues.d.ts +0 -1
- package/dist/compiler/schemaSourceWildcards.d.ts +1 -2
- package/dist/compiler/schemaSourceWildcards.js +3 -1
- package/dist/compiler/schemaSymbolicSequences.d.ts +0 -1
- package/dist/compiler/schemaSymbolicValueSets.d.ts +0 -1
- package/dist/compiler/schemaSyntaxAssessment.d.ts +0 -1
- package/dist/compiler/schemaTemporalAliases.d.ts +0 -1
- package/dist/compiler/schemaTokenImages.d.ts +0 -1
- package/dist/compiler/schemaTypeIdentity.d.ts +0 -1
- package/dist/compiler/schemaTypeIdentity.js +2 -0
- package/dist/compiler/schemaTypeRelations.d.ts +0 -1
- package/dist/compiler/schemaUri.d.ts +0 -1
- package/dist/compiler/schemaValueContext.d.ts +0 -1
- package/dist/compiler/schemaValueImages.d.ts +0 -1
- package/dist/compiler/schemaValueSequences.d.ts +0 -1
- package/dist/compiler/semanticBudget.d.ts +18 -1
- package/dist/compiler/semanticBudget.js +17 -2
- package/dist/compiler/semanticCatalog.d.ts +2 -3
- package/dist/compiler/semanticContext.d.ts +12 -1
- package/dist/compiler/semanticContext.js +39 -0
- package/dist/compiler/semanticTypeDependencies.d.ts +0 -1
- package/dist/compiler/semanticTypeReference.d.ts +0 -1
- package/dist/compiler/shapeResolver.d.ts +0 -1
- package/dist/compiler/soapHeaders.d.ts +16 -0
- package/dist/compiler/soapHeaders.js +42 -0
- package/dist/compiler/sourceSchemaBinding.d.ts +0 -1
- 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 +0 -1
- package/dist/compiler/validateSemanticGraph.d.ts +0 -1
- package/dist/compiler/wildcardAlgebra.d.ts +0 -1
- 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/generateComposedGateway.d.ts +16 -0
- package/dist/gateway/generateComposedGateway.js +65 -0
- package/dist/gateway/generateGateway.d.ts +0 -1
- package/dist/gateway/generateGateway.js +1 -0
- package/dist/gateway/generators.d.ts +0 -1
- package/dist/gateway/generators.js +19 -4
- package/dist/gateway/helpers.d.ts +1 -1
- package/dist/gateway/helpers.js +15 -0
- package/dist/generation/componentShape.d.ts +14 -0
- package/dist/generation/componentShape.js +293 -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 +11 -2
- package/dist/index.js +4 -1
- package/dist/loader/fetch.d.ts +0 -1
- package/dist/loader/orderedSyntax.d.ts +12 -1
- package/dist/loader/orderedSyntax.js +40 -6
- package/dist/loader/resolutionDepth.d.ts +0 -1
- package/dist/loader/schemaInput.d.ts +28 -1
- package/dist/loader/schemaInput.js +41 -4
- package/dist/loader/schemaResources.d.ts +2 -1
- package/dist/loader/schemaResources.js +45 -4
- package/dist/loader/wsdlLoader.d.ts +0 -1
- package/dist/multiServicePipeline.d.ts +41 -0
- package/dist/multiServicePipeline.js +287 -0
- package/dist/openapi/casing.d.ts +0 -1
- package/dist/openapi/composeOpenAPI.d.ts +29 -0
- package/dist/openapi/composeOpenAPI.js +322 -0
- package/dist/openapi/generateOpenAPI.d.ts +0 -1
- 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 +7 -3
- package/dist/pipeline.js +15 -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/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 +0 -1
- package/dist/xsd/primitives.d.ts +0 -1
- package/docs/agent-skill.md +12 -1
- package/docs/api-reference.md +127 -9
- package/docs/checked-gateway.md +212 -0
- package/docs/checked-generation.md +167 -0
- package/docs/cli-reference.md +48 -6
- package/docs/concepts.md +139 -5
- package/docs/configuration.md +15 -4
- package/docs/corpus.md +33 -0
- package/docs/direct-values.md +13 -13
- package/docs/examples/checked-forecast.wsdl +19 -0
- package/docs/gateway-guide.md +104 -27
- package/docs/generated-code.md +22 -11
- package/docs/mapping-contract.md +114 -0
- package/docs/migration-playbook.md +5 -1
- package/docs/migration.md +124 -6
- package/docs/output-anatomy.md +21 -18
- package/docs/production.md +7 -5
- package/docs/start-here.md +19 -3
- package/docs/supported-patterns.md +24 -3
- package/docs/testing.md +119 -31
- package/docs/troubleshooting.md +3 -1
- package/llms.txt +16 -8
- package/package.json +64 -23
- package/src/runtime/checkedGatewayHost.tpl.txt +157 -0
- package/src/runtime/clientStreamMethods.tpl.txt +156 -148
- package/src/runtime/operationsStreamHelper.tpl.txt +6 -6
- package/src/runtime/streamXml.ts +49 -21
- package/dist/app/generateApp.d.ts.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/client/checkedDirectRuntime.d.ts.map +0 -1
- package/dist/client/directClientRuntime.d.ts.map +0 -1
- package/dist/client/directClientVersion.d.ts.map +0 -1
- package/dist/client/generateClient.d.ts.map +0 -1
- package/dist/client/generateDirectClient.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/buildCanonicalGraph.d.ts.map +0 -1
- package/dist/compiler/canonicalGraph.d.ts.map +0 -1
- package/dist/compiler/catalogErrors.d.ts.map +0 -1
- package/dist/compiler/catalogProvenance.d.ts.map +0 -1
- package/dist/compiler/checkedAssessment.d.ts.map +0 -1
- package/dist/compiler/checkedSourcePreparation.d.ts.map +0 -1
- package/dist/compiler/complexTypeContent.d.ts.map +0 -1
- package/dist/compiler/composeCanonicalGraph.d.ts.map +0 -1
- package/dist/compiler/dataOwnership.d.ts.map +0 -1
- package/dist/compiler/datatypeValues.d.ts.map +0 -1
- package/dist/compiler/directCodec.d.ts.map +0 -1
- package/dist/compiler/directExecutionPolicy.d.ts.map +0 -1
- package/dist/compiler/directOperation.d.ts.map +0 -1
- package/dist/compiler/directSoap.d.ts.map +0 -1
- package/dist/compiler/directSoapSource.d.ts.map +0 -1
- package/dist/compiler/directSourceCapsule.d.ts.map +0 -1
- package/dist/compiler/directStructure.d.ts.map +0 -1
- package/dist/compiler/directStructurePlan.d.ts.map +0 -1
- package/dist/compiler/directValues.d.ts.map +0 -1
- package/dist/compiler/finiteRe01Verification.d.ts.map +0 -1
- package/dist/compiler/generateCatalog.d.ts.map +0 -1
- package/dist/compiler/graphTraversal.d.ts.map +0 -1
- package/dist/compiler/hypotheticalScopedIdentity.d.ts.map +0 -1
- package/dist/compiler/occurrenceAnalysis.d.ts.map +0 -1
- package/dist/compiler/originalSourceMembership.d.ts.map +0 -1
- package/dist/compiler/particleAttribution.d.ts.map +0 -1
- package/dist/compiler/particleDeclarationConsistency.d.ts.map +0 -1
- package/dist/compiler/particleExtension.d.ts.map +0 -1
- package/dist/compiler/particleLocalAssessment.d.ts.map +0 -1
- package/dist/compiler/particleRestriction.d.ts.map +0 -1
- package/dist/compiler/particleSemanticView.d.ts.map +0 -1
- package/dist/compiler/particleWildcardRelation.d.ts.map +0 -1
- package/dist/compiler/re01CandidateCorrespondence.d.ts.map +0 -1
- package/dist/compiler/re01TypeProperties.d.ts.map +0 -1
- package/dist/compiler/re01TypePropertyValidation.d.ts.map +0 -1
- package/dist/compiler/resolveCanonicalGraph.d.ts.map +0 -1
- package/dist/compiler/scalarSchemaAssessment.d.ts.map +0 -1
- package/dist/compiler/schemaAttributeGroupProperties.d.ts.map +0 -1
- package/dist/compiler/schemaAttributeProperties.d.ts.map +0 -1
- package/dist/compiler/schemaAttributeUses.d.ts.map +0 -1
- package/dist/compiler/schemaBinaryWordReconstruction.d.ts.map +0 -1
- package/dist/compiler/schemaBuiltinFacets.d.ts.map +0 -1
- package/dist/compiler/schemaCalendarImages.d.ts.map +0 -1
- package/dist/compiler/schemaCalendarLanguage.d.ts.map +0 -1
- package/dist/compiler/schemaCompiler.d.ts.map +0 -1
- package/dist/compiler/schemaComponentEquality.d.ts.map +0 -1
- package/dist/compiler/schemaConstructionAssessment.d.ts.map +0 -1
- package/dist/compiler/schemaDatatypeValues.d.ts.map +0 -1
- package/dist/compiler/schemaDecimalLanguage.d.ts.map +0 -1
- package/dist/compiler/schemaDeclarationPrimitives.d.ts.map +0 -1
- package/dist/compiler/schemaDocumentSyntax.d.ts.map +0 -1
- package/dist/compiler/schemaDurationLanguage.d.ts.map +0 -1
- package/dist/compiler/schemaElementProperties.d.ts.map +0 -1
- package/dist/compiler/schemaEndpointWordCapacity.d.ts.map +0 -1
- package/dist/compiler/schemaExactCalendar.d.ts.map +0 -1
- package/dist/compiler/schemaFacetAnnotation.d.ts.map +0 -1
- package/dist/compiler/schemaGeneratedScalarShape.d.ts.map +0 -1
- package/dist/compiler/schemaIdentityConstraints.d.ts.map +0 -1
- package/dist/compiler/schemaIeeeLanguage.d.ts.map +0 -1
- package/dist/compiler/schemaIntegerImages.d.ts.map +0 -1
- package/dist/compiler/schemaLexicalPredicates.d.ts.map +0 -1
- package/dist/compiler/schemaNotationProperties.d.ts.map +0 -1
- package/dist/compiler/schemaNumericImageConditions.d.ts.map +0 -1
- package/dist/compiler/schemaParticleWildcardProperties.d.ts.map +0 -1
- package/dist/compiler/schemaPattern.d.ts.map +0 -1
- package/dist/compiler/schemaRegularLanguage.d.ts.map +0 -1
- package/dist/compiler/schemaScalarContext.d.ts.map +0 -1
- package/dist/compiler/schemaScalarKernel.d.ts.map +0 -1
- package/dist/compiler/schemaScalarWitnesses.d.ts.map +0 -1
- package/dist/compiler/schemaSimpleTypeProperties.d.ts.map +0 -1
- package/dist/compiler/schemaSourceGrammar.d.ts.map +0 -1
- package/dist/compiler/schemaSourceLexical.d.ts.map +0 -1
- package/dist/compiler/schemaSourceValues.d.ts.map +0 -1
- package/dist/compiler/schemaSourceWildcards.d.ts.map +0 -1
- package/dist/compiler/schemaSymbolicSequences.d.ts.map +0 -1
- package/dist/compiler/schemaSymbolicValueSets.d.ts.map +0 -1
- package/dist/compiler/schemaSyntaxAssessment.d.ts.map +0 -1
- package/dist/compiler/schemaTemporalAliases.d.ts.map +0 -1
- package/dist/compiler/schemaTokenImages.d.ts.map +0 -1
- package/dist/compiler/schemaTypeIdentity.d.ts.map +0 -1
- package/dist/compiler/schemaTypeRelations.d.ts.map +0 -1
- package/dist/compiler/schemaUri.d.ts.map +0 -1
- package/dist/compiler/schemaValueContext.d.ts.map +0 -1
- package/dist/compiler/schemaValueImages.d.ts.map +0 -1
- package/dist/compiler/schemaValueSequences.d.ts.map +0 -1
- package/dist/compiler/semanticBudget.d.ts.map +0 -1
- package/dist/compiler/semanticCatalog.d.ts.map +0 -1
- package/dist/compiler/semanticContext.d.ts.map +0 -1
- package/dist/compiler/semanticTypeDependencies.d.ts.map +0 -1
- package/dist/compiler/semanticTypeReference.d.ts.map +0 -1
- package/dist/compiler/shapeResolver.d.ts.map +0 -1
- package/dist/compiler/sourceSchemaBinding.d.ts.map +0 -1
- package/dist/compiler/structuralCompanions.d.ts.map +0 -1
- package/dist/compiler/validateSemanticGraph.d.ts.map +0 -1
- package/dist/compiler/wildcardAlgebra.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/orderedSyntax.d.ts.map +0 -1
- package/dist/loader/resolutionDepth.d.ts.map +0 -1
- package/dist/loader/schemaInput.d.ts.map +0 -1
- package/dist/loader/schemaResources.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/util/xmlWhitespace.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 -69
- package/docs/architecture.md +0 -158
- package/docs/content-model-analysis.md +0 -92
- package/docs/content-model-baseline.md +0 -121
- package/docs/content-model-catalog.md +0 -116
- package/docs/content-model-companions.md +0 -90
- package/docs/content-model-composition.md +0 -103
- package/docs/content-model-decisions.md +0 -79
- package/docs/content-model-gateway-feasibility.md +0 -169
- package/docs/content-model-graph.md +0 -121
- package/docs/content-model-loading.md +0 -163
- package/docs/content-model-matching.md +0 -85
- package/docs/content-model-readiness.md +0 -144
- package/docs/content-model-resolution.md +0 -81
- package/docs/content-model-s02-handoff.md +0 -98
- package/docs/content-model-s06-au-01.md +0 -425
- package/docs/content-model-s06-dt-01.md +0 -386
- package/docs/content-model-s06-pw-01.md +0 -350
- package/docs/content-model-s06-re-01-resolver-implementation.md +0 -869
- package/docs/content-model-s06-re-01-resolver.md +0 -513
- package/docs/content-model-s06-re-01-scalar-witnesses.md +0 -1423
- package/docs/content-model-s06-re-01-support-reconstruction.md +0 -6337
- package/docs/content-model-s06-re-01.md +0 -7477
- package/docs/content-model-s06-research-handoff.md +0 -909
- package/docs/content-model-shipped-fix.md +0 -83
- package/docs/content-model-soap-feasibility.md +0 -165
- package/docs/decisions/001-test-generation.md +0 -36
- package/docs/decisions/002-streamable-responses.md +0 -332
- package/docs/decisions/003-content-model-contracts.md +0 -280
- package/docs/file-naming-and-path-organization.md +0 -213
- package/docs/reference-validation.md +0 -243
- 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/releases/v1.1.5.md +0 -38
- 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
|
@@ -20,6 +20,43 @@ class CorrespondenceAbort extends Error {
|
|
|
20
20
|
this.result = result;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
+
/** Read effective original properties through the existing native source owners; cached data grants no validity. */
|
|
24
|
+
function mapActualComplexProperties(actual, id) {
|
|
25
|
+
const b = actual.budget, charge = b.chargeWork;
|
|
26
|
+
let cache = actualMappings.get(actual);
|
|
27
|
+
if (!cache) {
|
|
28
|
+
charge(2);
|
|
29
|
+
cache = new Map();
|
|
30
|
+
actualMappings.set(actual, cache);
|
|
31
|
+
}
|
|
32
|
+
const cached = cache.get(id);
|
|
33
|
+
if (cached)
|
|
34
|
+
return cached;
|
|
35
|
+
const found = actual.lookup(id);
|
|
36
|
+
if (found.kind !== 'found' || found.node.kind !== 'complexType')
|
|
37
|
+
throw new CorrespondenceAbort(Object.freeze({ kind: 'invalid-evidence',
|
|
38
|
+
rule: 'original-property-correspondence', component: id, message: 'Expected an original complex type' }));
|
|
39
|
+
const original = found.node;
|
|
40
|
+
const content = deriveActualComplexContent(actual, id), attrs = assessSourceAttributeUses(actual, id);
|
|
41
|
+
if (content.kind !== 'checked')
|
|
42
|
+
throw new CorrespondenceAbort(content.kind === 'resource-limit' ? content
|
|
43
|
+
: { ...content, kind: content.kind === 'invalid-input' ? 'invalid-evidence' : 'unresolved' });
|
|
44
|
+
if (attrs.kind !== 'checked')
|
|
45
|
+
throw new CorrespondenceAbort(attrs);
|
|
46
|
+
charge(20 + attrs.value.uses.length);
|
|
47
|
+
const properties = {
|
|
48
|
+
type: id, derivation: { method: original.derivation?.kind ?? 'restriction', base: original.derivation?.base ?? ANY_TYPE },
|
|
49
|
+
targetNamespace: original.context.effectiveNamespace,
|
|
50
|
+
abstract: original.abstract, final: declarationMethods(actual, original, 'final'),
|
|
51
|
+
block: declarationMethods(actual, original, 'block'), content: content.view.content,
|
|
52
|
+
attributeUses: attrs.value.uses.map(use => use.id), wildcard: attrs.value.wildcard, provenance: { kind: 'actual-mapped', original: id },
|
|
53
|
+
};
|
|
54
|
+
charge(9);
|
|
55
|
+
const result = Object.freeze({ properties: b.freeze(b.snapshot(properties)), context: actual,
|
|
56
|
+
view: content.view, synthetic: content.view.synthetic, scalarObligations: attrs.scalarObligations, typeDependencies: attrs.typeDependencies });
|
|
57
|
+
cache.set(id, result);
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
23
60
|
export function assertCandidateCorrespondence(context, receipt) {
|
|
24
61
|
assertSemanticContext(context);
|
|
25
62
|
if (issued.get(receipt) !== context)
|
|
@@ -311,47 +348,12 @@ export function checkCandidateCorrespondence(actual, parent, candidate, target,
|
|
|
311
348
|
}
|
|
312
349
|
return { properties: prior, context: parent, synthetic: [], scalarObligations: [], typeDependencies: [] };
|
|
313
350
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
cache = new Map();
|
|
318
|
-
actualMappings.set(actual, cache);
|
|
319
|
-
}
|
|
320
|
-
const cached = cache.get(id);
|
|
321
|
-
if (cached) {
|
|
322
|
-
typeDependencies.add(cached.typeDependencies);
|
|
323
|
-
for (const obligation of cached.scalarObligations) {
|
|
324
|
-
charge(3);
|
|
325
|
-
scalarObligations.push({ contextId: obligation.contextId ?? actual.contextId, obligation });
|
|
326
|
-
}
|
|
327
|
-
return cached;
|
|
328
|
-
}
|
|
329
|
-
const original = node(actual, id);
|
|
330
|
-
if (original.kind !== 'complexType')
|
|
331
|
-
return fail('original-property-correspondence', id, 'Expected an original complex type', 'invalid-evidence');
|
|
332
|
-
const content = deriveActualComplexContent(actual, id), attrs = assessSourceAttributeUses(actual, id);
|
|
333
|
-
if (content.kind !== 'checked')
|
|
334
|
-
throw new CorrespondenceAbort(content.kind === 'resource-limit' ? content
|
|
335
|
-
: { ...content, kind: content.kind === 'invalid-input' ? 'invalid-evidence' : 'unresolved' });
|
|
336
|
-
if (attrs.kind !== 'checked')
|
|
337
|
-
throw new CorrespondenceAbort(attrs);
|
|
338
|
-
typeDependencies.add(attrs.typeDependencies);
|
|
339
|
-
for (const obligation of attrs.scalarObligations) {
|
|
351
|
+
const result = mapActualComplexProperties(actual, id);
|
|
352
|
+
typeDependencies.add(result.typeDependencies);
|
|
353
|
+
for (const obligation of result.scalarObligations) {
|
|
340
354
|
charge(3);
|
|
341
355
|
scalarObligations.push({ contextId: obligation.contextId ?? actual.contextId, obligation });
|
|
342
356
|
}
|
|
343
|
-
charge(20 + attrs.value.uses.length);
|
|
344
|
-
const properties = {
|
|
345
|
-
type: id, derivation: { method: original.derivation?.kind ?? 'restriction', base: original.derivation?.base ?? ANY_TYPE },
|
|
346
|
-
targetNamespace: original.context.effectiveNamespace,
|
|
347
|
-
abstract: original.abstract, final: declarationMethods(actual, original, 'final'),
|
|
348
|
-
block: declarationMethods(actual, original, 'block'), content: content.view.content,
|
|
349
|
-
attributeUses: attrs.value.uses.map(use => use.id), wildcard: attrs.value.wildcard, provenance: { kind: 'actual-mapped', original: id },
|
|
350
|
-
};
|
|
351
|
-
charge(9);
|
|
352
|
-
const result = Object.freeze({ properties: b.freeze(b.snapshot(properties)), context: actual,
|
|
353
|
-
view: content.view, synthetic: content.view.synthetic, scalarObligations: attrs.scalarObligations, typeDependencies: attrs.typeDependencies });
|
|
354
|
-
cache.set(id, result);
|
|
355
357
|
return result;
|
|
356
358
|
};
|
|
357
359
|
const typeNamespace = (context, id, properties) => {
|
|
@@ -570,3 +572,130 @@ export function checkCandidateCorrespondence(actual, parent, candidate, target,
|
|
|
570
572
|
}
|
|
571
573
|
});
|
|
572
574
|
}
|
|
575
|
+
const additiveProperties = new WeakMap();
|
|
576
|
+
/** Authenticate simple-content property correspondence independently of construction and dated interpretation. */
|
|
577
|
+
export function assertAdditiveSimpleProperties(actual, context, receipt) {
|
|
578
|
+
assertSemanticContext(actual);
|
|
579
|
+
assertSemanticContext(context);
|
|
580
|
+
const issued = additiveProperties.get(receipt);
|
|
581
|
+
if (!issued || issued.actual !== actual || issued.context !== context)
|
|
582
|
+
throw new TypeError('Fresh matching additive property correspondence required');
|
|
583
|
+
}
|
|
584
|
+
/** Compare fresh simple-content representatives with native effective source properties, preserving every original binding.
|
|
585
|
+
* @remarks Identity/name and derivation are deliberately distinct for the fresh restriction representative.
|
|
586
|
+
* Its other effective complex properties must match the original target. The middle carries the same attributes
|
|
587
|
+
* and extends the exact designated simple ancestor. Local legality, aggregate closure and dated interpretation
|
|
588
|
+
* remain separate obligations; producer provenance labels grant none of them.
|
|
589
|
+
* @returns Authenticated native property correspondence or an explicit mismatch/unavailable/resource result.
|
|
590
|
+
* @throws TypeError For unauthenticated or unrelated contexts.
|
|
591
|
+
*/
|
|
592
|
+
export function checkAdditiveSimpleProperties(actual, candidate, target, intermediate, representative) {
|
|
593
|
+
assertSemanticContext(actual);
|
|
594
|
+
assertSemanticContext(candidate);
|
|
595
|
+
if (!contextsShareRequest(actual, candidate) || !isSemanticCandidateOf(actual, candidate))
|
|
596
|
+
throw new TypeError('Expected a direct child of this actual request');
|
|
597
|
+
const b = actual.budget, charge = b.chargeWork;
|
|
598
|
+
return b.guard(() => {
|
|
599
|
+
const fail = (rule, message, kind = 'candidate-rejected') => {
|
|
600
|
+
charge(32 + rule.length + message.length + target.length);
|
|
601
|
+
throw new CorrespondenceAbort(Object.freeze({ kind, rule, component: target, contextId: candidate.contextId, message }));
|
|
602
|
+
};
|
|
603
|
+
try {
|
|
604
|
+
if (actual.kind !== 'actual' || actual.membership !== 'complete-actual-plus-additions' || candidate.membership !== 'complete-actual-plus-additions')
|
|
605
|
+
return fail('additive-source-context', 'Complete actual source membership is required', 'unresolved');
|
|
606
|
+
if (intermediate === representative || actual.lookup(intermediate).kind !== 'missing' || actual.lookup(representative).kind !== 'missing'
|
|
607
|
+
|| candidate.members.length !== actual.members.length + 2)
|
|
608
|
+
return fail('additive-fresh-types', 'Exactly two fresh type components are required');
|
|
609
|
+
for (const id of actual.members) {
|
|
610
|
+
charge(16 + id.length);
|
|
611
|
+
const before = actual.lookup(id), after = candidate.lookup(id);
|
|
612
|
+
if (before.kind !== 'found' || after.kind !== 'found' || before.node !== after.node
|
|
613
|
+
|| actual.rawTypeProperties(id) !== candidate.rawTypeProperties(id)
|
|
614
|
+
|| actual.rawSimpleTypeProperties(id) !== candidate.rawSimpleTypeProperties(id)
|
|
615
|
+
|| actual.rawElementProperties(id) !== candidate.rawElementProperties(id)
|
|
616
|
+
|| actual.rawAttributeProperties(id) !== candidate.rawAttributeProperties(id)
|
|
617
|
+
|| actual.rawAttributeGroupProperties(id) !== candidate.rawAttributeGroupProperties(id)
|
|
618
|
+
|| actual.rawParticleWildcardProperties(id) !== candidate.rawParticleWildcardProperties(id)
|
|
619
|
+
|| actual.owner(id) !== candidate.owner(id))
|
|
620
|
+
return fail('additive-original-preservation', 'An original component or scope binding changed');
|
|
621
|
+
}
|
|
622
|
+
const e = candidate.lookup(intermediate), c = candidate.lookup(representative);
|
|
623
|
+
if (e.kind !== 'found' || c.kind !== 'found' || e.node.kind !== 'complexType' || c.node.kind !== 'complexType')
|
|
624
|
+
return fail('additive-fresh-types', 'Fresh extension and restriction complex types are required');
|
|
625
|
+
const original = mapActualComplexProperties(actual, target), middle = candidate.rawTypeProperties(intermediate), end = candidate.rawTypeProperties(representative);
|
|
626
|
+
if (!middle || !end)
|
|
627
|
+
return fail('additive-raw-properties', 'Complete fresh complex properties are required', 'unresolved');
|
|
628
|
+
if (original.properties.content.kind !== 'simple' || middle.content.kind !== 'simple' || end.content.kind !== 'simple')
|
|
629
|
+
return fail('additive-simple-content-family', 'This property route supports only simple content', 'unresolved');
|
|
630
|
+
const designated = re01Ancestor(actual, target);
|
|
631
|
+
if (designated.kind !== 'checked')
|
|
632
|
+
throw new CorrespondenceAbort(designated);
|
|
633
|
+
const typeDependencies = collectSemanticTypeDependencies(candidate);
|
|
634
|
+
typeDependencies.add(original.typeDependencies);
|
|
635
|
+
typeDependencies.add(designated.typeDependencies);
|
|
636
|
+
const key = (context, reference) => {
|
|
637
|
+
const resolved = resolveSemanticType(context, reference);
|
|
638
|
+
if (!('identity' in resolved))
|
|
639
|
+
return fail('additive-type-reference', 'A property type is unavailable', 'unresolved');
|
|
640
|
+
typeDependencies.add([{ contextId: context.contextId, type: resolved.identity }]);
|
|
641
|
+
return semanticTypeKey(context, resolved.identity);
|
|
642
|
+
};
|
|
643
|
+
const sameSet = (left, right) => {
|
|
644
|
+
charge(4);
|
|
645
|
+
const a = new Set(), z = new Set();
|
|
646
|
+
for (const value of left) {
|
|
647
|
+
charge(2 + value.length);
|
|
648
|
+
a.add(value);
|
|
649
|
+
}
|
|
650
|
+
for (const value of right) {
|
|
651
|
+
charge(2 + value.length);
|
|
652
|
+
z.add(value);
|
|
653
|
+
}
|
|
654
|
+
if (a.size !== z.size)
|
|
655
|
+
return false;
|
|
656
|
+
for (const value of a) {
|
|
657
|
+
charge(2 + value.length);
|
|
658
|
+
if (!z.has(value))
|
|
659
|
+
return false;
|
|
660
|
+
}
|
|
661
|
+
return true;
|
|
662
|
+
};
|
|
663
|
+
const sameWildcard = (left, right) => {
|
|
664
|
+
charge(4);
|
|
665
|
+
if (!left.wildcard || !right.wildcard)
|
|
666
|
+
return left.wildcard === right.wildcard;
|
|
667
|
+
return left.wildcard.processContents === right.wildcard.processContents
|
|
668
|
+
&& namespaceSetSubset(left.wildcard.namespace, right.wildcard.namespace, charge)
|
|
669
|
+
&& namespaceSetSubset(right.wildcard.namespace, left.wildcard.namespace, charge);
|
|
670
|
+
};
|
|
671
|
+
if (middle.derivation.method !== 'extension' || end.derivation.method !== 'restriction'
|
|
672
|
+
|| key(candidate, middle.derivation.base) !== key(actual, designated.ancestor)
|
|
673
|
+
|| key(candidate, end.derivation.base) !== key(candidate, { kind: 'local', target: intermediate }))
|
|
674
|
+
return fail('additive-derivation-chain', 'The representatives do not have the required extension/restriction chain');
|
|
675
|
+
if (key(candidate, middle.content.type) !== key(actual, designated.ancestor)
|
|
676
|
+
|| key(candidate, end.content.type) !== key(actual, original.properties.content.type))
|
|
677
|
+
return fail('additive-content-correspondence', 'Representative scalar content differs from its native source property');
|
|
678
|
+
const prior = original.properties;
|
|
679
|
+
if (end.targetNamespace !== prior.targetNamespace || end.abstract !== prior.abstract
|
|
680
|
+
|| !sameSet(end.final, prior.final) || !sameSet(end.block, prior.block)
|
|
681
|
+
|| !sameSet(end.attributeUses, prior.attributeUses) || !sameWildcard(end, prior))
|
|
682
|
+
return fail('additive-target-properties', 'The restriction representative changed an effective target property');
|
|
683
|
+
if (middle.targetNamespace !== prior.targetNamespace || middle.abstract || middle.final.length || middle.block.length
|
|
684
|
+
|| !sameSet(middle.attributeUses, prior.attributeUses) || !sameWildcard(middle, prior))
|
|
685
|
+
return fail('additive-middle-properties', 'The extension representative changed the selected middle properties');
|
|
686
|
+
charge(128);
|
|
687
|
+
const result = Object.freeze({ kind: 'checked-additive-simple-properties', actualContextId: actual.contextId,
|
|
688
|
+
contextId: candidate.contextId, target, intermediate, representative, scalarObligations: original.scalarObligations,
|
|
689
|
+
typeDependencies: typeDependencies.snapshot(), datedInterpretation: 'unassessed' });
|
|
690
|
+
additiveProperties.set(result, Object.freeze({ actual, context: candidate }));
|
|
691
|
+
return result;
|
|
692
|
+
}
|
|
693
|
+
catch (error) {
|
|
694
|
+
if (error instanceof CorrespondenceAbort)
|
|
695
|
+
return error.result;
|
|
696
|
+
if (error instanceof RelationProblem)
|
|
697
|
+
return Object.freeze({ kind: 'unresolved', rule: error.result.rule, component: error.result.component, message: error.message });
|
|
698
|
+
throw error;
|
|
699
|
+
}
|
|
700
|
+
});
|
|
701
|
+
}
|
|
@@ -68,4 +68,3 @@ export type RawComplexTypeProperties = Readonly<{
|
|
|
68
68
|
/** Runtime data-shape boundary, shared by preparation and property consumers. */
|
|
69
69
|
export declare function assertRawComplexTypeShape(value: unknown, budget: SemanticBudget): asserts value is RawComplexTypeProperties;
|
|
70
70
|
export {};
|
|
71
|
-
//# sourceMappingURL=re01TypeProperties.d.ts.map
|
|
@@ -20,4 +20,3 @@ export type RawTypeValidation = Readonly<{
|
|
|
20
20
|
}> | ResourceLimitFailure;
|
|
21
21
|
/** The context has already copied data and rejected accessors. No caller labels authenticate actual mapping. */
|
|
22
22
|
export declare function validateRawComplexTypeProperties(context: SemanticContext, typeId: NodeId, correspondence?: CorrespondenceReceipt): RawTypeValidation;
|
|
23
|
-
//# sourceMappingURL=re01TypePropertyValidation.d.ts.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CanonicalGraph, GraphNode, NodeId, Reference } from "./canonicalGraph.js";
|
|
2
2
|
import type { SyntaxSource } from "../loader/orderedSyntax.js";
|
|
3
|
+
import type { StandardSchemaLibrary, StandardSchemaElementDeclaration } from './standardSchemaComponents.js';
|
|
3
4
|
export declare class SemanticError extends Error {
|
|
4
5
|
readonly category: "invalid-schema" | "unsupported-capability" | "incompatible-artifact" | "resource-limit";
|
|
5
6
|
readonly component?: NodeId | undefined;
|
|
@@ -11,6 +12,7 @@ export type SemanticLimits = {
|
|
|
11
12
|
maxNodes?: number;
|
|
12
13
|
maxSteps?: number;
|
|
13
14
|
requestBudget?: import("./semanticBudget.js").SemanticBudget;
|
|
15
|
+
standardLibraries?: readonly StandardSchemaLibrary[];
|
|
14
16
|
};
|
|
15
17
|
export declare function semanticBudget(limits?: SemanticLimits): {
|
|
16
18
|
maxNodes: number;
|
|
@@ -32,7 +34,8 @@ export type ResolvedGraph = Readonly<{
|
|
|
32
34
|
steps: number;
|
|
33
35
|
}>;
|
|
34
36
|
}>;
|
|
37
|
+
/** Native acquired dependencies only; copied graph reports cannot recreate this association. */
|
|
38
|
+
export declare function standardSchemaLibrariesForResolved(resolved: ResolvedGraph): readonly StandardSchemaLibrary[] | undefined;
|
|
35
39
|
/** Resolve against a node index, never against generated names or an asserted stored target. */
|
|
36
|
-
export declare function referenceTarget(reference: Reference, nodes: ReadonlyMap<NodeId, GraphNode>, owner: GraphNode): NodeId | undefined;
|
|
40
|
+
export declare function referenceTarget(reference: Reference, nodes: ReadonlyMap<NodeId, GraphNode>, owner: GraphNode, standards?: ReadonlyMap<NodeId, StandardSchemaElementDeclaration>): NodeId | undefined;
|
|
37
41
|
export declare function resolveCanonicalGraph(graph: CanonicalGraph, limits?: SemanticLimits): ResolvedGraph;
|
|
38
|
-
//# sourceMappingURL=resolveCanonicalGraph.d.ts.map
|
|
@@ -3,6 +3,8 @@ import { deepFreeze, DEFAULT_GRAPH_NODES, globalId, isBuiltinType } from "./cano
|
|
|
3
3
|
import { positiveLimit } from "./catalogErrors.js";
|
|
4
4
|
import { referenceSlots, containedNodes } from "./graphTraversal.js";
|
|
5
5
|
import { syntaxAttribute, XSD_NAMESPACE } from "../loader/orderedSyntax.js";
|
|
6
|
+
import { normalizeWhitespace } from '../util/xmlWhitespace.js';
|
|
7
|
+
import { standardSchemaElement, inspectStandardSchemaElement } from './standardSchemaComponents.js';
|
|
6
8
|
export class SemanticError extends Error {
|
|
7
9
|
category;
|
|
8
10
|
component;
|
|
@@ -17,6 +19,12 @@ export class SemanticError extends Error {
|
|
|
17
19
|
this.name = "SemanticError";
|
|
18
20
|
}
|
|
19
21
|
}
|
|
22
|
+
/** Internal missing-symbol detail; source resolution must distinguish absent import resources from disproved declarations. */
|
|
23
|
+
class MissingReferenceError extends SemanticError {
|
|
24
|
+
constructor(reference, owner, id) {
|
|
25
|
+
super('invalid-schema', `Missing reference target ${id}`, owner.id, reference.kind === 'symbol' ? reference.lexical.context.source : owner.context.source);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
20
28
|
export function semanticBudget(limits = {}) {
|
|
21
29
|
const maxNodes = positiveLimit(limits.maxNodes, DEFAULT_GRAPH_NODES, "maxNodes");
|
|
22
30
|
const maxSteps = positiveLimit(limits.maxSteps, 1_000_000, "maxSteps");
|
|
@@ -47,8 +55,13 @@ export function countSemanticData(value, budget, node) {
|
|
|
47
55
|
}
|
|
48
56
|
}
|
|
49
57
|
}
|
|
58
|
+
const resolvedStandards = new WeakMap();
|
|
59
|
+
/** Native acquired dependencies only; copied graph reports cannot recreate this association. */
|
|
60
|
+
export function standardSchemaLibrariesForResolved(resolved) {
|
|
61
|
+
return resolvedStandards.get(resolved);
|
|
62
|
+
}
|
|
50
63
|
/** Resolve against a node index, never against generated names or an asserted stored target. */
|
|
51
|
-
export function referenceTarget(reference, nodes, owner) {
|
|
64
|
+
export function referenceTarget(reference, nodes, owner, standards) {
|
|
52
65
|
if (reference.kind === "builtin") {
|
|
53
66
|
if (reference.name.namespace !== XSD_NAMESPACE || !isBuiltinType(reference.name.local))
|
|
54
67
|
throw new SemanticError("invalid-schema", "Unknown builtin type", owner.id, owner.context.source);
|
|
@@ -56,8 +69,16 @@ export function referenceTarget(reference, nodes, owner) {
|
|
|
56
69
|
}
|
|
57
70
|
const id = reference.kind === "symbol" ? globalId(reference.role, reference.name) : reference.target;
|
|
58
71
|
const target = nodes.get(id);
|
|
59
|
-
if (!target)
|
|
60
|
-
|
|
72
|
+
if (!target) {
|
|
73
|
+
const supplied = standards?.get(id);
|
|
74
|
+
if (!supplied)
|
|
75
|
+
throw new MissingReferenceError(reference, owner, id);
|
|
76
|
+
inspectStandardSchemaElement(supplied);
|
|
77
|
+
if (reference.kind !== 'symbol' || reference.role !== 'element' || supplied.id !== id
|
|
78
|
+
|| reference.target !== undefined && reference.target !== id)
|
|
79
|
+
throw new SemanticError('invalid-schema', 'Standard declaration reference role/identity mismatch', owner.id, owner.context.source);
|
|
80
|
+
return id;
|
|
81
|
+
}
|
|
61
82
|
if (reference.kind === "symbol" && (target.identity.kind !== "global" || target.identity.role !== reference.role || (reference.target !== undefined && reference.target !== id))) {
|
|
62
83
|
throw new SemanticError("invalid-schema", `Reference role/identity mismatch ${id}`, owner.id, reference.lexical.context.source);
|
|
63
84
|
}
|
|
@@ -78,9 +99,23 @@ export function resolveCanonicalGraph(graph, limits = {}) {
|
|
|
78
99
|
const nodes = new Map(graph.nodes.map(n => [n.id, n]));
|
|
79
100
|
if (nodes.size !== graph.nodes.length)
|
|
80
101
|
throw new SemanticError("invalid-schema", "Duplicate graph identities");
|
|
102
|
+
const standards = new Map(), selectedLibraries = [];
|
|
103
|
+
for (const library of limits.standardLibraries ?? []) {
|
|
104
|
+
budget.step();
|
|
105
|
+
const declaration = standardSchemaElement(library, { namespace: XSD_NAMESPACE, local: 'schema' });
|
|
106
|
+
if (!declaration)
|
|
107
|
+
throw new SemanticError('unsupported-capability', 'Standard library supplies no implemented schema element');
|
|
108
|
+
if (standards.has(declaration.id))
|
|
109
|
+
throw new SemanticError('unsupported-capability', 'Duplicate standard library selection');
|
|
110
|
+
if (nodes.has(declaration.id))
|
|
111
|
+
throw new SemanticError('unsupported-capability', 'Acquired standard declaration conflicts with explicit schema source; select one source authority');
|
|
112
|
+
standards.set(declaration.id, declaration);
|
|
113
|
+
selectedLibraries.push(library);
|
|
114
|
+
}
|
|
81
115
|
// Imports authorize foreign namespaces in the declaring interpretation only.
|
|
82
116
|
// Including/importing documents do not lend their import permissions to a reference.
|
|
83
117
|
const imports = new Map(), unknownImports = new Set();
|
|
118
|
+
const unlocatedImports = new Map();
|
|
84
119
|
const sourceKey = (source) => JSON.stringify([source.uri, source.digest, source.path]);
|
|
85
120
|
const importSyntax = new Map(graph.schemaRetained.filter(r => r.syntax.name.namespace === XSD_NAMESPACE && r.syntax.name.local === "import")
|
|
86
121
|
.map(r => [sourceKey(r.syntax.source), r.syntax]));
|
|
@@ -89,7 +124,7 @@ export function resolveCanonicalGraph(graph, limits = {}) {
|
|
|
89
124
|
if (edge.kind !== "import")
|
|
90
125
|
continue;
|
|
91
126
|
const syntax = importSyntax.get(sourceKey(edge.source));
|
|
92
|
-
const ns = syntax ? syntaxAttribute(syntax, "namespace") ?? "" : edge.to ? interpretation(edge.to).namespace : undefined;
|
|
127
|
+
const ns = syntax ? normalizeWhitespace(syntaxAttribute(syntax, "namespace") ?? "", 'collapse') : edge.to ? interpretation(edge.to).namespace : undefined;
|
|
93
128
|
if (ns === undefined) {
|
|
94
129
|
unknownImports.add(edge.from);
|
|
95
130
|
continue;
|
|
@@ -99,13 +134,42 @@ export function resolveCanonicalGraph(graph, limits = {}) {
|
|
|
99
134
|
const values = imports.get(edge.from) ?? new Set();
|
|
100
135
|
values.add(ns);
|
|
101
136
|
imports.set(edge.from, values);
|
|
137
|
+
if (!edge.to && syntax && syntaxAttribute(syntax, 'schemaLocation') === undefined) {
|
|
138
|
+
const pending = unlocatedImports.get(edge.from) ?? new Set();
|
|
139
|
+
pending.add(ns);
|
|
140
|
+
unlocatedImports.set(edge.from, pending);
|
|
141
|
+
}
|
|
102
142
|
}
|
|
103
143
|
const links = [];
|
|
144
|
+
let unresolvedImport;
|
|
104
145
|
for (const node of graph.nodes) {
|
|
105
146
|
budget.step(node);
|
|
106
147
|
for (const slot of referenceSlots(node)) {
|
|
107
148
|
budget.step(node);
|
|
108
|
-
const ref = slot.reference
|
|
149
|
+
const ref = slot.reference;
|
|
150
|
+
let target;
|
|
151
|
+
let unavailable;
|
|
152
|
+
try {
|
|
153
|
+
target = referenceTarget(ref, nodes, node, standards);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
if (error instanceof MissingReferenceError && ref.kind === 'symbol' && node.kind !== 'wsdl') {
|
|
157
|
+
for (const origin of graph.origins[node.id] ?? []) {
|
|
158
|
+
budget.step(node);
|
|
159
|
+
if (ref.name.namespace !== origin.context.effectiveNamespace && unlocatedImports.get(origin.interpretation)?.has(ref.name.namespace)) {
|
|
160
|
+
unavailable = new SemanticError('unsupported-capability', `Missing declaration in namespace ${ref.name.namespace}; supply the locationless import dependency explicitly`, node.id, ref.lexical.context.source);
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (!unavailable)
|
|
166
|
+
throw error;
|
|
167
|
+
}
|
|
168
|
+
// @why P1-D01: missing dependency evidence must not mask independent actual reference failures.
|
|
169
|
+
if (unavailable) {
|
|
170
|
+
unresolvedImport ??= unavailable;
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
109
173
|
if (ref.kind === "symbol" && node.kind !== "wsdl") {
|
|
110
174
|
for (const origin of graph.origins[node.id] ?? []) {
|
|
111
175
|
budget.step(node);
|
|
@@ -121,6 +185,8 @@ export function resolveCanonicalGraph(graph, limits = {}) {
|
|
|
121
185
|
links.push({ owner: node.id, path: slot.path, reference: ref, ...(target ? { target } : {}) });
|
|
122
186
|
}
|
|
123
187
|
}
|
|
188
|
+
if (unresolvedImport)
|
|
189
|
+
throw unresolvedImport;
|
|
124
190
|
// Only expansion/base edges enter this DAG. Element -> type and particle -> element
|
|
125
191
|
// are deliberately excluded: crossing an element admits complete recursive values.
|
|
126
192
|
const forbidden = (n) => {
|
|
@@ -130,7 +196,9 @@ export function resolveCanonicalGraph(graph, limits = {}) {
|
|
|
130
196
|
const expansion = n.kind === "simpleType" || n.kind === "complexType" || n.kind === "attributeGroupUse" ||
|
|
131
197
|
(n.kind === "particle" && n.term.kind === "group") || (n.kind === "element" && slot.path === "substitutionGroup");
|
|
132
198
|
if (expansion) {
|
|
133
|
-
const target = referenceTarget(slot.reference, nodes, n);
|
|
199
|
+
const target = referenceTarget(slot.reference, nodes, n, standards);
|
|
200
|
+
if (target && standards.has(target))
|
|
201
|
+
throw new SemanticError('unsupported-capability', 'Substitution affiliation to an acquired standard element is not implemented', n.id, n.context.source);
|
|
134
202
|
if (target)
|
|
135
203
|
result.push(target);
|
|
136
204
|
}
|
|
@@ -166,5 +234,7 @@ export function resolveCanonicalGraph(graph, limits = {}) {
|
|
|
166
234
|
}
|
|
167
235
|
}
|
|
168
236
|
const result = { graph, links, metrics: { steps: budget.steps } };
|
|
169
|
-
|
|
237
|
+
const frozen = limits.requestBudget ? limits.requestBudget.freeze(result) : deepFreeze(result);
|
|
238
|
+
resolvedStandards.set(frozen, Object.freeze(selectedLibraries));
|
|
239
|
+
return frozen;
|
|
170
240
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { SyntaxElement } from '../loader/orderedSyntax.js';
|
|
2
|
+
import type { RpcMessageRoot } from './directOperation.js';
|
|
3
|
+
import type { SemanticBudget } from './semanticBudget.js';
|
|
4
|
+
type Fail = (kind: 'value-invalid' | 'unsupported' | 'mismatch', rule: string, node?: SyntaxElement) => never;
|
|
5
|
+
type Control = {
|
|
6
|
+
budget: SemanticBudget;
|
|
7
|
+
check(): void;
|
|
8
|
+
fail: Fail;
|
|
9
|
+
};
|
|
10
|
+
/** Build canonical inline string parameters in source declaration order.
|
|
11
|
+
* @param root Source-owned typed parameters.
|
|
12
|
+
* @param value Data-only application object.
|
|
13
|
+
* @param control Shared invocation ownership and work budget.
|
|
14
|
+
* @returns A generated RPC wrapper and preserved string values.
|
|
15
|
+
* @throws Through the supplied failure callback for invalid application values.
|
|
16
|
+
*/
|
|
17
|
+
export declare function expandRpcStrings(root: RpcMessageRoot, value: unknown, control: Control): {
|
|
18
|
+
payload: SyntaxElement;
|
|
19
|
+
value: Readonly<Record<string, string>>;
|
|
20
|
+
};
|
|
21
|
+
/** Decode only the selected inline/local-reference string profile within one retained Body.
|
|
22
|
+
* @param root Source-owned typed parameters and body namespace.
|
|
23
|
+
* @param payload Observed RPC wrapper or observed SOAP Body.
|
|
24
|
+
* @param output Whether SOAP response local names are insignificant.
|
|
25
|
+
* @param control Shared native invocation budget and explicit failure callback.
|
|
26
|
+
* @returns Values keyed by the original WSDL part names.
|
|
27
|
+
* @throws Through the failure callback for malformed, ambiguous or unsupported encoded values.
|
|
28
|
+
*/
|
|
29
|
+
export declare function readRpcStrings(root: RpcMessageRoot, payload: SyntaxElement, output: boolean, control: Control): Readonly<Record<string, string>>;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/** Bounded SOAP 1.1 RPC string serialization, without a second schema engine.
|
|
2
|
+
* @since 1.1.9
|
|
3
|
+
* @see https://www.w3.org/TR/2000/NOTE-SOAP-20000508/ Sections 5 and 7.
|
|
4
|
+
*/
|
|
5
|
+
import { isXmlNCName, resolveLexicalQName, syntaxAttribute, syntaxElements, XSD_NAMESPACE, XML_NAMESPACE } from '../loader/orderedSyntax.js';
|
|
6
|
+
import { isXmlCharacters } from './directStructurePlan.js';
|
|
7
|
+
import { directDataOwnership } from './directExecutionPolicy.js';
|
|
8
|
+
const SOAP = 'http://schemas.xmlsoap.org/soap/envelope/';
|
|
9
|
+
const ENC = 'http://schemas.xmlsoap.org/soap/encoding/';
|
|
10
|
+
const XSI = 'http://www.w3.org/2001/XMLSchema-instance';
|
|
11
|
+
/** Build canonical inline string parameters in source declaration order.
|
|
12
|
+
* @param root Source-owned typed parameters.
|
|
13
|
+
* @param value Data-only application object.
|
|
14
|
+
* @param control Shared invocation ownership and work budget.
|
|
15
|
+
* @returns A generated RPC wrapper and preserved string values.
|
|
16
|
+
* @throws Through the supplied failure callback for invalid application values.
|
|
17
|
+
*/
|
|
18
|
+
export function expandRpcStrings(root, value, control) {
|
|
19
|
+
const { budget, check, fail } = control;
|
|
20
|
+
let owned;
|
|
21
|
+
try {
|
|
22
|
+
owned = directDataOwnership(budget).snapshot(value, check);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
if (error instanceof TypeError)
|
|
26
|
+
return fail('value-invalid', 'rpc-data-object-required');
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
if (!owned || typeof owned !== 'object' || Array.isArray(owned))
|
|
30
|
+
return fail('value-invalid', 'rpc-data-object-required');
|
|
31
|
+
const object = owned;
|
|
32
|
+
const keys = Object.keys(object), names = new Set(root.parts.map(part => { check(); return part.name; }));
|
|
33
|
+
budget.chargeWork(64 + keys.length * 32 + names.size * 32);
|
|
34
|
+
if (keys.length !== root.parts.length || keys.some(key => { check(); return !names.has(key); }))
|
|
35
|
+
return fail('value-invalid', 'rpc-required-string-parts');
|
|
36
|
+
const namespaces = { xml: XML_NAMESPACE, '': '', rpc: root.bodyNamespace, xsi: XSI, xsd: XSD_NAMESPACE, enc: ENC, soap: SOAP };
|
|
37
|
+
const attribute = (namespace, local, value) => ({ name: { namespace, local }, lexicalName: local, value });
|
|
38
|
+
const result = Object.create(null);
|
|
39
|
+
const children = root.parts.map(part => {
|
|
40
|
+
check();
|
|
41
|
+
const text = object[part.name];
|
|
42
|
+
if (typeof text !== 'string')
|
|
43
|
+
return fail('value-invalid', 'rpc-required-string-parts');
|
|
44
|
+
budget.chargeWork(64 + text.length * 8);
|
|
45
|
+
if (!isXmlCharacters(text))
|
|
46
|
+
return fail('value-invalid', 'rpc-string-xml-characters');
|
|
47
|
+
result[part.name] = text;
|
|
48
|
+
return { kind: 'element', name: { namespace: '', local: part.name }, lexicalName: part.name, namespaces, baseUri: root.source.uri,
|
|
49
|
+
attributes: [attribute(XSI, 'type', 'xsd:string')], children: [{ kind: 'text', value: text, source: root.source }], source: root.source };
|
|
50
|
+
});
|
|
51
|
+
return { payload: { kind: 'element', name: root.wrapper, lexicalName: 'rpc:' + root.wrapper.local, namespaces,
|
|
52
|
+
baseUri: root.source.uri, attributes: [attribute(SOAP, 'encodingStyle', ENC)], children, source: root.source }, value: result };
|
|
53
|
+
}
|
|
54
|
+
/** Decode only the selected inline/local-reference string profile within one retained Body.
|
|
55
|
+
* @param root Source-owned typed parameters and body namespace.
|
|
56
|
+
* @param payload Observed RPC wrapper or observed SOAP Body.
|
|
57
|
+
* @param output Whether SOAP response local names are insignificant.
|
|
58
|
+
* @param control Shared native invocation budget and explicit failure callback.
|
|
59
|
+
* @returns Values keyed by the original WSDL part names.
|
|
60
|
+
* @throws Through the failure callback for malformed, ambiguous or unsupported encoded values.
|
|
61
|
+
*/
|
|
62
|
+
export function readRpcStrings(root, payload, output, control) {
|
|
63
|
+
const { budget, check, fail } = control;
|
|
64
|
+
const elements = (node) => {
|
|
65
|
+
check();
|
|
66
|
+
budget.chargeWork(32 + node.children.length * 8 + node.attributes.length * 16);
|
|
67
|
+
if (node.children.some(c => c.kind === 'text' && /[^\t\r\n ]/.test(c.value)))
|
|
68
|
+
return fail('mismatch', 'rpc-unexpected-text', node);
|
|
69
|
+
return syntaxElements(node);
|
|
70
|
+
};
|
|
71
|
+
const encoding = (node) => {
|
|
72
|
+
const declared = syntaxAttribute(node, 'encodingStyle', SOAP);
|
|
73
|
+
if (declared !== undefined && declared.trim() !== ENC)
|
|
74
|
+
return fail('unsupported', 'rpc-encoding-style', node);
|
|
75
|
+
};
|
|
76
|
+
const rootMarker = (node) => {
|
|
77
|
+
const marker = syntaxAttribute(node, 'root', ENC);
|
|
78
|
+
if (marker !== undefined && marker !== '0' && marker !== '1')
|
|
79
|
+
return fail('mismatch', 'rpc-root-marker', node);
|
|
80
|
+
return marker;
|
|
81
|
+
};
|
|
82
|
+
const attrs = (node, wrapper = false) => {
|
|
83
|
+
encoding(node);
|
|
84
|
+
rootMarker(node);
|
|
85
|
+
for (const attr of node.attributes) {
|
|
86
|
+
check();
|
|
87
|
+
if (attr.name.namespace === SOAP && attr.name.local === 'encodingStyle' || attr.name.namespace === ENC && attr.name.local === 'root'
|
|
88
|
+
|| attr.name.namespace === '' && attr.name.local === 'id' || !wrapper && (attr.name.namespace === '' && attr.name.local === 'href'
|
|
89
|
+
|| attr.name.namespace === XSI && attr.name.local === 'type'))
|
|
90
|
+
continue;
|
|
91
|
+
return fail('unsupported', 'rpc-encoded-attribute', node);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const body = payload.name.namespace === SOAP && payload.name.local === 'Body' ? payload : undefined;
|
|
95
|
+
if (body) {
|
|
96
|
+
encoding(body);
|
|
97
|
+
if (body.attributes.some(a => a.name.namespace !== SOAP || a.name.local !== 'encodingStyle'))
|
|
98
|
+
return fail('unsupported', 'rpc-body-attribute', body);
|
|
99
|
+
}
|
|
100
|
+
const top = body ? elements(body) : [payload];
|
|
101
|
+
const ids = new Map();
|
|
102
|
+
const pending = [...top];
|
|
103
|
+
while (pending.length) {
|
|
104
|
+
check();
|
|
105
|
+
const node = pending.pop();
|
|
106
|
+
budget.chargeWork(32 + node.children.length * 8);
|
|
107
|
+
const id = syntaxAttribute(node, 'id');
|
|
108
|
+
if (id !== undefined) {
|
|
109
|
+
if (!isXmlNCName(id) || ids.has(id))
|
|
110
|
+
return fail('mismatch', 'rpc-duplicate-or-invalid-id', node);
|
|
111
|
+
ids.set(id, node);
|
|
112
|
+
}
|
|
113
|
+
pending.push(...syntaxElements(node));
|
|
114
|
+
}
|
|
115
|
+
const wrappers = top.filter(node => {
|
|
116
|
+
check();
|
|
117
|
+
return node.name.namespace === root.bodyNamespace && rootMarker(node) !== '0'
|
|
118
|
+
&& syntaxAttribute(node, 'href') === undefined && syntaxAttribute(node, 'type', XSI) === undefined
|
|
119
|
+
&& (!output ? node.name.local === root.wrapper.local : true);
|
|
120
|
+
});
|
|
121
|
+
if (wrappers.length !== 1)
|
|
122
|
+
return fail('mismatch', 'rpc-unambiguous-response-root', payload);
|
|
123
|
+
const wrapper = wrappers[0];
|
|
124
|
+
attrs(wrapper, true);
|
|
125
|
+
const parameters = elements(wrapper);
|
|
126
|
+
if (parameters.length !== root.parts.length)
|
|
127
|
+
return fail('mismatch', 'rpc-result-accessor-count', wrapper);
|
|
128
|
+
const visited = new Set([wrapper]);
|
|
129
|
+
const stringValue = (initial) => {
|
|
130
|
+
const chain = new Set();
|
|
131
|
+
let node = initial, inheritedType = true;
|
|
132
|
+
// @constraints Flat local-reference chains must not consume the JavaScript call stack.
|
|
133
|
+
for (;;) {
|
|
134
|
+
check();
|
|
135
|
+
budget.chargeWork(32 + node.children.length * 8);
|
|
136
|
+
attrs(node);
|
|
137
|
+
if (chain.has(node))
|
|
138
|
+
return fail('unsupported', 'rpc-cyclic-reference', node);
|
|
139
|
+
chain.add(node);
|
|
140
|
+
visited.add(node);
|
|
141
|
+
const explicit = syntaxAttribute(node, 'type', XSI);
|
|
142
|
+
const implicit = node.name.namespace === ENC && node.name.local === 'string';
|
|
143
|
+
if (node.name.namespace === ENC && !implicit)
|
|
144
|
+
return fail('unsupported', 'rpc-string-type', node);
|
|
145
|
+
if (explicit !== undefined) {
|
|
146
|
+
let type;
|
|
147
|
+
try {
|
|
148
|
+
type = resolveLexicalQName(explicit, node);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return fail('unsupported', 'rpc-string-type', node);
|
|
152
|
+
}
|
|
153
|
+
if (type.local !== 'string' || type.namespace !== XSD_NAMESPACE && type.namespace !== ENC)
|
|
154
|
+
return fail('unsupported', 'rpc-string-type', node);
|
|
155
|
+
}
|
|
156
|
+
else if (!inheritedType && !implicit)
|
|
157
|
+
return fail('unsupported', 'rpc-string-type-required', node);
|
|
158
|
+
const href = syntaxAttribute(node, 'href');
|
|
159
|
+
if (href !== undefined) {
|
|
160
|
+
if (syntaxElements(node).length || node.children.some(c => c.kind === 'text' && /[^\t\r\n ]/.test(c.value)))
|
|
161
|
+
return fail('mismatch', 'rpc-reference-content', node);
|
|
162
|
+
if (!href.startsWith('#') || !isXmlNCName(href.slice(1)))
|
|
163
|
+
return fail('unsupported', 'rpc-local-reference-required', node);
|
|
164
|
+
const target = ids.get(href.slice(1));
|
|
165
|
+
if (!target)
|
|
166
|
+
return fail('mismatch', 'rpc-dangling-reference', node);
|
|
167
|
+
node = target;
|
|
168
|
+
inheritedType = false;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
if (syntaxElements(node).length)
|
|
172
|
+
return fail('unsupported', 'rpc-string-compound-value', node);
|
|
173
|
+
const value = node.children.map(c => c.kind === 'text' ? c.value : '').join('');
|
|
174
|
+
budget.chargeWork(32 + value.length * 8);
|
|
175
|
+
return value;
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
const result = Object.create(null);
|
|
179
|
+
root.parts.forEach((part, index) => {
|
|
180
|
+
check();
|
|
181
|
+
const accessor = parameters[index];
|
|
182
|
+
if (accessor.name.namespace !== '' || !output && accessor.name.local !== part.name)
|
|
183
|
+
return fail('mismatch', 'rpc-parameter-name-order', accessor);
|
|
184
|
+
if (rootMarker(accessor) !== undefined)
|
|
185
|
+
return fail('unsupported', 'rpc-accessor-root-marker', accessor);
|
|
186
|
+
result[part.name] = stringValue(accessor);
|
|
187
|
+
});
|
|
188
|
+
for (const independent of top) {
|
|
189
|
+
check();
|
|
190
|
+
if (independent === wrapper)
|
|
191
|
+
continue;
|
|
192
|
+
if (!visited.has(independent) || rootMarker(independent) === '1')
|
|
193
|
+
return fail('mismatch', 'rpc-unexpected-body-content', independent);
|
|
194
|
+
}
|
|
195
|
+
return result;
|
|
196
|
+
}
|