pocketbase-zod-schema 0.7.1 → 0.7.2
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/CHANGELOG.md +7 -0
- package/dist/cli/index.cjs +323 -27
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +323 -27
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/migrate.cjs +329 -30
- package/dist/cli/migrate.cjs.map +1 -1
- package/dist/cli/migrate.js +329 -30
- package/dist/cli/migrate.js.map +1 -1
- package/dist/cli/utils/index.cjs +8 -1
- package/dist/cli/utils/index.cjs.map +1 -1
- package/dist/cli/utils/index.d.cts +1 -1
- package/dist/cli/utils/index.d.ts +1 -1
- package/dist/cli/utils/index.js +8 -1
- package/dist/cli/utils/index.js.map +1 -1
- package/dist/index.cjs +90 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +87 -2
- package/dist/index.js.map +1 -1
- package/dist/migration/analyzer.cjs +87 -14
- package/dist/migration/analyzer.cjs.map +1 -1
- package/dist/migration/analyzer.d.cts +12 -4
- package/dist/migration/analyzer.d.ts +12 -4
- package/dist/migration/analyzer.js +87 -15
- package/dist/migration/analyzer.js.map +1 -1
- package/dist/migration/diff.cjs +64 -9
- package/dist/migration/diff.cjs.map +1 -1
- package/dist/migration/diff.d.cts +12 -2
- package/dist/migration/diff.d.ts +12 -2
- package/dist/migration/diff.js +64 -10
- package/dist/migration/diff.js.map +1 -1
- package/dist/migration/generator.cjs +100 -2
- package/dist/migration/generator.cjs.map +1 -1
- package/dist/migration/generator.d.cts +32 -2
- package/dist/migration/generator.d.ts +32 -2
- package/dist/migration/generator.js +99 -3
- package/dist/migration/generator.js.map +1 -1
- package/dist/migration/index.cjs +349 -26
- package/dist/migration/index.cjs.map +1 -1
- package/dist/migration/index.d.cts +2 -2
- package/dist/migration/index.d.ts +2 -2
- package/dist/migration/index.js +349 -26
- package/dist/migration/index.js.map +1 -1
- package/dist/migration/snapshot.cjs +99 -1
- package/dist/migration/snapshot.cjs.map +1 -1
- package/dist/migration/snapshot.d.cts +3 -1
- package/dist/migration/snapshot.d.ts +3 -1
- package/dist/migration/snapshot.js +99 -1
- package/dist/migration/snapshot.js.map +1 -1
- package/dist/migration/utils/index.d.cts +1 -1
- package/dist/migration/utils/index.d.ts +1 -1
- package/dist/schema.cjs +90 -1
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.cts +128 -2
- package/dist/schema.d.ts +128 -2
- package/dist/schema.js +87 -2
- package/dist/schema.js.map +1 -1
- package/dist/server.cjs +393 -28
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +2 -2
- package/dist/server.d.ts +2 -2
- package/dist/server.js +390 -29
- package/dist/server.js.map +1 -1
- package/dist/{types-CWHV6ATd.d.cts → types-CnzfX6JH.d.cts} +20 -2
- package/dist/{types-C2nGWHLV.d.ts → types-Do3jyFBm.d.ts} +20 -2
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { F as FieldDefinition, a as SchemaSnapshot, S as SchemaDefinition, C as CollectionSchema } from '../types-
|
|
1
|
+
import { F as FieldDefinition, a as SchemaSnapshot, S as SchemaDefinition, C as CollectionSchema } from '../types-CnzfX6JH.cjs';
|
|
2
2
|
import '../fields-B96iGprI.cjs';
|
|
3
3
|
import 'zod';
|
|
4
4
|
|
|
@@ -23,6 +23,8 @@ interface ParsedCollectionUpdate {
|
|
|
23
23
|
indexesToAdd: string[];
|
|
24
24
|
indexesToRemove: string[];
|
|
25
25
|
rulesToUpdate: Record<string, string | null>;
|
|
26
|
+
/** New SQL query for a view collection, when the migration updates one */
|
|
27
|
+
viewQuery?: string;
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { F as FieldDefinition, a as SchemaSnapshot, S as SchemaDefinition, C as CollectionSchema } from '../types-
|
|
1
|
+
import { F as FieldDefinition, a as SchemaSnapshot, S as SchemaDefinition, C as CollectionSchema } from '../types-Do3jyFBm.js';
|
|
2
2
|
import '../fields-B96iGprI.js';
|
|
3
3
|
import 'zod';
|
|
4
4
|
|
|
@@ -23,6 +23,8 @@ interface ParsedCollectionUpdate {
|
|
|
23
23
|
indexesToAdd: string[];
|
|
24
24
|
indexesToRemove: string[];
|
|
25
25
|
rulesToUpdate: Record<string, string | null>;
|
|
26
|
+
/** New SQL query for a view collection, when the migration updates one */
|
|
27
|
+
viewQuery?: string;
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
/**
|
|
@@ -81,6 +81,30 @@ Cause: ${this.originalError.message}`);
|
|
|
81
81
|
return parts.join("");
|
|
82
82
|
}
|
|
83
83
|
};
|
|
84
|
+
function dedentSql(value) {
|
|
85
|
+
const lines = value.replace(/\r\n/g, "\n").split("\n");
|
|
86
|
+
while (lines.length > 0 && lines[0].trim() === "") {
|
|
87
|
+
lines.shift();
|
|
88
|
+
}
|
|
89
|
+
while (lines.length > 0 && lines[lines.length - 1].trim() === "") {
|
|
90
|
+
lines.pop();
|
|
91
|
+
}
|
|
92
|
+
if (lines.length === 0) {
|
|
93
|
+
return "";
|
|
94
|
+
}
|
|
95
|
+
let minIndent = Infinity;
|
|
96
|
+
for (const line of lines) {
|
|
97
|
+
if (line.trim() === "") continue;
|
|
98
|
+
const indent = line.length - line.trimStart().length;
|
|
99
|
+
if (indent < minIndent) {
|
|
100
|
+
minIndent = indent;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (!Number.isFinite(minIndent) || minIndent === 0) {
|
|
104
|
+
return lines.map((line) => line.trimEnd()).join("\n");
|
|
105
|
+
}
|
|
106
|
+
return lines.map((line) => line.slice(minIndent).trimEnd()).join("\n");
|
|
107
|
+
}
|
|
84
108
|
|
|
85
109
|
// src/migration/pocketbase-converter.ts
|
|
86
110
|
var SNAPSHOT_VERSION = "1.0.0";
|
|
@@ -164,8 +188,9 @@ function convertPocketBaseField(pbField) {
|
|
|
164
188
|
}
|
|
165
189
|
function convertPocketBaseCollection(pbCollection) {
|
|
166
190
|
const fields = [];
|
|
191
|
+
const isView = pbCollection.type === "view";
|
|
167
192
|
const systemFieldNames = ["id", "created", "updated", "collectionId", "collectionName", "expand"];
|
|
168
|
-
if (pbCollection.fields && Array.isArray(pbCollection.fields)) {
|
|
193
|
+
if (!isView && pbCollection.fields && Array.isArray(pbCollection.fields)) {
|
|
169
194
|
for (const pbField of pbCollection.fields) {
|
|
170
195
|
if (pbField.system || systemFieldNames.includes(pbField.name)) {
|
|
171
196
|
const isAuthSystemField = pbCollection.type === "auth" && ["email", "emailVisibility", "verified", "password", "tokenKey"].includes(pbField.name);
|
|
@@ -185,6 +210,9 @@ function convertPocketBaseCollection(pbCollection) {
|
|
|
185
210
|
if (pbCollection.id) {
|
|
186
211
|
schema.id = pbCollection.id;
|
|
187
212
|
}
|
|
213
|
+
if (typeof pbCollection.viewQuery === "string") {
|
|
214
|
+
schema.viewQuery = dedentSql(pbCollection.viewQuery);
|
|
215
|
+
}
|
|
188
216
|
if (pbCollection.indexes && Array.isArray(pbCollection.indexes)) {
|
|
189
217
|
schema.indexes = pbCollection.indexes;
|
|
190
218
|
}
|
|
@@ -286,6 +314,24 @@ function findMigrationsAfterSnapshot(migrationsPath, snapshotTimestamp) {
|
|
|
286
314
|
return [];
|
|
287
315
|
}
|
|
288
316
|
}
|
|
317
|
+
function skipTemplateLiteral(content, start) {
|
|
318
|
+
let i = start + 1;
|
|
319
|
+
while (i < content.length) {
|
|
320
|
+
const char = content[i];
|
|
321
|
+
if (char === "\\") {
|
|
322
|
+
i += 2;
|
|
323
|
+
continue;
|
|
324
|
+
}
|
|
325
|
+
if (char === "`") {
|
|
326
|
+
return i + 1;
|
|
327
|
+
}
|
|
328
|
+
i++;
|
|
329
|
+
}
|
|
330
|
+
return i;
|
|
331
|
+
}
|
|
332
|
+
function unescapeTemplateLiteral(raw) {
|
|
333
|
+
return raw.replace(/\\(`|\$\{|\\)/g, "$1");
|
|
334
|
+
}
|
|
289
335
|
function parseMigrationOperationsFromContent(content) {
|
|
290
336
|
const collectionsToCreate = [];
|
|
291
337
|
const collectionsToDelete = [];
|
|
@@ -374,6 +420,10 @@ function parseMigrationOperationsFromContent(content) {
|
|
|
374
420
|
while (i < content.length && bCount > 0) {
|
|
375
421
|
const char = content[i];
|
|
376
422
|
const prev = i > 0 ? content[i - 1] : "";
|
|
423
|
+
if (!inStr && char === "`") {
|
|
424
|
+
i = skipTemplateLiteral(content, i);
|
|
425
|
+
continue;
|
|
426
|
+
}
|
|
377
427
|
if (!inStr && (char === '"' || char === "'")) {
|
|
378
428
|
inStr = true;
|
|
379
429
|
strChar = char;
|
|
@@ -563,6 +613,27 @@ function parseMigrationOperationsFromContent(content) {
|
|
|
563
613
|
}
|
|
564
614
|
}
|
|
565
615
|
}
|
|
616
|
+
const viewQueryRegex = /(\w+)\.viewQuery\s*=\s*/g;
|
|
617
|
+
let viewQueryMatch;
|
|
618
|
+
while ((viewQueryMatch = viewQueryRegex.exec(content)) !== null) {
|
|
619
|
+
const varInfo = variables.get(viewQueryMatch[1]);
|
|
620
|
+
if (!varInfo || varInfo.type !== "collection") continue;
|
|
621
|
+
const valueStart = viewQueryMatch.index + viewQueryMatch[0].length;
|
|
622
|
+
if (content[valueStart] === "`") {
|
|
623
|
+
const end = skipTemplateLiteral(content, valueStart);
|
|
624
|
+
const raw = content.substring(valueStart + 1, end - 1);
|
|
625
|
+
getUpdate(varInfo.name).viewQuery = dedentSql(unescapeTemplateLiteral(raw));
|
|
626
|
+
viewQueryRegex.lastIndex = end;
|
|
627
|
+
} else {
|
|
628
|
+
const terminator = content.indexOf(";", valueStart);
|
|
629
|
+
const valueStr = content.substring(valueStart, terminator === -1 ? content.length : terminator);
|
|
630
|
+
try {
|
|
631
|
+
getUpdate(varInfo.name).viewQuery = dedentSql(new Function("app", `return ${valueStr}`)(mockApp));
|
|
632
|
+
} catch {
|
|
633
|
+
getUpdate(varInfo.name).viewQuery = dedentSql(valueStr.trim());
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
}
|
|
566
637
|
const unmarshalRegex = /unmarshal\s*\(/g;
|
|
567
638
|
let unmarshalMatch;
|
|
568
639
|
while ((unmarshalMatch = unmarshalRegex.exec(content)) !== null) {
|
|
@@ -577,6 +648,10 @@ function parseMigrationOperationsFromContent(content) {
|
|
|
577
648
|
while (i < content.length && braceCount > 0) {
|
|
578
649
|
const ch = content[i];
|
|
579
650
|
const prev = i > 0 ? content[i - 1] : "";
|
|
651
|
+
if (!inStr && ch === "`") {
|
|
652
|
+
i = skipTemplateLiteral(content, i);
|
|
653
|
+
continue;
|
|
654
|
+
}
|
|
580
655
|
if (!inStr && (ch === '"' || ch === "'")) {
|
|
581
656
|
inStr = true;
|
|
582
657
|
strChar = ch;
|
|
@@ -610,6 +685,22 @@ function parseMigrationOperationsFromContent(content) {
|
|
|
610
685
|
getUpdate(colInfo.name).rulesToUpdate[ruleKey] = valStr;
|
|
611
686
|
}
|
|
612
687
|
}
|
|
688
|
+
const viewQueryKey = objStr.match(/"viewQuery"\s*:\s*/);
|
|
689
|
+
if (viewQueryKey) {
|
|
690
|
+
const valueStart = viewQueryKey.index + viewQueryKey[0].length;
|
|
691
|
+
if (objStr[valueStart] === "`") {
|
|
692
|
+
const end = skipTemplateLiteral(objStr, valueStart);
|
|
693
|
+
const raw = objStr.substring(valueStart + 1, end - 1);
|
|
694
|
+
getUpdate(colInfo.name).viewQuery = dedentSql(unescapeTemplateLiteral(raw));
|
|
695
|
+
} else {
|
|
696
|
+
const valStr = objStr.substring(valueStart).replace(/[,}\s]+$/, "");
|
|
697
|
+
try {
|
|
698
|
+
getUpdate(colInfo.name).viewQuery = dedentSql(new Function("app", `return ${valStr}`)(mockApp));
|
|
699
|
+
} catch {
|
|
700
|
+
getUpdate(colInfo.name).viewQuery = dedentSql(valStr);
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
}
|
|
613
704
|
}
|
|
614
705
|
const idxPushRegex = /(\w+)\.indexes\.push\s*\(/g;
|
|
615
706
|
let match;
|
|
@@ -740,6 +831,10 @@ function parseMigrationOperations(migrationContent) {
|
|
|
740
831
|
while (i < migrationContent.length && braceCount > 0) {
|
|
741
832
|
const char = migrationContent[i];
|
|
742
833
|
const prevChar = i > 0 ? migrationContent[i - 1] : "";
|
|
834
|
+
if (!inString && char === "`") {
|
|
835
|
+
i = skipTemplateLiteral(migrationContent, i);
|
|
836
|
+
continue;
|
|
837
|
+
}
|
|
743
838
|
if (!inString && (char === '"' || char === "'")) {
|
|
744
839
|
inString = true;
|
|
745
840
|
stringChar = char;
|
|
@@ -1075,6 +1170,9 @@ function applyMigrationOperations(snapshot, operations) {
|
|
|
1075
1170
|
collection.indexes = collection.indexes.filter((idx) => !update.indexesToRemove.includes(idx));
|
|
1076
1171
|
}
|
|
1077
1172
|
}
|
|
1173
|
+
if (update.viewQuery !== void 0) {
|
|
1174
|
+
collection.viewQuery = update.viewQuery;
|
|
1175
|
+
}
|
|
1078
1176
|
if (Object.keys(update.rulesToUpdate).length > 0) {
|
|
1079
1177
|
if (!collection.rules) collection.rules = {};
|
|
1080
1178
|
if (!collection.permissions) collection.permissions = {};
|