aontu 0.62.0 → 0.63.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 (356) hide show
  1. package/README.md +1 -1
  2. package/dist/agentsmd.js +0 -27
  3. package/dist/agentsmd.js.map +1 -1
  4. package/dist/alias.js.map +1 -1
  5. package/dist/allow.js +0 -92
  6. package/dist/allow.js.map +1 -1
  7. package/dist/aontu.d.ts +1 -1
  8. package/dist/aontu.js +1 -79
  9. package/dist/aontu.js.map +1 -1
  10. package/dist/aontumodel.d.ts +4 -0
  11. package/dist/aontumodel.js +33 -0
  12. package/dist/aontumodel.js.map +1 -0
  13. package/dist/cli.js +101 -620
  14. package/dist/cli.js.map +1 -1
  15. package/dist/ctx.js +0 -48
  16. package/dist/ctx.js.map +1 -1
  17. package/dist/diff.js +0 -32
  18. package/dist/diff.js.map +1 -1
  19. package/dist/err.js +0 -40
  20. package/dist/err.js.map +1 -1
  21. package/dist/escape.js +0 -45
  22. package/dist/escape.js.map +1 -1
  23. package/dist/exactjson.d.ts +0 -35
  24. package/dist/exactjson.js +0 -131
  25. package/dist/exactjson.js.map +1 -1
  26. package/dist/format.js +13 -203
  27. package/dist/format.js.map +1 -1
  28. package/dist/grammar.d.ts +9 -0
  29. package/dist/grammar.js +54 -0
  30. package/dist/grammar.js.map +1 -0
  31. package/dist/graph.js +0 -26
  32. package/dist/graph.js.map +1 -1
  33. package/dist/hcanon.js +0 -82
  34. package/dist/hcanon.js.map +1 -1
  35. package/dist/helpdoc.js +1 -1
  36. package/dist/helpdoc.js.map +1 -1
  37. package/dist/hints.d.ts +0 -6
  38. package/dist/hints.js +54 -55
  39. package/dist/hints.js.map +1 -1
  40. package/dist/jsonschema.js +0 -114
  41. package/dist/jsonschema.js.map +1 -1
  42. package/dist/keyorder.d.ts +0 -7
  43. package/dist/keyorder.js +0 -41
  44. package/dist/keyorder.js.map +1 -1
  45. package/dist/lang.js +17 -915
  46. package/dist/lang.js.map +1 -1
  47. package/dist/lower.js +11 -61
  48. package/dist/lower.js.map +1 -1
  49. package/dist/lsp-server.js +0 -16
  50. package/dist/lsp-server.js.map +1 -1
  51. package/dist/lsp.d.ts +1 -1
  52. package/dist/lsp.js +12 -159
  53. package/dist/lsp.js.map +1 -1
  54. package/dist/mcp-server.js +0 -26
  55. package/dist/mcp-server.js.map +1 -1
  56. package/dist/mcp.js +0 -113
  57. package/dist/mcp.js.map +1 -1
  58. package/dist/mod-tool.js +0 -130
  59. package/dist/mod-tool.js.map +1 -1
  60. package/dist/mod.js +0 -162
  61. package/dist/mod.js.map +1 -1
  62. package/dist/patch.js +0 -217
  63. package/dist/patch.js.map +1 -1
  64. package/dist/provenance.js +0 -140
  65. package/dist/provenance.js.map +1 -1
  66. package/dist/query.js +0 -75
  67. package/dist/query.js.map +1 -1
  68. package/dist/reach.js +0 -43
  69. package/dist/reach.js.map +1 -1
  70. package/dist/relation.js +0 -61
  71. package/dist/relation.js.map +1 -1
  72. package/dist/render.js +20 -135
  73. package/dist/render.js.map +1 -1
  74. package/dist/report-sarif.d.ts +0 -11
  75. package/dist/report-sarif.js +0 -28
  76. package/dist/report-sarif.js.map +1 -1
  77. package/dist/sig.js +0 -35
  78. package/dist/sig.js.map +1 -1
  79. package/dist/sigdecl.js +1 -1
  80. package/dist/sigdecl.js.map +1 -1
  81. package/dist/siggate.js +0 -4
  82. package/dist/siggate.js.map +1 -1
  83. package/dist/site.js +3 -29
  84. package/dist/site.js.map +1 -1
  85. package/dist/subsume.d.ts +0 -10
  86. package/dist/subsume.js +0 -137
  87. package/dist/subsume.js.map +1 -1
  88. package/dist/template.d.ts +2 -1
  89. package/dist/template.js +58 -138
  90. package/dist/template.js.map +1 -1
  91. package/dist/trim.js +0 -41
  92. package/dist/trim.js.map +1 -1
  93. package/dist/tsconfig.tsbuildinfo +1 -1
  94. package/dist/type.js.map +1 -1
  95. package/dist/unify.js +12 -242
  96. package/dist/unify.js.map +1 -1
  97. package/dist/utility.js +0 -22
  98. package/dist/utility.js.map +1 -1
  99. package/dist/val/AbnfFuncVal.d.ts +18 -0
  100. package/dist/val/AbnfFuncVal.js +132 -0
  101. package/dist/val/AbnfFuncVal.js.map +1 -0
  102. package/dist/val/AbsentVal.d.ts +11 -0
  103. package/dist/val/AbsentVal.js +30 -0
  104. package/dist/val/AbsentVal.js.map +1 -0
  105. package/dist/val/AggFuncVal.d.ts +10 -1
  106. package/dist/val/AggFuncVal.js +104 -116
  107. package/dist/val/AggFuncVal.js.map +1 -1
  108. package/dist/val/ArithFuncVal.js +0 -12
  109. package/dist/val/ArithFuncVal.js.map +1 -1
  110. package/dist/val/BagVal.js +1 -78
  111. package/dist/val/BagVal.js.map +1 -1
  112. package/dist/val/BigDecimalVal.js +0 -16
  113. package/dist/val/BigDecimalVal.js.map +1 -1
  114. package/dist/val/BigIntegerVal.js +0 -16
  115. package/dist/val/BigIntegerVal.js.map +1 -1
  116. package/dist/val/CloseFuncVal.js +0 -9
  117. package/dist/val/CloseFuncVal.js.map +1 -1
  118. package/dist/val/CmpFuncVal.js +2 -59
  119. package/dist/val/CmpFuncVal.js.map +1 -1
  120. package/dist/val/ConjunctVal.js +0 -29
  121. package/dist/val/ConjunctVal.js.map +1 -1
  122. package/dist/val/ConstraintVal.js +0 -500
  123. package/dist/val/ConstraintVal.js.map +1 -1
  124. package/dist/val/ContainerKindVal.js +0 -2
  125. package/dist/val/ContainerKindVal.js.map +1 -1
  126. package/dist/val/CopyFuncVal.js +0 -3
  127. package/dist/val/CopyFuncVal.js.map +1 -1
  128. package/dist/val/Decimal.js +0 -179
  129. package/dist/val/Decimal.js.map +1 -1
  130. package/dist/val/DeprecateFuncVal.js.map +1 -1
  131. package/dist/val/DisjunctVal.js +0 -152
  132. package/dist/val/DisjunctVal.js.map +1 -1
  133. package/dist/val/EachFuncVal.js +0 -3
  134. package/dist/val/EachFuncVal.js.map +1 -1
  135. package/dist/val/EmitFuncVal.d.ts +1 -1
  136. package/dist/val/EmitFuncVal.js +6 -119
  137. package/dist/val/EmitFuncVal.js.map +1 -1
  138. package/dist/val/ExpectVal.js +0 -62
  139. package/dist/val/ExpectVal.js.map +1 -1
  140. package/dist/val/FilterFuncVal.js +0 -25
  141. package/dist/val/FilterFuncVal.js.map +1 -1
  142. package/dist/val/FuncBaseVal.d.ts +1 -0
  143. package/dist/val/FuncBaseVal.js +7 -127
  144. package/dist/val/FuncBaseVal.js.map +1 -1
  145. package/dist/val/GraphAtomVal.js +0 -15
  146. package/dist/val/GraphAtomVal.js.map +1 -1
  147. package/dist/val/HideFuncVal.js +0 -13
  148. package/dist/val/HideFuncVal.js.map +1 -1
  149. package/dist/val/IntegerVal.js +0 -61
  150. package/dist/val/IntegerVal.js.map +1 -1
  151. package/dist/val/JunctionVal.js +0 -20
  152. package/dist/val/JunctionVal.js.map +1 -1
  153. package/dist/val/KeyFuncVal.js +0 -46
  154. package/dist/val/KeyFuncVal.js.map +1 -1
  155. package/dist/val/ListVal.js +0 -57
  156. package/dist/val/ListVal.js.map +1 -1
  157. package/dist/val/LowerFuncVal.js +0 -11
  158. package/dist/val/LowerFuncVal.js.map +1 -1
  159. package/dist/val/MapVal.js +0 -151
  160. package/dist/val/MapVal.js.map +1 -1
  161. package/dist/val/MatchFuncVal.js +0 -27
  162. package/dist/val/MatchFuncVal.js.map +1 -1
  163. package/dist/val/{FormFuncVal.d.ts → MaybeFuncVal.d.ts} +5 -5
  164. package/dist/val/MaybeFuncVal.js +50 -0
  165. package/dist/val/MaybeFuncVal.js.map +1 -0
  166. package/dist/val/MoveFuncVal.js +0 -18
  167. package/dist/val/MoveFuncVal.js.map +1 -1
  168. package/dist/val/NilVal.js +0 -60
  169. package/dist/val/NilVal.js.map +1 -1
  170. package/dist/val/NomFuncVal.js +8 -42
  171. package/dist/val/NomFuncVal.js.map +1 -1
  172. package/dist/val/NumberVal.js +0 -15
  173. package/dist/val/NumberVal.js.map +1 -1
  174. package/dist/val/OpBaseVal.d.ts +1 -0
  175. package/dist/val/OpBaseVal.js +3 -15
  176. package/dist/val/OpBaseVal.js.map +1 -1
  177. package/dist/val/PackFuncVal.js +0 -34
  178. package/dist/val/PackFuncVal.js.map +1 -1
  179. package/dist/val/PathFuncVal.js +0 -6
  180. package/dist/val/PathFuncVal.js.map +1 -1
  181. package/dist/val/PathVal.js +0 -41
  182. package/dist/val/PathVal.js.map +1 -1
  183. package/dist/val/PlaceVal.js +0 -25
  184. package/dist/val/PlaceVal.js.map +1 -1
  185. package/dist/val/PlusOpVal.d.ts +1 -7
  186. package/dist/val/PlusOpVal.js +13 -74
  187. package/dist/val/PlusOpVal.js.map +1 -1
  188. package/dist/val/PrefFuncVal.js +0 -1
  189. package/dist/val/PrefFuncVal.js.map +1 -1
  190. package/dist/val/PrefVal.js +0 -167
  191. package/dist/val/PrefVal.js.map +1 -1
  192. package/dist/val/RecurseVal.js +0 -55
  193. package/dist/val/RecurseVal.js.map +1 -1
  194. package/dist/val/RefVal.js +0 -282
  195. package/dist/val/RefVal.js.map +1 -1
  196. package/dist/val/ReferFuncVal.js +0 -232
  197. package/dist/val/ReferFuncVal.js.map +1 -1
  198. package/dist/val/ScalarKindVal.js +0 -49
  199. package/dist/val/ScalarKindVal.js.map +1 -1
  200. package/dist/val/ScalarVal.js +0 -11
  201. package/dist/val/ScalarVal.js.map +1 -1
  202. package/dist/val/StrFuncVal.js +0 -18
  203. package/dist/val/StrFuncVal.js.map +1 -1
  204. package/dist/val/SuperFuncVal.js +0 -32
  205. package/dist/val/SuperFuncVal.js.map +1 -1
  206. package/dist/val/TopVal.js +0 -1
  207. package/dist/val/TopVal.js.map +1 -1
  208. package/dist/val/TranslateFuncVal.js +1 -3
  209. package/dist/val/TranslateFuncVal.js.map +1 -1
  210. package/dist/val/UpperFuncVal.js +0 -11
  211. package/dist/val/UpperFuncVal.js.map +1 -1
  212. package/dist/val/Val.d.ts +1 -0
  213. package/dist/val/Val.js +2 -133
  214. package/dist/val/Val.js.map +1 -1
  215. package/dist/val/VarVal.js +0 -12
  216. package/dist/val/VarVal.js.map +1 -1
  217. package/dist/val/arith.js +0 -37
  218. package/dist/val/arith.js.map +1 -1
  219. package/dist/val/caserange.js +0 -61
  220. package/dist/val/caserange.js.map +1 -1
  221. package/dist/val/members.js +0 -6
  222. package/dist/val/members.js.map +1 -1
  223. package/dist/val/numcmp.js +0 -11
  224. package/dist/val/numcmp.js.map +1 -1
  225. package/dist/val/numkind.js +0 -145
  226. package/dist/val/numkind.js.map +1 -1
  227. package/dist/val/valutil.js +0 -16
  228. package/dist/val/valutil.js.map +1 -1
  229. package/dist/vet.js +0 -461
  230. package/dist/vet.js.map +1 -1
  231. package/dist/view.js +0 -414
  232. package/dist/view.js.map +1 -1
  233. package/dist/walk.js +0 -41
  234. package/dist/walk.js.map +1 -1
  235. package/grammar/aontu.abnf +8 -6
  236. package/grammar/aontu.gbnf +4 -4
  237. package/grammar/aontu.lark +4 -4
  238. package/grammar/aontu.tmLanguage.json +1 -1
  239. package/package.json +4 -2
  240. package/src/agentsmd.ts +0 -35
  241. package/src/alias.ts +0 -39
  242. package/src/allow.ts +1 -96
  243. package/src/aontu.ts +3 -110
  244. package/src/aontumodel.ts +32 -0
  245. package/src/cli.ts +113 -682
  246. package/src/ctx.ts +0 -103
  247. package/src/diff.ts +0 -40
  248. package/src/err.ts +0 -40
  249. package/src/escape.ts +0 -46
  250. package/src/exactjson.ts +0 -131
  251. package/src/format.ts +14 -257
  252. package/src/grammar.ts +72 -0
  253. package/src/graph.ts +0 -61
  254. package/src/hcanon.ts +0 -82
  255. package/src/helpdoc.ts +1 -1
  256. package/src/hints.ts +66 -57
  257. package/src/jsonschema.ts +0 -123
  258. package/src/keyorder.ts +0 -42
  259. package/src/lang.ts +19 -931
  260. package/src/lower.ts +12 -62
  261. package/src/lsp-server.ts +0 -16
  262. package/src/lsp.ts +12 -180
  263. package/src/mcp-server.ts +0 -31
  264. package/src/mcp.ts +0 -130
  265. package/src/mod-tool.ts +0 -158
  266. package/src/mod.ts +0 -178
  267. package/src/patch.ts +0 -232
  268. package/src/provenance.ts +0 -183
  269. package/src/query.ts +0 -84
  270. package/src/reach.ts +0 -53
  271. package/src/relation.ts +0 -84
  272. package/src/render.ts +20 -172
  273. package/src/report-sarif.ts +0 -48
  274. package/src/sig.ts +0 -35
  275. package/src/sigdecl.ts +1 -1
  276. package/src/siggate.ts +0 -30
  277. package/src/site.ts +3 -29
  278. package/src/subsume.ts +1 -161
  279. package/src/template.ts +69 -140
  280. package/src/trim.ts +0 -53
  281. package/src/type.ts +2 -45
  282. package/src/unify.ts +13 -251
  283. package/src/utility.ts +0 -31
  284. package/src/val/AbnfFuncVal.ts +181 -0
  285. package/src/val/AbsentVal.ts +54 -0
  286. package/src/val/AggFuncVal.ts +152 -188
  287. package/src/val/ArithFuncVal.ts +0 -20
  288. package/src/val/BagVal.ts +1 -78
  289. package/src/val/BigDecimalVal.ts +0 -16
  290. package/src/val/BigIntegerVal.ts +0 -16
  291. package/src/val/CloseFuncVal.ts +0 -9
  292. package/src/val/CmpFuncVal.ts +4 -166
  293. package/src/val/ConjunctVal.ts +0 -33
  294. package/src/val/ConstraintVal.ts +2 -537
  295. package/src/val/ContainerKindVal.ts +0 -18
  296. package/src/val/CopyFuncVal.ts +0 -5
  297. package/src/val/Decimal.ts +1 -185
  298. package/src/val/DeprecateFuncVal.ts +0 -10
  299. package/src/val/DisjunctVal.ts +0 -157
  300. package/src/val/EachFuncVal.ts +0 -40
  301. package/src/val/EmitFuncVal.ts +8 -208
  302. package/src/val/ExpectVal.ts +0 -62
  303. package/src/val/FilterFuncVal.ts +0 -55
  304. package/src/val/FuncBaseVal.ts +9 -130
  305. package/src/val/GraphAtomVal.ts +0 -42
  306. package/src/val/HideFuncVal.ts +0 -15
  307. package/src/val/IntegerVal.ts +0 -61
  308. package/src/val/JunctionVal.ts +0 -20
  309. package/src/val/KeyFuncVal.ts +0 -48
  310. package/src/val/ListVal.ts +0 -59
  311. package/src/val/LowerFuncVal.ts +0 -12
  312. package/src/val/MapVal.ts +0 -151
  313. package/src/val/MatchFuncVal.ts +0 -59
  314. package/src/val/MaybeFuncVal.ts +86 -0
  315. package/src/val/MoveFuncVal.ts +0 -20
  316. package/src/val/NilVal.ts +0 -60
  317. package/src/val/NomFuncVal.ts +8 -95
  318. package/src/val/NumberVal.ts +0 -16
  319. package/src/val/OpBaseVal.ts +4 -17
  320. package/src/val/PackFuncVal.ts +0 -63
  321. package/src/val/PathFuncVal.ts +0 -32
  322. package/src/val/PathVal.ts +0 -66
  323. package/src/val/PlaceVal.ts +0 -45
  324. package/src/val/PlusOpVal.ts +18 -75
  325. package/src/val/PrefFuncVal.ts +0 -1
  326. package/src/val/PrefVal.ts +0 -179
  327. package/src/val/RecurseVal.ts +0 -81
  328. package/src/val/RefVal.ts +1 -285
  329. package/src/val/ReferFuncVal.ts +0 -255
  330. package/src/val/ScalarKindVal.ts +0 -50
  331. package/src/val/ScalarVal.ts +0 -12
  332. package/src/val/StrFuncVal.ts +0 -44
  333. package/src/val/SuperFuncVal.ts +0 -42
  334. package/src/val/TopVal.ts +0 -1
  335. package/src/val/TranslateFuncVal.ts +1 -51
  336. package/src/val/UpperFuncVal.ts +0 -12
  337. package/src/val/Val.ts +3 -192
  338. package/src/val/VarVal.ts +0 -15
  339. package/src/val/arith.ts +0 -92
  340. package/src/val/caserange.ts +0 -62
  341. package/src/val/members.ts +0 -23
  342. package/src/val/numcmp.ts +1 -27
  343. package/src/val/numkind.ts +0 -149
  344. package/src/val/valutil.ts +0 -16
  345. package/src/vet.ts +1 -582
  346. package/src/view.ts +0 -507
  347. package/src/walk.ts +0 -41
  348. package/dist/std.d.ts +0 -3
  349. package/dist/std.js +0 -672
  350. package/dist/std.js.map +0 -1
  351. package/dist/val/FormFuncVal.js +0 -55
  352. package/dist/val/FormFuncVal.js.map +0 -1
  353. package/dist/val/NamerFuncVal.d.ts +0 -12
  354. package/dist/val/NamerFuncVal.js +0 -176
  355. package/dist/val/NamerFuncVal.js.map +0 -1
  356. package/src/std.ts +0 -683
