@cnbcool/cnb-api-generate 2.3.0 → 2.3.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/built/codegen/printer/printer-skill-client-modules.js +4 -1
- package/built/codegen/printer/printer-skills-client-loader.js +85 -0
- package/built/codegen/printer/printer-ts-ast-to-js-file.js +18 -5
- package/built/skills-tools/generate-skill-cli-scripts.js +4 -1
- package/built/skills.js +5 -2
- package/client/lib/execute-action.ts +3 -14
- package/package.json +1 -1
|
@@ -39,8 +39,10 @@ const fs = __importStar(require("fs"));
|
|
|
39
39
|
const get_skills_codegen_target_1 = require("../../utils/get-skills-codegen-target");
|
|
40
40
|
const get_codegen_target_1 = require("../../utils/get-codegen-target");
|
|
41
41
|
const printer_ts_ast_to_js_file_1 = require("./printer-ts-ast-to-js-file");
|
|
42
|
-
async function printerSkillClientModules(data) {
|
|
42
|
+
async function printerSkillClientModules(data, loaderMap) {
|
|
43
43
|
const { filename, astNode, descriptionMap, category, source } = data;
|
|
44
|
+
loaderMap[category] = loaderMap[category] || {};
|
|
45
|
+
loaderMap[category][filename] = `../modules/${category}/${filename}`;
|
|
44
46
|
const filePath = path.join((0, get_codegen_target_1.getCodegenTarget)(), 'apis', category, `${filename}.ts`);
|
|
45
47
|
const skillScriptDir = (0, get_skills_codegen_target_1.getSkillScriptCodegenTarget)();
|
|
46
48
|
const skillScriptModulesDir = path.join(skillScriptDir, 'modules');
|
|
@@ -52,4 +54,5 @@ async function printerSkillClientModules(data) {
|
|
|
52
54
|
fs.mkdirSync(skillScriptModulesCategoryDir);
|
|
53
55
|
}
|
|
54
56
|
await (0, printer_ts_ast_to_js_file_1.printerTsASTToJsFile)(filePath, skillScriptModulesCategoryDir);
|
|
57
|
+
return loaderMap;
|
|
55
58
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.printerSkillsClientLoader = printerSkillsClientLoader;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const debug_1 = __importDefault(require("debug"));
|
|
43
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
44
|
+
const get_skills_codegen_target_1 = require("../../utils/get-skills-codegen-target");
|
|
45
|
+
const generate_import_ast_node_1 = require("../api/generate-import-ast-node");
|
|
46
|
+
const to_camel_case_1 = require("../../utils/to-camel-case");
|
|
47
|
+
const format_interface_name_1 = require("../../utils/format-interface-name");
|
|
48
|
+
const printer_ts_ast_to_js_file_1 = require("./printer-ts-ast-to-js-file");
|
|
49
|
+
const logger = (0, debug_1.default)('csg:cli-loader');
|
|
50
|
+
async function printerSkillsClientLoader(loaderMap) {
|
|
51
|
+
const skillScriptDir = (0, get_skills_codegen_target_1.getSkillScriptCodegenTarget)();
|
|
52
|
+
const skillScriptLoaderDir = path.join(skillScriptDir, 'loader');
|
|
53
|
+
if (!fs.existsSync(skillScriptLoaderDir)) {
|
|
54
|
+
fs.mkdirSync(skillScriptLoaderDir);
|
|
55
|
+
}
|
|
56
|
+
const importASTList = [];
|
|
57
|
+
const mapProperties = [];
|
|
58
|
+
for (const [category, modules] of Object.entries(loaderMap)) {
|
|
59
|
+
const toolProperties = [];
|
|
60
|
+
for (const [filename, filePath] of Object.entries(modules)) {
|
|
61
|
+
const importName = `${(0, to_camel_case_1.toCamelCase)(category)}${(0, format_interface_name_1.formatInterfaceName)(filename)}`;
|
|
62
|
+
importASTList.push((0, generate_import_ast_node_1.generateDefaultImportAstNode)(importName, filePath, false));
|
|
63
|
+
toolProperties.push(typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createStringLiteral(filename), typescript_1.default.factory.createIdentifier(importName)));
|
|
64
|
+
}
|
|
65
|
+
mapProperties.push(typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createStringLiteral(category), typescript_1.default.factory.createObjectLiteralExpression(toolProperties, true)));
|
|
66
|
+
}
|
|
67
|
+
// const loaderMap = { ... }
|
|
68
|
+
const loaderMapStatement = typescript_1.default.factory.createVariableStatement(undefined, typescript_1.default.factory.createVariableDeclarationList([
|
|
69
|
+
typescript_1.default.factory.createVariableDeclaration('loaderMap', undefined, undefined, typescript_1.default.factory.createObjectLiteralExpression(mapProperties, true)),
|
|
70
|
+
], typescript_1.default.NodeFlags.Const));
|
|
71
|
+
// export function getLoader(module: string, tool: string) { return loaderMap[module]?.[tool]; }
|
|
72
|
+
const getLoaderFunction = typescript_1.default.factory.createFunctionDeclaration([typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.ExportKeyword)], undefined, 'getLoader', undefined, [
|
|
73
|
+
typescript_1.default.factory.createParameterDeclaration(undefined, undefined, 'module', undefined, typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.StringKeyword)),
|
|
74
|
+
typescript_1.default.factory.createParameterDeclaration(undefined, undefined, 'tool', undefined, typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.StringKeyword)),
|
|
75
|
+
], undefined, typescript_1.default.factory.createBlock([
|
|
76
|
+
typescript_1.default.factory.createReturnStatement(typescript_1.default.factory.createElementAccessChain(typescript_1.default.factory.createElementAccessExpression(typescript_1.default.factory.createIdentifier('loaderMap'), typescript_1.default.factory.createIdentifier('module')), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionDotToken), typescript_1.default.factory.createIdentifier('tool'))),
|
|
77
|
+
], true));
|
|
78
|
+
const sourceFile = typescript_1.default.factory.createSourceFile([...importASTList, loaderMapStatement, getLoaderFunction], typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EndOfFileToken), typescript_1.default.NodeFlags.None);
|
|
79
|
+
const printer = typescript_1.default.createPrinter({
|
|
80
|
+
newLine: typescript_1.default.NewLineKind.LineFeed,
|
|
81
|
+
});
|
|
82
|
+
const result = printer.printFile(sourceFile);
|
|
83
|
+
await (0, printer_ts_ast_to_js_file_1.printerTsCodeToJsFile)(result, 'index', skillScriptLoaderDir);
|
|
84
|
+
logger(`generate skill cli loader: ${skillScriptLoaderDir}/index.js`);
|
|
85
|
+
}
|
|
@@ -37,17 +37,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.printerTsASTToJsFile = printerTsASTToJsFile;
|
|
40
|
+
exports.printerTsCodeToJsFile = printerTsCodeToJsFile;
|
|
40
41
|
const babel = __importStar(require("@babel/core"));
|
|
41
42
|
const fs = __importStar(require("fs"));
|
|
42
43
|
const path = __importStar(require("path"));
|
|
43
44
|
const debug_1 = __importDefault(require("debug"));
|
|
44
45
|
const skills_1 = require("../../constants/skills");
|
|
45
46
|
const logger = (0, debug_1.default)('csg:babel');
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const result = babel.transformSync(tsCode, {
|
|
50
|
-
filename: base,
|
|
47
|
+
function transformTsToJs(tsCode, filename) {
|
|
48
|
+
return babel.transformSync(tsCode, {
|
|
49
|
+
filename,
|
|
51
50
|
presets: [
|
|
52
51
|
['@babel/preset-env', { targets: { node: '20' } }],
|
|
53
52
|
'@babel/preset-typescript',
|
|
@@ -63,6 +62,11 @@ async function printerTsASTToJsFile(sourceFile, outputDir) {
|
|
|
63
62
|
ast: false,
|
|
64
63
|
sourceMaps: false,
|
|
65
64
|
});
|
|
65
|
+
}
|
|
66
|
+
async function printerTsASTToJsFile(sourceFile, outputDir) {
|
|
67
|
+
const tsCode = fs.readFileSync(sourceFile, 'utf8');
|
|
68
|
+
const { name, base } = path.parse(sourceFile);
|
|
69
|
+
const result = transformTsToJs(tsCode, base);
|
|
66
70
|
const targetDir = path.join(outputDir);
|
|
67
71
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
68
72
|
if (result === null || result === void 0 ? void 0 : result.code) {
|
|
@@ -70,3 +74,12 @@ async function printerTsASTToJsFile(sourceFile, outputDir) {
|
|
|
70
74
|
logger(`print: ${sourceFile} -> ${path.join(targetDir, `${name}.js`)}`);
|
|
71
75
|
}
|
|
72
76
|
}
|
|
77
|
+
async function printerTsCodeToJsFile(tsCode, outputName, outputDir) {
|
|
78
|
+
const result = transformTsToJs(tsCode, `${outputName}.ts`);
|
|
79
|
+
const targetDir = path.join(outputDir);
|
|
80
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
81
|
+
if (result === null || result === void 0 ? void 0 : result.code) {
|
|
82
|
+
fs.writeFileSync(path.join(targetDir, `${outputName}.js`), result.code);
|
|
83
|
+
logger(`print: [code] -> ${path.join(targetDir, `${outputName}.js`)}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -8,13 +8,16 @@ const debug_1 = __importDefault(require("debug"));
|
|
|
8
8
|
const printer_skill_client_modules_1 = require("../codegen/printer/printer-skill-client-modules");
|
|
9
9
|
const logger = (0, debug_1.default)('csg:cli-scripts');
|
|
10
10
|
async function generateSkillCliScripts(requestMap) {
|
|
11
|
+
// 加载器Map
|
|
12
|
+
const loaderMap = {};
|
|
11
13
|
// eslint-disable-next-line no-restricted-syntax
|
|
12
14
|
for (const key in requestMap) {
|
|
13
15
|
const pathItem = requestMap[key];
|
|
14
16
|
// eslint-disable-next-line no-restricted-syntax
|
|
15
17
|
for (const method in pathItem) {
|
|
16
18
|
logger(`generate skill cli scripts: [${method}] ${key} `);
|
|
17
|
-
await (0, printer_skill_client_modules_1.printerSkillClientModules)(pathItem[method]);
|
|
19
|
+
await (0, printer_skill_client_modules_1.printerSkillClientModules)(pathItem[method], loaderMap);
|
|
18
20
|
}
|
|
19
21
|
}
|
|
22
|
+
return loaderMap;
|
|
20
23
|
}
|
package/built/skills.js
CHANGED
|
@@ -12,6 +12,7 @@ const generate_skill_cli_help_1 = require("./skills-tools/generate-skill-cli-hel
|
|
|
12
12
|
const generate_skill_cli_scripts_1 = require("./skills-tools/generate-skill-cli-scripts");
|
|
13
13
|
const generate_skill_md_1 = require("./skills-tools/generate-skill-md");
|
|
14
14
|
const generate_config_1 = require("./skills-tools/generate-config");
|
|
15
|
+
const printer_skills_client_loader_1 = require("./codegen/printer/printer-skills-client-loader");
|
|
15
16
|
const logger = (0, debug_1.default)('csg:main');
|
|
16
17
|
async function start() {
|
|
17
18
|
process.env.CNB_GENERATE_MODE = 'skills';
|
|
@@ -22,12 +23,14 @@ async function start() {
|
|
|
22
23
|
(0, progress_1.infoProgress)(`Output Dir: ${config.outputDir}`, configSpinner);
|
|
23
24
|
const { requestMap, defintionsMap } = await (0, generate_entrypoint_1.generateEntrypoint)();
|
|
24
25
|
logger(`generate skills start`);
|
|
26
|
+
// 编译ts转为js
|
|
27
|
+
const loaderMap = await (0, generate_skill_cli_scripts_1.generateSkillCliScripts)(requestMap);
|
|
28
|
+
// 生成loader
|
|
29
|
+
await (0, printer_skills_client_loader_1.printerSkillsClientLoader)(loaderMap);
|
|
25
30
|
// 生成help数据
|
|
26
31
|
const helpData = (0, generate_skill_cli_help_1.generateSkillCliHelp)(requestMap, defintionsMap);
|
|
27
32
|
// 编译core
|
|
28
33
|
await (0, printer_skills_client_core_1.printerSkillsClientCore)(helpData);
|
|
29
|
-
// 编译ts转为js
|
|
30
|
-
await (0, generate_skill_cli_scripts_1.generateSkillCliScripts)(requestMap);
|
|
31
34
|
// 编译skills.md
|
|
32
35
|
await (0, generate_skill_md_1.generateSkillMd)(helpData, requestMap);
|
|
33
36
|
// 生成config文件
|
|
@@ -5,24 +5,13 @@ import { showShort, resolveShortcut, type ResolvedShortcut } from '../shortcuts'
|
|
|
5
5
|
import { handleUpload } from '../utils/upload';
|
|
6
6
|
import { formatParams } from './format-params';
|
|
7
7
|
import { formatOutput } from './format-output';
|
|
8
|
-
|
|
8
|
+
// @ts-ignore
|
|
9
|
+
import {getLoader} from '../../loader';
|
|
9
10
|
/**
|
|
10
11
|
* 加载 tool 模块并返回其 default 导出函数
|
|
11
12
|
*/
|
|
12
13
|
function loadToolFunction(moduleName: string, toolName: string): any {
|
|
13
|
-
const
|
|
14
|
-
__dirname,
|
|
15
|
-
'../../modules',
|
|
16
|
-
`${moduleName}/${toolName}.js`,
|
|
17
|
-
);
|
|
18
|
-
|
|
19
|
-
if (!fs.existsSync(toolPath)) {
|
|
20
|
-
console.error(`工具文件不存在: ${toolPath}`);
|
|
21
|
-
process.exit(1);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const toolModule = require(toolPath);
|
|
25
|
-
const toolFunction = toolModule.default;
|
|
14
|
+
const toolFunction = getLoader(moduleName, toolName);
|
|
26
15
|
|
|
27
16
|
if (!toolFunction) {
|
|
28
17
|
console.error(`工具函数不存在`);
|