@codemarc/blt 1.8.2 → 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 +3 -2
- package/dist/commands/app/env-check.d.ts +10 -1
- package/dist/commands/app/env-check.d.ts.map +1 -1
- package/dist/commands/app/env-check.js +41 -15
- package/dist/commands/app/env-check.js.map +1 -1
- package/dist/commands/env/get.d.ts +5 -1
- package/dist/commands/env/get.d.ts.map +1 -1
- package/dist/commands/env/get.js +6 -4
- package/dist/commands/env/get.js.map +1 -1
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +6 -3
- package/dist/commands/env.js.map +1 -1
- package/package.json +3 -2
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
|
-
|
|
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;
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
57
|
-
const key =
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
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;
|
|
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"}
|
package/dist/commands/env/get.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import {
|
|
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
|
|
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,
|
|
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,
|
|
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"}
|
package/dist/commands/env.js
CHANGED
|
@@ -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 (
|
|
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
|
-
.
|
|
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);
|
package/dist/commands/env.js.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codemarc/blt",
|
|
3
|
-
"version": "1.8.
|
|
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": "
|
|
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",
|