pipework 0.7.18 → 0.7.19

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,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.7.19
4
+
5
+ - **`pipe.filter.increment()` / `decrement()`** — atomic column arithmetic for `.set()` clauses. `increment(column, amount)` produces `column + amount`; negative amounts or `decrement()` for subtraction (#218).
6
+ - **`pipe.filter.coalesce()`** — wraps any expression with `COALESCE(expr, default)`. Typed — return type matches the default value (#219).
7
+ - **`pipe.filter.now()`** — returns a `SQL<Date>` for PostgreSQL `now()`. Uses the database transaction timestamp, not the application clock (#220).
8
+ - **`jsonb.text()` / `jsonb.json()`** — JSONB field extraction. `text(column, key)` produces `column->>'key'` (text); `json(column, key)` produces `column->'key'` (JSONB). Composable with `pipe.filter` operators (#221).
9
+ - **`pipe.advisoryLock()`** — transaction-scoped advisory locks via `pg_advisory_xact_lock(hashtext(...))`. Accepts one or two string keys; released automatically at commit/rollback (#222).
10
+ - **`pipe.filter.scalar()`** — wraps a select query as a scalar subquery expression for use in `.values()` and `.set()` (#223).
11
+ - **`pipe.bulkSet()`** — bulk `UPDATE ... FROM (VALUES ...)` in a single statement. Updates multiple rows with per-row values, with typed column casts (#224).
12
+
3
13
  ## 0.7.18
4
14
 
5
15
  - **Root-level `scripts` in config** — `createManifold({ scripts: { prepare: '...' } })` merges custom npm scripts into the generated root `package.json`. The `preinstall` key is reserved and cannot be overridden (#211).
@@ -0,0 +1,4 @@
1
+ import type { DB } from './types.js';
2
+ /** Acquires a transaction-scoped advisory lock. Released automatically at commit/rollback. Multiple string keys are hashed independently into the two int4 arguments of pg_advisory_xact_lock. */
3
+ export declare function advisoryLock(db: DB, ...keys: string[]): Promise<void>;
4
+ //# sourceMappingURL=advisory-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advisory-lock.d.ts","sourceRoot":"","sources":["../../../src/data/db/advisory-lock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAA;AAEpC,kMAAkM;AAClM,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3E"}
@@ -0,0 +1,13 @@
1
+ import { sql } from './sql.js';
2
+ /** Acquires a transaction-scoped advisory lock. Released automatically at commit/rollback. Multiple string keys are hashed independently into the two int4 arguments of pg_advisory_xact_lock. */
3
+ export async function advisoryLock(db, ...keys) {
4
+ if (keys.length === 0)
5
+ throw new Error('advisoryLock requires at least one key');
6
+ if (keys.length === 1) {
7
+ await db.execute(sql `SELECT pg_advisory_xact_lock(hashtext(${keys[0]}))`);
8
+ }
9
+ else {
10
+ await db.execute(sql `SELECT pg_advisory_xact_lock(hashtext(${keys[0]}), hashtext(${keys[1]}))`);
11
+ }
12
+ }
13
+ //# sourceMappingURL=advisory-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advisory-lock.js","sourceRoot":"","sources":["../../../src/data/db/advisory-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAG9B,kMAAkM;AAClM,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAM,EAAE,GAAG,IAAc;IAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAChF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA,yCAAyC,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,CAAA;IAC5E,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA,yCAAyC,IAAI,CAAC,CAAC,CAAE,eAAe,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,CAAA;IACnG,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { DB, Table } from './types.js';
2
+ type PgCastType = 'uuid' | 'text' | 'integer' | 'bigint' | 'boolean' | 'jsonb' | 'timestamptz' | 'timestamp' | 'date' | 'numeric' | 'real' | 'double precision' | 'smallint' | 'interval';
3
+ interface BulkSetOptions<TRow extends Record<string, unknown>> {
4
+ readonly match: keyof TRow & string;
5
+ readonly set: ReadonlyArray<keyof TRow & string>;
6
+ readonly types: Readonly<Record<keyof TRow & string, PgCastType>>;
7
+ }
8
+ /** Executes UPDATE ... FROM (VALUES ...) for bulk per-row updates in a single statement. */
9
+ export declare function bulkSet<TRow extends Record<string, unknown>>(db: DB, table: Table, rows: readonly TRow[], options: BulkSetOptions<TRow>): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=bulk-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-set.d.ts","sourceRoot":"","sources":["../../../src/data/db/bulk-set.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,KAAK,EAAO,MAAM,YAAY,CAAA;AAGhD,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,kBAAkB,GAAG,UAAU,GAAG,UAAU,CAAA;AAEzL,UAAU,cAAc,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,MAAM,CAAA;IACnC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAA;IAChD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;CAClE;AAED,4FAA4F;AAC5F,wBAAsB,OAAO,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,SAAS,IAAI,EAAE,EACrB,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmCf"}
@@ -0,0 +1,34 @@
1
+ import { sql } from './sql.js';
2
+ import { getTableName, getTableColumns } from './generated/drizzle-orm/introspection.js';
3
+ /** Executes UPDATE ... FROM (VALUES ...) for bulk per-row updates in a single statement. */
4
+ export async function bulkSet(db, table, rows, options) {
5
+ if (rows.length === 0)
6
+ return;
7
+ const tableName = getTableName(table);
8
+ const columns = getTableColumns(table);
9
+ const allKeys = [options.match, ...options.set];
10
+ const valueRows = rows.map(row => {
11
+ const cols = allKeys.map(key => {
12
+ const cast = options.types[key];
13
+ const val = row[key];
14
+ if (cast === 'jsonb') {
15
+ return sql `${JSON.stringify(val)}::jsonb`;
16
+ }
17
+ return sql `${val}::${sql.raw(cast)}`;
18
+ });
19
+ return sql `(${sql.join(cols, sql `, `)})`;
20
+ });
21
+ const valuesClause = sql.join(valueRows, sql `, `);
22
+ const colNames = allKeys.map(k => {
23
+ const col = columns[k];
24
+ return col ? col.name : k;
25
+ });
26
+ const valsDef = colNames.join(', ');
27
+ const matchCol = columns[options.match]?.name ?? options.match;
28
+ const setClauses = options.set.map(key => {
29
+ const colName = columns[key]?.name ?? key;
30
+ return sql `${sql.raw('"' + colName + '"')} = ${sql.raw('_vals.' + '"' + colName + '"')}`;
31
+ });
32
+ await db.execute(sql `UPDATE ${sql.raw('"' + tableName + '"')} SET ${sql.join(setClauses, sql `, `)} FROM (VALUES ${valuesClause}) AS _vals(${sql.raw(valsDef)}) WHERE ${sql.raw('"' + tableName + '"')}.${sql.raw('"' + matchCol + '"')} = ${sql.raw('_vals.' + '"' + matchCol + '"')}`);
33
+ }
34
+ //# sourceMappingURL=bulk-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-set.js","sourceRoot":"","sources":["../../../src/data/db/bulk-set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { SQL, Column } from './types.js';
2
+ import type { SQLWrapper } from '../query/sql/sql.js';
3
+ /** Returns `column + amount`. Use negative amounts for subtraction. */
4
+ export declare function increment(column: Column | SQL, amount: number): SQL<number>;
5
+ /** Returns `column - amount`. Convenience wrapper — equivalent to `increment(column, -amount)`. */
6
+ export declare function decrement(column: Column | SQL, amount: number): SQL<number>;
7
+ /** Wraps an expression with COALESCE — returns `defaultValue` when the expression is NULL. */
8
+ export declare function coalesce<T>(expression: SQL | Column, defaultValue: T): SQL<T>;
9
+ /** Returns a SQL expression for PostgreSQL `now()` — the current transaction timestamp. */
10
+ export declare function now(): SQL<Date>;
11
+ /** Wraps a select query as a scalar subquery expression, usable in `.values()` and `.set()`. */
12
+ export declare function scalar<T>(subquery: SQLWrapper): SQL<T>;
13
+ //# sourceMappingURL=expressions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../../src/data/db/expressions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAErD,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAE3E;AAED,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAE3E;AAED,8FAA8F;AAC9F,wBAAgB,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,GAAG,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAE7E;AAED,2FAA2F;AAC3F,wBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAE/B;AAED,gGAAgG;AAChG,wBAAgB,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAEtD"}
@@ -0,0 +1,22 @@
1
+ import { sql } from './sql.js';
2
+ /** Returns `column + amount`. Use negative amounts for subtraction. */
3
+ export function increment(column, amount) {
4
+ return sql `${column} + ${amount}`;
5
+ }
6
+ /** Returns `column - amount`. Convenience wrapper — equivalent to `increment(column, -amount)`. */
7
+ export function decrement(column, amount) {
8
+ return sql `${column} - ${amount}`;
9
+ }
10
+ /** Wraps an expression with COALESCE — returns `defaultValue` when the expression is NULL. */
11
+ export function coalesce(expression, defaultValue) {
12
+ return sql `coalesce(${expression}, ${defaultValue})`;
13
+ }
14
+ /** Returns a SQL expression for PostgreSQL `now()` — the current transaction timestamp. */
15
+ export function now() {
16
+ return sql `now()`;
17
+ }
18
+ /** Wraps a select query as a scalar subquery expression, usable in `.values()` and `.set()`. */
19
+ export function scalar(subquery) {
20
+ return sql `(${subquery})`;
21
+ }
22
+ //# sourceMappingURL=expressions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../../src/data/db/expressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAI9B,uEAAuE;AACvE,MAAM,UAAU,SAAS,CAAC,MAAoB,EAAE,MAAc;IAC5D,OAAO,GAAG,CAAQ,GAAG,MAAM,MAAM,MAAM,EAAE,CAAA;AAC3C,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,SAAS,CAAC,MAAoB,EAAE,MAAc;IAC5D,OAAO,GAAG,CAAQ,GAAG,MAAM,MAAM,MAAM,EAAE,CAAA;AAC3C,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,QAAQ,CAAI,UAAwB,EAAE,YAAe;IACnE,OAAO,GAAG,CAAG,YAAY,UAAU,KAAK,YAAY,GAAG,CAAA;AACzD,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,GAAG;IACjB,OAAO,GAAG,CAAM,OAAO,CAAA;AACzB,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,MAAM,CAAI,QAAoB;IAC5C,OAAO,GAAG,CAAG,IAAI,QAAQ,GAAG,CAAA;AAC9B,CAAC"}
@@ -1,6 +1,12 @@
1
1
  import * as operators from './generated/drizzle-orm/operator.js';
2
2
  import * as aggregates from './generated/drizzle-orm/aggregate.js';
3
+ import { increment, decrement, coalesce, now, scalar } from './expressions.js';
3
4
  export declare const filter: {
5
+ readonly increment: typeof increment;
6
+ readonly decrement: typeof decrement;
7
+ readonly coalesce: typeof coalesce;
8
+ readonly now: typeof now;
9
+ readonly scalar: typeof scalar;
4
10
  readonly except: import("./generated/pg-core/type.js").PgCreateSetOperatorFn;
5
11
  readonly exceptAll: import("./generated/pg-core/type.js").PgCreateSetOperatorFn;
6
12
  readonly intersect: import("./generated/pg-core/type.js").PgCreateSetOperatorFn;
@@ -1 +1 @@
1
- {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/data/db/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,qCAAqC,CAAA;AAChE,OAAO,KAAK,UAAU,MAAM,sCAAsC,CAAA;AAGlE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIT,CAAA"}
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/data/db/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,qCAAqC,CAAA;AAChE,OAAO,KAAK,UAAU,MAAM,sCAAsC,CAAA;AAElE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE9E,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAST,CAAA"}
@@ -1,9 +1,15 @@
1
1
  import * as operators from './generated/drizzle-orm/operator.js';
2
2
  import * as aggregates from './generated/drizzle-orm/aggregate.js';
3
3
  import * as setOps from './generated/pg-core/set-operation.js';
4
+ import { increment, decrement, coalesce, now, scalar } from './expressions.js';
4
5
  export const filter = {
5
6
  ...operators,
6
7
  ...aggregates,
7
8
  ...setOps,
9
+ increment,
10
+ decrement,
11
+ coalesce,
12
+ now,
13
+ scalar,
8
14
  };
9
15
  //# sourceMappingURL=filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/data/db/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,qCAAqC,CAAA;AAChE,OAAO,KAAK,UAAU,MAAM,sCAAsC,CAAA;AAClE,OAAO,KAAK,MAAM,MAAM,sCAAsC,CAAA;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,GAAG,SAAS;IACZ,GAAG,UAAU;IACb,GAAG,MAAM;CACD,CAAA"}
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/data/db/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,qCAAqC,CAAA;AAChE,OAAO,KAAK,UAAU,MAAM,sCAAsC,CAAA;AAClE,OAAO,KAAK,MAAM,MAAM,sCAAsC,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE9E,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,GAAG,SAAS;IACZ,GAAG,UAAU;IACb,GAAG,MAAM;IACT,SAAS;IACT,SAAS;IACT,QAAQ;IACR,GAAG;IACH,MAAM;CACE,CAAA"}
@@ -1,6 +1,8 @@
1
1
  import { pipe as getDb } from './db.js';
2
2
  import { migrateAll, migrateOne } from '../migrate/index.js';
3
3
  import { excluded } from './excluded.js';
4
+ import { advisoryLock } from './advisory-lock.js';
5
+ import { bulkSet } from './bulk-set.js';
4
6
  import * as introspection from './generated/drizzle-orm/introspection.js';
5
7
  import * as relationOps from './generated/drizzle-orm/relation.js';
6
8
  import { define, definitions } from '../domain/index.js';
@@ -17,6 +19,10 @@ export declare const pipe: typeof getDb & {
17
19
  migrateOne: typeof migrateOne;
18
20
  /** Returns excluded-column references for onConflictDoUpdate set clauses. */
19
21
  excluded: typeof excluded;
22
+ /** Acquires a transaction-scoped advisory lock. Released at commit/rollback. */
23
+ advisoryLock: typeof advisoryLock;
24
+ /** Bulk UPDATE ... FROM (VALUES ...) — updates multiple rows with per-row values in a single statement. */
25
+ bulkSet: typeof bulkSet;
20
26
  /** Field builders for domain definitions — uuid(), text(), integer(), etc. */
21
27
  field: {
22
28
  uuid(): import("../domain/types.js").FieldDescriptor<string> & import("../domain/field.js").FieldModifiers<string>;
@@ -48,6 +54,11 @@ export declare const pipe: typeof getDb & {
48
54
  isTable: typeof introspection.isTable;
49
55
  /** Query operators and aggregates — eq, gt, lt, and, or, count, sum, etc. */
50
56
  filter: {
57
+ readonly increment: typeof import("./expressions.js").increment;
58
+ readonly decrement: typeof import("./expressions.js").decrement;
59
+ readonly coalesce: typeof import("./expressions.js").coalesce;
60
+ readonly now: typeof import("./expressions.js").now;
61
+ readonly scalar: typeof import("./expressions.js").scalar;
51
62
  readonly except: import("./generated/pg-core/type.js").PgCreateSetOperatorFn;
52
63
  readonly exceptAll: import("./generated/pg-core/type.js").PgCreateSetOperatorFn;
53
64
  readonly intersect: import("./generated/pg-core/type.js").PgCreateSetOperatorFn;
@@ -1 +1 @@
1
- {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../src/data/db/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,OAAO,KAAK,aAAa,MAAM,0CAA0C,CAAA;AACzE,OAAO,KAAK,WAAW,MAAM,qCAAqC,CAAA;AAGlE,OAAO,EAAS,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAG/D,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE3E,6EAA6E;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,6EAA6E;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,mJAAmJ;AACnJ,eAAO,MAAM,IAAI;IAUf,oDAAoD;;IAEpD,mDAAmD;;IAGnD,6EAA6E;;IAG7E,8EAA8E;;;;;;;;;;;;;;IAE9E,qFAAqF;;IAErF,6DAA6D;;;;;;;;;;;;;IArB7D,6EAA6E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuB7E,CAAA"}
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../src/data/db/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,aAAa,MAAM,0CAA0C,CAAA;AACzE,OAAO,KAAK,WAAW,MAAM,qCAAqC,CAAA;AAGlE,OAAO,EAAS,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAG/D,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE3E,6EAA6E;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,6EAA6E;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,mJAAmJ;AACnJ,eAAO,MAAM,IAAI;IAUf,oDAAoD;;IAEpD,mDAAmD;;IAGnD,6EAA6E;;IAG7E,gFAAgF;;IAGhF,2GAA2G;;IAG3G,8EAA8E;;;;;;;;;;;;;;IAE9E,qFAAqF;;IAErF,6DAA6D;;;;;;;;;;;;;IA3B7D,6EAA6E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B7E,CAAA"}
@@ -2,6 +2,8 @@ import { pipe as getDb } from './db.js';
2
2
  import { migrateAll, migrateOne } from '../migrate/index.js';
3
3
  import { filter } from './filter.js';
4
4
  import { excluded } from './excluded.js';
5
+ import { advisoryLock } from './advisory-lock.js';
6
+ import { bulkSet } from './bulk-set.js';
5
7
  // Auto-generated re-export layers (scaffold-namespace tool)
6
8
  import * as introspection from './generated/drizzle-orm/introspection.js';
7
9
  import * as relationOps from './generated/drizzle-orm/relation.js';
@@ -25,6 +27,10 @@ export const pipe = Object.assign(getDb, {
25
27
  migrateOne,
26
28
  /** Returns excluded-column references for onConflictDoUpdate set clauses. */
27
29
  excluded,
30
+ /** Acquires a transaction-scoped advisory lock. Released at commit/rollback. */
31
+ advisoryLock,
32
+ /** Bulk UPDATE ... FROM (VALUES ...) — updates multiple rows with per-row values in a single statement. */
33
+ bulkSet,
28
34
  /** Field builders for domain definitions — uuid(), text(), integer(), etc. */
29
35
  field,
30
36
  /** Registers a domain definition with table, validators, and factory projections. */
@@ -1 +1 @@
1
- {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/data/db/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,4DAA4D;AAC5D,OAAO,KAAK,aAAa,MAAM,0CAA0C,CAAA;AACzE,OAAO,KAAK,WAAW,MAAM,qCAAqC,CAAA;AAElE,qBAAqB;AACrB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAK/D,6EAA6E;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,6EAA6E;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,mJAAmJ;AACnJ,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;IACvC,6EAA6E;IAC7E,MAAM;IAEN,kGAAkG;IAClG,GAAG,aAAa;IAEhB,qDAAqD;IACrD,GAAG,WAAW;IAEd,oDAAoD;IACpD,OAAO,EAAE,UAAU;IACnB,mDAAmD;IACnD,UAAU;IAEV,6EAA6E;IAC7E,QAAQ;IAER,8EAA8E;IAC9E,KAAK;IACL,qFAAqF;IACrF,MAAM;IACN,6DAA6D;IAC7D,WAAW;CACZ,CAAC,CAAA"}
1
+ {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/data/db/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,4DAA4D;AAC5D,OAAO,KAAK,aAAa,MAAM,0CAA0C,CAAA;AACzE,OAAO,KAAK,WAAW,MAAM,qCAAqC,CAAA;AAElE,qBAAqB;AACrB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAK/D,6EAA6E;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,6EAA6E;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,mJAAmJ;AACnJ,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;IACvC,6EAA6E;IAC7E,MAAM;IAEN,kGAAkG;IAClG,GAAG,aAAa;IAEhB,qDAAqD;IACrD,GAAG,WAAW;IAEd,oDAAoD;IACpD,OAAO,EAAE,UAAU;IACnB,mDAAmD;IACnD,UAAU;IAEV,6EAA6E;IAC7E,QAAQ;IAER,gFAAgF;IAChF,YAAY;IAEZ,2GAA2G;IAC3G,OAAO;IAEP,8EAA8E;IAC9E,KAAK;IACL,qFAAqF;IACrF,MAAM;IACN,6DAA6D;IAC7D,WAAW;CACZ,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
- import { contains, containedBy, hasKey } from './query.js';
2
- /** JSONB query operators — typed helpers for PostgreSQL JSONB containment and key checks. */
1
+ import { contains, containedBy, hasKey, text, json } from './query.js';
2
+ /** JSONB query operators — typed helpers for PostgreSQL JSONB containment, key checks, and field extraction. */
3
3
  export declare const jsonb: {
4
4
  /** The @> containment operator — tests whether a JSONB column contains the given value. */
5
5
  contains: typeof contains;
@@ -7,5 +7,9 @@ export declare const jsonb: {
7
7
  containedBy: typeof containedBy;
8
8
  /** The ? key-existence operator — tests whether a JSONB column has the given top-level key. */
9
9
  hasKey: typeof hasKey;
10
+ /** Extracts a text value: `column->>'key'`. Composable with pipe.filter operators. */
11
+ text: typeof text;
12
+ /** Extracts a JSONB value: `column->'key'`. Returns JSONB — use with jsonb.contains() etc. */
13
+ json: typeof json;
10
14
  };
11
15
  //# sourceMappingURL=namespace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../src/data/jsonb/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAE1D,6FAA6F;AAC7F,eAAO,MAAM,KAAK;IAChB,2FAA2F;;IAE3F,mGAAmG;;IAEnG,+FAA+F;;CAEhG,CAAA"}
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../src/data/jsonb/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtE,gHAAgH;AAChH,eAAO,MAAM,KAAK;IAChB,2FAA2F;;IAE3F,mGAAmG;;IAEnG,+FAA+F;;IAE/F,sFAAsF;;IAEtF,8FAA8F;;CAE/F,CAAA"}
@@ -1,5 +1,5 @@
1
- import { contains, containedBy, hasKey } from './query.js';
2
- /** JSONB query operators — typed helpers for PostgreSQL JSONB containment and key checks. */
1
+ import { contains, containedBy, hasKey, text, json } from './query.js';
2
+ /** JSONB query operators — typed helpers for PostgreSQL JSONB containment, key checks, and field extraction. */
3
3
  export const jsonb = {
4
4
  /** The @> containment operator — tests whether a JSONB column contains the given value. */
5
5
  contains,
@@ -7,5 +7,9 @@ export const jsonb = {
7
7
  containedBy,
8
8
  /** The ? key-existence operator — tests whether a JSONB column has the given top-level key. */
9
9
  hasKey,
10
+ /** Extracts a text value: `column->>'key'`. Composable with pipe.filter operators. */
11
+ text,
12
+ /** Extracts a JSONB value: `column->'key'`. Returns JSONB — use with jsonb.contains() etc. */
13
+ json,
10
14
  };
11
15
  //# sourceMappingURL=namespace.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/data/jsonb/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAE1D,6FAA6F;AAC7F,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,2FAA2F;IAC3F,QAAQ;IACR,mGAAmG;IACnG,WAAW;IACX,+FAA+F;IAC/F,MAAM;CACP,CAAA"}
1
+ {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/data/jsonb/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtE,gHAAgH;AAChH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,2FAA2F;IAC3F,QAAQ;IACR,mGAAmG;IACnG,WAAW;IACX,+FAA+F;IAC/F,MAAM;IACN,sFAAsF;IACtF,IAAI;IACJ,8FAA8F;IAC9F,IAAI;CACL,CAAA"}
@@ -2,4 +2,8 @@ import type { SQL, Column } from '../db/types.js';
2
2
  export declare function contains(column: Column | SQL, value: unknown): SQL<boolean>;
3
3
  export declare function containedBy(column: Column | SQL, value: unknown): SQL<boolean>;
4
4
  export declare function hasKey(column: Column | SQL, key: string): SQL<boolean>;
5
+ /** Extracts a text value from a JSONB column: `column->>'key'`. Composable with pipe.filter operators (eq, ilike, etc.). */
6
+ export declare function text(column: Column | SQL, key: string): SQL<string>;
7
+ /** Extracts a JSONB value from a JSONB column: `column->'key'`. Returns JSONB, not text — use with jsonb.contains() etc. */
8
+ export declare function json(column: Column | SQL, key: string): SQL;
5
9
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/data/jsonb/query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEjD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAE3E;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAE9E;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAEtE"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/data/jsonb/query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEjD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAE3E;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAE9E;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAEtE;AAED,4HAA4H;AAC5H,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAEnE;AAED,4HAA4H;AAC5H,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAE3D"}
@@ -8,4 +8,12 @@ export function containedBy(column, value) {
8
8
  export function hasKey(column, key) {
9
9
  return sql `${column} ? ${key}`;
10
10
  }
11
+ /** Extracts a text value from a JSONB column: `column->>'key'`. Composable with pipe.filter operators (eq, ilike, etc.). */
12
+ export function text(column, key) {
13
+ return sql `${column}->>${key}`;
14
+ }
15
+ /** Extracts a JSONB value from a JSONB column: `column->'key'`. Returns JSONB, not text — use with jsonb.contains() etc. */
16
+ export function json(column, key) {
17
+ return sql `${column}->${key}`;
18
+ }
11
19
  //# sourceMappingURL=query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/data/jsonb/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAGlC,MAAM,UAAU,QAAQ,CAAC,MAAoB,EAAE,KAAc;IAC3D,OAAO,GAAG,CAAS,GAAG,MAAM,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAA;AACnE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAoB,EAAE,KAAc;IAC9D,OAAO,GAAG,CAAS,GAAG,MAAM,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAA;AACnE,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,MAAoB,EAAE,GAAW;IACtD,OAAO,GAAG,CAAS,GAAG,MAAM,MAAM,GAAG,EAAE,CAAA;AACzC,CAAC"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/data/jsonb/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAGlC,MAAM,UAAU,QAAQ,CAAC,MAAoB,EAAE,KAAc;IAC3D,OAAO,GAAG,CAAS,GAAG,MAAM,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAA;AACnE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAoB,EAAE,KAAc;IAC9D,OAAO,GAAG,CAAS,GAAG,MAAM,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAA;AACnE,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,MAAoB,EAAE,GAAW;IACtD,OAAO,GAAG,CAAS,GAAG,MAAM,MAAM,GAAG,EAAE,CAAA;AACzC,CAAC;AAED,4HAA4H;AAC5H,MAAM,UAAU,IAAI,CAAC,MAAoB,EAAE,GAAW;IACpD,OAAO,GAAG,CAAQ,GAAG,MAAM,MAAM,GAAG,EAAE,CAAA;AACxC,CAAC;AAED,4HAA4H;AAC5H,MAAM,UAAU,IAAI,CAAC,MAAoB,EAAE,GAAW;IACpD,OAAO,GAAG,CAAA,GAAG,MAAM,KAAK,GAAG,EAAE,CAAA;AAC/B,CAAC"}
package/package.json CHANGED
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "name": "pipework",
3
- "version": "0.7.18",
3
+ "version": "0.7.19",
4
4
  "description": "TypeScript framework for multi-tenant SaaS applications. PostgreSQL-only.",
5
5
  "type": "module",
6
- "packageManager": "pnpm@9.15.4",
7
6
  "license": "MIT",
8
7
  "publishConfig": {
9
8
  "access": "public"
@@ -69,22 +68,6 @@
69
68
  "bin": {
70
69
  "pipework": "bin/pipework.js"
71
70
  },
72
- "scripts": {
73
- "prepare": "git config core.hooksPath .githooks",
74
- "prepack": "pnpm build",
75
- "build": "tsc && cp src/test/globals.d.ts dist/test/globals.d.ts",
76
- "type-check": "tsc --noEmit",
77
- "lint": "eslint src --max-warnings 0",
78
- "lint:boundaries": "node scripts/check-boundaries.js",
79
- "lint:jsdoc": "node scripts/check-jsdoc.js",
80
- "generate:reference": "node scripts/generate-reference.js",
81
- "test": "vitest run",
82
- "test:isolation": "vitest run --config vitest.isolation.config.ts",
83
- "test:property": "vitest run --config vitest.property.config.ts",
84
- "test:stress": "vitest run --config vitest.stress.config.ts",
85
- "test:all": "vitest run && vitest run --config vitest.isolation.config.ts && vitest run --config vitest.property.config.ts && vitest run --config vitest.stress.config.ts",
86
- "mutate": "stryker run"
87
- },
88
71
  "pipework": {
89
72
  "boundaries": {
90
73
  "rules": {
@@ -173,11 +156,6 @@
173
156
  "peerDependencies": {
174
157
  "zod": "^4.4.3"
175
158
  },
176
- "pnpm": {
177
- "overrides": {
178
- "esbuild": ">=0.25.0"
179
- }
180
- },
181
159
  "devDependencies": {
182
160
  "@stryker-mutator/core": "^9.6.1",
183
161
  "@stryker-mutator/typescript-checker": "^9.6.1",
@@ -188,5 +166,19 @@
188
166
  "pino-pretty": "^13.1.3",
189
167
  "typescript": "^6.0.3",
190
168
  "vitest": "^4.1.5"
169
+ },
170
+ "scripts": {
171
+ "build": "tsc && cp src/test/globals.d.ts dist/test/globals.d.ts",
172
+ "type-check": "tsc --noEmit",
173
+ "lint": "eslint src --max-warnings 0",
174
+ "lint:boundaries": "node scripts/check-boundaries.js",
175
+ "lint:jsdoc": "node scripts/check-jsdoc.js",
176
+ "generate:reference": "node scripts/generate-reference.js",
177
+ "test": "vitest run",
178
+ "test:isolation": "vitest run --config vitest.isolation.config.ts",
179
+ "test:property": "vitest run --config vitest.property.config.ts",
180
+ "test:stress": "vitest run --config vitest.stress.config.ts",
181
+ "test:all": "vitest run && vitest run --config vitest.isolation.config.ts && vitest run --config vitest.property.config.ts && vitest run --config vitest.stress.config.ts",
182
+ "mutate": "stryker run"
191
183
  }
192
- }
184
+ }