velocious 1.0.514 → 1.0.516
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/build/background-jobs/cron-expression.js +9 -9
- package/build/background-jobs/forked-runner-child.js +1 -1
- package/build/background-jobs/job-runner.js +21 -15
- package/build/background-jobs/json-socket.js +4 -0
- package/build/background-jobs/main.js +180 -18
- package/build/background-jobs/status-reporter.js +12 -5
- package/build/background-jobs/store.js +132 -50
- package/build/background-jobs/types.js +11 -3
- package/build/background-jobs/worker.js +9 -5
- package/build/beacon/client.js +13 -6
- package/build/configuration.js +54 -29
- package/build/controller.js +9 -3
- package/build/database/drivers/sqlite/base.js +1 -1
- package/build/database/drivers/sqlite/index.js +15 -14
- package/build/database/migrations-ledger.js +16 -16
- package/build/database/pool/async-tracked-multi-connection.js +16 -0
- package/build/database/pool/base.js +26 -0
- package/build/database/query/where-model-class-hash.js +2 -0
- package/build/database/query/with-count.js +1 -1
- package/build/database/record/acts-as-list.js +2 -2
- package/build/database/record/auditing.js +23 -6
- package/build/database/record/index.js +7 -7
- package/build/database/record/validators/uniqueness.js +3 -3
- package/build/database/tenants/data-copier.js +23 -23
- package/build/database/tenants/schema-cloner.js +27 -27
- package/build/environment-handlers/browser.js +0 -1
- package/build/environment-handlers/node/cli/commands/background-jobs-runner.js +2 -1
- package/build/environment-handlers/node/cli/commands/lint/relationships.js +2 -2
- package/build/environment-handlers/node.js +1 -1
- package/build/frontend-model-controller.js +26 -18
- package/build/frontend-model-resource/base-resource.js +4 -4
- package/build/frontend-models/base.js +5 -5
- package/build/frontend-models/query.js +12 -12
- package/build/http-server/client/index.js +61 -15
- package/build/http-server/client/request-runner.js +7 -1
- package/build/http-server/client/response.js +17 -1
- package/build/http-server/client/websocket-session.js +13 -13
- package/build/http-server/server-client.js +96 -0
- package/build/http-server/websocket-channel.js +12 -11
- package/build/http-server/websocket-connection.js +12 -11
- package/build/http-server/websocket-events-host.js +1 -1
- package/build/http-server/worker-handler/in-process.js +48 -9
- package/build/http-server/worker-handler/index.js +67 -7
- package/build/http-server/worker-handler/worker-thread.js +68 -0
- package/build/src/background-jobs/cron-expression.d.ts +2 -2
- package/build/src/background-jobs/cron-expression.js +10 -10
- package/build/src/background-jobs/forked-runner-child.js +2 -2
- package/build/src/background-jobs/job-runner.d.ts +5 -1
- package/build/src/background-jobs/job-runner.d.ts.map +1 -1
- package/build/src/background-jobs/job-runner.js +22 -16
- package/build/src/background-jobs/json-socket.d.ts +4 -0
- package/build/src/background-jobs/json-socket.d.ts.map +1 -1
- package/build/src/background-jobs/json-socket.js +5 -1
- package/build/src/background-jobs/main.d.ts +62 -10
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +171 -19
- package/build/src/background-jobs/status-reporter.d.ts +6 -2
- package/build/src/background-jobs/status-reporter.d.ts.map +1 -1
- package/build/src/background-jobs/status-reporter.js +13 -6
- package/build/src/background-jobs/store.d.ts +48 -25
- package/build/src/background-jobs/store.d.ts.map +1 -1
- package/build/src/background-jobs/store.js +123 -50
- package/build/src/background-jobs/types.d.ts +36 -3
- package/build/src/background-jobs/types.d.ts.map +1 -1
- package/build/src/background-jobs/types.js +12 -4
- package/build/src/background-jobs/worker.d.ts +7 -5
- package/build/src/background-jobs/worker.d.ts.map +1 -1
- package/build/src/background-jobs/worker.js +10 -6
- package/build/src/beacon/client.d.ts +6 -3
- package/build/src/beacon/client.d.ts.map +1 -1
- package/build/src/beacon/client.js +14 -7
- package/build/src/configuration-types.d.ts +1 -1
- package/build/src/configuration.d.ts +42 -29
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +52 -30
- package/build/src/controller.d.ts +3 -0
- package/build/src/controller.d.ts.map +1 -1
- package/build/src/controller.js +9 -4
- package/build/src/database/drivers/sqlite/base.js +2 -2
- package/build/src/database/drivers/sqlite/index.d.ts +7 -6
- package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/index.js +16 -15
- package/build/src/database/migrations-ledger.d.ts +16 -16
- package/build/src/database/migrations-ledger.js +17 -17
- package/build/src/database/pool/async-tracked-multi-connection.d.ts +0 -11
- package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
- package/build/src/database/pool/async-tracked-multi-connection.js +16 -1
- package/build/src/database/pool/base.d.ts +21 -0
- package/build/src/database/pool/base.d.ts.map +1 -1
- package/build/src/database/pool/base.js +24 -1
- package/build/src/database/query/where-model-class-hash.d.ts.map +1 -1
- package/build/src/database/query/where-model-class-hash.js +3 -1
- package/build/src/database/query/with-count.js +2 -2
- package/build/src/database/record/acts-as-list.js +3 -3
- package/build/src/database/record/auditing.d.ts +1 -1
- package/build/src/database/record/auditing.d.ts.map +1 -1
- package/build/src/database/record/auditing.js +24 -7
- package/build/src/database/record/index.d.ts +7 -7
- package/build/src/database/record/index.js +8 -8
- package/build/src/database/record/validators/uniqueness.d.ts +3 -3
- package/build/src/database/record/validators/uniqueness.js +4 -4
- package/build/src/database/tenants/data-copier.d.ts +18 -18
- package/build/src/database/tenants/data-copier.js +24 -24
- package/build/src/database/tenants/schema-cloner.d.ts +27 -27
- package/build/src/database/tenants/schema-cloner.js +28 -28
- package/build/src/environment-handlers/browser.d.ts +9 -0
- package/build/src/environment-handlers/browser.d.ts.map +1 -1
- package/build/src/environment-handlers/browser.js +1 -2
- package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.js +3 -2
- package/build/src/environment-handlers/node/cli/commands/lint/relationships.js +3 -3
- package/build/src/environment-handlers/node.js +2 -2
- package/build/src/frontend-model-controller.d.ts +9 -8
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +26 -19
- package/build/src/frontend-model-resource/base-resource.js +5 -5
- package/build/src/frontend-models/base.d.ts +4 -4
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +6 -6
- package/build/src/frontend-models/query.d.ts +7 -7
- package/build/src/frontend-models/query.js +13 -13
- package/build/src/http-server/client/index.d.ts +23 -1
- package/build/src/http-server/client/index.d.ts.map +1 -1
- package/build/src/http-server/client/index.js +55 -17
- package/build/src/http-server/client/request-runner.d.ts.map +1 -1
- package/build/src/http-server/client/request-runner.js +8 -2
- package/build/src/http-server/client/response.d.ts +11 -1
- package/build/src/http-server/client/response.d.ts.map +1 -1
- package/build/src/http-server/client/response.js +16 -2
- package/build/src/http-server/client/websocket-session.d.ts +13 -13
- package/build/src/http-server/client/websocket-session.js +14 -14
- package/build/src/http-server/server-client.d.ts +13 -0
- package/build/src/http-server/server-client.d.ts.map +1 -1
- package/build/src/http-server/server-client.js +94 -1
- package/build/src/http-server/websocket-channel.d.ts +12 -11
- package/build/src/http-server/websocket-channel.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel.js +13 -12
- package/build/src/http-server/websocket-connection.d.ts +12 -11
- package/build/src/http-server/websocket-connection.d.ts.map +1 -1
- package/build/src/http-server/websocket-connection.js +13 -12
- package/build/src/http-server/websocket-events-host.d.ts +1 -1
- package/build/src/http-server/websocket-events-host.js +2 -2
- package/build/src/http-server/worker-handler/in-process.d.ts +2 -0
- package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/in-process.js +42 -11
- package/build/src/http-server/worker-handler/index.d.ts +21 -0
- package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/index.js +61 -7
- package/build/src/http-server/worker-handler/worker-thread.d.ts +30 -0
- package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/worker-thread.js +61 -1
- package/build/src/sync/device-identity.d.ts +2 -2
- package/build/src/sync/device-identity.d.ts.map +1 -1
- package/build/src/sync/device-identity.js +4 -4
- package/build/src/sync/local-mutation-log.d.ts +0 -1
- package/build/src/sync/local-mutation-log.d.ts.map +1 -1
- package/build/src/sync/local-mutation-log.js +1 -2
- package/build/src/sync/query-scope.d.ts +5 -0
- package/build/src/sync/query-scope.d.ts.map +1 -1
- package/build/src/sync/query-scope.js +7 -2
- package/build/src/sync/sync-client-types.d.ts +2 -2
- package/build/src/sync/sync-client-types.d.ts.map +1 -1
- package/build/src/sync/sync-client-types.js +1 -1
- package/build/src/sync/sync-client.d.ts +17 -2
- package/build/src/sync/sync-client.d.ts.map +1 -1
- package/build/src/sync/sync-client.js +28 -14
- package/build/src/sync/sync-realtime-bridge.d.ts +6 -2
- package/build/src/sync/sync-realtime-bridge.d.ts.map +1 -1
- package/build/src/sync/sync-realtime-bridge.js +14 -3
- package/build/src/sync/sync-resource-base.d.ts +14 -3
- package/build/src/sync/sync-resource-base.d.ts.map +1 -1
- package/build/src/sync/sync-resource-base.js +20 -4
- package/build/src/sync/sync-scope-store.d.ts +3 -3
- package/build/src/sync/sync-scope-store.d.ts.map +1 -1
- package/build/src/sync/sync-scope-store.js +7 -5
- package/build/src/sync/sync-websocket-channel.d.ts +10 -0
- package/build/src/sync/sync-websocket-channel.d.ts.map +1 -1
- package/build/src/sync/sync-websocket-channel.js +20 -3
- package/build/src/tenants/tenant-iterator.d.ts +8 -8
- package/build/src/tenants/tenant-iterator.js +9 -9
- package/build/src/tenants/tenant.d.ts +6 -6
- package/build/src/tenants/tenant.js +7 -7
- package/build/src/testing/test-runner.d.ts +16 -0
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +79 -19
- package/build/sync/device-identity.js +3 -3
- package/build/sync/local-mutation-log.js +0 -1
- package/build/sync/query-scope.js +6 -1
- package/build/sync/sync-client-types.js +1 -1
- package/build/sync/sync-client.js +28 -15
- package/build/sync/sync-realtime-bridge.js +13 -2
- package/build/sync/sync-resource-base.js +20 -3
- package/build/sync/sync-scope-store.js +6 -4
- package/build/sync/sync-websocket-channel.js +18 -2
- package/build/tenants/tenant-iterator.js +8 -8
- package/build/tenants/tenant.js +6 -6
- package/build/testing/test-runner.js +86 -20
- package/package.json +2 -2
- package/src/background-jobs/cron-expression.js +9 -9
- package/src/background-jobs/forked-runner-child.js +1 -1
- package/src/background-jobs/job-runner.js +21 -15
- package/src/background-jobs/json-socket.js +4 -0
- package/src/background-jobs/main.js +180 -18
- package/src/background-jobs/status-reporter.js +12 -5
- package/src/background-jobs/store.js +132 -50
- package/src/background-jobs/types.js +11 -3
- package/src/background-jobs/worker.js +9 -5
- package/src/beacon/client.js +13 -6
- package/src/configuration.js +54 -29
- package/src/controller.js +9 -3
- package/src/database/drivers/sqlite/base.js +1 -1
- package/src/database/drivers/sqlite/index.js +15 -14
- package/src/database/migrations-ledger.js +16 -16
- package/src/database/pool/async-tracked-multi-connection.js +16 -0
- package/src/database/pool/base.js +26 -0
- package/src/database/query/where-model-class-hash.js +2 -0
- package/src/database/query/with-count.js +1 -1
- package/src/database/record/acts-as-list.js +2 -2
- package/src/database/record/auditing.js +23 -6
- package/src/database/record/index.js +7 -7
- package/src/database/record/validators/uniqueness.js +3 -3
- package/src/database/tenants/data-copier.js +23 -23
- package/src/database/tenants/schema-cloner.js +27 -27
- package/src/environment-handlers/browser.js +0 -1
- package/src/environment-handlers/node/cli/commands/background-jobs-runner.js +2 -1
- package/src/environment-handlers/node/cli/commands/lint/relationships.js +2 -2
- package/src/environment-handlers/node.js +1 -1
- package/src/frontend-model-controller.js +26 -18
- package/src/frontend-model-resource/base-resource.js +4 -4
- package/src/frontend-models/base.js +5 -5
- package/src/frontend-models/query.js +12 -12
- package/src/http-server/client/index.js +61 -15
- package/src/http-server/client/request-runner.js +7 -1
- package/src/http-server/client/response.js +17 -1
- package/src/http-server/client/websocket-session.js +13 -13
- package/src/http-server/server-client.js +96 -0
- package/src/http-server/websocket-channel.js +12 -11
- package/src/http-server/websocket-connection.js +12 -11
- package/src/http-server/websocket-events-host.js +1 -1
- package/src/http-server/worker-handler/in-process.js +48 -9
- package/src/http-server/worker-handler/index.js +67 -7
- package/src/http-server/worker-handler/worker-thread.js +68 -0
- package/src/sync/device-identity.js +3 -3
- package/src/sync/local-mutation-log.js +0 -1
- package/src/sync/query-scope.js +6 -1
- package/src/sync/sync-client-types.js +1 -1
- package/src/sync/sync-client.js +28 -15
- package/src/sync/sync-realtime-bridge.js +13 -2
- package/src/sync/sync-resource-base.js +20 -3
- package/src/sync/sync-scope-store.js +6 -4
- package/src/sync/sync-websocket-channel.js +18 -2
- package/src/tenants/tenant-iterator.js +8 -8
- package/src/tenants/tenant.js +6 -6
- package/src/testing/test-runner.js +86 -20
|
@@ -46,7 +46,7 @@ const FIELDS = [
|
|
|
46
46
|
/**
|
|
47
47
|
* Runs the parseCronExpression helper.
|
|
48
48
|
* @param {string} expression - Cron expression or shortcut.
|
|
49
|
-
* @returns {ParsedCron}
|
|
49
|
+
* @returns {ParsedCron} - Parsed cron schedule fields.
|
|
50
50
|
*/
|
|
51
51
|
export function parseCronExpression(expression) {
|
|
52
52
|
if (typeof expression !== "string" || !expression.trim()) {
|
|
@@ -76,8 +76,8 @@ export function parseCronExpression(expression) {
|
|
|
76
76
|
}
|
|
77
77
|
/**
|
|
78
78
|
* Runs normalize day of week.
|
|
79
|
-
* @param {Set<number>} dayOfWeek
|
|
80
|
-
* @returns {Set<number>}
|
|
79
|
+
* @param {Set<number>} dayOfWeek - Day-of-week values.
|
|
80
|
+
* @returns {Set<number>} - Normalized day-of-week values.
|
|
81
81
|
*/
|
|
82
82
|
function normalizeDayOfWeek(dayOfWeek) {
|
|
83
83
|
if (dayOfWeek.has(7)) {
|
|
@@ -91,7 +91,7 @@ function normalizeDayOfWeek(dayOfWeek) {
|
|
|
91
91
|
* @param {string} field - Field expression.
|
|
92
92
|
* @param {{name: string, min: number, max: number, names?: string[]}} fieldSpec - Field spec.
|
|
93
93
|
* @param {string} expression - Whole cron expression for error messages.
|
|
94
|
-
* @returns {Set<number>}
|
|
94
|
+
* @returns {Set<number>} - Parsed allowed field values.
|
|
95
95
|
*/
|
|
96
96
|
function parseField(field, fieldSpec, expression) {
|
|
97
97
|
const result = new Set();
|
|
@@ -127,7 +127,7 @@ function addPartValues(part, fieldSpec, expression, result) {
|
|
|
127
127
|
* @param {string} value - Step value.
|
|
128
128
|
* @param {{name: string, min: number, max: number}} fieldSpec - Field spec.
|
|
129
129
|
* @param {string} expression - Original expression for errors.
|
|
130
|
-
* @returns {number}
|
|
130
|
+
* @returns {number} - Parsed positive step size.
|
|
131
131
|
*/
|
|
132
132
|
function parseStep(value, fieldSpec, expression) {
|
|
133
133
|
const step = Number(value);
|
|
@@ -142,7 +142,7 @@ function parseStep(value, fieldSpec, expression) {
|
|
|
142
142
|
* @param {{name: string, min: number, max: number, names?: string[]}} fieldSpec - Field spec.
|
|
143
143
|
* @param {string} expression - Original expression for errors.
|
|
144
144
|
* @param {boolean} hasStep - Whether the part had a `/step` suffix.
|
|
145
|
-
* @returns {[number, number]}
|
|
145
|
+
* @returns {[number, number]} - Inclusive field range.
|
|
146
146
|
*/
|
|
147
147
|
function parseRange(rangePart, fieldSpec, expression, hasStep) {
|
|
148
148
|
if (rangePart === "*") {
|
|
@@ -166,7 +166,7 @@ function parseRange(rangePart, fieldSpec, expression, hasStep) {
|
|
|
166
166
|
* @param {string} rawValue - Raw value (may be a name).
|
|
167
167
|
* @param {{name: string, min: number, max: number, names?: string[]}} fieldSpec - Field spec.
|
|
168
168
|
* @param {string} expression - Original expression for errors.
|
|
169
|
-
* @returns {number}
|
|
169
|
+
* @returns {number} - Parsed numeric field value.
|
|
170
170
|
*/
|
|
171
171
|
function parseValue(rawValue, fieldSpec, expression) {
|
|
172
172
|
if (!rawValue) {
|
|
@@ -193,7 +193,7 @@ const MAX_NEXT_FIRE_ITERATIONS = 5 * 366 * 24 * 60;
|
|
|
193
193
|
* real time (e.g., `0 0 31 2 *` — Feb 31st).
|
|
194
194
|
* @param {ParsedCron} parsed - Parsed cron expression.
|
|
195
195
|
* @param {Date} from - Reference Date — the next match is strictly after this.
|
|
196
|
-
* @returns {Date}
|
|
196
|
+
* @returns {Date} - Next date matching the expression.
|
|
197
197
|
*/
|
|
198
198
|
export function nextCronFireDate(parsed, from) {
|
|
199
199
|
const candidate = new Date(from.getTime());
|
|
@@ -210,7 +210,7 @@ export function nextCronFireDate(parsed, from) {
|
|
|
210
210
|
* Runs candidate matches.
|
|
211
211
|
* @param {Date} candidate - Candidate Date (in local time).
|
|
212
212
|
* @param {ParsedCron} parsed - Parsed expression.
|
|
213
|
-
* @returns {boolean}
|
|
213
|
+
* @returns {boolean} - Whether the candidate matches the parsed schedule.
|
|
214
214
|
*/
|
|
215
215
|
function candidateMatches(candidate, parsed) {
|
|
216
216
|
if (!parsed.minute.has(candidate.getMinutes()))
|
|
@@ -233,4 +233,4 @@ function candidateMatches(candidate, parsed) {
|
|
|
233
233
|
return dayOfWeekMatch;
|
|
234
234
|
return true;
|
|
235
235
|
}
|
|
236
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvbi1leHByZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tncm91bmQtam9icy9jcm9uLWV4cHJlc3Npb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7Ozs7Ozs7OztHQVdHO0FBRUgsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO0FBQ3hHLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFFbkUsTUFBTSxTQUFTLEdBQUc7SUFDaEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsUUFBUSxFQUFFLFdBQVc7SUFDckIsV0FBVyxFQUFFLFdBQVc7SUFDeEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsVUFBVSxFQUFFLFdBQVc7SUFDdkIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsV0FBVyxFQUFFLFdBQVc7Q0FDekIsQ0FBQTtBQUVELE1BQU0sTUFBTSxHQUFHO0lBQ2IsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBQztJQUNqQyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFDO0lBQy9CLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUM7SUFDckMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUs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QU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBRS9ELDBEQUEwRDtJQUMxRCx5REFBeUQ7SUFDekQscUNBQXFDO0lBQ3JDLElBQUksTUFBTSxDQUFDLG9CQUFvQixJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzlELE9BQU8sZUFBZSxJQUFJLGNBQWMsQ0FBQTtJQUMxQyxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsb0JBQW9CO1FBQUUsT0FBTyxlQUFlLENBQUE7SUFDdkQsSUFBSSxNQUFNLENBQUMsbUJBQW1CO1FBQUUsT0FBTyxjQUFjLENBQUE7SUFFckQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogTWluaW1hbCBQT1NJWC1zdHlsZSA1LWZpZWxkIGNyb24gcGFyc2VyIHVzZWQgYnkgdGhlIGJhY2tncm91bmQtam9iXG4gKiBzY2hlZHVsZXIuIFN1cHBvcnRzIGAqYCwgc2luZ2xlIHZhbHVlcywgcmFuZ2VzIChgTi1NYCksIHN0ZXBzXG4gKiAoYCpcXC9OYCBvciBgTi1NL05gKSwgY29tbWEtc2VwYXJhdGVkIGxpc3RzLCBhbmQgdGhlIGNvbW1vblxuICogYEBob3VybHlgL2BAZGFpbHlgL2BAd2Vla2x5YC9gQG1vbnRobHlgL2BAeWVhcmx5YC9gQG1pZG5pZ2h0YFxuICogc2hvcnRjdXRzLiBNb250aCBhbmQgZGF5LW9mLXdlZWsgbmFtZXMgKGBqYW5gLWBkZWNgLCBgc3VuYC1gc2F0YCxcbiAqIGNhc2UtaW5zZW5zaXRpdmUpIGFyZSBhbHNvIGFjY2VwdGVkLlxuICpcbiAqIEZvciBkYXktb2YtbW9udGggKyBkYXktb2Ytd2VlayBpbnRlcmFjdGlvbiwgZm9sbG93cyBQT1NJWC9WaXhpZVxuICogY3JvbiBzZW1hbnRpY3M6IHdoZW4gYm90aCBmaWVsZHMgYXJlIHJlc3RyaWN0ZWQgKG5laXRoZXIgYCpgKSwgdGhlXG4gKiBqb2IgZmlyZXMgd2hlbiBFSVRIRVIgbWF0Y2hlcy4gV2hlbiBvbmUgaXMgYCpgIGl0IGhhcyBubyBlZmZlY3QuXG4gKi9cblxuY29uc3QgTU9OVEhfTkFNRVMgPSBbXCJqYW5cIiwgXCJmZWJcIiwgXCJtYXJcIiwgXCJhcHJcIiwgXCJtYXlcIiwgXCJqdW5cIiwgXCJqdWxcIiwgXCJhdWdcIiwgXCJzZXBcIiwgXCJvY3RcIiwgXCJub3ZcIiwgXCJkZWNcIl1cbmNvbnN0IERBWV9OQU1FUyA9IFtcInN1blwiLCBcIm1vblwiLCBcInR1ZVwiLCBcIndlZFwiLCBcInRodVwiLCBcImZyaVwiLCBcInNhdFwiXVxuXG5jb25zdCBTSE9SVENVVFMgPSB7XG4gIFwiQGhvdXJseVwiOiBcIjAgKiAqICogKlwiLFxuICBcIkBkYWlseVwiOiBcIjAgMCAqICogKlwiLFxuICBcIkBtaWRuaWdodFwiOiBcIjAgMCAqICogKlwiLFxuICBcIkB3ZWVrbHlcIjogXCIwIDAgKiAqIDBcIixcbiAgXCJAbW9udGhseVwiOiBcIjAgMCAxICogKlwiLFxuICBcIkB5ZWFybHlcIjogXCIwIDAgMSAxICpcIixcbiAgXCJAYW5udWFsbHlcIjogXCIwIDAgMSAxICpcIlxufVxuXG5jb25zdCBGSUVMRFMgPSBbXG4gIHtuYW1lOiBcIm1pbnV0ZVwiLCBtaW46IDAsIG1heDogNTl9LFxuICB7bmFtZTogXCJob3VyXCIsIG1pbjogMCwgbWF4OiAyM30sXG4gIHtuYW1lOiBcImRheU9mTW9udGhcIiwgbWluOiAxLCBtYXg6IDMxfSxcbiAge25hbWU6IFwibW9udGhcIiwgbWluOiAxLCBtYXg6IDEyLCBuYW1lczogTU9OVEhfTkFNRVN9LFxuICAvLyBBY2NlcHQgMC03IHNvIHJhbmdlcyBsaWtlIGA1LTdgIChGcmktU3VuKSB3b3JrOyB3ZSBub3JtYWxpemUgN1xuICAvLyBkb3duIHRvIDAgYWZ0ZXIgcGFyc2luZyBpbiBgbm9ybWFsaXplRGF5T2ZXZWVrYCBiZWxvdy5cbiAge25hbWU6IFwiZGF5T2ZXZWVrXCIsIG1pbjogMCwgbWF4OiA3LCBuYW1lczogREFZX05BTUVTfVxuXVxuXG4vKipcbiAqIFBhcnNlZENyb24gdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBhcnNlZENyb25cbiAqIEBwcm9wZXJ0eSB7U2V0PG51bWJlcj59IG1pbnV0ZSAtIEFsbG93ZWQgbWludXRlIHZhbHVlcyAoMC01OSkuXG4gKiBAcHJvcGVydHkge1NldDxudW1iZXI+fSBob3VyIC0gQWxsb3dlZCBob3VyIHZhbHVlcyAoMC0yMykuXG4gKiBAcHJvcGVydHkge1NldDxudW1iZXI+fSBkYXlPZk1vbnRoIC0gQWxsb3dlZCBkYXktb2YtbW9udGggdmFsdWVzICgxLTMxKS5cbiAqIEBwcm9wZXJ0eSB7U2V0PG51bWJlcj59IG1vbnRoIC0gQWxsb3dlZCBtb250aCB2YWx1ZXMgKDEtMTIpLlxuICogQHByb3BlcnR5IHtTZXQ8bnVtYmVyPn0gZGF5T2ZXZWVrIC0gQWxsb3dlZCBkYXktb2Ytd2VlayB2YWx1ZXMgKDAtNiwgMD1TdW4pLlxuICogQHByb3BlcnR5IHtib29sZWFufSBkYXlPZk1vbnRoUmVzdHJpY3RlZCAtIFRydWUgd2hlbiB0aGUgZGF5T2ZNb250aCBmaWVsZCBpcyBub3QgYD9gLlxuICogQHByb3BlcnR5IHtib29sZWFufSBkYXlPZldlZWtSZXN0cmljdGVkIC0gVHJ1ZSB3aGVuIHRoZSBkYXlPZldlZWsgZmllbGQgaXMgbm90IGA/YC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBleHByZXNzaW9uIC0gT3JpZ2luYWwgZXhwcmVzc2lvbiBmb3IgZGlhZ25vc3RpY3MuXG4gKi9cblxuLyoqXG4gKiBSdW5zIHRoZSBwYXJzZUNyb25FeHByZXNzaW9uIGhlbHBlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gQ3JvbiBleHByZXNzaW9uIG9yIHNob3J0Y3V0LlxuICogQHJldHVybnMge1BhcnNlZENyb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNyb25FeHByZXNzaW9uKGV4cHJlc3Npb24pIHtcbiAgaWYgKHR5cGVvZiBleHByZXNzaW9uICE9PSBcInN0cmluZ1wiIHx8ICFleHByZXNzaW9uLnRyaW0oKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjcm9uIGV4cHJlc3Npb246ICR7ZXhwcmVzc2lvbn1gKVxuICB9XG5cbiAgY29uc3QgdHJpbW1lZCA9IGV4cHJlc3Npb24udHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgY29uc3QgZXhwYW5kZWQgPSBTSE9SVENVVFNbLyoqIEB0eXBlIHtrZXlvZiB0eXBlb2YgU0hPUlRDVVRTfSAqLyAodHJpbW1lZCldIHx8IHRyaW1tZWRcbiAgY29uc3QgZmllbGRzID0gZXhwYW5kZWQuc3BsaXQoL1xccysvKVxuXG4gIGlmIChmaWVsZHMubGVuZ3RoICE9PSA1KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNyb24gZXhwcmVzc2lvbiBcIiR7ZXhwcmVzc2lvbn1cIjogZXhwZWN0ZWQgNSBmaWVsZHMsIGdvdCAke2ZpZWxkcy5sZW5ndGh9YClcbiAgfVxuXG4gIGNvbnN0IFttaW51dGVGaWVsZCwgaG91ckZpZWxkLCBkYXlPZk1vbnRoRmllbGQsIG1vbnRoRmllbGQsIGRheU9mV2Vla0ZpZWxkXSA9IGZpZWxkc1xuICBjb25zdCBwYXJzZWQgPSB7XG4gICAgbWludXRlOiBwYXJzZUZpZWxkKG1pbnV0ZUZpZWxkLCBGSUVMRFNbMF0sIGV4cHJlc3Npb24pLFxuICAgIGhvdXI6IHBhcnNlRmllbGQoaG91ckZpZWxkLCBGSUVMRFNbMV0sIGV4cHJlc3Npb24pLFxuICAgIGRheU9mTW9udGg6IHBhcnNlRmllbGQoZGF5T2ZNb250aEZpZWxkLCBGSUVMRFNbMl0sIGV4cHJlc3Npb24pLFxuICAgIG1vbnRoOiBwYXJzZUZpZWxkKG1vbnRoRmllbGQsIEZJRUxEU1szXSwgZXhwcmVzc2lvbiksXG4gICAgLy8gQ3JvbiB0cmVhdHMgYm90aCAwIGFuZCA3IGFzIFN1bmRheS4gV2UgYWNjZXB0IDcgdGhyb3VnaG91dCB0aGVcbiAgICAvLyBwYXJzZSBwYXNzIChzbyBgNS03YCBmb3IgRnJpLVN1biB3b3JrcykgYW5kIHRoZW4gbm9ybWFsaXplIGFueVxuICAgIC8vIDdzIGRvd24gdG8gMCBzbyB0aGUgbWF0Y2hlciBvbmx5IGRlYWxzIHdpdGggMC02LlxuICAgIGRheU9mV2Vlazogbm9ybWFsaXplRGF5T2ZXZWVrKHBhcnNlRmllbGQoZGF5T2ZXZWVrRmllbGQsIEZJRUxEU1s0XSwgZXhwcmVzc2lvbikpLFxuICAgIGRheU9mTW9udGhSZXN0cmljdGVkOiBkYXlPZk1vbnRoRmllbGQgIT09IFwiKlwiLFxuICAgIGRheU9mV2Vla1Jlc3RyaWN0ZWQ6IGRheU9mV2Vla0ZpZWxkICE9PSBcIipcIixcbiAgICBleHByZXNzaW9uXG4gIH1cblxuICByZXR1cm4gcGFyc2VkXG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgZGF5IG9mIHdlZWsuXG4gKiBAcGFyYW0ge1NldDxudW1iZXI+fSBkYXlPZldlZWtcbiAqIEByZXR1cm5zIHtTZXQ8bnVtYmVyPn1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGF5T2ZXZWVrKGRheU9mV2Vlaykge1xuICBpZiAoZGF5T2ZXZWVrLmhhcyg3KSkge1xuICAgIGRheU9mV2Vlay5kZWxldGUoNylcbiAgICBkYXlPZldlZWsuYWRkKDApXG4gIH1cblxuICByZXR1cm4gZGF5T2ZXZWVrXG59XG5cbi8qKlxuICogUnVucyBwYXJzZSBmaWVsZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZCAtIEZpZWxkIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge3tuYW1lOiBzdHJpbmcsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciwgbmFtZXM/OiBzdHJpbmdbXX19IGZpZWxkU3BlYyAtIEZpZWxkIHNwZWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiAtIFdob2xlIGNyb24gZXhwcmVzc2lvbiBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcmV0dXJucyB7U2V0PG51bWJlcj59XG4gKi9cbmZ1bmN0aW9uIHBhcnNlRmllbGQoZmllbGQsIGZpZWxkU3BlYywgZXhwcmVzc2lvbikge1xuICBjb25zdCByZXN1bHQgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IHBhcnQgb2YgZmllbGQuc3BsaXQoXCIsXCIpKSB7XG4gICAgYWRkUGFydFZhbHVlcyhwYXJ0LCBmaWVsZFNwZWMsIGV4cHJlc3Npb24sIHJlc3VsdClcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBSdW5zIGFkZCBwYXJ0IHZhbHVlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJ0IC0gU2luZ2xlIGNvbW1hLXNlcGFyYXRlZCBjaHVuay5cbiAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBuYW1lcz86IHN0cmluZ1tdfX0gZmllbGRTcGVjIC0gRmllbGQgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gT3JpZ2luYWwgZXhwcmVzc2lvbiBmb3IgZXJyb3JzLlxuICogQHBhcmFtIHtTZXQ8bnVtYmVyPn0gcmVzdWx0IC0gQWNjdW11bGF0b3IuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYWRkUGFydFZhbHVlcyhwYXJ0LCBmaWVsZFNwZWMsIGV4cHJlc3Npb24sIHJlc3VsdCkge1xuICBpZiAoIXBhcnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtmaWVsZFNwZWMubmFtZX0gZmllbGQgaW4gY3JvbiBleHByZXNzaW9uIFwiJHtleHByZXNzaW9ufVwiYClcbiAgfVxuXG4gIGNvbnN0IFtyYW5nZVBhcnQsIHN0ZXBQYXJ0XSA9IHBhcnQuc3BsaXQoXCIvXCIpXG4gIGNvbnN0IHN0ZXAgPSBzdGVwUGFydCA9PT0gdW5kZWZpbmVkID8gMSA6IHBhcnNlU3RlcChzdGVwUGFydCwgZmllbGRTcGVjLCBleHByZXNzaW9uKVxuICBjb25zdCBbc3RhcnQsIGVuZF0gPSBwYXJzZVJhbmdlKHJhbmdlUGFydCwgZmllbGRTcGVjLCBleHByZXNzaW9uLCBzdGVwUGFydCAhPT0gdW5kZWZpbmVkKVxuXG4gIGZvciAobGV0IHZhbHVlID0gc3RhcnQ7IHZhbHVlIDw9IGVuZDsgdmFsdWUgKz0gc3RlcCkge1xuICAgIGlmICh2YWx1ZSA8IGZpZWxkU3BlYy5taW4gfHwgdmFsdWUgPiBmaWVsZFNwZWMubWF4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7dmFsdWV9IG91dCBvZiByYW5nZSBmb3IgJHtmaWVsZFNwZWMubmFtZX0gaW4gY3JvbiBleHByZXNzaW9uIFwiJHtleHByZXNzaW9ufVwiYClcbiAgICB9XG5cbiAgICByZXN1bHQuYWRkKHZhbHVlKVxuICB9XG59XG5cbi8qKlxuICogUnVucyBwYXJzZSBzdGVwLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gU3RlcCB2YWx1ZS5cbiAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgbWluOiBudW1iZXIsIG1heDogbnVtYmVyfX0gZmllbGRTcGVjIC0gRmllbGQgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gT3JpZ2luYWwgZXhwcmVzc2lvbiBmb3IgZXJyb3JzLlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VTdGVwKHZhbHVlLCBmaWVsZFNwZWMsIGV4cHJlc3Npb24pIHtcbiAgY29uc3Qgc3RlcCA9IE51bWJlcih2YWx1ZSlcblxuICBpZiAoIU51bWJlci5pc0ludGVnZXIoc3RlcCkgfHwgc3RlcCA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0ZXAgXCIke3ZhbHVlfVwiIGZvciAke2ZpZWxkU3BlYy5uYW1lfSBpbiBjcm9uIGV4cHJlc3Npb24gXCIke2V4cHJlc3Npb259XCJgKVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBcbn1cblxuLyoqXG4gKiBSdW5zIHBhcnNlIHJhbmdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHJhbmdlUGFydCAtIFJhbmdlIHBvcnRpb24gKGJlZm9yZSA/IGAvYCkuXG4gKiBAcGFyYW0ge3tuYW1lOiBzdHJpbmcsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciwgbmFtZXM/OiBzdHJpbmdbXX19IGZpZWxkU3BlYyAtIEZpZWxkIHNwZWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiAtIE9yaWdpbmFsIGV4cHJlc3Npb24gZm9yIGVycm9ycy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzU3RlcCAtIFdoZXRoZXIgdGhlIHBhcnQgaGFkIGEgYC9zdGVwYCBzdWZmaXguXG4gKiBAcmV0dXJucyB7W251bWJlciwgbnVtYmVyXX1cbiAqL1xuZnVuY3Rpb24gcGFyc2VSYW5nZShyYW5nZVBhcnQsIGZpZWxkU3BlYywgZXhwcmVzc2lvbiwgaGFzU3RlcCkge1xuICBpZiAocmFuZ2VQYXJ0ID09PSBcIipcIikge1xuICAgIHJldHVybiBbZmllbGRTcGVjLm1pbiwgZmllbGRTcGVjLm1heF1cbiAgfVxuXG4gIGNvbnN0IGRhc2hJbmRleCA9IHJhbmdlUGFydC5pbmRleE9mKFwiLVwiKVxuXG4gIGlmIChkYXNoSW5kZXggPT09IC0xKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZVZhbHVlKHJhbmdlUGFydCwgZmllbGRTcGVjLCBleHByZXNzaW9uKVxuXG4gICAgLy8gYE4vc3RlcGAgaXMgc2hvcnRoYW5kIGZvciBgTi1tYXgvc3RlcGAgKFZpeGllIGNyb24pLlxuICAgIHJldHVybiBbdmFsdWUsIGhhc1N0ZXAgPyBmaWVsZFNwZWMubWF4IDogdmFsdWVdXG4gIH1cblxuICBjb25zdCBzdGFydCA9IHBhcnNlVmFsdWUocmFuZ2VQYXJ0LnNsaWNlKDAsIGRhc2hJbmRleCksIGZpZWxkU3BlYywgZXhwcmVzc2lvbilcbiAgY29uc3QgZW5kID0gcGFyc2VWYWx1ZShyYW5nZVBhcnQuc2xpY2UoZGFzaEluZGV4ICsgMSksIGZpZWxkU3BlYywgZXhwcmVzc2lvbilcblxuICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJhbmdlIHN0YXJ0ICR7c3RhcnR9ID4gZW5kICR7ZW5kfSBmb3IgJHtmaWVsZFNwZWMubmFtZX0gaW4gY3JvbiBleHByZXNzaW9uIFwiJHtleHByZXNzaW9ufVwiYClcbiAgfVxuXG4gIHJldHVybiBbc3RhcnQsIGVuZF1cbn1cblxuLyoqXG4gKiBSdW5zIHBhcnNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd1ZhbHVlIC0gUmF3IHZhbHVlIChtYXkgYmUgYSBuYW1lKS5cbiAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBuYW1lcz86IHN0cmluZ1tdfX0gZmllbGRTcGVjIC0gRmllbGQgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gT3JpZ2luYWwgZXhwcmVzc2lvbiBmb3IgZXJyb3JzLlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VWYWx1ZShyYXdWYWx1ZSwgZmllbGRTcGVjLCBleHByZXNzaW9uKSB7XG4gIGlmICghcmF3VmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtmaWVsZFNwZWMubmFtZX0gdmFsdWUgaW4gY3JvbiBleHByZXNzaW9uIFwiJHtleHByZXNzaW9ufVwiYClcbiAgfVxuXG4gIGNvbnN0IG5hbWVkSW5kZXggPSBmaWVsZFNwZWMubmFtZXM/LmluZGV4T2YocmF3VmFsdWUpXG5cbiAgaWYgKHR5cGVvZiBuYW1lZEluZGV4ID09PSBcIm51bWJlclwiICYmIG5hbWVkSW5kZXggIT09IC0xKSB7XG4gICAgcmV0dXJuIG5hbWVkSW5kZXggKyBmaWVsZFNwZWMubWluXG4gIH1cblxuICBjb25zdCB2YWx1ZSA9IE51bWJlcihyYXdWYWx1ZSlcblxuICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkICR7ZmllbGRTcGVjLm5hbWV9IHZhbHVlIFwiJHtyYXdWYWx1ZX1cIiBpbiBjcm9uIGV4cHJlc3Npb24gXCIke2V4cHJlc3Npb259XCJgKVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIDUgeWVhcnMgb2YgbWludXRlcyDigJQgY292ZXJzIHRoZSB3b3JzdC1jYXNlIGxlZ2l0aW1hdGUgZ2FwLCB0aGVcbi8vIGAwIDAgMjkgMiAqYCAoRmViIDI5KSBsZWFwLXllYXItb25seSBzY2hlZHVsZSwgd2l0aCBhIG9uZS15ZWFyXG4vLyBidWZmZXIgc28gd2UgbmV2ZXIgcmVwb3J0IGEgcmVhbCBjcm9uIHBhdHRlcm4gYXMgXCJuZXZlciBtYXRjaGVzXCIuXG5jb25zdCBNQVhfTkVYVF9GSVJFX0lURVJBVElPTlMgPSA1ICogMzY2ICogMjQgKiA2MFxuXG4vKipcbiAqIFJldHVybnMgdGhlIG5leHQgRGF0ZSBzdHJpY3RseSBhZnRlciBgZnJvbWAgdGhhdCBzYXRpc2ZpZXMgYHBhcnNlZGAuXG4gKiBPcGVyYXRlcyBhdCBtaW51dGUgZ3JhbnVsYXJpdHkuIEJhaWxzIG91dCB3aXRoIGFuIGVycm9yIGFmdGVyIGZpdmVcbiAqIHllYXJzIG9mIHNlYXJjaCwgd2hpY2ggb25seSBoYXBwZW5zIGlmIHRoZSBleHByZXNzaW9uIG1hdGNoZXMgbm9cbiAqIHJlYWwgdGltZSAoZS5nLiwgYDAgMCAzMSAyICpgIOKAlCBGZWIgMzFzdCkuXG4gKiBAcGFyYW0ge1BhcnNlZENyb259IHBhcnNlZCAtIFBhcnNlZCBjcm9uIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge0RhdGV9IGZyb20gLSBSZWZlcmVuY2UgRGF0ZSDigJQgdGhlIG5leHQgbWF0Y2ggaXMgc3RyaWN0bHkgYWZ0ZXIgdGhpcy5cbiAqIEByZXR1cm5zIHtEYXRlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dENyb25GaXJlRGF0ZShwYXJzZWQsIGZyb20pIHtcbiAgY29uc3QgY2FuZGlkYXRlID0gbmV3IERhdGUoZnJvbS5nZXRUaW1lKCkpXG5cbiAgY2FuZGlkYXRlLnNldFNlY29uZHMoMCwgMClcbiAgY2FuZGlkYXRlLnNldE1pbnV0ZXMoY2FuZGlkYXRlLmdldE1pbnV0ZXMoKSArIDEpXG5cbiAgZm9yIChsZXQgaXRlcmF0aW9ucyA9IDA7IGl0ZXJhdGlvbnMgPCBNQVhfTkVYVF9GSVJFX0lURVJBVElPTlM7IGl0ZXJhdGlvbnMgKz0gMSkge1xuICAgIGlmIChjYW5kaWRhdGVNYXRjaGVzKGNhbmRpZGF0ZSwgcGFyc2VkKSkgcmV0dXJuIGNhbmRpZGF0ZVxuXG4gICAgY2FuZGlkYXRlLnNldE1pbnV0ZXMoY2FuZGlkYXRlLmdldE1pbnV0ZXMoKSArIDEpXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYENyb24gZXhwcmVzc2lvbiBcIiR7cGFyc2VkLmV4cHJlc3Npb259XCIgbmV2ZXIgbWF0Y2hlc2ApXG59XG5cbi8qKlxuICogUnVucyBjYW5kaWRhdGUgbWF0Y2hlcy5cbiAqIEBwYXJhbSB7RGF0ZX0gY2FuZGlkYXRlIC0gQ2FuZGlkYXRlIERhdGUgKGluIGxvY2FsIHRpbWUpLlxuICogQHBhcmFtIHtQYXJzZWRDcm9ufSBwYXJzZWQgLSBQYXJzZWQgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjYW5kaWRhdGVNYXRjaGVzKGNhbmRpZGF0ZSwgcGFyc2VkKSB7XG4gIGlmICghcGFyc2VkLm1pbnV0ZS5oYXMoY2FuZGlkYXRlLmdldE1pbnV0ZXMoKSkpIHJldHVybiBmYWxzZVxuICBpZiAoIXBhcnNlZC5ob3VyLmhhcyhjYW5kaWRhdGUuZ2V0SG91cnMoKSkpIHJldHVybiBmYWxzZVxuICBpZiAoIXBhcnNlZC5tb250aC5oYXMoY2FuZGlkYXRlLmdldE1vbnRoKCkgKyAxKSkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgZGF5T2ZNb250aE1hdGNoID0gcGFyc2VkLmRheU9mTW9udGguaGFzKGNhbmRpZGF0ZS5nZXREYXRlKCkpXG4gIGNvbnN0IGRheU9mV2Vla01hdGNoID0gcGFyc2VkLmRheU9mV2Vlay5oYXMoY2FuZGlkYXRlLmdldERheSgpKVxuXG4gIC8vIFBPU0lYL1ZpeGllIGNyb24gT1Igc2VtYW50aWNzOiB3aGVuIGJvdGggZGF5IGZpZWxkcyBhcmVcbiAgLy8gcmVzdHJpY3RlZCwgZmlyZSB3aGVuIEVJVEhFUiBtYXRjaGVzLiBXaGVuIG9ubHkgb25lIGlzXG4gIC8vIHJlc3RyaWN0ZWQsIG9ubHkgdGhhdCBvbmUgYXBwbGllcy5cbiAgaWYgKHBhcnNlZC5kYXlPZk1vbnRoUmVzdHJpY3RlZCAmJiBwYXJzZWQuZGF5T2ZXZWVrUmVzdHJpY3RlZCkge1xuICAgIHJldHVybiBkYXlPZk1vbnRoTWF0Y2ggfHwgZGF5T2ZXZWVrTWF0Y2hcbiAgfVxuXG4gIGlmIChwYXJzZWQuZGF5T2ZNb250aFJlc3RyaWN0ZWQpIHJldHVybiBkYXlPZk1vbnRoTWF0Y2hcbiAgaWYgKHBhcnNlZC5kYXlPZldlZWtSZXN0cmljdGVkKSByZXR1cm4gZGF5T2ZXZWVrTWF0Y2hcblxuICByZXR1cm4gdHJ1ZVxufVxuIl19
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvbi1leHByZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tncm91bmQtam9icy9jcm9uLWV4cHJlc3Npb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7Ozs7Ozs7OztHQVdHO0FBRUgsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO0FBQ3hHLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFFbkUsTUFBTSxTQUFTLEdBQUc7SUFDaEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsUUFBUSxFQUFFLFdBQVc7SUFDckIsV0FBVyxFQUFFLFdBQVc7SUFDeEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsVUFBVSxFQUFFLFdBQVc7SUFDdkIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsV0FBVyxFQUFFLFdBQVc7Q0FDekIsQ0FBQTtBQUVELE1BQU0sTUFBTSxHQUFHO0lBQ2IsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBQztJQUNqQyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFDO0lBQy9CLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUM7SUFDckMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFDO0lBQ3BELGlFQUFpRTtJQUNqRSx5REFBeUQ7SUFDekQsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDO0NBQ3RELENBQUE7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsVUFBVTtJQUM1QyxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLFVBQVUsRUFBRSxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUMvQyxNQUFNLFFBQVEsR0FBRyxTQUFTLEVBQUMscUNBQXNDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUE7SUFDdEYsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVwQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsVUFBVSw2QkFBNkIsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDckcsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFBO0lBQ3BGLE1BQU0sTUFBTSxHQUFHO1FBQ2IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQztRQUN0RCxJQUFJLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDO1FBQ2xELFVBQVUsRUFBRSxVQUFVLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUM7UUFDOUQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQztRQUNwRCxpRUFBaUU7UUFDakUsaUVBQWlFO1FBQ2pFLG1EQUFtRDtRQUNuRCxTQUFTLEVBQUUsa0JBQWtCLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEYsb0JBQW9CLEVBQUUsZUFBZSxLQUFLLEdBQUc7UUFDN0MsbUJBQW1CLEVBQUUsY0FBYyxLQUFLLEdBQUc7UUFDM0MsVUFBVTtLQUNYLENBQUE7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxTQUFTO0lBQ25DLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JCLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNsQixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVTtJQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRXhCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3BDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNwRCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU07SUFDeEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLFNBQVMsQ0FBQyxJQUFJLDhCQUE4QixVQUFVLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZGLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDN0MsTUFBTSxJQUFJLEdBQUcsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUNwRixNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUE7SUFFekYsS0FBSyxJQUFJLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDcEQsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLHFCQUFxQixTQUFTLENBQUMsSUFBSSx3QkFBd0IsVUFBVSxHQUFHLENBQUMsQ0FBQTtRQUN6RyxDQUFDO1FBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVTtJQUM3QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssU0FBUyxTQUFTLENBQUMsSUFBSSx3QkFBd0IsVUFBVSxHQUFHLENBQUMsQ0FBQTtJQUNyRyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsVUFBVSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU87SUFDM0QsSUFBSSxTQUFTLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXhDLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFFMUQsdURBQXVEO1FBQ3ZELE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUM5RSxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBRTdFLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxLQUFLLFVBQVUsR0FBRyxRQUFRLFNBQVMsQ0FBQyxJQUFJLHdCQUF3QixVQUFVLEdBQUcsQ0FBQyxDQUFBO0lBQy9HLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ3JCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVU7SUFDakQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLFNBQVMsQ0FBQyxJQUFJLDhCQUE4QixVQUFVLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZGLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUVyRCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxPQUFPLFVBQVUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFBO0lBQ25DLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsU0FBUyxDQUFDLElBQUksV0FBVyxRQUFRLHlCQUF5QixVQUFVLEdBQUcsQ0FBQyxDQUFBO0lBQ3JHLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxpRUFBaUU7QUFDakUsaUVBQWlFO0FBQ2pFLG9FQUFvRTtBQUNwRSxNQUFNLHdCQUF3QixHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtBQUVsRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSTtJQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUUxQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUMxQixTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUVoRCxLQUFLLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsd0JBQXdCLEVBQUUsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hGLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFBO1FBRXpELFNBQVMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixNQUFNLENBQUMsVUFBVSxpQkFBaUIsQ0FBQyxDQUFBO0FBQ3pFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE1BQU07SUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUN4RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRTdELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ2xFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBRS9ELDBEQUEwRDtJQUMxRCx5REFBeUQ7SUFDekQscUNBQXFDO0lBQ3JDLElBQUksTUFBTSxDQUFDLG9CQUFvQixJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzlELE9BQU8sZUFBZSxJQUFJLGNBQWMsQ0FBQTtJQUMxQyxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsb0JBQW9CO1FBQUUsT0FBTyxlQUFlLENBQUE7SUFDdkQsSUFBSSxNQUFNLENBQUMsbUJBQW1CO1FBQUUsT0FBTyxjQUFjLENBQUE7SUFFckQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogTWluaW1hbCBQT1NJWC1zdHlsZSA1LWZpZWxkIGNyb24gcGFyc2VyIHVzZWQgYnkgdGhlIGJhY2tncm91bmQtam9iXG4gKiBzY2hlZHVsZXIuIFN1cHBvcnRzIGAqYCwgc2luZ2xlIHZhbHVlcywgcmFuZ2VzIChgTi1NYCksIHN0ZXBzXG4gKiAoYCpcXC9OYCBvciBgTi1NL05gKSwgY29tbWEtc2VwYXJhdGVkIGxpc3RzLCBhbmQgdGhlIGNvbW1vblxuICogYEBob3VybHlgL2BAZGFpbHlgL2BAd2Vla2x5YC9gQG1vbnRobHlgL2BAeWVhcmx5YC9gQG1pZG5pZ2h0YFxuICogc2hvcnRjdXRzLiBNb250aCBhbmQgZGF5LW9mLXdlZWsgbmFtZXMgKGBqYW5gLWBkZWNgLCBgc3VuYC1gc2F0YCxcbiAqIGNhc2UtaW5zZW5zaXRpdmUpIGFyZSBhbHNvIGFjY2VwdGVkLlxuICpcbiAqIEZvciBkYXktb2YtbW9udGggKyBkYXktb2Ytd2VlayBpbnRlcmFjdGlvbiwgZm9sbG93cyBQT1NJWC9WaXhpZVxuICogY3JvbiBzZW1hbnRpY3M6IHdoZW4gYm90aCBmaWVsZHMgYXJlIHJlc3RyaWN0ZWQgKG5laXRoZXIgYCpgKSwgdGhlXG4gKiBqb2IgZmlyZXMgd2hlbiBFSVRIRVIgbWF0Y2hlcy4gV2hlbiBvbmUgaXMgYCpgIGl0IGhhcyBubyBlZmZlY3QuXG4gKi9cblxuY29uc3QgTU9OVEhfTkFNRVMgPSBbXCJqYW5cIiwgXCJmZWJcIiwgXCJtYXJcIiwgXCJhcHJcIiwgXCJtYXlcIiwgXCJqdW5cIiwgXCJqdWxcIiwgXCJhdWdcIiwgXCJzZXBcIiwgXCJvY3RcIiwgXCJub3ZcIiwgXCJkZWNcIl1cbmNvbnN0IERBWV9OQU1FUyA9IFtcInN1blwiLCBcIm1vblwiLCBcInR1ZVwiLCBcIndlZFwiLCBcInRodVwiLCBcImZyaVwiLCBcInNhdFwiXVxuXG5jb25zdCBTSE9SVENVVFMgPSB7XG4gIFwiQGhvdXJseVwiOiBcIjAgKiAqICogKlwiLFxuICBcIkBkYWlseVwiOiBcIjAgMCAqICogKlwiLFxuICBcIkBtaWRuaWdodFwiOiBcIjAgMCAqICogKlwiLFxuICBcIkB3ZWVrbHlcIjogXCIwIDAgKiAqIDBcIixcbiAgXCJAbW9udGhseVwiOiBcIjAgMCAxICogKlwiLFxuICBcIkB5ZWFybHlcIjogXCIwIDAgMSAxICpcIixcbiAgXCJAYW5udWFsbHlcIjogXCIwIDAgMSAxICpcIlxufVxuXG5jb25zdCBGSUVMRFMgPSBbXG4gIHtuYW1lOiBcIm1pbnV0ZVwiLCBtaW46IDAsIG1heDogNTl9LFxuICB7bmFtZTogXCJob3VyXCIsIG1pbjogMCwgbWF4OiAyM30sXG4gIHtuYW1lOiBcImRheU9mTW9udGhcIiwgbWluOiAxLCBtYXg6IDMxfSxcbiAge25hbWU6IFwibW9udGhcIiwgbWluOiAxLCBtYXg6IDEyLCBuYW1lczogTU9OVEhfTkFNRVN9LFxuICAvLyBBY2NlcHQgMC03IHNvIHJhbmdlcyBsaWtlIGA1LTdgIChGcmktU3VuKSB3b3JrOyB3ZSBub3JtYWxpemUgN1xuICAvLyBkb3duIHRvIDAgYWZ0ZXIgcGFyc2luZyBpbiBgbm9ybWFsaXplRGF5T2ZXZWVrYCBiZWxvdy5cbiAge25hbWU6IFwiZGF5T2ZXZWVrXCIsIG1pbjogMCwgbWF4OiA3LCBuYW1lczogREFZX05BTUVTfVxuXVxuXG4vKipcbiAqIFBhcnNlZENyb24gdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBhcnNlZENyb25cbiAqIEBwcm9wZXJ0eSB7U2V0PG51bWJlcj59IG1pbnV0ZSAtIEFsbG93ZWQgbWludXRlIHZhbHVlcyAoMC01OSkuXG4gKiBAcHJvcGVydHkge1NldDxudW1iZXI+fSBob3VyIC0gQWxsb3dlZCBob3VyIHZhbHVlcyAoMC0yMykuXG4gKiBAcHJvcGVydHkge1NldDxudW1iZXI+fSBkYXlPZk1vbnRoIC0gQWxsb3dlZCBkYXktb2YtbW9udGggdmFsdWVzICgxLTMxKS5cbiAqIEBwcm9wZXJ0eSB7U2V0PG51bWJlcj59IG1vbnRoIC0gQWxsb3dlZCBtb250aCB2YWx1ZXMgKDEtMTIpLlxuICogQHByb3BlcnR5IHtTZXQ8bnVtYmVyPn0gZGF5T2ZXZWVrIC0gQWxsb3dlZCBkYXktb2Ytd2VlayB2YWx1ZXMgKDAtNiwgMD1TdW4pLlxuICogQHByb3BlcnR5IHtib29sZWFufSBkYXlPZk1vbnRoUmVzdHJpY3RlZCAtIFRydWUgd2hlbiB0aGUgZGF5T2ZNb250aCBmaWVsZCBpcyBub3QgYD9gLlxuICogQHByb3BlcnR5IHtib29sZWFufSBkYXlPZldlZWtSZXN0cmljdGVkIC0gVHJ1ZSB3aGVuIHRoZSBkYXlPZldlZWsgZmllbGQgaXMgbm90IGA/YC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBleHByZXNzaW9uIC0gT3JpZ2luYWwgZXhwcmVzc2lvbiBmb3IgZGlhZ25vc3RpY3MuXG4gKi9cblxuLyoqXG4gKiBSdW5zIHRoZSBwYXJzZUNyb25FeHByZXNzaW9uIGhlbHBlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gQ3JvbiBleHByZXNzaW9uIG9yIHNob3J0Y3V0LlxuICogQHJldHVybnMge1BhcnNlZENyb259IC0gUGFyc2VkIGNyb24gc2NoZWR1bGUgZmllbGRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDcm9uRXhwcmVzc2lvbihleHByZXNzaW9uKSB7XG4gIGlmICh0eXBlb2YgZXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIiB8fCAhZXhwcmVzc2lvbi50cmltKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY3JvbiBleHByZXNzaW9uOiAke2V4cHJlc3Npb259YClcbiAgfVxuXG4gIGNvbnN0IHRyaW1tZWQgPSBleHByZXNzaW9uLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IGV4cGFuZGVkID0gU0hPUlRDVVRTWy8qKiBAdHlwZSB7a2V5b2YgdHlwZW9mIFNIT1JUQ1VUU30gKi8gKHRyaW1tZWQpXSB8fCB0cmltbWVkXG4gIGNvbnN0IGZpZWxkcyA9IGV4cGFuZGVkLnNwbGl0KC9cXHMrLylcblxuICBpZiAoZmllbGRzLmxlbmd0aCAhPT0gNSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjcm9uIGV4cHJlc3Npb24gXCIke2V4cHJlc3Npb259XCI6IGV4cGVjdGVkIDUgZmllbGRzLCBnb3QgJHtmaWVsZHMubGVuZ3RofWApXG4gIH1cblxuICBjb25zdCBbbWludXRlRmllbGQsIGhvdXJGaWVsZCwgZGF5T2ZNb250aEZpZWxkLCBtb250aEZpZWxkLCBkYXlPZldlZWtGaWVsZF0gPSBmaWVsZHNcbiAgY29uc3QgcGFyc2VkID0ge1xuICAgIG1pbnV0ZTogcGFyc2VGaWVsZChtaW51dGVGaWVsZCwgRklFTERTWzBdLCBleHByZXNzaW9uKSxcbiAgICBob3VyOiBwYXJzZUZpZWxkKGhvdXJGaWVsZCwgRklFTERTWzFdLCBleHByZXNzaW9uKSxcbiAgICBkYXlPZk1vbnRoOiBwYXJzZUZpZWxkKGRheU9mTW9udGhGaWVsZCwgRklFTERTWzJdLCBleHByZXNzaW9uKSxcbiAgICBtb250aDogcGFyc2VGaWVsZChtb250aEZpZWxkLCBGSUVMRFNbM10sIGV4cHJlc3Npb24pLFxuICAgIC8vIENyb24gdHJlYXRzIGJvdGggMCBhbmQgNyBhcyBTdW5kYXkuIFdlIGFjY2VwdCA3IHRocm91Z2hvdXQgdGhlXG4gICAgLy8gcGFyc2UgcGFzcyAoc28gYDUtN2AgZm9yIEZyaS1TdW4gd29ya3MpIGFuZCB0aGVuIG5vcm1hbGl6ZSBhbnlcbiAgICAvLyA3cyBkb3duIHRvIDAgc28gdGhlIG1hdGNoZXIgb25seSBkZWFscyB3aXRoIDAtNi5cbiAgICBkYXlPZldlZWs6IG5vcm1hbGl6ZURheU9mV2VlayhwYXJzZUZpZWxkKGRheU9mV2Vla0ZpZWxkLCBGSUVMRFNbNF0sIGV4cHJlc3Npb24pKSxcbiAgICBkYXlPZk1vbnRoUmVzdHJpY3RlZDogZGF5T2ZNb250aEZpZWxkICE9PSBcIipcIixcbiAgICBkYXlPZldlZWtSZXN0cmljdGVkOiBkYXlPZldlZWtGaWVsZCAhPT0gXCIqXCIsXG4gICAgZXhwcmVzc2lvblxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZFxufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIGRheSBvZiB3ZWVrLlxuICogQHBhcmFtIHtTZXQ8bnVtYmVyPn0gZGF5T2ZXZWVrIC0gRGF5LW9mLXdlZWsgdmFsdWVzLlxuICogQHJldHVybnMge1NldDxudW1iZXI+fSAtIE5vcm1hbGl6ZWQgZGF5LW9mLXdlZWsgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEYXlPZldlZWsoZGF5T2ZXZWVrKSB7XG4gIGlmIChkYXlPZldlZWsuaGFzKDcpKSB7XG4gICAgZGF5T2ZXZWVrLmRlbGV0ZSg3KVxuICAgIGRheU9mV2Vlay5hZGQoMClcbiAgfVxuXG4gIHJldHVybiBkYXlPZldlZWtcbn1cblxuLyoqXG4gKiBSdW5zIHBhcnNlIGZpZWxkLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIC0gRmllbGQgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBuYW1lcz86IHN0cmluZ1tdfX0gZmllbGRTcGVjIC0gRmllbGQgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gV2hvbGUgY3JvbiBleHByZXNzaW9uIGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEByZXR1cm5zIHtTZXQ8bnVtYmVyPn0gLSBQYXJzZWQgYWxsb3dlZCBmaWVsZCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRmllbGQoZmllbGQsIGZpZWxkU3BlYywgZXhwcmVzc2lvbikge1xuICBjb25zdCByZXN1bHQgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IHBhcnQgb2YgZmllbGQuc3BsaXQoXCIsXCIpKSB7XG4gICAgYWRkUGFydFZhbHVlcyhwYXJ0LCBmaWVsZFNwZWMsIGV4cHJlc3Npb24sIHJlc3VsdClcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBSdW5zIGFkZCBwYXJ0IHZhbHVlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJ0IC0gU2luZ2xlIGNvbW1hLXNlcGFyYXRlZCBjaHVuay5cbiAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBuYW1lcz86IHN0cmluZ1tdfX0gZmllbGRTcGVjIC0gRmllbGQgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gT3JpZ2luYWwgZXhwcmVzc2lvbiBmb3IgZXJyb3JzLlxuICogQHBhcmFtIHtTZXQ8bnVtYmVyPn0gcmVzdWx0IC0gQWNjdW11bGF0b3IuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYWRkUGFydFZhbHVlcyhwYXJ0LCBmaWVsZFNwZWMsIGV4cHJlc3Npb24sIHJlc3VsdCkge1xuICBpZiAoIXBhcnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtmaWVsZFNwZWMubmFtZX0gZmllbGQgaW4gY3JvbiBleHByZXNzaW9uIFwiJHtleHByZXNzaW9ufVwiYClcbiAgfVxuXG4gIGNvbnN0IFtyYW5nZVBhcnQsIHN0ZXBQYXJ0XSA9IHBhcnQuc3BsaXQoXCIvXCIpXG4gIGNvbnN0IHN0ZXAgPSBzdGVwUGFydCA9PT0gdW5kZWZpbmVkID8gMSA6IHBhcnNlU3RlcChzdGVwUGFydCwgZmllbGRTcGVjLCBleHByZXNzaW9uKVxuICBjb25zdCBbc3RhcnQsIGVuZF0gPSBwYXJzZVJhbmdlKHJhbmdlUGFydCwgZmllbGRTcGVjLCBleHByZXNzaW9uLCBzdGVwUGFydCAhPT0gdW5kZWZpbmVkKVxuXG4gIGZvciAobGV0IHZhbHVlID0gc3RhcnQ7IHZhbHVlIDw9IGVuZDsgdmFsdWUgKz0gc3RlcCkge1xuICAgIGlmICh2YWx1ZSA8IGZpZWxkU3BlYy5taW4gfHwgdmFsdWUgPiBmaWVsZFNwZWMubWF4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7dmFsdWV9IG91dCBvZiByYW5nZSBmb3IgJHtmaWVsZFNwZWMubmFtZX0gaW4gY3JvbiBleHByZXNzaW9uIFwiJHtleHByZXNzaW9ufVwiYClcbiAgICB9XG5cbiAgICByZXN1bHQuYWRkKHZhbHVlKVxuICB9XG59XG5cbi8qKlxuICogUnVucyBwYXJzZSBzdGVwLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gU3RlcCB2YWx1ZS5cbiAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgbWluOiBudW1iZXIsIG1heDogbnVtYmVyfX0gZmllbGRTcGVjIC0gRmllbGQgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gT3JpZ2luYWwgZXhwcmVzc2lvbiBmb3IgZXJyb3JzLlxuICogQHJldHVybnMge251bWJlcn0gLSBQYXJzZWQgcG9zaXRpdmUgc3RlcCBzaXplLlxuICovXG5mdW5jdGlvbiBwYXJzZVN0ZXAodmFsdWUsIGZpZWxkU3BlYywgZXhwcmVzc2lvbikge1xuICBjb25zdCBzdGVwID0gTnVtYmVyKHZhbHVlKVxuXG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihzdGVwKSB8fCBzdGVwIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3RlcCBcIiR7dmFsdWV9XCIgZm9yICR7ZmllbGRTcGVjLm5hbWV9IGluIGNyb24gZXhwcmVzc2lvbiBcIiR7ZXhwcmVzc2lvbn1cImApXG4gIH1cblxuICByZXR1cm4gc3RlcFxufVxuXG4vKipcbiAqIFJ1bnMgcGFyc2UgcmFuZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmFuZ2VQYXJ0IC0gUmFuZ2UgcG9ydGlvbiAoYmVmb3JlID8gYC9gKS5cbiAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBuYW1lcz86IHN0cmluZ1tdfX0gZmllbGRTcGVjIC0gRmllbGQgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gT3JpZ2luYWwgZXhwcmVzc2lvbiBmb3IgZXJyb3JzLlxuICogQHBhcmFtIHtib29sZWFufSBoYXNTdGVwIC0gV2hldGhlciB0aGUgcGFydCBoYWQgYSBgL3N0ZXBgIHN1ZmZpeC5cbiAqIEByZXR1cm5zIHtbbnVtYmVyLCBudW1iZXJdfSAtIEluY2x1c2l2ZSBmaWVsZCByYW5nZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VSYW5nZShyYW5nZVBhcnQsIGZpZWxkU3BlYywgZXhwcmVzc2lvbiwgaGFzU3RlcCkge1xuICBpZiAocmFuZ2VQYXJ0ID09PSBcIipcIikge1xuICAgIHJldHVybiBbZmllbGRTcGVjLm1pbiwgZmllbGRTcGVjLm1heF1cbiAgfVxuXG4gIGNvbnN0IGRhc2hJbmRleCA9IHJhbmdlUGFydC5pbmRleE9mKFwiLVwiKVxuXG4gIGlmIChkYXNoSW5kZXggPT09IC0xKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZVZhbHVlKHJhbmdlUGFydCwgZmllbGRTcGVjLCBleHByZXNzaW9uKVxuXG4gICAgLy8gYE4vc3RlcGAgaXMgc2hvcnRoYW5kIGZvciBgTi1tYXgvc3RlcGAgKFZpeGllIGNyb24pLlxuICAgIHJldHVybiBbdmFsdWUsIGhhc1N0ZXAgPyBmaWVsZFNwZWMubWF4IDogdmFsdWVdXG4gIH1cblxuICBjb25zdCBzdGFydCA9IHBhcnNlVmFsdWUocmFuZ2VQYXJ0LnNsaWNlKDAsIGRhc2hJbmRleCksIGZpZWxkU3BlYywgZXhwcmVzc2lvbilcbiAgY29uc3QgZW5kID0gcGFyc2VWYWx1ZShyYW5nZVBhcnQuc2xpY2UoZGFzaEluZGV4ICsgMSksIGZpZWxkU3BlYywgZXhwcmVzc2lvbilcblxuICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJhbmdlIHN0YXJ0ICR7c3RhcnR9ID4gZW5kICR7ZW5kfSBmb3IgJHtmaWVsZFNwZWMubmFtZX0gaW4gY3JvbiBleHByZXNzaW9uIFwiJHtleHByZXNzaW9ufVwiYClcbiAgfVxuXG4gIHJldHVybiBbc3RhcnQsIGVuZF1cbn1cblxuLyoqXG4gKiBSdW5zIHBhcnNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd1ZhbHVlIC0gUmF3IHZhbHVlIChtYXkgYmUgYSBuYW1lKS5cbiAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBuYW1lcz86IHN0cmluZ1tdfX0gZmllbGRTcGVjIC0gRmllbGQgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gT3JpZ2luYWwgZXhwcmVzc2lvbiBmb3IgZXJyb3JzLlxuICogQHJldHVybnMge251bWJlcn0gLSBQYXJzZWQgbnVtZXJpYyBmaWVsZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VWYWx1ZShyYXdWYWx1ZSwgZmllbGRTcGVjLCBleHByZXNzaW9uKSB7XG4gIGlmICghcmF3VmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtmaWVsZFNwZWMubmFtZX0gdmFsdWUgaW4gY3JvbiBleHByZXNzaW9uIFwiJHtleHByZXNzaW9ufVwiYClcbiAgfVxuXG4gIGNvbnN0IG5hbWVkSW5kZXggPSBmaWVsZFNwZWMubmFtZXM/LmluZGV4T2YocmF3VmFsdWUpXG5cbiAgaWYgKHR5cGVvZiBuYW1lZEluZGV4ID09PSBcIm51bWJlclwiICYmIG5hbWVkSW5kZXggIT09IC0xKSB7XG4gICAgcmV0dXJuIG5hbWVkSW5kZXggKyBmaWVsZFNwZWMubWluXG4gIH1cblxuICBjb25zdCB2YWx1ZSA9IE51bWJlcihyYXdWYWx1ZSlcblxuICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkICR7ZmllbGRTcGVjLm5hbWV9IHZhbHVlIFwiJHtyYXdWYWx1ZX1cIiBpbiBjcm9uIGV4cHJlc3Npb24gXCIke2V4cHJlc3Npb259XCJgKVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIDUgeWVhcnMgb2YgbWludXRlcyDigJQgY292ZXJzIHRoZSB3b3JzdC1jYXNlIGxlZ2l0aW1hdGUgZ2FwLCB0aGVcbi8vIGAwIDAgMjkgMiAqYCAoRmViIDI5KSBsZWFwLXllYXItb25seSBzY2hlZHVsZSwgd2l0aCBhIG9uZS15ZWFyXG4vLyBidWZmZXIgc28gd2UgbmV2ZXIgcmVwb3J0IGEgcmVhbCBjcm9uIHBhdHRlcm4gYXMgXCJuZXZlciBtYXRjaGVzXCIuXG5jb25zdCBNQVhfTkVYVF9GSVJFX0lURVJBVElPTlMgPSA1ICogMzY2ICogMjQgKiA2MFxuXG4vKipcbiAqIFJldHVybnMgdGhlIG5leHQgRGF0ZSBzdHJpY3RseSBhZnRlciBgZnJvbWAgdGhhdCBzYXRpc2ZpZXMgYHBhcnNlZGAuXG4gKiBPcGVyYXRlcyBhdCBtaW51dGUgZ3JhbnVsYXJpdHkuIEJhaWxzIG91dCB3aXRoIGFuIGVycm9yIGFmdGVyIGZpdmVcbiAqIHllYXJzIG9mIHNlYXJjaCwgd2hpY2ggb25seSBoYXBwZW5zIGlmIHRoZSBleHByZXNzaW9uIG1hdGNoZXMgbm9cbiAqIHJlYWwgdGltZSAoZS5nLiwgYDAgMCAzMSAyICpgIOKAlCBGZWIgMzFzdCkuXG4gKiBAcGFyYW0ge1BhcnNlZENyb259IHBhcnNlZCAtIFBhcnNlZCBjcm9uIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge0RhdGV9IGZyb20gLSBSZWZlcmVuY2UgRGF0ZSDigJQgdGhlIG5leHQgbWF0Y2ggaXMgc3RyaWN0bHkgYWZ0ZXIgdGhpcy5cbiAqIEByZXR1cm5zIHtEYXRlfSAtIE5leHQgZGF0ZSBtYXRjaGluZyB0aGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRDcm9uRmlyZURhdGUocGFyc2VkLCBmcm9tKSB7XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IG5ldyBEYXRlKGZyb20uZ2V0VGltZSgpKVxuXG4gIGNhbmRpZGF0ZS5zZXRTZWNvbmRzKDAsIDApXG4gIGNhbmRpZGF0ZS5zZXRNaW51dGVzKGNhbmRpZGF0ZS5nZXRNaW51dGVzKCkgKyAxKVxuXG4gIGZvciAobGV0IGl0ZXJhdGlvbnMgPSAwOyBpdGVyYXRpb25zIDwgTUFYX05FWFRfRklSRV9JVEVSQVRJT05TOyBpdGVyYXRpb25zICs9IDEpIHtcbiAgICBpZiAoY2FuZGlkYXRlTWF0Y2hlcyhjYW5kaWRhdGUsIHBhcnNlZCkpIHJldHVybiBjYW5kaWRhdGVcblxuICAgIGNhbmRpZGF0ZS5zZXRNaW51dGVzKGNhbmRpZGF0ZS5nZXRNaW51dGVzKCkgKyAxKVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBDcm9uIGV4cHJlc3Npb24gXCIke3BhcnNlZC5leHByZXNzaW9ufVwiIG5ldmVyIG1hdGNoZXNgKVxufVxuXG4vKipcbiAqIFJ1bnMgY2FuZGlkYXRlIG1hdGNoZXMuXG4gKiBAcGFyYW0ge0RhdGV9IGNhbmRpZGF0ZSAtIENhbmRpZGF0ZSBEYXRlIChpbiBsb2NhbCB0aW1lKS5cbiAqIEBwYXJhbSB7UGFyc2VkQ3Jvbn0gcGFyc2VkIC0gUGFyc2VkIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSBjYW5kaWRhdGUgbWF0Y2hlcyB0aGUgcGFyc2VkIHNjaGVkdWxlLlxuICovXG5mdW5jdGlvbiBjYW5kaWRhdGVNYXRjaGVzKGNhbmRpZGF0ZSwgcGFyc2VkKSB7XG4gIGlmICghcGFyc2VkLm1pbnV0ZS5oYXMoY2FuZGlkYXRlLmdldE1pbnV0ZXMoKSkpIHJldHVybiBmYWxzZVxuICBpZiAoIXBhcnNlZC5ob3VyLmhhcyhjYW5kaWRhdGUuZ2V0SG91cnMoKSkpIHJldHVybiBmYWxzZVxuICBpZiAoIXBhcnNlZC5tb250aC5oYXMoY2FuZGlkYXRlLmdldE1vbnRoKCkgKyAxKSkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgZGF5T2ZNb250aE1hdGNoID0gcGFyc2VkLmRheU9mTW9udGguaGFzKGNhbmRpZGF0ZS5nZXREYXRlKCkpXG4gIGNvbnN0IGRheU9mV2Vla01hdGNoID0gcGFyc2VkLmRheU9mV2Vlay5oYXMoY2FuZGlkYXRlLmdldERheSgpKVxuXG4gIC8vIFBPU0lYL1ZpeGllIGNyb24gT1Igc2VtYW50aWNzOiB3aGVuIGJvdGggZGF5IGZpZWxkcyBhcmVcbiAgLy8gcmVzdHJpY3RlZCwgZmlyZSB3aGVuIEVJVEhFUiBtYXRjaGVzLiBXaGVuIG9ubHkgb25lIGlzXG4gIC8vIHJlc3RyaWN0ZWQsIG9ubHkgdGhhdCBvbmUgYXBwbGllcy5cbiAgaWYgKHBhcnNlZC5kYXlPZk1vbnRoUmVzdHJpY3RlZCAmJiBwYXJzZWQuZGF5T2ZXZWVrUmVzdHJpY3RlZCkge1xuICAgIHJldHVybiBkYXlPZk1vbnRoTWF0Y2ggfHwgZGF5T2ZXZWVrTWF0Y2hcbiAgfVxuXG4gIGlmIChwYXJzZWQuZGF5T2ZNb250aFJlc3RyaWN0ZWQpIHJldHVybiBkYXlPZk1vbnRoTWF0Y2hcbiAgaWYgKHBhcnNlZC5kYXlPZldlZWtSZXN0cmljdGVkKSByZXR1cm4gZGF5T2ZXZWVrTWF0Y2hcblxuICByZXR1cm4gdHJ1ZVxufVxuIl19
|
|
@@ -42,7 +42,7 @@ async function runJobMessage(message) {
|
|
|
42
42
|
if (!isJobMessage(message)) {
|
|
43
43
|
throw new Error("Forked background job runner received invalid payload");
|
|
44
44
|
}
|
|
45
|
-
await runJobPayload(message.payload);
|
|
45
|
+
await runJobPayload(message.payload, { closeConnections: false });
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
48
|
* Runs handle job message.
|
|
@@ -71,4 +71,4 @@ process.once("disconnect", () => {
|
|
|
71
71
|
process.once("message", (message) => {
|
|
72
72
|
void handleJobMessage(message);
|
|
73
73
|
});
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ya2VkLXJ1bm5lci1jaGlsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvZm9ya2VkLXJ1bm5lci1jaGlsZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUE7QUFFM0MsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFBO0FBRXJCOzs7O0dBSUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxPQUFPO0lBQzNCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRXpELE1BQU0sYUFBYSxHQUFHLHNDQUFzQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFdEUsT0FBTyxhQUFhLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQTtBQUNoRixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsTUFBTSxDQUFDLFFBQVE7SUFDdEIsU0FBUyxHQUFHLElBQUksQ0FBQTtJQUNoQixPQUFPLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtJQUUzQixJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUN0QixDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtBQUM1QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxpQkFBaUI7SUFDeEIsSUFBSSxPQUFPLENBQUMsSUFBSTtRQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQTtBQUN4RCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxhQUFhLENBQUMsT0FBTztJQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFFRCxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtBQUNqRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxPQUFPO0lBQ3JDLElBQUksQ0FBQztRQUNILE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzVCLGlCQUFpQixFQUFFLENBQUE7UUFDbkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixpQkFBaUIsRUFBRSxDQUFBO1FBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1gsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDM0MsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzdDLENBQUM7QUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7SUFDOUIsSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2pDLENBQUMsQ0FBQyxDQUFBO0FBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtJQUNsQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ2hDLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBydW5Kb2JQYXlsb2FkIGZyb20gXCIuL2pvYi1ydW5uZXIuanNcIlxuXG5sZXQgZmluaXNoaW5nID0gZmFsc2VcblxuLyoqXG4gKiBSdW5zIGlzIGpvYiBtZXNzYWdlLlxuICogQHBhcmFtIHs/fSBtZXNzYWdlIC0gSVBDIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7bWVzc2FnZSBpcyB7dHlwZTogXCJqb2JcIiwgcGF5bG9hZDogaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iUGF5bG9hZH19IC0gV2hldGhlciB0aGlzIGlzIGEgam9iIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGlzSm9iTWVzc2FnZShtZXNzYWdlKSB7XG4gIGlmICghbWVzc2FnZSB8fCB0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgbWVzc2FnZVJlY29yZCA9IC8qKiBAdHlwZSB7e3R5cGU/OiA/LCBwYXlsb2FkPzogP319ICovIChtZXNzYWdlKVxuXG4gIHJldHVybiBtZXNzYWdlUmVjb3JkLnR5cGUgPT09IFwiam9iXCIgJiYgT2JqZWN0Lmhhc093bihtZXNzYWdlUmVjb3JkLCBcInBheWxvYWRcIilcbn1cblxuLyoqXG4gKiBSdW5zIGZpbmlzaC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBleGl0Q29kZSAtIFByb2Nlc3MgZXhpdCBjb2RlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGZpbmlzaChleGl0Q29kZSkge1xuICBmaW5pc2hpbmcgPSB0cnVlXG4gIHByb2Nlc3MuZXhpdENvZGUgPSBleGl0Q29kZVxuXG4gIGlmIChwcm9jZXNzLmNvbm5lY3RlZCAmJiBwcm9jZXNzLmRpc2Nvbm5lY3QpIHtcbiAgICBwcm9jZXNzLmRpc2Nvbm5lY3QoKVxuICB9XG5cbiAgc2V0SW1tZWRpYXRlKCgpID0+IHByb2Nlc3MuZXhpdChleGl0Q29kZSkpXG59XG5cbi8qKlxuICogUnVucyByZXBvcnQgam9iIGZpbmlzaGVkLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlcG9ydEpvYkZpbmlzaGVkKCkge1xuICBpZiAocHJvY2Vzcy5zZW5kKSBwcm9jZXNzLnNlbmQoe3R5cGU6IFwiam9iLXJlcG9ydGVkXCJ9KVxufVxuXG4vKipcbiAqIFJ1bnMgcnVuIGpvYiBtZXNzYWdlLlxuICogQHBhcmFtIHs/fSBtZXNzYWdlIC0gSVBDIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciB0aGUgcGF5bG9hZCBoYXMgcnVuLlxuICovXG5hc3luYyBmdW5jdGlvbiBydW5Kb2JNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgaWYgKCFpc0pvYk1lc3NhZ2UobWVzc2FnZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGb3JrZWQgYmFja2dyb3VuZCBqb2IgcnVubmVyIHJlY2VpdmVkIGludmFsaWQgcGF5bG9hZFwiKVxuICB9XG5cbiAgYXdhaXQgcnVuSm9iUGF5bG9hZChtZXNzYWdlLnBheWxvYWQsIHtjbG9zZUNvbm5lY3Rpb25zOiBmYWxzZX0pXG59XG5cbi8qKlxuICogUnVucyBoYW5kbGUgam9iIG1lc3NhZ2UuXG4gKiBAcGFyYW0gez99IG1lc3NhZ2UgLSBJUEMgbWVzc2FnZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIGNvbXBsZXRpb24gaXMgcmVwb3J0ZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUpvYk1lc3NhZ2UobWVzc2FnZSkge1xuICB0cnkge1xuICAgIGF3YWl0IHJ1bkpvYk1lc3NhZ2UobWVzc2FnZSlcbiAgICByZXBvcnRKb2JGaW5pc2hlZCgpXG4gICAgZmluaXNoKDApXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVwb3J0Sm9iRmluaXNoZWQoKVxuICAgIGNvbnNvbGUuZXJyb3IoXCJGb3JrZWQgYmFja2dyb3VuZCBqb2IgcnVubmVyIGZhaWxlZDpcIiwgZXJyb3IpXG4gICAgZmluaXNoKDEpXG4gIH1cbn1cblxuZm9yIChjb25zdCBzaWduYWwgb2YgW1wiU0lHVEVSTVwiLCBcIlNJR0lOVFwiXSkge1xuICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiBwcm9jZXNzLmV4aXQoMSkpXG59XG5cbnByb2Nlc3Mub25jZShcImRpc2Nvbm5lY3RcIiwgKCkgPT4ge1xuICBpZiAoIWZpbmlzaGluZykgcHJvY2Vzcy5leGl0KDApXG59KVxuXG5wcm9jZXNzLm9uY2UoXCJtZXNzYWdlXCIsIChtZXNzYWdlKSA9PiB7XG4gIHZvaWQgaGFuZGxlSm9iTWVzc2FnZShtZXNzYWdlKVxufSlcbiJdfQ==
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Runs run job payload.
|
|
3
3
|
* @param {import("./types.js").BackgroundJobPayload} payload - Payload.
|
|
4
|
+
* @param {object} [options] - Runner options.
|
|
5
|
+
* @param {boolean} [options.closeConnections] - Whether to gracefully close framework connections after the job.
|
|
4
6
|
* @returns {Promise<void>} - Resolves when complete.
|
|
5
7
|
*/
|
|
6
|
-
export default function runJobPayload(payload: import("./types.js").BackgroundJobPayload
|
|
8
|
+
export default function runJobPayload(payload: import("./types.js").BackgroundJobPayload, { closeConnections }?: {
|
|
9
|
+
closeConnections?: boolean | undefined;
|
|
10
|
+
}): Promise<void>;
|
|
7
11
|
//# sourceMappingURL=job-runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-runner.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/job-runner.js"],"names":[],"mappings":"AAiDA
|
|
1
|
+
{"version":3,"file":"job-runner.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/job-runner.js"],"names":[],"mappings":"AAiDA;;;;;;GAMG;AACH,+CALW,OAAO,YAAY,EAAE,oBAAoB,yBAEjD;IAA0B,gBAAgB;CAC1C,GAAU,OAAO,CAAC,IAAI,CAAC,CA0DzB"}
|
|
@@ -43,9 +43,11 @@ async function connectBeacon(configuration) {
|
|
|
43
43
|
/**
|
|
44
44
|
* Runs run job payload.
|
|
45
45
|
* @param {import("./types.js").BackgroundJobPayload} payload - Payload.
|
|
46
|
+
* @param {object} [options] - Runner options.
|
|
47
|
+
* @param {boolean} [options.closeConnections] - Whether to gracefully close framework connections after the job.
|
|
46
48
|
* @returns {Promise<void>} - Resolves when complete.
|
|
47
49
|
*/
|
|
48
|
-
export default async function runJobPayload(payload) {
|
|
50
|
+
export default async function runJobPayload(payload, { closeConnections = true } = {}) {
|
|
49
51
|
const configuration = await configurationResolver();
|
|
50
52
|
configuration.setCurrent();
|
|
51
53
|
await configuration.initialize({ type: "background-jobs-runner" });
|
|
@@ -64,15 +66,6 @@ export default async function runJobPayload(payload) {
|
|
|
64
66
|
await configuration.withConnections({ name: `Background job runner: ${payload.jobName}` }, async () => {
|
|
65
67
|
await perform.apply(jobInstance, payload.args || []);
|
|
66
68
|
});
|
|
67
|
-
if (payload.id) {
|
|
68
|
-
await reporter.reportWithRetry({
|
|
69
|
-
jobId: payload.id,
|
|
70
|
-
status: "completed",
|
|
71
|
-
workerId: payload.workerId,
|
|
72
|
-
handedOffAtMs: payload.handedOffAtMs,
|
|
73
|
-
maxDurationMs: 30000
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
69
|
}
|
|
77
70
|
catch (error) {
|
|
78
71
|
if (payload.id) {
|
|
@@ -80,6 +73,7 @@ export default async function runJobPayload(payload) {
|
|
|
80
73
|
jobId: payload.id,
|
|
81
74
|
status: "failed",
|
|
82
75
|
error,
|
|
76
|
+
handoffId: payload.handoffId,
|
|
83
77
|
workerId: payload.workerId,
|
|
84
78
|
handedOffAtMs: payload.handedOffAtMs,
|
|
85
79
|
maxDurationMs: 30000
|
|
@@ -87,14 +81,26 @@ export default async function runJobPayload(payload) {
|
|
|
87
81
|
}
|
|
88
82
|
throw error;
|
|
89
83
|
}
|
|
84
|
+
if (payload.id) {
|
|
85
|
+
await reporter.reportWithRetry({
|
|
86
|
+
jobId: payload.id,
|
|
87
|
+
status: "completed",
|
|
88
|
+
handoffId: payload.handoffId,
|
|
89
|
+
workerId: payload.workerId,
|
|
90
|
+
handedOffAtMs: payload.handedOffAtMs,
|
|
91
|
+
maxDurationMs: 30000
|
|
92
|
+
});
|
|
93
|
+
}
|
|
90
94
|
}
|
|
91
95
|
finally {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
96
|
+
if (closeConnections) {
|
|
97
|
+
try {
|
|
98
|
+
await configuration.disconnectBeacon();
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
await configuration.closeDatabaseConnections();
|
|
102
|
+
}
|
|
97
103
|
}
|
|
98
104
|
}
|
|
99
105
|
}
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvam9iLXJ1bm5lci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxxQkFBcUIsTUFBTSw4QkFBOEIsQ0FBQTtBQUNoRSxPQUFPLHFCQUFxQixNQUFNLG1CQUFtQixDQUFBO0FBQ3JELE9BQU8sNEJBQTRCLE1BQU0sc0JBQXNCLENBQUE7QUFFL0QsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUE7QUFFcEM7Ozs7O0dBS0c7QUFDSCxTQUFTLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxLQUFLO0lBQ2xELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtJQUNsRCxNQUFNLGVBQWUsR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQ2pGLE1BQU0sT0FBTyxHQUFHO1FBQ2QsT0FBTyxFQUFFLEVBQUMsUUFBUSxFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUM7UUFDcEUsS0FBSyxFQUFFLGVBQWU7S0FDdkIsQ0FBQTtJQUNELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDO1dBQy9ELFdBQVcsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRS9DLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDNUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBQyxHQUFHLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsQ0FBQyxDQUFBO0lBRXpFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixP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QyxhQUFhO2dCQUNwQyxhQUFhLEVBQUUsS0FBSzthQUNyQixDQUFDLENBQUE7UUFDSixDQUFDO0lBQ0gsQ0FBQztZQUFTLENBQUM7UUFDVCxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDO2dCQUNILE1BQU0sYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUE7WUFDeEMsQ0FBQztvQkFBUyxDQUFDO2dCQUNULE1BQU0sYUFBYSxDQUFDLHdCQUF3QixFQUFFLENBQUE7WUFDaEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgY29uZmlndXJhdGlvblJlc29sdmVyIGZyb20gXCIuLi9jb25maWd1cmF0aW9uLXJlc29sdmVyLmpzXCJcbmltcG9ydCBCYWNrZ3JvdW5kSm9iUmVnaXN0cnkgZnJvbSBcIi4vam9iLXJlZ2lzdHJ5LmpzXCJcbmltcG9ydCBCYWNrZ3JvdW5kSm9ic1N0YXR1c1JlcG9ydGVyIGZyb20gXCIuL3N0YXR1cy1yZXBvcnRlci5qc1wiXG5cbmNvbnN0IEJFQUNPTl9SRUFEWV9USU1FT1VUX01TID0gNTAwMFxuXG4vKipcbiAqIFJ1bnMgcmVwb3J0IGJlYWNvbiByZWFkeSBlcnJvci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSB7P30gZXJyb3IgLSBCZWFjb24gcmVhZGluZXNzIGVycm9yLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlcG9ydEJlYWNvblJlYWR5RXJyb3IoY29uZmlndXJhdGlvbiwgZXJyb3IpIHtcbiAgY29uc3QgZXJyb3JFdmVudHMgPSBjb25maWd1cmF0aW9uLmdldEVycm9yRXZlbnRzKClcbiAgY29uc3Qgbm9ybWFsaXplZEVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpXG4gIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgY29udGV4dDoge3BlZXJUeXBlOiBcImJhY2tncm91bmQtam9icy1ydW5uZXJcIiwgc3RhZ2U6IFwiYmVhY29uLXJlYWR5XCJ9LFxuICAgIGVycm9yOiBub3JtYWxpemVkRXJyb3JcbiAgfVxuICBjb25zdCBoYXNMaXN0ZW5lciA9IGVycm9yRXZlbnRzLmxpc3RlbmVyQ291bnQoXCJmcmFtZXdvcmstZXJyb3JcIikgPiAwXG4gICAgfHwgZXJyb3JFdmVudHMubGlzdGVuZXJDb3VudChcImFsbC1lcnJvclwiKSA+IDBcblxuICBlcnJvckV2ZW50cy5lbWl0KFwiZnJhbWV3b3JrLWVycm9yXCIsIHBheWxvYWQpXG4gIGVycm9yRXZlbnRzLmVtaXQoXCJhbGwtZXJyb3JcIiwgey4uLnBheWxvYWQsIGVycm9yVHlwZTogXCJmcmFtZXdvcmstZXJyb3JcIn0pXG5cbiAgaWYgKCFoYXNMaXN0ZW5lcikge1xuICAgIGNvbnNvbGUuZXJyb3IoYFt2ZWxvY2lvdXMgZnJhbWV3b3JrLWVycm9yIHN0YWdlPWJlYWNvbi1yZWFkeV0gJHtub3JtYWxpemVkRXJyb3IubWVzc2FnZX1gKVxuICB9XG59XG5cbi8qKlxuICogUnVucyBjb25uZWN0IGJlYWNvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0QmVhY29uKGNvbmZpZ3VyYXRpb24pIHtcbiAgY29uc3QgYmVhY29uQ2xpZW50ID0gYXdhaXQgY29uZmlndXJhdGlvbi5jb25uZWN0QmVhY29uKHtwZWVyVHlwZTogXCJiYWNrZ3JvdW5kLWpvYnMtcnVubmVyXCJ9KVxuXG4gIGlmICghYmVhY29uQ2xpZW50KSByZXR1cm5cblxuICB0cnkge1xuICAgIGF3YWl0IGJlYWNvbkNsaWVudC53YWl0Rm9yUmVhZHkoe3RpbWVvdXRNczogQkVBQ09OX1JFQURZX1RJTUVPVVRfTVN9KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcG9ydEJlYWNvblJlYWR5RXJyb3IoY29uZmlndXJhdGlvbiwgZXJyb3IpXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIHJ1biBqb2IgcGF5bG9hZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iUGF5bG9hZH0gcGF5bG9hZCAtIFBheWxvYWQuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gUnVubmVyIG9wdGlvbnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNsb3NlQ29ubmVjdGlvbnNdIC0gV2hldGhlciB0byBncmFjZWZ1bGx5IGNsb3NlIGZyYW1ld29yayBjb25uZWN0aW9ucyBhZnRlciB0aGUgam9iLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gcnVuSm9iUGF5bG9hZChwYXlsb2FkLCB7Y2xvc2VDb25uZWN0aW9ucyA9IHRydWV9ID0ge30pIHtcbiAgY29uc3QgY29uZmlndXJhdGlvbiA9IGF3YWl0IGNvbmZpZ3VyYXRpb25SZXNvbHZlcigpXG4gIGNvbmZpZ3VyYXRpb24uc2V0Q3VycmVudCgpXG4gIGF3YWl0IGNvbmZpZ3VyYXRpb24uaW5pdGlhbGl6ZSh7dHlwZTogXCJiYWNrZ3JvdW5kLWpvYnMtcnVubmVyXCJ9KVxuICBhd2FpdCBjb25uZWN0QmVhY29uKGNvbmZpZ3VyYXRpb24pXG4gIGNvbnN0IHJlcG9ydGVyID0gbmV3IEJhY2tncm91bmRKb2JzU3RhdHVzUmVwb3J0ZXIoe2NvbmZpZ3VyYXRpb259KVxuXG4gIGNvbnN0IHJlZ2lzdHJ5ID0gbmV3IEJhY2tncm91bmRKb2JSZWdpc3RyeSh7Y29uZmlndXJhdGlvbn0pXG4gIGF3YWl0IHJlZ2lzdHJ5LmxvYWQoKVxuICBjb25zdCBKb2JDbGFzcyA9IHJlZ2lzdHJ5LmdldEpvYkJ5TmFtZShwYXlsb2FkLmpvYk5hbWUpXG4gIGNvbnN0IGpvYkluc3RhbmNlID0gbmV3IEpvYkNsYXNzKClcbiAgLyoqXG4gICAqIFBlcmZvcm0uXG4gICAqIEB0eXBlIHsoLi4uYXJnczogQXJyYXk8Pz4pID0+IFByb21pc2U8dm9pZD59ICovXG4gIGNvbnN0IHBlcmZvcm0gPSBqb2JJbnN0YW5jZS5wZXJmb3JtXG5cbiAgdHJ5IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29uZmlndXJhdGlvbi53aXRoQ29ubmVjdGlvbnMoe25hbWU6IGBCYWNrZ3JvdW5kIGpvYiBydW5uZXI6ICR7cGF5bG9hZC5qb2JOYW1lfWB9LCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHBlcmZvcm0uYXBwbHkoam9iSW5zdGFuY2UsIHBheWxvYWQuYXJncyB8fCBbXSlcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChwYXlsb2FkLmlkKSB7XG4gICAgICAgIGF3YWl0IHJlcG9ydGVyLnJlcG9ydFdpdGhSZXRyeSh7XG4gICAgICAgICAgam9iSWQ6IHBheWxvYWQuaWQsXG4gICAgICAgICAgc3RhdHVzOiBcImZhaWxlZFwiLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIGhhbmRvZmZJZDogcGF5bG9hZC5oYW5kb2ZmSWQsXG4gICAgICAgICAgd29ya2VySWQ6IHBheWxvYWQud29ya2VySWQsXG4gICAgICAgICAgaGFuZGVkT2ZmQXRNczogcGF5bG9hZC5oYW5kZWRPZmZBdE1zLFxuICAgICAgICAgIG1heER1cmF0aW9uTXM6IDMwMDAwXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgaWYgKHBheWxvYWQuaWQpIHtcbiAgICAgIGF3YWl0IHJlcG9ydGVyLnJlcG9ydFdpdGhSZXRyeSh7XG4gICAgICAgIGpvYklkOiBwYXlsb2FkLmlkLFxuICAgICAgICBzdGF0dXM6IFwiY29tcGxldGVkXCIsXG4gICAgICAgIGhhbmRvZmZJZDogcGF5bG9hZC5oYW5kb2ZmSWQsXG4gICAgICAgIHdvcmtlcklkOiBwYXlsb2FkLndvcmtlcklkLFxuICAgICAgICBoYW5kZWRPZmZBdE1zOiBwYXlsb2FkLmhhbmRlZE9mZkF0TXMsXG4gICAgICAgIG1heER1cmF0aW9uTXM6IDMwMDAwXG4gICAgICB9KVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoY2xvc2VDb25uZWN0aW9ucykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY29uZmlndXJhdGlvbi5kaXNjb25uZWN0QmVhY29uKClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IGNvbmZpZ3VyYXRpb24uY2xvc2VEYXRhYmFzZUNvbm5lY3Rpb25zKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -10,6 +10,10 @@ export default class JsonSocket extends JsonSocket_base {
|
|
|
10
10
|
* Narrows the runtime value to the documented type.
|
|
11
11
|
* @type {string | undefined} */
|
|
12
12
|
workerId: string | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Narrows the runtime value to the documented type.
|
|
15
|
+
* @type {boolean} */
|
|
16
|
+
supportsHandoffIdReporting: boolean;
|
|
13
17
|
/**
|
|
14
18
|
* Narrows the runtime value to the documented type.
|
|
15
19
|
* @type {boolean} */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-socket.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/json-socket.js"],"names":[],"mappings":";AAIA;IACE;;;OAGG;IACH,oBAFW,OAAO,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"json-socket.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/json-socket.js"],"names":[],"mappings":";AAIA;IACE;;;OAGG;IACH,oBAFW,OAAO,KAAK,EAAE,MAAM,EA8B9B;IA1BC,kCAAoB;IACpB;;oCAEgC;IAChC,UADU,MAAM,GAAG,SAAS,CACH;IACzB;;yBAEqB;IACrB,4BADU,OAAO,CACsB;IACvC;;yBAEqB;IACrB,oBADU,OAAO,CACa;IAC9B;;yBAEqB;IACrB,mBADU,OAAO,CACY;IAC7B;;yBAEqB;IACrB,mBADU,OAAO,CACY;IAC7B,eAAgB;IAOlB;;;;OAIG;IACH,eAHW,MAAM,GACJ,IAAI,CAqBhB;IAED;;;;OAIG;IACH,cAHW,OAAC,GACC,IAAI,CAIhB;IAED;;;OAGG;IACH,SAFa,IAAI,CAIhB;CACF"}
|
|
@@ -12,6 +12,10 @@ export default class JsonSocket extends EventEmitter {
|
|
|
12
12
|
* Narrows the runtime value to the documented type.
|
|
13
13
|
* @type {string | undefined} */
|
|
14
14
|
this.workerId = undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Narrows the runtime value to the documented type.
|
|
17
|
+
* @type {boolean} */
|
|
18
|
+
this.supportsHandoffIdReporting = false;
|
|
15
19
|
/**
|
|
16
20
|
* Narrows the runtime value to the documented type.
|
|
17
21
|
* @type {boolean} */
|
|
@@ -70,4 +74,4 @@ export default class JsonSocket extends EventEmitter {
|
|
|
70
74
|
this.socket.end();
|
|
71
75
|
}
|
|
72
76
|
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zb2NrZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2dyb3VuZC1qb2JzL2pzb24tc29ja2V0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFlBQVksTUFBTSwyQkFBMkIsQ0FBQTtBQUVwRCxNQUFNLENBQUMsT0FBTyxPQUFPLFVBQVcsU0FBUSxZQUFZO0lBQ2xEOzs7T0FHRztJQUNILFlBQVksTUFBTTtRQUNoQixLQUFLLEVBQUUsQ0FBQTtRQUNQLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCOzt3Q0FFZ0M7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUE7UUFDekI7OzZCQUVxQjtRQUNyQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsS0FBSyxDQUFBO1FBQ3ZDOzs2QkFFcUI7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQTtRQUM5Qjs7NkJBRXFCO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUE7UUFDN0I7OzZCQUVxQjtRQUNyQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFBO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLEtBQUs7UUFDWCxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQTtRQUVwQixPQUFPLElBQUksRUFBRSxDQUFDO1lBQ1osTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDOUMsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDO2dCQUFFLE1BQUs7WUFFOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1lBQ3RELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBRWpELElBQUksQ0FBQyxJQUFJO2dCQUFFLFNBQVE7WUFFbkIsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQy9CLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQzNCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLENBQUMsT0FBTztRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ25CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCIuLi91dGlscy9ldmVudC1lbWl0dGVyLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSnNvblNvY2tldCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIm5ldFwiKS5Tb2NrZXR9IHNvY2tldCAtIFNvY2tldCBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNvY2tldCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMud29ya2VySWQgPSB1bmRlZmluZWRcbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICogQHR5cGUge2Jvb2xlYW59ICovXG4gICAgdGhpcy5zdXBwb3J0c0hhbmRvZmZJZFJlcG9ydGluZyA9IGZhbHNlXG4gICAgLyoqXG4gICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAqIEB0eXBlIHtib29sZWFufSAqL1xuICAgIHRoaXMuYWNjZXB0c1NwYXduZWRKb2JzID0gdHJ1ZVxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLmFjY2VwdHNGb3JrZWRKb2JzID0gdHJ1ZVxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLmFjY2VwdHNJbmxpbmVKb2JzID0gdHJ1ZVxuICAgIHRoaXMuYnVmZmVyID0gXCJcIlxuICAgIHRoaXMuc29ja2V0LnNldEVuY29kaW5nKFwidXRmOFwiKVxuICAgIHRoaXMuc29ja2V0Lm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHRoaXMuX29uRGF0YShTdHJpbmcoY2h1bmspKSlcbiAgICB0aGlzLnNvY2tldC5vbihcImNsb3NlXCIsICgpID0+IHRoaXMuZW1pdChcImNsb3NlXCIpKVxuICAgIHRoaXMuc29ja2V0Lm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnJvcikpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBvbiBkYXRhLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2h1bmsgLSBEYXRhIGNodW5rLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIF9vbkRhdGEoY2h1bmspIHtcbiAgICB0aGlzLmJ1ZmZlciArPSBjaHVua1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IG5ld2xpbmVJbmRleCA9IHRoaXMuYnVmZmVyLmluZGV4T2YoXCJcXG5cIilcbiAgICAgIGlmIChuZXdsaW5lSW5kZXggPT09IC0xKSBicmVha1xuXG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5idWZmZXIuc2xpY2UoMCwgbmV3bGluZUluZGV4KS50cmltKClcbiAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5idWZmZXIuc2xpY2UobmV3bGluZUluZGV4ICsgMSlcblxuICAgICAgaWYgKCFsaW5lKSBjb250aW51ZVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gSlNPTi5wYXJzZShsaW5lKVxuICAgICAgICB0aGlzLmVtaXQoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnJvcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBzZW5kLlxuICAgKiBAcGFyYW0gez99IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHNlbmQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc2VuZChtZXNzYWdlKSB7XG4gICAgdGhpcy5zb2NrZXQud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkobWVzc2FnZSl9XFxuYClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNsb3NlLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuc29ja2V0LmVuZCgpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -26,26 +26,30 @@ export default class BackgroundJobsMain {
|
|
|
26
26
|
* Narrows the runtime value to the documented type.
|
|
27
27
|
* @type {Set<JsonSocket>} */
|
|
28
28
|
readyWorkers: Set<JsonSocket>;
|
|
29
|
+
/**
|
|
30
|
+
* Active durable handoffs keyed by the exact worker socket that received them.
|
|
31
|
+
* @type {Map<JsonSocket, Map<string, string>>} */
|
|
32
|
+
workerHandoffs: Map<JsonSocket, Map<string, string>>;
|
|
29
33
|
/**
|
|
30
34
|
* Narrows the runtime value to the documented type.
|
|
31
35
|
* @type {net.Server | undefined} */
|
|
32
36
|
server: net.Server | undefined;
|
|
33
37
|
/**
|
|
34
38
|
* Narrows the runtime value to the documented type.
|
|
35
|
-
* @type {
|
|
36
|
-
_pollTimer:
|
|
39
|
+
* @type {ReturnType<typeof setTimeout> | undefined} */
|
|
40
|
+
_pollTimer: ReturnType<typeof setTimeout> | undefined;
|
|
37
41
|
/**
|
|
38
42
|
* Narrows the runtime value to the documented type.
|
|
39
|
-
* @type {
|
|
40
|
-
_scheduledTimer:
|
|
43
|
+
* @type {ReturnType<typeof setTimeout> | undefined} */
|
|
44
|
+
_scheduledTimer: ReturnType<typeof setTimeout> | undefined;
|
|
41
45
|
/**
|
|
42
46
|
* Narrows the runtime value to the documented type.
|
|
43
|
-
* @type {
|
|
44
|
-
_errorRetryTimer:
|
|
47
|
+
* @type {ReturnType<typeof setTimeout> | undefined} */
|
|
48
|
+
_errorRetryTimer: ReturnType<typeof setTimeout> | undefined;
|
|
45
49
|
/**
|
|
46
50
|
* Narrows the runtime value to the documented type.
|
|
47
|
-
* @type {
|
|
48
|
-
_orphanTimer:
|
|
51
|
+
* @type {ReturnType<typeof setTimeout> | undefined} */
|
|
52
|
+
_orphanTimer: ReturnType<typeof setTimeout> | undefined;
|
|
49
53
|
/**
|
|
50
54
|
* Narrows the runtime value to the documented type.
|
|
51
55
|
* @type {BackgroundJobsScheduler | undefined} */
|
|
@@ -207,6 +211,48 @@ export default class BackgroundJobsMain {
|
|
|
207
211
|
_handleWorkerDraining({ jsonSocket }: {
|
|
208
212
|
jsonSocket: JsonSocket;
|
|
209
213
|
}): void;
|
|
214
|
+
/**
|
|
215
|
+
* Removes a lost worker socket and releases only leases dispatched through it.
|
|
216
|
+
* @param {JsonSocket} worker - Disconnected worker socket.
|
|
217
|
+
* @returns {Promise<void>} - Resolves after its active leases are released.
|
|
218
|
+
*/
|
|
219
|
+
_handleWorkerSocketClosed(worker: JsonSocket): Promise<void>;
|
|
220
|
+
/**
|
|
221
|
+
* Releases all leases still owned by one exact worker socket.
|
|
222
|
+
* @param {JsonSocket} worker - Worker socket.
|
|
223
|
+
* @returns {Promise<void>} - Resolves after fenced releases and dispatch wake-up.
|
|
224
|
+
*/
|
|
225
|
+
_releaseWorkerHandoffs(worker: JsonSocket): Promise<void>;
|
|
226
|
+
/**
|
|
227
|
+
* Runs one idempotent conditional lease release.
|
|
228
|
+
* @param {object} args - Options.
|
|
229
|
+
* @param {string} args.handoffId - Handoff lease id.
|
|
230
|
+
* @param {string} args.jobId - Job id.
|
|
231
|
+
* @param {JsonSocket} args.worker - Socket that received the lease.
|
|
232
|
+
* @returns {Promise<void>} - Resolves after the fenced transition.
|
|
233
|
+
*/
|
|
234
|
+
_releaseHandoff({ handoffId, jobId, worker }: {
|
|
235
|
+
handoffId: string;
|
|
236
|
+
jobId: string;
|
|
237
|
+
worker: JsonSocket;
|
|
238
|
+
}): Promise<void>;
|
|
239
|
+
/**
|
|
240
|
+
* Forgets a successfully reported lease without relying on worker ids.
|
|
241
|
+
* @param {object} args - Options.
|
|
242
|
+
* @param {string} args.handoffId - Handoff lease id.
|
|
243
|
+
* @param {string} args.jobId - Job id.
|
|
244
|
+
* @returns {void}
|
|
245
|
+
*/
|
|
246
|
+
_forgetHandoff({ handoffId, jobId }: {
|
|
247
|
+
handoffId: string;
|
|
248
|
+
jobId: string;
|
|
249
|
+
}): void;
|
|
250
|
+
/**
|
|
251
|
+
* Reports an unexpected lease-release failure on framework error channels.
|
|
252
|
+
* @param {?} error - Release failure.
|
|
253
|
+
* @returns {void}
|
|
254
|
+
*/
|
|
255
|
+
_reportHandoffReleaseError(error: unknown): void;
|
|
210
256
|
/**
|
|
211
257
|
* Runs handle enqueue.
|
|
212
258
|
* @param {object} args - Options.
|
|
@@ -242,11 +288,12 @@ export default class BackgroundJobsMain {
|
|
|
242
288
|
}): Promise<void>;
|
|
243
289
|
/**
|
|
244
290
|
* Runs emit background job failed.
|
|
245
|
-
* @param {{error: ?, handedOffAtMs?: number, job: import("./types.js").BackgroundJobRow, workerId?: string}} args - Failure event data.
|
|
291
|
+
* @param {{error: ?, handoffId?: string, handedOffAtMs?: number, job: import("./types.js").BackgroundJobRow, workerId?: string}} args - Failure event data.
|
|
246
292
|
* @returns {void}
|
|
247
293
|
*/
|
|
248
|
-
_emitBackgroundJobFailed({ error, handedOffAtMs, job, workerId }: {
|
|
294
|
+
_emitBackgroundJobFailed({ error, handoffId, handedOffAtMs, job, workerId }: {
|
|
249
295
|
error: unknown;
|
|
296
|
+
handoffId?: string;
|
|
250
297
|
handedOffAtMs?: number;
|
|
251
298
|
job: import("./types.js").BackgroundJobRow;
|
|
252
299
|
workerId?: string;
|
|
@@ -355,6 +402,11 @@ export default class BackgroundJobsMain {
|
|
|
355
402
|
* @returns {void}
|
|
356
403
|
*/
|
|
357
404
|
_scheduleErrorRetry(): void;
|
|
405
|
+
/**
|
|
406
|
+
* Retries failed disconnected-socket releases before draining queued work.
|
|
407
|
+
* @returns {Promise<void>} - Resolves after retry work.
|
|
408
|
+
*/
|
|
409
|
+
_retryAfterError(): Promise<void>;
|
|
358
410
|
/**
|
|
359
411
|
* Inner drain loop: pulls eligible queued jobs and hands them off to
|
|
360
412
|
* ready workers until one of them runs out.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/main.js"],"names":[],"mappings":"AAyCA;IACE;;;;;;OAMG;IACH,2CAJG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QACvB,IAAI;QACJ,IAAI;KAC5B,
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/main.js"],"names":[],"mappings":"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"}
|