@codemarc/blt 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +133 -7
- package/dist/blt +28 -0
- package/dist/blt.d.ts +3 -0
- package/dist/blt.d.ts.map +1 -0
- package/dist/blt.js.map +1 -0
- package/dist/commands/bucket/download.d.ts +7 -0
- package/dist/commands/bucket/download.d.ts.map +1 -0
- package/dist/commands/bucket/download.js +28 -0
- package/dist/commands/bucket/download.js.map +1 -0
- package/dist/commands/bucket/list.d.ts +9 -0
- package/dist/commands/bucket/list.d.ts.map +1 -0
- package/dist/commands/bucket/list.js +69 -0
- package/dist/commands/bucket/list.js.map +1 -0
- package/dist/commands/bucket/names.d.ts +5 -0
- package/dist/commands/bucket/names.d.ts.map +1 -0
- package/dist/commands/bucket/names.js +53 -0
- package/dist/commands/bucket/names.js.map +1 -0
- package/dist/commands/bucket/upload-folder.d.ts +10 -0
- package/dist/commands/bucket/upload-folder.d.ts.map +1 -0
- package/dist/commands/bucket/upload-folder.js +84 -0
- package/dist/commands/bucket/upload-folder.js.map +1 -0
- package/dist/commands/bucket/upload.d.ts +9 -0
- package/dist/commands/bucket/upload.d.ts.map +1 -0
- package/dist/commands/bucket/upload.js +32 -0
- package/dist/commands/bucket/upload.js.map +1 -0
- package/dist/commands/bucket/url.d.ts +9 -0
- package/dist/commands/bucket/url.d.ts.map +1 -0
- package/dist/commands/bucket/url.js +32 -0
- package/dist/commands/bucket/url.js.map +1 -0
- package/dist/commands/bucket/utils.d.ts +3 -0
- package/dist/commands/bucket/utils.d.ts.map +1 -0
- package/dist/commands/bucket/utils.js +28 -0
- package/dist/commands/bucket/utils.js.map +1 -0
- package/dist/commands/bucket.d.ts +3 -0
- package/dist/commands/bucket.d.ts.map +1 -1
- package/dist/commands/bucket.js +53 -325
- package/dist/commands/bucket.js.map +1 -1
- package/dist/commands/check.js +7 -13
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/cleanup.js +12 -48
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/data.js +37 -43
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/env.js +3 -6
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/image/color.js +12 -52
- package/dist/commands/image/color.js.map +1 -1
- package/dist/commands/image/convert.js +28 -68
- package/dist/commands/image/convert.js.map +1 -1
- package/dist/commands/image/enhance.js +12 -52
- package/dist/commands/image/enhance.js.map +1 -1
- package/dist/commands/image/sharpen.js +24 -64
- package/dist/commands/image/sharpen.js.map +1 -1
- package/dist/commands/image.js +10 -13
- package/dist/commands/image.js.map +1 -1
- package/dist/commands/repo.js +3 -9
- package/dist/commands/repo.js.map +1 -1
- package/dist/commands/version/sql.d.ts +6 -0
- package/dist/commands/version/sql.d.ts.map +1 -0
- package/dist/commands/version/sql.js +35 -0
- package/dist/commands/version/sql.js.map +1 -0
- package/dist/commands/version/string.d.ts +13 -0
- package/dist/commands/version/string.d.ts.map +1 -0
- package/dist/commands/version/string.js +52 -0
- package/dist/commands/version/string.js.map +1 -0
- package/dist/commands/version/update-version.d.ts +3 -0
- package/dist/commands/version/update-version.d.ts.map +1 -0
- package/dist/commands/version/update-version.js +97 -0
- package/dist/commands/version/update-version.js.map +1 -0
- package/dist/commands/version/update.d.ts +8 -0
- package/dist/commands/version/update.d.ts.map +1 -0
- package/dist/commands/version/update.js +195 -0
- package/dist/commands/version/update.js.map +1 -0
- package/dist/commands/version.d.ts +6 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +66 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/config/config.js +11 -15
- package/dist/config/config.js.map +1 -1
- package/dist/lib/constants.js +4 -8
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/data-generator.js +27 -31
- package/dist/lib/data-generator.js.map +1 -1
- package/dist/lib/database-runner.js +17 -25
- package/dist/lib/database-runner.js.map +1 -1
- package/dist/lib/instance-discovery.js +14 -19
- package/dist/lib/instance-discovery.js.map +1 -1
- package/dist/lib/schema-discovery.js +18 -24
- package/dist/lib/schema-discovery.js.map +1 -1
- package/dist/lib/sql-builder.js +22 -29
- package/dist/lib/sql-builder.js.map +1 -1
- package/dist/lib/version-types.d.ts +77 -0
- package/dist/lib/version-types.d.ts.map +1 -0
- package/dist/lib/version-types.js +8 -0
- package/dist/lib/version-types.js.map +1 -0
- package/dist/lib/yaml-converter.js +17 -60
- package/dist/lib/yaml-converter.js.map +1 -1
- package/dist/utils/supabase.js +5 -11
- package/dist/utils/supabase.js.map +1 -1
- package/package.json +13 -8
package/dist/commands/repo.js
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.default = repoCommand;
|
|
7
|
-
const debug_1 = __importDefault(require("debug"));
|
|
8
|
-
const log = (0, debug_1.default)("blt:repo");
|
|
1
|
+
import debug from "debug";
|
|
2
|
+
const log = debug("blt:repo");
|
|
9
3
|
const REPOSITORIES = [
|
|
10
4
|
{
|
|
11
5
|
name: "data",
|
|
@@ -23,7 +17,7 @@ const REPOSITORIES = [
|
|
|
23
17
|
/**
|
|
24
18
|
* Register repo commands with the CLI program
|
|
25
19
|
*/
|
|
26
|
-
function repoCommand(program) {
|
|
20
|
+
export default function repoCommand(program) {
|
|
27
21
|
// Main repo command - shows help for subcommands
|
|
28
22
|
program
|
|
29
23
|
.command("repo", "Manage repository clones and working projects")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../../src/commands/repo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../../src/commands/repo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;AAE9B,MAAM,YAAY,GAAG;IACnB;QACE,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,kDAAkD;KACxD;IACD;QACE,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,iDAAiD;KACvD;IACD;QACE,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,uDAAuD;KAC7D;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,OAAgB;IAClD,iDAAiD;IACjD,OAAO;SACJ,OAAO,CAAC,MAAM,EAAE,+CAA+C,CAAC;SAChE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;QAClF,MAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAC7E,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEL,2BAA2B;IAC3B,OAAO;SACJ,OAAO,CAAC,WAAW,EAAE,gDAAgD,CAAC;SACtE,MAAM,CAAC,uBAAuB,EAAE,8BAA8B,EAAE;QAC/D,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;KAC7B,CAAC;SACD,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACpC,IAAI,CAAC;YACH,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAC1C,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,qBAAqB;IACrB,OAAO;SACJ,OAAO,CAAC,YAAY,EAAE,4BAA4B,CAAC;SACnD,QAAQ,CAAC,QAAQ,EAAE,gCAAgC,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAc,CAAC;YACrC,GAAG,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;YACvC,2CAA2C;YAC3C,kEAAkE;YAClE,MAAM,CAAC,IAAI,CAAC,4BAA4B,QAAQ,qBAAqB,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../../src/commands/version/sql.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAiCvD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Generate SQL to upsert version.json to settings table
|
|
5
|
+
*/
|
|
6
|
+
export function generateVersionSQL(logger) {
|
|
7
|
+
try {
|
|
8
|
+
const rootDir = process.cwd();
|
|
9
|
+
const versionJsonPath = join(rootDir, "version.json");
|
|
10
|
+
if (!existsSync(versionJsonPath)) {
|
|
11
|
+
logger.error("version.json not found. Run 'blt version update' first.");
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
const versionInfo = JSON.parse(readFileSync(versionJsonPath, "utf-8"));
|
|
15
|
+
// Convert version.json to JSON string for SQL
|
|
16
|
+
const propsJson = JSON.stringify(versionInfo);
|
|
17
|
+
// Escape single quotes in JSON for SQL
|
|
18
|
+
const escapedPropsJson = propsJson.replace(/'/g, "''");
|
|
19
|
+
// Generate SQL upsert statement
|
|
20
|
+
// Match format used in other settings INSERT statements (no casts in VALUES)
|
|
21
|
+
const sql = `INSERT INTO settings (id, name, kind, props) VALUES
|
|
22
|
+
('00000000-0000-0000-0000-ffffffffffff', 'version', 'meta', '${escapedPropsJson}'::jsonb)
|
|
23
|
+
ON CONFLICT (id) DO UPDATE SET
|
|
24
|
+
name = COALESCE(EXCLUDED.name, settings.name),
|
|
25
|
+
kind = COALESCE(EXCLUDED.kind, settings.kind),
|
|
26
|
+
props = COALESCE(EXCLUDED.props, settings.props);`;
|
|
27
|
+
console.log(sql);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
31
|
+
logger.error(`Failed to generate SQL: ${message}`);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../../src/commands/version/sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAEtD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QAEvE,8CAA8C;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAE9C,uCAAuC;QACvC,MAAM,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAEvD,gCAAgC;QAChC,6EAA6E;QAC7E,MAAM,GAAG,GAAG;+DAC+C,gBAAgB;;;;sDAIzB,CAAC;QAEnD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Logger } from "@caporal/core";
|
|
2
|
+
interface StringOptions {
|
|
3
|
+
short?: boolean;
|
|
4
|
+
full?: boolean;
|
|
5
|
+
date?: boolean;
|
|
6
|
+
only?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Display version as a formatted string
|
|
10
|
+
*/
|
|
11
|
+
export declare function displayVersionString(options: StringOptions, logger: Logger): void;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=string.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../../src/commands/version/string.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAa5C,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA+CjF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { format as formatBuildNumber } from 'build-number-generator';
|
|
4
|
+
/**
|
|
5
|
+
* Display version as a formatted string
|
|
6
|
+
*/
|
|
7
|
+
export function displayVersionString(options, logger) {
|
|
8
|
+
try {
|
|
9
|
+
const rootDir = process.cwd();
|
|
10
|
+
const versionJsonPath = join(rootDir, "version.json");
|
|
11
|
+
if (!existsSync(versionJsonPath)) {
|
|
12
|
+
logger.error("version.json not found. Run 'blt version update' first.");
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
const versionInfo = JSON.parse(readFileSync(versionJsonPath, "utf-8"));
|
|
16
|
+
// Determine format: default to short, --full overrides to full
|
|
17
|
+
const useFull = options.full === true;
|
|
18
|
+
const useShort = options.short === true;
|
|
19
|
+
const useDate = options.date === true;
|
|
20
|
+
const useOnly = options.only === true;
|
|
21
|
+
let versionString;
|
|
22
|
+
let buildnumString;
|
|
23
|
+
if (useDate) {
|
|
24
|
+
buildnumString = formatBuildNumber(versionInfo.buildnum);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
buildnumString = versionInfo.buildnum;
|
|
28
|
+
}
|
|
29
|
+
if (useFull) {
|
|
30
|
+
// Full format: component vversion.buildnum - branch hash(full-commit)
|
|
31
|
+
versionString = `${versionInfo.component} v${versionInfo.version} ${buildnumString} - ${versionInfo.build.branch} hash(${versionInfo.build.commit})`;
|
|
32
|
+
}
|
|
33
|
+
else if (useShort) {
|
|
34
|
+
versionString = `${versionInfo.component} v${versionInfo.version} ${buildnumString}`;
|
|
35
|
+
}
|
|
36
|
+
else if (useOnly) {
|
|
37
|
+
versionString = buildnumString;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// defaultShort format: component vversion buildnum - branch (short-commit)
|
|
41
|
+
const shortCommit = versionInfo.build.commit?.substring(0, 7) ?? "";
|
|
42
|
+
versionString = `${versionInfo.component} v${versionInfo.version} ${buildnumString} - ${versionInfo.build.branch} (${shortCommit})`;
|
|
43
|
+
}
|
|
44
|
+
console.log(versionString);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
48
|
+
logger.error(`Failed to read version.json: ${message}`);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../../src/commands/version/string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAqBrE;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAsB,EAAE,MAAc;IACzE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAEtD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QAEpF,+DAA+D;QAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;QACtC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;QAEtC,IAAI,aAAqB,CAAC;QAC1B,IAAI,cAAsB,CAAC;QAE3B,IAAI,OAAO,EAAE,CAAC;YACZ,cAAc,GAAG,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,cAAc,GAAG,WAAW,CAAC,QAAQ,CAAC;QACxC,CAAC;QAGD,IAAI,OAAO,EAAE,CAAC;YACZ,sEAAsE;YACtE,aAAa,GAAG,GAAG,WAAW,CAAC,SAAS,KAAK,WAAW,CAAC,OAAO,IAAI,cAAc,MAAM,WAAW,CAAC,KAAK,CAAC,MAAM,SAAS,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QACvJ,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,aAAa,GAAG,GAAG,WAAW,CAAC,SAAS,KAAK,WAAW,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;QACvF,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACnB,aAAa,GAAG,cAAc,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,2EAA2E;YAC3E,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACpE,aAAa,GAAG,GAAG,WAAW,CAAC,SAAS,KAAK,WAAW,CAAC,OAAO,IAAI,cAAc,MAAM,WAAW,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,GAAG,CAAC;QACtI,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-version.d.ts","sourceRoot":"","sources":["../../../src/commands/version/update-version.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
import { readFileSync, writeFileSync } from "fs";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { execSync } from "child_process";
|
|
5
|
+
function getGitCommit() {
|
|
6
|
+
try {
|
|
7
|
+
return execSync("git rev-parse HEAD", { encoding: "utf-8" }).trim();
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return "";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function getGitBranch() {
|
|
14
|
+
try {
|
|
15
|
+
return execSync("git rev-parse --abbrev-ref HEAD", { encoding: "utf-8" }).trim();
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return "";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function getBuildTime() {
|
|
22
|
+
return new Date().toISOString();
|
|
23
|
+
}
|
|
24
|
+
function getRuntimeVersion() {
|
|
25
|
+
try {
|
|
26
|
+
if (typeof Bun !== "undefined") {
|
|
27
|
+
return Bun.version;
|
|
28
|
+
}
|
|
29
|
+
// Fallback to node version
|
|
30
|
+
return process.versions.node ? `v${process.versions.node}` : "";
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return "";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function getPackageManagerVersion() {
|
|
37
|
+
try {
|
|
38
|
+
if (typeof Bun !== "undefined") {
|
|
39
|
+
return Bun.version;
|
|
40
|
+
}
|
|
41
|
+
// Try npm
|
|
42
|
+
const npmVersion = execSync("npm --version", { encoding: "utf-8" }).trim();
|
|
43
|
+
if (npmVersion)
|
|
44
|
+
return npmVersion;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Ignore errors
|
|
48
|
+
}
|
|
49
|
+
return "";
|
|
50
|
+
}
|
|
51
|
+
function getPackageManager() {
|
|
52
|
+
if (typeof Bun !== "undefined") {
|
|
53
|
+
return "bun";
|
|
54
|
+
}
|
|
55
|
+
// Check for packageManager field in package.json
|
|
56
|
+
const packageJson = JSON.parse(readFileSync("package.json", "utf-8"));
|
|
57
|
+
if (packageJson.packageManager) {
|
|
58
|
+
return packageJson.packageManager.split("@")[0];
|
|
59
|
+
}
|
|
60
|
+
return "npm";
|
|
61
|
+
}
|
|
62
|
+
function getRuntimeType() {
|
|
63
|
+
if (typeof Bun !== "undefined") {
|
|
64
|
+
return "bun";
|
|
65
|
+
}
|
|
66
|
+
return "node";
|
|
67
|
+
}
|
|
68
|
+
function main() {
|
|
69
|
+
const rootDir = process.cwd();
|
|
70
|
+
const versionJsonPath = join(rootDir, "version.json");
|
|
71
|
+
const packageJsonPath = join(rootDir, "package.json");
|
|
72
|
+
// Read current version.json
|
|
73
|
+
let versionInfo;
|
|
74
|
+
try {
|
|
75
|
+
versionInfo = JSON.parse(readFileSync(versionJsonPath, "utf-8"));
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
console.error("Failed to read version.json");
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
// Read package.json for version
|
|
82
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
83
|
+
// Update version info
|
|
84
|
+
versionInfo.version = packageJson.version;
|
|
85
|
+
versionInfo.runtime.type = getRuntimeType();
|
|
86
|
+
versionInfo.runtime.version = getRuntimeVersion();
|
|
87
|
+
versionInfo.build.commit = getGitCommit();
|
|
88
|
+
versionInfo.build.branch = getGitBranch();
|
|
89
|
+
versionInfo.build.time = getBuildTime();
|
|
90
|
+
versionInfo.metadata.packageManager = getPackageManager();
|
|
91
|
+
versionInfo.metadata.packageManagerVersion = getPackageManagerVersion();
|
|
92
|
+
// Write updated version.json
|
|
93
|
+
writeFileSync(versionJsonPath, JSON.stringify(versionInfo, null, 2) + "\n");
|
|
94
|
+
console.log("Updated version.json");
|
|
95
|
+
}
|
|
96
|
+
main();
|
|
97
|
+
//# sourceMappingURL=update-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-version.js","sourceRoot":"","sources":["../../../src/commands/version/update-version.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* Update the version.json file with the current build information
|
|
4
|
+
* @param rootDir - The root directory of the project
|
|
5
|
+
* @returns void
|
|
6
|
+
*/
|
|
7
|
+
export declare function updateVersion(rootDir?: string): void;
|
|
8
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/version/update.ts"],"names":[],"mappings":";AA8JA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,MAAsB,GAAG,IAAI,CAiDnE"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { execSync } from "node:child_process";
|
|
5
|
+
import { generate } from "build-number-generator";
|
|
6
|
+
function getGitCommit(rootDir) {
|
|
7
|
+
try {
|
|
8
|
+
return execSync("git rev-parse HEAD", { encoding: "utf-8", cwd: rootDir }).trim();
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return "";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function getGitBranch(rootDir) {
|
|
15
|
+
try {
|
|
16
|
+
return execSync("git rev-parse --abbrev-ref HEAD", { encoding: "utf-8", cwd: rootDir }).trim();
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return "";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function getBuildTime() {
|
|
23
|
+
return new Date().toISOString();
|
|
24
|
+
}
|
|
25
|
+
function getRuntimeVersion() {
|
|
26
|
+
try {
|
|
27
|
+
if (typeof Bun !== "undefined") {
|
|
28
|
+
return Bun.version;
|
|
29
|
+
}
|
|
30
|
+
// Fallback to node version
|
|
31
|
+
return process.versions.node ? `v${process.versions.node}` : "";
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return "";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function getPackageManagerVersion() {
|
|
38
|
+
try {
|
|
39
|
+
if (typeof Bun !== "undefined") {
|
|
40
|
+
return Bun.version;
|
|
41
|
+
}
|
|
42
|
+
// Try npm
|
|
43
|
+
const npmVersion = execSync("npm --version", { encoding: "utf-8" }).trim();
|
|
44
|
+
if (npmVersion)
|
|
45
|
+
return npmVersion;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Ignore errors
|
|
49
|
+
}
|
|
50
|
+
return "";
|
|
51
|
+
}
|
|
52
|
+
function getPackageManager(rootDir) {
|
|
53
|
+
if (typeof Bun !== "undefined") {
|
|
54
|
+
return "bun";
|
|
55
|
+
}
|
|
56
|
+
// Check for packageManager field in package.json
|
|
57
|
+
try {
|
|
58
|
+
const packageJsonPath = join(rootDir, "package.json");
|
|
59
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
60
|
+
if (packageJson.packageManager) {
|
|
61
|
+
return packageJson.packageManager.split("@")[0];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Ignore errors
|
|
66
|
+
}
|
|
67
|
+
return "npm";
|
|
68
|
+
}
|
|
69
|
+
function getRuntimeType() {
|
|
70
|
+
if (typeof Bun !== "undefined") {
|
|
71
|
+
return "bun";
|
|
72
|
+
}
|
|
73
|
+
return "node";
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Detect component name from package.json or directory
|
|
77
|
+
*/
|
|
78
|
+
function detectComponentName(packageJson, rootDir) {
|
|
79
|
+
// Try to extract component name from package.json name
|
|
80
|
+
if (packageJson.name) {
|
|
81
|
+
// Handle scoped packages like "@codemarc/blt" -> "cli"
|
|
82
|
+
const nameParts = packageJson.name.split("/");
|
|
83
|
+
const lastPart = nameParts[nameParts.length - 1];
|
|
84
|
+
// Map known package names to component names
|
|
85
|
+
if (lastPart === "blt" || lastPart === "blt-cli")
|
|
86
|
+
return "cli";
|
|
87
|
+
if (lastPart === "blt-core-pos")
|
|
88
|
+
return "pos";
|
|
89
|
+
if (lastPart === "blt-core-devops")
|
|
90
|
+
return "devops";
|
|
91
|
+
if (lastPart === "data")
|
|
92
|
+
return "data";
|
|
93
|
+
if (lastPart === "deploy")
|
|
94
|
+
return "deploy";
|
|
95
|
+
if (lastPart === "gateway")
|
|
96
|
+
return "gateway";
|
|
97
|
+
return lastPart;
|
|
98
|
+
}
|
|
99
|
+
// Fallback to directory name
|
|
100
|
+
const pathParts = rootDir.split("/");
|
|
101
|
+
const dirName = pathParts[pathParts.length - 1];
|
|
102
|
+
return dirName || "unknown";
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Generate build number
|
|
106
|
+
*/
|
|
107
|
+
function generateBuildNumber() {
|
|
108
|
+
try {
|
|
109
|
+
return generate();
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return "";
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Create a default version.json structure
|
|
117
|
+
*/
|
|
118
|
+
function createDefaultVersionInfo(packageJson, rootDir) {
|
|
119
|
+
return {
|
|
120
|
+
buildnum: generateBuildNumber(),
|
|
121
|
+
component: detectComponentName(packageJson, rootDir),
|
|
122
|
+
version: packageJson.version || "0.0.0",
|
|
123
|
+
runtime: {
|
|
124
|
+
type: getRuntimeType(),
|
|
125
|
+
version: getRuntimeVersion(),
|
|
126
|
+
},
|
|
127
|
+
build: {
|
|
128
|
+
commit: getGitCommit(rootDir),
|
|
129
|
+
branch: getGitBranch(rootDir),
|
|
130
|
+
time: getBuildTime(),
|
|
131
|
+
},
|
|
132
|
+
metadata: {
|
|
133
|
+
packageManager: getPackageManager(rootDir),
|
|
134
|
+
packageManagerVersion: getPackageManagerVersion(),
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Update the version.json file with the current build information
|
|
140
|
+
* @param rootDir - The root directory of the project
|
|
141
|
+
* @returns void
|
|
142
|
+
*/
|
|
143
|
+
export function updateVersion(rootDir = process.cwd()) {
|
|
144
|
+
const versionJsonPath = join(rootDir, "version.json");
|
|
145
|
+
const packageJsonPath = join(rootDir, "package.json");
|
|
146
|
+
// Read package.json for version
|
|
147
|
+
let packageJson;
|
|
148
|
+
try {
|
|
149
|
+
packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
throw new Error("Failed to read package.json");
|
|
153
|
+
}
|
|
154
|
+
// Read current version.json or create default
|
|
155
|
+
let versionInfo;
|
|
156
|
+
if (existsSync(versionJsonPath)) {
|
|
157
|
+
try {
|
|
158
|
+
versionInfo = JSON.parse(readFileSync(versionJsonPath, "utf-8"));
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// If file exists but is invalid, create default
|
|
162
|
+
versionInfo = createDefaultVersionInfo(packageJson, rootDir);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
// File doesn't exist, create default structure
|
|
167
|
+
versionInfo = createDefaultVersionInfo(packageJson, rootDir);
|
|
168
|
+
}
|
|
169
|
+
// Update version info
|
|
170
|
+
versionInfo.buildnum = generateBuildNumber();
|
|
171
|
+
versionInfo.version = packageJson.version || "0.0.0";
|
|
172
|
+
versionInfo.runtime.type = getRuntimeType();
|
|
173
|
+
versionInfo.runtime.version = getRuntimeVersion();
|
|
174
|
+
versionInfo.build.commit = getGitCommit(rootDir);
|
|
175
|
+
versionInfo.build.branch = getGitBranch(rootDir);
|
|
176
|
+
versionInfo.build.time = getBuildTime();
|
|
177
|
+
versionInfo.metadata.packageManager = getPackageManager(rootDir);
|
|
178
|
+
versionInfo.metadata.packageManagerVersion = getPackageManagerVersion();
|
|
179
|
+
// Write updated version.json with buildnum at the top
|
|
180
|
+
const orderedVersionInfo = {
|
|
181
|
+
buildnum: versionInfo.buildnum,
|
|
182
|
+
component: versionInfo.component,
|
|
183
|
+
version: versionInfo.version,
|
|
184
|
+
runtime: versionInfo.runtime,
|
|
185
|
+
build: versionInfo.build,
|
|
186
|
+
metadata: versionInfo.metadata,
|
|
187
|
+
};
|
|
188
|
+
writeFileSync(versionJsonPath, `${JSON.stringify(orderedVersionInfo, null, 2)}\n`);
|
|
189
|
+
console.log("Updated version.json");
|
|
190
|
+
}
|
|
191
|
+
// Allow running as a script
|
|
192
|
+
if (import.meta.main) {
|
|
193
|
+
updateVersion();
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/version/update.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAqBlD,SAAS,YAAY,CAAC,OAAe;IACnC,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,iCAAiC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC,OAAO,CAAC;QACrB,CAAC;QACD,2BAA2B;QAC3B,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB;IAC/B,IAAI,CAAC;QACH,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC,OAAO,CAAC;QACrB,CAAC;QACD,UAAU;QACV,MAAM,UAAU,GAAG,QAAQ,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3E,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,iDAAiD;IACjD,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QACvE,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;YAC/B,OAAO,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,WAAgD,EAAE,OAAe;IAC5F,uDAAuD;IACvD,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;QACrB,uDAAuD;QACvD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEjD,6CAA6C;QAC7C,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC/D,IAAI,QAAQ,KAAK,cAAc;YAAE,OAAO,KAAK,CAAC;QAC9C,IAAI,QAAQ,KAAK,iBAAiB;YAAE,OAAO,QAAQ,CAAC;QACpD,IAAI,QAAQ,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC;QACvC,IAAI,QAAQ,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC3C,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAE7C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,6BAA6B;IAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChD,OAAO,OAAO,IAAI,SAAS,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB;IAC1B,IAAI,CAAC;QACH,OAAO,QAAQ,EAAE,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,WAAgD,EAAE,OAAe;IACjG,OAAO;QACL,QAAQ,EAAE,mBAAmB,EAAE;QAC/B,SAAS,EAAE,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC;QACpD,OAAO,EAAE,WAAW,CAAC,OAAO,IAAI,OAAO;QACvC,OAAO,EAAE;YACP,IAAI,EAAE,cAAc,EAAE;YACtB,OAAO,EAAE,iBAAiB,EAAE;SAC7B;QACD,KAAK,EAAE;YACL,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC;YAC7B,IAAI,EAAE,YAAY,EAAE;SACrB;QACD,QAAQ,EAAE;YACR,cAAc,EAAE,iBAAiB,CAAC,OAAO,CAAC;YAC1C,qBAAqB,EAAE,wBAAwB,EAAE;SAClD;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB,OAAO,CAAC,GAAG,EAAE;IAC3D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAEtD,gCAAgC;IAChC,IAAI,WAAyE,CAAC;IAC9E,IAAI,CAAC;QACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,8CAA8C;IAC9C,IAAI,WAAwB,CAAC;IAC7B,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;YAChD,WAAW,GAAG,wBAAwB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+CAA+C;QAC/C,WAAW,GAAG,wBAAwB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,sBAAsB;IACtB,WAAW,CAAC,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IAC7C,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC;IACrD,WAAW,CAAC,OAAO,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;IAC5C,WAAW,CAAC,OAAO,CAAC,OAAO,GAAG,iBAAiB,EAAE,CAAC;IAClD,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACjD,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACjD,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,YAAY,EAAE,CAAC;IACxC,WAAW,CAAC,QAAQ,CAAC,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACjE,WAAW,CAAC,QAAQ,CAAC,qBAAqB,GAAG,wBAAwB,EAAE,CAAC;IAExE,sDAAsD;IACtD,MAAM,kBAAkB,GAAgB;QACtC,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;KAC/B,CAAC;IAEF,aAAa,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AACtC,CAAC;AAED,4BAA4B;AAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,aAAa,EAAE,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,eAAe,CAAC;AAKrD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,OAAO,EAAE,OAAO,QA+DtD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { updateVersion } from "./version/update";
|
|
2
|
+
import { displayVersionString } from "./version/string";
|
|
3
|
+
import { generateVersionSQL } from "./version/sql";
|
|
4
|
+
/**
|
|
5
|
+
* Register version commands with the CLI program
|
|
6
|
+
*/
|
|
7
|
+
export default function versionCommand(program) {
|
|
8
|
+
// Main version command - shows help for subcommands
|
|
9
|
+
const versionHelpText = `
|
|
10
|
+
version management utilities
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
blt version <operation>
|
|
14
|
+
|
|
15
|
+
Available operations:
|
|
16
|
+
update Update version.json with current build information
|
|
17
|
+
string Display version as a formatted string
|
|
18
|
+
sql Generate SQL to upsert version.json to settings table
|
|
19
|
+
|
|
20
|
+
Run 'blt version <operation> --help' for more information on a specific command.
|
|
21
|
+
`;
|
|
22
|
+
program
|
|
23
|
+
.command("version", "version management")
|
|
24
|
+
.help(versionHelpText)
|
|
25
|
+
.action(() => {
|
|
26
|
+
console.log(versionHelpText);
|
|
27
|
+
});
|
|
28
|
+
// Update version.json
|
|
29
|
+
program
|
|
30
|
+
.command("version update", "Update version.json with current build information")
|
|
31
|
+
.hide()
|
|
32
|
+
.action(async ({ logger }) => {
|
|
33
|
+
try {
|
|
34
|
+
// Use current working directory where the command is run
|
|
35
|
+
const rootDir = process.cwd();
|
|
36
|
+
logger.info("Updating version.json...");
|
|
37
|
+
// Call the update function directly
|
|
38
|
+
updateVersion(rootDir);
|
|
39
|
+
logger.info("Version information updated successfully");
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
43
|
+
logger.error(`Failed to update version.json: ${message}`);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
// Display version string
|
|
48
|
+
program
|
|
49
|
+
.command("version string", "Display version as a formatted string")
|
|
50
|
+
.hide()
|
|
51
|
+
.option("-d, --date", "Display buildnum as date", { default: false })
|
|
52
|
+
.option("-o, --only", "Display buildnum as date", { default: false })
|
|
53
|
+
.option("-s, --short", "Display short version (7-char commit hash)", { default: false })
|
|
54
|
+
.option("-f, --full", "Display full version (full commit hash)", { default: false })
|
|
55
|
+
.action(async ({ options, logger }) => {
|
|
56
|
+
displayVersionString(options, logger);
|
|
57
|
+
});
|
|
58
|
+
// Generate SQL to upsert version.json to settings table
|
|
59
|
+
program
|
|
60
|
+
.command("version sql", "Generate SQL to upsert version.json to settings table")
|
|
61
|
+
.hide()
|
|
62
|
+
.action(async ({ logger }) => {
|
|
63
|
+
generateVersionSQL(logger);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,OAAgB;IACtD,oDAAoD;IACpD,MAAM,eAAe,GAAG;;;;;;;;;;;;CAYxB,CAAC;IAED,OAAO;SACL,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC;SACxC,IAAI,CAAC,eAAe,CAAC;SACrB,MAAM,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEJ,sBAAsB;IACtB,OAAO;SACL,OAAO,CAAC,gBAAgB,EAAE,oDAAoD,CAAC;SAC/E,IAAI,EAAE;SACN,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAsB,EAAE,EAAE;QAChD,IAAI,CAAC;YACJ,yDAAyD;YACzD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAExC,oCAAoC;YACpC,aAAa,CAAC,OAAO,CAAC,CAAC;YAEvB,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACzD,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,kCAAkC,OAAO,EAAE,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;IAEJ,yBAAyB;IACzB,OAAO;SACL,OAAO,CAAC,gBAAgB,EAAE,uCAAuC,CAAC;SAClE,IAAI,EAAE;SACN,MAAM,CAAC,YAAY,EAAE,0BAA0B,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SACpE,MAAM,CAAC,YAAY,EAAE,0BAA0B,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SACpE,MAAM,CAAC,aAAa,EAAE,4CAA4C,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SACvF,MAAM,CAAC,YAAY,EAAE,yCAAyC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SACnF,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAoG,EAAE,EAAE;QACvI,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEJ,wDAAwD;IACxD,OAAO;SACL,OAAO,CAAC,aAAa,EAAE,uDAAuD,CAAC;SAC/E,IAAI,EAAE;SACN,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAsB,EAAE,EAAE;QAChD,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/config/config.js
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
exports.getConfig = getConfig;
|
|
5
|
-
const fs_1 = require("fs");
|
|
6
|
-
const path_1 = require("path");
|
|
7
|
-
const os_1 = require("os");
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
8
4
|
const DEFAULT_CONFIG = {
|
|
9
5
|
schemaBase: './schema',
|
|
10
6
|
distPath: './dist',
|
|
@@ -17,23 +13,23 @@ const DEFAULT_CONFIG = {
|
|
|
17
13
|
* 4. Environment variables (BLT_SCHEMA_BASE, BLT_DIST_PATH)
|
|
18
14
|
* 5. Default values
|
|
19
15
|
*/
|
|
20
|
-
function loadConfig() {
|
|
16
|
+
export function loadConfig() {
|
|
21
17
|
let config = { ...DEFAULT_CONFIG };
|
|
22
18
|
// Try loading from files
|
|
23
19
|
const configPaths = [
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
join(process.cwd(), 'blt.config.json'),
|
|
21
|
+
join(process.cwd(), '.bltrc'),
|
|
22
|
+
join(homedir(), '.blt', 'config.json'),
|
|
27
23
|
];
|
|
28
24
|
for (const configPath of configPaths) {
|
|
29
|
-
if (
|
|
25
|
+
if (existsSync(configPath)) {
|
|
30
26
|
try {
|
|
31
|
-
const fileConfig = JSON.parse(
|
|
27
|
+
const fileConfig = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
32
28
|
config = { ...config, ...fileConfig };
|
|
33
29
|
console.log(`Loaded config from: ${configPath}`);
|
|
34
30
|
break;
|
|
35
31
|
}
|
|
36
|
-
catch (
|
|
32
|
+
catch (_error) {
|
|
37
33
|
console.warn(`Failed to parse config file: ${configPath}`);
|
|
38
34
|
}
|
|
39
35
|
}
|
|
@@ -48,7 +44,7 @@ function loadConfig() {
|
|
|
48
44
|
return config;
|
|
49
45
|
}
|
|
50
46
|
let cachedConfig = null;
|
|
51
|
-
function getConfig() {
|
|
47
|
+
export function getConfig() {
|
|
52
48
|
if (!cachedConfig) {
|
|
53
49
|
cachedConfig = loadConfig();
|
|
54
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlC,MAAM,cAAc,GAAc;IAChC,UAAU,EAAE,UAAU;IACtB,QAAQ,EAAE,QAAQ;CACnB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;IAEnC,yBAAyB;IACzB,MAAM,WAAW,GAAG;QAClB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC;KACvC,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChE,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;gBACjD,MAAM;YACR,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAC9C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,IAAI,YAAY,GAAqB,IAAI,CAAC;AAE1C,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,UAAU,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}
|