@codemarc/blt 1.8.2 → 1.8.4

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.
Files changed (44) hide show
  1. package/README.md +5 -4
  2. package/dist/blt +19 -19
  3. package/dist/blt.js.map +1 -1
  4. package/dist/commands/app/env-check.d.ts +24 -6
  5. package/dist/commands/app/env-check.d.ts.map +1 -1
  6. package/dist/commands/app/env-check.js +94 -31
  7. package/dist/commands/app/env-check.js.map +1 -1
  8. package/dist/commands/app/pos.d.ts.map +1 -1
  9. package/dist/commands/app/pos.js +15 -8
  10. package/dist/commands/app/pos.js.map +1 -1
  11. package/dist/commands/app.js +1 -1
  12. package/dist/commands/env/get.d.ts +8 -3
  13. package/dist/commands/env/get.d.ts.map +1 -1
  14. package/dist/commands/env/get.js +18 -16
  15. package/dist/commands/env/get.js.map +1 -1
  16. package/dist/commands/env/list.d.ts +8 -0
  17. package/dist/commands/env/list.d.ts.map +1 -0
  18. package/dist/commands/env/list.js +21 -0
  19. package/dist/commands/env/list.js.map +1 -0
  20. package/dist/commands/env.d.ts.map +1 -1
  21. package/dist/commands/env.js +18 -6
  22. package/dist/commands/env.js.map +1 -1
  23. package/dist/commands/init/script.d.ts +1 -0
  24. package/dist/commands/init/script.d.ts.map +1 -1
  25. package/dist/commands/init/script.js +33 -11
  26. package/dist/commands/init/script.js.map +1 -1
  27. package/dist/commands/init.d.ts.map +1 -1
  28. package/dist/commands/init.js +6 -0
  29. package/dist/commands/init.js.map +1 -1
  30. package/dist/commands/show/env.d.ts.map +1 -1
  31. package/dist/commands/show/env.js +7 -25
  32. package/dist/commands/show/env.js.map +1 -1
  33. package/dist/commands/workflow.d.ts.map +1 -1
  34. package/dist/commands/workflow.js +1 -7
  35. package/dist/commands/workflow.js.map +1 -1
  36. package/dist/lib/github.d.ts +17 -0
  37. package/dist/lib/github.d.ts.map +1 -0
  38. package/dist/lib/github.js +53 -0
  39. package/dist/lib/github.js.map +1 -0
  40. package/dist/lib/repositories.d.ts +1 -0
  41. package/dist/lib/repositories.d.ts.map +1 -1
  42. package/dist/lib/repositories.js +30 -14
  43. package/dist/lib/repositories.js.map +1 -1
  44. package/package.json +11 -10
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
@@ -447,7 +447,7 @@ Pull a data snapshot from one environment and apply it to another.
447
447
  blt app data refresh --from laf --to test-laf
