@fjall/generator 0.88.4 → 0.89.4
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/ast/astCdnParser.d.ts +15 -0
- package/dist/src/ast/astCdnParser.js +114 -0
- package/dist/src/ast/astCommonParser.d.ts +90 -0
- package/dist/src/ast/astCommonParser.js +351 -0
- package/dist/src/ast/astComputeParser.d.ts +14 -2
- package/dist/src/ast/astComputeParser.js +55 -9
- package/dist/src/ast/astDatabaseParser.d.ts +104 -0
- package/dist/src/ast/astDatabaseParser.js +275 -0
- package/dist/src/ast/astInfrastructureParser.d.ts +23 -277
- package/dist/src/ast/astInfrastructureParser.js +83 -1456
- package/dist/src/ast/astMessagingParser.d.ts +25 -0
- package/dist/src/ast/astMessagingParser.js +78 -0
- package/dist/src/ast/astNetworkParser.d.ts +70 -0
- package/dist/src/ast/astNetworkParser.js +219 -0
- package/dist/src/ast/astPatternParser.d.ts +80 -0
- package/dist/src/ast/astPatternParser.js +155 -0
- package/dist/src/ast/astStorageParser.d.ts +18 -0
- package/dist/src/ast/astStorageParser.js +164 -0
- package/dist/src/ast/index.d.ts +1 -0
- package/dist/src/ast/index.js +4 -0
- package/dist/src/dns/bindParser.d.ts +13 -0
- package/dist/src/dns/bindParser.js +224 -0
- package/dist/src/dns/bindWriter.d.ts +2 -0
- package/dist/src/dns/bindWriter.js +52 -0
- package/dist/src/dns/index.d.ts +4 -0
- package/dist/src/dns/index.js +4 -0
- package/dist/src/dns/infrastructureWriter.d.ts +2 -0
- package/dist/src/dns/infrastructureWriter.js +58 -0
- package/dist/src/dns/types.d.ts +82 -0
- package/dist/src/dns/types.js +52 -0
- package/dist/src/generation/common.d.ts +1 -16
- package/dist/src/generation/common.js +2 -28
- package/dist/src/generation/compute.js +77 -28
- package/dist/src/generation/index.d.ts +2 -1
- package/dist/src/generation/index.js +3 -1
- package/dist/src/generation/messagingConnections.d.ts +33 -0
- package/dist/src/generation/messagingConnections.js +73 -0
- package/dist/src/generation/storage.d.ts +5 -1
- package/dist/src/generation/storage.js +9 -1
- package/dist/src/generation/storageConnections.d.ts +3 -3
- package/dist/src/generation/storageConnections.js +8 -4
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/planning/resourcePlanning.js +0 -2
- package/dist/src/presets/tierTypes.d.ts +4 -1
- package/dist/src/schemas/applicationSchemas.d.ts +854 -0
- package/dist/src/schemas/applicationSchemas.js +80 -0
- package/dist/src/schemas/baseSchemas.d.ts +206 -0
- package/dist/src/schemas/baseSchemas.js +248 -0
- package/dist/src/schemas/cdnSchemas.d.ts +61 -0
- package/dist/src/schemas/cdnSchemas.js +62 -0
- package/dist/src/schemas/computeSchemas.d.ts +723 -0
- package/dist/src/schemas/computeSchemas.js +727 -0
- package/dist/src/schemas/constants.d.ts +12 -8
- package/dist/src/schemas/constants.js +14 -4
- package/dist/src/schemas/databaseSchemas.d.ts +638 -0
- package/dist/src/schemas/databaseSchemas.js +366 -0
- package/dist/src/schemas/messagingSchemas.d.ts +20 -0
- package/dist/src/schemas/messagingSchemas.js +29 -0
- package/dist/src/schemas/networkSchemas.d.ts +246 -0
- package/dist/src/schemas/networkSchemas.js +125 -0
- package/dist/src/schemas/patternSchemas.d.ts +708 -0
- package/dist/src/schemas/patternSchemas.js +294 -0
- package/dist/src/schemas/resourceSchemas.d.ts +24 -3530
- package/dist/src/schemas/resourceSchemas.js +24 -2011
- package/dist/src/schemas/storageSchemas.d.ts +93 -0
- package/dist/src/schemas/storageSchemas.js +119 -0
- package/dist/src/util/errorUtils.d.ts +1 -2
- package/dist/src/util/errorUtils.js +1 -15
- package/dist/src/validation/patterns.d.ts +9 -0
- package/dist/src/validation/patterns.js +9 -0
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { VALIDATION_PATTERNS, VALIDATION_MESSAGES, } from "../validation/patterns.js";
|
|
3
|
+
import { DATABASE_TYPES, VALID_MONITORING_INTERVALS, constIncludes, } from "./constants.js";
|
|
4
|
+
import { optionalOrDisabled, ResourceNameSchema, AppNameSchema, ExtraPropertySchema, } from "./baseSchemas.js";
|
|
5
|
+
// ─── Reusable database-specific validation schemas ───────────────────────────
|
|
6
|
+
/** Reusable backup retention validation. Range: 1-35 days. */
|
|
7
|
+
export const BackupRetentionSchema = z
|
|
8
|
+
.number()
|
|
9
|
+
.int(VALIDATION_MESSAGES.BACKUP_RETENTION.INTEGER)
|
|
10
|
+
.min(1, VALIDATION_MESSAGES.BACKUP_RETENTION.MIN)
|
|
11
|
+
.max(35, VALIDATION_MESSAGES.BACKUP_RETENTION.MAX);
|
|
12
|
+
/** Reusable monitoring interval validation. Must be one of: 0, 1, 5, 10, 15, 30, 60. */
|
|
13
|
+
export const MonitoringIntervalSchema = z
|
|
14
|
+
.number()
|
|
15
|
+
.int(VALIDATION_MESSAGES.MONITORING_INTERVAL.INTEGER)
|
|
16
|
+
.refine((val) => constIncludes(VALID_MONITORING_INTERVALS, val), {
|
|
17
|
+
message: VALIDATION_MESSAGES.MONITORING_INTERVAL.VALUES,
|
|
18
|
+
});
|
|
19
|
+
/** Reusable database port validation. Range: 1024-65535. */
|
|
20
|
+
export const DatabasePortSchema = z
|
|
21
|
+
.number()
|
|
22
|
+
.int(VALIDATION_MESSAGES.DATABASE.PORT.INTEGER)
|
|
23
|
+
.min(1024, VALIDATION_MESSAGES.DATABASE.PORT.MIN)
|
|
24
|
+
.max(65535, VALIDATION_MESSAGES.DATABASE.PORT.MAX);
|
|
25
|
+
// ─── Database type ───────────────────────────────────────────────────────────
|
|
26
|
+
export const DatabaseTypeSchema = z
|
|
27
|
+
.enum(DATABASE_TYPES)
|
|
28
|
+
.describe(`Database type must be one of: ${DATABASE_TYPES.join(", ")}`);
|
|
29
|
+
// ─── Nested configuration schemas ────────────────────────────────────────────
|
|
30
|
+
export const ProxyConfigSchema = z
|
|
31
|
+
.object({
|
|
32
|
+
maxConnections: z
|
|
33
|
+
.number()
|
|
34
|
+
.int(VALIDATION_MESSAGES.MAX_CONNECTIONS.INTEGER)
|
|
35
|
+
.min(1, VALIDATION_MESSAGES.MAX_CONNECTIONS.MIN)
|
|
36
|
+
.max(100, VALIDATION_MESSAGES.MAX_CONNECTIONS.MAX)
|
|
37
|
+
.optional(),
|
|
38
|
+
maxIdleConnections: z
|
|
39
|
+
.number()
|
|
40
|
+
.int(VALIDATION_MESSAGES.PROXY_CONFIG.MAX_IDLE_CONNECTIONS.INTEGER)
|
|
41
|
+
.min(0, VALIDATION_MESSAGES.PROXY_CONFIG.MAX_IDLE_CONNECTIONS.MIN)
|
|
42
|
+
.max(100, VALIDATION_MESSAGES.PROXY_CONFIG.MAX_IDLE_CONNECTIONS.MAX)
|
|
43
|
+
.optional(),
|
|
44
|
+
connectionBorrowTimeout: z
|
|
45
|
+
.number()
|
|
46
|
+
.int(VALIDATION_MESSAGES.PROXY_CONFIG.BORROW_TIMEOUT.INTEGER)
|
|
47
|
+
.min(1, VALIDATION_MESSAGES.PROXY_CONFIG.BORROW_TIMEOUT.MIN)
|
|
48
|
+
.max(3600, VALIDATION_MESSAGES.PROXY_CONFIG.BORROW_TIMEOUT.MAX)
|
|
49
|
+
.optional(),
|
|
50
|
+
requireTLS: z.boolean().optional(),
|
|
51
|
+
})
|
|
52
|
+
.strict()
|
|
53
|
+
.describe("RDS Proxy configuration");
|
|
54
|
+
export const ReadReplicaConfigSchema = z
|
|
55
|
+
.object({
|
|
56
|
+
instanceType: z.string().optional(),
|
|
57
|
+
availabilityZone: z.string().optional(),
|
|
58
|
+
})
|
|
59
|
+
.strict()
|
|
60
|
+
.describe("Read replica configuration");
|
|
61
|
+
export const SecretRotationConfigSchema = z
|
|
62
|
+
.object({
|
|
63
|
+
automaticallyAfterDays: z
|
|
64
|
+
.number()
|
|
65
|
+
.int(VALIDATION_MESSAGES.ROTATION.INTEGER)
|
|
66
|
+
.min(1, VALIDATION_MESSAGES.ROTATION.MIN)
|
|
67
|
+
.max(365, VALIDATION_MESSAGES.ROTATION.MAX)
|
|
68
|
+
.optional(),
|
|
69
|
+
})
|
|
70
|
+
.strict()
|
|
71
|
+
.describe("Secret rotation configuration");
|
|
72
|
+
export const CredentialsConfigSchema = z
|
|
73
|
+
.object({
|
|
74
|
+
username: z
|
|
75
|
+
.string()
|
|
76
|
+
.min(1, VALIDATION_MESSAGES.REQUIRED.USERNAME)
|
|
77
|
+
.max(63, VALIDATION_MESSAGES.USERNAME.MAX_LENGTH)
|
|
78
|
+
.optional(),
|
|
79
|
+
secretRotation: SecretRotationConfigSchema.optional(),
|
|
80
|
+
})
|
|
81
|
+
.strict()
|
|
82
|
+
.describe("Database credentials configuration");
|
|
83
|
+
export const ProxyConfigOrFalseSchema = optionalOrDisabled(ProxyConfigSchema);
|
|
84
|
+
export const ReadReplicaConfigOrFalseSchema = optionalOrDisabled(ReadReplicaConfigSchema);
|
|
85
|
+
// ─── Aurora-specific nested configuration ────────────────────────────────────
|
|
86
|
+
export const AuroraReaderConfigSchema = z
|
|
87
|
+
.object({
|
|
88
|
+
scaleWithWriter: z.boolean().optional(),
|
|
89
|
+
enableDatabaseInsights: z.boolean().optional(),
|
|
90
|
+
identifierSuffix: z
|
|
91
|
+
.string()
|
|
92
|
+
.min(1, VALIDATION_MESSAGES.IDENTIFIER_SUFFIX.REQUIRED)
|
|
93
|
+
.max(50, VALIDATION_MESSAGES.IDENTIFIER_SUFFIX.MAX_LENGTH)
|
|
94
|
+
.optional(),
|
|
95
|
+
availabilityZone: z.string().optional(),
|
|
96
|
+
})
|
|
97
|
+
.strict()
|
|
98
|
+
.describe("Configuration for a single Aurora reader instance");
|
|
99
|
+
export const AuroraWriterConfigSchema = z
|
|
100
|
+
.object({
|
|
101
|
+
enableDatabaseInsights: z.boolean().optional(),
|
|
102
|
+
identifierSuffix: z
|
|
103
|
+
.string()
|
|
104
|
+
.min(1, VALIDATION_MESSAGES.IDENTIFIER_SUFFIX.REQUIRED)
|
|
105
|
+
.max(50, VALIDATION_MESSAGES.IDENTIFIER_SUFFIX.MAX_LENGTH)
|
|
106
|
+
.optional(),
|
|
107
|
+
availabilityZone: z.string().optional(),
|
|
108
|
+
})
|
|
109
|
+
.strict()
|
|
110
|
+
.describe("Configuration for Aurora writer instance");
|
|
111
|
+
export const AuroraReadersConfigSchema = z
|
|
112
|
+
.object({
|
|
113
|
+
count: z
|
|
114
|
+
.number()
|
|
115
|
+
.int(VALIDATION_MESSAGES.READER.COUNT.INTEGER)
|
|
116
|
+
.min(0, VALIDATION_MESSAGES.READER.COUNT.MIN)
|
|
117
|
+
.max(15, VALIDATION_MESSAGES.READER.COUNT.MAX)
|
|
118
|
+
.optional(),
|
|
119
|
+
instances: z
|
|
120
|
+
.array(AuroraReaderConfigSchema)
|
|
121
|
+
.max(15, VALIDATION_MESSAGES.READER_INSTANCES.MAX)
|
|
122
|
+
.optional(),
|
|
123
|
+
defaultEnableDatabaseInsights: z.boolean().optional(),
|
|
124
|
+
})
|
|
125
|
+
.strict()
|
|
126
|
+
.refine((data) => !(data.count !== undefined && data.instances !== undefined), {
|
|
127
|
+
message: VALIDATION_MESSAGES.READER_INSTANCES.COUNT_OR_INSTANCES,
|
|
128
|
+
path: ["count"],
|
|
129
|
+
})
|
|
130
|
+
.describe("Aurora readers configuration");
|
|
131
|
+
export const AuroraReadersConfigOrFalseSchema = optionalOrDisabled(AuroraReadersConfigSchema);
|
|
132
|
+
// ─── Encryption key specification ────────────────────────────────────────────
|
|
133
|
+
export const AwsManagedKeySchema = z
|
|
134
|
+
.object({
|
|
135
|
+
awsManaged: z.literal(true),
|
|
136
|
+
})
|
|
137
|
+
.strict();
|
|
138
|
+
export const CustomerManagedKeyMarkerSchema = z
|
|
139
|
+
.object({
|
|
140
|
+
useCMK: z.literal(true),
|
|
141
|
+
})
|
|
142
|
+
.strict();
|
|
143
|
+
export const EncryptionKeySpecSchema = z.union([
|
|
144
|
+
AwsManagedKeySchema,
|
|
145
|
+
CustomerManagedKeyMarkerSchema,
|
|
146
|
+
]);
|
|
147
|
+
export const DatabaseInsightsConfigSchema = z
|
|
148
|
+
.object({
|
|
149
|
+
mode: z.enum(["standard", "advanced"]).optional(),
|
|
150
|
+
encryptionKey: EncryptionKeySpecSchema.optional(),
|
|
151
|
+
})
|
|
152
|
+
.strict()
|
|
153
|
+
.describe("Database Insights configuration");
|
|
154
|
+
export const DatabaseInsightsConfigOrFalseSchema = optionalOrDisabled(DatabaseInsightsConfigSchema);
|
|
155
|
+
export const EncryptionConfigSchema = z
|
|
156
|
+
.object({
|
|
157
|
+
storageKey: EncryptionKeySpecSchema.optional(),
|
|
158
|
+
})
|
|
159
|
+
.strict()
|
|
160
|
+
.describe("Encryption configuration (DESTRUCTIVE to change storageKey)");
|
|
161
|
+
// ─── Database resource plan ──────────────────────────────────────────────────
|
|
162
|
+
export const DatabaseResourcePlanSchema = z
|
|
163
|
+
.object({
|
|
164
|
+
name: ResourceNameSchema,
|
|
165
|
+
type: DatabaseTypeSchema,
|
|
166
|
+
databaseName: z.string().min(1, VALIDATION_MESSAGES.REQUIRED.DATABASE_NAME),
|
|
167
|
+
// Instance-specific props (only apply when type is "Instance")
|
|
168
|
+
instanceType: z.string().optional(),
|
|
169
|
+
multiAz: z.boolean().optional(),
|
|
170
|
+
publiclyAccessible: z.boolean().optional(),
|
|
171
|
+
enableSecretRotation: z.boolean().optional(),
|
|
172
|
+
// Shared props (Instance and Aurora)
|
|
173
|
+
databaseInsights: DatabaseInsightsConfigOrFalseSchema.optional(),
|
|
174
|
+
port: DatabasePortSchema.optional(),
|
|
175
|
+
deletionProtection: z.boolean().optional(),
|
|
176
|
+
// Nested configurations (presence-based: object = enabled, false = disabled)
|
|
177
|
+
proxy: ProxyConfigOrFalseSchema.optional(),
|
|
178
|
+
credentials: CredentialsConfigSchema.optional(),
|
|
179
|
+
// Instance-specific nested config
|
|
180
|
+
readReplica: ReadReplicaConfigOrFalseSchema.optional(),
|
|
181
|
+
// Shared encryption config (Instance and Aurora)
|
|
182
|
+
encryption: EncryptionConfigSchema.optional(),
|
|
183
|
+
// Aurora/GlobalAurora-specific props
|
|
184
|
+
writer: AuroraWriterConfigSchema.optional(),
|
|
185
|
+
readers: AuroraReadersConfigOrFalseSchema.optional(),
|
|
186
|
+
// Shared operational props (Instance, Aurora, GlobalAurora)
|
|
187
|
+
backupRetention: BackupRetentionSchema.optional(),
|
|
188
|
+
preferredMaintenanceWindow: z.string().optional(),
|
|
189
|
+
monitoringInterval: MonitoringIntervalSchema.optional(),
|
|
190
|
+
// GlobalAurora-specific props
|
|
191
|
+
primaryRegion: z.string().optional(),
|
|
192
|
+
secondaryRegions: z.array(z.string()).optional(),
|
|
193
|
+
globalClusterIdentifier: z.string().optional(),
|
|
194
|
+
enableGlobalWriteForwarding: z.boolean().optional(),
|
|
195
|
+
// Shared restore/snapshot props
|
|
196
|
+
snapshotIdentifier: z.string().optional(),
|
|
197
|
+
snapshotUsername: z.string().optional(),
|
|
198
|
+
// Round-trip preservation fields (set by AST parser, used by generator)
|
|
199
|
+
databaseEngine: z.enum(["postgresql", "mysql"]).optional(),
|
|
200
|
+
engineExpression: z.string().optional(),
|
|
201
|
+
variableName: z.string().optional(),
|
|
202
|
+
extraProperties: z.array(ExtraPropertySchema).optional(),
|
|
203
|
+
})
|
|
204
|
+
.strict();
|
|
205
|
+
// ─── Database generator schemas ──────────────────────────────────────────────
|
|
206
|
+
// Common fields shared across all database types
|
|
207
|
+
const DatabaseGeneratorBaseSchema = z
|
|
208
|
+
.object({
|
|
209
|
+
appName: AppNameSchema,
|
|
210
|
+
nameProvidedByFlag: z.boolean().optional(),
|
|
211
|
+
databaseName: z
|
|
212
|
+
.string()
|
|
213
|
+
.min(1, VALIDATION_MESSAGES.REQUIRED.DATABASE_NAME)
|
|
214
|
+
.max(63, VALIDATION_MESSAGES.MAX_LENGTH.DATABASE_NAME)
|
|
215
|
+
.regex(VALIDATION_PATTERNS.DATABASE_NAME, VALIDATION_MESSAGES.DATABASE_NAME),
|
|
216
|
+
resourceName: ResourceNameSchema.optional(),
|
|
217
|
+
connectionConfig: z
|
|
218
|
+
.object({
|
|
219
|
+
/** Connect to entire compute resources (legacy, cluster-level) */
|
|
220
|
+
connectToCompute: z.array(z.string()).optional(),
|
|
221
|
+
/** Connect to specific ECS services (format: "ClusterName/ServiceName") */
|
|
222
|
+
connectToServices: z.array(z.string()).optional(),
|
|
223
|
+
})
|
|
224
|
+
.strict()
|
|
225
|
+
.optional(),
|
|
226
|
+
// Shared fields (all database types)
|
|
227
|
+
databaseInsights: DatabaseInsightsConfigOrFalseSchema.optional(),
|
|
228
|
+
port: DatabasePortSchema.optional(),
|
|
229
|
+
proxy: ProxyConfigOrFalseSchema.optional(),
|
|
230
|
+
credentials: CredentialsConfigSchema.optional(),
|
|
231
|
+
encryption: EncryptionConfigSchema.optional(),
|
|
232
|
+
deletionProtection: z.boolean().optional(),
|
|
233
|
+
})
|
|
234
|
+
.strict();
|
|
235
|
+
// Type-specific field definitions shared between CLI and UI schemas
|
|
236
|
+
const instanceSpecificFields = {
|
|
237
|
+
databaseType: z.literal("Instance"),
|
|
238
|
+
instanceType: z.string().optional(),
|
|
239
|
+
multiAz: z.boolean().optional(),
|
|
240
|
+
readReplica: ReadReplicaConfigOrFalseSchema.optional(),
|
|
241
|
+
publiclyAccessible: z.boolean().optional(),
|
|
242
|
+
backupRetention: BackupRetentionSchema.optional(),
|
|
243
|
+
allocatedStorage: z.number().optional(),
|
|
244
|
+
snapshotIdentifier: z.string().optional(),
|
|
245
|
+
snapshotUsername: z.string().optional(),
|
|
246
|
+
};
|
|
247
|
+
const auroraSpecificFields = {
|
|
248
|
+
databaseType: z.literal("Aurora"),
|
|
249
|
+
writer: AuroraWriterConfigSchema.optional(),
|
|
250
|
+
readers: AuroraReadersConfigOrFalseSchema.optional(),
|
|
251
|
+
backupRetention: BackupRetentionSchema.optional(),
|
|
252
|
+
preferredMaintenanceWindow: z.string().optional(),
|
|
253
|
+
monitoringInterval: MonitoringIntervalSchema.optional(),
|
|
254
|
+
snapshotIdentifier: z.string().optional(),
|
|
255
|
+
snapshotUsername: z.string().optional(),
|
|
256
|
+
};
|
|
257
|
+
const globalAuroraSpecificFields = {
|
|
258
|
+
databaseType: z.literal("GlobalAurora"),
|
|
259
|
+
primaryRegion: z
|
|
260
|
+
.string()
|
|
261
|
+
.min(1, VALIDATION_MESSAGES.GLOBAL_AURORA.PRIMARY_REGION_REQUIRED),
|
|
262
|
+
secondaryRegions: z.array(z.string()).optional(),
|
|
263
|
+
globalClusterIdentifier: z.string().optional(),
|
|
264
|
+
enableGlobalWriteForwarding: z.boolean().optional(),
|
|
265
|
+
writer: AuroraWriterConfigSchema.optional(),
|
|
266
|
+
readers: AuroraReadersConfigOrFalseSchema.optional(),
|
|
267
|
+
backupRetention: BackupRetentionSchema.optional(),
|
|
268
|
+
preferredMaintenanceWindow: z.string().optional(),
|
|
269
|
+
monitoringInterval: MonitoringIntervalSchema.optional(),
|
|
270
|
+
snapshotIdentifier: z.string().optional(),
|
|
271
|
+
snapshotUsername: z.string().optional(),
|
|
272
|
+
};
|
|
273
|
+
const InstanceDatabaseGeneratorSchema = DatabaseGeneratorBaseSchema.extend(instanceSpecificFields).strict();
|
|
274
|
+
const AuroraDatabaseGeneratorSchema = DatabaseGeneratorBaseSchema.extend(auroraSpecificFields).strict();
|
|
275
|
+
const GlobalAuroraDatabaseGeneratorSchema = DatabaseGeneratorBaseSchema.extend(globalAuroraSpecificFields).strict();
|
|
276
|
+
/**
|
|
277
|
+
* Database generator schema using discriminated union.
|
|
278
|
+
* This ensures type-specific fields are only allowed for the correct database type:
|
|
279
|
+
* - Instance: instanceType, multiAz, readReplica
|
|
280
|
+
* - Aurora: writer, readers, backupRetention
|
|
281
|
+
* - GlobalAurora: primaryRegion (required!), secondaryRegions, enableGlobalWriteForwarding
|
|
282
|
+
*/
|
|
283
|
+
export const DatabaseGeneratorSchema = z.discriminatedUnion("databaseType", [
|
|
284
|
+
InstanceDatabaseGeneratorSchema,
|
|
285
|
+
AuroraDatabaseGeneratorSchema,
|
|
286
|
+
GlobalAuroraDatabaseGeneratorSchema,
|
|
287
|
+
]);
|
|
288
|
+
// Base schema with required resourceName for UI
|
|
289
|
+
const DatabaseGeneratorBaseSchemaFromUI = DatabaseGeneratorBaseSchema.extend({
|
|
290
|
+
resourceName: ResourceNameSchema,
|
|
291
|
+
}).strict();
|
|
292
|
+
/**
|
|
293
|
+
* Stricter schema for UI-originated database creation.
|
|
294
|
+
* Requires resourceName to prevent silent failures where
|
|
295
|
+
* the generator falls back to a default name that may conflict.
|
|
296
|
+
*/
|
|
297
|
+
const InstanceDatabaseGeneratorSchemaFromUI = DatabaseGeneratorBaseSchemaFromUI.extend(instanceSpecificFields).strict();
|
|
298
|
+
const AuroraDatabaseGeneratorSchemaFromUI = DatabaseGeneratorBaseSchemaFromUI.extend(auroraSpecificFields).strict();
|
|
299
|
+
const GlobalAuroraDatabaseGeneratorSchemaFromUI = DatabaseGeneratorBaseSchemaFromUI.extend(globalAuroraSpecificFields).strict();
|
|
300
|
+
export const DatabaseGeneratorSchemaFromUI = z.discriminatedUnion("databaseType", [
|
|
301
|
+
InstanceDatabaseGeneratorSchemaFromUI,
|
|
302
|
+
AuroraDatabaseGeneratorSchemaFromUI,
|
|
303
|
+
GlobalAuroraDatabaseGeneratorSchemaFromUI,
|
|
304
|
+
]);
|
|
305
|
+
/**
|
|
306
|
+
* Schema for adding RDS Proxy to an existing database.
|
|
307
|
+
* Used by the `fjall add proxy` command.
|
|
308
|
+
*/
|
|
309
|
+
export const AddProxyGeneratorSchema = z
|
|
310
|
+
.object({
|
|
311
|
+
appName: AppNameSchema,
|
|
312
|
+
databaseName: z.string().min(1, VALIDATION_MESSAGES.REQUIRED.DATABASE_NAME),
|
|
313
|
+
maxConnections: z
|
|
314
|
+
.number()
|
|
315
|
+
.int(VALIDATION_MESSAGES.MAX_CONNECTIONS.INTEGER)
|
|
316
|
+
.min(1, VALIDATION_MESSAGES.MAX_CONNECTIONS.MIN)
|
|
317
|
+
.max(100, VALIDATION_MESSAGES.MAX_CONNECTIONS.MAX)
|
|
318
|
+
.optional(),
|
|
319
|
+
maxIdleConnections: z
|
|
320
|
+
.number()
|
|
321
|
+
.int(VALIDATION_MESSAGES.PROXY_CONFIG.MAX_IDLE_CONNECTIONS.INTEGER)
|
|
322
|
+
.min(0, VALIDATION_MESSAGES.PROXY_CONFIG.MAX_IDLE_CONNECTIONS.MIN)
|
|
323
|
+
.max(100, VALIDATION_MESSAGES.PROXY_CONFIG.MAX_IDLE_CONNECTIONS.MAX)
|
|
324
|
+
.optional(),
|
|
325
|
+
connectionBorrowTimeout: z
|
|
326
|
+
.number()
|
|
327
|
+
.int(VALIDATION_MESSAGES.PROXY_CONFIG.BORROW_TIMEOUT.INTEGER)
|
|
328
|
+
.min(1, VALIDATION_MESSAGES.PROXY_CONFIG.BORROW_TIMEOUT.MIN)
|
|
329
|
+
.max(3600, VALIDATION_MESSAGES.PROXY_CONFIG.BORROW_TIMEOUT.MAX)
|
|
330
|
+
.optional(),
|
|
331
|
+
requireTLS: z.boolean().optional(),
|
|
332
|
+
nameProvidedByFlag: z.boolean().optional(),
|
|
333
|
+
})
|
|
334
|
+
.strict();
|
|
335
|
+
// ─── DynamoDB schemas ────────────────────────────────────────────────────────
|
|
336
|
+
const DYNAMODB_ATTRIBUTE_TYPES = ["S", "N", "B"];
|
|
337
|
+
const DynamoDBKeySchema = z
|
|
338
|
+
.object({
|
|
339
|
+
name: z.string(),
|
|
340
|
+
type: z.enum(DYNAMODB_ATTRIBUTE_TYPES),
|
|
341
|
+
})
|
|
342
|
+
.strict();
|
|
343
|
+
/**
|
|
344
|
+
* DynamoDB table resource plan schema (for OpenNext patterns)
|
|
345
|
+
*/
|
|
346
|
+
export const DynamoDBResourcePlanSchema = z
|
|
347
|
+
.object({
|
|
348
|
+
name: ResourceNameSchema,
|
|
349
|
+
partitionKey: DynamoDBKeySchema,
|
|
350
|
+
sortKey: DynamoDBKeySchema.optional(),
|
|
351
|
+
globalSecondaryIndexes: z
|
|
352
|
+
.array(z
|
|
353
|
+
.object({
|
|
354
|
+
indexName: z.string(),
|
|
355
|
+
partitionKey: DynamoDBKeySchema,
|
|
356
|
+
sortKey: DynamoDBKeySchema.optional(),
|
|
357
|
+
})
|
|
358
|
+
.strict())
|
|
359
|
+
.optional(),
|
|
360
|
+
ttlAttribute: z.string().optional(),
|
|
361
|
+
stream: z.boolean().optional(),
|
|
362
|
+
// Round-trip preservation
|
|
363
|
+
variableName: z.string().optional(),
|
|
364
|
+
extraProperties: z.array(ExtraPropertySchema).optional(),
|
|
365
|
+
})
|
|
366
|
+
.strict();
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* SQS queue resource plan schema (for OpenNext patterns)
|
|
4
|
+
*/
|
|
5
|
+
export declare const SQSResourcePlanSchema: z.ZodObject<{
|
|
6
|
+
name: z.ZodString;
|
|
7
|
+
queueType: z.ZodDefault<z.ZodEnum<{
|
|
8
|
+
standard: "standard";
|
|
9
|
+
fifo: "fifo";
|
|
10
|
+
}>>;
|
|
11
|
+
visibilityTimeout: z.ZodOptional<z.ZodNumber>;
|
|
12
|
+
retentionPeriod: z.ZodOptional<z.ZodNumber>;
|
|
13
|
+
contentBasedDeduplication: z.ZodOptional<z.ZodBoolean>;
|
|
14
|
+
variableName: z.ZodOptional<z.ZodString>;
|
|
15
|
+
extraProperties: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
16
|
+
key: z.ZodString;
|
|
17
|
+
sourceText: z.ZodString;
|
|
18
|
+
}, z.core.$strict>>>;
|
|
19
|
+
}, z.core.$strict>;
|
|
20
|
+
export type SQSResourcePlan = z.infer<typeof SQSResourcePlanSchema>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { VALIDATION_MESSAGES } from "../validation/patterns.js";
|
|
3
|
+
import { ResourceNameSchema, ExtraPropertySchema } from "./baseSchemas.js";
|
|
4
|
+
// ─── SQS resource plan ──────────────────────────────────────────────────────
|
|
5
|
+
/**
|
|
6
|
+
* SQS queue resource plan schema (for OpenNext patterns)
|
|
7
|
+
*/
|
|
8
|
+
export const SQSResourcePlanSchema = z
|
|
9
|
+
.object({
|
|
10
|
+
name: ResourceNameSchema,
|
|
11
|
+
queueType: z.enum(["standard", "fifo"]).default("standard"),
|
|
12
|
+
visibilityTimeout: z
|
|
13
|
+
.number()
|
|
14
|
+
.int(VALIDATION_MESSAGES.SQS.VISIBILITY_TIMEOUT.INTEGER)
|
|
15
|
+
.min(0, VALIDATION_MESSAGES.SQS.VISIBILITY_TIMEOUT.MIN)
|
|
16
|
+
.max(43200, VALIDATION_MESSAGES.SQS.VISIBILITY_TIMEOUT.MAX)
|
|
17
|
+
.optional(),
|
|
18
|
+
retentionPeriod: z
|
|
19
|
+
.number()
|
|
20
|
+
.int(VALIDATION_MESSAGES.SQS.RETENTION_PERIOD.INTEGER)
|
|
21
|
+
.min(60, VALIDATION_MESSAGES.SQS.RETENTION_PERIOD.MIN)
|
|
22
|
+
.max(1209600, VALIDATION_MESSAGES.SQS.RETENTION_PERIOD.MAX)
|
|
23
|
+
.optional(),
|
|
24
|
+
contentBasedDeduplication: z.boolean().optional(),
|
|
25
|
+
// Round-trip preservation
|
|
26
|
+
variableName: z.string().optional(),
|
|
27
|
+
extraProperties: z.array(ExtraPropertySchema).optional(),
|
|
28
|
+
})
|
|
29
|
+
.strict();
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const NatConfigSchema: z.ZodObject<{
|
|
3
|
+
count: z.ZodOptional<z.ZodNumber>;
|
|
4
|
+
}, z.core.$strict>;
|
|
5
|
+
export declare const NatConfigOrFalseSchema: z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
6
|
+
count: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
}, z.core.$strict>]>;
|
|
8
|
+
export declare const FlowLogConfigSchema: z.ZodObject<{
|
|
9
|
+
destination: z.ZodOptional<z.ZodEnum<{
|
|
10
|
+
cloudwatch: "cloudwatch";
|
|
11
|
+
s3: "s3";
|
|
12
|
+
}>>;
|
|
13
|
+
retentionDays: z.ZodOptional<z.ZodNumber>;
|
|
14
|
+
trafficType: z.ZodOptional<z.ZodEnum<{
|
|
15
|
+
ALL: "ALL";
|
|
16
|
+
ACCEPT: "ACCEPT";
|
|
17
|
+
REJECT: "REJECT";
|
|
18
|
+
}>>;
|
|
19
|
+
}, z.core.$strict>;
|
|
20
|
+
export declare const FlowLogConfigOrFalseSchema: z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
21
|
+
destination: z.ZodOptional<z.ZodEnum<{
|
|
22
|
+
cloudwatch: "cloudwatch";
|
|
23
|
+
s3: "s3";
|
|
24
|
+
}>>;
|
|
25
|
+
retentionDays: z.ZodOptional<z.ZodNumber>;
|
|
26
|
+
trafficType: z.ZodOptional<z.ZodEnum<{
|
|
27
|
+
ALL: "ALL";
|
|
28
|
+
ACCEPT: "ACCEPT";
|
|
29
|
+
REJECT: "REJECT";
|
|
30
|
+
}>>;
|
|
31
|
+
}, z.core.$strict>]>;
|
|
32
|
+
export declare const GatewayEndpointsConfigSchema: z.ZodObject<{
|
|
33
|
+
s3: z.ZodOptional<z.ZodBoolean>;
|
|
34
|
+
dynamodb: z.ZodOptional<z.ZodBoolean>;
|
|
35
|
+
}, z.core.$strict>;
|
|
36
|
+
export declare const GatewayEndpointsConfigOrFalseSchema: z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
37
|
+
s3: z.ZodOptional<z.ZodBoolean>;
|
|
38
|
+
dynamodb: z.ZodOptional<z.ZodBoolean>;
|
|
39
|
+
}, z.core.$strict>]>;
|
|
40
|
+
export declare const InterfaceEndpointsConfigSchema: z.ZodObject<{
|
|
41
|
+
ecr: z.ZodOptional<z.ZodBoolean>;
|
|
42
|
+
secretsManager: z.ZodOptional<z.ZodBoolean>;
|
|
43
|
+
kms: z.ZodOptional<z.ZodBoolean>;
|
|
44
|
+
cloudwatchLogs: z.ZodOptional<z.ZodBoolean>;
|
|
45
|
+
ssm: z.ZodOptional<z.ZodBoolean>;
|
|
46
|
+
sts: z.ZodOptional<z.ZodBoolean>;
|
|
47
|
+
}, z.core.$strict>;
|
|
48
|
+
export declare const InterfaceEndpointsConfigOrFalseSchema: z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
49
|
+
ecr: z.ZodOptional<z.ZodBoolean>;
|
|
50
|
+
secretsManager: z.ZodOptional<z.ZodBoolean>;
|
|
51
|
+
kms: z.ZodOptional<z.ZodBoolean>;
|
|
52
|
+
cloudwatchLogs: z.ZodOptional<z.ZodBoolean>;
|
|
53
|
+
ssm: z.ZodOptional<z.ZodBoolean>;
|
|
54
|
+
sts: z.ZodOptional<z.ZodBoolean>;
|
|
55
|
+
}, z.core.$strict>]>;
|
|
56
|
+
export declare const VpcEndpointsConfigSchema: z.ZodObject<{
|
|
57
|
+
gateway: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
58
|
+
s3: z.ZodOptional<z.ZodBoolean>;
|
|
59
|
+
dynamodb: z.ZodOptional<z.ZodBoolean>;
|
|
60
|
+
}, z.core.$strict>]>>;
|
|
61
|
+
interface: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
62
|
+
ecr: z.ZodOptional<z.ZodBoolean>;
|
|
63
|
+
secretsManager: z.ZodOptional<z.ZodBoolean>;
|
|
64
|
+
kms: z.ZodOptional<z.ZodBoolean>;
|
|
65
|
+
cloudwatchLogs: z.ZodOptional<z.ZodBoolean>;
|
|
66
|
+
ssm: z.ZodOptional<z.ZodBoolean>;
|
|
67
|
+
sts: z.ZodOptional<z.ZodBoolean>;
|
|
68
|
+
}, z.core.$strict>]>>;
|
|
69
|
+
}, z.core.$strict>;
|
|
70
|
+
export declare const VpcEndpointsConfigOrFalseSchema: z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
71
|
+
gateway: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
72
|
+
s3: z.ZodOptional<z.ZodBoolean>;
|
|
73
|
+
dynamodb: z.ZodOptional<z.ZodBoolean>;
|
|
74
|
+
}, z.core.$strict>]>>;
|
|
75
|
+
interface: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
76
|
+
ecr: z.ZodOptional<z.ZodBoolean>;
|
|
77
|
+
secretsManager: z.ZodOptional<z.ZodBoolean>;
|
|
78
|
+
kms: z.ZodOptional<z.ZodBoolean>;
|
|
79
|
+
cloudwatchLogs: z.ZodOptional<z.ZodBoolean>;
|
|
80
|
+
ssm: z.ZodOptional<z.ZodBoolean>;
|
|
81
|
+
sts: z.ZodOptional<z.ZodBoolean>;
|
|
82
|
+
}, z.core.$strict>]>>;
|
|
83
|
+
}, z.core.$strict>]>;
|
|
84
|
+
export declare const NetworkResourcePlanSchema: z.ZodObject<{
|
|
85
|
+
maxAzs: z.ZodOptional<z.ZodNumber>;
|
|
86
|
+
natGateways: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
87
|
+
count: z.ZodOptional<z.ZodNumber>;
|
|
88
|
+
}, z.core.$strict>]>>;
|
|
89
|
+
flowLogs: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
90
|
+
destination: z.ZodOptional<z.ZodEnum<{
|
|
91
|
+
cloudwatch: "cloudwatch";
|
|
92
|
+
s3: "s3";
|
|
93
|
+
}>>;
|
|
94
|
+
retentionDays: z.ZodOptional<z.ZodNumber>;
|
|
95
|
+
trafficType: z.ZodOptional<z.ZodEnum<{
|
|
96
|
+
ALL: "ALL";
|
|
97
|
+
ACCEPT: "ACCEPT";
|
|
98
|
+
REJECT: "REJECT";
|
|
99
|
+
}>>;
|
|
100
|
+
}, z.core.$strict>]>>;
|
|
101
|
+
vpcEndpoints: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
102
|
+
gateway: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
103
|
+
s3: z.ZodOptional<z.ZodBoolean>;
|
|
104
|
+
dynamodb: z.ZodOptional<z.ZodBoolean>;
|
|
105
|
+
}, z.core.$strict>]>>;
|
|
106
|
+
interface: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
107
|
+
ecr: z.ZodOptional<z.ZodBoolean>;
|
|
108
|
+
secretsManager: z.ZodOptional<z.ZodBoolean>;
|
|
109
|
+
kms: z.ZodOptional<z.ZodBoolean>;
|
|
110
|
+
cloudwatchLogs: z.ZodOptional<z.ZodBoolean>;
|
|
111
|
+
ssm: z.ZodOptional<z.ZodBoolean>;
|
|
112
|
+
sts: z.ZodOptional<z.ZodBoolean>;
|
|
113
|
+
}, z.core.$strict>]>>;
|
|
114
|
+
}, z.core.$strict>]>>;
|
|
115
|
+
cidrMask: z.ZodOptional<z.ZodNumber>;
|
|
116
|
+
}, z.core.$strict>;
|
|
117
|
+
/**
|
|
118
|
+
* Additional network resource plan schema for app.addNetwork() VPCs.
|
|
119
|
+
* Extends NetworkResourcePlanSchema with a required name field.
|
|
120
|
+
*/
|
|
121
|
+
export declare const AdditionalNetworkResourcePlanSchema: z.ZodObject<{
|
|
122
|
+
maxAzs: z.ZodOptional<z.ZodNumber>;
|
|
123
|
+
natGateways: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
124
|
+
count: z.ZodOptional<z.ZodNumber>;
|
|
125
|
+
}, z.core.$strict>]>>;
|
|
126
|
+
flowLogs: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
127
|
+
destination: z.ZodOptional<z.ZodEnum<{
|
|
128
|
+
cloudwatch: "cloudwatch";
|
|
129
|
+
s3: "s3";
|
|
130
|
+
}>>;
|
|
131
|
+
retentionDays: z.ZodOptional<z.ZodNumber>;
|
|
132
|
+
trafficType: z.ZodOptional<z.ZodEnum<{
|
|
133
|
+
ALL: "ALL";
|
|
134
|
+
ACCEPT: "ACCEPT";
|
|
135
|
+
REJECT: "REJECT";
|
|
136
|
+
}>>;
|
|
137
|
+
}, z.core.$strict>]>>;
|
|
138
|
+
vpcEndpoints: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
139
|
+
gateway: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
140
|
+
s3: z.ZodOptional<z.ZodBoolean>;
|
|
141
|
+
dynamodb: z.ZodOptional<z.ZodBoolean>;
|
|
142
|
+
}, z.core.$strict>]>>;
|
|
143
|
+
interface: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
144
|
+
ecr: z.ZodOptional<z.ZodBoolean>;
|
|
145
|
+
secretsManager: z.ZodOptional<z.ZodBoolean>;
|
|
146
|
+
kms: z.ZodOptional<z.ZodBoolean>;
|
|
147
|
+
cloudwatchLogs: z.ZodOptional<z.ZodBoolean>;
|
|
148
|
+
ssm: z.ZodOptional<z.ZodBoolean>;
|
|
149
|
+
sts: z.ZodOptional<z.ZodBoolean>;
|
|
150
|
+
}, z.core.$strict>]>>;
|
|
151
|
+
}, z.core.$strict>]>>;
|
|
152
|
+
cidrMask: z.ZodOptional<z.ZodNumber>;
|
|
153
|
+
name: z.ZodString;
|
|
154
|
+
}, z.core.$strict>;
|
|
155
|
+
/**
|
|
156
|
+
* Network configuration for App.getApp() options.
|
|
157
|
+
* - false: No network (S3-only apps)
|
|
158
|
+
* - object: Create VPC with specified configuration
|
|
159
|
+
*/
|
|
160
|
+
export declare const NetworkConfigSchema: z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
161
|
+
maxAzs: z.ZodOptional<z.ZodNumber>;
|
|
162
|
+
natGateways: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
163
|
+
count: z.ZodOptional<z.ZodNumber>;
|
|
164
|
+
}, z.core.$strict>]>>;
|
|
165
|
+
flowLogs: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
166
|
+
destination: z.ZodOptional<z.ZodEnum<{
|
|
167
|
+
cloudwatch: "cloudwatch";
|
|
168
|
+
s3: "s3";
|
|
169
|
+
}>>;
|
|
170
|
+
retentionDays: z.ZodOptional<z.ZodNumber>;
|
|
171
|
+
trafficType: z.ZodOptional<z.ZodEnum<{
|
|
172
|
+
ALL: "ALL";
|
|
173
|
+
ACCEPT: "ACCEPT";
|
|
174
|
+
REJECT: "REJECT";
|
|
175
|
+
}>>;
|
|
176
|
+
}, z.core.$strict>]>>;
|
|
177
|
+
vpcEndpoints: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
178
|
+
gateway: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
179
|
+
s3: z.ZodOptional<z.ZodBoolean>;
|
|
180
|
+
dynamodb: z.ZodOptional<z.ZodBoolean>;
|
|
181
|
+
}, z.core.$strict>]>>;
|
|
182
|
+
interface: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
183
|
+
ecr: z.ZodOptional<z.ZodBoolean>;
|
|
184
|
+
secretsManager: z.ZodOptional<z.ZodBoolean>;
|
|
185
|
+
kms: z.ZodOptional<z.ZodBoolean>;
|
|
186
|
+
cloudwatchLogs: z.ZodOptional<z.ZodBoolean>;
|
|
187
|
+
ssm: z.ZodOptional<z.ZodBoolean>;
|
|
188
|
+
sts: z.ZodOptional<z.ZodBoolean>;
|
|
189
|
+
}, z.core.$strict>]>>;
|
|
190
|
+
}, z.core.$strict>]>>;
|
|
191
|
+
cidrMask: z.ZodOptional<z.ZodNumber>;
|
|
192
|
+
}, z.core.$strict>]>;
|
|
193
|
+
/**
|
|
194
|
+
* Network name schema for additional VPCs.
|
|
195
|
+
* Must be PascalCase as it's used as a CDK construct ID.
|
|
196
|
+
*/
|
|
197
|
+
export declare const NetworkNameSchema: z.ZodString;
|
|
198
|
+
/**
|
|
199
|
+
* Network generator schema for configuring network infrastructure.
|
|
200
|
+
*
|
|
201
|
+
* Behaviour depends on whether networkName is provided:
|
|
202
|
+
* - With networkName: Adds an additional VPC via app.addNetwork()
|
|
203
|
+
* - Without networkName: Updates the primary network config in App.getApp()
|
|
204
|
+
*/
|
|
205
|
+
export declare const NetworkGeneratorSchema: z.ZodObject<{
|
|
206
|
+
appName: z.ZodString;
|
|
207
|
+
networkName: z.ZodOptional<z.ZodString>;
|
|
208
|
+
maxAzs: z.ZodOptional<z.ZodNumber>;
|
|
209
|
+
natGateways: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
210
|
+
count: z.ZodOptional<z.ZodNumber>;
|
|
211
|
+
}, z.core.$strict>]>>;
|
|
212
|
+
flowLogs: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
213
|
+
destination: z.ZodOptional<z.ZodEnum<{
|
|
214
|
+
cloudwatch: "cloudwatch";
|
|
215
|
+
s3: "s3";
|
|
216
|
+
}>>;
|
|
217
|
+
retentionDays: z.ZodOptional<z.ZodNumber>;
|
|
218
|
+
trafficType: z.ZodOptional<z.ZodEnum<{
|
|
219
|
+
ALL: "ALL";
|
|
220
|
+
ACCEPT: "ACCEPT";
|
|
221
|
+
REJECT: "REJECT";
|
|
222
|
+
}>>;
|
|
223
|
+
}, z.core.$strict>]>>;
|
|
224
|
+
vpcEndpoints: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
225
|
+
gateway: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
226
|
+
s3: z.ZodOptional<z.ZodBoolean>;
|
|
227
|
+
dynamodb: z.ZodOptional<z.ZodBoolean>;
|
|
228
|
+
}, z.core.$strict>]>>;
|
|
229
|
+
interface: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
230
|
+
ecr: z.ZodOptional<z.ZodBoolean>;
|
|
231
|
+
secretsManager: z.ZodOptional<z.ZodBoolean>;
|
|
232
|
+
kms: z.ZodOptional<z.ZodBoolean>;
|
|
233
|
+
cloudwatchLogs: z.ZodOptional<z.ZodBoolean>;
|
|
234
|
+
ssm: z.ZodOptional<z.ZodBoolean>;
|
|
235
|
+
sts: z.ZodOptional<z.ZodBoolean>;
|
|
236
|
+
}, z.core.$strict>]>>;
|
|
237
|
+
}, z.core.$strict>]>>;
|
|
238
|
+
}, z.core.$strict>;
|
|
239
|
+
export type NatConfig = z.infer<typeof NatConfigSchema>;
|
|
240
|
+
export type FlowLogConfig = z.infer<typeof FlowLogConfigSchema>;
|
|
241
|
+
export type GatewayEndpointsConfig = z.infer<typeof GatewayEndpointsConfigSchema>;
|
|
242
|
+
export type InterfaceEndpointsConfig = z.infer<typeof InterfaceEndpointsConfigSchema>;
|
|
243
|
+
export type VpcEndpointsConfig = z.infer<typeof VpcEndpointsConfigSchema>;
|
|
244
|
+
export type NetworkResourcePlan = z.infer<typeof NetworkResourcePlanSchema>;
|
|
245
|
+
export type AdditionalNetworkResourcePlan = z.infer<typeof AdditionalNetworkResourcePlanSchema>;
|
|
246
|
+
export type NetworkGeneratorOptions = z.infer<typeof NetworkGeneratorSchema>;
|