@stacksjs/orm 0.70.369 → 0.70.371
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/batch-loader.d.ts +5 -1
- package/dist/define-model.d.ts +52 -15
- package/dist/index.d.ts +3 -0
- package/dist/index.js +13 -13
- package/dist/model-types.d.ts +113 -20
- package/dist/subquery.d.ts +6 -6
- package/dist/transaction.d.ts +2 -2
- package/package.json +7 -6
package/dist/batch-loader.d.ts
CHANGED
|
@@ -16,4 +16,8 @@
|
|
|
16
16
|
* ```
|
|
17
17
|
*/
|
|
18
18
|
// eslint-disable-next-line pickier/no-unused-vars
|
|
19
|
-
export declare function batchLoad<
|
|
19
|
+
export declare function batchLoad<TKey = number | string, TValue = Record<string, unknown>>(model: {
|
|
20
|
+
name?: string
|
|
21
|
+
findMany?: (ids: TKey[]) => Promise<TValue[]>
|
|
22
|
+
find?: (id: TKey) => Promise<TValue | undefined>
|
|
23
|
+
}, key: TKey): Promise<TValue | undefined>;
|
package/dist/define-model.d.ts
CHANGED
|
@@ -6,7 +6,10 @@ import { createSoftDeleteMethods } from './traits/soft-deletes';
|
|
|
6
6
|
import { createTaggableMethods } from './traits/taggable';
|
|
7
7
|
import { createTwoFactorMethods } from './traits/two-factor';
|
|
8
8
|
import { type OrmModelDefinition as BQBModelDefinition, type OrmModelStatic } from '@stacksjs/query-builder';
|
|
9
|
+
import type { ApiMiddleware } from '@stacksjs/types';
|
|
10
|
+
import type { Faker } from '@stacksjs/faker';
|
|
9
11
|
import type { InferRelationNames } from '@stacksjs/query-builder';
|
|
12
|
+
import type { Validator } from '@stacksjs/validation';
|
|
10
13
|
// Re-export types from bun-query-builder for convenience
|
|
11
14
|
export type { ModelDefinition, InferRelationNames, ModelAttributes, InferModelAttributes, SystemFields, ColumnName, AttributeKeys, FillableKeys, HiddenKeys, ModelInstance, ModelQueryBuilder } from '@stacksjs/query-builder';
|
|
12
15
|
/**
|
|
@@ -95,18 +98,12 @@ export declare interface StacksModelDefinition extends Omit<BQBModelDefinition,
|
|
|
95
98
|
useApi?: boolean | {
|
|
96
99
|
readonly uri?: string
|
|
97
100
|
readonly routes?: readonly string[]
|
|
98
|
-
readonly middleware?:
|
|
101
|
+
readonly middleware?: ApiMiddleware
|
|
99
102
|
}
|
|
100
103
|
} & Record<string, unknown>
|
|
101
104
|
indexes?: Array<{ name: string, columns: string[], unique?: boolean, where?: string }>
|
|
102
105
|
casts?: Record<string, CastType | CasterInterface>
|
|
103
|
-
attributes:
|
|
104
|
-
[key: string]: {
|
|
105
|
-
factory?: (faker: any) => any
|
|
106
|
-
[key: string]: any
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
[key: string]: any
|
|
106
|
+
attributes: Record<string, StacksModelAttribute>
|
|
110
107
|
}
|
|
111
108
|
/**
|
|
112
109
|
* Scout-style search index sync when `traits.useSearch` is set.
|
|
@@ -164,7 +161,46 @@ export declare interface TraitMethods {
|
|
|
164
161
|
* the render layer.
|
|
165
162
|
*/
|
|
166
163
|
export type CastType = 'string' | 'number' | 'boolean' | 'json' | 'datetime' | 'date' | 'array' | 'integer' | 'float';
|
|
164
|
+
declare type BQBModelAttribute = BQBModelDefinition['attributes'][string];
|
|
165
|
+
export type StacksModelAttribute = Omit<BQBModelAttribute, 'factory'> & {
|
|
166
|
+
factory?: (faker: Faker) => unknown
|
|
167
|
+
}
|
|
167
168
|
declare type ModelDefinition = StacksModelDefinition;
|
|
169
|
+
declare type ValidationRuleOf<TAttribute> = TAttribute extends { validation: { rule: infer TRule } } ? TRule : never;
|
|
170
|
+
declare type ValidationInferenceRule<TRule> = TRule extends Validator<number> ? 'number' : TRule;
|
|
171
|
+
declare type BQBFaker = Parameters<NonNullable<BQBModelAttribute['factory']>>[0];
|
|
172
|
+
declare type FactoryReturnOf<TAttribute> = TAttribute extends { factory: (...args: never[]) => infer TResult } ? TResult : never;
|
|
173
|
+
declare type DefaultTypeToken<TAttribute> = TAttribute extends { default: infer TDefault }
|
|
174
|
+
? TDefault extends string ? 'string'
|
|
175
|
+
: TDefault extends number ? 'number'
|
|
176
|
+
: TDefault extends boolean ? 'boolean'
|
|
177
|
+
: TDefault extends Date ? 'date'
|
|
178
|
+
: TDefault extends Record<string, unknown> ? 'json'
|
|
179
|
+
: never
|
|
180
|
+
: never;
|
|
181
|
+
declare type InferenceHint<TAttribute> = TAttribute extends { type: unknown } | { factory: (...args: never[]) => unknown }
|
|
182
|
+
? object
|
|
183
|
+
: [ValidationRuleOf<TAttribute>] extends [never]
|
|
184
|
+
? [DefaultTypeToken<TAttribute>] extends [never]
|
|
185
|
+
? object
|
|
186
|
+
: { type: DefaultTypeToken<TAttribute> }
|
|
187
|
+
: { type: ValidationInferenceRule<ValidationRuleOf<TAttribute>> }
|
|
188
|
+
declare type QueryAttribute<TAttribute> = Omit<TAttribute, 'factory'>
|
|
189
|
+
& InferenceHint<TAttribute>
|
|
190
|
+
& ([FactoryReturnOf<TAttribute>] extends [never]
|
|
191
|
+
? object
|
|
192
|
+
: { factory: (faker: BQBFaker) => FactoryReturnOf<TAttribute> });
|
|
193
|
+
declare type QueryTraits<TDef extends ModelDefinition> = TDef extends { traits: infer TTraits }
|
|
194
|
+
? { traits: TTraits & NonNullable<BQBModelDefinition['traits']> }
|
|
195
|
+
: { traits?: BQBModelDefinition['traits'] }
|
|
196
|
+
declare type QueryDefinition<TDef extends ModelDefinition> = TDef
|
|
197
|
+
& {
|
|
198
|
+
attributes: { [TKey in keyof TDef['attributes']]: QueryAttribute<TDef['attributes'][TKey]> }
|
|
199
|
+
}
|
|
200
|
+
& QueryTraits<TDef>;
|
|
201
|
+
declare type QueryModel<TDef extends ModelDefinition> = OrmModelStatic<QueryDefinition<TDef>>;
|
|
202
|
+
declare type ModelWriteData<TDef extends ModelDefinition> = Parameters<QueryModel<TDef>['create']>[0];
|
|
203
|
+
declare type ModelForceWriteData<TDef extends ModelDefinition> = Parameters<ReturnType<QueryModel<TDef>['make']>['forceFill']>[0];
|
|
168
204
|
/**
|
|
169
205
|
* Stacks-enhanced model definition.
|
|
170
206
|
*
|
|
@@ -198,22 +234,23 @@ declare type ModelDefinition = StacksModelDefinition;
|
|
|
198
234
|
* name: 'Post',
|
|
199
235
|
* table: 'posts',
|
|
200
236
|
* attributes: {
|
|
201
|
-
* title: {
|
|
202
|
-
* views: {
|
|
237
|
+
* title: { fillable: true, validation: { rule: schema.string() } },
|
|
238
|
+
* views: { fillable: true, validation: { rule: schema.number() } },
|
|
203
239
|
* },
|
|
204
240
|
* belongsTo: ['Author'],
|
|
205
241
|
* hasMany: ['Tag', 'Category', 'Comment'],
|
|
206
242
|
* traits: { useTimestamps: true, useUuid: true },
|
|
207
|
-
* }
|
|
243
|
+
* })
|
|
208
244
|
*
|
|
209
245
|
* // Result: Post.where('title', 'test') — 'title' narrowed to valid columns
|
|
210
246
|
* // Result: Post.with('author') — 'author' narrowed to valid relations
|
|
211
247
|
* ```
|
|
212
248
|
*/
|
|
213
|
-
export type StacksModelStatic<TDef extends ModelDefinition> =
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
249
|
+
export type StacksModelStatic<TDef extends ModelDefinition> = QueryModel<TDef> & TDef & TraitMethods & {
|
|
250
|
+
readonly [MODEL_DEFINITION]: TDef
|
|
251
|
+
update: (id: number | string, data: ModelWriteData<TDef>) => ReturnType<QueryModel<TDef>['find']>
|
|
252
|
+
forceUpdate: (id: number | string, data: ModelForceWriteData<TDef>) => ReturnType<QueryModel<TDef>['find']>
|
|
253
|
+
forceCreate: (data: ModelForceWriteData<TDef>) => ReturnType<QueryModel<TDef>['create']>
|
|
217
254
|
delete: (id: number | string) => Promise<boolean>
|
|
218
255
|
withoutEvents: <T>(fn: () => T | Promise<T>) => Promise<T>
|
|
219
256
|
/** Run `fn` with declared `validation.rule`s suppressed (bulk imports, backfills). */
|
package/dist/index.d.ts
CHANGED
|
@@ -69,6 +69,9 @@ export declare const DriverPing: ReturnType<typeof lazyModel<typeof import('../.
|
|
|
69
69
|
export declare const CampaignSend: ReturnType<typeof lazyModel<typeof import('../../../defaults/app/Models/CampaignSend').default>>;
|
|
70
70
|
export declare const EmailList: ReturnType<typeof lazyModel<typeof import('../../../defaults/app/Models/EmailList').default>>;
|
|
71
71
|
export declare const EmailListSubscriber: ReturnType<typeof lazyModel<typeof import('../../../defaults/app/Models/EmailListSubscriber').default>>;
|
|
72
|
+
export declare const EmailIdempotency: ReturnType<typeof lazyModel<typeof import('../../../defaults/app/Models/EmailIdempotency').default>>;
|
|
73
|
+
export declare const EmailSuppression: ReturnType<typeof lazyModel<typeof import('../../../defaults/app/Models/EmailSuppression').default>>;
|
|
74
|
+
export declare const EmailWebhookEvent: ReturnType<typeof lazyModel<typeof import('../../../defaults/app/Models/EmailWebhookEvent').default>>;
|
|
72
75
|
export declare const ErrorModel: ReturnType<typeof lazyModel<typeof import('../../../defaults/app/Models/Error').default>>;
|
|
73
76
|
export declare const GiftCard: ReturnType<typeof lazyModel<typeof import('../../../defaults/app/Models/commerce/GiftCard').default>>;
|
|
74
77
|
export declare const Label: ReturnType<typeof lazyModel<typeof import('../../../defaults/app/Models/Label').default>>;
|