@omgbase/oqx 0.1.0 → 0.3.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 (51) hide show
  1. package/README.md +23 -15
  2. package/dist/adapters/indexed.d.ts +11 -0
  3. package/dist/adapters/indexed.d.ts.map +1 -0
  4. package/dist/adapters/indexed.js +57 -0
  5. package/dist/adapters/indexed.js.map +1 -0
  6. package/dist/adapters/sqlite.d.ts +23 -0
  7. package/dist/adapters/sqlite.d.ts.map +1 -0
  8. package/dist/adapters/sqlite.js +113 -0
  9. package/dist/adapters/sqlite.js.map +1 -0
  10. package/dist/ast.d.ts +121 -0
  11. package/dist/ast.d.ts.map +1 -0
  12. package/dist/ast.js +7 -0
  13. package/dist/ast.js.map +1 -0
  14. package/dist/context.d.ts +38 -0
  15. package/dist/context.d.ts.map +1 -0
  16. package/dist/context.js +47 -0
  17. package/dist/context.js.map +1 -0
  18. package/dist/engine.d.ts +49 -0
  19. package/dist/engine.d.ts.map +1 -0
  20. package/dist/engine.js +437 -0
  21. package/dist/engine.js.map +1 -0
  22. package/dist/errors.d.ts +6 -0
  23. package/dist/errors.d.ts.map +1 -0
  24. package/dist/errors.js +13 -0
  25. package/dist/errors.js.map +1 -0
  26. package/dist/index.d.ts +34 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +74 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/lexer.d.ts +17 -0
  31. package/dist/lexer.d.ts.map +1 -0
  32. package/dist/lexer.js +187 -0
  33. package/dist/lexer.js.map +1 -0
  34. package/dist/parser.d.ts +6 -0
  35. package/dist/parser.d.ts.map +1 -0
  36. package/dist/parser.js +584 -0
  37. package/dist/parser.js.map +1 -0
  38. package/dist/plan.d.ts +21 -0
  39. package/dist/plan.d.ts.map +1 -0
  40. package/dist/plan.js +56 -0
  41. package/dist/plan.js.map +1 -0
  42. package/dist/planner.d.ts +24 -0
  43. package/dist/planner.d.ts.map +1 -0
  44. package/dist/planner.js +27 -0
  45. package/dist/planner.js.map +1 -0
  46. package/dist/semantics.d.ts +22 -0
  47. package/dist/semantics.d.ts.map +1 -0
  48. package/dist/semantics.js +142 -0
  49. package/dist/semantics.js.map +1 -0
  50. package/package.json +16 -6
  51. package/src/engine.ts +78 -26
