@techspokes/typescript-wsdl-client 1.1.3 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/README.md +50 -1
  2. package/dist/app/generateApp.d.ts.map +1 -1
  3. package/dist/app/generateApp.js +8 -6
  4. package/dist/cli.js +49 -5
  5. package/dist/client/checkedDirectRuntime.d.ts +59 -0
  6. package/dist/client/checkedDirectRuntime.d.ts.map +1 -0
  7. package/dist/client/checkedDirectRuntime.js +23 -0
  8. package/dist/client/directClientRuntime.d.ts +49 -0
  9. package/dist/client/directClientRuntime.d.ts.map +1 -0
  10. package/dist/client/directClientRuntime.js +112 -0
  11. package/dist/client/directClientVersion.d.ts +4 -0
  12. package/dist/client/directClientVersion.d.ts.map +1 -0
  13. package/dist/client/directClientVersion.js +3 -0
  14. package/dist/client/generateClient.d.ts.map +1 -1
  15. package/dist/client/generateClient.js +22 -9
  16. package/dist/client/generateDirectClient.d.ts +14 -0
  17. package/dist/client/generateDirectClient.d.ts.map +1 -0
  18. package/dist/client/generateDirectClient.js +136 -0
  19. package/dist/compiler/buildCanonicalGraph.d.ts +7 -0
  20. package/dist/compiler/buildCanonicalGraph.d.ts.map +1 -0
  21. package/dist/compiler/buildCanonicalGraph.js +381 -0
  22. package/dist/compiler/canonicalGraph.d.ts +198 -0
  23. package/dist/compiler/canonicalGraph.d.ts.map +1 -0
  24. package/dist/compiler/canonicalGraph.js +37 -0
  25. package/dist/compiler/catalogErrors.d.ts +18 -0
  26. package/dist/compiler/catalogErrors.d.ts.map +1 -0
  27. package/dist/compiler/catalogErrors.js +86 -0
  28. package/dist/compiler/catalogProvenance.d.ts +15 -0
  29. package/dist/compiler/catalogProvenance.d.ts.map +1 -0
  30. package/dist/compiler/catalogProvenance.js +229 -0
  31. package/dist/compiler/checkedAssessment.d.ts +91 -0
  32. package/dist/compiler/checkedAssessment.d.ts.map +1 -0
  33. package/dist/compiler/checkedAssessment.js +300 -0
  34. package/dist/compiler/checkedSourcePreparation.d.ts +35 -0
  35. package/dist/compiler/checkedSourcePreparation.d.ts.map +1 -0
  36. package/dist/compiler/checkedSourcePreparation.js +131 -0
  37. package/dist/compiler/complexTypeContent.d.ts +59 -0
  38. package/dist/compiler/complexTypeContent.d.ts.map +1 -0
  39. package/dist/compiler/complexTypeContent.js +558 -0
  40. package/dist/compiler/composeCanonicalGraph.d.ts +69 -0
  41. package/dist/compiler/composeCanonicalGraph.d.ts.map +1 -0
  42. package/dist/compiler/composeCanonicalGraph.js +252 -0
  43. package/dist/compiler/dataOwnership.d.ts +22 -0
  44. package/dist/compiler/dataOwnership.d.ts.map +1 -0
  45. package/dist/compiler/dataOwnership.js +157 -0
  46. package/dist/compiler/datatypeValues.d.ts +47 -0
  47. package/dist/compiler/datatypeValues.d.ts.map +1 -0
  48. package/dist/compiler/datatypeValues.js +275 -0
  49. package/dist/compiler/directCodec.d.ts +59 -0
  50. package/dist/compiler/directCodec.d.ts.map +1 -0
  51. package/dist/compiler/directCodec.js +192 -0
  52. package/dist/compiler/directExecutionPolicy.d.ts +10 -0
  53. package/dist/compiler/directExecutionPolicy.d.ts.map +1 -0
  54. package/dist/compiler/directExecutionPolicy.js +17 -0
  55. package/dist/compiler/directOperation.d.ts +72 -0
  56. package/dist/compiler/directOperation.d.ts.map +1 -0
  57. package/dist/compiler/directOperation.js +282 -0
  58. package/dist/compiler/directSoap.d.ts +42 -0
  59. package/dist/compiler/directSoap.d.ts.map +1 -0
  60. package/dist/compiler/directSoap.js +298 -0
  61. package/dist/compiler/directSoapSource.d.ts +15 -0
  62. package/dist/compiler/directSoapSource.d.ts.map +1 -0
  63. package/dist/compiler/directSoapSource.js +86 -0
  64. package/dist/compiler/directSourceCapsule.d.ts +97 -0
  65. package/dist/compiler/directSourceCapsule.d.ts.map +1 -0
  66. package/dist/compiler/directSourceCapsule.js +305 -0
  67. package/dist/compiler/directStructure.d.ts +51 -0
  68. package/dist/compiler/directStructure.d.ts.map +1 -0
  69. package/dist/compiler/directStructure.js +252 -0
  70. package/dist/compiler/directStructurePlan.d.ts +16 -0
  71. package/dist/compiler/directStructurePlan.d.ts.map +1 -0
  72. package/dist/compiler/directStructurePlan.js +58 -0
  73. package/dist/compiler/directValues.d.ts +69 -0
  74. package/dist/compiler/directValues.d.ts.map +1 -0
  75. package/dist/compiler/directValues.js +282 -0
  76. package/dist/compiler/finiteRe01Verification.d.ts +140 -0
  77. package/dist/compiler/finiteRe01Verification.d.ts.map +1 -0
  78. package/dist/compiler/finiteRe01Verification.js +830 -0
  79. package/dist/compiler/graphTraversal.d.ts +11 -0
  80. package/dist/compiler/graphTraversal.d.ts.map +1 -0
  81. package/dist/compiler/graphTraversal.js +37 -0
  82. package/dist/compiler/hypotheticalScopedIdentity.d.ts +23 -0
  83. package/dist/compiler/hypotheticalScopedIdentity.d.ts.map +1 -0
  84. package/dist/compiler/hypotheticalScopedIdentity.js +81 -0
  85. package/dist/compiler/occurrenceAnalysis.d.ts +65 -0
  86. package/dist/compiler/occurrenceAnalysis.d.ts.map +1 -0
  87. package/dist/compiler/occurrenceAnalysis.js +300 -0
  88. package/dist/compiler/originalSourceMembership.d.ts +6 -0
  89. package/dist/compiler/originalSourceMembership.d.ts.map +1 -0
  90. package/dist/compiler/originalSourceMembership.js +31 -0
  91. package/dist/compiler/particleAttribution.d.ts +17 -0
  92. package/dist/compiler/particleAttribution.d.ts.map +1 -0
  93. package/dist/compiler/particleAttribution.js +474 -0
  94. package/dist/compiler/particleDeclarationConsistency.d.ts +24 -0
  95. package/dist/compiler/particleDeclarationConsistency.d.ts.map +1 -0
  96. package/dist/compiler/particleDeclarationConsistency.js +197 -0
  97. package/dist/compiler/particleExtension.d.ts +22 -0
  98. package/dist/compiler/particleExtension.d.ts.map +1 -0
  99. package/dist/compiler/particleExtension.js +119 -0
  100. package/dist/compiler/particleLocalAssessment.d.ts +20 -0
  101. package/dist/compiler/particleLocalAssessment.d.ts.map +1 -0
  102. package/dist/compiler/particleLocalAssessment.js +92 -0
  103. package/dist/compiler/particleRestriction.d.ts +24 -0
  104. package/dist/compiler/particleRestriction.d.ts.map +1 -0
  105. package/dist/compiler/particleRestriction.js +489 -0
  106. package/dist/compiler/particleSemanticView.d.ts +50 -0
  107. package/dist/compiler/particleSemanticView.d.ts.map +1 -0
  108. package/dist/compiler/particleSemanticView.js +297 -0
  109. package/dist/compiler/particleWildcardRelation.d.ts +88 -0
  110. package/dist/compiler/particleWildcardRelation.d.ts.map +1 -0
  111. package/dist/compiler/particleWildcardRelation.js +143 -0
  112. package/dist/compiler/re01CandidateCorrespondence.d.ts +64 -0
  113. package/dist/compiler/re01CandidateCorrespondence.d.ts.map +1 -0
  114. package/dist/compiler/re01CandidateCorrespondence.js +572 -0
  115. package/dist/compiler/re01TypeProperties.d.ts +71 -0
  116. package/dist/compiler/re01TypeProperties.d.ts.map +1 -0
  117. package/dist/compiler/re01TypeProperties.js +120 -0
  118. package/dist/compiler/re01TypePropertyValidation.d.ts +23 -0
  119. package/dist/compiler/re01TypePropertyValidation.d.ts.map +1 -0
  120. package/dist/compiler/re01TypePropertyValidation.js +161 -0
  121. package/dist/compiler/resolveCanonicalGraph.d.ts +38 -0
  122. package/dist/compiler/resolveCanonicalGraph.d.ts.map +1 -0
  123. package/dist/compiler/resolveCanonicalGraph.js +170 -0
  124. package/dist/compiler/scalarSchemaAssessment.d.ts +425 -0
  125. package/dist/compiler/scalarSchemaAssessment.d.ts.map +1 -0
  126. package/dist/compiler/scalarSchemaAssessment.js +5198 -0
  127. package/dist/compiler/schemaAttributeGroupProperties.d.ts +17 -0
  128. package/dist/compiler/schemaAttributeGroupProperties.d.ts.map +1 -0
  129. package/dist/compiler/schemaAttributeGroupProperties.js +53 -0
  130. package/dist/compiler/schemaAttributeProperties.d.ts +10 -0
  131. package/dist/compiler/schemaAttributeProperties.d.ts.map +1 -0
  132. package/dist/compiler/schemaAttributeProperties.js +11 -0
  133. package/dist/compiler/schemaAttributeUses.d.ts +90 -0
  134. package/dist/compiler/schemaAttributeUses.d.ts.map +1 -0
  135. package/dist/compiler/schemaAttributeUses.js +725 -0
  136. package/dist/compiler/schemaBinaryWordReconstruction.d.ts +10 -0
  137. package/dist/compiler/schemaBinaryWordReconstruction.d.ts.map +1 -0
  138. package/dist/compiler/schemaBinaryWordReconstruction.js +33 -0
  139. package/dist/compiler/schemaBuiltinFacets.d.ts +14 -0
  140. package/dist/compiler/schemaBuiltinFacets.d.ts.map +1 -0
  141. package/dist/compiler/schemaBuiltinFacets.js +51 -0
  142. package/dist/compiler/schemaCalendarImages.d.ts +8 -0
  143. package/dist/compiler/schemaCalendarImages.d.ts.map +1 -0
  144. package/dist/compiler/schemaCalendarImages.js +204 -0
  145. package/dist/compiler/schemaCalendarLanguage.d.ts +11 -0
  146. package/dist/compiler/schemaCalendarLanguage.d.ts.map +1 -0
  147. package/dist/compiler/schemaCalendarLanguage.js +227 -0
  148. package/dist/compiler/schemaComponentEquality.d.ts +28 -0
  149. package/dist/compiler/schemaComponentEquality.d.ts.map +1 -0
  150. package/dist/compiler/schemaComponentEquality.js +446 -0
  151. package/dist/compiler/schemaConstructionAssessment.d.ts +46 -0
  152. package/dist/compiler/schemaConstructionAssessment.d.ts.map +1 -0
  153. package/dist/compiler/schemaConstructionAssessment.js +663 -0
  154. package/dist/compiler/schemaDatatypeValues.d.ts +4 -0
  155. package/dist/compiler/schemaDatatypeValues.d.ts.map +1 -0
  156. package/dist/compiler/schemaDatatypeValues.js +2 -0
  157. package/dist/compiler/schemaDecimalLanguage.d.ts +7 -0
  158. package/dist/compiler/schemaDecimalLanguage.d.ts.map +1 -0
  159. package/dist/compiler/schemaDecimalLanguage.js +102 -0
  160. package/dist/compiler/schemaDeclarationPrimitives.d.ts +34 -0
  161. package/dist/compiler/schemaDeclarationPrimitives.d.ts.map +1 -0
  162. package/dist/compiler/schemaDeclarationPrimitives.js +194 -0
  163. package/dist/compiler/schemaDocumentSyntax.d.ts +55 -0
  164. package/dist/compiler/schemaDocumentSyntax.d.ts.map +1 -0
  165. package/dist/compiler/schemaDocumentSyntax.js +294 -0
  166. package/dist/compiler/schemaDurationLanguage.d.ts +11 -0
  167. package/dist/compiler/schemaDurationLanguage.d.ts.map +1 -0
  168. package/dist/compiler/schemaDurationLanguage.js +170 -0
  169. package/dist/compiler/schemaElementProperties.d.ts +16 -0
  170. package/dist/compiler/schemaElementProperties.d.ts.map +1 -0
  171. package/dist/compiler/schemaElementProperties.js +23 -0
  172. package/dist/compiler/schemaEndpointWordCapacity.d.ts +36 -0
  173. package/dist/compiler/schemaEndpointWordCapacity.d.ts.map +1 -0
  174. package/dist/compiler/schemaEndpointWordCapacity.js +39 -0
  175. package/dist/compiler/schemaExactCalendar.d.ts +73 -0
  176. package/dist/compiler/schemaExactCalendar.d.ts.map +1 -0
  177. package/dist/compiler/schemaExactCalendar.js +264 -0
  178. package/dist/compiler/schemaFacetAnnotation.d.ts +32 -0
  179. package/dist/compiler/schemaFacetAnnotation.d.ts.map +1 -0
  180. package/dist/compiler/schemaFacetAnnotation.js +199 -0
  181. package/dist/compiler/schemaGeneratedScalarShape.d.ts +35 -0
  182. package/dist/compiler/schemaGeneratedScalarShape.d.ts.map +1 -0
  183. package/dist/compiler/schemaGeneratedScalarShape.js +176 -0
  184. package/dist/compiler/schemaIdentityConstraints.d.ts +73 -0
  185. package/dist/compiler/schemaIdentityConstraints.d.ts.map +1 -0
  186. package/dist/compiler/schemaIdentityConstraints.js +362 -0
  187. package/dist/compiler/schemaIeeeLanguage.d.ts +43 -0
  188. package/dist/compiler/schemaIeeeLanguage.d.ts.map +1 -0
  189. package/dist/compiler/schemaIeeeLanguage.js +759 -0
  190. package/dist/compiler/schemaIntegerImages.d.ts +11 -0
  191. package/dist/compiler/schemaIntegerImages.d.ts.map +1 -0
  192. package/dist/compiler/schemaIntegerImages.js +113 -0
  193. package/dist/compiler/schemaLexicalPredicates.d.ts +29 -0
  194. package/dist/compiler/schemaLexicalPredicates.d.ts.map +1 -0
  195. package/dist/compiler/schemaLexicalPredicates.js +63 -0
  196. package/dist/compiler/schemaNotationProperties.d.ts +32 -0
  197. package/dist/compiler/schemaNotationProperties.d.ts.map +1 -0
  198. package/dist/compiler/schemaNotationProperties.js +84 -0
  199. package/dist/compiler/schemaNumericImageConditions.d.ts +24 -0
  200. package/dist/compiler/schemaNumericImageConditions.d.ts.map +1 -0
  201. package/dist/compiler/schemaNumericImageConditions.js +66 -0
  202. package/dist/compiler/schemaParticleWildcardProperties.d.ts +20 -0
  203. package/dist/compiler/schemaParticleWildcardProperties.d.ts.map +1 -0
  204. package/dist/compiler/schemaParticleWildcardProperties.js +43 -0
  205. package/dist/compiler/schemaPattern.d.ts +1062 -0
  206. package/dist/compiler/schemaPattern.d.ts.map +1 -0
  207. package/dist/compiler/schemaPattern.js +581 -0
  208. package/dist/compiler/schemaRegularLanguage.d.ts +67 -0
  209. package/dist/compiler/schemaRegularLanguage.d.ts.map +1 -0
  210. package/dist/compiler/schemaRegularLanguage.js +1166 -0
  211. package/dist/compiler/schemaScalarContext.d.ts +81 -0
  212. package/dist/compiler/schemaScalarContext.d.ts.map +1 -0
  213. package/dist/compiler/schemaScalarContext.js +78 -0
  214. package/dist/compiler/schemaScalarKernel.d.ts +182 -0
  215. package/dist/compiler/schemaScalarKernel.d.ts.map +1 -0
  216. package/dist/compiler/schemaScalarKernel.js +391 -0
  217. package/dist/compiler/schemaScalarWitnesses.d.ts +6 -0
  218. package/dist/compiler/schemaScalarWitnesses.d.ts.map +1 -0
  219. package/dist/compiler/schemaScalarWitnesses.js +118 -0
  220. package/dist/compiler/schemaSimpleTypeProperties.d.ts +95 -0
  221. package/dist/compiler/schemaSimpleTypeProperties.d.ts.map +1 -0
  222. package/dist/compiler/schemaSimpleTypeProperties.js +103 -0
  223. package/dist/compiler/schemaSourceGrammar.d.ts +27 -0
  224. package/dist/compiler/schemaSourceGrammar.d.ts.map +1 -0
  225. package/dist/compiler/schemaSourceGrammar.js +290 -0
  226. package/dist/compiler/schemaSourceLexical.d.ts +4 -0
  227. package/dist/compiler/schemaSourceLexical.d.ts.map +1 -0
  228. package/dist/compiler/schemaSourceLexical.js +12 -0
  229. package/dist/compiler/schemaSourceValues.d.ts +51 -0
  230. package/dist/compiler/schemaSourceValues.d.ts.map +1 -0
  231. package/dist/compiler/schemaSourceValues.js +225 -0
  232. package/dist/compiler/schemaSourceWildcards.d.ts +28 -0
  233. package/dist/compiler/schemaSourceWildcards.d.ts.map +1 -0
  234. package/dist/compiler/schemaSourceWildcards.js +247 -0
  235. package/dist/compiler/schemaSymbolicSequences.d.ts +16 -0
  236. package/dist/compiler/schemaSymbolicSequences.d.ts.map +1 -0
  237. package/dist/compiler/schemaSymbolicSequences.js +99 -0
  238. package/dist/compiler/schemaSymbolicValueSets.d.ts +32 -0
  239. package/dist/compiler/schemaSymbolicValueSets.d.ts.map +1 -0
  240. package/dist/compiler/schemaSymbolicValueSets.js +149 -0
  241. package/dist/compiler/schemaSyntaxAssessment.d.ts +25 -0
  242. package/dist/compiler/schemaSyntaxAssessment.d.ts.map +1 -0
  243. package/dist/compiler/schemaSyntaxAssessment.js +361 -0
  244. package/dist/compiler/schemaTemporalAliases.d.ts +6 -0
  245. package/dist/compiler/schemaTemporalAliases.d.ts.map +1 -0
  246. package/dist/compiler/schemaTemporalAliases.js +195 -0
  247. package/dist/compiler/schemaTokenImages.d.ts +9 -0
  248. package/dist/compiler/schemaTokenImages.d.ts.map +1 -0
  249. package/dist/compiler/schemaTokenImages.js +142 -0
  250. package/dist/compiler/schemaTypeIdentity.d.ts +39 -0
  251. package/dist/compiler/schemaTypeIdentity.d.ts.map +1 -0
  252. package/dist/compiler/schemaTypeIdentity.js +78 -0
  253. package/dist/compiler/schemaTypeRelations.d.ts +38 -0
  254. package/dist/compiler/schemaTypeRelations.d.ts.map +1 -0
  255. package/dist/compiler/schemaTypeRelations.js +576 -0
  256. package/dist/compiler/schemaUri.d.ts +13 -0
  257. package/dist/compiler/schemaUri.d.ts.map +1 -0
  258. package/dist/compiler/schemaUri.js +103 -0
  259. package/dist/compiler/schemaValueContext.d.ts +26 -0
  260. package/dist/compiler/schemaValueContext.d.ts.map +1 -0
  261. package/dist/compiler/schemaValueContext.js +1 -0
  262. package/dist/compiler/schemaValueImages.d.ts +10 -0
  263. package/dist/compiler/schemaValueImages.d.ts.map +1 -0
  264. package/dist/compiler/schemaValueImages.js +142 -0
  265. package/dist/compiler/schemaValueSequences.d.ts +15 -0
  266. package/dist/compiler/schemaValueSequences.d.ts.map +1 -0
  267. package/dist/compiler/schemaValueSequences.js +19 -0
  268. package/dist/compiler/semanticBudget.d.ts +50 -0
  269. package/dist/compiler/semanticBudget.d.ts.map +1 -0
  270. package/dist/compiler/semanticBudget.js +178 -0
  271. package/dist/compiler/semanticCatalog.d.ts +122 -0
  272. package/dist/compiler/semanticCatalog.d.ts.map +1 -0
  273. package/dist/compiler/semanticCatalog.js +160 -0
  274. package/dist/compiler/semanticContext.d.ts +172 -0
  275. package/dist/compiler/semanticContext.d.ts.map +1 -0
  276. package/dist/compiler/semanticContext.js +1168 -0
  277. package/dist/compiler/semanticTypeDependencies.d.ts +8 -0
  278. package/dist/compiler/semanticTypeDependencies.d.ts.map +1 -0
  279. package/dist/compiler/semanticTypeDependencies.js +64 -0
  280. package/dist/compiler/semanticTypeReference.d.ts +24 -0
  281. package/dist/compiler/semanticTypeReference.d.ts.map +1 -0
  282. package/dist/compiler/semanticTypeReference.js +36 -0
  283. package/dist/compiler/shapeResolver.d.ts +1 -0
  284. package/dist/compiler/shapeResolver.d.ts.map +1 -1
  285. package/dist/compiler/shapeResolver.js +7 -9
  286. package/dist/compiler/sourceSchemaBinding.d.ts +26 -0
  287. package/dist/compiler/sourceSchemaBinding.d.ts.map +1 -0
  288. package/dist/compiler/sourceSchemaBinding.js +39 -0
  289. package/dist/compiler/structuralCompanions.d.ts +16 -0
  290. package/dist/compiler/structuralCompanions.d.ts.map +1 -0
  291. package/dist/compiler/structuralCompanions.js +232 -0
  292. package/dist/compiler/validateSemanticGraph.d.ts +5 -0
  293. package/dist/compiler/validateSemanticGraph.d.ts.map +1 -0
  294. package/dist/compiler/validateSemanticGraph.js +376 -0
  295. package/dist/compiler/wildcardAlgebra.d.ts +26 -0
  296. package/dist/compiler/wildcardAlgebra.d.ts.map +1 -0
  297. package/dist/compiler/wildcardAlgebra.js +155 -0
  298. package/dist/gateway/generateGateway.d.ts.map +1 -1
  299. package/dist/gateway/generateGateway.js +2 -2
  300. package/dist/index.d.ts +3 -0
  301. package/dist/index.d.ts.map +1 -1
  302. package/dist/index.js +2 -0
  303. package/dist/loader/orderedSyntax.d.ts +77 -0
  304. package/dist/loader/orderedSyntax.d.ts.map +1 -0
  305. package/dist/loader/orderedSyntax.js +202 -0
  306. package/dist/loader/resolutionDepth.d.ts +7 -0
  307. package/dist/loader/resolutionDepth.d.ts.map +1 -0
  308. package/dist/loader/resolutionDepth.js +65 -0
  309. package/dist/loader/schemaInput.d.ts +53 -0
  310. package/dist/loader/schemaInput.d.ts.map +1 -0
  311. package/dist/loader/schemaInput.js +212 -0
  312. package/dist/loader/schemaResources.d.ts +59 -0
  313. package/dist/loader/schemaResources.d.ts.map +1 -0
  314. package/dist/loader/schemaResources.js +292 -0
  315. package/dist/openapi/generateOpenAPI.d.ts.map +1 -1
  316. package/dist/openapi/generateOpenAPI.js +2 -2
  317. package/dist/test/generateTests.d.ts.map +1 -1
  318. package/dist/test/generateTests.js +2 -2
  319. package/dist/util/xmlWhitespace.d.ts +3 -0
  320. package/dist/util/xmlWhitespace.d.ts.map +1 -0
  321. package/dist/util/xmlWhitespace.js +4 -0
  322. package/docs/README.md +14 -1
  323. package/docs/architecture.md +9 -0
  324. package/docs/cli-reference.md +21 -1
  325. package/docs/content-model-analysis.md +92 -0
  326. package/docs/content-model-baseline.md +121 -0
  327. package/docs/content-model-catalog.md +116 -0
  328. package/docs/content-model-companions.md +90 -0
  329. package/docs/content-model-composition.md +103 -0
  330. package/docs/content-model-decisions.md +79 -0
  331. package/docs/content-model-gateway-feasibility.md +169 -0
  332. package/docs/content-model-graph.md +121 -0
  333. package/docs/content-model-loading.md +163 -0
  334. package/docs/content-model-matching.md +85 -0
  335. package/docs/content-model-readiness.md +144 -0
  336. package/docs/content-model-resolution.md +81 -0
  337. package/docs/content-model-s02-handoff.md +98 -0
  338. package/docs/content-model-s06-au-01.md +425 -0
  339. package/docs/content-model-s06-dt-01.md +386 -0
  340. package/docs/content-model-s06-pw-01.md +350 -0
  341. package/docs/content-model-s06-re-01-resolver-implementation.md +869 -0
  342. package/docs/content-model-s06-re-01-resolver.md +513 -0
  343. package/docs/content-model-s06-re-01-scalar-witnesses.md +1423 -0
  344. package/docs/content-model-s06-re-01-support-reconstruction.md +6337 -0
  345. package/docs/content-model-s06-re-01.md +7477 -0
  346. package/docs/content-model-s06-research-handoff.md +909 -0
  347. package/docs/content-model-shipped-fix.md +83 -0
  348. package/docs/content-model-soap-feasibility.md +165 -0
  349. package/docs/decisions/002-streamable-responses.md +2 -0
  350. package/docs/decisions/003-content-model-contracts.md +280 -0
  351. package/docs/direct-values.md +311 -0
  352. package/docs/generated-code.md +4 -0
  353. package/docs/reference-validation.md +243 -0
  354. package/docs/releases/v1.1.4.md +36 -0
  355. package/docs/releases/v1.1.5.md +38 -0
  356. package/docs/roadmap/README.md +2 -2
  357. package/docs/supported-patterns.md +13 -5
  358. package/package.json +27 -13
  359. package/src/generation/preambles/direct-client/typescript.preamble +3 -0
  360. package/src/runtime/clientStreamMethods.tpl.txt +1 -1
