sonamu 0.7.53 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/config.d.ts +9 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +1 -1
- package/dist/api/sonamu.d.ts +21 -1
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +159 -65
- package/dist/auth/plugins/entity-definitions/anonymous.d.ts +10 -0
- package/dist/auth/plugins/entity-definitions/anonymous.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/anonymous.js +23 -0
- package/dist/auth/plugins/entity-definitions/api-key.d.ts +9 -0
- package/dist/auth/plugins/entity-definitions/api-key.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/api-key.js +199 -0
- package/dist/auth/plugins/entity-definitions/index.d.ts +6 -0
- package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/index.js +20 -2
- package/dist/auth/plugins/entity-definitions/jwt.d.ts +9 -0
- package/dist/auth/plugins/entity-definitions/jwt.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/jwt.js +67 -0
- package/dist/auth/plugins/entity-definitions/organization.d.ts +9 -0
- package/dist/auth/plugins/entity-definitions/organization.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/organization.js +424 -0
- package/dist/auth/plugins/entity-definitions/passkey.d.ts +10 -0
- package/dist/auth/plugins/entity-definitions/passkey.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/passkey.js +129 -0
- package/dist/auth/plugins/entity-definitions/sso.d.ts +10 -0
- package/dist/auth/plugins/entity-definitions/sso.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/sso.js +110 -0
- 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/auth/plugins/entity-definitions/types.js +1 -1
- package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/admin.js +2 -4
- package/dist/auth/plugins/wrappers/anonymous.d.ts +18 -0
- package/dist/auth/plugins/wrappers/anonymous.d.ts.map +1 -0
- package/dist/auth/plugins/wrappers/anonymous.js +26 -0
- package/dist/auth/plugins/wrappers/api-key.d.ts +18 -0
- package/dist/auth/plugins/wrappers/api-key.d.ts.map +1 -0
- package/dist/auth/plugins/wrappers/api-key.js +38 -0
- package/dist/auth/plugins/wrappers/index.d.ts +6 -0
- package/dist/auth/plugins/wrappers/index.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/index.js +7 -1
- package/dist/auth/plugins/wrappers/jwt.d.ts +18 -0
- package/dist/auth/plugins/wrappers/jwt.d.ts.map +1 -0
- package/dist/auth/plugins/wrappers/jwt.js +30 -0
- package/dist/auth/plugins/wrappers/organization.d.ts +18 -0
- package/dist/auth/plugins/wrappers/organization.d.ts.map +1 -0
- package/dist/auth/plugins/wrappers/organization.js +67 -0
- package/dist/auth/plugins/wrappers/passkey.d.ts +18 -0
- package/dist/auth/plugins/wrappers/passkey.d.ts.map +1 -0
- package/dist/auth/plugins/wrappers/passkey.js +32 -0
- package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/phone-number.js +2 -4
- package/dist/auth/plugins/wrappers/sso.d.ts +853 -0
- package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -0
- package/dist/auth/plugins/wrappers/sso.js +36 -0
- package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/two-factor.js +2 -4
- package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/username.js +2 -4
- package/dist/bin/build-config.d.ts +2 -2
- package/dist/bin/build-config.js +6 -7
- package/dist/bin/cli.js +417 -32
- package/dist/bin/fixture.d.ts +27 -0
- package/dist/bin/fixture.d.ts.map +1 -0
- package/dist/bin/fixture.js +245 -0
- package/dist/cache/decorator.d.ts +4 -3
- package/dist/cache/decorator.d.ts.map +1 -1
- package/dist/cache/decorator.js +5 -4
- package/dist/cone/cone-generator.d.ts +33 -0
- package/dist/cone/cone-generator.d.ts.map +1 -0
- package/dist/cone/cone-generator.js +286 -0
- package/dist/database/_batch_update.d.ts.map +1 -1
- package/dist/database/_batch_update.js +16 -2
- package/dist/database/puri-subset.test-d.js +1 -1
- package/dist/database/puri-subset.types.d.ts +1 -1
- package/dist/database/puri-subset.types.d.ts.map +1 -1
- package/dist/database/puri-subset.types.js +1 -1
- package/dist/database/puri.d.ts +4 -0
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +20 -2
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +19 -3
- package/dist/dict/en.d.ts +15 -0
- package/dist/dict/en.d.ts.map +1 -1
- package/dist/dict/en.js +2 -1
- package/dist/dict/ko.d.ts +15 -0
- package/dist/dict/ko.d.ts.map +1 -1
- package/dist/dict/ko.js +2 -1
- package/dist/dict/rc-keys.d.ts +28 -0
- package/dist/dict/rc-keys.d.ts.map +1 -1
- package/dist/dict/rc-keys.js +31 -1
- package/dist/dict/sd.d.ts.map +1 -1
- package/dist/dict/sd.js +20 -4
- package/dist/entity/entity-manager.d.ts +298 -2
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +4 -1
- package/dist/entity/entity-template-cone.d.ts +14 -0
- package/dist/entity/entity-template-cone.d.ts.map +1 -0
- package/dist/entity/entity-template-cone.js +222 -0
- package/dist/entity/entity.d.ts +47 -2
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +161 -14
- package/dist/ssr/renderer.js +3 -3
- package/dist/syncer/api-parser.js +12 -1
- package/dist/syncer/checksum.d.ts +0 -14
- package/dist/syncer/checksum.d.ts.map +1 -1
- package/dist/syncer/checksum.js +1 -23
- package/dist/syncer/syncer-actions.d.ts.map +1 -1
- package/dist/syncer/syncer-actions.js +8 -2
- package/dist/syncer/syncer.d.ts +1 -1
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +17 -10
- package/dist/tasks/workflow-manager.d.ts +13 -1
- package/dist/tasks/workflow-manager.d.ts.map +1 -1
- package/dist/tasks/workflow-manager.js +18 -1
- package/dist/template/entity-converter.js +4 -4
- package/dist/template/helpers.d.ts +10 -0
- package/dist/template/helpers.d.ts.map +1 -1
- package/dist/template/helpers.js +48 -1
- package/dist/template/implementations/entry-server.template.d.ts +1 -1
- package/dist/template/implementations/entry-server.template.js +7 -2
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +5 -1
- package/dist/template/implementations/generated_http.template.d.ts +1 -0
- package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_http.template.js +6 -2
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_sso.template.js +29 -8
- package/dist/template/implementations/queries.template.d.ts.map +1 -1
- package/dist/template/implementations/queries.template.js +9 -1
- package/dist/template/implementations/sd.template.d.ts +1 -1
- package/dist/template/implementations/sd.template.d.ts.map +1 -1
- package/dist/template/implementations/sd.template.js +28 -4
- package/dist/template/implementations/services.template.d.ts.map +1 -1
- package/dist/template/implementations/services.template.js +12 -12
- package/dist/template/implementations/view_form.template.d.ts +11 -7
- package/dist/template/implementations/view_form.template.d.ts.map +1 -1
- package/dist/template/implementations/view_form.template.js +97 -87
- package/dist/template/implementations/view_list.template.d.ts +3 -3
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +115 -109
- package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
- package/dist/template/implementations/view_search_input.template.js +18 -14
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +95 -7
- package/dist/testing/_relation-graph.js +1 -1
- package/dist/testing/data-explorer.d.ts +61 -0
- package/dist/testing/data-explorer.d.ts.map +1 -0
- package/dist/testing/data-explorer.js +274 -0
- package/dist/testing/faker-mappings.d.ts +20 -0
- package/dist/testing/faker-mappings.d.ts.map +1 -0
- package/dist/testing/faker-mappings.js +421 -0
- package/dist/testing/fixture-generator.d.ts +161 -0
- package/dist/testing/fixture-generator.d.ts.map +1 -0
- package/dist/testing/fixture-generator.js +954 -0
- package/dist/testing/fixture-manager.d.ts +6 -1
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +72 -4
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +4 -1
- package/dist/types/types.d.ts +1520 -26
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +136 -22
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +9 -4
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +303 -24
- package/dist/ui-web/assets/index-CsUr-_pV.js +254 -0
- package/dist/ui-web/assets/index-T42zzs1K.css +1 -0
- package/dist/ui-web/index.html +2 -2
- package/dist/utils/fs-utils.d.ts +2 -1
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +14 -3
- package/package.json +19 -11
- package/src/api/config.ts +12 -1
- package/src/api/sonamu.ts +179 -65
- package/src/auth/plugins/entity-definitions/anonymous.ts +17 -0
- package/src/auth/plugins/entity-definitions/api-key.ts +93 -0
- package/src/auth/plugins/entity-definitions/index.ts +18 -0
- package/src/auth/plugins/entity-definitions/jwt.ts +35 -0
- package/src/auth/plugins/entity-definitions/organization.ts +215 -0
- package/src/auth/plugins/entity-definitions/passkey.ts +64 -0
- package/src/auth/plugins/entity-definitions/sso.ts +62 -0
- package/src/auth/plugins/entity-definitions/types.ts +11 -1
- package/src/auth/plugins/wrappers/admin.ts +1 -3
- package/src/auth/plugins/wrappers/anonymous.ts +30 -0
- package/src/auth/plugins/wrappers/api-key.ts +42 -0
- package/src/auth/plugins/wrappers/index.ts +6 -0
- package/src/auth/plugins/wrappers/jwt.ts +34 -0
- package/src/auth/plugins/wrappers/organization.ts +73 -0
- package/src/auth/plugins/wrappers/passkey.ts +36 -0
- package/src/auth/plugins/wrappers/phone-number.ts +1 -3
- package/src/auth/plugins/wrappers/sso.ts +40 -0
- package/src/auth/plugins/wrappers/two-factor.ts +1 -3
- package/src/auth/plugins/wrappers/username.ts +1 -3
- package/src/bin/build-config.ts +6 -6
- package/src/bin/cli.ts +452 -31
- package/src/bin/fixture.ts +302 -0
- package/src/cache/decorator.ts +4 -3
- package/src/cone/cone-generator.ts +363 -0
- package/src/database/_batch_update.ts +11 -0
- package/src/database/puri-subset.test-d.ts +13 -13
- package/src/database/puri-subset.types.ts +1 -1
- package/src/database/puri.ts +43 -1
- package/src/database/upsert-builder.ts +16 -2
- package/src/dict/en.ts +1 -0
- package/src/dict/ko.ts +1 -0
- package/src/dict/rc-keys.ts +32 -0
- package/src/dict/sd.ts +23 -3
- package/src/entity/entity-manager.ts +4 -0
- package/src/entity/entity-template-cone.ts +298 -0
- package/src/entity/entity.ts +189 -13
- package/src/shared/app.shared.ts.txt +5 -0
- package/src/shared/web.shared.ts.txt +9 -5
- package/src/skills/project/README.md +21 -0
- package/src/skills/project/architecture.md +373 -0
- package/src/skills/project/business-logic.md +270 -0
- package/src/skills/project/requirements.md +160 -0
- package/src/skills/sonamu/SKILL.md +168 -3
- package/src/skills/sonamu/api.md +102 -0
- package/src/skills/sonamu/database.md +220 -1
- package/src/skills/sonamu/entity-relations.md +89 -1
- package/src/skills/sonamu/fixture-cli.md +501 -0
- package/src/skills/sonamu/frontend.md +214 -0
- package/src/skills/sonamu/i18n.md +95 -0
- package/src/skills/sonamu/model.md +153 -0
- package/src/skills/sonamu/project-init.md +178 -8
- package/src/skills/sonamu/scaffolding.md +112 -0
- package/src/skills/sonamu/subset.md +9 -3
- package/src/skills/sonamu/testing.md +287 -2
- package/src/skills/sonamu/workflow.md +70 -5
- package/src/ssr/renderer.ts +2 -2
- package/src/syncer/api-parser.ts +12 -0
- package/src/syncer/checksum.ts +0 -38
- package/src/syncer/syncer-actions.ts +7 -1
- package/src/syncer/syncer.ts +16 -5
- package/src/tasks/workflow-manager.ts +29 -8
- package/src/template/entity-converter.ts +3 -3
- package/src/template/helpers.ts +49 -0
- package/src/template/implementations/entry-server.template.ts +1 -1
- package/src/template/implementations/generated.template.ts +4 -0
- package/src/template/implementations/generated_http.template.ts +1 -0
- package/src/template/implementations/generated_sso.template.ts +40 -11
- package/src/template/implementations/queries.template.ts +8 -0
- package/src/template/implementations/sd.template.ts +22 -3
- package/src/template/implementations/services.template.ts +11 -10
- package/src/template/implementations/view_form.template.ts +111 -101
- package/src/template/implementations/view_list.template.ts +120 -119
- package/src/template/implementations/view_search_input.template.ts +17 -13
- package/src/template/zod-converter.ts +103 -6
- package/src/testing/_relation-graph.ts +1 -1
- package/src/testing/data-explorer.ts +427 -0
- package/src/testing/faker-mappings.ts +434 -0
- package/src/testing/fixture-generator.ts +1166 -0
- package/src/testing/fixture-manager.ts +91 -6
- package/src/testing/index.ts +3 -0
- package/src/types/types.ts +222 -26
- package/src/ui/ai-client.ts +9 -1
- package/src/ui/api.ts +429 -23
- package/src/utils/fs-utils.ts +14 -1
- package/dist/template/implementations/view_enums_select.template.d.ts +0 -17
- package/dist/template/implementations/view_enums_select.template.d.ts.map +0 -1
- package/dist/template/implementations/view_enums_select.template.js +0 -62
- package/dist/template/implementations/view_id_async_select.template.d.ts +0 -17
- package/dist/template/implementations/view_id_async_select.template.d.ts.map +0 -1
- package/dist/template/implementations/view_id_async_select.template.js +0 -125
- package/dist/ui-web/assets/index-Bd_2AkLb.css +0 -1
- package/dist/ui-web/assets/index-BpSbhQWo.js +0 -225
- package/src/template/implementations/view_enums_select.template.ts +0 -65
- package/src/template/implementations/view_id_async_select.template.ts +0 -139
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM을 사용하여 Entity의 cone 메타데이터를 생성합니다.
|
|
3
|
+
*
|
|
4
|
+
* @param context - Entity 정보와 생성 옵션
|
|
5
|
+
* @returns 생성된 cone 메타데이터
|
|
6
|
+
*/ export async function generateCones(context) {
|
|
7
|
+
const apiKey = getApiKey();
|
|
8
|
+
const prompt = buildPrompt(context);
|
|
9
|
+
const { text: responseText, tokensUsed } = await callAnthropicAPI(prompt, apiKey);
|
|
10
|
+
const result = parseConeResponse(responseText);
|
|
11
|
+
result.tokensUsed = tokensUsed;
|
|
12
|
+
if (context.existingCones) {
|
|
13
|
+
if (context.onlyEmpty) {
|
|
14
|
+
return mergeOnlyEmpty(result, context.existingCones);
|
|
15
|
+
}
|
|
16
|
+
return mergeWithExisting(result, context.existingCones);
|
|
17
|
+
}
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* API 키를 가져옵니다.
|
|
22
|
+
*
|
|
23
|
+
* Sonamu.secret 또는 환경변수에서 가져옵니다.
|
|
24
|
+
*/ function getApiKey() {
|
|
25
|
+
// Sonamu.secret은 런타임에 로드되므로 동적으로 import
|
|
26
|
+
let apiKey;
|
|
27
|
+
try {
|
|
28
|
+
// Sonamu가 초기화되어 있는 경우
|
|
29
|
+
const { Sonamu } = require("../api");
|
|
30
|
+
apiKey = Sonamu.secret?.anthropic_api_key;
|
|
31
|
+
} catch {
|
|
32
|
+
// Sonamu가 초기화되지 않은 경우 (테스트 등)
|
|
33
|
+
apiKey = undefined;
|
|
34
|
+
}
|
|
35
|
+
if (!apiKey) {
|
|
36
|
+
apiKey = process.env.ANTHROPIC_API_KEY;
|
|
37
|
+
}
|
|
38
|
+
if (!apiKey) {
|
|
39
|
+
throw new Error("ANTHROPIC_API_KEY not found. " + "Set ANTHROPIC_API_KEY environment variable or add it to sonamu.secret.ts");
|
|
40
|
+
}
|
|
41
|
+
return apiKey;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* LLM 프롬프트를 생성합니다.
|
|
45
|
+
*
|
|
46
|
+
* ai-client.ts 패턴을 참고하여 명확한 지시사항과 출력 형식을 제공합니다.
|
|
47
|
+
*/ function buildPrompt(context) {
|
|
48
|
+
const locale = context.locale || "ko";
|
|
49
|
+
const localeDesc = {
|
|
50
|
+
ko: "Korean",
|
|
51
|
+
en: "English",
|
|
52
|
+
ja: "Japanese"
|
|
53
|
+
}[locale];
|
|
54
|
+
return `You are a Sonamu framework expert. Generate cone metadata for database entity fixture generation.
|
|
55
|
+
|
|
56
|
+
ENTITY STRUCTURE:
|
|
57
|
+
${JSON.stringify(context.entity, null, 2)}
|
|
58
|
+
|
|
59
|
+
LOCALE: ${locale} (${localeDesc})
|
|
60
|
+
|
|
61
|
+
INSTRUCTIONS:
|
|
62
|
+
1. Entity cone metadata:
|
|
63
|
+
- desc: Short description of what this entity represents
|
|
64
|
+
- note: Explain the entity's purpose, relationships, and business context
|
|
65
|
+
- tags: Relevant categorization tags
|
|
66
|
+
- fixtureHint: Overall guidance for generating test data for this entity
|
|
67
|
+
|
|
68
|
+
2. For each prop, generate appropriate cone metadata:
|
|
69
|
+
- desc: Short description in ${localeDesc}
|
|
70
|
+
- note: Additional notes if needed
|
|
71
|
+
- fixtureHint: Detailed guidance for realistic test data generation
|
|
72
|
+
- fixtureGenerator: faker.js expression when applicable
|
|
73
|
+
|
|
74
|
+
3. Field type → faker.js mapping:
|
|
75
|
+
- email → faker.internet.email()
|
|
76
|
+
- phone → faker.phone.number()
|
|
77
|
+
- name/username → faker.person.fullName() (with locale)
|
|
78
|
+
- birth_date → faker.date.birthdate({ min: 18, max: 65, mode: 'age' })
|
|
79
|
+
- salary → faker.number.int({ min: 30_000_000, max: 150_000_000 }) for ko locale
|
|
80
|
+
- company_name → faker.company.name()
|
|
81
|
+
- address → faker.location.streetAddress()
|
|
82
|
+
|
|
83
|
+
4. Relation fields (BelongsToOne, OneToOne with hasJoinColumn):
|
|
84
|
+
- Always add dataSource: { strategy: "recent", config: { limit: 3-5 } }
|
|
85
|
+
- fixtureHint: Explain that it references existing data
|
|
86
|
+
|
|
87
|
+
5. Subsets cone metadata (IMPORTANT - generate for ALL subsets):
|
|
88
|
+
- desc: Describe what this subset represents and what fields it includes
|
|
89
|
+
- note: Explain the use case and when to use this subset
|
|
90
|
+
|
|
91
|
+
6. Enums cone metadata (IMPORTANT - generate for ALL enums):
|
|
92
|
+
- desc: Describe what this enum represents
|
|
93
|
+
- fixtureHint: If any prop uses this enum type, copy that prop's fixtureHint here
|
|
94
|
+
Example: If prop "status" (type: enum, enum: "UserStatus") has fixtureHint "User status: active, inactive, suspended",
|
|
95
|
+
then UserStatus enum's fixtureHint should be the same
|
|
96
|
+
- For each enum value, provide desc explaining what that specific value means
|
|
97
|
+
|
|
98
|
+
7. Korean field names (locale=ko):
|
|
99
|
+
- Infer meaning and generate appropriate faker
|
|
100
|
+
- "이름" → faker.person.fullName()
|
|
101
|
+
- "생년월일" → faker.date.birthdate()
|
|
102
|
+
- "주소" → faker.location.streetAddress()
|
|
103
|
+
|
|
104
|
+
8. Locale-specific values:
|
|
105
|
+
- ko: Korean names, addresses, phone numbers (010-XXXX-XXXX format)
|
|
106
|
+
- en: English names, US addresses
|
|
107
|
+
- ja: Japanese names, addresses
|
|
108
|
+
|
|
109
|
+
${context.existingCones ? `
|
|
110
|
+
EXISTING CONES (preserve these if present):
|
|
111
|
+
${JSON.stringify(context.existingCones, null, 2)}
|
|
112
|
+
` : ""}
|
|
113
|
+
|
|
114
|
+
OUTPUT FORMAT:
|
|
115
|
+
Return ONLY valid JSON (no markdown, no code blocks). Use this exact structure:
|
|
116
|
+
{
|
|
117
|
+
"entityCone": {
|
|
118
|
+
"desc": "${localeDesc} description of the entity",
|
|
119
|
+
"note": "Optional detailed notes about the entity's purpose and relationships",
|
|
120
|
+
"tags": ["optional", "tags"],
|
|
121
|
+
"fixtureHint": "Guidance for generating fixtures of this entity (what to consider, relationships, constraints)"
|
|
122
|
+
},
|
|
123
|
+
"propCones": {
|
|
124
|
+
"prop_name": {
|
|
125
|
+
"desc": "${localeDesc} description",
|
|
126
|
+
"note": "Optional additional notes about this field",
|
|
127
|
+
"fixtureHint": "Detailed generation guidance for this specific field",
|
|
128
|
+
"fixtureGenerator": "faker.xxx.yyy()",
|
|
129
|
+
"dataSource": { "strategy": "recent", "config": { "limit": 5 } } // Only for relation fields
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
"subsetCones": {
|
|
133
|
+
"A": {
|
|
134
|
+
"desc": "${localeDesc} description of subset A",
|
|
135
|
+
"note": "What fields are included in this subset",
|
|
136
|
+
"fixtureHint": "Optional guidance if this subset affects fixture generation"
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
"enumCones": {
|
|
140
|
+
"EnumName": {
|
|
141
|
+
"desc": "${localeDesc} description of the enum",
|
|
142
|
+
"fixtureHint": "Optional guidance for generating enum values in fixtures",
|
|
143
|
+
"values": {
|
|
144
|
+
"VALUE_KEY": {
|
|
145
|
+
"desc": "${localeDesc} description of this enum value"
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
IMPORTANT: Return pure JSON only. Do NOT wrap in markdown code blocks.`;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Anthropic API를 호출하여 LLM 응답을 받습니다.
|
|
156
|
+
*
|
|
157
|
+
* @param prompt - 생성할 프롬프트
|
|
158
|
+
* @param apiKey - Anthropic API 키
|
|
159
|
+
* @returns LLM 응답 텍스트 및 토큰 사용량
|
|
160
|
+
*/ async function callAnthropicAPI(prompt, apiKey) {
|
|
161
|
+
try {
|
|
162
|
+
// @ai-sdk/anthropic과 ai 패키지는 optional dependency이므로 동적 import
|
|
163
|
+
const { createAnthropic } = await import("@ai-sdk/anthropic");
|
|
164
|
+
const { generateText } = await import("ai");
|
|
165
|
+
const anthropic = createAnthropic({
|
|
166
|
+
apiKey
|
|
167
|
+
});
|
|
168
|
+
const { text, usage } = await generateText({
|
|
169
|
+
model: anthropic("claude-sonnet-4-5"),
|
|
170
|
+
prompt
|
|
171
|
+
});
|
|
172
|
+
const tokensUsed = usage?.totalTokens || 0;
|
|
173
|
+
if (usage) {
|
|
174
|
+
console.log(`[Cone Generator] Tokens used: ${tokensUsed}`);
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
text,
|
|
178
|
+
tokensUsed
|
|
179
|
+
};
|
|
180
|
+
} catch (error) {
|
|
181
|
+
if (error && typeof error === "object" && "statusCode" in error) {
|
|
182
|
+
const statusCode = error.statusCode;
|
|
183
|
+
if (statusCode === 429) {
|
|
184
|
+
throw new Error("Rate limit exceeded. Please try again later.");
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
188
|
+
throw new Error(`LLM API failed: ${message}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* LLM 응답을 파싱하여 ConeGenerationResult로 변환합니다.
|
|
193
|
+
*
|
|
194
|
+
* Markdown 코드 블록이 포함되어 있으면 제거합니다.
|
|
195
|
+
*/ function parseConeResponse(text) {
|
|
196
|
+
let jsonText = text.trim();
|
|
197
|
+
jsonText = jsonText.replace(/^```json\s*/i, "");
|
|
198
|
+
jsonText = jsonText.replace(/```\s*$/, "");
|
|
199
|
+
jsonText = jsonText.trim();
|
|
200
|
+
try {
|
|
201
|
+
const parsed = JSON.parse(jsonText);
|
|
202
|
+
if (!parsed.propCones || typeof parsed.propCones !== "object") {
|
|
203
|
+
throw new Error("Invalid response: propCones is required and must be an object");
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
entityCone: parsed.entityCone,
|
|
207
|
+
propCones: parsed.propCones,
|
|
208
|
+
subsetCones: parsed.subsetCones || {},
|
|
209
|
+
enumCones: parsed.enumCones || {},
|
|
210
|
+
tokensUsed: 0
|
|
211
|
+
};
|
|
212
|
+
} catch (error) {
|
|
213
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
214
|
+
throw new Error(`Failed to parse LLM response: ${message}\n\n` + `Original response:\n${text}\n\n` + `Cleaned JSON:\n${jsonText}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* 생성된 cone을 기존 cone과 병합합니다.
|
|
219
|
+
*
|
|
220
|
+
* 기존 cone이 있으면 보존하고, 없는 경우에만 생성된 cone을 사용합니다.
|
|
221
|
+
*/ function mergeWithExisting(generated, existing) {
|
|
222
|
+
const result = {
|
|
223
|
+
...generated
|
|
224
|
+
};
|
|
225
|
+
const entityKey = `entity:${generated.entityCone ? "present" : "missing"}`;
|
|
226
|
+
if (existing[entityKey]) {
|
|
227
|
+
result.entityCone = existing[entityKey];
|
|
228
|
+
}
|
|
229
|
+
for (const propName of Object.keys(generated.propCones)){
|
|
230
|
+
const key = `prop:${propName}`;
|
|
231
|
+
if (existing[key]) {
|
|
232
|
+
result.propCones[propName] = existing[key];
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
for (const enumId of Object.keys(generated.enumCones)){
|
|
236
|
+
const key = `enum:${enumId}`;
|
|
237
|
+
if (existing[key]) {
|
|
238
|
+
result.enumCones[enumId] = existing[key];
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
for (const subsetKey of Object.keys(generated.subsetCones)){
|
|
242
|
+
const key = `subset:${subsetKey}`;
|
|
243
|
+
if (existing[key]) {
|
|
244
|
+
result.subsetCones[subsetKey] = existing[key];
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return result;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* fixtureHint가 없는 cone만 생성하고 나머지는 보존합니다.
|
|
251
|
+
*
|
|
252
|
+
* 기존 cone에 fixtureHint가 있으면 보존하고, 없으면 새로 생성된 cone을 사용합니다.
|
|
253
|
+
*/ function mergeOnlyEmpty(generated, existing) {
|
|
254
|
+
const result = {
|
|
255
|
+
...generated
|
|
256
|
+
};
|
|
257
|
+
// Entity cone: fixtureHint가 있으면 보존
|
|
258
|
+
const entityKey = `entity:${generated.entityCone ? "present" : "missing"}`;
|
|
259
|
+
if (existing[entityKey]?.fixtureHint) {
|
|
260
|
+
result.entityCone = existing[entityKey];
|
|
261
|
+
}
|
|
262
|
+
// Prop cones: fixtureHint가 있으면 보존
|
|
263
|
+
for (const propName of Object.keys(generated.propCones)){
|
|
264
|
+
const key = `prop:${propName}`;
|
|
265
|
+
if (existing[key]?.fixtureHint) {
|
|
266
|
+
result.propCones[propName] = existing[key];
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Enum cones: fixtureHint가 있으면 보존 (enum은 보통 fixtureHint가 없지만 일관성을 위해)
|
|
270
|
+
for (const enumId of Object.keys(generated.enumCones)){
|
|
271
|
+
const key = `enum:${enumId}`;
|
|
272
|
+
if (existing[key]?.fixtureHint) {
|
|
273
|
+
result.enumCones[enumId] = existing[key];
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// Subset cones: fixtureHint가 있으면 보존 (subset도 보통 fixtureHint가 없지만 일관성을 위해)
|
|
277
|
+
for (const subsetKey of Object.keys(generated.subsetCones)){
|
|
278
|
+
const key = `subset:${subsetKey}`;
|
|
279
|
+
if (existing[key]?.fixtureHint) {
|
|
280
|
+
result.subsetCones[subsetKey] = existing[key];
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return result;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25lL2NvbmUtZ2VuZXJhdG9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uZSwgRW50aXR5SnNvbiB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG4vKipcbiAqIENvbmUg7IOd7ISxIOy7qO2FjeyKpO2KuFxuICpcbiAqIEVudGl0eSDsoJXrs7TsmYAg7IOd7ISxIOyYteyFmOydhCDri7Tqs6Ag7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgdHlwZSBDb25lR2VuZXJhdGlvbkNvbnRleHQgPSB7XG4gIGVudGl0eTogRW50aXR5SnNvbjtcbiAgbG9jYWxlPzogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiO1xuICBleGlzdGluZ0NvbmVzPzogUmVjb3JkPHN0cmluZywgQ29uZT47XG4gIC8qKiB0cnVl7J24IOqyveyasCBmaXh0dXJlSGludOqwgCDsl4bripQgY29uZeunjCDsg53shLEgKi9cbiAgb25seUVtcHR5PzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQ29uZSDsg53shLEg6rKw6rO8XG4gKlxuICogRW50aXR5LCBQcm9wcywgU3Vic2V0cywgRW51bXPsnZggY29uZSDrqZTtg4DrjbDsnbTthLDrpbwg64u06rOgIOyeiOyKteuLiOuLpC5cbiAqL1xuZXhwb3J0IHR5cGUgQ29uZUdlbmVyYXRpb25SZXN1bHQgPSB7XG4gIGVudGl0eUNvbmU/OiBDb25lO1xuICBwcm9wQ29uZXM6IFJlY29yZDxzdHJpbmcsIENvbmU+O1xuICBzdWJzZXRDb25lczogUmVjb3JkPHN0cmluZywgQ29uZT47XG4gIGVudW1Db25lczogUmVjb3JkPHN0cmluZywgQ29uZT47XG4gIHRva2Vuc1VzZWQ6IG51bWJlcjtcbn07XG5cbi8qKlxuICogTExN7J2EIOyCrOyaqe2VmOyXrCBFbnRpdHnsnZggY29uZSDrqZTtg4DrjbDsnbTthLDrpbwg7IOd7ISx7ZWp64uI64ukLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IC0gRW50aXR5IOygleuztOyZgCDsg53shLEg7Ji17IWYXG4gKiBAcmV0dXJucyDsg53shLHrkJwgY29uZSDrqZTtg4DrjbDsnbTthLBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQ29uZXMoY29udGV4dDogQ29uZUdlbmVyYXRpb25Db250ZXh0KTogUHJvbWlzZTxDb25lR2VuZXJhdGlvblJlc3VsdD4ge1xuICBjb25zdCBhcGlLZXkgPSBnZXRBcGlLZXkoKTtcbiAgY29uc3QgcHJvbXB0ID0gYnVpbGRQcm9tcHQoY29udGV4dCk7XG4gIGNvbnN0IHsgdGV4dDogcmVzcG9uc2VUZXh0LCB0b2tlbnNVc2VkIH0gPSBhd2FpdCBjYWxsQW50aHJvcGljQVBJKHByb21wdCwgYXBpS2V5KTtcbiAgY29uc3QgcmVzdWx0ID0gcGFyc2VDb25lUmVzcG9uc2UocmVzcG9uc2VUZXh0KTtcbiAgcmVzdWx0LnRva2Vuc1VzZWQgPSB0b2tlbnNVc2VkO1xuXG4gIGlmIChjb250ZXh0LmV4aXN0aW5nQ29uZXMpIHtcbiAgICBpZiAoY29udGV4dC5vbmx5RW1wdHkpIHtcbiAgICAgIHJldHVybiBtZXJnZU9ubHlFbXB0eShyZXN1bHQsIGNvbnRleHQuZXhpc3RpbmdDb25lcyk7XG4gICAgfVxuICAgIHJldHVybiBtZXJnZVdpdGhFeGlzdGluZyhyZXN1bHQsIGNvbnRleHQuZXhpc3RpbmdDb25lcyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEFQSSDtgqTrpbwg6rCA7KC47Ji164uI64ukLlxuICpcbiAqIFNvbmFtdS5zZWNyZXQg65iQ64qUIO2ZmOqyveuzgOyImOyXkOyEnCDqsIDsoLjsmLXri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGdldEFwaUtleSgpOiBzdHJpbmcge1xuICAvLyBTb25hbXUuc2VjcmV07J2AIOufsO2DgOyehOyXkCDroZzrk5zrkJjrr4DroZwg64+Z7KCB7Jy866GcIGltcG9ydFxuICBsZXQgYXBpS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICAvLyBTb25hbXXqsIAg7LSI6riw7ZmU65CY7Ja0IOyeiOuKlCDqsr3smrBcbiAgICBjb25zdCB7IFNvbmFtdSB9ID0gcmVxdWlyZShcIi4uL2FwaVwiKTtcbiAgICBhcGlLZXkgPSBTb25hbXUuc2VjcmV0Py5hbnRocm9waWNfYXBpX2tleTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gU29uYW116rCAIOy0iOq4sO2ZlOuQmOyngCDslYrsnYAg6rK97JqwICjthYzsiqTtirgg65OxKVxuICAgIGFwaUtleSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICghYXBpS2V5KSB7XG4gICAgYXBpS2V5ID0gcHJvY2Vzcy5lbnYuQU5USFJPUElDX0FQSV9LRVk7XG4gIH1cblxuICBpZiAoIWFwaUtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQU5USFJPUElDX0FQSV9LRVkgbm90IGZvdW5kLiBcIiArXG4gICAgICAgIFwiU2V0IEFOVEhST1BJQ19BUElfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIGFkZCBpdCB0byBzb25hbXUuc2VjcmV0LnRzXCIsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBhcGlLZXk7XG59XG5cbi8qKlxuICogTExNIO2UhOuhrO2UhO2KuOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogYWktY2xpZW50LnRzIO2MqO2EtOydhCDssLjqs6DtlZjsl6wg66qF7ZmV7ZWcIOyngOyLnOyCrO2VreqzvCDstpzroKUg7ZiV7Iud7J2EIOygnOqzte2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRQcm9tcHQoY29udGV4dDogQ29uZUdlbmVyYXRpb25Db250ZXh0KTogc3RyaW5nIHtcbiAgY29uc3QgbG9jYWxlID0gY29udGV4dC5sb2NhbGUgfHwgXCJrb1wiO1xuICBjb25zdCBsb2NhbGVEZXNjID0ge1xuICAgIGtvOiBcIktvcmVhblwiLFxuICAgIGVuOiBcIkVuZ2xpc2hcIixcbiAgICBqYTogXCJKYXBhbmVzZVwiLFxuICB9W2xvY2FsZV07XG5cbiAgcmV0dXJuIGBZb3UgYXJlIGEgU29uYW11IGZyYW1ld29yayBleHBlcnQuIEdlbmVyYXRlIGNvbmUgbWV0YWRhdGEgZm9yIGRhdGFiYXNlIGVudGl0eSBmaXh0dXJlIGdlbmVyYXRpb24uXG5cbkVOVElUWSBTVFJVQ1RVUkU6XG4ke0pTT04uc3RyaW5naWZ5KGNvbnRleHQuZW50aXR5LCBudWxsLCAyKX1cblxuTE9DQUxFOiAke2xvY2FsZX0gKCR7bG9jYWxlRGVzY30pXG5cbklOU1RSVUNUSU9OUzpcbjEuIEVudGl0eSBjb25lIG1ldGFkYXRhOlxuICAgLSBkZXNjOiBTaG9ydCBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgZW50aXR5IHJlcHJlc2VudHNcbiAgIC0gbm90ZTogRXhwbGFpbiB0aGUgZW50aXR5J3MgcHVycG9zZSwgcmVsYXRpb25zaGlwcywgYW5kIGJ1c2luZXNzIGNvbnRleHRcbiAgIC0gdGFnczogUmVsZXZhbnQgY2F0ZWdvcml6YXRpb24gdGFnc1xuICAgLSBmaXh0dXJlSGludDogT3ZlcmFsbCBndWlkYW5jZSBmb3IgZ2VuZXJhdGluZyB0ZXN0IGRhdGEgZm9yIHRoaXMgZW50aXR5XG5cbjIuIEZvciBlYWNoIHByb3AsIGdlbmVyYXRlIGFwcHJvcHJpYXRlIGNvbmUgbWV0YWRhdGE6XG4gICAtIGRlc2M6IFNob3J0IGRlc2NyaXB0aW9uIGluICR7bG9jYWxlRGVzY31cbiAgIC0gbm90ZTogQWRkaXRpb25hbCBub3RlcyBpZiBuZWVkZWRcbiAgIC0gZml4dHVyZUhpbnQ6IERldGFpbGVkIGd1aWRhbmNlIGZvciByZWFsaXN0aWMgdGVzdCBkYXRhIGdlbmVyYXRpb25cbiAgIC0gZml4dHVyZUdlbmVyYXRvcjogZmFrZXIuanMgZXhwcmVzc2lvbiB3aGVuIGFwcGxpY2FibGVcblxuMy4gRmllbGQgdHlwZSDihpIgZmFrZXIuanMgbWFwcGluZzpcbiAgIC0gZW1haWwg4oaSIGZha2VyLmludGVybmV0LmVtYWlsKClcbiAgIC0gcGhvbmUg4oaSIGZha2VyLnBob25lLm51bWJlcigpXG4gICAtIG5hbWUvdXNlcm5hbWUg4oaSIGZha2VyLnBlcnNvbi5mdWxsTmFtZSgpICh3aXRoIGxvY2FsZSlcbiAgIC0gYmlydGhfZGF0ZSDihpIgZmFrZXIuZGF0ZS5iaXJ0aGRhdGUoeyBtaW46IDE4LCBtYXg6IDY1LCBtb2RlOiAnYWdlJyB9KVxuICAgLSBzYWxhcnkg4oaSIGZha2VyLm51bWJlci5pbnQoeyBtaW46IDMwXzAwMF8wMDAsIG1heDogMTUwXzAwMF8wMDAgfSkgZm9yIGtvIGxvY2FsZVxuICAgLSBjb21wYW55X25hbWUg4oaSIGZha2VyLmNvbXBhbnkubmFtZSgpXG4gICAtIGFkZHJlc3Mg4oaSIGZha2VyLmxvY2F0aW9uLnN0cmVldEFkZHJlc3MoKVxuXG40LiBSZWxhdGlvbiBmaWVsZHMgKEJlbG9uZ3NUb09uZSwgT25lVG9PbmUgd2l0aCBoYXNKb2luQ29sdW1uKTpcbiAgIC0gQWx3YXlzIGFkZCBkYXRhU291cmNlOiB7IHN0cmF0ZWd5OiBcInJlY2VudFwiLCBjb25maWc6IHsgbGltaXQ6IDMtNSB9IH1cbiAgIC0gZml4dHVyZUhpbnQ6IEV4cGxhaW4gdGhhdCBpdCByZWZlcmVuY2VzIGV4aXN0aW5nIGRhdGFcblxuNS4gU3Vic2V0cyBjb25lIG1ldGFkYXRhIChJTVBPUlRBTlQgLSBnZW5lcmF0ZSBmb3IgQUxMIHN1YnNldHMpOlxuICAgLSBkZXNjOiBEZXNjcmliZSB3aGF0IHRoaXMgc3Vic2V0IHJlcHJlc2VudHMgYW5kIHdoYXQgZmllbGRzIGl0IGluY2x1ZGVzXG4gICAtIG5vdGU6IEV4cGxhaW4gdGhlIHVzZSBjYXNlIGFuZCB3aGVuIHRvIHVzZSB0aGlzIHN1YnNldFxuXG42LiBFbnVtcyBjb25lIG1ldGFkYXRhIChJTVBPUlRBTlQgLSBnZW5lcmF0ZSBmb3IgQUxMIGVudW1zKTpcbiAgIC0gZGVzYzogRGVzY3JpYmUgd2hhdCB0aGlzIGVudW0gcmVwcmVzZW50c1xuICAgLSBmaXh0dXJlSGludDogSWYgYW55IHByb3AgdXNlcyB0aGlzIGVudW0gdHlwZSwgY29weSB0aGF0IHByb3AncyBmaXh0dXJlSGludCBoZXJlXG4gICAgIEV4YW1wbGU6IElmIHByb3AgXCJzdGF0dXNcIiAodHlwZTogZW51bSwgZW51bTogXCJVc2VyU3RhdHVzXCIpIGhhcyBmaXh0dXJlSGludCBcIlVzZXIgc3RhdHVzOiBhY3RpdmUsIGluYWN0aXZlLCBzdXNwZW5kZWRcIixcbiAgICAgICAgICAgICAgdGhlbiBVc2VyU3RhdHVzIGVudW0ncyBmaXh0dXJlSGludCBzaG91bGQgYmUgdGhlIHNhbWVcbiAgIC0gRm9yIGVhY2ggZW51bSB2YWx1ZSwgcHJvdmlkZSBkZXNjIGV4cGxhaW5pbmcgd2hhdCB0aGF0IHNwZWNpZmljIHZhbHVlIG1lYW5zXG5cbjcuIEtvcmVhbiBmaWVsZCBuYW1lcyAobG9jYWxlPWtvKTpcbiAgIC0gSW5mZXIgbWVhbmluZyBhbmQgZ2VuZXJhdGUgYXBwcm9wcmlhdGUgZmFrZXJcbiAgIC0gXCLsnbTrpoRcIiDihpIgZmFrZXIucGVyc29uLmZ1bGxOYW1lKClcbiAgIC0gXCLsg53rhYTsm5TsnbxcIiDihpIgZmFrZXIuZGF0ZS5iaXJ0aGRhdGUoKVxuICAgLSBcIuyjvOyGjFwiIOKGkiBmYWtlci5sb2NhdGlvbi5zdHJlZXRBZGRyZXNzKClcblxuOC4gTG9jYWxlLXNwZWNpZmljIHZhbHVlczpcbiAgIC0ga286IEtvcmVhbiBuYW1lcywgYWRkcmVzc2VzLCBwaG9uZSBudW1iZXJzICgwMTAtWFhYWC1YWFhYIGZvcm1hdClcbiAgIC0gZW46IEVuZ2xpc2ggbmFtZXMsIFVTIGFkZHJlc3Nlc1xuICAgLSBqYTogSmFwYW5lc2UgbmFtZXMsIGFkZHJlc3Nlc1xuXG4ke1xuICBjb250ZXh0LmV4aXN0aW5nQ29uZXNcbiAgICA/IGBcbkVYSVNUSU5HIENPTkVTIChwcmVzZXJ2ZSB0aGVzZSBpZiBwcmVzZW50KTpcbiR7SlNPTi5zdHJpbmdpZnkoY29udGV4dC5leGlzdGluZ0NvbmVzLCBudWxsLCAyKX1cbmBcbiAgICA6IFwiXCJcbn1cblxuT1VUUFVUIEZPUk1BVDpcblJldHVybiBPTkxZIHZhbGlkIEpTT04gKG5vIG1hcmtkb3duLCBubyBjb2RlIGJsb2NrcykuIFVzZSB0aGlzIGV4YWN0IHN0cnVjdHVyZTpcbntcbiAgXCJlbnRpdHlDb25lXCI6IHtcbiAgICBcImRlc2NcIjogXCIke2xvY2FsZURlc2N9IGRlc2NyaXB0aW9uIG9mIHRoZSBlbnRpdHlcIixcbiAgICBcIm5vdGVcIjogXCJPcHRpb25hbCBkZXRhaWxlZCBub3RlcyBhYm91dCB0aGUgZW50aXR5J3MgcHVycG9zZSBhbmQgcmVsYXRpb25zaGlwc1wiLFxuICAgIFwidGFnc1wiOiBbXCJvcHRpb25hbFwiLCBcInRhZ3NcIl0sXG4gICAgXCJmaXh0dXJlSGludFwiOiBcIkd1aWRhbmNlIGZvciBnZW5lcmF0aW5nIGZpeHR1cmVzIG9mIHRoaXMgZW50aXR5ICh3aGF0IHRvIGNvbnNpZGVyLCByZWxhdGlvbnNoaXBzLCBjb25zdHJhaW50cylcIlxuICB9LFxuICBcInByb3BDb25lc1wiOiB7XG4gICAgXCJwcm9wX25hbWVcIjoge1xuICAgICAgXCJkZXNjXCI6IFwiJHtsb2NhbGVEZXNjfSBkZXNjcmlwdGlvblwiLFxuICAgICAgXCJub3RlXCI6IFwiT3B0aW9uYWwgYWRkaXRpb25hbCBub3RlcyBhYm91dCB0aGlzIGZpZWxkXCIsXG4gICAgICBcImZpeHR1cmVIaW50XCI6IFwiRGV0YWlsZWQgZ2VuZXJhdGlvbiBndWlkYW5jZSBmb3IgdGhpcyBzcGVjaWZpYyBmaWVsZFwiLFxuICAgICAgXCJmaXh0dXJlR2VuZXJhdG9yXCI6IFwiZmFrZXIueHh4Lnl5eSgpXCIsXG4gICAgICBcImRhdGFTb3VyY2VcIjogeyBcInN0cmF0ZWd5XCI6IFwicmVjZW50XCIsIFwiY29uZmlnXCI6IHsgXCJsaW1pdFwiOiA1IH0gfSAgLy8gT25seSBmb3IgcmVsYXRpb24gZmllbGRzXG4gICAgfVxuICB9LFxuICBcInN1YnNldENvbmVzXCI6IHtcbiAgICBcIkFcIjoge1xuICAgICAgXCJkZXNjXCI6IFwiJHtsb2NhbGVEZXNjfSBkZXNjcmlwdGlvbiBvZiBzdWJzZXQgQVwiLFxuICAgICAgXCJub3RlXCI6IFwiV2hhdCBmaWVsZHMgYXJlIGluY2x1ZGVkIGluIHRoaXMgc3Vic2V0XCIsXG4gICAgICBcImZpeHR1cmVIaW50XCI6IFwiT3B0aW9uYWwgZ3VpZGFuY2UgaWYgdGhpcyBzdWJzZXQgYWZmZWN0cyBmaXh0dXJlIGdlbmVyYXRpb25cIlxuICAgIH1cbiAgfSxcbiAgXCJlbnVtQ29uZXNcIjoge1xuICAgIFwiRW51bU5hbWVcIjoge1xuICAgICAgXCJkZXNjXCI6IFwiJHtsb2NhbGVEZXNjfSBkZXNjcmlwdGlvbiBvZiB0aGUgZW51bVwiLFxuICAgICAgXCJmaXh0dXJlSGludFwiOiBcIk9wdGlvbmFsIGd1aWRhbmNlIGZvciBnZW5lcmF0aW5nIGVudW0gdmFsdWVzIGluIGZpeHR1cmVzXCIsXG4gICAgICBcInZhbHVlc1wiOiB7XG4gICAgICAgIFwiVkFMVUVfS0VZXCI6IHtcbiAgICAgICAgICBcImRlc2NcIjogXCIke2xvY2FsZURlc2N9IGRlc2NyaXB0aW9uIG9mIHRoaXMgZW51bSB2YWx1ZVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuSU1QT1JUQU5UOiBSZXR1cm4gcHVyZSBKU09OIG9ubHkuIERvIE5PVCB3cmFwIGluIG1hcmtkb3duIGNvZGUgYmxvY2tzLmA7XG59XG5cbi8qKlxuICogQW50aHJvcGljIEFQSeulvCDtmLjstpztlZjsl6wgTExNIOydkeuLteydhCDrsJvsirXri4jri6QuXG4gKlxuICogQHBhcmFtIHByb21wdCAtIOyDneyEse2VoCDtlITroaztlITtirhcbiAqIEBwYXJhbSBhcGlLZXkgLSBBbnRocm9waWMgQVBJIO2CpFxuICogQHJldHVybnMgTExNIOydkeuLtSDthY3siqTtirgg67CPIO2GoO2BsCDsgqzsmqnrn4lcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2FsbEFudGhyb3BpY0FQSShcbiAgcHJvbXB0OiBzdHJpbmcsXG4gIGFwaUtleTogc3RyaW5nLFxuKTogUHJvbWlzZTx7IHRleHQ6IHN0cmluZzsgdG9rZW5zVXNlZDogbnVtYmVyIH0+IHtcbiAgdHJ5IHtcbiAgICAvLyBAYWktc2RrL2FudGhyb3BpY+qzvCBhaSDtjKjtgqTsp4DripQgb3B0aW9uYWwgZGVwZW5kZW5jeeydtOuvgOuhnCDrj5nsoIEgaW1wb3J0XG4gICAgY29uc3QgeyBjcmVhdGVBbnRocm9waWMgfSA9IGF3YWl0IGltcG9ydChcIkBhaS1zZGsvYW50aHJvcGljXCIpO1xuICAgIGNvbnN0IHsgZ2VuZXJhdGVUZXh0IH0gPSBhd2FpdCBpbXBvcnQoXCJhaVwiKTtcblxuICAgIGNvbnN0IGFudGhyb3BpYyA9IGNyZWF0ZUFudGhyb3BpYyh7XG4gICAgICBhcGlLZXksXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHRleHQsIHVzYWdlIH0gPSBhd2FpdCBnZW5lcmF0ZVRleHQoe1xuICAgICAgbW9kZWw6IGFudGhyb3BpYyhcImNsYXVkZS1zb25uZXQtNC01XCIpLFxuICAgICAgcHJvbXB0LFxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW5zVXNlZCA9IHVzYWdlPy50b3RhbFRva2VucyB8fCAwO1xuICAgIGlmICh1c2FnZSkge1xuICAgICAgY29uc29sZS5sb2coYFtDb25lIEdlbmVyYXRvcl0gVG9rZW5zIHVzZWQ6ICR7dG9rZW5zVXNlZH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB0ZXh0LCB0b2tlbnNVc2VkIH07XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBcInN0YXR1c0NvZGVcIiBpbiBlcnJvcikge1xuICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IChlcnJvciBhcyB7IHN0YXR1c0NvZGU6IG51bWJlciB9KS5zdGF0dXNDb2RlO1xuICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDQyOSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSYXRlIGxpbWl0IGV4Y2VlZGVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYExMTSBBUEkgZmFpbGVkOiAke21lc3NhZ2V9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBMTE0g7J2R64u17J2EIO2MjOyLse2VmOyXrCBDb25lR2VuZXJhdGlvblJlc3VsdOuhnCDrs4DtmZjtlanri4jri6QuXG4gKlxuICogTWFya2Rvd24g7L2U65OcIOu4lOuhneydtCDtj6ztlajrkJjslrQg7J6I7Jy866m0IOygnOqxsO2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VDb25lUmVzcG9uc2UodGV4dDogc3RyaW5nKTogQ29uZUdlbmVyYXRpb25SZXN1bHQge1xuICBsZXQganNvblRleHQgPSB0ZXh0LnRyaW0oKTtcbiAganNvblRleHQgPSBqc29uVGV4dC5yZXBsYWNlKC9eYGBganNvblxccyovaSwgXCJcIik7XG4gIGpzb25UZXh0ID0ganNvblRleHQucmVwbGFjZSgvYGBgXFxzKiQvLCBcIlwiKTtcbiAganNvblRleHQgPSBqc29uVGV4dC50cmltKCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGpzb25UZXh0KTtcblxuICAgIGlmICghcGFyc2VkLnByb3BDb25lcyB8fCB0eXBlb2YgcGFyc2VkLnByb3BDb25lcyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByZXNwb25zZTogcHJvcENvbmVzIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5Q29uZTogcGFyc2VkLmVudGl0eUNvbmUsXG4gICAgICBwcm9wQ29uZXM6IHBhcnNlZC5wcm9wQ29uZXMsXG4gICAgICBzdWJzZXRDb25lczogcGFyc2VkLnN1YnNldENvbmVzIHx8IHt9LFxuICAgICAgZW51bUNvbmVzOiBwYXJzZWQuZW51bUNvbmVzIHx8IHt9LFxuICAgICAgdG9rZW5zVXNlZDogMCxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gcGFyc2UgTExNIHJlc3BvbnNlOiAke21lc3NhZ2V9XFxuXFxuYCArXG4gICAgICAgIGBPcmlnaW5hbCByZXNwb25zZTpcXG4ke3RleHR9XFxuXFxuYCArXG4gICAgICAgIGBDbGVhbmVkIEpTT046XFxuJHtqc29uVGV4dH1gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiDsg53shLHrkJwgY29uZeydhCDquLDsobQgY29uZeqzvCDrs5Htlantlanri4jri6QuXG4gKlxuICog6riw7KG0IGNvbmXsnbQg7J6I7Jy866m0IOuztOyhtO2VmOqzoCwg7JeG64qUIOqyveyasOyXkOunjCDsg53shLHrkJwgY29uZeydhCDsgqzsmqntlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlV2l0aEV4aXN0aW5nKFxuICBnZW5lcmF0ZWQ6IENvbmVHZW5lcmF0aW9uUmVzdWx0LFxuICBleGlzdGluZzogUmVjb3JkPHN0cmluZywgQ29uZT4sXG4pOiBDb25lR2VuZXJhdGlvblJlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uZ2VuZXJhdGVkIH07XG5cbiAgY29uc3QgZW50aXR5S2V5ID0gYGVudGl0eToke2dlbmVyYXRlZC5lbnRpdHlDb25lID8gXCJwcmVzZW50XCIgOiBcIm1pc3NpbmdcIn1gO1xuICBpZiAoZXhpc3RpbmdbZW50aXR5S2V5XSkge1xuICAgIHJlc3VsdC5lbnRpdHlDb25lID0gZXhpc3RpbmdbZW50aXR5S2V5XTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLnByb3BDb25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgcHJvcDoke3Byb3BOYW1lfWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0pIHtcbiAgICAgIHJlc3VsdC5wcm9wQ29uZXNbcHJvcE5hbWVdID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGVudW1JZCBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQuZW51bUNvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBlbnVtOiR7ZW51bUlkfWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0pIHtcbiAgICAgIHJlc3VsdC5lbnVtQ29uZXNbZW51bUlkXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBzdWJzZXRLZXkgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLnN1YnNldENvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBzdWJzZXQ6JHtzdWJzZXRLZXl9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XSkge1xuICAgICAgcmVzdWx0LnN1YnNldENvbmVzW3N1YnNldEtleV0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogZml4dHVyZUhpbnTqsIAg7JeG64qUIGNvbmXrp4wg7IOd7ISx7ZWY6rOgIOuCmOuouOyngOuKlCDrs7TsobTtlanri4jri6QuXG4gKlxuICog6riw7KG0IGNvbmXsl5AgZml4dHVyZUhpbnTqsIAg7J6I7Jy866m0IOuztOyhtO2VmOqzoCwg7JeG7Jy866m0IOyDiOuhnCDsg53shLHrkJwgY29uZeydhCDsgqzsmqntlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlT25seUVtcHR5KFxuICBnZW5lcmF0ZWQ6IENvbmVHZW5lcmF0aW9uUmVzdWx0LFxuICBleGlzdGluZzogUmVjb3JkPHN0cmluZywgQ29uZT4sXG4pOiBDb25lR2VuZXJhdGlvblJlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uZ2VuZXJhdGVkIH07XG5cbiAgLy8gRW50aXR5IGNvbmU6IGZpeHR1cmVIaW506rCAIOyeiOycvOuptCDrs7TsobRcbiAgY29uc3QgZW50aXR5S2V5ID0gYGVudGl0eToke2dlbmVyYXRlZC5lbnRpdHlDb25lID8gXCJwcmVzZW50XCIgOiBcIm1pc3NpbmdcIn1gO1xuICBpZiAoZXhpc3RpbmdbZW50aXR5S2V5XT8uZml4dHVyZUhpbnQpIHtcbiAgICByZXN1bHQuZW50aXR5Q29uZSA9IGV4aXN0aW5nW2VudGl0eUtleV07XG4gIH1cblxuICAvLyBQcm9wIGNvbmVzOiBmaXh0dXJlSGludOqwgCDsnojsnLzrqbQg67O07KG0XG4gIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLnByb3BDb25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgcHJvcDoke3Byb3BOYW1lfWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0/LmZpeHR1cmVIaW50KSB7XG4gICAgICByZXN1bHQucHJvcENvbmVzW3Byb3BOYW1lXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgLy8gRW51bSBjb25lczogZml4dHVyZUhpbnTqsIAg7J6I7Jy866m0IOuztOyhtCAoZW51beydgCDrs7TthrUgZml4dHVyZUhpbnTqsIAg7JeG7KeA66eMIOydvOq0gOyEseydhCDsnITtlbQpXG4gIGZvciAoY29uc3QgZW51bUlkIG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5lbnVtQ29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYGVudW06JHtlbnVtSWR9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XT8uZml4dHVyZUhpbnQpIHtcbiAgICAgIHJlc3VsdC5lbnVtQ29uZXNbZW51bUlkXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgLy8gU3Vic2V0IGNvbmVzOiBmaXh0dXJlSGludOqwgCDsnojsnLzrqbQg67O07KG0IChzdWJzZXTrj4Qg67O07Ya1IGZpeHR1cmVIaW506rCAIOyXhuyngOunjCDsnbzqtIDshLHsnYQg7JyE7ZW0KVxuICBmb3IgKGNvbnN0IHN1YnNldEtleSBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQuc3Vic2V0Q29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYHN1YnNldDoke3N1YnNldEtleX1gO1xuICAgIGlmIChleGlzdGluZ1trZXldPy5maXh0dXJlSGludCkge1xuICAgICAgcmVzdWx0LnN1YnNldENvbmVzW3N1YnNldEtleV0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXSwibmFtZXMiOlsiZ2VuZXJhdGVDb25lcyIsImNvbnRleHQiLCJhcGlLZXkiLCJnZXRBcGlLZXkiLCJwcm9tcHQiLCJidWlsZFByb21wdCIsInRleHQiLCJyZXNwb25zZVRleHQiLCJ0b2tlbnNVc2VkIiwiY2FsbEFudGhyb3BpY0FQSSIsInJlc3VsdCIsInBhcnNlQ29uZVJlc3BvbnNlIiwiZXhpc3RpbmdDb25lcyIsIm9ubHlFbXB0eSIsIm1lcmdlT25seUVtcHR5IiwibWVyZ2VXaXRoRXhpc3RpbmciLCJTb25hbXUiLCJyZXF1aXJlIiwic2VjcmV0IiwiYW50aHJvcGljX2FwaV9rZXkiLCJ1bmRlZmluZWQiLCJwcm9jZXNzIiwiZW52IiwiQU5USFJPUElDX0FQSV9LRVkiLCJFcnJvciIsImxvY2FsZSIsImxvY2FsZURlc2MiLCJrbyIsImVuIiwiamEiLCJKU09OIiwic3RyaW5naWZ5IiwiZW50aXR5IiwiY3JlYXRlQW50aHJvcGljIiwiZ2VuZXJhdGVUZXh0IiwiYW50aHJvcGljIiwidXNhZ2UiLCJtb2RlbCIsInRvdGFsVG9rZW5zIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwic3RhdHVzQ29kZSIsIm1lc3NhZ2UiLCJqc29uVGV4dCIsInRyaW0iLCJyZXBsYWNlIiwicGFyc2VkIiwicGFyc2UiLCJwcm9wQ29uZXMiLCJlbnRpdHlDb25lIiwic3Vic2V0Q29uZXMiLCJlbnVtQ29uZXMiLCJnZW5lcmF0ZWQiLCJleGlzdGluZyIsImVudGl0eUtleSIsInByb3BOYW1lIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsImVudW1JZCIsInN1YnNldEtleSIsImZpeHR1cmVIaW50Il0sIm1hcHBpbmdzIjoiQUE0QkE7Ozs7O0NBS0MsR0FDRCxPQUFPLGVBQWVBLGNBQWNDLE9BQThCO0lBQ2hFLE1BQU1DLFNBQVNDO0lBQ2YsTUFBTUMsU0FBU0MsWUFBWUo7SUFDM0IsTUFBTSxFQUFFSyxNQUFNQyxZQUFZLEVBQUVDLFVBQVUsRUFBRSxHQUFHLE1BQU1DLGlCQUFpQkwsUUFBUUY7SUFDMUUsTUFBTVEsU0FBU0Msa0JBQWtCSjtJQUNqQ0csT0FBT0YsVUFBVSxHQUFHQTtJQUVwQixJQUFJUCxRQUFRVyxhQUFhLEVBQUU7UUFDekIsSUFBSVgsUUFBUVksU0FBUyxFQUFFO1lBQ3JCLE9BQU9DLGVBQWVKLFFBQVFULFFBQVFXLGFBQWE7UUFDckQ7UUFDQSxPQUFPRyxrQkFBa0JMLFFBQVFULFFBQVFXLGFBQWE7SUFDeEQ7SUFFQSxPQUFPRjtBQUNUO0FBRUE7Ozs7Q0FJQyxHQUNELFNBQVNQO0lBQ1Asd0NBQXdDO0lBQ3hDLElBQUlEO0lBRUosSUFBSTtRQUNGLHNCQUFzQjtRQUN0QixNQUFNLEVBQUVjLE1BQU0sRUFBRSxHQUFHQyxRQUFRO1FBQzNCZixTQUFTYyxPQUFPRSxNQUFNLEVBQUVDO0lBQzFCLEVBQUUsT0FBTTtRQUNOLDhCQUE4QjtRQUM5QmpCLFNBQVNrQjtJQUNYO0lBRUEsSUFBSSxDQUFDbEIsUUFBUTtRQUNYQSxTQUFTbUIsUUFBUUMsR0FBRyxDQUFDQyxpQkFBaUI7SUFDeEM7SUFFQSxJQUFJLENBQUNyQixRQUFRO1FBQ1gsTUFBTSxJQUFJc0IsTUFDUixrQ0FDRTtJQUVOO0lBRUEsT0FBT3RCO0FBQ1Q7QUFFQTs7OztDQUlDLEdBQ0QsU0FBU0csWUFBWUosT0FBOEI7SUFDakQsTUFBTXdCLFNBQVN4QixRQUFRd0IsTUFBTSxJQUFJO0lBQ2pDLE1BQU1DLGFBQWE7UUFDakJDLElB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_batch_update.d.ts","sourceRoot":"","sources":["../../src/database/_batch_update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"_batch_update.d.ts","sourceRoot":"","sources":["../../src/database/_batch_update.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAIjC,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AACpD,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,MAAM,IAAI;KACxC,GAAG,IAAI,EAAE,GAAG,WAAW;CACzB,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEhC;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,EAAE,SAAS,MAAM,EACjD,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,EAAE,EAAE,EACT,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,EACrB,SAAS,SAAK,EACd,GAAG,GAAE,IAAI,CAAC,WAAW,GAAG,IAAW,iBA+BpC"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
/*
|
|
2
2
|
아래의 링크에서 참고해서 가져온 소스코드
|
|
3
3
|
https://github.com/knex/knex/issues/5716
|
|
4
|
-
*/
|
|
4
|
+
*/ import { getLogger } from "@logtape/logtape";
|
|
5
|
+
const logger = getLogger([
|
|
6
|
+
"sonamu",
|
|
7
|
+
"internal",
|
|
8
|
+
"batch-update"
|
|
9
|
+
]);
|
|
10
|
+
/**
|
|
5
11
|
* Batch update rows in a table. Technically its a patch since it only updates the specified columns. Any omitted columns will not be affected
|
|
6
12
|
* @param db
|
|
7
13
|
* @param tableName
|
|
@@ -20,11 +26,19 @@
|
|
|
20
26
|
};
|
|
21
27
|
if (trx) {
|
|
22
28
|
for (const chunk of chunks){
|
|
29
|
+
logger.debug("Processing Batch Chunk in Existing Transaction: {current} / {total}", {
|
|
30
|
+
current: chunk.length,
|
|
31
|
+
total: chunks.length
|
|
32
|
+
});
|
|
23
33
|
await executeUpdate(chunk, trx);
|
|
24
34
|
}
|
|
25
35
|
} else {
|
|
26
36
|
await knex.transaction(async (newTrx)=>{
|
|
27
37
|
for (const chunk of chunks){
|
|
38
|
+
logger.debug("Processing Batch Chunk in New Transaction: {current} / {total}", {
|
|
39
|
+
current: chunk.length,
|
|
40
|
+
total: chunks.length
|
|
41
|
+
});
|
|
28
42
|
await executeUpdate(chunk, newTrx);
|
|
29
43
|
}
|
|
30
44
|
});
|
|
@@ -92,4 +106,4 @@ function generateBatchUpdateSQL(db, tableName, data, identifiers) {
|
|
|
92
106
|
return sql;
|
|
93
107
|
}
|
|
94
108
|
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9fYmF0Y2hfdXBkYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIOyVhOuemOydmCDrp4Htgazsl5DshJwg7LC46rOg7ZW07IScIOqwgOyguOyYqCDshozsiqTsvZTrk5xcbiAgaHR0cHM6Ly9naXRodWIuY29tL2tuZXgva25leC9pc3N1ZXMvNTcxNlxuKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJzb25hbXVcIiwgXCJpbnRlcm5hbFwiLCBcImJhdGNoLXVwZGF0ZVwiXSk7XG5cbnR5cGUgQ29sdW1uVmFsdWUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbDtcbmV4cG9ydCB0eXBlIFJvd1dpdGhJZDxJZCBleHRlbmRzIHN0cmluZz4gPSB7XG4gIFtrZXkgaW4gSWRdOiBDb2x1bW5WYWx1ZTtcbn0gJiBSZWNvcmQ8c3RyaW5nLCBDb2x1bW5WYWx1ZT47XG5cbi8qKlxuICogQmF0Y2ggdXBkYXRlIHJvd3MgaW4gYSB0YWJsZS4gVGVjaG5pY2FsbHkgaXRzIGEgcGF0Y2ggc2luY2UgaXQgb25seSB1cGRhdGVzIHRoZSBzcGVjaWZpZWQgY29sdW1ucy4gQW55IG9taXR0ZWQgY29sdW1ucyB3aWxsIG5vdCBiZSBhZmZlY3RlZFxuICogQHBhcmFtIGRiXG4gKiBAcGFyYW0gdGFibGVOYW1lXG4gKiBAcGFyYW0gaWRzXG4gKiBAcGFyYW0gcm93c1xuICogQHBhcmFtIGNodW5rU2l6ZVxuICogQHBhcmFtIHRyeFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmF0Y2hVcGRhdGU8SWQgZXh0ZW5kcyBzdHJpbmc+KFxuICBrbmV4OiBLbmV4LFxuICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgaWRzOiBJZFtdLFxuICByb3dzOiBSb3dXaXRoSWQ8SWQ+W10sXG4gIGNodW5rU2l6ZSA9IDUwLFxuICB0cng6IEtuZXguVHJhbnNhY3Rpb24gfCBudWxsID0gbnVsbCxcbikge1xuICBjb25zdCBjaHVua3M6IFJvd1dpdGhJZDxJZD5bXVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkgKz0gY2h1bmtTaXplKSB7XG4gICAgY2h1bmtzLnB1c2gocm93cy5zbGljZShpLCBpICsgY2h1bmtTaXplKSk7XG4gIH1cblxuICBjb25zdCBleGVjdXRlVXBkYXRlID0gYXN5bmMgKGNodW5rOiBSb3dXaXRoSWQ8SWQ+W10sIHRyYW5zYWN0aW9uOiBLbmV4LlRyYW5zYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgcmF3UXVlcnkgPSBnZW5lcmF0ZUJhdGNoVXBkYXRlU1FMKGtuZXgsIHRhYmxlTmFtZSwgY2h1bmssIGlkcyk7XG4gICAgcmV0dXJuIHJhd1F1ZXJ5LnRyYW5zYWN0aW5nKHRyYW5zYWN0aW9uKTtcbiAgfTtcblxuICBpZiAodHJ4KSB7XG4gICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua3MpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIlByb2Nlc3NpbmcgQmF0Y2ggQ2h1bmsgaW4gRXhpc3RpbmcgVHJhbnNhY3Rpb246IHtjdXJyZW50fSAvIHt0b3RhbH1cIiwge1xuICAgICAgICBjdXJyZW50OiBjaHVuay5sZW5ndGgsXG4gICAgICAgIHRvdGFsOiBjaHVua3MubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBleGVjdXRlVXBkYXRlKGNodW5rLCB0cngpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBrbmV4LnRyYW5zYWN0aW9uKGFzeW5jIChuZXdUcngpID0+IHtcbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcIlByb2Nlc3NpbmcgQmF0Y2ggQ2h1bmsgaW4gTmV3IFRyYW5zYWN0aW9uOiB7Y3VycmVudH0gLyB7dG90YWx9XCIsIHtcbiAgICAgICAgICBjdXJyZW50OiBjaHVuay5sZW5ndGgsXG4gICAgICAgICAgdG90YWw6IGNodW5rcy5sZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBleGVjdXRlVXBkYXRlKGNodW5rLCBuZXdUcngpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzZXQgb2YgdW5pcXVlIGtleXMgaW4gYSBkYXRhIGFycmF5XG4gKlxuICogRXhhbXBsZTpcbiAqIFsgeyBhOiAxLCBiOiAyIH0sIHsgYTogMywgYzogNCB9IF0gPT4gU2V0KFsgXCJhXCIsIFwiYlwiLCBcImNcIiBdKVxuICogQHBhcmFtIGRhdGFcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVLZXlTZXRGcm9tRGF0YShkYXRhOiBSZWNvcmQ8c3RyaW5nLCBDb2x1bW5WYWx1ZT5bXSkge1xuICBjb25zdCBrZXlTZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocm93KSkge1xuICAgICAga2V5U2V0LmFkZChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ga2V5U2V0O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJhdGNoVXBkYXRlU1FMPElkIGV4dGVuZHMgc3RyaW5nPihcbiAgZGI6IEtuZXgsXG4gIHRhYmxlTmFtZTogc3RyaW5nLFxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBDb2x1bW5WYWx1ZT5bXSxcbiAgaWRlbnRpZmllcnM6IElkW10sXG4pOiBLbmV4LlJhdyB7XG4gIGNvbnN0IGtleVNldCA9IGdlbmVyYXRlS2V5U2V0RnJvbURhdGEoZGF0YSk7XG4gIGNvbnN0IGFsbEJpbmRpbmdzOiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpW10gPSBbXTtcblxuICBjb25zdCBpbnZhbGlkSWRlbnRpZmllcnMgPSBpZGVudGlmaWVycy5maWx0ZXIoKGlkKSA9PiAha2V5U2V0LmhhcyhpZCkpO1xuICBpZiAoaW52YWxpZElkZW50aWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpZGVudGlmaWVyczogJHtpbnZhbGlkSWRlbnRpZmllcnMuam9pbihcIiwgXCIpfS4gSWRlbnRpZmllcnMgbXVzdCBleGlzdCBpbiB0aGUgZGF0YWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNhc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleVNldCkge1xuICAgIGlmIChpZGVudGlmaWVycy5pbmNsdWRlcyhrZXkgYXMgSWQpKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGNhc2VCaW5kaW5nczogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsKVtdID0gW107XG4gICAgY29uc3Qgd2hlbkNsYXVzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XG4gICAgICBpZiAoT2JqZWN0Lmhhc093bihyb3csIGtleSkpIHtcbiAgICAgICAgY29uc3Qgd2hlcmVQYXJ0cyA9IGlkZW50aWZpZXJzLm1hcCgoKSA9PiBgPz8gPSA/YCkuam9pbihcIiBBTkQgXCIpO1xuICAgICAgICB3aGVuQ2xhdXNlcy5wdXNoKGBXSEVOICgke3doZXJlUGFydHN9KSBUSEVOID9gKTtcblxuICAgICAgICAvLyBpZGVudGlmaWVyIOydtOumhOqzvCDqsJLrk6TsnYQg7LaU6rCAXG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRlbnRpZmllcnMpIHtcbiAgICAgICAgICBjYXNlQmluZGluZ3MucHVzaChpZCwgcm93W2lkXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVEhFTiDqsJIg7LaU6rCAXG4gICAgICAgIGNhc2VCaW5kaW5ncy5wdXNoKHJvd1trZXldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3aGVuVGhlbiA9IHdoZW5DbGF1c2VzLmpvaW4oXCIgXCIpO1xuICAgIGNhc2VzLnB1c2goYD8/ID0gQ0FTRSAke3doZW5UaGVufSBFTFNFID8/IEVORGApO1xuXG4gICAgLy8g7Lus65+866qFIDLqsJwg7LaU6rCAIChTRVTsnZgg7Lus65+866qFLCBFTFNF7J2YIOy7rOufvOuqhSlcbiAgICBhbGxCaW5kaW5ncy5wdXNoKGtleSk7XG4gICAgYWxsQmluZGluZ3MucHVzaCguLi5jYXNlQmluZGluZ3MpO1xuICAgIGFsbEJpbmRpbmdzLnB1c2goa2V5KTtcbiAgfVxuXG4gIGNvbnN0IHdoZXJlSW5DbGF1c2VzID0gaWRlbnRpZmllcnNcbiAgICAubWFwKChfY29sKSA9PiBgPz8gSU4gKCR7ZGF0YS5tYXAoKCkgPT4gXCI/XCIpLmpvaW4oXCIsIFwiKX0pYClcbiAgICAuam9pbihcIiBBTkQgXCIpO1xuXG4gIGNvbnN0IHdoZXJlSW5CaW5kaW5nczogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsKVtdID0gW107XG4gIGZvciAoY29uc3QgY29sIG9mIGlkZW50aWZpZXJzKSB7XG4gICAgd2hlcmVJbkJpbmRpbmdzLnB1c2goY29sKTtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XG4gICAgICB3aGVyZUluQmluZGluZ3MucHVzaChyb3dbY29sXSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3FsID0gZGIucmF3KGBVUERBVEUgPz8gU0VUICR7Y2FzZXMuam9pbihcIiwgXCIpfSBXSEVSRSAke3doZXJlSW5DbGF1c2VzfWAsIFtcbiAgICB0YWJsZU5hbWUsXG4gICAgLi4uYWxsQmluZGluZ3MsXG4gICAgLi4ud2hlcmVJbkJpbmRpbmdzLFxuICBdKTtcblxuICByZXR1cm4gc3FsO1xufVxuIl0sIm5hbWVzIjpbImdldExvZ2dlciIsImxvZ2dlciIsImJhdGNoVXBkYXRlIiwia25leCIsInRhYmxlTmFtZSIsImlkcyIsInJvd3MiLCJjaHVua1NpemUiLCJ0cngiLCJjaHVua3MiLCJpIiwibGVuZ3RoIiwicHVzaCIsInNsaWNlIiwiZXhlY3V0ZVVwZGF0ZSIsImNodW5rIiwidHJhbnNhY3Rpb24iLCJyYXdRdWVyeSIsImdlbmVyYXRlQmF0Y2hVcGRhdGVTUUwiLCJ0cmFuc2FjdGluZyIsImRlYnVnIiwiY3VycmVudCIsInRvdGFsIiwibmV3VHJ4IiwiZ2VuZXJhdGVLZXlTZXRGcm9tRGF0YSIsImRhdGEiLCJrZXlTZXQiLCJTZXQiLCJyb3ciLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwiYWRkIiwiZGIiLCJpZGVudGlmaWVycyIsImFsbEJpbmRpbmdzIiwiaW52YWxpZElkZW50aWZpZXJzIiwiZmlsdGVyIiwiaWQiLCJoYXMiLCJFcnJvciIsImpvaW4iLCJjYXNlcyIsImluY2x1ZGVzIiwiY2FzZUJpbmRpbmdzIiwid2hlbkNsYXVzZXMiLCJoYXNPd24iLCJ3aGVyZVBhcnRzIiwibWFwIiwid2hlblRoZW4iLCJ3aGVyZUluQ2xhdXNlcyIsIl9jb2wiLCJ3aGVyZUluQmluZGluZ3MiLCJjb2wiLCJzcWwiLCJyYXciXSwibWFwcGluZ3MiOiJBQUFBOzs7QUFHQSxHQUVBLFNBQVNBLFNBQVMsUUFBUSxtQkFBbUI7QUFHN0MsTUFBTUMsU0FBU0QsVUFBVTtJQUFDO0lBQVU7SUFBWTtDQUFlO0FBTy9EOzs7Ozs7OztDQVFDLEdBQ0QsT0FBTyxlQUFlRSxZQUNwQkMsSUFBVSxFQUNWQyxTQUFpQixFQUNqQkMsR0FBUyxFQUNUQyxJQUFxQixFQUNyQkMsWUFBWSxFQUFFLEVBQ2RDLE1BQStCLElBQUk7SUFFbkMsTUFBTUMsU0FBNEIsRUFBRTtJQUNwQyxJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUosS0FBS0ssTUFBTSxFQUFFRCxLQUFLSCxVQUFXO1FBQy9DRSxPQUFPRyxJQUFJLENBQUNOLEtBQUtPLEtBQUssQ0FBQ0gsR0FBR0EsSUFBSUg7SUFDaEM7SUFFQSxNQUFNTyxnQkFBZ0IsT0FBT0MsT0FBd0JDO1FBQ25ELE1BQU1DLFdBQVdDLHVCQUF1QmYsTUFBTUMsV0FBV1csT0FBT1Y7UUFDaEUsT0FBT1ksU0FBU0UsV0FBVyxDQUFDSDtJ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
|
|
@@ -78,4 +78,4 @@ describe("InferAllSubsets", ()=>{
|
|
|
78
78
|
});
|
|
79
79
|
});
|
|
80
80
|
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLXN1YnNldC50ZXN0LWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdFR5cGVPZiwgaXQgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlU2NoZW1hRXh0ZW5kIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFB1cmkgfSBmcm9tIFwiLi9wdXJpXCI7XG5pbXBvcnQgdHlwZSB7IEh5ZHJhdGUsIEluZmVyQWxsU3Vic2V0cywgTG9hZGVyc1Jlc3VsdCB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFB1cmlXcmFwcGVyIH0gZnJvbSBcIi4vcHVyaS13cmFwcGVyXCI7XG5cbi8qKiBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IFB1cmkgU3Vic2V0IO2DgOyehSDsi5zsiqTthZzsl5DshJwgYW5566W8IO2XiOyaqe2VqCAqL1xudHlwZSBNb2NrUHVyaTxUPiA9IFB1cmk8RGF0YWJhc2VTY2hlbWFFeHRlbmQsIGFueSwgVD47XG5cbmRlc2NyaWJlKFwiSHlkcmF0ZVwiLCAoKSA9PiB7XG4gIGl0KFwiZmxhdCDqsJ3ssrTrpbwg6re464yA66GcIOycoOyngO2VnOuLpCAoX18g7JeG64qUIOqyveyasClcIiwgKCkgPT4ge1xuICAgIHR5cGUgSW5wdXQgPSB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9O1xuICAgIHR5cGUgUmVzdWx0ID0gSHlkcmF0ZTxJbnB1dD47XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjxIeWRyYXRlPElucHV0Pj4oKTtcbiAgfSk7XG5cbiAgaXQoXCLri6jsnbwgZGVwdGjsnZggX18g7YKk66W8IOykkeyyqSDqsJ3ssrTroZwg67OA7ZmY7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIElucHV0ID0geyBpZDogbnVtYmVyOyB1c2VyX19uYW1lOiBzdHJpbmc7IHVzZXJfX2VtYWlsOiBzdHJpbmcgfTtcbiAgICB0eXBlIFJlc3VsdCA9IEh5ZHJhdGU8SW5wdXQ+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXI6IHsgbmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH07XG4gICAgfT4oKTtcbiAgfSk7XG5cbiAgaXQoXCLri6TspJEgZGVwdGjsnZggX18g7YKk66W8IOyerOq3gOyggeycvOuhnCDspJHssqkg6rCd7LK066GcIOuzgO2ZmO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgdHlwZSBJbnB1dCA9IHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB1c2VyX19wcm9maWxlX19iaW86IHN0cmluZztcbiAgICAgIHVzZXJfX3Byb2ZpbGVfX2F2YXRhcjogc3RyaW5nO1xuICAgICAgdXNlcl9fbmFtZTogc3RyaW5nO1xuICAgIH07XG4gICAgdHlwZSBSZXN1bHQgPSBIeWRyYXRlPElucHV0PjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB1c2VyOiB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcHJvZmlsZTogeyBiaW86IHN0cmluZzsgYXZhdGFyOiBzdHJpbmcgfTtcbiAgICAgIH07XG4gICAgfT4oKTtcbiAgfSk7XG5cbiAgaXQoXCLsl6zrn6wg6rSA6rOE66W8IOuPmeyLnOyXkCDsspjrpqztlZzri6RcIiwgKCkgPT4ge1xuICAgIHR5cGUgSW5wdXQgPSB7XG4gICAgICBpZDogbnVtYmVyO1xuICAgICAgdXNlcl9faWQ6IG51bWJlcjtcbiAgICAgIHVzZXJfX25hbWU6IHN0cmluZztcbiAgICAgIHBvc3RfX2lkOiBudW1iZXI7XG4gICAgICBwb3N0X190aXRsZTogc3RyaW5nO1xuICAgIH07XG4gICAgdHlwZSBSZXN1bHQgPSBIeWRyYXRlPElucHV0PjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB1c2VyOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9O1xuICAgICAgcG9zdDogeyBpZDogbnVtYmVyOyB0aXRsZTogc3RyaW5nIH07XG4gICAgfT4oKTtcbiAgfSk7XG5cbiAgaXQoXCLruYgg6rCd7LK066W8IOyymOumrO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgdHlwZSBJbnB1dCA9IHt9O1xuICAgIHR5cGUgUmVzdWx0ID0gSHlkcmF0ZTxJbnB1dD47XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7fT4oKTtcbiAgfSk7XG5cbiAgaXQoXCJudWxsYWJsZSDtlYTrk5zqsIAg7J6I64qUIOykkeyyqSDqsJ3ssrTrpbwg7LKY66as7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIElucHV0ID0ge1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXJfX2lkOiBudW1iZXIgfCBudWxsO1xuICAgICAgdXNlcl9fbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xuICAgIHR5cGUgUmVzdWx0ID0gSHlkcmF0ZTxJbnB1dD47XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7XG4gICAgICBpZDogbnVtYmVyO1xuICAgICAgdXNlcjogeyBpZDogbnVtYmVyIHwgbnVsbDsgbmFtZTogc3RyaW5nIHwgbnVsbCB9O1xuICAgIH0+KCk7XG4gIH0pO1xuXG4gIGl0KFwi64+Z7J287ZWcIHByZWZpeOulvCDqsIDsp4Qg7Jes65+sIO2VhOuTnOulvCDsmKzrsJTrpbTqsowg6re466O57ZmU7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIElucHV0ID0ge1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXJfX2lkOiBudW1iZXI7XG4gICAgICB1c2VyX19uYW1lOiBzdHJpbmc7XG4gICAgICB1c2VyX2NvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgICB0eXBlIFJlc3VsdCA9IEh5ZHJhdGU8SW5wdXQ+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXI6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nIH07XG4gICAgICB1c2VyX2NvdW50OiBudW1iZXI7XG4gICAgfT4oKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJMb2FkZXJzUmVzdWx0XCIsICgpID0+IHtcbiAgaXQoXCLri6jsnbwg66Gc642U7J2YIOqysOqzvCDtg4DsnoXsnYQg7IOd7ISx7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIE1vY2tMb2FkZXJRYiA9IChcbiAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgZnJvbUlkczogbnVtYmVyW10sXG4gICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IHRpdGxlOiBzdHJpbmc7IHJlZklkOiBudW1iZXIgfT47XG5cbiAgICB0eXBlIExvYWRlcnMgPSBbXG4gICAgICB7XG4gICAgICAgIGFzOiBcInBvc3RzXCI7XG4gICAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICAgIHFiOiBNb2NrTG9hZGVyUWI7XG4gICAgICB9LFxuICAgIF07XG4gICAgdHlwZSBSZXN1bHQgPSBMb2FkZXJzUmVzdWx0PExvYWRlcnM+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvSGF2ZVByb3BlcnR5KFwicG9zdHNcIik7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7IHBvc3RzOiB7IGlkOiBudW1iZXI7IHRpdGxlOiBzdHJpbmcgfVtdIH0+KCk7XG4gIH0pO1xuXG4gIGl0KFwi7KSR7LKpIOuhnOuNlOulvCDsspjrpqztlZzri6RcIiwgKCkgPT4ge1xuICAgIHR5cGUgQ29tbWVudExvYWRlclFiID0gKFxuICAgICAgcWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4sXG4gICAgICBmcm9tSWRzOiBudW1iZXJbXSxcbiAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgY29udGVudDogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuXG4gICAgdHlwZSBQb3N0TG9hZGVyUWIgPSAoXG4gICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICkgPT4gTW9ja1B1cmk8eyBpZDogbnVtYmVyOyB0aXRsZTogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuXG4gICAgdHlwZSBMb2FkZXJzID0gW1xuICAgICAge1xuICAgICAgICBhczogXCJwb3N0c1wiO1xuICAgICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgICBxYjogUG9zdExvYWRlclFiO1xuICAgICAgICBsb2FkZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXM6IFwiY29tbWVudHNcIjtcbiAgICAgICAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICAgICAgICBxYjogQ29tbWVudExvYWRlclFiO1xuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgIF07XG4gICAgdHlwZSBSZXN1bHQgPSBMb2FkZXJzUmVzdWx0PExvYWRlcnM+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvSGF2ZVByb3BlcnR5KFwicG9zdHNcIik7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7XG4gICAgICBwb3N0czogeyBpZDogbnVtYmVyOyB0aXRsZTogc3RyaW5nOyBjb21tZW50czogeyBpZDogbnVtYmVyOyBjb250ZW50OiBzdHJpbmcgfVtdIH1bXTtcbiAgICB9PigpO1xuICB9KTtcblxuICBpdChcIuyXrOufrCDroZzrjZTrpbwg7LKY66as7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIFByb2plY3RMb2FkZXIgPSB7XG4gICAgICBhczogXCJwcm9qZWN0c1wiO1xuICAgICAgcmVmSWQ6IFwiaWRcIjtcbiAgICAgIHFiOiAoXG4gICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICBmcm9tSWRzOiBudW1iZXJbXSxcbiAgICAgICkgPT4gTW9ja1B1cmk8eyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IHJlZklkOiBudW1iZXIgfT47XG4gICAgfTtcbiAgICB0eXBlIERlcGFydG1lbnRMb2FkZXIgPSB7XG4gICAgICBhczogXCJkZXBhcnRtZW50XCI7XG4gICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgcWI6IChcbiAgICAgICAgcWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4sXG4gICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgY29tcGFueV9uYW1lOiBzdHJpbmc7IHJlZklkOiBudW1iZXIgfT47XG4gICAgfTtcbiAgICB0eXBlIEVtcGxveWVlTG9hZGVyID0ge1xuICAgICAgYXM6IFwiZW1wbG95ZWVzXCI7XG4gICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgcWI6IChcbiAgICAgICAgcWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4sXG4gICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IGVtcGxveWVlX251bWJlcjogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuICAgICAgbG9hZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgYXM6IFwidXNlclwiO1xuICAgICAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICAgICAgcWI6IChcbiAgICAgICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICAgICAgZnJvbUlkczogbnVtYmVyW10sXG4gICAgICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgZW1haWw6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfTtcblxuICAgIHR5cGUgTG9hZGVycyA9IFtQcm9qZWN0TG9hZGVyLCBEZXBhcnRtZW50TG9hZGVyLCBFbXBsb3llZUxvYWRlcl07XG4gICAgdHlwZSBSZXN1bHQgPSBMb2FkZXJzUmVzdWx0PExvYWRlcnM+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvSGF2ZVByb3BlcnR5KFwicHJvamVjdHNcIik7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9IYXZlUHJvcGVydHkoXCJlbXBsb3llZXNcIik7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9IYXZlUHJvcGVydHkoXCJkZXBhcnRtZW50XCIpO1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgcHJvamVjdHM6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nIH1bXTtcbiAgICAgIGRlcGFydG1lbnQ6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBjb21wYW55X25hbWU6IHN0cmluZyB9W107XG4gICAgICBlbXBsb3llZXM6IHtcbiAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgZW1wbG95ZWVfbnVtYmVyOiBzdHJpbmc7XG4gICAgICAgIHVzZXI6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH1bXTtcbiAgICAgIH1bXTtcbiAgICB9PigpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkluZmVyQWxsU3Vic2V0c1wiLCAoKSA9PiB7XG4gIGRlc2NyaWJlKFwi7ISc67iM7IWL7J20IO2VmOuCmOyduCDqsr3smrBcIiwgKCkgPT4ge1xuICAgIGl0KFwi66Gc642UIOyXhuydtCDquLDrs7ggU3Vic2V0IOqysOqzvOulvCDstpTroaDtlZzri6RcIiwgKCkgPT4ge1xuICAgICAgLy8gU3Vic2V0UXVlcnlcbiAgICAgIHR5cGUgU3Vic2V0Rm5BID0gKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiBNb2NrUHVyaTx7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIHVzZXJfX25hbWU6IHN0cmluZztcbiAgICAgICAgdXNlcl9fZW1haWw6IHN0cmluZztcbiAgICAgICAgZGVwYXJ0bWVudF9fbmFtZTogc3RyaW5nO1xuICAgICAgICBkZXBhcnRtZW50X19jb21wYW55X19uYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0UXVlcmllcyA9IHtcbiAgICAgICAgQTogU3Vic2V0Rm5BO1xuICAgICAgfTtcblxuICAgICAgLy8gTG9hZGVyUXVlcnlcbiAgICAgIHR5cGUgTG9hZGVyUXVlcmllcyA9IHtcbiAgICAgICAgQTogW107XG4gICAgICB9O1xuXG4gICAgICAvLyBSZXN1bHRcbiAgICAgIHR5cGUgUmVzdWx0ID0gSW5mZXJBbGxTdWJzZXRzPFN1YnNldFF1ZXJpZXMsIExvYWRlclF1ZXJpZXM+O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0hhdmVQcm9wZXJ0eShcIkFcIik7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0LkEpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICB1c2VyOiB7IG5hbWU6IHN0cmluZzsgZW1haWw6IHN0cmluZyB9O1xuICAgICAgICBkZXBhcnRtZW50OiB7IG5hbWU6IHN0cmluZzsgY29tcGFueTogeyBuYW1lOiBzdHJpbmcgfSB9O1xuICAgICAgfT4oKTtcbiAgICAgIGV4cGVjdFR5cGVPZihyZXN1bHQuQS5kZXBhcnRtZW50LmNvbXBhbnkpLnRvRXF1YWxUeXBlT2Y8eyBuYW1lOiBzdHJpbmcgfT4oKTtcbiAgICB9KTtcblxuICAgIGl0KFwi66Gc642U66W8IO2PrO2VqO2VnCBTdWJzZXQg6rKw6rO866W8IOy2lOuhoO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgICAvLyBTdWJzZXRRdWVyeVxuICAgICAgdHlwZSBTdWJzZXRGbkEgPSAocWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4pID0+IE1vY2tQdXJpPHtcbiAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgY29tcGFueV9faWQ6IG51bWJlcjtcbiAgICAgICAgY29tcGFueV9fbmFtZTogc3RyaW5nO1xuICAgICAgICBkZXBhcnRtZW50X19pZDogbnVtYmVyO1xuICAgICAgICBkZXBhcnRtZW50X19uYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0UXVlcmllcyA9IHtcbiAgICAgICAgQTogU3Vic2V0Rm5BO1xuICAgICAgfTtcblxuICAgICAgLy8gTG9hZGVyUXVlcnlcbiAgICAgIHR5cGUgQ29tcGFueURlcGFydG1lbnRzTG9hZGVyID0ge1xuICAgICAgICBhczogXCJjb21wYW55X19kZXBhcnRtZW50c1wiO1xuICAgICAgICByZWZJZDogXCJjb21wYW55X19pZFwiO1xuICAgICAgICBxYjogKFxuICAgICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuICAgICAgfTtcbiAgICAgIHR5cGUgRGVwYXJ0bWVudFByb2plY3RzTG9hZGVyID0ge1xuICAgICAgICBhczogXCJkZXBhcnRtZW50X19wcm9qZWN0c1wiO1xuICAgICAgICByZWZJZDogXCJkZXBhcnRtZW50X19pZFwiO1xuICAgICAgICBxYjogKFxuICAgICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgIH07XG4gICAgICB0eXBlIExvYWRlclF1ZXJpZXMgPSB7XG4gICAgICAgIEE6IFtDb21wYW55RGVwYXJ0bWVudHNMb2FkZXIsIERlcGFydG1lbnRQcm9qZWN0c0xvYWRlcl07XG4gICAgICB9O1xuXG4gICAgICAvLyBSZXN1bHRcbiAgICAgIHR5cGUgUmVzdWx0ID0gSW5mZXJBbGxTdWJzZXRzPFN1YnNldFF1ZXJpZXMsIExvYWRlclF1ZXJpZXM+O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0hhdmVQcm9wZXJ0eShcIkFcIik7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgICAgQToge1xuICAgICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgICAgY29tcGFueTogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGRlcGFydG1lbnRzOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9W10gfTtcbiAgICAgICAgICBkZXBhcnRtZW50OiB7XG4gICAgICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgcHJvamVjdHM6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9W107XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KCk7XG4gICAgfSk7XG5cbiAgICBpdChcIuykkeyyqSDroZzrjZTrpbwg7Y+s7ZWo7ZWcIFN1YnNldCDqsrDqs7zrpbwg7LaU66Gg7ZWc64ukXCIsICgpID0+IHtcbiAgICAgIC8vIFN1YnNldFF1ZXJ5XG4gICAgICB0eXBlIFN1YnNldEZuQSA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBjb21wYW55X19uYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0UXVlcmllcyA9IHtcbiAgICAgICAgQTogU3Vic2V0Rm5BO1xuICAgICAgfTtcblxuICAgICAgLy8gTG9hZGVyUXVlcnlcbiAgICAgIHR5cGUgQ29tcGFueURlcGFydG1lbnRzTG9hZGVyID0ge1xuICAgICAgICBhczogXCJjb21wYW55X19kZXBhcnRtZW50c1wiO1xuICAgICAgICByZWZJZDogXCJjb21wYW55X19pZFwiO1xuICAgICAgICBxYjogKFxuICAgICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuICAgICAgICBsb2FkZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXM6IFwicHJvamVjdHNcIjtcbiAgICAgICAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICAgICAgICBxYjogKFxuICAgICAgICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgICAgICAgZnJvbUlkczogbnVtYmVyW10sXG4gICAgICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfTtcbiAgICAgIHR5cGUgTG9hZGVyUXVlcmllcyA9IHtcbiAgICAgICAgQTogW0NvbXBhbnlEZXBhcnRtZW50c0xvYWRlcl07XG4gICAgICB9O1xuXG4gICAgICAvLyBSZXN1bHRcbiAgICAgIHR5cGUgUmVzdWx0ID0gSW5mZXJBbGxTdWJzZXRzPFN1YnNldFF1ZXJpZXMsIExvYWRlclF1ZXJpZXM+O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgICAgQToge1xuICAgICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgICAgY29tcGFueToge1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgZGVwYXJ0bWVudHM6IHtcbiAgICAgICAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICBwcm9qZWN0czogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nIH1bXTtcbiAgICAgICAgICAgIH1bXTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4oKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCLshJzruIzshYvsnbQg7Jes65+sIOqwnOyduCDqsr3smrBcIiwgKCkgPT4ge1xuICAgIGl0KFwi66Gc642UIOyXhuydtCDquLDrs7ggU3Vic2V0IOqysOqzvOulvCDstpTroaDtlZzri6RcIiwgKCkgPT4ge1xuICAgICAgLy8gU3Vic2V0UXVlcnlcbiAgICAgIHR5cGUgU3Vic2V0Rm5BID0gKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiBNb2NrUHVyaTx7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZW1haWw6IHN0cmluZztcbiAgICAgICAgZGVwYXJ0bWVudF9fbmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgICB0eXBlIFN1YnNldEZuUCA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGRlcGFydG1lbnRfX25hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRGblNTID0gKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiBNb2NrUHVyaTx7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZW1haWw6IHN0cmluZztcbiAgICAgICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRRdWVyaWVzID0ge1xuICAgICAgICBBOiBTdWJzZXRGbkE7XG4gICAgICAgIFA6IFN1YnNldEZuUDtcbiAgICAgICAgU1M6IFN1YnNldEZuU1M7XG4gICAgICB9O1xuXG4gICAgICAvLyBMb2FkZXJRdWVyeVxuICAgICAgdHlwZSBMb2FkZXJRdWVyaWVzID0ge1xuICAgICAgICBBOiBbXTtcbiAgICAgICAgUDogW107XG4gICAgICAgIFNTOiBbXTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFJlc3VsdFxuICAgICAgdHlwZSBSZXN1bHQgPSBJbmZlckFsbFN1YnNldHM8U3Vic2V0UXVlcmllcywgTG9hZGVyUXVlcmllcz47XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgICBBOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgZW1haWw6IHN0cmluZzsgZGVwYXJ0bWVudDogeyBuYW1lOiBzdHJpbmcgfSB9O1xuICAgICAgICBQOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgZGVwYXJ0bWVudDogeyBuYW1lOiBzdHJpbmcgfSB9O1xuICAgICAgICBTUzogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfTtcbiAgICAgIH0+KCk7XG4gICAgfSk7XG5cbiAgICBpdChcIuuhnOuNlOulvCDtj6ztlajtlZwgU3Vic2V0IOqysOqzvOulvCDstpTroaDtlZzri6RcIiwgKCkgPT4ge1xuICAgICAgLy8gU3Vic2V0UXVlcnlcbiAgICAgIHR5cGUgU3Vic2V0Rm5BID0gKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiBNb2NrUHVyaTx7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZW1haWw6IHN0cmluZztcbiAgICAgICAgZGVwYXJ0bWVudF9fbmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgICB0eXBlIFN1YnNldEZuUCA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGRlcGFydG1lbnRfX25hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRGblNTID0gKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiBNb2NrUHVyaTx7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZW1haWw6IHN0cmluZztcbiAgICAgICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRRdWVyaWVzID0ge1xuICAgICAgICBBOiBTdWJzZXRGbkE7XG4gICAgICAgIFA6IFN1YnNldEZuUDtcbiAgICAgICAgU1M6IFN1YnNldEZuU1M7XG4gICAgICB9O1xuXG4gICAgICAvLyBMb2FkZXJRdWVyeVxuICAgICAgdHlwZSBQcm9qZWN0TG9hZGVyID0ge1xuICAgICAgICBhczogXCJwcm9qZWN0c1wiO1xuICAgICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgICBxYjogKFxuICAgICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgICAgbG9hZGVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFzOiBcInRhZ3NcIjtcbiAgICAgICAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICAgICAgICBxYjogKFxuICAgICAgICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgICAgICAgZnJvbUlkczogbnVtYmVyW10sXG4gICAgICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9O1xuICAgICAgdHlwZSBMb2FkZXJRdWVyaWVzID0ge1xuICAgICAgICBBOiBbUHJvamVjdExvYWRlcl07XG4gICAgICAgIFA6IFtdO1xuICAgICAgICBTUzogW107XG4gICAgICB9O1xuXG4gICAgICAvLyBSZXN1bHRcbiAgICAgIHR5cGUgUmVzdWx0ID0gSW5mZXJBbGxTdWJzZXRzPFN1YnNldFF1ZXJpZXMsIExvYWRlclF1ZXJpZXM+O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgICAgQToge1xuICAgICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICAgICAgZGVwYXJ0bWVudDogeyBuYW1lOiBzdHJpbmcgfTtcbiAgICAgICAgICBwcm9qZWN0czoge1xuICAgICAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgICAgICAgdGFnczogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfVtdO1xuICAgICAgICAgIH1bXTtcbiAgICAgICAgfTtcbiAgICAgICAgUDogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGRlcGFydG1lbnQ6IHsgbmFtZTogc3RyaW5nIH0gfTtcbiAgICAgICAgU1M6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH07XG4gICAgICB9PigpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiZXhwZWN0VHlwZU9mIiwiaXQiLCJyZXN1bHQiLCJ0b0VxdWFsVHlwZU9mIiwidG9IYXZlUHJvcGVydHkiLCJB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
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLXN1YnNldC50ZXN0LWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdFR5cGVPZiwgaXQgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlU2NoZW1hRXh0ZW5kIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFB1cmkgfSBmcm9tIFwiLi9wdXJpXCI7XG5pbXBvcnQgdHlwZSB7IEh5ZHJhdGUsIEluZmVyQWxsU3Vic2V0cywgTG9hZGVyc1Jlc3VsdCB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFB1cmlXcmFwcGVyIH0gZnJvbSBcIi4vcHVyaS13cmFwcGVyXCI7XG5cbi8qKiBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IFB1cmkgU3Vic2V0IO2DgOyehSDsi5zsiqTthZzsl5DshJwgYW5566W8IO2XiOyaqe2VqCAqL1xudHlwZSBNb2NrUHVyaTxUPiA9IFB1cmk8RGF0YWJhc2VTY2hlbWFFeHRlbmQsIGFueSwgVD47XG5cbmRlc2NyaWJlKFwiSHlkcmF0ZVwiLCAoKSA9PiB7XG4gIGl0KFwiZmxhdCDqsJ3ssrTrpbwg6re464yA66GcIOycoOyngO2VnOuLpCAoX18g7JeG64qUIOqyveyasClcIiwgKCkgPT4ge1xuICAgIHR5cGUgSW5wdXQgPSB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9O1xuICAgIHR5cGUgUmVzdWx0ID0gSHlkcmF0ZTxJbnB1dD47XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjxIeWRyYXRlPElucHV0Pj4oKTtcbiAgfSk7XG5cbiAgaXQoXCLri6jsnbwgZGVwdGjsnZggX18g7YKk66W8IOykkeyyqSDqsJ3ssrTroZwg67OA7ZmY7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIElucHV0ID0geyBpZDogbnVtYmVyOyB1c2VyX19uYW1lOiBzdHJpbmc7IHVzZXJfX2VtYWlsOiBzdHJpbmcgfTtcbiAgICB0eXBlIFJlc3VsdCA9IEh5ZHJhdGU8SW5wdXQ+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXI6IHsgbmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH07XG4gICAgfT4oKTtcbiAgfSk7XG5cbiAgaXQoXCLri6TspJEgZGVwdGjsnZggX18g7YKk66W8IOyerOq3gOyggeycvOuhnCDspJHssqkg6rCd7LK066GcIOuzgO2ZmO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgdHlwZSBJbnB1dCA9IHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB1c2VyX19wcm9maWxlX19iaW86IHN0cmluZztcbiAgICAgIHVzZXJfX3Byb2ZpbGVfX2F2YXRhcjogc3RyaW5nO1xuICAgICAgdXNlcl9fbmFtZTogc3RyaW5nO1xuICAgIH07XG4gICAgdHlwZSBSZXN1bHQgPSBIeWRyYXRlPElucHV0PjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB1c2VyOiB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcHJvZmlsZTogeyBiaW86IHN0cmluZzsgYXZhdGFyOiBzdHJpbmcgfTtcbiAgICAgIH07XG4gICAgfT4oKTtcbiAgfSk7XG5cbiAgaXQoXCLsl6zrn6wg6rSA6rOE66W8IOuPmeyLnOyXkCDsspjrpqztlZzri6RcIiwgKCkgPT4ge1xuICAgIHR5cGUgSW5wdXQgPSB7XG4gICAgICBpZDogbnVtYmVyO1xuICAgICAgdXNlcl9faWQ6IG51bWJlcjtcbiAgICAgIHVzZXJfX25hbWU6IHN0cmluZztcbiAgICAgIHBvc3RfX2lkOiBudW1iZXI7XG4gICAgICBwb3N0X190aXRsZTogc3RyaW5nO1xuICAgIH07XG4gICAgdHlwZSBSZXN1bHQgPSBIeWRyYXRlPElucHV0PjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB1c2VyOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9O1xuICAgICAgcG9zdDogeyBpZDogbnVtYmVyOyB0aXRsZTogc3RyaW5nIH07XG4gICAgfT4oKTtcbiAgfSk7XG5cbiAgaXQoXCLruYgg6rCd7LK066W8IOyymOumrO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgdHlwZSBJbnB1dCA9IHt9O1xuICAgIHR5cGUgUmVzdWx0ID0gSHlkcmF0ZTxJbnB1dD47XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7fT4oKTtcbiAgfSk7XG5cbiAgaXQoXCJudWxsYWJsZSDtlYTrk5zqsIAg7J6I64qUIOykkeyyqSDqsJ3ssrTrpbwg7LKY66as7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIElucHV0ID0ge1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXJfX2lkOiBudW1iZXIgfCBudWxsO1xuICAgICAgdXNlcl9fbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xuICAgIHR5cGUgUmVzdWx0ID0gSHlkcmF0ZTxJbnB1dD47XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7XG4gICAgICBpZDogbnVtYmVyO1xuICAgICAgdXNlcjogeyBpZDogbnVtYmVyIHwgbnVsbDsgbmFtZTogc3RyaW5nIHwgbnVsbCB9O1xuICAgIH0+KCk7XG4gIH0pO1xuXG4gIGl0KFwi64+Z7J287ZWcIHByZWZpeOulvCDqsIDsp4Qg7Jes65+sIO2VhOuTnOulvCDsmKzrsJTrpbTqsowg6re466O57ZmU7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIElucHV0ID0ge1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXJfX2lkOiBudW1iZXI7XG4gICAgICB1c2VyX19uYW1lOiBzdHJpbmc7XG4gICAgICB1c2VyX2NvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgICB0eXBlIFJlc3VsdCA9IEh5ZHJhdGU8SW5wdXQ+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXI6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nIH07XG4gICAgICB1c2VyX2NvdW50OiBudW1iZXI7XG4gICAgfT4oKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJMb2FkZXJzUmVzdWx0XCIsICgpID0+IHtcbiAgaXQoXCLri6jsnbwg66Gc642U7J2YIOqysOqzvCDtg4DsnoXsnYQg7IOd7ISx7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIE1vY2tMb2FkZXJRYiA9IChcbiAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgZnJvbUlkczogbnVtYmVyW10gfCBzdHJpbmdbXSxcbiAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgdGl0bGU6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcblxuICAgIHR5cGUgTG9hZGVycyA9IFtcbiAgICAgIHtcbiAgICAgICAgYXM6IFwicG9zdHNcIjtcbiAgICAgICAgcmVmSWQ6IFwiaWRcIjtcbiAgICAgICAgcWI6IE1vY2tMb2FkZXJRYjtcbiAgICAgIH0sXG4gICAgXTtcbiAgICB0eXBlIFJlc3VsdCA9IExvYWRlcnNSZXN1bHQ8TG9hZGVycz47XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9IYXZlUHJvcGVydHkoXCJwb3N0c1wiKTtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHsgcG9zdHM6IHsgaWQ6IG51bWJlcjsgdGl0bGU6IHN0cmluZyB9W10gfT4oKTtcbiAgfSk7XG5cbiAgaXQoXCLspJHssqkg66Gc642U66W8IOyymOumrO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgdHlwZSBDb21tZW50TG9hZGVyUWIgPSAoXG4gICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgIGZyb21JZHM6IG51bWJlcltdIHwgc3RyaW5nW10sXG4gICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IGNvbnRlbnQ6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcblxuICAgIHR5cGUgUG9zdExvYWRlclFiID0gKFxuICAgICAgcWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4sXG4gICAgICBmcm9tSWRzOiBudW1iZXJbXSB8IHN0cmluZ1tdLFxuICAgICkgPT4gTW9ja1B1cmk8eyBpZDogbnVtYmVyOyB0aXRsZTogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuXG4gICAgdHlwZSBMb2FkZXJzID0gW1xuICAgICAge1xuICAgICAgICBhczogXCJwb3N0c1wiO1xuICAgICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgICBxYjogUG9zdExvYWRlclFiO1xuICAgICAgICBsb2FkZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXM6IFwiY29tbWVudHNcIjtcbiAgICAgICAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICAgICAgICBxYjogQ29tbWVudExvYWRlclFiO1xuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgIF07XG4gICAgdHlwZSBSZXN1bHQgPSBMb2FkZXJzUmVzdWx0PExvYWRlcnM+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvSGF2ZVByb3BlcnR5KFwicG9zdHNcIik7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7XG4gICAgICBwb3N0czogeyBpZDogbnVtYmVyOyB0aXRsZTogc3RyaW5nOyBjb21tZW50czogeyBpZDogbnVtYmVyOyBjb250ZW50OiBzdHJpbmcgfVtdIH1bXTtcbiAgICB9PigpO1xuICB9KTtcblxuICBpdChcIuyXrOufrCDroZzrjZTrpbwg7LKY66as7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIFByb2plY3RMb2FkZXIgPSB7XG4gICAgICBhczogXCJwcm9qZWN0c1wiO1xuICAgICAgcmVmSWQ6IFwiaWRcIjtcbiAgICAgIHFiOiAoXG4gICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICBmcm9tSWRzOiBudW1iZXJbXSB8IHN0cmluZ1tdLFxuICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICB9O1xuICAgIHR5cGUgRGVwYXJ0bWVudExvYWRlciA9IHtcbiAgICAgIGFzOiBcImRlcGFydG1lbnRcIjtcbiAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICBxYjogKFxuICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgZnJvbUlkczogbnVtYmVyW10gfCBzdHJpbmdbXSxcbiAgICAgICkgPT4gTW9ja1B1cmk8eyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGNvbXBhbnlfbmFtZTogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuICAgIH07XG4gICAgdHlwZSBFbXBsb3llZUxvYWRlciA9IHtcbiAgICAgIGFzOiBcImVtcGxveWVlc1wiO1xuICAgICAgcmVmSWQ6IFwiaWRcIjtcbiAgICAgIHFiOiAoXG4gICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICBmcm9tSWRzOiBudW1iZXJbXSB8IHN0cmluZ1tdLFxuICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IGVtcGxveWVlX251bWJlcjogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuICAgICAgbG9hZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgYXM6IFwidXNlclwiO1xuICAgICAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICAgICAgcWI6IChcbiAgICAgICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICAgICAgZnJvbUlkczogbnVtYmVyW10gfCBzdHJpbmdbXSxcbiAgICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9O1xuXG4gICAgdHlwZSBMb2FkZXJzID0gW1Byb2plY3RMb2FkZXIsIERlcGFydG1lbnRMb2FkZXIsIEVtcGxveWVlTG9hZGVyXTtcbiAgICB0eXBlIFJlc3VsdCA9IExvYWRlcnNSZXN1bHQ8TG9hZGVycz47XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9IYXZlUHJvcGVydHkoXCJwcm9qZWN0c1wiKTtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0hhdmVQcm9wZXJ0eShcImVtcGxveWVlc1wiKTtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0hhdmVQcm9wZXJ0eShcImRlcGFydG1lbnRcIik7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7XG4gICAgICBwcm9qZWN0czogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfVtdO1xuICAgICAgZGVwYXJ0bWVudDogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGNvbXBhbnlfbmFtZTogc3RyaW5nIH1bXTtcbiAgICAgIGVtcGxveWVlczoge1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBlbXBsb3llZV9udW1iZXI6IHN0cmluZztcbiAgICAgICAgdXNlcjogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmcgfVtdO1xuICAgICAgfVtdO1xuICAgIH0+KCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiSW5mZXJBbGxTdWJzZXRzXCIsICgpID0+IHtcbiAgZGVzY3JpYmUoXCLshJzruIzshYvsnbQg7ZWY64KY7J24IOqyveyasFwiLCAoKSA9PiB7XG4gICAgaXQoXCLroZzrjZQg7JeG7J20IOq4sOuzuCBTdWJzZXQg6rKw6rO866W8IOy2lOuhoO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgICAvLyBTdWJzZXRRdWVyeVxuICAgICAgdHlwZSBTdWJzZXRGbkEgPSAocWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4pID0+IE1vY2tQdXJpPHtcbiAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgdXNlcl9fbmFtZTogc3RyaW5nO1xuICAgICAgICB1c2VyX19lbWFpbDogc3RyaW5nO1xuICAgICAgICBkZXBhcnRtZW50X19uYW1lOiBzdHJpbmc7XG4gICAgICAgIGRlcGFydG1lbnRfX2NvbXBhbnlfX25hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRRdWVyaWVzID0ge1xuICAgICAgICBBOiBTdWJzZXRGbkE7XG4gICAgICB9O1xuXG4gICAgICAvLyBMb2FkZXJRdWVyeVxuICAgICAgdHlwZSBMb2FkZXJRdWVyaWVzID0ge1xuICAgICAgICBBOiBbXTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFJlc3VsdFxuICAgICAgdHlwZSBSZXN1bHQgPSBJbmZlckFsbFN1YnNldHM8U3Vic2V0UXVlcmllcywgTG9hZGVyUXVlcmllcz47XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvSGF2ZVByb3BlcnR5KFwiQVwiKTtcbiAgICAgIGV4cGVjdFR5cGVPZihyZXN1bHQuQSkudG9FcXVhbFR5cGVPZjx7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIHVzZXI6IHsgbmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH07XG4gICAgICAgIGRlcGFydG1lbnQ6IHsgbmFtZTogc3RyaW5nOyBjb21wYW55OiB7IG5hbWU6IHN0cmluZyB9IH07XG4gICAgICB9PigpO1xuICAgICAgZXhwZWN0VHlwZU9mKHJlc3VsdC5BLmRlcGFydG1lbnQuY29tcGFueSkudG9FcXVhbFR5cGVPZjx7IG5hbWU6IHN0cmluZyB9PigpO1xuICAgIH0pO1xuXG4gICAgaXQoXCLroZzrjZTrpbwg7Y+s7ZWo7ZWcIFN1YnNldCDqsrDqs7zrpbwg7LaU66Gg7ZWc64ukXCIsICgpID0+IHtcbiAgICAgIC8vIFN1YnNldFF1ZXJ5XG4gICAgICB0eXBlIFN1YnNldEZuQSA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBjb21wYW55X19pZDogbnVtYmVyO1xuICAgICAgICBjb21wYW55X19uYW1lOiBzdHJpbmc7XG4gICAgICAgIGRlcGFydG1lbnRfX2lkOiBudW1iZXI7XG4gICAgICAgIGRlcGFydG1lbnRfX25hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRRdWVyaWVzID0ge1xuICAgICAgICBBOiBTdWJzZXRGbkE7XG4gICAgICB9O1xuXG4gICAgICAvLyBMb2FkZXJRdWVyeVxuICAgICAgdHlwZSBDb21wYW55RGVwYXJ0bWVudHNMb2FkZXIgPSB7XG4gICAgICAgIGFzOiBcImNvbXBhbnlfX2RlcGFydG1lbnRzXCI7XG4gICAgICAgIHJlZklkOiBcImNvbXBhbnlfX2lkXCI7XG4gICAgICAgIHFiOiAoXG4gICAgICAgICAgcWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4sXG4gICAgICAgICAgZnJvbUlkczogbnVtYmVyW10gfCBzdHJpbmdbXSxcbiAgICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgIH07XG4gICAgICB0eXBlIERlcGFydG1lbnRQcm9qZWN0c0xvYWRlciA9IHtcbiAgICAgICAgYXM6IFwiZGVwYXJ0bWVudF9fcHJvamVjdHNcIjtcbiAgICAgICAgcmVmSWQ6IFwiZGVwYXJ0bWVudF9faWRcIjtcbiAgICAgICAgcWI6IChcbiAgICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgICBmcm9tSWRzOiBudW1iZXJbXSB8IHN0cmluZ1tdLFxuICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgIH07XG4gICAgICB0eXBlIExvYWRlclF1ZXJpZXMgPSB7XG4gICAgICAgIEE6IFtDb21wYW55RGVwYXJ0bWVudHNMb2FkZXIsIERlcGFydG1lbnRQcm9qZWN0c0xvYWRlcl07XG4gICAgICB9O1xuXG4gICAgICAvLyBSZXN1bHRcbiAgICAgIHR5cGUgUmVzdWx0ID0gSW5mZXJBbGxTdWJzZXRzPFN1YnNldFF1ZXJpZXMsIExvYWRlclF1ZXJpZXM+O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0hhdmVQcm9wZXJ0eShcIkFcIik7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgICAgQToge1xuICAgICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgICAgY29tcGFueTogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGRlcGFydG1lbnRzOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9W10gfTtcbiAgICAgICAgICBkZXBhcnRtZW50OiB7XG4gICAgICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgcHJvamVjdHM6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9W107XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KCk7XG4gICAgfSk7XG5cbiAgICBpdChcIuykkeyyqSDroZzrjZTrpbwg7Y+s7ZWo7ZWcIFN1YnNldCDqsrDqs7zrpbwg7LaU66Gg7ZWc64ukXCIsICgpID0+IHtcbiAgICAgIC8vIFN1YnNldFF1ZXJ5XG4gICAgICB0eXBlIFN1YnNldEZuQSA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBjb21wYW55X19uYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0UXVlcmllcyA9IHtcbiAgICAgICAgQTogU3Vic2V0Rm5BO1xuICAgICAgfTtcblxuICAgICAgLy8gTG9hZGVyUXVlcnlcbiAgICAgIHR5cGUgQ29tcGFueURlcGFydG1lbnRzTG9hZGVyID0ge1xuICAgICAgICBhczogXCJjb21wYW55X19kZXBhcnRtZW50c1wiO1xuICAgICAgICByZWZJZDogXCJjb21wYW55X19pZFwiO1xuICAgICAgICBxYjogKFxuICAgICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICAgIGZyb21JZHM6IG51bWJlcltdIHwgc3RyaW5nW10sXG4gICAgICAgICkgPT4gTW9ja1B1cmk8eyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IHJlZklkOiBudW1iZXIgfT47XG4gICAgICAgIGxvYWRlcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhczogXCJwcm9qZWN0c1wiO1xuICAgICAgICAgICAgcmVmSWQ6IFwiaWRcIjtcbiAgICAgICAgICAgIHFiOiAoXG4gICAgICAgICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICAgICAgICBmcm9tSWRzOiBudW1iZXJbXSB8IHN0cmluZ1tdLFxuICAgICAgICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IHJlZklkOiBudW1iZXIgfT47XG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH07XG4gICAgICB0eXBlIExvYWRlclF1ZXJpZXMgPSB7XG4gICAgICAgIEE6IFtDb21wYW55RGVwYXJ0bWVudHNMb2FkZXJdO1xuICAgICAgfTtcblxuICAgICAgLy8gUmVzdWx0XG4gICAgICB0eXBlIFJlc3VsdCA9IEluZmVyQWxsU3Vic2V0czxTdWJzZXRRdWVyaWVzLCBMb2FkZXJRdWVyaWVzPjtcblxuICAgICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7XG4gICAgICAgIEE6IHtcbiAgICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICAgIGNvbXBhbnk6IHtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIGRlcGFydG1lbnRzOiB7XG4gICAgICAgICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgcHJvamVjdHM6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9W107XG4gICAgICAgICAgICB9W107XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwi7ISc67iM7IWL7J20IOyXrOufrCDqsJzsnbgg6rK97JqwXCIsICgpID0+IHtcbiAgICBpdChcIuuhnOuNlCDsl4bsnbQg6riw67O4IFN1YnNldCDqsrDqs7zrpbwg7LaU66Gg7ZWc64ukXCIsICgpID0+IHtcbiAgICAgIC8vIFN1YnNldFF1ZXJ5XG4gICAgICB0eXBlIFN1YnNldEZuQSA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICAgIGRlcGFydG1lbnRfX25hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRGblAgPSAocWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4pID0+IE1vY2tQdXJpPHtcbiAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBkZXBhcnRtZW50X19uYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0Rm5TUyA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0UXVlcmllcyA9IHtcbiAgICAgICAgQTogU3Vic2V0Rm5BO1xuICAgICAgICBQOiBTdWJzZXRGblA7XG4gICAgICAgIFNTOiBTdWJzZXRGblNTO1xuICAgICAgfTtcblxuICAgICAgLy8gTG9hZGVyUXVlcnlcbiAgICAgIHR5cGUgTG9hZGVyUXVlcmllcyA9IHtcbiAgICAgICAgQTogW107XG4gICAgICAgIFA6IFtdO1xuICAgICAgICBTUzogW107XG4gICAgICB9O1xuXG4gICAgICAvLyBSZXN1bHRcbiAgICAgIHR5cGUgUmVzdWx0ID0gSW5mZXJBbGxTdWJzZXRzPFN1YnNldFF1ZXJpZXMsIExvYWRlclF1ZXJpZXM+O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgICAgQTogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmc7IGRlcGFydG1lbnQ6IHsgbmFtZTogc3RyaW5nIH0gfTtcbiAgICAgICAgUDogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGRlcGFydG1lbnQ6IHsgbmFtZTogc3RyaW5nIH0gfTtcbiAgICAgICAgU1M6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH07XG4gICAgICB9PigpO1xuICAgIH0pO1xuXG4gICAgaXQoXCLroZzrjZTrpbwg7Y+s7ZWo7ZWcIFN1YnNldCDqsrDqs7zrpbwg7LaU66Gg7ZWc64ukXCIsICgpID0+IHtcbiAgICAgIC8vIFN1YnNldFF1ZXJ5XG4gICAgICB0eXBlIFN1YnNldEZuQSA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICAgIGRlcGFydG1lbnRfX25hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRGblAgPSAocWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4pID0+IE1vY2tQdXJpPHtcbiAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBkZXBhcnRtZW50X19uYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0Rm5TUyA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0UXVlcmllcyA9IHtcbiAgICAgICAgQTogU3Vic2V0Rm5BO1xuICAgICAgICBQOiBTdWJzZXRGblA7XG4gICAgICAgIFNTOiBTdWJzZXRGblNTO1xuICAgICAgfTtcblxuICAgICAgLy8gTG9hZGVyUXVlcnlcbiAgICAgIHR5cGUgUHJvamVjdExvYWRlciA9IHtcbiAgICAgICAgYXM6IFwicHJvamVjdHNcIjtcbiAgICAgICAgcmVmSWQ6IFwiaWRcIjtcbiAgICAgICAgcWI6IChcbiAgICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgICBmcm9tSWRzOiBudW1iZXJbXSB8IHN0cmluZ1tdLFxuICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgICAgbG9hZGVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFzOiBcInRhZ3NcIjtcbiAgICAgICAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICAgICAgICBxYjogKFxuICAgICAgICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgICAgICAgZnJvbUlkczogbnVtYmVyW10gfCBzdHJpbmdbXSxcbiAgICAgICAgICAgICkgPT4gTW9ja1B1cmk8eyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IHJlZklkOiBudW1iZXIgfT47XG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH07XG4gICAgICB0eXBlIExvYWRlclF1ZXJpZXMgPSB7XG4gICAgICAgIEE6IFtQcm9qZWN0TG9hZGVyXTtcbiAgICAgICAgUDogW107XG4gICAgICAgIFNTOiBbXTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFJlc3VsdFxuICAgICAgdHlwZSBSZXN1bHQgPSBJbmZlckFsbFN1YnNldHM8U3Vic2V0UXVlcmllcywgTG9hZGVyUXVlcmllcz47XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgICBBOiB7XG4gICAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgZW1haWw6IHN0cmluZztcbiAgICAgICAgICBkZXBhcnRtZW50OiB7IG5hbWU6IHN0cmluZyB9O1xuICAgICAgICAgIHByb2plY3RzOiB7XG4gICAgICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgICAgICAgICB0YWdzOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9W107XG4gICAgICAgICAgfVtdO1xuICAgICAgICB9O1xuICAgICAgICBQOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgZGVwYXJ0bWVudDogeyBuYW1lOiBzdHJpbmcgfSB9O1xuICAgICAgICBTUzogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfTtcbiAgICAgIH0+KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJleHBlY3RUeXBlT2YiLCJpdCIsInJlc3VsdCIsInRvRXF1YWxUeXBlT2YiLCJ0b0hhdmVQcm9wZXJ0eSIsIkEiLCJkZXBhcnRtZW50IiwiY29tcGFueSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsUUFBUSxFQUFFQyxZQUFZLEVBQUVDLEVBQUUsUUFBUSxTQUFTO0FBU3BERixTQUFTLFdBQVc7SUFDbEJFLEdBQUcsZ0NBQWdDO1FBSWpDLE1BQU1DLFNBQVMsQ0FBQztRQUNoQkYsYUFBYUUsUUFBUUMsYUFBYTtJQUNwQztJQUVBRixHQUFHLCtCQUErQjtRQUloQyxNQUFNQyxTQUFTLENBQUM7UUFDaEJGLGFBQWFFLFFBQVFDLGFBQWE7SUFJcEM7SUFFQUYsR0FBRyxxQ0FBcUM7UUFTdEMsTUFBTUMsU0FBUyxDQUFDO1FBQ2hCRixhQUFhRSxRQUFRQyxhQUFhO0lBT3BDO0lBRUFGLEdBQUcsbUJBQW1CO1FBVXBCLE1BQU1DLFNBQVMsQ0FBQztRQUNoQkYsYUFBYUUsUUFBUUMsYUFBYTtJQUtwQztJQUVBRixHQUFHLGNBQWM7UUFJZixNQUFNQyxTQUFTLENBQUM7UUFDaEJGLGFBQWFFLFFBQVFDLGFBQWE7SUFDcEM7SUFFQUYsR0FBRywrQkFBK0I7UUFRaEMsTUFBTUMsU0FBUyxDQUFDO1FBQ2hCRixhQUFhRSxRQUFRQyxhQUFhO0lBSXBDO0lBRUFGLEdBQUcsb0NBQW9DO1FBU3JDLE1BQU1DLFNBQVMsQ0FBQztRQUNoQkYsYUFBYUUsUUFBUUMsYUFBYTtJQUtwQztBQUNGO0FBRUFKLFNBQVMsaUJBQWlCO0lBQ3hCRSxHQUFHLHNCQUFzQjtRQWV2QixNQUFNQyxTQUFTLENBQUM7UUFDaEJGLGFBQWFFLFFBQVFFLGNBQWMsQ0FBQztRQUNwQ0osYUFBYUUsUUFBUUMsYUFBYTtJQUNwQztJQUVBRixHQUFHLGVBQWU7UUEyQmhCLE1BQU1DLFNBQVMsQ0FBQztRQUNoQkYsYUFBYUUsUUFBUUUsY0FBYyxDQUFDO1FBQ3BDSixhQUFhRSxRQUFRQyxhQUFhO0lBR3BDO0lBRUFGLEdBQUcsZUFBZTtRQXVDaEIsTUFBTUMsU0FBUyxDQUFDO1FBQ2hCRixhQUFhRSxRQUFRRSxjQUFjLENBQUM7UUFDcENKLGFBQWFFLFFBQVFFLGNBQWMsQ0FBQztRQUNwQ0osYUFBYUUsUUFBUUUsY0FBYyxDQUFDO1FBQ3BDSixhQUFhRSxRQUFRQyxhQUFhO0lBU3BDO0FBQ0Y7QUFFQUosU0FBUyxtQkFBbUI7SUFDMUJBLFNBQVMsZUFBZTtRQUN0QkUsR0FBRyw0QkFBNEI7WUFxQjdCLE1BQU1DLFNBQVMsQ0FBQztZQUNoQkYsYUFBYUUsUUFBUUUsY0FBYyxDQUFDO1lBQ3BDSixhQUFhRSxPQUFPRyxDQUFDLEVBQUVGLGFBQWE7WUFLcENILGFBQWFFLE9BQU9HLENBQUMsQ0FBQ0MsVUFBVSxDQUFDQyxPQUFPLEVBQUVKLGFBQWE7UUFDekQ7UUFFQUYsR0FBRywyQkFBMkI7WUFxQzVCLE1BQU1DLFNBQVMsQ0FBQztZQUNoQkYsYUFBYUUsUUFBUUUsY0FBYyxDQUFDO1lBQ3BDSixhQUFhRSxRQUFRQyxhQUFhO1FBV3BDO1FBRUFGLEdBQUcsOEJBQThCO1lBb0MvQixNQUFNQyxTQUFTLENBQUM7WUFDaEJGLGFBQWFFLFFBQVFDLGFBQWE7UUFhcEM7SUFDRjtJQUVBSixTQUFTLGlCQUFpQjtRQUN4QkUsR0FBRyw0QkFBNEI7WUFtQzdCLE1BQU1DLFNBQVMsQ0FBQztZQUNoQkYsYUFBYUUsUUFBUUMsYUFBYTtRQUtwQztRQUVBRixHQUFHLDJCQUEyQjtZQXFENUIsTUFBTUMsU0FBUyxDQUFDO1lBQ2hCRixhQUFhRSxRQUFRQyxhQUFhO1FBZ0JwQztJQUNGO0FBQ0YifQ==
|
|
@@ -26,7 +26,7 @@ export type ExtractPuriResult<T> = T extends Puri<any, any, infer R> ? R : never
|
|
|
26
26
|
* @param qbWrapper - Puri 래퍼
|
|
27
27
|
* @param fromIds - 부모 레코드 ID 배열
|
|
28
28
|
*/
|
|
29
|
-
export type PuriLoaderQbFn = (qbWrapper: PuriWrapper<DatabaseSchemaExtend>, fromIds: number[]) => Puri<any, any, any>;
|
|
29
|
+
export type PuriLoaderQbFn = (qbWrapper: PuriWrapper<DatabaseSchemaExtend>, fromIds: number[] | string[]) => Puri<any, any, any>;
|
|
30
30
|
/**
|
|
31
31
|
* 단일 Loader 정의
|
|
32
32
|
* 1:N 또는 N:M 관계 데이터를 로드하는 설정
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puri-subset.types.d.ts","sourceRoot":"","sources":["../../src/database/puri-subset.types.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAEpF;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAMlD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEjG;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAMjF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC,EAC5C,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"puri-subset.types.d.ts","sourceRoot":"","sources":["../../src/database/puri-subset.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,4 +13,4 @@
|
|
|
13
13
|
* Knex QueryBuilder에서 clear 가능한 statement 목록
|
|
14
14
|
*/ export { };
|
|
15
15
|
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLXN1YnNldC50eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogYmlvbWUtaWdub3JlLWFsbCBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogUHVyaSBTdWJzZXQg7YOA7J6FIOyLnOyKpO2FnOyXkOyEnCBhbnnrpbwg7ZeI7Jqp7ZWoICovXG5cbi8qKlxuICogUHVyaSBTdWJzZXQg7YOA7J6FIOyLnOyKpO2FnFxuICpcbiAqIFN1YnNldFF1ZXJ57JmAIExvYWRlclF1ZXJ566W8IOq4sOuwmOycvOuhnCDstZzsooUg6rKw6rO8IO2DgOyeheydhCDstpTroaDtlZjripQg7YOA7J6FIOycoO2LuOumrO2LsOuTpC5cbiAqIO2VteyLrCDqsJzrhZA6XG4gKiAtIFN1YnNldFF1ZXJ5OiDquLDrs7gg7L+866asIChqb2luLCBzZWxlY3QpXG4gKiAtIExvYWRlclF1ZXJ5OiAxOk4sIE46TSDqtIDqs4Qg642w7J207YSwIOuhnOuUqVxuICogLSBIeWRyYXRlOiBmbGF07ZWcIOqysOqzvOulvCDspJHssqkg6rCd7LK066GcIOuzgO2ZmCAo7JiIOiB1c2VyX19uYW1lIOKGkiB7IHVzZXI6IHsgbmFtZSB9IH0pXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZVNjaGVtYUV4dGVuZCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQdXJpIH0gZnJvbSBcIi4vcHVyaVwiO1xuaW1wb3J0IHR5cGUgeyBFeHBhbmQgfSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFB1cmlXcmFwcGVyIH0gZnJvbSBcIi4vcHVyaS13cmFwcGVyXCI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIOq4sOuzuCDtg4DsnoUg7KCV7J2YXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU3Vic2V0UXVlcnkg7ZWo7IiYIOyLnOq3uOuLiOyymFxuICogUHVyaVdyYXBwZXLrpbwg67Cb7JWEIFB1cmkg7L+866asIOu5jOuNlOulvCDrsJjtmZhcbiAqL1xuZXhwb3J0IHR5cGUgUHVyaVN1YnNldEZuID0gKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiBQdXJpPGFueSwgYW55LCBhbnk+O1xuXG4vKipcbiAqIFB1cmkg7J247Iqk7YS07Iqk7JeQ7IScIFRSZXN1bHQg7YOA7J6FIOy2lOy2nFxuICovXG5leHBvcnQgdHlwZSBFeHRyYWN0UHVyaVJlc3VsdDxUPiA9IFQgZXh0ZW5kcyBQdXJpPGFueSwgYW55LCBpbmZlciBSPiA/IFIgOiBuZXZlcjtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTG9hZGVyIOq0gOugqCDtg4DsnoVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBMb2FkZXIg7L+866asIOu5jOuNlCDtlajsiJgg7Iuc6re464uI7LKYXG4gKiBAcGFyYW0gcWJXcmFwcGVyIC0gUHVyaSDrnpjtjbxcbiAqIEBwYXJhbSBmcm9tSWRzIC0g67aA66qoIOugiOy9lOuTnCBJRCDrsLDsl7RcbiAqL1xuZXhwb3J0IHR5cGUgUHVyaUxvYWRlclFiRm4gPSAoXG4gIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLXN1YnNldC50eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogYmlvbWUtaWdub3JlLWFsbCBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogUHVyaSBTdWJzZXQg7YOA7J6FIOyLnOyKpO2FnOyXkOyEnCBhbnnrpbwg7ZeI7Jqp7ZWoICovXG5cbi8qKlxuICogUHVyaSBTdWJzZXQg7YOA7J6FIOyLnOyKpO2FnFxuICpcbiAqIFN1YnNldFF1ZXJ57JmAIExvYWRlclF1ZXJ566W8IOq4sOuwmOycvOuhnCDstZzsooUg6rKw6rO8IO2DgOyeheydhCDstpTroaDtlZjripQg7YOA7J6FIOycoO2LuOumrO2LsOuTpC5cbiAqIO2VteyLrCDqsJzrhZA6XG4gKiAtIFN1YnNldFF1ZXJ5OiDquLDrs7gg7L+866asIChqb2luLCBzZWxlY3QpXG4gKiAtIExvYWRlclF1ZXJ5OiAxOk4sIE46TSDqtIDqs4Qg642w7J207YSwIOuhnOuUqVxuICogLSBIeWRyYXRlOiBmbGF07ZWcIOqysOqzvOulvCDspJHssqkg6rCd7LK066GcIOuzgO2ZmCAo7JiIOiB1c2VyX19uYW1lIOKGkiB7IHVzZXI6IHsgbmFtZSB9IH0pXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZVNjaGVtYUV4dGVuZCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQdXJpIH0gZnJvbSBcIi4vcHVyaVwiO1xuaW1wb3J0IHR5cGUgeyBFeHBhbmQgfSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFB1cmlXcmFwcGVyIH0gZnJvbSBcIi4vcHVyaS13cmFwcGVyXCI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIOq4sOuzuCDtg4DsnoUg7KCV7J2YXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU3Vic2V0UXVlcnkg7ZWo7IiYIOyLnOq3uOuLiOyymFxuICogUHVyaVdyYXBwZXLrpbwg67Cb7JWEIFB1cmkg7L+866asIOu5jOuNlOulvCDrsJjtmZhcbiAqL1xuZXhwb3J0IHR5cGUgUHVyaVN1YnNldEZuID0gKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiBQdXJpPGFueSwgYW55LCBhbnk+O1xuXG4vKipcbiAqIFB1cmkg7J247Iqk7YS07Iqk7JeQ7IScIFRSZXN1bHQg7YOA7J6FIOy2lOy2nFxuICovXG5leHBvcnQgdHlwZSBFeHRyYWN0UHVyaVJlc3VsdDxUPiA9IFQgZXh0ZW5kcyBQdXJpPGFueSwgYW55LCBpbmZlciBSPiA/IFIgOiBuZXZlcjtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTG9hZGVyIOq0gOugqCDtg4DsnoVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBMb2FkZXIg7L+866asIOu5jOuNlCDtlajsiJgg7Iuc6re464uI7LKYXG4gKiBAcGFyYW0gcWJXcmFwcGVyIC0gUHVyaSDrnpjtjbxcbiAqIEBwYXJhbSBmcm9tSWRzIC0g67aA66qoIOugiOy9lOuTnCBJRCDrsLDsl7RcbiAqL1xuZXhwb3J0IHR5cGUgUHVyaUxvYWRlclFiRm4gPSAoXG4gIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICBmcm9tSWRzOiBudW1iZXJbXSB8IHN0cmluZ1tdLFxuKSA9PiBQdXJpPGFueSwgYW55LCBhbnk+O1xuXG4vKipcbiAqIOuLqOydvCBMb2FkZXIg7KCV7J2YXG4gKiAxOk4g65iQ64qUIE46TSDqtIDqs4Qg642w7J207YSw66W8IOuhnOuTnO2VmOuKlCDshKTsoJVcbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY1B1cmlMb2FkZXIgPSB7XG4gIC8qKiDqsrDqs7wg6rCd7LK07JeQ7IScIOyCrOyaqe2VoCDtlYTrk5zrqoUgKi9cbiAgYXM6IHN0cmluZztcbiAgLyoqIOu2gOuqqCDroIjsvZTrk5zsmYAg7Jew6rKw7ZWgIOywuOyhsCDtlYTrk5zrqoUgKi9cbiAgcmVmSWQ6IHN0cmluZztcbiAgLyoqIOuNsOydtO2EsCDroZzrlKkg7L+866asIOu5jOuNlCAqL1xuICBxYjogUHVyaUxvYWRlclFiRm47XG4gIC8qKiDspJHssqkg66Gc642UICjsnqzqt4DsoIEg66Gc65SpIOyngOybkCkgKi9cbiAgbG9hZGVycz86IEdlbmVyaWNQdXJpTG9hZGVyW107XG59O1xuXG4vKipcbiAqIOuqqOuNuOuzhCBMb2FkZXIg7L+866asIOy7rOugieyFmFxuICog6rCBIFN1YnNldEtleeyXkCDrjIDtlbQgTG9hZGVyIOuwsOyXtOydhCDsoJXsnZhcbiAqL1xuZXhwb3J0IHR5cGUgUHVyaUxvYWRlclF1ZXJpZXM8VFN1YnNldEtleSBleHRlbmRzIHN0cmluZz4gPSBSZWNvcmQ8VFN1YnNldEtleSwgR2VuZXJpY1B1cmlMb2FkZXJbXT47XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEh5ZHJhdGUg7YOA7J6FIOyLnOyKpO2FnFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIOq1rOu2hOyekChfXykg7JWe67aA67aEIOy2lOy2nFxuICogQGV4YW1wbGUgRXh0cmFjdEhlYWQ8XCJ1c2VyX19uYW1lXCI+ID0gXCJ1c2VyXCJcbiAqL1xudHlwZSBFeHRyYWN0SGVhZDxLIGV4dGVuZHMgc3RyaW5nPiA9IEsgZXh0ZW5kcyBgJHtpbmZlciBIZWFkfV9fJHtzdHJpbmd9YCA/IEhlYWQgOiBuZXZlcjtcblxuLyoqXG4gKiDqtazrtoTsnpAoX18pIOuSt+u2gOu2hCDstpTstpxcbiAqIEBleGFtcGxlIEV4dHJhY3RUYWlsPFwidXNlcl9fcHJvZmlsZV9fbmFtZVwiLCBcInVzZXJcIj4gPSBcInByb2ZpbGVfX25hbWVcIlxuICovXG50eXBlIEV4dHJhY3RUYWlsPEsgZXh0ZW5kcyBzdHJpbmcsIEhlYWQgZXh0ZW5kcyBzdHJpbmc+ID0gSyBleHRlbmRzIGAke0hlYWR9X18ke2luZmVyIFRhaWx9YFxuICA/IFRhaWxcbiAgOiBuZXZlcjtcblxuLyoqXG4gKiBGbGF0IOqwneyytOulvCDspJHssqkg6rCd7LK066GcIOuzgO2ZmFxuICpcbiAqIOufsO2DgOyehCBoeWRyYXRlIO2VqOyImOyZgCDrj5nsnbztlZwg64+Z7J6R7J2EIO2DgOyehSDroIjrsqjsl5DshJwg6rWs7ZiELlxuICogYF9fYOuhnCDqtazrtoTrkJwg7YKk66W8IOykkeyyqSDqsJ3ssrQg6rWs7KGw66GcIOuzgO2ZmC5cbiAqXG4gKiBAZXhhbXBsZVxuICogdHlwZSBJbnB1dCA9IHsgaWQ6IG51bWJlcjsgdXNlcl9fbmFtZTogc3RyaW5nOyB1c2VyX19wcm9maWxlX19iaW86IHN0cmluZyB9XG4gKiB0eXBlIE91dHB1dCA9IEh5ZHJhdGU8SW5wdXQ+XG4gKiAvLyB7IGlkOiBudW1iZXI7IHVzZXI6IHsgbmFtZTogc3RyaW5nOyBwcm9maWxlOiB7IGJpbzogc3RyaW5nIH0gfSB9XG4gKi9cbmV4cG9ydCB0eXBlIEh5ZHJhdGU8VD4gPSBFeHBhbmQ8SHlkcmF0ZUlubmVyPFQ+PjtcbnR5cGUgSHlkcmF0ZUlubmVyPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUIGFzIEsgZXh0ZW5kcyBgJHtzdHJpbmd9X18ke3N0cmluZ31gID8gbmV2ZXIgOiBLXTogVFtLXTtcbn0gJiB7XG4gIFtLIGluIEV4dHJhY3RIZWFkPGtleW9mIFQgJiBzdHJpbmc+XTogRXhwYW5kPFxuICAgIEh5ZHJhdGVJbm5lcjx7XG4gICAgICBbUCBpbiBrZXlvZiBUIGFzIFAgZXh0ZW5kcyBgJHtLfV9fJHtzdHJpbmd9YCA/IEV4dHJhY3RUYWlsPFAgJiBzdHJpbmcsIEs+IDogbmV2ZXJdOiBUW1BdO1xuICAgIH0+XG4gID47XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkZXIg6rKw6rO8IO2DgOyehSDstpTroaBcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBMb2FkZXIg7L+866asIO2VqOyImOyXkOyEnCDqsrDqs7wg7YOA7J6FIOy2lOy2nCAocmVmSWQg7KCc7Jm4LCBIeWRyYXRlIOyggeyaqSlcbiAqL1xudHlwZSBFeHRyYWN0TG9hZGVyUmVzdWx0PFRMb2FkZXJRYj4gPSBUTG9hZGVyUWIgZXh0ZW5kcyBQdXJpTG9hZGVyUWJGblxuICA/IEV4cGFuZDxIeWRyYXRlPE9taXQ8RXh0cmFjdFB1cmlSZXN1bHQ8UmV0dXJuVHlwZTxUTG9hZGVyUWI+PiwgXCJyZWZJZFwiPj4+XG4gIDogbmV2ZXI7XG5cbi8qKlxuICogTG9hZGVyIOuwsOyXtOyXkOyEnCDqsrDqs7wg6rCd7LK0IO2DgOyehSDruYzrk5wgKOyerOq3gOyggeycvOuhnCDspJHssqkgbG9hZGVyIOyymOumrClcbiAqXG4gKiBAZXhhbXBsZVxuICogdHlwZSBMb2FkZXJzID0gW1xuICogICB7IGFzOiBcImVtcGxveWVlc1wiOyByZWZJZDogXCJpZFwiOyBxYjogLi4uOyBsb2FkZXJzOiBbeyBhczogXCJwcm9qZWN0c1wiOyAuLi4gfV0gfVxuICogXVxuICogdHlwZSBSZXN1bHQgPSBMb2FkZXJzUmVzdWx0PExvYWRlcnM+XG4gKiAvLyB7IGVtcGxveWVlczogQXJyYXk8eyAuLi5lbXBsb3llZSBmaWVsZHM7IHByb2plY3RzOiBBcnJheTwuLi4+IH0+IH1cbiAqL1xuZXhwb3J0IHR5cGUgTG9hZGVyc1Jlc3VsdDxUTG9hZGVycyBleHRlbmRzIEdlbmVyaWNQdXJpTG9hZGVyW10+ID0gRXhwYW5kPHtcbiAgW0wgaW4gVExvYWRlcnNbbnVtYmVyXSBhcyBMW1wiYXNcIl1dOiBXaXRoTG9hZGVyczxFeHRyYWN0TG9hZGVyUmVzdWx0PExbXCJxYlwiXT4sIExbXCJsb2FkZXJzXCJdPltdO1xufT47XG5cbi8qKlxuICog6riw67O4IOqysOqzvOyZgCBMb2FkZXIg6rKw6rO8IOuzke2VqVxuICovXG50eXBlIFdpdGhMb2FkZXJzPFRCYXNlLCBUTG9hZGVycz4gPSBUTG9hZGVycyBleHRlbmRzIEdlbmVyaWNQdXJpTG9hZGVyW11cbiAgPyBFeHBhbmQ8VEJhc2UgJiBMb2FkZXJzUmVzdWx0PFRMb2FkZXJzPj5cbiAgOiBUQmFzZTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3Vic2V0IOqysOqzvCDtg4DsnoUg7LaU66GgXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICog64uo7J28IFN1YnNldCDtlajsiJggKyBMb2FkZXLsl5DshJwg7LWc7KKFIOqysOqzvCDtg4DsnoUg7LaU66GgXG4gKi9cbnR5cGUgSW5mZXJTdWJzZXRXaXRoTG9hZGVyczxcbiAgVFN1YnNldEZuIGV4dGVuZHMgKC4uLmFyZ3M6IGFueSkgPT4gUHVyaTxhbnksIGFueSwgYW55PixcbiAgVExvYWRlcnMgZXh0ZW5kcyBHZW5lcmljUHVyaUxvYWRlcltdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuPiA9IEV4cGFuZDxIeWRyYXRlPFdpdGhMb2FkZXJzPEV4dHJhY3RQdXJpUmVzdWx0PFJldHVyblR5cGU8VFN1YnNldEZuPj4sIFRMb2FkZXJzPj4+O1xuXG4vKipcbiAqIOyghOyytCBTdWJzZXRRdWVyaWVzICsgTG9hZGVyUXVlcmllcyDqsJ3ssrTsl5DshJwg7KCE7LK0IOqysOqzvCDrp7Ug7IOd7ISxXG4gKlxuICogQHRlbXBsYXRlIFRTdWJzZXRNYXAgLSBTdWJzZXQg7ZWo7IiY65Ok7J2YIOuqqOydjCDqsJ3ssrRcbiAqIEB0ZW1wbGF0ZSBUTG9hZGVyTWFwIC0gTG9hZGVyIOuwsOyXtOuTpOydmCDrqqjsnYwg6rCd7LK0XG4gKlxuICogQGV4YW1wbGVcbiAqIHR5cGUgUmVzdWx0ID0gSW5mZXJBbGxTdWJzZXRzPFxuICogICB7IEE6ICgpID0+IFB1cmk8Li4uPiwgUDogKCkgPT4gUHVyaTwuLi4+IH0sXG4gKiAgIHsgQTogWy4uLmxvYWRlcnNdLCBQOiBbXSB9XG4gKiA+XG4gKiAvLyB7IEE6IEluZmVycmVkVHlwZUE7IFA6IEluZmVycmVkVHlwZVAgfVxuICovXG5leHBvcnQgdHlwZSBJbmZlckFsbFN1YnNldHM8XG4gIFRTdWJzZXRNYXAgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCAoLi4uYXJnczogYW55KSA9PiBhbnk+LFxuICBUTG9hZGVyTWFwIGV4dGVuZHMgUGFydGlhbDxSZWNvcmQ8c3RyaW5nLCBHZW5lcmljUHVyaUxvYWRlcltdPj4sXG4+ID0ge1xuICBbSyBpbiBrZXlvZiBUU3Vic2V0TWFwXTogSW5mZXJTdWJzZXRXaXRoTG9hZGVyczxcbiAgICBUU3Vic2V0TWFwW0tdLFxuICAgIEsgZXh0ZW5kcyBrZXlvZiBUTG9hZGVyTWFwID8gVExvYWRlck1hcFtLXSA6IHVuZGVmaW5lZFxuICA+O1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ2xlYXIg66y4XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogS25leCBRdWVyeUJ1aWxkZXLsl5DshJwgY2xlYXIg6rCA64ql7ZWcIHN0YXRlbWVudCDrqqnroZ1cbiAqL1xuZXhwb3J0IHR5cGUgQ2xlYXJTdGF0ZW1lbnRzID1cbiAgfCBcIndpdGhcIlxuICB8IFwic2VsZWN0XCJcbiAgfCBcImNvbHVtbnNcIlxuICB8IFwiaGludENvbW1lbnRzXCJcbiAgfCBcIndoZXJlXCJcbiAgfCBcInVuaW9uXCJcbiAgfCBcInVzaW5nXCJcbiAgfCBcImpvaW5cIlxuICB8IFwiZ3JvdXBcIlxuICB8IFwib3JkZXJcIlxuICB8IFwiaGF2aW5nXCJcbiAgfCBcImxpbWl0XCJcbiAgfCBcIm9mZnNldFwiXG4gIHwgXCJjb3VudGVyXCJcbiAgfCBcImNvdW50ZXJzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0ZBQWtGLEdBRWxGOzs7Ozs7OztDQVFDLEdBb0tELCtFQUErRTtBQUMvRSxVQUFVO0FBQ1YsK0VBQStFO0FBRS9FOztDQUVDLEdBQ0QsV0FlZSJ9
|
package/dist/database/puri.d.ts
CHANGED
|
@@ -207,9 +207,13 @@ export declare class WhereGroup<TTables extends Record<string, any>> {
|
|
|
207
207
|
where(conditions: WhereCondition<TTables>): this;
|
|
208
208
|
where<TColumn extends AvailableColumns<TTables>>(column: TColumn, value: ExtractColumnType<TTables, TColumn & string>): this;
|
|
209
209
|
where<TColumn extends AvailableColumns<TTables>>(column: TColumn, operator: WhereOperator, value: ExtractColumnType<TTables, TColumn & string>): this;
|
|
210
|
+
whereIn<TColumn extends AvailableColumns<TTables>>(column: TColumn, values: ExtractColumnType<TTables, TColumn & string>[]): this;
|
|
211
|
+
whereNotIn<TColumn extends AvailableColumns<TTables>>(column: TColumn, values: ExtractColumnType<TTables, TColumn & string>[]): this;
|
|
210
212
|
orWhere(conditions: WhereCondition<TTables>): this;
|
|
211
213
|
orWhere<TColumn extends AvailableColumns<TTables>>(column: TColumn, value: ExtractColumnType<TTables, TColumn & string>): this;
|
|
212
214
|
orWhere<TColumn extends AvailableColumns<TTables>>(column: TColumn, operator: WhereOperator, value: ExtractColumnType<TTables, TColumn & string>): this;
|
|
215
|
+
orWhereIn<TColumn extends AvailableColumns<TTables>>(column: TColumn, values: ExtractColumnType<TTables, TColumn & string>[]): this;
|
|
216
|
+
orWhereNotIn<TColumn extends AvailableColumns<TTables>>(column: TColumn, values: ExtractColumnType<TTables, TColumn & string>[]): this;
|
|
213
217
|
whereGroup(callback: (g: WhereGroup<TTables>) => void): this;
|
|
214
218
|
orWhereGroup(callback: (g: WhereGroup<TTables>) => void): this;
|
|
215
219
|
}
|