@book000/twitterts 0.27.0 → 0.28.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/dist/generate-types/custom-types-generator.d.ts +53 -0
- package/dist/generate-types/custom-types-generator.d.ts.map +1 -0
- package/dist/generate-types/custom-types-generator.js +394 -0
- package/dist/generate-types/custom-types-generator.js.map +1 -0
- package/dist/generate-types/endpoint-type-generator.d.ts +66 -0
- package/dist/generate-types/endpoint-type-generator.d.ts.map +1 -0
- package/dist/generate-types/endpoint-type-generator.js +187 -0
- package/dist/generate-types/endpoint-type-generator.js.map +1 -0
- package/dist/generate-types/types-generator.d.ts +49 -0
- package/dist/generate-types/types-generator.d.ts.map +1 -0
- package/dist/generate-types/types-generator.js +89 -0
- package/dist/generate-types/types-generator.js.map +1 -0
- package/dist/generate-types/utils.d.ts +95 -0
- package/dist/generate-types/utils.d.ts.map +1 -0
- package/dist/generate-types/utils.js +160 -0
- package/dist/generate-types/utils.js.map +1 -0
- package/dist/generate-types.js +41 -741
- package/dist/generate-types.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/models/responses/custom/custom-user-legacy-object.d.ts +55 -0
- package/dist/models/responses/custom/custom-user-legacy-object.d.ts.map +1 -0
- package/dist/models/responses/custom/custom-user-legacy-object.js +4 -0
- package/dist/models/responses/custom/custom-user-legacy-object.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,187 @@
|
|
|
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.EndPointTypeGenerator = void 0;
|
|
7
|
+
const node_utils_1 = require("@book000/node-utils");
|
|
8
|
+
const utils_1 = require("./utils");
|
|
9
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
|
+
/**
|
|
11
|
+
* エンドポイントのまとめ型定義(src/models/responses/endpoints.ts)を生成するクラス
|
|
12
|
+
*/
|
|
13
|
+
class EndPointTypeGenerator {
|
|
14
|
+
/**
|
|
15
|
+
* @param results エンドポイントごとのレスポンス情報
|
|
16
|
+
* @param typesDirectory 型定義の出力先ディレクトリ
|
|
17
|
+
*/
|
|
18
|
+
constructor(results, typesDirectory) {
|
|
19
|
+
this.results = results.filter((result) => result.paths.some((path) => path.endsWith('.json')));
|
|
20
|
+
this.typesDirectory = typesDirectory;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* TypeScript インポート文群を生成する
|
|
24
|
+
*
|
|
25
|
+
* @returns インポート文群
|
|
26
|
+
*/
|
|
27
|
+
generateImport() {
|
|
28
|
+
// import { GraphQLGetUserTweetsResponse } from './graphql/get/user-tweets'
|
|
29
|
+
return this.results
|
|
30
|
+
.map((result) => {
|
|
31
|
+
const name = utils_1.Utils.getName(result.type, result.name, result.method, result.statusCode);
|
|
32
|
+
const filename = utils_1.Utils.getFilename(result.type, result.name, result.method, result.statusCode);
|
|
33
|
+
return `import { ${name} } from './${filename}'`;
|
|
34
|
+
})
|
|
35
|
+
.filter((value, index, self) => self.indexOf(value) === index)
|
|
36
|
+
.join('\n');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* メソッド名の配列を取得する
|
|
40
|
+
*
|
|
41
|
+
* @param type エンドポイントの種類
|
|
42
|
+
* @returns メソッド名の配列
|
|
43
|
+
*/
|
|
44
|
+
getMethods(type) {
|
|
45
|
+
return this.results
|
|
46
|
+
.filter((result) => result.type === type.toLowerCase())
|
|
47
|
+
.map((result) => result.method)
|
|
48
|
+
.filter((value, index, self) => self.indexOf(value) === index);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* エンドポイント名群(<TYPE><METHOD>Endpoint)の定義を生成する
|
|
52
|
+
*
|
|
53
|
+
* @param type エンドポイントの種類
|
|
54
|
+
* @param method メソッド名
|
|
55
|
+
* @returns エンドポイント名群の定義
|
|
56
|
+
*/
|
|
57
|
+
generateEndPointType(type, method) {
|
|
58
|
+
const head = `export type ${type}${method}Endpoint =`;
|
|
59
|
+
const types = this.results
|
|
60
|
+
.filter((result) => result.type === type.toLowerCase() && result.method === method)
|
|
61
|
+
.filter((value, index, self) => self.findIndex((v) => v.name === value.name) === index)
|
|
62
|
+
.map((result) => {
|
|
63
|
+
return ` | '${result.name}'`;
|
|
64
|
+
});
|
|
65
|
+
if (types.length === 0) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return `${head}\n${types.join('\n')}`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* エンドポイント名を元に、成功・失敗のレスポンス型定義をまとめる型定義(<TYPE><METHOD>Response)を生成する。
|
|
72
|
+
*
|
|
73
|
+
* @param type エンドポイントの種類
|
|
74
|
+
* @param method メソッド名
|
|
75
|
+
*/
|
|
76
|
+
generateResponseMergeType(type, method) {
|
|
77
|
+
const names = this.results
|
|
78
|
+
.filter((result) => result.type === type.toLowerCase())
|
|
79
|
+
.map((result) => result.name)
|
|
80
|
+
.filter((value, index, self) => self.indexOf(value) === index);
|
|
81
|
+
const types = names.map((name) => {
|
|
82
|
+
const successType = utils_1.Utils.getName(type, name, method, '200');
|
|
83
|
+
const errorType = utils_1.Utils.getName(type, name, method, '400');
|
|
84
|
+
const responseType = utils_1.Utils.getName(type, name, method, null);
|
|
85
|
+
const isExistsSuccess = this.results.some((result) => result.type === type.toLowerCase() &&
|
|
86
|
+
result.name === name &&
|
|
87
|
+
result.method === method &&
|
|
88
|
+
result.statusCode.startsWith('2'));
|
|
89
|
+
const isExistsError = this.results.some((result) => result.type === type.toLowerCase() &&
|
|
90
|
+
result.name === name &&
|
|
91
|
+
result.method === method &&
|
|
92
|
+
!result.statusCode.startsWith('2'));
|
|
93
|
+
const tsDocument = `/** ${type} ${name} ${method} レスポンスモデル */`;
|
|
94
|
+
if (isExistsSuccess && isExistsError) {
|
|
95
|
+
return `${tsDocument}\nexport type ${responseType} = ${successType} | ${errorType}`;
|
|
96
|
+
}
|
|
97
|
+
if (isExistsSuccess) {
|
|
98
|
+
return `${tsDocument}\nexport type ${responseType} = ${successType}`;
|
|
99
|
+
}
|
|
100
|
+
if (isExistsError) {
|
|
101
|
+
return `${tsDocument}\nexport type ${responseType} = ${errorType}`;
|
|
102
|
+
}
|
|
103
|
+
return '';
|
|
104
|
+
});
|
|
105
|
+
return types.filter((type) => type !== '').join('\n');
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* エンドポイント名を元に、レスポンス型定義を紐づけるような型定義(<TYPE><METHOD>EndPointResponseType)を生成する。
|
|
109
|
+
*
|
|
110
|
+
* @param type エンドポイントの種類
|
|
111
|
+
* @param method メソッド名
|
|
112
|
+
* @returns レスポンス型定義を紐づけるような型定義
|
|
113
|
+
*/
|
|
114
|
+
generateResponseType(type, method) {
|
|
115
|
+
const head = `export type ${type}${method}EndPointResponseType<T extends ${type}${method}Endpoint> =`;
|
|
116
|
+
const types = this.results
|
|
117
|
+
.filter((result) => result.type === type.toLowerCase() && result.method === method)
|
|
118
|
+
.filter((value, index, self) => self.findIndex((v) => v.name === value.name) === index)
|
|
119
|
+
.map((result) => {
|
|
120
|
+
const name = utils_1.Utils.getName(result.type, result.name, result.method, null);
|
|
121
|
+
return ` T extends '${result.name}' ? ${name} :`;
|
|
122
|
+
});
|
|
123
|
+
return `${head}\n${types.join('\n')}\n never`;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* エンドポイントの種類と HTTP メソッドを元に、「レスポンス型定義を紐づけるような型定義」を生成する。
|
|
127
|
+
*
|
|
128
|
+
* @param types エンドポイントの種類の配列
|
|
129
|
+
* @returns レスポンス型定義を紐づけるような型定義
|
|
130
|
+
*/
|
|
131
|
+
generateEndpointResponseType(types) {
|
|
132
|
+
const head = 'export type EndPointResponseType<M extends HttpMethod, T extends RequestType, N extends GraphQLEndpoint | RESTEndpoint> = ';
|
|
133
|
+
const results = [];
|
|
134
|
+
for (const type of types) {
|
|
135
|
+
const methods = this.getMethods(type);
|
|
136
|
+
if (methods.length === 0) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
if (types.at(0) !== type) {
|
|
140
|
+
results.push(':');
|
|
141
|
+
}
|
|
142
|
+
results.push(`T extends '${type.toUpperCase()}' ?`);
|
|
143
|
+
for (const method of methods) {
|
|
144
|
+
// 最後以外は : をつける
|
|
145
|
+
if (methods.at(0) !== method) {
|
|
146
|
+
results.push(':');
|
|
147
|
+
}
|
|
148
|
+
results.push(`M extends '${method}' ?`, ` N extends ${type}${method}Endpoint ?`, ` ${type}${method}EndPointResponseType<N> :`, ' never');
|
|
149
|
+
}
|
|
150
|
+
results.push(' : never');
|
|
151
|
+
}
|
|
152
|
+
return `${head}\n${results.join('\n')}\n: never`;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* エンドポイントのまとめ型定義(src/models/responses/endpoints.ts)を生成する
|
|
156
|
+
*/
|
|
157
|
+
generate() {
|
|
158
|
+
const logger = node_utils_1.Logger.configure('EndPointTypeGenerator.generate');
|
|
159
|
+
const types = ['GraphQL', 'REST'];
|
|
160
|
+
const data = [];
|
|
161
|
+
const imports = this.generateImport();
|
|
162
|
+
data.push(imports, "import { HttpMethod, RequestType } from '../../scraper'");
|
|
163
|
+
for (const type of types) {
|
|
164
|
+
const unionTypes = [];
|
|
165
|
+
const methods = this.getMethods(type);
|
|
166
|
+
for (const method of methods) {
|
|
167
|
+
const mergeTypes = this.generateResponseMergeType(type, method);
|
|
168
|
+
const endpointType = this.generateEndPointType(type, method);
|
|
169
|
+
const responseType = this.generateResponseType(type, method);
|
|
170
|
+
if (!endpointType || !responseType) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
data.push(mergeTypes, endpointType, responseType);
|
|
174
|
+
unionTypes.push(` | ${type}${method}Endpoint`);
|
|
175
|
+
}
|
|
176
|
+
if (unionTypes.length === 0) {
|
|
177
|
+
unionTypes.push(' | never');
|
|
178
|
+
}
|
|
179
|
+
data.push(`export type ${type}Endpoint =\n${unionTypes.join('\n')}\n`);
|
|
180
|
+
}
|
|
181
|
+
data.push(this.generateEndpointResponseType(types));
|
|
182
|
+
node_fs_1.default.writeFileSync(`${this.typesDirectory}/endpoints.ts`, data.map((d) => d.trim()).join('\n\n'));
|
|
183
|
+
logger.info(`📝 ${this.typesDirectory}/endpoints.ts`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
exports.EndPointTypeGenerator = EndPointTypeGenerator;
|
|
187
|
+
//# sourceMappingURL=endpoint-type-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-type-generator.js","sourceRoot":"","sources":["../../src/generate-types/endpoint-type-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Result } from './utils';
|
|
2
|
+
/**
|
|
3
|
+
* 複数型定義生成オプション(TwitterGenerateTypes.generateTypes)
|
|
4
|
+
*/
|
|
5
|
+
interface GenerateTypesOptions {
|
|
6
|
+
/**
|
|
7
|
+
* 保存先ディレクトリパス設定
|
|
8
|
+
*/
|
|
9
|
+
directory: {
|
|
10
|
+
/**
|
|
11
|
+
* スキーマファイルのディレクトリパス
|
|
12
|
+
*/
|
|
13
|
+
schema: string;
|
|
14
|
+
/**
|
|
15
|
+
* 型定義ファイルのディレクトリパス
|
|
16
|
+
*/
|
|
17
|
+
types: string;
|
|
18
|
+
};
|
|
19
|
+
/** 並列処理をするかどうか */
|
|
20
|
+
parallel: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 型定義生成クラス
|
|
24
|
+
*/
|
|
25
|
+
export declare class TwitterTypesGenerator {
|
|
26
|
+
/**
|
|
27
|
+
* エンドポイントごとのレスポンス群
|
|
28
|
+
*/
|
|
29
|
+
private readonly results;
|
|
30
|
+
/**
|
|
31
|
+
* @param options 型定義生成クラスのオプション
|
|
32
|
+
*/
|
|
33
|
+
constructor(results: Result[]);
|
|
34
|
+
/**
|
|
35
|
+
* エンドポイントの型定義を生成する
|
|
36
|
+
*
|
|
37
|
+
* @param options 単一の型定義生成オプション
|
|
38
|
+
* @param result エンドポイントごとのレスポンス情報
|
|
39
|
+
*/
|
|
40
|
+
private generateType;
|
|
41
|
+
/**
|
|
42
|
+
* 保存されたデバッグレスポンスを元に、全てのエンドポイントの型定義を生成する。
|
|
43
|
+
*
|
|
44
|
+
* @param options 型定義生成オプション
|
|
45
|
+
*/
|
|
46
|
+
generateTypes(options: GenerateTypesOptions): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=types-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-generator.d.ts","sourceRoot":"","sources":["../../src/generate-types/types-generator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAS,MAAM,SAAS,CAAA;AAgCvC;;GAEG;AACH,UAAU,oBAAoB;IAC5B;;OAEG;IACH,SAAS,EAAE;QACT;;WAEG;QACH,MAAM,EAAE,MAAM,CAAA;QAEd;;WAEG;QACH,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,kBAAkB;IAClB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAChC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC;;OAEG;gBACS,OAAO,EAAE,MAAM,EAAE;IAI7B;;;;;OAKG;YACW,YAAY;IAqC1B;;;;OAIG;IACU,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;CAgDzE"}
|
|
@@ -0,0 +1,89 @@
|
|
|
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.TwitterTypesGenerator = void 0;
|
|
7
|
+
const node_utils_1 = require("@book000/node-utils");
|
|
8
|
+
const dist_1 = require("genson-js/dist");
|
|
9
|
+
const json_schema_to_typescript_1 = require("json-schema-to-typescript");
|
|
10
|
+
const node_path_1 = require("node:path");
|
|
11
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
12
|
+
const utils_1 = require("./utils");
|
|
13
|
+
/**
|
|
14
|
+
* 型定義生成クラス
|
|
15
|
+
*/
|
|
16
|
+
class TwitterTypesGenerator {
|
|
17
|
+
/**
|
|
18
|
+
* @param options 型定義生成クラスのオプション
|
|
19
|
+
*/
|
|
20
|
+
constructor(results) {
|
|
21
|
+
this.results = results;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* エンドポイントの型定義を生成する
|
|
25
|
+
*
|
|
26
|
+
* @param options 単一の型定義生成オプション
|
|
27
|
+
* @param result エンドポイントごとのレスポンス情報
|
|
28
|
+
*/
|
|
29
|
+
async generateType(options, result) {
|
|
30
|
+
const logger = node_utils_1.Logger.configure('TwitterGenerateTypes.generateType');
|
|
31
|
+
if (result.paths.length === 0) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
logger.info(`🔍 Generating: ${options.name}`);
|
|
35
|
+
let schema;
|
|
36
|
+
for (const path of result.paths) {
|
|
37
|
+
const data = JSON.parse(node_fs_1.default.readFileSync(path, 'utf8'));
|
|
38
|
+
const fileSchema = (0, dist_1.createSchema)(data);
|
|
39
|
+
schema = schema ? (0, dist_1.mergeSchemas)([schema, fileSchema]) : fileSchema;
|
|
40
|
+
}
|
|
41
|
+
if (!schema) {
|
|
42
|
+
throw new Error('No schema found');
|
|
43
|
+
}
|
|
44
|
+
node_fs_1.default.mkdirSync((0, node_path_1.dirname)(options.path.schema), { recursive: true });
|
|
45
|
+
node_fs_1.default.writeFileSync(options.path.schema, JSON.stringify(schema, null, 2));
|
|
46
|
+
node_fs_1.default.mkdirSync((0, node_path_1.dirname)(options.path.types), { recursive: true });
|
|
47
|
+
const types = await (0, json_schema_to_typescript_1.compile)(schema, options.name, utils_1.Utils.getCompileOptions(options.tsDocument));
|
|
48
|
+
node_fs_1.default.writeFileSync(options.path.types, types);
|
|
49
|
+
logger.info(`📝 Successful: ${options.name} (from ${result.paths.length} files)`);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 保存されたデバッグレスポンスを元に、全てのエンドポイントの型定義を生成する。
|
|
53
|
+
*
|
|
54
|
+
* @param options 型定義生成オプション
|
|
55
|
+
*/
|
|
56
|
+
async generateTypes(options) {
|
|
57
|
+
const generators = [];
|
|
58
|
+
for (const result of this.results) {
|
|
59
|
+
const name = utils_1.Utils.getName(result.type, result.name, result.method, result.statusCode);
|
|
60
|
+
const filename = utils_1.Utils.getFilename(result.type, result.name, result.method, result.statusCode);
|
|
61
|
+
const schemaPath = `${options.directory.schema}/${filename}.json`;
|
|
62
|
+
const typesPath = `${options.directory.types}/${filename}.ts`;
|
|
63
|
+
const type = result.type === 'graphql'
|
|
64
|
+
? 'GraphQL'
|
|
65
|
+
: result.type === 'rest'
|
|
66
|
+
? 'REST'
|
|
67
|
+
: null;
|
|
68
|
+
const generator = this.generateType({
|
|
69
|
+
path: {
|
|
70
|
+
schema: schemaPath,
|
|
71
|
+
types: typesPath,
|
|
72
|
+
},
|
|
73
|
+
name,
|
|
74
|
+
tsDocument: `${type} ${result.method} ${result.name} ${result.statusCode.startsWith('2') ? '成功' : '失敗'}レスポンスモデル`,
|
|
75
|
+
}, result);
|
|
76
|
+
generators.push(generator);
|
|
77
|
+
}
|
|
78
|
+
if (options.parallel) {
|
|
79
|
+
await Promise.all(generators);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
for (const generator of generators) {
|
|
83
|
+
await generator;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.TwitterTypesGenerator = TwitterTypesGenerator;
|
|
89
|
+
//# sourceMappingURL=types-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-generator.js","sourceRoot":"","sources":["../../src/generate-types/types-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Options } from 'json-schema-to-typescript';
|
|
2
|
+
/**
|
|
3
|
+
* レスポンスファイル群からの、エンドポイントごとのレスポンス群型
|
|
4
|
+
*/
|
|
5
|
+
export interface Result {
|
|
6
|
+
/**
|
|
7
|
+
* エンドポイントの種別(graphql または rest)
|
|
8
|
+
*/
|
|
9
|
+
type: string;
|
|
10
|
+
/**
|
|
11
|
+
* レスポンスの名前
|
|
12
|
+
*/
|
|
13
|
+
name: string;
|
|
14
|
+
/**
|
|
15
|
+
* レスポンスの HTTP メソッド
|
|
16
|
+
*/
|
|
17
|
+
method: string;
|
|
18
|
+
/**
|
|
19
|
+
* レスポンスのステータスコード
|
|
20
|
+
*/
|
|
21
|
+
statusCode: string;
|
|
22
|
+
/**
|
|
23
|
+
* このエンドポイントに該当するレスポンスのパス群
|
|
24
|
+
*/
|
|
25
|
+
paths: string[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* ユーティリティ
|
|
29
|
+
*/
|
|
30
|
+
export declare const Utils: {
|
|
31
|
+
/**
|
|
32
|
+
* ディレクトリ内にあるディレクトリ群を取得する
|
|
33
|
+
*
|
|
34
|
+
* @param parentDirectory ディレクトリを取得する親ディレクトリパス
|
|
35
|
+
* @param baseDirectories ディレクトリを取得する子ディレクトリパス群
|
|
36
|
+
* @returns ディレクトリ群
|
|
37
|
+
*/
|
|
38
|
+
getDirectories(parentDirectory: string, baseDirectories?: string[]): string[];
|
|
39
|
+
/**
|
|
40
|
+
* ディレクトリ内にある JSON ファイル群を取得する
|
|
41
|
+
*
|
|
42
|
+
* @param parentDirectory ファイルを取得する親ディレクトリパス
|
|
43
|
+
* @param baseDirectories ファイルを取得するディレクトリパス
|
|
44
|
+
* @returns JSON ファイル群
|
|
45
|
+
*/
|
|
46
|
+
getJSONFiles(parentDirectory: string, baseDirectories?: string[]): string[];
|
|
47
|
+
/**
|
|
48
|
+
* レスポンスデバッグ出力 JSON ファイルを元に、エンドポイントごとの情報をまとめて取得する
|
|
49
|
+
*
|
|
50
|
+
* @returns エンドポイントごとの情報
|
|
51
|
+
*/
|
|
52
|
+
getEndPointResponses(debugOutputDirectory: string): Result[];
|
|
53
|
+
/**
|
|
54
|
+
* レスポンスの型定義名を取得する
|
|
55
|
+
*
|
|
56
|
+
* @param rawType リクエストの種別(graphql または rest)
|
|
57
|
+
* @param rawName レスポンスの名前
|
|
58
|
+
* @param rawMethod レスポンスの HTTP メソッド
|
|
59
|
+
* @param rawStatus レスポンスのステータスコード
|
|
60
|
+
* @returns 型定義名
|
|
61
|
+
*/
|
|
62
|
+
getName(rawType: string, rawName: string, rawMethod: string, rawStatus: string | null): string;
|
|
63
|
+
/**
|
|
64
|
+
* キャメルケースに変換する
|
|
65
|
+
*
|
|
66
|
+
* @param string 変換する文字列
|
|
67
|
+
* @returns キャメルケース変換後の文字列
|
|
68
|
+
*/
|
|
69
|
+
toCamelCase(string: string): string;
|
|
70
|
+
/**
|
|
71
|
+
* 先頭文字を大文字に変換する
|
|
72
|
+
*
|
|
73
|
+
* @param string 変換する文字列
|
|
74
|
+
* @returns 変換後の文字列
|
|
75
|
+
*/
|
|
76
|
+
capitalize(string: string): string;
|
|
77
|
+
/**
|
|
78
|
+
* ファイル名を取得する
|
|
79
|
+
*
|
|
80
|
+
* @param rawType リクエストの種別(graphql または rest)
|
|
81
|
+
* @param rawName レスポンスの名前
|
|
82
|
+
* @param rawMethod レスポンスの HTTP メソッド
|
|
83
|
+
* @param rawStatus レスポンスのステータスコード
|
|
84
|
+
* @returns ファイル名
|
|
85
|
+
*/
|
|
86
|
+
getFilename(rawType: string, rawName: string, rawMethod: string, rawStatus: string): string;
|
|
87
|
+
/**
|
|
88
|
+
* json-schema-to-typescript のコンパイルオプションを作成・取得する
|
|
89
|
+
*
|
|
90
|
+
* @param tsDocument コンパイル結果の先頭に追加する tsdoc
|
|
91
|
+
* @returns コンパイルオプション
|
|
92
|
+
*/
|
|
93
|
+
getCompileOptions(tsDocument?: string): Partial<Options>;
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/generate-types/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAInD;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,KAAK;IAChB;;;;;;OAMG;oCAEgB,MAAM,oBACN,MAAM,EAAE,GACxB,MAAM,EAAE;IAWX;;;;;;OAMG;kCAEgB,MAAM,oBACN,MAAM,EAAE,GACxB,MAAM,EAAE;IAaX;;;;OAIG;+CACwC,MAAM,GAAG,MAAM,EAAE;IAgC5D;;;;;;;;OAQG;qBAEQ,MAAM,WACN,MAAM,aACJ,MAAM,aACN,MAAM,GAAG,IAAI,GACvB,MAAM;IAkBT;;;;;OAKG;wBACiB,MAAM,GAAG,MAAM;IAInC;;;;;OAKG;uBACgB,MAAM,GAAG,MAAM;IAIlC;;;;;;;;OAQG;yBAEQ,MAAM,WACN,MAAM,aACJ,MAAM,aACN,MAAM,GAChB,MAAM;IAST;;;;;OAKG;mCAC4B,MAAM,GAAG,QAAQ,OAAO,CAAC;CAiBzD,CAAA"}
|
|
@@ -0,0 +1,160 @@
|
|
|
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.Utils = void 0;
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
/**
|
|
10
|
+
* ユーティリティ
|
|
11
|
+
*/
|
|
12
|
+
exports.Utils = {
|
|
13
|
+
/**
|
|
14
|
+
* ディレクトリ内にあるディレクトリ群を取得する
|
|
15
|
+
*
|
|
16
|
+
* @param parentDirectory ディレクトリを取得する親ディレクトリパス
|
|
17
|
+
* @param baseDirectories ディレクトリを取得する子ディレクトリパス群
|
|
18
|
+
* @returns ディレクトリ群
|
|
19
|
+
*/
|
|
20
|
+
getDirectories(parentDirectory, baseDirectories = []) {
|
|
21
|
+
const baseDirectory = (0, node_path_1.join)(parentDirectory, ...baseDirectories);
|
|
22
|
+
return node_fs_1.default
|
|
23
|
+
.readdirSync(baseDirectory)
|
|
24
|
+
.filter((directory) => !['.', '..'].includes(directory) &&
|
|
25
|
+
node_fs_1.default.statSync(`${baseDirectory}/${directory}`).isDirectory());
|
|
26
|
+
},
|
|
27
|
+
/**
|
|
28
|
+
* ディレクトリ内にある JSON ファイル群を取得する
|
|
29
|
+
*
|
|
30
|
+
* @param parentDirectory ファイルを取得する親ディレクトリパス
|
|
31
|
+
* @param baseDirectories ファイルを取得するディレクトリパス
|
|
32
|
+
* @returns JSON ファイル群
|
|
33
|
+
*/
|
|
34
|
+
getJSONFiles(parentDirectory, baseDirectories = []) {
|
|
35
|
+
const baseDirectory = (0, node_path_1.join)(parentDirectory, ...baseDirectories);
|
|
36
|
+
return node_fs_1.default
|
|
37
|
+
.readdirSync(baseDirectory)
|
|
38
|
+
.filter((file) => !['.', '..'].includes(file) &&
|
|
39
|
+
node_fs_1.default.statSync((0, node_path_1.join)(baseDirectory, file)).isFile() &&
|
|
40
|
+
file.endsWith('.json'))
|
|
41
|
+
.map((file) => (0, node_path_1.join)(baseDirectory, file));
|
|
42
|
+
},
|
|
43
|
+
/**
|
|
44
|
+
* レスポンスデバッグ出力 JSON ファイルを元に、エンドポイントごとの情報をまとめて取得する
|
|
45
|
+
*
|
|
46
|
+
* @returns エンドポイントごとの情報
|
|
47
|
+
*/
|
|
48
|
+
getEndPointResponses(debugOutputDirectory) {
|
|
49
|
+
const results = [];
|
|
50
|
+
for (const type of this.getDirectories(debugOutputDirectory)) {
|
|
51
|
+
for (const name of this.getDirectories(debugOutputDirectory, [type])) {
|
|
52
|
+
for (const method of this.getDirectories(debugOutputDirectory, [
|
|
53
|
+
type,
|
|
54
|
+
name,
|
|
55
|
+
])) {
|
|
56
|
+
for (const statusCode of this.getDirectories(debugOutputDirectory, [
|
|
57
|
+
type,
|
|
58
|
+
name,
|
|
59
|
+
method,
|
|
60
|
+
])) {
|
|
61
|
+
results.push({
|
|
62
|
+
type,
|
|
63
|
+
name,
|
|
64
|
+
method,
|
|
65
|
+
statusCode,
|
|
66
|
+
paths: this.getJSONFiles(debugOutputDirectory, [
|
|
67
|
+
type,
|
|
68
|
+
name,
|
|
69
|
+
method,
|
|
70
|
+
statusCode,
|
|
71
|
+
]),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return results;
|
|
78
|
+
},
|
|
79
|
+
/**
|
|
80
|
+
* レスポンスの型定義名を取得する
|
|
81
|
+
*
|
|
82
|
+
* @param rawType リクエストの種別(graphql または rest)
|
|
83
|
+
* @param rawName レスポンスの名前
|
|
84
|
+
* @param rawMethod レスポンスの HTTP メソッド
|
|
85
|
+
* @param rawStatus レスポンスのステータスコード
|
|
86
|
+
* @returns 型定義名
|
|
87
|
+
*/
|
|
88
|
+
getName(rawType, rawName, rawMethod, rawStatus) {
|
|
89
|
+
const type = rawType.toLocaleLowerCase() === 'graphql'
|
|
90
|
+
? 'GraphQL'
|
|
91
|
+
: rawType.toLocaleLowerCase() === 'rest'
|
|
92
|
+
? 'REST'
|
|
93
|
+
: null;
|
|
94
|
+
if (!type) {
|
|
95
|
+
throw new Error(`Invalid type: ${rawType}`);
|
|
96
|
+
}
|
|
97
|
+
const method = this.toCamelCase(rawMethod);
|
|
98
|
+
const name = this.capitalize(rawName);
|
|
99
|
+
const status = rawStatus === null ? '' : rawStatus.startsWith('2') ? 'Success' : 'Error';
|
|
100
|
+
return `${type}${method}${name}${status}Response`;
|
|
101
|
+
},
|
|
102
|
+
/**
|
|
103
|
+
* キャメルケースに変換する
|
|
104
|
+
*
|
|
105
|
+
* @param string 変換する文字列
|
|
106
|
+
* @returns キャメルケース変換後の文字列
|
|
107
|
+
*/
|
|
108
|
+
toCamelCase(string) {
|
|
109
|
+
return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
|
|
110
|
+
},
|
|
111
|
+
/**
|
|
112
|
+
* 先頭文字を大文字に変換する
|
|
113
|
+
*
|
|
114
|
+
* @param string 変換する文字列
|
|
115
|
+
* @returns 変換後の文字列
|
|
116
|
+
*/
|
|
117
|
+
capitalize(string) {
|
|
118
|
+
return string.charAt(0).toUpperCase() + string.slice(1);
|
|
119
|
+
},
|
|
120
|
+
/**
|
|
121
|
+
* ファイル名を取得する
|
|
122
|
+
*
|
|
123
|
+
* @param rawType リクエストの種別(graphql または rest)
|
|
124
|
+
* @param rawName レスポンスの名前
|
|
125
|
+
* @param rawMethod レスポンスの HTTP メソッド
|
|
126
|
+
* @param rawStatus レスポンスのステータスコード
|
|
127
|
+
* @returns ファイル名
|
|
128
|
+
*/
|
|
129
|
+
getFilename(rawType, rawName, rawMethod, rawStatus) {
|
|
130
|
+
const type = rawType.toLowerCase();
|
|
131
|
+
const method = rawMethod.toLowerCase();
|
|
132
|
+
const name = rawName.replaceAll(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
|
|
133
|
+
const status = rawStatus.startsWith('2') ? '-success' : '-error';
|
|
134
|
+
return `${type}/${method}/${name}${status}`;
|
|
135
|
+
},
|
|
136
|
+
/**
|
|
137
|
+
* json-schema-to-typescript のコンパイルオプションを作成・取得する
|
|
138
|
+
*
|
|
139
|
+
* @param tsDocument コンパイル結果の先頭に追加する tsdoc
|
|
140
|
+
* @returns コンパイルオプション
|
|
141
|
+
*/
|
|
142
|
+
getCompileOptions(tsDocument) {
|
|
143
|
+
const compileOptions = {
|
|
144
|
+
bannerComment: '/* eslint-disable @typescript-eslint/ban-types */',
|
|
145
|
+
additionalProperties: false,
|
|
146
|
+
enableConstEnums: true,
|
|
147
|
+
strictIndexSignatures: true,
|
|
148
|
+
style: {
|
|
149
|
+
semi: false,
|
|
150
|
+
singleQuote: true,
|
|
151
|
+
},
|
|
152
|
+
unknownAny: true,
|
|
153
|
+
};
|
|
154
|
+
if (tsDocument) {
|
|
155
|
+
compileOptions.bannerComment = `${compileOptions.bannerComment}\n\n/** ${tsDocument} */`;
|
|
156
|
+
}
|
|
157
|
+
return compileOptions;
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/generate-types/utils.ts"],"names":[],"mappings":"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"}
|