@farming-labs/orm 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -168,37 +168,79 @@ type FindManyArgs<TSchema extends SchemaDefinition<any>, TModelName extends Mode
168
168
  skip?: number;
169
169
  };
170
170
  type FindFirstArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = FindManyArgs<TSchema, TModelName, TSelect>;
171
+ type FindOneArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = FindFirstArgs<TSchema, TModelName, TSelect>;
172
+ type FindUniqueArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = {
173
+ where: Where<ScalarRecord<TSchema, TModelName>>;
174
+ select?: TSelect;
175
+ };
171
176
  type CreateArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = {
172
177
  data: Partial<ScalarRecord<TSchema, TModelName>>;
173
178
  select?: TSelect;
174
179
  };
180
+ type CreateManyArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = {
181
+ data: Array<Partial<ScalarRecord<TSchema, TModelName>>>;
182
+ select?: TSelect;
183
+ };
175
184
  type UpdateArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = {
176
185
  where: Where<ScalarRecord<TSchema, TModelName>>;
177
186
  data: Partial<ScalarRecord<TSchema, TModelName>>;
178
187
  select?: TSelect;
179
188
  };
189
+ type UpdateManyArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>> = {
190
+ where: Where<ScalarRecord<TSchema, TModelName>>;
191
+ data: Partial<ScalarRecord<TSchema, TModelName>>;
192
+ };
180
193
  type DeleteArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>> = {
181
194
  where: Where<ScalarRecord<TSchema, TModelName>>;
182
195
  };
196
+ type DeleteManyArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>> = {
197
+ where: Where<ScalarRecord<TSchema, TModelName>>;
198
+ };
199
+ type CountArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>> = {
200
+ where?: Where<ScalarRecord<TSchema, TModelName>>;
201
+ };
202
+ type UpsertArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = {
203
+ where: Where<ScalarRecord<TSchema, TModelName>>;
204
+ create: Partial<ScalarRecord<TSchema, TModelName>>;
205
+ update: Partial<ScalarRecord<TSchema, TModelName>>;
206
+ select?: TSelect;
207
+ };
183
208
  interface OrmDriver<TSchema extends SchemaDefinition<any>> {
184
209
  findMany<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: FindManyArgs<TSchema, TModelName, TSelect>): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>>;
185
210
  findFirst<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: FindFirstArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
211
+ findUnique<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: FindUniqueArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
212
+ count<TModelName extends ModelName<TSchema>>(schema: TSchema, model: TModelName, args?: CountArgs<TSchema, TModelName>): Promise<number>;
186
213
  create<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: CreateArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect>>;
214
+ createMany<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: CreateManyArgs<TSchema, TModelName, TSelect>): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>>;
187
215
  update<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: UpdateArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
216
+ updateMany<TModelName extends ModelName<TSchema>>(schema: TSchema, model: TModelName, args: UpdateManyArgs<TSchema, TModelName>): Promise<number>;
217
+ upsert<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: UpsertArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect>>;
188
218
  delete<TModelName extends ModelName<TSchema>>(schema: TSchema, model: TModelName, args: DeleteArgs<TSchema, TModelName>): Promise<number>;
219
+ deleteMany<TModelName extends ModelName<TSchema>>(schema: TSchema, model: TModelName, args: DeleteManyArgs<TSchema, TModelName>): Promise<number>;
189
220
  transaction<TResult>(schema: TSchema, run: (driver: OrmDriver<TSchema>) => Promise<TResult>): Promise<TResult>;
190
221
  }
191
222
  type ModelClient<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>> = {
192
223
  findMany<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args?: FindManyArgs<TSchema, TModelName, TSelect>): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>>;
224
+ findOne<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args?: FindOneArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
193
225
  findFirst<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args?: FindFirstArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
226
+ findUnique<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args: FindUniqueArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
227
+ count(args?: CountArgs<TSchema, TModelName>): Promise<number>;
194
228
  create<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args: CreateArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect>>;
229
+ createMany<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args: CreateManyArgs<TSchema, TModelName, TSelect>): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>>;
195
230
  update<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args: UpdateArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
