api 7.0.0-alpha.3 → 7.0.0-alpha.5

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.
Files changed (64) hide show
  1. package/bin/api.js +2 -0
  2. package/dist/bin.d.ts +1 -0
  3. package/dist/bin.d.ts.map +1 -0
  4. package/dist/bin.js +6 -33
  5. package/dist/bin.js.map +1 -0
  6. package/dist/codegen/{language.d.ts → codegenerator.d.ts} +7 -4
  7. package/dist/codegen/codegenerator.d.ts.map +1 -0
  8. package/dist/codegen/{language.js → codegenerator.js} +4 -6
  9. package/dist/codegen/codegenerator.js.map +1 -0
  10. package/dist/codegen/factory.d.ts +7 -0
  11. package/dist/codegen/factory.d.ts.map +1 -0
  12. package/dist/codegen/factory.js +14 -0
  13. package/dist/codegen/factory.js.map +1 -0
  14. package/dist/codegen/languages/typescript/index.d.ts +90 -0
  15. package/dist/codegen/languages/typescript/index.d.ts.map +1 -0
  16. package/dist/codegen/languages/{typescript.js → typescript/index.js} +260 -206
  17. package/dist/codegen/languages/typescript/index.js.map +1 -0
  18. package/dist/codegen/languages/typescript/util.d.ts +1 -0
  19. package/dist/codegen/languages/typescript/util.d.ts.map +1 -0
  20. package/dist/codegen/languages/typescript/util.js +10 -18
  21. package/dist/codegen/languages/typescript/util.js.map +1 -0
  22. package/dist/commands/index.d.ts +1 -0
  23. package/dist/commands/index.d.ts.map +1 -0
  24. package/dist/commands/index.js +4 -8
  25. package/dist/commands/index.js.map +1 -0
  26. package/dist/commands/install.d.ts +1 -0
  27. package/dist/commands/install.d.ts.map +1 -0
  28. package/dist/commands/install.js +52 -67
  29. package/dist/commands/install.js.map +1 -0
  30. package/dist/fetcher.d.ts +1 -0
  31. package/dist/fetcher.d.ts.map +1 -0
  32. package/dist/fetcher.js +12 -17
  33. package/dist/fetcher.js.map +1 -0
  34. package/dist/lib/prompt.d.ts +1 -0
  35. package/dist/lib/prompt.d.ts.map +1 -0
  36. package/dist/lib/prompt.js +4 -9
  37. package/dist/lib/prompt.js.map +1 -0
  38. package/dist/logger.d.ts +1 -0
  39. package/dist/logger.d.ts.map +1 -0
  40. package/dist/logger.js +4 -9
  41. package/dist/logger.js.map +1 -0
  42. package/dist/packageInfo.d.ts +2 -1
  43. package/dist/packageInfo.d.ts.map +1 -0
  44. package/dist/packageInfo.js +3 -5
  45. package/dist/packageInfo.js.map +1 -0
  46. package/dist/storage.d.ts +2 -1
  47. package/dist/storage.d.ts.map +1 -0
  48. package/dist/storage.js +43 -40
  49. package/dist/storage.js.map +1 -0
  50. package/package.json +12 -10
  51. package/src/bin.ts +2 -2
  52. package/src/codegen/{language.ts → codegenerator.ts} +15 -6
  53. package/src/codegen/factory.ts +23 -0
  54. package/src/codegen/languages/{typescript.ts → typescript/index.ts} +269 -203
  55. package/src/commands/index.ts +1 -1
  56. package/src/commands/install.ts +21 -35
  57. package/src/packageInfo.ts +1 -1
  58. package/src/storage.ts +14 -5
  59. package/tsconfig.json +3 -10
  60. package/bin/api +0 -2
  61. package/dist/codegen/index.d.ts +0 -4
  62. package/dist/codegen/index.js +0 -23
  63. package/dist/codegen/languages/typescript.d.ts +0 -111
  64. package/src/codegen/index.ts +0 -31
