@accelbyte/codegen 1.0.5 → 2.0.0-beta.3
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import yargs from 'yargs';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
|
-
import fs__default, {
|
|
4
|
+
import fs__default, { writeFileSync, readFileSync } from 'fs';
|
|
5
5
|
import * as path from 'path';
|
|
6
6
|
import path__default from 'path';
|
|
7
7
|
import SwaggerParser from '@apidevtools/swagger-parser';
|
|
@@ -123,6 +123,73 @@ export function ${className}(sdk: AccelbyteSDK, args?: ApiArgs) {
|
|
|
123
123
|
`;
|
|
124
124
|
};
|
|
125
125
|
|
|
126
|
+
const VersionBumpType = z.enum(["CUTOFF", "RELEASE", "HOTFIX"]);
|
|
127
|
+
class VersionHelpers {
|
|
128
|
+
static getNextVersion = ({
|
|
129
|
+
codegenVersion,
|
|
130
|
+
serviceVersion,
|
|
131
|
+
predefinedMajorVersion,
|
|
132
|
+
versionBumpType,
|
|
133
|
+
sdkVersion,
|
|
134
|
+
nextPrereleaseId
|
|
135
|
+
}) => {
|
|
136
|
+
if (versionBumpType !== void 0) {
|
|
137
|
+
const parsed = VersionBumpType.safeParse(versionBumpType);
|
|
138
|
+
if (!parsed.success) {
|
|
139
|
+
throw new Error(`Invalid process.env.VERSION_BUMP_TYPE: ${versionBumpType}`);
|
|
140
|
+
}
|
|
141
|
+
if ((parsed.data === "HOTFIX" || parsed.data === "RELEASE") && nextPrereleaseId) {
|
|
142
|
+
throw new Error(`process.env.PRERELEASE_ID should be empty when process.env.VERSION_BUMP_TYPE is "HOTFIX" or "PRELEASE".`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const codegenSemvers = semver.parse(codegenVersion);
|
|
146
|
+
const serviceSemvers = semver.parse(serviceVersion);
|
|
147
|
+
const sdkSemvers = semver.parse(sdkVersion);
|
|
148
|
+
if (codegenSemvers === null) {
|
|
149
|
+
throw new Error(`Invalid codegen version: ${codegenVersion}`);
|
|
150
|
+
}
|
|
151
|
+
if (serviceSemvers === null) {
|
|
152
|
+
throw new Error(`Invalid service version: ${serviceVersion}`);
|
|
153
|
+
}
|
|
154
|
+
if (sdkSemvers === null) {
|
|
155
|
+
throw new Error(`Invalid sdk version: ${sdkVersion}`);
|
|
156
|
+
}
|
|
157
|
+
const { major: currentMajor, minor: currentMinor, patch: currentPatch, prerelease: currentPrerelease } = sdkSemvers;
|
|
158
|
+
const nextMajor = codegenSemvers.minor + predefinedMajorVersion;
|
|
159
|
+
let nextMinor = currentMinor;
|
|
160
|
+
let nextPatch = currentPatch;
|
|
161
|
+
switch (versionBumpType) {
|
|
162
|
+
case VersionBumpType.Enum.CUTOFF: {
|
|
163
|
+
nextMinor++;
|
|
164
|
+
nextPatch = 0;
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
case VersionBumpType.Enum.RELEASE:
|
|
168
|
+
break;
|
|
169
|
+
case VersionBumpType.Enum.HOTFIX: {
|
|
170
|
+
nextPatch++;
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
let nextVersion = [
|
|
175
|
+
codegenSemvers.major + predefinedMajorVersion,
|
|
176
|
+
nextMinor,
|
|
177
|
+
nextPatch
|
|
178
|
+
].join(".");
|
|
179
|
+
if (nextPrereleaseId) {
|
|
180
|
+
if (nextMinor !== currentMinor || nextMajor !== currentMajor) {
|
|
181
|
+
nextVersion += `-${nextPrereleaseId}.0`;
|
|
182
|
+
} else {
|
|
183
|
+
nextVersion += `-${sdkSemvers.prerelease.join(".")}`;
|
|
184
|
+
nextVersion = semver.inc(nextVersion, "prerelease", void 0, nextPrereleaseId);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return nextVersion;
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const codegenPackageJsonPath = path__default.join(__dirname, "../package.json");
|
|
192
|
+
const codegenPackageJSON = JSON.parse(fs__default.readFileSync(codegenPackageJsonPath, "utf-8"));
|
|
126
193
|
const UNDEFINED_SWAGGER_SEMVER = "0.0.0";
|
|
127
194
|
const REMOVED_KEYWORDS = [
|
|
128
195
|
"/admin/",
|
|
@@ -426,42 +493,22 @@ class ParserUtils {
|
|
|
426
493
|
ParserUtils.mkdirIfNotExist(distDir);
|
|
427
494
|
fs__default.writeFileSync(path__default.join(distDir, `all-${isAdminWebSdk ? "admin" : "public"}-imports.ts`), ParserUtils.prependCopyrightHeader(buffer));
|
|
428
495
|
}
|
|
429
|
-
static syncChangelog(packageVersion) {
|
|
430
|
-
const currDir = process.cwd();
|
|
431
|
-
const pathToChangelog = path__default.join(currDir, "./CHANGELOG.md");
|
|
432
|
-
let fileContent = readFileSync(pathToChangelog, "utf-8");
|
|
433
|
-
const date = new Date().toISOString().slice(0, 10);
|
|
434
|
-
fileContent = "### " + packageVersion + " - " + date + `
|
|
435
|
-
|
|
436
|
-
- code-generated update
|
|
437
|
-
|
|
438
|
-
` + fileContent.trim();
|
|
439
|
-
fs__default.writeFileSync(pathToChangelog, fileContent, "utf-8");
|
|
440
|
-
}
|
|
441
496
|
static syncPackageVersion(apiInfo, isAdminWebSdk, prereleaseId) {
|
|
442
497
|
if (isAdminWebSdk) {
|
|
443
498
|
return;
|
|
444
499
|
}
|
|
445
500
|
const currDir = process.cwd();
|
|
446
501
|
const { packageJSON, pathToPackageJSON } = ParserUtils.getPackageJSONInfo(currDir);
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
nextSemver += `-${id}.${rest.join(".")}`;
|
|
456
|
-
}
|
|
457
|
-
if (!prereleaseId) {
|
|
458
|
-
nextSemver = semver.inc(nextSemver, "patch");
|
|
459
|
-
} else {
|
|
460
|
-
nextSemver = semver.inc(nextSemver, "prerelease", void 0, prereleaseId);
|
|
461
|
-
}
|
|
502
|
+
const nextSemver = VersionHelpers.getNextVersion({
|
|
503
|
+
codegenVersion: codegenPackageJSON.version,
|
|
504
|
+
serviceVersion: apiInfo["x-version"] || apiInfo.version || UNDEFINED_SWAGGER_SEMVER,
|
|
505
|
+
predefinedMajorVersion: packageJSON.predefinedMajorVersion,
|
|
506
|
+
versionBumpType: process.env.VERSION_BUMP_TYPE,
|
|
507
|
+
sdkVersion: packageJSON.version,
|
|
508
|
+
nextPrereleaseId: prereleaseId
|
|
509
|
+
});
|
|
462
510
|
packageJSON.version = nextSemver;
|
|
463
511
|
writeFileSync(pathToPackageJSON, JSON.stringify(packageJSON, null, 2));
|
|
464
|
-
ParserUtils.syncChangelog(packageJSON.version);
|
|
465
512
|
}
|
|
466
513
|
static getPackageJSONInfo(dir) {
|
|
467
514
|
const pathToPackageJSON = path__default.join(dir, "./package.json");
|
|
@@ -1324,11 +1371,12 @@ class CodeGenerator {
|
|
|
1324
1371
|
const swaggerFilePath = `${CliParser.getSwaggersOutputPath()}/${swaggerFile}`;
|
|
1325
1372
|
const api = await parser.parse(swaggerFilePath);
|
|
1326
1373
|
const indexImportsSet = /* @__PURE__ */ new Set();
|
|
1327
|
-
|
|
1374
|
+
const apiInfo = { ...api.info, "x-version": api["x-version"]?.version };
|
|
1375
|
+
console.log("----------\nGenerating API:", { title: apiInfo.title, version: apiInfo.version });
|
|
1328
1376
|
ParserUtils.mkdirIfNotExist(DIST_DIR);
|
|
1329
1377
|
ParserUtils.mkdirIfNotExist(DIST_DEFINITION_DIR);
|
|
1330
1378
|
ParserUtils.mkdirIfNotExist(DIST_ENDPOINTS_DIR);
|
|
1331
|
-
ParserUtils.syncPackageVersion(
|
|
1379
|
+
ParserUtils.syncPackageVersion(apiInfo, CliParser.isAdmin(), process.env.PRERELEASE_ID);
|
|
1332
1380
|
const { apiArgumentsByTag, apiBufferByTag, classBufferByTag, dependenciesByTag, classImports, arrayDefinitions, snippetMap } = await CodeGenerator.iterateApi(api, serviceName);
|
|
1333
1381
|
if (CliParser.getSnippetOutputPath()) {
|
|
1334
1382
|
try {
|
|
@@ -1418,33 +1466,36 @@ class SwaggerDownloader {
|
|
|
1418
1466
|
});
|
|
1419
1467
|
});
|
|
1420
1468
|
};
|
|
1421
|
-
static downloadFile = (targetFileName, url) => {
|
|
1469
|
+
static downloadFile = async (targetFileName, url) => {
|
|
1422
1470
|
const destFile = SwaggerDownloader.getDestFile(targetFileName);
|
|
1423
1471
|
let data = "";
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
data
|
|
1472
|
+
return new Promise((resolve) => {
|
|
1473
|
+
const request = https.get(url, function(response) {
|
|
1474
|
+
response.on("data", (chunk) => {
|
|
1475
|
+
data += chunk;
|
|
1476
|
+
});
|
|
1477
|
+
response.on("end", () => {
|
|
1478
|
+
if (response.statusCode !== 200) {
|
|
1479
|
+
console.log(`SwaggerDownload error with status code: ${response.statusCode}`);
|
|
1480
|
+
} else {
|
|
1481
|
+
fs.writeFileSync(destFile, JSON.stringify(JSON.parse(data), null, 2), "utf-8");
|
|
1482
|
+
SwaggerDownloader.postSanitizeDownloadedFile(destFile);
|
|
1483
|
+
console.log(`SwaggerDownload ${url} completed with status code: ${response.statusCode}`);
|
|
1484
|
+
}
|
|
1485
|
+
resolve(void 0);
|
|
1486
|
+
});
|
|
1427
1487
|
});
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
console.log(`SwaggerDownload error with status code: ${response.statusCode}`);
|
|
1431
|
-
} else {
|
|
1432
|
-
fs.writeFileSync(destFile, JSON.stringify(JSON.parse(data), null, 2), "utf-8");
|
|
1433
|
-
SwaggerDownloader.postSanitizeDownloadedFile(destFile);
|
|
1434
|
-
console.log(`SwaggerDownload ${url} completed with status code: ${response.statusCode}`);
|
|
1435
|
-
}
|
|
1488
|
+
request.on("error", (err) => {
|
|
1489
|
+
console.log(`SwaggerDownloader failed for "${targetFileName}" and "${url}"`, err);
|
|
1436
1490
|
});
|
|
1437
1491
|
});
|
|
1438
|
-
request.on("error", (err) => {
|
|
1439
|
-
console.log(`SwaggerDownloader failed for "${targetFileName}" and "${url}"`, err);
|
|
1440
|
-
});
|
|
1441
1492
|
};
|
|
1442
|
-
static main = () => {
|
|
1493
|
+
static main = async () => {
|
|
1443
1494
|
const swaggers = CliParser.getConfigFile();
|
|
1444
1495
|
for (const ref in swaggers) {
|
|
1445
1496
|
const targetFileName = swaggers[ref][2];
|
|
1446
1497
|
const url = swaggers[ref][3];
|
|
1447
|
-
SwaggerDownloader.downloadFile(targetFileName, url);
|
|
1498
|
+
await SwaggerDownloader.downloadFile(targetFileName, url);
|
|
1448
1499
|
}
|
|
1449
1500
|
};
|
|
1450
1501
|
}
|