@rudderjs/orm 0.0.6

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Create a value that cycles through `values` each time a new model is made.
3
+ *
4
+ * @example
5
+ * definition() {
6
+ * return {
7
+ * name: sequence(['Alice', 'Bob', 'Carol']),
8
+ * email: sequence(i => `user${i}@example.com`),
9
+ * }
10
+ * }
11
+ */
12
+ export declare function sequence<T>(valuesOrFn: T[] | ((index: number) => T)): () => T;
13
+ type ModelCreateFn<TAttrs extends Record<string, unknown>> = (data: Partial<TAttrs>) => Promise<TAttrs>;
14
+ type StateFn<TAttrs extends Record<string, unknown>> = (attrs: TAttrs) => Partial<TAttrs> | Promise<Partial<TAttrs>>;
15
+ /**
16
+ * Base class for model factories. Extend and implement `definition()` and
17
+ * set `modelClass` to the Model you want to create.
18
+ *
19
+ * @example
20
+ * class UserFactory extends ModelFactory<{ name: string; email: string; role: string }> {
21
+ * protected modelClass = User
22
+ *
23
+ * definition() {
24
+ * return {
25
+ * name: 'Alice',
26
+ * email: sequence(i => `alice${i}@example.com`)(),
27
+ * role: 'user',
28
+ * }
29
+ * }
30
+ *
31
+ * protected states() {
32
+ * return {
33
+ * admin: () => ({ role: 'admin' }),
34
+ * }
35
+ * }
36
+ * }
37
+ *
38
+ * // Usage:
39
+ * const user = await UserFactory.new().create()
40
+ * const admin = await UserFactory.new().state('admin').create()
41
+ * const users = await UserFactory.new().create(3)
42
+ * const dtos = await UserFactory.new().make(5)
43
+ */
44
+ export declare abstract class ModelFactory<TAttrs extends Record<string, unknown>> {
45
+ /** The Model class used for `create()`. */
46
+ protected abstract readonly modelClass: {
47
+ create: ModelCreateFn<TAttrs>;
48
+ };
49
+ /** The base attribute definition. May return dynamic values or callables. */
50
+ abstract definition(): TAttrs | Promise<TAttrs>;
51
+ /** Named states — override to add. */
52
+ protected states(): Record<string, StateFn<TAttrs>>;
53
+ private _stateOverrides;
54
+ private _clone;
55
+ /** Create a new factory instance. */
56
+ static new<T extends ModelFactory<Record<string, unknown>>>(this: new () => T): T;
57
+ /**
58
+ * Apply a named state defined in `states()`.
59
+ *
60
+ * @example
61
+ * UserFactory.new().state('admin').create()
62
+ */
63
+ state(name: string): this;
64
+ /**
65
+ * Apply an inline state override.
66
+ *
67
+ * @example
68
+ * UserFactory.new().with(() => ({ role: 'moderator' })).create()
69
+ */
70
+ with(fn: StateFn<TAttrs>): this;
71
+ private _build;
72
+ /** Build model attribute(s) without saving to the database. */
73
+ make(overrides?: Partial<TAttrs>): Promise<TAttrs>;
74
+ make(count: number, overrides?: Partial<TAttrs>): Promise<TAttrs[]>;
75
+ /** Build and persist model(s) to the database via `Model.create()`. */
76
+ create(overrides?: Partial<TAttrs>): Promise<TAttrs>;
77
+ create(count: number, overrides?: Partial<TAttrs>): Promise<TAttrs[]>;
78
+ }
79
+ export {};
80
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAS7E;AAID,KAAK,aAAa,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAC3D,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,KAClB,OAAO,CAAC,MAAM,CAAC,CAAA;AAEpB,KAAK,OAAO,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACjD,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,8BAAsB,YAAY,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,2CAA2C;IAC3C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE;QAAE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;KAAE,CAAA;IAEzE,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE/C,sCAAsC;IACtC,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAInD,OAAO,CAAC,eAAe,CAAwB;IAE/C,OAAO,CAAC,MAAM;IAMd,qCAAqC;IACrC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxD,IAAI,EAAE,UAAU,CAAC,GAChB,CAAC;IAIJ;;;;;OAKG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQzB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;YAQjB,MAAM;IAyBpB,+DAA+D;IAC/D,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAcnE,uEAAuE;IACvE,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACpD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAatE"}
@@ -0,0 +1,129 @@
1
+ // ─── sequence() helper ──────────────────────────────────────
2
+ /**
3
+ * Create a value that cycles through `values` each time a new model is made.
4
+ *
5
+ * @example
6
+ * definition() {
7
+ * return {
8
+ * name: sequence(['Alice', 'Bob', 'Carol']),
9
+ * email: sequence(i => `user${i}@example.com`),
10
+ * }
11
+ * }
12
+ */
13
+ export function sequence(valuesOrFn) {
14
+ let i = 0;
15
+ return () => {
16
+ const val = Array.isArray(valuesOrFn)
17
+ ? valuesOrFn[i % valuesOrFn.length]
18
+ : valuesOrFn(i);
19
+ i++;
20
+ return val;
21
+ };
22
+ }
23
+ /**
24
+ * Base class for model factories. Extend and implement `definition()` and
25
+ * set `modelClass` to the Model you want to create.
26
+ *
27
+ * @example
28
+ * class UserFactory extends ModelFactory<{ name: string; email: string; role: string }> {
29
+ * protected modelClass = User
30
+ *
31
+ * definition() {
32
+ * return {
33
+ * name: 'Alice',
34
+ * email: sequence(i => `alice${i}@example.com`)(),
35
+ * role: 'user',
36
+ * }
37
+ * }
38
+ *
39
+ * protected states() {
40
+ * return {
41
+ * admin: () => ({ role: 'admin' }),
42
+ * }
43
+ * }
44
+ * }
45
+ *
46
+ * // Usage:
47
+ * const user = await UserFactory.new().create()
48
+ * const admin = await UserFactory.new().state('admin').create()
49
+ * const users = await UserFactory.new().create(3)
50
+ * const dtos = await UserFactory.new().make(5)
51
+ */
52
+ export class ModelFactory {
53
+ /** Named states — override to add. */
54
+ states() {
55
+ return {};
56
+ }
57
+ _stateOverrides = [];
58
+ _clone() {
59
+ const c = Object.create(this);
60
+ c._stateOverrides = [...this._stateOverrides];
61
+ return c;
62
+ }
63
+ /** Create a new factory instance. */
64
+ static new() {
65
+ return new this();
66
+ }
67
+ /**
68
+ * Apply a named state defined in `states()`.
69
+ *
70
+ * @example
71
+ * UserFactory.new().state('admin').create()
72
+ */
73
+ state(name) {
74
+ const c = this._clone();
75
+ const fn = this.states()[name];
76
+ if (!fn)
77
+ throw new Error(`[RudderJS] Factory state "${name}" is not defined on ${this.constructor.name}.`);
78
+ c._stateOverrides.push(fn);
79
+ return c;
80
+ }
81
+ /**
82
+ * Apply an inline state override.
83
+ *
84
+ * @example
85
+ * UserFactory.new().with(() => ({ role: 'moderator' })).create()
86
+ */
87
+ with(fn) {
88
+ const c = this._clone();
89
+ c._stateOverrides.push(fn);
90
+ return c;
91
+ }
92
+ // ── Internal build ──────────────────────────────────
93
+ async _build(overrides) {
94
+ // Resolve definition (supports sequence() callables inside it)
95
+ const raw = await this.definition();
96
+ // Resolve any callable values (from sequence())
97
+ const resolved = {};
98
+ for (const [k, v] of Object.entries(raw)) {
99
+ resolved[k] = typeof v === 'function' ? v() : v;
100
+ }
101
+ let attrs = resolved;
102
+ // Apply state overrides
103
+ for (const stateFn of this._stateOverrides) {
104
+ const patch = await stateFn(attrs);
105
+ attrs = { ...attrs, ...patch };
106
+ }
107
+ // Apply inline overrides
108
+ if (overrides)
109
+ attrs = { ...attrs, ...overrides };
110
+ return attrs;
111
+ }
112
+ async make(countOrOverrides, overrides) {
113
+ if (typeof countOrOverrides === 'number') {
114
+ const n = countOrOverrides;
115
+ return Promise.all(Array.from({ length: n }, () => this._build(overrides)));
116
+ }
117
+ return this._build(countOrOverrides);
118
+ }
119
+ async create(countOrOverrides, overrides) {
120
+ if (typeof countOrOverrides === 'number') {
121
+ const n = countOrOverrides;
122
+ const attrs = await Promise.all(Array.from({ length: n }, () => this._build(overrides)));
123
+ return Promise.all(attrs.map(a => this.modelClass.create(a)));
124
+ }
125
+ const attrs = await this._build(countOrOverrides);
126
+ return this.modelClass.create(attrs);
127
+ }
128
+ }
129
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,195 @@
1
+ import type { QueryBuilder, OrmAdapter } from '@rudderjs/contracts';
2
+ import { type CastDefinition } from './cast.js';
3
+ import { type Attribute } from './attribute.js';
4
+ export type { QueryBuilder, OrmAdapter, OrmAdapterProvider, PaginatedResult, WhereOperator, WhereClause, OrderClause, QueryState } from '@rudderjs/contracts';
5
+ export type { CastDefinition, CastUsing, BuiltInCast } from './cast.js';
6
+ export { Attribute } from './attribute.js';
7
+ export { JsonResource, ResourceCollection } from './resource.js';
8
+ export { ModelCollection } from './collection.js';
9
+ export { ModelFactory, sequence } from './factory.js';
10
+ export declare class ModelRegistry {
11
+ private static adapter;
12
+ static set(adapter: OrmAdapter): void;
13
+ static get(): OrmAdapter | null;
14
+ static getAdapter(): OrmAdapter;
15
+ static reset(): void;
16
+ }
17
+ export type ModelEvent = 'creating' | 'created' | 'updating' | 'updated' | 'deleting' | 'deleted' | 'restoring' | 'restored';
18
+ export interface ModelObserver {
19
+ creating?(data: Record<string, unknown>): Record<string, unknown> | void | Promise<Record<string, unknown> | void>;
20
+ created?(record: Record<string, unknown>): void | Promise<void>;
21
+ updating?(id: string | number, data: Record<string, unknown>): Record<string, unknown> | false | void | Promise<Record<string, unknown> | false | void>;
22
+ updated?(record: Record<string, unknown>): void | Promise<void>;
23
+ deleting?(id: string | number): false | void | Promise<false | void>;
24
+ deleted?(id: string | number): void | Promise<void>;
25
+ restoring?(id: string | number): false | void | Promise<false | void>;
26
+ restored?(record: Record<string, unknown>): void | Promise<void>;
27
+ }
28
+ type ScopeFn = (query: QueryBuilder<any>, ...args: any[]) => QueryBuilder<any>;
29
+ /**
30
+ * Mark an instance property as hidden from JSON output.
31
+ * Equivalent to adding the field name to `static hidden`.
32
+ *
33
+ * @example
34
+ * class User extends Model {
35
+ * @Hidden password = ''
36
+ * }
37
+ */
38
+ export declare function Hidden(target: object, key: string | symbol): void;
39
+ /**
40
+ * Restrict JSON output to only visible properties.
41
+ * Equivalent to setting `static visible`.
42
+ * Applied per-field — all `@Visible` fields form the allowlist.
43
+ *
44
+ * @example
45
+ * class User extends Model {
46
+ * @Visible id = 0
47
+ * @Visible name = ''
48
+ * password = '' // hidden because visible list is set
49
+ * }
50
+ */
51
+ export declare function Visible(target: object, key: string | symbol): void;
52
+ /**
53
+ * Always include the named accessor in JSON output.
54
+ * The property must also be defined in `static attributes` with a getter.
55
+ *
56
+ * @example
57
+ * class User extends Model {
58
+ * @Appends fullName = ''
59
+ * static attributes = {
60
+ * fullName: Attribute.make({ get: (_, a) => `${a['firstName']} ${a['lastName']}` }),
61
+ * }
62
+ * }
63
+ */
64
+ export declare function Appends(target: object, key: string | symbol): void;
65
+ /**
66
+ * Apply a cast to an instance property.
67
+ * Equivalent to adding the field to `static casts`.
68
+ *
69
+ * @example
70
+ * class User extends Model {
71
+ * @Cast('boolean') isAdmin = false
72
+ * @Cast('date') createdAt = new Date()
73
+ * @Cast(MoneyCast) balance = 0
74
+ * }
75
+ */
76
+ export declare function Cast(type: CastDefinition): (target: object, key: string | symbol) => void;
77
+ export declare abstract class Model {
78
+ /** The table name — defaults to lowercase class name + 's' */
79
+ static table: string;
80
+ /** Primary key column */
81
+ static primaryKey: string;
82
+ /** Columns to hide from JSON output */
83
+ static hidden: string[];
84
+ /**
85
+ * Columns to exclusively include in JSON output.
86
+ * When set, only these columns (plus appends) appear in toJSON().
87
+ * Takes precedence over `hidden`.
88
+ */
89
+ static visible: string[];
90
+ /**
91
+ * Accessor names (defined in `attributes`) to always append to JSON output.
92
+ * The accessor must have a `get` function.
93
+ */
94
+ static appends: string[];
95
+ /**
96
+ * Attribute casts — map column names to their cast types.
97
+ * Applied both when reading (toJSON) and writing (create/update).
98
+ *
99
+ * @example
100
+ * static casts = {
101
+ * isAdmin: 'boolean',
102
+ * createdAt: 'date',
103
+ * settings: 'json',
104
+ * balance: MoneyCast, // custom cast class
105
+ * } as const satisfies Record<string, CastDefinition>
106
+ */
107
+ static casts: Record<string, CastDefinition>;
108
+ /**
109
+ * Accessors and mutators using `Attribute.make({ get, set })`.
110
+ *
111
+ * @example
112
+ * static attributes = {
113
+ * firstName: Attribute.make({ get: v => String(v).charAt(0).toUpperCase() + String(v).slice(1) }),
114
+ * fullName: Attribute.make({ get: (_, attrs) => `${attrs['firstName']} ${attrs['lastName']}` }),
115
+ * password: Attribute.make({ set: async v => await bcrypt.hash(String(v), 10) }),
116
+ * }
117
+ */
118
+ static attributes: Record<string, Attribute>;
119
+ /** Columns that are mass-assignable */
120
+ static fillable: string[];
121
+ /**
122
+ * Enable soft deletes for this model. When true:
123
+ * - `delete()` sets `deletedAt` instead of removing the record
124
+ * - Queries automatically exclude records where `deletedAt` is not null
125
+ * - Use `withTrashed()` to include soft-deleted records
126
+ * - Use `onlyTrashed()` to return only soft-deleted records
127
+ * - Use `restore()` to un-delete a record
128
+ * - Use `forceDelete()` to permanently remove a record
129
+ */
130
+ static softDeletes: boolean;
131
+ /** @internal */
132
+ private _instanceHidden?;
133
+ /** @internal */
134
+ private _instanceVisible?;
135
+ static globalScopes: Record<string, ScopeFn>;
136
+ static scopes: Record<string, ScopeFn>;
137
+ /** @internal */
138
+ private static _observers;
139
+ /** @internal */
140
+ private static _listeners;
141
+ static observe(ObserverClass: new () => ModelObserver): void;
142
+ static on(event: ModelEvent, handler: (...args: any[]) => any): void;
143
+ private static _fireEvent;
144
+ static clearObservers(): void;
145
+ static getTable(this: typeof Model): string;
146
+ static query<T extends typeof Model>(this: T): QueryBuilder<InstanceType<T>> & {
147
+ scope(name: string, ...args: unknown[]): QueryBuilder<InstanceType<T>>;
148
+ withoutGlobalScope(name: string): QueryBuilder<InstanceType<T>>;
149
+ };
150
+ private static _q;
151
+ static find<T extends typeof Model>(this: T, id: number | string): Promise<InstanceType<T> | null>;
152
+ static all<T extends typeof Model>(this: T): Promise<InstanceType<T>[]>;
153
+ static where<T extends typeof Model>(this: T, column: string, value: unknown): QueryBuilder<InstanceType<T>>;
154
+ static create<T extends typeof Model>(this: T, data: Partial<InstanceType<T>>): Promise<InstanceType<T>>;
155
+ static with<T extends typeof Model>(this: T, ...relations: string[]): QueryBuilder<InstanceType<T>>;
156
+ static update<T extends typeof Model>(this: T, id: number | string, data: Partial<InstanceType<T>>): Promise<InstanceType<T>>;
157
+ static delete<T extends typeof Model>(this: T, id: number | string): Promise<void>;
158
+ static restore<T extends typeof Model>(this: T, id: number | string): Promise<InstanceType<T>>;
159
+ static forceDelete<T extends typeof Model>(this: T, id: number | string): Promise<void>;
160
+ /** @internal — apply cast setters and attribute mutators to an incoming data payload */
161
+ private static _applyMutators;
162
+ /**
163
+ * Make the given keys visible for this instance's JSON output.
164
+ * Removes them from the instance's hidden list and adds to the visible override.
165
+ * Returns `this` for chaining.
166
+ */
167
+ makeVisible(keys: string | string[]): this;
168
+ /**
169
+ * Hide the given keys from this instance's JSON output.
170
+ * Returns `this` for chaining.
171
+ */
172
+ makeHidden(keys: string | string[]): this;
173
+ /**
174
+ * Override the visible list for this instance only.
175
+ * Returns `this` for chaining.
176
+ */
177
+ setVisible(keys: string[]): this;
178
+ /**
179
+ * Override the hidden list for this instance only.
180
+ * Returns `this` for chaining.
181
+ */
182
+ setHidden(keys: string[]): this;
183
+ /**
184
+ * Add keys to the visible list for this instance.
185
+ * Returns `this` for chaining.
186
+ */
187
+ mergeVisible(keys: string[]): this;
188
+ /**
189
+ * Add keys to the hidden list for this instance.
190
+ * Returns `this` for chaining.
191
+ */
192
+ mergeHidden(keys: string[]): this;
193
+ toJSON(): Record<string, unknown>;
194
+ }
195
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}