sonamu 0.7.21 → 0.7.23
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/dist/ai/agents/agent.d.ts +6 -1
- package/dist/ai/agents/agent.d.ts.map +1 -1
- package/dist/ai/agents/agent.js +20 -5
- package/dist/api/base-frame.d.ts +4 -0
- package/dist/api/base-frame.d.ts.map +1 -1
- package/dist/api/base-frame.js +9 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +2 -2
- package/dist/api/config.d.ts +35 -3
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +1 -1
- package/dist/api/decorators.d.ts +4 -4
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +80 -18
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -1
- package/dist/api/secret.d.ts +7 -0
- package/dist/api/secret.d.ts.map +1 -0
- package/dist/api/secret.js +17 -0
- package/dist/api/sonamu.d.ts +17 -8
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +265 -47
- package/dist/cache/cache-manager.d.ts +11 -0
- package/dist/cache/cache-manager.d.ts.map +1 -0
- package/dist/cache/cache-manager.js +22 -0
- package/dist/cache/decorator.d.ts +31 -0
- package/dist/cache/decorator.d.ts.map +1 -0
- package/dist/cache/decorator.js +86 -0
- package/dist/cache/drivers.d.ts +33 -0
- package/dist/cache/drivers.d.ts.map +1 -0
- package/dist/cache/drivers.js +36 -0
- package/dist/cache/index.d.ts +4 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +8 -0
- package/dist/cache/types.d.ts +28 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +6 -0
- package/dist/database/base-model.d.ts +4 -2
- package/dist/database/base-model.d.ts.map +1 -1
- package/dist/database/base-model.js +9 -4
- package/dist/database/code-generator.d.ts +3 -1
- package/dist/database/code-generator.d.ts.map +1 -1
- package/dist/database/code-generator.js +3 -2
- package/dist/database/db.d.ts +1 -1
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +5 -5
- package/dist/database/knex.d.ts +3 -0
- package/dist/database/knex.d.ts.map +1 -0
- package/dist/database/knex.js +29 -0
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +1 -1
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +49 -5
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/logger/category.d.ts +4 -0
- package/dist/logger/category.d.ts.map +1 -0
- package/dist/logger/category.js +34 -0
- package/dist/logger/configure.d.ts +9 -0
- package/dist/logger/configure.d.ts.map +1 -0
- package/dist/logger/configure.js +115 -0
- package/dist/migration/code-generation.d.ts +5 -1
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +13 -7
- package/dist/migration/migrator.d.ts +1 -1
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +7 -7
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
- package/dist/migration/postgresql-schema-reader.js +5 -3
- package/dist/naite/naite.d.ts +0 -4
- package/dist/naite/naite.d.ts.map +1 -1
- package/dist/naite/naite.js +11 -19
- package/dist/ssr/index.d.ts +4 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +4 -0
- package/dist/ssr/registry.d.ts +10 -0
- package/dist/ssr/registry.d.ts.map +1 -0
- package/dist/ssr/registry.js +43 -0
- package/dist/ssr/renderer.d.ts +6 -0
- package/dist/ssr/renderer.d.ts.map +1 -0
- package/dist/ssr/renderer.js +70 -0
- package/dist/ssr/types.d.ts +19 -0
- package/dist/ssr/types.d.ts.map +1 -0
- package/dist/ssr/types.js +4 -0
- package/dist/syncer/syncer.d.ts +1 -0
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +58 -1
- package/dist/tasks/decorator.d.ts +1 -0
- package/dist/tasks/decorator.d.ts.map +1 -1
- package/dist/tasks/decorator.js +9 -7
- package/dist/tasks/step-wrapper.d.ts +5 -0
- package/dist/tasks/step-wrapper.d.ts.map +1 -1
- package/dist/tasks/step-wrapper.js +11 -6
- package/dist/tasks/workflow-manager.d.ts +2 -0
- package/dist/tasks/workflow-manager.d.ts.map +1 -1
- package/dist/tasks/workflow-manager.js +5 -2
- package/dist/template/implementations/entry-server.template.d.ts +17 -0
- package/dist/template/implementations/entry-server.template.d.ts.map +1 -0
- package/dist/template/implementations/entry-server.template.js +78 -0
- package/dist/template/implementations/model.template.d.ts.map +1 -1
- package/dist/template/implementations/model.template.js +5 -3
- package/dist/template/implementations/queries.template.d.ts +17 -0
- package/dist/template/implementations/queries.template.d.ts.map +1 -0
- package/dist/template/implementations/queries.template.js +83 -0
- package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -1
- package/dist/template/implementations/view_enums_select.template.js +34 -20
- package/dist/template/implementations/view_form.template.d.ts +2 -1
- package/dist/template/implementations/view_form.template.d.ts.map +1 -1
- package/dist/template/implementations/view_form.template.js +301 -129
- package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -1
- package/dist/template/implementations/view_id_async_select.template.js +136 -57
- package/dist/template/implementations/view_list.template.d.ts +2 -0
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +392 -227
- package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
- package/dist/template/implementations/view_search_input.template.js +46 -30
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +2 -2
- package/dist/testing/bootstrap.d.ts +28 -0
- package/dist/testing/bootstrap.d.ts.map +1 -0
- package/dist/testing/bootstrap.js +120 -0
- package/dist/testing/fixture-loader.d.ts +21 -0
- package/dist/testing/fixture-loader.d.ts.map +1 -0
- package/dist/testing/fixture-loader.js +28 -0
- package/dist/testing/fixture-manager.d.ts +1 -1
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +7 -7
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/naite-vitest-reporter.d.ts +12 -0
- package/dist/testing/naite-vitest-reporter.d.ts.map +1 -0
- package/dist/testing/naite-vitest-reporter.js +17 -0
- package/dist/types/types.d.ts +5 -6
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +7 -8
- package/dist/ui/ai-client.d.ts +3 -1
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +27 -8
- package/dist/ui-web/assets/index-CTYv3qL6.js +92 -0
- package/dist/ui-web/index.html +1 -1
- package/package.json +43 -20
- package/src/ai/agents/agent.ts +38 -19
- package/src/api/base-frame.ts +8 -0
- package/src/api/caster.ts +6 -1
- package/src/api/config.ts +38 -4
- package/src/api/decorators.ts +106 -20
- package/src/api/index.ts +1 -0
- package/src/api/secret.ts +23 -0
- package/src/api/sonamu.ts +334 -61
- package/src/cache/cache-manager.ts +23 -0
- package/src/cache/decorator.ts +116 -0
- package/src/cache/drivers.ts +42 -0
- package/src/cache/index.ts +16 -0
- package/src/cache/types.ts +32 -0
- package/src/database/base-model.ts +7 -3
- package/src/database/code-generator.ts +3 -1
- package/src/database/db.ts +5 -5
- package/src/database/knex.ts +34 -0
- package/src/database/puri.types.ts +2 -3
- package/src/database/upsert-builder.ts +58 -4
- package/src/index.ts +4 -0
- package/src/logger/category.ts +42 -0
- package/src/logger/configure.ts +132 -0
- package/src/migration/code-generation.ts +19 -6
- package/src/migration/migrator.ts +7 -6
- package/src/migration/postgresql-schema-reader.ts +7 -2
- package/src/naite/naite.ts +10 -18
- package/src/shared/web.shared.ts.txt +1 -1
- package/src/ssr/index.ts +13 -0
- package/src/ssr/registry.ts +52 -0
- package/src/ssr/renderer.ts +105 -0
- package/src/ssr/types.ts +20 -0
- package/src/syncer/syncer.ts +59 -0
- package/src/tasks/decorator.ts +20 -4
- package/src/tasks/step-wrapper.ts +14 -5
- package/src/tasks/workflow-manager.ts +9 -1
- package/src/template/implementations/entry-server.template.ts +81 -0
- package/src/template/implementations/model.template.ts +4 -2
- package/src/template/implementations/queries.template.ts +111 -0
- package/src/template/implementations/view_enums_select.template.ts +33 -19
- package/src/template/implementations/view_form.template.ts +324 -145
- package/src/template/implementations/view_id_async_select.template.ts +145 -56
- package/src/template/implementations/view_list.template.ts +446 -236
- package/src/template/implementations/view_search_input.template.ts +45 -29
- package/src/template/zod-converter.ts +4 -1
- package/src/testing/bootstrap.ts +176 -0
- package/src/testing/fixture-loader.ts +28 -0
- package/src/testing/fixture-manager.ts +7 -6
- package/src/testing/index.ts +3 -0
- package/src/testing/naite-vitest-reporter.ts +18 -0
- package/src/types/types.ts +4 -5
- package/src/ui/ai-client.ts +82 -50
- package/dist/template/implementations/view_enums_dropdown.template.d.ts +0 -17
- package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +0 -1
- package/dist/template/implementations/view_enums_dropdown.template.js +0 -50
- package/dist/ui-web/assets/index-B87IyofX.js +0 -92
- package/src/template/implementations/view_enums_dropdown.template.ts +0 -53
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view_search_input.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_search_input.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,2BAA4B,SAAQ,QAAQ;;IAKvD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,mBAAmB,CAAC;;;;;;
|
|
1
|
+
{"version":3,"file":"view_search_input.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_search_input.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,2BAA4B,SAAQ,QAAQ;;IAKvD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,mBAAmB,CAAC;;;;;;CAkE1D"}
|
|
@@ -15,44 +15,60 @@ export class Template__view_search_input extends Template {
|
|
|
15
15
|
return {
|
|
16
16
|
...this.getTargetAndPath(names),
|
|
17
17
|
body: `
|
|
18
|
-
import
|
|
18
|
+
import { Button, Input } from "@sonamu-kit/react-components/components";
|
|
19
|
+
import type React from "react";
|
|
19
20
|
import { useState } from "react";
|
|
20
|
-
import {
|
|
21
|
-
import
|
|
21
|
+
import { ${names.capital}SearchFieldSelect } from "@/components/${names.fs}/${names.capital}SearchFieldSelect";
|
|
22
|
+
import SearchIcon from "~icons/lucide/search";
|
|
23
|
+
|
|
24
|
+
export type ${names.capital}SearchInputProps = {
|
|
25
|
+
input: {
|
|
26
|
+
value?: string;
|
|
27
|
+
onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
28
|
+
};
|
|
29
|
+
dropdown: {
|
|
30
|
+
value?: string;
|
|
31
|
+
onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
22
34
|
|
|
23
35
|
export function ${names.capital}SearchInput({
|
|
24
|
-
input: { value: inputValue, onChange: inputOnChange
|
|
36
|
+
input: { value: inputValue, onChange: inputOnChange },
|
|
25
37
|
dropdown: dropdownProps,
|
|
26
|
-
}: {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
38
|
+
}: ${names.capital}SearchInputProps) {
|
|
39
|
+
const [keyword, setKeyword] = useState<string>(inputValue ?? "");
|
|
40
|
+
|
|
41
|
+
const handleSearch = () => {
|
|
42
|
+
if (inputOnChange) {
|
|
43
|
+
const syntheticEvent = {
|
|
44
|
+
target: { value: keyword },
|
|
45
|
+
currentTarget: { value: keyword },
|
|
46
|
+
} as React.ChangeEvent<HTMLInputElement>;
|
|
47
|
+
inputOnChange(syntheticEvent);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
31
50
|
|
|
32
|
-
const handleKeyDown = (e:
|
|
33
|
-
if (
|
|
34
|
-
|
|
35
|
-
value: keyword,
|
|
36
|
-
});
|
|
51
|
+
const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
|
|
52
|
+
if (e.key === "Enter") {
|
|
53
|
+
handleSearch();
|
|
37
54
|
}
|
|
38
55
|
};
|
|
39
56
|
|
|
40
57
|
return (
|
|
41
|
-
<
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
/>
|
|
58
|
+
<div className="flex items-center gap-1">
|
|
59
|
+
<${names.capital}SearchFieldSelect {...dropdownProps} />
|
|
60
|
+
<div className="relative flex items-center">
|
|
61
|
+
<Input
|
|
62
|
+
type="text"
|
|
63
|
+
placeholder="검색..."
|
|
64
|
+
className="h-8 w-[200px] pr-8"
|
|
65
|
+
value={keyword}
|
|
66
|
+
onChange={(e) => setKeyword(e.target.value)}
|
|
67
|
+
onKeyDown={handleKeyDown}
|
|
68
|
+
/>
|
|
69
|
+
<Button type="button" variant="ghost" onClick={handleSearch} icon={<SearchIcon />} />
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
56
72
|
);
|
|
57
73
|
}
|
|
58
74
|
`.trim(),
|
|
@@ -61,4 +77,4 @@ export function ${names.capital}SearchInput({
|
|
|
61
77
|
}
|
|
62
78
|
}
|
|
63
79
|
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19zZWFyY2hfaW5wdXQudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfc2VhcmNoX2lucHV0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfc2VhcmNoX2lucHV0XCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvY29tcG9uZW50c1wiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnN9LyR7bmFtZXMuY2FwaXRhbH1TZWFyY2hJbnB1dC50c3hgLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X3NlYXJjaF9pbnB1dFwiXSkge1xuICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKSxcbiAgICAgIGJvZHk6IGBcbmltcG9ydCB7IEJ1dHRvbiwgSW5wdXQgfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9jb21wb25lbnRzXCI7XG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2VhcmNoRmllbGRTZWxlY3QgfSBmcm9tIFwiQC9jb21wb25lbnRzLyR7bmFtZXMuZnN9LyR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZFNlbGVjdFwiO1xuaW1wb3J0IFNlYXJjaEljb24gZnJvbSBcIn5pY29ucy9sdWNpZGUvc2VhcmNoXCI7XG5cbmV4cG9ydCB0eXBlICR7bmFtZXMuY2FwaXRhbH1TZWFyY2hJbnB1dFByb3BzID0ge1xuICBpbnB1dDoge1xuICAgIHZhbHVlPzogc3RyaW5nO1xuICAgIG9uQ2hhbmdlPzogKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICB9O1xuICBkcm9wZG93bjoge1xuICAgIHZhbHVlPzogc3RyaW5nO1xuICAgIG9uQ2hhbmdlPzogKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxTZWxlY3RFbGVtZW50PikgPT4gdm9pZDtcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiAke25hbWVzLmNhcGl0YWx9U2VhcmNoSW5wdXQoe1xuICBpbnB1dDogeyB2YWx1ZTogaW5wdXRWYWx1ZSwgb25DaGFuZ2U6IGlucHV0T25DaGFuZ2UgfSxcbiAgZHJvcGRvd246IGRyb3Bkb3duUHJvcHMsXG59OiAke25hbWVzLmNhcGl0YWx9U2VhcmNoSW5wdXRQcm9wcykge1xuICBjb25zdCBba2V5d29yZCwgc2V0S2V5d29yZF0gPSB1c2VTdGF0ZTxzdHJpbmc+KGlucHV0VmFsdWUgPz8gXCJcIik7XG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoID0gKCkgPT4ge1xuICAgIGlmIChpbnB1dE9uQ2hhbmdlKSB7XG4gICAgICBjb25zdCBzeW50aGV0aWNFdmVudCA9IHtcbiAgICAgICAgdGFyZ2V0OiB7IHZhbHVlOiBrZXl3b3JkIH0sXG4gICAgICAgIGN1cnJlbnRUYXJnZXQ6IHsgdmFsdWU6IGtleXdvcmQgfSxcbiAgICAgIH0gYXMgUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD47XG4gICAgICBpbnB1dE9uQ2hhbmdlKHN5bnRoZXRpY0V2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIGhhbmRsZVNlYXJjaCgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgIDwke25hbWVzLmNhcGl0YWx9U2VhcmNoRmllbGRTZWxlY3Qgey4uLmRyb3Bkb3duUHJvcHN9IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxJbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIuqygOyDiS4uLlwiXG4gICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHctWzIwMHB4XSBwci04XCJcbiAgICAgICAgICB2YWx1ZT17a2V5d29yZH1cbiAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEtleXdvcmQoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgLz5cbiAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cImdob3N0XCIgb25DbGljaz17aGFuZGxlU2VhcmNofSBpY29uPXs8U2VhcmNoSWNvbiAvPn0gLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsiRW50aXR5TWFuYWdlciIsIlRlbXBsYXRlIiwiVGVtcGxhdGVfX3ZpZXdfc2VhcmNoX2lucHV0IiwiZ2V0VGFyZ2V0QW5kUGF0aCIsIm5hbWVzIiwidGFyZ2V0IiwicGF0aCIsImZzIiwiY2FwaXRhbCIsInJlbmRlciIsImVudGl0eUlkIiwiZ2V0TmFtZXNGcm9tSWQiLCJib2R5IiwidHJpbSIsImltcG9ydEtleXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsUUFBZ0MsaUNBQThCO0FBRXBGLFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUV2QyxPQUFPLE1BQU1DLG9DQUFvQ0Q7SUFDL0MsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFFLGlCQUFpQkMsS0FBd0IsRUFBRTtRQUN6QyxPQUFPO1lBQ0xDLFFBQVE7WUFDUkMsTUFBTSxHQUFHRixNQUFNRyxFQUFFLENBQUMsQ0FBQyxFQUFFSCxNQUFNSSxPQUFPLENBQUMsZUFBZSxDQUFDO1FBQ3JEO0lBQ0Y7SUFFQUMsT0FBTyxFQUFFQyxRQUFRLEVBQXdDLEVBQUU7UUFDekQsTUFBTU4sUUFBUUosY0FBY1csY0FBYyxDQUFDRDtRQUUzQyxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUNQLGdCQUFnQixDQUFDQyxNQUFNO1lBQy9CUSxNQUFNLENBQUM7Ozs7U0FJSixFQUFFUixNQUFNSSxPQUFPLENBQUMsdUNBQXVDLEVBQUVKLE1BQU1HLEVBQUUsQ0FBQyxDQUFDLEVBQUVILE1BQU1JLE9BQU8sQ0FBQzs7O1lBR2hGLEVBQUVKLE1BQU1JLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7Z0JBV1osRUFBRUosTUFBTUksT0FBTyxDQUFDOzs7R0FHN0IsRUFBRUosTUFBTUksT0FBTyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FxQlosRUFBRUosTUFBTUksT0FBTyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7TUFlakIsQ0FBQyxDQUFDSyxJQUFJO1lBQ05DLFlBQVksRUFBRTtRQUNoQjtJQUNGO0FBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod-converter.d.ts","sourceRoot":"","sources":["../../src/template/zod-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EA2BnB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AAYxB;;;GAGG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAU7E;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAsE3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA+ErF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA0BjG;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+FxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+GtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,CAAC,CAAC,UAAU,EACrB,OAAO,GAAE,MAAe,GACvB,aAAa,
|
|
1
|
+
{"version":3,"file":"zod-converter.d.ts","sourceRoot":"","sources":["../../src/template/zod-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EA2BnB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AAYxB;;;GAGG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAU7E;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAsE3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA+ErF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA0BjG;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+FxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+GtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,CAAC,CAAC,UAAU,EACrB,OAAO,GAAE,MAAe,GACvB,aAAa,CAiEf"}
|
|
@@ -429,7 +429,7 @@ export function zodTypeToTsTypeDef(zt) {
|
|
|
429
429
|
};
|
|
430
430
|
} else if (zodType instanceof z.ZodArray) {
|
|
431
431
|
const innerType = zodType.def.element;
|
|
432
|
-
if (innerType instanceof z.ZodString && baseKey.includes("images")) {
|
|
432
|
+
if (innerType instanceof z.ZodString && (baseKey.includes("images") || baseKey.includes("image"))) {
|
|
433
433
|
return {
|
|
434
434
|
...def,
|
|
435
435
|
renderType: "array-images"
|
|
@@ -510,4 +510,4 @@ export function zodTypeToTsTypeDef(zt) {
|
|
|
510
510
|
}
|
|
511
511
|
}
|
|
512
512
|
|
|
513
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS96b2QtY29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogem9kLWNvbnZlcnRlciDqtazshLFcbiAqIDEuIOycoO2LuOumrO2LsFxuICogIC0gZ2V0Wm9kVHlwZUJ5SWRcbiAqXG4gKiAyLiBab2Qg7YOA7J6FIOuzgO2ZmCAoRW50aXR5UHJvcCAtPiBab2RUeXBlKVxuICogIC0gcHJvcFRvWm9kVHlwZVxuICpcbiAqIDMuIEVudGl0eVByb3AvTm9kZSAtPiBab2Qg7L2U65OcIOusuOyekOyXtFxuICogIC0gcHJvcFRvWm9kVHlwZURlZlxuICogIC0gcHJvcE5vZGVUb1pvZFR5cGVEZWZcbiAqXG4gKiA0LiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYIChab2RUeXBlIC0+IFpvZENvZGUpXG4gKiAgLSB6b2RUeXBlVG9ab2RDb2RlXG4gKlxuICogNS4gWm9kIO2DgOyeheydhCBVSSDroIzrjZTrp4Hsl5Ag7IKs7Jqp7ZWgIOyImCDsnojripQgUmVuZGVyaW5nTm9kZeuhnCDrs4DtmZggKFpvZFR5cGUgLT4gUmVuZGVyaW5nTm9kZSlcbiAqICAtIHpvZFR5cGVUb1JlbmRlcmluZ05vZGVcbiAqICAtIHJlc29sdmVSZW5kZXJUeXBlXG4gKi9cblxuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyAkWm9kTG9vc2VTaGFwZSB9IGZyb20gXCJ6b2QvdjQvY29yZVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICB0eXBlIEVudGl0eVByb3AsXG4gIHR5cGUgRW50aXR5UHJvcE5vZGUsXG4gIGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wLFxuICBpc0JpZ0ludGVnZXJBcnJheVByb3AsXG4gIGlzQmlnSW50ZWdlclNpbmdsZVByb3AsXG4gIGlzQm9vbGVhbkFycmF5UHJvcCxcbiAgaXNCb29sZWFuU2luZ2xlUHJvcCxcbiAgaXNEYXRlQXJyYXlQcm9wLFxuICBpc0RhdGVTaW5nbGVQcm9wLFxuICBpc0VudW1BcnJheVByb3AsXG4gIGlzRW51bVNpbmdsZVByb3AsXG4gIGlzSW50ZWdlckFycmF5UHJvcCxcbiAgaXNJbnRlZ2VyU2luZ2xlUHJvcCxcbiAgaXNKc29uUHJvcCxcbiAgaXNOdW1iZXJBcnJheVByb3AsXG4gIGlzTnVtYmVyU2luZ2xlUHJvcCxcbiAgaXNOdW1lcmljQXJyYXlQcm9wLFxuICBpc051bWVyaWNTaW5nbGVQcm9wLFxuICBpc09uZVRvT25lUmVsYXRpb25Qcm9wLFxuICBpc1JlbGF0aW9uUHJvcCxcbiAgaXNTdHJpbmdBcnJheVByb3AsXG4gIGlzU3RyaW5nU2luZ2xlUHJvcCxcbiAgaXNUc1ZlY3RvclByb3AsXG4gIGlzVXVpZEFycmF5UHJvcCxcbiAgaXNVdWlkU2luZ2xlUHJvcCxcbiAgaXNWZWN0b3JBcnJheVByb3AsXG4gIGlzVmVjdG9yU2luZ2xlUHJvcCxcbiAgaXNWaXJ0dWFsUHJvcCxcbiAgdHlwZSBSZW5kZXJpbmdOb2RlLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUltcG9ydFVybCB9IGZyb20gXCIuLi91dGlscy9lc20tdXRpbHNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kUmVjb3JkID0gei5ab2RSZWNvcmQ8ei5ab2RTdHJpbmcgfCB6LlpvZE51bWJlciB8IHouWm9kU3ltYm9sLCB6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RPYmplY3QgPSB6LlpvZE9iamVjdDwkWm9kTG9vc2VTaGFwZT47XG50eXBlIEFueVpvZE51bGxhYmxlID0gei5ab2ROdWxsYWJsZTx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2REZWZhdWx0ID0gei5ab2REZWZhdWx0PHouWm9kVHlwZT47XG50eXBlIEFueVpvZFVuaW9uID0gei5ab2RVbmlvbjx6LlpvZFR5cGVbXT47XG50eXBlIEFueVpvZEFycmF5ID0gei5ab2RBcnJheTx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RPcHRpb25hbCA9IHouWm9kT3B0aW9uYWw8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kVGVtcGxhdGVMaXRlcmFsID0gei5ab2RUZW1wbGF0ZUxpdGVyYWw8c3RyaW5nPjtcbi8qKlxuICogWm9kIO2DgOyehSBJROuhnOu2gO2EsCDrj5nsoIHsnLzroZwgWm9kIOyKpO2CpOuniOulvCDroZzrk5ztlanri4jri6QuXG4gKiBkaXN0IOuUlOugie2GoOumrOyXkOyEnCBFU03snLzroZwgaW1wb3J07ZWY7JesIOqwgOyguOyYteuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFpvZFR5cGVCeUlkKHpvZFR5cGVJZDogc3RyaW5nKTogUHJvbWlzZTx6LlpvZFR5cGVBbnk+IHtcbiAgY29uc3QgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aCh6b2RUeXBlSWQpO1xuICBjb25zdCBtb2R1bGVBYnNQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJkaXN0XCIsIFwiYXBwbGljYXRpb25cIiwgYCR7bW9kdWxlUGF0aH0uanNgKTtcbiAgY29uc3QgaW1wb3J0VXJsID0gY3JlYXRlSW1wb3J0VXJsKG1vZHVsZUFic1BhdGgpO1xuICBjb25zdCBpbXBvcnRlZCA9IGF3YWl0IGltcG9ydChpbXBvcnRVcmwpO1xuXG4gIGlmICghaW1wb3J0ZWRbem9kVHlwZUlkXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCB6b2RUeXBlSWQgJHt6b2RUeXBlSWR9YCk7XG4gIH1cbiAgcmV0dXJuIGltcG9ydGVkW3pvZFR5cGVJZF0uZGVzY3JpYmUoem9kVHlwZUlkKTtcbn1cblxuLyoqXG4gKiBFbnRpdHlQcm9w7J2EIFpvZCDtg4DsnoXsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICog6rCBIHByb3DsnZgg7YOA7J6F7JeQIOuUsOudvCDsoIHsoIjtlZwgWm9kIHZhbGlkYXRvcuulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9wVG9ab2RUeXBlKHByb3A6IEVudGl0eVByb3ApOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICBsZXQgem9kVHlwZTogei5ab2RUeXBlQW55ID0gei51bmtub3duKCk7XG4gIGlmIChpc0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0VudW1TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSAoYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCkpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdBcnJheVByb3AocHJvcCkpIHtcbiAgICBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCkuYXJyYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgem9kVHlwZSA9IHouc3RyaW5nKCkuYXJyYXkoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5udW1iZXIoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5ib29sZWFuKCk7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYm9vbGVhbigpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmRhdGUoKTtcbiAgfSBlbHNlIGlmIChpc0RhdGVBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5kYXRlKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoudXVpZCgpO1xuICB9IGVsc2UgaWYgKGlzVXVpZEFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnV1aWQoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzSnNvblByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNWZWN0b3JTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYXJyYXkoei5udW1iZXIoKSk7XG4gIH0gZWxzZSBpZiAoaXNWZWN0b3JBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5hcnJheSh6LmFycmF5KHoubnVtYmVyKCkpKTtcbiAgfSBlbHNlIGlmIChpc1ZpcnR1YWxQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzUmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgaWYgKGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApIHx8IChpc09uZVRvT25lUmVsYXRpb25Qcm9wKHByb3ApICYmIHByb3AuaGFzSm9pbkNvbHVtbikpIHtcbiAgICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3DsnYQgem9kVHlwZeycvOuhnCDrs4DtmZjtlZjripTrjbAg7Iuk7YyoICR7cHJvcH19YCk7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICB6b2RUeXBlID0gKHpvZFR5cGUgYXMgei5ab2ROdW1iZXIpLm5vbm5lZ2F0aXZlKCk7XG4gIH1cbiAgaWYgKHByb3AubnVsbGFibGUpIHtcbiAgICB6b2RUeXBlID0gem9kVHlwZS5udWxsYWJsZSgpO1xuICB9XG5cbiAgcmV0dXJuIHpvZFR5cGU7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6FIOygleydmCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BUb1pvZFR5cGVEZWYocHJvcDogRW50aXR5UHJvcCwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgc3RtdDogc3RyaW5nO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmludCgpYDtcbiAgfSBlbHNlIGlmIChpc0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5pbnQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYmlnaW50KClgO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJpZ2ludCgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzRW51bVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtwcm9wLmlkfWA7XG4gICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9LmFycmF5KClgO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZ1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpLm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKS5tYXgoJHtwcm9wLmxlbmd0aH0pLmFycmF5KClgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKS5hcnJheSgpYDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoubnVtYmVyKClgO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoubnVtYmVyKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpYDtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0RhdGVTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouZGF0ZSgpYDtcbiAgfSBlbHNlIGlmIChpc0RhdGVBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5kYXRlKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJvb2xlYW4oKWA7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYm9vbGVhbigpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzVXVpZFNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei51dWlkKClgO1xuICB9IGVsc2UgaWYgKGlzVXVpZEFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnV1aWQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0pzb25Qcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1ZlY3RvclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6Lm51bWJlcigpKWA7XG4gIH0gZWxzZSBpZiAoaXNWZWN0b3JBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6LmFycmF5KHoubnVtYmVyKCkpKWA7XG4gIH0gZWxzZSBpZiAoaXNUc1ZlY3RvclByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9YDtcbiAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICBpZiAoaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkgfHwgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKSkge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX1faWQ6IHouaW50KClgO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDqt7jsmbggcmVsYXRpb24g7LyA7J207IqkIOygnOyZuFxuICAgICAgcmV0dXJuIGAvLyAke3Byb3AubmFtZX06ICR7cHJvcC5yZWxhdGlvblR5cGV9ICR7cHJvcC53aXRofWA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIi8vIHVuYWJsZSB0byByZXNvbHZlXCI7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICBzdG10ICs9IFwiLm5vbm5lZ2F0aXZlKClcIjtcbiAgfVxuICBpZiAocHJvcC5udWxsYWJsZSkge1xuICAgIHN0bXQgKz0gXCIubnVsbGFibGUoKVwiO1xuICB9XG5cbiAgcmV0dXJuIGAke3N0bXR9LGA7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcE5vZGXrpbwgWm9kIO2DgOyehSDsoJXsnZgg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBwbGFpbiwgYXJyYXksIG9iamVjdCDrhbjrk5wg7YOA7J6F7J2EIOyerOq3gOyggeycvOuhnCDsspjrpqztlZjsl6wg7KSR7LKpIOq1rOyhsOulvCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcInBsYWluXCIpIHtcbiAgICByZXR1cm4gcHJvcFRvWm9kVHlwZURlZihwcm9wTm9kZS5wcm9wLCBpbmplY3RJbXBvcnRLZXlzKTtcbiAgfSBlbHNlIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5hcnJheSh6Lm9iamVjdCh7XCIsXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlblxuICAgICAgICAubWFwKChjaGlsZFByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihjaGlsZFByb3BOb2RlLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIiksXG4gICAgICBcIlwiLFxuICAgICAgXCJ9KSksXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9IGVsc2UgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgcHJvcE5vZGUuY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoY2hpbGRQcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYoY2hpbGRQcm9wTm9kZSwgaW5qZWN0SW1wb3J0S2V5cykpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgXCJcIixcbiAgICAgIGB9KSR7cHJvcE5vZGUucHJvcD8ubnVsbGFibGUgPyBcIi5udWxsYWJsZSgpXCIgOiBcIlwifSxgLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvVHNUeXBlRGVmKHp0OiB6LlpvZFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHp0LmRlZi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgIGNhc2UgXCJhbnlcIjpcbiAgICBjYXNlIFwidW5rbm93blwiOlxuICAgIGNhc2UgXCJuZXZlclwiOlxuICAgICAgcmV0dXJuIHp0LmRlZi50eXBlO1xuICAgIGNhc2UgXCJudWxsYWJsZVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigoenQgYXMgQW55Wm9kTnVsbGFibGUpLmRlZi5pbm5lclR5cGUpfSB8IG51bGxgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICByZXR1cm4gem9kVHlwZVRvVHNUeXBlRGVmKCh6dCBhcyBBbnlab2REZWZhdWx0KS5kZWYuaW5uZXJUeXBlKTtcbiAgICBjYXNlIFwicmVjb3JkXCI6IHtcbiAgICAgIGNvbnN0IHJlY29yZFR5cGUgPSB6dCBhcyBBbnlab2RSZWNvcmQ7XG4gICAgICByZXR1cm4gYHsgWyBrZXk6ICR7em9kVHlwZVRvVHNUeXBlRGVmKHJlY29yZFR5cGUuZGVmLmtleVR5cGUpfSBdOiAke3pvZFR5cGVUb1RzVHlwZURlZihyZWNvcmRUeXBlLmRlZi52YWx1ZVR5cGUpfX1gO1xuICAgIH1cbiAgICBjYXNlIFwibGl0ZXJhbFwiOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oKHp0IGFzIHouWm9kTGl0ZXJhbCkudmFsdWVzKVxuICAgICAgICAubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBgbnVsbGA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBgdW5kZWZpbmVkYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIgfCBcIik7XG4gICAgY2FzZSBcInVuaW9uXCI6XG4gICAgICByZXR1cm4gYCR7KHp0IGFzIEFueVpvZFVuaW9uKS5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4gem9kVHlwZVRvVHNUeXBlRGVmKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiIHwgXCIpfWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIHJldHVybiBgJHsoenQgYXMgei5ab2RFbnVtKS5vcHRpb25zLm1hcCgodmFsKSA9PiBgXCIke3ZhbH1cImApLmpvaW4oXCIgfCBcIil9YDtcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZEFycmF5KS5lbGVtZW50KX1bXWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChzaGFwZVtrZXldLmRlZi50eXBlID09PSBcIm9wdGlvbmFsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PzogJHt6b2RUeXBlVG9Uc1R5cGVEZWYoc2hhcGVba2V5XS5kZWYuaW5uZXJUeXBlKX0sYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7em9kVHlwZVRvVHNUeXBlRGVmKHNoYXBlW2tleV0pfSxgO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZE9wdGlvbmFsKS5kZWYuaW5uZXJUeXBlKX0gfCB1bmRlZmluZWRgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9ICh6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWwpLmRlZjtcblxuICAgICAgLy8g67mIIHRlbXBsYXRlIGxpdGVyYWzsnYAgc3RyaW5n7Jy866GcIO2PtOuwsVxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgVHlwZVNjcmlwdCDtg4DsnoUg66y47J6Q7Je066GcIOuzgO2ZmFxuICAgICAgY29uc3QgcGFydHMgPSBkZWYucGFydHMubWFwKChwYXJ0OiB1bmtub3duKSA9PiB7XG4gICAgICAgIC8vIOumrO2EsOuftCDqsJIgKHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBudWxsLCB1bmRlZmluZWQpXG4gICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBgJHtwYXJ0fWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUeXBlVG9Uc1R5cGVEZWYocGFydCBhcyB6LlpvZFR5cGUpO1xuICAgICAgICAgIHJldHVybiBgJFxceyR7aW5uZXJUeXBlfX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7Y+067CxXG4gICAgICAgIHJldHVybiBgXFwke3N0cmluZ31gO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgXFxgJHtwYXJ0cy5qb2luKFwiXCIpfVxcYGA7XG4gICAgfVxuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICByZXR1cm4gXCJGaWxlXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvWm9kQ29kZSh6dDogei5ab2RUeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoICh6dC5kZWYudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInouc3RyaW5nKClcIjtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bWJlcigpXCI7XG4gICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgcmV0dXJuIFwiei5iaWdpbnQoKVwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJ6LmJvb2xlYW4oKVwiO1xuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gXCJ6LmRhdGUoKVwiO1xuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bGwoKVwiO1xuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgIHJldHVybiBcInoudW5kZWZpbmVkKClcIjtcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgICByZXR1cm4gXCJ6LmFueSgpXCI7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIHJldHVybiBcInoudW5rbm93bigpXCI7XG4gICAgY2FzZSBcIm5ldmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm5ldmVyKClcIjtcbiAgICBjYXNlIFwibnVsbGFibGVcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyBBbnlab2ROdWxsYWJsZSkuZGVmLmlubmVyVHlwZSl9Lm51bGxhYmxlKClgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6IHtcbiAgICAgIGNvbnN0IHpEZWZhdWx0RGVmID0gKHp0IGFzIEFueVpvZERlZmF1bHQpLmRlZjtcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKHpEZWZhdWx0RGVmLmlubmVyVHlwZSl9LmRlZmF1bHQoJHt6RGVmYXVsdERlZi5kZWZhdWx0VmFsdWV9KWA7XG4gICAgfVxuICAgIGNhc2UgXCJyZWNvcmRcIjoge1xuICAgICAgY29uc3QgelJlY29yZERlZiA9ICh6dCBhcyBBbnlab2RSZWNvcmQpLmRlZjtcbiAgICAgIHJldHVybiBgei5yZWNvcmQoJHt6b2RUeXBlVG9ab2RDb2RlKHpSZWNvcmREZWYua2V5VHlwZSl9LCAke3pvZFR5cGVUb1pvZENvZGUoXG4gICAgICAgIHpSZWNvcmREZWYudmFsdWVUeXBlLFxuICAgICAgKX0pYDtcbiAgICB9XG4gICAgY2FzZSBcImxpdGVyYWxcIjoge1xuICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKCh6dCBhcyB6LlpvZExpdGVyYWw8c3RyaW5nIHwgbnVtYmVyPikudmFsdWVzKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gYG51bGxgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gYHVuZGVmaW5lZGA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBgei5saXRlcmFsKCR7aXRlbXNbMF19KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYHoubGl0ZXJhbChbJHtpdGVtcy5qb2luKFwiLCBcIil9XSlgO1xuICAgIH1cbiAgICBjYXNlIFwidW5pb25cIjpcbiAgICAgIHJldHVybiBgei51bmlvbihbJHsoenQgYXMgQW55Wm9kVW5pb24pLmRlZi5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbjogei5ab2RUeXBlKSA9PiB6b2RUeXBlVG9ab2RDb2RlKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiLFwiKX1dKWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIC8vIE5PVEU6IHouZW51bShbXCJBXCIsIFwiQlwiXSnrj4Qgei5lbnVtKHsgQTogXCJBXCIsIEI6IFwiQlwiIH0p66GcIOyymOumrOuQqC5cbiAgICAgIHJldHVybiBgei5lbnVtKHske09iamVjdC5lbnRyaWVzKCh6dCBhcyB6LlpvZEVudW0pLmRlZi5lbnRyaWVzKVxuICAgICAgICAubWFwKChba2V5LCB2YWxdKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IGAke2tleX06IFwiJHt2YWx9XCJgIDogYCR7a2V5fTogJHt2YWx9YCkpXG4gICAgICAgIC5qb2luKFwiLCBcIil9fSlgO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIGB6LmFycmF5KCR7em9kVHlwZVRvWm9kQ29kZSgoenQgYXMgei5ab2RBcnJheTx6LlpvZFR5cGU+KS5kZWYuZWxlbWVudCl9KWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ6Lm9iamVjdCh7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4gYCR7a2V5fTogJHt6b2RUeXBlVG9ab2RDb2RlKHNoYXBlW2tleV0pfSxgKSxcbiAgICAgICAgXCJ9KVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUpfS5vcHRpb25hbCgpYDtcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIGB6LmZpbGUoKWA7XG4gICAgY2FzZSBcInRlbXBsYXRlX2xpdGVyYWxcIjoge1xuICAgICAgY29uc3QgZGVmID0gKHp0IGFzIEFueVpvZFRlbXBsYXRlTGl0ZXJhbCkuZGVmO1xuXG4gICAgICAvLyDruYggdGVtcGxhdGUgbGl0ZXJhbFxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJ6LnRlbXBsYXRlTGl0ZXJhbChbXSlcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGRlZi5wYXJ0cy5tYXAoKHBhcnQ6IHVua25vd24pID0+IHtcbiAgICAgICAgLy8g66y47J6Q7Je0IOumrO2EsOuftFxuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHtwYXJ0fVwiYDtcbiAgICAgICAgfVxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICByZXR1cm4gem9kVHlwZVRvWm9kQ29kZShwYXJ0IGFzIHouWm9kVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDtj7TrsLFcbiAgICAgICAgcmV0dXJuIFwiei5zdHJpbmcoKVwiO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgei50ZW1wbGF0ZUxpdGVyYWwoWyR7cGFydHMuam9pbihcIiwgXCIpfV0pYDtcbiAgICB9XG4gICAgY2FzZSBcImludGVyc2VjdGlvblwiOiB7XG4gICAgICBjb25zdCB6SW50ZXJzZWN0aW9uRGVmID0gKHp0IGFzIHouWm9kSW50ZXJzZWN0aW9uPHouWm9kVHlwZSwgei5ab2RUeXBlPikuZGVmO1xuICAgICAgcmV0dXJuIGB6LmludGVyc2VjdGlvbigke3pvZFR5cGVUb1pvZENvZGUoekludGVyc2VjdGlvbkRlZi5sZWZ0KX0sICR7em9kVHlwZVRvWm9kQ29kZSh6SW50ZXJzZWN0aW9uRGVmLnJpZ2h0KX0pYDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyerOq3gOyggeycvOuhnCDspJHssqnrkJwg7YOA7J6F65Ok7J2EIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueSxcbiAgYmFzZUtleTogc3RyaW5nID0gXCJyb290XCIsXG4pOiBSZW5kZXJpbmdOb2RlIHtcbiAgY29uc3QgZGVmID0ge1xuICAgIG5hbWU6IGJhc2VLZXksXG4gICAgbGFiZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoYmFzZUtleSwgZmFsc2UpLFxuICAgIHpvZFR5cGUsXG4gIH07XG4gIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICBjb25zdCBjb2x1bW5LZXlzID0gT2JqZWN0LmtleXMoem9kVHlwZS5zaGFwZSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjb2x1bW5LZXlzLm1hcCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUeXBlLnNoYXBlW2tleV07XG4gICAgICByZXR1cm4gem9kVHlwZVRvUmVuZGVyaW5nTm9kZShpbm5lclR5cGUsIGtleSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgY29uc3QgaW5uZXJUeXBlID0gKHpvZFR5cGUgYXMgei5ab2RBcnJheTx6LlpvZFR5cGVBbnk+KS5kZWYuZWxlbWVudDtcbiAgICBpZiAoaW5uZXJUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcgJiYgYmFzZUtleS5pbmNsdWRlcyhcImltYWdlc1wiKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICByZW5kZXJUeXBlOiBcImFycmF5LWltYWdlc1wiLFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gdmVjdG9yIO2DgOyehSDtjJDrs4Q6IG51bWJlciDrsLDsl7TsnbTrqbTshJwgZW1iZWRkaW5nLCB2ZWN0b3Ig65Ox7J2YIOydtOumhOydhCDqsIDsp4Qg6rK97JqwXG4gICAgaWYgKFxuICAgICAgaW5uZXJUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIgJiZcbiAgICAgIChiYXNlS2V5LmluY2x1ZGVzKFwiZW1iZWRkaW5nXCIpIHx8IGJhc2VLZXkuaW5jbHVkZXMoXCJ2ZWN0b3JcIikpXG4gICAgKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kZWYsXG4gICAgICAgIHJlbmRlclR5cGU6IFwidmVjdG9yXCIsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogXCJhcnJheVwiLFxuICAgICAgZWxlbWVudDogem9kVHlwZVRvUmVuZGVyaW5nTm9kZShpbm5lclR5cGUsIGJhc2VLZXkpLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICBjb25zdCBvcHRpb25Ob2RlcyA9ICh6b2RUeXBlIGFzIHouWm9kVW5pb248ei5ab2RUeXBlW10+KS5kZWYub3B0aW9ucy5tYXAoKG9wdCkgPT5cbiAgICAgIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUob3B0LCBiYXNlS2V5KSxcbiAgICApO1xuICAgIC8vIFRPRE86IFpvZFVuaW9u7J20IOuTpOyWtOyeiOuKlCDqsr3smrAg7ZW465Ok66eBXG4gICAgcmV0dXJuIG9wdGlvbk5vZGVzWzBdO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9wdGlvbmFsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoKHpvZFR5cGUgYXMgei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVsbGFibGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uem9kVHlwZVRvUmVuZGVyaW5nTm9kZSgoem9kVHlwZSBhcyB6LlpvZE51bGxhYmxlPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUsIGJhc2VLZXkpLFxuICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogcmVzb2x2ZVJlbmRlclR5cGUoYmFzZUtleSwgem9kVHlwZSksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFpvZCDtg4DsnoXqs7wg7YKkIOydtOumhOycvOuhnOu2gO2EsCDsoIHsoIjtlZwgUmVuZGVyVHlwZeydhCDqsrDsoJXtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVSZW5kZXJUeXBlKGtleTogc3RyaW5nLCB6b2RUeXBlOiB6LlpvZFR5cGVBbnkpOiBSZW5kZXJpbmdOb2RlW1wicmVuZGVyVHlwZVwiXSB7XG4gIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2REYXRlKSB7XG4gICAgcmV0dXJuIFwiZGF0ZXRpbWVcIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcpIHtcbiAgICBpZiAoa2V5LmluY2x1ZGVzKFwiaW1nXCIpIHx8IGtleS5pbmNsdWRlcyhcImltYWdlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctaW1hZ2VcIjtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU1FMRGF0ZVRpbWVTdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGV0aW1lXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJkYXRlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZGF0ZVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyKSB7XG4gICAgaWYgKGtleSA9PT0gXCJpZFwiKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItaWRcIjtcbiAgICB9IGVsc2UgaWYgKGtleS5lbmRzV2l0aChcIl9pZFwiKSkge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLWZrX2lkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1wbGFpblwiO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICByZXR1cm4gXCJlbnVtc1wiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFJlY29yZCkge1xuICAgIHJldHVybiBcInJlY29yZFwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFueSB8fCB6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmtub3duKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RMaXRlcmFsKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVGVtcGxhdGVMaXRlcmFsKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7IuxIOu2iOqwgCAke2tleX0gJHt6b2RUeXBlLmRlZi50eXBlfWApO1xuICB9XG59XG4iXSwibmFtZXMiOlsiaW5mbGVjdGlvbiIsInBhdGgiLCJ6IiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsImlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wIiwiaXNCaWdJbnRlZ2VyQXJyYXlQcm9wIiwiaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcCIsImlzQm9vbGVhbkFycmF5UHJvcCIsImlzQm9vbGVhblNpbmdsZVByb3AiLCJpc0RhdGVBcnJheVByb3AiLCJpc0RhdGVTaW5nbGVQcm9wIiwiaXNFbnVtQXJyYXlQcm9wIiwiaXNFbnVtU2luZ2xlUHJvcCIsImlzSW50ZWdlckFycmF5UHJvcCIsImlzSW50ZWdlclNpbmdsZVByb3AiLCJpc0pzb25Qcm9wIiwiaXNOdW1iZXJBcnJheVByb3AiLCJpc051bWJlclNpbmdsZVByb3AiLCJpc051bWVyaWNBcnJheVByb3AiLCJpc051bWVyaWNTaW5nbGVQcm9wIiwiaXNPbmVUb09uZVJlbGF0aW9uUHJvcCIsImlzUmVsYXRpb25Qcm9wIiwiaXNTdHJpbmdBcnJheVByb3AiLCJpc1N0cmluZ1NpbmdsZVByb3AiLCJpc1RzVmVjdG9yUHJvcCIsImlzVXVpZEFycmF5UHJvcCIsImlzVXVpZFNpbmdsZVByb3AiLCJpc1ZlY3RvckFycmF5UHJvcCIsImlzVmVjdG9yU2luZ2xlUHJvcCIsImlzVmlydHVhbFByb3AiLCJjcmVhdGVJbXBvcnRVcmwiLCJnZXRab2RUeXBlQnlJZCIsInpvZFR5cGVJZCIsIm1vZHVsZVBhdGgiLCJnZXRNb2R1bGVQYXRoIiwibW9kdWxlQWJzUGF0aCIsImpvaW4iLCJhcGlSb290UGF0aCIsImltcG9ydFVybCIsImltcG9ydGVkIiwiRXJyb3IiLCJkZXNjcmliZSIsInByb3BUb1pvZFR5cGUiLCJwcm9wIiwiem9kVHlwZSIsInVua25vd24iLCJudW1iZXIiLCJpbnQiLCJhcnJheSIsImJpZ2ludCIsImlkIiwibGVuZ3RoIiwic3RyaW5nIiwibWF4IiwiYm9vbGVhbiIsImRhdGUiLCJ1dWlkIiwiaGFzSm9pbkNvbHVtbiIsInVuc2lnbmVkIiwibm9ubmVnYXRpdmUiLCJudWxsYWJsZSIsInByb3BUb1pvZFR5cGVEZWYiLCJpbmplY3RJbXBvcnRLZXlzIiwic3RtdCIsIm5hbWUiLCJwdXNoIiwicmVsYXRpb25UeXBlIiwid2l0aCIsInByb3BOb2RlVG9ab2RUeXBlRGVmIiwicHJvcE5vZGUiLCJub2RlVHlwZSIsImNoaWxkcmVuIiwibWFwIiwiY2hpbGRQcm9wTm9kZSIsInpvZFR5cGVUb1RzVHlwZURlZiIsInp0IiwiZGVmIiwidHlwZSIsImlubmVyVHlwZSIsInJlY29yZFR5cGUiLCJrZXlUeXBlIiwidmFsdWVUeXBlIiwiQXJyYXkiLCJmcm9tIiwidmFsdWVzIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJvcHRpb25zIiwib3B0aW9uIiwidmFsIiwiZWxlbWVudCIsInNoYXBlIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInBhcnRzIiwicGFydCIsIl96b2QiLCJ6b2RUeXBlVG9ab2RDb2RlIiwiekRlZmF1bHREZWYiLCJkZWZhdWx0VmFsdWUiLCJ6UmVjb3JkRGVmIiwiaXRlbXMiLCJlbnRyaWVzIiwiekludGVyc2VjdGlvbkRlZiIsImxlZnQiLCJyaWdodCIsInpvZFR5cGVUb1JlbmRlcmluZ05vZGUiLCJiYXNlS2V5IiwibGFiZWwiLCJjYW1lbGl6ZSIsIlpvZE9iamVjdCIsImNvbHVtbktleXMiLCJyZW5kZXJUeXBlIiwiWm9kQXJyYXkiLCJab2RTdHJpbmciLCJpbmNsdWRlcyIsIlpvZE51bWJlciIsIlpvZFVuaW9uIiwib3B0aW9uTm9kZXMiLCJvcHQiLCJab2RPcHRpb25hbCIsIm9wdGlvbmFsIiwiWm9kTnVsbGFibGUiLCJyZXNvbHZlUmVuZGVyVHlwZSIsIlpvZERhdGUiLCJkZXNjcmlwdGlvbiIsImVuZHNXaXRoIiwiWm9kQm9vbGVhbiIsIlpvZEVudW0iLCJab2RSZWNvcmQiLCJab2RBbnkiLCJab2RVbmtub3duIiwiWm9kTGl0ZXJhbCIsIlpvZFRlbXBsYXRlTGl0ZXJhbCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtCQyxHQUVELE9BQU9BLGdCQUFnQixhQUFhO0FBQ3BDLE9BQU9DLFVBQVUsT0FBTztBQUN4QixTQUFTQyxDQUFDLFFBQVEsTUFBTTtBQUV4QixTQUFTQyxNQUFNLFFBQVEsbUJBQWdCO0FBQ3ZDLFNBQVNDLGFBQWEsUUFBUSw4QkFBMkI7QUFDekQsU0FHRUMsMEJBQTBCLEVBQzFCQyxxQkFBcUIsRUFDckJDLHNCQUFzQixFQUN0QkMsa0JBQWtCLEVBQ2xCQyxtQkFBbUIsRUFDbkJDLGVBQWUsRUFDZkMsZ0JBQWdCLEVBQ2hCQyxlQUFlLEVBQ2ZDLGdCQUFnQixFQUNoQkMsa0JBQWtCLEVBQ2xCQyxtQkFBbUIsRUFDbkJDLFVBQVUsRUFDVkMsaUJBQWlCLEVBQ2pCQyxrQkFBa0IsRUFDbEJDLGtCQUFrQixFQUNsQkMsbUJBQW1CLEVBQ25CQyxzQkFBc0IsRUFDdEJDLGNBQWMsRUFDZEMs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
|
|
513
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS96b2QtY29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogem9kLWNvbnZlcnRlciDqtazshLFcbiAqIDEuIOycoO2LuOumrO2LsFxuICogIC0gZ2V0Wm9kVHlwZUJ5SWRcbiAqXG4gKiAyLiBab2Qg7YOA7J6FIOuzgO2ZmCAoRW50aXR5UHJvcCAtPiBab2RUeXBlKVxuICogIC0gcHJvcFRvWm9kVHlwZVxuICpcbiAqIDMuIEVudGl0eVByb3AvTm9kZSAtPiBab2Qg7L2U65OcIOusuOyekOyXtFxuICogIC0gcHJvcFRvWm9kVHlwZURlZlxuICogIC0gcHJvcE5vZGVUb1pvZFR5cGVEZWZcbiAqXG4gKiA0LiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYIChab2RUeXBlIC0+IFpvZENvZGUpXG4gKiAgLSB6b2RUeXBlVG9ab2RDb2RlXG4gKlxuICogNS4gWm9kIO2DgOyeheydhCBVSSDroIzrjZTrp4Hsl5Ag7IKs7Jqp7ZWgIOyImCDsnojripQgUmVuZGVyaW5nTm9kZeuhnCDrs4DtmZggKFpvZFR5cGUgLT4gUmVuZGVyaW5nTm9kZSlcbiAqICAtIHpvZFR5cGVUb1JlbmRlcmluZ05vZGVcbiAqICAtIHJlc29sdmVSZW5kZXJUeXBlXG4gKi9cblxuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyAkWm9kTG9vc2VTaGFwZSB9IGZyb20gXCJ6b2QvdjQvY29yZVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICB0eXBlIEVudGl0eVByb3AsXG4gIHR5cGUgRW50aXR5UHJvcE5vZGUsXG4gIGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wLFxuICBpc0JpZ0ludGVnZXJBcnJheVByb3AsXG4gIGlzQmlnSW50ZWdlclNpbmdsZVByb3AsXG4gIGlzQm9vbGVhbkFycmF5UHJvcCxcbiAgaXNCb29sZWFuU2luZ2xlUHJvcCxcbiAgaXNEYXRlQXJyYXlQcm9wLFxuICBpc0RhdGVTaW5nbGVQcm9wLFxuICBpc0VudW1BcnJheVByb3AsXG4gIGlzRW51bVNpbmdsZVByb3AsXG4gIGlzSW50ZWdlckFycmF5UHJvcCxcbiAgaXNJbnRlZ2VyU2luZ2xlUHJvcCxcbiAgaXNKc29uUHJvcCxcbiAgaXNOdW1iZXJBcnJheVByb3AsXG4gIGlzTnVtYmVyU2luZ2xlUHJvcCxcbiAgaXNOdW1lcmljQXJyYXlQcm9wLFxuICBpc051bWVyaWNTaW5nbGVQcm9wLFxuICBpc09uZVRvT25lUmVsYXRpb25Qcm9wLFxuICBpc1JlbGF0aW9uUHJvcCxcbiAgaXNTdHJpbmdBcnJheVByb3AsXG4gIGlzU3RyaW5nU2luZ2xlUHJvcCxcbiAgaXNUc1ZlY3RvclByb3AsXG4gIGlzVXVpZEFycmF5UHJvcCxcbiAgaXNVdWlkU2luZ2xlUHJvcCxcbiAgaXNWZWN0b3JBcnJheVByb3AsXG4gIGlzVmVjdG9yU2luZ2xlUHJvcCxcbiAgaXNWaXJ0dWFsUHJvcCxcbiAgdHlwZSBSZW5kZXJpbmdOb2RlLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUltcG9ydFVybCB9IGZyb20gXCIuLi91dGlscy9lc20tdXRpbHNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kUmVjb3JkID0gei5ab2RSZWNvcmQ8ei5ab2RTdHJpbmcgfCB6LlpvZE51bWJlciB8IHouWm9kU3ltYm9sLCB6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RPYmplY3QgPSB6LlpvZE9iamVjdDwkWm9kTG9vc2VTaGFwZT47XG50eXBlIEFueVpvZE51bGxhYmxlID0gei5ab2ROdWxsYWJsZTx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2REZWZhdWx0ID0gei5ab2REZWZhdWx0PHouWm9kVHlwZT47XG50eXBlIEFueVpvZFVuaW9uID0gei5ab2RVbmlvbjx6LlpvZFR5cGVbXT47XG50eXBlIEFueVpvZEFycmF5ID0gei5ab2RBcnJheTx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RPcHRpb25hbCA9IHouWm9kT3B0aW9uYWw8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kVGVtcGxhdGVMaXRlcmFsID0gei5ab2RUZW1wbGF0ZUxpdGVyYWw8c3RyaW5nPjtcbi8qKlxuICogWm9kIO2DgOyehSBJROuhnOu2gO2EsCDrj5nsoIHsnLzroZwgWm9kIOyKpO2CpOuniOulvCDroZzrk5ztlanri4jri6QuXG4gKiBkaXN0IOuUlOugie2GoOumrOyXkOyEnCBFU03snLzroZwgaW1wb3J07ZWY7JesIOqwgOyguOyYteuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFpvZFR5cGVCeUlkKHpvZFR5cGVJZDogc3RyaW5nKTogUHJvbWlzZTx6LlpvZFR5cGVBbnk+IHtcbiAgY29uc3QgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aCh6b2RUeXBlSWQpO1xuICBjb25zdCBtb2R1bGVBYnNQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJkaXN0XCIsIFwiYXBwbGljYXRpb25cIiwgYCR7bW9kdWxlUGF0aH0uanNgKTtcbiAgY29uc3QgaW1wb3J0VXJsID0gY3JlYXRlSW1wb3J0VXJsKG1vZHVsZUFic1BhdGgpO1xuICBjb25zdCBpbXBvcnRlZCA9IGF3YWl0IGltcG9ydChpbXBvcnRVcmwpO1xuXG4gIGlmICghaW1wb3J0ZWRbem9kVHlwZUlkXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCB6b2RUeXBlSWQgJHt6b2RUeXBlSWR9YCk7XG4gIH1cbiAgcmV0dXJuIGltcG9ydGVkW3pvZFR5cGVJZF0uZGVzY3JpYmUoem9kVHlwZUlkKTtcbn1cblxuLyoqXG4gKiBFbnRpdHlQcm9w7J2EIFpvZCDtg4DsnoXsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICog6rCBIHByb3DsnZgg7YOA7J6F7JeQIOuUsOudvCDsoIHsoIjtlZwgWm9kIHZhbGlkYXRvcuulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9wVG9ab2RUeXBlKHByb3A6IEVudGl0eVByb3ApOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICBsZXQgem9kVHlwZTogei5ab2RUeXBlQW55ID0gei51bmtub3duKCk7XG4gIGlmIChpc0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0VudW1TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSAoYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCkpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdBcnJheVByb3AocHJvcCkpIHtcbiAgICBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCkuYXJyYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgem9kVHlwZSA9IHouc3RyaW5nKCkuYXJyYXkoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5udW1iZXIoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5ib29sZWFuKCk7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYm9vbGVhbigpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmRhdGUoKTtcbiAgfSBlbHNlIGlmIChpc0RhdGVBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5kYXRlKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoudXVpZCgpO1xuICB9IGVsc2UgaWYgKGlzVXVpZEFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnV1aWQoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzSnNvblByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNWZWN0b3JTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYXJyYXkoei5udW1iZXIoKSk7XG4gIH0gZWxzZSBpZiAoaXNWZWN0b3JBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5hcnJheSh6LmFycmF5KHoubnVtYmVyKCkpKTtcbiAgfSBlbHNlIGlmIChpc1ZpcnR1YWxQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzUmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgaWYgKGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApIHx8IChpc09uZVRvT25lUmVsYXRpb25Qcm9wKHByb3ApICYmIHByb3AuaGFzSm9pbkNvbHVtbikpIHtcbiAgICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3DsnYQgem9kVHlwZeycvOuhnCDrs4DtmZjtlZjripTrjbAg7Iuk7YyoICR7cHJvcH19YCk7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICB6b2RUeXBlID0gKHpvZFR5cGUgYXMgei5ab2ROdW1iZXIpLm5vbm5lZ2F0aXZlKCk7XG4gIH1cbiAgaWYgKHByb3AubnVsbGFibGUpIHtcbiAgICB6b2RUeXBlID0gem9kVHlwZS5udWxsYWJsZSgpO1xuICB9XG5cbiAgcmV0dXJuIHpvZFR5cGU7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6FIOygleydmCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BUb1pvZFR5cGVEZWYocHJvcDogRW50aXR5UHJvcCwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgc3RtdDogc3RyaW5nO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmludCgpYDtcbiAgfSBlbHNlIGlmIChpc0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5pbnQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYmlnaW50KClgO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJpZ2ludCgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzRW51bVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtwcm9wLmlkfWA7XG4gICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9LmFycmF5KClgO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZ1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpLm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKS5tYXgoJHtwcm9wLmxlbmd0aH0pLmFycmF5KClgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKS5hcnJheSgpYDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoubnVtYmVyKClgO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoubnVtYmVyKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpYDtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0RhdGVTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouZGF0ZSgpYDtcbiAgfSBlbHNlIGlmIChpc0RhdGVBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5kYXRlKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJvb2xlYW4oKWA7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYm9vbGVhbigpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzVXVpZFNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei51dWlkKClgO1xuICB9IGVsc2UgaWYgKGlzVXVpZEFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnV1aWQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0pzb25Qcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1ZlY3RvclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6Lm51bWJlcigpKWA7XG4gIH0gZWxzZSBpZiAoaXNWZWN0b3JBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6LmFycmF5KHoubnVtYmVyKCkpKWA7XG4gIH0gZWxzZSBpZiAoaXNUc1ZlY3RvclByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9YDtcbiAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICBpZiAoaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkgfHwgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKSkge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX1faWQ6IHouaW50KClgO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDqt7jsmbggcmVsYXRpb24g7LyA7J207IqkIOygnOyZuFxuICAgICAgcmV0dXJuIGAvLyAke3Byb3AubmFtZX06ICR7cHJvcC5yZWxhdGlvblR5cGV9ICR7cHJvcC53aXRofWA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIi8vIHVuYWJsZSB0byByZXNvbHZlXCI7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICBzdG10ICs9IFwiLm5vbm5lZ2F0aXZlKClcIjtcbiAgfVxuICBpZiAocHJvcC5udWxsYWJsZSkge1xuICAgIHN0bXQgKz0gXCIubnVsbGFibGUoKVwiO1xuICB9XG5cbiAgcmV0dXJuIGAke3N0bXR9LGA7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcE5vZGXrpbwgWm9kIO2DgOyehSDsoJXsnZgg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBwbGFpbiwgYXJyYXksIG9iamVjdCDrhbjrk5wg7YOA7J6F7J2EIOyerOq3gOyggeycvOuhnCDsspjrpqztlZjsl6wg7KSR7LKpIOq1rOyhsOulvCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcInBsYWluXCIpIHtcbiAgICByZXR1cm4gcHJvcFRvWm9kVHlwZURlZihwcm9wTm9kZS5wcm9wLCBpbmplY3RJbXBvcnRLZXlzKTtcbiAgfSBlbHNlIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5hcnJheSh6Lm9iamVjdCh7XCIsXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlblxuICAgICAgICAubWFwKChjaGlsZFByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihjaGlsZFByb3BOb2RlLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIiksXG4gICAgICBcIlwiLFxuICAgICAgXCJ9KSksXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9IGVsc2UgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgcHJvcE5vZGUuY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoY2hpbGRQcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYoY2hpbGRQcm9wTm9kZSwgaW5qZWN0SW1wb3J0S2V5cykpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgXCJcIixcbiAgICAgIGB9KSR7cHJvcE5vZGUucHJvcD8ubnVsbGFibGUgPyBcIi5udWxsYWJsZSgpXCIgOiBcIlwifSxgLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvVHNUeXBlRGVmKHp0OiB6LlpvZFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHp0LmRlZi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgIGNhc2UgXCJhbnlcIjpcbiAgICBjYXNlIFwidW5rbm93blwiOlxuICAgIGNhc2UgXCJuZXZlclwiOlxuICAgICAgcmV0dXJuIHp0LmRlZi50eXBlO1xuICAgIGNhc2UgXCJudWxsYWJsZVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigoenQgYXMgQW55Wm9kTnVsbGFibGUpLmRlZi5pbm5lclR5cGUpfSB8IG51bGxgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICByZXR1cm4gem9kVHlwZVRvVHNUeXBlRGVmKCh6dCBhcyBBbnlab2REZWZhdWx0KS5kZWYuaW5uZXJUeXBlKTtcbiAgICBjYXNlIFwicmVjb3JkXCI6IHtcbiAgICAgIGNvbnN0IHJlY29yZFR5cGUgPSB6dCBhcyBBbnlab2RSZWNvcmQ7XG4gICAgICByZXR1cm4gYHsgWyBrZXk6ICR7em9kVHlwZVRvVHNUeXBlRGVmKHJlY29yZFR5cGUuZGVmLmtleVR5cGUpfSBdOiAke3pvZFR5cGVUb1RzVHlwZURlZihyZWNvcmRUeXBlLmRlZi52YWx1ZVR5cGUpfX1gO1xuICAgIH1cbiAgICBjYXNlIFwibGl0ZXJhbFwiOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oKHp0IGFzIHouWm9kTGl0ZXJhbCkudmFsdWVzKVxuICAgICAgICAubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBgbnVsbGA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBgdW5kZWZpbmVkYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIgfCBcIik7XG4gICAgY2FzZSBcInVuaW9uXCI6XG4gICAgICByZXR1cm4gYCR7KHp0IGFzIEFueVpvZFVuaW9uKS5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4gem9kVHlwZVRvVHNUeXBlRGVmKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiIHwgXCIpfWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIHJldHVybiBgJHsoenQgYXMgei5ab2RFbnVtKS5vcHRpb25zLm1hcCgodmFsKSA9PiBgXCIke3ZhbH1cImApLmpvaW4oXCIgfCBcIil9YDtcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZEFycmF5KS5lbGVtZW50KX1bXWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChzaGFwZVtrZXldLmRlZi50eXBlID09PSBcIm9wdGlvbmFsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PzogJHt6b2RUeXBlVG9Uc1R5cGVEZWYoc2hhcGVba2V5XS5kZWYuaW5uZXJUeXBlKX0sYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7em9kVHlwZVRvVHNUeXBlRGVmKHNoYXBlW2tleV0pfSxgO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZE9wdGlvbmFsKS5kZWYuaW5uZXJUeXBlKX0gfCB1bmRlZmluZWRgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9ICh6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWwpLmRlZjtcblxuICAgICAgLy8g67mIIHRlbXBsYXRlIGxpdGVyYWzsnYAgc3RyaW5n7Jy866GcIO2PtOuwsVxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgVHlwZVNjcmlwdCDtg4DsnoUg66y47J6Q7Je066GcIOuzgO2ZmFxuICAgICAgY29uc3QgcGFydHMgPSBkZWYucGFydHMubWFwKChwYXJ0OiB1bmtub3duKSA9PiB7XG4gICAgICAgIC8vIOumrO2EsOuftCDqsJIgKHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBudWxsLCB1bmRlZmluZWQpXG4gICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBgJHtwYXJ0fWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUeXBlVG9Uc1R5cGVEZWYocGFydCBhcyB6LlpvZFR5cGUpO1xuICAgICAgICAgIHJldHVybiBgJFxceyR7aW5uZXJUeXBlfX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7Y+067CxXG4gICAgICAgIHJldHVybiBgXFwke3N0cmluZ31gO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgXFxgJHtwYXJ0cy5qb2luKFwiXCIpfVxcYGA7XG4gICAgfVxuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICByZXR1cm4gXCJGaWxlXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvWm9kQ29kZSh6dDogei5ab2RUeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoICh6dC5kZWYudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInouc3RyaW5nKClcIjtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bWJlcigpXCI7XG4gICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgcmV0dXJuIFwiei5iaWdpbnQoKVwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJ6LmJvb2xlYW4oKVwiO1xuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gXCJ6LmRhdGUoKVwiO1xuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bGwoKVwiO1xuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgIHJldHVybiBcInoudW5kZWZpbmVkKClcIjtcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgICByZXR1cm4gXCJ6LmFueSgpXCI7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIHJldHVybiBcInoudW5rbm93bigpXCI7XG4gICAgY2FzZSBcIm5ldmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm5ldmVyKClcIjtcbiAgICBjYXNlIFwibnVsbGFibGVcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyBBbnlab2ROdWxsYWJsZSkuZGVmLmlubmVyVHlwZSl9Lm51bGxhYmxlKClgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6IHtcbiAgICAgIGNvbnN0IHpEZWZhdWx0RGVmID0gKHp0IGFzIEFueVpvZERlZmF1bHQpLmRlZjtcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKHpEZWZhdWx0RGVmLmlubmVyVHlwZSl9LmRlZmF1bHQoJHt6RGVmYXVsdERlZi5kZWZhdWx0VmFsdWV9KWA7XG4gICAgfVxuICAgIGNhc2UgXCJyZWNvcmRcIjoge1xuICAgICAgY29uc3QgelJlY29yZERlZiA9ICh6dCBhcyBBbnlab2RSZWNvcmQpLmRlZjtcbiAgICAgIHJldHVybiBgei5yZWNvcmQoJHt6b2RUeXBlVG9ab2RDb2RlKHpSZWNvcmREZWYua2V5VHlwZSl9LCAke3pvZFR5cGVUb1pvZENvZGUoXG4gICAgICAgIHpSZWNvcmREZWYudmFsdWVUeXBlLFxuICAgICAgKX0pYDtcbiAgICB9XG4gICAgY2FzZSBcImxpdGVyYWxcIjoge1xuICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKCh6dCBhcyB6LlpvZExpdGVyYWw8c3RyaW5nIHwgbnVtYmVyPikudmFsdWVzKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gYG51bGxgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gYHVuZGVmaW5lZGA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBgei5saXRlcmFsKCR7aXRlbXNbMF19KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYHoubGl0ZXJhbChbJHtpdGVtcy5qb2luKFwiLCBcIil9XSlgO1xuICAgIH1cbiAgICBjYXNlIFwidW5pb25cIjpcbiAgICAgIHJldHVybiBgei51bmlvbihbJHsoenQgYXMgQW55Wm9kVW5pb24pLmRlZi5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbjogei5ab2RUeXBlKSA9PiB6b2RUeXBlVG9ab2RDb2RlKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiLFwiKX1dKWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIC8vIE5PVEU6IHouZW51bShbXCJBXCIsIFwiQlwiXSnrj4Qgei5lbnVtKHsgQTogXCJBXCIsIEI6IFwiQlwiIH0p66GcIOyymOumrOuQqC5cbiAgICAgIHJldHVybiBgei5lbnVtKHske09iamVjdC5lbnRyaWVzKCh6dCBhcyB6LlpvZEVudW0pLmRlZi5lbnRyaWVzKVxuICAgICAgICAubWFwKChba2V5LCB2YWxdKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IGAke2tleX06IFwiJHt2YWx9XCJgIDogYCR7a2V5fTogJHt2YWx9YCkpXG4gICAgICAgIC5qb2luKFwiLCBcIil9fSlgO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIGB6LmFycmF5KCR7em9kVHlwZVRvWm9kQ29kZSgoenQgYXMgei5ab2RBcnJheTx6LlpvZFR5cGU+KS5kZWYuZWxlbWVudCl9KWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ6Lm9iamVjdCh7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4gYCR7a2V5fTogJHt6b2RUeXBlVG9ab2RDb2RlKHNoYXBlW2tleV0pfSxgKSxcbiAgICAgICAgXCJ9KVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUpfS5vcHRpb25hbCgpYDtcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIGB6LmZpbGUoKWA7XG4gICAgY2FzZSBcInRlbXBsYXRlX2xpdGVyYWxcIjoge1xuICAgICAgY29uc3QgZGVmID0gKHp0IGFzIEFueVpvZFRlbXBsYXRlTGl0ZXJhbCkuZGVmO1xuXG4gICAgICAvLyDruYggdGVtcGxhdGUgbGl0ZXJhbFxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJ6LnRlbXBsYXRlTGl0ZXJhbChbXSlcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGRlZi5wYXJ0cy5tYXAoKHBhcnQ6IHVua25vd24pID0+IHtcbiAgICAgICAgLy8g66y47J6Q7Je0IOumrO2EsOuftFxuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHtwYXJ0fVwiYDtcbiAgICAgICAgfVxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICByZXR1cm4gem9kVHlwZVRvWm9kQ29kZShwYXJ0IGFzIHouWm9kVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDtj7TrsLFcbiAgICAgICAgcmV0dXJuIFwiei5zdHJpbmcoKVwiO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgei50ZW1wbGF0ZUxpdGVyYWwoWyR7cGFydHMuam9pbihcIiwgXCIpfV0pYDtcbiAgICB9XG4gICAgY2FzZSBcImludGVyc2VjdGlvblwiOiB7XG4gICAgICBjb25zdCB6SW50ZXJzZWN0aW9uRGVmID0gKHp0IGFzIHouWm9kSW50ZXJzZWN0aW9uPHouWm9kVHlwZSwgei5ab2RUeXBlPikuZGVmO1xuICAgICAgcmV0dXJuIGB6LmludGVyc2VjdGlvbigke3pvZFR5cGVUb1pvZENvZGUoekludGVyc2VjdGlvbkRlZi5sZWZ0KX0sICR7em9kVHlwZVRvWm9kQ29kZSh6SW50ZXJzZWN0aW9uRGVmLnJpZ2h0KX0pYDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyerOq3gOyggeycvOuhnCDspJHssqnrkJwg7YOA7J6F65Ok7J2EIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueSxcbiAgYmFzZUtleTogc3RyaW5nID0gXCJyb290XCIsXG4pOiBSZW5kZXJpbmdOb2RlIHtcbiAgY29uc3QgZGVmID0ge1xuICAgIG5hbWU6IGJhc2VLZXksXG4gICAgbGFiZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoYmFzZUtleSwgZmFsc2UpLFxuICAgIHpvZFR5cGUsXG4gIH07XG4gIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICBjb25zdCBjb2x1bW5LZXlzID0gT2JqZWN0LmtleXMoem9kVHlwZS5zaGFwZSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjb2x1bW5LZXlzLm1hcCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUeXBlLnNoYXBlW2tleV07XG4gICAgICByZXR1cm4gem9kVHlwZVRvUmVuZGVyaW5nTm9kZShpbm5lclR5cGUsIGtleSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgY29uc3QgaW5uZXJUeXBlID0gKHpvZFR5cGUgYXMgei5ab2RBcnJheTx6LlpvZFR5cGVBbnk+KS5kZWYuZWxlbWVudDtcbiAgICBpZiAoXG4gICAgICBpbm5lclR5cGUgaW5zdGFuY2VvZiB6LlpvZFN0cmluZyAmJlxuICAgICAgKGJhc2VLZXkuaW5jbHVkZXMoXCJpbWFnZXNcIikgfHwgYmFzZUtleS5pbmNsdWRlcyhcImltYWdlXCIpKVxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICByZW5kZXJUeXBlOiBcImFycmF5LWltYWdlc1wiLFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gdmVjdG9yIO2DgOyehSDtjJDrs4Q6IG51bWJlciDrsLDsl7TsnbTrqbTshJwgZW1iZWRkaW5nLCB2ZWN0b3Ig65Ox7J2YIOydtOumhOydhCDqsIDsp4Qg6rK97JqwXG4gICAgaWYgKFxuICAgICAgaW5uZXJUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIgJiZcbiAgICAgIChiYXNlS2V5LmluY2x1ZGVzKFwiZW1iZWRkaW5nXCIpIHx8IGJhc2VLZXkuaW5jbHVkZXMoXCJ2ZWN0b3JcIikpXG4gICAgKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kZWYsXG4gICAgICAgIHJlbmRlclR5cGU6IFwidmVjdG9yXCIsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogXCJhcnJheVwiLFxuICAgICAgZWxlbWVudDogem9kVHlwZVRvUmVuZGVyaW5nTm9kZShpbm5lclR5cGUsIGJhc2VLZXkpLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICBjb25zdCBvcHRpb25Ob2RlcyA9ICh6b2RUeXBlIGFzIHouWm9kVW5pb248ei5ab2RUeXBlW10+KS5kZWYub3B0aW9ucy5tYXAoKG9wdCkgPT5cbiAgICAgIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUob3B0LCBiYXNlS2V5KSxcbiAgICApO1xuICAgIC8vIFRPRE86IFpvZFVuaW9u7J20IOuTpOyWtOyeiOuKlCDqsr3smrAg7ZW465Ok66eBXG4gICAgcmV0dXJuIG9wdGlvbk5vZGVzWzBdO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9wdGlvbmFsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoKHpvZFR5cGUgYXMgei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVsbGFibGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uem9kVHlwZVRvUmVuZGVyaW5nTm9kZSgoem9kVHlwZSBhcyB6LlpvZE51bGxhYmxlPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUsIGJhc2VLZXkpLFxuICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogcmVzb2x2ZVJlbmRlclR5cGUoYmFzZUtleSwgem9kVHlwZSksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFpvZCDtg4DsnoXqs7wg7YKkIOydtOumhOycvOuhnOu2gO2EsCDsoIHsoIjtlZwgUmVuZGVyVHlwZeydhCDqsrDsoJXtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVSZW5kZXJUeXBlKGtleTogc3RyaW5nLCB6b2RUeXBlOiB6LlpvZFR5cGVBbnkpOiBSZW5kZXJpbmdOb2RlW1wicmVuZGVyVHlwZVwiXSB7XG4gIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2REYXRlKSB7XG4gICAgcmV0dXJuIFwiZGF0ZXRpbWVcIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcpIHtcbiAgICBpZiAoa2V5LmluY2x1ZGVzKFwiaW1nXCIpIHx8IGtleS5pbmNsdWRlcyhcImltYWdlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctaW1hZ2VcIjtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU1FMRGF0ZVRpbWVTdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGV0aW1lXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJkYXRlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZGF0ZVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyKSB7XG4gICAgaWYgKGtleSA9PT0gXCJpZFwiKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItaWRcIjtcbiAgICB9IGVsc2UgaWYgKGtleS5lbmRzV2l0aChcIl9pZFwiKSkge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLWZrX2lkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1wbGFpblwiO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICByZXR1cm4gXCJlbnVtc1wiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFJlY29yZCkge1xuICAgIHJldHVybiBcInJlY29yZFwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFueSB8fCB6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmtub3duKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RMaXRlcmFsKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVGVtcGxhdGVMaXRlcmFsKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7IuxIOu2iOqwgCAke2tleX0gJHt6b2RUeXBlLmRlZi50eXBlfWApO1xuICB9XG59XG4iXSwibmFtZXMiOlsiaW5mbGVjdGlvbiIsInBhdGgiLCJ6IiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsImlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wIiwiaXNCaWdJbnRlZ2VyQXJyYXlQcm9wIiwiaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcCIsImlzQm9vbGVhbkFycmF5UHJvcCIsImlzQm9vbGVhblNpbmdsZVByb3AiLCJpc0RhdGVBcnJheVByb3AiLCJpc0RhdGVTaW5nbGVQcm9wIiwiaXNFbnVtQXJyYXlQcm9wIiwiaXNFbnVtU2luZ2xlUHJvcCIsImlzSW50ZWdlckFycmF5UHJvcCIsImlzSW50ZWdlclNpbmdsZVByb3AiLCJpc0pzb25Qcm9wIiwiaXNOdW1iZXJBcnJheVByb3AiLCJpc051bWJlclNpbmdsZVByb3AiLCJpc051bWVyaWNBcnJheVByb3AiLCJpc051bWVyaWNTaW5nbGVQcm9wIiwiaXNPbmVUb09uZVJlbGF0aW9uUHJvcCIsImlzUmVsYXRpb25Qcm9wIiwiaXNTdHJpbmdBcnJheVByb3AiLCJpc1N0cmluZ1NpbmdsZVByb3AiLCJpc1RzVmVjdG9yUHJvcCIsImlzVXVpZEFycmF5UHJvcCIsImlzVXVpZFNpbmdsZVByb3AiLCJpc1ZlY3RvckFycmF5UHJvcCIsImlzVmVjdG9yU2luZ2xlUHJvcCIsImlzVmlydHVhbFByb3AiLCJjcmVhdGVJbXBvcnRVcmwiLCJnZXRab2RUeXBlQnlJZCIsInpvZFR5cGVJZCIsIm1vZHVsZVBhdGgiLCJnZXRNb2R1bGVQYXRoIiwibW9kdWxlQWJzUGF0aCIsImpvaW4iLCJhcGlSb290UGF0aCIsImltcG9ydFVybCIsImltcG9ydGVkIiwiRXJyb3IiLCJkZXNjcmliZSIsInByb3BUb1pvZFR5cGUiLCJwcm9wIiwiem9kVHlwZSIsInVua25vd24iLCJudW1iZXIiLCJpbnQiLCJhcnJheSIsImJpZ2ludCIsImlkIiwibGVuZ3RoIiwic3RyaW5nIiwibWF4IiwiYm9vbGVhbiIsImRhdGUiLCJ1dWlkIiwiaGFzSm9pbkNvbHVtbiIsInVuc2lnbmVkIiwibm9ubmVnYXRpdmUiLCJudWxsYWJsZSIsInByb3BUb1pvZFR5cGVEZWYiLCJpbmplY3RJbXBvcnRLZXlzIiwic3RtdCIsIm5hbWUiLCJwdXNoIiwicmVsYXRpb25UeXBlIiwid2l0aCIsInByb3BOb2RlVG9ab2RUeXBlRGVmIiwicHJvcE5vZGUiLCJub2RlVHlwZSIsImNoaWxkcmVuIiwibWFwIiwiY2hpbGRQcm9wTm9kZSIsInpvZFR5cGVUb1RzVHlwZURlZiIsInp0IiwiZGVmIiwidHlwZSIsImlubmVyVHlwZSIsInJlY29yZFR5cGUiLCJrZXlUeXBlIiwidmFsdWVUeXBlIiwiQXJyYXkiLCJmcm9tIiwidmFsdWVzIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJvcHRpb25zIiwib3B0aW9uIiwidmFsIiwiZWxlbWVudCIsInNoYXBlIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInBhcnRzIiwicGFydCIsIl96b2QiLCJ6b2RUeXBlVG9ab2RDb2RlIiwiekRlZmF1bHREZWYiLCJkZWZhdWx0VmFsdWUiLCJ6UmVjb3JkRGVmIiwiaXRlbXMiLCJlbnRyaWVzIiwiekludGVyc2VjdGlvbkRlZiIsImxlZnQiLCJyaWdodCIsInpvZFR5cGVUb1JlbmRlcmluZ05vZGUiLCJiYXNlS2V5IiwibGFiZWwiLCJjYW1lbGl6ZSIsIlpvZE9iamVjdCIsImNvbHVtbktleXMiLCJyZW5kZXJUeXBlIiwiWm9kQXJyYXkiLCJab2RTdHJpbmciLCJpbmNsdWRlcyIsIlpvZE51bWJlciIsIlpvZFVuaW9uIiwib3B0aW9uTm9kZXMiLCJvcHQiLCJab2RPcHRpb25hbCIsIm9wdGlvbmFsIiwiWm9kTnVsbGFibGUiLCJyZXNvbHZlUmVuZGVyVHlwZSIsIlpvZERhdGUiLCJkZXNjcmlwdGlvbiIsImVuZHNXaXRoIiwiWm9kQm9vbGVhbiIsIlpvZEVudW0iLCJab2RSZWNvcmQiLCJab2RBbnkiLCJab2RVbmtub3duIiwiWm9kTGl0ZXJhbCIsIlpvZFRlbXBsYXRlTGl0ZXJhbCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtCQyxHQUVELE9BQU9BLGdCQUFnQixhQUFhO0FBQ3BDLE9BQU9DLFVBQVUsT0FBTztBQUN4QixTQUFTQyxDQUFDLFFBQVEsTUFBTTtBQUV4QixTQUFTQyxNQUFNLFFBQVEsbUJBQWdCO0FBQ3ZDLFNBQVNDLGFBQWEsUUFBUSw4QkFBMkI7QUFDekQsU0FHRUMsMEJBQTBCLEVBQzFCQyxxQkFBcUIsRUFDckJDLHNCQUFzQixFQUN0QkMsa0JBQWtCLEVBQ2xCQyxtQkFBbUIsRUFDbkJDLGVBQWUsRUFDZkMsZ0JBQWdCLEVBQ2hCQyxlQUFlLEVBQ2ZDLGdCQUFnQixFQUNoQkMsa0JBQWtCLEVBQ2xCQyxtQkFBbUIsRUFDbkJDLFVBQVUsRUFDVkMsaUJBQWlCLEVBQ2pCQyxrQkFBa0IsRUFDbEJD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
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type TestFunction, type TestOptions, type VitestUtils, test as vitestTest } from "vitest";
|
|
2
|
+
import type { AuthContext, Context } from "../api/context";
|
|
3
|
+
export declare function bootstrap(vi: VitestUtils): void;
|
|
4
|
+
export declare function runWithContext(context: Context | null, fn: () => Promise<void>): Promise<void>;
|
|
5
|
+
export declare function runWithMockContext(fn: () => Promise<void>): Promise<void>;
|
|
6
|
+
declare module "vitest" {
|
|
7
|
+
interface TaskMeta {
|
|
8
|
+
traces: {
|
|
9
|
+
key: string;
|
|
10
|
+
value: any;
|
|
11
|
+
filePath: string;
|
|
12
|
+
lineNumber: number;
|
|
13
|
+
at: string;
|
|
14
|
+
}[];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export declare const test: ((title: string, fn: TestFunction<object>, options?: TestOptions) => Promise<void>) & {
|
|
18
|
+
skip: (title: string, fn: TestFunction<object>, options?: TestOptions) => Promise<void>;
|
|
19
|
+
only: (title: string, fn: TestFunction<object>, options?: TestOptions) => Promise<void>;
|
|
20
|
+
todo: (title: string) => void;
|
|
21
|
+
each: typeof vitestTest.each;
|
|
22
|
+
};
|
|
23
|
+
export declare const testAs: (<User extends AuthContext["user"]>(user: User, title: string, fn: TestFunction<object>, options?: TestOptions) => Promise<void>) & {
|
|
24
|
+
skip: <User extends AuthContext["user"]>(_user: User, title: string, fn: TestFunction<object>, options?: TestOptions) => Promise<void>;
|
|
25
|
+
only: <User extends AuthContext["user"]>(user: User, title: string, fn: TestFunction<object>, options?: TestOptions) => Promise<void>;
|
|
26
|
+
todo: (title: string) => void;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/testing/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,IAAI,IAAI,UAAU,EACnB,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAM3D,wBAAgB,SAAS,CAAC,EAAE,EAAE,WAAW,QA6BxC;AAeD,wBAAsB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,iBAGpF;AAED,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,iBAE/D;AAED,OAAO,QAAQ,QAAQ,CAAC;IACtB,UAAU,QAAQ;QAChB,MAAM,EAAE;YACN,GAAG,EAAE,MAAM,CAAC;YAEZ,KAAK,EAAE,GAAG,CAAC;YACX,QAAQ,EAAE,MAAM,CAAC;YACjB,UAAU,EAAE,MAAM,CAAC;YACnB,EAAE,EAAE,MAAM,CAAC;SACZ,EAAE,CAAC;KACL;CACF;AAED,eAAO,MAAM,IAAI,WACD,MAAM,MAAM,YAAY,CAAC,MAAM,CAAC,YAAY,WAAW;kBAc/C,MAAM,MAAM,YAAY,CAAC,MAAM,CAAC,YAAY,WAAW;kBAEvD,MAAM,MAAM,YAAY,CAAC,MAAM,CAAC,YAAY,WAAW;kBAa7D,MAAM;UACsB,OAAO,UAAU,CAAC,IAAI;CAEnE,CAAC;AAEF,eAAO,MAAM,MAAM,IACV,IAAI,SAAS,WAAW,CAAC,MAAM,CAAC,QAC/B,IAAI,SACH,MAAM,MACT,YAAY,CAAC,MAAM,CAAC,YACd,WAAW;WAqBR,IAAI,SAAS,WAAW,CAAC,MAAM,CAAC,SACpC,IAAI,SACJ,MAAM,MACT,YAAY,CAAC,MAAM,CAAC,YACd,WAAW;WAEV,IAAI,SAAS,WAAW,CAAC,MAAM,CAAC,QACrC,IAAI,SACH,MAAM,MACT,YAAY,CAAC,MAAM,CAAC,YACd,WAAW;kBAoBT,MAAM;CAEvB,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { afterAll, afterEach, beforeAll, beforeEach, test as vitestTest } from "vitest";
|
|
2
|
+
import { Sonamu } from "../api/sonamu.js";
|
|
3
|
+
import { DB } from "../database/db.js";
|
|
4
|
+
import { Naite } from "../naite/naite.js";
|
|
5
|
+
import { NaiteReporter } from "../naite/naite-reporter.js";
|
|
6
|
+
export function bootstrap(vi) {
|
|
7
|
+
beforeAll(async ()=>{
|
|
8
|
+
await Sonamu.initForTesting();
|
|
9
|
+
});
|
|
10
|
+
beforeEach(async ()=>{
|
|
11
|
+
await DB.createTestTransaction();
|
|
12
|
+
});
|
|
13
|
+
afterEach(async ({ task })=>{
|
|
14
|
+
vi.useRealTimers();
|
|
15
|
+
await DB.clearTestTransaction();
|
|
16
|
+
await NaiteReporter.reportTestResult({
|
|
17
|
+
suiteName: task.suite?.name ?? "(no suite)",
|
|
18
|
+
suiteFilePath: task.file?.filepath,
|
|
19
|
+
testName: task.name,
|
|
20
|
+
testFilePath: task.file?.filepath ?? "",
|
|
21
|
+
testLine: task.location?.line ?? 0,
|
|
22
|
+
status: task.result?.state ?? "pass",
|
|
23
|
+
duration: task.result?.duration ?? 0,
|
|
24
|
+
error: task.result?.errors?.[0] ? {
|
|
25
|
+
message: task.result.errors[0].message,
|
|
26
|
+
stack: task.result.errors[0].stack
|
|
27
|
+
} : undefined,
|
|
28
|
+
traces: task.meta?.traces ?? []
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
afterAll(()=>{});
|
|
32
|
+
}
|
|
33
|
+
function getMockContext() {
|
|
34
|
+
return {
|
|
35
|
+
ip: "127.0.0.1",
|
|
36
|
+
session: {},
|
|
37
|
+
user: null,
|
|
38
|
+
passport: {
|
|
39
|
+
login: async ()=>{},
|
|
40
|
+
logout: ()=>{}
|
|
41
|
+
},
|
|
42
|
+
naiteStore: Naite.createStore()
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export async function runWithContext(context, fn) {
|
|
46
|
+
// Sonamu.asyncLocalStorage.run으로 context 설정
|
|
47
|
+
await Sonamu.asyncLocalStorage.run({
|
|
48
|
+
context: context ?? getMockContext()
|
|
49
|
+
}, fn);
|
|
50
|
+
}
|
|
51
|
+
export async function runWithMockContext(fn) {
|
|
52
|
+
await runWithContext(getMockContext(), fn);
|
|
53
|
+
}
|
|
54
|
+
export const test = Object.assign(async (title, fn, options)=>{
|
|
55
|
+
return vitestTest(title, options, async (context)=>{
|
|
56
|
+
await runWithMockContext(async ()=>{
|
|
57
|
+
try {
|
|
58
|
+
await fn(context);
|
|
59
|
+
context.task.meta.traces = Naite.getAllTraces();
|
|
60
|
+
} catch (e) {
|
|
61
|
+
context.task.meta.traces = Naite.getAllTraces();
|
|
62
|
+
throw e;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}, {
|
|
67
|
+
skip: async (title, fn, options)=>vitestTest.skip(title, options, fn),
|
|
68
|
+
only: async (title, fn, options)=>{
|
|
69
|
+
return vitestTest.only(title, options, async (context)=>{
|
|
70
|
+
await runWithMockContext(async ()=>{
|
|
71
|
+
try {
|
|
72
|
+
await fn(context);
|
|
73
|
+
context.task.meta.traces = Naite.getAllTraces();
|
|
74
|
+
} catch (e) {
|
|
75
|
+
context.task.meta.traces = Naite.getAllTraces();
|
|
76
|
+
throw e;
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
todo: (title)=>vitestTest.todo(title),
|
|
82
|
+
each: vitestTest.each.bind(vitestTest)
|
|
83
|
+
});
|
|
84
|
+
export const testAs = Object.assign(async (user, title, fn, options)=>{
|
|
85
|
+
return vitestTest(title, options, async (context)=>{
|
|
86
|
+
await runWithContext({
|
|
87
|
+
...getMockContext(),
|
|
88
|
+
user
|
|
89
|
+
}, async ()=>{
|
|
90
|
+
try {
|
|
91
|
+
await fn(context);
|
|
92
|
+
context.task.meta.traces = Naite.getAllTraces();
|
|
93
|
+
} catch (e) {
|
|
94
|
+
context.task.meta.traces = Naite.getAllTraces();
|
|
95
|
+
throw e;
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}, {
|
|
100
|
+
skip: async (_user, title, fn, options)=>vitestTest.skip(title, options, fn),
|
|
101
|
+
only: async (user, title, fn, options)=>{
|
|
102
|
+
return vitestTest.only(title, options, async (context)=>{
|
|
103
|
+
await runWithContext({
|
|
104
|
+
...getMockContext(),
|
|
105
|
+
user
|
|
106
|
+
}, async ()=>{
|
|
107
|
+
try {
|
|
108
|
+
await fn(context);
|
|
109
|
+
context.task.meta.traces = Naite.getAllTraces();
|
|
110
|
+
} catch (e) {
|
|
111
|
+
context.task.meta.traces = Naite.getAllTraces();
|
|
112
|
+
throw e;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
},
|
|
117
|
+
todo: (title)=>vitestTest.todo(title)
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Jvb3RzdHJhcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhZnRlckFsbCxcbiAgYWZ0ZXJFYWNoLFxuICBiZWZvcmVBbGwsXG4gIGJlZm9yZUVhY2gsXG4gIHR5cGUgVGVzdEZ1bmN0aW9uLFxuICB0eXBlIFRlc3RPcHRpb25zLFxuICB0eXBlIFZpdGVzdFV0aWxzLFxuICB0ZXN0IGFzIHZpdGVzdFRlc3QsXG59IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB0eXBlIHsgQXV0aENvbnRleHQsIENvbnRleHQgfSBmcm9tIFwiLi4vYXBpL2NvbnRleHRcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IE5haXRlUmVwb3J0ZXIgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGUtcmVwb3J0ZXJcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcCh2aTogVml0ZXN0VXRpbHMpIHtcbiAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBTb25hbXUuaW5pdEZvclRlc3RpbmcoKTtcbiAgfSk7XG4gIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IERCLmNyZWF0ZVRlc3RUcmFuc2FjdGlvbigpO1xuICB9KTtcbiAgYWZ0ZXJFYWNoKGFzeW5jICh7IHRhc2sgfSkgPT4ge1xuICAgIHZpLnVzZVJlYWxUaW1lcnMoKTtcbiAgICBhd2FpdCBEQi5jbGVhclRlc3RUcmFuc2FjdGlvbigpO1xuXG4gICAgYXdhaXQgTmFpdGVSZXBvcnRlci5yZXBvcnRUZXN0UmVzdWx0KHtcbiAgICAgIHN1aXRlTmFtZTogdGFzay5zdWl0ZT8ubmFtZSA/PyBcIihubyBzdWl0ZSlcIixcbiAgICAgIHN1aXRlRmlsZVBhdGg6IHRhc2suZmlsZT8uZmlsZXBhdGgsXG4gICAgICB0ZXN0TmFtZTogdGFzay5uYW1lLFxuICAgICAgdGVzdEZpbGVQYXRoOiB0YXNrLmZpbGU/LmZpbGVwYXRoID8/IFwiXCIsXG4gICAgICB0ZXN0TGluZTogdGFzay5sb2NhdGlvbj8ubGluZSA/PyAwLFxuICAgICAgc3RhdHVzOiB0YXNrLnJlc3VsdD8uc3RhdGUgPz8gXCJwYXNzXCIsXG4gICAgICBkdXJhdGlvbjogdGFzay5yZXN1bHQ/LmR1cmF0aW9uID8/IDAsXG4gICAgICBlcnJvcjogdGFzay5yZXN1bHQ/LmVycm9ycz8uWzBdXG4gICAgICAgID8ge1xuICAgICAgICAgICAgbWVzc2FnZTogdGFzay5yZXN1bHQuZXJyb3JzWzBdLm1lc3NhZ2UsXG4gICAgICAgICAgICBzdGFjazogdGFzay5yZXN1bHQuZXJyb3JzWzBdLnN0YWNrLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB0cmFjZXM6IHRhc2subWV0YT8udHJhY2VzID8/IFtdLFxuICAgIH0pO1xuICB9KTtcbiAgYWZ0ZXJBbGwoKCkgPT4ge30pO1xufVxuXG5mdW5jdGlvbiBnZXRNb2NrQ29udGV4dCgpOiBDb250ZXh0IHtcbiAgcmV0dXJuIHtcbiAgICBpcDogXCIxMjcuMC4wLjFcIixcbiAgICBzZXNzaW9uOiB7fSxcbiAgICB1c2VyOiBudWxsLFxuICAgIHBhc3Nwb3J0OiB7XG4gICAgICBsb2dpbjogYXN5bmMgKCkgPT4ge30sXG4gICAgICBsb2dvdXQ6ICgpID0+IHt9LFxuICAgIH0sXG4gICAgbmFpdGVTdG9yZTogTmFpdGUuY3JlYXRlU3RvcmUoKSxcbiAgfSBhcyB1bmtub3duIGFzIENvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoQ29udGV4dChjb250ZXh0OiBDb250ZXh0IHwgbnVsbCwgZm46ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgLy8gU29uYW11LmFzeW5jTG9jYWxTdG9yYWdlLnJ1buycvOuhnCBjb250ZXh0IOyEpOyglVxuICBhd2FpdCBTb25hbXUuYXN5bmNMb2NhbFN0b3JhZ2UucnVuKHsgY29udGV4dDogY29udGV4dCA/PyBnZXRNb2NrQ29udGV4dCgpIH0sIGZuKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bldpdGhNb2NrQ29udGV4dChmbjogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICBhd2FpdCBydW5XaXRoQ29udGV4dChnZXRNb2NrQ29udGV4dCgpLCBmbik7XG59XG5cbmRlY2xhcmUgbW9kdWxlIFwidml0ZXN0XCIge1xuICBpbnRlcmZhY2UgVGFza01ldGEge1xuICAgIHRyYWNlczoge1xuICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGV4cGVjdOyZgCDtmLjsnZHtlZjrj4TroZ0gYW5566W8IO2XiOyaqe2VqC5cbiAgICAgIHZhbHVlOiBhbnk7XG4gICAgICBmaWxlUGF0aDogc3RyaW5nO1xuICAgICAgbGluZU51bWJlcjogbnVtYmVyO1xuICAgICAgYXQ6IHN0cmluZztcbiAgICB9W107XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRlc3QgPSBPYmplY3QuYXNzaWduKFxuICBhc3luYyAodGl0bGU6IHN0cmluZywgZm46IFRlc3RGdW5jdGlvbjxvYmplY3Q+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gdml0ZXN0VGVzdCh0aXRsZSwgb3B0aW9ucywgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGF3YWl0IHJ1bldpdGhNb2NrQ29udGV4dChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZm4oY29udGV4dCk7XG4gICAgICAgICAgY29udGV4dC50YXNrLm1ldGEudHJhY2VzID0gTmFpdGUuZ2V0QWxsVHJhY2VzKCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSxcbiAge1xuICAgIHNraXA6IGFzeW5jICh0aXRsZTogc3RyaW5nLCBmbjogVGVzdEZ1bmN0aW9uPG9iamVjdD4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucykgPT5cbiAgICAgIHZpdGVzdFRlc3Quc2tpcCh0aXRsZSwgb3B0aW9ucywgZm4pLFxuICAgIG9ubHk6IGFzeW5jICh0aXRsZTogc3RyaW5nLCBmbjogVGVzdEZ1bmN0aW9uPG9iamVjdD4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucykgPT4ge1xuICAgICAgcmV0dXJuIHZpdGVzdFRlc3Qub25seSh0aXRsZSwgb3B0aW9ucywgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuV2l0aE1vY2tDb250ZXh0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZm4oY29udGV4dCk7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdG9kbzogKHRpdGxlOiBzdHJpbmcpID0+IHZpdGVzdFRlc3QudG9kbyh0aXRsZSksXG4gICAgZWFjaDogdml0ZXN0VGVzdC5lYWNoLmJpbmQodml0ZXN0VGVzdCkgYXMgdHlwZW9mIHZpdGVzdFRlc3QuZWFjaCxcbiAgfSxcbik7XG5cbmV4cG9ydCBjb25zdCB0ZXN0QXMgPSBPYmplY3QuYXNzaWduKFxuICBhc3luYyA8VXNlciBleHRlbmRzIEF1dGhDb250ZXh0W1widXNlclwiXT4oXG4gICAgdXNlcjogVXNlcixcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGZuOiBUZXN0RnVuY3Rpb248b2JqZWN0PixcbiAgICBvcHRpb25zPzogVGVzdE9wdGlvbnMsXG4gICkgPT4ge1xuICAgIHJldHVybiB2aXRlc3RUZXN0KHRpdGxlLCBvcHRpb25zLCBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgYXdhaXQgcnVuV2l0aENvbnRleHQoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5nZXRNb2NrQ29udGV4dCgpLFxuICAgICAgICAgIHVzZXIsXG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZm4oY29udGV4dCk7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSxcbiAge1xuICAgIHNraXA6IGFzeW5jIDxVc2VyIGV4dGVuZHMgQXV0aENvbnRleHRbXCJ1c2VyXCJdPihcbiAgICAgIF91c2VyOiBVc2VyLFxuICAgICAgdGl0bGU6IHN0cmluZyxcbiAgICAgIGZuOiBUZXN0RnVuY3Rpb248b2JqZWN0PixcbiAgICAgIG9wdGlvbnM/OiBUZXN0T3B0aW9ucyxcbiAgICApID0+IHZpdGVzdFRlc3Quc2tpcCh0aXRsZSwgb3B0aW9ucywgZm4pLFxuICAgIG9ubHk6IGFzeW5jIDxVc2VyIGV4dGVuZHMgQXV0aENvbnRleHRbXCJ1c2VyXCJdPihcbiAgICAgIHVzZXI6IFVzZXIsXG4gICAgICB0aXRsZTogc3RyaW5nLFxuICAgICAgZm46IFRlc3RGdW5jdGlvbjxvYmplY3Q+LFxuICAgICAgb3B0aW9ucz86IFRlc3RPcHRpb25zLFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHZpdGVzdFRlc3Qub25seSh0aXRsZSwgb3B0aW9ucywgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuV2l0aENvbnRleHQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uZ2V0TW9ja0NvbnRleHQoKSxcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBmbihjb250ZXh0KTtcbiAgICAgICAgICAgICAgY29udGV4dC50YXNrLm1ldGEudHJhY2VzID0gTmFpdGUuZ2V0QWxsVHJhY2VzKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQudGFzay5tZXRhLnRyYWNlcyA9IE5haXRlLmdldEFsbFRyYWNlcygpO1xuICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHRvZG86ICh0aXRsZTogc3RyaW5nKSA9PiB2aXRlc3RUZXN0LnRvZG8odGl0bGUpLFxuICB9LFxuKTtcbiJdLCJuYW1lcyI6WyJhZnRlckFsbCIsImFmdGVyRWFjaCIsImJlZm9yZUFsbCIsImJlZm9yZUVhY2giLCJ0ZXN0Iiwidml0ZXN0VGVzdCIsIlNvbmFtdSIsIkRCIiwiTmFpdGUiLCJOYWl0ZVJlcG9ydGVyIiwiYm9vdHN0cmFwIiwidmkiLCJpbml0Rm9yVGVzdGluZyIsImNyZWF0ZVRlc3RUcmFuc2FjdGlvbiIsInRhc2siLCJ1c2VSZWFsVGltZXJzIiwiY2xlYXJUZXN0VHJhbnNhY3Rpb24iLCJyZXBvcnRUZXN0UmVzdWx0Iiwic3VpdGVOYW1lIiwic3VpdGUiLCJuYW1lIiwic3VpdGVGaWxlUGF0aCIsImZpbGUiLCJmaWxlcGF0aCIsInRlc3ROYW1lIiwidGVzdEZpbGVQYXRoIiwidGVzdExpbmUiLCJsb2NhdGlvbiIsImxpbmUiLCJzdGF0dXMiLCJyZXN1bHQiLCJzdGF0ZSIsImR1cmF0aW9uIiwiZXJyb3IiLCJlcnJvcnMiLCJtZXNzYWdlIiwic3RhY2siLCJ1bmRlZmluZWQiLCJ0cmFjZXMiLCJtZXRhIiwiZ2V0TW9ja0NvbnRleHQiLCJpcCIsInNlc3Npb24iLCJ1c2VyIiwicGFzc3BvcnQiLCJsb2dpbiIsImxvZ291dCIsIm5haXRlU3RvcmUiLCJjcmVhdGVTdG9yZSIsInJ1bldpdGhDb250ZXh0IiwiY29udGV4dCIsImZuIiwiYXN5bmNMb2NhbFN0b3JhZ2UiLCJydW4iLCJydW5XaXRoTW9ja0NvbnRleHQiLCJPYmplY3QiLCJhc3NpZ24iLCJ0aXRsZSIsIm9wdGlvbnMiLCJnZXRBbGxUcmFjZXMiLCJlIiwic2tpcCIsIm9ubHkiLCJ0b2RvIiwiZWFjaCIsImJpbmQiLCJ0ZXN0QXMiLCJfdXNlciJdLCJtYXBwaW5ncyI6IkFBQUEsU0FDRUEsUUFBUSxFQUNSQyxTQUFTLEVBQ1RDLFNBQVMsRUFDVEMsVUFBVSxFQUlWQyxRQUFRQyxVQUFVLFFBQ2IsU0FBUztBQUVoQixTQUFTQyxNQUFNLFFBQVEsbUJBQWdCO0FBQ3ZDLFNBQVNDLEVBQUUsUUFBUSxvQkFBaUI7QUFDcEMsU0FBU0MsS0FBSyxRQUFRLG9CQUFpQjtBQUN2QyxTQUFTQyxhQUFhLFFBQVEsNkJBQTBCO0FBRXhELE9BQU8sU0FBU0MsVUFBVUMsRUFBZTtJQUN2Q1QsVUFBVTtRQUNSLE1BQU1JLE9BQU9NLGNBQWM7SUFDN0I7SUFDQVQsV0FBVztRQUNULE1BQU1JLEdBQUdNLHFCQUFxQjtJQUNoQztJQUNBWixVQUFVLE9BQU8sRUFBRWEsSUFBSSxFQUFFO1FBQ3ZCSCxHQUFHSSxhQUFhO1FBQ2hCLE1BQU1SLEdBQUdTLG9CQUFvQjtRQUU3QixNQUFNUCxjQUFj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
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fixture Loader Factory
|
|
3
|
+
*
|
|
4
|
+
* 테스트에서 사용할 fixture를 로드하는 함수를 생성
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* // fixture.ts
|
|
9
|
+
* import { createFixtureLoader } from "sonamu/test";
|
|
10
|
+
*
|
|
11
|
+
* export const loadFixtures = createFixtureLoader({
|
|
12
|
+
* company01: async () => CompanyModel.findById("A", 1),
|
|
13
|
+
* user01: async () => UserModel.findById("A", 1),
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* // test.ts
|
|
17
|
+
* const { company01, user01 } = await loadFixtures(["company01", "user01"]);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function createFixtureLoader<T extends Record<string, () => Promise<unknown>>>(loaders: T): <K extends keyof T>(names: K[]) => Promise<{ [P in K]: Awaited<ReturnType<T[P]>>; }>;
|
|
21
|
+
//# sourceMappingURL=fixture-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixture-loader.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,IAC3D,CAAC,SAAS,MAAM,CAAC,EAClD,OAAO,CAAC,EAAE,KACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,CAKpD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fixture Loader Factory
|
|
3
|
+
*
|
|
4
|
+
* 테스트에서 사용할 fixture를 로드하는 함수를 생성
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* // fixture.ts
|
|
9
|
+
* import { createFixtureLoader } from "sonamu/test";
|
|
10
|
+
*
|
|
11
|
+
* export const loadFixtures = createFixtureLoader({
|
|
12
|
+
* company01: async () => CompanyModel.findById("A", 1),
|
|
13
|
+
* user01: async () => UserModel.findById("A", 1),
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* // test.ts
|
|
17
|
+
* const { company01, user01 } = await loadFixtures(["company01", "user01"]);
|
|
18
|
+
* ```
|
|
19
|
+
*/ export function createFixtureLoader(loaders) {
|
|
20
|
+
return async function loadFixtures(names) {
|
|
21
|
+
return Object.fromEntries(await Promise.all(names.map(async (name)=>[
|
|
22
|
+
name,
|
|
23
|
+
await loaders[name]()
|
|
24
|
+
])));
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2ZpeHR1cmUtbG9hZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRml4dHVyZSBMb2FkZXIgRmFjdG9yeVxuICpcbiAqIO2FjOyKpO2KuOyXkOyEnCDsgqzsmqntlaAgZml4dHVyZeulvCDroZzrk5ztlZjripQg7ZWo7IiY66W8IOyDneyEsVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBmaXh0dXJlLnRzXG4gKiBpbXBvcnQgeyBjcmVhdGVGaXh0dXJlTG9hZGVyIH0gZnJvbSBcInNvbmFtdS90ZXN0XCI7XG4gKlxuICogZXhwb3J0IGNvbnN0IGxvYWRGaXh0dXJlcyA9IGNyZWF0ZUZpeHR1cmVMb2FkZXIoe1xuICogICBjb21wYW55MDE6IGFzeW5jICgpID0+IENvbXBhbnlNb2RlbC5maW5kQnlJZChcIkFcIiwgMSksXG4gKiAgIHVzZXIwMTogYXN5bmMgKCkgPT4gVXNlck1vZGVsLmZpbmRCeUlkKFwiQVwiLCAxKSxcbiAqIH0pO1xuICpcbiAqIC8vIHRlc3QudHNcbiAqIGNvbnN0IHsgY29tcGFueTAxLCB1c2VyMDEgfSA9IGF3YWl0IGxvYWRGaXh0dXJlcyhbXCJjb21wYW55MDFcIiwgXCJ1c2VyMDFcIl0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGaXh0dXJlTG9hZGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCAoKSA9PiBQcm9taXNlPHVua25vd24+Pj4obG9hZGVyczogVCkge1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gbG9hZEZpeHR1cmVzPEsgZXh0ZW5kcyBrZXlvZiBUPihcbiAgICBuYW1lczogS1tdLFxuICApOiBQcm9taXNlPHsgW1AgaW4gS106IEF3YWl0ZWQ8UmV0dXJuVHlwZTxUW1BdPj4gfT4ge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChuYW1lcy5tYXAoYXN5bmMgKG5hbWUpID0+IFtuYW1lLCBhd2FpdCBsb2FkZXJzW25hbWVdKCldKSksXG4gICAgKTtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVGaXh0dXJlTG9hZGVyIiwibG9hZGVycyIsImxvYWRGaXh0dXJlcyIsIm5hbWVzIiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtCQyxHQUNELE9BQU8sU0FBU0Esb0JBQXNFQyxPQUFVO0lBQzlGLE9BQU8sZUFBZUMsYUFDcEJDLEtBQVU7UUFFVixPQUFPQyxPQUFPQyxXQUFXLENBQ3ZCLE1BQU1DLFFBQVFDLEdBQUcsQ0FBQ0osTUFBTUssR0FBRyxDQUFDLE9BQU9DLE9BQVM7Z0JBQUNBO2dCQUFNLE1BQU1SLE9BQU8sQ0FBQ1EsS0FBSzthQUFHO0lBRTdFO0FBQ0YifQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Knex } from "knex";
|
|
2
2
|
import type { SonamuDBConfig } from "../database/db";
|
|
3
3
|
import type { Entity } from "../entity/entity";
|
|
4
4
|
import { type FixtureImportResult, type FixtureRecord, type FixtureSearchOptions } from "../types/types";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture-manager.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-manager.ts"],"names":[],"mappings":"AAKA,
|
|
1
|
+
{"version":3,"file":"fixture-manager.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAKjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAQ1B,MAAM,gBAAgB,CAAC;AAGxB,sCAAsC;AACtC,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE;QACR,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC9B,CAAC;CACH;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAKd;IAED,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAKd;IACD,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IAEzC,OAAO,CAAC,aAAa,CAAuB;IAG5C,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,eAAe,CAAoE;IAE3F,IAAI;IAuBE,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM;IAK7C;;;MAGE;IACI,IAAI;IAsCV,OAAO,CAAC,cAAc,CAAqB;IACrC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;IAwB7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA0EhF,OAAO;IAYP,WAAW,CACf,YAAY,EAAE,MAAM,cAAc,EAClC,YAAY,EAAE,MAAM,cAAc,EAClC,aAAa,EAAE,oBAAoB,EACnC,cAAc,CAAC,EAAE,qBAAqB;IA+ElC,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;KACjD,EACD,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,GAAG,CAAC,EAAE,IAAI,CAAC;KACZ,GACA,OAAO,CAAC,aAAa,EAAE,CAAC;IAoF3B;;;;OAIG;IACG,cAAc,CAClB,MAAM,EAAE,MAAM,cAAc,EAC5B,SAAS,EAAE,aAAa,EAAE,GACzB,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA6HjC;;OAEG;IACH,OAAO,CAAC,eAAe;IAoEvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,aAAa;YAeP,0BAA0B;YAgF1B,oBAAoB;YA6CpB,uBAAuB;IA8B/B,gBAAgB,CAAC,IAAI,EAAE,MAAM;CAepC;AAED,eAAO,MAAM,cAAc,qBAA4B,CAAC"}
|