@vite-env/core 0.4.0 → 0.5.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/README.md +18 -0
- package/dist/config.d.cts +1 -1
- package/dist/config.d.mts +1 -1
- package/dist/dts.d.cts +1 -1
- package/dist/dts.d.mts +1 -1
- package/dist/format.d.cts +1 -1
- package/dist/format.d.mts +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/leak.d.cts +1 -1
- package/dist/leak.d.mts +1 -1
- package/dist/presets/index.cjs +75 -0
- package/dist/presets/index.cjs.map +1 -0
- package/dist/presets/index.d.cts +85 -0
- package/dist/presets/index.d.mts +85 -0
- package/dist/presets/index.mjs +71 -0
- package/dist/presets/index.mjs.map +1 -0
- package/dist/schema.cjs +25 -4
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.cts +5 -2
- package/dist/schema.d.mts +5 -2
- package/dist/schema.mjs +25 -4
- package/dist/schema.mjs.map +1 -1
- package/dist/standard.d.cts +1 -1
- package/dist/standard.d.mts +1 -1
- package/dist/{types-1okexcwM.d.cts → types-Bl3YdPck.d.cts} +6 -2
- package/dist/{types-DuWT_251.d.mts → types-CUF5RARc.d.mts} +6 -2
- package/package.json +11 -1
package/README.md
CHANGED
|
@@ -6,8 +6,10 @@ The `env.ts` layer for Vite — define once, validate everywhere, import with ty
|
|
|
6
6
|
|
|
7
7
|
- Typed virtual modules (`virtual:env/client`, `virtual:env/server`)
|
|
8
8
|
- Server/client split with build-time leak detection
|
|
9
|
+
- Runtime access protection — warns or errors when `virtual:env/server` is imported from a client environment
|
|
9
10
|
- Auto-coercion via Zod v4 (`z.stringbool()`, `z.coerce.number()`)
|
|
10
11
|
- Standard Schema support — use Valibot, ArkType, or any compliant validator
|
|
12
|
+
- Platform presets — pre-built schemas for Vercel, Railway, and Netlify
|
|
11
13
|
- Auto `.d.ts` generation
|
|
12
14
|
- Vite 8 / Rolldown native
|
|
13
15
|
|
|
@@ -61,6 +63,22 @@ env.VITE_DARK_MODE // boolean
|
|
|
61
63
|
env.VITE_NODE_ENV // 'development' | 'test' | 'production'
|
|
62
64
|
```
|
|
63
65
|
|
|
66
|
+
### Platform presets
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import { defineEnv } from '@vite-env/core'
|
|
70
|
+
import { vercel } from '@vite-env/core/presets'
|
|
71
|
+
import { z } from 'zod'
|
|
72
|
+
|
|
73
|
+
export default defineEnv({
|
|
74
|
+
presets: [vercel],
|
|
75
|
+
server: { DATABASE_URL: z.url() },
|
|
76
|
+
client: { VITE_API_URL: z.url() },
|
|
77
|
+
})
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Available presets: `vercel`, `railway`, `netlify`.
|
|
81
|
+
|
|
64
82
|
See the [full documentation](https://pyyupsk.github.io/vite-env/) for server/client split details, CLI tools, and more.
|
|
65
83
|
|
|
66
84
|
## License
|
package/dist/config.d.cts
CHANGED
package/dist/config.d.mts
CHANGED
package/dist/dts.d.cts
CHANGED
package/dist/dts.d.mts
CHANGED
package/dist/format.d.cts
CHANGED
package/dist/format.d.mts
CHANGED
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as
|
|
1
|
+
import { a as InferServerEnv, i as InferClientEnv, n as EnvDefinition, o as StandardEnvDefinition, r as EnvPreset, t as AnyEnvDefinition } from "./types-Bl3YdPck.cjs";
|
|
2
2
|
import { defineEnv } from "./schema.cjs";
|
|
3
3
|
import { defineStandardEnv } from "./standard.cjs";
|
|
4
|
-
export { type AnyEnvDefinition, type EnvDefinition, type InferClientEnv, type InferServerEnv, type StandardEnvDefinition, defineEnv, defineStandardEnv };
|
|
4
|
+
export { type AnyEnvDefinition, type EnvDefinition, type EnvPreset, type InferClientEnv, type InferServerEnv, type StandardEnvDefinition, defineEnv, defineStandardEnv };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as
|
|
1
|
+
import { a as InferServerEnv, i as InferClientEnv, n as EnvDefinition, o as StandardEnvDefinition, r as EnvPreset, t as AnyEnvDefinition } from "./types-CUF5RARc.mjs";
|
|
2
2
|
import { defineEnv } from "./schema.mjs";
|
|
3
3
|
import { defineStandardEnv } from "./standard.mjs";
|
|
4
|
-
export { type AnyEnvDefinition, type EnvDefinition, type InferClientEnv, type InferServerEnv, type StandardEnvDefinition, defineEnv, defineStandardEnv };
|
|
4
|
+
export { type AnyEnvDefinition, type EnvDefinition, type EnvPreset, type InferClientEnv, type InferServerEnv, type StandardEnvDefinition, defineEnv, defineStandardEnv };
|
package/dist/leak.d.cts
CHANGED
package/dist/leak.d.mts
CHANGED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
require("../dts-BgHTl6hC.cjs");
|
|
3
|
+
let zod = require("zod");
|
|
4
|
+
//#region src/presets/netlify.ts
|
|
5
|
+
const netlify = { server: {
|
|
6
|
+
NETLIFY: zod.z.enum(["true"]),
|
|
7
|
+
BUILD_ID: zod.z.string().min(1),
|
|
8
|
+
CONTEXT: zod.z.enum([
|
|
9
|
+
"production",
|
|
10
|
+
"deploy-preview",
|
|
11
|
+
"branch-deploy",
|
|
12
|
+
"dev"
|
|
13
|
+
]),
|
|
14
|
+
DEPLOY_ID: zod.z.string().min(1),
|
|
15
|
+
DEPLOY_URL: zod.z.url(),
|
|
16
|
+
DEPLOY_PRIME_URL: zod.z.url(),
|
|
17
|
+
URL: zod.z.url(),
|
|
18
|
+
BRANCH: zod.z.string().min(1),
|
|
19
|
+
COMMIT_REF: zod.z.string().min(1),
|
|
20
|
+
PULL_REQUEST: zod.z.enum(["true"]).optional(),
|
|
21
|
+
REVIEW_ID: zod.z.string().optional(),
|
|
22
|
+
REPOSITORY_URL: zod.z.url().optional(),
|
|
23
|
+
INCOMING_HOOK_TITLE: zod.z.string().optional(),
|
|
24
|
+
INCOMING_HOOK_URL: zod.z.url().optional()
|
|
25
|
+
} };
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region src/presets/railway.ts
|
|
28
|
+
const railway = { server: {
|
|
29
|
+
RAILWAY_ENVIRONMENT_ID: zod.z.string().min(1),
|
|
30
|
+
RAILWAY_ENVIRONMENT_NAME: zod.z.string().min(1),
|
|
31
|
+
RAILWAY_SERVICE_ID: zod.z.string().min(1),
|
|
32
|
+
RAILWAY_SERVICE_NAME: zod.z.string().min(1),
|
|
33
|
+
RAILWAY_PROJECT_ID: zod.z.string().min(1),
|
|
34
|
+
RAILWAY_PROJECT_NAME: zod.z.string().min(1),
|
|
35
|
+
RAILWAY_DEPLOYMENT_ID: zod.z.string().min(1),
|
|
36
|
+
RAILWAY_REPLICA_ID: zod.z.string().optional(),
|
|
37
|
+
RAILWAY_GIT_COMMIT_SHA: zod.z.string().optional(),
|
|
38
|
+
RAILWAY_GIT_BRANCH: zod.z.string().optional(),
|
|
39
|
+
RAILWAY_GIT_REPO_NAME: zod.z.string().optional(),
|
|
40
|
+
RAILWAY_GIT_REPO_OWNER: zod.z.string().optional(),
|
|
41
|
+
RAILWAY_PUBLIC_DOMAIN: zod.z.string().min(1).optional(),
|
|
42
|
+
RAILWAY_PRIVATE_DOMAIN: zod.z.string().min(1).optional(),
|
|
43
|
+
RAILWAY_TCP_PROXY_DOMAIN: zod.z.string().min(1).optional(),
|
|
44
|
+
RAILWAY_TCP_PROXY_PORT: zod.z.coerce.number().int().min(1).max(65535).optional()
|
|
45
|
+
} };
|
|
46
|
+
//#endregion
|
|
47
|
+
//#region src/presets/vercel.ts
|
|
48
|
+
const vercel = { server: {
|
|
49
|
+
VERCEL: zod.z.enum(["1"]),
|
|
50
|
+
VERCEL_ENV: zod.z.enum([
|
|
51
|
+
"production",
|
|
52
|
+
"preview",
|
|
53
|
+
"development"
|
|
54
|
+
]),
|
|
55
|
+
VERCEL_URL: zod.z.string().min(1),
|
|
56
|
+
VERCEL_BRANCH_URL: zod.z.string().min(1).optional(),
|
|
57
|
+
VERCEL_PROJECT_PRODUCTION_URL: zod.z.string().min(1),
|
|
58
|
+
VERCEL_DEPLOYMENT_ID: zod.z.string().min(1),
|
|
59
|
+
VERCEL_REGION: zod.z.string().optional(),
|
|
60
|
+
VERCEL_GIT_PROVIDER: zod.z.string().optional(),
|
|
61
|
+
VERCEL_GIT_REPO_SLUG: zod.z.string().optional(),
|
|
62
|
+
VERCEL_GIT_REPO_OWNER: zod.z.string().optional(),
|
|
63
|
+
VERCEL_GIT_COMMIT_REF: zod.z.string().optional(),
|
|
64
|
+
VERCEL_GIT_COMMIT_SHA: zod.z.string().optional(),
|
|
65
|
+
VERCEL_GIT_COMMIT_MESSAGE: zod.z.string().optional(),
|
|
66
|
+
VERCEL_GIT_COMMIT_AUTHOR_LOGIN: zod.z.string().optional(),
|
|
67
|
+
VERCEL_GIT_PULL_REQUEST_ID: zod.z.string().optional(),
|
|
68
|
+
VERCEL_SKEW_PROTECTION_ENABLED: zod.z.enum(["1"]).optional()
|
|
69
|
+
} };
|
|
70
|
+
//#endregion
|
|
71
|
+
exports.netlify = netlify;
|
|
72
|
+
exports.railway = railway;
|
|
73
|
+
exports.vercel = vercel;
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["z","z","z"],"sources":["../../src/presets/netlify.ts","../../src/presets/railway.ts","../../src/presets/vercel.ts"],"sourcesContent":["import type { EnvPreset } from '../types'\nimport { z } from 'zod'\n\nexport const netlify = {\n server: {\n // Set to 'true' by Netlify to indicate a Netlify build (note: Vercel uses '1', not 'true')\n NETLIFY: z.enum(['true']),\n BUILD_ID: z.string().min(1),\n CONTEXT: z.enum(['production', 'deploy-preview', 'branch-deploy', 'dev']),\n DEPLOY_ID: z.string().min(1),\n // Full https:// URLs — z.url() is correct here unlike VERCEL_URL\n DEPLOY_URL: z.url(),\n DEPLOY_PRIME_URL: z.url(),\n URL: z.url(),\n BRANCH: z.string().min(1),\n COMMIT_REF: z.string().min(1),\n // Netlify sets this to 'true' on PR deploys; absent (not 'false') on non-PR builds\n PULL_REQUEST: z.enum(['true']).optional(),\n REVIEW_ID: z.string().optional(),\n REPOSITORY_URL: z.url().optional(),\n INCOMING_HOOK_TITLE: z.string().optional(),\n INCOMING_HOOK_URL: z.url().optional(),\n },\n} satisfies EnvPreset\n","import type { EnvPreset } from '../types'\nimport { z } from 'zod'\n\nexport const railway = {\n server: {\n RAILWAY_ENVIRONMENT_ID: z.string().min(1),\n RAILWAY_ENVIRONMENT_NAME: z.string().min(1),\n RAILWAY_SERVICE_ID: z.string().min(1),\n RAILWAY_SERVICE_NAME: z.string().min(1),\n RAILWAY_PROJECT_ID: z.string().min(1),\n RAILWAY_PROJECT_NAME: z.string().min(1),\n RAILWAY_DEPLOYMENT_ID: z.string().min(1),\n RAILWAY_REPLICA_ID: z.string().optional(),\n RAILWAY_GIT_COMMIT_SHA: z.string().optional(),\n RAILWAY_GIT_BRANCH: z.string().optional(),\n RAILWAY_GIT_REPO_NAME: z.string().optional(),\n RAILWAY_GIT_REPO_OWNER: z.string().optional(),\n RAILWAY_PUBLIC_DOMAIN: z.string().min(1).optional(),\n RAILWAY_PRIVATE_DOMAIN: z.string().min(1).optional(),\n RAILWAY_TCP_PROXY_DOMAIN: z.string().min(1).optional(),\n RAILWAY_TCP_PROXY_PORT: z.coerce.number().int().min(1).max(65535).optional(),\n // PORT excluded: generic name set by many tools independently; handle it in your own server config\n },\n} satisfies EnvPreset\n","import type { EnvPreset } from '../types'\nimport { z } from 'zod'\n\nexport const vercel = {\n server: {\n // Set to '1' by Vercel to indicate a Vercel environment\n VERCEL: z.enum(['1']),\n VERCEL_ENV: z.enum(['production', 'preview', 'development']),\n // Bare hostname (e.g. myapp-abc123.vercel.app) — no scheme, z.url() would reject it\n VERCEL_URL: z.string().min(1),\n VERCEL_BRANCH_URL: z.string().min(1).optional(),\n VERCEL_PROJECT_PRODUCTION_URL: z.string().min(1),\n VERCEL_DEPLOYMENT_ID: z.string().min(1),\n VERCEL_REGION: z.string().optional(),\n // z.string() not enum — Vercel may add providers (Azure DevOps, self-hosted GitLab) without notice\n VERCEL_GIT_PROVIDER: z.string().optional(),\n VERCEL_GIT_REPO_SLUG: z.string().optional(),\n VERCEL_GIT_REPO_OWNER: z.string().optional(),\n VERCEL_GIT_COMMIT_REF: z.string().optional(),\n VERCEL_GIT_COMMIT_SHA: z.string().optional(),\n VERCEL_GIT_COMMIT_MESSAGE: z.string().optional(),\n VERCEL_GIT_COMMIT_AUTHOR_LOGIN: z.string().optional(),\n VERCEL_GIT_PULL_REQUEST_ID: z.string().optional(),\n VERCEL_SKEW_PROTECTION_ENABLED: z.enum(['1']).optional(),\n },\n} satisfies EnvPreset\n"],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/presets/netlify.d.ts
|
|
4
|
+
declare const netlify: {
|
|
5
|
+
server: {
|
|
6
|
+
NETLIFY: z.ZodEnum<{
|
|
7
|
+
true: "true";
|
|
8
|
+
}>;
|
|
9
|
+
BUILD_ID: z.ZodString;
|
|
10
|
+
CONTEXT: z.ZodEnum<{
|
|
11
|
+
production: "production";
|
|
12
|
+
"deploy-preview": "deploy-preview";
|
|
13
|
+
"branch-deploy": "branch-deploy";
|
|
14
|
+
dev: "dev";
|
|
15
|
+
}>;
|
|
16
|
+
DEPLOY_ID: z.ZodString;
|
|
17
|
+
DEPLOY_URL: z.ZodURL;
|
|
18
|
+
DEPLOY_PRIME_URL: z.ZodURL;
|
|
19
|
+
URL: z.ZodURL;
|
|
20
|
+
BRANCH: z.ZodString;
|
|
21
|
+
COMMIT_REF: z.ZodString;
|
|
22
|
+
PULL_REQUEST: z.ZodOptional<z.ZodEnum<{
|
|
23
|
+
true: "true";
|
|
24
|
+
}>>;
|
|
25
|
+
REVIEW_ID: z.ZodOptional<z.ZodString>;
|
|
26
|
+
REPOSITORY_URL: z.ZodOptional<z.ZodURL>;
|
|
27
|
+
INCOMING_HOOK_TITLE: z.ZodOptional<z.ZodString>;
|
|
28
|
+
INCOMING_HOOK_URL: z.ZodOptional<z.ZodURL>;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
//#region src/presets/railway.d.ts
|
|
33
|
+
declare const railway: {
|
|
34
|
+
server: {
|
|
35
|
+
RAILWAY_ENVIRONMENT_ID: z.ZodString;
|
|
36
|
+
RAILWAY_ENVIRONMENT_NAME: z.ZodString;
|
|
37
|
+
RAILWAY_SERVICE_ID: z.ZodString;
|
|
38
|
+
RAILWAY_SERVICE_NAME: z.ZodString;
|
|
39
|
+
RAILWAY_PROJECT_ID: z.ZodString;
|
|
40
|
+
RAILWAY_PROJECT_NAME: z.ZodString;
|
|
41
|
+
RAILWAY_DEPLOYMENT_ID: z.ZodString;
|
|
42
|
+
RAILWAY_REPLICA_ID: z.ZodOptional<z.ZodString>;
|
|
43
|
+
RAILWAY_GIT_COMMIT_SHA: z.ZodOptional<z.ZodString>;
|
|
44
|
+
RAILWAY_GIT_BRANCH: z.ZodOptional<z.ZodString>;
|
|
45
|
+
RAILWAY_GIT_REPO_NAME: z.ZodOptional<z.ZodString>;
|
|
46
|
+
RAILWAY_GIT_REPO_OWNER: z.ZodOptional<z.ZodString>;
|
|
47
|
+
RAILWAY_PUBLIC_DOMAIN: z.ZodOptional<z.ZodString>;
|
|
48
|
+
RAILWAY_PRIVATE_DOMAIN: z.ZodOptional<z.ZodString>;
|
|
49
|
+
RAILWAY_TCP_PROXY_DOMAIN: z.ZodOptional<z.ZodString>;
|
|
50
|
+
RAILWAY_TCP_PROXY_PORT: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
//#endregion
|
|
54
|
+
//#region src/presets/vercel.d.ts
|
|
55
|
+
declare const vercel: {
|
|
56
|
+
server: {
|
|
57
|
+
VERCEL: z.ZodEnum<{
|
|
58
|
+
1: "1";
|
|
59
|
+
}>;
|
|
60
|
+
VERCEL_ENV: z.ZodEnum<{
|
|
61
|
+
production: "production";
|
|
62
|
+
preview: "preview";
|
|
63
|
+
development: "development";
|
|
64
|
+
}>;
|
|
65
|
+
VERCEL_URL: z.ZodString;
|
|
66
|
+
VERCEL_BRANCH_URL: z.ZodOptional<z.ZodString>;
|
|
67
|
+
VERCEL_PROJECT_PRODUCTION_URL: z.ZodString;
|
|
68
|
+
VERCEL_DEPLOYMENT_ID: z.ZodString;
|
|
69
|
+
VERCEL_REGION: z.ZodOptional<z.ZodString>;
|
|
70
|
+
VERCEL_GIT_PROVIDER: z.ZodOptional<z.ZodString>;
|
|
71
|
+
VERCEL_GIT_REPO_SLUG: z.ZodOptional<z.ZodString>;
|
|
72
|
+
VERCEL_GIT_REPO_OWNER: z.ZodOptional<z.ZodString>;
|
|
73
|
+
VERCEL_GIT_COMMIT_REF: z.ZodOptional<z.ZodString>;
|
|
74
|
+
VERCEL_GIT_COMMIT_SHA: z.ZodOptional<z.ZodString>;
|
|
75
|
+
VERCEL_GIT_COMMIT_MESSAGE: z.ZodOptional<z.ZodString>;
|
|
76
|
+
VERCEL_GIT_COMMIT_AUTHOR_LOGIN: z.ZodOptional<z.ZodString>;
|
|
77
|
+
VERCEL_GIT_PULL_REQUEST_ID: z.ZodOptional<z.ZodString>;
|
|
78
|
+
VERCEL_SKEW_PROTECTION_ENABLED: z.ZodOptional<z.ZodEnum<{
|
|
79
|
+
1: "1";
|
|
80
|
+
}>>;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
//#endregion
|
|
84
|
+
export { netlify, railway, vercel };
|
|
85
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/presets/netlify.d.ts
|
|
4
|
+
declare const netlify: {
|
|
5
|
+
server: {
|
|
6
|
+
NETLIFY: z.ZodEnum<{
|
|
7
|
+
true: "true";
|
|
8
|
+
}>;
|
|
9
|
+
BUILD_ID: z.ZodString;
|
|
10
|
+
CONTEXT: z.ZodEnum<{
|
|
11
|
+
production: "production";
|
|
12
|
+
"deploy-preview": "deploy-preview";
|
|
13
|
+
"branch-deploy": "branch-deploy";
|
|
14
|
+
dev: "dev";
|
|
15
|
+
}>;
|
|
16
|
+
DEPLOY_ID: z.ZodString;
|
|
17
|
+
DEPLOY_URL: z.ZodURL;
|
|
18
|
+
DEPLOY_PRIME_URL: z.ZodURL;
|
|
19
|
+
URL: z.ZodURL;
|
|
20
|
+
BRANCH: z.ZodString;
|
|
21
|
+
COMMIT_REF: z.ZodString;
|
|
22
|
+
PULL_REQUEST: z.ZodOptional<z.ZodEnum<{
|
|
23
|
+
true: "true";
|
|
24
|
+
}>>;
|
|
25
|
+
REVIEW_ID: z.ZodOptional<z.ZodString>;
|
|
26
|
+
REPOSITORY_URL: z.ZodOptional<z.ZodURL>;
|
|
27
|
+
INCOMING_HOOK_TITLE: z.ZodOptional<z.ZodString>;
|
|
28
|
+
INCOMING_HOOK_URL: z.ZodOptional<z.ZodURL>;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
//#region src/presets/railway.d.ts
|
|
33
|
+
declare const railway: {
|
|
34
|
+
server: {
|
|
35
|
+
RAILWAY_ENVIRONMENT_ID: z.ZodString;
|
|
36
|
+
RAILWAY_ENVIRONMENT_NAME: z.ZodString;
|
|
37
|
+
RAILWAY_SERVICE_ID: z.ZodString;
|
|
38
|
+
RAILWAY_SERVICE_NAME: z.ZodString;
|
|
39
|
+
RAILWAY_PROJECT_ID: z.ZodString;
|
|
40
|
+
RAILWAY_PROJECT_NAME: z.ZodString;
|
|
41
|
+
RAILWAY_DEPLOYMENT_ID: z.ZodString;
|
|
42
|
+
RAILWAY_REPLICA_ID: z.ZodOptional<z.ZodString>;
|
|
43
|
+
RAILWAY_GIT_COMMIT_SHA: z.ZodOptional<z.ZodString>;
|
|
44
|
+
RAILWAY_GIT_BRANCH: z.ZodOptional<z.ZodString>;
|
|
45
|
+
RAILWAY_GIT_REPO_NAME: z.ZodOptional<z.ZodString>;
|
|
46
|
+
RAILWAY_GIT_REPO_OWNER: z.ZodOptional<z.ZodString>;
|
|
47
|
+
RAILWAY_PUBLIC_DOMAIN: z.ZodOptional<z.ZodString>;
|
|
48
|
+
RAILWAY_PRIVATE_DOMAIN: z.ZodOptional<z.ZodString>;
|
|
49
|
+
RAILWAY_TCP_PROXY_DOMAIN: z.ZodOptional<z.ZodString>;
|
|
50
|
+
RAILWAY_TCP_PROXY_PORT: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
//#endregion
|
|
54
|
+
//#region src/presets/vercel.d.ts
|
|
55
|
+
declare const vercel: {
|
|
56
|
+
server: {
|
|
57
|
+
VERCEL: z.ZodEnum<{
|
|
58
|
+
1: "1";
|
|
59
|
+
}>;
|
|
60
|
+
VERCEL_ENV: z.ZodEnum<{
|
|
61
|
+
production: "production";
|
|
62
|
+
preview: "preview";
|
|
63
|
+
development: "development";
|
|
64
|
+
}>;
|
|
65
|
+
VERCEL_URL: z.ZodString;
|
|
66
|
+
VERCEL_BRANCH_URL: z.ZodOptional<z.ZodString>;
|
|
67
|
+
VERCEL_PROJECT_PRODUCTION_URL: z.ZodString;
|
|
68
|
+
VERCEL_DEPLOYMENT_ID: z.ZodString;
|
|
69
|
+
VERCEL_REGION: z.ZodOptional<z.ZodString>;
|
|
70
|
+
VERCEL_GIT_PROVIDER: z.ZodOptional<z.ZodString>;
|
|
71
|
+
VERCEL_GIT_REPO_SLUG: z.ZodOptional<z.ZodString>;
|
|
72
|
+
VERCEL_GIT_REPO_OWNER: z.ZodOptional<z.ZodString>;
|
|
73
|
+
VERCEL_GIT_COMMIT_REF: z.ZodOptional<z.ZodString>;
|
|
74
|
+
VERCEL_GIT_COMMIT_SHA: z.ZodOptional<z.ZodString>;
|
|
75
|
+
VERCEL_GIT_COMMIT_MESSAGE: z.ZodOptional<z.ZodString>;
|
|
76
|
+
VERCEL_GIT_COMMIT_AUTHOR_LOGIN: z.ZodOptional<z.ZodString>;
|
|
77
|
+
VERCEL_GIT_PULL_REQUEST_ID: z.ZodOptional<z.ZodString>;
|
|
78
|
+
VERCEL_SKEW_PROTECTION_ENABLED: z.ZodOptional<z.ZodEnum<{
|
|
79
|
+
1: "1";
|
|
80
|
+
}>>;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
//#endregion
|
|
84
|
+
export { netlify, railway, vercel };
|
|
85
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
//#region src/presets/netlify.ts
|
|
3
|
+
const netlify = { server: {
|
|
4
|
+
NETLIFY: z.enum(["true"]),
|
|
5
|
+
BUILD_ID: z.string().min(1),
|
|
6
|
+
CONTEXT: z.enum([
|
|
7
|
+
"production",
|
|
8
|
+
"deploy-preview",
|
|
9
|
+
"branch-deploy",
|
|
10
|
+
"dev"
|
|
11
|
+
]),
|
|
12
|
+
DEPLOY_ID: z.string().min(1),
|
|
13
|
+
DEPLOY_URL: z.url(),
|
|
14
|
+
DEPLOY_PRIME_URL: z.url(),
|
|
15
|
+
URL: z.url(),
|
|
16
|
+
BRANCH: z.string().min(1),
|
|
17
|
+
COMMIT_REF: z.string().min(1),
|
|
18
|
+
PULL_REQUEST: z.enum(["true"]).optional(),
|
|
19
|
+
REVIEW_ID: z.string().optional(),
|
|
20
|
+
REPOSITORY_URL: z.url().optional(),
|
|
21
|
+
INCOMING_HOOK_TITLE: z.string().optional(),
|
|
22
|
+
INCOMING_HOOK_URL: z.url().optional()
|
|
23
|
+
} };
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region src/presets/railway.ts
|
|
26
|
+
const railway = { server: {
|
|
27
|
+
RAILWAY_ENVIRONMENT_ID: z.string().min(1),
|
|
28
|
+
RAILWAY_ENVIRONMENT_NAME: z.string().min(1),
|
|
29
|
+
RAILWAY_SERVICE_ID: z.string().min(1),
|
|
30
|
+
RAILWAY_SERVICE_NAME: z.string().min(1),
|
|
31
|
+
RAILWAY_PROJECT_ID: z.string().min(1),
|
|
32
|
+
RAILWAY_PROJECT_NAME: z.string().min(1),
|
|
33
|
+
RAILWAY_DEPLOYMENT_ID: z.string().min(1),
|
|
34
|
+
RAILWAY_REPLICA_ID: z.string().optional(),
|
|
35
|
+
RAILWAY_GIT_COMMIT_SHA: z.string().optional(),
|
|
36
|
+
RAILWAY_GIT_BRANCH: z.string().optional(),
|
|
37
|
+
RAILWAY_GIT_REPO_NAME: z.string().optional(),
|
|
38
|
+
RAILWAY_GIT_REPO_OWNER: z.string().optional(),
|
|
39
|
+
RAILWAY_PUBLIC_DOMAIN: z.string().min(1).optional(),
|
|
40
|
+
RAILWAY_PRIVATE_DOMAIN: z.string().min(1).optional(),
|
|
41
|
+
RAILWAY_TCP_PROXY_DOMAIN: z.string().min(1).optional(),
|
|
42
|
+
RAILWAY_TCP_PROXY_PORT: z.coerce.number().int().min(1).max(65535).optional()
|
|
43
|
+
} };
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region src/presets/vercel.ts
|
|
46
|
+
const vercel = { server: {
|
|
47
|
+
VERCEL: z.enum(["1"]),
|
|
48
|
+
VERCEL_ENV: z.enum([
|
|
49
|
+
"production",
|
|
50
|
+
"preview",
|
|
51
|
+
"development"
|
|
52
|
+
]),
|
|
53
|
+
VERCEL_URL: z.string().min(1),
|
|
54
|
+
VERCEL_BRANCH_URL: z.string().min(1).optional(),
|
|
55
|
+
VERCEL_PROJECT_PRODUCTION_URL: z.string().min(1),
|
|
56
|
+
VERCEL_DEPLOYMENT_ID: z.string().min(1),
|
|
57
|
+
VERCEL_REGION: z.string().optional(),
|
|
58
|
+
VERCEL_GIT_PROVIDER: z.string().optional(),
|
|
59
|
+
VERCEL_GIT_REPO_SLUG: z.string().optional(),
|
|
60
|
+
VERCEL_GIT_REPO_OWNER: z.string().optional(),
|
|
61
|
+
VERCEL_GIT_COMMIT_REF: z.string().optional(),
|
|
62
|
+
VERCEL_GIT_COMMIT_SHA: z.string().optional(),
|
|
63
|
+
VERCEL_GIT_COMMIT_MESSAGE: z.string().optional(),
|
|
64
|
+
VERCEL_GIT_COMMIT_AUTHOR_LOGIN: z.string().optional(),
|
|
65
|
+
VERCEL_GIT_PULL_REQUEST_ID: z.string().optional(),
|
|
66
|
+
VERCEL_SKEW_PROTECTION_ENABLED: z.enum(["1"]).optional()
|
|
67
|
+
} };
|
|
68
|
+
//#endregion
|
|
69
|
+
export { netlify, railway, vercel };
|
|
70
|
+
|
|
71
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/presets/netlify.ts","../../src/presets/railway.ts","../../src/presets/vercel.ts"],"sourcesContent":["import type { EnvPreset } from '../types'\nimport { z } from 'zod'\n\nexport const netlify = {\n server: {\n // Set to 'true' by Netlify to indicate a Netlify build (note: Vercel uses '1', not 'true')\n NETLIFY: z.enum(['true']),\n BUILD_ID: z.string().min(1),\n CONTEXT: z.enum(['production', 'deploy-preview', 'branch-deploy', 'dev']),\n DEPLOY_ID: z.string().min(1),\n // Full https:// URLs — z.url() is correct here unlike VERCEL_URL\n DEPLOY_URL: z.url(),\n DEPLOY_PRIME_URL: z.url(),\n URL: z.url(),\n BRANCH: z.string().min(1),\n COMMIT_REF: z.string().min(1),\n // Netlify sets this to 'true' on PR deploys; absent (not 'false') on non-PR builds\n PULL_REQUEST: z.enum(['true']).optional(),\n REVIEW_ID: z.string().optional(),\n REPOSITORY_URL: z.url().optional(),\n INCOMING_HOOK_TITLE: z.string().optional(),\n INCOMING_HOOK_URL: z.url().optional(),\n },\n} satisfies EnvPreset\n","import type { EnvPreset } from '../types'\nimport { z } from 'zod'\n\nexport const railway = {\n server: {\n RAILWAY_ENVIRONMENT_ID: z.string().min(1),\n RAILWAY_ENVIRONMENT_NAME: z.string().min(1),\n RAILWAY_SERVICE_ID: z.string().min(1),\n RAILWAY_SERVICE_NAME: z.string().min(1),\n RAILWAY_PROJECT_ID: z.string().min(1),\n RAILWAY_PROJECT_NAME: z.string().min(1),\n RAILWAY_DEPLOYMENT_ID: z.string().min(1),\n RAILWAY_REPLICA_ID: z.string().optional(),\n RAILWAY_GIT_COMMIT_SHA: z.string().optional(),\n RAILWAY_GIT_BRANCH: z.string().optional(),\n RAILWAY_GIT_REPO_NAME: z.string().optional(),\n RAILWAY_GIT_REPO_OWNER: z.string().optional(),\n RAILWAY_PUBLIC_DOMAIN: z.string().min(1).optional(),\n RAILWAY_PRIVATE_DOMAIN: z.string().min(1).optional(),\n RAILWAY_TCP_PROXY_DOMAIN: z.string().min(1).optional(),\n RAILWAY_TCP_PROXY_PORT: z.coerce.number().int().min(1).max(65535).optional(),\n // PORT excluded: generic name set by many tools independently; handle it in your own server config\n },\n} satisfies EnvPreset\n","import type { EnvPreset } from '../types'\nimport { z } from 'zod'\n\nexport const vercel = {\n server: {\n // Set to '1' by Vercel to indicate a Vercel environment\n VERCEL: z.enum(['1']),\n VERCEL_ENV: z.enum(['production', 'preview', 'development']),\n // Bare hostname (e.g. myapp-abc123.vercel.app) — no scheme, z.url() would reject it\n VERCEL_URL: z.string().min(1),\n VERCEL_BRANCH_URL: z.string().min(1).optional(),\n VERCEL_PROJECT_PRODUCTION_URL: z.string().min(1),\n VERCEL_DEPLOYMENT_ID: z.string().min(1),\n VERCEL_REGION: z.string().optional(),\n // z.string() not enum — Vercel may add providers (Azure DevOps, self-hosted GitLab) without notice\n VERCEL_GIT_PROVIDER: z.string().optional(),\n VERCEL_GIT_REPO_SLUG: z.string().optional(),\n VERCEL_GIT_REPO_OWNER: z.string().optional(),\n VERCEL_GIT_COMMIT_REF: z.string().optional(),\n VERCEL_GIT_COMMIT_SHA: z.string().optional(),\n VERCEL_GIT_COMMIT_MESSAGE: z.string().optional(),\n VERCEL_GIT_COMMIT_AUTHOR_LOGIN: z.string().optional(),\n VERCEL_GIT_PULL_REQUEST_ID: z.string().optional(),\n VERCEL_SKEW_PROTECTION_ENABLED: z.enum(['1']).optional(),\n },\n} satisfies EnvPreset\n"],"mappings":";;AAGA,MAAa,UAAU,EACrB,QAAQ;CAEN,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;CACzB,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC3B,SAAS,EAAE,KAAK;EAAC;EAAc;EAAkB;EAAiB;EAAM,CAAC;CACzE,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE;CAE5B,YAAY,EAAE,KAAK;CACnB,kBAAkB,EAAE,KAAK;CACzB,KAAK,EAAE,KAAK;CACZ,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;CACzB,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE;CAE7B,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU;CACzC,WAAW,EAAE,QAAQ,CAAC,UAAU;CAChC,gBAAgB,EAAE,KAAK,CAAC,UAAU;CAClC,qBAAqB,EAAE,QAAQ,CAAC,UAAU;CAC1C,mBAAmB,EAAE,KAAK,CAAC,UAAU;CACtC,EACF;;;ACpBD,MAAa,UAAU,EACrB,QAAQ;CACN,wBAAwB,EAAE,QAAQ,CAAC,IAAI,EAAE;CACzC,0BAA0B,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC3C,oBAAoB,EAAE,QAAQ,CAAC,IAAI,EAAE;CACrC,sBAAsB,EAAE,QAAQ,CAAC,IAAI,EAAE;CACvC,oBAAoB,EAAE,QAAQ,CAAC,IAAI,EAAE;CACrC,sBAAsB,EAAE,QAAQ,CAAC,IAAI,EAAE;CACvC,uBAAuB,EAAE,QAAQ,CAAC,IAAI,EAAE;CACxC,oBAAoB,EAAE,QAAQ,CAAC,UAAU;CACzC,wBAAwB,EAAE,QAAQ,CAAC,UAAU;CAC7C,oBAAoB,EAAE,QAAQ,CAAC,UAAU;CACzC,uBAAuB,EAAE,QAAQ,CAAC,UAAU;CAC5C,wBAAwB,EAAE,QAAQ,CAAC,UAAU;CAC7C,uBAAuB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACnD,wBAAwB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACpD,0BAA0B,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACtD,wBAAwB,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,UAAU;CAE7E,EACF;;;ACpBD,MAAa,SAAS,EACpB,QAAQ;CAEN,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC;CACrB,YAAY,EAAE,KAAK;EAAC;EAAc;EAAW;EAAc,CAAC;CAE5D,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC7B,mBAAmB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CAC/C,+BAA+B,EAAE,QAAQ,CAAC,IAAI,EAAE;CAChD,sBAAsB,EAAE,QAAQ,CAAC,IAAI,EAAE;CACvC,eAAe,EAAE,QAAQ,CAAC,UAAU;CAEpC,qBAAqB,EAAE,QAAQ,CAAC,UAAU;CAC1C,sBAAsB,EAAE,QAAQ,CAAC,UAAU;CAC3C,uBAAuB,EAAE,QAAQ,CAAC,UAAU;CAC5C,uBAAuB,EAAE,QAAQ,CAAC,UAAU;CAC5C,uBAAuB,EAAE,QAAQ,CAAC,UAAU;CAC5C,2BAA2B,EAAE,QAAQ,CAAC,UAAU;CAChD,gCAAgC,EAAE,QAAQ,CAAC,UAAU;CACrD,4BAA4B,EAAE,QAAQ,CAAC,UAAU;CACjD,gCAAgC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU;CACzD,EACF"}
|
package/dist/schema.cjs
CHANGED
|
@@ -2,11 +2,32 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
require("./dts-BgHTl6hC.cjs");
|
|
3
3
|
let zod = require("zod");
|
|
4
4
|
//#region src/schema.ts
|
|
5
|
-
function
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
function warnSideConflicts(keys, seen, userKeys, side) {
|
|
6
|
+
for (const key of keys) {
|
|
7
|
+
const duplicate = seen.has(key);
|
|
8
|
+
if (duplicate) console.warn(`[vite-env] "${key}" is defined in multiple presets. The last preset wins.`);
|
|
9
|
+
seen.add(key);
|
|
10
|
+
if (!duplicate && userKeys.has(key)) console.warn(`[vite-env] "${key}" is defined in both a preset and your ${side} config. Your definition wins.`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function warnConflicts(presets, userServerKeys, userClientKeys) {
|
|
14
|
+
const seenServerKeys = /* @__PURE__ */ new Set();
|
|
15
|
+
const seenClientKeys = /* @__PURE__ */ new Set();
|
|
16
|
+
for (const preset of presets) {
|
|
17
|
+
warnSideConflicts(Object.keys(preset.server ?? {}), seenServerKeys, userServerKeys, "server");
|
|
18
|
+
warnSideConflicts(Object.keys(preset.client ?? {}), seenClientKeys, userClientKeys, "client");
|
|
8
19
|
}
|
|
9
|
-
|
|
20
|
+
}
|
|
21
|
+
function defineEnv(definition) {
|
|
22
|
+
const { presets = [], server, client, ...rest } = definition;
|
|
23
|
+
const mergedServer = Object.assign({}, ...presets.map((p) => p.server ?? {}), server);
|
|
24
|
+
const mergedClient = Object.assign({}, ...presets.map((p) => p.client ?? {}), client);
|
|
25
|
+
warnConflicts(presets, new Set(Object.keys(server ?? {})), new Set(Object.keys(client ?? {})));
|
|
26
|
+
for (const key of Object.keys(mergedClient)) if (!key.startsWith("VITE_")) throw new Error(`[vite-env] Client env var "${key}" must be prefixed with VITE_.\n Rename it to "VITE_${key}" or move it to "server" if it's secret.`);
|
|
27
|
+
const result = { ...rest };
|
|
28
|
+
if (Object.keys(mergedServer).length > 0 || server !== void 0) result.server = mergedServer;
|
|
29
|
+
if (Object.keys(mergedClient).length > 0 || client !== void 0) result.client = mergedClient;
|
|
30
|
+
return result;
|
|
10
31
|
}
|
|
11
32
|
function validateEnv(def, rawEnv) {
|
|
12
33
|
const combinedShape = {
|
package/dist/schema.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.cjs","names":["z"],"sources":["../src/schema.ts"],"sourcesContent":["import type { EnvDefinition, ValidationResult } from './types'\nimport { z } from 'zod'\n\nexport function defineEnv<T extends
|
|
1
|
+
{"version":3,"file":"schema.cjs","names":["z"],"sources":["../src/schema.ts"],"sourcesContent":["import type { EnvDefinition, EnvPreset, ValidationResult } from './types'\nimport { z } from 'zod'\n\ninterface DefineEnvInput extends EnvDefinition {\n presets?: EnvPreset[]\n}\n\nfunction warnSideConflicts(\n keys: string[],\n seen: Set<string>,\n userKeys: Set<string>,\n side: 'server' | 'client',\n): void {\n for (const key of keys) {\n const duplicate = seen.has(key)\n if (duplicate)\n console.warn(`[vite-env] \"${key}\" is defined in multiple presets. The last preset wins.`)\n seen.add(key)\n if (!duplicate && userKeys.has(key))\n console.warn(`[vite-env] \"${key}\" is defined in both a preset and your ${side} config. Your definition wins.`)\n }\n}\n\nfunction warnConflicts(\n presets: EnvPreset[],\n userServerKeys: Set<string>,\n userClientKeys: Set<string>,\n): void {\n const seenServerKeys = new Set<string>()\n const seenClientKeys = new Set<string>()\n\n for (const preset of presets) {\n warnSideConflicts(Object.keys(preset.server ?? {}), seenServerKeys, userServerKeys, 'server')\n warnSideConflicts(Object.keys(preset.client ?? {}), seenClientKeys, userClientKeys, 'client')\n }\n}\n\nexport function defineEnv<T extends DefineEnvInput>(definition: T): Omit<T, 'presets'> & Pick<EnvDefinition, 'server' | 'client'> {\n const { presets = [], server, client, ...rest } = definition\n // ...rest intentionally forwarded — T may carry extra keys beyond EnvDefinition\n\n const mergedServer: z.ZodRawShape = Object.assign({}, ...presets.map(p => p.server ?? {}), server)\n const mergedClient: z.ZodRawShape = Object.assign({}, ...presets.map(p => p.client ?? {}), client)\n\n warnConflicts(\n presets,\n new Set(Object.keys(server ?? {})),\n new Set(Object.keys(client ?? {})),\n )\n\n for (const key of Object.keys(mergedClient)) {\n if (!key.startsWith('VITE_')) {\n throw new Error(\n `[vite-env] Client env var \"${key}\" must be prefixed with VITE_.\\n`\n + ` Rename it to \"VITE_${key}\" or move it to \"server\" if it's secret.`,\n )\n }\n }\n\n const result: Record<string, unknown> = { ...rest }\n if (Object.keys(mergedServer).length > 0 || server !== undefined)\n result.server = mergedServer\n if (Object.keys(mergedClient).length > 0 || client !== undefined)\n result.client = mergedClient\n\n return result as Omit<T, 'presets'>\n}\n\nexport function validateEnv(\n def: EnvDefinition,\n rawEnv: Record<string, string>,\n): ValidationResult {\n const combinedShape = {\n ...def.server,\n ...def.client,\n }\n\n const schema = z.object(combinedShape)\n const result = schema.safeParse(rawEnv)\n\n if (result.success) {\n return { success: true, data: result.data, errors: [] as const }\n }\n\n return {\n success: false,\n data: null,\n errors: result.error.issues,\n }\n}\n"],"mappings":";;;;AAOA,SAAS,kBACP,MACA,MACA,UACA,MACM;AACN,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,YAAY,KAAK,IAAI,IAAI;AAC/B,MAAI,UACF,SAAQ,KAAK,eAAe,IAAI,yDAAyD;AAC3F,OAAK,IAAI,IAAI;AACb,MAAI,CAAC,aAAa,SAAS,IAAI,IAAI,CACjC,SAAQ,KAAK,eAAe,IAAI,yCAAyC,KAAK,gCAAgC;;;AAIpH,SAAS,cACP,SACA,gBACA,gBACM;CACN,MAAM,iCAAiB,IAAI,KAAa;CACxC,MAAM,iCAAiB,IAAI,KAAa;AAExC,MAAK,MAAM,UAAU,SAAS;AAC5B,oBAAkB,OAAO,KAAK,OAAO,UAAU,EAAE,CAAC,EAAE,gBAAgB,gBAAgB,SAAS;AAC7F,oBAAkB,OAAO,KAAK,OAAO,UAAU,EAAE,CAAC,EAAE,gBAAgB,gBAAgB,SAAS;;;AAIjG,SAAgB,UAAoC,YAA8E;CAChI,MAAM,EAAE,UAAU,EAAE,EAAE,QAAQ,QAAQ,GAAG,SAAS;CAGlD,MAAM,eAA8B,OAAO,OAAO,EAAE,EAAE,GAAG,QAAQ,KAAI,MAAK,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO;CAClG,MAAM,eAA8B,OAAO,OAAO,EAAE,EAAE,GAAG,QAAQ,KAAI,MAAK,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO;AAElG,eACE,SACA,IAAI,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC,CAAC,EAClC,IAAI,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC,CAAC,CACnC;AAED,MAAK,MAAM,OAAO,OAAO,KAAK,aAAa,CACzC,KAAI,CAAC,IAAI,WAAW,QAAQ,CAC1B,OAAM,IAAI,MACR,8BAA8B,IAAI,uDACR,IAAI,0CAC/B;CAIL,MAAM,SAAkC,EAAE,GAAG,MAAM;AACnD,KAAI,OAAO,KAAK,aAAa,CAAC,SAAS,KAAK,WAAW,KAAA,EACrD,QAAO,SAAS;AAClB,KAAI,OAAO,KAAK,aAAa,CAAC,SAAS,KAAK,WAAW,KAAA,EACrD,QAAO,SAAS;AAElB,QAAO;;AAGT,SAAgB,YACd,KACA,QACkB;CAClB,MAAM,gBAAgB;EACpB,GAAG,IAAI;EACP,GAAG,IAAI;EACR;CAGD,MAAM,SADSA,IAAAA,EAAE,OAAO,cAAc,CAChB,UAAU,OAAO;AAEvC,KAAI,OAAO,QACT,QAAO;EAAE,SAAS;EAAM,MAAM,OAAO;EAAM,QAAQ,EAAE;EAAW;AAGlE,QAAO;EACL,SAAS;EACT,MAAM;EACN,QAAQ,OAAO,MAAM;EACtB"}
|
package/dist/schema.d.cts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { l as ValidationResult, n as EnvDefinition, r as EnvPreset } from "./types-Bl3YdPck.cjs";
|
|
2
2
|
|
|
3
3
|
//#region src/schema.d.ts
|
|
4
|
-
|
|
4
|
+
interface DefineEnvInput extends EnvDefinition {
|
|
5
|
+
presets?: EnvPreset[];
|
|
6
|
+
}
|
|
7
|
+
declare function defineEnv<T extends DefineEnvInput>(definition: T): Omit<T, 'presets'> & Pick<EnvDefinition, 'server' | 'client'>;
|
|
5
8
|
declare function validateEnv(def: EnvDefinition, rawEnv: Record<string, string>): ValidationResult;
|
|
6
9
|
//#endregion
|
|
7
10
|
export { defineEnv, validateEnv };
|
package/dist/schema.d.mts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { l as ValidationResult, n as EnvDefinition, r as EnvPreset } from "./types-CUF5RARc.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/schema.d.ts
|
|
4
|
-
|
|
4
|
+
interface DefineEnvInput extends EnvDefinition {
|
|
5
|
+
presets?: EnvPreset[];
|
|
6
|
+
}
|
|
7
|
+
declare function defineEnv<T extends DefineEnvInput>(definition: T): Omit<T, 'presets'> & Pick<EnvDefinition, 'server' | 'client'>;
|
|
5
8
|
declare function validateEnv(def: EnvDefinition, rawEnv: Record<string, string>): ValidationResult;
|
|
6
9
|
//#endregion
|
|
7
10
|
export { defineEnv, validateEnv };
|
package/dist/schema.mjs
CHANGED
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
//#region src/schema.ts
|
|
3
|
-
function
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
function warnSideConflicts(keys, seen, userKeys, side) {
|
|
4
|
+
for (const key of keys) {
|
|
5
|
+
const duplicate = seen.has(key);
|
|
6
|
+
if (duplicate) console.warn(`[vite-env] "${key}" is defined in multiple presets. The last preset wins.`);
|
|
7
|
+
seen.add(key);
|
|
8
|
+
if (!duplicate && userKeys.has(key)) console.warn(`[vite-env] "${key}" is defined in both a preset and your ${side} config. Your definition wins.`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function warnConflicts(presets, userServerKeys, userClientKeys) {
|
|
12
|
+
const seenServerKeys = /* @__PURE__ */ new Set();
|
|
13
|
+
const seenClientKeys = /* @__PURE__ */ new Set();
|
|
14
|
+
for (const preset of presets) {
|
|
15
|
+
warnSideConflicts(Object.keys(preset.server ?? {}), seenServerKeys, userServerKeys, "server");
|
|
16
|
+
warnSideConflicts(Object.keys(preset.client ?? {}), seenClientKeys, userClientKeys, "client");
|
|
6
17
|
}
|
|
7
|
-
|
|
18
|
+
}
|
|
19
|
+
function defineEnv(definition) {
|
|
20
|
+
const { presets = [], server, client, ...rest } = definition;
|
|
21
|
+
const mergedServer = Object.assign({}, ...presets.map((p) => p.server ?? {}), server);
|
|
22
|
+
const mergedClient = Object.assign({}, ...presets.map((p) => p.client ?? {}), client);
|
|
23
|
+
warnConflicts(presets, new Set(Object.keys(server ?? {})), new Set(Object.keys(client ?? {})));
|
|
24
|
+
for (const key of Object.keys(mergedClient)) if (!key.startsWith("VITE_")) throw new Error(`[vite-env] Client env var "${key}" must be prefixed with VITE_.\n Rename it to "VITE_${key}" or move it to "server" if it's secret.`);
|
|
25
|
+
const result = { ...rest };
|
|
26
|
+
if (Object.keys(mergedServer).length > 0 || server !== void 0) result.server = mergedServer;
|
|
27
|
+
if (Object.keys(mergedClient).length > 0 || client !== void 0) result.client = mergedClient;
|
|
28
|
+
return result;
|
|
8
29
|
}
|
|
9
30
|
function validateEnv(def, rawEnv) {
|
|
10
31
|
const combinedShape = {
|
package/dist/schema.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.mjs","names":[],"sources":["../src/schema.ts"],"sourcesContent":["import type { EnvDefinition, ValidationResult } from './types'\nimport { z } from 'zod'\n\nexport function defineEnv<T extends
|
|
1
|
+
{"version":3,"file":"schema.mjs","names":[],"sources":["../src/schema.ts"],"sourcesContent":["import type { EnvDefinition, EnvPreset, ValidationResult } from './types'\nimport { z } from 'zod'\n\ninterface DefineEnvInput extends EnvDefinition {\n presets?: EnvPreset[]\n}\n\nfunction warnSideConflicts(\n keys: string[],\n seen: Set<string>,\n userKeys: Set<string>,\n side: 'server' | 'client',\n): void {\n for (const key of keys) {\n const duplicate = seen.has(key)\n if (duplicate)\n console.warn(`[vite-env] \"${key}\" is defined in multiple presets. The last preset wins.`)\n seen.add(key)\n if (!duplicate && userKeys.has(key))\n console.warn(`[vite-env] \"${key}\" is defined in both a preset and your ${side} config. Your definition wins.`)\n }\n}\n\nfunction warnConflicts(\n presets: EnvPreset[],\n userServerKeys: Set<string>,\n userClientKeys: Set<string>,\n): void {\n const seenServerKeys = new Set<string>()\n const seenClientKeys = new Set<string>()\n\n for (const preset of presets) {\n warnSideConflicts(Object.keys(preset.server ?? {}), seenServerKeys, userServerKeys, 'server')\n warnSideConflicts(Object.keys(preset.client ?? {}), seenClientKeys, userClientKeys, 'client')\n }\n}\n\nexport function defineEnv<T extends DefineEnvInput>(definition: T): Omit<T, 'presets'> & Pick<EnvDefinition, 'server' | 'client'> {\n const { presets = [], server, client, ...rest } = definition\n // ...rest intentionally forwarded — T may carry extra keys beyond EnvDefinition\n\n const mergedServer: z.ZodRawShape = Object.assign({}, ...presets.map(p => p.server ?? {}), server)\n const mergedClient: z.ZodRawShape = Object.assign({}, ...presets.map(p => p.client ?? {}), client)\n\n warnConflicts(\n presets,\n new Set(Object.keys(server ?? {})),\n new Set(Object.keys(client ?? {})),\n )\n\n for (const key of Object.keys(mergedClient)) {\n if (!key.startsWith('VITE_')) {\n throw new Error(\n `[vite-env] Client env var \"${key}\" must be prefixed with VITE_.\\n`\n + ` Rename it to \"VITE_${key}\" or move it to \"server\" if it's secret.`,\n )\n }\n }\n\n const result: Record<string, unknown> = { ...rest }\n if (Object.keys(mergedServer).length > 0 || server !== undefined)\n result.server = mergedServer\n if (Object.keys(mergedClient).length > 0 || client !== undefined)\n result.client = mergedClient\n\n return result as Omit<T, 'presets'>\n}\n\nexport function validateEnv(\n def: EnvDefinition,\n rawEnv: Record<string, string>,\n): ValidationResult {\n const combinedShape = {\n ...def.server,\n ...def.client,\n }\n\n const schema = z.object(combinedShape)\n const result = schema.safeParse(rawEnv)\n\n if (result.success) {\n return { success: true, data: result.data, errors: [] as const }\n }\n\n return {\n success: false,\n data: null,\n errors: result.error.issues,\n }\n}\n"],"mappings":";;AAOA,SAAS,kBACP,MACA,MACA,UACA,MACM;AACN,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,YAAY,KAAK,IAAI,IAAI;AAC/B,MAAI,UACF,SAAQ,KAAK,eAAe,IAAI,yDAAyD;AAC3F,OAAK,IAAI,IAAI;AACb,MAAI,CAAC,aAAa,SAAS,IAAI,IAAI,CACjC,SAAQ,KAAK,eAAe,IAAI,yCAAyC,KAAK,gCAAgC;;;AAIpH,SAAS,cACP,SACA,gBACA,gBACM;CACN,MAAM,iCAAiB,IAAI,KAAa;CACxC,MAAM,iCAAiB,IAAI,KAAa;AAExC,MAAK,MAAM,UAAU,SAAS;AAC5B,oBAAkB,OAAO,KAAK,OAAO,UAAU,EAAE,CAAC,EAAE,gBAAgB,gBAAgB,SAAS;AAC7F,oBAAkB,OAAO,KAAK,OAAO,UAAU,EAAE,CAAC,EAAE,gBAAgB,gBAAgB,SAAS;;;AAIjG,SAAgB,UAAoC,YAA8E;CAChI,MAAM,EAAE,UAAU,EAAE,EAAE,QAAQ,QAAQ,GAAG,SAAS;CAGlD,MAAM,eAA8B,OAAO,OAAO,EAAE,EAAE,GAAG,QAAQ,KAAI,MAAK,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO;CAClG,MAAM,eAA8B,OAAO,OAAO,EAAE,EAAE,GAAG,QAAQ,KAAI,MAAK,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO;AAElG,eACE,SACA,IAAI,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC,CAAC,EAClC,IAAI,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC,CAAC,CACnC;AAED,MAAK,MAAM,OAAO,OAAO,KAAK,aAAa,CACzC,KAAI,CAAC,IAAI,WAAW,QAAQ,CAC1B,OAAM,IAAI,MACR,8BAA8B,IAAI,uDACR,IAAI,0CAC/B;CAIL,MAAM,SAAkC,EAAE,GAAG,MAAM;AACnD,KAAI,OAAO,KAAK,aAAa,CAAC,SAAS,KAAK,WAAW,KAAA,EACrD,QAAO,SAAS;AAClB,KAAI,OAAO,KAAK,aAAa,CAAC,SAAS,KAAK,WAAW,KAAA,EACrD,QAAO,SAAS;AAElB,QAAO;;AAGT,SAAgB,YACd,KACA,QACkB;CAClB,MAAM,gBAAgB;EACpB,GAAG,IAAI;EACP,GAAG,IAAI;EACR;CAGD,MAAM,SADS,EAAE,OAAO,cAAc,CAChB,UAAU,OAAO;AAEvC,KAAI,OAAO,QACT,QAAO;EAAE,SAAS;EAAM,MAAM,OAAO;EAAM,QAAQ,EAAE;EAAW;AAGlE,QAAO;EACL,SAAS;EACT,MAAM;EACN,QAAQ,OAAO,MAAM;EACtB"}
|
package/dist/standard.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { c as StandardValidationResult, o as StandardEnvDefinition } from "./types-Bl3YdPck.cjs";
|
|
2
2
|
|
|
3
3
|
//#region src/standard.d.ts
|
|
4
4
|
declare function defineStandardEnv<T extends Omit<StandardEnvDefinition, '_standard'>>(definition: T): T & {
|
package/dist/standard.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { c as StandardValidationResult, o as StandardEnvDefinition } from "./types-CUF5RARc.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/standard.d.ts
|
|
4
4
|
declare function defineStandardEnv<T extends Omit<StandardEnvDefinition, '_standard'>>(definition: T): T & {
|
|
@@ -12,6 +12,10 @@ interface StandardEnvDefinition {
|
|
|
12
12
|
/** @internal */
|
|
13
13
|
readonly _standard: true;
|
|
14
14
|
}
|
|
15
|
+
interface EnvPreset {
|
|
16
|
+
server?: z.ZodRawShape;
|
|
17
|
+
client?: z.ZodRawShape;
|
|
18
|
+
}
|
|
15
19
|
type AnyEnvDefinition = EnvDefinition | StandardEnvDefinition;
|
|
16
20
|
type ValidationResult = {
|
|
17
21
|
success: true;
|
|
@@ -39,5 +43,5 @@ type OrEmptyShape<T> = T extends z.ZodRawShape ? T : Record<string, never>;
|
|
|
39
43
|
type InferClientEnv<T extends EnvDefinition> = z.infer<z.ZodObject<OrEmptyShape<T['client']>>>;
|
|
40
44
|
type InferServerEnv<T extends EnvDefinition> = z.infer<z.ZodObject<OrEmptyShape<T['server']> & OrEmptyShape<T['client']>>>;
|
|
41
45
|
//#endregion
|
|
42
|
-
export {
|
|
43
|
-
//# sourceMappingURL=types-
|
|
46
|
+
export { InferServerEnv as a, StandardValidationResult as c, InferClientEnv as i, ValidationResult as l, EnvDefinition as n, StandardEnvDefinition as o, EnvPreset as r, StandardValidationIssue as s, AnyEnvDefinition as t };
|
|
47
|
+
//# sourceMappingURL=types-Bl3YdPck.d.cts.map
|
|
@@ -12,6 +12,10 @@ interface StandardEnvDefinition {
|
|
|
12
12
|
/** @internal */
|
|
13
13
|
readonly _standard: true;
|
|
14
14
|
}
|
|
15
|
+
interface EnvPreset {
|
|
16
|
+
server?: z.ZodRawShape;
|
|
17
|
+
client?: z.ZodRawShape;
|
|
18
|
+
}
|
|
15
19
|
type AnyEnvDefinition = EnvDefinition | StandardEnvDefinition;
|
|
16
20
|
type ValidationResult = {
|
|
17
21
|
success: true;
|
|
@@ -39,5 +43,5 @@ type OrEmptyShape<T> = T extends z.ZodRawShape ? T : Record<string, never>;
|
|
|
39
43
|
type InferClientEnv<T extends EnvDefinition> = z.infer<z.ZodObject<OrEmptyShape<T['client']>>>;
|
|
40
44
|
type InferServerEnv<T extends EnvDefinition> = z.infer<z.ZodObject<OrEmptyShape<T['server']> & OrEmptyShape<T['client']>>>;
|
|
41
45
|
//#endregion
|
|
42
|
-
export {
|
|
43
|
-
//# sourceMappingURL=types-
|
|
46
|
+
export { InferServerEnv as a, StandardValidationResult as c, InferClientEnv as i, ValidationResult as l, EnvDefinition as n, StandardEnvDefinition as o, EnvPreset as r, StandardValidationIssue as s, AnyEnvDefinition as t };
|
|
47
|
+
//# sourceMappingURL=types-CUF5RARc.d.mts.map
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://raw.githubusercontent.com/vitejs/vite-plugin-registry/refs/heads/main/data/schema/extended-package-json.schema.json",
|
|
3
3
|
"name": "@vite-env/core",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.5.0",
|
|
6
6
|
"description": "The env.ts layer for Vite — define once, validate everywhere, import with types",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"homepage": "https://github.com/pyyupsk/vite-env#readme",
|
|
@@ -104,6 +104,16 @@
|
|
|
104
104
|
"default": "./dist/standard.cjs"
|
|
105
105
|
}
|
|
106
106
|
},
|
|
107
|
+
"./presets": {
|
|
108
|
+
"import": {
|
|
109
|
+
"types": "./dist/presets/index.d.mts",
|
|
110
|
+
"default": "./dist/presets/index.mjs"
|
|
111
|
+
},
|
|
112
|
+
"require": {
|
|
113
|
+
"types": "./dist/presets/index.d.cts",
|
|
114
|
+
"default": "./dist/presets/index.cjs"
|
|
115
|
+
}
|
|
116
|
+
},
|
|
107
117
|
"./package.json": "./package.json"
|
|
108
118
|
},
|
|
109
119
|
"main": "./dist/index.cjs",
|