231
+ updateMany(args: UpdateManyArgs<TSchema, TModelName>): Promise<number>;
232
+ upsert<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args: UpsertArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect>>;
196
233
  delete(args: DeleteArgs<TSchema, TModelName>): Promise<number>;
234
+ deleteMany(args: DeleteManyArgs<TSchema, TModelName>): Promise<number>;
197
235
  };
236
+ type BatchTask<TSchema extends SchemaDefinition<any>, TResult> = (tx: OrmClient<TSchema>) => Promise<TResult>;
198
237
  type OrmClient<TSchema extends SchemaDefinition<any>> = {
199
238
  [K in ModelName<TSchema>]: ModelClient<TSchema, K>;
200
239
  } & {
201
240
  transaction<TResult>(run: (tx: OrmClient<TSchema>) => Promise<TResult>): Promise<TResult>;
241
+ batch<const TResult extends readonly unknown[]>(tasks: {
242
+ [K in keyof TResult]: BatchTask<TSchema, TResult[K]>;
243
+ }): Promise<TResult>;
202
244
  };
203
245
  declare function createOrm<TSchema extends SchemaDefinition<any>>(options: {
204
246
  schema: TSchema;
@@ -251,4 +293,4 @@ declare function createManifest<TSchema extends SchemaDefinition<Record<string,
251
293
  type MemoryStore<TSchema extends SchemaDefinition<any>> = Partial<Record<ModelName<TSchema>, Array<Record<string, unknown>>>>;
252
294
  declare function createMemoryDriver<TSchema extends SchemaDefinition<any>>(seed?: MemoryStore<TSchema>): OrmDriver<TSchema>;
253
295
 
254
- export { type AnyFieldBuilder, type AnyModelDefinition, type AnyRelation, type CreateArgs, type DeleteArgs, type DrizzleGenerationOptions, FieldBuilder, type FieldConfig, type FieldMap, type FieldOutput, type FieldReference, type FindFirstArgs, type FindManyArgs, type ManifestField, type ManifestModel, type ModelClient, type ModelDefinition, type ModelFields, type ModelForName, type ModelName, type ModelRelations, type OrmClient, type OrmDriver, type PrismaGenerationOptions, type RelationDefinition, type RelationForName, type RelationKind, type RelationMap, type RelationName, type RelationTarget, type ScalarKind, type ScalarRecord, type ScalarValue, type SchemaDefinition, type SchemaManifest, type SchemaModels, type SelectShape, type SelectedRecord, type SqlGenerationOptions, type UpdateArgs, type Where, belongsTo, boolean, createManifest, createMemoryDriver, createOrm, datetime, defineSchema, hasMany, hasOne, id, manyToMany, model, renderDrizzleSchema, renderPrismaSchema, renderSafeSql, replaceGeneratedBlock, string };
296
+ export { type AnyFieldBuilder, type AnyModelDefinition, type AnyRelation, type BatchTask, type CountArgs, type CreateArgs, type CreateManyArgs, type DeleteArgs, type DeleteManyArgs, type DrizzleGenerationOptions, FieldBuilder, type FieldConfig, type FieldMap, type FieldOutput, type FieldReference, type FindFirstArgs, type FindManyArgs, type FindOneArgs, type FindUniqueArgs, type ManifestField, type ManifestModel, type ModelClient, type ModelDefinition, type ModelFields, type ModelForName, type ModelName, type ModelRelations, type OrmClient, type OrmDriver, type PrismaGenerationOptions, type RelationDefinition, type RelationForName, type RelationKind, type RelationMap, type RelationName, type RelationTarget, type ScalarKind, type ScalarRecord, type ScalarValue, type SchemaDefinition, type SchemaManifest, type SchemaModels, type SelectShape, type SelectedRecord, type SqlGenerationOptions, type UpdateArgs, type UpdateManyArgs, type UpsertArgs, type Where, belongsTo, boolean, createManifest, createMemoryDriver, createOrm, datetime, defineSchema, hasMany, hasOne, id, manyToMany, model, renderDrizzleSchema, renderPrismaSchema, renderSafeSql, replaceGeneratedBlock, string };
package/dist/index.d.ts CHANGED
@@ -168,37 +168,79 @@ type FindManyArgs<TSchema extends SchemaDefinition<any>, TModelName extends Mode
168
168
  skip?: number;
169
169
  };
170
170
  type FindFirstArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = FindManyArgs<TSchema, TModelName, TSelect>;
171
+ type FindOneArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = FindFirstArgs<TSchema, TModelName, TSelect>;
172
+ type FindUniqueArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = {
173
+ where: Where<ScalarRecord<TSchema, TModelName>>;
174
+ select?: TSelect;
175
+ };
171
176
  type CreateArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = {
172
177
  data: Partial<ScalarRecord<TSchema, TModelName>>;
173
178
  select?: TSelect;
174
179
  };
180
+ type CreateManyArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = {
181
+ data: Array<Partial<ScalarRecord<TSchema, TModelName>>>;
182
+ select?: TSelect;
183
+ };
175
184
  type UpdateArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = {
176
185
  where: Where<ScalarRecord<TSchema, TModelName>>;
177
186
  data: Partial<ScalarRecord<TSchema, TModelName>>;
178
187
  select?: TSelect;
179
188
  };
189
+ type UpdateManyArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>> = {
190
+ where: Where<ScalarRecord<TSchema, TModelName>>;
191
+ data: Partial<ScalarRecord<TSchema, TModelName>>;
192
+ };
180
193
  type DeleteArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>> = {
181
194
  where: Where<ScalarRecord<TSchema, TModelName>>;
182
195
  };
196
+ type DeleteManyArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>> = {
197
+ where: Where<ScalarRecord<TSchema, TModelName>>;
198
+ };
199
+ type CountArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>> = {
200
+ where?: Where<ScalarRecord<TSchema, TModelName>>;
201
+ };
202
+ type UpsertArgs<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined> = {
203
+ where: Where<ScalarRecord<TSchema, TModelName>>;
204
+ create: Partial<ScalarRecord<TSchema, TModelName>>;
205
+ update: Partial<ScalarRecord<TSchema, TModelName>>;
206
+ select?: TSelect;
207
+ };
183
208
  interface OrmDriver<TSchema extends SchemaDefinition<any>> {
184
209
  findMany<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: FindManyArgs<TSchema, TModelName, TSelect>): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>>;
185
210
  findFirst<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: FindFirstArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
211
+ findUnique<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: FindUniqueArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
212
+ count<TModelName extends ModelName<TSchema>>(schema: TSchema, model: TModelName, args?: CountArgs<TSchema, TModelName>): Promise<number>;
186
213
  create<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: CreateArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect>>;
214
+ createMany<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: CreateManyArgs<TSchema, TModelName, TSelect>): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>>;
187
215
  update<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: UpdateArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
