sonamu 0.8.13 → 0.8.14

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.
Files changed (96) hide show
  1. package/dist/api/sonamu.d.ts.map +1 -1
  2. package/dist/api/sonamu.js +2 -3
  3. package/dist/auth/auth-generator.d.ts +8 -0
  4. package/dist/auth/auth-generator.d.ts.map +1 -1
  5. package/dist/auth/auth-generator.js +33 -1
  6. package/dist/auth/better-auth-entities.d.ts.map +1 -1
  7. package/dist/auth/better-auth-entities.js +12 -2
  8. package/dist/bin/cli.js +18 -3
  9. package/dist/cone/cone-generator.js +10 -4
  10. package/dist/database/knex.d.ts.map +1 -1
  11. package/dist/database/knex.js +64 -2
  12. package/dist/database/puri.d.ts +9 -1
  13. package/dist/database/puri.d.ts.map +1 -1
  14. package/dist/database/puri.js +42 -1
  15. package/dist/database/puri.types.d.ts +2 -0
  16. package/dist/database/puri.types.d.ts.map +1 -1
  17. package/dist/database/puri.types.js +6 -2
  18. package/dist/entity/entity-manager.d.ts +149 -1
  19. package/dist/entity/entity-manager.d.ts.map +1 -1
  20. package/dist/entity/entity-manager.js +68 -4
  21. package/dist/migration/__tests__/code-generation.search-text.test.js +435 -0
  22. package/dist/migration/code-generation.d.ts.map +1 -1
  23. package/dist/migration/code-generation.js +696 -32
  24. package/dist/migration/migration-set.js +3 -1
  25. package/dist/migration/postgresql-schema-reader.d.ts +16 -2
  26. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  27. package/dist/migration/postgresql-schema-reader.js +281 -7
  28. package/dist/stream/sse.js +5 -3
  29. package/dist/template/__tests__/generated.template.search-text.test.js +99 -0
  30. package/dist/template/generated.template.test-d.js +24 -0
  31. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  32. package/dist/template/implementations/generated.template.js +2 -2
  33. package/dist/template/implementations/init_types.template.d.ts.map +1 -1
  34. package/dist/template/implementations/init_types.template.js +11 -3
  35. package/dist/template/zod-converter.d.ts.map +1 -1
  36. package/dist/template/zod-converter.js +6 -2
  37. package/dist/testing/dev-test-routes.d.ts.map +1 -1
  38. package/dist/testing/dev-test-routes.js +5 -3
  39. package/dist/testing/fixture-generator.d.ts +13 -0
  40. package/dist/testing/fixture-generator.d.ts.map +1 -1
  41. package/dist/testing/fixture-generator.js +105 -8
  42. package/dist/testing/fixture-manager.d.ts.map +1 -1
  43. package/dist/testing/fixture-manager.js +19 -2
  44. package/dist/types/__tests__/entity-json-schema-search-text.test.js +256 -0
  45. package/dist/types/types.d.ts +494 -1
  46. package/dist/types/types.d.ts.map +1 -1
  47. package/dist/types/types.js +117 -13
  48. package/dist/ui/api.d.ts.map +1 -1
  49. package/dist/ui/api.js +14 -2
  50. package/dist/ui/cdd-service.d.ts +16 -14
  51. package/dist/ui/cdd-service.d.ts.map +1 -1
  52. package/dist/ui/cdd-service.js +145 -37
  53. package/dist/ui/cdd-types.d.ts +60 -0
  54. package/dist/ui/cdd-types.d.ts.map +1 -0
  55. package/dist/ui/cdd-types.js +3 -0
  56. package/dist/ui-web/assets/index-D4XFBV-f.css +1 -0
  57. package/dist/ui-web/assets/{index-CQ_S40bD.js → index-D_19-Pi4.js} +87 -87
  58. package/dist/ui-web/index.html +2 -2
  59. package/package.json +7 -3
  60. package/src/api/sonamu.ts +1 -2
  61. package/src/auth/auth-generator.ts +38 -0
  62. package/src/auth/better-auth-entities.ts +18 -1
  63. package/src/bin/cli.ts +15 -1
  64. package/src/cone/cone-generator.ts +9 -3
  65. package/src/database/knex.ts +62 -4
  66. package/src/database/puri.ts +71 -0
  67. package/src/database/puri.types.ts +2 -0
  68. package/src/entity/entity-manager.ts +95 -3
  69. package/src/migration/__tests__/code-generation.search-text.test.ts +390 -0
  70. package/src/migration/code-generation.ts +848 -34
  71. package/src/migration/migration-set.ts +2 -0
  72. package/src/migration/postgresql-schema-reader.ts +366 -9
  73. package/src/skills/sonamu/auth-migration.md +80 -0
  74. package/src/skills/sonamu/cdd.md +148 -28
  75. package/src/skills/sonamu/cone.md +16 -0
  76. package/src/skills/sonamu/entity-relations.md +1 -1
  77. package/src/skills/sonamu/fixture-cli.md +4 -0
  78. package/src/skills/sonamu/frontend.md +65 -0
  79. package/src/skills/sonamu/migration.md +3 -1
  80. package/src/skills/sonamu/model.md +28 -0
  81. package/src/skills/sonamu/workflow.md +12 -5
  82. package/src/stream/sse.ts +4 -2
  83. package/src/template/__tests__/generated.template.search-text.test.ts +89 -0
  84. package/src/template/generated.template.test-d.ts +46 -0
  85. package/src/template/implementations/generated.template.ts +4 -1
  86. package/src/template/implementations/init_types.template.ts +20 -5
  87. package/src/template/zod-converter.ts +5 -0
  88. package/src/testing/dev-test-routes.ts +4 -2
  89. package/src/testing/fixture-generator.ts +157 -9
  90. package/src/testing/fixture-manager.ts +15 -1
  91. package/src/types/__tests__/entity-json-schema-search-text.test.ts +179 -0
  92. package/src/types/types.ts +168 -12
  93. package/src/ui/api.ts +24 -1
  94. package/src/ui/cdd-service.ts +195 -55
  95. package/src/ui/cdd-types.ts +73 -0
  96. package/dist/ui-web/assets/index-egkMxKos.css +0 -1
