@codemarc/blt 1.8.1 → 1.8.3

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 CHANGED
@@ -18,7 +18,7 @@
18
18
  - **Bucket**: Supabase storage — list buckets, list/upload/download files, get URLs
19
19
  - **Workflow**: List, show, delete, reload, and deploy GitHub Actions workflows (requires `gh`)
20
20
  - **Show**: Schema info, row counts, env vars, DB version, repo list
21
- - **Env**: Decrypt trailz `.trailz/env/.env.<name>.bin` to `.env` via smash (`blt env get`; requires `SMASH_KEY`)
21
+ - **Env**: Decrypt trailz `.trailz/env/.env.<name>.bin` to `.env` via smash (`blt env get`; expands `$VAR` by default; requires `SMASH_KEY`)
22
22
  - **Spin**: Manage DigitalOcean droplets and DNS for BLT test environments
23
23
  - **App**: Developer-triggered POS deployment and test data refresh workflows
24
24
  - **Cleanup**: Remove generated SQL/instance files, clean infrequently used YAML tags
@@ -959,10 +959,11 @@ blt spin setup test-laf --user root
959
959
 
960
960
  ### `blt env get <name>`
961
961
 
962
- Decrypt using `smash -n`. Ciphertext must be at `.trailz/env/.env.<name>.bin`; the CLI invokes smash with **`.env.<name>` (no `.bin`)** — that matches `@codemarc/smashdata`, which reads `${path}.bin` for decrypt. Set **`SMASH_KEY`** in your environment (same as when you encrypted). Writes plaintext to `.env` in the current directory.
962
+ Decrypt using `smash -n`. Ciphertext must be at `.trailz/env/.env.<name>.bin`; the CLI invokes smash with **`.env.<name>` (no `.bin`)** — that matches `@codemarc/smashdata`, which reads `${path}.bin` for decrypt. Set **`SMASH_KEY`** in your environment (same as when you encrypted). Writes plaintext to `.env` in the current directory. **`$VAR` references in the trailz file are expanded by default** (e.g. `SUPABASE_URL=https://$SUPABASE_PROJECT_REF.supabase.co`); use `--no-expand` to keep references verbatim.
963
963
 
964
964
  ```bash
965
965
  blt env get laf
966
+ blt env get bae --no-expand
966
967
  ```
967
968
 
968
969
  Equivalent to `smash -n .trailz/env/.env.laf >.env` from the project root when `.trailz/env/.env.laf.bin` exists.
@@ -21,7 +21,16 @@ export declare function dotEnvPathFor(cwd: string): string;
21
21
  export declare function formatEnvFileHeader(envName: string): string;
22
22
  /** Parse `BLT_ENV_NAME` or `# from .trailz/env/.env.<name>.bin` from a `.env` body. */
23
23
  export declare function parseEnvNameFromDotEnv(content: string): string | null;
