@lordierclaw/bluenote 0.4.1
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/LICENSE +201 -0
- package/README.md +217 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +10 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.js +37 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/daemon.d.ts +2 -0
- package/dist/commands/daemon.js +163 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.js +113 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/help.d.ts +3 -0
- package/dist/commands/help.js +25 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/tui.d.ts +2 -0
- package/dist/commands/tui.js +63 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/commands/version.d.ts +2 -0
- package/dist/commands/version.js +17 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/commands/web.d.ts +2 -0
- package/dist/commands/web.js +63 -0
- package/dist/commands/web.js.map +1 -0
- package/dist/daemon/paths.d.ts +3 -0
- package/dist/daemon/paths.js +29 -0
- package/dist/daemon/paths.js.map +1 -0
- package/dist/daemon/router.d.ts +38 -0
- package/dist/daemon/router.js +107 -0
- package/dist/daemon/router.js.map +1 -0
- package/dist/daemon/server.d.ts +13 -0
- package/dist/daemon/server.js +78 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/daemon/token.d.ts +1 -0
- package/dist/daemon/token.js +11 -0
- package/dist/daemon/token.js.map +1 -0
- package/dist/types.d.ts +11 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/command-discovery.d.ts +31 -0
- package/dist/utils/command-discovery.js +162 -0
- package/dist/utils/command-discovery.js.map +1 -0
- package/dist/utils/daemon-state.d.ts +21 -0
- package/dist/utils/daemon-state.js +99 -0
- package/dist/utils/daemon-state.js.map +1 -0
- package/dist/utils/lazy-import.d.ts +1 -0
- package/dist/utils/lazy-import.js +10 -0
- package/dist/utils/lazy-import.js.map +1 -0
- package/dist/utils/package-info.d.ts +15 -0
- package/dist/utils/package-info.js +49 -0
- package/dist/utils/package-info.js.map +1 -0
- package/dist/utils/runtime-requirements.d.ts +8 -0
- package/dist/utils/runtime-requirements.js +26 -0
- package/dist/utils/runtime-requirements.js.map +1 -0
- package/dist/utils/write.d.ts +1 -0
- package/dist/utils/write.js +9 -0
- package/dist/utils/write.js.map +1 -0
- package/package.json +34 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createDaemonToken = createDaemonToken;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
function createDaemonToken() {
|
|
9
|
+
return crypto_1.default.randomBytes(32).toString("hex");
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/daemon/token.ts"],"names":[],"mappings":";;;;;AAEA,8CAEC;AAJD,oDAA2B;AAE3B,SAAgB,iBAAiB;IAC/B,OAAO,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC/C,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface CommandIo {
|
|
2
|
+
stdout?: NodeJS.WritableStream;
|
|
3
|
+
stderr?: NodeJS.WritableStream;
|
|
4
|
+
env?: NodeJS.ProcessEnv;
|
|
5
|
+
nodeVersion?: string;
|
|
6
|
+
platform?: NodeJS.Platform;
|
|
7
|
+
clientLoader?: (specifier: string) => Promise<unknown>;
|
|
8
|
+
spawn?: typeof import("child_process").spawn;
|
|
9
|
+
spawnSync?: typeof import("child_process").spawnSync;
|
|
10
|
+
}
|
|
11
|
+
export type CommandRunner = (args: string[], io?: CommandIo) => Promise<number> | number;
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type CommandDiscoveryOptions = {
|
|
2
|
+
path?: string;
|
|
3
|
+
pathext?: string;
|
|
4
|
+
platform?: NodeJS.Platform;
|
|
5
|
+
};
|
|
6
|
+
export type CommandResolution = {
|
|
7
|
+
command: string;
|
|
8
|
+
path: string;
|
|
9
|
+
};
|
|
10
|
+
export type ClientRuntimeMode = "auto" | "path" | "built";
|
|
11
|
+
export type ClientCommandResolution = CommandResolution & {
|
|
12
|
+
mode: "path" | "built";
|
|
13
|
+
};
|
|
14
|
+
export type ClientCommandDiscoveryOptions = CommandDiscoveryOptions & {
|
|
15
|
+
env?: NodeJS.ProcessEnv;
|
|
16
|
+
clientMode?: string;
|
|
17
|
+
builtClientDir?: string;
|
|
18
|
+
};
|
|
19
|
+
export type ParsedClientModeArgs = {
|
|
20
|
+
ok: true;
|
|
21
|
+
mode: ClientRuntimeMode;
|
|
22
|
+
args: string[];
|
|
23
|
+
} | {
|
|
24
|
+
ok: false;
|
|
25
|
+
message: string;
|
|
26
|
+
};
|
|
27
|
+
export declare function findCommandOnPath(command: string, options?: CommandDiscoveryOptions): CommandResolution | undefined;
|
|
28
|
+
export declare function normalizeClientRuntimeMode(value: string | undefined): ClientRuntimeMode;
|
|
29
|
+
export declare function parseClientModeArgs(args: string[], env?: NodeJS.ProcessEnv): ParsedClientModeArgs;
|
|
30
|
+
export declare function clientExecutableCandidates(command: string, platform: NodeJS.Platform, pathext?: string): string[];
|
|
31
|
+
export declare function resolveClientCommand(command: string, options?: ClientCommandDiscoveryOptions): ClientCommandResolution | undefined;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.findCommandOnPath = findCommandOnPath;
|
|
7
|
+
exports.normalizeClientRuntimeMode = normalizeClientRuntimeMode;
|
|
8
|
+
exports.parseClientModeArgs = parseClientModeArgs;
|
|
9
|
+
exports.clientExecutableCandidates = clientExecutableCandidates;
|
|
10
|
+
exports.resolveClientCommand = resolveClientCommand;
|
|
11
|
+
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const os_1 = __importDefault(require("os"));
|
|
13
|
+
const path_1 = __importDefault(require("path"));
|
|
14
|
+
function isClientRuntimeMode(value) {
|
|
15
|
+
return value === "path" || value === "built" || value === "auto";
|
|
16
|
+
}
|
|
17
|
+
function isExecutableFile(filePath, platform) {
|
|
18
|
+
try {
|
|
19
|
+
const stat = fs_1.default.statSync(filePath);
|
|
20
|
+
if (!stat.isFile())
|
|
21
|
+
return false;
|
|
22
|
+
if (platform === "win32")
|
|
23
|
+
return true;
|
|
24
|
+
return (stat.mode & 0o111) !== 0;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function windowsCandidates(command, pathext) {
|
|
31
|
+
if (path_1.default.extname(command))
|
|
32
|
+
return [command];
|
|
33
|
+
const extensions = pathext
|
|
34
|
+
.split(";")
|
|
35
|
+
.map((extension) => extension.trim())
|
|
36
|
+
.filter(Boolean);
|
|
37
|
+
return [command, ...extensions.map((extension) => `${command}${extension}`)];
|
|
38
|
+
}
|
|
39
|
+
function findCommandOnPath(command, options = {}) {
|
|
40
|
+
const searchPath = options.path !== undefined ? options.path : process.env.PATH || "";
|
|
41
|
+
const platform = options.platform || process.platform;
|
|
42
|
+
const pathext = options.pathext !== undefined ? options.pathext : process.env.PATHEXT || ".COM;.EXE;.BAT;.CMD";
|
|
43
|
+
const pathEntries = searchPath.split(path_1.default.delimiter).filter(Boolean);
|
|
44
|
+
const candidates = platform === "win32" ? windowsCandidates(command, pathext) : [command];
|
|
45
|
+
for (const directory of pathEntries) {
|
|
46
|
+
for (const candidate of candidates) {
|
|
47
|
+
const candidatePath = path_1.default.resolve(directory, candidate);
|
|
48
|
+
if (isExecutableFile(candidatePath, platform))
|
|
49
|
+
return { command, path: candidatePath };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
function normalizeClientRuntimeMode(value) {
|
|
55
|
+
if (isClientRuntimeMode(value))
|
|
56
|
+
return value;
|
|
57
|
+
return "auto";
|
|
58
|
+
}
|
|
59
|
+
function invalidModeMessage(source, value) {
|
|
60
|
+
return `Invalid ${source} "${value}". Expected auto, path, or built.\n`;
|
|
61
|
+
}
|
|
62
|
+
function getClientModeConfigPath(env) {
|
|
63
|
+
if (env.APPDATA && !env.BLUENOTE_CONFIG_HOME && !env.XDG_CONFIG_HOME)
|
|
64
|
+
return path_1.default.join(env.APPDATA, "bluenote", "client-mode.env");
|
|
65
|
+
const configRoot = env.BLUENOTE_CONFIG_HOME || env.XDG_CONFIG_HOME || path_1.default.join(os_1.default.homedir(), ".config");
|
|
66
|
+
return path_1.default.join(configRoot, "bluenote", "client-mode.env");
|
|
67
|
+
}
|
|
68
|
+
function readPersistedClientMode(env) {
|
|
69
|
+
try {
|
|
70
|
+
const content = fs_1.default.readFileSync(getClientModeConfigPath(env), "utf8");
|
|
71
|
+
const config = {};
|
|
72
|
+
for (const line of content.split(/\r?\n/)) {
|
|
73
|
+
const trimmed = line.trim();
|
|
74
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
75
|
+
continue;
|
|
76
|
+
const index = trimmed.indexOf("=");
|
|
77
|
+
if (index === -1)
|
|
78
|
+
continue;
|
|
79
|
+
const key = trimmed.slice(0, index);
|
|
80
|
+
const value = trimmed.slice(index + 1);
|
|
81
|
+
if (key === "BLUENOTE_CLIENT_MODE")
|
|
82
|
+
config.mode = value;
|
|
83
|
+
if (key === "BLUENOTE_BUILT_CLIENT_DIR")
|
|
84
|
+
config.builtClientDir = value;
|
|
85
|
+
}
|
|
86
|
+
return config;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function parseClientModeArgs(args, env = process.env) {
|
|
93
|
+
const remaining = [];
|
|
94
|
+
let mode = "auto";
|
|
95
|
+
if (env.BLUENOTE_CLIENT_MODE !== undefined) {
|
|
96
|
+
if (!isClientRuntimeMode(env.BLUENOTE_CLIENT_MODE))
|
|
97
|
+
return { ok: false, message: invalidModeMessage("BLUENOTE_CLIENT_MODE", env.BLUENOTE_CLIENT_MODE) };
|
|
98
|
+
mode = env.BLUENOTE_CLIENT_MODE;
|
|
99
|
+
}
|
|
100
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
101
|
+
const arg = args[index];
|
|
102
|
+
if (arg === "--client-mode") {
|
|
103
|
+
const value = args[index + 1];
|
|
104
|
+
if (!value || value.startsWith("--"))
|
|
105
|
+
return { ok: false, message: "Missing value for --client-mode. Expected auto, path, or built.\n" };
|
|
106
|
+
if (!isClientRuntimeMode(value))
|
|
107
|
+
return { ok: false, message: invalidModeMessage("--client-mode", value) };
|
|
108
|
+
mode = value;
|
|
109
|
+
index += 1;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
if (arg.startsWith("--client-mode=")) {
|
|
113
|
+
const value = arg.slice("--client-mode=".length);
|
|
114
|
+
if (!isClientRuntimeMode(value))
|
|
115
|
+
return { ok: false, message: invalidModeMessage("--client-mode", value) };
|
|
116
|
+
mode = value;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
remaining.push(arg);
|
|
120
|
+
}
|
|
121
|
+
return { ok: true, mode, args: remaining };
|
|
122
|
+
}
|
|
123
|
+
function clientExecutableCandidates(command, platform, pathext) {
|
|
124
|
+
if (platform === "win32")
|
|
125
|
+
return windowsCandidates(command, pathext || ".EXE;.CMD;.BAT;.COM");
|
|
126
|
+
return [command];
|
|
127
|
+
}
|
|
128
|
+
function findBuiltClient(command, options = {}) {
|
|
129
|
+
const env = options.env || process.env;
|
|
130
|
+
const persisted = readPersistedClientMode(env);
|
|
131
|
+
const builtClientDir = options.builtClientDir || env.BLUENOTE_BUILT_CLIENT_DIR || persisted.builtClientDir;
|
|
132
|
+
if (!builtClientDir)
|
|
133
|
+
return undefined;
|
|
134
|
+
const platform = options.platform || process.platform;
|
|
135
|
+
const candidates = clientExecutableCandidates(command, platform, options.pathext || env.PATHEXT);
|
|
136
|
+
for (const candidate of candidates) {
|
|
137
|
+
const candidatePath = path_1.default.resolve(builtClientDir, candidate);
|
|
138
|
+
if (isExecutableFile(candidatePath, platform))
|
|
139
|
+
return { command, path: candidatePath };
|
|
140
|
+
}
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
function resolveClientCommand(command, options = {}) {
|
|
144
|
+
const env = options.env || process.env;
|
|
145
|
+
const persisted = readPersistedClientMode(env);
|
|
146
|
+
const configuredMode = options.clientMode && options.clientMode !== "auto" ? options.clientMode : env.BLUENOTE_CLIENT_MODE || persisted.mode;
|
|
147
|
+
const mode = normalizeClientRuntimeMode(configuredMode);
|
|
148
|
+
const platform = options.platform || process.platform;
|
|
149
|
+
const pathext = options.pathext !== undefined ? options.pathext : env.PATHEXT;
|
|
150
|
+
if (mode !== "path") {
|
|
151
|
+
const built = findBuiltClient(command, { ...options, env, platform, pathext });
|
|
152
|
+
if (built)
|
|
153
|
+
return { ...built, mode: "built" };
|
|
154
|
+
if (mode === "built")
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
const onPath = findCommandOnPath(command, { path: options.path !== undefined ? options.path : env.PATH, platform, pathext });
|
|
158
|
+
if (onPath)
|
|
159
|
+
return { ...onPath, mode: "path" };
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=command-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-discovery.js","sourceRoot":"","sources":["../../src/utils/command-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DaemonMetadata } from "../daemon/server";
|
|
2
|
+
export type DaemonConnection = {
|
|
3
|
+
url: string;
|
|
4
|
+
token: string;
|
|
5
|
+
pid?: number;
|
|
6
|
+
};
|
|
7
|
+
export type DaemonStatus = {
|
|
8
|
+
state: "running" | "stopped" | "stale" | "unreachable";
|
|
9
|
+
metadata?: DaemonMetadata;
|
|
10
|
+
healthOk?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export declare function readDaemonMetadata(env?: NodeJS.ProcessEnv): DaemonMetadata | undefined;
|
|
13
|
+
export declare function removeDaemonMetadata(env?: NodeJS.ProcessEnv): void;
|
|
14
|
+
export declare function getDaemonConnection(env?: NodeJS.ProcessEnv): DaemonConnection | undefined;
|
|
15
|
+
export declare function isProcessAlive(pid: number | undefined): boolean;
|
|
16
|
+
export declare function requestJson(url: string, options?: {
|
|
17
|
+
method?: string;
|
|
18
|
+
token?: string;
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
}): Promise<unknown>;
|
|
21
|
+
export declare function readDaemonStatus(env?: NodeJS.ProcessEnv): Promise<DaemonStatus>;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.readDaemonMetadata = readDaemonMetadata;
|
|
7
|
+
exports.removeDaemonMetadata = removeDaemonMetadata;
|
|
8
|
+
exports.getDaemonConnection = getDaemonConnection;
|
|
9
|
+
exports.isProcessAlive = isProcessAlive;
|
|
10
|
+
exports.requestJson = requestJson;
|
|
11
|
+
exports.readDaemonStatus = readDaemonStatus;
|
|
12
|
+
const fs_1 = __importDefault(require("fs"));
|
|
13
|
+
const http_1 = __importDefault(require("http"));
|
|
14
|
+
const paths_1 = require("../daemon/paths");
|
|
15
|
+
function readDaemonMetadata(env = process.env) {
|
|
16
|
+
const statePath = (0, paths_1.getDaemonStatePath)(env);
|
|
17
|
+
try {
|
|
18
|
+
const parsed = JSON.parse(fs_1.default.readFileSync(statePath, "utf8"));
|
|
19
|
+
if (typeof parsed.url !== "string" || typeof parsed.token !== "string")
|
|
20
|
+
return undefined;
|
|
21
|
+
return {
|
|
22
|
+
pid: typeof parsed.pid === "number" ? parsed.pid : 0,
|
|
23
|
+
url: parsed.url,
|
|
24
|
+
token: parsed.token,
|
|
25
|
+
startedAt: typeof parsed.startedAt === "string" ? parsed.startedAt : "",
|
|
26
|
+
version: typeof parsed.version === "string" ? parsed.version : "",
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function removeDaemonMetadata(env = process.env) {
|
|
34
|
+
fs_1.default.rmSync((0, paths_1.getDaemonStatePath)(env), { force: true });
|
|
35
|
+
}
|
|
36
|
+
function getDaemonConnection(env = process.env) {
|
|
37
|
+
const metadata = readDaemonMetadata(env);
|
|
38
|
+
if (!metadata)
|
|
39
|
+
return undefined;
|
|
40
|
+
return { url: metadata.url, token: metadata.token, pid: metadata.pid || undefined };
|
|
41
|
+
}
|
|
42
|
+
function isProcessAlive(pid) {
|
|
43
|
+
if (!pid || pid <= 0)
|
|
44
|
+
return false;
|
|
45
|
+
try {
|
|
46
|
+
process.kill(pid, 0);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async function requestJson(url, options = {}) {
|
|
54
|
+
return await new Promise((resolve, reject) => {
|
|
55
|
+
const request = http_1.default.request(url, {
|
|
56
|
+
method: options.method || "GET",
|
|
57
|
+
timeout: options.timeoutMs || 1000,
|
|
58
|
+
headers: options.token ? { authorization: `Bearer ${options.token}` } : undefined,
|
|
59
|
+
}, (response) => {
|
|
60
|
+
let body = "";
|
|
61
|
+
response.setEncoding("utf8");
|
|
62
|
+
response.on("data", (chunk) => {
|
|
63
|
+
body += chunk;
|
|
64
|
+
});
|
|
65
|
+
response.on("end", () => {
|
|
66
|
+
if (!response.statusCode || response.statusCode < 200 || response.statusCode >= 300) {
|
|
67
|
+
reject(new Error(`HTTP ${response.statusCode || 0}`));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
resolve(body ? JSON.parse(body) : {});
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
reject(error);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
request.on("timeout", () => {
|
|
79
|
+
request.destroy(new Error("request timed out"));
|
|
80
|
+
});
|
|
81
|
+
request.on("error", reject);
|
|
82
|
+
request.end();
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
async function readDaemonStatus(env = process.env) {
|
|
86
|
+
const metadata = readDaemonMetadata(env);
|
|
87
|
+
if (!metadata)
|
|
88
|
+
return { state: "stopped" };
|
|
89
|
+
try {
|
|
90
|
+
const health = await requestJson(`${metadata.url}/health`, { timeoutMs: 750 });
|
|
91
|
+
if (health && health.ok === true)
|
|
92
|
+
return { state: "running", metadata, healthOk: true };
|
|
93
|
+
return { state: "unreachable", metadata, healthOk: false };
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return { state: isProcessAlive(metadata.pid) ? "unreachable" : "stale", metadata, healthOk: false };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=daemon-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-state.js","sourceRoot":"","sources":["../../src/utils/daemon-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function importPublicPackage(specifier: string, loader?: (specifier: string) => Promise<unknown>): Promise<unknown>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.importPublicPackage = importPublicPackage;
|
|
4
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
5
|
+
async function importPublicPackage(specifier, loader) {
|
|
6
|
+
if (loader)
|
|
7
|
+
return loader(specifier);
|
|
8
|
+
return dynamicImport(specifier);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=lazy-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy-import.js","sourceRoot":"","sources":["../../src/utils/lazy-import.ts"],"names":[],"mappings":";;AAEA,kDAGC;AALD,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAA4C,CAAA;AAE/G,KAAK,UAAU,mBAAmB,CAAC,SAAiB,EAAE,MAAgD;IAC3G,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;IACpC,OAAO,aAAa,CAAC,SAAS,CAAC,CAAA;AACjC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface PackageInfo {
|
|
2
|
+
name: string;
|
|
3
|
+
version: string;
|
|
4
|
+
path?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface PackageResolution {
|
|
7
|
+
name: string;
|
|
8
|
+
resolved: boolean;
|
|
9
|
+
path?: string;
|
|
10
|
+
version?: string;
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function readOwnPackageInfo(): PackageInfo;
|
|
14
|
+
export declare function resolvePackageJson(packageName: string): PackageResolution;
|
|
15
|
+
export declare function findPackageBin(packageName: string, binName: string): string | null;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.readOwnPackageInfo = readOwnPackageInfo;
|
|
7
|
+
exports.resolvePackageJson = resolvePackageJson;
|
|
8
|
+
exports.findPackageBin = findPackageBin;
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
11
|
+
const requireFunc = require;
|
|
12
|
+
function readOwnPackageInfo() {
|
|
13
|
+
const packageJson = requireFunc("../../package.json");
|
|
14
|
+
return { name: packageJson.name, version: packageJson.version };
|
|
15
|
+
}
|
|
16
|
+
function resolvePackageJson(packageName) {
|
|
17
|
+
try {
|
|
18
|
+
const packageJsonPath = requireFunc.resolve(`${packageName}/package.json`);
|
|
19
|
+
const packageJson = requireFunc(packageJsonPath);
|
|
20
|
+
return { name: packageName, resolved: true, path: packageJsonPath, version: packageJson.version };
|
|
21
|
+
}
|
|
22
|
+
catch (packageJsonError) {
|
|
23
|
+
try {
|
|
24
|
+
const resolvedPath = requireFunc.resolve(packageName);
|
|
25
|
+
return { name: packageName, resolved: true, path: resolvedPath };
|
|
26
|
+
}
|
|
27
|
+
catch (resolveError) {
|
|
28
|
+
const error = resolveError instanceof Error ? resolveError.message : String(resolveError);
|
|
29
|
+
return { name: packageName, resolved: false, error };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function findPackageBin(packageName, binName) {
|
|
34
|
+
const resolution = resolvePackageJson(packageName);
|
|
35
|
+
if (!resolution.resolved || !resolution.path)
|
|
36
|
+
return null;
|
|
37
|
+
try {
|
|
38
|
+
const packageJsonPath = resolution.path.endsWith("package.json")
|
|
39
|
+
? resolution.path
|
|
40
|
+
: requireFunc.resolve(`${packageName}/package.json`);
|
|
41
|
+
const packageJson = requireFunc(packageJsonPath);
|
|
42
|
+
const binValue = typeof packageJson.bin === "string" ? packageJson.bin : packageJson.bin?.[binName];
|
|
43
|
+
return binValue ? path_1.default.resolve(path_1.default.dirname(packageJsonPath), binValue) : null;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=package-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-info.js","sourceRoot":"","sources":["../../src/utils/package-info.ts"],"names":[],"mappings":";;;;;AAmBA,gDAGC;AAED,gDAcC;AAED,wCAaC;AArDD,gDAAuB;AAEvB,8DAA8D;AAC9D,MAAM,WAAW,GAAG,OAAO,CAAA;AAgB3B,SAAgB,kBAAkB;IAChC,MAAM,WAAW,GAAG,WAAW,CAAC,oBAAoB,CAAsC,CAAA;IAC1F,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAA;AACjE,CAAC;AAED,SAAgB,kBAAkB,CAAC,WAAmB;IACpD,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,WAAW,eAAe,CAAC,CAAA;QAC1E,MAAM,WAAW,GAAG,WAAW,CAAC,eAAe,CAAyB,CAAA;QACxE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAA;IACnG,CAAC;IAAC,OAAO,gBAAgB,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YACrD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA;QAClE,CAAC;QAAC,OAAO,YAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,YAAY,YAAY,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YACzF,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;QACtD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,WAAmB,EAAE,OAAe;IACjE,MAAM,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAA;IAClD,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IACzD,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC9D,CAAC,CAAC,UAAU,CAAC,IAAI;YACjB,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,WAAW,eAAe,CAAC,CAAA;QACtD,MAAM,WAAW,GAAG,WAAW,CAAC,eAAe,CAA8C,CAAA;QAC7F,MAAM,QAAQ,GAAG,OAAO,WAAW,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAA;QACnG,OAAO,QAAQ,CAAC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,cAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface ParsedVersion {
|
|
2
|
+
major: number;
|
|
3
|
+
minor: number;
|
|
4
|
+
patch: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function parseVersion(version: string): ParsedVersion | null;
|
|
7
|
+
export declare function isSupportedNodeVersion(version: string): boolean;
|
|
8
|
+
export declare function nodeRequirementText(): string;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseVersion = parseVersion;
|
|
4
|
+
exports.isSupportedNodeVersion = isSupportedNodeVersion;
|
|
5
|
+
exports.nodeRequirementText = nodeRequirementText;
|
|
6
|
+
function parseVersion(version) {
|
|
7
|
+
const match = String(version || "").match(/^(\d+)\.(\d+)\.(\d+)/);
|
|
8
|
+
if (!match)
|
|
9
|
+
return null;
|
|
10
|
+
return { major: Number(match[1]), minor: Number(match[2]), patch: Number(match[3]) };
|
|
11
|
+
}
|
|
12
|
+
function isSupportedNodeVersion(version) {
|
|
13
|
+
const parsed = parseVersion(version);
|
|
14
|
+
if (!parsed)
|
|
15
|
+
return false;
|
|
16
|
+
if (parsed.major === 16) {
|
|
17
|
+
return parsed.minor > 14 || (parsed.minor === 14 && parsed.patch >= 0);
|
|
18
|
+
}
|
|
19
|
+
if (parsed.major === 17)
|
|
20
|
+
return false;
|
|
21
|
+
return parsed.major >= 18;
|
|
22
|
+
}
|
|
23
|
+
function nodeRequirementText() {
|
|
24
|
+
return ">=16.14 <17 || >=18";
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=runtime-requirements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-requirements.js","sourceRoot":"","sources":["../../src/utils/runtime-requirements.ts"],"names":[],"mappings":";;AAMA,oCAIC;AAED,wDAQC;AAED,kDAEC;AAlBD,SAAgB,YAAY,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACjE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACtF,CAAC;AAED,SAAgB,sBAAsB,CAAC,OAAe;IACpD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACpC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACzB,IAAI,MAAM,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,KAAK,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAA;IACxE,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,EAAE;QAAE,OAAO,KAAK,CAAA;IACrC,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAA;AAC3B,CAAC;AAED,SAAgB,mBAAmB;IACjC,OAAO,qBAAqB,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function write(stream: NodeJS.WritableStream | undefined, text: string): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/utils/write.ts"],"names":[],"mappings":";;AAAA,sBAIC;AAJD,SAAgB,KAAK,CAAC,MAAyC,EAAE,IAAY;IAC3E,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lordierclaw/bluenote",
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"description": "Official BlueNote distribution CLI.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist",
|
|
8
|
+
"README.md",
|
|
9
|
+
"LICENSE",
|
|
10
|
+
"package.json"
|
|
11
|
+
],
|
|
12
|
+
"bin": {
|
|
13
|
+
"bluenote": "./dist/bin.js",
|
|
14
|
+
"bn": "./dist/bin.js"
|
|
15
|
+
},
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=16.14 <17 || >=18"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"clean": "node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"",
|
|
21
|
+
"build": "npm run clean && tsc -p tsconfig.json && node -e \"require('fs').chmodSync('dist/bin.js', 0o755)\"",
|
|
22
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
23
|
+
"test": "npm run build && node tests/run-tests.js",
|
|
24
|
+
"version:status": "node scripts/version-status.mjs",
|
|
25
|
+
"check": "npm run typecheck && npm run test && npm run build"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@lordierclaw/bluenote-core": "0.4.1"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "16.18.126",
|
|
32
|
+
"typescript": "5.8.3"
|
|
33
|
+
}
|
|
34
|
+
}
|