@dbmason/core 0.1.0-alpha.1
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.
- package/README.md +17 -0
- package/dist/DbmasonContext-Baf-v6-B.mjs +31 -0
- package/dist/DbmasonContext-Baf-v6-B.mjs.map +1 -0
- package/dist/DbmasonContext-Dw0gG7AV.js +2 -0
- package/dist/DbmasonContext-Dw0gG7AV.js.map +1 -0
- package/dist/ast/nodes.d.ts +192 -0
- package/dist/ast/nodes.d.ts.map +1 -0
- package/dist/cli/commands/client.d.ts +2 -0
- package/dist/cli/commands/client.d.ts.map +1 -0
- package/dist/cli/commands/generate.d.ts +2 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/migrate.d.ts +2 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/pull.d.ts +2 -0
- package/dist/cli/commands/pull.d.ts.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +81 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/index.mjs +929 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/client/generateClientMetadata.d.ts +8 -0
- package/dist/client/generateClientMetadata.d.ts.map +1 -0
- package/dist/client/standaloneGenerator.d.ts +5 -0
- package/dist/client/standaloneGenerator.d.ts.map +1 -0
- package/dist/compiler/DbmasonContext.d.ts +74 -0
- package/dist/compiler/DbmasonContext.d.ts.map +1 -0
- package/dist/compiler/Dialect.d.ts +25 -0
- package/dist/compiler/Dialect.d.ts.map +1 -0
- package/dist/compiler/Introspector.d.ts +5 -0
- package/dist/compiler/Introspector.d.ts.map +1 -0
- package/dist/compiler/SnapshotBuilder.d.ts +5 -0
- package/dist/compiler/SnapshotBuilder.d.ts.map +1 -0
- package/dist/compiler/analyzers/dependency.resolver.d.ts +11 -0
- package/dist/compiler/analyzers/dependency.resolver.d.ts.map +1 -0
- package/dist/compiler/analyzers/schema.analyzer.d.ts +11 -0
- package/dist/compiler/analyzers/schema.analyzer.d.ts.map +1 -0
- package/dist/compiler/compile.d.ts +18 -0
- package/dist/compiler/compile.d.ts.map +1 -0
- package/dist/compiler/diff.d.ts +25 -0
- package/dist/compiler/diff.d.ts.map +1 -0
- package/dist/definitions/Cron.d.ts +2 -0
- package/dist/definitions/Cron.d.ts.map +1 -0
- package/dist/definitions/Extension.d.ts +2 -0
- package/dist/definitions/Extension.d.ts.map +1 -0
- package/dist/definitions/Function.d.ts +2 -0
- package/dist/definitions/Function.d.ts.map +1 -0
- package/dist/definitions/Grant.d.ts +2 -0
- package/dist/definitions/Grant.d.ts.map +1 -0
- package/dist/definitions/Module.d.ts +2 -0
- package/dist/definitions/Module.d.ts.map +1 -0
- package/dist/definitions/Policy.d.ts +2 -0
- package/dist/definitions/Policy.d.ts.map +1 -0
- package/dist/definitions/Procedure.d.ts +2 -0
- package/dist/definitions/Procedure.d.ts.map +1 -0
- package/dist/definitions/Role.d.ts +2 -0
- package/dist/definitions/Role.d.ts.map +1 -0
- package/dist/definitions/Table.d.ts +4 -0
- package/dist/definitions/Table.d.ts.map +1 -0
- package/dist/definitions/Trigger.d.ts +2 -0
- package/dist/definitions/Trigger.d.ts.map +1 -0
- package/dist/definitions/Type.d.ts +2 -0
- package/dist/definitions/Type.d.ts.map +1 -0
- package/dist/definitions/View.d.ts +3 -0
- package/dist/definitions/View.d.ts.map +1 -0
- package/dist/definitions/collectors/Cron.internal.d.ts +6 -0
- package/dist/definitions/collectors/Cron.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Extension.internal.d.ts +9 -0
- package/dist/definitions/collectors/Extension.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Function.internal.d.ts +8 -0
- package/dist/definitions/collectors/Function.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Grant.internal.d.ts +8 -0
- package/dist/definitions/collectors/Grant.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Policy.internal.d.ts +7 -0
- package/dist/definitions/collectors/Policy.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Procedure.internal.d.ts +8 -0
- package/dist/definitions/collectors/Procedure.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Role.internal.d.ts +8 -0
- package/dist/definitions/collectors/Role.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Table.internal.d.ts +23 -0
- package/dist/definitions/collectors/Table.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Trigger.internal.d.ts +5 -0
- package/dist/definitions/collectors/Trigger.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Type.internal.d.ts +11 -0
- package/dist/definitions/collectors/Type.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/View.internal.d.ts +10 -0
- package/dist/definitions/collectors/View.internal.d.ts.map +1 -0
- package/dist/definitions/handles.d.ts +121 -0
- package/dist/definitions/handles.d.ts.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +353 -0
- package/dist/index.mjs.map +1 -0
- package/dist/templates/cli/auth.cli.template.ts +95 -0
- package/dist/templates/cli/minimal.cli.template.ts +5 -0
- package/dist/types.d.ts +18 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +38 -0
- package/templates/cli/auth.cli.template.ts +95 -0
- package/templates/cli/minimal.cli.template.ts +5 -0
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import { r as m } from "./DbmasonContext-Baf-v6-B.mjs";
|
|
2
|
+
import { D as K } from "./DbmasonContext-Baf-v6-B.mjs";
|
|
3
|
+
function T(o, ...n) {
|
|
4
|
+
let e = "";
|
|
5
|
+
for (let s = 0; s < o.length; s++)
|
|
6
|
+
e += o[s], s < n.length && (e += String(n[s]));
|
|
7
|
+
return e;
|
|
8
|
+
}
|
|
9
|
+
function N(o) {
|
|
10
|
+
return typeof o == "string" ? o : o.moduleName && o.moduleName !== "global" ? `"${o.moduleName}"."${o.tableName}"` : o.tableName;
|
|
11
|
+
}
|
|
12
|
+
function b(o) {
|
|
13
|
+
return typeof o == "string" ? o : o.roleName;
|
|
14
|
+
}
|
|
15
|
+
function g(o) {
|
|
16
|
+
return typeof o == "string" ? o : o.moduleName && o.moduleName !== "global" ? `"${o.moduleName}"."${o.typeName}"` : o.typeName;
|
|
17
|
+
}
|
|
18
|
+
function $(o) {
|
|
19
|
+
return typeof o == "string" ? o : o.moduleName && o.moduleName !== "global" ? `"${o.moduleName}"."${o.name}"` : o.name;
|
|
20
|
+
}
|
|
21
|
+
function x(o) {
|
|
22
|
+
return typeof o == "string" ? o : o.moduleName && o.moduleName !== "global" ? `"${o.moduleName}"."${o.name}"` : o.name;
|
|
23
|
+
}
|
|
24
|
+
function v(o) {
|
|
25
|
+
return typeof o == "string" ? { column: o } : { table: o.tableName, column: o.columnName, module: o.moduleName };
|
|
26
|
+
}
|
|
27
|
+
function H(o, n) {
|
|
28
|
+
const e = n.split("."), s = e.length > 1 ? e[0] : void 0;
|
|
29
|
+
return {
|
|
30
|
+
kind: "ProcedureHandle",
|
|
31
|
+
name: e.length > 1 ? e[1] : e[0],
|
|
32
|
+
moduleName: s
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function w(o, n) {
|
|
36
|
+
const e = n.split("."), s = e.length > 1 ? e[0] : void 0;
|
|
37
|
+
return {
|
|
38
|
+
kind: "FunctionHandle",
|
|
39
|
+
name: e.length > 1 ? e[1] : e[0],
|
|
40
|
+
moduleName: s
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function D(o, n) {
|
|
44
|
+
const e = n.split("."), s = e.length > 1 ? e[0] : void 0;
|
|
45
|
+
return {
|
|
46
|
+
kind: "TypeHandle",
|
|
47
|
+
typeName: e.length > 1 ? e[1] : e[0],
|
|
48
|
+
moduleName: s,
|
|
49
|
+
ctx: o
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function P(o, n) {
|
|
53
|
+
const e = n.split("."), s = e.length > 1 ? e[0] : void 0;
|
|
54
|
+
return {
|
|
55
|
+
kind: "RoleHandle",
|
|
56
|
+
roleName: e.length > 1 ? e[1] : e[0],
|
|
57
|
+
moduleName: s
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function p(o, n) {
|
|
61
|
+
const e = n.split("."), s = e.length > 1 ? e[0] : void 0, t = e.length > 1 ? e[1] : e[0], l = {
|
|
62
|
+
kind: "TableHandle",
|
|
63
|
+
tableName: t,
|
|
64
|
+
moduleName: s,
|
|
65
|
+
ctx: o
|
|
66
|
+
};
|
|
67
|
+
return new Proxy(l, {
|
|
68
|
+
get(i, c) {
|
|
69
|
+
if (c in i) return i[c];
|
|
70
|
+
if (typeof c == "string")
|
|
71
|
+
return {
|
|
72
|
+
kind: "ColumnHandle",
|
|
73
|
+
tableName: t,
|
|
74
|
+
columnName: c,
|
|
75
|
+
moduleName: s
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
const j = p, q = p;
|
|
81
|
+
function C(o, n, e, s) {
|
|
82
|
+
const { ctx: t, moduleName: l } = m(o), i = s(e.columns), c = [];
|
|
83
|
+
if (e.triggers)
|
|
84
|
+
for (const r of e.triggers) {
|
|
85
|
+
let d;
|
|
86
|
+
if (r && typeof r == "object" && "procedure" in r) {
|
|
87
|
+
const f = $(r.procedure);
|
|
88
|
+
d = {
|
|
89
|
+
kind: "Trigger",
|
|
90
|
+
name: r.name,
|
|
91
|
+
table: n,
|
|
92
|
+
when: r.when,
|
|
93
|
+
events: r.events,
|
|
94
|
+
functionName: f,
|
|
95
|
+
forEach: r.forEach,
|
|
96
|
+
condition: r.condition,
|
|
97
|
+
module: l
|
|
98
|
+
};
|
|
99
|
+
} else
|
|
100
|
+
d = { ...r, table: n, module: l };
|
|
101
|
+
c.push(d), t.triggers.set(l ? `${l}.${d.name}` : d.name, d);
|
|
102
|
+
}
|
|
103
|
+
const a = [];
|
|
104
|
+
if (e.policies)
|
|
105
|
+
for (const r of e.policies) {
|
|
106
|
+
let d;
|
|
107
|
+
r && typeof r == "object" && "method" in r && !("kind" in r) ? d = {
|
|
108
|
+
kind: "Policy",
|
|
109
|
+
name: r.name,
|
|
110
|
+
table: n,
|
|
111
|
+
module: l,
|
|
112
|
+
method: r.method,
|
|
113
|
+
sql: r.sql,
|
|
114
|
+
rbac: r.rbac?.map((f) => ({
|
|
115
|
+
roles: f.roles.map((k) => b(k)),
|
|
116
|
+
operations: f.allow
|
|
117
|
+
}))
|
|
118
|
+
} : d = { ...r, table: n, module: l }, a.push(d), t.policies.set(l ? `${l}.${d.name}` : d.name, d);
|
|
119
|
+
}
|
|
120
|
+
const u = {
|
|
121
|
+
kind: "Table",
|
|
122
|
+
name: n,
|
|
123
|
+
columns: i,
|
|
124
|
+
constraints: e.constraints || [],
|
|
125
|
+
indexes: e.indexes || [],
|
|
126
|
+
policies: a,
|
|
127
|
+
triggers: c,
|
|
128
|
+
migration: e.migration,
|
|
129
|
+
options: e.options,
|
|
130
|
+
module: l
|
|
131
|
+
};
|
|
132
|
+
t.tables.set(l ? `${l}.${n}` : n, u);
|
|
133
|
+
const y = {
|
|
134
|
+
kind: "TableHandle",
|
|
135
|
+
tableName: n,
|
|
136
|
+
ctx: t,
|
|
137
|
+
moduleName: l
|
|
138
|
+
};
|
|
139
|
+
for (const r of Object.keys(i))
|
|
140
|
+
y[r] = {
|
|
141
|
+
kind: "ColumnHandle",
|
|
142
|
+
tableName: n,
|
|
143
|
+
columnName: r,
|
|
144
|
+
moduleName: l
|
|
145
|
+
};
|
|
146
|
+
return y;
|
|
147
|
+
}
|
|
148
|
+
function E(o, n, e) {
|
|
149
|
+
const { ctx: s, moduleName: t } = m(o), l = {
|
|
150
|
+
kind: "View",
|
|
151
|
+
name: n,
|
|
152
|
+
query: e,
|
|
153
|
+
module: t
|
|
154
|
+
};
|
|
155
|
+
s.views.set(t ? `${t}.${n}` : n, l);
|
|
156
|
+
}
|
|
157
|
+
function F(o, n, e) {
|
|
158
|
+
const { ctx: s, moduleName: t } = m(o), l = {
|
|
159
|
+
kind: "MaterializedView",
|
|
160
|
+
name: n,
|
|
161
|
+
query: e,
|
|
162
|
+
module: t
|
|
163
|
+
};
|
|
164
|
+
s.materializedViews.set(t ? `${t}.${n}` : n, l);
|
|
165
|
+
}
|
|
166
|
+
function V(o, n, e) {
|
|
167
|
+
const { ctx: s, moduleName: t } = m(o);
|
|
168
|
+
let l = "void";
|
|
169
|
+
e.returns && (typeof e.returns == "string" ? l = e.returns : e.returns.kind === "TableHandle" ? l = N(e.returns) : e.returns.kind === "TypeHandle" && (l = g(e.returns)));
|
|
170
|
+
const i = {};
|
|
171
|
+
if (e.args)
|
|
172
|
+
for (const [a, u] of Object.entries(e.args))
|
|
173
|
+
i[a] = g(u);
|
|
174
|
+
const c = {
|
|
175
|
+
kind: "Procedure",
|
|
176
|
+
name: n,
|
|
177
|
+
module: t,
|
|
178
|
+
args: i,
|
|
179
|
+
returns: l,
|
|
180
|
+
language: e.language || "plpgsql",
|
|
181
|
+
body: e.body
|
|
182
|
+
};
|
|
183
|
+
return s.procedures.set(t ? `${t}.${n}` : n, c), {
|
|
184
|
+
kind: "ProcedureHandle",
|
|
185
|
+
name: n,
|
|
186
|
+
moduleName: t
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
function R(o, n, e) {
|
|
190
|
+
const { ctx: s, moduleName: t } = m(o);
|
|
191
|
+
let l = "void";
|
|
192
|
+
e.returns && (typeof e.returns == "string" ? l = e.returns : e.returns.kind === "TableHandle" ? l = N(e.returns) : e.returns.kind === "TypeHandle" && (l = g(e.returns)));
|
|
193
|
+
const i = {};
|
|
194
|
+
if (e.args)
|
|
195
|
+
for (const [a, u] of Object.entries(e.args))
|
|
196
|
+
i[a] = g(u);
|
|
197
|
+
const c = {
|
|
198
|
+
kind: "Function",
|
|
199
|
+
name: n,
|
|
200
|
+
module: t,
|
|
201
|
+
args: i,
|
|
202
|
+
returns: l,
|
|
203
|
+
language: e.language || "plpgsql",
|
|
204
|
+
body: e.body
|
|
205
|
+
};
|
|
206
|
+
return s.functions.set(t ? `${t}.${n}` : n, c), {
|
|
207
|
+
kind: "FunctionHandle",
|
|
208
|
+
name: n,
|
|
209
|
+
moduleName: t
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
function _(o, n, e, s) {
|
|
213
|
+
const { ctx: t, moduleName: l } = m(o), i = s.procedure ? $(s.procedure) : void 0, c = {
|
|
214
|
+
kind: "Trigger",
|
|
215
|
+
name: e,
|
|
216
|
+
table: n,
|
|
217
|
+
when: s.when,
|
|
218
|
+
events: s.events,
|
|
219
|
+
functionName: i,
|
|
220
|
+
// TODO: Make optional in type if body is present
|
|
221
|
+
forEach: s.forEach,
|
|
222
|
+
condition: s.condition,
|
|
223
|
+
body: s.body,
|
|
224
|
+
module: l
|
|
225
|
+
};
|
|
226
|
+
t.triggers.set(l ? `${l}.${e}` : e, c);
|
|
227
|
+
const a = l ? `${l}.${n}` : n, u = t.tables.get(a);
|
|
228
|
+
u && (u.triggers || (u.triggers = []), u.triggers.push(c));
|
|
229
|
+
}
|
|
230
|
+
function z(o, n, e) {
|
|
231
|
+
const { ctx: s, moduleName: t } = m(o), l = e.table ? N(e.table) : "", i = e.rbac?.map((a) => ({
|
|
232
|
+
roles: a.roles.map((u) => b(u)),
|
|
233
|
+
operations: a.allow
|
|
234
|
+
})), c = {
|
|
235
|
+
kind: "Policy",
|
|
236
|
+
name: n,
|
|
237
|
+
table: l,
|
|
238
|
+
module: t,
|
|
239
|
+
method: e.method,
|
|
240
|
+
sql: e.sql,
|
|
241
|
+
rbac: i
|
|
242
|
+
};
|
|
243
|
+
return s.policies.set(t ? `${t}.${n}` : n, c), c;
|
|
244
|
+
}
|
|
245
|
+
function O(o, n, e) {
|
|
246
|
+
const { ctx: s, moduleName: t } = m(o), l = {
|
|
247
|
+
kind: "Role",
|
|
248
|
+
name: n,
|
|
249
|
+
options: e,
|
|
250
|
+
module: t
|
|
251
|
+
};
|
|
252
|
+
return s.roles.set(t ? `${t}.${n}` : n, l), {
|
|
253
|
+
kind: "RoleHandle",
|
|
254
|
+
roleName: n,
|
|
255
|
+
moduleName: t
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
function M(o, n, e, s, t) {
|
|
259
|
+
const l = b(n), i = N(t), c = {
|
|
260
|
+
kind: "Grant",
|
|
261
|
+
name: `grant_${e.join("_")}_on_${i}_to_${l}`,
|
|
262
|
+
privileges: e,
|
|
263
|
+
on: s,
|
|
264
|
+
to: l,
|
|
265
|
+
object: i
|
|
266
|
+
};
|
|
267
|
+
o.grants.set(c.name, c);
|
|
268
|
+
}
|
|
269
|
+
function G(o, n, e, s) {
|
|
270
|
+
const { ctx: t, moduleName: l } = m(o), i = {
|
|
271
|
+
kind: "Cron",
|
|
272
|
+
name: n,
|
|
273
|
+
schedule: e,
|
|
274
|
+
command: s,
|
|
275
|
+
module: l
|
|
276
|
+
};
|
|
277
|
+
t.crons.set(l ? `${l}.${n}` : n, i);
|
|
278
|
+
}
|
|
279
|
+
function S(o, n, e) {
|
|
280
|
+
const { ctx: s, moduleName: t } = m(o), l = {
|
|
281
|
+
kind: "Extension",
|
|
282
|
+
name: n,
|
|
283
|
+
schema: e?.schema,
|
|
284
|
+
version: e?.version,
|
|
285
|
+
module: t
|
|
286
|
+
};
|
|
287
|
+
s.extensions.set(t ? `${t}.${n}` : n, l);
|
|
288
|
+
}
|
|
289
|
+
function A(o, n, e) {
|
|
290
|
+
const { ctx: s, moduleName: t } = m(o), l = {
|
|
291
|
+
kind: "Type",
|
|
292
|
+
name: n,
|
|
293
|
+
type: "enum",
|
|
294
|
+
values: e,
|
|
295
|
+
module: t
|
|
296
|
+
};
|
|
297
|
+
return s.types.set(t ? `${t}.${n}` : n, l), {
|
|
298
|
+
kind: "TypeHandle",
|
|
299
|
+
typeName: n,
|
|
300
|
+
moduleName: t,
|
|
301
|
+
ctx: s
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
function B(o, n, e) {
|
|
305
|
+
const { ctx: s, moduleName: t } = m(o), l = {};
|
|
306
|
+
for (const [c, a] of Object.entries(e))
|
|
307
|
+
l[c] = g(a);
|
|
308
|
+
const i = {
|
|
309
|
+
kind: "Type",
|
|
310
|
+
name: n,
|
|
311
|
+
type: "composite",
|
|
312
|
+
fields: l,
|
|
313
|
+
module: t
|
|
314
|
+
};
|
|
315
|
+
return s.types.set(t ? `${t}.${n}` : n, i), {
|
|
316
|
+
kind: "TypeHandle",
|
|
317
|
+
typeName: n,
|
|
318
|
+
moduleName: t,
|
|
319
|
+
ctx: s
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
export {
|
|
323
|
+
K as DbmasonContext,
|
|
324
|
+
B as internalDefineCompositeType,
|
|
325
|
+
G as internalDefineCron,
|
|
326
|
+
A as internalDefineEnum,
|
|
327
|
+
S as internalDefineExtension,
|
|
328
|
+
R as internalDefineFunction,
|
|
329
|
+
M as internalDefineGrant,
|
|
330
|
+
F as internalDefineMaterializedView,
|
|
331
|
+
z as internalDefinePolicy,
|
|
332
|
+
V as internalDefineProcedure,
|
|
333
|
+
O as internalDefineRole,
|
|
334
|
+
C as internalDefineTable,
|
|
335
|
+
_ as internalDefineTrigger,
|
|
336
|
+
E as internalDefineView,
|
|
337
|
+
v as resolveColumn,
|
|
338
|
+
x as resolveFunction,
|
|
339
|
+
$ as resolveProcedure,
|
|
340
|
+
b as resolveRole,
|
|
341
|
+
m as resolveScope,
|
|
342
|
+
N as resolveTable,
|
|
343
|
+
g as resolveType,
|
|
344
|
+
T as sql,
|
|
345
|
+
w as useFunction,
|
|
346
|
+
q as useMaterializedView,
|
|
347
|
+
H as useProcedure,
|
|
348
|
+
P as useRole,
|
|
349
|
+
p as useTable,
|
|
350
|
+
D as useType,
|
|
351
|
+
j as useView
|
|
352
|
+
};
|
|
353
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/definitions/handles.ts","../src/definitions/collectors/Table.internal.ts","../src/definitions/collectors/View.internal.ts","../src/definitions/collectors/Procedure.internal.ts","../src/definitions/collectors/Function.internal.ts","../src/definitions/collectors/Trigger.internal.ts","../src/definitions/collectors/Policy.internal.ts","../src/definitions/collectors/Role.internal.ts","../src/definitions/collectors/Grant.internal.ts","../src/definitions/collectors/Cron.internal.ts","../src/definitions/collectors/Extension.internal.ts","../src/definitions/collectors/Type.internal.ts"],"sourcesContent":["import { DbmasonScope } from '../compiler/DbmasonContext';\n\n/**\n * A simple identity tagged template literal for SQL syntax highlighting in IDEs.\n */\nexport function sql(strings: TemplateStringsArray, ...values: any[]): string {\n let result = '';\n for (let i = 0; i < strings.length; i++) {\n result += strings[i];\n if (i < values.length) {\n result += String(values[i]);\n }\n }\n return result;\n}\n\nexport type ReferentialAction = 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT' | 'NO ACTION';\n\n/**\n * ColumnHandle - Reference to a specific column in a specific table.\n */\nexport interface ColumnHandle {\n kind: 'ColumnHandle';\n tableName: string;\n columnName: string;\n moduleName?: string;\n}\n\n/**\n * TableHandle - Typed proxy for a database table.\n */\nexport interface TableHandle extends DbmasonScope {\n kind: 'TableHandle';\n tableName: string;\n moduleName?: string;\n ctx: any;\n}\n\n/**\n * RoleHandle - Typed proxy for a database role.\n */\nexport interface RoleHandle {\n kind: 'RoleHandle';\n roleName: string;\n moduleName?: string;\n}\n\n/**\n * TypeHandle - Typed proxy for a custom database type.\n */\nexport interface TypeHandle {\n kind: 'TypeHandle';\n typeName: string;\n moduleName?: string;\n ctx: any;\n}\n\n/**\n * ProcedureHandle - Typed proxy for a database procedure.\n */\nexport interface ProcedureHandle {\n kind: 'ProcedureHandle';\n name: string;\n moduleName?: string;\n}\n\n/**\n * FunctionHandle - Typed proxy for a database function.\n */\nexport interface FunctionHandle {\n kind: 'FunctionHandle';\n name: string;\n moduleName?: string;\n}\n\n/**\n * Polydbmason references\n */\nexport type ColumnReference = ColumnHandle | string;\nexport type TableReference = TableHandle | string;\nexport type RoleReference = RoleHandle | string;\nexport type TypeReference = TypeHandle | string;\n\n/**\n * resolveTable - Unwraps a table handle or string into a plain table name.\n */\nexport function resolveTable(ref: TableReference): string {\n if (typeof ref === 'string') return ref;\n return ref.moduleName && ref.moduleName !== 'global' ? `\"${ref.moduleName}\".\"${ref.tableName}\"` : ref.tableName;\n}\n\n/**\n * resolveRole - Unwraps a role handle or string into a plain role name.\n */\nexport function resolveRole(ref: RoleReference): string {\n if (typeof ref === 'string') return ref;\n return ref.roleName;\n}\n\n/**\n * resolveType - Unwraps a type handle or string into a plain type name.\n */\nexport function resolveType(ref: TypeReference): string {\n if (typeof ref === 'string') return ref;\n return ref.moduleName && ref.moduleName !== 'global' ? `\"${ref.moduleName}\".\"${ref.typeName}\"` : ref.typeName;\n}\n\n/**\n * resolveProcedure - Unwraps a procedure handle or string.\n */\nexport function resolveProcedure(ref: ProcedureHandle | string): string {\n if (typeof ref === 'string') return ref;\n return ref.moduleName && ref.moduleName !== 'global' ? `\"${ref.moduleName}\".\"${ref.name}\"` : ref.name;\n}\n\n/**\n * resolveFunction - Unwraps a function handle or string.\n */\nexport function resolveFunction(ref: FunctionHandle | string): string {\n if (typeof ref === 'string') return ref;\n return ref.moduleName && ref.moduleName !== 'global' ? `\"${ref.moduleName}\".\"${ref.name}\"` : ref.name;\n}\n\n/**\n * resolveColumn - Unwraps a column reference into its components.\n */\nexport function resolveColumn(ref: ColumnReference): { table?: string, column: string, module?: string } {\n if (typeof ref === 'string') return { column: ref };\n return { table: ref.tableName, column: ref.columnName, module: (ref as any).moduleName };\n}\n\n/**\n * useProcedure - Resolves a procedure handle from the context by name.\n */\nexport function useProcedure(ctx: any, name: string): ProcedureHandle {\n const parts = name.split('.');\n const moduleName = parts.length > 1 ? parts[0] : undefined;\n const procName = parts.length > 1 ? parts[1] : parts[0];\n\n return {\n kind: 'ProcedureHandle',\n name: procName,\n moduleName\n };\n}\n\n/**\n * useFunction - Resolves a function handle from the context by name.\n */\nexport function useFunction(ctx: any, name: string): FunctionHandle {\n const parts = name.split('.');\n const moduleName = parts.length > 1 ? parts[0] : undefined;\n const procName = parts.length > 1 ? parts[1] : parts[0];\n\n return {\n kind: 'FunctionHandle',\n name: procName,\n moduleName\n };\n}\n\n/**\n * useType - Resolves a type handle from the context by name.\n */\nexport function useType(ctx: any, name: string): TypeHandle {\n const parts = name.split('.');\n const moduleName = parts.length > 1 ? parts[0] : undefined;\n const typeName = parts.length > 1 ? parts[1] : parts[0];\n\n return {\n kind: 'TypeHandle',\n typeName,\n moduleName,\n ctx\n };\n}\n\n/**\n * useRole - Resolves a role handle from the context by name.\n */\nexport function useRole(ctx: any, name: string): RoleHandle {\n const parts = name.split('.');\n const moduleName = parts.length > 1 ? parts[0] : undefined;\n const roleName = parts.length > 1 ? parts[1] : parts[0];\n\n return {\n kind: 'RoleHandle',\n roleName,\n moduleName\n };\n}\n\n/**\n * useTable - Resolves a table handle from the context by name.\n */\nexport function useTable(ctx: any, name: string): TableHandle & Record<string, ColumnHandle> {\n const parts = name.split('.');\n const moduleName = parts.length > 1 ? parts[0] : undefined;\n const tableName = parts.length > 1 ? parts[1] : parts[0];\n\n const handle: any = {\n kind: 'TableHandle',\n tableName,\n moduleName,\n ctx\n };\n\n return new Proxy(handle, {\n get(target, prop) {\n if (prop in target) return target[prop];\n if (typeof prop === 'string') {\n return {\n kind: 'ColumnHandle',\n tableName,\n columnName: prop,\n moduleName\n };\n }\n return undefined;\n }\n });\n}\n\n/**\n * useView - Resolves a view handle from the context by name.\n */\nexport const useView = useTable;\n\n/**\n * useMaterializedView - Resolves a materialized view handle from the context by name.\n */\nexport const useMaterializedView = useTable;\n","import { BaseNode, ColumnNode, IndexNode, ConstraintNode, TableNode, AnalyzedTableNode, TriggerNode, PolicyNode, ProcedureNode, FunctionNode, ViewNode, MaterializedViewNode, TypeNode, GrantNode, CronNode, ExtensionNode, RoleNode } from '../../ast/nodes';\nimport { DbmasonContext, DbmasonScope, resolveScope } from '../../compiler/DbmasonContext';\nimport { \n ColumnHandle, \n TableHandle, \n TableReference, \n resolveTable,\n resolveProcedure,\n resolveRole\n} from '../handles';\n\n\n\n\n/**\n * Common Constraint Helpers\n */\nexport const check = (name: string, definition: string): ConstraintNode => ({\n kind: 'Constraint', name, table: '', type: 'check', definition\n});\nexport const uniqueConstraint = (name: string, definition: string): ConstraintNode => ({\n kind: 'Constraint', name, table: '', type: 'unique', definition\n});\nexport const foreignKey = (name: string, definition: string): ConstraintNode => ({\n kind: 'Constraint', name, table: '', type: 'foreign_key', definition\n});\n\nexport interface TableCollectorInput {\n columns: unknown;\n constraints?: ConstraintNode[];\n indexes?: IndexNode[];\n policies?: unknown[];\n triggers?: unknown[];\n migration?: 'safe' | 'destructive';\n options?: unknown;\n}\n\n/**\n * Internal Table Collector Logic\n */\nexport function internalDefineTable(\n scope: DbmasonContext | DbmasonScope, \n name: string, \n input: TableCollectorInput,\n processColumns: (columns: any) => Record<string, ColumnNode>\n): TableHandle & Record<string, ColumnHandle> {\n const { ctx, moduleName } = resolveScope(scope);\n \n const columns = processColumns(input.columns);\n\n const triggerNodes: TriggerNode[] = [];\n if (input.triggers) {\n for (const t of input.triggers as any[]) {\n let node: TriggerNode;\n if (t && typeof t === 'object' && 'procedure' in t) {\n const procName = resolveProcedure(t.procedure);\n node = {\n kind: 'Trigger',\n name: t.name,\n table: name,\n when: t.when,\n events: t.events,\n functionName: procName,\n forEach: t.forEach,\n condition: t.condition,\n module: moduleName\n };\n } else {\n node = { ...t as TriggerNode, table: name, module: moduleName };\n }\n triggerNodes.push(node);\n ctx.triggers.set(moduleName ? `${moduleName}.${node.name}` : node.name, node);\n }\n }\n\n const policyNodes: PolicyNode[] = [];\n if (input.policies) {\n for (const p of input.policies as any[]) {\n let node: PolicyNode;\n if (p && typeof p === 'object' && 'method' in p && !('kind' in p)) {\n node = {\n kind: 'Policy',\n name: (p as any).name,\n table: name,\n module: moduleName,\n method: p.method as any,\n sql: p.sql,\n rbac: p.rbac?.map((r: any) => ({\n roles: r.roles.map((role: any) => resolveRole(role)),\n operations: r.allow\n }))\n };\n } else {\n node = { ...p as PolicyNode, table: name, module: moduleName };\n }\n policyNodes.push(node);\n ctx.policies.set(moduleName ? `${moduleName}.${node.name}` : node.name, node);\n }\n }\n\n const tableNode: TableNode = {\n kind: 'Table',\n name,\n columns,\n constraints: input.constraints || [],\n indexes: input.indexes || [],\n policies: policyNodes,\n triggers: triggerNodes,\n migration: input.migration,\n options: input.options,\n module: moduleName\n };\n\n ctx.tables.set(moduleName ? `${moduleName}.${name}` : name, tableNode);\n\n const handle: TableHandle & Record<string, ColumnHandle> = {\n kind: 'TableHandle',\n tableName: name,\n ctx,\n moduleName\n } as any;\n\n for (const colName of Object.keys(columns)) {\n handle[colName] = {\n kind: 'ColumnHandle',\n tableName: name,\n columnName: colName,\n moduleName\n };\n }\n\n return handle;\n}\n","import { BaseNode, ColumnNode, IndexNode, ConstraintNode, TableNode, AnalyzedTableNode, TriggerNode, PolicyNode, ProcedureNode, FunctionNode, ViewNode, MaterializedViewNode, TypeNode, GrantNode, CronNode, ExtensionNode, RoleNode } from '../../ast/nodes';\nimport { DbmasonContext, DbmasonScope, resolveScope } from '../../compiler/DbmasonContext';\n\n\n/**\n * Internal View Collector\n */\nexport function internalDefineView(\n scope: DbmasonContext | DbmasonScope, \n name: string, \n query: string\n): void {\n const { ctx, moduleName } = resolveScope(scope);\n const node: ViewNode = {\n kind: 'View',\n name,\n query,\n module: moduleName\n };\n ctx.views.set(moduleName ? `${moduleName}.${name}` : name, node);\n}\n\n/**\n * Internal Materialized View Collector\n */\nexport function internalDefineMaterializedView(\n scope: DbmasonContext | DbmasonScope, \n name: string, \n query: string\n): void {\n const { ctx, moduleName } = resolveScope(scope);\n const node: MaterializedViewNode = {\n kind: 'MaterializedView',\n name,\n query,\n module: moduleName\n };\n ctx.materializedViews.set(moduleName ? `${moduleName}.${name}` : name, node);\n}\n","import { BaseNode, RoutineInput, ColumnNode, IndexNode, ConstraintNode, TableNode, AnalyzedTableNode, TriggerNode, PolicyNode, ProcedureNode, FunctionNode, ViewNode, MaterializedViewNode, TypeNode, GrantNode, CronNode, ExtensionNode, RoleNode } from '../../ast/nodes';\nimport { DbmasonContext, DbmasonScope, resolveScope } from '../../compiler/DbmasonContext';\nimport { \n ProcedureHandle, \n TableHandle,\n TypeHandle,\n TypeReference, \n resolveType, \n resolveTable, \n TableReference \n} from '../handles';\n\n/**\n * Internal Procedure Collector\n */\nexport function internalDefineProcedure(\n scope: DbmasonContext | DbmasonScope, \n name: string, \n input: RoutineInput\n): ProcedureHandle {\n const { ctx, moduleName } = resolveScope(scope);\n\n // Resolve return type\n let returns: string = 'void';\n if (input.returns) {\n if (typeof input.returns === 'string') {\n returns = input.returns;\n } else if ((input.returns as any).kind === 'TableHandle') {\n returns = resolveTable(input.returns as TableHandle);\n } else if ((input.returns as any).kind === 'TypeHandle') {\n returns = resolveType(input.returns as TypeHandle);\n }\n }\n\n // Resolve args types\n const args: Record<string, string> = {};\n if (input.args) {\n for (const [argName, argType] of Object.entries(input.args)) {\n args[argName] = resolveType(argType as TypeReference);\n }\n }\n\n const node: ProcedureNode = {\n kind: 'Procedure',\n name,\n module: moduleName,\n args,\n returns,\n language: input.language || 'plpgsql',\n body: input.body\n };\n\n ctx.procedures.set(moduleName ? `${moduleName}.${name}` : name, node);\n\n return {\n kind: 'ProcedureHandle',\n name,\n moduleName\n };\n}\n","import { FunctionNode, RoutineInput } from '../../ast/nodes';\nimport { DbmasonContext, DbmasonScope, resolveScope } from '../../compiler/DbmasonContext';\nimport {\n FunctionHandle,\n resolveTable,\n resolveType,\n TableHandle,\n TypeHandle,\n TypeReference\n} from '../handles';\n/**\n * Internal Function Collector\n */\nexport function internalDefineFunction(\n scope: DbmasonContext | DbmasonScope, \n name: string, \n input: RoutineInput\n): FunctionHandle {\n const { ctx, moduleName } = resolveScope(scope);\n\n // Resolve return type\n let returns: string = 'void';\n if (input.returns) {\n if (typeof input.returns === 'string') {\n returns = input.returns;\n } else if ((input.returns as any).kind === 'TableHandle') {\n returns = resolveTable(input.returns as TableHandle);\n } else if ((input.returns as any).kind === 'TypeHandle') {\n returns = resolveType(input.returns as TypeHandle);\n }\n }\n\n // Resolve args types\n const args: Record<string, string> = {};\n if (input.args) {\n for (const [argName, argType] of Object.entries(input.args)) {\n args[argName] = resolveType(argType as TypeReference);\n }\n }\n\n const node: FunctionNode = {\n kind: 'Function',\n name,\n module: moduleName,\n args,\n returns,\n language: input.language || 'plpgsql',\n body: input.body\n };\n\n ctx.functions.set(moduleName ? `${moduleName}.${name}` : name, node);\n\n return {\n kind: 'FunctionHandle',\n name,\n moduleName\n };\n}\n","import { BaseNode, ColumnNode, IndexNode, ConstraintNode, TableNode, AnalyzedTableNode, TriggerNode, PolicyNode, ProcedureNode, FunctionNode, ViewNode, MaterializedViewNode, TypeNode, GrantNode, CronNode, ExtensionNode, RoleNode } from '../../ast/nodes';\nimport { DbmasonContext, DbmasonScope, resolveScope } from '../../compiler/DbmasonContext';\nimport { TypeHandle, resolveType, resolveProcedure, resolveRole, resolveTable, RoleReference, TableReference, ProcedureHandle, ColumnHandle, resolveColumn, RoleHandle } from '../handles';\n\n\n/**\n * Internal Trigger Collector\n */\nexport function internalDefineTrigger(\n scope: any, \n tableName: string, \n name: string, \n input: any\n): void {\n const { ctx, moduleName } = resolveScope(scope);\n const procName = input.procedure ? resolveProcedure(input.procedure) : undefined;\n \n const node: TriggerNode = {\n kind: 'Trigger',\n name,\n table: tableName,\n when: input.when,\n events: input.events,\n functionName: procName!, // TODO: Make optional in type if body is present\n forEach: input.forEach,\n condition: input.condition,\n body: input.body,\n module: moduleName\n };\n \n ctx.triggers.set(moduleName ? `${moduleName}.${name}` : name, node);\n \n // Also attach to the table if it exists in the same context\n const fullTableName = moduleName ? `${moduleName}.${tableName}` : tableName;\n const tableNode = ctx.tables.get(fullTableName);\n if (tableNode) {\n if (!tableNode.triggers) tableNode.triggers = [];\n tableNode.triggers.push(node);\n }\n}\n","import { BaseNode, PolicyMethod, ColumnNode, IndexNode, ConstraintNode, TableNode, AnalyzedTableNode, TriggerNode, PolicyNode, ProcedureNode, FunctionNode, ViewNode, MaterializedViewNode, TypeNode, GrantNode, CronNode, ExtensionNode, RoleNode } from '../../ast/nodes';\nimport { DbmasonContext, DbmasonScope, resolveScope } from '../../compiler/DbmasonContext';\nimport { TypeHandle, resolveType, resolveProcedure, resolveRole, resolveTable, RoleReference, TableReference, ProcedureHandle, ColumnHandle, resolveColumn, RoleHandle } from '../handles';\n\n\n/**\n * Internal Policy Collector\n */\nexport function internalDefinePolicy(scope: DbmasonContext | DbmasonScope, name: string, input: any): PolicyNode {\n const { ctx, moduleName } = resolveScope(scope);\n const table = input.table ? resolveTable(input.table) : '';\n \n // Resolve RBAC roles\n const rbac = input.rbac?.map((r: any) => ({\n roles: r.roles.map((role: any) => resolveRole(role)),\n operations: r.allow\n }));\n\n const node: PolicyNode = {\n kind: 'Policy',\n name,\n table,\n module: moduleName,\n method: input.method as PolicyMethod,\n sql: input.sql,\n rbac\n };\n ctx.policies.set(moduleName ? `${moduleName}.${name}` : name, node);\n return node;\n}\n","import { BaseNode, ColumnNode, IndexNode, ConstraintNode, TableNode, AnalyzedTableNode, TriggerNode, PolicyNode, ProcedureNode, FunctionNode, ViewNode, MaterializedViewNode, TypeNode, GrantNode, CronNode, ExtensionNode, RoleNode } from '../../ast/nodes';\nimport { DbmasonContext, DbmasonScope, resolveScope } from '../../compiler/DbmasonContext';\nimport { TypeHandle, resolveType, resolveProcedure, resolveRole, resolveTable, RoleReference, TableReference, ProcedureHandle, ColumnHandle, resolveColumn, RoleHandle } from '../handles';\n\n\n/**\n * Internal Role Collector\n */\nexport function internalDefineRole(scope: DbmasonContext | DbmasonScope, name: string, options?: RoleNode['options']): RoleHandle {\n const { ctx, moduleName } = resolveScope(scope);\n const node: RoleNode = {\n kind: 'Role',\n name,\n options,\n module: moduleName\n };\n ctx.roles.set(moduleName ? `${moduleName}.${name}` : name, node);\n\n return {\n kind: 'RoleHandle',\n roleName: name,\n moduleName\n };\n}\n","import { BaseNode, GrantObjectKind, ColumnNode, IndexNode, ConstraintNode, TableNode, AnalyzedTableNode, TriggerNode, PolicyNode, ProcedureNode, FunctionNode, ViewNode, MaterializedViewNode, TypeNode, GrantNode, CronNode, ExtensionNode, RoleNode } from '../../ast/nodes';\nimport { DbmasonContext, DbmasonScope, resolveScope } from '../../compiler/DbmasonContext';\nimport { TypeHandle, resolveType, resolveProcedure, resolveRole, resolveTable, RoleReference, TableReference, ProcedureHandle, ColumnHandle, resolveColumn, RoleHandle } from '../handles';\n\n\n/**\n * Internal Grant Collector\n */\nexport function internalDefineGrant(\n ctx: DbmasonContext, \n to: RoleReference, \n privileges: string[], \n kind: GrantObjectKind, \n on: TableReference\n): void {\n const roleName = resolveRole(to);\n const objectName = resolveTable(on);\n \n const node: GrantNode = {\n kind: 'Grant',\n name: `grant_${privileges.join('_')}_on_${objectName}_to_${roleName}`,\n privileges,\n on: kind,\n to: roleName,\n object: objectName\n };\n \n ctx.grants.set(node.name, node);\n}\n","import { BaseNode, ColumnNode, IndexNode, ConstraintNode, TableNode, AnalyzedTableNode, TriggerNode, PolicyNode, ProcedureNode, FunctionNode, ViewNode, MaterializedViewNode, TypeNode, GrantNode, CronNode, ExtensionNode, RoleNode } from '../../ast/nodes';\nimport { DbmasonContext, DbmasonScope, resolveScope } from '../../compiler/DbmasonContext';\n\n\n/**\n * Internal Cron Collector\n */\nexport function internalDefineCron(scope: DbmasonContext | DbmasonScope, name: string, schedule: string, command: string): void {\n const { ctx, moduleName } = resolveScope(scope);\n const node: CronNode = {\n kind: 'Cron',\n name,\n schedule,\n command,\n module: moduleName\n };\n ctx.crons.set(moduleName ? `${moduleName}.${name}` : name, node);\n}\n","import { BaseNode, ColumnNode, IndexNode, ConstraintNode, TableNode, AnalyzedTableNode, TriggerNode, PolicyNode, ProcedureNode, FunctionNode, ViewNode, MaterializedViewNode, TypeNode, GrantNode, CronNode, ExtensionNode, RoleNode } from '../../ast/nodes';\nimport { DbmasonContext, DbmasonScope, resolveScope } from '../../compiler/DbmasonContext';\n\n\n/**\n * Internal Extension Collector\n */\nexport function internalDefineExtension(scope: DbmasonContext | DbmasonScope, name: string, options?: { schema?: string, version?: string }): void {\n const { ctx, moduleName } = resolveScope(scope);\n const node: ExtensionNode = {\n kind: 'Extension',\n name,\n schema: options?.schema,\n version: options?.version,\n module: moduleName\n };\n ctx.extensions.set(moduleName ? `${moduleName}.${name}` : name, node);\n}\n","import { BaseNode, ColumnNode, IndexNode, ConstraintNode, TableNode, AnalyzedTableNode, TriggerNode, PolicyNode, ProcedureNode, FunctionNode, ViewNode, MaterializedViewNode, TypeNode, GrantNode, CronNode, ExtensionNode, RoleNode } from '../../ast/nodes';\nimport { DbmasonContext, DbmasonScope, resolveScope } from '../../compiler/DbmasonContext';\nimport { TypeHandle, resolveType, resolveProcedure, resolveRole, resolveTable, RoleReference, TableReference, ProcedureHandle, ColumnHandle, resolveColumn, RoleHandle } from '../handles';\n\n\n/**\n * Internal Enum Collector\n */\nexport function internalDefineEnum(scope: DbmasonContext | DbmasonScope, name: string, values: string[]): TypeHandle {\n const { ctx, moduleName } = resolveScope(scope);\n const node: TypeNode = {\n kind: 'Type',\n name,\n type: 'enum',\n values,\n module: moduleName\n };\n ctx.types.set(moduleName ? `${moduleName}.${name}` : name, node);\n\n return {\n kind: 'TypeHandle',\n typeName: name,\n moduleName,\n ctx\n };\n}\n\n/**\n * Internal Composite Type Collector\n */\nexport function internalDefineCompositeType(scope: DbmasonContext | DbmasonScope, name: string, fields: Record<string, string | TypeHandle>): TypeHandle {\n const { ctx, moduleName } = resolveScope(scope);\n\n // Resolve field types\n const resolvedFields: Record<string, string> = {};\n for (const [fieldName, fieldType] of Object.entries(fields)) {\n resolvedFields[fieldName] = resolveType(fieldType);\n }\n\n const node: TypeNode = {\n kind: 'Type',\n name,\n type: 'composite',\n fields: resolvedFields,\n module: moduleName\n };\n ctx.types.set(moduleName ? `${moduleName}.${name}` : name, node);\n\n return {\n kind: 'TypeHandle',\n typeName: name,\n moduleName,\n ctx\n };\n}\n"],"names":["sql","strings","values","result","i","resolveTable","ref","resolveRole","resolveType","resolveProcedure","resolveFunction","resolveColumn","useProcedure","ctx","name","parts","moduleName","useFunction","useType","useRole","useTable","tableName","handle","target","prop","useView","useMaterializedView","internalDefineTable","scope","input","processColumns","resolveScope","columns","triggerNodes","t","node","procName","policyNodes","p","r","role","tableNode","colName","internalDefineView","query","internalDefineMaterializedView","internalDefineProcedure","returns","args","argName","argType","internalDefineFunction","internalDefineTrigger","fullTableName","internalDefinePolicy","table","rbac","internalDefineRole","options","internalDefineGrant","to","privileges","kind","on","roleName","objectName","internalDefineCron","schedule","command","internalDefineExtension","internalDefineEnum","internalDefineCompositeType","fields","resolvedFields","fieldName","fieldType"],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DbmasonContext,
|
|
3
|
+
defineTable,
|
|
4
|
+
defineProcedure,
|
|
5
|
+
defineCron,
|
|
6
|
+
defineExtension,
|
|
7
|
+
text,
|
|
8
|
+
uuid,
|
|
9
|
+
timestamptz,
|
|
10
|
+
boolean
|
|
11
|
+
} from '@dbmason/postgres';
|
|
12
|
+
|
|
13
|
+
export function setupSchema(ctx: DbmasonContext) {
|
|
14
|
+
// 1. Extensions
|
|
15
|
+
defineExtension(ctx, 'pgcrypto');
|
|
16
|
+
|
|
17
|
+
// 2. Tables
|
|
18
|
+
const Users = defineTable(ctx, 'users', {
|
|
19
|
+
columns: {
|
|
20
|
+
id: uuid().primaryKey().default('gen_random_uuid()'),
|
|
21
|
+
email: text().unique().notNull(),
|
|
22
|
+
password_hash: text().notNull(),
|
|
23
|
+
full_name: text(),
|
|
24
|
+
role: text().default("'user'"),
|
|
25
|
+
is_active: boolean().default('true'),
|
|
26
|
+
created_at: timestamptz().defaultNow(),
|
|
27
|
+
updated_at: timestamptz().defaultNow()
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const Sessions = defineTable(ctx, 'sessions', {
|
|
32
|
+
columns: {
|
|
33
|
+
id: uuid().primaryKey().default('gen_random_uuid()'),
|
|
34
|
+
user_id: uuid().references(Users.id, { onDelete: 'CASCADE' }),
|
|
35
|
+
token: text().unique().notNull(),
|
|
36
|
+
expires_at: timestamptz().notNull(),
|
|
37
|
+
created_at: timestamptz().defaultNow()
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// 3. Procedures (Auth Logic)
|
|
42
|
+
defineProcedure(ctx, 'auth_signup', {
|
|
43
|
+
args: {
|
|
44
|
+
p_email: 'text',
|
|
45
|
+
p_password: 'text',
|
|
46
|
+
p_full_name: 'text'
|
|
47
|
+
},
|
|
48
|
+
returns: Users,
|
|
49
|
+
body: `
|
|
50
|
+
DECLARE
|
|
51
|
+
v_user_id uuid;
|
|
52
|
+
BEGIN
|
|
53
|
+
INSERT INTO users (email, password_hash, full_name)
|
|
54
|
+
VALUES (p_email, crypt(p_password, gen_salt('bf')), p_full_name)
|
|
55
|
+
RETURNING id INTO v_user_id;
|
|
56
|
+
|
|
57
|
+
RETURN v_user_id;
|
|
58
|
+
END;
|
|
59
|
+
`
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
defineProcedure(ctx, 'auth_login', {
|
|
63
|
+
args: {
|
|
64
|
+
p_email: 'text',
|
|
65
|
+
p_password: 'text'
|
|
66
|
+
},
|
|
67
|
+
returns: 'text',
|
|
68
|
+
body: `
|
|
69
|
+
DECLARE
|
|
70
|
+
v_user_id uuid;
|
|
71
|
+
v_password_hash text;
|
|
72
|
+
v_token text;
|
|
73
|
+
BEGIN
|
|
74
|
+
SELECT id, password_hash INTO v_user_id, v_password_hash
|
|
75
|
+
FROM users WHERE email = p_email AND is_active = true;
|
|
76
|
+
|
|
77
|
+
IF v_user_id IS NULL OR v_password_hash != crypt(p_password, v_password_hash) THEN
|
|
78
|
+
RAISE EXCEPTION 'Invalid email or password';
|
|
79
|
+
END IF;
|
|
80
|
+
|
|
81
|
+
v_token := encode(gen_random_bytes(32), 'hex');
|
|
82
|
+
|
|
83
|
+
INSERT INTO sessions (user_id, token, expires_at)
|
|
84
|
+
VALUES (v_user_id, v_token, now() + interval '24 hours');
|
|
85
|
+
|
|
86
|
+
RETURN v_token;
|
|
87
|
+
END;
|
|
88
|
+
`
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// 4. Crons
|
|
92
|
+
defineCron(ctx, 'cleanup_sessions', '0 0 * * *', "DELETE FROM sessions WHERE expires_at < NOW()");
|
|
93
|
+
|
|
94
|
+
return { Users, Sessions };
|
|
95
|
+
}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { TableNode, ColumnNode, ProcedureNode, FunctionNode, PolicyNode, CronNode, ViewNode, TypeNode, TriggerNode } from './ast/nodes';
|
|
2
|
+
export type TableDefinition = TableNode;
|
|
3
|
+
export type ProcedureOptions = ProcedureNode;
|
|
4
|
+
export type PolicyOptions = PolicyNode;
|
|
5
|
+
export type CronJobConfig = CronNode;
|
|
6
|
+
export type ViewOptions = ViewNode;
|
|
7
|
+
export type TypeDefinition = TypeNode;
|
|
8
|
+
export { TableNode, ColumnNode, ProcedureNode, FunctionNode, PolicyNode, CronNode, ViewNode, TypeNode, TriggerNode };
|
|
9
|
+
export interface DbmasonConfig {
|
|
10
|
+
tables?: Map<string, any>;
|
|
11
|
+
types?: Map<string, any>;
|
|
12
|
+
policies?: Map<string, any>;
|
|
13
|
+
procedures?: Map<string, any>;
|
|
14
|
+
views?: Map<string, any>;
|
|
15
|
+
triggers?: Map<string, any>;
|
|
16
|
+
cron?: Map<string, any>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,UAAU,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW,EACd,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC;AACxC,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC7C,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC;AACvC,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;AACrC,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;AACnC,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAErH,MAAM,WAAW,aAAa;IAC1B,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzB,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzB,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dbmason/core",
|
|
3
|
+
"version": "0.1.0-alpha.1",
|
|
4
|
+
"description": "The Dbmason Core Kernel: Database-agnostic schema analysis and planning.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"README.md",
|
|
10
|
+
"templates"
|
|
11
|
+
],
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"bin": {
|
|
16
|
+
"dbmason": "./dist/cli/index.js"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "vite build && npm run copy-templates",
|
|
20
|
+
"copy-templates": "cp -r templates dist/",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"clean": "rm -rf dist"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"commander": "^14.0.3",
|
|
26
|
+
"ts-node": "^10.9.2"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^20.0.0",
|
|
30
|
+
"typescript": "^5.9.3",
|
|
31
|
+
"vite": "^7.3.1",
|
|
32
|
+
"vite-plugin-dts": "^4.5.4",
|
|
33
|
+
"vitest": "^4.0.18"
|
|
34
|
+
},
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=18.0.0"
|
|
37
|
+
}
|
|
38
|
+
}
|