functionalscript 0.46.0 → 0.47.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 (178) hide show
  1. package/fjs/basen/cbase32/module.f.mjs +18 -10
  2. package/fjs/basen/cbase32/proof.f.d.mts +3 -0
  3. package/fjs/basen/cbase32/proof.f.mjs +24 -2
  4. package/fjs/basen/proof.f.mjs +8 -16
  5. package/fjs/bnf/ll1/proof.f.d.mts +2 -0
  6. package/fjs/bnf/ll1/proof.f.mjs +33 -18
  7. package/fjs/bnf/module.f.d.mts +2 -2
  8. package/fjs/bnf/module.f.mjs +2 -2
  9. package/fjs/cas/proof.f.mjs +4 -26
  10. package/fjs/ci/common/module.f.mjs +6 -0
  11. package/fjs/ci/config/module.f.d.mts +7 -7
  12. package/fjs/ci/config/module.f.mjs +7 -7
  13. package/fjs/cli/module.f.mjs +14 -10
  14. package/fjs/crypto/vdf/module.f.d.mts +0 -1
  15. package/fjs/crypto/vdf/module.f.mjs +3 -14
  16. package/fjs/dev/module.f.mjs +10 -20
  17. package/fjs/djs/parser/module.f.d.mts +101 -53
  18. package/fjs/djs/parser/module.f.mjs +732 -525
  19. package/fjs/djs/parser/proof.f.d.mts +6 -0
  20. package/fjs/djs/parser/proof.f.mjs +315 -11
  21. package/fjs/djs/parser/types.d.ts +29 -2
  22. package/fjs/djs/tokenizer/module.f.mjs +122 -105
  23. package/fjs/djs/tokenizer/proof.f.mjs +17 -0
  24. package/fjs/djs/transpiler/module.f.mjs +4 -5
  25. package/fjs/djs/transpiler/proof.f.d.mts +2 -0
  26. package/fjs/djs/transpiler/proof.f.mjs +25 -0
  27. package/fjs/edag/amnesia/module.f.d.mts +20 -0
  28. package/fjs/edag/amnesia/module.f.mjs +303 -0
  29. package/fjs/edag/amnesia/proof.f.d.mts +79 -0
  30. package/fjs/edag/amnesia/proof.f.mjs +573 -0
  31. package/fjs/edag/amnesia/types.d.ts +15 -0
  32. package/fjs/edag/module.f.d.mts +410 -0
  33. package/fjs/edag/module.f.mjs +559 -0
  34. package/fjs/edag/proof.f.d.mts +116 -0
  35. package/fjs/edag/proof.f.mjs +686 -0
  36. package/fjs/edag/types.d.ts +55 -0
  37. package/fjs/effects/node/memory/module.d.mts +37 -3
  38. package/fjs/effects/node/memory/module.mjs +38 -4
  39. package/fjs/effects/node/memory/proof.d.mts +5 -2
  40. package/fjs/effects/node/memory/proof.mjs +36 -6
  41. package/fjs/effects/node/module.d.mts +9 -1
  42. package/fjs/effects/node/module.f.d.mts +39 -0
  43. package/fjs/effects/node/module.f.mjs +46 -0
  44. package/fjs/effects/node/module.mjs +234 -32
  45. package/fjs/effects/node/types.d.ts +28 -2
  46. package/fjs/effects/node/virtual/module.f.d.mts +19 -10
  47. package/fjs/effects/node/virtual/module.f.mjs +246 -32
  48. package/fjs/effects/node/virtual/proof.f.d.mts +17 -2
  49. package/fjs/effects/node/virtual/proof.f.mjs +232 -8
  50. package/fjs/effects/node/virtual/types.d.ts +57 -1
  51. package/fjs/emergent_testing/browser/proof.d.mts +55 -0
  52. package/fjs/emergent_testing/browser/proof.mjs +352 -0
  53. package/fjs/emergent_testing/browser/species.proof.d.mts +4 -0
  54. package/fjs/emergent_testing/browser/species.proof.mjs +45 -0
  55. package/fjs/emergent_testing/browser.d.mts +79 -0
  56. package/fjs/emergent_testing/browser.mjs +432 -0
  57. package/fjs/emergent_testing/proof.f.d.mts +1 -1
  58. package/fjs/emergent_testing/proof.f.mjs +2 -2
  59. package/fjs/js/string_escape/module.f.d.mts +47 -0
  60. package/fjs/js/string_escape/module.f.mjs +95 -0
  61. package/fjs/js/string_escape/proof.f.d.mts +8 -0
  62. package/fjs/js/string_escape/proof.f.mjs +68 -0
  63. package/fjs/js/tokenizer/module.f.mjs +14 -12
  64. package/fjs/mcp/cas/module.f.d.mts +1 -7
  65. package/fjs/mcp/cas/module.f.mjs +24 -15
  66. package/fjs/mcp/evo/module.f.mjs +9 -24
  67. package/fjs/mcp/module.f.d.mts +3 -1
  68. package/fjs/mcp/module.f.mjs +4 -2
  69. package/fjs/media/json/rtti/module.f.d.mts +2 -2
  70. package/fjs/media/json/rtti/module.f.mjs +1 -1
  71. package/fjs/media/json/schema/module.f.d.mts +15 -5
  72. package/fjs/media/json/schema/module.f.mjs +42 -15
  73. package/fjs/media/json/schema/proof.f.d.mts +10 -1
  74. package/fjs/media/json/schema/proof.f.mjs +88 -16
  75. package/fjs/media/json/serializer/module.f.mjs +14 -26
  76. package/fjs/media/json/types.d.ts +1 -1
  77. package/fjs/media/lock/module.f.d.mts +8 -3
  78. package/fjs/media/lock/module.f.mjs +9 -3
  79. package/fjs/media/lock/proof.f.d.mts +1 -1
  80. package/fjs/media/lock/proof.f.mjs +2 -2
  81. package/fjs/media/lock/types.d.ts +1 -3
  82. package/fjs/media/module.f.d.mts +20 -13
  83. package/fjs/media/module.f.mjs +29 -16
  84. package/fjs/media/note/module.f.d.mts +14 -7
  85. package/fjs/media/note/module.f.mjs +14 -7
  86. package/fjs/media/note/proof.f.mjs +1 -1
  87. package/fjs/media/proof.f.mjs +5 -5
  88. package/fjs/media/revision/module.f.d.mts +8 -2
  89. package/fjs/media/revision/module.f.mjs +9 -3
  90. package/fjs/media/revision/proof.f.mjs +1 -1
  91. package/fjs/media/revision/types.d.ts +1 -1
  92. package/fjs/media/type/module.f.d.mts +20 -0
  93. package/fjs/media/type/module.f.mjs +74 -0
  94. package/fjs/media/type/proof.f.d.mts +5 -0
  95. package/fjs/media/type/proof.f.mjs +24 -1
  96. package/fjs/module.f.mjs +6 -0
  97. package/fjs/path/module.f.d.mts +60 -3
  98. package/fjs/path/module.f.mjs +138 -14
  99. package/fjs/path/proof.f.d.mts +3 -0
  100. package/fjs/path/proof.f.mjs +298 -2
  101. package/fjs/protocol/json_rpc/module.f.d.mts +65 -28
  102. package/fjs/protocol/json_rpc/module.f.mjs +49 -13
  103. package/fjs/protocol/json_rpc/proof.f.d.mts +4 -0
  104. package/fjs/protocol/json_rpc/proof.f.mjs +29 -0
  105. package/fjs/protocol/json_rpc/types.d.ts +12 -2
  106. package/fjs/protocol/mcp/module.f.d.mts +89 -54
  107. package/fjs/protocol/mcp/module.f.mjs +110 -56
  108. package/fjs/protocol/mcp/proof.f.d.mts +13 -0
  109. package/fjs/protocol/mcp/proof.f.mjs +107 -7
  110. package/fjs/protocol/mcp/stdio/module.f.mjs +3 -4
  111. package/fjs/protocol/mcp/stdio/proof.f.mjs +2 -2
  112. package/fjs/protocol/mcp/types.d.ts +14 -2
  113. package/fjs/text/utf8/module.f.mjs +27 -1
  114. package/fjs/text/utf8/proof.f.mjs +37 -0
  115. package/fjs/types/array/module.f.mjs +18 -11
  116. package/fjs/types/array/proof.f.mjs +27 -1
  117. package/fjs/types/bigfloat/module.f.d.mts +48 -9
  118. package/fjs/types/bigfloat/module.f.mjs +147 -59
  119. package/fjs/types/bigfloat/proof.f.d.mts +2 -0
  120. package/fjs/types/bigfloat/proof.f.mjs +136 -4
  121. package/fjs/types/bigfloat/types.d.ts +17 -0
  122. package/fjs/types/function/module.f.d.mts +11 -2
  123. package/fjs/types/function/module.f.mjs +20 -2
  124. package/fjs/types/function/proof.f.mjs +5 -1
  125. package/fjs/types/phantom/types.d.ts +21 -0
  126. package/fjs/types/result/module.f.d.mts +4 -4
  127. package/fjs/types/result/module.f.mjs +2 -2
  128. package/fjs/types/result/proof.f.d.mts +6 -2
  129. package/fjs/types/result/proof.f.mjs +17 -1
  130. package/fjs/types/rtti/common/module.f.d.mts +78 -5
  131. package/fjs/types/rtti/common/module.f.mjs +168 -3
  132. package/fjs/types/rtti/common/proof.f.d.mts +14 -0
  133. package/fjs/types/rtti/common/proof.f.mjs +61 -2
  134. package/fjs/types/rtti/common/types.d.ts +23 -1
  135. package/fjs/types/rtti/data/module.f.d.mts +57 -1
  136. package/fjs/types/rtti/data/module.f.mjs +241 -47
  137. package/fjs/types/rtti/data/proof.f.d.mts +10 -0
  138. package/fjs/types/rtti/data/proof.f.mjs +272 -39
  139. package/fjs/types/rtti/data/types.d.ts +14 -7
  140. package/fjs/types/rtti/host.proof.d.mts +33 -0
  141. package/fjs/types/rtti/host.proof.mjs +170 -0
  142. package/fjs/types/rtti/module.f.d.mts +51 -6
  143. package/fjs/types/rtti/module.f.mjs +50 -3
  144. package/fjs/types/rtti/parse/module.f.d.mts +31 -24
  145. package/fjs/types/rtti/parse/module.f.mjs +197 -59
  146. package/fjs/types/rtti/parse/proof.f.d.mts +37 -2
  147. package/fjs/types/rtti/parse/proof.f.mjs +171 -47
  148. package/fjs/types/rtti/proof.f.d.mts +6 -0
  149. package/fjs/types/rtti/proof.f.mjs +42 -1
  150. package/fjs/types/rtti/ts/module.f.d.mts +9 -3
  151. package/fjs/types/rtti/ts/module.f.mjs +68 -15
  152. package/fjs/types/rtti/ts/proof.f.d.mts +42 -2
  153. package/fjs/types/rtti/ts/proof.f.mjs +139 -6
  154. package/fjs/types/rtti/ts/types.d.ts +164 -16
  155. package/fjs/types/rtti/types.d.ts +31 -3
  156. package/fjs/types/rtti/validate/module.f.d.mts +120 -0
  157. package/fjs/types/rtti/validate/module.f.mjs +351 -0
  158. package/fjs/types/rtti/validate/proof.f.d.mts +154 -0
  159. package/fjs/types/rtti/validate/proof.f.mjs +781 -0
  160. package/fjs/types/ts/types.d.ts +4 -0
  161. package/fjs/web/module.f.d.mts +115 -0
  162. package/fjs/web/module.f.mjs +581 -0
  163. package/fjs/web/proof.f.d.mts +39 -0
  164. package/fjs/web/proof.f.mjs +413 -0
  165. package/fjs/web/types.d.ts +39 -0
  166. package/fjs/website/browser-prepare.d.mts +5 -0
  167. package/fjs/website/browser-prepare.mjs +115 -0
  168. package/fjs/website/browser-source.d.mts +37 -0
  169. package/fjs/website/browser-source.mjs +202 -0
  170. package/fjs/website/browser-source.proof.d.mts +31 -0
  171. package/fjs/website/browser-source.proof.mjs +162 -0
  172. package/fjs/website/browser.d.mts +5 -0
  173. package/fjs/website/browser.mjs +8 -0
  174. package/fjs/website/module.f.d.mts +3 -3
  175. package/fjs/website/module.f.mjs +62 -9
  176. package/fjs/website/proof.f.d.mts +4 -0
  177. package/fjs/website/proof.f.mjs +18 -3
  178. package/package.json +2 -3
