jazz-tools 2.0.0-alpha.21 → 2.0.0-alpha.22
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/bin/docs-index.db +0 -0
- package/bin/docs-index.txt +1624 -542
- package/bin/jazz-tools.js +19 -40
- package/bin/native/jazz-tools-darwin-arm64 +0 -0
- package/bin/native/jazz-tools-darwin-x64 +0 -0
- package/bin/native/jazz-tools-linux-arm64 +0 -0
- package/bin/native/jazz-tools-linux-x64 +0 -0
- package/bin/native/jazz-tools-windows-x64.exe +0 -0
- package/dist/backend/create-jazz-context.d.ts +31 -6
- package/dist/backend/create-jazz-context.d.ts.map +1 -1
- package/dist/backend/create-jazz-context.js +35 -5
- package/dist/backend/create-jazz-context.js.map +1 -1
- package/dist/backend/create-jazz-context.test.js +61 -6
- package/dist/backend/create-jazz-context.test.js.map +1 -1
- package/dist/cli.d.ts +29 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +648 -246
- package/dist/cli.js.map +1 -1
- package/dist/cli.test.js +512 -297
- package/dist/cli.test.js.map +1 -1
- package/dist/codegen/schema-reader.d.ts.map +1 -1
- package/dist/codegen/schema-reader.js +6 -1
- package/dist/codegen/schema-reader.js.map +1 -1
- package/dist/dev-tools/dev-tools.d.ts.map +1 -1
- package/dist/dev-tools/dev-tools.js +61 -13
- package/dist/dev-tools/dev-tools.js.map +1 -1
- package/dist/dev-tools/dev-tools.test.js +166 -0
- package/dist/dev-tools/dev-tools.test.js.map +1 -1
- package/dist/dev-tools/extension-panel.d.ts.map +1 -1
- package/dist/dev-tools/extension-panel.js +30 -7
- package/dist/dev-tools/extension-panel.js.map +1 -1
- package/dist/dev-tools/protocol.d.ts +49 -1
- package/dist/dev-tools/protocol.d.ts.map +1 -1
- package/dist/dev-tools/protocol.js +3 -0
- package/dist/dev-tools/protocol.js.map +1 -1
- package/dist/drivers/index.d.ts +1 -1
- package/dist/drivers/index.d.ts.map +1 -1
- package/dist/drivers/schema-wire.d.ts.map +1 -1
- package/dist/drivers/schema-wire.js +12 -1
- package/dist/drivers/schema-wire.js.map +1 -1
- package/dist/drivers/schema-wire.test.d.ts +2 -0
- package/dist/drivers/schema-wire.test.d.ts.map +1 -0
- package/dist/drivers/schema-wire.test.js +31 -0
- package/dist/drivers/schema-wire.test.js.map +1 -0
- package/dist/drivers/types.d.ts +2 -0
- package/dist/drivers/types.d.ts.map +1 -1
- package/dist/dsl.d.ts +139 -95
- package/dist/dsl.d.ts.map +1 -1
- package/dist/dsl.js +64 -8
- package/dist/dsl.js.map +1 -1
- package/dist/dsl.test.js +78 -8
- package/dist/dsl.test.js.map +1 -1
- package/dist/index.d.ts +32 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -3
- package/dist/index.js.map +1 -1
- package/dist/magic-columns.d.ts +3 -1
- package/dist/magic-columns.d.ts.map +1 -1
- package/dist/magic-columns.js +20 -4
- package/dist/magic-columns.js.map +1 -1
- package/dist/mcp/build-index.test.js +1 -1
- package/dist/migrations.d.ts +126 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +112 -0
- package/dist/migrations.js.map +1 -0
- package/dist/permissions/index.test.js +35 -0
- package/dist/permissions/index.test.js.map +1 -1
- package/dist/react-native/create-jazz-client.test.js +62 -42
- package/dist/react-native/create-jazz-client.test.js.map +1 -1
- package/dist/react-native/jazz-rn-runtime-adapter.d.ts +18 -3
- package/dist/react-native/jazz-rn-runtime-adapter.d.ts.map +1 -1
- package/dist/react-native/jazz-rn-runtime-adapter.js +110 -6
- package/dist/react-native/jazz-rn-runtime-adapter.js.map +1 -1
- package/dist/react-native/jazz-rn-runtime-adapter.test.js +149 -4
- package/dist/react-native/jazz-rn-runtime-adapter.test.js.map +1 -1
- package/dist/reconcile-array.d.ts +29 -0
- package/dist/reconcile-array.d.ts.map +1 -0
- package/dist/reconcile-array.js +110 -0
- package/dist/reconcile-array.js.map +1 -0
- package/dist/reconcile-array.test.d.ts +2 -0
- package/dist/reconcile-array.test.d.ts.map +1 -0
- package/dist/reconcile-array.test.js +118 -0
- package/dist/reconcile-array.test.js.map +1 -0
- package/dist/runtime/client.d.ts +24 -20
- package/dist/runtime/client.d.ts.map +1 -1
- package/dist/runtime/client.for-request.test.js +8 -8
- package/dist/runtime/client.for-request.test.js.map +1 -1
- package/dist/runtime/client.js +58 -25
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/client.mutations.test.js +72 -1
- package/dist/runtime/client.mutations.test.js.map +1 -1
- package/dist/runtime/cloud-server.integration.test.js +145 -88
- package/dist/runtime/cloud-server.integration.test.js.map +1 -1
- package/dist/runtime/db.d.ts +3 -7
- package/dist/runtime/db.d.ts.map +1 -1
- package/dist/runtime/db.js +16 -14
- package/dist/runtime/db.js.map +1 -1
- package/dist/runtime/db.schema-order.test.js +8 -8
- package/dist/runtime/db.schema-order.test.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/napi.integration.test.js +113 -136
- package/dist/runtime/napi.integration.test.js.map +1 -1
- package/dist/runtime/query-adapter.d.ts.map +1 -1
- package/dist/runtime/query-adapter.js +22 -2
- package/dist/runtime/query-adapter.js.map +1 -1
- package/dist/runtime/query-adapter.test.js +81 -5
- package/dist/runtime/query-adapter.test.js.map +1 -1
- package/dist/runtime/row-transformer.js +2 -2
- package/dist/runtime/row-transformer.js.map +1 -1
- package/dist/runtime/row-transformer.test.js +9 -9
- package/dist/runtime/row-transformer.test.js.map +1 -1
- package/dist/runtime/schema-fetch.d.ts +103 -1
- package/dist/runtime/schema-fetch.d.ts.map +1 -1
- package/dist/runtime/schema-fetch.js +106 -0
- package/dist/runtime/schema-fetch.js.map +1 -1
- package/dist/runtime/sync-transport.d.ts.map +1 -1
- package/dist/runtime/sync-transport.js +15 -0
- package/dist/runtime/sync-transport.js.map +1 -1
- package/dist/runtime/sync-transport.test.js +33 -0
- package/dist/runtime/sync-transport.test.js.map +1 -1
- package/dist/runtime/value-converter.d.ts +9 -6
- package/dist/runtime/value-converter.d.ts.map +1 -1
- package/dist/runtime/value-converter.js +22 -9
- package/dist/runtime/value-converter.js.map +1 -1
- package/dist/runtime/value-converter.test.js +32 -26
- package/dist/runtime/value-converter.test.js.map +1 -1
- package/dist/schema-loader.d.ts +14 -0
- package/dist/schema-loader.d.ts.map +1 -0
- package/dist/schema-loader.js +217 -0
- package/dist/schema-loader.js.map +1 -0
- package/dist/schema-permissions.d.ts +8 -0
- package/dist/schema-permissions.d.ts.map +1 -0
- package/dist/schema-permissions.js +266 -0
- package/dist/schema-permissions.js.map +1 -0
- package/dist/schema-permissions.test.d.ts +2 -0
- package/dist/schema-permissions.test.d.ts.map +1 -0
- package/dist/schema-permissions.test.js +43 -0
- package/dist/schema-permissions.test.js.map +1 -0
- package/dist/schema.d.ts +11 -9
- package/dist/schema.d.ts.map +1 -1
- package/dist/svelte/context.svelte.test.js +50 -0
- package/dist/svelte/rune-patterns.svelte.test.js +301 -0
- package/dist/svelte/test-helpers.svelte.js +14 -0
- package/dist/svelte/use-all.svelte.d.ts.map +1 -1
- package/dist/svelte/use-all.svelte.js +7 -1
- package/dist/testing/fixtures/basic/schema.d.ts +11 -0
- package/dist/testing/fixtures/basic/schema.d.ts.map +1 -0
- package/dist/testing/fixtures/basic/schema.js +10 -0
- package/dist/testing/fixtures/basic/schema.js.map +1 -0
- package/dist/testing/index.d.ts +2 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/index.test.js +109 -9
- package/dist/testing/index.test.js.map +1 -1
- package/dist/testing/local-jazz-server.d.ts +2 -0
- package/dist/testing/local-jazz-server.d.ts.map +1 -1
- package/dist/testing/local-jazz-server.js +21 -51
- package/dist/testing/local-jazz-server.js.map +1 -1
- package/dist/testing/policy-test-app.d.ts.map +1 -1
- package/dist/testing/policy-test-app.js +71 -3
- package/dist/testing/policy-test-app.js.map +1 -1
- package/dist/typed-app.d.ts +364 -0
- package/dist/typed-app.d.ts.map +1 -0
- package/dist/{testing/fixtures/basic/app.js → typed-app.js} +118 -30
- package/dist/typed-app.js.map +1 -0
- package/dist/vue/use-all.d.ts +2 -2
- package/dist/vue/use-all.d.ts.map +1 -1
- package/dist/vue/use-all.js +9 -3
- package/dist/vue/use-all.js.map +1 -1
- package/dist/vue/use-all.test.js +137 -0
- package/dist/vue/use-all.test.js.map +1 -1
- package/package.json +15 -13
- package/dist/codegen/codegen.test.d.ts +0 -2
- package/dist/codegen/codegen.test.d.ts.map +0 -1
- package/dist/codegen/codegen.test.js +0 -1134
- package/dist/codegen/codegen.test.js.map +0 -1
- package/dist/codegen/index.d.ts +0 -18
- package/dist/codegen/index.d.ts.map +0 -1
- package/dist/codegen/index.js +0 -22
- package/dist/codegen/index.js.map +0 -1
- package/dist/codegen/query-builder-generator.d.ts +0 -26
- package/dist/codegen/query-builder-generator.d.ts.map +0 -1
- package/dist/codegen/query-builder-generator.js +0 -377
- package/dist/codegen/query-builder-generator.js.map +0 -1
- package/dist/codegen/type-generator.d.ts +0 -30
- package/dist/codegen/type-generator.d.ts.map +0 -1
- package/dist/codegen/type-generator.js +0 -368
- package/dist/codegen/type-generator.js.map +0 -1
- package/dist/runtime/napi.fjall.db.all.integration.test.d.ts +0 -2
- package/dist/runtime/napi.fjall.db.all.integration.test.d.ts.map +0 -1
- package/dist/runtime/napi.fjall.db.all.integration.test.js +0 -76
- package/dist/runtime/napi.fjall.db.all.integration.test.js.map +0 -1
- package/dist/runtime/napi.fjall.db.subscribeAll.integration.test.d.ts +0 -2
- package/dist/runtime/napi.fjall.db.subscribeAll.integration.test.d.ts.map +0 -1
- package/dist/runtime/napi.fjall.db.subscribeAll.integration.test.js +0 -47
- package/dist/runtime/napi.fjall.db.subscribeAll.integration.test.js.map +0 -1
- package/dist/runtime/napi.fjall.test-helpers.d.ts +0 -34
- package/dist/runtime/napi.fjall.test-helpers.d.ts.map +0 -1
- package/dist/runtime/napi.fjall.test-helpers.js +0 -172
- package/dist/runtime/napi.fjall.test-helpers.js.map +0 -1
- package/dist/sql-gen.d.ts +0 -5
- package/dist/sql-gen.d.ts.map +0 -1
- package/dist/sql-gen.js +0 -234
- package/dist/sql-gen.js.map +0 -1
- package/dist/sql-gen.test.d.ts +0 -2
- package/dist/sql-gen.test.d.ts.map +0 -1
- package/dist/sql-gen.test.js +0 -481
- package/dist/sql-gen.test.js.map +0 -1
- package/dist/svelte/context.test.d.ts +0 -2
- package/dist/svelte/context.test.d.ts.map +0 -1
- package/dist/svelte/context.test.js +0 -55
- package/dist/svelte/use-all.test.d.ts +0 -2
- package/dist/svelte/use-all.test.d.ts.map +0 -1
- package/dist/svelte/use-all.test.js +0 -147
- package/dist/testing/fixtures/basic/app.d.ts +0 -59
- package/dist/testing/fixtures/basic/app.d.ts.map +0 -1
- package/dist/testing/fixtures/basic/app.js.map +0 -1
- package/dist/testing/fixtures/basic/current.d.ts +0 -2
- package/dist/testing/fixtures/basic/current.d.ts.map +0 -1
- package/dist/testing/fixtures/basic/current.js +0 -6
- package/dist/testing/fixtures/basic/current.js.map +0 -1
package/dist/sql-gen.test.js
DELETED
|
@@ -1,481 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { table, col, migrate, getCollectedSchema, getCollectedMigration, resetCollectedState, } from "./dsl.js";
|
|
3
|
-
import { schemaToSql, lensToSql } from "./sql-gen.js";
|
|
4
|
-
describe("schemaToSql", () => {
|
|
5
|
-
it("generates SQL matching schema_455a1f10a158 (v1: title + completed)", () => {
|
|
6
|
-
resetCollectedState();
|
|
7
|
-
table("todos", {
|
|
8
|
-
title: col.string(),
|
|
9
|
-
completed: col.boolean(),
|
|
10
|
-
});
|
|
11
|
-
const schema = getCollectedSchema();
|
|
12
|
-
const sql = schemaToSql(schema);
|
|
13
|
-
expect(sql).toBe(`CREATE TABLE todos (
|
|
14
|
-
title TEXT NOT NULL,
|
|
15
|
-
completed BOOLEAN NOT NULL
|
|
16
|
-
);
|
|
17
|
-
`);
|
|
18
|
-
});
|
|
19
|
-
it("generates SQL matching schema_357c464c4c43 (v2: + description)", () => {
|
|
20
|
-
resetCollectedState();
|
|
21
|
-
table("todos", {
|
|
22
|
-
title: col.string(),
|
|
23
|
-
completed: col.boolean(),
|
|
24
|
-
description: col.string().optional(),
|
|
25
|
-
});
|
|
26
|
-
const schema = getCollectedSchema();
|
|
27
|
-
const sql = schemaToSql(schema);
|
|
28
|
-
expect(sql).toBe(`CREATE TABLE todos (
|
|
29
|
-
title TEXT NOT NULL,
|
|
30
|
-
completed BOOLEAN NOT NULL,
|
|
31
|
-
description TEXT
|
|
32
|
-
);
|
|
33
|
-
`);
|
|
34
|
-
});
|
|
35
|
-
it("quotes reserved keyword identifiers", () => {
|
|
36
|
-
resetCollectedState();
|
|
37
|
-
table("data_entry_entries", {
|
|
38
|
-
table: col.string(),
|
|
39
|
-
});
|
|
40
|
-
const schema = getCollectedSchema();
|
|
41
|
-
const sql = schemaToSql(schema);
|
|
42
|
-
expect(sql).toBe(`CREATE TABLE data_entry_entries (
|
|
43
|
-
"table" TEXT NOT NULL
|
|
44
|
-
);
|
|
45
|
-
`);
|
|
46
|
-
});
|
|
47
|
-
it("rejects reserved magic-column namespace in schema columns", () => {
|
|
48
|
-
expect(() => schemaToSql({
|
|
49
|
-
tables: [
|
|
50
|
-
{
|
|
51
|
-
name: "todos",
|
|
52
|
-
columns: [{ name: "$canRead", sqlType: "BOOLEAN", nullable: false }],
|
|
53
|
-
},
|
|
54
|
-
],
|
|
55
|
-
})).toThrow(/reserved for magic columns/i);
|
|
56
|
-
});
|
|
57
|
-
it("handles all column types", () => {
|
|
58
|
-
resetCollectedState();
|
|
59
|
-
table("test", {
|
|
60
|
-
text: col.string(),
|
|
61
|
-
text_null: col.string().optional(),
|
|
62
|
-
bool: col.boolean(),
|
|
63
|
-
bool_null: col.boolean().optional(),
|
|
64
|
-
integer: col.int(),
|
|
65
|
-
integer_null: col.int().optional(),
|
|
66
|
-
ts: col.timestamp(),
|
|
67
|
-
ts_null: col.timestamp().optional(),
|
|
68
|
-
real: col.float(),
|
|
69
|
-
real_null: col.float().optional(),
|
|
70
|
-
blob: col.bytes(),
|
|
71
|
-
});
|
|
72
|
-
const schema = getCollectedSchema();
|
|
73
|
-
const sql = schemaToSql(schema);
|
|
74
|
-
expect(sql).toContain("text TEXT NOT NULL");
|
|
75
|
-
expect(sql).toContain("text_null TEXT");
|
|
76
|
-
expect(sql).toContain("bool BOOLEAN NOT NULL");
|
|
77
|
-
expect(sql).toContain("bool_null BOOLEAN");
|
|
78
|
-
expect(sql).toContain("integer INTEGER NOT NULL");
|
|
79
|
-
expect(sql).toContain("integer_null INTEGER");
|
|
80
|
-
expect(sql).toContain("ts TIMESTAMP NOT NULL");
|
|
81
|
-
expect(sql).toContain("ts_null TIMESTAMP");
|
|
82
|
-
expect(sql).toContain("real REAL NOT NULL");
|
|
83
|
-
expect(sql).toContain("real_null REAL");
|
|
84
|
-
expect(sql).toContain("blob BYTEA NOT NULL");
|
|
85
|
-
});
|
|
86
|
-
it("handles enum column types", () => {
|
|
87
|
-
resetCollectedState();
|
|
88
|
-
table("tasks", {
|
|
89
|
-
status: col.enum("in_progress", "todo", "done"),
|
|
90
|
-
});
|
|
91
|
-
const schema = getCollectedSchema();
|
|
92
|
-
const sql = schemaToSql(schema);
|
|
93
|
-
// Variants are normalized in DSL.
|
|
94
|
-
expect(sql).toContain("status ENUM('done','in_progress','todo') NOT NULL");
|
|
95
|
-
});
|
|
96
|
-
it("handles array column types", () => {
|
|
97
|
-
resetCollectedState();
|
|
98
|
-
table("arrays", {
|
|
99
|
-
numbers: col.array(col.int()),
|
|
100
|
-
tags: col.array(col.string()),
|
|
101
|
-
flags: col.array(col.boolean()),
|
|
102
|
-
matrix: col.array(col.array(col.int())),
|
|
103
|
-
});
|
|
104
|
-
const schema = getCollectedSchema();
|
|
105
|
-
const sql = schemaToSql(schema);
|
|
106
|
-
expect(sql).toContain("numbers INTEGER[] NOT NULL");
|
|
107
|
-
expect(sql).toContain("flags BOOLEAN[] NOT NULL");
|
|
108
|
-
expect(sql).toContain("tags TEXT[]");
|
|
109
|
-
expect(sql).toContain("matrix INTEGER[][] NOT NULL");
|
|
110
|
-
});
|
|
111
|
-
it("generates UUID REFERENCES for required ref", () => {
|
|
112
|
-
resetCollectedState();
|
|
113
|
-
table("todos", {
|
|
114
|
-
title: col.string(),
|
|
115
|
-
ownerId: col.ref("users"),
|
|
116
|
-
});
|
|
117
|
-
const schema = getCollectedSchema();
|
|
118
|
-
const sql = schemaToSql(schema);
|
|
119
|
-
expect(sql).toContain("ownerId UUID REFERENCES users NOT NULL");
|
|
120
|
-
});
|
|
121
|
-
it("generates nullable UUID REFERENCES for optional ref", () => {
|
|
122
|
-
resetCollectedState();
|
|
123
|
-
table("todos", {
|
|
124
|
-
title: col.string(),
|
|
125
|
-
parentId: col.ref("todos").optional(),
|
|
126
|
-
});
|
|
127
|
-
const schema = getCollectedSchema();
|
|
128
|
-
const sql = schemaToSql(schema);
|
|
129
|
-
expect(sql).toContain("parentId UUID REFERENCES todos");
|
|
130
|
-
expect(sql).not.toContain("parentId UUID REFERENCES todos NOT NULL");
|
|
131
|
-
});
|
|
132
|
-
it("stores references in Column metadata", () => {
|
|
133
|
-
resetCollectedState();
|
|
134
|
-
table("todos", {
|
|
135
|
-
ownerId: col.ref("users"),
|
|
136
|
-
parentId: col.ref("todos").optional(),
|
|
137
|
-
});
|
|
138
|
-
const schema = getCollectedSchema();
|
|
139
|
-
const owner = schema.tables[0].columns.find((c) => c.name === "ownerId");
|
|
140
|
-
expect(owner.sqlType).toBe("UUID");
|
|
141
|
-
expect(owner.references).toBe("users");
|
|
142
|
-
expect(owner.nullable).toBe(false);
|
|
143
|
-
const parent = schema.tables[0].columns.find((c) => c.name === "parentId");
|
|
144
|
-
expect(parent.sqlType).toBe("UUID");
|
|
145
|
-
expect(parent.references).toBe("todos");
|
|
146
|
-
expect(parent.nullable).toBe(true);
|
|
147
|
-
});
|
|
148
|
-
it("stores references in array(ref(...)) metadata", () => {
|
|
149
|
-
resetCollectedState();
|
|
150
|
-
table("files", {
|
|
151
|
-
partIds: col.array(col.ref("file_parts")),
|
|
152
|
-
});
|
|
153
|
-
const schema = getCollectedSchema();
|
|
154
|
-
const parts = schema.tables[0].columns.find((c) => c.name === "partIds");
|
|
155
|
-
expect(parts.sqlType).toEqual({ kind: "ARRAY", element: "UUID" });
|
|
156
|
-
expect(parts.references).toBe("file_parts");
|
|
157
|
-
expect(parts.nullable).toBe(false);
|
|
158
|
-
});
|
|
159
|
-
it("generates complete table with mixed columns and refs", () => {
|
|
160
|
-
resetCollectedState();
|
|
161
|
-
table("todos", {
|
|
162
|
-
title: col.string(),
|
|
163
|
-
parentId: col.ref("todos").optional(),
|
|
164
|
-
ownerId: col.ref("users"),
|
|
165
|
-
});
|
|
166
|
-
const schema = getCollectedSchema();
|
|
167
|
-
const sql = schemaToSql(schema);
|
|
168
|
-
expect(sql).toBe(`CREATE TABLE todos (
|
|
169
|
-
title TEXT NOT NULL,
|
|
170
|
-
parentId UUID REFERENCES todos,
|
|
171
|
-
ownerId UUID REFERENCES users NOT NULL
|
|
172
|
-
);
|
|
173
|
-
`);
|
|
174
|
-
});
|
|
175
|
-
it("generates CREATE POLICY statements from table permissions", () => {
|
|
176
|
-
resetCollectedState();
|
|
177
|
-
table("todos", {
|
|
178
|
-
title: col.string(),
|
|
179
|
-
ownerId: col.string(),
|
|
180
|
-
});
|
|
181
|
-
const schema = getCollectedSchema();
|
|
182
|
-
const ownerMatchesSession = {
|
|
183
|
-
type: "Cmp",
|
|
184
|
-
column: "ownerId",
|
|
185
|
-
op: "Eq",
|
|
186
|
-
value: { type: "SessionRef", path: ["user_id"] },
|
|
187
|
-
};
|
|
188
|
-
schema.tables[0].policies = {
|
|
189
|
-
select: { using: ownerMatchesSession },
|
|
190
|
-
insert: { with_check: ownerMatchesSession },
|
|
191
|
-
update: { using: ownerMatchesSession, with_check: ownerMatchesSession },
|
|
192
|
-
delete: { using: ownerMatchesSession },
|
|
193
|
-
};
|
|
194
|
-
const sql = schemaToSql(schema);
|
|
195
|
-
expect(sql).toBe(`CREATE TABLE todos (
|
|
196
|
-
title TEXT NOT NULL,
|
|
197
|
-
ownerId TEXT NOT NULL
|
|
198
|
-
);
|
|
199
|
-
CREATE POLICY todos_select_policy ON todos FOR SELECT USING (ownerId = @session.user_id);
|
|
200
|
-
CREATE POLICY todos_insert_policy ON todos FOR INSERT WITH CHECK (ownerId = @session.user_id);
|
|
201
|
-
CREATE POLICY todos_update_policy ON todos FOR UPDATE USING (ownerId = @session.user_id) WITH CHECK (ownerId = @session.user_id);
|
|
202
|
-
CREATE POLICY todos_delete_policy ON todos FOR DELETE USING (ownerId = @session.user_id);
|
|
203
|
-
`);
|
|
204
|
-
});
|
|
205
|
-
it("generates INHERITS REFERENCING policy expressions", () => {
|
|
206
|
-
resetCollectedState();
|
|
207
|
-
table("files", {
|
|
208
|
-
ownerId: col.string(),
|
|
209
|
-
});
|
|
210
|
-
const schema = getCollectedSchema();
|
|
211
|
-
schema.tables[0].policies = {
|
|
212
|
-
select: {
|
|
213
|
-
using: {
|
|
214
|
-
type: "InheritsReferencing",
|
|
215
|
-
operation: "Select",
|
|
216
|
-
source_table: "todos",
|
|
217
|
-
via_column: "image",
|
|
218
|
-
},
|
|
219
|
-
},
|
|
220
|
-
};
|
|
221
|
-
const sql = schemaToSql(schema);
|
|
222
|
-
expect(sql).toContain("CREATE POLICY files_select_policy ON files FOR SELECT USING (INHERITS SELECT REFERENCING todos VIA image);");
|
|
223
|
-
});
|
|
224
|
-
it("generates CONTAINS and IN-list policy expressions", () => {
|
|
225
|
-
resetCollectedState();
|
|
226
|
-
table("todos", {
|
|
227
|
-
ownerId: col.string(),
|
|
228
|
-
status: col.string(),
|
|
229
|
-
});
|
|
230
|
-
const schema = getCollectedSchema();
|
|
231
|
-
schema.tables[0].policies = {
|
|
232
|
-
select: {
|
|
233
|
-
using: {
|
|
234
|
-
type: "And",
|
|
235
|
-
exprs: [
|
|
236
|
-
{
|
|
237
|
-
type: "Contains",
|
|
238
|
-
column: "ownerId",
|
|
239
|
-
value: { type: "Literal", value: "ali" },
|
|
240
|
-
},
|
|
241
|
-
{
|
|
242
|
-
type: "InList",
|
|
243
|
-
column: "status",
|
|
244
|
-
values: [
|
|
245
|
-
{ type: "Literal", value: "active" },
|
|
246
|
-
{ type: "Literal", value: "trial" },
|
|
247
|
-
],
|
|
248
|
-
},
|
|
249
|
-
],
|
|
250
|
-
},
|
|
251
|
-
},
|
|
252
|
-
};
|
|
253
|
-
const sql = schemaToSql(schema);
|
|
254
|
-
expect(sql).toContain("CREATE POLICY todos_select_policy ON todos FOR SELECT USING ((ownerId CONTAINS 'ali') AND (status IN ('active', 'trial')));");
|
|
255
|
-
});
|
|
256
|
-
it("generates session-left policy expressions", () => {
|
|
257
|
-
resetCollectedState();
|
|
258
|
-
table("todos", {
|
|
259
|
-
owner_id: col.string(),
|
|
260
|
-
});
|
|
261
|
-
const schema = getCollectedSchema();
|
|
262
|
-
schema.tables[0].policies = {
|
|
263
|
-
select: {
|
|
264
|
-
using: {
|
|
265
|
-
type: "And",
|
|
266
|
-
exprs: [
|
|
267
|
-
{
|
|
268
|
-
type: "SessionCmp",
|
|
269
|
-
path: ["claims", "role"],
|
|
270
|
-
op: "Eq",
|
|
271
|
-
value: { type: "Literal", value: "manager" },
|
|
272
|
-
},
|
|
273
|
-
{
|
|
274
|
-
type: "SessionInList",
|
|
275
|
-
path: ["claims", "plan"],
|
|
276
|
-
values: [
|
|
277
|
-
{ type: "Literal", value: "pro" },
|
|
278
|
-
{ type: "Literal", value: "enterprise" },
|
|
279
|
-
],
|
|
280
|
-
},
|
|
281
|
-
{
|
|
282
|
-
type: "SessionContains",
|
|
283
|
-
path: ["claims", "teamIds"],
|
|
284
|
-
value: { type: "Literal", value: "team_a" },
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
type: "SessionIsNull",
|
|
288
|
-
path: ["claims", "deleted_at"],
|
|
289
|
-
},
|
|
290
|
-
],
|
|
291
|
-
},
|
|
292
|
-
},
|
|
293
|
-
};
|
|
294
|
-
const sql = schemaToSql(schema);
|
|
295
|
-
expect(sql).toContain("CREATE POLICY todos_select_policy ON todos FOR SELECT USING ((@session.claims.role = 'manager') AND (@session.claims.plan IN ('pro', 'enterprise')) AND (@session.claims.teamIds CONTAINS 'team_a') AND (@session.claims.deleted_at IS NULL));");
|
|
296
|
-
});
|
|
297
|
-
});
|
|
298
|
-
describe("lensToSql", () => {
|
|
299
|
-
it("generates forward lens SQL matching lens_455a1f10a158_357c464c4c43_fwd", () => {
|
|
300
|
-
resetCollectedState();
|
|
301
|
-
migrate("todos", {
|
|
302
|
-
description: col.add().string({ default: "" }),
|
|
303
|
-
});
|
|
304
|
-
const lens = getCollectedMigration();
|
|
305
|
-
const sql = lensToSql(lens, "fwd");
|
|
306
|
-
expect(sql).toBe(`ALTER TABLE todos ADD COLUMN description TEXT DEFAULT '';
|
|
307
|
-
`);
|
|
308
|
-
});
|
|
309
|
-
it("generates backward lens SQL matching lens_455a1f10a158_357c464c4c43_bwd", () => {
|
|
310
|
-
resetCollectedState();
|
|
311
|
-
migrate("todos", {
|
|
312
|
-
description: col.add().string({ default: "" }),
|
|
313
|
-
});
|
|
314
|
-
const lens = getCollectedMigration();
|
|
315
|
-
const sql = lensToSql(lens, "bwd");
|
|
316
|
-
expect(sql).toBe(`ALTER TABLE todos DROP COLUMN description;
|
|
317
|
-
`);
|
|
318
|
-
});
|
|
319
|
-
it("handles rename operations", () => {
|
|
320
|
-
resetCollectedState();
|
|
321
|
-
migrate("todos", {
|
|
322
|
-
new_name: col.rename("old_name"),
|
|
323
|
-
});
|
|
324
|
-
const lens = getCollectedMigration();
|
|
325
|
-
expect(lensToSql(lens, "fwd")).toBe(`ALTER TABLE todos RENAME COLUMN new_name TO old_name;
|
|
326
|
-
`);
|
|
327
|
-
expect(lensToSql(lens, "bwd")).toBe(`ALTER TABLE todos RENAME COLUMN old_name TO new_name;
|
|
328
|
-
`);
|
|
329
|
-
});
|
|
330
|
-
it("rejects reserved magic-column namespace in introduced lens columns", () => {
|
|
331
|
-
expect(() => lensToSql({
|
|
332
|
-
table: "todos",
|
|
333
|
-
operations: [{ type: "introduce", column: "$canRead", sqlType: "BOOLEAN", value: false }],
|
|
334
|
-
}, "fwd")).toThrow(/reserved for magic columns/i);
|
|
335
|
-
});
|
|
336
|
-
it("handles drop operations", () => {
|
|
337
|
-
resetCollectedState();
|
|
338
|
-
migrate("todos", {
|
|
339
|
-
removed: col.drop().string({ backwardsDefault: "default_value" }),
|
|
340
|
-
});
|
|
341
|
-
const lens = getCollectedMigration();
|
|
342
|
-
expect(lensToSql(lens, "fwd")).toBe(`ALTER TABLE todos DROP COLUMN removed;
|
|
343
|
-
`);
|
|
344
|
-
expect(lensToSql(lens, "bwd")).toBe(`ALTER TABLE todos ADD COLUMN removed TEXT DEFAULT 'default_value';
|
|
345
|
-
`);
|
|
346
|
-
});
|
|
347
|
-
it("handles add nullable column operations", () => {
|
|
348
|
-
resetCollectedState();
|
|
349
|
-
migrate("todos", {
|
|
350
|
-
description: col.add().optional().string({ default: null }),
|
|
351
|
-
});
|
|
352
|
-
const lens = getCollectedMigration();
|
|
353
|
-
expect(lensToSql(lens, "fwd")).toBe(`ALTER TABLE todos ADD COLUMN description TEXT DEFAULT NULL;
|
|
354
|
-
`);
|
|
355
|
-
expect(lensToSql(lens, "bwd")).toBe(`ALTER TABLE todos DROP COLUMN description;
|
|
356
|
-
`);
|
|
357
|
-
});
|
|
358
|
-
it("renders bytea defaults as hex literals", () => {
|
|
359
|
-
resetCollectedState();
|
|
360
|
-
migrate("files", {
|
|
361
|
-
payload: col.add().bytes({ default: new Uint8Array([0, 1, 255]) }),
|
|
362
|
-
});
|
|
363
|
-
const lens = getCollectedMigration();
|
|
364
|
-
expect(lensToSql(lens, "fwd"))
|
|
365
|
-
.toBe(`ALTER TABLE files ADD COLUMN payload BYTEA DEFAULT '\\\\x0001ff';
|
|
366
|
-
`);
|
|
367
|
-
});
|
|
368
|
-
it("preserves SQL type for add lens operations", () => {
|
|
369
|
-
resetCollectedState();
|
|
370
|
-
migrate("todos", {
|
|
371
|
-
priority: col.add().int({ default: 0 }),
|
|
372
|
-
});
|
|
373
|
-
const lens = getCollectedMigration();
|
|
374
|
-
expect(lensToSql(lens, "fwd")).toBe(`ALTER TABLE todos ADD COLUMN priority INTEGER DEFAULT 0;
|
|
375
|
-
`);
|
|
376
|
-
});
|
|
377
|
-
it("preserves TIMESTAMP type for add lens operations", () => {
|
|
378
|
-
resetCollectedState();
|
|
379
|
-
migrate("todos", {
|
|
380
|
-
created_at: col.add().timestamp({ default: 1735689600000000 }),
|
|
381
|
-
});
|
|
382
|
-
const lens = getCollectedMigration();
|
|
383
|
-
expect(lensToSql(lens, "fwd")).toBe(`ALTER TABLE todos ADD COLUMN created_at TIMESTAMP DEFAULT 1735689600000000;
|
|
384
|
-
`);
|
|
385
|
-
});
|
|
386
|
-
it("preserves SQL type for drop lens operations", () => {
|
|
387
|
-
resetCollectedState();
|
|
388
|
-
migrate("todos", {
|
|
389
|
-
priority: col.drop().int({ backwardsDefault: 0 }),
|
|
390
|
-
});
|
|
391
|
-
const lens = getCollectedMigration();
|
|
392
|
-
expect(lensToSql(lens, "bwd")).toBe(`ALTER TABLE todos ADD COLUMN priority INTEGER DEFAULT 0;
|
|
393
|
-
`);
|
|
394
|
-
});
|
|
395
|
-
it("preserves TIMESTAMP type for drop lens operations", () => {
|
|
396
|
-
resetCollectedState();
|
|
397
|
-
migrate("todos", {
|
|
398
|
-
created_at: col.drop().timestamp({ backwardsDefault: 1735689600000000 }),
|
|
399
|
-
});
|
|
400
|
-
const lens = getCollectedMigration();
|
|
401
|
-
expect(lensToSql(lens, "bwd")).toBe(`ALTER TABLE todos ADD COLUMN created_at TIMESTAMP DEFAULT 1735689600000000;
|
|
402
|
-
`);
|
|
403
|
-
});
|
|
404
|
-
it("serializes Date defaults for add timestamp lens operations", () => {
|
|
405
|
-
resetCollectedState();
|
|
406
|
-
migrate("todos", {
|
|
407
|
-
created_at: col.add().timestamp({ default: new Date("2025-01-01T00:00:00.000Z") }),
|
|
408
|
-
});
|
|
409
|
-
const lens = getCollectedMigration();
|
|
410
|
-
expect(lensToSql(lens, "fwd")).toBe(`ALTER TABLE todos ADD COLUMN created_at TIMESTAMP DEFAULT 1735689600000;
|
|
411
|
-
`);
|
|
412
|
-
});
|
|
413
|
-
it("serializes Date backwards defaults for drop timestamp lens operations", () => {
|
|
414
|
-
resetCollectedState();
|
|
415
|
-
migrate("todos", {
|
|
416
|
-
created_at: col.drop().timestamp({ backwardsDefault: new Date("2025-01-01T00:00:00.000Z") }),
|
|
417
|
-
});
|
|
418
|
-
const lens = getCollectedMigration();
|
|
419
|
-
expect(lensToSql(lens, "bwd")).toBe(`ALTER TABLE todos ADD COLUMN created_at TIMESTAMP DEFAULT 1735689600000;
|
|
420
|
-
`);
|
|
421
|
-
});
|
|
422
|
-
it("supports array defaults in migration SQL generation", () => {
|
|
423
|
-
resetCollectedState();
|
|
424
|
-
migrate("projects", {
|
|
425
|
-
todos: col.add().string({ default: [] }),
|
|
426
|
-
});
|
|
427
|
-
const lens = getCollectedMigration();
|
|
428
|
-
expect(lensToSql(lens, "fwd")).toBe(`ALTER TABLE projects ADD COLUMN todos TEXT DEFAULT ARRAY[];
|
|
429
|
-
`);
|
|
430
|
-
});
|
|
431
|
-
it("supports adding array columns in lenses", () => {
|
|
432
|
-
resetCollectedState();
|
|
433
|
-
migrate("projects", {
|
|
434
|
-
todos: col.add().array({ of: "UUID", default: [] }),
|
|
435
|
-
});
|
|
436
|
-
const lens = getCollectedMigration();
|
|
437
|
-
expect(lensToSql(lens, "fwd")).toBe(`ALTER TABLE projects ADD COLUMN todos UUID[] DEFAULT ARRAY[];
|
|
438
|
-
`);
|
|
439
|
-
});
|
|
440
|
-
it("supports adding array columns with default values in lenses", () => {
|
|
441
|
-
resetCollectedState();
|
|
442
|
-
migrate("projects", {
|
|
443
|
-
todos: col.add().array({ of: "UUID", default: ["123e4567-e89b-12d3-a456-426614174000"] }),
|
|
444
|
-
});
|
|
445
|
-
const lens = getCollectedMigration();
|
|
446
|
-
expect(lensToSql(lens, "fwd")).toBe(`ALTER TABLE projects ADD COLUMN todos UUID[] DEFAULT ARRAY['123e4567-e89b-12d3-a456-426614174000'];
|
|
447
|
-
`);
|
|
448
|
-
});
|
|
449
|
-
it("supports dropping array columns with backward re-add", () => {
|
|
450
|
-
resetCollectedState();
|
|
451
|
-
migrate("projects", {
|
|
452
|
-
todos: col.drop().array({ of: "UUID", backwardsDefault: [] }),
|
|
453
|
-
});
|
|
454
|
-
const lens = getCollectedMigration();
|
|
455
|
-
expect(lensToSql(lens, "fwd")).toBe(`ALTER TABLE projects DROP COLUMN todos;
|
|
456
|
-
`);
|
|
457
|
-
expect(lensToSql(lens, "bwd")).toBe(`ALTER TABLE projects ADD COLUMN todos UUID[] DEFAULT ARRAY[];
|
|
458
|
-
`);
|
|
459
|
-
});
|
|
460
|
-
it("supports adding enum columns in lenses", () => {
|
|
461
|
-
resetCollectedState();
|
|
462
|
-
migrate("tasks", {
|
|
463
|
-
status: col.add().enum("todo", "done", { default: "todo" }),
|
|
464
|
-
});
|
|
465
|
-
const lens = getCollectedMigration();
|
|
466
|
-
expect(lensToSql(lens, "fwd")).toBe(`ALTER TABLE tasks ADD COLUMN status ENUM('done','todo') DEFAULT 'todo';
|
|
467
|
-
`);
|
|
468
|
-
});
|
|
469
|
-
it("supports dropping enum columns with backward re-add", () => {
|
|
470
|
-
resetCollectedState();
|
|
471
|
-
migrate("tasks", {
|
|
472
|
-
status: col.drop().enum("todo", "done", { backwardsDefault: "done" }),
|
|
473
|
-
});
|
|
474
|
-
const lens = getCollectedMigration();
|
|
475
|
-
expect(lensToSql(lens, "fwd")).toBe(`ALTER TABLE tasks DROP COLUMN status;
|
|
476
|
-
`);
|
|
477
|
-
expect(lensToSql(lens, "bwd")).toBe(`ALTER TABLE tasks ADD COLUMN status ENUM('done','todo') DEFAULT 'done';
|
|
478
|
-
`);
|
|
479
|
-
});
|
|
480
|
-
});
|
|
481
|
-
//# sourceMappingURL=sql-gen.test.js.map
|
package/dist/sql-gen.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sql-gen.test.js","sourceRoot":"","sources":["../src/sql-gen.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.test.d.ts","sourceRoot":"","sources":["../../src/svelte/context.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { beforeAll, describe, expect, it, vi } from "vitest";
|
|
2
|
-
// Mock svelte context functions
|
|
3
|
-
const contextStore = new Map();
|
|
4
|
-
vi.mock("svelte", () => ({
|
|
5
|
-
setContext: (key, value) => contextStore.set(key, value),
|
|
6
|
-
getContext: (key) => contextStore.get(key),
|
|
7
|
-
}));
|
|
8
|
-
let contextModule;
|
|
9
|
-
beforeAll(async () => {
|
|
10
|
-
contextModule = await import("./context.svelte.js");
|
|
11
|
-
});
|
|
12
|
-
describe("context", () => {
|
|
13
|
-
it("initJazzContext sets a context and returns reactive object", () => {
|
|
14
|
-
contextStore.clear();
|
|
15
|
-
const { initJazzContext, getJazzContext } = contextModule;
|
|
16
|
-
const ctx = initJazzContext();
|
|
17
|
-
expect(ctx.db).toBe(null);
|
|
18
|
-
expect(ctx.session).toBe(null);
|
|
19
|
-
const retrieved = getJazzContext();
|
|
20
|
-
expect(retrieved).toBe(ctx);
|
|
21
|
-
});
|
|
22
|
-
it("getJazzContext throws when no context is set", () => {
|
|
23
|
-
contextStore.clear();
|
|
24
|
-
const { getJazzContext } = contextModule;
|
|
25
|
-
expect(() => getJazzContext()).toThrow("getDb/getSession must be used within");
|
|
26
|
-
});
|
|
27
|
-
it("getDb throws when db is null", () => {
|
|
28
|
-
contextStore.clear();
|
|
29
|
-
const { initJazzContext, getDb } = contextModule;
|
|
30
|
-
initJazzContext();
|
|
31
|
-
expect(() => getDb()).toThrow("Jazz database is not yet initialised");
|
|
32
|
-
});
|
|
33
|
-
it("getDb returns db when set", () => {
|
|
34
|
-
contextStore.clear();
|
|
35
|
-
const { initJazzContext, getDb } = contextModule;
|
|
36
|
-
const ctx = initJazzContext();
|
|
37
|
-
const mockDb = { shutdown: vi.fn() };
|
|
38
|
-
ctx.db = mockDb;
|
|
39
|
-
expect(getDb()).toBe(mockDb);
|
|
40
|
-
});
|
|
41
|
-
it("getSession returns null initially", () => {
|
|
42
|
-
contextStore.clear();
|
|
43
|
-
const { initJazzContext, getSession } = contextModule;
|
|
44
|
-
initJazzContext();
|
|
45
|
-
expect(getSession()).toBe(null);
|
|
46
|
-
});
|
|
47
|
-
it("getSession returns session when set", () => {
|
|
48
|
-
contextStore.clear();
|
|
49
|
-
const { initJazzContext, getSession } = contextModule;
|
|
50
|
-
const ctx = initJazzContext();
|
|
51
|
-
const session = { user_id: "alice", claims: { role: "admin" } };
|
|
52
|
-
ctx.session = session;
|
|
53
|
-
expect(getSession()).toBe(session);
|
|
54
|
-
});
|
|
55
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-all.test.d.ts","sourceRoot":"","sources":["../../src/svelte/use-all.test.ts"],"names":[],"mappings":""}
|