pg-boss 12.26.4 → 12.28.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/README.md +20 -5
- package/dist/attorney.d.ts +2 -1
- package/dist/attorney.d.ts.map +1 -1
- package/dist/attorney.js +80 -7
- package/dist/cli.js +2 -2
- package/dist/contractor.d.ts +2 -1
- package/dist/contractor.d.ts.map +1 -1
- package/dist/contractor.js +44 -2
- package/dist/drifter.d.ts +2 -0
- package/dist/drifter.d.ts.map +1 -1
- package/dist/drifter.js +53 -8
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +11 -3
- package/dist/migrationStore.d.ts +1 -1
- package/dist/migrationStore.d.ts.map +1 -1
- package/dist/migrationStore.js +187 -11
- package/dist/plans.d.ts +3 -2
- package/dist/plans.d.ts.map +1 -1
- package/dist/plans.js +126 -25
- package/dist/schema.json +14 -2
- package/dist/timekeeper.d.ts +1 -0
- package/dist/timekeeper.d.ts.map +1 -1
- package/dist/timekeeper.js +65 -5
- package/dist/tools.d.ts +32 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +40 -1
- package/dist/types.d.ts +53 -10
- package/dist/types.d.ts.map +1 -1
- package/package.json +14 -13
package/README.md
CHANGED
|
@@ -53,32 +53,47 @@ This will likely cater the most to teams already familiar with the simplicity of
|
|
|
53
53
|
* SQL support for non-Node.js runtimes for most operations
|
|
54
54
|
* Serverless function compatible
|
|
55
55
|
* Multi-master compatible (for example, in a Kubernetes ReplicaSet)
|
|
56
|
-
* [Additional database backends](https://pgboss.
|
|
56
|
+
* [Additional database backends](https://pgboss.io/database-backends) for Postgres-based databases such as CockroachDB, YugabyteDB and Citus. Or, use embedded PGlite for running entirely in-process.
|
|
57
57
|
|
|
58
58
|
## CLI
|
|
59
59
|
|
|
60
60
|
pg-boss includes a command-line interface if needed for managing database migrations without writing code. This is useful for CI/CD pipelines, database setup scripts, or manual schema management.
|
|
61
61
|
|
|
62
|
-
See the [CLI documentation](https://pgboss.
|
|
62
|
+
See the [CLI documentation](https://pgboss.io/cli) for details.
|
|
63
63
|
|
|
64
64
|
## Dashboard
|
|
65
65
|
|
|
66
66
|
A web-based dashboard is available in the [`@pg-boss/dashboard`](https://www.npmjs.com/package/@pg-boss/dashboard) package for monitoring and managing jobs, queues and schedules.
|
|
67
67
|
|
|
68
|
-
See the [dashboard documentation](https://pgboss.
|
|
68
|
+
See the [dashboard documentation](https://pgboss.io/dashboard) for details.
|
|
69
69
|
|
|
70
70
|
## Proxy
|
|
71
71
|
|
|
72
72
|
A HTTP proxy is available in the [`@pg-boss/proxy`](https://www.npmjs.com/package/@pg-boss/proxy) package if needed to support use cases such as platform compatibility and connection pooling or scalability.
|
|
73
73
|
|
|
74
|
-
See the [proxy documentation](https://pgboss.
|
|
74
|
+
See the [proxy documentation](https://pgboss.io/proxy) for details.
|
|
75
75
|
|
|
76
76
|
## Requirements
|
|
77
77
|
* Node 22.12 or higher for CommonJS's require(esm)
|
|
78
78
|
* PostgreSQL 13 or higher
|
|
79
79
|
|
|
80
|
+
## Sponsors
|
|
81
|
+
|
|
82
|
+
pg-boss is MIT licensed and always will be. It is maintained by one person, and sponsorship is what pays for the maintenance, security response, and support behind it.
|
|
83
|
+
|
|
84
|
+
[Become a sponsor](https://github.com/sponsors/timgit), or see everyone who already does on the [sponsors page](https://pgboss.io/sponsors).
|
|
85
|
+
|
|
86
|
+
<!-- sponsors:start The logos below are generated from GitHub Sponsors by scripts/sync-sponsors.js. Do not edit them directly. -->
|
|
87
|
+
<div style="display: flex; flex-wrap: wrap; gap: 1rem; align-items: center; margin: 1.5rem 0;">
|
|
88
|
+
<a href="https://altruistiq.com/" target="_blank" rel="noopener"><img src="https://avatars.githubusercontent.com/u/88195975?s=200&v=4" alt="Altruistiq" title="Altruistiq" width="64" height="64" style="border-radius: 8px;"></a>
|
|
89
|
+
<a href="https://wasp.sh/" target="_blank" rel="noopener"><img src="https://avatars.githubusercontent.com/u/55102317?s=200&v=4" alt="wasp-lang" title="wasp-lang" width="64" height="64" style="border-radius: 8px;"></a>
|
|
90
|
+
<a href="https://github.com/Ferry-Health" target="_blank" rel="noopener"><img src="https://avatars.githubusercontent.com/u/158637456?s=200&v=4" alt="Ferry Health" title="Ferry Health" width="64" height="64" style="border-radius: 8px;"></a>
|
|
91
|
+
<a href="https://superpower.com/" target="_blank" rel="noopener"><img src="https://avatars.githubusercontent.com/u/114334709?s=200&v=4" alt="Superpower" title="Superpower" width="64" height="64" style="border-radius: 8px;"></a>
|
|
92
|
+
</div>
|
|
93
|
+
<!-- sponsors:end -->
|
|
94
|
+
|
|
80
95
|
## Documentation
|
|
81
|
-
* [Docs](https://pgboss.
|
|
96
|
+
* [Docs](https://pgboss.io/)
|
|
82
97
|
|
|
83
98
|
## Contributing
|
|
84
99
|
To setup a development environment for this library:
|
package/dist/attorney.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ declare const POLICY: {
|
|
|
5
5
|
MAX_RETENTION_DAYS: number;
|
|
6
6
|
};
|
|
7
7
|
declare function validateQueueArgs(config?: any): void;
|
|
8
|
+
declare function pinZonelessDateTime(value: string): string;
|
|
8
9
|
declare function checkSendArgs(args: any): types.Request;
|
|
9
10
|
declare function checkUpdateArgs(args: any, { upsert }?: {
|
|
10
11
|
upsert?: boolean | undefined;
|
|
@@ -20,5 +21,5 @@ declare function getConfig(value: string | types.ConstructorOptions): types.Reso
|
|
|
20
21
|
declare function assertPostgresObjectName(name: string): void;
|
|
21
22
|
declare function assertQueueName(name: string): void;
|
|
22
23
|
declare function assertKey(key: string): void;
|
|
23
|
-
export { assertKey, assertPostgresObjectName, assertQueueName, checkFetchArgs, checkSendArgs, checkUpdateArgs, checkWorkArgs, getConfig, POLICY, validateFlowJobs, validateGroupConfig, validateQueueArgs };
|
|
24
|
+
export { assertKey, assertPostgresObjectName, assertQueueName, checkFetchArgs, checkSendArgs, checkUpdateArgs, checkWorkArgs, getConfig, pinZonelessDateTime, POLICY, validateFlowJobs, validateGroupConfig, validateQueueArgs };
|
|
24
25
|
//# sourceMappingURL=attorney.d.ts.map
|
package/dist/attorney.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attorney.d.ts","sourceRoot":"","sources":["../src/attorney.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAExC,QAAA,MAAM,MAAM;;;;CAIX,CAAA;AAqED,iBAAS,iBAAiB,CAAE,MAAM,GAAE,GAAQ,QAc3C;AAED,iBAAS,aAAa,CAAE,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,OAAO,CAgDhD;AAOD,iBAAS,eAAe,CAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAc,EAAE;;CAAK,GAAG,KAAK,CAAC,OAAO,CA4D3E;AAED,iBAAS,mBAAmB,CAAE,MAAM,EAAE,GAAG,QAOxC;AAED,iBAAS,gBAAgB,CAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,QA2D/C;AA2GD,iBAAS,aAAa,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;IAClD,OAAO,EAAE,KAAK,CAAC,mBAAmB,CAAA;IAClC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;CACjC,CA8BA;AAED,iBAAS,cAAc,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAQlD;AAED,iBAAS,SAAS,CAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC,0BAA0B,CAwB9F;
|
|
1
|
+
{"version":3,"file":"attorney.d.ts","sourceRoot":"","sources":["../src/attorney.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAExC,QAAA,MAAM,MAAM;;;;CAIX,CAAA;AAqED,iBAAS,iBAAiB,CAAE,MAAM,GAAE,GAAQ,QAc3C;AAgBD,iBAAS,mBAAmB,CAAE,KAAK,EAAE,MAAM,UAE1C;AAED,iBAAS,aAAa,CAAE,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,OAAO,CAgDhD;AAOD,iBAAS,eAAe,CAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAc,EAAE;;CAAK,GAAG,KAAK,CAAC,OAAO,CA4D3E;AAED,iBAAS,mBAAmB,CAAE,MAAM,EAAE,GAAG,QAOxC;AAED,iBAAS,gBAAgB,CAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,QA2D/C;AA2GD,iBAAS,aAAa,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;IAClD,OAAO,EAAE,KAAK,CAAC,mBAAmB,CAAA;IAClC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;CACjC,CA8BA;AAED,iBAAS,cAAc,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAQlD;AAED,iBAAS,SAAS,CAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC,0BAA0B,CAwB9F;AAsFD,iBAAS,wBAAwB,CAAE,IAAI,EAAE,MAAM,QAiC9C;AAED,iBAAS,eAAe,CAAE,IAAI,EAAE,MAAM,QAIrC;AAED,iBAAS,SAAS,CAAE,GAAG,EAAE,MAAM,QAI9B;AAuJD,OAAO,EACL,SAAS,EACT,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EACf,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,MAAM,EACN,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EAClB,CAAA"}
|
package/dist/attorney.js
CHANGED
|
@@ -69,6 +69,21 @@ function validateQueueArgs(config = {}) {
|
|
|
69
69
|
validateDeletionConfig(config);
|
|
70
70
|
validateHeartbeatConfig(config);
|
|
71
71
|
}
|
|
72
|
+
// A `startAfter` string that begins with an ISO 8601 calendar date is cast to timestamptz by the
|
|
73
|
+
// database, so one carrying no zone designator resolves in the database session's TimeZone. Two
|
|
74
|
+
// instances against the same database can then schedule the same string at different instants
|
|
75
|
+
// (a 10.5 hour spread between America/New_York and Asia/Kolkata, and a date-only string can land
|
|
76
|
+
// on the previous day), which is nothing the caller of send() is thinking about. The documented
|
|
77
|
+
// contract is UTC and the Date path already produces UTC via toISOString(), so pin the zone here.
|
|
78
|
+
const ISO_DATE = /^\d{4}-\d{2}-\d{2}/;
|
|
79
|
+
// Matched against the remainder past YYYY-MM-DD, and deliberately a whitelist of the zone-less
|
|
80
|
+
// spellings rather than a test for a missing zone: a trailing '-01' would read as an offset, and
|
|
81
|
+
// forms Postgres resolves on its own — a named zone ('... UTC', '... America/New_York'), a
|
|
82
|
+
// single-digit offset ('+5:30') — must be left exactly as they are rather than pinned to UTC.
|
|
83
|
+
const ZONELESS_TIME = /^(?:[T ]\d{2}(?::\d{2}(?::\d{2}(?:[.,]\d+)?)?)?)?$/;
|
|
84
|
+
function pinZonelessDateTime(value) {
|
|
85
|
+
return ISO_DATE.test(value) && ZONELESS_TIME.test(value.slice(10)) ? value + 'Z' : value;
|
|
86
|
+
}
|
|
72
87
|
function checkSendArgs(args) {
|
|
73
88
|
let name, data, options;
|
|
74
89
|
if (typeof args[0] === 'string') {
|
|
@@ -96,7 +111,7 @@ function checkSendArgs(args) {
|
|
|
96
111
|
: (+options.startAfter > 0)
|
|
97
112
|
? '' + options.startAfter
|
|
98
113
|
: (typeof options.startAfter === 'string')
|
|
99
|
-
? options.startAfter
|
|
114
|
+
? pinZonelessDateTime(options.startAfter)
|
|
100
115
|
: undefined;
|
|
101
116
|
validateRetryConfig(options);
|
|
102
117
|
validateExpirationConfig(options);
|
|
@@ -149,7 +164,7 @@ function checkUpdateArgs(args, { upsert = false } = {}) {
|
|
|
149
164
|
: (typeof startAfter === 'number' && Number.isFinite(startAfter))
|
|
150
165
|
? '' + startAfter
|
|
151
166
|
: (typeof startAfter === 'string')
|
|
152
|
-
? startAfter
|
|
167
|
+
? pinZonelessDateTime(startAfter)
|
|
153
168
|
: undefined;
|
|
154
169
|
}
|
|
155
170
|
validateRetryConfig(options);
|
|
@@ -400,11 +415,66 @@ function resolveBackend(config) {
|
|
|
400
415
|
config.noIndexProgressView = true;
|
|
401
416
|
}
|
|
402
417
|
}
|
|
418
|
+
// The character rules for the contents of a quoted name, as a predicate clause returned rather than
|
|
419
|
+
// thrown, so the bare-name path can ask whether quoting would actually fix a name before
|
|
420
|
+
// recommending it - and explain why not when it wouldn't.
|
|
421
|
+
function quotedNameProblem(resolved) {
|
|
422
|
+
// the value is interpolated into identifier positions verbatim, so a double quote inside the
|
|
423
|
+
// outer pair would close the identifier early and allow arbitrary SQL to follow.
|
|
424
|
+
if (resolved.includes('"'))
|
|
425
|
+
return 'cannot contain double quotes';
|
|
426
|
+
// a single quote would terminate the literal in the string-comparison positions, and would also
|
|
427
|
+
// break the `EXECUTE format('… ')` bodies the schema is interpolated into.
|
|
428
|
+
if (resolved.includes("'"))
|
|
429
|
+
return 'cannot contain single quotes';
|
|
430
|
+
// % is a format() specifier, and the schema is interpolated into EXECUTE format('… ${schema}.%I …')
|
|
431
|
+
// templates. an unknown specifier aborts the statement; a valid one (e.g. "a%Ib") is worse, since
|
|
432
|
+
// it silently consumes an argument and shifts every later specifier by one.
|
|
433
|
+
if (resolved.includes('%'))
|
|
434
|
+
return 'cannot contain percent signs';
|
|
435
|
+
// $ can collide with the dollar-quoted function bodies the schema appears inside.
|
|
436
|
+
if (resolved.includes('$'))
|
|
437
|
+
return 'cannot contain dollar signs';
|
|
438
|
+
// partition and table naming splits on '.', so a dot would be misread as a schema separator.
|
|
439
|
+
if (resolved.includes('.'))
|
|
440
|
+
return 'cannot contain periods';
|
|
441
|
+
// backslash is not valid in the bytea inputs the name is hashed through, and control
|
|
442
|
+
// characters can break out of the provenance comments in exported migration SQL.
|
|
443
|
+
if (resolved.includes('\\'))
|
|
444
|
+
return 'cannot contain backslashes';
|
|
445
|
+
// eslint-disable-next-line no-control-regex
|
|
446
|
+
if (/[\x00-\x1f\x7f]/.test(resolved))
|
|
447
|
+
return 'cannot contain control characters';
|
|
448
|
+
return null;
|
|
449
|
+
}
|
|
403
450
|
function assertPostgresObjectName(name) {
|
|
404
451
|
assert(typeof name === 'string', 'Name must be a string');
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
assert(
|
|
452
|
+
const quoted = name.startsWith('"') && name.endsWith('"') && name.length > 1;
|
|
453
|
+
const resolved = quoted ? name.slice(1, -1) : name;
|
|
454
|
+
assert(resolved.length > 0, 'Name cannot be empty');
|
|
455
|
+
// the limit applies to the resolved name, since that is what postgres stores and what the
|
|
456
|
+
// derived object names are built from. it is measured in bytes rather than characters because
|
|
457
|
+
// postgres truncates identifiers at NAMEDATALEN-1 (63) bytes *silently* - a name over the limit
|
|
458
|
+
// would install fine but leave the configured name and the catalog name permanently out of sync,
|
|
459
|
+
// so every nspname comparison would miss. bare names are ascii, so this only binds on quoted ones.
|
|
460
|
+
assert(Buffer.byteLength(resolved, 'utf8') <= 50, 'Name cannot exceed 50 bytes');
|
|
461
|
+
if (quoted) {
|
|
462
|
+
const problem = quotedNameProblem(resolved);
|
|
463
|
+
assert(problem === null, `Quoted name ${problem}`);
|
|
464
|
+
return;
|
|
465
|
+
}
|
|
466
|
+
// A name that is not a legal bare identifier is usable verbatim if it is quoted, so hand the
|
|
467
|
+
// caller the config value that works instead of only the rule they broke - otherwise the feature
|
|
468
|
+
// is only discoverable by finding the docs. When quoting would not help either, say which rule
|
|
469
|
+
// stops it, rather than recommending a value that also throws or leaving the caller to guess.
|
|
470
|
+
const problem = quotedNameProblem(name);
|
|
471
|
+
const remedy = problem === null
|
|
472
|
+
? ` Pass it quoted to use it verbatim: schema: '"${name}"'`
|
|
473
|
+
: ` Quoting will not help: a quoted name ${problem}.`;
|
|
474
|
+
// Both rules are scoped to unquoted names - the message has to say so, since the quoted form
|
|
475
|
+
// accepts far more than this.
|
|
476
|
+
assert(!/\W/.test(name), `Schema name ${JSON.stringify(name)} can only contain alphanumeric characters or underscores when unquoted.${remedy}`);
|
|
477
|
+
assert(!/^\d/.test(name), `Schema name ${JSON.stringify(name)} cannot start with a number when unquoted.${remedy}`);
|
|
408
478
|
}
|
|
409
479
|
function assertQueueName(name) {
|
|
410
480
|
assert(name, 'Name is required');
|
|
@@ -422,7 +492,10 @@ function validateRetentionConfig(config) {
|
|
|
422
492
|
}
|
|
423
493
|
function validateExpirationConfig(config) {
|
|
424
494
|
assert(!('expireInSeconds' in config) || config.expireInSeconds >= 1, 'configuration assert: expireInSeconds must be at least every second');
|
|
425
|
-
|
|
495
|
+
// inclusive, like every other option bounded by MAX_EXPIRATION_HOURS: an expiration of exactly
|
|
496
|
+
// the maximum does not "exceed" it. this is also the value the docs recommend for the longest
|
|
497
|
+
// jobs, and the value the maintenance interval defaults to.
|
|
498
|
+
assert(!config.expireInSeconds || config.expireInSeconds / 60 / 60 <= POLICY.MAX_EXPIRATION_HOURS, `configuration assert: expiration cannot exceed ${POLICY.MAX_EXPIRATION_HOURS} hours`);
|
|
426
499
|
}
|
|
427
500
|
function validateRetryConfig(config) {
|
|
428
501
|
assert(!('retryDelay' in config) || (Number.isInteger(config.retryDelay) && config.retryDelay >= 0), 'retryDelay must be an integer >= 0');
|
|
@@ -502,4 +575,4 @@ function applyFlowConfig(config) {
|
|
|
502
575
|
assert(!('flowIntervalSeconds' in config) || config.flowIntervalSeconds >= minInterval, `configuration assert: flowIntervalSeconds must be at least ${minInterval} seconds`);
|
|
503
576
|
config.flowIntervalSeconds = config.flowIntervalSeconds || 5;
|
|
504
577
|
}
|
|
505
|
-
export { assertKey, assertPostgresObjectName, assertQueueName, checkFetchArgs, checkSendArgs, checkUpdateArgs, checkWorkArgs, getConfig, POLICY, validateFlowJobs, validateGroupConfig, validateQueueArgs };
|
|
578
|
+
export { assertKey, assertPostgresObjectName, assertQueueName, checkFetchArgs, checkSendArgs, checkUpdateArgs, checkWorkArgs, getConfig, pinZonelessDateTime, POLICY, validateFlowJobs, validateGroupConfig, validateQueueArgs };
|
package/dist/cli.js
CHANGED
|
@@ -157,13 +157,13 @@ function tryGetConnectionConfig(args) {
|
|
|
157
157
|
args.database || process.env.PGBOSS_DATABASE || fileConfig.database;
|
|
158
158
|
return hasConnection ? getConnectionConfig(args) : null;
|
|
159
159
|
}
|
|
160
|
-
// Enumerates partitioned queue
|
|
160
|
+
// Enumerates partitioned queue metadata so inlined index builds can fan out across
|
|
161
161
|
// them. Returns [] on any failure (e.g. unreachable DB or pre-partition schema), leaving
|
|
162
162
|
// the export to target job_common only.
|
|
163
163
|
async function getPartitionTables(db, schema) {
|
|
164
164
|
try {
|
|
165
165
|
const result = await db.executeSql(plans.getPartitionedQueueTables(schema));
|
|
166
|
-
return result.rows.map((row) => row.table_name);
|
|
166
|
+
return result.rows.map((row) => ({ tableName: row.table_name, policy: row.policy }));
|
|
167
167
|
}
|
|
168
168
|
catch {
|
|
169
169
|
return [];
|
package/dist/contractor.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ declare class Contractor {
|
|
|
4
4
|
createSchema: boolean;
|
|
5
5
|
}): string;
|
|
6
6
|
static migrationPlans(schema?: string, version?: number, options?: {
|
|
7
|
-
partitionTables?:
|
|
7
|
+
partitionTables?: types.MigrationPartition[];
|
|
8
8
|
}): string;
|
|
9
9
|
static rollbackPlans(schema?: string, version?: number): string;
|
|
10
10
|
private config;
|
|
@@ -14,6 +14,7 @@ declare class Contractor {
|
|
|
14
14
|
schemaVersion(): Promise<number | null>;
|
|
15
15
|
isInstalled(): Promise<boolean>;
|
|
16
16
|
start(): Promise<void>;
|
|
17
|
+
private assertNoSchemaCaseVariant;
|
|
17
18
|
detectDrift(): Promise<types.SchemaDriftReport>;
|
|
18
19
|
check(): Promise<void>;
|
|
19
20
|
create(): Promise<void>;
|
package/dist/contractor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contractor.d.ts","sourceRoot":"","sources":["../src/contractor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"contractor.d.ts","sourceRoot":"","sources":["../src/contractor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAOxC,cAAM,UAAU;IACd,MAAM,CAAC,iBAAiB,CAAE,MAAM,SAAuB,EAAE,OAAO;;KAAyB;IAIzF,MAAM,CAAC,cAAc,CAAE,MAAM,SAAuB,EAAE,OAAO,SAAoB,EAAE,OAAO,GAAE;QAAE,eAAe,CAAC,EAAE,KAAK,CAAC,kBAAkB,EAAE,CAAA;KAAO;IAOjJ,MAAM,CAAC,aAAa,CAAE,MAAM,SAAuB,EAAE,OAAO,SAAgB;IAI5E,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,UAAU,CAAmB;gBAExB,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,0BAA0B;IAMpE,aAAa;IAKb,WAAW;IAKX,KAAK;YAsBG,yBAAyB;IAkCjC,WAAW,IAAK,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC;IA4GhD,KAAK;IAcL,MAAM;IASN,OAAO,CAAE,OAAO,EAAE,MAAM;IASxB,IAAI,CAAE,OAAO,EAAE,MAAM;IAKrB,QAAQ,CAAE,OAAO,EAAE,MAAM;CAIhC;AAED,eAAe,UAAU,CAAA"}
|
package/dist/contractor.js
CHANGED
|
@@ -4,6 +4,8 @@ import * as drifter from "./drifter.js";
|
|
|
4
4
|
import * as migrationStore from "./migrationStore.js";
|
|
5
5
|
import packageJson from '../package.json' with { type: 'json' };
|
|
6
6
|
const schemaVersion = packageJson.pgboss.schema;
|
|
7
|
+
// A name postgres would store unchanged if written without quotes.
|
|
8
|
+
const BARE_LOWER_IDENTIFIER_REGEX = /^[a-z_][a-z0-9_]*$/;
|
|
7
9
|
class Contractor {
|
|
8
10
|
static constructionPlans(schema = plans.DEFAULT_SCHEMA, options = { createSchema: true }) {
|
|
9
11
|
return plans.create(schema, schemaVersion, options);
|
|
@@ -11,7 +13,7 @@ class Contractor {
|
|
|
11
13
|
static migrationPlans(schema = plans.DEFAULT_SCHEMA, version = schemaVersion - 1, options = {}) {
|
|
12
14
|
// Exported plans run without a BAM worker, so inline the async index builds as direct
|
|
13
15
|
// DDL rather than job_table_run_async() enqueues (see issue #766). Callers that hold a
|
|
14
|
-
// live connection can pass
|
|
16
|
+
// live connection can pass partition metadata to fan the builds out across partitions.
|
|
15
17
|
return migrationStore.migrate(schema, version, undefined, undefined, { inlineAsync: true, partitionTables: options.partitionTables });
|
|
16
18
|
}
|
|
17
19
|
static rollbackPlans(schema = plans.DEFAULT_SCHEMA, version = schemaVersion) {
|
|
@@ -42,9 +44,43 @@ class Contractor {
|
|
|
42
44
|
}
|
|
43
45
|
}
|
|
44
46
|
else {
|
|
47
|
+
await this.assertNoSchemaCaseVariant();
|
|
45
48
|
await this.create();
|
|
46
49
|
}
|
|
47
50
|
}
|
|
51
|
+
// `schema: 'MySchema'` and `schema: '"MySchema"'` are two different schemas - postgres folds the
|
|
52
|
+
// bare form to `myschema` and stores the quoted one verbatim - but the two configs differ by two
|
|
53
|
+
// characters and are indistinguishable in logs. Getting it wrong is not an error on its own: the
|
|
54
|
+
// version table simply isn't there, so pg-boss installs a second, empty schema alongside the
|
|
55
|
+
// populated one and every existing job silently disappears. Fires only on the install path, and
|
|
56
|
+
// only when the variant actually holds a pg-boss install, so an unrelated schema that happens to
|
|
57
|
+
// share a folded name never blocks a legitimate install.
|
|
58
|
+
async assertNoSchemaCaseVariant() {
|
|
59
|
+
if (this.config.allowSchemaCaseVariant) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const schema = this.config.schema;
|
|
63
|
+
let variants;
|
|
64
|
+
try {
|
|
65
|
+
const result = await this.db.executeSql(plans.getSchemaCaseVariants(schema));
|
|
66
|
+
variants = result.rows.map((r) => r.name);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Catalog access varies across backends and permission setups. A probe that cannot run is
|
|
70
|
+
// not evidence of a problem, so it must never block an install that would otherwise succeed.
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (variants.length === 0) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// A variant that is already a legal lower-case bare identifier is reached by writing it bare;
|
|
77
|
+
// anything else (mixed case, or a name needing quotes) has to be configured quoted.
|
|
78
|
+
const spellings = variants.map(name => BARE_LOWER_IDENTIFIER_REGEX.test(name) ? `'${name}'` : `'"${name}"'`);
|
|
79
|
+
throw new Error(`pg-boss is not installed in schema ${schema}, but is installed in ${variants.map(n => `"${n}"`).join(', ')}, which differs only in case. ` +
|
|
80
|
+
'PostgreSQL folds unquoted names to lower case and stores quoted names verbatim, so these are different schemas. ' +
|
|
81
|
+
`To use the existing installation, set schema: ${spellings.join(' or ')}. ` +
|
|
82
|
+
'To install a new schema beside it anyway, set allowSchemaCaseVariant: true.');
|
|
83
|
+
}
|
|
48
84
|
// Presence-level schema drift scan: compares the managed indexes the code expects against the live
|
|
49
85
|
// catalog. Partitioned vs. non-partitioned is read from the database (job_common presence), and the
|
|
50
86
|
// per-queue policy indexes are computed from the queue table, so conditional indexes are handled.
|
|
@@ -132,8 +168,14 @@ class Contractor {
|
|
|
132
168
|
const canonicalPg = this.config.backend !== 'cockroachdb';
|
|
133
169
|
const expectedColumns = plans.expectedManagedColumns(schema, partitioned, partitions)
|
|
134
170
|
.map(c => canonicalPg ? c : { table: c.table, columns: c.columns });
|
|
171
|
+
// The manifest is generated against standard Postgres, so every index that carries an INCLUDE
|
|
172
|
+
// payload records one. Backends without covering indexes build the narrow form of those indexes
|
|
173
|
+
// on purpose (see the noCovering branches in plans.ts / migrationStore.ts), so expect no payload
|
|
174
|
+
// there instead of reporting each one as drifted.
|
|
175
|
+
const expectedIndexes = plans.expectedManagedIndexes(schema, partitioned, partitions)
|
|
176
|
+
.map(i => this.config.noCoveringIndexes ? { ...i, include: '' } : i);
|
|
135
177
|
return drifter.computeSchemaDrift({
|
|
136
|
-
indexes: { expected:
|
|
178
|
+
indexes: { expected: expectedIndexes, live, building },
|
|
137
179
|
tables: { expected: plans.expectedManagedTables(schema, partitioned, partitions), live: liveTables ?? [...new Set(liveColumns.map(c => c.table))] },
|
|
138
180
|
functions: functionsSupported ? { expected: plans.expectedManagedFunctions(schema, partitioned), live: liveFunctions } : undefined,
|
|
139
181
|
columns: { expected: expectedColumns, live: liveColumns },
|
package/dist/drifter.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { ManagedIndex, ManagedFunction, TableColumnDrift, ConstraintDrift, SchemaDriftReport } from './types.ts';
|
|
2
2
|
export declare function indexKeys(ddl: string): string;
|
|
3
|
+
export declare function indexInclude(ddl: string): string;
|
|
4
|
+
export declare function indexIncludeRaw(ddl: string): string;
|
|
3
5
|
export declare function indexPredicate(ddl: string): string;
|
|
4
6
|
export declare function indexKeysRaw(ddl: string): string;
|
|
5
7
|
export declare function indexPredicateRaw(ddl: string): string;
|
package/dist/drifter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drifter.d.ts","sourceRoot":"","sources":["../src/drifter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"drifter.d.ts","sourceRoot":"","sources":["../src/drifter.ts"],"names":[],"mappings":"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"}
|
package/dist/drifter.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { resolveSchemaName } from "./tools.js";
|
|
1
2
|
const SINGLE_QUOTE_REGEX = /'/g;
|
|
2
3
|
// Extracts the first balanced parenthesised group from a CREATE INDEX statement — the key-column
|
|
3
4
|
// list. Stops at the matching close paren, so a trailing INCLUDE(...) or WHERE(...) is excluded and
|
|
4
5
|
// an inner COALESCE(...) is kept. Works on both hand-written DDL and pg_get_indexdef output (whose
|
|
5
|
-
// leading `USING btree (` opens the same first group).
|
|
6
|
+
// leading `USING btree (` opens the same first group). The INCLUDE payload is not ignored, just
|
|
7
|
+
// compared separately — see extractIndexIncludeList.
|
|
6
8
|
function extractIndexKeyList(ddl) {
|
|
7
9
|
const open = ddl.indexOf('(');
|
|
8
10
|
if (open === -1)
|
|
@@ -35,6 +37,45 @@ export function indexKeys(ddl) {
|
|
|
35
37
|
const list = extractIndexKeyList(ddl);
|
|
36
38
|
return list === null ? '' : normalizeKeyList(list);
|
|
37
39
|
}
|
|
40
|
+
// Extracts the INCLUDE(...) payload column list, or null when the index has none. Both hand-written
|
|
41
|
+
// DDL and pg_get_indexdef spell it the same way, and it always sits between the key list and the
|
|
42
|
+
// WHERE clause, so scanning from the end of the key list keeps an inner `INCLUDE` inside a quoted
|
|
43
|
+
// column name or a predicate literal out of reach.
|
|
44
|
+
function extractIndexIncludeList(ddl) {
|
|
45
|
+
const keyList = extractIndexKeyList(ddl);
|
|
46
|
+
if (keyList === null)
|
|
47
|
+
return null;
|
|
48
|
+
const afterKeys = ddl.indexOf('(') + keyList.length + 2;
|
|
49
|
+
const tail = ddl.slice(afterKeys);
|
|
50
|
+
const m = tail.match(/^\s*INCLUDE\s*\(/i);
|
|
51
|
+
if (!m)
|
|
52
|
+
return null;
|
|
53
|
+
const open = afterKeys + m[0].length - 1;
|
|
54
|
+
let depth = 0;
|
|
55
|
+
for (let i = open; i < ddl.length; i++) {
|
|
56
|
+
if (ddl[i] === '(')
|
|
57
|
+
depth++;
|
|
58
|
+
else if (ddl[i] === ')' && --depth === 0)
|
|
59
|
+
return ddl.slice(open + 1, i);
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
// Normalises an INCLUDE list. Unlike the key list this is order-INSENSITIVE, and deliberately so:
|
|
64
|
+
// INCLUDE columns are payload, not part of the btree ordering, so `INCLUDE (a, b)` and
|
|
65
|
+
// `INCLUDE (b, a)` are the same index. Sorting them means a rebuild that lists them differently is
|
|
66
|
+
// not reported as drift, while a genuinely added or dropped payload column still is.
|
|
67
|
+
function normalizeIncludeList(includeList) {
|
|
68
|
+
return normalizeKeyList(includeList).split(',').filter(Boolean).sort().join(',');
|
|
69
|
+
}
|
|
70
|
+
export function indexInclude(ddl) {
|
|
71
|
+
const list = extractIndexIncludeList(ddl);
|
|
72
|
+
return list === null ? '' : normalizeIncludeList(list);
|
|
73
|
+
}
|
|
74
|
+
// Readable INCLUDE column list for a drift report, '' when the index has no INCLUDE clause.
|
|
75
|
+
export function indexIncludeRaw(ddl) {
|
|
76
|
+
const list = extractIndexIncludeList(ddl);
|
|
77
|
+
return list === null ? '' : list.replace(CAST_REGEX, '').replace(/\s+/g, ' ').trim();
|
|
78
|
+
}
|
|
38
79
|
// Everything after the top-level WHERE — the partial-index predicate — or '' for a non-partial index.
|
|
39
80
|
function extractPredicate(ddl) {
|
|
40
81
|
const m = ddl.match(/\bWHERE\b/i);
|
|
@@ -154,7 +195,7 @@ export function getSchemaIndexes(schema) {
|
|
|
154
195
|
JOIN pg_class c ON c.oid = i.indexrelid
|
|
155
196
|
JOIN pg_class t ON t.oid = i.indrelid
|
|
156
197
|
JOIN pg_namespace n ON n.oid = c.relnamespace
|
|
157
|
-
WHERE n.nspname = '${schema.replace(SINGLE_QUOTE_REGEX, "''")}'
|
|
198
|
+
WHERE n.nspname = '${resolveSchemaName(schema).replace(SINGLE_QUOTE_REGEX, "''")}'
|
|
158
199
|
`;
|
|
159
200
|
}
|
|
160
201
|
// Every function in the schema with its full definition, for the function-body diff. pg_get_functiondef
|
|
@@ -166,7 +207,7 @@ export function getSchemaFunctions(schema) {
|
|
|
166
207
|
SELECT p.proname AS name, pg_get_functiondef(p.oid) AS def
|
|
167
208
|
FROM pg_proc p
|
|
168
209
|
JOIN pg_namespace n ON n.oid = p.pronamespace
|
|
169
|
-
WHERE n.nspname = '${schema.replace(SINGLE_QUOTE_REGEX, "''")}'
|
|
210
|
+
WHERE n.nspname = '${resolveSchemaName(schema).replace(SINGLE_QUOTE_REGEX, "''")}'
|
|
170
211
|
`;
|
|
171
212
|
}
|
|
172
213
|
// The ordered value list of an enum type, for the enum-definition diff. ORDER BY enumsortorder
|
|
@@ -178,7 +219,7 @@ export function getEnumDefinition(schema, typeName = 'job_state') {
|
|
|
178
219
|
FROM pg_enum e
|
|
179
220
|
JOIN pg_type t ON t.oid = e.enumtypid
|
|
180
221
|
JOIN pg_namespace n ON n.oid = t.typnamespace
|
|
181
|
-
WHERE n.nspname = '${schema.replace(SINGLE_QUOTE_REGEX, "''")}' AND t.typname = '${typeName}'
|
|
222
|
+
WHERE n.nspname = '${resolveSchemaName(schema).replace(SINGLE_QUOTE_REGEX, "''")}' AND t.typname = '${typeName}'
|
|
182
223
|
ORDER BY e.enumsortorder
|
|
183
224
|
`;
|
|
184
225
|
}
|
|
@@ -197,7 +238,7 @@ export function getSchemaColumns(schema) {
|
|
|
197
238
|
JOIN pg_class c ON c.oid = a.attrelid
|
|
198
239
|
JOIN pg_namespace n ON n.oid = c.relnamespace
|
|
199
240
|
LEFT JOIN pg_attrdef ad ON ad.adrelid = a.attrelid AND ad.adnum = a.attnum
|
|
200
|
-
WHERE n.nspname = '${schema.replace(SINGLE_QUOTE_REGEX, "''")}'
|
|
241
|
+
WHERE n.nspname = '${resolveSchemaName(schema).replace(SINGLE_QUOTE_REGEX, "''")}'
|
|
201
242
|
AND a.attnum > 0 AND NOT a.attisdropped AND c.relkind IN ('r', 'p')
|
|
202
243
|
`;
|
|
203
244
|
}
|
|
@@ -212,7 +253,7 @@ export function getSchemaTables(schema) {
|
|
|
212
253
|
SELECT c.relname AS "table"
|
|
213
254
|
FROM pg_class c
|
|
214
255
|
JOIN pg_namespace n ON n.oid = c.relnamespace
|
|
215
|
-
WHERE n.nspname = '${schema.replace(SINGLE_QUOTE_REGEX, "''")}'
|
|
256
|
+
WHERE n.nspname = '${resolveSchemaName(schema).replace(SINGLE_QUOTE_REGEX, "''")}'
|
|
216
257
|
AND c.relkind IN ('r', 'p')
|
|
217
258
|
`;
|
|
218
259
|
}
|
|
@@ -226,7 +267,7 @@ export function getSchemaConstraints(schema) {
|
|
|
226
267
|
FROM pg_constraint con
|
|
227
268
|
JOIN pg_class rel ON rel.oid = con.conrelid
|
|
228
269
|
JOIN pg_namespace n ON n.oid = rel.relnamespace
|
|
229
|
-
WHERE n.nspname = '${schema.replace(SINGLE_QUOTE_REGEX, "''")}' AND con.contype <> 'n'
|
|
270
|
+
WHERE n.nspname = '${resolveSchemaName(schema).replace(SINGLE_QUOTE_REGEX, "''")}' AND con.contype <> 'n'
|
|
230
271
|
`;
|
|
231
272
|
}
|
|
232
273
|
// Pulls the unqualified function name out of a CREATE FUNCTION statement (schema-qualified or not).
|
|
@@ -379,13 +420,17 @@ export function computeSchemaDrift(opts = {}) {
|
|
|
379
420
|
if (normalizeKeyList(actualKeys)) {
|
|
380
421
|
const expectedPredicate = idx.predicate ?? '';
|
|
381
422
|
const actualPredicate = indexPredicateRaw(found.def);
|
|
423
|
+
const expectedInclude = idx.include ?? '';
|
|
424
|
+
const actualInclude = indexIncludeRaw(found.def);
|
|
382
425
|
const differs = [];
|
|
383
426
|
if (normalizeKeyList(idx.keys) !== normalizeKeyList(actualKeys))
|
|
384
427
|
differs.push('keys');
|
|
428
|
+
if (normalizeIncludeList(expectedInclude) !== normalizeIncludeList(actualInclude))
|
|
429
|
+
differs.push('include');
|
|
385
430
|
if (normalizePredicate(expectedPredicate) !== normalizePredicate(actualPredicate))
|
|
386
431
|
differs.push('predicate');
|
|
387
432
|
if (differs.length) {
|
|
388
|
-
mismatched.push({ ...idx, expectedKeys: idx.keys, actualKeys, expectedPredicate, actualPredicate, actualDefinition: displayIndexDefinition(found.def), differs });
|
|
433
|
+
mismatched.push({ ...idx, expectedKeys: idx.keys, actualKeys, expectedInclude, actualInclude, expectedPredicate, actualPredicate, actualDefinition: displayIndexDefinition(found.def), differs });
|
|
389
434
|
}
|
|
390
435
|
}
|
|
391
436
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export { QUEUE_POLICIES as policies } from './plans.ts';
|
|
|
6
6
|
export declare const events: types.Events;
|
|
7
7
|
export declare function getConstructionPlans(schema?: string): string;
|
|
8
8
|
export declare function getMigrationPlans(schema?: string, version?: number, options?: {
|
|
9
|
-
partitionTables?:
|
|
9
|
+
partitionTables?: types.MigrationPartition[];
|
|
10
10
|
}): string;
|
|
11
11
|
export declare function getRollbackPlans(schema?: string, version?: number): string;
|
|
12
12
|
export declare class PgBoss extends EventEmitter<types.PgBossEventMap> {
|
|
@@ -85,7 +85,7 @@ export declare class PgBoss extends EventEmitter<types.PgBossEventMap> {
|
|
|
85
85
|
getBamEntries(): Promise<types.BamEntry[]>;
|
|
86
86
|
getDb(): types.IDatabase;
|
|
87
87
|
}
|
|
88
|
-
export type { BackendProfile, BackendOptions, BamEntry, BamEvent, BamStatusSummary, CommandResponse, CompleteOptions, ConnectionOptions, ConstructorOptions, DatabaseOptions, FetchGroupConcurrencyOptions, DependencyRef, FetchOptions, FindJobsOptions, FlowJob, GroupConcurrencyConfig, GroupOptions, IDatabase as Db, InsertOptions, InvalidIndex, Job, JobFetchOptions, JobInsert, JobMatchStrategy, JobOptions, JobPollingOptions, JobResult, JobResultStatus, JobStates, Events, JobWithMetadata, MaintenanceOptions, ManagedIndex, MismatchedIndex, ManagedFunction, MismatchedFunction, TableColumnDrift, ConstraintDrift, EnumDrift, OffWorkOptions, PgBossEventMap, Queue, QueueOptions, QueuePolicy, QueueResult, QueueStats, QueueStatsOptions, RedriveOptions, Request, Schedule, ScheduleOptions, SchedulingOptions, SchemaDriftReport, SendOptions, StopOptions, UpdateOptions, UpdateQueueOptions, UpdateRequest, UpdateResponse, UpsertResponse, Warning, WipData, WorkConcurrencyOptions, WorkerState, WorkHandler, WorkOptions, WorkWithMetadataHandler, WorkHandlerFor, PerJobWorkHandler, PerJobWorkWithMetadataHandler, } from './types.ts';
|
|
88
|
+
export type { BackendProfile, BackendOptions, BamEntry, BamEvent, BamStatusSummary, CommandResponse, CompleteOptions, ConnectionOptions, ConstructorOptions, DatabaseOptions, FetchGroupConcurrencyOptions, DependencyRef, FetchOptions, FindJobsOptions, FlowJob, GroupConcurrencyConfig, GroupOptions, IDatabase as Db, InsertOptions, InvalidIndex, Job, JobFetchOptions, JobInsert, JobMatchStrategy, JobOptions, JobPollingOptions, JobResult, JobResultStatus, JobStates, Events, JobWithMetadata, MaintenanceOptions, ManagedIndex, MigrationPartition, AsyncMigrationCommand, MismatchedIndex, ManagedFunction, MismatchedFunction, TableColumnDrift, ConstraintDrift, EnumDrift, OffWorkOptions, PgBossEventMap, Queue, QueueOptions, QueuePolicy, QueueResult, QueueStats, QueueStatsOptions, RedriveOptions, Request, Schedule, ScheduleOptions, SchedulingOptions, SchemaDriftReport, SendOptions, StopOptions, UpdateOptions, UpdateQueueOptions, UpdateRequest, UpdateResponse, UpsertResponse, Warning, WipData, WorkConcurrencyOptions, WorkerState, WorkHandler, WorkOptions, WorkWithMetadataHandler, WorkHandlerFor, PerJobWorkHandler, PerJobWorkWithMetadataHandler, } from './types.ts';
|
|
89
89
|
export type { JobSpyInterface, JobSpyState, JobDataSelector, JobSelector, SpyJob, } from './spy.ts';
|
|
90
90
|
export { fromKnex, fromKysely, fromDrizzle, fromPrisma, fromPglite, } from './adapters/index.ts';
|
|
91
91
|
export type { KnexTransactionLike, KyselyTransactionLike, DrizzleTransactionLike, DrizzleSqlTagLike, PrismaTransactionLike, PGliteLike, } from './adapters/index.ts';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAA;AAUtC,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAGxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C,OAAO,EAAE,UAAU,IAAI,MAAM,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAA;AAEvD,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,MAOzB,CAAA;AAEF,wBAAgB,oBAAoB,CAAE,MAAM,CAAC,EAAE,MAAM,UAEpD;AAED,wBAAgB,iBAAiB,CAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/manager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/manager.js
CHANGED
|
@@ -935,6 +935,12 @@ class Manager extends EventEmitter {
|
|
|
935
935
|
if (group) {
|
|
936
936
|
Object.assign(rest, { groupId: group.id, groupTier: group.tier });
|
|
937
937
|
}
|
|
938
|
+
// insert() otherwise skips Attorney, but a zone-less date time string still has to be pinned
|
|
939
|
+
// to UTC: without it the same string resolves in the database session's TimeZone here while
|
|
940
|
+
// resolving as UTC through send(), so one API would schedule a different instant than the other.
|
|
941
|
+
if (typeof rest.startAfter === 'string') {
|
|
942
|
+
rest.startAfter = Attorney.pinZonelessDateTime(rest.startAfter);
|
|
943
|
+
}
|
|
938
944
|
if (dataById) {
|
|
939
945
|
// Best-effort spy bookkeeping, only reached when __test__enableSpies is set (a test-intended
|
|
940
946
|
// opt-in, off by default). The id we assign here is exactly what the DB would otherwise
|
|
@@ -1306,7 +1312,7 @@ class Manager extends EventEmitter {
|
|
|
1306
1312
|
]);
|
|
1307
1313
|
// Insert to dead letter queue if failed and has dead_letter configured
|
|
1308
1314
|
if (job.dead_letter) {
|
|
1309
|
-
await tx.executeSql(dlqSql, [job.dead_letter, job.data, jobOutput, job.name, job.id, job.created_on, job.retry_count, job.singleton_key, job.
|
|
1315
|
+
await tx.executeSql(dlqSql, [job.dead_letter, job.data, jobOutput, job.name, job.id, job.created_on, job.retry_count, job.singleton_key, job.priority, job.group_id, job.group_tier]);
|
|
1310
1316
|
}
|
|
1311
1317
|
}
|
|
1312
1318
|
count++;
|
|
@@ -1438,11 +1444,13 @@ class Manager extends EventEmitter {
|
|
|
1438
1444
|
}
|
|
1439
1445
|
Attorney.validateQueueArgs(options);
|
|
1440
1446
|
const { deadLetter } = options;
|
|
1441
|
-
|
|
1447
|
+
// null is the documented way to clear the dead letter queue, so it has to reach the update as a
|
|
1448
|
+
// present-but-null key. Only a non-null value is a queue name worth validating.
|
|
1449
|
+
if (deadLetter !== null && deadLetter !== undefined) {
|
|
1442
1450
|
Attorney.assertQueueName(deadLetter);
|
|
1443
1451
|
notStrictEqual(name, deadLetter, 'deadLetter cannot be itself');
|
|
1444
1452
|
}
|
|
1445
|
-
const sql = plans.updateQueue(this.config.schema
|
|
1453
|
+
const sql = plans.updateQueue(this.config.schema);
|
|
1446
1454
|
await this.db.executeSql(sql, [name, options]);
|
|
1447
1455
|
this.#evictQueueCache(name);
|
|
1448
1456
|
}
|