@techspokes/typescript-wsdl-client 1.1.5 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (505) hide show
  1. package/README.md +80 -68
  2. package/dist/app/generateApp.d.ts +0 -1
  3. package/dist/app/generateApp.js +1 -1
  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 +268 -0
  10. package/dist/cli.d.ts +0 -1
  11. package/dist/cli.js +92 -2
  12. package/dist/client/checkedDirectRuntime.d.ts +40 -3
  13. package/dist/client/checkedDirectRuntime.js +28 -8
  14. package/dist/client/directClientRuntime.d.ts +27 -2
  15. package/dist/client/directClientRuntime.js +142 -89
  16. package/dist/client/directClientVersion.d.ts +3 -1
  17. package/dist/client/directClientVersion.js +3 -0
  18. package/dist/client/generateClient.d.ts +0 -1
  19. package/dist/client/generateClient.js +98 -28
  20. package/dist/client/generateDirectClient.d.ts +21 -3
  21. package/dist/client/generateDirectClient.js +138 -6
  22. package/dist/client/generateOperations.d.ts +0 -1
  23. package/dist/client/generateOperations.js +30 -11
  24. package/dist/client/generateTypes.d.ts +0 -1
  25. package/dist/client/generateUtils.d.ts +0 -1
  26. package/dist/client/generateUtils.js +7 -1
  27. package/dist/compiler/applicationGroups.d.ts +53 -0
  28. package/dist/compiler/applicationGroups.js +403 -0
  29. package/dist/compiler/buildCanonicalGraph.d.ts +0 -1
  30. package/dist/compiler/canonicalGraph.d.ts +4 -16
  31. package/dist/compiler/canonicalGraph.js +1 -8
  32. package/dist/compiler/catalogErrors.d.ts +0 -1
  33. package/dist/compiler/catalogProvenance.d.ts +0 -1
  34. package/dist/compiler/checkedAssessment.d.ts +0 -1
  35. package/dist/compiler/checkedAssessment.js +1 -1
  36. package/dist/compiler/checkedComponentSource.d.ts +16 -0
  37. package/dist/compiler/checkedComponentSource.js +31 -0
  38. package/dist/compiler/checkedSourcePreparation.d.ts +38 -1
  39. package/dist/compiler/checkedSourcePreparation.js +71 -0
  40. package/dist/compiler/complexTypeContent.d.ts +5 -6
  41. package/dist/compiler/complexTypeContent.js +2 -2
  42. package/dist/compiler/componentCorrespondence.d.ts +32 -0
  43. package/dist/compiler/componentCorrespondence.js +140 -0
  44. package/dist/compiler/componentRecordProjection.d.ts +112 -0
  45. package/dist/compiler/componentRecordProjection.js +329 -0
  46. package/dist/compiler/componentSoapPreparation.d.ts +20 -0
  47. package/dist/compiler/componentSoapPreparation.js +36 -0
  48. package/dist/compiler/composeCanonicalGraph.d.ts +0 -1
  49. package/dist/compiler/dataOwnership.d.ts +0 -1
  50. package/dist/compiler/dataOwnership.js +14 -4
  51. package/dist/compiler/datatypeValues.d.ts +0 -1
  52. package/dist/compiler/declarationIdentity.d.ts +22 -0
  53. package/dist/compiler/declarationIdentity.js +9 -0
  54. package/dist/compiler/directCodec.d.ts +79 -2
  55. package/dist/compiler/directCodec.js +310 -92
  56. package/dist/compiler/directExecutionPolicy.d.ts +0 -1
  57. package/dist/compiler/directOperation.d.ts +72 -8
  58. package/dist/compiler/directOperation.js +164 -19
  59. package/dist/compiler/directSoap.d.ts +29 -5
  60. package/dist/compiler/directSoap.js +154 -44
  61. package/dist/compiler/directSoapSource.d.ts +24 -1
  62. package/dist/compiler/directSoapSource.js +166 -19
  63. package/dist/compiler/directSourceCapsule.d.ts +74 -2
  64. package/dist/compiler/directSourceCapsule.js +484 -6
  65. package/dist/compiler/directStructure.d.ts +83 -6
  66. package/dist/compiler/directStructure.js +353 -58
  67. package/dist/compiler/directStructurePlan.d.ts +144 -2
  68. package/dist/compiler/directStructurePlan.js +615 -30
  69. package/dist/compiler/directValues.d.ts +76 -5
  70. package/dist/compiler/directValues.js +967 -117
  71. package/dist/compiler/finiteRe01Construction.d.ts +69 -0
  72. package/dist/compiler/finiteRe01Construction.js +422 -0
  73. package/dist/compiler/finiteRe01Verification.d.ts +81 -3
  74. package/dist/compiler/finiteRe01Verification.js +391 -4
  75. package/dist/compiler/generateCatalog.d.ts +0 -1
  76. package/dist/compiler/graphTraversal.d.ts +0 -1
  77. package/dist/compiler/hypotheticalScopedIdentity.d.ts +0 -1
  78. package/dist/compiler/legacyDeclarations.d.ts +26 -0
  79. package/dist/compiler/legacyDeclarations.js +144 -0
  80. package/dist/compiler/occurrenceAnalysis.d.ts +2 -1
  81. package/dist/compiler/occurrenceAnalysis.js +23 -7
  82. package/dist/compiler/originalSourceMembership.d.ts +0 -1
  83. package/dist/compiler/particleAttribution.d.ts +0 -1
  84. package/dist/compiler/particleAttribution.js +20 -0
  85. package/dist/compiler/particleDeclarationConsistency.d.ts +0 -1
  86. package/dist/compiler/particleDeclarationConsistency.js +9 -0
  87. package/dist/compiler/particleExtension.d.ts +0 -1
  88. package/dist/compiler/particleExtension.js +5 -1
  89. package/dist/compiler/particleLocalAssessment.d.ts +0 -1
  90. package/dist/compiler/particleRestriction.d.ts +0 -1
  91. package/dist/compiler/particleRestriction.js +6 -1
  92. package/dist/compiler/particleSemanticView.d.ts +2 -1
  93. package/dist/compiler/particleSemanticView.js +16 -3
  94. package/dist/compiler/particleWildcardRelation.d.ts +0 -1
  95. package/dist/compiler/projectionScalar.d.ts +49 -0
  96. package/dist/compiler/projectionScalar.js +218 -0
  97. package/dist/compiler/re01CandidateAssignments.d.ts +95 -0
  98. package/dist/compiler/re01CandidateAssignments.js +341 -0
  99. package/dist/compiler/re01CandidateCorrespondence.d.ts +22 -1
  100. package/dist/compiler/re01CandidateCorrespondence.js +167 -38
  101. package/dist/compiler/re01TypeProperties.d.ts +0 -1
  102. package/dist/compiler/re01TypePropertyValidation.d.ts +0 -1
  103. package/dist/compiler/resolveCanonicalGraph.d.ts +5 -2
  104. package/dist/compiler/resolveCanonicalGraph.js +77 -7
  105. package/dist/compiler/rpcStringValues.d.ts +30 -0
  106. package/dist/compiler/rpcStringValues.js +196 -0
  107. package/dist/compiler/rpcTypedValues.d.ts +48 -0
  108. package/dist/compiler/rpcTypedValues.js +190 -0
  109. package/dist/compiler/scalarSchemaAssessment.d.ts +0 -1
  110. package/dist/compiler/schemaAttributeGroupProperties.d.ts +0 -1
  111. package/dist/compiler/schemaAttributeProperties.d.ts +0 -1
  112. package/dist/compiler/schemaAttributeUses.d.ts +22 -2
  113. package/dist/compiler/schemaAttributeUses.js +86 -13
  114. package/dist/compiler/schemaBinaryWordReconstruction.d.ts +0 -1
  115. package/dist/compiler/schemaBuiltinFacets.d.ts +0 -1
  116. package/dist/compiler/schemaCalendarImages.d.ts +0 -1
  117. package/dist/compiler/schemaCalendarLanguage.d.ts +0 -1
  118. package/dist/compiler/schemaCompiler.d.ts +0 -1
  119. package/dist/compiler/schemaCompiler.js +44 -109
  120. package/dist/compiler/schemaComponentEquality.d.ts +0 -1
  121. package/dist/compiler/schemaConstructionAssessment.d.ts +34 -1
  122. package/dist/compiler/schemaConstructionAssessment.js +88 -6
  123. package/dist/compiler/schemaDatatypeValues.d.ts +0 -1
  124. package/dist/compiler/schemaDecimalLanguage.d.ts +0 -1
  125. package/dist/compiler/schemaDeclarationPrimitives.d.ts +7 -2
  126. package/dist/compiler/schemaDeclarationPrimitives.js +18 -1
  127. package/dist/compiler/schemaDocumentSyntax.d.ts +0 -1
  128. package/dist/compiler/schemaDurationLanguage.d.ts +0 -1
  129. package/dist/compiler/schemaElementInstance.d.ts +30 -0
  130. package/dist/compiler/schemaElementInstance.js +45 -0
  131. package/dist/compiler/schemaElementProperties.d.ts +0 -1
  132. package/dist/compiler/schemaEndpointWordCapacity.d.ts +0 -1
  133. package/dist/compiler/schemaExactCalendar.d.ts +0 -1
  134. package/dist/compiler/schemaFacetAnnotation.d.ts +0 -1
  135. package/dist/compiler/schemaGeneratedScalarShape.d.ts +0 -1
  136. package/dist/compiler/schemaGeneratedScalarShape.js +2 -0
  137. package/dist/compiler/schemaIdentityConstraints.d.ts +0 -1
  138. package/dist/compiler/schemaIeeeLanguage.d.ts +0 -1
  139. package/dist/compiler/schemaIntegerImages.d.ts +0 -1
  140. package/dist/compiler/schemaLexicalPredicates.d.ts +0 -1
  141. package/dist/compiler/schemaNotationProperties.d.ts +0 -1
  142. package/dist/compiler/schemaNumericImageConditions.d.ts +0 -1
  143. package/dist/compiler/schemaParticleWildcardProperties.d.ts +0 -1
  144. package/dist/compiler/schemaPattern.d.ts +0 -1
  145. package/dist/compiler/schemaRegularLanguage.d.ts +0 -1
  146. package/dist/compiler/schemaScalarContext.d.ts +5 -1
  147. package/dist/compiler/schemaScalarKernel.d.ts +0 -1
  148. package/dist/compiler/schemaScalarWitnesses.d.ts +0 -1
  149. package/dist/compiler/schemaSimpleTypeProperties.d.ts +0 -1
  150. package/dist/compiler/schemaSourceGrammar.d.ts +0 -1
  151. package/dist/compiler/schemaSourceLexical.d.ts +0 -1
  152. package/dist/compiler/schemaSourceValues.d.ts +0 -1
  153. package/dist/compiler/schemaSourceWildcards.d.ts +1 -2
  154. package/dist/compiler/schemaSourceWildcards.js +3 -1
  155. package/dist/compiler/schemaSymbolicSequences.d.ts +0 -1
  156. package/dist/compiler/schemaSymbolicValueSets.d.ts +0 -1
  157. package/dist/compiler/schemaSyntaxAssessment.d.ts +0 -1
  158. package/dist/compiler/schemaTemporalAliases.d.ts +0 -1
  159. package/dist/compiler/schemaTokenImages.d.ts +0 -1
  160. package/dist/compiler/schemaTypeIdentity.d.ts +0 -1
  161. package/dist/compiler/schemaTypeIdentity.js +2 -0
  162. package/dist/compiler/schemaTypeRelations.d.ts +0 -1
  163. package/dist/compiler/schemaUri.d.ts +0 -1
  164. package/dist/compiler/schemaValueContext.d.ts +0 -1
  165. package/dist/compiler/schemaValueImages.d.ts +0 -1
  166. package/dist/compiler/schemaValueSequences.d.ts +0 -1
  167. package/dist/compiler/semanticBudget.d.ts +18 -1
  168. package/dist/compiler/semanticBudget.js +17 -2
  169. package/dist/compiler/semanticCatalog.d.ts +2 -3
  170. package/dist/compiler/semanticContext.d.ts +12 -1
  171. package/dist/compiler/semanticContext.js +39 -0
  172. package/dist/compiler/semanticTypeDependencies.d.ts +0 -1
  173. package/dist/compiler/semanticTypeReference.d.ts +0 -1
  174. package/dist/compiler/shapeResolver.d.ts +0 -1
  175. package/dist/compiler/soapHeaders.d.ts +16 -0
  176. package/dist/compiler/soapHeaders.js +42 -0
  177. package/dist/compiler/sourceSchemaBinding.d.ts +0 -1
  178. package/dist/compiler/standardSchemaComponents.d.ts +71 -0
  179. package/dist/compiler/standardSchemaComponents.js +74 -0
  180. package/dist/compiler/standardSchemaConstruction.d.ts +20 -0
  181. package/dist/compiler/standardSchemaConstruction.js +34 -0
  182. package/dist/compiler/structuralCompanions.d.ts +0 -1
  183. package/dist/compiler/validateSemanticGraph.d.ts +0 -1
  184. package/dist/compiler/wildcardAlgebra.d.ts +0 -1
  185. package/dist/compiler/wsdlPolicyRequirements.d.ts +43 -0
  186. package/dist/compiler/wsdlPolicyRequirements.js +239 -0
  187. package/dist/config.d.ts +0 -1
  188. package/dist/gateway/generateCheckedGateway.d.ts +32 -0
  189. package/dist/gateway/generateCheckedGateway.js +293 -0
  190. package/dist/gateway/generateComposedGateway.d.ts +16 -0
  191. package/dist/gateway/generateComposedGateway.js +65 -0
  192. package/dist/gateway/generateGateway.d.ts +0 -1
  193. package/dist/gateway/generateGateway.js +1 -0
  194. package/dist/gateway/generators.d.ts +0 -1
  195. package/dist/gateway/generators.js +19 -4
  196. package/dist/gateway/helpers.d.ts +1 -1
  197. package/dist/gateway/helpers.js +15 -0
  198. package/dist/generation/componentShape.d.ts +14 -0
  199. package/dist/generation/componentShape.js +293 -0
  200. package/dist/generation/preamble.d.ts +0 -1
  201. package/dist/generation/sourceLayout.d.ts +13 -0
  202. package/dist/generation/sourceLayout.js +40 -0
  203. package/dist/generation/writeGeneratedSource.d.ts +0 -1
  204. package/dist/index.d.ts +11 -2
  205. package/dist/index.js +4 -1
  206. package/dist/loader/fetch.d.ts +0 -1
  207. package/dist/loader/orderedSyntax.d.ts +12 -1
  208. package/dist/loader/orderedSyntax.js +40 -6
  209. package/dist/loader/resolutionDepth.d.ts +0 -1
  210. package/dist/loader/schemaInput.d.ts +28 -1
  211. package/dist/loader/schemaInput.js +41 -4
  212. package/dist/loader/schemaResources.d.ts +2 -1
  213. package/dist/loader/schemaResources.js +45 -4
  214. package/dist/loader/wsdlLoader.d.ts +0 -1
  215. package/dist/multiServicePipeline.d.ts +41 -0
  216. package/dist/multiServicePipeline.js +287 -0
  217. package/dist/openapi/casing.d.ts +0 -1
  218. package/dist/openapi/composeOpenAPI.d.ts +29 -0
  219. package/dist/openapi/composeOpenAPI.js +322 -0
  220. package/dist/openapi/generateOpenAPI.d.ts +0 -1
  221. package/dist/openapi/generatePaths.d.ts +0 -1
  222. package/dist/openapi/generateSchemas.d.ts +0 -1
  223. package/dist/openapi/security.d.ts +0 -1
  224. package/dist/pipeline.d.ts +7 -3
  225. package/dist/pipeline.js +15 -0
  226. package/dist/test/generateCheckedTests.d.ts +17 -0
  227. package/dist/test/generateCheckedTests.js +60 -0
  228. package/dist/test/generateTests.d.ts +0 -1
  229. package/dist/test/generators.d.ts +0 -1
  230. package/dist/test/mockData.d.ts +0 -1
  231. package/dist/test/mockData.js +20 -14
  232. package/dist/util/attributeWildcards.d.ts +0 -1
  233. package/dist/util/builder.d.ts +0 -1
  234. package/dist/util/catalogMeta.d.ts +0 -1
  235. package/dist/util/checkedCliDiagnostics.d.ts +11 -0
  236. package/dist/util/checkedCliDiagnostics.js +22 -0
  237. package/dist/util/cli.d.ts +0 -1
  238. package/dist/util/errors.d.ts +0 -1
  239. package/dist/util/imports.d.ts +0 -1
  240. package/dist/util/runtimeSource.d.ts +0 -1
  241. package/dist/util/runtimeSource.js +3 -5
  242. package/dist/util/securityConfig.d.ts +0 -1
  243. package/dist/util/streamConfig.d.ts +0 -1
  244. package/dist/util/tools.d.ts +0 -1
  245. package/dist/util/xmlWhitespace.d.ts +0 -1
  246. package/dist/xsd/primitives.d.ts +0 -1
  247. package/docs/agent-skill.md +12 -1
  248. package/docs/api-reference.md +127 -9
  249. package/docs/checked-gateway.md +212 -0
  250. package/docs/checked-generation.md +167 -0
  251. package/docs/cli-reference.md +48 -6
  252. package/docs/concepts.md +139 -5
  253. package/docs/configuration.md +15 -4
  254. package/docs/corpus.md +33 -0
  255. package/docs/direct-values.md +13 -13
  256. package/docs/examples/checked-forecast.wsdl +19 -0
  257. package/docs/gateway-guide.md +104 -27
  258. package/docs/generated-code.md +22 -11
  259. package/docs/mapping-contract.md +114 -0
  260. package/docs/migration-playbook.md +5 -1
  261. package/docs/migration.md +124 -6
  262. package/docs/output-anatomy.md +21 -18
  263. package/docs/production.md +7 -5
  264. package/docs/start-here.md +19 -3
  265. package/docs/supported-patterns.md +24 -3
  266. package/docs/testing.md +119 -31
  267. package/docs/troubleshooting.md +3 -1
  268. package/llms.txt +16 -8
  269. package/package.json +64 -23
  270. package/src/runtime/checkedGatewayHost.tpl.txt +157 -0
  271. package/src/runtime/clientStreamMethods.tpl.txt +156 -148
  272. package/src/runtime/operationsStreamHelper.tpl.txt +6 -6
  273. package/src/runtime/streamXml.ts +49 -21
  274. package/dist/app/generateApp.d.ts.map +0 -1
  275. package/dist/cli.d.ts.map +0 -1
  276. package/dist/client/checkedDirectRuntime.d.ts.map +0 -1
  277. package/dist/client/directClientRuntime.d.ts.map +0 -1
  278. package/dist/client/directClientVersion.d.ts.map +0 -1
  279. package/dist/client/generateClient.d.ts.map +0 -1
  280. package/dist/client/generateDirectClient.d.ts.map +0 -1
  281. package/dist/client/generateOperations.d.ts.map +0 -1
  282. package/dist/client/generateTypes.d.ts.map +0 -1
  283. package/dist/client/generateUtils.d.ts.map +0 -1
  284. package/dist/compiler/buildCanonicalGraph.d.ts.map +0 -1
  285. package/dist/compiler/canonicalGraph.d.ts.map +0 -1
  286. package/dist/compiler/catalogErrors.d.ts.map +0 -1
  287. package/dist/compiler/catalogProvenance.d.ts.map +0 -1
  288. package/dist/compiler/checkedAssessment.d.ts.map +0 -1
  289. package/dist/compiler/checkedSourcePreparation.d.ts.map +0 -1
  290. package/dist/compiler/complexTypeContent.d.ts.map +0 -1
  291. package/dist/compiler/composeCanonicalGraph.d.ts.map +0 -1
  292. package/dist/compiler/dataOwnership.d.ts.map +0 -1
  293. package/dist/compiler/datatypeValues.d.ts.map +0 -1
  294. package/dist/compiler/directCodec.d.ts.map +0 -1
  295. package/dist/compiler/directExecutionPolicy.d.ts.map +0 -1
  296. package/dist/compiler/directOperation.d.ts.map +0 -1
  297. package/dist/compiler/directSoap.d.ts.map +0 -1
  298. package/dist/compiler/directSoapSource.d.ts.map +0 -1
  299. package/dist/compiler/directSourceCapsule.d.ts.map +0 -1
  300. package/dist/compiler/directStructure.d.ts.map +0 -1
  301. package/dist/compiler/directStructurePlan.d.ts.map +0 -1
  302. package/dist/compiler/directValues.d.ts.map +0 -1
  303. package/dist/compiler/finiteRe01Verification.d.ts.map +0 -1
  304. package/dist/compiler/generateCatalog.d.ts.map +0 -1
  305. package/dist/compiler/graphTraversal.d.ts.map +0 -1
  306. package/dist/compiler/hypotheticalScopedIdentity.d.ts.map +0 -1
  307. package/dist/compiler/occurrenceAnalysis.d.ts.map +0 -1
  308. package/dist/compiler/originalSourceMembership.d.ts.map +0 -1
  309. package/dist/compiler/particleAttribution.d.ts.map +0 -1
  310. package/dist/compiler/particleDeclarationConsistency.d.ts.map +0 -1
  311. package/dist/compiler/particleExtension.d.ts.map +0 -1
  312. package/dist/compiler/particleLocalAssessment.d.ts.map +0 -1
  313. package/dist/compiler/particleRestriction.d.ts.map +0 -1
  314. package/dist/compiler/particleSemanticView.d.ts.map +0 -1
  315. package/dist/compiler/particleWildcardRelation.d.ts.map +0 -1
  316. package/dist/compiler/re01CandidateCorrespondence.d.ts.map +0 -1
  317. package/dist/compiler/re01TypeProperties.d.ts.map +0 -1
  318. package/dist/compiler/re01TypePropertyValidation.d.ts.map +0 -1
  319. package/dist/compiler/resolveCanonicalGraph.d.ts.map +0 -1
  320. package/dist/compiler/scalarSchemaAssessment.d.ts.map +0 -1
  321. package/dist/compiler/schemaAttributeGroupProperties.d.ts.map +0 -1
  322. package/dist/compiler/schemaAttributeProperties.d.ts.map +0 -1
  323. package/dist/compiler/schemaAttributeUses.d.ts.map +0 -1
  324. package/dist/compiler/schemaBinaryWordReconstruction.d.ts.map +0 -1
  325. package/dist/compiler/schemaBuiltinFacets.d.ts.map +0 -1
  326. package/dist/compiler/schemaCalendarImages.d.ts.map +0 -1
  327. package/dist/compiler/schemaCalendarLanguage.d.ts.map +0 -1
  328. package/dist/compiler/schemaCompiler.d.ts.map +0 -1
  329. package/dist/compiler/schemaComponentEquality.d.ts.map +0 -1
  330. package/dist/compiler/schemaConstructionAssessment.d.ts.map +0 -1
  331. package/dist/compiler/schemaDatatypeValues.d.ts.map +0 -1
  332. package/dist/compiler/schemaDecimalLanguage.d.ts.map +0 -1
  333. package/dist/compiler/schemaDeclarationPrimitives.d.ts.map +0 -1
  334. package/dist/compiler/schemaDocumentSyntax.d.ts.map +0 -1
  335. package/dist/compiler/schemaDurationLanguage.d.ts.map +0 -1
  336. package/dist/compiler/schemaElementProperties.d.ts.map +0 -1
  337. package/dist/compiler/schemaEndpointWordCapacity.d.ts.map +0 -1
  338. package/dist/compiler/schemaExactCalendar.d.ts.map +0 -1
  339. package/dist/compiler/schemaFacetAnnotation.d.ts.map +0 -1
  340. package/dist/compiler/schemaGeneratedScalarShape.d.ts.map +0 -1
  341. package/dist/compiler/schemaIdentityConstraints.d.ts.map +0 -1
  342. package/dist/compiler/schemaIeeeLanguage.d.ts.map +0 -1
  343. package/dist/compiler/schemaIntegerImages.d.ts.map +0 -1
  344. package/dist/compiler/schemaLexicalPredicates.d.ts.map +0 -1
  345. package/dist/compiler/schemaNotationProperties.d.ts.map +0 -1
  346. package/dist/compiler/schemaNumericImageConditions.d.ts.map +0 -1
  347. package/dist/compiler/schemaParticleWildcardProperties.d.ts.map +0 -1
  348. package/dist/compiler/schemaPattern.d.ts.map +0 -1
  349. package/dist/compiler/schemaRegularLanguage.d.ts.map +0 -1
  350. package/dist/compiler/schemaScalarContext.d.ts.map +0 -1
  351. package/dist/compiler/schemaScalarKernel.d.ts.map +0 -1
  352. package/dist/compiler/schemaScalarWitnesses.d.ts.map +0 -1
  353. package/dist/compiler/schemaSimpleTypeProperties.d.ts.map +0 -1
  354. package/dist/compiler/schemaSourceGrammar.d.ts.map +0 -1
  355. package/dist/compiler/schemaSourceLexical.d.ts.map +0 -1
  356. package/dist/compiler/schemaSourceValues.d.ts.map +0 -1
  357. package/dist/compiler/schemaSourceWildcards.d.ts.map +0 -1
  358. package/dist/compiler/schemaSymbolicSequences.d.ts.map +0 -1
  359. package/dist/compiler/schemaSymbolicValueSets.d.ts.map +0 -1
  360. package/dist/compiler/schemaSyntaxAssessment.d.ts.map +0 -1
  361. package/dist/compiler/schemaTemporalAliases.d.ts.map +0 -1
  362. package/dist/compiler/schemaTokenImages.d.ts.map +0 -1
  363. package/dist/compiler/schemaTypeIdentity.d.ts.map +0 -1
  364. package/dist/compiler/schemaTypeRelations.d.ts.map +0 -1
  365. package/dist/compiler/schemaUri.d.ts.map +0 -1
  366. package/dist/compiler/schemaValueContext.d.ts.map +0 -1
  367. package/dist/compiler/schemaValueImages.d.ts.map +0 -1
  368. package/dist/compiler/schemaValueSequences.d.ts.map +0 -1
  369. package/dist/compiler/semanticBudget.d.ts.map +0 -1
  370. package/dist/compiler/semanticCatalog.d.ts.map +0 -1
  371. package/dist/compiler/semanticContext.d.ts.map +0 -1
  372. package/dist/compiler/semanticTypeDependencies.d.ts.map +0 -1
  373. package/dist/compiler/semanticTypeReference.d.ts.map +0 -1
  374. package/dist/compiler/shapeResolver.d.ts.map +0 -1
  375. package/dist/compiler/sourceSchemaBinding.d.ts.map +0 -1
  376. package/dist/compiler/structuralCompanions.d.ts.map +0 -1
  377. package/dist/compiler/validateSemanticGraph.d.ts.map +0 -1
  378. package/dist/compiler/wildcardAlgebra.d.ts.map +0 -1
  379. package/dist/config.d.ts.map +0 -1
  380. package/dist/gateway/generateGateway.d.ts.map +0 -1
  381. package/dist/gateway/generators.d.ts.map +0 -1
  382. package/dist/gateway/helpers.d.ts.map +0 -1
  383. package/dist/generation/preamble.d.ts.map +0 -1
  384. package/dist/generation/writeGeneratedSource.d.ts.map +0 -1
  385. package/dist/index.d.ts.map +0 -1
  386. package/dist/loader/fetch.d.ts.map +0 -1
  387. package/dist/loader/orderedSyntax.d.ts.map +0 -1
  388. package/dist/loader/resolutionDepth.d.ts.map +0 -1
  389. package/dist/loader/schemaInput.d.ts.map +0 -1
  390. package/dist/loader/schemaResources.d.ts.map +0 -1
  391. package/dist/loader/wsdlLoader.d.ts.map +0 -1
  392. package/dist/openapi/casing.d.ts.map +0 -1
  393. package/dist/openapi/generateOpenAPI.d.ts.map +0 -1
  394. package/dist/openapi/generatePaths.d.ts.map +0 -1
  395. package/dist/openapi/generateSchemas.d.ts.map +0 -1
  396. package/dist/openapi/security.d.ts.map +0 -1
  397. package/dist/pipeline.d.ts.map +0 -1
  398. package/dist/runtime/jsonArray.d.ts +0 -24
  399. package/dist/runtime/jsonArray.d.ts.map +0 -1
  400. package/dist/runtime/jsonArray.js +0 -52
  401. package/dist/runtime/ndjson.d.ts +0 -24
  402. package/dist/runtime/ndjson.d.ts.map +0 -1
  403. package/dist/runtime/ndjson.js +0 -30
  404. package/dist/runtime/streamXml.d.ts +0 -45
  405. package/dist/runtime/streamXml.d.ts.map +0 -1
  406. package/dist/runtime/streamXml.js +0 -212
  407. package/dist/test/generateTests.d.ts.map +0 -1
  408. package/dist/test/generators.d.ts.map +0 -1
  409. package/dist/test/mockData.d.ts.map +0 -1
  410. package/dist/util/attributeWildcards.d.ts.map +0 -1
  411. package/dist/util/builder.d.ts.map +0 -1
  412. package/dist/util/catalogMeta.d.ts.map +0 -1
  413. package/dist/util/cli.d.ts.map +0 -1
  414. package/dist/util/errors.d.ts.map +0 -1
  415. package/dist/util/imports.d.ts.map +0 -1
  416. package/dist/util/runtimeSource.d.ts.map +0 -1
  417. package/dist/util/securityConfig.d.ts.map +0 -1
  418. package/dist/util/streamConfig.d.ts.map +0 -1
  419. package/dist/util/tools.d.ts.map +0 -1
  420. package/dist/util/xmlWhitespace.d.ts.map +0 -1
  421. package/dist/xsd/primitives.d.ts.map +0 -1
  422. package/docs/AGENTS.md +0 -47
  423. package/docs/README.md +0 -69
  424. package/docs/architecture.md +0 -158
  425. package/docs/content-model-analysis.md +0 -92
  426. package/docs/content-model-baseline.md +0 -121
  427. package/docs/content-model-catalog.md +0 -116
  428. package/docs/content-model-companions.md +0 -90
  429. package/docs/content-model-composition.md +0 -103
  430. package/docs/content-model-decisions.md +0 -79
  431. package/docs/content-model-gateway-feasibility.md +0 -169
  432. package/docs/content-model-graph.md +0 -121
  433. package/docs/content-model-loading.md +0 -163
  434. package/docs/content-model-matching.md +0 -85
  435. package/docs/content-model-readiness.md +0 -144
  436. package/docs/content-model-resolution.md +0 -81
  437. package/docs/content-model-s02-handoff.md +0 -98
  438. package/docs/content-model-s06-au-01.md +0 -425
  439. package/docs/content-model-s06-dt-01.md +0 -386
  440. package/docs/content-model-s06-pw-01.md +0 -350
  441. package/docs/content-model-s06-re-01-resolver-implementation.md +0 -869
  442. package/docs/content-model-s06-re-01-resolver.md +0 -513
  443. package/docs/content-model-s06-re-01-scalar-witnesses.md +0 -1423
  444. package/docs/content-model-s06-re-01-support-reconstruction.md +0 -6337
  445. package/docs/content-model-s06-re-01.md +0 -7477
  446. package/docs/content-model-s06-research-handoff.md +0 -909
  447. package/docs/content-model-shipped-fix.md +0 -83
  448. package/docs/content-model-soap-feasibility.md +0 -165
  449. package/docs/decisions/001-test-generation.md +0 -36
  450. package/docs/decisions/002-streamable-responses.md +0 -332
  451. package/docs/decisions/003-content-model-contracts.md +0 -280
  452. package/docs/file-naming-and-path-organization.md +0 -213
  453. package/docs/reference-validation.md +0 -243
  454. package/docs/releases/README.md +0 -94
  455. package/docs/releases/v0.20.0.md +0 -22
  456. package/docs/releases/v0.21.0.md +0 -30
  457. package/docs/releases/v0.22.0.md +0 -30
  458. package/docs/releases/v0.23.0.md +0 -31
  459. package/docs/releases/v0.24.0.md +0 -38
  460. package/docs/releases/v0.25.0.md +0 -31
  461. package/docs/releases/v0.25.2.md +0 -32
  462. package/docs/releases/v0.26.0.md +0 -32
  463. package/docs/releases/v0.27.0.md +0 -31
  464. package/docs/releases/v0.28.0.md +0 -32
  465. package/docs/releases/v0.29.0.md +0 -32
  466. package/docs/releases/v0.30.0.md +0 -30
  467. package/docs/releases/v0.30.1.md +0 -31
  468. package/docs/releases/v0.30.2.md +0 -30
  469. package/docs/releases/v0.30.3.md +0 -33
  470. package/docs/releases/v0.31.0.md +0 -33
  471. package/docs/releases/v0.32.0.md +0 -33
  472. package/docs/releases/v0.33.0.md +0 -34
  473. package/docs/releases/v0.34.0.md +0 -30
  474. package/docs/releases/v0.35.0.md +0 -33
  475. package/docs/releases/v0.36.0.md +0 -32
  476. package/docs/releases/v0.37.0.md +0 -33
  477. package/docs/releases/v0.38.0.md +0 -35
  478. package/docs/releases/v0.39.0.md +0 -35
  479. package/docs/releases/v0.40.0.md +0 -45
  480. package/docs/releases/v0.40.1.md +0 -34
  481. package/docs/releases/v1.0.0.md +0 -42
  482. package/docs/releases/v1.0.1.md +0 -38
  483. package/docs/releases/v1.0.2.md +0 -51
  484. package/docs/releases/v1.0.3.md +0 -37
  485. package/docs/releases/v1.0.4.md +0 -45
  486. package/docs/releases/v1.0.5.md +0 -41
  487. package/docs/releases/v1.0.6.md +0 -35
  488. package/docs/releases/v1.0.7.md +0 -36
  489. package/docs/releases/v1.1.0.md +0 -42
  490. package/docs/releases/v1.1.1.md +0 -44
  491. package/docs/releases/v1.1.2.md +0 -42
  492. package/docs/releases/v1.1.3.md +0 -36
  493. package/docs/releases/v1.1.4.md +0 -36
  494. package/docs/releases/v1.1.5.md +0 -38
  495. package/docs/roadmap/README.md +0 -107
  496. package/docs/roadmap/v1.0-capability-conformance-framework.md +0 -582
  497. package/docs/roadmap/v1.0-choice-union-mode.md +0 -90
  498. package/docs/roadmap/v1.0-contract-audit.md +0 -75
  499. package/docs/roadmap/v1.0-json-array-streaming.md +0 -101
  500. package/docs/roadmap/v1.0-openapi-fastify-compatibility.md +0 -99
  501. package/docs/roadmap/v1.0-release-candidate-gates.md +0 -92
  502. package/docs/roadmap/v1.0-wsdl-coverage-matrix.md +0 -200
  503. package/docs/roadmap/v1.0-xs-anyattribute-wildcard-bag.md +0 -932
  504. package/src/runtime/jsonArray.ts +0 -55
  505. package/src/runtime/ndjson.ts +0 -32
