@gigadrive/network-config 2.1.2 → 3.0.1

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/dist/index.d.mts CHANGED
@@ -1,10 +1,7 @@
1
- declare const ALLOWED_CONFIG_NAMES: string[];
2
- /**
3
- * Finds a config file in the project folder.
4
- * @param projectFolder The folder to search for a config file in.
5
- * @returns The path to the config file, or null if no config file is found.
6
- */
7
- declare const findConfig: (projectFolder: string) => string | null;
1
+ import { FileSystem, Path } from '@effect/platform';
2
+ import { Schema, Effect, Layer } from 'effect';
3
+ import * as _effect_platform_Path from '@effect/platform/Path';
4
+ import * as _effect_platform_FileSystem from '@effect/platform/FileSystem';
8
5
 
9
6
  declare const REGION_DEFINITIONS: readonly ["us-east-1", "us-east-2", "us-west-1", "us-west-2", "ap-south-1", "ap-northeast-3", "ap-northeast-2", "ap-southeast-1", "ap-southeast-2", "ap-northeast-1", "ca-central-1", "eu-central-1", "eu-west-1", "eu-west-2", "eu-west-3", "eu-north-1", "sa-east-1"];
10
7
  type Region = (typeof REGION_DEFINITIONS)[number];
@@ -80,6 +77,13 @@ interface NormalizedConfig {
80
77
  */
81
78
  fileWhitelist?: string[];
82
79
  };
80
+ /**
81
+ * Glob or regex patterns for files to exclude from the deployment archive.
82
+ * Sourced from framework auto-detection (e.g. `tests/`, `node_modules/`) or
83
+ * user config. Patterns are matched via minimatch and RegExp against relative
84
+ * paths in the project directory.
85
+ */
86
+ excludeFiles?: string[];
83
87
  /**
84
88
  * Warning codes to be printed to the output during deployment.
85
89
  */
@@ -159,14 +163,428 @@ type NormalizedConfigRouteMatchRequirements = [] | [
159
163
  }
160
164
  ];
161
165
 