package/dist/std.js DELETED
@@ -1,672 +0,0 @@
1
- "use strict";
2
- /* Copyright (c) 2025 Richard Rodger, MIT License */
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.AONTU_MODELS = exports.AONTU_SCHEME = exports.STD_SOURCES = void 0;
5
- // THE LANGUAGE-SUPPLIED MODELS (G4 phase 4,
6
- // docs/capability-review/g4-identity-relations.md): `@"aontu:system"`
7
- // is served from the engine itself — no filesystem, no package
8
- // resolution — so a document may use it under every include capability
9
- // except `none`, and the hermeticity posture is not widened by a source
10
- // that never leaves the process.
11
- //
12
- // EVERY name here carries the `aontu:` prefix (ADR-028): a
13
- // language-supplied schema is spelled one way, and the scheme is what
14
- // makes it unshadowable. There is no second, bare-name spelling.
15
- //
16
- // The TEXT is the shared artifact: go/std.go carries the same bytes,
17
- // and test/spec/aontu-system.tsv pins its canon and its canon-hash in
18
- // both engines, so the two copies cannot drift without a red suite.
19
- // It carries no backtick for that reason: one string literal per port,
20
- // and Go's raw string has no escape.
21
- const STD_SYSTEM = `# aontu:system --- the SYSTEM VOCABULARY (G4 phase 4). Ports, components
22
- # and relations need no syntax: they are schemas. Everything here is
23
- # ordinary unification --- conjunction, spreads, marks, defaults ---
24
- # so the vocabulary costs the language nothing, and an author who wants
25
- # a different one writes it the same way.
26
- #
27
- # EXPERIMENTAL until the distribution layer can version it by
28
- # canon-hash. Entity ids deliberately do NOT embed versions: fusing
29
- # identity and version makes "v1 and v2 describe the same entity"
30
- # inexpressible.
31
-
32
- aontu: System: {
33
- # One end of a connection.
34
- Port: type({ direction:*in | out | inout protocol?:string })
35
-
36
- # A node with ports. Where a Component sits in the tree is what it
37
- # is a component OF -- containment is the document's own structure
38
- # and needs no mark of its own.
39
- Component: type({ ports?:{ &: $.aontu.System.Port } })
40
-
41
- # A component that is a service. Written out rather than as
42
- # $.aontu.System.Component & {kind: service}: a reference from one member of
43
- # this file to another does not survive being INCLUDED into a
44
- # document (the marks the include carries make the referring member
45
- # unusable), so the vocabulary states each schema on its own.
46
- Service: type({ kind:service ports?:{ &: $.aontu.System.Port } })
47
-
48
- # A semantic version (semver.org 2.0.0) as an ORDERED TUPLE: major,
49
- # minor, patch, pre-release. A list and not a dotted string, because a
50
- # version is COMPARED and the comparison runs component by component
51
- # from the left: "1.10.0" sorts below "1.9.0" as text. A list and not
52
- # a map, because a map has no order of its own to compare along.
53
- #
54
- # THE TAIL DEFAULTS, so [1] is [1 0 0 ""] and [1 2] is [1 2 0 ""].
55
- # A major-only version is the common case and should cost one token.
56
- #
57
- # LEADING ZEROES ARE IMPOSSIBLE HERE rather than merely forbidden:
58
- # the numeric parts are integers, and 01 is not a distinct integer
59
- # literal. The spec's "MUST NOT contain leading zeroes" needs no rule.
60
- #
61
- # THE PRE-RELEASE CHECK IS PARTIAL, and deliberately says so. The
62
- # spec's grammar is dot-separated identifiers, each non-empty, each
63
- # [0-9A-Za-z-], numeric ones without leading zeroes -- which as a
64
- # regex is a quantified group containing a quantifier, and re()
65
- # refuses that shape outright (constraint_pattern) because it
66
- # backtracks exponentially. So the alphabet is checked and the
67
- # STRUCTURE is not: "beta_1" is refused, "alpha..1" and "01" are not.
68
- # Carrying the pre-release as a LIST of identifiers would check it in
69
- # full, one identifier per element, and is the change to make if that
70
- # matters more than [1 0 0 ""] does.
71
- #
72
- # BUILD METADATA IS NOT CARRIED. The spec has it, and the spec also
73
- # says it MUST be ignored when determining precedence -- so a type
74
- # whose purpose is comparison is the wrong place for it.
75
- Semver: type(
76
- [
77
- integer & min(0)
78
- *0 | (integer & min(0))
79
- *0 | (integer & min(0))
80
- *"" | (string & re("^[0-9A-Za-z.-]+$"))
81
- ] & length(4)
82
- )
83
- # (The Relation schema that used to sit here is retired with the
84
- # relations: magic key, RELATIONS.0.md P2: a relation is declared
85
- # by the graph atoms at its field -- rel(t) & acyclic() &
86
- # inverse(name) -- and the target half is rel(t)'s flow.)
87
- }
88
- `;
89
- const STD_VIEW = `# aontu:view --- the FIGURE VOCABULARY (VIEWS.0.md, "6. The view
90
- # document"). A view document declares its figures as data, and a
91
- # declaration is just a map: this is the schema for one, so a typo is
92
- # refused where every other mistake in an aontu document is refused --
93
- # at evaluation, by unification -- rather than by the verb that reads
94
- # it afterwards.
95
- #
96
- # @"aontu:view"
97
- # @"./system.aon"
98
- #
99
- # views: {&: $.aontu.View.Figure} & {
100
- # arch: {kind: matrix, order: partition, out: "docs/arch.dsm.txt"}
101
- # }
102
- #
103
- # The keys ARE the view options: the command-line flags without the
104
- # dashes, one vocabulary for the CLI, the library and the file. The
105
- # poset is not among the kinds, because a view document declares
106
- # figures of the ONE document it includes and the poset compares
107
- # several.
108
- #
109
- # EXPERIMENTAL until the distribution layer can version it by
110
- # canon-hash. This file carries no backtick: it is one string literal
111
- # per port, and Go raw strings have no escape.
112
-
113
- aontu: View: {
114
- # One declared figure. The kind says what to draw and out says where
115
- # it belongs; everything else narrows the drawing, and each option
116
- # belongs to the kinds that read it.
117
- Figure: type({
118
- kind: doc | lattice | tree | matrix | graph | layer | sets | layers
119
- | ladder
120
- out: string
121
-
122
- # Every kind.
123
- as?: text | mermaid | dot | er | svg
124
- at?: string
125
- maxRows?: integer & min(0)
126
-
127
- # doc: how many levels of key to draw.
128
- depth?: integer & min(0)
129
-
130
- # tree, matrix, layer: the relation drawn. graph: the predicates
131
- # kept. tree: the subtrees drawn.
132
- relation?: string
133
- relations?: [&: string]
134
- roots?: [&: string]
135
-
136
- # matrix.
137
- order?: canon | partition
138
- closure?: boolean
139
-
140
- # graph, layer.
141
- groupBy?: string
142
- label?: string
143
- layers?: [&: string]
144
- edges?: upward | all | none
145
-
146
- # sets, layers.
147
- sets?: string
148
- member?: string
149
- universe?: string
150
- minDegree?: integer & min(0)
151
- maxCols?: integer & min(0)
152
- minSize?: integer & min(0)
153
- })
154
- }
155
- `;
156
- // THE LANGUAGE-SUPPLIED MODELS (docs/design/MODELS.0.md D1;
157
- // docs/design/RENDER.0.md P0 and P1). `aontu:NAME` is Node's device --
158
- // a prefix no relative path, package name or module path can spell --
159
- // so the resolver routes on it before any other leg and never touches
160
- // the filesystem for it. Held in String.raw so the backslashes of the
161
- // regexes reach the parser as written; no backtick, as above.
162
- //
163
- // aontu:code is the OUTPUT VOCABULARY: an instance of it is what a
164
- // transform evaluates to and what `aontu render` folds to bytes.
165
- // aontu:profile is the schema of a render profile, the data a unit of
166
- // one language is rendered under. Both are pinned by canon and hash
167
- // rows (test/spec/aontu-code.tsv, test/spec/aontu-profile.tsv).
168
- const STD_CODE = String.raw `# aontu:code --- THE OUTPUT VOCABULARY. An aontu transform evaluates to
169
- # an instance of this schema, and 'aontu render' turns the instance
170
- # into bytes. Because it is an ordinary schema, a transform's result is
171
- # checked by unification before anything is rendered.
172
- #
173
- # @"aontu:code"
174
- # code: { units: [ { path: "out.py", lang: "python", decls: [
175
- # { k: "frag", of: emit($.model, %rules) } ] } ] }
176
- #
177
- # TWO ESCAPES, both counted by the render report: {k: "text", lang,
178
- # text} carries verbatim target syntax, and 'x' is an open per-backend
179
- # rider. CONTAINER TYPES TAKE LEAVES ONLY: anything deeper is a named
180
- # alias declaration plus a {k: "ref"}, which keeps this schema's meet
181
- # linear. A FRAGMENT IS FLAT: each piece carries its own depth ('at'),
182
- # so the renderer owns every prefix and no piece nests another; a bare
183
- # string piece is a line at depth 0, and no inline text may hold a line
184
- # terminator -- that is checked here, before any renderer runs.
185
- #
186
- # THE ROOT IS NOT type()-MARKED, on purpose: 'aontu render' reads the
187
- # instance through generate(), and a type()-marked subtree does not
188
- # generate. A document that includes this vocabulary and writes no
189
- # units generates 'code: {units: []}', which is what it said.
190
- #
191
- # EXPERIMENTAL until the distribution layer can version it by
192
- # canon-hash.
193
-
194
- %name = string & re("^[A-Za-z_][A-Za-z0-9_]*$") & length(min(1) & max(255))
195
-
196
- %text = close({ k:"text" lang:string & length(min(1)) text:string })
197
-
198
- %doc = close({
199
- text: string
200
- deprecated?: close({ msg?:string use?:string since?:string })
201
- })
202
-
203
- %check = close({ c:"min" n:number exclusive:*false | boolean })
204
- | close({ c:"max" n:number exclusive:*false | boolean })
205
- | close({ c:"re" p:string })
206
- | close({ c:"len" min?:integer & min(0) max?:integer & min(0) })
207
- | close({ c:"unique" key?:%name })
208
- | close({ c:"ne" of:[&: string | number | boolean] })
209
- | close({ c:"must" note:string })
210
-
211
- %prim = close({
212
- k: "prim"
213
- prim: "string" | "int" | "bigint" | "float" | "decimal" | "bool" | "null" | "any"
214
- })
215
-
216
- %ref = close({ k:"ref" name:%name unit?:string })
217
- %leaf = %prim | %ref | %text
218
-
219
- %type = %leaf
220
- | close({ k:"list" of:%leaf })
221
- | close({ k:"map" key:%leaf of:%leaf })
222
- | close({ k:"opt" of:%leaf })
223
- | close({ k:"union" of:[&: %leaf] })
224
- | close({ k:"lit" of:[&: string | number | boolean | null] })
225
-
226
- %field = close({
227
- name: %name
228
- type: %type
229
- optional: *false | boolean
230
- doc?: %doc
231
- default?: string | number | boolean | null
232
- check?: [&: %check]
233
- rel?: close({ to:string name?:string })
234
- x?: {}
235
- })
236
-
237
- %member = close({ name:%name value?:string | number doc?:%doc x?:{} })
238
-
239
- %param = close({
240
- name: %name
241
- type: %type
242
- default?: string | number | boolean | null
243
- x?: {}
244
- })
245
-
246
- # THE FRAGMENT ALGEBRA. A line's inline pieces hold no terminator; a
247
- # blank is its terminators alone; a raw is the one piece that may carry
248
- # terminators, re-indented to its depth unless it says not to.
249
- %inline = string & re("^[^\n\r]*$") | %ref
250
- %line = close({ k:"line" at:*0 | integer & min(0) & max(64) of:[&: %inline] })
251
- %blank = close({ k:"blank" n:*1 | integer & min(1) & max(16) })
252
-
253
- %raw = close({
254
- k: "raw"
255
- at: *0 | integer & min(0) & max(64)
256
- text: string
257
- reindent: *true | boolean
258
- })
259
-
260
- %piece = %line | %blank | %raw | string & re("^[^\n\r]*$")
261
- %frag = close({ k:"frag" of:[&: %piece] })
262
- %body = %frag | close({ k:"abstract" })
263
-
264
- %record = close({
265
- k: "record"
266
- name: %name
267
- doc?: %doc
268
- open: *false | boolean
269
- fields: [&: %field]
270
- entity?: string
271
- check?: [&: %check]
272
- x?: {}
273
- })
274
-
275
- %enum = close({ k:"enum" name:%name doc?:%doc members:[&: %member] x?:{} })
276
-
277
- %alias = close({
278
- k: "alias"
279
- name: %name
280
- doc?: %doc
281
- type: %type
282
- check?: [&: %check]
283
- x?: {}
284
- })
285
-
286
- %const = close({
287
- k: "const"
288
- name: %name
289
- doc?: %doc
290
- type?: %type
291
- value: string | number | boolean | null
292
- x?: {}
293
- })
294
-
295
- %func = close({
296
- k: "func"
297
- name: %name
298
- doc?: %doc
299
- params: [&: %param]
300
- returns?: %type
301
- body: %body
302
- x?: {}
303
- })
304
-
305
- %decl = %record | %enum | %alias | %const | %func | %text | %frag
306
-
307
- %import = close({
308
- from: string & length(min(1))
309
- names?: [&: %name]
310
- alias?: %name
311
- x?: {}
312
- })
313
-
314
- %unit = close({
315
- path: string & length(min(1))
316
- lang: string & length(min(1))
317
- pkg?: string
318
- doc?: %doc
319
- imports?: [&: %import]
320
- decls: [&: %decl]
321
- profile?: {}
322
- x?: {}
323
- })
324
-
325
- %source = close({ path?:string hash?:string & re("^aon1-[A-Za-z0-9_-]+$") })
326
-
327
- aontu: Code: close({ source?:%source units:[&: %unit] })
328
- `;
329
- const STD_PROFILE = String.raw `# aontu:profile --- THE PROFILE VOCABULARY. A profile is the data
330
- # 'aontu render' applies to a unit of one language, and it is DATA and
331
- # only data: a field belongs here only if the renderer applies it
332
- # without looking at the shape of any node. Anything else is a lowering
333
- # and lives in the transform.
334
- #
335
- # @"aontu:profile"
336
- # profile: { lang: "python", indent: { unit: " ", width: 4 } }
337
- #
338
- # Three profiles are bundled with the engine -- aontu:lang/typescript,
339
- # aontu:lang/go and aontu:lang/text -- and a unit is matched to one by
340
- # its 'lang'. A fragment-only unit needs nothing beyond 'indent'.
341
- #
342
- # THE ROOT IS NOT type()-MARKED, for the reason aontu:code's is not:
343
- # 'aontu render' reads a profile through generate().
344
- #
345
- # EXPERIMENTAL until the distribution layer can version it by
346
- # canon-hash.
347
-
348
- %name = string & re("^[A-Za-z_][A-Za-z0-9_]*$")
349
-
350
- %case = "as-is" | "camel" | "pascal" | "snake" | "screaming" | "kebab"
351
-
352
- %comment = close({ open?:string prefix?:string close?:string })
353
-
354
- %form = close({
355
- open: *"" | string
356
- close: *"" | string
357
- prec: *9 | integer & min(0) & max(9)
358
- childPrec: *0 | integer & min(0) & max(9)
359
- })
360
-
361
- %profile = close({
362
- lang: string & length(min(1))
363
- lowering?: "typescript" | "go"
364
- indent: close({
365
- unit: *" " | string & length(min(1))
366
- width: *2 | integer & min(0) & max(16)
367
- })
368
- comment?: close({ line?:%comment block?:%comment doc?:%comment })
369
- str?: close({
370
- quote: *"\"" | string & length(min(1) & max(1))
371
- escape: { &: string }
372
- })
373
- ident?: close({
374
- chars: *"ascii-word" | "ascii-word"
375
- reserved?: [&: string]
376
- case?: close({
377
- record?: %case
378
- field?: %case
379
- enum?: %case
380
- member?: %case
381
- const?: %case
382
- func?: %case
383
- param?: %case
384
- alias?: %case
385
- })
386
- acronyms?: [&: %name]
387
- })
388
- types?: close({
389
- prim?: { &: string }
390
- list?: %form
391
- map?: %form
392
- opt?: %form
393
- union?: %form
394
- lit?: %form
395
- })
396
- banner?: string
397
- })
398
-
399
- aontu: Profile: %profile
400
- `;
401
- // The text profile (RENDER.0.md D5): the profile of a fragment-only
402
- // unit, and the fallback of every language without a lowering.
403
- const STD_LANG_TEXT = String.raw `# aontu:lang/text --- THE TEXT PROFILE. The profile of a unit whose
404
- # declarations are fragments and text escapes only: indentation, and
405
- # nothing else, since a fold over fragments applies nothing else. Every
406
- # language without a lowering renders under it (docs/design/RENDER.0.md
407
- # D5), and a reference inline renders as its name, verbatim.
408
- #
409
- # EXPERIMENTAL until the distribution layer can version it by
410
- # canon-hash.
411
-
412
- @"aontu:profile"
413
-
414
- aontu: Profile: { lang:"text" indent:{ unit:" " width:2 } }
415
- `;
416
- // THE TYPESCRIPT PROFILE (docs/design/RENDER.0.md D5, P5): the data the
417
- // typescript lowering renders under -- two spaces, the JSDoc forms, the
418
- // JavaScript string escapes by decimal code point, the reserved words,
419
- // camel and pascal by role, no acronyms (TypeScript's `ledgerId` keeps
420
- // its `Id`), and the type forms whose precedences put the parens in
421
- // `(string | null)[]`. Byte-identical in both ports, pinned by hash.
422
- const STD_LANG_TYPESCRIPT = String.raw `# aontu:lang/typescript --- THE TYPESCRIPT PROFILE. The data a unit of
423
- # TypeScript renders under: indentation, the comment forms, the string
424
- # quote and its escape table, the identifier rules and the type forms.
425
- # The lowering of a declaration to an exported interface is code
426
- # (docs/design/RENDER.0.md D5); everything the lowering reads without
427
- # looking at the shape of a node is here.
428
- #
429
- # EXPERIMENTAL until the distribution layer can version it by
430
- # canon-hash.
431
-
432
- @"aontu:profile"
433
-
434
- aontu: Profile: {
435
- lang: "typescript"
436
- lowering: "typescript"
437
- indent: { unit:" " width:2 }
438
- comment: line: prefix: "// "
439
- comment: block: { open:"/*" prefix:" * " close:" */" }
440
- comment: doc: { open:"/**" prefix:" * " close:" */" }
441
- str: quote: "\""
442
- str: escape: {
443
- "8": "\\b"
444
- "9": "\\t"
445
- "10": "\\n"
446
- "12": "\\f"
447
- "13": "\\r"
448
- "34": "\\\""
449
- "92": "\\\\"
450
- }
451
- ident: {
452
- chars: "ascii-word"
453
- reserved: [
454
- "await"
455
- "break"
456
- "case"
457
- "catch"
458
- "class"
459
- "const"
460
- "continue"
461
- "debugger"
462
- "default"
463
- "delete"
464
- "do"
465
- "else"
466
- "enum"
467
- "export"
468
- "extends"
469
- "false"
470
- "finally"
471
- "for"
472
- "function"
473
- "if"
474
- "implements"
475
- "import"
476
- "in"
477
- "instanceof"
478
- "interface"
479
- "let"
480
- "new"
481
- "null"
482
- "package"
483
- "private"
484
- "protected"
485
- "public"
486
- "return"
487
- "static"
488
- "super"
489
- "switch"
490
- "this"
491
- "throw"
492
- "true"
493
- "try"
494
- "typeof"
495
- "var"
496
- "void"
497
- "while"
498
- "with"
499
- "yield"
500
- ]
501
- case: record: "pascal"
502
- case: field: "camel"
503
- case: enum: "pascal"
504
- case: member: "pascal"
505
- case: const: "camel"
506
- case: func: "camel"
507
- case: param: "camel"
508
- case: alias: "pascal"
509
- acronyms: []
510
- }
511
- types: prim: {
512
- string: "string"
513
- int: "number"
514
- bigint: "bigint"
515
- float: "number"
516
- decimal: "string"
517
- bool: "boolean"
518
- null: "null"
519
- any: "unknown"
520
- }
521
- types: list: { close:"[]" childPrec:2 }
522
- types: map: { open:"Record<" close:">" }
523
- types: opt: { close:" | null" prec:1 childPrec:2 }
524
- types: union: { prec:1 childPrec:2 }
525
- types: lit: prec: 1
526
- banner: "Code generated by aontu from {path}. DO NOT EDIT."
527
- }
528
- `;
529
- // THE GO PROFILE (docs/design/RENDER.0.md D5, P5): a tab, the line-comment
530
- // doc form, the Go string escapes, the 25 keywords, pascal by role with
531
- // the acronym set that makes `ledgerId` `LedgerID`, and the type forms
532
- // -- `[]T`, `map[K]V`, `*T` -- none of which needs a paren.
533
- // Byte-identical in both ports, pinned by hash.
534
- const STD_LANG_GO = String.raw `# aontu:lang/go --- THE GO PROFILE. The data a unit of Go renders
535
- # under: a tab of indentation, the comment forms, the string quote and
536
- # its escape table, the identifier rules -- pascal by role, and the
537
- # acronym set that spells ID and URL -- and the type forms. The lowering
538
- # of a declaration to a struct type is code (docs/design/RENDER.0.md D5);
539
- # everything the lowering reads without looking at the shape of a node
540
- # is here.
541
- #
542
- # EXPERIMENTAL until the distribution layer can version it by
543
- # canon-hash.
544
-
545
- @"aontu:profile"
546
-
547
- aontu: Profile: {
548
- lang: "go"
549
- lowering: "go"
550
- indent: { unit:"\t" width:1 }
551
- comment: { line:prefix:"// " block:{ open:"/*" close:"*/" } doc:prefix:"// " }
552
- str: quote: "\""
553
- str: escape: {
554
- "7": "\\a"
555
- "8": "\\b"
556
- "9": "\\t"
557
- "10": "\\n"
558
- "11": "\\v"
559
- "12": "\\f"
560
- "13": "\\r"
561
- "34": "\\\""
562
- "92": "\\\\"
563
- }
564
- ident: {
565
- chars: "ascii-word"
566
- reserved: [
567
- "break"
568
- "case"
569
- "chan"
570
- "const"
571
- "continue"
572
- "default"
573
- "defer"
574
- "else"
575
- "fallthrough"
576
- "for"
577
- "func"
578
- "go"
579
- "goto"
580
- "if"
581
- "import"
582
- "interface"
583
- "map"
584
- "package"
585
- "range"
586
- "return"
587
- "select"
588
- "struct"
589
- "switch"
590
- "type"
591
- "var"
592
- ]
593
- case: record: "pascal"
594
- case: field: "pascal"
595
- case: enum: "pascal"
596
- case: member: "pascal"
597
- case: const: "pascal"
598
- case: func: "pascal"
599
- case: param: "camel"
600
- case: alias: "pascal"
601
- acronyms: [
602
- "ACL"
603
- "API"
604
- "ASCII"
605
- "CPU"
606
- "CSS"
607
- "DNS"
608
- "EOF"
609
- "GUID"
610
- "HTML"
611
- "HTTP"
612
- "HTTPS"
613
- "ID"
614
- "IP"
615
- "JSON"
616
- "LHS"
617
- "QPS"
618
- "RAM"
619
- "RHS"
620
- "RPC"
621
- "SLA"
622
- "SMTP"
623
- "SQL"
624
- "SSH"
625
- "TCP"
626
- "TLS"
627
- "TTL"
628
- "UDP"
629
- "UI"
630
- "UID"
631
- "UUID"
632
- "URI"
633
- "URL"
634
- "UTF8"
635
- "VM"
636
- "XML"
637
- "XMPP"
638
- "XSRF"
639
- "XSS"
640
- ]
641
- }
642
- types: prim: {
643
- string: "string"
644
- int: "int64"
645
- bigint: "string"
646
- float: "float64"
647
- decimal: "string"
648
- bool: "bool"
649
- null: "any"
650
- any: "any"
651
- }
652
- types: list: open: "[]"
653
- types: map: open: "map["
654
- types: opt: open: "*"
655
- banner: "Code generated by aontu from {path}. DO NOT EDIT."
656
- }
657
- `;
658
- exports.STD_SOURCES = {
659
- 'aontu:system': STD_SYSTEM,
660
- 'aontu:view': STD_VIEW,
661
- 'aontu:code': STD_CODE,
662
- 'aontu:lang/go': STD_LANG_GO,
663
- 'aontu:lang/text': STD_LANG_TEXT,
664
- 'aontu:lang/typescript': STD_LANG_TYPESCRIPT,
665
- 'aontu:profile': STD_PROFILE,
666
- };
667
- // The scheme of a language-supplied model, and the names it serves --
668
- // the set the not-found message names, so a typo does not go looking
669
- // on disk.
670
- exports.AONTU_SCHEME = 'aontu:';
671
- exports.AONTU_MODELS = Object.keys(exports.STD_SOURCES).filter((k) => k.startsWith(exports.AONTU_SCHEME)).sort();
672
- //# sourceMappingURL=std.js.map
package/dist/std.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"std.js","sourceRoot":"","sources":["../src/std.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAEpD,4CAA4C;AAC5C,sEAAsE;AACtE,+DAA+D;AAC/D,uEAAuE;AACvE,wEAAwE;AACxE,iCAAiC;AACjC,EAAE;AACF,2DAA2D;AAC3D,sEAAsE;AACtE,iEAAiE;AACjE,EAAE;AACF,qEAAqE;AACrE,sEAAsE;AACtE,oEAAoE;AACpE,uEAAuE;AACvE,qCAAqC;AAErC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmElB,CAAA;AAGD,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEhB,CAAA;AAGD,4DAA4D;AAC5D,uEAAuE;AACvE,sEAAsE;AACtE,sEAAsE;AACtE,sEAAsE;AACtE,8DAA8D;AAC9D,EAAE;AACF,mEAAmE;AACnE,iEAAiE;AACjE,sEAAsE;AACtE,oEAAoE;AACpE,gEAAgE;AAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgK1B,CAAA;AAGD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuE7B,CAAA;AAGD,oEAAoE;AACpE,+DAA+D;AAC/D,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;CAY/B,CAAA;AAED,wEAAwE;AACxE,wEAAwE;AACxE,uEAAuE;AACvE,uEAAuE;AACvE,oEAAoE;AACpE,qEAAqE;AACrE,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0GrC,CAAA;AAED,2EAA2E;AAC3E,wEAAwE;AACxE,uEAAuE;AACvE,4DAA4D;AAC5D,gDAAgD;AAChD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2H7B,CAAA;AAEY,QAAA,WAAW,GAA2B;IACjD,cAAc,EAAE,UAAU;IAC1B,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,eAAe,EAAE,WAAW;IAC5B,iBAAiB,EAAE,aAAa;IAChC,uBAAuB,EAAE,mBAAmB;IAC5C,eAAe,EAAE,WAAW;CAC7B,CAAA;AAED,sEAAsE;AACtE,qEAAqE;AACrE,WAAW;AACE,QAAA,YAAY,GAAG,QAAQ,CAAA;AACvB,QAAA,YAAY,GACvB,MAAM,CAAC,IAAI,CAAC,QAAA,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAA,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA"}