@@ -23,6 +23,29 @@ export function assertLoadedSchemaInput(input) {
23
23
  export function schemaInterpretationKey(node, targetNamespace, context) {
24
24
  return JSON.stringify([node.source.digest, node.source.uri, node.baseUri, targetNamespace, context.kind, context.namespace, node.source.path]);
25
25
  }
26
+ /** Prepare a closed input set from independently authorized physical metadata snapshots.
27
+ * @remarks Logical import URIs never initiate I/O here. The later native loader still checks their explicit origin/root
28
+ * permissions. Missing snapshots refuse rather than falling back to network or to artifact-embedded bytes.
29
+ * @returns The actual physical root URI and complete offline loading configuration.
30
+ * @throws SchemaLoadingError For non-file physical inputs, duplicates, denied roots or unavailable files.
31
+ */
32
+ export async function prepareSchemaSnapshotFiles(root, files, options) {
33
+ const physical = async (reference) => {
34
+ if (new URL(resolveResourceUri(reference)).protocol !== 'file:')
35
+ throw new SchemaLoadingError('unsupported-capability', 'Physical schema snapshot file required');
36
+ return loader.fetchResource(reference);
37
+ };
38
+ const loader = await SchemaResourceLoader.create({ fileRoots: options.policy.fileRoots }, options.limits, undefined, options.chargeWork, options.signal);
39
+ const source = await physical(root), offlineResources = new Map([[source.uri, source]]);
40
+ for (const entry of files) {
41
+ options.chargeWork?.(1);
42
+ const uri = resolveResourceUri(entry.uri);
43
+ if (offlineResources.has(uri))
44
+ throw new SchemaLoadingError('invalid-schema', 'Duplicate logical schema snapshot');
45
+ offlineResources.set(uri, { ...await physical(entry.file), canonicalUri: entry.canonicalUri });
46
+ }
47
+ return { source: source.uri, loading: { ...options, offlineResources } };
48
+ }
26
49
  /** A fresh compilation-scoped snapshot, with no implicit network or filesystem permission. */
27
50
  export function loadSchemaInput(source, options) {
28
51
  return loadSchemaInputWithValues(source, options, false);
@@ -32,6 +55,15 @@ export function loadSemanticSchemaInput(source, options) {
32
55
  return loadSchemaInputWithValues(source, options, true);
33
56
  }
34
57
  async function loadSchemaInputWithValues(source, options, semanticValues) {
58
+ // @why Snapshot caller configuration before the first asynchronous resource read.
59
+ const namespaceLocations = new Map();
60
+ if (options.namespaceLocations)
61
+ for (const [namespace, location] of options.namespaceLocations) {
62
+ if (typeof namespace !== 'string' || typeof location !== 'string' || !location)
63
+ throw new TypeError('Namespace locations require string namespace names and nonempty resource locations');
64
+ options.chargeWork?.(256 + (namespace.length + location.length) * 32);
65
+ namespaceLocations.set(namespace, resolveResourceUri(location));
66
+ }
35
67
  const loader = await SchemaResourceLoader.create(options.policy, options.limits, options.offlineResources, options.chargeWork, options.signal);
36
68
  const documents = new Map();
37
69
  const originalBytes = new Map();
@@ -67,12 +99,13 @@ async function loadSchemaInputWithValues(source, options, semanticValues) {
67
99
  const resource = await loader.fetchResource(uri);
68
100
  let doc = documents.get(resource.uri);
69
101
  if (!doc) {
70
- doc = parseOrderedSyntax(resource.bytes, resource.uri, { maxDepth: loader.limits.syntaxDepth });
102
+ doc = parseOrderedSyntax(resource.bytes, resource.uri, { maxDepth: loader.limits.syntaxDepth, metadataEncoding: true });
71
103
  if (semanticValues) {
72
104
  options.chargeWork?.(128);
73
105
  originalBytes.set(resource.uri, resource.bytes);
74
106
  }
75
107
  documents.set(resource.uri, doc);
108
+ options.onDocument?.(doc);
76
109
  }
77
110
  return doc;
78
111
  };
@@ -94,6 +127,9 @@ async function loadSchemaInputWithValues(source, options, semanticValues) {
94
127
  const referencedDocument = async (reference, node) => {
95
128
  try {
96
129
  const referenceUri = resolveResourceUri(reference, node.baseUri);
130
+ if (new URL(node.source.uri).protocol !== 'file:' && new URL(referenceUri).protocol === 'file:') {
131
+ throw new SchemaLoadingError('unsupported-capability', 'Remote metadata cannot select local resources');
132
+ }
97
133
  return { referenceUri, doc: await getDocument(referenceUri) };
98
134
  }
99
135
  catch (error) {
@@ -136,7 +172,8 @@ async function loadSchemaInputWithValues(source, options, semanticValues) {
136
172
  const missingLocation = semanticValues ? location === undefined : !location;
137
173
  if (missingLocation && kind === "include")
138
174
  throw new SchemaLoadingError("invalid-schema", "Schema include requires schemaLocation", child.source);
139
- if (missingLocation) {
175
+ const suppliedLocation = missingLocation && kind === 'import' ? namespaceLocations.get(importedNamespace ?? '') : undefined;
176
+ if (missingLocation && suppliedLocation === undefined) {
140
177
  recordEdge({ kind, from: key, source: child.source, cycle: false });
141
178
  continue;
142
179
  }
@@ -144,7 +181,7 @@ async function loadSchemaInputWithValues(source, options, semanticValues) {
144
181
  const namespace = kind === "include" ? targetNamespace : importedNamespace ?? "";
145
182
  if (kind === "import" && namespace === targetNamespace)
146
183
  throw new SchemaLoadingError("invalid-schema", "Schema import must name a different namespace", child.source);
147
- const { referenceUri, doc } = await referencedDocument(location, child);
184
+ const { referenceUri, doc } = await referencedDocument(suppliedLocation ?? location, child);
148
185
  const childDeclaredNamespace = xsdUri(doc.root, "targetNamespace");
149
186
  // A successfully supplied import referent must match both presence and
150
187
  // value. An explicit empty import namespace without a referent is not
@@ -204,7 +241,7 @@ async function loadSchemaInputWithValues(source, options, semanticValues) {
204
241
  else
205
242
  throw new SchemaLoadingError("unsupported-capability", "Only WSDL 1.1 or XSD schema inputs are accepted; payload hints cannot resolve schemas", root.root.source);
206
243
  const input = Object.freeze({ root, documents: Object.freeze([...documents.values()]), schemas: Object.freeze([...schemas.values()]),
207
- resources: loader.metadata, edges: Object.freeze(edges), limits: loader.limits, metrics: loader.metrics });
244
+ resources: loader.metadata, resourceAliases: loader.resourceAliases, edges: Object.freeze(edges), limits: loader.limits, metrics: loader.metrics });
208
245
  loadedInputs.add(input);
209
246
  if (semanticValues)
210
247
  originalSources.set(input, originalBytes);
@@ -19,6 +19,7 @@ export type SchemaResourcePolicy = Readonly<{
19
19
  export type OfflineSchemaResource = Readonly<{
20
20
  bytes: Uint8Array;
21
21
  digest: string;
22
+ canonicalUri?: string;
22
23
  }>;
23
24
  export type ResourceMetadata = Readonly<{
24
25
  uri: string;
@@ -53,7 +54,7 @@ export declare class SchemaResourceLoader {
53
54
  totalBytes: number;
54
55
  ioMs: number;
55
56
  }>;
57
+ get resourceAliases(): ReadonlyMap<string, string>;
56
58
  private authorize;
57
59
  fetchResource(reference: string): Promise<FetchedSchemaResource>;
58
60
  }
59
- //# sourceMappingURL=schemaResources.d.ts.map
@@ -90,7 +90,7 @@ export class SchemaResourceLoader {
90
90
  if (offline)
91
91
  for (const [uri, value] of offline) {
92
92
  charge?.(256 + uri.length * 32);
93
- snapshots.set(resolveResourceUri(uri), { bytes: value.bytes, digest: value.digest });
93
+ snapshots.set(resolveResourceUri(uri), { bytes: value.bytes, digest: value.digest, canonicalUri: value.canonicalUri });
94
94
  }
95
95
  return new SchemaResourceLoader(roots, [...configuredRoots, ...roots], origins, loadingLimits(overrides), snapshots, charge, signal);
96
96
  }
@@ -101,6 +101,7 @@ export class SchemaResourceLoader {
101
101
  get metrics() {
102
102
  return Object.freeze({ resources: this.resources.size, totalBytes: this.totalBytes, ioMs: this.ioMs });
103
103
  }
104
+ get resourceAliases() { return new Map(this.aliases); }
104
105
  async authorize(uri) {
105
106
  this.charge?.(1024 + uri.length * 32 + this.roots.length * 256);
106
107
  const url = new URL(resolveResourceUri(uri));
@@ -170,10 +171,46 @@ export class SchemaResourceLoader {
170
171
  chunks.push(Uint8Array.from(chunk));
171
172
  };
172
173
  if (this.offline) {
173
- checkResourceCount();
174
174
  const snapshot = this.offline.get(uri);
175
175
  if (!snapshot)
176
176
  throw new SchemaLoadingError("transport", "Schema resource is absent from the offline snapshot");
177
+ if (snapshot.bytes.byteLength > this.limits.resourceBytes)
178
+ throw new SchemaLoadingError('resource-limit', 'Decompressed schema byte budget exceeded');
179
+ const snapshotDigest = (value) => {
180
+ if (controller.signal.aborted || performance.now() - started > budget)
181
+ throw new SchemaLoadingError('transport', 'Schema I/O deadline exceeded');
182
+ this.charge?.(64 + value.bytes.byteLength * 8);
183
+ return createHash('sha256').update(value.bytes).digest('hex');
184
+ };
185
+ if (snapshot.canonicalUri) {
186
+ if (new URL(uri).protocol !== 'file:' && new URL(resolveResourceUri(snapshot.canonicalUri)).protocol === 'file:')
187
+ throw new SchemaLoadingError('unsupported-capability', 'Remote metadata cannot select local resources');
188
+ const canonical = await this.authorize(snapshot.canonicalUri);
189
+ const target = this.offline.get(canonical);
190
+ if (target && (target.digest !== snapshot.digest || target.bytes.byteLength !== snapshot.bytes.byteLength)) {
191
+ throw new SchemaLoadingError('invalid-schema', 'Conflicting offline alias bytes');
192
+ }
193
+ if (target) {
194
+ if (target.bytes.byteLength > this.limits.resourceBytes)
195
+ throw new SchemaLoadingError('resource-limit', 'Decompressed schema byte budget exceeded');
196
+ if (snapshotDigest(target) !== target.digest)
197
+ throw new SchemaLoadingError('invalid-schema', 'Offline schema digest mismatch');
198
+ if (target.canonicalUri && resolveResourceUri(target.canonicalUri) !== canonical)
199
+ throw new SchemaLoadingError('unsupported-capability', 'Offline aliases must name a canonical snapshot');
200
+ }
201
+ uri = canonical;
202
+ redirectAliases.push(uri);
203
+ const cached = this.resources.get(this.resourceKeys.get(uri) ?? '');
204
+ if (cached) {
205
+ if (snapshot.digest !== cached.digest || snapshotDigest(snapshot) !== snapshot.digest) {
206
+ throw new SchemaLoadingError('invalid-schema', 'Conflicting offline alias bytes');
207
+ }
208
+ for (const alias of redirectAliases)
209
+ this.aliases.set(alias, uri);
210
+ return cached;
211
+ }
212
+ }
213
+ checkResourceCount();
177
214
  accept(snapshot.bytes);
178
215
  const digest = createHash("sha256").update(snapshot.bytes).digest("hex");
179
216
  if (digest !== snapshot.digest)
@@ -188,6 +225,9 @@ export class SchemaResourceLoader {
188
225
  try {
189
226
  if (!(await file.stat()).isFile())
190
227
  throw new SchemaLoadingError("unsupported-capability", "Schema resource must be a regular file");
228
+ // @why Cancellation during metadata I/O must not construct an already-aborted stream that can emit outside iterator handling.
229
+ if (controller.signal.aborted)
230
+ throw new SchemaLoadingError("transport", "Schema resource I/O cancelled");
191
231
  const stream = file.createReadStream({ autoClose: false, signal: controller.signal });
192
232
  try {
193
233
  for await (const chunk of stream)
@@ -211,9 +251,10 @@ export class SchemaResourceLoader {
211
251
  const location = response.headers.get("location");
212
252
  if (!location)
213
253
  throw new SchemaLoadingError("transport", "Schema redirect has no location");
214
- uri = await this.authorize(resolveResourceUri(location, uri));
215
- if (new URL(uri).protocol === "file:")
254
+ const redirected = resolveResourceUri(location, uri);
255
+ if (new URL(redirected).protocol === "file:")
216
256
  throw new SchemaLoadingError("unsupported-capability", "HTTP redirects cannot select file resources");
257
+ uri = await this.authorize(redirected);
217
258
  redirectAliases.push(uri);
218
259
  const redirectedCache = this.resources.get(this.resourceKeys.get(this.aliases.get(uri) ?? uri) ?? "");
219
260
  if (redirectedCache) {
@@ -43,4 +43,3 @@ export type WsdlCatalog = {
43
43
  * @throws {Error} - If the document is not a valid WSDL 1.1 file
44
44
  */
45
45
  export declare function loadWsdl(wsdlUrlOrPath: string): Promise<WsdlCatalog>;
46
- //# sourceMappingURL=wsdlLoader.d.ts.map
@@ -0,0 +1,41 @@
1
+ import { type PipelineOptions } from "./pipeline.js";
2
+ import { type ComposedOpenApiDocument, type OpenApiCompositionOptions } from "./openapi/composeOpenAPI.js";
3
+ import type { CompiledCatalog } from "./compiler/schemaCompiler.js";
4
+ export interface MultiServiceEntry {
5
+ key: string;
6
+ generation: PipelineOptions;
7
+ }
8
+ export interface MultiServicePipelineOptions {
9
+ services: readonly MultiServiceEntry[];
10
+ openapi: OpenApiCompositionOptions & {
11
+ outFile: string;
12
+ };
13
+ gateway: {
14
+ outDir: string;
15
+ imports?: "js" | "ts" | "bare";
16
+ openapiPath?: string | false;
17
+ };
18
+ }
19
+ export interface MultiServicePipelineResult {
20
+ openapiDoc: ComposedOpenApiDocument;
21
+ services: Record<string, {
22
+ compiled: CompiledCatalog;
23
+ clientDir: string;
24
+ gatewayDir: string;
25
+ }>;
26
+ pluginFile: string;
27
+ openapiFile: string;
28
+ }
29
+ /** Generate independent WSDL clients behind one typed gateway and discoverable API definition.
30
+ * @param options Explicit per-service pipelines and disjoint aggregate output paths.
31
+ * @returns Matched aggregate artifacts and each service's unmerged compiled catalog.
32
+ * @throws For configuration/output conflicts, source generation failures or invalid API composition.
33
+ * @sideEffects Generates each selected legacy service in caller order, then publishes the aggregate spec/plugin pair.
34
+ * @constraints Failure preserves previous aggregate spec/plugin files; earlier generated service dependencies are not rolled back.
35
+ */
36
+ export declare function runMultiServicePipeline(options: MultiServicePipelineOptions): Promise<MultiServicePipelineResult>;
37
+ /** Load a composition config with paths resolved against its own directory.
38
+ * @throws For invalid JSON or missing required output/source paths when the pipeline validates it.
39
+ * @constraints Runtime client options and credentials are deliberately not generation configuration.
40
+ */
41
+ export declare function loadMultiServiceConfig(file: string): Promise<MultiServicePipelineOptions>;
@@ -0,0 +1,287 @@
1
+ import fs from "node:fs/promises";
2
+ import { existsSync, realpathSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { randomUUID } from "node:crypto";
5
+ import { types } from "node:util";
6
+ import { fileURLToPath } from "node:url";
7
+ import { runGenerationPipeline } from "./pipeline.js";
8
+ import { composeOpenApiDocuments } from "./openapi/composeOpenAPI.js";
9
+ import { buildComposedGatewaySource } from "./gateway/generateComposedGateway.js";
10
+ import { deriveClientName } from "./util/tools.js";
11
+ import { slugName } from "./gateway/helpers.js";
12
+ const data = (value, label) => {
13
+ if (!value || typeof value !== "object" || Array.isArray(value) || types.isProxy(value) || ![null, Object.prototype].includes(Object.getPrototypeOf(value)))
14
+ throw new TypeError(`${label} must be a data object`);
15
+ for (const property of Object.values(Object.getOwnPropertyDescriptors(value)))
16
+ if (!Object.hasOwn(property, "value"))
17
+ throw new TypeError(`${label} must not contain accessors`);
18
+ return value;
19
+ };
20
+ const text = (value, label) => {
21
+ if (typeof value !== "string" || !value.trim())
22
+ throw new TypeError(`${label} must be a nonempty string`);
23
+ return value;
24
+ };
25
+ const known = (value, allowed, label) => {
26
+ for (const key of Reflect.ownKeys(value))
27
+ if (typeof key !== "string" || !allowed.includes(key))
28
+ throw new TypeError(`Unknown ${label} option: ${String(key)}`);
29
+ };
30
+ const localPath = (value, label) => {
31
+ // @why Lexically different output paths can share a symlink/junction target; ownership checks must compare their filesystem destinations.
32
+ let ancestor = path.resolve(text(value, label));
33
+ const missing = [];
34
+ while (!existsSync(ancestor)) {
35
+ missing.unshift(path.basename(ancestor));
36
+ const parent = path.dirname(ancestor);
37
+ if (parent === ancestor)
38
+ throw new TypeError(`Cannot resolve output filesystem root for ${label}`);
39
+ ancestor = parent;
40
+ }
41
+ return path.join(realpathSync(ancestor), ...missing);
42
+ };
43
+ const canonical = (value) => process.platform === "win32" ? value.toLowerCase() : value;
44
+ const within = (directory, file) => {
45
+ const relative = path.relative(canonical(directory), canonical(file));
46
+ return relative === "" || relative !== ".." && !relative.startsWith(".." + path.sep) && !path.isAbsolute(relative);
47
+ };
48
+ const prefix = (value) => {
49
+ const result = text(value, "generation.openapi.basePath");
50
+ if (!/^\/(?:[a-zA-Z0-9._~-]+\/)*[a-zA-Z0-9._~-]+$/.test(result) || result.split("/").some(segment => segment === "." || segment === ".."))
51
+ throw new TypeError("Each service needs an explicit static OpenAPI basePath without trailing slash");
52
+ return result;
53
+ };
54
+ function prepare(options) {
55
+ const input = data(options, "composition");
56
+ if (Object.keys(input).some(key => !["services", "openapi", "gateway"].includes(key)))
57
+ throw new TypeError("Unknown multi-service composition option");
58
+ if (!Array.isArray(options.services) || options.services.length === 0)
59
+ throw new TypeError("At least one independent service is required");
60
+ known(data(options.openapi, "aggregate OpenAPI"), ["outFile", "title", "version", "description", "servers"], "aggregate OpenAPI");
61
+ known(data(options.gateway, "aggregate gateway"), ["outDir", "imports", "openapiPath"], "aggregate gateway");
62
+ for (const name of ["title", "version", "description"])
63
+ if (options.openapi[name] !== undefined && typeof options.openapi[name] !== "string")
64
+ throw new TypeError(`openapi.${name} must be a string`);
65
+ if (options.openapi.servers !== undefined && (!Array.isArray(options.openapi.servers) || options.openapi.servers.some(server => typeof server !== "string" || !server)))
66
+ throw new TypeError("openapi.servers must contain server URL strings");
67
+ const outFile = localPath(options.openapi.outFile, "openapi.outFile");
68
+ if (path.extname(outFile).toLowerCase() !== ".json")
69
+ throw new TypeError("The aggregate OpenAPI output must be a JSON file");
70
+ const gatewayDir = localPath(options.gateway.outDir, "gateway.outDir");
71
+ if (options.gateway.imports !== undefined && !["js", "ts", "bare"].includes(options.gateway.imports))
72
+ throw new TypeError("Invalid aggregate import extension mode");
73
+ const openapiPath = options.gateway.openapiPath === false ? false : options.gateway.openapiPath ?? "/openapi.json";
74
+ if (openapiPath !== false && (!/^\/[^?#\\]*$/.test(openapiPath) || openapiPath.includes("//")))
75
+ throw new TypeError("Invalid OpenAPI discovery path");
76
+ const keys = new Set(), slugs = new Set(), decorators = new Set(), prefixes = new Set();
77
+ const outputs = [
78
+ { owner: "aggregate", role: "gateway", file: gatewayDir, directory: true },
79
+ { owner: "aggregate", role: "openapi", file: outFile, directory: false },
80
+ ];
81
+ const entries = options.services.map(entry => {
82
+ data(entry, "service entry");
83
+ if (Object.keys(entry).some(key => !["key", "generation"].includes(key)))
84
+ throw new TypeError("Unknown service entry option");
85
+ const key = text(entry.key, "service key");
86
+ if (!/^[a-z][a-z0-9-]*$/.test(key) || keys.has(key))
87
+ throw new TypeError("Unique lowercase service keys required");
88
+ keys.add(key);
89
+ const generation = data(entry.generation, `generation for ${key}`);
90
+ known(generation, ["model", "checkedComponents", "wsdl", "catalogOut", "clientOutDir", "compiler", "openapi", "gateway", "app", "test", "streamConfigFile", "streamConfig"], "service generation");
91
+ if (generation.model !== undefined && generation.model !== "legacy" || generation.checkedComponents !== undefined || generation.app !== undefined || generation.test !== undefined)
92
+ throw new TypeError("Multi-service generation currently composes legacy service routers; app/test/checked settings are not aggregate settings");
93
+ text(generation.wsdl, `${key}.wsdl`);
94
+ if (!generation.openapi || !generation.gateway)
95
+ throw new TypeError(`Service ${key} requires OpenAPI and gateway generation`);
96
+ data(generation.openapi, "service OpenAPI");
97
+ data(generation.gateway, "service gateway");
98
+ const basePath = prefix(generation.openapi.basePath);
99
+ if (prefixes.has(basePath))
100
+ throw new TypeError(`Duplicate service basePath ${basePath}`);
101
+ prefixes.add(basePath);
102
+ const clientDir = localPath(generation.clientOutDir, `${key}.clientOutDir`);
103
+ const catalogOut = localPath(generation.catalogOut, `${key}.catalogOut`);
104
+ const serviceOpenapi = localPath(generation.openapi.outFile, `${key}.openapi.outFile`);
105
+ const serviceGateway = localPath(generation.gateway.outDir, `${key}.gateway.outDir`);
106
+ if (!slugName(text(generation.gateway.versionSlug, `${key}.gateway.versionSlug`)))
107
+ throw new TypeError("A normalized gateway version slug is required");
108
+ const slug = slugName(text(generation.gateway.serviceSlug, `${key}.gateway.serviceSlug`));
109
+ if (!slug || slugs.has(slug))
110
+ throw new TypeError("Gateway service slugs must remain unique after normalization");
111
+ slugs.add(slug);
112
+ const decorator = generation.gateway.clientDecoratorName ?? `wsdl_${key.replaceAll("-", "_")}Client`;
113
+ if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(decorator) || decorators.has(decorator))
114
+ throw new TypeError("Unique valid client decorators required");
115
+ decorators.add(decorator);
116
+ if (generation.gateway.emitPlugin === false || generation.gateway.stubHandlers === true || generation.gateway.emitRuntime === false)
117
+ throw new TypeError("Composition requires complete service plugins and runtime handlers");
118
+ for (const target of [clientDir, serviceGateway])
119
+ if (path.parse(target).root !== path.parse(gatewayDir).root)
120
+ throw new TypeError("Composed generated modules must share a filesystem root");
121
+ outputs.push({ owner: key, role: "client", file: clientDir, directory: true }, { owner: key, role: "gateway", file: serviceGateway, directory: true }, { owner: key, role: "catalog", file: catalogOut, directory: false }, { owner: key, role: "openapi", file: serviceOpenapi, directory: false });
122
+ return { key, generation: { ...generation, catalogOut, clientOutDir: clientDir,
123
+ openapi: { ...generation.openapi, basePath, outFile: serviceOpenapi },
124
+ gateway: { ...generation.gateway, outDir: serviceGateway, clientDecoratorName: decorator } } };
125
+ });
126
+ for (let a = 0; a < outputs.length; a++)
127
+ for (let b = a + 1; b < outputs.length; b++) {
128
+ const left = outputs[a], right = outputs[b];
129
+ if (canonical(left.file) === canonical(right.file))
130
+ throw new TypeError(`Conflicting output paths: ${left.role} and ${right.role}`);
131
+ const overlap = left.directory && within(left.file, right.file) || right.directory && within(right.file, left.file);
132
+ if (overlap && (left.owner !== right.owner || left.directory && right.directory))
133
+ throw new TypeError("Service output ownership must not overlap");
134
+ const file = left.directory ? right : left, directory = left.directory ? left : right;
135
+ if (overlap && !file.directory && directory.directory) {
136
+ const relative = path.relative(directory.file, file.file).replaceAll("\\", "/");
137
+ if (relative.endsWith(".ts") || /^(?:routes|schemas)(?:\/|$)/.test(relative))
138
+ throw new TypeError("Output file conflicts with generated service modules");
139
+ }
140
+ }
141
+ for (const entry of entries) {
142
+ const source = entry.generation.wsdl;
143
+ if (/^[a-z][a-z0-9+.-]*:\/\//i.test(source) && !source.startsWith("file:"))
144
+ continue;
145
+ const sourceFile = localPath(source.startsWith("file:") ? fileURLToPath(source) : source, "source WSDL");
146
+ if (outputs.some(output => output.directory ? within(output.file, sourceFile) : canonical(output.file) === canonical(sourceFile)))
147
+ throw new TypeError("Source WSDLs must remain outside generated output ownership");
148
+ }
149
+ return { entries, outFile, gatewayDir, openapiPath };
150
+ }
151
+ /** Publish the matched spec/plugin after all service generation and composition checks succeed.
152
+ * @constraints Uses only individually owned staging files; never removes a consumer output tree.
153
+ */
154
+ async function publish(files) {
155
+ const staged = [];
156
+ try {
157
+ for (const { file, content } of files) {
158
+ await fs.mkdir(path.dirname(file), { recursive: true });
159
+ let previous;
160
+ try {
161
+ previous = await fs.readFile(file);
162
+ }
163
+ catch (error) {
164
+ if (error.code !== "ENOENT")
165
+ throw error;
166
+ }
167
+ const temporary = file + ".stage-" + randomUUID();
168
+ staged.push({ file, temporary, previous, committed: false });
169
+ await fs.writeFile(temporary, content, { flag: "wx" });
170
+ }
171
+ for (const entry of staged) {
172
+ await fs.rename(entry.temporary, entry.file);
173
+ entry.committed = true;
174
+ }
175
+ }
176
+ catch (error) {
177
+ for (const entry of [...staged].reverse())
178
+ if (entry.committed) {
179
+ if (entry.previous === undefined)
180
+ await fs.unlink(entry.file);
181
+ else
182
+ await fs.writeFile(entry.file, entry.previous);
183
+ }
184
+ throw error;
185
+ }
186
+ finally {
187
+ for (const entry of staged)
188
+ await fs.unlink(entry.temporary).catch(error => { if (error.code !== "ENOENT")
189
+ throw error; });
190
+ }
191
+ }
192
+ /** Generate independent WSDL clients behind one typed gateway and discoverable API definition.
193
+ * @param options Explicit per-service pipelines and disjoint aggregate output paths.
194
+ * @returns Matched aggregate artifacts and each service's unmerged compiled catalog.
195
+ * @throws For configuration/output conflicts, source generation failures or invalid API composition.
196
+ * @sideEffects Generates each selected legacy service in caller order, then publishes the aggregate spec/plugin pair.
197
+ * @constraints Failure preserves previous aggregate spec/plugin files; earlier generated service dependencies are not rolled back.
198
+ */
199
+ export async function runMultiServicePipeline(options) {
200
+ const prepared = prepare(options);
201
+ const services = Object.create(null);
202
+ const documents = [];
203
+ const routers = [];
204
+ for (const { key, generation } of prepared.entries) {
205
+ const result = await runGenerationPipeline(generation);
206
+ const compiled = result.compiled;
207
+ const fileSlugs = new Set();
208
+ const expectedOperations = new Set(compiled.operations.map(operation => operation.name));
209
+ if (expectedOperations.size !== compiled.operations.length)
210
+ throw new TypeError(`Service ${key} has overloaded operation names that cannot own unique gateway routes`);
211
+ for (const operation of compiled.operations) {
212
+ const slug = slugName(operation.name);
213
+ if (!slug || fileSlugs.has(slug))
214
+ throw new TypeError(`Service ${key} has colliding generated operation filenames`);
215
+ fileSlugs.add(slug);
216
+ }
217
+ const described = [];
218
+ const document = data(result.openapiDoc, "generated OpenAPI");
219
+ for (const item of Object.values(data(document.paths, "generated paths"))) {
220
+ const pathItem = data(item, "generated path item");
221
+ for (const method of ["get", "put", "post", "delete", "options", "head", "patch", "trace"]) {
222
+ if (pathItem[method] !== undefined)
223
+ described.push(text(data(pathItem[method], "generated operation").operationId, "operationId"));
224
+ }
225
+ }
226
+ if (described.length !== expectedOperations.size || described.some(name => !expectedOperations.has(name)))
227
+ throw new TypeError(`Service ${key} loses operations through generated route collisions`);
228
+ const className = deriveClientName(compiled);
229
+ if (generation.gateway.clientClassName && generation.gateway.clientClassName !== className)
230
+ throw new TypeError("Configure compiler.clientName to keep client and gateway classes matched");
231
+ services[key] = { compiled, clientDir: generation.clientOutDir, gatewayDir: generation.gateway.outDir };
232
+ documents.push({ key, document: result.openapiDoc });
233
+ routers.push({ key, clientDir: generation.clientOutDir, gatewayDir: generation.gateway.outDir, clientClassName: className });
234
+ }
235
+ const openapiDoc = composeOpenApiDocuments(documents, options.openapi);
236
+ const { default: SwaggerParser } = await import("@apidevtools/swagger-parser");
237
+ const validator = new SwaggerParser();
238
+ await validator.validate(structuredClone(openapiDoc), { resolve: { external: false } });
239
+ if (prepared.openapiPath !== false && Object.hasOwn(openapiDoc.paths, prepared.openapiPath))
240
+ throw new TypeError("OpenAPI discovery path conflicts with a service route");
241
+ const pluginFile = path.join(prepared.gatewayDir, "plugin.ts");
242
+ const source = buildComposedGatewaySource(routers, { outDir: prepared.gatewayDir, openapiFile: prepared.outFile,
243
+ imports: options.gateway.imports, openapiPath: prepared.openapiPath });
244
+ await publish([{ file: prepared.outFile, content: JSON.stringify(openapiDoc, null, 2) + "\n" }, { file: pluginFile, content: source }]);
245
+ return { openapiDoc, services, pluginFile, openapiFile: prepared.outFile };
246
+ }
247
+ /** Load a composition config with paths resolved against its own directory.
248
+ * @throws For invalid JSON or missing required output/source paths when the pipeline validates it.
249
+ * @constraints Runtime client options and credentials are deliberately not generation configuration.
250
+ */
251
+ export async function loadMultiServiceConfig(file) {
252
+ const absolute = path.resolve(file), base = path.dirname(absolute);
253
+ const options = JSON.parse(await fs.readFile(absolute, "utf8"));
254
+ data(options, "composition");
255
+ data(options.openapi, "aggregate OpenAPI");
256
+ data(options.gateway, "aggregate gateway");
257
+ if (!Array.isArray(options.services))
258
+ throw new TypeError("services must be an array");
259
+ const resolve = (value) => value === undefined ? undefined : path.resolve(base, text(value, "config path"));
260
+ const source = (value) => /^[a-z][a-z0-9+.-]*:\/\//i.test(value) ? value : resolve(value);
261
+ options.openapi.outFile = resolve(options.openapi.outFile);
262
+ options.gateway.outDir = resolve(options.gateway.outDir);
263
+ for (const entry of options.services) {
264
+ data(entry, "service");
265
+ const generation = data(entry.generation, "generation");
266
+ generation.wsdl = source(text(generation.wsdl, "wsdl"));
267
+ generation.catalogOut = resolve(generation.catalogOut);
268
+ generation.clientOutDir = resolve(generation.clientOutDir);
269
+ generation.streamConfigFile = resolve(generation.streamConfigFile);
270
+ if (generation.openapi) {
271
+ generation.openapi.outFile = resolve(generation.openapi.outFile);
272
+ generation.openapi.tagsFile = resolve(generation.openapi.tagsFile);
273
+ generation.openapi.opsFile = resolve(generation.openapi.opsFile);
274
+ generation.openapi.securityConfigFile = resolve(generation.openapi.securityConfigFile);
275
+ }
276
+ if (generation.gateway)
277
+ generation.gateway.outDir = resolve(generation.gateway.outDir);
278
+ if (generation.streamConfig)
279
+ for (const shape of Object.values(generation.streamConfig.shapeCatalogs)) {
280
+ if (shape.catalogFile)
281
+ shape.catalogFile = resolve(shape.catalogFile);
282
+ if (shape.wsdlSource)
283
+ shape.wsdlSource = source(shape.wsdlSource);
284
+ }
285
+ }
286
+ return options;
287
+ }
@@ -21,4 +21,3 @@ export type PathStyle = "kebab" | "asis" | "lower";
21
21
  * @returns {string} - Formatted path segment
22
22
  */
23
23
  export declare function toPathSegment(name: string, style: PathStyle): string;
24
- //# sourceMappingURL=casing.d.ts.map
@@ -0,0 +1,29 @@
1
+ export type JsonValue = null | boolean | number | string | JsonValue[] | JsonObject;
2
+ export interface JsonObject {
3
+ [key: string]: JsonValue;
4
+ }
5
+ export interface ComposedOpenApiDocument extends JsonObject {
6
+ openapi: string;
7
+ info: JsonObject;
8
+ paths: Record<string, JsonObject>;
9
+ components: Record<string, Record<string, JsonValue>>;
10
+ }
11
+ export interface OpenApiCompositionOptions {
12
+ title?: string;
13
+ version?: string;
14
+ description?: string;
15
+ servers?: readonly string[];
16
+ }
17
+ export interface OpenApiCompositionEntry {
18
+ key: string;
19
+ document: unknown;
20
+ }
21
+ /** Compose service-scoped OpenAPI contracts without changing SOAP client ownership.
22
+ * @param entries Self-contained OpenAPI 3.1 documents whose HTTP paths already contain their service prefixes.
23
+ * @param options Combined API metadata and default gateway servers; custom source servers remain operation-local.
24
+ * @returns A fresh deterministic document with qualified component names and operation identifiers.
25
+ * @throws For invalid JSON, duplicate service keys/paths/operation IDs, unresolved local references or unsupported relative references/schema resources.
26
+ * @constraints Only reference-bearing OpenAPI/JSON Schema positions are rewritten; examples, literal values and extensions remain data.
27
+ * @see https://spec.openapis.org/oas/v3.1.0.html Reference, Link, Security Requirement and Schema objects govern distinct reference positions.
28
+ */
29
+ export declare function composeOpenApiDocuments(entries: readonly OpenApiCompositionEntry[], options?: OpenApiCompositionOptions): ComposedOpenApiDocument;