448
448
  ```
449
449
 
450
- This command uses `.trailz/env/.env.<name>.bin` bundles in the **current working directory** (for example a deploy site checkout) and the existing `blt data pull` / `blt data apply` implementation. Snapshots default to `<cwd>/snapshots/` in **toon** format (override with `--out` / `--format`).
450
+ This command uses `.trailz/env/env.<name>.bin` bundles in the **current working directory** (for example a deploy site checkout) and the existing `blt data pull` / `blt data apply` implementation. Snapshots default to `<cwd>/snapshots/` in **toon** format (override with `--out` / `--format`).
451
451
 
452
452
  ---
453
453
 
@@ -959,13 +959,14 @@ 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
- Equivalent to `smash -n .trailz/env/.env.laf >.env` from the project root when `.trailz/env/.env.laf.bin` exists.
969
+ Equivalent to `smash -n .trailz/env/env.laf >.env` from the project root when `.trailz/env/env.laf.bin` exists.
969
970
 
970
971
  ---
971
972
 
package/dist/blt CHANGED
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env bun
2
2
  import { program } from "@caporal/core";
3
+ import appCommand from "./commands/app";
3
4
  import bucketCommand from "./commands/bucket";
4
5
  import buildCommand from "./commands/build";
6
+ import cleanupCommand from "./commands/cleanup";
7
+ import dataCommand from "./commands/data";
5
8
  import deployCommand from "./commands/deploy";
9
+ import envCommand from "./commands/env";
6
10
  import imageCommand from "./commands/image";
7
11
  import initCommand from "./commands/init";
8
12
  import pdfCommand from "./commands/pdf";
9
- import versionCommand from "./commands/version";
10
13
  import showCommand from "./commands/show";
11
- import cleanupCommand from "./commands/cleanup";
12
- import workflowCommand from "./commands/workflow";
13
- import waiCommand from "./commands/wai";
14
- import templateCommand from "./commands/template";
15
- import envCommand from "./commands/env";
16
- import dataCommand from "./commands/data";
17
14
  import spinCommand from "./commands/spin";
18
- import appCommand from "./commands/app";
15
+ import templateCommand from "./commands/template";
16
+ import versionCommand from "./commands/version";
17
+ import waiCommand from "./commands/wai";
18
+ import workflowCommand from "./commands/workflow";
19
19
  import { join, dirname } from "node:path";
20
20
  import { readFileSync } from "node:fs";
21
21
  import { fileURLToPath } from "node:url";
@@ -29,22 +29,22 @@ export function getPackageVersion() {
29
29
  program.name("blt")
30
30
  .version(getPackageVersion())
31
31
  .description("BLT Core Cli");
32
+ appCommand(program);
33
+ bucketCommand(program);
34
+ buildCommand(program);
35
+ cleanupCommand(program);
36
+ dataCommand(program);
37
+ deployCommand(program);
38
+ envCommand(program);
32
39
  imageCommand(program);
33
40
  initCommand(program);
34
41
  pdfCommand(program);
35
- versionCommand(program);
36
- buildCommand(program);
37
- deployCommand(program);
38
- bucketCommand(program);
39
42
  showCommand(program);
40
- cleanupCommand(program);
41
- workflowCommand(program);
42
- waiCommand(program);
43
- templateCommand(program);
44
- envCommand(program);
45
- dataCommand(program);
46
43
  spinCommand(program);
47
- appCommand(program);
44
+ templateCommand(program);
45
+ versionCommand(program);
46
+ waiCommand(program);
47
+ workflowCommand(program);
48
48
  // If no command is provided, show help
49
49
  const args = process.argv.slice(2);
50
50
  if (args.length === 0) {
package/dist/blt.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"blt.js","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAClD,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAClD,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,UAAU,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;KACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,WAAW,CAAC,cAAc,CAAC,CAAC;AAE5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,UAAU,CAAC,OAAO,CAAC,CAAC;AAEtB,uCAAuC;AACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AACD,OAAO,CAAC,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"blt.js","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAClD,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;KACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,WAAW,CAAC,cAAc,CAAC,CAAC;AAE5B,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,eAAe,CAAC,OAAO,CAAC,CAAC;AAE3B,uCAAuC;AACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AACD,OAAO,CAAC,GAAG,EAAE,CAAC"}
@@ -1,8 +1,10 @@
1
1
  import type { Logger } from "@caporal/core";
2
2
  /** Canonical tag written by `blt env get` and recognized on preflight. */
3
3
  export declare const BLT_ENV_NAME_KEY = "BLT_ENV_NAME";
4
- /** Legacy / human-readable header (still parsed for older `.env` files). */
4
+ /** Human-readable header written by `blt env get` (parsed on preflight). */
5
5
  export declare const ENV_FROM_COMMENT_RE: RegExp;
6
+ /** Pre-rename trailz bundles (`.env.<name>.bin`); still parsed from older `.env` files. */
7
+ export declare const LEGACY_ENV_FROM_COMMENT_RE: RegExp;
6
8
  export type AppEnvSource = "local-dotenv" | "trailz-bundle";
7
9
  export type AppEnvAvailability = {
8
10
  envName: string;
@@ -12,16 +14,32 @@ export type AppEnvAvailability = {
12
14
  bundlePath: string;
13
15
  };
14
16
  export declare function trailzEnvBasePath(cwd: string, envName: string): string;
17
+ export declare function legacyTrailzEnvBasePath(cwd: string, envName: string): string;
15
18
  export declare function trailzEnvBundlePath(cwd: string, envName: string): string;
19
+ export declare function legacyTrailzEnvBundlePath(cwd: string, envName: string): string;
20
+ /** Smash plaintext path + ciphertext path; prefers `env.<name>.bin`, falls back to legacy `.env.<name>.bin`. */
21
+ export declare function resolveTrailzEnvPaths(cwd: string, envName: string): {
22
+ basePath: string;
23
+ bundlePath: string;
24
+ } | null;
25
+ /** Names with a trailz ciphertext bundle in `cwd/.trailz/env/` (sorted). */
26
+ export declare function listTrailzEnvNames(cwd?: string): string[];
16
27
  /** Device-manager bundle name paired with a site env (e.g. test1 → test1-dm). */
17
28
  export declare function siteDmEnvName(siteEnvName: string): string;
18
29
  export declare function appDmEnvPath(cwd: string): string;
19
30
  export declare function dotEnvPathFor(cwd: string): string;
20
- /** Header prepended when decrypting trailz env bundles to `.env`. */
21
- export declare function formatEnvFileHeader(envName: string): string;
22
- /** Parse `BLT_ENV_NAME` or `# from .trailz/env/.env.<name>.bin` from a `.env` body. */
31
+ /** Parse `BLT_ENV_NAME` or `# from .trailz/env/env.<name>.bin` from a `.env` body. */
23
32
  export declare function parseEnvNameFromDotEnv(content: string): string | null;
