forked from ducktors/turborepo-remote-cache
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathenv.ts
More file actions
59 lines (55 loc) · 2.02 KB
/
env.ts
File metadata and controls
59 lines (55 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import Ajv from 'ajv'
import envSchema from 'env-schema'
import { Type, Static } from '@sinclair/typebox'
enum NODE_ENVS {
PRODUCTION = 'production',
DEVELOPMENT = 'development',
TEST = 'test',
}
export enum STORAGE_PROVIDERS {
LOCAL = 'local',
S3 = 'S3',
s3 = 's3',
GOOGLE_CLOUD_STORAGE = 'google-cloud-storage',
}
const schema = Type.Object(
{
NODE_ENV: Type.Optional(Type.Enum(NODE_ENVS, { default: NODE_ENVS.PRODUCTION })),
TURBO_TOKEN: Type.String({ separator: ',' }),
PORT: Type.Number({ default: 3000 }),
LOG_LEVEL: Type.Optional(Type.String({ default: 'info' })),
STORAGE_PROVIDER: Type.Optional(
Type.Enum(STORAGE_PROVIDERS, { default: STORAGE_PROVIDERS.LOCAL }),
),
BODY_LIMIT: Type.Optional(Type.Number({ default: 104857600 })),
STORAGE_PATH: Type.Optional(Type.String()),
STORAGE_PATH_USE_TMP_FOLDER: Type.Optional(Type.Boolean({ default: true })),
// AWS_ env vars are used as aws-sdk defaults
AWS_ACCESS_KEY_ID: Type.Optional(Type.String()),
AWS_SECRET_ACCESS_KEY: Type.Optional(Type.String()),
AWS_REGION: Type.Optional(Type.String()),
// S3_ env vars are used by Vercel. ref: https://vercel.com/support/articles/how-can-i-use-aws-sdk-environment-variables-on-vercel
S3_ACCESS_KEY: Type.Optional(Type.String()),
S3_SECRET_KEY: Type.Optional(Type.String()),
S3_REGION: Type.Optional(Type.String()),
// S3_ENDPOINT is shared between are deployments type
S3_ENDPOINT: Type.Optional(Type.String()),
// Google Cloud Storage credentials
GCS_PROJECT_ID: Type.Optional(Type.String()),
GCS_CLIENT_EMAIL: Type.Optional(Type.String()),
GCS_PRIVATE_KEY: Type.Optional(Type.String()),
},
{
additionalProperties: false,
},
)
export const env = envSchema<Static<typeof schema>>({
ajv: new Ajv({
removeAdditional: true,
useDefaults: true,
coerceTypes: true,
keywords: ['kind', 'RegExp', 'modifier', envSchema.keywords.separator],
}),
dotenv: process.env.NODE_ENV === NODE_ENVS.DEVELOPMENT ? true : false,
schema,
})