24
- export declare function parseDotEnvContent(content: string, baseEnv?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
24
+ /** Parse assignment lines from `.env` text (skips comments and `BLT_ENV_NAME`). */
25
+ export declare function parseDotEnvAssignments(content: string): Record<string, string>;
26
+ /** Expand `$VAR` / `${VAR}` references within a parsed env map. */
27
+ export declare function expandDotEnvAssignments(parsed: Record<string, string>): Record<string, string>;
28
+ /**
29
+ * Expand variable references in `.env` body text, preserving comments and line order.
30
+ * Used by `blt env get` so the written `.env` is runnable without runtime expansion.
31
+ */
32
+ export declare function expandDotEnvBody(content: string): string;
33
+ export declare function parseDotEnvContent(content: string, baseEnv?: NodeJS.ProcessEnv, expand?: boolean): NodeJS.ProcessEnv;
25
34
  /**
26
35
  * Fail fast when the requested env is not available in `cwd`.
27
36
  * Accepts a loaded, tagged `.env` or a trailz ciphertext bundle (+ SMASH_KEY).
@@ -1 +1 @@
1
- {"version":3,"file":"env-check.d.ts","sourceRoot":"","sources":["../../../src/commands/app/env-check.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAE/C,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,QAA6E,CAAC;AAE9G,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,eAAe,CAAC;AAE5D,MAAM,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAe/G;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,kBAAkB,CAsDrB"}
1
+ {"version":3,"file":"env-check.d.ts","sourceRoot":"","sources":["../../../src/commands/app/env-check.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAI5C,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAE/C,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,QAA6E,CAAC;AAE9G,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,eAAe,CAAC;AAE5D,MAAM,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrE;AAED,mFAAmF;AACnF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI9E;AAED,mEAAmE;AACnE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI9F;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmBxD;AAED,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAM,CAAC,UAAwB,EACxC,MAAM,UAAO,GACX,MAAM,CAAC,UAAU,CAInB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,kBAAkB,CAsDrB"}
@@ -1,5 +1,7 @@
1
1
  import { existsSync, readFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
+ import dotenv from "dotenv";
4
+ import dotenvExpand from "dotenv-expand";
3
5
  /** Canonical tag written by `blt env get` and recognized on preflight. */
4
6
  export const BLT_ENV_NAME_KEY = "BLT_ENV_NAME";
5
7
  /** Legacy / human-readable header (still parsed for older `.env` files). */
@@ -43,22 +45,46 @@ export function parseEnvNameFromDotEnv(content) {
43
45
  const commentMatch = ENV_FROM_COMMENT_RE.exec(content);
44
46
  return commentMatch?.[1] ?? null;
45
47
  }
46
- export function parseDotEnvContent(content, baseEnv = process.env) {
47
- const nextEnv = { ...baseEnv };
48
- for (const rawLine of content.split("\n")) {
49
- const line = rawLine.trim();
50
- if (!line || line.startsWith("#"))
51
- continue;
52
- if (line.startsWith(`${BLT_ENV_NAME_KEY}=`))
53
- continue;
54
- const eq = line.indexOf("=");
48
+ /** Parse assignment lines from `.env` text (skips comments and `BLT_ENV_NAME`). */
49
+ export function parseDotEnvAssignments(content) {
50
+ const parsed = dotenv.parse(content);
51
+ delete parsed[BLT_ENV_NAME_KEY];
52
+ return parsed;
53
+ }
54
+ /** Expand `$VAR` / `${VAR}` references within a parsed env map. */
55
+ export function expandDotEnvAssignments(parsed) {
56
+ const expanded = { ...parsed };
57
+ dotenvExpand.expand({ parsed: expanded, processEnv: {} });
58
+ return expanded;
59
+ }
60
+ /**
61
+ * Expand variable references in `.env` body text, preserving comments and line order.
62
+ * Used by `blt env get` so the written `.env` is runnable without runtime expansion.
63
+ */
64
+ export function expandDotEnvBody(content) {
65
+ const expanded = expandDotEnvAssignments(parseDotEnvAssignments(content));
66
+ return content
67
+ .split("\n")
68
+ .map((rawLine) => {
69
+ const trimmed = rawLine.trim();
70
+ if (!trimmed || trimmed.startsWith("#"))
71
+ return rawLine;
72
+ if (trimmed.startsWith(`${BLT_ENV_NAME_KEY}=`))
73
+ return rawLine;
74
+ const eq = rawLine.indexOf("=");
55
75
  if (eq <= 0)
56
- continue;
57
- const key = line.slice(0, eq).trim();
58
- const value = line.slice(eq + 1).trim();
59
- nextEnv[key] = value;
60
- }
61
- return nextEnv;
76
+ return rawLine;
77
+ const key = rawLine.slice(0, eq).trim();
78
+ if (!(key in expanded))
79
+ return rawLine;
80
+ return `${rawLine.slice(0, eq + 1)}${expanded[key]}`;
81
+ })
82
+ .join("\n");
83
+ }
84
+ export function parseDotEnvContent(content, baseEnv = process.env, expand = true) {
85
+ const parsed = parseDotEnvAssignments(content);
86
+ const resolved = expand ? expandDotEnvAssignments(parsed) : parsed;
87
+ return { ...baseEnv, ...resolved };
62
88
  }
63
89
  /**
64
90
  * Fail fast when the requested env is not available in `cwd`.
@@ -1 +1 @@
1
- {"version":3,"file":"env-check.js","sourceRoot":"","sources":["../../../src/commands/app/env-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env-check.js","sourceRoot":"","sources":["../../../src/commands/app/env-check.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,11 @@
1
1
  import type { Logger } from "@caporal/core";
2
+ export type EnvGetOptions = {
3
+ /** When false, write decrypted body verbatim (no `$VAR` expansion). */
4
+ expand?: boolean;
5
+ };
2
6
  /**
3
7
  * Decrypt `.trailz/env/.env.<name>.bin` with smash (`-n`) and write plaintext to `.env`.
4
8
  * Invokes smash with path `.trailz/env/.env.<name>` (no `.bin`) so smash reads `${path}.bin`.
5
9
  */
6
- export declare function envGet(name: string, logger: Logger): Promise<void>;
10
+ export declare function envGet(name: string, logger: Logger, opts?: EnvGetOptions): Promise<void>;
7
11
  //# sourceMappingURL=get.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/env/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAyB5C;;;GAGG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCxE"}
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/env/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAK5C,MAAM,MAAM,aAAa,GAAG;IAC3B,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAsBF;;;GAGG;AACH,wBAAsB,MAAM,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,aAAkB,GACtB,OAAO,CAAC,IAAI,CAAC,CA2Cf"}
@@ -1,6 +1,6 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import { join } from "node:path";
3
- import { formatEnvFileHeader, BLT_ENV_NAME_KEY } from "../app/env-check";
3
+ import { BLT_ENV_NAME_KEY, expandDotEnvBody, formatEnvFileHeader } from "../app/env-check";
4
4
  /** Single path segment for `.env.<name>` under `.trailz/env/`. */
5
5
  const NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
6
6
  /**
@@ -23,7 +23,8 @@ function resolveSmashCommand(cwd) {
23
23
  * Decrypt `.trailz/env/.env.<name>.bin` with smash (`-n`) and write plaintext to `.env`.
24
24
  * Invokes smash with path `.trailz/env/.env.<name>` (no `.bin`) so smash reads `${path}.bin`.
25
25
  */
26
- export async function envGet(name, logger) {
26
+ export async function envGet(name, logger, opts = {}) {
27
+ const expand = opts.expand ?? true;
27
28
  if (!NAME_RE.test(name)) {
28
29
  logger.error("Invalid environment name: use one segment (letters, numbers, . _ -).");
29
30
  process.exit(1);
@@ -50,8 +51,9 @@ export async function envGet(name, logger) {
50
51
  process.exit(proc.exitCode ?? 1);
51
52
  }
52
53
  const outPath = join(cwd, ".env");
53
- const body = proc.stdout.toString().replace(/^\uFEFF/, "").trimStart();
54
+ const decrypted = proc.stdout.toString().replace(/^\uFEFF/, "").trimStart();
55
+ const body = expand ? expandDotEnvBody(decrypted) : decrypted;
54
56
  await Bun.write(outPath, `${formatEnvFileHeader(name)}${body}\n`);
55
- logger.info(`Wrote ${outPath} (${BLT_ENV_NAME_KEY}=${name})`);
57
+ logger.info(`Wrote ${outPath} (${BLT_ENV_NAME_KEY}=${name}${expand ? ", expanded" : ""})`);
56
58
  }
57
59
  //# sourceMappingURL=get.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/env/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzE,kEAAkE;AAClE,MAAM,OAAO,GAAG,8BAA8B,CAAC;AAE/C;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,GAAW;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5E,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,MAAc;IACxD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,CACX,sEAAsE,CACtE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACxC,qEAAqE;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,GAAG,QAAQ,MAAM,CAAC;IAElC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CACX,oDAAoD,OAAO,IAAI;YAC9D,6FAA6F,CAC9F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;QAC1B,GAAG,EAAE,CAAC,GAAG,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC;QAClC,GAAG;QACH,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;IACvE,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IAClE,MAAM,CAAC,IAAI,CAAC,SAAS,OAAO,KAAK,gBAAgB,IAAI,IAAI,GAAG,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/env/get.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiC,OAAO,EAAE,MAAM,eAAe,CAAC;AAG5E,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAO,EAAE,OAAO,QA2ClD"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiC,OAAO,EAAE,MAAM,eAAe,CAAC;AAG5E,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAO,EAAE,OAAO,QAgDlD"}
@@ -7,7 +7,7 @@ Usage:
7
7
  blt env <operation>
8
8
 
9
9
  Available operations:
10
- get <name> Decrypt .trailz/env/.env.<name>.bin with smash and write .env (invokes smash with .env.<name> path; see @codemarc/smashdata)
10
+ get <name> Decrypt .trailz/env/.env.<name>.bin with smash and write .env ($VAR references expanded by default)
11
11
 
12
12
  Requires: SMASH_KEY, ciphertext at .trailz/env/.env.<name>.bin, and smash (@codemarc/smashdata) via node_modules or bunx.
13
13
 
@@ -23,9 +23,12 @@ Run 'blt env get --help' for more information.
23
23
  .command("env get", "Decrypt named trailz env to .env")
24
24
  .hide()
25
25
  .argument("<name>", "Environment name (ciphertext: .trailz/env/.env.<name>.bin)")
26
- .action(async ({ args, logger, }) => {
26
+ .option("--no-expand", "Write decrypted values verbatim (keep $VAR references)")
27
+ .action(async ({ args, logger, options, }) => {
27
28
  try {
28
- await envGet(args.name, logger);
29
+ await envGet(args.name, logger, {
30
+ expand: options.noExpand !== true,
31
+ });
29
32
  }
30
33
  catch (error) {
31
34
  const message = error instanceof Error ? error.message : String(error);
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAgB;IAClD,MAAM,WAAW,GAAG;;;;;;;;;;;;CAYpB,CAAC;IAED,OAAO;SACL,OAAO,CAAC,KAAK,EAAE,4BAA4B,CAAC;SAC5C,IAAI,CAAC,WAAW,CAAC;SACjB,MAAM,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEJ,OAAO;SACL,OAAO,CAAC,SAAS,EAAE,kCAAkC,CAAC;SACtD,IAAI,EAAE;SACN,QAAQ,CAAC,QAAQ,EAAE,4DAA4D,CAAC;SAChF,MAAM,CACN,KAAK,EAAE,EACN,IAAI,EACJ,MAAM,GAIN,EAAE,EAAE;QACJ,IAAI,CAAC;YACJ,MAAM,MAAM,CAAC,IAAI,CAAC,IAAc,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CACD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAgB;IAClD,MAAM,WAAW,GAAG;;;;;;;;;;;;CAYpB,CAAC;IAED,OAAO;SACL,OAAO,CAAC,KAAK,EAAE,4BAA4B,CAAC;SAC5C,IAAI,CAAC,WAAW,CAAC;SACjB,MAAM,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEJ,OAAO;SACL,OAAO,CAAC,SAAS,EAAE,kCAAkC,CAAC;SACtD,IAAI,EAAE;SACN,QAAQ,CAAC,QAAQ,EAAE,4DAA4D,CAAC;SAChF,MAAM,CAAC,aAAa,EAAE,wDAAwD,CAAC;SAC/E,MAAM,CACN,KAAK,EAAE,EACN,IAAI,EACJ,MAAM,EACN,OAAO,GAKP,EAAE,EAAE;QACJ,IAAI,CAAC;YACJ,MAAM,MAAM,CAAC,IAAI,CAAC,IAAc,EAAE,MAAM,EAAE;gBACzC,MAAM,EAAE,OAAO,CAAC,QAAQ,KAAK,IAAI;aACjC,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CACD,CAAC;AACJ,CAAC"}
@@ -3,6 +3,7 @@ interface InitScriptOptions {
3
3
  output: string;
4
4
  ssh: boolean;
5
5
  workspace: boolean;
6
+ bundleWorkspace: boolean;
6
7
  connectionsFromEnv: boolean;
7
8
  }
8
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../../src/commands/init/script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAK5C,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAiED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAqFf"}
1
+ {"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../../src/commands/init/script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAK5C,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAiED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAwGf"}
@@ -1,6 +1,6 @@
1
1
  import { chmodSync, existsSync, readFileSync } from "node:fs";
2
2
  import { dirname, join, resolve } from "node:path";
3
- import { REPOSITORIES } from "../../lib/repositories";
3
+ import { BUNDLE_REPOSITORY, REPOSITORIES } from "../../lib/repositories";
4
4
  function parseEnvFile(envPath) {
5
5
  const content = readFileSync(envPath, "utf-8");
6
6
  const out = {};
@@ -63,6 +63,20 @@ export async function generateInitScript(options, logger) {
63
63
  "cd \"$(dirname \"$0\")\"",
64
64
  "",
65
65
  ];
66
+ if (options.bundleWorkspace) {
67
+ const bundleUrl = options.ssh ? BUNDLE_REPOSITORY.sshUrl : BUNDLE_REPOSITORY.url;
68
+ lines.push(`# ${BUNDLE_REPOSITORY.description}`);
69
+ lines.push(`echo "Syncing ${BUNDLE_REPOSITORY.name} (umbrella)..."`);
70
+ lines.push(`if [ ! -d ".git" ]; then`);
71
+ lines.push(` git init`);
72
+ lines.push(`fi`);
73
+ lines.push(`if ! git remote get-url origin &>/dev/null; then`);
74
+ lines.push(` git remote add origin ${bundleUrl}`);
75
+ lines.push(`fi`);
76
+ lines.push(`git fetch origin`);
77
+ lines.push(`git reset --hard origin/HEAD`);
78
+ lines.push("");
79
+ }
66
80
  for (const repo of REPOSITORIES) {
67
81
  const url = options.ssh ? repo.sshUrl : repo.url;
68
82
  lines.push(`# ${repo.description || repo.name}`);
@@ -87,11 +101,15 @@ export async function generateInitScript(options, logger) {
87
101
  // chmod may fail on Windows, ignore
88
102
  }
89
103
  logger.info(`Created init script: ${options.output}`);
90
- if (options.workspace || options.connectionsFromEnv) {
104
+ if (options.workspace || options.bundleWorkspace || options.connectionsFromEnv) {
91
105
  const baseDir = resolve(dirname(options.output));
92
106
  const workspacePath = join(baseDir, "blt.code-workspace");
93
107
  const workspaceContent = {};
94
- if (options.workspace) {
108
+ if (options.bundleWorkspace) {
109
+ workspaceContent.folders = [{ name: "blt", path: "." }];
110
+ workspaceContent.settings = {};
111
+ }
112
+ else if (options.workspace) {
95
113
  workspaceContent.folders = REPOSITORIES.map((repo) => ({
96
114
  name: repo.name,
97
115
  path: repo.name,
@@ -104,6 +122,7 @@ export async function generateInitScript(options, logger) {
104
122
  const connection = connectionFromSupabaseEnv(env);
105
123
  if (connection) {
106
124
  workspaceContent.settings = {
125
+ ...(workspaceContent.settings ?? {}),
107
126
  "sqltools.connections": [connection],
108
127
  };
109
128
  }
@@ -1 +1 @@
1
- {"version":3,"file":"script.js","sourceRoot":"","sources":["../../../src/commands/init/script.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"script.js","sourceRoot":"","sources":["../../../src/commands/init/script.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,OAAO,EAAE,OAAO,QA4CnD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,OAAO,EAAE,OAAO,QAmDnD"}
@@ -14,11 +14,14 @@ or pull the latest changes (if they do). Run the generated script in the
14
14
  directory where you want the projects to live.
15
15
 
16
16
  With -w, also creates blt.code-workspace with folder entries from the repository list.
17
- With -c (and -w), adds sqltools.connections from SUPABASE_* vars in .env if present.
17
+ With -b, clones/pulls the umbrella repo (codemarc/blt) first, then sub-repos, and
18
+ creates blt.code-workspace as a single-root workspace (name "blt", path ".").
19
+ With -c, adds sqltools.connections from SUPABASE_* vars in .env if present.
18
20
 
19
21
  Example:
20
22
  blt init
21
23
  blt init -w -c
24
+ blt init -b
22
25
  ./getblt.sh
23
26
  `;
24
27
  program
@@ -30,6 +33,9 @@ Example:
30
33
  .option("-s, --ssh", "Use SSH URLs instead of HTTPS URLs", { default: false })
31
34
  .option("-w, --workspace", "Also generate blt.code-workspace with folders from repositories", {
32
35
  default: false,
36
+ })
37
+ .option("-b, --bundle", "Also generate blt.code-workspace as a single-root workspace (blt → .)", {
38
+ default: false,
33
39
  })
34
40
  .option("-c, --connections", "Add sqltools.connections from .env if present", {
35
41
  default: false,
@@ -39,6 +45,7 @@ Example:
39
45
  output: options.output,
40
46
  ssh: options.ssh,
41
47
  workspace: options.workspace,
48
+ bundleWorkspace: options.bundle,
42
49
  connectionsFromEnv: options.connections,
43
50
  }, logger);
44
51
  });
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,OAAgB;IACnD,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;CAiBrB,CAAC;IAED,OAAO;SACL,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC;SACpC,IAAI,CAAC,YAAY,CAAC;SAClB,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,EAAE;QAC5D,OAAO,EAAE,aAAa;KACtB,CAAC;SACD,MAAM,CAAC,WAAW,EAAE,oCAAoC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SAC7E,MAAM,CAAC,iBAAiB,EAAE,iEAAiE,EAAE;QAC7F,OAAO,EAAE,KAAK;KACd,CAAC;SACD,MAAM,CAAC,mBAAmB,EAAE,+CAA+C,EAAE;QAC7E,OAAO,EAAE,KAAK;KACd,CAAC;SACD,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACrC,MAAM,kBAAkB,CACvB;YACC,MAAM,EAAE,OAAO,CAAC,MAAgB;YAChC,GAAG,EAAE,OAAO,CAAC,GAAc;YAC3B,SAAS,EAAE,OAAO,CAAC,SAAoB;YACvC,kBAAkB,EAAE,OAAO,CAAC,WAAsB;SAClD,EACD,MAAM,CACN,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,OAAgB;IACnD,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;CAoBrB,CAAC;IAED,OAAO;SACL,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC;SACpC,IAAI,CAAC,YAAY,CAAC;SAClB,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,EAAE;QAC5D,OAAO,EAAE,aAAa;KACtB,CAAC;SACD,MAAM,CAAC,WAAW,EAAE,oCAAoC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SAC7E,MAAM,CAAC,iBAAiB,EAAE,iEAAiE,EAAE;QAC7F,OAAO,EAAE,KAAK;KACd,CAAC;SACD,MAAM,CAAC,cAAc,EAAE,uEAAuE,EAAE;QAChG,OAAO,EAAE,KAAK;KACd,CAAC;SACD,MAAM,CAAC,mBAAmB,EAAE,+CAA+C,EAAE;QAC7E,OAAO,EAAE,KAAK;KACd,CAAC;SACD,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACrC,MAAM,kBAAkB,CACvB;YACC,MAAM,EAAE,OAAO,CAAC,MAAgB;YAChC,GAAG,EAAE,OAAO,CAAC,GAAc;YAC3B,SAAS,EAAE,OAAO,CAAC,SAAoB;YACvC,eAAe,EAAE,OAAO,CAAC,MAAiB;YAC1C,kBAAkB,EAAE,OAAO,CAAC,WAAsB;SAClD,EACD,MAAM,CACN,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -4,6 +4,8 @@ export interface Repository {
4
4
  sshUrl: string;
5
5
  description?: string;
6
6
  }
7
+ /** Umbrella meta-repo used with `blt init -b` (single-root workspace). */
8
+ export declare const BUNDLE_REPOSITORY: Repository;
7
9
  /**
8
10
  * Hardcoded list of valid repositories in the current working set
9
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"repositories.d.ts","sourceRoot":"","sources":["../../src/lib/repositories.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,UAAU,EAiDpC,CAAC"}
1
+ {"version":3,"file":"repositories.d.ts","sourceRoot":"","sources":["../../src/lib/repositories.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,EAAE,UAK/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,UAAU,EAiDpC,CAAC"}
@@ -1,3 +1,10 @@
1
+ /** Umbrella meta-repo used with `blt init -b` (single-root workspace). */
2
+ export const BUNDLE_REPOSITORY = {
3
+ name: "blt",
4
+ url: "https://github.com/codemarc/blt.git",
5
+ sshUrl: "git@github.com:codemarc/blt.git",
6
+ description: "BLT umbrella workspace",
7
+ };
1
8
  /**
2
9
  * Hardcoded list of valid repositories in the current working set
3
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"repositories.js","sourceRoot":"","sources":["../../src/lib/repositories.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC;QACE,IAAI,EAAE,OAAO;QACb,GAAG,EAAE,0CAA0C;QAC/C,MAAM,EAAE,sCAAsC;QAC9C,WAAW,EAAE,qBAAqB;KACnC;IACD;QACE,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,iDAAiD;QACtD,MAAM,EAAE,6CAA6C;QACrD,WAAW,EAAE,sBAAsB;KACpC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,kDAAkD;QACvD,MAAM,EAAE,8CAA8C;QACtD,WAAW,EAAE,2BAA2B;KACzC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,2CAA2C;QAChD,MAAM,EAAE,uCAAuC;QAC/C,WAAW,EAAE,mBAAmB;KACjC;IACD;QACE,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,uDAAuD;QAC5D,MAAM,EAAE,mDAAmD;QAC3D,WAAW,EAAE,gBAAgB;KAC9B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,2CAA2C;QAChD,MAAM,EAAE,uCAAuC;QAC/C,WAAW,EAAE,oBAAoB;KAClC;IACD;QACE,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,8CAA8C;QACnD,MAAM,EAAE,0CAA0C;QAClD,WAAW,EAAE,qBAAqB;KACnC;IACD;QACE,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,4CAA4C;QACjD,MAAM,EAAE,wCAAwC;QAChD,WAAW,EAAE,iBAAiB;KAC/B;CACF,CAAC"}
1
+ {"version":3,"file":"repositories.js","sourceRoot":"","sources":["../../src/lib/repositories.ts"],"names":[],"mappings":"AAOA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAe;IAC3C,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,qCAAqC;IAC1C,MAAM,EAAE,iCAAiC;IACzC,WAAW,EAAE,wBAAwB;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC;QACE,IAAI,EAAE,OAAO;QACb,GAAG,EAAE,0CAA0C;QAC/C,MAAM,EAAE,sCAAsC;QAC9C,WAAW,EAAE,qBAAqB;KACnC;IACD;QACE,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,iDAAiD;QACtD,MAAM,EAAE,6CAA6C;QACrD,WAAW,EAAE,sBAAsB;KACpC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,kDAAkD;QACvD,MAAM,EAAE,8CAA8C;QACtD,WAAW,EAAE,2BAA2B;KACzC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,2CAA2C;QAChD,MAAM,EAAE,uCAAuC;QAC/C,WAAW,EAAE,mBAAmB;KACjC;IACD;QACE,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,uDAAuD;QAC5D,MAAM,EAAE,mDAAmD;QAC3D,WAAW,EAAE,gBAAgB;KAC9B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,2CAA2C;QAChD,MAAM,EAAE,uCAAuC;QAC/C,WAAW,EAAE,oBAAoB;KAClC;IACD;QACE,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,8CAA8C;QACnD,MAAM,EAAE,0CAA0C;QAClD,WAAW,EAAE,qBAAqB;KACnC;IACD;QACE,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,4CAA4C;QACjD,MAAM,EAAE,wCAAwC;QAChD,WAAW,EAAE,iBAAiB;KAC/B;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codemarc/blt",
3
- "version": "1.8.1",
3
+ "version": "1.8.3",
4
4
  "description": "blt cli",
5
5
  "type": "module",
6
6
  "main": "dist/blt",
@@ -19,7 +19,7 @@
19
19
  "dev": "bunx --bun tsc --watch",
20
20
  "start": "bun run src/blt.ts",
21
21
  "prepublishOnly": "bun run build",
22
- "test": "echo \"Tests to be added\" && exit 0"
22
+ "test": "bun test src/commands/app/env-check.test.ts"
23
23
  },
24
24
  "keywords": [
25
25
  "blt",
@@ -49,6 +49,7 @@
49
49
  "build-number-generator": "^3.0.0",
50
50
  "debug": "^4.4.3",
51
51
  "dotenv": "^17.2.3",
52
+ "dotenv-expand": "^13.0.0",
52
53
  "file-type": "^17.1.6",
53
54
  "js-yaml": "^4.1.1",
54
55
  "pdf-lib": "^1.17.1",