@accelbyte/codegen 1.0.5 → 2.0.0-beta.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.
@@ -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,50 @@ export function ${className}(sdk: AccelbyteSDK, args?: ApiArgs) {
123
123
  `;
124
124
  };
125
125
 
126
+ class VersionHelpers {
127
+ static getNextVersion = ({
128
+ codegenVersion,
129
+ serviceVersion,
130
+ predefinedMajorVersion,
131
+ predefinedMinorVersion,
132
+ sdkVersion,
133
+ nextPrereleaseId
134
+ }) => {
135
+ const codegenSemvers = semver.parse(codegenVersion);
136
+ const serviceSemvers = semver.parse(serviceVersion);
137
+ const sdkSemvers = semver.parse(sdkVersion);
138
+ if (codegenSemvers === null) {
139
+ throw new Error(`Invalid codegen version: ${codegenVersion}`);
140
+ }
141
+ if (serviceSemvers === null) {
142
+ throw new Error(`Invalid service version: ${serviceVersion}`);
143
+ }
144
+ if (sdkSemvers === null) {
145
+ throw new Error(`Invalid sdk version: ${sdkVersion}`);
146
+ }
147
+ const nextMajor = codegenSemvers.minor + predefinedMajorVersion;
148
+ const nextMinor = codegenSemvers.minor + predefinedMinorVersion;
149
+ const nextPatch = codegenSemvers.patch + serviceSemvers.patch;
150
+ const { major: currentMajor, minor: currentMinor, patch: currentPatch } = sdkSemvers;
151
+ let nextVersion = [
152
+ codegenSemvers.major + predefinedMajorVersion,
153
+ nextMinor,
154
+ nextPatch
155
+ ].join(".");
156
+ if (nextPrereleaseId) {
157
+ if (nextMinor !== currentMinor || nextPatch !== currentPatch || nextMajor !== currentMajor) {
158
+ nextVersion += `-${nextPrereleaseId}.0`;
159
+ } else {
160
+ nextVersion += `-${sdkSemvers.prerelease.join(".")}`;
161
+ nextVersion = semver.inc(nextVersion, "prerelease", void 0, nextPrereleaseId);
162
+ }
163
+ }
164
+ return nextVersion;
165
+ };
166
+ }
167
+
168
+ const codegenPackageJsonPath = path__default.join(__dirname, "../package.json");
169
+ const codegenPackageJSON = JSON.parse(fs__default.readFileSync(codegenPackageJsonPath, "utf-8"));
126
170
  const UNDEFINED_SWAGGER_SEMVER = "0.0.0";
127
171
  const REMOVED_KEYWORDS = [
128
172
  "/admin/",
@@ -426,42 +470,22 @@ class ParserUtils {
426
470
  ParserUtils.mkdirIfNotExist(distDir);
427
471
  fs__default.writeFileSync(path__default.join(distDir, `all-${isAdminWebSdk ? "admin" : "public"}-imports.ts`), ParserUtils.prependCopyrightHeader(buffer));
428
472
  }
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
473
  static syncPackageVersion(apiInfo, isAdminWebSdk, prereleaseId) {
442
474
  if (isAdminWebSdk) {
443
475
  return;
444
476
  }
445
477
  const currDir = process.cwd();
446
478
  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
- }
479
+ const nextSemver = VersionHelpers.getNextVersion({
480
+ codegenVersion: codegenPackageJSON.version,
481
+ serviceVersion: apiInfo["x-version"] || apiInfo.version || UNDEFINED_SWAGGER_SEMVER,
482
+ predefinedMajorVersion: packageJSON.predefinedMajorVersion,
483
+ predefinedMinorVersion: packageJSON.predefinedMinorVersion,
484
+ sdkVersion: packageJSON.version,
485
+ nextPrereleaseId: prereleaseId
486
+ });
462
487
  packageJSON.version = nextSemver;
463
488
  writeFileSync(pathToPackageJSON, JSON.stringify(packageJSON, null, 2));
464
- ParserUtils.syncChangelog(packageJSON.version);
465
489
  }
466
490
  static getPackageJSONInfo(dir) {
467
491
  const pathToPackageJSON = path__default.join(dir, "./package.json");
@@ -1324,11 +1348,12 @@ class CodeGenerator {
1324
1348
  const swaggerFilePath = `${CliParser.getSwaggersOutputPath()}/${swaggerFile}`;
1325
1349
  const api = await parser.parse(swaggerFilePath);
1326
1350
  const indexImportsSet = /* @__PURE__ */ new Set();
1327
- console.log("----------\nGenerating API:", { title: api.info.title, version: api.info.version });
1351
+ const apiInfo = { ...api.info, "x-version": api["x-version"]?.version };
1352
+ console.log("----------\nGenerating API:", { title: apiInfo.title, version: apiInfo.version });
1328
1353
  ParserUtils.mkdirIfNotExist(DIST_DIR);
1329
1354
  ParserUtils.mkdirIfNotExist(DIST_DEFINITION_DIR);
1330
1355
  ParserUtils.mkdirIfNotExist(DIST_ENDPOINTS_DIR);
1331
- ParserUtils.syncPackageVersion(api.info, CliParser.isAdmin(), process.env.PRERELEASE_ID);
1356
+ ParserUtils.syncPackageVersion(apiInfo, CliParser.isAdmin(), process.env.PRERELEASE_ID);
1332
1357
  const { apiArgumentsByTag, apiBufferByTag, classBufferByTag, dependenciesByTag, classImports, arrayDefinitions, snippetMap } = await CodeGenerator.iterateApi(api, serviceName);
1333
1358
  if (CliParser.getSnippetOutputPath()) {
1334
1359
  try {
@@ -1418,33 +1443,36 @@ class SwaggerDownloader {
1418
1443
  });
1419
1444
  });
1420
1445
  };
1421
- static downloadFile = (targetFileName, url) => {
1446
+ static downloadFile = async (targetFileName, url) => {
1422
1447
  const destFile = SwaggerDownloader.getDestFile(targetFileName);
1423
1448
  let data = "";
1424
- const request = https.get(url, function(response) {
1425
- response.on("data", (chunk) => {
1426
- data += chunk;
1449
+ return new Promise((resolve) => {
1450
+ const request = https.get(url, function(response) {
1451
+ response.on("data", (chunk) => {
1452
+ data += chunk;
1453
+ });
1454
+ response.on("end", () => {
1455
+ if (response.statusCode !== 200) {
1456
+ console.log(`SwaggerDownload error with status code: ${response.statusCode}`);
1457
+ } else {
1458
+ fs.writeFileSync(destFile, JSON.stringify(JSON.parse(data), null, 2), "utf-8");
1459
+ SwaggerDownloader.postSanitizeDownloadedFile(destFile);
1460
+ console.log(`SwaggerDownload ${url} completed with status code: ${response.statusCode}`);
1461
+ }
1462
+ resolve(void 0);
1463
+ });
1427
1464
  });
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
- }
1465
+ request.on("error", (err) => {
1466
+ console.log(`SwaggerDownloader failed for "${targetFileName}" and "${url}"`, err);
1436
1467
  });
1437
1468
  });
1438
- request.on("error", (err) => {
1439
- console.log(`SwaggerDownloader failed for "${targetFileName}" and "${url}"`, err);
1440
- });
1441
1469
  };
1442
- static main = () => {
1470
+ static main = async () => {
1443
1471
  const swaggers = CliParser.getConfigFile();
1444
1472
  for (const ref in swaggers) {
1445
1473
  const targetFileName = swaggers[ref][2];
1446
1474
  const url = swaggers[ref][3];
1447
- SwaggerDownloader.downloadFile(targetFileName, url);
1475
+ await SwaggerDownloader.downloadFile(targetFileName, url);
1448
1476
  }
1449
1477
  };
1450
1478
  }