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.
- package/bin/api.js +2 -0
- package/dist/bin.d.ts +1 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +6 -33
- package/dist/bin.js.map +1 -0
- package/dist/codegen/{language.d.ts → codegenerator.d.ts} +7 -4
- package/dist/codegen/codegenerator.d.ts.map +1 -0
- package/dist/codegen/{language.js → codegenerator.js} +4 -6
- package/dist/codegen/codegenerator.js.map +1 -0
- package/dist/codegen/factory.d.ts +7 -0
- package/dist/codegen/factory.d.ts.map +1 -0
- package/dist/codegen/factory.js +14 -0
- package/dist/codegen/factory.js.map +1 -0
- package/dist/codegen/languages/typescript/index.d.ts +90 -0
- package/dist/codegen/languages/typescript/index.d.ts.map +1 -0
- package/dist/codegen/languages/{typescript.js → typescript/index.js} +260 -206
- package/dist/codegen/languages/typescript/index.js.map +1 -0
- package/dist/codegen/languages/typescript/util.d.ts +1 -0
- package/dist/codegen/languages/typescript/util.d.ts.map +1 -0
- package/dist/codegen/languages/typescript/util.js +10 -18
- package/dist/codegen/languages/typescript/util.js.map +1 -0
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +4 -8
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/install.d.ts +1 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +52 -67
- package/dist/commands/install.js.map +1 -0
- package/dist/fetcher.d.ts +1 -0
- package/dist/fetcher.d.ts.map +1 -0
- package/dist/fetcher.js +12 -17
- package/dist/fetcher.js.map +1 -0
- package/dist/lib/prompt.d.ts +1 -0
- package/dist/lib/prompt.d.ts.map +1 -0
- package/dist/lib/prompt.js +4 -9
- package/dist/lib/prompt.js.map +1 -0
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +4 -9
- package/dist/logger.js.map +1 -0
- package/dist/packageInfo.d.ts +2 -1
- package/dist/packageInfo.d.ts.map +1 -0
- package/dist/packageInfo.js +3 -5
- package/dist/packageInfo.js.map +1 -0
- package/dist/storage.d.ts +2 -1
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +43 -40
- package/dist/storage.js.map +1 -0
- package/package.json +12 -10
- package/src/bin.ts +2 -2
- package/src/codegen/{language.ts → codegenerator.ts} +15 -6
- package/src/codegen/factory.ts +23 -0
- package/src/codegen/languages/{typescript.ts → typescript/index.ts} +269 -203
- package/src/commands/index.ts +1 -1
- package/src/commands/install.ts +21 -35
- package/src/packageInfo.ts +1 -1
- package/src/storage.ts +14 -5
- package/tsconfig.json +3 -10
- package/bin/api +0 -2
- package/dist/codegen/index.d.ts +0 -4
- package/dist/codegen/index.js +0 -23
- package/dist/codegen/languages/typescript.d.ts +0 -111
- package/src/codegen/index.ts +0 -31
package/dist/storage.js
CHANGED
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
|
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
|
|
28
|
+
return path.join(Storage.dir, 'api.json');
|
|
35
29
|
}
|
|
36
30
|
static getAPIsDir() {
|
|
37
|
-
return
|
|
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 =
|
|
50
|
-
|
|
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
|
|
54
|
+
await fs.promises.writeFile(Storage.getLockfilePath(), JSON.stringify(Storage.getDefaultLockfile(), null, 2));
|
|
60
55
|
}
|
|
61
56
|
if (Storage.getAPIsDir()) {
|
|
62
|
-
await
|
|
63
|
-
await
|
|
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
|
|
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 (
|
|
84
|
-
const file =
|
|
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 = (
|
|
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
|
|
139
|
+
return path.join(Storage.getAPIsDir(), this.identifier);
|
|
145
140
|
}
|
|
146
141
|
getAPIDefinition() {
|
|
147
|
-
const file =
|
|
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 =
|
|
158
|
-
|
|
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 (!
|
|
195
|
-
|
|
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 (!
|
|
199
|
-
|
|
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 =
|
|
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 (!
|
|
209
|
-
|
|
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:
|
|
218
|
+
installerVersion: PACKAGE_VERSION,
|
|
216
219
|
});
|
|
217
|
-
|
|
218
|
-
|
|
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
|
-
|
|
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
|
+
"version": "7.0.0-alpha.5",
|
|
4
4
|
"description": "Magical SDK generation from an OpenAPI definition 🪄",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"bin": {
|
|
6
|
-
"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
|
|
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
|
-
"
|
|
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": "^
|
|
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.
|
|
61
|
-
"@readme/api-core": "^7.0.0-alpha.
|
|
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.
|
|
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": "
|
|
83
|
+
"gitHead": "b1e705dddedd223f360f1dfe620ae721f54af88b"
|
|
82
84
|
}
|
package/src/bin.ts
CHANGED
|
@@ -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
|
|
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<
|
|
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
|
|
65
|
+
abstract generate(): Promise<Record<string, string>>;
|
|
66
|
+
|
|
67
|
+
abstract install(storage: Storage, opts?: InstallerOptions): Promise<void>;
|
|
59
68
|
|
|
60
|
-
abstract
|
|
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
|
+
}
|