@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.
|
@@ -146,6 +146,73 @@ export function ${className}(sdk: AccelbyteSDK, args?: ApiArgs) {
|
|
|
146
146
|
`;
|
|
147
147
|
};
|
|
148
148
|
|
|
149
|
+
const VersionBumpType = zod.z.enum(["CUTOFF", "RELEASE", "HOTFIX"]);
|
|
150
|
+
class VersionHelpers {
|
|
151
|
+
static getNextVersion = ({
|
|
152
|
+
codegenVersion,
|
|
153
|
+
serviceVersion,
|
|
154
|
+
predefinedMajorVersion,
|
|
155
|
+
versionBumpType,
|
|
156
|
+
sdkVersion,
|
|
157
|
+
nextPrereleaseId
|
|
158
|
+
}) => {
|
|
159
|
+
if (versionBumpType !== void 0) {
|
|
160
|
+
const parsed = VersionBumpType.safeParse(versionBumpType);
|
|
161
|
+
if (!parsed.success) {
|
|
162
|
+
throw new Error(`Invalid process.env.VERSION_BUMP_TYPE: ${versionBumpType}`);
|
|
163
|
+
}
|
|
164
|
+
if ((parsed.data === "HOTFIX" || parsed.data === "RELEASE") && nextPrereleaseId) {
|
|
165
|
+
throw new Error(`process.env.PRERELEASE_ID should be empty when process.env.VERSION_BUMP_TYPE is "HOTFIX" or "PRELEASE".`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const codegenSemvers = semver.parse(codegenVersion);
|
|
169
|
+
const serviceSemvers = semver.parse(serviceVersion);
|
|
170
|
+
const sdkSemvers = semver.parse(sdkVersion);
|
|
171
|
+
if (codegenSemvers === null) {
|
|
172
|
+
throw new Error(`Invalid codegen version: ${codegenVersion}`);
|
|
173
|
+
}
|
|
174
|
+
if (serviceSemvers === null) {
|
|
175
|
+
throw new Error(`Invalid service version: ${serviceVersion}`);
|
|
176
|
+
}
|
|
177
|
+
if (sdkSemvers === null) {
|
|
178
|
+
throw new Error(`Invalid sdk version: ${sdkVersion}`);
|
|
179
|
+
}
|
|
180
|
+
const { major: currentMajor, minor: currentMinor, patch: currentPatch, prerelease: currentPrerelease } = sdkSemvers;
|
|
181
|
+
const nextMajor = codegenSemvers.minor + predefinedMajorVersion;
|
|
182
|
+
let nextMinor = currentMinor;
|
|
183
|
+
let nextPatch = currentPatch;
|
|
184
|
+
switch (versionBumpType) {
|
|
185
|
+
case VersionBumpType.Enum.CUTOFF: {
|
|
186
|
+
nextMinor++;
|
|
187
|
+
nextPatch = 0;
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
case VersionBumpType.Enum.RELEASE:
|
|
191
|
+
break;
|
|
192
|
+
case VersionBumpType.Enum.HOTFIX: {
|
|
193
|
+
nextPatch++;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
let nextVersion = [
|
|
198
|
+
codegenSemvers.major + predefinedMajorVersion,
|
|
199
|
+
nextMinor,
|
|
200
|
+
nextPatch
|
|
201
|
+
].join(".");
|
|
202
|
+
if (nextPrereleaseId) {
|
|
203
|
+
if (nextMinor !== currentMinor || nextMajor !== currentMajor) {
|
|
204
|
+
nextVersion += `-${nextPrereleaseId}.0`;
|
|
205
|
+
} else {
|
|
206
|
+
nextVersion += `-${sdkSemvers.prerelease.join(".")}`;
|
|
207
|
+
nextVersion = semver.inc(nextVersion, "prerelease", void 0, nextPrereleaseId);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return nextVersion;
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
const codegenPackageJsonPath = path.join(__dirname, "../package.json");
|
|
215
|
+
const codegenPackageJSON = JSON.parse(fs.readFileSync(codegenPackageJsonPath, "utf-8"));
|
|
149
216
|
const UNDEFINED_SWAGGER_SEMVER = "0.0.0";
|
|
150
217
|
const REMOVED_KEYWORDS = [
|
|
151
218
|
"/admin/",
|
|
@@ -449,42 +516,22 @@ class ParserUtils {
|
|
|
449
516
|
ParserUtils.mkdirIfNotExist(distDir);
|
|
450
517
|
fs.writeFileSync(path.join(distDir, `all-${isAdminWebSdk ? "admin" : "public"}-imports.ts`), ParserUtils.prependCopyrightHeader(buffer));
|
|
451
518
|
}
|
|
452
|
-
static syncChangelog(packageVersion) {
|
|
453
|
-
const currDir = process.cwd();
|
|
454
|
-
const pathToChangelog = path.join(currDir, "./CHANGELOG.md");
|
|
455
|
-
let fileContent = fs.readFileSync(pathToChangelog, "utf-8");
|
|
456
|
-
const date = new Date().toISOString().slice(0, 10);
|
|
457
|
-
fileContent = "### " + packageVersion + " - " + date + `
|
|
458
|
-
|
|
459
|
-
- code-generated update
|
|
460
|
-
|
|
461
|
-
` + fileContent.trim();
|
|
462
|
-
fs.writeFileSync(pathToChangelog, fileContent, "utf-8");
|
|
463
|
-
}
|
|
464
519
|
static syncPackageVersion(apiInfo, isAdminWebSdk, prereleaseId) {
|
|
465
520
|
if (isAdminWebSdk) {
|
|
466
521
|
return;
|
|
467
522
|
}
|
|
468
523
|
const currDir = process.cwd();
|
|
469
524
|
const { packageJSON, pathToPackageJSON } = ParserUtils.getPackageJSONInfo(currDir);
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
nextSemver += `-${id}.${rest.join(".")}`;
|
|
479
|
-
}
|
|
480
|
-
if (!prereleaseId) {
|
|
481
|
-
nextSemver = semver.inc(nextSemver, "patch");
|
|
482
|
-
} else {
|
|
483
|
-
nextSemver = semver.inc(nextSemver, "prerelease", void 0, prereleaseId);
|
|
484
|
-
}
|
|
525
|
+
const nextSemver = VersionHelpers.getNextVersion({
|
|
526
|
+
codegenVersion: codegenPackageJSON.version,
|
|
527
|
+
serviceVersion: apiInfo["x-version"] || apiInfo.version || UNDEFINED_SWAGGER_SEMVER,
|
|
528
|
+
predefinedMajorVersion: packageJSON.predefinedMajorVersion,
|
|
529
|
+
versionBumpType: process.env.VERSION_BUMP_TYPE,
|
|
530
|
+
sdkVersion: packageJSON.version,
|
|
531
|
+
nextPrereleaseId: prereleaseId
|
|
532
|
+
});
|
|
485
533
|
packageJSON.version = nextSemver;
|
|
486
534
|
fs.writeFileSync(pathToPackageJSON, JSON.stringify(packageJSON, null, 2));
|
|
487
|
-
ParserUtils.syncChangelog(packageJSON.version);
|
|
488
535
|
}
|
|
489
536
|
static getPackageJSONInfo(dir) {
|
|
490
537
|
const pathToPackageJSON = path.join(dir, "./package.json");
|
|
@@ -1347,11 +1394,12 @@ class CodeGenerator {
|
|
|
1347
1394
|
const swaggerFilePath = `${CliParser.getSwaggersOutputPath()}/${swaggerFile}`;
|
|
1348
1395
|
const api = await parser.parse(swaggerFilePath);
|
|
1349
1396
|
const indexImportsSet = /* @__PURE__ */ new Set();
|
|
1350
|
-
|
|
1397
|
+
const apiInfo = { ...api.info, "x-version": api["x-version"]?.version };
|
|
1398
|
+
console.log("----------\nGenerating API:", { title: apiInfo.title, version: apiInfo.version });
|
|
1351
1399
|
ParserUtils.mkdirIfNotExist(DIST_DIR);
|
|
1352
1400
|
ParserUtils.mkdirIfNotExist(DIST_DEFINITION_DIR);
|
|
1353
1401
|
ParserUtils.mkdirIfNotExist(DIST_ENDPOINTS_DIR);
|
|
1354
|
-
ParserUtils.syncPackageVersion(
|
|
1402
|
+
ParserUtils.syncPackageVersion(apiInfo, CliParser.isAdmin(), process.env.PRERELEASE_ID);
|
|
1355
1403
|
const { apiArgumentsByTag, apiBufferByTag, classBufferByTag, dependenciesByTag, classImports, arrayDefinitions, snippetMap } = await CodeGenerator.iterateApi(api, serviceName);
|
|
1356
1404
|
if (CliParser.getSnippetOutputPath()) {
|
|
1357
1405
|
try {
|
|
@@ -1441,33 +1489,36 @@ class SwaggerDownloader {
|
|
|
1441
1489
|
});
|
|
1442
1490
|
});
|
|
1443
1491
|
};
|
|
1444
|
-
static downloadFile = (targetFileName, url) => {
|
|
1492
|
+
static downloadFile = async (targetFileName, url) => {
|
|
1445
1493
|
const destFile = SwaggerDownloader.getDestFile(targetFileName);
|
|
1446
1494
|
let data = "";
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
data
|
|
1495
|
+
return new Promise((resolve) => {
|
|
1496
|
+
const request = https__namespace.get(url, function(response) {
|
|
1497
|
+
response.on("data", (chunk) => {
|
|
1498
|
+
data += chunk;
|
|
1499
|
+
});
|
|
1500
|
+
response.on("end", () => {
|
|
1501
|
+
if (response.statusCode !== 200) {
|
|
1502
|
+
console.log(`SwaggerDownload error with status code: ${response.statusCode}`);
|
|
1503
|
+
} else {
|
|
1504
|
+
fs__namespace.writeFileSync(destFile, JSON.stringify(JSON.parse(data), null, 2), "utf-8");
|
|
1505
|
+
SwaggerDownloader.postSanitizeDownloadedFile(destFile);
|
|
1506
|
+
console.log(`SwaggerDownload ${url} completed with status code: ${response.statusCode}`);
|
|
1507
|
+
}
|
|
1508
|
+
resolve(void 0);
|
|
1509
|
+
});
|
|
1450
1510
|
});
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
console.log(`SwaggerDownload error with status code: ${response.statusCode}`);
|
|
1454
|
-
} else {
|
|
1455
|
-
fs__namespace.writeFileSync(destFile, JSON.stringify(JSON.parse(data), null, 2), "utf-8");
|
|
1456
|
-
SwaggerDownloader.postSanitizeDownloadedFile(destFile);
|
|
1457
|
-
console.log(`SwaggerDownload ${url} completed with status code: ${response.statusCode}`);
|
|
1458
|
-
}
|
|
1511
|
+
request.on("error", (err) => {
|
|
1512
|
+
console.log(`SwaggerDownloader failed for "${targetFileName}" and "${url}"`, err);
|
|
1459
1513
|
});
|
|
1460
1514
|
});
|
|
1461
|
-
request.on("error", (err) => {
|
|
1462
|
-
console.log(`SwaggerDownloader failed for "${targetFileName}" and "${url}"`, err);
|
|
1463
|
-
});
|
|
1464
1515
|
};
|
|
1465
|
-
static main = () => {
|
|
1516
|
+
static main = async () => {
|
|
1466
1517
|
const swaggers = CliParser.getConfigFile();
|
|
1467
1518
|
for (const ref in swaggers) {
|
|
1468
1519
|
const targetFileName = swaggers[ref][2];
|
|
1469
1520
|
const url = swaggers[ref][3];
|
|
1470
|
-
SwaggerDownloader.downloadFile(targetFileName, url);
|
|
1521
|
+
await SwaggerDownloader.downloadFile(targetFileName, url);
|
|
1471
1522
|
}
|
|
1472
1523
|
};
|
|
1473
1524
|
}
|