@warlock.js/cascade 4.5.0 → 4.6.1

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.
Files changed (78) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/cjs/index.cjs +1012 -104
  3. package/cjs/index.cjs.map +1 -1
  4. package/esm/contracts/database-driver.contract.d.mts +27 -4
  5. package/esm/contracts/database-driver.contract.d.mts.map +1 -1
  6. package/esm/contracts/database-id-generator.contract.d.mts +38 -0
  7. package/esm/contracts/database-id-generator.contract.d.mts.map +1 -1
  8. package/esm/contracts/index.d.mts +1 -1
  9. package/esm/contracts/query-builder.contract.d.mts +27 -0
  10. package/esm/contracts/query-builder.contract.d.mts.map +1 -1
  11. package/esm/data-source/data-source.d.mts +21 -1
  12. package/esm/data-source/data-source.d.mts.map +1 -1
  13. package/esm/data-source/data-source.mjs +22 -0
  14. package/esm/data-source/data-source.mjs.map +1 -1
  15. package/esm/drivers/mongodb/mongodb-driver.d.mts +2 -2
  16. package/esm/drivers/mongodb/mongodb-driver.d.mts.map +1 -1
  17. package/esm/drivers/mongodb/mongodb-driver.mjs +5 -4
  18. package/esm/drivers/mongodb/mongodb-driver.mjs.map +1 -1
  19. package/esm/drivers/mongodb/mongodb-id-generator.d.mts +98 -48
  20. package/esm/drivers/mongodb/mongodb-id-generator.d.mts.map +1 -1
  21. package/esm/drivers/mongodb/mongodb-id-generator.mjs +153 -59
  22. package/esm/drivers/mongodb/mongodb-id-generator.mjs.map +1 -1
  23. package/esm/drivers/mongodb/mongodb-query-builder.d.mts +25 -0
  24. package/esm/drivers/mongodb/mongodb-query-builder.d.mts.map +1 -1
  25. package/esm/drivers/mongodb/mongodb-query-builder.mjs +32 -0
  26. package/esm/drivers/mongodb/mongodb-query-builder.mjs.map +1 -1
  27. package/esm/drivers/mongodb/mongodb-query-parser.d.mts +36 -0
  28. package/esm/drivers/mongodb/mongodb-query-parser.d.mts.map +1 -1
  29. package/esm/drivers/mongodb/mongodb-query-parser.mjs +80 -1
  30. package/esm/drivers/mongodb/mongodb-query-parser.mjs.map +1 -1
  31. package/esm/drivers/postgres/postgres-dialect.d.mts +32 -4
  32. package/esm/drivers/postgres/postgres-dialect.d.mts.map +1 -1
  33. package/esm/drivers/postgres/postgres-dialect.mjs +57 -4
  34. package/esm/drivers/postgres/postgres-dialect.mjs.map +1 -1
  35. package/esm/drivers/postgres/postgres-driver.d.mts +83 -1
  36. package/esm/drivers/postgres/postgres-driver.d.mts.map +1 -1
  37. package/esm/drivers/postgres/postgres-driver.mjs +129 -16
  38. package/esm/drivers/postgres/postgres-driver.mjs.map +1 -1
  39. package/esm/drivers/postgres/postgres-query-builder.d.mts +32 -0
  40. package/esm/drivers/postgres/postgres-query-builder.d.mts.map +1 -1
  41. package/esm/drivers/postgres/postgres-query-builder.mjs +47 -1
  42. package/esm/drivers/postgres/postgres-query-builder.mjs.map +1 -1
  43. package/esm/drivers/postgres/postgres-query-parser.d.mts +13 -2
  44. package/esm/drivers/postgres/postgres-query-parser.d.mts.map +1 -1
  45. package/esm/drivers/postgres/postgres-query-parser.mjs +21 -4
  46. package/esm/drivers/postgres/postgres-query-parser.mjs.map +1 -1
  47. package/esm/drivers/postgres/types.d.mts +15 -0
  48. package/esm/drivers/postgres/types.d.mts.map +1 -1
  49. package/esm/drivers/sql/sql-dialect.contract.d.mts +20 -0
  50. package/esm/drivers/sql/sql-dialect.contract.d.mts.map +1 -1
  51. package/esm/expressions/aggregate-expressions.d.mts +71 -34
  52. package/esm/expressions/aggregate-expressions.d.mts.map +1 -1
  53. package/esm/expressions/aggregate-expressions.mjs +80 -7
  54. package/esm/expressions/aggregate-expressions.mjs.map +1 -1
  55. package/esm/expressions/column-expressions.d.mts +193 -0
  56. package/esm/expressions/column-expressions.d.mts.map +1 -0
  57. package/esm/expressions/column-expressions.mjs +152 -0
  58. package/esm/expressions/column-expressions.mjs.map +1 -0
  59. package/esm/index.d.mts +3 -2
  60. package/esm/index.mjs +2 -1
  61. package/esm/model/methods/write-methods.d.mts +29 -0
  62. package/esm/model/methods/write-methods.d.mts.map +1 -0
  63. package/esm/model/methods/write-methods.mjs +164 -2
  64. package/esm/model/methods/write-methods.mjs.map +1 -1
  65. package/esm/model/model.d.mts +64 -3
  66. package/esm/model/model.d.mts.map +1 -1
  67. package/esm/model/model.mjs +65 -3
  68. package/esm/model/model.mjs.map +1 -1
  69. package/esm/writer/database-writer.d.mts.map +1 -1
  70. package/esm/writer/database-writer.mjs +4 -3
  71. package/esm/writer/database-writer.mjs.map +1 -1
  72. package/llms-full.txt +111 -8
  73. package/llms.txt +3 -3
  74. package/package.json +4 -4
  75. package/skills/README.md +3 -3
  76. package/skills/aggregate-data/SKILL.md +43 -3
  77. package/skills/manage-transactions/SKILL.md +45 -2
  78. package/skills/perform-atomic-ops/SKILL.md +23 -3
