@effect-app/infra 1.1.13 → 1.1.14
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/CHANGELOG.md +6 -0
- package/_cjs/services/QueueMaker/errors.cjs +4 -2
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/dist/services/QueueMaker/errors.d.ts +1 -1
- package/dist/services/QueueMaker/errors.d.ts.map +1 -1
- package/dist/services/QueueMaker/errors.js +5 -3
- package/package.json +3 -3
- package/src/services/QueueMaker/errors.ts +2 -2
- package/vitest.config.ts.timestamp-1711656440838-19c636fe320df.mjs +0 -0
- package/vitest.config.ts.timestamp-1711724061890-6ecedb0a07fdd.mjs +0 -0
- package/vitest.config.ts.timestamp-1711743489537-da8d9e5f66c9f.mjs +0 -0
- package/vitest.config.ts.timestamp-1711744615239-dcf257a844e01.mjs +37 -0
package/CHANGELOG.md
CHANGED
|
@@ -8,7 +8,6 @@ exports.reportFatalQueueError = void 0;
|
|
|
8
8
|
exports.reportNonInterruptedFailure = reportNonInterruptedFailure;
|
|
9
9
|
exports.reportNonInterruptedFailureCause = reportNonInterruptedFailureCause;
|
|
10
10
|
exports.reportQueueError = void 0;
|
|
11
|
-
var _RequestFiberSet = require("@effect-app/infra-adapters/RequestFiberSet");
|
|
12
11
|
var _errorReporter = require("@effect-app/infra/errorReporter");
|
|
13
12
|
var _effectApp = require("effect-app");
|
|
14
13
|
const reportQueueError_ = (0, _errorReporter.reportError)("Queue");
|
|
@@ -24,7 +23,10 @@ const reportQueueError = (cause, extras) => reportQueueError_(cause, extras);
|
|
|
24
23
|
*/
|
|
25
24
|
exports.reportQueueError = reportQueueError;
|
|
26
25
|
function forkDaemonReportQueue(self) {
|
|
27
|
-
return self.pipe(_effectApp.Effect.tapErrorCause(reportNonInterruptedFailureCause({})),
|
|
26
|
+
return self.pipe(_effectApp.Effect.tapErrorCause(reportNonInterruptedFailureCause({})),
|
|
27
|
+
// for queues not important because they have a kind of producer on publish?
|
|
28
|
+
// setRootParentSpan,
|
|
29
|
+
_effectApp.Effect.forkDaemon);
|
|
28
30
|
}
|
|
29
31
|
const reportFatalQueueError = exports.reportFatalQueueError = (0, _errorReporter.reportError)("FatalQueue");
|
|
30
32
|
function reportNonInterruptedFailure(context) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.cjs","names":["
|
|
1
|
+
{"version":3,"file":"errors.cjs","names":["_errorReporter","require","_effectApp","reportQueueError_","reportError","reportQueueError","cause","extras","exports","forkDaemonReportQueue","self","pipe","Effect","tapErrorCause","reportNonInterruptedFailureCause","forkDaemon","reportFatalQueueError","reportNonInterruptedFailure","context","report","inp","exit","flatMap","result","Exit","match","onFailure","map","onSuccess","sync","Cause","isInterrupted","failCause"],"sources":["../../../src/services/QueueMaker/errors.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA,MAAME,iBAAiB,GAAG,IAAAC,0BAAW,EAAC,OAAO,CAAC;AAEvC,MAAMC,gBAAgB,GAAGA,CAAIC,KAAe,EAAEC,MAA4C,KAC/FJ,iBAAiB,CAACG,KAAK,EAAEC,MAAM,CAAC;AAElC;;;;;;;;;AAAAC,OAAA,CAAAH,gBAAA,GAAAA,gBAAA;AASM,SAAUI,qBAAqBA,CAAUC,IAAqB;EAClE,OAAOA,IAAI,CAACC,IAAI,CACdC,iBAAM,CAACC,aAAa,CAACC,gCAAgC,CAAC,EAAE,CAAC,CAAC;EAC1D;EACA;EACAF,iBAAM,CAACG,UAAU,CAClB;AACH;AAEO,MAAMC,qBAAqB,GAAAR,OAAA,CAAAQ,qBAAA,GAAG,IAAAZ,0BAAW,EAC9C,YAAY,CACb;AAEK,SAAUa,2BAA2BA,CAACC,OAAiC;EAC3E,MAAMC,MAAM,GAAGL,gCAAgC,CAACI,OAAO,CAAC;EACxD,OAAiBE,GAAoB,IACnCA,GAAG,CAACT,IAAI,CACNC,iBAAM,CACHS,IAAI,EACPT,iBAAM,CACHU,OAAO,CAAEC,MAAM,IACdC,eAAI,CAACC,KAAK,CAACF,MAAM,EAAE;IACjBG,SAAS,EAAGpB,KAAK,IAAKM,iBAAM,CAACe,GAAG,CAACR,MAAM,CAACb,KAAK,CAAC,EAAE,MAAMiB,MAAM,CAAC;IAC7DK,SAAS,EAAEA,CAAA,KAAMhB,iBAAM,CAACiB,IAAI,CAAC,MAAMN,MAAM;GAC1C,CAAC,CACH,CACJ;AACL;AAEM,SAAUT,gCAAgCA,CAACI,OAAiC;EAChF,OAAWZ,KAAe,IAAkB;IAC1C,IAAIwB,gBAAK,CAACC,aAAa,CAACzB,KAAK,CAAC,EAAE;MAC9B,OAAOM,iBAAM,CAACoB,SAAS,CAAC1B,KAAqB,CAAC;IAChD;IACA,OAAOD,gBAAgB,CAACC,KAAK,EAAEY,OAAO,CAAC;EACzC,CAAC;AACH","ignoreList":[]}
|
|
@@ -9,7 +9,7 @@ export declare const reportQueueError: <E>(cause: Cause<E>, extras?: Record<stri
|
|
|
9
9
|
*
|
|
10
10
|
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
11
11
|
*/
|
|
12
|
-
export declare function forkDaemonReportQueue<R, E, A>(self: Effect<A, E, R>): Effect.Effect<import("effect/Fiber").RuntimeFiber<A, E>, never,
|
|
12
|
+
export declare function forkDaemonReportQueue<R, E, A>(self: Effect<A, E, R>): Effect.Effect<import("effect/Fiber").RuntimeFiber<A, E>, never, R>;
|
|
13
13
|
export declare const reportFatalQueueError: (cause: Cause<unknown>, extras?: Record<string, unknown> | undefined) => Effect.Effect<import("effect-app/client/errors").CauseException<unknown> | undefined, never, never>;
|
|
14
14
|
export declare function reportNonInterruptedFailure(context?: Record<string, unknown>): <R, E, A>(inp: Effect<A, E, R>) => Effect<Exit<A, E>, never, R>;
|
|
15
15
|
export declare function reportNonInterruptedFailureCause(context?: Record<string, unknown>): <E>(cause: Cause<E>) => Effect<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/services/QueueMaker/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/services/QueueMaker/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAIhD,eAAO,MAAM,gBAAgB,aAAc,MAAM,CAAC,CAAC,WAAW,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,wGAC/D,CAAA;AAElC;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,sEAOnE;AAED,eAAO,MAAM,qBAAqB,8KAEjC,CAAA;AAED,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kBAErD,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAYrE;AAED,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,cAC9D,MAAM,CAAC,CAAC,KAAG,OAAO,IAAI,CAAC,CAM1C"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { setRootParentSpan } from "@effect-app/infra-adapters/RequestFiberSet";
|
|
2
1
|
import { reportError } from "@effect-app/infra/errorReporter";
|
|
3
2
|
import { Cause, Effect, Exit } from "effect-app";
|
|
4
3
|
const reportQueueError_ = reportError("Queue");
|
|
@@ -13,7 +12,10 @@ export const reportQueueError = (cause, extras) => reportQueueError_(cause, extr
|
|
|
13
12
|
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
14
13
|
*/
|
|
15
14
|
export function forkDaemonReportQueue(self) {
|
|
16
|
-
return self.pipe(Effect.tapErrorCause(reportNonInterruptedFailureCause({})),
|
|
15
|
+
return self.pipe(Effect.tapErrorCause(reportNonInterruptedFailureCause({})),
|
|
16
|
+
// for queues not important because they have a kind of producer on publish?
|
|
17
|
+
// setRootParentSpan,
|
|
18
|
+
Effect.forkDaemon);
|
|
17
19
|
}
|
|
18
20
|
export const reportFatalQueueError = reportError("FatalQueue");
|
|
19
21
|
export function reportNonInterruptedFailure(context) {
|
|
@@ -33,4 +35,4 @@ export function reportNonInterruptedFailureCause(context) {
|
|
|
33
35
|
return reportQueueError(cause, context);
|
|
34
36
|
};
|
|
35
37
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL1F1ZXVlTWFrZXIvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFaEQsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7QUFFOUMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBSSxLQUFlLEVBQUUsTUFBNEMsRUFBRSxFQUFFLENBQ25HLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUVsQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBVSxJQUFxQjtJQUNsRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQ2QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxRCw0RUFBNEU7SUFDNUUscUJBQXFCO0lBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQ2xCLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUM5QyxZQUFZLENBQ2IsQ0FBQTtBQUVELE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxPQUFpQztJQUMzRSxNQUFNLE1BQU0sR0FBRyxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN4RCxPQUFPLENBQVUsR0FBb0IsRUFBZ0MsRUFBRSxDQUNyRSxHQUFHLENBQUMsSUFBSSxDQUNOLE1BQU07U0FDSCxJQUFJLEVBQ1AsTUFBTTtTQUNILE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ2pCLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQzdELFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztLQUMzQyxDQUFDLENBQ0gsQ0FDSixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxnQ0FBZ0MsQ0FBQyxPQUFpQztJQUNoRixPQUFPLENBQUksS0FBZSxFQUFnQixFQUFFO1FBQzFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFxQixDQUFDLENBQUE7UUFDaEQsQ0FBQztRQUNELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3pDLENBQUMsQ0FBQTtBQUNILENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.14",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"pure-rand": "6.1.0",
|
|
20
20
|
"redlock": "^4.2.0",
|
|
21
21
|
"@effect-app/core": "1.0.5",
|
|
22
|
-
"effect-app": "1.0.11",
|
|
23
22
|
"@effect-app/infra-adapters": "1.0.15",
|
|
24
|
-
"@effect-app/schema": "1.0.9"
|
|
23
|
+
"@effect-app/schema": "1.0.9",
|
|
24
|
+
"effect-app": "1.0.11"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@babel/cli": "^7.24.1",
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { setRootParentSpan } from "@effect-app/infra-adapters/RequestFiberSet"
|
|
2
1
|
import { reportError } from "@effect-app/infra/errorReporter"
|
|
3
2
|
import { Cause, Effect, Exit } from "effect-app"
|
|
4
3
|
|
|
@@ -19,7 +18,8 @@ export const reportQueueError = <E>(cause: Cause<E>, extras?: Record<string, unk
|
|
|
19
18
|
export function forkDaemonReportQueue<R, E, A>(self: Effect<A, E, R>) {
|
|
20
19
|
return self.pipe(
|
|
21
20
|
Effect.tapErrorCause(reportNonInterruptedFailureCause({})),
|
|
22
|
-
|
|
21
|
+
// for queues not important because they have a kind of producer on publish?
|
|
22
|
+
// setRootParentSpan,
|
|
23
23
|
Effect.forkDaemon
|
|
24
24
|
)
|
|
25
25
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// packages/infra/vitest.config.ts
|
|
2
|
+
import { defineConfig } from "file:///Users/patrickroza/pj/effect-app/libs/node_modules/.pnpm/vite@5.2.6_@types+node@20.11.30/node_modules/vite/dist/node/index.js";
|
|
3
|
+
|
|
4
|
+
// vite.config.base.ts
|
|
5
|
+
import path from "path";
|
|
6
|
+
import fs from "fs";
|
|
7
|
+
var __vite_injected_original_dirname = "/Users/patrickroza/pj/effect-app/libs";
|
|
8
|
+
function makeConfig(dirName) {
|
|
9
|
+
const prefix = path.resolve(__vite_injected_original_dirname, "packages");
|
|
10
|
+
const packages = fs.readdirSync(prefix).map((f) => prefix + "/" + f).filter((f) => fs.lstatSync(f).isDirectory());
|
|
11
|
+
const cfg = {
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
13
|
+
//plugins: [autoImport],
|
|
14
|
+
test: {
|
|
15
|
+
include: ["./test/**/*.test.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
|
|
16
|
+
reporters: "verbose",
|
|
17
|
+
globals: true
|
|
18
|
+
},
|
|
19
|
+
resolve: {
|
|
20
|
+
alias: packages.reduce((acc, cur) => {
|
|
21
|
+
acc[JSON.parse(fs.readFileSync(cur + "/package.json", "utf-8")).name] = path.resolve(cur, cur.endsWith("core") ? "dist" : "src");
|
|
22
|
+
return acc;
|
|
23
|
+
}, {})
|
|
24
|
+
// "@effect-app/core/Prelude": path.join(__dirname, "packages/core/src/Prelude.code.ts")
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
console.log(cfg);
|
|
28
|
+
return cfg;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// packages/infra/vitest.config.ts
|
|
32
|
+
var __vite_injected_original_dirname2 = "/Users/patrickroza/pj/effect-app/libs/packages/infra";
|
|
33
|
+
var vitest_config_default = defineConfig(makeConfig(__vite_injected_original_dirname2));
|
|
34
|
+
export {
|
|
35
|
+
vitest_config_default as default
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50cyIsICJ2aXRlLmNvbmZpZy5iYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYS92aXRlc3QuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCBtYWtlQ29uZmlnIGZyb20gXCIuLi8uLi92aXRlLmNvbmZpZy5iYXNlXCJcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKG1ha2VDb25maWcoX19kaXJuYW1lKSlcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlic1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy92aXRlLmNvbmZpZy5iYXNlLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvdml0ZS5jb25maWcuYmFzZS50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIlxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVzdC9jb25maWdcIlxuXG4vLyBjb25zdCBhdXRvSW1wb3J0ID0gQXV0b0ltcG9ydCh7XG4vLyAgIGR0czogXCIuL3Rlc3QvYXV0by1pbXBvcnRzLmQudHNcIixcbi8vICAgLy8gaW5jbHVkZTogW1xuLy8gICAvLyAgIC9cXC50ZXN0XFwuW3RqXXN4PyQvIC8vIC50cywgLnRzeCwgLmpzLCAuanN4XG4vLyAgIC8vIF0sXG4vLyAgIGltcG9ydHM6IFtcbi8vICAgICBcInZpdGVzdFwiXG4vLyAgIF1cbi8vIH0pXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VDb25maWcoZGlyTmFtZT86IHN0cmluZykge1xuICBjb25zdCBwcmVmaXggPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBcInBhY2thZ2VzXCIpXG4gIGNvbnN0IHBhY2thZ2VzID0gZnMucmVhZGRpclN5bmMocHJlZml4KS5tYXAoZiA9PiBwcmVmaXggKyBcIi9cIiArIGYpLmZpbHRlcihmID0+IGZzLmxzdGF0U3luYyhmKS5pc0RpcmVjdG9yeSgpIClcbiAgY29uc3QgY2ZnID0ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgLy9wbHVnaW5zOiBbYXV0b0ltcG9ydF0sXG4gICAgdGVzdDoge1xuICAgICAgaW5jbHVkZTogIFtcIi4vdGVzdC8qKi8qLnRlc3Que2pzLG1qcyxjanMsdHMsbXRzLGN0cyxqc3gsdHN4fVwiXSxcbiAgICAgIHJlcG9ydGVyczogXCJ2ZXJib3NlXCIsXG4gICAgICBnbG9iYWxzOiB0cnVlXG4gICAgfSxcbiAgICByZXNvbHZlOiB7XG4gICAgICBhbGlhczogcGFja2FnZXMucmVkdWNlKChhY2MsIGN1cikgPT4geyAvLyB3b3JrYXJvdW5kIGZvciAvUHJlbHVkZSBpc3N1ZVxuICAgICAgYWNjW0pTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGN1ciArIFwiL3BhY2thZ2UuanNvblwiLCBcInV0Zi04XCIpKS5uYW1lXSA9IHBhdGgucmVzb2x2ZShjdXIsIGN1ci5lbmRzV2l0aChcImNvcmVcIikgPyBcImRpc3RcIiA6IFwic3JjXCIpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwgeyB9KSAvLyBcIkBlZmZlY3QtYXBwL2NvcmUvUHJlbHVkZVwiOiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcInBhY2thZ2VzL2NvcmUvc3JjL1ByZWx1ZGUuY29kZS50c1wiKVxuICB9XG4gIH1cbiAgY29uc29sZS5sb2coY2ZnKVxuICByZXR1cm4gY2ZnXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsU0FBUyxvQkFBb0I7OztBQ0E3QixPQUFPLFVBQVU7QUFDakIsT0FBTyxRQUFRO0FBRmYsSUFBTSxtQ0FBbUM7QUFnQjFCLFNBQVIsV0FBNEIsU0FBa0I7QUFDbkQsUUFBTSxTQUFTLEtBQUssUUFBUSxrQ0FBVyxVQUFVO0FBQ2pELFFBQU0sV0FBVyxHQUFHLFlBQVksTUFBTSxFQUFFLElBQUksT0FBSyxTQUFTLE1BQU0sQ0FBQyxFQUFFLE9BQU8sT0FBSyxHQUFHLFVBQVUsQ0FBQyxFQUFFLFlBQVksQ0FBRTtBQUM3RyxRQUFNLE1BQU07QUFBQTtBQUFBO0FBQUEsSUFHVixNQUFNO0FBQUEsTUFDSixTQUFVLENBQUMsa0RBQWtEO0FBQUEsTUFDN0QsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLElBQ1g7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNQLE9BQU8sU0FBUyxPQUFPLENBQUMsS0FBSyxRQUFRO0FBQ3JDLFlBQUksS0FBSyxNQUFNLEdBQUcsYUFBYSxNQUFNLGlCQUFpQixPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxRQUFRLEtBQUssSUFBSSxTQUFTLE1BQU0sSUFBSSxTQUFTLEtBQUs7QUFDL0gsZUFBTztBQUFBLE1BQ1QsR0FBRyxDQUFFLENBQUM7QUFBQTtBQUFBLElBQ1I7QUFBQSxFQUNBO0FBQ0EsVUFBUSxJQUFJLEdBQUc7QUFDZixTQUFPO0FBQ1Q7OztBRHBDQSxJQUFNQSxvQ0FBbUM7QUFJekMsSUFBTyx3QkFBUSxhQUFhLFdBQVdDLGlDQUFTLENBQUM7IiwKICAibmFtZXMiOiBbIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIiwgIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIl0KfQo=
|