@techspokes/typescript-wsdl-client 1.1.4 → 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.
Files changed (355) hide show
  1. package/README.md +49 -1
  2. package/dist/app/generateApp.d.ts.map +1 -1
  3. package/dist/app/generateApp.js +8 -6
  4. package/dist/cli.js +49 -5
  5. package/dist/client/checkedDirectRuntime.d.ts +59 -0
  6. package/dist/client/checkedDirectRuntime.d.ts.map +1 -0
  7. package/dist/client/checkedDirectRuntime.js +23 -0
  8. package/dist/client/directClientRuntime.d.ts +49 -0
  9. package/dist/client/directClientRuntime.d.ts.map +1 -0
  10. package/dist/client/directClientRuntime.js +112 -0
  11. package/dist/client/directClientVersion.d.ts +4 -0
  12. package/dist/client/directClientVersion.d.ts.map +1 -0
  13. package/dist/client/directClientVersion.js +3 -0
  14. package/dist/client/generateDirectClient.d.ts +14 -0
  15. package/dist/client/generateDirectClient.d.ts.map +1 -0
  16. package/dist/client/generateDirectClient.js +136 -0
  17. package/dist/compiler/buildCanonicalGraph.d.ts +7 -0
  18. package/dist/compiler/buildCanonicalGraph.d.ts.map +1 -0
  19. package/dist/compiler/buildCanonicalGraph.js +381 -0
  20. package/dist/compiler/canonicalGraph.d.ts +198 -0
  21. package/dist/compiler/canonicalGraph.d.ts.map +1 -0
  22. package/dist/compiler/canonicalGraph.js +37 -0
  23. package/dist/compiler/catalogErrors.d.ts +18 -0
  24. package/dist/compiler/catalogErrors.d.ts.map +1 -0
  25. package/dist/compiler/catalogErrors.js +86 -0
  26. package/dist/compiler/catalogProvenance.d.ts +15 -0
  27. package/dist/compiler/catalogProvenance.d.ts.map +1 -0
  28. package/dist/compiler/catalogProvenance.js +229 -0
  29. package/dist/compiler/checkedAssessment.d.ts +91 -0
  30. package/dist/compiler/checkedAssessment.d.ts.map +1 -0
  31. package/dist/compiler/checkedAssessment.js +300 -0
  32. package/dist/compiler/checkedSourcePreparation.d.ts +35 -0
  33. package/dist/compiler/checkedSourcePreparation.d.ts.map +1 -0
  34. package/dist/compiler/checkedSourcePreparation.js +131 -0
  35. package/dist/compiler/complexTypeContent.d.ts +59 -0
  36. package/dist/compiler/complexTypeContent.d.ts.map +1 -0
  37. package/dist/compiler/complexTypeContent.js +558 -0
  38. package/dist/compiler/composeCanonicalGraph.d.ts +69 -0
  39. package/dist/compiler/composeCanonicalGraph.d.ts.map +1 -0
  40. package/dist/compiler/composeCanonicalGraph.js +252 -0
  41. package/dist/compiler/dataOwnership.d.ts +22 -0
  42. package/dist/compiler/dataOwnership.d.ts.map +1 -0
  43. package/dist/compiler/dataOwnership.js +157 -0
  44. package/dist/compiler/datatypeValues.d.ts +47 -0
  45. package/dist/compiler/datatypeValues.d.ts.map +1 -0
  46. package/dist/compiler/datatypeValues.js +275 -0
  47. package/dist/compiler/directCodec.d.ts +59 -0
  48. package/dist/compiler/directCodec.d.ts.map +1 -0
  49. package/dist/compiler/directCodec.js +192 -0
  50. package/dist/compiler/directExecutionPolicy.d.ts +10 -0
  51. package/dist/compiler/directExecutionPolicy.d.ts.map +1 -0
  52. package/dist/compiler/directExecutionPolicy.js +17 -0
  53. package/dist/compiler/directOperation.d.ts +72 -0
  54. package/dist/compiler/directOperation.d.ts.map +1 -0
  55. package/dist/compiler/directOperation.js +282 -0
  56. package/dist/compiler/directSoap.d.ts +42 -0
  57. package/dist/compiler/directSoap.d.ts.map +1 -0
  58. package/dist/compiler/directSoap.js +298 -0
  59. package/dist/compiler/directSoapSource.d.ts +15 -0
  60. package/dist/compiler/directSoapSource.d.ts.map +1 -0
  61. package/dist/compiler/directSoapSource.js +86 -0
  62. package/dist/compiler/directSourceCapsule.d.ts +97 -0
  63. package/dist/compiler/directSourceCapsule.d.ts.map +1 -0
  64. package/dist/compiler/directSourceCapsule.js +305 -0
  65. package/dist/compiler/directStructure.d.ts +51 -0
  66. package/dist/compiler/directStructure.d.ts.map +1 -0
  67. package/dist/compiler/directStructure.js +252 -0
  68. package/dist/compiler/directStructurePlan.d.ts +16 -0
  69. package/dist/compiler/directStructurePlan.d.ts.map +1 -0
  70. package/dist/compiler/directStructurePlan.js +58 -0
  71. package/dist/compiler/directValues.d.ts +69 -0
  72. package/dist/compiler/directValues.d.ts.map +1 -0
  73. package/dist/compiler/directValues.js +282 -0
  74. package/dist/compiler/finiteRe01Verification.d.ts +140 -0
  75. package/dist/compiler/finiteRe01Verification.d.ts.map +1 -0
  76. package/dist/compiler/finiteRe01Verification.js +830 -0
  77. package/dist/compiler/graphTraversal.d.ts +11 -0
  78. package/dist/compiler/graphTraversal.d.ts.map +1 -0
  79. package/dist/compiler/graphTraversal.js +37 -0
  80. package/dist/compiler/hypotheticalScopedIdentity.d.ts +23 -0
  81. package/dist/compiler/hypotheticalScopedIdentity.d.ts.map +1 -0
  82. package/dist/compiler/hypotheticalScopedIdentity.js +81 -0
  83. package/dist/compiler/occurrenceAnalysis.d.ts +65 -0
  84. package/dist/compiler/occurrenceAnalysis.d.ts.map +1 -0
  85. package/dist/compiler/occurrenceAnalysis.js +300 -0
  86. package/dist/compiler/originalSourceMembership.d.ts +6 -0
  87. package/dist/compiler/originalSourceMembership.d.ts.map +1 -0
  88. package/dist/compiler/originalSourceMembership.js +31 -0
  89. package/dist/compiler/particleAttribution.d.ts +17 -0
  90. package/dist/compiler/particleAttribution.d.ts.map +1 -0
  91. package/dist/compiler/particleAttribution.js +474 -0
  92. package/dist/compiler/particleDeclarationConsistency.d.ts +24 -0
  93. package/dist/compiler/particleDeclarationConsistency.d.ts.map +1 -0
  94. package/dist/compiler/particleDeclarationConsistency.js +197 -0
  95. package/dist/compiler/particleExtension.d.ts +22 -0
  96. package/dist/compiler/particleExtension.d.ts.map +1 -0
  97. package/dist/compiler/particleExtension.js +119 -0
  98. package/dist/compiler/particleLocalAssessment.d.ts +20 -0
  99. package/dist/compiler/particleLocalAssessment.d.ts.map +1 -0
  100. package/dist/compiler/particleLocalAssessment.js +92 -0
  101. package/dist/compiler/particleRestriction.d.ts +24 -0
  102. package/dist/compiler/particleRestriction.d.ts.map +1 -0
  103. package/dist/compiler/particleRestriction.js +489 -0
  104. package/dist/compiler/particleSemanticView.d.ts +50 -0
  105. package/dist/compiler/particleSemanticView.d.ts.map +1 -0
  106. package/dist/compiler/particleSemanticView.js +297 -0
  107. package/dist/compiler/particleWildcardRelation.d.ts +88 -0
  108. package/dist/compiler/particleWildcardRelation.d.ts.map +1 -0
  109. package/dist/compiler/particleWildcardRelation.js +143 -0
  110. package/dist/compiler/re01CandidateCorrespondence.d.ts +64 -0
  111. package/dist/compiler/re01CandidateCorrespondence.d.ts.map +1 -0
  112. package/dist/compiler/re01CandidateCorrespondence.js +572 -0
  113. package/dist/compiler/re01TypeProperties.d.ts +71 -0
  114. package/dist/compiler/re01TypeProperties.d.ts.map +1 -0
  115. package/dist/compiler/re01TypeProperties.js +120 -0
  116. package/dist/compiler/re01TypePropertyValidation.d.ts +23 -0
  117. package/dist/compiler/re01TypePropertyValidation.d.ts.map +1 -0
  118. package/dist/compiler/re01TypePropertyValidation.js +161 -0
  119. package/dist/compiler/resolveCanonicalGraph.d.ts +38 -0
  120. package/dist/compiler/resolveCanonicalGraph.d.ts.map +1 -0
  121. package/dist/compiler/resolveCanonicalGraph.js +170 -0
  122. package/dist/compiler/scalarSchemaAssessment.d.ts +425 -0
  123. package/dist/compiler/scalarSchemaAssessment.d.ts.map +1 -0
  124. package/dist/compiler/scalarSchemaAssessment.js +5198 -0
  125. package/dist/compiler/schemaAttributeGroupProperties.d.ts +17 -0
  126. package/dist/compiler/schemaAttributeGroupProperties.d.ts.map +1 -0
  127. package/dist/compiler/schemaAttributeGroupProperties.js +53 -0
  128. package/dist/compiler/schemaAttributeProperties.d.ts +10 -0
  129. package/dist/compiler/schemaAttributeProperties.d.ts.map +1 -0
  130. package/dist/compiler/schemaAttributeProperties.js +11 -0
  131. package/dist/compiler/schemaAttributeUses.d.ts +90 -0
  132. package/dist/compiler/schemaAttributeUses.d.ts.map +1 -0
  133. package/dist/compiler/schemaAttributeUses.js +725 -0
  134. package/dist/compiler/schemaBinaryWordReconstruction.d.ts +10 -0
  135. package/dist/compiler/schemaBinaryWordReconstruction.d.ts.map +1 -0
  136. package/dist/compiler/schemaBinaryWordReconstruction.js +33 -0
  137. package/dist/compiler/schemaBuiltinFacets.d.ts +14 -0
  138. package/dist/compiler/schemaBuiltinFacets.d.ts.map +1 -0
  139. package/dist/compiler/schemaBuiltinFacets.js +51 -0
  140. package/dist/compiler/schemaCalendarImages.d.ts +8 -0
  141. package/dist/compiler/schemaCalendarImages.d.ts.map +1 -0
  142. package/dist/compiler/schemaCalendarImages.js +204 -0
  143. package/dist/compiler/schemaCalendarLanguage.d.ts +11 -0
  144. package/dist/compiler/schemaCalendarLanguage.d.ts.map +1 -0
  145. package/dist/compiler/schemaCalendarLanguage.js +227 -0
  146. package/dist/compiler/schemaComponentEquality.d.ts +28 -0
  147. package/dist/compiler/schemaComponentEquality.d.ts.map +1 -0
  148. package/dist/compiler/schemaComponentEquality.js +446 -0
  149. package/dist/compiler/schemaConstructionAssessment.d.ts +46 -0
  150. package/dist/compiler/schemaConstructionAssessment.d.ts.map +1 -0
  151. package/dist/compiler/schemaConstructionAssessment.js +663 -0
  152. package/dist/compiler/schemaDatatypeValues.d.ts +4 -0
  153. package/dist/compiler/schemaDatatypeValues.d.ts.map +1 -0
  154. package/dist/compiler/schemaDatatypeValues.js +2 -0
  155. package/dist/compiler/schemaDecimalLanguage.d.ts +7 -0
  156. package/dist/compiler/schemaDecimalLanguage.d.ts.map +1 -0
  157. package/dist/compiler/schemaDecimalLanguage.js +102 -0
  158. package/dist/compiler/schemaDeclarationPrimitives.d.ts +34 -0
  159. package/dist/compiler/schemaDeclarationPrimitives.d.ts.map +1 -0
  160. package/dist/compiler/schemaDeclarationPrimitives.js +194 -0
  161. package/dist/compiler/schemaDocumentSyntax.d.ts +55 -0
  162. package/dist/compiler/schemaDocumentSyntax.d.ts.map +1 -0
  163. package/dist/compiler/schemaDocumentSyntax.js +294 -0
  164. package/dist/compiler/schemaDurationLanguage.d.ts +11 -0
  165. package/dist/compiler/schemaDurationLanguage.d.ts.map +1 -0
  166. package/dist/compiler/schemaDurationLanguage.js +170 -0
  167. package/dist/compiler/schemaElementProperties.d.ts +16 -0
  168. package/dist/compiler/schemaElementProperties.d.ts.map +1 -0
  169. package/dist/compiler/schemaElementProperties.js +23 -0
  170. package/dist/compiler/schemaEndpointWordCapacity.d.ts +36 -0
  171. package/dist/compiler/schemaEndpointWordCapacity.d.ts.map +1 -0
  172. package/dist/compiler/schemaEndpointWordCapacity.js +39 -0
  173. package/dist/compiler/schemaExactCalendar.d.ts +73 -0
  174. package/dist/compiler/schemaExactCalendar.d.ts.map +1 -0
  175. package/dist/compiler/schemaExactCalendar.js +264 -0
  176. package/dist/compiler/schemaFacetAnnotation.d.ts +32 -0
  177. package/dist/compiler/schemaFacetAnnotation.d.ts.map +1 -0
  178. package/dist/compiler/schemaFacetAnnotation.js +199 -0
  179. package/dist/compiler/schemaGeneratedScalarShape.d.ts +35 -0
  180. package/dist/compiler/schemaGeneratedScalarShape.d.ts.map +1 -0
  181. package/dist/compiler/schemaGeneratedScalarShape.js +176 -0
  182. package/dist/compiler/schemaIdentityConstraints.d.ts +73 -0
  183. package/dist/compiler/schemaIdentityConstraints.d.ts.map +1 -0
  184. package/dist/compiler/schemaIdentityConstraints.js +362 -0
  185. package/dist/compiler/schemaIeeeLanguage.d.ts +43 -0
  186. package/dist/compiler/schemaIeeeLanguage.d.ts.map +1 -0
  187. package/dist/compiler/schemaIeeeLanguage.js +759 -0
  188. package/dist/compiler/schemaIntegerImages.d.ts +11 -0
  189. package/dist/compiler/schemaIntegerImages.d.ts.map +1 -0
  190. package/dist/compiler/schemaIntegerImages.js +113 -0
  191. package/dist/compiler/schemaLexicalPredicates.d.ts +29 -0
  192. package/dist/compiler/schemaLexicalPredicates.d.ts.map +1 -0
  193. package/dist/compiler/schemaLexicalPredicates.js +63 -0
  194. package/dist/compiler/schemaNotationProperties.d.ts +32 -0
  195. package/dist/compiler/schemaNotationProperties.d.ts.map +1 -0
  196. package/dist/compiler/schemaNotationProperties.js +84 -0
  197. package/dist/compiler/schemaNumericImageConditions.d.ts +24 -0
  198. package/dist/compiler/schemaNumericImageConditions.d.ts.map +1 -0
  199. package/dist/compiler/schemaNumericImageConditions.js +66 -0
  200. package/dist/compiler/schemaParticleWildcardProperties.d.ts +20 -0
  201. package/dist/compiler/schemaParticleWildcardProperties.d.ts.map +1 -0
  202. package/dist/compiler/schemaParticleWildcardProperties.js +43 -0
  203. package/dist/compiler/schemaPattern.d.ts +1062 -0
  204. package/dist/compiler/schemaPattern.d.ts.map +1 -0
  205. package/dist/compiler/schemaPattern.js +581 -0
  206. package/dist/compiler/schemaRegularLanguage.d.ts +67 -0
  207. package/dist/compiler/schemaRegularLanguage.d.ts.map +1 -0
  208. package/dist/compiler/schemaRegularLanguage.js +1166 -0
  209. package/dist/compiler/schemaScalarContext.d.ts +81 -0
  210. package/dist/compiler/schemaScalarContext.d.ts.map +1 -0
  211. package/dist/compiler/schemaScalarContext.js +78 -0
  212. package/dist/compiler/schemaScalarKernel.d.ts +182 -0
  213. package/dist/compiler/schemaScalarKernel.d.ts.map +1 -0
  214. package/dist/compiler/schemaScalarKernel.js +391 -0
  215. package/dist/compiler/schemaScalarWitnesses.d.ts +6 -0
  216. package/dist/compiler/schemaScalarWitnesses.d.ts.map +1 -0
  217. package/dist/compiler/schemaScalarWitnesses.js +118 -0
  218. package/dist/compiler/schemaSimpleTypeProperties.d.ts +95 -0
  219. package/dist/compiler/schemaSimpleTypeProperties.d.ts.map +1 -0
  220. package/dist/compiler/schemaSimpleTypeProperties.js +103 -0
  221. package/dist/compiler/schemaSourceGrammar.d.ts +27 -0
  222. package/dist/compiler/schemaSourceGrammar.d.ts.map +1 -0
  223. package/dist/compiler/schemaSourceGrammar.js +290 -0
  224. package/dist/compiler/schemaSourceLexical.d.ts +4 -0
  225. package/dist/compiler/schemaSourceLexical.d.ts.map +1 -0
  226. package/dist/compiler/schemaSourceLexical.js +12 -0
  227. package/dist/compiler/schemaSourceValues.d.ts +51 -0
  228. package/dist/compiler/schemaSourceValues.d.ts.map +1 -0
  229. package/dist/compiler/schemaSourceValues.js +225 -0
  230. package/dist/compiler/schemaSourceWildcards.d.ts +28 -0
  231. package/dist/compiler/schemaSourceWildcards.d.ts.map +1 -0
  232. package/dist/compiler/schemaSourceWildcards.js +247 -0
  233. package/dist/compiler/schemaSymbolicSequences.d.ts +16 -0
  234. package/dist/compiler/schemaSymbolicSequences.d.ts.map +1 -0
  235. package/dist/compiler/schemaSymbolicSequences.js +99 -0
  236. package/dist/compiler/schemaSymbolicValueSets.d.ts +32 -0
  237. package/dist/compiler/schemaSymbolicValueSets.d.ts.map +1 -0
  238. package/dist/compiler/schemaSymbolicValueSets.js +149 -0
  239. package/dist/compiler/schemaSyntaxAssessment.d.ts +25 -0
  240. package/dist/compiler/schemaSyntaxAssessment.d.ts.map +1 -0
  241. package/dist/compiler/schemaSyntaxAssessment.js +361 -0
  242. package/dist/compiler/schemaTemporalAliases.d.ts +6 -0
  243. package/dist/compiler/schemaTemporalAliases.d.ts.map +1 -0
  244. package/dist/compiler/schemaTemporalAliases.js +195 -0
  245. package/dist/compiler/schemaTokenImages.d.ts +9 -0
  246. package/dist/compiler/schemaTokenImages.d.ts.map +1 -0
  247. package/dist/compiler/schemaTokenImages.js +142 -0
  248. package/dist/compiler/schemaTypeIdentity.d.ts +39 -0
  249. package/dist/compiler/schemaTypeIdentity.d.ts.map +1 -0
  250. package/dist/compiler/schemaTypeIdentity.js +78 -0
  251. package/dist/compiler/schemaTypeRelations.d.ts +38 -0
  252. package/dist/compiler/schemaTypeRelations.d.ts.map +1 -0
  253. package/dist/compiler/schemaTypeRelations.js +576 -0
  254. package/dist/compiler/schemaUri.d.ts +13 -0
  255. package/dist/compiler/schemaUri.d.ts.map +1 -0
  256. package/dist/compiler/schemaUri.js +103 -0
  257. package/dist/compiler/schemaValueContext.d.ts +26 -0
  258. package/dist/compiler/schemaValueContext.d.ts.map +1 -0
  259. package/dist/compiler/schemaValueContext.js +1 -0
  260. package/dist/compiler/schemaValueImages.d.ts +10 -0
  261. package/dist/compiler/schemaValueImages.d.ts.map +1 -0
  262. package/dist/compiler/schemaValueImages.js +142 -0
  263. package/dist/compiler/schemaValueSequences.d.ts +15 -0
  264. package/dist/compiler/schemaValueSequences.d.ts.map +1 -0
  265. package/dist/compiler/schemaValueSequences.js +19 -0
  266. package/dist/compiler/semanticBudget.d.ts +50 -0
  267. package/dist/compiler/semanticBudget.d.ts.map +1 -0
  268. package/dist/compiler/semanticBudget.js +178 -0
  269. package/dist/compiler/semanticCatalog.d.ts +122 -0
  270. package/dist/compiler/semanticCatalog.d.ts.map +1 -0
  271. package/dist/compiler/semanticCatalog.js +160 -0
  272. package/dist/compiler/semanticContext.d.ts +172 -0
  273. package/dist/compiler/semanticContext.d.ts.map +1 -0
  274. package/dist/compiler/semanticContext.js +1168 -0
  275. package/dist/compiler/semanticTypeDependencies.d.ts +8 -0
  276. package/dist/compiler/semanticTypeDependencies.d.ts.map +1 -0
  277. package/dist/compiler/semanticTypeDependencies.js +64 -0
  278. package/dist/compiler/semanticTypeReference.d.ts +24 -0
  279. package/dist/compiler/semanticTypeReference.d.ts.map +1 -0
  280. package/dist/compiler/semanticTypeReference.js +36 -0
  281. package/dist/compiler/shapeResolver.d.ts +1 -0
  282. package/dist/compiler/shapeResolver.d.ts.map +1 -1
  283. package/dist/compiler/shapeResolver.js +7 -9
  284. package/dist/compiler/sourceSchemaBinding.d.ts +26 -0
  285. package/dist/compiler/sourceSchemaBinding.d.ts.map +1 -0
  286. package/dist/compiler/sourceSchemaBinding.js +39 -0
  287. package/dist/compiler/structuralCompanions.d.ts +16 -0
  288. package/dist/compiler/structuralCompanions.d.ts.map +1 -0
  289. package/dist/compiler/structuralCompanions.js +232 -0
  290. package/dist/compiler/validateSemanticGraph.d.ts +5 -0
  291. package/dist/compiler/validateSemanticGraph.d.ts.map +1 -0
  292. package/dist/compiler/validateSemanticGraph.js +376 -0
  293. package/dist/compiler/wildcardAlgebra.d.ts +26 -0
  294. package/dist/compiler/wildcardAlgebra.d.ts.map +1 -0
  295. package/dist/compiler/wildcardAlgebra.js +155 -0
  296. package/dist/gateway/generateGateway.d.ts.map +1 -1
  297. package/dist/gateway/generateGateway.js +2 -2
  298. package/dist/index.d.ts +3 -0
  299. package/dist/index.d.ts.map +1 -1
  300. package/dist/index.js +2 -0
  301. package/dist/loader/orderedSyntax.d.ts +77 -0
  302. package/dist/loader/orderedSyntax.d.ts.map +1 -0
  303. package/dist/loader/orderedSyntax.js +202 -0
  304. package/dist/loader/resolutionDepth.d.ts +7 -0
  305. package/dist/loader/resolutionDepth.d.ts.map +1 -0
  306. package/dist/loader/resolutionDepth.js +65 -0
  307. package/dist/loader/schemaInput.d.ts +53 -0
  308. package/dist/loader/schemaInput.d.ts.map +1 -0
  309. package/dist/loader/schemaInput.js +212 -0
  310. package/dist/loader/schemaResources.d.ts +59 -0
  311. package/dist/loader/schemaResources.d.ts.map +1 -0
  312. package/dist/loader/schemaResources.js +292 -0
  313. package/dist/openapi/generateOpenAPI.d.ts.map +1 -1
  314. package/dist/openapi/generateOpenAPI.js +2 -2
  315. package/dist/test/generateTests.d.ts.map +1 -1
  316. package/dist/test/generateTests.js +2 -2
  317. package/dist/util/xmlWhitespace.d.ts +3 -0
  318. package/dist/util/xmlWhitespace.d.ts.map +1 -0
  319. package/dist/util/xmlWhitespace.js +4 -0
  320. package/docs/README.md +14 -1
  321. package/docs/architecture.md +9 -0
  322. package/docs/cli-reference.md +21 -1
  323. package/docs/content-model-analysis.md +92 -0
  324. package/docs/content-model-baseline.md +121 -0
  325. package/docs/content-model-catalog.md +116 -0
  326. package/docs/content-model-companions.md +90 -0
  327. package/docs/content-model-composition.md +103 -0
  328. package/docs/content-model-decisions.md +79 -0
  329. package/docs/content-model-gateway-feasibility.md +169 -0
  330. package/docs/content-model-graph.md +121 -0
  331. package/docs/content-model-loading.md +163 -0
  332. package/docs/content-model-matching.md +85 -0
  333. package/docs/content-model-readiness.md +144 -0
  334. package/docs/content-model-resolution.md +81 -0
  335. package/docs/content-model-s02-handoff.md +98 -0
  336. package/docs/content-model-s06-au-01.md +425 -0
  337. package/docs/content-model-s06-dt-01.md +386 -0
  338. package/docs/content-model-s06-pw-01.md +350 -0
  339. package/docs/content-model-s06-re-01-resolver-implementation.md +869 -0
  340. package/docs/content-model-s06-re-01-resolver.md +513 -0
  341. package/docs/content-model-s06-re-01-scalar-witnesses.md +1423 -0
  342. package/docs/content-model-s06-re-01-support-reconstruction.md +6337 -0
  343. package/docs/content-model-s06-re-01.md +7477 -0
  344. package/docs/content-model-s06-research-handoff.md +909 -0
  345. package/docs/content-model-shipped-fix.md +83 -0
  346. package/docs/content-model-soap-feasibility.md +165 -0
  347. package/docs/decisions/002-streamable-responses.md +2 -0
  348. package/docs/decisions/003-content-model-contracts.md +280 -0
  349. package/docs/direct-values.md +311 -0
  350. package/docs/reference-validation.md +243 -0
  351. package/docs/releases/v1.1.5.md +38 -0
  352. package/docs/roadmap/README.md +2 -2
  353. package/docs/supported-patterns.md +13 -5
  354. package/package.json +26 -13
  355. package/src/generation/preambles/direct-client/typescript.preamble +3 -0
