sonamu 0.9.2 → 0.9.4
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/api/config.d.ts +1 -2
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +1 -1
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +10 -1
- package/dist/auth/audit-log/builders.d.ts +216 -0
- package/dist/auth/audit-log/builders.d.ts.map +1 -0
- package/dist/auth/audit-log/builders.js +307 -0
- package/dist/auth/audit-log/events.d.ts +143 -0
- package/dist/auth/audit-log/events.d.ts.map +1 -0
- package/dist/auth/audit-log/events.js +74 -0
- package/dist/auth/audit-log/plugin.d.ts +11 -0
- package/dist/auth/audit-log/plugin.d.ts.map +1 -0
- package/dist/auth/audit-log/plugin.js +427 -0
- package/dist/auth/audit-log-ingestor.d.ts +9 -0
- package/dist/auth/audit-log-ingestor.d.ts.map +1 -0
- package/dist/auth/audit-log-ingestor.js +194 -0
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +4 -2
- package/dist/auth/plugins/entity-definitions/admin.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/admin.js +4 -4
- package/dist/auth/plugins/entity-definitions/audit-log.d.ts +12 -0
- package/dist/auth/plugins/entity-definitions/audit-log.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/audit-log.js +291 -0
- package/dist/auth/plugins/entity-definitions/index.d.ts +1 -0
- package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/index.js +5 -3
- package/dist/auth/plugins/entity-definitions/types.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/types.d.ts.map +1 -1
- package/dist/bin/fixture.d.ts.map +1 -1
- package/dist/bin/fixture.js +111 -1
- package/dist/database/_batch_update.d.ts +1 -1
- package/dist/database/_batch_update.js +2 -2
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +14 -4
- package/dist/index.js +4 -2
- package/dist/storage/buffered-file.d.ts +1 -1
- package/dist/storage/buffered-file.js +2 -2
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +2 -9
- package/dist/template/implementations/entry-server.template.js +3 -2
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +2 -1
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_sso.template.js +2 -1
- package/dist/template/implementations/queries.template.d.ts.map +1 -1
- package/dist/template/implementations/queries.template.js +3 -1
- package/dist/template/implementations/sd.template.js +3 -2
- package/dist/template/implementations/services.template.d.ts.map +1 -1
- package/dist/template/implementations/services.template.js +44 -7
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +2 -2
- package/dist/ui-web/assets/{index-CfgbCoOJ.js → index-C5KUjXm0.js} +48 -45
- package/dist/ui-web/index.html +1 -1
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +4 -4
- package/package.json +3 -3
- package/src/api/config.ts +1 -2
- package/src/api/sonamu.ts +14 -0
- package/src/auth/audit-log/builders.ts +791 -0
- package/src/auth/audit-log/events.ts +149 -0
- package/src/auth/audit-log/plugin.ts +913 -0
- package/src/auth/audit-log-ingestor.ts +233 -0
- package/src/auth/index.ts +3 -0
- package/src/auth/plugins/entity-definitions/admin.ts +3 -3
- package/src/auth/plugins/entity-definitions/audit-log.ts +171 -0
- package/src/auth/plugins/entity-definitions/index.ts +3 -0
- package/src/auth/plugins/entity-definitions/types.ts +2 -1
- package/src/bin/fixture.ts +143 -0
- package/src/database/_batch_update.ts +1 -1
- package/src/entity/entity-manager.ts +10 -3
- package/src/shared/app.shared.ts.txt +2 -3
- package/src/shared/web.shared.ts.txt +2 -2
- package/src/storage/buffered-file.ts +1 -1
- package/src/syncer/syncer.ts +1 -11
- package/src/template/implementations/entry-server.template.ts +1 -1
- package/src/template/implementations/generated.template.ts +1 -0
- package/src/template/implementations/generated_sso.template.ts +1 -0
- package/src/template/implementations/queries.template.ts +10 -1
- package/src/template/implementations/sd.template.ts +1 -1
- package/src/template/implementations/services.template.ts +62 -6
- package/src/template/zod-converter.ts +2 -1
- package/src/utils/fs-utils.ts +6 -4
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { adminEntityDef } from "./admin.js";
|
|
2
2
|
import { anonymousEntityDef } from "./anonymous.js";
|
|
3
3
|
import { apiKeyEntityDef } from "./api-key.js";
|
|
4
|
+
import { auditLogEntityDef } from "./audit-log.js";
|
|
4
5
|
import { jwtEntityDef } from "./jwt.js";
|
|
5
6
|
import { organizationEntityDef } from "./organization.js";
|
|
6
7
|
import { passkeyEntityDef } from "./passkey.js";
|
|
@@ -24,7 +25,8 @@ const ENTITY_DEFINITIONS = {
|
|
|
24
25
|
organization: organizationEntityDef,
|
|
25
26
|
"api-key": apiKeyEntityDef,
|
|
26
27
|
jwt: jwtEntityDef,
|
|
27
|
-
anonymous: anonymousEntityDef
|
|
28
|
+
anonymous: anonymousEntityDef,
|
|
29
|
+
"audit-log": auditLogEntityDef
|
|
28
30
|
};
|
|
29
31
|
/**
|
|
30
32
|
* 지원하는 플러그인 ID 목록
|
|
@@ -38,5 +40,5 @@ function isValidPluginId(id) {
|
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
//#endregion
|
|
41
|
-
export { ENTITY_DEFINITIONS, SUPPORTED_PLUGIN_IDS, adminEntityDef, anonymousEntityDef, apiKeyEntityDef, isValidPluginId, jwtEntityDef, organizationEntityDef, passkeyEntityDef, phoneNumberEntityDef, ssoEntityDef, twoFactorEntityDef, usernameEntityDef };
|
|
42
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJFTlRJVFlfREVGSU5JVElPTlM6IFJlY29yZDxCZXR0ZXJBdXRoUGx1Z2luSWQsIEJldHRlckF1dGhFbnRpdHlEZWY+
|
|
43
|
+
export { ENTITY_DEFINITIONS, SUPPORTED_PLUGIN_IDS, adminEntityDef, anonymousEntityDef, apiKeyEntityDef, auditLogEntityDef, isValidPluginId, jwtEntityDef, organizationEntityDef, passkeyEntityDef, phoneNumberEntityDef, ssoEntityDef, twoFactorEntityDef, usernameEntityDef };
|
|
44
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJFTlRJVFlfREVGSU5JVElPTlM6IFJlY29yZDxCZXR0ZXJBdXRoUGx1Z2luSWQsIEJldHRlckF1dGhFbnRpdHlEZWY+IiwiU1VQUE9SVEVEX1BMVUdJTl9JRFM6IEJldHRlckF1dGhQbHVnaW5JZFtdIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F1dGgvcGx1Z2lucy9lbnRpdHktZGVmaW5pdGlvbnMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgYWRtaW5FbnRpdHlEZWYgfSBmcm9tIFwiLi9hZG1pblwiO1xuZXhwb3J0IHsgYW5vbnltb3VzRW50aXR5RGVmIH0gZnJvbSBcIi4vYW5vbnltb3VzXCI7XG5leHBvcnQgeyBhcGlLZXlFbnRpdHlEZWYgfSBmcm9tIFwiLi9hcGkta2V5XCI7XG5leHBvcnQgeyBhdWRpdExvZ0VudGl0eURlZiB9IGZyb20gXCIuL2F1ZGl0LWxvZ1wiO1xuZXhwb3J0IHsgand0RW50aXR5RGVmIH0gZnJvbSBcIi4vand0XCI7XG5leHBvcnQgeyBvcmdhbml6YXRpb25FbnRpdHlEZWYgfSBmcm9tIFwiLi9vcmdhbml6YXRpb25cIjtcbmV4cG9ydCB7IHBhc3NrZXlFbnRpdHlEZWYgfSBmcm9tIFwiLi9wYXNza2V5XCI7XG5leHBvcnQgeyBwaG9uZU51bWJlckVudGl0eURlZiB9IGZyb20gXCIuL3Bob25lLW51bWJlclwiO1xuZXhwb3J0IHsgc3NvRW50aXR5RGVmIH0gZnJvbSBcIi4vc3NvXCI7XG5leHBvcnQgeyB0d29GYWN0b3JFbnRpdHlEZWYgfSBmcm9tIFwiLi90d28tZmFjdG9yXCI7XG5leHBvcnQgdHlwZSB7IEJldHRlckF1dGhFbnRpdHlEZWYsIEJldHRlckF1dGhQbHVnaW5JZCB9IGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgeyB1c2VybmFtZUVudGl0eURlZiB9IGZyb20gXCIuL3VzZXJuYW1lXCI7XG5cbmltcG9ydCB7IGFkbWluRW50aXR5RGVmIH0gZnJvbSBcIi4vYWRtaW5cIjtcbmltcG9ydCB7IGFub255bW91c0VudGl0eURlZiB9IGZyb20gXCIuL2Fub255bW91c1wiO1xuaW1wb3J0IHsgYXBpS2V5RW50aXR5RGVmIH0gZnJvbSBcIi4vYXBpLWtleVwiO1xuaW1wb3J0IHsgYXVkaXRMb2dFbnRpdHlEZWYgfSBmcm9tIFwiLi9hdWRpdC1sb2dcIjtcbmltcG9ydCB7IGp3dEVudGl0eURlZiB9IGZyb20gXCIuL2p3dFwiO1xuaW1wb3J0IHsgb3JnYW5pemF0aW9uRW50aXR5RGVmIH0gZnJvbSBcIi4vb3JnYW5pemF0aW9uXCI7XG5pbXBvcnQgeyBwYXNza2V5RW50aXR5RGVmIH0gZnJvbSBcIi4vcGFzc2tleVwiO1xuaW1wb3J0IHsgcGhvbmVOdW1iZXJFbnRpdHlEZWYgfSBmcm9tIFwiLi9waG9uZS1udW1iZXJcIjtcbmltcG9ydCB7IHNzb0VudGl0eURlZiB9IGZyb20gXCIuL3Nzb1wiO1xuaW1wb3J0IHsgdHdvRmFjdG9yRW50aXR5RGVmIH0gZnJvbSBcIi4vdHdvLWZhY3RvclwiO1xuaW1wb3J0IHsgdHlwZSBCZXR0ZXJBdXRoRW50aXR5RGVmLCB0eXBlIEJldHRlckF1dGhQbHVnaW5JZCB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyB1c2VybmFtZUVudGl0eURlZiB9IGZyb20gXCIuL3VzZXJuYW1lXCI7XG5cbi8qKlxuICog7JeU7Yuw7YuwIOygleydmCDroIjsp4DsiqTtirjrpqxcbiAqIO2UjOufrOq3uOyduCBJROuhnCDsl5Tti7Dti7Ag7KCV7J2Y7JeQIOygkeq3vO2VoCDsiJgg7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgY29uc3QgRU5USVRZX0RFRklOSVRJT05TOiBSZWNvcmQ8QmV0dGVyQXV0aFBsdWdpbklkLCBCZXR0ZXJBdXRoRW50aXR5RGVmPiA9IHtcbiAgYWRtaW46IGFkbWluRW50aXR5RGVmLFxuICB1c2VybmFtZTogdXNlcm5hbWVFbnRpdHlEZWYsXG4gIFwicGhvbmUtbnVtYmVyXCI6IHBob25lTnVtYmVyRW50aXR5RGVmLFxuICBcIjJmYVwiOiB0d29GYWN0b3JFbnRpdHlEZWYsXG4gIHNzbzogc3NvRW50aXR5RGVmLFxuICBwYXNza2V5OiBwYXNza2V5RW50aXR5RGVmLFxuICBvcmdhbml6YXRpb246IG9yZ2FuaXphdGlvbkVudGl0eURlZixcbiAgXCJhcGkta2V5XCI6IGFwaUtleUVudGl0eURlZixcbiAgand0OiBqd3RFbnRpdHlEZWYsXG4gIGFub255bW91czogYW5vbnltb3VzRW50aXR5RGVmLFxuICBcImF1ZGl0LWxvZ1wiOiBhdWRpdExvZ0VudGl0eURlZixcbn07XG5cbi8qKlxuICog7KeA7JuQ7ZWY64qUIO2UjOufrOq3uOyduCBJRCDrqqnroZ1cbiAqL1xuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9QTFVHSU5fSURTOiBCZXR0ZXJBdXRoUGx1Z2luSWRbXSA9IE9iamVjdC5rZXlzKFxuICBFTlRJVFlfREVGSU5JVElPTlMsXG4pIGFzIEJldHRlckF1dGhQbHVnaW5JZFtdO1xuXG4vKipcbiAqIO2UjOufrOq3uOyduCBJROqwgCDsnKDtmqjtlZzsp4Ag7ZmV7J247ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFBsdWdpbklkKGlkOiBzdHJpbmcpOiBpZCBpcyBCZXR0ZXJBdXRoUGx1Z2luSWQge1xuICByZXR1cm4gaWQgaW4gRU5USVRZX0RFRklOSVRJT05TO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQThCQSxNQUFhQSxxQkFBc0U7Q0FDakYsT0FBTztDQUNQLFVBQVU7Q0FDVixnQkFBZ0I7Q0FDaEIsT0FBTztDQUNQLEtBQUs7Q0FDTCxTQUFTO0NBQ1QsY0FBYztDQUNkLFdBQVc7Q0FDWCxLQUFLO0NBQ0wsV0FBVztDQUNYLGFBQWE7Q0FDZDs7OztBQUtELE1BQWFDLHVCQUE2QyxPQUFPLEtBQy9ELG1CQUNEOzs7O0FBS0QsU0FBZ0IsZ0JBQWdCLElBQXNDO0FBQ3BFLFFBQU8sTUFBTSJ9
|
|
@@ -3,7 +3,7 @@ import { type EntityIndex, type EntityJson, type EntityProp } from "../../../typ
|
|
|
3
3
|
* better-auth 플러그인 ID
|
|
4
4
|
* 지원하는 플러그인 목록을 정의합니다.
|
|
5
5
|
*/
|
|
6
|
-
export type BetterAuthPluginId = "phone-number" | "2fa" | "username" | "admin" | "sso" | "passkey" | "organization" | "api-key" | "jwt" | "anonymous";
|
|
6
|
+
export type BetterAuthPluginId = "phone-number" | "2fa" | "username" | "admin" | "sso" | "passkey" | "organization" | "api-key" | "jwt" | "anonymous" | "audit-log";
|
|
7
7
|
/**
|
|
8
8
|
* better-auth 엔티티 정의
|
|
9
9
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/auth/plugins/entity-definitions/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE1F;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,KAAK,GACL,UAAU,GACV,OAAO,GACP,KAAK,GACL,SAAS,GACT,cAAc,GACd,SAAS,GACT,KAAK,GACL,WAAW,CAAC;AAEhB;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe;IACf,EAAE,EAAE,kBAAkB,CAAC;IAEvB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IAEb,kBAAkB;IAClB,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEvB;;;;OAIG;IACH,eAAe,EAAE;QACf,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;KAClC,CAAC;IAEF;;;;OAIG;IACH,iBAAiB,CAAC,EAAE;QAClB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;KACnC,CAAC;CACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/auth/plugins/entity-definitions/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE1F;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,KAAK,GACL,UAAU,GACV,OAAO,GACP,KAAK,GACL,SAAS,GACT,cAAc,GACd,SAAS,GACT,KAAK,GACL,WAAW,GACX,WAAW,CAAC;AAEhB;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe;IACf,EAAE,EAAE,kBAAkB,CAAC;IAEvB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IAEb,kBAAkB;IAClB,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEvB;;;;OAIG;IACH,eAAe,EAAE;QACf,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;KAClC,CAAC;IAEF;;;;OAIG;IACH,iBAAiB,CAAC,EAAE;QAClB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;KACnC,CAAC;CACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../src/bin/fixture.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGrE,UAAU,qBAAqB;IAC7B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../src/bin/fixture.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGrE,UAAU,qBAAqB;IAC7B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAmBD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,iBAuTrE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,iBAgEvE;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,iBAgDzE"}
|
package/dist/bin/fixture.js
CHANGED
|
@@ -15,6 +15,19 @@ init_entity_manager();
|
|
|
15
15
|
init_data_explorer();
|
|
16
16
|
init_fixture_generator();
|
|
17
17
|
/**
|
|
18
|
+
* username을 일반적인 규칙(영문자 시작, 영문자/숫자만, 1-20자)에 맞도록 정규화합니다.
|
|
19
|
+
*/
|
|
20
|
+
function sanitizeUsername(raw) {
|
|
21
|
+
let username = raw.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
22
|
+
if (username.length === 0) {
|
|
23
|
+
username = "user";
|
|
24
|
+
}
|
|
25
|
+
if (/^[0-9]/.test(username)) {
|
|
26
|
+
username = `u${username}`;
|
|
27
|
+
}
|
|
28
|
+
return username.slice(0, 20);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
18
31
|
* fixture gen 명령어 - cone 메타데이터를 활용하여 자동으로 fixture를 생성합니다.
|
|
19
32
|
*/
|
|
20
33
|
async function fixtureGenCommand(options) {
|
|
@@ -63,6 +76,103 @@ async function fixtureGenCommand(options) {
|
|
|
63
76
|
}
|
|
64
77
|
count = result.count;
|
|
65
78
|
}
|
|
79
|
+
const hasUser = entityNames.includes("User");
|
|
80
|
+
if (hasUser) {
|
|
81
|
+
const userModeResult = await prompts({
|
|
82
|
+
type: "select",
|
|
83
|
+
name: "userMode",
|
|
84
|
+
message: "User 엔티티가 포함되어 있습니다. 생성 방식을 선택하세요:",
|
|
85
|
+
choices: [{
|
|
86
|
+
title: "1. 로그인 가능한 사용자 fixture 생성",
|
|
87
|
+
value: "login"
|
|
88
|
+
}, {
|
|
89
|
+
title: "2. 확인용 데이터(로그인 불가) 생성",
|
|
90
|
+
value: "dummy"
|
|
91
|
+
}]
|
|
92
|
+
});
|
|
93
|
+
if (!userModeResult.userMode) {
|
|
94
|
+
console.log(chalk.yellow("취소되었습니다."));
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (userModeResult.userMode === "login") {
|
|
98
|
+
let useLLM$1 = options["use-llm"] ?? false;
|
|
99
|
+
if (!options["use-llm"]) {
|
|
100
|
+
const llmResult = await prompts({
|
|
101
|
+
type: "confirm",
|
|
102
|
+
name: "useLLM",
|
|
103
|
+
message: "LLM으로 더 현실적인 데이터를 생성할까요? (fixtureHint 기반, ANTHROPIC_API_KEY 필요)",
|
|
104
|
+
initial: false
|
|
105
|
+
});
|
|
106
|
+
useLLM$1 = llmResult.useLLM ?? false;
|
|
107
|
+
}
|
|
108
|
+
const enableLLMCache$1 = !options["no-cache"];
|
|
109
|
+
const DEFAULT_PASSWORD = "Test1234!";
|
|
110
|
+
const sourceDb = DB.getDB("r");
|
|
111
|
+
const generator$1 = new FixtureGenerator(sourceDb, sourceDb, "production_master", EntityManager, {
|
|
112
|
+
useLLM: useLLM$1,
|
|
113
|
+
enableLLMCache: enableLLMCache$1
|
|
114
|
+
});
|
|
115
|
+
const createdCredentials = [];
|
|
116
|
+
const basePath = Sonamu.config.server.auth?.basePath ?? "/api/auth";
|
|
117
|
+
if (useLLM$1) {
|
|
118
|
+
console.log(chalk.cyan(`\nLLM 모드로 로그인 가능한 사용자 ${count}명 생성 중... (캐싱: ${enableLLMCache$1 ? "ON" : "OFF"})`));
|
|
119
|
+
} else {
|
|
120
|
+
console.log(chalk.cyan(`\n로그인 가능한 사용자 ${count}명 생성 중...`));
|
|
121
|
+
}
|
|
122
|
+
for (let i = 0; i < count; i++) {
|
|
123
|
+
const userData = await generator$1.generate("User");
|
|
124
|
+
const name = String(userData.name ?? "");
|
|
125
|
+
const email = String(userData.email ?? "");
|
|
126
|
+
const username = sanitizeUsername(String(userData.username ?? ""));
|
|
127
|
+
const displayUsername = userData.display_username !== undefined ? String(userData.display_username) : undefined;
|
|
128
|
+
const body = {
|
|
129
|
+
name,
|
|
130
|
+
email,
|
|
131
|
+
username,
|
|
132
|
+
password: DEFAULT_PASSWORD
|
|
133
|
+
};
|
|
134
|
+
if (displayUsername !== undefined) {
|
|
135
|
+
body.display_username = displayUsername;
|
|
136
|
+
}
|
|
137
|
+
const req = new Request(`http://localhost${basePath}/sign-up/email`, {
|
|
138
|
+
method: "POST",
|
|
139
|
+
headers: { "Content-Type": "application/json" },
|
|
140
|
+
body: JSON.stringify(body)
|
|
141
|
+
});
|
|
142
|
+
const response = await Sonamu.auth.handler(req);
|
|
143
|
+
if (!response.ok) {
|
|
144
|
+
const responseData = await response.json();
|
|
145
|
+
const code = typeof responseData.code === "string" ? responseData.code : undefined;
|
|
146
|
+
if (code === "USER_ALREADY_EXISTS") {
|
|
147
|
+
console.log(chalk.yellow(` ⚠️ ${email} 이미 존재 - 건너뜁니다.`));
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
console.log(chalk.red(` ❌ ${email} 생성 실패: ${JSON.stringify(responseData)}`));
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
createdCredentials.push({
|
|
154
|
+
email,
|
|
155
|
+
password: DEFAULT_PASSWORD
|
|
156
|
+
});
|
|
157
|
+
console.log(chalk.green(` ✅ ${email} 생성 완료`));
|
|
158
|
+
}
|
|
159
|
+
if (createdCredentials.length > 0) {
|
|
160
|
+
const emails = createdCredentials.map((c) => c.email);
|
|
161
|
+
await DB.getDB("w")("users").whereIn("email", emails).update({ email_verified: true });
|
|
162
|
+
console.log(chalk.green(`\nemail_verified = true 업데이트 완료`));
|
|
163
|
+
}
|
|
164
|
+
if (useLLM$1) {
|
|
165
|
+
const stats = generator$1.getLLMCacheStats();
|
|
166
|
+
console.log(chalk.cyan(`[LLM Cache] 캐시 크기: ${stats.size}`));
|
|
167
|
+
}
|
|
168
|
+
console.log(chalk.green(`\n✅ ${createdCredentials.length}명의 로그인 가능한 사용자 생성 완료`));
|
|
169
|
+
if (createdCredentials.length > 0) {
|
|
170
|
+
console.log("\n생성된 계정 목록:");
|
|
171
|
+
console.table(createdCredentials);
|
|
172
|
+
}
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
66
176
|
let saveTarget = options["save-to"] || "db";
|
|
67
177
|
if (!options["save-to"]) {
|
|
68
178
|
const result = await prompts({
|
|
@@ -272,4 +382,4 @@ async function fixtureExploreCommand(options) {
|
|
|
272
382
|
|
|
273
383
|
//#endregion
|
|
274
384
|
export { fixtureExploreCommand, fixtureFetchCommand, fixtureGenCommand };
|
|
275
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS5qcyIsIm5hbWVzIjpbImVudGl0eU5hbWVzOiBzdHJpbmdbXSIsImZpbGVuYW1lOiBzdHJpbmciLCJzdHJhdGVneTogRGF0YUV4cGxvcmVyU3RyYXRlZ3kiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL2ZpeHR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHByb21wdHMgZnJvbSBcInByb21wdHNcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IERCIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi4vZGF0YWJhc2Uva25leFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IERhdGFFeHBsb3JlciB9IGZyb20gXCIuLi90ZXN0aW5nL2RhdGEtZXhwbG9yZXJcIjtcbmltcG9ydCB7IHR5cGUgRGF0YUV4cGxvcmVyU3RyYXRlZ3kgfSBmcm9tIFwiLi4vdGVzdGluZy9kYXRhLWV4cGxvcmVyXCI7XG5pbXBvcnQgeyBGaXh0dXJlR2VuZXJhdG9yIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1nZW5lcmF0b3JcIjtcblxuaW50ZXJmYWNlIEZpeHR1cmVDb21tYW5kT3B0aW9ucyB7XG4gIF8/OiBzdHJpbmdbXTtcbiAgYWxsPzogYm9vbGVhbjtcbiAgaW5jbHVkZT86IHN0cmluZztcbiAgZXhjbHVkZT86IHN0cmluZztcbiAgY291bnQ/OiBzdHJpbmc7XG4gIFwic2F2ZS10b1wiPzogc3RyaW5nO1xuICBzdHJhdGVneT86IERhdGFFeHBsb3JlclN0cmF0ZWd5O1xuICBsaW1pdD86IHN0cmluZztcbiAgXCJ1c2UtbGxtXCI/OiBib29sZWFuO1xuICBcIm5vLWNhY2hlXCI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGZpeHR1cmUgZ2VuIOuqheugueyWtCAtIGNvbmUg66mU7YOA642w7J207YSw66W8IO2ZnOyaqe2VmOyXrCDsnpDrj5nsnLzroZwgZml4dHVyZeulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaXh0dXJlR2VuQ29tbWFuZChvcHRpb25zOiBGaXh0dXJlQ29tbWFuZE9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLmF1dG9sb2FkKCk7XG4gICAgfVxuXG4gICAgbGV0IGVudGl0eU5hbWVzOiBzdHJpbmdbXTtcblxuICAgIGlmIChvcHRpb25zLmFsbCkge1xuICAgICAgZW50aXR5TmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgaWYgKG9wdGlvbnMuZXhjbHVkZSkge1xuICAgICAgICBjb25zdCBleGNsdWRlTGlzdCA9IG9wdGlvbnMuZXhjbHVkZS5zcGxpdChcIixcIikubWFwKChzOiBzdHJpbmcpID0+IHMudHJpbSgpKTtcbiAgICAgICAgZW50aXR5TmFtZXMgPSBlbnRpdHlOYW1lcy5maWx0ZXIoKG5hbWUpID0+ICFleGNsdWRlTGlzdC5pbmNsdWRlcyhuYW1lKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcbiAgICAgIGVudGl0eU5hbWVzID0gb3B0aW9ucy5pbmNsdWRlLnNwbGl0KFwiLFwiKS5tYXAoKHM6IHN0cmluZykgPT4gcy50cmltKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBuYW1lOiBcImVudGl0aWVzXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRml4dHVyZeulvCDsg53shLHtlaAgRW50aXR566W8IOyEoO2Dne2VmOyEuOyalDpcIixcbiAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKS5tYXAoKGlkKSA9PiAoeyB0aXRsZTogaWQsIHZhbHVlOiBpZCB9KSksXG4gICAgICAgIG1pbjogMSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3VsdC5lbnRpdGllcyB8fCByZXN1bHQuZW50aXRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIuy3qOyGjOuQmOyXiOyKteuLiOuLpC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVudGl0eU5hbWVzID0gcmVzdWx0LmVudGl0aWVzO1xuICAgIH1cblxuICAgIGxldCBjb3VudCA9IG9wdGlvbnMuY291bnQgPyBOdW1iZXIucGFyc2VJbnQob3B0aW9ucy5jb3VudCwgMTApIDogNTtcbiAgICBpZiAoIW9wdGlvbnMuY291bnQpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21wdHMoe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBuYW1lOiBcImNvdW50XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwi6rCBIEVudGl0eeuzhCDsg53shLEg6rCc7IiYOlwiLFxuICAgICAgICBpbml0aWFsOiA1LFxuICAgICAgICBtaW46IDEsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuY291bnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwi7Leo7IaM65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY291bnQgPSByZXN1bHQuY291bnQ7XG4gICAgfVxuXG4gICAgbGV0IHNhdmVUYXJnZXQgPSBvcHRpb25zW1wic2F2ZS10b1wiXSB8fCBcImRiXCI7XG4gICAgaWYgKCFvcHRpb25zW1wic2F2ZS10b1wiXSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIG5hbWU6IFwic2F2ZVRhcmdldFwiLFxuICAgICAgICBtZXNzYWdlOiBcIuyggOyepSDrsKnsi506XCIsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICB7IHRpdGxlOiBcIkZpeHR1cmUgRELsl5Ag7KCA7J6lXCIsIHZhbHVlOiBcImRiXCIgfSxcbiAgICAgICAgICB7IHRpdGxlOiBcIu2MjOydvOuhnCDsoIDsnqUgKOyekOuPmSDtjIzsnbzrqoUpXCIsIHZhbHVlOiBcImZpbGVcIiB9LFxuICAgICAgICAgIHsgdGl0bGU6IFwi7YyM7J2866GcIOyggOyepSAo7YyM7J2866qFIOyngOyglSlcIiwgdmFsdWU6IFwiZmlsZTpjdXN0b21cIiB9LFxuICAgICAgICAgIHsgdGl0bGU6IFwi7KCA7J6lIOyViCDtlaggKOy2nOugpeunjClcIiwgdmFsdWU6IFwibm9uZVwiIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgc2F2ZVRhcmdldCA9IHJlc3VsdC5zYXZlVGFyZ2V0O1xuXG4gICAgICBpZiAoc2F2ZVRhcmdldCA9PT0gXCJmaWxlOmN1c3RvbVwiKSB7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lUmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgbmFtZTogXCJmaWxlbmFtZVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwi7YyM7J2866qFOlwiLFxuICAgICAgICAgIGluaXRpYWw6IFwiZml4dHVyZXMuanNvblwiLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWZpbGVuYW1lUmVzdWx0LmZpbGVuYW1lKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwi7Leo7IaM65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2F2ZVRhcmdldCA9IGBmaWxlOiR7ZmlsZW5hbWVSZXN1bHQuZmlsZW5hbWV9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMTE0g7IKs7JqpIOyXrOu2gCDqsrDsoJVcbiAgICBsZXQgdXNlTExNID0gb3B0aW9uc1tcInVzZS1sbG1cIl0gPz8gZmFsc2U7XG4gICAgaWYgKCFvcHRpb25zW1widXNlLWxsbVwiXSkge1xuICAgICAgY29uc3QgbGxtUmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxuICAgICAgICBuYW1lOiBcInVzZUxMTVwiLFxuICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgIFwiTExN7Jy866GcIOuNlCDtmITsi6TsoIHsnbgg642w7J207YSw66W8IOyDneyEse2VoOq5jOyalD8gKGZpeHR1cmVIaW50IOq4sOuwmCwgQU5USFJPUElDX0FQSV9LRVkg7ZWE7JqUKVwiLFxuICAgICAgICBpbml0aWFsOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgdXNlTExNID0gbGxtUmVzdWx0LnVzZUxMTSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmFibGVMTE1DYWNoZSA9ICFvcHRpb25zW1wibm8tY2FjaGVcIl07XG5cbiAgICAvLyBmaXh0dXJlIGdlbjogZml4dHVyZSBEQiDrgrTsl5DshJwg7LC47KGwIOq0gOqzhOulvCDtlbTqsrDtlZjqs6Ag7KCA7J6l7ZWp64uI64ukXG4gICAgY29uc3QgZml4dHVyZURiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlKTtcbiAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgRml4dHVyZUdlbmVyYXRvcihmaXh0dXJlRGIsIGZpeHR1cmVEYiwgXCJmaXh0dXJlXCIsIEVudGl0eU1hbmFnZXIsIHtcbiAgICAgIHVzZUxMTSxcbiAgICAgIGVuYWJsZUxMTUNhY2hlLFxuICAgIH0pO1xuXG4gICAgaWYgKHVzZUxMTSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNoYWxrLmN5YW4oXG4gICAgICAgICAgYFxcbkxMTSDrqqjrk5zroZwgJHtlbnRpdHlOYW1lcy5qb2luKFwiLCBcIil9IOyDneyEsSDspJEuLi4gKOy6kOyLsTogJHtlbmFibGVMTE1DYWNoZSA/IFwiT05cIiA6IFwiT0ZGXCJ9KWAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG4ke2VudGl0eU5hbWVzLmpvaW4oXCIsIFwiKX0g7IOd7ISxIOykkS4uLmApKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjcyA9IGVudGl0eU5hbWVzLm1hcCgoZW50aXR5TmFtZSkgPT4gKHtcbiAgICAgIGVudGl0eTogZW50aXR5TmFtZSxcbiAgICAgIGNvdW50LFxuICAgICAgb3ZlcnJpZGVzOiB7fSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgZ2VuZXJhdG9yLmdlbmVyYXRlQmF0Y2goc3BlY3MpO1xuXG4gICAgaWYgKHVzZUxMTSkge1xuICAgICAgY29uc3Qgc3RhdHMgPSBnZW5lcmF0b3IuZ2V0TExNQ2FjaGVTdGF0cygpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgW0xMTSBDYWNoZV0g7LqQ7IucIO2BrOq4sDogJHtzdGF0cy5zaXplfWApKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgXFxu4pyFICR7cmVzdWx0cy5sZW5ndGh96rCcIGZpeHR1cmUg7IOd7ISxIOyZhOujjGApKTtcblxuICAgIGlmIChzYXZlVGFyZ2V0ID09PSBcIm5vbmVcIikge1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzdWx0cywgbnVsbCwgMikpO1xuICAgIH0gZWxzZSBpZiAoc2F2ZVRhcmdldCA9PT0gXCJkYlwiKSB7XG4gICAgICAvLyBnZW5lcmF0ZUJhdGNo6rCAIOydtOuvuCBEQuyXkCDsoIDsnqXtlojsnLzrr4DroZwg67OE64+EIOyggOyepeydtCDrtojtlYTsmpTtlanri4jri6QuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihcIkZpeHR1cmUgRELsl5Ag7KCA7J6l65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgfSBlbHNlIGlmIChzYXZlVGFyZ2V0LnN0YXJ0c1dpdGgoXCJmaWxlXCIpKSB7XG4gICAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gICAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuXG4gICAgICBjb25zdCBmaXh0dXJlc0RpciA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcInRlc3RcIiwgXCJmaXh0dXJlc1wiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaXh0dXJlc0Rpcik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgYXdhaXQgZnMubWtkaXIoZml4dHVyZXNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGVudGl0eU5hbWUgb2YgZW50aXR5TmFtZXMpIHtcbiAgICAgICAgY29uc3QgZW50aXR5UmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiByLmVudGl0eUlkID09PSBlbnRpdHlOYW1lKTtcblxuICAgICAgICBpZiAoZW50aXR5UmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICBpZiAoc2F2ZVRhcmdldCA9PT0gXCJmaWxlXCIpIHtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlOYW1lKTtcbiAgICAgICAgICBmaWxlbmFtZSA9IGAke2VudGl0eS50YWJsZX0uanNvbmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsZW5hbWUgPSBzYXZlVGFyZ2V0LnJlcGxhY2UoXCJmaWxlOlwiLCBcIlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVwYXRoID0gcGF0aC5qb2luKGZpeHR1cmVzRGlyLCBmaWxlbmFtZSk7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgICAgICBmaWxlcGF0aCxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIGVudGl0eVJlc3VsdHMubWFwKChyKSA9PiByLmRhdGEpLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIDIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKchSAke2ZpbGVwYXRofSDsoIDsnqUg7JmE66OMYCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgY2hhbGsucmVkKFxuICAgICAgICBcIkZpeHR1cmUg7IOd7ISxIOykkSDsmKTrpZjqsIAg67Cc7IOd7ZaI7Iq164uI64ukLlxcblwiICtcbiAgICAgICAgICBcIuybkOyduDogRW50aXR5IOygleydmOuCmCBEQiDsl7DqsrDsnYQg7ZmV7J247ZW07KO87IS47JqULlxcblwiICtcbiAgICAgICAgICBcIuyekOyEuO2VnCDrgrTsmqk6XCIsXG4gICAgICApLFxuICAgICAgZXJyb3IsXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIGZpeHR1cmUgZmV0Y2gg66qF66C57Ja0IC0g7Iuk7KCcIOyatOyYgSBEQuyXkOyEnCDrjbDsnbTthLDrpbwg6rCA7KC47JmAIGZpeHR1cmXroZwg7KCA7J6l7ZWp64uI64ukLlxuICog6rSA6rOE65CcIOuNsOydtO2EsOuPhCDtlajqu5gg6rCA7KC47Jik66+A66GcIO2YhOyLpOyggeyduCDthYzsiqTtirgg642w7J207YSw66W8IO2ZleuztO2VoCDsiJgg7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZml4dHVyZUZldGNoQ29tbWFuZChvcHRpb25zOiBGaXh0dXJlQ29tbWFuZE9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLmF1dG9sb2FkKCk7XG4gICAgfVxuXG4gICAgbGV0IGVudGl0eU5hbWVzOiBzdHJpbmdbXTtcblxuICAgIGlmIChvcHRpb25zLmFsbCkge1xuICAgICAgZW50aXR5TmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgaWYgKG9wdGlvbnMuZXhjbHVkZSkge1xuICAgICAgICBjb25zdCBleGNsdWRlTGlzdCA9IG9wdGlvbnMuZXhjbHVkZS5zcGxpdChcIixcIikubWFwKChzOiBzdHJpbmcpID0+IHMudHJpbSgpKTtcbiAgICAgICAgZW50aXR5TmFtZXMgPSBlbnRpdHlOYW1lcy5maWx0ZXIoKG5hbWUpID0+ICFleGNsdWRlTGlzdC5pbmNsdWRlcyhuYW1lKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcbiAgICAgIGVudGl0eU5hbWVzID0gb3B0aW9ucy5pbmNsdWRlLnNwbGl0KFwiLFwiKS5tYXAoKHM6IHN0cmluZykgPT4gcy50cmltKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBuYW1lOiBcImVudGl0aWVzXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiSW1wb3J07ZWgIEVudGl0eeulvCDshKDtg53tlZjshLjsmpQ6XCIsXG4gICAgICAgIGNob2ljZXM6IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCkubWFwKChpZCkgPT4gKHsgdGl0bGU6IGlkLCB2YWx1ZTogaWQgfSkpLFxuICAgICAgICBtaW46IDEsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuZW50aXRpZXMgfHwgcmVzdWx0LmVudGl0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCLst6jshozrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBlbnRpdHlOYW1lcyA9IHJlc3VsdC5lbnRpdGllcztcbiAgICB9XG5cbiAgICBjb25zdCBzdHJhdGVneTogRGF0YUV4cGxvcmVyU3RyYXRlZ3kgPSBvcHRpb25zLnN0cmF0ZWd5ID8/IFwicmVjZW50XCI7XG4gICAgY29uc3QgbGltaXQgPSBvcHRpb25zLmxpbWl0ID8gTnVtYmVyLnBhcnNlSW50KG9wdGlvbnMubGltaXQsIDEwKSA6IDEwO1xuXG4gICAgLy8gZml4dHVyZSBmZXRjaDogcHJvZHVjdGlvbiDrjbDsnbTthLDrpbwgZml4dHVyZSBEQuuhnCBpbXBvcnTtlanri4jri6RcbiAgICBjb25zdCBzb3VyY2VEYiA9IERCLmdldERCKFwiclwiKTsgLy8gcHJvZHVjdGlvbl9tYXN0ZXIgKOuYkOuKlCBkZXZlbG9wbWVudF9tYXN0ZXIpXG4gICAgY29uc3QgZml4dHVyZURiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlKTtcbiAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgRml4dHVyZUdlbmVyYXRvcihzb3VyY2VEYiwgZml4dHVyZURiLCBcImZpeHR1cmVcIiwgRW50aXR5TWFuYWdlcik7XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG4ke2VudGl0eU5hbWVzLmpvaW4oXCIsIFwiKX0gaW1wb3J0IOykkS4uLmApKTtcblxuICAgIGZvciAoY29uc3QgZW50aXR5TmFtZSBvZiBlbnRpdHlOYW1lcykge1xuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGdlbmVyYXRvci5pbXBvcnRGcm9tU291cmNlKGVudGl0eU5hbWUsIHtcbiAgICAgICAgc3RyYXRlZ3ksXG4gICAgICAgIGxpbWl0LFxuICAgICAgICBpbmNsdWRlUmVsYXRpb25zOiB0cnVlLFxuICAgICAgICBtYXhEZXB0aDogMixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyFICR7ZW50aXR5TmFtZX06ICR7cmVzdWx0cy5sZW5ndGh96rCcIGltcG9ydCDsmYTro4xgKSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBjaGFsay5yZWQoXG4gICAgICAgIFwi7Iuk7KCcIERC7JeQ7IScIOuNsOydtO2EsOulvCDqsIDsoLjsmKTripQg7KSRIOyYpOulmOqwgCDrsJzsg53tlojsirXri4jri6QuXFxuXCIgK1xuICAgICAgICAgIFwi7JuQ7J24OiDshozsiqQgREIg7Jew6rKwIOyEpOyglShzb25hbXUuY29uZmlnLnRzKeydtOuCmCBFbnRpdHkg6rSA6rOEIOygleydmOulvCDtmZXsnbjtlbTso7zshLjsmpQuXFxuXCIgK1xuICAgICAgICAgIFwi7J6Q7IS47ZWcIOuCtOyaqTpcIixcbiAgICAgICksXG4gICAgICBlcnJvcixcbiAgICApO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKlxuICogZml4dHVyZSBleHBsb3JlIOuqheugueyWtCAtIERC7J2YIOyLpOygnCDrjbDsnbTthLDrpbwg7KGw7ZqM7ZWY7JesIO2ZleyduO2VqeuLiOuLpC5cbiAqIOyggOyepe2VmOyngCDslYrqs6Ag7KGw7ZqM66eMIO2VmOuvgOuhnCDrjbDsnbTthLDrpbwg67mg66W06rKMIO2ZleyduO2VoCDrlYwg7Jyg7Jqp7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZml4dHVyZUV4cGxvcmVDb21tYW5kKG9wdGlvbnM6IEZpeHR1cmVDb21tYW5kT3B0aW9ucykge1xuICB0cnkge1xuICAgIGlmICghRW50aXR5TWFuYWdlci5pc0F1dG9sb2FkZWQpIHtcbiAgICAgIGF3YWl0IEVudGl0eU1hbmFnZXIuYXV0b2xvYWQoKTtcbiAgICB9XG5cbiAgICBsZXQgZW50aXR5TmFtZSA9IG9wdGlvbnMuaW5jbHVkZTtcblxuICAgIGlmICghZW50aXR5TmFtZSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIG5hbWU6IFwiZW50aXR5XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwi7YOQ7IOJ7ZWgIEVudGl0eTpcIixcbiAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKS5tYXAoKGlkKSA9PiAoeyB0aXRsZTogaWQsIHZhbHVlOiBpZCB9KSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuZW50aXR5KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIuy3qOyGjOuQmOyXiOyKteuLiOuLpC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVudGl0eU5hbWUgPSByZXN1bHQuZW50aXR5O1xuICAgIH1cblxuICAgIGlmICghZW50aXR5TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW50aXR5IG5hbWUgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyYXRlZ3k6IERhdGFFeHBsb3JlclN0cmF0ZWd5ID0gb3B0aW9ucy5zdHJhdGVneSA/PyBcInNhbXBsZVwiO1xuICAgIGNvbnN0IGxpbWl0ID0gb3B0aW9ucy5saW1pdCA/IE51bWJlci5wYXJzZUludChvcHRpb25zLmxpbWl0LCAxMCkgOiAxMDtcblxuICAgIGNvbnN0IGRiID0gREIuZ2V0REIoXCJyXCIpO1xuICAgIGNvbnN0IGV4cGxvcmVyID0gbmV3IERhdGFFeHBsb3JlcihkYiwgRW50aXR5TWFuYWdlcik7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGV4cGxvcmVyLmV4cGxvcmUoZW50aXR5TmFtZSwgeyBzdHJhdGVneSwgbGltaXQgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG4ke2VudGl0eU5hbWV9ICR7ZGF0YS5sZW5ndGh96rCcIOyhsO2ajCDsmYTro4w6YCkpO1xuICAgIGNvbnNvbGUudGFibGUoZGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgXCLrjbDsnbTthLAg7KGw7ZqMIOykkSDsmKTrpZjqsIAg67Cc7IOd7ZaI7Iq164uI64ukLlxcblwiICtcbiAgICAgICAgICBcIuybkOyduDogREIg7Jew6rKw7J2064KYIEVudGl0eSDsoJXsnZjrpbwg7ZmV7J247ZW07KO87IS47JqULlxcblwiICtcbiAgICAgICAgICBcIuyekOyEuO2VnCDrgrTsmqk6XCIsXG4gICAgICApLFxuICAgICAgZXJyb3IsXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O2FBR3VDO1NBQ0g7V0FDa0I7cUJBQ0c7b0JBQ0Q7d0JBRVE7Ozs7QUFrQmhFLGVBQXNCLGtCQUFrQixTQUFnQztBQUN0RSxLQUFJO0FBQ0YsTUFBSSxDQUFDLGNBQWMsY0FBYztBQUMvQixTQUFNLGNBQWMsVUFBVTs7RUFHaEMsSUFBSUE7QUFFSixNQUFJLFFBQVEsS0FBSztBQUNmLGlCQUFjLGNBQWMsV0FBVztBQUN2QyxPQUFJLFFBQVEsU0FBUztJQUNuQixNQUFNLGNBQWMsUUFBUSxRQUFRLE1BQU0sSUFBSSxDQUFDLEtBQUssTUFBYyxFQUFFLE1BQU0sQ0FBQztBQUMzRSxrQkFBYyxZQUFZLFFBQVEsU0FBUyxDQUFDLFlBQVksU0FBUyxLQUFLLENBQUM7O2FBRWhFLFFBQVEsU0FBUztBQUMxQixpQkFBYyxRQUFRLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBSyxNQUFjLEVBQUUsTUFBTSxDQUFDO1NBQ2hFO0dBQ0wsTUFBTSxTQUFTLE1BQU0sUUFBUTtJQUMzQixNQUFNO0lBQ04sTUFBTTtJQUNOLFNBQVM7SUFDVCxTQUFTLGNBQWMsV0FBVyxDQUFDLEtBQUssUUFBUTtLQUFFLE9BQU87S0FB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
|
|
385
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS5qcyIsIm5hbWVzIjpbImVudGl0eU5hbWVzOiBzdHJpbmdbXSIsInVzZUxMTSIsImVuYWJsZUxMTUNhY2hlIiwiZ2VuZXJhdG9yIiwiY3JlYXRlZENyZWRlbnRpYWxzOiBBcnJheTx7IGVtYWlsOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfT4iLCJib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsImZpbGVuYW1lOiBzdHJpbmciLCJzdHJhdGVneTogRGF0YUV4cGxvcmVyU3RyYXRlZ3kiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL2ZpeHR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHByb21wdHMgZnJvbSBcInByb21wdHNcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IERCIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi4vZGF0YWJhc2Uva25leFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IERhdGFFeHBsb3JlciB9IGZyb20gXCIuLi90ZXN0aW5nL2RhdGEtZXhwbG9yZXJcIjtcbmltcG9ydCB7IHR5cGUgRGF0YUV4cGxvcmVyU3RyYXRlZ3kgfSBmcm9tIFwiLi4vdGVzdGluZy9kYXRhLWV4cGxvcmVyXCI7XG5pbXBvcnQgeyBGaXh0dXJlR2VuZXJhdG9yIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1nZW5lcmF0b3JcIjtcblxuaW50ZXJmYWNlIEZpeHR1cmVDb21tYW5kT3B0aW9ucyB7XG4gIF8/OiBzdHJpbmdbXTtcbiAgYWxsPzogYm9vbGVhbjtcbiAgaW5jbHVkZT86IHN0cmluZztcbiAgZXhjbHVkZT86IHN0cmluZztcbiAgY291bnQ/OiBzdHJpbmc7XG4gIFwic2F2ZS10b1wiPzogc3RyaW5nO1xuICBzdHJhdGVneT86IERhdGFFeHBsb3JlclN0cmF0ZWd5O1xuICBsaW1pdD86IHN0cmluZztcbiAgXCJ1c2UtbGxtXCI/OiBib29sZWFuO1xuICBcIm5vLWNhY2hlXCI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIHVzZXJuYW1l7J2EIOydvOuwmOyggeyduCDqt5zsuZko7JiB66y47J6QIOyLnOyekSwg7JiB66y47J6QL+yIq+yekOunjCwgMS0yMOyekCnsl5Ag66ee64+E66GdIOygleq3nO2ZlO2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVVc2VybmFtZShyYXc6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIOyGjOusuOyekCDrs4DtmZgg7ZuEIOyYgeusuOyekC/siKvsnpAg7Jm4IOusuOyekCDsoJzqsbBcbiAgbGV0IHVzZXJuYW1lID0gcmF3LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldL2csIFwiXCIpO1xuICBpZiAodXNlcm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgdXNlcm5hbWUgPSBcInVzZXJcIjtcbiAgfVxuICAvLyDssqsg6riA7J6Q6rCAIOyIq+yekOuptCAndScg7KCR65GQ7Ja0IOy2lOqwgFxuICBpZiAoL15bMC05XS8udGVzdCh1c2VybmFtZSkpIHtcbiAgICB1c2VybmFtZSA9IGB1JHt1c2VybmFtZX1gO1xuICB9XG4gIC8vIDIw7J6QIOy0iOqzvCDsi5wgdHJ1bmNhdGVcbiAgcmV0dXJuIHVzZXJuYW1lLnNsaWNlKDAsIDIwKTtcbn1cblxuLyoqXG4gKiBmaXh0dXJlIGdlbiDrqoXroLnslrQgLSBjb25lIOuplO2DgOuNsOydtO2EsOulvCDtmZzsmqntlZjsl6wg7J6Q64+Z7Jy866GcIGZpeHR1cmXrpbwg7IOd7ISx7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZml4dHVyZUdlbkNvbW1hbmQob3B0aW9uczogRml4dHVyZUNvbW1hbmRPcHRpb25zKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFFbnRpdHlNYW5hZ2VyLmlzQXV0b2xvYWRlZCkge1xuICAgICAgYXdhaXQgRW50aXR5TWFuYWdlci5hdXRvbG9hZCgpO1xuICAgIH1cblxuICAgIGxldCBlbnRpdHlOYW1lczogc3RyaW5nW107XG5cbiAgICBpZiAob3B0aW9ucy5hbGwpIHtcbiAgICAgIGVudGl0eU5hbWVzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICAgIGlmIChvcHRpb25zLmV4Y2x1ZGUpIHtcbiAgICAgICAgY29uc3QgZXhjbHVkZUxpc3QgPSBvcHRpb25zLmV4Y2x1ZGUuc3BsaXQoXCIsXCIpLm1hcCgoczogc3RyaW5nKSA9PiBzLnRyaW0oKSk7XG4gICAgICAgIGVudGl0eU5hbWVzID0gZW50aXR5TmFtZXMuZmlsdGVyKChuYW1lKSA9PiAhZXhjbHVkZUxpc3QuaW5jbHVkZXMobmFtZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pbmNsdWRlKSB7XG4gICAgICBlbnRpdHlOYW1lcyA9IG9wdGlvbnMuaW5jbHVkZS5zcGxpdChcIixcIikubWFwKChzOiBzdHJpbmcpID0+IHMudHJpbSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwibXVsdGlzZWxlY3RcIixcbiAgICAgICAgbmFtZTogXCJlbnRpdGllc1wiLFxuICAgICAgICBtZXNzYWdlOiBcIkZpeHR1cmXrpbwg7IOd7ISx7ZWgIEVudGl0eeulvCDshKDtg53tlZjshLjsmpQ6XCIsXG4gICAgICAgIGNob2ljZXM6IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCkubWFwKChpZCkgPT4gKHsgdGl0bGU6IGlkLCB2YWx1ZTogaWQgfSkpLFxuICAgICAgICBtaW46IDEsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuZW50aXRpZXMgfHwgcmVzdWx0LmVudGl0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCLst6jshozrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBlbnRpdHlOYW1lcyA9IHJlc3VsdC5lbnRpdGllcztcbiAgICB9XG5cbiAgICBsZXQgY291bnQgPSBvcHRpb25zLmNvdW50ID8gTnVtYmVyLnBhcnNlSW50KG9wdGlvbnMuY291bnQsIDEwKSA6IDU7XG4gICAgaWYgKCFvcHRpb25zLmNvdW50KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgbmFtZTogXCJjb3VudFwiLFxuICAgICAgICBtZXNzYWdlOiBcIuqwgSBFbnRpdHnrs4Qg7IOd7ISxIOqwnOyImDpcIixcbiAgICAgICAgaW5pdGlhbDogNSxcbiAgICAgICAgbWluOiAxLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzdWx0LmNvdW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIuy3qOyGjOuQmOyXiOyKteuLiOuLpC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvdW50ID0gcmVzdWx0LmNvdW50O1xuICAgIH1cblxuICAgIC8vIFVzZXIg7JeU7Yuw7Yuw6rCAIO2PrO2VqOuQnCDqsr3smrA6IOuhnOq3uOyduCDqsIDriqUv7ZmV7J247JqpIOu2hOq4sCDshKDtg51cbiAgICBjb25zdCBoYXNVc2VyID0gZW50aXR5TmFtZXMuaW5jbHVkZXMoXCJVc2VyXCIpO1xuXG4gICAgaWYgKGhhc1VzZXIpIHtcbiAgICAgIGNvbnN0IHVzZXJNb2RlUmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIG5hbWU6IFwidXNlck1vZGVcIixcbiAgICAgICAgbWVzc2FnZTogXCJVc2VyIOyXlO2LsO2LsOqwgCDtj6ztlajrkJjslrQg7J6I7Iq164uI64ukLiDsg53shLEg67Cp7Iud7J2EIOyEoO2Dne2VmOyEuOyalDpcIixcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHsgdGl0bGU6IFwiMS4g66Gc6re47J24IOqwgOuKpe2VnCDsgqzsmqnsnpAgZml4dHVyZSDsg53shLFcIiwgdmFsdWU6IFwibG9naW5cIiB9LFxuICAgICAgICAgIHsgdGl0bGU6IFwiMi4g7ZmV7J247JqpIOuNsOydtO2EsCjroZzqt7jsnbgg67aI6rCAKSDsg53shLFcIiwgdmFsdWU6IFwiZHVtbXlcIiB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghdXNlck1vZGVSZXN1bHQudXNlck1vZGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwi7Leo7IaM65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHVzZXJNb2RlUmVzdWx0LnVzZXJNb2RlID09PSBcImxvZ2luXCIpIHtcbiAgICAgICAgLy8gTExNIOyCrOyaqSDsl6zrtoBcbiAgICAgICAgbGV0IHVzZUxMTSA9IG9wdGlvbnNbXCJ1c2UtbGxtXCJdID8/IGZhbHNlO1xuICAgICAgICBpZiAoIW9wdGlvbnNbXCJ1c2UtbGxtXCJdKSB7XG4gICAgICAgICAgY29uc3QgbGxtUmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgICAgICB0eXBlOiBcImNvbmZpcm1cIixcbiAgICAgICAgICAgIG5hbWU6IFwidXNlTExNXCIsXG4gICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICBcIkxMTeycvOuhnCDrjZQg7ZiE7Iuk7KCB7J24IOuNsOydtO2EsOulvCDsg53shLHtlaDquYzsmpQ/IChmaXh0dXJlSGludCDquLDrsJgsIEFOVEhST1BJQ19BUElfS0VZIO2VhOyalClcIixcbiAgICAgICAgICAgIGluaXRpYWw6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHVzZUxMTSA9IGxsbVJlc3VsdC51c2VMTE0gPz8gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbmFibGVMTE1DYWNoZSA9ICFvcHRpb25zW1wibm8tY2FjaGVcIl07XG4gICAgICAgIGNvbnN0IERFRkFVTFRfUEFTU1dPUkQgPSBcIlRlc3QxMjM0IVwiO1xuXG4gICAgICAgIC8vIOuhnOq3uOyduCDqsIDriqUg6rK966Gc7JeQ7ISc64qUIHNvdXJjZURi66GcIGRldmVsb3BtZW50X21hc3RlciDsgqzsmqlcbiAgICAgICAgY29uc3Qgc291cmNlRGIgPSBEQi5nZXREQihcInJcIik7XG4gICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBGaXh0dXJlR2VuZXJhdG9yKFxuICAgICAgICAgIHNvdXJjZURiLFxuICAgICAgICAgIHNvdXJjZURiLFxuICAgICAgICAgIFwicHJvZHVjdGlvbl9tYXN0ZXJcIixcbiAgICAgICAgICBFbnRpdHlNYW5hZ2VyLFxuICAgICAgICAgIHsgdXNlTExNLCBlbmFibGVMTE1DYWNoZSB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGNyZWF0ZWRDcmVkZW50aWFsczogQXJyYXk8eyBlbWFpbDogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH0+ID0gW107XG4gICAgICAgIGNvbnN0IGJhc2VQYXRoID0gU29uYW11LmNvbmZpZy5zZXJ2ZXIuYXV0aD8uYmFzZVBhdGggPz8gXCIvYXBpL2F1dGhcIjtcblxuICAgICAgICBpZiAodXNlTExNKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjaGFsay5jeWFuKFxuICAgICAgICAgICAgICBgXFxuTExNIOuqqOuTnOuhnCDroZzqt7jsnbgg6rCA64ql7ZWcIOyCrOyaqeyekCAke2NvdW50feuqhSDsg53shLEg7KSRLi4uICjsupDsi7E6ICR7ZW5hYmxlTExNQ2FjaGUgPyBcIk9OXCIgOiBcIk9GRlwifSlgLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFxcbuuhnOq3uOyduCDqsIDriqXtlZwg7IKs7Jqp7J6QICR7Y291bnR966qFIOyDneyEsSDspJEuLi5gKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICBjb25zdCB1c2VyRGF0YSA9IGF3YWl0IGdlbmVyYXRvci5nZW5lcmF0ZShcIlVzZXJcIik7XG5cbiAgICAgICAgICBjb25zdCBuYW1lID0gU3RyaW5nKHVzZXJEYXRhLm5hbWUgPz8gXCJcIik7XG4gICAgICAgICAgY29uc3QgZW1haWwgPSBTdHJpbmcodXNlckRhdGEuZW1haWwgPz8gXCJcIik7XG4gICAgICAgICAgY29uc3QgdXNlcm5hbWUgPSBzYW5pdGl6ZVVzZXJuYW1lKFN0cmluZyh1c2VyRGF0YS51c2VybmFtZSA/PyBcIlwiKSk7XG4gICAgICAgICAgY29uc3QgZGlzcGxheVVzZXJuYW1lID1cbiAgICAgICAgICAgIHVzZXJEYXRhLmRpc3BsYXlfdXNlcm5hbWUgIT09IHVuZGVmaW5lZCA/IFN0cmluZyh1c2VyRGF0YS5kaXNwbGF5X3VzZXJuYW1lKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGNvbnN0IGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgICBwYXNzd29yZDogREVGQVVMVF9QQVNTV09SRCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChkaXNwbGF5VXNlcm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYm9keS5kaXNwbGF5X3VzZXJuYW1lID0gZGlzcGxheVVzZXJuYW1lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlcSA9IG5ldyBSZXF1ZXN0KGBodHRwOi8vbG9jYWxob3N0JHtiYXNlUGF0aH0vc2lnbi11cC9lbWFpbGAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgU29uYW11LmF1dGguaGFuZGxlcihyZXEpO1xuXG4gICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gdHlwZW9mIHJlc3BvbnNlRGF0YS5jb2RlID09PSBcInN0cmluZ1wiID8gcmVzcG9uc2VEYXRhLmNvZGUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoY29kZSA9PT0gXCJVU0VSX0FMUkVBRFlfRVhJU1RTXCIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAgIOKaoO+4jyAgJHtlbWFpbH0g7J2066+4IOyhtOyerCAtIOqxtOuEiOucgeuLiOuLpC5gKSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAgIOKdjCAke2VtYWlsfSDsg53shLEg7Iuk7YyoOiAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlRGF0YSl9YCkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3JlYXRlZENyZWRlbnRpYWxzLnB1c2goeyBlbWFpbCwgcGFzc3dvcmQ6IERFRkFVTFRfUEFTU1dPUkQgfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYCAg4pyFICR7ZW1haWx9IOyDneyEsSDsmYTro4xgKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbWFpbF92ZXJpZmllZCA9IHRydWUg7KeB7KCRIOyXheuNsOydtO2KuCAoZGV2IO2OuOydmClcbiAgICAgICAgaWYgKGNyZWF0ZWRDcmVkZW50aWFscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZW1haWxzID0gY3JlYXRlZENyZWRlbnRpYWxzLm1hcCgoYykgPT4gYy5lbWFpbCk7XG4gICAgICAgICAgYXdhaXQgREIuZ2V0REIoXCJ3XCIpKFwidXNlcnNcIikud2hlcmVJbihcImVtYWlsXCIsIGVtYWlscykudXBkYXRlKHsgZW1haWxfdmVyaWZpZWQ6IHRydWUgfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYFxcbmVtYWlsX3ZlcmlmaWVkID0gdHJ1ZSDsl4XrjbDsnbTtirgg7JmE66OMYCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZUxMTSkge1xuICAgICAgICAgIGNvbnN0IHN0YXRzID0gZ2VuZXJhdG9yLmdldExMTUNhY2hlU3RhdHMoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBbTExNIENhY2hlXSDsupDsi5wg7YGs6riwOiAke3N0YXRzLnNpemV9YCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY2hhbGsuZ3JlZW4oYFxcbuKchSAke2NyZWF0ZWRDcmVkZW50aWFscy5sZW5ndGh966qF7J2YIOuhnOq3uOyduCDqsIDriqXtlZwg7IKs7Jqp7J6QIOyDneyEsSDsmYTro4xgKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNyZWF0ZWRDcmVkZW50aWFscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJcXG7sg53shLHrkJwg6rOE7KCVIOuqqeuhnTpcIik7XG4gICAgICAgICAgY29uc29sZS50YWJsZShjcmVhdGVkQ3JlZGVudGlhbHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gdXNlck1vZGUgPT09IFwiZHVtbXlcIjog6riw7KG0IGdlbmVyYXRlQmF0Y2goKSDtnZDrpoQg6rOE7IaNXG4gICAgfVxuXG4gICAgbGV0IHNhdmVUYXJnZXQgPSBvcHRpb25zW1wic2F2ZS10b1wiXSB8fCBcImRiXCI7XG4gICAgaWYgKCFvcHRpb25zW1wic2F2ZS10b1wiXSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIG5hbWU6IFwic2F2ZVRhcmdldFwiLFxuICAgICAgICBtZXNzYWdlOiBcIuyggOyepSDrsKnsi506XCIsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICB7IHRpdGxlOiBcIkZpeHR1cmUgRELsl5Ag7KCA7J6lXCIsIHZhbHVlOiBcImRiXCIgfSxcbiAgICAgICAgICB7IHRpdGxlOiBcIu2MjOydvOuhnCDsoIDsnqUgKOyekOuPmSDtjIzsnbzrqoUpXCIsIHZhbHVlOiBcImZpbGVcIiB9LFxuICAgICAgICAgIHsgdGl0bGU6IFwi7YyM7J2866GcIOyggOyepSAo7YyM7J2866qFIOyngOyglSlcIiwgdmFsdWU6IFwiZmlsZTpjdXN0b21cIiB9LFxuICAgICAgICAgIHsgdGl0bGU6IFwi7KCA7J6lIOyViCDtlaggKOy2nOugpeunjClcIiwgdmFsdWU6IFwibm9uZVwiIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgc2F2ZVRhcmdldCA9IHJlc3VsdC5zYXZlVGFyZ2V0O1xuXG4gICAgICBpZiAoc2F2ZVRhcmdldCA9PT0gXCJmaWxlOmN1c3RvbVwiKSB7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lUmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgbmFtZTogXCJmaWxlbmFtZVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwi7YyM7J2866qFOlwiLFxuICAgICAgICAgIGluaXRpYWw6IFwiZml4dHVyZXMuanNvblwiLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWZpbGVuYW1lUmVzdWx0LmZpbGVuYW1lKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwi7Leo7IaM65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2F2ZVRhcmdldCA9IGBmaWxlOiR7ZmlsZW5hbWVSZXN1bHQuZmlsZW5hbWV9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMTE0g7IKs7JqpIOyXrOu2gCDqsrDsoJVcbiAgICBsZXQgdXNlTExNID0gb3B0aW9uc1tcInVzZS1sbG1cIl0gPz8gZmFsc2U7XG4gICAgaWYgKCFvcHRpb25zW1widXNlLWxsbVwiXSkge1xuICAgICAgY29uc3QgbGxtUmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxuICAgICAgICBuYW1lOiBcInVzZUxMTVwiLFxuICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgIFwiTExN7Jy866GcIOuNlCDtmITsi6TsoIHsnbgg642w7J207YSw66W8IOyDneyEse2VoOq5jOyalD8gKGZpeHR1cmVIaW50IOq4sOuwmCwgQU5USFJPUElDX0FQSV9LRVkg7ZWE7JqUKVwiLFxuICAgICAgICBpbml0aWFsOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgdXNlTExNID0gbGxtUmVzdWx0LnVzZUxMTSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmFibGVMTE1DYWNoZSA9ICFvcHRpb25zW1wibm8tY2FjaGVcIl07XG5cbiAgICAvLyBmaXh0dXJlIGdlbjogZml4dHVyZSBEQiDrgrTsl5DshJwg7LC47KGwIOq0gOqzhOulvCDtlbTqsrDtlZjqs6Ag7KCA7J6l7ZWp64uI64ukXG4gICAgY29uc3QgZml4dHVyZURiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlKTtcbiAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgRml4dHVyZUdlbmVyYXRvcihmaXh0dXJlRGIsIGZpeHR1cmVEYiwgXCJmaXh0dXJlXCIsIEVudGl0eU1hbmFnZXIsIHtcbiAgICAgIHVzZUxMTSxcbiAgICAgIGVuYWJsZUxMTUNhY2hlLFxuICAgIH0pO1xuXG4gICAgaWYgKHVzZUxMTSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNoYWxrLmN5YW4oXG4gICAgICAgICAgYFxcbkxMTSDrqqjrk5zroZwgJHtlbnRpdHlOYW1lcy5qb2luKFwiLCBcIil9IOyDneyEsSDspJEuLi4gKOy6kOyLsTogJHtlbmFibGVMTE1DYWNoZSA/IFwiT05cIiA6IFwiT0ZGXCJ9KWAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG4ke2VudGl0eU5hbWVzLmpvaW4oXCIsIFwiKX0g7IOd7ISxIOykkS4uLmApKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjcyA9IGVudGl0eU5hbWVzLm1hcCgoZW50aXR5TmFtZSkgPT4gKHtcbiAgICAgIGVudGl0eTogZW50aXR5TmFtZSxcbiAgICAgIGNvdW50LFxuICAgICAgb3ZlcnJpZGVzOiB7fSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgZ2VuZXJhdG9yLmdlbmVyYXRlQmF0Y2goc3BlY3MpO1xuXG4gICAgaWYgKHVzZUxMTSkge1xuICAgICAgY29uc3Qgc3RhdHMgPSBnZW5lcmF0b3IuZ2V0TExNQ2FjaGVTdGF0cygpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgW0xMTSBDYWNoZV0g7LqQ7IucIO2BrOq4sDogJHtzdGF0cy5zaXplfWApKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgXFxu4pyFICR7cmVzdWx0cy5sZW5ndGh96rCcIGZpeHR1cmUg7IOd7ISxIOyZhOujjGApKTtcblxuICAgIGlmIChzYXZlVGFyZ2V0ID09PSBcIm5vbmVcIikge1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzdWx0cywgbnVsbCwgMikpO1xuICAgIH0gZWxzZSBpZiAoc2F2ZVRhcmdldCA9PT0gXCJkYlwiKSB7XG4gICAgICAvLyBnZW5lcmF0ZUJhdGNo6rCAIOydtOuvuCBEQuyXkCDsoIDsnqXtlojsnLzrr4DroZwg67OE64+EIOyggOyepeydtCDrtojtlYTsmpTtlanri4jri6QuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihcIkZpeHR1cmUgRELsl5Ag7KCA7J6l65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgfSBlbHNlIGlmIChzYXZlVGFyZ2V0LnN0YXJ0c1dpdGgoXCJmaWxlXCIpKSB7XG4gICAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gICAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuXG4gICAgICBjb25zdCBmaXh0dXJlc0RpciA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcInRlc3RcIiwgXCJmaXh0dXJlc1wiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaXh0dXJlc0Rpcik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgYXdhaXQgZnMubWtkaXIoZml4dHVyZXNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGVudGl0eU5hbWUgb2YgZW50aXR5TmFtZXMpIHtcbiAgICAgICAgY29uc3QgZW50aXR5UmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiByLmVudGl0eUlkID09PSBlbnRpdHlOYW1lKTtcblxuICAgICAgICBpZiAoZW50aXR5UmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICBpZiAoc2F2ZVRhcmdldCA9PT0gXCJmaWxlXCIpIHtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlOYW1lKTtcbiAgICAgICAgICBmaWxlbmFtZSA9IGAke2VudGl0eS50YWJsZX0uanNvbmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsZW5hbWUgPSBzYXZlVGFyZ2V0LnJlcGxhY2UoXCJmaWxlOlwiLCBcIlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVwYXRoID0gcGF0aC5qb2luKGZpeHR1cmVzRGlyLCBmaWxlbmFtZSk7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgICAgICBmaWxlcGF0aCxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIGVudGl0eVJlc3VsdHMubWFwKChyKSA9PiByLmRhdGEpLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIDIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKchSAke2ZpbGVwYXRofSDsoIDsnqUg7JmE66OMYCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgY2hhbGsucmVkKFxuICAgICAgICBcIkZpeHR1cmUg7IOd7ISxIOykkSDsmKTrpZjqsIAg67Cc7IOd7ZaI7Iq164uI64ukLlxcblwiICtcbiAgICAgICAgICBcIuybkOyduDogRW50aXR5IOygleydmOuCmCBEQiDsl7DqsrDsnYQg7ZmV7J247ZW07KO87IS47JqULlxcblwiICtcbiAgICAgICAgICBcIuyekOyEuO2VnCDrgrTsmqk6XCIsXG4gICAgICApLFxuICAgICAgZXJyb3IsXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIGZpeHR1cmUgZmV0Y2gg66qF66C57Ja0IC0g7Iuk7KCcIOyatOyYgSBEQuyXkOyEnCDrjbDsnbTthLDrpbwg6rCA7KC47JmAIGZpeHR1cmXroZwg7KCA7J6l7ZWp64uI64ukLlxuICog6rSA6rOE65CcIOuNsOydtO2EsOuPhCDtlajqu5gg6rCA7KC47Jik66+A66GcIO2YhOyLpOyggeyduCDthYzsiqTtirgg642w7J207YSw66W8IO2ZleuztO2VoCDsiJgg7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZml4dHVyZUZldGNoQ29tbWFuZChvcHRpb25zOiBGaXh0dXJlQ29tbWFuZE9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLmF1dG9sb2FkKCk7XG4gICAgfVxuXG4gICAgbGV0IGVudGl0eU5hbWVzOiBzdHJpbmdbXTtcblxuICAgIGlmIChvcHRpb25zLmFsbCkge1xuICAgICAgZW50aXR5TmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgaWYgKG9wdGlvbnMuZXhjbHVkZSkge1xuICAgICAgICBjb25zdCBleGNsdWRlTGlzdCA9IG9wdGlvbnMuZXhjbHVkZS5zcGxpdChcIixcIikubWFwKChzOiBzdHJpbmcpID0+IHMudHJpbSgpKTtcbiAgICAgICAgZW50aXR5TmFtZXMgPSBlbnRpdHlOYW1lcy5maWx0ZXIoKG5hbWUpID0+ICFleGNsdWRlTGlzdC5pbmNsdWRlcyhuYW1lKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcbiAgICAgIGVudGl0eU5hbWVzID0gb3B0aW9ucy5pbmNsdWRlLnNwbGl0KFwiLFwiKS5tYXAoKHM6IHN0cmluZykgPT4gcy50cmltKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBuYW1lOiBcImVudGl0aWVzXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiSW1wb3J07ZWgIEVudGl0eeulvCDshKDtg53tlZjshLjsmpQ6XCIsXG4gICAgICAgIGNob2ljZXM6IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCkubWFwKChpZCkgPT4gKHsgdGl0bGU6IGlkLCB2YWx1ZTogaWQgfSkpLFxuICAgICAgICBtaW46IDEsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuZW50aXRpZXMgfHwgcmVzdWx0LmVudGl0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCLst6jshozrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBlbnRpdHlOYW1lcyA9IHJlc3VsdC5lbnRpdGllcztcbiAgICB9XG5cbiAgICBjb25zdCBzdHJhdGVneTogRGF0YUV4cGxvcmVyU3RyYXRlZ3kgPSBvcHRpb25zLnN0cmF0ZWd5ID8/IFwicmVjZW50XCI7XG4gICAgY29uc3QgbGltaXQgPSBvcHRpb25zLmxpbWl0ID8gTnVtYmVyLnBhcnNlSW50KG9wdGlvbnMubGltaXQsIDEwKSA6IDEwO1xuXG4gICAgLy8gZml4dHVyZSBmZXRjaDogcHJvZHVjdGlvbiDrjbDsnbTthLDrpbwgZml4dHVyZSBEQuuhnCBpbXBvcnTtlanri4jri6RcbiAgICBjb25zdCBzb3VyY2VEYiA9IERCLmdldERCKFwiclwiKTsgLy8gcHJvZHVjdGlvbl9tYXN0ZXIgKOuYkOuKlCBkZXZlbG9wbWVudF9tYXN0ZXIpXG4gICAgY29uc3QgZml4dHVyZURiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlKTtcbiAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgRml4dHVyZUdlbmVyYXRvcihzb3VyY2VEYiwgZml4dHVyZURiLCBcImZpeHR1cmVcIiwgRW50aXR5TWFuYWdlcik7XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG4ke2VudGl0eU5hbWVzLmpvaW4oXCIsIFwiKX0gaW1wb3J0IOykkS4uLmApKTtcblxuICAgIGZvciAoY29uc3QgZW50aXR5TmFtZSBvZiBlbnRpdHlOYW1lcykge1xuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGdlbmVyYXRvci5pbXBvcnRGcm9tU291cmNlKGVudGl0eU5hbWUsIHtcbiAgICAgICAgc3RyYXRlZ3ksXG4gICAgICAgIGxpbWl0LFxuICAgICAgICBpbmNsdWRlUmVsYXRpb25zOiB0cnVlLFxuICAgICAgICBtYXhEZXB0aDogMixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyFICR7ZW50aXR5TmFtZX06ICR7cmVzdWx0cy5sZW5ndGh96rCcIGltcG9ydCDsmYTro4xgKSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBjaGFsay5yZWQoXG4gICAgICAgIFwi7Iuk7KCcIERC7JeQ7IScIOuNsOydtO2EsOulvCDqsIDsoLjsmKTripQg7KSRIOyYpOulmOqwgCDrsJzsg53tlojsirXri4jri6QuXFxuXCIgK1xuICAgICAgICAgIFwi7JuQ7J24OiDshozsiqQgREIg7Jew6rKwIOyEpOyglShzb25hbXUuY29uZmlnLnRzKeydtOuCmCBFbnRpdHkg6rSA6rOEIOygleydmOulvCDtmZXsnbjtlbTso7zshLjsmpQuXFxuXCIgK1xuICAgICAgICAgIFwi7J6Q7IS47ZWcIOuCtOyaqTpcIixcbiAgICAgICksXG4gICAgICBlcnJvcixcbiAgICApO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKlxuICogZml4dHVyZSBleHBsb3JlIOuqheugueyWtCAtIERC7J2YIOyLpOygnCDrjbDsnbTthLDrpbwg7KGw7ZqM7ZWY7JesIO2ZleyduO2VqeuLiOuLpC5cbiAqIOyggOyepe2VmOyngCDslYrqs6Ag7KGw7ZqM66eMIO2VmOuvgOuhnCDrjbDsnbTthLDrpbwg67mg66W06rKMIO2ZleyduO2VoCDrlYwg7Jyg7Jqp7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZml4dHVyZUV4cGxvcmVDb21tYW5kKG9wdGlvbnM6IEZpeHR1cmVDb21tYW5kT3B0aW9ucykge1xuICB0cnkge1xuICAgIGlmICghRW50aXR5TWFuYWdlci5pc0F1dG9sb2FkZWQpIHtcbiAgICAgIGF3YWl0IEVudGl0eU1hbmFnZXIuYXV0b2xvYWQoKTtcbiAgICB9XG5cbiAgICBsZXQgZW50aXR5TmFtZSA9IG9wdGlvbnMuaW5jbHVkZTtcblxuICAgIGlmICghZW50aXR5TmFtZSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIG5hbWU6IFwiZW50aXR5XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwi7YOQ7IOJ7ZWgIEVudGl0eTpcIixcbiAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKS5tYXAoKGlkKSA9PiAoeyB0aXRsZTogaWQsIHZhbHVlOiBpZCB9KSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuZW50aXR5KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIuy3qOyGjOuQmOyXiOyKteuLiOuLpC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVudGl0eU5hbWUgPSByZXN1bHQuZW50aXR5O1xuICAgIH1cblxuICAgIGlmICghZW50aXR5TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW50aXR5IG5hbWUgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyYXRlZ3k6IERhdGFFeHBsb3JlclN0cmF0ZWd5ID0gb3B0aW9ucy5zdHJhdGVneSA/PyBcInNhbXBsZVwiO1xuICAgIGNvbnN0IGxpbWl0ID0gb3B0aW9ucy5saW1pdCA/IE51bWJlci5wYXJzZUludChvcHRpb25zLmxpbWl0LCAxMCkgOiAxMDtcblxuICAgIGNvbnN0IGRiID0gREIuZ2V0REIoXCJyXCIpO1xuICAgIGNvbnN0IGV4cGxvcmVyID0gbmV3IERhdGFFeHBsb3JlcihkYiwgRW50aXR5TWFuYWdlcik7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGV4cGxvcmVyLmV4cGxvcmUoZW50aXR5TmFtZSwgeyBzdHJhdGVneSwgbGltaXQgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG4ke2VudGl0eU5hbWV9ICR7ZGF0YS5sZW5ndGh96rCcIOyhsO2ajCDsmYTro4w6YCkpO1xuICAgIGNvbnNvbGUudGFibGUoZGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgXCLrjbDsnbTthLAg7KGw7ZqMIOykkSDsmKTrpZjqsIAg67Cc7IOd7ZaI7Iq164uI64ukLlxcblwiICtcbiAgICAgICAgICBcIuybkOyduDogREIg7Jew6rKw7J2064KYIEVudGl0eSDsoJXsnZjrpbwg7ZmV7J247ZW07KO87IS47JqULlxcblwiICtcbiAgICAgICAgICBcIuyekOyEuO2VnCDrgrTsmqk6XCIsXG4gICAgICApLFxuICAgICAgZXJyb3IsXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O2FBR3VDO1NBQ0g7V0FDa0I7cUJBQ0c7b0JBQ0Q7d0JBRVE7Ozs7QUFrQmhFLFNBQVMsaUJBQWlCLEtBQXFCO0NBRTdDLElBQUksV0FBVyxJQUFJLGFBQWEsQ0FBQyxRQUFRLGNBQWMsR0FBRztBQUMxRCxLQUFJLFNBQVMsV0FBVyxHQUFHO0FBQ3pCLGFBQVc7O0FBR2IsS0FBSSxTQUFTLEtBQUssU0FBUyxFQUFFO0FBQzNCLGFBQVcsSUFBSTs7QUFHakIsUUFBTyxTQUFTLE1BQU0sR0FBRyxHQUFHOzs7OztBQU05QixlQUFzQixrQkFBa0IsU0FBZ0M7QUFDdEUsS0FBSTtBQUNGLE1BQUksQ0FBQyxjQUFj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
|
|
@@ -5,7 +5,7 @@ export type RowWithId<Id extends string> = {
|
|
|
5
5
|
} & Record<string, ColumnValue>;
|
|
6
6
|
/**
|
|
7
7
|
* Batch update rows in a table. Technically its a patch since it only updates the specified columns. Any omitted columns will not be affected
|
|
8
|
-
* @param
|
|
8
|
+
* @param knex
|
|
9
9
|
* @param tableName
|
|
10
10
|
* @param ids
|
|
11
11
|
* @param rows
|
|
@@ -4,7 +4,7 @@ import { getLogger } from "@logtape/logtape";
|
|
|
4
4
|
//#region src/database/_batch_update.ts
|
|
5
5
|
/**
|
|
6
6
|
* Batch update rows in a table. Technically its a patch since it only updates the specified columns. Any omitted columns will not be affected
|
|
7
|
-
* @param
|
|
7
|
+
* @param knex
|
|
8
8
|
* @param tableName
|
|
9
9
|
* @param ids
|
|
10
10
|
* @param rows
|
|
@@ -111,4 +111,4 @@ var init__batch_update = __esmMin((() => {
|
|
|
111
111
|
//#endregion
|
|
112
112
|
init__batch_update();
|
|
113
113
|
export { batchUpdate, init__batch_update };
|
|
114
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2JhdGNoX3VwZGF0ZS5qcyIsIm5hbWVzIjpbImNodW5rczogUm93V2l0aElkPElkPltdW10iLCJrZXlTZXQ6IFNldDxzdHJpbmc+IiwiYWxsQmluZGluZ3M6IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbClbXSIsImNhc2VzOiBzdHJpbmdbXSIsImNhc2VCaW5kaW5nczogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsKVtdIiwid2hlbkNsYXVzZXM6IHN0cmluZ1tdIiwid2hlcmVJbkJpbmRpbmdzOiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpW10iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvX2JhdGNoX3VwZGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICDslYTrnpjsnZgg66eB7YGs7JeQ7IScIOywuOqzoO2VtOyEnCDqsIDsoLjsmKgg7IaM7Iqk7L2U65OcXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9rbmV4L2tuZXgvaXNzdWVzLzU3MTZcbiovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wic29uYW11XCIsIFwiaW50ZXJuYWxcIiwgXCJiYXRjaC11cGRhdGVcIl0pO1xuXG50eXBlIENvbHVtblZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7XG5leHBvcnQgdHlwZSBSb3dXaXRoSWQ8SWQgZXh0ZW5kcyBzdHJpbmc+ID0ge1xuICBba2V5IGluIElkXTogQ29sdW1uVmFsdWU7XG59ICYgUmVjb3JkPHN0cmluZywgQ29sdW1uVmFsdWU+
|
|
114
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2JhdGNoX3VwZGF0ZS5qcyIsIm5hbWVzIjpbImNodW5rczogUm93V2l0aElkPElkPltdW10iLCJrZXlTZXQ6IFNldDxzdHJpbmc+IiwiYWxsQmluZGluZ3M6IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbClbXSIsImNhc2VzOiBzdHJpbmdbXSIsImNhc2VCaW5kaW5nczogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsKVtdIiwid2hlbkNsYXVzZXM6IHN0cmluZ1tdIiwid2hlcmVJbkJpbmRpbmdzOiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpW10iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvX2JhdGNoX3VwZGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICDslYTrnpjsnZgg66eB7YGs7JeQ7IScIOywuOqzoO2VtOyEnCDqsIDsoLjsmKgg7IaM7Iqk7L2U65OcXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9rbmV4L2tuZXgvaXNzdWVzLzU3MTZcbiovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wic29uYW11XCIsIFwiaW50ZXJuYWxcIiwgXCJiYXRjaC11cGRhdGVcIl0pO1xuXG50eXBlIENvbHVtblZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7XG5leHBvcnQgdHlwZSBSb3dXaXRoSWQ8SWQgZXh0ZW5kcyBzdHJpbmc+ID0ge1xuICBba2V5IGluIElkXTogQ29sdW1uVmFsdWU7XG59ICYgUmVjb3JkPHN0cmluZywgQ29sdW1uVmFsdWU+O1xuXG4vKipcbiAqIEJhdGNoIHVwZGF0ZSByb3dzIGluIGEgdGFibGUuIFRlY2huaWNhbGx5IGl0cyBhIHBhdGNoIHNpbmNlIGl0IG9ubHkgdXBkYXRlcyB0aGUgc3BlY2lmaWVkIGNvbHVtbnMuIEFueSBvbWl0dGVkIGNvbHVtbnMgd2lsbCBub3QgYmUgYWZmZWN0ZWRcbiAqIEBwYXJhbSBrbmV4XG4gKiBAcGFyYW0gdGFibGVOYW1lXG4gKiBAcGFyYW0gaWRzXG4gKiBAcGFyYW0gcm93c1xuICogQHBhcmFtIGNodW5rU2l6ZVxuICogQHBhcmFtIHRyeFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmF0Y2hVcGRhdGU8SWQgZXh0ZW5kcyBzdHJpbmc+KFxuICBrbmV4OiBLbmV4LFxuICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgaWRzOiBJZFtdLFxuICByb3dzOiBSb3dXaXRoSWQ8SWQ+W10sXG4gIGNodW5rU2l6ZSA9IDUwLFxuICB0cng6IEtuZXguVHJhbnNhY3Rpb24gfCBudWxsID0gbnVsbCxcbikge1xuICBjb25zdCBjaHVua3M6IFJvd1dpdGhJZDxJZD5bXVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkgKz0gY2h1bmtTaXplKSB7XG4gICAgY2h1bmtzLnB1c2gocm93cy5zbGljZShpLCBpICsgY2h1bmtTaXplKSk7XG4gIH1cblxuICBjb25zdCBleGVjdXRlVXBkYXRlID0gYXN5bmMgKGNodW5rOiBSb3dXaXRoSWQ8SWQ+W10sIHRyYW5zYWN0aW9uOiBLbmV4LlRyYW5zYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgcmF3UXVlcnkgPSBnZW5lcmF0ZUJhdGNoVXBkYXRlU1FMKGtuZXgsIHRhYmxlTmFtZSwgY2h1bmssIGlkcyk7XG4gICAgcmV0dXJuIHJhd1F1ZXJ5LnRyYW5zYWN0aW5nKHRyYW5zYWN0aW9uKTtcbiAgfTtcblxuICBpZiAodHJ4KSB7XG4gICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua3MpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIlByb2Nlc3NpbmcgQmF0Y2ggQ2h1bmsgaW4gRXhpc3RpbmcgVHJhbnNhY3Rpb246IHtjdXJyZW50fSAvIHt0b3RhbH1cIiwge1xuICAgICAgICBjdXJyZW50OiBjaHVuay5sZW5ndGgsXG4gICAgICAgIHRvdGFsOiBjaHVua3MubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBleGVjdXRlVXBkYXRlKGNodW5rLCB0cngpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBrbmV4LnRyYW5zYWN0aW9uKGFzeW5jIChuZXdUcngpID0+IHtcbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcIlByb2Nlc3NpbmcgQmF0Y2ggQ2h1bmsgaW4gTmV3IFRyYW5zYWN0aW9uOiB7Y3VycmVudH0gLyB7dG90YWx9XCIsIHtcbiAgICAgICAgICBjdXJyZW50OiBjaHVuay5sZW5ndGgsXG4gICAgICAgICAgdG90YWw6IGNodW5rcy5sZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBleGVjdXRlVXBkYXRlKGNodW5rLCBuZXdUcngpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzZXQgb2YgdW5pcXVlIGtleXMgaW4gYSBkYXRhIGFycmF5XG4gKlxuICogRXhhbXBsZTpcbiAqIFsgeyBhOiAxLCBiOiAyIH0sIHsgYTogMywgYzogNCB9IF0gPT4gU2V0KFsgXCJhXCIsIFwiYlwiLCBcImNcIiBdKVxuICogQHBhcmFtIGRhdGFcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVLZXlTZXRGcm9tRGF0YShkYXRhOiBSZWNvcmQ8c3RyaW5nLCBDb2x1bW5WYWx1ZT5bXSkge1xuICBjb25zdCBrZXlTZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocm93KSkge1xuICAgICAga2V5U2V0LmFkZChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ga2V5U2V0O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJhdGNoVXBkYXRlU1FMPElkIGV4dGVuZHMgc3RyaW5nPihcbiAgZGI6IEtuZXgsXG4gIHRhYmxlTmFtZTogc3RyaW5nLFxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBDb2x1bW5WYWx1ZT5bXSxcbiAgaWRlbnRpZmllcnM6IElkW10sXG4pOiBLbmV4LlJhdyB7XG4gIGNvbnN0IGtleVNldCA9IGdlbmVyYXRlS2V5U2V0RnJvbURhdGEoZGF0YSk7XG4gIGNvbnN0IGFsbEJpbmRpbmdzOiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpW10gPSBbXTtcblxuICBjb25zdCBpbnZhbGlkSWRlbnRpZmllcnMgPSBpZGVudGlmaWVycy5maWx0ZXIoKGlkKSA9PiAha2V5U2V0LmhhcyhpZCkpO1xuICBpZiAoaW52YWxpZElkZW50aWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpZGVudGlmaWVyczogJHtpbnZhbGlkSWRlbnRpZmllcnMuam9pbihcIiwgXCIpfS4gSWRlbnRpZmllcnMgbXVzdCBleGlzdCBpbiB0aGUgZGF0YWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNhc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleVNldCkge1xuICAgIGlmIChpZGVudGlmaWVycy5pbmNsdWRlcyhrZXkgYXMgSWQpKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGNhc2VCaW5kaW5nczogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsKVtdID0gW107XG4gICAgY29uc3Qgd2hlbkNsYXVzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XG4gICAgICBpZiAoT2JqZWN0Lmhhc093bihyb3csIGtleSkpIHtcbiAgICAgICAgY29uc3Qgd2hlcmVQYXJ0cyA9IGlkZW50aWZpZXJzLm1hcCgoKSA9PiBgPz8gPSA/YCkuam9pbihcIiBBTkQgXCIpO1xuICAgICAgICB3aGVuQ2xhdXNlcy5wdXNoKGBXSEVOICgke3doZXJlUGFydHN9KSBUSEVOID9gKTtcblxuICAgICAgICAvLyBpZGVudGlmaWVyIOydtOumhOqzvCDqsJLrk6TsnYQg7LaU6rCAXG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRlbnRpZmllcnMpIHtcbiAgICAgICAgICBjYXNlQmluZGluZ3MucHVzaChpZCwgcm93W2lkXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVEhFTiDqsJIg7LaU6rCAXG4gICAgICAgIGNhc2VCaW5kaW5ncy5wdXNoKHJvd1trZXldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3aGVuVGhlbiA9IHdoZW5DbGF1c2VzLmpvaW4oXCIgXCIpO1xuICAgIGNhc2VzLnB1c2goYD8/ID0gQ0FTRSAke3doZW5UaGVufSBFTFNFID8/IEVORGApO1xuXG4gICAgLy8g7Lus65+866qFIDLqsJwg7LaU6rCAIChTRVTsnZgg7Lus65+866qFLCBFTFNF7J2YIOy7rOufvOuqhSlcbiAgICBhbGxCaW5kaW5ncy5wdXNoKGtleSk7XG4gICAgYWxsQmluZGluZ3MucHVzaCguLi5jYXNlQmluZGluZ3MpO1xuICAgIGFsbEJpbmRpbmdzLnB1c2goa2V5KTtcbiAgfVxuXG4gIGNvbnN0IHdoZXJlSW5DbGF1c2VzID0gaWRlbnRpZmllcnNcbiAgICAubWFwKChfY29sKSA9PiBgPz8gSU4gKCR7ZGF0YS5tYXAoKCkgPT4gXCI/XCIpLmpvaW4oXCIsIFwiKX0pYClcbiAgICAuam9pbihcIiBBTkQgXCIpO1xuXG4gIGNvbnN0IHdoZXJlSW5CaW5kaW5nczogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsKVtdID0gW107XG4gIGZvciAoY29uc3QgY29sIG9mIGlkZW50aWZpZXJzKSB7XG4gICAgd2hlcmVJbkJpbmRpbmdzLnB1c2goY29sKTtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XG4gICAgICB3aGVyZUluQmluZGluZ3MucHVzaChyb3dbY29sXSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3FsID0gZGIucmF3KGBVUERBVEUgPz8gU0VUICR7Y2FzZXMuam9pbihcIiwgXCIpfSBXSEVSRSAke3doZXJlSW5DbGF1c2VzfWAsIFtcbiAgICB0YWJsZU5hbWUsXG4gICAgLi4uYWxsQmluZGluZ3MsXG4gICAgLi4ud2hlcmVJbkJpbmRpbmdzLFxuICBdKTtcblxuICByZXR1cm4gc3FsO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBd0JBLGVBQXNCLFlBQ3BCLE1BQ0EsV0FDQSxLQUNBLE1BQ0EsWUFBWSxJQUNaLE1BQStCLE1BQy9CO0NBQ0EsTUFBTUEsU0FBNEIsRUFBRTtBQUNwQyxNQUFLLElBQUksSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUssV0FBVztBQUMvQyxTQUFPLEtBQUssS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUM7O0NBRzNDLE1BQU0sZ0JBQWdCLE9BQU8sT0FBd0IsZ0JBQWtDO0VBQ3JGLE1BQU0sV0FBVyx1QkFBdUIsTUFBTSxXQUFXLE9BQU8sSUFBSTtBQUNwRSxTQUFPLFNBQVMsWUFBWSxZQUFZOztBQUcxQyxLQUFJLEtBQUs7QUFDUCxPQUFLLE1BQU0sU0FBUyxRQUFRO0FBQzFCLFVBQU8sTUFBTSx1RUFBdUU7SUFDbEYsU0FBUyxNQUFNO0lBQ2YsT0FBTyxPQUFPO0lBQ2YsQ0FBQztBQUNGLFNBQU0sY0FBYyxPQUFPLElBQUk7O1FBRTVCO0FBQ0wsUUFBTSxLQUFLLFlBQVksT0FBTyxXQUFXO0FBQ3ZDLFFBQUssTUFBTSxTQUFTLFFBQVE7QUFDMUIsV0FBTyxNQUFNLGtFQUFrRTtLQUM3RSxTQUFTLE1BQU07S0FDZixPQUFPLE9BQU87S0FDZixDQUFDO0FBQ0YsVUFBTSxjQUFjLE9BQU8sT0FBTzs7SUFFcEM7Ozs7Ozs7Ozs7QUFXTixTQUFTLHVCQUF1QixNQUFxQztDQUNuRSxNQUFNQyxTQUFzQixJQUFJLEtBQUs7QUFDckMsTUFBSyxNQUFNLE9BQU8sTUFBTTtBQUN0QixPQUFLLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxFQUFFO0FBQ2xDLFVBQU8sSUFBSSxJQUFJOzs7QUFHbkIsUUFBTzs7QUFHVCxTQUFTLHVCQUNQLElBQ0EsV0FDQSxNQUNBLGFBQ1U7Q0FDVixNQUFNLFNBQVMsdUJBQXVCLEtBQUs7Q0FDM0MsTUFBTUMsY0FBb0QsRUFBRTtDQUU1RCxNQUFNLHFCQUFxQixZQUFZLFFBQVEsT0FBTyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUM7QUFDdEUsS0FBSSxtQkFBbUIsU0FBUyxHQUFHO0FBQ2pDLFFBQU0sSUFBSSxNQUNSLHdCQUF3QixtQkFBbUIsS0FBSyxLQUFLLENBQUMsc0NBQ3ZEOztDQUdILE1BQU1DLFFBQWtCLEVBQUU7QUFFMUIsTUFBSyxNQUFNLE9BQU8sUUFBUTtBQUN4QixNQUFJLFlBQVksU0FBUyxJQUFVLENBQUU7RUFFckMsTUFBTUMsZUFBcUQsRUFBRTtFQUM3RCxNQUFNQyxjQUF3QixFQUFFO0FBRWhDLE9BQUssTUFBTSxPQUFPLE1BQU07QUFDdEIsT0FBSSxPQUFPLE9BQU8sS0FBSyxJQUFJLEVBQUU7SUFDM0IsTUFBTSxhQUFhLFlBQVksVUFBVSxTQUFTLENBQUMsS0FBSyxRQUFRO0FBQ2hFLGdCQUFZLEtBQUssU0FBUyxXQUFXLFVBQVU7QUFHL0MsU0FBSyxNQUFNLE1BQU0sYUFBYTtBQUM1QixrQkFBYSxLQUFLLElBQUksSUFBSSxJQUFJOztBQUdoQyxpQkFBYSxLQUFLLElBQUksS0FBSzs7O0VBSS9CLE1BQU0sV0FBVyxZQUFZLEtBQUssSUFBSTtBQUN0QyxRQUFNLEtBQUssYUFBYSxTQUFTLGNBQWM7QUFHL0MsY0FBWSxLQUFLLElBQUk7QUFDckIsY0FBWSxLQUFLLEdBQUcsYUFBYTtBQUNqQyxjQUFZLEtBQUssSUFBSTs7Q0FHdkIsTUFBTSxpQkFBaUIsWUFDcEIsS0FBSyxTQUFTLFVBQVUsS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQzFELEtBQUssUUFBUTtDQUVoQixNQUFNQyxrQkFBd0QsRUFBRTtBQUNoRSxNQUFLLE1BQU0sT0FBTyxhQUFhO0FBQzdCLGtCQUFnQixLQUFLLElBQUk7QUFDekIsT0FBSyxNQUFNLE9BQU8sTUFBTTtBQUN0QixtQkFBZ0IsS0FBSyxJQUFJLEtBQUs7OztDQUlsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFpQixNQUFNLEtBQUssS0FBSyxDQUFDLFNBQVMsa0JBQWtCO0VBQzlFO0VBQ0EsR0FBRztFQUNILEdBQUc7RUFDSixDQUFDO0FBRUYsUUFBTzs7OztDQXpJSCxTQUFTLFVBQVU7RUFBQztFQUFVO0VBQVk7RUFBZSxDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../../src/entity/entity-manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../../src/entity/entity-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -194,9 +194,19 @@ var init_entity_manager = __esmMin((() => {
|
|
|
194
194
|
* @returns
|
|
195
195
|
*/
|
|
196
196
|
getEntityIdFromPath(filePath) {
|
|
197
|
-
const
|
|
198
|
-
|
|
199
|
-
|
|
197
|
+
const fileName = path.basename(filePath);
|
|
198
|
+
const supportedSuffixes = [
|
|
199
|
+
".model.ts",
|
|
200
|
+
".model.js",
|
|
201
|
+
".entity.json",
|
|
202
|
+
".frame.ts",
|
|
203
|
+
".frame.js"
|
|
204
|
+
];
|
|
205
|
+
const matchedSuffix = supportedSuffixes.find((suffix) => fileName.endsWith(suffix));
|
|
206
|
+
assert(matchedSuffix, `지원하지 않는 entity 경로입니다: ${filePath}`);
|
|
207
|
+
const entityBaseName = fileName.slice(0, -matchedSuffix.length);
|
|
208
|
+
assert(entityBaseName.length > 0, `EntityId를 계산할 수 없는 경로입니다: ${filePath}`);
|
|
209
|
+
return inflection.camelize(entityBaseName.replace(/-/g, "_"));
|
|
200
210
|
}
|
|
201
211
|
async registerNonEntityTypeModulePaths() {
|
|
202
212
|
const typePathsPatterns = [path.join(Sonamu.apiRootPath, runtimePath("src/application/**/*.types.ts")), path.join(Sonamu.apiRootPath, runtimePath("src/application/**/*.generated.ts"))];
|
|
@@ -226,4 +236,4 @@ var init_entity_manager = __esmMin((() => {
|
|
|
226
236
|
//#endregion
|
|
227
237
|
init_entity_manager();
|
|
228
238
|
export { EntityManager, init_entity_manager };
|
|
229
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW1hbmFnZXIuanMiLCJuYW1lcyI6WyJ6IiwiZW50aXR5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VudGl0eS9lbnRpdHktbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IGdsb2IsIHJlYWRGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHsgcHJldHRpZnlFcnJvciwgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7XG4gIEVudGl0eUpzb25TY2hlbWEsXG4gIGlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlLFxuICBpc1NlYXJjaFRleHRQcm9wLFxuICBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gIFNvbmFtdUZpbGVTY2hlbWEsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlJbmRleCwgdHlwZSBFbnRpdHlKc29uIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnbG9iQXN5bmMgfSBmcm9tIFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGltcG9ydE1lbWJlcnMgfSBmcm9tIFwiLi4vdXRpbHMvZXNtLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyBydW50aW1lUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eSB9IGZyb20gXCIuL2VudGl0eVwiO1xuXG5leHBvcnQgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCA9IFJlY29yZDxcbiAgXCJmc1wiIHwgXCJmc1BsdXJhbFwiIHwgXCJjYW1lbFwiIHwgXCJjYW1lbFBsdXJhbFwiIHwgXCJjYXBpdGFsXCIgfCBcImNhcGl0YWxQbHVyYWxcIiB8IFwidXBwZXJcIiB8IFwiY29uc3RhbnRcIixcbiAgc3RyaW5nXG4+O1xuZXhwb3J0IHR5cGUgVGFibGVTcGVjID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHVuaXF1ZUluZGV4ZXM6IEVudGl0eUluZGV4W107XG4gIGpzb25Db2x1bW5zOiBzdHJpbmdbXTtcbn07XG5jbGFzcyBFbnRpdHlNYW5hZ2VyQ2xhc3Mge1xuICBwcml2YXRlIGVudGl0aWVzOiBNYXA8c3RyaW5nLCBFbnRpdHk+ID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgbW9kdWxlUGF0aHM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgdGFibGVTcGVjczogTWFwPHN0cmluZywgVGFibGVTcGVjPiA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGlzQXV0b2xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIOqyveuhnCDsoITri6zrsJvslYQg66qo65OgIGVudGl0eS5qc29uIO2MjOydvCDroZzrk5xcbiAgYXN5bmMgYXV0b2xvYWQoXzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuaXNBdXRvbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhdGhQYXR0ZXJuID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCIvc3JjL2FwcGxpY2F0aW9uLyoqLyouZW50aXR5Lmpzb25cIik7XG5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGZpbGUgb2YgZ2xvYihwYXRoLnJlc29sdmUocGF0aFBhdHRlcm4pKSkge1xuICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoKGF3YWl0IHJlYWRGaWxlKGZpbGUpKS50b1N0cmluZygpKTtcblxuICAgICAgLy8gZW50aXR5Lmpzb24g7Iqk7YKk66eIIOqygOymnVxuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLnNjaGVtYVZhbGlkYXRlKGpzb24pO1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoU29uYW11LmFwaVJvb3RQYXRoLCBmaWxlKTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gcHJldHRpZnlFcnJvcihlcnJvcik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgY2hhbGsucmVkKGBJbnZhbGlkIGVudGl0eS5qc29uIHNjaGVtYTogJHtyZWxhdGl2ZVBhdGh9XFxuJHtjaGFsay55ZWxsb3coZXJyb3JNZXNzYWdlKX1gKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5yZWdpc3Rlcihqc29uLCB7IGRlZmVyU2VhcmNoVGV4dEpzb25Tb3VyY2VWYWxpZGF0aW9uOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJOb25FbnRpdHlUeXBlTW9kdWxlUGF0aHMoKTtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlQWxsUmVnaXN0ZXJlZFNlYXJjaFRleHRKc29uU291cmNlcygpO1xuXG4gICAgdGhpcy5pc0F1dG9sb2FkZWQgPSB0cnVlO1xuICB9XG5cbiAgc2NoZW1hVmFsaWRhdGUoanNvbjogdW5rbm93bikge1xuICAgIGNvbnN0IHJlc3VsdCA9IEVudGl0eUpzb25TY2hlbWEuc2FmZVBhcnNlKGpzb24pO1xuICAgIHJldHVybiByZXN1bHQuc3VjY2VzcyA/IG51bGwgOiByZXN1bHQuZXJyb3I7XG4gIH1cblxuICBhc3luYyByZWxvYWQoZG9TaWxlbnQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuZW50aXRpZXMuY2xlYXIoKTtcbiAgICB0aGlzLm1vZHVsZVBhdGhzLmNsZWFyKCk7XG4gICAgdGhpcy50YWJsZVNwZWNzLmNsZWFyKCk7XG4gICAgdGhpcy5pc0F1dG9sb2FkZWQgPSBmYWxzZTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmF1dG9sb2FkKGRvU2lsZW50KTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyKFxuICAgIGpzb246IEVudGl0eUpzb24sXG4gICAgb3B0aW9uczogeyBkZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbj86IGJvb2xlYW4gfSA9IHt9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IEVudGl0eSB9ID0gYXdhaXQgaW1wb3J0KFwiLi9lbnRpdHlcIik7XG4gICAgY29uc3QgZW50aXR5ID0gbmV3IEVudGl0eShqc29uKTtcbiAgICBhd2FpdCBlbnRpdHkucmVnaXN0ZXJNb2R1bGVQYXRocygpO1xuICAgIGlmICghb3B0aW9ucy5kZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZVNlYXJjaFRleHRKc29uU291cmNlcyhlbnRpdHkpO1xuICAgIH1cbiAgICBlbnRpdHkucmVnaXN0ZXJUYWJsZVNwZWNzKCk7XG4gICAgdGhpcy5lbnRpdGllcy5zZXQoanNvbi5pZCwgZW50aXR5KTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQWxsUmVnaXN0ZXJlZFNlYXJjaFRleHRKc29uU291cmNlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiB0aGlzLmVudGl0aWVzLnZhbHVlcygpKSB7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlU2VhcmNoVGV4dEpzb25Tb3VyY2VzKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVNlYXJjaFRleHRKc29uU291cmNlcyhlbnRpdHk6IEVudGl0eSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByb3BzQnlOYW1lID0gbmV3IE1hcChlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiBbcHJvcC5uYW1lLCBwcm9wXSkpO1xuXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIGVudGl0eS5wcm9wcykge1xuICAgICAgaWYgKCFpc1NlYXJjaFRleHRQcm9wKHByb3ApKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBwcm9wLnNvdXJjZUNvbHVtbnMpIHtcbiAgICAgICAgY29uc3Qgc291cmNlUHJvcCA9IHByb3BzQnlOYW1lLmdldChzb3VyY2UubmFtZSk7XG4gICAgICAgIGlmICghc291cmNlUHJvcCB8fCBzb3VyY2VQcm9wLnR5cGUgIT09IFwianNvblwiKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB6b2RUeXBlID0gYXdhaXQgdGhpcy5yZXNvbHZlU2VhcmNoVGV4dEpzb25Tb3VyY2VUeXBlKGVudGl0eSwgc291cmNlUHJvcC5pZCk7XG4gICAgICAgIGlmICghem9kVHlwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBzZWFyY2hUZXh0IHNvdXJjZSBcIiR7c291cmNlLm5hbWV9XCLsnZgganNvbiDtg4DsnoUgXCIke3NvdXJjZVByb3AuaWR9XCLsnYQo66W8KSDroZzrk5ztlaAg7IiYIOyXhuyKteuLiOuLpC5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlKHpvZFR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYHNlYXJjaFRleHQgc291cmNlIFwiJHtzb3VyY2UubmFtZX1cIuydmCBqc29uIO2DgOyehSBcIiR7c291cmNlUHJvcC5pZH1cIuydgCjripQpIHVud3JhcCDtm4Qgei5hcnJheSh6LnN0cmluZygpKSDsnbTslrTslbwg7ZWp64uI64ukLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVNlYXJjaFRleHRKc29uU291cmNlVHlwZShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0eXBlSWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx6LlpvZFR5cGVBbnkgfCBudWxsPiB7XG4gICAgY29uc3QgbG9jYWxUeXBlID0gZW50aXR5LnR5cGVzW3R5cGVJZF07XG4gICAgaWYgKGxvY2FsVHlwZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgcmV0dXJuIGxvY2FsVHlwZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlZ2lzdGVyZWRFbnRpdHkgb2YgdGhpcy5lbnRpdGllcy52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgcmVnaXN0ZXJlZFR5cGUgPSByZWdpc3RlcmVkRW50aXR5LnR5cGVzW3R5cGVJZF07XG4gICAgICBpZiAocmVnaXN0ZXJlZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRUeXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlSWQgPT09IFwiU29uYW11RmlsZVwiKSB7XG4gICAgICByZXR1cm4gU29uYW11RmlsZVNjaGVtYTtcbiAgICB9XG4gICAgaWYgKHR5cGVJZCA9PT0gXCJTb25hbXVGaWxlW11cIikge1xuICAgICAgcmV0dXJuIFNvbmFtdUZpbGVBcnJheVNjaGVtYTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5tb2R1bGVQYXRocy5nZXQodHlwZUlkKTtcbiAgICBpZiAoIW1vZHVsZVBhdGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZHVsZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgICAgcnVudGltZVBhdGgoYGRpc3QvYXBwbGljYXRpb24vJHttb2R1bGVQYXRofS5qc2ApLFxuICAgICk7XG4gICAgY29uc3QgaW1wb3J0ZWRNZW1iZXJzID0gYXdhaXQgaW1wb3J0TWVtYmVyczx1bmtub3duPihtb2R1bGVGaWxlUGF0aCk7XG4gICAgY29uc3QgbWF0Y2hlZCA9IGltcG9ydGVkTWVtYmVycy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gdHlwZUlkKTtcbiAgICBpZiAoIW1hdGNoZWQgfHwgIShtYXRjaGVkLnZhbHVlIGluc3RhbmNlb2Ygei5ab2RUeXBlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWQudmFsdWU7XG4gIH1cblxuICBnZXQoZW50aXR5SWQ6IHN0cmluZyk6IEVudGl0eSB7XG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5lbnRpdGllcy5nZXQoZW50aXR5SWQpO1xuICAgIGlmIChlbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIEVudGl0eSDsmpTssq0gJHtlbnRpdHlJZH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgZ2V0QnlUYWJsZSh0YWJsZTogc3RyaW5nKTogRW50aXR5IHtcbiAgICBjb25zdCBlbnRpdHkgPSBBcnJheS5mcm9tKHRoaXMuZW50aXRpZXMudmFsdWVzKCkpLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5LnRhYmxlID09PSB0YWJsZSk7XG4gICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgRW50aXR5IOyalOyyrSAke3RhYmxlfWApO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBleGlzdHMoZW50aXR5SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXRpZXMuZ2V0KGVudGl0eUlkKTtcbiAgICByZXR1cm4gZW50aXR5ICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRBbGxJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKEVudGl0eU1hbmFnZXIuZW50aXRpZXMua2V5cygpKS50b1NvcnRlZCgpO1xuICB9XG5cbiAgZ2V0QWxsRW50aXRpZXMoKTogRW50aXR5W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50aXRpZXMudmFsdWVzKCkpO1xuICB9XG5cbiAgZ2V0QWxsUGFyZW50SWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxJZHMoKS5maWx0ZXIoKGVudGl0eUlkKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmdldChlbnRpdHlJZCk7XG4gICAgICByZXR1cm4gZW50aXR5LnBhcmVudElkID09PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDaGlsZHJlbklkcyhwYXJlbnRJZDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbElkcygpLmZpbHRlcigoZW50aXR5SWQpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZ2V0KGVudGl0eUlkKTtcbiAgICAgIHJldHVybiBlbnRpdHkucGFyZW50SWQgPT09IHBhcmVudElkO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0TW9kdWxlUGF0aChrZXk6IHN0cmluZywgbW9kdWxlUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gY29uc29sZS5kZWJ1ZyhjaGFsay5jeWFuKGBzZXRNb2R1bGVQYXRoIDo6ICR7a2V5fSA6OiAke21vZHVsZVBhdGh9YCkpO1xuICAgIHRoaXMubW9kdWxlUGF0aHMuc2V0KGtleSwgbW9kdWxlUGF0aCk7XG4gIH1cblxuICBnZXRNb2R1bGVQYXRoKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5tb2R1bGVQYXRocy5nZXQoa2V5KTtcbiAgICBpZiAobW9kdWxlUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQg66qo65OIIO2MqOyKpCDsmpTssq0gJHtrZXl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZHVsZVBhdGg7XG4gIH1cblxuICBzZXRUYWJsZVNwZWModGFibGVTcGVjOiBUYWJsZVNwZWMpIHtcbiAgICB0aGlzLnRhYmxlU3BlY3Muc2V0KHRhYmxlU3BlYy5uYW1lLCB0YWJsZVNwZWMpO1xuICB9XG5cbiAgZ2V0VGFibGVTcGVjKGtleTogc3RyaW5nKTogVGFibGVTcGVjIHtcbiAgICBjb25zdCB0YWJsZVNwZWMgPSB0aGlzLnRhYmxlU3BlY3MuZ2V0KGtleSk7XG4gICAgaWYgKHRhYmxlU3BlYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQg7YWM7J2067iUIOyKpO2OmSDsmpTssq0gJHtrZXl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlU3BlYztcbiAgfVxuXG4gIGdldE5hbWVzRnJvbUlkKGVudGl0eUlkOiBzdHJpbmcpOiBFbnRpdHlOYW1lc1JlY29yZCB7XG4gICAgLy8gZW50aXR5SWTqsIAg64uo67O17IiYIOuPme2YlSDri6jslrTsnbgg6rK97JqwIExpc3Qg67aZ7Jes7IScIOyDneyEsVxuICAgIGNvbnN0IHBsdXJhbGl6ZWQgPVxuICAgICAgaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpID09PSBlbnRpdHlJZFxuICAgICAgICA/IGAke2VudGl0eUlkfUxpc3RgXG4gICAgICAgIDogaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZzOiBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgZnNQbHVyYWw6IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShwbHVyYWxpemVkKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGNhbWVsOiBpbmZsZWN0aW9uLmNhbWVsaXplKGVudGl0eUlkLCB0cnVlKSxcbiAgICAgIGNhbWVsUGx1cmFsOiBpbmZsZWN0aW9uLmNhbWVsaXplKHBsdXJhbGl6ZWQsIHRydWUpLFxuICAgICAgY2FwaXRhbDogZW50aXR5SWQsXG4gICAgICBjYXBpdGFsUGx1cmFsOiBwbHVyYWxpemVkLFxuICAgICAgdXBwZXI6IGVudGl0eUlkLnRvVXBwZXJDYXNlKCksXG4gICAgICBjb25zdGFudDogaW5mbGVjdGlvbi51bmRlcnNjb3JlKGVudGl0eUlkKS50b1VwcGVyQ2FzZSgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW50aXR5SWTripQgTW9kZWzsnYQg7KCc7Jm47ZWcIFBhc2NhbENhc2Ug7J2066aE7J6F64uI64ukLiAoZXguIFwiVXNlclwiKVxuICAgKiBAcGFyYW0gZmlsZVBhdGhcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldEVudGl0eUlkRnJvbVBhdGgoZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IHN0cmluZyB7XG4gICAgY29uc3QgbWF0Y2hlZCA9IGZpbGVQYXRoLm1hdGNoKC9hcHBsaWNhdGlvblxcLyguKylcXC8vKTtcbiAgICBhc3NlcnQobWF0Y2hlZD8uWzFdKTtcbiAgICByZXR1cm4gaW5mbGVjdGlvbi5jYW1lbGl6ZShtYXRjaGVkWzFdLnJlcGxhY2UoLy0vZywgXCJfXCIpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVnaXN0ZXJOb25FbnRpdHlUeXBlTW9kdWxlUGF0aHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdHlwZVBhdGhzUGF0dGVybnMgPSBbXG4gICAgICBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLnR5cGVzLnRzXCIpKSxcbiAgICAgIHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIHJ1bnRpbWVQYXRoKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZ2VuZXJhdGVkLnRzXCIpKSxcbiAgICBdO1xuICAgIGNvbnN0IHR5cGVQYXRocyA9IChcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHR5cGVQYXRoc1BhdHRlcm5zLm1hcCgocGF0dGVybikgPT4gZ2xvYkFzeW5jKHBhdHRlcm4pKSlcbiAgICApLmZsYXQoKTtcblxuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdHlwZVBhdGhzKSB7XG4gICAgICBjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5nZXRNb2R1bGVQYXRoRnJvbVR5cGVGaWxlUGF0aChmaWxlUGF0aCk7XG4gICAgICBjb25zdCBpbXBvcnRlZE1lbWJlcnMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzPHVua25vd24+KGZpbGVQYXRoKTtcbiAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIGltcG9ydGVkTWVtYmVycykge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiB6LlpvZFR5cGUpIHtcbiAgICAgICAgICB0aGlzLnNldE1vZHVsZVBhdGgobmFtZSwgbW9kdWxlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE1vZHVsZVBhdGhGcm9tVHlwZUZpbGVQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gZmlsZVBhdGgucmVwbGFjZUFsbChcIlxcXFxcIiwgXCIvXCIpO1xuICAgIGNvbnN0IG1hdGNoZWQgPSBub3JtYWxpemVkUGF0aC5tYXRjaCgvXFwvKD86c3JjfGRpc3QpXFwvYXBwbGljYXRpb25cXC8oLispXFwuKD86dHN8anMpJC8pO1xuXG4gICAgaWYgKCFtYXRjaGVkPy5bMV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7YOA7J6FIO2MjOydvOydmCDrqqjrk4gg6rK966Gc66W8IOqzhOyCsO2VoCDsiJgg7JeG7Iq164uI64ukOiAke2ZpbGVQYXRofWApO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVkWzFdO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBFbnRpdHlNYW5hZ2VyID0gbmV3IEVudGl0eU1hbmFnZXJDbGFzcygpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O2NBUXVDO2FBT2Y7bUJBRXlCO2lCQUNFO2tCQUVEO0NBWTVDLHFCQUFOLE1BQXlCO0VBQ3ZCLEFBQVEsV0FBZ0MsSUFBSSxLQUFLO0VBQ2pELEFBQU8sY0FBbUMsSUFBSSxLQUFLO0VBQ25ELEFBQVEsYUFBcUMsSUFBSSxLQUFLO0VBQ3RELEFBQU8sZUFBd0I7RUFHL0IsTUFBTSxTQUFTLElBQWEsT0FBTztBQUNqQyxPQUFJLEtBQUssY0FBYztBQUNyQjs7R0FFRixNQUFNLGNBQWMsS0FBSyxLQUFLLE9BQU8sYUFBYSxvQ0FBb0M7QUFFdEYsY0FBVyxNQUFNLFFBQVEsS0FBSyxLQUFLLFFBQVEsWUFBWSxDQUFDLEVBQUU7SUFDeEQsTUFBTSxPQUFPLEtBQUssT0FBTyxNQUFNLFNBQVMsS0FBSyxFQUFFLFVBQVUsQ0FBQztJQUcxRCxNQUFNLFFBQVEsS0FBSyxlQUFlLEtBQUs7QUFDdkMsUUFBSSxPQUFPO0tBQ1QsTUFBTSxlQUFlLEtBQUssU0FBUyxPQUFPLGFBQWEsS0FBSztLQUM1RCxNQUFNLGVBQWUsY0FBYyxNQUFNO0FBQ3pDLGFBQVEsTUFDTixNQUFNLElBQUksK0JBQStCLGFBQWEsSUFBSSxNQUFNLE9BQU8sYUFBYSxHQUFHLENBQ3hGOztBQUdILFVBQU0sS0FBSyxTQUFTLE1BQU0sRUFBRSxxQ0FBcUMsTUFBTSxDQUFDOztBQUcxRSxTQUFNLEtBQUssa0NBQWtDO0FBQzdDLFNBQU0sS0FBSyw0Q0FBNEM7QUFFdkQsUUFBSyxlQUFlOztFQUd0QixlQUFlLE1BQWU7R0FDNUIsTUFBTSxTQUFTLGlCQUFpQixVQUFVLEtBQUs7QUFDL0MsVUFBTyxPQUFPLFVBQVUsT0FBTyxPQUFPOztFQUd4QyxNQUFNLE9BQU8sV0FBb0IsT0FBTztBQUN0QyxRQUFLLFNBQVMsT0FBTztBQUNyQixRQUFLLFlBQVksT0FBTztBQUN4QixRQUFL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
|
|
239
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW1hbmFnZXIuanMiLCJuYW1lcyI6WyJ6IiwiZW50aXR5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VudGl0eS9lbnRpdHktbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IGdsb2IsIHJlYWRGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHsgcHJldHRpZnlFcnJvciwgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7XG4gIEVudGl0eUpzb25TY2hlbWEsXG4gIGlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlLFxuICBpc1NlYXJjaFRleHRQcm9wLFxuICBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gIFNvbmFtdUZpbGVTY2hlbWEsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlJbmRleCwgdHlwZSBFbnRpdHlKc29uIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnbG9iQXN5bmMgfSBmcm9tIFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGltcG9ydE1lbWJlcnMgfSBmcm9tIFwiLi4vdXRpbHMvZXNtLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyBydW50aW1lUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eSB9IGZyb20gXCIuL2VudGl0eVwiO1xuXG5leHBvcnQgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCA9IFJlY29yZDxcbiAgXCJmc1wiIHwgXCJmc1BsdXJhbFwiIHwgXCJjYW1lbFwiIHwgXCJjYW1lbFBsdXJhbFwiIHwgXCJjYXBpdGFsXCIgfCBcImNhcGl0YWxQbHVyYWxcIiB8IFwidXBwZXJcIiB8IFwiY29uc3RhbnRcIixcbiAgc3RyaW5nXG4+O1xuZXhwb3J0IHR5cGUgVGFibGVTcGVjID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHVuaXF1ZUluZGV4ZXM6IEVudGl0eUluZGV4W107XG4gIGpzb25Db2x1bW5zOiBzdHJpbmdbXTtcbn07XG5jbGFzcyBFbnRpdHlNYW5hZ2VyQ2xhc3Mge1xuICBwcml2YXRlIGVudGl0aWVzOiBNYXA8c3RyaW5nLCBFbnRpdHk+ID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgbW9kdWxlUGF0aHM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgdGFibGVTcGVjczogTWFwPHN0cmluZywgVGFibGVTcGVjPiA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGlzQXV0b2xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIOqyveuhnCDsoITri6zrsJvslYQg66qo65OgIGVudGl0eS5qc29uIO2MjOydvCDroZzrk5xcbiAgYXN5bmMgYXV0b2xvYWQoXzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuaXNBdXRvbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhdGhQYXR0ZXJuID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCIvc3JjL2FwcGxpY2F0aW9uLyoqLyouZW50aXR5Lmpzb25cIik7XG5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGZpbGUgb2YgZ2xvYihwYXRoLnJlc29sdmUocGF0aFBhdHRlcm4pKSkge1xuICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoKGF3YWl0IHJlYWRGaWxlKGZpbGUpKS50b1N0cmluZygpKTtcblxuICAgICAgLy8gZW50aXR5Lmpzb24g7Iqk7YKk66eIIOqygOymnVxuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLnNjaGVtYVZhbGlkYXRlKGpzb24pO1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoU29uYW11LmFwaVJvb3RQYXRoLCBmaWxlKTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gcHJldHRpZnlFcnJvcihlcnJvcik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgY2hhbGsucmVkKGBJbnZhbGlkIGVudGl0eS5qc29uIHNjaGVtYTogJHtyZWxhdGl2ZVBhdGh9XFxuJHtjaGFsay55ZWxsb3coZXJyb3JNZXNzYWdlKX1gKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5yZWdpc3Rlcihqc29uLCB7IGRlZmVyU2VhcmNoVGV4dEpzb25Tb3VyY2VWYWxpZGF0aW9uOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJOb25FbnRpdHlUeXBlTW9kdWxlUGF0aHMoKTtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlQWxsUmVnaXN0ZXJlZFNlYXJjaFRleHRKc29uU291cmNlcygpO1xuXG4gICAgdGhpcy5pc0F1dG9sb2FkZWQgPSB0cnVlO1xuICB9XG5cbiAgc2NoZW1hVmFsaWRhdGUoanNvbjogdW5rbm93bikge1xuICAgIGNvbnN0IHJlc3VsdCA9IEVudGl0eUpzb25TY2hlbWEuc2FmZVBhcnNlKGpzb24pO1xuICAgIHJldHVybiByZXN1bHQuc3VjY2VzcyA/IG51bGwgOiByZXN1bHQuZXJyb3I7XG4gIH1cblxuICBhc3luYyByZWxvYWQoZG9TaWxlbnQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuZW50aXRpZXMuY2xlYXIoKTtcbiAgICB0aGlzLm1vZHVsZVBhdGhzLmNsZWFyKCk7XG4gICAgdGhpcy50YWJsZVNwZWNzLmNsZWFyKCk7XG4gICAgdGhpcy5pc0F1dG9sb2FkZWQgPSBmYWxzZTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmF1dG9sb2FkKGRvU2lsZW50KTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyKFxuICAgIGpzb246IEVudGl0eUpzb24sXG4gICAgb3B0aW9uczogeyBkZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbj86IGJvb2xlYW4gfSA9IHt9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IEVudGl0eSB9ID0gYXdhaXQgaW1wb3J0KFwiLi9lbnRpdHlcIik7XG4gICAgY29uc3QgZW50aXR5ID0gbmV3IEVudGl0eShqc29uKTtcbiAgICBhd2FpdCBlbnRpdHkucmVnaXN0ZXJNb2R1bGVQYXRocygpO1xuICAgIGlmICghb3B0aW9ucy5kZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZVNlYXJjaFRleHRKc29uU291cmNlcyhlbnRpdHkpO1xuICAgIH1cbiAgICBlbnRpdHkucmVnaXN0ZXJUYWJsZVNwZWNzKCk7XG4gICAgdGhpcy5lbnRpdGllcy5zZXQoanNvbi5pZCwgZW50aXR5KTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQWxsUmVnaXN0ZXJlZFNlYXJjaFRleHRKc29uU291cmNlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiB0aGlzLmVudGl0aWVzLnZhbHVlcygpKSB7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlU2VhcmNoVGV4dEpzb25Tb3VyY2VzKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVNlYXJjaFRleHRKc29uU291cmNlcyhlbnRpdHk6IEVudGl0eSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByb3BzQnlOYW1lID0gbmV3IE1hcChlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiBbcHJvcC5uYW1lLCBwcm9wXSkpO1xuXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIGVudGl0eS5wcm9wcykge1xuICAgICAgaWYgKCFpc1NlYXJjaFRleHRQcm9wKHByb3ApKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBwcm9wLnNvdXJjZUNvbHVtbnMpIHtcbiAgICAgICAgY29uc3Qgc291cmNlUHJvcCA9IHByb3BzQnlOYW1lLmdldChzb3VyY2UubmFtZSk7XG4gICAgICAgIGlmICghc291cmNlUHJvcCB8fCBzb3VyY2VQcm9wLnR5cGUgIT09IFwianNvblwiKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB6b2RUeXBlID0gYXdhaXQgdGhpcy5yZXNvbHZlU2VhcmNoVGV4dEpzb25Tb3VyY2VUeXBlKGVudGl0eSwgc291cmNlUHJvcC5pZCk7XG4gICAgICAgIGlmICghem9kVHlwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBzZWFyY2hUZXh0IHNvdXJjZSBcIiR7c291cmNlLm5hbWV9XCLsnZgganNvbiDtg4DsnoUgXCIke3NvdXJjZVByb3AuaWR9XCLsnYQo66W8KSDroZzrk5ztlaAg7IiYIOyXhuyKteuLiOuLpC5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlKHpvZFR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYHNlYXJjaFRleHQgc291cmNlIFwiJHtzb3VyY2UubmFtZX1cIuydmCBqc29uIO2DgOyehSBcIiR7c291cmNlUHJvcC5pZH1cIuydgCjripQpIHVud3JhcCDtm4Qgei5hcnJheSh6LnN0cmluZygpKSDsnbTslrTslbwg7ZWp64uI64ukLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVNlYXJjaFRleHRKc29uU291cmNlVHlwZShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0eXBlSWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx6LlpvZFR5cGVBbnkgfCBudWxsPiB7XG4gICAgY29uc3QgbG9jYWxUeXBlID0gZW50aXR5LnR5cGVzW3R5cGVJZF07XG4gICAgaWYgKGxvY2FsVHlwZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgcmV0dXJuIGxvY2FsVHlwZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlZ2lzdGVyZWRFbnRpdHkgb2YgdGhpcy5lbnRpdGllcy52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgcmVnaXN0ZXJlZFR5cGUgPSByZWdpc3RlcmVkRW50aXR5LnR5cGVzW3R5cGVJZF07XG4gICAgICBpZiAocmVnaXN0ZXJlZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRUeXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlSWQgPT09IFwiU29uYW11RmlsZVwiKSB7XG4gICAgICByZXR1cm4gU29uYW11RmlsZVNjaGVtYTtcbiAgICB9XG4gICAgaWYgKHR5cGVJZCA9PT0gXCJTb25hbXVGaWxlW11cIikge1xuICAgICAgcmV0dXJuIFNvbmFtdUZpbGVBcnJheVNjaGVtYTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5tb2R1bGVQYXRocy5nZXQodHlwZUlkKTtcbiAgICBpZiAoIW1vZHVsZVBhdGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZHVsZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgICAgcnVudGltZVBhdGgoYGRpc3QvYXBwbGljYXRpb24vJHttb2R1bGVQYXRofS5qc2ApLFxuICAgICk7XG4gICAgY29uc3QgaW1wb3J0ZWRNZW1iZXJzID0gYXdhaXQgaW1wb3J0TWVtYmVyczx1bmtub3duPihtb2R1bGVGaWxlUGF0aCk7XG4gICAgY29uc3QgbWF0Y2hlZCA9IGltcG9ydGVkTWVtYmVycy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gdHlwZUlkKTtcbiAgICBpZiAoIW1hdGNoZWQgfHwgIShtYXRjaGVkLnZhbHVlIGluc3RhbmNlb2Ygei5ab2RUeXBlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWQudmFsdWU7XG4gIH1cblxuICBnZXQoZW50aXR5SWQ6IHN0cmluZyk6IEVudGl0eSB7XG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5lbnRpdGllcy5nZXQoZW50aXR5SWQpO1xuICAgIGlmIChlbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIEVudGl0eSDsmpTssq0gJHtlbnRpdHlJZH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgZ2V0QnlUYWJsZSh0YWJsZTogc3RyaW5nKTogRW50aXR5IHtcbiAgICBjb25zdCBlbnRpdHkgPSBBcnJheS5mcm9tKHRoaXMuZW50aXRpZXMudmFsdWVzKCkpLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5LnRhYmxlID09PSB0YWJsZSk7XG4gICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgRW50aXR5IOyalOyyrSAke3RhYmxlfWApO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBleGlzdHMoZW50aXR5SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXRpZXMuZ2V0KGVudGl0eUlkKTtcbiAgICByZXR1cm4gZW50aXR5ICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRBbGxJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKEVudGl0eU1hbmFnZXIuZW50aXRpZXMua2V5cygpKS50b1NvcnRlZCgpO1xuICB9XG5cbiAgZ2V0QWxsRW50aXRpZXMoKTogRW50aXR5W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50aXRpZXMudmFsdWVzKCkpO1xuICB9XG5cbiAgZ2V0QWxsUGFyZW50SWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxJZHMoKS5maWx0ZXIoKGVudGl0eUlkKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmdldChlbnRpdHlJZCk7XG4gICAgICByZXR1cm4gZW50aXR5LnBhcmVudElkID09PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDaGlsZHJlbklkcyhwYXJlbnRJZDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbElkcygpLmZpbHRlcigoZW50aXR5SWQpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZ2V0KGVudGl0eUlkKTtcbiAgICAgIHJldHVybiBlbnRpdHkucGFyZW50SWQgPT09IHBhcmVudElkO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0TW9kdWxlUGF0aChrZXk6IHN0cmluZywgbW9kdWxlUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gY29uc29sZS5kZWJ1ZyhjaGFsay5jeWFuKGBzZXRNb2R1bGVQYXRoIDo6ICR7a2V5fSA6OiAke21vZHVsZVBhdGh9YCkpO1xuICAgIHRoaXMubW9kdWxlUGF0aHMuc2V0KGtleSwgbW9kdWxlUGF0aCk7XG4gIH1cblxuICBnZXRNb2R1bGVQYXRoKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5tb2R1bGVQYXRocy5nZXQoa2V5KTtcbiAgICBpZiAobW9kdWxlUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQg66qo65OIIO2MqOyKpCDsmpTssq0gJHtrZXl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZHVsZVBhdGg7XG4gIH1cblxuICBzZXRUYWJsZVNwZWModGFibGVTcGVjOiBUYWJsZVNwZWMpIHtcbiAgICB0aGlzLnRhYmxlU3BlY3Muc2V0KHRhYmxlU3BlYy5uYW1lLCB0YWJsZVNwZWMpO1xuICB9XG5cbiAgZ2V0VGFibGVTcGVjKGtleTogc3RyaW5nKTogVGFibGVTcGVjIHtcbiAgICBjb25zdCB0YWJsZVNwZWMgPSB0aGlzLnRhYmxlU3BlY3MuZ2V0KGtleSk7XG4gICAgaWYgKHRhYmxlU3BlYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQg7YWM7J2067iUIOyKpO2OmSDsmpTssq0gJHtrZXl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlU3BlYztcbiAgfVxuXG4gIGdldE5hbWVzRnJvbUlkKGVudGl0eUlkOiBzdHJpbmcpOiBFbnRpdHlOYW1lc1JlY29yZCB7XG4gICAgLy8gZW50aXR5SWTqsIAg64uo67O17IiYIOuPme2YlSDri6jslrTsnbgg6rK97JqwIExpc3Qg67aZ7Jes7IScIOyDneyEsVxuICAgIGNvbnN0IHBsdXJhbGl6ZWQgPVxuICAgICAgaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpID09PSBlbnRpdHlJZFxuICAgICAgICA/IGAke2VudGl0eUlkfUxpc3RgXG4gICAgICAgIDogaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZzOiBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgZnNQbHVyYWw6IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShwbHVyYWxpemVkKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGNhbWVsOiBpbmZsZWN0aW9uLmNhbWVsaXplKGVudGl0eUlkLCB0cnVlKSxcbiAgICAgIGNhbWVsUGx1cmFsOiBpbmZsZWN0aW9uLmNhbWVsaXplKHBsdXJhbGl6ZWQsIHRydWUpLFxuICAgICAgY2FwaXRhbDogZW50aXR5SWQsXG4gICAgICBjYXBpdGFsUGx1cmFsOiBwbHVyYWxpemVkLFxuICAgICAgdXBwZXI6IGVudGl0eUlkLnRvVXBwZXJDYXNlKCksXG4gICAgICBjb25zdGFudDogaW5mbGVjdGlvbi51bmRlcnNjb3JlKGVudGl0eUlkKS50b1VwcGVyQ2FzZSgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW50aXR5SWTripQgTW9kZWzsnYQg7KCc7Jm47ZWcIFBhc2NhbENhc2Ug7J2066aE7J6F64uI64ukLiAoZXguIFwiVXNlclwiKVxuICAgKiBAcGFyYW0gZmlsZVBhdGhcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldEVudGl0eUlkRnJvbVBhdGgoZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IHN0cmluZyB7XG4gICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKTtcbiAgICBjb25zdCBzdXBwb3J0ZWRTdWZmaXhlcyA9IFtcIi5tb2RlbC50c1wiLCBcIi5tb2RlbC5qc1wiLCBcIi5lbnRpdHkuanNvblwiLCBcIi5mcmFtZS50c1wiLCBcIi5mcmFtZS5qc1wiXTtcbiAgICBjb25zdCBtYXRjaGVkU3VmZml4ID0gc3VwcG9ydGVkU3VmZml4ZXMuZmluZCgoc3VmZml4KSA9PiBmaWxlTmFtZS5lbmRzV2l0aChzdWZmaXgpKTtcblxuICAgIGFzc2VydChtYXRjaGVkU3VmZml4LCBg7KeA7JuQ7ZWY7KeAIOyViuuKlCBlbnRpdHkg6rK966Gc7J6F64uI64ukOiAke2ZpbGVQYXRofWApO1xuXG4gICAgY29uc3QgZW50aXR5QmFzZU5hbWUgPSBmaWxlTmFtZS5zbGljZSgwLCAtbWF0Y2hlZFN1ZmZpeC5sZW5ndGgpO1xuICAgIGFzc2VydChlbnRpdHlCYXNlTmFtZS5sZW5ndGggPiAwLCBgRW50aXR5SWTrpbwg6rOE7IKw7ZWgIOyImCDsl4bripQg6rK966Gc7J6F64uI64ukOiAke2ZpbGVQYXRofWApO1xuXG4gICAgcmV0dXJuIGluZmxlY3Rpb24uY2FtZWxpemUoZW50aXR5QmFzZU5hbWUucmVwbGFjZSgvLS9nLCBcIl9cIikpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWdpc3Rlck5vbkVudGl0eVR5cGVNb2R1bGVQYXRocygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0eXBlUGF0aHNQYXR0ZXJucyA9IFtcbiAgICAgIHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIHJ1bnRpbWVQYXRoKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoudHlwZXMudHNcIikpLFxuICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi5nZW5lcmF0ZWQudHNcIikpLFxuICAgIF07XG4gICAgY29uc3QgdHlwZVBhdGhzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodHlwZVBhdGhzUGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBnbG9iQXN5bmMocGF0dGVybikpKVxuICAgICkuZmxhdCgpO1xuXG4gICAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB0eXBlUGF0aHMpIHtcbiAgICAgIGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLmdldE1vZHVsZVBhdGhGcm9tVHlwZUZpbGVQYXRoKGZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8dW5rbm93bj4oZmlsZVBhdGgpO1xuICAgICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaW1wb3J0ZWRNZW1iZXJzKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgICAgIHRoaXMuc2V0TW9kdWxlUGF0aChuYW1lLCBtb2R1bGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kdWxlUGF0aEZyb21UeXBlRmlsZVBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBmaWxlUGF0aC5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIik7XG4gICAgY29uc3QgbWF0Y2hlZCA9IG5vcm1hbGl6ZWRQYXRoLm1hdGNoKC9cXC8oPzpzcmN8ZGlzdClcXC9hcHBsaWNhdGlvblxcLyguKylcXC4oPzp0c3xqcykkLyk7XG5cbiAgICBpZiAoIW1hdGNoZWQ/LlsxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7J287J2YIOuqqOuTiCDqsr3roZzrpbwg6rOE7IKw7ZWgIOyImCDsl4bsirXri4jri6Q6ICR7ZmlsZVBhdGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWRbMV07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVudGl0eU1hbmFnZXIgPSBuZXcgRW50aXR5TWFuYWdlckNsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Y0FRdUM7YUFPZjttQkFFeUI7aUJBQ0U7a0JBRUQ7Q0FZNUMscUJBQU4sTUFBeUI7RUFDdkIsQUFBUSxXQUFnQyxJQUFJLEtBQUs7RUFDakQsQUFBTyxjQUFtQyxJQUFJLEtBQUs7RUFDbkQsQUFBUSxhQUFxQyxJQUFJLEtBQUs7RUFDdEQsQUFBTyxlQUF3QjtFQUcvQixNQUFNLFNBQVMsSUFBYSxPQUFPO0FBQ2pDLE9BQUksS0FBSyxjQUFjO0FBQ3JCOztHQUVGLE1BQU0sY0FBYyxLQUFLLEtBQUssT0FBTyxhQUFhLG9DQUFvQztBQUV0RixjQUFXLE1BQU0sUUFBUSxLQUFLLEtBQUssUUFBUSxZQUFZLENBQUMsRUFBRTtJQUN4RCxNQUFNLE9BQU8sS0FBSyxPQUFPLE1BQU0sU0FBUyxLQUFLLEVBQUUsVUFBVSxDQUFDO0lBRzFELE1BQU0sUUFBUSxLQUFLLGVB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
|
package/dist/index.js
CHANGED
|
@@ -21,6 +21,8 @@ import { JoinClauseGroup, Puri, ResolvedPuri, WhereGroup, init_puri } from "./da
|
|
|
21
21
|
import { PuriTransactionWrapper, PuriWrapper, init_puri_wrapper } from "./database/puri-wrapper.js";
|
|
22
22
|
import { BaseModel, BaseModelClass, init_base_model } from "./database/base-model.js";
|
|
23
23
|
import { api, init_decorators, registeredApis, stream, transactional, upload } from "./api/decorators.js";
|
|
24
|
+
import { ingestAuditEvent } from "./auth/audit-log-ingestor.js";
|
|
25
|
+
import { sonamuAuditLog } from "./auth/audit-log/plugin.js";
|
|
24
26
|
import { generateBetterAuthEntities } from "./auth/auth-generator.js";
|
|
25
27
|
import { sonamuKnexAdapter } from "./auth/knex-adapter.js";
|
|
26
28
|
import { ADMIN_SCHEMA, admin } from "./auth/plugins/wrappers/admin.js";
|
|
@@ -84,5 +86,5 @@ init_model();
|
|
|
84
86
|
init_utils();
|
|
85
87
|
|
|
86
88
|
//#endregion
|
|
87
|
-
export { ADMIN_SCHEMA, ANONYMOUS_SCHEMA, API_KEY_SCHEMA, AlreadyProcessedException, ApiParamType, BASE_FIELD_MAPPINGS, BUILT_IN_TYPE_IDS, BadRequestException, BaseFrameClass, BaseModel, BaseModelClass, CachePresets, CompressPresets, DB, DBClass, DuplicateRowException, Entity, EntityJsonSchema, EntityManager, FUZZY_OPERATORS, FixtureManager, FixtureManagerClass, GenerateOptions, InternalServerErrorException, JWT_SCHEMA, JoinClauseGroup, KnownOpclassValues, Migrator, Naite, NaiteClass, NaiteQuery, NaiteReporter, NormalPropSchema, NotFoundException, ORGANIZATION_SCHEMA, PASSKEY_SCHEMA, PHONE_NUMBER_SCHEMA, PathAndCode, PostgreSQLSchemaReader, Puri, PuriTransactionWrapper, PuriWrapper, RelationPropSchema, RenderingNode, ResolvedPuri, SSO_SCHEMA, ServiceUnavailableException, SoException, Sonamu, SonamuFileArraySchema, SonamuFileSchema, SonamuQueryMode, SonamuSemanticParams, TWO_FACTOR_SCHEMA, TargetNotFoundException, Template, TemplateKey, TemplateManager, TemplateManagerClass, TemplateOptions, USERNAME_SCHEMA, UnauthorizedException, UpsertBuilder, WhereGroup, ZodStringFormat, admin, anonymous, api, apiKey, applyCacheHeaders, asArray, assertDefined, assertExists, assertNotNull, betterAuthV1, buildCacheControl, cache, convertFastifyHeadersToStandard, createMockSSEFactory, createSSEFactory, defaultOperatorByPropType, defineConfig, differenceWith, exhaustive, findApiRootPath, findAppRootPath, generateAlterCode, generateBetterAuthEntities, generateCreateCode, getAlterIndexesTo, getDescription, getEnumDefValues, getEnumValues, getMigrationSetFromEntity, getSubsetFields, intersectionBy, isBelongsToOneRelationProp, isBigIntegerArrayProp, isBigIntegerProp, isBigIntegerSingleProp, isBooleanArrayProp, isBooleanProp, isBooleanSingleProp, isCompressDisabled, isCustomJoinClause, isDaemonServer, isDateArrayProp, isDateProp, isDateSingleProp, isDevelopment, isEnumArrayProp, isEnumDefWithCone, isEnumProp, isEnumSingleProp, isHasManyRelationProp, isHotReloadServer, isInDocker, isIntegerArrayProp, isIntegerProp, isIntegerSingleProp, isInternalSubsetField, isJsonProp, isKnexError, isLocal, isManyToManyRelationProp, isNumberArrayProp, isNumberProp, isNumberSingleProp, isNumericArrayProp, isNumericProp, isNumericSingleProp, isOneToOneRelationProp, isProduction, isRefField, isRelationProp, isRemote, isSearchTextJsonSourceZodType, isSearchTextProp, isSoException, isStaging, isStringArrayProp, isStringProp, isStringSingleProp, isSubsetDefWithCone, isTest, isTsVectorProp, isUuidArrayProp, isUuidProp, isUuidSingleProp, isVectorArrayProp, isVectorProp, isVectorSingleProp, isVirtualCodeProp, isVirtualProp, isVirtualQueryProp, jwt, loadConfig, merge, nonNullable, normalizeFilterQuery, normalizeSubsetField, objToMap, operatorsByPropType, organization, passkey, phoneNumber, registeredApis, setMigrationIndexDefaults, setupErrorHandler, sonamuKnexAdapter, sso, stream, toFastifyCompressOption, transactional, twoFactor, upload, username, validateSonamuFilters, withProp, withProps, workflow, zArrayable };
|
|
88
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
89
|
+
export { ADMIN_SCHEMA, ANONYMOUS_SCHEMA, API_KEY_SCHEMA, AlreadyProcessedException, ApiParamType, BASE_FIELD_MAPPINGS, BUILT_IN_TYPE_IDS, BadRequestException, BaseFrameClass, BaseModel, BaseModelClass, CachePresets, CompressPresets, DB, DBClass, DuplicateRowException, Entity, EntityJsonSchema, EntityManager, FUZZY_OPERATORS, FixtureManager, FixtureManagerClass, GenerateOptions, InternalServerErrorException, JWT_SCHEMA, JoinClauseGroup, KnownOpclassValues, Migrator, Naite, NaiteClass, NaiteQuery, NaiteReporter, NormalPropSchema, NotFoundException, ORGANIZATION_SCHEMA, PASSKEY_SCHEMA, PHONE_NUMBER_SCHEMA, PathAndCode, PostgreSQLSchemaReader, Puri, PuriTransactionWrapper, PuriWrapper, RelationPropSchema, RenderingNode, ResolvedPuri, SSO_SCHEMA, ServiceUnavailableException, SoException, Sonamu, SonamuFileArraySchema, SonamuFileSchema, SonamuQueryMode, SonamuSemanticParams, TWO_FACTOR_SCHEMA, TargetNotFoundException, Template, TemplateKey, TemplateManager, TemplateManagerClass, TemplateOptions, USERNAME_SCHEMA, UnauthorizedException, UpsertBuilder, WhereGroup, ZodStringFormat, admin, anonymous, api, apiKey, applyCacheHeaders, asArray, assertDefined, assertExists, assertNotNull, betterAuthV1, buildCacheControl, cache, convertFastifyHeadersToStandard, createMockSSEFactory, createSSEFactory, defaultOperatorByPropType, defineConfig, differenceWith, exhaustive, findApiRootPath, findAppRootPath, generateAlterCode, generateBetterAuthEntities, generateCreateCode, getAlterIndexesTo, getDescription, getEnumDefValues, getEnumValues, getMigrationSetFromEntity, getSubsetFields, ingestAuditEvent, intersectionBy, isBelongsToOneRelationProp, isBigIntegerArrayProp, isBigIntegerProp, isBigIntegerSingleProp, isBooleanArrayProp, isBooleanProp, isBooleanSingleProp, isCompressDisabled, isCustomJoinClause, isDaemonServer, isDateArrayProp, isDateProp, isDateSingleProp, isDevelopment, isEnumArrayProp, isEnumDefWithCone, isEnumProp, isEnumSingleProp, isHasManyRelationProp, isHotReloadServer, isInDocker, isIntegerArrayProp, isIntegerProp, isIntegerSingleProp, isInternalSubsetField, isJsonProp, isKnexError, isLocal, isManyToManyRelationProp, isNumberArrayProp, isNumberProp, isNumberSingleProp, isNumericArrayProp, isNumericProp, isNumericSingleProp, isOneToOneRelationProp, isProduction, isRefField, isRelationProp, isRemote, isSearchTextJsonSourceZodType, isSearchTextProp, isSoException, isStaging, isStringArrayProp, isStringProp, isStringSingleProp, isSubsetDefWithCone, isTest, isTsVectorProp, isUuidArrayProp, isUuidProp, isUuidSingleProp, isVectorArrayProp, isVectorProp, isVectorSingleProp, isVirtualCodeProp, isVirtualProp, isVirtualQueryProp, jwt, loadConfig, merge, nonNullable, normalizeFilterQuery, normalizeSubsetField, objToMap, operatorsByPropType, organization, passkey, phoneNumber, registeredApis, setMigrationIndexDefaults, setupErrorHandler, sonamuAuditLog, sonamuKnexAdapter, sso, stream, toFastifyCompressOption, transactional, twoFactor, upload, username, validateSonamuFilters, withProp, withProps, workflow, zArrayable };
|
|
90
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2FwaS9iYXNlLWZyYW1lXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hcGkvY29uZmlnXCI7XG5leHBvcnQgdHlwZSAqIGZyb20gXCIuL2FwaS9jb250ZXh0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hcGkvZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBpL3NvbmFtdVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXV0aFwiO1xuZXhwb3J0IHsgY2FjaGUgfSBmcm9tIFwiLi9jYWNoZS9kZWNvcmF0b3JcIjtcbmV4cG9ydCB0eXBlIHsgQ2FjaGVEZWNvcmF0b3JPcHRpb25zIH0gZnJvbSBcIi4vY2FjaGUvdHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NhY2hlLWNvbnRyb2wvY2FjaGUtY29udHJvbFwiO1xuZXhwb3J0IHR5cGUgKiBmcm9tIFwiLi9jYWNoZS1jb250cm9sL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wcmVzcy9jb21wcmVzc1wiO1xuZXhwb3J0IHR5cGUgKiBmcm9tIFwiLi9jb21wcmVzcy90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0YWJhc2UvYmFzZS1tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0YWJhc2UvYmFzZS1tb2RlbC50eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0YWJhc2UvZGJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL3B1cmlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL3B1cmkudHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpLXdyYXBwZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL3Vwc2VydC1idWlsZGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lbnRpdHkvZW50aXR5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4Y2VwdGlvbnMvZXJyb3ItaGFuZGxlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9maWx0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21pZ3JhdGlvbi9jb2RlLWdlbmVyYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL21pZ3JhdGlvbi9taWdyYXRpb24tc2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21pZ3JhdGlvbi9wb3N0Z3Jlc3FsLXNjaGVtYS1yZWFkZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21pZ3JhdGlvbi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbmFpdGUvbmFpdGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25haXRlL25haXRlLXJlcG9ydGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdHJlYW0vc3NlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90YXNrcy9kZWNvcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RlbXBsYXRlL3RlbXBsYXRlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZW1wbGF0ZS90ZW1wbGF0ZS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZXN0aW5nL2ZpeHR1cmUtbWFuYWdlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvdHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL21vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlscy90eXBlLXV0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuXG4vLyBleHBvcnQgKiBmcm9tIFwiLi9hcGkvY29kZS1jb252ZXJ0ZXJzXCI7XG4vLyBleHBvcnQgKiBmcm9tIFwiLi9zeW5jZXIvc3luY2VyXCI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0JBTTBDIn0=
|
|
@@ -15,8 +15,8 @@ export declare class BufferedFile extends BaseFile {
|
|
|
15
15
|
md5(): Promise<string>;
|
|
16
16
|
/**
|
|
17
17
|
* 파일을 디스크에 저장
|
|
18
|
+
* @param diskName 디스크 이름 ("fs" 또는 "s3")
|
|
18
19
|
* @param key 저장 경로 (예: 'uploads/avatar.png')
|
|
19
|
-
* @param diskName 디스크 이름 (기본: default disk)
|
|
20
20
|
* @returns 저장된 파일의 URL
|
|
21
21
|
*/
|
|
22
22
|
saveToDisk(diskName: DriverKey, key: string): Promise<string>;
|
|
@@ -28,8 +28,8 @@ var init_buffered_file = __esmMin((() => {
|
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* 파일을 디스크에 저장
|
|
31
|
+
* @param diskName 디스크 이름 ("fs" 또는 "s3")
|
|
31
32
|
* @param key 저장 경로 (예: 'uploads/avatar.png')
|
|
32
|
-
* @param diskName 디스크 이름 (기본: default disk)
|
|
33
33
|
* @returns 저장된 파일의 URL
|
|
34
34
|
*/
|
|
35
35
|
async saveToDisk(diskName, key) {
|
|
@@ -50,4 +50,4 @@ var init_buffered_file = __esmMin((() => {
|
|
|
50
50
|
//#endregion
|
|
51
51
|
init_buffered_file();
|
|
52
52
|
export { BufferedFile, init_buffered_file };
|
|
53
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyZWQtZmlsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS9idWZmZXJlZC1maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5cbmltcG9ydCB7IHR5cGUgTXVsdGlwYXJ0RmlsZSB9IGZyb20gXCJAZmFzdGlmeS9tdWx0aXBhcnRcIjtcblxuaW1wb3J0IHsgQmFzZUZpbGUgfSBmcm9tIFwiLi9iYXNlLWZpbGVcIjtcbmltcG9ydCB7IHR5cGUgRHJpdmVyS2V5IH0gZnJvbSBcIi4vZHJpdmVyc1wiO1xuXG4vKipcbiAqIEJ1ZmZlciDrqqjrk5zroZwg7JeF66Gc65Oc65CcIO2MjOydvFxuICog66mU66qo66as7JeQIOuhnOuTnOuQnCDsg4Htg5zroZwsIG1kNSDqs4TsgrDsnbTrgpgg7J2066+
|
|
53
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyZWQtZmlsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS9idWZmZXJlZC1maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5cbmltcG9ydCB7IHR5cGUgTXVsdGlwYXJ0RmlsZSB9IGZyb20gXCJAZmFzdGlmeS9tdWx0aXBhcnRcIjtcblxuaW1wb3J0IHsgQmFzZUZpbGUgfSBmcm9tIFwiLi9iYXNlLWZpbGVcIjtcbmltcG9ydCB7IHR5cGUgRHJpdmVyS2V5IH0gZnJvbSBcIi4vZHJpdmVyc1wiO1xuXG4vKipcbiAqIEJ1ZmZlciDrqqjrk5zroZwg7JeF66Gc65Oc65CcIO2MjOydvFxuICog66mU66qo66as7JeQIOuhnOuTnOuQnCDsg4Htg5zroZwsIG1kNSDqs4TsgrDsnbTrgpgg7J2066+47KeAIOyymOumrCDrk7Eg7Jyg7Jew7ZWcIOyekeyXheydtCDqsIDriqXtlanri4jri6QuXG4gKi9cbmV4cG9ydCBjbGFzcyBCdWZmZXJlZEZpbGUgZXh0ZW5kcyBCYXNlRmlsZSB7XG4gIHByaXZhdGUgX2ZpbGU6IE11bHRpcGFydEZpbGU7XG4gIHByaXZhdGUgX2J1ZmZlcjogQnVmZmVyO1xuXG4gIGNvbnN0cnVjdG9yKGZpbGU6IE11bHRpcGFydEZpbGUsIGJ1ZmZlcjogQnVmZmVyKSB7XG4gICAgc3VwZXIoe1xuICAgICAgZmlsZW5hbWU6IGZpbGUuZmlsZW5hbWUsXG4gICAgICBtaW1ldHlwZTogZmlsZS5taW1ldHlwZSxcbiAgICAgIHNpemU6IGJ1ZmZlci5sZW5ndGgsXG4gICAgfSk7XG4gICAgdGhpcy5fZmlsZSA9IGZpbGU7XG4gICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuICB9XG5cbiAgLyoqIO2MjOydvCBCdWZmZXIgKi9cbiAgZ2V0IGJ1ZmZlcigpOiBCdWZmZXIge1xuICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG4gIH1cblxuICAvKiogTUQ1IO2VtOyLnCDqs4TsgrAgKi9cbiAgYXN5bmMgbWQ1KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGNyZWF0ZUhhc2goXCJtZDVcIikudXBkYXRlKHRoaXMuX2J1ZmZlcikuZGlnZXN0KFwiaGV4XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIO2MjOydvOydhCDrlJTsiqTtgazsl5Ag7KCA7J6lXG4gICAqIEBwYXJhbSBkaXNrTmFtZSDrlJTsiqTtgawg7J2066aEIChcImZzXCIg65iQ64qUIFwiczNcIilcbiAgICogQHBhcmFtIGtleSDsoIDsnqUg6rK966GcICjsmIg6ICd1cGxvYWRzL2F2YXRhci5wbmcnKVxuICAgKiBAcmV0dXJucyDsoIDsnqXrkJwg7YyM7J287J2YIFVSTFxuICAgKi9cbiAgYXN5bmMgc2F2ZVRvRGlzayhkaXNrTmFtZTogRHJpdmVyS2V5LCBrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgLy8g7Iic7ZmYIOydmOyhtOyEsSDrsKnsp4Drpbwg7JyE7ZW0IOuPmeyggSBpbXBvcnRcbiAgICBjb25zdCB7IFNvbmFtdSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vYXBpL3NvbmFtdVwiKTtcbiAgICBjb25zdCBkaXNrID0gU29uYW11LnN0b3JhZ2UudXNlKGRpc2tOYW1lKTtcblxuICAgIGF3YWl0IGRpc2sucHV0KGtleSwgbmV3IFVpbnQ4QXJyYXkodGhpcy5fYnVmZmVyKSwge1xuICAgICAgY29udGVudFR5cGU6IHRoaXMubWltZXR5cGUsXG4gICAgfSk7XG5cbiAgICB0aGlzLl91cmwgPSBhd2FpdCBkaXNrLmdldFVybChrZXkpO1xuICAgIHRoaXMuX3NpZ25lZFVybCA9IGF3YWl0IGRpc2suZ2V0U2lnbmVkVXJsKGtleSk7XG5cbiAgICAvLyBzaWduZWQgdXJs7J2AIOunjOujjCDsi5zqsITsnbQg7J6I6riwIOuVjOusuOyXkCwgdW5zaWduZWQgdXJs7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgLyoqIOybkOuzuCBNdWx0aXBhcnRGaWxlIOygkeq3vCAqL1xuICBnZXQgcmF3KCk6IE11bHRpcGFydEZpbGUge1xuICAgIHJldHVybiB0aGlzLl9maWxlO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7aUJBSXVDO0NBTzFCLGVBQWIsY0FBa0MsU0FBUztFQUN6QyxBQUFRO0VBQ1IsQUFBUTtFQUVSLFlBQVksTUFBcUIsUUFBZ0I7QUFDL0MsU0FBTTtJQUNKLFVBQVUsS0FBSztJQUNmLFVBQVUsS0FBSztJQUNmLE1BQU0sT0FBTztJQUNkLENBQUM7QUFDRixRQUFLLFFBQVE7QUFDYixRQUFLLFVBQVU7OztFQUlqQixJQUFJLFNBQWlCO0FBQ25CLFVBQU8sS0FBSzs7O0VBSWQsTUFBTSxNQUF1QjtBQUMzQixVQUFPLFdBQVcsTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsT0FBTyxNQUFNOzs7Ozs7OztFQVM3RCxNQUFNLFdBQVcsVUFBcUIsS0FBOEI7R0FFbEUsTUFBTSxFQUFFLFdBQVcsTUFBTSxPQUFPO0dBQ2hDLE1BQU0sT0FBTyxPQUFPLFFBQVEsSUFBSSxTQUFTO0FBRXpDLFNBQU0sS0FBSyxJQUFJLEtBQUssSUFBSSxXQUFXLEtBQUssUUFBUSxFQUFFLEVBQ2hELGFBQWEsS0FBSyxVQUNuQixDQUFDO0FBRUYsUUFBSyxPQUFPLE1BQU0sS0FBSyxPQUFPLElBQUk7QUFDbEMsUUFBSyxhQUFhLE1BQU0sS0FBSyxhQUFhLElBQUk7QUFHOUMsVUFBTyxLQUFLOzs7RUFJZCxJQUFJLE1BQXFCO0FBQ3ZCLFVBQU8sS0FBSyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer.ts"],"names":[],"mappings":"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"}
|