@cnbcool/cnb-api-generate 2.2.2 → 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.
@@ -39,13 +39,12 @@ 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
- const skillScriptDir = path.join((0, get_skills_codegen_target_1.getSkillCodegenTarget)(), 'scripts');
46
- if (!fs.existsSync(skillScriptDir)) {
47
- fs.mkdirSync(skillScriptDir);
48
- }
47
+ const skillScriptDir = (0, get_skills_codegen_target_1.getSkillScriptCodegenTarget)();
49
48
  const skillScriptModulesDir = path.join(skillScriptDir, 'modules');
50
49
  if (!fs.existsSync(skillScriptModulesDir)) {
51
50
  fs.mkdirSync(skillScriptModulesDir);
@@ -55,4 +54,5 @@ async function printerSkillClientModules(data) {
55
54
  fs.mkdirSync(skillScriptModulesCategoryDir);
56
55
  }
57
56
  await (0, printer_ts_ast_to_js_file_1.printerTsASTToJsFile)(filePath, skillScriptModulesCategoryDir);
57
+ return loaderMap;
58
58
  }
@@ -49,10 +49,7 @@ async function printerSkillsClientCore(helpData) {
49
49
  const packageDir = path.resolve(__dirname, '../../../');
50
50
  const clientDir = path.join(packageDir, 'client');
51
51
  const requestFiles = glob_1.glob.sync(`${clientDir}/**/*.ts`);
52
- const skillScriptDir = path.join((0, get_skills_codegen_target_1.getSkillCodegenTarget)(), 'scripts');
53
- if (!fs.existsSync(skillScriptDir)) {
54
- fs.mkdirSync(skillScriptDir);
55
- }
52
+ const skillScriptDir = (0, get_skills_codegen_target_1.getSkillScriptCodegenTarget)();
56
53
  const skillScriptCoreDir = path.join(skillScriptDir, 'core');
57
54
  if (!fs.existsSync(skillScriptCoreDir)) {
58
55
  fs.mkdirSync(skillScriptCoreDir);
@@ -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
- async function printerTsASTToJsFile(sourceFile, outputDir) {
47
- const tsCode = fs.readFileSync(sourceFile, 'utf8');
48
- const { name, base } = path.parse(sourceFile);
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
+ }
@@ -9,10 +9,7 @@ const fs_1 = __importDefault(require("fs"));
9
9
  const get_skills_codegen_target_1 = require("../utils/get-skills-codegen-target");
10
10
  const constants_1 = require("../constants");
11
11
  const generateConfig = () => {
12
- const skillScriptDir = path_1.default.join((0, get_skills_codegen_target_1.getSkillCodegenTarget)(), 'scripts');
13
- if (!fs_1.default.existsSync(skillScriptDir)) {
14
- fs_1.default.mkdirSync(skillScriptDir);
15
- }
12
+ const skillScriptDir = (0, get_skills_codegen_target_1.getSkillScriptCodegenTarget)();
16
13
  const skillScriptCoreDir = path_1.default.join(skillScriptDir, 'core');
17
14
  if (!fs_1.default.existsSync(skillScriptCoreDir)) {
18
15
  fs_1.default.mkdirSync(skillScriptCoreDir);
@@ -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文件
@@ -4,7 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getSkillCodegenTarget = getSkillCodegenTarget;
7
+ exports.getSkillScriptCodegenTarget = getSkillScriptCodegenTarget;
7
8
  const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
8
10
  const get_config_1 = require("./get-config");
9
11
  function getSkillCodegenTarget() {
10
12
  const config = (0, get_config_1.getConfig)();
@@ -13,3 +15,11 @@ function getSkillCodegenTarget() {
13
15
  }
14
16
  return config.skillsOutputDir;
15
17
  }
18
+ function getSkillScriptCodegenTarget() {
19
+ const config = (0, get_config_1.getConfig)();
20
+ const targetDir = config.skillScriptOutputDir || path_1.default.join(config.skillsOutputDir, 'scripts');
21
+ if (!fs_1.default.existsSync(targetDir)) {
22
+ fs_1.default.mkdirSync(targetDir, { recursive: true });
23
+ }
24
+ return targetDir;
25
+ }
@@ -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 toolPath = path.join(
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(`工具函数不存在`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cnbcool/cnb-api-generate",
3
- "version": "2.2.2",
3
+ "version": "2.3.1",
4
4
  "main": "./built/index.js",
5
5
  "module": "./src/index.ts",
6
6
  "types": "./src/index.ts",