package/dist/storage.js CHANGED
@@ -1,16 +1,10 @@
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
- const node_fs_1 = __importDefault(require("node:fs"));
7
- const node_path_1 = __importDefault(require("node:path"));
8
- const make_dir_1 = __importDefault(require("make-dir"));
9
- const ssri_1 = __importDefault(require("ssri"));
10
- const validate_npm_package_name_1 = __importDefault(require("validate-npm-package-name"));
11
- const fetcher_1 = __importDefault(require("./fetcher"));
12
- const packageInfo_1 = require("./packageInfo");
13
- class Storage {
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import ssri from 'ssri';
4
+ import validateNPMPackageName from 'validate-npm-package-name';
5
+ import Fetcher from './fetcher.js';
6
+ import { PACKAGE_VERSION } from './packageInfo.js';
7
+ export default class Storage {
14
8
  static dir;
15
9
  static lockfile;
16
10
  /**
@@ -22,7 +16,7 @@ class Storage {
22
16
  fetcher;
23
17
  constructor(source, identifier) {
24
18
  Storage.setStorageDir();
25
- this.fetcher = new fetcher_1.default(source);
19
+ this.fetcher = new Fetcher(source);
26
20
  this.source = source;
27
21
  if (identifier) {
28
22
  this.identifier = identifier;
@@ -31,10 +25,10 @@ class Storage {
31
25
  Storage.lockfile = false;
32
26
  }
33
27
  static getLockfilePath() {
34
- return node_path_1.default.join(Storage.dir, 'api.json');
28
+ return path.join(Storage.dir, 'api.json');
35
29
  }
36
30
  static getAPIsDir() {
37
- return node_path_1.default.join(Storage.dir, 'apis');
31
+ return path.join(Storage.dir, 'apis');
38
32
  }
39
33
  static setStorageDir(dir) {
40
34
  if (dir) {
@@ -46,8 +40,9 @@ class Storage {
46
40
  // shouldn't overwrite what we've already got.
47
41
  return;
48
42
  }
49
- Storage.dir = make_dir_1.default.sync(node_path_1.default.join(process.cwd(), '.api'));
50
- make_dir_1.default.sync(Storage.getAPIsDir());
43
+ Storage.dir = path.join(process.cwd(), '.api');
44
+ fs.mkdirSync(Storage.dir, { recursive: true });
45
+ fs.mkdirSync(Storage.getAPIsDir(), { recursive: true });
51
46
  }
52
47
  /**
53
48
  * Reset the state of the entire storage system.
@@ -56,11 +51,11 @@ class Storage {
56
51
  */
57
52
  static async reset() {
58
53
  if (Storage.getLockfilePath()) {
59
- await node_fs_1.default.promises.writeFile(Storage.getLockfilePath(), JSON.stringify(Storage.getDefaultLockfile(), null, 2));
54
+ await fs.promises.writeFile(Storage.getLockfilePath(), JSON.stringify(Storage.getDefaultLockfile(), null, 2));
60
55
  }
61
56
  if (Storage.getAPIsDir()) {
62
- await node_fs_1.default.promises.rm(Storage.getAPIsDir(), { recursive: true });
63
- await node_fs_1.default.promises.mkdir(Storage.getAPIsDir(), { recursive: true });
57
+ await fs.promises.rm(Storage.getAPIsDir(), { recursive: true });
58
+ await fs.promises.mkdir(Storage.getAPIsDir(), { recursive: true });
64
59
  }
65
60
  }
66
61
  static getDefaultLockfile() {
@@ -70,7 +65,7 @@ class Storage {
70
65
  };
71
66
  }
72
67
  static generateIntegrityHash(definition) {
73
- return ssri_1.default
68
+ return ssri
74
69
  .fromData(JSON.stringify(definition), {
75
70
  algorithms: ['sha512'],
76
71
  })
@@ -80,8 +75,8 @@ class Storage {
80
75
  if (typeof Storage.lockfile === 'object') {
81
76
  return Storage.lockfile;
82
77
  }
83
- if (node_fs_1.default.existsSync(Storage.getLockfilePath())) {
84
- const file = node_fs_1.default.readFileSync(Storage.getLockfilePath(), 'utf8');
78
+ if (fs.existsSync(Storage.getLockfilePath())) {
79
+ const file = fs.readFileSync(Storage.getLockfilePath(), 'utf8');
85
80
  Storage.lockfile = JSON.parse(file);
86
81
  }
87
82
  else {
@@ -94,7 +89,7 @@ class Storage {
94
89
  if (Storage.isInLockFile({ identifier })) {
95
90
  throw new Error(`"${identifier}" is already taken in your \`.api/\` directory. Please try another identifier.`);
96
91
  }
97
- const isValidForNPM = (0, validate_npm_package_name_1.default)(prefixWithAPINamespace ? `@api/${identifier}` : identifier);
92
+ const isValidForNPM = validateNPMPackageName(prefixWithAPINamespace ? `@api/${identifier}` : identifier);
98
93
  if (!isValidForNPM.validForNewPackages) {
99
94
  // `prompts` doesn't support surfacing multiple errors in a `validate` call so we can only
100
95
  // surface the first to the user.
@@ -141,10 +136,10 @@ class Storage {
141
136
  if (!this.isInLockfile()) {
142
137
  throw new Error(`${this.source} has not been saved to storage yet and must do so before being retrieved.`);
143
138
  }
144
- return node_path_1.default.join(Storage.getAPIsDir(), this.identifier);
139
+ return path.join(Storage.getAPIsDir(), this.identifier);
145
140
  }
146
141
  getAPIDefinition() {
147
- const file = node_fs_1.default.readFileSync(node_path_1.default.join(this.getIdentifierStorageDir(), 'openapi.json'), 'utf8');
142
+ const file = fs.readFileSync(path.join(this.getIdentifierStorageDir(), 'openapi.json'), 'utf8');
148
143
  return JSON.parse(file);
149
144
  }
150
145
  saveSourceFiles(files) {
@@ -154,8 +149,16 @@ class Storage {
154
149
  return new Promise(resolve => {
155
150
  const savedSource = [];
156
151
  Object.entries(files).forEach(([fileName, contents]) => {
157
- const sourceFilePath = node_path_1.default.join(this.getIdentifierStorageDir(), fileName);
158
- node_fs_1.default.writeFileSync(sourceFilePath, contents);
152
+ const sourceFilePath = path.join(this.getIdentifierStorageDir(), fileName);
153
+ // If this file is stored in a subdirectory then we need to create it.
154
+ if (path.dirname(fileName) !== '.') {
155
+ const dir = path.dirname(fileName);
156
+ const dirPath = path.join(this.getIdentifierStorageDir(), dir);
157
+ if (!fs.existsSync(dirPath)) {
158
+ fs.mkdirSync(dirPath);
159
+ }
160
+ }
161
+ fs.writeFileSync(sourceFilePath, contents);
159
162
  savedSource.push(sourceFilePath);
160
163
  });
161
164
  resolve(savedSource);
@@ -191,31 +194,31 @@ class Storage {
191
194
  throw new TypeError('An identifier must be set before saving the API definition into storage.');
192
195
  }
193
196
  // Create our main `.api/` directory.
194
- if (!node_fs_1.default.existsSync(Storage.dir)) {
195
- node_fs_1.default.mkdirSync(Storage.dir, { recursive: true });
197
+ if (!fs.existsSync(Storage.dir)) {
198
+ fs.mkdirSync(Storage.dir, { recursive: true });
196
199
  }
197
200
  // Create the `.api/apis/` diretory where we'll be storing API definitions.
198
- if (!node_fs_1.default.existsSync(Storage.getAPIsDir())) {
199
- node_fs_1.default.mkdirSync(Storage.getAPIsDir(), { recursive: true });
201
+ if (!fs.existsSync(Storage.getAPIsDir())) {
202
+ fs.mkdirSync(Storage.getAPIsDir(), { recursive: true });
200
203
  }
201
204
  if (!this.isInLockfile()) {
202
205
  // This API doesn't exist within our storage system yet so we need to record it in the
203
206
  // lockfile.
204
- const identifierStorageDir = node_path_1.default.join(Storage.getAPIsDir(), this.identifier);
207
+ const identifierStorageDir = path.join(Storage.getAPIsDir(), this.identifier);
205
208
  const saved = JSON.stringify(spec, null, 2);
206
209
  // Create the `.api/apis/<identifier>` directory where we'll be storing this API definition
207
210
  // and eventually its codegen'd SDK.
208
- if (!node_fs_1.default.existsSync(identifierStorageDir)) {
209
- node_fs_1.default.mkdirSync(identifierStorageDir, { recursive: true });
211
+ if (!fs.existsSync(identifierStorageDir)) {
212
+ fs.mkdirSync(identifierStorageDir, { recursive: true });
210
213
  }
211
214
  Storage.lockfile.apis.push({
212
215
  identifier: this.identifier,
213
216
  source: this.source,
214
217
  integrity: Storage.generateIntegrityHash(spec),
215
- installerVersion: packageInfo_1.PACKAGE_VERSION,
218
+ installerVersion: PACKAGE_VERSION,
216
219
  });
217
- node_fs_1.default.writeFileSync(node_path_1.default.join(identifierStorageDir, 'openapi.json'), saved);
218
- node_fs_1.default.writeFileSync(Storage.getLockfilePath(), JSON.stringify(Storage.lockfile, null, 2));
220
+ fs.writeFileSync(path.join(identifierStorageDir, 'openapi.json'), saved);
221
+ fs.writeFileSync(Storage.getLockfilePath(), JSON.stringify(Storage.lockfile, null, 2));
219
222
  }
220
223
  else {
221
224
  // Is this the same spec that we already have? Should we update it? // @todo
@@ -223,4 +226,4 @@ class Storage {
223
226
  return spec;
224
227
  }
225
228
  }
226
- exports.default = Storage;
229
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,15 @@
1
1
  {
2
2
  "name": "api",
3
- "version": "7.0.0-alpha.3",
3
+ "version": "7.0.0-alpha.5",
4
4
  "description": "Magical SDK generation from an OpenAPI definition 🪄",
5
+ "type": "module",
5
6
  "bin": {
6
- "api": "./bin/api"
7
+ "api": "bin/api.js"
7
8
  },
8
9
  "scripts": {
10
+ "attw": "attw --pack --format table-flipped",
9
11
  "build": "tsc",
10
- "debug:bin": "node -r ts-node/register src/bin.ts",
12
+ "debug:bin": "node --loader ts-node/esm src/bin.ts",
11
13
  "lint:types": "tsc --noEmit",
12
14
  "prebuild": "rm -rf dist/; npm run version",
13
15
  "prepack": "npm run build",
@@ -47,18 +49,18 @@
47
49
  "lodash.deburr": "^4.1.0",
48
50
  "lodash.setwith": "^4.3.2",
49
51
  "lodash.startcase": "^4.4.0",
50
- "make-dir": "^4.0.0",
51
- "oas": "^22.0.0",
52
+ "oas": "^23.0.0",
52
53
  "ora": "^5.4.1",
53
54
  "prompts": "^2.4.2",
54
55
  "semver": "^7.3.8",
55
56
  "ssri": "^10.0.1",
56
- "ts-morph": "^17.0.1",
57
+ "ts-morph": "^20.0.0",
58
+ "tsup": "^7.2.0",
57
59
  "validate-npm-package-name": "^5.0.0"
58
60
  },
59
61
  "devDependencies": {
60
- "@api/test-utils": "^7.0.0-alpha.2",
61
- "@readme/api-core": "^7.0.0-alpha.3",
62
+ "@api/test-utils": "^7.0.0-alpha.5",
63
+ "@readme/api-core": "^7.0.0-alpha.5",
62
64
  "@readme/oas-examples": "^5.12.0",
63
65
  "@types/js-yaml": "^4.0.5",
64
66
  "@types/lodash.camelcase": "^4.3.7",
@@ -71,12 +73,12 @@
71
73
  "@types/validate-npm-package-name": "^4.0.0",
72
74
  "@vitest/coverage-v8": "^0.34.4",
73
75
  "fetch-mock": "^9.11.0",
74
- "oas-normalize": "^11.0.0",
76
+ "oas-normalize": "^11.0.1",
75
77
  "type-fest": "^4.3.1",
76
78
  "typescript": "^5.2.2",
77
79
  "unique-temp-dir": "^1.0.0",
78
80
  "vitest": "^0.34.5"
79
81
  },
80
82
  "prettier": "@readme/eslint-config/prettier",
81
- "gitHead": "39b966c3f1bdc283e3f4d0e2d50484cfbc7a49a1"
83
+ "gitHead": "b1e705dddedd223f360f1dfe620ae721f54af88b"
82
84
  }
package/src/bin.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Command } from 'commander';
2
2
 
3
- import commands from './commands';
4
- import * as pkg from './packageInfo';
3
+ import commands from './commands/index.js';
4
+ import * as pkg from './packageInfo.js';
5
5
 
6
6
  (async () => {
7
7
  const program = new Command();
@@ -1,7 +1,7 @@
1
- import type Storage from '../storage';
1
+ import type Storage from '../storage.js';
2
2
  import type Oas from 'oas';
3
3
 
4
- import { PACKAGE_NAME, PACKAGE_VERSION } from '../packageInfo';
4
+ import { PACKAGE_NAME, PACKAGE_VERSION } from '../packageInfo.js';
5
5
 
6
6
  export interface InstallerOptions {
7
7
  /**
@@ -16,7 +16,7 @@ export interface InstallerOptions {
16
16
  logger?: (msg: string) => void;
17
17
  }
18
18
 
19
- export default abstract class CodeGeneratorLanguage {
19
+ export default abstract class CodeGenerator {
20
20
  spec: Oas;
21
21
 
22
22
  specPath: string;
@@ -25,7 +25,14 @@ export default abstract class CodeGeneratorLanguage {
25
25
 
26
26
  userAgent: string;
27
27
 
28
- requiredPackages!: Record<string, { reason: string; url: string }>;
28
+ requiredPackages!: Record<
29
+ string,
30
+ {
31
+ reason: string;
32
+ url: string;
33
+ version: string;
34
+ }
35
+ >;
29
36
 
30
37
  constructor(spec: Oas, specPath: string, identifier: string) {
31
38
  this.spec = spec;
@@ -55,9 +62,11 @@ export default abstract class CodeGeneratorLanguage {
55
62
  }
56
63
  }
57
64
 
58
- abstract generator(): Promise<Record<string, string>>;
65
+ abstract generate(): Promise<Record<string, string>>;
66
+
67
+ abstract install(storage: Storage, opts?: InstallerOptions): Promise<void>;
59
68
 
60
- abstract installer(storage: Storage, opts?: InstallerOptions): Promise<void>;
69
+ abstract compile(storage: Storage, opts?: InstallerOptions): Promise<void>;
61
70
 
62
71
  hasRequiredPackages() {
63
72
  return Boolean(Object.keys(this.requiredPackages));
@@ -0,0 +1,23 @@
1
+ import type CodeGenerator from './codegenerator.js';
2
+ import type Oas from 'oas';
3
+
4
+ import TSGenerator from './languages/typescript/index.js';
5
+
6
+ export enum SupportedLanguages {
7
+ JS = 'js',
8
+ }
9
+
10
+ export default function codegenFactory(
11
+ language: SupportedLanguages,
12
+ spec: Oas,
13
+ specPath: string,
14
+ identifier: string,
15
+ ): CodeGenerator {
16
+ switch (language) {
17
+ case SupportedLanguages.JS:
18
+ return new TSGenerator(spec, specPath, identifier);
19
+
20
+ default:
21
+ throw new TypeError(`Unsupported language supplied: ${language}`);
22
+ }
23
+ }