216
+ updateMany<TModelName extends ModelName<TSchema>>(schema: TSchema, model: TModelName, args: UpdateManyArgs<TSchema, TModelName>): Promise<number>;
217
+ upsert<TModelName extends ModelName<TSchema>, TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(schema: TSchema, model: TModelName, args: UpsertArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect>>;
188
218
  delete<TModelName extends ModelName<TSchema>>(schema: TSchema, model: TModelName, args: DeleteArgs<TSchema, TModelName>): Promise<number>;
219
+ deleteMany<TModelName extends ModelName<TSchema>>(schema: TSchema, model: TModelName, args: DeleteManyArgs<TSchema, TModelName>): Promise<number>;
189
220
  transaction<TResult>(schema: TSchema, run: (driver: OrmDriver<TSchema>) => Promise<TResult>): Promise<TResult>;
190
221
  }
191
222
  type ModelClient<TSchema extends SchemaDefinition<any>, TModelName extends ModelName<TSchema>> = {
192
223
  findMany<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args?: FindManyArgs<TSchema, TModelName, TSelect>): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>>;
224
+ findOne<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args?: FindOneArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
193
225
  findFirst<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args?: FindFirstArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
226
+ findUnique<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args: FindUniqueArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
227
+ count(args?: CountArgs<TSchema, TModelName>): Promise<number>;
194
228
  create<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args: CreateArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect>>;
