@gigadrive/network-config 4.6.1 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/define-config.d.mts +156 -2
- package/dist/define-config.d.ts +156 -2
- package/dist/index.d.mts +513 -91
- package/dist/index.d.ts +513 -91
- package/dist/index.js +1724 -448
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1715 -454
- package/dist/index.mjs.map +1 -1
- package/dist/v4/schema.json +323 -5
- package/package.json +2 -2
- package/src/v4/schema.json +323 -5
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Schema, Effect, Layer } from 'effect';
|
|
2
|
-
import
|
|
2
|
+
import { FileSystem, Path } from '@effect/platform';
|
|
3
3
|
import * as _effect_platform_Path from '@effect/platform/Path';
|
|
4
|
+
import * as _effect_platform_FileSystem from '@effect/platform/FileSystem';
|
|
4
5
|
import * as effect_Layer from 'effect/Layer';
|
|
5
|
-
import { Path, FileSystem } from '@effect/platform';
|
|
6
6
|
|
|
7
7
|
declare const StaticAssetHeadersSchema: Schema.filter<Schema.mutable<Schema.Record$<typeof Schema.String, Schema.Union<[Schema.filter<typeof Schema.String>, Schema.mutable<Schema.Array$<Schema.filter<typeof Schema.String>>>]>>>>;
|
|
8
8
|
type StaticAssetHeaders = Schema.Schema.Type<typeof StaticAssetHeadersSchema>;
|
|
@@ -36,6 +36,92 @@ type StaticAssetManifest = StaticAssetManifestV1;
|
|
|
36
36
|
*/
|
|
37
37
|
declare const parseStaticAssetManifest: (content: string) => StaticAssetManifest | undefined;
|
|
38
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Lists every publishable file inside a static asset directory.
|
|
41
|
+
*
|
|
42
|
+
* Both the `assets:` key of a user config and a framework's `assetsDir` mean
|
|
43
|
+
* "publish this directory to the edge", and both resolve that declaration into
|
|
44
|
+
* concrete file paths through this walker.
|
|
45
|
+
*
|
|
46
|
+
* @param projectFolder - Absolute path to the project root
|
|
47
|
+
* @param assetsDir - Project-relative asset directory (e.g. `dist`, `.output/public`)
|
|
48
|
+
* @returns Sorted forward-slash paths relative to `assetsDir`. Empty when the
|
|
49
|
+
* directory is missing or is not a directory, so a project that never produced
|
|
50
|
+
* the expected build output fails config validation instead of the walker.
|
|
51
|
+
*/
|
|
52
|
+
declare const collectAssetFiles: (projectFolder: string, assetsDir: string) => Effect.Effect<string[], never, FileSystem.FileSystem | Path.Path>;
|
|
53
|
+
|
|
54
|
+
declare const ConfigFileNotFoundError_base: Schema.TaggedErrorClass<ConfigFileNotFoundError, "ConfigFileNotFoundError", {
|
|
55
|
+
readonly _tag: Schema.tag<"ConfigFileNotFoundError">;
|
|
56
|
+
} & {
|
|
57
|
+
message: typeof Schema.String;
|
|
58
|
+
filePath: typeof Schema.String;
|
|
59
|
+
}>;
|
|
60
|
+
declare class ConfigFileNotFoundError extends ConfigFileNotFoundError_base {
|
|
61
|
+
}
|
|
62
|
+
declare const ConfigFileEmptyError_base: Schema.TaggedErrorClass<ConfigFileEmptyError, "ConfigFileEmptyError", {
|
|
63
|
+
readonly _tag: Schema.tag<"ConfigFileEmptyError">;
|
|
64
|
+
} & {
|
|
65
|
+
message: typeof Schema.String;
|
|
66
|
+
filePath: typeof Schema.String;
|
|
67
|
+
}>;
|
|
68
|
+
declare class ConfigFileEmptyError extends ConfigFileEmptyError_base {
|
|
69
|
+
}
|
|
70
|
+
declare const ConfigFileParseError_base: Schema.TaggedErrorClass<ConfigFileParseError, "ConfigFileParseError", {
|
|
71
|
+
readonly _tag: Schema.tag<"ConfigFileParseError">;
|
|
72
|
+
} & {
|
|
73
|
+
message: typeof Schema.String;
|
|
74
|
+
filePath: typeof Schema.String;
|
|
75
|
+
cause: Schema.optional<typeof Schema.String>;
|
|
76
|
+
}>;
|
|
77
|
+
declare class ConfigFileParseError extends ConfigFileParseError_base {
|
|
78
|
+
}
|
|
79
|
+
declare const ConfigModuleLoadError_base: Schema.TaggedErrorClass<ConfigModuleLoadError, "ConfigModuleLoadError", {
|
|
80
|
+
readonly _tag: Schema.tag<"ConfigModuleLoadError">;
|
|
81
|
+
} & {
|
|
82
|
+
message: typeof Schema.String;
|
|
83
|
+
filePath: typeof Schema.String;
|
|
84
|
+
cause: Schema.optional<typeof Schema.String>;
|
|
85
|
+
}>;
|
|
86
|
+
declare class ConfigModuleLoadError extends ConfigModuleLoadError_base {
|
|
87
|
+
}
|
|
88
|
+
declare const ConfigVersionError_base: Schema.TaggedErrorClass<ConfigVersionError, "ConfigVersionError", {
|
|
89
|
+
readonly _tag: Schema.tag<"ConfigVersionError">;
|
|
90
|
+
} & {
|
|
91
|
+
message: typeof Schema.String;
|
|
92
|
+
filePath: typeof Schema.String;
|
|
93
|
+
version: Schema.optional<typeof Schema.Number>;
|
|
94
|
+
}>;
|
|
95
|
+
declare class ConfigVersionError extends ConfigVersionError_base {
|
|
96
|
+
}
|
|
97
|
+
declare const ConfigSchemaValidationError_base: Schema.TaggedErrorClass<ConfigSchemaValidationError, "ConfigSchemaValidationError", {
|
|
98
|
+
readonly _tag: Schema.tag<"ConfigSchemaValidationError">;
|
|
99
|
+
} & {
|
|
100
|
+
message: typeof Schema.String;
|
|
101
|
+
filePath: typeof Schema.String;
|
|
102
|
+
validationErrors: Schema.Array$<typeof Schema.String>;
|
|
103
|
+
}>;
|
|
104
|
+
declare class ConfigSchemaValidationError extends ConfigSchemaValidationError_base {
|
|
105
|
+
}
|
|
106
|
+
declare const FunctionConfigError_base: Schema.TaggedErrorClass<FunctionConfigError, "FunctionConfigError", {
|
|
107
|
+
readonly _tag: Schema.tag<"FunctionConfigError">;
|
|
108
|
+
} & {
|
|
109
|
+
message: typeof Schema.String;
|
|
110
|
+
functionPath: typeof Schema.String;
|
|
111
|
+
}>;
|
|
112
|
+
declare class FunctionConfigError extends FunctionConfigError_base {
|
|
113
|
+
}
|
|
114
|
+
declare const ContainerConfigError_base: Schema.TaggedErrorClass<ContainerConfigError, "ContainerConfigError", {
|
|
115
|
+
readonly _tag: Schema.tag<"ContainerConfigError">;
|
|
116
|
+
} & {
|
|
117
|
+
message: typeof Schema.String;
|
|
118
|
+
containerName: Schema.optional<typeof Schema.String>;
|
|
119
|
+
filePath: Schema.optional<typeof Schema.String>;
|
|
120
|
+
}>;
|
|
121
|
+
/** A `containers` entry, or a Compose file imported into one, cannot be deployed as written. */
|
|
122
|
+
declare class ContainerConfigError extends ContainerConfigError_base {
|
|
123
|
+
}
|
|
124
|
+
|
|
39
125
|
interface NormalizedImageLocalPattern {
|
|
40
126
|
pathname?: string;
|
|
41
127
|
search?: string;
|
|
@@ -696,6 +782,15 @@ interface NormalizedConfig {
|
|
|
696
782
|
routes: Array<NormalizedConfigRoute>;
|
|
697
783
|
/** Managed infrastructure declarations supplied through `gigadrive.yaml`. */
|
|
698
784
|
services?: NormalizedConfigService[];
|
|
785
|
+
/**
|
|
786
|
+
* Container images that run inside the microVM of every function instance of
|
|
787
|
+
* the deployment, next to the function. Each one is reachable from the
|
|
788
|
+
* function, and from every other sidecar, at `<name>:<port>`.
|
|
789
|
+
*
|
|
790
|
+
* Sidecar state belongs to one instance: it is lost when the instance is
|
|
791
|
+
* retired, and two replicas of a function never share a sidecar.
|
|
792
|
+
*/
|
|
793
|
+
sidecars?: NormalizedSidecar[];
|
|
699
794
|
/**
|
|
700
795
|
* Settings related to the archive the user uploads to the build workers.
|
|
701
796
|
*/
|
|
@@ -730,9 +825,9 @@ interface NormalizedConfigService {
|
|
|
730
825
|
type: NormalizedConfigServiceType;
|
|
731
826
|
}
|
|
732
827
|
/** Service kinds supported by the normalized deployment configuration. */
|
|
733
|
-
type NormalizedConfigServiceType = 'redis' | 'postgres' | 'storage';
|
|
828
|
+
type NormalizedConfigServiceType = 'redis' | 'postgres' | 'storage' | 'queues';
|
|
734
829
|
/** Fully normalized managed-service declaration consumed by provisioning. */
|
|
735
|
-
type NormalizedConfigServiceDefinition = NormalizedConfigServiceRedis | NormalizedConfigServicePostgres | NormalizedConfigServiceStorage;
|
|
830
|
+
type NormalizedConfigServiceDefinition = NormalizedConfigServiceRedis | NormalizedConfigServicePostgres | NormalizedConfigServiceStorage | NormalizedConfigServiceQueues;
|
|
736
831
|
type UpstashAWSRegion = 'us-east-1' | 'us-east-2' | 'us-west-1' | 'us-west-2' | 'eu-central-1' | 'eu-west-1' | 'eu-west-2' | 'sa-east-1' | 'ap-south-1' | 'ap-northeast-1' | 'ap-southeast-1' | 'ap-southeast-2';
|
|
737
832
|
interface NormalizedConfigServiceRedis extends NormalizedConfigService {
|
|
738
833
|
type: 'redis';
|
|
@@ -767,14 +862,123 @@ interface NormalizedConfigStorageBucket {
|
|
|
767
862
|
/** Access policy to apply when the bucket is first provisioned. */
|
|
768
863
|
visibility: 'public' | 'private';
|
|
769
864
|
}
|
|
865
|
+
/**
|
|
866
|
+
* Declarative queues provisioned in the deployment environment.
|
|
867
|
+
*
|
|
868
|
+
* Durations are resolved to seconds and schedule bodies to strings, so the
|
|
869
|
+
* platform receives one canonical shape. Settings the config omits stay
|
|
870
|
+
* absent and keep the platform's defaults.
|
|
871
|
+
*/
|
|
872
|
+
interface NormalizedConfigServiceQueues extends NormalizedConfigService {
|
|
873
|
+
type: 'queues';
|
|
874
|
+
/** Queues sorted by name for deterministic deployment plans. */
|
|
875
|
+
queues: NormalizedConfigQueue[];
|
|
876
|
+
}
|
|
877
|
+
/** Desired state for one environment-scoped queue. */
|
|
878
|
+
interface NormalizedConfigQueue {
|
|
879
|
+
name: string;
|
|
880
|
+
/** Push consumer path; absent or `null` declares a pull queue. */
|
|
881
|
+
consumer?: string | null;
|
|
882
|
+
visibilityTimeoutSeconds?: number;
|
|
883
|
+
retentionSeconds?: number;
|
|
884
|
+
maxAttempts?: number;
|
|
885
|
+
retryBackoffMinSeconds?: number;
|
|
886
|
+
retryBackoffMaxSeconds?: number;
|
|
887
|
+
deduplicationWindowSeconds?: number;
|
|
888
|
+
concurrency?: number | null;
|
|
889
|
+
rateLimit?: {
|
|
890
|
+
count: number;
|
|
891
|
+
periodSeconds: number;
|
|
892
|
+
} | null;
|
|
893
|
+
deadLetter?: boolean;
|
|
894
|
+
/** Schedules sorted by name. */
|
|
895
|
+
schedules?: NormalizedConfigQueueSchedule[];
|
|
896
|
+
}
|
|
897
|
+
/** One cron schedule that sends into a declared queue. */
|
|
898
|
+
interface NormalizedConfigQueueSchedule {
|
|
899
|
+
name: string;
|
|
900
|
+
cron: string;
|
|
901
|
+
timezone?: string;
|
|
902
|
+
body?: string;
|
|
903
|
+
contentType?: string;
|
|
904
|
+
headers?: Record<string, string>;
|
|
905
|
+
enabled?: boolean;
|
|
906
|
+
}
|
|
770
907
|
/** Default maximum lifetime of one function invocation, in seconds. */
|
|
771
908
|
declare const DEFAULT_FUNCTION_DURATION_SECONDS = 30;
|
|
772
909
|
/** Maximum configurable lifetime of one function invocation, in seconds (eight hours). */
|
|
773
910
|
declare const MAX_FUNCTION_DURATION_SECONDS = 28800;
|
|
911
|
+
/**
|
|
912
|
+
* Runtime tag of an entrypoint that runs a container image instead of a
|
|
913
|
+
* managed language runtime. Such an entrypoint always carries a
|
|
914
|
+
* {@link NormalizedConfigEntrypoint.container} spec.
|
|
915
|
+
*/
|
|
916
|
+
declare const CONTAINER_RUNTIME = "docker";
|
|
917
|
+
/** Runtime tag of a container entrypoint. */
|
|
918
|
+
type ContainerRuntime = typeof CONTAINER_RUNTIME;
|
|
919
|
+
/**
|
|
920
|
+
* Prefix of the synthetic `path` a container entrypoint carries. Routes target a
|
|
921
|
+
* container function with `destination: container:<name>`.
|
|
922
|
+
*/
|
|
923
|
+
declare const CONTAINER_ENTRYPOINT_PREFIX = "container:";
|
|
924
|
+
/** Default memory of a container function, in MB. */
|
|
925
|
+
declare const DEFAULT_CONTAINER_MEMORY_MB = 512;
|
|
926
|
+
/** Default memory of a sidecar, in MB. It is added to the memory of every function it runs next to. */
|
|
927
|
+
declare const DEFAULT_SIDECAR_MEMORY_MB = 256;
|
|
928
|
+
/** Most sidecars one deployment may declare. */
|
|
929
|
+
declare const MAX_SIDECARS = 4;
|
|
930
|
+
/** Where the root filesystem of a container comes from. */
|
|
931
|
+
type NormalizedContainerImageSource = {
|
|
932
|
+
type: 'registry';
|
|
933
|
+
/** Image reference as written, e.g. `redis:7-alpine` or `ghcr.io/acme/api@sha256:...`. */
|
|
934
|
+
reference: string;
|
|
935
|
+
} | {
|
|
936
|
+
type: 'dockerfile';
|
|
937
|
+
/** Project-relative build context directory, `.` for the project root. */
|
|
938
|
+
context: string;
|
|
939
|
+
/** Dockerfile path relative to {@link context}. */
|
|
940
|
+
dockerfile: string;
|
|
941
|
+
/** Build stage to stop at, for multi-stage Dockerfiles. */
|
|
942
|
+
target?: string;
|
|
943
|
+
/** `--build-arg` values. */
|
|
944
|
+
buildArgs?: Record<string, string>;
|
|
945
|
+
};
|
|
946
|
+
/**
|
|
947
|
+
* A container image plus the settings that override its image config. The
|
|
948
|
+
* overrides are baked into the signed launch metadata at build time.
|
|
949
|
+
*/
|
|
950
|
+
interface NormalizedContainerSpec {
|
|
951
|
+
/** Name from the `containers` map. Also the hostname a sidecar answers to. */
|
|
952
|
+
name: string;
|
|
953
|
+
source: NormalizedContainerImageSource;
|
|
954
|
+
/** TCP port the process listens on. Defaults to the image's first exposed port, then 8080. */
|
|
955
|
+
port?: number;
|
|
956
|
+
/** Replaces the image `ENTRYPOINT`. */
|
|
957
|
+
entrypoint?: string[];
|
|
958
|
+
/** Replaces the image `CMD`. */
|
|
959
|
+
command?: string[];
|
|
960
|
+
/** Replaces the image `WORKDIR`. */
|
|
961
|
+
workingDirectory?: string;
|
|
962
|
+
/** Replaces the image `USER`: a name, a uid, `name:group` or `uid:gid`. */
|
|
963
|
+
user?: string;
|
|
964
|
+
/** Merged over the image `ENV`. */
|
|
965
|
+
environmentVariables?: Record<string, string>;
|
|
966
|
+
}
|
|
967
|
+
/** A container that runs next to every function instance of the deployment. */
|
|
968
|
+
interface NormalizedSidecar extends NormalizedContainerSpec {
|
|
969
|
+
/** Memory reserved for the sidecar, in MB. Added to each function's memory. */
|
|
970
|
+
memory: number;
|
|
971
|
+
}
|
|
774
972
|
interface NormalizedConfigEntrypoint {
|
|
775
973
|
displayName?: string;
|
|
974
|
+
/**
|
|
975
|
+
* Project-relative file of the function, or `container:<name>` for a
|
|
976
|
+
* container function.
|
|
977
|
+
*/
|
|
776
978
|
path: string;
|
|
777
|
-
runtime: Runtime;
|
|
979
|
+
runtime: Runtime | ContainerRuntime;
|
|
980
|
+
/** Image to run, present exactly when {@link runtime} is `docker`. */
|
|
981
|
+
container?: NormalizedContainerSpec;
|
|
778
982
|
memory: number;
|
|
779
983
|
/**
|
|
780
984
|
* Maximum lifetime of one HTTP request, response stream, or WebSocket connection, in seconds.
|
|
@@ -862,67 +1066,6 @@ type NormalizedConfigRouteMatchRequirements = [] | [
|
|
|
862
1066
|
}
|
|
863
1067
|
];
|
|
864
1068
|
|
|
865
|
-
declare const ConfigFileNotFoundError_base: Schema.TaggedErrorClass<ConfigFileNotFoundError, "ConfigFileNotFoundError", {
|
|
866
|
-
readonly _tag: Schema.tag<"ConfigFileNotFoundError">;
|
|
867
|
-
} & {
|
|
868
|
-
message: typeof Schema.String;
|
|
869
|
-
filePath: typeof Schema.String;
|
|
870
|
-
}>;
|
|
871
|
-
declare class ConfigFileNotFoundError extends ConfigFileNotFoundError_base {
|
|
872
|
-
}
|
|
873
|
-
declare const ConfigFileEmptyError_base: Schema.TaggedErrorClass<ConfigFileEmptyError, "ConfigFileEmptyError", {
|
|
874
|
-
readonly _tag: Schema.tag<"ConfigFileEmptyError">;
|
|
875
|
-
} & {
|
|
876
|
-
message: typeof Schema.String;
|
|
877
|
-
filePath: typeof Schema.String;
|
|
878
|
-
}>;
|
|
879
|
-
declare class ConfigFileEmptyError extends ConfigFileEmptyError_base {
|
|
880
|
-
}
|
|
881
|
-
declare const ConfigFileParseError_base: Schema.TaggedErrorClass<ConfigFileParseError, "ConfigFileParseError", {
|
|
882
|
-
readonly _tag: Schema.tag<"ConfigFileParseError">;
|
|
883
|
-
} & {
|
|
884
|
-
message: typeof Schema.String;
|
|
885
|
-
filePath: typeof Schema.String;
|
|
886
|
-
cause: Schema.optional<typeof Schema.String>;
|
|
887
|
-
}>;
|
|
888
|
-
declare class ConfigFileParseError extends ConfigFileParseError_base {
|
|
889
|
-
}
|
|
890
|
-
declare const ConfigModuleLoadError_base: Schema.TaggedErrorClass<ConfigModuleLoadError, "ConfigModuleLoadError", {
|
|
891
|
-
readonly _tag: Schema.tag<"ConfigModuleLoadError">;
|
|
892
|
-
} & {
|
|
893
|
-
message: typeof Schema.String;
|
|
894
|
-
filePath: typeof Schema.String;
|
|
895
|
-
cause: Schema.optional<typeof Schema.String>;
|
|
896
|
-
}>;
|
|
897
|
-
declare class ConfigModuleLoadError extends ConfigModuleLoadError_base {
|
|
898
|
-
}
|
|
899
|
-
declare const ConfigVersionError_base: Schema.TaggedErrorClass<ConfigVersionError, "ConfigVersionError", {
|
|
900
|
-
readonly _tag: Schema.tag<"ConfigVersionError">;
|
|
901
|
-
} & {
|
|
902
|
-
message: typeof Schema.String;
|
|
903
|
-
filePath: typeof Schema.String;
|
|
904
|
-
version: Schema.optional<typeof Schema.Number>;
|
|
905
|
-
}>;
|
|
906
|
-
declare class ConfigVersionError extends ConfigVersionError_base {
|
|
907
|
-
}
|
|
908
|
-
declare const ConfigSchemaValidationError_base: Schema.TaggedErrorClass<ConfigSchemaValidationError, "ConfigSchemaValidationError", {
|
|
909
|
-
readonly _tag: Schema.tag<"ConfigSchemaValidationError">;
|
|
910
|
-
} & {
|
|
911
|
-
message: typeof Schema.String;
|
|
912
|
-
filePath: typeof Schema.String;
|
|
913
|
-
validationErrors: Schema.Array$<typeof Schema.String>;
|
|
914
|
-
}>;
|
|
915
|
-
declare class ConfigSchemaValidationError extends ConfigSchemaValidationError_base {
|
|
916
|
-
}
|
|
917
|
-
declare const FunctionConfigError_base: Schema.TaggedErrorClass<FunctionConfigError, "FunctionConfigError", {
|
|
918
|
-
readonly _tag: Schema.tag<"FunctionConfigError">;
|
|
919
|
-
} & {
|
|
920
|
-
message: typeof Schema.String;
|
|
921
|
-
functionPath: typeof Schema.String;
|
|
922
|
-
}>;
|
|
923
|
-
declare class FunctionConfigError extends FunctionConfigError_base {
|
|
924
|
-
}
|
|
925
|
-
|
|
926
1069
|
declare const ConfigModuleLoader_base: Effect.Service.Class<ConfigModuleLoader, "ConfigModuleLoader", {
|
|
927
1070
|
readonly effect: Effect.Effect<{
|
|
928
1071
|
loadConfigModule: (filePath: string) => Effect.Effect<Record<string, unknown>, ConfigModuleLoadError, never>;
|
|
@@ -940,7 +1083,7 @@ declare const RawConfigReader_base: Effect.Service.Class<RawConfigReader, "RawCo
|
|
|
940
1083
|
disableVersionCheck?: boolean;
|
|
941
1084
|
} | undefined) => Effect.Effect<Record<string, unknown>, ConfigFileNotFoundError | ConfigFileEmptyError | ConfigFileParseError | ConfigModuleLoadError | ConfigVersionError, never>;
|
|
942
1085
|
readConfigFile: <T>(configFilePath: string) => Effect.Effect<T | null, ConfigFileEmptyError | ConfigFileParseError | ConfigModuleLoadError | ConfigVersionError, never>;
|
|
943
|
-
}, never,
|
|
1086
|
+
}, never, FileSystem.FileSystem | Path.Path | ConfigModuleLoader>;
|
|
944
1087
|
}>;
|
|
945
1088
|
declare class RawConfigReader extends RawConfigReader_base {
|
|
946
1089
|
}
|
|
@@ -970,6 +1113,11 @@ declare const V4ConfigParser_base: Effect.Service.Class<V4ConfigParser, "V4Confi
|
|
|
970
1113
|
* @param projectFolder - Absolute path to the project root
|
|
971
1114
|
*/
|
|
972
1115
|
parse: (config: ConfigV4, projectFolder: string) => Effect.Effect<{
|
|
1116
|
+
entrypoints: NormalizedConfigEntrypoint[];
|
|
1117
|
+
errors: never[];
|
|
1118
|
+
warnings: string[];
|
|
1119
|
+
routes: NormalizedConfigRoute[];
|
|
1120
|
+
sidecars?: NormalizedSidecar[] | undefined;
|
|
973
1121
|
regions: ("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")[];
|
|
974
1122
|
assets: {
|
|
975
1123
|
paths: string[];
|
|
@@ -981,11 +1129,7 @@ declare const V4ConfigParser_base: Effect.Service.Class<V4ConfigParser, "V4Confi
|
|
|
981
1129
|
commands: string[];
|
|
982
1130
|
images: NormalizedImagePolicy | undefined;
|
|
983
1131
|
services: NormalizedConfigServiceDefinition[] | undefined;
|
|
984
|
-
|
|
985
|
-
errors: never[];
|
|
986
|
-
warnings: never[];
|
|
987
|
-
routes: NormalizedConfigRoute[];
|
|
988
|
-
}, FunctionConfigError, Path.Path | FileSystem.FileSystem>;
|
|
1132
|
+
}, FunctionConfigError | ContainerConfigError, _effect_platform_FileSystem.FileSystem | _effect_platform_Path.Path>;
|
|
989
1133
|
}, never, never>;
|
|
990
1134
|
}>;
|
|
991
1135
|
declare class V4ConfigParser extends V4ConfigParser_base {
|
|
@@ -993,8 +1137,8 @@ declare class V4ConfigParser extends V4ConfigParser_base {
|
|
|
993
1137
|
|
|
994
1138
|
declare const VercelBuildOutputParser_base: Effect.Service.Class<VercelBuildOutputParser, "VercelBuildOutputParser", {
|
|
995
1139
|
readonly effect: Effect.Effect<{
|
|
996
|
-
parse: (parseResult: NormalizedConfig, projectFolder: string) => Effect.Effect<NormalizedConfig, ConfigFileEmptyError | ConfigFileParseError | ConfigModuleLoadError | ConfigVersionError,
|
|
997
|
-
}, never,
|
|
1140
|
+
parse: (parseResult: NormalizedConfig, projectFolder: string) => Effect.Effect<NormalizedConfig, ConfigFileEmptyError | ConfigFileParseError | ConfigModuleLoadError | ConfigVersionError, _effect_platform_FileSystem.FileSystem | Path.Path>;
|
|
1141
|
+
}, never, Path.Path | RawConfigReader>;
|
|
998
1142
|
}>;
|
|
999
1143
|
declare class VercelBuildOutputParser extends VercelBuildOutputParser_base {
|
|
1000
1144
|
}
|
|
@@ -1014,6 +1158,11 @@ interface Config {
|
|
|
1014
1158
|
* @param projectFolder - Absolute path to the project root
|
|
1015
1159
|
*/
|
|
1016
1160
|
declare const parseConfigRaw: (filePath: string, projectFolder: string) => Effect.Effect<{
|
|
1161
|
+
entrypoints: NormalizedConfigEntrypoint[];
|
|
1162
|
+
errors: never[];
|
|
1163
|
+
warnings: string[];
|
|
1164
|
+
routes: NormalizedConfigRoute[];
|
|
1165
|
+
sidecars?: NormalizedSidecar[] | undefined;
|
|
1017
1166
|
regions: ("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")[];
|
|
1018
1167
|
assets: {
|
|
1019
1168
|
paths: string[];
|
|
@@ -1025,11 +1174,7 @@ declare const parseConfigRaw: (filePath: string, projectFolder: string) => Effec
|
|
|
1025
1174
|
commands: string[];
|
|
1026
1175
|
images: NormalizedImagePolicy | undefined;
|
|
1027
1176
|
services: NormalizedConfigServiceDefinition[] | undefined;
|
|
1028
|
-
|
|
1029
|
-
errors: never[];
|
|
1030
|
-
warnings: never[];
|
|
1031
|
-
routes: NormalizedConfigRoute[];
|
|
1032
|
-
}, ConfigFileNotFoundError | ConfigFileEmptyError | ConfigFileParseError | ConfigModuleLoadError | ConfigVersionError | ConfigSchemaValidationError | FunctionConfigError, RawConfigReader | _effect_platform_Path.Path | _effect_platform_FileSystem.FileSystem | SchemaValidator | V4ConfigParser>;
|
|
1177
|
+
}, ConfigFileNotFoundError | ConfigFileEmptyError | ConfigFileParseError | ConfigModuleLoadError | ConfigVersionError | ConfigSchemaValidationError | FunctionConfigError | ContainerConfigError, _effect_platform_FileSystem.FileSystem | _effect_platform_Path.Path | RawConfigReader | SchemaValidator | V4ConfigParser>;
|
|
1033
1178
|
/**
|
|
1034
1179
|
* Parses a config file at the given path, validates it against the appropriate
|
|
1035
1180
|
* JSON Schema, converts it to a NormalizedConfig, and applies post-processing.
|
|
@@ -1037,7 +1182,7 @@ declare const parseConfigRaw: (filePath: string, projectFolder: string) => Effec
|
|
|
1037
1182
|
* @param filePath - Absolute path to the config file
|
|
1038
1183
|
* @param projectFolder - Absolute path to the project root
|
|
1039
1184
|
*/
|
|
1040
|
-
declare const parseConfig: (filePath: string, projectFolder: string) => Effect.Effect<NormalizedConfig, ConfigFileNotFoundError | ConfigFileEmptyError | ConfigFileParseError | ConfigModuleLoadError | ConfigVersionError | ConfigSchemaValidationError | FunctionConfigError,
|
|
1185
|
+
declare const parseConfig: (filePath: string, projectFolder: string) => Effect.Effect<NormalizedConfig, ConfigFileNotFoundError | ConfigFileEmptyError | ConfigFileParseError | ConfigModuleLoadError | ConfigVersionError | ConfigSchemaValidationError | FunctionConfigError | ContainerConfigError, _effect_platform_FileSystem.FileSystem | _effect_platform_Path.Path | RawConfigReader | SchemaValidator | V4ConfigParser | VercelBuildOutputParser>;
|
|
1041
1186
|
/**
|
|
1042
1187
|
* Applies post-processing transformers to a NormalizedConfig:
|
|
1043
1188
|
* - Vercel Build Output v3 (merges functions/routes from .vercel/output if present)
|
|
@@ -1048,7 +1193,7 @@ declare const parseConfig: (filePath: string, projectFolder: string) => Effect.E
|
|
|
1048
1193
|
* @param projectFolder - Absolute path to the project root
|
|
1049
1194
|
* @returns The post-processed NormalizedConfig
|
|
1050
1195
|
*/
|
|
1051
|
-
declare const postProcessConfig: (config: NormalizedConfig, projectFolder: string) => Effect.Effect<NormalizedConfig, ConfigFileEmptyError | ConfigFileParseError | ConfigModuleLoadError | ConfigVersionError,
|
|
1196
|
+
declare const postProcessConfig: (config: NormalizedConfig, projectFolder: string) => Effect.Effect<NormalizedConfig, ConfigFileEmptyError | ConfigFileParseError | ConfigModuleLoadError | ConfigVersionError, _effect_platform_FileSystem.FileSystem | _effect_platform_Path.Path | VercelBuildOutputParser>;
|
|
1052
1197
|
|
|
1053
1198
|
interface ConfigV4 extends Config {
|
|
1054
1199
|
version: 4;
|
|
@@ -1134,6 +1279,75 @@ interface ConfigV4 extends Config {
|
|
|
1134
1279
|
env?: Record<string, string>;
|
|
1135
1280
|
/** Declares managed services to provision for the deployment environment. */
|
|
1136
1281
|
services?: ConfigV4Services;
|
|
1282
|
+
/**
|
|
1283
|
+
* Container images to run, keyed by name. A container without `sidecar: true`
|
|
1284
|
+
* runs as a function that routes target with `destination: container:<name>`.
|
|
1285
|
+
* A sidecar runs next to every function instance and answers at `<name>:<port>`.
|
|
1286
|
+
* A name is 1 to 63 lowercase letters, digits, `-` or `_`, starts with a
|
|
1287
|
+
* letter (so it never reads as an IP address), and is not `localhost`.
|
|
1288
|
+
*
|
|
1289
|
+
* @example
|
|
1290
|
+
* ```yaml
|
|
1291
|
+
* containers:
|
|
1292
|
+
* web:
|
|
1293
|
+
* build: .
|
|
1294
|
+
* port: 3000
|
|
1295
|
+
* redis:
|
|
1296
|
+
* image: redis:7-alpine
|
|
1297
|
+
* sidecar: true
|
|
1298
|
+
* ```
|
|
1299
|
+
*/
|
|
1300
|
+
containers?: Record<string, ConfigV4Container> | null;
|
|
1301
|
+
/**
|
|
1302
|
+
* Project-relative path of a Compose file whose services are imported as
|
|
1303
|
+
* `containers`. Entries in `containers` win over imported services of the
|
|
1304
|
+
* same name.
|
|
1305
|
+
*/
|
|
1306
|
+
compose?: string | null;
|
|
1307
|
+
}
|
|
1308
|
+
/** One entry of the v4 `containers` map. Exactly one of `image` and `build` is required. */
|
|
1309
|
+
interface ConfigV4Container {
|
|
1310
|
+
/** Registry image reference, e.g. `redis:7-alpine` or `ghcr.io/acme/api:1.4`. */
|
|
1311
|
+
image?: string;
|
|
1312
|
+
/** Build context directory, or the full build settings, for a Dockerfile in the repository. */
|
|
1313
|
+
build?: string | ConfigV4ContainerBuild;
|
|
1314
|
+
/** Run next to every function instance instead of serving routes. Defaults to `false`. */
|
|
1315
|
+
sidecar?: boolean;
|
|
1316
|
+
/** TCP port the container listens on. Defaults to the image's first exposed port, then 8080. */
|
|
1317
|
+
port?: number;
|
|
1318
|
+
/** Replaces the image `ENTRYPOINT`. A string is split into words the way Compose splits it. */
|
|
1319
|
+
entrypoint?: string | string[];
|
|
1320
|
+
/** Replaces the image `CMD`. A string is split into words the way Compose splits it. */
|
|
1321
|
+
command?: string | string[];
|
|
1322
|
+
/** Environment variables baked into the container, merged over the image `ENV`. */
|
|
1323
|
+
env?: Record<string, string>;
|
|
1324
|
+
/** Replaces the image `WORKDIR`. Must be absolute. */
|
|
1325
|
+
working_dir?: string;
|
|
1326
|
+
/**
|
|
1327
|
+
* Replaces the image `USER`: a name, a uid, `name:group` or `uid:gid`. A bare
|
|
1328
|
+
* uid may be written as a number. Root is never used: a root image runs as a
|
|
1329
|
+
* dedicated non-root user.
|
|
1330
|
+
*/
|
|
1331
|
+
user?: string | number;
|
|
1332
|
+
/** Memory in MB, a whole number from 128 to 3009. Defaults to 512 for a container function and 256 for a sidecar. */
|
|
1333
|
+
memory?: number;
|
|
1334
|
+
/** Maximum lifetime of one request, in seconds. Container functions only. */
|
|
1335
|
+
max_duration?: number;
|
|
1336
|
+
/** Stream responses. Defaults to `true`. Container functions only. */
|
|
1337
|
+
streaming?: boolean;
|
|
1338
|
+
/** Run on a timer, like a function `schedule`. Container functions only. */
|
|
1339
|
+
schedule?: string;
|
|
1340
|
+
}
|
|
1341
|
+
/** Dockerfile build settings for a container. */
|
|
1342
|
+
interface ConfigV4ContainerBuild {
|
|
1343
|
+
/** Project-relative build context. Defaults to `.`. */
|
|
1344
|
+
context?: string;
|
|
1345
|
+
/** Dockerfile path relative to the context. Defaults to `Dockerfile`. */
|
|
1346
|
+
dockerfile?: string;
|
|
1347
|
+
/** Build stage to stop at. */
|
|
1348
|
+
target?: string;
|
|
1349
|
+
/** Build arguments. */
|
|
1350
|
+
args?: Record<string, string>;
|
|
1137
1351
|
}
|
|
1138
1352
|
interface ConfigV4Service {
|
|
1139
1353
|
}
|
|
@@ -1181,6 +1395,75 @@ interface ConfigV4Services {
|
|
|
1181
1395
|
postgres?: ConfigV4ServicePostgres | null;
|
|
1182
1396
|
/** Declarative File Storage buckets for the deployment environment. */
|
|
1183
1397
|
storage?: ConfigV4ServiceStorage;
|
|
1398
|
+
/**
|
|
1399
|
+
* Queues for the deployment environment, keyed by name. `null` declares a
|
|
1400
|
+
* pull queue with default settings.
|
|
1401
|
+
*
|
|
1402
|
+
* @example
|
|
1403
|
+
* ```yaml
|
|
1404
|
+
* services:
|
|
1405
|
+
* queues:
|
|
1406
|
+
* emails:
|
|
1407
|
+
* consumer: /api/queues/emails
|
|
1408
|
+
* maxAttempts: 5
|
|
1409
|
+
* schedules:
|
|
1410
|
+
* daily-digest:
|
|
1411
|
+
* cron: '0 8 * * MON-FRI'
|
|
1412
|
+
* timezone: Europe/Berlin
|
|
1413
|
+
* body: { kind: digest }
|
|
1414
|
+
* jobs: null
|
|
1415
|
+
* ```
|
|
1416
|
+
*/
|
|
1417
|
+
queues?: Record<string, ConfigV4Queue | null>;
|
|
1418
|
+
}
|
|
1419
|
+
/** A duration in seconds, or a string such as `30s`, `10m`, `1.5h` or `4d`. */
|
|
1420
|
+
type ConfigV4QueueDuration = number | `${number}${'s' | 'm' | 'h' | 'd'}`;
|
|
1421
|
+
/** Settings for a declaratively provisioned queue. Omitted settings keep the platform defaults. */
|
|
1422
|
+
interface ConfigV4Queue {
|
|
1423
|
+
/**
|
|
1424
|
+
* Deployment-relative path that receives each message as a signed POST, for
|
|
1425
|
+
* example `/api/queues/emails`. Omit it for a pull queue.
|
|
1426
|
+
*/
|
|
1427
|
+
consumer?: string | null;
|
|
1428
|
+
/** How long a push delivery may run, or how long a received message stays leased. Defaults to 60 seconds. */
|
|
1429
|
+
visibilityTimeout?: ConfigV4QueueDuration;
|
|
1430
|
+
/** How long an undelivered message is kept. Defaults to 4 days, at most 14 days. */
|
|
1431
|
+
retention?: ConfigV4QueueDuration;
|
|
1432
|
+
/** Deliveries per message before it moves to the dead-letter list. Defaults to 10. */
|
|
1433
|
+
maxAttempts?: number;
|
|
1434
|
+
/** Exponential backoff between failed deliveries. Defaults to 5 seconds up to 15 minutes. */
|
|
1435
|
+
retryBackoff?: {
|
|
1436
|
+
min?: ConfigV4QueueDuration;
|
|
1437
|
+
max?: ConfigV4QueueDuration;
|
|
1438
|
+
};
|
|
1439
|
+
/** How long a deduplication key is remembered. Defaults to 24 hours. */
|
|
1440
|
+
deduplicationWindow?: ConfigV4QueueDuration;
|
|
1441
|
+
/** Most push deliveries in flight at once. Defaults to 100. */
|
|
1442
|
+
concurrency?: number | null;
|
|
1443
|
+
/** Most deliveries started per period. The period defaults to one second. */
|
|
1444
|
+
rateLimit?: {
|
|
1445
|
+
count: number;
|
|
1446
|
+
period?: ConfigV4QueueDuration;
|
|
1447
|
+
} | null;
|
|
1448
|
+
/** Keep messages that run out of attempts for inspection and redrive. Defaults to `true`. */
|
|
1449
|
+
deadLetter?: boolean;
|
|
1450
|
+
/** Cron schedules that send a message into this queue, keyed by schedule name. */
|
|
1451
|
+
schedules?: Record<string, ConfigV4QueueSchedule>;
|
|
1452
|
+
}
|
|
1453
|
+
/** A recurring send into a queue. */
|
|
1454
|
+
interface ConfigV4QueueSchedule {
|
|
1455
|
+
/** Five-field cron expression, or a macro such as `@hourly`. */
|
|
1456
|
+
cron: string;
|
|
1457
|
+
/** IANA time zone the expression is evaluated in. Defaults to `UTC`. */
|
|
1458
|
+
timezone?: string;
|
|
1459
|
+
/** Message body. Strings are sent as is; any other value is serialized as JSON. */
|
|
1460
|
+
body?: unknown;
|
|
1461
|
+
/** Content type of the body. Defaults to `text/plain` for a string body and `application/json` otherwise. */
|
|
1462
|
+
contentType?: string;
|
|
1463
|
+
/** Headers delivered with every message from this schedule. */
|
|
1464
|
+
headers?: Record<string, string>;
|
|
1465
|
+
/** Set to `false` to keep the schedule without sending. Defaults to `true`. */
|
|
1466
|
+
enabled?: boolean;
|
|
1184
1467
|
}
|
|
1185
1468
|
/** Declarative File Storage configuration for one deployment environment. */
|
|
1186
1469
|
interface ConfigV4ServiceStorage extends ConfigV4Service {
|
|
@@ -1222,9 +1505,17 @@ interface ConfigV4FunctionSettings {
|
|
|
1222
1505
|
*/
|
|
1223
1506
|
max_duration?: number;
|
|
1224
1507
|
/**
|
|
1225
|
-
* The runtime to use for the function.
|
|
1508
|
+
* The runtime to use for the function. `docker` builds the matched file as a
|
|
1509
|
+
* Dockerfile, with its directory as the build context, and runs the image as
|
|
1510
|
+
* the function. Routes target it by the Dockerfile's path, like any other
|
|
1511
|
+
* function file.
|
|
1512
|
+
*/
|
|
1513
|
+
runtime?: Runtime | ContainerRuntime;
|
|
1514
|
+
/**
|
|
1515
|
+
* TCP port the image listens on. Only for `runtime: docker`. Defaults to the
|
|
1516
|
+
* image's first exposed port, then 8080.
|
|
1226
1517
|
*/
|
|
1227
|
-
|
|
1518
|
+
port?: number;
|
|
1228
1519
|
/**
|
|
1229
1520
|
* Enable function response streaming. When omitted, Node and Bun runtimes stream by default.
|
|
1230
1521
|
*/
|
|
@@ -1252,6 +1543,98 @@ interface ConfigV4FunctionSettings {
|
|
|
1252
1543
|
schedule?: string;
|
|
1253
1544
|
}
|
|
1254
1545
|
|
|
1546
|
+
/** Compose file names, in the order `docker compose` looks for them. */
|
|
1547
|
+
declare const COMPOSE_FILE_NAMES: readonly ["compose.yaml", "compose.yml", "docker-compose.yaml", "docker-compose.yml"];
|
|
1548
|
+
/**
|
|
1549
|
+
* Returns the synthetic entrypoint path of a container function, which routes
|
|
1550
|
+
* use as their `destination`.
|
|
1551
|
+
*
|
|
1552
|
+
* @example
|
|
1553
|
+
* ```ts
|
|
1554
|
+
* containerEntrypointPath('web'); // 'container:web'
|
|
1555
|
+
* ```
|
|
1556
|
+
*/
|
|
1557
|
+
declare const containerEntrypointPath: (name: string) => string;
|
|
1558
|
+
/**
|
|
1559
|
+
* Derives the container name of a `functions` entry that runs a Dockerfile
|
|
1560
|
+
* (`runtime: docker`): the directory the Dockerfile sits in, plus any suffix
|
|
1561
|
+
* or prefix around `Dockerfile` in its file name. A root `Dockerfile` is `app`,
|
|
1562
|
+
* and a name that would not start with a letter gets an `app-` prefix.
|
|
1563
|
+
*
|
|
1564
|
+
* @param file - Project-relative path of the Dockerfile
|
|
1565
|
+
* @returns A valid container name
|
|
1566
|
+
* @example
|
|
1567
|
+
* ```ts
|
|
1568
|
+
* dockerFunctionContainerName('Dockerfile'); // 'app'
|
|
1569
|
+
* dockerFunctionContainerName('services/api/Dockerfile'); // 'api'
|
|
1570
|
+
* dockerFunctionContainerName('docker/worker.Dockerfile'); // 'docker-worker'
|
|
1571
|
+
* dockerFunctionContainerName('services/1/Dockerfile'); // 'app-1'
|
|
1572
|
+
* ```
|
|
1573
|
+
*/
|
|
1574
|
+
declare const dockerFunctionContainerName: (file: string) => string;
|
|
1575
|
+
/**
|
|
1576
|
+
* Splits a command string into words the way Compose does: whitespace
|
|
1577
|
+
* separates words, single and double quotes group them, and a backslash
|
|
1578
|
+
* escapes the next character outside single quotes. No shell runs.
|
|
1579
|
+
*
|
|
1580
|
+
* @param input - Command as written, e.g. `redis-server --save ""`
|
|
1581
|
+
* @returns The argv words
|
|
1582
|
+
* @throws Error when a quote is left open
|
|
1583
|
+
* @example
|
|
1584
|
+
* ```ts
|
|
1585
|
+
* splitCommandWords('sh -c "echo hi"'); // ['sh', '-c', 'echo hi']
|
|
1586
|
+
* ```
|
|
1587
|
+
*/
|
|
1588
|
+
declare const splitCommandWords: (input: string) => string[];
|
|
1589
|
+
/**
|
|
1590
|
+
* Turns the `containers` map into container-function entrypoints and sidecars.
|
|
1591
|
+
*
|
|
1592
|
+
* Validates names, the bounds the v4 schema sets (so Compose-imported entries
|
|
1593
|
+
* fail as early as written ones), the sidecar count, and explicitly declared
|
|
1594
|
+
* ports that would collide inside one microVM. Ports an image only exposes are
|
|
1595
|
+
* checked later, once the image config is known.
|
|
1596
|
+
*
|
|
1597
|
+
* @param containers - The `containers` map, after any Compose import
|
|
1598
|
+
* @param projectFolder - Absolute path to the project root
|
|
1599
|
+
*/
|
|
1600
|
+
declare const normalizeContainers: (containers: Readonly<Record<string, ConfigV4Container>>, projectFolder: string) => Effect.Effect<{
|
|
1601
|
+
entrypoints: NormalizedConfigEntrypoint[];
|
|
1602
|
+
sidecars: NormalizedSidecar[];
|
|
1603
|
+
warnings: string[];
|
|
1604
|
+
}, ContainerConfigError, FileSystem.FileSystem | Path.Path>;
|
|
1605
|
+
/**
|
|
1606
|
+
* Tells whether a Compose file names an application to deploy: a service
|
|
1607
|
+
* marked `x-gigadrive: { public: true }`, or one that builds from source.
|
|
1608
|
+
* Auto-detection skips a Compose file without one, such as one that only runs
|
|
1609
|
+
* a database for local development.
|
|
1610
|
+
*
|
|
1611
|
+
* @param composePath - Project-relative path of the Compose file
|
|
1612
|
+
* @param projectFolder - Absolute path to the project root
|
|
1613
|
+
*/
|
|
1614
|
+
declare const composeDeclaresApp: (composePath: string, projectFolder: string) => Effect.Effect<boolean, ContainerConfigError, FileSystem.FileSystem | Path.Path>;
|
|
1615
|
+
/**
|
|
1616
|
+
* Reads a Compose file and maps its services onto `containers` entries.
|
|
1617
|
+
*
|
|
1618
|
+
* The container function is the service marked `x-gigadrive: { public: true }`,
|
|
1619
|
+
* or else the only service that builds from source; anything else is
|
|
1620
|
+
* ambiguous and fails. Every other service becomes a sidecar that the function
|
|
1621
|
+
* reaches by its service name, the way Compose's default network resolves it.
|
|
1622
|
+
* Services behind a profile are skipped, as `docker compose up` skips them.
|
|
1623
|
+
* Volumes, networks, health checks and restart policies have no equivalent and
|
|
1624
|
+
* are dropped; volumes, `extends` and override files are reported.
|
|
1625
|
+
*
|
|
1626
|
+
* Every file read (the Compose file, `.env`, `env_file`) must resolve inside
|
|
1627
|
+
* the project after following symbolic links.
|
|
1628
|
+
*
|
|
1629
|
+
* @param composePath - Project-relative path of the Compose file
|
|
1630
|
+
* @param projectFolder - Absolute path to the project root
|
|
1631
|
+
*/
|
|
1632
|
+
declare const readComposeContainers: (composePath: string, projectFolder: string) => Effect.Effect<{
|
|
1633
|
+
containers: Record<string, ConfigV4Container>;
|
|
1634
|
+
publicService: string;
|
|
1635
|
+
warnings: string[];
|
|
1636
|
+
}, ContainerConfigError, FileSystem.FileSystem | Path.Path>;
|
|
1637
|
+
|
|
1255
1638
|
/**
|
|
1256
1639
|
* Identity helper providing type inference and checking for `gigadrive.ts`
|
|
1257
1640
|
* config files. Using it is optional — a plain object default export works the
|
|
@@ -1282,6 +1665,36 @@ interface ConfigV4FunctionSettings {
|
|
|
1282
1665
|
*/
|
|
1283
1666
|
declare const defineConfig: (config: ConfigV4) => ConfigV4;
|
|
1284
1667
|
|
|
1668
|
+
/** How a container project was recognized. */
|
|
1669
|
+
interface ContainerProjectDetection {
|
|
1670
|
+
/** `compose` for a Compose file, `dockerfile` for a lone root `Dockerfile`. */
|
|
1671
|
+
kind: 'compose' | 'dockerfile';
|
|
1672
|
+
/** Project-relative file the configuration came from. */
|
|
1673
|
+
file: string;
|
|
1674
|
+
/** Deployable configuration: one container function behind a catch-all route, plus any sidecars. */
|
|
1675
|
+
config: NormalizedConfig;
|
|
1676
|
+
}
|
|
1677
|
+
/**
|
|
1678
|
+
* Recognizes a project that ships as container images: a Compose file first,
|
|
1679
|
+
* then a `Dockerfile` at the project root.
|
|
1680
|
+
*
|
|
1681
|
+
* Callers try this only after finding neither a `gigadrive.yaml` nor a
|
|
1682
|
+
* framework. A framework project often carries a Compose file for local
|
|
1683
|
+
* databases, and deploying that file instead of the framework would change
|
|
1684
|
+
* what an existing project deploys. For the same reason a Compose file counts
|
|
1685
|
+
* only when it names an application: a service that builds from source or is
|
|
1686
|
+
* marked `x-gigadrive: { public: true }`. One that only runs, say, a database
|
|
1687
|
+
* for local development is ignored, and the root `Dockerfile` check follows.
|
|
1688
|
+
*
|
|
1689
|
+
* @param projectFolder - Absolute path to the project root
|
|
1690
|
+
* @returns The detection, or `undefined` when the project has neither file
|
|
1691
|
+
*/
|
|
1692
|
+
declare const detectContainerProject: (projectFolder: string) => Effect.Effect<{
|
|
1693
|
+
kind: "dockerfile" | "compose";
|
|
1694
|
+
file: string;
|
|
1695
|
+
config: NormalizedConfig;
|
|
1696
|
+
} | undefined, ContainerConfigError, FileSystem.FileSystem | Path.Path>;
|
|
1697
|
+
|
|
1285
1698
|
declare const ManifestNotFoundError_base: Schema.TaggedErrorClass<ManifestNotFoundError, "ManifestNotFoundError", {
|
|
1286
1699
|
readonly _tag: Schema.tag<"ManifestNotFoundError">;
|
|
1287
1700
|
} & {
|
|
@@ -1408,7 +1821,7 @@ declare const detectFramework: (projectFolder: string) => Effect.Effect<{
|
|
|
1408
1821
|
framework: FrameworkDefinition;
|
|
1409
1822
|
packageManager: PackageManager;
|
|
1410
1823
|
config: NormalizedConfig;
|
|
1411
|
-
}, ManifestReadError | ManifestParseError | FrameworkNotDetectedError,
|
|
1824
|
+
}, ManifestReadError | ManifestParseError | FrameworkNotDetectedError, FileSystem.FileSystem | Path.Path>;
|
|
1412
1825
|
|
|
1413
1826
|
/**
|
|
1414
1827
|
* Detects the package manager by checking for lockfiles in the project folder.
|
|
@@ -1417,7 +1830,7 @@ declare const detectFramework: (projectFolder: string) => Effect.Effect<{
|
|
|
1417
1830
|
* @param projectFolder - Absolute path to the project root
|
|
1418
1831
|
* @returns The detected package manager
|
|
1419
1832
|
*/
|
|
1420
|
-
declare const detectPackageManager: (projectFolder: string) => Effect.Effect<PackageManager, never,
|
|
1833
|
+
declare const detectPackageManager: (projectFolder: string) => Effect.Effect<PackageManager, never, FileSystem.FileSystem | Path.Path>;
|
|
1421
1834
|
|
|
1422
1835
|
/**
|
|
1423
1836
|
* All supported framework definitions, sorted by priority descending.
|
|
@@ -1429,24 +1842,33 @@ declare const FRAMEWORK_DEFINITIONS: FrameworkDefinition[];
|
|
|
1429
1842
|
* Generates a NormalizedConfig from a framework definition and detected package manager.
|
|
1430
1843
|
* Prepends the install command and builds a complete deployment configuration.
|
|
1431
1844
|
*
|
|
1845
|
+
* Runs after the customer build, so a framework's `assetsDir` is resolved
|
|
1846
|
+
* against real build output.
|
|
1847
|
+
*
|
|
1432
1848
|
* @param framework - The detected framework definition
|
|
1433
1849
|
* @param packageManager - The detected package manager
|
|
1850
|
+
* @param projectFolder - Absolute path to the project root, used to enumerate `assetsDir`
|
|
1434
1851
|
* @returns A complete NormalizedConfig with framework defaults
|
|
1435
1852
|
*/
|
|
1436
|
-
declare const generateConfig: (framework: FrameworkDefinition, packageManager: PackageManager, refinedDefaults?: FrameworkDefaultConfig | undefined) => Effect.Effect<NormalizedConfig, never,
|
|
1853
|
+
declare const generateConfig: (framework: FrameworkDefinition, packageManager: PackageManager, projectFolder: string, refinedDefaults?: FrameworkDefaultConfig | undefined) => Effect.Effect<NormalizedConfig, never, _effect_platform_FileSystem.FileSystem | _effect_platform_Path.Path>;
|
|
1437
1854
|
|
|
1438
1855
|
/**
|
|
1439
1856
|
* Merges framework defaults with a user-provided config.
|
|
1440
1857
|
* User config always takes precedence; framework defaults fill gaps.
|
|
1441
1858
|
*
|
|
1442
1859
|
* - commands: use user's if non-empty, otherwise framework's
|
|
1443
|
-
* - entrypoints: use user's if non-empty, otherwise framework's
|
|
1444
|
-
*
|
|
1860
|
+
* - entrypoints: use user's if non-empty, otherwise framework's. Container
|
|
1861
|
+
* functions (`runtime: docker`) do not count: they are always kept, next to
|
|
1862
|
+
* whichever file functions win, because a framework never declares them.
|
|
1863
|
+
* - routes: use user's if any of them targets something other than a container
|
|
1864
|
+
* function, otherwise the framework's, preceded by the user's routes to
|
|
1865
|
+
* container functions so that e.g. `/api/*` wins over a framework catch-all.
|
|
1445
1866
|
* - assets: use user's if it declares any sources, otherwise framework's
|
|
1446
1867
|
* - excludeFiles: use user's if non-empty, otherwise framework's
|
|
1447
1868
|
* - regions: always use user's (always populated from parsing)
|
|
1448
1869
|
* - environmentVariables: deep merge (framework base, user overrides)
|
|
1449
1870
|
* - services: always use user's (frameworks don't define services)
|
|
1871
|
+
* - sidecars: always use user's (frameworks don't define sidecars)
|
|
1450
1872
|
* - warnings/errors: concatenate both
|
|
1451
1873
|
*
|
|
1452
1874
|
* @param userConfig - The config parsed from the user's config file
|
|
@@ -1468,7 +1890,7 @@ declare const mergeWithFrameworkDefaults: (userConfig: NormalizedConfig, framewo
|
|
|
1468
1890
|
* @param language - The framework language to determine which manifest to read
|
|
1469
1891
|
* @returns A set of dependency package names
|
|
1470
1892
|
*/
|
|
1471
|
-
declare const readDependencies: (projectFolder: string, language: FrameworkLanguage) => Effect.Effect<Set<string>, ManifestReadError | ManifestParseError,
|
|
1893
|
+
declare const readDependencies: (projectFolder: string, language: FrameworkLanguage) => Effect.Effect<Set<string>, ManifestReadError | ManifestParseError, FileSystem.FileSystem | Path.Path>;
|
|
1472
1894
|
|
|
1473
1895
|
/**
|
|
1474
1896
|
* Ensure a normalized config has no function files that are also defined as assets.
|
|
@@ -1478,6 +1900,6 @@ declare const readDependencies: (projectFolder: string, language: FrameworkLangu
|
|
|
1478
1900
|
*/
|
|
1479
1901
|
declare const filterFunctionsFromAssets: (config: NormalizedConfig) => NormalizedConfig;
|
|
1480
1902
|
|
|
1481
|
-
declare const NetworkConfigLive: Layer.Layer<ConfigModuleLoader | RawConfigReader | SchemaValidator | V4ConfigParser | VercelBuildOutputParser, never,
|
|
1903
|
+
declare const NetworkConfigLive: Layer.Layer<ConfigModuleLoader | RawConfigReader | SchemaValidator | V4ConfigParser | VercelBuildOutputParser, never, _effect_platform_FileSystem.FileSystem | _effect_platform_Path.Path>;
|
|
1482
1904
|
|
|
1483
|
-
export { ALLOWED_CONFIG_NAMES, AVAILABLE_REGIONS, AVAILABLE_RUNTIMES, type Config, ConfigFileEmptyError, ConfigFileNotFoundError, ConfigFileParseError, ConfigModuleLoadError, ConfigModuleLoader, ConfigSchemaValidationError, type ConfigV4, type ConfigV4FunctionSettings, type ConfigV4Service, type ConfigV4ServicePostgres, type ConfigV4ServiceRedis, type ConfigV4ServiceStorage, type ConfigV4Services, type ConfigV4StorageBucket, ConfigVersionError, DEFAULT_FUNCTION_DURATION_SECONDS, type DetectionResult, FRAMEWORK_DEFINITIONS, type FilePathMap, type FrameworkDefaultConfig, type FrameworkDefinition, type FrameworkDetectionItem, type FrameworkLanguage, FrameworkNotDetectedError, FunctionConfigError, type GigadriveNextBuildManifest, GigadriveNextBuildManifestSchema, type GigadriveNextBuildManifestV1, GigadriveNextBuildManifestV1Schema, type GigadriveNextBuildManifestV2, type GigadriveNextBuildManifestV2Export, GigadriveNextBuildManifestV2ExportSchema, type GigadriveNextBuildManifestV2Standalone, GigadriveNextBuildManifestV2StandaloneSchema, type GigadriveNextMiddlewareDescriptor, GigadriveNextMiddlewareDescriptorSchema, type GigadriveNextMiddlewareMatcher, GigadriveNextMiddlewareMatcherSchema, type GigadriveNextPrerenderManifestV1, GigadriveNextPrerenderManifestV1Schema, type GigadriveNextPrerenderOutput, GigadriveNextPrerenderOutputSchema, type GigadriveNextPrerenderSeedMethods, GigadriveNextPrerenderSeedMethodsSchema, type GigadriveNextRouteCondition, GigadriveNextRouteConditionSchema, type GigadriveNextServerDescriptor, GigadriveNextServerDescriptorSchema, type GigadriveNextStaticAssetPrefix, GigadriveNextStaticAssetPrefixSchema, type JsonValue, MAX_FUNCTION_DURATION_SECONDS, ManifestNotFoundError, ManifestParseError, ManifestReadError, type NeonAWSRegion, NetworkConfigLive, type NormalizedConfig, type NormalizedConfigEntrypoint, type NormalizedConfigRoute, type NormalizedConfigRouteHandler, type NormalizedConfigRouteMatchRequirements, type NormalizedConfigRouteMethod, type NormalizedConfigService, type NormalizedConfigServiceDefinition, type NormalizedConfigServicePostgres, type NormalizedConfigServiceRedis, type NormalizedConfigServiceStorage, type NormalizedConfigServiceType, type NormalizedConfigStorageBucket, type NormalizedFramework, type NormalizedImageFit, type NormalizedImageFormat, type NormalizedImageLocalPattern, type NormalizedImagePolicy, type NormalizedImageRemotePattern, type NormalizedImageVariant, type NormalizedNextjsFramework, type NormalizedSharedArtifact, type PackageManager, RawConfigReader, type Region, type Runtime, SchemaValidator, type StaticAssetHeaders, StaticAssetHeadersSchema, type StaticAssetManifest, type StaticAssetManifestEntry, StaticAssetManifestEntrySchema, type StaticAssetManifestV1, StaticAssetManifestV1Schema, type UpstashAWSRegion, V4ConfigParser, VercelBuildOutputParser, defineConfig, detectFramework, detectPackageManager, filterFunctionsFromAssets, generateConfig, getFunctionSettings, mergeWithFrameworkDefaults, parseConfig, parseConfigRaw, parseGigadriveNextBuildManifest, parseGigadriveNextPrerenderManifest, parseStaticAssetManifest, postProcessConfig, readDependencies };
|
|
1905
|
+
export { ALLOWED_CONFIG_NAMES, AVAILABLE_REGIONS, AVAILABLE_RUNTIMES, COMPOSE_FILE_NAMES, CONTAINER_ENTRYPOINT_PREFIX, CONTAINER_RUNTIME, type Config, ConfigFileEmptyError, ConfigFileNotFoundError, ConfigFileParseError, ConfigModuleLoadError, ConfigModuleLoader, ConfigSchemaValidationError, type ConfigV4, type ConfigV4Container, type ConfigV4ContainerBuild, type ConfigV4FunctionSettings, type ConfigV4Queue, type ConfigV4QueueDuration, type ConfigV4QueueSchedule, type ConfigV4Service, type ConfigV4ServicePostgres, type ConfigV4ServiceRedis, type ConfigV4ServiceStorage, type ConfigV4Services, type ConfigV4StorageBucket, ConfigVersionError, ContainerConfigError, type ContainerProjectDetection, type ContainerRuntime, DEFAULT_CONTAINER_MEMORY_MB, DEFAULT_FUNCTION_DURATION_SECONDS, DEFAULT_SIDECAR_MEMORY_MB, type DetectionResult, FRAMEWORK_DEFINITIONS, type FilePathMap, type FrameworkDefaultConfig, type FrameworkDefinition, type FrameworkDetectionItem, type FrameworkLanguage, FrameworkNotDetectedError, FunctionConfigError, type GigadriveNextBuildManifest, GigadriveNextBuildManifestSchema, type GigadriveNextBuildManifestV1, GigadriveNextBuildManifestV1Schema, type GigadriveNextBuildManifestV2, type GigadriveNextBuildManifestV2Export, GigadriveNextBuildManifestV2ExportSchema, type GigadriveNextBuildManifestV2Standalone, GigadriveNextBuildManifestV2StandaloneSchema, type GigadriveNextMiddlewareDescriptor, GigadriveNextMiddlewareDescriptorSchema, type GigadriveNextMiddlewareMatcher, GigadriveNextMiddlewareMatcherSchema, type GigadriveNextPrerenderManifestV1, GigadriveNextPrerenderManifestV1Schema, type GigadriveNextPrerenderOutput, GigadriveNextPrerenderOutputSchema, type GigadriveNextPrerenderSeedMethods, GigadriveNextPrerenderSeedMethodsSchema, type GigadriveNextRouteCondition, GigadriveNextRouteConditionSchema, type GigadriveNextServerDescriptor, GigadriveNextServerDescriptorSchema, type GigadriveNextStaticAssetPrefix, GigadriveNextStaticAssetPrefixSchema, type JsonValue, MAX_FUNCTION_DURATION_SECONDS, MAX_SIDECARS, ManifestNotFoundError, ManifestParseError, ManifestReadError, type NeonAWSRegion, NetworkConfigLive, type NormalizedConfig, type NormalizedConfigEntrypoint, type NormalizedConfigQueue, type NormalizedConfigQueueSchedule, type NormalizedConfigRoute, type NormalizedConfigRouteHandler, type NormalizedConfigRouteMatchRequirements, type NormalizedConfigRouteMethod, type NormalizedConfigService, type NormalizedConfigServiceDefinition, type NormalizedConfigServicePostgres, type NormalizedConfigServiceQueues, type NormalizedConfigServiceRedis, type NormalizedConfigServiceStorage, type NormalizedConfigServiceType, type NormalizedConfigStorageBucket, type NormalizedContainerImageSource, type NormalizedContainerSpec, type NormalizedFramework, type NormalizedImageFit, type NormalizedImageFormat, type NormalizedImageLocalPattern, type NormalizedImagePolicy, type NormalizedImageRemotePattern, type NormalizedImageVariant, type NormalizedNextjsFramework, type NormalizedSharedArtifact, type NormalizedSidecar, type PackageManager, RawConfigReader, type Region, type Runtime, SchemaValidator, type StaticAssetHeaders, StaticAssetHeadersSchema, type StaticAssetManifest, type StaticAssetManifestEntry, StaticAssetManifestEntrySchema, type StaticAssetManifestV1, StaticAssetManifestV1Schema, type UpstashAWSRegion, V4ConfigParser, VercelBuildOutputParser, collectAssetFiles, composeDeclaresApp, containerEntrypointPath, defineConfig, detectContainerProject, detectFramework, detectPackageManager, dockerFunctionContainerName, filterFunctionsFromAssets, generateConfig, getFunctionSettings, mergeWithFrameworkDefaults, normalizeContainers, parseConfig, parseConfigRaw, parseGigadriveNextBuildManifest, parseGigadriveNextPrerenderManifest, parseStaticAssetManifest, postProcessConfig, readComposeContainers, readDependencies, splitCommandWords };
|