@c9up/atlas 0.3.8 → 0.3.9

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.
@@ -130,7 +130,7 @@ function withRegistryCasts(spec) {
130
130
  */
131
131
  export function compileStatementNative(spec, dialect = defaultDialect) {
132
132
  if (!native) {
133
- throw new Error("[ATLAS_NAPI_NOT_FOUND] Rust query compiler not available. Build with: cargo build --release", loadError !== undefined ? { cause: loadError } : undefined);
133
+ throw new Error("[E_ATLAS_NAPI_NOT_FOUND] Rust query compiler not available. Build with: cargo build --release", loadError !== undefined ? { cause: loadError } : undefined);
134
134
  }
135
135
  const json = native.compileStatement(JSON.stringify(withRegistryCasts(spec)), dialect);
136
136
  return JSON.parse(json);
@@ -1 +1 @@
1
- {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/query/native.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/query/native.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE3D,MAAM,WAAW,GAA2B;IAC3C,WAAW,EAAE,eAAe;IAC5B,YAAY,EAAE,YAAY;IAC1B,cAAc,EAAE,cAAc;IAC9B,WAAW,EAAE,gBAAgB;IAC7B,aAAa,EAAE,iBAAiB;CAChC,CAAC;AAcF,IAAI,MAAiC,CAAC;AAEtC,IAAI,SAAkB,CAAC;AAEvB,IAAI,CAAC;IACJ,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC;IAClD,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,MAAM,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;AACF,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACZ,SAAS,GAAG,CAAC,CAAC;AACf,CAAC;AAiBD,MAAM,eAAe,GAAiC;IACrD,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,gBAAgB,EAAE,QAAQ;IAC1B,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,UAAU;IACtB,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;CACf,CAAC;AAEF,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,kEAAkE;AAClE,IAAI,cAAc,GAAiB,QAAQ,CAAC;AAE5C,MAAM,UAAU,eAAe,CAAC,OAAqB;IACpD,cAAc,GAAG,OAAO,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,eAAe;IAC9B,OAAO,cAAc,CAAC;AACvB,CAAC;AAOD;;;;;;;;GAQG;AACH,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkC,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAChC,YAAY,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CACjC,KAAa,EACb,KAA6B;IAE7B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC5C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CACjC,KAAa,EACb,MAAc,EACd,IAAY;IAEZ,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,QAAQ;QAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;;QACjC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IAClC,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;CACR,CAAC,CAAC;AAEH;;;;;GAKG;AACH,SAAS,cAAc,CAAC,CAAU;IACjC,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACtC,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAC7B,IACC,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAC5B,CAAC;QACF,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,0EAA0E;IAC1E,2EAA2E;IAC3E,MAAM,QAAQ,GACb,OAAO,IAAI,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,EAAE,EAAE,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACrC,IAAY,EACZ,UAAwB,cAAc;IAEtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACd,+FAA+F,EAC/F,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC1D,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,CACnC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EACvC,OAAO,CACP,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c9up/atlas",
3
- "version": "0.3.8",
3
+ "version": "0.3.9",
4
4
  "description": "Atlas — Data Mapper ORM for the Ream framework",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1028,15 +1028,34 @@ export class BaseRepository<T extends BaseEntity> {
1028
1028
  for (const e of entities) await r.#insert(e);
1029
1029
  });
1030
1030
  } else {
1031
+ // Everything `#insert` does to a row before building it, the batch has
1032
+ // to do too. It did not: the multi-row path went straight to
1033
+ // `#entityToRowPairs`, so a `@PrimaryKey({ generated: 'uuid' })` was
1034
+ // never generated — the insert reached the database with a null id and
1035
+ // failed on the not-null constraint — and an
1036
+ // `@column.dateTime({ autoCreate: true })` was never filled, so a row
1037
+ // created in a batch carried a different timestamp story than the same
1038
+ // row created on its own. The mysql branch above was correct because it
1039
+ // goes through `#insert` per row; only this one bypassed it.
1040
+ for (const e of entities) {
1041
+ this.#applyPrimaryKeyGenerator(e);
1042
+ this.#applyAutoTimestamps(e, "insert");
1043
+ }
1031
1044
  const specRows = entities.map((e) => this.#entityToRowPairs(e));
1032
1045
  const spec = {
1033
1046
  kind: "insert",
1034
1047
  table: this.#tableName,
1035
1048
  rows: specRows,
1036
1049
  casts: this.#castTypes,
1050
+ // The primary key is already in `#columns`, so listing it first
1051
+ // returned it twice — `RETURNING "id", "id", …`. Harmless on
1052
+ // Postgres, but a duplicate name in a returned row is ambiguous
1053
+ // for anything that maps by column name.
1037
1054
  returning: [
1038
- this.#dbColumn(this.#primaryKey),
1039
- ...this.#columns.map((c) => this.#dbColumn(c)),
1055
+ ...new Set([
1056
+ this.#dbColumn(this.#primaryKey),
1057
+ ...this.#columns.map((c) => this.#dbColumn(c)),
1058
+ ]),
1040
1059
  ],
1041
1060
  };
1042
1061
  const compiled = compileStatementNative(spec, this.#dialect);
package/src/ModelQuery.ts CHANGED
@@ -494,7 +494,7 @@ type UnionArg = ModelQuery<BaseEntity> | ((q: ModelQuery<BaseEntity>) => void);
494
494
  *
495
495
  * Enable via:
496
496
  * - `setAtlasStrictMode(true)` at app bootstrap
497
- * - `ATLAS_STRICT=1` environment variable (picked up lazily on first call)
497
+ * - `E_ATLAS_STRICT=1` environment variable (picked up lazily on first call)
498
498
  *
499
499
  * Framework-internal call sites that legitimately need raw SQL (relation
500
500
  * resolvers, preload join predicates) bypass strict mode via the private
@@ -511,7 +511,8 @@ export function setAtlasStrictMode(enabled: boolean): void {
511
511
  export function isAtlasStrictMode(): boolean {
512
512
  if (atlasStrictMode === undefined) {
513
513
  atlasStrictMode =
514
- process.env.ATLAS_STRICT === "1" || process.env.ATLAS_STRICT === "true";
514
+ process.env.E_ATLAS_STRICT === "1" ||
515
+ process.env.E_ATLAS_STRICT === "true";
515
516
  }
516
517
  return atlasStrictMode;
517
518
  }
@@ -1483,7 +1484,7 @@ export class ModelQuery<T extends BaseEntity> {
1483
1484
  * query.whereRaw('total > ? AND created_at < ?', [100, '2026-01-01'])
1484
1485
  *
1485
1486
  * **Strict mode**: when `setAtlasStrictMode(true)` is active (or the
1486
- * `ATLAS_STRICT` env var is set), this method throws unless called via the
1487
+ * `E_ATLAS_STRICT` env var is set), this method throws unless called via the
1487
1488
  * framework-internal `__unsafeWhereRaw` path. Production apps should enable
1488
1489
  * strict mode and rewrite call sites to use `whereExpr()` / structured
1489
1490
  * builders.
@@ -2415,7 +2416,7 @@ export class ModelQuery<T extends BaseEntity> {
2415
2416
  * The fragment keeps its position among the plain `orderBy` terms.
2416
2417
  *
2417
2418
  * **Strict mode**: like {@link whereRaw}, this throws when
2418
- * `setAtlasStrictMode(true)` (or `ATLAS_STRICT`) is on.
2419
+ * `setAtlasStrictMode(true)` (or `E_ATLAS_STRICT`) is on.
2419
2420
  *
2420
2421
  * @unsafe Raw SQL fragment — never concatenate user input into `sql`.
2421
2422
  */
@@ -2442,7 +2443,7 @@ export class ModelQuery<T extends BaseEntity> {
2442
2443
  * The fragment keeps its position among the plain `groupBy` terms.
2443
2444
  *
2444
2445
  * **Strict mode**: like {@link whereRaw}, this throws when
2445
- * `setAtlasStrictMode(true)` (or `ATLAS_STRICT`) is on.
2446
+ * `setAtlasStrictMode(true)` (or `E_ATLAS_STRICT`) is on.
2446
2447
  *
2447
2448
  * @unsafe Raw SQL fragment — never concatenate user input into `sql`.
2448
2449
  */
package/src/errors.ts CHANGED
@@ -16,7 +16,13 @@ export class AtlasError extends Error {
16
16
  constructor(code: string, message: string, options?: { hint?: string }) {
17
17
  super(message);
18
18
  this.name = "AtlasError";
19
- this.code = code.startsWith("ATLAS_") ? code : `ATLAS_${code}`;
19
+ // One namespace, one prefix. `E_` is what every framework code carries,
20
+ // and the package name after it says which package raised it — without
21
+ // it, `E_FORBIDDEN` would mean three different things across the
22
+ // ecosystem and an application could not tell them apart. A code that
23
+ // already starts with `E_` is passed through untouched: that is how the
24
+ // AdonisJS identifiers keep the exact spelling a consumer branches on.
25
+ this.code = code.startsWith("E_") ? code : `E_ATLAS_${code}`;
20
26
  this.hint = options?.hint;
21
27
  }
22
28
  }
@@ -190,7 +190,7 @@ export function compileStatementNative(
190
190
  ): CompiledStatement {
191
191
  if (!native) {
192
192
  throw new Error(
193
- "[ATLAS_NAPI_NOT_FOUND] Rust query compiler not available. Build with: cargo build --release",
193
+ "[E_ATLAS_NAPI_NOT_FOUND] Rust query compiler not available. Build with: cargo build --release",
194
194
  loadError !== undefined ? { cause: loadError } : undefined,
195
195
  );
196
196
  }