229
+ createMany<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args: CreateManyArgs<TSchema, TModelName, TSelect>): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>>;
195
230
  update<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args: UpdateArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect> | null>;
231
+ updateMany(args: UpdateManyArgs<TSchema, TModelName>): Promise<number>;
232
+ upsert<TSelect extends SelectShape<TSchema, TModelName> | undefined = undefined>(args: UpsertArgs<TSchema, TModelName, TSelect>): Promise<SelectedRecord<TSchema, TModelName, TSelect>>;
196
233
  delete(args: DeleteArgs<TSchema, TModelName>): Promise<number>;
234
+ deleteMany(args: DeleteManyArgs<TSchema, TModelName>): Promise<number>;
197
235
  };
236
+ type BatchTask<TSchema extends SchemaDefinition<any>, TResult> = (tx: OrmClient<TSchema>) => Promise<TResult>;
198
237
  type OrmClient<TSchema extends SchemaDefinition<any>> = {
199
238
  [K in ModelName<TSchema>]: ModelClient<TSchema, K>;
200
239
  } & {
201
240
  transaction<TResult>(run: (tx: OrmClient<TSchema>) => Promise<TResult>): Promise<TResult>;
241
+ batch<const TResult extends readonly unknown[]>(tasks: {
242
+ [K in keyof TResult]: BatchTask<TSchema, TResult[K]>;
243
+ }): Promise<TResult>;
202
244
  };
203
245
  declare function createOrm<TSchema extends SchemaDefinition<any>>(options: {
204
246
  schema: TSchema;
@@ -251,4 +293,4 @@ declare function createManifest<TSchema extends SchemaDefinition<Record<string,
251
293
  type MemoryStore<TSchema extends SchemaDefinition<any>> = Partial<Record<ModelName<TSchema>, Array<Record<string, unknown>>>>;
252
294
  declare function createMemoryDriver<TSchema extends SchemaDefinition<any>>(seed?: MemoryStore<TSchema>): OrmDriver<TSchema>;
253
295
 
254
- export { type AnyFieldBuilder, type AnyModelDefinition, type AnyRelation, type CreateArgs, type DeleteArgs, type DrizzleGenerationOptions, FieldBuilder, type FieldConfig, type FieldMap, type FieldOutput, type FieldReference, type FindFirstArgs, type FindManyArgs, type ManifestField, type ManifestModel, type ModelClient, type ModelDefinition, type ModelFields, type ModelForName, type ModelName, type ModelRelations, type OrmClient, type OrmDriver, type PrismaGenerationOptions, type RelationDefinition, type RelationForName, type RelationKind, type RelationMap, type RelationName, type RelationTarget, type ScalarKind, type ScalarRecord, type ScalarValue, type SchemaDefinition, type SchemaManifest, type SchemaModels, type SelectShape, type SelectedRecord, type SqlGenerationOptions, type UpdateArgs, type Where, belongsTo, boolean, createManifest, createMemoryDriver, createOrm, datetime, defineSchema, hasMany, hasOne, id, manyToMany, model, renderDrizzleSchema, renderPrismaSchema, renderSafeSql, replaceGeneratedBlock, string };
296
+ export { type AnyFieldBuilder, type AnyModelDefinition, type AnyRelation, type BatchTask, type CountArgs, type CreateArgs, type CreateManyArgs, type DeleteArgs, type DeleteManyArgs, type DrizzleGenerationOptions, FieldBuilder, type FieldConfig, type FieldMap, type FieldOutput, type FieldReference, type FindFirstArgs, type FindManyArgs, type FindOneArgs, type FindUniqueArgs, type ManifestField, type ManifestModel, type ModelClient, type ModelDefinition, type ModelFields, type ModelForName, type ModelName, type ModelRelations, type OrmClient, type OrmDriver, type PrismaGenerationOptions, type RelationDefinition, type RelationForName, type RelationKind, type RelationMap, type RelationName, type RelationTarget, type ScalarKind, type ScalarRecord, type ScalarValue, type SchemaDefinition, type SchemaManifest, type SchemaModels, type SelectShape, type SelectedRecord, type SqlGenerationOptions, type UpdateArgs, type UpdateManyArgs, type UpsertArgs, type Where, belongsTo, boolean, createManifest, createMemoryDriver, createOrm, datetime, defineSchema, hasMany, hasOne, id, manyToMany, model, renderDrizzleSchema, renderPrismaSchema, renderSafeSql, replaceGeneratedBlock, string };
package/dist/index.js CHANGED
@@ -4,17 +4,38 @@ function createModelClient(schema, driver, model2) {
4
4
  findMany(args) {
5
5
  return driver.findMany(schema, model2, args ?? {});
6
6
  },
7
+ findOne(args) {
8
+ return driver.findFirst(schema, model2, args ?? {});
9
+ },
7
10
  findFirst(args) {
8
11
  return driver.findFirst(schema, model2, args ?? {});
9
12
  },
13
+ findUnique(args) {
14
+ return driver.findUnique(schema, model2, args);
15
+ },
16
+ count(args) {
17
+ return driver.count(schema, model2, args);
18
+ },
10
19
  create(args) {
11
20
  return driver.create(schema, model2, args);
12
21
  },
22
+ createMany(args) {
23
+ return driver.createMany(schema, model2, args);
24
+ },
13
25
  update(args) {
14
26
  return driver.update(schema, model2, args);
15
27
  },
28
+ updateMany(args) {
29
+ return driver.updateMany(schema, model2, args);
30
+ },
31
+ upsert(args) {
32
+ return driver.upsert(schema, model2, args);
33
+ },
16
34
  delete(args) {
17
35
  return driver.delete(schema, model2, args);
36
+ },
37
+ deleteMany(args) {
38
+ return driver.deleteMany(schema, model2, args);
18
39
  }
19
40
  };
20
41
  }
@@ -32,6 +53,13 @@ function createOrm(options) {
32
53
  });
