@pgflow/core 0.0.0-array-map-steps-cd94242a-20251008042921 → 0.0.0-control-plane-a947cb71-20251121164755

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.
@@ -0,0 +1,93 @@
1
+ -- Migration tested 2025-11-02:
2
+ -- Successfully verified that this migration fails on pgmq 1.4.4 (Supabase CLI < 2.34.3)
3
+ -- with clear error message guiding users to upgrade pgmq to 1.5.0+
4
+ --
5
+ -- Compatibility check: Ensure pgmq.message_record has headers column (pgmq 1.5.0+)
6
+ DO $$
7
+ DECLARE
8
+ has_headers BOOLEAN;
9
+ BEGIN
10
+ SELECT EXISTS (
11
+ SELECT 1
12
+ FROM pg_type t
13
+ JOIN pg_namespace n ON t.typnamespace = n.oid
14
+ JOIN pg_attribute a ON a.attrelid = t.typrelid
15
+ WHERE n.nspname = 'pgmq'
16
+ AND t.typname = 'message_record'
17
+ AND a.attname = 'headers'
18
+ AND a.attnum > 0
19
+ AND NOT a.attisdropped
20
+ ) INTO has_headers;
21
+
22
+ IF NOT has_headers THEN
23
+ RAISE EXCEPTION E'INCOMPATIBLE PGMQ VERSION DETECTED\n\n'
24
+ 'This migration is part of pgflow 0.8.0+, which requires pgmq 1.5.0 or higher.\n'
25
+ 'The pgmq.message_record type is missing the "headers" column, which indicates you are running pgmq < 1.5.0.\n\n'
26
+ 'pgflow 0.8.0+ is NOT compatible with pgmq versions below 1.5.0.\n\n'
27
+ 'Action required:\n'
28
+ ' - If using Supabase: Ensure you are running a recent version that includes pgmq 1.5.0+\n'
29
+ ' - If self-hosting: Upgrade pgmq to version 1.5.0 or higher before running this migration\n\n'
30
+ 'Migration aborted to prevent runtime failures.';
31
+ END IF;
32
+ END $$;
33
+
34
+ -- Modify "set_vt_batch" function
35
+ -- Must drop first because we're changing the return type from SETOF to TABLE
36
+ DROP FUNCTION IF EXISTS "pgflow"."set_vt_batch"(text, bigint[], integer[]);
37
+ CREATE FUNCTION "pgflow"."set_vt_batch" (
38
+ "queue_name" text,
39
+ "msg_ids" bigint[],
40
+ "vt_offsets" integer[]
41
+ )
42
+ RETURNS TABLE(
43
+ msg_id bigint,
44
+ read_ct integer,
45
+ enqueued_at timestamp with time zone,
46
+ vt timestamp with time zone,
47
+ message jsonb,
48
+ headers jsonb
49
+ )
50
+ LANGUAGE plpgsql AS $$
51
+ DECLARE
52
+ qtable TEXT := pgmq.format_table_name(queue_name, 'q');
53
+ sql TEXT;
54
+ BEGIN
55
+ /* ---------- safety checks ---------------------------------------------------- */
56
+ IF msg_ids IS NULL OR vt_offsets IS NULL OR array_length(msg_ids, 1) = 0 THEN
57
+ RETURN; -- nothing to do, return empty set
58
+ END IF;
59
+
60
+ IF array_length(msg_ids, 1) IS DISTINCT FROM array_length(vt_offsets, 1) THEN
61
+ RAISE EXCEPTION
62
+ 'msg_ids length (%) must equal vt_offsets length (%)',
63
+ array_length(msg_ids, 1), array_length(vt_offsets, 1);
64
+ END IF;
65
+
66
+ /* ---------- dynamic statement ------------------------------------------------ */
67
+ /* One UPDATE joins with the unnested arrays */
68
+ sql := format(
69
+ $FMT$
70
+ WITH input (msg_id, vt_offset) AS (
71
+ SELECT unnest($1)::bigint
72
+ , unnest($2)::int
73
+ )
74
+ UPDATE pgmq.%I q
75
+ SET vt = clock_timestamp() + make_interval(secs => input.vt_offset),
76
+ read_ct = read_ct -- no change, but keeps RETURNING list aligned
77
+ FROM input
78
+ WHERE q.msg_id = input.msg_id
79
+ RETURNING q.msg_id,
80
+ q.read_ct,
81
+ q.enqueued_at,
82
+ q.vt,
83
+ q.message,
84
+ q.headers
85
+ $FMT$,
86
+ qtable
87
+ );
88
+
89
+ RETURN QUERY EXECUTE sql USING msg_ids, vt_offsets;
90
+ END;
91
+ $$;
92
+ -- Drop "read_with_poll" function
93
+ DROP FUNCTION "pgflow"."read_with_poll";
package/dist/types.d.ts CHANGED
@@ -1,8 +1,6 @@
1
- import type { ExtractFlowSteps, StepInput, Simplify, AnyFlow, ExtractFlowInput } from '@pgflow/dsl';
1
+ import type { ExtractFlowSteps, StepInput, Simplify, AnyFlow, ExtractFlowInput, Json } from '@pgflow/dsl';
2
2
  import type { Database } from './database-types.js';
3
- export type Json = string | number | boolean | null | {
4
- [key: string]: Json | undefined;
5
- } | Json[];
3
+ export type { Json };
6
4
  /**
7
5
  * Record representing a task from pgflow.start_tasks
8
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pgflow/core",
3
- "version": "0.0.0-array-map-steps-cd94242a-20251008042921",
4
- "license": "AGPL-3.0",
3
+ "version": "0.0.0-control-plane-a947cb71-20251121164755",
4
+ "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.js",
@@ -19,12 +19,11 @@
19
19
  }
20
20
  },
21
21
  "devDependencies": {
22
- "@types/node": "^22.14.1",
23
- "supabase": "2.21.1"
22
+ "@types/node": "^22.14.1"
24
23
  },
25
24
  "dependencies": {
26
25
  "postgres": "^3.4.5",
27
- "@pgflow/dsl": "0.0.0-array-map-steps-cd94242a-20251008042921"
26
+ "@pgflow/dsl": "0.0.0-control-plane-a947cb71-20251121164755"
28
27
  },
29
28
  "publishConfig": {
30
29
  "access": "public"