@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.
@@ -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=
@@ -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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBeUI7QUFDekIseUNBQXFDO0FBQTVCLG1HQUFBLE1BQU0sT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL0NvbmZpZ1wiO1xuZXhwb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2VyLmpzXCI7XG4iXX0=
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.88.3",
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": "ISC",
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.709.0",
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": "2fc4044efa7b0e352c88835f77e82110dac01a73"
36
+ "gitHead": "5bb039ff669fbe96d656ae1467e9986cf4327e92"
37
37
  }