@@ -2,6 +2,16 @@ import { emitModelEvent } from "./instance-event-methods.mjs";
2
2
  import { DatabaseWriter } from "../../writer/database-writer.mjs";
3
3
 
4
4
  //#region ../@warlock.js/cascade/src/model/methods/write-methods.ts
5
+ /**
6
+ * Default number of rows processed per chunk by {@link createManyRecords}.
7
+ *
8
+ * Chunking keeps a single huge `createMany` call from flooding the driver:
9
+ * the default path runs each chunk's `save()` calls under one `Promise.all`,
10
+ * and the bulk path emits one multi-row `insertMany` per chunk so the
11
+ * generated `INSERT ... VALUES (...),(...)` stays under the database's bind
12
+ * parameter ceiling.
13
+ */
14
+ const DEFAULT_CREATE_MANY_BATCH_SIZE = 500;
5
15
  async function saveModel(model, options) {
6
16
  if (options?.merge) model.merge(options.merge);
7
17
  await new DatabaseWriter(model).save(options);
@@ -12,8 +22,160 @@ async function createRecord(ModelClass, data) {
12
22
  await model.save();
13
23
  return model;
14
24
  }
15
- async function createManyRecords(ModelClass, data) {
16
- return await Promise.all(data.map((item) => createRecord(ModelClass, item)));
25
+ /**
26
+ * Split an array into sequential chunks of at most `size` elements.
27
+ *
28
+ * @param items - The array to split.
29
+ * @param size - Maximum chunk length (callers pass a value `>= 1`).
30
+ * @returns An array of chunks preserving the original order.
31
+ */
32
+ function chunkArray(items, size) {
33
+ const chunks = [];
34
+ for (let index = 0; index < items.length; index += size) chunks.push(items.slice(index, index + size));
35
+ return chunks;
36
+ }
37
+ /**
38
+ * Create many records, chunking the work so a huge array can't overwhelm the
39
+ * driver.
40
+ *
41
+ * Two strategies are available via `options.bulk`:
42
+ *
43
+ * - **Default (`bulk` falsy):** each row is persisted through `save()`, so
44
+ * model hooks, lifecycle events, casts and generated ids are all preserved.
45
+ * Rows are processed in sequential chunks of `batchSize`, each chunk running
46
+ * under a single `Promise.all`, so an array of millions of rows can't open
47
+ * millions of concurrent inserts at once.
48
+ *
49
+ * - **Bulk (`bulk: true`):** each chunk is routed to the driver's native
50
+ * multi-row insert (`insertMany`) for 10–100× throughput. This SKIPS the
51
+ * per-row save lifecycle (no `saving` / `creating` / `created` / `saved`
52
+ * events, hooks, or sync). Rows are still prepped through the writer
53
+ * pipeline (validation, casting, timestamps, defaults, id-generation) so the
54
+ * persisted columns match the default path, and the values returned by the
55
+ * driver (generated `_id`, timestamps, SQL `RETURNING *`) are merged back
56
+ * onto the returned models.
57
+ *
58
+ * Both strategies return the created model instances (an empty array is a
59
+ * no-op that never touches the driver).
60
+ *
61
+ * @param ModelClass - The model class to create records for.
62
+ * @param data - The rows to insert.
63
+ * @param options - Chunking / bulk options.
64
+ * @returns The created model instances.
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * // Default: per-row save(), chunked in batches of 500
69
+ * const users = await User.createMany(rows);
70
+ *
71
+ * // Bulk: one multi-row INSERT per 1000-row chunk (skips per-row hooks)
72
+ * const users = await User.createMany(rows, { bulk: true, batchSize: 1000 });
73
+ * ```
74
+ */
75
+ async function createManyRecords(ModelClass, data, options = {}) {
76
+ if (data.length === 0) return [];
77
+ const chunks = chunkArray(data, options.batchSize && options.batchSize > 0 ? options.batchSize : 500);
78
+ if (options.bulk === true) return await createManyBulk(ModelClass, chunks);
79
+ const created = [];
80
+ for (const chunk of chunks) {
81
+ const models = chunk.map((item) => new ModelClass(item));
82
+ await assignIdBlock(ModelClass, models);
83
+ const chunkModels = await Promise.all(models.map(async (model) => {
84
+ await model.save();
85
+ return model;
86
+ }));
87
+ created.push(...chunkModels);
88
+ }
89
+ return created;
90
+ }
91
+ /**
92
+ * Reserve a single contiguous id block for one chunk and pre-assign the ids to
93
+ * the models that don't already carry one, so the per-row writer's id
94
+ * generation no-ops (its `model.get("id")` guard short-circuits). This turns N
95
+ * per-row counter round-trips into ONE per chunk.
96
+ *
97
+ * Falls back to per-row generation (a no-op here) when:
98
+ * - the model disables auto-generation (`autoGenerateId === false`) — e.g. SQL,
99
+ * which uses native `SERIAL`;
100
+ * - the data source's id generator has no batch API (`generateNextIds`) — the
101
+ * optional contract member is feature-detected;
102
+ * - the model uses a random initial id / increment — a random stride can't form
103
+ * a contiguous block, so those models keep per-row generation.
104
+ *
105
+ * Only models WITHOUT a caller-supplied id consume a block slot, so a chunk
106
+ * mixing supplied and auto ids allocates exactly the right number (no gaps).
107
+ *
108
+ * @param ModelClass - The model class being inserted.
109
+ * @param models - The freshly-constructed (unsaved) models for one chunk.
110
+ */
111
+ async function assignIdBlock(ModelClass, models) {
112
+ if (!ModelClass.autoGenerateId || ModelClass.randomInitialId || ModelClass.randomIncrement) return;
113
+ const idGenerator = ModelClass.getDataSource().idGenerator;
114
+ if (!idGenerator || typeof idGenerator.generateNextIds !== "function") return;
115
+ const idLessModels = models.filter((model) => !model.get("id"));
116
+ if (idLessModels.length === 0) return;
117
+ const ids = await idGenerator.generateNextIds({
118
+ table: ModelClass.table,
119
+ initialId: ModelClass.initialId || 1,
120
+ incrementIdBy: ModelClass.incrementIdBy || 1,
121
+ count: idLessModels.length
122
+ });
123
+ if (ids.length !== idLessModels.length) throw new Error(`generateNextIds returned ${ids.length} id(s) for ${idLessModels.length} row(s) on "${ModelClass.table}" — a batch id generator must return exactly the requested count.`);
124
+ idLessModels.forEach((model, index) => {
125
+ model.set("id", ids[index]);
126
+ });
127
+ }
128
+ /**
129
+ * Bulk variant of {@link createManyRecords}: prep each row through the writer
130
+ * pipeline (validation, casting, timestamps, defaults, id-generation) without
131
+ * touching the database, then flush each chunk with a single
132
+ * `driver.insertMany` call.
133
+ *
134
+ * The writer reuse is achieved by swapping the driver's single-row `insert`
135
+ * for a capturing stub for the lifetime of the bulk operation: running
136
+ * `writer.save({ skipEvents, skipSync })` exercises the real prep but records
137
+ * the prepared document instead of issuing N single-row inserts. The original
138
+ * `insert` is always restored in `finally`.
139
+ *
140
+ * @param ModelClass - The model class to create records for.
141
+ * @param chunks - Pre-chunked rows.
142
+ * @returns The created model instances with driver-returned values merged in.
143
+ */
144
+ async function createManyBulk(ModelClass, chunks) {
145
+ const driver = ModelClass.getDataSource().driver;
146
+ const table = ModelClass.table;
147
+ const originalInsert = driver.insert;
148
+ driver.insert = (async (_table, document) => {
149
+ return { document };
150
+ });
151
+ const created = [];
152
+ try {
153
+ for (const chunk of chunks) {
154
+ const models = chunk.map((item) => new ModelClass(item));
155
+ await assignIdBlock(ModelClass, models);
156
+ const preparedDocuments = await Promise.all(models.map(async (model) => {
157
+ await new DatabaseWriter(model).save({
158
+ skipEvents: true,
159
+ skipSync: true
160
+ });
161
+ return { ...model.data };
162
+ }));
163
+ const results = await driver.insertMany(table, preparedDocuments);
164
+ models.forEach((model, index) => {
165
+ const result = results[index];
166
+ if (result) {
167
+ const returnedDocument = "document" in result ? result.document : result;
168
+ model.merge(returnedDocument);
169
+ }
170
+ model.dirtyTracker.reset();
171
+ model.isNew = false;
172
+ });
173
+ created.push(...models);
174
+ }
175
+ } finally {
176
+ driver.insert = originalInsert;
177
+ }
178
+ return created;
17
179
  }
18
180
  async function findOrCreateRecord(ModelClass, filter, data) {
19
181
  const existing = await ModelClass.first(filter);
@@ -1 +1 @@
1
- {"version":3,"file":"write-methods.mjs","names":[],"sources":["../../../../../../../../@warlock.js/cascade/src/model/methods/write-methods.ts"],"sourcesContent":["import { DatabaseWriter } from \"../../writer/database-writer\";\nimport type { WriterOptions } from \"../../contracts\";\nimport type { ChildModel, Model, ModelSchema } from \"../model\";\nimport { emitModelEvent } from \"./instance-event-methods\";\n\nexport async function saveModel<TModel extends Model>(\n model: TModel,\n options?: WriterOptions & { merge?: Partial<ModelSchema> },\n): Promise<TModel> {\n if (options?.merge) {\n model.merge(options.merge);\n }\n const writer = new DatabaseWriter(model);\n await writer.save(options);\n return model;\n}\n\nexport async function createRecord<\n TModel extends Model,\n TSchema extends ModelSchema = TModel extends Model<infer S> ? S : ModelSchema,\n>(ModelClass: ChildModel<TModel>, data: Partial<TSchema>): Promise<TModel> {\n const model = new ModelClass(data);\n await model.save();\n return model;\n}\n\nexport async function createManyRecords<\n TModel extends Model,\n TSchema extends ModelSchema = TModel extends Model<infer S> ? S : ModelSchema,\n>(ModelClass: ChildModel<TModel>, data: Partial<TSchema>[]): Promise<TModel[]> {\n return await Promise.all(data.map((item) => createRecord(ModelClass, item)));\n}\n\nexport async function findOrCreateRecord<\n TModel extends Model,\n TSchema extends ModelSchema = TModel extends Model<infer S> ? S : ModelSchema,\n>(\n ModelClass: ChildModel<TModel>,\n filter: Partial<TSchema>,\n data: Partial<TSchema>,\n): Promise<TModel> {\n const existing = await ModelClass.first(filter as Record<string, unknown>);\n\n if (existing) {\n return existing;\n }\n\n return await createRecord(ModelClass, { ...filter, ...data } as Partial<TSchema>);\n}\n\nexport async function upsertRecord<\n TModel extends Model,\n TSchema extends ModelSchema = TModel extends Model<infer S> ? S : ModelSchema,\n>(\n ModelClass: ChildModel<TModel>,\n filter: Partial<TSchema>,\n data: Partial<TSchema>,\n options?: Record<string, unknown>,\n): Promise<TModel> {\n const driver = ModelClass.getDriver();\n const mergedData = { ...filter, ...data } as Record<string, unknown>;\n\n const tempModel = new ModelClass(mergedData as Partial<TSchema>);\n tempModel.isNew = true;\n\n await emitModelEvent(tempModel, \"saving\", {\n isInsert: true,\n options,\n mode: \"upsert\",\n });\n\n const createdAtColumn = ModelClass.createdAtColumn;\n const updatedAtColumn = ModelClass.updatedAtColumn;\n\n if (createdAtColumn !== false && createdAtColumn !== undefined) {\n const createdAtKey = createdAtColumn as string;\n if (!mergedData[createdAtKey]) {\n mergedData[createdAtKey] = new Date();\n }\n }\n\n if (updatedAtColumn !== false && updatedAtColumn !== undefined) {\n const updatedAtKey = updatedAtColumn as string;\n mergedData[updatedAtKey] = new Date();\n }\n\n await emitModelEvent(tempModel, \"saving\", { filter, data: mergedData, options, mode: \"upsert\" });\n\n const result = await driver.upsert(ModelClass.table, filter as Record<string, unknown>, mergedData, options);\n\n const model = ModelClass.hydrate(result as Record<string, unknown>) as TModel;\n model.dirtyTracker.reset();\n\n await emitModelEvent(model, \"saved\", { filter, data: result, options, mode: \"upsert\" });\n\n return model;\n}\n"],"mappings":";;;;AAKA,eAAsB,UACpB,OACA,SACiB;CACjB,IAAI,SAAS,OACX,MAAM,MAAM,QAAQ,KAAK;CAG3B,MAAM,IADa,eAAe,KACvB,CAAC,CAAC,KAAK,OAAO;CACzB,OAAO;AACT;AAEA,eAAsB,aAGpB,YAAgC,MAAyC;CACzE,MAAM,QAAQ,IAAI,WAAW,IAAI;CACjC,MAAM,MAAM,KAAK;CACjB,OAAO;AACT;AAEA,eAAsB,kBAGpB,YAAgC,MAA6C;CAC7E,OAAO,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,aAAa,YAAY,IAAI,CAAC,CAAC;AAC7E;AAEA,eAAsB,mBAIpB,YACA,QACA,MACiB;CACjB,MAAM,WAAW,MAAM,WAAW,MAAM,MAAiC;CAEzE,IAAI,UACF,OAAO;CAGT,OAAO,MAAM,aAAa,YAAY;EAAE,GAAG;EAAQ,GAAG;CAAK,CAAqB;AAClF;AAEA,eAAsB,aAIpB,YACA,QACA,MACA,SACiB;CACjB,MAAM,SAAS,WAAW,UAAU;CACpC,MAAM,aAAa;EAAE,GAAG;EAAQ,GAAG;CAAK;CAExC,MAAM,YAAY,IAAI,WAAW,UAA8B;CAC/D,UAAU,QAAQ;CAElB,MAAM,eAAe,WAAW,UAAU;EACxC,UAAU;EACV;EACA,MAAM;CACR,CAAC;CAED,MAAM,kBAAkB,WAAW;CACnC,MAAM,kBAAkB,WAAW;CAEnC,IAAI,oBAAoB,SAAS,oBAAoB,QAAW;EAC9D,MAAM,eAAe;EACrB,IAAI,CAAC,WAAW,eACd,WAAW,gCAAgB,IAAI,KAAK;CAExC;CAEA,IAAI,oBAAoB,SAAS,oBAAoB,QAAW;EAC9D,MAAM,eAAe;EACrB,WAAW,gCAAgB,IAAI,KAAK;CACtC;CAEA,MAAM,eAAe,WAAW,UAAU;EAAE;EAAQ,MAAM;EAAY;EAAS,MAAM;CAAS,CAAC;CAE/F,MAAM,SAAS,MAAM,OAAO,OAAO,WAAW,OAAO,QAAmC,YAAY,OAAO;CAE3G,MAAM,QAAQ,WAAW,QAAQ,MAAiC;CAClE,MAAM,aAAa,MAAM;CAEzB,MAAM,eAAe,OAAO,SAAS;EAAE;EAAQ,MAAM;EAAQ;EAAS,MAAM;CAAS,CAAC;CAEtF,OAAO;AACT"}
1
+ {"version":3,"file":"write-methods.mjs","names":[],"sources":["../../../../../../../../@warlock.js/cascade/src/model/methods/write-methods.ts"],"sourcesContent":["import { DatabaseWriter } from \"../../writer/database-writer\";\nimport type { InsertResult, WriterOptions } from \"../../contracts\";\nimport type { ChildModel, Model, ModelSchema } from \"../model\";\nimport { emitModelEvent } from \"./instance-event-methods\";\n\n/**\n * Default number of rows processed per chunk by {@link createManyRecords}.\n *\n * Chunking keeps a single huge `createMany` call from flooding the driver:\n * the default path runs each chunk's `save()` calls under one `Promise.all`,\n * and the bulk path emits one multi-row `insertMany` per chunk so the\n * generated `INSERT ... VALUES (...),(...)` stays under the database's bind\n * parameter ceiling.\n */\nexport const DEFAULT_CREATE_MANY_BATCH_SIZE = 500;\n\n/**\n * Options for {@link createManyRecords} (and `Model.createMany`).\n */\nexport type CreateManyOptions = {\n /**\n * Number of rows processed per chunk.\n *\n * @default 500 ({@link DEFAULT_CREATE_MANY_BATCH_SIZE})\n */\n batchSize?: number;\n\n /**\n * Route each chunk through the driver's native multi-row insert\n * (`insertMany`) instead of per-row `save()`.\n *\n * **Tradeoff:** the bulk path is 10–100× faster for large arrays but\n * SKIPS the per-row lifecycle: `saving` / `creating` / `created` / `saved`\n * events, instance hooks, and sync operations are NOT emitted. Casts,\n * timestamps, defaults and id-generation that the writer normally applies\n * ARE still applied (the rows are prepped through the same writer pipeline),\n * so persisted columns match the default path.\n *\n * @default false\n */\n bulk?: boolean;\n};\n\nexport async function saveModel<TModel extends Model>(\n model: TModel,\n options?: WriterOptions & { merge?: Partial<ModelSchema> },\n): Promise<TModel> {\n if (options?.merge) {\n model.merge(options.merge);\n }\n const writer = new DatabaseWriter(model);\n await writer.save(options);\n return model;\n}\n\nexport async function createRecord<\n TModel extends Model,\n TSchema extends ModelSchema = TModel extends Model<infer S> ? S : ModelSchema,\n>(ModelClass: ChildModel<TModel>, data: Partial<TSchema>): Promise<TModel> {\n const model = new ModelClass(data);\n await model.save();\n return model;\n}\n\n/**\n * Split an array into sequential chunks of at most `size` elements.\n *\n * @param items - The array to split.\n * @param size - Maximum chunk length (callers pass a value `>= 1`).\n * @returns An array of chunks preserving the original order.\n */\nfunction chunkArray<TItem>(items: TItem[], size: number): TItem[][] {\n const chunks: TItem[][] = [];\n\n for (let index = 0; index < items.length; index += size) {\n chunks.push(items.slice(index, index + size));\n }\n\n return chunks;\n}\n\n/**\n * Create many records, chunking the work so a huge array can't overwhelm the\n * driver.\n *\n * Two strategies are available via `options.bulk`:\n *\n * - **Default (`bulk` falsy):** each row is persisted through `save()`, so\n * model hooks, lifecycle events, casts and generated ids are all preserved.\n * Rows are processed in sequential chunks of `batchSize`, each chunk running\n * under a single `Promise.all`, so an array of millions of rows can't open\n * millions of concurrent inserts at once.\n *\n * - **Bulk (`bulk: true`):** each chunk is routed to the driver's native\n * multi-row insert (`insertMany`) for 10–100× throughput. This SKIPS the\n * per-row save lifecycle (no `saving` / `creating` / `created` / `saved`\n * events, hooks, or sync). Rows are still prepped through the writer\n * pipeline (validation, casting, timestamps, defaults, id-generation) so the\n * persisted columns match the default path, and the values returned by the\n * driver (generated `_id`, timestamps, SQL `RETURNING *`) are merged back\n * onto the returned models.\n *\n * Both strategies return the created model instances (an empty array is a\n * no-op that never touches the driver).\n *\n * @param ModelClass - The model class to create records for.\n * @param data - The rows to insert.\n * @param options - Chunking / bulk options.\n * @returns The created model instances.\n *\n * @example\n * ```typescript\n * // Default: per-row save(), chunked in batches of 500\n * const users = await User.createMany(rows);\n *\n * // Bulk: one multi-row INSERT per 1000-row chunk (skips per-row hooks)\n * const users = await User.createMany(rows, { bulk: true, batchSize: 1000 });\n * ```\n */\nexport async function createManyRecords<\n TModel extends Model,\n TSchema extends ModelSchema = TModel extends Model<infer S> ? S : ModelSchema,\n>(\n ModelClass: ChildModel<TModel>,\n data: Partial<TSchema>[],\n options: CreateManyOptions = {},\n): Promise<TModel[]> {\n if (data.length === 0) {\n return [];\n }\n\n const batchSize =\n options.batchSize && options.batchSize > 0\n ? options.batchSize\n : DEFAULT_CREATE_MANY_BATCH_SIZE;\n\n const chunks = chunkArray(data, batchSize);\n\n if (options.bulk === true) {\n return await createManyBulk(ModelClass, chunks);\n }\n\n const created: TModel[] = [];\n\n for (const chunk of chunks) {\n const models = chunk.map((item) => new ModelClass(item)) as TModel[];\n\n // Reserve one contiguous id block for the whole chunk (1 counter op instead\n // of N), pre-seeding each id-less model so its per-row save() no-ops id-gen.\n await assignIdBlock(ModelClass, models);\n\n const chunkModels = await Promise.all(\n models.map(async (model) => {\n await model.save();\n return model;\n }),\n );\n\n created.push(...chunkModels);\n }\n\n return created;\n}\n\n/**\n * Reserve a single contiguous id block for one chunk and pre-assign the ids to\n * the models that don't already carry one, so the per-row writer's id\n * generation no-ops (its `model.get(\"id\")` guard short-circuits). This turns N\n * per-row counter round-trips into ONE per chunk.\n *\n * Falls back to per-row generation (a no-op here) when:\n * - the model disables auto-generation (`autoGenerateId === false`) — e.g. SQL,\n * which uses native `SERIAL`;\n * - the data source's id generator has no batch API (`generateNextIds`) — the\n * optional contract member is feature-detected;\n * - the model uses a random initial id / increment — a random stride can't form\n * a contiguous block, so those models keep per-row generation.\n *\n * Only models WITHOUT a caller-supplied id consume a block slot, so a chunk\n * mixing supplied and auto ids allocates exactly the right number (no gaps).\n *\n * @param ModelClass - The model class being inserted.\n * @param models - The freshly-constructed (unsaved) models for one chunk.\n */\nasync function assignIdBlock<TModel extends Model>(\n ModelClass: ChildModel<TModel>,\n models: TModel[],\n): Promise<void> {\n if (!ModelClass.autoGenerateId || ModelClass.randomInitialId || ModelClass.randomIncrement) {\n return;\n }\n\n const idGenerator = ModelClass.getDataSource().idGenerator;\n\n if (!idGenerator || typeof idGenerator.generateNextIds !== \"function\") {\n return;\n }\n\n const idLessModels = models.filter((model) => !model.get(\"id\"));\n\n if (idLessModels.length === 0) {\n return;\n }\n\n const ids = await idGenerator.generateNextIds({\n table: ModelClass.table,\n initialId: ModelClass.initialId || 1,\n incrementIdBy: ModelClass.incrementIdBy || 1,\n count: idLessModels.length,\n });\n\n // Enforce the contract at this pluggable, feature-detected boundary: a\n // non-conforming generator returning the wrong count would otherwise set\n // `id = undefined` on the unmatched rows, the per-row writer would silently\n // re-generate single ids, and the reserved block would no longer match what\n // is persisted. Fail loud instead of corrupting the sequence.\n if (ids.length !== idLessModels.length) {\n throw new Error(\n `generateNextIds returned ${ids.length} id(s) for ${idLessModels.length} row(s) on ` +\n `\"${ModelClass.table}\" — a batch id generator must return exactly the requested count.`,\n );\n }\n\n idLessModels.forEach((model, index) => {\n model.set(\"id\", ids[index]);\n });\n}\n\n/**\n * Bulk variant of {@link createManyRecords}: prep each row through the writer\n * pipeline (validation, casting, timestamps, defaults, id-generation) without\n * touching the database, then flush each chunk with a single\n * `driver.insertMany` call.\n *\n * The writer reuse is achieved by swapping the driver's single-row `insert`\n * for a capturing stub for the lifetime of the bulk operation: running\n * `writer.save({ skipEvents, skipSync })` exercises the real prep but records\n * the prepared document instead of issuing N single-row inserts. The original\n * `insert` is always restored in `finally`.\n *\n * @param ModelClass - The model class to create records for.\n * @param chunks - Pre-chunked rows.\n * @returns The created model instances with driver-returned values merged in.\n */\nasync function createManyBulk<\n TModel extends Model,\n TSchema extends ModelSchema = TModel extends Model<infer S> ? S : ModelSchema,\n>(ModelClass: ChildModel<TModel>, chunks: Partial<TSchema>[][]): Promise<TModel[]> {\n const dataSource = ModelClass.getDataSource();\n const driver = dataSource.driver;\n const table = ModelClass.table;\n // Keep the exact original reference so it can be restored verbatim (binding a\n // copy would, for a spied driver, replace the spy with a non-spy wrapper).\n const originalInsert = driver.insert;\n\n // Capture the prepared (validated/casted/timestamped/id-generated) document\n // instead of inserting it per row, so the writer's prep runs exactly once\n // per model while the actual write is deferred to a single insertMany.\n driver.insert = (async (\n _table: string,\n document: Record<string, unknown>,\n ): Promise<InsertResult> => {\n return { document };\n }) as typeof driver.insert;\n\n const created: TModel[] = [];\n\n try {\n for (const chunk of chunks) {\n const models = chunk.map((item) => new ModelClass(item)) as TModel[];\n\n // Reserve one contiguous id block for the whole chunk (1 counter op\n // instead of N), pre-seeding each id-less model so the per-row writer's\n // id generation no-ops.\n await assignIdBlock(ModelClass, models);\n\n // Prep every model through the real writer pipeline. The captured\n // `insert` keeps this off the wire while still mutating each model's\n // data with casts/timestamps/defaults/generated ids.\n const preparedDocuments = await Promise.all(\n models.map(async (model) => {\n const writer = new DatabaseWriter(model);\n await writer.save({ skipEvents: true, skipSync: true });\n return { ...model.data } as Record<string, unknown>;\n }),\n );\n\n const results = await driver.insertMany(table, preparedDocuments);\n\n // Merge driver-returned values (generated _id, timestamps, RETURNING *)\n // back onto each model so the returned instances reflect persisted state.\n models.forEach((model, index) => {\n const result = results[index] as InsertResult | Record<string, unknown> | undefined;\n\n if (result) {\n const returnedDocument =\n \"document\" in (result as Record<string, unknown>)\n ? (result as InsertResult).document\n : result;\n\n model.merge(returnedDocument as Record<string, unknown>);\n }\n\n model.dirtyTracker.reset();\n model.isNew = false;\n });\n\n created.push(...models);\n }\n } finally {\n driver.insert = originalInsert;\n }\n\n return created;\n}\n\nexport async function findOrCreateRecord<\n TModel extends Model,\n TSchema extends ModelSchema = TModel extends Model<infer S> ? S : ModelSchema,\n>(\n ModelClass: ChildModel<TModel>,\n filter: Partial<TSchema>,\n data: Partial<TSchema>,\n): Promise<TModel> {\n const existing = await ModelClass.first(filter as Record<string, unknown>);\n\n if (existing) {\n return existing;\n }\n\n return await createRecord(ModelClass, { ...filter, ...data } as Partial<TSchema>);\n}\n\nexport async function upsertRecord<\n TModel extends Model,\n TSchema extends ModelSchema = TModel extends Model<infer S> ? S : ModelSchema,\n>(\n ModelClass: ChildModel<TModel>,\n filter: Partial<TSchema>,\n data: Partial<TSchema>,\n options?: Record<string, unknown>,\n): Promise<TModel> {\n const driver = ModelClass.getDriver();\n const mergedData = { ...filter, ...data } as Record<string, unknown>;\n\n const tempModel = new ModelClass(mergedData as Partial<TSchema>);\n tempModel.isNew = true;\n\n await emitModelEvent(tempModel, \"saving\", {\n isInsert: true,\n options,\n mode: \"upsert\",\n });\n\n const createdAtColumn = ModelClass.createdAtColumn;\n const updatedAtColumn = ModelClass.updatedAtColumn;\n\n if (createdAtColumn !== false && createdAtColumn !== undefined) {\n const createdAtKey = createdAtColumn as string;\n if (!mergedData[createdAtKey]) {\n mergedData[createdAtKey] = new Date();\n }\n }\n\n if (updatedAtColumn !== false && updatedAtColumn !== undefined) {\n const updatedAtKey = updatedAtColumn as string;\n mergedData[updatedAtKey] = new Date();\n }\n\n await emitModelEvent(tempModel, \"saving\", { filter, data: mergedData, options, mode: \"upsert\" });\n\n const result = await driver.upsert(ModelClass.table, filter as Record<string, unknown>, mergedData, options);\n\n const model = ModelClass.hydrate(result as Record<string, unknown>) as TModel;\n model.dirtyTracker.reset();\n\n await emitModelEvent(model, \"saved\", { filter, data: result, options, mode: \"upsert\" });\n\n return model;\n}\n"],"mappings":"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"}
@@ -6,8 +6,9 @@ import { LoadedRelationResult, PivotData, PivotIds, RelationDefinition } from ".
6
6
  import { PivotOperations } from "../relations/pivot-operations.mjs";
7
7
  import { ModelSnapshot } from "../relations/relation-hydrator.mjs";
8
8
  import { ModelSyncOperationContract } from "../sync/types.mjs";
9
+ import { CreateManyOptions } from "./methods/write-methods.mjs";
9
10
  import { PaginationOptions, PaginationResult, QueryBuilderContract, WhereCallback, WhereObject, WhereOperator } from "../contracts/query-builder.contract.mjs";
10
- import { DriverContract, UpdateOperations } from "../contracts/database-driver.contract.mjs";
11
+ import { DriverContract, RawQueryResult, UpdateOperations } from "../contracts/database-driver.contract.mjs";
11
12
  import { RemoverResult } from "../contracts/database-remover.contract.mjs";
12
13
  import { WriterOptions } from "../contracts/database-writer.contract.mjs";
13
14
  import { DataSource } from "../data-source/data-source.mjs";
@@ -860,6 +861,37 @@ declare abstract class Model<TSchema extends ModelSchema = ModelSchema> {
860
861
  * Get driver instance
861
862
  */
862
863
  static getDriver(): DriverContract;
864
+ /**
865
+ * Execute a raw query against this model's driver.
866
+ *
867
+ * Delegates to `getDriver().query`, so it inherits the driver's
868
+ * transaction awareness: when called inside an active `transaction()`
869
+ * scope the query auto-joins that transaction's client/session, otherwise
870
+ * it runs on the pool. The return value is the driver's raw result
871
+ * ({@link RawQueryResult}) — `rows` typed as `T` plus `rowCount` — not
872
+ * hydrated model instances.
873
+ *
874
+ * Note: MongoDB drivers throw, as they do not support raw SQL.
875
+ *
876
+ * @typeParam T - The expected row shape.
877
+ * @param sql - Raw SQL string (driver dialect).
878
+ * @param params - Optional positional query parameters.
879
+ * @returns The driver's raw query result.
880
+ *
881
+ * @example
882
+ * ```typescript
883
+ * const { rows } = await User.raw<{ id: number; total: number }>(
884
+ * "SELECT id, COUNT(*) AS total FROM orders WHERE user_id = $1 GROUP BY id",
885
+ * [userId],
886
+ * );
887
+ *
888
+ * // Auto-joins the active transaction() scope:
889
+ * await User.transaction(async () => {
890
+ * await User.raw("UPDATE users SET active = true WHERE id = $1", [id]);
891
+ * });
892
+ * ```
893
+ */
894
+ static raw<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<RawQueryResult<T>>;
863
895
  /**
864
896
  * Generate next id and set it to current model's id
865
897
  */
@@ -1446,9 +1478,38 @@ declare abstract class Model<TSchema extends ModelSchema = ModelSchema> {
1446
1478
  */
1447
1479
  static create<TModel extends Model = Model, TSchema extends ModelSchema = (TModel extends Model<infer S> ? S : ModelSchema)>(this: ChildModel<TModel>, data: Partial<TSchema>): Promise<TModel>;
1448
1480
  /**
1449
- * Create many documents and return an array of created models
1481
+ * Create many records and return an array of created models.
1482
+ *
1483
+ * The work is always chunked into batches of `options.batchSize`
1484
+ * (default 500) so a huge input array can't overwhelm the driver.
1485
+ *
1486
+ * **Default path** (no options, or `bulk` falsy): each row is persisted
1487
+ * through `save()`, preserving model hooks, lifecycle events, casts and
1488
+ * generated ids. Each chunk runs under a single `Promise.all`.
1489
+ *
1490
+ * **Bulk path** (`bulk: true`): each chunk is routed to the driver's native
1491
+ * multi-row insert (`insertMany`) for 10–100× throughput. This SKIPS the
1492
+ * per-row save lifecycle (no `saving` / `creating` / `created` / `saved`
1493
+ * events, hooks, or sync). Casts, timestamps, defaults and id-generation are
1494
+ * still applied (rows are prepped through the same writer pipeline) so the
1495
+ * persisted columns match the default path.
1496
+ *
1497
+ * An empty array is a no-op that never touches the driver.
1498
+ *
1499
+ * @param data - The rows to insert.
1500
+ * @param options - Chunking / bulk options.
1501
+ * @returns The created model instances.
1502
+ *
1503
+ * @example
1504
+ * ```typescript
1505
+ * // Default: per-row save(), chunked in batches of 500
1506
+ * const users = await User.createMany(rows);
1507
+ *
1508
+ * // Bulk: one multi-row INSERT per 1000-row chunk (skips per-row hooks)
1509
+ * const users = await User.createMany(rows, { bulk: true, batchSize: 1000 });
1510
+ * ```
1450
1511
  */
1451
- static createMany<TModel extends Model = Model, TSchema extends ModelSchema = (TModel extends Model<infer S> ? S : ModelSchema)>(this: ChildModel<TModel>, data: Partial<TSchema>[]): Promise<TModel[]>;
1512
+ static createMany<TModel extends Model = Model, TSchema extends ModelSchema = (TModel extends Model<infer S> ? S : ModelSchema)>(this: ChildModel<TModel>, data: Partial<TSchema>[], options?: CreateManyOptions): Promise<TModel[]>;
1452
1513
  /**
1453
1514
  * Find a record or create it if not found.
1454
1515
  *
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.mts","names":[],"sources":["../../../../../../../@warlock.js/cascade/src/model/model.ts"],"mappings":"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"}
1
+ {"version":3,"file":"model.d.mts","names":[],"sources":["../../../../../../../@warlock.js/cascade/src/model/model.ts"],"mappings":"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"}
@@ -856,6 +856,39 @@ var Model = class Model {
856
856
  return this.getDataSource().driver;
857
857
  }
858
858
  /**
859
+ * Execute a raw query against this model's driver.
860
+ *
861
+ * Delegates to `getDriver().query`, so it inherits the driver's
862
+ * transaction awareness: when called inside an active `transaction()`
863
+ * scope the query auto-joins that transaction's client/session, otherwise
864
+ * it runs on the pool. The return value is the driver's raw result
865
+ * ({@link RawQueryResult}) — `rows` typed as `T` plus `rowCount` — not
866
+ * hydrated model instances.
867
+ *
868
+ * Note: MongoDB drivers throw, as they do not support raw SQL.
869
+ *
870
+ * @typeParam T - The expected row shape.
871
+ * @param sql - Raw SQL string (driver dialect).
872
+ * @param params - Optional positional query parameters.
873
+ * @returns The driver's raw query result.
874
+ *
875
+ * @example
876
+ * ```typescript
877
+ * const { rows } = await User.raw<{ id: number; total: number }>(
878
+ * "SELECT id, COUNT(*) AS total FROM orders WHERE user_id = $1 GROUP BY id",
879
+ * [userId],
880
+ * );
881
+ *
882
+ * // Auto-joins the active transaction() scope:
883
+ * await User.transaction(async () => {
884
+ * await User.raw("UPDATE users SET active = true WHERE id = $1", [id]);
885
+ * });
886
+ * ```
887
+ */
888
+ static raw(sql, params) {
889
+ return this.getDriver().query(sql, params);
890
+ }
891
+ /**
859
892
  * Generate next id and set it to current model's id
860
893
  */
861
894
  async generateNextId() {
@@ -1393,10 +1426,39 @@ var Model = class Model {
1393
1426
  return createRecord(this, data);
1394
1427
  }
1395
1428
  /**
1396
- * Create many documents and return an array of created models
1429
+ * Create many records and return an array of created models.
1430
+ *
1431
+ * The work is always chunked into batches of `options.batchSize`
1432
+ * (default 500) so a huge input array can't overwhelm the driver.
1433
+ *
1434
+ * **Default path** (no options, or `bulk` falsy): each row is persisted
1435
+ * through `save()`, preserving model hooks, lifecycle events, casts and
1436
+ * generated ids. Each chunk runs under a single `Promise.all`.
1437
+ *
1438
+ * **Bulk path** (`bulk: true`): each chunk is routed to the driver's native
1439
+ * multi-row insert (`insertMany`) for 10–100× throughput. This SKIPS the
1440
+ * per-row save lifecycle (no `saving` / `creating` / `created` / `saved`
1441
+ * events, hooks, or sync). Casts, timestamps, defaults and id-generation are
1442
+ * still applied (rows are prepped through the same writer pipeline) so the
1443
+ * persisted columns match the default path.
1444
+ *
1445
+ * An empty array is a no-op that never touches the driver.
1446
+ *
1447
+ * @param data - The rows to insert.
1448
+ * @param options - Chunking / bulk options.
1449
+ * @returns The created model instances.
1450
+ *
1451
+ * @example
1452
+ * ```typescript
1453
+ * // Default: per-row save(), chunked in batches of 500
1454
+ * const users = await User.createMany(rows);
1455
+ *
1456
+ * // Bulk: one multi-row INSERT per 1000-row chunk (skips per-row hooks)
1457
+ * const users = await User.createMany(rows, { bulk: true, batchSize: 1000 });
1458
+ * ```
1397
1459
  */
1398
- static async createMany(data) {
1399
- return createManyRecords(this, data);
1460
+ static async createMany(data, options) {
1461
+ return createManyRecords(this, data, options);
1400
1462
  }
1401
1463
  /**
1402
1464
  * Find a record or create it if not found.