@cuxt/sandboxjs 0.1.1 → 0.1.4

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 (226) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +198 -185
  3. package/{build → dist/cjs}/Sandbox.d.ts +15 -6
  4. package/dist/cjs/Sandbox.js +126 -0
  5. package/dist/{SandboxExec.d.ts → cjs/SandboxExec.d.ts} +8 -17
  6. package/dist/cjs/SandboxExec.js +227 -0
  7. package/{build/eval.d.ts → dist/cjs/eval/index.d.ts} +10 -2
  8. package/dist/cjs/eval/index.js +233 -0
  9. package/dist/cjs/executor/executorUtils.d.ts +161 -0
  10. package/dist/cjs/executor/executorUtils.js +930 -0
  11. package/dist/cjs/executor/index.d.ts +1 -0
  12. package/dist/cjs/executor/index.js +2 -0
  13. package/dist/cjs/executor/ops/assignment.d.ts +1 -0
  14. package/dist/cjs/executor/ops/assignment.js +88 -0
  15. package/dist/cjs/executor/ops/call.d.ts +1 -0
  16. package/dist/cjs/executor/ops/call.js +160 -0
  17. package/dist/cjs/executor/ops/comparison.d.ts +1 -0
  18. package/dist/cjs/executor/ops/comparison.js +36 -0
  19. package/dist/cjs/executor/ops/control.d.ts +1 -0
  20. package/dist/cjs/executor/ops/control.js +203 -0
  21. package/dist/cjs/executor/ops/functions.d.ts +1 -0
  22. package/dist/cjs/executor/ops/functions.js +55 -0
  23. package/dist/cjs/executor/ops/index.d.ts +0 -0
  24. package/dist/cjs/executor/ops/index.js +11 -0
  25. package/dist/cjs/executor/ops/literals.d.ts +1 -0
  26. package/dist/cjs/executor/ops/literals.js +45 -0
  27. package/dist/cjs/executor/ops/misc.d.ts +1 -0
  28. package/dist/cjs/executor/ops/misc.js +25 -0
  29. package/dist/cjs/executor/ops/object.d.ts +1 -0
  30. package/dist/cjs/executor/ops/object.js +51 -0
  31. package/dist/cjs/executor/ops/prop.d.ts +1 -0
  32. package/dist/cjs/executor/ops/prop.js +70 -0
  33. package/dist/cjs/executor/ops/unary.d.ts +1 -0
  34. package/dist/cjs/executor/ops/unary.js +48 -0
  35. package/dist/cjs/executor/ops/variables.d.ts +1 -0
  36. package/dist/cjs/executor/ops/variables.js +16 -0
  37. package/dist/cjs/executor/opsRegistry.d.ts +33 -0
  38. package/dist/cjs/executor/opsRegistry.js +8 -0
  39. package/dist/cjs/package.json +3 -0
  40. package/dist/cjs/parser/index.d.ts +3 -0
  41. package/dist/cjs/parser/index.js +1 -0
  42. package/dist/{parser.d.ts → cjs/parser/lisp.d.ts} +29 -42
  43. package/dist/cjs/parser/lispTypes/conditionals.d.ts +2 -0
  44. package/dist/cjs/parser/lispTypes/conditionals.js +135 -0
  45. package/dist/cjs/parser/lispTypes/control.d.ts +2 -0
  46. package/dist/cjs/parser/lispTypes/control.js +204 -0
  47. package/dist/cjs/parser/lispTypes/declarations.d.ts +2 -0
  48. package/dist/cjs/parser/lispTypes/declarations.js +99 -0
  49. package/dist/cjs/parser/lispTypes/index.d.ts +3 -0
  50. package/dist/cjs/parser/lispTypes/index.js +17 -0
  51. package/dist/cjs/parser/lispTypes/operators.d.ts +2 -0
  52. package/dist/cjs/parser/lispTypes/operators.js +252 -0
  53. package/dist/cjs/parser/lispTypes/shared.d.ts +38 -0
  54. package/dist/cjs/parser/lispTypes/structures.d.ts +2 -0
  55. package/dist/cjs/parser/lispTypes/structures.js +188 -0
  56. package/dist/cjs/parser/lispTypes/values.d.ts +2 -0
  57. package/dist/cjs/parser/lispTypes/values.js +89 -0
  58. package/dist/cjs/parser/parserUtils.d.ts +34 -0
  59. package/dist/cjs/parser/parserUtils.js +968 -0
  60. package/dist/cjs/utils/CodeString.d.ts +16 -0
  61. package/dist/cjs/utils/CodeString.js +64 -0
  62. package/dist/cjs/utils/ExecContext.d.ts +34 -0
  63. package/dist/cjs/utils/ExecContext.js +171 -0
  64. package/dist/cjs/utils/Prop.d.ts +16 -0
  65. package/dist/cjs/utils/Prop.js +81 -0
  66. package/dist/cjs/utils/Scope.d.ts +47 -0
  67. package/dist/cjs/utils/Scope.js +127 -0
  68. package/dist/cjs/utils/errors.d.ts +10 -0
  69. package/dist/cjs/utils/errors.js +12 -0
  70. package/dist/cjs/utils/functionReplacements.d.ts +11 -0
  71. package/dist/cjs/utils/functionReplacements.js +362 -0
  72. package/dist/cjs/utils/index.d.ts +7 -0
  73. package/dist/cjs/utils/index.js +7 -0
  74. package/dist/cjs/utils/types.d.ts +221 -0
  75. package/dist/cjs/utils/types.js +164 -0
  76. package/dist/cjs/utils/unraw.js +145 -0
  77. package/dist/{node → esm}/Sandbox.d.ts +15 -6
  78. package/dist/esm/Sandbox.js +115 -0
  79. package/dist/esm/Sandbox.js.map +1 -0
  80. package/{build → dist/esm}/SandboxExec.d.ts +8 -17
  81. package/dist/esm/SandboxExec.js +224 -0
  82. package/dist/esm/SandboxExec.js.map +1 -0
  83. package/dist/{eval.d.ts → esm/eval/index.d.ts} +10 -2
  84. package/dist/esm/eval/index.js +235 -0
  85. package/dist/esm/eval/index.js.map +1 -0
  86. package/dist/esm/executor/executorUtils.d.ts +161 -0
  87. package/dist/esm/executor/executorUtils.js +898 -0
  88. package/dist/esm/executor/executorUtils.js.map +1 -0
  89. package/dist/esm/executor/index.d.ts +1 -0
  90. package/dist/esm/executor/index.js +2 -0
  91. package/dist/esm/executor/ops/assignment.d.ts +1 -0
  92. package/dist/esm/executor/ops/assignment.js +90 -0
  93. package/dist/esm/executor/ops/assignment.js.map +1 -0
  94. package/dist/esm/executor/ops/call.d.ts +1 -0
  95. package/dist/esm/executor/ops/call.js +162 -0
  96. package/dist/esm/executor/ops/call.js.map +1 -0
  97. package/dist/esm/executor/ops/comparison.d.ts +1 -0
  98. package/dist/esm/executor/ops/comparison.js +38 -0
  99. package/dist/esm/executor/ops/comparison.js.map +1 -0
  100. package/dist/esm/executor/ops/control.d.ts +1 -0
  101. package/dist/esm/executor/ops/control.js +205 -0
  102. package/dist/esm/executor/ops/control.js.map +1 -0
  103. package/dist/esm/executor/ops/functions.d.ts +1 -0
  104. package/dist/esm/executor/ops/functions.js +57 -0
  105. package/dist/esm/executor/ops/functions.js.map +1 -0
  106. package/dist/esm/executor/ops/index.d.ts +0 -0
  107. package/dist/esm/executor/ops/index.js +11 -0
  108. package/dist/esm/executor/ops/literals.d.ts +1 -0
  109. package/dist/esm/executor/ops/literals.js +47 -0
  110. package/dist/esm/executor/ops/literals.js.map +1 -0
  111. package/dist/esm/executor/ops/misc.d.ts +1 -0
  112. package/dist/esm/executor/ops/misc.js +27 -0
  113. package/dist/esm/executor/ops/misc.js.map +1 -0
  114. package/dist/esm/executor/ops/object.d.ts +1 -0
  115. package/dist/esm/executor/ops/object.js +53 -0
  116. package/dist/esm/executor/ops/object.js.map +1 -0
  117. package/dist/esm/executor/ops/prop.d.ts +1 -0
  118. package/dist/esm/executor/ops/prop.js +72 -0
  119. package/dist/esm/executor/ops/prop.js.map +1 -0
  120. package/dist/esm/executor/ops/unary.d.ts +1 -0
  121. package/dist/esm/executor/ops/unary.js +50 -0
  122. package/dist/esm/executor/ops/unary.js.map +1 -0
  123. package/dist/esm/executor/ops/variables.d.ts +1 -0
  124. package/dist/esm/executor/ops/variables.js +18 -0
  125. package/dist/esm/executor/ops/variables.js.map +1 -0
  126. package/dist/esm/executor/opsRegistry.d.ts +33 -0
  127. package/dist/esm/executor/opsRegistry.js +9 -0
  128. package/dist/esm/executor/opsRegistry.js.map +1 -0
  129. package/dist/esm/package.json +3 -0
  130. package/dist/esm/parser/index.d.ts +3 -0
  131. package/dist/esm/parser/index.js +1 -0
  132. package/{build/parser.d.ts → dist/esm/parser/lisp.d.ts} +29 -42
  133. package/dist/esm/parser/lispTypes/conditionals.d.ts +2 -0
  134. package/dist/esm/parser/lispTypes/conditionals.js +137 -0
  135. package/dist/esm/parser/lispTypes/conditionals.js.map +1 -0
  136. package/dist/esm/parser/lispTypes/control.d.ts +2 -0
  137. package/dist/esm/parser/lispTypes/control.js +206 -0
  138. package/dist/esm/parser/lispTypes/control.js.map +1 -0
  139. package/dist/esm/parser/lispTypes/declarations.d.ts +2 -0
  140. package/dist/esm/parser/lispTypes/declarations.js +101 -0
  141. package/dist/esm/parser/lispTypes/declarations.js.map +1 -0
  142. package/dist/esm/parser/lispTypes/index.d.ts +3 -0
  143. package/dist/esm/parser/lispTypes/index.js +19 -0
  144. package/dist/esm/parser/lispTypes/index.js.map +1 -0
  145. package/dist/esm/parser/lispTypes/operators.d.ts +2 -0
  146. package/dist/esm/parser/lispTypes/operators.js +254 -0
  147. package/dist/esm/parser/lispTypes/operators.js.map +1 -0
  148. package/dist/esm/parser/lispTypes/shared.d.ts +38 -0
  149. package/dist/esm/parser/lispTypes/structures.d.ts +2 -0
  150. package/dist/esm/parser/lispTypes/structures.js +190 -0
  151. package/dist/esm/parser/lispTypes/structures.js.map +1 -0
  152. package/dist/esm/parser/lispTypes/values.d.ts +2 -0
  153. package/dist/esm/parser/lispTypes/values.js +91 -0
  154. package/dist/esm/parser/lispTypes/values.js.map +1 -0
  155. package/dist/esm/parser/parserUtils.d.ts +34 -0
  156. package/dist/esm/parser/parserUtils.js +959 -0
  157. package/dist/esm/parser/parserUtils.js.map +1 -0
  158. package/dist/esm/utils/CodeString.d.ts +16 -0
  159. package/dist/esm/utils/CodeString.js +66 -0
  160. package/dist/esm/utils/CodeString.js.map +1 -0
  161. package/dist/esm/utils/ExecContext.d.ts +34 -0
  162. package/dist/esm/utils/ExecContext.js +168 -0
  163. package/dist/esm/utils/ExecContext.js.map +1 -0
  164. package/dist/esm/utils/Prop.d.ts +16 -0
  165. package/dist/esm/utils/Prop.js +80 -0
  166. package/dist/esm/utils/Prop.js.map +1 -0
  167. package/dist/esm/utils/Scope.d.ts +47 -0
  168. package/dist/esm/utils/Scope.js +122 -0
  169. package/dist/esm/utils/Scope.js.map +1 -0
  170. package/dist/esm/utils/errors.d.ts +10 -0
  171. package/dist/esm/utils/errors.js +10 -0
  172. package/dist/esm/utils/errors.js.map +1 -0
  173. package/dist/esm/utils/functionReplacements.d.ts +11 -0
  174. package/dist/esm/utils/functionReplacements.js +361 -0
  175. package/dist/esm/utils/functionReplacements.js.map +1 -0
  176. package/dist/esm/utils/index.d.ts +7 -0
  177. package/dist/esm/utils/index.js +7 -0
  178. package/dist/esm/utils/types.d.ts +221 -0
  179. package/dist/esm/utils/types.js +160 -0
  180. package/dist/esm/utils/types.js.map +1 -0
  181. package/dist/esm/utils/unraw.js +147 -0
  182. package/dist/esm/utils/unraw.js.map +1 -0
  183. package/dist/umd/Sandbox.min.js +2 -0
  184. package/dist/umd/Sandbox.min.js.map +1 -0
  185. package/dist/umd/SandboxExec.min.js +2 -0
  186. package/dist/umd/SandboxExec.min.js.map +1 -0
  187. package/package.json +17 -16
  188. package/build/Sandbox.js +0 -62
  189. package/build/SandboxExec.js +0 -214
  190. package/build/eval.js +0 -205
  191. package/build/executor.d.ts +0 -124
  192. package/build/executor.js +0 -1554
  193. package/build/parser.js +0 -1527
  194. package/build/unraw.js +0 -168
  195. package/build/utils.d.ts +0 -264
  196. package/build/utils.js +0 -362
  197. package/dist/Sandbox.d.ts +0 -25
  198. package/dist/Sandbox.js +0 -270
  199. package/dist/Sandbox.js.map +0 -1
  200. package/dist/Sandbox.min.js +0 -2
  201. package/dist/Sandbox.min.js.map +0 -1
  202. package/dist/SandboxExec.js +0 -218
  203. package/dist/SandboxExec.js.map +0 -1
  204. package/dist/SandboxExec.min.js +0 -2
  205. package/dist/SandboxExec.min.js.map +0 -1
  206. package/dist/executor.d.ts +0 -124
  207. package/dist/executor.js +0 -1558
  208. package/dist/executor.js.map +0 -1
  209. package/dist/node/Sandbox.js +0 -277
  210. package/dist/node/SandboxExec.d.ts +0 -66
  211. package/dist/node/SandboxExec.js +0 -225
  212. package/dist/node/eval.d.ts +0 -27
  213. package/dist/node/executor.d.ts +0 -124
  214. package/dist/node/executor.js +0 -1575
  215. package/dist/node/parser.d.ts +0 -154
  216. package/dist/node/parser.js +0 -1704
  217. package/dist/node/utils.d.ts +0 -264
  218. package/dist/node/utils.js +0 -385
  219. package/dist/parser.js +0 -1690
  220. package/dist/parser.js.map +0 -1
  221. package/dist/unraw.d.ts +0 -11
  222. package/dist/utils.d.ts +0 -264
  223. package/dist/utils.js +0 -365
  224. package/dist/utils.js.map +0 -1
  225. /package/{build → dist/cjs/utils}/unraw.d.ts +0 -0
  226. /package/dist/{node → esm/utils}/unraw.d.ts +0 -0
