@fjall/util 0.88.3 → 0.89.2
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 +21 -0
- package/dist/src/Config.d.ts +68 -147
- package/dist/src/Config.js +157 -350
- package/dist/src/caseConversion.d.ts +33 -0
- package/dist/src/caseConversion.js +59 -0
- package/dist/src/domainExports.d.ts +19 -0
- package/dist/src/domainExports.js +18 -0
- package/dist/src/errorUtils.d.ts +24 -0
- package/dist/src/errorUtils.js +69 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +18 -2
- package/package.json +4 -4
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Case Conversion Utilities
|
|
3
|
+
*
|
|
4
|
+
* Canonical implementations of string case conversion functions
|
|
5
|
+
* shared across the monorepo. All packages should import from
|
|
6
|
+
* @fjall/util rather than maintaining local copies.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Convert hyphenated/underscored names to PascalCase.
|
|
10
|
+
* e.g., "my-app" -> "MyApp", "my_app" -> "MyApp"
|
|
11
|
+
*/
|
|
12
|
+
export declare function toPascalCase(str: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Convert any case (PascalCase, camelCase, kebab-case, snake_case) to kebab-case.
|
|
15
|
+
* Three-pass regex: split acronyms, split camel boundaries, replace separators.
|
|
16
|
+
* e.g., "MyApp" -> "my-app", "AWSLambda" -> "aws-lambda", "myApp" -> "my-app"
|
|
17
|
+
*/
|
|
18
|
+
export declare function toKebab(str: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Convert a name to a valid RDS database name (snake_case).
|
|
21
|
+
* RDS API allows letters, numbers, and underscores for PostgreSQL/MySQL DatabaseName.
|
|
22
|
+
* Hyphens are rejected, so convert them to underscores.
|
|
23
|
+
*/
|
|
24
|
+
export declare function toValidDatabaseName(name: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Capitalise the first character of a string.
|
|
27
|
+
*/
|
|
28
|
+
export declare function capitalise(str: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Strip dots from a zone name to produce a safe string for construct IDs.
|
|
31
|
+
* e.g., "example.com" -> "examplecom"
|
|
32
|
+
*/
|
|
33
|
+
export declare function getSafeZoneName(zoneName: string): string;
|
|
@@ -0,0 +1,59 @@
|
|
|
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=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const DNS_APEX: "@";
|
|
2
|
+
/**
|
|
3
|
+
* Compute predictable CloudFormation export names for domain stack outputs.
|
|
4
|
+
* Used by both infrastructure constructs (to set export names) and CLI services
|
|
5
|
+
* (to import zone ID and certificate ARN via Fn.importValue).
|
|
6
|
+
*/
|
|
7
|
+
export declare function getDomainExportNames(domainName: string): {
|
|
8
|
+
hostedZoneId: string;
|
|
9
|
+
certificateArn: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Props for importing zone and certificate from a managed domain stack.
|
|
13
|
+
* When set, app constructs use Fn.importValue() instead of creating inline.
|
|
14
|
+
*/
|
|
15
|
+
export interface ManagedDomainExports {
|
|
16
|
+
hostedZoneIdExport: string;
|
|
17
|
+
certificateArnExport: string;
|
|
18
|
+
zoneName: string;
|
|
19
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalise an unknown thrown value into an Error instance
|
|
3
|
+
*/
|
|
4
|
+
export declare function normaliseError(error: unknown): Error;
|
|
5
|
+
/**
|
|
6
|
+
* Safely extract error message from any error type
|
|
7
|
+
*/
|
|
8
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
9
|
+
/**
|
|
10
|
+
* Check if an error has a specific error code
|
|
11
|
+
*/
|
|
12
|
+
export declare function hasErrorCode(error: unknown, code: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Extract error code from an error if present
|
|
15
|
+
*/
|
|
16
|
+
export declare function getErrorCode(error: unknown): string | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Safely extract the stack trace from an unknown thrown value
|
|
19
|
+
*/
|
|
20
|
+
export declare function getErrorStack(error: unknown): string | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Create a formatted error string with optional code prefix
|
|
23
|
+
*/
|
|
24
|
+
export declare function formatErrorString(error: unknown): string;
|
|
@@ -0,0 +1,69 @@
|
|
|
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
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
export * from "./Config";
|
|
2
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
CHANGED
|
@@ -14,8 +14,24 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.logger = void 0;
|
|
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
18
|
__exportStar(require("./Config"), exports);
|
|
19
19
|
var logger_js_1 = require("./logger.js");
|
|
20
20
|
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_js_1.logger; } });
|
|
21
|
-
|
|
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjall/util",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.89.2",
|
|
4
4
|
"description": "Common utility methods",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"format:check": "prettier --check \"src/**/*.{ts,tsx,js,jsx,json}\""
|
|
17
17
|
},
|
|
18
18
|
"author": "",
|
|
19
|
-
"license": "
|
|
19
|
+
"license": "MIT",
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@types/node": "^22.13.10",
|
|
22
22
|
"prettier": "^3.2.5",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"typescript": "^5.8.2"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@aws-sdk/client-organizations": "^3.
|
|
27
|
+
"@aws-sdk/client-organizations": "^3.997.0",
|
|
28
28
|
"zod": "^4.3.6"
|
|
29
29
|
},
|
|
30
30
|
"overrides": {
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
"engines": {
|
|
34
34
|
"node": ">=18.0.0"
|
|
35
35
|
},
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "5bb039ff669fbe96d656ae1467e9986cf4327e92"
|
|
37
37
|
}
|