166
+ declare const ManifestNotFoundError_base: Schema.TaggedErrorClass<ManifestNotFoundError, "ManifestNotFoundError", {
167
+ readonly _tag: Schema.tag<"ManifestNotFoundError">;
168
+ } & {
169
+ message: typeof Schema.String;
170
+ filePath: typeof Schema.String;
171
+ }>;
172
+ declare class ManifestNotFoundError extends ManifestNotFoundError_base {
173
+ }
174
+ declare const ManifestReadError_base: Schema.TaggedErrorClass<ManifestReadError, "ManifestReadError", {
175
+ readonly _tag: Schema.tag<"ManifestReadError">;
176
+ } & {
177
+ message: typeof Schema.String;
178
+ filePath: typeof Schema.String;
179
+ }>;
180
+ declare class ManifestReadError extends ManifestReadError_base {
181
+ }
182
+ declare const ManifestParseError_base: Schema.TaggedErrorClass<ManifestParseError, "ManifestParseError", {
183
+ readonly _tag: Schema.tag<"ManifestParseError">;
184
+ } & {
185
+ message: typeof Schema.String;
186
+ filePath: typeof Schema.String;
187
+ }>;
188
+ declare class ManifestParseError extends ManifestParseError_base {
189
+ }
190
+ declare const FrameworkNotDetectedError_base: Schema.TaggedErrorClass<FrameworkNotDetectedError, "FrameworkNotDetectedError", {
191
+ readonly _tag: Schema.tag<"FrameworkNotDetectedError">;
192
+ } & {
193
+ message: typeof Schema.String;
194
+ directory: typeof Schema.String;
195
+ }>;
196
+ declare class FrameworkNotDetectedError extends FrameworkNotDetectedError_base {
197
+ }
198
+ interface FrameworkDetectionItem {
199
+ /** Check manifest dependencies for this package (routed by framework language) */
200
+ matchPackage?: string;
201
+ /** Check if this file exists (relative to project root) */
202
+ path?: string;
203
+ /** If path is set, also check file content matches this regex */
204
+ matchContent?: string;
205
+ }
206
+ type FrameworkLanguage = 'node' | 'php';
207
+ type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun' | 'composer';
208
+ interface FrameworkDefinition {
209
+ slug: string;
210
+ name: string;
211
+ language: FrameworkLanguage;
212
+ /** ALL items must match for the framework to be detected */
213
+ detectors: FrameworkDetectionItem[];
214
+ /** Higher = higher priority (specific frameworks beat generic ones) */
215
+ priority: number;
216
+ /** Generates deployment defaults for this framework */
217
+ getDefaultConfig: (packageManager: PackageManager) => FrameworkDefaultConfig;
218
+ }
219
+ interface FrameworkDefaultConfig {
220
+ runtime: Runtime;
221
+ memory: number;
222
+ maxDuration: number;
223
+ streaming: boolean;
224
+ /** Overrides the auto-generated install command (e.g. for custom composer flags) */
225
+ installCommand?: string;
226
+ /** Build commands (install command is auto-prepended by generateConfig) */
227
+ commands: string[];
228
+ entrypoint?: string;
229
+ assetsDir?: string;
230
+ populateAssetCache?: boolean;
231
+ routes: Array<{
232
+ source: string;
233
+ destination: string;
234
+ }>;
235
+ environmentVariables: Record<string, string>;
236
+ symlinks?: Record<string, string>;
237
+ excludeFiles?: string[];
238
+ }
239
+ interface DetectionResult {
240
+ framework: FrameworkDefinition;
241
+ packageManager: PackageManager;
242
+ config: NormalizedConfig;
243
+ }
244
+
245
+ /**
246
+ * Detects the framework used in a project by checking framework definitions
247
+ * against the project's dependencies and file structure.
248
+ *
249
+ * Framework definitions are checked in priority order (highest first).
250
+ * All detectors for a framework must match for it to be selected.
251
+ *
252
+ * @param projectFolder - Absolute path to the project root
253
+ * @returns DetectionResult with framework, package manager, and generated config
254
+ */
255
+ declare const detectFramework: (projectFolder: string) => Effect.Effect<DetectionResult, ManifestReadError | ManifestParseError | FrameworkNotDetectedError, FileSystem.FileSystem | Path.Path>;
256
+
257
+ /**
258
+ * Detects the package manager by checking for lockfiles in the project folder.
259
+ * Falls back to `npm` if no lockfile is found.
260
+ *
261
+ * @param projectFolder - Absolute path to the project root
262
+ * @returns The detected package manager
263
+ */
264
+ declare const detectPackageManager: (projectFolder: string) => Effect.Effect<PackageManager, never, FileSystem.FileSystem | Path.Path>;
265
+
266
+ /**
267
+ * All supported framework definitions, sorted by priority descending.
268
+ * Higher priority frameworks are checked first during detection.
269
+ */
270
+ declare const FRAMEWORK_DEFINITIONS: FrameworkDefinition[];
271
+
272
+ /**
273
+ * Generates a NormalizedConfig from a framework definition and detected package manager.
274
+ * Prepends the install command and builds a complete deployment configuration.
275
+ *
276
+ * @param framework - The detected framework definition
277
+ * @param packageManager - The detected package manager
278
+ * @returns A complete NormalizedConfig with framework defaults
279
+ */
280
+ declare const generateConfig: (framework: FrameworkDefinition, packageManager: PackageManager) => Effect.Effect<NormalizedConfig, never, never>;
281
+
282
+ /**
283
+ * Merges framework defaults with a user-provided config.
284
+ * User config always takes precedence; framework defaults fill gaps.
285
+ *
286
+ * - commands: use user's if non-empty, otherwise framework's
287
+ * - entrypoints: use user's if non-empty, otherwise framework's
288
+ * - routes: use user's if non-empty, otherwise framework's
289
+ * - assets: use user's if defined with paths, otherwise framework's
290
+ * - excludeFiles: use user's if non-empty, otherwise framework's
291
+ * - regions: always use user's (always populated from parsing)
292
+ * - environmentVariables: deep merge (framework base, user overrides)
293
+ * - services: always use user's (frameworks don't define services)
294
+ * - warnings/errors: concatenate both
295
+ *
296
+ * @param userConfig - The config parsed from the user's config file
297
+ * @param frameworkConfig - The config generated from framework detection
298
+ * @returns The merged config
299
+ */
300
+ declare const mergeWithFrameworkDefaults: (userConfig: NormalizedConfig, frameworkConfig: NormalizedConfig) => Effect.Effect<NormalizedConfig, never, never>;
301
+
302
+ /**
303
+ * Reads dependency names from the appropriate manifest file for a language.
304
+ * Returns a set of all dependency names (production + dev).
305
+ *
306
+ * If the manifest file does not exist, returns an empty set (graceful).
307
+ * If the file exists but cannot be read (`ManifestReadError`) or parsed
308
+ * (`ManifestParseError`), the error propagates — this indicates a real
309
+ * problem the user should know about.
310
+ *
311
+ * @param projectFolder - Absolute path to the project root
312
+ * @param language - The framework language to determine which manifest to read
313
+ * @returns A set of dependency package names
314
+ */
315
+ declare const readDependencies: (projectFolder: string, language: FrameworkLanguage) => Effect.Effect<Set<string>, ManifestReadError | ManifestParseError, FileSystem.FileSystem | Path.Path>;
316
+
317
+ declare const ConfigFileNotFoundError_base: Schema.TaggedErrorClass<ConfigFileNotFoundError, "ConfigFileNotFoundError", {
318
+ readonly _tag: Schema.tag<"ConfigFileNotFoundError">;
319
+ } & {
320
+ message: typeof Schema.String;
321
+ filePath: typeof Schema.String;
322
+ }>;
323
+ declare class ConfigFileNotFoundError extends ConfigFileNotFoundError_base {
324
+ }
325
+ declare const ConfigFileEmptyError_base: Schema.TaggedErrorClass<ConfigFileEmptyError, "ConfigFileEmptyError", {
326
+ readonly _tag: Schema.tag<"ConfigFileEmptyError">;
327
+ } & {
328
+ message: typeof Schema.String;
329
+ filePath: typeof Schema.String;
330
+ }>;
331
+ declare class ConfigFileEmptyError extends ConfigFileEmptyError_base {
332
+ }
333
+ declare const ConfigFileParseError_base: Schema.TaggedErrorClass<ConfigFileParseError, "ConfigFileParseError", {
334
+ readonly _tag: Schema.tag<"ConfigFileParseError">;
335
+ } & {
336
+ message: typeof Schema.String;
337
+ filePath: typeof Schema.String;
338
+ cause: Schema.optional<typeof Schema.String>;
339
+ }>;
340
+ declare class ConfigFileParseError extends ConfigFileParseError_base {
341
+ }
342
+ declare const ConfigVersionError_base: Schema.TaggedErrorClass<ConfigVersionError, "ConfigVersionError", {
343
+ readonly _tag: Schema.tag<"ConfigVersionError">;
344
+ } & {
345
+ message: typeof Schema.String;
346
+ filePath: typeof Schema.String;
347
+ version: Schema.optional<typeof Schema.Number>;
348
+ }>;
349
+ declare class ConfigVersionError extends ConfigVersionError_base {
350
+ }
351
+ declare const ConfigSchemaValidationError_base: Schema.TaggedErrorClass<ConfigSchemaValidationError, "ConfigSchemaValidationError", {
352
+ readonly _tag: Schema.tag<"ConfigSchemaValidationError">;
353
+ } & {
354
+ message: typeof Schema.String;
355
+ filePath: typeof Schema.String;
356
+ validationErrors: Schema.Array$<typeof Schema.String>;
357
+ }>;
358
+ declare class ConfigSchemaValidationError extends ConfigSchemaValidationError_base {
359
+ }
360
+ declare const FunctionConfigError_base: Schema.TaggedErrorClass<FunctionConfigError, "FunctionConfigError", {
361
+ readonly _tag: Schema.tag<"FunctionConfigError">;
362
+ } & {
363
+ message: typeof Schema.String;
364
+ functionPath: typeof Schema.String;
365
+ }>;
366
+ declare class FunctionConfigError extends FunctionConfigError_base {
367
+ }
368
+
369
+ /**
370
+ * Ensure a normalized config has no function files that are also defined as assets.
371
+ * For example, a file `public/index.php` should not be defined as an asset, when it is a function and `public` is an asset folder.
372
+ * @param config The normalized config to filter.
373
+ * @returns A promise that resolves to the filtered config.
374
+ */
375
+ declare const filterFunctionsFromAssets: (config: NormalizedConfig) => NormalizedConfig;
376
+
377
+ declare const ALLOWED_CONFIG_NAMES: readonly ["gigadrive.yaml", "gigadrive.yml", "nebula.yaml", "nebula.yml", "nebula.json"];
378
+ declare const RawConfigReader_base: Effect.Service.Class<RawConfigReader, "RawConfigReader", {
379
+ readonly effect: Effect.Effect<{
380
+ findConfig: (projectFolder: string) => Effect.Effect<string | null, never, never>;
381
+ readRawConfig: (filePath: string, options?: {
382
+ disableVersionCheck?: boolean;
383
+ } | undefined) => Effect.Effect<Record<string, unknown>, ConfigFileNotFoundError | ConfigFileEmptyError | ConfigFileParseError | ConfigVersionError, never>;
384
+ readConfigFile: <T>(configFilePath: string) => Effect.Effect<T | null, ConfigFileEmptyError | ConfigFileParseError | ConfigVersionError, never>;
385
+ }, never, FileSystem.FileSystem | Path.Path>;
386
+ }>;
387
+ declare class RawConfigReader extends RawConfigReader_base {
388
+ }
389
+
390
+ declare const SchemaValidator_base: Effect.Service.Class<SchemaValidator, "SchemaValidator", {
391
+ readonly effect: Effect.Effect<{
392
+ validate: (config: Record<string, unknown>, schema: object, filePath: string) => Effect.Effect<undefined, ConfigSchemaValidationError, never>;
393
+ }, never, never>;
394
+ }>;
395
+ declare class SchemaValidator extends SchemaValidator_base {
396
+ }
397
+
398
+ interface ConfigV4 extends Config {
399
+ version: 4;
400
+ /**
401
+ * A list of presets to apply to the project. Each preset will be applied in order.
402
+ */
403
+ presets?: string[] | null;
404
+ /**
405
+ * The folder which holds the assets to be deployed to the edge. Defaults to none.
406
+ */
407
+ assets?: string | null;
408
+ /**
409
+ * If true, the assets will be cached at the edge during deployment. This may increase the deployment time, depending on the size of the assets. Defaults to false.
410
+ */
411
+ populateAssetCache?: boolean | null;
412
+ /**
413
+ * The regions to which the project will be deployed. Use "global" to deploy to all regions. More regions will incur higher costs.
414
+ */
415
+ regions?: string[] | null;
416
+ /**
417
+ * The commands to run to build the project. For example, `bun install` or `npm install`.
418
+ */
419
+ build_commands?: string[] | null;
420
+ /**
421
+ * The serverless functions to deploy.
422
+ */
423
+ functions?: {
424
+ /**
425
+ * The pattern to match the file path of the function. May be a glob pattern or a regular expression.
426
+ */
427
+ [pattern: string]: ConfigV4FunctionSettings;
428
+ } | null;
429
+ /**
430
+ * A list of route definitions.
431
+ *
432
+ * @maxItems 1024
433
+ */
434
+ routes?: {
435
+ /**
436
+ * A pattern that matches each incoming pathname (excluding querystring).
437
+ */
438
+ source: string;
439
+ /**
440
+ * An absolute pathname to an existing resource or an external URL.
441
+ */
442
+ destination: string;
443
+ /**
444
+ * An array of requirements that are needed to match
445
+ *
446
+ * @maxItems 16
447
+ */
448
+ has?: NormalizedConfigRouteMatchRequirements;
449
+ /**
450
+ * An array of requirements that are needed to match
451
+ *
452
+ * @maxItems 16
453
+ */
454
+ missing?: NormalizedConfigRouteMatchRequirements;
455
+ /**
456
+ * An optional integer to override the status code of the response.
457
+ */
458
+ statusCode?: number;
459
+ /**
460
+ * An optional boolean to force a redirect response.
461
+ */
462
+ redirect?: boolean;
463
+ /**
464
+ * The HTTP methods to match for the route. Defaults to all methods.
465
+ */
466
+ methods?: NormalizedConfigRouteMethod[];
467
+ /**
468
+ * Additional headers to add to the response.
469
+ */
470
+ headers?: {
471
+ [k: string]: string;
472
+ };
473
+ }[] | null;
474
+ /**
475
+ * Additional environment variables to set during runtime and build.
476
+ */
477
+ env: Record<string, string>;
478
+ /**
479
+ * Optionally, specify additional services like databases to deploy.
480
+ */
481
+ services?: {
482
+ [type in NormalizedConfigServiceType]?: ConfigV4Service | null;
483
+ };
484
+ }
485
+ interface ConfigV4Service {
486
+ }
487
+ interface ConfigV4FunctionSettings {
488
+ /**
489
+ * The memory limit for the function in MB.
490
+ */
491
+ memory?: number;
492
+ /**
493
+ * The maximum duration of the function in seconds. May not be higher than 15 minutes.
494
+ */
495
+ max_duration?: number;
496
+ /**
497
+ * The runtime to use for the function.
498
+ */
499
+ runtime?: Runtime;
500
+ /**
501
+ * Use to create symlinks on the final function. This is useful for applications that require use of the file system, since serverless functions are ephemeral and have read-only file systems, except for /tmp.
502
+ */
503
+ symlinks?: {
504
+ /**
505
+ * Left side is where the symlink will be created, right side is the target path.
506
+ */
507
+ [path: string]: string;
508
+ };
509
+ /**
510
+ * A glob pattern to match files that should be excluded from your Serverless Function. If you’re using a Community Runtime, the behavior might vary.
511
+ */
512
+ excludeFiles?: string | string[];
513
+ /**
514
+ * A glob pattern to match files that should be included in your Serverless Function. If you’re using a Community Runtime, the behavior might vary.
515
+ */
516
+ includeFiles?: string | string[];
517
+ /**
518
+ * Optionally, provide a schedule to run the function on periodically. Examples: `rate(1 hour)`, `rate(1 day)`, `cron(0 12 * * *)`.
519
+ */
520
+ schedule?: string;
521
+ }
522
+
523
+ /**
524
+ * Resolves merged function settings for a given path by iterating all function
525
+ * patterns in the config. Later patterns override earlier ones.
526
+ *
527
+ * @returns The merged settings, or undefined when no pattern matches the path.
528
+ */
529
+ declare const getFunctionSettings: (path: string, config: ConfigV4) => ConfigV4FunctionSettings | undefined;
530
+ declare const V4ConfigParser_base: Effect.Service.Class<V4ConfigParser, "V4ConfigParser", {
531
+ readonly accessors: true;
532
+ readonly effect: Effect.Effect<{
533
+ /**
534
+ * Parses a ConfigV4 into a NormalizedConfig.
535
+ *
536
+ * @param config - The raw V4 config object
537
+ * @param projectFolder - Absolute path to the project root
538
+ */
539
+ parse: (config: ConfigV4, projectFolder: string) => Effect.Effect<NormalizedConfig, FunctionConfigError, FileSystem.FileSystem | Path.Path>;
540
+ }, never, never>;
541
+ }>;
542
+ declare class V4ConfigParser extends V4ConfigParser_base {
543
+ }
544
+
545
+ declare const VercelBuildOutputParser_base: Effect.Service.Class<VercelBuildOutputParser, "VercelBuildOutputParser", {
546
+ readonly effect: Effect.Effect<{
547
+ parse: (parseResult: NormalizedConfig, projectFolder: string) => Effect.Effect<NormalizedConfig, ConfigFileEmptyError | ConfigFileParseError | ConfigVersionError, _effect_platform_FileSystem.FileSystem | Path.Path>;
548
+ }, never, Path.Path | RawConfigReader>;
549
+ }>;
550
+ declare class VercelBuildOutputParser extends VercelBuildOutputParser_base {
551
+ }
552
+
162
553
  interface Config {
163
554
  version: number;
164
555
  env?: Record<string, string>;
165
556
  }