@@ -0,0 +1,410 @@
1
+ /**
2
+ * @module
3
+ *
4
+ * @import { Assert } from '../asserts/types.ts'
5
+ * @import { Check, Check3 } from '../types/rtti/ts/types.ts'
6
+ * @import {
7
+ * Array,
8
+ * Exp,
9
+ * Primitive,
10
+ * Property,
11
+ * NumberCast,
12
+ * Object,
13
+ * PropertyLambda,
14
+ * OptionLambda,
15
+ * OptionPropertyLambda,
16
+ * Call,
17
+ * Dot,
18
+ * OptionDot,
19
+ * OptionCall,
20
+ * Comma,
21
+ * Op2Id,
22
+ * Op2,
23
+ * Op1Id,
24
+ * Op1,
25
+ * Op0Id,
26
+ * Op0,
27
+ * Spread,
28
+ * Items,
29
+ * Properties,
30
+ * Exps,
31
+ * } from './types.ts'
32
+ * @import { Phantom } from '../types/phantom/types.ts'
33
+ */
34
+ import type { Assert } from '../asserts/types.ts';
35
+ import type { Check, Check3 } from '../types/rtti/ts/types.ts';
36
+ import type { Array, Exp, Primitive, Property, NumberCast, Object, PropertyLambda, OptionLambda, OptionPropertyLambda, Call, Dot, OptionDot, OptionCall, Comma, Op2Id, Op2, Op1Id, Op1, Op0Id, Op0, Spread, Items, Properties, Exps } from './types.ts';
37
+ import type { Phantom } from '../types/phantom/types.ts';
38
+ /**
39
+ * Every tuple here is closed — the members it declares and nothing else, which
40
+ * is what a bare `Tuple` says ("Structs and tuples are closed" in
41
+ * `../types/rtti/README.md`). That is load-bearing rather than incidental: the
42
+ * chain grammar below claims each JS chain has exactly one spelling, and an
43
+ * `open` tuple would let any node carry a trailing element nothing reads,
44
+ * splitting one function into unboundedly many graphs. So do **not** wrap any
45
+ * of these in `open`. No operand of any node is optional either: a chain step
46
+ * that does no further work carries an explicit `null` continuation, never a
47
+ * missing position.
48
+ *
49
+ * Do not call `parse(exp)` or rely on `validate(exp)` rejecting cycles
50
+ * without reading `../types/rtti/todo/identity-aware-parse.md` first —
51
+ * neither is identity-aware, and that TODO covers why and what's missing.
52
+ */
53
+ /**
54
+ * Written out explicitly, not `@type {const}`: that can't apply to the
55
+ * arrow function itself (TS1355, literals only), and applied to just the
56
+ * returned array it still can't resolve the cycle back through `array`/
57
+ * `object`/`op0`/... to `exp` — declaration emit elides it to `any`.
58
+ *
59
+ * @type {() => readonly['or',
60
+ * typeof primitive,
61
+ * typeof array,
62
+ * typeof object,
63
+ * typeof dot,
64
+ * typeof call,
65
+ * typeof optionDot,
66
+ * typeof optionCall,
67
+ * typeof comma,
68
+ * typeof op2,
69
+ * typeof op1,
70
+ * typeof op0,
71
+ * ]}
72
+ */
73
+ declare const _exp: () => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0];
74
+ /** @type {Phantom<typeof _exp, Exp>} */
75
+ export declare const exp: Phantom<typeof _exp, Exp>;
76
+ export type _ExpAssert = Assert<Check3<Exp, typeof _exp, typeof exp>>;
77
+ /** @typedef {Assert<Check3<Exp, typeof _exp, typeof exp>>} _ExpAssert */
78
+ /**
79
+ * Bare constant values — no tag, no operands, not an operation node at all.
80
+ * `undefined` is deliberately not among them: its EDAG representation,
81
+ * `['undefined']`, *is* a tagged operation node (so a bare `undefined` stays
82
+ * distinguishable from a missing tuple position), which puts it in the
83
+ * `op0`/`op1`/`op2` grouping below by the same arity rule as every other
84
+ * operation, not here.
85
+ */
86
+ export declare const primitive: import("../types/rtti/types.ts").Or<readonly [null, import("../types/rtti/types.ts")._Type0<"boolean">, import("../types/rtti/types.ts")._Type0<"number">, import("../types/rtti/types.ts")._Type0<"string">, import("../types/rtti/types.ts").Bigint]>;
87
+ export type _Primitive = Assert<Check<Primitive, typeof primitive>>;
88
+ /** @typedef {Assert<Check<Primitive, typeof primitive>>} _Primitive */
89
+ export declare const exps: import("../types/rtti/types.ts").Type1<"array", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>>;
90
+ export type _Exps = Assert<Check<Exps, typeof exps>>;
91
+ /** @typedef {Assert<Check<Exps, typeof exps>>} _Exps */
92
+ /**
93
+ * ```js
94
+ * [...exp] // as an array item, through `items` — see `array`
95
+ * {...exp} // as an object property, through `properties` — see `object`
96
+ * ```
97
+ *
98
+ * Not a top-level `Exp`: `spread` only appears as an `items`/`properties`
99
+ * alternative, never as an operand an operation node can hold directly.
100
+ */
101
+ export declare const spread: readonly ['...', Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>];
102
+ export type _Spread = Assert<Check<Spread, typeof spread>>;
103
+ /** @typedef {Assert<Check<Spread, typeof spread>>} _Spread */
104
+ /** An array element: a plain `exp`, or a `spread` splicing another array in. */
105
+ export declare const items: import("../types/rtti/types.ts").Or<readonly [Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, readonly ["...", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>]]>;
106
+ export type _Items = Assert<Check<Items, typeof items>>;
107
+ /** @typedef {Assert<Check<Items, typeof items>>} _Items */
108
+ /**
109
+ * ```js
110
+ * [exp0, exp1]
111
+ * [exp0, ...exp1]
112
+ * ```
113
+ */
114
+ export declare const array: readonly ['[]', import("../types/rtti/types.ts").Type1<"array", import("../types/rtti/types.ts").Or<readonly [Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, readonly ["...", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>]]>>];
115
+ export type _Array = Assert<Check<Array, typeof array>>;
116
+ /** @typedef {Assert<Check<Array, typeof array>>} _Array */
117
+ /**
118
+ * A structural operand of `object`, not an independently evaluated EDAG
119
+ * node: nothing ever evaluates a descriptor as a value, so whether one is
120
+ * shared by reference or written twice with equal content is unobservable,
121
+ * and conforming VMs may legally differ on it. Only the `key` and `value`
122
+ * operands are real nodes, their identities shared normally.
123
+ *
124
+ * The key stays `exp`, not narrowed to a string constant, and its evaluated
125
+ * value is coerced via JS `ToPropertyKey` when the property is defined —
126
+ * see `../../todo/edag-stage1-discussion.md` subject 4.
127
+ */
128
+ export declare const property: readonly [':', Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>];
129
+ export type _Property = Assert<Check<Property, typeof property>>;
130
+ /** @typedef {Assert<Check<Property, typeof property>>} _Property */
131
+ /** An object entry: a plain `property`, or a `spread` splicing another object in. */
132
+ export declare const properties: import("../types/rtti/types.ts").Or<readonly [readonly [":", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>], readonly ["...", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>]]>;
133
+ export type _Properties = Assert<Check<Properties, typeof properties>>;
134
+ /** @typedef {Assert<Check<Properties, typeof properties>>} _Properties */
135
+ /**
136
+ * ```js
137
+ * {
138
+ * a: exp0,
139
+ * "a": exp1,
140
+ * [exp2]: exp3,
141
+ * ...exp4,
142
+ * }
143
+ * ```
144
+ *
145
+ * The entries are an ordered sequence, applied as if in written order —
146
+ * never sorted or deduplicated: order is observable (enumeration,
147
+ * overwrites), and duplicate keys are allowed with the later entry winning,
148
+ * which is also required once computed keys are admitted, since key
149
+ * equality may not be decidable at validation time.
150
+ *
151
+ * `__proto__` is a data key, never a prototype assignment: an entry whose
152
+ * key evaluates to `__proto__` defines an ordinary own property, and a
153
+ * printer must spell it computed — `{ ["__proto__"]: value }`, the only
154
+ * object-literal form that reproduces it; the identifier and string
155
+ * spellings assign a prototype instead and lose the property. See "the
156
+ * `__proto__` key" in `../../spec/README.md`.
157
+ */
158
+ export declare const object: readonly ['{}', import("../types/rtti/types.ts").Type1<"array", import("../types/rtti/types.ts").Or<readonly [readonly [":", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>], readonly ["...", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>]]>>];
159
+ export type _Object = Assert<Check<Object, typeof object>>;
160
+ /** @typedef {Assert<Check<Object, typeof object>>} _Object */
161
+ /**
162
+ * ```js
163
+ * Number(exp)
164
+ * ```
165
+ */
166
+ export declare const numberCast: readonly ['Number', Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>];
167
+ export type _NumberCast = Assert<Check<NumberCast, typeof numberCast>>;
168
+ /**
169
+ * @typedef {Assert<Check<NumberCast, typeof numberCast>>} _NumberCast
170
+ */
171
+ /**
172
+ * A property/index operand: a plain `string` or `number` key, or a `Number`
173
+ * cast around a computed `exp` (`arr[i]`, where `i` is itself an expression).
174
+ *
175
+ * Every naming position in the chain nodes below uses this rather than a bare
176
+ * `exp` — `.`, `?.`, and the `|.` step. Widening them to `exp` was weighed and
177
+ * rejected: `exp` and `index` overlap (`['Number', e]` is both a `numberCast`
178
+ * and an `op1`), so the wider spelling would buy a second reading of every
179
+ * computed key without buying any expression a `Number` cast cannot already
180
+ * name.
181
+ *
182
+ * Does not exclude `'constructor'`/`'__proto__'` — TODO, see
183
+ * `../types/rtti/todo/excluded-string-values.md`.
184
+ */
185
+ export declare const index: import("../types/rtti/types.ts").Or<readonly [readonly ["Number", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>], import("../types/rtti/types.ts")._Type0<"string">, import("../types/rtti/types.ts")._Type0<"number">]>;
186
+ /**
187
+ * The continuation of a step that produced a plain value **inside** an open
188
+ * region — what `?.()` owns, and what a call step hands on.
189
+ *
190
+ * `|()` stays in the region because the region has to cover the call:
191
+ * `a?.(...b)(...c)` skips the second call too. `|.` stays for the same
192
+ * reason, and hands on a receiver. Neither `|?.()` nor `|!()` is here: with P
193
+ * dead there is nothing for a guard or a close to protect that a nested node
194
+ * would not protect equally, so admitting them would only add a second
195
+ * spelling.
196
+ *
197
+ * @type {() => readonly['or',
198
+ * null,
199
+ * readonly['|()', typeof exp, typeof optionLambda],
200
+ * readonly['|.', typeof index, typeof optionPropertyLambda],
201
+ * ]}
202
+ */
203
+ declare const _optionLambda: () => readonly ['or', null, readonly ['|()', typeof exp, typeof optionLambda], readonly ['|.', typeof index, typeof optionPropertyLambda]];
204
+ /** @type {Phantom<typeof _optionLambda, OptionLambda>} */
205
+ export declare const optionLambda: Phantom<typeof _optionLambda, OptionLambda>;
206
+ export type _OptionLambda = Assert<Check3<OptionLambda, typeof _optionLambda, typeof optionLambda>>;
207
+ /**
208
+ * @typedef {Assert<Check3<OptionLambda, typeof _optionLambda, typeof optionLambda>>} _OptionLambda
209
+ */
210
+ /**
211
+ * The continuation of a property step **inside** an open region — both bits
212
+ * live, so this is the state with every production.
213
+ *
214
+ * Its three call forms are a complete taxonomy of how a call can relate to
215
+ * the region around it, and there is no fourth:
216
+ *
217
+ * ```js
218
+ * a?.b(...c) // ['?.', a, 'b', ['|()', c, null]] inherits the guard
219
+ * a?.b?.(...c) // ['?.', a, 'b', ['|?.()', c, null]] adds its own
220
+ * (a?.b)(...c) // ['?.', a, 'b', ['|!()', c, null]] escapes it
221
+ * ```
222
+ *
223
+ * `|!()` is the one step a short-circuit does not skip: the parentheses ended
224
+ * the region, so the `undefined` it produced is what gets called. `|!` pairs
225
+ * only with `()` because only a call consumes a receiver — a close-then-access
226
+ * `|!.` would just be a `dot` over the whole node, which nesting already
227
+ * spells.
228
+ *
229
+ * @type {() => readonly['or',
230
+ * null,
231
+ * readonly['|()', typeof exp, typeof optionLambda],
232
+ * readonly['|.', typeof index, typeof optionPropertyLambda],
233
+ * readonly['|?.()', typeof exp, typeof optionLambda],
234
+ * readonly['|!()', typeof exp, null],
235
+ * ]}
236
+ */
237
+ declare const _optionPropertyLambda: () => readonly ['or', null, readonly ['|()', typeof exp, typeof optionLambda], readonly ['|.', typeof index, typeof optionPropertyLambda], readonly ['|?.()', typeof exp, typeof optionLambda], readonly ['|!()', typeof exp, null]];
238
+ /** @type {Phantom<typeof _optionPropertyLambda, OptionPropertyLambda>} */
239
+ export declare const optionPropertyLambda: Phantom<typeof _optionPropertyLambda, OptionPropertyLambda>;
240
+ export type _OptionPropertyLambda = Assert<Check3<OptionPropertyLambda, typeof _optionPropertyLambda, typeof optionPropertyLambda>>;
241
+ /**
242
+ * @typedef {Assert<Check3<OptionPropertyLambda, typeof _optionPropertyLambda, typeof optionPropertyLambda>>} _OptionPropertyLambda
243
+ */
244
+ /**
245
+ * The continuation of a `dot` — a receiver is live and no region is open.
246
+ *
247
+ * Only the two call steps are here, because only a call can use a receiver.
248
+ * `|()` is terminal: with the receiver spent and no region to be inside, what
249
+ * follows an `a.b(...c)` is an ordinary expression over an ordinary value, so
250
+ * it nests. `|?.()` continues, since it opens a region that then owns the
251
+ * rest of the chain. There is no `|.` production, which is what gives a plain
252
+ * property path exactly one spelling: `a.b.c` is nested `dot`s and nothing
253
+ * else.
254
+ *
255
+ * The terminal's third operand is a literal `null`, not the absence of one.
256
+ * Uniform arity is what keeps closedness able to tell it from `['|()', c, k]`:
257
+ * were the terminal two elements long, a continuation handed to a
258
+ * `propertyLambda` slot would be read as the terminal with the rest silently
259
+ * dropped.
260
+ */
261
+ export declare const propertyLambda: import("../types/rtti/types.ts").Or<readonly [null, readonly ["|()", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, null], readonly ["|?.()", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, Phantom<() => readonly ['or', null, readonly ['|()', typeof exp, typeof optionLambda], readonly ['|.', typeof index, typeof optionPropertyLambda]], OptionLambda>]]>;
262
+ export type _PropertyLambda = Assert<Check<PropertyLambda, typeof propertyLambda>>;
263
+ /**
264
+ * @typedef {Assert<Check<PropertyLambda, typeof propertyLambda>>} _PropertyLambda
265
+ */
266
+ /**
267
+ * ```js
268
+ * exp0(...exp1)
269
+ * ```
270
+ *
271
+ * A call with **no** receiver and no region: the callee is an ordinary
272
+ * expression, so a chain never reaches this node — `a.b(...c)` is a `dot`
273
+ * whose continuation is the call, and `(0, a.b)(...c)` is this node over a
274
+ * complete `dot`. The two differ, which is why the distinction is structural.
275
+ *
276
+ * The last operand is one node evaluating to the complete argument array,
277
+ * not a literal operand list: `f(a, b)` is `['()', f, ['[]', [a, b]]]`,
278
+ * while spread `f(...xs)` is `['()', f, xs]`.
279
+ */
280
+ export declare const call: readonly ['()', Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>];
281
+ export type _Call = Assert<Check<Call, typeof call>>;
282
+ /** @typedef {Assert<Check<Call, typeof call>>} _Call */
283
+ /**
284
+ * ```js
285
+ * exp0.k // ['.', exp0, 'k', null]
286
+ * exp0[exp1] // ['.', exp0, ['Number', exp1], null]
287
+ * exp0.k(...exp2) // ['.', exp0, 'k', ['|()', exp2, null]]
288
+ * exp0.k?.(...exp2) // ['.', exp0, 'k', ['|?.()', exp2, null]]
289
+ * ```
290
+ *
291
+ * The naming operand is an `index`, not an `exp`, so a computed key is spelled
292
+ * `['Number', exp]`: `['.', a, ['args'], null]` does not validate.
293
+ *
294
+ * Property access, owning whatever the receiver it produces is used for. The
295
+ * `null` continuation is the plain read — the receiver is dropped, as JS
296
+ * drops it — and the two call continuations are the only things that can use
297
+ * it.
298
+ */
299
+ export declare const dot: readonly ['.', Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, import("../types/rtti/types.ts").Or<readonly [readonly ["Number", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>], import("../types/rtti/types.ts")._Type0<"string">, import("../types/rtti/types.ts")._Type0<"number">]>, import("../types/rtti/types.ts").Or<readonly [null, readonly ["|()", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, null], readonly ["|?.()", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, Phantom<() => readonly ['or', null, readonly ['|()', typeof exp, typeof optionLambda], readonly ['|.', typeof index, typeof optionPropertyLambda]], OptionLambda>]]>];
300
+ export type _Dot = Assert<Check<Dot, typeof dot>>;
301
+ /** @typedef {Assert<Check<Dot, typeof dot>>} _Dot */
302
+ /**
303
+ * ```js
304
+ * exp0?.k // ['?.', exp0, 'k', null]
305
+ * exp0?.[exp1] // ['?.', exp0, ['Number', exp1], null]
306
+ * exp0?.k.m // ['?.', exp0, 'k', ['|.', 'm', null]]
307
+ * (exp0?.k)(...exp2) // ['?.', exp0, 'k', ['|!()', exp2, null]]
308
+ * ```
309
+ *
310
+ * Optional property access, owning the rest of its optional region. If `exp0`
311
+ * is nullish the region short-circuits: neither the `index` nor any step of
312
+ * the continuation is evaluated — in particular `a?.[k]` does not evaluate
313
+ * `k` — and the node's value is `undefined`, unless the continuation reaches
314
+ * a `|!()`, which the parentheses put *outside* the region and which
315
+ * therefore calls that `undefined`.
316
+ *
317
+ * Where the region ends is the grouping: `a?.b.c` is one node,
318
+ * `['?.', a, 'b', ['|.', 'c', null]]`, while `(a?.b).c` is a `dot` over a
319
+ * complete `['?.', a, 'b', null]` — and throws when `a` is nullish, as JS
320
+ * does.
321
+ */
322
+ export declare const optionDot: readonly ['?.', Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, import("../types/rtti/types.ts").Or<readonly [readonly ["Number", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>], import("../types/rtti/types.ts")._Type0<"string">, import("../types/rtti/types.ts")._Type0<"number">]>, Phantom<() => readonly ['or', null, readonly ['|()', typeof exp, typeof optionLambda], readonly ['|.', typeof index, typeof optionPropertyLambda], readonly ['|?.()', typeof exp, typeof optionLambda], readonly ['|!()', typeof exp, null]], OptionPropertyLambda>];
323
+ export type _OptionDot = Assert<Check<OptionDot, typeof optionDot>>;
324
+ /** @typedef {Assert<Check<OptionDot, typeof optionDot>>} _OptionDot */
325
+ /**
326
+ * ```js
327
+ * exp0?.(...exp1) // ['?.()', exp0, exp1, null]
328
+ * exp0?.(...exp1).k // ['?.()', exp0, exp1, ['|.', 'k', null]]
329
+ * ```
330
+ *
331
+ * Optional call, owning the rest of its optional region the way `?.` does.
332
+ * The callee is an ordinary expression, so this node never carries a receiver
333
+ * — `a.b?.(...c)` is a `dot` with a `|?.()` continuation, not this. If `exp0`
334
+ * is nullish the arguments are not evaluated and the region short-circuits.
335
+ */
336
+ export declare const optionCall: readonly ['?.()', Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, Phantom<() => readonly ['or', null, readonly ['|()', typeof exp, typeof optionLambda], readonly ['|.', typeof index, typeof optionPropertyLambda]], OptionLambda>];
337
+ export type _OptionCall = Assert<Check<OptionCall, typeof optionCall>>;
338
+ /** @typedef {Assert<Check<OptionCall, typeof optionCall>>} _OptionCall */
339
+ /**
340
+ * ```js
341
+ * (exp0, exp1, exp2)
342
+ * ```
343
+ *
344
+ * Establishes all of its operands and takes the value of the last one; the
345
+ * earlier operands exist for their throw-potential only. The shape is a
346
+ * known-incomplete placeholder — it cannot yet say "at least two operands,
347
+ * last is the result, each pre-result operand a true root (not reachable
348
+ * from another operand of the same `,`)". A single-operand `,` is the
349
+ * identity and a reachable operand a redundant anchor — both non-canonical,
350
+ * each splitting one function into two hashes. See the header of
351
+ * `./proof.f.mjs`.
352
+ */
353
+ export declare const comma: readonly [',', import("../types/rtti/types.ts").Type1<"array", Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>>];
354
+ export type _Comma = Assert<Check<Comma, typeof comma>>;
355
+ /**
356
+ * @typedef {Assert<Check<Comma, typeof comma>>} _Comma
357
+ */
358
+ /**
359
+ * `op0`/`op1`/`op2` group operation nodes by their `exp`-operand count —
360
+ * zero, one, or two — not by any semantic category. `undefined`/`args`/
361
+ * `frame` all take zero `exp` operands after the tag, so all three are
362
+ * `op0`, regardless of what each individually means: the `undefined` value,
363
+ * the arguments array, and the captured-consts frame — the way `args` is
364
+ * for the arguments.
365
+ */
366
+ export declare const op0Id: import("../types/rtti/types.ts").Or<readonly ["undefined", "args", "frame"]>;
367
+ export type _Op0Id = Assert<Check<Op0Id, typeof op0Id>>;
368
+ /** @typedef {Assert<Check<Op0Id, typeof op0Id>>} _Op0Id */
369
+ export declare const op0: readonly [import("../types/rtti/types.ts").Or<readonly ["undefined", "args", "frame"]>];
370
+ export type _Op0 = Assert<Check<Op0, typeof op0>>;
371
+ /** @typedef {Assert<Check<Op0, typeof op0>>} _Op0 */
372
+ /**
373
+ * `String`/`Number` are casts, `neg` is arithmetic negation (a word tag —
374
+ * `-` is binary subtraction), `!` is logical and `~` bitwise not.
375
+ */
376
+ export declare const op1Id: import("../types/rtti/types.ts").Or<readonly ["String", "Number", "neg", "!", "~"]>;
377
+ export type _Op1Id = Assert<Check<Op1Id, typeof op1Id>>;
378
+ /** @typedef {Assert<Check<Op1Id, typeof op1Id>>} _Op1Id */
379
+ export declare const op1: readonly [import("../types/rtti/types.ts").Or<readonly ["String", "Number", "neg", "!", "~"]>, Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>];
380
+ export type _Op1 = Assert<Check<Op1, typeof op1>>;
381
+ /** @typedef {Assert<Check<Op1, typeof op1>>} _Op1 */
382
+ /**
383
+ * `=>` builds a function from a frame and a body: the frame operand is one
384
+ * node evaluated in the enclosing scope, while the body is the inner
385
+ * function's graph — deferred, never established when the closure is built,
386
+ * only on each call, against that function's own `args`/`frame`. Calling one
387
+ * is not here: `()` is `['()', exp, exp]` and so *is* binary in operand
388
+ * count, but it is a chain node rather than an operation — the whole point of
389
+ * the chain vocabulary is that a call's receiver comes from the node holding
390
+ * it, which no `op2` id has anywhere to put. `own` is exactly
391
+ * `Object.getOwnPropertyDescriptor(object, key)?.value` — no
392
+ * getter invocation, no prototype chain — where the key operand must
393
+ * evaluate to a string: a runtime-value constraint the shape-only schema
394
+ * cannot express — a computed key's value is only known at execution, so
395
+ * upholding it falls to the executor (`ownJs` in `./proof.f.mjs`; the
396
+ * Operations table in `../../todo/edag-stage1-discussion.md`). The rest
397
+ * are the JS comparison,
398
+ * arithmetic, bitwise, and logical operators they name — with `&&`/`||`/`??`
399
+ * short-circuiting exactly as in JS: their right operand is conditional,
400
+ * never established eagerly. All this laziness is positional, not nodal —
401
+ * the same node referenced from an eager position elsewhere is still
402
+ * evaluated there.
403
+ */
404
+ export declare const op2Id: import("../types/rtti/types.ts").Or<readonly ["=>", "own", "===", "!==", ">", ">=", "<", "<=", "+", "-", "*", "/", "%", "**", "&", "|", "^", "<<", ">>", ">>>", "&&", "||", "??"]>;
405
+ export type _Op2Id = Assert<Check<Op2Id, typeof op2Id>>;
406
+ /** @typedef {Assert<Check<Op2Id, typeof op2Id>>} _Op2Id */
407
+ export declare const op2: readonly [import("../types/rtti/types.ts").Or<readonly ["=>", "own", "===", "!==", ">", ">=", "<", "<=", "+", "-", "*", "/", "%", "**", "&", "|", "^", "<<", ">>", ">>>", "&&", "||", "??"]>, Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>, Phantom<() => readonly ['or', typeof primitive, typeof array, typeof object, typeof dot, typeof call, typeof optionDot, typeof optionCall, typeof comma, typeof op2, typeof op1, typeof op0], Exp>];
408
+ export type _Op2 = Assert<Check<Op2, typeof op2>>;
409
+ export {};
410
+ /** @typedef {Assert<Check<Op2, typeof op2>>} _Op2 */