@fjall/util 0.89.5 → 0.89.6
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/LICENSE +50 -21
- package/README.md +22 -0
- package/dist/.minified +1 -0
- package/dist/Config.d.ts +76 -0
- package/dist/Config.js +1 -0
- package/dist/aws/CloudFormationFailureAnalyser.d.ts +32 -0
- package/dist/aws/CloudFormationFailureAnalyser.js +1 -0
- package/dist/aws/cloudformationTypes.d.ts +17 -0
- package/dist/aws/cloudformationTypes.js +1 -0
- package/dist/aws/errors.d.ts +26 -0
- package/dist/aws/errors.js +1 -0
- package/dist/aws/index.d.ts +3 -0
- package/dist/aws/index.js +1 -0
- package/dist/caseConversion.js +1 -0
- package/dist/constructMap.d.ts +80 -0
- package/dist/constructMap.js +1 -0
- package/dist/{src/domainExports.d.ts → domainExports.d.ts} +3 -1
- package/dist/domainExports.js +1 -0
- package/dist/environments.d.ts +23 -0
- package/dist/environments.js +1 -0
- package/dist/errorUtils.js +1 -0
- package/dist/fsHelpers.d.ts +4 -0
- package/dist/fsHelpers.js +1 -0
- package/dist/gitRemoteParser.d.ts +8 -0
- package/dist/gitRemoteParser.js +1 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.js +1 -18
- package/dist/insights/computePatternFingerprint.d.ts +27 -0
- package/dist/insights/computePatternFingerprint.js +1 -0
- package/dist/logger.d.ts +32 -0
- package/dist/logger.js +2 -0
- package/dist/regions.d.ts +8 -0
- package/dist/regions.js +1 -0
- package/dist/resourceCategorisation.d.ts +28 -0
- package/dist/resourceCategorisation.js +1 -0
- package/dist/securityHelpers.d.ts +38 -0
- package/dist/securityHelpers.js +1 -0
- package/dist/singleton.d.ts +2 -0
- package/dist/singleton.js +1 -0
- package/dist/sleep.d.ts +4 -0
- package/dist/sleep.js +1 -0
- package/dist/targets.d.ts +57 -0
- package/dist/targets.js +1 -0
- package/package.json +55 -8
- package/dist/src/Config.d.ts +0 -114
- package/dist/src/Config.js +0 -276
- package/dist/src/caseConversion.js +0 -59
- package/dist/src/domainExports.js +0 -18
- package/dist/src/errorUtils.js +0 -69
- package/dist/src/index.d.ts +0 -5
- package/dist/src/index.js +0 -37
- package/dist/src/logger.d.ts +0 -12
- package/dist/src/logger.js +0 -36
- /package/dist/{src/caseConversion.d.ts → caseConversion.d.ts} +0 -0
- /package/dist/{src/errorUtils.d.ts → errorUtils.d.ts} +0 -0
package/dist/src/Config.js
DELETED
|
@@ -1,276 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Config = void 0;
|
|
4
|
-
const fs = require("fs");
|
|
5
|
-
const path = require("path");
|
|
6
|
-
const zod_1 = require("zod");
|
|
7
|
-
const logger_js_1 = require("./logger.js");
|
|
8
|
-
/**
|
|
9
|
-
* Maximum depth for searching up the directory tree for config files.
|
|
10
|
-
* Prevents infinite loops when traversing directories.
|
|
11
|
-
*/
|
|
12
|
-
const CONFIG_SEARCH_MAX_DEPTH = 10;
|
|
13
|
-
// Per-app config schemas
|
|
14
|
-
const DeployStageSchema = zod_1.z
|
|
15
|
-
.object({
|
|
16
|
-
account: zod_1.z.string(),
|
|
17
|
-
regions: zod_1.z.array(zod_1.z.string()).min(1)
|
|
18
|
-
})
|
|
19
|
-
.strict();
|
|
20
|
-
const DomainConfigSchema = zod_1.z
|
|
21
|
-
.object({
|
|
22
|
-
name: zod_1.z.string(),
|
|
23
|
-
type: zod_1.z.enum(["apex", "delegated"]),
|
|
24
|
-
parentDomain: zod_1.z.string().optional(),
|
|
25
|
-
account: zod_1.z.string().optional()
|
|
26
|
-
})
|
|
27
|
-
.strict();
|
|
28
|
-
const RootConfigSchema = zod_1.z
|
|
29
|
-
.object({
|
|
30
|
-
version: zod_1.z.number().optional(),
|
|
31
|
-
generatorVersion: zod_1.z.string().optional(),
|
|
32
|
-
deploy: zod_1.z.record(zod_1.z.string(), DeployStageSchema).optional(),
|
|
33
|
-
activeStage: zod_1.z.string().optional(),
|
|
34
|
-
domains: zod_1.z.array(DomainConfigSchema).optional()
|
|
35
|
-
})
|
|
36
|
-
.strict();
|
|
37
|
-
/**
|
|
38
|
-
* The current base-version of any newly created config file
|
|
39
|
-
*/
|
|
40
|
-
const BASE_CONFIG_VERSION = 0.1;
|
|
41
|
-
/**
|
|
42
|
-
* Config class for loading and saving per-app fjall-config.json files.
|
|
43
|
-
* Each app has its own config at fjall/<app>/fjall-config.json.
|
|
44
|
-
* Stores deploy mapping, active stage, domains, and generator version.
|
|
45
|
-
* Org-level config (accounts, regions, OIDC) is served by OrgConfigClient from the API.
|
|
46
|
-
*/
|
|
47
|
-
class Config {
|
|
48
|
-
constructor(rootConfig, configPath) {
|
|
49
|
-
this.configPath = null;
|
|
50
|
-
this.rootConfig = rootConfig ?? {
|
|
51
|
-
version: BASE_CONFIG_VERSION
|
|
52
|
-
};
|
|
53
|
-
this.configPath = configPath ?? null;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Find the fjall directory by walking up the directory tree
|
|
57
|
-
*/
|
|
58
|
-
static findFjallDirectory() {
|
|
59
|
-
let currentDir = process.cwd();
|
|
60
|
-
for (let i = 0; i < CONFIG_SEARCH_MAX_DEPTH; i++) {
|
|
61
|
-
const fjallDir = path.join(currentDir, "fjall");
|
|
62
|
-
if (fs.existsSync(fjallDir) && fs.statSync(fjallDir).isDirectory()) {
|
|
63
|
-
return fjallDir;
|
|
64
|
-
}
|
|
65
|
-
const parentDir = path.dirname(currentDir);
|
|
66
|
-
if (parentDir === currentDir)
|
|
67
|
-
break;
|
|
68
|
-
currentDir = parentDir;
|
|
69
|
-
}
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Find the config directory for a specific app or the legacy root config.
|
|
74
|
-
* When appName is provided, looks for fjall/<appName>/fjall-config.json.
|
|
75
|
-
* When omitted, falls back to legacy fjall/fjall-config.json or direct fjall-config.json.
|
|
76
|
-
*/
|
|
77
|
-
static findConfigDirectory(appName) {
|
|
78
|
-
if (appName) {
|
|
79
|
-
if (appName !== path.basename(appName))
|
|
80
|
-
return null;
|
|
81
|
-
const fjallDir = Config.findFjallDirectory();
|
|
82
|
-
if (!fjallDir)
|
|
83
|
-
return null;
|
|
84
|
-
const appDir = path.join(fjallDir, appName);
|
|
85
|
-
const configFile = path.join(appDir, "fjall-config.json");
|
|
86
|
-
if (fs.existsSync(configFile)) {
|
|
87
|
-
return appDir;
|
|
88
|
-
}
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
// Legacy: look for fjall/fjall-config.json or direct fjall-config.json
|
|
92
|
-
let currentDir = process.cwd();
|
|
93
|
-
for (let i = 0; i < CONFIG_SEARCH_MAX_DEPTH; i++) {
|
|
94
|
-
const fjallDir = path.join(currentDir, "fjall");
|
|
95
|
-
const configFile = path.join(fjallDir, "fjall-config.json");
|
|
96
|
-
if (fs.existsSync(configFile)) {
|
|
97
|
-
return fjallDir;
|
|
98
|
-
}
|
|
99
|
-
const directConfigFile = path.join(currentDir, "fjall-config.json");
|
|
100
|
-
if (fs.existsSync(directConfigFile)) {
|
|
101
|
-
return currentDir;
|
|
102
|
-
}
|
|
103
|
-
const parentDir = path.dirname(currentDir);
|
|
104
|
-
if (parentDir === currentDir)
|
|
105
|
-
break;
|
|
106
|
-
currentDir = parentDir;
|
|
107
|
-
}
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Load config file into memory as a raw JSON string
|
|
112
|
-
*/
|
|
113
|
-
static loadConfigFile(configFile) {
|
|
114
|
-
try {
|
|
115
|
-
fs.accessSync(configFile, fs.constants.R_OK | fs.constants.W_OK);
|
|
116
|
-
return fs.readFileSync(configFile, { encoding: "utf8" });
|
|
117
|
-
}
|
|
118
|
-
catch (err) {
|
|
119
|
-
logger_js_1.logger.debug("Config", "Config file not accessible", {
|
|
120
|
-
file: configFile,
|
|
121
|
-
error: err instanceof Error ? err.message : String(err)
|
|
122
|
-
});
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Load configuration from file.
|
|
128
|
-
* @param appName - Optional app name to load config for a specific app
|
|
129
|
-
*/
|
|
130
|
-
static loadConfig(appName) {
|
|
131
|
-
const configDir = Config.findConfigDirectory(appName);
|
|
132
|
-
if (!configDir) {
|
|
133
|
-
return new Config();
|
|
134
|
-
}
|
|
135
|
-
const configFilePath = path.join(configDir, "fjall-config.json");
|
|
136
|
-
const rootConfigJson = Config.loadConfigFile(configFilePath);
|
|
137
|
-
let rootConfig;
|
|
138
|
-
if (rootConfigJson) {
|
|
139
|
-
try {
|
|
140
|
-
rootConfig = RootConfigSchema.parse(JSON.parse(rootConfigJson));
|
|
141
|
-
}
|
|
142
|
-
catch (err) {
|
|
143
|
-
throw Config.formatZodError(err, "fjall-config.json");
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return new Config(rootConfig, configFilePath);
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Format a Zod error into a readable error message
|
|
150
|
-
*/
|
|
151
|
-
static formatZodError(err, fileName) {
|
|
152
|
-
if (err instanceof zod_1.z.ZodError && err.issues.length > 0) {
|
|
153
|
-
const issueDetails = err.issues
|
|
154
|
-
.map((issue) => `${issue.path.join(".")}: ${issue.message}`)
|
|
155
|
-
.join("; ");
|
|
156
|
-
return new Error(`Failed to parse ${fileName}: ${issueDetails}`);
|
|
157
|
-
}
|
|
158
|
-
const rawMessage = err instanceof Error ? err.message : String(err);
|
|
159
|
-
const message = rawMessage.replace(/\n/g, " ").substring(0, 500);
|
|
160
|
-
return new Error(`Failed to parse ${fileName}: ${message}`);
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Save configuration to file
|
|
164
|
-
*/
|
|
165
|
-
saveConfig(appName) {
|
|
166
|
-
let targetPath = this.configPath;
|
|
167
|
-
if (!targetPath) {
|
|
168
|
-
if (appName) {
|
|
169
|
-
if (appName !== path.basename(appName)) {
|
|
170
|
-
throw new Error(`Invalid app name: ${appName}`);
|
|
171
|
-
}
|
|
172
|
-
const fjallDir = Config.findFjallDirectory() || path.join(process.cwd(), "fjall");
|
|
173
|
-
const appDir = path.join(fjallDir, appName);
|
|
174
|
-
targetPath = path.join(appDir, "fjall-config.json");
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
const configDir = Config.findConfigDirectory() || path.join(process.cwd(), "fjall");
|
|
178
|
-
targetPath = path.join(configDir, "fjall-config.json");
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
const dir = path.dirname(targetPath);
|
|
182
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
183
|
-
const rootJsonString = JSON.stringify(this.rootConfig, null, 2);
|
|
184
|
-
const tmpPath = `${targetPath}.tmp`;
|
|
185
|
-
fs.writeFileSync(tmpPath, rootJsonString, { mode: 0o600 });
|
|
186
|
-
fs.renameSync(tmpPath, targetPath);
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Get the fjall config directory path
|
|
190
|
-
*/
|
|
191
|
-
static getConfigDirectory(appName) {
|
|
192
|
-
return Config.findConfigDirectory(appName);
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Discover all app names by scanning fjall/<app>/fjall-config.json
|
|
196
|
-
*/
|
|
197
|
-
static discoverApps() {
|
|
198
|
-
const fjallDir = Config.findFjallDirectory();
|
|
199
|
-
if (!fjallDir)
|
|
200
|
-
return [];
|
|
201
|
-
try {
|
|
202
|
-
const entries = fs.readdirSync(fjallDir, { withFileTypes: true });
|
|
203
|
-
const apps = [];
|
|
204
|
-
for (const entry of entries) {
|
|
205
|
-
if (!entry.isDirectory())
|
|
206
|
-
continue;
|
|
207
|
-
const configFile = path.join(fjallDir, entry.name, "fjall-config.json");
|
|
208
|
-
if (fs.existsSync(configFile)) {
|
|
209
|
-
apps.push(entry.name);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
return apps.sort();
|
|
213
|
-
}
|
|
214
|
-
catch (err) {
|
|
215
|
-
logger_js_1.logger.debug("Config", "Failed to discover apps", {
|
|
216
|
-
error: err instanceof Error ? err.message : String(err)
|
|
217
|
-
});
|
|
218
|
-
return [];
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
// Deploy stage management
|
|
222
|
-
getDeployStages() {
|
|
223
|
-
return this.rootConfig.deploy ?? {};
|
|
224
|
-
}
|
|
225
|
-
getDeployStage(name) {
|
|
226
|
-
return this.rootConfig.deploy?.[name];
|
|
227
|
-
}
|
|
228
|
-
setDeployStage(name, stage) {
|
|
229
|
-
if (!this.rootConfig.deploy) {
|
|
230
|
-
this.rootConfig.deploy = {};
|
|
231
|
-
}
|
|
232
|
-
this.rootConfig.deploy[name] = stage;
|
|
233
|
-
}
|
|
234
|
-
removeDeployStage(name) {
|
|
235
|
-
if (!this.rootConfig.deploy?.[name])
|
|
236
|
-
return false;
|
|
237
|
-
delete this.rootConfig.deploy[name];
|
|
238
|
-
if (this.rootConfig.activeStage === name) {
|
|
239
|
-
this.rootConfig.activeStage = undefined;
|
|
240
|
-
}
|
|
241
|
-
return true;
|
|
242
|
-
}
|
|
243
|
-
getActiveStage() {
|
|
244
|
-
return this.rootConfig.activeStage;
|
|
245
|
-
}
|
|
246
|
-
setActiveStage(name) {
|
|
247
|
-
this.rootConfig.activeStage = name;
|
|
248
|
-
}
|
|
249
|
-
// Domain management
|
|
250
|
-
getDomains() {
|
|
251
|
-
return this.rootConfig.domains ?? [];
|
|
252
|
-
}
|
|
253
|
-
setDomains(domains) {
|
|
254
|
-
this.rootConfig.domains = domains;
|
|
255
|
-
}
|
|
256
|
-
addDomain(domain) {
|
|
257
|
-
if (!this.rootConfig.domains) {
|
|
258
|
-
this.rootConfig.domains = [];
|
|
259
|
-
}
|
|
260
|
-
this.rootConfig.domains.push(domain);
|
|
261
|
-
}
|
|
262
|
-
getDomain(name) {
|
|
263
|
-
return this.rootConfig.domains?.find((d) => d.name.toLowerCase() === name.toLowerCase());
|
|
264
|
-
}
|
|
265
|
-
removeDomain(name) {
|
|
266
|
-
if (!this.rootConfig.domains)
|
|
267
|
-
return false;
|
|
268
|
-
const index = this.rootConfig.domains.findIndex((d) => d.name.toLowerCase() === name.toLowerCase());
|
|
269
|
-
if (index === -1)
|
|
270
|
-
return false;
|
|
271
|
-
this.rootConfig.domains.splice(index, 1);
|
|
272
|
-
return true;
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
exports.Config = Config;
|
|
276
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZCQUF3QjtBQUN4QiwyQ0FBcUM7QUFFckM7OztHQUdHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUEyQm5DLHlCQUF5QjtBQUN6QixNQUFNLGlCQUFpQixHQUFHLE9BQUM7S0FDeEIsTUFBTSxDQUFDO0lBQ04sT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDbkIsT0FBTyxFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFJWixNQUFNLGtCQUFrQixHQUFHLE9BQUM7S0FDekIsTUFBTSxDQUFDO0lBQ04sSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDaEIsSUFBSSxFQUFFLE9BQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbkMsWUFBWSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbkMsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDL0IsQ0FBQztLQUNELE1BQU0sRUFBRSxDQUFDO0FBSVosTUFBTSxnQkFBZ0IsR0FBRyxPQUFDO0tBQ3ZCLE1BQU0sQ0FBQztJQUNOLE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlCLGdCQUFnQixFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLGlC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Q0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNuRCxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQzdDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDbkQsQ0FBQztRQUNGLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUExUUQsd0JBMFFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2VyLmpzXCI7XG5cbi8qKlxuICogTWF4aW11bSBkZXB0aCBmb3Igc2VhcmNoaW5nIHVwIHRoZSBkaXJlY3RvcnkgdHJlZSBmb3IgY29uZmlnIGZpbGVzLlxuICogUHJldmVudHMgaW5maW5pdGUgbG9vcHMgd2hlbiB0cmF2ZXJzaW5nIGRpcmVjdG9yaWVzLlxuICovXG5jb25zdCBDT05GSUdfU0VBUkNIX01BWF9ERVBUSCA9IDEwO1xuXG5leHBvcnQgdHlwZSBQcm92aWRlckFjY291bnQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgbWFuYWdlZD86IGJvb2xlYW47XG59O1xuXG4vLyBTdGFuZGFsb25lIHR5cGVzIOKAlCB1c2VkIGJ5IFByb2ZpbGVSZXNvbHZlciBhbmQgYXV0aCBzeXN0ZW0sIG5vdCBpbiBjb25maWcgZmlsZVxuZXhwb3J0IHR5cGUgUHJvZmlsZSA9IHtcbiAgdHlwZTogXCJzc29cIiB8IFwib2lkY1wiO1xuICByZWdpb246IHN0cmluZztcbiAgc3NvQWNjb3VudElkPzogc3RyaW5nO1xuICBzc29Sb2xlTmFtZT86IHN0cmluZztcbiAgc3NvU2Vzc2lvbj86IHN0cmluZztcbiAgb2lkY1JvbGVBcm4/OiBzdHJpbmc7XG4gIG9pZGNQcm92aWRlckFybj86IHN0cmluZztcbiAgcm9sZUFybj86IHN0cmluZztcbiAgcm9sZVNlc3Npb25OYW1lPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU1NPU2Vzc2lvbiA9IHtcbiAgc3NvUmVnaW9uOiBzdHJpbmc7XG4gIHNzb1N0YXJ0VXJsOiBzdHJpbmc7XG59O1xuXG4vLyBQZXItYXBwIGNvbmZpZyBzY2hlbWFzXG5jb25zdCBEZXBsb3lTdGFnZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgYWNjb3VudDogei5zdHJpbmcoKSxcbiAgICByZWdpb25zOiB6LmFycmF5KHouc3RyaW5nKCkpLm1pbigxKVxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmV4cG9ydCB0eXBlIERlcGxveVN0YWdlID0gei5pbmZlcjx0eXBlb2YgRGVwbG95U3RhZ2VTY2hlbWE+O1xuXG5jb25zdCBEb21haW5Db25maWdTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgdHlwZTogei5lbnVtKFtcImFwZXhcIiwgXCJkZWxlZ2F0ZWRcIl0pLFxuICAgIHBhcmVudERvbWFpbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGFjY291bnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmV4cG9ydCB0eXBlIERvbWFpbkNvbmZpZyA9IHouaW5mZXI8dHlwZW9mIERvbWFpbkNvbmZpZ1NjaGVtYT47XG5cbmNvbnN0IFJvb3RDb25maWdTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHZlcnNpb246IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBnZW5lcmF0b3JWZXJzaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGVwbG95OiB6LnJlY29yZCh6LnN0cmluZygpLCBEZXBsb3lTdGFnZVNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICBhY3RpdmVTdGFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRvbWFpbnM6IHouYXJyYXkoRG9tYWluQ29uZmlnU2NoZW1hKS5vcHRpb25hbCgpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxudHlwZSBSb290Q29uZmlnID0gei5pbmZlcjx0eXBlb2YgUm9vdENvbmZpZ1NjaGVtYT47XG5cbi8qKlxuICogVGhlIGN1cnJlbnQgYmFzZS12ZXJzaW9uIG9mIGFueSBuZXdseSBjcmVhdGVkIGNvbmZpZyBmaWxlXG4gKi9cbmNvbnN0IEJBU0VfQ09ORklHX1ZFUlNJT04gPSAwLjE7XG5cbi8qKlxuICogQ29uZmlnIGNsYXNzIGZvciBsb2FkaW5nIGFuZCBzYXZpbmcgcGVyLWFwcCBmamFsbC1jb25maWcuanNvbiBmaWxlcy5cbiAqIEVhY2ggYXBwIGhhcyBpdHMgb3duIGNvbmZpZyBhdCBmamFsbC88YXBwPi9mamFsbC1jb25maWcuanNvbi5cbiAqIFN0b3JlcyBkZXBsb3kgbWFwcGluZywgYWN0aXZlIHN0YWdlLCBkb21haW5zLCBhbmQgZ2VuZXJhdG9yIHZlcnNpb24uXG4gKiBPcmctbGV2ZWwgY29uZmlnIChhY2NvdW50cywgcmVnaW9ucywgT0lEQykgaXMgc2VydmVkIGJ5IE9yZ0NvbmZpZ0NsaWVudCBmcm9tIHRoZSBBUEkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25maWcge1xuICByb290Q29uZmlnOiBSb290Q29uZmlnO1xuICBwcml2YXRlIGNvbmZpZ1BhdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHJvb3RDb25maWc/OiBSb290Q29uZmlnLCBjb25maWdQYXRoPzogc3RyaW5nKSB7XG4gICAgdGhpcy5yb290Q29uZmlnID0gcm9vdENvbmZpZyA/PyB7XG4gICAgICB2ZXJzaW9uOiBCQVNFX0NPTkZJR19WRVJTSU9OXG4gICAgfTtcbiAgICB0aGlzLmNvbmZpZ1BhdGggPSBjb25maWdQYXRoID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgZmphbGwgZGlyZWN0b3J5IGJ5IHdhbGtpbmcgdXAgdGhlIGRpcmVjdG9yeSB0cmVlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBmaW5kRmphbGxEaXJlY3RvcnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgbGV0IGN1cnJlbnREaXIgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBDT05GSUdfU0VBUkNIX01BWF9ERVBUSDsgaSsrKSB7XG4gICAgICBjb25zdCBmamFsbERpciA9IHBhdGguam9pbihjdXJyZW50RGlyLCBcImZqYWxsXCIpO1xuXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhmamFsbERpcikgJiYgZnMuc3RhdFN5bmMoZmphbGxEaXIpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgcmV0dXJuIGZqYWxsRGlyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJlbnREaXIgPSBwYXRoLmRpcm5hbWUoY3VycmVudERpcik7XG4gICAgICBpZiAocGFyZW50RGlyID09PSBjdXJyZW50RGlyKSBicmVhaztcbiAgICAgIGN1cnJlbnREaXIgPSBwYXJlbnREaXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgY29uZmlnIGRpcmVjdG9yeSBmb3IgYSBzcGVjaWZpYyBhcHAgb3IgdGhlIGxlZ2FjeSByb290IGNvbmZpZy5cbiAgICogV2hlbiBhcHBOYW1lIGlzIHByb3ZpZGVkLCBsb29rcyBmb3IgZmphbGwvPGFwcE5hbWU+L2ZqYWxsLWNvbmZpZy5qc29uLlxuICAgKiBXaGVuIG9taXR0ZWQsIGZhbGxzIGJhY2sgdG8gbGVnYWN5IGZqYWxsL2ZqYWxsLWNvbmZpZy5qc29uIG9yIGRpcmVjdCBmamFsbC1jb25maWcuanNvbi5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZpbmRDb25maWdEaXJlY3RvcnkoYXBwTmFtZT86IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChhcHBOYW1lKSB7XG4gICAgICBpZiAoYXBwTmFtZSAhPT0gcGF0aC5iYXNlbmFtZShhcHBOYW1lKSkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IGZqYWxsRGlyID0gQ29uZmlnLmZpbmRGamFsbERpcmVjdG9yeSgpO1xuICAgICAgaWYgKCFmamFsbERpcikgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IGFwcERpciA9IHBhdGguam9pbihmamFsbERpciwgYXBwTmFtZSk7XG4gICAgICBjb25zdCBjb25maWdGaWxlID0gcGF0aC5qb2luKGFwcERpciwgXCJmamFsbC1jb25maWcuanNvblwiKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGUpKSB7XG4gICAgICAgIHJldHVybiBhcHBEaXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBMZWdhY3k6IGxvb2sgZm9yIGZqYWxsL2ZqYWxsLWNvbmZpZy5qc29uIG9yIGRpcmVjdCBmamFsbC1jb25maWcuanNvblxuICAgIGxldCBjdXJyZW50RGlyID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgQ09ORklHX1NFQVJDSF9NQVhfREVQVEg7IGkrKykge1xuICAgICAgY29uc3QgZmphbGxEaXIgPSBwYXRoLmpvaW4oY3VycmVudERpciwgXCJmamFsbFwiKTtcbiAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBwYXRoLmpvaW4oZmphbGxEaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIik7XG5cbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGUpKSB7XG4gICAgICAgIHJldHVybiBmamFsbERpcjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlyZWN0Q29uZmlnRmlsZSA9IHBhdGguam9pbihjdXJyZW50RGlyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpO1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZGlyZWN0Q29uZmlnRmlsZSkpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnREaXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgICAgIGlmIChwYXJlbnREaXIgPT09IGN1cnJlbnREaXIpIGJyZWFrO1xuICAgICAgY3VycmVudERpciA9IHBhcmVudERpcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGNvbmZpZyBmaWxlIGludG8gbWVtb3J5IGFzIGEgcmF3IEpTT04gc3RyaW5nXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBsb2FkQ29uZmlnRmlsZShjb25maWdGaWxlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgZnMuYWNjZXNzU3luYyhjb25maWdGaWxlLCBmcy5jb25zdGFudHMuUl9PSyB8IGZzLmNvbnN0YW50cy5XX09LKTtcbiAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoY29uZmlnRmlsZSwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJDb25maWdcIiwgXCJDb25maWcgZmlsZSBub3QgYWNjZXNzaWJsZVwiLCB7XG4gICAgICAgIGZpbGU6IGNvbmZpZ0ZpbGUsXG4gICAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycilcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIGZpbGUuXG4gICAqIEBwYXJhbSBhcHBOYW1lIC0gT3B0aW9uYWwgYXBwIG5hbWUgdG8gbG9hZCBjb25maWcgZm9yIGEgc3BlY2lmaWMgYXBwXG4gICAqL1xuICBzdGF0aWMgbG9hZENvbmZpZyhhcHBOYW1lPzogc3RyaW5nKTogQ29uZmlnIHtcbiAgICBjb25zdCBjb25maWdEaXIgPSBDb25maWcuZmluZENvbmZpZ0RpcmVjdG9yeShhcHBOYW1lKTtcbiAgICBpZiAoIWNvbmZpZ0Rpcikge1xuICAgICAgcmV0dXJuIG5ldyBDb25maWcoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbihjb25maWdEaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIik7XG4gICAgY29uc3Qgcm9vdENvbmZpZ0pzb24gPSBDb25maWcubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZVBhdGgpO1xuXG4gICAgbGV0IHJvb3RDb25maWc6IFJvb3RDb25maWcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAocm9vdENvbmZpZ0pzb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJvb3RDb25maWcgPSBSb290Q29uZmlnU2NoZW1hLnBhcnNlKEpTT04ucGFyc2Uocm9vdENvbmZpZ0pzb24pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBDb25maWcuZm9ybWF0Wm9kRXJyb3IoZXJyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgQ29uZmlnKHJvb3RDb25maWcsIGNvbmZpZ0ZpbGVQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgYSBab2QgZXJyb3IgaW50byBhIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2VcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZvcm1hdFpvZEVycm9yKGVycjogdW5rbm93biwgZmlsZU5hbWU6IHN0cmluZyk6IEVycm9yIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2Ygei5ab2RFcnJvciAmJiBlcnIuaXNzdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGlzc3VlRGV0YWlscyA9IGVyci5pc3N1ZXNcbiAgICAgICAgLm1hcCgoaXNzdWUpID0+IGAke2lzc3VlLnBhdGguam9pbihcIi5cIil9OiAke2lzc3VlLm1lc3NhZ2V9YClcbiAgICAgICAgLmpvaW4oXCI7IFwiKTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSAke2ZpbGVOYW1lfTogJHtpc3N1ZURldGFpbHN9YCk7XG4gICAgfVxuICAgIGNvbnN0IHJhd01lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgY29uc3QgbWVzc2FnZSA9IHJhd01lc3NhZ2UucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5zdWJzdHJpbmcoMCwgNTAwKTtcbiAgICByZXR1cm4gbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgJHtmaWxlTmFtZX06ICR7bWVzc2FnZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGNvbmZpZ3VyYXRpb24gdG8gZmlsZVxuICAgKi9cbiAgc2F2ZUNvbmZpZyhhcHBOYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IHRhcmdldFBhdGggPSB0aGlzLmNvbmZpZ1BhdGg7XG5cbiAgICBpZiAoIXRhcmdldFBhdGgpIHtcbiAgICAgIGlmIChhcHBOYW1lKSB7XG4gICAgICAgIGlmIChhcHBOYW1lICE9PSBwYXRoLmJhc2VuYW1lKGFwcE5hbWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFwcCBuYW1lOiAke2FwcE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmphbGxEaXIgPVxuICAgICAgICAgIENvbmZpZy5maW5kRmphbGxEaXJlY3RvcnkoKSB8fCBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJmamFsbFwiKTtcbiAgICAgICAgY29uc3QgYXBwRGlyID0gcGF0aC5qb2luKGZqYWxsRGlyLCBhcHBOYW1lKTtcbiAgICAgICAgdGFyZ2V0UGF0aCA9IHBhdGguam9pbihhcHBEaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb25maWdEaXIgPVxuICAgICAgICAgIENvbmZpZy5maW5kQ29uZmlnRGlyZWN0b3J5KCkgfHwgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiZmphbGxcIik7XG4gICAgICAgIHRhcmdldFBhdGggPSBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZSh0YXJnZXRQYXRoKTtcbiAgICBmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHJvb3RKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5yb290Q29uZmlnLCBudWxsLCAyKTtcbiAgICBjb25zdCB0bXBQYXRoID0gYCR7dGFyZ2V0UGF0aH0udG1wYDtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHRtcFBhdGgsIHJvb3RKc29uU3RyaW5nLCB7IG1vZGU6IDBvNjAwIH0pO1xuICAgIGZzLnJlbmFtZVN5bmModG1wUGF0aCwgdGFyZ2V0UGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmamFsbCBjb25maWcgZGlyZWN0b3J5IHBhdGhcbiAgICovXG4gIHN0YXRpYyBnZXRDb25maWdEaXJlY3RvcnkoYXBwTmFtZT86IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBDb25maWcuZmluZENvbmZpZ0RpcmVjdG9yeShhcHBOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjb3ZlciBhbGwgYXBwIG5hbWVzIGJ5IHNjYW5uaW5nIGZqYWxsLzxhcHA+L2ZqYWxsLWNvbmZpZy5qc29uXG4gICAqL1xuICBzdGF0aWMgZGlzY292ZXJBcHBzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBmamFsbERpciA9IENvbmZpZy5maW5kRmphbGxEaXJlY3RvcnkoKTtcbiAgICBpZiAoIWZqYWxsRGlyKSByZXR1cm4gW107XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZW50cmllcyA9IGZzLnJlYWRkaXJTeW5jKGZqYWxsRGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgICBjb25zdCBhcHBzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgaWYgKCFlbnRyeS5pc0RpcmVjdG9yeSgpKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbihmamFsbERpciwgZW50cnkubmFtZSwgXCJmamFsbC1jb25maWcuanNvblwiKTtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZSkpIHtcbiAgICAgICAgICBhcHBzLnB1c2goZW50cnkubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFwcHMuc29ydCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiQ29uZmlnXCIsIFwiRmFpbGVkIHRvIGRpc2NvdmVyIGFwcHNcIiwge1xuICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvLyBEZXBsb3kgc3RhZ2UgbWFuYWdlbWVudFxuXG4gIGdldERlcGxveVN0YWdlcygpOiBSZWNvcmQ8c3RyaW5nLCBEZXBsb3lTdGFnZT4ge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuZGVwbG95ID8/IHt9O1xuICB9XG5cbiAgZ2V0RGVwbG95U3RhZ2UobmFtZTogc3RyaW5nKTogRGVwbG95U3RhZ2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuZGVwbG95Py5bbmFtZV07XG4gIH1cblxuICBzZXREZXBsb3lTdGFnZShuYW1lOiBzdHJpbmcsIHN0YWdlOiBEZXBsb3lTdGFnZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLmRlcGxveSkge1xuICAgICAgdGhpcy5yb290Q29uZmlnLmRlcGxveSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJvb3RDb25maWcuZGVwbG95W25hbWVdID0gc3RhZ2U7XG4gIH1cblxuICByZW1vdmVEZXBsb3lTdGFnZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5kZXBsb3k/LltuYW1lXSkgcmV0dXJuIGZhbHNlO1xuICAgIGRlbGV0ZSB0aGlzLnJvb3RDb25maWcuZGVwbG95W25hbWVdO1xuXG4gICAgaWYgKHRoaXMucm9vdENvbmZpZy5hY3RpdmVTdGFnZSA9PT0gbmFtZSkge1xuICAgICAgdGhpcy5yb290Q29uZmlnLmFjdGl2ZVN0YWdlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldEFjdGl2ZVN0YWdlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5hY3RpdmVTdGFnZTtcbiAgfVxuXG4gIHNldEFjdGl2ZVN0YWdlKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucm9vdENvbmZpZy5hY3RpdmVTdGFnZSA9IG5hbWU7XG4gIH1cblxuICAvLyBEb21haW4gbWFuYWdlbWVudFxuXG4gIGdldERvbWFpbnMoKTogRG9tYWluQ29uZmlnW10ge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuZG9tYWlucyA/PyBbXTtcbiAgfVxuXG4gIHNldERvbWFpbnMoZG9tYWluczogRG9tYWluQ29uZmlnW10pOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RDb25maWcuZG9tYWlucyA9IGRvbWFpbnM7XG4gIH1cblxuICBhZGREb21haW4oZG9tYWluOiBEb21haW5Db25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5kb21haW5zKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcuZG9tYWlucyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnJvb3RDb25maWcuZG9tYWlucy5wdXNoKGRvbWFpbik7XG4gIH1cblxuICBnZXREb21haW4obmFtZTogc3RyaW5nKTogRG9tYWluQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLmRvbWFpbnM/LmZpbmQoXG4gICAgICAoZCkgPT4gZC5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cblxuICByZW1vdmVEb21haW4obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuZG9tYWlucykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yb290Q29uZmlnLmRvbWFpbnMuZmluZEluZGV4KFxuICAgICAgKGQpID0+IGQubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICApO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLnJvb3RDb25maWcuZG9tYWlucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Case Conversion Utilities
|
|
4
|
-
*
|
|
5
|
-
* Canonical implementations of string case conversion functions
|
|
6
|
-
* shared across the monorepo. All packages should import from
|
|
7
|
-
* @fjall/util rather than maintaining local copies.
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.toPascalCase = toPascalCase;
|
|
11
|
-
exports.toKebab = toKebab;
|
|
12
|
-
exports.toValidDatabaseName = toValidDatabaseName;
|
|
13
|
-
exports.capitalise = capitalise;
|
|
14
|
-
exports.getSafeZoneName = getSafeZoneName;
|
|
15
|
-
/**
|
|
16
|
-
* Convert hyphenated/underscored names to PascalCase.
|
|
17
|
-
* e.g., "my-app" -> "MyApp", "my_app" -> "MyApp"
|
|
18
|
-
*/
|
|
19
|
-
function toPascalCase(str) {
|
|
20
|
-
return str
|
|
21
|
-
.replace(/[-_](.)/g, (_, c) => c.toUpperCase())
|
|
22
|
-
.replace(/^./, (c) => c.toUpperCase());
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Convert any case (PascalCase, camelCase, kebab-case, snake_case) to kebab-case.
|
|
26
|
-
* Three-pass regex: split acronyms, split camel boundaries, replace separators.
|
|
27
|
-
* e.g., "MyApp" -> "my-app", "AWSLambda" -> "aws-lambda", "myApp" -> "my-app"
|
|
28
|
-
*/
|
|
29
|
-
function toKebab(str) {
|
|
30
|
-
return str
|
|
31
|
-
.replace(/([A-Z]+)([A-Z][a-z])/g, "$1-$2")
|
|
32
|
-
.replace(/([a-z\d])([A-Z])/g, "$1-$2")
|
|
33
|
-
.replace(/[\s_]+/g, "-")
|
|
34
|
-
.toLowerCase();
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Convert a name to a valid RDS database name (snake_case).
|
|
38
|
-
* RDS API allows letters, numbers, and underscores for PostgreSQL/MySQL DatabaseName.
|
|
39
|
-
* Hyphens are rejected, so convert them to underscores.
|
|
40
|
-
*/
|
|
41
|
-
function toValidDatabaseName(name) {
|
|
42
|
-
return toKebab(name).replace(/-/g, "_");
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Capitalise the first character of a string.
|
|
46
|
-
*/
|
|
47
|
-
function capitalise(str) {
|
|
48
|
-
if (str.length === 0)
|
|
49
|
-
return str;
|
|
50
|
-
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Strip dots from a zone name to produce a safe string for construct IDs.
|
|
54
|
-
* e.g., "example.com" -> "examplecom"
|
|
55
|
-
*/
|
|
56
|
-
function getSafeZoneName(zoneName) {
|
|
57
|
-
return zoneName.split(".").join("");
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZUNvbnZlcnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2FzZUNvbnZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7QUFNSCxvQ0FJQztBQU9ELDBCQU1DO0FBT0Qsa0RBRUM7QUFLRCxnQ0FHQztBQU1ELDBDQUVDO0FBOUNEOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxHQUFXO0lBQ3RDLE9BQU8sR0FBRztTQUNQLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEQsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixPQUFPLENBQUMsR0FBVztJQUNqQyxPQUFPLEdBQUc7U0FDUCxPQUFPLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxDQUFDO1NBQ3pDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUM7U0FDckMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUM7U0FDdkIsV0FBVyxFQUFFLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxJQUFZO0lBQzlDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLEdBQVc7SUFDcEMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUNqQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLFFBQWdCO0lBQzlDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2FzZSBDb252ZXJzaW9uIFV0aWxpdGllc1xuICpcbiAqIENhbm9uaWNhbCBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RyaW5nIGNhc2UgY29udmVyc2lvbiBmdW5jdGlvbnNcbiAqIHNoYXJlZCBhY3Jvc3MgdGhlIG1vbm9yZXBvLiBBbGwgcGFja2FnZXMgc2hvdWxkIGltcG9ydCBmcm9tXG4gKiBAZmphbGwvdXRpbCByYXRoZXIgdGhhbiBtYWludGFpbmluZyBsb2NhbCBjb3BpZXMuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0IGh5cGhlbmF0ZWQvdW5kZXJzY29yZWQgbmFtZXMgdG8gUGFzY2FsQ2FzZS5cbiAqIGUuZy4sIFwibXktYXBwXCIgLT4gXCJNeUFwcFwiLCBcIm15X2FwcFwiIC0+IFwiTXlBcHBcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9QYXNjYWxDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlKC9bLV9dKC4pL2csIChfLCBjOiBzdHJpbmcpID0+IGMudG9VcHBlckNhc2UoKSlcbiAgICAucmVwbGFjZSgvXi4vLCAoYykgPT4gYy50b1VwcGVyQ2FzZSgpKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFueSBjYXNlIChQYXNjYWxDYXNlLCBjYW1lbENhc2UsIGtlYmFiLWNhc2UsIHNuYWtlX2Nhc2UpIHRvIGtlYmFiLWNhc2UuXG4gKiBUaHJlZS1wYXNzIHJlZ2V4OiBzcGxpdCBhY3Jvbnltcywgc3BsaXQgY2FtZWwgYm91bmRhcmllcywgcmVwbGFjZSBzZXBhcmF0b3JzLlxuICogZS5nLiwgXCJNeUFwcFwiIC0+IFwibXktYXBwXCIsIFwiQVdTTGFtYmRhXCIgLT4gXCJhd3MtbGFtYmRhXCIsIFwibXlBcHBcIiAtPiBcIm15LWFwcFwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0tlYmFiKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlKC8oW0EtWl0rKShbQS1aXVthLXpdKS9nLCBcIiQxLSQyXCIpXG4gICAgLnJlcGxhY2UoLyhbYS16XFxkXSkoW0EtWl0pL2csIFwiJDEtJDJcIilcbiAgICAucmVwbGFjZSgvW1xcc19dKy9nLCBcIi1cIilcbiAgICAudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgbmFtZSB0byBhIHZhbGlkIFJEUyBkYXRhYmFzZSBuYW1lIChzbmFrZV9jYXNlKS5cbiAqIFJEUyBBUEkgYWxsb3dzIGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3JlcyBmb3IgUG9zdGdyZVNRTC9NeVNRTCBEYXRhYmFzZU5hbWUuXG4gKiBIeXBoZW5zIGFyZSByZWplY3RlZCwgc28gY29udmVydCB0aGVtIHRvIHVuZGVyc2NvcmVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9WYWxpZERhdGFiYXNlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9LZWJhYihuYW1lKS5yZXBsYWNlKC8tL2csIFwiX1wiKTtcbn1cblxuLyoqXG4gKiBDYXBpdGFsaXNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHN0ci5sZW5ndGggPT09IDApIHJldHVybiBzdHI7XG4gIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59XG5cbi8qKlxuICogU3RyaXAgZG90cyBmcm9tIGEgem9uZSBuYW1lIHRvIHByb2R1Y2UgYSBzYWZlIHN0cmluZyBmb3IgY29uc3RydWN0IElEcy5cbiAqIGUuZy4sIFwiZXhhbXBsZS5jb21cIiAtPiBcImV4YW1wbGVjb21cIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2FmZVpvbmVOYW1lKHpvbmVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gem9uZU5hbWUuc3BsaXQoXCIuXCIpLmpvaW4oXCJcIik7XG59XG4iXX0=
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DNS_APEX = void 0;
|
|
4
|
-
exports.getDomainExportNames = getDomainExportNames;
|
|
5
|
-
exports.DNS_APEX = "@";
|
|
6
|
-
/**
|
|
7
|
-
* Compute predictable CloudFormation export names for domain stack outputs.
|
|
8
|
-
* Used by both infrastructure constructs (to set export names) and CLI services
|
|
9
|
-
* (to import zone ID and certificate ARN via Fn.importValue).
|
|
10
|
-
*/
|
|
11
|
-
function getDomainExportNames(domainName) {
|
|
12
|
-
const safe = domainName.replace(/\./g, "-");
|
|
13
|
-
return {
|
|
14
|
-
hostedZoneId: `${safe}-hosted-zone-id`,
|
|
15
|
-
certificateArn: `${safe}-certificate-arn`
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluRXhwb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb21haW5FeHBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLG9EQVNDO0FBaEJZLFFBQUEsUUFBUSxHQUFHLEdBQVksQ0FBQztBQUVyQzs7OztHQUlHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsVUFBa0I7SUFJckQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUMsT0FBTztRQUNMLFlBQVksRUFBRSxHQUFHLElBQUksaUJBQWlCO1FBQ3RDLGNBQWMsRUFBRSxHQUFHLElBQUksa0JBQWtCO0tBQzFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEROU19BUEVYID0gXCJAXCIgYXMgY29uc3Q7XG5cbi8qKlxuICogQ29tcHV0ZSBwcmVkaWN0YWJsZSBDbG91ZEZvcm1hdGlvbiBleHBvcnQgbmFtZXMgZm9yIGRvbWFpbiBzdGFjayBvdXRwdXRzLlxuICogVXNlZCBieSBib3RoIGluZnJhc3RydWN0dXJlIGNvbnN0cnVjdHMgKHRvIHNldCBleHBvcnQgbmFtZXMpIGFuZCBDTEkgc2VydmljZXNcbiAqICh0byBpbXBvcnQgem9uZSBJRCBhbmQgY2VydGlmaWNhdGUgQVJOIHZpYSBGbi5pbXBvcnRWYWx1ZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREb21haW5FeHBvcnROYW1lcyhkb21haW5OYW1lOiBzdHJpbmcpOiB7XG4gIGhvc3RlZFpvbmVJZDogc3RyaW5nO1xuICBjZXJ0aWZpY2F0ZUFybjogc3RyaW5nO1xufSB7XG4gIGNvbnN0IHNhZmUgPSBkb21haW5OYW1lLnJlcGxhY2UoL1xcLi9nLCBcIi1cIik7XG4gIHJldHVybiB7XG4gICAgaG9zdGVkWm9uZUlkOiBgJHtzYWZlfS1ob3N0ZWQtem9uZS1pZGAsXG4gICAgY2VydGlmaWNhdGVBcm46IGAke3NhZmV9LWNlcnRpZmljYXRlLWFybmBcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgaW1wb3J0aW5nIHpvbmUgYW5kIGNlcnRpZmljYXRlIGZyb20gYSBtYW5hZ2VkIGRvbWFpbiBzdGFjay5cbiAqIFdoZW4gc2V0LCBhcHAgY29uc3RydWN0cyB1c2UgRm4uaW1wb3J0VmFsdWUoKSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGlubGluZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5hZ2VkRG9tYWluRXhwb3J0cyB7XG4gIGhvc3RlZFpvbmVJZEV4cG9ydDogc3RyaW5nO1xuICBjZXJ0aWZpY2F0ZUFybkV4cG9ydDogc3RyaW5nO1xuICB6b25lTmFtZTogc3RyaW5nO1xufVxuIl19
|
package/dist/src/errorUtils.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.normaliseError = normaliseError;
|
|
4
|
-
exports.getErrorMessage = getErrorMessage;
|
|
5
|
-
exports.hasErrorCode = hasErrorCode;
|
|
6
|
-
exports.getErrorCode = getErrorCode;
|
|
7
|
-
exports.getErrorStack = getErrorStack;
|
|
8
|
-
exports.formatErrorString = formatErrorString;
|
|
9
|
-
/**
|
|
10
|
-
* Normalise an unknown thrown value into an Error instance
|
|
11
|
-
*/
|
|
12
|
-
function normaliseError(error) {
|
|
13
|
-
return error instanceof Error ? error : new Error(String(error));
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Safely extract error message from any error type
|
|
17
|
-
*/
|
|
18
|
-
function getErrorMessage(error) {
|
|
19
|
-
if (error instanceof Error) {
|
|
20
|
-
return error.message;
|
|
21
|
-
}
|
|
22
|
-
if (typeof error === "string") {
|
|
23
|
-
return error;
|
|
24
|
-
}
|
|
25
|
-
if (error && typeof error === "object" && "message" in error) {
|
|
26
|
-
return String(error.message);
|
|
27
|
-
}
|
|
28
|
-
return "An unknown error occurred";
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Check if an error has a specific error code
|
|
32
|
-
*/
|
|
33
|
-
function hasErrorCode(error, code) {
|
|
34
|
-
if (!error || typeof error !== "object") {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
return "code" in error && error.code === code;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Extract error code from an error if present
|
|
41
|
-
*/
|
|
42
|
-
function getErrorCode(error) {
|
|
43
|
-
if (!error || typeof error !== "object") {
|
|
44
|
-
return undefined;
|
|
45
|
-
}
|
|
46
|
-
if ("code" in error &&
|
|
47
|
-
typeof error.code === "string") {
|
|
48
|
-
return error.code;
|
|
49
|
-
}
|
|
50
|
-
return undefined;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Safely extract the stack trace from an unknown thrown value
|
|
54
|
-
*/
|
|
55
|
-
function getErrorStack(error) {
|
|
56
|
-
return error instanceof Error ? error.stack : undefined;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Create a formatted error string with optional code prefix
|
|
60
|
-
*/
|
|
61
|
-
function formatErrorString(error) {
|
|
62
|
-
const message = getErrorMessage(error);
|
|
63
|
-
const code = getErrorCode(error);
|
|
64
|
-
if (code && code !== "UNKNOWN_ERROR") {
|
|
65
|
-
return `[${code}] ${message}`;
|
|
66
|
-
}
|
|
67
|
-
return message;
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvclV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0Esd0NBRUM7QUFLRCwwQ0FXQztBQUtELG9DQUtDO0FBS0Qsb0NBV0M7QUFLRCxzQ0FFQztBQUtELDhDQVFDO0FBbkVEOztHQUVHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLEtBQWM7SUFDM0MsT0FBTyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxLQUFjO0lBQzVDLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1FBQzNCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksU0FBUyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzdELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0QsT0FBTywyQkFBMkIsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixZQUFZLENBQUMsS0FBYyxFQUFFLElBQVk7SUFDdkQsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLE1BQU0sSUFBSSxLQUFLLElBQUssS0FBMkIsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO0FBQ3ZFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FBQyxLQUFjO0lBQ3pDLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQ0UsTUFBTSxJQUFJLEtBQUs7UUFDZixPQUFRLEtBQTJCLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFDckQsQ0FBQztRQUNELE9BQVEsS0FBMEIsQ0FBQyxJQUFJLENBQUM7SUFDMUMsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxLQUFjO0lBQzFDLE9BQU8sS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzFELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLEtBQWM7SUFDOUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqQyxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssZUFBZSxFQUFFLENBQUM7UUFDckMsT0FBTyxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTm9ybWFsaXNlIGFuIHVua25vd24gdGhyb3duIHZhbHVlIGludG8gYW4gRXJyb3IgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGlzZUVycm9yKGVycm9yOiB1bmtub3duKTogRXJyb3Ige1xuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xufVxuXG4vKipcbiAqIFNhZmVseSBleHRyYWN0IGVycm9yIG1lc3NhZ2UgZnJvbSBhbnkgZXJyb3IgdHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IubWVzc2FnZTtcbiAgfVxuICBpZiAodHlwZW9mIGVycm9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG4gIGlmIChlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgXCJtZXNzYWdlXCIgaW4gZXJyb3IpIHtcbiAgICByZXR1cm4gU3RyaW5nKGVycm9yLm1lc3NhZ2UpO1xuICB9XG4gIHJldHVybiBcIkFuIHVua25vd24gZXJyb3Igb2NjdXJyZWRcIjtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhbiBlcnJvciBoYXMgYSBzcGVjaWZpYyBlcnJvciBjb2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNFcnJvckNvZGUoZXJyb3I6IHVua25vd24sIGNvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWVycm9yIHx8IHR5cGVvZiBlcnJvciAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gXCJjb2RlXCIgaW4gZXJyb3IgJiYgKGVycm9yIGFzIHsgY29kZTogdW5rbm93biB9KS5jb2RlID09PSBjb2RlO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgZXJyb3IgY29kZSBmcm9tIGFuIGVycm9yIGlmIHByZXNlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yQ29kZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghZXJyb3IgfHwgdHlwZW9mIGVycm9yICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoXG4gICAgXCJjb2RlXCIgaW4gZXJyb3IgJiZcbiAgICB0eXBlb2YgKGVycm9yIGFzIHsgY29kZTogdW5rbm93biB9KS5jb2RlID09PSBcInN0cmluZ1wiXG4gICkge1xuICAgIHJldHVybiAoZXJyb3IgYXMgeyBjb2RlOiBzdHJpbmcgfSkuY29kZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFNhZmVseSBleHRyYWN0IHRoZSBzdGFjayB0cmFjZSBmcm9tIGFuIHVua25vd24gdGhyb3duIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvclN0YWNrKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmb3JtYXR0ZWQgZXJyb3Igc3RyaW5nIHdpdGggb3B0aW9uYWwgY29kZSBwcmVmaXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEVycm9yU3RyaW5nKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgY29uc3QgbWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gIGNvbnN0IGNvZGUgPSBnZXRFcnJvckNvZGUoZXJyb3IpO1xuXG4gIGlmIChjb2RlICYmIGNvZGUgIT09IFwiVU5LTk9XTl9FUlJPUlwiKSB7XG4gICAgcmV0dXJuIGBbJHtjb2RlfV0gJHttZXNzYWdlfWA7XG4gIH1cbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG4iXX0=
|
package/dist/src/index.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export * from "./Config";
|
|
2
|
-
export { logger } from "./logger.js";
|
|
3
|
-
export { DNS_APEX, getDomainExportNames, type ManagedDomainExports } from "./domainExports";
|
|
4
|
-
export { toPascalCase, toKebab, toValidDatabaseName, capitalise, getSafeZoneName } from "./caseConversion";
|
|
5
|
-
export { normaliseError, getErrorMessage, hasErrorCode, getErrorCode, getErrorStack, formatErrorString } from "./errorUtils";
|
package/dist/src/index.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.formatErrorString = exports.getErrorStack = exports.getErrorCode = exports.hasErrorCode = exports.getErrorMessage = exports.normaliseError = exports.getSafeZoneName = exports.capitalise = exports.toValidDatabaseName = exports.toKebab = exports.toPascalCase = exports.getDomainExportNames = exports.DNS_APEX = exports.logger = void 0;
|
|
18
|
-
__exportStar(require("./Config"), exports);
|
|
19
|
-
var logger_js_1 = require("./logger.js");
|
|
20
|
-
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_js_1.logger; } });
|
|
21
|
-
var domainExports_1 = require("./domainExports");
|
|
22
|
-
Object.defineProperty(exports, "DNS_APEX", { enumerable: true, get: function () { return domainExports_1.DNS_APEX; } });
|
|
23
|
-
Object.defineProperty(exports, "getDomainExportNames", { enumerable: true, get: function () { return domainExports_1.getDomainExportNames; } });
|
|
24
|
-
var caseConversion_1 = require("./caseConversion");
|
|
25
|
-
Object.defineProperty(exports, "toPascalCase", { enumerable: true, get: function () { return caseConversion_1.toPascalCase; } });
|
|
26
|
-
Object.defineProperty(exports, "toKebab", { enumerable: true, get: function () { return caseConversion_1.toKebab; } });
|
|
27
|
-
Object.defineProperty(exports, "toValidDatabaseName", { enumerable: true, get: function () { return caseConversion_1.toValidDatabaseName; } });
|
|
28
|
-
Object.defineProperty(exports, "capitalise", { enumerable: true, get: function () { return caseConversion_1.capitalise; } });
|
|
29
|
-
Object.defineProperty(exports, "getSafeZoneName", { enumerable: true, get: function () { return caseConversion_1.getSafeZoneName; } });
|
|
30
|
-
var errorUtils_1 = require("./errorUtils");
|
|
31
|
-
Object.defineProperty(exports, "normaliseError", { enumerable: true, get: function () { return errorUtils_1.normaliseError; } });
|
|
32
|
-
Object.defineProperty(exports, "getErrorMessage", { enumerable: true, get: function () { return errorUtils_1.getErrorMessage; } });
|
|
33
|
-
Object.defineProperty(exports, "hasErrorCode", { enumerable: true, get: function () { return errorUtils_1.hasErrorCode; } });
|
|
34
|
-
Object.defineProperty(exports, "getErrorCode", { enumerable: true, get: function () { return errorUtils_1.getErrorCode; } });
|
|
35
|
-
Object.defineProperty(exports, "getErrorStack", { enumerable: true, get: function () { return errorUtils_1.getErrorStack; } });
|
|
36
|
-
Object.defineProperty(exports, "formatErrorString", { enumerable: true, get: function () { return errorUtils_1.formatErrorString; } });
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBeUI7QUFDekIseUNBQXFDO0FBQTVCLG1HQUFBLE1BQU0sT0FBQTtBQUNmLGlEQUl5QjtBQUh2Qix5R0FBQSxRQUFRLE9BQUE7QUFDUixxSEFBQSxvQkFBb0IsT0FBQTtBQUd0QixtREFNMEI7QUFMeEIsOEdBQUEsWUFBWSxPQUFBO0FBQ1oseUdBQUEsT0FBTyxPQUFBO0FBQ1AscUhBQUEsbUJBQW1CLE9BQUE7QUFDbkIsNEdBQUEsVUFBVSxPQUFBO0FBQ1YsaUhBQUEsZUFBZSxPQUFBO0FBRWpCLDJDQU9zQjtBQU5wQiw0R0FBQSxjQUFjLE9BQUE7QUFDZCw2R0FBQSxlQUFlLE9BQUE7QUFDZiwwR0FBQSxZQUFZLE9BQUE7QUFDWiwwR0FBQSxZQUFZLE9BQUE7QUFDWiwyR0FBQSxhQUFhLE9BQUE7QUFDYiwrR0FBQSxpQkFBaUIsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL0NvbmZpZ1wiO1xuZXhwb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2VyLmpzXCI7XG5leHBvcnQge1xuICBETlNfQVBFWCxcbiAgZ2V0RG9tYWluRXhwb3J0TmFtZXMsXG4gIHR5cGUgTWFuYWdlZERvbWFpbkV4cG9ydHNcbn0gZnJvbSBcIi4vZG9tYWluRXhwb3J0c1wiO1xuZXhwb3J0IHtcbiAgdG9QYXNjYWxDYXNlLFxuICB0b0tlYmFiLFxuICB0b1ZhbGlkRGF0YWJhc2VOYW1lLFxuICBjYXBpdGFsaXNlLFxuICBnZXRTYWZlWm9uZU5hbWVcbn0gZnJvbSBcIi4vY2FzZUNvbnZlcnNpb25cIjtcbmV4cG9ydCB7XG4gIG5vcm1hbGlzZUVycm9yLFxuICBnZXRFcnJvck1lc3NhZ2UsXG4gIGhhc0Vycm9yQ29kZSxcbiAgZ2V0RXJyb3JDb2RlLFxuICBnZXRFcnJvclN0YWNrLFxuICBmb3JtYXRFcnJvclN0cmluZ1xufSBmcm9tIFwiLi9lcnJvclV0aWxzXCI7XG4iXX0=
|
package/dist/src/logger.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Simple logger for the util package.
|
|
3
|
-
* Writes to stderr to avoid polluting stdout.
|
|
4
|
-
* Provides info/warn/error/debug/trace methods matching the CLI logger interface.
|
|
5
|
-
*/
|
|
6
|
-
export declare const logger: {
|
|
7
|
-
info(component: string, message: string, data?: Record<string, unknown>): void;
|
|
8
|
-
warn(component: string, message: string, data?: Record<string, unknown>): void;
|
|
9
|
-
error(component: string, message: string, data?: Record<string, unknown>): void;
|
|
10
|
-
debug(component: string, message: string, data?: Record<string, unknown>): void;
|
|
11
|
-
trace(component: string, message: string, data?: Record<string, unknown>): void;
|
|
12
|
-
};
|
package/dist/src/logger.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Simple logger for the util package.
|
|
4
|
-
* Writes to stderr to avoid polluting stdout.
|
|
5
|
-
* Provides info/warn/error/debug/trace methods matching the CLI logger interface.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.logger = void 0;
|
|
9
|
-
/** Format and write a log message to stderr */
|
|
10
|
-
const formatAndWrite = (level, component, message, data) => {
|
|
11
|
-
const timestamp = new Date().toISOString();
|
|
12
|
-
const dataStr = data ? ` ${JSON.stringify(data)}` : "";
|
|
13
|
-
process.stderr.write(`[${timestamp}] [${level}] [${component}] ${message}${dataStr}\n`);
|
|
14
|
-
};
|
|
15
|
-
exports.logger = {
|
|
16
|
-
info(component, message, data) {
|
|
17
|
-
formatAndWrite("INFO", component, message, data);
|
|
18
|
-
},
|
|
19
|
-
warn(component, message, data) {
|
|
20
|
-
formatAndWrite("WARN", component, message, data);
|
|
21
|
-
},
|
|
22
|
-
error(component, message, data) {
|
|
23
|
-
formatAndWrite("ERROR", component, message, data);
|
|
24
|
-
},
|
|
25
|
-
debug(component, message, data) {
|
|
26
|
-
if (process.env.FJALL_DEBUG === "true") {
|
|
27
|
-
formatAndWrite("DEBUG", component, message, data);
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
trace(component, message, data) {
|
|
31
|
-
if (process.env.FJALL_TRACE === "true") {
|
|
32
|
-
formatAndWrite("TRACE", component, message, data);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBSUgsK0NBQStDO0FBQy9DLE1BQU0sY0FBYyxHQUFHLENBQ3JCLEtBQWUsRUFDZixTQUFpQixFQUNqQixPQUFlLEVBQ2YsSUFBOEIsRUFDeEIsRUFBRTtJQUNSLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3ZELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNsQixJQUFJLFNBQVMsTUFBTSxLQUFLLE1BQU0sU0FBUyxLQUFLLE9BQU8sR0FBRyxPQUFPLElBQUksQ0FDbEUsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVXLFFBQUEsTUFBTSxHQUFHO0lBQ3BCLElBQUksQ0FDRixTQUFpQixFQUNqQixPQUFlLEVBQ2YsSUFBOEI7UUFFOUIsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLENBQ0YsU0FBaUIsRUFDakIsT0FBZSxFQUNmLElBQThCO1FBRTlCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsS0FBSyxDQUNILFNBQWlCLEVBQ2pCLE9BQWUsRUFDZixJQUE4QjtRQUU5QixjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELEtBQUssQ0FDSCxTQUFpQixFQUNqQixPQUFlLEVBQ2YsSUFBOEI7UUFFOUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN2QyxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQ0gsU0FBaUIsRUFDakIsT0FBZSxFQUNmLElBQThCO1FBRTlCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDdkMsY0FBYyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2ltcGxlIGxvZ2dlciBmb3IgdGhlIHV0aWwgcGFja2FnZS5cbiAqIFdyaXRlcyB0byBzdGRlcnIgdG8gYXZvaWQgcG9sbHV0aW5nIHN0ZG91dC5cbiAqIFByb3ZpZGVzIGluZm8vd2Fybi9lcnJvci9kZWJ1Zy90cmFjZSBtZXRob2RzIG1hdGNoaW5nIHRoZSBDTEkgbG9nZ2VyIGludGVyZmFjZS5cbiAqL1xuXG50eXBlIExvZ0xldmVsID0gXCJJTkZPXCIgfCBcIldBUk5cIiB8IFwiRVJST1JcIiB8IFwiREVCVUdcIiB8IFwiVFJBQ0VcIjtcblxuLyoqIEZvcm1hdCBhbmQgd3JpdGUgYSBsb2cgbWVzc2FnZSB0byBzdGRlcnIgKi9cbmNvbnN0IGZvcm1hdEFuZFdyaXRlID0gKFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIGNvbXBvbmVudDogc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogdm9pZCA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgY29uc3QgZGF0YVN0ciA9IGRhdGEgPyBgICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YCA6IFwiXCI7XG4gIHByb2Nlc3Muc3RkZXJyLndyaXRlKFxuICAgIGBbJHt0aW1lc3RhbXB9XSBbJHtsZXZlbH1dIFske2NvbXBvbmVudH1dICR7bWVzc2FnZX0ke2RhdGFTdHJ9XFxuYFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvZ2dlciA9IHtcbiAgaW5mbyhcbiAgICBjb21wb25lbnQ6IHN0cmluZyxcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IHZvaWQge1xuICAgIGZvcm1hdEFuZFdyaXRlKFwiSU5GT1wiLCBjb21wb25lbnQsIG1lc3NhZ2UsIGRhdGEpO1xuICB9LFxuXG4gIHdhcm4oXG4gICAgY29tcG9uZW50OiBzdHJpbmcsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiB2b2lkIHtcbiAgICBmb3JtYXRBbmRXcml0ZShcIldBUk5cIiwgY29tcG9uZW50LCBtZXNzYWdlLCBkYXRhKTtcbiAgfSxcblxuICBlcnJvcihcbiAgICBjb21wb25lbnQ6IHN0cmluZyxcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IHZvaWQge1xuICAgIGZvcm1hdEFuZFdyaXRlKFwiRVJST1JcIiwgY29tcG9uZW50LCBtZXNzYWdlLCBkYXRhKTtcbiAgfSxcblxuICBkZWJ1ZyhcbiAgICBjb21wb25lbnQ6IHN0cmluZyxcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IHZvaWQge1xuICAgIGlmIChwcm9jZXNzLmVudi5GSkFMTF9ERUJVRyA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIGZvcm1hdEFuZFdyaXRlKFwiREVCVUdcIiwgY29tcG9uZW50LCBtZXNzYWdlLCBkYXRhKTtcbiAgICB9XG4gIH0sXG5cbiAgdHJhY2UoXG4gICAgY29tcG9uZW50OiBzdHJpbmcsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiB2b2lkIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuRkpBTExfVFJBQ0UgPT09IFwidHJ1ZVwiKSB7XG4gICAgICBmb3JtYXRBbmRXcml0ZShcIlRSQUNFXCIsIGNvbXBvbmVudCwgbWVzc2FnZSwgZGF0YSk7XG4gICAgfVxuICB9XG59O1xuIl19
|
|
File without changes
|
|
File without changes
|