@nick848/sf-cli 1.0.1 → 1.0.2
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/index.js +202 -167
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +72 -37
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +135 -93
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -12,7 +12,6 @@ var chalk9 = require('chalk');
|
|
|
12
12
|
var uuid = require('uuid');
|
|
13
13
|
var enquirer = require('enquirer');
|
|
14
14
|
var child_process = require('child_process');
|
|
15
|
-
var module$1 = require('module');
|
|
16
15
|
|
|
17
16
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
17
|
|
|
@@ -41,9 +40,7 @@ var crypto__namespace = /*#__PURE__*/_interopNamespace(crypto);
|
|
|
41
40
|
var os__namespace = /*#__PURE__*/_interopNamespace(os);
|
|
42
41
|
var chalk9__default = /*#__PURE__*/_interopDefault(chalk9);
|
|
43
42
|
|
|
44
|
-
//
|
|
45
|
-
var getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.tagName.toUpperCase() === "SCRIPT" ? document.currentScript.src : new URL("main.js", document.baseURI).href;
|
|
46
|
-
var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
|
|
43
|
+
// src/services/config.ts
|
|
47
44
|
var DEFAULT_CONFIG = {
|
|
48
45
|
model: "GLM-5",
|
|
49
46
|
apiKey: "",
|
|
@@ -377,7 +374,7 @@ var BaseAdapter = class {
|
|
|
377
374
|
* 延迟工具函数
|
|
378
375
|
*/
|
|
379
376
|
delay(ms) {
|
|
380
|
-
return new Promise((
|
|
377
|
+
return new Promise((resolve4) => setTimeout(resolve4, ms));
|
|
381
378
|
}
|
|
382
379
|
};
|
|
383
380
|
|
|
@@ -1822,17 +1819,17 @@ var FigmaMCPAdapter = class extends MCPAdapterBase {
|
|
|
1822
1819
|
* 解析设计规格
|
|
1823
1820
|
*/
|
|
1824
1821
|
parseDesignSpec(data, url, fileKey, nodeId) {
|
|
1825
|
-
const
|
|
1822
|
+
const document = data.document || data;
|
|
1826
1823
|
return {
|
|
1827
1824
|
id: nodeId || fileKey,
|
|
1828
|
-
name:
|
|
1825
|
+
name: document.name || "\u672A\u547D\u540D\u8BBE\u8BA1\u7A3F",
|
|
1829
1826
|
platform: "figma",
|
|
1830
1827
|
url,
|
|
1831
|
-
width:
|
|
1832
|
-
height:
|
|
1828
|
+
width: document.absoluteBoundingBox?.width || 0,
|
|
1829
|
+
height: document.absoluteBoundingBox?.height || 0,
|
|
1833
1830
|
scale: 1,
|
|
1834
|
-
layers: this.parseFigmaLayers(
|
|
1835
|
-
styles: this.extractStylesFromDocument(
|
|
1831
|
+
layers: this.parseFigmaLayers(document.children || []),
|
|
1832
|
+
styles: this.extractStylesFromDocument(document),
|
|
1836
1833
|
assets: this.parseAssets(data.assets || []),
|
|
1837
1834
|
extractedAt: /* @__PURE__ */ new Date()
|
|
1838
1835
|
};
|
|
@@ -1928,7 +1925,7 @@ var FigmaMCPAdapter = class extends MCPAdapterBase {
|
|
|
1928
1925
|
/**
|
|
1929
1926
|
* 从文档提取全局样式
|
|
1930
1927
|
*/
|
|
1931
|
-
extractStylesFromDocument(
|
|
1928
|
+
extractStylesFromDocument(document) {
|
|
1932
1929
|
const styles = {
|
|
1933
1930
|
colors: [],
|
|
1934
1931
|
typography: [],
|
|
@@ -1954,7 +1951,7 @@ var FigmaMCPAdapter = class extends MCPAdapterBase {
|
|
|
1954
1951
|
node.children.forEach(traverse);
|
|
1955
1952
|
}
|
|
1956
1953
|
};
|
|
1957
|
-
traverse(
|
|
1954
|
+
traverse(document);
|
|
1958
1955
|
styles.colors = this.deduplicateColors(styles.colors);
|
|
1959
1956
|
styles.typography = this.deduplicateTypography(styles.typography);
|
|
1960
1957
|
return styles;
|
|
@@ -5621,8 +5618,8 @@ var CommandParser = class {
|
|
|
5621
5618
|
};
|
|
5622
5619
|
}
|
|
5623
5620
|
parseAtPath(input) {
|
|
5624
|
-
const
|
|
5625
|
-
if (!
|
|
5621
|
+
const path13 = input.slice(1).trim();
|
|
5622
|
+
if (!path13) {
|
|
5626
5623
|
return { success: false, error: "\u7F3A\u5C11\u6587\u4EF6\u8DEF\u5F84" };
|
|
5627
5624
|
}
|
|
5628
5625
|
return {
|
|
@@ -5630,7 +5627,7 @@ var CommandParser = class {
|
|
|
5630
5627
|
command: {
|
|
5631
5628
|
type: "at" /* AT */,
|
|
5632
5629
|
raw: input,
|
|
5633
|
-
path:
|
|
5630
|
+
path: path13
|
|
5634
5631
|
}
|
|
5635
5632
|
};
|
|
5636
5633
|
}
|
|
@@ -6474,8 +6471,10 @@ function createSpinner(message) {
|
|
|
6474
6471
|
stop: () => process.stdout.write(" ".repeat(message.length + 10) + "\r")
|
|
6475
6472
|
};
|
|
6476
6473
|
}
|
|
6477
|
-
var
|
|
6478
|
-
var
|
|
6474
|
+
var packageJsonPath = path4__namespace.resolve(__dirname, "../../package.json");
|
|
6475
|
+
var packageJson = JSON.parse(fsSync__namespace.readFileSync(packageJsonPath, "utf-8"));
|
|
6476
|
+
var CURRENT_VERSION = packageJson.version;
|
|
6477
|
+
var PACKAGE_NAME = packageJson.name;
|
|
6479
6478
|
async function handleUpdate(args, ctx) {
|
|
6480
6479
|
const options = {
|
|
6481
6480
|
check: args.includes("--check") || args.includes("-c"),
|
|
@@ -6502,6 +6501,9 @@ async function checkForUpdates() {
|
|
|
6502
6501
|
const latestVersion = await getLatestVersion();
|
|
6503
6502
|
if (!latestVersion) {
|
|
6504
6503
|
lines.push(chalk9__default.default.yellow("\u65E0\u6CD5\u83B7\u53D6\u6700\u65B0\u7248\u672C\u4FE1\u606F"));
|
|
6504
|
+
lines.push(chalk9__default.default.gray("\u53EF\u80FD\u539F\u56E0:"));
|
|
6505
|
+
lines.push(chalk9__default.default.gray(" 1. \u5305\u5C1A\u672A\u53D1\u5E03\u5230 npm"));
|
|
6506
|
+
lines.push(chalk9__default.default.gray(" 2. \u7F51\u7EDC\u8FDE\u63A5\u95EE\u9898"));
|
|
6505
6507
|
return { output: lines.join("\n") };
|
|
6506
6508
|
}
|
|
6507
6509
|
lines.push(chalk9__default.default.gray(` \u5F53\u524D\u7248\u672C: v${CURRENT_VERSION}`));
|
|
@@ -6520,43 +6522,70 @@ async function checkForUpdates() {
|
|
|
6520
6522
|
async function performUpdate(targetVersion) {
|
|
6521
6523
|
const lines = [];
|
|
6522
6524
|
lines.push(chalk9__default.default.cyan("\u6B63\u5728\u66F4\u65B0 sf-cli..."));
|
|
6525
|
+
lines.push(chalk9__default.default.gray(` \u5305\u540D: ${PACKAGE_NAME}`));
|
|
6526
|
+
lines.push(chalk9__default.default.gray(` \u5F53\u524D\u7248\u672C: v${CURRENT_VERSION}`));
|
|
6523
6527
|
try {
|
|
6524
6528
|
const latestVersion = await getLatestVersion();
|
|
6529
|
+
if (!latestVersion && !targetVersion) {
|
|
6530
|
+
lines.push(chalk9__default.default.yellow("\n\u26A0 \u65E0\u6CD5\u83B7\u53D6\u6700\u65B0\u7248\u672C\u4FE1\u606F"));
|
|
6531
|
+
lines.push(chalk9__default.default.gray("\n\u53EF\u80FD\u539F\u56E0:"));
|
|
6532
|
+
lines.push(chalk9__default.default.gray(" 1. \u5305\u5C1A\u672A\u53D1\u5E03\u5230 npm"));
|
|
6533
|
+
lines.push(chalk9__default.default.gray(" 2. \u7F51\u7EDC\u8FDE\u63A5\u95EE\u9898"));
|
|
6534
|
+
lines.push(chalk9__default.default.gray("\n\u60A8\u53EF\u4EE5\u5C1D\u8BD5\u624B\u52A8\u66F4\u65B0:"));
|
|
6535
|
+
lines.push(chalk9__default.default.cyan(` npm install -g ${PACKAGE_NAME}@latest`));
|
|
6536
|
+
return { output: lines.join("\n") };
|
|
6537
|
+
}
|
|
6525
6538
|
if (latestVersion === CURRENT_VERSION && !targetVersion) {
|
|
6526
|
-
lines.push(chalk9__default.default.green("\u2713 \u5DF2\u662F\u6700\u65B0\u7248\u672C\uFF0C\u65E0\u9700\u66F4\u65B0"));
|
|
6539
|
+
lines.push(chalk9__default.default.green("\n\u2713 \u5DF2\u662F\u6700\u65B0\u7248\u672C\uFF0C\u65E0\u9700\u66F4\u65B0"));
|
|
6527
6540
|
return { output: lines.join("\n") };
|
|
6528
6541
|
}
|
|
6529
6542
|
const packageSpec = targetVersion ? `${PACKAGE_NAME}@${targetVersion}` : `${PACKAGE_NAME}@latest`;
|
|
6530
6543
|
lines.push(chalk9__default.default.gray(` \u5B89\u88C5: ${packageSpec}`));
|
|
6531
|
-
await new Promise((
|
|
6544
|
+
const installResult = await new Promise((resolve4) => {
|
|
6532
6545
|
const proc = child_process.spawn("npm", ["install", "-g", packageSpec], {
|
|
6533
6546
|
stdio: "pipe",
|
|
6534
6547
|
shell: true
|
|
6535
6548
|
});
|
|
6549
|
+
let output = "";
|
|
6550
|
+
proc.stdout?.on("data", (data) => {
|
|
6551
|
+
output += data.toString();
|
|
6552
|
+
});
|
|
6553
|
+
proc.stderr?.on("data", (data) => {
|
|
6554
|
+
output += data.toString();
|
|
6555
|
+
});
|
|
6536
6556
|
proc.on("close", (code) => {
|
|
6537
|
-
|
|
6538
|
-
|
|
6539
|
-
|
|
6540
|
-
|
|
6541
|
-
}
|
|
6557
|
+
resolve4({
|
|
6558
|
+
success: code === 0,
|
|
6559
|
+
output
|
|
6560
|
+
});
|
|
6542
6561
|
});
|
|
6543
6562
|
proc.on("error", (err) => {
|
|
6544
|
-
|
|
6563
|
+
resolve4({
|
|
6564
|
+
success: false,
|
|
6565
|
+
output: err.message
|
|
6566
|
+
});
|
|
6545
6567
|
});
|
|
6546
6568
|
});
|
|
6547
|
-
|
|
6569
|
+
if (!installResult.success) {
|
|
6570
|
+
lines.push(chalk9__default.default.red("\n\u2717 \u66F4\u65B0\u5931\u8D25"));
|
|
6571
|
+
lines.push(chalk9__default.default.gray(installResult.output));
|
|
6572
|
+
lines.push(chalk9__default.default.gray("\n\u60A8\u53EF\u4EE5\u5C1D\u8BD5\u624B\u52A8\u66F4\u65B0:"));
|
|
6573
|
+
lines.push(chalk9__default.default.cyan(` npm install -g ${PACKAGE_NAME}@latest`));
|
|
6574
|
+
return { output: lines.join("\n") };
|
|
6575
|
+
}
|
|
6576
|
+
lines.push(chalk9__default.default.green("\n\u2713 \u66F4\u65B0\u5B8C\u6210!"));
|
|
6548
6577
|
lines.push(chalk9__default.default.gray(` \u65B0\u7248\u672C: v${targetVersion || latestVersion}`));
|
|
6549
6578
|
lines.push(chalk9__default.default.gray("\n\u8BF7\u91CD\u542F CLI \u4EE5\u4F7F\u7528\u65B0\u7248\u672C"));
|
|
6550
6579
|
} catch (error) {
|
|
6551
6580
|
lines.push(chalk9__default.default.red("\u66F4\u65B0\u5931\u8D25: " + error.message));
|
|
6552
6581
|
lines.push(chalk9__default.default.gray("\n\u60A8\u53EF\u4EE5\u5C1D\u8BD5\u624B\u52A8\u66F4\u65B0:"));
|
|
6553
|
-
lines.push(chalk9__default.default.
|
|
6582
|
+
lines.push(chalk9__default.default.cyan(` npm install -g ${PACKAGE_NAME}@latest`));
|
|
6554
6583
|
}
|
|
6555
6584
|
return { output: lines.join("\n") };
|
|
6556
6585
|
}
|
|
6557
6586
|
async function getLatestVersion() {
|
|
6558
6587
|
try {
|
|
6559
|
-
const result = await new Promise((
|
|
6588
|
+
const result = await new Promise((resolve4, reject) => {
|
|
6560
6589
|
const proc = child_process.spawn("npm", ["view", PACKAGE_NAME, "version"], {
|
|
6561
6590
|
stdio: "pipe",
|
|
6562
6591
|
shell: true
|
|
@@ -6566,13 +6595,17 @@ async function getLatestVersion() {
|
|
|
6566
6595
|
output += data.toString();
|
|
6567
6596
|
});
|
|
6568
6597
|
proc.on("close", (code) => {
|
|
6569
|
-
if (code === 0) {
|
|
6570
|
-
|
|
6598
|
+
if (code === 0 && output.trim()) {
|
|
6599
|
+
resolve4(output.trim());
|
|
6571
6600
|
} else {
|
|
6572
6601
|
reject(new Error("Failed to get version"));
|
|
6573
6602
|
}
|
|
6574
6603
|
});
|
|
6575
6604
|
proc.on("error", reject);
|
|
6605
|
+
setTimeout(() => {
|
|
6606
|
+
proc.kill();
|
|
6607
|
+
reject(new Error("Timeout"));
|
|
6608
|
+
}, 1e4);
|
|
6576
6609
|
});
|
|
6577
6610
|
return result || null;
|
|
6578
6611
|
} catch {
|
|
@@ -7254,9 +7287,11 @@ ${generateConfirmationPrompt(e.point)}`) + chalk9__default.default.cyan(`
|
|
|
7254
7287
|
throw e;
|
|
7255
7288
|
}
|
|
7256
7289
|
}
|
|
7257
|
-
|
|
7258
|
-
|
|
7259
|
-
var
|
|
7290
|
+
|
|
7291
|
+
// src/commands/runner.ts
|
|
7292
|
+
var packageJsonPath2 = path4__namespace.resolve(__dirname, "../../package.json");
|
|
7293
|
+
var packageJson2 = JSON.parse(fsSync__namespace.readFileSync(packageJsonPath2, "utf-8"));
|
|
7294
|
+
var VERSION2 = packageJson2.version;
|
|
7260
7295
|
async function runSlashCommand(command, args, ctx) {
|
|
7261
7296
|
const normalizedCommand = normalizeCommand(command);
|
|
7262
7297
|
switch (normalizedCommand) {
|
|
@@ -7351,7 +7386,7 @@ async function executeShell(command, ctx) {
|
|
|
7351
7386
|
\u547D\u4EE4 "${command}" \u53EF\u80FD\u4F1A\u5220\u9664\u91CD\u8981\u6587\u4EF6`) + chalk9__default.default.gray("\n\u4F7F\u7528 yolo \u6A21\u5F0F\u5F3A\u5236\u6267\u884C")
|
|
7352
7387
|
};
|
|
7353
7388
|
}
|
|
7354
|
-
return new Promise((
|
|
7389
|
+
return new Promise((resolve4) => {
|
|
7355
7390
|
const shell = child_process.spawn(command, [], {
|
|
7356
7391
|
shell: true,
|
|
7357
7392
|
cwd: ctx.options.workingDirectory
|
|
@@ -7376,11 +7411,11 @@ async function executeShell(command, ctx) {
|
|
|
7376
7411
|
output += chalk9__default.default.red(`
|
|
7377
7412
|
\u9000\u51FA\u7801: ${code}`);
|
|
7378
7413
|
}
|
|
7379
|
-
|
|
7414
|
+
resolve4({ output: output || chalk9__default.default.gray("(\u65E0\u8F93\u51FA)") });
|
|
7380
7415
|
});
|
|
7381
7416
|
setTimeout(() => {
|
|
7382
7417
|
shell.kill();
|
|
7383
|
-
|
|
7418
|
+
resolve4({
|
|
7384
7419
|
output: chalk9__default.default.yellow("\u547D\u4EE4\u6267\u884C\u8D85\u65F6\uFF0C\u5DF2\u7EC8\u6B62")
|
|
7385
7420
|
});
|
|
7386
7421
|
}, 6e4);
|