sonamu 0.12.0 → 0.13.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 +1 -2
- package/dist/ai/agents/agent.js +2 -3
- package/dist/ai/agents/index.js +1 -2
- package/dist/ai/index.js +1 -2
- package/dist/ai/providers/rtzr/api.js +1 -2
- package/dist/ai/providers/rtzr/error.js +2 -3
- package/dist/ai/providers/rtzr/model.js +1 -2
- package/dist/ai/providers/rtzr/options.js +1 -2
- package/dist/ai/providers/rtzr/provider.js +1 -2
- package/dist/ai/providers/rtzr/utils.js +1 -2
- package/dist/api/base-frame.js +4 -4
- package/dist/api/caster.d.ts +1 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +9 -9
- package/dist/api/code-converters.js +6 -5
- package/dist/api/config.d.ts +1 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +2 -3
- package/dist/api/context.d.ts +2 -3
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +2 -3
- package/dist/api/decorators.js +2 -3
- package/dist/api/http-validator.js +2 -3
- package/dist/api/index.js +8 -3
- package/dist/api/secret.js +1 -2
- package/dist/api/sonamu.d.ts +3 -5
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +19 -18
- package/dist/api/validator.js +1 -2
- package/dist/api/websocket-helpers.js +2 -3
- package/dist/auth/audit-log/builders.js +1 -2
- package/dist/auth/audit-log/client-ip.js +2 -3
- package/dist/auth/audit-log/events.js +1 -2
- package/dist/auth/audit-log/plugin.d.ts.map +1 -1
- package/dist/auth/audit-log/plugin.js +2 -3
- package/dist/auth/audit-log-ingestor.js +2 -3
- package/dist/auth/auth-generator.js +2 -3
- package/dist/auth/better-auth-entities.js +1 -2
- package/dist/auth/better-auth-request.js +2 -3
- package/dist/auth/index.js +2 -3
- package/dist/auth/knex-adapter.js +2 -3
- package/dist/auth/plugins/entity-definitions/admin.js +1 -2
- package/dist/auth/plugins/entity-definitions/anonymous.js +1 -2
- package/dist/auth/plugins/entity-definitions/api-key.js +1 -2
- package/dist/auth/plugins/entity-definitions/audit-log.js +1 -2
- package/dist/auth/plugins/entity-definitions/index.js +1 -2
- package/dist/auth/plugins/entity-definitions/jwt.js +1 -2
- package/dist/auth/plugins/entity-definitions/organization.js +1 -2
- package/dist/auth/plugins/entity-definitions/passkey.js +1 -2
- package/dist/auth/plugins/entity-definitions/phone-number.js +1 -2
- package/dist/auth/plugins/entity-definitions/sso.js +1 -2
- package/dist/auth/plugins/entity-definitions/two-factor.js +1 -2
- package/dist/auth/plugins/entity-definitions/username.js +1 -2
- package/dist/auth/plugins/wrappers/admin.d.ts +33 -32
- package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
- 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/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.d.ts +43 -1
- package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/phone-number.js +2 -3
- package/dist/auth/plugins/wrappers/sso.d.ts +138 -187
- package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/sso.js +1 -2
- package/dist/auth/plugins/wrappers/two-factor.d.ts +51 -10
- package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/two-factor.js +2 -3
- package/dist/auth/plugins/wrappers/username.d.ts +39 -5
- package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/username.js +2 -3
- package/dist/bin/build-config.js +5 -5
- package/dist/bin/compiler-policy.js +2 -3
- package/dist/bin/fixture.js +7 -5
- package/dist/bin/hmr-hook-register.js +1 -2
- package/dist/bin/migrate-targets.js +2 -3
- package/dist/bin/test-command.js +2 -3
- package/dist/bin/ts-loader-register.js +2 -3
- package/dist/bin/ts-loader-registration.js +2 -3
- package/dist/bin/typecheck-web.js +2 -3
- package/dist/cache/cache-manager.js +1 -2
- package/dist/cache/decorator.js +2 -3
- package/dist/cache/drivers.js +1 -2
- package/dist/cache/index.js +2 -3
- package/dist/cache-control/cache-control.js +1 -2
- package/dist/code-formatting/index.js +2 -3
- package/dist/code-formatting/oxfmt.js +2 -3
- package/dist/code-formatting/oxlint.js +2 -3
- package/dist/compress/compress.js +1 -2
- package/dist/compress/index.js +2 -2
- package/dist/compress/types.d.ts +1 -1
- package/dist/compress/types.d.ts.map +1 -1
- package/dist/cone/cone-generator.js +2 -3
- package/dist/database/_batch_update.js +1 -2
- package/dist/database/base-model.js +4 -4
- package/dist/database/db.js +4 -4
- package/dist/database/knex.js +2 -3
- package/dist/database/puri-wrapper.js +2 -3
- package/dist/database/puri.js +23 -22
- package/dist/database/puri.types.js +1 -2
- package/dist/database/transaction-context.js +1 -2
- package/dist/database/upsert-builder.js +2 -3
- package/dist/dict/en.js +2 -3
- package/dist/dict/index.js +3 -3
- package/dist/dict/ko.js +2 -3
- package/dist/dict/rc-keys.js +1 -2
- package/dist/dict/sd.js +2 -3
- package/dist/dict/sonamu-dictionary.js +7 -6
- package/dist/dict/utils.js +2 -3
- package/dist/entity/entity-manager.d.ts +66 -66
- package/dist/entity/entity-manager.js +4 -4
- package/dist/entity/entity-template-cone.js +2 -3
- package/dist/entity/entity.js +21 -18
- package/dist/env.js +1 -2
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +2 -3
- package/dist/exceptions/so-exceptions.js +2 -3
- package/dist/filter/index.js +3 -2
- package/dist/filter/types.js +1 -2
- package/dist/filter/utils.js +7 -6
- package/dist/index.js +39 -5
- package/dist/logger/category.js +2 -3
- package/dist/logger/configure.js +5 -5
- package/dist/migration/code-generation.js +23 -16
- package/dist/migration/index-where-predicate.js +2 -3
- package/dist/migration/migration-set.js +2 -3
- package/dist/migration/migrator.js +2 -3
- package/dist/migration/postgresql-schema-reader.js +6 -9
- package/dist/migration/slack-confirm.js +2 -3
- package/dist/naite/naite-reporter.js +2 -3
- package/dist/naite/naite.js +10 -8
- package/dist/runtime-type.js +2 -3
- package/dist/ssr/hmr-opt-out.js +1 -2
- package/dist/ssr/index.js +7 -4
- package/dist/ssr/registry.js +1 -2
- package/dist/ssr/renderer.js +2 -3
- package/dist/storage/base-file.js +1 -2
- package/dist/storage/buffered-file.js +2 -3
- package/dist/storage/drivers.js +1 -2
- package/dist/storage/index.js +2 -3
- package/dist/storage/s3-driver.js +1 -2
- package/dist/storage/storage-manager.js +2 -3
- package/dist/storage/uploaded-file.js +2 -3
- package/dist/stream/__tests__/ws-test-helpers.js +2 -3
- package/dist/stream/index.js +11 -2
- package/dist/stream/sse.js +1 -2
- package/dist/stream/ws-audience-resolver.js +2 -3
- package/dist/stream/ws-audience.js +1 -2
- package/dist/stream/ws-cluster-bus.js +1 -2
- package/dist/stream/ws-delivery.js +2 -3
- package/dist/stream/ws-frame.js +1 -2
- package/dist/stream/ws-local-connection-store.js +2 -3
- package/dist/stream/ws-presence-index.js +1 -2
- package/dist/stream/ws-presence-store.js +2 -3
- package/dist/stream/ws-registry.js +2 -3
- package/dist/stream/ws-session-id.js +1 -2
- package/dist/stream/ws-telemetry-memory.js +3 -4
- package/dist/stream/ws-telemetry-trace.js +1 -2
- package/dist/stream/ws-telemetry.js +2 -3
- package/dist/stream/ws.js +2 -3
- package/dist/syncer/api-parser.js +2 -3
- package/dist/syncer/checksum.js +4 -4
- package/dist/syncer/code-generator.js +4 -4
- package/dist/syncer/entity-operations.js +2 -3
- package/dist/syncer/event-batcher.js +1 -2
- package/dist/syncer/file-copy.js +2 -3
- package/dist/syncer/file-patterns.js +2 -3
- package/dist/syncer/file-tracking.js +2 -3
- package/dist/syncer/filesystem-dependencies.js +1 -2
- package/dist/syncer/index.js +8 -2
- package/dist/syncer/module-loader.js +8 -6
- package/dist/syncer/syncer-actions.js +8 -7
- package/dist/syncer/syncer.js +13 -8
- package/dist/syncer/watcher.js +2 -3
- package/dist/tasks/decorator.js +1 -2
- package/dist/tasks/step-wrapper.js +2 -3
- package/dist/tasks/workflow-manager.js +2 -3
- package/dist/template/entity-converter.js +17 -16
- package/dist/template/helpers.js +2 -3
- package/dist/template/implementations/entity.template.js +2 -3
- package/dist/template/implementations/entry-server.template.js +2 -3
- package/dist/template/implementations/generated.template.js +2 -3
- package/dist/template/implementations/generated_http.template.js +6 -6
- package/dist/template/implementations/generated_sso.template.js +2 -3
- package/dist/template/implementations/http_validators.template.js +2 -3
- package/dist/template/implementations/init_types.template.js +2 -3
- package/dist/template/implementations/model.template.js +4 -4
- package/dist/template/implementations/model_test.template.js +2 -3
- package/dist/template/implementations/queries.template.js +2 -3
- package/dist/template/implementations/sd.template.js +2 -3
- package/dist/template/implementations/services.template.js +2 -3
- package/dist/template/implementations/view_form.template.js +12 -9
- package/dist/template/implementations/view_id_all_select.template.js +2 -3
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +19 -17
- package/dist/template/implementations/view_search_input.template.js +2 -3
- package/dist/template/index.js +9 -3
- package/dist/template/template-manager.js +2 -3
- package/dist/template/template-types.js +1 -2
- package/dist/template/template.js +2 -3
- package/dist/template/zod-converter.js +54 -47
- package/dist/testing/_relation-graph.js +2 -3
- package/dist/testing/bootstrap.js +2 -3
- package/dist/testing/data-explorer.js +2 -3
- package/dist/testing/dev-test-routes.js +2 -3
- package/dist/testing/dev-vitest-manager.js +15 -12
- package/dist/testing/faker-mappings.js +1 -2
- package/dist/testing/filesystem.js +2 -3
- package/dist/testing/fixture-generator.js +2 -3
- package/dist/testing/fixture-loader.js +1 -2
- package/dist/testing/fixture-manager.js +12 -9
- package/dist/testing/global-setup.js +5 -5
- package/dist/testing/index.js +6 -3
- package/dist/testing/naite-vitest-reporter.js +1 -2
- package/dist/testing/parallel-db-manager.js +2 -3
- package/dist/testing/vitest-helpers.js +2 -3
- package/dist/tooling/__tests__/helpers/sonamu-test-root.js +2 -3
- package/dist/tooling/cdd-service.js +1 -2
- package/dist/tooling/cli-tooling.js +1 -2
- package/dist/tooling/fixture-service.js +1 -2
- package/dist/tooling/index.js +1 -2
- package/dist/tooling/test-run-client.js +2 -3
- package/dist/tsdown.api.config.js +1 -2
- package/dist/types/types.js +2 -3
- package/dist/ui/ai-api.d.ts.map +1 -1
- package/dist/ui/ai-api.js +4 -5
- package/dist/ui/ai-client.d.ts +2 -2
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +9 -8
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +11 -8
- package/dist/ui/async-route.js +1 -2
- package/dist/ui/cdd-service.js +22 -21
- package/dist/ui/migrations-api.js +6 -5
- package/dist/ui-web/assets/index-QDMyy31K.js +180 -0
- package/dist/ui-web/assets/index-dV7akMFB.css +1 -0
- package/dist/ui-web/index.html +2 -2
- package/dist/utils/async-utils.js +1 -2
- package/dist/utils/class-name.js +1 -2
- package/dist/utils/console-util.js +1 -2
- package/dist/utils/controller.js +2 -3
- package/dist/utils/esm-utils.js +1 -2
- package/dist/utils/fs-utils.js +2 -3
- package/dist/utils/lodash-able.js +1 -2
- package/dist/utils/model.js +1 -2
- package/dist/utils/object-utils.js +2 -3
- package/dist/utils/path-utils.js +2 -3
- package/dist/utils/process-utils.js +2 -3
- package/dist/utils/runtime-value.js +1 -2
- package/dist/utils/sql-parser.js +2 -3
- package/dist/utils/type-utils.js +8 -8
- package/dist/utils/utils.js +2 -3
- package/dist/utils/zod-error.js +2 -3
- package/dist/vector/chunking.js +1 -2
- package/dist/vector/config.js +1 -2
- package/dist/vector/embedding.js +4 -4
- package/package.json +63 -63
- package/src/ai/agents/agent.ts +1 -1
- package/src/api/__tests__/sonamu.plugins.test.ts +11 -1
- package/src/api/__tests__/sonamu.websocket.test.ts +6 -10
- package/src/api/config.ts +1 -1
- package/src/api/context.ts +2 -8
- package/src/api/sonamu.ts +26 -21
- package/src/auth/audit-log/plugin.ts +2 -0
- package/src/compress/types.ts +1 -1
- package/src/exceptions/error-handler.ts +3 -2
- package/src/template/implementations/model.template.ts +3 -3
- package/src/template/implementations/view_list.template.ts +12 -13
- package/src/ui/ai-api.ts +4 -2
- package/src/ui/ai-client.ts +2 -2
- package/src/ui/api.ts +58 -62
- package/dist/ui-web/assets/index-BMdIyKXS.css +0 -1
- package/dist/ui-web/assets/index-LpE8u19O.js +0 -178
|
@@ -66,7 +66,13 @@ declare class EntityManagerClass {
|
|
|
66
66
|
config?: unknown;
|
|
67
67
|
} | undefined;
|
|
68
68
|
} | undefined;
|
|
69
|
-
type: "
|
|
69
|
+
type: "relation";
|
|
70
|
+
with: string;
|
|
71
|
+
relationType: "BelongsToOne";
|
|
72
|
+
customJoinClause?: string | undefined;
|
|
73
|
+
useConstraint?: boolean | undefined;
|
|
74
|
+
onUpdate?: "CASCADE" | "NO ACTION" | "RESTRICT" | "SET DEFAULT" | "SET NULL" | undefined;
|
|
75
|
+
onDelete?: "CASCADE" | "NO ACTION" | "RESTRICT" | "SET DEFAULT" | "SET NULL" | undefined;
|
|
70
76
|
} | {
|
|
71
77
|
name: string;
|
|
72
78
|
desc?: string | undefined;
|
|
@@ -95,9 +101,11 @@ declare class EntityManagerClass {
|
|
|
95
101
|
config?: unknown;
|
|
96
102
|
} | undefined;
|
|
97
103
|
} | undefined;
|
|
98
|
-
type: "
|
|
99
|
-
|
|
100
|
-
|
|
104
|
+
type: "relation";
|
|
105
|
+
with: string;
|
|
106
|
+
relationType: "HasMany";
|
|
107
|
+
joinColumn: string;
|
|
108
|
+
fromColumn?: string | undefined;
|
|
101
109
|
} | {
|
|
102
110
|
name: string;
|
|
103
111
|
desc?: string | undefined;
|
|
@@ -126,9 +134,12 @@ declare class EntityManagerClass {
|
|
|
126
134
|
config?: unknown;
|
|
127
135
|
} | undefined;
|
|
128
136
|
} | undefined;
|
|
129
|
-
type: "
|
|
130
|
-
|
|
131
|
-
|
|
137
|
+
type: "relation";
|
|
138
|
+
with: string;
|
|
139
|
+
relationType: "ManyToMany";
|
|
140
|
+
joinTable: string;
|
|
141
|
+
onUpdate: "CASCADE" | "NO ACTION" | "RESTRICT" | "SET DEFAULT" | "SET NULL";
|
|
142
|
+
onDelete: "CASCADE" | "NO ACTION" | "RESTRICT" | "SET DEFAULT" | "SET NULL";
|
|
132
143
|
} | {
|
|
133
144
|
name: string;
|
|
134
145
|
desc?: string | undefined;
|
|
@@ -157,9 +168,14 @@ declare class EntityManagerClass {
|
|
|
157
168
|
config?: unknown;
|
|
158
169
|
} | undefined;
|
|
159
170
|
} | undefined;
|
|
160
|
-
type: "
|
|
161
|
-
|
|
162
|
-
|
|
171
|
+
type: "relation";
|
|
172
|
+
with: string;
|
|
173
|
+
relationType: "OneToOne";
|
|
174
|
+
customJoinClause?: string | undefined;
|
|
175
|
+
hasJoinColumn?: boolean | undefined;
|
|
176
|
+
useConstraint?: boolean | undefined;
|
|
177
|
+
onUpdate?: "CASCADE" | "NO ACTION" | "RESTRICT" | "SET DEFAULT" | "SET NULL" | undefined;
|
|
178
|
+
onDelete?: "CASCADE" | "NO ACTION" | "RESTRICT" | "SET DEFAULT" | "SET NULL" | undefined;
|
|
163
179
|
} | {
|
|
164
180
|
name: string;
|
|
165
181
|
desc?: string | undefined;
|
|
@@ -188,8 +204,7 @@ declare class EntityManagerClass {
|
|
|
188
204
|
config?: unknown;
|
|
189
205
|
} | undefined;
|
|
190
206
|
} | undefined;
|
|
191
|
-
type: "
|
|
192
|
-
id: string;
|
|
207
|
+
type: "bigInteger" | "bigInteger[]" | "boolean" | "boolean[]" | "integer" | "integer[]" | "tsvector" | "uuid" | "uuid[]";
|
|
193
208
|
} | {
|
|
194
209
|
name: string;
|
|
195
210
|
desc?: string | undefined;
|
|
@@ -218,10 +233,9 @@ declare class EntityManagerClass {
|
|
|
218
233
|
config?: unknown;
|
|
219
234
|
} | undefined;
|
|
220
235
|
} | undefined;
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
numberType?: "double precision" | "numeric" | "real" | undefined;
|
|
236
|
+
type: "string";
|
|
237
|
+
length?: number | undefined;
|
|
238
|
+
zodFormat?: "base64" | "base64url" | "cidrv4" | "cidrv6" | "cuid" | "cuid2" | "email" | "emoji" | "hashMd5" | "hashSha1" | "hashSha256" | "hashSha384" | "hashSha512" | "hex" | "hostname" | "httpUrl" | "ipv4" | "ipv6" | "isoDate" | "isoDatetime" | "isoDuration" | "isoTime" | "jwt" | "mac" | "nanoid" | "ulid" | "url" | "uuid" | undefined;
|
|
225
239
|
} | {
|
|
226
240
|
name: string;
|
|
227
241
|
desc?: string | undefined;
|
|
@@ -250,10 +264,9 @@ declare class EntityManagerClass {
|
|
|
250
264
|
config?: unknown;
|
|
251
265
|
} | undefined;
|
|
252
266
|
} | undefined;
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
numberType?: "double precision" | "numeric" | "real" | undefined;
|
|
267
|
+
type: "string[]";
|
|
268
|
+
length?: number | undefined;
|
|
269
|
+
zodFormat?: "base64" | "base64url" | "cidrv4" | "cidrv6" | "cuid" | "cuid2" | "email" | "emoji" | "hashMd5" | "hashSha1" | "hashSha256" | "hashSha384" | "hashSha512" | "hex" | "hostname" | "httpUrl" | "ipv4" | "ipv6" | "isoDate" | "isoDatetime" | "isoDuration" | "isoTime" | "jwt" | "mac" | "nanoid" | "ulid" | "url" | "uuid" | undefined;
|
|
257
270
|
} | {
|
|
258
271
|
name: string;
|
|
259
272
|
desc?: string | undefined;
|
|
@@ -282,8 +295,9 @@ declare class EntityManagerClass {
|
|
|
282
295
|
config?: unknown;
|
|
283
296
|
} | undefined;
|
|
284
297
|
} | undefined;
|
|
285
|
-
type: "
|
|
286
|
-
|
|
298
|
+
type: "enum";
|
|
299
|
+
id: string;
|
|
300
|
+
length?: number | undefined;
|
|
287
301
|
} | {
|
|
288
302
|
name: string;
|
|
289
303
|
desc?: string | undefined;
|
|
@@ -312,8 +326,8 @@ declare class EntityManagerClass {
|
|
|
312
326
|
config?: unknown;
|
|
313
327
|
} | undefined;
|
|
314
328
|
} | undefined;
|
|
315
|
-
type: "
|
|
316
|
-
|
|
329
|
+
type: "enum[]";
|
|
330
|
+
id: string;
|
|
317
331
|
} | {
|
|
318
332
|
name: string;
|
|
319
333
|
desc?: string | undefined;
|
|
@@ -344,7 +358,8 @@ declare class EntityManagerClass {
|
|
|
344
358
|
} | undefined;
|
|
345
359
|
precision?: number | undefined;
|
|
346
360
|
scale?: number | undefined;
|
|
347
|
-
type: "
|
|
361
|
+
type: "number";
|
|
362
|
+
numberType?: "double precision" | "numeric" | "real" | undefined;
|
|
348
363
|
} | {
|
|
349
364
|
name: string;
|
|
350
365
|
desc?: string | undefined;
|
|
@@ -375,7 +390,8 @@ declare class EntityManagerClass {
|
|
|
375
390
|
} | undefined;
|
|
376
391
|
precision?: number | undefined;
|
|
377
392
|
scale?: number | undefined;
|
|
378
|
-
type: "
|
|
393
|
+
type: "number[]";
|
|
394
|
+
numberType?: "double precision" | "numeric" | "real" | undefined;
|
|
379
395
|
} | {
|
|
380
396
|
name: string;
|
|
381
397
|
desc?: string | undefined;
|
|
@@ -404,8 +420,8 @@ declare class EntityManagerClass {
|
|
|
404
420
|
config?: unknown;
|
|
405
421
|
} | undefined;
|
|
406
422
|
} | undefined;
|
|
407
|
-
type: "
|
|
408
|
-
|
|
423
|
+
type: "date";
|
|
424
|
+
precision?: number | undefined;
|
|
409
425
|
} | {
|
|
410
426
|
name: string;
|
|
411
427
|
desc?: string | undefined;
|
|
@@ -434,11 +450,8 @@ declare class EntityManagerClass {
|
|
|
434
450
|
config?: unknown;
|
|
435
451
|
} | undefined;
|
|
436
452
|
} | undefined;
|
|
437
|
-
type: "
|
|
438
|
-
|
|
439
|
-
name: string;
|
|
440
|
-
caseInsensitive?: boolean | undefined;
|
|
441
|
-
}[];
|
|
453
|
+
type: "date[]";
|
|
454
|
+
precision?: number | undefined;
|
|
442
455
|
} | {
|
|
443
456
|
name: string;
|
|
444
457
|
desc?: string | undefined;
|
|
@@ -467,9 +480,9 @@ declare class EntityManagerClass {
|
|
|
467
480
|
config?: unknown;
|
|
468
481
|
} | undefined;
|
|
469
482
|
} | undefined;
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
483
|
+
precision?: number | undefined;
|
|
484
|
+
scale?: number | undefined;
|
|
485
|
+
type: "numeric";
|
|
473
486
|
} | {
|
|
474
487
|
name: string;
|
|
475
488
|
desc?: string | undefined;
|
|
@@ -498,8 +511,9 @@ declare class EntityManagerClass {
|
|
|
498
511
|
config?: unknown;
|
|
499
512
|
} | undefined;
|
|
500
513
|
} | undefined;
|
|
501
|
-
|
|
502
|
-
|
|
514
|
+
precision?: number | undefined;
|
|
515
|
+
scale?: number | undefined;
|
|
516
|
+
type: "numeric[]";
|
|
503
517
|
} | {
|
|
504
518
|
name: string;
|
|
505
519
|
desc?: string | undefined;
|
|
@@ -528,8 +542,8 @@ declare class EntityManagerClass {
|
|
|
528
542
|
config?: unknown;
|
|
529
543
|
} | undefined;
|
|
530
544
|
} | undefined;
|
|
531
|
-
type: "
|
|
532
|
-
|
|
545
|
+
type: "json";
|
|
546
|
+
id: string;
|
|
533
547
|
} | {
|
|
534
548
|
name: string;
|
|
535
549
|
desc?: string | undefined;
|
|
@@ -558,13 +572,11 @@ declare class EntityManagerClass {
|
|
|
558
572
|
config?: unknown;
|
|
559
573
|
} | undefined;
|
|
560
574
|
} | undefined;
|
|
561
|
-
type: "
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
onUpdate?: "CASCADE" | "NO ACTION" | "RESTRICT" | "SET DEFAULT" | "SET NULL" | undefined;
|
|
567
|
-
onDelete?: "CASCADE" | "NO ACTION" | "RESTRICT" | "SET DEFAULT" | "SET NULL" | undefined;
|
|
575
|
+
type: "searchText";
|
|
576
|
+
sourceColumns: {
|
|
577
|
+
name: string;
|
|
578
|
+
caseInsensitive?: boolean | undefined;
|
|
579
|
+
}[];
|
|
568
580
|
} | {
|
|
569
581
|
name: string;
|
|
570
582
|
desc?: string | undefined;
|
|
@@ -593,11 +605,9 @@ declare class EntityManagerClass {
|
|
|
593
605
|
config?: unknown;
|
|
594
606
|
} | undefined;
|
|
595
607
|
} | undefined;
|
|
596
|
-
type: "
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
joinColumn: string;
|
|
600
|
-
fromColumn?: string | undefined;
|
|
608
|
+
type: "virtual";
|
|
609
|
+
id: string;
|
|
610
|
+
virtualType?: "code" | "query" | undefined;
|
|
601
611
|
} | {
|
|
602
612
|
name: string;
|
|
603
613
|
desc?: string | undefined;
|
|
@@ -626,12 +636,8 @@ declare class EntityManagerClass {
|
|
|
626
636
|
config?: unknown;
|
|
627
637
|
} | undefined;
|
|
628
638
|
} | undefined;
|
|
629
|
-
type: "
|
|
630
|
-
|
|
631
|
-
relationType: "ManyToMany";
|
|
632
|
-
joinTable: string;
|
|
633
|
-
onUpdate: "CASCADE" | "NO ACTION" | "RESTRICT" | "SET DEFAULT" | "SET NULL";
|
|
634
|
-
onDelete: "CASCADE" | "NO ACTION" | "RESTRICT" | "SET DEFAULT" | "SET NULL";
|
|
639
|
+
type: "vector";
|
|
640
|
+
dimensions: number;
|
|
635
641
|
} | {
|
|
636
642
|
name: string;
|
|
637
643
|
desc?: string | undefined;
|
|
@@ -660,14 +666,8 @@ declare class EntityManagerClass {
|
|
|
660
666
|
config?: unknown;
|
|
661
667
|
} | undefined;
|
|
662
668
|
} | undefined;
|
|
663
|
-
type: "
|
|
664
|
-
|
|
665
|
-
relationType: "OneToOne";
|
|
666
|
-
customJoinClause?: string | undefined;
|
|
667
|
-
hasJoinColumn?: boolean | undefined;
|
|
668
|
-
useConstraint?: boolean | undefined;
|
|
669
|
-
onUpdate?: "CASCADE" | "NO ACTION" | "RESTRICT" | "SET DEFAULT" | "SET NULL" | undefined;
|
|
670
|
-
onDelete?: "CASCADE" | "NO ACTION" | "RESTRICT" | "SET DEFAULT" | "SET NULL" | undefined;
|
|
669
|
+
type: "vector[]";
|
|
670
|
+
dimensions: number;
|
|
671
671
|
})[];
|
|
672
672
|
indexes: {
|
|
673
673
|
type: "hnsw" | "index" | "ivfflat" | "unique";
|
|
@@ -10,7 +10,7 @@ import assert from "assert";
|
|
|
10
10
|
import path from "path";
|
|
11
11
|
import chalk from "chalk";
|
|
12
12
|
import { glob, readFile } from "fs/promises";
|
|
13
|
-
|
|
13
|
+
// src/entity/entity-manager.ts
|
|
14
14
|
function parseEntityJson(source) {
|
|
15
15
|
try {
|
|
16
16
|
return JSON.parse(source);
|
|
@@ -100,7 +100,8 @@ var init_entity_manager = __esmMin((() => {
|
|
|
100
100
|
if (typeId === "SonamuFile[]") return SonamuFileArraySchema;
|
|
101
101
|
const modulePath = this.modulePaths.get(typeId);
|
|
102
102
|
if (!modulePath) return null;
|
|
103
|
-
const
|
|
103
|
+
const moduleFilePath = path.join(explicitApiRootPath ?? Sonamu.apiRootPath, runtimePath(`dist/application/${modulePath}.js`));
|
|
104
|
+
const matched = (await importMembers(moduleFilePath)).find(({ name }) => name === typeId);
|
|
104
105
|
if (!matched || !(matched.value instanceof z.ZodType)) return null;
|
|
105
106
|
return matched.value;
|
|
106
107
|
}
|
|
@@ -198,8 +199,7 @@ var init_entity_manager = __esmMin((() => {
|
|
|
198
199
|
};
|
|
199
200
|
EntityManager = new EntityManagerClass();
|
|
200
201
|
}));
|
|
201
|
-
//#endregion
|
|
202
202
|
init_entity_manager();
|
|
203
203
|
export { EntityManager, init_entity_manager };
|
|
204
204
|
|
|
205
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW1hbmFnZXIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VudGl0eS9lbnRpdHktbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IGdsb2IsIHJlYWRGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHsgcHJldHRpZnlFcnJvciwgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7XG4gIEVudGl0eUpzb25TY2hlbWEsXG4gIGlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlLFxuICBpc1NlYXJjaFRleHRQcm9wLFxuICBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gIFNvbmFtdUZpbGVTY2hlbWEsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlJbmRleCwgdHlwZSBFbnRpdHlKc29uIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnbG9iQXN5bmMgfSBmcm9tIFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGltcG9ydE1lbWJlcnMgfSBmcm9tIFwiLi4vdXRpbHMvZXNtLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyBydW50aW1lUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eSB9IGZyb20gXCIuL2VudGl0eVwiO1xuXG5leHBvcnQgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCA9IFJlY29yZDxcbiAgXCJmc1wiIHwgXCJmc1BsdXJhbFwiIHwgXCJjYW1lbFwiIHwgXCJjYW1lbFBsdXJhbFwiIHwgXCJjYXBpdGFsXCIgfCBcImNhcGl0YWxQbHVyYWxcIiB8IFwidXBwZXJcIiB8IFwiY29uc3RhbnRcIixcbiAgc3RyaW5nXG4+O1xuZXhwb3J0IHR5cGUgVGFibGVTcGVjID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHVuaXF1ZUluZGV4ZXM6IEVudGl0eUluZGV4W107XG4gIGpzb25Db2x1bW5zOiBzdHJpbmdbXTtcbn07XG5cbmZ1bmN0aW9uIHBhcnNlRW50aXR5SnNvbihzb3VyY2U6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHNvdXJjZSk7XG4gIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgLy8gSlNPTiDtjIzshJwg6rOE7JW9IOuwluydmCDsmKTrpZjripQg6rWs66y4IOyYpOulmOuhnCDsoJXqt5ztmZTtlZjqs6Ag7JuQ7J247J2EIOuztOyhtO2VqeuLiOuLpC5cbiAgICBpZiAoIShjYXVzZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZW50aXR5Lmpzb24g7YyM7IuxIOykkSDsmIjquLDsuZgg7JWK7J2AIOyYpOulmOqwgCDrsJzsg53tlojsirXri4jri6QuXCIsIHsgY2F1c2UgfSk7XG4gICAgfVxuICAgIHRocm93IGNhdXNlO1xuICB9XG59XG5cbmNsYXNzIEVudGl0eU1hbmFnZXJDbGFzcyB7XG4gIHByaXZhdGUgZW50aXRpZXM6IE1hcDxzdHJpbmcsIEVudGl0eT4gPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBtb2R1bGVQYXRoczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSB0YWJsZVNwZWNzOiBNYXA8c3RyaW5nLCBUYWJsZVNwZWM+ID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgaXNBdXRvbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIHJlbG9hZCgp6rCAIFNvbmFtdSDstIjquLDtmZQg7JeG7J2064+EIOqwmeydgCDro6jtirjrpbwg64uk7IucIOydveuPhOuhnSDrqoXsi5zsoIEgYXBpIHJvb3Trpbwg67O07KG07ZWp64uI64ukLlxuICBwcml2YXRlIGV4cGxpY2l0QXBpUm9vdFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvLyDqsr3roZwg7KCE64us67Cb7JWEIOuqqOuToCBlbnRpdHkuanNvbiDtjIzsnbwg66Gc65OcXG4gIGFzeW5jIGF1dG9sb2FkKGRvU2lsZW50OiBib29sZWFuID0gZmFsc2UsIGV4cGxpY2l0QXBpUm9vdFBhdGg/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc0F1dG9sb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5leHBsaWNpdEFwaVJvb3RQYXRoID0gZXhwbGljaXRBcGlSb290UGF0aDtcbiAgICBjb25zdCBhcGlSb290UGF0aCA9IGV4cGxpY2l0QXBpUm9vdFBhdGggPz8gU29uYW11LmFwaVJvb3RQYXRoO1xuICAgIGNvbnN0IHBhdGhQYXR0ZXJuID0gcGF0aC5qb2luKGFwaVJvb3RQYXRoLCBcIi9zcmMvYXBwbGljYXRpb24vKiovKi5lbnRpdHkuanNvblwiKTtcblxuICAgIGZvciBhd2FpdCAoY29uc3QgZmlsZSBvZiBnbG9iKHBhdGgucmVzb2x2ZShwYXRoUGF0dGVybikpKSB7XG4gICAgICBjb25zdCBqc29uID0gcGFyc2VFbnRpdHlKc29uKChhd2FpdCByZWFkRmlsZShmaWxlKSkudG9TdHJpbmcoKSk7XG5cbiAgICAgIC8vIGVudGl0eS5qc29uIOyKpO2CpOuniCDqsoDspp1cbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5zY2hlbWFWYWxpZGF0ZShqc29uKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKGFwaVJvb3RQYXRoLCBmaWxlKTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gcHJldHRpZnlFcnJvcihlcnJvcik7XG4gICAgICAgIGlmICghZG9TaWxlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgY2hhbGsucmVkKGBJbnZhbGlkIGVudGl0eS5qc29uIHNjaGVtYTogJHtyZWxhdGl2ZVBhdGh9XFxuJHtjaGFsay55ZWxsb3coZXJyb3JNZXNzYWdlKX1gKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXIoanNvbiwge1xuICAgICAgICBkZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgYXBpUm9vdFBhdGgsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyTm9uRW50aXR5VHlwZU1vZHVsZVBhdGhzKGFwaVJvb3RQYXRoKTtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlQWxsUmVnaXN0ZXJlZFNlYXJjaFRleHRKc29uU291cmNlcyhhcGlSb290UGF0aCk7XG5cbiAgICB0aGlzLmlzQXV0b2xvYWRlZCA9IHRydWU7XG4gIH1cblxuICBzY2hlbWFWYWxpZGF0ZTxWYWx1ZT4oanNvbjogVmFsdWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSBFbnRpdHlKc29uU2NoZW1hLnNhZmVQYXJzZShqc29uKTtcbiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3MgPyBudWxsIDogcmVzdWx0LmVycm9yO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKGRvU2lsZW50OiBib29sZWFuID0gZmFsc2UsIGV4cGxpY2l0QXBpUm9vdFBhdGg/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmVudGl0aWVzLmNsZWFyKCk7XG4gICAgdGhpcy5tb2R1bGVQYXRocy5jbGVhcigpO1xuICAgIHRoaXMudGFibGVTcGVjcy5jbGVhcigpO1xuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hdXRvbG9hZChkb1NpbGVudCwgZXhwbGljaXRBcGlSb290UGF0aCA/PyB0aGlzLmV4cGxpY2l0QXBpUm9vdFBhdGgpO1xuICB9XG5cbiAgYXN5bmMgcmVnaXN0ZXIoXG4gICAganNvbjogRW50aXR5SnNvbixcbiAgICBvcHRpb25zOiB7IGRlZmVyU2VhcmNoVGV4dEpzb25Tb3VyY2VWYWxpZGF0aW9uPzogYm9vbGVhbjsgYXBpUm9vdFBhdGg/OiBzdHJpbmcgfSA9IHt9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IEVudGl0eSB9ID0gYXdhaXQgaW1wb3J0KFwiLi9lbnRpdHlcIik7XG4gICAgY29uc3QgZW50aXR5ID0gbmV3IEVudGl0eShqc29uKTtcbiAgICBhd2FpdCBlbnRpdHkucmVnaXN0ZXJNb2R1bGVQYXRocyhvcHRpb25zLmFwaVJvb3RQYXRoKTtcbiAgICBpZiAoIW9wdGlvbnMuZGVmZXJTZWFyY2hUZXh0SnNvblNvdXJjZVZhbGlkYXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVTZWFyY2hUZXh0SnNvblNvdXJjZXMoZW50aXR5LCBvcHRpb25zLmFwaVJvb3RQYXRoKTtcbiAgICB9XG4gICAgZW50aXR5LnJlZ2lzdGVyVGFibGVTcGVjcygpO1xuICAgIHRoaXMuZW50aXRpZXMuc2V0KGpzb24uaWQsIGVudGl0eSk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZUFsbFJlZ2lzdGVyZWRTZWFyY2hUZXh0SnNvblNvdXJjZXMoYXBpUm9vdFBhdGg/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiB0aGlzLmVudGl0aWVzLnZhbHVlcygpKSB7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlU2VhcmNoVGV4dEpzb25Tb3VyY2VzKGVudGl0eSwgYXBpUm9vdFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVTZWFyY2hUZXh0SnNvblNvdXJjZXMoZW50aXR5OiBFbnRpdHksIGFwaVJvb3RQYXRoPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJvcHNCeU5hbWUgPSBuZXcgTWFwKGVudGl0eS5wcm9wcy5tYXAoKHByb3ApID0+IFtwcm9wLm5hbWUsIHByb3BdKSk7XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgZW50aXR5LnByb3BzKSB7XG4gICAgICBpZiAoIWlzU2VhcmNoVGV4dFByb3AocHJvcCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHByb3Auc291cmNlQ29sdW1ucykge1xuICAgICAgICBjb25zdCBzb3VyY2VQcm9wID0gcHJvcHNCeU5hbWUuZ2V0KHNvdXJjZS5uYW1lKTtcbiAgICAgICAgaWYgKCFzb3VyY2VQcm9wIHx8IHNvdXJjZVByb3AudHlwZSAhPT0gXCJqc29uXCIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHpvZFR5cGUgPSBhd2FpdCB0aGlzLnJlc29sdmVTZWFyY2hUZXh0SnNvblNvdXJjZVR5cGUoXG4gICAgICAgICAgZW50aXR5LFxuICAgICAgICAgIHNvdXJjZVByb3AuaWQsXG4gICAgICAgICAgYXBpUm9vdFBhdGgsXG4gICAgICAgICk7XG4gICAgICAgIGlmICghem9kVHlwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBzZWFyY2hUZXh0IHNvdXJjZSBcIiR7c291cmNlLm5hbWV9XCLsnZgganNvbiDtg4DsnoUgXCIke3NvdXJjZVByb3AuaWR9XCLsnYQo66W8KSDroZzrk5ztlaAg7IiYIOyXhuyKteuLiOuLpC5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlKHpvZFR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYHNlYXJjaFRleHQgc291cmNlIFwiJHtzb3VyY2UubmFtZX1cIuydmCBqc29uIO2DgOyehSBcIiR7c291cmNlUHJvcC5pZH1cIuydgCjripQpIHVud3JhcCDtm4Qgei5hcnJheSh6LnN0cmluZygpKSDsnbTslrTslbwg7ZWp64uI64ukLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVNlYXJjaFRleHRKc29uU291cmNlVHlwZShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0eXBlSWQ6IHN0cmluZyxcbiAgICBleHBsaWNpdEFwaVJvb3RQYXRoPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHouWm9kVHlwZUFueSB8IG51bGw+IHtcbiAgICBjb25zdCBsb2NhbFR5cGUgPSBlbnRpdHkudHlwZXNbdHlwZUlkXTtcbiAgICBpZiAobG9jYWxUeXBlIGluc3RhbmNlb2Ygei5ab2RUeXBlKSB7XG4gICAgICByZXR1cm4gbG9jYWxUeXBlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVnaXN0ZXJlZEVudGl0eSBvZiB0aGlzLmVudGl0aWVzLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCByZWdpc3RlcmVkVHlwZSA9IHJlZ2lzdGVyZWRFbnRpdHkudHlwZXNbdHlwZUlkXTtcbiAgICAgIGlmIChyZWdpc3RlcmVkVHlwZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJlZFR5cGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVJZCA9PT0gXCJTb25hbXVGaWxlXCIpIHtcbiAgICAgIHJldHVybiBTb25hbXVGaWxlU2NoZW1hO1xuICAgIH1cbiAgICBpZiAodHlwZUlkID09PSBcIlNvbmFtdUZpbGVbXVwiKSB7XG4gICAgICByZXR1cm4gU29uYW11RmlsZUFycmF5U2NoZW1hO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLm1vZHVsZVBhdGhzLmdldCh0eXBlSWQpO1xuICAgIGlmICghbW9kdWxlUGF0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kdWxlRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICBleHBsaWNpdEFwaVJvb3RQYXRoID8/IFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICAgIHJ1bnRpbWVQYXRoKGBkaXN0L2FwcGxpY2F0aW9uLyR7bW9kdWxlUGF0aH0uanNgKSxcbiAgICApO1xuICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8dW5rbm93bj4obW9kdWxlRmlsZVBhdGgpO1xuICAgIGNvbnN0IG1hdGNoZWQgPSBpbXBvcnRlZE1lbWJlcnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IHR5cGVJZCk7XG4gICAgaWYgKCFtYXRjaGVkIHx8ICEobWF0Y2hlZC52YWx1ZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVkLnZhbHVlO1xuICB9XG5cbiAgZ2V0KGVudGl0eUlkOiBzdHJpbmcpOiBFbnRpdHkge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXRpZXMuZ2V0KGVudGl0eUlkKTtcbiAgICBpZiAoZW50aXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCBFbnRpdHkg7JqU7LKtICR7ZW50aXR5SWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIGdldEJ5VGFibGUodGFibGU6IHN0cmluZyk6IEVudGl0eSB7XG4gICAgY29uc3QgZW50aXR5ID0gQXJyYXkuZnJvbSh0aGlzLmVudGl0aWVzLnZhbHVlcygpKS5maW5kKFxuICAgICAgKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnRhYmxlID09PSB0YWJsZSxcbiAgICApO1xuICAgIGlmIChlbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIEVudGl0eSDsmpTssq0gJHt0YWJsZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgZXhpc3RzKGVudGl0eUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmVudGl0aWVzLmdldChlbnRpdHlJZCk7XG4gICAgcmV0dXJuIGVudGl0eSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0QWxsSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShFbnRpdHlNYW5hZ2VyLmVudGl0aWVzLmtleXMoKSkudG9Tb3J0ZWQoKTtcbiAgfVxuXG4gIGdldEFsbEVudGl0aWVzKCk6IEVudGl0eVtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudGl0aWVzLnZhbHVlcygpKTtcbiAgfVxuXG4gIGdldEFsbFBhcmVudElkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsSWRzKCkuZmlsdGVyKChlbnRpdHlJZCkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5nZXQoZW50aXR5SWQpO1xuICAgICAgcmV0dXJuIGVudGl0eS5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2hpbGRyZW5JZHMocGFyZW50SWQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxJZHMoKS5maWx0ZXIoKGVudGl0eUlkKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmdldChlbnRpdHlJZCk7XG4gICAgICByZXR1cm4gZW50aXR5LnBhcmVudElkID09PSBwYXJlbnRJZDtcbiAgICB9KTtcbiAgfVxuXG4gIHNldE1vZHVsZVBhdGgoa2V5OiBzdHJpbmcsIG1vZHVsZVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIGNvbnNvbGUuZGVidWcoY2hhbGsuY3lhbihgc2V0TW9kdWxlUGF0aCA6OiAke2tleX0gOjogJHttb2R1bGVQYXRofWApKTtcbiAgICB0aGlzLm1vZHVsZVBhdGhzLnNldChrZXksIG1vZHVsZVBhdGgpO1xuICB9XG5cbiAgZ2V0TW9kdWxlUGF0aChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IHRoaXMubW9kdWxlUGF0aHMuZ2V0KGtleSk7XG4gICAgaWYgKG1vZHVsZVBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIOuqqOuTiCDtjKjsiqQg7JqU7LKtICR7a2V5fWApO1xuICAgIH1cblxuICAgIHJldHVybiBtb2R1bGVQYXRoO1xuICB9XG5cbiAgc2V0VGFibGVTcGVjKHRhYmxlU3BlYzogVGFibGVTcGVjKSB7XG4gICAgdGhpcy50YWJsZVNwZWNzLnNldCh0YWJsZVNwZWMubmFtZSwgdGFibGVTcGVjKTtcbiAgfVxuXG4gIGdldFRhYmxlU3BlYyhrZXk6IHN0cmluZyk6IFRhYmxlU3BlYyB7XG4gICAgY29uc3QgdGFibGVTcGVjID0gdGhpcy50YWJsZVNwZWNzLmdldChrZXkpO1xuICAgIGlmICh0YWJsZVNwZWMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIO2FjOydtOu4lCDsiqTtjpkg7JqU7LKtICR7a2V5fWApO1xuICAgIH1cblxuICAgIHJldHVybiB0YWJsZVNwZWM7XG4gIH1cblxuICBnZXROYW1lc0Zyb21JZChlbnRpdHlJZDogc3RyaW5nKSB7XG4gICAgLy8gZW50aXR5SWTqsIAg64uo67O17IiYIOuPme2YlSDri6jslrTsnbgg6rK97JqwIExpc3Qg67aZ7Jes7IScIOyDneyEsVxuICAgIGNvbnN0IHBsdXJhbGl6ZWQgPVxuICAgICAgaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpID09PSBlbnRpdHlJZFxuICAgICAgICA/IGAke2VudGl0eUlkfUxpc3RgXG4gICAgICAgIDogaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZzOiBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgZnNQbHVyYWw6IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShwbHVyYWxpemVkKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGNhbWVsOiBpbmZsZWN0aW9uLmNhbWVsaXplKGVudGl0eUlkLCB0cnVlKSxcbiAgICAgIGNhbWVsUGx1cmFsOiBpbmZsZWN0aW9uLmNhbWVsaXplKHBsdXJhbGl6ZWQsIHRydWUpLFxuICAgICAgY2FwaXRhbDogZW50aXR5SWQsXG4gICAgICBjYXBpdGFsUGx1cmFsOiBwbHVyYWxpemVkLFxuICAgICAgdXBwZXI6IGVudGl0eUlkLnRvVXBwZXJDYXNlKCksXG4gICAgICBjb25zdGFudDogaW5mbGVjdGlvbi51bmRlcnNjb3JlKGVudGl0eUlkKS50b1VwcGVyQ2FzZSgpLFxuICAgIH0gc2F0aXNmaWVzIEVudGl0eU5hbWVzUmVjb3JkO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudGl0eUlk64qUIE1vZGVs7J2EIOygnOyZuO2VnCBQYXNjYWxDYXNlIOydtOumhOyeheuLiOuLpC4gKGV4LiBcIlVzZXJcIilcbiAgICogQHBhcmFtIGZpbGVQYXRoXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRFbnRpdHlJZEZyb21QYXRoKGZpbGVQYXRoOiBBYnNvbHV0ZVBhdGgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aCk7XG4gICAgY29uc3Qgc3VwcG9ydGVkU3VmZml4ZXMgPSBbXCIubW9kZWwudHNcIiwgXCIubW9kZWwuanNcIiwgXCIuZW50aXR5Lmpzb25cIiwgXCIuZnJhbWUudHNcIiwgXCIuZnJhbWUuanNcIl07XG4gICAgY29uc3QgbWF0Y2hlZFN1ZmZpeCA9IHN1cHBvcnRlZFN1ZmZpeGVzLmZpbmQoKHN1ZmZpeCkgPT4gZmlsZU5hbWUuZW5kc1dpdGgoc3VmZml4KSk7XG5cbiAgICBhc3NlcnQobWF0Y2hlZFN1ZmZpeCwgYOyngOybkO2VmOyngCDslYrripQgZW50aXR5IOqyveuhnOyeheuLiOuLpDogJHtmaWxlUGF0aH1gKTtcblxuICAgIGNvbnN0IGVudGl0eUJhc2VOYW1lID0gZmlsZU5hbWUuc2xpY2UoMCwgLW1hdGNoZWRTdWZmaXgubGVuZ3RoKTtcbiAgICBhc3NlcnQoZW50aXR5QmFzZU5hbWUubGVuZ3RoID4gMCwgYEVudGl0eUlk66W8IOqzhOyCsO2VoCDsiJgg7JeG64qUIOqyveuhnOyeheuLiOuLpDogJHtmaWxlUGF0aH1gKTtcblxuICAgIHJldHVybiBpbmZsZWN0aW9uLmNhbWVsaXplKGVudGl0eUJhc2VOYW1lLnJlcGxhY2UoLy0vZywgXCJfXCIpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVnaXN0ZXJOb25FbnRpdHlUeXBlTW9kdWxlUGF0aHMoYXBpUm9vdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHR5cGVQYXRoc1BhdHRlcm5zID0gW1xuICAgICAgcGF0aC5qb2luKGFwaVJvb3RQYXRoLCBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLnR5cGVzLnRzXCIpKSxcbiAgICAgIHBhdGguam9pbihhcGlSb290UGF0aCwgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi5nZW5lcmF0ZWQudHNcIikpLFxuICAgIF07XG4gICAgY29uc3QgdHlwZVBhdGhzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodHlwZVBhdGhzUGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBnbG9iQXN5bmMocGF0dGVybikpKVxuICAgICkuZmxhdCgpO1xuXG4gICAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB0eXBlUGF0aHMpIHtcbiAgICAgIGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLmdldE1vZHVsZVBhdGhGcm9tVHlwZUZpbGVQYXRoKGZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8dW5rbm93bj4oZmlsZVBhdGgpO1xuICAgICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaW1wb3J0ZWRNZW1iZXJzKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgICAgIHRoaXMuc2V0TW9kdWxlUGF0aChuYW1lLCBtb2R1bGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kdWxlUGF0aEZyb21UeXBlRmlsZVBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBmaWxlUGF0aC5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIik7XG4gICAgY29uc3QgbWF0Y2hlZCA9IG5vcm1hbGl6ZWRQYXRoLm1hdGNoKC9cXC8oPzpzcmN8ZGlzdClcXC9hcHBsaWNhdGlvblxcLyguKylcXC4oPzp0c3xqcykkLyk7XG5cbiAgICBpZiAoIW1hdGNoZWQ/LlsxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7J287J2YIOuqqOuTiCDqsr3roZzrpbwg6rOE7IKw7ZWgIOyImCDsl4bsirXri4jri6Q6ICR7ZmlsZVBhdGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWRbMV07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVudGl0eU1hbmFnZXIgPSBuZXcgRW50aXR5TWFuYWdlckNsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFpQ0EsU0FBUyxnQkFBZ0IsUUFBZ0I7Q0FDdkMsSUFBSTtFQUNGLE9BQU8sS0FBSyxNQUFNLE1BQU07Q0FDMUIsU0FBUyxPQUFPO0VBRWQsSUFBSSxFQUFFLGlCQUFpQixjQUNyQixN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
|
|
205
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW1hbmFnZXIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VudGl0eS9lbnRpdHktbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IGdsb2IsIHJlYWRGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHsgcHJldHRpZnlFcnJvciwgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7XG4gIEVudGl0eUpzb25TY2hlbWEsXG4gIGlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlLFxuICBpc1NlYXJjaFRleHRQcm9wLFxuICBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gIFNvbmFtdUZpbGVTY2hlbWEsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlJbmRleCwgdHlwZSBFbnRpdHlKc29uIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnbG9iQXN5bmMgfSBmcm9tIFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGltcG9ydE1lbWJlcnMgfSBmcm9tIFwiLi4vdXRpbHMvZXNtLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyBydW50aW1lUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eSB9IGZyb20gXCIuL2VudGl0eVwiO1xuXG5leHBvcnQgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCA9IFJlY29yZDxcbiAgXCJmc1wiIHwgXCJmc1BsdXJhbFwiIHwgXCJjYW1lbFwiIHwgXCJjYW1lbFBsdXJhbFwiIHwgXCJjYXBpdGFsXCIgfCBcImNhcGl0YWxQbHVyYWxcIiB8IFwidXBwZXJcIiB8IFwiY29uc3RhbnRcIixcbiAgc3RyaW5nXG4+O1xuZXhwb3J0IHR5cGUgVGFibGVTcGVjID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHVuaXF1ZUluZGV4ZXM6IEVudGl0eUluZGV4W107XG4gIGpzb25Db2x1bW5zOiBzdHJpbmdbXTtcbn07XG5cbmZ1bmN0aW9uIHBhcnNlRW50aXR5SnNvbihzb3VyY2U6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHNvdXJjZSk7XG4gIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgLy8gSlNPTiDtjIzshJwg6rOE7JW9IOuwluydmCDsmKTrpZjripQg6rWs66y4IOyYpOulmOuhnCDsoJXqt5ztmZTtlZjqs6Ag7JuQ7J247J2EIOuztOyhtO2VqeuLiOuLpC5cbiAgICBpZiAoIShjYXVzZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZW50aXR5Lmpzb24g7YyM7IuxIOykkSDsmIjquLDsuZgg7JWK7J2AIOyYpOulmOqwgCDrsJzsg53tlojsirXri4jri6QuXCIsIHsgY2F1c2UgfSk7XG4gICAgfVxuICAgIHRocm93IGNhdXNlO1xuICB9XG59XG5cbmNsYXNzIEVudGl0eU1hbmFnZXJDbGFzcyB7XG4gIHByaXZhdGUgZW50aXRpZXM6IE1hcDxzdHJpbmcsIEVudGl0eT4gPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBtb2R1bGVQYXRoczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSB0YWJsZVNwZWNzOiBNYXA8c3RyaW5nLCBUYWJsZVNwZWM+ID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgaXNBdXRvbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIHJlbG9hZCgp6rCAIFNvbmFtdSDstIjquLDtmZQg7JeG7J2064+EIOqwmeydgCDro6jtirjrpbwg64uk7IucIOydveuPhOuhnSDrqoXsi5zsoIEgYXBpIHJvb3Trpbwg67O07KG07ZWp64uI64ukLlxuICBwcml2YXRlIGV4cGxpY2l0QXBpUm9vdFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvLyDqsr3roZwg7KCE64us67Cb7JWEIOuqqOuToCBlbnRpdHkuanNvbiDtjIzsnbwg66Gc65OcXG4gIGFzeW5jIGF1dG9sb2FkKGRvU2lsZW50OiBib29sZWFuID0gZmFsc2UsIGV4cGxpY2l0QXBpUm9vdFBhdGg/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc0F1dG9sb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5leHBsaWNpdEFwaVJvb3RQYXRoID0gZXhwbGljaXRBcGlSb290UGF0aDtcbiAgICBjb25zdCBhcGlSb290UGF0aCA9IGV4cGxpY2l0QXBpUm9vdFBhdGggPz8gU29uYW11LmFwaVJvb3RQYXRoO1xuICAgIGNvbnN0IHBhdGhQYXR0ZXJuID0gcGF0aC5qb2luKGFwaVJvb3RQYXRoLCBcIi9zcmMvYXBwbGljYXRpb24vKiovKi5lbnRpdHkuanNvblwiKTtcblxuICAgIGZvciBhd2FpdCAoY29uc3QgZmlsZSBvZiBnbG9iKHBhdGgucmVzb2x2ZShwYXRoUGF0dGVybikpKSB7XG4gICAgICBjb25zdCBqc29uID0gcGFyc2VFbnRpdHlKc29uKChhd2FpdCByZWFkRmlsZShmaWxlKSkudG9TdHJpbmcoKSk7XG5cbiAgICAgIC8vIGVudGl0eS5qc29uIOyKpO2CpOuniCDqsoDspp1cbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5zY2hlbWFWYWxpZGF0ZShqc29uKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKGFwaVJvb3RQYXRoLCBmaWxlKTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gcHJldHRpZnlFcnJvcihlcnJvcik7XG4gICAgICAgIGlmICghZG9TaWxlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgY2hhbGsucmVkKGBJbnZhbGlkIGVudGl0eS5qc29uIHNjaGVtYTogJHtyZWxhdGl2ZVBhdGh9XFxuJHtjaGFsay55ZWxsb3coZXJyb3JNZXNzYWdlKX1gKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXIoanNvbiwge1xuICAgICAgICBkZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgYXBpUm9vdFBhdGgsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyTm9uRW50aXR5VHlwZU1vZHVsZVBhdGhzKGFwaVJvb3RQYXRoKTtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlQWxsUmVnaXN0ZXJlZFNlYXJjaFRleHRKc29uU291cmNlcyhhcGlSb290UGF0aCk7XG5cbiAgICB0aGlzLmlzQXV0b2xvYWRlZCA9IHRydWU7XG4gIH1cblxuICBzY2hlbWFWYWxpZGF0ZTxWYWx1ZT4oanNvbjogVmFsdWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSBFbnRpdHlKc29uU2NoZW1hLnNhZmVQYXJzZShqc29uKTtcbiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3MgPyBudWxsIDogcmVzdWx0LmVycm9yO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKGRvU2lsZW50OiBib29sZWFuID0gZmFsc2UsIGV4cGxpY2l0QXBpUm9vdFBhdGg/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmVudGl0aWVzLmNsZWFyKCk7XG4gICAgdGhpcy5tb2R1bGVQYXRocy5jbGVhcigpO1xuICAgIHRoaXMudGFibGVTcGVjcy5jbGVhcigpO1xuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hdXRvbG9hZChkb1NpbGVudCwgZXhwbGljaXRBcGlSb290UGF0aCA/PyB0aGlzLmV4cGxpY2l0QXBpUm9vdFBhdGgpO1xuICB9XG5cbiAgYXN5bmMgcmVnaXN0ZXIoXG4gICAganNvbjogRW50aXR5SnNvbixcbiAgICBvcHRpb25zOiB7IGRlZmVyU2VhcmNoVGV4dEpzb25Tb3VyY2VWYWxpZGF0aW9uPzogYm9vbGVhbjsgYXBpUm9vdFBhdGg/OiBzdHJpbmcgfSA9IHt9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IEVudGl0eSB9ID0gYXdhaXQgaW1wb3J0KFwiLi9lbnRpdHlcIik7XG4gICAgY29uc3QgZW50aXR5ID0gbmV3IEVudGl0eShqc29uKTtcbiAgICBhd2FpdCBlbnRpdHkucmVnaXN0ZXJNb2R1bGVQYXRocyhvcHRpb25zLmFwaVJvb3RQYXRoKTtcbiAgICBpZiAoIW9wdGlvbnMuZGVmZXJTZWFyY2hUZXh0SnNvblNvdXJjZVZhbGlkYXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVTZWFyY2hUZXh0SnNvblNvdXJjZXMoZW50aXR5LCBvcHRpb25zLmFwaVJvb3RQYXRoKTtcbiAgICB9XG4gICAgZW50aXR5LnJlZ2lzdGVyVGFibGVTcGVjcygpO1xuICAgIHRoaXMuZW50aXRpZXMuc2V0KGpzb24uaWQsIGVudGl0eSk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZUFsbFJlZ2lzdGVyZWRTZWFyY2hUZXh0SnNvblNvdXJjZXMoYXBpUm9vdFBhdGg/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiB0aGlzLmVudGl0aWVzLnZhbHVlcygpKSB7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlU2VhcmNoVGV4dEpzb25Tb3VyY2VzKGVudGl0eSwgYXBpUm9vdFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVTZWFyY2hUZXh0SnNvblNvdXJjZXMoZW50aXR5OiBFbnRpdHksIGFwaVJvb3RQYXRoPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJvcHNCeU5hbWUgPSBuZXcgTWFwKGVudGl0eS5wcm9wcy5tYXAoKHByb3ApID0+IFtwcm9wLm5hbWUsIHByb3BdKSk7XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgZW50aXR5LnByb3BzKSB7XG4gICAgICBpZiAoIWlzU2VhcmNoVGV4dFByb3AocHJvcCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHByb3Auc291cmNlQ29sdW1ucykge1xuICAgICAgICBjb25zdCBzb3VyY2VQcm9wID0gcHJvcHNCeU5hbWUuZ2V0KHNvdXJjZS5uYW1lKTtcbiAgICAgICAgaWYgKCFzb3VyY2VQcm9wIHx8IHNvdXJjZVByb3AudHlwZSAhPT0gXCJqc29uXCIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHpvZFR5cGUgPSBhd2FpdCB0aGlzLnJlc29sdmVTZWFyY2hUZXh0SnNvblNvdXJjZVR5cGUoXG4gICAgICAgICAgZW50aXR5LFxuICAgICAgICAgIHNvdXJjZVByb3AuaWQsXG4gICAgICAgICAgYXBpUm9vdFBhdGgsXG4gICAgICAgICk7XG4gICAgICAgIGlmICghem9kVHlwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBzZWFyY2hUZXh0IHNvdXJjZSBcIiR7c291cmNlLm5hbWV9XCLsnZgganNvbiDtg4DsnoUgXCIke3NvdXJjZVByb3AuaWR9XCLsnYQo66W8KSDroZzrk5ztlaAg7IiYIOyXhuyKteuLiOuLpC5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlKHpvZFR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYHNlYXJjaFRleHQgc291cmNlIFwiJHtzb3VyY2UubmFtZX1cIuydmCBqc29uIO2DgOyehSBcIiR7c291cmNlUHJvcC5pZH1cIuydgCjripQpIHVud3JhcCDtm4Qgei5hcnJheSh6LnN0cmluZygpKSDsnbTslrTslbwg7ZWp64uI64ukLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVNlYXJjaFRleHRKc29uU291cmNlVHlwZShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0eXBlSWQ6IHN0cmluZyxcbiAgICBleHBsaWNpdEFwaVJvb3RQYXRoPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHouWm9kVHlwZUFueSB8IG51bGw+IHtcbiAgICBjb25zdCBsb2NhbFR5cGUgPSBlbnRpdHkudHlwZXNbdHlwZUlkXTtcbiAgICBpZiAobG9jYWxUeXBlIGluc3RhbmNlb2Ygei5ab2RUeXBlKSB7XG4gICAgICByZXR1cm4gbG9jYWxUeXBlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVnaXN0ZXJlZEVudGl0eSBvZiB0aGlzLmVudGl0aWVzLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCByZWdpc3RlcmVkVHlwZSA9IHJlZ2lzdGVyZWRFbnRpdHkudHlwZXNbdHlwZUlkXTtcbiAgICAgIGlmIChyZWdpc3RlcmVkVHlwZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJlZFR5cGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVJZCA9PT0gXCJTb25hbXVGaWxlXCIpIHtcbiAgICAgIHJldHVybiBTb25hbXVGaWxlU2NoZW1hO1xuICAgIH1cbiAgICBpZiAodHlwZUlkID09PSBcIlNvbmFtdUZpbGVbXVwiKSB7XG4gICAgICByZXR1cm4gU29uYW11RmlsZUFycmF5U2NoZW1hO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLm1vZHVsZVBhdGhzLmdldCh0eXBlSWQpO1xuICAgIGlmICghbW9kdWxlUGF0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kdWxlRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICBleHBsaWNpdEFwaVJvb3RQYXRoID8/IFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICAgIHJ1bnRpbWVQYXRoKGBkaXN0L2FwcGxpY2F0aW9uLyR7bW9kdWxlUGF0aH0uanNgKSxcbiAgICApO1xuICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8dW5rbm93bj4obW9kdWxlRmlsZVBhdGgpO1xuICAgIGNvbnN0IG1hdGNoZWQgPSBpbXBvcnRlZE1lbWJlcnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IHR5cGVJZCk7XG4gICAgaWYgKCFtYXRjaGVkIHx8ICEobWF0Y2hlZC52YWx1ZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVkLnZhbHVlO1xuICB9XG5cbiAgZ2V0KGVudGl0eUlkOiBzdHJpbmcpOiBFbnRpdHkge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXRpZXMuZ2V0KGVudGl0eUlkKTtcbiAgICBpZiAoZW50aXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCBFbnRpdHkg7JqU7LKtICR7ZW50aXR5SWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIGdldEJ5VGFibGUodGFibGU6IHN0cmluZyk6IEVudGl0eSB7XG4gICAgY29uc3QgZW50aXR5ID0gQXJyYXkuZnJvbSh0aGlzLmVudGl0aWVzLnZhbHVlcygpKS5maW5kKFxuICAgICAgKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnRhYmxlID09PSB0YWJsZSxcbiAgICApO1xuICAgIGlmIChlbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIEVudGl0eSDsmpTssq0gJHt0YWJsZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgZXhpc3RzKGVudGl0eUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmVudGl0aWVzLmdldChlbnRpdHlJZCk7XG4gICAgcmV0dXJuIGVudGl0eSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0QWxsSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShFbnRpdHlNYW5hZ2VyLmVudGl0aWVzLmtleXMoKSkudG9Tb3J0ZWQoKTtcbiAgfVxuXG4gIGdldEFsbEVudGl0aWVzKCk6IEVudGl0eVtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudGl0aWVzLnZhbHVlcygpKTtcbiAgfVxuXG4gIGdldEFsbFBhcmVudElkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsSWRzKCkuZmlsdGVyKChlbnRpdHlJZCkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5nZXQoZW50aXR5SWQpO1xuICAgICAgcmV0dXJuIGVudGl0eS5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2hpbGRyZW5JZHMocGFyZW50SWQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxJZHMoKS5maWx0ZXIoKGVudGl0eUlkKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmdldChlbnRpdHlJZCk7XG4gICAgICByZXR1cm4gZW50aXR5LnBhcmVudElkID09PSBwYXJlbnRJZDtcbiAgICB9KTtcbiAgfVxuXG4gIHNldE1vZHVsZVBhdGgoa2V5OiBzdHJpbmcsIG1vZHVsZVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIGNvbnNvbGUuZGVidWcoY2hhbGsuY3lhbihgc2V0TW9kdWxlUGF0aCA6OiAke2tleX0gOjogJHttb2R1bGVQYXRofWApKTtcbiAgICB0aGlzLm1vZHVsZVBhdGhzLnNldChrZXksIG1vZHVsZVBhdGgpO1xuICB9XG5cbiAgZ2V0TW9kdWxlUGF0aChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IHRoaXMubW9kdWxlUGF0aHMuZ2V0KGtleSk7XG4gICAgaWYgKG1vZHVsZVBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIOuqqOuTiCDtjKjsiqQg7JqU7LKtICR7a2V5fWApO1xuICAgIH1cblxuICAgIHJldHVybiBtb2R1bGVQYXRoO1xuICB9XG5cbiAgc2V0VGFibGVTcGVjKHRhYmxlU3BlYzogVGFibGVTcGVjKSB7XG4gICAgdGhpcy50YWJsZVNwZWNzLnNldCh0YWJsZVNwZWMubmFtZSwgdGFibGVTcGVjKTtcbiAgfVxuXG4gIGdldFRhYmxlU3BlYyhrZXk6IHN0cmluZyk6IFRhYmxlU3BlYyB7XG4gICAgY29uc3QgdGFibGVTcGVjID0gdGhpcy50YWJsZVNwZWNzLmdldChrZXkpO1xuICAgIGlmICh0YWJsZVNwZWMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIO2FjOydtOu4lCDsiqTtjpkg7JqU7LKtICR7a2V5fWApO1xuICAgIH1cblxuICAgIHJldHVybiB0YWJsZVNwZWM7XG4gIH1cblxuICBnZXROYW1lc0Zyb21JZChlbnRpdHlJZDogc3RyaW5nKSB7XG4gICAgLy8gZW50aXR5SWTqsIAg64uo67O17IiYIOuPme2YlSDri6jslrTsnbgg6rK97JqwIExpc3Qg67aZ7Jes7IScIOyDneyEsVxuICAgIGNvbnN0IHBsdXJhbGl6ZWQgPVxuICAgICAgaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpID09PSBlbnRpdHlJZFxuICAgICAgICA/IGAke2VudGl0eUlkfUxpc3RgXG4gICAgICAgIDogaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZzOiBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgZnNQbHVyYWw6IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShwbHVyYWxpemVkKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGNhbWVsOiBpbmZsZWN0aW9uLmNhbWVsaXplKGVudGl0eUlkLCB0cnVlKSxcbiAgICAgIGNhbWVsUGx1cmFsOiBpbmZsZWN0aW9uLmNhbWVsaXplKHBsdXJhbGl6ZWQsIHRydWUpLFxuICAgICAgY2FwaXRhbDogZW50aXR5SWQsXG4gICAgICBjYXBpdGFsUGx1cmFsOiBwbHVyYWxpemVkLFxuICAgICAgdXBwZXI6IGVudGl0eUlkLnRvVXBwZXJDYXNlKCksXG4gICAgICBjb25zdGFudDogaW5mbGVjdGlvbi51bmRlcnNjb3JlKGVudGl0eUlkKS50b1VwcGVyQ2FzZSgpLFxuICAgIH0gc2F0aXNmaWVzIEVudGl0eU5hbWVzUmVjb3JkO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudGl0eUlk64qUIE1vZGVs7J2EIOygnOyZuO2VnCBQYXNjYWxDYXNlIOydtOumhOyeheuLiOuLpC4gKGV4LiBcIlVzZXJcIilcbiAgICogQHBhcmFtIGZpbGVQYXRoXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRFbnRpdHlJZEZyb21QYXRoKGZpbGVQYXRoOiBBYnNvbHV0ZVBhdGgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aCk7XG4gICAgY29uc3Qgc3VwcG9ydGVkU3VmZml4ZXMgPSBbXCIubW9kZWwudHNcIiwgXCIubW9kZWwuanNcIiwgXCIuZW50aXR5Lmpzb25cIiwgXCIuZnJhbWUudHNcIiwgXCIuZnJhbWUuanNcIl07XG4gICAgY29uc3QgbWF0Y2hlZFN1ZmZpeCA9IHN1cHBvcnRlZFN1ZmZpeGVzLmZpbmQoKHN1ZmZpeCkgPT4gZmlsZU5hbWUuZW5kc1dpdGgoc3VmZml4KSk7XG5cbiAgICBhc3NlcnQobWF0Y2hlZFN1ZmZpeCwgYOyngOybkO2VmOyngCDslYrripQgZW50aXR5IOqyveuhnOyeheuLiOuLpDogJHtmaWxlUGF0aH1gKTtcblxuICAgIGNvbnN0IGVudGl0eUJhc2VOYW1lID0gZmlsZU5hbWUuc2xpY2UoMCwgLW1hdGNoZWRTdWZmaXgubGVuZ3RoKTtcbiAgICBhc3NlcnQoZW50aXR5QmFzZU5hbWUubGVuZ3RoID4gMCwgYEVudGl0eUlk66W8IOqzhOyCsO2VoCDsiJgg7JeG64qUIOqyveuhnOyeheuLiOuLpDogJHtmaWxlUGF0aH1gKTtcblxuICAgIHJldHVybiBpbmZsZWN0aW9uLmNhbWVsaXplKGVudGl0eUJhc2VOYW1lLnJlcGxhY2UoLy0vZywgXCJfXCIpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVnaXN0ZXJOb25FbnRpdHlUeXBlTW9kdWxlUGF0aHMoYXBpUm9vdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHR5cGVQYXRoc1BhdHRlcm5zID0gW1xuICAgICAgcGF0aC5qb2luKGFwaVJvb3RQYXRoLCBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLnR5cGVzLnRzXCIpKSxcbiAgICAgIHBhdGguam9pbihhcGlSb290UGF0aCwgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi5nZW5lcmF0ZWQudHNcIikpLFxuICAgIF07XG4gICAgY29uc3QgdHlwZVBhdGhzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodHlwZVBhdGhzUGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBnbG9iQXN5bmMocGF0dGVybikpKVxuICAgICkuZmxhdCgpO1xuXG4gICAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB0eXBlUGF0aHMpIHtcbiAgICAgIGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLmdldE1vZHVsZVBhdGhGcm9tVHlwZUZpbGVQYXRoKGZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8dW5rbm93bj4oZmlsZVBhdGgpO1xuICAgICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaW1wb3J0ZWRNZW1iZXJzKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgICAgIHRoaXMuc2V0TW9kdWxlUGF0aChuYW1lLCBtb2R1bGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kdWxlUGF0aEZyb21UeXBlRmlsZVBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBmaWxlUGF0aC5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIik7XG4gICAgY29uc3QgbWF0Y2hlZCA9IG5vcm1hbGl6ZWRQYXRoLm1hdGNoKC9cXC8oPzpzcmN8ZGlzdClcXC9hcHBsaWNhdGlvblxcLyguKylcXC4oPzp0c3xqcykkLyk7XG5cbiAgICBpZiAoIW1hdGNoZWQ/LlsxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7J287J2YIOuqqOuTiCDqsr3roZzrpbwg6rOE7IKw7ZWgIOyImCDsl4bsirXri4jri6Q6ICR7ZmlsZVBhdGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWRbMV07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVudGl0eU1hbmFnZXIgPSBuZXcgRW50aXR5TWFuYWdlckNsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFpQ0EsU0FBUyxnQkFBZ0IsUUFBZ0I7Q0FDdkMsSUFBSTtFQUNGLE9BQU8sS0FBSyxNQUFNLE1BQU07Q0FDMUIsU0FBUyxPQUFPO0VBRWQsSUFBSSxFQUFFLGlCQUFpQixjQUNyQixN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
|
|
@@ -2,7 +2,7 @@ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
|
2
2
|
import { init_runtime_value, isStringValue } from "../utils/runtime-value.js";
|
|
3
3
|
import { init_types, isBelongsToOneRelationProp, isEnumDefWithCone, isOneToOneRelationProp, isRelationProp, isSubsetDefWithCone } from "../types/types.js";
|
|
4
4
|
import { fakerMappings, init_faker_mappings } from "../testing/faker-mappings.js";
|
|
5
|
-
|
|
5
|
+
// src/entity/entity-template-cone.ts
|
|
6
6
|
/**
|
|
7
7
|
* Entity의 템플릿 cone을 생성합니다.
|
|
8
8
|
*
|
|
@@ -127,7 +127,6 @@ function getEnumScale(_enumId, values, locale) {
|
|
|
127
127
|
function getEnumValueScale(label) {
|
|
128
128
|
return label;
|
|
129
129
|
}
|
|
130
|
-
//#endregion
|
|
131
130
|
__esmMin((() => {
|
|
132
131
|
init_faker_mappings();
|
|
133
132
|
init_types();
|
|
@@ -135,4 +134,4 @@ __esmMin((() => {
|
|
|
135
134
|
}))();
|
|
136
135
|
export { generateTemplateCones };
|
|
137
136
|
|
|
138
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRlbXBsYXRlLWNvbmUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VudGl0eS9lbnRpdHktdGVtcGxhdGUtY29uZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmYWtlck1hcHBpbmdzIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZmFrZXItbWFwcGluZ3NcIjtcbmltcG9ydCB7IHR5cGUgRmFrZXJNYXBwaW5nQ29uZmlnIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZmFrZXItbWFwcGluZ3NcIjtcbmltcG9ydCB7XG4gIHR5cGUgQ29uZSxcbiAgdHlwZSBFbnRpdHlKc29uLFxuICB0eXBlIEVudGl0eVByb3AsXG4gIHR5cGUgT25lVG9PbmVSZWxhdGlvblByb3AsXG4gIHR5cGUgU3Vic2V0RGVmLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wLFxuICBpc0VudW1EZWZXaXRoQ29uZSxcbiAgaXNPbmVUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNSZWxhdGlvblByb3AsXG4gIGlzU3Vic2V0RGVmV2l0aENvbmUsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmdWYWx1ZSB9IGZyb20gXCIuLi91dGlscy9ydW50aW1lLXZhbHVlXCI7XG5cbi8qKlxuICogRW50aXR57J2YIO2FnO2UjOumvyBjb25l7J2EIOyDneyEse2VqeuLiOuLpC5cbiAqXG4gKiBMTE3snYQg7IKs7Jqp7ZWY7KeAIOyViuqzoCBmYWtlci1tYXBwaW5ncy50c+ulvCDtmZzsmqntlZjsl6wg6riw67O4IGNvbmXsnYQg7IOd7ISx7ZWp64uI64ukLlxuICogc3R1YiBlbnRpdHkg7IOd7ISxIOyLnCDsnpDrj5nsnLzroZwg7Zi47Lac65CY7Ja0IOy1nOyGjO2VnOydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDsoJzqs7Xtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVRlbXBsYXRlQ29uZXMoZW50aXR5OiBFbnRpdHlKc29uLCBsb2NhbGU6IFwia29cIiB8IFwiZW5cIiB8IFwiamFcIiA9IFwia29cIikge1xuICBjb25zdCBtYXBwaW5nID0gZmFrZXJNYXBwaW5nc1tsb2NhbGVdO1xuXG4gIGlmICghbWFwcGluZykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbG9jYWxlOiAke2xvY2FsZX1gKTtcbiAgfVxuXG4gIC8vIDEuIEVudGl0eSBjb25lXG4gIGNvbnN0IGVudGl0eUNvbmU6IENvbmUgPSB7XG4gICAgbm90ZTogZ2V0RW50aXR5U2NhbGUoZW50aXR5LCBsb2NhbGUpLFxuICB9O1xuXG4gIC8vIDIuIFByb3AgY29uZXNcbiAgY29uc3QgcHJvcENvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPiA9IHt9O1xuICBmb3IgKGNvbnN0IHByb3Agb2YgZW50aXR5LnByb3BzKSB7XG4gICAgY29uc3QgZmFrZXJDb25maWcgPSBmaW5kRmFrZXJNYXBwaW5nKHByb3AsIG1hcHBpbmcpO1xuXG4gICAgcHJvcENvbmVzW3Byb3AubmFtZV0gPSB7XG4gICAgICBub3RlOiBnZXRQcm9wU2NhbGUocHJvcCwgZmFrZXJDb25maWcsIGxvY2FsZSksXG4gICAgICBmaXh0dXJlR2VuZXJhdG9yOiBmYWtlckNvbmZpZz8uZmFrZXIsXG4gICAgICBkYXRhU291cmNlOiBzaG91bGRIYXZlRGF0YVNvdXJjZShwcm9wKVxuICAgICAgICA/IHsgc3RyYXRlZ3k6IFwicmVjZW50XCIsIGNvbmZpZzogeyBsaW1pdDogNSB9IH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8vIDMuIFN1YnNldCBjb25lc1xuICBjb25zdCBzdWJzZXRDb25lczogUmVjb3JkPHN0cmluZywgQ29uZT4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCBzdWJzZXRdIG9mIE9iamVjdC5lbnRyaWVzKGVudGl0eS5zdWJzZXRzIHx8IHt9KSkge1xuICAgIHN1YnNldENvbmVzW2tleV0gPSB7XG4gICAgICBub3RlOiBnZXRTdWJzZXRTY2FsZShrZXksIHN1YnNldCwgbG9jYWxlKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gNC4gRW51bSBjb25lc1xuICBjb25zdCBlbnVtQ29uZXM6IFJlY29yZDxzdHJpbmcsIENvbmU+ID0ge307XG4gIGZvciAoY29uc3QgW2VudW1JZCwgZW51bURlZl0gb2YgT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1zIHx8IHt9KSkge1xuICAgIGNvbnN0IHZhbHVlcyA9IGlzRW51bURlZldpdGhDb25lKGVudW1EZWYpID8gZW51bURlZi52YWx1ZXMgOiBlbnVtRGVmO1xuXG4gICAgZW51bUNvbmVzW2VudW1JZF0gPSB7XG4gICAgICBub3RlOiBnZXRFbnVtU2NhbGUoZW51bUlkLCB2YWx1ZXMsIGxvY2FsZSksXG4gICAgICB2YWx1ZXM6IE9iamVjdC5rZXlzKHZhbHVlcykucmVkdWNlKFxuICAgICAgICAoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICBhY2Nba2V5XSA9IHtcbiAgICAgICAgICAgIG5vdGU6IGdldEVudW1WYWx1ZVNjYWxlKHZhbHVlc1trZXldIHx8IGtleSksXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgeyBub3RlOiBzdHJpbmcgfT4sXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4geyBlbnRpdHlDb25lLCBwcm9wQ29uZXMsIHN1YnNldENvbmVzLCBlbnVtQ29uZXMgfTtcbn1cblxuLyoqXG4gKiBQcm9w7JeQIOunnuuKlCBmYWtlciBtYXBwaW5n7J2EIOywvuyKteuLiOuLpC5cbiAqXG4gKiDsmrDshKDsiJzsnIQ6XG4gKiAxLiBmaWVsZF9wYXR0ZXJuc+yXkOyEnCBwcm9wIG5hbWUg66ek7LmtICjsoJXtmZXtlZwg7J2066aEIOunpOy5rSlcbiAqIDIuIGZpZWxkX3BhdHRlcm5z7JeQ7IScIOu2gOu2hCDrp6Tsua0gKG5hbWUg7ZWE65Oc6rCAIHVzZXJfbmFtZeydtOuptCBuYW1lIOunpOy5rSlcbiAqIDMuIHR5cGVfZGVmYXVsdHPsl5DshJwgcHJvcCB0eXBlIOunpOy5rVxuICovXG5mdW5jdGlvbiBmaW5kRmFrZXJNYXBwaW5nKFxuICBwcm9wOiBFbnRpdHlQcm9wLFxuICBtYXBwaW5nOiB7XG4gICAgZmllbGRfcGF0dGVybnM6IFJlY29yZDxzdHJpbmcsIEZha2VyTWFwcGluZ0NvbmZpZz47XG4gICAgdHlwZV9kZWZhdWx0czogUmVjb3JkPHN0cmluZywgRmFrZXJNYXBwaW5nQ29uZmlnPjtcbiAgfSxcbik6IEZha2VyTWFwcGluZ0NvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwcm9wTmFtZSA9IHByb3AubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIC8vIDEuIOygle2Zle2VnCDtlYTrk5zrqoUg66ek7LmtXG4gIGlmIChtYXBwaW5nLmZpZWxkX3BhdHRlcm5zW3Byb3BOYW1lXSkge1xuICAgIHJldHVybiBtYXBwaW5nLmZpZWxkX3BhdHRlcm5zW3Byb3BOYW1lXTtcbiAgfVxuXG4gIC8vIDIuIOu2gOu2hCDrp6Tsua0gKHVzZXJfbmFtZSDihpIgbmFtZSwgZW1haWxfYWRkcmVzcyDihpIgZW1haWwpXG4gIGZvciAoY29uc3QgW3BhdHRlcm4sIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMobWFwcGluZy5maWVsZF9wYXR0ZXJucykpIHtcbiAgICBpZiAocHJvcE5hbWUuaW5jbHVkZXMocGF0dGVybikgfHwgcHJvcE5hbWUuZW5kc1dpdGgoYF8ke3BhdHRlcm59YCkpIHtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICB9XG5cbiAgLy8gMy4g7YOA7J6FIOq4sOuzuOqwkiDrp6Tsua1cbiAgY29uc3QgdHlwZUtleSA9IHByb3AudHlwZTtcbiAgaWYgKG1hcHBpbmcudHlwZV9kZWZhdWx0c1t0eXBlS2V5XSkge1xuICAgIHJldHVybiBtYXBwaW5nLnR5cGVfZGVmYXVsdHNbdHlwZUtleV07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEVudGl0eSBzY2FsZeydhCDsg53shLHtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGdldEVudGl0eVNjYWxlKGVudGl0eTogRW50aXR5SnNvbiwgbG9jYWxlOiBcImtvXCIgfCBcImVuXCIgfCBcImphXCIpOiBzdHJpbmcge1xuICBjb25zdCB0aXRsZSA9IGVudGl0eS50aXRsZSB8fCBlbnRpdHkuaWQ7XG5cbiAgY29uc3QgdGVtcGxhdGVzID0ge1xuICAgIGtvOiBgJHt0aXRsZX0g7JeU7Yuw7YuwLiDthYzsiqTtirgg642w7J207YSwIOyDneyEsSDsi5wg6rCBIO2VhOuTnOuKlCDsi6TsoJwg642w7J207YSw7JmAIOycoOyCrO2VnCDtmJXsi53snLzroZwg7IOd7ISx65Cp64uI64ukLmAsXG4gICAgZW46IGAke3RpdGxlfSBlbnRpdHkuIEVhY2ggZmllbGQgaXMgZ2VuZXJhdGVkIGluIGEgZm9ybWF0IHNpbWlsYXIgdG8gcmVhbCBkYXRhLmAsXG4gICAgamE6IGAke3RpdGxlfeOCqOODs+ODhuOCo+ODhuOCo+OAguWQhOODleOCo+ODvOODq+ODieOBr+Wun+mam+OBruODh+ODvOOCv+OBq+S8vOOBn+W9ouW8j+OBp+eUn+aIkOOBleOCjOOBvuOBmeOAgmAsXG4gIH07XG5cbiAgcmV0dXJuIHRlbXBsYXRlc1tsb2NhbGVdO1xufVxuXG4vKipcbiAqIFByb3Agc2NhbGXsnYQg7IOd7ISx7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRQcm9wU2NhbGUoXG4gIHByb3A6IEVudGl0eVByb3AsXG4gIGZha2VyQ29uZmlnOiBGYWtlck1hcHBpbmdDb25maWcgfCB1bmRlZmluZWQsXG4gIGxvY2FsZTogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiLFxuKTogc3RyaW5nIHtcbiAgaWYgKGlzUmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgY29uc3QgdGVtcGxhdGVzID0ge1xuICAgICAga286IGAke3Byb3Aud2l0aH0g7LC47KGwLiDquLDsobQgJHtwcm9wLndpdGh9IOuNsOydtO2EsOulvCDssLjsobDtlanri4jri6QuYCxcbiAgICAgIGVuOiBgUmVmZXJlbmNlIHRvICR7cHJvcC53aXRofS4gUmVmZXJlbmNlcyBleGlzdGluZyAke3Byb3Aud2l0aH0gZGF0YS5gLFxuICAgICAgamE6IGAke3Byb3Aud2l0aH3jgbjjga7lj4LnhafjgILml6LlrZjjga4ke3Byb3Aud2l0aH3jg4fjg7zjgr/jgpLlj4LnhafjgZfjgb7jgZnjgIJgLFxuICAgIH07XG4gICAgcmV0dXJuIHRlbXBsYXRlc1tsb2NhbGVdO1xuICB9XG5cbiAgaWYgKGZha2VyQ29uZmlnPy5jb21tZW50KSB7XG4gICAgY29uc3QgdGVtcGxhdGVzID0ge1xuICAgICAga286IGAke2Zha2VyQ29uZmlnLmNvbW1lbnR9IO2YleyLneycvOuhnCDsg53shLHrkKnri4jri6QuYCxcbiAgICAgIGVuOiBgR2VuZXJhdGVkIGFzICR7ZmFrZXJDb25maWcuY29tbWVudH0uYCxcbiAgICAgIGphOiBgJHtmYWtlckNvbmZpZy5jb21tZW50feW9ouW8j+OBp+eUn+aIkOOBleOCjOOBvuOBmeOAgmAsXG4gICAgfTtcbiAgICByZXR1cm4gdGVtcGxhdGVzW2xvY2FsZV07XG4gIH1cblxuICByZXR1cm4gcHJvcC5uYW1lO1xufVxuXG4vKipcbiAqIFByb3DsnbQgZGF0YVNvdXJjZeulvCDqsIDsoLjslbwg7ZWY64qU7KeAIO2MkOuLqO2VqeuLiOuLpC5cbiAqXG4gKiBCZWxvbmdzVG9PbmUg65iQ64qUIE9uZVRvT25lIChoYXNKb2luQ29sdW1uOiB0cnVlKeyduCDqsr3smrAgZGF0YVNvdXJjZeqwgCDtlYTsmpTtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZEhhdmVEYXRhU291cmNlKHByb3A6IEVudGl0eVByb3ApOiBib29sZWFuIHtcbiAgaWYgKCFpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEJlbG9uZ3NUb09uZeydgCDtla3sg4EgZGF0YVNvdXJjZSDtlYTsmpRcbiAgaWYgKGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBPbmVUb09uZeydgCBoYXNKb2luQ29sdW1uOiB0cnVl7J24IOqyveyasOyXkOunjCBkYXRhU291cmNlIO2VhOyalFxuICBpZiAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIHJldHVybiAocHJvcCBhcyBPbmVUb09uZVJlbGF0aW9uUHJvcCkuaGFzSm9pbkNvbHVtbjtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTdWJzZXQgc2NhbGXsnYQg7IOd7ISx7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRTdWJzZXRTY2FsZShrZXk6IHN0cmluZywgc3Vic2V0OiBTdWJzZXREZWYsIGxvY2FsZTogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiKTogc3RyaW5nIHtcbiAgY29uc3QgZmllbGRzID0gaXNTdWJzZXREZWZXaXRoQ29uZShzdWJzZXQpID8gc3Vic2V0LmZpZWxkcyA6IHN1YnNldDtcbiAgY29uc3QgZmllbGROYW1lcyA9IGZpZWxkcy5tYXAoKGYpID0+IChpc1N0cmluZ1ZhbHVlKGYpID8gZiA6IGYuZmllbGQpKS5qb2luKFwiLCBcIik7XG5cbiAgY29uc3QgdGVtcGxhdGVzID0ge1xuICAgIGtvOiBgJHtrZXl9IOyEnOu4jOyFiy4g7Y+s7ZWo65CcIO2VhOuTnDogJHtmaWVsZE5hbWVzfWAsXG4gICAgZW46IGAke2tleX0gc3Vic2V0LiBJbmNsdWRlZCBmaWVsZHM6ICR7ZmllbGROYW1lc31gLFxuICAgIGphOiBgJHtrZXl944K144OW44K744OD44OI44CC5ZCr44G+44KM44KL44OV44Kj44O844Or44OJOiAke2ZpZWxkTmFtZXN9YCxcbiAgfTtcblxuICByZXR1cm4gdGVtcGxhdGVzW2xvY2FsZV07XG59XG5cbi8qKlxuICogRW51bSBzY2FsZeydhCDsg53shLHtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGdldEVudW1TY2FsZShcbiAgX2VudW1JZDogc3RyaW5nLFxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIGxvY2FsZTogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgdmFsdWVMaXN0ID0gT2JqZWN0LmtleXModmFsdWVzKS5qb2luKFwiLCBcIik7XG5cbiAgY29uc3QgdGVtcGxhdGVzID0ge1xuICAgIGtvOiBg6rCA64ql7ZWcIOqwkjogJHt2YWx1ZUxpc3R9YCxcbiAgICBlbjogYFBvc3NpYmxlIHZhbHVlczogJHt2YWx1ZUxpc3R9YCxcbiAgICBqYTogYOWPr+iDveOBquWApDogJHt2YWx1ZUxpc3R9YCxcbiAgfTtcblxuICByZXR1cm4gdGVtcGxhdGVzW2xvY2FsZV07XG59XG5cbi8qKlxuICogRW51bSB2YWx1ZSBzY2FsZeydhCDsg53shLHtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGdldEVudW1WYWx1ZVNjYWxlKGxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbGFiZWw7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBd0JBLFNBQWdCLHNCQUFzQixRQUFvQixTQUE2QixNQUFNO0NBQzNGLE1BQU0sVUFBVSxjQUFjO0NBRTlCLElBQUksQ0FBQyxTQUNILE1BQU0sSUFBSSxNQUFNLHVCQUF1QixRQUFR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
|
|
137
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRlbXBsYXRlLWNvbmUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VudGl0eS9lbnRpdHktdGVtcGxhdGUtY29uZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmYWtlck1hcHBpbmdzIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZmFrZXItbWFwcGluZ3NcIjtcbmltcG9ydCB7IHR5cGUgRmFrZXJNYXBwaW5nQ29uZmlnIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZmFrZXItbWFwcGluZ3NcIjtcbmltcG9ydCB7XG4gIHR5cGUgQ29uZSxcbiAgdHlwZSBFbnRpdHlKc29uLFxuICB0eXBlIEVudGl0eVByb3AsXG4gIHR5cGUgT25lVG9PbmVSZWxhdGlvblByb3AsXG4gIHR5cGUgU3Vic2V0RGVmLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wLFxuICBpc0VudW1EZWZXaXRoQ29uZSxcbiAgaXNPbmVUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNSZWxhdGlvblByb3AsXG4gIGlzU3Vic2V0RGVmV2l0aENvbmUsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmdWYWx1ZSB9IGZyb20gXCIuLi91dGlscy9ydW50aW1lLXZhbHVlXCI7XG5cbi8qKlxuICogRW50aXR57J2YIO2FnO2UjOumvyBjb25l7J2EIOyDneyEse2VqeuLiOuLpC5cbiAqXG4gKiBMTE3snYQg7IKs7Jqp7ZWY7KeAIOyViuqzoCBmYWtlci1tYXBwaW5ncy50c+ulvCDtmZzsmqntlZjsl6wg6riw67O4IGNvbmXsnYQg7IOd7ISx7ZWp64uI64ukLlxuICogc3R1YiBlbnRpdHkg7IOd7ISxIOyLnCDsnpDrj5nsnLzroZwg7Zi47Lac65CY7Ja0IOy1nOyGjO2VnOydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDsoJzqs7Xtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVRlbXBsYXRlQ29uZXMoZW50aXR5OiBFbnRpdHlKc29uLCBsb2NhbGU6IFwia29cIiB8IFwiZW5cIiB8IFwiamFcIiA9IFwia29cIikge1xuICBjb25zdCBtYXBwaW5nID0gZmFrZXJNYXBwaW5nc1tsb2NhbGVdO1xuXG4gIGlmICghbWFwcGluZykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbG9jYWxlOiAke2xvY2FsZX1gKTtcbiAgfVxuXG4gIC8vIDEuIEVudGl0eSBjb25lXG4gIGNvbnN0IGVudGl0eUNvbmU6IENvbmUgPSB7XG4gICAgbm90ZTogZ2V0RW50aXR5U2NhbGUoZW50aXR5LCBsb2NhbGUpLFxuICB9O1xuXG4gIC8vIDIuIFByb3AgY29uZXNcbiAgY29uc3QgcHJvcENvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPiA9IHt9O1xuICBmb3IgKGNvbnN0IHByb3Agb2YgZW50aXR5LnByb3BzKSB7XG4gICAgY29uc3QgZmFrZXJDb25maWcgPSBmaW5kRmFrZXJNYXBwaW5nKHByb3AsIG1hcHBpbmcpO1xuXG4gICAgcHJvcENvbmVzW3Byb3AubmFtZV0gPSB7XG4gICAgICBub3RlOiBnZXRQcm9wU2NhbGUocHJvcCwgZmFrZXJDb25maWcsIGxvY2FsZSksXG4gICAgICBmaXh0dXJlR2VuZXJhdG9yOiBmYWtlckNvbmZpZz8uZmFrZXIsXG4gICAgICBkYXRhU291cmNlOiBzaG91bGRIYXZlRGF0YVNvdXJjZShwcm9wKVxuICAgICAgICA/IHsgc3RyYXRlZ3k6IFwicmVjZW50XCIsIGNvbmZpZzogeyBsaW1pdDogNSB9IH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8vIDMuIFN1YnNldCBjb25lc1xuICBjb25zdCBzdWJzZXRDb25lczogUmVjb3JkPHN0cmluZywgQ29uZT4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCBzdWJzZXRdIG9mIE9iamVjdC5lbnRyaWVzKGVudGl0eS5zdWJzZXRzIHx8IHt9KSkge1xuICAgIHN1YnNldENvbmVzW2tleV0gPSB7XG4gICAgICBub3RlOiBnZXRTdWJzZXRTY2FsZShrZXksIHN1YnNldCwgbG9jYWxlKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gNC4gRW51bSBjb25lc1xuICBjb25zdCBlbnVtQ29uZXM6IFJlY29yZDxzdHJpbmcsIENvbmU+ID0ge307XG4gIGZvciAoY29uc3QgW2VudW1JZCwgZW51bURlZl0gb2YgT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1zIHx8IHt9KSkge1xuICAgIGNvbnN0IHZhbHVlcyA9IGlzRW51bURlZldpdGhDb25lKGVudW1EZWYpID8gZW51bURlZi52YWx1ZXMgOiBlbnVtRGVmO1xuXG4gICAgZW51bUNvbmVzW2VudW1JZF0gPSB7XG4gICAgICBub3RlOiBnZXRFbnVtU2NhbGUoZW51bUlkLCB2YWx1ZXMsIGxvY2FsZSksXG4gICAgICB2YWx1ZXM6IE9iamVjdC5rZXlzKHZhbHVlcykucmVkdWNlKFxuICAgICAgICAoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICBhY2Nba2V5XSA9IHtcbiAgICAgICAgICAgIG5vdGU6IGdldEVudW1WYWx1ZVNjYWxlKHZhbHVlc1trZXldIHx8IGtleSksXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgeyBub3RlOiBzdHJpbmcgfT4sXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4geyBlbnRpdHlDb25lLCBwcm9wQ29uZXMsIHN1YnNldENvbmVzLCBlbnVtQ29uZXMgfTtcbn1cblxuLyoqXG4gKiBQcm9w7JeQIOunnuuKlCBmYWtlciBtYXBwaW5n7J2EIOywvuyKteuLiOuLpC5cbiAqXG4gKiDsmrDshKDsiJzsnIQ6XG4gKiAxLiBmaWVsZF9wYXR0ZXJuc+yXkOyEnCBwcm9wIG5hbWUg66ek7LmtICjsoJXtmZXtlZwg7J2066aEIOunpOy5rSlcbiAqIDIuIGZpZWxkX3BhdHRlcm5z7JeQ7IScIOu2gOu2hCDrp6Tsua0gKG5hbWUg7ZWE65Oc6rCAIHVzZXJfbmFtZeydtOuptCBuYW1lIOunpOy5rSlcbiAqIDMuIHR5cGVfZGVmYXVsdHPsl5DshJwgcHJvcCB0eXBlIOunpOy5rVxuICovXG5mdW5jdGlvbiBmaW5kRmFrZXJNYXBwaW5nKFxuICBwcm9wOiBFbnRpdHlQcm9wLFxuICBtYXBwaW5nOiB7XG4gICAgZmllbGRfcGF0dGVybnM6IFJlY29yZDxzdHJpbmcsIEZha2VyTWFwcGluZ0NvbmZpZz47XG4gICAgdHlwZV9kZWZhdWx0czogUmVjb3JkPHN0cmluZywgRmFrZXJNYXBwaW5nQ29uZmlnPjtcbiAgfSxcbik6IEZha2VyTWFwcGluZ0NvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwcm9wTmFtZSA9IHByb3AubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIC8vIDEuIOygle2Zle2VnCDtlYTrk5zrqoUg66ek7LmtXG4gIGlmIChtYXBwaW5nLmZpZWxkX3BhdHRlcm5zW3Byb3BOYW1lXSkge1xuICAgIHJldHVybiBtYXBwaW5nLmZpZWxkX3BhdHRlcm5zW3Byb3BOYW1lXTtcbiAgfVxuXG4gIC8vIDIuIOu2gOu2hCDrp6Tsua0gKHVzZXJfbmFtZSDihpIgbmFtZSwgZW1haWxfYWRkcmVzcyDihpIgZW1haWwpXG4gIGZvciAoY29uc3QgW3BhdHRlcm4sIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMobWFwcGluZy5maWVsZF9wYXR0ZXJucykpIHtcbiAgICBpZiAocHJvcE5hbWUuaW5jbHVkZXMocGF0dGVybikgfHwgcHJvcE5hbWUuZW5kc1dpdGgoYF8ke3BhdHRlcm59YCkpIHtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICB9XG5cbiAgLy8gMy4g7YOA7J6FIOq4sOuzuOqwkiDrp6Tsua1cbiAgY29uc3QgdHlwZUtleSA9IHByb3AudHlwZTtcbiAgaWYgKG1hcHBpbmcudHlwZV9kZWZhdWx0c1t0eXBlS2V5XSkge1xuICAgIHJldHVybiBtYXBwaW5nLnR5cGVfZGVmYXVsdHNbdHlwZUtleV07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEVudGl0eSBzY2FsZeydhCDsg53shLHtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGdldEVudGl0eVNjYWxlKGVudGl0eTogRW50aXR5SnNvbiwgbG9jYWxlOiBcImtvXCIgfCBcImVuXCIgfCBcImphXCIpOiBzdHJpbmcge1xuICBjb25zdCB0aXRsZSA9IGVudGl0eS50aXRsZSB8fCBlbnRpdHkuaWQ7XG5cbiAgY29uc3QgdGVtcGxhdGVzID0ge1xuICAgIGtvOiBgJHt0aXRsZX0g7JeU7Yuw7YuwLiDthYzsiqTtirgg642w7J207YSwIOyDneyEsSDsi5wg6rCBIO2VhOuTnOuKlCDsi6TsoJwg642w7J207YSw7JmAIOycoOyCrO2VnCDtmJXsi53snLzroZwg7IOd7ISx65Cp64uI64ukLmAsXG4gICAgZW46IGAke3RpdGxlfSBlbnRpdHkuIEVhY2ggZmllbGQgaXMgZ2VuZXJhdGVkIGluIGEgZm9ybWF0IHNpbWlsYXIgdG8gcmVhbCBkYXRhLmAsXG4gICAgamE6IGAke3RpdGxlfeOCqOODs+ODhuOCo+ODhuOCo+OAguWQhOODleOCo+ODvOODq+ODieOBr+Wun+mam+OBruODh+ODvOOCv+OBq+S8vOOBn+W9ouW8j+OBp+eUn+aIkOOBleOCjOOBvuOBmeOAgmAsXG4gIH07XG5cbiAgcmV0dXJuIHRlbXBsYXRlc1tsb2NhbGVdO1xufVxuXG4vKipcbiAqIFByb3Agc2NhbGXsnYQg7IOd7ISx7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRQcm9wU2NhbGUoXG4gIHByb3A6IEVudGl0eVByb3AsXG4gIGZha2VyQ29uZmlnOiBGYWtlck1hcHBpbmdDb25maWcgfCB1bmRlZmluZWQsXG4gIGxvY2FsZTogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiLFxuKTogc3RyaW5nIHtcbiAgaWYgKGlzUmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgY29uc3QgdGVtcGxhdGVzID0ge1xuICAgICAga286IGAke3Byb3Aud2l0aH0g7LC47KGwLiDquLDsobQgJHtwcm9wLndpdGh9IOuNsOydtO2EsOulvCDssLjsobDtlanri4jri6QuYCxcbiAgICAgIGVuOiBgUmVmZXJlbmNlIHRvICR7cHJvcC53aXRofS4gUmVmZXJlbmNlcyBleGlzdGluZyAke3Byb3Aud2l0aH0gZGF0YS5gLFxuICAgICAgamE6IGAke3Byb3Aud2l0aH3jgbjjga7lj4LnhafjgILml6LlrZjjga4ke3Byb3Aud2l0aH3jg4fjg7zjgr/jgpLlj4LnhafjgZfjgb7jgZnjgIJgLFxuICAgIH07XG4gICAgcmV0dXJuIHRlbXBsYXRlc1tsb2NhbGVdO1xuICB9XG5cbiAgaWYgKGZha2VyQ29uZmlnPy5jb21tZW50KSB7XG4gICAgY29uc3QgdGVtcGxhdGVzID0ge1xuICAgICAga286IGAke2Zha2VyQ29uZmlnLmNvbW1lbnR9IO2YleyLneycvOuhnCDsg53shLHrkKnri4jri6QuYCxcbiAgICAgIGVuOiBgR2VuZXJhdGVkIGFzICR7ZmFrZXJDb25maWcuY29tbWVudH0uYCxcbiAgICAgIGphOiBgJHtmYWtlckNvbmZpZy5jb21tZW50feW9ouW8j+OBp+eUn+aIkOOBleOCjOOBvuOBmeOAgmAsXG4gICAgfTtcbiAgICByZXR1cm4gdGVtcGxhdGVzW2xvY2FsZV07XG4gIH1cblxuICByZXR1cm4gcHJvcC5uYW1lO1xufVxuXG4vKipcbiAqIFByb3DsnbQgZGF0YVNvdXJjZeulvCDqsIDsoLjslbwg7ZWY64qU7KeAIO2MkOuLqO2VqeuLiOuLpC5cbiAqXG4gKiBCZWxvbmdzVG9PbmUg65iQ64qUIE9uZVRvT25lIChoYXNKb2luQ29sdW1uOiB0cnVlKeyduCDqsr3smrAgZGF0YVNvdXJjZeqwgCDtlYTsmpTtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZEhhdmVEYXRhU291cmNlKHByb3A6IEVudGl0eVByb3ApOiBib29sZWFuIHtcbiAgaWYgKCFpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEJlbG9uZ3NUb09uZeydgCDtla3sg4EgZGF0YVNvdXJjZSDtlYTsmpRcbiAgaWYgKGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBPbmVUb09uZeydgCBoYXNKb2luQ29sdW1uOiB0cnVl7J24IOqyveyasOyXkOunjCBkYXRhU291cmNlIO2VhOyalFxuICBpZiAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIHJldHVybiAocHJvcCBhcyBPbmVUb09uZVJlbGF0aW9uUHJvcCkuaGFzSm9pbkNvbHVtbjtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTdWJzZXQgc2NhbGXsnYQg7IOd7ISx7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRTdWJzZXRTY2FsZShrZXk6IHN0cmluZywgc3Vic2V0OiBTdWJzZXREZWYsIGxvY2FsZTogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiKTogc3RyaW5nIHtcbiAgY29uc3QgZmllbGRzID0gaXNTdWJzZXREZWZXaXRoQ29uZShzdWJzZXQpID8gc3Vic2V0LmZpZWxkcyA6IHN1YnNldDtcbiAgY29uc3QgZmllbGROYW1lcyA9IGZpZWxkcy5tYXAoKGYpID0+IChpc1N0cmluZ1ZhbHVlKGYpID8gZiA6IGYuZmllbGQpKS5qb2luKFwiLCBcIik7XG5cbiAgY29uc3QgdGVtcGxhdGVzID0ge1xuICAgIGtvOiBgJHtrZXl9IOyEnOu4jOyFiy4g7Y+s7ZWo65CcIO2VhOuTnDogJHtmaWVsZE5hbWVzfWAsXG4gICAgZW46IGAke2tleX0gc3Vic2V0LiBJbmNsdWRlZCBmaWVsZHM6ICR7ZmllbGROYW1lc31gLFxuICAgIGphOiBgJHtrZXl944K144OW44K744OD44OI44CC5ZCr44G+44KM44KL44OV44Kj44O844Or44OJOiAke2ZpZWxkTmFtZXN9YCxcbiAgfTtcblxuICByZXR1cm4gdGVtcGxhdGVzW2xvY2FsZV07XG59XG5cbi8qKlxuICogRW51bSBzY2FsZeydhCDsg53shLHtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGdldEVudW1TY2FsZShcbiAgX2VudW1JZDogc3RyaW5nLFxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIGxvY2FsZTogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgdmFsdWVMaXN0ID0gT2JqZWN0LmtleXModmFsdWVzKS5qb2luKFwiLCBcIik7XG5cbiAgY29uc3QgdGVtcGxhdGVzID0ge1xuICAgIGtvOiBg6rCA64ql7ZWcIOqwkjogJHt2YWx1ZUxpc3R9YCxcbiAgICBlbjogYFBvc3NpYmxlIHZhbHVlczogJHt2YWx1ZUxpc3R9YCxcbiAgICBqYTogYOWPr+iDveOBquWApDogJHt2YWx1ZUxpc3R9YCxcbiAgfTtcblxuICByZXR1cm4gdGVtcGxhdGVzW2xvY2FsZV07XG59XG5cbi8qKlxuICogRW51bSB2YWx1ZSBzY2FsZeydhCDsg53shLHtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGdldEVudW1WYWx1ZVNjYWxlKGxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbGFiZWw7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBd0JBLFNBQWdCLHNCQUFzQixRQUFvQixTQUE2QixNQUFNO0NBQzNGLE1BQU0sVUFBVSxjQUFjO0NBRTlCLElBQUksQ0FBQyxTQUNILE1BQU0sSUFBSSxNQUFNLHVCQUF1QixRQUFR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
|