@venturekit/core 0.0.0-dev.20260307234057

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,54 @@
1
+ /**
2
+ * VentureKit Security Configuration Types
3
+ *
4
+ * OAuth scopes, app clients, and authentication settings.
5
+ * Separated from base.ts to keep config files manageable.
6
+ */
7
+ /**
8
+ * OAuth scope definition
9
+ */
10
+ export interface OAuthScope {
11
+ /** Scope name (e.g., 'projects.read', 'users.write') */
12
+ name: string;
13
+ /** Scope description */
14
+ description: string;
15
+ }
16
+ /**
17
+ * App client configuration
18
+ */
19
+ export interface AppClient {
20
+ /** Client name (e.g., 'web-app', 'mobile-app', 'admin-dashboard') */
21
+ name: string;
22
+ /** Allowed OAuth scopes for this client */
23
+ allowedScopes: string[];
24
+ /** Whether this client supports refresh tokens */
25
+ supportsRefreshTokens: boolean;
26
+ /** Generate client secret (true for server-side, false for SPA/mobile) */
27
+ generateSecret?: boolean;
28
+ /** Access token validity in hours (default: 1) */
29
+ accessTokenValidityHours?: number;
30
+ /** Refresh token validity in days (default: 30) */
31
+ refreshTokenValidityDays?: number;
32
+ }
33
+ /**
34
+ * Security configuration - authentication and authorization settings
35
+ *
36
+ * Defined ONCE and shared across all environments.
37
+ * Keep separate from base.ts to avoid config file bloat.
38
+ */
39
+ export interface SecurityConfig {
40
+ /** All available OAuth scopes for this project */
41
+ scopes: OAuthScope[];
42
+ /** App clients and their allowed scopes */
43
+ appClients: AppClient[];
44
+ /** MFA setting (default: 'optional') */
45
+ mfa?: 'off' | 'optional' | 'required';
46
+ /** Password policy */
47
+ passwordPolicy?: {
48
+ minLength?: number;
49
+ requireUppercase?: boolean;
50
+ requireLowercase?: boolean;
51
+ requireNumbers?: boolean;
52
+ requireSymbols?: boolean;
53
+ };
54
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * VentureKit Security Configuration Types
4
+ *
5
+ * OAuth scopes, app clients, and authentication settings.
6
+ * Separated from base.ts to keep config files manageable.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvc2VjdXJpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztHQUtHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWZW50dXJlS2l0IFNlY3VyaXR5IENvbmZpZ3VyYXRpb24gVHlwZXNcbiAqIFxuICogT0F1dGggc2NvcGVzLCBhcHAgY2xpZW50cywgYW5kIGF1dGhlbnRpY2F0aW9uIHNldHRpbmdzLlxuICogU2VwYXJhdGVkIGZyb20gYmFzZS50cyB0byBrZWVwIGNvbmZpZyBmaWxlcyBtYW5hZ2VhYmxlLlxuICovXG5cbi8qKlxuICogT0F1dGggc2NvcGUgZGVmaW5pdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoU2NvcGUge1xuICAvKiogU2NvcGUgbmFtZSAoZS5nLiwgJ3Byb2plY3RzLnJlYWQnLCAndXNlcnMud3JpdGUnKSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTY29wZSBkZXNjcmlwdGlvbiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFwcCBjbGllbnQgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcENsaWVudCB7XG4gIC8qKiBDbGllbnQgbmFtZSAoZS5nLiwgJ3dlYi1hcHAnLCAnbW9iaWxlLWFwcCcsICdhZG1pbi1kYXNoYm9hcmQnKSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBBbGxvd2VkIE9BdXRoIHNjb3BlcyBmb3IgdGhpcyBjbGllbnQgKi9cbiAgYWxsb3dlZFNjb3Blczogc3RyaW5nW107XG4gIC8qKiBXaGV0aGVyIHRoaXMgY2xpZW50IHN1cHBvcnRzIHJlZnJlc2ggdG9rZW5zICovXG4gIHN1cHBvcnRzUmVmcmVzaFRva2VuczogYm9vbGVhbjtcbiAgLyoqIEdlbmVyYXRlIGNsaWVudCBzZWNyZXQgKHRydWUgZm9yIHNlcnZlci1zaWRlLCBmYWxzZSBmb3IgU1BBL21vYmlsZSkgKi9cbiAgZ2VuZXJhdGVTZWNyZXQ/OiBib29sZWFuO1xuICAvKiogQWNjZXNzIHRva2VuIHZhbGlkaXR5IGluIGhvdXJzIChkZWZhdWx0OiAxKSAqL1xuICBhY2Nlc3NUb2tlblZhbGlkaXR5SG91cnM/OiBudW1iZXI7XG4gIC8qKiBSZWZyZXNoIHRva2VuIHZhbGlkaXR5IGluIGRheXMgKGRlZmF1bHQ6IDMwKSAqL1xuICByZWZyZXNoVG9rZW5WYWxpZGl0eURheXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogU2VjdXJpdHkgY29uZmlndXJhdGlvbiAtIGF1dGhlbnRpY2F0aW9uIGFuZCBhdXRob3JpemF0aW9uIHNldHRpbmdzXG4gKiBcbiAqIERlZmluZWQgT05DRSBhbmQgc2hhcmVkIGFjcm9zcyBhbGwgZW52aXJvbm1lbnRzLlxuICogS2VlcCBzZXBhcmF0ZSBmcm9tIGJhc2UudHMgdG8gYXZvaWQgY29uZmlnIGZpbGUgYmxvYXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJpdHlDb25maWcge1xuICAvKiogQWxsIGF2YWlsYWJsZSBPQXV0aCBzY29wZXMgZm9yIHRoaXMgcHJvamVjdCAqL1xuICBzY29wZXM6IE9BdXRoU2NvcGVbXTtcbiAgXG4gIC8qKiBBcHAgY2xpZW50cyBhbmQgdGhlaXIgYWxsb3dlZCBzY29wZXMgKi9cbiAgYXBwQ2xpZW50czogQXBwQ2xpZW50W107XG4gIFxuICAvKiogTUZBIHNldHRpbmcgKGRlZmF1bHQ6ICdvcHRpb25hbCcpICovXG4gIG1mYT86ICdvZmYnIHwgJ29wdGlvbmFsJyB8ICdyZXF1aXJlZCc7XG4gIFxuICAvKiogUGFzc3dvcmQgcG9saWN5ICovXG4gIHBhc3N3b3JkUG9saWN5Pzoge1xuICAgIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgICByZXF1aXJlVXBwZXJjYXNlPzogYm9vbGVhbjtcbiAgICByZXF1aXJlTG93ZXJjYXNlPzogYm9vbGVhbjtcbiAgICByZXF1aXJlTnVtYmVycz86IGJvb2xlYW47XG4gICAgcmVxdWlyZVN5bWJvbHM/OiBib29sZWFuO1xuICB9O1xufVxuIl19
@@ -0,0 +1,65 @@
1
+ /**
2
+ * VPC Environment Configuration
3
+ *
4
+ * Controls networking per environment.
5
+ * All fields are REQUIRED - no implicit defaults at the type level.
6
+ */
7
+ /**
8
+ * Subnet configuration
9
+ */
10
+ export interface SubnetConfig {
11
+ /** CIDR mask for subnets (e.g., 24 for /24) */
12
+ cidrMask: number;
13
+ }
14
+ /**
15
+ * Security group rule
16
+ */
17
+ export interface SecurityGroupRule {
18
+ /** Protocol (tcp, udp, icmp, -1 for all) */
19
+ protocol: string;
20
+ /** Port range start */
21
+ fromPort: number;
22
+ /** Port range end */
23
+ toPort: number;
24
+ /** CIDR blocks to allow */
25
+ cidrBlocks?: string[];
26
+ /** Description */
27
+ description?: string;
28
+ }
29
+ /**
30
+ * VPC configuration
31
+ *
32
+ * All fields required - use presets or explicit values.
33
+ */
34
+ export interface VpcEnvConfig {
35
+ /** Number of availability zones (1-3) */
36
+ maxAzs: number;
37
+ /** Number of NAT gateways (0 = no private subnet internet access) */
38
+ natGateways: number;
39
+ /** CIDR block for the VPC */
40
+ cidr: string;
41
+ /** Enable VPC flow logs for network monitoring */
42
+ flowLogsEnabled: boolean;
43
+ /** Flow logs retention in days */
44
+ flowLogsRetentionDays: number;
45
+ /** Public subnet configuration */
46
+ publicSubnets: SubnetConfig;
47
+ /** Private subnet configuration (for Lambda, RDS) */
48
+ privateSubnets: SubnetConfig;
49
+ /** Isolated subnet configuration (no internet, for RDS) */
50
+ isolatedSubnets: SubnetConfig | undefined;
51
+ /** Enable VPC endpoints for AWS services (S3, DynamoDB, etc.) */
52
+ enableVpcEndpoints: boolean;
53
+ /** Additional ingress rules for Lambda security group */
54
+ lambdaSecurityGroupIngress: SecurityGroupRule[];
55
+ /** Additional egress rules for Lambda security group */
56
+ lambdaSecurityGroupEgress: SecurityGroupRule[];
57
+ }
58
+ /**
59
+ * VPC configuration input (for user overrides)
60
+ */
61
+ export type VpcEnvConfigInput = Partial<Omit<VpcEnvConfig, 'publicSubnets' | 'privateSubnets' | 'isolatedSubnets'>> & {
62
+ publicSubnets?: Partial<SubnetConfig>;
63
+ privateSubnets?: Partial<SubnetConfig>;
64
+ isolatedSubnets?: Partial<SubnetConfig>;
65
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * VPC Environment Configuration
4
+ *
5
+ * Controls networking per environment.
6
+ * All fields are REQUIRED - no implicit defaults at the type level.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3ZwYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZQQyBFbnZpcm9ubWVudCBDb25maWd1cmF0aW9uXG4gKiBcbiAqIENvbnRyb2xzIG5ldHdvcmtpbmcgcGVyIGVudmlyb25tZW50LlxuICogQWxsIGZpZWxkcyBhcmUgUkVRVUlSRUQgLSBubyBpbXBsaWNpdCBkZWZhdWx0cyBhdCB0aGUgdHlwZSBsZXZlbC5cbiAqL1xuXG4vKipcbiAqIFN1Ym5ldCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VibmV0Q29uZmlnIHtcbiAgLyoqIENJRFIgbWFzayBmb3Igc3VibmV0cyAoZS5nLiwgMjQgZm9yIC8yNCkgKi9cbiAgY2lkck1hc2s6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBTZWN1cml0eSBncm91cCBydWxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJpdHlHcm91cFJ1bGUge1xuICAvKiogUHJvdG9jb2wgKHRjcCwgdWRwLCBpY21wLCAtMSBmb3IgYWxsKSAqL1xuICBwcm90b2NvbDogc3RyaW5nO1xuICAvKiogUG9ydCByYW5nZSBzdGFydCAqL1xuICBmcm9tUG9ydDogbnVtYmVyO1xuICAvKiogUG9ydCByYW5nZSBlbmQgKi9cbiAgdG9Qb3J0OiBudW1iZXI7XG4gIC8qKiBDSURSIGJsb2NrcyB0byBhbGxvdyAqL1xuICBjaWRyQmxvY2tzPzogc3RyaW5nW107XG4gIC8qKiBEZXNjcmlwdGlvbiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBWUEMgY29uZmlndXJhdGlvblxuICogXG4gKiBBbGwgZmllbGRzIHJlcXVpcmVkIC0gdXNlIHByZXNldHMgb3IgZXhwbGljaXQgdmFsdWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY0VudkNvbmZpZyB7XG4gIC8qKiBOdW1iZXIgb2YgYXZhaWxhYmlsaXR5IHpvbmVzICgxLTMpICovXG4gIG1heEF6czogbnVtYmVyO1xuICBcbiAgLyoqIE51bWJlciBvZiBOQVQgZ2F0ZXdheXMgKDAgPSBubyBwcml2YXRlIHN1Ym5ldCBpbnRlcm5ldCBhY2Nlc3MpICovXG4gIG5hdEdhdGV3YXlzOiBudW1iZXI7XG4gIFxuICAvKiogQ0lEUiBibG9jayBmb3IgdGhlIFZQQyAqL1xuICBjaWRyOiBzdHJpbmc7XG4gIFxuICAvKiogRW5hYmxlIFZQQyBmbG93IGxvZ3MgZm9yIG5ldHdvcmsgbW9uaXRvcmluZyAqL1xuICBmbG93TG9nc0VuYWJsZWQ6IGJvb2xlYW47XG4gIFxuICAvKiogRmxvdyBsb2dzIHJldGVudGlvbiBpbiBkYXlzICovXG4gIGZsb3dMb2dzUmV0ZW50aW9uRGF5czogbnVtYmVyO1xuICBcbiAgLyoqIFB1YmxpYyBzdWJuZXQgY29uZmlndXJhdGlvbiAqL1xuICBwdWJsaWNTdWJuZXRzOiBTdWJuZXRDb25maWc7XG4gIFxuICAvKiogUHJpdmF0ZSBzdWJuZXQgY29uZmlndXJhdGlvbiAoZm9yIExhbWJkYSwgUkRTKSAqL1xuICBwcml2YXRlU3VibmV0czogU3VibmV0Q29uZmlnO1xuICBcbiAgLyoqIElzb2xhdGVkIHN1Ym5ldCBjb25maWd1cmF0aW9uIChubyBpbnRlcm5ldCwgZm9yIFJEUykgKi9cbiAgaXNvbGF0ZWRTdWJuZXRzOiBTdWJuZXRDb25maWcgfCB1bmRlZmluZWQ7XG4gIFxuICAvKiogRW5hYmxlIFZQQyBlbmRwb2ludHMgZm9yIEFXUyBzZXJ2aWNlcyAoUzMsIER5bmFtb0RCLCBldGMuKSAqL1xuICBlbmFibGVWcGNFbmRwb2ludHM6IGJvb2xlYW47XG4gIFxuICAvKiogQWRkaXRpb25hbCBpbmdyZXNzIHJ1bGVzIGZvciBMYW1iZGEgc2VjdXJpdHkgZ3JvdXAgKi9cbiAgbGFtYmRhU2VjdXJpdHlHcm91cEluZ3Jlc3M6IFNlY3VyaXR5R3JvdXBSdWxlW107XG4gIFxuICAvKiogQWRkaXRpb25hbCBlZ3Jlc3MgcnVsZXMgZm9yIExhbWJkYSBzZWN1cml0eSBncm91cCAqL1xuICBsYW1iZGFTZWN1cml0eUdyb3VwRWdyZXNzOiBTZWN1cml0eUdyb3VwUnVsZVtdO1xufVxuXG4vKipcbiAqIFZQQyBjb25maWd1cmF0aW9uIGlucHV0IChmb3IgdXNlciBvdmVycmlkZXMpXG4gKi9cbmV4cG9ydCB0eXBlIFZwY0VudkNvbmZpZ0lucHV0ID0gUGFydGlhbDxPbWl0PFZwY0VudkNvbmZpZywgJ3B1YmxpY1N1Ym5ldHMnIHwgJ3ByaXZhdGVTdWJuZXRzJyB8ICdpc29sYXRlZFN1Ym5ldHMnPj4gJiB7XG4gIHB1YmxpY1N1Ym5ldHM/OiBQYXJ0aWFsPFN1Ym5ldENvbmZpZz47XG4gIHByaXZhdGVTdWJuZXRzPzogUGFydGlhbDxTdWJuZXRDb25maWc+O1xuICBpc29sYXRlZFN1Ym5ldHM/OiBQYXJ0aWFsPFN1Ym5ldENvbmZpZz47XG59O1xuIl19
@@ -0,0 +1,24 @@
1
+ /**
2
+ * VentureKit WebSocket Configuration Types
3
+ *
4
+ * WebSocket API Gateway configuration for real-time features.
5
+ */
6
+ /**
7
+ * WebSocket configuration
8
+ */
9
+ export interface WebSocketEnvConfig {
10
+ /** Enable WebSocket API (default: false) */
11
+ enabled: boolean;
12
+ /** Route selection expression (default: '$request.body.action') */
13
+ routeSelectionExpression: string;
14
+ /** Idle connection timeout in seconds (default: 600, max: 7200) */
15
+ idleTimeoutSec: number;
16
+ /** Throttle rate limit (messages per second) */
17
+ throttleRateLimit: number;
18
+ /** Throttle burst limit */
19
+ throttleBurstLimit: number;
20
+ }
21
+ /**
22
+ * WebSocket configuration input (for user overrides)
23
+ */
24
+ export type WebSocketEnvConfigInput = Partial<WebSocketEnvConfig>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * VentureKit WebSocket Configuration Types
4
+ *
5
+ * WebSocket API Gateway configuration for real-time features.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3dlYnNvY2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVmVudHVyZUtpdCBXZWJTb2NrZXQgQ29uZmlndXJhdGlvbiBUeXBlc1xuICogXG4gKiBXZWJTb2NrZXQgQVBJIEdhdGV3YXkgY29uZmlndXJhdGlvbiBmb3IgcmVhbC10aW1lIGZlYXR1cmVzLlxuICovXG5cbi8qKlxuICogV2ViU29ja2V0IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJTb2NrZXRFbnZDb25maWcge1xuICAvKiogRW5hYmxlIFdlYlNvY2tldCBBUEkgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICBlbmFibGVkOiBib29sZWFuO1xuICBcbiAgLyoqIFJvdXRlIHNlbGVjdGlvbiBleHByZXNzaW9uIChkZWZhdWx0OiAnJHJlcXVlc3QuYm9keS5hY3Rpb24nKSAqL1xuICByb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb246IHN0cmluZztcbiAgXG4gIC8qKiBJZGxlIGNvbm5lY3Rpb24gdGltZW91dCBpbiBzZWNvbmRzIChkZWZhdWx0OiA2MDAsIG1heDogNzIwMCkgKi9cbiAgaWRsZVRpbWVvdXRTZWM6IG51bWJlcjtcbiAgXG4gIC8qKiBUaHJvdHRsZSByYXRlIGxpbWl0IChtZXNzYWdlcyBwZXIgc2Vjb25kKSAqL1xuICB0aHJvdHRsZVJhdGVMaW1pdDogbnVtYmVyO1xuICBcbiAgLyoqIFRocm90dGxlIGJ1cnN0IGxpbWl0ICovXG4gIHRocm90dGxlQnVyc3RMaW1pdDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFdlYlNvY2tldCBjb25maWd1cmF0aW9uIGlucHV0IChmb3IgdXNlciBvdmVycmlkZXMpXG4gKi9cbmV4cG9ydCB0eXBlIFdlYlNvY2tldEVudkNvbmZpZ0lucHV0ID0gUGFydGlhbDxXZWJTb2NrZXRFbnZDb25maWc+O1xuIl19
@@ -0,0 +1,41 @@
1
+ /**
2
+ * VentureKit Configuration Validation
3
+ *
4
+ * Validates configuration before it reaches infrastructure.
5
+ * Catches errors early with clear, actionable messages.
6
+ */
7
+ import type { BaseConfig } from './types/base';
8
+ import type { SecurityConfig } from './types/security';
9
+ import type { EnvConfigInput, Environment } from './types/env';
10
+ /**
11
+ * Validation error
12
+ */
13
+ export declare class ValidationError extends Error {
14
+ readonly field: string;
15
+ readonly message: string;
16
+ readonly value?: unknown | undefined;
17
+ constructor(field: string, message: string, value?: unknown | undefined);
18
+ }
19
+ /**
20
+ * Validation result
21
+ */
22
+ export interface ValidationResult {
23
+ valid: boolean;
24
+ errors: ValidationError[];
25
+ }
26
+ /**
27
+ * Validate base configuration
28
+ */
29
+ export declare function validateBaseConfig(config: BaseConfig): ValidationResult;
30
+ /**
31
+ * Validate security configuration
32
+ */
33
+ export declare function validateSecurityConfig(config: SecurityConfig): ValidationResult;
34
+ /**
35
+ * Validate environment configuration input
36
+ */
37
+ export declare function validateEnvConfigInput(env: Environment, config: EnvConfigInput): ValidationResult;
38
+ /**
39
+ * Assert validation passes, throw if not
40
+ */
41
+ export declare function assertValid(result: ValidationResult): void;
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ /**
3
+ * VentureKit Configuration Validation
4
+ *
5
+ * Validates configuration before it reaches infrastructure.
6
+ * Catches errors early with clear, actionable messages.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ValidationError = void 0;
10
+ exports.validateBaseConfig = validateBaseConfig;
11
+ exports.validateSecurityConfig = validateSecurityConfig;
12
+ exports.validateEnvConfigInput = validateEnvConfigInput;
13
+ exports.assertValid = assertValid;
14
+ /**
15
+ * Validation error
16
+ */
17
+ class ValidationError extends Error {
18
+ field;
19
+ message;
20
+ value;
21
+ constructor(field, message, value) {
22
+ super(`${field}: ${message}`);
23
+ this.field = field;
24
+ this.message = message;
25
+ this.value = value;
26
+ this.name = 'ValidationError';
27
+ }
28
+ }
29
+ exports.ValidationError = ValidationError;
30
+ /**
31
+ * Create a successful validation result
32
+ */
33
+ function ok() {
34
+ return { valid: true, errors: [] };
35
+ }
36
+ /**
37
+ * Create a failed validation result
38
+ */
39
+ function fail(errors) {
40
+ return { valid: false, errors };
41
+ }
42
+ /**
43
+ * Merge validation results
44
+ */
45
+ function merge(...results) {
46
+ const errors = results.flatMap(r => r.errors);
47
+ return { valid: errors.length === 0, errors };
48
+ }
49
+ /**
50
+ * Validate base configuration
51
+ */
52
+ function validateBaseConfig(config) {
53
+ const errors = [];
54
+ // Name validation
55
+ if (!config.name) {
56
+ errors.push(new ValidationError('name', 'Project name is required'));
57
+ }
58
+ else if (!/^[a-z][a-z0-9-]*$/.test(config.name)) {
59
+ errors.push(new ValidationError('name', 'Project name must start with lowercase letter and contain only lowercase letters, numbers, and hyphens', config.name));
60
+ }
61
+ else if (config.name.length > 32) {
62
+ errors.push(new ValidationError('name', 'Project name must be 32 characters or less', config.name));
63
+ }
64
+ // Display name
65
+ if (!config.displayName) {
66
+ errors.push(new ValidationError('displayName', 'Display name is required'));
67
+ }
68
+ // Region validation
69
+ if (!config.region) {
70
+ errors.push(new ValidationError('region', 'AWS region is required'));
71
+ }
72
+ else if (!/^[a-z]{2}-[a-z]+-\d$/.test(config.region)) {
73
+ errors.push(new ValidationError('region', 'Invalid AWS region format (e.g., eu-west-1)', config.region));
74
+ }
75
+ return errors.length > 0 ? fail(errors) : ok();
76
+ }
77
+ /**
78
+ * Validate security configuration
79
+ */
80
+ function validateSecurityConfig(config) {
81
+ const errors = [];
82
+ // Scopes validation
83
+ if (!config.scopes || config.scopes.length === 0) {
84
+ errors.push(new ValidationError('scopes', 'At least one OAuth scope is required'));
85
+ }
86
+ else {
87
+ config.scopes.forEach((scope, i) => {
88
+ if (!scope.name) {
89
+ errors.push(new ValidationError(`scopes[${i}].name`, 'Scope name is required'));
90
+ }
91
+ else if (!/^[a-z][a-z0-9.]*$/.test(scope.name)) {
92
+ errors.push(new ValidationError(`scopes[${i}].name`, 'Scope name must be lowercase with dots (e.g., projects.read)', scope.name));
93
+ }
94
+ });
95
+ }
96
+ // App clients validation
97
+ if (!config.appClients || config.appClients.length === 0) {
98
+ errors.push(new ValidationError('appClients', 'At least one app client is required'));
99
+ }
100
+ else {
101
+ const scopeNames = new Set(config.scopes?.map(s => s.name) || []);
102
+ config.appClients.forEach((client, i) => {
103
+ if (!client.name) {
104
+ errors.push(new ValidationError(`appClients[${i}].name`, 'Client name is required'));
105
+ }
106
+ client.allowedScopes.forEach((scope, j) => {
107
+ if (!scopeNames.has(scope)) {
108
+ errors.push(new ValidationError(`appClients[${i}].allowedScopes[${j}]`, `Scope "${scope}" is not defined in scopes`, scope));
109
+ }
110
+ });
111
+ });
112
+ }
113
+ return errors.length > 0 ? fail(errors) : ok();
114
+ }
115
+ /**
116
+ * Validate environment configuration input
117
+ */
118
+ function validateEnvConfigInput(env, config) {
119
+ const errors = [];
120
+ // Lambda validation
121
+ if (config.lambda) {
122
+ if (config.lambda.memoryMb !== undefined) {
123
+ if (config.lambda.memoryMb < 128 || config.lambda.memoryMb > 10240) {
124
+ errors.push(new ValidationError(`${env}.lambda.memoryMb`, 'Lambda memory must be between 128 and 10240 MB', config.lambda.memoryMb));
125
+ }
126
+ }
127
+ if (config.lambda.timeoutSec !== undefined) {
128
+ if (config.lambda.timeoutSec < 1 || config.lambda.timeoutSec > 900) {
129
+ errors.push(new ValidationError(`${env}.lambda.timeoutSec`, 'Lambda timeout must be between 1 and 900 seconds', config.lambda.timeoutSec));
130
+ }
131
+ }
132
+ }
133
+ // API validation
134
+ if (config.api) {
135
+ if (config.api.throttleRateLimit !== undefined && config.api.throttleRateLimit < 1) {
136
+ errors.push(new ValidationError(`${env}.api.throttleRateLimit`, 'API rate limit must be at least 1', config.api.throttleRateLimit));
137
+ }
138
+ if (config.api.throttleBurstLimit !== undefined && config.api.throttleBurstLimit < 1) {
139
+ errors.push(new ValidationError(`${env}.api.throttleBurstLimit`, 'API burst limit must be at least 1', config.api.throttleBurstLimit));
140
+ }
141
+ }
142
+ // VPC validation
143
+ if (config.vpc) {
144
+ if (config.vpc.maxAzs !== undefined && (config.vpc.maxAzs < 1 || config.vpc.maxAzs > 3)) {
145
+ errors.push(new ValidationError(`${env}.vpc.maxAzs`, 'VPC must have 1-3 availability zones', config.vpc.maxAzs));
146
+ }
147
+ if (config.vpc.natGateways !== undefined && config.vpc.natGateways < 0) {
148
+ errors.push(new ValidationError(`${env}.vpc.natGateways`, 'NAT gateways cannot be negative', config.vpc.natGateways));
149
+ }
150
+ }
151
+ return errors.length > 0 ? fail(errors) : ok();
152
+ }
153
+ /**
154
+ * Assert validation passes, throw if not
155
+ */
156
+ function assertValid(result) {
157
+ if (!result.valid) {
158
+ const messages = result.errors.map(e => ` - ${e.field}: ${e.message}`).join('\n');
159
+ throw new Error(`Configuration validation failed:\n${messages}`);
160
+ }
161
+ }
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmFsaWRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztHQUtHOzs7QUFxREgsZ0RBcUNDO0FBS0Qsd0RBNENDO0FBS0Qsd0RBaUVDO0FBS0Qsa0NBS0M7QUFyTkQ7O0dBRUc7QUFDSCxNQUFhLGVBQWdCLFNBQVEsS0FBSztJQUV0QjtJQUNBO0lBQ0E7SUFIbEIsWUFDa0IsS0FBYSxFQUNiLE9BQWUsRUFDZixLQUFlO1FBRS9CLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBSmQsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFVO1FBRy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBVEQsMENBU0M7QUFVRDs7R0FFRztBQUNILFNBQVMsRUFBRTtJQUNULE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLElBQUksQ0FBQyxNQUF5QjtJQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNsQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLEtBQUssQ0FBQyxHQUFHLE9BQTJCO0lBQzNDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNoRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxNQUFrQjtJ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Q0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxNQUF3QjtJQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWZW50dXJlS2l0IENvbmZpZ3VyYXRpb24gVmFsaWRhdGlvblxuICogXG4gKiBWYWxpZGF0ZXMgY29uZmlndXJhdGlvbiBiZWZvcmUgaXQgcmVhY2hlcyBpbmZyYXN0cnVjdHVyZS5cbiAqIENhdGNoZXMgZXJyb3JzIGVhcmx5IHdpdGggY2xlYXIsIGFjdGlvbmFibGUgbWVzc2FnZXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBCYXNlQ29uZmlnIH0gZnJvbSAnLi90eXBlcy9iYXNlJztcbmltcG9ydCB0eXBlIHsgU2VjdXJpdHlDb25maWcsIE9BdXRoU2NvcGUsIEFwcENsaWVudCB9IGZyb20gJy4vdHlwZXMvc2VjdXJpdHknO1xuaW1wb3J0IHR5cGUgeyBFbnZDb25maWdJbnB1dCwgRW52aXJvbm1lbnQgfSBmcm9tICcuL3R5cGVzL2Vudic7XG5cbi8qKlxuICogVmFsaWRhdGlvbiBlcnJvclxuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmllbGQ6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZT86IHVua25vd25cbiAgKSB7XG4gICAgc3VwZXIoYCR7ZmllbGR9OiAke21lc3NhZ2V9YCk7XG4gICAgdGhpcy5uYW1lID0gJ1ZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25SZXN1bHQge1xuICB2YWxpZDogYm9vbGVhbjtcbiAgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JbXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdWNjZXNzZnVsIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIG9rKCk6IFZhbGlkYXRpb25SZXN1bHQge1xuICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZXJyb3JzOiBbXSB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZhaWxlZCB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5mdW5jdGlvbiBmYWlsKGVycm9yczogVmFsaWRhdGlvbkVycm9yW10pOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcnMgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSB2YWxpZGF0aW9uIHJlc3VsdHNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLi4ucmVzdWx0czogVmFsaWRhdGlvblJlc3VsdFtdKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gIGNvbnN0IGVycm9ycyA9IHJlc3VsdHMuZmxhdE1hcChyID0+IHIuZXJyb3JzKTtcbiAgcmV0dXJuIHsgdmFsaWQ6IGVycm9ycy5sZW5ndGggPT09IDAsIGVycm9ycyB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGJhc2UgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVCYXNlQ29uZmlnKGNvbmZpZzogQmFzZUNvbmZpZyk6IFZhbGlkYXRpb25SZXN1bHQge1xuICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdID0gW107XG5cbiAgLy8gTmFtZSB2YWxpZGF0aW9uXG4gIGlmICghY29uZmlnLm5hbWUpIHtcbiAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKCduYW1lJywgJ1Byb2plY3QgbmFtZSBpcyByZXF1aXJlZCcpKTtcbiAgfSBlbHNlIGlmICghL15bYS16XVthLXowLTktXSokLy50ZXN0KGNvbmZpZy5uYW1lKSkge1xuICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAnbmFtZScsXG4gICAgICAnUHJvamVjdCBuYW1lIG11c3Qgc3RhcnQgd2l0aCBsb3dlcmNhc2UgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIGFuZCBoeXBoZW5zJyxcbiAgICAgIGNvbmZpZy5uYW1lXG4gICAgKSk7XG4gIH0gZWxzZSBpZiAoY29uZmlnLm5hbWUubGVuZ3RoID4gMzIpIHtcbiAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgJ25hbWUnLFxuICAgICAgJ1Byb2plY3QgbmFtZSBtdXN0IGJlIDMyIGNoYXJhY3RlcnMgb3IgbGVzcycsXG4gICAgICBjb25maWcubmFtZVxuICAgICkpO1xuICB9XG5cbiAgLy8gRGlzcGxheSBuYW1lXG4gIGlmICghY29uZmlnLmRpc3BsYXlOYW1lKSB7XG4gICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcignZGlzcGxheU5hbWUnLCAnRGlzcGxheSBuYW1lIGlzIHJlcXVpcmVkJykpO1xuICB9XG5cbiAgLy8gUmVnaW9uIHZhbGlkYXRpb25cbiAgaWYgKCFjb25maWcucmVnaW9uKSB7XG4gICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcigncmVnaW9uJywgJ0FXUyByZWdpb24gaXMgcmVxdWlyZWQnKSk7XG4gIH0gZWxzZSBpZiAoIS9eW2Etel17Mn0tW2Etel0rLVxcZCQvLnRlc3QoY29uZmlnLnJlZ2lvbikpIHtcbiAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgJ3JlZ2lvbicsXG4gICAgICAnSW52YWxpZCBBV1MgcmVnaW9uIGZvcm1hdCAoZS5nLiwgZXUtd2VzdC0xKScsXG4gICAgICBjb25maWcucmVnaW9uXG4gICAgKSk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzLmxlbmd0aCA+IDAgPyBmYWlsKGVycm9ycykgOiBvaygpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2VjdXJpdHlDb25maWcoY29uZmlnOiBTZWN1cml0eUNvbmZpZyk6IFZhbGlkYXRpb25SZXN1bHQge1xuICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdID0gW107XG5cbiAgLy8gU2NvcGVzIHZhbGlkYXRpb25cbiAgaWYgKCFjb25maWcuc2NvcGVzIHx8IGNvbmZpZy5zY29wZXMubGVuZ3RoID09PSAwKSB7XG4gICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcignc2NvcGVzJywgJ0F0IGxlYXN0IG9uZSBPQXV0aCBzY29wZSBpcyByZXF1aXJlZCcpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcuc2NvcGVzLmZvckVhY2goKHNjb3BlLCBpKSA9PiB7XG4gICAgICBpZiAoIXNjb3BlLm5hbWUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihgc2NvcGVzWyR7aX1dLm5hbWVgLCAnU2NvcGUgbmFtZSBpcyByZXF1aXJlZCcpKTtcbiAgICAgIH0gZWxzZSBpZiAoIS9eW2Etel1bYS16MC05Ll0qJC8udGVzdChzY29wZS5uYW1lKSkge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGBzY29wZXNbJHtpfV0ubmFtZWAsXG4gICAgICAgICAgJ1Njb3BlIG5hbWUgbXVzdCBiZSBsb3dlcmNhc2Ugd2l0aCBkb3RzIChlLmcuLCBwcm9qZWN0cy5yZWFkKScsXG4gICAgICAgICAgc2NvcGUubmFtZVxuICAgICAgICApKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIEFwcCBjbGllbnRzIHZhbGlkYXRpb25cbiAgaWYgKCFjb25maWcuYXBwQ2xpZW50cyB8fCBjb25maWcuYXBwQ2xpZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKCdhcHBDbGllbnRzJywgJ0F0IGxlYXN0IG9uZSBhcHAgY2xpZW50IGlzIHJlcXVpcmVkJykpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNjb3BlTmFtZXMgPSBuZXcgU2V0KGNvbmZpZy5zY29wZXM/Lm1hcChzID0+IHMubmFtZSkgfHwgW10pO1xuICAgIFxuICAgIGNvbmZpZy5hcHBDbGllbnRzLmZvckVhY2goKGNsaWVudCwgaSkgPT4ge1xuICAgICAgaWYgKCFjbGllbnQubmFtZSkge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGBhcHBDbGllbnRzWyR7aX1dLm5hbWVgLCAnQ2xpZW50IG5hbWUgaXMgcmVxdWlyZWQnKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNsaWVudC5hbGxvd2VkU2NvcGVzLmZvckVhY2goKHNjb3BlLCBqKSA9PiB7XG4gICAgICAgIGlmICghc2NvcGVOYW1lcy5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgIGBhcHBDbGllbnRzWyR7aX1dLmFsbG93ZWRTY29wZXNbJHtqfV1gLFxuICAgICAgICAgICAgYFNjb3BlIFwiJHtzY29wZX1cIiBpcyBub3QgZGVmaW5lZCBpbiBzY29wZXNgLFxuICAgICAgICAgICAgc2NvcGVcbiAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzLmxlbmd0aCA+IDAgPyBmYWlsKGVycm9ycykgOiBvaygpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gaW5wdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRW52Q29uZmlnSW5wdXQoZW52OiBFbnZpcm9ubWVudCwgY29uZmlnOiBFbnZDb25maWdJbnB1dCk6IFZhbGlkYXRpb25SZXN1bHQge1xuICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdID0gW107XG5cbiAgLy8gTGFtYmRhIHZhbGlkYXRpb25cbiAgaWYgKGNvbmZpZy5sYW1iZGEpIHtcbiAgICBpZiAoY29uZmlnLmxhbWJkYS5tZW1vcnlNYiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29uZmlnLmxhbWJkYS5tZW1vcnlNYiA8IDEyOCB8fCBjb25maWcubGFtYmRhLm1lbW9yeU1iID4gMTAyNDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgJHtlbnZ9LmxhbWJkYS5tZW1vcnlNYmAsXG4gICAgICAgICAgJ0xhbWJkYSBtZW1vcnkgbXVzdCBiZSBiZXR3ZWVuIDEyOCBhbmQgMTAyNDAgTUInLFxuICAgICAgICAgIGNvbmZpZy5sYW1iZGEubWVtb3J5TWJcbiAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmIChjb25maWcubGFtYmRhLnRpbWVvdXRTZWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbmZpZy5sYW1iZGEudGltZW91dFNlYyA8IDEgfHwgY29uZmlnLmxhbWJkYS50aW1lb3V0U2VjID4gOTAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYCR7ZW52fS5sYW1iZGEudGltZW91dFNlY2AsXG4gICAgICAgICAgJ0xhbWJkYSB0aW1lb3V0IG11c3QgYmUgYmV0d2VlbiAxIGFuZCA5MDAgc2Vjb25kcycsXG4gICAgICAgICAgY29uZmlnLmxhbWJkYS50aW1lb3V0U2VjXG4gICAgICAgICkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFQSSB2YWxpZGF0aW9uXG4gIGlmIChjb25maWcuYXBpKSB7XG4gICAgaWYgKGNvbmZpZy5hcGkudGhyb3R0bGVSYXRlTGltaXQgIT09IHVuZGVmaW5lZCAmJiBjb25maWcuYXBpLnRocm90dGxlUmF0ZUxpbWl0IDwgMSkge1xuICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYCR7ZW52fS5hcGkudGhyb3R0bGVSYXRlTGltaXRgLFxuICAgICAgICAnQVBJIHJhdGUgbGltaXQgbXVzdCBiZSBhdCBsZWFzdCAxJyxcbiAgICAgICAgY29uZmlnLmFwaS50aHJvdHRsZVJhdGVMaW1pdFxuICAgICAgKSk7XG4gICAgfVxuICAgIFxuICAgIGlmIChjb25maWcuYXBpLnRocm90dGxlQnVyc3RMaW1pdCAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy5hcGkudGhyb3R0bGVCdXJzdExpbWl0IDwgMSkge1xuICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYCR7ZW52fS5hcGkudGhyb3R0bGVCdXJzdExpbWl0YCxcbiAgICAgICAgJ0FQSSBidXJzdCBsaW1pdCBtdXN0IGJlIGF0IGxlYXN0IDEnLFxuICAgICAgICBjb25maWcuYXBpLnRocm90dGxlQnVyc3RMaW1pdFxuICAgICAgKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVlBDIHZhbGlkYXRpb25cbiAgaWYgKGNvbmZpZy52cGMpIHtcbiAgICBpZiAoY29uZmlnLnZwYy5tYXhBenMgIT09IHVuZGVmaW5lZCAmJiAoY29uZmlnLnZwYy5tYXhBenMgPCAxIHx8IGNvbmZpZy52cGMubWF4QXpzID4gMykpIHtcbiAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGAke2Vudn0udnBjLm1heEF6c2AsXG4gICAgICAgICdWUEMgbXVzdCBoYXZlIDEtMyBhdmFpbGFiaWxpdHkgem9uZXMnLFxuICAgICAgICBjb25maWcudnBjLm1heEF6c1xuICAgICAgKSk7XG4gICAgfVxuICAgIFxuICAgIGlmIChjb25maWcudnBjLm5hdEdhdGV3YXlzICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLnZwYy5uYXRHYXRld2F5cyA8IDApIHtcbiAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGAke2Vudn0udnBjLm5hdEdhdGV3YXlzYCxcbiAgICAgICAgJ05BVCBnYXRld2F5cyBjYW5ub3QgYmUgbmVnYXRpdmUnLFxuICAgICAgICBjb25maWcudnBjLm5hdEdhdGV3YXlzXG4gICAgICApKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzLmxlbmd0aCA+IDAgPyBmYWlsKGVycm9ycykgOiBvaygpO1xufVxuXG4vKipcbiAqIEFzc2VydCB2YWxpZGF0aW9uIHBhc3NlcywgdGhyb3cgaWYgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRWYWxpZChyZXN1bHQ6IFZhbGlkYXRpb25SZXN1bHQpOiB2b2lkIHtcbiAgaWYgKCFyZXN1bHQudmFsaWQpIHtcbiAgICBjb25zdCBtZXNzYWdlcyA9IHJlc3VsdC5lcnJvcnMubWFwKGUgPT4gYCAgLSAke2UuZmllbGR9OiAke2UubWVzc2FnZX1gKS5qb2luKCdcXG4nKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQ6XFxuJHttZXNzYWdlc31gKTtcbiAgfVxufVxuIl19
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@venturekit/core",
3
+ "version": "0.0.0-dev.20260307234057",
4
+ "description": "VentureKit core types, presets, and configuration resolution.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/venturekit-dev/venturekit.private.git",
13
+ "directory": "packages/core"
14
+ },
15
+ "publishConfig": {
16
+ "registry": "https://registry.npmjs.org",
17
+ "access": "public"
18
+ },
19
+ "keywords": [
20
+ "venturekit",
21
+ "saas",
22
+ "config"
23
+ ],
24
+ "license": "Apache-2.0",
25
+ "devDependencies": {
26
+ "typescript": "^5.3.0"
27
+ },
28
+ "scripts": {
29
+ "build": "tsc",
30
+ "dev": "tsc --watch",
31
+ "clean": "rm -rf dist"
32
+ }
33
+ }