@reyemtech/nimbus 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +399 -0
- package/dist/cjs/aws/cluster.d.ts +32 -0
- package/dist/cjs/aws/cluster.d.ts.map +1 -0
- package/dist/cjs/aws/cluster.js +214 -0
- package/dist/cjs/aws/cluster.js.map +1 -0
- package/dist/cjs/aws/dns.d.ts +22 -0
- package/dist/cjs/aws/dns.d.ts.map +1 -0
- package/dist/cjs/aws/dns.js +95 -0
- package/dist/cjs/aws/dns.js.map +1 -0
- package/dist/cjs/aws/index.d.ts +10 -0
- package/dist/cjs/aws/index.d.ts.map +1 -0
- package/dist/cjs/aws/index.js +17 -0
- package/dist/cjs/aws/index.js.map +1 -0
- package/dist/cjs/aws/network.d.ts +27 -0
- package/dist/cjs/aws/network.d.ts.map +1 -0
- package/dist/cjs/aws/network.js +262 -0
- package/dist/cjs/aws/network.js.map +1 -0
- package/dist/cjs/aws/secrets.d.ts +26 -0
- package/dist/cjs/aws/secrets.d.ts.map +1 -0
- package/dist/cjs/aws/secrets.js +127 -0
- package/dist/cjs/aws/secrets.js.map +1 -0
- package/dist/cjs/azure/cluster.d.ts +44 -0
- package/dist/cjs/azure/cluster.d.ts.map +1 -0
- package/dist/cjs/azure/cluster.js +143 -0
- package/dist/cjs/azure/cluster.js.map +1 -0
- package/dist/cjs/azure/dns.d.ts +28 -0
- package/dist/cjs/azure/dns.d.ts.map +1 -0
- package/dist/cjs/azure/dns.js +169 -0
- package/dist/cjs/azure/dns.js.map +1 -0
- package/dist/cjs/azure/index.d.ts +10 -0
- package/dist/cjs/azure/index.d.ts.map +1 -0
- package/dist/cjs/azure/index.js +17 -0
- package/dist/cjs/azure/index.js.map +1 -0
- package/dist/cjs/azure/network.d.ts +28 -0
- package/dist/cjs/azure/network.d.ts.map +1 -0
- package/dist/cjs/azure/network.js +176 -0
- package/dist/cjs/azure/network.js.map +1 -0
- package/dist/cjs/azure/secrets.d.ts +37 -0
- package/dist/cjs/azure/secrets.d.ts.map +1 -0
- package/dist/cjs/azure/secrets.js +150 -0
- package/dist/cjs/azure/secrets.js.map +1 -0
- package/dist/cjs/cache/index.d.ts +7 -0
- package/dist/cjs/cache/index.d.ts.map +1 -0
- package/dist/cjs/cache/index.js +8 -0
- package/dist/cjs/cache/index.js.map +1 -0
- package/dist/cjs/cache/interfaces.d.ts +60 -0
- package/dist/cjs/cache/interfaces.d.ts.map +1 -0
- package/dist/cjs/cache/interfaces.js +11 -0
- package/dist/cjs/cache/interfaces.js.map +1 -0
- package/dist/cjs/cluster/index.d.ts +7 -0
- package/dist/cjs/cluster/index.d.ts.map +1 -0
- package/dist/cjs/cluster/index.js +8 -0
- package/dist/cjs/cluster/index.js.map +1 -0
- package/dist/cjs/cluster/interfaces.d.ts +120 -0
- package/dist/cjs/cluster/interfaces.d.ts.map +1 -0
- package/dist/cjs/cluster/interfaces.js +12 -0
- package/dist/cjs/cluster/interfaces.js.map +1 -0
- package/dist/cjs/database/index.d.ts +7 -0
- package/dist/cjs/database/index.d.ts.map +1 -0
- package/dist/cjs/database/index.js +8 -0
- package/dist/cjs/database/index.js.map +1 -0
- package/dist/cjs/database/interfaces.d.ts +93 -0
- package/dist/cjs/database/interfaces.d.ts.map +1 -0
- package/dist/cjs/database/interfaces.js +12 -0
- package/dist/cjs/database/interfaces.js.map +1 -0
- package/dist/cjs/dns/index.d.ts +7 -0
- package/dist/cjs/dns/index.d.ts.map +1 -0
- package/dist/cjs/dns/index.js +8 -0
- package/dist/cjs/dns/index.js.map +1 -0
- package/dist/cjs/dns/interfaces.d.ts +55 -0
- package/dist/cjs/dns/interfaces.d.ts.map +1 -0
- package/dist/cjs/dns/interfaces.js +11 -0
- package/dist/cjs/dns/interfaces.js.map +1 -0
- package/dist/cjs/factories/cluster.d.ts +45 -0
- package/dist/cjs/factories/cluster.d.ts.map +1 -0
- package/dist/cjs/factories/cluster.js +90 -0
- package/dist/cjs/factories/cluster.js.map +1 -0
- package/dist/cjs/factories/dns.d.ts +30 -0
- package/dist/cjs/factories/dns.d.ts.map +1 -0
- package/dist/cjs/factories/dns.js +56 -0
- package/dist/cjs/factories/dns.js.map +1 -0
- package/dist/cjs/factories/index.d.ts +15 -0
- package/dist/cjs/factories/index.d.ts.map +1 -0
- package/dist/cjs/factories/index.js +23 -0
- package/dist/cjs/factories/index.js.map +1 -0
- package/dist/cjs/factories/network.d.ts +40 -0
- package/dist/cjs/factories/network.d.ts.map +1 -0
- package/dist/cjs/factories/network.js +85 -0
- package/dist/cjs/factories/network.js.map +1 -0
- package/dist/cjs/factories/secrets.d.ts +38 -0
- package/dist/cjs/factories/secrets.d.ts.map +1 -0
- package/dist/cjs/factories/secrets.js +67 -0
- package/dist/cjs/factories/secrets.js.map +1 -0
- package/dist/cjs/factories/types.d.ts +75 -0
- package/dist/cjs/factories/types.d.ts.map +1 -0
- package/dist/cjs/factories/types.js +28 -0
- package/dist/cjs/factories/types.js.map +1 -0
- package/dist/cjs/global-lb/glb.d.ts +29 -0
- package/dist/cjs/global-lb/glb.d.ts.map +1 -0
- package/dist/cjs/global-lb/glb.js +220 -0
- package/dist/cjs/global-lb/glb.js.map +1 -0
- package/dist/cjs/global-lb/index.d.ts +8 -0
- package/dist/cjs/global-lb/index.d.ts.map +1 -0
- package/dist/cjs/global-lb/index.js +11 -0
- package/dist/cjs/global-lb/index.js.map +1 -0
- package/dist/cjs/global-lb/interfaces.d.ts +62 -0
- package/dist/cjs/global-lb/interfaces.d.ts.map +1 -0
- package/dist/cjs/global-lb/interfaces.js +11 -0
- package/dist/cjs/global-lb/interfaces.js.map +1 -0
- package/dist/cjs/index.d.ts +28 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +72 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/network/cidr.d.ts +92 -0
- package/dist/cjs/network/cidr.d.ts.map +1 -0
- package/dist/cjs/network/cidr.js +189 -0
- package/dist/cjs/network/cidr.js.map +1 -0
- package/dist/cjs/network/index.d.ts +8 -0
- package/dist/cjs/network/index.d.ts.map +1 -0
- package/dist/cjs/network/index.js +17 -0
- package/dist/cjs/network/index.js.map +1 -0
- package/dist/cjs/network/interfaces.d.ts +60 -0
- package/dist/cjs/network/interfaces.d.ts.map +1 -0
- package/dist/cjs/network/interfaces.js +12 -0
- package/dist/cjs/network/interfaces.js.map +1 -0
- package/dist/cjs/platform/index.d.ts +8 -0
- package/dist/cjs/platform/index.d.ts.map +1 -0
- package/dist/cjs/platform/index.js +11 -0
- package/dist/cjs/platform/index.js.map +1 -0
- package/dist/cjs/platform/interfaces.d.ts +86 -0
- package/dist/cjs/platform/interfaces.d.ts.map +1 -0
- package/dist/cjs/platform/interfaces.js +12 -0
- package/dist/cjs/platform/interfaces.js.map +1 -0
- package/dist/cjs/platform/stack.d.ts +32 -0
- package/dist/cjs/platform/stack.d.ts.map +1 -0
- package/dist/cjs/platform/stack.js +258 -0
- package/dist/cjs/platform/stack.js.map +1 -0
- package/dist/cjs/queue/index.d.ts +7 -0
- package/dist/cjs/queue/index.d.ts.map +1 -0
- package/dist/cjs/queue/index.js +8 -0
- package/dist/cjs/queue/index.js.map +1 -0
- package/dist/cjs/queue/interfaces.d.ts +46 -0
- package/dist/cjs/queue/interfaces.d.ts.map +1 -0
- package/dist/cjs/queue/interfaces.js +11 -0
- package/dist/cjs/queue/interfaces.js.map +1 -0
- package/dist/cjs/secrets/index.d.ts +7 -0
- package/dist/cjs/secrets/index.d.ts.map +1 -0
- package/dist/cjs/secrets/index.js +8 -0
- package/dist/cjs/secrets/index.js.map +1 -0
- package/dist/cjs/secrets/interfaces.d.ts +73 -0
- package/dist/cjs/secrets/interfaces.d.ts.map +1 -0
- package/dist/cjs/secrets/interfaces.js +11 -0
- package/dist/cjs/secrets/interfaces.js.map +1 -0
- package/dist/cjs/storage/index.d.ts +7 -0
- package/dist/cjs/storage/index.d.ts.map +1 -0
- package/dist/cjs/storage/index.js +8 -0
- package/dist/cjs/storage/index.js.map +1 -0
- package/dist/cjs/storage/interfaces.d.ts +63 -0
- package/dist/cjs/storage/interfaces.d.ts.map +1 -0
- package/dist/cjs/storage/interfaces.js +11 -0
- package/dist/cjs/storage/interfaces.js.map +1 -0
- package/dist/cjs/types/cloud-target.d.ts +89 -0
- package/dist/cjs/types/cloud-target.d.ts.map +1 -0
- package/dist/cjs/types/cloud-target.js +73 -0
- package/dist/cjs/types/cloud-target.js.map +1 -0
- package/dist/cjs/types/errors.d.ts +96 -0
- package/dist/cjs/types/errors.d.ts.map +1 -0
- package/dist/cjs/types/errors.js +127 -0
- package/dist/cjs/types/errors.js.map +1 -0
- package/dist/cjs/types/index.d.ts +10 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +33 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/tags.d.ts +53 -0
- package/dist/cjs/types/tags.d.ts.map +1 -0
- package/dist/cjs/types/tags.js +110 -0
- package/dist/cjs/types/tags.js.map +1 -0
- package/dist/cjs/types/validation.d.ts +63 -0
- package/dist/cjs/types/validation.d.ts.map +1 -0
- package/dist/cjs/types/validation.js +158 -0
- package/dist/cjs/types/validation.js.map +1 -0
- package/dist/esm/aws/cluster.d.ts +32 -0
- package/dist/esm/aws/cluster.d.ts.map +1 -0
- package/dist/esm/aws/cluster.js +214 -0
- package/dist/esm/aws/cluster.js.map +1 -0
- package/dist/esm/aws/dns.d.ts +22 -0
- package/dist/esm/aws/dns.d.ts.map +1 -0
- package/dist/esm/aws/dns.js +95 -0
- package/dist/esm/aws/dns.js.map +1 -0
- package/dist/esm/aws/index.d.ts +10 -0
- package/dist/esm/aws/index.d.ts.map +1 -0
- package/dist/esm/aws/index.js +17 -0
- package/dist/esm/aws/index.js.map +1 -0
- package/dist/esm/aws/network.d.ts +27 -0
- package/dist/esm/aws/network.d.ts.map +1 -0
- package/dist/esm/aws/network.js +262 -0
- package/dist/esm/aws/network.js.map +1 -0
- package/dist/esm/aws/secrets.d.ts +26 -0
- package/dist/esm/aws/secrets.d.ts.map +1 -0
- package/dist/esm/aws/secrets.js +127 -0
- package/dist/esm/aws/secrets.js.map +1 -0
- package/dist/esm/azure/cluster.d.ts +44 -0
- package/dist/esm/azure/cluster.d.ts.map +1 -0
- package/dist/esm/azure/cluster.js +143 -0
- package/dist/esm/azure/cluster.js.map +1 -0
- package/dist/esm/azure/dns.d.ts +28 -0
- package/dist/esm/azure/dns.d.ts.map +1 -0
- package/dist/esm/azure/dns.js +169 -0
- package/dist/esm/azure/dns.js.map +1 -0
- package/dist/esm/azure/index.d.ts +10 -0
- package/dist/esm/azure/index.d.ts.map +1 -0
- package/dist/esm/azure/index.js +17 -0
- package/dist/esm/azure/index.js.map +1 -0
- package/dist/esm/azure/network.d.ts +28 -0
- package/dist/esm/azure/network.d.ts.map +1 -0
- package/dist/esm/azure/network.js +176 -0
- package/dist/esm/azure/network.js.map +1 -0
- package/dist/esm/azure/secrets.d.ts +37 -0
- package/dist/esm/azure/secrets.d.ts.map +1 -0
- package/dist/esm/azure/secrets.js +150 -0
- package/dist/esm/azure/secrets.js.map +1 -0
- package/dist/esm/cache/index.d.ts +7 -0
- package/dist/esm/cache/index.d.ts.map +1 -0
- package/dist/esm/cache/index.js +8 -0
- package/dist/esm/cache/index.js.map +1 -0
- package/dist/esm/cache/interfaces.d.ts +60 -0
- package/dist/esm/cache/interfaces.d.ts.map +1 -0
- package/dist/esm/cache/interfaces.js +11 -0
- package/dist/esm/cache/interfaces.js.map +1 -0
- package/dist/esm/cluster/index.d.ts +7 -0
- package/dist/esm/cluster/index.d.ts.map +1 -0
- package/dist/esm/cluster/index.js +8 -0
- package/dist/esm/cluster/index.js.map +1 -0
- package/dist/esm/cluster/interfaces.d.ts +120 -0
- package/dist/esm/cluster/interfaces.d.ts.map +1 -0
- package/dist/esm/cluster/interfaces.js +12 -0
- package/dist/esm/cluster/interfaces.js.map +1 -0
- package/dist/esm/database/index.d.ts +7 -0
- package/dist/esm/database/index.d.ts.map +1 -0
- package/dist/esm/database/index.js +8 -0
- package/dist/esm/database/index.js.map +1 -0
- package/dist/esm/database/interfaces.d.ts +93 -0
- package/dist/esm/database/interfaces.d.ts.map +1 -0
- package/dist/esm/database/interfaces.js +12 -0
- package/dist/esm/database/interfaces.js.map +1 -0
- package/dist/esm/dns/index.d.ts +7 -0
- package/dist/esm/dns/index.d.ts.map +1 -0
- package/dist/esm/dns/index.js +8 -0
- package/dist/esm/dns/index.js.map +1 -0
- package/dist/esm/dns/interfaces.d.ts +55 -0
- package/dist/esm/dns/interfaces.d.ts.map +1 -0
- package/dist/esm/dns/interfaces.js +11 -0
- package/dist/esm/dns/interfaces.js.map +1 -0
- package/dist/esm/factories/cluster.d.ts +45 -0
- package/dist/esm/factories/cluster.d.ts.map +1 -0
- package/dist/esm/factories/cluster.js +90 -0
- package/dist/esm/factories/cluster.js.map +1 -0
- package/dist/esm/factories/dns.d.ts +30 -0
- package/dist/esm/factories/dns.d.ts.map +1 -0
- package/dist/esm/factories/dns.js +56 -0
- package/dist/esm/factories/dns.js.map +1 -0
- package/dist/esm/factories/index.d.ts +15 -0
- package/dist/esm/factories/index.d.ts.map +1 -0
- package/dist/esm/factories/index.js +23 -0
- package/dist/esm/factories/index.js.map +1 -0
- package/dist/esm/factories/network.d.ts +40 -0
- package/dist/esm/factories/network.d.ts.map +1 -0
- package/dist/esm/factories/network.js +85 -0
- package/dist/esm/factories/network.js.map +1 -0
- package/dist/esm/factories/secrets.d.ts +38 -0
- package/dist/esm/factories/secrets.d.ts.map +1 -0
- package/dist/esm/factories/secrets.js +67 -0
- package/dist/esm/factories/secrets.js.map +1 -0
- package/dist/esm/factories/types.d.ts +75 -0
- package/dist/esm/factories/types.d.ts.map +1 -0
- package/dist/esm/factories/types.js +28 -0
- package/dist/esm/factories/types.js.map +1 -0
- package/dist/esm/global-lb/glb.d.ts +29 -0
- package/dist/esm/global-lb/glb.d.ts.map +1 -0
- package/dist/esm/global-lb/glb.js +220 -0
- package/dist/esm/global-lb/glb.js.map +1 -0
- package/dist/esm/global-lb/index.d.ts +8 -0
- package/dist/esm/global-lb/index.d.ts.map +1 -0
- package/dist/esm/global-lb/index.js +11 -0
- package/dist/esm/global-lb/index.js.map +1 -0
- package/dist/esm/global-lb/interfaces.d.ts +62 -0
- package/dist/esm/global-lb/interfaces.d.ts.map +1 -0
- package/dist/esm/global-lb/interfaces.js +11 -0
- package/dist/esm/global-lb/interfaces.js.map +1 -0
- package/dist/esm/index.d.ts +28 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +72 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/network/cidr.d.ts +92 -0
- package/dist/esm/network/cidr.d.ts.map +1 -0
- package/dist/esm/network/cidr.js +189 -0
- package/dist/esm/network/cidr.js.map +1 -0
- package/dist/esm/network/index.d.ts +8 -0
- package/dist/esm/network/index.d.ts.map +1 -0
- package/dist/esm/network/index.js +17 -0
- package/dist/esm/network/index.js.map +1 -0
- package/dist/esm/network/interfaces.d.ts +60 -0
- package/dist/esm/network/interfaces.d.ts.map +1 -0
- package/dist/esm/network/interfaces.js +12 -0
- package/dist/esm/network/interfaces.js.map +1 -0
- package/dist/esm/platform/index.d.ts +8 -0
- package/dist/esm/platform/index.d.ts.map +1 -0
- package/dist/esm/platform/index.js +11 -0
- package/dist/esm/platform/index.js.map +1 -0
- package/dist/esm/platform/interfaces.d.ts +86 -0
- package/dist/esm/platform/interfaces.d.ts.map +1 -0
- package/dist/esm/platform/interfaces.js +12 -0
- package/dist/esm/platform/interfaces.js.map +1 -0
- package/dist/esm/platform/stack.d.ts +32 -0
- package/dist/esm/platform/stack.d.ts.map +1 -0
- package/dist/esm/platform/stack.js +258 -0
- package/dist/esm/platform/stack.js.map +1 -0
- package/dist/esm/queue/index.d.ts +7 -0
- package/dist/esm/queue/index.d.ts.map +1 -0
- package/dist/esm/queue/index.js +8 -0
- package/dist/esm/queue/index.js.map +1 -0
- package/dist/esm/queue/interfaces.d.ts +46 -0
- package/dist/esm/queue/interfaces.d.ts.map +1 -0
- package/dist/esm/queue/interfaces.js +11 -0
- package/dist/esm/queue/interfaces.js.map +1 -0
- package/dist/esm/secrets/index.d.ts +7 -0
- package/dist/esm/secrets/index.d.ts.map +1 -0
- package/dist/esm/secrets/index.js +8 -0
- package/dist/esm/secrets/index.js.map +1 -0
- package/dist/esm/secrets/interfaces.d.ts +73 -0
- package/dist/esm/secrets/interfaces.d.ts.map +1 -0
- package/dist/esm/secrets/interfaces.js +11 -0
- package/dist/esm/secrets/interfaces.js.map +1 -0
- package/dist/esm/storage/index.d.ts +7 -0
- package/dist/esm/storage/index.d.ts.map +1 -0
- package/dist/esm/storage/index.js +8 -0
- package/dist/esm/storage/index.js.map +1 -0
- package/dist/esm/storage/interfaces.d.ts +63 -0
- package/dist/esm/storage/interfaces.d.ts.map +1 -0
- package/dist/esm/storage/interfaces.js +11 -0
- package/dist/esm/storage/interfaces.js.map +1 -0
- package/dist/esm/types/cloud-target.d.ts +89 -0
- package/dist/esm/types/cloud-target.d.ts.map +1 -0
- package/dist/esm/types/cloud-target.js +73 -0
- package/dist/esm/types/cloud-target.js.map +1 -0
- package/dist/esm/types/errors.d.ts +96 -0
- package/dist/esm/types/errors.d.ts.map +1 -0
- package/dist/esm/types/errors.js +127 -0
- package/dist/esm/types/errors.js.map +1 -0
- package/dist/esm/types/index.d.ts +10 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +33 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/tags.d.ts +53 -0
- package/dist/esm/types/tags.d.ts.map +1 -0
- package/dist/esm/types/tags.js +110 -0
- package/dist/esm/types/tags.js.map +1 -0
- package/dist/esm/types/validation.d.ts +63 -0
- package/dist/esm/types/validation.d.ts.map +1 -0
- package/dist/esm/types/validation.js +158 -0
- package/dist/esm/types/validation.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud target types for @reyemtech/nimbus.
|
|
3
|
+
*
|
|
4
|
+
* Defines how users specify which cloud provider(s) and region(s)
|
|
5
|
+
* to deploy to. Supports string shorthand, explicit targets,
|
|
6
|
+
* and multi-cloud arrays.
|
|
7
|
+
*
|
|
8
|
+
* @module types/cloud-target
|
|
9
|
+
*/
|
|
10
|
+
/** Supported cloud providers. */
|
|
11
|
+
export type CloudProvider = "aws" | "azure" | "gcp" | "rackspace";
|
|
12
|
+
/**
|
|
13
|
+
* Explicit cloud target with provider and optional region.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const target: CloudTarget = { provider: "aws", region: "us-east-1" };
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export interface CloudTarget {
|
|
21
|
+
readonly provider: CloudProvider;
|
|
22
|
+
/** Falls back to DEFAULT_REGIONS[provider] if omitted. */
|
|
23
|
+
readonly region?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Flexible cloud argument accepted by all factory functions.
|
|
27
|
+
*
|
|
28
|
+
* - `string` shorthand: `"aws"` → reads region from config or default
|
|
29
|
+
* - `CloudTarget`: explicit `{ provider, region }`
|
|
30
|
+
* - `Array`: multi-cloud deployment
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* // Simple
|
|
35
|
+
* cloud: "aws"
|
|
36
|
+
*
|
|
37
|
+
* // Explicit
|
|
38
|
+
* cloud: { provider: "aws", region: "us-east-1" }
|
|
39
|
+
*
|
|
40
|
+
* // Multi-cloud
|
|
41
|
+
* cloud: [
|
|
42
|
+
* { provider: "aws", region: "us-east-1" },
|
|
43
|
+
* { provider: "azure", region: "canadacentral" }
|
|
44
|
+
* ]
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export type CloudArg = CloudProvider | CloudTarget | ReadonlyArray<CloudProvider | CloudTarget>;
|
|
48
|
+
/**
|
|
49
|
+
* Resolved cloud target — always has both provider and region.
|
|
50
|
+
* Produced by resolveCloudTarget() after applying config/defaults.
|
|
51
|
+
*/
|
|
52
|
+
export interface ResolvedCloudTarget {
|
|
53
|
+
readonly provider: CloudProvider;
|
|
54
|
+
readonly region: string;
|
|
55
|
+
}
|
|
56
|
+
/** Default regions when none specified and no config file entry found. */
|
|
57
|
+
export declare const DEFAULT_REGIONS: Readonly<Record<CloudProvider, string>>;
|
|
58
|
+
/** All valid cloud providers for exhaustive checks. */
|
|
59
|
+
export declare const CLOUD_PROVIDERS: ReadonlyArray<CloudProvider>;
|
|
60
|
+
/**
|
|
61
|
+
* Type guard: is the value a CloudProvider string?
|
|
62
|
+
*
|
|
63
|
+
* @param value - Value to check
|
|
64
|
+
* @returns True if value is a valid CloudProvider
|
|
65
|
+
*/
|
|
66
|
+
export declare function isCloudProvider(value: unknown): value is CloudProvider;
|
|
67
|
+
/**
|
|
68
|
+
* Type guard: is the value a CloudTarget object?
|
|
69
|
+
*
|
|
70
|
+
* @param value - Value to check
|
|
71
|
+
* @returns True if value is a CloudTarget
|
|
72
|
+
*/
|
|
73
|
+
export declare function isCloudTarget(value: unknown): value is CloudTarget;
|
|
74
|
+
/**
|
|
75
|
+
* Resolve a CloudArg into one or more ResolvedCloudTargets.
|
|
76
|
+
*
|
|
77
|
+
* Resolution order:
|
|
78
|
+
* 1. Explicit region in CloudTarget
|
|
79
|
+
* 2. DEFAULT_REGIONS fallback
|
|
80
|
+
*
|
|
81
|
+
* @param cloud - The cloud argument to resolve
|
|
82
|
+
* @returns Resolved target(s) with provider and region
|
|
83
|
+
*
|
|
84
|
+
* @throws {CloudValidationError} If cloud argument is invalid
|
|
85
|
+
*/
|
|
86
|
+
export declare function resolveCloudTarget(cloud: CloudProvider | CloudTarget): ResolvedCloudTarget;
|
|
87
|
+
export declare function resolveCloudTarget(cloud: ReadonlyArray<CloudProvider | CloudTarget>): ReadonlyArray<ResolvedCloudTarget>;
|
|
88
|
+
export declare function resolveCloudTarget(cloud: CloudArg): ResolvedCloudTarget | ReadonlyArray<ResolvedCloudTarget>;
|
|
89
|
+
//# sourceMappingURL=cloud-target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-target.d.ts","sourceRoot":"","sources":["../../../src/types/cloud-target.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,iCAAiC;AACjC,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,WAAW,CAAC;AAElE;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC;AAEhG;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,0EAA0E;AAC1E,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAK1D,CAAC;AAEX,uDAAuD;AACvD,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,aAAa,CAK/C,CAAC;AAEX;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAOlE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,WAAW,GAAG,mBAAmB,CAAC;AAC5F,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,CAAC,aAAa,GAAG,WAAW,CAAC,GAChD,aAAa,CAAC,mBAAmB,CAAC,CAAC;AACtC,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,GACd,mBAAmB,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Cloud target types for @reyemtech/nimbus.
|
|
4
|
+
*
|
|
5
|
+
* Defines how users specify which cloud provider(s) and region(s)
|
|
6
|
+
* to deploy to. Supports string shorthand, explicit targets,
|
|
7
|
+
* and multi-cloud arrays.
|
|
8
|
+
*
|
|
9
|
+
* @module types/cloud-target
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CLOUD_PROVIDERS = exports.DEFAULT_REGIONS = void 0;
|
|
13
|
+
exports.isCloudProvider = isCloudProvider;
|
|
14
|
+
exports.isCloudTarget = isCloudTarget;
|
|
15
|
+
exports.resolveCloudTarget = resolveCloudTarget;
|
|
16
|
+
const errors_1 = require("./errors");
|
|
17
|
+
/** Default regions when none specified and no config file entry found. */
|
|
18
|
+
exports.DEFAULT_REGIONS = {
|
|
19
|
+
aws: "us-east-1",
|
|
20
|
+
azure: "eastus",
|
|
21
|
+
gcp: "us-central1",
|
|
22
|
+
rackspace: "us-central-iad3",
|
|
23
|
+
};
|
|
24
|
+
/** All valid cloud providers for exhaustive checks. */
|
|
25
|
+
exports.CLOUD_PROVIDERS = [
|
|
26
|
+
"aws",
|
|
27
|
+
"azure",
|
|
28
|
+
"gcp",
|
|
29
|
+
"rackspace",
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Type guard: is the value a CloudProvider string?
|
|
33
|
+
*
|
|
34
|
+
* @param value - Value to check
|
|
35
|
+
* @returns True if value is a valid CloudProvider
|
|
36
|
+
*/
|
|
37
|
+
function isCloudProvider(value) {
|
|
38
|
+
return typeof value === "string" && exports.CLOUD_PROVIDERS.includes(value);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Type guard: is the value a CloudTarget object?
|
|
42
|
+
*
|
|
43
|
+
* @param value - Value to check
|
|
44
|
+
* @returns True if value is a CloudTarget
|
|
45
|
+
*/
|
|
46
|
+
function isCloudTarget(value) {
|
|
47
|
+
return (typeof value === "object" &&
|
|
48
|
+
value !== null &&
|
|
49
|
+
"provider" in value &&
|
|
50
|
+
isCloudProvider(value.provider));
|
|
51
|
+
}
|
|
52
|
+
function resolveCloudTarget(cloud) {
|
|
53
|
+
if (Array.isArray(cloud)) {
|
|
54
|
+
return cloud.map((c) => resolveSingle(c));
|
|
55
|
+
}
|
|
56
|
+
return resolveSingle(cloud);
|
|
57
|
+
}
|
|
58
|
+
function resolveSingle(cloud) {
|
|
59
|
+
if (isCloudProvider(cloud)) {
|
|
60
|
+
return {
|
|
61
|
+
provider: cloud,
|
|
62
|
+
region: exports.DEFAULT_REGIONS[cloud],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (isCloudTarget(cloud)) {
|
|
66
|
+
return {
|
|
67
|
+
provider: cloud.provider,
|
|
68
|
+
region: cloud.region ?? exports.DEFAULT_REGIONS[cloud.provider],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
throw new errors_1.CloudValidationError(`Invalid cloud argument: ${JSON.stringify(cloud)}. Expected CloudProvider string or CloudTarget object.`);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=cloud-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-target.js","sourceRoot":"","sources":["../../../src/types/cloud-target.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AA4EH,0CAEC;AAQD,sCAOC;AAqBD,gDAOC;AAvHD,qCAAgD;AAoDhD,0EAA0E;AAC7D,QAAA,eAAe,GAA4C;IACtE,GAAG,EAAE,WAAW;IAChB,KAAK,EAAE,QAAQ;IACf,GAAG,EAAE,aAAa;IAClB,SAAS,EAAE,iBAAiB;CACpB,CAAC;AAEX,uDAAuD;AAC1C,QAAA,eAAe,GAAiC;IAC3D,KAAK;IACL,OAAO;IACP,KAAK;IACL,WAAW;CACH,CAAC;AAEX;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,uBAAe,CAAC,QAAQ,CAAC,KAAsB,CAAC,CAAC;AACvF,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,KAAc;IAC1C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,UAAU,IAAI,KAAK;QACnB,eAAe,CAAE,KAAqB,CAAC,QAAQ,CAAC,CACjD,CAAC;AACJ,CAAC;AAqBD,SAAgB,kBAAkB,CAChC,KAAe;IAEf,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,aAAa,CAAC,KAAoC,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,aAAa,CAAC,KAAkC;IACvD,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,uBAAe,CAAC,KAAK,CAAC;SAC/B,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,uBAAe,CAAC,KAAK,CAAC,QAAQ,CAAC;SACxD,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,6BAAoB,CAC5B,2BAA2B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,wDAAwD,CACzG,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error classes for @reyemtech/nimbus.
|
|
3
|
+
*
|
|
4
|
+
* All errors extend AnyCloudError with a machine-readable code.
|
|
5
|
+
* Use discriminated error codes for programmatic handling.
|
|
6
|
+
*
|
|
7
|
+
* @module types/errors
|
|
8
|
+
*/
|
|
9
|
+
/** Error codes for all nimbus errors. */
|
|
10
|
+
export declare const ERROR_CODES: {
|
|
11
|
+
readonly CLOUD_VALIDATION: "CLOUD_VALIDATION";
|
|
12
|
+
readonly CIDR_OVERLAP: "CIDR_OVERLAP";
|
|
13
|
+
readonly CIDR_INVALID: "CIDR_INVALID";
|
|
14
|
+
readonly UNSUPPORTED_FEATURE: "UNSUPPORTED_FEATURE";
|
|
15
|
+
readonly CONFIG_MISSING: "CONFIG_MISSING";
|
|
16
|
+
readonly CONFIG_INVALID: "CONFIG_INVALID";
|
|
17
|
+
readonly SECRET_NOT_FOUND: "SECRET_NOT_FOUND";
|
|
18
|
+
readonly PROVIDER_MISMATCH: "PROVIDER_MISMATCH";
|
|
19
|
+
};
|
|
20
|
+
export type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];
|
|
21
|
+
/**
|
|
22
|
+
* Base error for all nimbus errors.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* try {
|
|
27
|
+
* createCluster("prod", { cloud: "invalid" as any });
|
|
28
|
+
* } catch (e) {
|
|
29
|
+
* if (e instanceof AnyCloudError) {
|
|
30
|
+
* console.log(e.code); // "CLOUD_VALIDATION"
|
|
31
|
+
* }
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare class AnyCloudError extends Error {
|
|
36
|
+
readonly code: ErrorCode;
|
|
37
|
+
constructor(message: string, code: ErrorCode);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Thrown when a cloud provider or region is invalid.
|
|
41
|
+
*
|
|
42
|
+
* @throws When an unsupported provider string is passed, or a required
|
|
43
|
+
* region is missing and cannot be resolved from config/defaults.
|
|
44
|
+
*/
|
|
45
|
+
export declare class CloudValidationError extends AnyCloudError {
|
|
46
|
+
constructor(message: string);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Thrown when CIDR ranges overlap or are invalid.
|
|
50
|
+
*
|
|
51
|
+
* @throws When multi-cloud CIDRs would conflict (preventing peering/mesh),
|
|
52
|
+
* or when a CIDR string cannot be parsed.
|
|
53
|
+
*/
|
|
54
|
+
export declare class CidrError extends AnyCloudError {
|
|
55
|
+
readonly cidrs?: ReadonlyArray<string>;
|
|
56
|
+
constructor(message: string, code: "CIDR_OVERLAP" | "CIDR_INVALID", cidrs?: ReadonlyArray<string>);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Thrown when a feature is not supported for a given cloud provider.
|
|
60
|
+
*
|
|
61
|
+
* @throws When requesting a feature that doesn't exist on the target
|
|
62
|
+
* cloud (e.g., EKS Auto Mode on Azure).
|
|
63
|
+
*/
|
|
64
|
+
export declare class UnsupportedFeatureError extends AnyCloudError {
|
|
65
|
+
readonly feature: string;
|
|
66
|
+
readonly provider: string;
|
|
67
|
+
constructor(feature: string, provider: string);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Thrown when Pulumi config is missing or malformed.
|
|
71
|
+
*
|
|
72
|
+
* @throws When a required config value is not set in Pulumi.<stack>.yaml
|
|
73
|
+
* or when the config value has an unexpected shape.
|
|
74
|
+
*/
|
|
75
|
+
export declare class ConfigError extends AnyCloudError {
|
|
76
|
+
readonly configKey?: string;
|
|
77
|
+
constructor(message: string, code: "CONFIG_MISSING" | "CONFIG_INVALID", configKey?: string);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Helper for exhaustive switch/case. Ensures all cases are handled at compile time.
|
|
81
|
+
*
|
|
82
|
+
* @param value - The value that should have been handled by a prior case
|
|
83
|
+
* @throws Always throws — reaching this function means a case was missed
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* switch (provider) {
|
|
88
|
+
* case "aws": return createEks(...);
|
|
89
|
+
* case "azure": return createAks(...);
|
|
90
|
+
* case "gcp": return createGke(...);
|
|
91
|
+
* default: assertNever(provider);
|
|
92
|
+
* }
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare function assertNever(value: never): never;
|
|
96
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/types/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yCAAyC;AACzC,eAAO,MAAM,WAAW;;;;;;;;;CASd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEvE;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;gBAEb,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;CAM7C;AAED;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,aAAa;gBACzC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,qBAAa,SAAU,SAAQ,aAAa;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;gBAGrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,cAAc,GAAG,cAAc,EACrC,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC;CAMhC;AAED;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,aAAa;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAS9C;AAED;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,aAAa;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,SAAS,CAAC,EAAE,MAAM;CAK3F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAE/C"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Custom error classes for @reyemtech/nimbus.
|
|
4
|
+
*
|
|
5
|
+
* All errors extend AnyCloudError with a machine-readable code.
|
|
6
|
+
* Use discriminated error codes for programmatic handling.
|
|
7
|
+
*
|
|
8
|
+
* @module types/errors
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.ConfigError = exports.UnsupportedFeatureError = exports.CidrError = exports.CloudValidationError = exports.AnyCloudError = exports.ERROR_CODES = void 0;
|
|
12
|
+
exports.assertNever = assertNever;
|
|
13
|
+
/** Error codes for all nimbus errors. */
|
|
14
|
+
exports.ERROR_CODES = {
|
|
15
|
+
CLOUD_VALIDATION: "CLOUD_VALIDATION",
|
|
16
|
+
CIDR_OVERLAP: "CIDR_OVERLAP",
|
|
17
|
+
CIDR_INVALID: "CIDR_INVALID",
|
|
18
|
+
UNSUPPORTED_FEATURE: "UNSUPPORTED_FEATURE",
|
|
19
|
+
CONFIG_MISSING: "CONFIG_MISSING",
|
|
20
|
+
CONFIG_INVALID: "CONFIG_INVALID",
|
|
21
|
+
SECRET_NOT_FOUND: "SECRET_NOT_FOUND",
|
|
22
|
+
PROVIDER_MISMATCH: "PROVIDER_MISMATCH",
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Base error for all nimbus errors.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* try {
|
|
30
|
+
* createCluster("prod", { cloud: "invalid" as any });
|
|
31
|
+
* } catch (e) {
|
|
32
|
+
* if (e instanceof AnyCloudError) {
|
|
33
|
+
* console.log(e.code); // "CLOUD_VALIDATION"
|
|
34
|
+
* }
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
class AnyCloudError extends Error {
|
|
39
|
+
code;
|
|
40
|
+
constructor(message, code) {
|
|
41
|
+
super(message);
|
|
42
|
+
this.name = "AnyCloudError";
|
|
43
|
+
this.code = code;
|
|
44
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.AnyCloudError = AnyCloudError;
|
|
48
|
+
/**
|
|
49
|
+
* Thrown when a cloud provider or region is invalid.
|
|
50
|
+
*
|
|
51
|
+
* @throws When an unsupported provider string is passed, or a required
|
|
52
|
+
* region is missing and cannot be resolved from config/defaults.
|
|
53
|
+
*/
|
|
54
|
+
class CloudValidationError extends AnyCloudError {
|
|
55
|
+
constructor(message) {
|
|
56
|
+
super(message, exports.ERROR_CODES.CLOUD_VALIDATION);
|
|
57
|
+
this.name = "CloudValidationError";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.CloudValidationError = CloudValidationError;
|
|
61
|
+
/**
|
|
62
|
+
* Thrown when CIDR ranges overlap or are invalid.
|
|
63
|
+
*
|
|
64
|
+
* @throws When multi-cloud CIDRs would conflict (preventing peering/mesh),
|
|
65
|
+
* or when a CIDR string cannot be parsed.
|
|
66
|
+
*/
|
|
67
|
+
class CidrError extends AnyCloudError {
|
|
68
|
+
cidrs;
|
|
69
|
+
constructor(message, code, cidrs) {
|
|
70
|
+
super(message, code);
|
|
71
|
+
this.name = "CidrError";
|
|
72
|
+
this.cidrs = cidrs;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.CidrError = CidrError;
|
|
76
|
+
/**
|
|
77
|
+
* Thrown when a feature is not supported for a given cloud provider.
|
|
78
|
+
*
|
|
79
|
+
* @throws When requesting a feature that doesn't exist on the target
|
|
80
|
+
* cloud (e.g., EKS Auto Mode on Azure).
|
|
81
|
+
*/
|
|
82
|
+
class UnsupportedFeatureError extends AnyCloudError {
|
|
83
|
+
feature;
|
|
84
|
+
provider;
|
|
85
|
+
constructor(feature, provider) {
|
|
86
|
+
super(`Feature "${feature}" is not supported on provider "${provider}".`, exports.ERROR_CODES.UNSUPPORTED_FEATURE);
|
|
87
|
+
this.name = "UnsupportedFeatureError";
|
|
88
|
+
this.feature = feature;
|
|
89
|
+
this.provider = provider;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.UnsupportedFeatureError = UnsupportedFeatureError;
|
|
93
|
+
/**
|
|
94
|
+
* Thrown when Pulumi config is missing or malformed.
|
|
95
|
+
*
|
|
96
|
+
* @throws When a required config value is not set in Pulumi.<stack>.yaml
|
|
97
|
+
* or when the config value has an unexpected shape.
|
|
98
|
+
*/
|
|
99
|
+
class ConfigError extends AnyCloudError {
|
|
100
|
+
configKey;
|
|
101
|
+
constructor(message, code, configKey) {
|
|
102
|
+
super(message, code);
|
|
103
|
+
this.name = "ConfigError";
|
|
104
|
+
this.configKey = configKey;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.ConfigError = ConfigError;
|
|
108
|
+
/**
|
|
109
|
+
* Helper for exhaustive switch/case. Ensures all cases are handled at compile time.
|
|
110
|
+
*
|
|
111
|
+
* @param value - The value that should have been handled by a prior case
|
|
112
|
+
* @throws Always throws — reaching this function means a case was missed
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* switch (provider) {
|
|
117
|
+
* case "aws": return createEks(...);
|
|
118
|
+
* case "azure": return createAks(...);
|
|
119
|
+
* case "gcp": return createGke(...);
|
|
120
|
+
* default: assertNever(provider);
|
|
121
|
+
* }
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
function assertNever(value) {
|
|
125
|
+
throw new UnsupportedFeatureError(`Unhandled value: ${JSON.stringify(value)}`, String(value));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/types/errors.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AA+HH,kCAEC;AA/HD,yCAAyC;AAC5B,QAAA,WAAW,GAAG;IACzB,gBAAgB,EAAE,kBAAkB;IACpC,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,mBAAmB,EAAE,qBAAqB;IAC1C,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,gBAAgB,EAAE,kBAAkB;IACpC,iBAAiB,EAAE,mBAAmB;CAC9B,CAAC;AAIX;;;;;;;;;;;;;GAaG;AACH,MAAa,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAY;IAEzB,YAAY,OAAe,EAAE,IAAe;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AATD,sCASC;AAED;;;;;GAKG;AACH,MAAa,oBAAqB,SAAQ,aAAa;IACrD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,mBAAW,CAAC,gBAAgB,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AALD,oDAKC;AAED;;;;;GAKG;AACH,MAAa,SAAU,SAAQ,aAAa;IACjC,KAAK,CAAyB;IAEvC,YACE,OAAe,EACf,IAAqC,EACrC,KAA6B;QAE7B,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAZD,8BAYC;AAED;;;;;GAKG;AACH,MAAa,uBAAwB,SAAQ,aAAa;IAC/C,OAAO,CAAS;IAChB,QAAQ,CAAS;IAE1B,YAAY,OAAe,EAAE,QAAgB;QAC3C,KAAK,CACH,YAAY,OAAO,mCAAmC,QAAQ,IAAI,EAClE,mBAAW,CAAC,mBAAmB,CAChC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAbD,0DAaC;AAED;;;;;GAKG;AACH,MAAa,WAAY,SAAQ,aAAa;IACnC,SAAS,CAAU;IAE5B,YAAY,OAAe,EAAE,IAAyC,EAAE,SAAkB;QACxF,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AARD,kCAQC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,WAAW,CAAC,KAAY;IACtC,MAAM,IAAI,uBAAuB,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAChG,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types, interfaces, and constants for @reyemtech/nimbus.
|
|
3
|
+
*
|
|
4
|
+
* @module types
|
|
5
|
+
*/
|
|
6
|
+
export { type CloudProvider, type CloudTarget, type CloudArg, type ResolvedCloudTarget, DEFAULT_REGIONS, CLOUD_PROVIDERS, isCloudProvider, isCloudTarget, resolveCloudTarget, } from "./cloud-target";
|
|
7
|
+
export { type ErrorCode, ERROR_CODES, AnyCloudError, CloudValidationError, CidrError, UnsupportedFeatureError, ConfigError, assertNever, } from "./errors";
|
|
8
|
+
export { type IRequiredTags, normalizeTags, isValidGcpLabel, mergeWithRequiredTags } from "./tags";
|
|
9
|
+
export { type IValidationResult, validateFeature, isFeatureSupported, validateMultiCloud, validateResourceName, assertValidMultiCloud, } from "./validation";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,mBAAmB,EACxB,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,KAAK,SAAS,EACd,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,SAAS,EACT,uBAAuB,EACvB,WAAW,EACX,WAAW,GACZ,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAEnG,OAAO,EACL,KAAK,iBAAiB,EACtB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared types, interfaces, and constants for @reyemtech/nimbus.
|
|
4
|
+
*
|
|
5
|
+
* @module types
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.assertValidMultiCloud = exports.validateResourceName = exports.validateMultiCloud = exports.isFeatureSupported = exports.validateFeature = exports.mergeWithRequiredTags = exports.isValidGcpLabel = exports.normalizeTags = exports.assertNever = exports.ConfigError = exports.UnsupportedFeatureError = exports.CidrError = exports.CloudValidationError = exports.AnyCloudError = exports.ERROR_CODES = exports.resolveCloudTarget = exports.isCloudTarget = exports.isCloudProvider = exports.CLOUD_PROVIDERS = exports.DEFAULT_REGIONS = void 0;
|
|
9
|
+
var cloud_target_1 = require("./cloud-target");
|
|
10
|
+
Object.defineProperty(exports, "DEFAULT_REGIONS", { enumerable: true, get: function () { return cloud_target_1.DEFAULT_REGIONS; } });
|
|
11
|
+
Object.defineProperty(exports, "CLOUD_PROVIDERS", { enumerable: true, get: function () { return cloud_target_1.CLOUD_PROVIDERS; } });
|
|
12
|
+
Object.defineProperty(exports, "isCloudProvider", { enumerable: true, get: function () { return cloud_target_1.isCloudProvider; } });
|
|
13
|
+
Object.defineProperty(exports, "isCloudTarget", { enumerable: true, get: function () { return cloud_target_1.isCloudTarget; } });
|
|
14
|
+
Object.defineProperty(exports, "resolveCloudTarget", { enumerable: true, get: function () { return cloud_target_1.resolveCloudTarget; } });
|
|
15
|
+
var errors_1 = require("./errors");
|
|
16
|
+
Object.defineProperty(exports, "ERROR_CODES", { enumerable: true, get: function () { return errors_1.ERROR_CODES; } });
|
|
17
|
+
Object.defineProperty(exports, "AnyCloudError", { enumerable: true, get: function () { return errors_1.AnyCloudError; } });
|
|
18
|
+
Object.defineProperty(exports, "CloudValidationError", { enumerable: true, get: function () { return errors_1.CloudValidationError; } });
|
|
19
|
+
Object.defineProperty(exports, "CidrError", { enumerable: true, get: function () { return errors_1.CidrError; } });
|
|
20
|
+
Object.defineProperty(exports, "UnsupportedFeatureError", { enumerable: true, get: function () { return errors_1.UnsupportedFeatureError; } });
|
|
21
|
+
Object.defineProperty(exports, "ConfigError", { enumerable: true, get: function () { return errors_1.ConfigError; } });
|
|
22
|
+
Object.defineProperty(exports, "assertNever", { enumerable: true, get: function () { return errors_1.assertNever; } });
|
|
23
|
+
var tags_1 = require("./tags");
|
|
24
|
+
Object.defineProperty(exports, "normalizeTags", { enumerable: true, get: function () { return tags_1.normalizeTags; } });
|
|
25
|
+
Object.defineProperty(exports, "isValidGcpLabel", { enumerable: true, get: function () { return tags_1.isValidGcpLabel; } });
|
|
26
|
+
Object.defineProperty(exports, "mergeWithRequiredTags", { enumerable: true, get: function () { return tags_1.mergeWithRequiredTags; } });
|
|
27
|
+
var validation_1 = require("./validation");
|
|
28
|
+
Object.defineProperty(exports, "validateFeature", { enumerable: true, get: function () { return validation_1.validateFeature; } });
|
|
29
|
+
Object.defineProperty(exports, "isFeatureSupported", { enumerable: true, get: function () { return validation_1.isFeatureSupported; } });
|
|
30
|
+
Object.defineProperty(exports, "validateMultiCloud", { enumerable: true, get: function () { return validation_1.validateMultiCloud; } });
|
|
31
|
+
Object.defineProperty(exports, "validateResourceName", { enumerable: true, get: function () { return validation_1.validateResourceName; } });
|
|
32
|
+
Object.defineProperty(exports, "assertValidMultiCloud", { enumerable: true, get: function () { return validation_1.assertValidMultiCloud; } });
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,+CAUwB;AALtB,+GAAA,eAAe,OAAA;AACf,+GAAA,eAAe,OAAA;AACf,+GAAA,eAAe,OAAA;AACf,6GAAA,aAAa,OAAA;AACb,kHAAA,kBAAkB,OAAA;AAGpB,mCASkB;AAPhB,qGAAA,WAAW,OAAA;AACX,uGAAA,aAAa,OAAA;AACb,8GAAA,oBAAoB,OAAA;AACpB,mGAAA,SAAS,OAAA;AACT,iHAAA,uBAAuB,OAAA;AACvB,qGAAA,WAAW,OAAA;AACX,qGAAA,WAAW,OAAA;AAGb,+BAAmG;AAAtE,qGAAA,aAAa,OAAA;AAAE,uGAAA,eAAe,OAAA;AAAE,6GAAA,qBAAqB,OAAA;AAElF,2CAOsB;AALpB,6GAAA,eAAe,OAAA;AACf,gHAAA,kBAAkB,OAAA;AAClB,gHAAA,kBAAkB,OAAA;AAClB,kHAAA,oBAAoB,OAAA;AACpB,mHAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-cloud tagging strategy for @reyemtech/nimbus.
|
|
3
|
+
*
|
|
4
|
+
* Normalizes tags/labels across AWS, Azure, and GCP.
|
|
5
|
+
* GCP has strict label requirements: lowercase, no special chars, max 63 chars.
|
|
6
|
+
*
|
|
7
|
+
* @module types/tags
|
|
8
|
+
*/
|
|
9
|
+
import type { CloudProvider } from "./cloud-target";
|
|
10
|
+
/** Required tags applied to every resource. */
|
|
11
|
+
export interface IRequiredTags {
|
|
12
|
+
readonly environment: string;
|
|
13
|
+
readonly client: string;
|
|
14
|
+
readonly costCenter: string;
|
|
15
|
+
readonly managedBy: "nimbus";
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Normalize tags for a specific cloud provider.
|
|
19
|
+
*
|
|
20
|
+
* - **AWS:** Tags pass through as-is (supports most characters).
|
|
21
|
+
* - **Azure:** Tags pass through as-is (supports most characters).
|
|
22
|
+
* - **GCP:** Labels are lowercased, special chars replaced with hyphens,
|
|
23
|
+
* truncated to 63 chars, and must start with a lowercase letter.
|
|
24
|
+
*
|
|
25
|
+
* @param tags - Raw tags to normalize
|
|
26
|
+
* @param provider - Target cloud provider
|
|
27
|
+
* @returns Normalized tags for the provider
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const tags = { Environment: "Production", "Cost-Center": "Engineering" };
|
|
32
|
+
* normalizeTags(tags, "gcp");
|
|
33
|
+
* // { environment: "production", cost-center: "engineering" }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function normalizeTags(tags: Readonly<Record<string, string>>, provider: CloudProvider): Record<string, string>;
|
|
37
|
+
/**
|
|
38
|
+
* Validate that a GCP label key or value is compliant.
|
|
39
|
+
*
|
|
40
|
+
* @param value - Label string to validate
|
|
41
|
+
* @returns True if the label is valid for GCP
|
|
42
|
+
*/
|
|
43
|
+
export declare function isValidGcpLabel(value: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Merge required tags with user-provided tags.
|
|
46
|
+
* Required tags take precedence for the `managedBy` key.
|
|
47
|
+
*
|
|
48
|
+
* @param required - Required tag values
|
|
49
|
+
* @param userTags - User-provided additional tags
|
|
50
|
+
* @returns Merged tag set
|
|
51
|
+
*/
|
|
52
|
+
export declare function mergeWithRequiredTags(required: Omit<IRequiredTags, "managedBy">, userTags?: Readonly<Record<string, string>>): Record<string, string>;
|
|
53
|
+
//# sourceMappingURL=tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/types/tags.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;CAC9B;AAQD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,QAAQ,EAAE,aAAa,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxB;AAuCD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAC1C,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Cross-cloud tagging strategy for @reyemtech/nimbus.
|
|
4
|
+
*
|
|
5
|
+
* Normalizes tags/labels across AWS, Azure, and GCP.
|
|
6
|
+
* GCP has strict label requirements: lowercase, no special chars, max 63 chars.
|
|
7
|
+
*
|
|
8
|
+
* @module types/tags
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.normalizeTags = normalizeTags;
|
|
12
|
+
exports.isValidGcpLabel = isValidGcpLabel;
|
|
13
|
+
exports.mergeWithRequiredTags = mergeWithRequiredTags;
|
|
14
|
+
/** Maximum label key/value length for GCP. */
|
|
15
|
+
const GCP_LABEL_MAX_LENGTH = 63;
|
|
16
|
+
/** Regex for valid GCP label characters (lowercase letters, numbers, hyphens, underscores). */
|
|
17
|
+
const GCP_LABEL_REGEX = /^[a-z][a-z0-9_-]*$/;
|
|
18
|
+
/**
|
|
19
|
+
* Normalize tags for a specific cloud provider.
|
|
20
|
+
*
|
|
21
|
+
* - **AWS:** Tags pass through as-is (supports most characters).
|
|
22
|
+
* - **Azure:** Tags pass through as-is (supports most characters).
|
|
23
|
+
* - **GCP:** Labels are lowercased, special chars replaced with hyphens,
|
|
24
|
+
* truncated to 63 chars, and must start with a lowercase letter.
|
|
25
|
+
*
|
|
26
|
+
* @param tags - Raw tags to normalize
|
|
27
|
+
* @param provider - Target cloud provider
|
|
28
|
+
* @returns Normalized tags for the provider
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const tags = { Environment: "Production", "Cost-Center": "Engineering" };
|
|
33
|
+
* normalizeTags(tags, "gcp");
|
|
34
|
+
* // { environment: "production", cost-center: "engineering" }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
function normalizeTags(tags, provider) {
|
|
38
|
+
if (provider !== "gcp") {
|
|
39
|
+
return { ...tags };
|
|
40
|
+
}
|
|
41
|
+
const normalized = {};
|
|
42
|
+
for (const [key, value] of Object.entries(tags)) {
|
|
43
|
+
const normalizedKey = normalizeGcpLabelKey(key);
|
|
44
|
+
const normalizedValue = normalizeGcpLabelValue(value);
|
|
45
|
+
if (normalizedKey in normalized) {
|
|
46
|
+
console.warn(`[nimbus] GCP label key collision: "${key}" normalizes to "${normalizedKey}" which already exists. Skipping.`);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
normalized[normalizedKey] = normalizedValue;
|
|
50
|
+
}
|
|
51
|
+
return normalized;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Normalize a string to a valid GCP label key.
|
|
55
|
+
* Keys must start with a lowercase letter.
|
|
56
|
+
*/
|
|
57
|
+
function normalizeGcpLabelKey(value) {
|
|
58
|
+
let label = value
|
|
59
|
+
.toLowerCase()
|
|
60
|
+
.replace(/[^a-z0-9_-]/g, "-")
|
|
61
|
+
.replace(/^[^a-z]/, "l$&")
|
|
62
|
+
.replace(/-+/g, "-")
|
|
63
|
+
.replace(/-$/, "");
|
|
64
|
+
if (label.length > GCP_LABEL_MAX_LENGTH) {
|
|
65
|
+
label = label.substring(0, GCP_LABEL_MAX_LENGTH);
|
|
66
|
+
}
|
|
67
|
+
return label;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Normalize a string to a valid GCP label value.
|
|
71
|
+
* Values can start with any valid character (including digits).
|
|
72
|
+
*/
|
|
73
|
+
function normalizeGcpLabelValue(value) {
|
|
74
|
+
let label = value
|
|
75
|
+
.toLowerCase()
|
|
76
|
+
.replace(/[^a-z0-9_-]/g, "-")
|
|
77
|
+
.replace(/-+/g, "-")
|
|
78
|
+
.replace(/-$/, "");
|
|
79
|
+
if (label.length > GCP_LABEL_MAX_LENGTH) {
|
|
80
|
+
label = label.substring(0, GCP_LABEL_MAX_LENGTH);
|
|
81
|
+
}
|
|
82
|
+
return label;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Validate that a GCP label key or value is compliant.
|
|
86
|
+
*
|
|
87
|
+
* @param value - Label string to validate
|
|
88
|
+
* @returns True if the label is valid for GCP
|
|
89
|
+
*/
|
|
90
|
+
function isValidGcpLabel(value) {
|
|
91
|
+
return value.length > 0 && value.length <= GCP_LABEL_MAX_LENGTH && GCP_LABEL_REGEX.test(value);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Merge required tags with user-provided tags.
|
|
95
|
+
* Required tags take precedence for the `managedBy` key.
|
|
96
|
+
*
|
|
97
|
+
* @param required - Required tag values
|
|
98
|
+
* @param userTags - User-provided additional tags
|
|
99
|
+
* @returns Merged tag set
|
|
100
|
+
*/
|
|
101
|
+
function mergeWithRequiredTags(required, userTags) {
|
|
102
|
+
return {
|
|
103
|
+
...userTags,
|
|
104
|
+
environment: required.environment,
|
|
105
|
+
client: required.client,
|
|
106
|
+
costCenter: required.costCenter,
|
|
107
|
+
managedBy: "nimbus",
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../src/types/tags.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAqCH,sCAqBC;AA6CD,0CAEC;AAUD,sDAWC;AAlHD,8CAA8C;AAC9C,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,+FAA+F;AAC/F,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,aAAa,CAC3B,IAAsC,EACtC,QAAuB;IAEvB,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CACV,sCAAsC,GAAG,oBAAoB,aAAa,mCAAmC,CAC9G,CAAC;YACF,SAAS;QACX,CAAC;QACD,UAAU,CAAC,aAAa,CAAC,GAAG,eAAe,CAAC;IAC9C,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,KAAa;IACzC,IAAI,KAAK,GAAG,KAAK;SACd,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;SACzB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAErB,IAAI,KAAK,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;QACxC,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAAC,KAAa;IAC3C,IAAI,KAAK,GAAG,KAAK;SACd,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAErB,IAAI,KAAK,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;QACxC,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,KAAa;IAC3C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,oBAAoB,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjG,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CACnC,QAA0C,EAC1C,QAA2C;IAE3C,OAAO;QACL,GAAG,QAAQ;QACX,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,SAAS,EAAE,QAAQ;KACpB,CAAC;AACJ,CAAC"}
|