@pg-boss/dashboard 1.1.1 → 1.1.2
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/build/client/assets/MenuTrigger-CoRd-BqL.js +1 -0
- package/build/client/assets/{_index-9fLquIe1.js → _index-BTx7NRR8.js} +1 -1
- package/build/client/assets/{badge-B5ZugmiV.js → badge-DBD4CzAv.js} +1 -1
- package/build/client/assets/{button-Djse56Dx.js → button-Ba8FWhqs.js} +1 -1
- package/build/client/assets/{chevron-down-B4tDL9Ah.js → chevron-down-CYa4FYmp.js} +1 -1
- package/build/client/assets/chunk-UVKPFVEO-YfSfkVr_.js +26 -0
- package/build/client/assets/{createLucideIcon-B0YqJFaz.js → createLucideIcon-Bt-yXILq.js} +1 -1
- package/build/client/assets/db-link-CU7IJqbq.js +1 -0
- package/build/client/assets/dialog-Dkx42Rkd.js +1 -0
- package/build/client/assets/{entry.client-Szv-xmaE.js → entry.client-DXZUROTm.js} +4 -4
- package/build/client/assets/{error-card-CXoOCvsg.js → error-card-D-uZRy_l.js} +1 -1
- package/build/client/assets/{filter-select-DXyBBVm8.js → filter-select-Tk_CBvrn.js} +1 -1
- package/build/client/assets/{index-x2yWco1W.js → index-DuhoQwUK.js} +1 -1
- package/build/client/assets/{jobs-CM6xcK-O.js → jobs-ouYjIGAi.js} +1 -1
- package/build/client/assets/manifest-72f6b3e9.js +1 -0
- package/build/client/assets/{pagination-C4yyCmBA.js → pagination-BItl293Q.js} +1 -1
- package/build/client/assets/{queues._index-Dn3ieC5d.js → queues._index-_ID9kaow.js} +1 -1
- package/build/client/assets/{queues._name-GrviLLx2.js → queues._name-DwdbQND-.js} +1 -1
- package/build/client/assets/{queues._name.jobs._jobId-s_wYs79w.js → queues._name.jobs._jobId-DrgG3VBb.js} +1 -1
- package/build/client/assets/{queues.create-Ch3Mqw52.js → queues.create-CmVW5UVm.js} +1 -1
- package/build/client/assets/{root-D0qqtdF7.js → root-DDqOT0vL.js} +1 -1
- package/build/client/assets/{schedules-DwnuuhxF.js → schedules-B6ixYsvz.js} +1 -1
- package/build/client/assets/{schedules._name._key-DJn-u3Cm.js → schedules._name._key-CXTVKoOc.js} +1 -1
- package/build/client/assets/{schedules.new-CQuE2Uhz.js → schedules.new-Dmasri9v.js} +1 -1
- package/build/client/assets/{send-DVfuC6NR.js → send-CqR34Z50.js} +1 -1
- package/build/client/assets/{table-CtSLyG7m.js → table-Au2E5mnP.js} +1 -1
- package/build/client/assets/useOpenInteractionType-mgYMZAa8.js +12 -0
- package/build/client/assets/{warnings-DqRQYomb.js → warnings-Dj3qacgN.js} +1 -1
- package/build/server/assets/server-build.js +115 -43
- package/package.json +14 -14
- package/build/client/assets/MenuTrigger-CEHCnGow.js +0 -1
- package/build/client/assets/chunk-LFPYN7LY-Cj1DJmJR.js +0 -26
- package/build/client/assets/db-link-DmvfwdX4.js +0 -1
- package/build/client/assets/dialog-CQzw3QVH.js +0 -1
- package/build/client/assets/manifest-acaa4b8e.js +0 -1
- package/build/client/assets/useOpenInteractionType-Ss_6xZdw.js +0 -12
|
@@ -1999,10 +1999,12 @@ function insertVersion(schema, version) {
|
|
|
1999
1999
|
return `INSERT INTO ${schema}.version(version) VALUES ('${version}')`;
|
|
2000
2000
|
}
|
|
2001
2001
|
function buildFetchParams(options) {
|
|
2002
|
-
const { ignoreSingletons, ignoreGroups, groupConcurrency } = options;
|
|
2002
|
+
const { ignoreSingletons, ignoreGroups, groupConcurrency, minPriority, maxPriority } = options;
|
|
2003
2003
|
const hasIgnoreSingletons = ignoreSingletons != null && ignoreSingletons.length > 0;
|
|
2004
2004
|
const hasIgnoreGroups = ignoreGroups != null && ignoreGroups.length > 0;
|
|
2005
2005
|
const hasGroupConcurrency = groupConcurrency != null;
|
|
2006
|
+
const hasMinPriority = minPriority != null;
|
|
2007
|
+
const hasMaxPriority = maxPriority != null;
|
|
2006
2008
|
const groupConcurrencyConfig = hasGroupConcurrency ? typeof groupConcurrency === "number" ? { default: groupConcurrency } : groupConcurrency : null;
|
|
2007
2009
|
const hasTiers = groupConcurrencyConfig?.tiers && Object.keys(groupConcurrencyConfig.tiers).length > 0;
|
|
2008
2010
|
const values = [];
|
|
@@ -2011,6 +2013,8 @@ function buildFetchParams(options) {
|
|
|
2011
2013
|
let ignoreGroupsParam = "";
|
|
2012
2014
|
let defaultGroupLimitParam = "";
|
|
2013
2015
|
let tiersParam = "";
|
|
2016
|
+
let minPriorityParam = "";
|
|
2017
|
+
let maxPriorityParam = "";
|
|
2014
2018
|
if (hasIgnoreSingletons) {
|
|
2015
2019
|
paramIndex++;
|
|
2016
2020
|
ignoreSingletonsParam = `$${paramIndex}::text[]`;
|
|
@@ -2031,14 +2035,26 @@ function buildFetchParams(options) {
|
|
|
2031
2035
|
values.push(JSON.stringify(groupConcurrencyConfig.tiers));
|
|
2032
2036
|
}
|
|
2033
2037
|
}
|
|
2034
|
-
|
|
2038
|
+
if (hasMinPriority) {
|
|
2039
|
+
paramIndex++;
|
|
2040
|
+
minPriorityParam = `$${paramIndex}::int`;
|
|
2041
|
+
values.push(minPriority);
|
|
2042
|
+
}
|
|
2043
|
+
if (hasMaxPriority) {
|
|
2044
|
+
paramIndex++;
|
|
2045
|
+
maxPriorityParam = `$${paramIndex}::int`;
|
|
2046
|
+
values.push(maxPriority);
|
|
2047
|
+
}
|
|
2048
|
+
return { values, ignoreSingletonsParam, ignoreGroupsParam, defaultGroupLimitParam, tiersParam, minPriorityParam, maxPriorityParam };
|
|
2035
2049
|
}
|
|
2036
2050
|
function fetchNextJob(options) {
|
|
2037
|
-
const { schema, table, name, policy, limit, includeMetadata, priority = true, orderByCreatedOn = true, ignoreStartAfter = false, groupConcurrency } = options;
|
|
2051
|
+
const { schema, table, name, policy, limit, includeMetadata, priority = true, orderByCreatedOn = true, ignoreStartAfter = false, groupConcurrency, minPriority, maxPriority } = options;
|
|
2038
2052
|
const singletonFetch = limit > 1 && (policy === QUEUE_POLICIES.singleton || policy === QUEUE_POLICIES.stately);
|
|
2039
2053
|
const hasIgnoreSingletons = options.ignoreSingletons != null && options.ignoreSingletons.length > 0;
|
|
2040
2054
|
const hasIgnoreGroups = options.ignoreGroups != null && options.ignoreGroups.length > 0;
|
|
2041
2055
|
const hasGroupConcurrency = groupConcurrency != null;
|
|
2056
|
+
const hasMinPriority = minPriority != null;
|
|
2057
|
+
const hasMaxPriority = maxPriority != null;
|
|
2042
2058
|
const hasTiers = hasGroupConcurrency && typeof groupConcurrency === "object" && groupConcurrency.tiers && Object.keys(groupConcurrency.tiers).length > 0;
|
|
2043
2059
|
const params = buildFetchParams(options);
|
|
2044
2060
|
const whereConditions = [
|
|
@@ -2046,7 +2062,9 @@ function fetchNextJob(options) {
|
|
|
2046
2062
|
`state < '${JOB_STATES.active}'`,
|
|
2047
2063
|
!ignoreStartAfter ? "start_after < now()" : "",
|
|
2048
2064
|
hasIgnoreSingletons ? `singleton_key <> ALL(${params.ignoreSingletonsParam})` : "",
|
|
2049
|
-
hasIgnoreGroups ? `(group_id IS NULL OR group_id <> ALL(${params.ignoreGroupsParam}))` : ""
|
|
2065
|
+
hasIgnoreGroups ? `(group_id IS NULL OR group_id <> ALL(${params.ignoreGroupsParam}))` : "",
|
|
2066
|
+
hasMinPriority ? `priority >= ${params.minPriorityParam}` : "",
|
|
2067
|
+
hasMaxPriority ? `priority <= ${params.maxPriorityParam}` : ""
|
|
2050
2068
|
].filter(Boolean).join(" AND ");
|
|
2051
2069
|
const selectCols = [
|
|
2052
2070
|
"id",
|
|
@@ -2688,6 +2706,17 @@ function validateGroupConcurrencyValue(value, optionName) {
|
|
|
2688
2706
|
}
|
|
2689
2707
|
}
|
|
2690
2708
|
}
|
|
2709
|
+
function validatePriorityRangeConfig(config) {
|
|
2710
|
+
if (config.minPriority !== void 0) {
|
|
2711
|
+
assert(Number.isInteger(config.minPriority), "minPriority must be an integer");
|
|
2712
|
+
}
|
|
2713
|
+
if (config.maxPriority !== void 0) {
|
|
2714
|
+
assert(Number.isInteger(config.maxPriority), "maxPriority must be an integer");
|
|
2715
|
+
}
|
|
2716
|
+
if (config.minPriority !== void 0 && config.maxPriority !== void 0) {
|
|
2717
|
+
assert(config.minPriority <= config.maxPriority, "minPriority must be <= maxPriority");
|
|
2718
|
+
}
|
|
2719
|
+
}
|
|
2691
2720
|
function validateGroupConcurrencyConfig(config) {
|
|
2692
2721
|
const hasGlobal = config.groupConcurrency != null;
|
|
2693
2722
|
const hasLocal = config.localGroupConcurrency != null;
|
|
@@ -2741,6 +2770,7 @@ function checkWorkArgs(name, args) {
|
|
|
2741
2770
|
assert(!("includeMetadata" in options) || typeof options.includeMetadata === "boolean", "includeMetadata must be a boolean");
|
|
2742
2771
|
assert(!("priority" in options) || typeof options.priority === "boolean", "priority must be a boolean");
|
|
2743
2772
|
assert(!("localConcurrency" in options) || Number.isInteger(options.localConcurrency) && options.localConcurrency >= 1, "localConcurrency must be an integer >= 1");
|
|
2773
|
+
validatePriorityRangeConfig(options);
|
|
2744
2774
|
validateGroupConcurrencyConfig(options);
|
|
2745
2775
|
validateHeartbeatRefreshConfig(options);
|
|
2746
2776
|
return { options, callback };
|
|
@@ -2751,6 +2781,7 @@ function checkFetchArgs(name, options) {
|
|
|
2751
2781
|
assert(!("includeMetadata" in options) || typeof options.includeMetadata === "boolean", "includeMetadata must be a boolean");
|
|
2752
2782
|
assert(!("priority" in options) || typeof options.priority === "boolean", "priority must be a boolean");
|
|
2753
2783
|
assert(!("ignoreStartAfter" in options) || typeof options.ignoreStartAfter === "boolean", "ignoreStartAfter must be a boolean");
|
|
2784
|
+
validatePriorityRangeConfig(options);
|
|
2754
2785
|
}
|
|
2755
2786
|
function getConfig(value) {
|
|
2756
2787
|
assert(
|
|
@@ -3797,6 +3828,41 @@ class Contractor {
|
|
|
3797
3828
|
await this.db.executeSql(commands);
|
|
3798
3829
|
}
|
|
3799
3830
|
}
|
|
3831
|
+
function unwrapSQLResult(result) {
|
|
3832
|
+
if (Array.isArray(result)) {
|
|
3833
|
+
return { rows: result.flatMap((i) => i.rows) };
|
|
3834
|
+
}
|
|
3835
|
+
return result;
|
|
3836
|
+
}
|
|
3837
|
+
function delay(ms, error, abortController) {
|
|
3838
|
+
const ac = abortController || new AbortController();
|
|
3839
|
+
const promise = new Promise((resolve, reject) => {
|
|
3840
|
+
setTimeout$1(ms, null, { signal: ac.signal }).then(() => {
|
|
3841
|
+
if (error) {
|
|
3842
|
+
reject(new Error(error));
|
|
3843
|
+
} else {
|
|
3844
|
+
resolve();
|
|
3845
|
+
}
|
|
3846
|
+
}).catch(resolve);
|
|
3847
|
+
});
|
|
3848
|
+
promise.abort = () => {
|
|
3849
|
+
if (!ac.signal.aborted) {
|
|
3850
|
+
ac.abort();
|
|
3851
|
+
}
|
|
3852
|
+
};
|
|
3853
|
+
return promise;
|
|
3854
|
+
}
|
|
3855
|
+
async function resolveWithinSeconds(promise, seconds, message, abortController) {
|
|
3856
|
+
const timeout = Math.max(1, seconds) * 1e3;
|
|
3857
|
+
const reject = delay(timeout, message, abortController);
|
|
3858
|
+
let result;
|
|
3859
|
+
try {
|
|
3860
|
+
result = await Promise.race([promise, reject]);
|
|
3861
|
+
} finally {
|
|
3862
|
+
reject.abort();
|
|
3863
|
+
}
|
|
3864
|
+
return result;
|
|
3865
|
+
}
|
|
3800
3866
|
async function emitAndPersistWarning(ctx, type, message, data) {
|
|
3801
3867
|
ctx.emitter.emit(ctx.warningEvent, { message, data });
|
|
3802
3868
|
if (ctx.persistWarnings) {
|
|
@@ -3832,6 +3898,7 @@ class Timekeeper extends EventEmitter {
|
|
|
3832
3898
|
cronMonitorInterval;
|
|
3833
3899
|
skewMonitorInterval;
|
|
3834
3900
|
timekeeping;
|
|
3901
|
+
_checkingSkew = false;
|
|
3835
3902
|
clockSkew = 0;
|
|
3836
3903
|
events = EVENTS;
|
|
3837
3904
|
constructor(db, manager, config) {
|
|
@@ -3840,6 +3907,9 @@ class Timekeeper extends EventEmitter {
|
|
|
3840
3907
|
this.config = config;
|
|
3841
3908
|
this.manager = manager;
|
|
3842
3909
|
}
|
|
3910
|
+
get checkingSkew() {
|
|
3911
|
+
return this._checkingSkew;
|
|
3912
|
+
}
|
|
3843
3913
|
get warningContext() {
|
|
3844
3914
|
return {
|
|
3845
3915
|
emitter: this,
|
|
@@ -3877,13 +3947,20 @@ class Timekeeper extends EventEmitter {
|
|
|
3877
3947
|
clearInterval(this.cronMonitorInterval);
|
|
3878
3948
|
this.cronMonitorInterval = null;
|
|
3879
3949
|
}
|
|
3950
|
+
while (this.timekeeping || this._checkingSkew) {
|
|
3951
|
+
await delay(10);
|
|
3952
|
+
}
|
|
3880
3953
|
}
|
|
3881
3954
|
async cacheClockSkew() {
|
|
3882
3955
|
let skew = 0;
|
|
3956
|
+
this._checkingSkew = true;
|
|
3883
3957
|
try {
|
|
3884
3958
|
if (this.config.__test__force_clock_monitoring_error) {
|
|
3885
3959
|
throw new Error(this.config.__test__force_clock_monitoring_error);
|
|
3886
3960
|
}
|
|
3961
|
+
if (this.config.__test__delay_clock_skew_ms) {
|
|
3962
|
+
await delay(this.config.__test__delay_clock_skew_ms);
|
|
3963
|
+
}
|
|
3887
3964
|
const { rows } = await this.db.executeSql(getTime());
|
|
3888
3965
|
const local = Date.now();
|
|
3889
3966
|
const dbTime = parseFloat(rows[0].time);
|
|
@@ -3901,6 +3978,7 @@ class Timekeeper extends EventEmitter {
|
|
|
3901
3978
|
this.emit(this.events.error, err);
|
|
3902
3979
|
} finally {
|
|
3903
3980
|
this.clockSkew = skew;
|
|
3981
|
+
this._checkingSkew = false;
|
|
3904
3982
|
}
|
|
3905
3983
|
}
|
|
3906
3984
|
async onCron() {
|
|
@@ -3970,41 +4048,6 @@ class Timekeeper extends EventEmitter {
|
|
|
3970
4048
|
await this.db.executeSql(sql, [name, key]);
|
|
3971
4049
|
}
|
|
3972
4050
|
}
|
|
3973
|
-
function unwrapSQLResult(result) {
|
|
3974
|
-
if (Array.isArray(result)) {
|
|
3975
|
-
return { rows: result.flatMap((i) => i.rows) };
|
|
3976
|
-
}
|
|
3977
|
-
return result;
|
|
3978
|
-
}
|
|
3979
|
-
function delay(ms, error, abortController) {
|
|
3980
|
-
const ac = abortController || new AbortController();
|
|
3981
|
-
const promise = new Promise((resolve, reject) => {
|
|
3982
|
-
setTimeout$1(ms, null, { signal: ac.signal }).then(() => {
|
|
3983
|
-
if (error) {
|
|
3984
|
-
reject(new Error(error));
|
|
3985
|
-
} else {
|
|
3986
|
-
resolve();
|
|
3987
|
-
}
|
|
3988
|
-
}).catch(resolve);
|
|
3989
|
-
});
|
|
3990
|
-
promise.abort = () => {
|
|
3991
|
-
if (!ac.signal.aborted) {
|
|
3992
|
-
ac.abort();
|
|
3993
|
-
}
|
|
3994
|
-
};
|
|
3995
|
-
return promise;
|
|
3996
|
-
}
|
|
3997
|
-
async function resolveWithinSeconds(promise, seconds, message, abortController) {
|
|
3998
|
-
const timeout = Math.max(1, seconds) * 1e3;
|
|
3999
|
-
const reject = delay(timeout, message, abortController);
|
|
4000
|
-
let result;
|
|
4001
|
-
try {
|
|
4002
|
-
result = await Promise.race([promise, reject]);
|
|
4003
|
-
} finally {
|
|
4004
|
-
reject.abort();
|
|
4005
|
-
}
|
|
4006
|
-
return result;
|
|
4007
|
-
}
|
|
4008
4051
|
const WORKER_STATES = {
|
|
4009
4052
|
created: "created",
|
|
4010
4053
|
active: "active",
|
|
@@ -4436,7 +4479,9 @@ class Manager extends EventEmitter {
|
|
|
4436
4479
|
localGroupConcurrency,
|
|
4437
4480
|
groupConcurrency,
|
|
4438
4481
|
orderByCreatedOn = true,
|
|
4439
|
-
heartbeatRefreshSeconds
|
|
4482
|
+
heartbeatRefreshSeconds,
|
|
4483
|
+
minPriority,
|
|
4484
|
+
maxPriority
|
|
4440
4485
|
} = options;
|
|
4441
4486
|
if (localGroupConcurrency != null) {
|
|
4442
4487
|
this.#storeLocalGroupConfig(name, localGroupConcurrency);
|
|
@@ -4445,7 +4490,7 @@ class Manager extends EventEmitter {
|
|
|
4445
4490
|
const createWorker = (workerId) => {
|
|
4446
4491
|
const fetch = () => {
|
|
4447
4492
|
const ignoreGroups = localGroupConcurrency != null ? this.#getGroupsAtLocalCapacity(name) : void 0;
|
|
4448
|
-
return this.fetch(name, { batchSize, includeMetadata, priority, orderByCreatedOn, groupConcurrency, ignoreGroups });
|
|
4493
|
+
return this.fetch(name, { batchSize, includeMetadata, priority, orderByCreatedOn, groupConcurrency, ignoreGroups, minPriority, maxPriority });
|
|
4449
4494
|
};
|
|
4450
4495
|
const onFetch = async (jobs2) => {
|
|
4451
4496
|
if (!jobs2.length) return;
|
|
@@ -4994,6 +5039,9 @@ class Boss extends EventEmitter {
|
|
|
4994
5039
|
WARNINGS.LARGE_QUEUE.size = config.warningQueueSize;
|
|
4995
5040
|
}
|
|
4996
5041
|
}
|
|
5042
|
+
get maintaining() {
|
|
5043
|
+
return !!this.#maintaining;
|
|
5044
|
+
}
|
|
4997
5045
|
async start() {
|
|
4998
5046
|
if (this.#stopped) {
|
|
4999
5047
|
this.#stopping = false;
|
|
@@ -5009,6 +5057,9 @@ class Boss extends EventEmitter {
|
|
|
5009
5057
|
this.#stopping = true;
|
|
5010
5058
|
if (this.#superviseInterval) clearInterval(this.#superviseInterval);
|
|
5011
5059
|
this.#stopped = true;
|
|
5060
|
+
while (this.#maintaining) {
|
|
5061
|
+
await delay(10);
|
|
5062
|
+
}
|
|
5012
5063
|
}
|
|
5013
5064
|
}
|
|
5014
5065
|
get #warningContext() {
|
|
@@ -5046,6 +5097,9 @@ class Boss extends EventEmitter {
|
|
|
5046
5097
|
throw new Error(this.#config.__test__throw_maint);
|
|
5047
5098
|
}
|
|
5048
5099
|
this.#maintaining = true;
|
|
5100
|
+
if (this.#config.__test__delay_maint_ms) {
|
|
5101
|
+
await delay(this.#config.__test__delay_maint_ms);
|
|
5102
|
+
}
|
|
5049
5103
|
const queues = await this.#manager.getQueues();
|
|
5050
5104
|
!this.#stopped && await this.supervise(queues);
|
|
5051
5105
|
!this.#stopped && await this.#maintainWarnings();
|
|
@@ -5157,6 +5211,9 @@ class Bam extends EventEmitter {
|
|
|
5157
5211
|
this.#stopped = true;
|
|
5158
5212
|
this.#working = false;
|
|
5159
5213
|
}
|
|
5214
|
+
get working() {
|
|
5215
|
+
return this.#working;
|
|
5216
|
+
}
|
|
5160
5217
|
async start() {
|
|
5161
5218
|
if (!this.#stopped) return;
|
|
5162
5219
|
this.#stopped = false;
|
|
@@ -5173,6 +5230,9 @@ class Bam extends EventEmitter {
|
|
|
5173
5230
|
clearInterval(this.#pollInterval);
|
|
5174
5231
|
this.#pollInterval = void 0;
|
|
5175
5232
|
}
|
|
5233
|
+
while (this.#working) {
|
|
5234
|
+
await delay(10);
|
|
5235
|
+
}
|
|
5176
5236
|
}
|
|
5177
5237
|
async #onPoll() {
|
|
5178
5238
|
if (this.#stopped || this.#working || !this.#config.migrate) return;
|
|
@@ -5181,6 +5241,9 @@ class Bam extends EventEmitter {
|
|
|
5181
5241
|
if (this.#config.__test__throw_bam) {
|
|
5182
5242
|
throw new Error(this.#config.__test__throw_bam);
|
|
5183
5243
|
}
|
|
5244
|
+
if (this.#config.__test__delay_bam_ms) {
|
|
5245
|
+
await delay(this.#config.__test__delay_bam_ms);
|
|
5246
|
+
}
|
|
5184
5247
|
const sql = trySetBamTime(
|
|
5185
5248
|
this.#config.schema,
|
|
5186
5249
|
this.#config.bamIntervalSeconds
|
|
@@ -5483,6 +5546,15 @@ class PgBoss extends EventEmitter {
|
|
|
5483
5546
|
getQueueStats(name) {
|
|
5484
5547
|
return this.#manager.getQueueStats(name);
|
|
5485
5548
|
}
|
|
5549
|
+
isMaintaining() {
|
|
5550
|
+
return this.#boss.maintaining;
|
|
5551
|
+
}
|
|
5552
|
+
isBamWorking() {
|
|
5553
|
+
return this.#bam.working;
|
|
5554
|
+
}
|
|
5555
|
+
isCheckingSkew() {
|
|
5556
|
+
return this.#timekeeper.checkingSkew;
|
|
5557
|
+
}
|
|
5486
5558
|
supervise(name) {
|
|
5487
5559
|
return this.#boss.supervise(name);
|
|
5488
5560
|
}
|
|
@@ -9825,10 +9897,10 @@ const route11 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
9825
9897
|
default: warnings,
|
|
9826
9898
|
loader
|
|
9827
9899
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
9828
|
-
const serverManifest = { "entry": { "module": "/assets/entry.client-
|
|
9900
|
+
const serverManifest = { "entry": { "module": "/assets/entry.client-DXZUROTm.js", "imports": ["/assets/chunk-UVKPFVEO-YfSfkVr_.js", "/assets/index-DuhoQwUK.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/root-DDqOT0vL.js", "imports": ["/assets/chunk-UVKPFVEO-YfSfkVr_.js", "/assets/index-DuhoQwUK.js", "/assets/db-link-CU7IJqbq.js", "/assets/createLucideIcon-Bt-yXILq.js", "/assets/MenuTrigger-CoRd-BqL.js", "/assets/useOpenInteractionType-mgYMZAa8.js"], "css": ["/assets/root-Bpb4WtY4.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_index": { "id": "routes/_index", "parentId": "root", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/_index-BTx7NRR8.js", "imports": ["/assets/chunk-UVKPFVEO-YfSfkVr_.js", "/assets/db-link-CU7IJqbq.js", "/assets/button-Ba8FWhqs.js", "/assets/badge-DBD4CzAv.js", "/assets/table-Au2E5mnP.js", "/assets/error-card-D-uZRy_l.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/jobs": { "id": "routes/jobs", "parentId": "root", "path": "jobs", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/jobs-ouYjIGAi.js", "imports": ["/assets/chunk-UVKPFVEO-YfSfkVr_.js", "/assets/db-link-CU7IJqbq.js", "/assets/button-Ba8FWhqs.js", "/assets/badge-DBD4CzAv.js", "/assets/table-Au2E5mnP.js", "/assets/pagination-BItl293Q.js", "/assets/filter-select-Tk_CBvrn.js", "/assets/error-card-D-uZRy_l.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/queues._index": { "id": "routes/queues._index", "parentId": "root", "path": "queues", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/queues._index-_ID9kaow.js", "imports": ["/assets/chunk-UVKPFVEO-YfSfkVr_.js", "/assets/db-link-CU7IJqbq.js", "/assets/button-Ba8FWhqs.js", "/assets/badge-DBD4CzAv.js", "/assets/filter-select-Tk_CBvrn.js", "/assets/table-Au2E5mnP.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/queues.create": { "id": "routes/queues.create", "parentId": "root", "path": "queues/create", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/queues.create-CmVW5UVm.js", "imports": ["/assets/chunk-UVKPFVEO-YfSfkVr_.js", "/assets/db-link-CU7IJqbq.js", "/assets/button-Ba8FWhqs.js", "/assets/chevron-down-CYa4FYmp.js", "/assets/error-card-D-uZRy_l.js", "/assets/createLucideIcon-Bt-yXILq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/queues.$name": { "id": "routes/queues.$name", "parentId": "root", "path": "queues/:name", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/queues._name-DwdbQND-.js", "imports": ["/assets/chunk-UVKPFVEO-YfSfkVr_.js", "/assets/db-link-CU7IJqbq.js", "/assets/button-Ba8FWhqs.js", "/assets/badge-DBD4CzAv.js", "/assets/table-Au2E5mnP.js", "/assets/pagination-BItl293Q.js", "/assets/filter-select-Tk_CBvrn.js", "/assets/dialog-Dkx42Rkd.js", "/assets/error-card-D-uZRy_l.js", "/assets/chevron-down-CYa4FYmp.js", "/assets/createLucideIcon-Bt-yXILq.js", "/assets/MenuTrigger-CoRd-BqL.js", "/assets/useOpenInteractionType-mgYMZAa8.js", "/assets/index-DuhoQwUK.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/queues.$name.jobs.$jobId": { "id": "routes/queues.$name.jobs.$jobId", "parentId": "root", "path": "queues/:name/jobs/:jobId", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/queues._name.jobs._jobId-DrgG3VBb.js", "imports": ["/assets/chunk-UVKPFVEO-YfSfkVr_.js", "/assets/db-link-CU7IJqbq.js", "/assets/button-Ba8FWhqs.js", "/assets/badge-DBD4CzAv.js", "/assets/dialog-Dkx42Rkd.js", "/assets/error-card-D-uZRy_l.js", "/assets/createLucideIcon-Bt-yXILq.js", "/assets/useOpenInteractionType-mgYMZAa8.js", "/assets/index-DuhoQwUK.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/schedules": { "id": "routes/schedules", "parentId": "root", "path": "schedules", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/schedules-B6ixYsvz.js", "imports": ["/assets/chunk-UVKPFVEO-YfSfkVr_.js", "/assets/db-link-CU7IJqbq.js", "/assets/button-Ba8FWhqs.js", "/assets/table-Au2E5mnP.js", "/assets/pagination-BItl293Q.js", "/assets/error-card-D-uZRy_l.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/schedules.$name.$key": { "id": "routes/schedules.$name.$key", "parentId": "root", "path": "schedules/:name/:key", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/schedules._name._key-CXTVKoOc.js", "imports": ["/assets/chunk-UVKPFVEO-YfSfkVr_.js", "/assets/db-link-CU7IJqbq.js", "/assets/button-Ba8FWhqs.js", "/assets/dialog-Dkx42Rkd.js", "/assets/error-card-D-uZRy_l.js", "/assets/createLucideIcon-Bt-yXILq.js", "/assets/useOpenInteractionType-mgYMZAa8.js", "/assets/index-DuhoQwUK.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/schedules.new": { "id": "routes/schedules.new", "parentId": "root", "path": "schedules/new", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/schedules.new-Dmasri9v.js", "imports": ["/assets/chunk-UVKPFVEO-YfSfkVr_.js", "/assets/db-link-CU7IJqbq.js", "/assets/button-Ba8FWhqs.js", "/assets/error-card-D-uZRy_l.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/send": { "id": "routes/send", "parentId": "root", "path": "send", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/send-CqR34Z50.js", "imports": ["/assets/chunk-UVKPFVEO-YfSfkVr_.js", "/assets/db-link-CU7IJqbq.js", "/assets/button-Ba8FWhqs.js", "/assets/error-card-D-uZRy_l.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/warnings": { "id": "routes/warnings", "parentId": "root", "path": "warnings", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/warnings-Dj3qacgN.js", "imports": ["/assets/chunk-UVKPFVEO-YfSfkVr_.js", "/assets/button-Ba8FWhqs.js", "/assets/badge-DBD4CzAv.js", "/assets/table-Au2E5mnP.js", "/assets/pagination-BItl293Q.js", "/assets/filter-select-Tk_CBvrn.js", "/assets/error-card-D-uZRy_l.js", "/assets/db-link-CU7IJqbq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 } }, "url": "/assets/manifest-72f6b3e9.js", "version": "72f6b3e9", "sri": void 0 };
|
|
9829
9901
|
const assetsBuildDirectory = "build/client";
|
|
9830
9902
|
const basename = "/";
|
|
9831
|
-
const future = { "unstable_optimizeDeps": false, "unstable_subResourceIntegrity": false, "unstable_trailingSlashAwareDataRequests": false, "unstable_previewServerPrerendering": false, "v8_middleware": false, "v8_splitRouteModules": false, "v8_viteEnvironmentApi": false };
|
|
9903
|
+
const future = { "unstable_optimizeDeps": false, "unstable_passThroughRequests": false, "unstable_subResourceIntegrity": false, "unstable_trailingSlashAwareDataRequests": false, "unstable_previewServerPrerendering": false, "v8_middleware": false, "v8_splitRouteModules": false, "v8_viteEnvironmentApi": false };
|
|
9832
9904
|
const ssr = true;
|
|
9833
9905
|
const isSpaMode = false;
|
|
9834
9906
|
const prerender = [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pg-boss/dashboard",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Web dashboard for monitoring and managing pg-boss job queues",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pg-boss",
|
|
@@ -41,35 +41,35 @@
|
|
|
41
41
|
"ci": "npm run typecheck && npm run cover:frontend && cross-env DATABASE_URL=postgres://postgres:postgres@127.0.0.1:5432/pgboss npm run cover:server"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@base-ui/react": "^1.
|
|
45
|
-
"@hono/node-server": "^1.19.
|
|
44
|
+
"@base-ui/react": "^1.3.0",
|
|
45
|
+
"@hono/node-server": "^1.19.12",
|
|
46
46
|
"@react-router/node": "^7.13.0",
|
|
47
47
|
"class-variance-authority": "^0.7.1",
|
|
48
48
|
"clsx": "^2.1.1",
|
|
49
|
-
"hono": "^4.12.
|
|
50
|
-
"isbot": "^5.1.
|
|
49
|
+
"hono": "^4.12.9",
|
|
50
|
+
"isbot": "^5.1.36",
|
|
51
51
|
"lucide-react": "^0.575.0",
|
|
52
|
-
"pg": "^8.
|
|
53
|
-
"pg-boss": "^12.
|
|
52
|
+
"pg": "^8.20.0",
|
|
53
|
+
"pg-boss": "^12.14.0",
|
|
54
54
|
"react": "^19.2.4",
|
|
55
55
|
"react-dom": "^19.2.4",
|
|
56
56
|
"react-router": "^7.13.0",
|
|
57
|
-
"react-router-hono-server": "^2.25.
|
|
57
|
+
"react-router-hono-server": "^2.25.2",
|
|
58
58
|
"tailwind-merge": "^3.5.0"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
|
-
"@react-router/dev": "^7.13.
|
|
62
|
-
"@tailwindcss/vite": "^4.2.
|
|
61
|
+
"@react-router/dev": "^7.13.2",
|
|
62
|
+
"@tailwindcss/vite": "^4.2.2",
|
|
63
63
|
"@testing-library/dom": "^10.4.1",
|
|
64
64
|
"@testing-library/jest-dom": "^6.9.1",
|
|
65
65
|
"@testing-library/react": "^16.3.2",
|
|
66
66
|
"@testing-library/user-event": "^14.6.1",
|
|
67
|
-
"@types/node": "^22.19.
|
|
68
|
-
"@types/pg": "^8.
|
|
67
|
+
"@types/node": "^22.19.15",
|
|
68
|
+
"@types/pg": "^8.20.0",
|
|
69
69
|
"@types/react": "^19.2.14",
|
|
70
70
|
"@types/react-dom": "^19.2.3",
|
|
71
|
-
"@vitejs/plugin-react": "^5.
|
|
72
|
-
"@vitest/coverage-v8": "^4.
|
|
71
|
+
"@vitejs/plugin-react": "^5.2.0",
|
|
72
|
+
"@vitest/coverage-v8": "^4.1.2",
|
|
73
73
|
"cross-env": "^10.1.0",
|
|
74
74
|
"jsdom": "^28.1.0",
|
|
75
75
|
"tailwindcss": "^4.1.18",
|