@townco/env 0.1.23 → 0.1.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,35 +1,5 @@
1
- import { z } from "zod";
2
- export declare const envSchema: z.ZodObject<{
3
- ANTHROPIC_API_KEY: z.ZodString;
4
- AWS_ACCESS_KEY_ID: z.ZodString;
5
- AWS_SECRET_ACCESS_KEY: z.ZodString;
6
- EXA_API_KEY: z.ZodString;
7
- FLY_TOKEN: z.ZodString;
8
- NEXT_PUBLIC_SITE_URL: z.ZodString;
9
- NEXT_PUBLIC_SUPABASE_ANON_KEY: z.ZodString;
10
- NEXT_PUBLIC_SUPABASE_URL: z.ZodString;
11
- SUPABASE_ACCESS_TOKEN: z.ZodString;
12
- SUPABASE_ANON_KEY: z.ZodString;
13
- SUPABASE_DB_PASSWORD: z.ZodString;
14
- SUPABASE_PROJECT_ID: z.ZodString;
15
- SUPABASE_SRC_ARC_BUCKET: z.ZodString;
16
- SUPABASE_URL: z.ZodString;
17
- }, z.core.$strip>;
18
- export type Env = z.infer<typeof envSchema>;
19
- export declare const parseEnv: (env?: NodeJS.ProcessEnv) => {
20
- ANTHROPIC_API_KEY: string;
21
- AWS_ACCESS_KEY_ID: string;
22
- AWS_SECRET_ACCESS_KEY: string;
23
- EXA_API_KEY: string;
24
- FLY_TOKEN: string;
25
- NEXT_PUBLIC_SITE_URL: string;
26
- NEXT_PUBLIC_SUPABASE_ANON_KEY: string;
27
- NEXT_PUBLIC_SUPABASE_URL: string;
28
- SUPABASE_ACCESS_TOKEN: string;
29
- SUPABASE_ANON_KEY: string;
30
- SUPABASE_DB_PASSWORD: string;
31
- SUPABASE_PROJECT_ID: string;
32
- SUPABASE_SRC_ARC_BUCKET: string;
33
- SUPABASE_URL: string;
34
- };
1
+ import envKeys from "./schema.json";
2
+ export type EnvKey = keyof typeof envKeys;
3
+ export declare const parseEnvFromSrc: (src?: typeof process.env) => <T extends EnvKey[]>(...keys: T) => { [K in T[number]]: string; };
4
+ export declare const parseEnv: <T extends EnvKey[]>(...keys: T) => { [K in T[number]]: string; };
35
5
  export { EnvFile } from "./env-file";
package/dist/index.js CHANGED
@@ -1,19 +1,7 @@
1
1
  import { z } from "zod";
2
- export const envSchema = z.object({
3
- ANTHROPIC_API_KEY: z.string().min(1),
4
- AWS_ACCESS_KEY_ID: z.string().min(1),
5
- AWS_SECRET_ACCESS_KEY: z.string().min(1),
6
- EXA_API_KEY: z.string().min(1),
7
- FLY_TOKEN: z.string().min(1),
8
- NEXT_PUBLIC_SITE_URL: z.string().min(1),
9
- NEXT_PUBLIC_SUPABASE_ANON_KEY: z.string().min(1),
10
- NEXT_PUBLIC_SUPABASE_URL: z.string().min(1),
11
- SUPABASE_ACCESS_TOKEN: z.string().min(1),
12
- SUPABASE_ANON_KEY: z.string().min(1),
13
- SUPABASE_DB_PASSWORD: z.string().min(1),
14
- SUPABASE_PROJECT_ID: z.string().min(1),
15
- SUPABASE_SRC_ARC_BUCKET: z.string().min(1),
16
- SUPABASE_URL: z.string().min(1),
17
- });
18
- export const parseEnv = (env = process.env) => envSchema.parse(env);
2
+ import envKeys from "./schema.json" with { type: "json" };
3
+ export const parseEnvFromSrc = (src = process.env) => (...keys) => z
4
+ .object(keys.reduce((acc, key) => ({ ...acc, [key]: z.string().min(1) }), {}))
5
+ .parse(src);
6
+ export const parseEnv = parseEnvFromSrc();
19
7
  export { EnvFile } from "./env-file";
