@fjall/util 0.89.4 → 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.
Files changed (55) hide show
  1. package/LICENSE +50 -21
  2. package/README.md +22 -0
  3. package/dist/.minified +1 -0
  4. package/dist/Config.d.ts +76 -0
  5. package/dist/Config.js +1 -0
  6. package/dist/aws/CloudFormationFailureAnalyser.d.ts +32 -0
  7. package/dist/aws/CloudFormationFailureAnalyser.js +1 -0
  8. package/dist/aws/cloudformationTypes.d.ts +17 -0
  9. package/dist/aws/cloudformationTypes.js +1 -0
  10. package/dist/aws/errors.d.ts +26 -0
  11. package/dist/aws/errors.js +1 -0
  12. package/dist/aws/index.d.ts +3 -0
  13. package/dist/aws/index.js +1 -0
  14. package/dist/caseConversion.js +1 -0
  15. package/dist/constructMap.d.ts +80 -0
  16. package/dist/constructMap.js +1 -0
  17. package/dist/{src/domainExports.d.ts → domainExports.d.ts} +3 -1
  18. package/dist/domainExports.js +1 -0
  19. package/dist/environments.d.ts +23 -0
  20. package/dist/environments.js +1 -0
  21. package/dist/errorUtils.js +1 -0
  22. package/dist/fsHelpers.d.ts +4 -0
  23. package/dist/fsHelpers.js +1 -0
  24. package/dist/gitRemoteParser.d.ts +8 -0
  25. package/dist/gitRemoteParser.js +1 -0
  26. package/dist/index.d.ts +11 -1
  27. package/dist/index.js +1 -18
  28. package/dist/insights/computePatternFingerprint.d.ts +27 -0
  29. package/dist/insights/computePatternFingerprint.js +1 -0
  30. package/dist/logger.d.ts +32 -0
  31. package/dist/logger.js +2 -0
  32. package/dist/regions.d.ts +8 -0
  33. package/dist/regions.js +1 -0
  34. package/dist/resourceCategorisation.d.ts +28 -0
  35. package/dist/resourceCategorisation.js +1 -0
  36. package/dist/securityHelpers.d.ts +38 -0
  37. package/dist/securityHelpers.js +1 -0
  38. package/dist/singleton.d.ts +2 -0
  39. package/dist/singleton.js +1 -0
  40. package/dist/sleep.d.ts +4 -0
  41. package/dist/sleep.js +1 -0
  42. package/dist/targets.d.ts +57 -0
  43. package/dist/targets.js +1 -0
  44. package/package.json +55 -8
  45. package/dist/src/Config.d.ts +0 -114
  46. package/dist/src/Config.js +0 -276
  47. package/dist/src/caseConversion.js +0 -59
  48. package/dist/src/domainExports.js +0 -18
  49. package/dist/src/errorUtils.js +0 -69
  50. package/dist/src/index.d.ts +0 -5
  51. package/dist/src/index.js +0 -37
  52. package/dist/src/logger.d.ts +0 -12
  53. package/dist/src/logger.js +0 -36
  54. /package/dist/{src/caseConversion.d.ts → caseConversion.d.ts} +0 -0
  55. /package/dist/{src/errorUtils.d.ts → errorUtils.d.ts} +0 -0
@@ -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
@@ -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=
@@ -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=
@@ -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
- };
@@ -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