@unifylib/ui-lib 1.1.64 → 1.2.1
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/cli/generators/dashboard.js +147 -0
- package/cli/generators/form-screen.js +95 -0
- package/cli/generators/line-editor.js +110 -0
- package/cli/generators/permission-matrix.js +115 -0
- package/cli/generators/section-form.js +103 -0
- package/cli/generators/table-screen.js +181 -0
- package/cli/index.js +185 -0
- package/cli/utils.js +228 -0
- package/esm2022/lib/base-model/audit-log-entry.mjs +1 -1
- package/esm2022/lib/base-model/field-info.mjs +2 -1
- package/esm2022/lib/components/action-comment/action-comment.component.mjs +6 -5
- package/esm2022/lib/components/advanced-filter/filter-builder/filter-builder.component.mjs +8 -3
- package/esm2022/lib/components/audit-log-list/audit-log.component.mjs +58 -22
- package/esm2022/lib/components/auto-complete/auto-complete.component.mjs +11 -3
- package/esm2022/lib/components/base-form/base-form.component.mjs +1 -1
- package/esm2022/lib/components/base-form-canvas/base-form-canvas.component.mjs +72 -4
- package/esm2022/lib/components/base-table/base-table.component.mjs +81 -24
- package/esm2022/lib/components/button-actions/button-actions.component.mjs +3 -3
- package/esm2022/lib/components/editable-base-table/editable-base-table.component.mjs +3 -3
- package/esm2022/lib/components/equation-builder/equation-builder.component.mjs +9 -4
- package/esm2022/lib/components/multi-auto-complete/multi-auto-complete.component.mjs +20 -4
- package/esm2022/lib/components/paginator/paginator.component.mjs +26 -6
- package/esm2022/lib/components/permission-matrix/permission-matrix.component.mjs +46 -4
- package/esm2022/lib/components/report-details-dialog/report-details-dialog.component.mjs +3 -3
- package/esm2022/lib/components/report-form/report-form.component.mjs +3 -3
- package/esm2022/lib/components/search-bar/search-bar.component.mjs +5 -4
- package/esm2022/lib/components/section-form-canvas/section-form-canvas.component.mjs +11 -3
- package/esm2022/lib/components/shared/attachment-uploader/attachment-uploader.component.mjs +5 -3
- package/esm2022/lib/components/snackbar-static/snackbar-static.component.mjs +3 -3
- package/esm2022/lib/components/title-bar/title-bar.component.mjs +3 -3
- package/esm2022/lib/utils/base-utils.mjs +6 -3
- package/fesm2022/iq-ui-lib.mjs +375 -108
- package/fesm2022/iq-ui-lib.mjs.map +1 -1
- package/fesm2022/unifylib-ui-lib.mjs +375 -108
- package/fesm2022/unifylib-ui-lib.mjs.map +1 -1
- package/lib/base-model/audit-log-entry.d.ts +1 -0
- package/lib/base-model/field-info.d.ts +1 -0
- package/lib/components/advanced-filter/filter-builder/filter-builder.component.d.ts +2 -0
- package/lib/components/audit-log-list/audit-log.component.d.ts +6 -2
- package/lib/components/auto-complete/auto-complete.component.d.ts +2 -1
- package/lib/components/base-form-canvas/base-form-canvas.component.d.ts +5 -0
- package/lib/components/base-table/base-table.component.d.ts +11 -3
- package/lib/components/multi-auto-complete/multi-auto-complete.component.d.ts +3 -1
- package/lib/components/paginator/paginator.component.d.ts +6 -1
- package/lib/components/permission-matrix/permission-matrix.component.d.ts +5 -1
- package/lib/components/section-form-canvas/section-form-canvas.component.d.ts +3 -1
- package/lib/components/shared/attachment-uploader/attachment-uploader.component.d.ts +2 -1
- package/package.json +4 -1
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @param {{
|
|
5
|
+
* kebab: string,
|
|
6
|
+
* pascal: string,
|
|
7
|
+
* labelsSection: string,
|
|
8
|
+
* apiUri: string,
|
|
9
|
+
* importPath: string,
|
|
10
|
+
* }} ctx
|
|
11
|
+
*/
|
|
12
|
+
function generate(ctx) {
|
|
13
|
+
const fileBase = ctx.kebab;
|
|
14
|
+
|
|
15
|
+
const settings = `import { Validators } from "@angular/forms";
|
|
16
|
+
import {
|
|
17
|
+
ButtonActionSettings,
|
|
18
|
+
FieldInfo,
|
|
19
|
+
FilterRequest,
|
|
20
|
+
PageInfo,
|
|
21
|
+
ReportRequest,
|
|
22
|
+
TableColumn,
|
|
23
|
+
} from "${ctx.importPath}";
|
|
24
|
+
|
|
25
|
+
export const PAGE_INFO: PageInfo = {
|
|
26
|
+
id: "${ctx.kebab}",
|
|
27
|
+
labelsSection: "${ctx.labelsSection}",
|
|
28
|
+
hasAddButton: true,
|
|
29
|
+
apiUri: "${ctx.apiUri}",
|
|
30
|
+
selfRouting: true,
|
|
31
|
+
listRoutePath: "/${ctx.kebab}",
|
|
32
|
+
draftSupported: true,
|
|
33
|
+
pageSize: 10,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export const COLUMNS: TableColumn<Record<string, unknown>>[] = [
|
|
37
|
+
{ property: "id", type: "text", enableSorting: true, visible: true, label: "id" },
|
|
38
|
+
{ property: "name", type: "text", enableSorting: true, visible: true, label: "name" },
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
export const FILTER_FIELDS: FieldInfo[] = [
|
|
42
|
+
new FieldInfo({
|
|
43
|
+
property: "name",
|
|
44
|
+
row: 1,
|
|
45
|
+
type: "text",
|
|
46
|
+
label: "name",
|
|
47
|
+
advancedFilter: true,
|
|
48
|
+
filterOperator: "LIKE",
|
|
49
|
+
validators: [Validators.maxLength(30)],
|
|
50
|
+
maxLength: 30,
|
|
51
|
+
} as FieldInfo),
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
function buildReportRequest(): ReportRequest {
|
|
55
|
+
const filterRequest = new FilterRequest(PAGE_INFO.pageSize ?? 10);
|
|
56
|
+
filterRequest.columns = COLUMNS.filter((c) => c.visible !== false).map((c) => c.property);
|
|
57
|
+
return new ReportRequest({ filterRequest });
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export const REPORT_REQUEST: ReportRequest = buildReportRequest();
|
|
61
|
+
|
|
62
|
+
export const LIST_ACTIONS: ButtonActionSettings[] = [
|
|
63
|
+
new ButtonActionSettings({
|
|
64
|
+
key: 1,
|
|
65
|
+
id: "view",
|
|
66
|
+
label: "VIEW",
|
|
67
|
+
linkHref: (row: unknown) => {
|
|
68
|
+
const id = (row as { id?: number }).id;
|
|
69
|
+
return id != null ? \`/${ctx.kebab}/view/\${id}\` : undefined;
|
|
70
|
+
},
|
|
71
|
+
} as ButtonActionSettings),
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
export const TOOLBAR_ACTIONS: ButtonActionSettings[] = [
|
|
75
|
+
new ButtonActionSettings({
|
|
76
|
+
key: 1,
|
|
77
|
+
id: "create",
|
|
78
|
+
label: "ADD_NEW",
|
|
79
|
+
linkHref: "/${ctx.kebab}/new",
|
|
80
|
+
} as ButtonActionSettings),
|
|
81
|
+
];
|
|
82
|
+
`;
|
|
83
|
+
|
|
84
|
+
const componentTs = `import { ChangeDetectionStrategy, Component, inject } from "@angular/core";
|
|
85
|
+
import { Router } from "@angular/router";
|
|
86
|
+
import { TranslateModule } from "@ngx-translate/core";
|
|
87
|
+
import {
|
|
88
|
+
BaseTableComponent,
|
|
89
|
+
ButtonActionSettings,
|
|
90
|
+
Filter,
|
|
91
|
+
} from "${ctx.importPath}";
|
|
92
|
+
import {
|
|
93
|
+
COLUMNS,
|
|
94
|
+
FILTER_FIELDS,
|
|
95
|
+
LIST_ACTIONS,
|
|
96
|
+
PAGE_INFO,
|
|
97
|
+
REPORT_REQUEST,
|
|
98
|
+
TOOLBAR_ACTIONS,
|
|
99
|
+
} from "./${fileBase}.settings";
|
|
100
|
+
|
|
101
|
+
@Component({
|
|
102
|
+
selector: "app-${fileBase}",
|
|
103
|
+
standalone: true,
|
|
104
|
+
imports: [BaseTableComponent, TranslateModule],
|
|
105
|
+
templateUrl: "./${fileBase}.component.html",
|
|
106
|
+
styleUrls: ["./${fileBase}.component.scss"],
|
|
107
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
108
|
+
})
|
|
109
|
+
export class ${ctx.pascal}Component {
|
|
110
|
+
private readonly router = inject(Router);
|
|
111
|
+
|
|
112
|
+
readonly pageInfo = PAGE_INFO;
|
|
113
|
+
readonly columnsDefinition = COLUMNS;
|
|
114
|
+
readonly filterFieldDefinitions = FILTER_FIELDS;
|
|
115
|
+
readonly reportRequest = REPORT_REQUEST;
|
|
116
|
+
readonly filters: Filter[] = [];
|
|
117
|
+
readonly listActions = LIST_ACTIONS;
|
|
118
|
+
readonly toolbarActions = TOOLBAR_ACTIONS;
|
|
119
|
+
readonly isPending = false;
|
|
120
|
+
|
|
121
|
+
onListActionClicked(event: {
|
|
122
|
+
action: ButtonActionSettings;
|
|
123
|
+
row: unknown;
|
|
124
|
+
isPending: boolean;
|
|
125
|
+
}): void {
|
|
126
|
+
const href =
|
|
127
|
+
typeof event.action.linkHref === "function"
|
|
128
|
+
? event.action.linkHref(event.row)
|
|
129
|
+
: event.action.linkHref;
|
|
130
|
+
if (href) {
|
|
131
|
+
void this.router.navigateByUrl(href);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
onToolbarButton(action: ButtonActionSettings): void {
|
|
136
|
+
if (typeof action.linkHref === "string") {
|
|
137
|
+
void this.router.navigateByUrl(action.linkHref);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
`;
|
|
142
|
+
|
|
143
|
+
const componentHtml = `<app-base-table
|
|
144
|
+
[pageInfo]="pageInfo"
|
|
145
|
+
[columns]="columnsDefinition"
|
|
146
|
+
[reportRequest]="reportRequest"
|
|
147
|
+
[filterFields]="filterFieldDefinitions"
|
|
148
|
+
[isPending]="isPending"
|
|
149
|
+
[filters]="filters"
|
|
150
|
+
[listAction]="listActions"
|
|
151
|
+
[extraActions]="toolbarActions"
|
|
152
|
+
[buttonsDisplayMode]="'list'"
|
|
153
|
+
(listActionClicked)="onListActionClicked($event)"
|
|
154
|
+
(buttonClicked)="onToolbarButton($event)">
|
|
155
|
+
</app-base-table>
|
|
156
|
+
`;
|
|
157
|
+
|
|
158
|
+
const componentScss = `:host {
|
|
159
|
+
display: block;
|
|
160
|
+
}
|
|
161
|
+
`;
|
|
162
|
+
|
|
163
|
+
return [
|
|
164
|
+
{ relative: `${fileBase}.settings.ts`, content: settings },
|
|
165
|
+
{ relative: `${fileBase}.component.ts`, content: componentTs },
|
|
166
|
+
{ relative: `${fileBase}.component.html`, content: componentHtml },
|
|
167
|
+
{ relative: `${fileBase}.component.scss`, content: componentScss },
|
|
168
|
+
];
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function getTranslations(ctx) {
|
|
172
|
+
return {
|
|
173
|
+
[`${ctx.labelsSection}.list_title`]: `${ctx.pascal} List`,
|
|
174
|
+
[`${ctx.labelsSection}.id`]: "ID",
|
|
175
|
+
[`${ctx.labelsSection}.name`]: "Name",
|
|
176
|
+
VIEW: "View",
|
|
177
|
+
ADD_NEW: "Add new",
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
module.exports = { generate, getTranslations };
|
package/cli/index.js
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const {
|
|
6
|
+
kebabCase,
|
|
7
|
+
pascalCase,
|
|
8
|
+
upperSnakeFromKebab,
|
|
9
|
+
lastPathSegment,
|
|
10
|
+
writeFiles,
|
|
11
|
+
upsertI18nEntries,
|
|
12
|
+
} = require("./utils");
|
|
13
|
+
|
|
14
|
+
const GENERATORS = {
|
|
15
|
+
"form-screen": require("./generators/form-screen.js"),
|
|
16
|
+
"table-screen": require("./generators/table-screen.js"),
|
|
17
|
+
"section-form": require("./generators/section-form.js"),
|
|
18
|
+
"line-editor": require("./generators/line-editor.js"),
|
|
19
|
+
dashboard: require("./generators/dashboard.js"),
|
|
20
|
+
"permission-matrix": require("./generators/permission-matrix.js"),
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
function printHelp() {
|
|
24
|
+
console.log(`
|
|
25
|
+
iq-ui — scaffold Angular screens that use @unifylib/ui-lib
|
|
26
|
+
|
|
27
|
+
Usage:
|
|
28
|
+
iq-ui -g <type> <destination> [options]
|
|
29
|
+
|
|
30
|
+
Types:
|
|
31
|
+
form-screen app-base-form-canvas + settings
|
|
32
|
+
table-screen app-base-table + settings
|
|
33
|
+
section-form lib-section-form-canvas + settings
|
|
34
|
+
line-editor app-item-line-editor + settings
|
|
35
|
+
dashboard lib-action-card grid (no settings file)
|
|
36
|
+
permission-matrix lib-permission-matrix + settings
|
|
37
|
+
|
|
38
|
+
Options:
|
|
39
|
+
--name <n> File/class base name (default: last segment of destination)
|
|
40
|
+
--labels-section <s> i18n labelsSection (default: UPPER_SNAKE from name)
|
|
41
|
+
--api-uri <u> API path for PageInfo.apiUri (default: /<name>)
|
|
42
|
+
--fields-count <n> Placeholder fields (default: 6; form-screen, section-form, line-editor)
|
|
43
|
+
--import-path <p> Library import (default: @iq/ui-lib)
|
|
44
|
+
--i18n-path <p> Optional translation file/folder (example: src/assets/en.json or src/assets)
|
|
45
|
+
--dry-run Print files that would be written
|
|
46
|
+
-h, --help Show this help
|
|
47
|
+
|
|
48
|
+
Examples (after npm install @unifylib/ui-lib, use the package binary; do not run \`npx iq-ui\`, which looks up a wrong package on npm):
|
|
49
|
+
npx -p @unifylib/ui-lib iq-ui -g form-screen src/app/registration --i18n-path src/assets/en.json
|
|
50
|
+
npx -p @unifylib/ui-lib iq-ui -g table-screen src/app/devices --labels-section DEVICE --api-uri /devices/list
|
|
51
|
+
npx -p @unifylib/ui-lib iq-ui -g dashboard src/app/home --import-path @unifylib/ui-lib
|
|
52
|
+
|
|
53
|
+
Local dev / linked build:
|
|
54
|
+
node node_modules/@unifylib/ui-lib/cli/index.js -g form-screen src/app/registration
|
|
55
|
+
`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @returns {{
|
|
60
|
+
* type?: string,
|
|
61
|
+
* destination?: string,
|
|
62
|
+
* name?: string,
|
|
63
|
+
* labelsSection?: string,
|
|
64
|
+
* apiUri?: string,
|
|
65
|
+
* fieldsCount: number,
|
|
66
|
+
* importPath: string,
|
|
67
|
+
* i18nPath?: string,
|
|
68
|
+
* dryRun: boolean,
|
|
69
|
+
* help: boolean,
|
|
70
|
+
* }}
|
|
71
|
+
*/
|
|
72
|
+
function parseArgs(argv) {
|
|
73
|
+
const out = {
|
|
74
|
+
fieldsCount: 6,
|
|
75
|
+
importPath: "@iq/ui-lib",
|
|
76
|
+
dryRun: false,
|
|
77
|
+
help: false,
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
for (let i = 2; i < argv.length; i++) {
|
|
81
|
+
const a = argv[i];
|
|
82
|
+
if (a === "-h" || a === "--help") {
|
|
83
|
+
out.help = true;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (a === "--dry-run") {
|
|
87
|
+
out.dryRun = true;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (a === "-g" || a === "--generate") {
|
|
91
|
+
out.type = argv[++i];
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (a === "--name") {
|
|
95
|
+
out.name = argv[++i];
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (a === "--labels-section") {
|
|
99
|
+
out.labelsSection = argv[++i];
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (a === "--api-uri") {
|
|
103
|
+
out.apiUri = argv[++i];
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (a === "--fields-count") {
|
|
107
|
+
out.fieldsCount = parseInt(argv[++i], 10) || 6;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (a === "--import-path") {
|
|
111
|
+
out.importPath = argv[++i];
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (a === "--i18n-path") {
|
|
115
|
+
out.i18nPath = argv[++i];
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if (a.startsWith("-")) {
|
|
119
|
+
console.error("Unknown option:", a);
|
|
120
|
+
process.exitCode = 1;
|
|
121
|
+
out.help = true;
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
if (!out.destination) {
|
|
125
|
+
out.destination = a;
|
|
126
|
+
} else {
|
|
127
|
+
console.error("Unexpected argument:", a);
|
|
128
|
+
process.exitCode = 1;
|
|
129
|
+
out.help = true;
|
|
130
|
+
return out;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return out;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function main() {
|
|
137
|
+
const args = parseArgs(process.argv);
|
|
138
|
+
if (args.help) {
|
|
139
|
+
printHelp();
|
|
140
|
+
process.exit(process.exitCode || 0);
|
|
141
|
+
}
|
|
142
|
+
if (!args.type || !args.destination) {
|
|
143
|
+
console.error("Missing required: -g <type> and <destination>\n");
|
|
144
|
+
printHelp();
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const gen = GENERATORS[args.type];
|
|
149
|
+
if (!gen || typeof gen.generate !== "function") {
|
|
150
|
+
console.error("Unknown generator type:", args.type);
|
|
151
|
+
printHelp();
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const rawName = args.name || lastPathSegment(args.destination);
|
|
156
|
+
const kebab = kebabCase(rawName);
|
|
157
|
+
const pascal = pascalCase(rawName);
|
|
158
|
+
const labelsSection = args.labelsSection || upperSnakeFromKebab(kebab);
|
|
159
|
+
const apiUri = args.apiUri != null ? args.apiUri : `/${kebab}`;
|
|
160
|
+
|
|
161
|
+
const destDir = path.isAbsolute(args.destination)
|
|
162
|
+
? args.destination
|
|
163
|
+
: path.join(process.cwd(), args.destination);
|
|
164
|
+
|
|
165
|
+
const ctx = {
|
|
166
|
+
kebab,
|
|
167
|
+
pascal,
|
|
168
|
+
labelsSection,
|
|
169
|
+
apiUri,
|
|
170
|
+
importPath: args.importPath,
|
|
171
|
+
fieldsCount: args.fieldsCount,
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
const files = gen.generate(ctx);
|
|
175
|
+
writeFiles({ destDir, dryRun: args.dryRun }, files);
|
|
176
|
+
|
|
177
|
+
if (args.i18nPath && typeof gen.getTranslations === "function") {
|
|
178
|
+
const translations = gen.getTranslations(ctx);
|
|
179
|
+
if (translations && Object.keys(translations).length > 0) {
|
|
180
|
+
upsertI18nEntries(args.i18nPath, translations, args.dryRun);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
main();
|
package/cli/utils.js
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @param {string} destPath
|
|
8
|
+
* @returns {string}
|
|
9
|
+
*/
|
|
10
|
+
function lastPathSegment(destPath) {
|
|
11
|
+
const normalized = destPath.replace(/\\/g, "/").replace(/\/+$/, "");
|
|
12
|
+
const parts = normalized.split("/").filter(Boolean);
|
|
13
|
+
return parts[parts.length - 1] || "feature";
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @param {string} str
|
|
18
|
+
* @returns {string}
|
|
19
|
+
*/
|
|
20
|
+
function kebabCase(str) {
|
|
21
|
+
return String(str)
|
|
22
|
+
.replace(/([a-z])([A-Z])/g, "$1-$2")
|
|
23
|
+
.replace(/[\s_]+/g, "-")
|
|
24
|
+
.toLowerCase()
|
|
25
|
+
.replace(/[^a-z0-9-]/g, "")
|
|
26
|
+
.replace(/-+/g, "-")
|
|
27
|
+
.replace(/^-|-$/g, "") || "feature";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @param {string} str
|
|
32
|
+
* @returns {string}
|
|
33
|
+
*/
|
|
34
|
+
function pascalCase(str) {
|
|
35
|
+
return kebabCase(str)
|
|
36
|
+
.split("-")
|
|
37
|
+
.filter(Boolean)
|
|
38
|
+
.map((s) => s[0].toUpperCase() + s.slice(1))
|
|
39
|
+
.join("");
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @param {string} kebab
|
|
44
|
+
* @returns {string}
|
|
45
|
+
*/
|
|
46
|
+
function upperSnakeFromKebab(kebab) {
|
|
47
|
+
return kebabCase(kebab)
|
|
48
|
+
.split("-")
|
|
49
|
+
.filter(Boolean)
|
|
50
|
+
.map((s) => s.toUpperCase())
|
|
51
|
+
.join("_");
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @param {string} destDir
|
|
56
|
+
* @param {boolean} dryRun
|
|
57
|
+
*/
|
|
58
|
+
function ensureDir(destDir, dryRun) {
|
|
59
|
+
if (dryRun) return;
|
|
60
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @param {string} filePath
|
|
65
|
+
* @param {string} content
|
|
66
|
+
* @param {boolean} dryRun
|
|
67
|
+
*/
|
|
68
|
+
function writeFile(filePath, content, dryRun) {
|
|
69
|
+
if (dryRun) {
|
|
70
|
+
console.log(`[dry-run] would write ${filePath} (${content.length} bytes)`);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
fs.writeFileSync(filePath, content, "utf8");
|
|
74
|
+
console.log(`Wrote ${filePath}`);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @param {{ destDir: string, dryRun: boolean }} opts
|
|
79
|
+
* @param {Array<{ relative: string, content: string }>} files
|
|
80
|
+
*/
|
|
81
|
+
function writeFiles(opts, files) {
|
|
82
|
+
ensureDir(opts.destDir, opts.dryRun);
|
|
83
|
+
for (const f of files) {
|
|
84
|
+
const filePath = path.join(opts.destDir, f.relative);
|
|
85
|
+
writeFile(filePath, f.content, opts.dryRun);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @param {Record<string, unknown>} target
|
|
91
|
+
* @param {string[]} pathParts
|
|
92
|
+
* @param {string} value
|
|
93
|
+
*/
|
|
94
|
+
function setNested(target, pathParts, value) {
|
|
95
|
+
let cursor = target;
|
|
96
|
+
for (let i = 0; i < pathParts.length; i++) {
|
|
97
|
+
const part = pathParts[i];
|
|
98
|
+
const isLeaf = i === pathParts.length - 1;
|
|
99
|
+
if (isLeaf) {
|
|
100
|
+
cursor[part] = value;
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (typeof cursor[part] !== "object" || cursor[part] === null || Array.isArray(cursor[part])) {
|
|
104
|
+
cursor[part] = {};
|
|
105
|
+
}
|
|
106
|
+
cursor = /** @type {Record<string, unknown>} */ (cursor[part]);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @param {string} targetPath
|
|
112
|
+
* @returns {string[]}
|
|
113
|
+
*/
|
|
114
|
+
function resolveJsonTargets(targetPath) {
|
|
115
|
+
const fullPath = path.isAbsolute(targetPath) ? targetPath : path.join(process.cwd(), targetPath);
|
|
116
|
+
if (!fs.existsSync(fullPath)) {
|
|
117
|
+
return [fullPath];
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const stat = fs.statSync(fullPath);
|
|
121
|
+
if (stat.isFile()) {
|
|
122
|
+
return [fullPath];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (!stat.isDirectory()) {
|
|
126
|
+
return [fullPath];
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** @type {string[]} */
|
|
130
|
+
const out = [];
|
|
131
|
+
/** @param {string} fileName */
|
|
132
|
+
function isTranslationFileName(fileName) {
|
|
133
|
+
const lower = fileName.toLowerCase();
|
|
134
|
+
// Common translation file patterns
|
|
135
|
+
// - en.json / ar.json
|
|
136
|
+
// - en-us.json / ar-QA.json
|
|
137
|
+
// - messages.en.json / messages-ar.json
|
|
138
|
+
return (
|
|
139
|
+
/^(en|ar)([-_][a-z0-9]+)*\.json$/i.test(lower) ||
|
|
140
|
+
/\.((en|ar)([-_][a-z0-9]+)*)\.json$/i.test(lower) ||
|
|
141
|
+
lower.includes("i18n")
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
/** @param {string} dir */
|
|
145
|
+
function walk(dir) {
|
|
146
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
147
|
+
for (const entry of entries) {
|
|
148
|
+
const entryPath = path.join(dir, entry.name);
|
|
149
|
+
if (entry.isDirectory()) {
|
|
150
|
+
walk(entryPath);
|
|
151
|
+
} else if (entry.isFile() && isTranslationFileName(entry.name)) {
|
|
152
|
+
out.push(entryPath);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
walk(fullPath);
|
|
158
|
+
return out;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* @param {string} i18nPath
|
|
163
|
+
* @param {Record<string, string>} entries
|
|
164
|
+
* @param {boolean} dryRun
|
|
165
|
+
*/
|
|
166
|
+
function upsertI18nEntries(i18nPath, entries, dryRun) {
|
|
167
|
+
const targets = resolveJsonTargets(i18nPath);
|
|
168
|
+
if (targets.length === 0) {
|
|
169
|
+
console.log(`No JSON files found in i18n target: ${i18nPath}`);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
for (const fullPath of targets) {
|
|
174
|
+
if (dryRun) {
|
|
175
|
+
console.log(`[dry-run] would update i18n file ${fullPath} with ${Object.keys(entries).length} keys`);
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
let data = {};
|
|
180
|
+
if (fs.existsSync(fullPath)) {
|
|
181
|
+
const raw = fs.readFileSync(fullPath, "utf8").trim();
|
|
182
|
+
data = raw ? JSON.parse(raw) : {};
|
|
183
|
+
} else {
|
|
184
|
+
const parent = path.dirname(fullPath);
|
|
185
|
+
fs.mkdirSync(parent, { recursive: true });
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
for (const [key, value] of Object.entries(entries)) {
|
|
189
|
+
const parts = key.split(".").filter(Boolean);
|
|
190
|
+
if (parts.length === 0) continue;
|
|
191
|
+
setNested(data, parts, value);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
fs.writeFileSync(fullPath, `${JSON.stringify(data, null, 2)}\n`, "utf8");
|
|
195
|
+
console.log(`Updated i18n ${fullPath}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Generate placeholder FieldInfo rows (2 per row by default).
|
|
201
|
+
* @param {number} count
|
|
202
|
+
* @param {number} perRow
|
|
203
|
+
* @param {string} indent
|
|
204
|
+
* @returns {string}
|
|
205
|
+
*/
|
|
206
|
+
function buildFieldInfoLines(count, perRow, indent) {
|
|
207
|
+
const lines = [];
|
|
208
|
+
for (let i = 1; i <= count; i++) {
|
|
209
|
+
const row = Math.ceil(i / perRow);
|
|
210
|
+
lines.push(
|
|
211
|
+
`${indent}new FieldInfo({ row: ${row}, property: "field${i}", label: "field${i}", required: false, type: "text", validators: [Validators.maxLength(100)], validationMessages: { maxlength: "VALIDATION_MAX_100" } })`
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
return lines.join(",\n");
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
module.exports = {
|
|
218
|
+
lastPathSegment,
|
|
219
|
+
kebabCase,
|
|
220
|
+
pascalCase,
|
|
221
|
+
upperSnakeFromKebab,
|
|
222
|
+
ensureDir,
|
|
223
|
+
writeFile,
|
|
224
|
+
writeFiles,
|
|
225
|
+
buildFieldInfoLines,
|
|
226
|
+
resolveJsonTargets,
|
|
227
|
+
upsertI18nEntries,
|
|
228
|
+
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export class AuditLogEntry {
|
|
2
2
|
}
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLWVudHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52b2ljZXEvdWktbGliL3NyYy9saWIvYmFzZS1tb2RlbC9hdWRpdC1sb2ctZW50cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGFBQWE7Q0FPekIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQXVkaXRMb2dFbnRyeSB7XHJcbiAgICBhY3Rpb246IHN0cmluZztcclxuICAgIGNyZWF0ZWRPbjpEYXRlO1xyXG4gICAgY3JlYXRlZEJ5OnN0cmluZztcclxuICAgIGNyZWF0ZWRCeURpc3BsYXlOYW1lOnN0cmluZztcclxuICAgIHN1YmplY3Q6YW55O1xyXG4gICAgY29tbWVudDpzdHJpbmc7XHJcbn1cclxuIl19
|
|
@@ -59,6 +59,7 @@ export class FieldInfo {
|
|
|
59
59
|
this.maxLength = fieldInfo.maxLength ?? 1000;
|
|
60
60
|
this.emptyReadonlyPlaceholderKey = fieldInfo.emptyReadonlyPlaceholderKey;
|
|
61
61
|
this.readonlyDateDisplay = fieldInfo.readonlyDateDisplay;
|
|
62
|
+
this.allowNegative = fieldInfo.allowNegative ?? false;
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtaW5mby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludm9pY2VxL3VpLWxpYi9zcmMvbGliL2Jhc2UtbW9kZWwvZmllbGQtaW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sU0FBUztJQXlEcEIsWUFBWSxTQUFvQjtRQXhEOUIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixtQkFBYyxHQUFZLEVBQUUsQ0FBQztRQUU3QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFNBQUksR0FBNFosTUFBTSxDQUFDO1FBRXZhLGFBQVEsR0FBYSxLQUFLLENBQUM7UUFFM0IsVUFBSyxHQUFZLEVBQUUsQ0FBQztRQWlCcEIsY0FBUyxHQUFhLEtBQUssQ0FBQztRQUc1QixZQUFPLEdBQWEsSUFBSSxDQUFDO1FBcUJ6QiwyQkFBc0IsR0FBYSxLQUFLLENBQUM7UUFRckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUM1RixJQUFJLENBQUMsR0FBRyxHQUFHLFNB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QWMsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDO1FBQy9DLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUM7UUFDL0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO1FBQzdDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxTQUFTLENBQUMsMkJBQTJCLENBQUM7UUFDekUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztJQUMvRCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1ZhbGlkYXRvckZufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtGaWx0ZXJ9IGZyb20gXCIuL2ZpbHRlci5tb2RlbFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZpZWxkSW5mbyB7XHJcbiAgICBwcm9wZXJ0eTogc3RyaW5nID0gXCJcIjtcclxuICAgIHRhcmdldFByb3BlcnR5Pzogc3RyaW5nID0gXCJcIjtcclxuICAgIHJvdzogbnVtYmVyO1xyXG4gICAgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHR5cGU6ICd0ZXh0JyB8ICdhbW91bnQnIHwnY29sb3ItcGlja2VyJyB8ICdjdXJyZW5jeScgfCAnZGF0ZScgfCAnbnVtYmVyJyB8ICdzZXF1ZW5jZScgfCAnbGlzdCcgfCdsb29rdXAnfCAnbXVsdGktc2VsZWN0JyB8ICdwYXNzd29yZCd8ICdyaWNoLXRleHQnfCdyYWRpby1idXR0b24nfCAncGhvbmUtbnVtYmVyJ3wgJ2liYW4tdGV4dCd8J2NoZWNrYm94JyB8J3RleHRhcmVhJyB8J2J1dHRvbid8J3NwYWNlcicgfCAnYXR0YWNobWVudCd8ICdzZWN0aW9uLXRpdGxlJ3wgJ2NoaXAtbGlzdCcgfCd0aW1lJyB8ICdkaXZpZGVyJyB8ICdoeXBlci10ZXh0JyB8J3N0YXRlVHlwZSd8J3N0YXR1cycgfCAneWVhcicgfCAnZXF1YXRpb24tYnVpbGRlcid8ICd0b2dnbGUnfCAnYmlnZGVjaW1hbCcgfCAnbXVsdGktc3RhdGUtY2hlY2tib3gnID0gJ3RleHQnO1xyXG4gICAgdGV4dEZvcm1hdD86ICdqc29uJztcclxuICAgIHJlYWRvbmx5PzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgdmlld29ubHk/OiBib29sZWFuIDtcclxuICAgIGxhYmVsPzogc3RyaW5nID0gJyc7XHJcbiAgICBjdXJyZW5jeT86IHN0cmluZztcclxuICAgIGxvb2t1cEFwaVBhdGg/OiBzdHJpbmc7XHJcbiAgICBtdWx0aT86Ym9vbGVhbjtcclxuICAgIHN1cHBvcnRlZFR5cGVzPzpzdHJpbmc7XHJcbiAgICBjYXNjYWRlZEJ5Pzogc3RyaW5nO1xyXG4gICAgY2FzY2FkZWRCeVByb3BlcnR5Pzogc3RyaW5nO1xyXG4gICAgcGF0aFBhcmFtcz86IHN0cmluZztcclxuICAgIGxpc3RPcHRpb25zPzogYW55W107XHJcbiAgICBvcGVyYXRvcnM/OiBhbnlbXTtcclxuICAgIGZpZWxkc0FwaT86IHN0cmluZztcclxuICAgIHJlcG9ydEZpbHRlcj86c3RyaW5nO1xyXG4gICAgdXBkYXRlT25seT86IGJvb2xlYW47XHJcbiAgICBmaWVsZFNpemUgPzogbnVtYmVyICA7XHJcbiAgICBpbmNsdWRlQWxsT3B0aW9uPzogYm9vbGVhbjtcclxuICAgIGRlZmF1bHRMaXN0T3B0aW9uPzogYW55O1xyXG4gICAgYWNjZXB0TmV3SXRlbT86IGJvb2xlYW47XHJcbiAgICB0cmFuc2xhdGU/OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICB2YWxpZGF0b3JzPzogVmFsaWRhdG9yRm5bXTtcclxuICAgIHBsYWNlaG9sZGVyPzogYW55O1xyXG4gICAgdmlzaWJsZT86IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcGF0dGVybj86IHN0cmluZztcclxuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICAgIGFkdmFuY2VkRmlsdGVyPzogYm9vbGVhbjtcclxuICAgIGZpbHRlck9wZXJhdG9yPzogJ0dSRUFURVJfVEhBTl9FUVVBTCd8J0dSRUFURVJfVEhBTid8ICdMRVNTX1RIQU4nfCdMRVNTX1RIQU5fRVFVQUwnfCAnRVFVQUxTJ3wgJ0xJS0UnfCAnTk9UX0VRJ3wgJ0lOJyA7XHJcbiAgICB3b3JrZmxvd01hbmFnZWQ/OiBib29sZWFuO1xyXG4gICAgd29ya2Zsb3dDYXNjYWRpbmdGaWVsZD86IHN0cmluZztcclxuICAgIGF0dGFjaG1lbnRUeXBlPzogc3RyaW5nO1xyXG4gICAgbG9va3VwRmlsdGVyTGlzdD86IEZpbHRlcltdO1xyXG4gICAgYnV0dG9uVHlwZT86IHN0cmluZztcclxuICAgIGhpZGVGaWxlcz86IGJvb2xlYW47XHJcbiAgICBiZWhhdmlvcmFsTmFtZT86IHN0cmluZztcclxuICAgIGZsYXR0ZW5CeVN1YkF0dHJpYnV0ZT86IHN0cmluZztcclxuICAgIGRlZmF1bHRWYWx1ZT86YW55O1xyXG4gICAgZXh0cmFMb29rdXBzQ29sdW1ucz86IHN0cmluZ1tdO1xyXG4gICAgZGlzcGxheUNvbHVtbj86IHN0cmluZztcclxuICAgIHNlYXJjaEF0dHJpYnV0ZT86c3RyaW5nO1xyXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VzPzogYW55O1xyXG4gICAgaGlkZUxhYmVsPzpib29sZWFuO1xyXG4gICAgc2VhcmNoT3BlcmF0b3I/OlwiR1JFQVRFUl9USEFOX0VRVUFMXCIgfCBcIkdSRUFURVJfVEhBTlwiIHwgXCJMRVNTX1RIQU5cIiB8IFwiTEVTU19USEFOX0VRVUFMXCIgfCBcIkVRVUFMU1wiIHwgXCJMSUtFXCIgfCBcIk5PVF9FUVwiIHwgXCJJTlwiIHwgXCJOT1RfTlVMTFwiO1xyXG4gICAgc2hvd1NlYXJjaEljb24/OiBib29sZWFuO1xyXG4gICAgbXVsdGlMZXZlbFNlYXJjaEVuYWJsZT86IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIG1heERlY2ltYWxzPzogbnVtYmVyIDtcclxuICAgIGVtcHR5UmVhZG9ubHlQbGFjZWhvbGRlcktleT86IHN0cmluZztcclxuICAgIG1heExlbmd0aD86IG51bWJlciA7XHJcbiAgICByZWFkb25seURhdGVEaXNwbGF5PzogJ2RhdGUnIHwgJ2RhdGV0aW1lJztcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKGZpZWxkSW5mbzogRmllbGRJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IGZpZWxkSW5mby5wcm9wZXJ0eTtcclxuICAgICAgICB0aGlzLnRhcmdldFByb3BlcnR5ID0gZmllbGRJbmZvLnRhcmdldFByb3BlcnR5O1xyXG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSBmaWVsZEluZm8ucmVxdWlyZWQ7XHJcbiAgICAgICAgdGhpcy50eXBlID0gZmllbGRJbmZvLnR5cGU7XHJcbiAgICAgICAgdGhpcy5yZWFkb25seSA9IGZpZWxkSW5mby5yZWFkb25seTtcclxuICAgICAgICB0aGlzLmxhYmVsID0gZmllbGRJbmZvLmxhYmVsO1xyXG4gICAgICAgIHRoaXMuZmllbGRTaXplID0gZmllbGRJbmZvLmZpZWxkU2l6ZTtcclxuICAgICAgICB0aGlzLmxvb2t1cEFwaVBhdGggPSBmaWVsZEluZm8ubG9va3VwQXBpUGF0aCA/IGZpZWxkSW5mby5sb29rdXBBcGlQYXRoIDogZmllbGRJbmZvLnByb3BlcnR5O1xyXG4gICAgICAgIHRoaXMucm93ID0gZmllbGRJbmZvLnJvdztcclxuICAgICAgICB0aGlzLnN1cHBvcnRlZFR5cGVzID0gZmllbGRJbmZvLnN1cHBvcnRlZFR5cGVzO1xyXG4gICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBmaWVsZEluZm8ubGlzdE9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5wYXRoUGFyYW1zID0gZmllbGRJbmZvLnBhdGhQYXJhbXM7XHJcbiAgICAgICAgdGhpcy52aWV3b25seSA9IGZpZWxkSW5mby52aWV3b25seTtcclxuICAgICAgICB0aGlzLm11bHRpID0gZmllbGRJbmZvLm11bHRpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlT25seSA9IGZpZWxkSW5mby51cGRhdGVPbmx5O1xyXG4gICAgICAgIHRoaXMuaW5jbHVkZUFsbE9wdGlvbiA9IGZpZWxkSW5mby5pbmNsdWRlQWxsT3B0aW9uO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdExpc3RPcHRpb24gPSBmaWVsZEluZm8uZGVmYXVsdExpc3RPcHRpb247XHJcbiAgICAgICAgdGhpcy5hY2NlcHROZXdJdGVtID0gZmllbGRJbmZvLmFjY2VwdE5ld0l0ZW07XHJcbiAgICAgICAgdGhpcy5jYXNjYWRlZEJ5ID0gZmllbGRJbmZvLmNhc2NhZGVkQnk7XHJcbiAgICAgICAgdGhpcy5jYXNjYWRlZEJ5UHJvcGVydHkgPSBmaWVsZEluZm8uY2FzY2FkZWRCeVByb3BlcnR5ID8gZmllbGRJbmZvLmNhc2NhZGVkQnlQcm9wZXJ0eSA6ICBmaWVsZEluZm8uY2FzY2FkZWRCeTtcclxuICAgICAgICB0aGlzLmN1cnJlbmN5ID0gZmllbGRJbmZvLmN1cnJlbmN5O1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlID0gZmllbGRJbmZvLnRyYW5zbGF0ZTtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkRmlsdGVyID0gZmllbGRJbmZvLmFkdmFuY2VkRmlsdGVyO1xyXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmaWVsZEluZm8ucGxhY2Vob2xkZXI7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0b3JzID0gZmllbGRJbmZvLnZhbGlkYXRvcnM7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvciA9IGZpZWxkSW5mby5maWx0ZXJPcGVyYXRvcjtcclxuICAgICAgICB0aGlzLnBhdHRlcm4gPSBmaWVsZEluZm8ucGF0dGVybjtcclxuICAgICAgICB0aGlzLndvcmtmbG93TWFuYWdlZCA9IGZpZWxkSW5mby53b3JrZmxvd01hbmFnZWQ7XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd0Nhc2NhZGluZ0ZpZWxkID0gZmllbGRJbmZvLndvcmtmbG93Q2FzY2FkaW5nRmllbGQ7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmllbGRJbmZvLnZpc2libGUgPT09IHVuZGVmaW5lZCB8fCBmaWVsZEluZm8udmlzaWJsZTtcclxuICAgICAgICB0aGlzLmF0dGFjaG1lbnRUeXBlID0gZmllbGRJbmZvLmF0dGFjaG1lbnRUeXBlO1xyXG4gICAgICAgIHRoaXMubG9va3VwRmlsdGVyTGlzdCA9IGZpZWxkSW5mby5sb29rdXBGaWx0ZXJMaXN0O1xyXG4gICAgICAgIHRoaXMuZXh0cmFMb29rdXBzQ29sdW1ucyA9IGZpZWxkSW5mby5leHRyYUxvb2t1cHNDb2x1bW5zO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUNvbHVtbiA9IGZpZWxkSW5mby5kaXNwbGF5Q29sdW1uO1xyXG4gICAgICAgIHRoaXMudGV4dEZvcm1hdCA9IGZpZWxkSW5mby50ZXh0Rm9ybWF0O1xyXG4gICAgICAgIHRoaXMuYnV0dG9uVHlwZSA9IGZpZWxkSW5mby5idXR0b25UeXBlO1xyXG4gICAgICAgIHRoaXMuaGlkZUZpbGVzID0gZmllbGRJbmZvLmhpZGVGaWxlcztcclxuICAgICAgICB0aGlzLmJlaGF2aW9yYWxOYW1lID0gZmllbGRJbmZvLmJlaGF2aW9yYWxOYW1lO1xyXG4gICAgICAgIHRoaXMuZmxhdHRlbkJ5U3ViQXR0cmlidXRlID0gZmllbGRJbmZvLmZsYXR0ZW5CeVN1YkF0dHJpYnV0ZTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGZpZWxkSW5mby5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hBdHRyaWJ1dGUgPSBmaWVsZEluZm8uc2VhcmNoQXR0cmlidXRlIHx8IHRoaXMucHJvcGVydHk7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBmaWVsZEluZm8udmFsaWRhdGlvbk1lc3NhZ2VzO1xyXG4gICAgICAgIHRoaXMuaGlkZUxhYmVsID0gZmllbGRJbmZvLmhpZGVMYWJlbDtcclxuICAgICAgICB0aGlzLnNlYXJjaE9wZXJhdG9yID0gZmllbGRJbmZvLnNlYXJjaE9wZXJhdG9yIHx8ICdFUVVBTFMnO1xyXG4gICAgICAgIHRoaXMuc2hvd1NlYXJjaEljb24gPSBmaWVsZEluZm8uc2hvd1NlYXJjaEljb247XHJcbiAgICAgICAgdGhpcy5tdWx0aUxldmVsU2VhcmNoRW5hYmxlID0gZmllbGRJbmZvLm11bHRpTGV2ZWxTZWFyY2hFbmFibGU7XHJcbiAgICAgICAgdGhpcy5tYXhEZWNpbWFscyA9IGZpZWxkSW5mby5tYXhEZWNpbWFscyA/PyAxMDtcclxuICAgICAgICB0aGlzLm1heExlbmd0aCA9IGZpZWxkSW5mby5tYXhMZW5ndGggPz8gMTAwMDtcclxuICAgICAgICB0aGlzLmVtcHR5UmVhZG9ubHlQbGFjZWhvbGRlcktleSA9IGZpZWxkSW5mby5lbXB0eVJlYWRvbmx5UGxhY2Vob2xkZXJLZXk7XHJcbiAgICAgICAgdGhpcy5yZWFkb25seURhdGVEaXNwbGF5ID0gZmllbGRJbmZvLnJlYWRvbmx5RGF0ZURpc3BsYXk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtaW5mby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludm9pY2VxL3VpLWxpYi9zcmMvbGliL2Jhc2UtbW9kZWwvZmllbGQtaW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sU0FBUztJQXlEcEIsWUFBWSxTQUFvQjtRQXhEOUIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixtQkFBYyxHQUFZLEVBQUUsQ0FBQztRQUU3QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFNBQUksR0FBNFosTUFBTSxDQUFDO1FBRXZhLGFBQVEsR0FBYSxLQUFLLENBQUM7UUFFM0IsVUFBSyxHQUFZLEVBQUUsQ0FBQztRQWlCcEIsY0FBUyxHQUFhLEtBQUssQ0FBQztRQUc1QixZQUFPLEdBQWEsSUFBSSxDQUFDO1FBcUJ6QiwyQkFBc0IsR0FBYSxLQUFLLENBQUM7UUFRckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUM1RixJQUFJLENBQUMsR0FBRyxHQUFHLFNB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QWMsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDO1FBQy9DLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUM7UUFDL0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO1FBQzdDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxTQUFTLENBQUMsMkJBQTJCLENBQUM7UUFDekUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztRQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDO0lBQzVELENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VmFsaWRhdG9yRm59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge0ZpbHRlcn0gZnJvbSBcIi4vZmlsdGVyLm1vZGVsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRmllbGRJbmZvIHtcclxuICAgIHByb3BlcnR5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgdGFyZ2V0UHJvcGVydHk/OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcm93OiBudW1iZXI7XHJcbiAgICByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgdHlwZTogJ3RleHQnIHwgJ2Ftb3VudCcgfCdjb2xvci1waWNrZXInIHwgJ2N1cnJlbmN5JyB8ICdkYXRlJyB8ICdudW1iZXInIHwgJ3NlcXVlbmNlJyB8ICdsaXN0JyB8J2xvb2t1cCd8ICdtdWx0aS1zZWxlY3QnIHwgJ3Bhc3N3b3JkJ3wgJ3JpY2gtdGV4dCd8J3JhZGlvLWJ1dHRvbid8ICdwaG9uZS1udW1iZXInfCAnaWJhbi10ZXh0J3wnY2hlY2tib3gnIHwndGV4dGFyZWEnIHwnYnV0dG9uJ3wnc3BhY2VyJyB8ICdhdHRhY2htZW50J3wgJ3NlY3Rpb24tdGl0bGUnfCAnY2hpcC1saXN0JyB8J3RpbWUnIHwgJ2RpdmlkZXInIHwgJ2h5cGVyLXRleHQnIHwnc3RhdGVUeXBlJ3wnc3RhdHVzJyB8ICd5ZWFyJyB8ICdlcXVhdGlvbi1idWlsZGVyJ3wgJ3RvZ2dsZSd8ICdiaWdkZWNpbWFsJyB8ICdtdWx0aS1zdGF0ZS1jaGVja2JveCcgPSAndGV4dCc7XHJcbiAgICB0ZXh0Rm9ybWF0PzogJ2pzb24nO1xyXG4gICAgcmVhZG9ubHk/OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICB2aWV3b25seT86IGJvb2xlYW4gO1xyXG4gICAgbGFiZWw/OiBzdHJpbmcgPSAnJztcclxuICAgIGN1cnJlbmN5Pzogc3RyaW5nO1xyXG4gICAgbG9va3VwQXBpUGF0aD86IHN0cmluZztcclxuICAgIG11bHRpPzpib29sZWFuO1xyXG4gICAgc3VwcG9ydGVkVHlwZXM/OnN0cmluZztcclxuICAgIGNhc2NhZGVkQnk/OiBzdHJpbmc7XHJcbiAgICBjYXNjYWRlZEJ5UHJvcGVydHk/OiBzdHJpbmc7XHJcbiAgICBwYXRoUGFyYW1zPzogc3RyaW5nO1xyXG4gICAgbGlzdE9wdGlvbnM/OiBhbnlbXTtcclxuICAgIG9wZXJhdG9ycz86IGFueVtdO1xyXG4gICAgZmllbGRzQXBpPzogc3RyaW5nO1xyXG4gICAgcmVwb3J0RmlsdGVyPzpzdHJpbmc7XHJcbiAgICB1cGRhdGVPbmx5PzogYm9vbGVhbjtcclxuICAgIGZpZWxkU2l6ZSA/OiBudW1iZXIgIDtcclxuICAgIGluY2x1ZGVBbGxPcHRpb24/OiBib29sZWFuO1xyXG4gICAgZGVmYXVsdExpc3RPcHRpb24/OiBhbnk7XHJcbiAgICBhY2NlcHROZXdJdGVtPzogYm9vbGVhbjtcclxuICAgIHRyYW5zbGF0ZT86IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHZhbGlkYXRvcnM/OiBWYWxpZGF0b3JGbltdO1xyXG4gICAgcGxhY2Vob2xkZXI/OiBhbnk7XHJcbiAgICB2aXNpYmxlPzogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwYXR0ZXJuPzogc3RyaW5nO1xyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gICAgYWR2YW5jZWRGaWx0ZXI/OiBib29sZWFuO1xyXG4gICAgZmlsdGVyT3BlcmF0b3I/OiAnR1JFQVRFUl9USEFOX0VRVUFMJ3wnR1JFQVRFUl9USEFOJ3wgJ0xFU1NfVEhBTid8J0xFU1NfVEhBTl9FUVVBTCd8ICdFUVVBTFMnfCAnTElLRSd8ICdOT1RfRVEnfCAnSU4nIDtcclxuICAgIHdvcmtmbG93TWFuYWdlZD86IGJvb2xlYW47XHJcbiAgICB3b3JrZmxvd0Nhc2NhZGluZ0ZpZWxkPzogc3RyaW5nO1xyXG4gICAgYXR0YWNobWVudFR5cGU/OiBzdHJpbmc7XHJcbiAgICBsb29rdXBGaWx0ZXJMaXN0PzogRmlsdGVyW107XHJcbiAgICBidXR0b25UeXBlPzogc3RyaW5nO1xyXG4gICAgaGlkZUZpbGVzPzogYm9vbGVhbjtcclxuICAgIGJlaGF2aW9yYWxOYW1lPzogc3RyaW5nO1xyXG4gICAgZmxhdHRlbkJ5U3ViQXR0cmlidXRlPzogc3RyaW5nO1xyXG4gICAgZGVmYXVsdFZhbHVlPzphbnk7XHJcbiAgICBleHRyYUxvb2t1cHNDb2x1bW5zPzogc3RyaW5nW107XHJcbiAgICBkaXNwbGF5Q29sdW1uPzogc3RyaW5nO1xyXG4gICAgc2VhcmNoQXR0cmlidXRlPzpzdHJpbmc7XHJcbiAgICB2YWxpZGF0aW9uTWVzc2FnZXM/OiBhbnk7XHJcbiAgICBoaWRlTGFiZWw/OmJvb2xlYW47XHJcbiAgICBzZWFyY2hPcGVyYXRvcj86XCJHUkVBVEVSX1RIQU5fRVFVQUxcIiB8IFwiR1JFQVRFUl9USEFOXCIgfCBcIkxFU1NfVEhBTlwiIHwgXCJMRVNTX1RIQU5fRVFVQUxcIiB8IFwiRVFVQUxTXCIgfCBcIkxJS0VcIiB8IFwiTk9UX0VRXCIgfCBcIklOXCIgfCBcIk5PVF9OVUxMXCI7XHJcbiAgICBzaG93U2VhcmNoSWNvbj86IGJvb2xlYW47XHJcbiAgICBtdWx0aUxldmVsU2VhcmNoRW5hYmxlPzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbWF4RGVjaW1hbHM/OiBudW1iZXIgO1xyXG4gICAgZW1wdHlSZWFkb25seVBsYWNlaG9sZGVyS2V5Pzogc3RyaW5nO1xyXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyIDtcclxuICAgIHJlYWRvbmx5RGF0ZURpc3BsYXk/OiAnZGF0ZScgfCAnZGF0ZXRpbWUnO1xyXG4gICAgYWxsb3dOZWdhdGl2ZT86IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKGZpZWxkSW5mbzogRmllbGRJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IGZpZWxkSW5mby5wcm9wZXJ0eTtcclxuICAgICAgICB0aGlzLnRhcmdldFByb3BlcnR5ID0gZmllbGRJbmZvLnRhcmdldFByb3BlcnR5O1xyXG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSBmaWVsZEluZm8ucmVxdWlyZWQ7XHJcbiAgICAgICAgdGhpcy50eXBlID0gZmllbGRJbmZvLnR5cGU7XHJcbiAgICAgICAgdGhpcy5yZWFkb25seSA9IGZpZWxkSW5mby5yZWFkb25seTtcclxuICAgICAgICB0aGlzLmxhYmVsID0gZmllbGRJbmZvLmxhYmVsO1xyXG4gICAgICAgIHRoaXMuZmllbGRTaXplID0gZmllbGRJbmZvLmZpZWxkU2l6ZTtcclxuICAgICAgICB0aGlzLmxvb2t1cEFwaVBhdGggPSBmaWVsZEluZm8ubG9va3VwQXBpUGF0aCA/IGZpZWxkSW5mby5sb29rdXBBcGlQYXRoIDogZmllbGRJbmZvLnByb3BlcnR5O1xyXG4gICAgICAgIHRoaXMucm93ID0gZmllbGRJbmZvLnJvdztcclxuICAgICAgICB0aGlzLnN1cHBvcnRlZFR5cGVzID0gZmllbGRJbmZvLnN1cHBvcnRlZFR5cGVzO1xyXG4gICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBmaWVsZEluZm8ubGlzdE9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5wYXRoUGFyYW1zID0gZmllbGRJbmZvLnBhdGhQYXJhbXM7XHJcbiAgICAgICAgdGhpcy52aWV3b25seSA9IGZpZWxkSW5mby52aWV3b25seTtcclxuICAgICAgICB0aGlzLm11bHRpID0gZmllbGRJbmZvLm11bHRpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlT25seSA9IGZpZWxkSW5mby51cGRhdGVPbmx5O1xyXG4gICAgICAgIHRoaXMuaW5jbHVkZUFsbE9wdGlvbiA9IGZpZWxkSW5mby5pbmNsdWRlQWxsT3B0aW9uO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdExpc3RPcHRpb24gPSBmaWVsZEluZm8uZGVmYXVsdExpc3RPcHRpb247XHJcbiAgICAgICAgdGhpcy5hY2NlcHROZXdJdGVtID0gZmllbGRJbmZvLmFjY2VwdE5ld0l0ZW07XHJcbiAgICAgICAgdGhpcy5jYXNjYWRlZEJ5ID0gZmllbGRJbmZvLmNhc2NhZGVkQnk7XHJcbiAgICAgICAgdGhpcy5jYXNjYWRlZEJ5UHJvcGVydHkgPSBmaWVsZEluZm8uY2FzY2FkZWRCeVByb3BlcnR5ID8gZmllbGRJbmZvLmNhc2NhZGVkQnlQcm9wZXJ0eSA6ICBmaWVsZEluZm8uY2FzY2FkZWRCeTtcclxuICAgICAgICB0aGlzLmN1cnJlbmN5ID0gZmllbGRJbmZvLmN1cnJlbmN5O1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlID0gZmllbGRJbmZvLnRyYW5zbGF0ZTtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkRmlsdGVyID0gZmllbGRJbmZvLmFkdmFuY2VkRmlsdGVyO1xyXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmaWVsZEluZm8ucGxhY2Vob2xkZXI7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0b3JzID0gZmllbGRJbmZvLnZhbGlkYXRvcnM7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvciA9IGZpZWxkSW5mby5maWx0ZXJPcGVyYXRvcjtcclxuICAgICAgICB0aGlzLnBhdHRlcm4gPSBmaWVsZEluZm8ucGF0dGVybjtcclxuICAgICAgICB0aGlzLndvcmtmbG93TWFuYWdlZCA9IGZpZWxkSW5mby53b3JrZmxvd01hbmFnZWQ7XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd0Nhc2NhZGluZ0ZpZWxkID0gZmllbGRJbmZvLndvcmtmbG93Q2FzY2FkaW5nRmllbGQ7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmllbGRJbmZvLnZpc2libGUgPT09IHVuZGVmaW5lZCB8fCBmaWVsZEluZm8udmlzaWJsZTtcclxuICAgICAgICB0aGlzLmF0dGFjaG1lbnRUeXBlID0gZmllbGRJbmZvLmF0dGFjaG1lbnRUeXBlO1xyXG4gICAgICAgIHRoaXMubG9va3VwRmlsdGVyTGlzdCA9IGZpZWxkSW5mby5sb29rdXBGaWx0ZXJMaXN0O1xyXG4gICAgICAgIHRoaXMuZXh0cmFMb29rdXBzQ29sdW1ucyA9IGZpZWxkSW5mby5leHRyYUxvb2t1cHNDb2x1bW5zO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUNvbHVtbiA9IGZpZWxkSW5mby5kaXNwbGF5Q29sdW1uO1xyXG4gICAgICAgIHRoaXMudGV4dEZvcm1hdCA9IGZpZWxkSW5mby50ZXh0Rm9ybWF0O1xyXG4gICAgICAgIHRoaXMuYnV0dG9uVHlwZSA9IGZpZWxkSW5mby5idXR0b25UeXBlO1xyXG4gICAgICAgIHRoaXMuaGlkZUZpbGVzID0gZmllbGRJbmZvLmhpZGVGaWxlcztcclxuICAgICAgICB0aGlzLmJlaGF2aW9yYWxOYW1lID0gZmllbGRJbmZvLmJlaGF2aW9yYWxOYW1lO1xyXG4gICAgICAgIHRoaXMuZmxhdHRlbkJ5U3ViQXR0cmlidXRlID0gZmllbGRJbmZvLmZsYXR0ZW5CeVN1YkF0dHJpYnV0ZTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGZpZWxkSW5mby5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hBdHRyaWJ1dGUgPSBmaWVsZEluZm8uc2VhcmNoQXR0cmlidXRlIHx8IHRoaXMucHJvcGVydHk7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBmaWVsZEluZm8udmFsaWRhdGlvbk1lc3NhZ2VzO1xyXG4gICAgICAgIHRoaXMuaGlkZUxhYmVsID0gZmllbGRJbmZvLmhpZGVMYWJlbDtcclxuICAgICAgICB0aGlzLnNlYXJjaE9wZXJhdG9yID0gZmllbGRJbmZvLnNlYXJjaE9wZXJhdG9yIHx8ICdFUVVBTFMnO1xyXG4gICAgICAgIHRoaXMuc2hvd1NlYXJjaEljb24gPSBmaWVsZEluZm8uc2hvd1NlYXJjaEljb247XHJcbiAgICAgICAgdGhpcy5tdWx0aUxldmVsU2VhcmNoRW5hYmxlID0gZmllbGRJbmZvLm11bHRpTGV2ZWxTZWFyY2hFbmFibGU7XHJcbiAgICAgICAgdGhpcy5tYXhEZWNpbWFscyA9IGZpZWxkSW5mby5tYXhEZWNpbWFscyA/PyAxMDtcclxuICAgICAgICB0aGlzLm1heExlbmd0aCA9IGZpZWxkSW5mby5tYXhMZW5ndGggPz8gMTAwMDtcclxuICAgICAgICB0aGlzLmVtcHR5UmVhZG9ubHlQbGFjZWhvbGRlcktleSA9IGZpZWxkSW5mby5lbXB0eVJlYWRvbmx5UGxhY2Vob2xkZXJLZXk7XHJcbiAgICAgICAgdGhpcy5yZWFkb25seURhdGVEaXNwbGF5ID0gZmllbGRJbmZvLnJlYWRvbmx5RGF0ZURpc3BsYXk7XHJcbiAgICAgICAgdGhpcy5hbGxvd05lZ2F0aXZlID0gZmllbGRJbmZvLmFsbG93TmVnYXRpdmUgPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|