@@ -0,0 +1,99 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import { Sonamu } from "../../api/index.js";
3
+ import { EntityManager } from "../../entity/entity-manager.js";
4
+ import { Template__generated } from "../implementations/generated.template.js";
5
+ import { Template__init_types } from "../implementations/init_types.template.js";
6
+ import { propToZodType, propToZodTypeDef } from "../zod-converter.js";
7
+ const TEST_API_ROOT = "/Users/Nebuleto/Workspace/sonamu/modules/sonamu";
8
+ Sonamu.apiRootPath = TEST_API_ROOT;
9
+ let entitySeq = 0;
10
+ async function registerEntity() {
11
+ entitySeq += 1;
12
+ const entity = {
13
+ id: `GeneratedTemplateSearchText${entitySeq}`,
14
+ title: `GeneratedTemplateSearchText${entitySeq}`,
15
+ table: `generated_template_search_text_${entitySeq}`,
16
+ props: [
17
+ {
18
+ name: "id",
19
+ type: "integer"
20
+ },
21
+ {
22
+ name: "title",
23
+ type: "string"
24
+ },
25
+ {
26
+ name: "slug",
27
+ type: "string",
28
+ generated: {
29
+ type: "STORED",
30
+ expression: "title"
31
+ }
32
+ },
33
+ {
34
+ name: "search_text",
35
+ type: "searchText",
36
+ sourceColumns: [
37
+ {
38
+ name: "title",
39
+ caseInsensitive: true
40
+ }
41
+ ]
42
+ }
43
+ ],
44
+ indexes: [],
45
+ subsets: {
46
+ A: [
47
+ "id",
48
+ "title",
49
+ "slug",
50
+ "search_text"
51
+ ]
52
+ },
53
+ enums: {}
54
+ };
55
+ await EntityManager.register(entity, {
56
+ deferSearchTextJsonSourceValidation: true
57
+ });
58
+ return EntityManager.get(entity.id);
59
+ }
60
+ describe("Template__generated searchText", ()=>{
61
+ test("searchText를 문자열 스키마로 변환해야 한다", async ()=>{
62
+ const prop = {
63
+ name: "search_text",
64
+ type: "searchText",
65
+ sourceColumns: [
66
+ {
67
+ name: "title",
68
+ caseInsensitive: true
69
+ }
70
+ ]
71
+ };
72
+ const schema = await propToZodType(prop);
73
+ expect(propToZodTypeDef(prop, [])).toBe("search_text: z.string(),");
74
+ expect(schema.safeParse("fuzzy query").success).toBe(true);
75
+ expect(schema.safeParse(123).success).toBe(false);
76
+ });
77
+ test("searchText를 __generated__ 메타데이터에 포함하면서 기존 generated 키를 유지해야 한다", async ()=>{
78
+ const entity = await registerEntity();
79
+ const template = new Template__generated();
80
+ const source = template.getBaseSchemaSourceCode(entity).lines.join("\n");
81
+ expect(source).toContain("search_text: z.string(),");
82
+ expect(source).toContain('readonly __generated__: readonly ["slug", "search_text"],');
83
+ expect(source).toContain('readonly __hasDefault__: readonly ["id"],');
84
+ });
85
+ test("SaveParams write schema에서 generated/searchText 컬럼을 제외해야 한다", async ()=>{
86
+ const entity = await registerEntity();
87
+ const template = new Template__init_types();
88
+ template.getTargetAndPath = ()=>({
89
+ target: "",
90
+ path: ""
91
+ });
92
+ const { body } = template.render({
93
+ entityId: entity.id
94
+ });
95
+ expect(body).toContain(`export const ${entity.id}SaveParams = ${entity.id}BaseSchema.omit({ slug: true, search_text: true }).partial({ id: true });`);
96
+ });
97
+ });
98
+
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9fX3Rlc3RzX18vZ2VuZXJhdGVkLnRlbXBsYXRlLnNlYXJjaC10ZXh0LnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgdGVzdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZV9fZ2VuZXJhdGVkIH0gZnJvbSBcIi4uL2ltcGxlbWVudGF0aW9ucy9nZW5lcmF0ZWQudGVtcGxhdGVcIjtcbmltcG9ydCB7IFRlbXBsYXRlX19pbml0X3R5cGVzIH0gZnJvbSBcIi4uL2ltcGxlbWVudGF0aW9ucy9pbml0X3R5cGVzLnRlbXBsYXRlXCI7XG5pbXBvcnQgeyBwcm9wVG9ab2RUeXBlLCBwcm9wVG9ab2RUeXBlRGVmIH0gZnJvbSBcIi4uL3pvZC1jb252ZXJ0ZXJcIjtcblxuY29uc3QgVEVTVF9BUElfUk9PVCA9IFwiL1VzZXJzL05lYnVsZXRvL1dvcmtzcGFjZS9zb25hbXUvbW9kdWxlcy9zb25hbXVcIjtcblxuU29uYW11LmFwaVJvb3RQYXRoID0gVEVTVF9BUElfUk9PVDtcblxubGV0IGVudGl0eVNlcSA9IDA7XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyRW50aXR5KCkge1xuICBlbnRpdHlTZXEgKz0gMTtcblxuICBjb25zdCBlbnRpdHkgPSB7XG4gICAgaWQ6IGBHZW5lcmF0ZWRUZW1wbGF0ZVNlYXJjaFRleHQke2VudGl0eVNlcX1gLFxuICAgIHRpdGxlOiBgR2VuZXJhdGVkVGVtcGxhdGVTZWFyY2hUZXh0JHtlbnRpdHlTZXF9YCxcbiAgICB0YWJsZTogYGdlbmVyYXRlZF90ZW1wbGF0ZV9zZWFyY2hfdGV4dF8ke2VudGl0eVNlcX1gLFxuICAgIHByb3BzOiBbXG4gICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIgYXMgY29uc3QgfSxcbiAgICAgIHsgbmFtZTogXCJ0aXRsZVwiLCB0eXBlOiBcInN0cmluZ1wiIGFzIGNvbnN0IH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwic2x1Z1wiLFxuICAgICAgICB0eXBlOiBcInN0cmluZ1wiIGFzIGNvbnN0LFxuICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICB0eXBlOiBcIlNUT1JFRFwiIGFzIGNvbnN0LFxuICAgICAgICAgIGV4cHJlc3Npb246IFwidGl0bGVcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwic2VhcmNoX3RleHRcIixcbiAgICAgICAgdHlwZTogXCJzZWFyY2hUZXh0XCIgYXMgY29uc3QsXG4gICAgICAgIHNvdXJjZUNvbHVtbnM6IFt7IG5hbWU6IFwidGl0bGVcIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH1dLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGluZGV4ZXM6IFtdLFxuICAgIHN1YnNldHM6IHtcbiAgICAgIEE6IFtcImlkXCIsIFwidGl0bGVcIiwgXCJzbHVnXCIsIFwic2VhcmNoX3RleHRcIl0sXG4gICAgfSxcbiAgICBlbnVtczoge30sXG4gIH07XG5cbiAgYXdhaXQgRW50aXR5TWFuYWdlci5yZWdpc3RlcihlbnRpdHksIHtcbiAgICBkZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbjogdHJ1ZSxcbiAgfSk7XG5cbiAgcmV0dXJuIEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eS5pZCk7XG59XG5cbmRlc2NyaWJlKFwiVGVtcGxhdGVfX2dlbmVyYXRlZCBzZWFyY2hUZXh0XCIsICgpID0+IHtcbiAgdGVzdChcInNlYXJjaFRleHTrpbwg66y47J6Q7Je0IOyKpO2CpOuniOuhnCDrs4DtmZjtlbTslbwg7ZWc64ukXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm9wID0ge1xuICAgICAgbmFtZTogXCJzZWFyY2hfdGV4dFwiLFxuICAgICAgdHlwZTogXCJzZWFyY2hUZXh0XCIgYXMgY29uc3QsXG4gICAgICBzb3VyY2VDb2x1bW5zOiBbeyBuYW1lOiBcInRpdGxlXCIsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSB9XSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgcHJvcFRvWm9kVHlwZShwcm9wKTtcblxuICAgIGV4cGVjdChwcm9wVG9ab2RUeXBlRGVmKHByb3AsIFtdKSkudG9CZShcInNlYXJjaF90ZXh0OiB6LnN0cmluZygpLFwiKTtcbiAgICBleHBlY3Qoc2NoZW1hLnNhZmVQYXJzZShcImZ1enp5IHF1ZXJ5XCIpLnN1Y2Nlc3MpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHNjaGVtYS5zYWZlUGFyc2UoMTIzKS5zdWNjZXNzKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgdGVzdChcInNlYXJjaFRleHTrpbwgX19nZW5lcmF0ZWRfXyDrqZTtg4DrjbDsnbTthLDsl5Ag7Y+s7ZWo7ZWY66m07IScIOq4sOyhtCBnZW5lcmF0ZWQg7YKk66W8IOycoOyngO2VtOyVvCDtlZzri6RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVudGl0eSA9IGF3YWl0IHJlZ2lzdGVyRW50aXR5KCk7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGVfX2dlbmVyYXRlZCgpO1xuXG4gICAgY29uc3Qgc291cmNlID0gdGVtcGxhdGUuZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5KS5saW5lcy5qb2luKFwiXFxuXCIpO1xuXG4gICAgZXhwZWN0KHNvdXJjZSkudG9Db250YWluKFwic2VhcmNoX3RleHQ6IHouc3RyaW5nKCksXCIpO1xuICAgIGV4cGVjdChzb3VyY2UpLnRvQ29udGFpbigncmVhZG9ubHkgX19nZW5lcmF0ZWRfXzogcmVhZG9ubHkgW1wic2x1Z1wiLCBcInNlYXJjaF90ZXh0XCJdLCcpO1xuICAgIGV4cGVjdChzb3VyY2UpLnRvQ29udGFpbigncmVhZG9ubHkgX19oYXNEZWZhdWx0X186IHJlYWRvbmx5IFtcImlkXCJdLCcpO1xuICB9KTtcblxuICB0ZXN0KFwiU2F2ZVBhcmFtcyB3cml0ZSBzY2hlbWHsl5DshJwgZ2VuZXJhdGVkL3NlYXJjaFRleHQg7Lus65+87J2EIOygnOyZuO2VtOyVvCDtlZzri6RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVudGl0eSA9IGF3YWl0IHJlZ2lzdGVyRW50aXR5KCk7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGVfX2luaXRfdHlwZXMoKTtcbiAgICB0ZW1wbGF0ZS5nZXRUYXJnZXRBbmRQYXRoID0gKCkgPT4gKHsgdGFyZ2V0OiBcIlwiLCBwYXRoOiBcIlwiIH0pO1xuXG4gICAgY29uc3QgeyBib2R5IH0gPSB0ZW1wbGF0ZS5yZW5kZXIoeyBlbnRpdHlJZDogZW50aXR5LmlkIH0pO1xuXG4gICAgZXhwZWN0KGJvZHkpLnRvQ29udGFpbihcbiAgICAgIGBleHBvcnQgY29uc3QgJHtlbnRpdHkuaWR9U2F2ZVBhcmFtcyA9ICR7ZW50aXR5LmlkfUJhc2VTY2hlbWEub21pdCh7IHNsdWc6IHRydWUsIHNlYXJjaF90ZXh0OiB0cnVlIH0pLnBhcnRpYWwoeyBpZDogdHJ1ZSB9KTtgLFxuICAgICk7XG4gIH0pO1xufSk7XG4iXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJleHBlY3QiLCJ0ZXN0IiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsIlRlbXBsYXRlX19nZW5lcmF0ZWQiLCJUZW1wbGF0ZV9faW5pdF90eXBlcyIsInByb3BUb1pvZFR5cGUiLCJwcm9wVG9ab2RUeXBlRGVmIiwiVEVTVF9BUElfUk9PVCIsImFwaVJvb3RQYXRoIiwiZW50aXR5U2VxIiwicmVnaXN0ZXJFbnRpdHkiLCJlbnRpdHkiLCJpZCIsInRpdGxlIiwidGFibGUiLCJwcm9wcyIsIm5hbWUiLCJ0eXBlIiwiZ2VuZXJhdGVkIiwiZXhwcmVzc2lvbiIsInNvdXJjZUNvbHVtbnMiLCJjYXNlSW5zZW5zaXRpdmUiLCJpbmRleGVzIiwic3Vic2V0cyIsIkEiLCJlbnVtcyIsInJlZ2lzdGVyIiwiZGVmZXJTZWFyY2hUZXh0SnNvblNvdXJjZVZhbGlkYXRpb24iLCJnZXQiLCJwcm9wIiwic2NoZW1hIiwidG9CZSIsInNhZmVQYXJzZSIsInN1Y2Nlc3MiLCJ0ZW1wbGF0ZSIsInNvdXJjZSIsImdldEJhc2VTY2hlbWFTb3VyY2VDb2RlIiwibGluZXMiLCJqb2luIiwidG9Db250YWluIiwiZ2V0VGFyZ2V0QW5kUGF0aCIsInRhcmdldCIsInBhdGgiLCJib2R5IiwicmVuZGVyIiwiZW50aXR5SWQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFFBQVEsRUFBRUMsTUFBTSxFQUFFQyxJQUFJLFFBQVEsU0FBUztBQUNoRCxTQUFTQyxNQUFNLFFBQVEscUJBQVk7QUFDbkMsU0FBU0MsYUFBYSxRQUFRLGlDQUE4QjtBQUM1RCxTQUFTQyxtQkFBbUIsUUFBUSwyQ0FBd0M7QUFDNUUsU0FBU0Msb0JBQW9CLFFBQVEsNENBQXlDO0FBQzlFLFNBQVNDLGFBQWEsRUFBRUMsZ0JBQWdCLFFBQVEsc0JBQW1CO0FBRW5FLE1BQU1DLGdCQUFnQjtBQUV0Qk4sT0FBT08sV0FBVyxHQUFHRDtBQUVyQixJQUFJRSxZQUFZO0FBRWhCLGVBQWVDO0lBQ2JELGFBQWE7SUFFYixNQUFNRSxTQUFTO1FBQ2JDLElBQUksQ0FBQywyQkFBMkIsRUFBRUgsV0FBVztRQUM3Q0ksT0FBTyxDQUFDLDJCQUEyQixFQUFFSixXQUFXO1FBQ2hESyxPQUFPLENBQUMsK0JBQStCLEVBQUVMLFdBQVc7UUFDcERNLE9BQU87WUFDTDtnQkFBRUMsTUFBTTtnQkFBTUMsTUFBTTtZQUFtQjtZQUN2QztnQkFBRUQsTUFBTTtnQkFBU0MsTUFBTTtZQUFrQjtZQUN6QztnQkFDRUQsTUFBTTtnQkFDTkMsTUFBTTtnQkFDTkMsV0FBVztvQkFDVEQsTUFBTTtvQkFDTkUsWUFBWTtnQkFDZDtZQUNGO1lBQ0E7Z0JBQ0VILE1BQU07Z0JBQ05DLE1BQU07Z0JBQ05HLGVBQWU7b0JBQUM7d0JBQUVKLE1BQU07d0JBQVNLLGlCQUFpQjtvQkFBSztpQkFBRTtZQUMzRDtTQUNEO1FBQ0RDLFNBQVMsRUFBRTtRQUNYQyxTQUFTO1lBQ1BDLEdBQUc7Z0JBQUM7Z0JBQU07Z0JBQVM7Z0JBQVE7YUFBYztRQUMzQztRQUNBQyxPQUFPLENBQUM7SUFDVjtJQUVBLE1BQU12QixjQUFjd0IsUUFBUSxDQUFDZixRQUFRO1FBQ25DZ0IscUNBQXFDO0lBQ3ZDO0lBRUEsT0FBT3pCLGNBQWMwQixHQUFHLENBQUNqQixPQUFPQyxFQUFFO0FBQ3BDO0FBRUFkLFNBQVMsa0NBQWtDO0lBQ3pDRSxLQUFLLGdDQUFnQztRQUNuQyxNQUFNNkIsT0FBTztZQUNYYixNQUFNO1lBQ05DLE1BQU07WUFDTkcsZUFBZTtnQkFBQztvQkFBRUosTUFBTTtvQkFBU0ssaUJBQWlCO2dCQUFLO2FBQUU7UUFDM0Q7UUFFQSxNQUFNUyxTQUFTLE1BQU16QixjQUFjd0I7UUFFbkM5QixPQUFPTyxpQkFBaUJ1QixNQUFNLEVBQUUsR0FBR0UsSUFBSSxDQUFDO1FBQ3hDaEMsT0FBTytCLE9BQU9FLFNBQVMsQ0FBQyxlQUFlQyxPQUFPLEVBQUVGLElBQUksQ0FBQztRQUNyRGhDLE9BQU8rQixPQUFPRSxTQUFTLENBQUMsS0FBS0MsT0FBTyxFQUFFRixJQUFJLENBQUM7SUFDN0M7SUFFQS9CLEtBQUssa0VBQWtFO1FBQ3JFLE1BQU1XLFNBQVMsTUFBTUQ7UUFDckIsTUFBTXdCLFdBQVcsSUFBSS9CO1FBRXJCLE1BQU1nQyxTQUFTRCxTQUFTRSx1QkFBdUIsQ0FBQ3pCLFFBQVEwQixLQUFLLENBQUNDLElBQUksQ0FBQztRQUVuRXZDLE9BQU9vQyxRQUFRSSxTQUFTLENBQUM7UUFDekJ4QyxPQUFPb0MsUUFBUUksU0FBUyxDQUFDO1FBQ3pCeEMsT0FBT29DLFFBQVFJLFNBQVMsQ0FBQztJQUMzQjtJQUVBdkMsS0FBSyw4REFBOEQ7UUFDakUsTUFBTVcsU0FBUyxNQUFNRDtRQUNyQixNQUFNd0IsV0FBVyxJQUFJOUI7UUFDckI4QixTQUFTTSxnQkFBZ0IsR0FBRyxJQUFPLENBQUE7Z0JBQUVDLFFBQVE7Z0JBQUlDLE1BQU07WUFBRyxDQUFBO1FBRTFELE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdULFNBQVNVLE1BQU0sQ0FBQztZQUFFQyxVQUFVbEMsT0FBT0MsRUFBRTtRQUFDO1FBRXZEYixPQUFPNEMsTUFBTUosU0FBUyxDQUNwQixDQUFDLGFBQWEsRUFBRTVCLE9BQU9DLEVBQUUsQ0FBQyxhQUFhLEVBQUVELE9BQU9DLEVBQUUsQ0FBQyx5RUFBeUUsQ0FBQztJQUVqSTtBQUNGIn0=
@@ -0,0 +1,24 @@
1
+ import { describe, expectTypeOf, it } from "vitest";
2
+ import { z } from "zod";
3
+ describe("generated template __generated__ metadata", ()=>{
4
+ it("searchText와 기존 generated 컬럼을 write payload에서 제외해야 한다", ()=>{
5
+ expectTypeOf().toEqualTypeOf();
6
+ });
7
+ it("SaveParams와 동등한 write schema 추론도 generated/searchText 컬럼을 제외해야 한다", ()=>{
8
+ const GeneratedTemplateSaveParams = z.object({
9
+ id: z.number(),
10
+ title: z.string(),
11
+ code: z.string(),
12
+ slug: z.string(),
13
+ search_text: z.string()
14
+ }).omit({
15
+ slug: true,
16
+ search_text: true
17
+ }).partial({
18
+ id: true
19
+ });
20
+ expectTypeOf().toEqualTypeOf();
21
+ });
22
+ });
23
+
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS9nZW5lcmF0ZWQudGVtcGxhdGUudGVzdC1kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3RUeXBlT2YsIGl0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgSW5zZXJ0RGF0YSB9IGZyb20gXCIuLi9kYXRhYmFzZS9wdXJpLnR5cGVzXCI7XG5cbnR5cGUgR2VuZXJhdGVkVGVtcGxhdGVSb3cgPSB7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGNvZGU6IHN0cmluZztcbiAgc2x1Zzogc3RyaW5nO1xuICBzZWFyY2hfdGV4dDogc3RyaW5nO1xuICBfX2hhc0RlZmF1bHRfXzogcmVhZG9ubHkgW1wiaWRcIl07XG4gIF9fZ2VuZXJhdGVkX186IHJlYWRvbmx5IFtcInNsdWdcIiwgXCJzZWFyY2hfdGV4dFwiXTtcbn07XG5cbmRlc2NyaWJlKFwiZ2VuZXJhdGVkIHRlbXBsYXRlIF9fZ2VuZXJhdGVkX18gbWV0YWRhdGFcIiwgKCkgPT4ge1xuICBpdChcInNlYXJjaFRleHTsmYAg6riw7KG0IGdlbmVyYXRlZCDsu6zrn7zsnYQgd3JpdGUgcGF5bG9hZOyXkOyEnCDsoJzsmbjtlbTslbwg7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIFJlc3VsdCA9IEluc2VydERhdGE8R2VuZXJhdGVkVGVtcGxhdGVSb3c+O1xuXG4gICAgZXhwZWN0VHlwZU9mPFJlc3VsdD4oKS50b0VxdWFsVHlwZU9mPHtcbiAgICAgIGlkPzogbnVtYmVyO1xuICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgIGNvZGU6IHN0cmluZztcbiAgICB9PigpO1xuICB9KTtcblxuICBpdChcIlNhdmVQYXJhbXPsmYAg64+Z65Ox7ZWcIHdyaXRlIHNjaGVtYSDstpTroaDrj4QgZ2VuZXJhdGVkL3NlYXJjaFRleHQg7Lus65+87J2EIOygnOyZuO2VtOyVvCDtlZzri6RcIiwgKCkgPT4ge1xuICAgIGNvbnN0IEdlbmVyYXRlZFRlbXBsYXRlU2F2ZVBhcmFtcyA9IHpcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICBpZDogei5udW1iZXIoKSxcbiAgICAgICAgdGl0bGU6IHouc3RyaW5nKCksXG4gICAgICAgIGNvZGU6IHouc3RyaW5nKCksXG4gICAgICAgIHNsdWc6IHouc3RyaW5nKCksXG4gICAgICAgIHNlYXJjaF90ZXh0OiB6LnN0cmluZygpLFxuICAgICAgfSlcbiAgICAgIC5vbWl0KHsgc2x1ZzogdHJ1ZSwgc2VhcmNoX3RleHQ6IHRydWUgfSlcbiAgICAgIC5wYXJ0aWFsKHsgaWQ6IHRydWUgfSk7XG5cbiAgICB0eXBlIFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIEdlbmVyYXRlZFRlbXBsYXRlU2F2ZVBhcmFtcz47XG5cbiAgICBleHBlY3RUeXBlT2Y8UmVzdWx0PigpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgaWQ/OiBudW1iZXI7XG4gICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgY29kZTogc3RyaW5nO1xuICAgIH0+KCk7XG4gIH0pO1xufSk7XG4iXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJleHBlY3RUeXBlT2YiLCJpdCIsInoiLCJ0b0VxdWFsVHlwZU9mIiwiR2VuZXJhdGVkVGVtcGxhdGVTYXZlUGFyYW1zIiwib2JqZWN0IiwiaWQiLCJudW1iZXIiLCJ0aXRsZSIsInN0cmluZyIsImNvZGUiLCJzbHVnIiwic2VhcmNoX3RleHQiLCJvbWl0IiwicGFydGlhbCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsUUFBUSxFQUFFQyxZQUFZLEVBQUVDLEVBQUUsUUFBUSxTQUFTO0FBQ3BELFNBQVNDLENBQUMsUUFBUSxNQUFNO0FBYXhCSCxTQUFTLDZDQUE2QztJQUNwREUsR0FBRyx3REFBd0Q7UUFHekRELGVBQXVCRyxhQUFhO0lBS3RDO0lBRUFGLEdBQUcscUVBQXFFO1FBQ3RFLE1BQU1HLDhCQUE4QkYsRUFDakNHLE1BQU0sQ0FBQztZQUNOQyxJQUFJSixFQUFFSyxNQUFNO1lBQ1pDLE9BQU9OLEVBQUVPLE1BQU07WUFDZkMsTUFBTVIsRUFBRU8sTUFBTTtZQUNkRSxNQUFNVCxFQUFFTyxNQUFNO1lBQ2RHLGFBQWFWLEVBQUVPLE1BQU07UUFDdkIsR0FDQ0ksSUFBSSxDQUFDO1lBQUVGLE1BQU07WUFBTUMsYUFBYTtRQUFLLEdBQ3JDRSxPQUFPLENBQUM7WUFBRVIsSUFBSTtRQUFLO1FBSXRCTixlQUF1QkcsYUFBYTtJQUt0QztBQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"generated.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated.template.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAUlD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AACF,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB;;;;IAOhB,MAAM;;;;;;;IA+GN,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAqBrD,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,EAAO,GAAG,UAAU;IAsH9E,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAsE9D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;CA8CvD"}
1
+ {"version":3,"file":"generated.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated.template.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAUlD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AACF,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB;;;;IAOhB,MAAM;;;;;;;IA+GN,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAqBrD,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,EAAO,GAAG,UAAU;IAyH9E,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAsE9D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;CA8CvD"}
@@ -181,7 +181,7 @@ export class Template__generated extends Template {
181
181
  /**
182
182
  * generated props
183
183
  * - generated 속성이 있는 컬럼 (INSERT/UPDATE 시 값 제공 불가)
184
- */ const generatedColumns = entity.props.filter((prop)=>prop.type !== "relation" && prop.generated !== undefined).map((prop)=>prop.name);
184
+ */ const generatedColumns = entity.props.filter((prop)=>prop.type !== "relation" && (prop.generated !== undefined || prop.type === "searchText")).map((prop)=>prop.name);
185
185
  const hasMetadata = fulltextColumns.length > 0 || virtualProps.length > 0 || virtualQueryProps.length > 0 || hasDefaultColumns.length > 0 || generatedColumns.length > 0 || hasVectorColumns.length > 0;
186
186
  const lines = [
187
187
  `export const ${schemaName} = ${schemaBody};`,
@@ -285,4 +285,4 @@ z.object({
285
285
  }
286
286
  }
287
287
 
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi8uLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbnRpdHlJbmRleCxcbiAgdHlwZSBFbnRpdHlQcm9wTm9kZSxcbiAgaXNWaXJ0dWFsQ29kZVByb3AsXG4gIGlzVmlydHVhbFF1ZXJ5UHJvcCxcbn0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBub25OdWxsYWJsZSB9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCB7IEJVSUxUX0lOX1RZUEVTLCBwcm9wTm9kZVRvWm9kVHlwZURlZiwgem9kVHlwZVRvWm9kQ29kZSB9IGZyb20gXCIuLi96b2QtY29udmVydGVyXCI7XG5cbmV4cG9ydCB0eXBlIFNvdXJjZUNvZGUgPSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxpbmVzOiBzdHJpbmdbXTtcbiAgaW1wb3J0S2V5czogc3RyaW5nW107XG59O1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19nZW5lcmF0ZWQgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiZ2VuZXJhdGVkXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aCgpIHtcbiAgICBjb25zdCB7IGRpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvYXBwbGljYXRpb25gLFxuICAgICAgcGF0aDogYHNvbmFtdS5nZW5lcmF0ZWQudHNgLFxuICAgIH07XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgY29uc3QgZW50aXRpZXMgPSBlbnRpdHlJZHMubWFwKChpZCkgPT4gRW50aXR5TWFuYWdlci5nZXQoaWQpKTtcblxuICAgIC8vIOyghOyytCBTb3VyY2VDb2RlIOyDneyEsVxuICAgIGNvbnN0IHNvdXJjZUNvZGVzID0gZW50aXRpZXMuZmxhdE1hcCgoZW50aXR5KSA9PiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLmdldEVudW1zU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICB0aGlzLmdldEJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgXS5maWx0ZXIobm9uTnVsbGFibGUpO1xuICAgIH0pO1xuICAgIE5haXRlLnQoXCJUZW1wbGF0ZV9fZ2VuZXJhdGVkOnNvdXJjZUNvZGVzXCIsIHNvdXJjZUNvZGVzKTtcblxuICAgIC8vIFNvcnRcbiAgICBjb25zdCBMQUJFTF9LRVlfT1JERVIgPSBbXCJFbnVtc1wiLCBcIkJhc2VTY2hlbWFcIiwgXCJCYXNlTGlzdFBhcmFtc1wiLCBcIlN1YnNldHNcIiwgXCJTdWJzZXRRdWVyaWVzXCJdO1xuICAgIHNvdXJjZUNvZGVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IFthS2V5XSA9IGEubGFiZWwuc3BsaXQoXCI6XCIpO1xuICAgICAgY29uc3QgW2JLZXldID0gYi5sYWJlbC5zcGxpdChcIjpcIik7XG4gICAgICBjb25zdCBhSW5kZXggPSBMQUJFTF9LRVlfT1JERVIuaW5kZXhPZihhS2V5KTtcbiAgICAgIGNvbnN0IGJJbmRleCA9IExBQkVMX0tFWV9PUkRFUi5pbmRleE9mKGJLZXkpO1xuICAgICAgaWYgKGFJbmRleCA+IGJJbmRleCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSBpZiAoYUluZGV4IDwgYkluZGV4KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc291cmNlQ29kZSA9IHNvdXJjZUNvZGVzLnJlZHVjZShcbiAgICAgIChyZXN1bHQsIHRzKSA9PiB7XG4gICAgICAgIGlmICh0cyA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lczogWy4uLnJlc3VsdC5saW5lcywgYC8vICR7dHMubGFiZWx9YCwgLi4udHMubGluZXMsIFwiXCJdLFxuICAgICAgICAgIGltcG9ydEtleXM6IHVuaXF1ZShbLi4ucmVzdWx0LmltcG9ydEtleXMsIC4uLnRzLmltcG9ydEtleXNdLnNvcnQoKSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfSBhcyBPbWl0PFNvdXJjZUNvZGUsIFwibGFiZWxcIj4sXG4gICAgKTtcblxuICAgIC8vIC50eXBlcy50c+ydmCDtg4DsnoXsnYQg7LC47KGw7ZWY64qUIOqyveyasCDsiJztmZjssLjsobAo7IOB7Zi47LC47KGwKeqwgCDrsJzsg53tlZjrr4DroZwg7YOA7J6F7J2EIOqwgOyguOyZgCDsnbjrnbzsnbgg7LKY66asXG4gICAgY29uc3QgYWxsVHlwZUtleXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IE9iamVjdC5rZXlzKGVudGl0eS50eXBlcykpO1xuICAgIGNvbnN0IGNkSW1wb3J0S2V5cyA9IHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGltcG9ydEtleSkgPT5cbiAgICAgIGFsbFR5cGVLZXlzLmluY2x1ZGVzKGltcG9ydEtleSksXG4gICAgKTtcbiAgICBpZiAoY2RJbXBvcnRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1c3RvbVNjYWxhckxpbmVzID0gY2RJbXBvcnRLZXlzLmZsYXRNYXAoKGltcG9ydEtleSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllcy5maW5kKChlbnRpdHkpID0+IGVudGl0eS50eXBlc1tpbXBvcnRLZXldKTtcbiAgICAgICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFpvZFR5cGUgbm90IGZvdW5kICR7aW1wb3J0S2V5fWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHpvZFR5cGUgPSBlbnRpdHkudHlwZXNbaW1wb3J0S2V5XTtcbiAgICAgICAgYXNzZXJ0KHpvZFR5cGUpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYC8vIEN1c3RvbVNjYWxhcjogJHtpbXBvcnRLZXl9YCxcbiAgICAgICAgICBgY29uc3QgJHtpbXBvcnRLZXl9ID0gJHt6b2RUeXBlVG9ab2RDb2RlKHpvZFR5cGUpfTtgLFxuICAgICAgICAgIGB0eXBlICR7aW1wb3J0S2V5fSA9IHouaW5mZXI8dHlwZW9mICR7aW1wb3J0S2V5fT5gLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgIF07XG4gICAgICB9KTtcbiAgICAgIHNvdXJjZUNvZGUubGluZXMgPSBbLi4uY3VzdG9tU2NhbGFyTGluZXMsIC4uLnNvdXJjZUNvZGUubGluZXNdO1xuICAgICAgc291cmNlQ29kZS5pbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcihcbiAgICAgICAgKGltcG9ydEtleSkgPT4gIWNkSW1wb3J0S2V5cy5pbmNsdWRlcyhpbXBvcnRLZXkpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gc291cmNlQ29kZS5saW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIE5haXRlLnQoXCJUZW1wbGF0ZV9fZ2VuZXJhdGVkOmJvZHlcIiwgYm9keSk7XG5cbiAgICAvLyBpbXBvcnRcbiAgICAvLyBzb3VyY2VDb2RlLmltcG9ydEtleXPsl5Ag64K07J6lIO2DgOyeheydmCDsiqTtgqTrp4jqsIAg7J6I7Jy866m0IHNvbmFtdSBpbXBvcnTsl5Ag7LaU6rCAXG4gICAgY29uc3QgYnVpbHRJblNjaGVtYU5hbWVzID0gT2JqZWN0LnZhbHVlcyhCVUlMVF9JTl9UWVBFUykubWFwKFxuICAgICAgKGluZm8pID0+IGluZm8uc2NoZW1hTmFtZSBhcyBzdHJpbmcsXG4gICAgKTtcbiAgICBjb25zdCBidWlsdEluU2NoZW1hcyA9IHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGtleSkgPT4gYnVpbHRJblNjaGVtYU5hbWVzLmluY2x1ZGVzKGtleSkpO1xuICAgIGNvbnN0IHNvbmFtdUltcG9ydHMgPSBbXG4gICAgICBcInpBcnJheWFibGVcIixcbiAgICAgIFwiU1FMRGF0ZVRpbWVTdHJpbmdcIixcbiAgICAgIFwiU3Vic2V0UXVlcnlcIixcbiAgICAgIFwiU29uYW11UXVlcnlNb2RlXCIsXG4gICAgICBcIkFwcGx5U29uYW11RmlsdGVyXCIsXG4gICAgICAuLi5idWlsdEluU2NoZW1hcyxcbiAgICBdLmZpbHRlcigobW9kKSA9PiBib2R5LmluY2x1ZGVzKG1vZCkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCgpLFxuICAgICAgYm9keSxcbiAgICAgIGltcG9ydEtleXM6IHNvdXJjZUNvZGUuaW1wb3J0S2V5cyxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcbiAgICAgICAgXCIvKipcIixcbiAgICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgIFwiICovXCIsXG4gICAgICAgIFwiLyoqIGJpb21lLWlnbm9yZS1hbGwgbGludDogZ2VuZXJhdGVk64qUIOustOyLnCAqL1wiLFxuICAgICAgICBcIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGFzc2lzdDogZ2VuZXJhdGVk64qUIOustOyLnCAqL1wiLFxuICAgICAgICBcIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGZvcm1hdDogZ2VuZXJhdGVk64qUIOustOyLnCAqL1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBgaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7YCxcbiAgICAgICAgYGltcG9ydCB7ICR7c29uYW11SW1wb3J0cy5qb2luKFwiLFwiKX0gfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGdldEVudW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEVudW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXM6IFtcbiAgICAgICAgLi4uT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1MYWJlbHMpXG4gICAgICAgICAgLmZpbHRlcigoW18sIGVudW1MYWJlbF0pID0+IE9iamVjdC5rZXlzKGVudW1MYWJlbCkubGVuZ3RoID4gMClcbiAgICAgICAgICAuZmxhdE1hcCgoW2VudW1JZCwgZW51bUxhYmVsXSkgPT4gW1xuICAgICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH0gPSB6LmVudW0oWyR7T2JqZWN0LmtleXMoZW51bUxhYmVsKS5tYXAoXG4gICAgICAgICAgICAgIChlbCkgPT4gYFwiJHtlbH1cImAsXG4gICAgICAgICAgICApfV0pLmRlc2NyaWJlKFwiJHtlbnVtSWR9XCIpO2AsXG4gICAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtlbnVtSWR9ID0gei5pbmZlcjx0eXBlb2YgJHtlbnVtSWR9PjtgLFxuICAgICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH1MYWJlbCA9ICR7SlNPTi5zdHJpbmdpZnkoZW51bUxhYmVsKX07YCxcbiAgICAgICAgICBdKSxcbiAgICAgIF0sXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHksIGltcG9ydEtleXM6IHN0cmluZ1tdID0gW10pOiBTb3VyY2VDb2RlIHtcbiAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1CYXNlU2NoZW1hYDtcbiAgICBjb25zdCBwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUgPSB7XG4gICAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuOiBlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZVR5cGU6IFwicGxhaW5cIixcbiAgICAgICAgICBwcm9wLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IHNjaGVtYUJvZHkgPSAoKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGUsIGltcG9ydEtleXMpO1xuICAgICAgaWYgKHJlc3VsdC5lbmRzV2l0aChcIixcIikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zbGljZSgwLCAtMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkoKTtcblxuICAgIC8vIGZ1bGx0ZXh0IGluZGV47JeQIO2PrO2VqOuQnCDsu6zrn7zrk6Qg7LaU7LacXG4gICAgLy8gVE9ETzogR0lOL0dpU1Qg7J24642x7IqkIOyDneyEseuQnCDsu6zrn7wg7LaU7LacXG4gICAgY29uc3QgZnVsbHRleHRDb2x1bW5zOiBFbnRpdHlJbmRleFtcImNvbHVtbnNcIl1bXSA9IFtdO1xuXG4gICAgLy8gdmlydHVhbCBwcm9wcyAodmlydHVhbFR5cGU6IFwiY29kZVwiIOuYkOuKlCB1bmRlZmluZWTsnbgg6rKD66eMIO2PrO2VqClcbiAgICBjb25zdCB2aXJ0dWFsUHJvcHMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IGlzVmlydHVhbENvZGVQcm9wKHByb3ApKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8vIHF1ZXJ5IHZpcnR1YWwgcHJvcHMgKHZpcnR1YWxUeXBlOiBcInF1ZXJ5XCLsnbgg6rKD66eMIO2PrO2VqClcbiAgICBjb25zdCB2aXJ0dWFsUXVlcnlQcm9wcyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gaXNWaXJ0dWFsUXVlcnlQcm9wKHByb3ApKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIGhhc0RlZmF1bHQgcHJvcHNcbiAgICAgKiAtIG51bGxhYmxlIOuYkOuKlCBkYkRlZmF1bHTqsIAg7J6I64qUIOy7rOufvCAoaWQg7Y+s7ZWoKVxuICAgICAqIC0gcmVsYXRpb27snbQg7JWE64uI6rGw64KYLCByZWxhdGlvbuydtOyWtOuPhCBudWxsYWJsZeydtOuptCDtj6ztlahcbiAgICAgKi9cbiAgICBjb25zdCBoYXNEZWZhdWx0Q29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHByb3ApID0+XG4gICAgICAgICAgKHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiIHx8IHByb3AubnVsbGFibGUgPT09IHRydWUpICYmXG4gICAgICAgICAgKHByb3AubnVsbGFibGUgPT09IHRydWUgfHwgKHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiICYmIHByb3AuZGJEZWZhdWx0ICE9PSB1bmRlZmluZWQpKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHByb3ApID0+IChwcm9wLnR5cGUgPT09IFwicmVsYXRpb25cIiA/IGAke3Byb3AubmFtZX1faWRgIDogcHJvcC5uYW1lKSlcbiAgICAgIC5jb25jYXQoXCJpZFwiKTtcblxuICAgIC8qKlxuICAgICAqIGhhc1ZlY3RvciBwcm9wc1xuICAgICAqIC0gdmVjdG9yIO2DgOyeheyduCDsu6zrn7xcbiAgICAgKi9cbiAgICBjb25zdCBoYXNWZWN0b3JDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBwcm9wLnR5cGUgPT09IFwidmVjdG9yXCIgfHwgcHJvcC50eXBlID09PSBcInZlY3RvcltdXCIpXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVkIHByb3BzXG4gICAgICogLSBnZW5lcmF0ZWQg7IaN7ISx7J20IOyeiOuKlCDsu6zrn7wgKElOU0VSVC9VUERBVEUg7IucIOqwkiDsoJzqs7Ug67aI6rCAKVxuICAgICAqL1xuICAgIGNvbnN0IGdlbmVyYXRlZENvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiICYmIHByb3AuZ2VuZXJhdGVkICE9PSB1bmRlZmluZWQpXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgY29uc3QgaGFzTWV0YWRhdGEgPVxuICAgICAgZnVsbHRleHRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIHZpcnR1YWxQcm9wcy5sZW5ndGggPiAwIHx8XG4gICAgICB2aXJ0dWFsUXVlcnlQcm9wcy5sZW5ndGggPiAwIHx8XG4gICAgICBoYXNEZWZhdWx0Q29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICBnZW5lcmF0ZWRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIGhhc1ZlY3RvckNvbHVtbnMubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtzY2hlbWFCb2R5fTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PmAgK1xuICAgICAgICAoaGFzTWV0YWRhdGFcbiAgICAgICAgICA/IGAgJiB7JHtcbiAgICAgICAgICAgICAgKGZ1bGx0ZXh0Q29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19mdWxsdGV4dF9fOiByZWFkb25seSBbJHtmdWxsdGV4dENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgICh2aXJ0dWFsUHJvcHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fdmlydHVhbF9fOiByZWFkb25seSBbJHt2aXJ0dWFsUHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3B9XCJgKS5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgICh2aXJ0dWFsUXVlcnlQcm9wcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192aXJ0dWFsX3F1ZXJ5X186IHJlYWRvbmx5IFske3ZpcnR1YWxRdWVyeVByb3BzLm1hcCgocHJvcCkgPT4gYFwiJHtwcm9wfVwiYCkuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAoaGFzRGVmYXVsdENvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9faGFzRGVmYXVsdF9fOiByZWFkb25seSBbJHtoYXNEZWZhdWx0Q29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGdlbmVyYXRlZENvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19nZW5lcmF0ZWRfXzogcmVhZG9ubHkgWyR7Z2VuZXJhdGVkQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgIChoYXNWZWN0b3JDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX3ZlY3Rvcl9fOiByZWFkb25seSBbJHtoYXNWZWN0b3JDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIilcbiAgICAgICAgICAgIH19YFxuICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICBcIjtcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZVNjaGVtYTogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIC8vIFByb3Ag7JeG64qUIE1E7J24IOqyveyasCDsg53shLEg7KCc7Jm4XG4gICAgaWYgKGVudGl0eS5wcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfUJhc2VMaXN0UGFyYW1zYDtcblxuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcC50b0ZpbHRlciA9PT0gdHJ1ZSk7XG5cbiAgICBjb25zdCBwcm9wTm9kZXM6IEVudGl0eVByb3BOb2RlW10gPSBmaWx0ZXJQcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIgYXMgY29uc3QsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlckJvZHkgPSBwcm9wTm9kZXNcbiAgICAgIC5tYXAoKHByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cykpXG4gICAgICAuam9pbihcIlxcblwiKTtcblxuICAgIC8vIEZpbHRlclF1ZXJ5IO2DgOyeheydhCDsnITtlZwg7KCc7Jm47ZWgIHByb3BzIOy2lOy2nCAodmlydHVhbOunjCDsoJzsmbgpXG4gICAgY29uc3QgZXhjbHVkZWRQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJ2aXJ0dWFsXCIpLm1hcCgocCkgPT4gcC5uYW1lKTtcblxuICAgIC8vIG51bWVyaWMg7YOA7J6F7J24IHByb3BzIOy2lOy2nFxuICAgIGNvbnN0IG51bWVyaWNQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJudW1lcmljXCIpO1xuXG4gICAgLy8gQXBwbHlTb25hbXVGaWx0ZXIg7YOA7J6FIOyduOyekCDsg53shLFcbiAgICBjb25zdCBlbnRpdHlUeXBlID0gYCR7ZW50aXR5LmlkfUJhc2VTY2hlbWFgO1xuICAgIGNvbnN0IG51bWVyaWNLZXlzVW5pb24gPVxuICAgICAgbnVtZXJpY1Byb3BzLmxlbmd0aCA+IDAgPyBudW1lcmljUHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3AubmFtZX1cImApLmpvaW4oXCIgfCBcIikgOiBcIm5ldmVyXCI7XG4gICAgY29uc3Qgb21pdEtleXNVbmlvbiA9XG4gICAgICBleGNsdWRlZFByb3BzLmxlbmd0aCA+IDAgPyBleGNsdWRlZFByb3BzLm1hcCgobikgPT4gYFwiJHtufVwiYCkuam9pbihcIiB8IFwiKSA6IFwibmV2ZXJcIjtcblxuICAgIC8vIFBLIO2DgOyeheyXkCDrlLDrpbggaWQgWm9kIO2DgOyehSDqsrDsoJVcbiAgICBjb25zdCBwa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgY29uc3QgaWRab2RUeXBlID1cbiAgICAgIHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiXG4gICAgICAgID8gXCJ6QXJyYXlhYmxlKHouc3RyaW5nKCkpXCJcbiAgICAgICAgOiBcInpBcnJheWFibGUoei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpKVwiO1xuXG4gICAgY29uc3Qgc2NoZW1hQm9keSA9IGBcbnoub2JqZWN0KHtcbiAgbnVtOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIHBhZ2U6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuICBzZWFyY2g6ICR7ZW50aXR5LmlkfVNlYXJjaEZpZWxkLFxuICBrZXl3b3JkOiB6LnN0cmluZygpLFxuICBvcmRlckJ5OiAke2VudGl0eS5pZH1PcmRlckJ5LFxuICBxdWVyeU1vZGU6IFNvbmFtdVF1ZXJ5TW9kZSxcbiAgaWQ6ICR7aWRab2RUeXBlfSxcbiAgc29uYW11RmlsdGVyOiB6LmN1c3RvbTxBcHBseVNvbmFtdUZpbHRlcjwke2VudGl0eVR5cGV9LCAke29taXRLZXlzVW5pb259LCAke251bWVyaWNLZXlzVW5pb259Pj4oKSwke2ZpbHRlckJvZHl9XG59KS5wYXJ0aWFsKCk7XG5gLnRyaW0oKTtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtzY2hlbWFCb2R5fTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PjtgLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBCYXNlTGlzdFBhcmFtczogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChlbnRpdHkucGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKTtcbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC4uLnN1YnNldEtleXMuZmxhdE1hcCgoc3Vic2V0S2V5KSA9PiB7XG4gICAgICAgIC8vIOyEnOu4jOyFi+yXkOyEnCBGaWVsZEV4cHJbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgZmllbGRFeHBycyA9IGVudGl0eS5zdWJzZXRzW3N1YnNldEtleV07XG5cbiAgICAgICAgLy8gRmllbGRFeHByW13roZwgRW50aXR5UHJvcE5vZGVbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgcHJvcE5vZGVzID0gZW50aXR5LmZpZWxkRXhwcnNUb1Byb3BOb2RlcyhmaWVsZEV4cHJzKTtcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9YDtcbiAgICAgICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIGNoaWxkcmVuOiBwcm9wTm9kZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRW50aXR5UHJvcE5vZGVbXeuhnCBab2RUeXBlRGVmKHN0cmluZynsnYQg6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IGJvZHkgPSBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cyk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke2JvZHkucmVwbGFjZSgvLCQvLCBcIlwiKX07YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+O2AsXG4gICAgICAgIF07XG4gICAgICB9KSxcbiAgICAgIGBleHBvcnQgdHlwZSAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0TWFwcGluZyA9IHtgLFxuICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4gYCAgJHtzdWJzZXRLZXl9OiAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9O2ApLFxuICAgICAgXCJ9O1wiLFxuICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5ID0gei5lbnVtKFske3N1YnNldEtleXNcbiAgICAgICAgLm1hcCgoaykgPT4gYFwiJHtrfVwiYClcbiAgICAgICAgLmpvaW4oXCIsXCIpfV0pO2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleSA9IHouaW5mZXI8dHlwZW9mICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXk+O2AsXG4gICAgICBcIlwiLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBTdWJzZXRzOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXMsXG4gICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoaW1wb3J0S2V5cyksXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFzc2VydCIsInVuaXF1ZSIsIlNvbmFtdSIsIkVudGl0eU1hbmFnZXIiLCJOYWl0ZSIsImlzVmlydHVhbENvZGVQcm9wIiwiaXNWaXJ0dWFsUXVlcnlQcm9wIiwibm9uTnVsbGFibGUiLCJUZW1wbGF0ZSIsIkJVSUxUX0lOX1RZUEVTIiwicHJvcE5vZGVUb1pvZFR5cGVEZWYiLCJ6b2RUeXBlVG9ab2RDb2RlIiwiVGVtcGxhdGVfX2dlbmVyYXRlZCIsImdldFRhcmdldEFuZFBhdGgiLCJkaXIiLCJjb25maWciLCJhcGkiLCJ0YXJnZXQiLCJwYXRoIiwicmVuZGVyIiwiZW50aXR5SWRzIiwiZ2V0QWxsSWRzIiwiZW50aXRpZXMiLCJtYXAiLCJpZCIsImdldCIsInNvdXJjZUNvZGVzIiwiZmxhdE1hcCIsImVudGl0eSIsImdldEVudW1zU291cmNlQ29kZSIsImdldEJhc2VTY2hlbWFTb3VyY2VDb2RlIiwiZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlIiwiZ2V0U3Vic2V0U291cmNlQ29kZSIsImZpbHRlciIsInQiLCJMQUJFTF9LRVlfT1JERVIiLCJzb3J0IiwiYSIsImIiLCJhS2V5IiwibGFiZWwiLCJzcGxpdCIsImJLZXkiLCJhSW5kZXgiLCJpbmRleE9mIiwiYkluZGV4Iiwic291cmNlQ29kZSIsInJlZHVjZSIsInJlc3VsdCIsInRzIiwibGluZXMiLCJpbXBvcnRLZXlzIiwiYWxsVHlwZUtleXMiLCJPYmplY3QiLCJrZXlzIiwidHlwZXMiLCJjZEltcG9ydEtleXMiLCJpbXBvcnRLZXkiLCJpbmNsdWRlcyIsImxlbmd0aCIsImN1c3RvbVNjYWxhckxpbmVzIiwiZmluZCIsIkVycm9yIiwiem9kVHlwZSIsImJvZHkiLCJqb2luIiwiYnVpbHRJblNjaGVtYU5hbWVzIiwidmFsdWVzIiwiaW5mbyIsInNjaGVtYU5hbWUiLCJidWlsdEluU2NoZW1hcyIsImtleSIsInNvbmFtdUltcG9ydHMiLCJtb2QiLCJjdXN0b21IZWFkZXJzIiwiZW51bUxhYmVscyIsImVudHJpZXMiLCJfIiwiZW51bUxhYmVsIiwiZW51bUlkIiwiZWwiLCJKU09OIiwic3RyaW5naWZ5IiwibmFtZXMiLCJtb2R1bGUiLCJwcm9wTm9kZSIsIm5vZGVUeXBlIiwiY2hpbGRyZW4iLCJwcm9wcyIsInByb3AiLCJzY2hlbWFCb2R5IiwiZW5kc1dpdGgiLCJzbGljZSIsImZ1bGx0ZXh0Q29sdW1ucyIsInZpcnR1YWxQcm9wcyIsIm5hbWUiLCJ2aXJ0dWFsUXVlcnlQcm9wcyIsImhhc0RlZmF1bHRDb2x1bW5zIiwidHlwZSIsIm51bGxhYmxlIiwiZGJEZWZhdWx0IiwidW5kZWZpbmVkIiwiY29uY2F0IiwiaGFzVmVjdG9yQ29sdW1ucyIsImdlbmVyYXRlZENvbHVtbnMiLCJnZW5lcmF0ZWQiLCJoYXNNZXRhZGF0YSIsImNvbCIsInBhcmVudElkIiwiZmlsdGVyUHJvcHMiLCJ0b0ZpbHRlciIsInByb3BOb2RlcyIsImZpbHRlckJvZHkiLCJleGNsdWRlZFByb3BzIiwicCIsIm51bWVyaWNQcm9wcyIsImVudGl0eVR5cGUiLCJudW1lcmljS2V5c1VuaW9uIiwib21pdEtleXNVbmlvbiIsIm4iLCJwa1R5cGUiLCJnZXRQa1R5cGUiLCJpZFpvZFR5cGUiLCJ0cmltIiwic3Vic2V0cyIsInN1YnNldEtleXMiLCJzdWJzZXRLZXkiLCJmaWVsZEV4cHJzIiwiZmllbGRFeHByc1RvUHJvcE5vZGVzIiwicmVwbGFjZSIsImsiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUM1QixTQUFTQyxNQUFNLFFBQVEsVUFBVTtBQUNqQyxTQUFTQyxNQUFNLFFBQVEscUJBQVk7QUFFbkMsU0FBU0MsYUFBYSxRQUFRLGlDQUE4QjtBQUM1RCxTQUFTQyxLQUFLLFFBQVEsdUJBQW9CO0FBQzFDLFNBR0VDLGlCQUFpQixFQUNqQkMsa0JBQWtCLFFBQ2IsdUJBQW9CO0FBQzNCLFNBQVNDLFdBQVcsUUFBUSx1QkFBb0I7QUFDaEQsU0FBU0MsUUFBUSxRQUFRLGlCQUFjO0FBQ3ZDLFNBQVNDLGNBQWMsRUFBRUMsb0JBQW9CLEVBQUVDLGdCQUFnQixRQUFRLHNCQUFtQjtBQU8xRixPQUFPLE1BQU1DLDRCQUE0Qko7SUFDdkMsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFLLG1CQUFtQjtRQUNqQixNQUFNLEVBQUVDLEdBQUcsRUFBRSxHQUFHWixPQUFPYSxNQUFNLENBQUNDLEdBQUc7UUFDakMsT0FBTztZQUNMQyxRQUFRLEdBQUdILElBQUksZ0JBQWdCLENBQUM7WUFDaENJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztRQUM3QjtJQUNGO0lBQ0FDLFNBQVM7UUFDUCxNQUFNQyxZQUFZakIsY0FBY2tCLFNBQVM7UUFDekMsTUFBTUMsV0FBV0YsVUFBVUcsR0FBRyxDQUFDLENBQUNDLEtBQU9yQixjQUFjc0IsR0FBRyxDQUFDRDtRQUV6RCxtQkFBbUI7UUFDbkIsTUFBTUUsY0FBY0osU0FBU0ssT0FBTyxDQUFDLENBQUNDO1lBQ3BDLE9BQU87Z0JBQ0wsSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQ0Q7Z0JBQ3hCLElBQUksQ0FBQ0UsdUJBQXVCLENBQUNGO2dCQUM3QixJQUFJLENBQUNHLDJCQUEyQixDQUFDSDtnQkFDakMsSUFBSSxDQUFDSSxtQkFBbUIsQ0FBQ0o7YUFDMUIsQ0FBQ0ss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
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi8uLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbnRpdHlJbmRleCxcbiAgdHlwZSBFbnRpdHlQcm9wTm9kZSxcbiAgaXNWaXJ0dWFsQ29kZVByb3AsXG4gIGlzVmlydHVhbFF1ZXJ5UHJvcCxcbn0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBub25OdWxsYWJsZSB9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCB7IEJVSUxUX0lOX1RZUEVTLCBwcm9wTm9kZVRvWm9kVHlwZURlZiwgem9kVHlwZVRvWm9kQ29kZSB9IGZyb20gXCIuLi96b2QtY29udmVydGVyXCI7XG5cbmV4cG9ydCB0eXBlIFNvdXJjZUNvZGUgPSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxpbmVzOiBzdHJpbmdbXTtcbiAgaW1wb3J0S2V5czogc3RyaW5nW107XG59O1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19nZW5lcmF0ZWQgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiZ2VuZXJhdGVkXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aCgpIHtcbiAgICBjb25zdCB7IGRpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvYXBwbGljYXRpb25gLFxuICAgICAgcGF0aDogYHNvbmFtdS5nZW5lcmF0ZWQudHNgLFxuICAgIH07XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgY29uc3QgZW50aXRpZXMgPSBlbnRpdHlJZHMubWFwKChpZCkgPT4gRW50aXR5TWFuYWdlci5nZXQoaWQpKTtcblxuICAgIC8vIOyghOyytCBTb3VyY2VDb2RlIOyDneyEsVxuICAgIGNvbnN0IHNvdXJjZUNvZGVzID0gZW50aXRpZXMuZmxhdE1hcCgoZW50aXR5KSA9PiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLmdldEVudW1zU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICB0aGlzLmdldEJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgXS5maWx0ZXIobm9uTnVsbGFibGUpO1xuICAgIH0pO1xuICAgIE5haXRlLnQoXCJUZW1wbGF0ZV9fZ2VuZXJhdGVkOnNvdXJjZUNvZGVzXCIsIHNvdXJjZUNvZGVzKTtcblxuICAgIC8vIFNvcnRcbiAgICBjb25zdCBMQUJFTF9LRVlfT1JERVIgPSBbXCJFbnVtc1wiLCBcIkJhc2VTY2hlbWFcIiwgXCJCYXNlTGlzdFBhcmFtc1wiLCBcIlN1YnNldHNcIiwgXCJTdWJzZXRRdWVyaWVzXCJdO1xuICAgIHNvdXJjZUNvZGVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IFthS2V5XSA9IGEubGFiZWwuc3BsaXQoXCI6XCIpO1xuICAgICAgY29uc3QgW2JLZXldID0gYi5sYWJlbC5zcGxpdChcIjpcIik7XG4gICAgICBjb25zdCBhSW5kZXggPSBMQUJFTF9LRVlfT1JERVIuaW5kZXhPZihhS2V5KTtcbiAgICAgIGNvbnN0IGJJbmRleCA9IExBQkVMX0tFWV9PUkRFUi5pbmRleE9mKGJLZXkpO1xuICAgICAgaWYgKGFJbmRleCA+IGJJbmRleCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSBpZiAoYUluZGV4IDwgYkluZGV4KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc291cmNlQ29kZSA9IHNvdXJjZUNvZGVzLnJlZHVjZShcbiAgICAgIChyZXN1bHQsIHRzKSA9PiB7XG4gICAgICAgIGlmICh0cyA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lczogWy4uLnJlc3VsdC5saW5lcywgYC8vICR7dHMubGFiZWx9YCwgLi4udHMubGluZXMsIFwiXCJdLFxuICAgICAgICAgIGltcG9ydEtleXM6IHVuaXF1ZShbLi4ucmVzdWx0LmltcG9ydEtleXMsIC4uLnRzLmltcG9ydEtleXNdLnNvcnQoKSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfSBhcyBPbWl0PFNvdXJjZUNvZGUsIFwibGFiZWxcIj4sXG4gICAgKTtcblxuICAgIC8vIC50eXBlcy50c+ydmCDtg4DsnoXsnYQg7LC47KGw7ZWY64qUIOqyveyasCDsiJztmZjssLjsobAo7IOB7Zi47LC47KGwKeqwgCDrsJzsg53tlZjrr4DroZwg7YOA7J6F7J2EIOqwgOyguOyZgCDsnbjrnbzsnbgg7LKY66asXG4gICAgY29uc3QgYWxsVHlwZUtleXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IE9iamVjdC5rZXlzKGVudGl0eS50eXBlcykpO1xuICAgIGNvbnN0IGNkSW1wb3J0S2V5cyA9IHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGltcG9ydEtleSkgPT5cbiAgICAgIGFsbFR5cGVLZXlzLmluY2x1ZGVzKGltcG9ydEtleSksXG4gICAgKTtcbiAgICBpZiAoY2RJbXBvcnRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1c3RvbVNjYWxhckxpbmVzID0gY2RJbXBvcnRLZXlzLmZsYXRNYXAoKGltcG9ydEtleSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllcy5maW5kKChlbnRpdHkpID0+IGVudGl0eS50eXBlc1tpbXBvcnRLZXldKTtcbiAgICAgICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFpvZFR5cGUgbm90IGZvdW5kICR7aW1wb3J0S2V5fWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHpvZFR5cGUgPSBlbnRpdHkudHlwZXNbaW1wb3J0S2V5XTtcbiAgICAgICAgYXNzZXJ0KHpvZFR5cGUpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYC8vIEN1c3RvbVNjYWxhcjogJHtpbXBvcnRLZXl9YCxcbiAgICAgICAgICBgY29uc3QgJHtpbXBvcnRLZXl9ID0gJHt6b2RUeXBlVG9ab2RDb2RlKHpvZFR5cGUpfTtgLFxuICAgICAgICAgIGB0eXBlICR7aW1wb3J0S2V5fSA9IHouaW5mZXI8dHlwZW9mICR7aW1wb3J0S2V5fT5gLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgIF07XG4gICAgICB9KTtcbiAgICAgIHNvdXJjZUNvZGUubGluZXMgPSBbLi4uY3VzdG9tU2NhbGFyTGluZXMsIC4uLnNvdXJjZUNvZGUubGluZXNdO1xuICAgICAgc291cmNlQ29kZS5pbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcihcbiAgICAgICAgKGltcG9ydEtleSkgPT4gIWNkSW1wb3J0S2V5cy5pbmNsdWRlcyhpbXBvcnRLZXkpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gc291cmNlQ29kZS5saW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIE5haXRlLnQoXCJUZW1wbGF0ZV9fZ2VuZXJhdGVkOmJvZHlcIiwgYm9keSk7XG5cbiAgICAvLyBpbXBvcnRcbiAgICAvLyBzb3VyY2VDb2RlLmltcG9ydEtleXPsl5Ag64K07J6lIO2DgOyeheydmCDsiqTtgqTrp4jqsIAg7J6I7Jy866m0IHNvbmFtdSBpbXBvcnTsl5Ag7LaU6rCAXG4gICAgY29uc3QgYnVpbHRJblNjaGVtYU5hbWVzID0gT2JqZWN0LnZhbHVlcyhCVUlMVF9JTl9UWVBFUykubWFwKFxuICAgICAgKGluZm8pID0+IGluZm8uc2NoZW1hTmFtZSBhcyBzdHJpbmcsXG4gICAgKTtcbiAgICBjb25zdCBidWlsdEluU2NoZW1hcyA9IHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGtleSkgPT4gYnVpbHRJblNjaGVtYU5hbWVzLmluY2x1ZGVzKGtleSkpO1xuICAgIGNvbnN0IHNvbmFtdUltcG9ydHMgPSBbXG4gICAgICBcInpBcnJheWFibGVcIixcbiAgICAgIFwiU1FMRGF0ZVRpbWVTdHJpbmdcIixcbiAgICAgIFwiU3Vic2V0UXVlcnlcIixcbiAgICAgIFwiU29uYW11UXVlcnlNb2RlXCIsXG4gICAgICBcIkFwcGx5U29uYW11RmlsdGVyXCIsXG4gICAgICAuLi5idWlsdEluU2NoZW1hcyxcbiAgICBdLmZpbHRlcigobW9kKSA9PiBib2R5LmluY2x1ZGVzKG1vZCkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCgpLFxuICAgICAgYm9keSxcbiAgICAgIGltcG9ydEtleXM6IHNvdXJjZUNvZGUuaW1wb3J0S2V5cyxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcbiAgICAgICAgXCIvKipcIixcbiAgICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgIFwiICovXCIsXG4gICAgICAgIFwiLyoqIGJpb21lLWlnbm9yZS1hbGwgbGludDogZ2VuZXJhdGVk64qUIOustOyLnCAqL1wiLFxuICAgICAgICBcIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGFzc2lzdDogZ2VuZXJhdGVk64qUIOustOyLnCAqL1wiLFxuICAgICAgICBcIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGZvcm1hdDogZ2VuZXJhdGVk64qUIOustOyLnCAqL1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBgaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7YCxcbiAgICAgICAgYGltcG9ydCB7ICR7c29uYW11SW1wb3J0cy5qb2luKFwiLFwiKX0gfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGdldEVudW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEVudW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXM6IFtcbiAgICAgICAgLi4uT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1MYWJlbHMpXG4gICAgICAgICAgLmZpbHRlcigoW18sIGVudW1MYWJlbF0pID0+IE9iamVjdC5rZXlzKGVudW1MYWJlbCkubGVuZ3RoID4gMClcbiAgICAgICAgICAuZmxhdE1hcCgoW2VudW1JZCwgZW51bUxhYmVsXSkgPT4gW1xuICAgICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH0gPSB6LmVudW0oWyR7T2JqZWN0LmtleXMoZW51bUxhYmVsKS5tYXAoXG4gICAgICAgICAgICAgIChlbCkgPT4gYFwiJHtlbH1cImAsXG4gICAgICAgICAgICApfV0pLmRlc2NyaWJlKFwiJHtlbnVtSWR9XCIpO2AsXG4gICAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtlbnVtSWR9ID0gei5pbmZlcjx0eXBlb2YgJHtlbnVtSWR9PjtgLFxuICAgICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH1MYWJlbCA9ICR7SlNPTi5zdHJpbmdpZnkoZW51bUxhYmVsKX07YCxcbiAgICAgICAgICBdKSxcbiAgICAgIF0sXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHksIGltcG9ydEtleXM6IHN0cmluZ1tdID0gW10pOiBTb3VyY2VDb2RlIHtcbiAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1CYXNlU2NoZW1hYDtcbiAgICBjb25zdCBwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUgPSB7XG4gICAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuOiBlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZVR5cGU6IFwicGxhaW5cIixcbiAgICAgICAgICBwcm9wLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IHNjaGVtYUJvZHkgPSAoKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGUsIGltcG9ydEtleXMpO1xuICAgICAgaWYgKHJlc3VsdC5lbmRzV2l0aChcIixcIikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zbGljZSgwLCAtMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkoKTtcblxuICAgIC8vIGZ1bGx0ZXh0IGluZGV47JeQIO2PrO2VqOuQnCDsu6zrn7zrk6Qg7LaU7LacXG4gICAgLy8gVE9ETzogR0lOL0dpU1Qg7J24642x7IqkIOyDneyEseuQnCDsu6zrn7wg7LaU7LacXG4gICAgY29uc3QgZnVsbHRleHRDb2x1bW5zOiBFbnRpdHlJbmRleFtcImNvbHVtbnNcIl1bXSA9IFtdO1xuXG4gICAgLy8gdmlydHVhbCBwcm9wcyAodmlydHVhbFR5cGU6IFwiY29kZVwiIOuYkOuKlCB1bmRlZmluZWTsnbgg6rKD66eMIO2PrO2VqClcbiAgICBjb25zdCB2aXJ0dWFsUHJvcHMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IGlzVmlydHVhbENvZGVQcm9wKHByb3ApKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8vIHF1ZXJ5IHZpcnR1YWwgcHJvcHMgKHZpcnR1YWxUeXBlOiBcInF1ZXJ5XCLsnbgg6rKD66eMIO2PrO2VqClcbiAgICBjb25zdCB2aXJ0dWFsUXVlcnlQcm9wcyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gaXNWaXJ0dWFsUXVlcnlQcm9wKHByb3ApKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIGhhc0RlZmF1bHQgcHJvcHNcbiAgICAgKiAtIG51bGxhYmxlIOuYkOuKlCBkYkRlZmF1bHTqsIAg7J6I64qUIOy7rOufvCAoaWQg7Y+s7ZWoKVxuICAgICAqIC0gcmVsYXRpb27snbQg7JWE64uI6rGw64KYLCByZWxhdGlvbuydtOyWtOuPhCBudWxsYWJsZeydtOuptCDtj6ztlahcbiAgICAgKi9cbiAgICBjb25zdCBoYXNEZWZhdWx0Q29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHByb3ApID0+XG4gICAgICAgICAgKHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiIHx8IHByb3AubnVsbGFibGUgPT09IHRydWUpICYmXG4gICAgICAgICAgKHByb3AubnVsbGFibGUgPT09IHRydWUgfHwgKHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiICYmIHByb3AuZGJEZWZhdWx0ICE9PSB1bmRlZmluZWQpKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHByb3ApID0+IChwcm9wLnR5cGUgPT09IFwicmVsYXRpb25cIiA/IGAke3Byb3AubmFtZX1faWRgIDogcHJvcC5uYW1lKSlcbiAgICAgIC5jb25jYXQoXCJpZFwiKTtcblxuICAgIC8qKlxuICAgICAqIGhhc1ZlY3RvciBwcm9wc1xuICAgICAqIC0gdmVjdG9yIO2DgOyeheyduCDsu6zrn7xcbiAgICAgKi9cbiAgICBjb25zdCBoYXNWZWN0b3JDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBwcm9wLnR5cGUgPT09IFwidmVjdG9yXCIgfHwgcHJvcC50eXBlID09PSBcInZlY3RvcltdXCIpXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVkIHByb3BzXG4gICAgICogLSBnZW5lcmF0ZWQg7IaN7ISx7J20IOyeiOuKlCDsu6zrn7wgKElOU0VSVC9VUERBVEUg7IucIOqwkiDsoJzqs7Ug67aI6rCAKVxuICAgICAqL1xuICAgIGNvbnN0IGdlbmVyYXRlZENvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PlxuICAgICAgICAgIHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiICYmIChwcm9wLmdlbmVyYXRlZCAhPT0gdW5kZWZpbmVkIHx8IHByb3AudHlwZSA9PT0gXCJzZWFyY2hUZXh0XCIpLFxuICAgICAgKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIGNvbnN0IGhhc01ldGFkYXRhID1cbiAgICAgIGZ1bGx0ZXh0Q29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICB2aXJ0dWFsUHJvcHMubGVuZ3RoID4gMCB8fFxuICAgICAgdmlydHVhbFF1ZXJ5UHJvcHMubGVuZ3RoID4gMCB8fFxuICAgICAgaGFzRGVmYXVsdENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgZ2VuZXJhdGVkQ29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICBoYXNWZWN0b3JDb2x1bW5zLmxlbmd0aCA+IDA7XG5cbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIGBleHBvcnQgY29uc3QgJHtzY2hlbWFOYW1lfSA9ICR7c2NoZW1hQm9keX07YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT5gICtcbiAgICAgICAgKGhhc01ldGFkYXRhXG4gICAgICAgICAgPyBgICYgeyR7XG4gICAgICAgICAgICAgIChmdWxsdGV4dENvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fZnVsbHRleHRfXzogcmVhZG9ubHkgWyR7ZnVsbHRleHRDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAodmlydHVhbFByb3BzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX3ZpcnR1YWxfXzogcmVhZG9ubHkgWyR7dmlydHVhbFByb3BzLm1hcCgocHJvcCkgPT4gYFwiJHtwcm9wfVwiYCkuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAodmlydHVhbFF1ZXJ5UHJvcHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fdmlydHVhbF9xdWVyeV9fOiByZWFkb25seSBbJHt2aXJ0dWFsUXVlcnlQcm9wcy5tYXAoKHByb3ApID0+IGBcIiR7cHJvcH1cImApLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKGhhc0RlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX2hhc0RlZmF1bHRfXzogcmVhZG9ubHkgWyR7aGFzRGVmYXVsdENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fZ2VuZXJhdGVkX186IHJlYWRvbmx5IFske2dlbmVyYXRlZENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAoaGFzVmVjdG9yQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192ZWN0b3JfXzogcmVhZG9ubHkgWyR7aGFzVmVjdG9yQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpXG4gICAgICAgICAgICB9fWBcbiAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgXCI7XCIsXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEJhc2VTY2hlbWE6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBpbXBvcnRLZXlzLFxuICAgICAgbGluZXMsXG4gICAgfTtcbiAgfVxuXG4gIGdldEJhc2VMaXN0UGFyYW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICAvLyBQcm9wIOyXhuuKlCBNROyduCDqsr3smrAg7IOd7ISxIOygnOyZuFxuICAgIGlmIChlbnRpdHkucHJvcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGVudGl0eS5wYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1CYXNlTGlzdFBhcmFtc2A7XG5cbiAgICBjb25zdCBmaWx0ZXJQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHByb3ApID0+IHByb3AudG9GaWx0ZXIgPT09IHRydWUpO1xuXG4gICAgY29uc3QgcHJvcE5vZGVzOiBFbnRpdHlQcm9wTm9kZVtdID0gZmlsdGVyUHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlVHlwZTogXCJwbGFpblwiIGFzIGNvbnN0LFxuICAgICAgICBwcm9wLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBmaWx0ZXJCb2R5ID0gcHJvcE5vZGVzXG4gICAgICAubWFwKChwcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGUsIGltcG9ydEtleXMpKVxuICAgICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgICAvLyBGaWx0ZXJRdWVyeSDtg4DsnoXsnYQg7JyE7ZWcIOygnOyZuO2VoCBwcm9wcyDstpTstpwgKHZpcnR1YWzrp4wg7KCc7Jm4KVxuICAgIGNvbnN0IGV4Y2x1ZGVkUHJvcHMgPSBlbnRpdHkucHJvcHMuZmlsdGVyKChwKSA9PiBwLnR5cGUgPT09IFwidmlydHVhbFwiKS5tYXAoKHApID0+IHAubmFtZSk7XG5cbiAgICAvLyBudW1lcmljIO2DgOyeheyduCBwcm9wcyDstpTstpxcbiAgICBjb25zdCBudW1lcmljUHJvcHMgPSBlbnRpdHkucHJvcHMuZmlsdGVyKChwKSA9PiBwLnR5cGUgPT09IFwibnVtZXJpY1wiKTtcblxuICAgIC8vIEFwcGx5U29uYW11RmlsdGVyIO2DgOyehSDsnbjsnpAg7IOd7ISxXG4gICAgY29uc3QgZW50aXR5VHlwZSA9IGAke2VudGl0eS5pZH1CYXNlU2NoZW1hYDtcbiAgICBjb25zdCBudW1lcmljS2V5c1VuaW9uID1cbiAgICAgIG51bWVyaWNQcm9wcy5sZW5ndGggPiAwID8gbnVtZXJpY1Byb3BzLm1hcCgocHJvcCkgPT4gYFwiJHtwcm9wLm5hbWV9XCJgKS5qb2luKFwiIHwgXCIpIDogXCJuZXZlclwiO1xuICAgIGNvbnN0IG9taXRLZXlzVW5pb24gPVxuICAgICAgZXhjbHVkZWRQcm9wcy5sZW5ndGggPiAwID8gZXhjbHVkZWRQcm9wcy5tYXAoKG4pID0+IGBcIiR7bn1cImApLmpvaW4oXCIgfCBcIikgOiBcIm5ldmVyXCI7XG5cbiAgICAvLyBQSyDtg4DsnoXsl5Ag65Sw66W4IGlkIFpvZCDtg4DsnoUg6rKw7KCVXG4gICAgY29uc3QgcGtUeXBlID0gZW50aXR5LmdldFBrVHlwZSgpO1xuICAgIGNvbnN0IGlkWm9kVHlwZSA9XG4gICAgICBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIlxuICAgICAgICA/IFwiekFycmF5YWJsZSh6LnN0cmluZygpKVwiXG4gICAgICAgIDogXCJ6QXJyYXlhYmxlKHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKSlcIjtcblxuICAgIGNvbnN0IHNjaGVtYUJvZHkgPSBgXG56Lm9iamVjdCh7XG4gIG51bTogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICBwYWdlOiB6Lm51bWJlcigpLmludCgpLm1pbigxKSxcbiAgc2VhcmNoOiAke2VudGl0eS5pZH1TZWFyY2hGaWVsZCxcbiAga2V5d29yZDogei5zdHJpbmcoKSxcbiAgb3JkZXJCeTogJHtlbnRpdHkuaWR9T3JkZXJCeSxcbiAgcXVlcnlNb2RlOiBTb25hbXVRdWVyeU1vZGUsXG4gIGlkOiAke2lkWm9kVHlwZX0sXG4gIHNvbmFtdUZpbHRlcjogei5jdXN0b208QXBwbHlTb25hbXVGaWx0ZXI8JHtlbnRpdHlUeXBlfSwgJHtvbWl0S2V5c1VuaW9ufSwgJHtudW1lcmljS2V5c1VuaW9ufT4+KCksJHtmaWx0ZXJCb2R5fVxufSkucGFydGlhbCgpO1xuYC50cmltKCk7XG5cbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIGBleHBvcnQgY29uc3QgJHtzY2hlbWFOYW1lfSA9ICR7c2NoZW1hQm9keX07YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT47YCxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZUxpc3RQYXJhbXM6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBpbXBvcnRLZXlzLFxuICAgICAgbGluZXMsXG4gICAgfTtcbiAgfVxuXG4gIGdldFN1YnNldFNvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHkpOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNldEtleXMgPSBPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cyk7XG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgICAuLi5zdWJzZXRLZXlzLmZsYXRNYXAoKHN1YnNldEtleSkgPT4ge1xuICAgICAgICAvLyDshJzruIzshYvsl5DshJwgRmllbGRFeHByW10g6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IGZpZWxkRXhwcnMgPSBlbnRpdHkuc3Vic2V0c1tzdWJzZXRLZXldO1xuXG4gICAgICAgIC8vIEZpZWxkRXhwcltd66GcIEVudGl0eVByb3BOb2RlW10g6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IHByb3BOb2RlcyA9IGVudGl0eS5maWVsZEV4cHJzVG9Qcm9wTm9kZXMoZmllbGRFeHBycyk7XG4gICAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldCR7c3Vic2V0S2V5fWA7XG4gICAgICAgIGNvbnN0IHByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSA9IHtcbiAgICAgICAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBjaGlsZHJlbjogcHJvcE5vZGVzLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEVudGl0eVByb3BOb2RlW13roZwgWm9kVHlwZURlZihzdHJpbmcp7J2EIOqwgOyguOyYtFxuICAgICAgICBjb25zdCBib2R5ID0gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGUsIGltcG9ydEtleXMpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtib2R5LnJlcGxhY2UoLywkLywgXCJcIil9O2AsXG4gICAgICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PjtgLFxuICAgICAgICBdO1xuICAgICAgfSksXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldE1hcHBpbmcgPSB7YCxcbiAgICAgIC4uLnN1YnNldEtleXMubWFwKChzdWJzZXRLZXkpID0+IGAgICR7c3Vic2V0S2V5fTogJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldCR7c3Vic2V0S2V5fTtgKSxcbiAgICAgIFwifTtcIixcbiAgICAgIGBleHBvcnQgY29uc3QgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleSA9IHouZW51bShbJHtzdWJzZXRLZXlzXG4gICAgICAgIC5tYXAoKGspID0+IGBcIiR7a31cImApXG4gICAgICAgIC5qb2luKFwiLFwiKX1dKTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXkgPSB6LmluZmVyPHR5cGVvZiAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5PjtgLFxuICAgICAgXCJcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgU3Vic2V0czogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGxpbmVzLFxuICAgICAgaW1wb3J0S2V5czogdW5pcXVlKGltcG9ydEtleXMpLFxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJ1bmlxdWUiLCJTb25hbXUiLCJFbnRpdHlNYW5hZ2VyIiwiTmFpdGUiLCJpc1ZpcnR1YWxDb2RlUHJvcCIsImlzVmlydHVhbFF1ZXJ5UHJvcCIsIm5vbk51bGxhYmxlIiwiVGVtcGxhdGUiLCJCVUlMVF9JTl9UWVBFUyIsInByb3BOb2RlVG9ab2RUeXBlRGVmIiwiem9kVHlwZVRvWm9kQ29kZSIsIlRlbXBsYXRlX19nZW5lcmF0ZWQiLCJnZXRUYXJnZXRBbmRQYXRoIiwiZGlyIiwiY29uZmlnIiwiYXBpIiwidGFyZ2V0IiwicGF0aCIsInJlbmRlciIsImVudGl0eUlkcyIsImdldEFsbElkcyIsImVudGl0aWVzIiwibWFwIiwiaWQiLCJnZXQiLCJzb3VyY2VDb2RlcyIsImZsYXRNYXAiLCJlbnRpdHkiLCJnZXRFbnVtc1NvdXJjZUNvZGUiLCJnZXRCYXNlU2NoZW1hU291cmNlQ29kZSIsImdldEJhc2VMaXN0UGFyYW1zU291cmNlQ29kZSIsImdldFN1YnNldFNvdXJjZUNvZGUiLCJmaWx0ZXIiLCJ0IiwiTEFCRUxfS0VZX09SREVSIiwic29ydCIsImEiLCJiIiwiYUtleSIsImxhYmVsIiwic3BsaXQiLCJiS2V5IiwiYUluZGV4IiwiaW5kZXhPZiIsImJJbmRleCIsInNvdXJjZUNvZGUiLCJyZWR1Y2UiLCJyZXN1bHQiLCJ0cyIsImxpbmVzIiwiaW1wb3J0S2V5cyIsImFsbFR5cGVLZXlzIiwiT2JqZWN0Iiwia2V5cyIsInR5cGVzIiwiY2RJbXBvcnRLZXlzIiwiaW1wb3J0S2V5IiwiaW5jbHVkZXMiLCJsZW5ndGgiLCJjdXN0b21TY2FsYXJMaW5lcyIsImZpbmQiLCJFcnJvciIsInpvZFR5cGUiLCJib2R5Iiwiam9pbiIsImJ1aWx0SW5TY2hlbWFOYW1lcyIsInZhbHVlcyIsImluZm8iLCJzY2hlbWFOYW1lIiwiYnVpbHRJblNjaGVtYXMiLCJrZXkiLCJzb25hbXVJbXBvcnRzIiwibW9kIiwiY3VzdG9tSGVhZGVycyIsImVudW1MYWJlbHMiLCJlbnRyaWVzIiwiXyIsImVudW1MYWJlbCIsImVudW1JZCIsImVsIiwiSlNPTiIsInN0cmluZ2lmeSIsIm5hbWVzIiwibW9kdWxlIiwicHJvcE5vZGUiLCJub2RlVHlwZSIsImNoaWxkcmVuIiwicHJvcHMiLCJwcm9wIiwic2NoZW1hQm9keSIsImVuZHNXaXRoIiwic2xpY2UiLCJmdWxsdGV4dENvbHVtbnMiLCJ2aXJ0dWFsUHJvcHMiLCJuYW1lIiwidmlydHVhbFF1ZXJ5UHJvcHMiLCJoYXNEZWZhdWx0Q29sdW1ucyIsInR5cGUiLCJudWxsYWJsZSIsImRiRGVmYXVsdCIsInVuZGVmaW5lZCIsImNvbmNhdCIsImhhc1ZlY3RvckNvbHVtbnMiLCJnZW5lcmF0ZWRDb2x1bW5zIiwiZ2VuZXJhdGVkIiwiaGFzTWV0YWRhdGEiLCJjb2wiLCJwYXJlbnRJZCIsImZpbHRlclByb3BzIiwidG9GaWx0ZXIiLCJwcm9wTm9kZXMiLCJmaWx0ZXJCb2R5IiwiZXhjbHVkZWRQcm9wcyIsInAiLCJudW1lcmljUHJvcHMiLCJlbnRpdHlUeXBlIiwibnVtZXJpY0tleXNVbmlvbiIsIm9taXRLZXlzVW5pb24iLCJuIiwicGtUeXBlIiwiZ2V0UGtUeXBlIiwiaWRab2RUeXBlIiwidHJpbSIsInN1YnNldHMiLCJzdWJzZXRLZXlzIiwic3Vic2V0S2V5IiwiZmllbGRFeHBycyIsImZpZWxkRXhwcnNUb1Byb3BOb2RlcyIsInJlcGxhY2UiLCJrIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNBQVM7QUFDNUIsU0FBU0MsTUFBTSxRQUFRLFVBQVU7QUFDakMsU0FBU0MsTUFBTSxRQUFRLHFCQUFZO0FBRW5DLFNBQVNDLGFBQWEsUUFBUSxpQ0FBOEI7QUFDNUQsU0FBU0MsS0FBSyxRQUFRLHVCQUFvQjtBQUMxQyxTQUdFQyxpQkFBaUIsRUFDakJDLGtCQUFrQixRQUNiLHVCQUFvQjtBQUMzQixTQUFTQyxXQUFXLFFBQVEsdUJBQW9CO0FBQ2hELFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUN2QyxTQUFTQyxjQUFjLEVBQUVDLG9CQUFvQixFQUFFQyxnQkFBZ0IsUUFBUSxzQkFBbUI7QUFPMUYsT0FBTyxNQUFNQyw0QkFBNEJKO0lBQ3ZDLGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBSyxtQkFBbUI7UUFDakIsTUFBTSxFQUFFQyxHQUFHLEVBQUUsR0FBR1osT0FBT2EsTUFBTSxDQUFDQyxHQUFHO1FBQ2pDLE9BQU87WUFDTEMsUUFBUSxHQUFHSCxJQUFJLGdCQUFnQixDQUFDO1lBQ2hDSSxNQUFNLENBQUMsbUJBQW1CLENBQUM7UUFDN0I7SUFDRjtJQUNBQyxTQUFTO1FBQ1AsTUFBTUMsWUFBWWpCLGNBQWNrQixTQUFTO1FBQ3pDLE1BQU1DLFdBQVdGLFVBQVVHLEdBQUcsQ0FBQyxDQUFDQyxLQUFPckIsY0FBY3NCLEdBQUcsQ0FBQ0Q7UUFFekQsbUJBQW1CO1FBQ25CLE1BQU1FLGNBQWNKLFNBQVNLLE9BQU8sQ0FBQyxDQUFDQztZQUNwQyxPQUFPO2dCQUNMLElBQUksQ0FBQ0Msa0JBQWtCLENBQUNEO2dCQUN4QixJQUFJLENBQUNFLHVCQUF1QixDQUFDRjtnQkFDN0IsSUFB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
@@ -1 +1 @@
1
- {"version":3,"file":"init_types.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/init_types.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,oBAAqB,SAAQ,QAAQ;;IAKhD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IASzC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,YAAY,CAAC;;;;;;CA0BnD"}
1
+ {"version":3,"file":"init_types.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/init_types.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,oBAAqB,SAAQ,QAAQ;;IAKhD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IASzC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,YAAY,CAAC;;;;;;CAyCnD"}
@@ -14,7 +14,15 @@ export class Template__init_types extends Template {
14
14
  }
15
15
  render({ entityId }) {
16
16
  const names = EntityManager.getNamesFromId(entityId);
17
- const hasCreatedAt = EntityManager.get(entityId).props.find((prop)=>prop.name === "created_at") !== undefined;
17
+ const entity = EntityManager.get(entityId);
18
+ const partialColumns = [
19
+ "id"
20
+ ];
21
+ if (entity.props.some((prop)=>prop.name === "created_at")) {
22
+ partialColumns.push("created_at");
23
+ }
24
+ const writeIneligibleColumns = entity.props.filter((prop)=>prop.type !== "relation" && (prop.generated !== undefined || prop.type === "searchText")).map((prop)=>prop.name);
25
+ const omitGeneratedColumns = writeIneligibleColumns.length > 0 ? `.omit({ ${writeIneligibleColumns.map((column)=>`${column}: true`).join(", ")} })` : "";
18
26
  return {
19
27
  ...this.getTargetAndPath(names),
20
28
  body: `
@@ -26,7 +34,7 @@ export const ${entityId}ListParams = ${entityId}BaseListParams;
26
34
  export type ${entityId}ListParams = z.infer<typeof ${entityId}ListParams>;
27
35
 
28
36
  // ${entityId} - SaveParams
29
- export const ${entityId}SaveParams = ${entityId}BaseSchema.partial({ id: true${hasCreatedAt ? ", created_at: true" : ""} });
37
+ export const ${entityId}SaveParams = ${entityId}BaseSchema${omitGeneratedColumns}.partial({ ${partialColumns.map((column)=>`${column}: true`).join(", ")} });
30
38
  export type ${entityId}SaveParams = z.infer<typeof ${entityId}SaveParams>;
31
39
 
32
40
  `.trim(),
@@ -35,4 +43,4 @@ export type ${entityId}SaveParams = z.infer<typeof ${entityId}SaveParams>;
35
43
  }
36
44
  }
37
45
 
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvaW5pdF90eXBlcy50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9faW5pdF90eXBlcyBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJpbml0X3R5cGVzXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICBjb25zdCB7IGRpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc30vJHtuYW1lcy5mc30udHlwZXMudHNgLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJpbml0X3R5cGVzXCJdKSB7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIGNvbnN0IGhhc0NyZWF0ZWRBdCA9XG4gICAgICBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBcImNyZWF0ZWRfYXRcIikgIT09IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7ICR7ZW50aXR5SWR9QmFzZVNjaGVtYSwgJHtlbnRpdHlJZH1CYXNlTGlzdFBhcmFtcyB9IGZyb20gXCIuLi9zb25hbXUuZ2VuZXJhdGVkXCI7XG5cbi8vICR7ZW50aXR5SWR9IC0gTGlzdFBhcmFtc1xuZXhwb3J0IGNvbnN0ICR7ZW50aXR5SWR9TGlzdFBhcmFtcyA9ICR7ZW50aXR5SWR9QmFzZUxpc3RQYXJhbXM7XG5leHBvcnQgdHlwZSAke2VudGl0eUlkfUxpc3RQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiAke2VudGl0eUlkfUxpc3RQYXJhbXM+O1xuXG4vLyAke2VudGl0eUlkfSAtIFNhdmVQYXJhbXNcbmV4cG9ydCBjb25zdCAke2VudGl0eUlkfVNhdmVQYXJhbXMgPSAke2VudGl0eUlkfUJhc2VTY2hlbWEucGFydGlhbCh7IGlkOiB0cnVlJHtcbiAgICAgICAgaGFzQ3JlYXRlZEF0ID8gXCIsIGNyZWF0ZWRfYXQ6IHRydWVcIiA6IFwiXCJcbiAgICAgIH0gfSk7XG5leHBvcnQgdHlwZSAke2VudGl0eUlkfVNhdmVQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiAke2VudGl0eUlkfVNhdmVQYXJhbXM+O1xuXG4gICAgICBgLnRyaW0oKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJTb25hbXUiLCJFbnRpdHlNYW5hZ2VyIiwiVGVtcGxhdGUiLCJUZW1wbGF0ZV9faW5pdF90eXBlcyIsImdldFRhcmdldEFuZFBhdGgiLCJuYW1lcyIsImRpciIsImNvbmZpZyIsImFwaSIsInRhcmdldCIsInBhdGgiLCJmcyIsInJlbmRlciIsImVudGl0eUlkIiwiZ2V0TmFtZXNGcm9tSWQiLCJoYXNDcmVhdGVkQXQiLCJnZXQiLCJwcm9wcyIsImZpbmQiLCJwcm9wIiwibmFtZSIsInVuZGVmaW5lZCIsImJvZHkiLCJ0cmltIiwiaW1wb3J0S2V5cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFBTSxRQUFRLHFCQUFZO0FBQ25DLFNBQVNDLGFBQWEsUUFBZ0MsaUNBQThCO0FBRXBGLFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUV2QyxPQUFPLE1BQU1DLDZCQUE2QkQ7SUFDeEMsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFFLGlCQUFpQkMsS0FBd0IsRUFBRTtRQUN6QyxNQUFNLEVBQUVDLEdBQUcsRUFBRSxHQUFHTixPQUFPTyxNQUFNLENBQUNDLEdBQUc7UUFFakMsT0FBTztZQUNMQyxRQUFRLEdBQUdILElBQUksZ0JBQWdCLENBQUM7WUFDaENJLE1BQU0sR0FBR0wsTUFBTU0sRUFBRSxDQUFDLENBQUMsRUFBRU4sTUFBTU0sRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUMxQztJQUNGO0lBRUFDLE9BQU8sRUFBRUMsUUFBUSxFQUFpQyxFQUFFO1FBQ2xELE1BQU1SLFFBQVFKLGNBQWNhLGNBQWMsQ0FBQ0Q7UUFFM0MsTUFBTUUsZUFDSmQsY0FBY2UsR0FBRyxDQUFDSCxVQUFVSSxLQUFLLENBQUNDLElBQUksQ0FBQyxDQUFDQyxPQUFTQSxLQUFLQyxJQUFJLEtBQUssa0JBQWtCQztRQUVuRixPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUNqQixnQkFBZ0IsQ0FBQ0MsTUFBTTtZQUMvQmlCLE1BQU0sQ0FBQzs7U0FFSixFQUFFVCxTQUFTLFlBQVksRUFBRUEsU0FBUzs7R0FFeEMsRUFBRUEsU0FBUzthQUNELEVBQUVBLFNBQVMsYUFBYSxFQUFFQSxTQUFTO1lBQ3BDLEVBQUVBLFNBQVMsNEJBQTRCLEVBQUVBLFNBQVM7O0dBRTNELEVBQUVBLFNBQVM7YUFDRCxFQUFFQSxTQUFTLGFBQWEsRUFBRUEsU0FBUyw2QkFBNkIsRUFDckVFLGVBQWUsdUJBQXVCLEdBQ3ZDO1lBQ0ssRUFBRUYsU0FBUyw0QkFBNEIsRUFBRUEsU0FBUzs7TUFFeEQsQ0FBQyxDQUFDVSxJQUFJO1lBQ05DLFlBQVksRUFBRTtRQUNoQjtJQUNGO0FBQ0YifQ==
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvaW5pdF90eXBlcy50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9faW5pdF90eXBlcyBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJpbml0X3R5cGVzXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICBjb25zdCB7IGRpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc30vJHtuYW1lcy5mc30udHlwZXMudHNgLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJpbml0X3R5cGVzXCJdKSB7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgICBjb25zdCBwYXJ0aWFsQ29sdW1ucyA9IFtcImlkXCJdO1xuICAgIGlmIChlbnRpdHkucHJvcHMuc29tZSgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBcImNyZWF0ZWRfYXRcIikpIHtcbiAgICAgIHBhcnRpYWxDb2x1bW5zLnB1c2goXCJjcmVhdGVkX2F0XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHdyaXRlSW5lbGlnaWJsZUNvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PlxuICAgICAgICAgIHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiICYmIChwcm9wLmdlbmVyYXRlZCAhPT0gdW5kZWZpbmVkIHx8IHByb3AudHlwZSA9PT0gXCJzZWFyY2hUZXh0XCIpLFxuICAgICAgKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIGNvbnN0IG9taXRHZW5lcmF0ZWRDb2x1bW5zID1cbiAgICAgIHdyaXRlSW5lbGlnaWJsZUNvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICA/IGAub21pdCh7ICR7d3JpdGVJbmVsaWdpYmxlQ29sdW1ucy5tYXAoKGNvbHVtbikgPT4gYCR7Y29sdW1ufTogdHJ1ZWApLmpvaW4oXCIsIFwiKX0gfSlgXG4gICAgICAgIDogXCJcIjtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7ICR7ZW50aXR5SWR9QmFzZVNjaGVtYSwgJHtlbnRpdHlJZH1CYXNlTGlzdFBhcmFtcyB9IGZyb20gXCIuLi9zb25hbXUuZ2VuZXJhdGVkXCI7XG5cbi8vICR7ZW50aXR5SWR9IC0gTGlzdFBhcmFtc1xuZXhwb3J0IGNvbnN0ICR7ZW50aXR5SWR9TGlzdFBhcmFtcyA9ICR7ZW50aXR5SWR9QmFzZUxpc3RQYXJhbXM7XG5leHBvcnQgdHlwZSAke2VudGl0eUlkfUxpc3RQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiAke2VudGl0eUlkfUxpc3RQYXJhbXM+O1xuXG4vLyAke2VudGl0eUlkfSAtIFNhdmVQYXJhbXNcbmV4cG9ydCBjb25zdCAke2VudGl0eUlkfVNhdmVQYXJhbXMgPSAke2VudGl0eUlkfUJhc2VTY2hlbWEke29taXRHZW5lcmF0ZWRDb2x1bW5zfS5wYXJ0aWFsKHsgJHtwYXJ0aWFsQ29sdW1uc1xuICAgICAgICAubWFwKChjb2x1bW4pID0+IGAke2NvbHVtbn06IHRydWVgKVxuICAgICAgICAuam9pbihcIiwgXCIpfSB9KTtcbmV4cG9ydCB0eXBlICR7ZW50aXR5SWR9U2F2ZVBhcmFtcyA9IHouaW5mZXI8dHlwZW9mICR7ZW50aXR5SWR9U2F2ZVBhcmFtcz47XG5cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlNvbmFtdSIsIkVudGl0eU1hbmFnZXIiLCJUZW1wbGF0ZSIsIlRlbXBsYXRlX19pbml0X3R5cGVzIiwiZ2V0VGFyZ2V0QW5kUGF0aCIsIm5hbWVzIiwiZGlyIiwiY29uZmlnIiwiYXBpIiwidGFyZ2V0IiwicGF0aCIsImZzIiwicmVuZGVyIiwiZW50aXR5SWQiLCJnZXROYW1lc0Zyb21JZCIsImVudGl0eSIsImdldCIsInBhcnRpYWxDb2x1bW5zIiwicHJvcHMiLCJzb21lIiwicHJvcCIsIm5hbWUiLCJwdXNoIiwid3JpdGVJbmVsaWdpYmxlQ29sdW1ucyIsImZpbHRlciIsInR5cGUiLCJnZW5lcmF0ZWQiLCJ1bmRlZmluZWQiLCJtYXAiLCJvbWl0R2VuZXJhdGVkQ29sdW1ucyIsImxlbmd0aCIsImNvbHVtbiIsImpvaW4iLCJib2R5IiwidHJpbSIsImltcG9ydEtleXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE1BQU0sUUFBUSxxQkFBWTtBQUNuQyxTQUFTQyxhQUFhLFFBQWdDLGlDQUE4QjtBQUVwRixTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFFdkMsT0FBTyxNQUFNQyw2QkFBNkJEO0lBQ3hDLGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBRSxpQkFBaUJDLEtBQXdCLEVBQUU7UUFDekMsTUFBTSxFQUFFQyxHQUFHLEVBQUUsR0FBR04sT0FBT08sTUFBTSxDQUFDQyxHQUFHO1FBRWpDLE9BQU87WUFDTEMsUUFBUSxHQUFHSCxJQUFJLGdCQUFnQixDQUFDO1lBQ2hDSSxNQUFNLEdBQUdMLE1BQU1NLEVBQUUsQ0FBQyxDQUFDLEVBQUVOLE1BQU1NLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDMUM7SUFDRjtJQUVBQyxPQUFPLEVBQUVDLFFBQVEsRUFBaUMsRUFBRTtRQUNsRCxNQUFNUixRQUFRSixjQUFjYSxjQUFjLENBQUNEO1FBQzNDLE1BQU1FLFNBQVNkLGNBQWNlLEdBQUcsQ0FBQ0g7UUFFakMsTUFBTUksaUJBQWlCO1lBQUM7U0FBSztRQUM3QixJQUFJRixPQUFPRyxLQUFLLENBQUNDLElBQUksQ0FBQyxDQUFDQyxPQUFTQSxLQUFLQyxJQUFJLEtBQUssZUFBZTtZQUMzREosZUFBZUssSUFBSSxDQUFDO1FBQ3RCO1FBRUEsTUFBTUMseUJBQXlCUixPQUFPRyxLQUFLLENBQ3hDTSxNQUFNLENBQ0wsQ0FBQ0osT0FDQ0EsS0FBS0ssSUFBSSxLQUFLLGNBQWVMLENBQUFBLEtBQUtNLFNBQVMsS0FBS0MsYUFBYVAsS0FBS0ssSUFBSSxLQUFLLFlBQVcsR0FFekZHLEdBQUcsQ0FBQyxDQUFDUixPQUFTQSxLQUFLQyxJQUFJO1FBRTFCLE1BQU1RLHVCQUNKTix1QkFBdUJPLE1BQU0sR0FBRyxJQUM1QixDQUFDLFFBQVEsRUFBRVAsdUJBQXVCSyxHQUFHLENBQUMsQ0FBQ0csU0FBVyxHQUFHQSxPQUFPLE1BQU0sQ0FBQyxFQUFFQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FDcEY7UUFFTixPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUM1QixnQkFBZ0IsQ0FBQ0MsTUFBTTtZQUMvQjRCLE1BQU0sQ0FBQzs7U0FFSixFQUFFcEIsU0FBUyxZQUFZLEVBQUVBLFNBQVM7O0dBRXhDLEVBQUVBLFNBQVM7YUFDRCxFQUFFQSxTQUFTLGFBQWEsRUFBRUEsU0FBUztZQUNwQyxFQUFFQSxTQUFTLDRCQUE0QixFQUFFQSxTQUFTOztHQUUzRCxFQUFFQSxTQUFTO2FBQ0QsRUFBRUEsU0FBUyxhQUFhLEVBQUVBLFNBQVMsVUFBVSxFQUFFZ0IscUJBQXFCLFdBQVcsRUFBRVosZUFDckZXLEdBQUcsQ0FBQyxDQUFDRyxTQUFXLEdBQUdBLE9BQU8sTUFBTSxDQUFDLEVBQ2pDQyxJQUFJLENBQUMsTUFBTTtZQUNSLEVBQUVuQixTQUFTLDRCQUE0QixFQUFFQSxTQUFTOztNQUV4RCxDQUFDLENBQUNxQixJQUFJO1lBQ05DLFlBQVksRUFBRTtRQUNoQjtJQUNGO0FBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"zod-converter.d.ts","sourceRoot":"","sources":["../../src/template/zod-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,cAAc,EA2BnB,KAAK,aAAa,EAInB,MAAM,gBAAgB,CAAC;AAcxB;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;CAWjB,CAAC;AAoEX;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAuB7E;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAyF3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAgHrF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA0BjG;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+FxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+GtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,CAAC,CAAC,UAAU,EACrB,OAAO,GAAE,MAAe,GACvB,aAAa,CAmFf"}
1
+ {"version":3,"file":"zod-converter.d.ts","sourceRoot":"","sources":["../../src/template/zod-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,cAAc,EA4BnB,KAAK,aAAa,EAInB,MAAM,gBAAgB,CAAC;AAcxB;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;CAWjB,CAAC;AAoEX;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAuB7E;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CA2F3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAkHrF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA0BjG;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+FxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+GtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,CAAC,CAAC,UAAU,EACrB,OAAO,GAAE,MAAe,GACvB,aAAa,CAmFf"}