package/dist/lexer.js ADDED
@@ -0,0 +1,187 @@
1
+ // OQX structural lexer for the generic kernel.
2
+ //
3
+ // Unlike the reference lexer (which slices raw source for the CEL layer), this
4
+ // one fully tokenizes: the parser builds an evaluable expression AST directly
5
+ // from the token stream, so there is no source-slicing seam.
6
+ //
7
+ // Tagged-template bindings are lexed as first-class tokens. Each template string
8
+ // FRAGMENT is lexed independently and a synthetic `binding` token is injected
9
+ // between adjacent fragments. A binding therefore can never span a token or
10
+ // alter the grammar — the prepared-statement / injection-safe property the
11
+ // host-bindings design note calls for. (A consequence: `${x}` inside a string
12
+ // literal does not interpolate — that fragment would be an unterminated string —
13
+ // which is exactly the desired "interpolation is a value, never source text".)
14
+ import { OqxError } from "./errors.js";
15
+ const KEYWORDS = new Set(["from", "where", "select"]);
16
+ // Multi-char operators, longest first (the scanner tries these before singles).
17
+ const MULTI_OPS = ["==", "!=", "<=", ">=", "&&", "||"];
18
+ const SINGLE_OPS = new Set(["<", ">", "!", "+", "-", "*", "/", "%"]);
19
+ const isIdentStart = (c) => /[A-Za-z_$]/.test(c);
20
+ const isIdentPart = (c) => /[A-Za-z0-9_$]/.test(c);
21
+ const isDigit = (c) => c >= "0" && c <= "9";
22
+ /** Lex a tagged-template call: the cooked string fragments and the count of
23
+ * interpolated values. Emits a single flat token stream with `binding` tokens
24
+ * (index 0..values-1) between fragments, terminated by `eof`. */
25
+ export function lexTemplate(fragments, values) {
26
+ const tokens = [];
27
+ let base = 0; // running offset across fragments + rendered `${…}` markers
28
+ for (let f = 0; f < fragments.length; f++) {
29
+ lexFragment(fragments[f], base, tokens);
30
+ base += fragments[f].length;
31
+ if (f < fragments.length - 1) {
32
+ // account for the value's rendered width in the display source (see rawSource)
33
+ const marker = `\${${f}}`;
34
+ tokens.push({ type: "binding", value: marker, pos: base, index: f });
35
+ base += marker.length;
36
+ }
37
+ }
38
+ if (values !== fragments.length - 1) {
39
+ throw new OqxError(`template arity mismatch: ${fragments.length} fragments, ${values} values`, "lex");
40
+ }
41
+ tokens.push({ type: "eof", value: "", pos: base });
42
+ return tokens;
43
+ }
44
+ /** Lex a plain string (no bindings) — used by the string entry point. */
45
+ export function lexString(src) {
46
+ const tokens = [];
47
+ lexFragment(src, 0, tokens);
48
+ tokens.push({ type: "eof", value: "", pos: src.length });
49
+ return tokens;
50
+ }
51
+ function lexFragment(src, base, out) {
52
+ let i = 0;
53
+ const n = src.length;
54
+ const push = (type, value, at) => {
55
+ out.push({ type, value, pos: base + at });
56
+ };
57
+ while (i < n) {
58
+ const c = src[i];
59
+ if (c === " " || c === "\t" || c === "\n" || c === "\r") {
60
+ i++;
61
+ continue;
62
+ }
63
+ if (c === "(") {
64
+ push("lparen", c, i);
65
+ i++;
66
+ continue;
67
+ }
68
+ if (c === ")") {
69
+ push("rparen", c, i);
70
+ i++;
71
+ continue;
72
+ }
73
+ if (c === "{") {
74
+ push("lbrace", c, i);
75
+ i++;
76
+ continue;
77
+ }
78
+ if (c === "}") {
79
+ push("rbrace", c, i);
80
+ i++;
81
+ continue;
82
+ }
83
+ if (c === ",") {
84
+ push("comma", c, i);
85
+ i++;
86
+ continue;
87
+ }
88
+ if (c === ":") {
89
+ push("colon", c, i);
90
+ i++;
91
+ continue;
92
+ }
93
+ if (c === "^") {
94
+ push("caret", c, i);
95
+ i++;
96
+ continue;
97
+ }
98
+ // `.` is a dot only when not the leading part of a number (.5) — but OQX has
99
+ // no leading-dot numerals, so a bare `.` is always navigation.
100
+ if (c === "." && !isDigit(src[i + 1] ?? "")) {
101
+ push("dot", c, i);
102
+ i++;
103
+ continue;
104
+ }
105
+ // string literal — decode into its VALUE (quotes stripped, escapes resolved).
106
+ if (c === '"' || c === "'") {
107
+ const quote = c;
108
+ const start = i;
109
+ i++;
110
+ let sval = "";
111
+ while (i < n && src[i] !== quote) {
112
+ if (src[i] === "\\") {
113
+ i++;
114
+ sval += unescape(src[i]);
115
+ }
116
+ else {
117
+ sval += src[i];
118
+ }
119
+ i++;
120
+ }
121
+ if (i >= n)
122
+ throw new OqxError(`unterminated string literal at ${base + start}`, "lex");
123
+ i++; // closing quote
124
+ out.push({ type: "string", value: sval, pos: base + start });
125
+ continue;
126
+ }
127
+ // number (integer or decimal, optional exponent)
128
+ if (isDigit(c) || (c === "." && isDigit(src[i + 1] ?? ""))) {
129
+ const start = i;
130
+ while (i < n && isDigit(src[i]))
131
+ i++;
132
+ if (src[i] === ".") {
133
+ i++;
134
+ while (i < n && isDigit(src[i]))
135
+ i++;
136
+ }
137
+ if (src[i] === "e" || src[i] === "E") {
138
+ i++;
139
+ if (src[i] === "+" || src[i] === "-")
140
+ i++;
141
+ while (i < n && isDigit(src[i]))
142
+ i++;
143
+ }
144
+ push("number", src.slice(start, i), start);
145
+ continue;
146
+ }
147
+ // operators (multi-char first)
148
+ const two = src.slice(i, i + 2);
149
+ if (MULTI_OPS.includes(two)) {
150
+ push("op", two, i);
151
+ i += 2;
152
+ continue;
153
+ }
154
+ if (SINGLE_OPS.has(c)) {
155
+ push("op", c, i);
156
+ i++;
157
+ continue;
158
+ }
159
+ // identifier / keyword
160
+ if (isIdentStart(c)) {
161
+ const start = i;
162
+ i++;
163
+ while (i < n && isIdentPart(src[i]))
164
+ i++;
165
+ const word = src.slice(start, i);
166
+ push(KEYWORDS.has(word) ? "kw" : "ident", word, start);
167
+ continue;
168
+ }
169
+ throw new OqxError(`unexpected character ${JSON.stringify(c)} at ${base + i}`, "lex");
170
+ }
171
+ }
172
+ function unescape(c) {
173
+ switch (c) {
174
+ case "n": return "\n";
175
+ case "t": return "\t";
176
+ case "r": return "\r";
177
+ case "0": return "\0";
178
+ case undefined: return "";
179
+ default: return c; // \\, \", \', \/, and anything else → the literal char
180
+ }
181
+ }
182
+ /** A human-readable reconstruction of the query source, with `${N}` markers where
183
+ * bindings were, for error messages. */
184
+ export function rawSource(fragments) {
185
+ return fragments.map((s, i) => (i < fragments.length - 1 ? `${s}\${${i}}` : s)).join("");
186
+ }
187
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../src/lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Query } from "./ast.js";
2
+ /** Parse a tagged-template call into a Query. */
3
+ export declare function parseTemplate(fragments: readonly string[], values: number): Query;
4
+ /** Parse a plain query string (no bindings) into a Query. */
5
+ export declare function parseString(src: string): Query;
6
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,KAAK,EACN,MAAM,UAAU,CAAC;AAQlB,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAEjF;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAE9C"}