@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, { readFileSync, writeFileSync } from 'fs';
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
- let swaggerVersion = apiInfo.version ? apiInfo.version : UNDEFINED_SWAGGER_SEMVER;
448
- swaggerVersion = Number(swaggerVersion.replace(".", "").replace(".", ""));
449
- swaggerVersion = isNaN(swaggerVersion) ? 0 : swaggerVersion;
450
- const currentSemver = packageJSON.version;
451
- const currentPrerelease = semver.prerelease(currentSemver);
452
- let nextSemver = [semver.major(currentSemver), swaggerVersion, semver.patch(currentSemver)].join(".");
453
- if (currentPrerelease) {
454
- const [id, ...rest] = currentPrerelease;
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
- console.log("----------\nGenerating API:", { title: api.info.title, version: api.info.version });
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(api.info, CliParser.isAdmin(), process.env.PRERELEASE_ID);
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
- const request = https.get(url, function(response) {
1425
- response.on("data", (chunk) => {
1426
- data += chunk;
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
- response.on("end", () => {
1429
- if (response.statusCode !== 200) {
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
  }