@@ -0,0 +1,254 @@
1
+ import { CodeString } from "../../utils/CodeString.js";
2
+ import { LispType } from "../../utils/types.js";
3
+ import { isLisp } from "../../utils/ExecContext.js";
4
+ import "../../utils/index.js";
5
+ //#region src/parser/lispTypes/operators.ts
6
+ function registerOperatorLispTypes({ createLisp, expandDestructure, expectTypes, getDestructurePatternSource, lispifyBlock, restOfExp, lispify, lispifyExpr, setLispType }) {
7
+ const inlineIfElse = /^:/;
8
+ const modifierTypes = {
9
+ inverse: LispType.Inverse,
10
+ not: LispType.Not,
11
+ positive: LispType.Positive,
12
+ negative: LispType.Negative,
13
+ typeof: LispType.Typeof,
14
+ delete: LispType.Delete
15
+ };
16
+ setLispType([
17
+ "inverse",
18
+ "not",
19
+ "negative",
20
+ "positive",
21
+ "typeof",
22
+ "delete"
23
+ ], (ctx) => {
24
+ const { constants, type, part, res, expect } = ctx;
25
+ const extract = restOfExp(constants, part.substring(res[0].length), [/^([^\s.?\w$]|\?[^.])/]);
26
+ if (part.substring(extract.length + res[0].length).trim().toString().startsWith("**")) throw new SyntaxError("Unary operator used immediately before exponentiation expression. Parenthesis must be used to disambiguate operator precedence");
27
+ ctx.lispTree = lispify(constants, part.substring(extract.length + res[0].length), restOfExp.next, createLisp({
28
+ op: modifierTypes[type],
29
+ a: ctx.lispTree,
30
+ b: lispify(constants, extract, expectTypes[expect].next)
31
+ }), false, ctx);
32
+ });
33
+ setLispType(["taggedTemplate"], (ctx) => {
34
+ const { constants, part, res, expect } = ctx;
35
+ const literalIndex = res[1];
36
+ const [, templateStr, jsExprs] = constants.literals[parseInt(literalIndex)];
37
+ const stringParts = [];
38
+ const expressions = [];
39
+ let currentStr = "";
40
+ let i = 0;
41
+ while (i < templateStr.length) if (templateStr.substring(i, i + 2) === "${") {
42
+ let j = i + 2;
43
+ let exprIndex = "";
44
+ let isValidPlaceholder = false;
45
+ while (j < templateStr.length && templateStr[j] !== "}") {
46
+ exprIndex += templateStr[j];
47
+ j++;
48
+ }
49
+ if (j < templateStr.length && templateStr[j] === "}" && /^\d+$/.test(exprIndex)) isValidPlaceholder = true;
50
+ if (isValidPlaceholder) {
51
+ stringParts.push(currentStr);
52
+ currentStr = "";
53
+ expressions.push(jsExprs[parseInt(exprIndex)]);
54
+ i = j + 1;
55
+ } else {
56
+ currentStr += templateStr[i];
57
+ i++;
58
+ }
59
+ } else {
60
+ currentStr += templateStr[i];
61
+ i++;
62
+ }
63
+ stringParts.push(currentStr);
64
+ const stringsArray = stringParts.map((str) => createLisp({
65
+ op: LispType.StringIndex,
66
+ a: LispType.None,
67
+ b: String(constants.strings.push(str) - 1)
68
+ }));
69
+ const stringsArrayLisp = createLisp({
70
+ op: LispType.CreateArray,
71
+ a: createLisp({
72
+ op: LispType.None,
73
+ a: LispType.None,
74
+ b: LispType.None
75
+ }),
76
+ b: stringsArray
77
+ });
78
+ ctx.lispTree = lispify(constants, part.substring(res[0].length), expectTypes[expect].next, createLisp({
79
+ op: LispType.Call,
80
+ a: ctx.lispTree,
81
+ b: [stringsArrayLisp, ...expressions]
82
+ }), false, ctx);
83
+ });
84
+ const incrementTypes = {
85
+ "++$": LispType.IncrementBefore,
86
+ "--$": LispType.DecrementBefore,
87
+ "$++": LispType.IncrementAfter,
88
+ "$--": LispType.DecrementAfter
89
+ };
90
+ setLispType(["incrementerBefore"], (ctx) => {
91
+ const { constants, part, res } = ctx;
92
+ const extract = restOfExp(constants, part.substring(2), [/^[^\s.\w$]/]);
93
+ ctx.lispTree = lispify(constants, part.substring(extract.length + 2), restOfExp.next, createLisp({
94
+ op: incrementTypes[res[0] + "$"],
95
+ a: lispify(constants, extract, expectTypes.incrementerBefore.next),
96
+ b: LispType.None
97
+ }), false, ctx);
98
+ });
99
+ setLispType(["incrementerAfter"], (ctx) => {
100
+ const { constants, part, res, expect } = ctx;
101
+ if (ctx.lispTree[0] === LispType.Number || ctx.lispTree[0] === LispType.BigInt || ctx.lispTree[0] === LispType.GlobalSymbol || ctx.lispTree[0] === LispType.StringIndex || ctx.lispTree[0] === LispType.LiteralIndex || ctx.lispTree[0] === LispType.RegexIndex) throw new SyntaxError("Invalid left-hand side expression in postfix operation");
102
+ ctx.lispTree = lispify(constants, part.substring(res[0].length), expectTypes[expect].next, createLisp({
103
+ op: incrementTypes["$" + res[0]],
104
+ a: ctx.lispTree,
105
+ b: LispType.None
106
+ }), false, ctx);
107
+ });
108
+ const adderTypes = {
109
+ "&&": LispType.And,
110
+ "||": LispType.Or,
111
+ "??": LispType.NullishCoalescing,
112
+ instanceof: LispType.Instanceof,
113
+ in: LispType.In,
114
+ "=": LispType.Assign,
115
+ "-=": LispType.SubractEquals,
116
+ "+=": LispType.AddEquals,
117
+ "/=": LispType.DivideEquals,
118
+ "**=": LispType.PowerEquals,
119
+ "*=": LispType.MultiplyEquals,
120
+ "%=": LispType.ModulusEquals,
121
+ "^=": LispType.BitNegateEquals,
122
+ "&=": LispType.BitAndEquals,
123
+ "|=": LispType.BitOrEquals,
124
+ ">>>=": LispType.UnsignedShiftRightEquals,
125
+ "<<=": LispType.ShiftLeftEquals,
126
+ ">>=": LispType.ShiftRightEquals,
127
+ "&&=": LispType.AndEquals,
128
+ "||=": LispType.OrEquals,
129
+ "??=": LispType.NullishCoalescingEquals
130
+ };
131
+ setLispType([
132
+ "assign",
133
+ "assignModify",
134
+ "nullishCoalescing"
135
+ ], (ctx) => {
136
+ const { constants, type, part, res } = ctx;
137
+ if (type !== "nullishCoalescing" && isLisp(ctx.lispTree) && (ctx.lispTree[0] === LispType.PropOptional || ctx.lispTree[0] === LispType.CallOptional)) throw new SyntaxError("Invalid left-hand side in assignment");
138
+ if (res[0] === "=") {
139
+ const patternStr = getDestructurePatternSource(ctx.lispTree);
140
+ if (patternStr) {
141
+ const rhsStr = part.substring(res[0].length).toString();
142
+ const tempName = `$$_da${Math.random().toString(36).slice(2)}`;
143
+ const expandedCode = `internal ${tempName} = (${rhsStr}); ${expandDestructure("", patternStr, tempName)}; ${tempName}`;
144
+ ctx.lispTree = createLisp({
145
+ op: LispType.InternalBlock,
146
+ a: lispifyBlock(new CodeString(expandedCode), constants, false, ctx),
147
+ b: LispType.None
148
+ });
149
+ return;
150
+ }
151
+ }
152
+ ctx.lispTree = createLisp({
153
+ op: adderTypes[res[0]],
154
+ a: ctx.lispTree,
155
+ b: lispify(constants, part.substring(res[0].length), expectTypes.assignment.next, void 0, false, {
156
+ ...ctx,
157
+ lispDepth: ctx.lispDepth + 1
158
+ })
159
+ });
160
+ });
161
+ const opTypes = {
162
+ "&": LispType.BitAnd,
163
+ "|": LispType.BitOr,
164
+ "^": LispType.BitNegate,
165
+ "<<": LispType.BitShiftLeft,
166
+ ">>": LispType.BitShiftRight,
167
+ ">>>": LispType.BitUnsignedShiftRight,
168
+ "<=": LispType.SmallerEqualThan,
169
+ ">=": LispType.LargerEqualThan,
170
+ "<": LispType.SmallerThan,
171
+ ">": LispType.LargerThan,
172
+ "!==": LispType.StrictNotEqual,
173
+ "!=": LispType.NotEqual,
174
+ "===": LispType.StrictEqual,
175
+ "==": LispType.Equal,
176
+ "+": LispType.Plus,
177
+ "-": LispType.Minus,
178
+ "/": LispType.Divide,
179
+ "**": LispType.Power,
180
+ "*": LispType.Multiply,
181
+ "%": LispType.Modulus,
182
+ "&&": LispType.And,
183
+ "||": LispType.Or,
184
+ instanceof: LispType.Instanceof,
185
+ in: LispType.In
186
+ };
187
+ setLispType([
188
+ "power",
189
+ "opHigh",
190
+ "op",
191
+ "comparitor",
192
+ "bitwiseShift",
193
+ "bitwiseAnd",
194
+ "bitwiseXor",
195
+ "bitwiseOr",
196
+ "boolOpAnd",
197
+ "boolOpOr"
198
+ ], (ctx) => {
199
+ const { constants, type, part, res } = ctx;
200
+ const next = [expectTypes.inlineIf.types.inlineIf, inlineIfElse];
201
+ switch (type) {
202
+ case "power": break;
203
+ case "opHigh": next.push(expectTypes.splitter.types.opHigh);
204
+ case "op": next.push(expectTypes.splitter.types.op);
205
+ case "comparitor": next.push(expectTypes.splitter.types.comparitor);
206
+ case "bitwiseShift": next.push(expectTypes.splitter.types.bitwiseShift);
207
+ case "bitwiseAnd": next.push(expectTypes.splitter.types.bitwiseAnd);
208
+ case "bitwiseXor": next.push(expectTypes.splitter.types.bitwiseXor);
209
+ case "bitwiseOr": next.push(expectTypes.splitter.types.bitwiseOr);
210
+ case "boolOpAnd": next.push(expectTypes.splitter.types.boolOpAnd);
211
+ case "boolOpOr": next.push(expectTypes.splitter.types.boolOpOr);
212
+ }
213
+ const extract = restOfExp(constants, part.substring(res[0].length), next);
214
+ ctx.lispTree = lispify(constants, part.substring(extract.length + res[0].length), restOfExp.next, createLisp({
215
+ op: opTypes[res[0]],
216
+ a: ctx.lispTree,
217
+ b: lispify(constants, extract, expectTypes.splitter.next)
218
+ }), false, ctx);
219
+ });
220
+ setLispType(["inlineIf"], (ctx) => {
221
+ const { constants, part, res } = ctx;
222
+ let found = false;
223
+ const extract = part.substring(0, 0);
224
+ let quoteCount = 1;
225
+ while (!found && extract.length < part.length) {
226
+ extract.end = restOfExp(constants, part.substring(extract.length + 1), [expectTypes.inlineIf.types.inlineIf, inlineIfElse]).end;
227
+ if (part.char(extract.length) === "?") quoteCount++;
228
+ else quoteCount--;
229
+ if (!quoteCount) found = true;
230
+ }
231
+ extract.start = part.start + 1;
232
+ const falseExpr = part.substring(res[0].length + extract.length + 1);
233
+ if (!falseExpr.trimStart().length) throw new SyntaxError("Unexpected end of expression");
234
+ ctx.lispTree = createLisp({
235
+ op: LispType.InlineIf,
236
+ a: ctx.lispTree,
237
+ b: createLisp({
238
+ op: LispType.InlineIfCase,
239
+ a: lispifyExpr(constants, extract, void 0, {
240
+ ...ctx,
241
+ lispDepth: ctx.lispDepth + 1
242
+ }),
243
+ b: lispifyExpr(constants, falseExpr, void 0, {
244
+ ...ctx,
245
+ lispDepth: ctx.lispDepth + 1
246
+ })
247
+ })
248
+ });
249
+ });
250
+ }
251
+ //#endregion
252
+ export { registerOperatorLispTypes };
253
+
254
+ //# sourceMappingURL=operators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operators.js","names":[],"sources":["../../../../src/parser/lispTypes/operators.ts"],"sourcesContent":["import { CodeString, isLisp, LispType } from '../../utils';\nimport type {\n AddEquals,\n And,\n AndEquals,\n Assigns,\n BigInt as BigIntLisp,\n BitAnd,\n BitAndEquals,\n BitNegate,\n BitNegateEquals,\n BitOr,\n BitOrEquals,\n BitShiftLeft,\n BitShiftRight,\n BitUnsignedShiftRight,\n Call,\n CreateArray,\n DecrementAfter,\n DecrementBefore,\n Delete,\n Divide,\n DivideEquals,\n Equal,\n GlobalSymbol,\n In,\n IncrementAfter,\n IncrementBefore,\n InlineIf,\n InlineIfCase,\n Instanceof,\n InternalCode,\n Inverse,\n LargerEqualThan,\n LargerThan,\n Lisp,\n Minus,\n Modulus,\n ModulusEquals,\n Multiply,\n MultiplyEquals,\n Negative,\n Not,\n NotEqual,\n NullishCoalescing,\n NullishCoalescingEquals,\n Number as NumberLisp,\n Or,\n OrEquals,\n Plus,\n Positive,\n Power,\n PowerEquals,\n ShiftLeftEquals,\n ShiftRightEquals,\n SmallerEqualThan,\n SmallerThan,\n StrictEqual,\n StrictNotEqual,\n StringIndex,\n SubractEquals,\n Typeof,\n UnsignedShiftRightEquals,\n} from '../lisp';\nimport type { RegisterLispTypesDeps } from './shared';\n\nexport function registerOperatorLispTypes({\n createLisp,\n expandDestructure,\n expectTypes,\n getDestructurePatternSource,\n lispifyBlock,\n restOfExp,\n lispify,\n lispifyExpr,\n setLispType,\n}: RegisterLispTypesDeps) {\n const inlineIfElse = /^:/;\n\n const modifierTypes = {\n inverse: LispType.Inverse,\n not: LispType.Not,\n positive: LispType.Positive,\n negative: LispType.Negative,\n typeof: LispType.Typeof,\n delete: LispType.Delete,\n } as const;\n\n setLispType(['inverse', 'not', 'negative', 'positive', 'typeof', 'delete'] as const, (ctx) => {\n const { constants, type, part, res, expect } = ctx;\n const extract = restOfExp(constants, part.substring(res[0].length), [/^([^\\s.?\\w$]|\\?[^.])/]);\n const remainingAfterOperand = part.substring(extract.length + res[0].length);\n const remainingStr = remainingAfterOperand.trim().toString();\n if (remainingStr.startsWith('**')) {\n throw new SyntaxError(\n 'Unary operator used immediately before exponentiation expression. Parenthesis must be used to disambiguate operator precedence',\n );\n }\n\n ctx.lispTree = lispify(\n constants,\n part.substring(extract.length + res[0].length),\n restOfExp.next,\n createLisp<Inverse | Not | Negative | Positive | Typeof | Delete>({\n op: modifierTypes[type],\n a: ctx.lispTree,\n b: lispify(constants, extract, expectTypes[expect].next),\n }),\n false,\n ctx,\n );\n });\n\n setLispType(['taggedTemplate'] as const, (ctx) => {\n const { constants, part, res, expect } = ctx;\n const literalIndex = res[1];\n const literal = constants.literals[parseInt(literalIndex)];\n const [, templateStr, jsExprs] = literal;\n const stringParts: string[] = [];\n const expressions: Lisp[] = [];\n let currentStr = '';\n let i = 0;\n\n while (i < templateStr.length) {\n if (templateStr.substring(i, i + 2) === '${') {\n let j = i + 2;\n let exprIndex = '';\n let isValidPlaceholder = false;\n while (j < templateStr.length && templateStr[j] !== '}') {\n exprIndex += templateStr[j];\n j++;\n }\n if (j < templateStr.length && templateStr[j] === '}' && /^\\d+$/.test(exprIndex)) {\n isValidPlaceholder = true;\n }\n\n if (isValidPlaceholder) {\n stringParts.push(currentStr);\n currentStr = '';\n expressions.push(jsExprs[parseInt(exprIndex)]);\n i = j + 1;\n } else {\n currentStr += templateStr[i];\n i++;\n }\n } else {\n currentStr += templateStr[i];\n i++;\n }\n }\n stringParts.push(currentStr);\n\n const stringsArray = stringParts.map((str) =>\n createLisp<StringIndex>({\n op: LispType.StringIndex,\n a: LispType.None,\n b: String(constants.strings.push(str) - 1),\n }),\n );\n\n const stringsArrayLisp = createLisp<CreateArray>({\n op: LispType.CreateArray,\n a: createLisp({\n op: LispType.None,\n a: LispType.None,\n b: LispType.None,\n }),\n b: stringsArray,\n });\n\n ctx.lispTree = lispify(\n constants,\n part.substring(res[0].length),\n expectTypes[expect].next,\n createLisp<Call>({\n op: LispType.Call,\n a: ctx.lispTree,\n b: [stringsArrayLisp, ...expressions],\n }),\n false,\n ctx,\n );\n });\n\n const incrementTypes = {\n '++$': LispType.IncrementBefore,\n '--$': LispType.DecrementBefore,\n '$++': LispType.IncrementAfter,\n '$--': LispType.DecrementAfter,\n } as any;\n\n setLispType(['incrementerBefore'] as const, (ctx) => {\n const { constants, part, res } = ctx;\n const extract = restOfExp(constants, part.substring(2), [/^[^\\s.\\w$]/]);\n ctx.lispTree = lispify(\n constants,\n part.substring(extract.length + 2),\n restOfExp.next,\n createLisp<IncrementBefore | DecrementBefore>({\n op: incrementTypes[res[0] + '$'],\n a: lispify(constants, extract, expectTypes.incrementerBefore.next),\n b: LispType.None,\n }),\n false,\n ctx,\n );\n });\n\n setLispType(['incrementerAfter'] as const, (ctx) => {\n const { constants, part, res, expect } = ctx;\n if (\n ctx.lispTree[0] === LispType.Number ||\n ctx.lispTree[0] === LispType.BigInt ||\n ctx.lispTree[0] === LispType.GlobalSymbol ||\n ctx.lispTree[0] === LispType.StringIndex ||\n ctx.lispTree[0] === LispType.LiteralIndex ||\n ctx.lispTree[0] === LispType.RegexIndex\n ) {\n throw new SyntaxError('Invalid left-hand side expression in postfix operation');\n }\n ctx.lispTree = lispify(\n constants,\n part.substring(res[0].length),\n expectTypes[expect].next,\n createLisp<IncrementAfter | DecrementAfter>({\n op: incrementTypes['$' + res[0]],\n a: ctx.lispTree,\n b: LispType.None,\n }),\n false,\n ctx,\n );\n });\n\n const adderTypes = {\n '&&': LispType.And,\n '||': LispType.Or,\n '??': LispType.NullishCoalescing,\n instanceof: LispType.Instanceof,\n in: LispType.In,\n '=': LispType.Assign,\n '-=': LispType.SubractEquals,\n '+=': LispType.AddEquals,\n '/=': LispType.DivideEquals,\n '**=': LispType.PowerEquals,\n '*=': LispType.MultiplyEquals,\n '%=': LispType.ModulusEquals,\n '^=': LispType.BitNegateEquals,\n '&=': LispType.BitAndEquals,\n '|=': LispType.BitOrEquals,\n '>>>=': LispType.UnsignedShiftRightEquals,\n '<<=': LispType.ShiftLeftEquals,\n '>>=': LispType.ShiftRightEquals,\n '&&=': LispType.AndEquals,\n '||=': LispType.OrEquals,\n '??=': LispType.NullishCoalescingEquals,\n } as any;\n\n setLispType(['assign', 'assignModify', 'nullishCoalescing'] as const, (ctx) => {\n const { constants, type, part, res } = ctx;\n if (\n type !== 'nullishCoalescing' &&\n isLisp(ctx.lispTree) &&\n (ctx.lispTree[0] === LispType.PropOptional || ctx.lispTree[0] === LispType.CallOptional)\n ) {\n throw new SyntaxError('Invalid left-hand side in assignment');\n }\n if (res[0] === '=') {\n const patternStr = getDestructurePatternSource(ctx.lispTree);\n if (patternStr) {\n const rhsStr = part.substring(res[0].length).toString();\n const tempName = `$$_da${Math.random().toString(36).slice(2)}`;\n const expandedCode = `internal ${tempName} = (${rhsStr}); ${expandDestructure('', patternStr, tempName)}; ${tempName}`;\n ctx.lispTree = createLisp<InternalCode>({\n op: LispType.InternalBlock,\n a: lispifyBlock(new CodeString(expandedCode), constants, false, ctx),\n b: LispType.None,\n });\n return;\n }\n }\n ctx.lispTree = createLisp<\n | NullishCoalescing\n | Assigns\n | SubractEquals\n | AddEquals\n | DivideEquals\n | PowerEquals\n | MultiplyEquals\n | ModulusEquals\n | BitNegateEquals\n | BitAndEquals\n | BitOrEquals\n | UnsignedShiftRightEquals\n | ShiftLeftEquals\n | ShiftRightEquals\n | AndEquals\n | OrEquals\n | NullishCoalescingEquals\n >({\n op: adderTypes[res[0]],\n a: ctx.lispTree,\n b: lispify(\n constants,\n part.substring(res[0].length),\n expectTypes.assignment.next,\n undefined,\n false,\n { ...ctx, lispDepth: ctx.lispDepth + 1 },\n ),\n });\n });\n\n const opTypes = {\n '&': LispType.BitAnd,\n '|': LispType.BitOr,\n '^': LispType.BitNegate,\n '<<': LispType.BitShiftLeft,\n '>>': LispType.BitShiftRight,\n '>>>': LispType.BitUnsignedShiftRight,\n '<=': LispType.SmallerEqualThan,\n '>=': LispType.LargerEqualThan,\n '<': LispType.SmallerThan,\n '>': LispType.LargerThan,\n '!==': LispType.StrictNotEqual,\n '!=': LispType.NotEqual,\n '===': LispType.StrictEqual,\n '==': LispType.Equal,\n '+': LispType.Plus,\n '-': LispType.Minus,\n '/': LispType.Divide,\n '**': LispType.Power,\n '*': LispType.Multiply,\n '%': LispType.Modulus,\n '&&': LispType.And,\n '||': LispType.Or,\n instanceof: LispType.Instanceof,\n in: LispType.In,\n } as any;\n\n setLispType(\n [\n 'power',\n 'opHigh',\n 'op',\n 'comparitor',\n 'bitwiseShift',\n 'bitwiseAnd',\n 'bitwiseXor',\n 'bitwiseOr',\n 'boolOpAnd',\n 'boolOpOr',\n ] as const,\n (ctx) => {\n const { constants, type, part, res } = ctx;\n const next = [expectTypes.inlineIf.types.inlineIf, inlineIfElse];\n switch (type) {\n case 'power':\n break;\n case 'opHigh':\n next.push(expectTypes.splitter.types.opHigh);\n case 'op':\n next.push(expectTypes.splitter.types.op);\n case 'comparitor':\n next.push(expectTypes.splitter.types.comparitor);\n case 'bitwiseShift':\n next.push(expectTypes.splitter.types.bitwiseShift);\n case 'bitwiseAnd':\n next.push(expectTypes.splitter.types.bitwiseAnd);\n case 'bitwiseXor':\n next.push(expectTypes.splitter.types.bitwiseXor);\n case 'bitwiseOr':\n next.push(expectTypes.splitter.types.bitwiseOr);\n case 'boolOpAnd':\n next.push(expectTypes.splitter.types.boolOpAnd);\n case 'boolOpOr':\n next.push(expectTypes.splitter.types.boolOpOr);\n }\n const extract = restOfExp(constants, part.substring(res[0].length), next);\n ctx.lispTree = lispify(\n constants,\n part.substring(extract.length + res[0].length),\n restOfExp.next,\n createLisp<\n | BitAnd\n | BitOr\n | BitNegate\n | BitShiftLeft\n | BitShiftRight\n | BitUnsignedShiftRight\n | SmallerEqualThan\n | LargerEqualThan\n | SmallerThan\n | LargerThan\n | StrictNotEqual\n | NotEqual\n | StrictEqual\n | Equal\n | Plus\n | Minus\n | Divide\n | Power\n | Multiply\n | Modulus\n | And\n | Or\n | Instanceof\n | In\n >({\n op: opTypes[res[0]],\n a: ctx.lispTree,\n b: lispify(constants, extract, expectTypes.splitter.next),\n }),\n false,\n ctx,\n );\n },\n );\n\n setLispType(['inlineIf'] as const, (ctx) => {\n const { constants, part, res } = ctx;\n let found = false;\n const extract = part.substring(0, 0);\n let quoteCount = 1;\n while (!found && extract.length < part.length) {\n extract.end = restOfExp(constants, part.substring(extract.length + 1), [\n expectTypes.inlineIf.types.inlineIf,\n inlineIfElse,\n ]).end;\n if (part.char(extract.length) === '?') {\n quoteCount++;\n } else {\n quoteCount--;\n }\n if (!quoteCount) {\n found = true;\n }\n }\n extract.start = part.start + 1;\n const falseExpr = part.substring(res[0].length + extract.length + 1);\n if (!falseExpr.trimStart().length) {\n throw new SyntaxError('Unexpected end of expression');\n }\n ctx.lispTree = createLisp<InlineIf>({\n op: LispType.InlineIf,\n a: ctx.lispTree,\n b: createLisp<InlineIfCase>({\n op: LispType.InlineIfCase,\n a: lispifyExpr(constants, extract, undefined, { ...ctx, lispDepth: ctx.lispDepth + 1 }),\n b: lispifyExpr(constants, falseExpr, undefined, { ...ctx, lispDepth: ctx.lispDepth + 1 }),\n }),\n });\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { CodeString } from '../../utils';
2
+ import { ExtractLispA, ExtractLispB, ExtractLispOp, IConstants, Lisp, LispCallback, LispDepthCtx, LispItem, None, Return } from '../lisp';
3
+ export interface RegisterLispTypesDeps {
4
+ NullLisp: None;
5
+ ParseError: new (message: string, code: string) => Error;
6
+ createLisp: <L extends Lisp>(obj: {
7
+ op: ExtractLispOp<L>;
8
+ a: ExtractLispA<L>;
9
+ b: ExtractLispB<L>;
10
+ }) => L;
11
+ emptyString: CodeString;
12
+ expectTypes: Record<string, {
13
+ types: Record<string, RegExp>;
14
+ next: string[];
15
+ }>;
16
+ expandDestructure: (keyword: string, patternStr: string, rhsStr: string) => string;
17
+ expandFunctionParamDestructure: (args: string[], funcBody: string) => {
18
+ args: string[];
19
+ body: string;
20
+ };
21
+ extractStatementLabels: (prefix?: string) => string[];
22
+ findPatternEndIdx: (s: string) => number;
23
+ getDestructurePatternSource: (tree: LispItem) => string | null;
24
+ insertSemicolons: (constants: IConstants, str: CodeString) => CodeString;
25
+ lispify: (constants: IConstants, part: CodeString, expected?: readonly string[], lispTree?: Lisp, topLevel?: boolean, depthCtx?: LispDepthCtx) => Lisp;
26
+ lispifyBlock: (str: CodeString, constants: IConstants, expression?: boolean, depthCtx?: LispDepthCtx) => Lisp[];
27
+ lispifyExpr: (constants: IConstants, str: CodeString, expected?: readonly string[], depthCtx?: LispDepthCtx) => Lisp;
28
+ lispifyFunction: (str: CodeString, constants: IConstants, expression?: boolean, depthCtx?: LispDepthCtx) => Lisp[];
29
+ lispifyReturnExpr: (constants: IConstants, str: CodeString) => Return;
30
+ restOfExp: ((constants: IConstants, part: CodeString, tests?: RegExp[], quote?: string, firstOpening?: string, closingsTests?: RegExp[], details?: any, depth?: number) => CodeString) & {
31
+ next: string[];
32
+ };
33
+ semiColon: RegExp;
34
+ setLispType: <T extends readonly string[]>(types: T, fn: LispCallback<T[number]>) => void;
35
+ splitByCommasDestructure: (s: string) => string[];
36
+ startingExecpted: readonly string[];
37
+ wrapLabeledStatement: <T extends Lisp>(labels: string[], statement: T) => Lisp;
38
+ }
@@ -0,0 +1,2 @@
1
+ import { RegisterLispTypesDeps } from './shared';
2
+ export declare function registerStructureLispTypes({ NullLisp, createLisp, emptyString, expectTypes, expandDestructure, findPatternEndIdx, lispify, lispifyBlock, lispifyExpr, restOfExp, setLispType, }: RegisterLispTypesDeps): void;
@@ -0,0 +1,190 @@
1
+ import { CodeString } from "../../utils/CodeString.js";
2
+ import { LispType, reservedWords } from "../../utils/types.js";
3
+ import { isLisp } from "../../utils/ExecContext.js";
4
+ import "../../utils/index.js";
5
+ //#region src/parser/lispTypes/structures.ts
6
+ function registerStructureLispTypes({ NullLisp, createLisp, emptyString, expectTypes, expandDestructure, findPatternEndIdx, lispify, lispifyBlock, lispifyExpr, restOfExp, setLispType }) {
7
+ const closingsCreate = {
8
+ createArray: /^\]/,
9
+ createObject: /^\}/,
10
+ group: /^\)/,
11
+ arrayProp: /^\]/,
12
+ call: /^\)/
13
+ };
14
+ const typesCreate = {
15
+ createArray: LispType.CreateArray,
16
+ createObject: LispType.CreateObject,
17
+ group: LispType.Group,
18
+ arrayProp: LispType.ArrayProp,
19
+ call: LispType.Call,
20
+ prop: LispType.Prop,
21
+ "?prop": LispType.PropOptional,
22
+ "?call": LispType.CallOptional
23
+ };
24
+ setLispType([
25
+ "createArray",
26
+ "createObject",
27
+ "group",
28
+ "arrayProp",
29
+ "call"
30
+ ], (ctx) => {
31
+ const { constants, type, part, res, expect } = ctx;
32
+ let extract = emptyString;
33
+ const arg = [];
34
+ const argIsHole = [];
35
+ let end = false;
36
+ let i = res[0].length;
37
+ const start = i;
38
+ while (i < part.length && !end) {
39
+ extract = restOfExp(constants, part.substring(i), [closingsCreate[type], /^,/]);
40
+ i += extract.length;
41
+ if (extract.trim().length) {
42
+ arg.push(extract);
43
+ argIsHole.push(false);
44
+ } else if (type === "createArray" && part.char(i) === ",") {
45
+ arg.push(extract);
46
+ argIsHole.push(true);
47
+ }
48
+ if (part.char(i) !== ",") end = true;
49
+ else {
50
+ if (!extract.trim().length && type === "call") throw new SyntaxError("Unexpected end of expression");
51
+ if (!extract.trim().length && type === "createObject") throw new SyntaxError("Unexpected token ,");
52
+ i++;
53
+ }
54
+ }
55
+ const next = type === "createArray" || type === "createObject" || type === "group" ? [
56
+ "value",
57
+ "modifier",
58
+ "prop",
59
+ "incrementerBefore",
60
+ "assignment",
61
+ "expEnd"
62
+ ] : [
63
+ "value",
64
+ "modifier",
65
+ "prop",
66
+ "incrementerBefore",
67
+ "expEnd"
68
+ ];
69
+ let l;
70
+ let funcFound;
71
+ switch (type) {
72
+ case "group": {
73
+ const groupContentStr = part.substring(start, i).trim().toString();
74
+ if (groupContentStr.startsWith("{") || groupContentStr.startsWith("[")) {
75
+ const patternEnd = findPatternEndIdx(groupContentStr);
76
+ const patternStr = groupContentStr.slice(0, patternEnd).trim();
77
+ const afterPattern = groupContentStr.slice(patternEnd).trimStart();
78
+ if (afterPattern.startsWith("=")) {
79
+ const rhsStr = afterPattern.slice(1).trim();
80
+ const tempName = `$$_da${Math.random().toString(36).slice(2)}`;
81
+ const expandedCode = `internal ${tempName} = (${rhsStr}); ${expandDestructure("", patternStr, tempName)}; ${tempName}`;
82
+ l = createLisp({
83
+ op: LispType.InternalBlock,
84
+ a: lispifyBlock(new CodeString(expandedCode), constants, false, ctx),
85
+ b: LispType.None
86
+ });
87
+ break;
88
+ }
89
+ }
90
+ }
91
+ case "arrayProp": {
92
+ const arrayPropExpr = part.substring(start, i);
93
+ if (!arrayPropExpr.trimStart().length) throw new SyntaxError("Unexpected end of expression");
94
+ l = lispifyExpr(constants, arrayPropExpr, void 0, {
95
+ ...ctx,
96
+ lispDepth: ctx.lispDepth + 1
97
+ });
98
+ break;
99
+ }
100
+ case "call":
101
+ l = arg.map((e) => lispify(constants, e, [...next, "spreadArray"], void 0, false, ctx));
102
+ break;
103
+ case "createArray":
104
+ l = arg.map((e, idx) => argIsHole[idx] ? createLisp({
105
+ op: LispType.Hole,
106
+ a: LispType.None,
107
+ b: LispType.None
108
+ }) : lispify(constants, e, [...next, "spreadArray"], void 0, false, ctx));
109
+ break;
110
+ case "createObject":
111
+ l = arg.map((str) => {
112
+ str = str.trimStart();
113
+ let value;
114
+ let key = "";
115
+ if (str.char(0) === "[") {
116
+ const innerExpr = restOfExp(constants, str.substring(1), [], "[");
117
+ const afterBracket = str.substring(1 + innerExpr.length + 1).trimStart();
118
+ key = lispify(constants, innerExpr, next);
119
+ if (afterBracket.length > 0 && afterBracket.char(0) === ":") value = lispify(constants, afterBracket.substring(1));
120
+ else if (afterBracket.length > 0 && afterBracket.char(0) === "(") value = lispify(constants, new CodeString("function" + afterBracket.toString()));
121
+ else throw new SyntaxError("Unexpected token in computed property");
122
+ return createLisp({
123
+ op: LispType.KeyVal,
124
+ a: key,
125
+ b: value
126
+ });
127
+ }
128
+ funcFound = expectTypes.expFunction.types.function.exec("function " + str);
129
+ if (funcFound) {
130
+ key = funcFound[3].trimStart();
131
+ value = lispify(constants, new CodeString("function " + str.toString().replace(key, "")));
132
+ } else {
133
+ const extract = restOfExp(constants, str, [/^:/]);
134
+ key = lispify(constants, extract, [...next, "spreadObject"]);
135
+ if (isLisp(key) && key[0] === LispType.SpreadObject) value = NullLisp;
136
+ else {
137
+ if (key[0] === LispType.Prop) key = key[2];
138
+ if (str.length > extract.length && str.char(extract.length) === ":") value = lispify(constants, str.substring(extract.length + 1));
139
+ else value = lispify(constants, extract, next);
140
+ }
141
+ }
142
+ return createLisp({
143
+ op: LispType.KeyVal,
144
+ a: key,
145
+ b: value
146
+ });
147
+ });
148
+ break;
149
+ }
150
+ const lisptype = type === "arrayProp" ? res[1] ? LispType.PropOptional : LispType.Prop : type === "call" ? res[1] ? LispType.CallOptional : LispType.Call : typesCreate[type];
151
+ const currentTree = createLisp({
152
+ op: lisptype,
153
+ a: ctx.lispTree,
154
+ b: l
155
+ });
156
+ if (lisptype === LispType.Group || lisptype === LispType.CreateArray || lisptype === LispType.CreateObject) currentTree.source = part.substring(start, i).toString();
157
+ ctx.lispTree = lispify(constants, part.substring(i + 1), expectTypes[expect].next, currentTree, false, ctx);
158
+ });
159
+ setLispType(["dot", "prop"], (ctx) => {
160
+ const { constants, type, part, res, expect } = ctx;
161
+ let prop = res[0];
162
+ let index = res[0].length;
163
+ let op = "prop";
164
+ if (type === "dot") {
165
+ if (res[1]) op = "?prop";
166
+ const matches = part.substring(res[0].length).toString().match(expectTypes.prop.types.prop);
167
+ if (matches && matches.length) {
168
+ prop = matches[0];
169
+ index = prop.length + res[0].length;
170
+ } else throw new SyntaxError("Hanging dot");
171
+ } else if (reservedWords.has(prop) && prop !== "this") throw new SyntaxError(`Unexpected token '${prop}'`);
172
+ ctx.lispTree = lispify(constants, part.substring(index), expectTypes[expect].next, createLisp({
173
+ op: typesCreate[op],
174
+ a: ctx.lispTree,
175
+ b: prop
176
+ }), false, ctx);
177
+ });
178
+ setLispType(["spreadArray", "spreadObject"], (ctx) => {
179
+ const { constants, type, part, res, expect } = ctx;
180
+ ctx.lispTree = createLisp({
181
+ op: type === "spreadArray" ? LispType.SpreadArray : LispType.SpreadObject,
182
+ a: LispType.None,
183
+ b: lispify(constants, part.substring(res[0].length), expectTypes[expect].next)
184
+ });
185
+ });
186
+ }
187
+ //#endregion
188
+ export { registerStructureLispTypes };
189
+
190
+ //# sourceMappingURL=structures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structures.js","names":[],"sources":["../../../../src/parser/lispTypes/structures.ts"],"sourcesContent":["import { CodeString, isLisp, LispType, reservedWords } from '../../utils';\nimport type {\n ArrayProp,\n Call,\n CallOptional,\n CreateArray,\n CreateObject,\n Group,\n InternalCode,\n KeyValLisp,\n Lisp,\n PropLisp,\n PropOptional,\n SpreadArrayLisp,\n SpreadObjectLisp,\n} from '../lisp';\nimport type { RegisterLispTypesDeps } from './shared';\n\nexport function registerStructureLispTypes({\n NullLisp,\n createLisp,\n emptyString,\n expectTypes,\n expandDestructure,\n findPatternEndIdx,\n lispify,\n lispifyBlock,\n lispifyExpr,\n restOfExp,\n setLispType,\n}: RegisterLispTypesDeps) {\n type LispWithSource = Lisp & { source?: string };\n\n const closingsCreate: { [type: string]: RegExp } = {\n createArray: /^\\]/,\n createObject: /^\\}/,\n group: /^\\)/,\n arrayProp: /^\\]/,\n call: /^\\)/,\n };\n\n const typesCreate = {\n createArray: LispType.CreateArray,\n createObject: LispType.CreateObject,\n group: LispType.Group,\n arrayProp: LispType.ArrayProp,\n call: LispType.Call,\n prop: LispType.Prop,\n '?prop': LispType.PropOptional,\n '?call': LispType.CallOptional,\n } as any;\n\n setLispType(['createArray', 'createObject', 'group', 'arrayProp', 'call'] as const, (ctx) => {\n const { constants, type, part, res, expect } = ctx;\n let extract = emptyString;\n const arg: CodeString[] = [];\n const argIsHole: boolean[] = [];\n let end = false;\n let i = res[0].length;\n const start = i;\n while (i < part.length && !end) {\n extract = restOfExp(constants, part.substring(i), [closingsCreate[type], /^,/]);\n i += extract.length;\n if (extract.trim().length) {\n arg.push(extract);\n argIsHole.push(false);\n } else if (type === 'createArray' && part.char(i) === ',') {\n arg.push(extract);\n argIsHole.push(true);\n }\n if (part.char(i) !== ',') {\n end = true;\n } else {\n if (!extract.trim().length && type === 'call') {\n throw new SyntaxError('Unexpected end of expression');\n }\n if (!extract.trim().length && type === 'createObject') {\n throw new SyntaxError('Unexpected token ,');\n }\n i++;\n }\n }\n const next =\n type === 'createArray' || type === 'createObject' || type === 'group'\n ? ['value', 'modifier', 'prop', 'incrementerBefore', 'assignment', 'expEnd']\n : ['value', 'modifier', 'prop', 'incrementerBefore', 'expEnd'];\n let l: Lisp | Lisp[];\n\n let funcFound: RegExpExecArray | null;\n switch (type) {\n case 'group': {\n const groupContent = part.substring(start, i).trim();\n const groupContentStr = groupContent.toString();\n if (groupContentStr.startsWith('{') || groupContentStr.startsWith('[')) {\n const patternEnd = findPatternEndIdx(groupContentStr);\n const patternStr = groupContentStr.slice(0, patternEnd).trim();\n const afterPattern = groupContentStr.slice(patternEnd).trimStart();\n if (afterPattern.startsWith('=')) {\n const rhsStr = afterPattern.slice(1).trim();\n const tempName = `$$_da${Math.random().toString(36).slice(2)}`;\n const expandedCode = `internal ${tempName} = (${rhsStr}); ${expandDestructure('', patternStr, tempName)}; ${tempName}`;\n l = createLisp<InternalCode>({\n op: LispType.InternalBlock,\n a: lispifyBlock(new CodeString(expandedCode), constants, false, ctx),\n b: LispType.None,\n });\n break;\n }\n }\n }\n case 'arrayProp': {\n const arrayPropExpr = part.substring(start, i);\n if (!arrayPropExpr.trimStart().length) {\n throw new SyntaxError('Unexpected end of expression');\n }\n l = lispifyExpr(constants, arrayPropExpr, undefined, {\n ...ctx,\n lispDepth: ctx.lispDepth + 1,\n });\n break;\n }\n case 'call':\n l = arg.map((e) => lispify(constants, e, [...next, 'spreadArray'], undefined, false, ctx));\n break;\n case 'createArray':\n l = arg.map((e, idx) =>\n argIsHole[idx]\n ? createLisp({ op: LispType.Hole, a: LispType.None, b: LispType.None })\n : lispify(constants, e, [...next, 'spreadArray'], undefined, false, ctx),\n );\n break;\n case 'createObject':\n l = arg.map((str) => {\n str = str.trimStart();\n let value: Lisp;\n let key: string | Lisp = '';\n if (str.char(0) === '[') {\n const innerExpr = restOfExp(constants, str.substring(1), [], '[');\n const afterBracket = str.substring(1 + innerExpr.length + 1).trimStart();\n key = lispify(constants, innerExpr, next);\n if (afterBracket.length > 0 && afterBracket.char(0) === ':') {\n value = lispify(constants, afterBracket.substring(1));\n } else if (afterBracket.length > 0 && afterBracket.char(0) === '(') {\n value = lispify(constants, new CodeString('function' + afterBracket.toString()));\n } else {\n throw new SyntaxError('Unexpected token in computed property');\n }\n return createLisp<KeyValLisp>({\n op: LispType.KeyVal,\n a: key,\n b: value,\n });\n }\n funcFound = expectTypes.expFunction.types.function.exec('function ' + str);\n if (funcFound) {\n key = funcFound[3].trimStart();\n value = lispify(\n constants,\n new CodeString('function ' + str.toString().replace(key, '')),\n );\n } else {\n const extract = restOfExp(constants, str, [/^:/]);\n key = lispify(constants, extract, [...next, 'spreadObject']) as PropLisp;\n\n if (isLisp(key) && key[0] === LispType.SpreadObject) {\n value = NullLisp;\n } else {\n if (key[0] === LispType.Prop) {\n key = (key as PropLisp)[2];\n }\n\n if (str.length > extract.length && str.char(extract.length) === ':') {\n value = lispify(constants, str.substring(extract.length + 1));\n } else {\n value = lispify(constants, extract, next);\n }\n }\n }\n return createLisp<KeyValLisp>({\n op: LispType.KeyVal,\n a: key,\n b: value,\n });\n });\n break;\n }\n const lisptype = (\n type === 'arrayProp'\n ? res[1]\n ? LispType.PropOptional\n : LispType.Prop\n : type === 'call'\n ? res[1]\n ? LispType.CallOptional\n : LispType.Call\n : typesCreate[type]\n ) as (typeof typesCreate)[keyof typeof typesCreate];\n const currentTree = createLisp<\n ArrayProp | PropLisp | Call | CreateObject | CreateArray | Group | PropOptional | CallOptional\n >({\n op: lisptype,\n a: ctx.lispTree,\n b: l,\n }) as LispWithSource;\n if (\n lisptype === LispType.Group ||\n lisptype === LispType.CreateArray ||\n lisptype === LispType.CreateObject\n ) {\n currentTree.source = part.substring(start, i).toString();\n }\n ctx.lispTree = lispify(\n constants,\n part.substring(i + 1),\n expectTypes[expect].next,\n currentTree,\n false,\n ctx,\n );\n });\n\n setLispType(['dot', 'prop'] as const, (ctx) => {\n const { constants, type, part, res, expect } = ctx;\n let prop = res[0];\n let index = res[0].length;\n let op = 'prop';\n if (type === 'dot') {\n if (res[1]) {\n op = '?prop';\n }\n const matches = part.substring(res[0].length).toString().match(expectTypes.prop.types.prop);\n if (matches && matches.length) {\n prop = matches[0];\n index = prop.length + res[0].length;\n } else {\n throw new SyntaxError('Hanging dot');\n }\n } else if (reservedWords.has(prop) && prop !== 'this') {\n throw new SyntaxError(`Unexpected token '${prop}'`);\n }\n ctx.lispTree = lispify(\n constants,\n part.substring(index),\n expectTypes[expect].next,\n createLisp<PropLisp | PropOptional>({\n op: typesCreate[op],\n a: ctx.lispTree,\n b: prop,\n }),\n false,\n ctx,\n );\n });\n\n setLispType(['spreadArray', 'spreadObject'] as const, (ctx) => {\n const { constants, type, part, res, expect } = ctx;\n ctx.lispTree = createLisp<SpreadArrayLisp | SpreadObjectLisp>({\n op: type === 'spreadArray' ? LispType.SpreadArray : LispType.SpreadObject,\n a: LispType.None,\n b: lispify(constants, part.substring(res[0].length), expectTypes[expect].next),\n });\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { RegisterLispTypesDeps } from './shared';
2
+ export declare function registerValueLispTypes({ createLisp, expectTypes, lispify, lispifyExpr, restOfExp, semiColon, setLispType, }: RegisterLispTypesDeps): void;
@@ -0,0 +1,91 @@
1
+ import { LispType } from "../../utils/types.js";
2
+ import "../../utils/index.js";
3
+ //#region src/parser/lispTypes/values.ts
4
+ function registerValueLispTypes({ createLisp, expectTypes, lispify, lispifyExpr, restOfExp, semiColon, setLispType }) {
5
+ setLispType(["return", "throw"], (ctx) => {
6
+ const { constants, type, part, res } = ctx;
7
+ const expr = part.substring(res[0].length);
8
+ if (type === "throw" && !expr.trimStart().length) throw new SyntaxError("Unexpected end of expression");
9
+ ctx.lispTree = createLisp({
10
+ op: type === "return" ? LispType.Return : LispType.Throw,
11
+ a: LispType.None,
12
+ b: lispifyExpr(constants, expr, void 0, ctx)
13
+ });
14
+ });
15
+ setLispType([
16
+ "number",
17
+ "boolean",
18
+ "null",
19
+ "und",
20
+ "NaN",
21
+ "Infinity"
22
+ ], (ctx) => {
23
+ const { constants, type, part, res, expect } = ctx;
24
+ ctx.lispTree = lispify(constants, part.substring(res[0].length), expectTypes[expect].next, createLisp({
25
+ op: type === "number" ? res[12] ? LispType.BigInt : LispType.Number : LispType.GlobalSymbol,
26
+ a: LispType.None,
27
+ b: res[12] ? res[1] : res[0]
28
+ }), false, ctx);
29
+ });
30
+ setLispType([
31
+ "string",
32
+ "literal",
33
+ "regex"
34
+ ], (ctx) => {
35
+ const { constants, type, part, res, expect } = ctx;
36
+ ctx.lispTree = lispify(constants, part.substring(res[0].length), expectTypes[expect].next, createLisp({
37
+ op: type === "string" ? LispType.StringIndex : type === "literal" ? LispType.LiteralIndex : LispType.RegexIndex,
38
+ a: LispType.None,
39
+ b: res[1]
40
+ }), false, ctx);
41
+ });
42
+ setLispType(["void", "await"], (ctx) => {
43
+ const { constants, type, part, res, expect } = ctx;
44
+ const extract = restOfExp(constants, part.substring(res[0].length), [/^([^\s.?\w$]|\?[^.])/]);
45
+ if (!extract.trimStart().length) throw new SyntaxError("Unexpected end of expression");
46
+ ctx.lispTree = lispify(constants, part.substring(res[0].length + extract.length), expectTypes[expect].next, createLisp({
47
+ op: type === "void" ? LispType.Void : LispType.Await,
48
+ a: lispify(constants, extract),
49
+ b: LispType.None
50
+ }), false, ctx);
51
+ });
52
+ setLispType(["yield"], (ctx) => {
53
+ const { constants, part, res, expect, generatorDepth } = ctx;
54
+ if (generatorDepth === 0) throw new SyntaxError("Unexpected token");
55
+ const isDelegate = res[0].trimEnd().endsWith("*");
56
+ const extract = restOfExp(constants, part.substring(res[0].length), [/^([^\s.?\w$]|\?[^.])/]);
57
+ if (isDelegate && !extract.trimStart().length) throw new SyntaxError("Unexpected end of expression");
58
+ ctx.lispTree = lispify(constants, part.substring(res[0].length + extract.length), expectTypes[expect].next, createLisp({
59
+ op: isDelegate ? LispType.YieldDelegate : LispType.Yield,
60
+ a: lispify(constants, extract),
61
+ b: LispType.None
62
+ }), false, ctx);
63
+ });
64
+ setLispType(["new"], (ctx) => {
65
+ const { constants, part, res } = ctx;
66
+ let i = res[0].length;
67
+ const obj = restOfExp(constants, part.substring(i), [], void 0, "(");
68
+ if (!obj.trimStart().length) throw new SyntaxError("Unexpected end of expression");
69
+ i += obj.length + 1;
70
+ const args = [];
71
+ if (part.char(i - 1) === "(") {
72
+ const argsString = restOfExp(constants, part.substring(i), [], "(");
73
+ i += argsString.length + 1;
74
+ let found;
75
+ let j = 0;
76
+ while ((found = restOfExp(constants, argsString.substring(j), [/^,/])).length) {
77
+ j += found.length + 1;
78
+ args.push(found.trim());
79
+ }
80
+ }
81
+ ctx.lispTree = lispify(constants, part.substring(i), expectTypes.expEdge.next, createLisp({
82
+ op: LispType.New,
83
+ a: lispify(constants, obj, expectTypes.initialize.next),
84
+ b: args.map((arg) => lispify(constants, arg, expectTypes.initialize.next))
85
+ }), false, ctx);
86
+ });
87
+ }
88
+ //#endregion
89
+ export { registerValueLispTypes };
90
+
91
+ //# sourceMappingURL=values.js.map