@mndrk/agx 1.4.33 → 1.4.35
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/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/BUILD_ID +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/app-build-manifest.json +40 -40
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/app-path-routes-manifest.json +10 -10
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/build-manifest.json +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/prerender-manifest.json +22 -22
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/required-server-files.json +2 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/audit/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/auth/[...nextauth]/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/auth/daemon-secret/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/auth/device/code/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/auth/device/token/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/domains/[id]/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/domains/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/learnings/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/logs/stream/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/cancel/route.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/signal/route.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/signal/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/start/route.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/start/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/status/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/[id]/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/queue/complete/route.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/queue/complete/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/queue/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/stage-prompts/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/comments/[commentId]/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/comments/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/heartbeat/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/history/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/logs/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/route.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/stream/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/user-settings/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/workflows/[id]/nodes/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/workflows/[id]/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/auth/callback/route_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/auth/device/page.js +5 -5
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/auth/device/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/auth/device.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/auth/device.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/dashboard/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/dashboard.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/dashboard.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/login.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/login.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/tasks/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/workflow/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app-paths-manifest.json +10 -10
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/1240.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/6317.js +16 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/7699.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/8978.js +1141 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/edge-instrumentation.js +2 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/instrumentation.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/middleware-manifest.json +6 -5
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/pages/404.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/pages/500.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/server-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/server-reference-manifest.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/app/auth/device/{page-ccd70ca63478d630.js → page-89af167d1fe0348d.js} +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/fallback/amp.js +6 -6
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/fallback/main-app.js +14 -14
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/fallback/main.js +11 -11
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/fallback/webpack.js +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/worker/index.js +46 -14
- package/lib/cli/cloud/taskLogger.js +58 -70
- package/lib/cli/cloudArtifacts.js +29 -23
- package/lib/cli/runCli.js +99 -28
- package/lib/prompts/cloudTask.js +144 -18
- package/package.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/_error.js +0 -28
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/main.js +0 -1616
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/pages/_app.js +0 -28
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/pages/_error.js +0 -28
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/react-refresh.js +0 -62
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/webpack.js +0 -1405
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/development/_buildManifest.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/development/_ssgManifest.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/webpack/3f44f671f4861aa9.webpack.hot-update.json +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/webpack/webpack.3f44f671f4861aa9.hot-update.js +0 -12
- /package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/{DMNQmUkQjUP3zxWUwUUqb → _sQ7ofTHOJaquTtqRSH9B}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/{DMNQmUkQjUP3zxWUwUUqb → _sQ7ofTHOJaquTtqRSH9B}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,1141 @@
|
|
|
1
|
+
"use strict";exports.id=8978,exports.ids=[8978],exports.modules={8765:(a,b,c)=>{c.d(b,{A:()=>y});var d=c(34589),e=c(77598),f=c(78474);let g=Symbol("isNonError");function h(a,b,c){Object.defineProperty(a,b,{value:c,writable:!1,enumerable:!1,configurable:!1})}class i extends Error{constructor(a,{superclass:b=Error}={}){if(i.isNonError(a))return a;if(a instanceof Error)throw TypeError("Do not pass Error instances to NonError. Throw the error directly instead.");super(`Non-error value: ${function(a){if(void 0===a)return"undefined";if(null===a)return"null";if("string"==typeof a)return a;if("number"==typeof a||"boolean"==typeof a)return String(a);if("bigint"==typeof a)return`${a}n`;if("symbol"==typeof a)return a.toString();if("function"==typeof a)return`[Function${a.name?` ${a.name}`:" (anonymous)"}]`;if(a instanceof Error)try{return String(a)}catch{return"<Unserializable error>"}try{return JSON.stringify(a)}catch{try{return String(a)}catch{return"<Unserializable value>"}}}(a)}`),b!==Error&&Object.setPrototypeOf(this,b.prototype),h(this,"name","NonError"),h(this,g,!0),h(this,"isNonError",!0),h(this,"value",a)}static isNonError(a){return a?.[g]===!0}static #a(a,b){try{let c=a(...b);if(c&&"function"==typeof c.then)return(async()=>{try{return await c}catch(a){if(a instanceof Error)throw a;throw new i(a)}})();return c}catch(a){if(a instanceof Error)throw a;throw new i(a)}}static try(a){return i.#a(a,[])}static wrap(a){return(...b)=>i.#a(a,b)}static[Symbol.hasInstance](a){return i.isNonError(a)}}let j=new Map([Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,AggregateError,globalThis.DOMException,globalThis.AssertionError,globalThis.SystemError].filter(Boolean).map(a=>[a.name,a])),k=new Map,l=[{property:"name",enumerable:!1},{property:"message",enumerable:!1},{property:"stack",enumerable:!1},{property:"code",enumerable:!0},{property:"cause",enumerable:!1},{property:"errors",enumerable:!1}],m=new WeakSet,n=({from:a,seen:b,to:c,forceEnumerable:d,maxDepth:e,depth:f,useToJSON:g,serialize:h})=>{if(c||(c=Array.isArray(a)?[]:!h&&function(a){return!!a&&"object"==typeof a&&"string"==typeof a.name&&"string"==typeof a.message&&"string"==typeof a.stack}(a)?(a=>{if("NonError"===a)return new i;let b=k.get(a);if(b)return b();let c=j.get(a)??Error;return c===AggregateError?new c([]):new c})(a.name):{}),b.add(a),f>=e)return b.delete(a),c;if(g&&"function"==typeof a.toJSON&&!m.has(a))return b.delete(a),(a=>{m.add(a);let b=a.toJSON();return m.delete(a),b})(a);let o=a=>n({from:a,seen:b,forceEnumerable:d,maxDepth:e,depth:f+1,useToJSON:g,serialize:h});for(let d of Object.keys(a)){let e=a[d];if(e&&e instanceof Uint8Array&&"Buffer"===e.constructor.name){c[d]=h?"[object Buffer]":e;continue}if(null!==e&&"object"==typeof e&&"function"==typeof e.pipe){c[d]=h?"[object Stream]":e;continue}if("function"==typeof e){h||(c[d]=e);continue}if(h&&"bigint"==typeof e){c[d]=`${e}n`;continue}if(!e||"object"!=typeof e){try{c[d]=e}catch{}continue}if(!b.has(e)){c[d]=o(e);continue}c[d]="[Circular]"}if(h||c instanceof Error)for(let{property:e,enumerable:f}of l){let g=a[e];if(null==g)continue;let h=Object.getOwnPropertyDescriptor(c,e);if(h?.configurable===!1)continue;let i=g;"object"==typeof g&&(i=b.has(g)?"[Circular]":o(g)),Object.defineProperty(c,e,{value:i,enumerable:d||f,configurable:!0,writable:!0})}return b.delete(a),c};var o=c(49676),p=c(17974),q=c(87819),r=c(50027);let s={created:"created",active:"active",stopping:"stopping",stopped:"stopped"};class t{id;name;options;fetch;onFetch;onError;interval;jobs=[];createdOn=Date.now();state=s.created;lastFetchedOn=null;lastJobStartedOn=null;lastJobEndedOn=null;lastJobDuration=null;lastError=null;lastErrorOn=null;stopping=!1;stopped=!1;abortController=null;loopDelayPromise=null;beenNotified=!1;runPromise=null;constructor({id:a,name:b,options:c,interval:d,fetch:e,onFetch:f,onError:g}){this.id=a,this.name=b,this.options=c,this.fetch=e,this.onFetch=f,this.onError=g,this.interval=d}start(){this.runPromise=this.run()}async run(){for(this.state=s.active;!this.stopping;){let a=Date.now();try{this.beenNotified=!1;let a=await this.fetch();this.lastFetchedOn=Date.now(),a&&(this.jobs=a,this.lastJobStartedOn=this.lastFetchedOn,await this.onFetch(a),this.lastJobEndedOn=Date.now(),this.jobs=[])}catch(a){this.lastErrorOn=Date.now(),this.lastError=a,a.message=`${a.message} (Queue: ${this.name}, Worker: ${this.id})`,this.onError(a)}let b=Date.now()-a;this.lastJobDuration=b,this.stopping||this.beenNotified||!(this.interval-b>100)||(this.loopDelayPromise=(0,r.cb)(this.interval-b),await this.loopDelayPromise,this.loopDelayPromise=null)}this.stopping=!1,this.stopped=!0,this.state=s.stopped}notify(){this.beenNotified=!0,this.loopDelayPromise&&this.loopDelayPromise.abort()}async stop(){this.stopping=!0,this.state=s.stopping,this.loopDelayPromise&&this.loopDelayPromise.abort(),await this.runPromise}abort(){this.abortController&&!this.abortController.signal.aborted&&this.abortController.abort()}toWipData(){return{id:this.id,name:this.name,options:this.options,state:this.state,count:this.jobs.length,createdOn:this.createdOn,lastFetchedOn:this.lastFetchedOn,lastJobStartedOn:this.lastJobStartedOn,lastJobEndedOn:this.lastJobEndedOn,lastError:this.lastError,lastErrorOn:this.lastErrorOn,lastJobDuration:this.lastJobDuration}}}class u{#b=new Map;#c=[];clear(){this.#b.clear(),this.#c=[]}waitForJobWithId(a,b){return this.waitForJob(()=>!0,b,a)}waitForJob(a,b,c){let d=b=>(!c||b.id===c)&&a(b.data);for(let a of this.#b.values())if(a.state===b&&d(a))return Promise.resolve(this.#d(a));return this.#e(d,b)}#e(a,b){let c,d=new Promise(a=>{c=a});return this.#c.push({selector:a,awaitedState:b,resolve:c}),d}#f(a,b){return`${a}:${b}`}#d(a){return{id:a.id,name:a.name,data:structuredClone(a.data),state:a.state,output:a.output?structuredClone(a.output):void 0}}addJob(a,b,c,d,e){let f={id:a,name:b,data:structuredClone(c),state:d,output:e?structuredClone(e):void 0},g=this.#f(a,d);this.#b.set(g,f);let h=[],i=[];for(let a of this.#c)a.awaitedState===d&&a.selector(f)?h.push(a):i.push(a);for(let a of(this.#c=i,h))a.resolve(this.#d(f))}}let v=Object.values(q.P).reduce((a,b)=>({...a,[b]:b}),{}),w={error:"error",wip:"wip"};class x extends f{events=w;db;config;wipTs;workers;stopped;queueCacheInterval;timekeeper;queues;pendingOffWorkCleanups;#g;#h;#i;constructor(a,b){super(),this.config=b,this.db=a,this.wipTs=Date.now(),this.workers=new Map,this.queues=null,this.pendingOffWorkCleanups=new Set,this.#g=new Map,this.#h=new Map,this.#i=new Map}getSpy(a){if(!this.config.__test__enableSpies)throw Error("Spy is not enabled. Set __test__enableSpies: true in constructor options to use spies.");let b=this.#g.get(a);return b||(b=new u,this.#g.set(a,b)),b}clearSpies(){for(let a of this.#g.values())a.clear();this.#g.clear()}#j(a,b){let c=this.#i.get(a);return c?b&&c.tiers&&b in c.tiers?c.tiers[b]:c.default:1/0}#k(a){let b=this.#i.get(a);if(!b)return[];let c=this.#h.get(a);if(!c)return[];let d=[];for(let[a,e]of c.entries())e>=b.default&&d.push(a);return d}#l(a,b){let c=this.#h.get(a);c||(c=new Map,this.#h.set(a,c));let d=c.get(b)||0;c.set(b,d+1)}#m(a,b){let c=this.#h.get(a);if(!c)return;let d=c.get(b)||0;d<=1?c.delete(b):c.set(b,d-1)}#n(a,b){let c=this.config.__test__enableSpies?this.#g.get(a):void 0;if(c)for(let d of b)c.addJob(d.id,a,d.data,"active")}#o(a,b,c){let d=this.config.__test__enableSpies?this.#g.get(a):void 0;if(d){let e=1===b.length?c:void 0;for(let c of b)d.addJob(c.id,a,c.data,"completed",e)}}#p(a,b,c){let d=this.config.__test__enableSpies?this.#g.get(a):void 0;if(d)for(let e of b)d.addJob(e.id,a,e.data,"failed",{message:c?.message,stack:c?.stack})}#q(a,b){this.#i.set(a,"number"==typeof b?{default:b}:b)}#r(a){this.getWorkers().some(b=>b.name===a&&!b.stopping&&!b.stopped)||(this.#i.delete(a),this.#h.delete(a))}#s(a,b){let c=[],d=[],e=[];for(let f of b){if(!f.groupId){c.push(f);continue}(this.#h.get(a)?.get(f.groupId)||0)<this.#j(a,f.groupTier)?(this.#l(a,f.groupId),c.push(f),e.push(f)):d.push(f)}return{allowed:c,excess:d,groupedJobs:e}}#t(a,b){for(let c of b)c.groupId&&this.#m(a,c.groupId)}async #u(a,b,c,d){let e=b.map(a=>a.id),f=b.reduce((a,b)=>Math.max(a,b.expireInSeconds),0),g=new AbortController;b.forEach(a=>{a.signal=g.signal}),d&&(d.abortController=g);try{let d=await (0,r.jz)(c(b),f,`handler execution exceeded ${f}s`,g);await this.complete(a,e,1===e.length?d:void 0),this.#o(a,b,d)}catch(c){await this.fail(a,e,c),this.#p(a,b,c)}finally{d&&(d.abortController=null)}}async start(){this.stopped=!1,this.queueCacheInterval=setInterval(()=>this.onCacheQueues({emit:!0}),1e3*this.config.queueCacheIntervalSeconds),await this.onCacheQueues()}async onCacheQueues({emit:a=!1}={}){try{d(!this.config.__test__throw_queueCache,"test error");let a=await this.getQueues();this.queues=a.reduce((a,b)=>(a[b.name]=b,a),{})}catch(b){a&&this.emit(w.error,{...b,message:b.message,stack:b.stack})}}async getQueueCache(a){d(this.queues,"Queue cache is not initialized");let b=this.queues[a];if(b)return b;if(!(b=await this.getQueue(a)))throw Error(`Queue ${a} does not exist`);return this.queues[a]=b,b}async stop(){this.stopped=!0,clearInterval(this.queueCacheInterval),await Promise.allSettled([...this.workers.values()].filter(a=>!v[a.name]).map(async a=>await this.offWork(a.name,{wait:!1}))),this.#i.clear(),this.#h.clear()}async failWip(){for(let a of this.workers.values()){let b=a.jobs.map(a=>a.id);b.length&&await this.fail(a.name,b,"pg-boss shut down while active"),a.abort()}}async work(a,...b){let{options:c,callback:d}=o.hR(a,b);if(this.stopped)throw Error("Workers are disabled. pg-boss is stopped");let{pollingInterval:f,batchSize:g=1,includeMetadata:h=!1,priority:i=!0,localConcurrency:j=1,localGroupConcurrency:k,groupConcurrency:l,orderByCreatedOn:m=!0}=c;null!=k&&this.#q(a,k);let n=(0,e.randomUUID)({disableEntropyCache:!0}),p=b=>{let e=()=>{let b=null!=k?this.#k(a):void 0;return this.fetch(a,{batchSize:g,includeMetadata:h,priority:i,orderByCreatedOn:m,groupConcurrency:l,ignoreGroups:b})},j=async c=>{if(!c.length)return;if(this.config.__test__throw_worker)throw Error("__test__throw_worker");this.emitWip(a),this.#n(a,c);let e=this.workers.get(b);if(null==k)await this.#u(a,c,d,e);else{let{allowed:b,excess:f,groupedJobs:g}=this.#s(a,c);if(f.length>0){let b=f.map(a=>a.id);await this.restore(a,b)}if(b.length>0)try{await this.#u(a,b,d,e)}finally{this.#t(a,g)}}this.emitWip(a)},n=c=>{this.emit(w.error,{...c,message:c.message,stack:c.stack,queue:a,worker:b})};return new t({id:b,name:a,options:c,interval:f,fetch:e,onFetch:j,onError:n})};for(let a=0;a<j;a++){let b=p(0===a?n:(0,e.randomUUID)({disableEntropyCache:!0}));this.addWorker(b),b.start()}return n}addWorker(a){this.workers.set(a.id,a)}removeWorker(a){this.workers.delete(a.id)}getWorkers(){return Array.from(this.workers.values())}emitWip(a){if(!v[a]){let a=Date.now();a-this.wipTs>2e3&&(this.emit(w.wip,this.getWipData()),this.wipTs=a)}}getWipData(a={}){let{includeInternal:b=!1}=a;return this.getWorkers().map(a=>a.toWipData()).filter(a=>"stopped"!==a.state&&(!v[a.name]||b))}hasPendingCleanups(){return this.pendingOffWorkCleanups.size>0}async offWork(a,b={wait:!0}){d(a,"queue name is required"),d("string"==typeof a,"queue name must be a string");let c=this.getWorkers().filter(c=>(b?.id?c.id===b.id:c.name===a)&&!c.stopping&&!c.stopped);if(0===c.length)return;let e=Promise.allSettled(c.map(async a=>{await a.stop(),this.removeWorker(a)}));b.wait?(await e,this.#r(a)):(this.pendingOffWorkCleanups.add(e),e.finally(()=>{this.pendingOffWorkCleanups.delete(e),this.#r(a)}))}notifyWorker(a){this.workers.get(a)?.notify()}async subscribe(a,b){d(a,"Missing required argument"),d(b,"Missing required argument");let c=p.B1(this.config.schema);await this.db.executeSql(c,[a,b])}async unsubscribe(a,b){d(a,"Missing required argument"),d(b,"Missing required argument");let c=p.al(this.config.schema);await this.db.executeSql(c,[a,b])}async publish(a,b,c){d(a,"Missing required argument");let e=p.ej(this.config.schema),{rows:f}=await this.db.executeSql(e,[a]);await Promise.allSettled(f.map(({name:a})=>this.send(a,b,c)))}async send(...a){let b=o.KY(a);return await this.createJob(b)}async sendAfter(a,b,c,d){(c=c?{...c}:{}).startAfter=d;let e=o.KY([a,b,c]);return await this.createJob(e)}async sendThrottled(a,b,c,d,e){(c=c?{...c}:{}).singletonSeconds=d,c.singletonNextSlot=!1,c.singletonKey=e;let f=o.KY([a,b,c]);return await this.createJob(f)}async sendDebounced(a,b,c,d,e){(c=c?{...c}:{}).singletonSeconds=d,c.singletonNextSlot=!0,c.singletonKey=e;let f=o.KY([a,b,c]);return await this.createJob(f)}async createJob(a){let{name:b,data:c=null,options:d={}}=a,{id:e=null,db:f,priority:g,startAfter:h,singletonKey:i=null,singletonSeconds:j,singletonNextSlot:k,expireInSeconds:l,deleteAfterSeconds:m,retentionSeconds:n,keepUntil:o,retryLimit:q,retryDelay:r,retryBackoff:s,retryDelayMax:t,group:u,deadLetter:v=null}=d,w={id:e,name:b,data:c,priority:g,startAfter:h,singletonKey:i,singletonSeconds:j,singletonOffset:0,groupId:u?.id??null,groupTier:u?.tier??null,expireInSeconds:l,deleteAfterSeconds:m,retentionSeconds:n,keepUntil:o,retryLimit:q,retryDelay:r,retryBackoff:s,retryDelayMax:t,deadLetter:v},x=f||this.db,{table:y}=await this.getQueueCache(b),z=p.Ep(this.config.schema,{table:y,name:b,returnId:!0}),{rows:A}=await x.executeSql(z,[JSON.stringify([w])]);if(1===A.length){let a=A[0].id;if(this.config.__test__enableSpies){let d=this.#g.get(b);d&&d.addJob(a,b,c||{},"created")}return a}if(k){w.startAfter=this.getDebounceStartAfter(j,this.timekeeper.clockSkew),w.singletonOffset=j;let{rows:a}=await x.executeSql(z,[JSON.stringify([w])]);if(1===a.length){let d=a[0].id;if(this.config.__test__enableSpies){let a=this.#g.get(b);a&&a.addJob(d,b,c||{},"created")}return d}}return null}async insert(a,b,c={}){d(Array.isArray(b),"jobs argument should be an array");let{table:e}=await this.getQueueCache(a),f=this.assertDb(c),g=this.config.__test__enableSpies?this.#g.get(a):void 0,h=!!g||!!c.returnId,i=p.Ep(this.config.schema,{table:e,name:a,returnId:h}),{rows:j}=await f.executeSql(i,[JSON.stringify(b)]);if(j.length){if(g)for(let c=0;c<j.length;c++)g.addJob(j[c].id,a,b[c].data||{},"created");return j.map(a=>a.id)}return null}getDebounceStartAfter(a,b){let c=1e3*a,d=Date.now()+b,e=Math.floor(d/c)*c,f=a-Math.floor((d-e)/1e3)||1;return a>1&&f++,f}async fetch(a,b={}){let c;o.sL(a,b);let d=this.assertDb(b),{table:e,policy:f,singletonsActive:g}=await this.getQueueCache(a),h={...b,schema:this.config.schema,table:e,name:a,policy:f,limit:b.batchSize||1,ignoreSingletons:g},i=p.vd(h);try{c=await d.executeSql(i.text,i.values)}catch(a){}return c?.rows||[]}mapCompletionIdArg(a,b){let c=`${b}() requires an id`;d(a,c);let e=Array.isArray(a)?a:[a];return d(e.length,c),e}mapCompletionDataArg(a){return null==a||"function"==typeof a?null:function(a,b={}){let{maxDepth:c=1/0,useToJSON:d=!0}=b;return"object"==typeof a&&null!==a?n({from:a,seen:new Set,forceEnumerable:!0,maxDepth:c,depth:0,useToJSON:d,serialize:!0}):("function"==typeof a&&(a="<Function>"),n({from:new i(a),seen:new Set,forceEnumerable:!0,maxDepth:c,depth:0,useToJSON:d,serialize:!0}))}("object"!=typeof a||Array.isArray(a)?{value:a}:a)}mapCommandResponse(a,b){return{jobs:a,requested:a.length,affected:b&&b.rows?parseInt(b.rows[0].count):0}}async complete(a,b,c,d={}){o.hY(a);let e=this.assertDb(d),f=this.mapCompletionIdArg(b,"complete"),{table:g}=await this.getQueueCache(a),h=p.Kd(this.config.schema,g,d.includeQueued),i=await e.executeSql(h,[a,f,this.mapCompletionDataArg(c)]);return this.mapCommandResponse(f,i)}async fail(a,b,c,d={}){o.hY(a);let e=this.assertDb(d),f=this.mapCompletionIdArg(b,"fail"),{table:g}=await this.getQueueCache(a),h=p.Jm(this.config.schema,g),i=await e.executeSql(h,[a,f,this.mapCompletionDataArg(c)]);return this.mapCommandResponse(f,i)}async deleteJob(a,b,c={}){o.hY(a);let d=this.assertDb(c),e=this.mapCompletionIdArg(b,"deleteJob"),{table:f}=await this.getQueueCache(a),g=p.E6(this.config.schema,f),h=await d.executeSql(g,[a,e]);return this.mapCommandResponse(e,h)}async cancel(a,b,c={}){o.hY(a);let d=this.assertDb(c),e=this.mapCompletionIdArg(b,"cancel"),{table:f}=await this.getQueueCache(a),g=p.F3(this.config.schema,f),h=await d.executeSql(g,[a,e]);return this.mapCommandResponse(e,h)}async resume(a,b,c={}){o.hY(a);let d=this.assertDb(c),e=this.mapCompletionIdArg(b,"resume"),{table:f}=await this.getQueueCache(a),g=p.Aw(this.config.schema,f),h=await d.executeSql(g,[a,e]);return this.mapCommandResponse(e,h)}async restore(a,b,c={}){o.hY(a);let d=this.assertDb(c),e=this.mapCompletionIdArg(b,"restore"),{table:f}=await this.getQueueCache(a),g=p.Zq(this.config.schema,f);await d.executeSql(g,[a,e])}async retry(a,b,c={}){o.hY(a);let d=c.db||this.db,e=this.mapCompletionIdArg(b,"retry"),{table:f}=await this.getQueueCache(a),g=p.Rq(this.config.schema,f),h=await d.executeSql(g,[a,e]);return this.mapCommandResponse(e,h)}async createQueue(a,b={}){a=a||b.name,o.hY(a);let c=b.policy||p.xv.standard;d(c in p.xv,`${c} is not a valid queue policy`),o.PS(b),b.deadLetter&&(o.hY(b.deadLetter),(0,d.notStrictEqual)(a,b.deadLetter,"deadLetter cannot be itself"),await this.getQueueCache(b.deadLetter));let e=p.y0(this.config.schema,a,{...b,policy:c});await this.db.executeSql(e)}async getQueues(a){if(a=Array.isArray(a)?a:"string"==typeof a?[a]:void 0)for(let b of a)o.hY(b);let b=p.h9(this.config.schema,a),{rows:c}=await this.db.executeSql(b.text,b.values);return c}async updateQueue(a,b={}){if(o.hY(a),d(Object.keys(b).length>0,"no properties found to update"),"policy"in b)throw Error("queue policy cannot be changed after creation");if("partition"in b)throw Error("queue partitioning cannot be changed after creation");o.PS(b);let{deadLetter:c}=b;c&&(o.hY(c),(0,d.notStrictEqual)(a,c,"deadLetter cannot be itself"));let e=p.df(this.config.schema,{deadLetter:c});await this.db.executeSql(e,[a,b])}async getQueue(a){o.hY(a);let b=p.h9(this.config.schema,[a]),{rows:c}=await this.db.executeSql(b.text,b.values);return c[0]||null}async deleteQueue(a){o.hY(a);try{await this.getQueueCache(a);let b=p.jv(this.config.schema,a);await this.db.executeSql(b)}catch{}}async deleteQueuedJobs(a){o.hY(a);let{table:b}=await this.getQueueCache(a),c=p.ji(this.config.schema,b);await this.db.executeSql(c,[a])}async deleteStoredJobs(a){o.hY(a);let{table:b}=await this.getQueueCache(a),c=p.ZI(this.config.schema,b);await this.db.executeSql(c,[a])}async deleteAllJobs(a){if(!a){let a=p.d0(this.config.schema,"job");await this.db.executeSql(a);return}o.hY(a);let{table:b,partition:c}=await this.getQueueCache(a);if(c){let a=p.d0(this.config.schema,b);await this.db.executeSql(a)}else{let c=p.tq(this.config.schema,b);await this.db.executeSql(c,[a])}}async getQueueStats(a){o.hY(a);let b=await this.getQueueCache(a),c=p.zX(this.config.schema,b.table,[a]),{rows:d}=await this.db.executeSql(c.text,c.values);return Object.assign(b,d.at(0)||{deferredCount:0,queuedCount:0,activeCount:0,totalCount:0})}async getJobById(a,b,c={}){o.hY(a);let d=this.assertDb(c),{table:e}=await this.getQueueCache(a),f=p.YQ(this.config.schema,e),g=await d.executeSql(f,[a,b]);return g?.rows?.length===1?g.rows[0]:null}async findJobs(a,b={}){o.hY(a);let c=this.assertDb(b),{table:d}=await this.getQueueCache(a),{id:e,key:f,data:g,queued:h=!1}=b,i=p.kM(this.config.schema,d,{byId:void 0!==e,byKey:void 0!==f,byData:void 0!==g,queued:h}),j=[a];void 0!==e&&j.push(e),void 0!==f&&j.push(f),void 0!==g&&j.push(JSON.stringify(g));let k=await c.executeSql(i,j);return k?.rows||[]}assertDb(a){return a.db?a.db:(this.db._pgbdb&&d(this.db.opened,"Database connection is not opened"),this.db)}}let y=x},14525:function(a,b,c){var d=this&&this.__createBinding||(Object.create?function(a,b,c,d){void 0===d&&(d=c);var e=Object.getOwnPropertyDescriptor(b,c);(!e||("get"in e?!b.__esModule:e.writable||e.configurable))&&(e={enumerable:!0,get:function(){return b[c]}}),Object.defineProperty(a,d,e)}:function(a,b,c,d){void 0===d&&(d=c),a[d]=b[c]}),e=this&&this.__exportStar||function(a,b){for(var c in a)"default"===c||Object.prototype.hasOwnProperty.call(b,c)||d(b,a,c)};Object.defineProperty(b,"__esModule",{value:!0}),b.CronFileParser=b.CronExpressionParser=b.CronExpression=b.CronFieldCollection=b.CronDate=void 0;let f=c(67424);var g=c(18287);Object.defineProperty(b,"CronDate",{enumerable:!0,get:function(){return g.CronDate}});var h=c(98473);Object.defineProperty(b,"CronFieldCollection",{enumerable:!0,get:function(){return h.CronFieldCollection}});var i=c(74485);Object.defineProperty(b,"CronExpression",{enumerable:!0,get:function(){return i.CronExpression}});var j=c(67424);Object.defineProperty(b,"CronExpressionParser",{enumerable:!0,get:function(){return j.CronExpressionParser}});var k=c(63944);Object.defineProperty(b,"CronFileParser",{enumerable:!0,get:function(){return k.CronFileParser}}),e(c(45625),b),b.default=f.CronExpressionParser},17974:(a,b,c)=>{c.d(b,{Aw:()=>_,B1:()=>R,BI:()=>O,Bk:()=>al,D:()=>N,DH:()=>X,E6:()=>I,Ep:()=>ab,F3:()=>$,HF:()=>V,Ih:()=>A,Jm:()=>ac,Kd:()=>Z,Qz:()=>aq,RH:()=>h,Rq:()=>ag,TM:()=>ai,Vd:()=>f,WB:()=>U,YQ:()=>an,ZI:()=>K,Zq:()=>aa,_:()=>P,al:()=>S,an:()=>B,d0:()=>L,dN:()=>Q,dZ:()=>D,df:()=>G,ej:()=>T,h9:()=>H,jW:()=>C,ji:()=>J,jo:()=>af,jv:()=>p,jw:()=>ad,kM:()=>am,mR:()=>e,my:()=>d,t3:()=>ao,tq:()=>M,vJ:()=>W,vd:()=>Y,vt:()=>l,xr:()=>ar,xt:()=>ak,xv:()=>i,y0:()=>o,yJ:()=>ap,z:()=>as,zX:()=>ah});let d="pgboss",e="division by zero",f="already exists",g=/'/g,h=Object.freeze({created:"created",retry:"retry",active:"active",completed:"completed",cancelled:"cancelled",failed:"failed"}),i=Object.freeze({standard:"standard",short:"short",singleton:"singleton",stately:"stately",exclusive:"exclusive"}),j={expire_seconds:900,retention_seconds:1209600,deletion_seconds:604800,retry_limit:2,retry_delay:0,warning_queued:0,retry_backoff:!1,partition:!1},k="job_common";function l(a,b,c){var d,e,f,g,i,l,m,n,o,p,A,B,C,D,E,F;let G=[c?.createSchema?(d=a,`CREATE SCHEMA IF NOT EXISTS ${d}`):"",(e=a,`
|
|
2
|
+
CREATE TYPE ${e}.job_state AS ENUM (
|
|
3
|
+
'${h.created}',
|
|
4
|
+
'${h.retry}',
|
|
5
|
+
'${h.active}',
|
|
6
|
+
'${h.completed}',
|
|
7
|
+
'${h.cancelled}',
|
|
8
|
+
'${h.failed}'
|
|
9
|
+
)
|
|
10
|
+
`),(f=a,`
|
|
11
|
+
CREATE TABLE ${f}.version (
|
|
12
|
+
version int primary key,
|
|
13
|
+
cron_on timestamp with time zone,
|
|
14
|
+
bam_on timestamp with time zone
|
|
15
|
+
)
|
|
16
|
+
`),(g=a,`
|
|
17
|
+
CREATE TABLE ${g}.queue (
|
|
18
|
+
name text NOT NULL,
|
|
19
|
+
policy text NOT NULL,
|
|
20
|
+
retry_limit int NOT NULL,
|
|
21
|
+
retry_delay int NOT NULL,
|
|
22
|
+
retry_backoff bool NOT NULL,
|
|
23
|
+
retry_delay_max int,
|
|
24
|
+
expire_seconds int NOT NULL,
|
|
25
|
+
retention_seconds int NOT NULL,
|
|
26
|
+
deletion_seconds int NOT NULL,
|
|
27
|
+
dead_letter text REFERENCES ${g}.queue (name) CHECK (dead_letter IS DISTINCT FROM name),
|
|
28
|
+
partition bool NOT NULL,
|
|
29
|
+
table_name text NOT NULL,
|
|
30
|
+
deferred_count int NOT NULL default 0,
|
|
31
|
+
queued_count int NOT NULL default 0,
|
|
32
|
+
warning_queued int NOT NULL default 0,
|
|
33
|
+
active_count int NOT NULL default 0,
|
|
34
|
+
total_count int NOT NULL default 0,
|
|
35
|
+
singletons_active text[],
|
|
36
|
+
monitor_on timestamp with time zone,
|
|
37
|
+
maintain_on timestamp with time zone,
|
|
38
|
+
created_on timestamp with time zone not null default now(),
|
|
39
|
+
updated_on timestamp with time zone not null default now(),
|
|
40
|
+
PRIMARY KEY (name)
|
|
41
|
+
)
|
|
42
|
+
`),(i=a,`
|
|
43
|
+
CREATE TABLE ${i}.schedule (
|
|
44
|
+
name text REFERENCES ${i}.queue ON DELETE CASCADE,
|
|
45
|
+
key text not null DEFAULT '',
|
|
46
|
+
cron text not null,
|
|
47
|
+
timezone text,
|
|
48
|
+
data jsonb,
|
|
49
|
+
options jsonb,
|
|
50
|
+
created_on timestamp with time zone not null default now(),
|
|
51
|
+
updated_on timestamp with time zone not null default now(),
|
|
52
|
+
PRIMARY KEY (name, key)
|
|
53
|
+
)
|
|
54
|
+
`),(l=a,`
|
|
55
|
+
CREATE TABLE ${l}.subscription (
|
|
56
|
+
event text not null,
|
|
57
|
+
name text not null REFERENCES ${l}.queue ON DELETE CASCADE,
|
|
58
|
+
created_on timestamp with time zone not null default now(),
|
|
59
|
+
updated_on timestamp with time zone not null default now(),
|
|
60
|
+
PRIMARY KEY(event, name)
|
|
61
|
+
)
|
|
62
|
+
`),(m=a,`
|
|
63
|
+
CREATE TABLE ${m}.bam (
|
|
64
|
+
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
65
|
+
name text NOT NULL,
|
|
66
|
+
version int NOT NULL,
|
|
67
|
+
status text NOT NULL DEFAULT 'pending',
|
|
68
|
+
queue text,
|
|
69
|
+
table_name text NOT NULL,
|
|
70
|
+
command text NOT NULL,
|
|
71
|
+
error text,
|
|
72
|
+
created_on timestamp with time zone NOT NULL DEFAULT now(),
|
|
73
|
+
started_on timestamp with time zone,
|
|
74
|
+
completed_on timestamp with time zone
|
|
75
|
+
)
|
|
76
|
+
`),(n=a,`
|
|
77
|
+
CREATE FUNCTION ${n}.job_table_format(command text, table_name text)
|
|
78
|
+
RETURNS text AS
|
|
79
|
+
$$
|
|
80
|
+
SELECT format(
|
|
81
|
+
replace(
|
|
82
|
+
replace(command, '.job', '.%1$I'),
|
|
83
|
+
'job_i', '%1$s_i'
|
|
84
|
+
),
|
|
85
|
+
table_name
|
|
86
|
+
);
|
|
87
|
+
$$
|
|
88
|
+
LANGUAGE sql IMMUTABLE;
|
|
89
|
+
`),(o=a,`
|
|
90
|
+
CREATE FUNCTION ${o}.job_table_run(command text, tbl_name text DEFAULT NULL, queue_name text DEFAULT NULL)
|
|
91
|
+
RETURNS VOID AS
|
|
92
|
+
$$
|
|
93
|
+
DECLARE
|
|
94
|
+
tbl RECORD;
|
|
95
|
+
BEGIN
|
|
96
|
+
IF queue_name IS NOT NULL THEN
|
|
97
|
+
SELECT table_name INTO tbl_name FROM ${o}.queue WHERE name = queue_name;
|
|
98
|
+
END IF;
|
|
99
|
+
|
|
100
|
+
IF tbl_name IS NOT NULL THEN
|
|
101
|
+
EXECUTE ${o}.job_table_format(command, tbl_name);
|
|
102
|
+
RETURN;
|
|
103
|
+
END IF;
|
|
104
|
+
|
|
105
|
+
EXECUTE ${o}.job_table_format(command, '${k}');
|
|
106
|
+
|
|
107
|
+
FOR tbl IN SELECT table_name FROM ${o}.queue WHERE partition = true
|
|
108
|
+
LOOP
|
|
109
|
+
EXECUTE ${o}.job_table_format(command, tbl.table_name);
|
|
110
|
+
END LOOP;
|
|
111
|
+
END;
|
|
112
|
+
$$
|
|
113
|
+
LANGUAGE plpgsql;
|
|
114
|
+
`),(p=a,`
|
|
115
|
+
CREATE FUNCTION ${p}.job_table_run_async(command_name text, version int, command text, tbl_name text DEFAULT NULL, queue_name text DEFAULT NULL)
|
|
116
|
+
RETURNS VOID AS
|
|
117
|
+
$$
|
|
118
|
+
BEGIN
|
|
119
|
+
IF queue_name IS NOT NULL THEN
|
|
120
|
+
SELECT table_name INTO tbl_name FROM ${p}.queue WHERE name = queue_name;
|
|
121
|
+
END IF;
|
|
122
|
+
|
|
123
|
+
IF tbl_name IS NOT NULL THEN
|
|
124
|
+
INSERT INTO ${p}.bam (name, version, status, queue, table_name, command)
|
|
125
|
+
VALUES (
|
|
126
|
+
command_name,
|
|
127
|
+
version,
|
|
128
|
+
'pending',
|
|
129
|
+
queue_name,
|
|
130
|
+
tbl_name,
|
|
131
|
+
${p}.job_table_format(command, tbl_name)
|
|
132
|
+
);
|
|
133
|
+
RETURN;
|
|
134
|
+
END IF;
|
|
135
|
+
|
|
136
|
+
INSERT INTO ${p}.bam (name, version, status, queue, table_name, command)
|
|
137
|
+
SELECT
|
|
138
|
+
command_name,
|
|
139
|
+
version,
|
|
140
|
+
'pending',
|
|
141
|
+
NULL,
|
|
142
|
+
'${k}',
|
|
143
|
+
${p}.job_table_format(command, '${k}')
|
|
144
|
+
UNION ALL
|
|
145
|
+
SELECT
|
|
146
|
+
command_name,
|
|
147
|
+
version,
|
|
148
|
+
'pending',
|
|
149
|
+
queue.name,
|
|
150
|
+
queue.table_name,
|
|
151
|
+
${p}.job_table_format(command, queue.table_name)
|
|
152
|
+
FROM ${p}.queue
|
|
153
|
+
WHERE partition = true;
|
|
154
|
+
END;
|
|
155
|
+
$$
|
|
156
|
+
LANGUAGE plpgsql;
|
|
157
|
+
`),(A=a,`
|
|
158
|
+
CREATE TABLE ${A}.job (
|
|
159
|
+
id uuid not null default gen_random_uuid(),
|
|
160
|
+
name text not null,
|
|
161
|
+
priority integer not null default(0),
|
|
162
|
+
data jsonb,
|
|
163
|
+
state ${A}.job_state not null default '${h.created}',
|
|
164
|
+
retry_limit integer not null default ${j.retry_limit},
|
|
165
|
+
retry_count integer not null default 0,
|
|
166
|
+
retry_delay integer not null default ${j.retry_delay},
|
|
167
|
+
retry_backoff boolean not null default ${j.retry_backoff},
|
|
168
|
+
retry_delay_max integer,
|
|
169
|
+
expire_seconds int not null default ${j.expire_seconds},
|
|
170
|
+
deletion_seconds int not null default ${j.deletion_seconds},
|
|
171
|
+
singleton_key text,
|
|
172
|
+
singleton_on timestamp without time zone,
|
|
173
|
+
group_id text,
|
|
174
|
+
group_tier text,
|
|
175
|
+
start_after timestamp with time zone not null default now(),
|
|
176
|
+
created_on timestamp with time zone not null default now(),
|
|
177
|
+
started_on timestamp with time zone,
|
|
178
|
+
completed_on timestamp with time zone,
|
|
179
|
+
keep_until timestamp with time zone NOT NULL default now() + interval '${j.retention_seconds}',
|
|
180
|
+
output jsonb,
|
|
181
|
+
dead_letter text,
|
|
182
|
+
policy text
|
|
183
|
+
) PARTITION BY LIST (name)
|
|
184
|
+
`),q(a),(B=a,`
|
|
185
|
+
CREATE TABLE ${B}.${k} (LIKE ${B}.job INCLUDING GENERATED INCLUDING DEFAULTS);
|
|
186
|
+
|
|
187
|
+
SELECT ${B}.job_table_run($cmd$${q(B)}$cmd$, '${k}');
|
|
188
|
+
SELECT ${B}.job_table_run($cmd$${r(B)}$cmd$, '${k}');
|
|
189
|
+
SELECT ${B}.job_table_run($cmd$${s(B)}$cmd$, '${k}');
|
|
190
|
+
SELECT ${B}.job_table_run($cmd$${t(B)}$cmd$, '${k}');
|
|
191
|
+
SELECT ${B}.job_table_run($cmd$${u(B)}$cmd$, '${k}');
|
|
192
|
+
SELECT ${B}.job_table_run($cmd$${v(B)}$cmd$, '${k}');
|
|
193
|
+
SELECT ${B}.job_table_run($cmd$${y(B)}$cmd$, '${k}');
|
|
194
|
+
SELECT ${B}.job_table_run($cmd$${w(B)}$cmd$, '${k}');
|
|
195
|
+
SELECT ${B}.job_table_run($cmd$${x(B)}$cmd$, '${k}');
|
|
196
|
+
SELECT ${B}.job_table_run($cmd$${z(B)}$cmd$, '${k}');
|
|
197
|
+
|
|
198
|
+
ALTER TABLE ${B}.job ATTACH PARTITION ${B}.${k} DEFAULT;
|
|
199
|
+
`),(C=a,`
|
|
200
|
+
CREATE FUNCTION ${C}.create_queue(queue_name text, options jsonb)
|
|
201
|
+
RETURNS VOID AS
|
|
202
|
+
$$
|
|
203
|
+
DECLARE
|
|
204
|
+
tablename varchar := CASE WHEN options->>'partition' = 'true'
|
|
205
|
+
THEN 'j' || encode(sha224(queue_name::bytea), 'hex')
|
|
206
|
+
ELSE '${k}'
|
|
207
|
+
END;
|
|
208
|
+
queue_created_on timestamptz;
|
|
209
|
+
BEGIN
|
|
210
|
+
|
|
211
|
+
WITH q as (
|
|
212
|
+
INSERT INTO ${C}.queue (
|
|
213
|
+
name,
|
|
214
|
+
policy,
|
|
215
|
+
retry_limit,
|
|
216
|
+
retry_delay,
|
|
217
|
+
retry_backoff,
|
|
218
|
+
retry_delay_max,
|
|
219
|
+
expire_seconds,
|
|
220
|
+
retention_seconds,
|
|
221
|
+
deletion_seconds,
|
|
222
|
+
warning_queued,
|
|
223
|
+
dead_letter,
|
|
224
|
+
partition,
|
|
225
|
+
table_name
|
|
226
|
+
)
|
|
227
|
+
VALUES (
|
|
228
|
+
queue_name,
|
|
229
|
+
options->>'policy',
|
|
230
|
+
COALESCE((options->>'retryLimit')::int, ${j.retry_limit}),
|
|
231
|
+
COALESCE((options->>'retryDelay')::int, ${j.retry_delay}),
|
|
232
|
+
COALESCE((options->>'retryBackoff')::bool, ${j.retry_backoff}),
|
|
233
|
+
(options->>'retryDelayMax')::int,
|
|
234
|
+
COALESCE((options->>'expireInSeconds')::int, ${j.expire_seconds}),
|
|
235
|
+
COALESCE((options->>'retentionSeconds')::int, ${j.retention_seconds}),
|
|
236
|
+
COALESCE((options->>'deleteAfterSeconds')::int, ${j.deletion_seconds}),
|
|
237
|
+
COALESCE((options->>'warningQueueSize')::int, ${j.warning_queued}),
|
|
238
|
+
options->>'deadLetter',
|
|
239
|
+
COALESCE((options->>'partition')::bool, ${j.partition}),
|
|
240
|
+
tablename
|
|
241
|
+
)
|
|
242
|
+
ON CONFLICT DO NOTHING
|
|
243
|
+
RETURNING created_on
|
|
244
|
+
)
|
|
245
|
+
SELECT created_on into queue_created_on from q;
|
|
246
|
+
|
|
247
|
+
IF queue_created_on IS NULL OR options->>'partition' IS DISTINCT FROM 'true' THEN
|
|
248
|
+
RETURN;
|
|
249
|
+
END IF;
|
|
250
|
+
|
|
251
|
+
EXECUTE format('CREATE TABLE ${C}.%I (LIKE ${C}.job INCLUDING DEFAULTS)', tablename);
|
|
252
|
+
|
|
253
|
+
EXECUTE ${C}.job_table_format($cmd$${q(C)}$cmd$, tablename);
|
|
254
|
+
EXECUTE ${C}.job_table_format($cmd$${r(C)}$cmd$, tablename);
|
|
255
|
+
EXECUTE ${C}.job_table_format($cmd$${s(C)}$cmd$, tablename);
|
|
256
|
+
|
|
257
|
+
EXECUTE ${C}.job_table_format($cmd$${x(C)}$cmd$, tablename);
|
|
258
|
+
EXECUTE ${C}.job_table_format($cmd$${w(C)}$cmd$, tablename);
|
|
259
|
+
EXECUTE ${C}.job_table_format($cmd$${z(C)}$cmd$, tablename);
|
|
260
|
+
|
|
261
|
+
IF options->>'policy' = 'short' THEN
|
|
262
|
+
EXECUTE ${C}.job_table_format($cmd$${t(C)}$cmd$, tablename);
|
|
263
|
+
ELSIF options->>'policy' = 'singleton' THEN
|
|
264
|
+
EXECUTE ${C}.job_table_format($cmd$${u(C)}$cmd$, tablename);
|
|
265
|
+
ELSIF options->>'policy' = 'stately' THEN
|
|
266
|
+
EXECUTE ${C}.job_table_format($cmd$${v(C)}$cmd$, tablename);
|
|
267
|
+
ELSIF options->>'policy' = 'exclusive' THEN
|
|
268
|
+
EXECUTE ${C}.job_table_format($cmd$${y(C)}$cmd$, tablename);
|
|
269
|
+
END IF;
|
|
270
|
+
|
|
271
|
+
EXECUTE format('ALTER TABLE ${C}.%I ADD CONSTRAINT cjc CHECK (name=%L)', tablename, queue_name);
|
|
272
|
+
EXECUTE format('ALTER TABLE ${C}.job ATTACH PARTITION ${C}.%I FOR VALUES IN (%L)', tablename, queue_name);
|
|
273
|
+
END;
|
|
274
|
+
$$
|
|
275
|
+
LANGUAGE plpgsql;
|
|
276
|
+
`),(D=a,`
|
|
277
|
+
CREATE FUNCTION ${D}.delete_queue(queue_name text)
|
|
278
|
+
RETURNS VOID AS
|
|
279
|
+
$$
|
|
280
|
+
DECLARE
|
|
281
|
+
v_table varchar;
|
|
282
|
+
v_partition bool;
|
|
283
|
+
BEGIN
|
|
284
|
+
SELECT table_name, partition
|
|
285
|
+
FROM ${D}.queue
|
|
286
|
+
WHERE name = queue_name
|
|
287
|
+
INTO v_table, v_partition;
|
|
288
|
+
|
|
289
|
+
IF v_partition THEN
|
|
290
|
+
EXECUTE format('DROP TABLE IF EXISTS ${D}.%I', v_table);
|
|
291
|
+
ELSE
|
|
292
|
+
EXECUTE format('DELETE FROM ${D}.%I WHERE name = %L', v_table, queue_name);
|
|
293
|
+
END IF;
|
|
294
|
+
|
|
295
|
+
DELETE FROM ${D}.queue WHERE name = queue_name;
|
|
296
|
+
END;
|
|
297
|
+
$$
|
|
298
|
+
LANGUAGE plpgsql;
|
|
299
|
+
`),(E=a,F=b,`INSERT INTO ${E}.version(version) VALUES ('${F}')`)];return ak(a,G)}let m='id, name, data, expire_seconds as "expireInSeconds", group_id as "groupId", group_tier as "groupTier"',n=`${m},
|
|
300
|
+
policy,
|
|
301
|
+
state,
|
|
302
|
+
priority,
|
|
303
|
+
retry_limit as "retryLimit",
|
|
304
|
+
retry_count as "retryCount",
|
|
305
|
+
retry_delay as "retryDelay",
|
|
306
|
+
retry_backoff as "retryBackoff",
|
|
307
|
+
retry_delay_max as "retryDelayMax",
|
|
308
|
+
start_after as "startAfter",
|
|
309
|
+
started_on as "startedOn",
|
|
310
|
+
singleton_key as "singletonKey",
|
|
311
|
+
singleton_on as "singletonOn",
|
|
312
|
+
deletion_seconds as "deleteAfterSeconds",
|
|
313
|
+
created_on as "createdOn",
|
|
314
|
+
completed_on as "completedOn",
|
|
315
|
+
keep_until as "keepUntil",
|
|
316
|
+
dead_letter as "deadLetter",
|
|
317
|
+
output
|
|
318
|
+
`;function o(a,b,c){let d=`SELECT ${a}.create_queue('${b}', '${JSON.stringify(c)}'::jsonb)`;return ak(a,d,"create-queue")}function p(a,b){let c=`SELECT ${a}.delete_queue('${b}')`;return ak(a,c,"delete-queue")}function q(a){return`ALTER TABLE ${a}.job ADD PRIMARY KEY (name, id)`}function r(a){return`ALTER TABLE ${a}.job ADD CONSTRAINT q_fkey FOREIGN KEY (name) REFERENCES ${a}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED`}function s(a){return`ALTER TABLE ${a}.job ADD CONSTRAINT dlq_fkey FOREIGN KEY (dead_letter) REFERENCES ${a}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED`}function t(a){return`CREATE UNIQUE INDEX job_i1 ON ${a}.job (name, COALESCE(singleton_key, '')) WHERE state = '${h.created}' AND policy = '${i.short}'`}function u(a){return`CREATE UNIQUE INDEX job_i2 ON ${a}.job (name, COALESCE(singleton_key, '')) WHERE state = '${h.active}' AND policy = '${i.singleton}'`}function v(a){return`CREATE UNIQUE INDEX job_i3 ON ${a}.job (name, state, COALESCE(singleton_key, '')) WHERE state <= '${h.active}' AND policy = '${i.stately}'`}function w(a){return`CREATE UNIQUE INDEX job_i4 ON ${a}.job (name, singleton_on, COALESCE(singleton_key, '')) WHERE state <> '${h.cancelled}' AND singleton_on IS NOT NULL`}function x(a){return`CREATE INDEX job_i5 ON ${a}.job (name, start_after) INCLUDE (priority, created_on, id) WHERE state < '${h.active}'`}function y(a){return`CREATE UNIQUE INDEX job_i6 ON ${a}.job (name, COALESCE(singleton_key, '')) WHERE state <= '${h.active}' AND policy = '${i.exclusive}'`}function z(a){return`CREATE INDEX job_i7 ON ${a}.job (name, group_id) WHERE state = '${h.active}' AND group_id IS NOT NULL`}function A(a,b,c){return F(a,b,"monitor_on",c)}function B(a,b,c){return F(a,b,"maintain_on",c)}function C(a,b){return E(a,"cron_on",b)}function D(a,b){return E(a,"bam_on",b)}function E(a,b,c){return`
|
|
319
|
+
UPDATE ${a}.version
|
|
320
|
+
SET ${b} = now()
|
|
321
|
+
WHERE EXTRACT( EPOCH FROM (now() - COALESCE(${b}, now() - interval '1 week') ) ) > ${c}
|
|
322
|
+
RETURNING true
|
|
323
|
+
`}function F(a,b,c,d){return{text:`
|
|
324
|
+
UPDATE ${a}.queue
|
|
325
|
+
SET ${c} = now()
|
|
326
|
+
WHERE name = ANY($1::text[])
|
|
327
|
+
AND EXTRACT( EPOCH FROM (now() - COALESCE(${c}, now() - interval '1 week') ) ) > ${d}
|
|
328
|
+
RETURNING name
|
|
329
|
+
`,values:[b]}}function G(a,{deadLetter:b}={}){return`
|
|
330
|
+
WITH options as (SELECT $2::jsonb as data)
|
|
331
|
+
UPDATE ${a}.queue SET
|
|
332
|
+
retry_limit = COALESCE((o.data->>'retryLimit')::int, retry_limit),
|
|
333
|
+
retry_delay = COALESCE((o.data->>'retryDelay')::int, retry_delay),
|
|
334
|
+
retry_backoff = COALESCE((o.data->>'retryBackoff')::bool, retry_backoff),
|
|
335
|
+
retry_delay_max = CASE WHEN o.data ? 'retryDelayMax'
|
|
336
|
+
THEN (o.data->>'retryDelayMax')::int
|
|
337
|
+
ELSE retry_delay_max END,
|
|
338
|
+
expire_seconds = COALESCE((o.data->>'expireInSeconds')::int, expire_seconds),
|
|
339
|
+
retention_seconds = COALESCE((o.data->>'retentionSeconds')::int, retention_seconds),
|
|
340
|
+
deletion_seconds = COALESCE((o.data->>'deleteAfterSeconds')::int, deletion_seconds),
|
|
341
|
+
warning_queued = COALESCE((o.data->>'warningQueueSize')::int, warning_queued),
|
|
342
|
+
${void 0===b?"":`dead_letter = CASE WHEN '${b}' IS DISTINCT FROM dead_letter THEN '${b}' ELSE dead_letter END,`}
|
|
343
|
+
updated_on = now()
|
|
344
|
+
FROM options o
|
|
345
|
+
WHERE name = $1
|
|
346
|
+
`}function H(a,b){let c=b&&b.length>0;return{text:`
|
|
347
|
+
SELECT
|
|
348
|
+
q.name,
|
|
349
|
+
q.policy,
|
|
350
|
+
q.retry_limit as "retryLimit",
|
|
351
|
+
q.retry_delay as "retryDelay",
|
|
352
|
+
q.retry_backoff as "retryBackoff",
|
|
353
|
+
q.retry_delay_max as "retryDelayMax",
|
|
354
|
+
q.expire_seconds as "expireInSeconds",
|
|
355
|
+
q.retention_seconds as "retentionSeconds",
|
|
356
|
+
q.deletion_seconds as "deleteAfterSeconds",
|
|
357
|
+
q.partition,
|
|
358
|
+
q.dead_letter as "deadLetter",
|
|
359
|
+
q.deferred_count as "deferredCount",
|
|
360
|
+
q.warning_queued as "warningQueueSize",
|
|
361
|
+
q.queued_count as "queuedCount",
|
|
362
|
+
q.active_count as "activeCount",
|
|
363
|
+
q.total_count as "totalCount",
|
|
364
|
+
q.singletons_active as "singletonsActive",
|
|
365
|
+
q.table_name as "table",
|
|
366
|
+
q.created_on as "createdOn",
|
|
367
|
+
q.updated_on as "updatedOn"
|
|
368
|
+
FROM ${a}.queue q
|
|
369
|
+
${c?"WHERE q.name = ANY($1::text[])":""}
|
|
370
|
+
`,values:c?[b]:[]}}function I(a,b){return`
|
|
371
|
+
WITH results as (
|
|
372
|
+
DELETE FROM ${a}.${b}
|
|
373
|
+
WHERE name = $1
|
|
374
|
+
AND id IN (SELECT UNNEST($2::uuid[]))
|
|
375
|
+
RETURNING 1
|
|
376
|
+
)
|
|
377
|
+
SELECT COUNT(*) from results
|
|
378
|
+
`}function J(a,b){return`DELETE from ${a}.${b} WHERE name = $1 and state < '${h.active}'`}function K(a,b){return`DELETE from ${a}.${b} WHERE name = $1 and state > '${h.active}'`}function L(a,b){return`TRUNCATE ${a}.${b}`}function M(a,b){return`DELETE from ${a}.${b} WHERE name = $1`}function N(a){return`SELECT * FROM ${a}.schedule`}function O(a){return`SELECT * FROM ${a}.schedule WHERE name = $1 AND COALESCE(key, '') = $2`}function P(a){return`
|
|
379
|
+
INSERT INTO ${a}.schedule (name, key, cron, timezone, data, options)
|
|
380
|
+
VALUES ($1, $2, $3, $4, $5, $6)
|
|
381
|
+
ON CONFLICT (name, key) DO UPDATE SET
|
|
382
|
+
cron = EXCLUDED.cron,
|
|
383
|
+
timezone = EXCLUDED.timezone,
|
|
384
|
+
data = EXCLUDED.data,
|
|
385
|
+
options = EXCLUDED.options,
|
|
386
|
+
updated_on = now()
|
|
387
|
+
`}function Q(a){return`
|
|
388
|
+
DELETE FROM ${a}.schedule
|
|
389
|
+
WHERE name = $1
|
|
390
|
+
AND COALESCE(key, '') = $2
|
|
391
|
+
`}function R(a){return`
|
|
392
|
+
INSERT INTO ${a}.subscription (event, name)
|
|
393
|
+
VALUES ($1, $2)
|
|
394
|
+
ON CONFLICT (event, name) DO UPDATE SET
|
|
395
|
+
event = EXCLUDED.event,
|
|
396
|
+
name = EXCLUDED.name,
|
|
397
|
+
updated_on = now()
|
|
398
|
+
`}function S(a){return`
|
|
399
|
+
DELETE FROM ${a}.subscription
|
|
400
|
+
WHERE event = $1 and name = $2
|
|
401
|
+
`}function T(a){return`
|
|
402
|
+
SELECT name FROM ${a}.subscription
|
|
403
|
+
WHERE event = $1
|
|
404
|
+
`}function U(){return"SELECT round(date_part('epoch', now()) * 1000) as time"}function V(a){return`SELECT version from ${a}.version`}function W(a,b){return`UPDATE ${a}.version SET version = '${b}'`}function X(a){return`SELECT to_regclass('${a}.version') as name`}function Y(a){let{schema:b,table:c,name:d,policy:e,limit:f,includeMetadata:g,priority:j=!0,orderByCreatedOn:k=!0,ignoreStartAfter:l=!1,groupConcurrency:o}=a,p=f>1&&(e===i.singleton||e===i.stately),q=null!=a.ignoreSingletons&&a.ignoreSingletons.length>0,r=null!=a.ignoreGroups&&a.ignoreGroups.length>0,s=null!=o,t=s&&"object"==typeof o&&o.tiers&&Object.keys(o.tiers).length>0,u=function(a){let{ignoreSingletons:b,ignoreGroups:c,groupConcurrency:d}=a,e=null!=b&&b.length>0,f=null!=c&&c.length>0,g=null!=d,h=g?"number"==typeof d?{default:d}:d:null,i=h?.tiers&&Object.keys(h.tiers).length>0,j=[],k=0,l="",m="",n="",o="";return e&&(k++,l=`$${k}::text[]`,j.push(b)),f&&(k++,m=`$${k}::text[]`,j.push(c)),g&&h&&(k++,n=`$${k}::int`,j.push(h.default),i&&(k++,o=`$${k}::jsonb`,j.push(JSON.stringify(h.tiers)))),{values:j,ignoreSingletonsParam:l,ignoreGroupsParam:m,defaultGroupLimitParam:n,tiersParam:o}}(a),v=[`name = '${d}'`,`state < '${h.active}'`,!l?"start_after < now()":"",q?`singleton_key <> ALL(${u.ignoreSingletonsParam})`:"",r?`(group_id IS NULL OR group_id <> ALL(${u.ignoreGroupsParam}))`:""].filter(Boolean).join(" AND "),w=["id",p?"singleton_key":"",s?"group_id, group_tier":""].filter(Boolean).join(", "),x=s?`active_group_counts AS (
|
|
405
|
+
SELECT group_id, COUNT(*)::int as active_cnt
|
|
406
|
+
FROM ${b}.${c}
|
|
407
|
+
WHERE name = '${d}' AND state = '${h.active}' AND group_id IS NOT NULL
|
|
408
|
+
GROUP BY group_id
|
|
409
|
+
), `:"",y=`
|
|
410
|
+
next AS (
|
|
411
|
+
SELECT ${w}
|
|
412
|
+
FROM ${b}.${c}
|
|
413
|
+
WHERE ${v}
|
|
414
|
+
ORDER BY ${j?"priority desc, ":""}${k?"created_on, ":""}id
|
|
415
|
+
LIMIT ${f}
|
|
416
|
+
FOR UPDATE SKIP LOCKED
|
|
417
|
+
)`,z=p?`, singleton_ranking AS (
|
|
418
|
+
SELECT id, ${s?"group_id, group_tier, ":""}
|
|
419
|
+
row_number() OVER (PARTITION BY singleton_key) as singleton_rn
|
|
420
|
+
FROM next
|
|
421
|
+
)`:"",A=s?`,
|
|
422
|
+
group_ranking AS (
|
|
423
|
+
SELECT t.id
|
|
424
|
+
, t.group_id
|
|
425
|
+
, t.group_tier
|
|
426
|
+
${p?", singleton_rn":""}
|
|
427
|
+
, ROW_NUMBER() OVER (PARTITION BY t.group_id ORDER BY t.id) as group_rn
|
|
428
|
+
, COALESCE(agc.active_cnt, 0) as active_cnt
|
|
429
|
+
FROM ${p?"singleton_ranking":"next"} t
|
|
430
|
+
LEFT JOIN active_group_counts agc ON t.group_id = agc.group_id
|
|
431
|
+
${p?"WHERE singleton_rn = 1":""}
|
|
432
|
+
),
|
|
433
|
+
group_filtered AS (
|
|
434
|
+
SELECT id FROM group_ranking
|
|
435
|
+
WHERE group_id IS NULL
|
|
436
|
+
OR (active_cnt + group_rn) <= ${t?`COALESCE((${u.tiersParam} ->> group_tier)::int, ${u.defaultGroupLimitParam})`:u.defaultGroupLimitParam}
|
|
437
|
+
)`:"",B=s?"group_filtered":p?"singleton_ranking":"next";return{text:`
|
|
438
|
+
WITH
|
|
439
|
+
${x}
|
|
440
|
+
${y}
|
|
441
|
+
${z}
|
|
442
|
+
${A}
|
|
443
|
+
UPDATE ${b}.${c} j SET
|
|
444
|
+
state = '${h.active}',
|
|
445
|
+
started_on = now(),
|
|
446
|
+
retry_count = CASE WHEN started_on IS NOT NULL THEN retry_count + 1 ELSE retry_count END
|
|
447
|
+
FROM ${B}
|
|
448
|
+
WHERE name = '${d}' AND j.id = ${B}.id
|
|
449
|
+
${p&&!s?"AND singleton_rn = 1":""}
|
|
450
|
+
RETURNING j.${g?n:m}
|
|
451
|
+
`,values:u.values}}function Z(a,b,c){let d=c?`state < '${h.completed}'`:`state = '${h.active}'`;return`
|
|
452
|
+
WITH results AS (
|
|
453
|
+
UPDATE ${a}.${b}
|
|
454
|
+
SET completed_on = now(),
|
|
455
|
+
state = '${h.completed}',
|
|
456
|
+
output = $3::jsonb
|
|
457
|
+
WHERE name = $1
|
|
458
|
+
AND id IN (SELECT UNNEST($2::uuid[]))
|
|
459
|
+
AND ${d}
|
|
460
|
+
RETURNING *
|
|
461
|
+
)
|
|
462
|
+
SELECT COUNT(*) FROM results
|
|
463
|
+
`}function $(a,b){return`
|
|
464
|
+
WITH results as (
|
|
465
|
+
UPDATE ${a}.${b}
|
|
466
|
+
SET completed_on = now(),
|
|
467
|
+
state = '${h.cancelled}'
|
|
468
|
+
WHERE name = $1
|
|
469
|
+
AND id IN (SELECT UNNEST($2::uuid[]))
|
|
470
|
+
AND state < '${h.completed}'
|
|
471
|
+
RETURNING 1
|
|
472
|
+
)
|
|
473
|
+
SELECT COUNT(*) from results
|
|
474
|
+
`}function _(a,b){return`
|
|
475
|
+
WITH results as (
|
|
476
|
+
UPDATE ${a}.${b}
|
|
477
|
+
SET completed_on = NULL,
|
|
478
|
+
state = '${h.created}'
|
|
479
|
+
WHERE name = $1
|
|
480
|
+
AND id IN (SELECT UNNEST($2::uuid[]))
|
|
481
|
+
AND state = '${h.cancelled}'
|
|
482
|
+
RETURNING 1
|
|
483
|
+
)
|
|
484
|
+
SELECT COUNT(*) from results
|
|
485
|
+
`}function aa(a,b){return`
|
|
486
|
+
UPDATE ${a}.${b}
|
|
487
|
+
SET state = '${h.created}'
|
|
488
|
+
WHERE name = $1
|
|
489
|
+
AND id IN (SELECT UNNEST($2::uuid[]))
|
|
490
|
+
`}function ab(a,{table:b,name:c,returnId:d=!0}){return`
|
|
491
|
+
INSERT INTO ${a}.${b} (
|
|
492
|
+
id,
|
|
493
|
+
name,
|
|
494
|
+
data,
|
|
495
|
+
priority,
|
|
496
|
+
start_after,
|
|
497
|
+
singleton_key,
|
|
498
|
+
singleton_on,
|
|
499
|
+
group_id,
|
|
500
|
+
group_tier,
|
|
501
|
+
expire_seconds,
|
|
502
|
+
deletion_seconds,
|
|
503
|
+
keep_until,
|
|
504
|
+
retry_limit,
|
|
505
|
+
retry_delay,
|
|
506
|
+
retry_backoff,
|
|
507
|
+
retry_delay_max,
|
|
508
|
+
policy,
|
|
509
|
+
dead_letter
|
|
510
|
+
)
|
|
511
|
+
SELECT
|
|
512
|
+
COALESCE(id, gen_random_uuid()) as id,
|
|
513
|
+
'${c}' as name,
|
|
514
|
+
data,
|
|
515
|
+
COALESCE(priority, 0) as priority,
|
|
516
|
+
j.start_after,
|
|
517
|
+
"singletonKey",
|
|
518
|
+
CASE
|
|
519
|
+
WHEN "singletonSeconds" IS NOT NULL THEN 'epoch'::timestamp + '1s'::interval * ("singletonSeconds" * floor(( date_part('epoch', now()) + COALESCE("singletonOffset",0)) / "singletonSeconds" ))
|
|
520
|
+
ELSE NULL
|
|
521
|
+
END as singleton_on,
|
|
522
|
+
"groupId" as group_id,
|
|
523
|
+
"groupTier" as group_tier,
|
|
524
|
+
COALESCE("expireInSeconds", q.expire_seconds) as expire_seconds,
|
|
525
|
+
COALESCE("deleteAfterSeconds", q.deletion_seconds) as deletion_seconds,
|
|
526
|
+
j.start_after + (COALESCE("retentionSeconds", q.retention_seconds) * interval '1s') as keep_until,
|
|
527
|
+
COALESCE("retryLimit", q.retry_limit) as retry_limit,
|
|
528
|
+
COALESCE("retryDelay", q.retry_delay) as retry_delay,
|
|
529
|
+
COALESCE("retryBackoff", q.retry_backoff, false) as retry_backoff,
|
|
530
|
+
COALESCE("retryDelayMax", q.retry_delay_max) as retry_delay_max,
|
|
531
|
+
q.policy,
|
|
532
|
+
COALESCE("deadLetter", q.dead_letter) as dead_letter
|
|
533
|
+
FROM (
|
|
534
|
+
SELECT *,
|
|
535
|
+
CASE
|
|
536
|
+
WHEN right("startAfter", 1) = 'Z' THEN CAST("startAfter" as timestamp with time zone)
|
|
537
|
+
ELSE now() + CAST(COALESCE("startAfter",'0') as interval)
|
|
538
|
+
END as start_after
|
|
539
|
+
FROM json_to_recordset($1::json) as x (
|
|
540
|
+
id uuid,
|
|
541
|
+
priority integer,
|
|
542
|
+
data jsonb,
|
|
543
|
+
"startAfter" text,
|
|
544
|
+
"retryLimit" integer,
|
|
545
|
+
"retryDelay" integer,
|
|
546
|
+
"retryDelayMax" integer,
|
|
547
|
+
"retryBackoff" boolean,
|
|
548
|
+
"singletonKey" text,
|
|
549
|
+
"singletonSeconds" integer,
|
|
550
|
+
"singletonOffset" integer,
|
|
551
|
+
"groupId" text,
|
|
552
|
+
"groupTier" text,
|
|
553
|
+
"expireInSeconds" integer,
|
|
554
|
+
"deleteAfterSeconds" integer,
|
|
555
|
+
"retentionSeconds" integer,
|
|
556
|
+
"deadLetter" text
|
|
557
|
+
)
|
|
558
|
+
) j
|
|
559
|
+
JOIN ${a}.queue q ON q.name = '${c}'
|
|
560
|
+
ON CONFLICT DO NOTHING
|
|
561
|
+
${d?"RETURNING id":""}
|
|
562
|
+
`}function ac(a,b){return ae(a,b,`name = $1 AND id IN (SELECT UNNEST($2::uuid[])) AND state < '${h.completed}'`,"$3::jsonb")}function ad(a,b,c){return ak(a,ae(a,b,`state = '${h.active}'
|
|
563
|
+
AND (started_on + expire_seconds * interval '1s') < now()
|
|
564
|
+
AND name = ANY(${aj(c)})`,'\'{ "value": { "message": "job timed out" } }\'::jsonb'),b+"failJobsByTimeout")}function ae(a,b,c,d){return`
|
|
565
|
+
WITH deleted_jobs AS (
|
|
566
|
+
DELETE FROM ${a}.${b}
|
|
567
|
+
WHERE ${c}
|
|
568
|
+
RETURNING *
|
|
569
|
+
),
|
|
570
|
+
retried_jobs AS (
|
|
571
|
+
INSERT INTO ${a}.${b} (
|
|
572
|
+
id,
|
|
573
|
+
name,
|
|
574
|
+
priority,
|
|
575
|
+
data,
|
|
576
|
+
state,
|
|
577
|
+
retry_limit,
|
|
578
|
+
retry_count,
|
|
579
|
+
retry_delay,
|
|
580
|
+
retry_backoff,
|
|
581
|
+
retry_delay_max,
|
|
582
|
+
start_after,
|
|
583
|
+
started_on,
|
|
584
|
+
singleton_key,
|
|
585
|
+
singleton_on,
|
|
586
|
+
group_id,
|
|
587
|
+
group_tier,
|
|
588
|
+
expire_seconds,
|
|
589
|
+
deletion_seconds,
|
|
590
|
+
created_on,
|
|
591
|
+
completed_on,
|
|
592
|
+
keep_until,
|
|
593
|
+
policy,
|
|
594
|
+
output,
|
|
595
|
+
dead_letter
|
|
596
|
+
)
|
|
597
|
+
SELECT
|
|
598
|
+
id,
|
|
599
|
+
name,
|
|
600
|
+
priority,
|
|
601
|
+
data,
|
|
602
|
+
CASE
|
|
603
|
+
WHEN retry_count < retry_limit THEN '${h.retry}'::${a}.job_state
|
|
604
|
+
ELSE '${h.failed}'::${a}.job_state
|
|
605
|
+
END as state,
|
|
606
|
+
retry_limit,
|
|
607
|
+
retry_count,
|
|
608
|
+
retry_delay,
|
|
609
|
+
retry_backoff,
|
|
610
|
+
retry_delay_max,
|
|
611
|
+
CASE WHEN retry_count = retry_limit THEN start_after
|
|
612
|
+
WHEN NOT retry_backoff THEN now() + retry_delay * interval '1'
|
|
613
|
+
ELSE now() + LEAST(
|
|
614
|
+
retry_delay_max,
|
|
615
|
+
retry_delay * (
|
|
616
|
+
2 ^ LEAST(16, retry_count + 1) / 2 +
|
|
617
|
+
2 ^ LEAST(16, retry_count + 1) / 2 * random()
|
|
618
|
+
)
|
|
619
|
+
) * interval '1s'
|
|
620
|
+
END as start_after,
|
|
621
|
+
started_on,
|
|
622
|
+
singleton_key,
|
|
623
|
+
singleton_on,
|
|
624
|
+
group_id,
|
|
625
|
+
group_tier,
|
|
626
|
+
expire_seconds,
|
|
627
|
+
deletion_seconds,
|
|
628
|
+
created_on,
|
|
629
|
+
CASE WHEN retry_count < retry_limit THEN NULL ELSE now() END as completed_on,
|
|
630
|
+
keep_until,
|
|
631
|
+
policy,
|
|
632
|
+
${d},
|
|
633
|
+
dead_letter
|
|
634
|
+
FROM deleted_jobs
|
|
635
|
+
ON CONFLICT DO NOTHING
|
|
636
|
+
RETURNING *
|
|
637
|
+
),
|
|
638
|
+
failed_jobs as (
|
|
639
|
+
INSERT INTO ${a}.${b} (
|
|
640
|
+
id,
|
|
641
|
+
name,
|
|
642
|
+
priority,
|
|
643
|
+
data,
|
|
644
|
+
state,
|
|
645
|
+
retry_limit,
|
|
646
|
+
retry_count,
|
|
647
|
+
retry_delay,
|
|
648
|
+
retry_backoff,
|
|
649
|
+
retry_delay_max,
|
|
650
|
+
start_after,
|
|
651
|
+
started_on,
|
|
652
|
+
singleton_key,
|
|
653
|
+
singleton_on,
|
|
654
|
+
group_id,
|
|
655
|
+
group_tier,
|
|
656
|
+
expire_seconds,
|
|
657
|
+
deletion_seconds,
|
|
658
|
+
created_on,
|
|
659
|
+
completed_on,
|
|
660
|
+
keep_until,
|
|
661
|
+
policy,
|
|
662
|
+
output,
|
|
663
|
+
dead_letter
|
|
664
|
+
)
|
|
665
|
+
SELECT
|
|
666
|
+
id,
|
|
667
|
+
name,
|
|
668
|
+
priority,
|
|
669
|
+
data,
|
|
670
|
+
'${h.failed}'::${a}.job_state as state,
|
|
671
|
+
retry_limit,
|
|
672
|
+
retry_count,
|
|
673
|
+
retry_delay,
|
|
674
|
+
retry_backoff,
|
|
675
|
+
retry_delay_max,
|
|
676
|
+
start_after,
|
|
677
|
+
started_on,
|
|
678
|
+
singleton_key,
|
|
679
|
+
singleton_on,
|
|
680
|
+
group_id,
|
|
681
|
+
group_tier,
|
|
682
|
+
expire_seconds,
|
|
683
|
+
deletion_seconds,
|
|
684
|
+
created_on,
|
|
685
|
+
now() as completed_on,
|
|
686
|
+
keep_until,
|
|
687
|
+
policy,
|
|
688
|
+
${d},
|
|
689
|
+
dead_letter
|
|
690
|
+
FROM deleted_jobs
|
|
691
|
+
WHERE id NOT IN (SELECT id from retried_jobs)
|
|
692
|
+
RETURNING *
|
|
693
|
+
),
|
|
694
|
+
results as (
|
|
695
|
+
SELECT * FROM retried_jobs
|
|
696
|
+
UNION ALL
|
|
697
|
+
SELECT * FROM failed_jobs
|
|
698
|
+
),
|
|
699
|
+
dlq_jobs as (
|
|
700
|
+
INSERT INTO ${a}.job (name, data, output, retry_limit, retry_backoff, retry_delay, keep_until, deletion_seconds)
|
|
701
|
+
SELECT
|
|
702
|
+
r.dead_letter,
|
|
703
|
+
data,
|
|
704
|
+
output,
|
|
705
|
+
q.retry_limit,
|
|
706
|
+
q.retry_backoff,
|
|
707
|
+
q.retry_delay,
|
|
708
|
+
now() + q.retention_seconds * interval '1s',
|
|
709
|
+
q.deletion_seconds
|
|
710
|
+
FROM results r
|
|
711
|
+
JOIN ${a}.queue q ON q.name = r.dead_letter
|
|
712
|
+
WHERE state = '${h.failed}'
|
|
713
|
+
)
|
|
714
|
+
SELECT COUNT(*) FROM results
|
|
715
|
+
`}function af(a,b,c){let d=`
|
|
716
|
+
DELETE FROM ${a}.${b}
|
|
717
|
+
WHERE name = ANY(${aj(c)})
|
|
718
|
+
AND
|
|
719
|
+
(
|
|
720
|
+
(deletion_seconds > 0 AND completed_on + deletion_seconds * interval '1s' < now())
|
|
721
|
+
OR
|
|
722
|
+
(state < '${h.active}' AND keep_until < now())
|
|
723
|
+
)
|
|
724
|
+
`;return ak(a,d,b+"deletion")}function ag(a,b){return`
|
|
725
|
+
WITH results as (
|
|
726
|
+
UPDATE ${a}.job
|
|
727
|
+
SET state = '${h.retry}',
|
|
728
|
+
retry_limit = retry_limit + 1
|
|
729
|
+
WHERE name = $1
|
|
730
|
+
AND id IN (SELECT UNNEST($2::uuid[]))
|
|
731
|
+
AND state = '${h.failed}'
|
|
732
|
+
RETURNING 1
|
|
733
|
+
)
|
|
734
|
+
SELECT COUNT(*) from results
|
|
735
|
+
`}function ah(a,b,c){return{text:`
|
|
736
|
+
SELECT
|
|
737
|
+
name,
|
|
738
|
+
(count(*) FILTER (WHERE start_after > now()))::int as "deferredCount",
|
|
739
|
+
(count(*) FILTER (WHERE state < '${h.active}'))::int as "queuedCount",
|
|
740
|
+
(count(*) FILTER (WHERE state = '${h.active}'))::int as "activeCount",
|
|
741
|
+
count(*)::int as "totalCount",
|
|
742
|
+
array_agg(singleton_key) FILTER (WHERE policy IN ('${i.singleton}','${i.stately}') AND state = '${h.active}') as "singletonsActive"
|
|
743
|
+
FROM ${a}.${b}
|
|
744
|
+
WHERE name = ANY($1::text[])
|
|
745
|
+
GROUP BY 1
|
|
746
|
+
`,values:[c]}}function ai(a,b,c){let d=ah(a,b,c).text.replace("$1::text[]",aj(c)),e=`
|
|
747
|
+
WITH stats AS (${d})
|
|
748
|
+
UPDATE ${a}.queue SET
|
|
749
|
+
deferred_count = COALESCE(stats."deferredCount", 0),
|
|
750
|
+
queued_count = COALESCE(stats."queuedCount", 0),
|
|
751
|
+
active_count = COALESCE(stats."activeCount", 0),
|
|
752
|
+
total_count = COALESCE(stats."totalCount", 0),
|
|
753
|
+
singletons_active = stats."singletonsActive"
|
|
754
|
+
FROM (
|
|
755
|
+
SELECT q.name
|
|
756
|
+
FROM unnest(${aj(c)}) AS q(name)
|
|
757
|
+
) q
|
|
758
|
+
LEFT JOIN stats ON stats.name = q.name
|
|
759
|
+
WHERE queue.name = q.name
|
|
760
|
+
RETURNING
|
|
761
|
+
queue.name,
|
|
762
|
+
queue.queued_count as "queuedCount",
|
|
763
|
+
queue.warning_queued as "warningQueueSize"
|
|
764
|
+
`;return ak(a,e,"queue-stats")}function aj(a){let b=a.map(a=>`'${a.replace(g,"''")}'`);return`ARRAY[${b.join(",")}]::text[]`}function ak(a,b,c){var d,e;let f=Array.isArray(b)?b.join(";\n"):b;return`
|
|
765
|
+
BEGIN;
|
|
766
|
+
SET LOCAL lock_timeout = 30000;
|
|
767
|
+
SET LOCAL idle_in_transaction_session_timeout = 30000;
|
|
768
|
+
${d=a,e=c,`SELECT pg_advisory_xact_lock(
|
|
769
|
+
('x' || encode(sha224((current_database() || '.pgboss.${d}${e||""}')::bytea), 'hex'))::bit(64)::bigint
|
|
770
|
+
)`};
|
|
771
|
+
${f};
|
|
772
|
+
COMMIT;
|
|
773
|
+
`}function al(a,b){return`SELECT version::int/(version::int-${b}) from ${a}.version`}function am(a,b,c){let{queued:d,byKey:e,byData:f,byId:g}=c,i=1,j=[];return g&&(++i,j.push(`AND id = $${i}`)),e&&(++i,j.push(`AND singleton_key = $${i}`)),f&&(++i,j.push(`AND data @> $${i}`)),d&&j.push(`AND state < '${h.active}'`),`
|
|
774
|
+
SELECT ${n}
|
|
775
|
+
FROM ${a}.${b}
|
|
776
|
+
WHERE name = $1
|
|
777
|
+
${j.join("\n ")}
|
|
778
|
+
`}function an(a,b){return`
|
|
779
|
+
SELECT ${n}
|
|
780
|
+
FROM ${a}.${b}
|
|
781
|
+
WHERE name = $1
|
|
782
|
+
AND id = $2
|
|
783
|
+
`}function ao(a){return`
|
|
784
|
+
UPDATE ${a}.bam
|
|
785
|
+
SET status = 'in_progress', started_on = now()
|
|
786
|
+
WHERE id = (
|
|
787
|
+
SELECT id FROM ${a}.bam
|
|
788
|
+
WHERE status IN ('pending', 'failed')
|
|
789
|
+
AND NOT EXISTS (SELECT 1 FROM ${a}.bam WHERE status = 'in_progress')
|
|
790
|
+
ORDER BY created_on
|
|
791
|
+
LIMIT 1
|
|
792
|
+
)
|
|
793
|
+
RETURNING id, name, version, status, queue, table_name as "table", command, error,
|
|
794
|
+
created_on as "createdOn", started_on as "startedOn", completed_on as "completedOn"
|
|
795
|
+
`}function ap(a,b){return`
|
|
796
|
+
UPDATE ${a}.bam
|
|
797
|
+
SET status = 'completed', completed_on = now()
|
|
798
|
+
WHERE id = '${b}'
|
|
799
|
+
`}function aq(a,b,c){let d=c.replace(/'/g,"''");return`
|
|
800
|
+
UPDATE ${a}.bam
|
|
801
|
+
SET status = 'failed', error = '${d}', completed_on = now()
|
|
802
|
+
WHERE id = '${b}'
|
|
803
|
+
`}function ar(a){return`
|
|
804
|
+
SELECT status, count(*)::int as count, max(created_on) as "lastCreatedOn"
|
|
805
|
+
FROM ${a}.bam
|
|
806
|
+
GROUP BY status
|
|
807
|
+
`}function as(a){return`
|
|
808
|
+
SELECT id, name, version, status, queue, table_name as "table", command, error,
|
|
809
|
+
created_on as "createdOn", started_on as "startedOn", completed_on as "completedOn"
|
|
810
|
+
FROM ${a}.bam
|
|
811
|
+
ORDER BY version, created_on
|
|
812
|
+
`}},18287:(a,b,c)=>{var d,e;Object.defineProperty(b,"__esModule",{value:!0}),b.CronDate=b.DAYS_IN_MONTH=b.DateMathOp=b.TimeUnit=void 0;let f=c(75806);!function(a){a.Second="Second",a.Minute="Minute",a.Hour="Hour",a.Day="Day",a.Month="Month",a.Year="Year"}(d||(b.TimeUnit=d={})),function(a){a.Add="Add",a.Subtract="Subtract"}(e||(b.DateMathOp=e={})),b.DAYS_IN_MONTH=Object.freeze([31,29,31,30,31,30,31,31,30,31,30,31]);class g{#v;#w=null;#x=null;#y={add:{[d.Year]:this.addYear.bind(this),[d.Month]:this.addMonth.bind(this),[d.Day]:this.addDay.bind(this),[d.Hour]:this.addHour.bind(this),[d.Minute]:this.addMinute.bind(this),[d.Second]:this.addSecond.bind(this)},subtract:{[d.Year]:this.subtractYear.bind(this),[d.Month]:this.subtractMonth.bind(this),[d.Day]:this.subtractDay.bind(this),[d.Hour]:this.subtractHour.bind(this),[d.Minute]:this.subtractMinute.bind(this),[d.Second]:this.subtractSecond.bind(this)}};constructor(a,b){let c={zone:b};if(a?a instanceof g?(this.#v=a.#v,this.#w=a.#w,this.#x=a.#x):a instanceof Date?this.#v=f.DateTime.fromJSDate(a,c):"number"==typeof a?this.#v=f.DateTime.fromMillis(a,c):(this.#v=f.DateTime.fromISO(a,c),this.#v.isValid||(this.#v=f.DateTime.fromRFC2822(a,c)),this.#v.isValid||(this.#v=f.DateTime.fromSQL(a,c)),this.#v.isValid||(this.#v=f.DateTime.fromFormat(a,"EEE, d MMM yyyy HH:mm:ss",c))):this.#v=f.DateTime.local(),!this.#v.isValid)throw Error(`CronDate: unhandled timestamp: ${a}`);b&&b!==this.#v.zoneName&&(this.#v=this.#v.setZone(b))}static #z(a){return a%4==0&&a%100!=0||a%400==0}get dstStart(){return this.#w}set dstStart(a){this.#w=a}get dstEnd(){return this.#x}set dstEnd(a){this.#x=a}addYear(){this.#v=this.#v.plus({years:1})}addMonth(){this.#v=this.#v.plus({months:1}).startOf("month")}addDay(){this.#v=this.#v.plus({days:1}).startOf("day")}addHour(){this.#v=this.#v.plus({hours:1}).startOf("hour")}addMinute(){this.#v=this.#v.plus({minutes:1}).startOf("minute")}addSecond(){this.#v=this.#v.plus({seconds:1})}subtractYear(){this.#v=this.#v.minus({years:1})}subtractMonth(){this.#v=this.#v.minus({months:1}).endOf("month").startOf("second")}subtractDay(){this.#v=this.#v.minus({days:1}).endOf("day").startOf("second")}subtractHour(){this.#v=this.#v.minus({hours:1}).endOf("hour").startOf("second")}subtractMinute(){this.#v=this.#v.minus({minutes:1}).endOf("minute").startOf("second")}subtractSecond(){this.#v=this.#v.minus({seconds:1})}addUnit(a){this.#y.add[a]()}subtractUnit(a){this.#y.subtract[a]()}invokeDateOperation(a,b){if(a===e.Add)return void this.addUnit(b);if(a===e.Subtract)return void this.subtractUnit(b);throw Error(`Invalid verb: ${a}`)}getDate(){return this.#v.day}getFullYear(){return this.#v.year}getDay(){let a=this.#v.weekday;return 7===a?0:a}getMonth(){return this.#v.month-1}getHours(){return this.#v.hour}getMinutes(){return this.#v.minute}getSeconds(){return this.#v.second}getMilliseconds(){return this.#v.millisecond}getUTCOffset(){return this.#v.offset}setStartOfDay(){this.#v=this.#v.startOf("day")}setEndOfDay(){this.#v=this.#v.endOf("day")}getTime(){return this.#v.valueOf()}getUTCDate(){return this.#A().day}getUTCFullYear(){return this.#A().year}getUTCDay(){let a=this.#A().weekday;return 7===a?0:a}getUTCMonth(){return this.#A().month-1}getUTCHours(){return this.#A().hour}getUTCMinutes(){return this.#A().minute}getUTCSeconds(){return this.#A().second}toISOString(){return this.#v.toUTC().toISO()}toJSON(){return this.#v.toJSON()}setDate(a){this.#v=this.#v.set({day:a})}setFullYear(a){this.#v=this.#v.set({year:a})}setDay(a){this.#v=this.#v.set({weekday:a})}setMonth(a){this.#v=this.#v.set({month:a+1})}setHours(a){this.#v=this.#v.set({hour:a})}setMinutes(a){this.#v=this.#v.set({minute:a})}setSeconds(a){this.#v=this.#v.set({second:a})}setMilliseconds(a){this.#v=this.#v.set({millisecond:a})}toString(){return this.toDate().toString()}toDate(){return this.#v.toJSDate()}isLastDayOfMonth(){let{day:a,month:c}=this.#v;if(2===c){let d=g.#z(this.#v.year);return a===b.DAYS_IN_MONTH[c-1]-!d}return a===b.DAYS_IN_MONTH[c-1]}isLastWeekdayOfMonth(){let{day:a,month:c}=this.#v;return a>(2===c?b.DAYS_IN_MONTH[c-1]-!g.#z(this.#v.year):b.DAYS_IN_MONTH[c-1])-7}applyDateOperation(a,b,c){if(b===d.Month||b===d.Day)return void this.invokeDateOperation(a,b);let e=this.getHours();this.invokeDateOperation(a,b);let f=this.getHours(),g=f-e;2===g?24!==c&&(this.dstStart=f):0===g&&0===this.getMinutes()&&0===this.getSeconds()&&24!==c&&(this.dstEnd=f)}#A(){return this.#v.toUTC()}}b.CronDate=g,b.default=g},18868:(a,b,c)=>{c.d(b,{A:()=>k});var d=c(34589),e=c(17974);function f(a,b,c){return b.unshift(e.Bk(a,c)),b.push(e.vJ(a,c)),e.xt(a,b)}function g(a,b,c){let e=(c=c||i(a)).find(a=>a.version===b);return d(e,`Version ${b} not found.`),f(a,e.uninstall||[],e.previous)}function h(a,b,c){let e=(c=c||i(a)).filter(a=>a.previous>=b).sort((a,b)=>a.version-b.version).reduce((a,b)=>{if(a.install=a.install.concat(b.install),b.async){let c=b.async.map(a=>a.replace(/\$VERSION\$/g,String(b.version)));a.install=a.install.concat(c)}return a.version=b.version,a},{install:[],version:b});return d(e.install.length>0,`Version ${b} not found.`),f(a,e.install,e.version)}function i(a){return[{release:"11.1.0",version:26,previous:25,install:[`
|
|
813
|
+
CREATE OR REPLACE FUNCTION ${a}.create_queue(queue_name text, options jsonb)
|
|
814
|
+
RETURNS VOID AS
|
|
815
|
+
$$
|
|
816
|
+
DECLARE
|
|
817
|
+
tablename varchar := CASE WHEN options->>'partition' = 'true'
|
|
818
|
+
THEN 'j' || encode(sha224(queue_name::bytea), 'hex')
|
|
819
|
+
ELSE 'job_common'
|
|
820
|
+
END;
|
|
821
|
+
queue_created_on timestamptz;
|
|
822
|
+
BEGIN
|
|
823
|
+
|
|
824
|
+
WITH q as (
|
|
825
|
+
INSERT INTO ${a}.queue (
|
|
826
|
+
name,
|
|
827
|
+
policy,
|
|
828
|
+
retry_limit,
|
|
829
|
+
retry_delay,
|
|
830
|
+
retry_backoff,
|
|
831
|
+
retry_delay_max,
|
|
832
|
+
expire_seconds,
|
|
833
|
+
retention_seconds,
|
|
834
|
+
deletion_seconds,
|
|
835
|
+
warning_queued,
|
|
836
|
+
dead_letter,
|
|
837
|
+
partition,
|
|
838
|
+
table_name
|
|
839
|
+
)
|
|
840
|
+
VALUES (
|
|
841
|
+
queue_name,
|
|
842
|
+
options->>'policy',
|
|
843
|
+
COALESCE((options->>'retryLimit')::int, 2),
|
|
844
|
+
COALESCE((options->>'retryDelay')::int, 0),
|
|
845
|
+
COALESCE((options->>'retryBackoff')::bool, false),
|
|
846
|
+
(options->>'retryDelayMax')::int,
|
|
847
|
+
COALESCE((options->>'expireInSeconds')::int, 900),
|
|
848
|
+
COALESCE((options->>'retentionSeconds')::int, 1209600),
|
|
849
|
+
COALESCE((options->>'deleteAfterSeconds')::int, 604800),
|
|
850
|
+
COALESCE((options->>'warningQueueSize')::int, 0),
|
|
851
|
+
options->>'deadLetter',
|
|
852
|
+
COALESCE((options->>'partition')::bool, false),
|
|
853
|
+
tablename
|
|
854
|
+
)
|
|
855
|
+
ON CONFLICT DO NOTHING
|
|
856
|
+
RETURNING created_on
|
|
857
|
+
)
|
|
858
|
+
SELECT created_on into queue_created_on from q;
|
|
859
|
+
|
|
860
|
+
IF queue_created_on IS NULL OR options->>'partition' IS DISTINCT FROM 'true' THEN
|
|
861
|
+
RETURN;
|
|
862
|
+
END IF;
|
|
863
|
+
|
|
864
|
+
EXECUTE format('CREATE TABLE ${a}.%I (LIKE ${a}.job INCLUDING DEFAULTS)', tablename);
|
|
865
|
+
|
|
866
|
+
EXECUTE format('ALTER TABLE ${a}.%1$I ADD PRIMARY KEY (name, id)', tablename);
|
|
867
|
+
EXECUTE format('ALTER TABLE ${a}.%1$I ADD CONSTRAINT q_fkey FOREIGN KEY (name) REFERENCES ${a}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED', tablename);
|
|
868
|
+
EXECUTE format('ALTER TABLE ${a}.%1$I ADD CONSTRAINT dlq_fkey FOREIGN KEY (dead_letter) REFERENCES ${a}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED', tablename);
|
|
869
|
+
|
|
870
|
+
EXECUTE format('CREATE INDEX %1$s_i5 ON ${a}.%1$I (name, start_after) INCLUDE (priority, created_on, id) WHERE state < ''active''', tablename);
|
|
871
|
+
EXECUTE format('CREATE UNIQUE INDEX %1$s_i4 ON ${a}.%1$I (name, singleton_on, COALESCE(singleton_key, '''')) WHERE state <> ''cancelled'' AND singleton_on IS NOT NULL', tablename);
|
|
872
|
+
|
|
873
|
+
IF options->>'policy' = 'short' THEN
|
|
874
|
+
EXECUTE format('CREATE UNIQUE INDEX %1$s_i1 ON ${a}.%1$I (name, COALESCE(singleton_key, '''')) WHERE state = ''created'' AND policy = ''short''', tablename);
|
|
875
|
+
ELSIF options->>'policy' = 'singleton' THEN
|
|
876
|
+
EXECUTE format('CREATE UNIQUE INDEX %1$s_i2 ON ${a}.%1$I (name, COALESCE(singleton_key, '''')) WHERE state = ''active'' AND policy = ''singleton''', tablename);
|
|
877
|
+
ELSIF options->>'policy' = 'stately' THEN
|
|
878
|
+
EXECUTE format('CREATE UNIQUE INDEX %1$s_i3 ON ${a}.%1$I (name, state, COALESCE(singleton_key, '''')) WHERE state <= ''active'' AND policy = ''stately''', tablename);
|
|
879
|
+
ELSIF options->>'policy' = 'exclusive' THEN
|
|
880
|
+
EXECUTE format('CREATE UNIQUE INDEX %1$s_i6 ON ${a}.%1$I (name, COALESCE(singleton_key, '''')) WHERE state <= ''active'' AND policy = ''exclusive''', tablename);
|
|
881
|
+
END IF;
|
|
882
|
+
|
|
883
|
+
EXECUTE format('ALTER TABLE ${a}.%I ADD CONSTRAINT cjc CHECK (name=%L)', tablename, queue_name);
|
|
884
|
+
EXECUTE format('ALTER TABLE ${a}.job ATTACH PARTITION ${a}.%I FOR VALUES IN (%L)', tablename, queue_name);
|
|
885
|
+
END;
|
|
886
|
+
$$
|
|
887
|
+
LANGUAGE plpgsql;
|
|
888
|
+
`,`CREATE UNIQUE INDEX job_i6 ON ${a}.job_common (name, COALESCE(singleton_key, '')) WHERE state <= 'active' AND policy = 'exclusive'`],uninstall:[`DROP INDEX ${a}.job_i6`]},{release:"12.6.0",version:27,previous:26,install:[`ALTER TABLE ${a}.version ADD COLUMN IF NOT EXISTS bam_on timestamp with time zone`,`
|
|
889
|
+
CREATE TABLE IF NOT EXISTS ${a}.bam (
|
|
890
|
+
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
891
|
+
name text NOT NULL,
|
|
892
|
+
version int NOT NULL,
|
|
893
|
+
status text NOT NULL DEFAULT 'pending',
|
|
894
|
+
queue text,
|
|
895
|
+
table_name text NOT NULL,
|
|
896
|
+
command text NOT NULL,
|
|
897
|
+
error text,
|
|
898
|
+
created_on timestamp with time zone NOT NULL DEFAULT now(),
|
|
899
|
+
started_on timestamp with time zone,
|
|
900
|
+
completed_on timestamp with time zone
|
|
901
|
+
)
|
|
902
|
+
`,`CREATE FUNCTION ${a}.job_table_format(command text, table_name text)
|
|
903
|
+
RETURNS text AS
|
|
904
|
+
$$
|
|
905
|
+
SELECT format(
|
|
906
|
+
replace(
|
|
907
|
+
replace(command, '.job', '.%1$I'),
|
|
908
|
+
'job_i', '%1$s_i'
|
|
909
|
+
),
|
|
910
|
+
table_name
|
|
911
|
+
);
|
|
912
|
+
$$
|
|
913
|
+
LANGUAGE sql IMMUTABLE;
|
|
914
|
+
`,`
|
|
915
|
+
CREATE OR REPLACE FUNCTION ${a}.job_table_run_async(command_name text, version int, command text, tbl_name text DEFAULT NULL, queue_name text DEFAULT NULL)
|
|
916
|
+
RETURNS VOID AS
|
|
917
|
+
$$
|
|
918
|
+
BEGIN
|
|
919
|
+
IF queue_name IS NOT NULL THEN
|
|
920
|
+
SELECT table_name INTO tbl_name FROM ${a}.queue WHERE name = queue_name;
|
|
921
|
+
END IF;
|
|
922
|
+
|
|
923
|
+
IF tbl_name IS NOT NULL THEN
|
|
924
|
+
INSERT INTO ${a}.bam (name, version, status, queue, table_name, command)
|
|
925
|
+
VALUES (
|
|
926
|
+
command_name,
|
|
927
|
+
version,
|
|
928
|
+
'pending',
|
|
929
|
+
queue_name,
|
|
930
|
+
tbl_name,
|
|
931
|
+
${a}.job_table_format(command, tbl_name)
|
|
932
|
+
);
|
|
933
|
+
RETURN;
|
|
934
|
+
END IF;
|
|
935
|
+
|
|
936
|
+
INSERT INTO ${a}.bam (name, version, status, queue, table_name, command)
|
|
937
|
+
SELECT
|
|
938
|
+
command_name,
|
|
939
|
+
version,
|
|
940
|
+
'pending',
|
|
941
|
+
NULL,
|
|
942
|
+
'job_common',
|
|
943
|
+
${a}.job_table_format(command, 'job_common')
|
|
944
|
+
UNION ALL
|
|
945
|
+
SELECT
|
|
946
|
+
command_name,
|
|
947
|
+
version,
|
|
948
|
+
'pending',
|
|
949
|
+
queue.name,
|
|
950
|
+
queue.table_name,
|
|
951
|
+
${a}.job_table_format(command, queue.table_name)
|
|
952
|
+
FROM ${a}.queue
|
|
953
|
+
WHERE partition = true;
|
|
954
|
+
END;
|
|
955
|
+
$$
|
|
956
|
+
LANGUAGE plpgsql;
|
|
957
|
+
`,`
|
|
958
|
+
CREATE OR REPLACE FUNCTION ${a}.job_table_run(command text, tbl_name text DEFAULT NULL, queue_name text DEFAULT NULL)
|
|
959
|
+
RETURNS VOID AS
|
|
960
|
+
$$
|
|
961
|
+
DECLARE
|
|
962
|
+
tbl RECORD;
|
|
963
|
+
BEGIN
|
|
964
|
+
IF queue_name IS NOT NULL THEN
|
|
965
|
+
SELECT table_name INTO tbl_name FROM ${a}.queue WHERE name = queue_name;
|
|
966
|
+
END IF;
|
|
967
|
+
|
|
968
|
+
IF tbl_name IS NOT NULL THEN
|
|
969
|
+
EXECUTE ${a}.job_table_format(command, tbl_name);
|
|
970
|
+
RETURN;
|
|
971
|
+
END IF;
|
|
972
|
+
|
|
973
|
+
EXECUTE ${a}.job_table_format(command, 'job_common');
|
|
974
|
+
|
|
975
|
+
FOR tbl IN SELECT table_name FROM ${a}.queue WHERE partition = true
|
|
976
|
+
LOOP
|
|
977
|
+
EXECUTE ${a}.job_table_format(command, tbl.table_name);
|
|
978
|
+
END LOOP;
|
|
979
|
+
END;
|
|
980
|
+
$$
|
|
981
|
+
LANGUAGE plpgsql;
|
|
982
|
+
`,`ALTER TABLE ${a}.job ADD COLUMN IF NOT EXISTS group_id text`,`ALTER TABLE ${a}.job ADD COLUMN IF NOT EXISTS group_tier text`,`
|
|
983
|
+
CREATE OR REPLACE FUNCTION ${a}.create_queue(queue_name text, options jsonb)
|
|
984
|
+
RETURNS VOID AS
|
|
985
|
+
$$
|
|
986
|
+
DECLARE
|
|
987
|
+
tablename varchar := CASE WHEN options->>'partition' = 'true'
|
|
988
|
+
THEN 'j' || encode(sha224(queue_name::bytea), 'hex')
|
|
989
|
+
ELSE 'job_common'
|
|
990
|
+
END;
|
|
991
|
+
queue_created_on timestamptz;
|
|
992
|
+
BEGIN
|
|
993
|
+
|
|
994
|
+
WITH q as (
|
|
995
|
+
INSERT INTO ${a}.queue (
|
|
996
|
+
name,
|
|
997
|
+
policy,
|
|
998
|
+
retry_limit,
|
|
999
|
+
retry_delay,
|
|
1000
|
+
retry_backoff,
|
|
1001
|
+
retry_delay_max,
|
|
1002
|
+
expire_seconds,
|
|
1003
|
+
retention_seconds,
|
|
1004
|
+
deletion_seconds,
|
|
1005
|
+
warning_queued,
|
|
1006
|
+
dead_letter,
|
|
1007
|
+
partition,
|
|
1008
|
+
table_name
|
|
1009
|
+
)
|
|
1010
|
+
VALUES (
|
|
1011
|
+
queue_name,
|
|
1012
|
+
options->>'policy',
|
|
1013
|
+
COALESCE((options->>'retryLimit')::int, 2),
|
|
1014
|
+
COALESCE((options->>'retryDelay')::int, 0),
|
|
1015
|
+
COALESCE((options->>'retryBackoff')::bool, false),
|
|
1016
|
+
(options->>'retryDelayMax')::int,
|
|
1017
|
+
COALESCE((options->>'expireInSeconds')::int, 900),
|
|
1018
|
+
COALESCE((options->>'retentionSeconds')::int, 1209600),
|
|
1019
|
+
COALESCE((options->>'deleteAfterSeconds')::int, 604800),
|
|
1020
|
+
COALESCE((options->>'warningQueueSize')::int, 0),
|
|
1021
|
+
options->>'deadLetter',
|
|
1022
|
+
COALESCE((options->>'partition')::bool, false),
|
|
1023
|
+
tablename
|
|
1024
|
+
)
|
|
1025
|
+
ON CONFLICT DO NOTHING
|
|
1026
|
+
RETURNING created_on
|
|
1027
|
+
)
|
|
1028
|
+
SELECT created_on into queue_created_on from q;
|
|
1029
|
+
|
|
1030
|
+
IF queue_created_on IS NULL OR options->>'partition' IS DISTINCT FROM 'true' THEN
|
|
1031
|
+
RETURN;
|
|
1032
|
+
END IF;
|
|
1033
|
+
|
|
1034
|
+
EXECUTE format('CREATE TABLE ${a}.%I (LIKE ${a}.job INCLUDING DEFAULTS)', tablename);
|
|
1035
|
+
|
|
1036
|
+
EXECUTE ${a}.job_table_format($cmd$ALTER TABLE ${a}.job ADD PRIMARY KEY (name, id)$cmd$, tablename);
|
|
1037
|
+
EXECUTE ${a}.job_table_format($cmd$ALTER TABLE ${a}.job ADD CONSTRAINT q_fkey FOREIGN KEY (name) REFERENCES ${a}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED$cmd$, tablename);
|
|
1038
|
+
EXECUTE ${a}.job_table_format($cmd$ALTER TABLE ${a}.job ADD CONSTRAINT dlq_fkey FOREIGN KEY (dead_letter) REFERENCES ${a}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED$cmd$, tablename);
|
|
1039
|
+
|
|
1040
|
+
EXECUTE ${a}.job_table_format($cmd$CREATE INDEX job_i5 ON ${a}.job (name, start_after) INCLUDE (priority, created_on, id) WHERE state < 'active'$cmd$, tablename);
|
|
1041
|
+
EXECUTE ${a}.job_table_format($cmd$CREATE UNIQUE INDEX job_i4 ON ${a}.job (name, singleton_on, COALESCE(singleton_key, '')) WHERE state <> 'cancelled' AND singleton_on IS NOT NULL$cmd$, tablename);
|
|
1042
|
+
EXECUTE ${a}.job_table_format($cmd$CREATE INDEX job_i7 ON ${a}.job (name, group_id) WHERE state = 'active' AND group_id IS NOT NULL$cmd$, tablename);
|
|
1043
|
+
|
|
1044
|
+
IF options->>'policy' = 'short' THEN
|
|
1045
|
+
EXECUTE ${a}.job_table_format($cmd$CREATE UNIQUE INDEX job_i1 ON ${a}.job (name, COALESCE(singleton_key, '')) WHERE state = 'created' AND policy = 'short'$cmd$, tablename);
|
|
1046
|
+
ELSIF options->>'policy' = 'singleton' THEN
|
|
1047
|
+
EXECUTE ${a}.job_table_format($cmd$CREATE UNIQUE INDEX job_i2 ON ${a}.job (name, COALESCE(singleton_key, '')) WHERE state = 'active' AND policy = 'singleton'$cmd$, tablename);
|
|
1048
|
+
ELSIF options->>'policy' = 'stately' THEN
|
|
1049
|
+
EXECUTE ${a}.job_table_format($cmd$CREATE UNIQUE INDEX job_i3 ON ${a}.job (name, state, COALESCE(singleton_key, '')) WHERE state <= 'active' AND policy = 'stately'$cmd$, tablename);
|
|
1050
|
+
ELSIF options->>'policy' = 'exclusive' THEN
|
|
1051
|
+
EXECUTE ${a}.job_table_format($cmd$CREATE UNIQUE INDEX job_i6 ON ${a}.job (name, COALESCE(singleton_key, '')) WHERE state <= 'active' AND policy = 'exclusive'$cmd$, tablename);
|
|
1052
|
+
END IF;
|
|
1053
|
+
|
|
1054
|
+
EXECUTE format('ALTER TABLE ${a}.%I ADD CONSTRAINT cjc CHECK (name=%L)', tablename, queue_name);
|
|
1055
|
+
EXECUTE format('ALTER TABLE ${a}.job ATTACH PARTITION ${a}.%I FOR VALUES IN (%L)', tablename, queue_name);
|
|
1056
|
+
END;
|
|
1057
|
+
$$
|
|
1058
|
+
LANGUAGE plpgsql;
|
|
1059
|
+
`,`ALTER INDEX IF EXISTS ${a}.job_i1 RENAME TO job_common_i1`,`ALTER INDEX IF EXISTS ${a}.job_i2 RENAME TO job_common_i2`,`ALTER INDEX IF EXISTS ${a}.job_i3 RENAME TO job_common_i3`,`ALTER INDEX IF EXISTS ${a}.job_i4 RENAME TO job_common_i4`,`ALTER INDEX IF EXISTS ${a}.job_i5 RENAME TO job_common_i5`,`ALTER INDEX IF EXISTS ${a}.job_i6 RENAME TO job_common_i6`,`ALTER INDEX IF EXISTS ${a}.job_i7 RENAME TO job_common_i7`],async:[`SELECT ${a}.job_table_run_async(
|
|
1060
|
+
'group_concurency_index',
|
|
1061
|
+
$VERSION$,
|
|
1062
|
+
$$
|
|
1063
|
+
CREATE INDEX CONCURRENTLY job_i7 ON ${a}.job (name, group_id) WHERE state = 'active' AND group_id IS NOT NULL
|
|
1064
|
+
$$
|
|
1065
|
+
)`],uninstall:[`ALTER INDEX ${a}.job_common_i6 RENAME TO job_i6`,`ALTER INDEX ${a}.job_common_i5 RENAME TO job_i5`,`ALTER INDEX ${a}.job_common_i4 RENAME TO job_i4`,`ALTER INDEX ${a}.job_common_i3 RENAME TO job_i3`,`ALTER INDEX ${a}.job_common_i2 RENAME TO job_i2`,`ALTER INDEX ${a}.job_common_i1 RENAME TO job_i1`,`SELECT ${a}.job_table_run('DROP INDEX ${a}.job_i7')`,`
|
|
1066
|
+
CREATE OR REPLACE FUNCTION ${a}.create_queue(queue_name text, options jsonb)
|
|
1067
|
+
RETURNS VOID AS
|
|
1068
|
+
$$
|
|
1069
|
+
DECLARE
|
|
1070
|
+
tablename varchar := CASE WHEN options->>'partition' = 'true'
|
|
1071
|
+
THEN 'j' || encode(sha224(queue_name::bytea), 'hex')
|
|
1072
|
+
ELSE 'job_common'
|
|
1073
|
+
END;
|
|
1074
|
+
queue_created_on timestamptz;
|
|
1075
|
+
BEGIN
|
|
1076
|
+
|
|
1077
|
+
WITH q as (
|
|
1078
|
+
INSERT INTO ${a}.queue (
|
|
1079
|
+
name,
|
|
1080
|
+
policy,
|
|
1081
|
+
retry_limit,
|
|
1082
|
+
retry_delay,
|
|
1083
|
+
retry_backoff,
|
|
1084
|
+
retry_delay_max,
|
|
1085
|
+
expire_seconds,
|
|
1086
|
+
retention_seconds,
|
|
1087
|
+
deletion_seconds,
|
|
1088
|
+
warning_queued,
|
|
1089
|
+
dead_letter,
|
|
1090
|
+
partition,
|
|
1091
|
+
table_name
|
|
1092
|
+
)
|
|
1093
|
+
VALUES (
|
|
1094
|
+
queue_name,
|
|
1095
|
+
options->>'policy',
|
|
1096
|
+
COALESCE((options->>'retryLimit')::int, 2),
|
|
1097
|
+
COALESCE((options->>'retryDelay')::int, 0),
|
|
1098
|
+
COALESCE((options->>'retryBackoff')::bool, false),
|
|
1099
|
+
(options->>'retryDelayMax')::int,
|
|
1100
|
+
COALESCE((options->>'expireInSeconds')::int, 900),
|
|
1101
|
+
COALESCE((options->>'retentionSeconds')::int, 1209600),
|
|
1102
|
+
COALESCE((options->>'deleteAfterSeconds')::int, 604800),
|
|
1103
|
+
COALESCE((options->>'warningQueueSize')::int, 0),
|
|
1104
|
+
options->>'deadLetter',
|
|
1105
|
+
COALESCE((options->>'partition')::bool, false),
|
|
1106
|
+
tablename
|
|
1107
|
+
)
|
|
1108
|
+
ON CONFLICT DO NOTHING
|
|
1109
|
+
RETURNING created_on
|
|
1110
|
+
)
|
|
1111
|
+
SELECT created_on into queue_created_on from q;
|
|
1112
|
+
|
|
1113
|
+
IF queue_created_on IS NULL OR options->>'partition' IS DISTINCT FROM 'true' THEN
|
|
1114
|
+
RETURN;
|
|
1115
|
+
END IF;
|
|
1116
|
+
|
|
1117
|
+
EXECUTE format('CREATE TABLE ${a}.%I (LIKE ${a}.job INCLUDING DEFAULTS)', tablename);
|
|
1118
|
+
|
|
1119
|
+
EXECUTE format('ALTER TABLE ${a}.%1$I ADD PRIMARY KEY (name, id)', tablename);
|
|
1120
|
+
EXECUTE format('ALTER TABLE ${a}.%1$I ADD CONSTRAINT q_fkey FOREIGN KEY (name) REFERENCES ${a}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED', tablename);
|
|
1121
|
+
EXECUTE format('ALTER TABLE ${a}.%1$I ADD CONSTRAINT dlq_fkey FOREIGN KEY (dead_letter) REFERENCES ${a}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED', tablename);
|
|
1122
|
+
|
|
1123
|
+
EXECUTE format('CREATE INDEX %1$s_i5 ON ${a}.%1$I (name, start_after) INCLUDE (priority, created_on, id) WHERE state < ''active''', tablename);
|
|
1124
|
+
EXECUTE format('CREATE UNIQUE INDEX %1$s_i4 ON ${a}.%1$I (name, singleton_on, COALESCE(singleton_key, '''')) WHERE state <> ''cancelled'' AND singleton_on IS NOT NULL', tablename);
|
|
1125
|
+
|
|
1126
|
+
IF options->>'policy' = 'short' THEN
|
|
1127
|
+
EXECUTE format('CREATE UNIQUE INDEX %1$s_i1 ON ${a}.%1$I (name, COALESCE(singleton_key, '''')) WHERE state = ''created'' AND policy = ''short''', tablename);
|
|
1128
|
+
ELSIF options->>'policy' = 'singleton' THEN
|
|
1129
|
+
EXECUTE format('CREATE UNIQUE INDEX %1$s_i2 ON ${a}.%1$I (name, COALESCE(singleton_key, '''')) WHERE state = ''active'' AND policy = ''singleton''', tablename);
|
|
1130
|
+
ELSIF options->>'policy' = 'stately' THEN
|
|
1131
|
+
EXECUTE format('CREATE UNIQUE INDEX %1$s_i3 ON ${a}.%1$I (name, state, COALESCE(singleton_key, '''')) WHERE state <= ''active'' AND policy = ''stately''', tablename);
|
|
1132
|
+
ELSIF options->>'policy' = 'exclusive' THEN
|
|
1133
|
+
EXECUTE format('CREATE UNIQUE INDEX %1$s_i6 ON ${a}.%1$I (name, COALESCE(singleton_key, '''')) WHERE state <= ''active'' AND policy = ''exclusive''', tablename);
|
|
1134
|
+
END IF;
|
|
1135
|
+
|
|
1136
|
+
EXECUTE format('ALTER TABLE ${a}.%I ADD CONSTRAINT cjc CHECK (name=%L)', tablename, queue_name);
|
|
1137
|
+
EXECUTE format('ALTER TABLE ${a}.job ATTACH PARTITION ${a}.%I FOR VALUES IN (%L)', tablename, queue_name);
|
|
1138
|
+
END;
|
|
1139
|
+
$$
|
|
1140
|
+
LANGUAGE plpgsql;
|
|
1141
|
+
`,`DROP FUNCTION ${a}.job_table_run(text, text, text)`,`DROP FUNCTION ${a}.job_table_run_async(text, int, text, text, text)`,`DROP FUNCTION ${a}.job_table_format(text, text)`,`DROP TABLE ${a}.bam`,`ALTER TABLE ${a}.version DROP COLUMN bam_on`,`ALTER TABLE ${a}.job DROP COLUMN group_tier`,`ALTER TABLE ${a}.job DROP COLUMN group_id`]}]}class j{static constructionPlans(a=e.my,b={createSchema:!0}){return e.vt(a,27,b)}static migrationPlans(a=e.my,b=26){return h(a,b)}static rollbackPlans(a=e.my,b=27){return g(a,b)}config;db;migrations;constructor(a,b){this.config=b,this.db=a,this.migrations=this.config.migrations||i(this.config.schema)}async schemaVersion(){let a=await this.db.executeSql(e.HF(this.config.schema));return a.rows.length?parseInt(a.rows[0].version):null}async isInstalled(){return!!(await this.db.executeSql(e.DH(this.config.schema))).rows[0].name}async start(){if(await this.isInstalled()){let a=await this.schemaVersion();null!==a&&27>a&&await this.migrate(a)}else await this.create()}async check(){if(!await this.isInstalled())throw Error("pg-boss is not installed");if(27!==await this.schemaVersion())throw Error("pg-boss database requires migrations")}async create(){try{let a=e.vt(this.config.schema,27,this.config);await this.db.executeSql(a)}catch(a){d(a.message.includes(e.Vd),a)}}async migrate(a){try{let b=h(this.config.schema,a,this.migrations);await this.db.executeSql(b)}catch(a){d(a.message.includes(e.mR),a)}}async next(a){let b=function(a,b,c){let e=(c=c||i(a)).find(a=>a.previous===b);return d(e,`Version ${b} not found.`),f(a,e.install,e.version)}(this.config.schema,a,this.migrations);await this.db.executeSql(b)}async rollback(a){let b=g(this.config.schema,a,this.migrations);await this.db.executeSql(b)}}let k=j},25390:(a,b,c)=>{c.d(b,{A:()=>h});var d=c(78474),e=c(17974);let f={error:"error",bam:"bam"};class g extends d{#B;#C;#D;#E;#F;events=f;constructor(a,b){super(),this.#E=a,this.#F=b,this.#B=!0,this.#C=!1}async start(){this.#B&&(this.#B=!1,setImmediate(()=>this.#G()),this.#D=setInterval(()=>this.#G(),1e3*this.#F.bamIntervalSeconds))}async stop(){!this.#B&&(this.#B=!0,this.#D&&(clearInterval(this.#D),this.#D=void 0))}async #G(){if(!this.#B&&!this.#C&&this.#F.migrate){this.#C=!0;try{if(this.#F.__test__throw_bam)throw Error(this.#F.__test__throw_bam);let a=e.dZ(this.#F.schema,this.#F.bamIntervalSeconds),{rows:b}=await this.#E.executeSql(a);1===b.length&&await this.#H()}catch(a){this.emit(f.error,a)}finally{this.#C=!1}}}async #H(){if(this.#B)return;let a=await this.#I();if(a&&!this.#B){this.emit(f.bam,{id:a.id,name:a.name,status:"in_progress",queue:a.queue,table:a.table});try{if(await this.#E.executeSql(a.command),this.#B)return;await this.#J(a.id),this.emit(f.bam,{id:a.id,name:a.name,status:"completed",queue:a.queue,table:a.table})}catch(b){if(this.#B)return;await this.#K(a.id,b),this.emit(f.error,b),this.emit(f.bam,{id:a.id,name:a.name,status:"failed",queue:a.queue,table:a.table,error:String(b)})}}}async #I(){let a=e.t3(this.#F.schema),{rows:b}=await this.#E.executeSql(a);return b[0]||null}async #J(a){let b=e.yJ(this.#F.schema,a);await this.#E.executeSql(b)}async #K(a,b){let c=e.Qz(this.#F.schema,a,String(b));await this.#E.executeSql(c)}}let h=g},45625:function(a,b,c){var d=this&&this.__createBinding||(Object.create?function(a,b,c,d){void 0===d&&(d=c);var e=Object.getOwnPropertyDescriptor(b,c);(!e||("get"in e?!b.__esModule:e.writable||e.configurable))&&(e={enumerable:!0,get:function(){return b[c]}}),Object.defineProperty(a,d,e)}:function(a,b,c,d){void 0===d&&(d=c),a[d]=b[c]}),e=this&&this.__exportStar||function(a,b){for(var c in a)"default"===c||Object.prototype.hasOwnProperty.call(b,c)||d(b,a,c)};Object.defineProperty(b,"__esModule",{value:!0}),e(c(88646),b),e(c(58758),b),e(c(78184),b),e(c(69697),b),e(c(85414),b),e(c(59703),b),e(c(88451),b),e(c(92351),b)},49676:(a,b,c)=>{c.d(b,{KY:()=>i,PS:()=>h,hR:()=>k,hY:()=>n,sL:()=>l,sM:()=>o,zj:()=>m});var d=c(34589),e=c(17974);let f={MAX_EXPIRATION_HOURS:24,MIN_POLLING_INTERVAL_MS:500};function g(a,b="Name"){d(/^[\w.-]+$/.test(a),`${b} can only contain alphanumeric characters, underscores, hyphens, or periods`)}function h(a={}){d(!("deadLetter"in a)||null===a.deadLetter||"string"==typeof a.deadLetter,"deadLetter must be a string"),a.deadLetter&&g(a.deadLetter,"deadLetter"),r(a),q(a),p(a),s(a)}function i(a){var b;let c,e,f;if("string"==typeof a[0])c=a[0],d("function"!=typeof(e=a[1]),"send() cannot accept a function as the payload. Did you intend to use work()?"),f=a[2];else if("object"==typeof a[0]){d(1===a.length,"send object API only accepts 1 argument");let b=a[0];d(b,"boss requires all jobs to have a name"),c=b.name,e=b.data,f=b.options}return f=f||{},d(c,"boss requires all jobs to have a queue name"),d("object"==typeof f,"options should be an object"),d(!("priority"in(f={...f}))||Number.isInteger(f.priority),"priority must be an integer"),f.priority=f.priority||0,f.startAfter=f.startAfter instanceof Date&&"function"==typeof f.startAfter.toISOString?f.startAfter.toISOString():+f.startAfter>0?""+f.startAfter:"string"==typeof f.startAfter?f.startAfter:void 0,r(f),q(f),p(f),s(f),"group"in(b=f)&&void 0!==b.group&&null!==b.group&&(d("object"==typeof b.group,"group must be an object"),d("string"==typeof b.group.id&&b.group.id.length>0,"group.id must be a non-empty string"),d(!("tier"in b.group)||"string"==typeof b.group.tier&&b.group.tier.length>0,"group.tier must be a non-empty string if provided")),{name:c,data:e,options:f}}function j(a,b){if("number"==typeof a)return void d(Number.isInteger(a)&&a>=1,`${b} must be an integer >= 1`);if(d("object"==typeof a,`${b} must be a number or an object with { default, tiers? }`),d(Number.isInteger(a.default)&&a.default>=1,`${b}.default must be an integer >= 1`),"tiers"in a&&a.tiers)for(let[c,e]of(d("object"==typeof a.tiers,`${b}.tiers must be an object`),Object.entries(a.tiers)))d("string"==typeof c&&c.length>0,`${b} tier keys must be non-empty strings`),d(Number.isInteger(e)&&e>=1,`${b}.tiers["${c}"] must be an integer >= 1`)}function k(a,b){let c,e;d(a,"queue name is required"),1===b.length?(e=b[0],c={}):b.length>1&&(c=b[0]||{},e=b[1]),d("function"==typeof e,"expected callback to be a function"),d("object"==typeof c,"expected config to be an object"),d(!("pollingIntervalSeconds"in(g=c={...c}))||g.pollingIntervalSeconds>=f.MIN_POLLING_INTERVAL_MS/1e3,`configuration assert: pollingIntervalSeconds must be at least every ${f.MIN_POLLING_INTERVAL_MS}ms`),g.pollingInterval="pollingIntervalSeconds"in g?1e3*g.pollingIntervalSeconds:2e3,d(!("batchSize"in c)||Number.isInteger(c.batchSize)&&c.batchSize>=1,"batchSize must be an integer > 0"),d(!("includeMetadata"in c)||"boolean"==typeof c.includeMetadata,"includeMetadata must be a boolean"),d(!("priority"in c)||"boolean"==typeof c.priority,"priority must be a boolean"),d(!("localConcurrency"in c)||Number.isInteger(c.localConcurrency)&&c.localConcurrency>=1,"localConcurrency must be an integer >= 1");var g,h=c;let i=null!=h.groupConcurrency,k=null!=h.localGroupConcurrency;return d(!(i&&k),"cannot specify both groupConcurrency and localGroupConcurrency - choose one"),i&&j(h.groupConcurrency,"groupConcurrency"),k&&(j(h.localGroupConcurrency,"localGroupConcurrency"),function(a,b){let c=b??1;if("number"==typeof a)d(a<=c,`localGroupConcurrency (${a}) cannot exceed localConcurrency (${c})`);else if("object"==typeof a&&(d(a.default<=c,`localGroupConcurrency.default (${a.default}) cannot exceed localConcurrency (${c})`),a.tiers))for(let[b,e]of Object.entries(a.tiers))d(e<=c,`localGroupConcurrency.tiers["${b}"] (${e}) cannot exceed localConcurrency (${c})`)}(h.localGroupConcurrency,h.localConcurrency)),{options:c,callback:e}}function l(a,b){d(a,"missing queue name"),d(!("batchSize"in b)||Number.isInteger(b.batchSize)&&b.batchSize>=1,"batchSize must be an integer > 0"),d(!("includeMetadata"in b)||"boolean"==typeof b.includeMetadata,"includeMetadata must be a boolean"),d(!("priority"in b)||"boolean"==typeof b.priority,"priority must be a boolean"),d(!("ignoreStartAfter"in b)||"boolean"==typeof b.ignoreStartAfter,"ignoreStartAfter must be a boolean")}function m(a){var b,c,g,h,i;d(a&&("object"==typeof a||"string"==typeof a),"configuration assert: string or config object is required to connect to postgres");let j="string"==typeof a?{connectionString:a}:{...a};return j.schedule=!("schedule"in j)||j.schedule,j.supervise=!("supervise"in j)||j.supervise,j.migrate=!("migrate"in j)||j.migrate,j.createSchema=!("createSchema"in j)||j.createSchema,(b=j).schema&&(d("string"==typeof(c=b.schema),"Name must be a string"),d(c.length<=50,"Name cannot exceed 50 characters"),d(!/\W/.test(c),"Name can only contain alphanumeric characters or underscores"),d(!/^\d/.test(c),"Name cannot start with a number")),b.schema=b.schema||e.my,d(!("superviseIntervalSeconds"in(g=j))||g.superviseIntervalSeconds>=1,"configuration assert: superviseIntervalSeconds must be at least every second"),g.superviseIntervalSeconds=g.superviseIntervalSeconds||60,d(g.superviseIntervalSeconds/60/60<=f.MAX_EXPIRATION_HOURS,`configuration assert: superviseIntervalSeconds cannot exceed ${f.MAX_EXPIRATION_HOURS} hours`),d(!("maintenanceIntervalSeconds"in g)||g.maintenanceIntervalSeconds>=1,"configuration assert: maintenanceIntervalSeconds must be at least every second"),g.maintenanceIntervalSeconds=g.maintenanceIntervalSeconds||60*f.MAX_EXPIRATION_HOURS*60,d(g.maintenanceIntervalSeconds/60/60<=f.MAX_EXPIRATION_HOURS,`configuration assert: maintenanceIntervalSeconds cannot exceed ${f.MAX_EXPIRATION_HOURS} hours`),d(!("monitorIntervalSeconds"in g)||g.monitorIntervalSeconds>=1,"configuration assert: monitorIntervalSeconds must be at least every second"),g.monitorIntervalSeconds=g.monitorIntervalSeconds||60,d(g.monitorIntervalSeconds/60/60<=f.MAX_EXPIRATION_HOURS,`configuration assert: monitorIntervalSeconds cannot exceed ${f.MAX_EXPIRATION_HOURS} hours`),d(!("queueCacheIntervalSeconds"in g)||g.queueCacheIntervalSeconds>=1,"configuration assert: queueCacheIntervalSeconds must be at least every second"),g.queueCacheIntervalSeconds=g.queueCacheIntervalSeconds||60,d(g.queueCacheIntervalSeconds/60/60<=f.MAX_EXPIRATION_HOURS,`configuration assert: queueCacheIntervalSeconds cannot exceed ${f.MAX_EXPIRATION_HOURS} hours`),d(!("clockMonitorIntervalSeconds"in(h=j))||h.clockMonitorIntervalSeconds>=1&&h.clockMonitorIntervalSeconds<=600,"configuration assert: clockMonitorIntervalSeconds must be between 1 second and 10 minutes"),h.clockMonitorIntervalSeconds=h.clockMonitorIntervalSeconds||600,d(!("cronMonitorIntervalSeconds"in h)||h.cronMonitorIntervalSeconds>=1&&h.cronMonitorIntervalSeconds<=45,"configuration assert: cronMonitorIntervalSeconds must be between 1 and 45 seconds"),h.cronMonitorIntervalSeconds=h.cronMonitorIntervalSeconds||30,d(!("cronWorkerIntervalSeconds"in h)||h.cronWorkerIntervalSeconds>=1&&h.cronWorkerIntervalSeconds<=45,"configuration assert: cronWorkerIntervalSeconds must be between 1 and 45 seconds"),h.cronWorkerIntervalSeconds=h.cronWorkerIntervalSeconds||5,function(a){let b=a.__test__bypass_bam_interval_check?1:10;d(!("bamIntervalSeconds"in a)||a.bamIntervalSeconds>=b,`configuration assert: bamIntervalSeconds must be at least ${b} seconds`),a.bamIntervalSeconds=a.bamIntervalSeconds||60}(j),d(!("warningQueueSize"in(i=j))||i.warningQueueSize>=1,"configuration assert: warningQueueSize must be at least 1"),d(!("warningSlowQuerySeconds"in i)||i.warningSlowQuerySeconds>=1,"configuration assert: warningSlowQuerySeconds must be at least 1"),j}function n(a){d(a,"Name is required"),d("string"==typeof a,"Name must be a string"),g(a)}function o(a){a&&(d("string"==typeof a,"Key must be a string"),g(a,"Key"))}function p(a){d(!("retentionSeconds"in a)||a.retentionSeconds>=1,"configuration assert: retentionSeconds must be at least every second")}function q(a){d(!("expireInSeconds"in a)||a.expireInSeconds>=1,"configuration assert: expireInSeconds must be at least every second"),d(!a.expireInSeconds||a.expireInSeconds/60/60<f.MAX_EXPIRATION_HOURS,`configuration assert: expiration cannot exceed ${f.MAX_EXPIRATION_HOURS} hours`)}function r(a){d(!("retryDelay"in a)||Number.isInteger(a.retryDelay)&&a.retryDelay>=0,"retryDelay must be an integer >= 0"),d(!("retryLimit"in a)||Number.isInteger(a.retryLimit)&&a.retryLimit>=0,"retryLimit must be an integer >= 0"),d(!("retryBackoff"in a)||!0===a.retryBackoff||!1===a.retryBackoff,"retryBackoff must be either true or false"),d(!("retryDelayMax"in a)||null===a.retryDelayMax||!0===a.retryBackoff,"retryDelayMax can only be set if retryBackoff is true"),d(!("retryDelayMax"in a)||null===a.retryDelayMax||Number.isInteger(a.retryDelayMax)&&a.retryDelayMax>=0,"retryDelayMax must be an integer >= 0")}function s(a){d(!("deleteAfterSeconds"in a)||a.deleteAfterSeconds>=0,"configuration assert: deleteAfterSeconds must be at least 0 (0 disables deletion)")}},50027:(a,b,c)=>{c.d(b,{RD:()=>e,cb:()=>f,jz:()=>g});var d=c(58500);function e(a){return Array.isArray(a)?{rows:a.flatMap(a=>a.rows)}:a}function f(a,b,c){let e=c||new AbortController,f=new Promise((c,f)=>{(0,d.setTimeout)(a,null,{signal:e.signal}).then(()=>{b?f(Error(b)):c()}).catch(c)});return f.abort=()=>{e.signal.aborted||e.abort()},f}async function g(a,b,c,d){let e,g=f(1e3*Math.max(1,b),c,d);try{e=await Promise.race([a,g])}finally{g.abort()}return e}},58758:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),b.CronDayOfMonth=void 0;let d=c(69697),e=Object.freeze(["L"]);class f extends d.CronField{static get min(){return 1}static get max(){return 31}static get chars(){return e}static get validChars(){return/^[?,*\dLH/-]+$|^.*H\(\d+-\d+\)\/\d+.*$|^.*H\(\d+-\d+\).*$|^.*H\/\d+.*$/}constructor(a,b){super(a,b),this.validate()}get values(){return super.values}}b.CronDayOfMonth=f},58978:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{PgBoss:()=>t,events:()=>s,getConstructionPlans:()=>p,getMigrationPlans:()=>q,getRollbackPlans:()=>r,policies:()=>m.xv,states:()=>m.RH});var e=c(78474),f=c(49676),g=c(18868),h=c(8765),i=c(87819),j=c(69769),k=c(25390),l=c(50027),m=c(17974),n=c(66808),o=a([n]);n=(o.then?(await o)():o)[0];let s=Object.freeze({error:"error",warning:"warning",wip:"wip",stopped:"stopped",bam:"bam"});function p(a){return g.A.constructionPlans(a)}function q(a,b){return g.A.migrationPlans(a,b)}function r(a,b){return g.A.rollbackPlans(a,b)}class t extends e{#L;#B;#M;#N;#F;#E;#O;#P;#Q;#R;#S;constructor(a){super(),this.#L=null,this.#B=!0;let b=f.zj(a);this.#F=b;let c=this.getDb();this.#E=c,"_pgbdb"in this.#E&&this.#E._pgbdb&&this.#T(this.#E);let d=new g.A(c,b),e=new h.A(c,b),l=new j.A(c,e,b),m=new i.A(c,e,b);e.timekeeper=m;let n=new k.A(c,b);this.#T(e),this.#T(l),this.#T(m),this.#T(n),this.#O=l,this.#P=d,this.#Q=e,this.#R=m,this.#S=n}#T(a){for(let b of Object.values(a?.events))a.on(b,a=>this.emit(b,a))}async start(){return this.#M||this.#N||(this.#M=!0,this.#E._pgbdb&&!this.#E.opened&&await this.#E.open(),this.#F.migrate?await this.#P.start():await this.#P.check(),await this.#Q.start(),this.#F.supervise&&await this.#O.start(),this.#F.schedule&&await this.#R.start(),this.#F.migrate&&await this.#S.start(),this.#M=!1,this.#N=!0,this.#B=!1),this}async stop(a={}){if(this.#L||this.#B)return;let{close:b=!0,graceful:c=!0,timeout:d=3e4}=a;d=Math.max(d,1e3),this.#L=Date.now(),await this.#Q.stop(),await this.#R.stop(),await this.#O.stop(),await this.#S.stop();let e=async()=>{await this.#Q.failWip(),this.#E._pgbdb&&this.#E.opened&&b&&(await this.#E.close(),await (0,l.cb)(10)),this.#B=!0,this.#L=null,this.#N=!1,this.emit(s.stopped)};if(!c)return await e();for(;Date.now()-this.#L<d&&this.#Q.hasPendingCleanups();)await (0,l.cb)(500);await e()}async send(...a){return await this.#Q.send(...a)}async sendAfter(a,b,c,d){return this.#Q.sendAfter(a,b,c,d)}sendThrottled(a,b,c,d,e){return this.#Q.sendThrottled(a,b,c,d,e)}sendDebounced(a,b,c,d,e){return this.#Q.sendDebounced(a,b,c,d,e)}insert(a,b,c){return this.#Q.insert(a,b,c)}fetch(a,b={}){return this.#Q.fetch(a,b)}work(...a){return this.#Q.work(...a)}offWork(a,b){return this.#Q.offWork(a,b)}notifyWorker(a){return this.#Q.notifyWorker(a)}subscribe(a,b){return this.#Q.subscribe(a,b)}unsubscribe(a,b){return this.#Q.unsubscribe(a,b)}publish(a,b,c){return this.#Q.publish(a,b,c)}cancel(a,b,c){return this.#Q.cancel(a,b,c)}resume(a,b,c){return this.#Q.resume(a,b,c)}retry(a,b,c){return this.#Q.retry(a,b,c)}deleteJob(a,b,c){return this.#Q.deleteJob(a,b,c)}deleteQueuedJobs(a){return this.#Q.deleteQueuedJobs(a)}deleteStoredJobs(a){return this.#Q.deleteStoredJobs(a)}deleteAllJobs(a){return this.#Q.deleteAllJobs(a)}complete(a,b,c,d){return this.#Q.complete(a,b,c,d)}fail(a,b,c,d){return this.#Q.fail(a,b,c,d)}getJobById(a,b,c){return this.#Q.getJobById(a,b,c)}findJobs(a,b){return this.#Q.findJobs(a,b)}createQueue(a,b){return this.#Q.createQueue(a,b)}updateQueue(a,b){return this.#Q.updateQueue(a,b)}deleteQueue(a){return this.#Q.deleteQueue(a)}getQueues(a){return this.#Q.getQueues()}getQueue(a){return this.#Q.getQueue(a)}getQueueStats(a){return this.#Q.getQueueStats(a)}supervise(a){return this.#O.supervise(a)}getSpy(a){return this.#Q.getSpy(a)}clearSpies(){this.#Q.clearSpies()}isInstalled(){return this.#P.isInstalled()}schemaVersion(){return this.#P.schemaVersion()}schedule(a,b,c,d){return this.#R.schedule(a,b,c,d)}unschedule(a,b){return this.#R.unschedule(a,b)}getSchedules(a,b){return this.#R.getSchedules(a,b)}async getBamStatus(){let a=m.xr(this.#F.schema),{rows:b}=await this.#E.executeSql(a);return b}async getBamEntries(){let a=m.z(this.#F.schema),{rows:b}=await this.#E.executeSql(a);return b}getDb(){return this.#E?this.#E:this.#F.db?this.#F.db:new n.A(this.#F)}}d()}catch(a){d(a)}})},59703:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),b.CronMinute=void 0;let d=c(69697),e=Object.freeze([]);class f extends d.CronField{static get min(){return 0}static get max(){return 59}static get chars(){return e}constructor(a,b){super(a,b),this.validate()}get values(){return super.values}}b.CronMinute=f},63944:function(a,b,c){var d,e=this&&this.__createBinding||(Object.create?function(a,b,c,d){void 0===d&&(d=c);var e=Object.getOwnPropertyDescriptor(b,c);(!e||("get"in e?!b.__esModule:e.writable||e.configurable))&&(e={enumerable:!0,get:function(){return b[c]}}),Object.defineProperty(a,d,e)}:function(a,b,c,d){void 0===d&&(d=c),a[d]=b[c]}),f=this&&this.__setModuleDefault||(Object.create?function(a,b){Object.defineProperty(a,"default",{enumerable:!0,value:b})}:function(a,b){a.default=b}),g=this&&this.__importStar||(d=function(a){return(d=Object.getOwnPropertyNames||function(a){var b=[];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[b.length]=c);return b})(a)},function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c=d(a),g=0;g<c.length;g++)"default"!==c[g]&&e(b,a,c[g]);return f(b,a),b});Object.defineProperty(b,"__esModule",{value:!0}),b.CronFileParser=void 0;let h=c(67424);class i{static async parseFile(a){let{readFile:b}=await Promise.resolve().then(()=>g(c(79748))),d=await b(a,"utf8");return i.#U(d)}static parseFileSync(a){let{readFileSync:b}=c(29021),d=b(a,"utf8");return i.#U(d)}static #U(a){let b=a.split("\n"),c={variables:{},expressions:[],errors:{}};for(let a of b){let b=a.trim();if(0===b.length||b.startsWith("#"))continue;let d=b.match(/^(.*)=(.*)$/);if(d){let[,a,b]=d;c.variables[a]=b.replace(/["']/g,"");continue}try{let a=i.#V(b);c.expressions.push(a.interval)}catch(a){c.errors[b]=a}}return c}static #V(a){let b=a.split(" ");return{interval:h.CronExpressionParser.parse(b.slice(0,5).join(" ")),command:b.slice(5,b.length)}}}b.CronFileParser=i},66808:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{A:()=>j});var e=c(78474),f=c(64939),g=c(34589),h=a([f]);f=(h.then?(await h)():h)[0];class i extends e{pool;config;_pgbdb;opened;constructor(a){super(),a.application_name=a.application_name||"pgboss",a.connectionTimeoutMillis=a.connectionTimeoutMillis||1e4,this.config=a,this._pgbdb=!0,this.opened=!1}events={error:"error"};async open(){this.pool=new f.default.Pool(this.config),this.pool.on("error",a=>this.emit("error",a)),this.opened=!0}async close(){this.pool.ending||(this.opened=!1,await this.pool.end())}async executeSql(a,b){return g(this.opened,"Database not opened. Call open() before executing SQL."),await this.pool.query(a,b)}}let j=i;d()}catch(a){d(a)}})},67424:(a,b,c)=>{var d,e,f,g;Object.defineProperty(b,"__esModule",{value:!0}),b.CronExpressionParser=b.DayOfWeek=b.Months=b.CronUnit=b.PredefinedExpressions=void 0;let h=c(98473),i=c(74485),j=c(89024),k=c(45625);!function(a){a["@yearly"]="0 0 0 1 1 *",a["@annually"]="0 0 0 1 1 *",a["@monthly"]="0 0 0 1 * *",a["@weekly"]="0 0 0 * * 0",a["@daily"]="0 0 0 * * *",a["@hourly"]="0 0 * * * *",a["@minutely"]="0 * * * * *",a["@secondly"]="* * * * * *",a["@weekdays"]="0 0 0 * * 1-5",a["@weekends"]="0 0 0 * * 0,6"}(d||(b.PredefinedExpressions=d={})),function(a){a.Second="Second",a.Minute="Minute",a.Hour="Hour",a.DayOfMonth="DayOfMonth",a.Month="Month",a.DayOfWeek="DayOfWeek"}(e||(b.CronUnit=e={})),function(a){a[a.jan=1]="jan",a[a.feb=2]="feb",a[a.mar=3]="mar",a[a.apr=4]="apr",a[a.may=5]="may",a[a.jun=6]="jun",a[a.jul=7]="jul",a[a.aug=8]="aug",a[a.sep=9]="sep",a[a.oct=10]="oct",a[a.nov=11]="nov",a[a.dec=12]="dec"}(f||(b.Months=f={})),function(a){a[a.sun=0]="sun",a[a.mon=1]="mon",a[a.tue=2]="tue",a[a.wed=3]="wed",a[a.thu=4]="thu",a[a.fri=5]="fri",a[a.sat=6]="sat"}(g||(b.DayOfWeek=g={}));class l{static parse(a,b={}){let{strict:c=!1,hashSeed:f}=b,g=(0,j.seededRandom)(f);a=d[a]||a;let m=l.#W(a,c);if(!("*"===m.dayOfMonth||"*"===m.dayOfWeek||!c))throw Error("Cannot use both dayOfMonth and dayOfWeek together in strict mode!");let n=l.#X(e.Second,m.second,k.CronSecond.constraints,g),o=l.#X(e.Minute,m.minute,k.CronMinute.constraints,g),p=l.#X(e.Hour,m.hour,k.CronHour.constraints,g),q=l.#X(e.Month,m.month,k.CronMonth.constraints,g),r=l.#X(e.DayOfMonth,m.dayOfMonth,k.CronDayOfMonth.constraints,g),{dayOfWeek:s,nthDayOfWeek:t}=l.#Y(m.dayOfWeek),u=l.#X(e.DayOfWeek,s,k.CronDayOfWeek.constraints,g),v=new h.CronFieldCollection({second:new k.CronSecond(n,{rawValue:m.second}),minute:new k.CronMinute(o,{rawValue:m.minute}),hour:new k.CronHour(p,{rawValue:m.hour}),dayOfMonth:new k.CronDayOfMonth(r,{rawValue:m.dayOfMonth}),month:new k.CronMonth(q,{rawValue:m.month}),dayOfWeek:new k.CronDayOfWeek(u,{rawValue:m.dayOfWeek,nthDayOfWeek:t})});return new i.CronExpression(v,{...b,expression:a})}static #W(a,b){if(b&&!a.length)throw Error("Invalid cron expression");let c=(a=a||"0 * * * * *").trim().split(/\s+/);if(b&&c.length<6)throw Error("Invalid cron expression, expected 6 fields");if(c.length>6)throw Error("Invalid cron expression, too many fields");let d=["*","*","*","*","*","0"];c.length<d.length&&c.unshift(...d.slice(c.length));let[e,f,g,h,i,j]=c;return{second:e,minute:f,hour:g,dayOfMonth:h,month:i,dayOfWeek:j}}static #X(a,b,c,d){if((a===e.Month||a===e.DayOfWeek)&&(b=b.replace(/[a-z]{3}/gi,a=>{let b=f[a=a.toLowerCase()]||g[a];if(void 0===b)throw Error(`Validation error, cannot resolve alias "${a}"`);return b.toString()})),!c.validChars.test(b))throw Error(`Invalid characters, got value: ${b}`);return b=this.#Z(b,c),b=this.#$(b,c,d),this.#_(a,b,c)}static #Z(a,b){return a.replace(/[*?]/g,b.min+"-"+b.max)}static #$(a,b,c){let d=c();return a.replace(/H(?:\((\d+)-(\d+)\))?(?:\/(\d+))?/g,(a,c,e,f)=>{if(c&&e&&f){let a=parseInt(c,10),g=parseInt(e,10),h=parseInt(f,10);if(a>g)throw Error(`Invalid range: ${a}-${g}, min > max`);if(h<=0)throw Error(`Invalid step: ${h}, must be positive`);let i=Math.max(a,b.min),j=Math.floor(d*h),k=[];for(let a=Math.floor(i/h)*h+j;a<=g;a+=h)a>=i&&k.push(a);return k.join(",")}if(c&&e){let a=parseInt(c,10),b=parseInt(e,10);if(a>b)throw Error(`Invalid range: ${a}-${b}, min > max`);return String(Math.floor(d*(b-a+1))+a)}if(!f)return String(Math.floor(d*(b.max-b.min+1)+b.min));{let a=parseInt(f,10);if(a<=0)throw Error(`Invalid step: ${a}, must be positive`);let c=Math.floor(d*a),e=[];for(let d=Math.floor(b.min/a)*a+c;d<=b.max;d+=a)d>=b.min&&e.push(d);return e.join(",")}})}static #_(a,b,c){let d=[];return b.split(",").forEach(b=>{if(!(b.length>0))throw Error("Invalid list value format");var f=l.#aa(a,b,c);if(Array.isArray(f))d.push(...f);else if(l.#ab(c,f))d.push(f);else{let b=parseInt(f.toString(),10);if(!(b>=c.min&&b<=c.max))throw Error(`Constraint error, got value ${f} expected range ${c.min}-${c.max}`);d.push(a===e.DayOfWeek?b%7:f)}}),d}static #aa(a,b,c){let d=b.split("/");if(d.length>2)throw Error(`Invalid repeat: ${b}`);return 2===d.length?(isNaN(parseInt(d[0],10))||(d[0]=`${d[0]}-${c.max}`),l.#ac(a,d[0],parseInt(d[1],10),c)):l.#ac(a,b,1,c)}static #ad(a,b,c){if(!(!isNaN(a)&&!isNaN(b)&&a>=c.min&&b<=c.max))throw Error(`Constraint error, got range ${a}-${b} expected range ${c.min}-${c.max}`);if(a>b)throw Error(`Invalid range: ${a}-${b}, min(${a}) > max(${b})`)}static #ae(a){if(!(!isNaN(a)&&a>0))throw Error(`Constraint error, cannot repeat at every ${a} time.`)}static #af(a,b,c,d){let f=[];a===e.DayOfWeek&&c%7==0&&f.push(0);for(let a=b;a<=c;a+=d)-1===f.indexOf(a)&&f.push(a);return f}static #ac(a,b,c,d){let e=b.split("-");if(e.length<=1)return isNaN(+b)?b:+b;let[f,g]=e.map(a=>parseInt(a,10));return this.#ad(f,g,d),this.#ae(c),this.#af(a,f,g,c)}static #Y(a){let b=a.split("#");if(b.length<=1)return{dayOfWeek:b[0]};let c=+b[b.length-1],d=a.match(/([,-/])/);if(null!==d)throw Error(`Constraint error, invalid dayOfWeek \`#\` and \`${d?.[0]}\` special characters are incompatible`);if(!(b.length<=2&&!isNaN(c)&&c>=1&&c<=5))throw Error("Constraint error, invalid dayOfWeek occurrence number (#)");return{dayOfWeek:b[0],nthDayOfWeek:c}}static #ab(a,b){return a.chars.some(a=>b.toString().includes(a))}}b.CronExpressionParser=l},69697:(a,b)=>{Object.defineProperty(b,"__esModule",{value:!0}),b.CronField=void 0;class c{#ag=!1;#ah=!1;#ai=!1;#aj=[];options={rawValue:""};static get min(){throw Error("min must be overridden")}static get max(){throw Error("max must be overridden")}static get chars(){return Object.freeze([])}static get validChars(){return/^[?,*\dH/-]+$|^.*H\(\d+-\d+\)\/\d+.*$|^.*H\(\d+-\d+\).*$|^.*H\/\d+.*$/}static get constraints(){return{min:this.min,max:this.max,chars:this.chars,validChars:this.validChars}}constructor(a,b={rawValue:""}){if(!Array.isArray(a))throw Error(`${this.constructor.name} Validation error, values is not an array`);if(!(a.length>0))throw Error(`${this.constructor.name} Validation error, values contains no values`);this.options={...b,rawValue:b.rawValue??""},this.#aj=a.sort(c.sorter),this.#ai=void 0!==this.options.wildcard?this.options.wildcard:this.#ak(),this.#ag=this.options.rawValue.includes("L")||a.includes("L"),this.#ah=this.options.rawValue.includes("?")||a.includes("?")}get min(){return this.constructor.min}get max(){return this.constructor.max}get chars(){return this.constructor.chars}get hasLastChar(){return this.#ag}get hasQuestionMarkChar(){return this.#ah}get isWildcard(){return this.#ai}get values(){return this.#aj}static sorter(a,b){let c="number"==typeof a,d="number"==typeof b;return c&&d?a-b:c||d?c?-1:1:a.localeCompare(b)}static findNearestValueInList(a,b,c=!1){if(c){for(let c=a.length-1;c>=0;c--)if(a[c]<b)return a[c];return null}for(let c=0;c<a.length;c++)if(a[c]>b)return a[c];return null}findNearestValue(a,b=!1){return this.constructor.findNearestValueInList(this.values,a,b)}serialize(){return{wildcard:this.#ai,values:this.#aj}}validate(){let a,b=this.chars.length>0?` or chars ${this.chars.join("")}`:"",c=b=>(a=b,"number"==typeof b?b>=this.min&&b<=this.max:this.chars.some(a=>RegExp(`^\\d{0,2}${a}$`).test(b)));if(!this.#aj.every(c))throw Error(`${this.constructor.name} Validation error, got value ${a} expected range ${this.min}-${this.max}${b}`);let d=this.#aj.find((a,b)=>this.#aj.indexOf(a)!==b);if(d)throw Error(`${this.constructor.name} Validation error, duplicate values found: ${d}`)}#ak(){return this.options.rawValue.length>0?["*","?"].includes(this.options.rawValue):Array.from({length:this.max-this.min+1},(a,b)=>b+this.min).every(a=>this.#aj.includes(a))}}b.CronField=c},69769:(a,b,c)=>{c.d(b,{A:()=>j});var d=c(78474),e=c(17974),f=c(50027);let g={error:"error",warning:"warning"},h={SLOW_QUERY:{seconds:30,message:"Warning: slow query. Your queues and/or database server should be reviewed"},LARGE_QUEUE:{size:1e4,message:"Warning: large queue backlog. Your queue should be reviewed"}};class i extends d{#B;#al;#am;#an;#E;#F;#Q;events=g;constructor(a,b,c){super(),this.#E=a,this.#F=c,this.#Q=b,this.#B=!0,this.#al=!1,c.warningSlowQuerySeconds&&(h.SLOW_QUERY.seconds=c.warningSlowQuerySeconds),c.warningQueueSize&&(h.LARGE_QUEUE.size=c.warningQueueSize)}async start(){this.#B&&(this.#al=!1,this.#an=setInterval(()=>this.#ao(),1e3*this.#F.superviseIntervalSeconds),this.#B=!1)}async stop(){this.#B||(this.#al=!0,this.#an&&clearInterval(this.#an),this.#B=!0)}async #ap(a){let b=Date.now(),c=(0,f.RD)(await this.#E.executeSql(a)),d=(Date.now()-b)/1e3;return(d>h.SLOW_QUERY.seconds||this.#F.__test__warn_slow_query)&&this.emit(g.warning,{message:h.SLOW_QUERY.message,data:{elapsed:d,sql:a}}),c}async #aq(a){let b=Date.now(),c=(0,f.RD)(await this.#E.executeSql(a.text,a.values)),d=(Date.now()-b)/1e3;return(d>h.SLOW_QUERY.seconds||this.#F.__test__warn_slow_query)&&this.emit(g.warning,{message:h.SLOW_QUERY.message,data:{elapsed:d,sql:a.text,values:a.values}}),c}async #ao(){try{if(this.#B||this.#am)return;if(this.#F.__test__throw_maint)throw Error(this.#F.__test__throw_maint);this.#am=!0;let a=await this.#Q.getQueues();this.#B||await this.supervise(a)}catch(a){this.emit(g.error,a)}finally{this.#am=!1}}async supervise(a){for(let b of Object.values((Array.isArray(a)?a:await this.#Q.getQueues(a)).reduce((a,b)=>{let{table:c}=b;return a[c]=a[c]||{table:c,queues:[]},a[c].queues.push(b),a},{}))){if(this.#al)return;let{table:a,queues:c}=b,d=c.map(a=>a.name);for(;d.length;){if(this.#al)return;let b=d.splice(0,100);await this.#ar(a,b),await this.#as(a,b)}}}async #ar(a,b){if(this.#al)return;let c=e.Ih(this.#F.schema,b,this.#F.monitorIntervalSeconds),{rows:d}=await this.#aq(c);if(!this.#al&&d.length){let b=d.map(a=>a.name),c=e.TM(this.#F.schema,a,b),{rows:f}=await this.#ap(c);if(this.#al)return;for(let a of f.filter(a=>a.queuedCount>(a.warningQueueSize||h.LARGE_QUEUE.size)))this.emit(g.warning,{message:h.LARGE_QUEUE.message,data:a});let i=e.jw(this.#F.schema,a,b);await this.#ap(i)}}async #as(a,b){if(this.#al)return;let c=e.an(this.#F.schema,b,this.#F.maintenanceIntervalSeconds),{rows:d}=await this.#aq(c);if(!this.#al&&d.length){let b=d.map(a=>a.name),c=e.jo(this.#F.schema,a,b);await this.#ap(c)}}}let j=i},74485:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),b.CronExpression=b.LOOPS_LIMIT_EXCEEDED_ERROR_MESSAGE=b.TIME_SPAN_OUT_OF_BOUNDS_ERROR_MESSAGE=void 0;let d=c(18287);b.TIME_SPAN_OUT_OF_BOUNDS_ERROR_MESSAGE="Out of the time span range",b.LOOPS_LIMIT_EXCEEDED_ERROR_MESSAGE="Invalid expression, loop limit exceeded";class e{#at;#au;#av;#aw;#ax;#ay;#az=null;#aA=!1;constructor(a,b){this.#at=b,this.#au=b.tz,this.#aw=b.startDate?new d.CronDate(b.startDate,this.#au):null,this.#ax=b.endDate?new d.CronDate(b.endDate,this.#au):null;let c=b.currentDate??b.startDate;if(c){let a=new d.CronDate(c,this.#au);this.#aw&&a.getTime()<this.#aw.getTime()?c=this.#aw:this.#ax&&a.getTime()>this.#ax.getTime()&&(c=this.#ax)}this.#av=new d.CronDate(c,this.#au),this.#ay=a}get fields(){return this.#ay}static fieldsToExpression(a,b){return new e(a,b||{})}static #aB(a,b){return b.some(b=>b===a)}#aC(a,b){return a[b?a.length-1:0]}#aD(a){let b=`${a.getFullYear()}-${a.getMonth()+1}-${a.getDate()}`;if(this.#az===b)return this.#aA;let c=new d.CronDate(a);c.setStartOfDay();let e=new d.CronDate(a);return e.setEndOfDay(),this.#az=b,this.#aA=c.getUTCOffset()!==e.getUTCOffset(),this.#aA}#aE(a,b,c){let e=this.#ay.second.values,f=a.getSeconds(),g=this.#ay.second.findNearestValue(f,c);if(null!==g)return void a.setSeconds(g);a.applyDateOperation(b,d.TimeUnit.Minute,this.#ay.hour.values.length),a.setSeconds(this.#aC(e,c))}#aF(a,b,c){let e=this.#ay.minute.values,f=this.#ay.second.values,g=a.getMinutes(),h=this.#ay.minute.findNearestValue(g,c);if(null!==h){a.setMinutes(h),a.setSeconds(this.#aC(f,c));return}a.applyDateOperation(b,d.TimeUnit.Hour,this.#ay.hour.values.length),a.setMinutes(this.#aC(e,c)),a.setSeconds(this.#aC(f,c))}static #aG(a,b){let c=b.isLastWeekdayOfMonth();return a.some(a=>{let d=parseInt(a.toString().charAt(0),10)%7;if(Number.isNaN(d))throw Error(`Invalid last weekday of the month expression: ${a}`);return b.getDay()===d&&c})}next(){return this.#aH()}prev(){return this.#aH(!0)}hasNext(){let a=this.#av;try{return this.#aH(),!0}catch{return!1}finally{this.#av=a}}hasPrev(){let a=this.#av;try{return this.#aH(!0),!0}catch{return!1}finally{this.#av=a}}take(a){let b=[];if(a>=0)for(let c=0;c<a;c++)try{b.push(this.next())}catch{break}else for(let c=0;c>a;c--)try{b.push(this.prev())}catch{break}return b}reset(a){this.#av=new d.CronDate(a||this.#at.currentDate)}stringify(a=!1){return this.#ay.stringify(a)}includesDate(a){let{second:b,minute:c,hour:e,month:f}=this.#ay,g=new d.CronDate(a,this.#au);return!!b.values.includes(g.getSeconds())&&!!c.values.includes(g.getMinutes())&&!!e.values.includes(g.getHours())&&!!f.values.includes(g.getMonth()+1)&&!!this.#aI(g)&&(!(this.#ay.dayOfWeek.nthDay>0)||Math.ceil(g.getDate()/7)===this.#ay.dayOfWeek.nthDay)&&!0}toString(){return this.#at.expression||this.stringify(!0)}#aI(a){let b=this.#ay.dayOfMonth.isWildcard,c=this.#ay.dayOfWeek.isWildcard,d=!c,f=e.#aB(a.getDate(),this.#ay.dayOfMonth.values)||this.#ay.dayOfMonth.hasLastChar&&a.isLastDayOfMonth(),g=e.#aB(a.getDay(),this.#ay.dayOfWeek.values)||this.#ay.dayOfWeek.hasLastChar&&e.#aG(this.#ay.dayOfWeek.values,a);return!b&&!!d&&(!!f||!!g)||!!f&&!d||!!b&&!c&&!!g}#aJ(a,b,c){let f=this.#ay.hour.values,g=a.getHours(),h=e.#aB(g,f),i=a.dstStart===g,j=a.dstEnd===g;if(i)return!!e.#aB(g-1,f)||(a.invokeDateOperation(b,d.TimeUnit.Hour),!1);if(j&&!c)return a.dstEnd=null,a.applyDateOperation(d.DateMathOp.Add,d.TimeUnit.Hour,f.length),!1;if(h)return!0;a.dstStart=null;let k=this.#ay.hour.findNearestValue(g,c);if(null===k)return a.applyDateOperation(b,d.TimeUnit.Day,f.length),!1;if(this.#aD(a)){let e=c?g-k:k-g;for(let c=0;c<e;c++)a.applyDateOperation(b,d.TimeUnit.Hour,f.length)}else a.setHours(k);return a.setMinutes(this.#aC(this.#ay.minute.values,c)),a.setSeconds(this.#aC(this.#ay.second.values,c)),!1}#aK(a){if(!this.#aw&&!this.#ax)return;let c=a.getTime();if(this.#aw&&c<this.#aw.getTime()||this.#ax&&c>this.#ax.getTime())throw Error(b.TIME_SPAN_OUT_OF_BOUNDS_ERROR_MESSAGE)}#aH(a=!1){let c=a?d.DateMathOp.Subtract:d.DateMathOp.Add,f=new d.CronDate(this.#av),g=f.getTime(),h=0;for(;++h<1e4;){if(this.#aK(f),!this.#aI(f)||!(this.#ay.dayOfWeek.nthDay<=0||Math.ceil(f.getDate()/7)===this.#ay.dayOfWeek.nthDay)){f.applyDateOperation(c,d.TimeUnit.Day,this.#ay.hour.values.length);continue}if(!e.#aB(f.getMonth()+1,this.#ay.month.values)){f.applyDateOperation(c,d.TimeUnit.Month,this.#ay.hour.values.length);continue}if(this.#aJ(f,c,a)){if(!e.#aB(f.getMinutes(),this.#ay.minute.values)){this.#aF(f,c,a);continue}if(!e.#aB(f.getSeconds(),this.#ay.second.values)){this.#aE(f,c,a);continue}if(g===f.getTime()){("Add"===c||0===f.getMilliseconds())&&f.applyDateOperation(c,d.TimeUnit.Second,this.#ay.hour.values.length);continue}break}}if(h>1e4)throw Error(b.LOOPS_LIMIT_EXCEEDED_ERROR_MESSAGE);return 0!==f.getMilliseconds()&&f.setMilliseconds(0),this.#av=f,f}[Symbol.iterator](){return{next:()=>({value:this.#aH(),done:!this.hasNext()})}}}b.CronExpression=e,b.default=e},75806:(a,b)=>{let c;Object.defineProperty(b,"__esModule",{value:!0});class d extends Error{}class e extends d{constructor(a){super(`Invalid DateTime: ${a.toMessage()}`)}}class f extends d{constructor(a){super(`Invalid Interval: ${a.toMessage()}`)}}class g extends d{constructor(a){super(`Invalid Duration: ${a.toMessage()}`)}}class h extends d{}class i extends d{constructor(a){super(`Invalid unit ${a}`)}}class j extends d{}class k extends d{constructor(){super("Zone is an abstract class")}}let l="numeric",m="short",n="long",o={year:l,month:l,day:l},p={year:l,month:m,day:l},q={year:l,month:m,day:l,weekday:m},r={year:l,month:n,day:l},s={year:l,month:n,day:l,weekday:n},t={hour:l,minute:l},u={hour:l,minute:l,second:l},v={hour:l,minute:l,second:l,timeZoneName:m},w={hour:l,minute:l,second:l,timeZoneName:n},x={hour:l,minute:l,hourCycle:"h23"},y={hour:l,minute:l,second:l,hourCycle:"h23"},z={hour:l,minute:l,second:l,hourCycle:"h23",timeZoneName:m},A={hour:l,minute:l,second:l,hourCycle:"h23",timeZoneName:n},B={year:l,month:l,day:l,hour:l,minute:l},C={year:l,month:l,day:l,hour:l,minute:l,second:l},D={year:l,month:m,day:l,hour:l,minute:l},E={year:l,month:m,day:l,hour:l,minute:l,second:l},F={year:l,month:m,day:l,weekday:m,hour:l,minute:l},G={year:l,month:n,day:l,hour:l,minute:l,timeZoneName:m},H={year:l,month:n,day:l,hour:l,minute:l,second:l,timeZoneName:m},I={year:l,month:n,day:l,weekday:n,hour:l,minute:l,timeZoneName:n},J={year:l,month:n,day:l,weekday:n,hour:l,minute:l,second:l,timeZoneName:n};class K{get type(){throw new k}get name(){throw new k}get ianaName(){return this.name}get isUniversal(){throw new k}offsetName(a,b){throw new k}formatOffset(a,b){throw new k}offset(a){throw new k}equals(a){throw new k}get isValid(){throw new k}}let L=null;class M extends K{static get instance(){return null===L&&(L=new M),L}get type(){return"system"}get name(){return new Intl.DateTimeFormat().resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(a,{format:b,locale:c}){return a3(a,b,c)}formatOffset(a,b){return a7(this.offset(a),b)}offset(a){return-new Date(a).getTimezoneOffset()}equals(a){return"system"===a.type}get isValid(){return!0}}let N=new Map,O={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6},P=new Map;class Q extends K{static create(a){let b=P.get(a);return void 0===b&&P.set(a,b=new Q(a)),b}static resetCache(){P.clear(),N.clear()}static isValidSpecifier(a){return this.isValidZone(a)}static isValidZone(a){if(!a)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:a}).format(),!0}catch(a){return!1}}constructor(a){super(),this.zoneName=a,this.valid=Q.isValidZone(a)}get type(){return"iana"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(a,{format:b,locale:c}){return a3(a,b,c,this.name)}formatOffset(a,b){return a7(this.offset(a),b)}offset(a){var b;let c;if(!this.valid)return NaN;let d=new Date(a);if(isNaN(d))return NaN;let e=(b=this.name,void 0===(c=N.get(b))&&(c=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:b,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"}),N.set(b,c)),c),[f,g,h,i,j,k,l]=e.formatToParts?function(a,b){let c=a.formatToParts(b),d=[];for(let a=0;a<c.length;a++){let{type:b,value:e}=c[a],f=O[b];"era"===b?d[f]=e:aK(f)||(d[f]=parseInt(e,10))}return d}(e,d):function(a,b){let c=a.format(b).replace(/\u200E/g,""),[,d,e,f,g,h,i,j]=/(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(c);return[f,d,e,g,h,i,j]}(e,d);"BC"===i&&(f=-Math.abs(f)+1);let m=a_({year:f,month:g,day:h,hour:24===j?0:j,minute:k,second:l,millisecond:0}),n=+d,o=n%1e3;return(m-(n-=o>=0?o:1e3+o))/6e4}equals(a){return"iana"===a.type&&a.name===this.name}get isValid(){return this.valid}}let R={},S=new Map;function T(a,b={}){let c=JSON.stringify([a,b]),d=S.get(c);return void 0===d&&(d=new Intl.DateTimeFormat(a,b),S.set(c,d)),d}let U=new Map,V=new Map,W=null,X=new Map;function Y(a){let b=X.get(a);return void 0===b&&(b=new Intl.DateTimeFormat(a).resolvedOptions(),X.set(a,b)),b}let Z=new Map;function $(a,b,c,d){let e=a.listingMode();return"error"===e?null:"en"===e?c(b):d(b)}class _{constructor(a,b,c){this.padTo=c.padTo||0,this.floor=c.floor||!1;let{padTo:d,floor:e,...f}=c;if(!b||Object.keys(f).length>0){let b={useGrouping:!1,...c};c.padTo>0&&(b.minimumIntegerDigits=c.padTo),this.inf=function(a,b={}){let c=JSON.stringify([a,b]),d=U.get(c);return void 0===d&&(d=new Intl.NumberFormat(a,b),U.set(c,d)),d}(a,b)}}format(a){if(!this.inf)return aT(this.floor?Math.floor(a):aX(a,3),this.padTo);{let b=this.floor?Math.floor(a):a;return this.inf.format(b)}}}class aa{constructor(a,b,c){let d;if(this.opts=c,this.originalZone=void 0,this.opts.timeZone)this.dt=a;else if("fixed"===a.zone.type){let b=-1*(a.offset/60),c=b>=0?`Etc/GMT+${b}`:`Etc/GMT${b}`;0!==a.offset&&Q.create(c).valid?(d=c,this.dt=a):(d="UTC",this.dt=0===a.offset?a:a.setZone("UTC").plus({minutes:a.offset}),this.originalZone=a.zone)}else"system"===a.zone.type?this.dt=a:"iana"===a.zone.type?(this.dt=a,d=a.zone.name):(d="UTC",this.dt=a.setZone("UTC").plus({minutes:a.offset}),this.originalZone=a.zone);let e={...this.opts};e.timeZone=e.timeZone||d,this.dtf=T(b,e)}format(){return this.originalZone?this.formatToParts().map(({value:a})=>a).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){let a=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?a.map(a=>{if("timeZoneName"!==a.type)return a;{let b=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...a,value:b}}}):a}resolvedOptions(){return this.dtf.resolvedOptions()}}class ab{constructor(a,b,c){this.opts={style:"long",...c},!b&&aN()&&(this.rtf=function(a,b={}){let{base:c,...d}=b,e=JSON.stringify([a,d]),f=V.get(e);return void 0===f&&(f=new Intl.RelativeTimeFormat(a,b),V.set(e,f)),f}(a,c))}format(a,b){return this.rtf?this.rtf.format(a,b):function(a,b,c="always",d=!1){let e={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},f=-1===["hours","minutes","seconds"].indexOf(a);if("auto"===c&&f){let c="days"===a;switch(b){case 1:return c?"tomorrow":`next ${e[a][0]}`;case -1:return c?"yesterday":`last ${e[a][0]}`;case 0:return c?"today":`this ${e[a][0]}`}}let g=Object.is(b,-0)||b<0,h=Math.abs(b),i=1===h,j=e[a],k=d?i?j[1]:j[2]||j[1]:i?e[a][0]:a;return g?`${h} ${k} ago`:`in ${h} ${k}`}(b,a,this.opts.numeric,"long"!==this.opts.style)}formatToParts(a,b){return this.rtf?this.rtf.formatToParts(a,b):[]}}let ac={firstDay:1,minimalDays:4,weekend:[6,7]};class ad{static fromOpts(a){return ad.create(a.locale,a.numberingSystem,a.outputCalendar,a.weekSettings,a.defaultToEN)}static create(a,b,c,d,e=!1){let f=a||av.defaultLocale,g=f||(e?"en-US":W||(W=new Intl.DateTimeFormat().resolvedOptions().locale)),h=b||av.defaultNumberingSystem;return new ad(g,h,c||av.defaultOutputCalendar,aR(d)||av.defaultWeekSettings,f)}static resetCache(){W=null,S.clear(),U.clear(),V.clear(),X.clear(),Z.clear()}static fromObject({locale:a,numberingSystem:b,outputCalendar:c,weekSettings:d}={}){return ad.create(a,b,c,d)}constructor(a,b,c,d,e){let[f,g,h]=function(a){let b=a.indexOf("-x-");-1!==b&&(a=a.substring(0,b));let c=a.indexOf("-u-");if(-1===c)return[a];{let b,d;try{b=T(a).resolvedOptions(),d=a}catch(f){let e=a.substring(0,c);b=T(e).resolvedOptions(),d=e}let{numberingSystem:e,calendar:f}=b;return[d,e,f]}}(a);this.locale=f,this.numberingSystem=b||g||null,this.outputCalendar=c||h||null,this.weekSettings=d,this.intl=function(a,b,c){return(c||b)&&(a.includes("-u-")||(a+="-u"),c&&(a+=`-ca-${c}`),b&&(a+=`-nu-${b}`)),a}(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=e,this.fastNumbersCached=null}get fastNumbers(){return null==this.fastNumbersCached&&(this.fastNumbersCached=(!this.numberingSystem||"latn"===this.numberingSystem)&&("latn"===this.numberingSystem||!this.locale||this.locale.startsWith("en")||"latn"===Y(this.locale).numberingSystem)),this.fastNumbersCached}listingMode(){let a=this.isEnglish(),b=(null===this.numberingSystem||"latn"===this.numberingSystem)&&(null===this.outputCalendar||"gregory"===this.outputCalendar);return a&&b?"en":"intl"}clone(a){return a&&0!==Object.getOwnPropertyNames(a).length?ad.create(a.locale||this.specifiedLocale,a.numberingSystem||this.numberingSystem,a.outputCalendar||this.outputCalendar,aR(a.weekSettings)||this.weekSettings,a.defaultToEN||!1):this}redefaultToEN(a={}){return this.clone({...a,defaultToEN:!0})}redefaultToSystem(a={}){return this.clone({...a,defaultToEN:!1})}months(a,b=!1){return $(this,a,bc,()=>{let c="ja"===this.intl||this.intl.startsWith("ja-"),d=(b&=!c)?{month:a,day:"numeric"}:{month:a},e=b?"format":"standalone";if(!this.monthsCache[e][a]){let b=c?a=>this.dtFormatter(a,d).format():a=>this.extract(a,d,"month");this.monthsCache[e][a]=function(a){let b=[];for(let c=1;c<=12;c++){let d=cV.utc(2009,c,1);b.push(a(d))}return b}(b)}return this.monthsCache[e][a]})}weekdays(a,b=!1){return $(this,a,bg,()=>{let c=b?{weekday:a,year:"numeric",month:"long",day:"numeric"}:{weekday:a},d=b?"format":"standalone";return this.weekdaysCache[d][a]||(this.weekdaysCache[d][a]=function(a){let b=[];for(let c=1;c<=7;c++){let d=cV.utc(2016,11,13+c);b.push(a(d))}return b}(a=>this.extract(a,c,"weekday"))),this.weekdaysCache[d][a]})}meridiems(){return $(this,void 0,()=>bh,()=>{if(!this.meridiemCache){let a={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[cV.utc(2016,11,13,9),cV.utc(2016,11,13,19)].map(b=>this.extract(b,a,"dayperiod"))}return this.meridiemCache})}eras(a){return $(this,a,bl,()=>{let b={era:a};return this.eraCache[a]||(this.eraCache[a]=[cV.utc(-40,1,1),cV.utc(2017,1,1)].map(a=>this.extract(a,b,"era"))),this.eraCache[a]})}extract(a,b,c){let d=this.dtFormatter(a,b).formatToParts().find(a=>a.type.toLowerCase()===c);return d?d.value:null}numberFormatter(a={}){return new _(this.intl,a.forceSimple||this.fastNumbers,a)}dtFormatter(a,b={}){return new aa(a,this.intl,b)}relFormatter(a={}){return new ab(this.intl,this.isEnglish(),a)}listFormatter(a={}){return function(a,b={}){let c=JSON.stringify([a,b]),d=R[c];return d||(d=new Intl.ListFormat(a,b),R[c]=d),d}(this.intl,a)}isEnglish(){return"en"===this.locale||"en-us"===this.locale.toLowerCase()||Y(this.intl).locale.startsWith("en-us")}getWeekSettings(){if(this.weekSettings)return this.weekSettings;if(!aO())return ac;var a=this.locale;let b=Z.get(a);if(!b){let c=new Intl.Locale(a);"minimalDays"in(b="getWeekInfo"in c?c.getWeekInfo():c.weekInfo)||(b={...ac,...b}),Z.set(a,b)}return b}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(a){return this.locale===a.locale&&this.numberingSystem===a.numberingSystem&&this.outputCalendar===a.outputCalendar}toString(){return`Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`}}let ae=null;class af extends K{static get utcInstance(){return null===ae&&(ae=new af(0)),ae}static instance(a){return 0===a?af.utcInstance:new af(a)}static parseSpecifier(a){if(a){let b=a.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(b)return new af(a4(b[1],b[2]))}return null}constructor(a){super(),this.fixed=a}get type(){return"fixed"}get name(){return 0===this.fixed?"UTC":`UTC${a7(this.fixed,"narrow")}`}get ianaName(){return 0===this.fixed?"Etc/UTC":`Etc/GMT${a7(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(a,b){return a7(this.fixed,b)}get isUniversal(){return!0}offset(){return this.fixed}equals(a){return"fixed"===a.type&&a.fixed===this.fixed}get isValid(){return!0}}class ag extends K{constructor(a){super(),this.zoneName=a}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}}function ah(a,b){if(aK(a)||null===a)return b;if(a instanceof K)return a;if("string"==typeof a){let c=a.toLowerCase();return"default"===c?b:"local"===c||"system"===c?M.instance:"utc"===c||"gmt"===c?af.utcInstance:af.parseSpecifier(c)||Q.create(a)}if(aL(a))return af.instance(a);if("object"==typeof a&&"offset"in a&&"function"==typeof a.offset)return a;else return new ag(a)}let ai={arab:"[٠-٩]",arabext:"[۰-۹]",bali:"[᭐-᭙]",beng:"[০-৯]",deva:"[०-९]",fullwide:"[0-9]",gujr:"[૦-૯]",hanidec:"[〇|一|二|三|四|五|六|七|八|九]",khmr:"[០-៩]",knda:"[೦-೯]",laoo:"[໐-໙]",limb:"[᥆-᥏]",mlym:"[൦-൯]",mong:"[᠐-᠙]",mymr:"[၀-၉]",orya:"[୦-୯]",tamldec:"[௦-௯]",telu:"[౦-౯]",thai:"[๐-๙]",tibt:"[༠-༩]",latn:"\\d"},aj={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},ak=ai.hanidec.replace(/[\[|\]]/g,"").split(""),al=new Map;function am({numberingSystem:a},b=""){let c=a||"latn",d=al.get(c);void 0===d&&(d=new Map,al.set(c,d));let e=d.get(b);return void 0===e&&(e=RegExp(`${ai[c]}${b}`),d.set(b,e)),e}let an=()=>Date.now(),ao="system",ap=null,aq=null,ar=null,as=60,at,au=null;class av{static get now(){return an}static set now(a){an=a}static set defaultZone(a){ao=a}static get defaultZone(){return ah(ao,M.instance)}static get defaultLocale(){return ap}static set defaultLocale(a){ap=a}static get defaultNumberingSystem(){return aq}static set defaultNumberingSystem(a){aq=a}static get defaultOutputCalendar(){return ar}static set defaultOutputCalendar(a){ar=a}static get defaultWeekSettings(){return au}static set defaultWeekSettings(a){au=aR(a)}static get twoDigitCutoffYear(){return as}static set twoDigitCutoffYear(a){as=a%100}static get throwOnInvalid(){return at}static set throwOnInvalid(a){at=a}static resetCaches(){ad.resetCache(),Q.resetCache(),cV.resetCache(),al.clear()}}class aw{constructor(a,b){this.reason=a,this.explanation=b}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}}let ax=[0,31,59,90,120,151,181,212,243,273,304,334],ay=[0,31,60,91,121,152,182,213,244,274,305,335];function az(a,b){return new aw("unit out of range",`you specified ${b} (of type ${typeof b}) as a ${a}, which is invalid`)}function aA(a,b,c){let d=new Date(Date.UTC(a,b-1,c));a<100&&a>=0&&d.setUTCFullYear(d.getUTCFullYear()-1900);let e=d.getUTCDay();return 0===e?7:e}function aB(a,b){let c=aY(a)?ay:ax,d=c.findIndex(a=>a<b),e=b-c[d];return{month:d+1,day:e}}function aC(a,b){return(a-b+7)%7+1}function aD(a,b=4,c=1){let{year:d,month:e,day:f}=a,g=f+(aY(d)?ay:ax)[e-1],h=aC(aA(d,e,f),c),i=Math.floor((g-h+14-b)/7),j;return i<1?i=a1(j=d-1,b,c):i>a1(d,b,c)?(j=d+1,i=1):j=d,{weekYear:j,weekNumber:i,weekday:h,...a8(a)}}function aE(a,b=4,c=1){let{weekYear:d,weekNumber:e,weekday:f}=a,g=aC(aA(d,1,b),c),h=aZ(d),i=7*e+f-g-7+b,j;i<1?i+=aZ(j=d-1):i>h?(j=d+1,i-=aZ(d)):j=d;let{month:k,day:l}=aB(j,i);return{year:j,month:k,day:l,...a8(a)}}function aF(a){let{year:b,month:c,day:d}=a,e=d+(aY(b)?ay:ax)[c-1];return{year:b,ordinal:e,...a8(a)}}function aG(a){let{year:b,ordinal:c}=a,{month:d,day:e}=aB(b,c);return{year:b,month:d,day:e,...a8(a)}}function aH(a,b){if(!(!aK(a.localWeekday)||!aK(a.localWeekNumber)||!aK(a.localWeekYear)))return{minDaysInFirstWeek:4,startOfWeek:1};if(!aK(a.weekday)||!aK(a.weekNumber)||!aK(a.weekYear))throw new h("Cannot mix locale-based week fields with ISO-based week fields");return aK(a.localWeekday)||(a.weekday=a.localWeekday),aK(a.localWeekNumber)||(a.weekNumber=a.localWeekNumber),aK(a.localWeekYear)||(a.weekYear=a.localWeekYear),delete a.localWeekday,delete a.localWeekNumber,delete a.localWeekYear,{minDaysInFirstWeek:b.getMinDaysInFirstWeek(),startOfWeek:b.getStartOfWeek()}}function aI(a){let b=aM(a.year),c=aS(a.month,1,12),d=aS(a.day,1,a$(a.year,a.month));return b?c?!d&&az("day",a.day):az("month",a.month):az("year",a.year)}function aJ(a){let{hour:b,minute:c,second:d,millisecond:e}=a,f=aS(b,0,23)||24===b&&0===c&&0===d&&0===e,g=aS(c,0,59),h=aS(d,0,59),i=aS(e,0,999);return f?g?h?!i&&az("millisecond",e):az("second",d):az("minute",c):az("hour",b)}function aK(a){return void 0===a}function aL(a){return"number"==typeof a}function aM(a){return"number"==typeof a&&a%1==0}function aN(){try{return"undefined"!=typeof Intl&&!!Intl.RelativeTimeFormat}catch(a){return!1}}function aO(){try{return"undefined"!=typeof Intl&&!!Intl.Locale&&("weekInfo"in Intl.Locale.prototype||"getWeekInfo"in Intl.Locale.prototype)}catch(a){return!1}}function aP(a,b,c){if(0!==a.length)return a.reduce((a,d)=>{let e=[b(d),d];return a&&c(a[0],e[0])===a[0]?a:e},null)[1]}function aQ(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function aR(a){if(null==a)return null;if("object"!=typeof a)throw new j("Week settings must be an object");if(!aS(a.firstDay,1,7)||!aS(a.minimalDays,1,7)||!Array.isArray(a.weekend)||a.weekend.some(a=>!aS(a,1,7)))throw new j("Invalid week settings");return{firstDay:a.firstDay,minimalDays:a.minimalDays,weekend:Array.from(a.weekend)}}function aS(a,b,c){return aM(a)&&a>=b&&a<=c}function aT(a,b=2){return a<0?"-"+(""+-a).padStart(b,"0"):(""+a).padStart(b,"0")}function aU(a){if(!aK(a)&&null!==a&&""!==a)return parseInt(a,10)}function aV(a){if(!aK(a)&&null!==a&&""!==a)return parseFloat(a)}function aW(a){if(!aK(a)&&null!==a&&""!==a)return Math.floor(1e3*parseFloat("0."+a))}function aX(a,b,c="round"){let d=10**b;switch(c){case"expand":return a>0?Math.ceil(a*d)/d:Math.floor(a*d)/d;case"trunc":return Math.trunc(a*d)/d;case"round":return Math.round(a*d)/d;case"floor":return Math.floor(a*d)/d;case"ceil":return Math.ceil(a*d)/d;default:throw RangeError(`Value rounding ${c} is out of range`)}}function aY(a){return a%4==0&&(a%100!=0||a%400==0)}function aZ(a){return aY(a)?366:365}function a$(a,b){var c;let d=(c=b-1)-12*Math.floor(c/12)+1;return 2===d?aY(a+(b-d)/12)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][d-1]}function a_(a){let b=Date.UTC(a.year,a.month-1,a.day,a.hour,a.minute,a.second,a.millisecond);return a.year<100&&a.year>=0&&(b=new Date(b)).setUTCFullYear(a.year,a.month-1,a.day),+b}function a0(a,b,c){return-aC(aA(a,1,b),c)+b-1}function a1(a,b=4,c=1){let d=a0(a,b,c),e=a0(a+1,b,c);return(aZ(a)-d+e)/7}function a2(a){return a>99?a:a>av.twoDigitCutoffYear?1900+a:2e3+a}function a3(a,b,c,d=null){let e=new Date(a),f={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};d&&(f.timeZone=d);let g={timeZoneName:b,...f},h=new Intl.DateTimeFormat(c,g).formatToParts(e).find(a=>"timezonename"===a.type.toLowerCase());return h?h.value:null}function a4(a,b){let c=parseInt(a,10);Number.isNaN(c)&&(c=0);let d=parseInt(b,10)||0,e=c<0||Object.is(c,-0)?-d:d;return 60*c+e}function a5(a){let b=Number(a);if("boolean"==typeof a||""===a||!Number.isFinite(b))throw new j(`Invalid unit value ${a}`);return b}function a6(a,b){let c={};for(let d in a)if(aQ(a,d)){let e=a[d];if(null==e)continue;c[b(d)]=a5(e)}return c}function a7(a,b){let c=Math.trunc(Math.abs(a/60)),d=Math.trunc(Math.abs(a%60)),e=a>=0?"+":"-";switch(b){case"short":return`${e}${aT(c,2)}:${aT(d,2)}`;case"narrow":return`${e}${c}${d>0?`:${d}`:""}`;case"techie":return`${e}${aT(c,2)}${aT(d,2)}`;default:throw RangeError(`Value format ${b} is out of range for property format`)}}function a8(a){return["hour","minute","second","millisecond"].reduce((b,c)=>(b[c]=a[c],b),{})}let a9=["January","February","March","April","May","June","July","August","September","October","November","December"],ba=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],bb=["J","F","M","A","M","J","J","A","S","O","N","D"];function bc(a){switch(a){case"narrow":return[...bb];case"short":return[...ba];case"long":return[...a9];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}let bd=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],be=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],bf=["M","T","W","T","F","S","S"];function bg(a){switch(a){case"narrow":return[...bf];case"short":return[...be];case"long":return[...bd];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}let bh=["AM","PM"],bi=["Before Christ","Anno Domini"],bj=["BC","AD"],bk=["B","A"];function bl(a){switch(a){case"narrow":return[...bk];case"short":return[...bj];case"long":return[...bi];default:return null}}function bm(a,b){let c="";for(let d of a)d.literal?c+=d.val:c+=b(d.val);return c}let bn={D:o,DD:p,DDD:r,DDDD:s,t:t,tt:u,ttt:v,tttt:w,T:x,TT:y,TTT:z,TTTT:A,f:B,ff:D,fff:G,ffff:I,F:C,FF:E,FFF:H,FFFF:J};class bo{static create(a,b={}){return new bo(a,b)}static parseFormat(a){let b=null,c="",d=!1,e=[];for(let f=0;f<a.length;f++){let g=a.charAt(f);"'"===g?((c.length>0||d)&&e.push({literal:d||/^\s+$/.test(c),val:""===c?"'":c}),b=null,c="",d=!d):d||g===b?c+=g:(c.length>0&&e.push({literal:/^\s+$/.test(c),val:c}),c=g,b=g)}return c.length>0&&e.push({literal:d||/^\s+$/.test(c),val:c}),e}static macroTokenToFormatOpts(a){return bn[a]}constructor(a,b){this.opts=b,this.loc=a,this.systemLoc=null}formatWithSystemDefault(a,b){return null===this.systemLoc&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(a,{...this.opts,...b}).format()}dtFormatter(a,b={}){return this.loc.dtFormatter(a,{...this.opts,...b})}formatDateTime(a,b){return this.dtFormatter(a,b).format()}formatDateTimeParts(a,b){return this.dtFormatter(a,b).formatToParts()}formatInterval(a,b){return this.dtFormatter(a.start,b).dtf.formatRange(a.start.toJSDate(),a.end.toJSDate())}resolvedOptions(a,b){return this.dtFormatter(a,b).resolvedOptions()}num(a,b=0,c){if(this.opts.forceSimple)return aT(a,b);let d={...this.opts};return b>0&&(d.padTo=b),c&&(d.signDisplay=c),this.loc.numberFormatter(d).format(a)}formatDateTimeFromString(a,b){let c="en"===this.loc.listingMode(),d=this.loc.outputCalendar&&"gregory"!==this.loc.outputCalendar,e=(b,c)=>this.loc.extract(a,b,c),f=b=>a.isOffsetFixed&&0===a.offset&&b.allowZ?"Z":a.isValid?a.zone.formatOffset(a.ts,b.format):"",g=(b,d)=>c?bc(b)[a.month-1]:e(d?{month:b}:{month:b,day:"numeric"},"month"),h=(b,d)=>c?bg(b)[a.weekday-1]:e(d?{weekday:b}:{weekday:b,month:"long",day:"numeric"},"weekday"),i=b=>{let c=bo.macroTokenToFormatOpts(b);return c?this.formatWithSystemDefault(a,c):b},j=b=>c?bl(b)[a.year<0?0:1]:e({era:b},"era"),k=b=>{switch(b){case"S":return this.num(a.millisecond);case"u":case"SSS":return this.num(a.millisecond,3);case"s":return this.num(a.second);case"ss":return this.num(a.second,2);case"uu":return this.num(Math.floor(a.millisecond/10),2);case"uuu":return this.num(Math.floor(a.millisecond/100));case"m":return this.num(a.minute);case"mm":return this.num(a.minute,2);case"h":return this.num(a.hour%12==0?12:a.hour%12);case"hh":return this.num(a.hour%12==0?12:a.hour%12,2);case"H":return this.num(a.hour);case"HH":return this.num(a.hour,2);case"Z":return f({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return f({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return f({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return a.zone.offsetName(a.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return a.zone.offsetName(a.ts,{format:"long",locale:this.loc.locale});case"z":return a.zoneName;case"a":return c?bh[a.hour<12?0:1]:e({hour:"numeric",hourCycle:"h12"},"dayperiod");case"d":return d?e({day:"numeric"},"day"):this.num(a.day);case"dd":return d?e({day:"2-digit"},"day"):this.num(a.day,2);case"c":case"E":return this.num(a.weekday);case"ccc":return h("short",!0);case"cccc":return h("long",!0);case"ccccc":return h("narrow",!0);case"EEE":return h("short",!1);case"EEEE":return h("long",!1);case"EEEEE":return h("narrow",!1);case"L":return d?e({month:"numeric",day:"numeric"},"month"):this.num(a.month);case"LL":return d?e({month:"2-digit",day:"numeric"},"month"):this.num(a.month,2);case"LLL":return g("short",!0);case"LLLL":return g("long",!0);case"LLLLL":return g("narrow",!0);case"M":return d?e({month:"numeric"},"month"):this.num(a.month);case"MM":return d?e({month:"2-digit"},"month"):this.num(a.month,2);case"MMM":return g("short",!1);case"MMMM":return g("long",!1);case"MMMMM":return g("narrow",!1);case"y":return d?e({year:"numeric"},"year"):this.num(a.year);case"yy":return d?e({year:"2-digit"},"year"):this.num(a.year.toString().slice(-2),2);case"yyyy":return d?e({year:"numeric"},"year"):this.num(a.year,4);case"yyyyyy":return d?e({year:"numeric"},"year"):this.num(a.year,6);case"G":return j("short");case"GG":return j("long");case"GGGGG":return j("narrow");case"kk":return this.num(a.weekYear.toString().slice(-2),2);case"kkkk":return this.num(a.weekYear,4);case"W":return this.num(a.weekNumber);case"WW":return this.num(a.weekNumber,2);case"n":return this.num(a.localWeekNumber);case"nn":return this.num(a.localWeekNumber,2);case"ii":return this.num(a.localWeekYear.toString().slice(-2),2);case"iiii":return this.num(a.localWeekYear,4);case"o":return this.num(a.ordinal);case"ooo":return this.num(a.ordinal,3);case"q":return this.num(a.quarter);case"qq":return this.num(a.quarter,2);case"X":return this.num(Math.floor(a.ts/1e3));case"x":return this.num(a.ts);default:return i(b)}};return bm(bo.parseFormat(b),k)}formatDurationFromString(a,b){let c="negativeLargestOnly"===this.opts.signMode?-1:1,d=a=>{switch(a[0]){case"S":return"milliseconds";case"s":return"seconds";case"m":return"minutes";case"h":return"hours";case"d":return"days";case"w":return"weeks";case"M":return"months";case"y":return"years";default:return null}},e=(a,b)=>e=>{let f=d(e);if(!f)return e;{let d,g=b.isNegativeDuration&&f!==b.largestUnit?c:1;return d="negativeLargestOnly"===this.opts.signMode&&f!==b.largestUnit?"never":"all"===this.opts.signMode?"always":"auto",this.num(a.get(f)*g,e.length,d)}},f=bo.parseFormat(b),g=f.reduce((a,{literal:b,val:c})=>b?a:a.concat(c),[]),h=a.shiftTo(...g.map(d).filter(a=>a)),i={isNegativeDuration:h<0,largestUnit:Object.keys(h.values)[0]};return bm(f,e(h,i))}}let bp=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function bq(...a){let b=a.reduce((a,b)=>a+b.source,"");return RegExp(`^${b}$`)}function br(...a){return b=>a.reduce(([a,c,d],e)=>{let[f,g,h]=e(b,d);return[{...a,...f},g||c,h]},[{},null,1]).slice(0,2)}function bs(a,...b){if(null==a)return[null,null];for(let[c,d]of b){let b=c.exec(a);if(b)return d(b)}return[null,null]}function bt(...a){return(b,c)=>{let d,e={};for(d=0;d<a.length;d++)e[a[d]]=aU(b[c+d]);return[e,null,c+d]}}let bu=/(?:([Zz])|([+-]\d\d)(?::?(\d\d))?)/,bv=`(?:${bu.source}?(?:\\[(${bp.source})\\])?)?`,bw=/(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/,bx=RegExp(`${bw.source}${bv}`),by=RegExp(`(?:[Tt]${bx.source})?`),bz=bt("weekYear","weekNumber","weekDay"),bA=bt("year","ordinal"),bB=RegExp(`${bw.source} ?(?:${bu.source}|(${bp.source}))?`),bC=RegExp(`(?: ${bB.source})?`);function bD(a,b,c){let d=a[b];return aK(d)?c:aU(d)}function bE(a,b){return[{hours:bD(a,b,0),minutes:bD(a,b+1,0),seconds:bD(a,b+2,0),milliseconds:aW(a[b+3])},null,b+4]}function bF(a,b){let c=!a[b]&&!a[b+1],d=a4(a[b+1],a[b+2]);return[{},c?null:af.instance(d),b+3]}function bG(a,b){return[{},a[b]?Q.create(a[b]):null,b+1]}let bH=RegExp(`^T?${bw.source}$`),bI=/^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/;function bJ(a){let[b,c,d,e,f,g,h,i,j]=a,k="-"===b[0],l=i&&"-"===i[0],m=(a,b=!1)=>void 0!==a&&(b||a&&k)?-a:a;return[{years:m(aV(c)),months:m(aV(d)),weeks:m(aV(e)),days:m(aV(f)),hours:m(aV(g)),minutes:m(aV(h)),seconds:m(aV(i),"-0"===i),milliseconds:m(aW(j),l)}]}let bK={GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function bL(a,b,c,d,e,f,g){let h={year:2===b.length?a2(aU(b)):aU(b),month:ba.indexOf(c)+1,day:aU(d),hour:aU(e),minute:aU(f)};return g&&(h.second=aU(g)),a&&(h.weekday=a.length>3?bd.indexOf(a)+1:be.indexOf(a)+1),h}let bM=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function bN(a){let[,b,c,d,e,f,g,h,i,j,k,l]=a;return[bL(b,e,d,c,f,g,h),new af(i?bK[i]:j?0:a4(k,l))]}let bO=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,bP=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,bQ=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function bR(a){let[,b,c,d,e,f,g,h]=a;return[bL(b,e,d,c,f,g,h),af.utcInstance]}function bS(a){let[,b,c,d,e,f,g,h]=a;return[bL(b,h,c,d,e,f,g),af.utcInstance]}let bT=bq(/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,by),bU=bq(/(\d{4})-?W(\d\d)(?:-?(\d))?/,by),bV=bq(/(\d{4})-?(\d{3})/,by),bW=bq(bx),bX=br(function(a,b){return[{year:bD(a,b),month:bD(a,b+1,1),day:bD(a,b+2,1)},null,b+3]},bE,bF,bG),bY=br(bz,bE,bF,bG),bZ=br(bA,bE,bF,bG),b$=br(bE,bF,bG),b_=br(bE),b0=bq(/(\d{4})-(\d\d)-(\d\d)/,bC),b1=bq(bB),b2=br(bE,bF,bG),b3="Invalid Duration",b4={weeks:{days:7,hours:168,minutes:10080,seconds:604800,milliseconds:6048e5},days:{hours:24,minutes:1440,seconds:86400,milliseconds:864e5},hours:{minutes:60,seconds:3600,milliseconds:36e5},minutes:{seconds:60,milliseconds:6e4},seconds:{milliseconds:1e3}},b5={years:{quarters:4,months:12,weeks:52,days:365,hours:8760,minutes:525600,seconds:31536e3,milliseconds:31536e6},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:131040,seconds:7862400,milliseconds:78624e5},months:{weeks:4,days:30,hours:720,minutes:43200,seconds:2592e3,milliseconds:2592e6},...b4},b6={years:{quarters:4,months:12,weeks:52.1775,days:365.2425,hours:8765.82,minutes:525949.2,seconds:0x1e18558,milliseconds:31556952e3},quarters:{months:3,weeks:13.044375,days:91.310625,hours:2191.455,minutes:131487.3,seconds:7889238,milliseconds:7889238e3},months:{weeks:30.436875/7,days:30.436875,hours:730.485,minutes:43829.1,seconds:2629746,milliseconds:2629746e3},...b4},b7=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],b8=b7.slice(0).reverse();function b9(a,b,c=!1){return new cd({values:c?b.values:{...a.values,...b.values||{}},loc:a.loc.clone(b.loc),conversionAccuracy:b.conversionAccuracy||a.conversionAccuracy,matrix:b.matrix||a.matrix})}function ca(a,b){var c;let d=null!=(c=b.milliseconds)?c:0;for(let c of b8.slice(1))b[c]&&(d+=b[c]*a[c].milliseconds);return d}function cb(a,b){let c=0>ca(a,b)?-1:1;b7.reduceRight((d,e)=>{if(aK(b[e]))return d;if(d){let f=b[d]*c,g=a[e][d],h=Math.floor(f/g);b[e]+=h*c,b[d]-=h*g*c}return e},null),b7.reduce((c,d)=>{if(aK(b[d]))return c;if(c){let e=b[c]%1;b[c]-=e,b[d]+=e*a[c][d]}return d},null)}function cc(a){let b={};for(let[c,d]of Object.entries(a))0!==d&&(b[c]=d);return b}class cd{constructor(a){let b="longterm"===a.conversionAccuracy,c=b?b6:b5;a.matrix&&(c=a.matrix),this.values=a.values,this.loc=a.loc||ad.create(),this.conversionAccuracy=b?"longterm":"casual",this.invalid=a.invalid||null,this.matrix=c,this.isLuxonDuration=!0}static fromMillis(a,b){return cd.fromObject({milliseconds:a},b)}static fromObject(a,b={}){if(null==a||"object"!=typeof a)throw new j(`Duration.fromObject: argument expected to be an object, got ${null===a?"null":typeof a}`);return new cd({values:a6(a,cd.normalizeUnit),loc:ad.fromObject(b),conversionAccuracy:b.conversionAccuracy,matrix:b.matrix})}static fromDurationLike(a){if(aL(a))return cd.fromMillis(a);if(cd.isDuration(a))return a;if("object"==typeof a)return cd.fromObject(a);throw new j(`Unknown duration argument ${a} of type ${typeof a}`)}static fromISO(a,b){let[c]=bs(a,[bI,bJ]);return c?cd.fromObject(c,b):cd.invalid("unparsable",`the input "${a}" can't be parsed as ISO 8601`)}static fromISOTime(a,b){let[c]=bs(a,[bH,b_]);return c?cd.fromObject(c,b):cd.invalid("unparsable",`the input "${a}" can't be parsed as ISO 8601`)}static invalid(a,b=null){if(!a)throw new j("need to specify a reason the Duration is invalid");let c=a instanceof aw?a:new aw(a,b);if(!av.throwOnInvalid)return new cd({invalid:c});throw new g(c)}static normalizeUnit(a){let b={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[a?a.toLowerCase():a];if(!b)throw new i(a);return b}static isDuration(a){return a&&a.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(a,b={}){let c={...b,floor:!1!==b.round&&!1!==b.floor};return this.isValid?bo.create(this.loc,c).formatDurationFromString(this,a):b3}toHuman(a={}){if(!this.isValid)return b3;let b=!1!==a.showZeros,c=b7.map(c=>{let d=this.values[c];return aK(d)||0===d&&!b?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...a,unit:c.slice(0,-1)}).format(d)}).filter(a=>a);return this.loc.listFormatter({type:"conjunction",style:a.listStyle||"narrow",...a}).format(c)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let a="P";return 0!==this.years&&(a+=this.years+"Y"),(0!==this.months||0!==this.quarters)&&(a+=this.months+3*this.quarters+"M"),0!==this.weeks&&(a+=this.weeks+"W"),0!==this.days&&(a+=this.days+"D"),(0!==this.hours||0!==this.minutes||0!==this.seconds||0!==this.milliseconds)&&(a+="T"),0!==this.hours&&(a+=this.hours+"H"),0!==this.minutes&&(a+=this.minutes+"M"),(0!==this.seconds||0!==this.milliseconds)&&(a+=aX(this.seconds+this.milliseconds/1e3,3)+"S"),"P"===a&&(a+="T0S"),a}toISOTime(a={}){if(!this.isValid)return null;let b=this.toMillis();return b<0||b>=864e5?null:(a={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...a,includeOffset:!1},cV.fromMillis(b,{zone:"UTC"}).toISOTime(a))}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Duration { values: ${JSON.stringify(this.values)} }`:`Duration { Invalid, reason: ${this.invalidReason} }`}toMillis(){return this.isValid?ca(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(a){if(!this.isValid)return this;let b=cd.fromDurationLike(a),c={};for(let a of b7)(aQ(b.values,a)||aQ(this.values,a))&&(c[a]=b.get(a)+this.get(a));return b9(this,{values:c},!0)}minus(a){if(!this.isValid)return this;let b=cd.fromDurationLike(a);return this.plus(b.negate())}mapUnits(a){if(!this.isValid)return this;let b={};for(let c of Object.keys(this.values))b[c]=a5(a(this.values[c],c));return b9(this,{values:b},!0)}get(a){return this[cd.normalizeUnit(a)]}set(a){return this.isValid?b9(this,{values:{...this.values,...a6(a,cd.normalizeUnit)}}):this}reconfigure({locale:a,numberingSystem:b,conversionAccuracy:c,matrix:d}={}){return b9(this,{loc:this.loc.clone({locale:a,numberingSystem:b}),matrix:d,conversionAccuracy:c})}as(a){return this.isValid?this.shiftTo(a).get(a):NaN}normalize(){if(!this.isValid)return this;let a=this.toObject();return cb(this.matrix,a),b9(this,{values:a},!0)}rescale(){return this.isValid?b9(this,{values:cc(this.normalize().shiftToAll().toObject())},!0):this}shiftTo(...a){let b;if(!this.isValid||0===a.length)return this;a=a.map(a=>cd.normalizeUnit(a));let c={},d={},e=this.toObject();for(let f of b7)if(a.indexOf(f)>=0){b=f;let a=0;for(let b in d)a+=this.matrix[b][f]*d[b],d[b]=0;aL(e[f])&&(a+=e[f]);let g=Math.trunc(a);c[f]=g,d[f]=(1e3*a-1e3*g)/1e3}else aL(e[f])&&(d[f]=e[f]);for(let a in d)0!==d[a]&&(c[b]+=a===b?d[a]:d[a]/this.matrix[b][a]);return cb(this.matrix,c),b9(this,{values:c},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;let a={};for(let b of Object.keys(this.values))a[b]=0===this.values[b]?0:-this.values[b];return b9(this,{values:a},!0)}removeZeros(){return this.isValid?b9(this,{values:cc(this.values)},!0):this}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(a){if(!this.isValid||!a.isValid||!this.loc.equals(a.loc))return!1;for(let d of b7){var b,c;if(b=this.values[d],c=a.values[d],void 0===b||0===b?void 0!==c&&0!==c:b!==c)return!1}return!0}}let ce="Invalid Interval";class cf{constructor(a){this.s=a.start,this.e=a.end,this.invalid=a.invalid||null,this.isLuxonInterval=!0}static invalid(a,b=null){if(!a)throw new j("need to specify a reason the Interval is invalid");let c=a instanceof aw?a:new aw(a,b);if(!av.throwOnInvalid)return new cf({invalid:c});throw new f(c)}static fromDateTimes(a,b){var c,d;let e=cW(a),f=cW(b),g=(c=e,d=f,c&&c.isValid?d&&d.isValid?d<c?cf.invalid("end before start",`The end of an interval must be after its start, but you had start=${c.toISO()} and end=${d.toISO()}`):null:cf.invalid("missing or invalid end"):cf.invalid("missing or invalid start"));return null==g?new cf({start:e,end:f}):g}static after(a,b){let c=cd.fromDurationLike(b),d=cW(a);return cf.fromDateTimes(d,d.plus(c))}static before(a,b){let c=cd.fromDurationLike(b),d=cW(a);return cf.fromDateTimes(d.minus(c),d)}static fromISO(a,b){let[c,d]=(a||"").split("/",2);if(c&&d){let a,e,f,g;try{e=(a=cV.fromISO(c,b)).isValid}catch(a){e=!1}try{g=(f=cV.fromISO(d,b)).isValid}catch(a){g=!1}if(e&&g)return cf.fromDateTimes(a,f);if(e){let c=cd.fromISO(d,b);if(c.isValid)return cf.after(a,c)}else if(g){let a=cd.fromISO(c,b);if(a.isValid)return cf.before(f,a)}}return cf.invalid("unparsable",`the input "${a}" can't be parsed as ISO 8601`)}static isInterval(a){return a&&a.isLuxonInterval||!1}get start(){return this.isValid?this.s:null}get end(){return this.isValid?this.e:null}get lastDateTime(){return this.isValid&&this.e?this.e.minus(1):null}get isValid(){return null===this.invalidReason}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}length(a="milliseconds"){return this.isValid?this.toDuration(a).get(a):NaN}count(a="milliseconds",b){let c;if(!this.isValid)return NaN;let d=this.start.startOf(a,b);return Math.floor((c=(c=null!=b&&b.useLocaleWeeks?this.end.reconfigure({locale:d.locale}):this.end).startOf(a,b)).diff(d,a).get(a))+(c.valueOf()!==this.end.valueOf())}hasSame(a){return!!this.isValid&&(this.isEmpty()||this.e.minus(1).hasSame(this.s,a))}isEmpty(){return this.s.valueOf()===this.e.valueOf()}isAfter(a){return!!this.isValid&&this.s>a}isBefore(a){return!!this.isValid&&this.e<=a}contains(a){return!!this.isValid&&this.s<=a&&this.e>a}set({start:a,end:b}={}){return this.isValid?cf.fromDateTimes(a||this.s,b||this.e):this}splitAt(...a){if(!this.isValid)return[];let b=a.map(cW).filter(a=>this.contains(a)).sort((a,b)=>a.toMillis()-b.toMillis()),c=[],{s:d}=this,e=0;for(;d<this.e;){let a=b[e]||this.e,f=+a>+this.e?this.e:a;c.push(cf.fromDateTimes(d,f)),d=f,e+=1}return c}splitBy(a){let b=cd.fromDurationLike(a);if(!this.isValid||!b.isValid||0===b.as("milliseconds"))return[];let{s:c}=this,d=1,e,f=[];for(;c<this.e;){let a=this.start.plus(b.mapUnits(a=>a*d));e=+a>+this.e?this.e:a,f.push(cf.fromDateTimes(c,e)),c=e,d+=1}return f}divideEqually(a){return this.isValid?this.splitBy(this.length()/a).slice(0,a):[]}overlaps(a){return this.e>a.s&&this.s<a.e}abutsStart(a){return!!this.isValid&&+this.e==+a.s}abutsEnd(a){return!!this.isValid&&+a.e==+this.s}engulfs(a){return!!this.isValid&&this.s<=a.s&&this.e>=a.e}equals(a){return!!this.isValid&&!!a.isValid&&this.s.equals(a.s)&&this.e.equals(a.e)}intersection(a){if(!this.isValid)return this;let b=this.s>a.s?this.s:a.s,c=this.e<a.e?this.e:a.e;return b>=c?null:cf.fromDateTimes(b,c)}union(a){if(!this.isValid)return this;let b=this.s<a.s?this.s:a.s,c=this.e>a.e?this.e:a.e;return cf.fromDateTimes(b,c)}static merge(a){let[b,c]=a.sort((a,b)=>a.s-b.s).reduce(([a,b],c)=>b?b.overlaps(c)||b.abutsStart(c)?[a,b.union(c)]:[a.concat([b]),c]:[a,c],[[],null]);return c&&b.push(c),b}static xor(a){let b=null,c=0,d=[],e=a.map(a=>[{time:a.s,type:"s"},{time:a.e,type:"e"}]);for(let a of Array.prototype.concat(...e).sort((a,b)=>a.time-b.time))1===(c+="s"===a.type?1:-1)?b=a.time:(b&&+b!=+a.time&&d.push(cf.fromDateTimes(b,a.time)),b=null);return cf.merge(d)}difference(...a){return cf.xor([this].concat(a)).map(a=>this.intersection(a)).filter(a=>a&&!a.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} – ${this.e.toISO()})`:ce}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(a=o,b={}){return this.isValid?bo.create(this.s.loc.clone(b),a).formatInterval(this):ce}toISO(a){return this.isValid?`${this.s.toISO(a)}/${this.e.toISO(a)}`:ce}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:ce}toISOTime(a){return this.isValid?`${this.s.toISOTime(a)}/${this.e.toISOTime(a)}`:ce}toFormat(a,{separator:b=" – "}={}){return this.isValid?`${this.s.toFormat(a)}${b}${this.e.toFormat(a)}`:ce}toDuration(a,b){return this.isValid?this.e.diff(this.s,a,b):cd.invalid(this.invalidReason)}mapEndpoints(a){return cf.fromDateTimes(a(this.s),a(this.e))}}class cg{static hasDST(a=av.defaultZone){let b=cV.now().setZone(a).set({month:12});return!a.isUniversal&&b.offset!==b.set({month:6}).offset}static isValidIANAZone(a){return Q.isValidZone(a)}static normalizeZone(a){return ah(a,av.defaultZone)}static getStartOfWeek({locale:a=null,locObj:b=null}={}){return(b||ad.create(a)).getStartOfWeek()}static getMinimumDaysInFirstWeek({locale:a=null,locObj:b=null}={}){return(b||ad.create(a)).getMinDaysInFirstWeek()}static getWeekendWeekdays({locale:a=null,locObj:b=null}={}){return(b||ad.create(a)).getWeekendDays().slice()}static months(a="long",{locale:b=null,numberingSystem:c=null,locObj:d=null,outputCalendar:e="gregory"}={}){return(d||ad.create(b,c,e)).months(a)}static monthsFormat(a="long",{locale:b=null,numberingSystem:c=null,locObj:d=null,outputCalendar:e="gregory"}={}){return(d||ad.create(b,c,e)).months(a,!0)}static weekdays(a="long",{locale:b=null,numberingSystem:c=null,locObj:d=null}={}){return(d||ad.create(b,c,null)).weekdays(a)}static weekdaysFormat(a="long",{locale:b=null,numberingSystem:c=null,locObj:d=null}={}){return(d||ad.create(b,c,null)).weekdays(a,!0)}static meridiems({locale:a=null}={}){return ad.create(a).meridiems()}static eras(a="short",{locale:b=null}={}){return ad.create(b,null,"gregory").eras(a)}static features(){return{relative:aN(),localeWeek:aO()}}}function ch(a,b){let c=a=>a.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),d=c(b)-c(a);return Math.floor(cd.fromMillis(d).as("days"))}function ci(a,b=a=>a){return{regex:a,deser:([a])=>b(function(a){let b=parseInt(a,10);if(!isNaN(b))return b;b="";for(let c=0;c<a.length;c++){let d=a.charCodeAt(c);if(-1!==a[c].search(ai.hanidec))b+=ak.indexOf(a[c]);else for(let a in aj){let[c,e]=aj[a];d>=c&&d<=e&&(b+=d-c)}}return parseInt(b,10)}(a))}}let cj=String.fromCharCode(160),ck=`[ ${cj}]`,cl=RegExp(ck,"g");function cm(a){return a.replace(/\./g,"\\.?").replace(cl,ck)}function cn(a){return a.replace(/\./g,"").replace(cl," ").toLowerCase()}function co(a,b){return null===a?null:{regex:RegExp(a.map(cm).join("|")),deser:([c])=>a.findIndex(a=>cn(c)===cn(a))+b}}function cp(a,b){return{regex:a,deser:([,a,b])=>a4(a,b),groups:b}}function cq(a){return{regex:a,deser:([a])=>a}}let cr={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}},cs=null;function ct(a,b){return Array.prototype.concat(...a.map(a=>(function(a,b){if(a.literal)return a;let c=cw(bo.macroTokenToFormatOpts(a.val),b);return null==c||c.includes(void 0)?a:c})(a,b)))}class cu{constructor(a,b){if(this.locale=a,this.format=b,this.tokens=ct(bo.parseFormat(b),a),this.units=this.tokens.map(b=>(function(a,b){let c=am(b),d=am(b,"{2}"),e=am(b,"{3}"),f=am(b,"{4}"),g=am(b,"{6}"),h=am(b,"{1,2}"),i=am(b,"{1,3}"),j=am(b,"{1,6}"),k=am(b,"{1,9}"),l=am(b,"{2,4}"),m=am(b,"{4,6}"),n=a=>({regex:RegExp(a.val.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")),deser:([a])=>a,literal:!0}),o=(o=>{if(a.literal)return n(o);switch(o.val){case"G":return co(b.eras("short"),0);case"GG":return co(b.eras("long"),0);case"y":return ci(j);case"yy":case"kk":return ci(l,a2);case"yyyy":case"kkkk":return ci(f);case"yyyyy":return ci(m);case"yyyyyy":return ci(g);case"M":case"L":case"d":case"H":case"h":case"m":case"q":case"s":case"W":return ci(h);case"MM":case"LL":case"dd":case"HH":case"hh":case"mm":case"qq":case"ss":case"WW":return ci(d);case"MMM":return co(b.months("short",!0),1);case"MMMM":return co(b.months("long",!0),1);case"LLL":return co(b.months("short",!1),1);case"LLLL":return co(b.months("long",!1),1);case"o":case"S":return ci(i);case"ooo":case"SSS":return ci(e);case"u":return cq(k);case"uu":return cq(h);case"uuu":case"E":case"c":return ci(c);case"a":return co(b.meridiems(),0);case"EEE":return co(b.weekdays("short",!1),1);case"EEEE":return co(b.weekdays("long",!1),1);case"ccc":return co(b.weekdays("short",!0),1);case"cccc":return co(b.weekdays("long",!0),1);case"Z":case"ZZ":return cp(RegExp(`([+-]${h.source})(?::(${d.source}))?`),2);case"ZZZ":return cp(RegExp(`([+-]${h.source})(${d.source})?`),2);case"z":return cq(/[a-z_+-/]{1,256}?/i);case" ":return cq(/[^\S\n\r]/);default:return n(o)}})(a)||{invalidReason:"missing Intl.DateTimeFormat.formatToParts support"};return o.token=a,o})(b,a)),this.disqualifyingUnit=this.units.find(a=>a.invalidReason),!this.disqualifyingUnit){let[a,b]=function(a){let b=a.map(a=>a.regex).reduce((a,b)=>`${a}(${b.source})`,"");return[`^${b}$`,a]}(this.units);this.regex=RegExp(a,"i"),this.handlers=b}}explainFromTokens(a){if(!this.isValid)return{input:a,tokens:this.tokens,invalidReason:this.invalidReason};{let b,c,[d,e]=function(a,b,c){let d=a.match(b);if(!d)return[d,{}];{let a={},b=1;for(let e in c)if(aQ(c,e)){let f=c[e],g=f.groups?f.groups+1:1;!f.literal&&f.token&&(a[f.token.val[0]]=f.deser(d.slice(b,b+g))),b+=g}return[d,a]}}(a,this.regex,this.handlers),[f,g,i]=e?(c=null,aK(e.z)||(c=Q.create(e.z)),aK(e.Z)||(c||(c=new af(e.Z)),b=e.Z),aK(e.q)||(e.M=(e.q-1)*3+1),aK(e.h)||(e.h<12&&1===e.a?e.h+=12:12===e.h&&0===e.a&&(e.h=0)),0===e.G&&e.y&&(e.y=-e.y),aK(e.u)||(e.S=aW(e.u)),[Object.keys(e).reduce((a,b)=>{let c=(a=>{switch(a){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}})(b);return c&&(a[c]=e[b]),a},{}),c,b]):[null,null,void 0];if(aQ(e,"a")&&aQ(e,"H"))throw new h("Can't include meridiem when specifying 24-hour format");return{input:a,tokens:this.tokens,regex:this.regex,rawMatches:d,matches:e,result:f,zone:g,specificOffset:i}}}get isValid(){return!this.disqualifyingUnit}get invalidReason(){return this.disqualifyingUnit?this.disqualifyingUnit.invalidReason:null}}function cv(a,b,c){return new cu(a,c).explainFromTokens(b)}function cw(a,b){if(!a)return null;let c=bo.create(b,a).dtFormatter((cs||(cs=cV.fromMillis(0x16a2e5618e3)),cs)),d=c.formatToParts(),e=c.resolvedOptions();return d.map(b=>(function(a,b,c){let{type:d,value:e}=a;if("literal"===d){let a=/^\s+$/.test(e);return{literal:!a,val:a?" ":e}}let f=b[d],g=d;"hour"===d&&(g=null!=b.hour12?b.hour12?"hour12":"hour24":null!=b.hourCycle?"h11"===b.hourCycle||"h12"===b.hourCycle?"hour12":"hour24":c.hour12?"hour12":"hour24");let h=cr[g];if("object"==typeof h&&(h=h[f]),h)return{literal:!1,val:h}})(b,a,e))}let cx="Invalid DateTime";function cy(a){return new aw("unsupported zone",`the zone "${a.name}" is not supported`)}function cz(a){return null===a.weekData&&(a.weekData=aD(a.c)),a.weekData}function cA(a){return null===a.localWeekData&&(a.localWeekData=aD(a.c,a.loc.getMinDaysInFirstWeek(),a.loc.getStartOfWeek())),a.localWeekData}function cB(a,b){let c={ts:a.ts,zone:a.zone,c:a.c,o:a.o,loc:a.loc,invalid:a.invalid};return new cV({...c,...b,old:c})}function cC(a,b,c){let d=a-60*b*1e3,e=c.offset(d);if(b===e)return[d,b];d-=(e-b)*6e4;let f=c.offset(d);return e===f?[d,e]:[a-60*Math.min(e,f)*1e3,Math.max(e,f)]}function cD(a,b){let c=new Date(a+=60*b*1e3);return{year:c.getUTCFullYear(),month:c.getUTCMonth()+1,day:c.getUTCDate(),hour:c.getUTCHours(),minute:c.getUTCMinutes(),second:c.getUTCSeconds(),millisecond:c.getUTCMilliseconds()}}function cE(a,b){let c=a.o,d=a.c.year+Math.trunc(b.years),e=a.c.month+Math.trunc(b.months)+3*Math.trunc(b.quarters),f={...a.c,year:d,month:e,day:Math.min(a.c.day,a$(d,e))+Math.trunc(b.days)+7*Math.trunc(b.weeks)},g=cd.fromObject({years:b.years-Math.trunc(b.years),quarters:b.quarters-Math.trunc(b.quarters),months:b.months-Math.trunc(b.months),weeks:b.weeks-Math.trunc(b.weeks),days:b.days-Math.trunc(b.days),hours:b.hours,minutes:b.minutes,seconds:b.seconds,milliseconds:b.milliseconds}).as("milliseconds"),[h,i]=cC(a_(f),c,a.zone);return 0!==g&&(h+=g,i=a.zone.offset(h)),{ts:h,o:i}}function cF(a,b,c,d,e,f){let{setZone:g,zone:h}=c;if((!a||0===Object.keys(a).length)&&!b)return cV.invalid(new aw("unparsable",`the input "${e}" can't be parsed as ${d}`));{let d=cV.fromObject(a,{...c,zone:b||h,specificOffset:f});return g?d:d.setZone(h)}}function cG(a,b,c=!0){return a.isValid?bo.create(ad.create("en-US"),{allowZ:c,forceSimple:!0}).formatDateTimeFromString(a,b):null}function cH(a,b,c){let d=a.c.year>9999||a.c.year<0,e="";if(d&&a.c.year>=0&&(e+="+"),e+=aT(a.c.year,d?6:4),"year"===c)return e;if(b){if(e+="-",e+=aT(a.c.month),"month"===c)return e;e+="-"}else if(e+=aT(a.c.month),"month"===c)return e;return e+aT(a.c.day)}function cI(a,b,c,d,e,f,g){let h=!c||0!==a.c.millisecond||0!==a.c.second,i="";switch(g){case"day":case"month":case"year":break;default:if(i+=aT(a.c.hour),"hour"===g)break;if(b){if(i+=":",i+=aT(a.c.minute),"minute"===g)break;h&&(i+=":",i+=aT(a.c.second))}else{if(i+=aT(a.c.minute),"minute"===g)break;h&&(i+=aT(a.c.second))}if("second"===g)break;h&&(!d||0!==a.c.millisecond)&&(i+=".",i+=aT(a.c.millisecond,3))}return e&&(a.isOffsetFixed&&0===a.offset&&!f?i+="Z":a.o<0?(i+="-",i+=aT(Math.trunc(-a.o/60)),i+=":",i+=aT(Math.trunc(-a.o%60))):(i+="+",i+=aT(Math.trunc(a.o/60)),i+=":",i+=aT(Math.trunc(a.o%60)))),f&&(i+="["+a.zone.ianaName+"]"),i}let cJ={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},cK={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},cL={ordinal:1,hour:0,minute:0,second:0,millisecond:0},cM=["year","month","day","hour","minute","second","millisecond"],cN=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],cO=["year","ordinal","hour","minute","second","millisecond"];function cP(a){let b={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[a.toLowerCase()];if(!b)throw new i(a);return b}function cQ(a){switch(a.toLowerCase()){case"localweekday":case"localweekdays":return"localWeekday";case"localweeknumber":case"localweeknumbers":return"localWeekNumber";case"localweekyear":case"localweekyears":return"localWeekYear";default:return cP(a)}}function cR(a,b){let d,e,f=ah(b.zone,av.defaultZone);if(!f.isValid)return cV.invalid(cy(f));let g=ad.fromObject(b);if(aK(a.year))d=av.now();else{for(let b of cM)aK(a[b])&&(a[b]=cJ[b]);let b=aI(a)||aJ(a);if(b)return cV.invalid(b);let g=function(a){if(void 0===c&&(c=av.now()),"iana"!==a.type)return a.offset(c);let b=a.name,d=cU.get(b);return void 0===d&&(d=a.offset(c),cU.set(b,d)),d}(f);[d,e]=cC(a_(a),g,f)}return new cV({ts:d,zone:f,loc:g,o:e})}function cS(a,b,c){let d=!!aK(c.round)||c.round,e=aK(c.rounding)?"trunc":c.rounding,f=(a,f)=>(a=aX(a,d||c.calendary?0:2,c.calendary?"round":e),b.loc.clone(c).relFormatter(c).format(a,f)),g=d=>c.calendary?b.hasSame(a,d)?0:b.startOf(d).diff(a.startOf(d),d).get(d):b.diff(a,d).get(d);if(c.unit)return f(g(c.unit),c.unit);for(let a of c.units){let b=g(a);if(Math.abs(b)>=1)return f(b,a)}return f(a>b?-0:0,c.units[c.units.length-1])}function cT(a){let b={},c;return a.length>0&&"object"==typeof a[a.length-1]?(b=a[a.length-1],c=Array.from(a).slice(0,a.length-1)):c=Array.from(a),[b,c]}let cU=new Map;class cV{constructor(a){let b=a.zone||av.defaultZone,c=a.invalid||(Number.isNaN(a.ts)?new aw("invalid input"):null)||(b.isValid?null:cy(b));this.ts=aK(a.ts)?av.now():a.ts;let d=null,e=null;if(!c)if(a.old&&a.old.ts===this.ts&&a.old.zone.equals(b))[d,e]=[a.old.c,a.old.o];else{let f=aL(a.o)&&!a.old?a.o:b.offset(this.ts);d=(c=Number.isNaN((d=cD(this.ts,f)).year)?new aw("invalid input"):null)?null:d,e=c?null:f}this._zone=b,this.loc=a.loc||ad.create(),this.invalid=c,this.weekData=null,this.localWeekData=null,this.c=d,this.o=e,this.isLuxonDateTime=!0}static now(){return new cV({})}static local(){let[a,b]=cT(arguments),[c,d,e,f,g,h,i]=b;return cR({year:c,month:d,day:e,hour:f,minute:g,second:h,millisecond:i},a)}static utc(){let[a,b]=cT(arguments),[c,d,e,f,g,h,i]=b;return a.zone=af.utcInstance,cR({year:c,month:d,day:e,hour:f,minute:g,second:h,millisecond:i},a)}static fromJSDate(a,b={}){let c="[object Date]"===Object.prototype.toString.call(a)?a.valueOf():NaN;if(Number.isNaN(c))return cV.invalid("invalid input");let d=ah(b.zone,av.defaultZone);return d.isValid?new cV({ts:c,zone:d,loc:ad.fromObject(b)}):cV.invalid(cy(d))}static fromMillis(a,b={}){if(aL(a))if(a<-864e13||a>864e13)return cV.invalid("Timestamp out of range");else return new cV({ts:a,zone:ah(b.zone,av.defaultZone),loc:ad.fromObject(b)});throw new j(`fromMillis requires a numerical input, but received a ${typeof a} with value ${a}`)}static fromSeconds(a,b={}){if(aL(a))return new cV({ts:1e3*a,zone:ah(b.zone,av.defaultZone),loc:ad.fromObject(b)});throw new j("fromSeconds requires a numerical input")}static fromObject(a,b={}){var c;a=a||{};let d=ah(b.zone,av.defaultZone);if(!d.isValid)return cV.invalid(cy(d));let e=ad.fromObject(b),f=a6(a,cQ),{minDaysInFirstWeek:g,startOfWeek:i}=aH(f,e),j=av.now(),k=aK(b.specificOffset)?d.offset(j):b.specificOffset,l=!aK(f.ordinal),m=!aK(f.year),n=!aK(f.month)||!aK(f.day),o=m||n,p=f.weekYear||f.weekNumber;if((o||l)&&p)throw new h("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(n&&l)throw new h("Can't mix ordinal dates with month/day");let q=p||f.weekday&&!o,r,s,t=cD(j,k);q?(r=cN,s=cK,t=aD(t,g,i)):l?(r=cO,s=cL,t=aF(t)):(r=cM,s=cJ);let u=!1;for(let a of r)aK(f[a])?u?f[a]=s[a]:f[a]=t[a]:u=!0;let v=(q?function(a,b=4,c=1){let d=aM(a.weekYear),e=aS(a.weekNumber,1,a1(a.weekYear,b,c)),f=aS(a.weekday,1,7);return d?e?!f&&az("weekday",a.weekday):az("week",a.weekNumber):az("weekYear",a.weekYear)}(f,g,i):l?function(a){let b=aM(a.year),c=aS(a.ordinal,1,aZ(a.year));return b?!c&&az("ordinal",a.ordinal):az("year",a.year)}(f):aI(f))||aJ(f);if(v)return cV.invalid(v);let[w,x]=(c=q?aE(f,g,i):l?aG(f):f,cC(a_(c),k,d)),y=new cV({ts:w,zone:d,o:x,loc:e});return f.weekday&&o&&a.weekday!==y.weekday?cV.invalid("mismatched weekday",`you can't specify both a weekday of ${f.weekday} and a date of ${y.toISO()}`):y.isValid?y:cV.invalid(y.invalid)}static fromISO(a,b={}){let[c,d]=bs(a,[bT,bX],[bU,bY],[bV,bZ],[bW,b$]);return cF(c,d,b,"ISO 8601",a)}static fromRFC2822(a,b={}){let[c,d]=bs(a.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim(),[bM,bN]);return cF(c,d,b,"RFC 2822",a)}static fromHTTP(a,b={}){let[c,d]=bs(a,[bO,bR],[bP,bR],[bQ,bS]);return cF(c,d,b,"HTTP",b)}static fromFormat(a,b,c={}){if(aK(a)||aK(b))throw new j("fromFormat requires an input string and a format");let{locale:d=null,numberingSystem:e=null}=c,[f,g,h,i]=function(a,b,c){let{result:d,zone:e,specificOffset:f,invalidReason:g}=cv(a,b,c);return[d,e,f,g]}(ad.fromOpts({locale:d,numberingSystem:e,defaultToEN:!0}),a,b);return i?cV.invalid(i):cF(f,g,c,`format ${b}`,a,h)}static fromString(a,b,c={}){return cV.fromFormat(a,b,c)}static fromSQL(a,b={}){let[c,d]=bs(a,[b0,bX],[b1,b2]);return cF(c,d,b,"SQL",a)}static invalid(a,b=null){if(!a)throw new j("need to specify a reason the DateTime is invalid");let c=a instanceof aw?a:new aw(a,b);if(!av.throwOnInvalid)return new cV({invalid:c});throw new e(c)}static isDateTime(a){return a&&a.isLuxonDateTime||!1}static parseFormatForOpts(a,b={}){let c=cw(a,ad.fromObject(b));return c?c.map(a=>a?a.val:null).join(""):null}static expandFormat(a,b={}){return ct(bo.parseFormat(a),ad.fromObject(b)).map(a=>a.val).join("")}static resetCache(){c=void 0,cU.clear()}get(a){return this[a]}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?cz(this).weekYear:NaN}get weekNumber(){return this.isValid?cz(this).weekNumber:NaN}get weekday(){return this.isValid?cz(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?cA(this).weekday:NaN}get localWeekNumber(){return this.isValid?cA(this).weekNumber:NaN}get localWeekYear(){return this.isValid?cA(this).weekYear:NaN}get ordinal(){return this.isValid?aF(this.c).ordinal:NaN}get monthShort(){return this.isValid?cg.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?cg.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?cg.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?cg.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return!this.isOffsetFixed&&(this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset)}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];let a=a_(this.c),b=this.zone.offset(a-864e5),c=this.zone.offset(a+864e5),d=this.zone.offset(a-6e4*b),e=this.zone.offset(a-6e4*c);if(d===e)return[this];let f=a-6e4*d,g=a-6e4*e,h=cD(f,d),i=cD(g,e);return h.hour===i.hour&&h.minute===i.minute&&h.second===i.second&&h.millisecond===i.millisecond?[cB(this,{ts:f}),cB(this,{ts:g})]:[this]}get isInLeapYear(){return aY(this.year)}get daysInMonth(){return a$(this.year,this.month)}get daysInYear(){return this.isValid?aZ(this.year):NaN}get weeksInWeekYear(){return this.isValid?a1(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?a1(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(a={}){let{locale:b,numberingSystem:c,calendar:d}=bo.create(this.loc.clone(a),a).resolvedOptions(this);return{locale:b,numberingSystem:c,outputCalendar:d}}toUTC(a=0,b={}){return this.setZone(af.instance(a),b)}toLocal(){return this.setZone(av.defaultZone)}setZone(a,{keepLocalTime:b=!1,keepCalendarTime:c=!1}={}){if((a=ah(a,av.defaultZone)).equals(this.zone))return this;{if(!a.isValid)return cV.invalid(cy(a));let e=this.ts;if(b||c){var d;let b=a.offset(this.ts),c=this.toObject();[e]=(d=a,cC(a_(c),b,d))}return cB(this,{ts:e,zone:a})}}reconfigure({locale:a,numberingSystem:b,outputCalendar:c}={}){return cB(this,{loc:this.loc.clone({locale:a,numberingSystem:b,outputCalendar:c})})}setLocale(a){return this.reconfigure({locale:a})}set(a){var b,c,d;let e;if(!this.isValid)return this;let f=a6(a,cQ),{minDaysInFirstWeek:g,startOfWeek:i}=aH(f,this.loc),j=!aK(f.weekYear)||!aK(f.weekNumber)||!aK(f.weekday),k=!aK(f.ordinal),l=!aK(f.year),m=!aK(f.month)||!aK(f.day),n=f.weekYear||f.weekNumber;if((l||m||k)&&n)throw new h("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(m&&k)throw new h("Can't mix ordinal dates with month/day");j?e=aE({...aD(this.c,g,i),...f},g,i):aK(f.ordinal)?(e={...this.toObject(),...f},aK(f.day)&&(e.day=Math.min(a$(e.year,e.month),e.day))):e=aG({...aF(this.c),...f});let[o,p]=(b=e,c=this.o,d=this.zone,cC(a_(b),c,d));return cB(this,{ts:o,o:p})}plus(a){return this.isValid?cB(this,cE(this,cd.fromDurationLike(a))):this}minus(a){return this.isValid?cB(this,cE(this,cd.fromDurationLike(a).negate())):this}startOf(a,{useLocaleWeeks:b=!1}={}){if(!this.isValid)return this;let c={},d=cd.normalizeUnit(a);switch(d){case"years":c.month=1;case"quarters":case"months":c.day=1;case"weeks":case"days":c.hour=0;case"hours":c.minute=0;case"minutes":c.second=0;case"seconds":c.millisecond=0}if("weeks"===d)if(b){let a=this.loc.getStartOfWeek(),{weekday:b}=this;b<a&&(c.weekNumber=this.weekNumber-1),c.weekday=a}else c.weekday=1;return"quarters"===d&&(c.month=(Math.ceil(this.month/3)-1)*3+1),this.set(c)}endOf(a,b){return this.isValid?this.plus({[a]:1}).startOf(a,b).minus(1):this}toFormat(a,b={}){return this.isValid?bo.create(this.loc.redefaultToEN(b)).formatDateTimeFromString(this,a):cx}toLocaleString(a=o,b={}){return this.isValid?bo.create(this.loc.clone(b),a).formatDateTime(this):cx}toLocaleParts(a={}){return this.isValid?bo.create(this.loc.clone(a),a).formatDateTimeParts(this):[]}toISO({format:a="extended",suppressSeconds:b=!1,suppressMilliseconds:c=!1,includeOffset:d=!0,extendedZone:e=!1,precision:f="milliseconds"}={}){if(!this.isValid)return null;f=cP(f);let g="extended"===a,h=cH(this,g,f);return cM.indexOf(f)>=3&&(h+="T"),h+=cI(this,g,b,c,d,e,f)}toISODate({format:a="extended",precision:b="day"}={}){return this.isValid?cH(this,"extended"===a,cP(b)):null}toISOWeekDate(){return cG(this,"kkkk-'W'WW-c")}toISOTime({suppressMilliseconds:a=!1,suppressSeconds:b=!1,includeOffset:c=!0,includePrefix:d=!1,extendedZone:e=!1,format:f="extended",precision:g="milliseconds"}={}){return this.isValid?(g=cP(g),(d&&cM.indexOf(g)>=3?"T":"")+cI(this,"extended"===f,b,a,c,e,g)):null}toRFC2822(){return cG(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return cG(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")}toSQLDate(){return this.isValid?cH(this,!0):null}toSQLTime({includeOffset:a=!0,includeZone:b=!1,includeOffsetSpace:c=!0}={}){let d="HH:mm:ss.SSS";return(b||a)&&(c&&(d+=" "),b?d+="z":a&&(d+="ZZ")),cG(this,d,!0)}toSQL(a={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(a)}`:null}toString(){return this.isValid?this.toISO():cx}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`:`DateTime { Invalid, reason: ${this.invalidReason} }`}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(a={}){if(!this.isValid)return{};let b={...this.c};return a.includeConfig&&(b.outputCalendar=this.outputCalendar,b.numberingSystem=this.loc.numberingSystem,b.locale=this.loc.locale),b}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(a,b="milliseconds",c={}){if(!this.isValid||!a.isValid)return cd.invalid("created by diffing an invalid DateTime");let d={locale:this.locale,numberingSystem:this.numberingSystem,...c},e=(Array.isArray(b)?b:[b]).map(cd.normalizeUnit),f=a.valueOf()>this.valueOf(),g=function(a,b,c,d){let[e,f,g,h]=function(a,b,c){let d,e,f={},g=a;for(let[h,i]of[["years",(a,b)=>b.year-a.year],["quarters",(a,b)=>b.quarter-a.quarter+(b.year-a.year)*4],["months",(a,b)=>b.month-a.month+(b.year-a.year)*12],["weeks",(a,b)=>{let c=ch(a,b);return(c-c%7)/7}],["days",ch]])c.indexOf(h)>=0&&(d=h,f[h]=i(a,b),(e=g.plus(f))>b?(f[h]--,(a=g.plus(f))>b&&(e=a,f[h]--,a=g.plus(f))):a=e);return[a,f,e,d]}(a,b,c),i=b-e,j=c.filter(a=>["hours","minutes","seconds","milliseconds"].indexOf(a)>=0);0===j.length&&(g<b&&(g=e.plus({[h]:1})),g!==e&&(f[h]=(f[h]||0)+i/(g-e)));let k=cd.fromObject(f,d);return j.length>0?cd.fromMillis(i,d).shiftTo(...j).plus(k):k}(f?this:a,f?a:this,e,d);return f?g.negate():g}diffNow(a="milliseconds",b={}){return this.diff(cV.now(),a,b)}until(a){return this.isValid?cf.fromDateTimes(this,a):this}hasSame(a,b,c){if(!this.isValid)return!1;let d=a.valueOf(),e=this.setZone(a.zone,{keepLocalTime:!0});return e.startOf(b,c)<=d&&d<=e.endOf(b,c)}equals(a){return this.isValid&&a.isValid&&this.valueOf()===a.valueOf()&&this.zone.equals(a.zone)&&this.loc.equals(a.loc)}toRelative(a={}){if(!this.isValid)return null;let b=a.base||cV.fromObject({},{zone:this.zone}),c=a.padding?this<b?-a.padding:a.padding:0,d=["years","months","days","hours","minutes","seconds"],e=a.unit;return Array.isArray(a.unit)&&(d=a.unit,e=void 0),cS(b,this.plus(c),{...a,numeric:"always",units:d,unit:e})}toRelativeCalendar(a={}){return this.isValid?cS(a.base||cV.fromObject({},{zone:this.zone}),this,{...a,numeric:"auto",units:["years","months","days"],calendary:!0}):null}static min(...a){if(!a.every(cV.isDateTime))throw new j("min requires all arguments be DateTimes");return aP(a,a=>a.valueOf(),Math.min)}static max(...a){if(!a.every(cV.isDateTime))throw new j("max requires all arguments be DateTimes");return aP(a,a=>a.valueOf(),Math.max)}static fromFormatExplain(a,b,c={}){let{locale:d=null,numberingSystem:e=null}=c;return cv(ad.fromOpts({locale:d,numberingSystem:e,defaultToEN:!0}),a,b)}static fromStringExplain(a,b,c={}){return cV.fromFormatExplain(a,b,c)}static buildFormatParser(a,b={}){let{locale:c=null,numberingSystem:d=null}=b;return new cu(ad.fromOpts({locale:c,numberingSystem:d,defaultToEN:!0}),a)}static fromFormatParser(a,b,c={}){if(aK(a)||aK(b))throw new j("fromFormatParser requires an input string and a format parser");let{locale:d=null,numberingSystem:e=null}=c,f=ad.fromOpts({locale:d,numberingSystem:e,defaultToEN:!0});if(!f.equals(b.locale))throw new j(`fromFormatParser called with a locale of ${f}, but the format parser was created for ${b.locale}`);let{result:g,zone:h,specificOffset:i,invalidReason:k}=b.explainFromTokens(a);return k?cV.invalid(k):cF(g,h,c,`format ${b.format}`,a,i)}static get DATE_SHORT(){return o}static get DATE_MED(){return p}static get DATE_MED_WITH_WEEKDAY(){return q}static get DATE_FULL(){return r}static get DATE_HUGE(){return s}static get TIME_SIMPLE(){return t}static get TIME_WITH_SECONDS(){return u}static get TIME_WITH_SHORT_OFFSET(){return v}static get TIME_WITH_LONG_OFFSET(){return w}static get TIME_24_SIMPLE(){return x}static get TIME_24_WITH_SECONDS(){return y}static get TIME_24_WITH_SHORT_OFFSET(){return z}static get TIME_24_WITH_LONG_OFFSET(){return A}static get DATETIME_SHORT(){return B}static get DATETIME_SHORT_WITH_SECONDS(){return C}static get DATETIME_MED(){return D}static get DATETIME_MED_WITH_SECONDS(){return E}static get DATETIME_MED_WITH_WEEKDAY(){return F}static get DATETIME_FULL(){return G}static get DATETIME_FULL_WITH_SECONDS(){return H}static get DATETIME_HUGE(){return I}static get DATETIME_HUGE_WITH_SECONDS(){return J}}function cW(a){if(cV.isDateTime(a))return a;if(a&&a.valueOf&&aL(a.valueOf()))return cV.fromJSDate(a);if(a&&"object"==typeof a)return cV.fromObject(a);throw new j(`Unknown datetime argument: ${a}, of type ${typeof a}`)}b.DateTime=cV,b.Duration=cd,b.FixedOffsetZone=af,b.IANAZone=Q,b.Info=cg,b.Interval=cf,b.InvalidZone=ag,b.Settings=av,b.SystemZone=M,b.VERSION="3.7.2",b.Zone=K},78184:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),b.CronDayOfWeek=void 0;let d=c(69697),e=Object.freeze(["L"]);class f extends d.CronField{static get min(){return 0}static get max(){return 7}static get chars(){return e}static get validChars(){return/^[?,*\dLH#/-]+$|^.*H\(\d+-\d+\)\/\d+.*$|^.*H\(\d+-\d+\).*$|^.*H\/\d+.*$/}constructor(a,b){super(a,b),this.validate()}get values(){return super.values}get nthDay(){return this.options.nthDayOfWeek??0}}b.CronDayOfWeek=f},85414:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),b.CronHour=void 0;let d=c(69697),e=Object.freeze([]);class f extends d.CronField{static get min(){return 0}static get max(){return 23}static get chars(){return e}constructor(a,b){super(a,b),this.validate()}get values(){return super.values}}b.CronHour=f},87819:(a,b,c)=>{c.d(b,{A:()=>l,P:()=>h});var d=c(14525),e=c(78474),f=c(49676),g=c(17974);let h={SEND_IT:"__pgboss__send-it"},i={error:"error",schedule:"schedule",warning:"warning"},j={CLOCK_SKEW:{message:"Warning: Clock skew between this instance and the database server. This will not break scheduling, but is emitted any time the skew exceeds 60 seconds."}};class k extends e{db;config;manager;stopped=!0;cronMonitorInterval;skewMonitorInterval;timekeeping;clockSkew=0;events=i;constructor(a,b,c){super(),this.db=a,this.config=c,this.manager=b}async start(){this.stopped=!1,await this.cacheClockSkew(),await this.manager.createQueue(h.SEND_IT);let a={pollingIntervalSeconds:this.config.cronWorkerIntervalSeconds,batchSize:50};await this.manager.work(h.SEND_IT,a,a=>this.onSendIt(a)),setImmediate(()=>this.onCron()),this.cronMonitorInterval=setInterval(async()=>await this.onCron(),1e3*this.config.cronMonitorIntervalSeconds),this.skewMonitorInterval=setInterval(async()=>await this.cacheClockSkew(),1e3*this.config.clockMonitorIntervalSeconds)}async stop(){!this.stopped&&(this.stopped=!0,await this.manager.offWork(h.SEND_IT,{wait:!0}),this.skewMonitorInterval&&(clearInterval(this.skewMonitorInterval),this.skewMonitorInterval=null),this.cronMonitorInterval&&(clearInterval(this.cronMonitorInterval),this.cronMonitorInterval=null))}async cacheClockSkew(){let a=0;try{if(this.config.__test__force_clock_monitoring_error)throw Error(this.config.__test__force_clock_monitoring_error);let{rows:b}=await this.db.executeSql(g.WB()),c=Date.now();a=parseFloat(b[0].time)-c;let d=Math.abs(a)/1e3;(d>=60||this.config.__test__force_clock_skew_warning)&&this.emit(this.events.warning,{message:j.CLOCK_SKEW.message,data:{seconds:d,direction:a>0?"slower":"faster"}})}catch(a){this.emit(this.events.error,a)}finally{this.clockSkew=a}}async onCron(){try{if(this.stopped||this.timekeeping)return;if(this.config.__test__force_cron_monitoring_error)throw Error(this.config.__test__force_cron_monitoring_error);this.timekeeping=!0;let a=g.jW(this.config.schema,this.config.cronMonitorIntervalSeconds);if(!this.stopped){let{rows:b}=await this.db.executeSql(a);this.stopped||1!==b.length||await this.cron()}}catch(a){this.emit(this.events.error,a)}finally{this.timekeeping=!1}}async cron(){let a=(await this.getSchedules()).filter(a=>this.shouldSendIt(a.cron,a.timezone)).map(({name:a,key:b,data:c,options:d})=>({data:{name:a,data:c,options:d},singletonKey:`${a}__${b}`,singletonSeconds:60}));a.length>0&&!this.stopped&&await this.manager.insert(h.SEND_IT,a)}shouldSendIt(a,b){let c=d.CronExpressionParser.parse(a,{tz:b,strict:!1}).prev();return(Date.now()+this.clockSkew-c.getTime())/1e3<60}async onSendIt(a){await Promise.allSettled(a.map(({data:a})=>this.manager.send(a)))}async getSchedules(a,b=""){let c=g.D(this.config.schema),d=[];a&&(c=g.BI(this.config.schema),d=[a,b]);let{rows:e}=await this.db.executeSql(c,d);return e}async schedule(a,b,c,e={}){let{tz:h="UTC",key:i="",...j}=e;d.CronExpressionParser.parse(b,{tz:h,strict:!1}),f.KY([a,c,{...j}]),f.sM(i);try{let d=g._(this.config.schema);await this.db.executeSql(d,[a,i,b,h,c,e])}catch(b){throw b.message.includes("foreign key")&&(b.message=`Queue ${a} not found`),b}}async unschedule(a,b=""){let c=g.dN(this.config.schema);await this.db.executeSql(c,[a,b])}}let l=k},88451:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),b.CronMonth=void 0;let d=c(18287),e=c(69697),f=Object.freeze([]);class g extends e.CronField{static get min(){return 1}static get max(){return 12}static get chars(){return f}static get daysInMonth(){return d.DAYS_IN_MONTH}constructor(a,b){super(a,b),this.validate()}get values(){return super.values}}b.CronMonth=g},88646:(a,b)=>{Object.defineProperty(b,"__esModule",{value:!0})},89024:(a,b)=>{Object.defineProperty(b,"__esModule",{value:!0}),b.seededRandom=function(a){var b;return b=a?(function(a){let b=0x811c9dc5;for(let c=0;c<a.length;c++)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193);return()=>b>>>0})(a)():Math.floor(1e10*Math.random()),()=>{let a=b+=0x6d2b79f5;return a=Math.imul(a^a>>>15,1|a),(((a^=a+Math.imul(a^a>>>7,61|a))^a>>>14)>>>0)/0x100000000}}},92351:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),b.CronSecond=void 0;let d=c(69697),e=Object.freeze([]);class f extends d.CronField{static get min(){return 0}static get max(){return 59}static get chars(){return e}constructor(a,b){super(a,b),this.validate()}get values(){return super.values}}b.CronSecond=f},98473:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),b.CronFieldCollection=void 0;let d=c(45625);class e{#aL;#aM;#aN;#aO;#aP;#aQ;static from(a,b){return new e({second:this.resolveField(d.CronSecond,a.second,b.second),minute:this.resolveField(d.CronMinute,a.minute,b.minute),hour:this.resolveField(d.CronHour,a.hour,b.hour),dayOfMonth:this.resolveField(d.CronDayOfMonth,a.dayOfMonth,b.dayOfMonth),month:this.resolveField(d.CronMonth,a.month,b.month),dayOfWeek:this.resolveField(d.CronDayOfWeek,a.dayOfWeek,b.dayOfWeek)})}static resolveField(a,b,c){return c?c instanceof d.CronField?c:new a(c):b}constructor({second:a,minute:b,hour:c,dayOfMonth:e,month:f,dayOfWeek:g}){if(!a)throw Error("Validation error, Field second is missing");if(!b)throw Error("Validation error, Field minute is missing");if(!c)throw Error("Validation error, Field hour is missing");if(!e)throw Error("Validation error, Field dayOfMonth is missing");if(!f)throw Error("Validation error, Field month is missing");if(!g)throw Error("Validation error, Field dayOfWeek is missing");if(1===f.values.length&&!e.hasLastChar&&!(parseInt(e.values[0],10)<=d.CronMonth.daysInMonth[f.values[0]-1]))throw Error("Invalid explicit day of month definition");this.#aL=a,this.#aM=b,this.#aN=c,this.#aP=f,this.#aQ=g,this.#aO=e}get second(){return this.#aL}get minute(){return this.#aM}get hour(){return this.#aN}get dayOfMonth(){return this.#aO}get month(){return this.#aP}get dayOfWeek(){return this.#aQ}static compactField(a){let b;if(0===a.length)return[];let c=[];return a.forEach((a,d,e)=>{if(void 0===b){b={start:a,count:1};return}let f=e[d-1]||b.start,g=e[d+1];if("L"===a||"W"===a){c.push(b),c.push({start:a,count:1}),b=void 0;return}if(void 0===b.step&&void 0!==g){let c=a-f;if(c<=g-a){b={...b,count:2,end:a,step:c};return}b.step=1}a-(b.end??0)===b.step?(b.count++,b.end=a):(1===b.count?c.push({start:b.start,count:1}):2===b.count?(c.push({start:b.start,count:1}),c.push({start:b.end??f,count:1})):c.push(b),b={start:a,count:1})}),b&&c.push(b),c}static #aR(a,b,c){let d=b.step;return d?1===d&&b.start===a.min&&b.end&&b.end>=c?a.hasQuestionMarkChar?"?":"*":1!==d&&b.start===a.min&&b.end&&b.end>=c-d+1?`*/${d}`:null:null}static #aS(a,b){let c=a.step;if(1===c)return`${a.start}-${a.end}`;let d=0===a.start?a.count-1:a.count;if(!c)throw Error("Unexpected range step");if(!a.end)throw Error("Unexpected range end");if(c*d>a.end){if("number"!=typeof a.start)throw Error("Unexpected range start");return Array.from({length:a.end-a.start+1},(b,d)=>{if("number"!=typeof a.start)throw Error("Unexpected range start");return d%c==0?a.start+d:null}).filter(a=>null!==a).join(",")}return a.end===b-c+1?`${a.start}/${c}`:`${a.start}-${a.end}/${c}`}stringifyField(a){let b=a.max,c=a.values;if(a instanceof d.CronDayOfWeek){b=6;let a=this.#aQ.values;c=7===a[a.length-1]?a.slice(0,-1):a}a instanceof d.CronDayOfMonth&&(b=1===this.#aP.values.length?d.CronMonth.daysInMonth[this.#aP.values[0]-1]:a.max);let f=e.compactField(c);if(1===f.length){let c=e.#aR(a,f[0],b);if(c)return c}return f.map(c=>{let f=1===c.count?c.start.toString():e.#aS(c,b);return a instanceof d.CronDayOfWeek&&a.nthDay>0?`${f}#${a.nthDay}`:f}).join(",")}stringify(a=!1){let b=[];return a&&b.push(this.stringifyField(this.#aL)),b.push(this.stringifyField(this.#aM),this.stringifyField(this.#aN),this.stringifyField(this.#aO),this.stringifyField(this.#aP),this.stringifyField(this.#aQ)),b.join(" ")}serialize(){return{second:this.#aL.serialize(),minute:this.#aM.serialize(),hour:this.#aN.serialize(),dayOfMonth:this.#aO.serialize(),month:this.#aP.serialize(),dayOfWeek:this.#aQ.serialize()}}}b.CronFieldCollection=e}};
|