@effect-app/infra 1.2.1 → 1.2.3
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 +14 -0
- package/_cjs/services/QueueMaker/errors.cjs +2 -4
- 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 +3 -5
- package/dist/services/RepositoryBase.d.ts +2 -2
- package/package.json +4 -4
- 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
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @effect-app/infra
|
|
2
2
|
|
|
3
|
+
## 1.2.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [b8b729e]
|
|
8
|
+
- effect-app@1.1.0
|
|
9
|
+
- @effect-app/infra-adapters@1.0.17
|
|
10
|
+
|
|
11
|
+
## 1.2.2
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- 2339df9: revert forkDaemonReportQueue use root span
|
|
16
|
+
|
|
3
17
|
## 1.2.1
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -8,6 +8,7 @@ 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");
|
|
11
12
|
var _errorReporter = require("@effect-app/infra/errorReporter");
|
|
12
13
|
var _effectApp = require("effect-app");
|
|
13
14
|
const reportQueueError_ = (0, _errorReporter.reportError)("Queue");
|
|
@@ -23,10 +24,7 @@ const reportQueueError = (cause, extras) => reportQueueError_(cause, extras);
|
|
|
23
24
|
*/
|
|
24
25
|
exports.reportQueueError = reportQueueError;
|
|
25
26
|
function forkDaemonReportQueue(self) {
|
|
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);
|
|
27
|
+
return self.pipe(_effectApp.Effect.tapErrorCause(reportNonInterruptedFailureCause({})), _RequestFiberSet.setRootParentSpan, _effectApp.Effect.forkDaemon);
|
|
30
28
|
}
|
|
31
29
|
const reportFatalQueueError = exports.reportFatalQueueError = (0, _errorReporter.reportError)("FatalQueue");
|
|
32
30
|
function reportNonInterruptedFailure(context) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.cjs","names":["
|
|
1
|
+
{"version":3,"file":"errors.cjs","names":["_RequestFiberSet","require","_errorReporter","_effectApp","reportQueueError_","reportError","reportQueueError","cause","extras","exports","forkDaemonReportQueue","self","pipe","Effect","tapErrorCause","reportNonInterruptedFailureCause","setRootParentSpan","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,gBAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA,MAAMG,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,EAC1DC,kCAAiB,EACjBH,iBAAM,CAACI,UAAU,CAClB;AACH;AAEO,MAAMC,qBAAqB,GAAAT,OAAA,CAAAS,qBAAA,GAAG,IAAAb,0BAAW,EAC9C,YAAY,CACb;AAEK,SAAUc,2BAA2BA,CAACC,OAAiC;EAC3E,MAAMC,MAAM,GAAGN,gCAAgC,CAACK,OAAO,CAAC;EACxD,OAAiBE,GAAoB,IACnCA,GAAG,CAACV,IAAI,CACNC,iBAAM,CACHU,IAAI,EACPV,iBAAM,CACHW,OAAO,CAAEC,MAAM,IACdC,eAAI,CAACC,KAAK,CAACF,MAAM,EAAE;IACjBG,SAAS,EAAGrB,KAAK,IAAKM,iBAAM,CAACgB,GAAG,CAACR,MAAM,CAACd,KAAK,CAAC,EAAE,MAAMkB,MAAM,CAAC;IAC7DK,SAAS,EAAEA,CAAA,KAAMjB,iBAAM,CAACkB,IAAI,CAAC,MAAMN,MAAM;GAC1C,CAAC,CACH,CACJ;AACL;AAEM,SAAUV,gCAAgCA,CAACK,OAAiC;EAChF,OAAWb,KAAe,IAAkB;IAC1C,IAAIyB,gBAAK,CAACC,aAAa,CAAC1B,KAAK,CAAC,EAAE;MAC9B,OAAOM,iBAAM,CAACqB,SAAS,CAAC3B,KAAqB,CAAC;IAChD;IACA,OAAOD,gBAAgB,CAACC,KAAK,EAAEa,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, R
|
|
12
|
+
export declare function forkDaemonReportQueue<R, E, A>(self: Effect<A, E, R>): Effect.Effect<import("effect/Fiber").RuntimeFiber<A, E>, never, Exclude<R, import("effect/Tracer").ParentSpan>>;
|
|
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":"AAEA,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,mHAMnE;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,3 +1,4 @@
|
|
|
1
|
+
import { setRootParentSpan } from "@effect-app/infra-adapters/RequestFiberSet";
|
|
1
2
|
import { reportError } from "@effect-app/infra/errorReporter";
|
|
2
3
|
import { Cause, Effect, Exit } from "effect-app";
|
|
3
4
|
const reportQueueError_ = reportError("Queue");
|
|
@@ -12,10 +13,7 @@ export const reportQueueError = (cause, extras) => reportQueueError_(cause, extr
|
|
|
12
13
|
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
13
14
|
*/
|
|
14
15
|
export function forkDaemonReportQueue(self) {
|
|
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);
|
|
16
|
+
return self.pipe(Effect.tapErrorCause(reportNonInterruptedFailureCause({})), setRootParentSpan, Effect.forkDaemon);
|
|
19
17
|
}
|
|
20
18
|
export const reportFatalQueueError = reportError("FatalQueue");
|
|
21
19
|
export function reportNonInterruptedFailure(context) {
|
|
@@ -35,4 +33,4 @@ export function reportNonInterruptedFailureCause(context) {
|
|
|
35
33
|
return reportQueueError(cause, context);
|
|
36
34
|
};
|
|
37
35
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL1F1ZXVlTWFrZXIvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFBO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFaEQsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7QUFFOUMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBSSxLQUFlLEVBQUUsTUFBNEMsRUFBRSxFQUFFLENBQ25HLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUVsQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBVSxJQUFxQjtJQUNsRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQ2QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUMxRCxpQkFBaUIsRUFDakIsTUFBTSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxXQUFXLENBQzlDLFlBQVksQ0FDYixDQUFBO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE9BQWlDO0lBQzNFLE1BQU0sTUFBTSxHQUFHLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3hELE9BQU8sQ0FBVSxHQUFvQixFQUFnQyxFQUFFLENBQ3JFLEdBQUcsQ0FBQyxJQUFJLENBQ04sTUFBTTtTQUNILElBQUksRUFDUCxNQUFNO1NBQ0gsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDakIsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDN0QsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0tBQzNDLENBQUMsQ0FDSCxDQUNKLENBQUE7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdDQUFnQyxDQUFDLE9BQWlDO0lBQ2hGLE9BQU8sQ0FBSSxLQUFlLEVBQWdCLEVBQUU7UUFDMUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQXFCLENBQUMsQ0FBQTtRQUNoRCxDQUFDO1FBQ0QsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDekMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyJ9
|
|
@@ -145,7 +145,7 @@ export declare function makeRepo<Evt = never>(): <ItemType extends string, R, En
|
|
|
145
145
|
config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
|
|
146
146
|
partitionValue?: (a: Encoded) => string;
|
|
147
147
|
};
|
|
148
|
-
}) => Effect.Effect<Repository<T, Encoded, Evt, ItemType>, E,
|
|
148
|
+
}) => Effect.Effect<Repository<T, Encoded, Evt, ItemType>, E, StoreMaker | ContextMapContainer | R | RInitial | R2>;
|
|
149
149
|
Q: Query<Encoded>;
|
|
150
150
|
};
|
|
151
151
|
export declare function makeStore<Encoded extends {
|
|
@@ -156,7 +156,7 @@ export declare function makeStore<Encoded extends {
|
|
|
156
156
|
id: unknown;
|
|
157
157
|
}>(name: ItemType, schema: S.Schema<T, E, R>, mapTo: (e: E, etag: string | undefined) => Encoded) => <RInitial = never, EInitial = never>(makeInitial?: Effect<readonly T[], EInitial, RInitial>, config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
|
|
158
158
|
partitionValue?: (a: Encoded) => string;
|
|
159
|
-
}) => Effect.Effect<import("./Store.js").Store<Encoded, string, PersistenceModelType<Encoded>>, EInitial,
|
|
159
|
+
}) => Effect.Effect<import("./Store.js").Store<Encoded, string, PersistenceModelType<Encoded>>, EInitial, StoreMaker | R | RInitial>;
|
|
160
160
|
export interface Repos<T extends {
|
|
161
161
|
id: unknown;
|
|
162
162
|
}, Encoded extends {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.3",
|
|
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.6",
|
|
22
|
-
"@effect-app/infra-adapters": "1.0.
|
|
23
|
-
"
|
|
24
|
-
"effect-app": "1.0.
|
|
22
|
+
"@effect-app/infra-adapters": "1.0.17",
|
|
23
|
+
"effect-app": "1.1.0",
|
|
24
|
+
"@effect-app/schema": "1.0.10"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@babel/cli": "^7.24.1",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { setRootParentSpan } from "@effect-app/infra-adapters/RequestFiberSet"
|
|
1
2
|
import { reportError } from "@effect-app/infra/errorReporter"
|
|
2
3
|
import { Cause, Effect, Exit } from "effect-app"
|
|
3
4
|
|
|
@@ -18,8 +19,7 @@ export const reportQueueError = <E>(cause: Cause<E>, extras?: Record<string, unk
|
|
|
18
19
|
export function forkDaemonReportQueue<R, E, A>(self: Effect<A, E, R>) {
|
|
19
20
|
return self.pipe(
|
|
20
21
|
Effect.tapErrorCause(reportNonInterruptedFailureCause({})),
|
|
21
|
-
|
|
22
|
-
// setRootParentSpan,
|
|
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=
|