@hol-org/hashnet-mcp 1.0.2 → 1.0.5
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/dist/cli/up.js +43 -10
- package/dist/cli/up.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/up.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
#!/usr/bin/env node
|
|
3
2
|
|
|
4
3
|
// src/cli/up.ts
|
|
5
4
|
import { spawnSync } from "child_process";
|
|
6
|
-
import { copyFileSync, existsSync } from "fs";
|
|
5
|
+
import { copyFileSync, existsSync, writeFileSync } from "fs";
|
|
7
6
|
import path from "path";
|
|
8
7
|
import { fileURLToPath } from "url";
|
|
9
8
|
var dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
@@ -25,6 +24,7 @@ var installOnly = Boolean(flags["install-only"]);
|
|
|
25
24
|
try {
|
|
26
25
|
ensureNodeVersion();
|
|
27
26
|
const packageManager = detectPackageManager();
|
|
27
|
+
ensurePnpmConfig();
|
|
28
28
|
installDependencies(packageManager);
|
|
29
29
|
ensureEnvFile();
|
|
30
30
|
if (installOnly) {
|
|
@@ -93,14 +93,36 @@ function commandExists(bin) {
|
|
|
93
93
|
}
|
|
94
94
|
function installDependencies(pm) {
|
|
95
95
|
console.log(`Installing dependencies with ${pm}...`);
|
|
96
|
-
const
|
|
96
|
+
const baseEnv = {
|
|
97
|
+
...process.env,
|
|
98
|
+
NODE_OPTIONS: process.env.NODE_OPTIONS ?? "--max-old-space-size=8192"
|
|
99
|
+
};
|
|
100
|
+
const npmArgs = ["install", "--legacy-peer-deps"];
|
|
101
|
+
const installResult = spawnSync(pm, pm === "pnpm" ? ["install"] : npmArgs, {
|
|
97
102
|
cwd: projectRoot,
|
|
98
|
-
stdio: "inherit"
|
|
103
|
+
stdio: "inherit",
|
|
104
|
+
env: baseEnv
|
|
99
105
|
});
|
|
100
106
|
if (installResult.status !== 0) {
|
|
101
107
|
throw new Error(`${pm} install failed.`);
|
|
102
108
|
}
|
|
103
109
|
}
|
|
110
|
+
function ensurePnpmConfig() {
|
|
111
|
+
const npmrcPath = path.join(projectRoot, ".npmrc");
|
|
112
|
+
if (existsSync(npmrcPath)) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const content = [
|
|
116
|
+
"node-linker=isolated",
|
|
117
|
+
"shamefully-hoist=false",
|
|
118
|
+
"strict-peer-dependencies=false",
|
|
119
|
+
"auto-install-peers=false",
|
|
120
|
+
"resolution-mode=lowest-direct",
|
|
121
|
+
"node-options=--max-old-space-size=8192",
|
|
122
|
+
"child-concurrency=4"
|
|
123
|
+
].join("\n");
|
|
124
|
+
writeFileSync(npmrcPath, content);
|
|
125
|
+
}
|
|
104
126
|
function ensureEnvFile() {
|
|
105
127
|
const envPath = path.join(projectRoot, ".env");
|
|
106
128
|
const examplePath = path.join(projectRoot, ".env.example");
|
|
@@ -113,16 +135,27 @@ function runServer(pm, transport2) {
|
|
|
113
135
|
if (!["stdio", "sse"].includes(transport2)) {
|
|
114
136
|
throw new Error(`Unsupported transport "${transport2}". Use stdio or sse.`);
|
|
115
137
|
}
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
138
|
+
const distEntry = path.join(projectRoot, "dist", "index.js");
|
|
139
|
+
const env = { ...process.env, MCP_TRANSPORT: transport2 };
|
|
140
|
+
if (!existsSync(distEntry)) {
|
|
141
|
+
console.log("dist/index.js not found. Building project before start...");
|
|
142
|
+
const buildResult = spawnSync(pm, ["run", "build"], {
|
|
143
|
+
cwd: projectRoot,
|
|
144
|
+
stdio: "inherit",
|
|
145
|
+
env
|
|
146
|
+
});
|
|
147
|
+
if (buildResult.status !== 0) {
|
|
148
|
+
throw new Error(`${pm} run build exited with code ${buildResult.status}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
console.log(`Starting ${transport2} transport via ${pm} run start...`);
|
|
152
|
+
const child = spawnSync(pm, ["run", "start"], {
|
|
120
153
|
cwd: projectRoot,
|
|
121
154
|
stdio: "inherit",
|
|
122
|
-
env
|
|
155
|
+
env
|
|
123
156
|
});
|
|
124
157
|
if (child.status !== 0) {
|
|
125
|
-
throw new Error(`${pm} run
|
|
158
|
+
throw new Error(`${pm} run start exited with code ${child.status}`);
|
|
126
159
|
}
|
|
127
160
|
}
|
|
128
161
|
//# sourceMappingURL=up.js.map
|
package/dist/cli/up.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/up.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/cli/up.ts"],"sourcesContent":["import { spawnSync } from 'node:child_process';\nimport { copyFileSync, existsSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst dirname = path.dirname(fileURLToPath(import.meta.url));\nconst projectRoot = path.resolve(dirname, '../..');\n\nconst args = process.argv.slice(2);\nconst command = args[0];\n\nif (!command || command === '--help' || command === '-h') {\n printHelp();\n process.exit(0);\n}\n\nif (command !== 'up') {\n console.error(`Unknown command: ${command}`);\n printHelp();\n process.exit(1);\n}\n\nconst flags = parseFlags(args.slice(1));\nconst transport = (flags.transport ?? 'stdio').toLowerCase();\nconst installOnly = Boolean(flags['install-only']);\n\ntry {\n ensureNodeVersion();\n const packageManager = detectPackageManager();\n ensurePnpmConfig();\n installDependencies(packageManager);\n ensureEnvFile();\n\n if (installOnly) {\n console.log('Dependencies installed. Skipping server launch (--install-only set).');\n process.exit(0);\n }\n\n runServer(packageManager, transport);\n} catch (error) {\n console.error(error instanceof Error ? error.message : error);\n process.exit(1);\n}\n\nfunction printHelp() {\n console.log(`Usage: npx @hol-org/hashnet-mcp up [options]\\n\\nOptions:\\n --transport <stdio|sse> Choose the transport to start (default: stdio)\\n --install-only Install deps and sync .env, then exit\\n -h, --help Show this help message`);\n}\n\nfunction parseFlags(values: string[]) {\n const cloned = [...values];\n return cloned.reduce<Record<string, any>>((acc, entry, index) => {\n if (entry.startsWith('--')) {\n const [key, inlineValue] = entry.split('=');\n const normalized = key.replace(/^--/, '');\n if (inlineValue !== undefined) {\n acc[normalized] = inlineValue;\n } else {\n const next = cloned[index + 1];\n if (next && !next.startsWith('--')) {\n acc[normalized] = next;\n cloned.splice(index + 1, 1);\n } else {\n acc[normalized] = true;\n }\n }\n }\n return acc;\n }, {});\n}\n\nfunction ensureNodeVersion() {\n const major = Number(process.versions.node.split('.')[0]);\n if (Number.isNaN(major) || major < 18) {\n throw new Error(`Node.js 18+ is required (detected ${process.versions.node}).`);\n }\n}\n\nfunction detectPackageManager(): 'pnpm' | 'npm' {\n if (commandExists('pnpm')) {\n return 'pnpm';\n }\n\n console.warn('pnpm not detected. Attempting to enable via corepack...');\n const enabled = spawnSync('corepack', ['enable', 'pnpm'], { stdio: 'inherit' });\n if (enabled.status === 0 && commandExists('pnpm')) {\n return 'pnpm';\n }\n\n console.warn('Falling back to npm. Install pnpm globally for faster installs.');\n return 'npm';\n}\n\nfunction commandExists(bin: string) {\n try {\n const result = spawnSync(bin, ['--version'], { stdio: 'ignore' });\n return result.status === 0;\n } catch {\n return false;\n }\n}\n\nfunction installDependencies(pm: 'pnpm' | 'npm') {\n console.log(`Installing dependencies with ${pm}...`);\n const baseEnv = {\n ...process.env,\n NODE_OPTIONS: process.env.NODE_OPTIONS ?? '--max-old-space-size=8192',\n };\n\n const npmArgs = ['install', '--legacy-peer-deps'];\n\n const installResult = spawnSync(pm, pm === 'pnpm' ? ['install'] : npmArgs, {\n cwd: projectRoot,\n stdio: 'inherit',\n env: baseEnv,\n });\n if (installResult.status !== 0) {\n throw new Error(`${pm} install failed.`);\n }\n}\n\nfunction ensurePnpmConfig() {\n const npmrcPath = path.join(projectRoot, '.npmrc');\n if (existsSync(npmrcPath)) {\n return;\n }\n\n const content = [\n 'node-linker=isolated',\n 'shamefully-hoist=false',\n 'strict-peer-dependencies=false',\n 'auto-install-peers=false',\n 'resolution-mode=lowest-direct',\n 'node-options=--max-old-space-size=8192',\n 'child-concurrency=4',\n ].join('\\n');\n\n writeFileSync(npmrcPath, content);\n}\n\nfunction ensureEnvFile() {\n const envPath = path.join(projectRoot, '.env');\n const examplePath = path.join(projectRoot, '.env.example');\n if (!existsSync(envPath) && existsSync(examplePath)) {\n copyFileSync(examplePath, envPath);\n console.log('Created .env from .env.example. Remember to fill in your credentials.');\n }\n}\n\nfunction runServer(pm: 'pnpm' | 'npm', transport: string) {\n if (!['stdio', 'sse'].includes(transport)) {\n throw new Error(`Unsupported transport \"${transport}\". Use stdio or sse.`);\n }\n const distEntry = path.join(projectRoot, 'dist', 'index.js');\n const env = { ...process.env, MCP_TRANSPORT: transport };\n\n if (!existsSync(distEntry)) {\n console.log('dist/index.js not found. Building project before start...');\n const buildResult = spawnSync(pm, ['run', 'build'], {\n cwd: projectRoot,\n stdio: 'inherit',\n env,\n });\n if (buildResult.status !== 0) {\n throw new Error(`${pm} run build exited with code ${buildResult.status}`);\n }\n }\n\n console.log(`Starting ${transport} transport via ${pm} run start...`);\n const child = spawnSync(pm, ['run', 'start'], {\n cwd: projectRoot,\n stdio: 'inherit',\n env,\n });\n if (child.status !== 0) {\n throw new Error(`${pm} run start exited with code ${child.status}`);\n }\n}\n"],"mappings":"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","names":["transport"]}
|