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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __esmMin } from "../_virtual/
|
|
1
|
+
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { SD, init_sd } from "../dict/sd.js";
|
|
3
3
|
import { AlreadyProcessedException, init_so_exceptions } from "../exceptions/so-exceptions.js";
|
|
4
4
|
import { init_controller, isTest } from "../utils/controller.js";
|
|
@@ -13,10 +13,9 @@ import { BUILT_IN_TYPES, init_zod_converter } from "../template/zod-converter.js
|
|
|
13
13
|
import { init_lodash_able, wrapIf } from "../utils/lodash-able.js";
|
|
14
14
|
import { init_file_tracking, trackWritten } from "./file-tracking.js";
|
|
15
15
|
import { unique } from "radashi";
|
|
16
|
-
import { mkdir, writeFile } from "fs/promises";
|
|
17
16
|
import path from "path";
|
|
17
|
+
import { mkdir, writeFile } from "fs/promises";
|
|
18
18
|
import chalk from "chalk";
|
|
19
|
-
|
|
20
19
|
//#region src/syncer/code-generator.ts
|
|
21
20
|
/**
|
|
22
21
|
* 템플릿을 렌더링하고 파일로 생성합니다.
|
|
@@ -37,24 +36,18 @@ async function generateTemplate(key, templateOptions, _generateOptions) {
|
|
|
37
36
|
generateOptions
|
|
38
37
|
});
|
|
39
38
|
const keys = [key];
|
|
40
|
-
const pathAndCodes = (await Promise.all(keys.map(async (key
|
|
41
|
-
return await renderTemplate(key
|
|
39
|
+
const pathAndCodes = (await Promise.all(keys.map(async (key) => {
|
|
40
|
+
return await renderTemplate(key, templateOptions);
|
|
42
41
|
}))).flat();
|
|
43
42
|
const filteredPathAndCodes = await (async () => {
|
|
44
|
-
if (generateOptions.overwrite)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const dstFilePaths = targets.map((target) => filePath.replace("/:target/", `/${target}/`));
|
|
51
|
-
return await everyAsync(dstFilePaths, async (dstPath) => !await exists(dstPath));
|
|
52
|
-
});
|
|
53
|
-
}
|
|
43
|
+
if (generateOptions.overwrite) return pathAndCodes;
|
|
44
|
+
else return await filterAsync(pathAndCodes, async (pathAndCode) => {
|
|
45
|
+
const { targets } = Sonamu.config.sync;
|
|
46
|
+
const filePath = `${Sonamu.appRootPath}/${pathAndCode.path}`;
|
|
47
|
+
return await everyAsync(targets.map((target) => filePath.replace("/:target/", `/${target}/`)), async (dstPath) => !await exists(dstPath));
|
|
48
|
+
});
|
|
54
49
|
})();
|
|
55
|
-
if (filteredPathAndCodes.length === 0)
|
|
56
|
-
throw new AlreadyProcessedException(SD("sonamu.error.allFilesExist"));
|
|
57
|
-
}
|
|
50
|
+
if (filteredPathAndCodes.length === 0) throw new AlreadyProcessedException(SD("sonamu.error.allFilesExist"));
|
|
58
51
|
return (await Promise.all(filteredPathAndCodes.map((pathAndCode) => writeCodeToPathEachTarget(pathAndCode)))).flat();
|
|
59
52
|
}
|
|
60
53
|
/**
|
|
@@ -69,15 +62,12 @@ async function renderTemplate(key, options) {
|
|
|
69
62
|
key,
|
|
70
63
|
options
|
|
71
64
|
});
|
|
72
|
-
const
|
|
73
|
-
const rendered = await template.render(options);
|
|
65
|
+
const rendered = await TemplateManager.get(key).render(options);
|
|
74
66
|
const resolved = await resolveRenderedTemplate(key, rendered);
|
|
75
67
|
let preTemplateResolved = [];
|
|
76
|
-
if (rendered.preTemplates) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}))).flat();
|
|
80
|
-
}
|
|
68
|
+
if (rendered.preTemplates) preTemplateResolved = (await Promise.all(rendered.preTemplates.map(({ key, options }) => {
|
|
69
|
+
return renderTemplate(key, options);
|
|
70
|
+
}))).flat();
|
|
81
71
|
return [resolved, ...preTemplateResolved];
|
|
82
72
|
}
|
|
83
73
|
async function resolveRenderedTemplate(key, result) {
|
|
@@ -95,33 +85,27 @@ async function resolveRenderedTemplate(key, result) {
|
|
|
95
85
|
throw new Error(`[resolveRenderedTemplate:${key}] ${importKey} 모듈 경로 찾기 실패: ${error}`, { cause: error });
|
|
96
86
|
}
|
|
97
87
|
let importPath = modulePath;
|
|
98
|
-
if (modulePath.includes("/") || modulePath.includes(".")) {
|
|
99
|
-
importPath = wrapIf(path.relative(path.dirname(filePath), modulePath), (p) => [!p.startsWith("."), `./${p}`]);
|
|
100
|
-
}
|
|
88
|
+
if (modulePath.includes("/") || modulePath.includes(".")) importPath = wrapIf(path.relative(path.dirname(filePath), modulePath), (p) => [!p.startsWith("."), `./${p}`]);
|
|
101
89
|
const existsOne = r.find((importDef) => importDef.from === importPath);
|
|
102
|
-
if (existsOne)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
from: importPath
|
|
108
|
-
});
|
|
109
|
-
}
|
|
90
|
+
if (existsOne) existsOne.keys = unique(existsOne.keys.concat(importKey));
|
|
91
|
+
else r.push({
|
|
92
|
+
keys: [importKey],
|
|
93
|
+
from: importPath
|
|
94
|
+
});
|
|
110
95
|
return r;
|
|
111
96
|
}, []).filter((importDef) => !filePath.endsWith(`${importDef.from.replace("./", "")}.ts`));
|
|
112
97
|
const header = [...customHeaders ?? [], ...importDefs.map((importDef) => `import { ${importDef.keys.join(", ")} } from '${importDef.from}'`)].join("\n");
|
|
113
98
|
const formatted = await (async () => {
|
|
114
|
-
if (key === "generated_http")
|
|
115
|
-
|
|
116
|
-
} else {
|
|
99
|
+
if (key === "generated_http") return [header, body].join("\n\n");
|
|
100
|
+
else {
|
|
117
101
|
Naite.t("resolveRenderedTemplate:beforeFormat", {
|
|
118
102
|
key,
|
|
119
103
|
header,
|
|
120
104
|
body
|
|
121
105
|
});
|
|
122
|
-
const formatted
|
|
123
|
-
Naite.t(`resolveRenderedTemplate:formatted:${key}`, formatted
|
|
124
|
-
return formatted
|
|
106
|
+
const formatted = await formatCode([header, body].join("\n\n"), `${Sonamu.appRootPath}/${filePath}`);
|
|
107
|
+
Naite.t(`resolveRenderedTemplate:formatted:${key}`, formatted);
|
|
108
|
+
return formatted;
|
|
125
109
|
}
|
|
126
110
|
})();
|
|
127
111
|
return {
|
|
@@ -136,9 +120,7 @@ async function writeCodeToPathEachTarget(pathAndCode) {
|
|
|
136
120
|
const dstFilePaths = unique(targets.map((target) => filePath.replace("/:target/", `/${target}/`)));
|
|
137
121
|
return await Promise.all(dstFilePaths.map(async (dstFilePath) => {
|
|
138
122
|
const dir = path.dirname(dstFilePath);
|
|
139
|
-
if (!await exists(dir)) {
|
|
140
|
-
await mkdir(dir, { recursive: true });
|
|
141
|
-
}
|
|
123
|
+
if (!await exists(dir)) await mkdir(dir, { recursive: true });
|
|
142
124
|
await writeFile(dstFilePath, pathAndCode.code);
|
|
143
125
|
await trackWritten(dstFilePath);
|
|
144
126
|
!isTest() && console.log(chalk.bold("Generated: ") + chalk.blue(`${dstFilePath.replace(`${appRootPath}/`, "")}`));
|
|
@@ -160,8 +142,8 @@ var init_code_generator = __esmMin((() => {
|
|
|
160
142
|
init_lodash_able();
|
|
161
143
|
init_file_tracking();
|
|
162
144
|
}));
|
|
163
|
-
|
|
164
145
|
//#endregion
|
|
165
146
|
init_code_generator();
|
|
166
147
|
export { generateTemplate, init_code_generator, renderTemplate };
|
|
167
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1nZW5lcmF0b3IuanMiLCJuYW1lcyI6WyJrZXlzOiBUZW1wbGF0ZUtleVtdIiwia2V5IiwiZmlsdGVyZWRQYXRoQW5kQ29kZXM6IFBhdGhBbmRDb2RlW10iLCJwcmVUZW1wbGF0ZVJlc29sdmVkOiBQYXRoQW5kQ29kZVtdIiwib3B0aW9ucyIsImZvcm1hdHRlZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvY29kZS1nZW5lcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IFNEIH0gZnJvbSBcIi4uL2RpY3Qvc2RcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uIH0gZnJvbSBcIi4uL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IHR5cGUgUmVuZGVyZWRUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZS90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVNYW5hZ2VyIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlLW1hbmFnZXJcIjtcbmltcG9ydCB7IEJVSUxUX0lOX1RZUEVTIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3pvZC1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgR2VuZXJhdGVPcHRpb25zLFxuICB0eXBlIFBhdGhBbmRDb2RlLFxuICB0eXBlIFRlbXBsYXRlS2V5LFxuICB0eXBlIFRlbXBsYXRlT3B0aW9ucyxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBldmVyeUFzeW5jLCBmaWx0ZXJBc3luYyB9IGZyb20gXCIuLi91dGlscy9hc3luYy11dGlsc1wiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IHdyYXBJZiB9IGZyb20gXCIuLi91dGlscy9sb2Rhc2gtYWJsZVwiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHJhY2tXcml0dGVuIH0gZnJvbSBcIi4vZmlsZS10cmFja2luZ1wiO1xuXG4vKipcbiAqIO2FnO2UjOumv+ydhCDroIzrjZTrp4HtlZjqs6Ag7YyM7J2866GcIOyDneyEse2VqeuLiOuLpC5cbiAqIG92ZXJ3cml0ZSDsmLXshZjsnbQgZmFsc2Xsnbgg6rK97JqwLCDsnbTrr7gg7KG07J6s7ZWY64qUIO2MjOydvOydgCDqsbTrhIjrnIHri4jri6QuXG4gKiBAcGFyYW0ga2V5IC0g7YWc7ZSM66a/IO2CpCAo7JiIOiBcImVudGl0eVwiLCBcIm1vZGVsXCIsIFwic2VydmljZVwiIOuTsSlcbiAqIEBwYXJhbSB0ZW1wbGF0ZU9wdGlvbnMgLSDthZztlIzrpr8g66CM642U66eB7JeQIO2VhOyalO2VnCDsmLXshZhcbiAqIEBwYXJhbSBfZ2VuZXJhdGVPcHRpb25zIC0g7IOd7ISxIOyYteyFmCAob3ZlcndyaXRlIOyXrOu2gClcbiAqIEByZXR1cm5zIOyDneyEseuQnCDtjIzsnbwg6rK966GcIOuwsOyXtFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVUZW1wbGF0ZTxUIGV4dGVuZHMgVGVtcGxhdGVLZXk+KFxuICBrZXk6IFQsXG4gIHRlbXBsYXRlT3B0aW9uczogVGVtcGxhdGVPcHRpb25zW1RdLFxuICBfZ2VuZXJhdGVPcHRpb25zPzogR2VuZXJhdGVPcHRpb25zLFxuKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBjb25zdCBnZW5lcmF0ZU9wdGlvbnMgPSB7XG4gICAgb3ZlcndyaXRlOiBmYWxzZSxcbiAgICAuLi5fZ2VuZXJhdGVPcHRpb25zLFxuICB9O1xuICBOYWl0ZS50KFwiZ2VuZXJhdGVUZW1wbGF0ZVwiLCB7IGtleSwgdGVtcGxhdGVPcHRpb25zLCBnZW5lcmF0ZU9wdGlvbnMgfSk7XG5cbiAgLy8g7YKkIGNoaWxkcmVuXG4gIGNvbnN0IGtleXM6IFRlbXBsYXRlS2V5W10gPSBba2V5XTtcblxuICAvLyDthZztlIzrpr8g66CM642UXG4gIGNvbnN0IHBhdGhBbmRDb2RlcyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGtleXMubWFwKGFzeW5jIChrZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlbmRlclRlbXBsYXRlKGtleSwgdGVtcGxhdGVPcHRpb25zKTtcbiAgICAgIH0pLFxuICAgIClcbiAgKS5mbGF0KCk7XG5cbiAgY29uc3QgZmlsdGVyZWRQYXRoQW5kQ29kZXM6IFBhdGhBbmRDb2RlW10gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChnZW5lcmF0ZU9wdGlvbnMub3ZlcndyaXRlKSB7XG4gICAgICByZXR1cm4gcGF0aEFuZENvZGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXdhaXQgZmlsdGVyQXN5bmMocGF0aEFuZENvZGVzLCBhc3luYyAocGF0aEFuZENvZGUpID0+IHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7U29uYW11LmFwcFJvb3RQYXRofS8ke3BhdGhBbmRDb2RlLnBhdGh9YDtcbiAgICAgICAgY29uc3QgZHN0RmlsZVBhdGhzID0gdGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4gZmlsZVBhdGgucmVwbGFjZShcIi86dGFyZ2V0L1wiLCBgLyR7dGFyZ2V0fS9gKSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBldmVyeUFzeW5jKGRzdEZpbGVQYXRocywgYXN5bmMgKGRzdFBhdGgpID0+ICEoYXdhaXQgZXhpc3RzKGRzdFBhdGgpKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pKCk7XG5cbiAgaWYgKGZpbHRlcmVkUGF0aEFuZENvZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLmFsbEZpbGVzRXhpc3RcIikpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZpbHRlcmVkUGF0aEFuZENvZGVzLm1hcCgocGF0aEFuZENvZGUpID0+IHdyaXRlQ29kZVRvUGF0aEVhY2hUYXJnZXQocGF0aEFuZENvZGUpKSxcbiAgICApXG4gICkuZmxhdCgpO1xufVxuXG4vKipcbiAqIO2FnO2UjOumv+ydhCDroIzrjZTrp4HtlZjsl6wgUGF0aEFuZENvZGUg6rCd7LK066W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAqIO2MjOydvOuhnCDsk7Dsp4Ag7JWK6rOgIOuplOuqqOumrOyDgeyXkOyEnOunjCDroIzrjZTrp4Htlanri4jri6QuXG4gKiBAcGFyYW0ga2V5IC0g7YWc7ZSM66a/IO2CpFxuICogQHBhcmFtIG9wdGlvbnMgLSDthZztlIzrpr8g66CM642U66eBIOyYteyFmFxuICogQHJldHVybnMg6rK966Gc7JmAIOy9lOuTnCDsjI3snZgg67Cw7Je0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJUZW1wbGF0ZTxUIGV4dGVuZHMga2V5b2YgVGVtcGxhdGVPcHRpb25zPihcbiAga2V5OiBULFxuICBvcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVF0sXG4pOiBQcm9taXNlPFBhdGhBbmRDb2RlW10+IHtcbiAgTmFpdGUudChcInJlbmRlclRlbXBsYXRlXCIsIHsga2V5LCBvcHRpb25zIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGVNYW5hZ2VyLmdldChrZXkpO1xuXG4gIGNvbnN0IHJlbmRlcmVkID0gYXdhaXQgdGVtcGxhdGUucmVuZGVyKG9wdGlvbnMpO1xuICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVSZW5kZXJlZFRlbXBsYXRlKGtleSwgcmVuZGVyZWQpO1xuXG4gIGxldCBwcmVUZW1wbGF0ZVJlc29sdmVkOiBQYXRoQW5kQ29kZVtdID0gW107XG4gIGlmIChyZW5kZXJlZC5wcmVUZW1wbGF0ZXMpIHtcbiAgICBwcmVUZW1wbGF0ZVJlc29sdmVkID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHJlbmRlcmVkLnByZVRlbXBsYXRlcy5tYXAoKHsga2V5LCBvcHRpb25zIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVuZGVyVGVtcGxhdGUoa2V5LCBvcHRpb25zKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgKS5mbGF0KCk7XG4gIH1cblxuICByZXR1cm4gW3Jlc29sdmVkLCAuLi5wcmVUZW1wbGF0ZVJlc29sdmVkXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoXG4gIGtleTogVGVtcGxhdGVLZXksXG4gIHJlc3VsdDogUmVuZGVyZWRUZW1wbGF0ZSxcbik6IFByb21pc2U8UGF0aEFuZENvZGU+IHtcbiAgTmFpdGUudChgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUke2tleX1gLCB7IGtleSwgcmVzdWx0IH0pO1xuXG4gIGNvbnN0IHsgdGFyZ2V0LCBwYXRoOiBmaWxlUGF0aCwgYm9keSwgaW1wb3J0S2V5cywgY3VzdG9tSGVhZGVycyB9ID0gcmVzdWx0O1xuXG4gIC8vIGltcG9ydCDtlaAg64yA7IOB7J2YIOuMgOyDgSBwYXRoIOy2lOy2nFxuICBjb25zdCBidWlsdEluU2NoZW1hTmFtZXMgPSBPYmplY3QudmFsdWVzKEJVSUxUX0lOX1RZUEVTKS5tYXAoKGluZm8pID0+IGluZm8uc2NoZW1hTmFtZSBhcyBzdHJpbmcpO1xuICBjb25zdCBpbXBvcnREZWZzID0gaW1wb3J0S2V5c1xuICAgIC8vIOuCtOyepSDtg4DsnoUg7Iqk7YKk66eI64qUIOydtOuvuCBzb25hbXXsl5DshJwgaW1wb3J065CY66+A66GcIOygnOyZuFxuICAgIC5maWx0ZXIoKGltcG9ydEtleSkgPT4gIWJ1aWx0SW5TY2hlbWFOYW1lcy5pbmNsdWRlcyhpbXBvcnRLZXkpKVxuICAgIC5yZWR1Y2UoXG4gICAgICAociwgaW1wb3J0S2V5KSA9PiB7XG4gICAgICAgIGxldCBtb2R1bGVQYXRoID0gaW1wb3J0S2V5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1vZHVsZVBhdGggPSBFbnRpdHlNYW5hZ2VyLmdldE1vZHVsZVBhdGgoaW1wb3J0S2V5KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgW3Jlc29sdmVSZW5kZXJlZFRlbXBsYXRlOiR7a2V5fV0gJHtpbXBvcnRLZXl9IOuqqOuTiCDqsr3roZwg7LC+6riwIOyLpO2MqDogJHtlcnJvcn1gLFxuICAgICAgICAgICAgeyBjYXVzZTogZXJyb3IgfSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbXBvcnRQYXRoID0gbW9kdWxlUGF0aDtcbiAgICAgICAgaWYgKG1vZHVsZVBhdGguaW5jbHVkZXMoXCIvXCIpIHx8IG1vZHVsZVBhdGguaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgaW1wb3J0UGF0aCA9IHdyYXBJZihwYXRoLnJlbGF0aXZlKHBhdGguZGlybmFtZShmaWxlUGF0aCksIG1vZHVsZVBhdGgpLCAocCkgPT4gW1xuICAgICAgICAgICAgIXAuc3RhcnRzV2l0aChcIi5cIiksXG4gICAgICAgICAgICBgLi8ke3B9YCxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOqwmeydgCDtjIzsnbzsl5DshJwgaW1wb3J0IO2VmOuKlCDqsr3smrAga2V5cyDroZwg64KY7Je0IOyymOumrFxuICAgICAgICBjb25zdCBleGlzdHNPbmUgPSByLmZpbmQoKGltcG9ydERlZikgPT4gaW1wb3J0RGVmLmZyb20gPT09IGltcG9ydFBhdGgpO1xuICAgICAgICBpZiAoZXhpc3RzT25lKSB7XG4gICAgICAgICAgZXhpc3RzT25lLmtleXMgPSB1bmlxdWUoZXhpc3RzT25lLmtleXMuY29uY2F0KGltcG9ydEtleSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHIucHVzaCh7XG4gICAgICAgICAgICBrZXlzOiBbaW1wb3J0S2V5XSxcbiAgICAgICAgICAgIGZyb206IGltcG9ydFBhdGgsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9LFxuICAgICAgW10gYXMge1xuICAgICAgICBrZXlzOiBzdHJpbmdbXTtcbiAgICAgICAgZnJvbTogc3RyaW5nO1xuICAgICAgfVtdLFxuICAgIClcbiAgICAvLyDshYDtlIQg7LC47KGwIOuwqeyngFxuICAgIC5maWx0ZXIoKGltcG9ydERlZikgPT4gIWZpbGVQYXRoLmVuZHNXaXRoKGAke2ltcG9ydERlZi5mcm9tLnJlcGxhY2UoXCIuL1wiLCBcIlwiKX0udHNgKSk7XG5cbiAgLy8g7Luk7Iqk7YWAIO2XpOuNlCDtj6ztlajtlZjsl6wg7Zek642UIOyDneyEsVxuICBjb25zdCBoZWFkZXIgPSBbXG4gICAgLi4uKGN1c3RvbUhlYWRlcnMgPz8gW10pLFxuICAgIC4uLmltcG9ydERlZnMubWFwKFxuICAgICAgKGltcG9ydERlZikgPT4gYGltcG9ydCB7ICR7aW1wb3J0RGVmLmtleXMuam9pbihcIiwgXCIpfSB9IGZyb20gJyR7aW1wb3J0RGVmLmZyb219J2AsXG4gICAgKSxcbiAgXS5qb2luKFwiXFxuXCIpO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKGtleSA9PT0gXCJnZW5lcmF0ZWRfaHR0cFwiKSB7XG4gICAgICByZXR1cm4gW2hlYWRlciwgYm9keV0uam9pbihcIlxcblxcblwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgTmFpdGUudChcInJlc29sdmVSZW5kZXJlZFRlbXBsYXRlOmJlZm9yZUZvcm1hdFwiLCB7IGtleSwgaGVhZGVyLCBib2R5IH0pO1xuICAgICAgY29uc3QgZm9ybWF0dGVkID0gYXdhaXQgZm9ybWF0Q29kZShcbiAgICAgICAgW2hlYWRlciwgYm9keV0uam9pbihcIlxcblxcblwiKSxcbiAgICAgICAgYCR7U29uYW11LmFwcFJvb3RQYXRofS8ke2ZpbGVQYXRofWAsXG4gICAgICApO1xuICAgICAgTmFpdGUudChgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGU6Zm9ybWF0dGVkOiR7a2V5fWAsIGZvcm1hdHRlZCk7XG4gICAgICByZXR1cm4gZm9ybWF0dGVkO1xuICAgIH1cbiAgfSkoKTtcblxuICByZXR1cm4ge1xuICAgIHBhdGg6IGAke3RhcmdldH0vJHtmaWxlUGF0aH1gLFxuICAgIGNvZGU6IGZvcm1hdHRlZCxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVDb2RlVG9QYXRoRWFjaFRhcmdldChwYXRoQW5kQ29kZTogUGF0aEFuZENvZGUpOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIGNvbnN0IHsgdGFyZ2V0cyB9ID0gU29uYW11LmNvbmZpZy5zeW5jO1xuICBjb25zdCB7IGFwcFJvb3RQYXRoIH0gPSBTb25hbXU7XG4gIGNvbnN0IGZpbGVQYXRoID0gYCR7U29uYW11LmFwcFJvb3RQYXRofS8ke3BhdGhBbmRDb2RlLnBhdGh9YCBhcyBBYnNvbHV0ZVBhdGg7XG5cbiAgY29uc3QgZHN0RmlsZVBhdGhzID0gdW5pcXVlKFxuICAgIHRhcmdldHMubWFwKCh0YXJnZXQpID0+IGZpbGVQYXRoLnJlcGxhY2UoXCIvOnRhcmdldC9cIiwgYC8ke3RhcmdldH0vYCkpIGFzIEFic29sdXRlUGF0aFtdLFxuICApO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgZHN0RmlsZVBhdGhzLm1hcChhc3luYyAoZHN0RmlsZVBhdGgpID0+IHtcbiAgICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RGaWxlUGF0aCk7XG4gICAgICBpZiAoIShhd2FpdCBleGlzdHMoZGlyKSkpIHtcbiAgICAgICAgYXdhaXQgbWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHdyaXRlRmlsZShkc3RGaWxlUGF0aCwgcGF0aEFuZENvZGUuY29kZSk7XG4gICAgICAvLyDrsKnquIgg7Jqw66as6rCAIOyTtCBwYXRo66W8IOuTseuhnSDihpIgZGV2IHdhdGNoZXLsnZgg7ZuE7IaNIGNoYW5nZSDsnbTrsqTtirjqsIBcbiAgICAgIC8vIOyZuOu2gCDrs4Dqsr3snLzroZwg7Jik7J2465CY7KeAIOyViuuPhOuhnSDqsbDrpoQg6rCA65OcIOyekOujjCDsoJzqs7UuXG4gICAgICBhd2FpdCB0cmFja1dyaXR0ZW4oZHN0RmlsZVBhdGgpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNoYWxrLmJvbGQoXCJHZW5lcmF0ZWQ6IFwiKSArIGNoYWxrLmJsdWUoYCR7ZHN0RmlsZVBhdGgucmVwbGFjZShgJHthcHBSb290UGF0aH0vYCwgXCJcIil9YCksXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZHN0RmlsZVBhdGg7XG4gICAgfSksXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQ0EsZUFBc0IsaUJBQ3BCLEtBQ0EsaUJBQ0Esa0JBQ3lCO0NBQ3pCLE1BQU0sa0JBQWtCO0VBQ3RCLFdBQVc7RUFDWCxHQUFHO0VBQ0o7QUFDRCxPQUFNLEVBQUUsb0JBQW9CO0VBQUU7RUFBSztFQUFpQjtF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
|
|
148
|
+
|
|
149
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1nZW5lcmF0b3IuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9jb2RlLWdlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBta2Rpciwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgdHlwZSBSZW5kZXJlZFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tIFwiLi4vdGVtcGxhdGUvdGVtcGxhdGUtbWFuYWdlclwiO1xuaW1wb3J0IHsgQlVJTFRfSU5fVFlQRVMgfSBmcm9tIFwiLi4vdGVtcGxhdGUvem9kLWNvbnZlcnRlclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBHZW5lcmF0ZU9wdGlvbnMsXG4gIHR5cGUgUGF0aEFuZENvZGUsXG4gIHR5cGUgVGVtcGxhdGVLZXksXG4gIHR5cGUgVGVtcGxhdGVPcHRpb25zLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGV2ZXJ5QXN5bmMsIGZpbHRlckFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi91dGlscy9mb3JtYXR0ZXJcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgd3JhcElmIH0gZnJvbSBcIi4uL3V0aWxzL2xvZGFzaC1hYmxlXCI7XG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyB0cmFja1dyaXR0ZW4gfSBmcm9tIFwiLi9maWxlLXRyYWNraW5nXCI7XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOqzoCDtjIzsnbzroZwg7IOd7ISx7ZWp64uI64ukLlxuICogb3ZlcndyaXRlIOyYteyFmOydtCBmYWxzZeyduCDqsr3smrAsIOydtOuvuCDsobTsnqztlZjripQg7YyM7J287J2AIOqxtOuEiOucgeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkICjsmIg6IFwiZW50aXR5XCIsIFwibW9kZWxcIiwgXCJzZXJ2aWNlXCIg65OxKVxuICogQHBhcmFtIHRlbXBsYXRlT3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Hsl5Ag7ZWE7JqU7ZWcIOyYteyFmFxuICogQHBhcmFtIF9nZW5lcmF0ZU9wdGlvbnMgLSDsg53shLEg7Ji17IWYIChvdmVyd3JpdGUg7Jes67aAKVxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZUtleT4oXG4gIGtleTogVCxcbiAgdGVtcGxhdGVPcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVF0sXG4gIF9nZW5lcmF0ZU9wdGlvbnM/OiBHZW5lcmF0ZU9wdGlvbnMsXG4pOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIGNvbnN0IGdlbmVyYXRlT3B0aW9ucyA9IHtcbiAgICBvdmVyd3JpdGU6IGZhbHNlLFxuICAgIC4uLl9nZW5lcmF0ZU9wdGlvbnMsXG4gIH07XG4gIE5haXRlLnQoXCJnZW5lcmF0ZVRlbXBsYXRlXCIsIHsga2V5LCB0ZW1wbGF0ZU9wdGlvbnMsIGdlbmVyYXRlT3B0aW9ucyB9KTtcblxuICAvLyDtgqQgY2hpbGRyZW5cbiAgY29uc3Qga2V5czogVGVtcGxhdGVLZXlbXSA9IFtrZXldO1xuXG4gIC8vIO2FnO2UjOumvyDroIzrjZRcbiAgY29uc3QgcGF0aEFuZENvZGVzID0gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAga2V5cy5tYXAoYXN5bmMgKGtleSkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVuZGVyVGVtcGxhdGUoa2V5LCB0ZW1wbGF0ZU9wdGlvbnMpO1xuICAgICAgfSksXG4gICAgKVxuICApLmZsYXQoKTtcblxuICBjb25zdCBmaWx0ZXJlZFBhdGhBbmRDb2RlczogUGF0aEFuZENvZGVbXSA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKGdlbmVyYXRlT3B0aW9ucy5vdmVyd3JpdGUpIHtcbiAgICAgIHJldHVybiBwYXRoQW5kQ29kZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhd2FpdCBmaWx0ZXJBc3luYyhwYXRoQW5kQ29kZXMsIGFzeW5jIChwYXRoQW5kQ29kZSkgPT4ge1xuICAgICAgICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7cGF0aEFuZENvZGUucGF0aH1gO1xuICAgICAgICBjb25zdCBkc3RGaWxlUGF0aHMgPSB0YXJnZXRzLm1hcCgodGFyZ2V0KSA9PiBmaWxlUGF0aC5yZXBsYWNlKFwiLzp0YXJnZXQvXCIsIGAvJHt0YXJnZXR9L2ApKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGV2ZXJ5QXN5bmMoZHN0RmlsZVBhdGhzLCBhc3luYyAoZHN0UGF0aCkgPT4gIShhd2FpdCBleGlzdHMoZHN0UGF0aCkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSkoKTtcblxuICBpZiAoZmlsdGVyZWRQYXRoQW5kQ29kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuYWxsRmlsZXNFeGlzdFwiKSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsdGVyZWRQYXRoQW5kQ29kZXMubWFwKChwYXRoQW5kQ29kZSkgPT4gd3JpdGVDb2RlVG9QYXRoRWFjaFRhcmdldChwYXRoQW5kQ29kZSkpLFxuICAgIClcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOyXrCBQYXRoQW5kQ29kZSDqsJ3ssrTrpbwg67CY7ZmY7ZWp64uI64ukLlxuICog7YyM7J2866GcIOyTsOyngCDslYrqs6Ag66mU66qo66as7IOB7JeQ7ISc66eMIOugjOuNlOunge2VqeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkXG4gKiBAcGFyYW0gb3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Eg7Ji17IWYXG4gKiBAcmV0dXJucyDqsr3roZzsmYAg7L2U65OcIOyMjeydmCDrsLDsl7RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclRlbXBsYXRlPFQgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZU9wdGlvbnM+KFxuICBrZXk6IFQsXG4gIG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXSxcbik6IFByb21pc2U8UGF0aEFuZENvZGVbXT4ge1xuICBOYWl0ZS50KFwicmVuZGVyVGVtcGxhdGVcIiwgeyBrZXksIG9wdGlvbnMgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0KGtleSk7XG5cbiAgY29uc3QgcmVuZGVyZWQgPSBhd2FpdCB0ZW1wbGF0ZS5yZW5kZXIob3B0aW9ucyk7XG4gIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoa2V5LCByZW5kZXJlZCk7XG5cbiAgbGV0IHByZVRlbXBsYXRlUmVzb2x2ZWQ6IFBhdGhBbmRDb2RlW10gPSBbXTtcbiAgaWYgKHJlbmRlcmVkLnByZVRlbXBsYXRlcykge1xuICAgIHByZVRlbXBsYXRlUmVzb2x2ZWQgPSAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcmVuZGVyZWQucHJlVGVtcGxhdGVzLm1hcCgoeyBrZXksIG9wdGlvbnMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZW5kZXJUZW1wbGF0ZShrZXksIG9wdGlvbnMpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICApLmZsYXQoKTtcbiAgfVxuXG4gIHJldHVybiBbcmVzb2x2ZWQsIC4uLnByZVRlbXBsYXRlUmVzb2x2ZWRdO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZShcbiAga2V5OiBUZW1wbGF0ZUtleSxcbiAgcmVzdWx0OiBSZW5kZXJlZFRlbXBsYXRlLFxuKTogUHJvbWlzZTxQYXRoQW5kQ29kZT4ge1xuICBOYWl0ZS50KGByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZSR7a2V5fWAsIHsga2V5LCByZXN1bHQgfSk7XG5cbiAgY29uc3QgeyB0YXJnZXQsIHBhdGg6IGZpbGVQYXRoLCBib2R5LCBpbXBvcnRLZXlzLCBjdXN0b21IZWFkZXJzIH0gPSByZXN1bHQ7XG5cbiAgLy8gaW1wb3J0IO2VoCDrjIDsg4HsnZgg64yA7IOBIHBhdGgg7LaU7LacXG4gIGNvbnN0IGJ1aWx0SW5TY2hlbWFOYW1lcyA9IE9iamVjdC52YWx1ZXMoQlVJTFRfSU5fVFlQRVMpLm1hcCgoaW5mbykgPT4gaW5mby5zY2hlbWFOYW1lIGFzIHN0cmluZyk7XG4gIGNvbnN0IGltcG9ydERlZnMgPSBpbXBvcnRLZXlzXG4gICAgLy8g64K07J6lIO2DgOyehSDsiqTtgqTrp4jripQg7J2066+4IHNvbmFtdeyXkOyEnCBpbXBvcnTrkJjrr4DroZwg7KCc7Jm4XG4gICAgLmZpbHRlcigoaW1wb3J0S2V5KSA9PiAhYnVpbHRJblNjaGVtYU5hbWVzLmluY2x1ZGVzKGltcG9ydEtleSkpXG4gICAgLnJlZHVjZShcbiAgICAgIChyLCBpbXBvcnRLZXkpID0+IHtcbiAgICAgICAgbGV0IG1vZHVsZVBhdGggPSBpbXBvcnRLZXk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aChpbXBvcnRLZXkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBbcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGU6JHtrZXl9XSAke2ltcG9ydEtleX0g66qo65OIIOqyveuhnCDssL7quLAg7Iuk7YyoOiAke2Vycm9yfWAsXG4gICAgICAgICAgICB7IGNhdXNlOiBlcnJvciB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGltcG9ydFBhdGggPSBtb2R1bGVQYXRoO1xuICAgICAgICBpZiAobW9kdWxlUGF0aC5pbmNsdWRlcyhcIi9cIikgfHwgbW9kdWxlUGF0aC5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgICAgICBpbXBvcnRQYXRoID0gd3JhcElmKHBhdGgucmVsYXRpdmUocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgbW9kdWxlUGF0aCksIChwKSA9PiBbXG4gICAgICAgICAgICAhcC5zdGFydHNXaXRoKFwiLlwiKSxcbiAgICAgICAgICAgIGAuLyR7cH1gLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g6rCZ7J2AIO2MjOydvOyXkOyEnCBpbXBvcnQg7ZWY64qUIOqyveyasCBrZXlzIOuhnCDrgpjsl7Qg7LKY66asXG4gICAgICAgIGNvbnN0IGV4aXN0c09uZSA9IHIuZmluZCgoaW1wb3J0RGVmKSA9PiBpbXBvcnREZWYuZnJvbSA9PT0gaW1wb3J0UGF0aCk7XG4gICAgICAgIGlmIChleGlzdHNPbmUpIHtcbiAgICAgICAgICBleGlzdHNPbmUua2V5cyA9IHVuaXF1ZShleGlzdHNPbmUua2V5cy5jb25jYXQoaW1wb3J0S2V5KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgci5wdXNoKHtcbiAgICAgICAgICAgIGtleXM6IFtpbXBvcnRLZXldLFxuICAgICAgICAgICAgZnJvbTogaW1wb3J0UGF0aCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sXG4gICAgICBbXSBhcyB7XG4gICAgICAgIGtleXM6IHN0cmluZ1tdO1xuICAgICAgICBmcm9tOiBzdHJpbmc7XG4gICAgICB9W10sXG4gICAgKVxuICAgIC8vIOyFgO2UhCDssLjsobAg67Cp7KeAXG4gICAgLmZpbHRlcigoaW1wb3J0RGVmKSA9PiAhZmlsZVBhdGguZW5kc1dpdGgoYCR7aW1wb3J0RGVmLmZyb20ucmVwbGFjZShcIi4vXCIsIFwiXCIpfS50c2ApKTtcblxuICAvLyDsu6TsiqTthYAg7Zek642UIO2PrO2VqO2VmOyXrCDtl6TrjZQg7IOd7ISxXG4gIGNvbnN0IGhlYWRlciA9IFtcbiAgICAuLi4oY3VzdG9tSGVhZGVycyA/PyBbXSksXG4gICAgLi4uaW1wb3J0RGVmcy5tYXAoXG4gICAgICAoaW1wb3J0RGVmKSA9PiBgaW1wb3J0IHsgJHtpbXBvcnREZWYua2V5cy5qb2luKFwiLCBcIil9IH0gZnJvbSAnJHtpbXBvcnREZWYuZnJvbX0nYCxcbiAgICApLFxuICBdLmpvaW4oXCJcXG5cIik7XG5cbiAgY29uc3QgZm9ybWF0dGVkID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoa2V5ID09PSBcImdlbmVyYXRlZF9odHRwXCIpIHtcbiAgICAgIHJldHVybiBbaGVhZGVyLCBib2R5XS5qb2luKFwiXFxuXFxuXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBOYWl0ZS50KFwicmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGU6YmVmb3JlRm9ybWF0XCIsIHsga2V5LCBoZWFkZXIsIGJvZHkgfSk7XG4gICAgICBjb25zdCBmb3JtYXR0ZWQgPSBhd2FpdCBmb3JtYXRDb2RlKFxuICAgICAgICBbaGVhZGVyLCBib2R5XS5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgICBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7ZmlsZVBhdGh9YCxcbiAgICAgICk7XG4gICAgICBOYWl0ZS50KGByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZTpmb3JtYXR0ZWQ6JHtrZXl9YCwgZm9ybWF0dGVkKTtcbiAgICAgIHJldHVybiBmb3JtYXR0ZWQ7XG4gICAgfVxuICB9KSgpO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aDogYCR7dGFyZ2V0fS8ke2ZpbGVQYXRofWAsXG4gICAgY29kZTogZm9ybWF0dGVkLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUNvZGVUb1BhdGhFYWNoVGFyZ2V0KHBhdGhBbmRDb2RlOiBQYXRoQW5kQ29kZSk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gIGNvbnN0IHsgYXBwUm9vdFBhdGggfSA9IFNvbmFtdTtcbiAgY29uc3QgZmlsZVBhdGggPSBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7cGF0aEFuZENvZGUucGF0aH1gIGFzIEFic29sdXRlUGF0aDtcblxuICBjb25zdCBkc3RGaWxlUGF0aHMgPSB1bmlxdWUoXG4gICAgdGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4gZmlsZVBhdGgucmVwbGFjZShcIi86dGFyZ2V0L1wiLCBgLyR7dGFyZ2V0fS9gKSkgYXMgQWJzb2x1dGVQYXRoW10sXG4gICk7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBkc3RGaWxlUGF0aHMubWFwKGFzeW5jIChkc3RGaWxlUGF0aCkgPT4ge1xuICAgICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdEZpbGVQYXRoKTtcbiAgICAgIGlmICghKGF3YWl0IGV4aXN0cyhkaXIpKSkge1xuICAgICAgICBhd2FpdCBta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgYXdhaXQgd3JpdGVGaWxlKGRzdEZpbGVQYXRoLCBwYXRoQW5kQ29kZS5jb2RlKTtcbiAgICAgIC8vIOuwqeq4iCDsmrDrpqzqsIAg7JO0IHBhdGjrpbwg65Ox66GdIOKGkiBkZXYgd2F0Y2hlcuydmCDtm4Tsho0gY2hhbmdlIOydtOuypO2KuOqwgFxuICAgICAgLy8g7Jm467aAIOuzgOqyveycvOuhnCDsmKTsnbjrkJjsp4Ag7JWK64+E66GdIOqxsOumhCDqsIDrk5wg7J6Q66OMIOygnOqztS5cbiAgICAgIGF3YWl0IHRyYWNrV3JpdHRlbihkc3RGaWxlUGF0aCk7XG4gICAgICAhaXNUZXN0KCkgJiZcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY2hhbGsuYm9sZChcIkdlbmVyYXRlZDogXCIpICsgY2hhbGsuYmx1ZShgJHtkc3RGaWxlUGF0aC5yZXBsYWNlKGAke2FwcFJvb3RQYXRofS9gLCBcIlwiKX1gKSxcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBkc3RGaWxlUGF0aDtcbiAgICB9KSxcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0NBLGVBQXNCLGlCQUNwQixLQUNBLGlCQUNBLGtCQUN5QjtDQUN6QixNQUFNLGtCQUFrQjtFQUN0QixXQUFXO0VBQ1gsR0FBRztDQUNMO0NBQ0EsTUFBTSxFQUFFLG9CQUFvQjtFQUFFO0VBQUs7RUFBaUI7Q0FBZ0IsQ0FBQztDQUdyRSxNQUFNLE9BQXNCLENBQUMsR0FBRztDQUdoQyxNQUFNLGdCQUNKLE1BQU0sUUFBUSxJQUNaLEtBQUssSUFBSSxPQUFPLFFBQVE7RUFDdEIsT0FBTyxNQUFNLGVBQWUsS0FBSyxlQUFlO0NBQ2xE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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __esmMin } from "../_virtual/
|
|
1
|
+
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { SD, init_sd } from "../dict/sd.js";
|
|
3
3
|
import { BadRequestException, init_so_exceptions } from "../exceptions/so-exceptions.js";
|
|
4
4
|
import { init_controller, isTest } from "../utils/controller.js";
|
|
@@ -8,16 +8,13 @@ import { EntityManager, init_entity_manager } from "../entity/entity-manager.js"
|
|
|
8
8
|
import { generateTemplate, init_code_generator } from "./code-generator.js";
|
|
9
9
|
import { rm } from "fs/promises";
|
|
10
10
|
import chalk from "chalk";
|
|
11
|
-
|
|
12
11
|
//#region src/syncer/entity-operations.ts
|
|
13
12
|
/**
|
|
14
13
|
* 새로운 엔티티를 생성합니다.
|
|
15
14
|
* entityId는 반드시 CamelCase 형식이어야 합니다.
|
|
16
15
|
*/
|
|
17
16
|
async function createEntity(form) {
|
|
18
|
-
if (!/^[A-Z][a-zA-Z0-9]*$/.test(form.entityId))
|
|
19
|
-
throw new BadRequestException(SD("sonamu.error.entityIdCamelCase"));
|
|
20
|
-
}
|
|
17
|
+
if (!/^[A-Z][a-zA-Z0-9]*$/.test(form.entityId)) throw new BadRequestException(SD("sonamu.error.entityIdCamelCase"));
|
|
21
18
|
await generateTemplate("entity", form);
|
|
22
19
|
await EntityManager.reload();
|
|
23
20
|
}
|
|
@@ -29,27 +26,20 @@ async function createEntity(form) {
|
|
|
29
26
|
async function delEntity(entityId) {
|
|
30
27
|
const entity = EntityManager.get(entityId);
|
|
31
28
|
const delPaths = (() => {
|
|
32
|
-
if (entity.parentId) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
...Sonamu.config.sync.targets.flatMap((target) => [`${Sonamu.appRootPath}/${target}/src/services/${entity.names.fs}`])
|
|
39
|
-
];
|
|
40
|
-
}
|
|
29
|
+
if (entity.parentId) return [`${Sonamu.apiRootPath}/src/application/${entity.names.parentFs}/${entity.names.fs}.entity.json`];
|
|
30
|
+
else return [
|
|
31
|
+
`${Sonamu.apiRootPath}/src/application/${entity.names.fs}`,
|
|
32
|
+
`${Sonamu.apiRootPath}/dist/application/${entity.names.fs}`,
|
|
33
|
+
...Sonamu.config.sync.targets.flatMap((target) => [`${Sonamu.appRootPath}/${target}/src/services/${entity.names.fs}`])
|
|
34
|
+
];
|
|
41
35
|
})();
|
|
42
|
-
for (const delPath of delPaths) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
} else {
|
|
50
|
-
!isTest() && console.log(chalk.yellow(`NOT_EXISTS ${delPath}`));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
36
|
+
for (const delPath of delPaths) if (await exists(delPath)) {
|
|
37
|
+
!isTest() && console.log(chalk.red(`DELETE ${delPath}`));
|
|
38
|
+
await rm(delPath, {
|
|
39
|
+
recursive: true,
|
|
40
|
+
force: true
|
|
41
|
+
});
|
|
42
|
+
} else !isTest() && console.log(chalk.yellow(`NOT_EXISTS ${delPath}`));
|
|
53
43
|
await EntityManager.reload();
|
|
54
44
|
return { delPaths };
|
|
55
45
|
}
|
|
@@ -62,8 +52,8 @@ var init_entity_operations = __esmMin((() => {
|
|
|
62
52
|
init_fs_utils();
|
|
63
53
|
init_code_generator();
|
|
64
54
|
}));
|
|
65
|
-
|
|
66
55
|
//#endregion
|
|
67
56
|
init_entity_operations();
|
|
68
57
|
export { createEntity, delEntity, init_entity_operations };
|
|
69
|
-
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW9wZXJhdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9lbnRpdHktb3BlcmF0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBybSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi9kaWN0L3NkXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgQmFkUmVxdWVzdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxzL2ZzLXV0aWxzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVRlbXBsYXRlIH0gZnJvbSBcIi4vY29kZS1nZW5lcmF0b3JcIjtcblxuLyoqXG4gKiDsg4jroZzsmrQg7JeU7Yuw7Yuw66W8IOyDneyEse2VqeuLiOuLpC5cbiAqIGVudGl0eUlk64qUIOuwmOuTnOyLnCBDYW1lbENhc2Ug7ZiV7Iud7J207Ja07JW8IO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUVudGl0eShcbiAgZm9ybTogT21pdDxUZW1wbGF0ZU9wdGlvbnNbXCJlbnRpdHlcIl0sIFwidGl0bGVcIj4gJiB7IHRpdGxlOiBzdHJpbmcgfSxcbikge1xuICBpZiAoIS9eW0EtWl1bYS16QS1aMC05XSokLy50ZXN0KGZvcm0uZW50aXR5SWQpKSB7XG4gICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuZW50aXR5SWRDYW1lbENhc2VcIikpO1xuICB9XG5cbiAgYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcImVudGl0eVwiLCBmb3JtKTtcblxuICAvLyByZWxvYWQgZW50aXRpZXNcbiAgYXdhaXQgRW50aXR5TWFuYWdlci5yZWxvYWQoKTtcbn1cblxuLyoqXG4gKiDsl5Tti7Dti7Drpbwg7IKt7KCc7ZWp64uI64ukLlxuICogcGFyZW50SWTqsIAg7J6I64qUIOyEnOu4jCDsl5Tti7Dti7DsnZgg6rK97JqwIGVudGl0eS5qc29u66eMIOyCreygnO2VmOqzoCxcbiAqIOujqO2KuCDsl5Tti7Dti7DsnZgg6rK97JqwIOuUlOugie2GoOumrCDsoITssrTsmYAg7YOA6rKfIOuUlOugie2GoOumrOulvCDsgq3soJztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxFbnRpdHkoZW50aXR5SWQ6IHN0cmluZyk6IFByb21pc2U8eyBkZWxQYXRoczogc3RyaW5nW10gfT4ge1xuICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgY29uc3QgZGVsUGF0aHMgPSAoKCkgPT4ge1xuICAgIGlmIChlbnRpdHkucGFyZW50SWQpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGAke1NvbmFtdS5hcGlSb290UGF0aH0vc3JjL2FwcGxpY2F0aW9uLyR7ZW50aXR5Lm5hbWVzLnBhcmVudEZzfS8ke2VudGl0eS5uYW1lcy5mc30uZW50aXR5Lmpzb25gLFxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYCR7U29uYW11LmFwaVJvb3RQYXRofS9zcmMvYXBwbGljYXRpb24vJHtlbnRpdHkubmFtZXMuZnN9YCxcbiAgICAgICAgYCR7U29uYW11LmFwaVJvb3RQYXRofS9kaXN0L2FwcGxpY2F0aW9uLyR7ZW50aXR5Lm5hbWVzLmZzfWAsXG4gICAgICAgIC4uLlNvbmFtdS5jb25maWcuc3luYy50YXJnZXRzLmZsYXRNYXAoKHRhcmdldCkgPT4gW1xuICAgICAgICAgIGAke1NvbmFtdS5hcHBSb290UGF0aH0vJHt0YXJnZXR9L3NyYy9zZXJ2aWNlcy8ke2VudGl0eS5uYW1lcy5mc31gLFxuICAgICAgICBdKSxcbiAgICAgIF07XG4gICAgfVxuICB9KSgpOyAvLyBpaWZlXG5cbiAgZm9yIChjb25zdCBkZWxQYXRoIG9mIGRlbFBhdGhzKSB7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhkZWxQYXRoKSkge1xuICAgICAgIWlzVGVzdCgpICYmIGNvbnNvbGUubG9nKGNoYWxrLnJlZChgREVMRVRFICR7ZGVsUGF0aH1gKSk7XG4gICAgICBhd2FpdCBybShkZWxQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICFpc1Rlc3QoKSAmJiBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYE5PVF9FWElTVFMgJHtkZWxQYXRofWApKTtcbiAgICB9XG4gIH1cblxuICAvLyByZWxvYWQgZW50aXRpZXNcbiAgYXdhaXQgRW50aXR5TWFuYWdlci5yZWxvYWQoKTtcblxuICByZXR1cm4geyBkZWxQYXRocyB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFpQkEsZUFBc0IsYUFDcEIsTUFDQTtDQUNBLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxLQUFLLFFBQVEsR0FDM0MsTUFBTSxJQUFJLG9CQUFvQixHQUFHLGdDQUFnQyxDQUFDO0NBR3BFLE1BQU0saUJBQWlCLFVBQVUsSUFBSTtDQUdyQyxNQUFNLGNBQWMsT0FBTztBQUM3Qjs7Ozs7O0FBT0EsZUFBc0IsVUFBVSxVQUFtRDtDQUNqRixNQUFNLFNBQVMsY0FBYyxJQUFJLFFBQVE7Q0FFekMsTUFBTSxrQkFBa0I7RUFDdEIsSUFBSSxPQUFPLFVBQ1QsT0FBTyxDQUNMLEdBQUcsT0FBTyxZQUFZLG1CQUFtQixPQUFPLE1BQU0sU0FBUyxHQUFHLE9BQU8sTUFBTSxHQUFHLGFBQ3BGO09BRUEsT0FBTztHQUNMLEdBQUcsT0FBTyxZQUFZLG1CQUFtQixPQUFPLE1BQU07R0FDdEQsR0FBRyxPQUFPLFlBQVksb0JBQW9CLE9BQU8sTUFBTTtHQUN2RCxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsU0FBUyxXQUFXLENBQ2hELEdBQUcsT0FBTyxZQUFZLEdBQUcsT0FBTyxnQkFBZ0IsT0FBTyxNQUFNLElBQy9ELENBQUM7RUFDSDtDQUVKLEVBQUEsQ0FBRztDQUVILEtBQUssTUFBTSxXQUFXLFVBQ3BCLElBQUksTUFBTSxPQUFPLE9BQU8sR0FBRztFQUN6QixDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLFVBQVUsU0FBUyxDQUFDO0VBQ3ZELE1BQU0sR0FBRyxTQUFTO0dBQUUsV0FBVztHQUFNLE9BQU87RUFBSyxDQUFDO0NBQ3BELE9BQ0UsQ0FBQyxPQUFPLEtBQUssUUFBUSxJQUFJLE1BQU0sT0FBTyxjQUFjLFNBQVMsQ0FBQztDQUtsRSxNQUFNLGNBQWMsT0FBTztDQUUzQixPQUFPLEVBQUUsU0FBUztBQUNwQjs7YUEvRHNDO1NBQ1A7cUJBQ3lCO29CQUNTO2lCQUVyQjtlQUNGO3FCQUNTIn0=
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { __esmMin } from "../_virtual/
|
|
2
|
-
|
|
1
|
+
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
3
2
|
//#region src/syncer/event-batcher.ts
|
|
4
3
|
/**
|
|
5
4
|
* 파일 변경 이벤트를 batch로 모아 한 번에 처리하는 throttler를 만듭니다.
|
|
@@ -24,22 +23,18 @@ import { __esmMin } from "../_virtual/rolldown_runtime.js";
|
|
|
24
23
|
*/
|
|
25
24
|
function createFileEventBatcher(options) {
|
|
26
25
|
const { delayMs, onFlush } = options;
|
|
27
|
-
const pending = new Map();
|
|
26
|
+
const pending = /* @__PURE__ */ new Map();
|
|
28
27
|
let flushTimer = null;
|
|
29
28
|
let isFlushing = false;
|
|
30
29
|
const scheduleFlush = () => {
|
|
31
|
-
if (flushTimer !== null)
|
|
32
|
-
clearTimeout(flushTimer);
|
|
33
|
-
}
|
|
30
|
+
if (flushTimer !== null) clearTimeout(flushTimer);
|
|
34
31
|
flushTimer = setTimeout(() => {
|
|
35
32
|
flushTimer = null;
|
|
36
|
-
|
|
33
|
+
runFlush();
|
|
37
34
|
}, delayMs);
|
|
38
35
|
};
|
|
39
36
|
const runFlush = async () => {
|
|
40
|
-
if (isFlushing || pending.size === 0)
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
37
|
+
if (isFlushing || pending.size === 0) return;
|
|
43
38
|
isFlushing = true;
|
|
44
39
|
try {
|
|
45
40
|
const batch = new Map(pending);
|
|
@@ -51,9 +46,7 @@ function createFileEventBatcher(options) {
|
|
|
51
46
|
}
|
|
52
47
|
} finally {
|
|
53
48
|
isFlushing = false;
|
|
54
|
-
if (pending.size > 0)
|
|
55
|
-
scheduleFlush();
|
|
56
|
-
}
|
|
49
|
+
if (pending.size > 0) scheduleFlush();
|
|
57
50
|
}
|
|
58
51
|
};
|
|
59
52
|
return (path, event) => {
|
|
@@ -62,8 +55,8 @@ function createFileEventBatcher(options) {
|
|
|
62
55
|
};
|
|
63
56
|
}
|
|
64
57
|
var init_event_batcher = __esmMin((() => {}));
|
|
65
|
-
|
|
66
58
|
//#endregion
|
|
67
59
|
init_event_batcher();
|
|
68
60
|
export { createFileEventBatcher, init_event_batcher };
|
|
69
|
-
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtYmF0Y2hlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2V2ZW50LWJhdGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuXG4vKipcbiAqIO2MjOydvCDrs4Dqsr0g7J2067Kk7Yq466W8IGJhdGNo66GcIOuqqOyVhCDtlZwg67KI7JeQIOyymOumrO2VmOuKlCB0aHJvdHRsZXLrpbwg66eM65Ot64uI64ukLlxuICpcbiAqIOuPmeyekTpcbiAqIC0g6rCZ7J2AIHBhdGjqsIAg7Jes65+sIOuyiCBwdXNo65CY66m0IOuniOyngOuniSBldmVudOuhnCBkZWR1cGXrkKnri4jri6QuXG4gKiAtIOuniOyngOuniSBwdXNoIO2bhCBgZGVsYXlNc2Ag64+Z7JWIIOy2lOqwgCBwdXNo6rCAIOyXhuycvOuptCDtlZwg67KI7JeQIGZsdXNo65Cp64uI64ukICh0cmFpbGluZyBkZWJvdW5jZSkuXG4gKiAtIGZsdXNoIOuPhOykkSDrk6TslrTsmKTripQgcHVzaOuKlCDri6TsnYwgYmF0Y2jroZwg7YGQ7J6J65Cp64uI64ukLlxuICogLSDtlZwg7Iuc7KCQ7JeQIG9uRmx1c2jripQg64uoIO2VmOuCmOunjCDsp4TtlonrkKnri4jri6Qg4oCUIOydtOuhnOyNqCBvbkZsdXNoIOuCtOu2gOyXkOyEnCDsnbzslrTrgpjripRcbiAqICAg7J6R7JeF7J20IOuLpOuluCBvbkZsdXNoIO2YuOy2nOqzvCDsnbjthLDrpqzruIzrkJjsp4Ag7JWK7J2M7J2EIOuztOyepe2VqeuLiOuLpC5cbiAqXG4gKiDtmLjstpzsnpDripQgcHVzaOunjCDtlZjrqbQg65Cp64uI64ukLiDrgrTrtoAg7YGQL+2DgOydtOuouCDsg4Htg5zripQg7Lqh7IqQ7ZmU65CY7Ja0IOyeiOqzoCwgb25GbHVzaOqwgFxuICog67Cb64qUIGZpbGVFdmVudHPripQgZGVkdXBl65CcIE1hcOyeheuLiOuLpC5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcHVzaCA9IGNyZWF0ZUZpbGVFdmVudEJhdGNoZXIoe1xuICogICBkZWxheU1zOiAxMDAsXG4gKiAgIG9uRmx1c2g6IChmaWxlRXZlbnRzKSA9PiBoYW5kbGVCYXRjaChmaWxlRXZlbnRzKSxcbiAqIH0pO1xuICogcHVzaChcIi9wYXRoL2EudHNcIiBhcyBBYnNvbHV0ZVBhdGgsIFwiY2hhbmdlXCIpO1xuICogcHVzaChcIi9wYXRoL2IudHNcIiBhcyBBYnNvbHV0ZVBhdGgsIFwiY2hhbmdlXCIpOyAvLyAxMDBtcyDtm4Qg65GYIOuLpCDtlZwg67KI7JeQIG9uRmx1c2jroZxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpbGVFdmVudEJhdGNoZXI8RmlsZUV2ZW50VCBleHRlbmRzIHN0cmluZz4ob3B0aW9uczoge1xuICBkZWxheU1zOiBudW1iZXI7XG4gIG9uRmx1c2g6IChmaWxlRXZlbnRzOiBNYXA8QWJzb2x1dGVQYXRoLCBGaWxlRXZlbnRUPikgPT4gUHJvbWlzZTx2b2lkPjtcbn0pOiAocGF0aDogQWJzb2x1dGVQYXRoLCBldmVudDogRmlsZUV2ZW50VCkgPT4gdm9pZCB7XG4gIGNvbnN0IHsgZGVsYXlNcywgb25GbHVzaCB9ID0gb3B0aW9ucztcbiAgY29uc3QgcGVuZGluZyA9IG5ldyBNYXA8QWJzb2x1dGVQYXRoLCBGaWxlRXZlbnRUPigpO1xuICBsZXQgZmx1c2hUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgbGV0IGlzRmx1c2hpbmcgPSBmYWxzZTtcblxuICBjb25zdCBzY2hlZHVsZUZsdXNoID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmIChmbHVzaFRpbWVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQoZmx1c2hUaW1lcik7XG4gICAgfVxuICAgIGZsdXNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGZsdXNoVGltZXIgPSBudWxsO1xuICAgICAgdm9pZCBydW5GbHVzaCgpO1xuICAgIH0sIGRlbGF5TXMpO1xuICB9O1xuXG4gIGNvbnN0IHJ1bkZsdXNoID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIC8vIGZsdXNoIOuPhOykkSDstpTqsIAgcHVzaOuhnCDrmJAg64uk66W4IHJ1bkZsdXNo6rCAIO2KuOumrOqxsOuQnCDqsr3smrAsIO2VnCDrsojsl5Ag7ZWY64KY66eMIOynhO2WieuQmOqyjCDtlanri4jri6QuXG4gICAgLy8g7KeE7ZaJIOykkeyduCBmbHVzaOqwgCDrgZ3rgpjrqbQgZmluYWxseeyXkOyEnCDri6TsnYwgYmF0Y2jrpbwg7J6Q64+Z7Jy866GcIOuLpOyLnCDsiqTsvIDspITtlanri4jri6QuXG4gICAgaWYgKGlzRmx1c2hpbmcgfHwgcGVuZGluZy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzRmx1c2hpbmcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAvLyDtmITsnqzquYzsp4Ag66qo7J24IOuzgOqyveydhCBzbmFwc2hvdOycvOuhnCDsnqHqs6Ag7YGQ64qUIOu5hOybgeuLiOuLpC5cbiAgICAgIC8vIOydtCBiYXRjaOqwgCDsspjrpqzrkJjripQg64+Z7JWIIOuTpOyWtOyYpOuKlCDsg4gg67OA6rK97J2AIOuLpOydjCBiYXRjaOuhnCDrqqjsnoXri4jri6QuXG4gICAgICBjb25zdCBiYXRjaCA9IG5ldyBNYXAocGVuZGluZyk7XG4gICAgICBwZW5kaW5nLmNsZWFyKCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBvbkZsdXNoKGJhdGNoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNGbHVzaGluZyA9IGZhbHNlO1xuICAgICAgaWYgKHBlbmRpbmcuc2l6ZSA+IDApIHtcbiAgICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKHBhdGgsIGV2ZW50KSA9PiB7XG4gICAgcGVuZGluZy5zZXQocGF0aCwgZXZlbnQpO1xuICAgIHNjaGVkdWxlRmx1c2goKTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QkEsU0FBZ0IsdUJBQWtELFNBR2Q7Q0FDbEQsTUFBTSxFQUFFLFNBQVMsWUFBWTtDQUM3QixNQUFNLDBCQUFVLElBQUksSUFBOEI7Q0FDbEQsSUFBSSxhQUFvQztDQUN4QyxJQUFJLGFBQWE7Q0FFakIsTUFBTSxzQkFBNEI7RUFDaEMsSUFBSSxlQUFlLE1BQ2pCLGFBQWEsVUFBVTtFQUV6QixhQUFhLGlCQUFpQjtHQUM1QixhQUFhO0dBQ2IsQUFBSyxTQUFTO0VBQ2hCLEdBQUcsT0FBTztDQUNaO0NBRUEsTUFBTSxXQUFXLFlBQTJCO0VBRzFDLElBQUksY0FBYyxRQUFRLFNBQVMsR0FDakM7RUFFRixhQUFhO0VBQ2IsSUFBSTtHQUdGLE1BQU0sUUFBUSxJQUFJLElBQUksT0FBTztHQUM3QixRQUFRLE1BQU07R0FDZCxJQUFJO0lBQ0YsTUFBTSxRQUFRLEtBQUs7R0FDckIsU0FBUyxHQUFHO0lBQ1YsUUFBUSxNQUFNLENBQUM7R0FDakI7RUFDRixVQUFVO0dBQ1IsYUFBYTtHQUNiLElBQUksUUFBUSxPQUFPLEdBQ2pCLGNBQWM7RUFFbEI7Q0FDRjtDQUVBLFFBQVEsTUFBTSxVQUFVO0VBQ3RCLFFBQVEsSUFBSSxNQUFNLEtBQUs7RUFDdkIsY0FBYztDQUNoQjtBQUNGIn0=
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { __esmMin } from "../_virtual/
|
|
1
|
+
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { Sonamu, init_sonamu } from "../api/sonamu.js";
|
|
3
3
|
import path from "path";
|
|
4
|
-
|
|
5
4
|
//#region src/syncer/file-patterns.ts
|
|
6
5
|
/**
|
|
7
6
|
* Syncer가 관심 가지고 지켜보는 파일들입니다.
|
|
@@ -83,8 +82,8 @@ var init_file_patterns = __esmMin((() => {
|
|
|
83
82
|
"**/.turbo/**"
|
|
84
83
|
];
|
|
85
84
|
}));
|
|
86
|
-
|
|
87
85
|
//#endregion
|
|
88
86
|
init_file_patterns();
|
|
89
87
|
export { GLOB_EXCLUDE, getChecksumPatternGroup, getChecksumPatternGroupInAbsolutePath, init_file_patterns };
|
|
90
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wYXR0ZXJucy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtcGF0dGVybnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoLCB0eXBlIEFwcFJlbGF0aXZlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbi8qKlxuICogU3luY2Vy6rCAIOq0gOyLrCDqsIDsp4Dqs6Ag7KeA7Lyc67O064qUIO2MjOydvOuTpOyeheuLiOuLpC5cbiAqIOydtCDtjIzsnbzrk6Tsl5Ag67OA6rK97J20IOyDneq4sOuptCDstpTqsIDsoIHsnbgg7J6R7JeFKOydtO2VmCBcIuyLse2BrFwiIOuYkOuKlCBcIuyLse2BrCDslaHshZhcIinsnYQg7IiY7ZaJ7ZWp64uI64ukLlxuICog7J20IOyekeyXheydtOudvCDtlajsnYAg7YyM7J28IOuzteyCrCDrmJDripQg7YWc7ZSM66a/IOugjOuNlOungeydhCDthrXtlZwgY29kZSBnZW5lcmF0aW9u7J2EIOydmOuvuO2VqeuLiOuLpC5cbiAqXG4gKiDqsr3roZwg7ZiV7IudOiBhcHBSb290IOq4sOykgCDsg4HrjIAg6rK966GcICh0YXJnZXQg65SU66CJ7Yag66as66GcIOyLnOyekSwg7JiIOiBcImFwaS9zcmMvLi4uXCIsIFwid2ViL3NyYy8uLi5cIilcbiAqIOyCrOyaqTogZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgp66GcIOygiOuMgCDqsr3roZwg67OA7ZmYIO2bhCBnbG9iIOyCrOyaqVxuICpcbiAqIOuRkCDqsIDsp4Ag7J2Y66+47KCBIOyYgeyXrTpcbiAqIC0g7J6F66ClICjsgqzsmqnsnpAg7J6R7ISxKTogYXBpIOuUlOugie2GoOumrOyXkOunjCDsnITsuZguIOyCrOyaqeyekOqwgCDsp4HsoJEg7Y647KeRLlxuICogLSDstpzroKUgKHNvbmFtdSDsg53shLEv67O17IKsKTogYXBpIOuYkOuKlCB0YXJnZXQg65SU66CJ7Yag66as7JeQIHNvbmFtdeqwgCDrp4zrk6TslrTrgrTripQg7YyM7J28LlxuICpcbiAqIOy2lOyggSDrsJYg7J6Q7IKwICjrtoDtirjsiqTtirjrnqkgcGhhc2Xsl5DshJwg66ek67KIIOuztOyepSk6XG4gKiAtIHNvbmFtdS5zaGFyZWQudHM6IOyCrOyaqeyekOqwgCDsu6TsiqTthLDrp4jsnbTspojtlZjripQg7J6Q7IKwLiBJZk5vdEV4aXN0c+uhnCAx7ZqMIOyDneyEsSDtm4Qg7IaQ64yA7KeAIOyViuydjC5cbiAqIC0gZW50cnktc2VydmVyLmdlbmVyYXRlZC50c3g6IOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5wuIOunpOuyiCBvdmVyd3JpdGUgZ2VuZXJhdGUuXG4gKlxuICog7JyEIOuRmOydgCBzeW5jKCnsnZgg67aA7Yq47Iqk7Yq4656pIHBoYXNl7JeQ7IScIOuzgOqyvSDqsoDstpwg7IKs7J207YG06rO8IOustOq0gO2VmOqyjCDrs7TsnqXrkKnri4jri6QuXG4gKiDstpTsoIEg7IKs7J207YG0IOyViOyXkOyEnCDtlaAg7JWh7IWY7J20IOyXhuuKlCDsnpDsgrDsnbTrnbwg7Yyo7YS0IOq3uOujueyXkCDtj6ztlajrkJjsp4Ag7JWK7Iq164uI64ukLlxuICpcbiAqIOychOy5mCDsubTthYzqs6DrpqzripQgYXBpL3RhcmdldHMvYW55d2hlcmUg7Zes7Y2866GcIOuqheyLnOyggeycvOuhnCDtkZztmITtlanri4jri6QuXG4gKlxuICogRmlsZVR5cGXsnYAg7J20IO2VqOyImOydmCDrsJjtmZgg7YOA7J6F7JeQ7IScIOyekOuPmSDstpTroaDrkKnri4jri6QuIO2CpCDstpTqsIAg7IucIOuzhOuPhCBlbnVtL+uwsOyXtOydhFxuICog64+Z6riw7ZmU7ZWgIO2VhOyalCDsl4bsnbQg7Jes6riwIO2VnCDqtbDrjbDrp4wg7IiY7KCV7ZWY66m0IOuQqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwKCkge1xuICAvLyDtl6ztjbwg7ZWo7IiY65OkIOunjOuTpOyWtOyEnCDqsIDsoLjsmLXri4jri6QuXG4gIGNvbnN0IHsgYXBpLCB0YXJnZXRzLCBhbnl3aGVyZSB9ID0gZ2xvYkJ1aWxkZXJzKCk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTb25hbXUg7J6F7J6l7JeQ7IScIHNvcnVjZeqwgCDrkJjripQg7YyM7J2865Ok7J6F64uI64ukLlxuICAgIC8vIOydtCDsuZzqtazrk6TsnbQg67OA6rK965CY66m0IOydtOuTpOuhnOu2gO2EsCDslaHshZjsnYQg7IiY7ZaJ7ZWY6rOgIO2MjOydvOydhCDsg53shLHtlanri4jri6QuXG4gICAgLy8g66qo64W466as7Y+s7JeQ7IScIOydtCBzb3VyY2Xrk6TsnYAgYXBpIO2UhOuhnOygne2KuOyXkCDtlZzsoJXrkJjrr4DroZwsIGFwaeyXkCDsnojripQg7Lmc6rWs65Ok66eMIOumrOyKpO2Mhe2VqeuLiOuLpC5cbiAgICBjb25maWc6IGFwaShcInNyYy9zb25hbXUuY29uZmlnLnRzXCIpLFxuICAgIGVudGl0eTogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZW50aXR5Lmpzb25cIiksXG4gICAgZnJhbWU6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmZyYW1lLnRzXCIpLFxuICAgIGZ1bmN0aW9uczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZnVuY3Rpb25zLnRzXCIpLFxuICAgIG1vZGVsOiBhcGkoXCJzcmMvYXBwbGljYXRpb24vKiovKi5tb2RlbC50c1wiKSxcbiAgICB0eXBlczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoudHlwZXMudHNcIiksXG4gICAgd29ya2Zsb3c6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLndvcmtmbG93LnRzXCIpLFxuICAgIGkxOG46IGFwaShcInNyYy9pMThuLyoqLyEoc2QuZ2VuZXJhdGVkKS50c1wiKSxcblxuICAgIC8vIFNvbmFtdeqwgCDstpzroKXtlZjripQg7IOd7ISxIO2MjOydvOuTpOyeheuLiOuLpC5cbiAgICAvLyDsnbQg7Lmc6rWs65Ok64+EIOygle2VqeyEsSDqsoDspp0g7LCo7JuQ7JeQ7IScIHNvbmFtdS5sb2Nr7JeQIOq4sOuhne2VtOyVvCDtlZjqs6AsXG4gICAgLy8g65iQ7ZWcIOuzgOqyveyLnCDqt7gg7IKs7Iuk7J2EIHN5bmNlcuqwgCDslYzquLDripQg7ZW07JW8IO2VqeuLiOuLpCjruYTroZ0g67OE64uk66W4IOyymOumrOqwgCDsl4bripQg6rK97Jqw64+EIOyeiOyngOunjCkuXG4gICAgLy9cbiAgICAvLyDsnpDsgrAg67O47ISx7JeQIOuUsOudvCDsnITsuZgg7Lm07YWM6rOg66as6rCAIOuLpOultOq4sCDrlYzrrLjsl5AsIOuzuOyEseuzhOuhnCDrtoTrpqztlbTshJwg7ZGc6riw7ZWp64uI64ukLlxuICAgIC8vIC0g7JaR7Kq9Le2VhOyalCDsnpDsgrA6IGFwaeyXkCDsoJXrs7jsnbQg66eM65Ok7Ja07KeEIOuSpCB0YXJnZXTsl5Ag67O17IKs65CoIChzb25hbXUuZ2VuZXJhdGVkLnt0cyx0c3h9KS5cbiAgICAvLyAtIGFwaSDsoITsmqkg7J6Q7IKwOiBhcGnsl5Drp4wg66eM65Ok7Ja07KeQIChzb25hbXUuZ2VuZXJhdGVkLmh0dHAsIHF1ZXJpZXMuZ2VuZXJhdGVkLnRzKS5cbiAgICAvLyAtIHRhcmdldCDsoITsmqkg7J6Q7IKwOiB0YXJnZXTsl5Drp4wg66eM65Ok7Ja07KeQIChzZXJ2aWNlcy5nZW5lcmF0ZWQudHPripQgc2VydmljZXMudGVtcGxhdGXsnZggOnRhcmdldCDrtoTrsLApLlxuICAgIC8vXG4gICAgLy8g7Jes6riw7JeQ64qUIFNvbmFtdeydmCDrqqjrk6Agc3luYyDsgrDstpzrrLzsnbQg7J6I64qUIOqyg+ydgCDslYTri5nri4jri6QuXG4gICAgLy8gc29uYW11LnNoYXJlZC50c+yZgCBlbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeOyZgCDqsJnsnYBcbiAgICAvLyBzeW5jIOy0iOuwmCAx7ZqM7ISxIOu2gO2KuOyKpO2KuOueqSDtjIzsnbzrk6TsnYAg6rSA66asIOyViCDtlZjquLAg65WM66y47JeQIOyXrOq4sOyXkCDrpqzsiqTtjIXrj4Qg7JWIIO2VqeuLiOuLpC5cbiAgICBnZW5lcmF0ZWQ6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmdlbmVyYXRlZC57dHMsdHN4LHNzby50c31cIiksXG4gICAgZ2VuZXJhdGVkQ29waWVkOiB0YXJnZXRzKFwic3JjL3NlcnZpY2VzLyoqL3NvbmFtdS5nZW5lcmF0ZWQue3RzLHRzeH1cIiksXG4gICAgaHR0cEdlbmVyYXRlZDogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZ2VuZXJhdGVkLmh0dHBcIiksXG4gICAgc2VydmljZXNHZW5lcmF0ZWQ6IHRhcmdldHMoXCJzcmMvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkLnRzXCIpLFxuICAgIHNkR2VuZXJhdGVkOiBhbnl3aGVyZShcInNyYy9pMThuLyoqL3NkLmdlbmVyYXRlZC50c1wiKSxcbiAgICB0eXBlc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLnR5cGVzLnRzXCIpLFxuICAgIGZ1bmN0aW9uc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLmZ1bmN0aW9ucy50c1wiKSxcbiAgICBpMThuQ29waWVkOiB0YXJnZXRzKFwic3JjL2kxOG4vKiovIShzZC5nZW5lcmF0ZWQpLnRzXCIpLFxuICB9IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBBcHBSZWxhdGl2ZVBhdGg+O1xufVxuXG4vKipcbiAqIOychOy5mCDsubTthYzqs6Drpqzrs4Qg6riA66GtIOu5jOuNlOulvCDrp4zrk6TslrQg67CY7ZmY7ZWp64uI64ukLlxuICogLSBhcGkocmVzdCk6IGFwaSDrlJTroInthqDrpqzsl5Ag7ZWc7KCVXG4gKiAtIHRhcmdldHMocmVzdCk6IHRhcmdldCDrlJTroInthqDrpqzrk6Tsl5Ag7ZWc7KCVICh3ZWIsIGFwcCDrk7EpXG4gKiAtIGFueXdoZXJlKHJlc3QpOiBhcGnsmYAgdGFyZ2V0IOuqqOuRkFxuICovXG5mdW5jdGlvbiBnbG9iQnVpbGRlcnMoKSB7XG4gIGNvbnN0IGFwaURpciA9IFNvbmFtdS5jb25maWcuYXBpLmRpcjtcbiAgY29uc3QgdGFyZ2V0RGlycyA9IFNvbmFtdS5jb25maWcuc3luYy50YXJnZXRzO1xuXG4gIC8vIE5vZGUg64K07J6lIGZzLmdsb2LsnZggYnJhY2UgZXhwYW5zaW9u7J2AIOuLqOydvCDrqaTrsoQge3h966W8IO2SgOyngCDslYrsnLzrr4DroZwsIOuppOuyhOqwgCAx6rCc7J28IOuVjOuKlCBhbHRlcm5hdGlvbiDsl4bsnbQg7KeB7KCRIOqysO2Vqe2VqeuLiOuLpC5cbiAgY29uc3QgYnJhY2VKb2luID0gKGRpcnM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PlxuICAgIGRpcnMubGVuZ3RoID09PSAxID8gZGlyc1swXSA6IGB7JHtkaXJzLmpvaW4oXCIsXCIpfX1gO1xuXG4gIHJldHVybiB7XG4gICAgYXBpOiAocGF0aEZyb21BcGk6IHN0cmluZykgPT4gYCR7YXBpRGlyfS8ke3BhdGhGcm9tQXBpfWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICAgIHRhcmdldHM6IChwYXRoRnJvbVRhcmdldDogc3RyaW5nKSA9PlxuICAgICAgYCR7YnJhY2VKb2luKHRhcmdldERpcnMpfS8ke3BhdGhGcm9tVGFyZ2V0fWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICAgIGFueXdoZXJlOiAocGF0aEZyb21Bbnl3aGVyZTogc3RyaW5nKSA9PlxuICAgICAgYCR7YnJhY2VKb2luKFthcGlEaXIsIC4uLnRhcmdldERpcnNdKX0vJHtwYXRoRnJvbUFueXdoZXJlfWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICB9O1xufVxuXG4vKipcbiAqIEZpbGVUeXBl7J2AIGdldENoZWNrc3VtUGF0dGVybkdyb3Vw7J2YIOuwmO2ZmCDqsJ3ssrQg7YKk7JeQ7IScIOyekOuPmSDstpTroaDrkKnri4jri6QuXG4gKiDrs4Trj4Qg67Cw7Je0L2VudW0g64+Z6riw7ZmUIOu2iO2VhOyalCDigJQg7Yyo7YS0IOq3uOujuSDtlajsiJjqsIAg7KeE7Iuk7J2YIOuLqOydvCDsm5DsspwuXG4gKi9cbmV4cG9ydCB0eXBlIEZpbGVUeXBlID0ga2V5b2YgUmV0dXJuVHlwZTx0eXBlb2YgZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXA+O1xuZXhwb3J0IHR5cGUgR2xvYlBhdHRlcm48VCBleHRlbmRzIEFwcFJlbGF0aXZlUGF0aCB8IEFic29sdXRlUGF0aD4gPSBSZWNvcmQ8RmlsZVR5cGUsIFQ+O1xuXG4vKipcbiAqIOu5jOuTnCDsgrDstpzrrLwg65SU66CJ7Yag66as64qUIGFsdGVybmF0aW9uIOq4gOuhreydtCDsnZjrj4TsuZgg7JWK6rKMIO2cmOunkOumtCDsiJgg7J6I7Jy866+A66GcIOyViOyghOunneycvOuhnCDsoJzsmbguXG4gKiBOb2RlIOuCtOyepSBmcy5nbG9i7J2YIGV4Y2x1ZGUg7Ji17IWY6rO8IO2VqOq7mCDsgqzsmqntlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCBHTE9CX0VYQ0xVREUgPSBbXCIqKi9ub2RlX21vZHVsZXMvKipcIiwgXCIqKi9kaXN0LyoqXCIsIFwiKiovYnVpbGQvKipcIiwgXCIqKi8udHVyYm8vKipcIl07XG5cbi8qKlxuICogYXBwUm9vdCDquLDspIAg7IOB64yAIOqyveuhnCDtjKjthLTsnYQg7KCI64yAIOqyveuhnCDtjKjthLTsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICpcbiAqIEByZXR1cm5zIOygiOuMgCDqsr3roZwg6riw67CYIEdsb2Ig7Yyo7YS0IOuntVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgpOiBHbG9iUGF0dGVybjxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgZ3JvdXAgPSBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cCgpO1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGdyb3VwKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAga2V5LFxuICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdmFsdWUpLCAvLyBhcHBSb290IOyDgeuMgCDqsr3roZwg4oaSIOygiOuMgCDqsr3roZxcbiAgICBdKSxcbiAgKSBhcyBHbG9iUGF0dGVybjxBYnNvbHV0ZVBhdGg+O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCQSxTQUFnQiwwQkFBMEI7Q0FFeEMsTUFBTSxFQUFFLEtBQUssU0FBUyxhQUFhLGNBQWM7QUFFakQsUUFBTztFQUlMLFFBQVEsSUFBSSx1QkFBdUI7RUFDbkMsUUFBUSxJQUFJLG1DQUFtQztFQUMvQyxPQUFPLElBQUksZ0NBQWdDO0VBQzNDLFdBQVcsSUFBSSxvQ0FBb0M7RUFDbkQsT0FBTyxJQUFJLGdDQUFnQztFQUMzQyxPQUFPLElBQUksZ0NBQWdDO0VBQzNDLFVBQVUsSUFBSSxtQ0FBbUM7RUFDakQsTUFBTSxJQUFJLGlDQUFpQztFQWMzQyxXQUFXLElBQUksaURBQWlEO0VBQ2hFLGlCQUFpQixRQUFRLDRDQUE0QztFQUNyRSxlQUFlLElBQUksc0NBQXNDO0VBQ3pELG1CQUFtQixRQUFRLHFDQUFxQztFQUNoRSxhQUFhLFNBQVMsOEJBQThCO0VBQ3BELGFBQWEsUUFBUSw2QkFBNkI7RUFDbEQsaUJBQWlCLFFBQVEsaUNBQWlDO0VBQzFELFlBQVksUUFBUSxpQ0FBaUM7RUFDdEQ7Ozs7Ozs7O0FBU0gsU0FBUyxlQUFlO0NBQ3RCLE1BQU0sU0FBUyxPQUFPLE9BQU8sSUFBSTtDQUNqQyxNQUFNLGFBQWEsT0FBTyxPQUFPLEtBQUs7Q0FHdEMsTUFBTSxhQUFhLFNBQ2pCLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7QUFFbkQsUUFBTztFQUNMLE1BQU0sZ0JBQXdCLEdBQUcsT0FBTyxHQUFHO0VBQzNDLFVBQVUsbUJBQ1IsR0FBRyxVQUFVLFdBQVcsQ0FBQyxHQUFHO0VBQzlCLFdBQVcscUJBQ1QsR0FBRyxVQUFVLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDLEdBQUc7RUFDNUM7Ozs7Ozs7QUFxQkgsU0FBZ0Isd0NBQW1FO0NBQ2pGLE1BQU0sUUFBUSx5QkFBeUI7QUFDdkMsUUFBTyxPQUFPLFlBQ1osT0FBTyxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQzFDLEtBQ0EsS0FBSyxLQUFLLE9BQU8sYUFBYSxNQUFNLENBQ3JDLENBQUMsQ0FDSDs7OztjQW5Ib0M7Q0FxRzFCLGVBQWU7RUFBQztFQUFzQjtFQUFjO0VBQWU7RUFBZSJ9
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wYXR0ZXJucy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtcGF0dGVybnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoLCB0eXBlIEFwcFJlbGF0aXZlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbi8qKlxuICogU3luY2Vy6rCAIOq0gOyLrCDqsIDsp4Dqs6Ag7KeA7Lyc67O064qUIO2MjOydvOuTpOyeheuLiOuLpC5cbiAqIOydtCDtjIzsnbzrk6Tsl5Ag67OA6rK97J20IOyDneq4sOuptCDstpTqsIDsoIHsnbgg7J6R7JeFKOydtO2VmCBcIuyLse2BrFwiIOuYkOuKlCBcIuyLse2BrCDslaHshZhcIinsnYQg7IiY7ZaJ7ZWp64uI64ukLlxuICog7J20IOyekeyXheydtOudvCDtlajsnYAg7YyM7J28IOuzteyCrCDrmJDripQg7YWc7ZSM66a/IOugjOuNlOungeydhCDthrXtlZwgY29kZSBnZW5lcmF0aW9u7J2EIOydmOuvuO2VqeuLiOuLpC5cbiAqXG4gKiDqsr3roZwg7ZiV7IudOiBhcHBSb290IOq4sOykgCDsg4HrjIAg6rK966GcICh0YXJnZXQg65SU66CJ7Yag66as66GcIOyLnOyekSwg7JiIOiBcImFwaS9zcmMvLi4uXCIsIFwid2ViL3NyYy8uLi5cIilcbiAqIOyCrOyaqTogZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgp66GcIOygiOuMgCDqsr3roZwg67OA7ZmYIO2bhCBnbG9iIOyCrOyaqVxuICpcbiAqIOuRkCDqsIDsp4Ag7J2Y66+47KCBIOyYgeyXrTpcbiAqIC0g7J6F66ClICjsgqzsmqnsnpAg7J6R7ISxKTogYXBpIOuUlOugie2GoOumrOyXkOunjCDsnITsuZguIOyCrOyaqeyekOqwgCDsp4HsoJEg7Y647KeRLlxuICogLSDstpzroKUgKHNvbmFtdSDsg53shLEv67O17IKsKTogYXBpIOuYkOuKlCB0YXJnZXQg65SU66CJ7Yag66as7JeQIHNvbmFtdeqwgCDrp4zrk6TslrTrgrTripQg7YyM7J28LlxuICpcbiAqIOy2lOyggSDrsJYg7J6Q7IKwICjrtoDtirjsiqTtirjrnqkgcGhhc2Xsl5DshJwg66ek67KIIOuztOyepSk6XG4gKiAtIHNvbmFtdS5zaGFyZWQudHM6IOyCrOyaqeyekOqwgCDsu6TsiqTthLDrp4jsnbTspojtlZjripQg7J6Q7IKwLiBJZk5vdEV4aXN0c+uhnCAx7ZqMIOyDneyEsSDtm4Qg7IaQ64yA7KeAIOyViuydjC5cbiAqIC0gZW50cnktc2VydmVyLmdlbmVyYXRlZC50c3g6IOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5wuIOunpOuyiCBvdmVyd3JpdGUgZ2VuZXJhdGUuXG4gKlxuICog7JyEIOuRmOydgCBzeW5jKCnsnZgg67aA7Yq47Iqk7Yq4656pIHBoYXNl7JeQ7IScIOuzgOqyvSDqsoDstpwg7IKs7J207YG06rO8IOustOq0gO2VmOqyjCDrs7TsnqXrkKnri4jri6QuXG4gKiDstpTsoIEg7IKs7J207YG0IOyViOyXkOyEnCDtlaAg7JWh7IWY7J20IOyXhuuKlCDsnpDsgrDsnbTrnbwg7Yyo7YS0IOq3uOujueyXkCDtj6ztlajrkJjsp4Ag7JWK7Iq164uI64ukLlxuICpcbiAqIOychOy5mCDsubTthYzqs6DrpqzripQgYXBpL3RhcmdldHMvYW55d2hlcmUg7Zes7Y2866GcIOuqheyLnOyggeycvOuhnCDtkZztmITtlanri4jri6QuXG4gKlxuICogRmlsZVR5cGXsnYAg7J20IO2VqOyImOydmCDrsJjtmZgg7YOA7J6F7JeQ7IScIOyekOuPmSDstpTroaDrkKnri4jri6QuIO2CpCDstpTqsIAg7IucIOuzhOuPhCBlbnVtL+uwsOyXtOydhFxuICog64+Z6riw7ZmU7ZWgIO2VhOyalCDsl4bsnbQg7Jes6riwIO2VnCDqtbDrjbDrp4wg7IiY7KCV7ZWY66m0IOuQqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwKCkge1xuICAvLyDtl6ztjbwg7ZWo7IiY65OkIOunjOuTpOyWtOyEnCDqsIDsoLjsmLXri4jri6QuXG4gIGNvbnN0IHsgYXBpLCB0YXJnZXRzLCBhbnl3aGVyZSB9ID0gZ2xvYkJ1aWxkZXJzKCk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTb25hbXUg7J6F7J6l7JeQ7IScIHNvcnVjZeqwgCDrkJjripQg7YyM7J2865Ok7J6F64uI64ukLlxuICAgIC8vIOydtCDsuZzqtazrk6TsnbQg67OA6rK965CY66m0IOydtOuTpOuhnOu2gO2EsCDslaHshZjsnYQg7IiY7ZaJ7ZWY6rOgIO2MjOydvOydhCDsg53shLHtlanri4jri6QuXG4gICAgLy8g66qo64W466as7Y+s7JeQ7IScIOydtCBzb3VyY2Xrk6TsnYAgYXBpIO2UhOuhnOygne2KuOyXkCDtlZzsoJXrkJjrr4DroZwsIGFwaeyXkCDsnojripQg7Lmc6rWs65Ok66eMIOumrOyKpO2Mhe2VqeuLiOuLpC5cbiAgICBjb25maWc6IGFwaShcInNyYy9zb25hbXUuY29uZmlnLnRzXCIpLFxuICAgIGVudGl0eTogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZW50aXR5Lmpzb25cIiksXG4gICAgZnJhbWU6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmZyYW1lLnRzXCIpLFxuICAgIGZ1bmN0aW9uczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZnVuY3Rpb25zLnRzXCIpLFxuICAgIG1vZGVsOiBhcGkoXCJzcmMvYXBwbGljYXRpb24vKiovKi5tb2RlbC50c1wiKSxcbiAgICB0eXBlczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoudHlwZXMudHNcIiksXG4gICAgd29ya2Zsb3c6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLndvcmtmbG93LnRzXCIpLFxuICAgIGkxOG46IGFwaShcInNyYy9pMThuLyoqLyEoc2QuZ2VuZXJhdGVkKS50c1wiKSxcblxuICAgIC8vIFNvbmFtdeqwgCDstpzroKXtlZjripQg7IOd7ISxIO2MjOydvOuTpOyeheuLiOuLpC5cbiAgICAvLyDsnbQg7Lmc6rWs65Ok64+EIOygle2VqeyEsSDqsoDspp0g7LCo7JuQ7JeQ7IScIHNvbmFtdS5sb2Nr7JeQIOq4sOuhne2VtOyVvCDtlZjqs6AsXG4gICAgLy8g65iQ7ZWcIOuzgOqyveyLnCDqt7gg7IKs7Iuk7J2EIHN5bmNlcuqwgCDslYzquLDripQg7ZW07JW8IO2VqeuLiOuLpCjruYTroZ0g67OE64uk66W4IOyymOumrOqwgCDsl4bripQg6rK97Jqw64+EIOyeiOyngOunjCkuXG4gICAgLy9cbiAgICAvLyDsnpDsgrAg67O47ISx7JeQIOuUsOudvCDsnITsuZgg7Lm07YWM6rOg66as6rCAIOuLpOultOq4sCDrlYzrrLjsl5AsIOuzuOyEseuzhOuhnCDrtoTrpqztlbTshJwg7ZGc6riw7ZWp64uI64ukLlxuICAgIC8vIC0g7JaR7Kq9Le2VhOyalCDsnpDsgrA6IGFwaeyXkCDsoJXrs7jsnbQg66eM65Ok7Ja07KeEIOuSpCB0YXJnZXTsl5Ag67O17IKs65CoIChzb25hbXUuZ2VuZXJhdGVkLnt0cyx0c3h9KS5cbiAgICAvLyAtIGFwaSDsoITsmqkg7J6Q7IKwOiBhcGnsl5Drp4wg66eM65Ok7Ja07KeQIChzb25hbXUuZ2VuZXJhdGVkLmh0dHAsIHF1ZXJpZXMuZ2VuZXJhdGVkLnRzKS5cbiAgICAvLyAtIHRhcmdldCDsoITsmqkg7J6Q7IKwOiB0YXJnZXTsl5Drp4wg66eM65Ok7Ja07KeQIChzZXJ2aWNlcy5nZW5lcmF0ZWQudHPripQgc2VydmljZXMudGVtcGxhdGXsnZggOnRhcmdldCDrtoTrsLApLlxuICAgIC8vXG4gICAgLy8g7Jes6riw7JeQ64qUIFNvbmFtdeydmCDrqqjrk6Agc3luYyDsgrDstpzrrLzsnbQg7J6I64qUIOqyg+ydgCDslYTri5nri4jri6QuXG4gICAgLy8gc29uYW11LnNoYXJlZC50c+yZgCBlbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeOyZgCDqsJnsnYBcbiAgICAvLyBzeW5jIOy0iOuwmCAx7ZqM7ISxIOu2gO2KuOyKpO2KuOueqSDtjIzsnbzrk6TsnYAg6rSA66asIOyViCDtlZjquLAg65WM66y47JeQIOyXrOq4sOyXkCDrpqzsiqTtjIXrj4Qg7JWIIO2VqeuLiOuLpC5cbiAgICBnZW5lcmF0ZWQ6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmdlbmVyYXRlZC57dHMsdHN4LHNzby50c31cIiksXG4gICAgZ2VuZXJhdGVkQ29waWVkOiB0YXJnZXRzKFwic3JjL3NlcnZpY2VzLyoqL3NvbmFtdS5nZW5lcmF0ZWQue3RzLHRzeH1cIiksXG4gICAgaHR0cEdlbmVyYXRlZDogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZ2VuZXJhdGVkLmh0dHBcIiksXG4gICAgc2VydmljZXNHZW5lcmF0ZWQ6IHRhcmdldHMoXCJzcmMvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkLnRzXCIpLFxuICAgIHNkR2VuZXJhdGVkOiBhbnl3aGVyZShcInNyYy9pMThuLyoqL3NkLmdlbmVyYXRlZC50c1wiKSxcbiAgICB0eXBlc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLnR5cGVzLnRzXCIpLFxuICAgIGZ1bmN0aW9uc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLmZ1bmN0aW9ucy50c1wiKSxcbiAgICBpMThuQ29waWVkOiB0YXJnZXRzKFwic3JjL2kxOG4vKiovIShzZC5nZW5lcmF0ZWQpLnRzXCIpLFxuICB9IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBBcHBSZWxhdGl2ZVBhdGg+O1xufVxuXG4vKipcbiAqIOychOy5mCDsubTthYzqs6Drpqzrs4Qg6riA66GtIOu5jOuNlOulvCDrp4zrk6TslrQg67CY7ZmY7ZWp64uI64ukLlxuICogLSBhcGkocmVzdCk6IGFwaSDrlJTroInthqDrpqzsl5Ag7ZWc7KCVXG4gKiAtIHRhcmdldHMocmVzdCk6IHRhcmdldCDrlJTroInthqDrpqzrk6Tsl5Ag7ZWc7KCVICh3ZWIsIGFwcCDrk7EpXG4gKiAtIGFueXdoZXJlKHJlc3QpOiBhcGnsmYAgdGFyZ2V0IOuqqOuRkFxuICovXG5mdW5jdGlvbiBnbG9iQnVpbGRlcnMoKSB7XG4gIGNvbnN0IGFwaURpciA9IFNvbmFtdS5jb25maWcuYXBpLmRpcjtcbiAgY29uc3QgdGFyZ2V0RGlycyA9IFNvbmFtdS5jb25maWcuc3luYy50YXJnZXRzO1xuXG4gIC8vIE5vZGUg64K07J6lIGZzLmdsb2LsnZggYnJhY2UgZXhwYW5zaW9u7J2AIOuLqOydvCDrqaTrsoQge3h966W8IO2SgOyngCDslYrsnLzrr4DroZwsIOuppOuyhOqwgCAx6rCc7J28IOuVjOuKlCBhbHRlcm5hdGlvbiDsl4bsnbQg7KeB7KCRIOqysO2Vqe2VqeuLiOuLpC5cbiAgY29uc3QgYnJhY2VKb2luID0gKGRpcnM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PlxuICAgIGRpcnMubGVuZ3RoID09PSAxID8gZGlyc1swXSA6IGB7JHtkaXJzLmpvaW4oXCIsXCIpfX1gO1xuXG4gIHJldHVybiB7XG4gICAgYXBpOiAocGF0aEZyb21BcGk6IHN0cmluZykgPT4gYCR7YXBpRGlyfS8ke3BhdGhGcm9tQXBpfWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICAgIHRhcmdldHM6IChwYXRoRnJvbVRhcmdldDogc3RyaW5nKSA9PlxuICAgICAgYCR7YnJhY2VKb2luKHRhcmdldERpcnMpfS8ke3BhdGhGcm9tVGFyZ2V0fWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICAgIGFueXdoZXJlOiAocGF0aEZyb21Bbnl3aGVyZTogc3RyaW5nKSA9PlxuICAgICAgYCR7YnJhY2VKb2luKFthcGlEaXIsIC4uLnRhcmdldERpcnNdKX0vJHtwYXRoRnJvbUFueXdoZXJlfWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICB9O1xufVxuXG4vKipcbiAqIEZpbGVUeXBl7J2AIGdldENoZWNrc3VtUGF0dGVybkdyb3Vw7J2YIOuwmO2ZmCDqsJ3ssrQg7YKk7JeQ7IScIOyekOuPmSDstpTroaDrkKnri4jri6QuXG4gKiDrs4Trj4Qg67Cw7Je0L2VudW0g64+Z6riw7ZmUIOu2iO2VhOyalCDigJQg7Yyo7YS0IOq3uOujuSDtlajsiJjqsIAg7KeE7Iuk7J2YIOuLqOydvCDsm5DsspwuXG4gKi9cbmV4cG9ydCB0eXBlIEZpbGVUeXBlID0ga2V5b2YgUmV0dXJuVHlwZTx0eXBlb2YgZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXA+O1xuZXhwb3J0IHR5cGUgR2xvYlBhdHRlcm48VCBleHRlbmRzIEFwcFJlbGF0aXZlUGF0aCB8IEFic29sdXRlUGF0aD4gPSBSZWNvcmQ8RmlsZVR5cGUsIFQ+O1xuXG4vKipcbiAqIOu5jOuTnCDsgrDstpzrrLwg65SU66CJ7Yag66as64qUIGFsdGVybmF0aW9uIOq4gOuhreydtCDsnZjrj4TsuZgg7JWK6rKMIO2cmOunkOumtCDsiJgg7J6I7Jy866+A66GcIOyViOyghOunneycvOuhnCDsoJzsmbguXG4gKiBOb2RlIOuCtOyepSBmcy5nbG9i7J2YIGV4Y2x1ZGUg7Ji17IWY6rO8IO2VqOq7mCDsgqzsmqntlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCBHTE9CX0VYQ0xVREUgPSBbXCIqKi9ub2RlX21vZHVsZXMvKipcIiwgXCIqKi9kaXN0LyoqXCIsIFwiKiovYnVpbGQvKipcIiwgXCIqKi8udHVyYm8vKipcIl07XG5cbi8qKlxuICogYXBwUm9vdCDquLDspIAg7IOB64yAIOqyveuhnCDtjKjthLTsnYQg7KCI64yAIOqyveuhnCDtjKjthLTsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICpcbiAqIEByZXR1cm5zIOygiOuMgCDqsr3roZwg6riw67CYIEdsb2Ig7Yyo7YS0IOuntVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgpOiBHbG9iUGF0dGVybjxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgZ3JvdXAgPSBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cCgpO1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGdyb3VwKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAga2V5LFxuICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdmFsdWUpLCAvLyBhcHBSb290IOyDgeuMgCDqsr3roZwg4oaSIOygiOuMgCDqsr3roZxcbiAgICBdKSxcbiAgKSBhcyBHbG9iUGF0dGVybjxBYnNvbHV0ZVBhdGg+O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLFNBQWdCLDBCQUEwQjtDQUV4QyxNQUFNLEVBQUUsS0FBSyxTQUFTLGFBQWEsYUFBYTtDQUVoRCxPQUFPO0VBSUwsUUFBUSxJQUFJLHNCQUFzQjtFQUNsQyxRQUFRLElBQUksa0NBQWtDO0VBQzlDLE9BQU8sSUFBSSwrQkFBK0I7RUFDMUMsV0FBVyxJQUFJLG1DQUFtQztFQUNsRCxPQUFPLElBQUksK0JBQStCO0VBQzFDLE9BQU8sSUFBSSwrQkFBK0I7RUFDMUMsVUFBVSxJQUFJLGtDQUFrQztFQUNoRCxNQUFNLElBQUksZ0NBQWdDO0VBYzFDLFdBQVcsSUFBSSxnREFBZ0Q7RUFDL0QsaUJBQWlCLFFBQVEsMkNBQTJDO0VBQ3BFLGVBQWUsSUFBSSxxQ0FBcUM7RUFDeEQsbUJBQW1CLFFBQVEsb0NBQW9DO0VBQy9ELGFBQWEsU0FBUyw2QkFBNkI7RUFDbkQsYUFBYSxRQUFRLDRCQUE0QjtFQUNqRCxpQkFBaUIsUUFBUSxnQ0FBZ0M7RUFDekQsWUFBWSxRQUFRLGdDQUFnQztDQUN0RDtBQUNGOzs7Ozs7O0FBUUEsU0FBUyxlQUFlO0NBQ3RCLE1BQU0sU0FBUyxPQUFPLE9BQU8sSUFBSTtDQUNqQyxNQUFNLGFBQWEsT0FBTyxPQUFPLEtBQUs7Q0FHdEMsTUFBTSxhQUFhLFNBQ2pCLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7Q0FFbkQsT0FBTztFQUNMLE1BQU0sZ0JBQXdCLEdBQUcsT0FBTyxHQUFHO0VBQzNDLFVBQVUsbUJBQ1IsR0FBRyxVQUFVLFVBQVUsRUFBRSxHQUFHO0VBQzlCLFdBQVcscUJBQ1QsR0FBRyxVQUFVLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFLEdBQUc7Q0FDN0M7QUFDRjs7Ozs7O0FBb0JBLFNBQWdCLHdDQUFtRTtDQUNqRixNQUFNLFFBQVEsd0JBQXdCO0NBQ3RDLE9BQU8sT0FBTyxZQUNaLE9BQU8sUUFBUSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQzFDLEtBQ0EsS0FBSyxLQUFLLE9BQU8sYUFBYSxLQUFLLENBQ3JDLENBQUMsQ0FDSDtBQUNGOzs7YUFwSHNDO0NBcUd6QixlQUFlO0VBQUM7RUFBc0I7RUFBYztFQUFlO0NBQWMifQ==
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { __esmMin } from "../_virtual/
|
|
1
|
+
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { stat } from "fs/promises";
|
|
3
|
-
|
|
4
3
|
//#region src/syncer/file-tracking.ts
|
|
5
4
|
/**
|
|
6
5
|
* 우리가 디스크에 write한 path를 등록합니다. write 직후 호출하세요.
|
|
@@ -16,18 +15,15 @@ async function trackWritten(filePath) {
|
|
|
16
15
|
*/
|
|
17
16
|
async function isLastChangedByMe(filePath) {
|
|
18
17
|
const registered = fileWrittenAt.get(filePath);
|
|
19
|
-
if (registered ===
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
const fileStat = await stat(filePath);
|
|
23
|
-
return fileStat.mtimeMs <= registered;
|
|
18
|
+
if (registered === void 0) return false;
|
|
19
|
+
return (await stat(filePath)).mtimeMs <= registered;
|
|
24
20
|
}
|
|
25
21
|
var fileWrittenAt;
|
|
26
22
|
var init_file_tracking = __esmMin((() => {
|
|
27
|
-
fileWrittenAt = new Map();
|
|
23
|
+
fileWrittenAt = /* @__PURE__ */ new Map();
|
|
28
24
|
}));
|
|
29
|
-
|
|
30
25
|
//#endregion
|
|
31
26
|
init_file_tracking();
|
|
32
27
|
export { fileWrittenAt, init_file_tracking, isLastChangedByMe, trackWritten };
|
|
33
|
-
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10cmFja2luZy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtdHJhY2tpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RhdCB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuXG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbmV4cG9ydCBjb25zdCBmaWxlV3JpdHRlbkF0ID0gbmV3IE1hcDxBYnNvbHV0ZVBhdGgsIG51bWJlcj4oKTtcblxuLyoqXG4gKiDsmrDrpqzqsIAg65SU7Iqk7YGs7JeQIHdyaXRl7ZWcIHBhdGjrpbwg65Ox66Gd7ZWp64uI64ukLiB3cml0ZSDsp4Htm4Qg7Zi47Lac7ZWY7IS47JqULlxuICog65SU7Iqk7YGs7JeQ7IScIG10aW1l7J2EIOyngeygkSDsnb3slrQg7KCV7ZmV7ZWcIOqwkuycvOuhnCDrk7HroZ3tlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFja1dyaXR0ZW4oZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICBmaWxlV3JpdHRlbkF0LnNldChmaWxlUGF0aCwgZmlsZVN0YXQubXRpbWVNcyk7XG59XG5cbi8qKlxuICog7KO87Ja07KeEIHBhdGjqsIAg6rCA7J6lIOy1nOq3vCDsmrDrpqwgd3JpdGUg7J207ZuE66GcIOyZuOu2gOyXkOyEnCDsiJjsoJXrkJwg7KCBIOyXhuuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gKiB0cnVl66m0IFwi64K06rCAIOyTtCDqt7jrjIDroZwg64Ko7JWE7J6I7J2MXCIsIGZhbHNl66m0IFwi7Jm467aA7JeQ7IScIOyImOygleuQkOqxsOuCmCDsmrDrpqzqsIAg7JO0IOyggSDsl4bsnYxcIi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzTGFzdENoYW5nZWRCeU1lKGZpbGVQYXRoOiBBYnNvbHV0ZVBhdGgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVnaXN0ZXJlZCA9IGZpbGVXcml0dGVuQXQuZ2V0KGZpbGVQYXRoKTtcbiAgaWYgKHJlZ2lzdGVyZWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICByZXR1cm4gZmlsZVN0YXQubXRpbWVNcyA8PSByZWdpc3RlcmVkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBVUEsZUFBc0IsYUFBYSxVQUF1QztDQUN4RSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7Q0FDcEMsY0FBYyxJQUFJLFVBQVUsU0FBUyxPQUFPO0FBQzlDOzs7OztBQU1BLGVBQXNCLGtCQUFrQixVQUEwQztDQUNoRixNQUFNLGFBQWEsY0FBYyxJQUFJLFFBQVE7Q0FDN0MsSUFBSSxlQUFlLFFBQ2pCLE9BQU87Q0FHVCxRQUFPLE1BRGdCLEtBQUssUUFBUSxFQUM3QixDQUFTLFdBQVc7QUFDN0I7OztDQXRCYSxnQ0FBZ0IsSUFBSSxJQUEwQiJ9
|
package/dist/syncer/index.js
CHANGED
|
@@ -5,7 +5,6 @@ import { generateTemplate, init_code_generator, renderTemplate } from "./code-ge
|
|
|
5
5
|
import { createEntity, delEntity, init_entity_operations } from "./entity-operations.js";
|
|
6
6
|
import { init_module_loader, loadApis, loadModels, loadTypes, loadWorkflows } from "./module-loader.js";
|
|
7
7
|
import { Syncer, init_syncer } from "./syncer.js";
|
|
8
|
-
|
|
9
8
|
//#region src/syncer/index.ts
|
|
10
9
|
init_api_parser();
|
|
11
10
|
init_checksum();
|
|
@@ -14,7 +13,7 @@ init_entity_operations();
|
|
|
14
13
|
init_file_patterns();
|
|
15
14
|
init_module_loader();
|
|
16
15
|
init_syncer();
|
|
17
|
-
|
|
18
16
|
//#endregion
|
|
19
17
|
export { GLOB_EXCLUDE, Syncer, createEntity, delEntity, findChangedFilesUsingChecksums, generateTemplate, getChecksumPatternGroup, getChecksumPatternGroupInAbsolutePath, loadApis, loadModels, loadTypes, loadWorkflows, readApisFromFile, renderTemplate, renewChecksums };
|
|
18
|
+
|
|
20
19
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hcGktcGFyc2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jaGVja3N1bVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29kZS1nZW5lcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VudGl0eS1vcGVyYXRpb25zXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9maWxlLXBhdHRlcm5zXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2R1bGUtbG9hZGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zeW5jZXJcIjtcbiJdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __esmMin } from "../_virtual/
|
|
1
|
+
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { globAsync, init_async_utils } from "../utils/async-utils.js";
|
|
3
3
|
import { Sonamu, init_sonamu } from "../api/sonamu.js";
|
|
4
4
|
import { importMembers, init_esm_utils } from "../utils/esm-utils.js";
|
|
@@ -6,7 +6,6 @@ import { init_path_utils, runtimePath } from "../utils/path-utils.js";
|
|
|
6
6
|
import { init_api_parser, readApisFromFile } from "./api-parser.js";
|
|
7
7
|
import { z as z$1 } from "zod";
|
|
8
8
|
import path from "path";
|
|
9
|
-
|
|
10
9
|
//#region src/syncer/module-loader.ts
|
|
11
10
|
/**
|
|
12
11
|
* *.model.ts와 *.frame.ts 파일들에서 API 메소드를 파싱하여 로드합니다.
|
|
@@ -14,34 +13,24 @@ import path from "path";
|
|
|
14
13
|
* 따라서 loadModels()를 먼저 호출해야 합니다.
|
|
15
14
|
*/
|
|
16
15
|
async function loadApis() {
|
|
17
|
-
const
|
|
18
|
-
const modelPaths = await globAsync(modelPathsPattern);
|
|
16
|
+
const modelPaths = await globAsync(path.join(Sonamu.apiRootPath, "src/application/**/*.{model,frame}.ts"));
|
|
19
17
|
const apis = [];
|
|
20
18
|
for (const filePath of modelPaths) {
|
|
21
19
|
const parsedApis = await readApisFromFile(filePath);
|
|
22
20
|
apis.push(...parsedApis);
|
|
23
21
|
}
|
|
24
|
-
for (const api of apis) {
|
|
25
|
-
if (api.path === "") {
|
|
26
|
-
throw new Error(`API ${api.modelName}.${api.methodName} has no path. Please attach @api decorator to the method.`);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
22
|
+
for (const api of apis) if (api.path === "") throw new Error(`API ${api.modelName}.${api.methodName} has no path. Please attach @api decorator to the method.`);
|
|
29
23
|
return apis;
|
|
30
24
|
}
|
|
31
25
|
/**
|
|
32
26
|
* *.model.ts와 *.frame.ts 파일들에서 Model/Frame 클래스 인스턴스를 로드합니다.
|
|
33
27
|
*/
|
|
34
28
|
async function loadModels() {
|
|
35
|
-
const
|
|
36
|
-
const modelPaths = await globAsync(modelPathsPattern);
|
|
29
|
+
const modelPaths = await globAsync(path.join(Sonamu.apiRootPath, runtimePath("src/application/**/*.{model,frame}.ts")));
|
|
37
30
|
const models = {};
|
|
38
31
|
for (const filePath of modelPaths) {
|
|
39
32
|
const importedMembers = await importMembers(filePath);
|
|
40
|
-
for (const { name, value } of importedMembers)
|
|
41
|
-
if (name.endsWith("Model") || name.endsWith("Frame")) {
|
|
42
|
-
models[name] = value;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
33
|
+
for (const { name, value } of importedMembers) if (name.endsWith("Model") || name.endsWith("Frame")) models[name] = value;
|
|
45
34
|
}
|
|
46
35
|
return models;
|
|
47
36
|
}
|
|
@@ -54,11 +43,7 @@ async function loadTypes() {
|
|
|
54
43
|
const types = {};
|
|
55
44
|
for (const filePath of typePaths) {
|
|
56
45
|
const importedMembers = await importMembers(filePath);
|
|
57
|
-
for (const { name, value } of importedMembers)
|
|
58
|
-
if (value instanceof z$1.ZodType) {
|
|
59
|
-
types[name] = value;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
46
|
+
for (const { name, value } of importedMembers) if (value instanceof z$1.ZodType) types[name] = value;
|
|
62
47
|
}
|
|
63
48
|
return types;
|
|
64
49
|
}
|
|
@@ -66,9 +51,8 @@ async function loadTypes() {
|
|
|
66
51
|
* *.workflow.ts 파일들에서 Workflow 메타데이터를 로드합니다.
|
|
67
52
|
*/
|
|
68
53
|
async function loadWorkflows() {
|
|
69
|
-
const
|
|
70
|
-
const
|
|
71
|
-
const workflows = new Map();
|
|
54
|
+
const workflowPaths = await globAsync(path.join(Sonamu.apiRootPath, runtimePath("src/application/**/*.workflow.ts")));
|
|
55
|
+
const workflows = /* @__PURE__ */ new Map();
|
|
72
56
|
for (const filePath of workflowPaths) {
|
|
73
57
|
const importedMembers = await importMembers(filePath);
|
|
74
58
|
workflows.set(filePath, importedMembers.filter(({ value }) => {
|
|
@@ -86,8 +70,8 @@ var init_module_loader = __esmMin((() => {
|
|
|
86
70
|
init_path_utils();
|
|
87
71
|
init_api_parser();
|
|
88
72
|
}));
|
|
89
|
-
|
|
90
73
|
//#endregion
|
|
91
74
|
init_module_loader();
|
|
92
75
|
export { init_module_loader, loadApis, loadModels, loadTypes, loadWorkflows };
|
|
93
|
-
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWxvYWRlci5qcyIsIm5hbWVzIjpbInoiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL21vZHVsZS1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBCYXNlRnJhbWVDbGFzcyB9IGZyb20gXCIuLi9hcGkvYmFzZS1mcmFtZVwiO1xuaW1wb3J0IHsgdHlwZSBFeHRlbmRlZEFwaSB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQmFzZU1vZGVsQ2xhc3MgfSBmcm9tIFwiLi4vZGF0YWJhc2UvYmFzZS1tb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBXb3JrZmxvd01ldGFkYXRhIH0gZnJvbSBcIi4uL3Rhc2tzL2RlY29yYXRvclwiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHsgcnVudGltZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgcmVhZEFwaXNGcm9tRmlsZSB9IGZyb20gXCIuL2FwaS1wYXJzZXJcIjtcblxuZXhwb3J0IHR5cGUgTG9hZGVkQXBpcyA9IEV4dGVuZGVkQXBpW107XG5cbmV4cG9ydCB0eXBlIExvYWRlZFR5cGVzID0geyBbdHlwZU5hbWU6IHN0cmluZ106IHouWm9kVHlwZSB9O1xuXG5leHBvcnQgdHlwZSBMb2FkZWRNb2RlbHMgPSB7XG4gIFttb2RlbE5hbWU6IHN0cmluZ106IEJhc2VNb2RlbENsYXNzIHwgQmFzZUZyYW1lQ2xhc3M7XG59O1xuXG4vKipcbiAqICoubW9kZWwudHPsmYAgKi5mcmFtZS50cyDtjIzsnbzrk6Tsl5DshJwgQVBJIOuplOyGjOuTnOulvCDtjIzsi7HtlZjsl6wg66Gc65Oc7ZWp64uI64ukLlxuICogcmVnaXN0ZXJlZEFwaXPsl5AgQVBJ6rCAIOuTseuhneuQmOyWtCDsnojslrTslbwg7ZWY6riwIOuVjOusuOyXkCwgKi5tb2RlbC50cyDtjIzsnbzrk6TsnYQg66i87KCAIGltcG9ydO2VtOyVvCDtlanri4jri6QuXG4gKiDrlLDrnbzshJwgbG9hZE1vZGVscygp66W8IOuovOyggCDtmLjstpztlbTslbwg7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEFwaXMoKTogUHJvbWlzZTxMb2FkZWRBcGlzPiB7XG4gIC8vIOyWmOuKlCDtirnsnbTtlZjqsozrj4Qg7ZmY6rK97JeQIOuUsOudvCAudHPrgpggLmpz66W8IGltcG9ydO2VmOuKlCDqsr3smrDqsIAg7JWE64uI6rOgLFxuICAvLyDtg4DsnoXsnbQg7IK07JWE7J6I64qUIC50cyDshozsiqQg7L2U65Oc66eM7J2EIOydveyWtOyVvCDtlanri4jri6QuXG4gIC8vIOydtOqyg+ydgCBkZXbshJzrsoQoaG90IHJlbG9hZCnqsIAg7JWE64uMIHByb2R1Y3Rpb24g7ZmY6rK97JeQ7ISc64+EIOuPmeydvO2VqeuLiOuLpC5cbiAgLy8g66qo642465Ok7J2YIC50cyDtjIzsnbzsnbQg7J6I7Ja07JW8IOydtOulvCDsnb3slrTshJwg65287Jqw7Yq466W8IOuTseuhne2VoCDsiJgg7J6I7Ja07JqUIVxuICBjb25zdCBtb2RlbFBhdGhzUGF0dGVybiA9IHBhdGguam9pbihcbiAgICBTb25hbXUuYXBpUm9vdFBhdGgsXG4gICAgXCJzcmMvYXBwbGljYXRpb24vKiovKi57bW9kZWwsZnJhbWV9LnRzXCIsIC8vICEhIHJ1bnRpbWVQYXRoIOyViCDslIAg7KO87J2YICEhXG4gICk7XG4gIGNvbnN0IG1vZGVsUGF0aHMgPSAoYXdhaXQgZ2xvYkFzeW5jKG1vZGVsUGF0aHNQYXR0ZXJuKSkgYXMgQWJzb2x1dGVQYXRoW107XG5cbiAgY29uc3QgYXBpczogTG9hZGVkQXBpcyA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIG1vZGVsUGF0aHMpIHtcbiAgICBjb25zdCBwYXJzZWRBcGlzID0gYXdhaXQgcmVhZEFwaXNGcm9tRmlsZShmaWxlUGF0aCk7XG4gICAgYXBpcy5wdXNoKC4uLnBhcnNlZEFwaXMpO1xuICB9XG4gIC8vIGNvbnNvbGUubG9nKFxuICAvLyAgIGNoYWxrLmdyYXkoYFtMb2FkaW5nXSBMb2FkZWQgQVBJcyBmcm9tIFwiKi5tb2RlbC50c1wiIGZpbGVzOiAke2NvdW50fSBmaWxlcy5gKVxuICAvLyApO1xuXG4gIGZvciAoY29uc3QgYXBpIG9mIGFwaXMpIHtcbiAgICBpZiAoYXBpLnBhdGggPT09IFwiXCIpIHtcbiAgICAgIC8vIGFwaeydmCDqsr3roZwocGF0aCnqsIAgXCLthYUg67mE7Ja07J6I7J2MXCLsnbgg7IOB7YOc7J6F64uI64ukLlxuICAgICAgLy8g7J2064qUIEBhcGnsmYAg7ZWo6ruYIOyCrOyaqe2VtOyVvCDtlZjripQg642w7L2U66CI7J207YSw6rCAIEBhcGkg7JeG7J20IOu2meydgCDsg4HtmansnoXri4jri6QuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBUEkgJHthcGkubW9kZWxOYW1lfS4ke2FwaS5tZXRob2ROYW1lfSBoYXMgbm8gcGF0aC4gUGxlYXNlIGF0dGFjaCBAYXBpIGRlY29yYXRvciB0byB0aGUgbWV0aG9kLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcGlzO1xufVxuXG4vKipcbiAqICoubW9kZWwudHPsmYAgKi5mcmFtZS50cyDtjIzsnbzrk6Tsl5DshJwgTW9kZWwvRnJhbWUg7YG0656Y7IqkIOyduOyKpO2EtOyKpOulvCDroZzrk5ztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTW9kZWxzKCk6IFByb21pc2U8TG9hZGVkTW9kZWxzPiB7XG4gIGNvbnN0IG1vZGVsUGF0aHNQYXR0ZXJuID0gcGF0aC5qb2luKFxuICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLnttb2RlbCxmcmFtZX0udHNcIiksXG4gICk7XG4gIGNvbnN0IG1vZGVsUGF0aHMgPSBhd2FpdCBnbG9iQXN5bmMobW9kZWxQYXRoc1BhdHRlcm4pO1xuXG4gIGNvbnN0IG1vZGVsczogTG9hZGVkTW9kZWxzID0ge307XG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgbW9kZWxQYXRocykge1xuICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8QmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcz4oZmlsZVBhdGgpO1xuXG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaW1wb3J0ZWRNZW1iZXJzKSB7XG4gICAgICBpZiAobmFtZS5lbmRzV2l0aChcIk1vZGVsXCIpIHx8IG5hbWUuZW5kc1dpdGgoXCJGcmFtZVwiKSkge1xuICAgICAgICBtb2RlbHNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW9kZWxzO1xufVxuXG4vKipcbiAqICoudHlwZXMudHPsmYAgKi5nZW5lcmF0ZWQudHMg7YyM7J2865Ok7JeQ7IScIFpvZCDsiqTtgqTrp4jrpbwg66Gc65Oc7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFR5cGVzKCk6IFByb21pc2U8TG9hZGVkVHlwZXM+IHtcbiAgY29uc3QgdHlwZVBhdGhzUGF0dGVybnMgPSBbXG4gICAgcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi50eXBlcy50c1wiKSksXG4gICAgcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi5nZW5lcmF0ZWQudHNcIikpLFxuICBdO1xuICBjb25zdCB0eXBlUGF0aHMgPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodHlwZVBhdGhzUGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBnbG9iQXN5bmMocGF0dGVybikpKVxuICApLmZsYXQoKTtcblxuICBjb25zdCB0eXBlczogTG9hZGVkVHlwZXMgPSB7fTtcbiAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB0eXBlUGF0aHMpIHtcbiAgICBjb25zdCBpbXBvcnRlZE1lbWJlcnMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzPHouWm9kVHlwZT4oZmlsZVBhdGgpO1xuICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIGltcG9ydGVkTWVtYmVycykge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2Ygei5ab2RUeXBlKSB7XG4gICAgICAgIHR5cGVzW25hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG4vKipcbiAqICoud29ya2Zsb3cudHMg7YyM7J2865Ok7JeQ7IScIFdvcmtmbG93IOuplO2DgOuNsOydtO2EsOulvCDroZzrk5ztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV29ya2Zsb3dzKCkge1xuICBjb25zdCB3b3JrZmxvd1BhdGhzUGF0dGVybiA9IHBhdGguam9pbihcbiAgICBTb25hbXUuYXBpUm9vdFBhdGgsXG4gICAgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi53b3JrZmxvdy50c1wiKSxcbiAgKTtcbiAgY29uc3Qgd29ya2Zsb3dQYXRocyA9IGF3YWl0IGdsb2JBc3luYyh3b3JrZmxvd1BhdGhzUGF0dGVybik7XG4gIGNvbnN0IHdvcmtmbG93czogTWFwPHN0cmluZywgV29ya2Zsb3dNZXRhZGF0YVtdPiA9IG5ldyBNYXAoKTtcbiAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB3b3JrZmxvd1BhdGhzKSB7XG4gICAgY29uc3QgaW1wb3J0ZWRNZW1iZXJzID0gYXdhaXQgaW1wb3J0TWVtYmVycyhmaWxlUGF0aCk7XG4gICAgd29ya2Zsb3dzLnNldChcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgaW1wb3J0ZWRNZW1iZXJzXG4gICAgICAgIC5maWx0ZXIoKHsgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICBcInR5cGVcIiBpbiB2YWx1ZSAmJlxuICAgICAgICAgICAgdmFsdWUudHlwZSA9PT0gXCJ3b3JrZmxvd1wiICYmXG4gICAgICAgICAgICBcImZuXCIgaW4gdmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS5mbiA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlIGFzIFdvcmtmbG93TWV0YWRhdGE7XG4gICAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gd29ya2Zsb3dzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQTRCQSxlQUFzQixXQUFnQztDQVNwRCxNQUFNLGFBQWMsTUFBTSxVQUpBLEtBQUssS0FDN0IsT0FBTyxhQUNQLHVDQUVrQyxDQUFpQjtDQUVyRCxNQUFNLE9BQW1CLENBQUM7Q0FDMUIsS0FBSyxNQUFNLFlBQVksWUFBWTtFQUNqQyxNQUFNLGFBQWEsTUFBTSxpQkFBaUIsUUFBUTtFQUNsRCxLQUFLLEtBQUssR0FBRyxVQUFVO0NBQ3pCO0NBS0EsS0FBSyxNQUFNLE9BQU8sTUFDaEIsSUFBSSxJQUFJLFNBQVMsSUFHZixNQUFNLElBQUksTUFDUixPQUFPLElBQUksVUFBVSxHQUFHLElBQUksV0FBVywwREFDekM7Q0FJSixPQUFPO0FBQ1Q7Ozs7QUFLQSxlQUFzQixhQUFvQztDQUt4RCxNQUFNLGFBQWEsTUFBTSxVQUpDLEtBQUssS0FDN0IsT0FBTyxhQUNQLFlBQVksdUNBQXVDLENBRWxCLENBQWlCO0NBRXBELE1BQU0sU0FBdUIsQ0FBQztDQUM5QixLQUFLLE1BQU0sWUFBWSxZQUFZO0VBQ2pDLE1BQU0sa0JBQWtCLE1BQU0sY0FBK0MsUUFBUTtFQUVyRixLQUFLLE1BQU0sRUFBRSxNQUFNLFdBQVcsaUJBQzVCLElBQUksS0FBSyxTQUFTLE9BQU8sS0FBSyxLQUFLLFNBQVMsT0FBTyxHQUNqRCxPQUFPLFFBQVE7Q0FHckI7Q0FFQSxPQUFPO0FBQ1Q7Ozs7QUFLQSxlQUFzQixZQUFrQztDQUN0RCxNQUFNLG9CQUFvQixDQUN4QixLQUFLLEtBQUssT0FBTyxhQUFhLFlBQVksK0JBQStCLENBQUMsR0FDMUUsS0FBSyxLQUFLLE9BQU8sYUFBYSxZQUFZLG1DQUFtQyxDQUFDLENBQ2hGO0NBQ0EsTUFBTSxhQUNKLE1BQU0sUUFBUSxJQUFJLGtCQUFrQixLQUFLLFlBQVksVUFBVSxPQUFPLENBQUMsQ0FBQyxFQUFBLENBQ3hFLEtBQUs7Q0FFUCxNQUFNLFFBQXFCLENBQUM7Q0FDNUIsS0FBSyxNQUFNLFlBQVksV0FBVztFQUNoQyxNQUFNLGtCQUFrQixNQUFNLGNBQXlCLFFBQVE7RUFDL0QsS0FBSyxNQUFNLEVBQUUsTUFBTSxXQUFXLGlCQUM1QixJQUFJLGlCQUFpQkEsSUFBRSxTQUNyQixNQUFNLFFBQVE7Q0FHcEI7Q0FFQSxPQUFPO0FBQ1Q7Ozs7QUFLQSxlQUFzQixnQkFBZ0I7Q0FLcEMsTUFBTSxnQkFBZ0IsTUFBTSxVQUpDLEtBQUssS0FDaEMsT0FBTyxhQUNQLFlBQVksa0NBQWtDLENBRVYsQ0FBb0I7Q0FDMUQsTUFBTSw0QkFBNkMsSUFBSSxJQUFJO0NBQzNELEtBQUssTUFBTSxZQUFZLGVBQWU7RUFDcEMsTUFBTSxrQkFBa0IsTUFBTSxjQUFjLFFBQVE7RUFDcEQsVUFBVSxJQUNSLFVBQ0EsZ0JBQ0csUUFBUSxFQUFFLFlBQVk7R0FDckIsT0FDRSxPQUFPLFVBQVUsWUFDakIsVUFBVSxRQUNWLFVBQVUsU0FDVixNQUFNLFNBQVMsY0FDZixRQUFRLFNBQ1IsT0FBTyxNQUFNLE9BQU87RUFFeEIsQ0FBQyxDQUFDLENBQ0QsS0FBSyxFQUFFLFlBQVk7R0FDbEIsT0FBTztFQUNULENBQUMsQ0FDTDtDQUNGO0NBRUEsT0FBTztBQUNUOzthQXhJc0M7a0JBR1U7Z0JBQ0U7aUJBQ0Q7aUJBRUYifQ==
|