166
- declare const parseConfig: (filePath: string, projectFolder: string) => Promise<NormalizedConfig>;
557
+ /**
558
+ * Parses a config file at the given path and validates it against the appropriate
559
+ * JSON Schema, returning a NormalizedConfig **without** post-processing.
560
+ *
561
+ * Use {@link parseConfig} when you also want Vercel BOv3 merging, empty-deployment
562
+ * checks, and function/asset deduplication applied automatically.
563
+ *
564
+ * @param filePath - Absolute path to the config file
565
+ * @param projectFolder - Absolute path to the project root
566
+ */
567
+ declare const parseConfigRaw: (filePath: string, projectFolder: string) => Effect.Effect<NormalizedConfig, ConfigFileNotFoundError | ConfigFileEmptyError | ConfigFileParseError | ConfigVersionError | ConfigSchemaValidationError | FunctionConfigError, _effect_platform_FileSystem.FileSystem | _effect_platform_Path.Path | RawConfigReader | SchemaValidator | V4ConfigParser>;
568
+ /**
569
+ * Parses a config file at the given path, validates it against the appropriate
570
+ * JSON Schema, converts it to a NormalizedConfig, and applies post-processing.
571
+ *
572
+ * @param filePath - Absolute path to the config file
573
+ * @param projectFolder - Absolute path to the project root
574
+ */
575
+ declare const parseConfig: (filePath: string, projectFolder: string) => Effect.Effect<NormalizedConfig, ConfigFileNotFoundError | ConfigFileEmptyError | ConfigFileParseError | ConfigVersionError | ConfigSchemaValidationError | FunctionConfigError, _effect_platform_FileSystem.FileSystem | _effect_platform_Path.Path | RawConfigReader | SchemaValidator | V4ConfigParser | VercelBuildOutputParser>;
576
+ /**
577
+ * Applies post-processing transformers to a NormalizedConfig:
578
+ * - Vercel Build Output v3 (merges functions/routes from .vercel/output if present)
579
+ * - Empty deployment validation
580
+ * - Filter functions from assets
581
+ *
582
+ * @param config - The parsed NormalizedConfig
583
+ * @param projectFolder - Absolute path to the project root
584
+ * @returns The post-processed NormalizedConfig
585
+ */
586
+ declare const postProcessConfig: (config: NormalizedConfig, projectFolder: string) => Effect.Effect<NormalizedConfig, ConfigFileEmptyError | ConfigFileParseError | ConfigVersionError, _effect_platform_FileSystem.FileSystem | _effect_platform_Path.Path | VercelBuildOutputParser>;
167
587
 
