@techspokes/typescript-wsdl-client 1.1.3 → 1.1.5
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 +50 -1
- package/dist/app/generateApp.d.ts.map +1 -1
- package/dist/app/generateApp.js +8 -6
- package/dist/cli.js +49 -5
- package/dist/client/checkedDirectRuntime.d.ts +59 -0
- package/dist/client/checkedDirectRuntime.d.ts.map +1 -0
- package/dist/client/checkedDirectRuntime.js +23 -0
- package/dist/client/directClientRuntime.d.ts +49 -0
- package/dist/client/directClientRuntime.d.ts.map +1 -0
- package/dist/client/directClientRuntime.js +112 -0
- package/dist/client/directClientVersion.d.ts +4 -0
- package/dist/client/directClientVersion.d.ts.map +1 -0
- package/dist/client/directClientVersion.js +3 -0
- package/dist/client/generateClient.d.ts.map +1 -1
- package/dist/client/generateClient.js +22 -9
- package/dist/client/generateDirectClient.d.ts +14 -0
- package/dist/client/generateDirectClient.d.ts.map +1 -0
- package/dist/client/generateDirectClient.js +136 -0
- package/dist/compiler/buildCanonicalGraph.d.ts +7 -0
- package/dist/compiler/buildCanonicalGraph.d.ts.map +1 -0
- package/dist/compiler/buildCanonicalGraph.js +381 -0
- package/dist/compiler/canonicalGraph.d.ts +198 -0
- package/dist/compiler/canonicalGraph.d.ts.map +1 -0
- package/dist/compiler/canonicalGraph.js +37 -0
- package/dist/compiler/catalogErrors.d.ts +18 -0
- package/dist/compiler/catalogErrors.d.ts.map +1 -0
- package/dist/compiler/catalogErrors.js +86 -0
- package/dist/compiler/catalogProvenance.d.ts +15 -0
- package/dist/compiler/catalogProvenance.d.ts.map +1 -0
- package/dist/compiler/catalogProvenance.js +229 -0
- package/dist/compiler/checkedAssessment.d.ts +91 -0
- package/dist/compiler/checkedAssessment.d.ts.map +1 -0
- package/dist/compiler/checkedAssessment.js +300 -0
- package/dist/compiler/checkedSourcePreparation.d.ts +35 -0
- package/dist/compiler/checkedSourcePreparation.d.ts.map +1 -0
- package/dist/compiler/checkedSourcePreparation.js +131 -0
- package/dist/compiler/complexTypeContent.d.ts +59 -0
- package/dist/compiler/complexTypeContent.d.ts.map +1 -0
- package/dist/compiler/complexTypeContent.js +558 -0
- package/dist/compiler/composeCanonicalGraph.d.ts +69 -0
- package/dist/compiler/composeCanonicalGraph.d.ts.map +1 -0
- package/dist/compiler/composeCanonicalGraph.js +252 -0
- package/dist/compiler/dataOwnership.d.ts +22 -0
- package/dist/compiler/dataOwnership.d.ts.map +1 -0
- package/dist/compiler/dataOwnership.js +157 -0
- package/dist/compiler/datatypeValues.d.ts +47 -0
- package/dist/compiler/datatypeValues.d.ts.map +1 -0
- package/dist/compiler/datatypeValues.js +275 -0
- package/dist/compiler/directCodec.d.ts +59 -0
- package/dist/compiler/directCodec.d.ts.map +1 -0
- package/dist/compiler/directCodec.js +192 -0
- package/dist/compiler/directExecutionPolicy.d.ts +10 -0
- package/dist/compiler/directExecutionPolicy.d.ts.map +1 -0
- package/dist/compiler/directExecutionPolicy.js +17 -0
- package/dist/compiler/directOperation.d.ts +72 -0
- package/dist/compiler/directOperation.d.ts.map +1 -0
- package/dist/compiler/directOperation.js +282 -0
- package/dist/compiler/directSoap.d.ts +42 -0
- package/dist/compiler/directSoap.d.ts.map +1 -0
- package/dist/compiler/directSoap.js +298 -0
- package/dist/compiler/directSoapSource.d.ts +15 -0
- package/dist/compiler/directSoapSource.d.ts.map +1 -0
- package/dist/compiler/directSoapSource.js +86 -0
- package/dist/compiler/directSourceCapsule.d.ts +97 -0
- package/dist/compiler/directSourceCapsule.d.ts.map +1 -0
- package/dist/compiler/directSourceCapsule.js +305 -0
- package/dist/compiler/directStructure.d.ts +51 -0
- package/dist/compiler/directStructure.d.ts.map +1 -0
- package/dist/compiler/directStructure.js +252 -0
- package/dist/compiler/directStructurePlan.d.ts +16 -0
- package/dist/compiler/directStructurePlan.d.ts.map +1 -0
- package/dist/compiler/directStructurePlan.js +58 -0
- package/dist/compiler/directValues.d.ts +69 -0
- package/dist/compiler/directValues.d.ts.map +1 -0
- package/dist/compiler/directValues.js +282 -0
- package/dist/compiler/finiteRe01Verification.d.ts +140 -0
- package/dist/compiler/finiteRe01Verification.d.ts.map +1 -0
- package/dist/compiler/finiteRe01Verification.js +830 -0
- package/dist/compiler/graphTraversal.d.ts +11 -0
- package/dist/compiler/graphTraversal.d.ts.map +1 -0
- package/dist/compiler/graphTraversal.js +37 -0
- package/dist/compiler/hypotheticalScopedIdentity.d.ts +23 -0
- package/dist/compiler/hypotheticalScopedIdentity.d.ts.map +1 -0
- package/dist/compiler/hypotheticalScopedIdentity.js +81 -0
- package/dist/compiler/occurrenceAnalysis.d.ts +65 -0
- package/dist/compiler/occurrenceAnalysis.d.ts.map +1 -0
- package/dist/compiler/occurrenceAnalysis.js +300 -0
- package/dist/compiler/originalSourceMembership.d.ts +6 -0
- package/dist/compiler/originalSourceMembership.d.ts.map +1 -0
- package/dist/compiler/originalSourceMembership.js +31 -0
- package/dist/compiler/particleAttribution.d.ts +17 -0
- package/dist/compiler/particleAttribution.d.ts.map +1 -0
- package/dist/compiler/particleAttribution.js +474 -0
- package/dist/compiler/particleDeclarationConsistency.d.ts +24 -0
- package/dist/compiler/particleDeclarationConsistency.d.ts.map +1 -0
- package/dist/compiler/particleDeclarationConsistency.js +197 -0
- package/dist/compiler/particleExtension.d.ts +22 -0
- package/dist/compiler/particleExtension.d.ts.map +1 -0
- package/dist/compiler/particleExtension.js +119 -0
- package/dist/compiler/particleLocalAssessment.d.ts +20 -0
- package/dist/compiler/particleLocalAssessment.d.ts.map +1 -0
- package/dist/compiler/particleLocalAssessment.js +92 -0
- package/dist/compiler/particleRestriction.d.ts +24 -0
- package/dist/compiler/particleRestriction.d.ts.map +1 -0
- package/dist/compiler/particleRestriction.js +489 -0
- package/dist/compiler/particleSemanticView.d.ts +50 -0
- package/dist/compiler/particleSemanticView.d.ts.map +1 -0
- package/dist/compiler/particleSemanticView.js +297 -0
- package/dist/compiler/particleWildcardRelation.d.ts +88 -0
- package/dist/compiler/particleWildcardRelation.d.ts.map +1 -0
- package/dist/compiler/particleWildcardRelation.js +143 -0
- package/dist/compiler/re01CandidateCorrespondence.d.ts +64 -0
- package/dist/compiler/re01CandidateCorrespondence.d.ts.map +1 -0
- package/dist/compiler/re01CandidateCorrespondence.js +572 -0
- package/dist/compiler/re01TypeProperties.d.ts +71 -0
- package/dist/compiler/re01TypeProperties.d.ts.map +1 -0
- package/dist/compiler/re01TypeProperties.js +120 -0
- package/dist/compiler/re01TypePropertyValidation.d.ts +23 -0
- package/dist/compiler/re01TypePropertyValidation.d.ts.map +1 -0
- package/dist/compiler/re01TypePropertyValidation.js +161 -0
- package/dist/compiler/resolveCanonicalGraph.d.ts +38 -0
- package/dist/compiler/resolveCanonicalGraph.d.ts.map +1 -0
- package/dist/compiler/resolveCanonicalGraph.js +170 -0
- package/dist/compiler/scalarSchemaAssessment.d.ts +425 -0
- package/dist/compiler/scalarSchemaAssessment.d.ts.map +1 -0
- package/dist/compiler/scalarSchemaAssessment.js +5198 -0
- package/dist/compiler/schemaAttributeGroupProperties.d.ts +17 -0
- package/dist/compiler/schemaAttributeGroupProperties.d.ts.map +1 -0
- package/dist/compiler/schemaAttributeGroupProperties.js +53 -0
- package/dist/compiler/schemaAttributeProperties.d.ts +10 -0
- package/dist/compiler/schemaAttributeProperties.d.ts.map +1 -0
- package/dist/compiler/schemaAttributeProperties.js +11 -0
- package/dist/compiler/schemaAttributeUses.d.ts +90 -0
- package/dist/compiler/schemaAttributeUses.d.ts.map +1 -0
- package/dist/compiler/schemaAttributeUses.js +725 -0
- package/dist/compiler/schemaBinaryWordReconstruction.d.ts +10 -0
- package/dist/compiler/schemaBinaryWordReconstruction.d.ts.map +1 -0
- package/dist/compiler/schemaBinaryWordReconstruction.js +33 -0
- package/dist/compiler/schemaBuiltinFacets.d.ts +14 -0
- package/dist/compiler/schemaBuiltinFacets.d.ts.map +1 -0
- package/dist/compiler/schemaBuiltinFacets.js +51 -0
- package/dist/compiler/schemaCalendarImages.d.ts +8 -0
- package/dist/compiler/schemaCalendarImages.d.ts.map +1 -0
- package/dist/compiler/schemaCalendarImages.js +204 -0
- package/dist/compiler/schemaCalendarLanguage.d.ts +11 -0
- package/dist/compiler/schemaCalendarLanguage.d.ts.map +1 -0
- package/dist/compiler/schemaCalendarLanguage.js +227 -0
- package/dist/compiler/schemaComponentEquality.d.ts +28 -0
- package/dist/compiler/schemaComponentEquality.d.ts.map +1 -0
- package/dist/compiler/schemaComponentEquality.js +446 -0
- package/dist/compiler/schemaConstructionAssessment.d.ts +46 -0
- package/dist/compiler/schemaConstructionAssessment.d.ts.map +1 -0
- package/dist/compiler/schemaConstructionAssessment.js +663 -0
- package/dist/compiler/schemaDatatypeValues.d.ts +4 -0
- package/dist/compiler/schemaDatatypeValues.d.ts.map +1 -0
- package/dist/compiler/schemaDatatypeValues.js +2 -0
- package/dist/compiler/schemaDecimalLanguage.d.ts +7 -0
- package/dist/compiler/schemaDecimalLanguage.d.ts.map +1 -0
- package/dist/compiler/schemaDecimalLanguage.js +102 -0
- package/dist/compiler/schemaDeclarationPrimitives.d.ts +34 -0
- package/dist/compiler/schemaDeclarationPrimitives.d.ts.map +1 -0
- package/dist/compiler/schemaDeclarationPrimitives.js +194 -0
- package/dist/compiler/schemaDocumentSyntax.d.ts +55 -0
- package/dist/compiler/schemaDocumentSyntax.d.ts.map +1 -0
- package/dist/compiler/schemaDocumentSyntax.js +294 -0
- package/dist/compiler/schemaDurationLanguage.d.ts +11 -0
- package/dist/compiler/schemaDurationLanguage.d.ts.map +1 -0
- package/dist/compiler/schemaDurationLanguage.js +170 -0
- package/dist/compiler/schemaElementProperties.d.ts +16 -0
- package/dist/compiler/schemaElementProperties.d.ts.map +1 -0
- package/dist/compiler/schemaElementProperties.js +23 -0
- package/dist/compiler/schemaEndpointWordCapacity.d.ts +36 -0
- package/dist/compiler/schemaEndpointWordCapacity.d.ts.map +1 -0
- package/dist/compiler/schemaEndpointWordCapacity.js +39 -0
- package/dist/compiler/schemaExactCalendar.d.ts +73 -0
- package/dist/compiler/schemaExactCalendar.d.ts.map +1 -0
- package/dist/compiler/schemaExactCalendar.js +264 -0
- package/dist/compiler/schemaFacetAnnotation.d.ts +32 -0
- package/dist/compiler/schemaFacetAnnotation.d.ts.map +1 -0
- package/dist/compiler/schemaFacetAnnotation.js +199 -0
- package/dist/compiler/schemaGeneratedScalarShape.d.ts +35 -0
- package/dist/compiler/schemaGeneratedScalarShape.d.ts.map +1 -0
- package/dist/compiler/schemaGeneratedScalarShape.js +176 -0
- package/dist/compiler/schemaIdentityConstraints.d.ts +73 -0
- package/dist/compiler/schemaIdentityConstraints.d.ts.map +1 -0
- package/dist/compiler/schemaIdentityConstraints.js +362 -0
- package/dist/compiler/schemaIeeeLanguage.d.ts +43 -0
- package/dist/compiler/schemaIeeeLanguage.d.ts.map +1 -0
- package/dist/compiler/schemaIeeeLanguage.js +759 -0
- package/dist/compiler/schemaIntegerImages.d.ts +11 -0
- package/dist/compiler/schemaIntegerImages.d.ts.map +1 -0
- package/dist/compiler/schemaIntegerImages.js +113 -0
- package/dist/compiler/schemaLexicalPredicates.d.ts +29 -0
- package/dist/compiler/schemaLexicalPredicates.d.ts.map +1 -0
- package/dist/compiler/schemaLexicalPredicates.js +63 -0
- package/dist/compiler/schemaNotationProperties.d.ts +32 -0
- package/dist/compiler/schemaNotationProperties.d.ts.map +1 -0
- package/dist/compiler/schemaNotationProperties.js +84 -0
- package/dist/compiler/schemaNumericImageConditions.d.ts +24 -0
- package/dist/compiler/schemaNumericImageConditions.d.ts.map +1 -0
- package/dist/compiler/schemaNumericImageConditions.js +66 -0
- package/dist/compiler/schemaParticleWildcardProperties.d.ts +20 -0
- package/dist/compiler/schemaParticleWildcardProperties.d.ts.map +1 -0
- package/dist/compiler/schemaParticleWildcardProperties.js +43 -0
- package/dist/compiler/schemaPattern.d.ts +1062 -0
- package/dist/compiler/schemaPattern.d.ts.map +1 -0
- package/dist/compiler/schemaPattern.js +581 -0
- package/dist/compiler/schemaRegularLanguage.d.ts +67 -0
- package/dist/compiler/schemaRegularLanguage.d.ts.map +1 -0
- package/dist/compiler/schemaRegularLanguage.js +1166 -0
- package/dist/compiler/schemaScalarContext.d.ts +81 -0
- package/dist/compiler/schemaScalarContext.d.ts.map +1 -0
- package/dist/compiler/schemaScalarContext.js +78 -0
- package/dist/compiler/schemaScalarKernel.d.ts +182 -0
- package/dist/compiler/schemaScalarKernel.d.ts.map +1 -0
- package/dist/compiler/schemaScalarKernel.js +391 -0
- package/dist/compiler/schemaScalarWitnesses.d.ts +6 -0
- package/dist/compiler/schemaScalarWitnesses.d.ts.map +1 -0
- package/dist/compiler/schemaScalarWitnesses.js +118 -0
- package/dist/compiler/schemaSimpleTypeProperties.d.ts +95 -0
- package/dist/compiler/schemaSimpleTypeProperties.d.ts.map +1 -0
- package/dist/compiler/schemaSimpleTypeProperties.js +103 -0
- package/dist/compiler/schemaSourceGrammar.d.ts +27 -0
- package/dist/compiler/schemaSourceGrammar.d.ts.map +1 -0
- package/dist/compiler/schemaSourceGrammar.js +290 -0
- package/dist/compiler/schemaSourceLexical.d.ts +4 -0
- package/dist/compiler/schemaSourceLexical.d.ts.map +1 -0
- package/dist/compiler/schemaSourceLexical.js +12 -0
- package/dist/compiler/schemaSourceValues.d.ts +51 -0
- package/dist/compiler/schemaSourceValues.d.ts.map +1 -0
- package/dist/compiler/schemaSourceValues.js +225 -0
- package/dist/compiler/schemaSourceWildcards.d.ts +28 -0
- package/dist/compiler/schemaSourceWildcards.d.ts.map +1 -0
- package/dist/compiler/schemaSourceWildcards.js +247 -0
- package/dist/compiler/schemaSymbolicSequences.d.ts +16 -0
- package/dist/compiler/schemaSymbolicSequences.d.ts.map +1 -0
- package/dist/compiler/schemaSymbolicSequences.js +99 -0
- package/dist/compiler/schemaSymbolicValueSets.d.ts +32 -0
- package/dist/compiler/schemaSymbolicValueSets.d.ts.map +1 -0
- package/dist/compiler/schemaSymbolicValueSets.js +149 -0
- package/dist/compiler/schemaSyntaxAssessment.d.ts +25 -0
- package/dist/compiler/schemaSyntaxAssessment.d.ts.map +1 -0
- package/dist/compiler/schemaSyntaxAssessment.js +361 -0
- package/dist/compiler/schemaTemporalAliases.d.ts +6 -0
- package/dist/compiler/schemaTemporalAliases.d.ts.map +1 -0
- package/dist/compiler/schemaTemporalAliases.js +195 -0
- package/dist/compiler/schemaTokenImages.d.ts +9 -0
- package/dist/compiler/schemaTokenImages.d.ts.map +1 -0
- package/dist/compiler/schemaTokenImages.js +142 -0
- package/dist/compiler/schemaTypeIdentity.d.ts +39 -0
- package/dist/compiler/schemaTypeIdentity.d.ts.map +1 -0
- package/dist/compiler/schemaTypeIdentity.js +78 -0
- package/dist/compiler/schemaTypeRelations.d.ts +38 -0
- package/dist/compiler/schemaTypeRelations.d.ts.map +1 -0
- package/dist/compiler/schemaTypeRelations.js +576 -0
- package/dist/compiler/schemaUri.d.ts +13 -0
- package/dist/compiler/schemaUri.d.ts.map +1 -0
- package/dist/compiler/schemaUri.js +103 -0
- package/dist/compiler/schemaValueContext.d.ts +26 -0
- package/dist/compiler/schemaValueContext.d.ts.map +1 -0
- package/dist/compiler/schemaValueContext.js +1 -0
- package/dist/compiler/schemaValueImages.d.ts +10 -0
- package/dist/compiler/schemaValueImages.d.ts.map +1 -0
- package/dist/compiler/schemaValueImages.js +142 -0
- package/dist/compiler/schemaValueSequences.d.ts +15 -0
- package/dist/compiler/schemaValueSequences.d.ts.map +1 -0
- package/dist/compiler/schemaValueSequences.js +19 -0
- package/dist/compiler/semanticBudget.d.ts +50 -0
- package/dist/compiler/semanticBudget.d.ts.map +1 -0
- package/dist/compiler/semanticBudget.js +178 -0
- package/dist/compiler/semanticCatalog.d.ts +122 -0
- package/dist/compiler/semanticCatalog.d.ts.map +1 -0
- package/dist/compiler/semanticCatalog.js +160 -0
- package/dist/compiler/semanticContext.d.ts +172 -0
- package/dist/compiler/semanticContext.d.ts.map +1 -0
- package/dist/compiler/semanticContext.js +1168 -0
- package/dist/compiler/semanticTypeDependencies.d.ts +8 -0
- package/dist/compiler/semanticTypeDependencies.d.ts.map +1 -0
- package/dist/compiler/semanticTypeDependencies.js +64 -0
- package/dist/compiler/semanticTypeReference.d.ts +24 -0
- package/dist/compiler/semanticTypeReference.d.ts.map +1 -0
- package/dist/compiler/semanticTypeReference.js +36 -0
- package/dist/compiler/shapeResolver.d.ts +1 -0
- package/dist/compiler/shapeResolver.d.ts.map +1 -1
- package/dist/compiler/shapeResolver.js +7 -9
- package/dist/compiler/sourceSchemaBinding.d.ts +26 -0
- package/dist/compiler/sourceSchemaBinding.d.ts.map +1 -0
- package/dist/compiler/sourceSchemaBinding.js +39 -0
- package/dist/compiler/structuralCompanions.d.ts +16 -0
- package/dist/compiler/structuralCompanions.d.ts.map +1 -0
- package/dist/compiler/structuralCompanions.js +232 -0
- package/dist/compiler/validateSemanticGraph.d.ts +5 -0
- package/dist/compiler/validateSemanticGraph.d.ts.map +1 -0
- package/dist/compiler/validateSemanticGraph.js +376 -0
- package/dist/compiler/wildcardAlgebra.d.ts +26 -0
- package/dist/compiler/wildcardAlgebra.d.ts.map +1 -0
- package/dist/compiler/wildcardAlgebra.js +155 -0
- package/dist/gateway/generateGateway.d.ts.map +1 -1
- package/dist/gateway/generateGateway.js +2 -2
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/loader/orderedSyntax.d.ts +77 -0
- package/dist/loader/orderedSyntax.d.ts.map +1 -0
- package/dist/loader/orderedSyntax.js +202 -0
- package/dist/loader/resolutionDepth.d.ts +7 -0
- package/dist/loader/resolutionDepth.d.ts.map +1 -0
- package/dist/loader/resolutionDepth.js +65 -0
- package/dist/loader/schemaInput.d.ts +53 -0
- package/dist/loader/schemaInput.d.ts.map +1 -0
- package/dist/loader/schemaInput.js +212 -0
- package/dist/loader/schemaResources.d.ts +59 -0
- package/dist/loader/schemaResources.d.ts.map +1 -0
- package/dist/loader/schemaResources.js +292 -0
- package/dist/openapi/generateOpenAPI.d.ts.map +1 -1
- package/dist/openapi/generateOpenAPI.js +2 -2
- package/dist/test/generateTests.d.ts.map +1 -1
- package/dist/test/generateTests.js +2 -2
- package/dist/util/xmlWhitespace.d.ts +3 -0
- package/dist/util/xmlWhitespace.d.ts.map +1 -0
- package/dist/util/xmlWhitespace.js +4 -0
- package/docs/README.md +14 -1
- package/docs/architecture.md +9 -0
- package/docs/cli-reference.md +21 -1
- package/docs/content-model-analysis.md +92 -0
- package/docs/content-model-baseline.md +121 -0
- package/docs/content-model-catalog.md +116 -0
- package/docs/content-model-companions.md +90 -0
- package/docs/content-model-composition.md +103 -0
- package/docs/content-model-decisions.md +79 -0
- package/docs/content-model-gateway-feasibility.md +169 -0
- package/docs/content-model-graph.md +121 -0
- package/docs/content-model-loading.md +163 -0
- package/docs/content-model-matching.md +85 -0
- package/docs/content-model-readiness.md +144 -0
- package/docs/content-model-resolution.md +81 -0
- package/docs/content-model-s02-handoff.md +98 -0
- package/docs/content-model-s06-au-01.md +425 -0
- package/docs/content-model-s06-dt-01.md +386 -0
- package/docs/content-model-s06-pw-01.md +350 -0
- package/docs/content-model-s06-re-01-resolver-implementation.md +869 -0
- package/docs/content-model-s06-re-01-resolver.md +513 -0
- package/docs/content-model-s06-re-01-scalar-witnesses.md +1423 -0
- package/docs/content-model-s06-re-01-support-reconstruction.md +6337 -0
- package/docs/content-model-s06-re-01.md +7477 -0
- package/docs/content-model-s06-research-handoff.md +909 -0
- package/docs/content-model-shipped-fix.md +83 -0
- package/docs/content-model-soap-feasibility.md +165 -0
- package/docs/decisions/002-streamable-responses.md +2 -0
- package/docs/decisions/003-content-model-contracts.md +280 -0
- package/docs/direct-values.md +311 -0
- package/docs/generated-code.md +4 -0
- package/docs/reference-validation.md +243 -0
- package/docs/releases/v1.1.4.md +36 -0
- package/docs/releases/v1.1.5.md +38 -0
- package/docs/roadmap/README.md +2 -2
- package/docs/supported-patterns.md +13 -5
- package/package.json +27 -13
- package/src/generation/preambles/direct-client/typescript.preamble +3 -0
- package/src/runtime/clientStreamMethods.tpl.txt +1 -1
|
@@ -0,0 +1,576 @@
|
|
|
1
|
+
import { resolveSemanticType, declaredType } from './schemaTypeIdentity.js';
|
|
2
|
+
import { originalGeneratedShape } from './schemaGeneratedScalarShape.js';
|
|
3
|
+
import { collectSemanticTypeDependencies } from './semanticTypeDependencies.js';
|
|
4
|
+
import { builtinParents, normalizeWhitespace } from './schemaDatatypeValues.js';
|
|
5
|
+
import { XSD_NAMESPACE } from '../loader/orderedSyntax.js';
|
|
6
|
+
import { assertSemanticContext } from './semanticContext.js';
|
|
7
|
+
const METHODS = ['extension', 'restriction', 'list', 'union'];
|
|
8
|
+
const builtin = (local) => ({ kind: 'builtin', name: { namespace: XSD_NAMESPACE, local } });
|
|
9
|
+
const ur = builtin('anyType'), simpleUr = builtin('anySimpleType');
|
|
10
|
+
const state = new WeakMap();
|
|
11
|
+
export class RelationProblem extends Error {
|
|
12
|
+
result;
|
|
13
|
+
constructor(result) {
|
|
14
|
+
super(result.message);
|
|
15
|
+
this.result = result;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** The graph mapping owns legal syntax; this parser diagnoses token-list errors locally. */
|
|
19
|
+
export function declarationMethods(context, node, property) {
|
|
20
|
+
assertSemanticContext(context);
|
|
21
|
+
const rawComplex = node.kind === 'complexType' ? context.rawTypeProperties(node.id) : undefined;
|
|
22
|
+
if (rawComplex)
|
|
23
|
+
return rawComplex[property];
|
|
24
|
+
const rawSimple = node.kind === 'simpleType' ? context.rawSimpleTypeProperties(node.id) : undefined;
|
|
25
|
+
if (rawSimple)
|
|
26
|
+
return property === 'final' ? rawSimple.final : [];
|
|
27
|
+
const rawElement = node.kind === 'element' ? context.rawElementProperties(node.id) : undefined;
|
|
28
|
+
if (rawElement)
|
|
29
|
+
return rawElement[property];
|
|
30
|
+
if (!context.sourceNode(node.id))
|
|
31
|
+
throw new RelationProblem({ kind: 'unresolved', rule: 'missing-component-properties', component: node.id, message: 'Abstract helper flags require explicit component properties' });
|
|
32
|
+
context.budget.chargeWork(node.declaredAttributes.length * 8 + node.context.schemaAttributes.length * 8 + 1);
|
|
33
|
+
const lexical = node.declaredAttributes.find(a => a.name.namespace === '' && a.name.local === property)?.value
|
|
34
|
+
?? node.context.schemaAttributes.find(a => a.name.namespace === '' && a.name.local === property + 'Default')?.value ?? '';
|
|
35
|
+
context.budget.chargeWork(lexical.length * 5 + 16);
|
|
36
|
+
const allowed = node.kind === 'element' ? property === 'block' ? ['extension', 'restriction', 'substitution'] : ['extension', 'restriction']
|
|
37
|
+
: node.kind === 'simpleType' ? ['restriction', 'list', 'union'] : ['extension', 'restriction'];
|
|
38
|
+
const words = normalizeWhitespace(lexical, 'collapse').split(' ').filter(Boolean);
|
|
39
|
+
if (words.length === 1 && words[0] === '#all')
|
|
40
|
+
return allowed;
|
|
41
|
+
// Schema defaults contain methods that do not apply to this component category.
|
|
42
|
+
const explicit = node.declaredAttributes.some(a => !a.name.namespace && a.name.local === property);
|
|
43
|
+
const defaultAllowed = property === 'final' ? METHODS : ['extension', 'restriction', 'substitution'];
|
|
44
|
+
if (words.some(w => !(explicit ? allowed : defaultAllowed).includes(w))) {
|
|
45
|
+
throw new RelationProblem({ kind: 'invalid-input', rule: property + '-lexical', component: node.id, message: 'Invalid derivation token list' });
|
|
46
|
+
}
|
|
47
|
+
return words.filter(w => allowed.includes(w));
|
|
48
|
+
}
|
|
49
|
+
function kernel(context) {
|
|
50
|
+
const budget = context.budget, infos = new Map(), infoDependencies = new Map();
|
|
51
|
+
budget.chargeWork(3);
|
|
52
|
+
const directRelations = { children: new Map() };
|
|
53
|
+
const dependencies = new Set(), collectors = [];
|
|
54
|
+
let typeReads = collectSemanticTypeDependencies(context);
|
|
55
|
+
const typeCollectors = [];
|
|
56
|
+
const infoTypeDependencies = new Map();
|
|
57
|
+
const publishedReferences = new WeakSet();
|
|
58
|
+
const ownReference = (reference) => {
|
|
59
|
+
const owned = context.ownTypeReference(reference);
|
|
60
|
+
budget.chargeWork();
|
|
61
|
+
publishedReferences.add(owned);
|
|
62
|
+
return owned;
|
|
63
|
+
};
|
|
64
|
+
const publishValue = (value) => {
|
|
65
|
+
budget.chargeWork();
|
|
66
|
+
if (value === undefined || typeof value === 'boolean' || typeof value === 'object' && value !== null && publishedReferences.has(value))
|
|
67
|
+
return value;
|
|
68
|
+
return budget.freeze(budget.snapshot(value));
|
|
69
|
+
};
|
|
70
|
+
const typeDepend = (required) => { typeReads.add(required); for (const collector of typeCollectors)
|
|
71
|
+
collector.add(required); };
|
|
72
|
+
const depend = (key) => { budget.chargeWork(collectors.length + 1); dependencies.add(key); for (const collector of collectors)
|
|
73
|
+
collector.add(key); };
|
|
74
|
+
const problem = (rule, message, component) => {
|
|
75
|
+
throw new RelationProblem({ kind: 'unresolved', rule, message, component });
|
|
76
|
+
};
|
|
77
|
+
const resolve = (ref) => {
|
|
78
|
+
const value = resolveSemanticType(context, ref);
|
|
79
|
+
if (value.kind === 'missing' || value.kind === 'outside-context' || value.kind === 'wrong-role')
|
|
80
|
+
return problem('src-resolve', value.kind);
|
|
81
|
+
budget.chargeWork(4);
|
|
82
|
+
typeDepend([{ contextId: context.contextId, type: value.identity }]);
|
|
83
|
+
if (value.kind === 'builtin') {
|
|
84
|
+
budget.chargeWork(value.name.local.length * 2 + 16);
|
|
85
|
+
const key = 'builtin:' + value.name.local;
|
|
86
|
+
depend(key);
|
|
87
|
+
return { key, local: value.name.local };
|
|
88
|
+
}
|
|
89
|
+
if (value.kind === 'original-generated') {
|
|
90
|
+
budget.chargeWork(value.slot.owner.length + 4);
|
|
91
|
+
return { key: 'slot:' + value.slot.owner, slot: value.slot };
|
|
92
|
+
}
|
|
93
|
+
budget.chargeWork(value.node.id.length + 2);
|
|
94
|
+
depend(value.node.id);
|
|
95
|
+
return { key: value.node.id, node: value.node };
|
|
96
|
+
};
|
|
97
|
+
const info = (ref) => {
|
|
98
|
+
const selected = resolve(ref), cached = infos.get(selected.key);
|
|
99
|
+
if (cached) {
|
|
100
|
+
for (const dependency of infoDependencies.get(selected.key))
|
|
101
|
+
depend(dependency);
|
|
102
|
+
typeDepend(infoTypeDependencies.get(selected.key));
|
|
103
|
+
return cached;
|
|
104
|
+
}
|
|
105
|
+
budget.chargeWork(32);
|
|
106
|
+
const reads = new Set();
|
|
107
|
+
collectors.push(reads);
|
|
108
|
+
const typed = collectSemanticTypeDependencies(context);
|
|
109
|
+
typeCollectors.push(typed);
|
|
110
|
+
const publish = (row) => {
|
|
111
|
+
budget.chargeWork(reads.size + row.items.length + 12);
|
|
112
|
+
const owned = { ...row, ref: ownReference(row.ref), base: row.base ? ownReference(row.base) : undefined,
|
|
113
|
+
items: Object.freeze(row.items.map(ownReference)) };
|
|
114
|
+
infoDependencies.set(selected.key, [...reads]);
|
|
115
|
+
infoTypeDependencies.set(selected.key, typed.snapshot());
|
|
116
|
+
infos.set(selected.key, owned);
|
|
117
|
+
return owned;
|
|
118
|
+
};
|
|
119
|
+
try {
|
|
120
|
+
if (selected.local) {
|
|
121
|
+
const name = selected.local, list = ['NMTOKENS', 'IDREFS', 'ENTITIES'].includes(name);
|
|
122
|
+
const row = { key: selected.key, ref: builtin(name), variety: name === 'anyType' ? 'complex' : name === 'anySimpleType' ? 'simple-ur' : list ? 'list' : 'atomic',
|
|
123
|
+
base: name === 'anyType' ? undefined : name === 'anySimpleType' ? ur : builtin(builtinParents[name] ?? 'anySimpleType'),
|
|
124
|
+
method: 'restriction', final: [], block: [], items: [] };
|
|
125
|
+
return publish(row);
|
|
126
|
+
}
|
|
127
|
+
if (selected.slot) {
|
|
128
|
+
const shape = originalGeneratedShape(context, selected.slot);
|
|
129
|
+
if (shape.kind === 'resource-limit') {
|
|
130
|
+
budget.chargeWork();
|
|
131
|
+
throw new Error('Unreachable exhausted budget');
|
|
132
|
+
}
|
|
133
|
+
if (shape.kind !== 'checked')
|
|
134
|
+
return problem(shape.rule, shape.message, shape.component);
|
|
135
|
+
return publish({ key: selected.key, ref: selected.slot, variety: shape.value.variety, base: shape.value.base,
|
|
136
|
+
method: 'restriction', final: [], block: [], items: shape.value.members ?? [] });
|
|
137
|
+
}
|
|
138
|
+
const node = selected.node;
|
|
139
|
+
if (node.kind !== 'simpleType' && node.kind !== 'complexType')
|
|
140
|
+
return problem('type-operand', 'Expected a type definition', node.id);
|
|
141
|
+
const rawComplex = context.rawTypeProperties(node.id), rawSimple = context.rawSimpleTypeProperties(node.id);
|
|
142
|
+
if (rawComplex || rawSimple) {
|
|
143
|
+
const row = { key: selected.key, ref: { kind: 'local', target: selected.key },
|
|
144
|
+
variety: rawComplex ? 'complex' : rawSimple.variety.kind,
|
|
145
|
+
items: rawSimple?.variety.kind === 'union' ? rawSimple.variety.members : [],
|
|
146
|
+
base: rawComplex?.derivation.base ?? rawSimple.base,
|
|
147
|
+
method: rawComplex?.derivation.method ?? 'restriction', final: (rawComplex ?? rawSimple).final,
|
|
148
|
+
block: rawComplex?.block ?? [] };
|
|
149
|
+
return publish(row);
|
|
150
|
+
}
|
|
151
|
+
if (!context.sourceNode(node.id))
|
|
152
|
+
return problem('missing-type-component-properties', 'Abstract helper types require explicit component properties', node.id);
|
|
153
|
+
let variety = 'complex', items = [], sourceUnionMembers;
|
|
154
|
+
if (node.kind === 'simpleType') {
|
|
155
|
+
let current = node;
|
|
156
|
+
const seen = new Set();
|
|
157
|
+
while (current.kind === 'simpleType') {
|
|
158
|
+
budget.chargeWork(8);
|
|
159
|
+
if (seen.has(current.id))
|
|
160
|
+
return problem('st-props-correct', 'Type dependency cycle', current.id);
|
|
161
|
+
seen.add(current.id);
|
|
162
|
+
const abstract = context.rawSimpleTypeProperties(current.id);
|
|
163
|
+
if (abstract) {
|
|
164
|
+
variety = abstract.variety.kind;
|
|
165
|
+
if (abstract.variety.kind === 'union')
|
|
166
|
+
items = abstract.variety.members;
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
if (!context.sourceNode(current.id))
|
|
170
|
+
return problem('missing-type-component-properties', 'Abstract helper types require explicit component properties', current.id);
|
|
171
|
+
if (current.variety.kind !== 'restriction') {
|
|
172
|
+
variety = current.variety.kind;
|
|
173
|
+
if (current.variety.kind === 'union') {
|
|
174
|
+
items = current.variety.members;
|
|
175
|
+
sourceUnionMembers = true;
|
|
176
|
+
}
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
const base = resolve(current.variety.base);
|
|
180
|
+
if (base.local || base.slot) {
|
|
181
|
+
const inherited = info(current.variety.base);
|
|
182
|
+
variety = inherited.variety;
|
|
183
|
+
items = inherited.items;
|
|
184
|
+
sourceUnionMembers = inherited.sourceUnionMembers;
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
current = base.node;
|
|
188
|
+
}
|
|
189
|
+
if (current.kind !== 'simpleType')
|
|
190
|
+
return problem('st-props-correct', 'Simple type has a complex base', node.id);
|
|
191
|
+
}
|
|
192
|
+
const row = { key: selected.key, ref: { kind: 'local', target: selected.key }, variety, items, sourceUnionMembers,
|
|
193
|
+
base: node.kind === 'complexType' ? node.derivation?.base ?? ur : node.variety.kind === 'restriction' ? node.variety.base : simpleUr,
|
|
194
|
+
method: node.kind === 'complexType' ? node.derivation?.kind ?? 'restriction' : node.variety.kind,
|
|
195
|
+
final: declarationMethods(context, node, 'final'),
|
|
196
|
+
block: node.kind === 'complexType' ? declarationMethods(context, node, 'block') : [] };
|
|
197
|
+
return publish(row);
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
collectors.pop();
|
|
201
|
+
typeCollectors.pop();
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
function* unionMembers(root) {
|
|
205
|
+
if (!root.sourceUnionMembers) {
|
|
206
|
+
yield* root.items;
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
// XML component mapping replaces explicit unions by their effective
|
|
210
|
+
// members, including constrained unions. RAW and generated properties
|
|
211
|
+
// already supply that component property; they are authoritative stops.
|
|
212
|
+
const stack = [{ row: root, index: 0 }], active = new Set([root.key]);
|
|
213
|
+
while (stack.length) {
|
|
214
|
+
budget.chargeWork(5);
|
|
215
|
+
const frame = stack.at(-1);
|
|
216
|
+
if (frame.index === frame.row.items.length) {
|
|
217
|
+
active.delete(frame.row.key);
|
|
218
|
+
stack.pop();
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
const reference = frame.row.items[frame.index++], member = info(reference);
|
|
222
|
+
if (member.variety !== 'union') {
|
|
223
|
+
yield reference;
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
if (!member.sourceUnionMembers) {
|
|
227
|
+
for (const item of member.items) {
|
|
228
|
+
budget.chargeWork();
|
|
229
|
+
yield item;
|
|
230
|
+
}
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
if (active.has(member.key))
|
|
234
|
+
return problem('st-props-correct', 'Union member dependency cycle', member.key);
|
|
235
|
+
budget.chargeWork(4);
|
|
236
|
+
active.add(member.key);
|
|
237
|
+
stack.push({ row: member, index: 0 });
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
const validateMethods = (values) => {
|
|
241
|
+
budget.chargeWork(values.length + 1);
|
|
242
|
+
if (values.some(x => !METHODS.includes(x)))
|
|
243
|
+
throw new RelationProblem({ kind: 'invalid-input', rule: 'excluded-methods', message: 'Unknown excluded derivation method' });
|
|
244
|
+
return METHODS.filter(x => values.includes(x));
|
|
245
|
+
};
|
|
246
|
+
function* relationStep(query, excluded) {
|
|
247
|
+
const d = info(query.derived), b = info(query.base);
|
|
248
|
+
if (d.key === b.key)
|
|
249
|
+
return true;
|
|
250
|
+
if (!d.base)
|
|
251
|
+
return false;
|
|
252
|
+
const direct = info(d.base);
|
|
253
|
+
if (d.variety === 'complex') {
|
|
254
|
+
if (excluded.includes(d.method))
|
|
255
|
+
return false;
|
|
256
|
+
if (direct.key === b.key)
|
|
257
|
+
return true;
|
|
258
|
+
if (direct.key === 'builtin:anyType')
|
|
259
|
+
return false;
|
|
260
|
+
return yield { derived: d.base, base: query.base };
|
|
261
|
+
}
|
|
262
|
+
if (excluded.includes('restriction') || direct.final.includes('restriction'))
|
|
263
|
+
return false;
|
|
264
|
+
if (direct.key === b.key)
|
|
265
|
+
return true;
|
|
266
|
+
if (direct.key !== 'builtin:anyType') {
|
|
267
|
+
if (direct.variety === 'complex')
|
|
268
|
+
return problem('cos-st-derived-ok', 'Simple relation requires a simple base', d.key);
|
|
269
|
+
if (yield { derived: d.base, base: query.base })
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
if ((d.variety === 'list' || d.variety === 'union') && b.key === 'builtin:anySimpleType')
|
|
273
|
+
return true;
|
|
274
|
+
if (b.variety === 'union')
|
|
275
|
+
for (const member of unionMembers(b)) {
|
|
276
|
+
budget.chargeWork();
|
|
277
|
+
if (yield { derived: query.derived, base: member })
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
const typeDerivation = (derived, base, methods) => {
|
|
283
|
+
derived = ownReference(derived);
|
|
284
|
+
base = ownReference(base);
|
|
285
|
+
// Per-query pair memo prevents unrelated earlier reads from entering this
|
|
286
|
+
// receipt; reusable descriptors replay their own exact dependency reads.
|
|
287
|
+
const relations = new Map();
|
|
288
|
+
const excluded = validateMethods(methods);
|
|
289
|
+
const key = (q) => {
|
|
290
|
+
const d = resolve(q.derived).key, b = resolve(q.base).key;
|
|
291
|
+
budget.chargeWork(d.length + b.length + 40);
|
|
292
|
+
return JSON.stringify([d, b, excluded]);
|
|
293
|
+
};
|
|
294
|
+
const active = new Set(), stack = [];
|
|
295
|
+
const push = (q) => {
|
|
296
|
+
const k = key(q);
|
|
297
|
+
if (relations.has(k))
|
|
298
|
+
return relations.get(k);
|
|
299
|
+
if (active.has(k))
|
|
300
|
+
return problem('recursive-type-relation', 'Cyclic type/base/member dependency');
|
|
301
|
+
budget.chargeWork(8);
|
|
302
|
+
active.add(k);
|
|
303
|
+
stack.push({ key: k, iterator: relationStep(q, excluded), reply: false });
|
|
304
|
+
return undefined;
|
|
305
|
+
};
|
|
306
|
+
const known = push({ derived, base });
|
|
307
|
+
if (known !== undefined)
|
|
308
|
+
return known;
|
|
309
|
+
while (stack.length) {
|
|
310
|
+
budget.chargeWork(8);
|
|
311
|
+
const frame = stack.at(-1), step = frame.iterator.next(frame.reply);
|
|
312
|
+
if (step.done) {
|
|
313
|
+
relations.set(frame.key, step.value);
|
|
314
|
+
active.delete(frame.key);
|
|
315
|
+
stack.pop();
|
|
316
|
+
if (!stack.length)
|
|
317
|
+
return step.value;
|
|
318
|
+
stack.at(-1).reply = step.value;
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
const result = push(step.value);
|
|
322
|
+
if (result !== undefined)
|
|
323
|
+
frame.reply = result;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return false;
|
|
327
|
+
};
|
|
328
|
+
const directQuery = (rule, references, options, compute) => {
|
|
329
|
+
budget.chargeWork(2 + references.length * 2);
|
|
330
|
+
const owned = references.map(ownReference);
|
|
331
|
+
// These selectors have just passed context ownership and shape checks.
|
|
332
|
+
// Their exact fields select the same immutable component on every call
|
|
333
|
+
// in this context; a hit replays the original resolved dependencies.
|
|
334
|
+
budget.chargeWork(2 + owned.length * 12 + options.length * 2);
|
|
335
|
+
const parts = [rule, owned.length === 1 ? 'one' : 'two'];
|
|
336
|
+
for (const reference of owned) {
|
|
337
|
+
budget.chargeWork(3);
|
|
338
|
+
if (reference.kind === 'local')
|
|
339
|
+
parts.push('local', reference.target);
|
|
340
|
+
else if (reference.kind === 'original-generated')
|
|
341
|
+
parts.push('original-generated', reference.owner);
|
|
342
|
+
else if (reference.kind === 'builtin')
|
|
343
|
+
parts.push('builtin', reference.name.namespace, reference.name.local);
|
|
344
|
+
else {
|
|
345
|
+
parts.push('symbol', reference.role, reference.name.namespace, reference.name.local, reference.target === undefined ? 'without-target' : 'with-target');
|
|
346
|
+
if (reference.target !== undefined)
|
|
347
|
+
parts.push(reference.target);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
parts.push('options', ...options);
|
|
351
|
+
let node = directRelations;
|
|
352
|
+
for (const part of parts) {
|
|
353
|
+
budget.chargeWork(4 + part.length);
|
|
354
|
+
node = node?.children.get(part);
|
|
355
|
+
if (!node)
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
const prior = node?.entry;
|
|
359
|
+
if (prior) {
|
|
360
|
+
budget.chargeWork(6);
|
|
361
|
+
for (const dependency of prior.dependencies)
|
|
362
|
+
depend(dependency);
|
|
363
|
+
typeDepend(prior.typeDependencies);
|
|
364
|
+
return prior.value;
|
|
365
|
+
}
|
|
366
|
+
for (const reference of owned)
|
|
367
|
+
resolve(reference);
|
|
368
|
+
const value = compute(owned);
|
|
369
|
+
const typeDependencies = typeReads.snapshot();
|
|
370
|
+
budget.chargeWork(8 + dependencies.size * 3 + typeDependencies.length * 2);
|
|
371
|
+
let location = directRelations;
|
|
372
|
+
for (const part of parts) {
|
|
373
|
+
budget.chargeWork(4 + part.length);
|
|
374
|
+
let next = location.children.get(part);
|
|
375
|
+
if (!next) {
|
|
376
|
+
budget.chargeWork(3);
|
|
377
|
+
next = { children: new Map() };
|
|
378
|
+
location.children.set(part, next);
|
|
379
|
+
}
|
|
380
|
+
location = next;
|
|
381
|
+
}
|
|
382
|
+
location.entry = Object.freeze({ value, dependencies: Object.freeze([...dependencies]), typeDependencies });
|
|
383
|
+
return value;
|
|
384
|
+
};
|
|
385
|
+
const immediateFinal = (ref) => {
|
|
386
|
+
ref = ownReference(ref);
|
|
387
|
+
const d = info(ref), resolved = resolve(ref), node = resolved.node;
|
|
388
|
+
const raw = node ? context.rawSimpleTypeProperties(node.id) : undefined;
|
|
389
|
+
if (raw) {
|
|
390
|
+
if (info(raw.base).key !== 'builtin:anySimpleType')
|
|
391
|
+
return !info(raw.base).final.includes('restriction');
|
|
392
|
+
const method = raw.variety.kind;
|
|
393
|
+
if (method === 'atomic')
|
|
394
|
+
return false;
|
|
395
|
+
const refs = method === 'list' ? [raw.variety.item] : raw.variety.members;
|
|
396
|
+
for (const member of refs) {
|
|
397
|
+
budget.chargeWork();
|
|
398
|
+
if (info(member).final.includes(method))
|
|
399
|
+
return false;
|
|
400
|
+
}
|
|
401
|
+
return true;
|
|
402
|
+
}
|
|
403
|
+
if (node?.kind === 'simpleType' && node.variety.kind !== 'restriction') {
|
|
404
|
+
const refs = node.variety.kind === 'list' ? [node.variety.item] : node.variety.members;
|
|
405
|
+
for (const member of refs) {
|
|
406
|
+
budget.chargeWork();
|
|
407
|
+
if (info(member).final.includes(node.variety.kind))
|
|
408
|
+
return false;
|
|
409
|
+
}
|
|
410
|
+
return true;
|
|
411
|
+
}
|
|
412
|
+
return !d.base || !info(d.base).final.includes(d.method);
|
|
413
|
+
};
|
|
414
|
+
const element = (id) => {
|
|
415
|
+
const result = context.lookup(id);
|
|
416
|
+
if (result.kind !== 'found' || result.node.kind !== 'element')
|
|
417
|
+
return problem('element-operand', 'Expected an active element declaration', id);
|
|
418
|
+
depend(id);
|
|
419
|
+
return result.node;
|
|
420
|
+
};
|
|
421
|
+
const affiliation = (member, head) => {
|
|
422
|
+
const seen = new Set();
|
|
423
|
+
let current = member;
|
|
424
|
+
while (current.id !== head.id) {
|
|
425
|
+
budget.chargeWork(8);
|
|
426
|
+
if (seen.has(current.id))
|
|
427
|
+
return problem('cos-equiv-derived-ok-rec', 'Affiliation cycle', current.id);
|
|
428
|
+
seen.add(current.id);
|
|
429
|
+
if (!current.substitutionGroup)
|
|
430
|
+
return false;
|
|
431
|
+
const found = context.resolve(current.substitutionGroup);
|
|
432
|
+
const target = { node: found.kind === 'found' ? found.node : undefined };
|
|
433
|
+
if (!target.node || target.node.kind !== 'element')
|
|
434
|
+
return problem('e-props-correct.4', 'Affiliation does not name an element', current.id);
|
|
435
|
+
depend(target.node.id);
|
|
436
|
+
current = target.node;
|
|
437
|
+
}
|
|
438
|
+
return true;
|
|
439
|
+
};
|
|
440
|
+
const substitutionTypes = (derived, base, blocking) => {
|
|
441
|
+
const queue = [{ kind: 'type', d: derived, b: base, methods: [], blocks: blocking.filter(x => METHODS.includes(x)) }];
|
|
442
|
+
const visited = new Set();
|
|
443
|
+
while (queue.length) {
|
|
444
|
+
budget.chargeWork(16);
|
|
445
|
+
const task = queue.pop();
|
|
446
|
+
if (task.kind === 'members') {
|
|
447
|
+
// Resolve the next alternative only after the preceding one fails.
|
|
448
|
+
const next = task.members.next();
|
|
449
|
+
if (!next.done) {
|
|
450
|
+
budget.chargeWork(12);
|
|
451
|
+
queue.push(task, { kind: 'type', d: task.source, b: next.value, methods: task.methods, blocks: task.blocks });
|
|
452
|
+
}
|
|
453
|
+
continue;
|
|
454
|
+
}
|
|
455
|
+
const d = info(task.d), b = info(task.b);
|
|
456
|
+
budget.chargeWork(d.key.length + b.key.length + (task.methods.length + task.blocks.length) * 16 + 8);
|
|
457
|
+
const key = JSON.stringify([d.key, b.key, task.methods, task.blocks]);
|
|
458
|
+
if (visited.has(key))
|
|
459
|
+
continue;
|
|
460
|
+
visited.add(key);
|
|
461
|
+
if (!typeDerivation(task.d, task.b, []))
|
|
462
|
+
continue;
|
|
463
|
+
let current = d, methods = [...task.methods], blocks = [...task.blocks];
|
|
464
|
+
const seen = new Set();
|
|
465
|
+
let simple, prefixMethods = methods, prefixBlocks = blocks;
|
|
466
|
+
while (true) {
|
|
467
|
+
budget.chargeWork(16);
|
|
468
|
+
if (current.key === b.key) {
|
|
469
|
+
if (!methods.some(m => blocks.includes(m)))
|
|
470
|
+
return true;
|
|
471
|
+
break;
|
|
472
|
+
}
|
|
473
|
+
if (seen.has(current.key))
|
|
474
|
+
return problem('cos-equiv-derived-ok-rec', 'Type cycle', current.key);
|
|
475
|
+
seen.add(current.key);
|
|
476
|
+
if (!current.base)
|
|
477
|
+
break;
|
|
478
|
+
if (current.variety !== 'complex' && !simple) {
|
|
479
|
+
simple = current;
|
|
480
|
+
prefixMethods = [...methods];
|
|
481
|
+
prefixBlocks = [...blocks];
|
|
482
|
+
}
|
|
483
|
+
const method = current.variety === 'complex' ? current.method : 'restriction';
|
|
484
|
+
if (!methods.includes(method))
|
|
485
|
+
methods.push(method);
|
|
486
|
+
current = info(current.base);
|
|
487
|
+
for (const block of current.block)
|
|
488
|
+
if (!blocks.includes(block))
|
|
489
|
+
blocks.push(block);
|
|
490
|
+
}
|
|
491
|
+
if (b.variety === 'union' && simple) {
|
|
492
|
+
budget.chargeWork(8);
|
|
493
|
+
queue.push({ kind: 'members', members: unionMembers(b), source: simple.ref, methods: prefixMethods, blocks: prefixBlocks });
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
return false;
|
|
497
|
+
};
|
|
498
|
+
const substitution = (memberId, headId, options) => {
|
|
499
|
+
const member = element(memberId), head = element(headId);
|
|
500
|
+
if (options.mode === 'affiliation') {
|
|
501
|
+
const direct = member.substitutionGroup ? context.resolve(member.substitutionGroup) : undefined;
|
|
502
|
+
return direct?.kind === 'found' && direct.node.id === head.id
|
|
503
|
+
&& typeDerivation(declaredType(context, member), declaredType(context, head), declarationMethods(context, head, 'final'));
|
|
504
|
+
}
|
|
505
|
+
if (options.mode !== 'substitutability')
|
|
506
|
+
throw new RelationProblem({ kind: 'invalid-input', rule: 'substitution-mode', message: 'Unknown substitution mode' });
|
|
507
|
+
const blocks = options.blocking ?? declarationMethods(context, head, 'block');
|
|
508
|
+
budget.chargeWork(blocks.length * 8 + 1);
|
|
509
|
+
if (blocks.some(method => !['extension', 'restriction', 'substitution'].includes(method)))
|
|
510
|
+
throw new RelationProblem({ kind: 'invalid-input', rule: 'substitution-blocking', message: 'Unknown blocking method' });
|
|
511
|
+
if (member.id === head.id)
|
|
512
|
+
return true;
|
|
513
|
+
return !blocks.includes('substitution') && affiliation(member, head) && substitutionTypes(declaredType(context, member), declaredType(context, head), blocks);
|
|
514
|
+
};
|
|
515
|
+
const members = (headId) => {
|
|
516
|
+
const head = element(headId);
|
|
517
|
+
if (head.identity.kind !== 'global')
|
|
518
|
+
return problem('cos-equiv-class', 'Substitution head must be global', headId);
|
|
519
|
+
const result = [], queue = [headId], seen = new Set();
|
|
520
|
+
let cursor = 0;
|
|
521
|
+
while (cursor < queue.length) {
|
|
522
|
+
budget.chargeWork(4);
|
|
523
|
+
const id = queue[cursor++];
|
|
524
|
+
if (seen.has(id))
|
|
525
|
+
continue;
|
|
526
|
+
seen.add(id);
|
|
527
|
+
const declaration = element(id);
|
|
528
|
+
if (!declaration.abstract && substitution(id, headId, { mode: 'substitutability' }))
|
|
529
|
+
result.push(id);
|
|
530
|
+
for (const incoming of context.incomingAffiliates(id)) {
|
|
531
|
+
budget.chargeWork();
|
|
532
|
+
queue.push(incoming);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
return budget.sorted(result, budget.compareText);
|
|
536
|
+
};
|
|
537
|
+
return { typeDerivation: (derived, base, methods) => {
|
|
538
|
+
const excluded = validateMethods(methods);
|
|
539
|
+
return directQuery('type-derivation', [derived, base], excluded, owned => typeDerivation(owned[0], owned[1], excluded));
|
|
540
|
+
},
|
|
541
|
+
immediateFinal: (reference) => directQuery('immediate-final', [reference], [], owned => immediateFinal(owned[0])),
|
|
542
|
+
substitution, members, dependencies, publishValue, resetTypes: () => { typeReads = collectSemanticTypeDependencies(context); }, typeDependencies: () => typeReads.snapshot(),
|
|
543
|
+
immediateBase: (reference) => directQuery('immediate-base', [reference], [], owned => info(owned[0]).base) };
|
|
544
|
+
}
|
|
545
|
+
function run(context, operation, obligations = ['component-validity']) {
|
|
546
|
+
assertSemanticContext(context);
|
|
547
|
+
return context.budget.guard(() => {
|
|
548
|
+
try {
|
|
549
|
+
context.budget.chargeWork();
|
|
550
|
+
let owner = state.get(context);
|
|
551
|
+
if (!owner) {
|
|
552
|
+
owner = kernel(context);
|
|
553
|
+
state.set(context, owner);
|
|
554
|
+
}
|
|
555
|
+
owner.dependencies.clear();
|
|
556
|
+
owner.resetTypes();
|
|
557
|
+
const value = operation(owner);
|
|
558
|
+
const ownedValue = owner.publishValue(value), typeDependencies = owner.typeDependencies();
|
|
559
|
+
// These strings are private dependency keys and fixed obligation tokens;
|
|
560
|
+
// their immutable values need only a reserved shallow array publication.
|
|
561
|
+
context.budget.chargeWork(owner.dependencies.size + obligations.length + 32 + context.contextId.length);
|
|
562
|
+
return Object.freeze({ kind: 'checked', value: ownedValue, contextId: context.contextId, authority: 'XSD10-local-relations-v1',
|
|
563
|
+
obligations: Object.freeze([...obligations]), dependencies: Object.freeze([...owner.dependencies]), typeDependencies });
|
|
564
|
+
}
|
|
565
|
+
catch (error) {
|
|
566
|
+
if (error instanceof RelationProblem)
|
|
567
|
+
return context.budget.freeze(context.budget.snapshot(error.result));
|
|
568
|
+
throw error;
|
|
569
|
+
}
|
|
570
|
+
});
|
|
571
|
+
}
|
|
572
|
+
export const checkTypeDerivation = (context, derived, base, excluded) => run(context, owner => owner.typeDerivation(derived, base, excluded));
|
|
573
|
+
export const checkImmediateTypeFinal = (context, derived) => run(context, owner => owner.immediateFinal(derived));
|
|
574
|
+
export const immediateTypeBase = (context, reference) => run(context, owner => owner.immediateBase(reference));
|
|
575
|
+
export const checkSubstitution = (context, member, head, options) => run(context, owner => owner.substitution(member, head, options));
|
|
576
|
+
export const effectiveSubstitutionMembers = (context, head) => run(context, owner => owner.members(head), context.membership === 'structural-subset' ? ['component-validity', 'complete-substitution-universe'] : ['component-validity']);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Regular preimage of the RFC2396/2732 assessor below, before XLink escaping.
|
|
2
|
+
* Every escaped source character contributes one or more percent octets;
|
|
3
|
+
* these are legal in precisely the generic URI-token positions. Raw percent
|
|
4
|
+
* signs still require their two hexadecimal digits. IPv6 has eight 16-bit
|
|
5
|
+
* units, with an embedded IPv4 tail consuming two and :: omitting at least one.
|
|
6
|
+
*/
|
|
7
|
+
export declare function schemaUriExpression<Owner>(owner: Owner, c: {
|
|
8
|
+
step(node: Owner, count?: number): void;
|
|
9
|
+
}): string;
|
|
10
|
+
export declare function schemaUri<Owner>(value: string, owner: Owner, c: {
|
|
11
|
+
step(node: Owner, count?: number): void;
|
|
12
|
+
}): boolean;
|
|
13
|
+
//# sourceMappingURL=schemaUri.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaUri.d.ts","sourceRoot":"","sources":["../../src/compiler/schemaUri.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;IAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAC,GAAG,MAAM,CAgC7G;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;IAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAC,GAAG,OAAO,CA2CnH"}
|