pipework 0.170.0 → 0.171.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.171.0
4
+
5
+ - **Fixed: typed writes accept readonly tuples and arrays** (#714). Since typed insert values, a `field.jsonb(check.tuple([...]))` or `field.jsonb(check.array(...))` column refused a `readonly` value (`TS4104: The type 'Box' is 'readonly' and cannot be assigned to the mutable type`), so an app keeping its data readonly had to copy it to insert. `pipe.insert(T).values(...)`, `pipe.upsert(T).values(...)` and `.set(...)` on update and upsert now accept the readonly form of every tuple and array in a column's type, including inside jsonb objects; a wrong length, a wrong element type or an unknown key is still refused. Types only; nothing changes at runtime.
6
+
3
7
  ## 0.170.0
4
8
 
5
9
  - **Added: `alerts.source.unitFault`, so a crash-looping or OOM-killed service raises an alert** (#711). Add `ExecStopPost=pipework alerts unit-fault --unit %n` (optionally `--database <name>`) to a systemd unit: the command reads `$SERVICE_RESULT`, `$EXIT_CODE` and `$EXIT_STATUS` and, for any stop other than `success` (`oom-kill`, `signal`, `exit-code`, `timeout`, `watchdog`, ...), writes one row to the new `pipework_unit_faults` table over one short connection, with no manifold boot, so it works while the service itself is down. `alerts.source.unitFault({ window, owner, runbook, units? })` raises `unit-fault:<unit>` while a unit has faults within `window` ms, reading `subseam-core: oom-kill x22 in 85 min`, with a context of `{ count, lastResult, lastExitCode, lastExitStatus, firstAt, lastAt }`; it resolves once the window passes with no new fault. The table comes with the `alerts` blueprint flag: run your migration generator after upgrading.
@@ -1,12 +1,12 @@
1
1
  import type { PgTable } from '../query/pg-core/index.js';
2
- import type { PgUpdateSetSource } from '../query/pg-core/query-builders/update.js';
2
+ import type { UpdateSetValues } from './values.js';
3
3
  import type { SQL } from '../db/types.js';
4
4
  import type { DefinedTable } from '../domain/types.js';
5
5
  import type { WriteState } from './state.js';
6
6
  export declare class UpdateBuilder<T extends PgTable, TResult = unknown> implements PromiseLike<TResult> {
7
7
  private readonly state;
8
8
  constructor(state: WriteState);
9
- set(values: PgUpdateSetSource<T>): UpdateBuilder<T, TResult>;
9
+ set(values: UpdateSetValues<T>): UpdateBuilder<T, TResult>;
10
10
  where(condition: SQL): UpdateBuilder<T, TResult>;
11
11
  returning(): UpdateBuilder<T, Record<string, unknown>[]>;
12
12
  returning<TShape extends Record<string, unknown>>(shape: TShape): UpdateBuilder<T, Record<string, unknown>[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/data/write/update.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAA;AAClF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,qBAAa,aAAa,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,GAAG,OAAO,CAAE,YAAW,WAAW,CAAC,OAAO,CAAC;IAClF,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,UAAU;IAE9C,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC;IAI5D,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC;IAIhD,SAAS,IAAI,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACxD,SAAS,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAM7G,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,SAAS,GAAG,KAAK,EAC1C,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,EAC/E,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,GAC5E,WAAW,CAAC,UAAU,GAAG,SAAS,CAAC;CAGvC;AAED,wGAAwG;AAExG,wBAAgB,MAAM,CAAC,CAAC,SAAS,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAG7F"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/data/write/update.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,qBAAa,aAAa,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,GAAG,OAAO,CAAE,YAAW,WAAW,CAAC,OAAO,CAAC;IAClF,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,UAAU;IAE9C,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC;IAI1D,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC;IAIhD,SAAS,IAAI,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACxD,SAAS,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAM7G,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,SAAS,GAAG,KAAK,EAC1C,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,EAC/E,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,GAC5E,WAAW,CAAC,UAAU,GAAG,SAAS,CAAC;CAGvC;AAED,wGAAwG;AAExG,wBAAgB,MAAM,CAAC,CAAC,SAAS,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAG7F"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/data/write/update.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2EAA2E;AAC3E,yEAAyE;AACzE,+EAA+E;AAC/E,8EAA8E;AAC9E,8EAA8E;AAC9E,wEAAwE;AACxE,0EAA0E;AAC1E,0BAA0B;AAC1B,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,sCAAsC;AAKtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,KAAiB;QAAjB,UAAK,GAAL,KAAK,CAAY;IAAG,CAAC;IAElD,GAAG,CAAC,MAA4B;QAC9B,OAAO,IAAI,aAAa,CAAa,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,MAAiC,EAAE,CAAC,CAAA;IACjG,CAAC;IAED,KAAK,CAAC,SAAc;QAClB,OAAO,IAAI,aAAa,CAAa,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IAC3E,CAAC;IAID,SAAS,CAAC,KAA+B;QACvC,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAc,CAAC,CAAC,CAAC,KAAK,CAAA;QAC9D,OAAO,IAAI,aAAa,CAA+B,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,IAAI,CACF,WAA+E,EAC/E,UAA6E;QAE7E,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAA6C,EAAE,UAAU,CAAwC,CAAA;IACxI,CAAC;CACF;AAED,wGAAwG;AACxG,8KAA8K;AAC9K,MAAM,UAAU,MAAM,CAAwC,KAAQ;IACpE,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAClC,OAAO,IAAI,aAAa,CAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;AACjE,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/data/write/update.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2EAA2E;AAC3E,yEAAyE;AACzE,+EAA+E;AAC/E,8EAA8E;AAC9E,8EAA8E;AAC9E,wEAAwE;AACxE,0EAA0E;AAC1E,0BAA0B;AAC1B,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,sCAAsC;AAKtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,KAAiB;QAAjB,UAAK,GAAL,KAAK,CAAY;IAAG,CAAC;IAElD,GAAG,CAAC,MAA0B;QAC5B,OAAO,IAAI,aAAa,CAAa,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,MAAiC,EAAE,CAAC,CAAA;IACjG,CAAC;IAED,KAAK,CAAC,SAAc;QAClB,OAAO,IAAI,aAAa,CAAa,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IAC3E,CAAC;IAID,SAAS,CAAC,KAA+B;QACvC,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAc,CAAC,CAAC,CAAC,KAAK,CAAA;QAC9D,OAAO,IAAI,aAAa,CAA+B,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,IAAI,CACF,WAA+E,EAC/E,UAA6E;QAE7E,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAA6C,EAAE,UAAU,CAAwC,CAAA;IACxI,CAAC;CACF;AAED,wGAAwG;AACxG,8KAA8K;AAC9K,MAAM,UAAU,MAAM,CAAwC,KAAQ;IACpE,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAClC,OAAO,IAAI,aAAa,CAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;AACjE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { PgTable } from '../query/pg-core/index.js';
2
- import type { PgUpdateSetSource } from '../query/pg-core/query-builders/update.js';
2
+ import type { UpdateSetValues } from './values.js';
3
3
  import type { DefinedTable } from '../domain/types.js';
4
4
  import type { WriteState } from './state.js';
5
5
  import type { InsertValues } from './values.js';
@@ -8,7 +8,7 @@ export declare class UpsertBuilder<T extends PgTable, TResult = unknown> impleme
8
8
  constructor(state: WriteState);
9
9
  values(rows: InsertValues<T> | ReadonlyArray<InsertValues<T>>): UpsertBuilder<T, TResult>;
10
10
  onConflict(columns: readonly (keyof T['$inferSelect'] & string)[]): UpsertBuilder<T, TResult>;
11
- set(values: PgUpdateSetSource<T>): UpsertBuilder<T, TResult>;
11
+ set(values: UpdateSetValues<T>): UpsertBuilder<T, TResult>;
12
12
  returning(): UpsertBuilder<T, Record<string, unknown>[]>;
13
13
  returning<TShape extends Record<string, unknown>>(shape: TShape): UpsertBuilder<T, Record<string, unknown>[]>;
14
14
  then<TFulfilled = TResult, TRejected = never>(onfulfilled?: ((value: TResult) => TFulfilled | PromiseLike<TFulfilled>) | null, onrejected?: ((reason: unknown) => TRejected | PromiseLike<TRejected>) | null): PromiseLike<TFulfilled | TRejected>;
@@ -1 +1 @@
1
- {"version":3,"file":"upsert.d.ts","sourceRoot":"","sources":["../../../src/data/write/upsert.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAA;AAElF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/C,qBAAa,aAAa,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,GAAG,OAAO,CAAE,YAAW,WAAW,CAAC,OAAO,CAAC;IAClF,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,UAAU;IAE9C,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC;IAQzF,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC;IAO7F,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC;IAI5D,SAAS,IAAI,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACxD,SAAS,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAM7G,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,SAAS,GAAG,KAAK,EAC1C,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,EAC/E,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,GAC5E,WAAW,CAAC,UAAU,GAAG,SAAS,CAAC;CAGvC;AAED,2HAA2H;AAE3H,wBAAgB,MAAM,CAAC,CAAC,SAAS,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAG7F"}
1
+ {"version":3,"file":"upsert.d.ts","sourceRoot":"","sources":["../../../src/data/write/upsert.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/C,qBAAa,aAAa,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,GAAG,OAAO,CAAE,YAAW,WAAW,CAAC,OAAO,CAAC;IAClF,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,UAAU;IAE9C,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC;IAQzF,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC;IAO7F,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC;IAI1D,SAAS,IAAI,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACxD,SAAS,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAM7G,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,SAAS,GAAG,KAAK,EAC1C,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,EAC/E,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,GAC5E,WAAW,CAAC,UAAU,GAAG,SAAS,CAAC;CAGvC;AAED,2HAA2H;AAE3H,wBAAgB,MAAM,CAAC,CAAC,SAAS,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAG7F"}
@@ -1 +1 @@
1
- {"version":3,"file":"upsert.js","sourceRoot":"","sources":["../../../src/data/write/upsert.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,4EAA4E;AAC5E,yEAAyE;AACzE,EAAE;AACF,2EAA2E;AAC3E,gCAAgC;AAIhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAIlE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,KAAiB;QAAjB,UAAK,GAAL,KAAK,CAAY;IAAG,CAAC;IAElD,MAAM,CAAC,IAAsD;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACtD,OAAO,IAAI,aAAa,CAAa;YACnC,GAAG,IAAI,CAAC,KAAK;YACb,MAAM,EAAE,UAAoD;SAC7D,CAAC,CAAA;IACJ,CAAC;IAED,UAAU,CAAC,OAAsD;QAC/D,OAAO,IAAI,aAAa,CAAa;YACnC,GAAG,IAAI,CAAC,KAAK;YACb,iBAAiB,EAAE,OAA4B;SAChD,CAAC,CAAA;IACJ,CAAC;IAED,GAAG,CAAC,MAA4B;QAC9B,OAAO,IAAI,aAAa,CAAa,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,MAAiC,EAAE,CAAC,CAAA;IACjG,CAAC;IAID,SAAS,CAAC,KAA+B;QACvC,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAc,CAAC,CAAC,CAAC,KAAK,CAAA;QAC9D,OAAO,IAAI,aAAa,CAA+B,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,IAAI,CACF,WAA+E,EAC/E,UAA6E;QAE7E,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAA6C,EAAE,UAAU,CAAwC,CAAA;IACxI,CAAC;CACF;AAED,2HAA2H;AAC3H,8DAA8D;AAC9D,MAAM,UAAU,MAAM,CAAwC,KAAQ;IACpE,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAClC,OAAO,IAAI,aAAa,CAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;AACjE,CAAC"}
1
+ {"version":3,"file":"upsert.js","sourceRoot":"","sources":["../../../src/data/write/upsert.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,4EAA4E;AAC5E,yEAAyE;AACzE,EAAE;AACF,2EAA2E;AAC3E,gCAAgC;AAIhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAIlE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,KAAiB;QAAjB,UAAK,GAAL,KAAK,CAAY;IAAG,CAAC;IAElD,MAAM,CAAC,IAAsD;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACtD,OAAO,IAAI,aAAa,CAAa;YACnC,GAAG,IAAI,CAAC,KAAK;YACb,MAAM,EAAE,UAAoD;SAC7D,CAAC,CAAA;IACJ,CAAC;IAED,UAAU,CAAC,OAAsD;QAC/D,OAAO,IAAI,aAAa,CAAa;YACnC,GAAG,IAAI,CAAC,KAAK;YACb,iBAAiB,EAAE,OAA4B;SAChD,CAAC,CAAA;IACJ,CAAC;IAED,GAAG,CAAC,MAA0B;QAC5B,OAAO,IAAI,aAAa,CAAa,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,MAAiC,EAAE,CAAC,CAAA;IACjG,CAAC;IAID,SAAS,CAAC,KAA+B;QACvC,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAc,CAAC,CAAC,CAAC,KAAK,CAAA;QAC9D,OAAO,IAAI,aAAa,CAA+B,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,IAAI,CACF,WAA+E,EAC/E,UAA6E;QAE7E,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAA6C,EAAE,UAAU,CAAwC,CAAA;IACxI,CAAC;CACF;AAED,2HAA2H;AAC3H,8DAA8D;AAC9D,MAAM,UAAU,MAAM,CAAwC,KAAQ;IACpE,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAClC,OAAO,IAAI,aAAa,CAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;AACjE,CAAC"}
@@ -1,10 +1,31 @@
1
1
  import type { InferInsertModel } from '../query/index.js';
2
2
  import type { PgTable } from '../query/pg-core/index.js';
3
+ import type { PgUpdateSetSource } from '../query/pg-core/query-builders/update.js';
4
+ import type { Column } from '../query/column.js';
5
+ import type { Placeholder, SQL } from '../query/sql/sql.js';
6
+ /**
7
+ * A column value type widened to also accept the readonly form of every tuple
8
+ * and array inside it, since a write never changes the values it is given.
9
+ * Dates, SQL, placeholders, columns, functions, byte arrays and primitives pass
10
+ * through; unions distribute; plain objects are widened member by member.
11
+ */
12
+ export type AcceptReadonly<V> = unknown extends V ? V : V extends Date | SQL | Placeholder | Column | Uint8Array | ((...args: never[]) => unknown) ? V : V extends readonly unknown[] ? Readonly<{
13
+ [I in keyof V]: AcceptReadonly<V[I]>;
14
+ }> : V extends object ? {
15
+ [K in keyof V]: AcceptReadonly<V[K]>;
16
+ } : V;
3
17
  /**
4
18
  * The table's column-level insert shape: NOT NULL columns without a default are
5
19
  * required, nullable or defaulted ones optional, no other keys. Auto-managed
6
- * columns stay insertable. Falls back to an open record for a table whose
7
- * columns are not statically known (generic framework code).
20
+ * columns stay insertable. Tuple and array values may be readonly. Falls back to
21
+ * an open record for a table whose columns are not statically known (generic
22
+ * framework code).
8
23
  */
9
- export type InsertValues<T extends PgTable> = string extends keyof InferInsertModel<T> ? Record<string, any> : InferInsertModel<T>;
24
+ export type InsertValues<T extends PgTable> = string extends keyof InferInsertModel<T> ? Record<string, any> : {
25
+ [K in keyof InferInsertModel<T>]: AcceptReadonly<InferInsertModel<T>[K]>;
26
+ };
27
+ /** The `set(...)` shape of update and upsert, with tuple and array values allowed readonly. */
28
+ export type UpdateSetValues<T extends PgTable> = {
29
+ [K in keyof PgUpdateSetSource<T>]: AcceptReadonly<PgUpdateSetSource<T>[K]>;
30
+ };
10
31
  //# sourceMappingURL=values.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../../src/data/write/values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAExD;;;;;GAKG;AAEH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,OAAO,IAAI,MAAM,SAAS,MAAM,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../../src/data/write/values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAA;AAClF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAE3D;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAC1B,OAAO,SAAS,CAAC,GAAG,CAAC,GACnB,CAAC,SAAS,IAAI,GAAG,GAAG,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,GAC9F,CAAC,SAAS,SAAS,OAAO,EAAE,GAAG,QAAQ,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,GACjF,CAAC,SAAS,MAAM,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAC3D,CAAC,CAAA;AAEL;;;;;;GAMG;AAEH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,OAAO,IAAI,MAAM,SAAS,MAAM,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,gBAAgB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA;AAE3L,+FAA+F;AAC/F,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,IAAI;KAAG,CAAC,IAAI,MAAM,iBAAiB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pipework",
3
- "version": "0.170.0",
3
+ "version": "0.171.0",
4
4
  "description": "TypeScript framework for multi-tenant SaaS applications. PostgreSQL-only.",
5
5
  "type": "module",
6
6
  "license": "MIT",