@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,377 @@
|
|
|
1
|
+
import { directDataOwnership, directLimit } from './directExecutionPolicy.js';
|
|
2
|
+
/** Internal, buffered, bare-root XML codec. No SOAP envelope or dispatch. */
|
|
3
|
+
import { checkSemanticBudget } from './semanticBudget.js';
|
|
4
|
+
import { DataOwnershipLimitError } from './dataOwnership.js';
|
|
5
|
+
import { types } from 'node:util';
|
|
6
|
+
import { inspectDirectOperation } from './directOperation.js';
|
|
7
|
+
import { inspectDirectValueMapping, expandDirectValue, assessDirectScalars, inspectComponentValueMapping, expandProjectionValue, assessProjectionScalars } from './directValues.js';
|
|
8
|
+
import { matchDirectOperation, matchDirectProjection } from './directStructure.js';
|
|
9
|
+
import { parseOrderedSyntax, SchemaLoadingError, XML_NAMESPACE } from '../loader/orderedSyntax.js';
|
|
10
|
+
import { isXmlNamespaceBinding } from './directStructurePlan.js';
|
|
11
|
+
export const DIRECT_XML_LIMITS = Object.freeze({ maxBytes: 1024 * 1024, maxDepth: 256, maxNodes: 100_000, maxText: 1024 * 1024 });
|
|
12
|
+
const componentObservations = new WeakSet();
|
|
13
|
+
class Stop extends Error {
|
|
14
|
+
kind;
|
|
15
|
+
rule;
|
|
16
|
+
source;
|
|
17
|
+
constructor(kind, rule, source) {
|
|
18
|
+
super(rule);
|
|
19
|
+
this.kind = kind;
|
|
20
|
+
this.rule = rule;
|
|
21
|
+
this.source = source;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const directProfile = Object.freeze({ version: 'direct-values-v1', basis: 'native-direct-premises-v1',
|
|
25
|
+
correspondence: 'dated-XSD-2004-direct-v1', rule: 'direct-codec-version' });
|
|
26
|
+
const componentProfile = Object.freeze({ version: 'component-values-v1', basis: 'native-component-premises-v1',
|
|
27
|
+
correspondence: 'dated-XSD-2004-components-v1', rule: 'component-codec-version' });
|
|
28
|
+
function runMapping(contract, supplied, options, profile, inspect, work) {
|
|
29
|
+
// Identity before all property reads, including version checks.
|
|
30
|
+
const mapping = inspect(supplied, contract);
|
|
31
|
+
const { budget } = inspectDirectOperation(contract).context;
|
|
32
|
+
const check = () => { checkSemanticBudget(budget); if (options.signal?.aborted)
|
|
33
|
+
throw new Stop('cancelled', 'cooperative-cancellation'); };
|
|
34
|
+
try {
|
|
35
|
+
const result = budget.guard(() => {
|
|
36
|
+
check();
|
|
37
|
+
if (mapping.version !== profile.version || mapping.contextId !== contract.contextId
|
|
38
|
+
|| contract.basis !== profile.basis || contract.correspondence !== profile.correspondence
|
|
39
|
+
|| contract.binding.version !== '1.1' || contract.binding.style !== 'document' || contract.binding.use !== 'literal'
|
|
40
|
+
|| contract.binding.transport !== 'http://schemas.xmlsoap.org/soap/http')
|
|
41
|
+
throw new Stop('unsupported', profile.rule);
|
|
42
|
+
const direction = mapping.direction;
|
|
43
|
+
const root = direction.kind === 'fault' ? contract.faults.find(f => {
|
|
44
|
+
check();
|
|
45
|
+
return budget.compareText(f.name, direction.name) === 0;
|
|
46
|
+
})?.root : contract[direction.kind];
|
|
47
|
+
if (mapping.root !== root)
|
|
48
|
+
throw new TypeError('Incompatible direct codec root');
|
|
49
|
+
const configured = options.limits === undefined ? {} : directDataOwnership(budget).snapshot(options.limits, check);
|
|
50
|
+
if (!configured || typeof configured !== 'object' || Array.isArray(configured))
|
|
51
|
+
throw new TypeError('Data-only XML limits required');
|
|
52
|
+
for (const key of Reflect.ownKeys(configured)) {
|
|
53
|
+
if (typeof key !== 'string' || !['maxBytes', 'maxDepth', 'maxNodes', 'maxText'].includes(key))
|
|
54
|
+
throw new TypeError('Unknown XML limit');
|
|
55
|
+
}
|
|
56
|
+
const limits = {
|
|
57
|
+
maxBytes: directLimit(budget, DIRECT_XML_LIMITS.maxBytes), maxDepth: directLimit(budget, DIRECT_XML_LIMITS.maxDepth),
|
|
58
|
+
maxNodes: directLimit(budget, DIRECT_XML_LIMITS.maxNodes), maxText: directLimit(budget, DIRECT_XML_LIMITS.maxText),
|
|
59
|
+
};
|
|
60
|
+
for (const key of ['maxBytes', 'maxDepth', 'maxNodes', 'maxText']) {
|
|
61
|
+
const value = configured[key];
|
|
62
|
+
if (value !== undefined) {
|
|
63
|
+
if (!Number.isSafeInteger(value) || value < 1)
|
|
64
|
+
throw new RangeError('XML limits must be positive safe integers');
|
|
65
|
+
limits[key] = value;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const result = work(mapping, { budget, limits, check });
|
|
69
|
+
// Native failures remain terminal even though publication has no synthetic work price.
|
|
70
|
+
check();
|
|
71
|
+
return Object.freeze({ ...result, usage: Object.freeze({ ...budget.usage() }) });
|
|
72
|
+
});
|
|
73
|
+
if (budget.exhausted())
|
|
74
|
+
return { kind: 'resource-limit', rule: 'request-budget', usage: budget.usage() };
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (budget.exhausted())
|
|
79
|
+
return { kind: 'resource-limit', rule: 'request-budget', usage: budget.usage() };
|
|
80
|
+
if (error instanceof DataOwnershipLimitError)
|
|
81
|
+
return { kind: 'resource-limit', rule: error.message, usage: budget.usage() };
|
|
82
|
+
if (error instanceof Stop)
|
|
83
|
+
return Object.freeze({ kind: error.kind, rule: error.rule,
|
|
84
|
+
...(error.source ? { source: error.source, payloadPath: error.source.path } : {}), usage: Object.freeze({ ...budget.usage() }) });
|
|
85
|
+
if (error instanceof SchemaLoadingError)
|
|
86
|
+
return Object.freeze({ kind: error.category === 'invalid-schema' ? 'xml-invalid'
|
|
87
|
+
: error.category === 'resource-limit' ? 'resource-limit' : 'unsupported', rule: error.message, source: error.source,
|
|
88
|
+
usage: Object.freeze({ ...budget.usage() }) });
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function run(contract, mapping, options, work) {
|
|
93
|
+
return runMapping(contract, mapping, options, directProfile, inspectDirectValueMapping, work);
|
|
94
|
+
}
|
|
95
|
+
function runComponent(contract, mapping, options, work) {
|
|
96
|
+
return runMapping(contract, mapping, options, componentProfile, (value, owner) => inspectComponentValueMapping(value, owner).mapping, work);
|
|
97
|
+
}
|
|
98
|
+
/** Serialize only native inverse output; source names and values have already passed their native owners. */
|
|
99
|
+
function emitObservedXml(payload, { budget, limits, check }) {
|
|
100
|
+
const pieces = [];
|
|
101
|
+
let byteLength = 0, nodes = 0, textUnits = 0, nextPrefix = 0;
|
|
102
|
+
const prefixes = new Map();
|
|
103
|
+
const append = (text) => {
|
|
104
|
+
check();
|
|
105
|
+
const size = Buffer.byteLength(text, 'utf8');
|
|
106
|
+
if (size > limits.maxBytes - byteLength)
|
|
107
|
+
throw new Stop('resource-limit', 'XML byte limit');
|
|
108
|
+
byteLength += size;
|
|
109
|
+
pieces.push(text);
|
|
110
|
+
};
|
|
111
|
+
const escape = (text, attribute = false) => {
|
|
112
|
+
check();
|
|
113
|
+
return text.replace(/[&<>\r"\t\n]/g, c => c === '&' ? '&' : c === '<' ? '<' : c === '>' ? '>'
|
|
114
|
+
: c === '\r' ? ' ' : attribute && c === '"' ? '"' : attribute && c === '\t' ? '	'
|
|
115
|
+
: attribute && c === '\n' ? ' ' : c);
|
|
116
|
+
};
|
|
117
|
+
const prefixFor = (namespace) => {
|
|
118
|
+
if (!namespace)
|
|
119
|
+
return '';
|
|
120
|
+
if (namespace === 'http://www.w3.org/2000/xmlns/')
|
|
121
|
+
throw new Stop('unsupported', 'namespace-declaration-as-data');
|
|
122
|
+
let prefix = namespace === XML_NAMESPACE ? 'xml' : prefixes.get(namespace);
|
|
123
|
+
if (namespace && prefix === undefined) {
|
|
124
|
+
prefix = `n${nextPrefix++}`;
|
|
125
|
+
prefixes.set(namespace, prefix);
|
|
126
|
+
}
|
|
127
|
+
return prefix;
|
|
128
|
+
};
|
|
129
|
+
const tasks = [{ kind: 'element', node: payload, depth: 1 }];
|
|
130
|
+
while (tasks.length) {
|
|
131
|
+
check();
|
|
132
|
+
const task = tasks.pop();
|
|
133
|
+
if (task.kind === 'close') {
|
|
134
|
+
append(`</${task.name}>`);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
budget.reserveNodes(1);
|
|
138
|
+
if (task.kind === 'text') {
|
|
139
|
+
if (++nodes > limits.maxNodes || task.value.length > limits.maxText - textUnits)
|
|
140
|
+
throw new Stop('resource-limit', 'XML node/text limit');
|
|
141
|
+
textUnits += task.value.length;
|
|
142
|
+
append(escape(task.value));
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
const { node, depth } = task;
|
|
146
|
+
if (++nodes > limits.maxNodes || depth > limits.maxDepth)
|
|
147
|
+
throw new Stop('resource-limit', 'XML node/depth limit');
|
|
148
|
+
const declarations = new Map();
|
|
149
|
+
const protectedScope = Object.hasOwn(node.namespaces, 'xml');
|
|
150
|
+
const scope = Object.assign(Object.create(null), task.scope ?? { xml: XML_NAMESPACE, '': '' });
|
|
151
|
+
if (protectedScope) {
|
|
152
|
+
for (const prefix of budget.sorted(Object.keys(node.namespaces), (a, b) => budget.compareText(a, b))) {
|
|
153
|
+
check();
|
|
154
|
+
const namespace = node.namespaces[prefix];
|
|
155
|
+
if (!isXmlNamespaceBinding(prefix, namespace))
|
|
156
|
+
throw new Stop('value-invalid', 'namespace-binding', node.source);
|
|
157
|
+
if (prefix !== 'xml' && scope[prefix] !== namespace)
|
|
158
|
+
declarations.set(prefix, namespace);
|
|
159
|
+
scope[prefix] = namespace;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const qualified = (namespace, local, attribute = false) => {
|
|
163
|
+
if (protectedScope) {
|
|
164
|
+
if (!namespace) {
|
|
165
|
+
if (!attribute && scope[''])
|
|
166
|
+
throw new Stop('value-invalid', 'no-namespace-element-default-conflict', node.source);
|
|
167
|
+
return local;
|
|
168
|
+
}
|
|
169
|
+
const prefix = budget.sorted(Object.keys(scope), (a, b) => budget.compareText(a, b))
|
|
170
|
+
.find(prefix => (!attribute || prefix !== '') && scope[prefix] === namespace);
|
|
171
|
+
if (prefix === undefined)
|
|
172
|
+
throw new Stop('value-invalid', attribute ? 'attribute-namespace-prefix-required' : 'element-namespace-prefix-required', node.source);
|
|
173
|
+
return prefix ? `${prefix}:${local}` : local;
|
|
174
|
+
}
|
|
175
|
+
if (!namespace) {
|
|
176
|
+
if (!attribute && scope['']) {
|
|
177
|
+
declarations.set('', '');
|
|
178
|
+
scope[''] = '';
|
|
179
|
+
}
|
|
180
|
+
return local;
|
|
181
|
+
}
|
|
182
|
+
const prefix = prefixFor(namespace);
|
|
183
|
+
let selected = prefix;
|
|
184
|
+
while (scope[selected] !== undefined && scope[selected] !== namespace)
|
|
185
|
+
selected = `n${nextPrefix++}`;
|
|
186
|
+
if (selected && selected !== 'xml') {
|
|
187
|
+
declarations.set(selected, namespace);
|
|
188
|
+
scope[selected] = namespace;
|
|
189
|
+
}
|
|
190
|
+
return selected ? `${selected}:${local}` : local;
|
|
191
|
+
};
|
|
192
|
+
const name = qualified(node.name.namespace, node.name.local), attributes = [];
|
|
193
|
+
for (const attribute of node.attributes) {
|
|
194
|
+
check();
|
|
195
|
+
if (attribute.name.namespace === '' && attribute.name.local === 'xmlns')
|
|
196
|
+
throw new Stop('unsupported', 'namespace-declaration-as-data');
|
|
197
|
+
attributes.push(` ${qualified(attribute.name.namespace, attribute.name.local, true)}="${escape(attribute.value, true)}"`);
|
|
198
|
+
}
|
|
199
|
+
// @why Bind each used prefix at this element; sibling discovery never makes a prefix in scope elsewhere.
|
|
200
|
+
append(`<${name}`);
|
|
201
|
+
for (const [prefix, namespace] of declarations)
|
|
202
|
+
append(` xmlns${prefix ? ':' + prefix : ''}="${escape(namespace, true)}"`);
|
|
203
|
+
for (const attribute of attributes)
|
|
204
|
+
append(attribute);
|
|
205
|
+
append('>');
|
|
206
|
+
tasks.push({ kind: 'close', name });
|
|
207
|
+
for (let i = node.children.length - 1; i >= 0; i--) {
|
|
208
|
+
check();
|
|
209
|
+
const child = node.children[i];
|
|
210
|
+
tasks.push(child.kind === 'element' ? { kind: 'element', node: child, depth: depth + 1, scope } : { kind: 'text', value: child.value });
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Actual output bytes were bounded by append; bytes are caller-owned data, not authority.
|
|
214
|
+
check();
|
|
215
|
+
const bytes = Buffer.from(pieces.join(''), 'utf8');
|
|
216
|
+
check();
|
|
217
|
+
return bytes;
|
|
218
|
+
}
|
|
219
|
+
/** Validate fresh values using the delivered inverse, then emit deterministic UTF-8. */
|
|
220
|
+
export function encodeDirectXml(contract, mapping, application, options = {}) {
|
|
221
|
+
return run(contract, mapping, options, (owned, session) => {
|
|
222
|
+
const { budget, limits } = session;
|
|
223
|
+
const expanded = expandDirectValue(contract, owned, application, { ...options, maxText: Math.min(limits.maxText, limits.maxBytes), maxItems: Math.min(limits.maxNodes, limits.maxBytes) });
|
|
224
|
+
if (expanded.kind !== 'direct-expanded')
|
|
225
|
+
return expanded;
|
|
226
|
+
const bytes = emitObservedXml(expanded.payload, session);
|
|
227
|
+
return Object.freeze({ kind: 'direct-encoded', admitted: false, encoding: 'utf-8',
|
|
228
|
+
bytes, expanded, usage: Object.freeze({ ...budget.usage() }) });
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
/** Encode a component-qualified structured operation direction through the same native inverse and XML writer.
|
|
232
|
+
* @remarks Mapping/source authority is checked before values. This supplies XML bytes only, not policy enforcement or dispatch.
|
|
233
|
+
* @returns Native-validated UTF-8 output or explicit scalar/value/unsupported/cancellation/resource failure.
|
|
234
|
+
*/
|
|
235
|
+
export function encodeComponentXml(contract, mapping, application, options = {}) {
|
|
236
|
+
return runComponent(contract, mapping, options, (owned, session) => {
|
|
237
|
+
const { context } = inspectDirectOperation(contract), { budget, limits } = session;
|
|
238
|
+
// @why Application items include attributes; XML syntax-node/text caps count elements and character data.
|
|
239
|
+
// Encoded bytes bound inverse input capacity without treating those different counters as equal.
|
|
240
|
+
const expanded = expandProjectionValue(context, owned.root.element, application, { ...options,
|
|
241
|
+
maxText: limits.maxBytes, maxItems: limits.maxBytes }, owned);
|
|
242
|
+
if (expanded.kind !== 'projection-expanded')
|
|
243
|
+
return expanded;
|
|
244
|
+
const bytes = emitObservedXml(expanded.payload, session);
|
|
245
|
+
return Object.freeze({ kind: 'component-encoded', admitted: false, encoding: 'utf-8',
|
|
246
|
+
bytes, expanded, mapping: owned, usage: Object.freeze({ ...budget.usage() }) });
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
/** Retain the shared byte-copy, XML-version, entity and explicit capacity boundaries for both profiles. */
|
|
250
|
+
function parseObservedXml(bytes, { budget, limits, check }, sourceUri) {
|
|
251
|
+
if (!types.isUint8Array(bytes) || types.isProxy(bytes))
|
|
252
|
+
throw new TypeError('XML requires Uint8Array bytes');
|
|
253
|
+
// Use native internal-slot access, avoiding subclass/own length, buffer and
|
|
254
|
+
// iterator getters. Shared backing stores are outside the data-only contract.
|
|
255
|
+
const typed = Object.getPrototypeOf(Uint8Array.prototype);
|
|
256
|
+
const length = Object.getOwnPropertyDescriptor(typed, 'byteLength').get.call(bytes);
|
|
257
|
+
const backing = Object.getOwnPropertyDescriptor(typed, 'buffer').get.call(bytes);
|
|
258
|
+
if (types.isSharedArrayBuffer(backing))
|
|
259
|
+
throw new TypeError('Shared XML bytes are unsupported');
|
|
260
|
+
if (length > limits.maxBytes)
|
|
261
|
+
throw new Stop('resource-limit', 'XML byte limit');
|
|
262
|
+
check();
|
|
263
|
+
const input = new Uint8Array(length);
|
|
264
|
+
Uint8Array.prototype.set.call(input, bytes);
|
|
265
|
+
const uri = sourceUri ?? 'urn:typescript-wsdl-client:observed-direct-xml';
|
|
266
|
+
if (typeof uri !== 'string')
|
|
267
|
+
throw new TypeError('XML source URI must be a string');
|
|
268
|
+
check();
|
|
269
|
+
return parseOrderedSyntax(input, uri, { ...limits, xml10Only: true,
|
|
270
|
+
chargeWork: () => check(), reserveNode: () => { check(); budget.reserveNodes(1); } }).root;
|
|
271
|
+
}
|
|
272
|
+
function assertObservedPayload(root, payload, check) {
|
|
273
|
+
const pending = [root];
|
|
274
|
+
while (pending.length) {
|
|
275
|
+
check();
|
|
276
|
+
const node = pending.pop();
|
|
277
|
+
if (node === payload)
|
|
278
|
+
return;
|
|
279
|
+
for (let i = node.children.length - 1; i >= 0; i--) {
|
|
280
|
+
check();
|
|
281
|
+
const child = node.children[i];
|
|
282
|
+
if (child.kind === 'element')
|
|
283
|
+
pending.push(child);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
throw new TypeError('Protocol payload must belong to the observed document');
|
|
287
|
+
}
|
|
288
|
+
/** Observe once through the existing component parser and execution controls.
|
|
289
|
+
* @remarks Any exact operation-owned mapping can bind parsing to its execution context. Its value/root is not
|
|
290
|
+
* assessed here. Source qualification, wrapper scope and selected payload validation remain separate owners.
|
|
291
|
+
*/
|
|
292
|
+
export function observeComponentXml(contract, mapping, bytes, options = {}) {
|
|
293
|
+
const result = runComponent(contract, mapping, options, (_owned, session) => {
|
|
294
|
+
const root = parseObservedXml(bytes, session, options.uri ?? 'urn:typescript-wsdl-client:observed-component-xml');
|
|
295
|
+
directDataOwnership(session.budget).freeze(root);
|
|
296
|
+
return Object.freeze({ kind: 'observed-component-xml', root, usage: Object.freeze({ ...session.budget.usage() }) });
|
|
297
|
+
});
|
|
298
|
+
if (result.kind === 'observed-component-xml')
|
|
299
|
+
componentObservations.add(result);
|
|
300
|
+
return result;
|
|
301
|
+
}
|
|
302
|
+
/** Validate a genuine observed subtree through an independently qualified component mapping.
|
|
303
|
+
* @remarks XML capacities belong to the observation episode. This entry assesses the selected mapping's
|
|
304
|
+
* structure and scalar duties; it does not assert cross-contract wrapper, SOAP or runtime authority.
|
|
305
|
+
* @throws TypeError For copied observations, foreign mappings or a node outside the observed document.
|
|
306
|
+
*/
|
|
307
|
+
export function assessObservedComponentPayload(contract, mapping, observation, payload, options = {}) {
|
|
308
|
+
if (!componentObservations.has(observation))
|
|
309
|
+
throw new TypeError('Native component XML observation required');
|
|
310
|
+
return runComponent(contract, mapping, options, (owned, { budget, check }) => {
|
|
311
|
+
assertObservedPayload(observation.root, payload, check);
|
|
312
|
+
const { context } = inspectDirectOperation(contract);
|
|
313
|
+
const structural = matchDirectProjection(context, owned.root.element, payload, options);
|
|
314
|
+
if (structural.kind !== 'projection-match')
|
|
315
|
+
return structural;
|
|
316
|
+
const validated = assessProjectionScalars(context, structural, options, owned);
|
|
317
|
+
if (validated.kind !== 'projection-value')
|
|
318
|
+
return validated;
|
|
319
|
+
return Object.freeze({ kind: 'component-decoded', admitted: false, payload, validated, mapping: owned,
|
|
320
|
+
usage: Object.freeze({ ...budget.usage() }) });
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
/** Verify membership without conferring a selected mapping or wrapper validity. */
|
|
324
|
+
export function assertComponentObservedPayload(observation, payload, check) {
|
|
325
|
+
if (!componentObservations.has(observation))
|
|
326
|
+
throw new TypeError('Native component XML observation required');
|
|
327
|
+
assertObservedPayload(observation.root, payload, check);
|
|
328
|
+
}
|
|
329
|
+
/** Bounded observed bytes -> ordered syntax -> existing structural/scalar checks. */
|
|
330
|
+
export function decodeDirectXml(contract, mapping, bytes, options = {}) {
|
|
331
|
+
return run(contract, mapping, options, (owned, session) => {
|
|
332
|
+
const { budget, check } = session;
|
|
333
|
+
const root = parseObservedXml(bytes, session, options.uri);
|
|
334
|
+
const selection = options.selectPayload?.(root) ?? { payload: root, mapping: owned };
|
|
335
|
+
const payload = selection.payload;
|
|
336
|
+
const selectedMapping = inspectDirectValueMapping(selection.mapping, contract);
|
|
337
|
+
// Protocol selection may only return an actual node from this parse, never
|
|
338
|
+
// a synthetic tree relabeled with the observed document's provenance.
|
|
339
|
+
assertObservedPayload(root, payload, check);
|
|
340
|
+
const structural = matchDirectOperation(contract, selectedMapping.direction, payload, options);
|
|
341
|
+
if (structural.kind !== 'structural-match')
|
|
342
|
+
return structural;
|
|
343
|
+
const validated = assessDirectScalars(contract, structural, options);
|
|
344
|
+
if (validated.kind !== 'direct-value')
|
|
345
|
+
return validated;
|
|
346
|
+
check();
|
|
347
|
+
directDataOwnership(budget).freeze(payload);
|
|
348
|
+
check();
|
|
349
|
+
return Object.freeze({ kind: 'direct-decoded', admitted: false, payload, validated,
|
|
350
|
+
usage: Object.freeze({ ...budget.usage() }) });
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
/** Decode observed component-profile bytes through the same parser and native structured/scalar owners.
|
|
354
|
+
* @remarks Protocol selection may choose only an actual node from this parse and an exact operation-owned mapping.
|
|
355
|
+
* It cannot relabel a copied syntax tree, switch operations or acquire runtime/policy enforcement authority.
|
|
356
|
+
* @returns A native-validated structured value or explicit XML/structure/scalar/unsupported/resource failure.
|
|
357
|
+
*/
|
|
358
|
+
export function decodeComponentXml(contract, mapping, bytes, options = {}) {
|
|
359
|
+
return runComponent(contract, mapping, options, (owned, session) => {
|
|
360
|
+
const { budget, check } = session, { context } = inspectDirectOperation(contract);
|
|
361
|
+
const root = parseObservedXml(bytes, session, options.uri ?? 'urn:typescript-wsdl-client:observed-component-xml');
|
|
362
|
+
const selection = options.selectPayload?.(root) ?? { payload: root, mapping: owned };
|
|
363
|
+
const selected = inspectComponentValueMapping(selection.mapping, contract).mapping;
|
|
364
|
+
assertObservedPayload(root, selection.payload, check);
|
|
365
|
+
const structural = matchDirectProjection(context, selected.root.element, selection.payload, options);
|
|
366
|
+
if (structural.kind !== 'projection-match')
|
|
367
|
+
return structural;
|
|
368
|
+
const validated = assessProjectionScalars(context, structural, options, selected);
|
|
369
|
+
if (validated.kind !== 'projection-value')
|
|
370
|
+
return validated;
|
|
371
|
+
check();
|
|
372
|
+
directDataOwnership(budget).freeze(selection.payload);
|
|
373
|
+
check();
|
|
374
|
+
return Object.freeze({ kind: 'component-decoded', admitted: false, payload: selection.payload,
|
|
375
|
+
validated, mapping: selected, usage: Object.freeze({ ...budget.usage() }) });
|
|
376
|
+
});
|
|
377
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SemanticBudget } from './semanticBudget.js';
|
|
2
|
+
import type { LoadingLimits } from '../loader/schemaResources.js';
|
|
3
|
+
export declare const DIRECT_REPRESENTATION_MAX: number;
|
|
4
|
+
export declare function directDataOwnership(budget: SemanticBudget): Readonly<{
|
|
5
|
+
snapshot: <T>(value: T, check?: () => void) => T;
|
|
6
|
+
freeze: <T>(value: T) => Readonly<T>;
|
|
7
|
+
}>;
|
|
8
|
+
export declare function directLimit(budget: SemanticBudget, boundedProfile: number): number;
|
|
9
|
+
export declare function directLoadingLimits(budget: SemanticBudget, overrides?: Partial<LoadingLimits>): Partial<LoadingLimits>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Application-selected resource policy; numeric maxima below are representation ceilings, not quotas. */
|
|
2
|
+
import { createDataOwnership, dataOwnership } from './dataOwnership.js';
|
|
3
|
+
import { isApplicationUnmetered } from './semanticBudget.js';
|
|
4
|
+
import { DEFAULT_LOADING_LIMITS } from '../loader/schemaResources.js';
|
|
5
|
+
const unrestrictedData = createDataOwnership(() => { });
|
|
6
|
+
export const DIRECT_REPRESENTATION_MAX = Number.MAX_SAFE_INTEGER;
|
|
7
|
+
export function directDataOwnership(budget) {
|
|
8
|
+
return isApplicationUnmetered(budget) ? unrestrictedData : dataOwnership;
|
|
9
|
+
}
|
|
10
|
+
export function directLimit(budget, boundedProfile) {
|
|
11
|
+
return isApplicationUnmetered(budget) ? DIRECT_REPRESENTATION_MAX : boundedProfile;
|
|
12
|
+
}
|
|
13
|
+
export function directLoadingLimits(budget, overrides) {
|
|
14
|
+
if (!isApplicationUnmetered(budget))
|
|
15
|
+
return overrides ?? {};
|
|
16
|
+
return { ...Object.fromEntries(Object.keys(DEFAULT_LOADING_LIMITS).map(key => [key, key === 'resourceMs' || key === 'totalIoMs' ? 0 : DIRECT_REPRESENTATION_MAX])), ...overrides };
|
|
17
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { SchemaInput, SchemaInputOptions } from '../loader/schemaInput.js';
|
|
2
|
+
import type { ExpandedName, SyntaxSource } from '../loader/orderedSyntax.js';
|
|
3
|
+
import type { ElementNode, Reference } from './canonicalGraph.js';
|
|
4
|
+
import type { SemanticContext } from './semanticContext.js';
|
|
5
|
+
import type { SemanticBudget, SemanticBudgetLimits, ResolverUsage } from './semanticBudget.js';
|
|
6
|
+
import type { DirectSourceQualification } from './checkedSourcePreparation.js';
|
|
7
|
+
import type { ComponentSourceQualification } from './checkedComponentSource.js';
|
|
8
|
+
import type { WsdlPolicyRequirements, BindingPolicyRequirements } from './wsdlPolicyRequirements.js';
|
|
9
|
+
import type { StandardSchemaLibrary } from './standardSchemaComponents.js';
|
|
10
|
+
export interface DirectOperationSelector {
|
|
11
|
+
readonly portType: ExpandedName;
|
|
12
|
+
readonly binding: ExpandedName;
|
|
13
|
+
readonly operation: string;
|
|
14
|
+
}
|
|
15
|
+
export interface DirectMessageRoot {
|
|
16
|
+
readonly message: ExpandedName;
|
|
17
|
+
readonly part: string;
|
|
18
|
+
readonly element: ElementNode;
|
|
19
|
+
readonly type: Reference;
|
|
20
|
+
readonly source: SyntaxSource;
|
|
21
|
+
}
|
|
22
|
+
export interface DirectOperationContract {
|
|
23
|
+
readonly selector: DirectOperationSelector;
|
|
24
|
+
readonly contextId: string;
|
|
25
|
+
readonly basis: 'native-direct-premises-v1' | 'native-component-premises-v1';
|
|
26
|
+
readonly correspondence: 'dated-XSD-2004-direct-v1' | 'dated-XSD-2004-components-v1';
|
|
27
|
+
readonly binding: Readonly<{
|
|
28
|
+
version: '1.1';
|
|
29
|
+
style: 'document';
|
|
30
|
+
use: 'literal';
|
|
31
|
+
transport: string;
|
|
32
|
+
action: string;
|
|
33
|
+
source: SyntaxSource;
|
|
34
|
+
}>;
|
|
35
|
+
readonly input: DirectMessageRoot;
|
|
36
|
+
readonly output: DirectMessageRoot;
|
|
37
|
+
readonly faults: readonly Readonly<{
|
|
38
|
+
name: string;
|
|
39
|
+
root: DirectMessageRoot;
|
|
40
|
+
}>[];
|
|
41
|
+
readonly policy?: BindingPolicyRequirements;
|
|
42
|
+
readonly addressingActions?: Readonly<{
|
|
43
|
+
required: false;
|
|
44
|
+
input?: string;
|
|
45
|
+
output?: string;
|
|
46
|
+
faults: readonly Readonly<{
|
|
47
|
+
name: string;
|
|
48
|
+
action: string;
|
|
49
|
+
}>[];
|
|
50
|
+
}>;
|
|
51
|
+
readonly missingCapabilities: readonly string[];
|
|
52
|
+
readonly admitted: false;
|
|
53
|
+
}
|
|
54
|
+
export type DirectOperationResult = Readonly<{
|
|
55
|
+
kind: 'selected';
|
|
56
|
+
contract: DirectOperationContract;
|
|
57
|
+
usage: ResolverUsage;
|
|
58
|
+
}> | Readonly<{
|
|
59
|
+
kind: 'invalid-schema' | 'inconclusive' | 'unsupported' | 'selection-refused' | 'loading-refused' | 'resource-limit' | 'cancelled';
|
|
60
|
+
rule: string;
|
|
61
|
+
usage: ResolverUsage;
|
|
62
|
+
}>;
|
|
63
|
+
export interface DirectOperationInspection {
|
|
64
|
+
readonly contract: DirectOperationContract;
|
|
65
|
+
readonly context: SemanticContext;
|
|
66
|
+
readonly source: SchemaInput;
|
|
67
|
+
readonly evidence: Extract<DirectSourceQualification, {
|
|
68
|
+
kind: 'qualified-source';
|
|
69
|
+
}> | ComponentSourceQualification;
|
|
70
|
+
readonly policyOwner?: WsdlPolicyRequirements;
|
|
71
|
+
}
|
|
72
|
+
/** Object identity authenticates the exact issued roots; context IDs and digests do not. */
|
|
73
|
+
export declare function inspectDirectOperation(contract: DirectOperationContract, expectedContext?: SemanticContext): DirectOperationInspection;
|
|
74
|
+
/** One load, whole-source qualification, explicit selection and publication on one sticky budget. */
|
|
75
|
+
export declare function selectDirectOperation(source: string, selector: DirectOperationSelector, options: Readonly<{
|
|
76
|
+
loading: SchemaInputOptions;
|
|
77
|
+
limits?: SemanticBudgetLimits;
|
|
78
|
+
signal?: AbortSignal;
|
|
79
|
+
}>): Promise<DirectOperationResult>;
|
|
80
|
+
/** Private-module composition seam: portable reading and selection share one request. */
|
|
81
|
+
export declare function selectDirectOperationInRequest(source: string, selector: DirectOperationSelector, options: Readonly<{
|
|
82
|
+
loading: SchemaInputOptions;
|
|
83
|
+
limits?: SemanticBudgetLimits;
|
|
84
|
+
signal?: AbortSignal;
|
|
85
|
+
}>, budget: SemanticBudget): Promise<DirectOperationResult>;
|
|
86
|
+
/** Select through additive native component qualification without granting codec, transport or runtime admission.
|
|
87
|
+
* @remarks The same WSDL binding/message owner is used by the existing preview. New contracts carry a distinct
|
|
88
|
+
* basis and correspondence; preview codecs and source capsules continue to refuse them until independently extended.
|
|
89
|
+
* @returns Fresh source-bound operation roots or an explicit qualification/selection failure.
|
|
90
|
+
*/
|
|
91
|
+
export declare function selectComponentOperation(source: string, selector: DirectOperationSelector, options: Readonly<{
|
|
92
|
+
loading: SchemaInputOptions;
|
|
93
|
+
limits?: SemanticBudgetLimits;
|
|
94
|
+
signal?: AbortSignal;
|
|
95
|
+
standardLibraries?: readonly StandardSchemaLibrary[];
|
|
96
|
+
}>): Promise<DirectOperationResult>;
|
|
97
|
+
/** Private composition seam: artifact reading and fresh component selection share the same sticky request. */
|
|
98
|
+
export declare function selectComponentOperationInRequest(source: string, selector: DirectOperationSelector, options: Readonly<{
|
|
99
|
+
loading: SchemaInputOptions;
|
|
100
|
+
limits?: SemanticBudgetLimits;
|
|
101
|
+
signal?: AbortSignal;
|
|
102
|
+
standardLibraries?: readonly StandardSchemaLibrary[];
|
|
103
|
+
}>, budget: SemanticBudget): Promise<DirectOperationResult>;
|
|
104
|
+
/** Select requested service operations against one fresh native source snapshot and sticky request.
|
|
105
|
+
* @remarks Native whole-source qualification is reused by identity within this batch only. Every binding/message
|
|
106
|
+
* selection still runs through the same owner; no source flags, saved reports or operation-name guesses are consumed.
|
|
107
|
+
* @returns One result in each requested position, including explicit refusals. No requested operation is omitted.
|
|
108
|
+
*/
|
|
109
|
+
export declare function selectComponentOperations(source: string, selectors: readonly DirectOperationSelector[], options: Readonly<{
|
|
110
|
+
loading: SchemaInputOptions;
|
|
111
|
+
limits?: SemanticBudgetLimits;
|
|
112
|
+
signal?: AbortSignal;
|
|
113
|
+
standardLibraries?: readonly StandardSchemaLibrary[];
|
|
114
|
+
}>): Promise<readonly DirectOperationResult[]>;
|