@techspokes/typescript-wsdl-client 1.1.4 → 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. package/README.md +81 -35
  2. package/dist/app/generateApp.d.ts +0 -1
  3. package/dist/app/generateApp.js +8 -6
  4. package/dist/app/generateCheckedApp.d.ts +38 -0
  5. package/dist/app/generateCheckedApp.js +108 -0
  6. package/dist/checkedPipeline.d.ts +155 -0
  7. package/dist/checkedPipeline.js +448 -0
  8. package/dist/checkedPlanning.d.ts +123 -0
  9. package/dist/checkedPlanning.js +245 -0
  10. package/dist/cli.d.ts +0 -1
  11. package/dist/cli.js +123 -5
  12. package/dist/client/checkedDirectRuntime.d.ts +96 -0
  13. package/dist/client/checkedDirectRuntime.js +43 -0
  14. package/dist/client/directClientRuntime.d.ts +74 -0
  15. package/dist/client/directClientRuntime.js +165 -0
  16. package/dist/client/directClientVersion.d.ts +6 -0
  17. package/dist/client/directClientVersion.js +6 -0
  18. package/dist/client/generateClient.d.ts +0 -1
  19. package/dist/client/generateClient.js +26 -12
  20. package/dist/client/generateDirectClient.d.ts +32 -0
  21. package/dist/client/generateDirectClient.js +268 -0
  22. package/dist/client/generateOperations.d.ts +0 -1
  23. package/dist/client/generateTypes.d.ts +0 -1
  24. package/dist/client/generateUtils.d.ts +0 -1
  25. package/dist/client/generateUtils.js +3 -1
  26. package/dist/compiler/applicationGroups.d.ts +53 -0
  27. package/dist/compiler/applicationGroups.js +403 -0
  28. package/dist/compiler/buildCanonicalGraph.d.ts +6 -0
  29. package/dist/compiler/buildCanonicalGraph.js +381 -0
  30. package/dist/compiler/canonicalGraph.d.ts +197 -0
  31. package/dist/compiler/canonicalGraph.js +37 -0
  32. package/dist/compiler/catalogErrors.d.ts +17 -0
  33. package/dist/compiler/catalogErrors.js +86 -0
  34. package/dist/compiler/catalogProvenance.d.ts +14 -0
  35. package/dist/compiler/catalogProvenance.js +229 -0
  36. package/dist/compiler/checkedAssessment.d.ts +90 -0
  37. package/dist/compiler/checkedAssessment.js +300 -0
  38. package/dist/compiler/checkedComponentSource.d.ts +16 -0
  39. package/dist/compiler/checkedComponentSource.js +31 -0
  40. package/dist/compiler/checkedSourcePreparation.d.ts +72 -0
  41. package/dist/compiler/checkedSourcePreparation.js +202 -0
  42. package/dist/compiler/complexTypeContent.d.ts +58 -0
  43. package/dist/compiler/complexTypeContent.js +558 -0
  44. package/dist/compiler/componentCorrespondence.d.ts +32 -0
  45. package/dist/compiler/componentCorrespondence.js +140 -0
  46. package/dist/compiler/componentRecordProjection.d.ts +109 -0
  47. package/dist/compiler/componentRecordProjection.js +319 -0
  48. package/dist/compiler/componentSoapPreparation.d.ts +20 -0
  49. package/dist/compiler/componentSoapPreparation.js +36 -0
  50. package/dist/compiler/composeCanonicalGraph.d.ts +68 -0
  51. package/dist/compiler/composeCanonicalGraph.js +252 -0
  52. package/dist/compiler/dataOwnership.d.ts +21 -0
  53. package/dist/compiler/dataOwnership.js +167 -0
  54. package/dist/compiler/datatypeValues.d.ts +46 -0
  55. package/dist/compiler/datatypeValues.js +275 -0
  56. package/dist/compiler/directCodec.d.ts +116 -0
  57. package/dist/compiler/directCodec.js +377 -0
  58. package/dist/compiler/directExecutionPolicy.d.ts +9 -0
  59. package/dist/compiler/directExecutionPolicy.js +17 -0
  60. package/dist/compiler/directOperation.d.ts +114 -0
  61. package/dist/compiler/directOperation.js +373 -0
  62. package/dist/compiler/directSoap.d.ts +66 -0
  63. package/dist/compiler/directSoap.js +391 -0
  64. package/dist/compiler/directSoapSource.d.ts +38 -0
  65. package/dist/compiler/directSoapSource.js +233 -0
  66. package/dist/compiler/directSourceCapsule.d.ts +169 -0
  67. package/dist/compiler/directSourceCapsule.js +727 -0
  68. package/dist/compiler/directStructure.d.ts +128 -0
  69. package/dist/compiler/directStructure.js +543 -0
  70. package/dist/compiler/directStructurePlan.d.ts +149 -0
  71. package/dist/compiler/directStructurePlan.js +623 -0
  72. package/dist/compiler/directValues.d.ts +128 -0
  73. package/dist/compiler/directValues.js +1116 -0
  74. package/dist/compiler/finiteRe01Construction.d.ts +69 -0
  75. package/dist/compiler/finiteRe01Construction.js +422 -0
  76. package/dist/compiler/finiteRe01Verification.d.ts +218 -0
  77. package/dist/compiler/finiteRe01Verification.js +1217 -0
  78. package/dist/compiler/generateCatalog.d.ts +0 -1
  79. package/dist/compiler/graphTraversal.d.ts +10 -0
  80. package/dist/compiler/graphTraversal.js +37 -0
  81. package/dist/compiler/hypotheticalScopedIdentity.d.ts +22 -0
  82. package/dist/compiler/hypotheticalScopedIdentity.js +81 -0
  83. package/dist/compiler/occurrenceAnalysis.d.ts +66 -0
  84. package/dist/compiler/occurrenceAnalysis.js +316 -0
  85. package/dist/compiler/originalSourceMembership.d.ts +5 -0
  86. package/dist/compiler/originalSourceMembership.js +31 -0
  87. package/dist/compiler/particleAttribution.d.ts +16 -0
  88. package/dist/compiler/particleAttribution.js +494 -0
  89. package/dist/compiler/particleDeclarationConsistency.d.ts +23 -0
  90. package/dist/compiler/particleDeclarationConsistency.js +206 -0
  91. package/dist/compiler/particleExtension.d.ts +21 -0
  92. package/dist/compiler/particleExtension.js +123 -0
  93. package/dist/compiler/particleLocalAssessment.d.ts +19 -0
  94. package/dist/compiler/particleLocalAssessment.js +92 -0
  95. package/dist/compiler/particleRestriction.d.ts +23 -0
  96. package/dist/compiler/particleRestriction.js +494 -0
  97. package/dist/compiler/particleSemanticView.d.ts +51 -0
  98. package/dist/compiler/particleSemanticView.js +310 -0
  99. package/dist/compiler/particleWildcardRelation.d.ts +87 -0
  100. package/dist/compiler/particleWildcardRelation.js +143 -0
  101. package/dist/compiler/projectionScalar.d.ts +32 -0
  102. package/dist/compiler/projectionScalar.js +184 -0
  103. package/dist/compiler/re01CandidateAssignments.d.ts +95 -0
  104. package/dist/compiler/re01CandidateAssignments.js +341 -0
  105. package/dist/compiler/re01CandidateCorrespondence.d.ts +85 -0
  106. package/dist/compiler/re01CandidateCorrespondence.js +701 -0
  107. package/dist/compiler/re01TypeProperties.d.ts +70 -0
  108. package/dist/compiler/re01TypeProperties.js +120 -0
  109. package/dist/compiler/re01TypePropertyValidation.d.ts +22 -0
  110. package/dist/compiler/re01TypePropertyValidation.js +161 -0
  111. package/dist/compiler/resolveCanonicalGraph.d.ts +41 -0
  112. package/dist/compiler/resolveCanonicalGraph.js +240 -0
  113. package/dist/compiler/scalarSchemaAssessment.d.ts +424 -0
  114. package/dist/compiler/scalarSchemaAssessment.js +5198 -0
  115. package/dist/compiler/schemaAttributeGroupProperties.d.ts +16 -0
  116. package/dist/compiler/schemaAttributeGroupProperties.js +53 -0
  117. package/dist/compiler/schemaAttributeProperties.d.ts +9 -0
  118. package/dist/compiler/schemaAttributeProperties.js +11 -0
  119. package/dist/compiler/schemaAttributeUses.d.ts +110 -0
  120. package/dist/compiler/schemaAttributeUses.js +798 -0
  121. package/dist/compiler/schemaBinaryWordReconstruction.d.ts +9 -0
  122. package/dist/compiler/schemaBinaryWordReconstruction.js +33 -0
  123. package/dist/compiler/schemaBuiltinFacets.d.ts +13 -0
  124. package/dist/compiler/schemaBuiltinFacets.js +51 -0
  125. package/dist/compiler/schemaCalendarImages.d.ts +7 -0
  126. package/dist/compiler/schemaCalendarImages.js +204 -0
  127. package/dist/compiler/schemaCalendarLanguage.d.ts +10 -0
  128. package/dist/compiler/schemaCalendarLanguage.js +227 -0
  129. package/dist/compiler/schemaCompiler.d.ts +0 -1
  130. package/dist/compiler/schemaComponentEquality.d.ts +27 -0
  131. package/dist/compiler/schemaComponentEquality.js +446 -0
  132. package/dist/compiler/schemaConstructionAssessment.d.ts +79 -0
  133. package/dist/compiler/schemaConstructionAssessment.js +745 -0
  134. package/dist/compiler/schemaDatatypeValues.d.ts +3 -0
  135. package/dist/compiler/schemaDatatypeValues.js +2 -0
  136. package/dist/compiler/schemaDecimalLanguage.d.ts +6 -0
  137. package/dist/compiler/schemaDecimalLanguage.js +102 -0
  138. package/dist/compiler/schemaDeclarationPrimitives.d.ts +39 -0
  139. package/dist/compiler/schemaDeclarationPrimitives.js +211 -0
  140. package/dist/compiler/schemaDocumentSyntax.d.ts +54 -0
  141. package/dist/compiler/schemaDocumentSyntax.js +294 -0
  142. package/dist/compiler/schemaDurationLanguage.d.ts +10 -0
  143. package/dist/compiler/schemaDurationLanguage.js +170 -0
  144. package/dist/compiler/schemaElementInstance.d.ts +30 -0
  145. package/dist/compiler/schemaElementInstance.js +45 -0
  146. package/dist/compiler/schemaElementProperties.d.ts +15 -0
  147. package/dist/compiler/schemaElementProperties.js +23 -0
  148. package/dist/compiler/schemaEndpointWordCapacity.d.ts +35 -0
  149. package/dist/compiler/schemaEndpointWordCapacity.js +39 -0
  150. package/dist/compiler/schemaExactCalendar.d.ts +72 -0
  151. package/dist/compiler/schemaExactCalendar.js +264 -0
  152. package/dist/compiler/schemaFacetAnnotation.d.ts +31 -0
  153. package/dist/compiler/schemaFacetAnnotation.js +199 -0
  154. package/dist/compiler/schemaGeneratedScalarShape.d.ts +34 -0
  155. package/dist/compiler/schemaGeneratedScalarShape.js +178 -0
  156. package/dist/compiler/schemaIdentityConstraints.d.ts +72 -0
  157. package/dist/compiler/schemaIdentityConstraints.js +362 -0
  158. package/dist/compiler/schemaIeeeLanguage.d.ts +42 -0
  159. package/dist/compiler/schemaIeeeLanguage.js +759 -0
  160. package/dist/compiler/schemaIntegerImages.d.ts +10 -0
  161. package/dist/compiler/schemaIntegerImages.js +113 -0
  162. package/dist/compiler/schemaLexicalPredicates.d.ts +28 -0
  163. package/dist/compiler/schemaLexicalPredicates.js +63 -0
  164. package/dist/compiler/schemaNotationProperties.d.ts +31 -0
  165. package/dist/compiler/schemaNotationProperties.js +84 -0
  166. package/dist/compiler/schemaNumericImageConditions.d.ts +23 -0
  167. package/dist/compiler/schemaNumericImageConditions.js +66 -0
  168. package/dist/compiler/schemaParticleWildcardProperties.d.ts +19 -0
  169. package/dist/compiler/schemaParticleWildcardProperties.js +43 -0
  170. package/dist/compiler/schemaPattern.d.ts +1061 -0
  171. package/dist/compiler/schemaPattern.js +581 -0
  172. package/dist/compiler/schemaRegularLanguage.d.ts +66 -0
  173. package/dist/compiler/schemaRegularLanguage.js +1166 -0
  174. package/dist/compiler/schemaScalarContext.d.ts +85 -0
  175. package/dist/compiler/schemaScalarContext.js +78 -0
  176. package/dist/compiler/schemaScalarKernel.d.ts +181 -0
  177. package/dist/compiler/schemaScalarKernel.js +391 -0
  178. package/dist/compiler/schemaScalarWitnesses.d.ts +5 -0
  179. package/dist/compiler/schemaScalarWitnesses.js +118 -0
  180. package/dist/compiler/schemaSimpleTypeProperties.d.ts +94 -0
  181. package/dist/compiler/schemaSimpleTypeProperties.js +103 -0
  182. package/dist/compiler/schemaSourceGrammar.d.ts +26 -0
  183. package/dist/compiler/schemaSourceGrammar.js +290 -0
  184. package/dist/compiler/schemaSourceLexical.d.ts +3 -0
  185. package/dist/compiler/schemaSourceLexical.js +12 -0
  186. package/dist/compiler/schemaSourceValues.d.ts +50 -0
  187. package/dist/compiler/schemaSourceValues.js +225 -0
  188. package/dist/compiler/schemaSourceWildcards.d.ts +27 -0
  189. package/dist/compiler/schemaSourceWildcards.js +249 -0
  190. package/dist/compiler/schemaSymbolicSequences.d.ts +15 -0
  191. package/dist/compiler/schemaSymbolicSequences.js +99 -0
  192. package/dist/compiler/schemaSymbolicValueSets.d.ts +31 -0
  193. package/dist/compiler/schemaSymbolicValueSets.js +149 -0
  194. package/dist/compiler/schemaSyntaxAssessment.d.ts +24 -0
  195. package/dist/compiler/schemaSyntaxAssessment.js +361 -0
  196. package/dist/compiler/schemaTemporalAliases.d.ts +5 -0
  197. package/dist/compiler/schemaTemporalAliases.js +195 -0
  198. package/dist/compiler/schemaTokenImages.d.ts +8 -0
  199. package/dist/compiler/schemaTokenImages.js +142 -0
  200. package/dist/compiler/schemaTypeIdentity.d.ts +38 -0
  201. package/dist/compiler/schemaTypeIdentity.js +80 -0
  202. package/dist/compiler/schemaTypeRelations.d.ts +37 -0
  203. package/dist/compiler/schemaTypeRelations.js +576 -0
  204. package/dist/compiler/schemaUri.d.ts +12 -0
  205. package/dist/compiler/schemaUri.js +103 -0
  206. package/dist/compiler/schemaValueContext.d.ts +25 -0
  207. package/dist/compiler/schemaValueContext.js +1 -0
  208. package/dist/compiler/schemaValueImages.d.ts +9 -0
  209. package/dist/compiler/schemaValueImages.js +142 -0
  210. package/dist/compiler/schemaValueSequences.d.ts +14 -0
  211. package/dist/compiler/schemaValueSequences.js +19 -0
  212. package/dist/compiler/semanticBudget.d.ts +67 -0
  213. package/dist/compiler/semanticBudget.js +193 -0
  214. package/dist/compiler/semanticCatalog.d.ts +121 -0
  215. package/dist/compiler/semanticCatalog.js +160 -0
  216. package/dist/compiler/semanticContext.d.ts +183 -0
  217. package/dist/compiler/semanticContext.js +1207 -0
  218. package/dist/compiler/semanticTypeDependencies.d.ts +7 -0
  219. package/dist/compiler/semanticTypeDependencies.js +64 -0
  220. package/dist/compiler/semanticTypeReference.d.ts +23 -0
  221. package/dist/compiler/semanticTypeReference.js +36 -0
  222. package/dist/compiler/shapeResolver.d.ts +1 -1
  223. package/dist/compiler/shapeResolver.js +7 -9
  224. package/dist/compiler/soapHeaders.d.ts +16 -0
  225. package/dist/compiler/soapHeaders.js +42 -0
  226. package/dist/compiler/sourceSchemaBinding.d.ts +25 -0
  227. package/dist/compiler/sourceSchemaBinding.js +39 -0
  228. package/dist/compiler/standardSchemaComponents.d.ts +71 -0
  229. package/dist/compiler/standardSchemaComponents.js +74 -0
  230. package/dist/compiler/standardSchemaConstruction.d.ts +20 -0
  231. package/dist/compiler/standardSchemaConstruction.js +34 -0
  232. package/dist/compiler/structuralCompanions.d.ts +15 -0
  233. package/dist/compiler/structuralCompanions.js +232 -0
  234. package/dist/compiler/validateSemanticGraph.d.ts +4 -0
  235. package/dist/compiler/validateSemanticGraph.js +376 -0
  236. package/dist/compiler/wildcardAlgebra.d.ts +25 -0
  237. package/dist/compiler/wildcardAlgebra.js +155 -0
  238. package/dist/compiler/wsdlPolicyRequirements.d.ts +43 -0
  239. package/dist/compiler/wsdlPolicyRequirements.js +239 -0
  240. package/dist/config.d.ts +0 -1
  241. package/dist/gateway/generateCheckedGateway.d.ts +32 -0
  242. package/dist/gateway/generateCheckedGateway.js +293 -0
  243. package/dist/gateway/generateGateway.d.ts +0 -1
  244. package/dist/gateway/generateGateway.js +2 -2
  245. package/dist/gateway/generators.d.ts +0 -1
  246. package/dist/gateway/helpers.d.ts +0 -1
  247. package/dist/generation/componentShape.d.ts +14 -0
  248. package/dist/generation/componentShape.js +269 -0
  249. package/dist/generation/preamble.d.ts +0 -1
  250. package/dist/generation/sourceLayout.d.ts +13 -0
  251. package/dist/generation/sourceLayout.js +40 -0
  252. package/dist/generation/writeGeneratedSource.d.ts +0 -1
  253. package/dist/index.d.ts +9 -1
  254. package/dist/index.js +3 -0
  255. package/dist/loader/fetch.d.ts +0 -1
  256. package/dist/loader/orderedSyntax.d.ts +84 -0
  257. package/dist/loader/orderedSyntax.js +222 -0
  258. package/dist/loader/resolutionDepth.d.ts +6 -0
  259. package/dist/loader/resolutionDepth.js +65 -0
  260. package/dist/loader/schemaInput.d.ts +80 -0
  261. package/dist/loader/schemaInput.js +249 -0
  262. package/dist/loader/schemaResources.d.ts +60 -0
  263. package/dist/loader/schemaResources.js +333 -0
  264. package/dist/loader/wsdlLoader.d.ts +0 -1
  265. package/dist/openapi/casing.d.ts +0 -1
  266. package/dist/openapi/generateOpenAPI.d.ts +0 -1
  267. package/dist/openapi/generateOpenAPI.js +2 -2
  268. package/dist/openapi/generatePaths.d.ts +0 -1
  269. package/dist/openapi/generateSchemas.d.ts +0 -1
  270. package/dist/openapi/security.d.ts +0 -1
  271. package/dist/pipeline.d.ts +6 -2
  272. package/dist/pipeline.js +13 -0
  273. package/dist/test/generateCheckedTests.d.ts +17 -0
  274. package/dist/test/generateCheckedTests.js +60 -0
  275. package/dist/test/generateTests.d.ts +0 -1
  276. package/dist/test/generateTests.js +2 -2
  277. package/dist/test/generators.d.ts +0 -1
  278. package/dist/test/mockData.d.ts +0 -1
  279. package/dist/test/mockData.js +20 -14
  280. package/dist/util/attributeWildcards.d.ts +0 -1
  281. package/dist/util/builder.d.ts +0 -1
  282. package/dist/util/catalogMeta.d.ts +0 -1
  283. package/dist/util/checkedCliDiagnostics.d.ts +11 -0
  284. package/dist/util/checkedCliDiagnostics.js +22 -0
  285. package/dist/util/cli.d.ts +0 -1
  286. package/dist/util/errors.d.ts +0 -1
  287. package/dist/util/imports.d.ts +0 -1
  288. package/dist/util/runtimeSource.d.ts +0 -1
  289. package/dist/util/runtimeSource.js +3 -5
  290. package/dist/util/securityConfig.d.ts +0 -1
  291. package/dist/util/streamConfig.d.ts +0 -1
  292. package/dist/util/tools.d.ts +0 -1
  293. package/dist/util/xmlWhitespace.d.ts +2 -0
  294. package/dist/util/xmlWhitespace.js +4 -0
  295. package/dist/xsd/primitives.d.ts +0 -1
  296. package/docs/agent-skill.md +2 -0
  297. package/docs/api-reference.md +1 -1
  298. package/docs/checked-gateway.md +210 -0
  299. package/docs/checked-generation.md +161 -0
  300. package/docs/cli-reference.md +43 -1
  301. package/docs/concepts.md +136 -1
  302. package/docs/configuration.md +5 -1
  303. package/docs/corpus.md +33 -0
  304. package/docs/direct-values.md +311 -0
  305. package/docs/examples/checked-forecast.wsdl +19 -0
  306. package/docs/gateway-guide.md +1 -1
  307. package/docs/generated-code.md +10 -5
  308. package/docs/mapping-contract.md +114 -0
  309. package/docs/migration-playbook.md +1 -1
  310. package/docs/output-anatomy.md +1 -1
  311. package/docs/start-here.md +8 -2
  312. package/docs/supported-patterns.md +17 -5
  313. package/docs/testing.md +117 -31
  314. package/llms.txt +7 -7
  315. package/package.json +79 -25
  316. package/src/generation/preambles/direct-client/typescript.preamble +3 -0
  317. package/src/runtime/checkedGatewayHost.tpl.txt +157 -0
  318. package/src/runtime/streamXml.ts +1 -1
  319. package/dist/app/generateApp.d.ts.map +0 -1
  320. package/dist/cli.d.ts.map +0 -1
  321. package/dist/client/generateClient.d.ts.map +0 -1
  322. package/dist/client/generateOperations.d.ts.map +0 -1
  323. package/dist/client/generateTypes.d.ts.map +0 -1
  324. package/dist/client/generateUtils.d.ts.map +0 -1
  325. package/dist/compiler/generateCatalog.d.ts.map +0 -1
  326. package/dist/compiler/schemaCompiler.d.ts.map +0 -1
  327. package/dist/compiler/shapeResolver.d.ts.map +0 -1
  328. package/dist/config.d.ts.map +0 -1
  329. package/dist/gateway/generateGateway.d.ts.map +0 -1
  330. package/dist/gateway/generators.d.ts.map +0 -1
  331. package/dist/gateway/helpers.d.ts.map +0 -1
  332. package/dist/generation/preamble.d.ts.map +0 -1
  333. package/dist/generation/writeGeneratedSource.d.ts.map +0 -1
  334. package/dist/index.d.ts.map +0 -1
  335. package/dist/loader/fetch.d.ts.map +0 -1
  336. package/dist/loader/wsdlLoader.d.ts.map +0 -1
  337. package/dist/openapi/casing.d.ts.map +0 -1
  338. package/dist/openapi/generateOpenAPI.d.ts.map +0 -1
  339. package/dist/openapi/generatePaths.d.ts.map +0 -1
  340. package/dist/openapi/generateSchemas.d.ts.map +0 -1
  341. package/dist/openapi/security.d.ts.map +0 -1
  342. package/dist/pipeline.d.ts.map +0 -1
  343. package/dist/runtime/jsonArray.d.ts +0 -24
  344. package/dist/runtime/jsonArray.d.ts.map +0 -1
  345. package/dist/runtime/jsonArray.js +0 -52
  346. package/dist/runtime/ndjson.d.ts +0 -24
  347. package/dist/runtime/ndjson.d.ts.map +0 -1
  348. package/dist/runtime/ndjson.js +0 -30
  349. package/dist/runtime/streamXml.d.ts +0 -45
  350. package/dist/runtime/streamXml.d.ts.map +0 -1
  351. package/dist/runtime/streamXml.js +0 -212
  352. package/dist/test/generateTests.d.ts.map +0 -1
  353. package/dist/test/generators.d.ts.map +0 -1
  354. package/dist/test/mockData.d.ts.map +0 -1
  355. package/dist/util/attributeWildcards.d.ts.map +0 -1
  356. package/dist/util/builder.d.ts.map +0 -1
  357. package/dist/util/catalogMeta.d.ts.map +0 -1
  358. package/dist/util/cli.d.ts.map +0 -1
  359. package/dist/util/errors.d.ts.map +0 -1
  360. package/dist/util/imports.d.ts.map +0 -1
  361. package/dist/util/runtimeSource.d.ts.map +0 -1
  362. package/dist/util/securityConfig.d.ts.map +0 -1
  363. package/dist/util/streamConfig.d.ts.map +0 -1
  364. package/dist/util/tools.d.ts.map +0 -1
  365. package/dist/xsd/primitives.d.ts.map +0 -1
  366. package/docs/AGENTS.md +0 -47
  367. package/docs/README.md +0 -56
  368. package/docs/architecture.md +0 -149
  369. package/docs/decisions/001-test-generation.md +0 -36
  370. package/docs/decisions/002-streamable-responses.md +0 -330
  371. package/docs/file-naming-and-path-organization.md +0 -213
  372. package/docs/releases/README.md +0 -94
  373. package/docs/releases/v0.20.0.md +0 -22
  374. package/docs/releases/v0.21.0.md +0 -30
  375. package/docs/releases/v0.22.0.md +0 -30
  376. package/docs/releases/v0.23.0.md +0 -31
  377. package/docs/releases/v0.24.0.md +0 -38
  378. package/docs/releases/v0.25.0.md +0 -31
  379. package/docs/releases/v0.25.2.md +0 -32
  380. package/docs/releases/v0.26.0.md +0 -32
  381. package/docs/releases/v0.27.0.md +0 -31
  382. package/docs/releases/v0.28.0.md +0 -32
  383. package/docs/releases/v0.29.0.md +0 -32
  384. package/docs/releases/v0.30.0.md +0 -30
  385. package/docs/releases/v0.30.1.md +0 -31
  386. package/docs/releases/v0.30.2.md +0 -30
  387. package/docs/releases/v0.30.3.md +0 -33
  388. package/docs/releases/v0.31.0.md +0 -33
  389. package/docs/releases/v0.32.0.md +0 -33
  390. package/docs/releases/v0.33.0.md +0 -34
  391. package/docs/releases/v0.34.0.md +0 -30
  392. package/docs/releases/v0.35.0.md +0 -33
  393. package/docs/releases/v0.36.0.md +0 -32
  394. package/docs/releases/v0.37.0.md +0 -33
  395. package/docs/releases/v0.38.0.md +0 -35
  396. package/docs/releases/v0.39.0.md +0 -35
  397. package/docs/releases/v0.40.0.md +0 -45
  398. package/docs/releases/v0.40.1.md +0 -34
  399. package/docs/releases/v1.0.0.md +0 -42
  400. package/docs/releases/v1.0.1.md +0 -38
  401. package/docs/releases/v1.0.2.md +0 -51
  402. package/docs/releases/v1.0.3.md +0 -37
  403. package/docs/releases/v1.0.4.md +0 -45
  404. package/docs/releases/v1.0.5.md +0 -41
  405. package/docs/releases/v1.0.6.md +0 -35
  406. package/docs/releases/v1.0.7.md +0 -36
  407. package/docs/releases/v1.1.0.md +0 -42
  408. package/docs/releases/v1.1.1.md +0 -44
  409. package/docs/releases/v1.1.2.md +0 -42
  410. package/docs/releases/v1.1.3.md +0 -36
  411. package/docs/releases/v1.1.4.md +0 -36
  412. package/docs/roadmap/README.md +0 -107
  413. package/docs/roadmap/v1.0-capability-conformance-framework.md +0 -582
  414. package/docs/roadmap/v1.0-choice-union-mode.md +0 -90
  415. package/docs/roadmap/v1.0-contract-audit.md +0 -75
  416. package/docs/roadmap/v1.0-json-array-streaming.md +0 -101
  417. package/docs/roadmap/v1.0-openapi-fastify-compatibility.md +0 -99
  418. package/docs/roadmap/v1.0-release-candidate-gates.md +0 -92
  419. package/docs/roadmap/v1.0-wsdl-coverage-matrix.md +0 -200
  420. package/docs/roadmap/v1.0-xs-anyattribute-wildcard-bag.md +0 -932
  421. package/src/runtime/jsonArray.ts +0 -55
  422. package/src/runtime/ndjson.ts +0 -32