@@ -0,0 +1,24 @@
1
+ {
2
+ "ANTHROPIC_API_KEY": null,
3
+ "AWS_ACCESS_KEY_ID": null,
4
+ "AWS_BUCKET": null,
5
+ "AWS_ENDPOINT": null,
6
+ "AWS_REGION": null,
7
+ "AWS_SECRET_ACCESS_KEY": null,
8
+ "BIBLIOTECHA_URL": null,
9
+ "EXA_API_KEY": null,
10
+ "FLY_ORG_SLUG": null,
11
+ "FLY_TOKEN": null,
12
+ "MCP_PROXY_URL": null,
13
+ "NEXT_PUBLIC_SITE_URL": null,
14
+ "NEXT_PUBLIC_SUPABASE_ANON_KEY": null,
15
+ "NEXT_PUBLIC_SUPABASE_URL": null,
16
+ "OPENAI_API_KEY": null,
17
+ "SUPABASE_ACCESS_TOKEN": null,
18
+ "SUPABASE_ANON_KEY": null,
19
+ "SUPABASE_DB_PASSWORD": null,
20
+ "SUPABASE_PROJECT_ID": null,
21
+ "SUPABASE_SECRET_KEY": null,
22
+ "SUPABASE_SRC_ARC_BUCKET": null,
23
+ "SUPABASE_URL": null
24
+ }
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bun
2
- export declare const updateSchema: ({ envSchemaSrc, ...opts }?: {
2
+ export declare const updateSchema: ({ filePath, ...opts }?: {
3
3
  envFile?: string;
4
- envSchemaSrc?: string;
4
+ filePath?: string;
5
5
  }) => Promise<void>;
@@ -1,31 +1,17 @@
1
1
  #!/usr/bin/env bun
2
2
  import path from "node:path";
3
- import { Biome } from "@biomejs/js-api/nodejs";
4
3
  import { findRoot } from "@townco/core";
5
- import { Project, SyntaxKind } from "ts-morph";
6
- const envSchemaTsSrc = path.join("packages", "env", "src", "index.ts");
7
- export const updateSchema = async ({ envSchemaSrc = envSchemaTsSrc, ...opts } = {}) => {
8
- const envFile = opts.envFile ?? path.join(await findRoot(), ".env.in");
9
- const root = await findRoot();
10
- const keys = (await Bun.file(envFile).text())
4
+ const envKeysFile = path.join("src", "schema.json");
5
+ export const updateSchema = async ({ filePath = envKeysFile, ...opts } = {}) => {
6
+ const keys = (await Bun.file(opts.envFile ?? path.join(await findRoot(), ".env.in")).text())
11
7
  .split("\n")
12
8
  .filter((line) => line.match(/^[A-Z_]+\=/))
13
9
  .map((line) => line.split("=")[0])
14
10
  .filter((k) => Boolean(k))
15
11
  .sort();
16
- const src = new Project().addSourceFileAtPath(envSchemaSrc);
17
- const obj = src
18
- .getVariableDeclaration("envSchema")
19
- .getInitializerIfKindOrThrow(SyntaxKind.CallExpression)
20
- .getArguments()[0]
21
- ?.asKindOrThrow(SyntaxKind.ObjectLiteralExpression);
22
- obj?.getProperties().forEach((p) => p.remove());
23
- obj?.addPropertyAssignments(keys.map((name) => ({ name, initializer: "z.string().min(1)" })));
24
- const biome = new Biome();
25
- src.replaceWithText(biome.formatContent(biome.openProject(root).projectKey, src.getFullText(), {
26
- filePath: src.getFilePath(),
27
- }).content);
28
- await src.save();
12
+ await Bun.write(filePath, Bun.spawnSync(["biome", "format", "--stdin-file-path", filePath], {
13
+ stdin: Buffer.from(JSON.stringify(keys.reduce((acc, key) => ({ ...acc, [key]: null }), {}))),
14
+ }).stdout.toString());
29
15
  };
30
16
  if (import.meta.main)
31
17
  await updateSchema();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@townco/env",
3
3
  "type": "module",
4
- "version": "0.1.23",
4
+ "version": "0.1.25",
5
5
  "description": "env",
6
6
  "license": "UNLICENSED",
7
7
  "main": "./dist/index.js",
@@ -21,7 +21,9 @@
21
21
  }
22
22
  },
23
23
  "devDependencies": {
24
- "@townco/tsconfig": "0.1.70",
24
+ "@biomejs/biome": "^2.3.8",
25
+ "@townco/core": "0.0.53",
26
+ "@townco/tsconfig": "0.1.72",
25
27
  "typescript": "^5.9.3"
26
28
  },
27
29
  "scripts": {
@@ -30,10 +32,7 @@
30
32
  "schema:update": "bun src/update-schema"
31
33
  },
32
34
  "dependencies": {
33
- "@biomejs/js-api": "^4.0.0",
34
- "@biomejs/wasm-nodejs": "^2.3.7",
35
- "@townco/core": "0.0.51",
36
- "ts-morph": "^27.0.2",
35
+ "@townco/core": "0.0.53",
37
36
  "zod": "^4.1.13"
38
37
  }
39
38
  }