168
- declare const parseRawConfig: (filePath: string, { disableVersionCheck }?: {
169
- disableVersionCheck?: boolean;
170
- }) => Promise<Record<string, unknown>>;
588
+ declare const NetworkConfigLive: Layer.Layer<RawConfigReader | SchemaValidator | V4ConfigParser | VercelBuildOutputParser, never, _effect_platform_FileSystem.FileSystem | _effect_platform_Path.Path>;
171
589
 
172
- export { ALLOWED_CONFIG_NAMES, AVAILABLE_REGIONS, AVAILABLE_RUNTIMES, type Config, type FilePathMap, type NeonAWSRegion, type NormalizedConfig, type NormalizedConfigEntrypoint, type NormalizedConfigRoute, type NormalizedConfigRouteHandler, type NormalizedConfigRouteMatchRequirements, type NormalizedConfigRouteMethod, type NormalizedConfigService, type NormalizedConfigServicePostgres, type NormalizedConfigServiceRedis, type NormalizedConfigServiceType, type Region, type Runtime, type UpstashAWSRegion, findConfig, parseConfig, parseRawConfig };
590
+ export { ALLOWED_CONFIG_NAMES, AVAILABLE_REGIONS, AVAILABLE_RUNTIMES, type Config, ConfigFileEmptyError, ConfigFileNotFoundError, ConfigFileParseError, ConfigSchemaValidationError, ConfigVersionError, type DetectionResult, FRAMEWORK_DEFINITIONS, type FilePathMap, type FrameworkDefaultConfig, type FrameworkDefinition, type FrameworkDetectionItem, type FrameworkLanguage, FrameworkNotDetectedError, FunctionConfigError, ManifestNotFoundError, ManifestParseError, ManifestReadError, type NeonAWSRegion, NetworkConfigLive, type NormalizedConfig, type NormalizedConfigEntrypoint, type NormalizedConfigRoute, type NormalizedConfigRouteHandler, type NormalizedConfigRouteMatchRequirements, type NormalizedConfigRouteMethod, type NormalizedConfigService, type NormalizedConfigServicePostgres, type NormalizedConfigServiceRedis, type NormalizedConfigServiceType, type PackageManager, RawConfigReader, type Region, type Runtime, SchemaValidator, type UpstashAWSRegion, V4ConfigParser, VercelBuildOutputParser, detectFramework, detectPackageManager, filterFunctionsFromAssets, generateConfig, getFunctionSettings, mergeWithFrameworkDefaults, parseConfig, parseConfigRaw, postProcessConfig, readDependencies };