@@ -0,0 +1,759 @@
1
+ import { schemaRegularLanguages } from './schemaRegularLanguage.js';
2
+ import { schemaDecimalLanguages } from './schemaDecimalLanguage.js';
3
+ export function schemaIeeeLanguages(c, regular, expression) {
4
+ const decimals = schemaDecimalLanguages(c);
5
+ const charge = (owner, digits) => c.step(owner, (digits + 4) ** 2);
6
+ const normalize = (value, owner) => {
7
+ c.step(owner);
8
+ if (value.coefficient === 0n)
9
+ return { coefficient: 0n, scale: 0, digits: 1 };
10
+ c.step(owner, (value.digits ?? value.scale + 330) + 4);
11
+ const text = value.coefficient.toString();
12
+ let zeros = 0;
13
+ while (zeros < value.scale) {
14
+ c.step(owner, 3);
15
+ if (text[text.length - zeros - 1] !== '0')
16
+ break;
17
+ zeros++;
18
+ }
19
+ if (!zeros)
20
+ return { ...value, digits: text.length };
21
+ charge(owner, text.length + zeros);
22
+ c.step(owner, 4);
23
+ return { coefficient: value.coefficient / 10n ** BigInt(zeros), scale: value.scale - zeros, digits: text.length - zeros };
24
+ };
25
+ const key = (value, owner) => {
26
+ charge(owner, value.digits ?? value.scale + 330);
27
+ c.step(owner, value.scale + (value.digits ?? 330) + 2);
28
+ const digits = value.coefficient.toString().padStart(value.scale + 1, '0');
29
+ return value.scale ? digits.slice(0, -value.scale) + '.' + digits.slice(-value.scale) : digits;
30
+ };
31
+ const add = (a, b, owner) => {
32
+ const scale = Math.max(a.scale, b.scale), digits = Math.max((a.digits ?? 330) + scale - a.scale, (b.digits ?? 330) + scale - b.scale) + 1;
33
+ charge(owner, digits);
34
+ return normalize({ coefficient: a.coefficient * 10n ** BigInt(scale - a.scale) + b.coefficient * 10n ** BigInt(scale - b.scale), scale, digits }, owner);
35
+ };
36
+ const half = (a, owner) => {
37
+ charge(owner, a.digits ?? a.scale + 330);
38
+ return normalize(a.coefficient % 2n === 0n
39
+ ? { coefficient: a.coefficient / 2n, scale: a.scale, digits: a.digits } : { coefficient: a.coefficient * 5n, scale: a.scale + 1, digits: (a.digits ?? 330) + 1 }, owner);
40
+ };
41
+ const binary = (significand, exponent, owner) => {
42
+ const digits = exponent >= 0 ? Math.floor((exponent + 53) / 3) + 1 : -exponent + 18;
43
+ charge(owner, digits);
44
+ return normalize(exponent >= 0 ? { coefficient: significand << BigInt(exponent), scale: 0, digits }
45
+ : { coefficient: significand * 5n ** BigInt(-exponent), scale: -exponent, digits }, owner);
46
+ };
47
+ const ieeeValue = (bits, single, owner) => {
48
+ c.step(owner, 16);
49
+ const precision = single ? 24 : 53, bias = single ? 127 : 1023;
50
+ const mask = (1n << BigInt(precision - 1)) - 1n, fraction = bits & mask, exponent = Number(bits >> BigInt(precision - 1));
51
+ return binary(fraction + (exponent ? 1n << BigInt(precision - 1) : 0n), (exponent ? exponent - bias : 1 - bias) - (precision - 1), owner);
52
+ };
53
+ const inverseCache = new Map();
54
+ const copyIntervals = (input, owner) => {
55
+ c.step(owner, input.length * 16 + 2);
56
+ return input.map(interval => ({ ...interval,
57
+ ...(interval.lower ? { lower: { ...interval.lower, value: { ...interval.lower.value } } } : {}),
58
+ ...(interval.upper ? { upper: { ...interval.upper, value: { ...interval.upper.value } } } : {}) }));
59
+ };
60
+ const inverseIntervals = (target, owner) => {
61
+ c.text(target.family, owner);
62
+ c.text(target.canonical, owner);
63
+ c.step(owner, target.family.length + target.canonical.length + 4);
64
+ const key = target.family + ':' + target.canonical, cached = inverseCache.get(key);
65
+ if (cached)
66
+ return copyIntervals(cached, owner);
67
+ const result = computeInverseIntervals(target, owner);
68
+ // Cache only a completed inverse, and keep its endpoints private. A caller
69
+ // can never mutate a later inverse result or avoid a sticky budget failure.
70
+ const retained = copyIntervals(result, owner);
71
+ c.step(owner, 2);
72
+ inverseCache.set(key, retained);
73
+ return result;
74
+ };
75
+ const computeInverseIntervals = (target, owner) => {
76
+ const single = target.family === 'float', p = single ? 24 : 53, minimum = single ? -126 : -1022, maximum = single ? 127 : 1023;
77
+ if (target.canonical === 'NaN')
78
+ return [];
79
+ if (target.canonical === '0') {
80
+ const threshold = binary(1n, minimum - p, owner);
81
+ c.step(owner, 6);
82
+ return [{ negative: false, upper: { value: threshold, inclusive: true } }, { negative: true, upper: { value: threshold, inclusive: true } }];
83
+ }
84
+ const infinity = target.canonical === 'Infinity' || target.canonical === '-Infinity', negative = target.canonical.startsWith('-');
85
+ // Overflow tie goes to the even carried significand (infinity).
86
+ const overflow = binary((1n << BigInt(p + 1)) - 1n, maximum - p, owner);
87
+ if (infinity) {
88
+ c.step(owner, 4);
89
+ return [{ negative, lower: { value: overflow, inclusive: true } }];
90
+ }
91
+ c.step(owner, 24 + target.canonical.length);
92
+ const bytes = new ArrayBuffer(8), view = new DataView(bytes), number = Math.abs(Number(target.canonical));
93
+ let bits;
94
+ if (single) {
95
+ view.setFloat32(0, number);
96
+ bits = BigInt(view.getUint32(0));
97
+ }
98
+ else {
99
+ view.setFloat64(0, number);
100
+ bits = view.getBigUint64(0);
101
+ }
102
+ const actual = ieeeValue(bits, single, owner), prior = ieeeValue(bits - 1n, single, owner);
103
+ const last = single ? 0x7f7fffffn : 0x7fefffffffffffffn;
104
+ const next = bits === last ? undefined : ieeeValue(bits + 1n, single, owner), even = bits % 2n === 0n;
105
+ c.step(owner, 6);
106
+ return [{ negative, lower: { value: half(add(prior, actual, owner), owner), inclusive: even },
107
+ upper: { value: next ? half(add(actual, next, owner), owner) : overflow, inclusive: even } }];
108
+ };
109
+ const order = (value, owner) => {
110
+ charge(owner, value.digits ?? value.scale + 330);
111
+ return value.coefficient.toString().length - value.scale - 1;
112
+ };
113
+ const scaled = (value, exponent, owner) => {
114
+ const scale = value.scale + exponent, digits = (value.digits ?? 330) + Math.max(0, -scale);
115
+ charge(owner, digits);
116
+ return normalize(scale >= 0 ? { coefficient: value.coefficient, scale, digits }
117
+ : { coefficient: value.coefficient * 10n ** BigInt(-scale), scale: 0, digits }, owner);
118
+ };
119
+ const move = (program, state, cp, owner) => {
120
+ for (const edge of program.states[state].transitions) {
121
+ c.step(owner);
122
+ if (cp >= edge.lo && cp <= edge.hi)
123
+ return edge.to;
124
+ }
125
+ return undefined;
126
+ };
127
+ const suffix = (program, start, owner) => {
128
+ c.step(owner, 2);
129
+ return regular.fromAutomaton({ states: program.states, start }, owner);
130
+ };
131
+ const integerInverse = (value, owner) => {
132
+ c.step(owner, 32);
133
+ const negative = value < 0n, digits = (negative ? -value : value).toString();
134
+ c.text(digits, owner);
135
+ c.step(owner, digits.length + 24);
136
+ return expression(value === 0n ? '[+\\-]?0+' : (negative ? '\\-' : '[+]?') + '0*' + digits, owner);
137
+ };
138
+ const modulo = (period, residue, owner) => {
139
+ // Two signed remainder copies and a nonaccepting initial state.
140
+ c.step(owner, period * 64 + 16);
141
+ const states = [];
142
+ const positive = 1, negative = period + 1, signPositive = period * 2 + 1, signNegative = signPositive + 1;
143
+ for (let index = 0; index <= signNegative; index++)
144
+ states.push({ accepting: false, transitions: [] });
145
+ states[0].transitions.push({ to: signPositive, lo: 43, hi: 43 }, { to: signNegative, lo: 45, hi: 45 });
146
+ for (const [start, offset] of [[0, positive], [signPositive, positive], [signNegative, negative]])
147
+ for (let digit = 0; digit < 10; digit++) {
148
+ c.step(owner, 4);
149
+ states[start].transitions.push({ to: offset + digit % period, lo: 48 + digit, hi: 48 + digit });
150
+ }
151
+ for (let remainder = 0; remainder < period; remainder++)
152
+ for (const offset of [positive, negative]) {
153
+ c.step(owner, 2);
154
+ states[offset + remainder].accepting = remainder === (offset === positive ? residue : (period - residue) % period);
155
+ for (let digit = 0; digit < 10; digit++) {
156
+ c.step(owner, 4);
157
+ states[offset + remainder].transitions.push({ to: offset + (remainder * 10 + digit) % period, lo: 48 + digit, hi: 48 + digit });
158
+ }
159
+ }
160
+ return regular.fromAutomaton({ states, start: 0 }, owner);
161
+ };
162
+ const search = (language, interval, exponentOrder, relation, owner) => {
163
+ const input = regular.automaton(language, owner);
164
+ c.step(owner, input.states.length * 3 + 4);
165
+ const incoming = input.states.map(() => []), productive = new Set(), pending = [];
166
+ for (let from = 0; from < input.states.length; from++) {
167
+ c.step(owner);
168
+ if (input.states[from].accepting) {
169
+ c.step(owner, 2);
170
+ productive.add(from);
171
+ pending.push(from);
172
+ }
173
+ for (const edge of input.states[from].transitions) {
174
+ c.step(owner);
175
+ incoming[edge.to].push(from);
176
+ }
177
+ }
178
+ while (pending.length)
179
+ for (const previous of incoming[pending.pop()]) {
180
+ c.step(owner);
181
+ if (!productive.has(previous)) {
182
+ c.step(owner, 2);
183
+ productive.add(previous);
184
+ pending.push(previous);
185
+ }
186
+ }
187
+ if (!productive.has(input.start))
188
+ return undefined;
189
+ c.step(owner, input.states.length * 3 + 2);
190
+ const program = { start: input.start, states: input.states.map(state => {
191
+ c.step(owner, state.transitions.length + 2);
192
+ return { ...state, transitions: state.transitions.filter(edge => productive.has(edge.to)) };
193
+ }) };
194
+ const lower = relation === 'equal' && interval.lower ? scaled(interval.lower.value, exponentOrder, owner) : undefined;
195
+ const upper = relation === 'equal' && interval.upper ? scaled(interval.upper.value, exponentOrder, owner) : undefined;
196
+ const threshold = (value) => value ? key(value, owner).replace('.', '') : undefined;
197
+ const low = threshold(lower), high = threshold(upper);
198
+ // Bounds outside [1,10) either disappear or reject this whole order.
199
+ const lowerText = lower ? key(lower, owner) : undefined, upperText = upper ? key(upper, owner) : undefined;
200
+ if (lowerText && (lowerText.startsWith('0.') || lowerText === '0'))
201
+ return search(language, { ...interval, lower: undefined }, exponentOrder, relation, owner);
202
+ if (lowerText && Number(lowerText.split('.')[0]) >= 10)
203
+ return undefined;
204
+ if (upperText && Number(upperText.split('.')[0]) >= 10)
205
+ return search(language, { ...interval, upper: undefined }, exponentOrder, relation, owner);
206
+ if (upperText && (upperText.startsWith('0.') || upperText === '0'))
207
+ return undefined;
208
+ const compareDigit = (state, digits, digit) => {
209
+ if (digits === undefined || state < 0)
210
+ return state;
211
+ c.step(owner);
212
+ const expected = state < digits.length ? Number(digits[state]) : 0;
213
+ return digit < expected ? -1 : digit > expected ? -2 : Math.min(state + 1, digits.length);
214
+ };
215
+ const compareEnd = (state, digits) => {
216
+ if (digits === undefined)
217
+ return 0;
218
+ if (state === -1)
219
+ return -1;
220
+ if (state === -2)
221
+ return 1;
222
+ c.step(owner, digits.length - state + 1);
223
+ return /[1-9]/.test(digits.slice(state)) ? -1 : 0;
224
+ };
225
+ for (const fractional of [false, true]) {
226
+ c.step(owner, 6);
227
+ const states = [], edges = [[]], ids = new Map(), finals = [];
228
+ const publish = (state) => {
229
+ c.step(owner, 32);
230
+ const key = JSON.stringify(state), prior = ids.get(key);
231
+ if (prior !== undefined)
232
+ return prior;
233
+ c.step(owner, key.length + 10);
234
+ const id = states.length + 1;
235
+ ids.set(key, id);
236
+ states.push(state);
237
+ edges.push([]);
238
+ return id;
239
+ };
240
+ const first = (source, char) => { const id = publish({ source, dotted: false, nonzero: false, lo: 0, hi: 0 }); c.step(owner, 5); edges[0].push({ to: id, weight: 0, char }); };
241
+ if (!interval.negative) {
242
+ first(program.start, '');
243
+ const plus = move(program, program.start, 43, owner);
244
+ if (plus !== undefined)
245
+ first(plus, '+');
246
+ }
247
+ else {
248
+ const minus = move(program, program.start, 45, owner);
249
+ if (minus !== undefined)
250
+ first(minus, '-');
251
+ }
252
+ for (let cursor = 0; cursor < states.length; cursor++) {
253
+ c.step(owner, 4);
254
+ const state = states[cursor], node = cursor + 1;
255
+ const lowOrder = compareEnd(state.lo, low), highOrder = compareEnd(state.hi, high);
256
+ const accepted = state.nonzero && (!low || lowOrder > 0 || lowOrder === 0 && interval.lower.inclusive)
257
+ && (!high || highOrder < 0 || highOrder === 0 && interval.upper.inclusive);
258
+ if (accepted) {
259
+ if (program.states[state.source].accepting) {
260
+ c.step(owner, 4);
261
+ finals.push({ node, marker: '' });
262
+ }
263
+ for (const marker of ['e', 'E']) {
264
+ const next = move(program, state.source, marker.charCodeAt(0), owner);
265
+ if (next !== undefined) {
266
+ c.step(owner, 4);
267
+ finals.push({ node, marker, exponent: suffix(program, next, owner) });
268
+ }
269
+ }
270
+ }
271
+ if (!state.dotted) {
272
+ const dot = move(program, state.source, 46, owner);
273
+ if (dot !== undefined) {
274
+ const next = publish({ ...state, source: dot, dotted: true });
275
+ c.step(owner, 5);
276
+ edges[node].push({ to: next, weight: 0, char: '.' });
277
+ }
278
+ }
279
+ for (let digit = 0; digit < 10; digit++) {
280
+ const nextSource = move(program, state.source, 48 + digit, owner);
281
+ if (nextSource === undefined)
282
+ continue;
283
+ if (!state.nonzero && digit !== 0 && state.dotted !== fractional)
284
+ continue;
285
+ const nonzero = state.nonzero || digit !== 0;
286
+ const next = publish({ ...state, source: nextSource, nonzero,
287
+ lo: nonzero ? compareDigit(state.lo, low, digit) : state.lo,
288
+ hi: nonzero ? compareDigit(state.hi, high, digit) : state.hi });
289
+ const weight = fractional ? state.dotted && !state.nonzero ? 1 : 0 : state.nonzero && !state.dotted ? 1 : 0;
290
+ c.step(owner, 5);
291
+ edges[node].push({ to: next, weight, char: String(digit) });
292
+ }
293
+ }
294
+ if (!finals.length)
295
+ continue;
296
+ const closure = (input) => {
297
+ c.step(owner, input.length * 2 + 4);
298
+ const seen = new Set(input), pending = [...input];
299
+ while (pending.length)
300
+ for (const edge of edges[pending.pop()]) {
301
+ c.step(owner, 2);
302
+ if (!edge.weight && !seen.has(edge.to)) {
303
+ c.step(owner, 2);
304
+ seen.add(edge.to);
305
+ pending.push(edge.to);
306
+ }
307
+ }
308
+ c.step(owner, seen.size ** 2 + seen.size + 1);
309
+ return [...seen].sort((a, b) => a - b);
310
+ };
311
+ const path = (count, target) => {
312
+ c.step(owner, Number(count > BigInt(Math.floor(Number.MAX_SAFE_INTEGER / 16)) ? BigInt(Number.MAX_SAFE_INTEGER) : count * 16n));
313
+ const wanted = Number(count);
314
+ c.step(owner, 8);
315
+ const queue = [{ node: 0, count: 0, char: '' }], seen = new Set(['0:0']);
316
+ for (let cursor = 0; cursor < queue.length; cursor++) {
317
+ c.step(owner);
318
+ const step = queue[cursor];
319
+ if (step.node === target && step.count === wanted) {
320
+ c.step(owner, 2);
321
+ const chars = [];
322
+ let index = cursor;
323
+ while (index !== undefined) {
324
+ c.step(owner, 2);
325
+ const item = queue[index];
326
+ chars.push(item.char);
327
+ index = item.prior;
328
+ }
329
+ c.step(owner, chars.length * 2 + 1);
330
+ return chars.reverse().join('');
331
+ }
332
+ for (const edge of edges[step.node]) {
333
+ c.step(owner, 12);
334
+ const next = step.count + edge.weight, identity = edge.to + ':' + next;
335
+ if (next > wanted || seen.has(identity))
336
+ continue;
337
+ c.step(owner, identity.length + 8);
338
+ seen.add(identity);
339
+ queue.push({ node: edge.to, count: next, prior: cursor, char: edge.char });
340
+ }
341
+ }
342
+ throw new TypeError('Accepted unary count must have a mantissa path');
343
+ };
344
+ const probe = (final, count, exponent) => {
345
+ const e = fractional ? BigInt(exponentOrder) + count : BigInt(exponentOrder) - count;
346
+ if (!final.exponent) {
347
+ if (relation === 'equal' ? e !== 0n : relation === 'less' ? e <= 0n : e >= 0n)
348
+ return undefined;
349
+ return path(count, final.node);
350
+ }
351
+ let word = exponent;
352
+ if (word === undefined) {
353
+ let candidate = integerInverse(e, owner);
354
+ if (relation !== 'equal') {
355
+ const text = decimals.relation(e.toString(), relation === 'greater', owner);
356
+ candidate = text === undefined ? regular.union([], owner) : expression(text, owner);
357
+ }
358
+ word = regular.witness(regular.intersect([final.exponent, candidate], owner), owner);
359
+ }
360
+ if (word === undefined)
361
+ return undefined;
362
+ const mantissa = path(count, final.node);
363
+ c.step(owner, mantissa.length + word.length + 2);
364
+ return mantissa + final.marker + word;
365
+ };
366
+ c.step(owner, 6);
367
+ const orbit = [], known = new Map();
368
+ let current = closure([0]), prefix = 0;
369
+ while (true) {
370
+ c.step(owner, current.length * 16 + 4);
371
+ const identity = JSON.stringify(current), previous = known.get(identity);
372
+ if (previous !== undefined) {
373
+ prefix = previous;
374
+ break;
375
+ }
376
+ c.step(owner, identity.length + current.length + 4);
377
+ known.set(identity, orbit.length);
378
+ orbit.push(current);
379
+ for (const final of finals) {
380
+ c.step(owner, current.length + 1);
381
+ if (!current.includes(final.node))
382
+ continue;
383
+ const word = probe(final, BigInt(orbit.length - 1));
384
+ if (word !== undefined)
385
+ return word;
386
+ }
387
+ c.step(owner, 2);
388
+ const next = [];
389
+ for (const node of current)
390
+ for (const edge of edges[node]) {
391
+ c.step(owner);
392
+ if (edge.weight) {
393
+ c.step(owner);
394
+ next.push(edge.to);
395
+ }
396
+ }
397
+ current = closure(next);
398
+ }
399
+ const period = orbit.length - prefix;
400
+ for (let index = prefix; index < orbit.length; index++)
401
+ for (const final of finals) {
402
+ c.step(owner, orbit[index].length + 2);
403
+ if (!orbit[index].includes(final.node))
404
+ continue;
405
+ if (!final.exponent) {
406
+ const required = BigInt(fractional ? -exponentOrder : exponentOrder);
407
+ let count;
408
+ if (relation === 'equal' && required >= BigInt(index) && (required - BigInt(index)) % BigInt(period) === 0n)
409
+ count = required;
410
+ else if (fractional && relation === 'less' || !fractional && relation === 'greater') {
411
+ const minimum = required >= BigInt(index) ? required + 1n : BigInt(index);
412
+ count = BigInt(index) + ((minimum - BigInt(index) + BigInt(period) - 1n) / BigInt(period)) * BigInt(period);
413
+ }
414
+ if (count !== undefined) {
415
+ const word = probe(final, count);
416
+ if (word !== undefined)
417
+ return word;
418
+ }
419
+ continue;
420
+ }
421
+ const initial = fractional ? BigInt(exponentOrder + index) : BigInt(exponentOrder - index);
422
+ if (relation !== 'equal') {
423
+ // For an unbounded available count the favorable half-line is
424
+ // automatic; any accepted exponent supplies some large count.
425
+ if (fractional && relation === 'less' || !fractional && relation === 'greater') {
426
+ const word = regular.witness(final.exponent, owner);
427
+ if (word === undefined)
428
+ continue;
429
+ charge(owner, word.length + 4);
430
+ const exponent = BigInt(word), boundary = fractional ? exponent - BigInt(exponentOrder) : BigInt(exponentOrder) - exponent;
431
+ const lowerCount = boundary >= BigInt(index) ? boundary + 1n : BigInt(index);
432
+ c.step(owner, 32);
433
+ const count = BigInt(index) + ((lowerCount - BigInt(index) + BigInt(period) - 1n) / BigInt(period)) * BigInt(period);
434
+ const result = probe(final, count, word);
435
+ if (result !== undefined)
436
+ return result;
437
+ }
438
+ continue;
439
+ }
440
+ c.step(owner, 32);
441
+ const residue = Number((initial % BigInt(period) + BigInt(period)) % BigInt(period));
442
+ const comparison = decimals.relation(initial.toString(), fractional ? false : true, owner);
443
+ const outside = comparison === undefined ? regular.union([], owner) : expression(comparison, owner);
444
+ const allowed = regular.intersect([final.exponent, modulo(period, residue, owner), regular.negate(outside, owner)], owner);
445
+ const word = regular.witness(allowed, owner);
446
+ if (word === undefined)
447
+ continue;
448
+ charge(owner, word.length + 4);
449
+ const exponent = BigInt(word), count = fractional ? exponent - BigInt(exponentOrder) : BigInt(exponentOrder) - exponent;
450
+ const result = probe(final, count, word);
451
+ if (result !== undefined)
452
+ return result;
453
+ }
454
+ }
455
+ return undefined;
456
+ };
457
+ const intervalWitness = (language, interval, owner) => {
458
+ if (!interval.lower && !interval.upper)
459
+ return regular.witness(regular.intersect([language,
460
+ expression((interval.negative ? '\\-' : '[+]?') + '([0-9]+([.][0-9]*)?|[.][0-9]+)([eE][+\\-]?[0-9]+)?', owner)], owner), owner);
461
+ if (!interval.lower) {
462
+ const zero = regular.witness(regular.intersect([language, expression((interval.negative ? '\\-' : '[+]?') + '(0+([.]0*)?|[.]0+)([eE][+\\-]?[0-9]+)?', owner)], owner), owner);
463
+ if (zero !== undefined)
464
+ return zero;
465
+ }
466
+ const first = interval.lower ? order(interval.lower.value, owner) : undefined, last = interval.upper ? order(interval.upper.value, owner) : undefined;
467
+ if (first === undefined && last !== undefined) {
468
+ const word = search(language, interval, last, 'less', owner);
469
+ if (word !== undefined)
470
+ return word;
471
+ }
472
+ if (last === undefined && first !== undefined) {
473
+ const word = search(language, interval, first, 'greater', owner);
474
+ if (word !== undefined)
475
+ return word;
476
+ }
477
+ for (let exponent = first ?? last; exponent <= (last ?? first); exponent++) {
478
+ c.step(owner);
479
+ const word = search(language, interval, exponent, 'equal', owner);
480
+ if (word !== undefined)
481
+ return word;
482
+ }
483
+ return undefined;
484
+ };
485
+ const witness = (language, target, owner) => {
486
+ c.text(target.canonical, owner);
487
+ if (target.canonical === 'NaN')
488
+ return regular.witness(regular.intersect([language, expression('NaN', owner)], owner), owner);
489
+ if (target.canonical === 'Infinity' || target.canonical === '-Infinity') {
490
+ const literal = regular.witness(regular.intersect([language, expression(target.canonical[0] === '-' ? '\\-INF' : 'INF', owner)], owner), owner);
491
+ if (literal !== undefined)
492
+ return literal;
493
+ }
494
+ if (target.canonical === '0') {
495
+ const zero = regular.witness(regular.intersect([language, expression('[+\\-]?(0+([.]0*)?|[.]0+)([eE][+\\-]?[0-9]+)?', owner)], owner), owner);
496
+ if (zero !== undefined)
497
+ return zero;
498
+ }
499
+ for (const interval of inverseIntervals(target, owner)) {
500
+ const word = intervalWitness(language, interval, owner);
501
+ if (word !== undefined)
502
+ return word;
503
+ }
504
+ return undefined;
505
+ };
506
+ const rank = (value, owner) => {
507
+ c.text(value.canonical, owner);
508
+ c.step(owner, 24);
509
+ const bytes = new ArrayBuffer(8), view = new DataView(bytes), number = Number(value.canonical);
510
+ let bits;
511
+ if (value.family === 'float') {
512
+ view.setFloat32(0, Math.abs(number));
513
+ bits = BigInt(view.getUint32(0));
514
+ }
515
+ else {
516
+ view.setFloat64(0, Math.abs(number));
517
+ bits = view.getBigUint64(0);
518
+ }
519
+ return number < 0 ? -bits : bits;
520
+ };
521
+ const rankedValue = (bits, single, owner) => {
522
+ c.step(owner, 32);
523
+ const bytes = new ArrayBuffer(8), view = new DataView(bytes);
524
+ let number;
525
+ if (single) {
526
+ view.setUint32(0, Number(bits));
527
+ number = view.getFloat32(0);
528
+ }
529
+ else {
530
+ view.setBigUint64(0, bits);
531
+ number = view.getFloat64(0);
532
+ }
533
+ c.step(owner, 32);
534
+ return { family: single ? 'float' : 'double', canonical: String(number) };
535
+ };
536
+ /** A complete predicate over IEEE ranks, converted to exact input intervals. */
537
+ const wideningWitness = (language, family, supplied, prior, owner) => {
538
+ const single = family === 'float', infinity = single ? 0x7f800000n : 0x7ff0000000000000n;
539
+ let lo = -infinity, hi = infinity, ordinary = true, nan = true;
540
+ for (const bound of supplied) {
541
+ c.step(owner, 6);
542
+ if (bound.value.canonical === 'NaN') {
543
+ ordinary = false;
544
+ if (bound.name.endsWith('Exclusive'))
545
+ nan = false;
546
+ continue;
547
+ }
548
+ nan = false;
549
+ const value = rank(bound.value, owner);
550
+ if (bound.name.startsWith('min')) {
551
+ const minimum = value + (bound.name.endsWith('Exclusive') ? 1n : 0n);
552
+ if (minimum > lo)
553
+ lo = minimum;
554
+ }
555
+ else {
556
+ const maximum = value - (bound.name.endsWith('Exclusive') ? 1n : 0n);
557
+ if (maximum < hi)
558
+ hi = maximum;
559
+ }
560
+ }
561
+ if (prior.value.canonical === 'NaN') {
562
+ if (!prior.name.endsWith('Exclusive'))
563
+ nan = false;
564
+ }
565
+ else {
566
+ const value = rank(prior.value, owner);
567
+ if (prior.name.startsWith('min')) {
568
+ const maximum = value - (prior.name.endsWith('Inclusive') ? 1n : 0n);
569
+ if (maximum < hi)
570
+ hi = maximum;
571
+ }
572
+ else {
573
+ const minimum = value + (prior.name.endsWith('Inclusive') ? 1n : 0n);
574
+ if (minimum > lo)
575
+ lo = minimum;
576
+ }
577
+ }
578
+ if (nan) {
579
+ const word = regular.witness(regular.intersect([language, expression('NaN', owner)], owner), owner);
580
+ if (word !== undefined)
581
+ return word;
582
+ }
583
+ if (!ordinary || lo > hi)
584
+ return undefined;
585
+ for (const [negative, bits] of [[true, -infinity], [false, infinity]])
586
+ if (lo <= bits && hi >= bits) {
587
+ const word = regular.witness(regular.intersect([language, expression(negative ? '\\-INF' : 'INF', owner)], owner), owner);
588
+ if (word !== undefined)
589
+ return word;
590
+ }
591
+ if (lo <= 0n && hi >= 0n)
592
+ for (const interval of inverseIntervals({ family, canonical: '0' }, owner)) {
593
+ const word = intervalWitness(language, interval, owner);
594
+ if (word !== undefined)
595
+ return word;
596
+ }
597
+ for (const negative of [false, true]) {
598
+ const minimum = negative ? hi < -1n ? -hi : 1n : lo > 1n ? lo : 1n;
599
+ const maximum = negative ? -lo : hi;
600
+ if (minimum > maximum)
601
+ continue;
602
+ const lower = inverseIntervals(rankedValue(minimum, single, owner), owner)[0].lower;
603
+ const upper = inverseIntervals(rankedValue(maximum, single, owner), owner)[0].upper;
604
+ const word = intervalWitness(language, { negative, lower, upper }, owner);
605
+ if (word !== undefined)
606
+ return word;
607
+ }
608
+ return undefined;
609
+ };
610
+ const boundIntervals = (family, bounds, owner) => {
611
+ const single = family === 'float', infinity = single ? 0x7f800000n : 0x7ff0000000000000n;
612
+ let lo = -infinity, hi = infinity, ordinary = true, nan = true;
613
+ for (const bound of bounds) {
614
+ c.step(owner, 6);
615
+ if (bound.value.canonical === 'NaN') {
616
+ ordinary = false;
617
+ if (bound.name.endsWith('Exclusive'))
618
+ nan = false;
619
+ continue;
620
+ }
621
+ nan = false;
622
+ const value = rank(bound.value, owner);
623
+ if (bound.name.startsWith('min')) {
624
+ const minimum = value + (bound.name.endsWith('Exclusive') ? 1n : 0n);
625
+ if (minimum > lo)
626
+ lo = minimum;
627
+ }
628
+ else {
629
+ const maximum = value - (bound.name.endsWith('Exclusive') ? 1n : 0n);
630
+ if (maximum < hi)
631
+ hi = maximum;
632
+ }
633
+ }
634
+ c.step(owner, 4);
635
+ const intervals = [], literals = nan ? ['NaN'] : [];
636
+ if (!ordinary || lo > hi)
637
+ return { intervals, literals };
638
+ for (const [negative, bits] of [[true, -infinity], [false, infinity]])
639
+ if (lo <= bits && hi >= bits)
640
+ literals.push(negative ? '-INF' : 'INF');
641
+ for (const negative of [false, true]) {
642
+ const minimum = negative ? hi < 0n ? -hi : 0n : lo > 0n ? lo : 0n, maximum = negative ? -lo : hi;
643
+ if (minimum > maximum)
644
+ continue;
645
+ const lower = minimum === 0n ? undefined : inverseIntervals(rankedValue(minimum, single, owner), owner)[0].lower;
646
+ const upper = maximum === 0n ? inverseIntervals({ family, canonical: '0' }, owner)[0].upper
647
+ : inverseIntervals(rankedValue(maximum, single, owner), owner)[0].upper;
648
+ intervals.push({ negative, lower, upper });
649
+ }
650
+ return { intervals, literals };
651
+ };
652
+ const compareExact = (a, b, owner) => {
653
+ const scale = Math.max(a.scale, b.scale);
654
+ // Only the scale difference extends a coefficient: its existing fractional
655
+ // digits are already included in digits. Charging the whole common scale
656
+ // again greatly overstates subnormal endpoint comparisons.
657
+ charge(owner, Math.max((a.digits ?? a.scale + 330) + scale - a.scale, (b.digits ?? b.scale + 330) + scale - b.scale));
658
+ const x = a.coefficient * 10n ** BigInt(scale - a.scale), y = b.coefficient * 10n ** BigInt(scale - b.scale);
659
+ return x < y ? -1 : x > y ? 1 : 0;
660
+ };
661
+ const subtractIntervals = (input, removed, owner) => {
662
+ c.step(owner, input.length + 2);
663
+ let result = [...input];
664
+ for (const cut of removed) {
665
+ c.step(owner, result.length + 2);
666
+ const next = [];
667
+ for (const original of result) {
668
+ c.step(owner, 6);
669
+ if (original.negative !== cut.negative) {
670
+ next.push(original);
671
+ continue;
672
+ }
673
+ const lower = !original.lower ? cut.lower : !cut.lower ? original.lower
674
+ : compareExact(original.lower.value, cut.lower.value, owner) > 0 ? original.lower
675
+ : compareExact(original.lower.value, cut.lower.value, owner) < 0 ? cut.lower
676
+ : { ...original.lower, inclusive: original.lower.inclusive && cut.lower.inclusive };
677
+ const upper = !original.upper ? cut.upper : !cut.upper ? original.upper
678
+ : compareExact(original.upper.value, cut.upper.value, owner) < 0 ? original.upper
679
+ : compareExact(original.upper.value, cut.upper.value, owner) > 0 ? cut.upper
680
+ : { ...original.upper, inclusive: original.upper.inclusive && cut.upper.inclusive };
681
+ const order = lower && upper ? compareExact(lower.value, upper.value, owner) : -1;
682
+ if (order > 0 || order === 0 && !(lower.inclusive && upper.inclusive)) {
683
+ next.push(original);
684
+ continue;
685
+ }
686
+ if (lower && (!original.lower || compareExact(original.lower.value, lower.value, owner) < 0
687
+ || compareExact(original.lower.value, lower.value, owner) === 0 && original.lower.inclusive && !lower.inclusive))
688
+ next.push({ ...original, upper: { ...lower, inclusive: !lower.inclusive } });
689
+ if (upper && (!original.upper || compareExact(original.upper.value, upper.value, owner) > 0
690
+ || compareExact(original.upper.value, upper.value, owner) === 0 && original.upper.inclusive && !upper.inclusive))
691
+ next.push({ ...original, lower: { ...upper, inclusive: !upper.inclusive } });
692
+ }
693
+ result = next;
694
+ }
695
+ return result;
696
+ };
697
+ function* formatValues(family, owner) {
698
+ const single = family === 'float', infinity = single ? 0x7f800000n : 0x7ff0000000000000n;
699
+ c.step(owner, 64);
700
+ yield { family, canonical: 'NaN' };
701
+ for (let bits = -infinity; bits <= infinity; bits++) {
702
+ c.step(owner, 64);
703
+ const value = rankedValue(bits < 0n ? -bits : bits, single, owner);
704
+ yield bits < 0n ? { ...value, canonical: '-' + value.canonical } : value;
705
+ }
706
+ }
707
+ const decimalInputLanguage = (intervals, literals, owner) => {
708
+ c.step(owner, intervals.length + literals.length + 3);
709
+ const choices = literals.map(value => expression(value === '-INF' ? '\\-INF' : value, owner));
710
+ for (const interval of intervals) {
711
+ const predicates = [expression('([0-9]+([.][0-9]*)?|[.][0-9]+)', owner)];
712
+ for (const [endpoint, lower] of [[interval.lower, true], [interval.upper, false]]) {
713
+ if (!endpoint)
714
+ continue;
715
+ const greater = lower ? !endpoint.inclusive : endpoint.inclusive, source = decimals.relation(key(endpoint.value, owner), greater, owner);
716
+ const language = source === undefined ? regular.union([], owner) : expression(source, owner);
717
+ predicates.push(endpoint.inclusive ? regular.negate(language, owner) : language);
718
+ }
719
+ choices.push(regular.concatenate([expression(interval.negative ? '\\-' : '[+]?', owner), regular.intersect(predicates, owner)], owner));
720
+ }
721
+ return regular.union(choices, owner);
722
+ };
723
+ /** On unsigned integer mantissas and nonnegative exponents, only finitely
724
+ * many exponents can straddle an interval endpoint. Above their decimal
725
+ * orders every nonzero mantissa exceeds every finite endpoint; zero stays
726
+ * zero. This covers the exponent syntax admitted inside binary alphabets. */
727
+ const unsignedExponentialLanguage = (source, intervals, owner) => {
728
+ const exponentGrammar = expression('[+]?0*[0-9]+', owner), mantissa = expression('[+]?[0-9]+', owner), marker = expression('[eE]', owner);
729
+ const positive = intervals.filter(interval => !interval.negative);
730
+ c.step(owner, intervals.length + 4);
731
+ let cutoff = 0;
732
+ for (const interval of positive)
733
+ for (const endpoint of [interval.lower, interval.upper])
734
+ if (endpoint)
735
+ cutoff = Math.max(cutoff, order(endpoint.value, owner) + 1);
736
+ c.step(owner, 2);
737
+ const choices = [];
738
+ for (let exponent = 0; exponent < cutoff; exponent++) {
739
+ c.step(owner, 64);
740
+ const suffix = regular.concatenate([marker, expression('[+]?0*' + exponent, owner)], owner);
741
+ const token = regular.quotient(source, expression('', owner), suffix, owner);
742
+ if (regular.witness(regular.intersect([token, mantissa], owner), owner) === undefined)
743
+ continue;
744
+ c.step(owner, positive.length * 8 + 3);
745
+ const scaledIntervals = positive.map(interval => ({ negative: false,
746
+ lower: interval.lower && { ...interval.lower, value: scaled(interval.lower.value, exponent, owner) },
747
+ upper: interval.upper && { ...interval.upper, value: scaled(interval.upper.value, exponent, owner) } }));
748
+ choices.push(regular.concatenate([regular.intersect([mantissa, decimalInputLanguage(scaledIntervals, [], owner)], owner), suffix], owner));
749
+ }
750
+ const tail = regular.intersect([exponentGrammar, regular.negate(decimalInputLanguage([{ negative: false, upper: { value: { coefficient: BigInt(cutoff), scale: 0 }, inclusive: false } }], [], owner), owner)], owner);
751
+ if (positive.some(interval => !interval.upper))
752
+ choices.push(regular.concatenate([expression('[+]?0*[1-9][0-9]*', owner), marker, tail], owner));
753
+ if (positive.some(interval => (!interval.lower || interval.lower.value.coefficient === 0n && interval.lower.inclusive)
754
+ && (!interval.upper || interval.upper.value.coefficient !== 0n || interval.upper.inclusive)))
755
+ choices.push(regular.concatenate([expression('[+]?0+', owner), marker, exponentGrammar], owner));
756
+ return regular.intersect([source, regular.union(choices, owner)], owner);
757
+ };
758
+ return { witness, inverseIntervals, intervalWitness, wideningWitness, boundIntervals, subtractIntervals, formatValues, decimalInputLanguage, unsignedExponentialLanguage };
759
+ }