longcelot-sheet-db 0.1.7 → 0.1.11
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 +35 -20
- package/README.md +87 -10
- package/dist/adapter/crud.d.ts +6 -3
- package/dist/adapter/crud.d.ts.map +1 -1
- package/dist/adapter/crud.js +50 -4
- package/dist/adapter/crud.js.map +1 -1
- package/dist/adapter/sheetAdapter.d.ts +17 -2
- package/dist/adapter/sheetAdapter.d.ts.map +1 -1
- package/dist/adapter/sheetAdapter.js +154 -2
- package/dist/adapter/sheetAdapter.js.map +1 -1
- package/dist/cli/commands/export.d.ts +8 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +166 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +1 -1
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +30 -5
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mock-users.d.ts.map +1 -1
- package/dist/cli/commands/mock-users.js +5 -2
- package/dist/cli/commands/mock-users.js.map +1 -1
- package/dist/cli/commands/seed.d.ts.map +1 -1
- package/dist/cli/commands/seed.js +2 -1
- package/dist/cli/commands/seed.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +13 -4
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/sync.d.ts +1 -0
- package/dist/cli/commands/sync.d.ts.map +1 -1
- package/dist/cli/commands/sync.js +175 -80
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/validate.d.ts.map +1 -1
- package/dist/cli/commands/validate.js +7 -5
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/errors/SchemaMismatchError.d.ts +6 -0
- package/dist/errors/SchemaMismatchError.d.ts.map +1 -0
- package/dist/errors/SchemaMismatchError.js +14 -0
- package/dist/errors/SchemaMismatchError.js.map +1 -0
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +3 -1
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/schema/columnBuilder.d.ts.map +1 -1
- package/dist/schema/columnBuilder.js +1 -0
- package/dist/schema/columnBuilder.js.map +1 -1
- package/dist/schema/defineTable.d.ts.map +1 -1
- package/dist/schema/defineTable.js +8 -0
- package/dist/schema/defineTable.js.map +1 -1
- package/dist/schema/types.d.ts +13 -1
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/utils/schemaHash.d.ts +3 -0
- package/dist/utils/schemaHash.d.ts.map +1 -0
- package/dist/utils/schemaHash.js +24 -0
- package/dist/utils/schemaHash.js.map +1 -0
- package/package.json +20 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineTable.d.ts","sourceRoot":"","sources":["../../src/schema/defineTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"defineTable.d.ts","sourceRoot":"","sources":["../../src/schema/defineTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,CAAC,CAAC;CAC3D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAyC1D"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.defineTable = defineTable;
|
|
4
4
|
const columnBuilder_1 = require("./columnBuilder");
|
|
5
|
+
const SchemaError_1 = require("../errors/SchemaError");
|
|
5
6
|
function defineTable(input) {
|
|
6
7
|
const columns = {};
|
|
7
8
|
for (const [key, value] of Object.entries(input.columns)) {
|
|
@@ -12,6 +13,12 @@ function defineTable(input) {
|
|
|
12
13
|
columns[key] = value;
|
|
13
14
|
}
|
|
14
15
|
}
|
|
16
|
+
const primaryColumns = Object.entries(columns).filter(([, col]) => col.primary);
|
|
17
|
+
if (primaryColumns.length > 1) {
|
|
18
|
+
const names = primaryColumns.map(([k]) => k).join(', ');
|
|
19
|
+
throw new SchemaError_1.SchemaError(`Table '${input.name}' has ${primaryColumns.length} primary columns (${names}). Only one primary() column is allowed.`, input.name);
|
|
20
|
+
}
|
|
21
|
+
const pkColumn = primaryColumns.length === 1 ? primaryColumns[0][0] : undefined;
|
|
15
22
|
if (input.timestamps) {
|
|
16
23
|
columns._created_at = { type: 'date', readonly: true };
|
|
17
24
|
columns._updated_at = { type: 'date', readonly: true };
|
|
@@ -26,6 +33,7 @@ function defineTable(input) {
|
|
|
26
33
|
timestamps: input.timestamps,
|
|
27
34
|
softDelete: input.softDelete,
|
|
28
35
|
columns,
|
|
36
|
+
pkColumn,
|
|
29
37
|
};
|
|
30
38
|
}
|
|
31
39
|
//# sourceMappingURL=defineTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineTable.js","sourceRoot":"","sources":["../../src/schema/defineTable.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"defineTable.js","sourceRoot":"","sources":["../../src/schema/defineTable.ts"],"names":[],"mappings":";;AAYA,kCAyCC;AApDD,mDAAgD;AAChD,uDAAoD;AAUpD,SAAgB,WAAW,CAAC,KAAiB;IAC3C,MAAM,OAAO,GAAqC,EAAE,CAAC;IAErD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,IAAI,KAAK,YAAY,6BAAa,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,IAAI,yBAAW,CACnB,UAAU,KAAK,CAAC,IAAI,SAAS,cAAc,CAAC,MAAM,qBAAqB,KAAK,0CAA0C,EACtH,KAAK,CAAC,IAAI,CACX,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhF,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,WAAW,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACvD,OAAO,CAAC,WAAW,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzD,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,WAAW,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAE/E,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO;QACP,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
package/dist/schema/types.d.ts
CHANGED
|
@@ -19,11 +19,18 @@ export interface TableSchema {
|
|
|
19
19
|
timestamps?: boolean;
|
|
20
20
|
softDelete?: boolean;
|
|
21
21
|
columns: Record<string, ColumnDefinition>;
|
|
22
|
+
pkColumn?: string;
|
|
22
23
|
}
|
|
24
|
+
export interface ActorConfig {
|
|
25
|
+
role: string;
|
|
26
|
+
sheetIdEnv: string;
|
|
27
|
+
}
|
|
28
|
+
export type SchemaMismatchBehaviour = 'warn' | 'error' | 'auto-sync';
|
|
23
29
|
export interface SheetDBConfig {
|
|
24
30
|
projectName: string;
|
|
25
31
|
superAdminEmail: string;
|
|
26
|
-
actors:
|
|
32
|
+
actors: ActorConfig[];
|
|
33
|
+
onSchemaMismatch?: SchemaMismatchBehaviour;
|
|
27
34
|
}
|
|
28
35
|
export interface UserContext {
|
|
29
36
|
userId: string;
|
|
@@ -40,11 +47,16 @@ export interface FindOptions {
|
|
|
40
47
|
orderBy?: string;
|
|
41
48
|
order?: 'asc' | 'desc';
|
|
42
49
|
}
|
|
50
|
+
export interface CreateOptions {
|
|
51
|
+
skipFKValidation?: boolean;
|
|
52
|
+
}
|
|
43
53
|
export interface UpdateOptions {
|
|
44
54
|
where: WhereClause;
|
|
45
55
|
data: Record<string, any>;
|
|
56
|
+
skipFKValidation?: boolean;
|
|
46
57
|
}
|
|
47
58
|
export interface DeleteOptions {
|
|
48
59
|
where: WhereClause;
|
|
49
60
|
}
|
|
61
|
+
export type FKResolver = (tableName: string, columnName: string, value: unknown) => Promise<boolean>;
|
|
50
62
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaHash.d.ts","sourceRoot":"","sources":["../../src/utils/schemaHash.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAoB7D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.computeSchemaHash = computeSchemaHash;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
function computeSchemaHash(schema) {
|
|
6
|
+
const normalized = {
|
|
7
|
+
name: schema.name,
|
|
8
|
+
actor: schema.actor,
|
|
9
|
+
timestamps: schema.timestamps ?? false,
|
|
10
|
+
softDelete: schema.softDelete ?? false,
|
|
11
|
+
columns: Object.fromEntries(Object.entries(schema.columns)
|
|
12
|
+
.filter(([k]) => !k.startsWith('_')) // exclude auto-fields (_id, _created_at…)
|
|
13
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
14
|
+
.map(([k, v]) => [k, {
|
|
15
|
+
type: v.type,
|
|
16
|
+
required: v.required ?? false,
|
|
17
|
+
unique: v.unique ?? false,
|
|
18
|
+
primary: v.primary ?? false,
|
|
19
|
+
enum: v.enum ?? null,
|
|
20
|
+
}])),
|
|
21
|
+
};
|
|
22
|
+
return (0, crypto_1.createHash)('sha256').update(JSON.stringify(normalized)).digest('hex');
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=schemaHash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaHash.js","sourceRoot":"","sources":["../../src/utils/schemaHash.ts"],"names":[],"mappings":";;AAGA,8CAoBC;AAvBD,mCAAoC;AAGpC,SAAgB,iBAAiB,CAAC,MAAmB;IACnD,MAAM,UAAU,GAAG;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK;QACtC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK;QACtC,OAAO,EAAE,MAAM,CAAC,WAAW,CACzB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;aAC3B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,0CAA0C;aAC9E,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;gBACnB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,KAAK;gBAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,KAAK;gBACzB,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK;gBAC3B,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;aACrB,CAAC,CAAC,CACN;KACF,CAAC;IACF,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "longcelot-sheet-db",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11",
|
|
4
4
|
"description": "Google Sheets-backed staging database adapter for Node.js with schema-first design",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -37,33 +37,33 @@
|
|
|
37
37
|
"access": "public"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"bcryptjs": "^
|
|
40
|
+
"bcryptjs": "^3.0.3",
|
|
41
41
|
"chalk": "^4.1.2",
|
|
42
|
-
"commander": "^
|
|
43
|
-
"google-auth-library": "^
|
|
44
|
-
"googleapis": "^
|
|
45
|
-
"inquirer": "^8.2.
|
|
46
|
-
"nanoid": "^3.3.
|
|
47
|
-
"zod": "^4.3
|
|
42
|
+
"commander": "^14.0.3",
|
|
43
|
+
"google-auth-library": "^10.6.2",
|
|
44
|
+
"googleapis": "^172.0.0",
|
|
45
|
+
"inquirer": "^8.2.7",
|
|
46
|
+
"nanoid": "^3.3.12",
|
|
47
|
+
"zod": "^4.4.3"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@tanstack/intent": "latest",
|
|
51
51
|
"@testing-library/dom": "^10.4.1",
|
|
52
|
-
"@types/bcryptjs": "^
|
|
53
|
-
"@types/inquirer": "^8.2.
|
|
52
|
+
"@types/bcryptjs": "^3.0.0",
|
|
53
|
+
"@types/inquirer": "^8.2.12",
|
|
54
54
|
"@types/jest": "^30.0.0",
|
|
55
|
-
"@types/node": "^
|
|
56
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
57
|
-
"@typescript-eslint/parser": "^8.
|
|
58
|
-
"eslint": "^
|
|
55
|
+
"@types/node": "^25.9.1",
|
|
56
|
+
"@typescript-eslint/eslint-plugin": "^8.60.0",
|
|
57
|
+
"@typescript-eslint/parser": "^8.60.0",
|
|
58
|
+
"eslint": "^10.4.0",
|
|
59
59
|
"eslint-config-prettier": "^10.1.8",
|
|
60
60
|
"husky": "^9.1.7",
|
|
61
|
-
"jest": "^30.2
|
|
62
|
-
"jsdom": "^
|
|
63
|
-
"lint-staged": "^
|
|
64
|
-
"prettier": "^3.8.
|
|
65
|
-
"ts-jest": "^29.4.
|
|
66
|
-
"typescript": "^
|
|
61
|
+
"jest": "^30.4.2",
|
|
62
|
+
"jsdom": "^29.1.1",
|
|
63
|
+
"lint-staged": "^17.0.5",
|
|
64
|
+
"prettier": "^3.8.3",
|
|
65
|
+
"ts-jest": "^29.4.11",
|
|
66
|
+
"typescript": "^6.0.3"
|
|
67
67
|
},
|
|
68
68
|
"scripts": {
|
|
69
69
|
"build": "rm -rf dist && tsc",
|