24
- export declare function parseDotEnvContent(content: string, baseEnv?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
33
+ /** Parse assignment lines from `.env` text (skips comments and `BLT_ENV_NAME`). */
34
+ export declare function parseDotEnvAssignments(content: string): Record<string, string>;
35
+ /** Expand `$VAR` / `${VAR}` references within a parsed env map. */
36
+ export declare function expandDotEnvAssignments(parsed: Record<string, string>): Record<string, string>;
37
+ /**
38
+ * Expand variable references in `.env` body text, preserving comments and line order.
39
+ * Used by `blt env get` so the written `.env` is runnable without runtime expansion.
40
+ */
41
+ export declare function expandDotEnvBody(content: string): string;
42
+ export declare function parseDotEnvContent(content: string, baseEnv?: NodeJS.ProcessEnv, expand?: boolean): NodeJS.ProcessEnv;
25
43
  /**
26
44
  * Fail fast when the requested env is not available in `cwd`.
27
45
  * Accepts a loaded, tagged `.env` or a trailz ciphertext bundle (+ SMASH_KEY).
@@ -30,7 +48,7 @@ export declare function ensureAppEnv(opts: {
30
48
  envName: string;
31
49
  cwd: string;
32
50
  logger?: Logger;
33
- /** When true, skip cwd `.env` and require `.trailz/env/.env.<name>.bin` (app data workflows). */
51
+ /** When true, skip cwd `.env` and require `.trailz/env/env.<name>.bin` (app data workflows). */
34
52
  trailzOnly?: boolean;
35
53
  }): AppEnvAvailability;
36
54
  //# sourceMappingURL=env-check.d.ts.map
