@cnbcool/cnb-api-generate 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/README.md +399 -0
- package/bin/cag.js +3 -0
- package/bin/csg.js +3 -0
- package/built/codegen/action/generate-redux-action-ast-node.js +85 -0
- package/built/codegen/action/generate-redux-action-call-api-function-param-ast-node.js +40 -0
- package/built/codegen/action/generate-redux-action-normal-params-ast-node.js +52 -0
- package/built/codegen/action/generate-redux-action-params-binding-element-ast-node.js +40 -0
- package/built/codegen/action/generate-redux-action-params-type-literal-ast-node.js +58 -0
- package/built/codegen/api/generate-api-error-response-ast-node.js +83 -0
- package/built/codegen/api/generate-api-function-ast-node.js +133 -0
- package/built/codegen/api/generate-api-function-request-params-type-ast-node.js +59 -0
- package/built/codegen/api/generate-api-response-return-type-content.js +80 -0
- package/built/codegen/api/generate-api-success-response-ast-node.js +84 -0
- package/built/codegen/api/generate-function-content-ast-node.js +104 -0
- package/built/codegen/api/generate-function-normal-params-ast-node.js +49 -0
- package/built/codegen/api/generate-function-params-ast-node.js +249 -0
- package/built/codegen/api/generate-function-refs-type-params-ast-node.js +102 -0
- package/built/codegen/api/generate-import-ast-node.js +58 -0
- package/built/codegen/api/generate-request-function.js +81 -0
- package/built/codegen/api/generate-request-url-ast-node.js +98 -0
- package/built/codegen/enum/generate-enum-ast-node.js +95 -0
- package/built/codegen/enum/generate-enum-content-ast-node.js +74 -0
- package/built/codegen/interface/generate-import-interface-ast-node.js +47 -0
- package/built/codegen/interface/generate-interface-anchor-ast-node.js +25 -0
- package/built/codegen/interface/generate-interface-ast-node.js +322 -0
- package/built/codegen/interface/generate-interface-desc-ast-node.js +51 -0
- package/built/codegen/interface/generate-interface-entrance.js +110 -0
- package/built/codegen/printer/printer-skill-client-modules.js +58 -0
- package/built/codegen/printer/printer-skills-client-core.js +69 -0
- package/built/codegen/printer/printer-swagger-api-to-file.js +128 -0
- package/built/codegen/printer/printer-swagger-definitions-to-file.js +81 -0
- package/built/codegen/printer/printer-ts-ast-to-js-file.js +72 -0
- package/built/codegen/record/generate-record-anchor-ast-node.js +25 -0
- package/built/codegen/record/generate-record-ast-node.js +134 -0
- package/built/codegen/swagger-definitions-to-ast-node.js +36 -0
- package/built/codegen/types/md-array-type-content-ast-node.js +46 -0
- package/built/constants/actions.js +8 -0
- package/built/constants/definitions.js +20 -0
- package/built/constants/file.js +12 -0
- package/built/constants/index.js +20 -0
- package/built/constants/prettier.js +4 -0
- package/built/constants/request.js +35 -0
- package/built/constants/skills.js +5 -0
- package/built/generate-api.js +36 -0
- package/built/generate-defintions.js +32 -0
- package/built/generate-entrypoint.js +130 -0
- package/built/index.js +19 -0
- package/built/interface/index.js +16 -0
- package/built/skills-tools/generate-config.js +28 -0
- package/built/skills-tools/generate-skill-cli-help.js +156 -0
- package/built/skills-tools/generate-skill-cli-scripts.js +20 -0
- package/built/skills-tools/generate-skill-md.js +25 -0
- package/built/skills.js +36 -0
- package/built/test.js +1 -0
- package/built/utils/camel-to-kebab.js +13 -0
- package/built/utils/comment-line-break.js +6 -0
- package/built/utils/filter-api-param.js +64 -0
- package/built/utils/format-interface-name.js +12 -0
- package/built/utils/format-type-name.js +12 -0
- package/built/utils/gen-operation-id.js +24 -0
- package/built/utils/generate-map-item.js +16 -0
- package/built/utils/get-codegen-target.js +8 -0
- package/built/utils/get-config.js +68 -0
- package/built/utils/get-defintion-name.js +8 -0
- package/built/utils/get-defintion-type.js +13 -0
- package/built/utils/get-generate-license.js +39 -0
- package/built/utils/get-keyword-type-node.js +60 -0
- package/built/utils/get-printer-file-prefix.js +21 -0
- package/built/utils/get-skills-codegen-target.js +15 -0
- package/built/utils/get-swagger-file.js +60 -0
- package/built/utils/inject-param-to-path.js +12 -0
- package/built/utils/is-english-only.js +8 -0
- package/built/utils/is-skills.js +6 -0
- package/built/utils/lower-first-char.js +8 -0
- package/built/utils/path-to-camel-case.js +31 -0
- package/built/utils/progress.js +76 -0
- package/built/utils/to-camel-case.js +8 -0
- package/built/utils/translations-keyworad-to-string.js +55 -0
- package/client/core.ts +114 -0
- package/client/fetch-response-handler.ts +36 -0
- package/client/index.ts +377 -0
- package/client/modules.help.ts +36 -0
- package/client/schemaToJson.ts +26 -0
- package/client/shortcuts.ts +208 -0
- package/client/tools.help.ts +104 -0
- package/client/utils/convert-link.ts +139 -0
- package/client/utils/generate-unique-id.ts +3 -0
- package/package.json +75 -0
- package/skills-template/SKILL.md +100 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.generateSkillCliHelp = generateSkillCliHelp;
|
|
7
|
+
const debug_1 = __importDefault(require("debug"));
|
|
8
|
+
const get_defintion_name_1 = require("../utils/get-defintion-name");
|
|
9
|
+
const logger = (0, debug_1.default)('csg:cli');
|
|
10
|
+
function isBaseApiParamArrayData(schema) {
|
|
11
|
+
return schema.type && schema.type === 'array';
|
|
12
|
+
}
|
|
13
|
+
function generateSkillCliHelp(requestMap, defintionsMap) {
|
|
14
|
+
var _a, _b, _c;
|
|
15
|
+
// 按照分类分为总help和每个模块的help
|
|
16
|
+
const mainHelp = {};
|
|
17
|
+
const modulesHelp = {};
|
|
18
|
+
for (const [path, pathItem] of Object.entries(requestMap)) {
|
|
19
|
+
for (const [method, methodItem] of Object.entries(pathItem)) {
|
|
20
|
+
mainHelp[methodItem.category] = mainHelp[methodItem.category]
|
|
21
|
+
? (mainHelp[methodItem.category] += 1)
|
|
22
|
+
: 1;
|
|
23
|
+
if (!modulesHelp[methodItem.category]) {
|
|
24
|
+
modulesHelp[methodItem.category] = {};
|
|
25
|
+
}
|
|
26
|
+
modulesHelp[methodItem.category][methodItem.filename] = {
|
|
27
|
+
path: methodItem.path,
|
|
28
|
+
method: methodItem.method,
|
|
29
|
+
category: methodItem.category,
|
|
30
|
+
filename: methodItem.filename,
|
|
31
|
+
summary: (methodItem.summary || '')
|
|
32
|
+
.replaceAll('\n', '')
|
|
33
|
+
.replaceAll(' *', ''),
|
|
34
|
+
description: (methodItem.description || '')
|
|
35
|
+
.replaceAll('\n', '')
|
|
36
|
+
.replaceAll(' *', ''),
|
|
37
|
+
help: {
|
|
38
|
+
parameter: {},
|
|
39
|
+
response: {},
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
// 获取调用参数配置
|
|
43
|
+
const { parameters } = methodItem.original;
|
|
44
|
+
if (parameters) {
|
|
45
|
+
for (const parameter of parameters) {
|
|
46
|
+
const item = {
|
|
47
|
+
type: parameter.type === 'integer' ? 'number' : parameter.type,
|
|
48
|
+
default: parameter.default,
|
|
49
|
+
description: parameter.description,
|
|
50
|
+
name: parameter.name,
|
|
51
|
+
required: parameter.required || false,
|
|
52
|
+
enum: parameter.enum,
|
|
53
|
+
schema: undefined,
|
|
54
|
+
};
|
|
55
|
+
// 带有锚点的参数
|
|
56
|
+
if (parameter.schema) {
|
|
57
|
+
item.schema = {};
|
|
58
|
+
let $ref;
|
|
59
|
+
if (isBaseApiParamArrayData(parameter.schema)) {
|
|
60
|
+
$ref = (_a = parameter.schema.items) === null || _a === void 0 ? void 0 : _a.$ref;
|
|
61
|
+
item.schema.type = 'array';
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
$ref = parameter.schema.$ref;
|
|
65
|
+
item.schema.type = 'object';
|
|
66
|
+
}
|
|
67
|
+
if ($ref) {
|
|
68
|
+
const defintionName = (0, get_defintion_name_1.getDefinitionName)($ref);
|
|
69
|
+
const defintion = defintionsMap[defintionName];
|
|
70
|
+
if (item.schema.type === 'array') {
|
|
71
|
+
item.schema.items = {
|
|
72
|
+
type: 'object',
|
|
73
|
+
properties: { ...defintion.jsonData },
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
item.schema.properties = { ...defintion.jsonData };
|
|
78
|
+
}
|
|
79
|
+
// 没有$ref
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
item.schema = parameter.schema;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (!((_b = modulesHelp[methodItem.category][methodItem.filename].help
|
|
86
|
+
.parameter) === null || _b === void 0 ? void 0 : _b[parameter.in])) {
|
|
87
|
+
modulesHelp[methodItem.category][methodItem.filename].help.parameter[parameter.in] = {};
|
|
88
|
+
}
|
|
89
|
+
// item不为空对象
|
|
90
|
+
switch (parameter.in) {
|
|
91
|
+
case 'path':
|
|
92
|
+
case 'query':
|
|
93
|
+
modulesHelp[methodItem.category][methodItem.filename].help.parameter[parameter.in][parameter.name] = item;
|
|
94
|
+
break;
|
|
95
|
+
case 'body':
|
|
96
|
+
modulesHelp[methodItem.category][methodItem.filename].help.parameter.body = item;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// 获取返回数据
|
|
102
|
+
const { responses } = methodItem.original;
|
|
103
|
+
if (responses) {
|
|
104
|
+
for (const [statusCode, response] of Object.entries(responses)) {
|
|
105
|
+
const item = {
|
|
106
|
+
description: response.description,
|
|
107
|
+
schema: {
|
|
108
|
+
type: 'object',
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
if (response.schema) {
|
|
112
|
+
let $ref;
|
|
113
|
+
if (isBaseApiParamArrayData(response.schema)) {
|
|
114
|
+
$ref = (_c = response.schema.items) === null || _c === void 0 ? void 0 : _c.$ref;
|
|
115
|
+
item.schema.type = 'array';
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
$ref = response.schema.$ref;
|
|
119
|
+
item.schema.type = 'object';
|
|
120
|
+
}
|
|
121
|
+
if ($ref) {
|
|
122
|
+
const defintionName = (0, get_defintion_name_1.getDefinitionName)($ref);
|
|
123
|
+
const defintion = defintionsMap[defintionName];
|
|
124
|
+
if (item.schema.type === 'array') {
|
|
125
|
+
item.schema.items = {
|
|
126
|
+
type: 'object',
|
|
127
|
+
properties: defintion.jsonData,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
item.schema.properties = defintion.jsonData;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
if (item.schema.type === 'array') {
|
|
136
|
+
item.schema.items = {
|
|
137
|
+
type: 'object',
|
|
138
|
+
properties: {},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
item.schema.properties = {};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
modulesHelp[methodItem.category][methodItem.filename].help.response[statusCode] = item;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
logger(`generate skills cli help success -> [${method}] ${path}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
mainHelp,
|
|
154
|
+
modulesHelp,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.generateSkillCliScripts = generateSkillCliScripts;
|
|
7
|
+
const debug_1 = __importDefault(require("debug"));
|
|
8
|
+
const printer_skill_client_modules_1 = require("../codegen/printer/printer-skill-client-modules");
|
|
9
|
+
const logger = (0, debug_1.default)('csg:cli-scripts');
|
|
10
|
+
async function generateSkillCliScripts(requestMap) {
|
|
11
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
12
|
+
for (const key in requestMap) {
|
|
13
|
+
const pathItem = requestMap[key];
|
|
14
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
15
|
+
for (const method in pathItem) {
|
|
16
|
+
logger(`generate skill cli scripts: [${method}] ${key} `);
|
|
17
|
+
await (0, printer_skill_client_modules_1.printerSkillClientModules)(pathItem[method]);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.generateSkillMd = generateSkillMd;
|
|
7
|
+
const debug_1 = __importDefault(require("debug"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const get_skills_codegen_target_1 = require("../utils/get-skills-codegen-target");
|
|
11
|
+
const get_config_1 = require("../utils/get-config");
|
|
12
|
+
const skills_1 = require("../constants/skills");
|
|
13
|
+
const logger = (0, debug_1.default)('csg:skills');
|
|
14
|
+
async function generateSkillMd(helpData, requestMap) {
|
|
15
|
+
const skillMDTempateDir = path_1.default.join(__dirname, '../../skills-template');
|
|
16
|
+
const skillMDDir = path_1.default.join((0, get_skills_codegen_target_1.getSkillCodegenTarget)());
|
|
17
|
+
// 复制skills.md
|
|
18
|
+
const SKILL_MD = path_1.default.join(skillMDTempateDir, 'SKILL.md');
|
|
19
|
+
const targetSkillMD = path_1.default.join(skillMDDir, 'SKILL.md');
|
|
20
|
+
const skillMDContent = fs_1.default.readFileSync(SKILL_MD, 'utf8');
|
|
21
|
+
const config = (0, get_config_1.getConfig)();
|
|
22
|
+
const newSkillMDContent = skillMDContent.replaceAll('<$CNB_CLI_CMD$>', config.skillsDev ? skills_1.CNB_CLI_DEV_CMD : skills_1.CNB_CLI_PROD_CMD);
|
|
23
|
+
fs_1.default.writeFileSync(targetSkillMD, newSkillMDContent);
|
|
24
|
+
logger(`generate ${SKILL_MD} to ${targetSkillMD}`);
|
|
25
|
+
}
|
package/built/skills.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const debug_1 = __importDefault(require("debug"));
|
|
7
|
+
const get_config_1 = require("./utils/get-config");
|
|
8
|
+
const progress_1 = require("./utils/progress");
|
|
9
|
+
const generate_entrypoint_1 = require("./generate-entrypoint");
|
|
10
|
+
const printer_skills_client_core_1 = require("./codegen/printer/printer-skills-client-core");
|
|
11
|
+
const generate_skill_cli_help_1 = require("./skills-tools/generate-skill-cli-help");
|
|
12
|
+
const generate_skill_cli_scripts_1 = require("./skills-tools/generate-skill-cli-scripts");
|
|
13
|
+
const generate_skill_md_1 = require("./skills-tools/generate-skill-md");
|
|
14
|
+
const generate_config_1 = require("./skills-tools/generate-config");
|
|
15
|
+
const logger = (0, debug_1.default)('csg:main');
|
|
16
|
+
async function start() {
|
|
17
|
+
process.env.CNB_GENERATE_MODE = 'skills';
|
|
18
|
+
const configSpinner = (0, progress_1.startProgress)('get config...');
|
|
19
|
+
const config = (0, get_config_1.getConfig)();
|
|
20
|
+
(0, progress_1.successProgress)('Get CSG Config Success!', configSpinner);
|
|
21
|
+
(0, progress_1.infoProgress)(`Swagger File: ${config.target}`, configSpinner);
|
|
22
|
+
(0, progress_1.infoProgress)(`Output Dir: ${config.outputDir}`, configSpinner);
|
|
23
|
+
const { requestMap, defintionsMap } = await (0, generate_entrypoint_1.generateEntrypoint)();
|
|
24
|
+
logger(`generate skills start`);
|
|
25
|
+
// 生成help数据
|
|
26
|
+
const helpData = (0, generate_skill_cli_help_1.generateSkillCliHelp)(requestMap, defintionsMap);
|
|
27
|
+
// 编译core
|
|
28
|
+
await (0, printer_skills_client_core_1.printerSkillsClientCore)(helpData);
|
|
29
|
+
// 编译ts转为js
|
|
30
|
+
await (0, generate_skill_cli_scripts_1.generateSkillCliScripts)(requestMap);
|
|
31
|
+
// 编译skills.md
|
|
32
|
+
await (0, generate_skill_md_1.generateSkillMd)(helpData, requestMap);
|
|
33
|
+
// 生成config文件
|
|
34
|
+
await (0, generate_config_1.generateConfig)();
|
|
35
|
+
}
|
|
36
|
+
start();
|
package/built/test.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.camelToKebab = camelToKebab;
|
|
4
|
+
function camelToKebab(str) {
|
|
5
|
+
// 正则解释:
|
|
6
|
+
// 1. [A-Z]+(?![a-z]) :匹配连续大写字母,后面不是小写字母(GPG)
|
|
7
|
+
// 2. [A-Z][a-z]+ :一个大写开头,后面跟一个或多个小写字母(List, Keys)
|
|
8
|
+
// 3. [a-z]+ :只含小写的单词
|
|
9
|
+
const words = str.match(/[A-Z]+(?![a-z])|[A-Z][a-z]+|[a-z]+/g);
|
|
10
|
+
if (!words)
|
|
11
|
+
return str.toLowerCase();
|
|
12
|
+
return words.map(w => w.toLowerCase()).join('-');
|
|
13
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.filterApiParam = filterApiParam;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const interface_1 = require("../interface");
|
|
6
|
+
function filterApiParam(originalPath, parameters = []) {
|
|
7
|
+
const pathParams = [];
|
|
8
|
+
let bodyParams = null;
|
|
9
|
+
const queryParams = [];
|
|
10
|
+
// 从url中获取存在的参数,可能会存在url中定义了参数,但是在parameters缺少定义。
|
|
11
|
+
const originalPathParamsMap = {};
|
|
12
|
+
const requestPathArray = originalPath.split('/');
|
|
13
|
+
for (const requestPathItem of requestPathArray) {
|
|
14
|
+
if (/\{.*\}/gi.test(requestPathItem)) {
|
|
15
|
+
const match = requestPathItem.match(/^\{(.+)\}$/);
|
|
16
|
+
if (match) {
|
|
17
|
+
/**
|
|
18
|
+
* 某一些path比较特殊
|
|
19
|
+
* /{repo}/-/upload/commit-assets/{sha1:string}
|
|
20
|
+
* 这时候要将前面的sha1提取出来
|
|
21
|
+
*/
|
|
22
|
+
const variable = match[1].split(':')[0];
|
|
23
|
+
originalPathParamsMap[variable] = {
|
|
24
|
+
description: variable,
|
|
25
|
+
in: interface_1.ApiParametersType.PATH,
|
|
26
|
+
name: variable,
|
|
27
|
+
required: true,
|
|
28
|
+
type: constants_1.DefinitionsKeywordTypeNodeKey.string,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
parameters.forEach((item) => {
|
|
34
|
+
switch (item.in) {
|
|
35
|
+
case interface_1.ApiParametersType.PATH: {
|
|
36
|
+
let pathParamsItem = item;
|
|
37
|
+
if (originalPathParamsMap[item.name]) {
|
|
38
|
+
pathParamsItem = {
|
|
39
|
+
...originalPathParamsMap[item.name],
|
|
40
|
+
...pathParamsItem,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
pathParams.push(pathParamsItem);
|
|
44
|
+
delete originalPathParamsMap[item.name];
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
case interface_1.ApiParametersType.BODY:
|
|
48
|
+
bodyParams = item;
|
|
49
|
+
break;
|
|
50
|
+
case interface_1.ApiParametersType.QUERY:
|
|
51
|
+
queryParams.push(item);
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
Object.keys(originalPathParamsMap).map((item) => {
|
|
56
|
+
pathParams.push(originalPathParamsMap[item]);
|
|
57
|
+
return null;
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
pathParams,
|
|
61
|
+
bodyParams,
|
|
62
|
+
queryParams,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatInterfaceName = formatInterfaceName;
|
|
4
|
+
function formatInterfaceName(name) {
|
|
5
|
+
const slice = name.split(/[._-]/);
|
|
6
|
+
const firstLetterUpperStrArray = slice.map((s) => {
|
|
7
|
+
if (!s)
|
|
8
|
+
return s; // 如果字符串为空,直接返回
|
|
9
|
+
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
10
|
+
});
|
|
11
|
+
return firstLetterUpperStrArray.join('');
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatTypeName = formatTypeName;
|
|
4
|
+
function formatTypeName(name) {
|
|
5
|
+
const slice = name.split('.');
|
|
6
|
+
const firstLetterUpperStrArray = slice.map((s) => {
|
|
7
|
+
if (!s)
|
|
8
|
+
return s; // 如果字符串为空,直接返回
|
|
9
|
+
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
10
|
+
});
|
|
11
|
+
return firstLetterUpperStrArray.join('');
|
|
12
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateOperationId = generateOperationId;
|
|
4
|
+
const interface_1 = require("../interface");
|
|
5
|
+
const path_to_camel_case_1 = require("./path-to-camel-case");
|
|
6
|
+
function generateOperationId(path, method) {
|
|
7
|
+
let suffix;
|
|
8
|
+
switch (method) {
|
|
9
|
+
case interface_1.ApiMethod.GET:
|
|
10
|
+
suffix = 'Info';
|
|
11
|
+
break;
|
|
12
|
+
case interface_1.ApiMethod.POST:
|
|
13
|
+
suffix = 'Create';
|
|
14
|
+
break;
|
|
15
|
+
case interface_1.ApiMethod.PUT:
|
|
16
|
+
suffix = 'Update';
|
|
17
|
+
break;
|
|
18
|
+
case interface_1.ApiMethod.DELETE:
|
|
19
|
+
suffix = 'Delete';
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
const pathOperationId = (0, path_to_camel_case_1.pathToCamelCase)(path);
|
|
23
|
+
return `${pathOperationId}${suffix}`;
|
|
24
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateMapItem = generateMapItem;
|
|
4
|
+
function generateMapItem(key, type) {
|
|
5
|
+
const tmp = {
|
|
6
|
+
filename: key.toLowerCase(),
|
|
7
|
+
type,
|
|
8
|
+
astNode: [],
|
|
9
|
+
dependency: [],
|
|
10
|
+
exportName: '',
|
|
11
|
+
descriptions: {},
|
|
12
|
+
source: key,
|
|
13
|
+
jsonData: undefined,
|
|
14
|
+
};
|
|
15
|
+
return tmp;
|
|
16
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCodegenTarget = getCodegenTarget;
|
|
4
|
+
const get_config_1 = require("./get-config");
|
|
5
|
+
function getCodegenTarget() {
|
|
6
|
+
const config = (0, get_config_1.getConfig)();
|
|
7
|
+
return config.outputDir;
|
|
8
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getConfig = getConfig;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
10
|
+
const constants_1 = require("../constants");
|
|
11
|
+
const is_skills_1 = require("./is-skills");
|
|
12
|
+
const skills_1 = require("../constants/skills");
|
|
13
|
+
const defaultConfig = {
|
|
14
|
+
printeReduxAction: true,
|
|
15
|
+
requestDependencyMap: {
|
|
16
|
+
[constants_1.CNB_REQUEST_OPTIONS_NAME_INTERFACE]: {
|
|
17
|
+
isDefault: false,
|
|
18
|
+
path: '@cnb/request',
|
|
19
|
+
},
|
|
20
|
+
[constants_1.CNB_REQUEST_RESULT_INTERFACE]: {
|
|
21
|
+
isDefault: false,
|
|
22
|
+
path: '@cnb/request',
|
|
23
|
+
},
|
|
24
|
+
[constants_1.CNB_REQUEST_EXAMPLE]: {
|
|
25
|
+
isDefault: true,
|
|
26
|
+
path: '@/request',
|
|
27
|
+
},
|
|
28
|
+
[constants_1.AXIOS_CONFIG_INTERFACE]: {
|
|
29
|
+
isDefault: false,
|
|
30
|
+
path: 'axios',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
skillsOutputDir: `${process.cwd()}`,
|
|
34
|
+
skillsDev: false,
|
|
35
|
+
outputDir: `${process.cwd()}/${constants_1.DEFAULT_CODEGEN_TARGET_DIR}`,
|
|
36
|
+
};
|
|
37
|
+
let globalConfig = null;
|
|
38
|
+
function getConfig() {
|
|
39
|
+
if (globalConfig) {
|
|
40
|
+
return globalConfig;
|
|
41
|
+
}
|
|
42
|
+
const pwd = process.cwd();
|
|
43
|
+
const configFilePath = path_1.default.join(pwd, constants_1.CONFIG_FILE_NAME);
|
|
44
|
+
if (!fs_1.default.existsSync(configFilePath)) {
|
|
45
|
+
globalConfig = defaultConfig;
|
|
46
|
+
return defaultConfig;
|
|
47
|
+
}
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
49
|
+
const config = require(configFilePath);
|
|
50
|
+
globalConfig = lodash_1.default.merge(defaultConfig, config, (0, is_skills_1.isSkills)()
|
|
51
|
+
? {
|
|
52
|
+
printeReduxAction: false,
|
|
53
|
+
requestDependencyMap: {
|
|
54
|
+
// skills模式使用另外生成的core.js进行调用。
|
|
55
|
+
[constants_1.CNB_REQUEST_EXAMPLE]: {
|
|
56
|
+
isDefault: true,
|
|
57
|
+
path: '../../core/core.js',
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
}
|
|
61
|
+
: {});
|
|
62
|
+
if (globalConfig && !process.env.CNB_CLI_CMD) {
|
|
63
|
+
process.env.CNB_CLI_CMD = globalConfig.skillsDev
|
|
64
|
+
? skills_1.CNB_CLI_DEV_CMD
|
|
65
|
+
: skills_1.CNB_CLI_PROD_CMD;
|
|
66
|
+
}
|
|
67
|
+
return globalConfig;
|
|
68
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDefinitionName = getDefinitionName;
|
|
4
|
+
const PREFIX = '#/definitions/';
|
|
5
|
+
function getDefinitionName(ref) {
|
|
6
|
+
const defintionName = ref.replace(PREFIX, '');
|
|
7
|
+
return defintionName;
|
|
8
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDefinitionType = getDefinitionType;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
function isEnumDefinition(def) {
|
|
6
|
+
return def.enum !== undefined;
|
|
7
|
+
}
|
|
8
|
+
function getDefinitionType(definition) {
|
|
9
|
+
if (isEnumDefinition(definition)) {
|
|
10
|
+
return constants_1.PrinterFilterType.ENUM;
|
|
11
|
+
}
|
|
12
|
+
return constants_1.PrinterFilterType.INTERFACE;
|
|
13
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getGenerateLicense = getGenerateLicense;
|
|
4
|
+
exports.getApiGenerateLicense = getApiGenerateLicense;
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '../../package.json'), 'utf8'));
|
|
8
|
+
function getGenerateLicense({ source }) {
|
|
9
|
+
return `// @ts-nocheck
|
|
10
|
+
/* tslint:disable */
|
|
11
|
+
/* eslint-disable */
|
|
12
|
+
/*
|
|
13
|
+
* -------------------------------------------------------------------------
|
|
14
|
+
* ## THIS FILE WAS GENERATED VIA CNB-API-GENERATE ##
|
|
15
|
+
* ## ##
|
|
16
|
+
* ## AUTHOR: bapelin ##
|
|
17
|
+
* ## SOURCE: https://cnb.woa.com/cnb/frontend-science/cnb-api-generate ##
|
|
18
|
+
* -------------------------------------------------------------------------
|
|
19
|
+
* @Version ${pkg.version}
|
|
20
|
+
* @Source ${source}
|
|
21
|
+
*/
|
|
22
|
+
`;
|
|
23
|
+
}
|
|
24
|
+
function getApiGenerateLicense({ source }) {
|
|
25
|
+
return `// @ts-nocheck
|
|
26
|
+
/* tslint:disable */
|
|
27
|
+
/* eslint-disable */
|
|
28
|
+
/*
|
|
29
|
+
* -------------------------------------------------------------------------
|
|
30
|
+
* ## THIS FILE WAS GENERATED VIA CNB-API-GENERATE ##
|
|
31
|
+
* ## ##
|
|
32
|
+
* ## AUTHOR: bapelin ##
|
|
33
|
+
* ## SOURCE: https://cnb.woa.com/cnb/frontend-science/cnb-api-generate ##
|
|
34
|
+
* -------------------------------------------------------------------------
|
|
35
|
+
* @Version ${pkg.version}
|
|
36
|
+
* @Source ${source}
|
|
37
|
+
*/
|
|
38
|
+
`;
|
|
39
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getKeywordTypeNode = getKeywordTypeNode;
|
|
37
|
+
const ts = __importStar(require("typescript"));
|
|
38
|
+
const constants_1 = require("../constants");
|
|
39
|
+
function getKeywordTypeNode(type) {
|
|
40
|
+
switch (type) {
|
|
41
|
+
case constants_1.DefinitionsKeywordTypeNodeKey.string:
|
|
42
|
+
case constants_1.DefinitionsType.STRING:
|
|
43
|
+
return ts.SyntaxKind.StringKeyword;
|
|
44
|
+
case constants_1.DefinitionsKeywordTypeNodeKey.number:
|
|
45
|
+
case constants_1.DefinitionsKeywordTypeNodeKey.integer:
|
|
46
|
+
case constants_1.DefinitionsType.NUMBER:
|
|
47
|
+
case constants_1.DefinitionsType.INTEGER:
|
|
48
|
+
return ts.SyntaxKind.NumberKeyword;
|
|
49
|
+
case constants_1.DefinitionsKeywordTypeNodeKey.boolean:
|
|
50
|
+
return ts.SyntaxKind.BooleanKeyword;
|
|
51
|
+
case constants_1.DefinitionsKeywordTypeNodeKey.object:
|
|
52
|
+
case constants_1.DefinitionsType.OBJECT:
|
|
53
|
+
return ts.SyntaxKind.ObjectKeyword;
|
|
54
|
+
case constants_1.DefinitionsKeywordTypeNodeKey.array:
|
|
55
|
+
case constants_1.DefinitionsType.ARRAY:
|
|
56
|
+
return ts.SyntaxKind.ArrayType;
|
|
57
|
+
default:
|
|
58
|
+
return ts.SyntaxKind.UnknownKeyword;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPrinterFilePrefix = getPrinterFilePrefix;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
function getPrinterFilePrefix(type) {
|
|
6
|
+
let prefix = '';
|
|
7
|
+
switch (type) {
|
|
8
|
+
case constants_1.PrinterFilterType.INTERFACE:
|
|
9
|
+
prefix = 'interfaces';
|
|
10
|
+
break;
|
|
11
|
+
case constants_1.PrinterFilterType.ENUM:
|
|
12
|
+
prefix = 'enums';
|
|
13
|
+
break;
|
|
14
|
+
default:
|
|
15
|
+
prefix = '';
|
|
16
|
+
}
|
|
17
|
+
if (prefix === '') {
|
|
18
|
+
throw new Error(`Unknown printer filter type: ${type}`);
|
|
19
|
+
}
|
|
20
|
+
return prefix;
|
|
21
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getSkillCodegenTarget = getSkillCodegenTarget;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const get_config_1 = require("./get-config");
|
|
9
|
+
function getSkillCodegenTarget() {
|
|
10
|
+
const config = (0, get_config_1.getConfig)();
|
|
11
|
+
if (!fs_1.default.existsSync(config.skillsOutputDir)) {
|
|
12
|
+
fs_1.default.mkdirSync(config.skillsOutputDir);
|
|
13
|
+
}
|
|
14
|
+
return config.skillsOutputDir;
|
|
15
|
+
}
|