33
54
  return run(tx);
34
55
  });
56
+ orm.batch = async (tasks) => orm.transaction(async (tx) => {
57
+ const results = [];
58
+ for (const task of tasks) {
59
+ results.push(await task(tx));
60
+ }
61
+ return results;
62
+ });
35
63
  return orm;
36
64
  }
37
65
 
@@ -226,7 +254,7 @@ function sqlType(field, dialect) {
226
254
  return dialect === "mysql" ? "varchar(191)" : "text";
227
255
  }
228
256
  if (field.kind === "string") {
229
- return dialect === "mysql" && field.unique ? "varchar(191)" : "text";
257
+ return dialect === "mysql" && (field.unique || field.references) ? "varchar(191)" : "text";
230
258
  }
231
259
  if (field.kind === "boolean") {
232
260
  return dialect === "sqlite" ? "integer" : "boolean";
@@ -239,6 +267,12 @@ function sqlType(field, dialect) {
239
267
  }
240
268
  return "timestamp";
241
269
  }
270
+ function sqlIdentifier(dialect, value) {
271
+ if (dialect === "mysql") {
272
+ return `\`${value}\``;
273
+ }
274
+ return `"${value}"`;
275
+ }
242
276
  function renderPrismaSchema(schema, options = {}) {
243
277
  const manifest = createManifest(schema);
244
278
  const provider = options.provider ?? "postgresql";
@@ -333,7 +367,9 @@ function renderSafeSql(schema, options) {
333
367
  const manifest = createManifest(schema);
334
368
  const statements = Object.values(manifest.models).map((model2) => {
335
369
  const columns = Object.values(model2.fields).map((field) => {
336
- const parts = [`${field.column} ${sqlType(field, options.dialect)}`];
370
+ const parts = [
371
+ `${sqlIdentifier(options.dialect, field.column)} ${sqlType(field, options.dialect)}`
372
+ ];
337
373
  if (field.kind === "id") parts.push("primary key");
338
374
  if (!field.nullable) parts.push("not null");
339
375
  if (field.unique && field.kind !== "id") parts.push("unique");
@@ -345,11 +381,17 @@ function renderSafeSql(schema, options) {
345
381
  if (field.references) {
346
382
  const [targetModel, targetField] = field.references.split(".");
347
383
  const targetTable = manifest.models[targetModel]?.table ?? targetModel;
348
- parts.push(`references ${targetTable}(${targetField})`);
384
+ const targetColumn = manifest.models[targetModel]?.fields[targetField]?.column ?? targetField;
385
+ parts.push(
386
+ `references ${sqlIdentifier(options.dialect, targetTable)}(${sqlIdentifier(
387
+ options.dialect,
388
+ targetColumn
389
+ )})`
390
+ );
349
391
  }
350
392
  return ` ${parts.join(" ")}`;
351
393
  });
352
- return `create table if not exists ${model2.table} (
394
+ return `create table if not exists ${sqlIdentifier(options.dialect, model2.table)} (
353
395
  ${columns.join(",\n")}
354
396
  );`;
355
397
  });
@@ -466,6 +508,11 @@ function pageRows(rows, skip, take) {
466
508
  const end = take === void 0 ? void 0 : start + take;
467
509
  return rows.slice(start, end);
468
510
  }
511
+ function applyQuery(rows, args = {}) {
512
+ const filtered = rows.filter((row) => matchesWhere(row, args.where));
513
+ const sorted = sortRows(filtered, args.orderBy);
514
+ return pageRows(sorted, args.skip, args.take);
515
+ }
469
516
  function createMemoryDriver(seed) {
470
517
  const state = structuredClone(seed ?? {});
471
518
  function getRows(model2) {
@@ -473,14 +520,13 @@ function createMemoryDriver(seed) {
473
520
  state[model2] = rows;
474
521
  return rows;
475
522
  }
476
- function applyQuery(model2, args) {
477
- const rows = getRows(model2);
478
- const filtered = rows.filter((row) => matchesWhere(row, args.where));
479
- const sorted = sortRows(
480
- filtered,
481
- args.orderBy
482
- );
483
- return pageRows(sorted, args.skip, args.take);
523
+ function buildRow(schema, model2, data) {
524
+ const modelDefinition = schema.models[model2];
525
+ const nextRow = {};
526
+ for (const [fieldName, field] of Object.entries(modelDefinition.fields)) {
527
+ nextRow[fieldName] = applyDefault(data[fieldName], field.config);
528
+ }
529
+ return nextRow;
484
530
  }
485
531
  async function projectRow(schema, model2, row, select) {
486
532
  const modelDefinition = schema.models[model2];
@@ -513,28 +559,27 @@ function createMemoryDriver(seed) {
513
559
  const relation = schema.models[model2].relations[relationName];
514
560
  const relationArgs = value === true ? {} : value;
515
561
  if (relation.kind === "belongsTo") {
516
- const targetRows2 = getRows(relation.target);
517
562
  const foreignValue = row[relation.foreignKey];
518
- const target = targetRows2.find((item) => item.id === foreignValue);
563
+ const targetRows2 = getRows(relation.target).filter(
564
+ (item) => item.id === foreignValue
565
+ );
566
+ const target = applyQuery(targetRows2, relationArgs)[0];
519
567
  return target ? projectRow(schema, relation.target, target, relationArgs.select) : null;
520
568
  }
521
569
  if (relation.kind === "hasOne") {
522
- const targetRows2 = getRows(relation.target);
523
- const target = targetRows2.find((item) => item[relation.foreignKey] === row.id);
570
+ const targetRows2 = getRows(relation.target).filter(
571
+ (item) => item[relation.foreignKey] === row.id
572
+ );
573
+ const target = applyQuery(targetRows2, relationArgs)[0];
524
574
  return target ? projectRow(schema, relation.target, target, relationArgs.select) : null;
525
575
  }
526
576
  if (relation.kind === "hasMany") {
527
577
  const targetRows2 = getRows(relation.target).filter(
528
578
  (item) => item[relation.foreignKey] === row.id
529
579
  );
530
- const sorted2 = sortRows(
531
- targetRows2,
532
- relationArgs.orderBy
533
- );
534
- const paged2 = pageRows(sorted2, relationArgs.skip, relationArgs.take);
535
- const filtered2 = paged2.filter((item) => matchesWhere(item, relationArgs.where));
580
+ const matchedRows2 = applyQuery(targetRows2, relationArgs);
536
581
  return Promise.all(
537
- filtered2.map(
582
+ matchedRows2.map(
538
583
  (item) => projectRow(schema, relation.target, item, relationArgs.select)
539
584
  )
540
585
  );
@@ -546,45 +591,72 @@ function createMemoryDriver(seed) {
546
591
  const targetRows = getRows(relation.target).filter(
547
592
  (item) => targetIds.includes(item.id)
548
593
  );
549
- const sorted = sortRows(
550
- targetRows,
551
- relationArgs.orderBy
552
- );
553
- const paged = pageRows(sorted, relationArgs.skip, relationArgs.take);
554
- const filtered = paged.filter((item) => matchesWhere(item, relationArgs.where));
594
+ const matchedRows = applyQuery(targetRows, relationArgs);
555
595
  return Promise.all(
556
- filtered.map(
596
+ matchedRows.map(
557
597
  (item) => projectRow(schema, relation.target, item, relationArgs.select)
558
598
  )
559
599
  );
560
600
  }
561
601
  const driver = {
562
602
  async findMany(schema, model2, args) {
563
- const rows = applyQuery(model2, args);
603
+ const rows = applyQuery(getRows(model2), args);
564
604
  return Promise.all(rows.map((row) => projectRow(schema, model2, row, args.select)));
565
605
  },
566
606
  async findFirst(schema, model2, args) {
567
- const row = applyQuery(model2, args)[0];
607
+ const row = applyQuery(getRows(model2), args)[0];
568
608
  if (!row) return null;
569
609
  return projectRow(schema, model2, row, args.select);
570
610
  },
611
+ async findUnique(schema, model2, args) {
612
+ const row = applyQuery(getRows(model2), args)[0];
613
+ if (!row) return null;
614
+ return projectRow(schema, model2, row, args.select);
615
+ },
616
+ async count(_schema, model2, args) {
617
+ return applyQuery(getRows(model2), args).length;
618
+ },
571
619
  async create(schema, model2, args) {
572
- const modelDefinition = schema.models[model2];
573
- const nextRow = {};
574
- for (const [fieldName, field] of Object.entries(modelDefinition.fields)) {
575
- nextRow[fieldName] = applyDefault(args.data[fieldName], field.config);
576
- }
620
+ const nextRow = buildRow(schema, model2, args.data);
577
621
  getRows(model2).push(nextRow);
578
622
  return projectRow(schema, model2, nextRow, args.select);
579
623
  },
624
+ async createMany(schema, model2, args) {
625
+ const rows = args.data.map((entry) => buildRow(schema, model2, entry));
626
+ getRows(model2).push(...rows);
627
+ return Promise.all(rows.map((row) => projectRow(schema, model2, row, args.select)));
628
+ },
580
629
  async update(schema, model2, args) {
581
- const rows = getRows(model2);
582
- const row = rows.find((item) => matchesWhere(item, args.where));
630
+ const row = getRows(model2).find((item) => matchesWhere(item, args.where));
583
631
  if (!row) return null;
584
632
  Object.assign(row, args.data);
585
633
  return projectRow(schema, model2, row, args.select);
586
634
  },
635
+ async updateMany(_schema, model2, args) {
636
+ const rows = getRows(model2).filter((item) => matchesWhere(item, args.where));
637
+ for (const row of rows) {
638
+ Object.assign(row, args.data);
639
+ }
640
+ return rows.length;
641
+ },
642
+ async upsert(schema, model2, args) {
643
+ const row = getRows(model2).find((item) => matchesWhere(item, args.where));
644
+ if (row) {
645
+ Object.assign(row, args.update);
646
+ return projectRow(schema, model2, row, args.select);
647
+ }
648
+ const created = buildRow(schema, model2, args.create);
649
+ getRows(model2).push(created);
650
+ return projectRow(schema, model2, created, args.select);
651
+ },
587
652
  async delete(_schema, model2, args) {
653
+ const rows = getRows(model2);
654
+ const index = rows.findIndex((item) => matchesWhere(item, args.where));
655
+ if (index === -1) return 0;
656
+ rows.splice(index, 1);
657
+ return 1;
658
+ },
659
+ async deleteMany(_schema, model2, args) {
588
660
  const rows = getRows(model2);
589
661
  const before = rows.length;
590
662
  state[model2] = rows.filter((item) => !matchesWhere(item, args.where));