@@ -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,QAA2E,CAAC;AAE5G,2FAA2F;AAC3F,eAAO,MAAM,0BAA0B,QACoC,CAAC;AAM5E,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,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,gHAAgH;AAChH,wBAAgB,qBAAqB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACb;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAcjD;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,EAAE,CAoBxE;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,sFAAsF;AACtF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAarE;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,gGAAgG;IAChG,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,kBAAkB,CAuDrB"}
@@ -1,15 +1,62 @@
1
- import { existsSync, readFileSync } from "node:fs";
1
+ import { existsSync, readdirSync, 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
- /** Legacy / human-readable header (still parsed for older `.env` files). */
6
- export const ENV_FROM_COMMENT_RE = /^#\s*from\s+\.trailz\/env\/\.env\.([a-zA-Z0-9][a-zA-Z0-9._-]*)\.bin\s*$/m;
7
+ /** Human-readable header written by `blt env get` (parsed on preflight). */
8
+ export const ENV_FROM_COMMENT_RE = /^#\s*from\s+\.trailz\/env\/env\.([a-zA-Z0-9][a-zA-Z0-9._-]*)\.bin\s*$/m;
9
+ /** Pre-rename trailz bundles (`.env.<name>.bin`); still parsed from older `.env` files. */
10
+ export const LEGACY_ENV_FROM_COMMENT_RE = /^#\s*from\s+\.trailz\/env\/\.env\.([a-zA-Z0-9][a-zA-Z0-9._-]*)\.bin\s*$/m;
11
+ /** Ciphertext filenames under `.trailz/env/` (basename only). */
12
+ const TRAILZ_ENV_BUNDLE_RE = /^env\.([a-zA-Z0-9][a-zA-Z0-9._-]*)\.bin$/;
13
+ const LEGACY_TRAILZ_ENV_BUNDLE_RE = /^\.env\.([a-zA-Z0-9][a-zA-Z0-9._-]*)\.bin$/;
7
14
  export function trailzEnvBasePath(cwd, envName) {
15
+ return join(cwd, ".trailz", "env", `env.${envName}`);
16
+ }
17
+ export function legacyTrailzEnvBasePath(cwd, envName) {
8
18
  return join(cwd, ".trailz", "env", `.env.${envName}`);
9
19
  }
10
20
  export function trailzEnvBundlePath(cwd, envName) {
11
21
  return `${trailzEnvBasePath(cwd, envName)}.bin`;
12
22
  }
23
+ export function legacyTrailzEnvBundlePath(cwd, envName) {
24
+ return `${legacyTrailzEnvBasePath(cwd, envName)}.bin`;
25
+ }
26
+ /** Smash plaintext path + ciphertext path; prefers `env.<name>.bin`, falls back to legacy `.env.<name>.bin`. */
27
+ export function resolveTrailzEnvPaths(cwd, envName) {
28
+ const newBase = trailzEnvBasePath(cwd, envName);
29
+ const newBin = `${newBase}.bin`;
30
+ if (existsSync(newBin)) {
31
+ return { basePath: newBase, bundlePath: newBin };
32
+ }
33
+ const legacyBase = legacyTrailzEnvBasePath(cwd, envName);
34
+ const legacyBin = `${legacyBase}.bin`;
35
+ if (existsSync(legacyBin)) {
36
+ return { basePath: legacyBase, bundlePath: legacyBin };
37
+ }
38
+ return null;
39
+ }
40
+ /** Names with a trailz ciphertext bundle in `cwd/.trailz/env/` (sorted). */
41
+ export function listTrailzEnvNames(cwd = process.cwd()) {
42
+ const envDir = join(cwd, ".trailz", "env");
43
+ if (!existsSync(envDir)) {
44
+ return [];
45
+ }
46
+ const names = new Set();
47
+ for (const file of readdirSync(envDir)) {
48
+ const current = TRAILZ_ENV_BUNDLE_RE.exec(file);
49
+ if (current) {
50
+ names.add(current[1]);
51
+ continue;
52
+ }
53
+ const legacy = LEGACY_TRAILZ_ENV_BUNDLE_RE.exec(file);
54
+ if (legacy) {
55
+ names.add(legacy[1]);
56
+ }
57
+ }
58
+ return [...names].sort();
59
+ }
13
60
  /** Device-manager bundle name paired with a site env (e.g. test1 → test1-dm). */
14
61
  export function siteDmEnvName(siteEnvName) {
15
62
  return `${siteEnvName}-dm`;
@@ -20,16 +67,7 @@ export function appDmEnvPath(cwd) {
20
67
  export function dotEnvPathFor(cwd) {
21
68
  return join(cwd, ".env");
22
69
  }
23
- /** Header prepended when decrypting trailz env bundles to `.env`. */
24
- export function formatEnvFileHeader(envName) {
25
- return [
26
- `# BLT environment: ${envName}`,
27
- `# from .trailz/env/.env.${envName}.bin`,
28
- `${BLT_ENV_NAME_KEY}=${envName}`,
29
- "",
30
- ].join("\n");
31
- }
32
- /** Parse `BLT_ENV_NAME` or `# from .trailz/env/.env.<name>.bin` from a `.env` body. */
70
+ /** Parse `BLT_ENV_NAME` or `# from .trailz/env/env.<name>.bin` from a `.env` body. */
33
71
  export function parseEnvNameFromDotEnv(content) {
34
72
  for (const rawLine of content.split("\n")) {
35
73
  const line = rawLine.trim();
@@ -40,32 +78,57 @@ export function parseEnvNameFromDotEnv(content) {
40
78
  return value.length > 0 ? value : null;
41
79
  }
42
80
  }
43
- const commentMatch = ENV_FROM_COMMENT_RE.exec(content);
81
+ const commentMatch = ENV_FROM_COMMENT_RE.exec(content) ?? LEGACY_ENV_FROM_COMMENT_RE.exec(content);
44
82
  return commentMatch?.[1] ?? null;
45
83
  }
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("=");
84
+ /** Parse assignment lines from `.env` text (skips comments and `BLT_ENV_NAME`). */
85
+ export function parseDotEnvAssignments(content) {
86
+ const parsed = dotenv.parse(content);
87
+ delete parsed[BLT_ENV_NAME_KEY];
88
+ return parsed;
89
+ }
90
+ /** Expand `$VAR` / `${VAR}` references within a parsed env map. */
91
+ export function expandDotEnvAssignments(parsed) {
92
+ const expanded = { ...parsed };
93
+ dotenvExpand.expand({ parsed: expanded, processEnv: {} });
94
+ return expanded;
95
+ }
96
+ /**
97
+ * Expand variable references in `.env` body text, preserving comments and line order.
98
+ * Used by `blt env get` so the written `.env` is runnable without runtime expansion.
99
+ */
100
+ export function expandDotEnvBody(content) {
101
+ const expanded = expandDotEnvAssignments(parseDotEnvAssignments(content));
102
+ return content
103
+ .split("\n")
104
+ .map((rawLine) => {
105
+ const trimmed = rawLine.trim();
106
+ if (!trimmed || trimmed.startsWith("#"))
107
+ return rawLine;
108
+ if (trimmed.startsWith(`${BLT_ENV_NAME_KEY}=`))
109
+ return rawLine;
110
+ const eq = rawLine.indexOf("=");
55
111
  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;
112
+ return rawLine;
113
+ const key = rawLine.slice(0, eq).trim();
114
+ if (!(key in expanded))
115
+ return rawLine;
116
+ return `${rawLine.slice(0, eq + 1)}${expanded[key]}`;
117
+ })
118
+ .join("\n");
119
+ }
120
+ export function parseDotEnvContent(content, baseEnv = process.env, expand = true) {
121
+ const parsed = parseDotEnvAssignments(content);
122
+ const resolved = expand ? expandDotEnvAssignments(parsed) : parsed;
123
+ return { ...baseEnv, ...resolved };
62
124
  }
63
125
  /**
64
126
  * Fail fast when the requested env is not available in `cwd`.
65
127
  * Accepts a loaded, tagged `.env` or a trailz ciphertext bundle (+ SMASH_KEY).
66
128
  */
67
129
  export function ensureAppEnv(opts) {
68
- const bundlePath = trailzEnvBundlePath(opts.cwd, opts.envName);
130
+ const resolved = resolveTrailzEnvPaths(opts.cwd, opts.envName);
131
+ const bundlePath = resolved?.bundlePath ?? trailzEnvBundlePath(opts.cwd, opts.envName);
69
132
  const dotEnvPath = dotEnvPathFor(opts.cwd);
70
133
  if (!opts.trailzOnly && existsSync(dotEnvPath)) {
71
134
  const content = readFileSync(dotEnvPath, "utf8");
@@ -88,7 +151,7 @@ export function ensureAppEnv(opts) {
88
151
  opts.logger?.info(`Local .env exists in ${opts.cwd} but is not tagged with ${BLT_ENV_NAME_KEY}; checking trailz bundle`);
89
152
  }
90
153
  }
91
- if (!existsSync(bundlePath)) {
154
+ if (!resolved) {
92
155
  throw new Error(`Environment "${opts.envName}" is not available in ${opts.cwd}.\n` +
93
156
  ` Expected tagged .env (${BLT_ENV_NAME_KEY}=${opts.envName}) or ciphertext at:\n` +
94
157
  ` ${bundlePath}\n` +
@@ -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 +1 @@
1
- {"version":3,"file":"pos.d.ts","sourceRoot":"","sources":["../../../src/commands/app/pos.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAK5C,MAAM,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACZ,CAAC;AAQF,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmF3F"}
1
+ {"version":3,"file":"pos.d.ts","sourceRoot":"","sources":["../../../src/commands/app/pos.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAU5C,MAAM,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACZ,CAAC;AAgBF,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoF3F"}
@@ -1,20 +1,27 @@
1
1
  import { existsSync, rmSync } from "node:fs";
2
- import { join } from "node:path";
2
+ import { join, relative } from "node:path";
3
3
  import { findWorkspaceRoot, resolveDeploySiteDir } from "./paths";
4
- import { appDmEnvPath, ensureAppEnv, siteDmEnvName, trailzEnvBundlePath } from "./env-check";
4
+ import { appDmEnvPath, ensureAppEnv, resolveTrailzEnvPaths, siteDmEnvName, } from "./env-check";
5
5
  import { runCommand } from "./shell";
6
6
  function removeIfExists(path) {
7
7
  if (existsSync(path)) {
8
8
  rmSync(path, { recursive: true, force: true });
9
9
  }
10
10
  }
11
+ function trailzSmashRelPath(cwd, envName) {
12
+ const resolved = resolveTrailzEnvPaths(cwd, envName);
13
+ if (resolved) {
14
+ return relative(cwd, resolved.basePath);
15
+ }
16
+ return join(".trailz", "env", `env.${envName}`);
17
+ }
11
18
  export async function deployPosApp(opts, logger) {
12
19
  const workspaceRoot = findWorkspaceRoot();
13
20
  const siteDir = resolveDeploySiteDir(opts.target, workspaceRoot);
14
21
  const envPlain = join(siteDir, ".env");
15
22
  const appZip = join(siteDir, "app.zip");
16
- const siteEnvRel = `.trailz/env/.env.${opts.env}`;
17
23
  ensureAppEnv({ envName: opts.env, cwd: siteDir, logger });
24
+ const siteEnvRel = trailzSmashRelPath(siteDir, opts.env);
18
25
  logger.info(`Deploying POS branch "${opts.branch}" with env "${opts.env}" to "${opts.target}"`);
19
26
  logger.info(`Site directory: ${siteDir}`);
20
27
  runCommand("bash", ["-lc", `smash -n ../../../.trailz/keys | grep GITHUB_TOKEN > .env`], logger, {
@@ -43,17 +50,17 @@ export async function deployPosApp(opts, logger) {
43
50
  "/home/blt/buildcore.sh",
44
51
  ], logger, { cwd: siteDir });
45
52
  const dmEnvName = siteDmEnvName(opts.env);
46
- const dmBundlePath = trailzEnvBundlePath(siteDir, dmEnvName);
53
+ const dmResolved = resolveTrailzEnvPaths(siteDir, dmEnvName);
47
54
  const dmEnvOut = appDmEnvPath(siteDir);
48
- const dmSiteEnvRel = `.trailz/env/.env.${dmEnvName}`;
49
- if (existsSync(dmBundlePath)) {
50
- logger.info(`Writing gateway env from .trailz/env/.env.${dmEnvName}.bin → app/.dm.env`);
55
+ if (dmResolved) {
56
+ const dmSiteEnvRel = relative(siteDir, dmResolved.basePath);
57
+ logger.info(`Writing gateway env from ${dmResolved.bundlePath} → app/.dm.env`);
51
58
  runCommand("bash", ["-lc", `smash -n ${dmSiteEnvRel} > app/.dm.env`], logger, {
52
59
  cwd: siteDir,
53
60
  });
54
61
  }
55
62
  else {
56
- logger.info(`No DM env bundle at ${dmBundlePath}; skipping app/.dm.env`);
63
+ logger.info(`No DM env bundle for "${dmEnvName}" in ${siteDir}/.trailz/env; skipping app/.dm.env`);
57
64
  if (existsSync(dmEnvOut)) {
58
65
  rmSync(dmEnvOut, { force: true });
59
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pos.js","sourceRoot":"","sources":["../../../src/commands/app/pos.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pos.js","sourceRoot":"","sources":["../../../src/commands/app/pos.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ Usage:
10
10
 
11
11
  Defaults: --out <cwd>/snapshots, --format toon
12
12
 
13
- Env credentials come from ./.trailz/env/.env.<name>.bin in the current directory (not repo-root .env).
13
+ Env credentials come from ./.trailz/env/env.<name>.bin in the current directory (not repo-root .env).
14
14
  `;
15
15
  const appHelp = `
16
16
  Developer app deployment and test data workflows
@@ -1,7 +1,12 @@
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
- * Decrypt `.trailz/env/.env.<name>.bin` with smash (`-n`) and write plaintext to `.env`.
4
- * Invokes smash with path `.trailz/env/.env.<name>` (no `.bin`) so smash reads `${path}.bin`.
7
+ * Decrypt `.trailz/env/env.<name>.bin` with smash (`-n`) and write plaintext to `.env`.
8
+ * Invokes smash with path `.trailz/env/env.<name>` (no `.bin`) so smash reads `${path}.bin`.
9
+ * Legacy `.trailz/env/.env.<name>.bin` bundles are still accepted.
5
10
  */
6
- export declare function envGet(name: string, logger: Logger): Promise<void>;
11
+ export declare function envGet(name: string, logger: Logger, opts?: EnvGetOptions): Promise<void>;
7
12
  //# 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;;;;GAIG;AACH,wBAAsB,MAAM,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,aAAkB,GACtB,OAAO,CAAC,IAAI,CAAC,CA2Cf"}
@@ -1,11 +1,11 @@
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";
4
- /** Single path segment for `.env.<name>` under `.trailz/env/`. */
3
+ import { BLT_ENV_NAME_KEY, expandDotEnvBody, resolveTrailzEnvPaths, trailzEnvBundlePath } from "../app/env-check";
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
  /**
7
- * `@codemarc/smashdata` `smash` expects the **plaintext path** `tf` (e.g. `.env.laf`).
8
- * Ciphertext must live at `${tf}.bin`. If you pass `tf` = `.env.laf.bin`, that file
7
+ * `@codemarc/smashdata` `smash` expects the **plaintext path** `tf` (e.g. `env.laf`).
8
+ * Ciphertext must live at `${tf}.bin`. If you pass `tf` = `env.laf.bin`, that file
9
9
  * exists as `tf`, so smash treats it as plaintext and **re-encrypts** — output is garbage.
10
10
  */
11
11
  function resolveSmashCommand(cwd) {
@@ -20,24 +20,25 @@ function resolveSmashCommand(cwd) {
20
20
  return ["bunx", "@codemarc/smashdata"];
21
21
  }
22
22
  /**
23
- * Decrypt `.trailz/env/.env.<name>.bin` with smash (`-n`) and write plaintext to `.env`.
24
- * Invokes smash with path `.trailz/env/.env.<name>` (no `.bin`) so smash reads `${path}.bin`.
23
+ * Decrypt `.trailz/env/env.<name>.bin` with smash (`-n`) and write plaintext to `.env`.
24
+ * Invokes smash with path `.trailz/env/env.<name>` (no `.bin`) so smash reads `${path}.bin`.
25
+ * Legacy `.trailz/env/.env.<name>.bin` bundles are still accepted.
25
26
  */
26
- export async function envGet(name, logger) {
27
+ export async function envGet(name, logger, opts = {}) {
28
+ const expand = opts.expand ?? true;
27
29
  if (!NAME_RE.test(name)) {
28
30
  logger.error("Invalid environment name: use one segment (letters, numbers, . _ -).");
29
31
  process.exit(1);
30
32
  }
31
33
  const cwd = process.cwd();
32
- const dir = join(cwd, ".trailz", "env");
33
- /** Plaintext path smash expects; ciphertext is `${basePath}.bin`. */
34
- const basePath = join(dir, `.env.${name}`);
35
- const binPath = `${basePath}.bin`;
36
- if (!existsSync(binPath)) {
34
+ const resolved = resolveTrailzEnvPaths(cwd, name);
35
+ const binPath = resolved?.bundlePath ?? trailzEnvBundlePath(cwd, name);
36
+ if (!resolved) {
37
37
  logger.error(`Encrypted env not found (need ciphertext at):\n ${binPath}\n` +
38
- `Smash stores secrets in .env.<name>.bin; the argument to smash is .env.<name> without .bin.`);
38
+ `Smash stores secrets in env.<name>.bin; the argument to smash is env.<name> without .bin.`);
39
39
  process.exit(1);
40
40
  }
41
+ const basePath = resolved.basePath;
41
42
  const smashCmd = resolveSmashCommand(cwd);
42
43
  const proc = Bun.spawnSync({
43
44
  cmd: [...smashCmd, "-n", basePath],
@@ -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
- await Bun.write(outPath, `${formatEnvFileHeader(name)}${body}\n`);
55
- logger.info(`Wrote ${outPath} (${BLT_ENV_NAME_KEY}=${name})`);
54
+ const decrypted = proc.stdout.toString().replace(/^\uFEFF/, "").trimStart();
55
+ const body = expand ? expandDotEnvBody(decrypted) : decrypted;
56
+ await Bun.write(outPath, `${body}\n`);
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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"}
@@ -0,0 +1,8 @@
1
+ import type { Logger } from "@caporal/core";
2
+ export type EnvListOptions = {
3
+ json?: boolean;
4
+ cwd?: string;
5
+ };
6
+ /** List trailz env bundle names available in `cwd/.trailz/env/`. */
7
+ export declare function envList(logger: Logger, opts?: EnvListOptions): void;
8
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/env/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAG5C,MAAM,MAAM,cAAc,GAAG;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,oEAAoE;AACpE,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,IAAI,CAoBvE"}
@@ -0,0 +1,21 @@
1
+ import { listTrailzEnvNames } from "../app/env-check";
2
+ /** List trailz env bundle names available in `cwd/.trailz/env/`. */
3
+ export function envList(logger, opts = {}) {
4
+ const cwd = opts.cwd ?? process.cwd();
5
+ const names = listTrailzEnvNames(cwd);
6
+ if (opts.json) {
7
+ console.log(JSON.stringify(names, null, 2));
8
+ return;
9
+ }
10
+ if (names.length === 0) {
11
+ logger.info(`No environment bundles in ${cwd}/.trailz/env/`);
12
+ logger.info("Usage: blt env get <name>");
13
+ return;
14
+ }
15
+ logger.info(`Available environments (${cwd}/.trailz/env):`);
16
+ for (const name of names) {
17
+ logger.info(` ${name}`);
18
+ }
19
+ logger.info("\nUsage: blt env get <name>");
20
+ }
21
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/env/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAOtD,oEAAoE;AACpE,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,OAAuB,EAAE;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO;IACR,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,6BAA6B,GAAG,eAAe,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO;IACR,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,2BAA2B,GAAG,gBAAgB,CAAC,CAAC;IAC5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AAC5C,CAAC"}
@@ -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;AAI5E,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAO,EAAE,OAAO,QAyDlD"}