fx-spec-hub 0.0.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/README.md +66 -0
- package/bin/swagger-admin.js +5 -0
- package/dist/bootstrap.d.ts +1 -0
- package/dist/bootstrap.js +24 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/bootstrap.mjs +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +109 -0
- package/dist/cli.js.map +1 -0
- package/dist/data/admin-backend-api.json +46845 -0
- package/dist/data/strapi-backend-api.json +10002 -0
- package/dist/data/strapi-enum-options.json +11890 -0
- package/dist/data/web-backend-api.json +19943 -0
- package/dist/env/admin/.env.common +13 -0
- package/dist/env/admin/.env.dev +14 -0
- package/dist/env/admin/.env.prod +0 -0
- package/dist/env/admin/.env.test +13 -0
- package/dist/env/admin/.env.uat +14 -0
- package/dist/env/user/.env.common +13 -0
- package/dist/env/user/.env.dev +12 -0
- package/dist/env/user/.env.prod +0 -0
- package/dist/env/user/.env.test +11 -0
- package/dist/env/user/.env.uat +11 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +6 -0
- package/dist/logger.d.ts +2 -0
- package/dist/logger.js +14 -0
- package/dist/logger.js.map +1 -0
- package/dist/strapi-enums.d.ts +17 -0
- package/dist/strapi-enums.js +143 -0
- package/dist/strapi-enums.js.map +1 -0
- package/dist/swagger.d.ts +43 -0
- package/dist/swagger.js +96 -0
- package/dist/swagger.js.map +1 -0
- package/package.json +56 -0
- package/scripts/postbuild.mjs +32 -0
- package/swagger-template/api.ejs +30 -0
- package/swagger-template/data-contract-jsdoc.ejs +37 -0
- package/swagger-template/data-contracts.ejs +49 -0
- package/swagger-template/enum-data-contract.ejs +12 -0
- package/swagger-template/index-axios.ejs +14 -0
- package/swagger-template/index-fetch.ejs +14 -0
- package/swagger-template/interface-data-contract.ejs +10 -0
- package/swagger-template/object-field-jsdoc.ejs +28 -0
- package/swagger-template/procedure-call.ejs +102 -0
- package/swagger-template/route-docs.ejs +30 -0
- package/swagger-template/route-name.ejs +43 -0
- package/swagger-template/route-type.ejs +23 -0
- package/swagger-template/route-types.ejs +18 -0
- package/swagger-template/type-data-contract.ejs +15 -0
package/README.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# swagger-admin
|
|
2
|
+
|
|
3
|
+
把本仓库作为一个可复用的依赖包使用:提供 OpenAPI -> TS Client 生成,以及 Strapi 枚举生成。
|
|
4
|
+
|
|
5
|
+
## 安装(示例)
|
|
6
|
+
|
|
7
|
+
在你的其它项目里(推荐开发依赖):
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add -D file:../swagger-admin
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
或从 git 安装(按你自己的仓库地址调整):
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pnpm add -D git+ssh://git@your-host/your-org/swagger-admin.git
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## CLI
|
|
20
|
+
|
|
21
|
+
### 1) 生成 Swagger 客户端
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
swagger-admin swagger --input ./openapi.json --output ./src/api --baseURL https://api.example.com
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
也可以输入 URL:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
swagger-admin swagger --input https://example.com/openapi.json --output ./src/api --baseURL https://api.example.com
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
常用可选参数:
|
|
34
|
+
|
|
35
|
+
- `--baseURL`:index.ts 里的 baseURL 字符串(必填)
|
|
36
|
+
- `--httpClientPath`:HttpClient import 路径(默认 `@/utils/request`)
|
|
37
|
+
- `--templateDir`:自定义模板目录(默认使用本包 `swagger-template`)
|
|
38
|
+
- `--httpClientType axios|fetch`:默认 `axios`
|
|
39
|
+
|
|
40
|
+
### 2) 生成 Strapi 枚举
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
swagger-admin strapi-enums --input https://cms.example.com/api/options --output ./src/api/enum.ts
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
当 `--input` 不包含 `?` 时,会自动拼接默认 query(`pageSize/locale/populate`)。如果你想完全自定义 query,直接把完整 URL(带 `?`)传进去即可。
|
|
47
|
+
|
|
48
|
+
也可以不传 `--input`,默认使用本包内置的 `data/strapi-enum-options.json` 进行离线生成。
|
|
49
|
+
|
|
50
|
+
## 作为库使用(可选)
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
import { generateSwaggerApi, generateStrapiEnums } from 'swagger-admin';
|
|
54
|
+
|
|
55
|
+
await generateSwaggerApi({
|
|
56
|
+
input: 'https://example.com/openapi.json',
|
|
57
|
+
output: './src/api',
|
|
58
|
+
baseURL: 'https://api.example.com',
|
|
59
|
+
onSuccess(result) {
|
|
60
|
+
console.log('生成完成:', result.outputDir);
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// 不传 input 时,会读取包内默认 OpenAPI JSON;第二个参数 isStrapi 默认为 false
|
|
65
|
+
// await generateSwaggerApi({ output: './src/api', baseURL: 'https://api.example.com' }, true);
|
|
66
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
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 node_fs_1 = __importDefault(require("node:fs"));
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
9
|
+
const targetEnv = process.env.TARGET_ENV;
|
|
10
|
+
const clientType = process.env.CLIENT_TYPE;
|
|
11
|
+
if (!targetEnv) {
|
|
12
|
+
throw new Error('bootstrap 需要环境变量 TARGET_ENV(例如 dev / uat / prod / test)');
|
|
13
|
+
}
|
|
14
|
+
const envDir = node_path_1.default.resolve(__dirname, `env/${clientType}`);
|
|
15
|
+
const commonEnvPath = node_path_1.default.join(envDir, '.env.common');
|
|
16
|
+
const targetEnvPath = node_path_1.default.join(envDir, `.env.${targetEnv}`);
|
|
17
|
+
if (!node_fs_1.default.existsSync(commonEnvPath)) {
|
|
18
|
+
throw new Error(`未找到 env 文件:${commonEnvPath}`);
|
|
19
|
+
}
|
|
20
|
+
if (!node_fs_1.default.existsSync(targetEnvPath)) {
|
|
21
|
+
throw new Error(`未找到 env 文件:${targetEnvPath}`);
|
|
22
|
+
}
|
|
23
|
+
dotenv_1.default.config({ path: [commonEnvPath, targetEnvPath] });
|
|
24
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":";;;;;AAAA,sDAAyB;AACzB,0DAA6B;AAC7B,oDAA4B;AAE5B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACzC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;IACf,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,MAAM,GAAG,mBAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,UAAU,EAAE,CAAC,CAAC;AAC5D,MAAM,aAAa,GAAG,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AACvD,MAAM,aAAa,GAAG,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,SAAS,EAAE,CAAC,CAAC;AAE7D,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;IAClC,MAAM,IAAI,KAAK,CAAC,cAAc,aAAa,EAAE,CAAC,CAAC;AACjD,CAAC;AACD,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;IAClC,MAAM,IAAI,KAAK,CAAC,cAAc,aAAa,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './bootstrap.js';
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
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 minimist_1 = __importDefault(require("minimist"));
|
|
7
|
+
const logger_1 = require("./logger");
|
|
8
|
+
const strapi_enums_1 = require("./strapi-enums");
|
|
9
|
+
const swagger_1 = require("./swagger");
|
|
10
|
+
function printHelp() {
|
|
11
|
+
const text = `
|
|
12
|
+
swagger-admin
|
|
13
|
+
|
|
14
|
+
用法:
|
|
15
|
+
swagger-admin swagger --input <url|file> --output <dir> [options]
|
|
16
|
+
swagger-admin strapi-enums --input <url|file> --output <file> [options]
|
|
17
|
+
|
|
18
|
+
swagger 选项:
|
|
19
|
+
--input OpenAPI URL 或本地文件路径(必填)
|
|
20
|
+
--output 输出目录(必填)
|
|
21
|
+
--templateDir 自定义模板目录(可选,默认使用本包 swagger-template)
|
|
22
|
+
--baseURL index.ts 里的 baseURL 字符串(必填)
|
|
23
|
+
--httpClientPath HttpClient import 路径(默认:@/utils/request)
|
|
24
|
+
--httpClientType axios | fetch(默认:axios)
|
|
25
|
+
|
|
26
|
+
strapi-enums 选项:
|
|
27
|
+
--input URL 或本地 JSON 文件路径(可选,默认使用本包 data/strapi-enum-options.json)
|
|
28
|
+
--output 输出文件路径(必填)
|
|
29
|
+
--pageSize 默认 1000(仅当 input 不含 ? 时自动拼 query)
|
|
30
|
+
--locale 默认 zh-CN(仅当 input 不含 ? 时自动拼 query)
|
|
31
|
+
--prettierConfig prettier 配置文件路径(可选)
|
|
32
|
+
`.trim();
|
|
33
|
+
// eslint-disable-next-line no-console
|
|
34
|
+
console.log(text);
|
|
35
|
+
}
|
|
36
|
+
function asHttpClientType(value) {
|
|
37
|
+
if (value === 'axios' || value === 'fetch')
|
|
38
|
+
return value;
|
|
39
|
+
throw new Error(`--httpClientType 仅支持 axios|fetch,收到:${String(value)}`);
|
|
40
|
+
}
|
|
41
|
+
async function runSwagger(argv) {
|
|
42
|
+
const args = (0, minimist_1.default)(argv, {
|
|
43
|
+
string: ['input', 'output', 'templateDir', 'baseURL', 'httpClientPath', 'httpClientType'],
|
|
44
|
+
default: {
|
|
45
|
+
httpClientPath: '@/utils/request',
|
|
46
|
+
httpClientType: 'axios',
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
const input = args.input;
|
|
50
|
+
const output = args.output;
|
|
51
|
+
const baseURL = args.baseURL;
|
|
52
|
+
if (!input || !output || !baseURL) {
|
|
53
|
+
throw new Error('swagger 命令需要 --input、--output、--baseURL');
|
|
54
|
+
}
|
|
55
|
+
await (0, swagger_1.generateSwaggerApi)({
|
|
56
|
+
input,
|
|
57
|
+
output,
|
|
58
|
+
templateDir: args.templateDir,
|
|
59
|
+
baseURL,
|
|
60
|
+
httpClientPath: args.httpClientPath,
|
|
61
|
+
httpClientType: asHttpClientType(args.httpClientType),
|
|
62
|
+
});
|
|
63
|
+
(0, logger_1.log)(`swagger 生成完成:${output}`);
|
|
64
|
+
}
|
|
65
|
+
async function runStrapiEnums(argv) {
|
|
66
|
+
const args = (0, minimist_1.default)(argv, {
|
|
67
|
+
string: ['input', 'output', 'locale', 'prettierConfig'],
|
|
68
|
+
default: {
|
|
69
|
+
pageSize: 1000,
|
|
70
|
+
locale: 'zh-CN',
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
const input = args.input;
|
|
74
|
+
const output = args.output;
|
|
75
|
+
if (!output) {
|
|
76
|
+
throw new Error('strapi-enums 命令需要 --output');
|
|
77
|
+
}
|
|
78
|
+
const pageSize = typeof args.pageSize === 'number'
|
|
79
|
+
? args.pageSize
|
|
80
|
+
: Number.isFinite(Number(args.pageSize))
|
|
81
|
+
? Number(args.pageSize)
|
|
82
|
+
: 1000;
|
|
83
|
+
await (0, strapi_enums_1.generateStrapiEnums)({
|
|
84
|
+
input,
|
|
85
|
+
output,
|
|
86
|
+
pageSize,
|
|
87
|
+
locale: args.locale,
|
|
88
|
+
prettierConfig: args.prettierConfig,
|
|
89
|
+
});
|
|
90
|
+
(0, logger_1.log)(`Strapi 枚举生成完成:${output}`);
|
|
91
|
+
}
|
|
92
|
+
async function main() {
|
|
93
|
+
const [command, ...rest] = process.argv.slice(2);
|
|
94
|
+
if (!command || command === 'help' || command === '--help' || command === '-h') {
|
|
95
|
+
printHelp();
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (command === 'swagger')
|
|
99
|
+
return runSwagger(rest);
|
|
100
|
+
if (command === 'strapi-enums')
|
|
101
|
+
return runStrapiEnums(rest);
|
|
102
|
+
throw new Error(`未知命令:${command}`);
|
|
103
|
+
}
|
|
104
|
+
main().catch((e) => {
|
|
105
|
+
(0, logger_1.logError)(e);
|
|
106
|
+
printHelp();
|
|
107
|
+
process.exit(1);
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|