@decaf-ts/integrations 0.3.12 → 0.4.1-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/README.md +11 -3
- package/dist/integrations.cjs +445 -7
- package/dist/integrations.js +479 -8
- package/jest.config.cjs +1 -1
- package/lib/cjs/feature-flags/constants.cjs +16 -0
- package/lib/cjs/feature-flags/decorators.cjs +65 -0
- package/lib/cjs/feature-flags/environment.cjs +26 -0
- package/lib/cjs/feature-flags/index.cjs +31 -0
- package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs +81 -0
- package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs +78 -0
- package/lib/cjs/feature-flags/readers/FeatureFlagReader.cjs +25 -0
- package/lib/cjs/feature-flags/readers/index.cjs +19 -0
- package/lib/cjs/feature-flags/services/FeatureFlag.service.cjs +259 -0
- package/lib/cjs/feature-flags/types.cjs +4 -0
- package/lib/cjs/feature-flags/utils.cjs +141 -0
- package/lib/cjs/graph/engine/execution/SwitchGraphNodeExecutor.cjs +9 -9
- package/lib/cjs/graph/shared/nodes/flow-control.cjs +4 -3
- package/lib/cjs/graph/shared/types.cjs +2 -2
- package/lib/cjs/index.cjs +6 -5
- package/lib/cjs/kibana/builders/KibanaIndexBuilder.cjs +329 -0
- package/lib/cjs/kibana/builders/KibanaIndexBuilderCollection.cjs +37 -0
- package/lib/cjs/kibana/builders/index.cjs +20 -0
- package/lib/cjs/kibana/helpers.cjs +20 -16
- package/lib/cjs/kibana/index.cjs +3 -2
- package/lib/cjs/kibana/types.cjs +11 -2
- package/lib/cjs/loader/ObjectLoader.cjs +154 -0
- package/lib/cjs/loader/families.cjs +78 -0
- package/lib/cjs/loader/index.cjs +28 -0
- package/lib/cjs/loader/types.cjs +4 -0
- package/lib/cjs/nest/decorators.cjs +17 -0
- package/lib/cjs/nest/index.cjs +3 -3
- package/lib/cjs/nest/keycloakAuthHandler.cjs +74 -35
- package/lib/cjs/nest/keycloakModule.cjs +7 -10
- package/lib/cjs/nest/types.cjs +2 -2
- package/lib/cjs/nest/utils.cjs +58 -50
- package/lib/cjs/plugins/contract.cjs +76 -0
- package/lib/cjs/plugins/index.cjs +35 -0
- package/lib/cjs/plugins/kibana/host.cjs +24 -0
- package/lib/cjs/plugins/kibana/index.cjs +38 -0
- package/lib/cjs/plugins/kibana/installer.cjs +180 -0
- package/lib/cjs/plugins/kibana/manifest.cjs +33 -0
- package/lib/cjs/plugins/kibana/templates.cjs +503 -0
- package/lib/cjs/plugins/kibana/types.cjs +33 -0
- package/lib/cjs/plugins/superset/host.cjs +26 -0
- package/lib/cjs/plugins/superset/index.cjs +40 -0
- package/lib/cjs/plugins/superset/installer.cjs +232 -0
- package/lib/cjs/plugins/superset/manifest.cjs +35 -0
- package/lib/cjs/plugins/superset/templates.cjs +844 -0
- package/lib/cjs/plugins/superset/types.cjs +39 -0
- package/lib/esm/feature-flags/constants.js +12 -0
- package/lib/esm/feature-flags/decorators.js +49 -0
- package/lib/esm/feature-flags/environment.js +18 -0
- package/lib/esm/feature-flags/index.js +14 -0
- package/lib/esm/feature-flags/models/FeatureFlag.model.js +72 -0
- package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js +69 -0
- package/lib/esm/feature-flags/readers/FeatureFlagReader.js +19 -0
- package/lib/esm/feature-flags/readers/index.js +2 -0
- package/lib/esm/feature-flags/services/FeatureFlag.service.js +250 -0
- package/lib/esm/feature-flags/types.js +2 -0
- package/lib/esm/feature-flags/utils.js +126 -0
- package/lib/esm/graph/engine/execution/SwitchGraphNodeExecutor.js +8 -8
- package/lib/esm/graph/shared/nodes/flow-control.js +3 -2
- package/lib/esm/graph/shared/types.js +1 -1
- package/lib/esm/index.js +5 -4
- package/lib/esm/kibana/builders/KibanaIndexBuilder.js +319 -0
- package/lib/esm/kibana/builders/KibanaIndexBuilderCollection.js +32 -0
- package/lib/esm/kibana/builders/index.js +3 -0
- package/lib/esm/kibana/helpers.js +19 -15
- package/lib/esm/kibana/index.js +2 -1
- package/lib/esm/kibana/types.js +13 -2
- package/lib/esm/loader/ObjectLoader.js +115 -0
- package/lib/esm/loader/families.js +66 -0
- package/lib/esm/loader/index.js +11 -0
- package/lib/esm/loader/types.js +2 -0
- package/lib/esm/nest/decorators.js +12 -0
- package/lib/esm/nest/index.js +2 -2
- package/lib/esm/nest/keycloakAuthHandler.js +67 -35
- package/lib/esm/nest/keycloakModule.js +7 -10
- package/lib/esm/nest/types.js +1 -1
- package/lib/esm/nest/utils.js +55 -46
- package/lib/esm/plugins/contract.js +68 -0
- package/lib/esm/plugins/index.js +18 -0
- package/lib/esm/plugins/kibana/host.js +19 -0
- package/lib/esm/plugins/kibana/index.js +14 -0
- package/lib/esm/plugins/kibana/installer.js +140 -0
- package/lib/esm/plugins/kibana/manifest.js +32 -0
- package/lib/esm/plugins/kibana/templates.js +499 -0
- package/lib/esm/plugins/kibana/types.js +10 -0
- package/lib/esm/plugins/superset/host.js +21 -0
- package/lib/esm/plugins/superset/index.js +16 -0
- package/lib/esm/plugins/superset/installer.js +192 -0
- package/lib/esm/plugins/superset/manifest.js +30 -0
- package/lib/esm/plugins/superset/templates.js +840 -0
- package/lib/esm/plugins/superset/types.js +11 -0
- package/lib/types/feature-flags/constants.d.cts +11 -0
- package/lib/types/feature-flags/constants.d.mts +11 -0
- package/lib/types/feature-flags/decorators.d.cts +11 -0
- package/lib/types/feature-flags/decorators.d.mts +11 -0
- package/lib/types/feature-flags/environment.d.cts +11 -0
- package/lib/types/feature-flags/environment.d.mts +11 -0
- package/lib/types/feature-flags/index.d.cts +13 -0
- package/lib/types/feature-flags/index.d.mts +13 -0
- package/lib/types/feature-flags/models/FeatureFlag.model.d.cts +16 -0
- package/lib/types/feature-flags/models/FeatureFlag.model.d.mts +16 -0
- package/lib/types/feature-flags/models/FeatureFlagAccess.model.d.cts +15 -0
- package/lib/types/feature-flags/models/FeatureFlagAccess.model.d.mts +15 -0
- package/lib/types/feature-flags/readers/FeatureFlagReader.d.cts +10 -0
- package/lib/types/feature-flags/readers/FeatureFlagReader.d.mts +10 -0
- package/lib/types/feature-flags/readers/index.d.cts +1 -0
- package/lib/types/feature-flags/readers/index.d.mts +1 -0
- package/lib/types/feature-flags/services/FeatureFlag.service.d.cts +43 -0
- package/lib/types/feature-flags/services/FeatureFlag.service.d.mts +43 -0
- package/lib/types/feature-flags/types.d.cts +39 -0
- package/lib/types/feature-flags/types.d.mts +39 -0
- package/lib/types/feature-flags/utils.d.cts +13 -0
- package/lib/types/feature-flags/utils.d.mts +13 -0
- package/lib/types/graph/engine/execution/SwitchGraphNodeExecutor.d.cts +2 -2
- package/lib/types/graph/engine/execution/SwitchGraphNodeExecutor.d.mts +2 -2
- package/lib/types/graph/shared/types.d.cts +3 -3
- package/lib/types/graph/shared/types.d.mts +3 -3
- package/lib/types/index.d.cts +3 -2
- package/lib/types/index.d.mts +3 -2
- package/lib/types/kibana/builders/KibanaIndexBuilder.d.cts +67 -0
- package/lib/types/kibana/builders/KibanaIndexBuilder.d.mts +67 -0
- package/lib/types/kibana/builders/KibanaIndexBuilderCollection.d.cts +17 -0
- package/lib/types/kibana/builders/KibanaIndexBuilderCollection.d.mts +17 -0
- package/lib/types/kibana/builders/index.d.cts +2 -0
- package/lib/types/kibana/builders/index.d.mts +2 -0
- package/lib/types/kibana/index.d.cts +1 -0
- package/lib/types/kibana/index.d.mts +1 -0
- package/lib/types/kibana/types.d.cts +11 -0
- package/lib/types/kibana/types.d.mts +11 -0
- package/lib/types/loader/ObjectLoader.d.cts +27 -0
- package/lib/types/loader/ObjectLoader.d.mts +27 -0
- package/lib/types/loader/families.d.cts +34 -0
- package/lib/types/loader/families.d.mts +34 -0
- package/lib/types/loader/index.d.cts +10 -0
- package/lib/types/loader/index.d.mts +10 -0
- package/lib/types/loader/types.d.cts +24 -0
- package/lib/types/loader/types.d.mts +24 -0
- package/lib/types/nest/decorators.d.cts +8 -0
- package/lib/types/nest/decorators.d.mts +8 -0
- package/lib/types/nest/index.d.cts +1 -1
- package/lib/types/nest/index.d.mts +1 -1
- package/lib/types/nest/keycloakAuthHandler.d.cts +19 -42
- package/lib/types/nest/keycloakAuthHandler.d.mts +19 -42
- package/lib/types/nest/keycloakModule.d.cts +3 -5
- package/lib/types/nest/keycloakModule.d.mts +3 -5
- package/lib/types/nest/types.d.cts +2 -0
- package/lib/types/nest/types.d.mts +2 -0
- package/lib/types/nest/utils.d.cts +3 -4
- package/lib/types/nest/utils.d.mts +3 -4
- package/lib/types/plugins/contract.d.cts +180 -0
- package/lib/types/plugins/contract.d.mts +180 -0
- package/lib/types/plugins/index.d.cts +17 -0
- package/lib/types/plugins/index.d.mts +17 -0
- package/lib/types/plugins/kibana/host.d.cts +18 -0
- package/lib/types/plugins/kibana/host.d.mts +18 -0
- package/lib/types/plugins/kibana/index.d.cts +13 -0
- package/lib/types/plugins/kibana/index.d.mts +13 -0
- package/lib/types/plugins/kibana/installer.d.cts +45 -0
- package/lib/types/plugins/kibana/installer.d.mts +45 -0
- package/lib/types/plugins/kibana/manifest.d.cts +31 -0
- package/lib/types/plugins/kibana/manifest.d.mts +31 -0
- package/lib/types/plugins/kibana/templates.d.cts +12 -0
- package/lib/types/plugins/kibana/templates.d.mts +12 -0
- package/lib/types/plugins/kibana/types.d.cts +9 -0
- package/lib/types/plugins/kibana/types.d.mts +9 -0
- package/lib/types/plugins/superset/host.d.cts +20 -0
- package/lib/types/plugins/superset/host.d.mts +20 -0
- package/lib/types/plugins/superset/index.d.cts +15 -0
- package/lib/types/plugins/superset/index.d.mts +15 -0
- package/lib/types/plugins/superset/installer.d.cts +70 -0
- package/lib/types/plugins/superset/installer.d.mts +70 -0
- package/lib/types/plugins/superset/manifest.d.cts +28 -0
- package/lib/types/plugins/superset/manifest.d.mts +28 -0
- package/lib/types/plugins/superset/templates.d.cts +12 -0
- package/lib/types/plugins/superset/templates.d.mts +12 -0
- package/lib/types/plugins/superset/types.d.cts +10 -0
- package/lib/types/plugins/superset/types.d.mts +10 -0
- package/package.json +62 -3
- package/plugins/kibana/.gitignore +16 -0
- package/plugins/kibana/Dockerfile +19 -0
- package/plugins/kibana/docker-compose.yml +50 -0
- package/plugins/kibana/host/index.html +101 -0
- package/plugins/kibana/setup-dashboards.sh +84 -0
- package/plugins/superset/.gitignore +17 -0
- package/plugins/superset/Dockerfile +79 -0
- package/plugins/superset/docker-compose.yml +62 -0
- package/plugins/superset/host/index.html +168 -0
- package/plugins/superset/setup-dashboards.sh +106 -0
- package/plugins/superset/superset_config.py +49 -0
- package/lib/cjs/nest/authService.cjs +0 -91
- package/lib/esm/nest/authService.js +0 -86
- package/lib/types/nest/authService.d.cts +0 -63
- package/lib/types/nest/authService.d.mts +0 -63
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Condition, ModelService, Repository, repository, service, } from "@decaf-ts/core";
|
|
11
|
+
import { NotFoundError } from "@decaf-ts/db-decorators";
|
|
12
|
+
import { FeatureFlagEnvironment } from "./../environment.js";
|
|
13
|
+
import { FeatureFlagAccess } from "./../models/FeatureFlagAccess.model.js";
|
|
14
|
+
import { FeatureFlag } from "./../models/FeatureFlag.model.js";
|
|
15
|
+
import { EnvironmeFlagReader, } from "./../readers/index.js";
|
|
16
|
+
import { isFeatureFlagEnabled, isFeatureFlagEnabledByName, normalizeFeatureName, } from "./../utils.js";
|
|
17
|
+
import { normalizeFeatureSubjectKey, normalizeFeatureSubjectType } from "./../utils.js";
|
|
18
|
+
let FeatureFlagService = class FeatureFlagService extends ModelService {
|
|
19
|
+
constructor() {
|
|
20
|
+
super(FeatureFlag);
|
|
21
|
+
this.reader = new EnvironmeFlagReader();
|
|
22
|
+
this.cachedRegistry = {};
|
|
23
|
+
}
|
|
24
|
+
async initialize(...args) {
|
|
25
|
+
const config = args[0] ?? {};
|
|
26
|
+
if (config.repository) {
|
|
27
|
+
this._repository = config.repository;
|
|
28
|
+
}
|
|
29
|
+
this.reader = !config.reader
|
|
30
|
+
? new EnvironmeFlagReader()
|
|
31
|
+
: typeof config.reader === "function"
|
|
32
|
+
? new config.reader()
|
|
33
|
+
: config.reader;
|
|
34
|
+
const readerConfig = {
|
|
35
|
+
...(config.readerConfig ?? {}),
|
|
36
|
+
source: config.readerConfig?.source ?? FeatureFlagEnvironment,
|
|
37
|
+
};
|
|
38
|
+
this.cachedRegistry = await this.refreshCachedRegistry(readerConfig, ...args);
|
|
39
|
+
const effectiveConfig = {
|
|
40
|
+
...config,
|
|
41
|
+
reader: this.reader,
|
|
42
|
+
readerConfig,
|
|
43
|
+
};
|
|
44
|
+
return { config: effectiveConfig, client: this.reader };
|
|
45
|
+
}
|
|
46
|
+
cloneRegistry(registry) {
|
|
47
|
+
return Object.entries(registry).reduce((acc, [key, value]) => {
|
|
48
|
+
acc[key] =
|
|
49
|
+
value && typeof value === "object" && !Array.isArray(value)
|
|
50
|
+
? { ...value }
|
|
51
|
+
: value;
|
|
52
|
+
return acc;
|
|
53
|
+
}, {});
|
|
54
|
+
}
|
|
55
|
+
async refreshCachedRegistry(options = {}, ...args) {
|
|
56
|
+
const envRegistry = await this.reader.read({
|
|
57
|
+
...options,
|
|
58
|
+
source: options.source ?? FeatureFlagEnvironment,
|
|
59
|
+
});
|
|
60
|
+
let persisted = [];
|
|
61
|
+
try {
|
|
62
|
+
persisted = await this.repo.select().execute(...args);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
persisted = [];
|
|
66
|
+
}
|
|
67
|
+
const registry = this.cloneRegistry(envRegistry);
|
|
68
|
+
for (const flag of persisted) {
|
|
69
|
+
registry[flag.key] = flag.enabled ? (flag.config ?? true) : false;
|
|
70
|
+
}
|
|
71
|
+
return registry;
|
|
72
|
+
}
|
|
73
|
+
setCachedFlag(flag) {
|
|
74
|
+
this.cachedRegistry[flag.key] = flag.enabled
|
|
75
|
+
? (flag.config ?? true)
|
|
76
|
+
: false;
|
|
77
|
+
}
|
|
78
|
+
getAccessRepository() {
|
|
79
|
+
return this.accessRepository ?? Repository.forModel(FeatureFlagAccess);
|
|
80
|
+
}
|
|
81
|
+
assertInitialized() {
|
|
82
|
+
void this.reader;
|
|
83
|
+
}
|
|
84
|
+
normalizeFeatureAccessInput(input) {
|
|
85
|
+
return {
|
|
86
|
+
...input,
|
|
87
|
+
featureKey: normalizeFeatureName(input.featureKey),
|
|
88
|
+
subjectType: normalizeFeatureSubjectType(input.subjectType),
|
|
89
|
+
subjectKey: normalizeFeatureSubjectKey(input.subjectKey),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
buildAccessCondition(query) {
|
|
93
|
+
let condition = Condition.attr("subjectType").eq(normalizeFeatureSubjectType(query.subjectType));
|
|
94
|
+
condition = condition.and(Condition.attr("subjectKey").eq(normalizeFeatureSubjectKey(query.subjectKey)));
|
|
95
|
+
if (typeof query.enabled !== "undefined") {
|
|
96
|
+
condition = condition.and(Condition.attr("enabled").eq(query.enabled));
|
|
97
|
+
}
|
|
98
|
+
if (query.featureKeys && query.featureKeys.length > 0) {
|
|
99
|
+
condition = condition.and(Condition.attr("featureKey").in(query.featureKeys.map(normalizeFeatureName)));
|
|
100
|
+
}
|
|
101
|
+
return condition;
|
|
102
|
+
}
|
|
103
|
+
async create(model, ...args) {
|
|
104
|
+
model.key = normalizeFeatureName(model.key);
|
|
105
|
+
model.enabled ??= true;
|
|
106
|
+
const created = await super.create(model, ...args);
|
|
107
|
+
this.setCachedFlag(created);
|
|
108
|
+
return created;
|
|
109
|
+
}
|
|
110
|
+
async update(model, ...args) {
|
|
111
|
+
model.key = normalizeFeatureName(model.key);
|
|
112
|
+
model.enabled ??= true;
|
|
113
|
+
const updated = await super.update(model, ...args);
|
|
114
|
+
this.setCachedFlag(updated);
|
|
115
|
+
return updated;
|
|
116
|
+
}
|
|
117
|
+
async findOneBy(key, value, ...args) {
|
|
118
|
+
const normalizedValue = key === "key" && typeof value === "string"
|
|
119
|
+
? normalizeFeatureName(value)
|
|
120
|
+
: value;
|
|
121
|
+
return this.repo.findOneBy(key, normalizedValue, ...args);
|
|
122
|
+
}
|
|
123
|
+
async readAll(keys, ...args) {
|
|
124
|
+
const result = await this.repo.readAll(keys, ...args);
|
|
125
|
+
for (const flag of result)
|
|
126
|
+
this.setCachedFlag(flag);
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
async listEnabled(...args) {
|
|
130
|
+
return this.repo
|
|
131
|
+
.select()
|
|
132
|
+
.where(Condition.attr("enabled").eq(true))
|
|
133
|
+
.execute(...args);
|
|
134
|
+
}
|
|
135
|
+
async grantFeatureAccess(input, ...args) {
|
|
136
|
+
const normalized = this.normalizeFeatureAccessInput(input);
|
|
137
|
+
const existing = await this.findFeatureAccess(normalized, ...args).catch(() => undefined);
|
|
138
|
+
if (!existing) {
|
|
139
|
+
return this.getAccessRepository().create(new FeatureFlagAccess(normalized), ...args);
|
|
140
|
+
}
|
|
141
|
+
return this.getAccessRepository().update(Object.assign(existing, normalized), ...args);
|
|
142
|
+
}
|
|
143
|
+
async revokeFeatureAccess(input, ...args) {
|
|
144
|
+
const existing = await this.findFeatureAccess(input, ...args).catch(() => undefined);
|
|
145
|
+
if (!existing)
|
|
146
|
+
return undefined;
|
|
147
|
+
return this.getAccessRepository().delete(existing.id, ...args);
|
|
148
|
+
}
|
|
149
|
+
async findFeatureAccess(query, ...args) {
|
|
150
|
+
const condition = this.buildAccessCondition(query);
|
|
151
|
+
const results = await this.getAccessRepository()
|
|
152
|
+
.select()
|
|
153
|
+
.where(condition)
|
|
154
|
+
.execute(...args);
|
|
155
|
+
const existing = results[0];
|
|
156
|
+
if (!existing) {
|
|
157
|
+
throw new NotFoundError(`Feature access for ${normalizeFeatureSubjectType(query.subjectType)}:${normalizeFeatureSubjectKey(query.subjectKey)} not found`);
|
|
158
|
+
}
|
|
159
|
+
return existing;
|
|
160
|
+
}
|
|
161
|
+
async listFeatureAccess(query, ...args) {
|
|
162
|
+
return this.getAccessRepository()
|
|
163
|
+
.select()
|
|
164
|
+
.where(this.buildAccessCondition(query))
|
|
165
|
+
.execute(...args);
|
|
166
|
+
}
|
|
167
|
+
async resolveFeatureFlagsForSubject(subject, ...args) {
|
|
168
|
+
this.assertInitialized();
|
|
169
|
+
const access = await this.listFeatureAccess({
|
|
170
|
+
...subject,
|
|
171
|
+
enabled: true,
|
|
172
|
+
}, ...args);
|
|
173
|
+
const featureKeys = [...new Set(access.map((item) => item.featureKey))];
|
|
174
|
+
if (featureKeys.length === 0)
|
|
175
|
+
return {};
|
|
176
|
+
const condition = Condition.attr("enabled").eq(true).and(Condition.attr("key").in(featureKeys.map(normalizeFeatureName)));
|
|
177
|
+
const enabledFlags = await this.repo.select().where(condition).execute(...args);
|
|
178
|
+
return enabledFlags.reduce((registry, flag) => {
|
|
179
|
+
registry[flag.key] = flag.config ?? true;
|
|
180
|
+
return registry;
|
|
181
|
+
}, {});
|
|
182
|
+
}
|
|
183
|
+
async isEnabledForSubject(key, subject, ...args) {
|
|
184
|
+
const registry = await this.resolveFeatureFlagsForSubject(subject, ...args);
|
|
185
|
+
return isFeatureFlagEnabledByName(registry, key);
|
|
186
|
+
}
|
|
187
|
+
isEnabled(key) {
|
|
188
|
+
this.assertInitialized();
|
|
189
|
+
const normalizedKey = normalizeFeatureName(key);
|
|
190
|
+
return isFeatureFlagEnabledByName(this.cachedRegistry, normalizedKey);
|
|
191
|
+
}
|
|
192
|
+
async resolveFeatureFlags() {
|
|
193
|
+
this.assertInitialized();
|
|
194
|
+
return this.cloneRegistry(this.cachedRegistry);
|
|
195
|
+
}
|
|
196
|
+
async syncFromEnvironment(options = {}, ...args) {
|
|
197
|
+
this.assertInitialized();
|
|
198
|
+
const registry = await this.reader.read({
|
|
199
|
+
...options,
|
|
200
|
+
source: options.source ?? FeatureFlagEnvironment,
|
|
201
|
+
});
|
|
202
|
+
const results = [];
|
|
203
|
+
for (const [key, value] of Object.entries(registry)) {
|
|
204
|
+
const config = value && typeof value === "object" && !Array.isArray(value)
|
|
205
|
+
? value
|
|
206
|
+
: { enabled: Boolean(value) };
|
|
207
|
+
const { enabled: _ignoredEnabled, ...restConfig } = config;
|
|
208
|
+
const normalizedKey = normalizeFeatureName(key);
|
|
209
|
+
const existing = await this.findOneBy("key", normalizedKey, ...args).catch(() => undefined);
|
|
210
|
+
const model = existing
|
|
211
|
+
? Object.assign(existing, {
|
|
212
|
+
enabled: isFeatureFlagEnabled(value),
|
|
213
|
+
description: restConfig.description ?? existing.description,
|
|
214
|
+
scope: restConfig.scope ?? existing.scope,
|
|
215
|
+
metadata: restConfig.metadata ?? existing.metadata,
|
|
216
|
+
config: {
|
|
217
|
+
...restConfig,
|
|
218
|
+
enabled: isFeatureFlagEnabled(value),
|
|
219
|
+
},
|
|
220
|
+
})
|
|
221
|
+
: new FeatureFlag({
|
|
222
|
+
key: normalizedKey,
|
|
223
|
+
enabled: isFeatureFlagEnabled(value),
|
|
224
|
+
description: restConfig.description,
|
|
225
|
+
scope: restConfig.scope,
|
|
226
|
+
metadata: restConfig.metadata,
|
|
227
|
+
config: {
|
|
228
|
+
...restConfig,
|
|
229
|
+
enabled: isFeatureFlagEnabled(value),
|
|
230
|
+
},
|
|
231
|
+
});
|
|
232
|
+
results.push(existing ? await this.update(model, ...args) : await this.create(model, ...args));
|
|
233
|
+
}
|
|
234
|
+
this.cachedRegistry = await this.refreshCachedRegistry({
|
|
235
|
+
...options,
|
|
236
|
+
source: options.source ?? FeatureFlagEnvironment,
|
|
237
|
+
}, ...args);
|
|
238
|
+
return results;
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
__decorate([
|
|
242
|
+
repository(FeatureFlagAccess),
|
|
243
|
+
__metadata("design:type", Object)
|
|
244
|
+
], FeatureFlagService.prototype, "accessRepository", void 0);
|
|
245
|
+
FeatureFlagService = __decorate([
|
|
246
|
+
service(FeatureFlag),
|
|
247
|
+
__metadata("design:paramtypes", [])
|
|
248
|
+
], FeatureFlagService);
|
|
249
|
+
export { FeatureFlagService };
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmVhdHVyZUZsYWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9mZWF0dXJlLWZsYWdzL3NlcnZpY2VzL0ZlYXR1cmVGbGFnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLDRCQUF1QjtBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsK0NBQTBDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUseUNBQW9DO0FBQzFELE9BQU8sRUFDTCxtQkFBbUIsR0FHcEIsOEJBQW1CO0FBVXBCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsMEJBQTBCLEVBQzFCLG9CQUFvQixHQUNyQixzQkFBaUI7QUFDbEIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHNCQUFpQjtBQVE1RSxJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFtQixTQUFRLFlBQXlCO0lBTS9EO1FBQ0UsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBTmIsV0FBTSxHQUFzQixJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDdEQsbUJBQWMsR0FBd0IsRUFBRSxDQUFDO0lBTWpELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUNkLEdBQUcsSUFBVztRQUVkLE1BQU0sTUFBTSxHQUFJLElBQUksQ0FBQyxDQUFDLENBQTBDLElBQUksRUFBRSxDQUFDO1FBQ3ZFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQWlCLENBQUM7UUFDOUMsQ0FBQztRQUNELElBQUksQ0FB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T0FBTyxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQztvQkFDcEMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO29CQUNuQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7b0JBQ3ZCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtvQkFDN0IsTUFBTSxFQUFFO3dCQUNOLEdBQUcsVUFBVTt3QkFDYixPQUFPLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDO3FCQUNyQztpQkFDRixDQUFDLENBQUM7WUFDUCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FDcEQ7WUFDRSxHQUFHLE9BQU87WUFDVixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxzQkFBc0I7U0FDakQsRUFDRCxHQUFHLElBQUksQ0FDUixDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGLENBQUE7QUF0VVc7SUFEVCxVQUFVLENBQUMsaUJBQWlCLENBQUM7OzREQUN1QjtBQUoxQyxrQkFBa0I7SUFEOUIsT0FBTyxDQUFDLFdBQVcsQ0FBQzs7R0FDUixrQkFBa0IsQ0EwVTlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29uZGl0aW9uLFxuICBNb2RlbFNlcnZpY2UsXG4gIFJlcG9zaXRvcnksXG4gIHJlcG9zaXRvcnksXG4gIHNlcnZpY2UsXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBSZXBvIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBOb3RGb3VuZEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ0Vudmlyb25tZW50IH0gZnJvbSBcIi4uL2Vudmlyb25tZW50XCI7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ0FjY2VzcyB9IGZyb20gXCIuLi9tb2RlbHMvRmVhdHVyZUZsYWdBY2Nlc3MubW9kZWxcIjtcbmltcG9ydCB7IEZlYXR1cmVGbGFnIH0gZnJvbSBcIi4uL21vZGVscy9GZWF0dXJlRmxhZy5tb2RlbFwiO1xuaW1wb3J0IHtcbiAgRW52aXJvbm1lRmxhZ1JlYWRlcixcbiAgRmVhdHVyZUZsYWdSZWFkZXIsXG4gIEZlYXR1cmVGbGFnUmVhZGVyTGlrZSxcbn0gZnJvbSBcIi4uL3JlYWRlcnNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRmVhdHVyZUZsYWdBY2Nlc3NJbnB1dCxcbiAgRmVhdHVyZUZsYWdBY2Nlc3NRdWVyeSxcbiAgRmVhdHVyZUZsYWdBY2Nlc3NTdWJqZWN0LFxuICBGZWF0dXJlRmxhZ0NvbmZpZyxcbiAgRmVhdHVyZUZsYWdSZWFkZXJDb25maWcsXG4gIEZlYXR1cmVGbGFnUmVhZGVySW5wdXQsXG4gIEZlYXR1cmVGbGFnUmVnaXN0cnksXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgaXNGZWF0dXJlRmxhZ0VuYWJsZWQsXG4gIGlzRmVhdHVyZUZsYWdFbmFibGVkQnlOYW1lLFxuICBub3JtYWxpemVGZWF0dXJlTmFtZSxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVGZWF0dXJlU3ViamVjdEtleSwgbm9ybWFsaXplRmVhdHVyZVN1YmplY3RUeXBlIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVhdHVyZUZsYWdTZXJ2aWNlQ29uZmlnIGV4dGVuZHMgRmVhdHVyZUZsYWdSZWFkZXJDb25maWcge1xuICByZWFkZXI/OiBGZWF0dXJlRmxhZ1JlYWRlckxpa2U7XG4gIHJlcG9zaXRvcnk/OiBSZXBvc2l0b3J5PEZlYXR1cmVGbGFnLCBhbnk+O1xufVxuXG5Ac2VydmljZShGZWF0dXJlRmxhZylcbmV4cG9ydCBjbGFzcyBGZWF0dXJlRmxhZ1NlcnZpY2UgZXh0ZW5kcyBNb2RlbFNlcnZpY2U8RmVhdHVyZUZsYWc+IHtcbiAgcHJpdmF0ZSByZWFkZXI6IEZlYXR1cmVGbGFnUmVhZGVyID0gbmV3IEVudmlyb25tZUZsYWdSZWFkZXIoKTtcbiAgcHJpdmF0ZSBjYWNoZWRSZWdpc3RyeTogRmVhdHVyZUZsYWdSZWdpc3RyeSA9IHt9O1xuICBAcmVwb3NpdG9yeShGZWF0dXJlRmxhZ0FjY2VzcylcbiAgcHJvdGVjdGVkIGFjY2Vzc1JlcG9zaXRvcnkhOiBSZXBvPEZlYXR1cmVGbGFnQWNjZXNzPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihGZWF0dXJlRmxhZyk7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplKFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8eyBjb25maWc6IEZlYXR1cmVGbGFnU2VydmljZUNvbmZpZzsgY2xpZW50OiBGZWF0dXJlRmxhZ1JlYWRlciB9PiB7XG4gICAgY29uc3QgY29uZmlnID0gKGFyZ3NbMF0gYXMgRmVhdHVyZUZsYWdTZXJ2aWNlQ29uZmlnIHwgdW5kZWZpbmVkKSA/PyB7fTtcbiAgICBpZiAoY29uZmlnLnJlcG9zaXRvcnkpIHtcbiAgICAgIHRoaXMuX3JlcG9zaXRvcnkgPSBjb25maWcucmVwb3NpdG9yeSBhcyBhbnk7XG4gICAgfVxuICAgIHRoaXMucmVhZGVyID0gIWNvbmZpZy5yZWFkZXJcbiAgICAgID8gbmV3IEVudmlyb25tZUZsYWdSZWFkZXIoKVxuICAgICAgOiB0eXBlb2YgY29uZmlnLnJlYWRlciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gbmV3IGNvbmZpZy5yZWFkZXIoKVxuICAgICAgICA6IGNvbmZpZy5yZWFkZXI7XG4gICAgY29uc3QgcmVhZGVyQ29uZmlnID0ge1xuICAgICAgLi4uKGNvbmZpZy5yZWFkZXJDb25maWcgPz8ge30pLFxuICAgICAgc291cmNlOiBjb25maWcucmVhZGVyQ29uZmlnPy5zb3VyY2UgPz8gRmVhdHVyZUZsYWdFbnZpcm9ubWVudCxcbiAgICB9O1xuICAgIHRoaXMuY2FjaGVkUmVnaXN0cnkgPSBhd2FpdCB0aGlzLnJlZnJlc2hDYWNoZWRSZWdpc3RyeShyZWFkZXJDb25maWcsIC4uLmFyZ3MpO1xuICAgIGNvbnN0IGVmZmVjdGl2ZUNvbmZpZzogRmVhdHVyZUZsYWdTZXJ2aWNlQ29uZmlnID0ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgcmVhZGVyOiB0aGlzLnJlYWRlcixcbiAgICAgIHJlYWRlckNvbmZpZyxcbiAgICB9O1xuICAgIHJldHVybiB7IGNvbmZpZzogZWZmZWN0aXZlQ29uZmlnLCBjbGllbnQ6IHRoaXMucmVhZGVyIH07XG4gIH1cblxuICBwcml2YXRlIGNsb25lUmVnaXN0cnkocmVnaXN0cnk6IEZlYXR1cmVGbGFnUmVnaXN0cnkpOiBGZWF0dXJlRmxhZ1JlZ2lzdHJ5IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVnaXN0cnkpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID1cbiAgICAgICAgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gKHsgLi4uKHZhbHVlIGFzIEZlYXR1cmVGbGFnQ29uZmlnKSB9IGFzIEZlYXR1cmVGbGFnQ29uZmlnKVxuICAgICAgICAgIDogdmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIEZlYXR1cmVGbGFnUmVnaXN0cnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoQ2FjaGVkUmVnaXN0cnkoXG4gICAgb3B0aW9uczogRmVhdHVyZUZsYWdSZWFkZXJJbnB1dCA9IHt9LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWdSZWdpc3RyeT4ge1xuICAgIGNvbnN0IGVudlJlZ2lzdHJ5ID0gYXdhaXQgdGhpcy5yZWFkZXIucmVhZCh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc291cmNlOiBvcHRpb25zLnNvdXJjZSA/PyBGZWF0dXJlRmxhZ0Vudmlyb25tZW50LFxuICAgIH0pO1xuICAgIGxldCBwZXJzaXN0ZWQ6IEZlYXR1cmVGbGFnW10gPSBbXTtcbiAgICB0cnkge1xuICAgICAgcGVyc2lzdGVkID0gYXdhaXQgdGhpcy5yZXBvLnNlbGVjdCgpLmV4ZWN1dGUoLi4uYXJncyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBwZXJzaXN0ZWQgPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZWdpc3RyeSA9IHRoaXMuY2xvbmVSZWdpc3RyeShlbnZSZWdpc3RyeSk7XG4gICAgZm9yIChjb25zdCBmbGFnIG9mIHBlcnNpc3RlZCkge1xuICAgICAgcmVnaXN0cnlbZmxhZy5rZXldID0gZmxhZy5lbmFibGVkID8gKGZsYWcuY29uZmlnID8/IHRydWUpIDogZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiByZWdpc3RyeTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FjaGVkRmxhZyhmbGFnOiBGZWF0dXJlRmxhZyk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGVkUmVnaXN0cnlbZmxhZy5rZXldID0gZmxhZy5lbmFibGVkXG4gICAgICA/IChmbGFnLmNvbmZpZyA/PyB0cnVlKVxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWNjZXNzUmVwb3NpdG9yeSgpOiBSZXBvPEZlYXR1cmVGbGFnQWNjZXNzPiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjZXNzUmVwb3NpdG9yeSA/PyBSZXBvc2l0b3J5LmZvck1vZGVsKEZlYXR1cmVGbGFnQWNjZXNzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXNzZXJ0SW5pdGlhbGl6ZWQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnJlYWRlcjtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplRmVhdHVyZUFjY2Vzc0lucHV0KFxuICAgIGlucHV0OiBGZWF0dXJlRmxhZ0FjY2Vzc0lucHV0XG4gICk6IEZlYXR1cmVGbGFnQWNjZXNzSW5wdXQge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIGZlYXR1cmVLZXk6IG5vcm1hbGl6ZUZlYXR1cmVOYW1lKGlucHV0LmZlYXR1cmVLZXkpLFxuICAgICAgc3ViamVjdFR5cGU6IG5vcm1hbGl6ZUZlYXR1cmVTdWJqZWN0VHlwZShpbnB1dC5zdWJqZWN0VHlwZSksXG4gICAgICBzdWJqZWN0S2V5OiBub3JtYWxpemVGZWF0dXJlU3ViamVjdEtleShpbnB1dC5zdWJqZWN0S2V5KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFjY2Vzc0NvbmRpdGlvbihcbiAgICBxdWVyeTogRmVhdHVyZUZsYWdBY2Nlc3NRdWVyeVxuICApOiBDb25kaXRpb248RmVhdHVyZUZsYWdBY2Nlc3M+IHtcbiAgICBsZXQgY29uZGl0aW9uID0gQ29uZGl0aW9uLmF0dHI8RmVhdHVyZUZsYWdBY2Nlc3M+KFwic3ViamVjdFR5cGVcIikuZXEoXG4gICAgICBub3JtYWxpemVGZWF0dXJlU3ViamVjdFR5cGUocXVlcnkuc3ViamVjdFR5cGUpXG4gICAgKTtcbiAgICBjb25kaXRpb24gPSBjb25kaXRpb24uYW5kKFxuICAgICAgQ29uZGl0aW9uLmF0dHI8RmVhdHVyZUZsYWdBY2Nlc3M+KFwic3ViamVjdEtleVwiKS5lcShcbiAgICAgICAgbm9ybWFsaXplRmVhdHVyZVN1YmplY3RLZXkocXVlcnkuc3ViamVjdEtleSlcbiAgICAgIClcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcXVlcnkuZW5hYmxlZCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFuZChcbiAgICAgICAgQ29uZGl0aW9uLmF0dHI8RmVhdHVyZUZsYWdBY2Nlc3M+KFwiZW5hYmxlZFwiKS5lcShxdWVyeS5lbmFibGVkKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LmZlYXR1cmVLZXlzICYmIHF1ZXJ5LmZlYXR1cmVLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5hbmQoXG4gICAgICAgIENvbmRpdGlvbi5hdHRyPEZlYXR1cmVGbGFnQWNjZXNzPihcImZlYXR1cmVLZXlcIikuaW4oXG4gICAgICAgICAgcXVlcnkuZmVhdHVyZUtleXMubWFwKG5vcm1hbGl6ZUZlYXR1cmVOYW1lKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY29uZGl0aW9uO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlKFxuICAgIG1vZGVsOiBGZWF0dXJlRmxhZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPEZlYXR1cmVGbGFnPiB7XG4gICAgbW9kZWwua2V5ID0gbm9ybWFsaXplRmVhdHVyZU5hbWUobW9kZWwua2V5KTtcbiAgICBtb2RlbC5lbmFibGVkID8/PSB0cnVlO1xuICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBzdXBlci5jcmVhdGUobW9kZWwsIC4uLmFyZ3MpO1xuICAgIHRoaXMuc2V0Q2FjaGVkRmxhZyhjcmVhdGVkKTtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHVwZGF0ZShcbiAgICBtb2RlbDogRmVhdHVyZUZsYWcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZz4ge1xuICAgIG1vZGVsLmtleSA9IG5vcm1hbGl6ZUZlYXR1cmVOYW1lKG1vZGVsLmtleSk7XG4gICAgbW9kZWwuZW5hYmxlZCA/Pz0gdHJ1ZTtcbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgc3VwZXIudXBkYXRlKG1vZGVsLCAuLi5hcmdzKTtcbiAgICB0aGlzLnNldENhY2hlZEZsYWcodXBkYXRlZCk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBmaW5kT25lQnkoXG4gICAga2V5OiBrZXlvZiBGZWF0dXJlRmxhZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWc+IHtcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPVxuICAgICAga2V5ID09PSBcImtleVwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IG5vcm1hbGl6ZUZlYXR1cmVOYW1lKHZhbHVlKVxuICAgICAgICA6IHZhbHVlO1xuICAgIHJldHVybiB0aGlzLnJlcG8uZmluZE9uZUJ5KGtleSwgbm9ybWFsaXplZFZhbHVlLCAuLi5hcmdzKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHJlYWRBbGwoXG4gICAga2V5czogYW55W10sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ1tdPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXBvLnJlYWRBbGwoa2V5cywgLi4uYXJncyk7XG4gICAgZm9yIChjb25zdCBmbGFnIG9mIHJlc3VsdCkgdGhpcy5zZXRDYWNoZWRGbGFnKGZsYWcpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBsaXN0RW5hYmxlZCguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8RmVhdHVyZUZsYWdbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcG9cbiAgICAgIC5zZWxlY3QoKVxuICAgICAgLndoZXJlKENvbmRpdGlvbi5hdHRyPEZlYXR1cmVGbGFnPihcImVuYWJsZWRcIikuZXEodHJ1ZSkpXG4gICAgICAuZXhlY3V0ZSguLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGdyYW50RmVhdHVyZUFjY2VzcyhcbiAgICBpbnB1dDogRmVhdHVyZUZsYWdBY2Nlc3NJbnB1dCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPEZlYXR1cmVGbGFnQWNjZXNzPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplRmVhdHVyZUFjY2Vzc0lucHV0KGlucHV0KTtcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZmluZEZlYXR1cmVBY2Nlc3Mobm9ybWFsaXplZCwgLi4uYXJncykuY2F0Y2goXG4gICAgICAoKSA9PiB1bmRlZmluZWRcbiAgICApO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEFjY2Vzc1JlcG9zaXRvcnkoKS5jcmVhdGUoXG4gICAgICAgIG5ldyBGZWF0dXJlRmxhZ0FjY2Vzcyhub3JtYWxpemVkKSxcbiAgICAgICAgLi4uYXJnc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWNjZXNzUmVwb3NpdG9yeSgpLnVwZGF0ZShcbiAgICAgIE9iamVjdC5hc3NpZ24oZXhpc3RpbmcsIG5vcm1hbGl6ZWQpLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyByZXZva2VGZWF0dXJlQWNjZXNzKFxuICAgIGlucHV0OiBGZWF0dXJlRmxhZ0FjY2Vzc1N1YmplY3QgJiB7IGZlYXR1cmVLZXk6IHN0cmluZyB9LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWdBY2Nlc3MgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZmluZEZlYXR1cmVBY2Nlc3MoaW5wdXQsIC4uLmFyZ3MpLmNhdGNoKFxuICAgICAgKCkgPT4gdW5kZWZpbmVkXG4gICAgKTtcbiAgICBpZiAoIWV4aXN0aW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLmdldEFjY2Vzc1JlcG9zaXRvcnkoKS5kZWxldGUoZXhpc3RpbmcuaWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgZmluZEZlYXR1cmVBY2Nlc3MoXG4gICAgcXVlcnk6IEZlYXR1cmVGbGFnQWNjZXNzUXVlcnksXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ0FjY2Vzcz4ge1xuICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuYnVpbGRBY2Nlc3NDb25kaXRpb24ocXVlcnkpO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmdldEFjY2Vzc1JlcG9zaXRvcnkoKVxuICAgICAgLnNlbGVjdCgpXG4gICAgICAud2hlcmUoY29uZGl0aW9uKVxuICAgICAgLmV4ZWN1dGUoLi4uYXJncyk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSByZXN1bHRzWzBdO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKFxuICAgICAgICBgRmVhdHVyZSBhY2Nlc3MgZm9yICR7bm9ybWFsaXplRmVhdHVyZVN1YmplY3RUeXBlKHF1ZXJ5LnN1YmplY3RUeXBlKX06JHtub3JtYWxpemVGZWF0dXJlU3ViamVjdEtleShxdWVyeS5zdWJqZWN0S2V5KX0gbm90IGZvdW5kYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgYXN5bmMgbGlzdEZlYXR1cmVBY2Nlc3MoXG4gICAgcXVlcnk6IEZlYXR1cmVGbGFnQWNjZXNzUXVlcnksXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ0FjY2Vzc1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWNjZXNzUmVwb3NpdG9yeSgpXG4gICAgICAuc2VsZWN0KClcbiAgICAgIC53aGVyZSh0aGlzLmJ1aWxkQWNjZXNzQ29uZGl0aW9uKHF1ZXJ5KSlcbiAgICAgIC5leGVjdXRlKC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZUZlYXR1cmVGbGFnc0ZvclN1YmplY3QoXG4gICAgc3ViamVjdDogRmVhdHVyZUZsYWdBY2Nlc3NTdWJqZWN0LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWdSZWdpc3RyeT4ge1xuICAgIHRoaXMuYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBhY2Nlc3MgPSBhd2FpdCB0aGlzLmxpc3RGZWF0dXJlQWNjZXNzKFxuICAgICAge1xuICAgICAgICAuLi5zdWJqZWN0LFxuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGNvbnN0IGZlYXR1cmVLZXlzID0gWy4uLm5ldyBTZXQoYWNjZXNzLm1hcCgoaXRlbSkgPT4gaXRlbS5mZWF0dXJlS2V5KSldO1xuICAgIGlmIChmZWF0dXJlS2V5cy5sZW5ndGggPT09IDApIHJldHVybiB7fTtcblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IENvbmRpdGlvbi5hdHRyPEZlYXR1cmVGbGFnPihcImVuYWJsZWRcIikuZXEodHJ1ZSkuYW5kKFxuICAgICAgQ29uZGl0aW9uLmF0dHI8RmVhdHVyZUZsYWc+KFwia2V5XCIpLmluKFxuICAgICAgICBmZWF0dXJlS2V5cy5tYXAobm9ybWFsaXplRmVhdHVyZU5hbWUpXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGVuYWJsZWRGbGFncyA9IGF3YWl0IHRoaXMucmVwby5zZWxlY3QoKS53aGVyZShjb25kaXRpb24pLmV4ZWN1dGUoLi4uYXJncyk7XG4gICAgcmV0dXJuIGVuYWJsZWRGbGFncy5yZWR1Y2UoKHJlZ2lzdHJ5LCBmbGFnKSA9PiB7XG4gICAgICByZWdpc3RyeVtmbGFnLmtleV0gPSBmbGFnLmNvbmZpZyA/PyB0cnVlO1xuICAgICAgcmV0dXJuIHJlZ2lzdHJ5O1xuICAgIH0sIHt9IGFzIEZlYXR1cmVGbGFnUmVnaXN0cnkpO1xuICB9XG5cbiAgYXN5bmMgaXNFbmFibGVkRm9yU3ViamVjdChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBzdWJqZWN0OiBGZWF0dXJlRmxhZ0FjY2Vzc1N1YmplY3QsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVnaXN0cnkgPSBhd2FpdCB0aGlzLnJlc29sdmVGZWF0dXJlRmxhZ3NGb3JTdWJqZWN0KHN1YmplY3QsIC4uLmFyZ3MpO1xuICAgIHJldHVybiBpc0ZlYXR1cmVGbGFnRW5hYmxlZEJ5TmFtZShyZWdpc3RyeSwga2V5KTtcbiAgfVxuXG4gIGlzRW5hYmxlZChrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRoaXMuYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gbm9ybWFsaXplRmVhdHVyZU5hbWUoa2V5KTtcbiAgICByZXR1cm4gaXNGZWF0dXJlRmxhZ0VuYWJsZWRCeU5hbWUodGhpcy5jYWNoZWRSZWdpc3RyeSwgbm9ybWFsaXplZEtleSk7XG4gIH1cblxuICBhc3luYyByZXNvbHZlRmVhdHVyZUZsYWdzKCk6IFByb21pc2U8RmVhdHVyZUZsYWdSZWdpc3RyeT4ge1xuICAgIHRoaXMuYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jbG9uZVJlZ2lzdHJ5KHRoaXMuY2FjaGVkUmVnaXN0cnkpO1xuICB9XG5cbiAgYXN5bmMgc3luY0Zyb21FbnZpcm9ubWVudChcbiAgICBvcHRpb25zOiBGZWF0dXJlRmxhZ1JlYWRlcklucHV0ID0ge30sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ1tdPiB7XG4gICAgdGhpcy5hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gYXdhaXQgdGhpcy5yZWFkZXIucmVhZCh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc291cmNlOiBvcHRpb25zLnNvdXJjZSA/PyBGZWF0dXJlRmxhZ0Vudmlyb25tZW50LFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdHM6IEZlYXR1cmVGbGFnW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWdpc3RyeSkpIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9XG4gICAgICAgIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/ICh2YWx1ZSBhcyBGZWF0dXJlRmxhZ0NvbmZpZylcbiAgICAgICAgICA6IHsgZW5hYmxlZDogQm9vbGVhbih2YWx1ZSkgfTtcbiAgICAgIGNvbnN0IHsgZW5hYmxlZDogX2lnbm9yZWRFbmFibGVkLCAuLi5yZXN0Q29uZmlnIH0gPSBjb25maWc7XG4gICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gbm9ybWFsaXplRmVhdHVyZU5hbWUoa2V5KTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5maW5kT25lQnkoXG4gICAgICAgIFwia2V5XCIsXG4gICAgICAgIG5vcm1hbGl6ZWRLZXksXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgICkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IG1vZGVsID0gZXhpc3RpbmdcbiAgICAgICAgPyBPYmplY3QuYXNzaWduKGV4aXN0aW5nLCB7XG4gICAgICAgICAgICBlbmFibGVkOiBpc0ZlYXR1cmVGbGFnRW5hYmxlZCh2YWx1ZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzdENvbmZpZy5kZXNjcmlwdGlvbiA/PyBleGlzdGluZy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNjb3BlOiByZXN0Q29uZmlnLnNjb3BlID8/IGV4aXN0aW5nLnNjb3BlLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc3RDb25maWcubWV0YWRhdGEgPz8gZXhpc3RpbmcubWV0YWRhdGEsXG4gICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgLi4ucmVzdENvbmZpZyxcbiAgICAgICAgICAgICAgZW5hYmxlZDogaXNGZWF0dXJlRmxhZ0VuYWJsZWQodmFsdWUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IG5ldyBGZWF0dXJlRmxhZyh7XG4gICAgICAgICAgICBrZXk6IG5vcm1hbGl6ZWRLZXksXG4gICAgICAgICAgICBlbmFibGVkOiBpc0ZlYXR1cmVGbGFnRW5hYmxlZCh2YWx1ZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzdENvbmZpZy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNjb3BlOiByZXN0Q29uZmlnLnNjb3BlLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc3RDb25maWcubWV0YWRhdGEsXG4gICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgLi4ucmVzdENvbmZpZyxcbiAgICAgICAgICAgICAgZW5hYmxlZDogaXNGZWF0dXJlRmxhZ0VuYWJsZWQodmFsdWUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgIHJlc3VsdHMucHVzaChleGlzdGluZyA/IGF3YWl0IHRoaXMudXBkYXRlKG1vZGVsLCAuLi5hcmdzKSA6IGF3YWl0IHRoaXMuY3JlYXRlKG1vZGVsLCAuLi5hcmdzKSk7XG4gICAgfVxuICAgIHRoaXMuY2FjaGVkUmVnaXN0cnkgPSBhd2FpdCB0aGlzLnJlZnJlc2hDYWNoZWRSZWdpc3RyeShcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc291cmNlOiBvcHRpb25zLnNvdXJjZSA/PyBGZWF0dXJlRmxhZ0Vudmlyb25tZW50LFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmVhdHVyZS1mbGFncy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgRmVhdHVyZUZsYWdNYXRjaE1vZGUgPSBcImFueVwiIHwgXCJhbGxcIjtcbmV4cG9ydCB0eXBlIEZlYXR1cmVGbGFnQWNjZXNzU3ViamVjdFR5cGUgPVxuICB8IFwidXNlclwiXG4gIHwgXCJhY2NvdW50XCJcbiAgfCBcIm5hbWVzcGFjZVwiXG4gIHwgXCJtb2RlbFwiXG4gIHwgXCJyb3V0ZVwiXG4gIHwgXCJ1aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVGbGFnUnVsZSB7XG4gIGZlYXR1cmVzOiBzdHJpbmdbXTtcbiAgbWF0Y2g/OiBGZWF0dXJlRmxhZ01hdGNoTW9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlRmxhZ0NvbmZpZyB7XG4gIGVuYWJsZWQ/OiBib29sZWFuO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHRhcmdldHM/OiBzdHJpbmdbXTtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IHR5cGUgRmVhdHVyZUZsYWdWYWx1ZSA9IGJvb2xlYW4gfCBGZWF0dXJlRmxhZ0NvbmZpZztcblxuZXhwb3J0IHR5cGUgRmVhdHVyZUZsYWdSZWdpc3RyeSA9IFJlY29yZDxzdHJpbmcsIEZlYXR1cmVGbGFnVmFsdWU+O1xuXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVGbGFnRW52aXJvbm1lbnRTaGFwZSB7XG4gIGZlYXR1cmVGbGFnPzogRmVhdHVyZUZsYWdSZWdpc3RyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlRmxhZ0FjY2Vzc1N1YmplY3Qge1xuICBzdWJqZWN0VHlwZTogRmVhdHVyZUZsYWdBY2Nlc3NTdWJqZWN0VHlwZTtcbiAgc3ViamVjdEtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVGbGFnQWNjZXNzSW5wdXQgZXh0ZW5kcyBGZWF0dXJlRmxhZ0FjY2Vzc1N1YmplY3Qge1xuICBmZWF0dXJlS2V5OiBzdHJpbmc7XG4gIGVuYWJsZWQ/OiBib29sZWFuO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVGbGFnQWNjZXNzUXVlcnkgZXh0ZW5kcyBGZWF0dXJlRmxhZ0FjY2Vzc1N1YmplY3Qge1xuICBmZWF0dXJlS2V5cz86IHN0cmluZ1tdO1xuICBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlRmxhZ1JlYWRlcklucHV0IHtcbiAgc291cmNlPzogRmVhdHVyZUZsYWdFbnZpcm9ubWVudFNoYXBlIHwgdW5rbm93bjtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlRmxhZ1JlYWRlckNvbmZpZyB7XG4gIHJlYWRlckNvbmZpZz86IEZlYXR1cmVGbGFnUmVhZGVySW5wdXQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { Metadata } from "@decaf-ts/decoration";
|
|
2
|
+
export function normalizeFeatureName(name) {
|
|
3
|
+
const trimmed = name.trim();
|
|
4
|
+
if (!trimmed)
|
|
5
|
+
return trimmed;
|
|
6
|
+
if (/^[a-z][a-zA-Z0-9]*$/.test(trimmed))
|
|
7
|
+
return trimmed;
|
|
8
|
+
const camelized = trimmed
|
|
9
|
+
.toLowerCase()
|
|
10
|
+
.replace(/[_\-\s]+/g, " ")
|
|
11
|
+
.split(" ")
|
|
12
|
+
.filter(Boolean);
|
|
13
|
+
if (camelized.length === 0)
|
|
14
|
+
return trimmed;
|
|
15
|
+
const [head, ...tail] = camelized;
|
|
16
|
+
return [
|
|
17
|
+
head,
|
|
18
|
+
...tail.map((segment) => segment ? segment.charAt(0).toUpperCase() + segment.slice(1) : segment),
|
|
19
|
+
]
|
|
20
|
+
.join("")
|
|
21
|
+
.replace(/[^a-zA-Z0-9]/g, "");
|
|
22
|
+
}
|
|
23
|
+
export function parseRuntimeValue(value) {
|
|
24
|
+
if (typeof value !== "string")
|
|
25
|
+
return value;
|
|
26
|
+
const trimmed = value.trim();
|
|
27
|
+
if (trimmed === "true")
|
|
28
|
+
return true;
|
|
29
|
+
if (trimmed === "false")
|
|
30
|
+
return false;
|
|
31
|
+
if (/^-?\d+(\.\d+)?$/.test(trimmed))
|
|
32
|
+
return Number(trimmed);
|
|
33
|
+
if ((trimmed.startsWith("{") && trimmed.endsWith("}")) ||
|
|
34
|
+
(trimmed.startsWith("[") && trimmed.endsWith("]"))) {
|
|
35
|
+
try {
|
|
36
|
+
return JSON.parse(trimmed);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
function normalizeObjectKey(key) {
|
|
45
|
+
if (!key)
|
|
46
|
+
return key;
|
|
47
|
+
if (/^[a-z][a-zA-Z0-9]*$/.test(key))
|
|
48
|
+
return key;
|
|
49
|
+
const normalized = key
|
|
50
|
+
.replace(/[\s-]+/g, "_")
|
|
51
|
+
.split("_")
|
|
52
|
+
.filter(Boolean);
|
|
53
|
+
if (normalized.length === 0)
|
|
54
|
+
return key;
|
|
55
|
+
const [head, ...tail] = normalized;
|
|
56
|
+
return [
|
|
57
|
+
head.toLowerCase(),
|
|
58
|
+
...tail.map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase()),
|
|
59
|
+
].join("");
|
|
60
|
+
}
|
|
61
|
+
export function normalizeFeatureConfig(value) {
|
|
62
|
+
if (typeof value === "undefined")
|
|
63
|
+
return undefined;
|
|
64
|
+
if (value === true)
|
|
65
|
+
return true;
|
|
66
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
67
|
+
return parseRuntimeValue(value);
|
|
68
|
+
}
|
|
69
|
+
const result = {};
|
|
70
|
+
Object.entries(value).forEach(([key, raw]) => {
|
|
71
|
+
const normalizedKey = normalizeObjectKey(key);
|
|
72
|
+
if (typeof raw !== "undefined") {
|
|
73
|
+
result[normalizedKey] = normalizeFeatureConfig(raw) ?? raw;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
export function normalizeFeatureRegistry(value) {
|
|
79
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
80
|
+
return {};
|
|
81
|
+
return Object.entries(value).reduce((acc, [key, raw]) => {
|
|
82
|
+
const normalizedKey = normalizeFeatureName(key);
|
|
83
|
+
const normalizedValue = normalizeFeatureConfig(raw);
|
|
84
|
+
if (typeof normalizedValue !== "undefined") {
|
|
85
|
+
acc[normalizedKey] = normalizedValue;
|
|
86
|
+
}
|
|
87
|
+
return acc;
|
|
88
|
+
}, {});
|
|
89
|
+
}
|
|
90
|
+
export function isFeatureFlagEnabled(value) {
|
|
91
|
+
if (value === true)
|
|
92
|
+
return true;
|
|
93
|
+
return !!value && typeof value === "object";
|
|
94
|
+
}
|
|
95
|
+
export function isFeatureFlagEnabledByName(registry, featureName) {
|
|
96
|
+
return isFeatureFlagEnabled(registry?.[normalizeFeatureName(featureName)]);
|
|
97
|
+
}
|
|
98
|
+
export function normalizeFeatureRule(features, match = "any") {
|
|
99
|
+
return {
|
|
100
|
+
features: [...new Set(features.map(normalizeFeatureName).filter(Boolean))],
|
|
101
|
+
match,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export function isFeatureRuleSatisfied(rule, registry) {
|
|
105
|
+
if (!rule || rule.features.length === 0)
|
|
106
|
+
return true;
|
|
107
|
+
const enabled = rule.features.filter((feature) => isFeatureFlagEnabledByName(registry, feature));
|
|
108
|
+
if (rule.match === "all")
|
|
109
|
+
return enabled.length === rule.features.length;
|
|
110
|
+
return enabled.length > 0;
|
|
111
|
+
}
|
|
112
|
+
export function isFeatureRuleBlocked(rule, registry) {
|
|
113
|
+
if (!rule || rule.features.length === 0)
|
|
114
|
+
return false;
|
|
115
|
+
return rule.features.some((feature) => isFeatureFlagEnabledByName(registry, feature));
|
|
116
|
+
}
|
|
117
|
+
export function readMetadata(target, key) {
|
|
118
|
+
return Metadata.get(target, key);
|
|
119
|
+
}
|
|
120
|
+
export function normalizeFeatureSubjectType(subjectType) {
|
|
121
|
+
return subjectType.trim().toLowerCase();
|
|
122
|
+
}
|
|
123
|
+
export function normalizeFeatureSubjectKey(subjectKey) {
|
|
124
|
+
return subjectKey.trim();
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmVhdHVyZS1mbGFncy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFVaEQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQVk7SUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDN0IsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDeEQsTUFBTSxTQUFTLEdBQUcsT0FBTztTQUN0QixXQUFXLEVBQUU7U0FDYixPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQztTQUN6QixLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25CLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDM0MsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUNsQyxPQUFPO1FBQ0wsSUFBSTtRQUNKLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ3RCLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3ZFO0tBQ0Y7U0FDRSxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQ1IsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFD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LENBQUMsV0FBVyxFQUFrQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsVUFBa0I7SUFDM0QsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQge1xuICBGZWF0dXJlRmxhZ0NvbmZpZyxcbiAgRmVhdHVyZUZsYWdBY2Nlc3NTdWJqZWN0VHlwZSxcbiAgRmVhdHVyZUZsYWdNYXRjaE1vZGUsXG4gIEZlYXR1cmVGbGFnUmVnaXN0cnksXG4gIEZlYXR1cmVGbGFnUnVsZSxcbiAgRmVhdHVyZUZsYWdWYWx1ZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZlYXR1cmVOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRyaW1tZWQgPSBuYW1lLnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkKSByZXR1cm4gdHJpbW1lZDtcbiAgaWYgKC9eW2Etel1bYS16QS1aMC05XSokLy50ZXN0KHRyaW1tZWQpKSByZXR1cm4gdHJpbW1lZDtcbiAgY29uc3QgY2FtZWxpemVkID0gdHJpbW1lZFxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1tfXFwtXFxzXSsvZywgXCIgXCIpXG4gICAgLnNwbGl0KFwiIFwiKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIGlmIChjYW1lbGl6ZWQubGVuZ3RoID09PSAwKSByZXR1cm4gdHJpbW1lZDtcbiAgY29uc3QgW2hlYWQsIC4uLnRhaWxdID0gY2FtZWxpemVkO1xuICByZXR1cm4gW1xuICAgIGhlYWQsXG4gICAgLi4udGFpbC5tYXAoKHNlZ21lbnQpID0+XG4gICAgICBzZWdtZW50ID8gc2VnbWVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHNlZ21lbnQuc2xpY2UoMSkgOiBzZWdtZW50XG4gICAgKSxcbiAgXVxuICAgIC5qb2luKFwiXCIpXG4gICAgLnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCBcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUnVudGltZVZhbHVlKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiB2YWx1ZTtcbiAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcbiAgaWYgKHRyaW1tZWQgPT09IFwidHJ1ZVwiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRyaW1tZWQgPT09IFwiZmFsc2VcIikgcmV0dXJuIGZhbHNlO1xuICBpZiAoL14tP1xcZCsoXFwuXFxkKyk/JC8udGVzdCh0cmltbWVkKSkgcmV0dXJuIE51bWJlcih0cmltbWVkKTtcbiAgaWYgKFxuICAgICh0cmltbWVkLnN0YXJ0c1dpdGgoXCJ7XCIpICYmIHRyaW1tZWQuZW5kc1dpdGgoXCJ9XCIpKSB8fFxuICAgICh0cmltbWVkLnN0YXJ0c1dpdGgoXCJbXCIpICYmIHRyaW1tZWQuZW5kc1dpdGgoXCJdXCIpKVxuICApIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodHJpbW1lZCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplT2JqZWN0S2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFrZXkpIHJldHVybiBrZXk7XG4gIGlmICgvXlthLXpdW2EtekEtWjAtOV0qJC8udGVzdChrZXkpKSByZXR1cm4ga2V5O1xuICBjb25zdCBub3JtYWxpemVkID0ga2V5XG4gICAgLnJlcGxhY2UoL1tcXHMtXSsvZywgXCJfXCIpXG4gICAgLnNwbGl0KFwiX1wiKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIGlmIChub3JtYWxpemVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGtleTtcbiAgY29uc3QgW2hlYWQsIC4uLnRhaWxdID0gbm9ybWFsaXplZDtcbiAgcmV0dXJuIFtcbiAgICBoZWFkLnRvTG93ZXJDYXNlKCksXG4gICAgLi4udGFpbC5tYXAoXG4gICAgICAoc2VnbWVudCkgPT5cbiAgICAgICAgc2VnbWVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHNlZ21lbnQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKVxuICAgICksXG4gIF0uam9pbihcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZlYXR1cmVDb25maWcoXG4gIHZhbHVlOiB1bmtub3duXG4pOiBGZWF0dXJlRmxhZ1ZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHZhbHVlID09PSB0cnVlKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gcGFyc2VSdW50aW1lVmFsdWUodmFsdWUpIGFzIEZlYXR1cmVGbGFnVmFsdWU7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IEZlYXR1cmVGbGFnQ29uZmlnID0ge307XG4gIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5mb3JFYWNoKChba2V5LCByYXddKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEtleSA9IG5vcm1hbGl6ZU9iamVjdEtleShrZXkpO1xuICAgIGlmICh0eXBlb2YgcmF3ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICByZXN1bHRbbm9ybWFsaXplZEtleV0gPSBub3JtYWxpemVGZWF0dXJlQ29uZmlnKHJhdykgPz8gcmF3O1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGZWF0dXJlUmVnaXN0cnkoXG4gIHZhbHVlOiB1bmtub3duXG4pOiBGZWF0dXJlRmxhZ1JlZ2lzdHJ5IHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB7fTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5yZWR1Y2UoXG4gICAgKGFjYywgW2tleSwgcmF3XSkgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEtleSA9IG5vcm1hbGl6ZUZlYXR1cmVOYW1lKGtleSk7XG4gICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVGZWF0dXJlQ29uZmlnKHJhdyk7XG4gICAgICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBhY2Nbbm9ybWFsaXplZEtleV0gPSBub3JtYWxpemVkVmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sXG4gICAge30gYXMgRmVhdHVyZUZsYWdSZWdpc3RyeVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGZWF0dXJlRmxhZ0VuYWJsZWQodmFsdWU6IEZlYXR1cmVGbGFnVmFsdWUgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKHZhbHVlID09PSB0cnVlKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGZWF0dXJlRmxhZ0VuYWJsZWRCeU5hbWUoXG4gIHJlZ2lzdHJ5OiBGZWF0dXJlRmxhZ1JlZ2lzdHJ5IHwgdW5kZWZpbmVkLFxuICBmZWF0dXJlTmFtZTogc3RyaW5nXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzRmVhdHVyZUZsYWdFbmFibGVkKHJlZ2lzdHJ5Py5bbm9ybWFsaXplRmVhdHVyZU5hbWUoZmVhdHVyZU5hbWUpXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGZWF0dXJlUnVsZShcbiAgZmVhdHVyZXM6IHN0cmluZ1tdLFxuICBtYXRjaDogRmVhdHVyZUZsYWdNYXRjaE1vZGUgPSBcImFueVwiXG4pOiBGZWF0dXJlRmxhZ1J1bGUge1xuICByZXR1cm4ge1xuICAgIGZlYXR1cmVzOiBbLi4ubmV3IFNldChmZWF0dXJlcy5tYXAobm9ybWFsaXplRmVhdHVyZU5hbWUpLmZpbHRlcihCb29sZWFuKSldLFxuICAgIG1hdGNoLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGZWF0dXJlUnVsZVNhdGlzZmllZChcbiAgcnVsZTogRmVhdHVyZUZsYWdSdWxlIHwgdW5kZWZpbmVkLFxuICByZWdpc3RyeTogRmVhdHVyZUZsYWdSZWdpc3RyeSB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiB7XG4gIGlmICghcnVsZSB8fCBydWxlLmZlYXR1cmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGVuYWJsZWQgPSBydWxlLmZlYXR1cmVzLmZpbHRlcigoZmVhdHVyZSkgPT5cbiAgICBpc0ZlYXR1cmVGbGFnRW5hYmxlZEJ5TmFtZShyZWdpc3RyeSwgZmVhdHVyZSlcbiAgKTtcbiAgaWYgKHJ1bGUubWF0Y2ggPT09IFwiYWxsXCIpIHJldHVybiBlbmFibGVkLmxlbmd0aCA9PT0gcnVsZS5mZWF0dXJlcy5sZW5ndGg7XG4gIHJldHVybiBlbmFibGVkLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZlYXR1cmVSdWxlQmxvY2tlZChcbiAgcnVsZTogRmVhdHVyZUZsYWdSdWxlIHwgdW5kZWZpbmVkLFxuICByZWdpc3RyeTogRmVhdHVyZUZsYWdSZWdpc3RyeSB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiB7XG4gIGlmICghcnVsZSB8fCBydWxlLmZlYXR1cmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gcnVsZS5mZWF0dXJlcy5zb21lKChmZWF0dXJlKSA9PiBpc0ZlYXR1cmVGbGFnRW5hYmxlZEJ5TmFtZShyZWdpc3RyeSwgZmVhdHVyZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE1ldGFkYXRhPFQgPSB1bmtub3duPihcbiAgdGFyZ2V0OiBvYmplY3QsXG4gIGtleTogc3RyaW5nXG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIE1ldGFkYXRhLmdldCh0YXJnZXQgYXMgYW55LCBrZXkpIGFzIFQgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGZWF0dXJlU3ViamVjdFR5cGUoXG4gIHN1YmplY3RUeXBlOiBGZWF0dXJlRmxhZ0FjY2Vzc1N1YmplY3RUeXBlIHwgc3RyaW5nXG4pOiBGZWF0dXJlRmxhZ0FjY2Vzc1N1YmplY3RUeXBlIHtcbiAgcmV0dXJuIHN1YmplY3RUeXBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpIGFzIEZlYXR1cmVGbGFnQWNjZXNzU3ViamVjdFR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGZWF0dXJlU3ViamVjdEtleShzdWJqZWN0S2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3ViamVjdEtleS50cmltKCk7XG59XG4iXX0=
|
|
@@ -10,15 +10,15 @@ import { ConditionExpressionEvaluator } from "./../loops/ConditionExpressionEval
|
|
|
10
10
|
function readSwitchMetadata(context) {
|
|
11
11
|
const meta = context.node.graph?.metadata;
|
|
12
12
|
if (!meta)
|
|
13
|
-
return { cases: [], defaultPort: "default", hasDefault:
|
|
13
|
+
return { cases: [], defaultPort: "default", hasDefault: false };
|
|
14
14
|
const switchMeta = meta["switch"];
|
|
15
15
|
if (!switchMeta || !Array.isArray(switchMeta.cases)) {
|
|
16
|
-
return { cases: [], defaultPort: "default", hasDefault:
|
|
16
|
+
return { cases: [], defaultPort: "default", hasDefault: false };
|
|
17
17
|
}
|
|
18
18
|
return {
|
|
19
19
|
cases: switchMeta.cases,
|
|
20
20
|
defaultPort: switchMeta.defaultPort ?? "default",
|
|
21
|
-
hasDefault: switchMeta.hasDefault
|
|
21
|
+
hasDefault: switchMeta.hasDefault === true,
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
@@ -44,8 +44,8 @@ function isConditionExpression(cond) {
|
|
|
44
44
|
*
|
|
45
45
|
* Evaluates each case's condition in order and routes the input to the
|
|
46
46
|
* first matching case's output port. When no case matches:
|
|
47
|
-
* - If `hasDefault` is `true
|
|
48
|
-
* - If `hasDefault` is `false
|
|
47
|
+
* - If `hasDefault` is `true`, routes to the `default` output port.
|
|
48
|
+
* - If `hasDefault` is `false` (the default), throws `GRAPH_SWITCH_NO_MATCH`.
|
|
49
49
|
*
|
|
50
50
|
* Condition evaluation:
|
|
51
51
|
* - `ConditionExpression` — evaluated via {@link ConditionExpressionEvaluator}.
|
|
@@ -68,8 +68,8 @@ export class SwitchGraphNodeExecutor {
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
// No case matched — route to the default port when it is enabled.
|
|
71
|
-
if (meta.hasDefault
|
|
72
|
-
|
|
71
|
+
if (meta.hasDefault !== true) {
|
|
72
|
+
throw new GraphExecutionError("No switch case matched and default port is not enabled", "GRAPH_SWITCH_NO_MATCH", { cases: meta.cases.map((c) => c.id) });
|
|
73
73
|
}
|
|
74
74
|
const defaultPort = meta.defaultPort ?? "default";
|
|
75
75
|
return { [defaultPort]: inputValue };
|
|
@@ -112,4 +112,4 @@ export class SwitchGraphNodeExecutor {
|
|
|
112
112
|
return !!result;
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dpdGNoR3JhcGhOb2RlRXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL2V4ZWN1dGlvbi9Td2l0Y2hHcmFwaE5vZGVFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDJDQUFzQztBQUNwRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsbURBQThDO0FBR3JGOzs7Ozs7R0FNRztBQUNILFNBQVMsa0JBQWtCLENBQ3pCLE9BQThCO0lBRTlCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBRXBCLENBQUM7SUFDZCxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzFFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQW1DLENBQUM7SUFDcEUsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUNELE9BQU87UUFDTCxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFDdkIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXLElBQUksU0FBUztRQUNoRCxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsS0FBSyxLQUFLO0tBQzVDLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxJQUF5QjtJQUNoRCxPQUFPLENBQ0wsT0FBTyxJQUFJLEtBQUssUUFBUTtRQUN4QixJQUFJLEtBQUss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QUMsUUFBK0MsQ0FBQztRQUVuRSxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUM7WUFDdEMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3BCLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtZQUM1QixLQUFLO1lBQ0wsSUFBSSxFQUFHLEVBQUUsRUFBRSxJQUE0QyxJQUFJLFNBQVM7WUFDcEUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUEyQjtZQUN0QyxLQUFLLEVBQ0YsRUFBRSxFQUFFLEtBQTZEO2dCQUNsRSxTQUFTO1lBQ1gsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUVIO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvZXhlY3V0aW9uL1N3aXRjaEdyYXBoTm9kZUV4ZWN1dG9yXG4gKiBAc3VtbWFyeSBFeGVjdXRvciBmb3IgdGhlIFN3aXRjaCBmbG93LWNvbnRyb2wgbm9kZSAoREVDQUYtMzIgwqcyMi4yLjIpLlxuICogQGRlc2NyaXB0aW9uIEV2YWx1YXRlcyBlYWNoIGNhc2UncyBjb25kaXRpb24gYWdhaW5zdCB0aGUgbm9kZSdzIGlucHV0IGFuZFxuICogcm91dGVzIHRoZSBpbnB1dCB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgY2FzZSdzIG91dHB1dCBwb3J0LiBGYWxscyBiYWNrIHRvXG4gKiB0aGUgYGRlZmF1bHRgIG91dHB1dCB3aGVuIG5vIGNhc2UgbWF0Y2hlcy4gU3VwcG9ydHMgYm90aFxuICoge0BsaW5rIENvbmRpdGlvbkV4cHJlc3Npb259IChncmFwaGljYWwgbW9kZSkgYW5kIHtAbGluayBDb2RlQ29uZGl0aW9ufVxuICogKGNvZGUgbW9kZSB2aWEgdGhlIHBsdWdnYWJsZSB7QGxpbmsgQ29kZVNhbmRib3hFdmFsdWF0b3J9KS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBHcmFwaE5vZGVFeGVjdXRvciB9IGZyb20gXCIuL0dyYXBoTm9kZUV4ZWN1dG9yXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvblZhbHVlcyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuICBTd2l0Y2hDYXNlQ29uZGl0aW9uLFxuICBTd2l0Y2hOb2RlTWV0YWRhdGEsXG4gIENvbmRpdGlvbkV4cHJlc3Npb24sXG4gIENvZGVDb25kaXRpb24sXG59IGZyb20gXCIuLi8uLi9zaGFyZWQvdHlwZXNcIjtcbmltcG9ydCB7IEdyYXBoRXhlY3V0aW9uRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzL0dyYXBoRXhlY3V0aW9uRXJyb3JcIjtcbmltcG9ydCB7IENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3IgfSBmcm9tIFwiLi4vbG9vcHMvQ29uZGl0aW9uRXhwcmVzc2lvbkV2YWx1YXRvclwiO1xuaW1wb3J0IHR5cGUgeyBDb2RlU2FuZGJveEV2YWx1YXRvciB9IGZyb20gXCIuL0NvZGVTYW5kYm94RXZhbHVhdG9yXCI7XG5cbi8qKlxuICogUmVhZHMgdGhlIFN3aXRjaCBtZXRhZGF0YSBmcm9tIHRoZSBub2RlIGRlZmluaXRpb24ncyBncmFwaCBtZXRhZGF0YS5cbiAqXG4gKiBUaGUgbWV0YWRhdGEgaXMgc3RvcmVkIHVuZGVyIGBncmFwaC5tZXRhZGF0YS5zd2l0Y2hgICh0aGUgbG9jYXRpb24gdXNlZCBieVxuICogc3RhdGljYWxseS1kZWNsYXJlZCBgQG5vZGVgIHdvcmtmbG93cykuIFdoZW4gYWJzZW50LCBmYWxscyBiYWNrIHRvIGFuIGVtcHR5XG4gKiBkZWZhdWx0IHdpdGggdGhlIGBkZWZhdWx0YCBwb3J0IGVuYWJsZWQuXG4gKi9cbmZ1bmN0aW9uIHJlYWRTd2l0Y2hNZXRhZGF0YShcbiAgY29udGV4dDogR3JhcGhFeGVjdXRpb25Db250ZXh0XG4pOiBTd2l0Y2hOb2RlTWV0YWRhdGEge1xuICBjb25zdCBtZXRhID0gY29udGV4dC5ub2RlLmdyYXBoPy5tZXRhZGF0YSBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IHVuZGVmaW5lZDtcbiAgaWYgKCFtZXRhKSByZXR1cm4geyBjYXNlczogW10sIGRlZmF1bHRQb3J0OiBcImRlZmF1bHRcIiwgaGFzRGVmYXVsdDogdHJ1ZSB9O1xuICBjb25zdCBzd2l0Y2hNZXRhID0gbWV0YVtcInN3aXRjaFwiXSBhcyBTd2l0Y2hOb2RlTWV0YWRhdGEgfCB1bmRlZmluZWQ7XG4gIGlmICghc3dpdGNoTWV0YSB8fCAhQXJyYXkuaXNBcnJheShzd2l0Y2hNZXRhLmNhc2VzKSkge1xuICAgIHJldHVybiB7IGNhc2VzOiBbXSwgZGVmYXVsdFBvcnQ6IFwiZGVmYXVsdFwiLCBoYXNEZWZhdWx0OiB0cnVlIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjYXNlczogc3dpdGNoTWV0YS5jYXNlcyxcbiAgICBkZWZhdWx0UG9ydDogc3dpdGNoTWV0YS5kZWZhdWx0UG9ydCA/PyBcImRlZmF1bHRcIixcbiAgICBoYXNEZWZhdWx0OiBzd2l0Y2hNZXRhLmhhc0RlZmF1bHQgIT09IGZhbHNlLFxuICB9O1xufVxuXG4vKipcbiAqIERldGVjdHMgd2hldGhlciBhIGNvbmRpdGlvbiBpcyBhIGBDb2RlQ29uZGl0aW9uYCAoaGFzIGB0eXBlOiBcImNvZGVcImApLlxuICovXG5mdW5jdGlvbiBpc0NvZGVDb25kaXRpb24oY29uZDogU3dpdGNoQ2FzZUNvbmRpdGlvbik6IGNvbmQgaXMgQ29kZUNvbmRpdGlvbiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGNvbmQgPT09IFwib2JqZWN0XCIgJiZcbiAgICBjb25kICE9PSBudWxsICYmXG4gICAgXCJ0eXBlXCIgaW4gY29uZCAmJlxuICAgIGNvbmQudHlwZSA9PT0gXCJjb2RlXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHdoZXRoZXIgYSBjb25kaXRpb24gaXMgYSBgQ29uZGl0aW9uRXhwcmVzc2lvbmAgKGhhcyBgb3BgIGZpZWxkKS5cbiAqL1xuZnVuY3Rpb24gaXNDb25kaXRpb25FeHByZXNzaW9uKFxuICBjb25kOiBTd2l0Y2hDYXNlQ29uZGl0aW9uXG4pOiBjb25kIGlzIENvbmRpdGlvbkV4cHJlc3Npb24ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBjb25kID09PSBcIm9iamVjdFwiICYmXG4gICAgY29uZCAhPT0gbnVsbCAmJlxuICAgIFwib3BcIiBpbiBjb25kICYmXG4gICAgdHlwZW9mIGNvbmQub3AgPT09IFwic3RyaW5nXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRvciBmb3IgYGNvcmUuZmxvdy5zd2l0Y2hgIG5vZGVzLlxuICpcbiAqIEV2YWx1YXRlcyBlYWNoIGNhc2UncyBjb25kaXRpb24gaW4gb3JkZXIgYW5kIHJvdXRlcyB0aGUgaW5wdXQgdG8gdGhlXG4gKiBmaXJzdCBtYXRjaGluZyBjYXNlJ3Mgb3V0cHV0IHBvcnQuIFdoZW4gbm8gY2FzZSBtYXRjaGVzOlxuICogLSBJZiBgaGFzRGVmYXVsdGAgaXMgYHRydWVgIChvciBvbWl0dGVkKSwgcm91dGVzIHRvIHRoZSBgZGVmYXVsdGAgb3V0cHV0IHBvcnQuXG4gKiAtIElmIGBoYXNEZWZhdWx0YCBpcyBgZmFsc2VgLCByZXR1cm5zIGFuIGVtcHR5IG91dHB1dCAodGhlIGlucHV0IGlzIGRyb3BwZWQpLlxuICpcbiAqIENvbmRpdGlvbiBldmFsdWF0aW9uOlxuICogLSBgQ29uZGl0aW9uRXhwcmVzc2lvbmAg4oCUIGV2YWx1YXRlZCB2aWEge0BsaW5rIENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3J9LlxuICogLSBgQ29kZUNvbmRpdGlvbmAg4oCUIGV2YWx1YXRlZCB2aWEgdGhlIHBsdWdnYWJsZSB7QGxpbmsgQ29kZVNhbmRib3hFdmFsdWF0b3J9XG4gKiAgIGZyb20gdGhlIGVuZ2luZSdzIGNvbmZpZy4gVGhyb3dzIGBHUkFQSF9DT0RFX1NBTkRCT1hfTk9UX0NPTkZJR1VSRURgXG4gKiAgIHdoZW4gbm8gZXZhbHVhdG9yIGlzIHJlZ2lzdGVyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTd2l0Y2hHcmFwaE5vZGVFeGVjdXRvciBpbXBsZW1lbnRzIEdyYXBoTm9kZUV4ZWN1dG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBleHByZXNzaW9uRXZhbHVhdG9yID0gbmV3IENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3IoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZT86IHsgY29kZVNhbmRib3hFdmFsdWF0b3I/OiBDb2RlU2FuZGJveEV2YWx1YXRvciB9XG4gICkge31cblxuICBhc3luYyBleGVjdXRlKFxuICAgIGlucHV0OiBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbiAgICBjb250ZXh0OiBHcmFwaEV4ZWN1dGlvbkNvbnRleHRcbiAgKTogUHJvbWlzZTxHcmFwaEV4ZWN1dGlvblZhbHVlcz4ge1xuICAgIGNvbnN0IG1ldGEgPSByZWFkU3dpdGNoTWV0YWRhdGEoY29udGV4dCk7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0W1widmFsdWVcIl0gPz8gaW5wdXQ7XG5cbiAgICBmb3IgKGNvbnN0IHN3aXRjaENhc2Ugb2YgbWV0YS5jYXNlcykge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGF3YWl0IHRoaXMuZXZhbHVhdGVDb25kaXRpb24oXG4gICAgICAgIHN3aXRjaENhc2UuY29uZGl0aW9uLFxuICAgICAgICBpbnB1dFZhbHVlLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgY29udGV4dFxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB7IFtzd2l0Y2hDYXNlLm91dHB1dFBvcnRdOiBpbnB1dFZhbHVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm8gY2FzZSBtYXRjaGVkIOKAlCByb3V0ZSB0byB0aGUgZGVmYXVsdCBwb3J0IHdoZW4gaXQgaXMgZW5hYmxlZC5cbiAgICBpZiAobWV0YS5oYXNEZWZhdWx0ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0UG9ydCA9IG1ldGEuZGVmYXVsdFBvcnQgPz8gXCJkZWZhdWx0XCI7XG4gICAgcmV0dXJuIHsgW2RlZmF1bHRQb3J0XTogaW5wdXRWYWx1ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhIHNpbmdsZSBzd2l0Y2ggY2FzZSBjb25kaXRpb24uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV2YWx1YXRlQ29uZGl0aW9uKFxuICAgIGNvbmRpdGlvbjogU3dpdGNoQ2FzZUNvbmRpdGlvbixcbiAgICBpbnB1dFZhbHVlOiB1bmtub3duLFxuICAgIGZ1bGxJbnB1dDogR3JhcGhFeGVjdXRpb25WYWx1ZXMsXG4gICAgY29udGV4dDogR3JhcGhFeGVjdXRpb25Db250ZXh0XG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChpc0NvZGVDb25kaXRpb24oY29uZGl0aW9uKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVDb2RlQ29uZGl0aW9uKGNvbmRpdGlvbiwgZnVsbElucHV0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBpZiAoaXNDb25kaXRpb25FeHByZXNzaW9uKGNvbmRpdGlvbikpIHtcbiAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbHVhdGUoY29uZGl0aW9uLCBpbnB1dFZhbHVlKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgR3JhcGhFeGVjdXRpb25FcnJvcihcbiAgICAgIFwiVW5rbm93biBzd2l0Y2ggY2FzZSBjb25kaXRpb24gdHlwZSDigJQgbXVzdCBiZSBDb25kaXRpb25FeHByZXNzaW9uIChvcCkgb3IgQ29kZUNvbmRpdGlvbiAodHlwZTogJ2NvZGUnKVwiLFxuICAgICAgXCJHUkFQSF9VTktOT1dOX1NXSVRDSF9DT05ESVRJT05cIixcbiAgICAgIHsgY29uZGl0aW9uIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhIGNvZGUgY29uZGl0aW9uIHZpYSB0aGUgcGx1Z2dhYmxlIHNhbmRib3ggZXZhbHVhdG9yLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBldmFsdWF0ZUNvZGVDb25kaXRpb24oXG4gICAgY29uZGl0aW9uOiBDb2RlQ29uZGl0aW9uLFxuICAgIGlucHV0OiBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbiAgICBjb250ZXh0OiBHcmFwaEV4ZWN1dGlvbkNvbnRleHRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZXZhbHVhdG9yID0gdGhpcy5lbmdpbmU/LmNvZGVTYW5kYm94RXZhbHVhdG9yO1xuICAgIGlmICghZXZhbHVhdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhFeGVjdXRpb25FcnJvcihcbiAgICAgICAgXCJDb2RlIGNvbmRpdGlvbnMgcmVxdWlyZSBhIENvZGVTYW5kYm94RXZhbHVhdG9yIHRvIGJlIHJlZ2lzdGVyZWQgaW4gR3JhcGhFeGVjdXRpb25FbmdpbmVDb25maWcuY29kZVNhbmRib3hFdmFsdWF0b3JcIixcbiAgICAgICAgXCJHUkFQSF9DT0RFX1NBTkRCT1hfTk9UX0NPTkZJR1VSRURcIixcbiAgICAgICAgeyBjb2RlOiBjb25kaXRpb24uY29kZSB9XG4gICAgICApO1xuICAgIH1cblxuICAgIGF3YWl0IGNvbnRleHQubG9nKGBFdmFsdWF0aW5nIGNvZGUgY29uZGl0aW9uYCwge1xuICAgICAgbGFuZ3VhZ2U6IGNvbmRpdGlvbi5sYW5ndWFnZSA/PyBcImphdmFzY3JpcHRcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IG1kID0gY29udGV4dC5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV2YWx1YXRvci5ldmFsdWF0ZSh7XG4gICAgICBjb2RlOiBjb25kaXRpb24uY29kZSxcbiAgICAgIGxhbmd1YWdlOiBjb25kaXRpb24ubGFuZ3VhZ2UsXG4gICAgICBpbnB1dCxcbiAgICAgIHZhcnM6IChtZD8udmFycyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkgPz8gdW5kZWZpbmVkLFxuICAgICAgaXRlbTogbWQ/Lml0ZW0sXG4gICAgICBpbmRleDogbWQ/LmluZGV4IGFzIG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICAgIG5vZGVzOlxuICAgICAgICAobWQ/Lm5vZGVzIGFzIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB8IHVuZGVmaW5lZCkgPz9cbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgbG9nZ2VyOiBjb250ZXh0LmxvZ2dlciBhcyB1bmtub3duIGFzXG4gICAgICAgIHwgaW1wb3J0KFwiLi9Db2RlU2FuZGJveEV2YWx1YXRvclwiKS5TYW5kYm94TG9nZ2VyXG4gICAgICAgIHwgdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuICEhcmVzdWx0O1xuICB9XG59XG4iXX0=
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dpdGNoR3JhcGhOb2RlRXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL2V4ZWN1dGlvbi9Td2l0Y2hHcmFwaE5vZGVFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDJDQUFzQztBQUNwRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsbURBQThDO0FBR3JGOzs7Ozs7R0FNRztBQUNILFNBQVMsa0JBQWtCLENBQ3pCLE9BQThCO0lBRTlCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBRXBCLENBQUM7SUFDZCxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzNFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQW1DLENBQUM7SUFDcEUsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUNELE9BQU87UUFDTCxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFDdkIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXLElBQUksU0FBUztRQUNoRCxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsS0FBSyxJQUFJO0tBQzNDLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxJQUF5QjtJQUNoRCxPQUFPLENBQ0wsT0FBTyxJQUFJLEtBQUssUUFBUTtRQUN4QixJQUFJLEtBQUss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QUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRTtZQUM3QyxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVEsSUFBSSxZQUFZO1NBQzdDLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxRQUErQyxDQUFDO1FBRW5FLE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUN0QyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7WUFDcEIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1lBQzVCLEtBQUs7WUFDTCxJQUFJLEVBQUcsRUFBRSxFQUFFLElBQTRDLElBQUksU0FBUztZQUNwRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQTJCO1lBQ3RDLEtBQUssRUFDRixFQUFFLEVBQUUsS0FBNkQ7Z0JBQ2xFLFNBQVM7WUFDWCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BRUg7U0FDZCxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9leGVjdXRpb24vU3dpdGNoR3JhcGhOb2RlRXhlY3V0b3JcbiAqIEBzdW1tYXJ5IEV4ZWN1dG9yIGZvciB0aGUgU3dpdGNoIGZsb3ctY29udHJvbCBub2RlIChERUNBRi0zMiDCpzIyLjIuMikuXG4gKiBAZGVzY3JpcHRpb24gRXZhbHVhdGVzIGVhY2ggY2FzZSdzIGNvbmRpdGlvbiBhZ2FpbnN0IHRoZSBub2RlJ3MgaW5wdXQgYW5kXG4gKiByb3V0ZXMgdGhlIGlucHV0IHRvIHRoZSBmaXJzdCBtYXRjaGluZyBjYXNlJ3Mgb3V0cHV0IHBvcnQuIEZhbGxzIGJhY2sgdG9cbiAqIHRoZSBgZGVmYXVsdGAgb3V0cHV0IHdoZW4gbm8gY2FzZSBtYXRjaGVzLiBTdXBwb3J0cyBib3RoXG4gKiB7QGxpbmsgQ29uZGl0aW9uRXhwcmVzc2lvbn0gKGdyYXBoaWNhbCBtb2RlKSBhbmQge0BsaW5rIENvZGVDb25kaXRpb259XG4gKiAoY29kZSBtb2RlIHZpYSB0aGUgcGx1Z2dhYmxlIHtAbGluayBDb2RlU2FuZGJveEV2YWx1YXRvcn0pLlxuICovXG5pbXBvcnQgdHlwZSB7IEdyYXBoTm9kZUV4ZWN1dG9yIH0gZnJvbSBcIi4vR3JhcGhOb2RlRXhlY3V0b3JcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25Db250ZXh0IH0gZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uVmFsdWVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFN3aXRjaENhc2VDb25kaXRpb24sXG4gIFN3aXRjaE5vZGVNZXRhZGF0YSxcbiAgQ29uZGl0aW9uRXhwcmVzc2lvbixcbiAgQ29kZUNvbmRpdGlvbixcbn0gZnJvbSBcIi4uLy4uL3NoYXJlZC90eXBlc1wiO1xuaW1wb3J0IHsgR3JhcGhFeGVjdXRpb25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnMvR3JhcGhFeGVjdXRpb25FcnJvclwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uRXhwcmVzc2lvbkV2YWx1YXRvciB9IGZyb20gXCIuLi9sb29wcy9Db25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IENvZGVTYW5kYm94RXZhbHVhdG9yIH0gZnJvbSBcIi4vQ29kZVNhbmRib3hFdmFsdWF0b3JcIjtcblxuLyoqXG4gKiBSZWFkcyB0aGUgU3dpdGNoIG1ldGFkYXRhIGZyb20gdGhlIG5vZGUgZGVmaW5pdGlvbidzIGdyYXBoIG1ldGFkYXRhLlxuICpcbiAqIFRoZSBtZXRhZGF0YSBpcyBzdG9yZWQgdW5kZXIgYGdyYXBoLm1ldGFkYXRhLnN3aXRjaGAgKHRoZSBsb2NhdGlvbiB1c2VkIGJ5XG4gKiBzdGF0aWNhbGx5LWRlY2xhcmVkIGBAbm9kZWAgd29ya2Zsb3dzKS4gV2hlbiBhYnNlbnQsIGZhbGxzIGJhY2sgdG8gYW4gZW1wdHlcbiAqIGRlZmF1bHQgd2l0aCB0aGUgYGRlZmF1bHRgIHBvcnQgZW5hYmxlZC5cbiAqL1xuZnVuY3Rpb24gcmVhZFN3aXRjaE1ldGFkYXRhKFxuICBjb250ZXh0OiBHcmFwaEV4ZWN1dGlvbkNvbnRleHRcbik6IFN3aXRjaE5vZGVNZXRhZGF0YSB7XG4gIGNvbnN0IG1ldGEgPSBjb250ZXh0Lm5vZGUuZ3JhcGg/Lm1ldGFkYXRhIGFzXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHwgdW5kZWZpbmVkO1xuICBpZiAoIW1ldGEpIHJldHVybiB7IGNhc2VzOiBbXSwgZGVmYXVsdFBvcnQ6IFwiZGVmYXVsdFwiLCBoYXNEZWZhdWx0OiBmYWxzZSB9O1xuICBjb25zdCBzd2l0Y2hNZXRhID0gbWV0YVtcInN3aXRjaFwiXSBhcyBTd2l0Y2hOb2RlTWV0YWRhdGEgfCB1bmRlZmluZWQ7XG4gIGlmICghc3dpdGNoTWV0YSB8fCAhQXJyYXkuaXNBcnJheShzd2l0Y2hNZXRhLmNhc2VzKSkge1xuICAgIHJldHVybiB7IGNhc2VzOiBbXSwgZGVmYXVsdFBvcnQ6IFwiZGVmYXVsdFwiLCBoYXNEZWZhdWx0OiBmYWxzZSB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgY2FzZXM6IHN3aXRjaE1ldGEuY2FzZXMsXG4gICAgZGVmYXVsdFBvcnQ6IHN3aXRjaE1ldGEuZGVmYXVsdFBvcnQgPz8gXCJkZWZhdWx0XCIsXG4gICAgaGFzRGVmYXVsdDogc3dpdGNoTWV0YS5oYXNEZWZhdWx0ID09PSB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIERldGVjdHMgd2hldGhlciBhIGNvbmRpdGlvbiBpcyBhIGBDb2RlQ29uZGl0aW9uYCAoaGFzIGB0eXBlOiBcImNvZGVcImApLlxuICovXG5mdW5jdGlvbiBpc0NvZGVDb25kaXRpb24oY29uZDogU3dpdGNoQ2FzZUNvbmRpdGlvbik6IGNvbmQgaXMgQ29kZUNvbmRpdGlvbiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGNvbmQgPT09IFwib2JqZWN0XCIgJiZcbiAgICBjb25kICE9PSBudWxsICYmXG4gICAgXCJ0eXBlXCIgaW4gY29uZCAmJlxuICAgIGNvbmQudHlwZSA9PT0gXCJjb2RlXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHdoZXRoZXIgYSBjb25kaXRpb24gaXMgYSBgQ29uZGl0aW9uRXhwcmVzc2lvbmAgKGhhcyBgb3BgIGZpZWxkKS5cbiAqL1xuZnVuY3Rpb24gaXNDb25kaXRpb25FeHByZXNzaW9uKFxuICBjb25kOiBTd2l0Y2hDYXNlQ29uZGl0aW9uXG4pOiBjb25kIGlzIENvbmRpdGlvbkV4cHJlc3Npb24ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBjb25kID09PSBcIm9iamVjdFwiICYmXG4gICAgY29uZCAhPT0gbnVsbCAmJlxuICAgIFwib3BcIiBpbiBjb25kICYmXG4gICAgdHlwZW9mIGNvbmQub3AgPT09IFwic3RyaW5nXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRvciBmb3IgYGNvcmUuZmxvdy5zd2l0Y2hgIG5vZGVzLlxuICpcbiAqIEV2YWx1YXRlcyBlYWNoIGNhc2UncyBjb25kaXRpb24gaW4gb3JkZXIgYW5kIHJvdXRlcyB0aGUgaW5wdXQgdG8gdGhlXG4gKiBmaXJzdCBtYXRjaGluZyBjYXNlJ3Mgb3V0cHV0IHBvcnQuIFdoZW4gbm8gY2FzZSBtYXRjaGVzOlxuICogLSBJZiBgaGFzRGVmYXVsdGAgaXMgYHRydWVgLCByb3V0ZXMgdG8gdGhlIGBkZWZhdWx0YCBvdXRwdXQgcG9ydC5cbiAqIC0gSWYgYGhhc0RlZmF1bHRgIGlzIGBmYWxzZWAgKHRoZSBkZWZhdWx0KSwgdGhyb3dzIGBHUkFQSF9TV0lUQ0hfTk9fTUFUQ0hgLlxuICpcbiAqIENvbmRpdGlvbiBldmFsdWF0aW9uOlxuICogLSBgQ29uZGl0aW9uRXhwcmVzc2lvbmAg4oCUIGV2YWx1YXRlZCB2aWEge0BsaW5rIENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3J9LlxuICogLSBgQ29kZUNvbmRpdGlvbmAg4oCUIGV2YWx1YXRlZCB2aWEgdGhlIHBsdWdnYWJsZSB7QGxpbmsgQ29kZVNhbmRib3hFdmFsdWF0b3J9XG4gKiAgIGZyb20gdGhlIGVuZ2luZSdzIGNvbmZpZy4gVGhyb3dzIGBHUkFQSF9DT0RFX1NBTkRCT1hfTk9UX0NPTkZJR1VSRURgXG4gKiAgIHdoZW4gbm8gZXZhbHVhdG9yIGlzIHJlZ2lzdGVyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTd2l0Y2hHcmFwaE5vZGVFeGVjdXRvciBpbXBsZW1lbnRzIEdyYXBoTm9kZUV4ZWN1dG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBleHByZXNzaW9uRXZhbHVhdG9yID0gbmV3IENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3IoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZT86IHsgY29kZVNhbmRib3hFdmFsdWF0b3I/OiBDb2RlU2FuZGJveEV2YWx1YXRvciB9XG4gICkge31cblxuICBhc3luYyBleGVjdXRlKFxuICAgIGlucHV0OiBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbiAgICBjb250ZXh0OiBHcmFwaEV4ZWN1dGlvbkNvbnRleHRcbiAgKTogUHJvbWlzZTxHcmFwaEV4ZWN1dGlvblZhbHVlcz4ge1xuICAgIGNvbnN0IG1ldGEgPSByZWFkU3dpdGNoTWV0YWRhdGEoY29udGV4dCk7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0W1widmFsdWVcIl0gPz8gaW5wdXQ7XG5cbiAgICBmb3IgKGNvbnN0IHN3aXRjaENhc2Ugb2YgbWV0YS5jYXNlcykge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGF3YWl0IHRoaXMuZXZhbHVhdGVDb25kaXRpb24oXG4gICAgICAgIHN3aXRjaENhc2UuY29uZGl0aW9uLFxuICAgICAgICBpbnB1dFZhbHVlLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgY29udGV4dFxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB7IFtzd2l0Y2hDYXNlLm91dHB1dFBvcnRdOiBpbnB1dFZhbHVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm8gY2FzZSBtYXRjaGVkIOKAlCByb3V0ZSB0byB0aGUgZGVmYXVsdCBwb3J0IHdoZW4gaXQgaXMgZW5hYmxlZC5cbiAgICBpZiAobWV0YS5oYXNEZWZhdWx0ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhFeGVjdXRpb25FcnJvcihcbiAgICAgICAgXCJObyBzd2l0Y2ggY2FzZSBtYXRjaGVkIGFuZCBkZWZhdWx0IHBvcnQgaXMgbm90IGVuYWJsZWRcIixcbiAgICAgICAgXCJHUkFQSF9TV0lUQ0hfTk9fTUFUQ0hcIixcbiAgICAgICAgeyBjYXNlczogbWV0YS5jYXNlcy5tYXAoKGMpID0+IGMuaWQpIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRQb3J0ID0gbWV0YS5kZWZhdWx0UG9ydCA/PyBcImRlZmF1bHRcIjtcbiAgICByZXR1cm4geyBbZGVmYXVsdFBvcnRdOiBpbnB1dFZhbHVlIH07XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIGEgc2luZ2xlIHN3aXRjaCBjYXNlIGNvbmRpdGlvbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXZhbHVhdGVDb25kaXRpb24oXG4gICAgY29uZGl0aW9uOiBTd2l0Y2hDYXNlQ29uZGl0aW9uLFxuICAgIGlucHV0VmFsdWU6IHVua25vd24sXG4gICAgZnVsbElucHV0OiBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbiAgICBjb250ZXh0OiBHcmFwaEV4ZWN1dGlvbkNvbnRleHRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGlzQ29kZUNvbmRpdGlvbihjb25kaXRpb24pKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZUNvZGVDb25kaXRpb24oY29uZGl0aW9uLCBmdWxsSW5wdXQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChpc0NvbmRpdGlvbkV4cHJlc3Npb24oY29uZGl0aW9uKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbkV2YWx1YXRvci5ldmFsdWF0ZShjb25kaXRpb24sIGlucHV0VmFsdWUpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBHcmFwaEV4ZWN1dGlvbkVycm9yKFxuICAgICAgXCJVbmtub3duIHN3aXRjaCBjYXNlIGNvbmRpdGlvbiB0eXBlIOKAlCBtdXN0IGJlIENvbmRpdGlvbkV4cHJlc3Npb24gKG9wKSBvciBDb2RlQ29uZGl0aW9uICh0eXBlOiAnY29kZScpXCIsXG4gICAgICBcIkdSQVBIX1VOS05PV05fU1dJVENIX0NPTkRJVElPTlwiLFxuICAgICAgeyBjb25kaXRpb24gfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIGEgY29kZSBjb25kaXRpb24gdmlhIHRoZSBwbHVnZ2FibGUgc2FuZGJveCBldmFsdWF0b3IuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV2YWx1YXRlQ29kZUNvbmRpdGlvbihcbiAgICBjb25kaXRpb246IENvZGVDb25kaXRpb24sXG4gICAgaW5wdXQ6IEdyYXBoRXhlY3V0aW9uVmFsdWVzLFxuICAgIGNvbnRleHQ6IEdyYXBoRXhlY3V0aW9uQ29udGV4dFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBldmFsdWF0b3IgPSB0aGlzLmVuZ2luZT8uY29kZVNhbmRib3hFdmFsdWF0b3I7XG4gICAgaWYgKCFldmFsdWF0b3IpIHtcbiAgICAgIHRocm93IG5ldyBHcmFwaEV4ZWN1dGlvbkVycm9yKFxuICAgICAgICBcIkNvZGUgY29uZGl0aW9ucyByZXF1aXJlIGEgQ29kZVNhbmRib3hFdmFsdWF0b3IgdG8gYmUgcmVnaXN0ZXJlZCBpbiBHcmFwaEV4ZWN1dGlvbkVuZ2luZUNvbmZpZy5jb2RlU2FuZGJveEV2YWx1YXRvclwiLFxuICAgICAgICBcIkdSQVBIX0NPREVfU0FOREJPWF9OT1RfQ09ORklHVVJFRFwiLFxuICAgICAgICB7IGNvZGU6IGNvbmRpdGlvbi5jb2RlIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgY29udGV4dC5sb2coYEV2YWx1YXRpbmcgY29kZSBjb25kaXRpb25gLCB7XG4gICAgICBsYW5ndWFnZTogY29uZGl0aW9uLmxhbmd1YWdlID8/IFwiamF2YXNjcmlwdFwiLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbWQgPSBjb250ZXh0Lm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXZhbHVhdG9yLmV2YWx1YXRlKHtcbiAgICAgIGNvZGU6IGNvbmRpdGlvbi5jb2RlLFxuICAgICAgbGFuZ3VhZ2U6IGNvbmRpdGlvbi5sYW5ndWFnZSxcbiAgICAgIGlucHV0LFxuICAgICAgdmFyczogKG1kPy52YXJzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSA/PyB1bmRlZmluZWQsXG4gICAgICBpdGVtOiBtZD8uaXRlbSxcbiAgICAgIGluZGV4OiBtZD8uaW5kZXggYXMgbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgICAgbm9kZXM6XG4gICAgICAgIChtZD8ubm9kZXMgYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkKSA/P1xuICAgICAgICB1bmRlZmluZWQsXG4gICAgICBsb2dnZXI6IGNvbnRleHQubG9nZ2VyIGFzIHVua25vd24gYXNcbiAgICAgICAgfCBpbXBvcnQoXCIuL0NvZGVTYW5kYm94RXZhbHVhdG9yXCIpLlNhbmRib3hMb2dnZXJcbiAgICAgICAgfCB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gISFyZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
|