mcpize 1.0.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/LICENSE +21 -0
- package/README.md +140 -0
- package/dist/commands/deploy.d.ts +8 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +337 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/doctor.d.ts +7 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +257 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +238 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/link.d.ts +6 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +147 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +88 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +2 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +9 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/logs.d.ts +13 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +173 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/secrets.d.ts +16 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +195 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +187 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +241 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +154 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +364 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/auth.d.ts +20 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +106 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/cache.d.ts +39 -0
- package/dist/lib/cache.d.ts.map +1 -0
- package/dist/lib/cache.js +112 -0
- package/dist/lib/cache.js.map +1 -0
- package/dist/lib/config.d.ts +21 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +90 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/degit.d.ts +25 -0
- package/dist/lib/degit.d.ts.map +1 -0
- package/dist/lib/degit.js +187 -0
- package/dist/lib/degit.js.map +1 -0
- package/dist/lib/git.d.ts +10 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +43 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/project.d.ts +38 -0
- package/dist/lib/project.d.ts.map +1 -0
- package/dist/lib/project.js +72 -0
- package/dist/lib/project.js.map +1 -0
- package/dist/lib/tarball.d.ts +7 -0
- package/dist/lib/tarball.d.ts.map +1 -0
- package/dist/lib/tarball.js +130 -0
- package/dist/lib/tarball.js.map +1 -0
- package/package.json +56 -0
package/dist/lib/git.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { exec } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
const execAsync = promisify(exec);
|
|
4
|
+
async function execGit(command, cwd) {
|
|
5
|
+
try {
|
|
6
|
+
const { stdout } = await execAsync(command, { cwd });
|
|
7
|
+
return stdout.trim();
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return "";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export async function getGitInfo(cwd) {
|
|
14
|
+
const sha = await execGit("git rev-parse HEAD", cwd);
|
|
15
|
+
if (!sha) {
|
|
16
|
+
return null; // Not a git repo
|
|
17
|
+
}
|
|
18
|
+
const branch = await execGit("git rev-parse --abbrev-ref HEAD", cwd);
|
|
19
|
+
const author = await execGit('git log -1 --format="%an"', cwd);
|
|
20
|
+
const message = await execGit('git log -1 --format="%s"', cwd);
|
|
21
|
+
// Try to get GitHub repo info
|
|
22
|
+
const remote = await execGit("git remote get-url origin", cwd);
|
|
23
|
+
let repoFullName;
|
|
24
|
+
if (remote) {
|
|
25
|
+
// Match: https://github.com/user/repo.git or git@github.com:user/repo.git
|
|
26
|
+
const match = remote.match(/github\.com[:/](.+?)\/(.+?)(\.git)?$/);
|
|
27
|
+
if (match) {
|
|
28
|
+
repoFullName = `${match[1]}/${match[2].replace(".git", "")}`;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
sha: sha.slice(0, 7), // Short SHA
|
|
33
|
+
branch,
|
|
34
|
+
author,
|
|
35
|
+
message,
|
|
36
|
+
repoFullName,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export async function isGitRepo(cwd) {
|
|
40
|
+
const result = await execGit("git rev-parse --is-inside-work-tree", cwd);
|
|
41
|
+
return result === "true";
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAUlC,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,GAAW;IACjD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IAErD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC,CAAC,iBAAiB;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;IAE/D,8BAA8B;IAC9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAC/D,IAAI,YAAgC,CAAC;IAErC,IAAI,MAAM,EAAE,CAAC;QACX,0EAA0E;QAC1E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACnE,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY;QAClC,MAAM;QACN,MAAM;QACN,OAAO;QACP,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC;IACzE,OAAO,MAAM,KAAK,MAAM,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface ProjectConfig {
|
|
2
|
+
serverId: string;
|
|
3
|
+
serverName?: string;
|
|
4
|
+
branch?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface McpizeManifest {
|
|
7
|
+
version: number;
|
|
8
|
+
name?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
runtime: "typescript" | "python" | "php";
|
|
11
|
+
entry?: string;
|
|
12
|
+
build?: {
|
|
13
|
+
install?: string;
|
|
14
|
+
command?: string;
|
|
15
|
+
};
|
|
16
|
+
startCommand?: {
|
|
17
|
+
type: "http" | "stdio";
|
|
18
|
+
command: string;
|
|
19
|
+
};
|
|
20
|
+
configSchema?: {
|
|
21
|
+
source: "code" | "inline";
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export declare function getProjectConfigPath(cwd: string): string;
|
|
25
|
+
export declare function loadProjectConfig(cwd: string): ProjectConfig | null;
|
|
26
|
+
export declare function saveProjectConfig(cwd: string, config: ProjectConfig): void;
|
|
27
|
+
export declare function loadManifest(cwd: string): McpizeManifest | null;
|
|
28
|
+
export declare function hasManifest(cwd: string): boolean;
|
|
29
|
+
export declare function detectRuntime(cwd: string): "typescript" | "python" | "php" | null;
|
|
30
|
+
export interface PackageJson {
|
|
31
|
+
name?: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
version?: string;
|
|
34
|
+
main?: string;
|
|
35
|
+
exports?: unknown;
|
|
36
|
+
}
|
|
37
|
+
export declare function loadPackageJson(cwd: string): PackageJson | null;
|
|
38
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;KAC3B,CAAC;CACH;AAKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAanE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAS1E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAa/D;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,GACV,YAAY,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,CAcxC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAa/D"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { parse as parseYaml } from "yaml";
|
|
4
|
+
const PROJECT_DIR = ".mcpize";
|
|
5
|
+
const PROJECT_FILE = "project.json";
|
|
6
|
+
export function getProjectConfigPath(cwd) {
|
|
7
|
+
return join(cwd, PROJECT_DIR, PROJECT_FILE);
|
|
8
|
+
}
|
|
9
|
+
export function loadProjectConfig(cwd) {
|
|
10
|
+
const configPath = getProjectConfigPath(cwd);
|
|
11
|
+
if (!existsSync(configPath)) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
const content = readFileSync(configPath, "utf-8");
|
|
16
|
+
return JSON.parse(content);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function saveProjectConfig(cwd, config) {
|
|
23
|
+
const projectDir = join(cwd, PROJECT_DIR);
|
|
24
|
+
if (!existsSync(projectDir)) {
|
|
25
|
+
mkdirSync(projectDir, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
const configPath = getProjectConfigPath(cwd);
|
|
28
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
29
|
+
}
|
|
30
|
+
export function loadManifest(cwd) {
|
|
31
|
+
const manifestPath = join(cwd, "mcpize.yaml");
|
|
32
|
+
if (!existsSync(manifestPath)) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const content = readFileSync(manifestPath, "utf-8");
|
|
37
|
+
return parseYaml(content);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function hasManifest(cwd) {
|
|
44
|
+
return existsSync(join(cwd, "mcpize.yaml"));
|
|
45
|
+
}
|
|
46
|
+
export function detectRuntime(cwd) {
|
|
47
|
+
if (existsSync(join(cwd, "package.json"))) {
|
|
48
|
+
return "typescript";
|
|
49
|
+
}
|
|
50
|
+
if (existsSync(join(cwd, "requirements.txt")) ||
|
|
51
|
+
existsSync(join(cwd, "pyproject.toml"))) {
|
|
52
|
+
return "python";
|
|
53
|
+
}
|
|
54
|
+
if (existsSync(join(cwd, "composer.json"))) {
|
|
55
|
+
return "php";
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
export function loadPackageJson(cwd) {
|
|
60
|
+
const packagePath = join(cwd, "package.json");
|
|
61
|
+
if (!existsSync(packagePath)) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const content = readFileSync(packagePath, "utf-8");
|
|
66
|
+
return JSON.parse(content);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tarball.d.ts","sourceRoot":"","sources":["../../src/lib/tarball.ts"],"names":[],"mappings":"AAwCA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AA+ED,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAmC5E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join, relative } from "node:path";
|
|
3
|
+
import * as tar from "tar";
|
|
4
|
+
// Default patterns to exclude from tarball
|
|
5
|
+
const DEFAULT_EXCLUDES = [
|
|
6
|
+
// Package directories
|
|
7
|
+
"node_modules",
|
|
8
|
+
"__pycache__",
|
|
9
|
+
"vendor",
|
|
10
|
+
".venv",
|
|
11
|
+
"venv",
|
|
12
|
+
// Build artifacts
|
|
13
|
+
"dist",
|
|
14
|
+
"build",
|
|
15
|
+
".next",
|
|
16
|
+
".nuxt",
|
|
17
|
+
// Git and IDE
|
|
18
|
+
".git",
|
|
19
|
+
".mcpize",
|
|
20
|
+
".vscode",
|
|
21
|
+
".idea",
|
|
22
|
+
".DS_Store",
|
|
23
|
+
// Environment files
|
|
24
|
+
".env",
|
|
25
|
+
".env.*",
|
|
26
|
+
"!.env.example",
|
|
27
|
+
// Test and coverage
|
|
28
|
+
"coverage",
|
|
29
|
+
".nyc_output",
|
|
30
|
+
// Logs
|
|
31
|
+
"*.log",
|
|
32
|
+
"npm-debug.log*",
|
|
33
|
+
];
|
|
34
|
+
function loadMcpizeIgnore(cwd) {
|
|
35
|
+
const ignorePath = join(cwd, ".mcpizeignore");
|
|
36
|
+
if (!existsSync(ignorePath)) {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
const content = readFileSync(ignorePath, "utf-8");
|
|
40
|
+
return content
|
|
41
|
+
.split("\n")
|
|
42
|
+
.map((line) => line.trim())
|
|
43
|
+
.filter((line) => line && !line.startsWith("#"));
|
|
44
|
+
}
|
|
45
|
+
function shouldExclude(filePath, excludes) {
|
|
46
|
+
const fileName = filePath.split("/").pop() || "";
|
|
47
|
+
for (const pattern of excludes) {
|
|
48
|
+
// Skip negation patterns in this check
|
|
49
|
+
if (pattern.startsWith("!"))
|
|
50
|
+
continue;
|
|
51
|
+
// Exact match
|
|
52
|
+
if (filePath === pattern || fileName === pattern) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
// Directory match (pattern without trailing slash matches directory)
|
|
56
|
+
if (filePath.startsWith(pattern + "/")) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
// Simple glob match for *.ext patterns
|
|
60
|
+
if (pattern.startsWith("*.")) {
|
|
61
|
+
const ext = pattern.slice(1);
|
|
62
|
+
if (fileName.endsWith(ext)) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Check if any path segment matches
|
|
67
|
+
const segments = filePath.split("/");
|
|
68
|
+
if (segments.includes(pattern)) {
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
async function collectFiles(dir, baseDir, excludes) {
|
|
75
|
+
const { readdir } = await import("node:fs/promises");
|
|
76
|
+
const files = [];
|
|
77
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
78
|
+
for (const entry of entries) {
|
|
79
|
+
const fullPath = join(dir, entry.name);
|
|
80
|
+
const relativePath = relative(baseDir, fullPath);
|
|
81
|
+
if (shouldExclude(relativePath, excludes)) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (entry.isDirectory()) {
|
|
85
|
+
const subFiles = await collectFiles(fullPath, baseDir, excludes);
|
|
86
|
+
files.push(...subFiles);
|
|
87
|
+
}
|
|
88
|
+
else if (entry.isFile()) {
|
|
89
|
+
files.push(relativePath);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return files;
|
|
93
|
+
}
|
|
94
|
+
export async function createTarball(options) {
|
|
95
|
+
const { cwd } = options;
|
|
96
|
+
// Combine default excludes with .mcpizeignore
|
|
97
|
+
const customExcludes = loadMcpizeIgnore(cwd);
|
|
98
|
+
const allExcludes = [
|
|
99
|
+
...DEFAULT_EXCLUDES,
|
|
100
|
+
...(options.excludes || []),
|
|
101
|
+
...customExcludes,
|
|
102
|
+
];
|
|
103
|
+
// Collect all files to include
|
|
104
|
+
const files = await collectFiles(cwd, cwd, allExcludes);
|
|
105
|
+
if (files.length === 0) {
|
|
106
|
+
throw new Error("No files to include in tarball");
|
|
107
|
+
}
|
|
108
|
+
// Create tarball using promise-based approach
|
|
109
|
+
return new Promise((resolve, reject) => {
|
|
110
|
+
const chunks = [];
|
|
111
|
+
tar
|
|
112
|
+
.create({
|
|
113
|
+
gzip: true,
|
|
114
|
+
cwd,
|
|
115
|
+
portable: true,
|
|
116
|
+
}, files)
|
|
117
|
+
.on("data", (chunk) => chunks.push(chunk))
|
|
118
|
+
.on("end", () => resolve(Buffer.concat(chunks)))
|
|
119
|
+
.on("error", reject);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
export function formatBytes(bytes) {
|
|
123
|
+
if (bytes === 0)
|
|
124
|
+
return "0 B";
|
|
125
|
+
const k = 1024;
|
|
126
|
+
const sizes = ["B", "KB", "MB", "GB"];
|
|
127
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
128
|
+
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=tarball.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tarball.js","sourceRoot":"","sources":["../../src/lib/tarball.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mcpize",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Deploy and monetize MCP servers in the cloud",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"mcpize": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"dev": "tsx watch src/index.ts",
|
|
12
|
+
"start": "node dist/index.js",
|
|
13
|
+
"lint": "eslint src/",
|
|
14
|
+
"typecheck": "tsc --noEmit"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"chalk": "^5.6.0",
|
|
18
|
+
"commander": "^14.0.0",
|
|
19
|
+
"dotenv": "^17.2.3",
|
|
20
|
+
"enquirer": "^2.4.1",
|
|
21
|
+
"open": "^11.0.0",
|
|
22
|
+
"ora": "^9.0.0",
|
|
23
|
+
"tar": "^7.5.0",
|
|
24
|
+
"yaml": "^2.8.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/node": "^22.15.21",
|
|
28
|
+
"@types/tar": "^6.1.13",
|
|
29
|
+
"tsx": "^4.19.4",
|
|
30
|
+
"typescript": "^5.8.3"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=20.0.0"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist"
|
|
37
|
+
],
|
|
38
|
+
"keywords": [
|
|
39
|
+
"mcp",
|
|
40
|
+
"model-context-protocol",
|
|
41
|
+
"cli",
|
|
42
|
+
"deploy",
|
|
43
|
+
"serverless",
|
|
44
|
+
"mcpize"
|
|
45
|
+
],
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"author": "MCPize",
|
|
48
|
+
"homepage": "https://mcpize.com",
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "https://github.com/mcpize/cli.git"
|
|
52
|
+
},
|
|
53
|
+
"bugs": {
|
|
54
|
+
"url": "https://github.com/mcpize/cli/issues"
|
|
55
|
+
}
|
|
56
|
+
}
|