@@ -0,0 +1,1168 @@
1
+ /** Internal structural contexts. Preparation never certifies actual or hypothetical XSD legality. */
2
+ import { GRAPH_MODEL, globalId, isBuiltinType, scopedId } from './canonicalGraph.js';
3
+ import { duplicateIdentityTuple, matchesHypotheticalNodeId, sameSemanticIdentity, semanticIdentityTuple } from './hypotheticalScopedIdentity.js';
4
+ import { containedNodes, referenceSlots } from './graphTraversal.js';
5
+ import { XSD_NAMESPACE } from '../loader/orderedSyntax.js';
6
+ import { createSemanticBudget } from './semanticBudget.js';
7
+ import { assertRawComplexTypeShape } from './re01TypeProperties.js';
8
+ import { originalComplexParticleSource, originalUrWildcardSource, particleContentNode } from './complexTypeContent.js';
9
+ import { validateRawSimpleTypeShape } from './schemaSimpleTypeProperties.js';
10
+ import { validateRawElementShape } from './schemaElementProperties.js';
11
+ import { validateRawAttributeGroupShape } from './schemaAttributeGroupProperties.js';
12
+ import { equalNotationProperties, notationNameKey, readSourceNotationProperties, sourceNotationNamespace } from './schemaNotationProperties.js';
13
+ import { sourceSchemasForResolvedGraph } from './sourceSchemaBinding.js';
14
+ import { assertSemanticTypeReferenceShape } from './semanticTypeReference.js';
15
+ import { validateRawAttributeShape } from './schemaAttributeProperties.js';
16
+ import { computeOriginalSourceAbsence } from './originalSourceMembership.js';
17
+ import { prepareRawParticleWildcardProperties } from './schemaParticleWildcardProperties.js';
18
+ import { createOriginalIdentityConstraintRegistry } from './schemaIdentityConstraints.js';
19
+ export const SEMANTIC_CONTEXT_CONTRACT = 'RE01-domain-boundary-v1';
20
+ const contexts = new WeakSet();
21
+ const identityOccupants = new WeakMap();
22
+ /** Full stored-tuple lookup, independent of ID spelling and active membership.
23
+ * Each caller retains its own active-only or any-stored collision policy.
24
+ */
25
+ export function storedIdentityOccupant(context, identity) {
26
+ assertSemanticContext(context);
27
+ context.budget.chargeWork(2);
28
+ return identityOccupants.get(context)(identity);
29
+ }
30
+ const requests = new WeakMap();
31
+ const parents = new WeakMap();
32
+ export function isSemanticCandidateOf(parent, child) {
33
+ assertSemanticContext(parent);
34
+ assertSemanticContext(child);
35
+ parent.budget.chargeWork();
36
+ return parents.get(child) === parent;
37
+ }
38
+ /** Genuine handles must also have been prepared by the same request. */
39
+ export function contextsShareRequest(a, b) {
40
+ assertSemanticContext(a);
41
+ assertSemanticContext(b);
42
+ a.budget.chargeWork();
43
+ return requests.get(a) === requests.get(b);
44
+ }
45
+ const metadata = new WeakMap();
46
+ const projections = new WeakMap();
47
+ /** Borrowed original metadata only; never projects or indexes active members. */
48
+ export function semanticContextGraphMetadata(context) {
49
+ assertSemanticContext(context);
50
+ context.budget.chargeWork();
51
+ return metadata.get(context);
52
+ }
53
+ const forks = new WeakMap();
54
+ /** Persistent candidate overlay with the original request's source universe and budget. */
55
+ export function forkSemanticCandidate(parent, delta) {
56
+ assertSemanticContext(parent);
57
+ return forks.get(parent)(delta);
58
+ }
59
+ /** Structural active-node projection; does not authenticate a persisted source catalog. */
60
+ export function graphForSemanticContext(context) {
61
+ assertSemanticContext(context);
62
+ return projections.get(context)();
63
+ }
64
+ let nextRequest = 0;
65
+ /** Runtime identity, not a caller-supplied authority string or a copied property brand. */
66
+ export function assertSemanticContext(context) {
67
+ if (!contexts.has(context))
68
+ throw new TypeError('Unauthenticated semantic context');
69
+ }
70
+ class InvalidContext extends Error {
71
+ code;
72
+ component;
73
+ constructor(code, component) {
74
+ super(code);
75
+ this.code = code;
76
+ this.component = component;
77
+ }
78
+ }
79
+ export class SemanticContextAccessError extends Error {
80
+ code;
81
+ component;
82
+ constructor(code, component) {
83
+ super(`Semantic context ${code}${component ? `: ${component}` : ''}`);
84
+ this.code = code;
85
+ this.component = component;
86
+ this.name = 'SemanticContextAccessError';
87
+ }
88
+ }
89
+ /**
90
+ * The resolved input is a structural source entry, not a schema-validity receipt.
91
+ * Source/loader/catalog costs precede this adapter and retain their existing budgets.
92
+ * This request owns snapshotting, indexes, deltas and all subsequent consumer work.
93
+ */
94
+ export function prepareSemanticRequest(resolved, options = {}) {
95
+ const budget = options.budget ?? createSemanticBudget();
96
+ return budget.guard(() => {
97
+ const dataField = (value, name) => {
98
+ budget.chargeWork(44 + name.length);
99
+ if (!value || typeof value !== 'object')
100
+ throw new InvalidContext('representation');
101
+ const field = Object.getOwnPropertyDescriptor(value, name);
102
+ if (field === undefined)
103
+ return undefined;
104
+ if (!('value' in field))
105
+ throw new InvalidContext('representation');
106
+ return field.value;
107
+ };
108
+ try {
109
+ budget.chargeWork(3);
110
+ // Private exact-handle binding is read before snapshotting loses that identity.
111
+ // Availability of all source roots is distinct from source/component validity.
112
+ const sourceSchemas = sourceSchemasForResolvedGraph(resolved);
113
+ let identityConstraints;
114
+ const originalIdentityConstraints = () => identityConstraints ??= createOriginalIdentityConstraintRegistry(sourceSchemas, budget);
115
+ const inputGraph = dataField(resolved, 'graph');
116
+ const inputNodes = dataField(inputGraph, 'nodes');
117
+ if (dataField(inputGraph, 'model') !== GRAPH_MODEL || !Array.isArray(inputNodes)) {
118
+ throw new InvalidContext('representation');
119
+ }
120
+ budget.reserveNodes(dataField(inputNodes, 'length'));
121
+ // An exact source-bound resolved handle owns a deeply frozen graph from
122
+ // the resolver. The generic catalog entry still snapshots caller data.
123
+ const graph = sourceSchemas !== undefined ? inputGraph
124
+ : budget.freeze(budget.snapshot(inputGraph));
125
+ budget.chargeWork(6);
126
+ const originals = new Map();
127
+ const originalNames = new Map();
128
+ const originalSlots = new Map();
129
+ const originalEdges = new Map();
130
+ const knownReferences = new WeakSet();
131
+ const ownedTypeReferences = new WeakSet();
132
+ const requestAuthority = Object.freeze({});
133
+ const requestId = `semantic-request:${++nextRequest}`;
134
+ let serial = 0;
135
+ const originalScalarSlots = new Map();
136
+ const absentOriginals = computeOriginalSourceAbsence(graph.nodes, budget);
137
+ const originalNotations = new Map();
138
+ const states = new WeakMap();
139
+ const key = (id) => {
140
+ budget.chargeWork();
141
+ if (typeof id !== 'string')
142
+ throw new TypeError('Semantic component IDs must be strings');
143
+ budget.chargeWork(id.length);
144
+ };
145
+ const notationField = (value, field) => {
146
+ budget.chargeWork(44 + field.length);
147
+ if (!value || typeof value !== 'object' || Array.isArray(value))
148
+ throw new TypeError('Notation properties require data records');
149
+ const descriptor = Object.getOwnPropertyDescriptor(value, field);
150
+ if (!descriptor || !('value' in descriptor))
151
+ throw new TypeError('Notation properties require explicit own data fields');
152
+ return descriptor.value;
153
+ };
154
+ const notationName = (value) => {
155
+ if (typeof notationField(value, 'namespace') !== 'string' || typeof notationField(value, 'local') !== 'string')
156
+ throw new TypeError('Notation QName fields must be strings');
157
+ return value;
158
+ };
159
+ const notationProperties = (value) => {
160
+ notationName(notationField(value, 'name'));
161
+ const publicIdentifier = notationField(value, 'publicIdentifier'), systemIdentifier = notationField(value, 'systemIdentifier');
162
+ if ((publicIdentifier !== undefined && typeof publicIdentifier !== 'string') || (systemIdentifier !== undefined && typeof systemIdentifier !== 'string'))
163
+ throw new TypeError('Notation identifiers must be strings or explicit undefined');
164
+ return value;
165
+ };
166
+ const retainNotation = (syntax, namespace) => {
167
+ // Each physical representation allocates a tuple, even if later coalesced.
168
+ budget.reserveNodes(1);
169
+ const mapped = readSourceNotationProperties(syntax, namespace, budget);
170
+ if (mapped.kind !== 'properties')
171
+ return; // Missing names remain source-grammar failures.
172
+ const id = notationNameKey(mapped.properties.name, budget), prior = originalNotations.get(id);
173
+ budget.chargeWork(4);
174
+ if (!prior)
175
+ originalNotations.set(id, { properties: mapped.properties, conflicting: false });
176
+ else if (!equalNotationProperties(prior.properties, mapped.properties, budget))
177
+ prior.conflicting = true;
178
+ };
179
+ if (sourceSchemas !== undefined) {
180
+ for (const schema of sourceSchemas) {
181
+ budget.chargeWork();
182
+ const namespace = sourceNotationNamespace(schema, budget);
183
+ for (const child of schema.syntax.children) {
184
+ budget.chargeWork(4);
185
+ if (child.kind === 'element') {
186
+ budget.chargeWork(child.name.namespace.length + child.name.local.length);
187
+ if (child.name.namespace === XSD_NAMESPACE && child.name.local === 'notation')
188
+ retainNotation(child, namespace);
189
+ }
190
+ }
191
+ }
192
+ }
193
+ else {
194
+ for (const retained of graph.schemaRetained) {
195
+ budget.chargeWork(4 + retained.syntax.name.namespace.length + retained.syntax.name.local.length);
196
+ if (retained.syntax.name.namespace === XSD_NAMESPACE && retained.syntax.name.local === 'notation')
197
+ retainNotation(retained.syntax, retained.context.effectiveNamespace);
198
+ }
199
+ }
200
+ budget.chargeWork(5 + originalNotations.size * 3);
201
+ const actualNotations = { additions: new Map(), active: new Set(originalNotations.keys()),
202
+ members: Object.freeze([...originalNotations.values()].map(row => row.properties.name)) };
203
+ const identityId = (node) => {
204
+ if (node.identity.kind === 'global') {
205
+ const role = node.kind === 'simpleType' || node.kind === 'complexType' ? 'type' : node.kind === 'wsdl' ? node.role : node.kind;
206
+ if (node.identity.role !== role)
207
+ throw new InvalidContext('identity', node.id);
208
+ if (node.kind === 'element' || node.kind === 'attribute' || node.kind === 'wsdl') {
209
+ budget.chargeWork(4 + node.name.namespace.length + node.name.local.length + node.identity.name.namespace.length + node.identity.name.local.length);
210
+ if (node.name.namespace !== node.identity.name.namespace || node.name.local !== node.identity.name.local)
211
+ throw new InvalidContext('identity', node.id);
212
+ }
213
+ budget.chargeWork(64 + 6 * (node.identity.role.length + node.identity.name.namespace.length + node.identity.name.local.length));
214
+ return globalId(node.identity.role, node.identity.name);
215
+ }
216
+ budget.chargeWork(64 + 6 * (node.identity.owner.length + node.identity.path.length + node.identity.role.length));
217
+ return scopedId(node.identity.owner, node.identity.path, node.identity.role);
218
+ };
219
+ const indexNode = (node, slots, edges) => {
220
+ budget.chargeWork(12);
221
+ // Precharge variable slot/containment arrays before the shared traversal allocates them.
222
+ if (node.kind === 'simpleType' && node.variety.kind === 'union')
223
+ budget.chargeWork(node.variety.members.length * 4);
224
+ if (node.kind === 'wsdl')
225
+ budget.chargeWork(node.references.length * 4);
226
+ if (node.kind === 'complexType' || node.kind === 'attributeGroup')
227
+ budget.chargeWork(node.attributes.length * 2);
228
+ if (node.kind === 'particle' && 'children' in node.term)
229
+ budget.chargeWork(node.term.children.length * 2);
230
+ const references = referenceSlots(node);
231
+ // Original operands were frozen once with the graph/delta snapshot. Only
232
+ // freeze new slot records here; walking their provenance again is wasteful.
233
+ for (const slot of references) {
234
+ budget.chargeWork(3 + slot.path.length);
235
+ Object.freeze(slot);
236
+ knownReferences.add(slot.reference);
237
+ }
238
+ slots.set(node.id, Object.freeze(references));
239
+ edges.set(node.id, Object.freeze(containedNodes(node)));
240
+ };
241
+ for (const node of graph.nodes) {
242
+ key(node.id);
243
+ if (originals.has(node.id) || node.id !== identityId(node))
244
+ throw new InvalidContext('identity', node.id);
245
+ budget.chargeWork(2);
246
+ originals.set(node.id, node);
247
+ if (node.identity.kind === 'global')
248
+ originalNames.set(node.id, node.id);
249
+ indexNode(node, originalSlots, originalEdges);
250
+ if (node.kind === 'complexType' && node.derivation?.contentKind === 'simple' && node.derivation.kind === 'restriction' && !absentOriginals.has(node.id)) {
251
+ budget.reserveNodes(1);
252
+ budget.chargeWork(5 + node.id.length);
253
+ const slot = Object.freeze({ kind: 'original-generated', owner: node.id });
254
+ assertSemanticTypeReferenceShape(slot, budget);
255
+ budget.chargeWork();
256
+ ownedTypeReferences.add(slot);
257
+ originalScalarSlots.set(node.id, slot);
258
+ }
259
+ }
260
+ budget.chargeWork(4 + originalScalarSlots.size * 2);
261
+ const actualScalarSlots = { active: new Set(originalScalarSlots.keys()), members: Object.freeze([...originalScalarSlots.values()]) };
262
+ budget.chargeWork(12);
263
+ const sharedMetadata = Object.freeze({ model: graph.model, origins: graph.origins,
264
+ schemaAnnotations: graph.schemaAnnotations, schemaRetained: graph.schemaRetained, loading: graph.loading });
265
+ budget.chargeWork(2);
266
+ const noParticleWildcards = new Map();
267
+ const noOriginalUrWildcards = new Map();
268
+ const buildContext = (kind, members, changes, changedSlots, changedEdges, rawTypes = [], rawSimpleTypes = [], rawElements = [], rawGroups = [], notations = actualNotations, scalarSlots = actualScalarSlots, rawAttributes = [], particleWildcards = noParticleWildcards, borrowedUr = noOriginalUrWildcards) => {
269
+ budget.chargeWork(5);
270
+ const membership = new Set();
271
+ const rawProperties = new Map();
272
+ const rawSimpleProperties = new Map();
273
+ const rawSimpleSlots = new Map();
274
+ const rawComplexSlots = new Map(), rawComplexEdges = new Map();
275
+ const rawElementProperties = new Map();
276
+ const rawAttributeProperties = new Map();
277
+ const rawGroupProperties = new Map();
278
+ let expectedMembers = originals.size, hasEncodedIdentity = false;
279
+ for (const [id, node] of changes) {
280
+ key(id);
281
+ if (!originals.has(id))
282
+ expectedMembers++;
283
+ // Every stored change has already passed the exact legacy/new ID gate.
284
+ // Inactive inherited changes still participate in this scan.
285
+ budget.chargeWork(3);
286
+ if (node.identity.kind === 'scoped' && id[0] === '[')
287
+ hasEncodedIdentity = true;
288
+ }
289
+ const reverse = new Map();
290
+ const slotsFor = (id) => rawComplexSlots.get(id) ?? rawSimpleSlots.get(id) ?? changedSlots.get(id) ?? originalSlots.get(id) ?? [];
291
+ const edgesFor = (id) => {
292
+ const edges = rawComplexEdges.get(id) ?? changedEdges.get(id) ?? originalEdges.get(id) ?? [];
293
+ const node = changes.get(id) ?? originals.get(id);
294
+ if (!borrowedUr.size || node?.kind !== 'particle' || !('children' in node.term))
295
+ return edges;
296
+ budget.chargeWork(3 + edges.length);
297
+ return edges.filter(child => !borrowedUr.has(child));
298
+ };
299
+ const record = (id) => changes.get(id) ?? originals.get(id);
300
+ budget.chargeWork(6);
301
+ function* identityRecords() { yield* originals.values(); yield* changes.values(); }
302
+ let changedIdentityIndex;
303
+ const identityOccupant = (identity) => {
304
+ budget.chargeWork(2);
305
+ if (!changedIdentityIndex) {
306
+ budget.chargeWork(4);
307
+ const completed = new Map();
308
+ for (const node of changes.values()) {
309
+ const tuple = semanticIdentityTuple(node.identity, budget.chargeWork);
310
+ budget.chargeWork(4 + tuple.length + node.id.length);
311
+ completed.set(tuple, node.id);
312
+ }
313
+ // Final changes include inactive rows. Never publish an exhausted partial index.
314
+ changedIdentityIndex = completed;
315
+ }
316
+ const wanted = semanticIdentityTuple(identity, budget.chargeWork);
317
+ budget.chargeWork(2 + wanted.length);
318
+ const changed = changedIdentityIndex.get(wanted);
319
+ if (changed !== undefined)
320
+ return changed;
321
+ // Originals admit only exact native IDs. Tuple lookup needs no second
322
+ // source index, but must distinguish tuples sharing a legacy hash.
323
+ if (identity.kind === 'scoped')
324
+ budget.chargeWork(64 + 6 * (identity.owner.length + identity.path.length + identity.role.length));
325
+ const originalId = identity.kind === 'global' ? wanted : scopedId(identity.owner, identity.path, identity.role);
326
+ key(originalId);
327
+ const original = originals.get(originalId);
328
+ if (!original)
329
+ return undefined;
330
+ const actual = semanticIdentityTuple(original.identity, budget.chargeWork);
331
+ budget.chargeWork(1 + wanted.length + actual.length);
332
+ return wanted === actual ? original.id : undefined;
333
+ };
334
+ if (hasEncodedIdentity) {
335
+ const duplicateIdentity = duplicateIdentityTuple(identityRecords(), budget.chargeWork);
336
+ if (duplicateIdentity !== undefined)
337
+ throw new InvalidContext('identity', duplicateIdentity);
338
+ }
339
+ for (const id of members) {
340
+ key(id);
341
+ if (membership.has(id))
342
+ throw new InvalidContext('identity', id);
343
+ if (!record(id))
344
+ throw new InvalidContext('missing', id);
345
+ budget.chargeWork(2);
346
+ membership.add(id);
347
+ }
348
+ const requireMember = (id) => {
349
+ key(id);
350
+ const node = record(id);
351
+ if (!node)
352
+ throw new InvalidContext('missing', id);
353
+ if (!membership.has(id))
354
+ throw new InvalidContext('outside-context', id);
355
+ return node;
356
+ };
357
+ for (const [id, handle] of borrowedUr) {
358
+ const node = originalUrWildcardSource(actual, handle);
359
+ key(id);
360
+ budget.chargeWork(10);
361
+ if (id !== handle.particle || node.id !== id || requireMember(handle.owner).kind !== 'complexType')
362
+ throw new InvalidContext('reference', id);
363
+ if (record(id))
364
+ throw new InvalidContext('identity', id);
365
+ const occupied = identityOccupant(node.identity);
366
+ if (occupied !== undefined)
367
+ throw new InvalidContext('identity', occupied);
368
+ if (node.identity.kind !== 'scoped' || requireMember(node.identity.owner).kind !== 'complexType')
369
+ throw new InvalidContext('reference', id);
370
+ if (particleWildcards.has(id))
371
+ throw new InvalidContext('representation', id);
372
+ }
373
+ const originalParticleEdges = (handle, root) => {
374
+ const source = originalComplexParticleSource(actual, handle);
375
+ if (root !== handle.particle || requireMember(handle.owner).kind !== 'complexType')
376
+ throw new InvalidContext('reference', root);
377
+ budget.chargeWork(6 + source.synthetic.length * 2);
378
+ const privateIds = new Set(source.synthetic), pending = [root], seen = new Set(), frontier = [];
379
+ for (const id of privateIds) {
380
+ key(id);
381
+ if (record(id))
382
+ throw new InvalidContext(membership.has(id) ? 'identity' : 'outside-context', id);
383
+ const backing = particleContentNode(actual, source, id);
384
+ if (!backing)
385
+ throw new InvalidContext('representation', id);
386
+ const occupied = identityOccupant(backing.identity);
387
+ if (occupied !== undefined)
388
+ throw new InvalidContext('identity', occupied);
389
+ }
390
+ while (pending.length) {
391
+ budget.chargeWork(4);
392
+ const id = pending.pop();
393
+ if (seen.has(id))
394
+ continue;
395
+ seen.add(id);
396
+ if (!privateIds.has(id)) {
397
+ if (requireMember(id).kind !== 'particle')
398
+ throw new InvalidContext('reference', id);
399
+ budget.chargeWork();
400
+ frontier.push(id);
401
+ continue;
402
+ }
403
+ const node = particleContentNode(actual, source, id);
404
+ if (node?.kind !== 'particle')
405
+ throw new InvalidContext('reference', id);
406
+ if ('children' in node.term) {
407
+ budget.chargeWork(node.term.children.length);
408
+ pending.push(...node.term.children);
409
+ }
410
+ else if (node.term.kind !== 'any')
411
+ throw new InvalidContext('representation', id);
412
+ }
413
+ return Object.freeze(frontier);
414
+ };
415
+ for (const properties of rawTypes) {
416
+ assertRawComplexTypeShape(properties, budget);
417
+ key(properties.type);
418
+ if (requireMember(properties.type).kind !== 'complexType' || rawProperties.has(properties.type))
419
+ throw new InvalidContext('representation', properties.type);
420
+ budget.chargeWork(8 + properties.attributeUses.length);
421
+ rawProperties.set(properties.type, properties);
422
+ const references = [Object.freeze({ path: '$raw/derivation/base', reference: properties.derivation.base })];
423
+ if (properties.content.kind === 'simple' || properties.content.kind === 'opaque-builtin') {
424
+ budget.chargeWork(3);
425
+ references.push(Object.freeze({ path: '$raw/content/type', reference: properties.content.type }));
426
+ }
427
+ rawComplexSlots.set(properties.type, Object.freeze(references));
428
+ const children = [...properties.attributeUses];
429
+ if ('particle' in properties.content) {
430
+ budget.chargeWork();
431
+ if (properties.content.original)
432
+ children.push(...originalParticleEdges(properties.content.original, properties.content.particle));
433
+ else
434
+ children.push(properties.content.particle);
435
+ }
436
+ rawComplexEdges.set(properties.type, Object.freeze(children));
437
+ }
438
+ for (const properties of rawSimpleTypes) {
439
+ if (!validateRawSimpleTypeShape(properties, budget))
440
+ throw new InvalidContext('representation');
441
+ key(properties.type);
442
+ if (requireMember(properties.type).kind !== 'simpleType' || rawSimpleProperties.has(properties.type))
443
+ throw new InvalidContext('representation', properties.type);
444
+ budget.chargeWork(5);
445
+ rawSimpleProperties.set(properties.type, properties);
446
+ const rawSlots = [Object.freeze({ path: '$raw/base', reference: properties.base })];
447
+ if (properties.variety.kind === 'list') {
448
+ budget.chargeWork(3);
449
+ rawSlots.push(Object.freeze({ path: '$raw/item', reference: properties.variety.item }));
450
+ }
451
+ if (properties.variety.kind === 'union')
452
+ for (let i = 0; i < properties.variety.members.length; i++) {
453
+ budget.chargeWork(12);
454
+ rawSlots.push(Object.freeze({ path: '$raw/members/' + i, reference: properties.variety.members[i] }));
455
+ }
456
+ rawSimpleSlots.set(properties.type, Object.freeze(rawSlots));
457
+ }
458
+ for (const properties of rawElements) {
459
+ if (!validateRawElementShape(properties, budget))
460
+ throw new InvalidContext('representation');
461
+ key(properties.element);
462
+ if (requireMember(properties.element).kind !== 'element' || rawElementProperties.has(properties.element))
463
+ throw new InvalidContext('representation', properties.element);
464
+ budget.chargeWork();
465
+ rawElementProperties.set(properties.element, properties);
466
+ if (properties.type) {
467
+ const original = changedSlots.get(properties.element) ?? originalSlots.get(properties.element) ?? [];
468
+ budget.chargeWork(5 + original.length * 2);
469
+ rawComplexSlots.set(properties.element, Object.freeze([...original.filter(slot => slot.path !== 'type'), Object.freeze({ path: '$raw/type', reference: properties.type })]));
470
+ }
471
+ }
472
+ for (const properties of rawAttributes) {
473
+ if (!validateRawAttributeShape(properties, budget))
474
+ throw new InvalidContext('representation');
475
+ key(properties.attribute);
476
+ if (requireMember(properties.attribute).kind !== 'attribute' || rawAttributeProperties.has(properties.attribute))
477
+ throw new InvalidContext('representation', properties.attribute);
478
+ budget.chargeWork(5);
479
+ rawAttributeProperties.set(properties.attribute, properties);
480
+ rawComplexSlots.set(properties.attribute, Object.freeze([Object.freeze({ path: '$raw/type', reference: properties.type })]));
481
+ }
482
+ for (const properties of rawGroups) {
483
+ validateRawAttributeGroupShape(properties, budget);
484
+ key(properties.group);
485
+ if (requireMember(properties.group).kind !== 'attributeGroup' || rawGroupProperties.has(properties.group))
486
+ throw new InvalidContext('representation', properties.group);
487
+ budget.chargeWork(4 + properties.attributeUses.length);
488
+ rawGroupProperties.set(properties.group, properties);
489
+ for (const id of properties.attributeUses)
490
+ if (requireMember(id).kind !== 'attributeUse')
491
+ throw new InvalidContext('reference', properties.group);
492
+ for (const id of properties.wildcard?.sources ?? [])
493
+ requireMember(id);
494
+ rawComplexSlots.set(properties.group, Object.freeze([]));
495
+ rawComplexEdges.set(properties.group, Object.freeze([...properties.attributeUses]));
496
+ }
497
+ const target = (reference) => {
498
+ budget.chargeWork(4);
499
+ if (!reference || typeof reference !== 'object')
500
+ throw new InvalidContext('reference');
501
+ if (reference.kind === 'builtin') {
502
+ if (!reference.name || typeof reference.name.namespace !== 'string' || typeof reference.name.local !== 'string')
503
+ throw new InvalidContext('reference');
504
+ budget.chargeWork(reference.name.namespace.length + reference.name.local.length);
505
+ if (reference.name.namespace !== XSD_NAMESPACE || !isBuiltinType(reference.name.local))
506
+ throw new InvalidContext('reference');
507
+ return undefined;
508
+ }
509
+ // Canonical local references are direct IDs; S05 does not require a
510
+ // scoped target. They can coherently reference a replaced endpoint.
511
+ if (reference.kind === 'local') {
512
+ if (typeof reference.target !== 'string')
513
+ throw new InvalidContext('reference');
514
+ return reference.target;
515
+ }
516
+ if (reference.kind !== 'symbol' || typeof reference.role !== 'string' || !reference.name
517
+ || typeof reference.name.namespace !== 'string' || typeof reference.name.local !== 'string')
518
+ throw new InvalidContext('reference');
519
+ budget.chargeWork(64 + 6 * (reference.role.length + reference.name.namespace.length + reference.name.local.length));
520
+ const id = globalId(reference.role, reference.name);
521
+ if (reference.target !== undefined && reference.target !== id)
522
+ throw new InvalidContext('reference', id);
523
+ return id;
524
+ };
525
+ const rawEdges = new Map();
526
+ const requireScalarSlot = (reference, original = false) => {
527
+ key(reference.owner);
528
+ if (!originalScalarSlots.has(reference.owner))
529
+ throw new InvalidContext('missing', reference.owner);
530
+ if (!original && !scalarSlots.active.has(reference.owner))
531
+ throw new InvalidContext('outside-context', reference.owner);
532
+ };
533
+ const rawReference = (owner, reference, edges, original = false) => {
534
+ assertSemanticTypeReferenceShape(reference, budget);
535
+ // These records came from the frozen graph/delta snapshot, never the
536
+ // mutable caller. Ownership is not selected-context resolution.
537
+ budget.chargeWork();
538
+ ownedTypeReferences.add(reference);
539
+ if (reference.kind === 'original-generated') {
540
+ requireScalarSlot(reference, original);
541
+ return;
542
+ }
543
+ const id = target(reference);
544
+ if (id === undefined)
545
+ return;
546
+ const node = original ? originals.get(id) : requireMember(id);
547
+ if (!node)
548
+ throw new InvalidContext('reference', owner);
549
+ if ((node.kind !== 'simpleType' && node.kind !== 'complexType') || reference.kind === 'symbol' && reference.role !== 'type')
550
+ throw new InvalidContext('reference', owner);
551
+ if (!original) {
552
+ budget.chargeWork();
553
+ edges.push(id);
554
+ }
555
+ };
556
+ for (const properties of rawSimpleTypes) {
557
+ budget.chargeWork(3);
558
+ const edges = [];
559
+ rawReference(properties.type, properties.base, edges);
560
+ if (properties.variety.kind === 'list')
561
+ rawReference(properties.type, properties.variety.item, edges);
562
+ if (properties.variety.kind === 'union')
563
+ for (const member of properties.variety.members)
564
+ rawReference(properties.type, member, edges);
565
+ if (properties.facetBinding)
566
+ rawReference(properties.type, properties.facetBinding.type, [], true);
567
+ for (const layer of properties.facetLayers ?? properties.facetComponentSet ?? [])
568
+ if ('facets' in layer)
569
+ for (const facet of layer.facets) {
570
+ budget.chargeWork(2);
571
+ const operand = facet.operand;
572
+ if (!operand)
573
+ continue;
574
+ if (operand.context === 'active') {
575
+ requireMember(operand.owner);
576
+ rawReference(properties.type, operand.type, edges);
577
+ }
578
+ else {
579
+ key(operand.owner);
580
+ if (!originals.has(operand.owner))
581
+ throw new InvalidContext('reference', properties.type);
582
+ rawReference(properties.type, operand.type, [], true);
583
+ }
584
+ }
585
+ rawEdges.set(properties.type, edges);
586
+ }
587
+ for (const properties of rawElements)
588
+ if (properties.type)
589
+ rawReference(properties.element, properties.type, []);
590
+ for (const properties of rawAttributes)
591
+ rawReference(properties.attribute, properties.type, []);
592
+ for (const properties of rawTypes) {
593
+ budget.chargeWork(3);
594
+ const edges = [];
595
+ rawReference(properties.type, properties.derivation.base, edges);
596
+ if (properties.content.kind === 'simple' || properties.content.kind === 'opaque-builtin')
597
+ rawReference(properties.type, properties.content.type, []);
598
+ if ('particle' in properties.content && !properties.content.original
599
+ && requireMember(properties.content.particle).kind !== 'particle')
600
+ throw new InvalidContext('reference', properties.type);
601
+ for (const id of properties.attributeUses)
602
+ if (requireMember(id).kind !== 'attributeUse')
603
+ throw new InvalidContext('reference', properties.type);
604
+ for (const id of properties.wildcard?.sources ?? [])
605
+ requireMember(id);
606
+ rawEdges.set(properties.type, edges);
607
+ }
608
+ // Validate closure and ownership without unfolding recursive element/type references.
609
+ for (const id of members) {
610
+ const node = requireMember(id);
611
+ if (node.identity.kind === 'scoped')
612
+ requireMember(node.identity.owner);
613
+ for (const child of edgesFor(id))
614
+ requireMember(child);
615
+ for (const slot of slotsFor(id)) {
616
+ if (slot.reference.kind === 'original-generated') {
617
+ requireScalarSlot(slot.reference);
618
+ continue;
619
+ }
620
+ const refId = target(slot.reference);
621
+ if (refId !== undefined) {
622
+ const referred = requireMember(refId);
623
+ if (slot.reference.kind === 'symbol' && (referred.identity.kind !== 'global' || referred.identity.role !== slot.reference.role))
624
+ throw new InvalidContext('reference', id);
625
+ if (node.kind === 'element' && slot.path === 'substitutionGroup') {
626
+ if (referred.kind !== 'element')
627
+ throw new InvalidContext('reference', id);
628
+ budget.chargeWork(4);
629
+ const incoming = reverse.get(refId) ?? [];
630
+ incoming.push(id);
631
+ reverse.set(refId, incoming);
632
+ }
633
+ }
634
+ }
635
+ }
636
+ const forbidden = (id) => {
637
+ const node = requireMember(id);
638
+ budget.chargeWork(1 + edgesFor(id).length);
639
+ const result = [...edgesFor(id)];
640
+ for (const raw of rawEdges.get(id) ?? []) {
641
+ budget.chargeWork();
642
+ result.push(raw);
643
+ }
644
+ for (const slot of slotsFor(id)) {
645
+ budget.chargeWork();
646
+ // A scalar slot is a distinct component. Its lazy property owner
647
+ // checks scalar dependency cycles; the provenance owner is no edge.
648
+ if (slot.reference.kind === 'original-generated')
649
+ continue;
650
+ const expands = node.kind === 'simpleType' || node.kind === 'complexType' || node.kind === 'attributeGroupUse'
651
+ || (node.kind === 'particle' && node.term.kind === 'group') || (node.kind === 'element' && slot.path === 'substitutionGroup');
652
+ if (expands) {
653
+ const refId = target(slot.reference);
654
+ if (refId !== undefined) {
655
+ budget.chargeWork();
656
+ result.push(refId);
657
+ }
658
+ }
659
+ }
660
+ return result;
661
+ };
662
+ const acyclic = (edges) => {
663
+ budget.chargeWork(3);
664
+ const done = new Set(), active = new Set();
665
+ const stack = [];
666
+ for (const root of members) {
667
+ key(root);
668
+ if (done.has(root))
669
+ continue;
670
+ budget.chargeWork(5);
671
+ active.add(root);
672
+ stack.push({ id: root, edges: edges(root), index: 0 });
673
+ while (stack.length) {
674
+ budget.chargeWork(3);
675
+ const top = stack[stack.length - 1];
676
+ if (top.index === top.edges.length) {
677
+ budget.chargeWork(3);
678
+ active.delete(top.id);
679
+ done.add(top.id);
680
+ stack.pop();
681
+ continue;
682
+ }
683
+ const id = top.edges[top.index++];
684
+ key(id);
685
+ if (active.has(id))
686
+ throw new InvalidContext('cycle', id);
687
+ if (!done.has(id)) {
688
+ budget.chargeWork(5);
689
+ active.add(id);
690
+ stack.push({ id, edges: edges(id), index: 0 });
691
+ }
692
+ }
693
+ }
694
+ };
695
+ acyclic(forbidden);
696
+ acyclic(id => {
697
+ const node = requireMember(id);
698
+ budget.chargeWork(2);
699
+ return node.identity.kind === 'scoped' ? [node.identity.owner] : [];
700
+ });
701
+ for (const entries of reverse.values()) {
702
+ budget.chargeWork(1 + entries.length);
703
+ Object.freeze(entries);
704
+ }
705
+ budget.chargeWork(100 + members.length);
706
+ const frozenMembers = Object.freeze([...members]);
707
+ budget.chargeWork(2 + borrowedUr.size);
708
+ const frozenUrWildcards = Object.freeze([...borrowedUr.values()]);
709
+ const contextId = `${requestId}:${kind}:${++serial}`;
710
+ let context;
711
+ let compositorChildren;
712
+ const authenticate = () => { assertSemanticContext(context); budget.chargeWork(); };
713
+ const lookup = (id) => {
714
+ authenticate();
715
+ key(id);
716
+ budget.chargeWork(3);
717
+ const node = record(id);
718
+ return Object.freeze(!node ? { kind: 'missing', id } : !membership.has(id) ? { kind: 'outside-context', id } : { kind: 'found', node });
719
+ };
720
+ const checked = (id) => {
721
+ const result = lookup(id);
722
+ if (result.kind !== 'found') {
723
+ budget.chargeWork(4 + id.length);
724
+ throw new SemanticContextAccessError(result.kind, id);
725
+ }
726
+ return result.node;
727
+ };
728
+ const empty = Object.freeze([]);
729
+ const ownTypeReference = (input) => {
730
+ authenticate();
731
+ budget.chargeWork(3);
732
+ if (ownedTypeReferences.has(input))
733
+ return input;
734
+ // Canonical known references also include non-type symbols. Reuse
735
+ // their immutable storage only after the semantic shape/role gate.
736
+ const safe = knownReferences.has(input) ? input : budget.freeze(budget.snapshot(input));
737
+ assertSemanticTypeReferenceShape(safe, budget);
738
+ budget.chargeWork();
739
+ ownedTypeReferences.add(safe);
740
+ return safe;
741
+ };
742
+ context = Object.freeze({
743
+ contextId, profileVersion: GRAPH_MODEL, contractVersion: SEMANTIC_CONTEXT_CONTRACT,
744
+ originalIdentityConstraints() {
745
+ assertSemanticContext(this);
746
+ if (this !== context)
747
+ throw new TypeError('Foreign identity-constraint context');
748
+ authenticate();
749
+ return originalIdentityConstraints();
750
+ },
751
+ kind, acceptance: 'structural-only', membership: membership.size === expectedMembers ? 'complete-actual-plus-additions' : 'structural-subset', budget, members: frozenMembers,
752
+ scalarSlots: scalarSlots.members,
753
+ scalarSlotMembership: scalarSlots.active.size === originalScalarSlots.size ? 'complete-original' : 'structural-subset',
754
+ lookupScalarSlot(input) {
755
+ const selected = ownTypeReference(input);
756
+ if (selected.kind !== 'original-generated')
757
+ throw new SemanticContextAccessError('reference');
758
+ key(selected.owner);
759
+ budget.chargeWork(5);
760
+ const slot = originalScalarSlots.get(selected.owner);
761
+ return Object.freeze(!slot ? { kind: 'missing', slot: selected }
762
+ : !scalarSlots.active.has(selected.owner) ? { kind: 'outside-context', slot } : { kind: 'found', slot });
763
+ },
764
+ notationMembers: notations.members,
765
+ notationMembership: notations.active.size === originalNotations.size + notations.additions.size ? 'complete-original-plus-additions' : 'structural-subset',
766
+ notationUniverse: sourceSchemas !== undefined ? 'source-bound' : 'retained-only',
767
+ lookupNotation(input) {
768
+ authenticate();
769
+ const name = notationName(budget.freeze(budget.snapshot(input)));
770
+ const id = notationNameKey(name, budget), original = originalNotations.get(id), addition = notations.additions.get(id);
771
+ budget.chargeWork(12);
772
+ if ((original || addition) && !notations.active.has(id))
773
+ return Object.freeze({ kind: 'outside-context', name });
774
+ if (original)
775
+ return original.conflicting ? Object.freeze({ kind: 'unresolved', name, rule: 'notation-original-properties' })
776
+ : Object.freeze({ kind: 'found', properties: original.properties, origin: 'original' });
777
+ if (sourceSchemas === undefined)
778
+ return Object.freeze({ kind: 'unresolved', name, rule: 'notation-source-universe' });
779
+ if (addition)
780
+ return Object.freeze({ kind: 'found', properties: addition, origin: 'addition' });
781
+ if (notations.active.size !== originalNotations.size + notations.additions.size)
782
+ return Object.freeze({ kind: 'unresolved', name, rule: 'notation-active-membership' });
783
+ return Object.freeze({ kind: 'missing', name });
784
+ },
785
+ lookup,
786
+ ownTypeReference,
787
+ resolve(reference) {
788
+ authenticate();
789
+ try {
790
+ budget.chargeWork(2);
791
+ const safe = knownReferences.has(reference) || ownedTypeReferences.has(reference) ? reference : budget.freeze(budget.snapshot(reference));
792
+ const id = target(safe);
793
+ if (id !== undefined) {
794
+ const result = lookup(id);
795
+ if (result.kind === 'found' && safe.kind === 'symbol'
796
+ && (result.node.identity.kind !== 'global' || result.node.identity.role !== safe.role))
797
+ throw new InvalidContext('reference', id);
798
+ return result;
799
+ }
800
+ if (safe.kind !== 'builtin')
801
+ throw new InvalidContext('reference');
802
+ budget.chargeWork(4 + safe.name.namespace.length + safe.name.local.length);
803
+ return Object.freeze({ kind: 'builtin', name: Object.freeze({ ...safe.name }) });
804
+ }
805
+ catch (error) {
806
+ if (error instanceof InvalidContext || error instanceof TypeError) {
807
+ budget.chargeWork(4);
808
+ throw new SemanticContextAccessError('reference', error instanceof InvalidContext ? error.component : undefined);
809
+ }
810
+ throw error;
811
+ }
812
+ },
813
+ sourceNode(id) { authenticate(); key(id); return originals.get(id); },
814
+ originalSourceComponentAbsent(id) { authenticate(); key(id); return absentOriginals.has(id); },
815
+ originalComplexPropertySource(id) {
816
+ authenticate();
817
+ key(id);
818
+ budget.chargeWork(7);
819
+ const original = originals.get(id);
820
+ return kind === 'candidate' && sourceSchemas !== undefined && membership.has(id) && original?.kind === 'complexType'
821
+ && !rawProperties.has(id) && !changes.has(id) && !absentOriginals.has(id) ? original : undefined;
822
+ },
823
+ originalComplexContentSource(id) {
824
+ assertSemanticContext(this);
825
+ if (this !== context)
826
+ throw new TypeError('Foreign original-content context');
827
+ authenticate();
828
+ key(id);
829
+ budget.chargeWork(5);
830
+ const original = originals.get(id);
831
+ return kind === 'actual' && sourceSchemas !== undefined && membership.has(id) && original?.kind === 'complexType'
832
+ && !absentOriginals.has(id) ? original : undefined;
833
+ },
834
+ originalCompositorChildren(id) {
835
+ assertSemanticContext(this);
836
+ if (this !== context)
837
+ throw new TypeError('Foreign compositor context');
838
+ authenticate();
839
+ key(id);
840
+ budget.chargeWork(10);
841
+ const original = originals.get(id);
842
+ if (kind !== 'candidate' || sourceSchemas === undefined || !membership.has(id) || original?.kind !== 'particle'
843
+ || !('children' in original.term) || absentOriginals.has(id) || changes.has(id) || record(id) !== original)
844
+ return undefined;
845
+ const prior = compositorChildren?.get(id);
846
+ if (prior) {
847
+ budget.chargeWork(2);
848
+ return prior;
849
+ }
850
+ const children = [];
851
+ for (const child of original.term.children) {
852
+ key(child);
853
+ budget.chargeWork(5 + child.length);
854
+ if (originals.get(child)?.kind !== 'particle')
855
+ return undefined;
856
+ if (!absentOriginals.has(child))
857
+ children.push(child);
858
+ }
859
+ budget.chargeWork(4 + children.length);
860
+ const result = Object.freeze(children);
861
+ if (!compositorChildren) {
862
+ budget.chargeWork(2);
863
+ compositorChildren = new Map();
864
+ }
865
+ compositorChildren.set(id, result);
866
+ return result;
867
+ },
868
+ originalUrWildcards() { authenticate(); return frozenUrWildcards; },
869
+ originalUrWildcard(id) { authenticate(); key(id); return borrowedUr.get(id); },
870
+ originalContext() { authenticate(); return actual; },
871
+ sourceSchemaRetained() { authenticate(); return graph.schemaRetained; },
872
+ rawTypeProperties(id) { checked(id); return rawProperties.get(id); },
873
+ rawSimpleTypeProperties(id) { checked(id); return rawSimpleProperties.get(id); },
874
+ rawElementProperties(id) { checked(id); return rawElementProperties.get(id); },
875
+ rawAttributeProperties(id) { checked(id); return rawAttributeProperties.get(id); },
876
+ rawAttributeGroupProperties(id) { checked(id); return rawGroupProperties.get(id); },
877
+ rawParticleWildcardProperties(id) { checked(id); return particleWildcards.get(id); },
878
+ references(id) { checked(id); return slotsFor(id); },
879
+ owner(id) { const node = checked(id); return node.identity.kind === 'scoped' ? node.identity.owner : undefined; },
880
+ incomingAffiliates(id) { checked(id); return reverse.get(id) ?? empty; },
881
+ });
882
+ contexts.add(context);
883
+ metadata.set(context, sharedMetadata);
884
+ budget.chargeWork(4);
885
+ identityOccupants.set(context, identityOccupant);
886
+ requests.set(context, requestAuthority);
887
+ states.set(context, { changes, slots: changedSlots, edges: changedEdges, raw: rawProperties, simple: rawSimpleProperties,
888
+ elements: rawElementProperties, attributes: rawAttributeProperties, groups: rawGroupProperties, particleWildcards, originalUrWildcards: borrowedUr, notations, scalarSlots });
889
+ forks.set(context, input => candidate(input, context));
890
+ let projection;
891
+ projections.set(context, () => {
892
+ authenticate();
893
+ if (projection)
894
+ return projection;
895
+ budget.chargeWork(12 + 2 * frozenMembers.length);
896
+ const nodes = [], globals = [];
897
+ for (const id of frozenMembers) {
898
+ key(id);
899
+ const node = record(id);
900
+ nodes.push(node);
901
+ if (node.identity.kind === 'global')
902
+ globals.push(id);
903
+ }
904
+ projection = Object.freeze({ ...graph, nodes: Object.freeze(nodes), globals: Object.freeze(globals) });
905
+ return projection;
906
+ });
907
+ return context;
908
+ };
909
+ budget.chargeWork(4 + graph.nodes.length);
910
+ const actual = buildContext('actual', graph.nodes.map(node => node.id), new Map(), new Map(), new Map());
911
+ const candidate = (input, from = actual) => budget.guard(() => {
912
+ try {
913
+ budget.chargeWork(8);
914
+ assertSemanticContext(from);
915
+ if (requests.get(from) !== requestAuthority)
916
+ throw new InvalidContext('representation');
917
+ const parent = states.get(from);
918
+ const candidateKey = dataField(input, 'key'), candidateActive = dataField(input, 'active');
919
+ const additions = dataField(input, 'additions'), endpoint = dataField(input, 'endpoint'), rawTypes = dataField(input, 'rawTypes');
920
+ const rawSimpleTypes = dataField(input, 'rawSimpleTypes'), rawElements = dataField(input, 'rawElements'), rawGroups = dataField(input, 'rawAttributeGroups');
921
+ const rawAttributes = dataField(input, 'rawAttributes'), inputScalarSlots = dataField(input, 'scalarSlots');
922
+ const rawParticleWildcards = dataField(input, 'rawParticleWildcards');
923
+ const inputUrWildcards = dataField(input, 'originalUrWildcards');
924
+ const notationDelta = dataField(input, 'notations');
925
+ const notationActive = notationDelta === undefined ? undefined : dataField(notationDelta, 'active');
926
+ const notationAdditions = notationDelta === undefined ? undefined : dataField(notationDelta, 'additions');
927
+ if (typeof candidateKey !== 'string' || !Array.isArray(candidateActive)
928
+ || (additions !== undefined && !Array.isArray(additions)) || (rawTypes !== undefined && !Array.isArray(rawTypes))
929
+ || (rawGroups !== undefined && !Array.isArray(rawGroups)) || (rawSimpleTypes !== undefined && !Array.isArray(rawSimpleTypes)) || (rawElements !== undefined && !Array.isArray(rawElements))
930
+ || (rawAttributes !== undefined && !Array.isArray(rawAttributes)) || (inputScalarSlots !== undefined && !Array.isArray(inputScalarSlots))
931
+ || (rawParticleWildcards !== undefined && !Array.isArray(rawParticleWildcards))
932
+ || (inputUrWildcards !== undefined && !Array.isArray(inputUrWildcards)))
933
+ throw new InvalidContext('representation');
934
+ if (notationDelta !== undefined && (!Array.isArray(notationActive) || (notationAdditions !== undefined && !Array.isArray(notationAdditions))))
935
+ throw new InvalidContext('representation');
936
+ budget.reserveNodes((additions ? dataField(additions, 'length') : 0) + (endpoint ? 1 : 0)
937
+ + (notationAdditions ? dataField(notationAdditions, 'length') : 0));
938
+ // Snapshot data, but retain the identity of privately issued source
939
+ // selectors only after authenticating them against this exact Γ.
940
+ const originalHandles = new Map();
941
+ const urHandles = [];
942
+ for (let index = 0; index < (inputUrWildcards?.length ?? 0); index++) {
943
+ const handle = dataField(inputUrWildcards, String(index));
944
+ originalUrWildcardSource(actual, handle);
945
+ budget.chargeWork(2);
946
+ urHandles.push(handle);
947
+ }
948
+ for (let index = 0; index < (rawTypes?.length ?? 0); index++) {
949
+ const row = dataField(rawTypes, String(index)), content = dataField(row, 'content');
950
+ if (dataField(content, 'original') === undefined)
951
+ continue;
952
+ assertRawComplexTypeShape(row, budget);
953
+ if (!('particle' in row.content) || !row.content.original)
954
+ throw new InvalidContext('representation');
955
+ originalComplexParticleSource(actual, row.content.original);
956
+ if (row.content.particle !== row.content.original.particle)
957
+ throw new InvalidContext('reference', row.type);
958
+ budget.chargeWork(3);
959
+ originalHandles.set(index, row.content.original);
960
+ }
961
+ const delta = budget.freeze(budget.snapshot(input));
962
+ budget.chargeWork(12 + delta.active.length + parent.changes.size * 2 + parent.slots.size * 2 + parent.edges.size * 2
963
+ + parent.raw.size * 2 + parent.simple.size * 2 + parent.elements.size * 2 + parent.attributes.size * 2 + parent.groups.size * 2);
964
+ const changes = new Map(parent.changes), slots = new Map(parent.slots), edges = new Map(parent.edges);
965
+ const raw = new Map(parent.raw), simple = new Map(parent.simple), elements = new Map(parent.elements), attributes = new Map(parent.attributes), groups = new Map(parent.groups);
966
+ budget.chargeWork(2 + parent.particleWildcards.size * 2);
967
+ const particleWildcards = new Map(parent.particleWildcards);
968
+ budget.chargeWork(3 + parent.originalUrWildcards.size + urHandles.length);
969
+ const borrowedUr = new Map(parent.originalUrWildcards);
970
+ for (const handle of urHandles) {
971
+ key(handle.particle);
972
+ if (borrowedUr.has(handle.particle))
973
+ throw new InvalidContext('identity', handle.particle);
974
+ budget.chargeWork(2);
975
+ borrowedUr.set(handle.particle, handle);
976
+ }
977
+ const active = new Set(delta.active);
978
+ let scalarSlots = parent.scalarSlots;
979
+ if (delta.scalarSlots !== undefined) {
980
+ budget.chargeWork(4);
981
+ const selected = new Set(), members = [];
982
+ for (const reference of delta.scalarSlots) {
983
+ assertSemanticTypeReferenceShape(reference, budget);
984
+ if (reference.kind !== 'original-generated')
985
+ throw new InvalidContext('representation');
986
+ key(reference.owner);
987
+ const slot = originalScalarSlots.get(reference.owner);
988
+ if (!slot)
989
+ throw new InvalidContext('missing', reference.owner);
990
+ if (selected.has(reference.owner))
991
+ throw new InvalidContext('identity', reference.owner);
992
+ budget.chargeWork(2);
993
+ selected.add(reference.owner);
994
+ members.push(slot);
995
+ }
996
+ budget.chargeWork(2 + members.length);
997
+ scalarSlots = { active: selected, members: Object.freeze(members) };
998
+ }
999
+ let notations = parent.notations;
1000
+ if (delta.notations !== undefined) {
1001
+ budget.chargeWork(4 + parent.notations.additions.size * 2);
1002
+ const additions = new Map(parent.notations.additions), selected = new Set(), names = [];
1003
+ for (const rawName of delta.notations.active) {
1004
+ const name = notationName(rawName), id = notationNameKey(name, budget);
1005
+ if (selected.has(id))
1006
+ throw new InvalidContext('identity', id);
1007
+ budget.chargeWork(2);
1008
+ selected.add(id);
1009
+ names.push(name);
1010
+ }
1011
+ for (const rawProperties of delta.notations.additions ?? []) {
1012
+ const properties = notationProperties(rawProperties), id = notationNameKey(properties.name, budget);
1013
+ if (originalNotations.has(id) || additions.has(id))
1014
+ throw new InvalidContext('identity', id);
1015
+ if (!selected.has(id))
1016
+ throw new InvalidContext('outside-context', id);
1017
+ budget.chargeWork();
1018
+ additions.set(id, properties);
1019
+ }
1020
+ for (const id of selected) {
1021
+ key(id);
1022
+ if (!originalNotations.has(id) && !additions.has(id))
1023
+ throw new InvalidContext('missing', id);
1024
+ }
1025
+ budget.chargeWork(4 + names.length);
1026
+ notations = { additions, active: selected, members: Object.freeze(names) };
1027
+ }
1028
+ for (const node of delta.additions ?? []) {
1029
+ key(node.id);
1030
+ if (originals.has(node.id) || changes.has(node.id) || originalNames.has(identityId(node)) || !matchesHypotheticalNodeId(node, budget.chargeWork))
1031
+ throw new InvalidContext('identity', node.id);
1032
+ if (!active.has(node.id))
1033
+ throw new InvalidContext('outside-context', node.id);
1034
+ budget.chargeWork();
1035
+ changes.set(node.id, node);
1036
+ indexNode(node, slots, edges);
1037
+ }
1038
+ if (delta.endpoint) {
1039
+ const node = delta.endpoint;
1040
+ key(node.id);
1041
+ const original = parent.changes.get(node.id) ?? originals.get(node.id);
1042
+ if (from.lookup(node.id).kind !== 'found' || !original || original.kind !== 'complexType' || node.kind !== 'complexType'
1043
+ || !sameSemanticIdentity(original, node, budget.chargeWork) || !matchesHypotheticalNodeId(node, budget.chargeWork)
1044
+ || !active.has(node.id))
1045
+ throw new InvalidContext('endpoint', node.id);
1046
+ budget.chargeWork();
1047
+ changes.set(node.id, node);
1048
+ indexNode(node, slots, edges);
1049
+ }
1050
+ const permittedProperty = (id) => {
1051
+ key(id);
1052
+ if (from.kind === 'candidate' && id !== delta.endpoint?.id && (originals.has(id) || parent.changes.has(id)))
1053
+ throw new InvalidContext('endpoint', id);
1054
+ };
1055
+ budget.chargeWork(4);
1056
+ const seenRaw = new Set(), seenSimple = new Set(), seenElements = new Set(), seenAttributes = new Set(), seenGroups = new Set();
1057
+ const unique = (id, seen) => { key(id); if (seen.has(id))
1058
+ throw new InvalidContext('identity', id); budget.chargeWork(); seen.add(id); };
1059
+ for (const supplied of delta.rawParticleWildcards ?? []) {
1060
+ const row = prepareRawParticleWildcardProperties(supplied, budget), node = changes.get(row.particle);
1061
+ key(row.particle);
1062
+ budget.chargeWork(6);
1063
+ // Stored inactive additions count too: an inherited particle never acquires or replaces this role.
1064
+ if (originals.has(row.particle) || parent.changes.has(row.particle) || particleWildcards.has(row.particle)
1065
+ || !active.has(row.particle) || node?.kind !== 'particle' || node.term.kind !== 'any')
1066
+ throw new InvalidContext('representation', row.particle);
1067
+ budget.chargeWork();
1068
+ particleWildcards.set(row.particle, row);
1069
+ }
1070
+ for (const [index, copied] of (delta.rawTypes ?? []).entries()) {
1071
+ const original = originalHandles.get(index);
1072
+ budget.chargeWork(5);
1073
+ const row = original && 'particle' in copied.content
1074
+ ? Object.freeze({ ...copied, content: Object.freeze({ ...copied.content, original }) }) : copied;
1075
+ assertRawComplexTypeShape(row, budget);
1076
+ budget.chargeWork(6);
1077
+ // A first row may reify an untouched original's latent properties.
1078
+ // Preparation stays structural; correspondence must authenticate
1079
+ // those properties before aggregate acceptance in the child.
1080
+ const lateOriginal = from.kind === 'candidate' && originals.get(row.type)?.kind === 'complexType'
1081
+ && !parent.raw.has(row.type) && !parent.changes.has(row.type) && !absentOriginals.has(row.type);
1082
+ if (!lateOriginal)
1083
+ permittedProperty(row.type);
1084
+ unique(row.type, seenRaw);
1085
+ budget.chargeWork();
1086
+ raw.set(row.type, row);
1087
+ }
1088
+ for (const row of delta.rawSimpleTypes ?? []) {
1089
+ if (!validateRawSimpleTypeShape(row, budget))
1090
+ throw new InvalidContext('representation');
1091
+ if (row.facetComponentSet) {
1092
+ budget.chargeWork(row.facetComponentSet.length + 2);
1093
+ if (row.facetComponentSet.some(entry => !('facets' in entry))
1094
+ && (originals.has(row.type) || parent.changes.has(row.type) || parent.simple.has(row.type)
1095
+ || changes.get(row.type)?.kind !== 'simpleType'))
1096
+ throw new InvalidContext('representation', row.type);
1097
+ }
1098
+ permittedProperty(row.type);
1099
+ unique(row.type, seenSimple);
1100
+ budget.chargeWork();
1101
+ simple.set(row.type, row);
1102
+ }
1103
+ for (const row of delta.rawElements ?? []) {
1104
+ if (!validateRawElementShape(row, budget))
1105
+ throw new InvalidContext('representation');
1106
+ if ((row.identityConstraints !== undefined || parent.elements.get(row.element)?.identityConstraints !== undefined)
1107
+ && (originals.has(row.element) || parent.changes.has(row.element)
1108
+ || parent.elements.has(row.element) || changes.get(row.element)?.kind !== 'element'))
1109
+ throw new InvalidContext('representation', row.element);
1110
+ if (row.identityConstraints?.length) {
1111
+ const registry = originalIdentityConstraints();
1112
+ budget.chargeWork(4 + row.identityConstraints.length * (registry.identities.length + 1));
1113
+ if (!registry.sourceBound || row.identityConstraints.some(identity => !registry.identities.includes(identity)))
1114
+ throw new InvalidContext('reference', row.element);
1115
+ }
1116
+ permittedProperty(row.element);
1117
+ unique(row.element, seenElements);
1118
+ budget.chargeWork();
1119
+ elements.set(row.element, row);
1120
+ }
1121
+ for (const row of delta.rawAttributes ?? []) {
1122
+ if (!validateRawAttributeShape(row, budget))
1123
+ throw new InvalidContext('representation');
1124
+ permittedProperty(row.attribute);
1125
+ unique(row.attribute, seenAttributes);
1126
+ budget.chargeWork();
1127
+ attributes.set(row.attribute, row);
1128
+ }
1129
+ for (const row of delta.rawAttributeGroups ?? []) {
1130
+ validateRawAttributeGroupShape(row, budget);
1131
+ permittedProperty(row.group);
1132
+ unique(row.group, seenGroups);
1133
+ budget.chargeWork();
1134
+ groups.set(row.group, row);
1135
+ }
1136
+ budget.chargeWork(5 + raw.size + simple.size + elements.size + attributes.size + groups.size);
1137
+ const context = buildContext('candidate', delta.active, changes, slots, edges, [...raw.values()], [...simple.values()], [...elements.values()], [...groups.values()], notations, scalarSlots, [...attributes.values()], particleWildcards, borrowedUr);
1138
+ budget.chargeWork();
1139
+ parents.set(context, from);
1140
+ budget.chargeWork(3);
1141
+ return Object.freeze({ kind: 'prepared', context });
1142
+ }
1143
+ catch (error) {
1144
+ if (error instanceof TypeError) {
1145
+ budget.chargeWork(4);
1146
+ return Object.freeze({ kind: 'candidate-rejected', code: 'representation' });
1147
+ }
1148
+ if (!(error instanceof InvalidContext))
1149
+ throw error;
1150
+ budget.chargeWork(4);
1151
+ return Object.freeze({ kind: 'candidate-rejected', code: error.code, component: error.component });
1152
+ }
1153
+ });
1154
+ budget.chargeWork(8);
1155
+ return Object.freeze({ kind: 'prepared', request: Object.freeze({ graph, actual, budget, candidate }) });
1156
+ }
1157
+ catch (error) {
1158
+ if (error instanceof TypeError) {
1159
+ budget.chargeWork(4);
1160
+ return Object.freeze({ kind: 'input-error', code: 'representation' });
1161
+ }
1162
+ if (!(error instanceof InvalidContext))
1163
+ throw error;
1164
+ budget.chargeWork(4);
1165
+ return Object.freeze({ kind: 'input-error', code: error.code, component: error.component });
1166
+ }
1167
+ });
1168
+ }