@@ -0,0 +1,232 @@
1
+ /** Required structural closures over one declared graph; no public-symbol renaming. */
2
+ import { deepFreeze, globalId } from "./canonicalGraph.js";
3
+ import { containedNodes, referenceSlots, mapNodeReferences } from "./graphTraversal.js";
4
+ import { referenceTarget, SemanticError, semanticBudget, countSemanticData } from "./resolveCanonicalGraph.js";
5
+ import { semanticGraphRepresentation } from "./catalogProvenance.js";
6
+ import { canonicalJson } from "./catalogErrors.js";
7
+ export function mergeStructuralCompanions(primary, companions, limits = {}) {
8
+ const budget = semanticBudget(limits);
9
+ if (primary.nodes.length > budget.maxNodes)
10
+ throw new SemanticError("resource-limit", `Primary input exceeds ${budget.maxNodes} graph nodes`);
11
+ const nodes = new Map(primary.nodes.map(n => { budget.step(n); return [n.id, n]; }));
12
+ const checkSize = () => { if (nodes.size > budget.maxNodes)
13
+ throw new SemanticError("resource-limit", `Companion graph exceeds ${budget.maxNodes} nodes`); };
14
+ checkSize();
15
+ // Bound normalization and provenance copying before recursive serialization allocates.
16
+ const countData = (value, node) => countSemanticData(value, budget, node);
17
+ const owned = (root, index) => {
18
+ const stack = [root.id], seen = new Set(), result = [];
19
+ while (stack.length) {
20
+ const id = stack.pop();
21
+ if (seen.has(id))
22
+ continue;
23
+ const node = index.get(id);
24
+ if (!node)
25
+ throw new SemanticError("invalid-schema", `Missing owned component ${id}`, root.id, root.context.source);
26
+ budget.step(node);
27
+ seen.add(id);
28
+ result.push(node);
29
+ for (const child of containedNodes(node)) {
30
+ budget.step(node);
31
+ stack.push(child);
32
+ }
33
+ for (const slot of referenceSlots(node))
34
+ if (slot.reference.kind === "local") {
35
+ budget.step(node);
36
+ stack.push(slot.reference.target);
37
+ }
38
+ }
39
+ return result;
40
+ };
41
+ const representation = (root, index) => {
42
+ const declarations = owned(root, index);
43
+ countData(declarations, root);
44
+ return semanticGraphRepresentation({ ...primary, nodes: declarations, globals: [root.id], origins: {}, schemaAnnotations: [], schemaRetained: [], loading: { ...primary.loading, edges: [] } }, { referenceIdentityOnly: true });
45
+ };
46
+ const origins = Object.create(null), originKeys = new Map();
47
+ const addOrigins = (id, values, node) => {
48
+ const list = origins[id] ??= [], keys = originKeys.get(id) ?? new Set();
49
+ originKeys.set(id, keys);
50
+ for (const origin of values) {
51
+ countData(origin, node);
52
+ const key = canonicalJson(origin);
53
+ if (!keys.has(key)) {
54
+ keys.add(key);
55
+ list.push(origin);
56
+ }
57
+ }
58
+ };
59
+ for (const node of primary.nodes) {
60
+ budget.step(node);
61
+ addOrigins(node.id, primary.origins[node.id] ?? [], node);
62
+ }
63
+ const edges = [...primary.loading.edges], retained = [...primary.schemaRetained], annotations = [...primary.schemaAnnotations];
64
+ countData([edges, retained, annotations]);
65
+ const edgeKeys = new Set(edges.map(canonicalJson)), retainedKeys = new Set(retained.map(canonicalJson)), annotationKeys = new Set(annotations.map(canonicalJson));
66
+ const copied = new Set(), deduplicated = new Set();
67
+ // Index requested pools before walking, so a cross-companion dependency is
68
+ // resolved by availability rather than the caller's request order.
69
+ const providers = new Map();
70
+ const pools = companions.map((companion, pool) => {
71
+ budget.step();
72
+ if (companion.graph.nodes.length > budget.maxNodes)
73
+ throw new SemanticError("resource-limit", `Companion input exceeds ${budget.maxNodes} graph nodes`);
74
+ const source = new Map(companion.graph.nodes.map(n => { budget.step(n); return [n.id, n]; }));
75
+ if (companion.roots.length)
76
+ for (const node of source.values()) {
77
+ budget.step(node);
78
+ if (node.identity.kind !== "global")
79
+ continue;
80
+ const available = providers.get(node.id) ?? [];
81
+ available.push(pool);
82
+ providers.set(node.id, available);
83
+ }
84
+ return { companion, source, selected: new Set() };
85
+ });
86
+ const queue = [];
87
+ const enqueueAvailable = (id, node) => {
88
+ for (const pool of providers.get(id) ?? []) {
89
+ budget.step(node);
90
+ queue.push({ pool, id });
91
+ }
92
+ };
93
+ pools.forEach(({ companion, source }, pool) => {
94
+ for (const root of companion.roots) {
95
+ budget.step();
96
+ const node = source.get(root);
97
+ if (!node || node.identity.kind !== "global")
98
+ throw new SemanticError("invalid-schema", `Companion root must identify a declared global component: ${root}`, root, node?.context.source);
99
+ queue.push({ pool, id: root });
100
+ }
101
+ });
102
+ for (const node of primary.nodes)
103
+ for (const { reference } of referenceSlots(node)) {
104
+ budget.step(node);
105
+ if (reference.kind === "symbol") {
106
+ const id = globalId(reference.role, reference.name);
107
+ if (!nodes.has(id))
108
+ enqueueAvailable(id, node);
109
+ }
110
+ }
111
+ while (queue.length) {
112
+ const { pool, id } = queue.pop(), { source, selected } = pools[pool];
113
+ if (selected.has(id))
114
+ continue;
115
+ const node = source.get(id);
116
+ if (!node)
117
+ throw new SemanticError("invalid-schema", `Missing companion component ${id}`, id);
118
+ budget.step(node);
119
+ selected.add(id);
120
+ for (const child of containedNodes(node)) {
121
+ budget.step(node);
122
+ queue.push({ pool, id: child });
123
+ }
124
+ for (const { reference } of referenceSlots(node)) {
125
+ budget.step(node);
126
+ const candidate = reference.kind === "local" ? reference.target : reference.kind === "symbol" ? globalId(reference.role, reference.name) : undefined;
127
+ if (candidate && source.has(candidate)) {
128
+ referenceTarget(reference, source, node);
129
+ queue.push({ pool, id: candidate });
130
+ }
131
+ else if (candidate && reference.kind === "symbol" && !nodes.has(candidate) && providers.has(candidate)) {
132
+ for (const available of providers.get(candidate))
133
+ referenceTarget(reference, pools[available].source, node);
134
+ enqueueAvailable(candidate, node);
135
+ }
136
+ else
137
+ referenceTarget(reference, nodes, node);
138
+ }
139
+ }
140
+ for (const { companion, source, selected } of pools) {
141
+ const interpretations = new Set(), contexts = new Set(), documents = new Set();
142
+ for (const id of selected) {
143
+ const node = source.get(id);
144
+ for (const origin of companion.graph.origins[id] ?? []) {
145
+ countData(origin, node);
146
+ interpretations.add(origin.interpretation);
147
+ contexts.add(canonicalJson([origin.context.source.uri, origin.context.source.digest, origin.context.effectiveNamespace]));
148
+ documents.add(canonicalJson([origin.context.source.uri, origin.context.source.digest]));
149
+ }
150
+ }
151
+ const mapping = new Map();
152
+ for (const id of [...selected].sort((a, b) => { budget.step(); return a < b ? -1 : a > b ? 1 : 0; })) {
153
+ const root = source.get(id);
154
+ if (root.identity.kind !== "global")
155
+ continue;
156
+ const current = nodes.get(id);
157
+ if (current) {
158
+ const a = representation(current, nodes), b = representation(root, source);
159
+ if (a.structure !== b.structure)
160
+ throw new SemanticError("invalid-schema", `Structural companion collision for ${id}; reconcile the original declarations`, id, root.context.source, [current.context.source]);
161
+ // Equal normalized positions identify corresponding scoped declarations.
162
+ const positions = new Map([...a.identities].map(([original, normalized]) => [normalized, original]));
163
+ for (const [original, normalized] of b.identities) {
164
+ budget.step(root);
165
+ mapping.set(original, positions.get(normalized));
166
+ }
167
+ deduplicated.add(id);
168
+ }
169
+ else {
170
+ for (const node of owned(root, source)) {
171
+ budget.step(node);
172
+ nodes.set(node.id, node);
173
+ checkSize();
174
+ mapping.set(node.id, node.id);
175
+ }
176
+ copied.add(id);
177
+ }
178
+ }
179
+ for (const id of selected) {
180
+ const target = mapping.get(id), node = source.get(id);
181
+ if (!target)
182
+ throw new SemanticError("invalid-schema", "Companion closure lost scoped ownership", id, node.context.source);
183
+ addOrigins(target, companion.graph.origins[id] ?? [], node);
184
+ }
185
+ for (const edge of companion.graph.loading.edges) {
186
+ budget.step();
187
+ if (!interpretations.has(edge.from))
188
+ continue;
189
+ countData(edge);
190
+ const key = canonicalJson(edge);
191
+ if (!edgeKeys.has(key)) {
192
+ edgeKeys.add(key);
193
+ edges.push(edge);
194
+ }
195
+ }
196
+ for (const entry of companion.graph.schemaRetained) {
197
+ budget.step();
198
+ if (!contexts.has(canonicalJson([entry.context.source.uri, entry.context.source.digest, entry.context.effectiveNamespace])))
199
+ continue;
200
+ countData(entry);
201
+ const key = canonicalJson(entry);
202
+ if (!retainedKeys.has(key)) {
203
+ retainedKeys.add(key);
204
+ retained.push(entry);
205
+ }
206
+ }
207
+ for (const annotation of companion.graph.schemaAnnotations) {
208
+ budget.step();
209
+ if (!documents.has(canonicalJson([annotation.source.uri, annotation.source.digest])))
210
+ continue;
211
+ countData(annotation);
212
+ const key = canonicalJson(annotation);
213
+ if (!annotationKeys.has(key)) {
214
+ annotationKeys.add(key);
215
+ annotations.push(annotation);
216
+ }
217
+ }
218
+ }
219
+ const linked = [...nodes.values()].map(node => {
220
+ budget.step(node);
221
+ return mapNodeReferences(node, reference => {
222
+ budget.step(node);
223
+ if (reference.kind !== "symbol")
224
+ return reference;
225
+ const id = globalId(reference.role, reference.name);
226
+ if (reference.target !== undefined && reference.target !== id)
227
+ throw new SemanticError("invalid-schema", "Stored companion reference has a mismatched target", node.id, reference.lexical.context.source);
228
+ return nodes.has(id) ? { ...reference, target: id } : reference;
229
+ });
230
+ }).sort((a, b) => { budget.step(); return a.id < b.id ? -1 : a.id > b.id ? 1 : 0; });
231
+ return deepFreeze({ graph: { ...primary, nodes: linked, globals: linked.filter(n => n.identity.kind === "global").map(n => n.id).sort(), origins, schemaAnnotations: annotations, schemaRetained: retained, loading: { ...primary.loading, edges } }, copied: [...copied].sort(), deduplicated: [...deduplicated].sort(), metrics: { steps: budget.steps } });
232
+ }
@@ -0,0 +1,4 @@
1
+ import type { CanonicalGraph } from "./canonicalGraph.js";
2
+ export declare function validateSemanticGraph(input: unknown, options?: {
3
+ maxNodes?: number;
4
+ }): asserts input is CanonicalGraph;
@@ -0,0 +1,376 @@
1
+ /** One explicit graph reader boundary; typed fields are checked before identity/reference integrity. */
2
+ import { DEFAULT_GRAPH_NODES, GRAPH_MODEL, globalId, scopedId, isBuiltinType, wsdlReferenceRoles } from "./canonicalGraph.js";
3
+ import { CatalogError, positiveLimit, canonicalJson } from "./catalogErrors.js";
4
+ import { resolveLexicalQName, syntaxAttribute, syntaxElements, XSD_NAMESPACE } from "../loader/orderedSyntax.js";
5
+ const invalid = (field, reason) => { throw new CatalogError("invalid-schema", `Malformed catalog: ${reason}`, field); };
6
+ const str = (v, p) => { if (typeof v !== "string")
7
+ invalid(p, "expected string"); };
8
+ const bool = (v, p) => { if (typeof v !== "boolean")
9
+ invalid(p, "expected boolean"); };
10
+ const integer = (min) => (v, p) => { if (!Number.isSafeInteger(v) || v < min)
11
+ invalid(p, "expected safe integer"); };
12
+ const enumeration = (...values) => (v, p) => { if (!values.includes(v))
13
+ invalid(p, "unknown discriminant or value"); };
14
+ const pattern = (regexp) => (v, p) => { str(v, p); if (!regexp.test(v))
15
+ invalid(p, "invalid string shape"); };
16
+ const array = (check) => (v, p) => { if (!Array.isArray(v))
17
+ invalid(p, "expected array"); v.forEach((c, i) => check(c, `${p}/${i}`)); };
18
+ const field = (check, optional = false) => ({ check, optional });
19
+ const object = (fields) => (v, p) => {
20
+ if (!v || typeof v !== "object" || Array.isArray(v))
21
+ invalid(p, "expected object");
22
+ const o = v;
23
+ for (const k of Object.keys(o))
24
+ if (!Object.hasOwn(fields, k))
25
+ invalid(`${p}/${k}`, "unknown mandatory field");
26
+ for (const [k, f] of Object.entries(fields)) {
27
+ if (!Object.hasOwn(o, k)) {
28
+ if (!f.optional)
29
+ invalid(`${p}/${k}`, "missing required field");
30
+ }
31
+ else
32
+ f.check(o[k], `${p}/${k}`);
33
+ }
34
+ };
35
+ const record = (check) => (v, p) => {
36
+ if (!v || typeof v !== "object" || Array.isArray(v))
37
+ invalid(p, "expected record");
38
+ for (const [k, c] of Object.entries(v))
39
+ check(c, `${p}/${k}`);
40
+ };
41
+ const discriminator = (key, variants) => (v, p) => {
42
+ if (!v || typeof v !== "object" || Array.isArray(v))
43
+ invalid(p, "expected discriminated object");
44
+ const tag = v[key];
45
+ if (typeof tag !== "string" || !Object.hasOwn(variants, tag))
46
+ invalid(`${p}/${key}`, "unknown discriminant");
47
+ variants[tag](v, p);
48
+ };
49
+ const roles = ["element", "attribute", "type", "group", "attributeGroup", "message", "portType", "binding", "service"];
50
+ const role = enumeration(...roles);
51
+ const digest = pattern(/^[a-f0-9]{64}$/);
52
+ const sourceUri = pattern(/^urn:source:sha256:[a-f0-9]{64}$/);
53
+ const baseUri = pattern(/^urn:base:sha256:[a-f0-9]{64}$/);
54
+ const interpretation = (v, p) => {
55
+ str(v, p);
56
+ if (/^urn:source:sha256:[a-f0-9]{64}$/.test(v))
57
+ return;
58
+ let tuple;
59
+ try {
60
+ tuple = JSON.parse(v);
61
+ }
62
+ catch {
63
+ invalid(p, "invalid interpretation key");
64
+ }
65
+ if (!Array.isArray(tuple) || tuple.length !== 7)
66
+ invalid(p, "invalid interpretation tuple");
67
+ const t = tuple;
68
+ [digest, sourceUri, baseUri, str, enumeration("root", "inline", "include", "import"), str, pattern(/^(?:\/\d+)+$/)].forEach((check, i) => check(t[i], `${p}/${i}`));
69
+ if (t[1] !== `urn:source:sha256:${t[0]}`)
70
+ invalid(p, "inconsistent interpretation resource");
71
+ };
72
+ const position = object({ offset: field(integer(0)), line: field(integer(1)), column: field(integer(1)) });
73
+ const source = (v, p) => {
74
+ object({ uri: field(sourceUri), digest: field(digest), path: field(pattern(/^(?:\/\d+)+$/)), start: field(position), end: field(position) })(v, p);
75
+ const s = v;
76
+ if (s.uri !== `urn:source:sha256:${s.digest}` || s.start.offset > s.end.offset)
77
+ invalid(p, "inconsistent source digest/span");
78
+ };
79
+ const name = (v, p) => {
80
+ object({ namespace: field(str), local: field(str) })(v, p);
81
+ const n = v;
82
+ try {
83
+ if (n.local.includes(":") || resolveLexicalQName(n.local, { namespaces: Object.create(null) }).local !== n.local)
84
+ invalid(p, "invalid canonical NCName");
85
+ }
86
+ catch (e) {
87
+ if (e instanceof CatalogError)
88
+ throw e;
89
+ invalid(p, "invalid canonical NCName");
90
+ }
91
+ };
92
+ const attribute = object({ name: field(name), lexicalName: field(str), value: field(str) });
93
+ const context = object({ namespaces: field(record(str)), baseUri: field(baseUri), source: field(source), effectiveNamespace: field(str), chameleon: field(bool), schemaAttributes: field(array(attribute)) });
94
+ const lexical = object({ value: field(str), context: field(context) });
95
+ const syntax = (v, p) => discriminator("kind", {
96
+ text: object({ kind: field(enumeration("text")), value: field(str), source: field(source) }),
97
+ element: object({ kind: field(enumeration("element")), name: field(name), lexicalName: field(str), attributes: field(array(attribute)), namespaces: field(record(str)), baseUri: field(baseUri), source: field(source), children: field(array(syntax)) }),
98
+ })(v, p);
99
+ const elementSyntax = (v, p) => { syntax(v, p); if (v.kind !== "element")
100
+ invalid(p, "expected element syntax"); };
101
+ const value = object({ kind: field(enumeration("default", "fixed")), lexical: field(lexical) });
102
+ const facet = object({ name: field(enumeration("enumeration", "pattern", "whiteSpace", "length", "minLength", "maxLength", "minInclusive", "minExclusive", "maxInclusive", "maxExclusive", "totalDigits", "fractionDigits")), lexical: field(lexical), fixed: field(bool), syntax: field(elementSyntax) });
103
+ const wildcard = object({ namespace: field(lexical), processContents: field(enumeration("strict", "lax", "skip")) });
104
+ const identity = discriminator("kind", {
105
+ global: object({ kind: field(enumeration("global")), role: field(role), name: field(name) }),
106
+ scoped: object({ kind: field(enumeration("scoped")), owner: field(str), path: field(pattern(/^(?:\/\d+)+$|^\/$/)), role: field(str) }),
107
+ });
108
+ const occurs = (v, p) => {
109
+ object({ min: field(pattern(/^(?:0|[1-9]\d*)$/)), max: field((v, p) => { if (v !== "unbounded")
110
+ pattern(/^(?:0|[1-9]\d*)$/)(v, p); }) })(v, p);
111
+ const { min, max } = v;
112
+ if (max !== "unbounded" && (min.length > max.length || (min.length === max.length && min > max)))
113
+ invalid(p, "occurrence minimum exceeds maximum");
114
+ };
115
+ const base = { id: field(str), identity: field(identity), context: field(context), declaredAttributes: field(array(attribute)), annotations: field(array(elementSyntax)), retained: field(array(elementSyntax)), syntaxDetails: field(array(elementSyntax)) };
116
+ const attrs = field(array(str));
117
+ export function validateSemanticGraph(input, options = {}) {
118
+ const maxNodes = positiveLimit(options.maxNodes, DEFAULT_GRAPH_NODES, "maxNodes");
119
+ const refs = [];
120
+ const reference = (...expected) => (v, p) => {
121
+ discriminator("kind", {
122
+ symbol: object({ kind: field(enumeration("symbol")), role: field(enumeration(...expected)), name: field(name), lexical: field(lexical), target: field(str, true) }),
123
+ builtin: object({ kind: field(enumeration("builtin")), name: field(name), lexical: field(lexical, true) }),
124
+ local: object({ kind: field(enumeration("local")), target: field(str) }),
125
+ })(v, p);
126
+ refs.push({ reference: v, expected, field: p });
127
+ };
128
+ const term = discriminator("kind", {
129
+ sequence: object({ kind: field(enumeration("sequence")), children: attrs }),
130
+ choice: object({ kind: field(enumeration("choice")), children: attrs }),
131
+ all: object({ kind: field(enumeration("all")), children: attrs }),
132
+ element: object({ kind: field(enumeration("element")), declaration: field(reference("element")) }),
133
+ group: object({ kind: field(enumeration("group")), reference: field(reference("group")) }),
134
+ any: object({ kind: field(enumeration("any")), wildcard: field(wildcard) }),
135
+ });
136
+ const node = discriminator("kind", {
137
+ element: object({ ...base, kind: field(enumeration("element")), name: field(name), type: field(reference("type")), nillable: field(bool), abstract: field(bool), value: field(value, true), substitutionGroup: field(reference("element"), true) }),
138
+ attribute: object({ ...base, kind: field(enumeration("attribute")), name: field(name), type: field(reference("type")), value: field(value, true) }),
139
+ particle: object({ ...base, kind: field(enumeration("particle")), occurs: field(occurs), term: field(term) }),
140
+ attributeUse: object({ ...base, kind: field(enumeration("attributeUse")), declaration: field(reference("attribute")), use: field(enumeration("optional", "required", "prohibited")), value: field(value, true) }),
141
+ attributeGroupUse: object({ ...base, kind: field(enumeration("attributeGroupUse")), reference: field(reference("attributeGroup")) }),
142
+ attributeWildcard: object({ ...base, kind: field(enumeration("attributeWildcard")), wildcard: field(wildcard) }),
143
+ simpleType: object({ ...base, kind: field(enumeration("simpleType")), variety: field(discriminator("kind", {
144
+ restriction: object({ kind: field(enumeration("restriction")), base: field(reference("type")), facets: field(array(facet)) }),
145
+ list: object({ kind: field(enumeration("list")), item: field(reference("type")) }),
146
+ union: object({ kind: field(enumeration("union")), members: field(array(reference("type"))) }),
147
+ })) }),
148
+ complexType: object({ ...base, kind: field(enumeration("complexType")), mixed: field(bool), abstract: field(bool), content: field(str, true), attributes: attrs,
149
+ derivation: field(object({ kind: field(enumeration("extension", "restriction")), contentKind: field(enumeration("simple", "complex")), base: field(reference("type")), inlineType: field(reference("type"), true), facets: field(array(facet)) }), true) }),
150
+ group: object({ ...base, kind: field(enumeration("group")), content: field(str) }),
151
+ attributeGroup: object({ ...base, kind: field(enumeration("attributeGroup")), attributes: attrs }),
152
+ wsdl: object({ ...base, kind: field(enumeration("wsdl")), role: field(enumeration("message", "portType", "binding", "service")), name: field(name), syntax: field(elementSyntax),
153
+ references: field(array(object({ path: field(str), attribute: field(str), reference: field(reference(...roles)) }))) }),
154
+ });
155
+ object({ model: field(enumeration(GRAPH_MODEL)), nodes: field((v, p) => {
156
+ if (!Array.isArray(v))
157
+ invalid(p, "expected node array");
158
+ if (v.length > maxNodes)
159
+ throw new CatalogError("resource-limit", `Catalog graph exceeds ${maxNodes} nodes`, p);
160
+ array(node)(v, p);
161
+ }), globals: field(array(str)), origins: field(record(array(object({ interpretation: field(interpretation), context: field(context) })))),
162
+ schemaAnnotations: field(array(elementSyntax)), schemaRetained: field(array(object({ context: field(context), syntax: field(elementSyntax) }))),
163
+ loading: field(object({ limits: field(object({ resources: field(integer(1)), resourceBytes: field(integer(1)), totalBytes: field(integer(1)), resolutionDepth: field(integer(1)), redirects: field(integer(0)), resourceMs: field(integer(1)), totalIoMs: field(integer(1)), syntaxDepth: field(integer(1)) })),
164
+ edges: field(array(object({ kind: field(enumeration("include", "import", "wsdl-import")), from: field(interpretation), to: field(interpretation, true), referenceUri: field(baseUri, true), source: field(source), cycle: field(bool) }))) })), })(input, "graph");
165
+ const graph = input, nodes = new Map();
166
+ const nodeRole = (n) => !n ? undefined : n.kind === "simpleType" || n.kind === "complexType" ? "type" : n.kind === "wsdl" ? n.role : roles.includes(n.kind) ? n.kind : undefined;
167
+ for (const n of graph.nodes) {
168
+ if (nodes.has(n.id))
169
+ invalid(`graph/nodes/${n.id}`, "duplicate node identity");
170
+ const expectedId = n.identity.kind === "global" ? globalId(n.identity.role, n.identity.name) : scopedId(n.identity.owner, n.identity.path, n.identity.role);
171
+ if (n.id !== expectedId)
172
+ invalid(`graph/nodes/${n.id}`, "identity does not match ID");
173
+ if (n.identity.kind === "global" && (nodeRole(n) !== n.identity.role || ("name" in n && (n.name.namespace !== n.identity.name.namespace || n.name.local !== n.identity.name.local))))
174
+ invalid(`graph/nodes/${n.id}`, "global symbol role/name mismatch");
175
+ if (n.identity.kind === "scoped") {
176
+ const expectedRole = n.kind === "simpleType" || n.kind === "complexType" ? "type" : ["attributeUse", "attributeGroupUse", "attributeWildcard"].includes(n.kind) ? "attributeUse" : n.kind;
177
+ if (n.identity.role !== expectedRole)
178
+ invalid(n.id, "scoped role disagrees with node kind");
179
+ }
180
+ nodes.set(n.id, n);
181
+ }
182
+ const expectedGlobals = graph.nodes.filter(n => n.identity.kind === "global").map(n => n.id).sort();
183
+ if (JSON.stringify([...graph.globals].sort()) !== JSON.stringify(expectedGlobals))
184
+ invalid("graph/globals", "global index does not match declarations");
185
+ if (Object.keys(graph.origins).length !== nodes.size)
186
+ invalid("graph/origins", "provenance index does not match nodes");
187
+ for (const n of graph.nodes) {
188
+ if (!Object.hasOwn(graph.origins, n.id) || !graph.origins[n.id].length)
189
+ invalid("graph/origins", "missing node provenance");
190
+ if (n.identity.kind === "scoped" && !nodeRole(nodes.get(n.identity.owner)))
191
+ invalid(`graph/nodes/${n.id}/identity/owner`, "missing or invalid containing declaration");
192
+ for (const origin of graph.origins[n.id]) {
193
+ if (origin.interpretation.startsWith("urn:")) {
194
+ if (origin.interpretation !== origin.context.source.uri)
195
+ invalid(n.id, "inconsistent document provenance");
196
+ }
197
+ else {
198
+ const t = JSON.parse(origin.interpretation);
199
+ if (t[0] !== origin.context.source.digest || t[3] !== origin.context.effectiveNamespace || !(origin.context.source.path === t[6] || origin.context.source.path.startsWith(t[6] + "/")))
200
+ invalid(n.id, "inconsistent schema provenance");
201
+ }
202
+ }
203
+ }
204
+ const get = (id, allowed, field) => {
205
+ const n = nodes.get(id);
206
+ if (!n || !allowed.includes(n.kind))
207
+ invalid(field, "missing or wrong-role reference target");
208
+ return n;
209
+ };
210
+ const structural = new Map();
211
+ for (const n of graph.nodes) {
212
+ const children = [];
213
+ if (n.kind === "particle" && ["sequence", "choice", "all"].includes(n.term.kind)) {
214
+ const term = n.term;
215
+ for (const id of term.children)
216
+ get(id, ["particle"], `graph/nodes/${n.id}/term/children`);
217
+ children.push(...term.children);
218
+ if (term.children.some(id => { const child = nodes.get(id); return child.kind === "particle" && child.term.kind === "all"; }))
219
+ invalid(n.id, "all cannot be nested inside a compositor");
220
+ if (term.kind === "all") {
221
+ if (n.occurs.max !== "1" || !["0", "1"].includes(n.occurs.min))
222
+ invalid(n.id, "illegal all occurrence");
223
+ for (const id of term.children) {
224
+ const child = nodes.get(id);
225
+ if (child.kind !== "particle" || child.term.kind !== "element" || !["0", "1"].includes(child.occurs.min) || !["0", "1"].includes(child.occurs.max))
226
+ invalid(n.id, "illegal all child");
227
+ }
228
+ }
229
+ }
230
+ if (n.kind === "complexType" || n.kind === "group") {
231
+ if (n.content) {
232
+ const content = get(n.content, ["particle"], `${n.id}/content`);
233
+ if (!(n.kind === "group" ? ["sequence", "choice", "all"] : ["sequence", "choice", "all", "group"]).includes(content.term.kind))
234
+ invalid(n.id, "invalid declaration content particle");
235
+ if (n.kind === "group" && (content.occurs.min !== "1" || content.occurs.max !== "1"))
236
+ invalid(n.id, "group definition has occurrence bounds");
237
+ if (n.kind === "complexType" && n.derivation?.contentKind === "simple")
238
+ invalid(n.id, "simple content cannot contain a particle");
239
+ children.push(n.content);
240
+ }
241
+ }
242
+ if (n.kind === "simpleType" && n.variety.kind === "union" && !n.variety.members.length)
243
+ invalid(n.id, "empty union");
244
+ if (n.kind === "complexType" || n.kind === "attributeGroup")
245
+ for (const id of n.attributes) {
246
+ get(id, ["attributeUse", "attributeGroupUse", "attributeWildcard"], `${n.id}/attributes`);
247
+ children.push(id);
248
+ }
249
+ if (new Set(children).size !== children.length)
250
+ invalid(n.id, "duplicate structural use site");
251
+ const owner = n.kind === "particle" && n.identity.kind === "scoped" ? n.identity.owner : n.id;
252
+ for (const id of children) {
253
+ const child = nodes.get(id);
254
+ if (child.identity.kind !== "scoped" || child.identity.owner !== owner)
255
+ invalid(n.id, "structural child belongs to a different declaration");
256
+ }
257
+ structural.set(n.id, children);
258
+ }
259
+ for (const { reference: r, expected, field: p } of refs) {
260
+ if (r.kind === "builtin") {
261
+ if (!expected.includes("type") || r.name.namespace !== XSD_NAMESPACE || !isBuiltinType(r.name.local))
262
+ invalid(p, "invalid builtin type reference");
263
+ if (r.lexical) {
264
+ try {
265
+ const resolved = resolveLexicalQName(r.lexical.value, { namespaces: Object.assign(Object.create(null), r.lexical.context.namespaces), source: r.lexical.context.source });
266
+ if (resolved.namespace !== r.name.namespace || resolved.local !== r.name.local)
267
+ invalid(p, "builtin QName context disagrees with reference");
268
+ }
269
+ catch (e) {
270
+ if (e instanceof CatalogError)
271
+ throw e;
272
+ invalid(p, "invalid builtin QName context");
273
+ }
274
+ }
275
+ }
276
+ else if (r.kind === "symbol") {
277
+ const expectedId = globalId(r.role, r.name), target = nodes.get(expectedId);
278
+ if ((r.target !== undefined && r.target !== expectedId) || (r.target !== undefined && !target) || (target && r.target === undefined))
279
+ invalid(p, "corrupt symbol link");
280
+ try {
281
+ const lexicalName = resolveLexicalQName(r.lexical.value, { namespaces: Object.assign(Object.create(null), r.lexical.context.namespaces), source: r.lexical.context.source });
282
+ const namespace = !lexicalName.namespace && r.lexical.context.chameleon ? r.lexical.context.effectiveNamespace : lexicalName.namespace;
283
+ if (namespace !== r.name.namespace || lexicalName.local !== r.name.local)
284
+ invalid(p, "QName context disagrees with reference identity");
285
+ }
286
+ catch (e) {
287
+ if (e instanceof CatalogError)
288
+ throw e;
289
+ invalid(p, "invalid lexical QName context");
290
+ }
291
+ }
292
+ else {
293
+ const target = nodes.get(r.target);
294
+ if (!target || !expected.includes(nodeRole(target)))
295
+ invalid(p, "corrupt local declaration reference");
296
+ const from = graph.nodes[Number(p.split("/")[2])];
297
+ const owner = ["particle", "attributeUse"].includes(from.kind) && from.identity.kind === "scoped" ? from.identity.owner : from.id;
298
+ if (target.identity.kind !== "scoped" || target.identity.owner !== owner)
299
+ invalid(p, "local reference belongs to a different declaration");
300
+ structural.get(from.id).push(r.target);
301
+ }
302
+ }
303
+ for (const n of graph.nodes)
304
+ if (n.kind === "wsdl") {
305
+ const expected = [];
306
+ const visit = (s) => {
307
+ for (const [attribute, role] of Object.entries(wsdlReferenceRoles(s))) {
308
+ const value = syntaxAttribute(s, attribute);
309
+ if (value !== undefined)
310
+ expected.push({ path: s.source.path.slice(n.syntax.source.path.length) || "/", attribute, role, value, syntax: s });
311
+ }
312
+ for (const child of syntaxElements(s))
313
+ visit(child);
314
+ };
315
+ visit(n.syntax);
316
+ if (expected.length !== n.references.length)
317
+ invalid(n.id, "WSDL reference index incomplete");
318
+ expected.forEach((e, i) => {
319
+ const r = n.references[i];
320
+ if (r.path !== e.path || r.attribute !== e.attribute || r.reference.kind === "local" || (r.reference.kind === "symbol" && r.reference.role !== e.role) || r.reference.lexical?.value !== e.value)
321
+ invalid(n.id, "WSDL reference role/context mismatch");
322
+ const c = r.reference.kind !== "local" ? r.reference.lexical?.context : undefined;
323
+ if (!c || canonicalJson(c.namespaces) !== canonicalJson(e.syntax.namespaces) || canonicalJson(c.source) !== canonicalJson(e.syntax.source) || c.baseUri !== e.syntax.baseUri || c.effectiveNamespace !== n.context.effectiveNamespace || c.chameleon !== n.context.chameleon || canonicalJson(c.schemaAttributes) !== canonicalJson(n.context.schemaAttributes))
324
+ invalid(n.id, "WSDL reference disagrees with declaring syntax context");
325
+ });
326
+ }
327
+ const parents = new Map();
328
+ for (const [parent, children] of structural)
329
+ for (const child of children) {
330
+ if (parents.has(child))
331
+ invalid(child, "structural use site has multiple parents");
332
+ parents.set(child, parent);
333
+ }
334
+ for (const n of graph.nodes)
335
+ if (n.identity.kind === "scoped") {
336
+ if (!parents.has(n.id))
337
+ invalid(n.id, "orphan scoped use site or declaration");
338
+ const owner = nodes.get(n.identity.owner);
339
+ if (n.context.source.path !== owner.context.source.path + (n.identity.path === "/" ? "" : n.identity.path))
340
+ invalid(n.id, "scoped path disagrees with containing declaration");
341
+ }
342
+ // Ownership and structural containment must be acyclic. Semantic recursion through references is legal.
343
+ const complete = new Set(), active = new Set();
344
+ for (const id of nodes.keys()) {
345
+ const stack = [{ id, exit: false }];
346
+ while (stack.length) {
347
+ const item = stack.pop();
348
+ if (item.exit) {
349
+ active.delete(item.id);
350
+ complete.add(item.id);
351
+ continue;
352
+ }
353
+ if (complete.has(item.id))
354
+ continue;
355
+ if (active.has(item.id))
356
+ invalid(item.id, "cyclic structural containment");
357
+ active.add(item.id);
358
+ stack.push({ id: item.id, exit: true });
359
+ for (const child of [...(structural.get(item.id) ?? [])].reverse())
360
+ stack.push({ id: child, exit: false });
361
+ }
362
+ }
363
+ const ownersDone = new Set();
364
+ for (const n of graph.nodes) {
365
+ let current = n;
366
+ const path = new Set();
367
+ while (current.identity.kind === "scoped" && !ownersDone.has(current.id)) {
368
+ if (path.has(current.id))
369
+ invalid(n.id, "cyclic declaration ownership");
370
+ path.add(current.id);
371
+ current = nodes.get(current.identity.owner);
372
+ }
373
+ for (const id of path)
374
+ ownersDone.add(id);
375
+ }
376
+ }
@@ -0,0 +1,25 @@
1
+ /** XSD 1.0 namespace algebra. These local relations do not certify a schema. */
2
+ import type { Wildcard } from './canonicalGraph.js';
3
+ export type NamespaceConstraint = Readonly<{
4
+ kind: 'set' | 'not';
5
+ namespaces: readonly string[];
6
+ }>;
7
+ export type WildcardProcess = Wildcard['processContents'];
8
+ export type WildcardCharge = (amount?: number) => void;
9
+ /** Canonical mathematical namespace properties; no XML lexical form is invented. */
10
+ export declare function canonicalNamespaceConstraint(value: NamespaceConstraint, charge: WildcardCharge): NamespaceConstraint;
11
+ export declare function wildcardNamespaces(wildcard: Wildcard, charge?: WildcardCharge): NamespaceConstraint;
12
+ export declare function namespaceAllows(value: NamespaceConstraint, namespace: string, charge?: WildcardCharge): boolean;
13
+ /** Mathematical inclusion; the XSD Wildcard Subset rule is stricter. */
14
+ export declare function namespaceSetSubset(derived: NamespaceConstraint, base: NamespaceConstraint, charge?: WildcardCharge): boolean;
15
+ /** XSD 1.0 cos-ns-subset: non-any negations must have the same value. */
16
+ export declare function namespaceSubset(derived: NamespaceConstraint, base: NamespaceConstraint, charge?: WildcardCharge): boolean;
17
+ export declare function namespaceUnion(a: NamespaceConstraint, b: NamespaceConstraint, charge?: WildcardCharge): NamespaceConstraint;
18
+ export declare function namespaceIntersection(a: NamespaceConstraint, b: NamespaceConstraint, charge?: WildcardCharge): NamespaceConstraint;
19
+ /** Abstract namespace-property expressibility, not XML syntax representability.
20
+ * A finite set (including empty), any, or not(namespace/absent) is expressible.
21
+ * Keep an unexpressible mathematical intersection intact for diagnostics.
22
+ */
23
+ export declare function namespaceExpressible(value: NamespaceConstraint, charge?: WildcardCharge): boolean;
24
+ /** The ur-type identity exception belongs to the invoking rule, never spelling. */
25
+ export declare function processContentsRestricts(derived: WildcardProcess, base: WildcardProcess, charge?: WildcardCharge): boolean;