@rudderjs/orm 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/migrate.d.ts +21 -0
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +82 -1
- package/dist/commands/migrate.js.map +1 -1
- package/dist/index.d.ts +161 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +466 -65
- package/dist/index.js.map +1 -1
- package/dist/seeder.d.ts +24 -0
- package/dist/seeder.d.ts.map +1 -0
- package/dist/seeder.js +28 -0
- package/dist/seeder.js.map +1 -0
- package/package.json +2 -2
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
export type ORM = 'prisma' | 'drizzle';
|
|
2
2
|
/** Detect which ORM is installed by checking package.json dependencies. */
|
|
3
3
|
export declare function detectORM(cwd?: string): ORM | null;
|
|
4
|
+
/**
|
|
5
|
+
* Find a `database/seeders/DatabaseSeeder` file in the project root.
|
|
6
|
+
* Returns the absolute path, or null if not found. Exported for testing.
|
|
7
|
+
*/
|
|
8
|
+
export declare function findSeederFile(cwd?: string): string | null;
|
|
9
|
+
/**
|
|
10
|
+
* Detect whether `package.json` has a `prisma.seed` field configured.
|
|
11
|
+
* Used as the fallback path for Prisma projects that don't ship a Seeder class.
|
|
12
|
+
*/
|
|
13
|
+
export declare function hasPrismaSeedConfig(cwd?: string): boolean;
|
|
4
14
|
/** Build the args array for a given ORM and command. Exported for testing. */
|
|
5
15
|
export declare function buildArgs(orm: ORM, command: 'migrate' | 'migrate:fresh' | 'migrate:status' | 'make:migration' | 'db:push' | 'db:generate', options?: {
|
|
6
16
|
name?: string;
|
|
@@ -15,4 +25,15 @@ export declare function registerMigrateCommands(rudder: {
|
|
|
15
25
|
description(text: string): unknown;
|
|
16
26
|
};
|
|
17
27
|
}): void;
|
|
28
|
+
/**
|
|
29
|
+
* In-process seeder runner.
|
|
30
|
+
*
|
|
31
|
+
* Resolution order:
|
|
32
|
+
* 1. `database/seeders/DatabaseSeeder.{ts,js,mts,mjs}` — instantiate default
|
|
33
|
+
* export and call `.run()` (or `await default()` if it's a function).
|
|
34
|
+
* 2. Prisma fallback — if `package.json#prisma.seed` is configured, shell out
|
|
35
|
+
* to `prisma db seed`.
|
|
36
|
+
* 3. Otherwise — clear error pointing the user at option 1.
|
|
37
|
+
*/
|
|
38
|
+
export declare function runSeeder(cwd?: string): Promise<void>;
|
|
18
39
|
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,GAAG,GAAG,QAAQ,GAAG,SAAS,CAAA;AAItC,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,GAAG,GAAE,MAAsB,GAAG,GAAG,GAAG,IAAI,CAUjE;AAWD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAMzE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAOxE;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CACvB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,SAAS,GAAG,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,SAAS,GAAG,aAAa,EACtG,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,MAAM,EAAE,CAqCV;AAID;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE;IAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG;QAAE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAAE,GAC3H,IAAI,CA6EN;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C1E"}
|
package/dist/commands/migrate.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
1
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
3
4
|
import { spawn } from 'node:child_process';
|
|
4
5
|
// ─── Helpers ──────────────────────────────────────────────
|
|
5
6
|
/** Detect which ORM is installed by checking package.json dependencies. */
|
|
@@ -25,6 +26,31 @@ function run(cmd, args, cwd) {
|
|
|
25
26
|
proc.on('error', reject);
|
|
26
27
|
});
|
|
27
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Find a `database/seeders/DatabaseSeeder` file in the project root.
|
|
31
|
+
* Returns the absolute path, or null if not found. Exported for testing.
|
|
32
|
+
*/
|
|
33
|
+
export function findSeederFile(cwd = process.cwd()) {
|
|
34
|
+
for (const ext of ['ts', 'js', 'mts', 'mjs']) {
|
|
35
|
+
const candidate = join(cwd, 'database', 'seeders', `DatabaseSeeder.${ext}`);
|
|
36
|
+
if (existsSync(candidate))
|
|
37
|
+
return candidate;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Detect whether `package.json` has a `prisma.seed` field configured.
|
|
43
|
+
* Used as the fallback path for Prisma projects that don't ship a Seeder class.
|
|
44
|
+
*/
|
|
45
|
+
export function hasPrismaSeedConfig(cwd = process.cwd()) {
|
|
46
|
+
try {
|
|
47
|
+
const pkg = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8'));
|
|
48
|
+
return typeof pkg?.prisma?.seed === 'string' && pkg.prisma.seed.length > 0;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
28
54
|
/** Build the args array for a given ORM and command. Exported for testing. */
|
|
29
55
|
export function buildArgs(orm, command, options = {}) {
|
|
30
56
|
const env = options.env ?? process.env['NODE_ENV'] ?? 'development';
|
|
@@ -127,5 +153,60 @@ export function registerMigrateCommands(rudder) {
|
|
|
127
153
|
await exec(orm, 'db:generate');
|
|
128
154
|
console.log(' Client generated.');
|
|
129
155
|
}).description('Regenerate the database client (Prisma only)');
|
|
156
|
+
// ── db:seed ───────────────────────────────────────────
|
|
157
|
+
rudder.command('db:seed', async () => {
|
|
158
|
+
await runSeeder(cwd);
|
|
159
|
+
}).description('Seed the database — runs database/seeders/DatabaseSeeder');
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* In-process seeder runner.
|
|
163
|
+
*
|
|
164
|
+
* Resolution order:
|
|
165
|
+
* 1. `database/seeders/DatabaseSeeder.{ts,js,mts,mjs}` — instantiate default
|
|
166
|
+
* export and call `.run()` (or `await default()` if it's a function).
|
|
167
|
+
* 2. Prisma fallback — if `package.json#prisma.seed` is configured, shell out
|
|
168
|
+
* to `prisma db seed`.
|
|
169
|
+
* 3. Otherwise — clear error pointing the user at option 1.
|
|
170
|
+
*/
|
|
171
|
+
export async function runSeeder(cwd = process.cwd()) {
|
|
172
|
+
const seederFile = findSeederFile(cwd);
|
|
173
|
+
if (seederFile) {
|
|
174
|
+
console.log(` Seeding from ${seederFile.replace(cwd + '/', '')}…`);
|
|
175
|
+
const mod = await import(pathToFileURL(seederFile).href);
|
|
176
|
+
const exported = mod.default;
|
|
177
|
+
if (!exported) {
|
|
178
|
+
throw new Error(`[RudderJS] ${seederFile} has no default export. Export a Seeder subclass or an async function.`);
|
|
179
|
+
}
|
|
180
|
+
if (typeof exported === 'function') {
|
|
181
|
+
// Class constructor → instantiate + run(); or plain function → invoke
|
|
182
|
+
const isClass = /^class\s/.test(Function.prototype.toString.call(exported));
|
|
183
|
+
if (isClass) {
|
|
184
|
+
const Cls = exported;
|
|
185
|
+
const instance = new Cls();
|
|
186
|
+
await instance.run();
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
await exported();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
throw new Error(`[RudderJS] ${seederFile} default export must be a Seeder class or function.`);
|
|
194
|
+
}
|
|
195
|
+
console.log(' Seeding complete.');
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (detectORM(cwd) === 'prisma' && hasPrismaSeedConfig(cwd)) {
|
|
199
|
+
console.log(' Running prisma db seed (configured in package.json)…');
|
|
200
|
+
const code = await run('pnpm', ['exec', 'prisma', 'db', 'seed'], cwd);
|
|
201
|
+
if (code !== 0) {
|
|
202
|
+
throw new Error(`prisma db seed failed (exit ${code})`);
|
|
203
|
+
}
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
throw new Error('[RudderJS] No seeder found. Create database/seeders/DatabaseSeeder.ts:\n\n' +
|
|
207
|
+
' import { Seeder } from \'@rudderjs/orm\'\n' +
|
|
208
|
+
' export default class DatabaseSeeder extends Seeder {\n' +
|
|
209
|
+
' async run() { /* seed your data */ }\n' +
|
|
210
|
+
' }\n');
|
|
130
211
|
}
|
|
131
212
|
//# sourceMappingURL=migrate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export { Attribute } from './attribute.js';
|
|
|
7
7
|
export { JsonResource, ResourceCollection } from './resource.js';
|
|
8
8
|
export { ModelCollection } from './collection.js';
|
|
9
9
|
export { ModelFactory, sequence } from './factory.js';
|
|
10
|
+
export { Seeder } from './seeder.js';
|
|
11
|
+
export type { SeederConstructor } from './seeder.js';
|
|
10
12
|
export declare class ModelRegistry {
|
|
11
13
|
private static adapter;
|
|
12
14
|
private static models;
|
|
@@ -38,12 +40,28 @@ export declare class ModelRegistry {
|
|
|
38
40
|
static onRegister(listener: (name: string, ModelClass: typeof Model) => void): () => void;
|
|
39
41
|
static reset(): void;
|
|
40
42
|
}
|
|
41
|
-
|
|
43
|
+
/**
|
|
44
|
+
* Thrown by `Model.findOrFail()` and `Model.firstOrFail()` when no record matches.
|
|
45
|
+
* Apps can catch this to render a 404, or let it bubble — `@rudderjs/core` maps
|
|
46
|
+
* it to an HTTP 404 by default.
|
|
47
|
+
*/
|
|
48
|
+
export declare class ModelNotFoundError extends Error {
|
|
49
|
+
readonly model: string;
|
|
50
|
+
readonly id?: string | number;
|
|
51
|
+
constructor(model: string, id?: string | number);
|
|
52
|
+
}
|
|
53
|
+
export type ModelEvent = 'retrieved' | 'creating' | 'created' | 'updating' | 'updated' | 'saving' | 'saved' | 'deleting' | 'deleted' | 'restoring' | 'restored';
|
|
42
54
|
export interface ModelObserver {
|
|
55
|
+
/** Fired after a record is loaded from the database (find/first/all/get). */
|
|
56
|
+
retrieved?(record: Record<string, unknown>): void | Promise<void>;
|
|
43
57
|
creating?(data: Record<string, unknown>): Record<string, unknown> | void | Promise<Record<string, unknown> | void>;
|
|
44
58
|
created?(record: Record<string, unknown>): void | Promise<void>;
|
|
45
59
|
updating?(id: string | number, data: Record<string, unknown>): Record<string, unknown> | false | void | Promise<Record<string, unknown> | false | void>;
|
|
46
60
|
updated?(record: Record<string, unknown>): void | Promise<void>;
|
|
61
|
+
/** Fired before BOTH creating and updating, after the per-event handler. */
|
|
62
|
+
saving?(data: Record<string, unknown>): Record<string, unknown> | void | Promise<Record<string, unknown> | void>;
|
|
63
|
+
/** Fired after BOTH created and updated. */
|
|
64
|
+
saved?(record: Record<string, unknown>): void | Promise<void>;
|
|
47
65
|
deleting?(id: string | number): false | void | Promise<false | void>;
|
|
48
66
|
deleted?(id: string | number): void | Promise<void>;
|
|
49
67
|
restoring?(id: string | number): false | void | Promise<false | void>;
|
|
@@ -99,6 +117,7 @@ export declare function Appends(target: object, key: string | symbol): void;
|
|
|
99
117
|
*/
|
|
100
118
|
export declare function Cast(type: CastDefinition): (target: object, key: string | symbol) => void;
|
|
101
119
|
export declare abstract class Model {
|
|
120
|
+
#private;
|
|
102
121
|
/** The table name — defaults to lowercase class name + 's' */
|
|
103
122
|
static table: string;
|
|
104
123
|
/** Primary key column */
|
|
@@ -140,8 +159,27 @@ export declare abstract class Model {
|
|
|
140
159
|
* }
|
|
141
160
|
*/
|
|
142
161
|
static attributes: Record<string, Attribute>;
|
|
143
|
-
/**
|
|
162
|
+
/**
|
|
163
|
+
* Columns that are mass-assignable via `Model.create()`, `Model.update()`,
|
|
164
|
+
* and `instance.fill()`. When non-empty, this is an allowlist — any other
|
|
165
|
+
* key in the incoming payload is silently dropped.
|
|
166
|
+
*
|
|
167
|
+
* Empty `fillable` + empty `guarded` (the default) means no enforcement —
|
|
168
|
+
* every key is passed through. Setting either opts in to mass-assignment
|
|
169
|
+
* protection.
|
|
170
|
+
*
|
|
171
|
+
* `instance.forceFill(data)` and direct property assignment + `save()`
|
|
172
|
+
* bypass this allowlist.
|
|
173
|
+
*/
|
|
144
174
|
static fillable: string[];
|
|
175
|
+
/**
|
|
176
|
+
* Columns that are NOT mass-assignable. Pass `['*']` to forbid all keys
|
|
177
|
+
* (the most restrictive setting — combine with `fillable` to allow specific
|
|
178
|
+
* exceptions, or use `forceFill()` to bypass).
|
|
179
|
+
*
|
|
180
|
+
* `fillable` (when non-empty) takes precedence over `guarded`.
|
|
181
|
+
*/
|
|
182
|
+
static guarded: string[];
|
|
145
183
|
/**
|
|
146
184
|
* Enable soft deletes for this model. When true:
|
|
147
185
|
* - `delete()` sets `deletedAt` instead of removing the record
|
|
@@ -152,38 +190,155 @@ export declare abstract class Model {
|
|
|
152
190
|
* - Use `forceDelete()` to permanently remove a record
|
|
153
191
|
*/
|
|
154
192
|
static softDeletes: boolean;
|
|
155
|
-
/** @internal */
|
|
156
|
-
private _instanceHidden?;
|
|
157
|
-
/** @internal */
|
|
158
|
-
private _instanceVisible?;
|
|
159
193
|
static globalScopes: Record<string, ScopeFn>;
|
|
160
194
|
static scopes: Record<string, ScopeFn>;
|
|
161
195
|
/** @internal */
|
|
162
196
|
private static _observers;
|
|
163
197
|
/** @internal */
|
|
164
198
|
private static _listeners;
|
|
199
|
+
/** @internal — true while a withoutEvents() block is active for this class. */
|
|
200
|
+
private static _eventsMuted;
|
|
165
201
|
static observe(ObserverClass: new () => ModelObserver): void;
|
|
166
202
|
static on(event: ModelEvent, handler: (...args: any[]) => any): void;
|
|
167
203
|
private static _fireEvent;
|
|
168
204
|
static clearObservers(): void;
|
|
169
205
|
static getTable(this: typeof Model): string;
|
|
206
|
+
/**
|
|
207
|
+
* Build a Model instance from a plain database record.
|
|
208
|
+
*
|
|
209
|
+
* The returned object is `instanceof <ModelClass>`, has the model's
|
|
210
|
+
* prototype methods (`save`, `fill`, `refresh`, `delete`, etc.), and
|
|
211
|
+
* carries every column from `record` as an enumerable own property.
|
|
212
|
+
*
|
|
213
|
+
* Idempotent: passing an already-hydrated instance of the same class
|
|
214
|
+
* returns it unchanged. Passing `null`/`undefined` returns `null`.
|
|
215
|
+
*
|
|
216
|
+
* Most callers don't need to invoke this directly — query results
|
|
217
|
+
* (`find`, `first`, `all`, `paginate`, `where().get()`, etc.) are
|
|
218
|
+
* hydrated automatically. Use it when you have a raw record from
|
|
219
|
+
* outside the ORM (e.g. cached JSON, a fixture file) and want a
|
|
220
|
+
* working Model instance.
|
|
221
|
+
*/
|
|
222
|
+
static hydrate<T extends typeof Model>(this: T, record: unknown): InstanceType<T> | null;
|
|
223
|
+
/** @internal — wrap a QueryBuilder so its read methods return Model instances. */
|
|
224
|
+
private static _hydratingQb;
|
|
170
225
|
static query<T extends typeof Model>(this: T): QueryBuilder<InstanceType<T>> & {
|
|
171
226
|
scope(name: string, ...args: unknown[]): QueryBuilder<InstanceType<T>>;
|
|
172
227
|
withoutGlobalScope(name: string): QueryBuilder<InstanceType<T>>;
|
|
173
228
|
};
|
|
174
229
|
private static _q;
|
|
175
230
|
static find<T extends typeof Model>(this: T, id: number | string): Promise<InstanceType<T> | null>;
|
|
231
|
+
/** Like `find()`, but throws `ModelNotFoundError` if no record matches. */
|
|
232
|
+
static findOrFail<T extends typeof Model>(this: T, id: number | string): Promise<InstanceType<T>>;
|
|
176
233
|
static all<T extends typeof Model>(this: T): Promise<InstanceType<T>[]>;
|
|
177
234
|
static first<T extends typeof Model>(this: T): Promise<InstanceType<T> | null>;
|
|
235
|
+
/** Like `first()`, but throws `ModelNotFoundError` if no record matches. */
|
|
236
|
+
static firstOrFail<T extends typeof Model>(this: T): Promise<InstanceType<T>>;
|
|
178
237
|
static count<T extends typeof Model>(this: T): Promise<number>;
|
|
179
238
|
static paginate<T extends typeof Model>(this: T, page: number, perPage?: number): Promise<PaginatedResult<InstanceType<T>>>;
|
|
180
239
|
static where<T extends typeof Model>(this: T, column: string, value: unknown): QueryBuilder<InstanceType<T>>;
|
|
240
|
+
/**
|
|
241
|
+
* Find a record by attributes; if none exists, create one with `attrs` merged with `values`.
|
|
242
|
+
* Returns the existing or newly-created record.
|
|
243
|
+
*/
|
|
244
|
+
static firstOrCreate<T extends typeof Model>(this: T, attrs: Partial<InstanceType<T>>, values?: Partial<InstanceType<T>>): Promise<InstanceType<T>>;
|
|
245
|
+
/**
|
|
246
|
+
* Find a record by attributes; if found, update it with `values`. If not, create it
|
|
247
|
+
* with `attrs` merged with `values`. Returns the upserted record.
|
|
248
|
+
*/
|
|
249
|
+
static updateOrCreate<T extends typeof Model>(this: T, attrs: Partial<InstanceType<T>>, values: Partial<InstanceType<T>>): Promise<InstanceType<T>>;
|
|
250
|
+
/**
|
|
251
|
+
* Run `fn` with all observer / listener firing muted for this model class.
|
|
252
|
+
* Useful for bulk seeding or tests where lifecycle hooks would interfere.
|
|
253
|
+
*/
|
|
254
|
+
static withoutEvents<T>(this: typeof Model, fn: () => T | Promise<T>): Promise<T>;
|
|
255
|
+
/**
|
|
256
|
+
* @internal — true when `key` is mass-assignable under this class's
|
|
257
|
+
* `fillable` / `guarded` configuration.
|
|
258
|
+
*
|
|
259
|
+
* Rules (mirrors Laravel Eloquent):
|
|
260
|
+
* 1. Both `fillable` and `guarded` empty → all keys pass (no enforcement).
|
|
261
|
+
* 2. `fillable` non-empty → allowlist; any key outside it is rejected.
|
|
262
|
+
* 3. Otherwise `guarded` applies; `['*']` rejects everything; specific keys reject only those.
|
|
263
|
+
*/
|
|
264
|
+
private static _isFillable;
|
|
265
|
+
/**
|
|
266
|
+
* @internal — drop keys that are not mass-assignable. When neither
|
|
267
|
+
* `fillable` nor `guarded` is set, the input is returned unchanged.
|
|
268
|
+
*/
|
|
269
|
+
private static _filterFillable;
|
|
181
270
|
static create<T extends typeof Model>(this: T, data: Partial<InstanceType<T>>): Promise<InstanceType<T>>;
|
|
271
|
+
/** @internal — create path that skips the fillable filter. Used by `save()`. */
|
|
272
|
+
private static _doCreate;
|
|
182
273
|
static with<T extends typeof Model>(this: T, ...relations: string[]): QueryBuilder<InstanceType<T>>;
|
|
183
274
|
static update<T extends typeof Model>(this: T, id: number | string, data: Partial<InstanceType<T>>): Promise<InstanceType<T>>;
|
|
275
|
+
/** @internal — update path that skips the fillable filter. Used by `save()`. */
|
|
276
|
+
private static _doUpdate;
|
|
184
277
|
static delete<T extends typeof Model>(this: T, id: number | string): Promise<void>;
|
|
185
278
|
static restore<T extends typeof Model>(this: T, id: number | string): Promise<InstanceType<T>>;
|
|
186
279
|
static forceDelete<T extends typeof Model>(this: T, id: number | string): Promise<void>;
|
|
280
|
+
/** @internal — pull the primary-key value from this instance, or `undefined` if unset. */
|
|
281
|
+
private _getKey;
|
|
282
|
+
/**
|
|
283
|
+
* @internal — own enumerable data fields, with framework-internal `_` keys
|
|
284
|
+
* stripped and `undefined` values dropped so a class-declared but never-set
|
|
285
|
+
* field (`id!: number`) doesn't leak into a create/update payload.
|
|
286
|
+
*/
|
|
287
|
+
private _toData;
|
|
288
|
+
/**
|
|
289
|
+
* Persist this instance. Inserts when the primary key is unset; otherwise updates.
|
|
290
|
+
*
|
|
291
|
+
* Goes through the static `create()` / `update()` path so observers, casts,
|
|
292
|
+
* and mutators all fire. The instance is mutated in place with the canonical
|
|
293
|
+
* fields returned by the database (default values, generated ids, computed columns)
|
|
294
|
+
* and returned for chaining.
|
|
295
|
+
*/
|
|
296
|
+
save(): Promise<this>;
|
|
297
|
+
/**
|
|
298
|
+
* Mass-assign a partial set of attributes onto this instance. Does not persist —
|
|
299
|
+
* call `save()` afterwards. Returns `this` for chaining.
|
|
300
|
+
*
|
|
301
|
+
* Drops keys that aren't mass-assignable under the class's `fillable` /
|
|
302
|
+
* `guarded` configuration. Use `forceFill()` to bypass.
|
|
303
|
+
*/
|
|
304
|
+
fill(data: Partial<this>): this;
|
|
305
|
+
/**
|
|
306
|
+
* Mass-assign attributes without applying the `fillable` / `guarded` filter.
|
|
307
|
+
* Use when you trust the source (factory output, internal sync, fixture data)
|
|
308
|
+
* and want every key on the instance regardless of mass-assignment protection.
|
|
309
|
+
*/
|
|
310
|
+
forceFill(data: Partial<this>): this;
|
|
311
|
+
/**
|
|
312
|
+
* Re-read this instance from the database, replacing in-place with fresh
|
|
313
|
+
* column values. Throws `ModelNotFoundError` if the row no longer exists.
|
|
314
|
+
* Useful after triggers, generated columns, or a parallel update from another process.
|
|
315
|
+
*/
|
|
316
|
+
refresh(): Promise<this>;
|
|
317
|
+
/**
|
|
318
|
+
* Delete this instance from the database. Soft-deletes when `static softDeletes`
|
|
319
|
+
* is enabled. Routes through the static `delete()` so observers fire.
|
|
320
|
+
*/
|
|
321
|
+
delete(): Promise<void>;
|
|
322
|
+
/**
|
|
323
|
+
* Clone this instance into a new, unsaved copy — the primary key and the
|
|
324
|
+
* standard timestamp columns are dropped, and any keys passed in `except`
|
|
325
|
+
* are also stripped. Call `save()` on the returned instance to persist.
|
|
326
|
+
*
|
|
327
|
+
* @example
|
|
328
|
+
* const draft = post.replicate(['publishedAt'])
|
|
329
|
+
* draft.title = 'Copy: ' + draft.title
|
|
330
|
+
* await draft.save()
|
|
331
|
+
*/
|
|
332
|
+
replicate(except?: string[]): this;
|
|
333
|
+
/**
|
|
334
|
+
* True when `other` represents the same record — same model class (by table)
|
|
335
|
+
* and same primary key.
|
|
336
|
+
*/
|
|
337
|
+
is(other: Model | null | undefined): boolean;
|
|
338
|
+
/** Inverse of `is()`. */
|
|
339
|
+
isNot(other: Model | null | undefined): boolean;
|
|
340
|
+
/** True when this instance has been soft-deleted (its `deletedAt` is set). */
|
|
341
|
+
trashed(): boolean;
|
|
187
342
|
/** @internal — apply cast setters and attribute mutators to an incoming data payload */
|
|
188
343
|
private static _applyMutators;
|
|
189
344
|
/**
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAa,MAAM,qBAAqB,CAAA;AAC/F,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AACjE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC7J,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAoC,gBAAgB,CAAA;AACxE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAa,eAAe,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAA8B,iBAAiB,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAuB,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export { Attribute } from './attribute.js';
|
|
|
3
3
|
export { JsonResource, ResourceCollection } from './resource.js';
|
|
4
4
|
export { ModelCollection } from './collection.js';
|
|
5
5
|
export { ModelFactory, sequence } from './factory.js';
|
|
6
|
+
export { Seeder } from './seeder.js';
|
|
6
7
|
// ─── Global ORM Registry ───────────────────────────────────
|
|
7
8
|
export class ModelRegistry {
|
|
8
9
|
static adapter = null;
|
|
@@ -60,6 +61,25 @@ export class ModelRegistry {
|
|
|
60
61
|
this.listeners.clear();
|
|
61
62
|
}
|
|
62
63
|
}
|
|
64
|
+
// ─── Errors ────────────────────────────────────────────────
|
|
65
|
+
/**
|
|
66
|
+
* Thrown by `Model.findOrFail()` and `Model.firstOrFail()` when no record matches.
|
|
67
|
+
* Apps can catch this to render a 404, or let it bubble — `@rudderjs/core` maps
|
|
68
|
+
* it to an HTTP 404 by default.
|
|
69
|
+
*/
|
|
70
|
+
export class ModelNotFoundError extends Error {
|
|
71
|
+
model;
|
|
72
|
+
id;
|
|
73
|
+
constructor(model, id) {
|
|
74
|
+
super(id !== undefined
|
|
75
|
+
? `[RudderJS ORM] No ${model} found for id ${String(id)}.`
|
|
76
|
+
: `[RudderJS ORM] No ${model} found.`);
|
|
77
|
+
this.name = 'ModelNotFoundError';
|
|
78
|
+
this.model = model;
|
|
79
|
+
if (id !== undefined)
|
|
80
|
+
this.id = id;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
63
83
|
// ─── Decorators ────────────────────────────────────────────
|
|
64
84
|
/**
|
|
65
85
|
* Mark an instance property as hidden from JSON output.
|
|
@@ -178,8 +198,27 @@ export class Model {
|
|
|
178
198
|
* }
|
|
179
199
|
*/
|
|
180
200
|
static attributes = {};
|
|
181
|
-
/**
|
|
201
|
+
/**
|
|
202
|
+
* Columns that are mass-assignable via `Model.create()`, `Model.update()`,
|
|
203
|
+
* and `instance.fill()`. When non-empty, this is an allowlist — any other
|
|
204
|
+
* key in the incoming payload is silently dropped.
|
|
205
|
+
*
|
|
206
|
+
* Empty `fillable` + empty `guarded` (the default) means no enforcement —
|
|
207
|
+
* every key is passed through. Setting either opts in to mass-assignment
|
|
208
|
+
* protection.
|
|
209
|
+
*
|
|
210
|
+
* `instance.forceFill(data)` and direct property assignment + `save()`
|
|
211
|
+
* bypass this allowlist.
|
|
212
|
+
*/
|
|
182
213
|
static fillable = [];
|
|
214
|
+
/**
|
|
215
|
+
* Columns that are NOT mass-assignable. Pass `['*']` to forbid all keys
|
|
216
|
+
* (the most restrictive setting — combine with `fillable` to allow specific
|
|
217
|
+
* exceptions, or use `forceFill()` to bypass).
|
|
218
|
+
*
|
|
219
|
+
* `fillable` (when non-empty) takes precedence over `guarded`.
|
|
220
|
+
*/
|
|
221
|
+
static guarded = [];
|
|
183
222
|
/**
|
|
184
223
|
* Enable soft deletes for this model. When true:
|
|
185
224
|
* - `delete()` sets `deletedAt` instead of removing the record
|
|
@@ -191,10 +230,14 @@ export class Model {
|
|
|
191
230
|
*/
|
|
192
231
|
static softDeletes = false;
|
|
193
232
|
// ── Instance-level serialization overrides ─────────────
|
|
233
|
+
//
|
|
234
|
+
// True ECMAScript private fields (`#`) so they don't appear in
|
|
235
|
+
// `Object.entries(this)` / object spread / `JSON.stringify` — keeps
|
|
236
|
+
// hydrated instances clean wire-format equivalents of plain records.
|
|
194
237
|
/** @internal */
|
|
195
|
-
|
|
238
|
+
#instanceHidden;
|
|
196
239
|
/** @internal */
|
|
197
|
-
|
|
240
|
+
#instanceVisible;
|
|
198
241
|
// ── Scopes ─────────────────────────────────────────────
|
|
199
242
|
static globalScopes = {};
|
|
200
243
|
static scopes = {};
|
|
@@ -204,6 +247,8 @@ export class Model {
|
|
|
204
247
|
/** @internal */
|
|
205
248
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
206
249
|
static _listeners = new Map();
|
|
250
|
+
/** @internal — true while a withoutEvents() block is active for this class. */
|
|
251
|
+
static _eventsMuted = false;
|
|
207
252
|
static observe(ObserverClass) {
|
|
208
253
|
if (!Object.prototype.hasOwnProperty.call(this, '_observers')) {
|
|
209
254
|
this._observers = [];
|
|
@@ -221,6 +266,10 @@ export class Model {
|
|
|
221
266
|
}
|
|
222
267
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
223
268
|
static async _fireEvent(event, ...args) {
|
|
269
|
+
if (Object.prototype.hasOwnProperty.call(this, '_eventsMuted') && this._eventsMuted) {
|
|
270
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
271
|
+
return args[0];
|
|
272
|
+
}
|
|
224
273
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
225
274
|
let result = args[0];
|
|
226
275
|
const observers = Object.prototype.hasOwnProperty.call(this, '_observers') ? this._observers : [];
|
|
@@ -255,104 +304,303 @@ export class Model {
|
|
|
255
304
|
static getTable() {
|
|
256
305
|
return this.table ?? `${this.name.toLowerCase()}s`;
|
|
257
306
|
}
|
|
307
|
+
/**
|
|
308
|
+
* Build a Model instance from a plain database record.
|
|
309
|
+
*
|
|
310
|
+
* The returned object is `instanceof <ModelClass>`, has the model's
|
|
311
|
+
* prototype methods (`save`, `fill`, `refresh`, `delete`, etc.), and
|
|
312
|
+
* carries every column from `record` as an enumerable own property.
|
|
313
|
+
*
|
|
314
|
+
* Idempotent: passing an already-hydrated instance of the same class
|
|
315
|
+
* returns it unchanged. Passing `null`/`undefined` returns `null`.
|
|
316
|
+
*
|
|
317
|
+
* Most callers don't need to invoke this directly — query results
|
|
318
|
+
* (`find`, `first`, `all`, `paginate`, `where().get()`, etc.) are
|
|
319
|
+
* hydrated automatically. Use it when you have a raw record from
|
|
320
|
+
* outside the ORM (e.g. cached JSON, a fixture file) and want a
|
|
321
|
+
* working Model instance.
|
|
322
|
+
*/
|
|
323
|
+
static hydrate(record) {
|
|
324
|
+
if (record === null || record === undefined)
|
|
325
|
+
return null;
|
|
326
|
+
if (record instanceof Model && record.constructor === this)
|
|
327
|
+
return record;
|
|
328
|
+
const Ctor = this;
|
|
329
|
+
const instance = new Ctor();
|
|
330
|
+
Object.assign(instance, record);
|
|
331
|
+
return instance;
|
|
332
|
+
}
|
|
333
|
+
/** @internal — wrap a QueryBuilder so its read methods return Model instances. */
|
|
334
|
+
static _hydratingQb(self, qb) {
|
|
335
|
+
const ModelClass = self;
|
|
336
|
+
const wrap = (r) => ModelClass.hydrate.call(self, r);
|
|
337
|
+
const wrapMaybe = (r) => r == null ? null : wrap(r);
|
|
338
|
+
const wrapMany = (rs) => rs.map(wrap);
|
|
339
|
+
const proxy = new Proxy(qb, {
|
|
340
|
+
get(target, prop, receiver) {
|
|
341
|
+
const value = Reflect.get(target, prop, receiver);
|
|
342
|
+
if (typeof value !== 'function')
|
|
343
|
+
return value;
|
|
344
|
+
switch (prop) {
|
|
345
|
+
case 'find':
|
|
346
|
+
return async (id) => wrapMaybe(await target.find(id));
|
|
347
|
+
case 'first':
|
|
348
|
+
return async () => wrapMaybe(await target.first());
|
|
349
|
+
case 'get':
|
|
350
|
+
return async () => wrapMany(await target.get());
|
|
351
|
+
case 'all':
|
|
352
|
+
return async () => wrapMany(await target.all());
|
|
353
|
+
case 'paginate':
|
|
354
|
+
return async (page, perPage) => {
|
|
355
|
+
const r = await target.paginate(page ?? 1, perPage);
|
|
356
|
+
return { ...r, data: wrapMany(r.data) };
|
|
357
|
+
};
|
|
358
|
+
case 'create':
|
|
359
|
+
return async (data) => wrap(await target.create(data));
|
|
360
|
+
case 'update':
|
|
361
|
+
return async (id, data) => wrap(await target.update(id, data));
|
|
362
|
+
case 'restore':
|
|
363
|
+
return async (id) => wrap(await target.restore(id));
|
|
364
|
+
default:
|
|
365
|
+
// Chainable methods (where/orderBy/with/...) typically return `target` —
|
|
366
|
+
// re-wrap so `Model.where('a', 1).first()` keeps hydrating.
|
|
367
|
+
return (...args) => {
|
|
368
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
369
|
+
const result = value.apply(target, args);
|
|
370
|
+
return result === target ? proxy : result;
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
});
|
|
375
|
+
return proxy;
|
|
376
|
+
}
|
|
258
377
|
static query() {
|
|
259
378
|
ModelRegistry.register(this);
|
|
260
|
-
let q = ModelRegistry.getAdapter().query(this.getTable());
|
|
261
|
-
if (this.softDeletes) {
|
|
262
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
263
|
-
q._enableSoftDeletes?.();
|
|
264
|
-
}
|
|
265
|
-
const globalScopes = this.globalScopes;
|
|
266
|
-
const excludedScopes = new Set();
|
|
267
|
-
for (const [, scopeFn] of Object.entries(globalScopes)) {
|
|
268
|
-
q = scopeFn(q);
|
|
269
|
-
}
|
|
270
379
|
const modelClass = this;
|
|
271
380
|
const localScopes = modelClass.scopes;
|
|
272
|
-
|
|
273
|
-
const
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
if (!scopeFn)
|
|
277
|
-
throw new Error(`[RudderJS ORM] Scope "${name}" is not defined on ${modelClass.name}.`);
|
|
278
|
-
return scopeFn(enhanced, ...args);
|
|
279
|
-
};
|
|
280
|
-
enhanced.withoutGlobalScope = (name) => {
|
|
281
|
-
excludedScopes.add(name);
|
|
282
|
-
let rebuilt = ModelRegistry.getAdapter().query(modelClass.getTable());
|
|
381
|
+
const globalScopes = modelClass.globalScopes;
|
|
382
|
+
const excludedScopes = new Set();
|
|
383
|
+
const buildScoped = () => {
|
|
384
|
+
let raw = ModelRegistry.getAdapter().query(modelClass.getTable());
|
|
283
385
|
if (modelClass.softDeletes) {
|
|
284
386
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
285
|
-
|
|
387
|
+
raw._enableSoftDeletes?.();
|
|
286
388
|
}
|
|
287
389
|
for (const [scopeName, scopeFn] of Object.entries(globalScopes)) {
|
|
288
390
|
if (!excludedScopes.has(scopeName)) {
|
|
289
|
-
|
|
391
|
+
raw = scopeFn(raw);
|
|
290
392
|
}
|
|
291
393
|
}
|
|
394
|
+
return Model._hydratingQb(this, raw);
|
|
395
|
+
};
|
|
396
|
+
const enhance = (q) => {
|
|
292
397
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
293
|
-
;
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
398
|
+
const enhanced = q;
|
|
399
|
+
enhanced.scope = (name, ...args) => {
|
|
400
|
+
const scopeFn = localScopes[name];
|
|
401
|
+
if (!scopeFn)
|
|
402
|
+
throw new Error(`[RudderJS ORM] Scope "${name}" is not defined on ${modelClass.name}.`);
|
|
403
|
+
return scopeFn(enhanced, ...args);
|
|
404
|
+
};
|
|
405
|
+
enhanced.withoutGlobalScope = (name) => {
|
|
406
|
+
excludedScopes.add(name);
|
|
407
|
+
return enhance(buildScoped());
|
|
408
|
+
};
|
|
409
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
410
|
+
return enhanced;
|
|
297
411
|
};
|
|
298
|
-
return
|
|
412
|
+
return enhance(buildScoped());
|
|
299
413
|
}
|
|
300
414
|
static _q(self) {
|
|
301
415
|
ModelRegistry.register(self);
|
|
302
|
-
const
|
|
303
|
-
|
|
416
|
+
const ModelClass = self;
|
|
417
|
+
let q = ModelRegistry.getAdapter().query(ModelClass.getTable());
|
|
418
|
+
if (ModelClass.softDeletes) {
|
|
304
419
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
305
420
|
q._enableSoftDeletes?.();
|
|
306
421
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
result = scopeFn(result);
|
|
422
|
+
for (const [, scopeFn] of Object.entries(ModelClass.globalScopes)) {
|
|
423
|
+
q = scopeFn(q);
|
|
310
424
|
}
|
|
311
|
-
return
|
|
425
|
+
return Model._hydratingQb(self, q);
|
|
312
426
|
}
|
|
313
|
-
static find(id) {
|
|
314
|
-
|
|
427
|
+
static async find(id) {
|
|
428
|
+
const self = this;
|
|
429
|
+
const record = await Model._q(this).find(id);
|
|
430
|
+
if (record)
|
|
431
|
+
await self._fireEvent('retrieved', record);
|
|
432
|
+
return record;
|
|
315
433
|
}
|
|
316
|
-
|
|
317
|
-
|
|
434
|
+
/** Like `find()`, but throws `ModelNotFoundError` if no record matches. */
|
|
435
|
+
static async findOrFail(id) {
|
|
436
|
+
const record = await this.find(id);
|
|
437
|
+
if (!record)
|
|
438
|
+
throw new ModelNotFoundError(this.name, id);
|
|
439
|
+
return record;
|
|
318
440
|
}
|
|
319
|
-
static
|
|
320
|
-
|
|
441
|
+
static async all() {
|
|
442
|
+
const self = this;
|
|
443
|
+
const records = await Model._q(this).all();
|
|
444
|
+
for (const r of records)
|
|
445
|
+
await self._fireEvent('retrieved', r);
|
|
446
|
+
return records;
|
|
447
|
+
}
|
|
448
|
+
static async first() {
|
|
449
|
+
const self = this;
|
|
450
|
+
const record = await Model._q(this).first();
|
|
451
|
+
if (record)
|
|
452
|
+
await self._fireEvent('retrieved', record);
|
|
453
|
+
return record;
|
|
454
|
+
}
|
|
455
|
+
/** Like `first()`, but throws `ModelNotFoundError` if no record matches. */
|
|
456
|
+
static async firstOrFail() {
|
|
457
|
+
const record = await this.first();
|
|
458
|
+
if (!record)
|
|
459
|
+
throw new ModelNotFoundError(this.name);
|
|
460
|
+
return record;
|
|
321
461
|
}
|
|
322
462
|
static count() {
|
|
323
463
|
return Model._q(this).count();
|
|
324
464
|
}
|
|
325
|
-
static paginate(page, perPage) {
|
|
326
|
-
|
|
465
|
+
static async paginate(page, perPage) {
|
|
466
|
+
const self = this;
|
|
467
|
+
const result = await Model._q(this).paginate(page, perPage);
|
|
468
|
+
for (const r of result.data)
|
|
469
|
+
await self._fireEvent('retrieved', r);
|
|
470
|
+
return result;
|
|
327
471
|
}
|
|
328
472
|
static where(column, value) {
|
|
329
473
|
return Model._q(this).where(column, value);
|
|
330
474
|
}
|
|
475
|
+
/**
|
|
476
|
+
* Find a record by attributes; if none exists, create one with `attrs` merged with `values`.
|
|
477
|
+
* Returns the existing or newly-created record.
|
|
478
|
+
*/
|
|
479
|
+
static async firstOrCreate(attrs, values = {}) {
|
|
480
|
+
const self = this;
|
|
481
|
+
let q = Model._q(this);
|
|
482
|
+
for (const [col, val] of Object.entries(attrs)) {
|
|
483
|
+
q = q.where(col, val);
|
|
484
|
+
}
|
|
485
|
+
const existing = await q.first();
|
|
486
|
+
if (existing) {
|
|
487
|
+
await self._fireEvent('retrieved', existing);
|
|
488
|
+
return existing;
|
|
489
|
+
}
|
|
490
|
+
return this.create({ ...attrs, ...values });
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Find a record by attributes; if found, update it with `values`. If not, create it
|
|
494
|
+
* with `attrs` merged with `values`. Returns the upserted record.
|
|
495
|
+
*/
|
|
496
|
+
static async updateOrCreate(attrs, values) {
|
|
497
|
+
const self = this;
|
|
498
|
+
let q = Model._q(this);
|
|
499
|
+
for (const [col, val] of Object.entries(attrs)) {
|
|
500
|
+
q = q.where(col, val);
|
|
501
|
+
}
|
|
502
|
+
const existing = await q.first();
|
|
503
|
+
if (existing) {
|
|
504
|
+
const id = existing[self.primaryKey];
|
|
505
|
+
return this.update(id, values);
|
|
506
|
+
}
|
|
507
|
+
return this.create({ ...attrs, ...values });
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* Run `fn` with all observer / listener firing muted for this model class.
|
|
511
|
+
* Useful for bulk seeding or tests where lifecycle hooks would interfere.
|
|
512
|
+
*/
|
|
513
|
+
static async withoutEvents(fn) {
|
|
514
|
+
const previous = Object.prototype.hasOwnProperty.call(this, '_eventsMuted') ? this._eventsMuted : false;
|
|
515
|
+
this._eventsMuted = true;
|
|
516
|
+
try {
|
|
517
|
+
return await fn();
|
|
518
|
+
}
|
|
519
|
+
finally {
|
|
520
|
+
this._eventsMuted = previous;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* @internal — true when `key` is mass-assignable under this class's
|
|
525
|
+
* `fillable` / `guarded` configuration.
|
|
526
|
+
*
|
|
527
|
+
* Rules (mirrors Laravel Eloquent):
|
|
528
|
+
* 1. Both `fillable` and `guarded` empty → all keys pass (no enforcement).
|
|
529
|
+
* 2. `fillable` non-empty → allowlist; any key outside it is rejected.
|
|
530
|
+
* 3. Otherwise `guarded` applies; `['*']` rejects everything; specific keys reject only those.
|
|
531
|
+
*/
|
|
532
|
+
static _isFillable(key) {
|
|
533
|
+
if (this.fillable.length === 0 && this.guarded.length === 0)
|
|
534
|
+
return true;
|
|
535
|
+
if (this.fillable.length > 0)
|
|
536
|
+
return this.fillable.includes(key);
|
|
537
|
+
if (this.guarded.includes('*'))
|
|
538
|
+
return false;
|
|
539
|
+
return !this.guarded.includes(key);
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* @internal — drop keys that are not mass-assignable. When neither
|
|
543
|
+
* `fillable` nor `guarded` is set, the input is returned unchanged.
|
|
544
|
+
*/
|
|
545
|
+
static _filterFillable(data) {
|
|
546
|
+
if (this.fillable.length === 0 && this.guarded.length === 0)
|
|
547
|
+
return data;
|
|
548
|
+
const out = {};
|
|
549
|
+
for (const [k, v] of Object.entries(data)) {
|
|
550
|
+
if (this._isFillable(k))
|
|
551
|
+
out[k] = v;
|
|
552
|
+
}
|
|
553
|
+
return out;
|
|
554
|
+
}
|
|
331
555
|
static async create(data) {
|
|
556
|
+
const self = this;
|
|
557
|
+
const filtered = self._filterFillable(data);
|
|
558
|
+
return Model._doCreate.call(this, filtered);
|
|
559
|
+
}
|
|
560
|
+
/** @internal — create path that skips the fillable filter. Used by `save()`. */
|
|
561
|
+
static async _doCreate(data) {
|
|
332
562
|
const self = this;
|
|
333
563
|
let payload = self._applyMutators(data);
|
|
334
|
-
const
|
|
335
|
-
if (
|
|
564
|
+
const creatingResult = await self._fireEvent('creating', payload);
|
|
565
|
+
if (creatingResult === false)
|
|
336
566
|
throw new Error(`[RudderJS ORM] Create cancelled by observer on ${self.name}.`);
|
|
337
|
-
if (
|
|
338
|
-
payload =
|
|
567
|
+
if (creatingResult && typeof creatingResult === 'object')
|
|
568
|
+
payload = creatingResult;
|
|
569
|
+
const savingResult = await self._fireEvent('saving', payload);
|
|
570
|
+
if (savingResult === false)
|
|
571
|
+
throw new Error(`[RudderJS ORM] Create cancelled by saving observer on ${self.name}.`);
|
|
572
|
+
if (savingResult && typeof savingResult === 'object')
|
|
573
|
+
payload = savingResult;
|
|
339
574
|
const record = await Model._q(this).create(payload);
|
|
340
575
|
await self._fireEvent('created', record);
|
|
576
|
+
await self._fireEvent('saved', record);
|
|
341
577
|
return record;
|
|
342
578
|
}
|
|
343
579
|
static with(...relations) {
|
|
344
580
|
return Model._q(this).with(...relations);
|
|
345
581
|
}
|
|
346
582
|
static async update(id, data) {
|
|
583
|
+
const self = this;
|
|
584
|
+
const filtered = self._filterFillable(data);
|
|
585
|
+
return Model._doUpdate.call(this, id, filtered);
|
|
586
|
+
}
|
|
587
|
+
/** @internal — update path that skips the fillable filter. Used by `save()`. */
|
|
588
|
+
static async _doUpdate(id, data) {
|
|
347
589
|
const self = this;
|
|
348
590
|
let payload = self._applyMutators(data);
|
|
349
|
-
const
|
|
350
|
-
if (
|
|
591
|
+
const updatingResult = await self._fireEvent('updating', id, payload);
|
|
592
|
+
if (updatingResult === false)
|
|
351
593
|
throw new Error(`[RudderJS ORM] Update cancelled by observer on ${self.name}.`);
|
|
352
|
-
if (
|
|
353
|
-
payload =
|
|
594
|
+
if (updatingResult && typeof updatingResult === 'object')
|
|
595
|
+
payload = updatingResult;
|
|
596
|
+
const savingResult = await self._fireEvent('saving', payload);
|
|
597
|
+
if (savingResult === false)
|
|
598
|
+
throw new Error(`[RudderJS ORM] Update cancelled by saving observer on ${self.name}.`);
|
|
599
|
+
if (savingResult && typeof savingResult === 'object')
|
|
600
|
+
payload = savingResult;
|
|
354
601
|
const record = await Model._q(this).update(id, payload);
|
|
355
602
|
await self._fireEvent('updated', record);
|
|
603
|
+
await self._fireEvent('saved', record);
|
|
356
604
|
return record;
|
|
357
605
|
}
|
|
358
606
|
static async delete(id) {
|
|
@@ -380,6 +628,160 @@ export class Model {
|
|
|
380
628
|
await Model._q(this).forceDelete(id);
|
|
381
629
|
await self._fireEvent('deleted', id);
|
|
382
630
|
}
|
|
631
|
+
// ── Instance persistence methods ───────────────────────
|
|
632
|
+
/** @internal — pull the primary-key value from this instance, or `undefined` if unset. */
|
|
633
|
+
_getKey() {
|
|
634
|
+
const ctor = this.constructor;
|
|
635
|
+
const value = this[ctor.primaryKey];
|
|
636
|
+
if (value === undefined || value === null)
|
|
637
|
+
return undefined;
|
|
638
|
+
return value;
|
|
639
|
+
}
|
|
640
|
+
/**
|
|
641
|
+
* @internal — own enumerable data fields, with framework-internal `_` keys
|
|
642
|
+
* stripped and `undefined` values dropped so a class-declared but never-set
|
|
643
|
+
* field (`id!: number`) doesn't leak into a create/update payload.
|
|
644
|
+
*/
|
|
645
|
+
_toData() {
|
|
646
|
+
const out = {};
|
|
647
|
+
for (const [k, v] of Object.entries(this)) {
|
|
648
|
+
if (k.startsWith('_'))
|
|
649
|
+
continue;
|
|
650
|
+
if (v === undefined)
|
|
651
|
+
continue;
|
|
652
|
+
out[k] = v;
|
|
653
|
+
}
|
|
654
|
+
return out;
|
|
655
|
+
}
|
|
656
|
+
/**
|
|
657
|
+
* Persist this instance. Inserts when the primary key is unset; otherwise updates.
|
|
658
|
+
*
|
|
659
|
+
* Goes through the static `create()` / `update()` path so observers, casts,
|
|
660
|
+
* and mutators all fire. The instance is mutated in place with the canonical
|
|
661
|
+
* fields returned by the database (default values, generated ids, computed columns)
|
|
662
|
+
* and returned for chaining.
|
|
663
|
+
*/
|
|
664
|
+
async save() {
|
|
665
|
+
const ctor = this.constructor;
|
|
666
|
+
const data = this._toData();
|
|
667
|
+
const id = this._getKey();
|
|
668
|
+
// Bypass fillable: data was set via property assignment, not mass-assignment.
|
|
669
|
+
const persisted = id === undefined
|
|
670
|
+
? await Model._doCreate.call(ctor, data)
|
|
671
|
+
: await Model._doUpdate.call(ctor, id, data);
|
|
672
|
+
Object.assign(this, persisted);
|
|
673
|
+
return this;
|
|
674
|
+
}
|
|
675
|
+
/**
|
|
676
|
+
* Mass-assign a partial set of attributes onto this instance. Does not persist —
|
|
677
|
+
* call `save()` afterwards. Returns `this` for chaining.
|
|
678
|
+
*
|
|
679
|
+
* Drops keys that aren't mass-assignable under the class's `fillable` /
|
|
680
|
+
* `guarded` configuration. Use `forceFill()` to bypass.
|
|
681
|
+
*/
|
|
682
|
+
fill(data) {
|
|
683
|
+
const ctor = this.constructor;
|
|
684
|
+
const filtered = ctor._filterFillable(data);
|
|
685
|
+
Object.assign(this, filtered);
|
|
686
|
+
return this;
|
|
687
|
+
}
|
|
688
|
+
/**
|
|
689
|
+
* Mass-assign attributes without applying the `fillable` / `guarded` filter.
|
|
690
|
+
* Use when you trust the source (factory output, internal sync, fixture data)
|
|
691
|
+
* and want every key on the instance regardless of mass-assignment protection.
|
|
692
|
+
*/
|
|
693
|
+
forceFill(data) {
|
|
694
|
+
Object.assign(this, data);
|
|
695
|
+
return this;
|
|
696
|
+
}
|
|
697
|
+
/**
|
|
698
|
+
* Re-read this instance from the database, replacing in-place with fresh
|
|
699
|
+
* column values. Throws `ModelNotFoundError` if the row no longer exists.
|
|
700
|
+
* Useful after triggers, generated columns, or a parallel update from another process.
|
|
701
|
+
*/
|
|
702
|
+
async refresh() {
|
|
703
|
+
const ctor = this.constructor;
|
|
704
|
+
const id = this._getKey();
|
|
705
|
+
if (id === undefined) {
|
|
706
|
+
throw new Error(`[RudderJS ORM] Cannot refresh a ${ctor.name} without a primary key.`);
|
|
707
|
+
}
|
|
708
|
+
const fresh = await ctor.find(id);
|
|
709
|
+
if (!fresh)
|
|
710
|
+
throw new ModelNotFoundError(ctor.name, id);
|
|
711
|
+
for (const k of Object.keys(this)) {
|
|
712
|
+
if (!k.startsWith('_'))
|
|
713
|
+
delete this[k];
|
|
714
|
+
}
|
|
715
|
+
Object.assign(this, fresh);
|
|
716
|
+
return this;
|
|
717
|
+
}
|
|
718
|
+
/**
|
|
719
|
+
* Delete this instance from the database. Soft-deletes when `static softDeletes`
|
|
720
|
+
* is enabled. Routes through the static `delete()` so observers fire.
|
|
721
|
+
*/
|
|
722
|
+
async delete() {
|
|
723
|
+
const ctor = this.constructor;
|
|
724
|
+
const id = this._getKey();
|
|
725
|
+
if (id === undefined) {
|
|
726
|
+
throw new Error(`[RudderJS ORM] Cannot delete a ${ctor.name} without a primary key.`);
|
|
727
|
+
}
|
|
728
|
+
await ctor.delete(id);
|
|
729
|
+
}
|
|
730
|
+
/**
|
|
731
|
+
* Clone this instance into a new, unsaved copy — the primary key and the
|
|
732
|
+
* standard timestamp columns are dropped, and any keys passed in `except`
|
|
733
|
+
* are also stripped. Call `save()` on the returned instance to persist.
|
|
734
|
+
*
|
|
735
|
+
* @example
|
|
736
|
+
* const draft = post.replicate(['publishedAt'])
|
|
737
|
+
* draft.title = 'Copy: ' + draft.title
|
|
738
|
+
* await draft.save()
|
|
739
|
+
*/
|
|
740
|
+
replicate(except = []) {
|
|
741
|
+
const ctor = this.constructor;
|
|
742
|
+
const exclude = new Set([ctor.primaryKey, 'createdAt', 'updatedAt', 'deletedAt', ...except]);
|
|
743
|
+
const Ctor = ctor;
|
|
744
|
+
const clone = new Ctor();
|
|
745
|
+
// Drop class-declared field defaults that fall under `exclude`, otherwise
|
|
746
|
+
// a subclass with `id!: number` ships an `id: undefined` own property.
|
|
747
|
+
// Then drop any other undefined defaults so the clone reads as a freshly-
|
|
748
|
+
// built record from the source instance, not a half-initialized template.
|
|
749
|
+
for (const k of Object.keys(clone)) {
|
|
750
|
+
if (exclude.has(k) || clone[k] === undefined) {
|
|
751
|
+
delete clone[k];
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
for (const [k, v] of Object.entries(this)) {
|
|
755
|
+
if (k.startsWith('_') || exclude.has(k) || v === undefined)
|
|
756
|
+
continue;
|
|
757
|
+
clone[k] = v;
|
|
758
|
+
}
|
|
759
|
+
return clone;
|
|
760
|
+
}
|
|
761
|
+
/**
|
|
762
|
+
* True when `other` represents the same record — same model class (by table)
|
|
763
|
+
* and same primary key.
|
|
764
|
+
*/
|
|
765
|
+
is(other) {
|
|
766
|
+
if (!other || !(other instanceof Model))
|
|
767
|
+
return false;
|
|
768
|
+
const here = this.constructor;
|
|
769
|
+
const there = other.constructor;
|
|
770
|
+
if (here.getTable() !== there.getTable())
|
|
771
|
+
return false;
|
|
772
|
+
const a = this._getKey();
|
|
773
|
+
const b = other._getKey();
|
|
774
|
+
return a !== undefined && a === b;
|
|
775
|
+
}
|
|
776
|
+
/** Inverse of `is()`. */
|
|
777
|
+
isNot(other) {
|
|
778
|
+
return !this.is(other);
|
|
779
|
+
}
|
|
780
|
+
/** True when this instance has been soft-deleted (its `deletedAt` is set). */
|
|
781
|
+
trashed() {
|
|
782
|
+
const v = this['deletedAt'];
|
|
783
|
+
return v !== null && v !== undefined;
|
|
784
|
+
}
|
|
383
785
|
// ── Cast / Mutator helpers ─────────────────────────────
|
|
384
786
|
/** @internal — apply cast setters and attribute mutators to an incoming data payload */
|
|
385
787
|
static _applyMutators(data) {
|
|
@@ -406,7 +808,7 @@ export class Model {
|
|
|
406
808
|
*/
|
|
407
809
|
makeVisible(keys) {
|
|
408
810
|
const k = Array.isArray(keys) ? keys : [keys];
|
|
409
|
-
this
|
|
811
|
+
this.#instanceHidden = (this.#instanceHidden ?? this.constructor.hidden)
|
|
410
812
|
.filter(h => !k.includes(h));
|
|
411
813
|
return this;
|
|
412
814
|
}
|
|
@@ -416,7 +818,7 @@ export class Model {
|
|
|
416
818
|
*/
|
|
417
819
|
makeHidden(keys) {
|
|
418
820
|
const k = Array.isArray(keys) ? keys : [keys];
|
|
419
|
-
this
|
|
821
|
+
this.#instanceHidden = [...(this.#instanceHidden ?? this.constructor.hidden), ...k];
|
|
420
822
|
return this;
|
|
421
823
|
}
|
|
422
824
|
/**
|
|
@@ -424,7 +826,7 @@ export class Model {
|
|
|
424
826
|
* Returns `this` for chaining.
|
|
425
827
|
*/
|
|
426
828
|
setVisible(keys) {
|
|
427
|
-
this
|
|
829
|
+
this.#instanceVisible = keys;
|
|
428
830
|
return this;
|
|
429
831
|
}
|
|
430
832
|
/**
|
|
@@ -432,7 +834,7 @@ export class Model {
|
|
|
432
834
|
* Returns `this` for chaining.
|
|
433
835
|
*/
|
|
434
836
|
setHidden(keys) {
|
|
435
|
-
this
|
|
837
|
+
this.#instanceHidden = keys;
|
|
436
838
|
return this;
|
|
437
839
|
}
|
|
438
840
|
/**
|
|
@@ -440,8 +842,8 @@ export class Model {
|
|
|
440
842
|
* Returns `this` for chaining.
|
|
441
843
|
*/
|
|
442
844
|
mergeVisible(keys) {
|
|
443
|
-
const base = this
|
|
444
|
-
this
|
|
845
|
+
const base = this.#instanceVisible ?? this.constructor.visible;
|
|
846
|
+
this.#instanceVisible = [...base, ...keys];
|
|
445
847
|
return this;
|
|
446
848
|
}
|
|
447
849
|
/**
|
|
@@ -449,16 +851,15 @@ export class Model {
|
|
|
449
851
|
* Returns `this` for chaining.
|
|
450
852
|
*/
|
|
451
853
|
mergeHidden(keys) {
|
|
452
|
-
const base = this
|
|
453
|
-
this
|
|
854
|
+
const base = this.#instanceHidden ?? this.constructor.hidden;
|
|
855
|
+
this.#instanceHidden = [...base, ...keys];
|
|
454
856
|
return this;
|
|
455
857
|
}
|
|
456
858
|
// ── toJSON ─────────────────────────────────────────────
|
|
457
859
|
toJSON() {
|
|
458
860
|
const ctor = this.constructor;
|
|
459
|
-
const rawEntries = Object.entries(this).filter(([k]) => !k.startsWith('_instance'));
|
|
460
861
|
const raw = {};
|
|
461
|
-
for (const [k, v] of
|
|
862
|
+
for (const [k, v] of Object.entries(this)) {
|
|
462
863
|
raw[k] = v;
|
|
463
864
|
}
|
|
464
865
|
const result = {};
|
|
@@ -485,8 +886,8 @@ export class Model {
|
|
|
485
886
|
}
|
|
486
887
|
}
|
|
487
888
|
// Determine effective visible / hidden lists
|
|
488
|
-
const effectiveVisible = this
|
|
489
|
-
const effectiveHidden = this
|
|
889
|
+
const effectiveVisible = this.#instanceVisible ?? ctor.visible;
|
|
890
|
+
const effectiveHidden = this.#instanceHidden ?? ctor.hidden;
|
|
490
891
|
// Apply visible (allowlist) — takes precedence
|
|
491
892
|
if (effectiveVisible.length > 0) {
|
|
492
893
|
const appendKeys = new Set(ctor.appends);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/seeder.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for database seeders. Subclass and implement `run()`.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { Seeder } from '@rudderjs/orm'
|
|
7
|
+
* import { UserSeeder } from './UserSeeder.js'
|
|
8
|
+
* import { PostSeeder } from './PostSeeder.js'
|
|
9
|
+
*
|
|
10
|
+
* export default class DatabaseSeeder extends Seeder {
|
|
11
|
+
* async run(): Promise<void> {
|
|
12
|
+
* await this.call(UserSeeder)
|
|
13
|
+
* await this.call(PostSeeder)
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare abstract class Seeder {
|
|
19
|
+
abstract run(): void | Promise<void>;
|
|
20
|
+
/** Invoke another seeder from this one. Accepts a single class or an array. */
|
|
21
|
+
protected call(SeederClass: SeederConstructor | SeederConstructor[]): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
export type SeederConstructor = new () => Seeder;
|
|
24
|
+
//# sourceMappingURL=seeder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder.d.ts","sourceRoot":"","sources":["../src/seeder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,8BAAsB,MAAM;IAC1B,QAAQ,CAAC,GAAG,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEpC,+EAA+E;cAC/D,IAAI,CAAC,WAAW,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAO1F;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,MAAM,CAAA"}
|
package/dist/seeder.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for database seeders. Subclass and implement `run()`.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { Seeder } from '@rudderjs/orm'
|
|
7
|
+
* import { UserSeeder } from './UserSeeder.js'
|
|
8
|
+
* import { PostSeeder } from './PostSeeder.js'
|
|
9
|
+
*
|
|
10
|
+
* export default class DatabaseSeeder extends Seeder {
|
|
11
|
+
* async run(): Promise<void> {
|
|
12
|
+
* await this.call(UserSeeder)
|
|
13
|
+
* await this.call(PostSeeder)
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export class Seeder {
|
|
19
|
+
/** Invoke another seeder from this one. Accepts a single class or an array. */
|
|
20
|
+
async call(SeederClass) {
|
|
21
|
+
const classes = Array.isArray(SeederClass) ? SeederClass : [SeederClass];
|
|
22
|
+
for (const Cls of classes) {
|
|
23
|
+
const seeder = new Cls();
|
|
24
|
+
await seeder.run();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=seeder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder.js","sourceRoot":"","sources":["../src/seeder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAgB,MAAM;IAG1B,+EAA+E;IACrE,KAAK,CAAC,IAAI,CAAC,WAAoD;QACvE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;QACxE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAA;YACxB,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rudderjs/orm",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"dev": "tsc -p tsconfig.build.json --watch",
|
|
38
38
|
"typecheck": "tsc --noEmit",
|
|
39
39
|
"lint": "eslint src",
|
|
40
|
-
"test": "tsc -p tsconfig.test.json && node --test dist-test/index.test.js dist-test/commands/migrate.test.js; EXIT=$?; rm -rf dist-test; exit $EXIT",
|
|
40
|
+
"test": "tsc -p tsconfig.test.json && node --test dist-test/index.test.js dist-test/seeder.test.js dist-test/commands/migrate.test.js; EXIT=$?; rm -rf dist-test; exit $EXIT",
|
|
41
41
|
"clean": "rm -rf dist"
|
|
42
42
|
}
|
|
43
43
|
}
|