sonamu 0.9.19 → 0.10.0
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/_virtual/_rolldown/runtime.js +36 -0
- package/dist/ai/agents/agent.js +5 -7
- package/dist/ai/agents/index.js +1 -2
- package/dist/ai/agents/types.js +1 -1
- package/dist/ai/index.js +1 -2
- package/dist/ai/providers/rtzr/api.js +2 -3
- package/dist/ai/providers/rtzr/error.js +14 -29
- package/dist/ai/providers/rtzr/index.js +1 -2
- package/dist/ai/providers/rtzr/model.js +13 -20
- package/dist/ai/providers/rtzr/options.js +2 -3
- package/dist/ai/providers/rtzr/provider.js +2 -3
- package/dist/ai/providers/rtzr/utils.js +12 -21
- package/dist/api/base-frame.js +4 -4
- package/dist/api/caster.js +21 -38
- package/dist/api/code-converters.js +41 -98
- package/dist/api/config.d.ts +1 -10
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +9 -8
- package/dist/api/context.js +2 -3
- package/dist/api/decorators.js +80 -116
- package/dist/api/index.js +2 -3
- package/dist/api/secret.js +6 -10
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +200 -387
- package/dist/api/validator.js +5 -8
- package/dist/api/websocket-helpers.js +21 -32
- package/dist/auth/audit-log/builders.js +2 -3
- package/dist/auth/audit-log/events.js +2 -2
- package/dist/auth/audit-log/plugin.js +30 -61
- package/dist/auth/audit-log-ingestor.js +19 -41
- package/dist/auth/auth-generator.js +16 -41
- package/dist/auth/better-auth-entities.js +3 -4
- package/dist/auth/index.js +2 -3
- package/dist/auth/knex-adapter.js +18 -45
- package/dist/auth/plugins/entity-definitions/admin.js +2 -2
- package/dist/auth/plugins/entity-definitions/anonymous.js +2 -2
- package/dist/auth/plugins/entity-definitions/api-key.js +2 -2
- package/dist/auth/plugins/entity-definitions/audit-log.js +2 -2
- package/dist/auth/plugins/entity-definitions/index.js +2 -3
- package/dist/auth/plugins/entity-definitions/jwt.js +2 -2
- package/dist/auth/plugins/entity-definitions/organization.js +2 -2
- package/dist/auth/plugins/entity-definitions/passkey.js +2 -2
- package/dist/auth/plugins/entity-definitions/phone-number.js +2 -2
- package/dist/auth/plugins/entity-definitions/sso.js +2 -2
- package/dist/auth/plugins/entity-definitions/two-factor.js +2 -2
- package/dist/auth/plugins/entity-definitions/types.js +1 -1
- package/dist/auth/plugins/entity-definitions/username.js +2 -2
- package/dist/auth/plugins/index.js +1 -2
- package/dist/auth/plugins/wrappers/admin.js +2 -3
- package/dist/auth/plugins/wrappers/anonymous.js +2 -3
- package/dist/auth/plugins/wrappers/api-key.js +2 -3
- package/dist/auth/plugins/wrappers/index.js +1 -2
- package/dist/auth/plugins/wrappers/jwt.js +2 -3
- package/dist/auth/plugins/wrappers/organization.js +2 -3
- package/dist/auth/plugins/wrappers/passkey.js +2 -3
- package/dist/auth/plugins/wrappers/phone-number.js +2 -3
- package/dist/auth/plugins/wrappers/sso.js +2 -3
- package/dist/auth/plugins/wrappers/two-factor.js +2 -3
- package/dist/auth/plugins/wrappers/username.js +2 -3
- package/dist/bin/build-config.js +2 -2
- package/dist/bin/cli.js +151 -258
- package/dist/bin/fixture.d.ts.map +1 -1
- package/dist/bin/fixture.js +55 -97
- package/dist/bin/hmr-hook-register.js +3 -3
- package/dist/bin/migrate-targets.d.ts +3 -0
- package/dist/bin/migrate-targets.d.ts.map +1 -0
- package/dist/bin/migrate-targets.js +11 -0
- package/dist/bin/test-command.js +25 -55
- package/dist/bin/ts-loader-register.js +5 -6
- package/dist/bin/ts-loader-registration.js +6 -13
- package/dist/cache/cache-manager.js +3 -4
- package/dist/cache/decorator.js +11 -21
- package/dist/cache/drivers.js +2 -3
- package/dist/cache/index.js +2 -3
- package/dist/cache/types.js +1 -1
- package/dist/cache-control/cache-control.js +21 -34
- package/dist/cache-control/types.js +1 -1
- package/dist/compress/compress.js +10 -10
- package/dist/compress/index.js +1 -2
- package/dist/compress/types.js +1 -1
- package/dist/cone/cone-generator.js +25 -63
- package/dist/database/_batch_update.js +26 -46
- package/dist/database/base-model.js +44 -97
- package/dist/database/base-model.types.js +1 -1
- package/dist/database/db.d.ts +8 -14
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +127 -72
- package/dist/database/knex.js +5 -8
- package/dist/database/puri-subset.types.js +1 -1
- package/dist/database/puri-wrapper.js +11 -15
- package/dist/database/puri.js +117 -234
- package/dist/database/puri.types.js +3 -4
- package/dist/database/transaction-context.js +4 -5
- package/dist/database/upsert-builder.js +109 -176
- package/dist/dict/en.d.ts +1 -0
- package/dist/dict/en.d.ts.map +1 -1
- package/dist/dict/en.js +4 -4
- package/dist/dict/index.js +2 -3
- package/dist/dict/ko.d.ts +1 -0
- package/dist/dict/ko.d.ts.map +1 -1
- package/dist/dict/ko.js +4 -4
- package/dist/dict/rc-keys.js +3 -4
- package/dist/dict/sd.js +8 -19
- package/dist/dict/sonamu-dictionary.js +141 -284
- package/dist/dict/types.js +1 -1
- package/dist/dict/utils.js +4 -5
- package/dist/entity/entity-manager.d.ts +2 -2
- package/dist/entity/entity-manager.js +34 -82
- package/dist/entity/entity-template-cone.js +33 -66
- package/dist/entity/entity.js +156 -310
- package/dist/env.d.ts +14 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +75 -0
- package/dist/exceptions/error-handler.js +2 -3
- package/dist/exceptions/so-exceptions.js +7 -5
- package/dist/filter/index.js +1 -2
- package/dist/filter/types.js +3 -4
- package/dist/filter/utils.js +21 -54
- package/dist/index.js +8 -7
- package/dist/logger/category.js +6 -12
- package/dist/logger/configure.js +23 -34
- package/dist/migration/code-generation.js +146 -314
- package/dist/migration/index-where-predicate.js +52 -144
- package/dist/migration/migration-set.js +19 -33
- package/dist/migration/migrator.d.ts +2 -0
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +69 -53
- package/dist/migration/postgresql-schema-reader.js +126 -225
- package/dist/migration/slack-confirm.d.ts +1 -0
- package/dist/migration/slack-confirm.d.ts.map +1 -1
- package/dist/migration/slack-confirm.js +28 -38
- package/dist/migration/types.js +1 -1
- package/dist/naite/messaging-types.js +1 -1
- package/dist/naite/naite-reporter.js +15 -32
- package/dist/naite/naite.js +43 -76
- package/dist/ssr/index.js +6 -9
- package/dist/ssr/registry.js +10 -18
- package/dist/ssr/renderer.js +10 -21
- package/dist/ssr/types.js +1 -1
- package/dist/storage/base-file.js +5 -10
- package/dist/storage/buffered-file.js +3 -4
- package/dist/storage/drivers.js +2 -3
- package/dist/storage/index.js +2 -3
- package/dist/storage/s3-driver.js +5 -9
- package/dist/storage/storage-manager.js +5 -5
- package/dist/storage/types.js +1 -1
- package/dist/storage/uploaded-file.js +4 -6
- package/dist/stream/index.js +1 -2
- package/dist/stream/sse.js +8 -13
- package/dist/stream/ws-audience-resolver.js +5 -5
- package/dist/stream/ws-audience.js +3 -4
- package/dist/stream/ws-cluster-bus.js +3 -4
- package/dist/stream/ws-core.js +1 -1
- package/dist/stream/ws-delivery.js +11 -25
- package/dist/stream/ws-local-connection-store.js +9 -18
- package/dist/stream/ws-presence-store.js +43 -97
- package/dist/stream/ws-registry.js +17 -22
- package/dist/stream/ws-telemetry-memory.js +38 -45
- package/dist/stream/ws-telemetry-trace.js +4 -6
- package/dist/stream/ws-telemetry.js +82 -135
- package/dist/stream/ws.js +47 -91
- package/dist/syncer/api-parser.js +81 -147
- package/dist/syncer/checksum.js +9 -20
- package/dist/syncer/code-generator.js +29 -47
- package/dist/syncer/entity-operations.js +17 -27
- package/dist/syncer/event-batcher.js +8 -15
- package/dist/syncer/file-patterns.js +3 -4
- package/dist/syncer/file-tracking.js +6 -10
- package/dist/syncer/index.js +1 -2
- package/dist/syncer/module-loader.js +10 -26
- package/dist/syncer/syncer-actions.js +19 -37
- package/dist/syncer/syncer.js +46 -98
- package/dist/syncer/watcher.js +12 -26
- package/dist/tasks/decorator.js +7 -11
- package/dist/tasks/step-wrapper.js +7 -8
- package/dist/tasks/workflow-manager.js +18 -25
- package/dist/template/entity-converter.js +40 -64
- package/dist/template/helpers.js +32 -63
- package/dist/template/implementations/entity.template.js +7 -11
- package/dist/template/implementations/entry-server.template.js +2 -3
- package/dist/template/implementations/generated.template.js +25 -51
- package/dist/template/implementations/generated_http.template.js +31 -58
- package/dist/template/implementations/generated_sso.template.js +45 -85
- package/dist/template/implementations/init_types.template.js +4 -7
- package/dist/template/implementations/model.template.js +5 -10
- package/dist/template/implementations/model_test.template.js +2 -3
- package/dist/template/implementations/queries.template.js +4 -7
- package/dist/template/implementations/sd.template.js +17 -35
- package/dist/template/implementations/services.template.js +18 -30
- package/dist/template/implementations/view_form.template.js +72 -125
- package/dist/template/implementations/view_id_all_select.template.js +2 -3
- package/dist/template/implementations/view_list.template.js +86 -143
- package/dist/template/implementations/view_search_input.template.js +2 -3
- package/dist/template/index.js +5 -8
- package/dist/template/template-manager.js +13 -26
- package/dist/template/template-types.js +2 -3
- package/dist/template/template.js +7 -11
- package/dist/template/zod-converter.js +173 -348
- package/dist/testing/_relation-graph.js +18 -37
- package/dist/testing/bootstrap.js +5 -8
- package/dist/testing/data-explorer.js +34 -78
- package/dist/testing/dev-test-routes.js +54 -60
- package/dist/testing/dev-vitest-manager.js +33 -84
- package/dist/testing/faker-mappings.js +3 -4
- package/dist/testing/fixture-generator.d.ts +2 -1
- package/dist/testing/fixture-generator.d.ts.map +1 -1
- package/dist/testing/fixture-generator.js +159 -321
- package/dist/testing/fixture-loader.js +2 -2
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +124 -227
- package/dist/testing/global-setup.d.ts.map +1 -1
- package/dist/testing/global-setup.js +29 -17
- package/dist/testing/index.js +1 -2
- package/dist/testing/naite-vitest-reporter.js +2 -3
- package/dist/testing/parallel-db-manager.js +5 -3
- package/dist/testing/vitest-helpers.d.ts.map +1 -1
- package/dist/testing/vitest-helpers.js +15 -12
- package/dist/types/types.d.ts +14 -14
- package/dist/types/types.js +27 -50
- package/dist/ui/ai-api.js +6 -11
- package/dist/ui/ai-client.js +86 -134
- package/dist/ui/api.js +99 -195
- package/dist/ui/cdd-service.js +78 -130
- package/dist/ui/cdd-types.js +1 -1
- package/dist/ui-web/assets/{index-Df8q-fhb.js → index-DFStGyd0.js} +49 -49
- package/dist/ui-web/assets/index-Dx4ap5i4.css +1 -0
- package/dist/ui-web/index.html +2 -2
- package/dist/utils/async-utils.js +13 -25
- package/dist/utils/class-name.js +3 -4
- package/dist/utils/console-util.js +11 -26
- package/dist/utils/controller.d.ts.map +1 -1
- package/dist/utils/controller.js +14 -12
- package/dist/utils/esm-utils.js +5 -8
- package/dist/utils/formatter.js +10 -22
- package/dist/utils/fs-utils.js +14 -25
- package/dist/utils/lodash-able.js +3 -4
- package/dist/utils/model.js +7 -14
- package/dist/utils/object-utils.js +41 -73
- package/dist/utils/path-utils.js +5 -9
- package/dist/utils/process-utils.js +4 -7
- package/dist/utils/sql-parser.js +6 -13
- package/dist/utils/type-utils.js +16 -26
- package/dist/utils/utils.js +18 -40
- package/dist/utils/zod-error.js +9 -16
- package/dist/vector/chunking.js +24 -37
- package/dist/vector/config.js +2 -2
- package/dist/vector/embedding.js +8 -19
- package/dist/vector/index.js +1 -2
- package/dist/vector/types.js +1 -1
- package/package.json +7 -7
- package/src/__tests__/env.test.ts +127 -0
- package/src/api/__tests__/config.test.ts +10 -1
- package/src/api/config.ts +4 -12
- package/src/api/sonamu.ts +14 -4
- package/src/bin/__tests__/migrate-targets.test.ts +28 -0
- package/src/bin/__tests__/test-command.test.ts +82 -1
- package/src/bin/cli.ts +9 -18
- package/src/bin/fixture.ts +5 -4
- package/src/bin/migrate-targets.ts +7 -0
- package/src/bin/test-command.ts +2 -2
- package/src/database/__tests__/db.test.ts +175 -0
- package/src/database/db.ts +193 -71
- package/src/dict/en.ts +2 -0
- package/src/dict/ko.ts +2 -0
- package/src/env.ts +123 -0
- package/src/migration/__tests__/migrator.test.ts +149 -0
- package/src/migration/migrator.ts +74 -17
- package/src/migration/slack-confirm.ts +21 -0
- package/src/skills/sonamu/database.md +1 -1
- package/src/skills/sonamu/entity-basic.md +31 -0
- package/src/skills/sonamu/puri.md +22 -0
- package/src/skills/sonamu/testing-devrunner.md +1 -1
- package/src/skills/sonamu/upsert.md +53 -6
- package/src/stream/ws-telemetry-memory.ts +2 -2
- package/src/testing/fixture-generator.ts +2 -1
- package/src/testing/fixture-manager.ts +3 -4
- package/src/testing/global-setup.ts +42 -18
- package/src/testing/vitest-helpers.ts +14 -0
- package/src/utils/controller.ts +14 -7
- package/tsdown.api.config.ts +6 -0
- package/dist/_virtual/rolldown_runtime.js +0 -39
- package/dist/ui-web/assets/index-D4rYm-Xz.css +0 -1
|
@@ -3,7 +3,6 @@ import { getZodObjectFromApi, init_code_converters } from "../../api/code-conver
|
|
|
3
3
|
import { Template, init_template } from "../template.js";
|
|
4
4
|
import { z as z$1 } from "zod";
|
|
5
5
|
import qs from "qs";
|
|
6
|
-
|
|
7
6
|
//#region src/template/implementations/generated_http.template.ts
|
|
8
7
|
init_code_converters();
|
|
9
8
|
init_sonamu();
|
|
@@ -24,17 +23,14 @@ var Template__generated_http = class extends Template {
|
|
|
24
23
|
const lines = await Promise.all(apis.map(async (api) => {
|
|
25
24
|
const reqObject = this.resolveApiParams(api, types);
|
|
26
25
|
const dataLines = await (async () => {
|
|
27
|
-
if ((api.options.httpMethod ?? "GET") === "GET") {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
body: ["", JSON.stringify(reqObject, null, 2)]
|
|
36
|
-
};
|
|
37
|
-
}
|
|
26
|
+
if ((api.options.httpMethod ?? "GET") === "GET") return {
|
|
27
|
+
querystring: [qs.stringify(reqObject, { encode: false }).split("&").join("\n &")],
|
|
28
|
+
body: []
|
|
29
|
+
};
|
|
30
|
+
else return {
|
|
31
|
+
querystring: [],
|
|
32
|
+
body: ["", JSON.stringify(reqObject, null, 2)]
|
|
33
|
+
};
|
|
38
34
|
})();
|
|
39
35
|
return [
|
|
40
36
|
[`${api.options.httpMethod ?? "GET"} {{baseUrl}}${prefix}${api.path}`, ...dataLines.querystring].join("\n ?"),
|
|
@@ -50,67 +46,44 @@ var Template__generated_http = class extends Template {
|
|
|
50
46
|
};
|
|
51
47
|
}
|
|
52
48
|
zodTypeToReqDefault(zodType, name) {
|
|
53
|
-
if (zodType instanceof z$1.ZodObject)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (name
|
|
59
|
-
return "2000-01-01";
|
|
60
|
-
} else {
|
|
61
|
-
return name.toUpperCase();
|
|
62
|
-
}
|
|
63
|
-
} else if (zodType instanceof z$1.ZodNumber) {
|
|
64
|
-
if (name === "num") {
|
|
65
|
-
return 24;
|
|
66
|
-
}
|
|
49
|
+
if (zodType instanceof z$1.ZodObject) return Object.fromEntries(Object.keys(zodType.shape).map((key) => [key, this.zodTypeToReqDefault(zodType.shape[key], key)]));
|
|
50
|
+
else if (zodType instanceof z$1.ZodArray) return [this.zodTypeToReqDefault(zodType.element, name)];
|
|
51
|
+
else if (zodType instanceof z$1.core.$ZodString) if (name.endsWith("_at") || name.endsWith("_date") || name === "range") return "2000-01-01";
|
|
52
|
+
else return name.toUpperCase();
|
|
53
|
+
else if (zodType instanceof z$1.ZodNumber) {
|
|
54
|
+
if (name === "num") return 24;
|
|
67
55
|
const minValue = zodType.minValue ?? 0;
|
|
68
56
|
return minValue > Number.MIN_SAFE_INTEGER ? minValue : 0;
|
|
69
|
-
} else if (zodType instanceof z$1.ZodBoolean)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
} else if (zodType instanceof z$1.ZodUnknown) {
|
|
80
|
-
return "unknown";
|
|
81
|
-
} else if (zodType instanceof z$1.ZodTuple) {
|
|
82
|
-
return zodType.def.items.map((item) => this.zodTypeToReqDefault(item, name));
|
|
83
|
-
} else if (zodType instanceof z$1.ZodDate) {
|
|
84
|
-
return "2000-01-01";
|
|
85
|
-
} else if (zodType instanceof z$1.ZodLiteral) {
|
|
86
|
-
return zodType.value;
|
|
87
|
-
} else if (zodType instanceof z$1.ZodRecord || zodType instanceof z$1.ZodMap) {
|
|
57
|
+
} else if (zodType instanceof z$1.ZodBoolean) return false;
|
|
58
|
+
else if (zodType instanceof z$1.ZodEnum) return zodType.options[0];
|
|
59
|
+
else if (zodType instanceof z$1.ZodOptional) return this.zodTypeToReqDefault(zodType.def.innerType, name);
|
|
60
|
+
else if (zodType instanceof z$1.ZodNullable) return null;
|
|
61
|
+
else if (zodType instanceof z$1.ZodUnion) return this.zodTypeToReqDefault(zodType.def.options[0], name);
|
|
62
|
+
else if (zodType instanceof z$1.ZodUnknown) return "unknown";
|
|
63
|
+
else if (zodType instanceof z$1.ZodTuple) return zodType.def.items.map((item) => this.zodTypeToReqDefault(item, name));
|
|
64
|
+
else if (zodType instanceof z$1.ZodDate) return "2000-01-01";
|
|
65
|
+
else if (zodType instanceof z$1.ZodLiteral) return zodType.value;
|
|
66
|
+
else if (zodType instanceof z$1.ZodRecord || zodType instanceof z$1.ZodMap) {
|
|
88
67
|
const kvDef = zodType.def;
|
|
89
68
|
const key = this.zodTypeToReqDefault(kvDef.keyType, name);
|
|
90
69
|
const value = this.zodTypeToReqDefault(kvDef.valueType, name);
|
|
91
70
|
return { [key]: value };
|
|
92
|
-
} else if (zodType instanceof z$1.ZodSet)
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
} else if (zodType instanceof z$1.ZodDefault) {
|
|
97
|
-
return this.zodTypeToReqDefault(zodType.def.innerType, name);
|
|
98
|
-
} else {
|
|
99
|
-
return `unknown-${zodType.type}`;
|
|
100
|
-
}
|
|
71
|
+
} else if (zodType instanceof z$1.ZodSet) return [this.zodTypeToReqDefault(zodType.def.valueType, name)];
|
|
72
|
+
else if (zodType instanceof z$1.ZodIntersection) return this.zodTypeToReqDefault(zodType.def.right, name);
|
|
73
|
+
else if (zodType instanceof z$1.ZodDefault) return this.zodTypeToReqDefault(zodType.def.innerType, name);
|
|
74
|
+
else return `unknown-${zodType.type}`;
|
|
101
75
|
}
|
|
102
76
|
resolveApiParams(api, references) {
|
|
103
77
|
const reqType = getZodObjectFromApi(api, references);
|
|
104
78
|
try {
|
|
105
|
-
|
|
106
|
-
return def;
|
|
79
|
+
return this.zodTypeToReqDefault(reqType, "unknownName");
|
|
107
80
|
} catch (error) {
|
|
108
81
|
console.error(error);
|
|
109
82
|
throw new Error(`Invalid zod type detected on ${api.modelName}:${api.methodName}`, { cause: error });
|
|
110
83
|
}
|
|
111
84
|
}
|
|
112
85
|
};
|
|
113
|
-
|
|
114
86
|
//#endregion
|
|
115
87
|
export { Template__generated_http };
|
|
116
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkX2h0dHAudGVtcGxhdGUuanMiLCJuYW1lcyI6WyJ6Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9nZW5lcmF0ZWRfaHR0cC50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcXMgZnJvbSBcInFzXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyBnZXRab2RPYmplY3RGcm9tQXBpIH0gZnJvbSBcIi4uLy4uL2FwaS9jb2RlLWNvbnZlcnRlcnNcIjtcbmltcG9ydCB7IHR5cGUgRXh0ZW5kZWRBcGkgfSBmcm9tIFwiLi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZF9odHRwIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcImdlbmVyYXRlZF9odHRwXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aCgpIHtcbiAgICBjb25zdCB7IGRpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgc29uYW11LmdlbmVyYXRlZC5odHRwYCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHN5bmNlcjogeyB0eXBlcywgYXBpcyB9LFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGFwaToge1xuICAgICAgICAgIHJvdXRlOiB7IHByZWZpeCB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9ID0gU29uYW11O1xuXG4gICAgY29uc3QgbGluZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGFwaXMubWFwKGFzeW5jIChhcGkpID0+IHtcbiAgICAgICAgY29uc3QgcmVxT2JqZWN0ID0gdGhpcy5yZXNvbHZlQXBpUGFyYW1zKGFwaSwgdHlwZXMpO1xuXG4gICAgICAgIGNvbnN0IGRhdGFMaW5lcyA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKChhcGkub3B0aW9ucy5odHRwTWV0aG9kID8/IFwiR0VUXCIpID09PSBcIkdFVFwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBxdWVyeXN0cmluZzogW3FzLnN0cmluZ2lmeShyZXFPYmplY3QsIHsgZW5jb2RlOiBmYWxzZSB9KS5zcGxpdChcIiZcIikuam9pbihcIlxcblxcdCZcIildLFxuICAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHF1ZXJ5c3RyaW5nOiBbXSxcbiAgICAgICAgICAgICAgYm9keTogW1wiXCIsIEpTT04uc3RyaW5naWZ5KHJlcU9iamVjdCwgbnVsbCwgMildLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBbXG4gICAgICAgICAgICBgJHthcGkub3B0aW9ucy5odHRwTWV0aG9kID8/IFwiR0VUXCJ9IHt7YmFzZVVybH19JHtwcmVmaXh9JHthcGkucGF0aH1gLFxuICAgICAgICAgICAgLi4uZGF0YUxpbmVzLnF1ZXJ5c3RyaW5nLFxuICAgICAgICAgIF0uam9pbihcIlxcblxcdD9cIiksXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHthcGkub3B0aW9ucy5jb250ZW50VHlwZSA/PyBcImFwcGxpY2F0aW9uL2pzb25cIn1gLFxuICAgICAgICAgIC4uLmRhdGFMaW5lcy5ib2R5LFxuICAgICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCgpLFxuICAgICAgYm9keTogbGluZXMuam9pbihcIlxcblxcbiMjI1xcblxcblwiKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgY3VzdG9tSGVhZGVyczogW1wiIyBAZ2VuZXJhdGVkXCIsIFwiIyDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIl0sXG4gICAgfTtcbiAgfVxuXG4gIHpvZFR5cGVUb1JlcURlZmF1bHQoem9kVHlwZTogei5ab2RUeXBlLCBuYW1lOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3Qua2V5cyh6b2RUeXBlLnNoYXBlKS5tYXAoKGtleSkgPT4gW1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoem9kVHlwZS5zaGFwZVtrZXldLCBrZXkpLFxuICAgICAgICBdKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RBcnJheSkge1xuICAgICAgcmV0dXJuIFt0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoKHpvZFR5cGUgYXMgei5ab2RBcnJheTx6LlpvZFR5cGU+KS5lbGVtZW50LCBuYW1lKV07XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5jb3JlLiRab2RTdHJpbmcpIHtcbiAgICAgIC8vIE5PVEU6IHouWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VmOuptCB6LnVybCgpLCB6LmVtYWlsKCkg65Ox7J2YIO2DgOyeheyXkOyEnCDrrLjsoJzqsIAg7IOd6riw66+A66GcIHouY29yZS4kWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VqFxuICAgICAgaWYgKG5hbWUuZW5kc1dpdGgoXCJfYXRcIikgfHwgbmFtZS5lbmRzV2l0aChcIl9kYXRlXCIpIHx8IG5hbWUgPT09IFwicmFuZ2VcIikge1xuICAgICAgICByZXR1cm4gXCIyMDAwLTAxLTAxXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyKSB7XG4gICAgICBpZiAobmFtZSA9PT0gXCJudW1cIikge1xuICAgICAgICByZXR1cm4gMjQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pblZhbHVlID0gem9kVHlwZS5taW5WYWx1ZSA/PyAwO1xuICAgICAgcmV0dXJuIG1pblZhbHVlID4gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgPyBtaW5WYWx1ZSA6IDA7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RFbnVtKSB7XG4gICAgICByZXR1cm4gem9kVHlwZS5vcHRpb25zWzBdO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT3B0aW9uYWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoKHpvZFR5cGUgYXMgei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLCBuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy56b2RUeXBlVG9SZXFEZWZhdWx0KCh6b2RUeXBlIGFzIHouWm9kVW5pb248ei5ab2RUeXBlW10+KS5kZWYub3B0aW9uc1swXSwgbmFtZSk7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmtub3duKSB7XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RUdXBsZSkge1xuICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gWm9kVHVwbGUg7YOA7J6FIOyCrOyaqVxuICAgICAgcmV0dXJuIHpvZFR5cGUuZGVmLml0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoaXRlbSwgbmFtZSkpO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGF0ZSkge1xuICAgICAgcmV0dXJuIFwiMjAwMC0wMS0wMVwiO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIHpvZFR5cGUudmFsdWU7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RSZWNvcmQgfHwgem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTWFwKSB7XG4gICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBab2RSZWNvcmQg7YOA7J6FIOyCrOyaqVxuICAgICAgY29uc3Qga3ZEZWYgPSAoem9kVHlwZSBhcyB6LlpvZFJlY29yZDxhbnksIHouWm9kVHlwZT4gfCB6LlpvZE1hcDx6LlpvZFR5cGUsIHouWm9kVHlwZT4pLmRlZjtcbiAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIFpvZEludGVyc2VjdGlvbiDtg4DsnoUg7IKs7JqpXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoa3ZEZWYua2V5VHlwZSwgbmFtZSkgYXMgYW55O1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoa3ZEZWYudmFsdWVUeXBlLCBuYW1lKTtcbiAgICAgIHJldHVybiB7IFtrZXldOiB2YWx1ZSB9O1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU2V0KSB7XG4gICAgICByZXR1cm4gW3RoaXMuem9kVHlwZVRvUmVxRGVmYXVsdCgoem9kVHlwZSBhcyB6LlpvZFNldDx6LlpvZFR5cGU+KS5kZWYudmFsdWVUeXBlLCBuYW1lKV07XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RJbnRlcnNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoXG4gICAgICAgICh6b2RUeXBlIGFzIHouWm9kSW50ZXJzZWN0aW9uPHouWm9kVHlwZSwgei5ab2RUeXBlPikuZGVmLnJpZ2h0LFxuICAgICAgICBuYW1lLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZERlZmF1bHQpIHtcbiAgICAgIHJldHVybiB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoKHpvZFR5cGUgYXMgei5ab2REZWZhdWx0PHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyh6b2RUeXBlKTtcbiAgICAgIHJldHVybiBgdW5rbm93bi0ke3pvZFR5cGUudHlwZX1gO1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVBcGlQYXJhbXMoXG4gICAgYXBpOiBFeHRlbmRlZEFwaSxcbiAgICByZWZlcmVuY2VzOiB7IFt0eXBlTmFtZTogc3RyaW5nXTogei5ab2RUeXBlIH0sXG4gICk6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9IHtcbiAgICBjb25zdCByZXFUeXBlID0gZ2V0Wm9kT2JqZWN0RnJvbUFwaShhcGksIHJlZmVyZW5jZXMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWYgPSB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQocmVxVHlwZSwgXCJ1bmtub3duTmFtZVwiKSBhcyB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGRlZjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgem9kIHR5cGUgZGV0ZWN0ZWQgb24gJHthcGkubW9kZWxOYW1lfToke2FwaS5tZXRob2ROYW1lfWAsIHtcbiAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7c0JBR2dFO2FBRXRCO2VBQ0g7QUFFdkMsSUFBYSwyQkFBYixjQUE4QyxTQUFTO0NBQ3JELGNBQWM7QUFDWixRQUFNLGlCQUFpQjs7Q0FHekIsbUJBQW1CO0VBQ2pCLE1BQU0sRUFBRSxRQUFRLE9BQU8sT0FBTztBQUU5QixTQUFPO0dBQ0wsUUFBUSxHQUFHLElBQUk7R0FDZixNQUFNO0dBQ1A7O0NBR0gsTUFBTSxTQUFTO0VBQ2IsTUFBTSxFQUNKLFFBQVEsRUFBRSxPQUFPLFFBQ2pCLFFBQVEsRUFDTixLQUFLLEVBQ0gsT0FBTyxFQUFFLGlCQUdYO0VBRUosTUFBTSxRQUFRLE1BQU0sUUFBUSxJQUMxQixLQUFLLElBQUksT0FBTyxRQUFRO0dBQ3RCLE1BQU0sWUFBWSxLQUFLLGlCQUFpQixLQUFLLE1BQU07R0FFbkQsTUFBTSxZQUFZLE9BQU8sWUFBWTtBQUNuQyxTQUFLLElBQUksUUFBUSxjQUFjLFdBQVcsT0FBTztBQUMvQyxZQUFPO01BQ0wsYUFBYSxDQUFDLEdBQUcsVUFBVSxXQUFXLEVBQUUsUUFBUSxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLE9BQVEsQ0FBQztNQUNsRixNQUFNLEVBQUU7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
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkX2h0dHAudGVtcGxhdGUuanMiLCJuYW1lcyI6WyJ6Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9nZW5lcmF0ZWRfaHR0cC50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcXMgZnJvbSBcInFzXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyBnZXRab2RPYmplY3RGcm9tQXBpIH0gZnJvbSBcIi4uLy4uL2FwaS9jb2RlLWNvbnZlcnRlcnNcIjtcbmltcG9ydCB7IHR5cGUgRXh0ZW5kZWRBcGkgfSBmcm9tIFwiLi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZF9odHRwIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcImdlbmVyYXRlZF9odHRwXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aCgpIHtcbiAgICBjb25zdCB7IGRpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgc29uYW11LmdlbmVyYXRlZC5odHRwYCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHN5bmNlcjogeyB0eXBlcywgYXBpcyB9LFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGFwaToge1xuICAgICAgICAgIHJvdXRlOiB7IHByZWZpeCB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9ID0gU29uYW11O1xuXG4gICAgY29uc3QgbGluZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGFwaXMubWFwKGFzeW5jIChhcGkpID0+IHtcbiAgICAgICAgY29uc3QgcmVxT2JqZWN0ID0gdGhpcy5yZXNvbHZlQXBpUGFyYW1zKGFwaSwgdHlwZXMpO1xuXG4gICAgICAgIGNvbnN0IGRhdGFMaW5lcyA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKChhcGkub3B0aW9ucy5odHRwTWV0aG9kID8/IFwiR0VUXCIpID09PSBcIkdFVFwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBxdWVyeXN0cmluZzogW3FzLnN0cmluZ2lmeShyZXFPYmplY3QsIHsgZW5jb2RlOiBmYWxzZSB9KS5zcGxpdChcIiZcIikuam9pbihcIlxcblxcdCZcIildLFxuICAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHF1ZXJ5c3RyaW5nOiBbXSxcbiAgICAgICAgICAgICAgYm9keTogW1wiXCIsIEpTT04uc3RyaW5naWZ5KHJlcU9iamVjdCwgbnVsbCwgMildLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBbXG4gICAgICAgICAgICBgJHthcGkub3B0aW9ucy5odHRwTWV0aG9kID8/IFwiR0VUXCJ9IHt7YmFzZVVybH19JHtwcmVmaXh9JHthcGkucGF0aH1gLFxuICAgICAgICAgICAgLi4uZGF0YUxpbmVzLnF1ZXJ5c3RyaW5nLFxuICAgICAgICAgIF0uam9pbihcIlxcblxcdD9cIiksXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHthcGkub3B0aW9ucy5jb250ZW50VHlwZSA/PyBcImFwcGxpY2F0aW9uL2pzb25cIn1gLFxuICAgICAgICAgIC4uLmRhdGFMaW5lcy5ib2R5LFxuICAgICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCgpLFxuICAgICAgYm9keTogbGluZXMuam9pbihcIlxcblxcbiMjI1xcblxcblwiKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgY3VzdG9tSGVhZGVyczogW1wiIyBAZ2VuZXJhdGVkXCIsIFwiIyDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIl0sXG4gICAgfTtcbiAgfVxuXG4gIHpvZFR5cGVUb1JlcURlZmF1bHQoem9kVHlwZTogei5ab2RUeXBlLCBuYW1lOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3Qua2V5cyh6b2RUeXBlLnNoYXBlKS5tYXAoKGtleSkgPT4gW1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoem9kVHlwZS5zaGFwZVtrZXldLCBrZXkpLFxuICAgICAgICBdKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RBcnJheSkge1xuICAgICAgcmV0dXJuIFt0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoKHpvZFR5cGUgYXMgei5ab2RBcnJheTx6LlpvZFR5cGU+KS5lbGVtZW50LCBuYW1lKV07XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5jb3JlLiRab2RTdHJpbmcpIHtcbiAgICAgIC8vIE5PVEU6IHouWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VmOuptCB6LnVybCgpLCB6LmVtYWlsKCkg65Ox7J2YIO2DgOyeheyXkOyEnCDrrLjsoJzqsIAg7IOd6riw66+A66GcIHouY29yZS4kWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VqFxuICAgICAgaWYgKG5hbWUuZW5kc1dpdGgoXCJfYXRcIikgfHwgbmFtZS5lbmRzV2l0aChcIl9kYXRlXCIpIHx8IG5hbWUgPT09IFwicmFuZ2VcIikge1xuICAgICAgICByZXR1cm4gXCIyMDAwLTAxLTAxXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyKSB7XG4gICAgICBpZiAobmFtZSA9PT0gXCJudW1cIikge1xuICAgICAgICByZXR1cm4gMjQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pblZhbHVlID0gem9kVHlwZS5taW5WYWx1ZSA/PyAwO1xuICAgICAgcmV0dXJuIG1pblZhbHVlID4gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgPyBtaW5WYWx1ZSA6IDA7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RFbnVtKSB7XG4gICAgICByZXR1cm4gem9kVHlwZS5vcHRpb25zWzBdO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT3B0aW9uYWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoKHpvZFR5cGUgYXMgei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLCBuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy56b2RUeXBlVG9SZXFEZWZhdWx0KCh6b2RUeXBlIGFzIHouWm9kVW5pb248ei5ab2RUeXBlW10+KS5kZWYub3B0aW9uc1swXSwgbmFtZSk7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmtub3duKSB7XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RUdXBsZSkge1xuICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gWm9kVHVwbGUg7YOA7J6FIOyCrOyaqVxuICAgICAgcmV0dXJuIHpvZFR5cGUuZGVmLml0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoaXRlbSwgbmFtZSkpO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGF0ZSkge1xuICAgICAgcmV0dXJuIFwiMjAwMC0wMS0wMVwiO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIHpvZFR5cGUudmFsdWU7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RSZWNvcmQgfHwgem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTWFwKSB7XG4gICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBab2RSZWNvcmQg7YOA7J6FIOyCrOyaqVxuICAgICAgY29uc3Qga3ZEZWYgPSAoem9kVHlwZSBhcyB6LlpvZFJlY29yZDxhbnksIHouWm9kVHlwZT4gfCB6LlpvZE1hcDx6LlpvZFR5cGUsIHouWm9kVHlwZT4pLmRlZjtcbiAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIFpvZEludGVyc2VjdGlvbiDtg4DsnoUg7IKs7JqpXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoa3ZEZWYua2V5VHlwZSwgbmFtZSkgYXMgYW55O1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoa3ZEZWYudmFsdWVUeXBlLCBuYW1lKTtcbiAgICAgIHJldHVybiB7IFtrZXldOiB2YWx1ZSB9O1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU2V0KSB7XG4gICAgICByZXR1cm4gW3RoaXMuem9kVHlwZVRvUmVxRGVmYXVsdCgoem9kVHlwZSBhcyB6LlpvZFNldDx6LlpvZFR5cGU+KS5kZWYudmFsdWVUeXBlLCBuYW1lKV07XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RJbnRlcnNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoXG4gICAgICAgICh6b2RUeXBlIGFzIHouWm9kSW50ZXJzZWN0aW9uPHouWm9kVHlwZSwgei5ab2RUeXBlPikuZGVmLnJpZ2h0LFxuICAgICAgICBuYW1lLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZERlZmF1bHQpIHtcbiAgICAgIHJldHVybiB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoKHpvZFR5cGUgYXMgei5ab2REZWZhdWx0PHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyh6b2RUeXBlKTtcbiAgICAgIHJldHVybiBgdW5rbm93bi0ke3pvZFR5cGUudHlwZX1gO1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVBcGlQYXJhbXMoXG4gICAgYXBpOiBFeHRlbmRlZEFwaSxcbiAgICByZWZlcmVuY2VzOiB7IFt0eXBlTmFtZTogc3RyaW5nXTogei5ab2RUeXBlIH0sXG4gICk6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9IHtcbiAgICBjb25zdCByZXFUeXBlID0gZ2V0Wm9kT2JqZWN0RnJvbUFwaShhcGksIHJlZmVyZW5jZXMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWYgPSB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQocmVxVHlwZSwgXCJ1bmtub3duTmFtZVwiKSBhcyB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGRlZjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgem9kIHR5cGUgZGV0ZWN0ZWQgb24gJHthcGkubW9kZWxOYW1lfToke2FwaS5tZXRob2ROYW1lfWAsIHtcbiAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztxQkFHK0Q7WUFFdEI7Y0FDSDtBQUV0QyxJQUFhLDJCQUFiLGNBQThDLFNBQVM7Q0FDckQsY0FBYztFQUNaLE1BQU0sZ0JBQWdCO0NBQ3hCO0NBRUEsbUJBQW1CO0VBQ2pCLE1BQU0sRUFBRSxRQUFRLE9BQU8sT0FBTztFQUU5QixPQUFPO0dBQ0wsUUFBUSxHQUFHLElBQUk7R0FDZixNQUFNO0VBQ1I7Q0FDRjtDQUVBLE1BQU0sU0FBUztFQUNiLE1BQU0sRUFDSixRQUFRLEVBQUUsT0FBTyxRQUNqQixRQUFRLEVBQ04sS0FBSyxFQUNILE9BQU8sRUFBRSxpQkFHWDtFQUVKLE1BQU0sUUFBUSxNQUFNLFFBQVEsSUFDMUIsS0FBSyxJQUFJLE9BQU8sUUFBUTtHQUN0QixNQUFNLFlBQVksS0FBSyxpQkFBaUIsS0FBSyxLQUFLO0dBRWxELE1BQU0sWUFBWSxPQUFPLFlBQVk7SUFDbkMsS0FBSyxJQUFJLFFBQVEsY0FBYyxXQUFXLE9BQ3hDLE9BQU87S0FDTCxhQUFhLENBQUMsR0FBRyxVQUFVLFdBQVcsRUFBRSxRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU8sQ0FBQztLQUNq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
|
|
@@ -6,7 +6,6 @@ import { Template, init_template } from "../template.js";
|
|
|
6
6
|
import inflection from "inflection";
|
|
7
7
|
import { unique } from "radashi";
|
|
8
8
|
import assert from "assert";
|
|
9
|
-
|
|
10
9
|
//#region src/template/implementations/generated_sso.template.ts
|
|
11
10
|
init_api();
|
|
12
11
|
init_entity_manager();
|
|
@@ -38,14 +37,12 @@ var Template__generated_sso = class extends Template {
|
|
|
38
37
|
};
|
|
39
38
|
}
|
|
40
39
|
render() {
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
const targetEntities = entities.filter((entity) => entity.parentId === undefined && Object.keys(entity.subsets).length > 0);
|
|
44
|
-
const sourceCodes = targetEntities.flatMap((entity) => {
|
|
40
|
+
const entities = EntityManager.getAllIds().map((id) => EntityManager.get(id));
|
|
41
|
+
const sourceCodes = entities.filter((entity) => entity.parentId === void 0 && Object.keys(entity.subsets).length > 0).flatMap((entity) => {
|
|
45
42
|
const subsetKeys = Object.keys(entity.subsets);
|
|
46
43
|
const subsetKeyTypeName = `${entity.names.module}SubsetKey`;
|
|
47
44
|
const entityCamelName = inflection.camelize(entity.id, true);
|
|
48
|
-
|
|
45
|
+
return [{
|
|
49
46
|
label: `SubsetQuery: ${entity.id}`,
|
|
50
47
|
lines: [
|
|
51
48
|
`export const ${entityCamelName}SubsetQueries = {`,
|
|
@@ -56,8 +53,7 @@ var Template__generated_sso = class extends Template {
|
|
|
56
53
|
""
|
|
57
54
|
],
|
|
58
55
|
importKeys: []
|
|
59
|
-
}
|
|
60
|
-
const puriLoaderQuery = {
|
|
56
|
+
}, {
|
|
61
57
|
label: `LoaderQuery: ${entity.id}`,
|
|
62
58
|
lines: [
|
|
63
59
|
`export const ${entityCamelName}LoaderQueries = {`,
|
|
@@ -68,25 +64,16 @@ var Template__generated_sso = class extends Template {
|
|
|
68
64
|
""
|
|
69
65
|
],
|
|
70
66
|
importKeys: [subsetKeyTypeName]
|
|
71
|
-
};
|
|
72
|
-
return [puriSubsetQuery, puriLoaderQuery];
|
|
67
|
+
}];
|
|
73
68
|
});
|
|
74
69
|
const fkTypeSourceCode = this.getForeignKeyTypeSourceCode(entities);
|
|
75
|
-
if (fkTypeSourceCode)
|
|
76
|
-
sourceCodes.push(fkTypeSourceCode);
|
|
77
|
-
}
|
|
70
|
+
if (fkTypeSourceCode) sourceCodes.push(fkTypeSourceCode);
|
|
78
71
|
const dbSchemaSourceCode = this.getDatabaseSchemaSourceCode(entities);
|
|
79
|
-
if (dbSchemaSourceCode)
|
|
80
|
-
sourceCodes.push(dbSchemaSourceCode);
|
|
81
|
-
}
|
|
72
|
+
if (dbSchemaSourceCode) sourceCodes.push(dbSchemaSourceCode);
|
|
82
73
|
const authUserTypeSourceCode = this.getAuthUserTypeSourceCode();
|
|
83
|
-
if (authUserTypeSourceCode)
|
|
84
|
-
sourceCodes.push(authUserTypeSourceCode);
|
|
85
|
-
}
|
|
74
|
+
if (authUserTypeSourceCode) sourceCodes.push(authUserTypeSourceCode);
|
|
86
75
|
const sourceCode = sourceCodes.reduce((result, ts) => {
|
|
87
|
-
if (ts === null)
|
|
88
|
-
return result;
|
|
89
|
-
}
|
|
76
|
+
if (ts === null) return result;
|
|
90
77
|
assert(result);
|
|
91
78
|
return {
|
|
92
79
|
lines: [
|
|
@@ -101,25 +88,20 @@ var Template__generated_sso = class extends Template {
|
|
|
101
88
|
lines: [],
|
|
102
89
|
importKeys: []
|
|
103
90
|
});
|
|
104
|
-
const body = sourceCode.lines.join("\n");
|
|
105
|
-
const isUsingManyToManyBaseSchema = body.includes("ManyToManyBaseSchema");
|
|
106
|
-
const sonamuImports = [
|
|
107
|
-
"PuriWrapper",
|
|
108
|
-
"DatabaseSchemaExtend",
|
|
109
|
-
"PuriLoaderQueries",
|
|
110
|
-
isUsingManyToManyBaseSchema ? "ManyToManyBaseSchema" : ""
|
|
111
|
-
].filter(Boolean).join(", ");
|
|
112
91
|
const customHeaders = [
|
|
113
92
|
"/**",
|
|
114
93
|
" * @generated",
|
|
115
94
|
" * 직접 수정하지 마세요.",
|
|
116
95
|
" */",
|
|
117
96
|
"",
|
|
118
|
-
`import { ${
|
|
97
|
+
`import { ${[
|
|
98
|
+
"PuriWrapper",
|
|
99
|
+
"DatabaseSchemaExtend",
|
|
100
|
+
"PuriLoaderQueries",
|
|
101
|
+
sourceCode.lines.join("\n").includes("ManyToManyBaseSchema") ? "ManyToManyBaseSchema" : ""
|
|
102
|
+
].filter(Boolean).join(", ")} } from "sonamu";`
|
|
119
103
|
];
|
|
120
|
-
if (this.hasAuthConfig()) {
|
|
121
|
-
customHeaders.push(`import type { User } from "better-auth";`);
|
|
122
|
-
}
|
|
104
|
+
if (this.hasAuthConfig()) customHeaders.push(`import type { User } from "better-auth";`);
|
|
123
105
|
return {
|
|
124
106
|
...this.getTargetAndPath(),
|
|
125
107
|
body: sourceCode.lines.join("\n"),
|
|
@@ -128,9 +110,7 @@ var Template__generated_sso = class extends Template {
|
|
|
128
110
|
};
|
|
129
111
|
}
|
|
130
112
|
getDatabaseSchemaSourceCode(entities) {
|
|
131
|
-
if (entities.length === 0)
|
|
132
|
-
return null;
|
|
133
|
-
}
|
|
113
|
+
if (entities.length === 0) return null;
|
|
134
114
|
const entitySchemaLines = entities.map((entity) => `${entity.table}: ${entity.id}BaseSchema;`);
|
|
135
115
|
const joinTables = unique(entities.flatMap((entity) => entity.props.filter(isManyToManyRelationProp).map((prop) => {
|
|
136
116
|
const fromTableKey = inflection.singularize(entity.table);
|
|
@@ -144,12 +124,9 @@ var Template__generated_sso = class extends Template {
|
|
|
144
124
|
toEntityId: toEntity.id
|
|
145
125
|
};
|
|
146
126
|
})), (joinTable) => joinTable.table);
|
|
147
|
-
const
|
|
148
|
-
const fkMetadataLines = entitiesWithFk.map((entity) => `${entity.table}: ${entity.id}ForeignKeys;`);
|
|
127
|
+
const fkMetadataLines = entities.filter((entity) => this.getForeignKeyColumns(entity).length > 0).map((entity) => `${entity.table}: ${entity.id}ForeignKeys;`);
|
|
149
128
|
const contextExtendLines = [];
|
|
150
|
-
if (this.hasAuthConfig()) {
|
|
151
|
-
contextExtendLines.push(``, ` export interface ContextExtend {`, ` user: SonamuUser | null;`, ` }`);
|
|
152
|
-
}
|
|
129
|
+
if (this.hasAuthConfig()) contextExtendLines.push(``, ` export interface ContextExtend {`, ` user: SonamuUser | null;`, ` }`);
|
|
153
130
|
return {
|
|
154
131
|
label: `DatabaseSchema`,
|
|
155
132
|
lines: [
|
|
@@ -176,31 +153,21 @@ var Template__generated_sso = class extends Template {
|
|
|
176
153
|
}
|
|
177
154
|
getForeignKeyColumns(entity) {
|
|
178
155
|
return entity.props.filter((prop) => {
|
|
179
|
-
if (isBelongsToOneRelationProp(prop))
|
|
180
|
-
|
|
181
|
-
}
|
|
182
|
-
if (isOneToOneRelationProp(prop) && prop.hasJoinColumn) {
|
|
183
|
-
return true;
|
|
184
|
-
}
|
|
156
|
+
if (isBelongsToOneRelationProp(prop)) return true;
|
|
157
|
+
if (isOneToOneRelationProp(prop) && prop.hasJoinColumn) return true;
|
|
185
158
|
return false;
|
|
186
159
|
}).map((prop) => `${prop.name}_id`);
|
|
187
160
|
}
|
|
188
161
|
getForeignKeyTypeSourceCode(entities) {
|
|
189
|
-
if (entities.length === 0)
|
|
190
|
-
return null;
|
|
191
|
-
}
|
|
162
|
+
if (entities.length === 0) return null;
|
|
192
163
|
const entitiesWithFk = entities.filter((entity) => this.getForeignKeyColumns(entity).length > 0);
|
|
193
|
-
if (entitiesWithFk.length === 0)
|
|
194
|
-
return null;
|
|
195
|
-
}
|
|
196
|
-
const fkTypeLines = entitiesWithFk.map((entity) => {
|
|
197
|
-
const fkColumns = this.getForeignKeyColumns(entity);
|
|
198
|
-
const fkTypeValue = fkColumns.map((col) => `"${col}"`).join(" | ");
|
|
199
|
-
return `export type ${entity.id}ForeignKeys = ${fkTypeValue};`;
|
|
200
|
-
});
|
|
164
|
+
if (entitiesWithFk.length === 0) return null;
|
|
201
165
|
return {
|
|
202
166
|
label: `ForeignKey Types`,
|
|
203
|
-
lines:
|
|
167
|
+
lines: entitiesWithFk.map((entity) => {
|
|
168
|
+
const fkTypeValue = this.getForeignKeyColumns(entity).map((col) => `"${col}"`).join(" | ");
|
|
169
|
+
return `export type ${entity.id}ForeignKeys = ${fkTypeValue};`;
|
|
170
|
+
}),
|
|
204
171
|
importKeys: []
|
|
205
172
|
};
|
|
206
173
|
}
|
|
@@ -210,35 +177,28 @@ var Template__generated_sso = class extends Template {
|
|
|
210
177
|
*/
|
|
211
178
|
getAuthUserTypeSourceCode() {
|
|
212
179
|
const authConfig = Sonamu.config.server?.auth;
|
|
213
|
-
if (!authConfig)
|
|
214
|
-
return null;
|
|
215
|
-
}
|
|
180
|
+
if (!authConfig) return null;
|
|
216
181
|
const additionalFields = authConfig?.user?.additionalFields;
|
|
217
|
-
if (!additionalFields || Object.keys(additionalFields).length === 0) {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
};
|
|
223
|
-
}
|
|
182
|
+
if (!additionalFields || Object.keys(additionalFields).length === 0) return {
|
|
183
|
+
label: "Auth User Type",
|
|
184
|
+
lines: ["export type SonamuUser = User;"],
|
|
185
|
+
importKeys: []
|
|
186
|
+
};
|
|
224
187
|
const importKeys = [];
|
|
225
|
-
const fieldLines = Object.entries(additionalFields).map(([key, value]) => {
|
|
226
|
-
const fieldConfig = value;
|
|
227
|
-
const isRequired = fieldConfig.required !== false;
|
|
228
|
-
let fieldType;
|
|
229
|
-
if (fieldConfig.sonamuType) {
|
|
230
|
-
fieldType = fieldConfig.sonamuType;
|
|
231
|
-
importKeys.push(fieldType);
|
|
232
|
-
} else {
|
|
233
|
-
fieldType = mapBetterAuthFieldType(fieldConfig.type);
|
|
234
|
-
}
|
|
235
|
-
return ` ${key}${isRequired ? "" : "?"}: ${fieldType};`;
|
|
236
|
-
});
|
|
237
188
|
return {
|
|
238
189
|
label: "Auth User Type",
|
|
239
190
|
lines: [
|
|
240
191
|
"export type SonamuUser = User & {",
|
|
241
|
-
...
|
|
192
|
+
...Object.entries(additionalFields).map(([key, value]) => {
|
|
193
|
+
const fieldConfig = value;
|
|
194
|
+
const isRequired = fieldConfig.required !== false;
|
|
195
|
+
let fieldType;
|
|
196
|
+
if (fieldConfig.sonamuType) {
|
|
197
|
+
fieldType = fieldConfig.sonamuType;
|
|
198
|
+
importKeys.push(fieldType);
|
|
199
|
+
} else fieldType = mapBetterAuthFieldType(fieldConfig.type);
|
|
200
|
+
return ` ${key}${isRequired ? "" : "?"}: ${fieldType};`;
|
|
201
|
+
}),
|
|
242
202
|
"};"
|
|
243
203
|
],
|
|
244
204
|
importKeys
|
|
@@ -251,7 +211,7 @@ var Template__generated_sso = class extends Template {
|
|
|
251
211
|
return !!Sonamu.config.server?.auth;
|
|
252
212
|
}
|
|
253
213
|
};
|
|
254
|
-
|
|
255
214
|
//#endregion
|
|
256
215
|
export { Template__generated_sso };
|
|
257
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkX3Nzby50ZW1wbGF0ZS5qcyIsIm5hbWVzIjpbInNvdXJjZUNvZGVzOiBTb3VyY2VDb2RlW10iLCJwdXJpU3Vic2V0UXVlcnk6IFNvdXJjZUNvZGUiLCJwdXJpTG9hZGVyUXVlcnk6IFNvdXJjZUNvZGUiLCJjb250ZXh0RXh0ZW5kTGluZXM6IHN0cmluZ1tdIiwiaW1wb3J0S2V5czogc3RyaW5nW10iLCJmaWVsZFR5cGU6IHN0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkX3Nzby50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcblxuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wLFxuICBpc09uZVRvT25lUmVsYXRpb25Qcm9wLFxufSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyB0eXBlIFNvdXJjZUNvZGUgfSBmcm9tIFwiLi9nZW5lcmF0ZWQudGVtcGxhdGVcIjtcblxuLyoqXG4gKiBiZXR0ZXItYXV0aCBhZGRpdGlvbmFsRmllbGRz7J2YIHR5cGUg6rCS7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIG1hcEJldHRlckF1dGhGaWVsZFR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIFwiRGF0ZVwiO1xuICAgIGNhc2UgXCJzdHJpbmdbXVwiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nW11cIjtcbiAgICBjYXNlIFwibnVtYmVyW11cIjpcbiAgICAgIHJldHVybiBcIm51bWJlcltdXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZF9zc28gZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiZ2VuZXJhdGVkX3Nzb1wiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvYXBwbGljYXRpb25gLFxuICAgICAgcGF0aDogYHNvbmFtdS5nZW5lcmF0ZWQuc3NvLnRzYCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgY29uc3QgZW50aXRpZXMgPSBlbnRpdHlJZHMubWFwKChpZCkgPT4gRW50aXR5TWFuYWdlci5nZXQoaWQpKTtcblxuICAgIC8vIFN1YnNldFF1ZXJpZXMg7IOd7ISxIOuMgOyDgTog67aA66qoIOyXlO2LsO2LsOqwgCDsl4bqs6Ag7ISc67iM7IWL7J20IOyhtOyerFxuICAgIGNvbnN0IHRhcmdldEVudGl0aWVzID0gZW50aXRpZXMuZmlsdGVyKFxuICAgICAgKGVudGl0eSkgPT4gZW50aXR5LnBhcmVudElkID09PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpLmxlbmd0aCA+IDAsXG4gICAgKTtcblxuICAgIC8vIFN1YnNldFF1ZXJpZXMg7IOd7ISxXG4gICAgY29uc3Qgc291cmNlQ29kZXM6IFNvdXJjZUNvZGVbXSA9IHRhcmdldEVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4ge1xuICAgICAgY29uc3Qgc3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKTtcblxuICAgICAgY29uc3Qgc3Vic2V0S2V5VHlwZU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleWA7XG4gICAgICBjb25zdCBlbnRpdHlDYW1lbE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGVudGl0eS5pZCwgdHJ1ZSk7XG5cbiAgICAgIC8vIFB1cmkg6riw67CYIFN1YnNldFF1ZXJ5XG4gICAgICBjb25zdCBwdXJpU3Vic2V0UXVlcnk6IFNvdXJjZUNvZGUgPSB7XG4gICAgICAgIGxhYmVsOiBgU3Vic2V0UXVlcnk6ICR7ZW50aXR5LmlkfWAsXG4gICAgICAgIGxpbmVzOiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eUNhbWVsTmFtZX1TdWJzZXRRdWVyaWVzID0ge2AsXG4gICAgICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoXG4gICAgICAgICAgICAoc3Vic2V0S2V5KSA9PiBgJHtzdWJzZXRLZXl9OiAocWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4pID0+IHtcbiAgICAgICAgICAgICR7ZW50aXR5LmdldFB1cmlTdWJzZXRRdWVyeShzdWJzZXRLZXkpfTtcbiAgICAgICAgICB9LGAsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBgfTtgLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgIF0sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfTtcblxuICAgICAgLy8gUHVyaSDquLDrsJggU3Vic2V0TG9hZGVyc1F1ZXJ5XG4gICAgICBjb25zdCBwdXJpTG9hZGVyUXVlcnk6IFNvdXJjZUNvZGUgPSB7XG4gICAgICAgIGxhYmVsOiBgTG9hZGVyUXVlcnk6ICR7ZW50aXR5LmlkfWAsXG4gICAgICAgIGxpbmVzOiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eUNhbWVsTmFtZX1Mb2FkZXJRdWVyaWVzID0ge2AsXG4gICAgICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke3N1YnNldEtleX06ICR7ZW50aXR5LmdldFB1cmlMb2FkZXJRdWVyeShzdWJzZXRLZXkpfSxgO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGB9IGFzIGNvbnN0IHNhdGlzZmllcyBQdXJpTG9hZGVyUXVlcmllczwke3N1YnNldEtleVR5cGVOYW1lfT47YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICBdLFxuICAgICAgICBpbXBvcnRLZXlzOiBbc3Vic2V0S2V5VHlwZU5hbWVdLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFtwdXJpU3Vic2V0UXVlcnksIHB1cmlMb2FkZXJRdWVyeV07XG4gICAgfSk7XG5cbiAgICAvLyBGb3JlaWduS2V5IO2DgOyehSDsg53shLFcbiAgICBjb25zdCBma1R5cGVTb3VyY2VDb2RlID0gdGhpcy5nZXRGb3JlaWduS2V5VHlwZVNvdXJjZUNvZGUoZW50aXRpZXMpO1xuICAgIGlmIChma1R5cGVTb3VyY2VDb2RlKSB7XG4gICAgICBzb3VyY2VDb2Rlcy5wdXNoKGZrVHlwZVNvdXJjZUNvZGUpO1xuICAgIH1cblxuICAgIC8vIERhdGFiYXNlU2NoZW1hIOyDneyEsVxuICAgIGNvbnN0IGRiU2NoZW1hU291cmNlQ29kZSA9IHRoaXMuZ2V0RGF0YWJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0aWVzKTtcbiAgICBpZiAoZGJTY2hlbWFTb3VyY2VDb2RlKSB7XG4gICAgICBzb3VyY2VDb2Rlcy5wdXNoKGRiU2NoZW1hU291cmNlQ29kZSk7XG4gICAgfVxuXG4gICAgLy8gQXV0aCBVc2VyIO2DgOyehSDsg53shLFcbiAgICBjb25zdCBhdXRoVXNlclR5cGVTb3VyY2VDb2RlID0gdGhpcy5nZXRBdXRoVXNlclR5cGVTb3VyY2VDb2RlKCk7XG4gICAgaWYgKGF1dGhVc2VyVHlwZVNvdXJjZUNvZGUpIHtcbiAgICAgIHNvdXJjZUNvZGVzLnB1c2goYXV0aFVzZXJUeXBlU291cmNlQ29kZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlQ29kZSA9IHNvdXJjZUNvZGVzLnJlZHVjZShcbiAgICAgIChyZXN1bHQsIHRzKSA9PiB7XG4gICAgICAgIGlmICh0cyA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KHJlc3VsdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZXM6IFsuLi5yZXN1bHQubGluZXMsIGAvLyAke3RzLmxhYmVsfWAsIC4uLnRzLmxpbmVzLCBcIlwiXSxcbiAgICAgICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoWy4uLnJlc3VsdC5pbXBvcnRLZXlzLCAuLi50cy5pbXBvcnRLZXlzXSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfSBhcyBPbWl0PFNvdXJjZUNvZGUsIFwibGFiZWxcIj4sXG4gICAgKTtcblxuICAgIGNvbnN0IGJvZHkgPSBzb3VyY2VDb2RlLmxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgY29uc3QgaXNVc2luZ01hbnlUb01hbnlCYXNlU2NoZW1hID0gYm9keS5pbmNsdWRlcyhcIk1hbnlUb01hbnlCYXNlU2NoZW1hXCIpO1xuXG4gICAgY29uc3Qgc29uYW11SW1wb3J0cyA9IFtcbiAgICAgIFwiUHVyaVdyYXBwZXJcIixcbiAgICAgIFwiRGF0YWJhc2VTY2hlbWFFeHRlbmRcIixcbiAgICAgIFwiUHVyaUxvYWRlclF1ZXJpZXNcIixcbiAgICAgIGlzVXNpbmdNYW55VG9NYW55QmFzZVNjaGVtYSA/IFwiTWFueVRvTWFueUJhc2VTY2hlbWFcIiA6IFwiXCIsXG4gICAgXVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oXCIsIFwiKTtcblxuICAgIC8vIGN1c3RvbUhlYWRlcnMg6rWs7ISxXG4gICAgY29uc3QgY3VzdG9tSGVhZGVycyA9IFtcbiAgICAgIFwiLyoqXCIsXG4gICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICBcIiAqL1wiLFxuICAgICAgXCJcIixcbiAgICAgIGBpbXBvcnQgeyAke3NvbmFtdUltcG9ydHN9IH0gZnJvbSBcInNvbmFtdVwiO2AsXG4gICAgXTtcbiAgICBpZiAodGhpcy5oYXNBdXRoQ29uZmlnKCkpIHtcbiAgICAgIGN1c3RvbUhlYWRlcnMucHVzaChgaW1wb3J0IHR5cGUgeyBVc2VyIH0gZnJvbSBcImJldHRlci1hdXRoXCI7YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCgpLFxuICAgICAgYm9keTogc291cmNlQ29kZS5saW5lcy5qb2luKFwiXFxuXCIpLFxuICAgICAgaW1wb3J0S2V5czogc291cmNlQ29kZS5pbXBvcnRLZXlzLFxuICAgICAgY3VzdG9tSGVhZGVycyxcbiAgICB9O1xuICB9XG5cbiAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBwcml2YXRlIEhlbHBlciBNZXRob2RzXG4gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSBnZXREYXRhYmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXRpZXM6IEVudGl0eVtdKTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGlmIChlbnRpdGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIERhdGFiYXNlU2NoZW1hRXh0ZW5kIC0g7YWM7J2067iUIOyKpO2CpOuniCDtg4DsnoUg7KCV7J2YXG4gICAgY29uc3QgZW50aXR5U2NoZW1hTGluZXMgPSBlbnRpdGllcy5tYXAoKGVudGl0eSkgPT4gYCR7ZW50aXR5LnRhYmxlfTogJHtlbnRpdHkuaWR9QmFzZVNjaGVtYTtgKTtcblxuICAgIGNvbnN0IGpvaW5UYWJsZXMgPSB1bmlxdWUoXG4gICAgICBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+XG4gICAgICAgIGVudGl0eS5wcm9wcy5maWx0ZXIoaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wKS5tYXAoKHByb3ApID0+IHtcbiAgICAgICAgICBjb25zdCBmcm9tVGFibGVLZXkgPSBpbmZsZWN0aW9uLnNpbmd1bGFyaXplKGVudGl0eS50YWJsZSk7XG4gICAgICAgICAgY29uc3QgdG9FbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChwcm9wLndpdGgpO1xuICAgICAgICAgIGNvbnN0IHRvVGFibGVLZXkgPSBpbmZsZWN0aW9uLnNpbmd1bGFyaXplKHRvRW50aXR5LnRhYmxlKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGFibGU6IHByb3Auam9pblRhYmxlLFxuICAgICAgICAgICAgZnJvbVRhYmxlS2V5LFxuICAgICAgICAgICAgdG9UYWJsZUtleSxcbiAgICAgICAgICAgIGZyb21FbnRpdHlJZDogZW50aXR5LmlkLFxuICAgICAgICAgICAgdG9FbnRpdHlJZDogdG9FbnRpdHkuaWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAgKGpvaW5UYWJsZSkgPT4gam9pblRhYmxlLnRhYmxlLFxuICAgICk7XG5cbiAgICAvLyBEYXRhYmFzZUZvcmVpZ25LZXlzIC0gRksg7Lus65+87J2EIOqwgOynhCDthYzsnbTruJTrp4wg7KCV7J2YXG4gICAgY29uc3QgZW50aXRpZXNXaXRoRmsgPSBlbnRpdGllcy5maWx0ZXIoXG4gICAgICAoZW50aXR5KSA9PiB0aGlzLmdldEZvcmVpZ25LZXlDb2x1bW5zKGVudGl0eSkubGVuZ3RoID4gMCxcbiAgICApO1xuICAgIGNvbnN0IGZrTWV0YWRhdGFMaW5lcyA9IGVudGl0aWVzV2l0aEZrLm1hcChcbiAgICAgIChlbnRpdHkpID0+IGAke2VudGl0eS50YWJsZX06ICR7ZW50aXR5LmlkfUZvcmVpZ25LZXlzO2AsXG4gICAgKTtcblxuICAgIC8vIENvbnRleHRFeHRlbmQgLSBhdXRoIOyEpOygleydtCDsnojsnYQg65WM66eMIHVzZXIg7YOA7J6FIOy2lOqwgFxuICAgIGNvbnN0IGNvbnRleHRFeHRlbmRMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAodGhpcy5oYXNBdXRoQ29uZmlnKCkpIHtcbiAgICAgIGNvbnRleHRFeHRlbmRMaW5lcy5wdXNoKFxuICAgICAgICBgYCxcbiAgICAgICAgYCAgZXhwb3J0IGludGVyZmFjZSBDb250ZXh0RXh0ZW5kIHtgLFxuICAgICAgICBgICAgIHVzZXI6IFNvbmFtdVVzZXIgfCBudWxsO2AsXG4gICAgICAgIGAgIH1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBEYXRhYmFzZVNjaGVtYWAsXG4gICAgICBsaW5lczogW1xuICAgICAgICBgZGVjbGFyZSBtb2R1bGUgXCJzb25hbXVcIiB7YCxcbiAgICAgICAgYCAgZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZVNjaGVtYUV4dGVuZCB7YCxcbiAgICAgICAgLi4uZW50aXR5U2NoZW1hTGluZXMsXG4gICAgICAgIC4uLmpvaW5UYWJsZXMubWFwKChqb2luVGFibGUpID0+IHtcbiAgICAgICAgICBjb25zdCBmcm9tRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoam9pblRhYmxlLmZyb21FbnRpdHlJZCk7XG4gICAgICAgICAgY29uc3QgdG9FbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChqb2luVGFibGUudG9FbnRpdHlJZCk7XG4gICAgICAgICAgY29uc3QgZnJvbVBrVHlwZSA9IGZyb21FbnRpdHkuZ2V0UGtUeXBlKCkgPT09IFwiaW50ZWdlclwiID8gXCJudW1iZXJcIiA6IFwic3RyaW5nXCI7XG4gICAgICAgICAgY29uc3QgdG9Qa1R5cGUgPSB0b0VudGl0eS5nZXRQa1R5cGUoKSA9PT0gXCJpbnRlZ2VyXCIgPyBcIm51bWJlclwiIDogXCJzdHJpbmdcIjtcblxuICAgICAgICAgIHJldHVybiBgJHtqb2luVGFibGUudGFibGV9OiBNYW55VG9NYW55QmFzZVNjaGVtYTxcIiR7am9pblRhYmxlLmZyb21UYWJsZUtleX1cIiwgXCIke2pvaW5UYWJsZS50b1RhYmxlS2V5fVwiLCAke2Zyb21Qa1R5cGV9LCAke3RvUGtUeXBlfT47YDtcbiAgICAgICAgfSksXG4gICAgICAgIGAgIH1gLFxuICAgICAgICBgYCxcbiAgICAgICAgYCAgZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUZvcmVpZ25LZXlzIHtgLFxuICAgICAgICAuLi5ma01ldGFkYXRhTGluZXMsXG4gICAgICAgIGAgIH1gLFxuICAgICAgICAuLi5jb250ZXh0RXh0ZW5kTGluZXMsXG4gICAgICAgIGB9YCxcbiAgICAgIF0sXG4gICAgICBpbXBvcnRLZXlzOiBlbnRpdGllcy5tYXAoKGVudGl0eSkgPT4gYCR7ZW50aXR5LmlkfUJhc2VTY2hlbWFgKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gRksg6rSA6rOE66W8IOy7rOufvOuqheycvOuhnCDrs4DtmZggKOyYiDogY29tcGFueSDihpIgY29tcGFueV9pZClcbiAgcHJpdmF0ZSBnZXRGb3JlaWduS2V5Q29sdW1ucyhlbnRpdHk6IEVudGl0eSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiB7XG4gICAgICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc09uZVRvT25lUmVsYXRpb25Qcm9wKHByb3ApICYmIHByb3AuaGFzSm9pbkNvbHVtbikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAubWFwKChwcm9wKSA9PiBgJHtwcm9wLm5hbWV9X2lkYCk7XG4gIH1cblxuICBwcml2YXRlIGdldEZvcmVpZ25LZXlUeXBlU291cmNlQ29kZShlbnRpdGllczogRW50aXR5W10pOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgaWYgKGVudGl0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gRkvqsIAg7J6I64qUIOyXlO2LsO2LsOunjCDtg4DsnoUg7IOd7ISxXG4gICAgY29uc3QgZW50aXRpZXNXaXRoRmsgPSBlbnRpdGllcy5maWx0ZXIoXG4gICAgICAoZW50aXR5KSA9PiB0aGlzLmdldEZvcmVpZ25LZXlDb2x1bW5zKGVudGl0eSkubGVuZ3RoID4gMCxcbiAgICApO1xuXG4gICAgaWYgKGVudGl0aWVzV2l0aEZrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZmtUeXBlTGluZXMgPSBlbnRpdGllc1dpdGhGay5tYXAoKGVudGl0eSkgPT4ge1xuICAgICAgY29uc3QgZmtDb2x1bW5zID0gdGhpcy5nZXRGb3JlaWduS2V5Q29sdW1ucyhlbnRpdHkpO1xuICAgICAgY29uc3QgZmtUeXBlVmFsdWUgPSBma0NvbHVtbnMubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYCkuam9pbihcIiB8IFwiKTtcblxuICAgICAgcmV0dXJuIGBleHBvcnQgdHlwZSAke2VudGl0eS5pZH1Gb3JlaWduS2V5cyA9ICR7ZmtUeXBlVmFsdWV9O2A7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBGb3JlaWduS2V5IFR5cGVzYCxcbiAgICAgIGxpbmVzOiBma1R5cGVMaW5lcyxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogc29uYW11LmNvbmZpZy50c+ydmCBhdXRoLnVzZXIuYWRkaXRpb25hbEZpZWxkc+yXkOyEnCBTb25hbXVVc2VyIO2DgOyeheydhCDsg53shLHtlanri4jri6QuXG4gICAqIEByZXR1cm5zIFNvdXJjZUNvZGUgfCBudWxsIC0gYXV0aCDshKTsoJXsnbQg7JeG7Jy866m0IG51bGwg67CY7ZmYXG4gICAqL1xuICBwcml2YXRlIGdldEF1dGhVc2VyVHlwZVNvdXJjZUNvZGUoKTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGNvbnN0IGF1dGhDb25maWcgPSBTb25hbXUuY29uZmlnLnNlcnZlcj8uYXV0aDtcbiAgICBpZiAoIWF1dGhDb25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIGFkZGl0aW9uYWxGaWVsZHMg7YOA7J6F7J20IOuPmeyggeyehFxuICAgIGNvbnN0IGFkZGl0aW9uYWxGaWVsZHMgPSAoYXV0aENvbmZpZyBhcyBhbnkpPy51c2VyPy5hZGRpdGlvbmFsRmllbGRzO1xuICAgIGlmICghYWRkaXRpb25hbEZpZWxkcyB8fCBPYmplY3Qua2V5cyhhZGRpdGlvbmFsRmllbGRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIGFkZGl0aW9uYWxGaWVsZHPqsIAg7JeG7Jy866m0IOq4sOuzuCBVc2VyIO2DgOyeheunjCDsgqzsmqlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBcIkF1dGggVXNlciBUeXBlXCIsXG4gICAgICAgIGxpbmVzOiBbXCJleHBvcnQgdHlwZSBTb25hbXVVc2VyID0gVXNlcjtcIl0sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gYWRkaXRpb25hbEZpZWxkc+ulvCBUeXBlU2NyaXB0IO2DgOyeheycvOuhnCDrs4DtmZhcbiAgICBjb25zdCBmaWVsZExpbmVzID0gT2JqZWN0LmVudHJpZXMoYWRkaXRpb25hbEZpZWxkcykubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIGJldHRlci1hdXRoIGFkZGl0aW9uYWxGaWVsZHMg6rWs7KGwXG4gICAgICBjb25zdCBmaWVsZENvbmZpZyA9IHZhbHVlIGFzIGFueTtcbiAgICAgIGNvbnN0IGlzUmVxdWlyZWQgPSBmaWVsZENvbmZpZy5yZXF1aXJlZCAhPT0gZmFsc2U7XG5cbiAgICAgIGxldCBmaWVsZFR5cGU6IHN0cmluZztcblxuICAgICAgLy8gc29uYW11VHlwZeydtCDsnojsnLzrqbQgZGVzY3JpcHRpb27snYQg7YOA7J6F66qF7Jy866GcIOyCrOyaqVxuICAgICAgaWYgKGZpZWxkQ29uZmlnLnNvbmFtdVR5cGUpIHtcbiAgICAgICAgZmllbGRUeXBlID0gZmllbGRDb25maWcuc29uYW11VHlwZTtcbiAgICAgICAgaW1wb3J0S2V5cy5wdXNoKGZpZWxkVHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWVsZFR5cGUgPSBtYXBCZXR0ZXJBdXRoRmllbGRUeXBlKGZpZWxkQ29uZmlnLnR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCAgJHtrZXl9JHtpc1JlcXVpcmVkID8gXCJcIiA6IFwiP1wifTogJHtmaWVsZFR5cGV9O2A7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IFwiQXV0aCBVc2VyIFR5cGVcIixcbiAgICAgIGxpbmVzOiBbXCJleHBvcnQgdHlwZSBTb25hbXVVc2VyID0gVXNlciAmIHtcIiwgLi4uZmllbGRMaW5lcywgXCJ9O1wiXSxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhdXRoIOyEpOygleydtCDsnojripTsp4Ag7ZmV7J247ZWp64uI64ukLlxuICAgKi9cbiAgcHJpdmF0ZSBoYXNBdXRoQ29uZmlnKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIVNvbmFtdS5jb25maWcuc2VydmVyPy5hdXRoO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7VUFLbUM7cUJBRXlCO1lBS2pDO2VBQ1k7Ozs7QUFNdkMsU0FBUyx1QkFBdUIsTUFBc0I7QUFDcEQsU0FBUSxNQUFSO0VBQ0UsS0FBSyxTQUNILFFBQU87RUFDVCxLQUFLLFNBQ0gsUUFBTztFQUNULEtBQUssVUFDSCxRQUFPO0VBQ1QsS0FBSyxPQUNILFFBQU87RUFDVCxLQUFLLFdBQ0gsUUFBTztFQUNULEtBQUssV0FDSCxRQUFPO0VBQ1QsUUFDRSxRQUFPOzs7QUFJYixJQUFhLDBCQUFiLGNBQTZDLFNBQVM7Q0FDcEQsY0FBYztBQUNaLFFBQU0sZ0JBQWdCOztDQUd4QixtQkFBbUI7RUFDakIsTUFBTSxFQUFFLFFBQVEsT0FBTyxPQUFPO0FBRTlCLFNBQU87R0FDTCxRQUFRLEdBQUcsSUFBSTtHQUNmLE1BQU07R0FDUDs7Q0FHSCxTQUFTO0VBQ1AsTUFBTSxZQUFZLGNBQWMsV0FBVztFQUMzQyxNQUFNLFdBQVcsVUFBVSxLQUFLLE9BQU8sY0FBYyxJQUFJLEdBQUcsQ0FBQztFQUc3RCxNQUFNLGlCQUFpQixTQUFTLFFBQzdCLFdBQVcsT0FBTyxhQUFhLGFBQWEsT0FBTyxLQUFLLE9BQU8sUUFBUSxDQUFDLFNBQVMsRUFDbkY7RUFHRCxNQUFNQSxjQUE0QixlQUFlLFNBQVMsV0FBVztH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
|
|
216
|
+
|
|
217
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkX3Nzby50ZW1wbGF0ZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVtcGxhdGUvaW1wbGVtZW50YXRpb25zL2dlbmVyYXRlZF9zc28udGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5cbmltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eSB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcCxcbiAgaXNPbmVUb09uZVJlbGF0aW9uUHJvcCxcbn0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgdHlwZSBTb3VyY2VDb2RlIH0gZnJvbSBcIi4vZ2VuZXJhdGVkLnRlbXBsYXRlXCI7XG5cbi8qKlxuICogYmV0dGVyLWF1dGggYWRkaXRpb25hbEZpZWxkc+ydmCB0eXBlIOqwkuydhCBUeXBlU2NyaXB0IO2DgOyehSDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBtYXBCZXR0ZXJBdXRoRmllbGRUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICAgIHJldHVybiBcIkRhdGVcIjtcbiAgICBjYXNlIFwic3RyaW5nW11cIjpcbiAgICAgIHJldHVybiBcInN0cmluZ1tdXCI7XG4gICAgY2FzZSBcIm51bWJlcltdXCI6XG4gICAgICByZXR1cm4gXCJudW1iZXJbXVwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19nZW5lcmF0ZWRfc3NvIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcImdlbmVyYXRlZF9zc29cIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcblxuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGBzb25hbXUuZ2VuZXJhdGVkLnNzby50c2AsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgIGNvbnN0IGVudGl0aWVzID0gZW50aXR5SWRzLm1hcCgoaWQpID0+IEVudGl0eU1hbmFnZXIuZ2V0KGlkKSk7XG5cbiAgICAvLyBTdWJzZXRRdWVyaWVzIOyDneyEsSDrjIDsg4E6IOu2gOuqqCDsl5Tti7Dti7DqsIAg7JeG6rOgIOyEnOu4jOyFi+ydtCDsobTsnqxcbiAgICBjb25zdCB0YXJnZXRFbnRpdGllcyA9IGVudGl0aWVzLmZpbHRlcihcbiAgICAgIChlbnRpdHkpID0+IGVudGl0eS5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKS5sZW5ndGggPiAwLFxuICAgICk7XG5cbiAgICAvLyBTdWJzZXRRdWVyaWVzIOyDneyEsVxuICAgIGNvbnN0IHNvdXJjZUNvZGVzOiBTb3VyY2VDb2RlW10gPSB0YXJnZXRFbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IHtcbiAgICAgIGNvbnN0IHN1YnNldEtleXMgPSBPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cyk7XG5cbiAgICAgIGNvbnN0IHN1YnNldEtleVR5cGVOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXlgO1xuICAgICAgY29uc3QgZW50aXR5Q2FtZWxOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShlbnRpdHkuaWQsIHRydWUpO1xuXG4gICAgICAvLyBQdXJpIOq4sOuwmCBTdWJzZXRRdWVyeVxuICAgICAgY29uc3QgcHVyaVN1YnNldFF1ZXJ5OiBTb3VyY2VDb2RlID0ge1xuICAgICAgICBsYWJlbDogYFN1YnNldFF1ZXJ5OiAke2VudGl0eS5pZH1gLFxuICAgICAgICBsaW5lczogW1xuICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnRpdHlDYW1lbE5hbWV9U3Vic2V0UXVlcmllcyA9IHtgLFxuICAgICAgICAgIC4uLnN1YnNldEtleXMubWFwKFxuICAgICAgICAgICAgKHN1YnNldEtleSkgPT4gYCR7c3Vic2V0S2V5fTogKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiB7XG4gICAgICAgICAgICAke2VudGl0eS5nZXRQdXJpU3Vic2V0UXVlcnkoc3Vic2V0S2V5KX07XG4gICAgICAgICAgfSxgLFxuICAgICAgICAgICksXG4gICAgICAgICAgYH07YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICBdLFxuICAgICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIC8vIFB1cmkg6riw67CYIFN1YnNldExvYWRlcnNRdWVyeVxuICAgICAgY29uc3QgcHVyaUxvYWRlclF1ZXJ5OiBTb3VyY2VDb2RlID0ge1xuICAgICAgICBsYWJlbDogYExvYWRlclF1ZXJ5OiAke2VudGl0eS5pZH1gLFxuICAgICAgICBsaW5lczogW1xuICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnRpdHlDYW1lbE5hbWV9TG9hZGVyUXVlcmllcyA9IHtgLFxuICAgICAgICAgIC4uLnN1YnNldEtleXMubWFwKChzdWJzZXRLZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgJHtzdWJzZXRLZXl9OiAke2VudGl0eS5nZXRQdXJpTG9hZGVyUXVlcnkoc3Vic2V0S2V5KX0sYDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBgfSBhcyBjb25zdCBzYXRpc2ZpZXMgUHVyaUxvYWRlclF1ZXJpZXM8JHtzdWJzZXRLZXlUeXBlTmFtZX0+O2AsXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgXSxcbiAgICAgICAgaW1wb3J0S2V5czogW3N1YnNldEtleVR5cGVOYW1lXSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBbcHVyaVN1YnNldFF1ZXJ5LCBwdXJpTG9hZGVyUXVlcnldO1xuICAgIH0pO1xuXG4gICAgLy8gRm9yZWlnbktleSDtg4DsnoUg7IOd7ISxXG4gICAgY29uc3QgZmtUeXBlU291cmNlQ29kZSA9IHRoaXMuZ2V0Rm9yZWlnbktleVR5cGVTb3VyY2VDb2RlKGVudGl0aWVzKTtcbiAgICBpZiAoZmtUeXBlU291cmNlQ29kZSkge1xuICAgICAgc291cmNlQ29kZXMucHVzaChma1R5cGVTb3VyY2VDb2RlKTtcbiAgICB9XG5cbiAgICAvLyBEYXRhYmFzZVNjaGVtYSDsg53shLFcbiAgICBjb25zdCBkYlNjaGVtYVNvdXJjZUNvZGUgPSB0aGlzLmdldERhdGFiYXNlU2NoZW1hU291cmNlQ29kZShlbnRpdGllcyk7XG4gICAgaWYgKGRiU2NoZW1hU291cmNlQ29kZSkge1xuICAgICAgc291cmNlQ29kZXMucHVzaChkYlNjaGVtYVNvdXJjZUNvZGUpO1xuICAgIH1cblxuICAgIC8vIEF1dGggVXNlciDtg4DsnoUg7IOd7ISxXG4gICAgY29uc3QgYXV0aFVzZXJUeXBlU291cmNlQ29kZSA9IHRoaXMuZ2V0QXV0aFVzZXJUeXBlU291cmNlQ29kZSgpO1xuICAgIGlmIChhdXRoVXNlclR5cGVTb3VyY2VDb2RlKSB7XG4gICAgICBzb3VyY2VDb2Rlcy5wdXNoKGF1dGhVc2VyVHlwZVNvdXJjZUNvZGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBzb3VyY2VDb2Rlcy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCB0cykgPT4ge1xuICAgICAgICBpZiAodHMgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChyZXN1bHQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmVzOiBbLi4ucmVzdWx0LmxpbmVzLCBgLy8gJHt0cy5sYWJlbH1gLCAuLi50cy5saW5lcywgXCJcIl0sXG4gICAgICAgICAgaW1wb3J0S2V5czogdW5pcXVlKFsuLi5yZXN1bHQuaW1wb3J0S2V5cywgLi4udHMuaW1wb3J0S2V5c10pLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGluZXM6IFtdLFxuICAgICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIH0gYXMgT21pdDxTb3VyY2VDb2RlLCBcImxhYmVsXCI+LFxuICAgICk7XG5cbiAgICBjb25zdCBib2R5ID0gc291cmNlQ29kZS5saW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IGlzVXNpbmdNYW55VG9NYW55QmFzZVNjaGVtYSA9IGJvZHkuaW5jbHVkZXMoXCJNYW55VG9NYW55QmFzZVNjaGVtYVwiKTtcblxuICAgIGNvbnN0IHNvbmFtdUltcG9ydHMgPSBbXG4gICAgICBcIlB1cmlXcmFwcGVyXCIsXG4gICAgICBcIkRhdGFiYXNlU2NoZW1hRXh0ZW5kXCIsXG4gICAgICBcIlB1cmlMb2FkZXJRdWVyaWVzXCIsXG4gICAgICBpc1VzaW5nTWFueVRvTWFueUJhc2VTY2hlbWEgPyBcIk1hbnlUb01hbnlCYXNlU2NoZW1hXCIgOiBcIlwiLFxuICAgIF1cbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5qb2luKFwiLCBcIik7XG5cbiAgICAvLyBjdXN0b21IZWFkZXJzIOq1rOyEsVxuICAgIGNvbnN0IGN1c3RvbUhlYWRlcnMgPSBbXG4gICAgICBcIi8qKlwiLFxuICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICBcIiAqIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgXCIgKi9cIixcbiAgICAgIFwiXCIsXG4gICAgICBgaW1wb3J0IHsgJHtzb25hbXVJbXBvcnRzfSB9IGZyb20gXCJzb25hbXVcIjtgLFxuICAgIF07XG4gICAgaWYgKHRoaXMuaGFzQXV0aENvbmZpZygpKSB7XG4gICAgICBjdXN0b21IZWFkZXJzLnB1c2goYGltcG9ydCB0eXBlIHsgVXNlciB9IGZyb20gXCJiZXR0ZXItYXV0aFwiO2ApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHk6IHNvdXJjZUNvZGUubGluZXMuam9pbihcIlxcblwiKSxcbiAgICAgIGltcG9ydEtleXM6IHNvdXJjZUNvZGUuaW1wb3J0S2V5cyxcbiAgICAgIGN1c3RvbUhlYWRlcnMsXG4gICAgfTtcbiAgfVxuXG4gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gcHJpdmF0ZSBIZWxwZXIgTWV0aG9kc1xuICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHByaXZhdGUgZ2V0RGF0YWJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0aWVzOiBFbnRpdHlbXSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoZW50aXRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBEYXRhYmFzZVNjaGVtYUV4dGVuZCAtIO2FjOydtOu4lCDsiqTtgqTrp4gg7YOA7J6FIOygleydmFxuICAgIGNvbnN0IGVudGl0eVNjaGVtYUxpbmVzID0gZW50aXRpZXMubWFwKChlbnRpdHkpID0+IGAke2VudGl0eS50YWJsZX06ICR7ZW50aXR5LmlkfUJhc2VTY2hlbWE7YCk7XG5cbiAgICBjb25zdCBqb2luVGFibGVzID0gdW5pcXVlKFxuICAgICAgZW50aXRpZXMuZmxhdE1hcCgoZW50aXR5KSA9PlxuICAgICAgICBlbnRpdHkucHJvcHMuZmlsdGVyKGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcCkubWFwKChwcm9wKSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbVRhYmxlS2V5ID0gaW5mbGVjdGlvbi5zaW5ndWxhcml6ZShlbnRpdHkudGFibGUpO1xuICAgICAgICAgIGNvbnN0IHRvRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocHJvcC53aXRoKTtcbiAgICAgICAgICBjb25zdCB0b1RhYmxlS2V5ID0gaW5mbGVjdGlvbi5zaW5ndWxhcml6ZSh0b0VudGl0eS50YWJsZSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhYmxlOiBwcm9wLmpvaW5UYWJsZSxcbiAgICAgICAgICAgIGZyb21UYWJsZUtleSxcbiAgICAgICAgICAgIHRvVGFibGVLZXksXG4gICAgICAgICAgICBmcm9tRW50aXR5SWQ6IGVudGl0eS5pZCxcbiAgICAgICAgICAgIHRvRW50aXR5SWQ6IHRvRW50aXR5LmlkLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICAgIChqb2luVGFibGUpID0+IGpvaW5UYWJsZS50YWJsZSxcbiAgICApO1xuXG4gICAgLy8gRGF0YWJhc2VGb3JlaWduS2V5cyAtIEZLIOy7rOufvOydhCDqsIDsp4Qg7YWM7J2067iU66eMIOygleydmFxuICAgIGNvbnN0IGVudGl0aWVzV2l0aEZrID0gZW50aXRpZXMuZmlsdGVyKFxuICAgICAgKGVudGl0eSkgPT4gdGhpcy5nZXRGb3JlaWduS2V5Q29sdW1ucyhlbnRpdHkpLmxlbmd0aCA+IDAsXG4gICAgKTtcbiAgICBjb25zdCBma01ldGFkYXRhTGluZXMgPSBlbnRpdGllc1dpdGhGay5tYXAoXG4gICAgICAoZW50aXR5KSA9PiBgJHtlbnRpdHkudGFibGV9OiAke2VudGl0eS5pZH1Gb3JlaWduS2V5cztgLFxuICAgICk7XG5cbiAgICAvLyBDb250ZXh0RXh0ZW5kIC0gYXV0aCDshKTsoJXsnbQg7J6I7J2EIOuVjOunjCB1c2VyIO2DgOyehSDstpTqsIBcbiAgICBjb25zdCBjb250ZXh0RXh0ZW5kTGluZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuaGFzQXV0aENvbmZpZygpKSB7XG4gICAgICBjb250ZXh0RXh0ZW5kTGluZXMucHVzaChcbiAgICAgICAgYGAsXG4gICAgICAgIGAgIGV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dEV4dGVuZCB7YCxcbiAgICAgICAgYCAgICB1c2VyOiBTb25hbXVVc2VyIHwgbnVsbDtgLFxuICAgICAgICBgICB9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgRGF0YWJhc2VTY2hlbWFgLFxuICAgICAgbGluZXM6IFtcbiAgICAgICAgYGRlY2xhcmUgbW9kdWxlIFwic29uYW11XCIge2AsXG4gICAgICAgIGAgIGV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VTY2hlbWFFeHRlbmQge2AsXG4gICAgICAgIC4uLmVudGl0eVNjaGVtYUxpbmVzLFxuICAgICAgICAuLi5qb2luVGFibGVzLm1hcCgoam9pblRhYmxlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbUVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGpvaW5UYWJsZS5mcm9tRW50aXR5SWQpO1xuICAgICAgICAgIGNvbnN0IHRvRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoam9pblRhYmxlLnRvRW50aXR5SWQpO1xuICAgICAgICAgIGNvbnN0IGZyb21Qa1R5cGUgPSBmcm9tRW50aXR5LmdldFBrVHlwZSgpID09PSBcImludGVnZXJcIiA/IFwibnVtYmVyXCIgOiBcInN0cmluZ1wiO1xuICAgICAgICAgIGNvbnN0IHRvUGtUeXBlID0gdG9FbnRpdHkuZ2V0UGtUeXBlKCkgPT09IFwiaW50ZWdlclwiID8gXCJudW1iZXJcIiA6IFwic3RyaW5nXCI7XG5cbiAgICAgICAgICByZXR1cm4gYCR7am9pblRhYmxlLnRhYmxlfTogTWFueVRvTWFueUJhc2VTY2hlbWE8XCIke2pvaW5UYWJsZS5mcm9tVGFibGVLZXl9XCIsIFwiJHtqb2luVGFibGUudG9UYWJsZUtleX1cIiwgJHtmcm9tUGtUeXBlfSwgJHt0b1BrVHlwZX0+O2A7XG4gICAgICAgIH0pLFxuICAgICAgICBgICB9YCxcbiAgICAgICAgYGAsXG4gICAgICAgIGAgIGV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VGb3JlaWduS2V5cyB7YCxcbiAgICAgICAgLi4uZmtNZXRhZGF0YUxpbmVzLFxuICAgICAgICBgICB9YCxcbiAgICAgICAgLi4uY29udGV4dEV4dGVuZExpbmVzLFxuICAgICAgICBgfWAsXG4gICAgICBdLFxuICAgICAgaW1wb3J0S2V5czogZW50aXRpZXMubWFwKChlbnRpdHkpID0+IGAke2VudGl0eS5pZH1CYXNlU2NoZW1hYCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEZLIOq0gOqzhOulvCDsu6zrn7zrqoXsnLzroZwg67OA7ZmYICjsmIg6IGNvbXBhbnkg4oaSIGNvbXBhbnlfaWQpXG4gIHByaXZhdGUgZ2V0Rm9yZWlnbktleUNvbHVtbnMoZW50aXR5OiBFbnRpdHkpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4ge1xuICAgICAgICBpZiAoaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLm1hcCgocHJvcCkgPT4gYCR7cHJvcC5uYW1lfV9pZGApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGb3JlaWduS2V5VHlwZVNvdXJjZUNvZGUoZW50aXRpZXM6IEVudGl0eVtdKTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGlmIChlbnRpdGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEZL6rCAIOyeiOuKlCDsl5Tti7Dti7Drp4wg7YOA7J6FIOyDneyEsVxuICAgIGNvbnN0IGVudGl0aWVzV2l0aEZrID0gZW50aXRpZXMuZmlsdGVyKFxuICAgICAgKGVudGl0eSkgPT4gdGhpcy5nZXRGb3JlaWduS2V5Q29sdW1ucyhlbnRpdHkpLmxlbmd0aCA+IDAsXG4gICAgKTtcblxuICAgIGlmIChlbnRpdGllc1dpdGhGay5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZrVHlwZUxpbmVzID0gZW50aXRpZXNXaXRoRmsubWFwKChlbnRpdHkpID0+IHtcbiAgICAgIGNvbnN0IGZrQ29sdW1ucyA9IHRoaXMuZ2V0Rm9yZWlnbktleUNvbHVtbnMoZW50aXR5KTtcbiAgICAgIGNvbnN0IGZrVHlwZVZhbHVlID0gZmtDb2x1bW5zLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApLmpvaW4oXCIgfCBcIik7XG5cbiAgICAgIHJldHVybiBgZXhwb3J0IHR5cGUgJHtlbnRpdHkuaWR9Rm9yZWlnbktleXMgPSAke2ZrVHlwZVZhbHVlfTtgO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgRm9yZWlnbktleSBUeXBlc2AsXG4gICAgICBsaW5lczogZmtUeXBlTGluZXMsXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIHNvbmFtdS5jb25maWcudHPsnZggYXV0aC51c2VyLmFkZGl0aW9uYWxGaWVsZHPsl5DshJwgU29uYW11VXNlciDtg4DsnoXsnYQg7IOd7ISx7ZWp64uI64ukLlxuICAgKiBAcmV0dXJucyBTb3VyY2VDb2RlIHwgbnVsbCAtIGF1dGgg7ISk7KCV7J20IOyXhuycvOuptCBudWxsIOuwmO2ZmFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBdXRoVXNlclR5cGVTb3VyY2VDb2RlKCk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBjb25zdCBhdXRoQ29uZmlnID0gU29uYW11LmNvbmZpZy5zZXJ2ZXI/LmF1dGg7XG4gICAgaWYgKCFhdXRoQ29uZmlnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBhZGRpdGlvbmFsRmllbGRzIO2DgOyeheydtCDrj5nsoIHsnoRcbiAgICBjb25zdCBhZGRpdGlvbmFsRmllbGRzID0gKGF1dGhDb25maWcgYXMgYW55KT8udXNlcj8uYWRkaXRpb25hbEZpZWxkcztcbiAgICBpZiAoIWFkZGl0aW9uYWxGaWVsZHMgfHwgT2JqZWN0LmtleXMoYWRkaXRpb25hbEZpZWxkcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBhZGRpdGlvbmFsRmllbGRz6rCAIOyXhuycvOuptCDquLDrs7ggVXNlciDtg4DsnoXrp4wg7IKs7JqpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogXCJBdXRoIFVzZXIgVHlwZVwiLFxuICAgICAgICBsaW5lczogW1wiZXhwb3J0IHR5cGUgU29uYW11VXNlciA9IFVzZXI7XCJdLFxuICAgICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIGFkZGl0aW9uYWxGaWVsZHPrpbwgVHlwZVNjcmlwdCDtg4DsnoXsnLzroZwg67OA7ZmYXG4gICAgY29uc3QgZmllbGRMaW5lcyA9IE9iamVjdC5lbnRyaWVzKGFkZGl0aW9uYWxGaWVsZHMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBiZXR0ZXItYXV0aCBhZGRpdGlvbmFsRmllbGRzIOq1rOyhsFxuICAgICAgY29uc3QgZmllbGRDb25maWcgPSB2YWx1ZSBhcyBhbnk7XG4gICAgICBjb25zdCBpc1JlcXVpcmVkID0gZmllbGRDb25maWcucmVxdWlyZWQgIT09IGZhbHNlO1xuXG4gICAgICBsZXQgZmllbGRUeXBlOiBzdHJpbmc7XG5cbiAgICAgIC8vIHNvbmFtdVR5cGXsnbQg7J6I7Jy866m0IGRlc2NyaXB0aW9u7J2EIO2DgOyeheuqheycvOuhnCDsgqzsmqlcbiAgICAgIGlmIChmaWVsZENvbmZpZy5zb25hbXVUeXBlKSB7XG4gICAgICAgIGZpZWxkVHlwZSA9IGZpZWxkQ29uZmlnLnNvbmFtdVR5cGU7XG4gICAgICAgIGltcG9ydEtleXMucHVzaChmaWVsZFR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmllbGRUeXBlID0gbWFwQmV0dGVyQXV0aEZpZWxkVHlwZShmaWVsZENvbmZpZy50eXBlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAgICR7a2V5fSR7aXNSZXF1aXJlZCA/IFwiXCIgOiBcIj9cIn06ICR7ZmllbGRUeXBlfTtgO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBcIkF1dGggVXNlciBUeXBlXCIsXG4gICAgICBsaW5lczogW1wiZXhwb3J0IHR5cGUgU29uYW11VXNlciA9IFVzZXIgJiB7XCIsIC4uLmZpZWxkTGluZXMsIFwifTtcIl0sXG4gICAgICBpbXBvcnRLZXlzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogYXV0aCDshKTsoJXsnbQg7J6I64qU7KeAIO2ZleyduO2VqeuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgaGFzQXV0aENvbmZpZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFTb25hbXUuY29uZmlnLnNlcnZlcj8uYXV0aDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7U0FLa0M7b0JBRXlCO1dBS2pDO2NBQ1k7Ozs7QUFNdEMsU0FBUyx1QkFBdUIsTUFBc0I7Q0FDcEQsUUFBUSxNQUFSO0VBQ0UsS0FBSyxVQUNILE9BQU87RUFDVCxLQUFLLFVBQ0gsT0FBTztFQUNULEtBQUssV0FDSCxPQUFPO0VBQ1QsS0FBSyxRQUNILE9BQU87RUFDVCxLQUFLLFlBQ0gsT0FBTztFQUNULEtBQUssWUFDSCxPQUFPO0VBQ1QsU0FDRSxPQUFPO0NBQ1g7QUFDRjtBQUVBLElBQWEsMEJBQWIsY0FBNkMsU0FBUztDQUNwRCxjQUFjO0VBQ1osTUFBTSxlQUFlO0NBQ3ZCO0NBRUEsbUJBQW1CO0VBQ2pCLE1BQU0sRUFBRSxRQUFRLE9BQU8sT0FBTztFQUU5QixPQUFPO0dBQ0wsUUFBUSxHQUFHLElBQUk7R0FDZixNQUFNO0VBQ1I7Q0FDRjtDQUVBLFNBQVM7RUFFUCxNQUFNLFdBRFksY0FBYyxVQUNmLENBQUEsQ0FBVSxLQUFLLE9BQU8sY0FBYyxJQUFJLEVBQUUsQ0FBQztFQVE1RCxNQUFNLGNBTGlCLFNBQVMsUUFDN0IsV0FBVyxPQUFPLGFBQWEsVUFBYSxPQUFPLEtBQUssT0FBTyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBSWxELENBQUEsQ0FBZSxTQUFTLFdBQVc7R0FDbkUsTUFBTSxhQUFhLE9BQU8sS0FBSyxPQUFPLE9BQU87R0FFN0MsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLE1BQU0sT0FBTztHQUNqRCxNQUFNLGtCQUFrQixXQUFXLFNBQVMsT0FBTyxJQUFJLElBQUk7R0FnQzNELE9BQU8sQ0FBQztJQTVCTixPQUFPLGdCQUFnQixPQUFPO0lBQzlCLE9BQU87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
|
|
@@ -2,7 +2,6 @@ import { Sonamu } from "../../api/sonamu.js";
|
|
|
2
2
|
import { EntityManager, init_entity_manager } from "../../entity/entity-manager.js";
|
|
3
3
|
import { init_api } from "../../api/index.js";
|
|
4
4
|
import { Template, init_template } from "../template.js";
|
|
5
|
-
|
|
6
5
|
//#region src/template/implementations/init_types.template.ts
|
|
7
6
|
init_api();
|
|
8
7
|
init_entity_manager();
|
|
@@ -22,10 +21,8 @@ var Template__init_types = class extends Template {
|
|
|
22
21
|
const names = EntityManager.getNamesFromId(entityId);
|
|
23
22
|
const entity = EntityManager.get(entityId);
|
|
24
23
|
const partialColumns = ["id"];
|
|
25
|
-
if (entity.props.some((prop) => prop.name === "created_at"))
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
const writeIneligibleColumns = entity.props.filter((prop) => prop.type !== "relation" && (prop.generated !== undefined || prop.type === "searchText")).map((prop) => prop.name);
|
|
24
|
+
if (entity.props.some((prop) => prop.name === "created_at")) partialColumns.push("created_at");
|
|
25
|
+
const writeIneligibleColumns = entity.props.filter((prop) => prop.type !== "relation" && (prop.generated !== void 0 || prop.type === "searchText")).map((prop) => prop.name);
|
|
29
26
|
const omitGeneratedColumns = writeIneligibleColumns.length > 0 ? `.omit({ ${writeIneligibleColumns.map((column) => `${column}: true`).join(", ")} })` : "";
|
|
30
27
|
return {
|
|
31
28
|
...this.getTargetAndPath(names),
|
|
@@ -46,7 +43,7 @@ export type ${entityId}SaveParams = z.infer<typeof ${entityId}SaveParams>;
|
|
|
46
43
|
};
|
|
47
44
|
}
|
|
48
45
|
};
|
|
49
|
-
|
|
50
46
|
//#endregion
|
|
51
47
|
export { Template__init_types };
|
|
52
|
-
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdF90eXBlcy50ZW1wbGF0ZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVtcGxhdGUvaW1wbGVtZW50YXRpb25zL2luaXRfdHlwZXMudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaVwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19pbml0X3R5cGVzIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcImluaXRfdHlwZXNcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcblxuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzfS8ke25hbWVzLmZzfS50eXBlcy50c2AsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7IGVudGl0eUlkIH06IFRlbXBsYXRlT3B0aW9uc1tcImluaXRfdHlwZXNcIl0pIHtcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcblxuICAgIGNvbnN0IHBhcnRpYWxDb2x1bW5zID0gW1wiaWRcIl07XG4gICAgaWYgKGVudGl0eS5wcm9wcy5zb21lKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IFwiY3JlYXRlZF9hdFwiKSkge1xuICAgICAgcGFydGlhbENvbHVtbnMucHVzaChcImNyZWF0ZWRfYXRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgd3JpdGVJbmVsaWdpYmxlQ29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHByb3ApID0+XG4gICAgICAgICAgcHJvcC50eXBlICE9PSBcInJlbGF0aW9uXCIgJiYgKHByb3AuZ2VuZXJhdGVkICE9PSB1bmRlZmluZWQgfHwgcHJvcC50eXBlID09PSBcInNlYXJjaFRleHRcIiksXG4gICAgICApXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgY29uc3Qgb21pdEdlbmVyYXRlZENvbHVtbnMgPVxuICAgICAgd3JpdGVJbmVsaWdpYmxlQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgID8gYC5vbWl0KHsgJHt3cml0ZUluZWxpZ2libGVDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBgJHtjb2x1bW59OiB0cnVlYCkuam9pbihcIiwgXCIpfSB9KWBcbiAgICAgICAgOiBcIlwiO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcyksXG4gICAgICBib2R5OiBgXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgJHtlbnRpdHlJZH1CYXNlU2NoZW1hLCAke2VudGl0eUlkfUJhc2VMaXN0UGFyYW1zIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWRcIjtcblxuLy8gJHtlbnRpdHlJZH0gLSBMaXN0UGFyYW1zXG5leHBvcnQgY29uc3QgJHtlbnRpdHlJZH1MaXN0UGFyYW1zID0gJHtlbnRpdHlJZH1CYXNlTGlzdFBhcmFtcztcbmV4cG9ydCB0eXBlICR7ZW50aXR5SWR9TGlzdFBhcmFtcyA9IHouaW5mZXI8dHlwZW9mICR7ZW50aXR5SWR9TGlzdFBhcmFtcz47XG5cbi8vICR7ZW50aXR5SWR9IC0gU2F2ZVBhcmFtc1xuZXhwb3J0IGNvbnN0ICR7ZW50aXR5SWR9U2F2ZVBhcmFtcyA9ICR7ZW50aXR5SWR9QmFzZVNjaGVtYSR7b21pdEdlbmVyYXRlZENvbHVtbnN9LnBhcnRpYWwoeyAke3BhcnRpYWxDb2x1bW5zXG4gICAgICAgIC5tYXAoKGNvbHVtbikgPT4gYCR7Y29sdW1ufTogdHJ1ZWApXG4gICAgICAgIC5qb2luKFwiLCBcIil9IH0pO1xuZXhwb3J0IHR5cGUgJHtlbnRpdHlJZH1TYXZlUGFyYW1zID0gei5pbmZlcjx0eXBlb2YgJHtlbnRpdHlJZH1TYXZlUGFyYW1zPjtcblxuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O1NBQWtDO29CQUN5QjtjQUdyQjtBQUV0QyxJQUFhLHVCQUFiLGNBQTBDLFNBQVM7Q0FDakQsY0FBYztFQUNaLE1BQU0sWUFBWTtDQUNwQjtDQUVBLGlCQUFpQixPQUEwQjtFQUN6QyxNQUFNLEVBQUUsUUFBUSxPQUFPLE9BQU87RUFFOUIsT0FBTztHQUNMLFFBQVEsR0FBRyxJQUFJO0dBQ2YsTUFBTSxHQUFHLE1BQU0sR0FBRyxHQUFHLE1BQU0sR0FBRztFQUNoQztDQUNGO0NBRUEsT0FBTyxFQUFFLFlBQTJDO0VBQ2xELE1BQU0sUUFBUSxjQUFjLGVBQWUsUUFBUTtFQUNuRCxNQUFNLFNBQVMsY0FBYyxJQUFJLFFBQVE7RUFFekMsTUFBTSxpQkFBaUIsQ0FBQyxJQUFJO0VBQzVCLElBQUksT0FBTyxNQUFNLE1BQU0sU0FBUyxLQUFLLFNBQVMsWUFBWSxHQUN4RCxlQUFlLEtBQUssWUFBWTtFQUdsQyxNQUFNLHlCQUF5QixPQUFPLE1BQ25DLFFBQ0UsU0FDQyxLQUFLLFNBQVMsZUFBZSxLQUFLLGNBQWMsVUFBYSxLQUFLLFNBQVMsYUFDL0UsQ0FBQyxDQUNBLEtBQUssU0FBUyxLQUFLLElBQUk7RUFFMUIsTUFBTSx1QkFDSix1QkFBdUIsU0FBUyxJQUM1QixXQUFXLHVCQUF1QixLQUFLLFdBQVcsR0FBRyxPQUFPLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLE9BQ2hGO0VBRU4sT0FBTztHQUNMLEdBQUcsS0FBSyxpQkFBaUIsS0FBSztHQUM5QixNQUFNOztXQUVELFNBQVMsY0FBYyxTQUFTOztLQUV0QyxTQUFTO2VBQ0MsU0FBUyxlQUFlLFNBQVM7Y0FDbEMsU0FBUyw4QkFBOEIsU0FBUzs7S0FFekQsU0FBUztlQUNDLFNBQVMsZUFBZSxTQUFTLFlBQVkscUJBQXFCLGFBQWEsZUFDckYsS0FBSyxXQUFXLEdBQUcsT0FBTyxPQUFPLENBQUMsQ0FDbEMsS0FBSyxJQUFJLEVBQUU7Y0FDTixTQUFTLDhCQUE4QixTQUFTOztRQUV0RCxLQUFLO0dBQ1AsWUFBWSxDQUFDO0VBQ2Y7Q0FDRjtBQUNGIn0=
|
|
@@ -5,7 +5,6 @@ import { init_api } from "../../api/index.js";
|
|
|
5
5
|
import { Template, init_template } from "../template.js";
|
|
6
6
|
import { getZodTypeById, init_zod_converter, zodTypeToRenderingNode } from "../zod-converter.js";
|
|
7
7
|
import { Template__view_list } from "./view_list.template.js";
|
|
8
|
-
|
|
9
8
|
//#region src/template/implementations/model.template.ts
|
|
10
9
|
init_api();
|
|
11
10
|
init_entity_manager();
|
|
@@ -28,16 +27,12 @@ var Template__model = class extends Template {
|
|
|
28
27
|
}
|
|
29
28
|
async render({ entityId }) {
|
|
30
29
|
Naite.t("render", { entityId });
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const subsetKeyZodType = await getZodTypeById(`${entityId}SubsetKey`);
|
|
34
|
-
const subsetKeys = subsetKeyZodType.enum;
|
|
30
|
+
const listParamsNode = zodTypeToRenderingNode(await getZodTypeById(`${entityId}ListParams`));
|
|
31
|
+
const subsetKeys = (await getZodTypeById(`${entityId}SubsetKey`)).enum;
|
|
35
32
|
const names = EntityManager.getNamesFromId(entityId);
|
|
36
33
|
const entity = EntityManager.get(entityId);
|
|
37
34
|
const vlTpl = new Template__view_list();
|
|
38
|
-
if (listParamsNode?.children ===
|
|
39
|
-
throw new Error(`listParamsNode가 없습니다. ${entityId}`);
|
|
40
|
-
}
|
|
35
|
+
if (listParamsNode?.children === void 0) throw new Error(`listParamsNode가 없습니다. ${entityId}`);
|
|
41
36
|
const def = vlTpl.getDefault(listParamsNode.children);
|
|
42
37
|
const notFoundError = `SD("error.entityNotFound")("${names.capital}", id)`;
|
|
43
38
|
const unknownSearchFieldError = `SD("error.unknownSearchField")(params.search)`;
|
|
@@ -198,7 +193,7 @@ export const ${entityId}Model = new ${entityId}ModelClass();
|
|
|
198
193
|
};
|
|
199
194
|
}
|
|
200
195
|
};
|
|
201
|
-
|
|
202
196
|
//#endregion
|
|
203
197
|
export { Template__model };
|
|
204
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwudGVtcGxhdGUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9tb2RlbC50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB6IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaVwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi8uLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBnZXRab2RUeXBlQnlJZCwgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9IGZyb20gXCIuLi96b2QtY29udmVydGVyXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZV9fdmlld19saXN0IH0gZnJvbSBcIi4vdmlld19saXN0LnRlbXBsYXRlXCI7XG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX21vZGVsIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIm1vZGVsXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICBjb25zdCB7IGRpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc30vJHtuYW1lcy5mc30ubW9kZWwudHNgLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIFtcImVycm9yLmVudGl0eU5vdEZvdW5kXCIsIFwiZXJyb3IudW5rbm93blNlYXJjaEZpZWxkXCJdO1xuICB9XG5cbiAgYXN5bmMgcmVuZGVyKHsgZW50aXR5SWQgfTogVGVtcGxhdGVPcHRpb25zW1wibW9kZWxcIl0pIHtcbiAgICBOYWl0ZS50KFwicmVuZGVyXCIsIHsgZW50aXR5SWQgfSk7XG5cbiAgICBjb25zdCBsaXN0UGFyYW1zWm9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKGAke2VudGl0eUlkfUxpc3RQYXJhbXNgKTtcbiAgICBjb25zdCBsaXN0UGFyYW1zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUobGlzdFBhcmFtc1pvZFR5cGUpO1xuXG4gICAgY29uc3Qgc3Vic2V0S2V5Wm9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKGAke2VudGl0eUlkfVN1YnNldEtleWApO1xuICAgIGNvbnN0IHN1YnNldEtleXMgPSAoc3Vic2V0S2V5Wm9kVHlwZSBhcyB6LlpvZEVudW0pLmVudW07XG5cbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcblxuICAgIGNvbnN0IHZsVHBsID0gbmV3IFRlbXBsYXRlX192aWV3X2xpc3QoKTtcbiAgICBpZiAobGlzdFBhcmFtc05vZGU/LmNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbGlzdFBhcmFtc05vZGXqsIAg7JeG7Iq164uI64ukLiAke2VudGl0eUlkfWApO1xuICAgIH1cbiAgICBjb25zdCBkZWYgPSB2bFRwbC5nZXREZWZhdWx0KGxpc3RQYXJhbXNOb2RlLmNoaWxkcmVuKTtcblxuICAgIC8vIOyXkOufrCDrqZTsi5zsp4Ag7IOd7ISxXG4gICAgY29uc3Qgbm90Rm91bmRFcnJvciA9IGBTRChcImVycm9yLmVudGl0eU5vdEZvdW5kXCIpKFwiJHtuYW1lcy5jYXBpdGFsfVwiLCBpZClgO1xuICAgIGNvbnN0IHVua25vd25TZWFyY2hGaWVsZEVycm9yID0gYFNEKFwiZXJyb3IudW5rbm93blNlYXJjaEZpZWxkXCIpKHBhcmFtcy5zZWFyY2gpYDtcblxuICAgIC8vIFBLIO2DgOyeheyXkCDrlLDrpbggVHlwZVNjcmlwdCDtg4DsnoUg6rKw7KCVXG4gICAgY29uc3QgcGtUeXBlID0gZW50aXR5LmdldFBrVHlwZSgpO1xuICAgIGNvbnN0IGlkVHNUeXBlID0gcGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCIgPyBcInN0cmluZ1wiIDogXCJudW1iZXJcIjtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IHsgQmFzZU1vZGVsQ2xhc3MsIHR5cGUgTGlzdFJlc3VsdCwgYXNBcnJheSwgTm90Rm91bmRFeGNlcHRpb24sIEJhZFJlcXVlc3RFeGNlcHRpb24sIGFwaSwgZXhoYXVzdGl2ZSB9IGZyb20gJ3NvbmFtdSc7XG5pbXBvcnQge1xuICAke2VudGl0eUlkfVN1YnNldEtleSxcbiAgJHtlbnRpdHlJZH1TdWJzZXRNYXBwaW5nLFxufSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHtcbiAgJHtuYW1lcy5jYW1lbH1TdWJzZXRRdWVyaWVzLFxuICAke25hbWVzLmNhbWVsfUxvYWRlclF1ZXJpZXMsXG59IGZyb20gXCIuLi9zb25hbXUuZ2VuZXJhdGVkLnNzb1wiO1xuaW1wb3J0IHsgJHtlbnRpdHlJZH1MaXN0UGFyYW1zLCAke2VudGl0eUlkfVNhdmVQYXJhbXMgfSBmcm9tIFwiLi8ke25hbWVzLmZzfS50eXBlc1wiO1xuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcblxuLypcbiAgJHtlbnRpdHlJZH0gTW9kZWxcbiovXG5jbGFzcyAke2VudGl0eUlkfU1vZGVsQ2xhc3MgZXh0ZW5kcyBCYXNlTW9kZWxDbGFzczxcbiAgJHtlbnRpdHlJZH1TdWJzZXRLZXksXG4gICR7ZW50aXR5SWR9U3Vic2V0TWFwcGluZyxcbiAgdHlwZW9mICR7bmFtZXMuY2FtZWx9U3Vic2V0UXVlcmllcyxcbiAgdHlwZW9mICR7bmFtZXMuY2FtZWx9TG9hZGVyUXVlcmllc1xuPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiJHtlbnRpdHlJZH1cIiwgJHtuYW1lcy5jYW1lbH1TdWJzZXRRdWVyaWVzLCAke25hbWVzLmNhbWVsfUxvYWRlclF1ZXJpZXMpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0sIHJlc291cmNlTmFtZTogXCIke2VudGl0eUlkfVwiIH0pXG4gIGFzeW5jIGZpbmRCeUlkPFQgZXh0ZW5kcyAke2VudGl0eUlkfVN1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIGlkOiAke2lkVHNUeXBlfVxuICApOiBQcm9taXNlPCR7ZW50aXR5SWR9U3Vic2V0TWFwcGluZ1tUXT4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIGlkLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICB9KTtcbiAgICBpZiAoIXJvd3NbMF0pIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbigke25vdEZvdW5kRXJyb3J9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93c1swXTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRPbmU8VCBleHRlbmRzICR7ZW50aXR5SWR9U3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgbGlzdFBhcmFtczogJHtlbnRpdHlJZH1MaXN0UGFyYW1zXG4gICk6IFByb21pc2U8JHtlbnRpdHlJZH1TdWJzZXRNYXBwaW5nW1RdIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIC4uLmxpc3RQYXJhbXMsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvd3NbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiJHtuYW1lcy5jYXBpdGFsUGx1cmFsfVwiIH0pXG4gIGFzeW5jIGZpbmRNYW55PFQgZXh0ZW5kcyAke2VudGl0eUlkfVN1YnNldEtleSwgTFAgZXh0ZW5kcyAke2VudGl0eUlkfUxpc3RQYXJhbXM+KFxuICAgIHN1YnNldDogVCxcbiAgICByYXdQYXJhbXM/OiBMUCxcbiAgKTogUHJvbWlzZTxMaXN0UmVzdWx0PExQLCAke2VudGl0eUlkfVN1YnNldE1hcHBpbmdbVF0+PiB7XG4gICAgLy8gcGFyYW1zIHdpdGggZGVmYXVsdHNcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBudW06IDI0LFxuICAgICAgcGFnZTogMSxcbiAgICAgIHNlYXJjaDogXCIke2RlZi5zZWFyY2h9XCIgYXMgY29uc3QsXG4gICAgICBvcmRlckJ5OiBcIiR7ZGVmLm9yZGVyQnl9XCIgYXMgY29uc3QsXG4gICAgICAuLi5yYXdQYXJhbXMsXG4gICAgfSBzYXRpc2ZpZXMgJHtlbnRpdHlJZH1MaXN0UGFyYW1zO1xuXG4gICAgLy8gYnVpbGQgcXVlcmllc1xuICAgIGNvbnN0IHsgcWIsIG9uU3Vic2V0OiBfIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoc3Vic2V0KTtcbiAgICBcbiAgICAvLyBpZFxuICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgIHFiLndoZXJlSW4oXCIke2VudGl0eS50YWJsZX0uaWRcIiwgYXNBcnJheShwYXJhbXMuaWQpKTtcbiAgICB9XG5cbiAgICAvLyBzZWFyY2gta2V5d29yZFxuICAgIGlmIChwYXJhbXMuc2VhcmNoICYmIHBhcmFtcy5rZXl3b3JkICYmIHBhcmFtcy5rZXl3b3JkLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChwYXJhbXMuc2VhcmNoID09PSBcImlkXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCIke2VudGl0eS50YWJsZX0uaWRcIiwgJHtpZFRzVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwicGFyYW1zLmtleXdvcmRcIiA6IFwiTnVtYmVyKHBhcmFtcy5rZXl3b3JkKVwifSk7XG4gICAgICAgIC8vIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJmaWVsZFwiKSB7XG4gICAgICAgIC8vICAgcWIud2hlcmUoXCIke2VudGl0eS50YWJsZX0uZmllbGRcIiwgXCJsaWtlXCIsIFxcYCVcXCR7cGFyYW1zLmtleXdvcmR9JVxcYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbigke3Vua25vd25TZWFyY2hGaWVsZEVycm9yfSk7XG4gICAgICB9XG4gICAgfVxuICAgICAgXG4gICAgLy8gb3JkZXJCeVxuICAgIGlmIChwYXJhbXMub3JkZXJCeSkge1xuICAgICAgLy8gZGVmYXVsdCBvcmRlckJ5XG4gICAgICBpZiAocGFyYW1zLm9yZGVyQnkgPT09IFwiaWQtZGVzY1wiKSB7XG4gICAgICAgIHFiLm9yZGVyQnkoXCIke2VudGl0eS50YWJsZX0uaWRcIiwgXCJkZXNjXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhoYXVzdGl2ZShwYXJhbXMub3JkZXJCeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZW5oYW5jZXJzID0gdGhpcy5jcmVhdGVFbmhhbmNlcnMoe1xuICAgICAgJHtPYmplY3Qua2V5cyhzdWJzZXRLZXlzKVxuICAgICAgICAubWFwKFxuICAgICAgICAgIChrZXkpID0+IGAke2tleX06IChyb3cpID0+ICh7XG4gICAgICAgICAgLi4ucm93LFxuICAgICAgICAgIC8vIOyEnOu4jOyFi+uzhOuhnCB2aXJ0dWFsIO2VhOuTnCDqs4TsgrDroZzsp4Eg7LaU6rCAXG4gICAgICAgIH0pLGAsXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oXCJcXG5cIil9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlU3Vic2V0UXVlcnkoe1xuICAgICAgc3Vic2V0LFxuICAgICAgcWIsXG4gICAgICBwYXJhbXMsXG4gICAgICBlbmhhbmNlcnMsXG4gICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgc2F2ZShcbiAgICBzcGE6ICR7ZW50aXR5SWR9U2F2ZVBhcmFtc1tdXG4gICk6IFByb21pc2U8JHtpZFRzVHlwZX1bXT4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyByZWdpc3RlclxuICAgIHNwYS5mb3JFYWNoKChzcCkgPT4ge1xuICAgICAgd2RiLnViUmVnaXN0ZXIoXCIke2VudGl0eS50YWJsZX1cIiwgc3ApO1xuICAgIH0pO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcIiR7ZW50aXR5LnRhYmxlfVwiKTtcblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9KTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSwgZ3VhcmRzOiBbIFwiYWRtaW5cIiBdIH0pXG4gIGFzeW5jIGRlbChpZHM6ICR7aWRUc1R5cGV9W10pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyB0cmFuc2FjdGlvblxuICAgIGF3YWl0IHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICByZXR1cm4gdHJ4LnRhYmxlKFwiJHtlbnRpdHkudGFibGV9XCIpLndoZXJlSW4oXCIke2VudGl0eS50YWJsZX0uaWRcIiwgaWRzKS5kZWxldGUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpZHMubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCAke2VudGl0eUlkfU1vZGVsID0gbmV3ICR7ZW50aXR5SWR9TW9kZWxDbGFzcygpO1xuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztVQUVtQztxQkFDeUI7WUFFbEI7ZUFFSDtvQkFDbUM7QUFFMUUsSUFBYSxrQkFBYixjQUFxQyxTQUFTO0NBQzVDLGNBQWM7QUFDWixRQUFNLFFBQVE7O0NBR2hCLGlCQUFpQixPQUEwQjtFQUN6QyxNQUFNLEVBQUUsUUFBUSxPQUFPLE9BQU87QUFFOUIsU0FBTztHQUNMLFFBQVEsR0FBRyxJQUFJO0dBQ2YsTUFBTSxHQUFHLE1BQU0sR0FBRyxHQUFHLE1BQU0sR0FBRztHQUMvQjs7Q0FHSCxBQUFTLHNCQUF1QztBQUM5QyxTQUFPLENBQUMsd0JBQXdCLDJCQUEyQjs7Q0FHN0QsTUFBTSxPQUFPLEVBQUUsWUFBc0M7QUFDbkQsUUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7RUFFL0IsTUFBTSxvQkFBb0IsTUFBTSxlQUFlLEdBQUcsU0FBUyxZQUFZO0VBQ3ZFLE1BQU0saUJBQWlCLHVCQUF1QixrQkFBa0I7RUFFaEUsTUFBTSxtQkFBbUIsTUFBTSxlQUFlLEdBQUcsU0FBUyxXQUFXO0VBQ3JFLE1BQU0sYUFBYyxpQkFBK0I7RUFFbkQsTUFBTSxRQUFRLGNBQWMsZUFBZSxTQUFTO0VBQ3BELE1BQU0sU0FBUyxjQUFjLElBQUksU0FBUztFQUUxQyxNQUFNLFFBQVEsSUFBSSxxQkFBcUI7QUFDdkMsTUFBSSxnQkFBZ0IsYUFBYSxXQUFXO0FBQzFDLFNBQU0sSUFBSSxNQUFNLHlCQUF5QixXQUFXOztFQUV0RCxNQUFNLE1BQU0sTUFBTSxXQUFXLGVBQWUsU0FBUztFQUdyRCxNQUFNLGdCQUFnQiwrQkFBK0IsTUFBTSxRQUFRO0VBQ25FLE1BQU0sMEJBQTBCO0VBR2hDLE1BQU0sU0FBUyxPQUFPLFdBQVc7RUFDakMsTUFBTSxXQUFXLFdBQVcsWUFBWSxXQUFXLFNBQVMsV0FBVztBQUV2RSxTQUFPO0dBQ0wsR0FBRyxLQUFLLGlCQUFpQixNQUFNO0dBQy9CLE1BQU07OztJQUdSLFNBQVM7SUFDVCxTQUFTOzs7SUFHVCxNQUFNLE1BQU07SUFDWixNQUFNLE1BQU07O1dBRUwsU0FBUyxjQUFjLFNBQVMsdUJBQXVCLE1BQU0sR0FBRzs7OztJQUl2RSxTQUFTOztRQUVMLFNBQVM7SUFDYixTQUFTO0lBQ1QsU0FBUztXQUNGLE1BQU0sTUFBTTtXQUNaLE1BQU0sTUFBTTs7O2FBR1YsU0FBUyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsTUFBTSxNQUFNOzs7bUZBR2UsU0FBUzs2QkFDL0QsU0FBUzs7VUFFNUIsU0FBUztlQUNKLFNBQVM7Ozs7Ozs7b0NBT1ksY0FBYzs7Ozs7OzRCQU10QixTQUFTOztrQkFFbkIsU0FBUztlQUNaLFNBQVM7Ozs7Ozs7Ozs7bUZBVTJELE1BQU0sY0FBYzs2QkFDMUUsU0FBUyx3QkFBd0IsU0FBUzs7OzhCQUd6QyxTQUFTOzs7OztpQkFLdEIsSUFBSSxPQUFPO2tCQUNWLElBQUksUUFBUTs7a0JBRVosU0FBUzs7Ozs7OztvQkFPUCxPQUFPLE1BQU07Ozs7OztvQkFNYixPQUFPLE1BQU0sUUFBUSxhQUFhLFdBQVcsbUJBQW1CLHlCQUF5Qjs7eUJBRXBGLE9BQU8sTUFBTTs7d0NBRUUsd0JBQXdCOzs7Ozs7OztzQkFRMUMsT0FBTyxNQUFNOzs7Ozs7O1FBTzNCLE9BQU8sS0FBSyxXQUFXLENBQ3RCLEtBQ0UsUUFBUSxHQUFHLElBQUk7OzthQUlqQixDQUNBLEtBQUssS0FBSyxDQUFDOzs7Ozs7Ozs7Ozs7OztXQWNULFNBQVM7ZUFDTCxTQUFTOzs7Ozt3QkFLQSxPQUFPLE1BQU07Ozs7O3dDQUtHLE9BQU8sTUFBTTs7Ozs7OzttQkFPbEMsU0FBUzs7Ozs7MEJBS0YsT0FBTyxNQUFNLGNBQWMsT0FBTyxNQUFNOzs7Ozs7O2VBT25ELFNBQVMsY0FBYyxTQUFTO1FBQ3ZDLE1BQU07R0FDUixZQUFZLEVBQUU7R0FDZiJ9
|
|
198
|
+
|
|
199
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwudGVtcGxhdGUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9tb2RlbC50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB6IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaVwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi8uLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBnZXRab2RUeXBlQnlJZCwgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9IGZyb20gXCIuLi96b2QtY29udmVydGVyXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZV9fdmlld19saXN0IH0gZnJvbSBcIi4vdmlld19saXN0LnRlbXBsYXRlXCI7XG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX21vZGVsIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIm1vZGVsXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICBjb25zdCB7IGRpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc30vJHtuYW1lcy5mc30ubW9kZWwudHNgLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIFtcImVycm9yLmVudGl0eU5vdEZvdW5kXCIsIFwiZXJyb3IudW5rbm93blNlYXJjaEZpZWxkXCJdO1xuICB9XG5cbiAgYXN5bmMgcmVuZGVyKHsgZW50aXR5SWQgfTogVGVtcGxhdGVPcHRpb25zW1wibW9kZWxcIl0pIHtcbiAgICBOYWl0ZS50KFwicmVuZGVyXCIsIHsgZW50aXR5SWQgfSk7XG5cbiAgICBjb25zdCBsaXN0UGFyYW1zWm9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKGAke2VudGl0eUlkfUxpc3RQYXJhbXNgKTtcbiAgICBjb25zdCBsaXN0UGFyYW1zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUobGlzdFBhcmFtc1pvZFR5cGUpO1xuXG4gICAgY29uc3Qgc3Vic2V0S2V5Wm9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKGAke2VudGl0eUlkfVN1YnNldEtleWApO1xuICAgIGNvbnN0IHN1YnNldEtleXMgPSAoc3Vic2V0S2V5Wm9kVHlwZSBhcyB6LlpvZEVudW0pLmVudW07XG5cbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcblxuICAgIGNvbnN0IHZsVHBsID0gbmV3IFRlbXBsYXRlX192aWV3X2xpc3QoKTtcbiAgICBpZiAobGlzdFBhcmFtc05vZGU/LmNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbGlzdFBhcmFtc05vZGXqsIAg7JeG7Iq164uI64ukLiAke2VudGl0eUlkfWApO1xuICAgIH1cbiAgICBjb25zdCBkZWYgPSB2bFRwbC5nZXREZWZhdWx0KGxpc3RQYXJhbXNOb2RlLmNoaWxkcmVuKTtcblxuICAgIC8vIOyXkOufrCDrqZTsi5zsp4Ag7IOd7ISxXG4gICAgY29uc3Qgbm90Rm91bmRFcnJvciA9IGBTRChcImVycm9yLmVudGl0eU5vdEZvdW5kXCIpKFwiJHtuYW1lcy5jYXBpdGFsfVwiLCBpZClgO1xuICAgIGNvbnN0IHVua25vd25TZWFyY2hGaWVsZEVycm9yID0gYFNEKFwiZXJyb3IudW5rbm93blNlYXJjaEZpZWxkXCIpKHBhcmFtcy5zZWFyY2gpYDtcblxuICAgIC8vIFBLIO2DgOyeheyXkCDrlLDrpbggVHlwZVNjcmlwdCDtg4DsnoUg6rKw7KCVXG4gICAgY29uc3QgcGtUeXBlID0gZW50aXR5LmdldFBrVHlwZSgpO1xuICAgIGNvbnN0IGlkVHNUeXBlID0gcGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCIgPyBcInN0cmluZ1wiIDogXCJudW1iZXJcIjtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IHsgQmFzZU1vZGVsQ2xhc3MsIHR5cGUgTGlzdFJlc3VsdCwgYXNBcnJheSwgTm90Rm91bmRFeGNlcHRpb24sIEJhZFJlcXVlc3RFeGNlcHRpb24sIGFwaSwgZXhoYXVzdGl2ZSB9IGZyb20gJ3NvbmFtdSc7XG5pbXBvcnQge1xuICAke2VudGl0eUlkfVN1YnNldEtleSxcbiAgJHtlbnRpdHlJZH1TdWJzZXRNYXBwaW5nLFxufSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHtcbiAgJHtuYW1lcy5jYW1lbH1TdWJzZXRRdWVyaWVzLFxuICAke25hbWVzLmNhbWVsfUxvYWRlclF1ZXJpZXMsXG59IGZyb20gXCIuLi9zb25hbXUuZ2VuZXJhdGVkLnNzb1wiO1xuaW1wb3J0IHsgJHtlbnRpdHlJZH1MaXN0UGFyYW1zLCAke2VudGl0eUlkfVNhdmVQYXJhbXMgfSBmcm9tIFwiLi8ke25hbWVzLmZzfS50eXBlc1wiO1xuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcblxuLypcbiAgJHtlbnRpdHlJZH0gTW9kZWxcbiovXG5jbGFzcyAke2VudGl0eUlkfU1vZGVsQ2xhc3MgZXh0ZW5kcyBCYXNlTW9kZWxDbGFzczxcbiAgJHtlbnRpdHlJZH1TdWJzZXRLZXksXG4gICR7ZW50aXR5SWR9U3Vic2V0TWFwcGluZyxcbiAgdHlwZW9mICR7bmFtZXMuY2FtZWx9U3Vic2V0UXVlcmllcyxcbiAgdHlwZW9mICR7bmFtZXMuY2FtZWx9TG9hZGVyUXVlcmllc1xuPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiJHtlbnRpdHlJZH1cIiwgJHtuYW1lcy5jYW1lbH1TdWJzZXRRdWVyaWVzLCAke25hbWVzLmNhbWVsfUxvYWRlclF1ZXJpZXMpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0sIHJlc291cmNlTmFtZTogXCIke2VudGl0eUlkfVwiIH0pXG4gIGFzeW5jIGZpbmRCeUlkPFQgZXh0ZW5kcyAke2VudGl0eUlkfVN1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIGlkOiAke2lkVHNUeXBlfVxuICApOiBQcm9taXNlPCR7ZW50aXR5SWR9U3Vic2V0TWFwcGluZ1tUXT4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIGlkLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICB9KTtcbiAgICBpZiAoIXJvd3NbMF0pIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbigke25vdEZvdW5kRXJyb3J9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93c1swXTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRPbmU8VCBleHRlbmRzICR7ZW50aXR5SWR9U3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgbGlzdFBhcmFtczogJHtlbnRpdHlJZH1MaXN0UGFyYW1zXG4gICk6IFByb21pc2U8JHtlbnRpdHlJZH1TdWJzZXRNYXBwaW5nW1RdIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIC4uLmxpc3RQYXJhbXMsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvd3NbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiJHtuYW1lcy5jYXBpdGFsUGx1cmFsfVwiIH0pXG4gIGFzeW5jIGZpbmRNYW55PFQgZXh0ZW5kcyAke2VudGl0eUlkfVN1YnNldEtleSwgTFAgZXh0ZW5kcyAke2VudGl0eUlkfUxpc3RQYXJhbXM+KFxuICAgIHN1YnNldDogVCxcbiAgICByYXdQYXJhbXM/OiBMUCxcbiAgKTogUHJvbWlzZTxMaXN0UmVzdWx0PExQLCAke2VudGl0eUlkfVN1YnNldE1hcHBpbmdbVF0+PiB7XG4gICAgLy8gcGFyYW1zIHdpdGggZGVmYXVsdHNcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBudW06IDI0LFxuICAgICAgcGFnZTogMSxcbiAgICAgIHNlYXJjaDogXCIke2RlZi5zZWFyY2h9XCIgYXMgY29uc3QsXG4gICAgICBvcmRlckJ5OiBcIiR7ZGVmLm9yZGVyQnl9XCIgYXMgY29uc3QsXG4gICAgICAuLi5yYXdQYXJhbXMsXG4gICAgfSBzYXRpc2ZpZXMgJHtlbnRpdHlJZH1MaXN0UGFyYW1zO1xuXG4gICAgLy8gYnVpbGQgcXVlcmllc1xuICAgIGNvbnN0IHsgcWIsIG9uU3Vic2V0OiBfIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoc3Vic2V0KTtcbiAgICBcbiAgICAvLyBpZFxuICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgIHFiLndoZXJlSW4oXCIke2VudGl0eS50YWJsZX0uaWRcIiwgYXNBcnJheShwYXJhbXMuaWQpKTtcbiAgICB9XG5cbiAgICAvLyBzZWFyY2gta2V5d29yZFxuICAgIGlmIChwYXJhbXMuc2VhcmNoICYmIHBhcmFtcy5rZXl3b3JkICYmIHBhcmFtcy5rZXl3b3JkLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChwYXJhbXMuc2VhcmNoID09PSBcImlkXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCIke2VudGl0eS50YWJsZX0uaWRcIiwgJHtpZFRzVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwicGFyYW1zLmtleXdvcmRcIiA6IFwiTnVtYmVyKHBhcmFtcy5rZXl3b3JkKVwifSk7XG4gICAgICAgIC8vIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJmaWVsZFwiKSB7XG4gICAgICAgIC8vICAgcWIud2hlcmUoXCIke2VudGl0eS50YWJsZX0uZmllbGRcIiwgXCJsaWtlXCIsIFxcYCVcXCR7cGFyYW1zLmtleXdvcmR9JVxcYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbigke3Vua25vd25TZWFyY2hGaWVsZEVycm9yfSk7XG4gICAgICB9XG4gICAgfVxuICAgICAgXG4gICAgLy8gb3JkZXJCeVxuICAgIGlmIChwYXJhbXMub3JkZXJCeSkge1xuICAgICAgLy8gZGVmYXVsdCBvcmRlckJ5XG4gICAgICBpZiAocGFyYW1zLm9yZGVyQnkgPT09IFwiaWQtZGVzY1wiKSB7XG4gICAgICAgIHFiLm9yZGVyQnkoXCIke2VudGl0eS50YWJsZX0uaWRcIiwgXCJkZXNjXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhoYXVzdGl2ZShwYXJhbXMub3JkZXJCeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZW5oYW5jZXJzID0gdGhpcy5jcmVhdGVFbmhhbmNlcnMoe1xuICAgICAgJHtPYmplY3Qua2V5cyhzdWJzZXRLZXlzKVxuICAgICAgICAubWFwKFxuICAgICAgICAgIChrZXkpID0+IGAke2tleX06IChyb3cpID0+ICh7XG4gICAgICAgICAgLi4ucm93LFxuICAgICAgICAgIC8vIOyEnOu4jOyFi+uzhOuhnCB2aXJ0dWFsIO2VhOuTnCDqs4TsgrDroZzsp4Eg7LaU6rCAXG4gICAgICAgIH0pLGAsXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oXCJcXG5cIil9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlU3Vic2V0UXVlcnkoe1xuICAgICAgc3Vic2V0LFxuICAgICAgcWIsXG4gICAgICBwYXJhbXMsXG4gICAgICBlbmhhbmNlcnMsXG4gICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgc2F2ZShcbiAgICBzcGE6ICR7ZW50aXR5SWR9U2F2ZVBhcmFtc1tdXG4gICk6IFByb21pc2U8JHtpZFRzVHlwZX1bXT4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyByZWdpc3RlclxuICAgIHNwYS5mb3JFYWNoKChzcCkgPT4ge1xuICAgICAgd2RiLnViUmVnaXN0ZXIoXCIke2VudGl0eS50YWJsZX1cIiwgc3ApO1xuICAgIH0pO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcIiR7ZW50aXR5LnRhYmxlfVwiKTtcblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9KTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSwgZ3VhcmRzOiBbIFwiYWRtaW5cIiBdIH0pXG4gIGFzeW5jIGRlbChpZHM6ICR7aWRUc1R5cGV9W10pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyB0cmFuc2FjdGlvblxuICAgIGF3YWl0IHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICByZXR1cm4gdHJ4LnRhYmxlKFwiJHtlbnRpdHkudGFibGV9XCIpLndoZXJlSW4oXCIke2VudGl0eS50YWJsZX0uaWRcIiwgaWRzKS5kZWxldGUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpZHMubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCAke2VudGl0eUlkfU1vZGVsID0gbmV3ICR7ZW50aXR5SWR9TW9kZWxDbGFzcygpO1xuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O1NBRWtDO29CQUN5QjtXQUVsQjtjQUVIO21CQUNtQztBQUV6RSxJQUFhLGtCQUFiLGNBQXFDLFNBQVM7Q0FDNUMsY0FBYztFQUNaLE1BQU0sT0FBTztDQUNmO0NBRUEsaUJBQWlCLE9BQTBCO0VBQ3pDLE1BQU0sRUFBRSxRQUFRLE9BQU8sT0FBTztFQUU5QixPQUFPO0dBQ0wsUUFBUSxHQUFHLElBQUk7R0FDZixNQUFNLEdBQUcsTUFBTSxHQUFHLEdBQUcsTUFBTSxHQUFHO0VBQ2hDO0NBQ0Y7Q0FFQSxzQkFBZ0Q7RUFDOUMsT0FBTyxDQUFDLHdCQUF3QiwwQkFBMEI7Q0FDNUQ7Q0FFQSxNQUFNLE9BQU8sRUFBRSxZQUFzQztFQUNuRCxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQztFQUc5QixNQUFNLGlCQUFpQix1QkFBdUIsTUFEZCxlQUFlLEdBQUcsU0FBUyxXQUFXLENBQ1A7RUFHL0QsTUFBTSxjQUFjLE1BRFcsZUFBZSxHQUFHLFNBQVMsVUFBVSxFQUNoRCxDQUErQjtFQUVuRCxNQUFNLFFBQVEsY0FBYyxlQUFlLFFBQVE7RUFDbkQsTUFBTSxTQUFTLGNBQWMsSUFBSSxRQUFRO0VBRXpDLE1BQU0sUUFBUSxJQUFJLG9CQUFvQjtFQUN0QyxJQUFJLGdCQUFnQixhQUFhLFFBQy9CLE1BQU0sSUFBSSxNQUFNLHlCQUF5QixVQUFVO0VBRXJELE1BQU0sTUFBTSxNQUFNLFdBQVcsZUFBZSxRQUFRO0VBR3BELE1BQU0sZ0JBQWdCLCtCQUErQixNQUFNLFFBQVE7RUFDbkUsTUFBTSwwQkFBMEI7RUFHaEMsTUFBTSxTQUFTLE9BQU8sVUFBVTtFQUNoQyxNQUFNLFdBQVcsV0FBVyxZQUFZLFdBQVcsU0FBUyxXQUFXO0VBRXZFLE9BQU87R0FDTCxHQUFHLEtBQUssaUJBQWlCLEtBQUs7R0FDOUIsTUFBTTs7O0lBR1IsU0FBUztJQUNULFNBQVM7OztJQUdULE1BQU0sTUFBTTtJQUNaLE1BQU0sTUFBTTs7V0FFTCxTQUFTLGNBQWMsU0FBUyx1QkFBdUIsTUFBTSxHQUFHOzs7O0lBSXZFLFNBQVM7O1FBRUwsU0FBUztJQUNiLFNBQVM7SUFDVCxTQUFTO1dBQ0YsTUFBTSxNQUFNO1dBQ1osTUFBTSxNQUFNOzs7YUFHVixTQUFTLEtBQUssTUFBTSxNQUFNLGlCQUFpQixNQUFNLE1BQU07OzttRkFHZSxTQUFTOzZCQUMvRCxTQUFTOztVQUU1QixTQUFTO2VBQ0osU0FBUzs7Ozs7OztvQ0FPWSxjQUFjOzs7Ozs7NEJBTXRCLFNBQVM7O2tCQUVuQixTQUFTO2VBQ1osU0FBUzs7Ozs7Ozs7OzttRkFVMkQsTUFBTSxjQUFjOzZCQUMxRSxTQUFTLHdCQUF3QixTQUFTOzs7OEJBR3pDLFNBQVM7Ozs7O2lCQUt0QixJQUFJLE9BQU87a0JBQ1YsSUFBSSxRQUFROztrQkFFWixTQUFTOzs7Ozs7O29CQU9QLE9BQU8sTUFBTTs7Ozs7O29CQU1iLE9BQU8sTUFBTSxRQUFRLGFBQWEsV0FBVyxtQkFBbUIseUJBQXlCOzt5QkFFcEYsT0FBTyxNQUFNOzt3Q0FFRSx3QkFBd0I7Ozs7Ozs7O3NCQVExQyxPQUFPLE1BQU07Ozs7Ozs7UUFPM0IsT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUN0QixLQUNFLFFBQVEsR0FBRyxJQUFJOzs7WUFJbEIsQ0FBQyxDQUNBLEtBQUssSUFBSSxFQUFFOzs7Ozs7Ozs7Ozs7OztXQWNULFNBQVM7ZUFDTCxTQUFTOzs7Ozt3QkFLQSxPQUFPLE1BQU07Ozs7O3dDQUtHLE9BQU8sTUFBTTs7Ozs7OzttQkFPbEMsU0FBUzs7Ozs7MEJBS0YsT0FBTyxNQUFNLGNBQWMsT0FBTyxNQUFNOzs7Ozs7O2VBT25ELFNBQVMsY0FBYyxTQUFTO1FBQ3ZDLEtBQUs7R0FDUCxZQUFZLENBQUM7RUFDZjtDQUNGO0FBQ0YifQ==
|