strapi-typed-client 1.6.1 → 2.0.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.
- package/README.md +2 -2
- package/dist/cli/commands/check.d.ts +2 -3
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +3 -3
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +3 -3
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +6 -4
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/watch.d.ts +3 -3
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +19 -9
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/utils/file-writer.d.ts +8 -7
- package/dist/cli/utils/file-writer.d.ts.map +1 -1
- package/dist/cli/utils/file-writer.js +17 -61
- package/dist/cli/utils/file-writer.js.map +1 -1
- package/dist/core/endpoint-converter.d.ts +5 -1
- package/dist/core/endpoint-converter.d.ts.map +1 -1
- package/dist/core/endpoint-converter.js +114 -8
- package/dist/core/endpoint-converter.js.map +1 -1
- package/dist/generator/auth-api-generator.d.ts +11 -3
- package/dist/generator/auth-api-generator.d.ts.map +1 -1
- package/dist/generator/auth-api-generator.js +213 -220
- package/dist/generator/auth-api-generator.js.map +1 -1
- package/dist/generator/client-generator.d.ts +9 -0
- package/dist/generator/client-generator.d.ts.map +1 -1
- package/dist/generator/client-generator.js +201 -78
- package/dist/generator/client-generator.js.map +1 -1
- package/dist/generator/custom-api-generator.d.ts +1 -1
- package/dist/generator/custom-api-generator.d.ts.map +1 -1
- package/dist/generator/custom-api-generator.js +29 -5
- package/dist/generator/custom-api-generator.js.map +1 -1
- package/dist/generator/index-generator.d.ts.map +1 -1
- package/dist/generator/index-generator.js +0 -1
- package/dist/generator/index-generator.js.map +1 -1
- package/dist/generator/index.d.ts +18 -1
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +85 -9
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/plugin-api-generator.d.ts +2 -0
- package/dist/generator/plugin-api-generator.d.ts.map +1 -1
- package/dist/generator/plugin-api-generator.js +23 -1
- package/dist/generator/plugin-api-generator.js.map +1 -1
- package/dist/generator/plugin-registry.d.ts +5 -0
- package/dist/generator/plugin-registry.d.ts.map +1 -1
- package/dist/generator/plugin-registry.js +2 -1
- package/dist/generator/plugin-registry.js.map +1 -1
- package/dist/generator/types-generator.d.ts +13 -3
- package/dist/generator/types-generator.d.ts.map +1 -1
- package/dist/generator/types-generator.js +91 -101
- package/dist/generator/types-generator.js.map +1 -1
- package/dist/next/index.d.ts +9 -1
- package/dist/next/index.d.ts.map +1 -1
- package/dist/next/index.js +46 -45
- package/dist/next/index.js.map +1 -1
- package/dist/schema-types.d.ts +1 -1
- package/dist/schema-types.d.ts.map +1 -1
- package/dist/shared/client-header.d.ts +19 -0
- package/dist/shared/client-header.d.ts.map +1 -0
- package/dist/shared/client-header.js +58 -0
- package/dist/shared/client-header.js.map +1 -0
- package/package.json +9 -15
- package/dist/index.d.ts +0 -102
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -79
- package/dist/index.js.map +0 -1
- package/src/generator/templates/stringify-query.ts +0 -36
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
import { toCamelCase } from '../shared/string-utils.js';
|
|
1
|
+
import { toCamelCase, toPascalCase } from '../shared/string-utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* CollectionAPI / SingleTypeAPI CRUD surface. A custom route whose action
|
|
4
|
+
* matches one of these would override the inherited method with an
|
|
5
|
+
* incompatible signature (TS2416) and shadow the typed CRUD, so on a
|
|
6
|
+
* content-type class its generated method is name-mangled — e.g. a `create`
|
|
7
|
+
* action on the article controller becomes `createArticle`.
|
|
8
|
+
*/
|
|
9
|
+
const RESERVED_BASE_METHODS = new Set([
|
|
10
|
+
'find',
|
|
11
|
+
'findOne',
|
|
12
|
+
'findWithMeta',
|
|
13
|
+
'create',
|
|
14
|
+
'update',
|
|
15
|
+
'delete',
|
|
16
|
+
]);
|
|
2
17
|
export class CustomApiGenerator {
|
|
3
18
|
customTypes;
|
|
4
19
|
/**
|
|
@@ -18,10 +33,10 @@ export class CustomApiGenerator {
|
|
|
18
33
|
* resource prefix from route paths. When omitted, falls back to naive
|
|
19
34
|
* `controller + "s"` pluralization (kept for standalone routes only).
|
|
20
35
|
*/
|
|
21
|
-
generateCustomMethods(controller, routes, isStandalone = false, endpoint) {
|
|
36
|
+
generateCustomMethods(controller, routes, isStandalone = false, endpoint, contentTypeName) {
|
|
22
37
|
return routes
|
|
23
38
|
.map(route => '\n' +
|
|
24
|
-
this.generateCustomMethod(route, isStandalone, endpoint))
|
|
39
|
+
this.generateCustomMethod(route, isStandalone, endpoint, contentTypeName))
|
|
25
40
|
.join('\n');
|
|
26
41
|
}
|
|
27
42
|
/**
|
|
@@ -35,11 +50,20 @@ export class CustomApiGenerator {
|
|
|
35
50
|
return ('// Custom API namespace types\n\n' +
|
|
36
51
|
this.customTypes.typeDefinitions.map(td => td + '\n').join('\n'));
|
|
37
52
|
}
|
|
38
|
-
generateCustomMethod(route, isStandalone = false, endpoint) {
|
|
53
|
+
generateCustomMethod(route, isStandalone = false, endpoint, contentTypeName) {
|
|
39
54
|
const customType = this.customTypes?.types.get(route.handler);
|
|
40
55
|
const inputType = customType?.inputType || 'any';
|
|
41
56
|
const outputType = customType?.outputType || 'any';
|
|
42
|
-
|
|
57
|
+
let methodName = toCamelCase(route.action);
|
|
58
|
+
// On a content-type class, a custom action sharing a base CRUD name
|
|
59
|
+
// would emit an incompatible override (TS2416) and hide the typed base
|
|
60
|
+
// method, so mangle it (create -> createArticle). Standalone classes
|
|
61
|
+
// extend BaseAPI, which has no CRUD surface, so they are left as-is.
|
|
62
|
+
if (!isStandalone &&
|
|
63
|
+
contentTypeName &&
|
|
64
|
+
RESERVED_BASE_METHODS.has(methodName)) {
|
|
65
|
+
methodName = methodName + toPascalCase(contentTypeName);
|
|
66
|
+
}
|
|
43
67
|
const params = this.generateMethodParams(route, inputType);
|
|
44
68
|
const hasBody = route.method === 'POST' ||
|
|
45
69
|
route.method === 'PUT' ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-api-generator.js","sourceRoot":"","sources":["../../src/generator/custom-api-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"custom-api-generator.js","sourceRoot":"","sources":["../../src/generator/custom-api-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-generator.d.ts","sourceRoot":"","sources":["../../src/generator/index-generator.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IACvB,QAAQ,IAAI,MAAM;
|
|
1
|
+
{"version":3,"file":"index-generator.d.ts","sourceRoot":"","sources":["../../src/generator/index-generator.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IACvB,QAAQ,IAAI,MAAM;CASrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-generator.js","sourceRoot":"","sources":["../../src/generator/index-generator.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;IACvB,QAAQ;QACJ,OAAO
|
|
1
|
+
{"version":3,"file":"index-generator.js","sourceRoot":"","sources":["../../src/generator/index-generator.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;IACvB,QAAQ;QACJ,OAAO;;;;;;CAMd,CAAA;IACG,CAAC;CACJ"}
|
|
@@ -6,8 +6,25 @@ export declare class Generator {
|
|
|
6
6
|
private clientGenerator;
|
|
7
7
|
private indexGenerator;
|
|
8
8
|
constructor(outputDir: string);
|
|
9
|
-
generate(schema: ParsedSchema, endpoints?: ParsedEndpoint[], extraTypes?: ExtraControllerType[], schemaHash?: string, generatorVersion?: string, format?: 'js' | 'ts'): Promise<void>;
|
|
9
|
+
generate(schema: ParsedSchema, endpoints?: ParsedEndpoint[], extraTypes?: ExtraControllerType[], schemaHash?: string, generatorVersion?: string, format?: 'js' | 'ts', typecheck?: boolean): Promise<void>;
|
|
10
|
+
private ensureOutputDir;
|
|
10
11
|
private formatContent;
|
|
11
12
|
private compileFiles;
|
|
13
|
+
/**
|
|
14
|
+
* Block on the generated client's type errors. Default throws — broken
|
|
15
|
+
* types must never reach the consumer's tree; `--no-typecheck` downgrades
|
|
16
|
+
* to a warning and writes anyway, so a strict-only false positive can't
|
|
17
|
+
* wedge an upgrade with no recourse.
|
|
18
|
+
*/
|
|
19
|
+
private verifyGeneratedTypes;
|
|
20
|
+
/**
|
|
21
|
+
* Type-check the generated client the way a consumer's tsc would and return
|
|
22
|
+
* a formatted error message, or null if clean. Run from a temp dir on disk
|
|
23
|
+
* so bundler resolution maps the `.js` import specifiers to the sibling
|
|
24
|
+
* `.ts` files — the in-memory emit program can't resolve those, so it can't
|
|
25
|
+
* double as the check. Strict + skipLibCheck mirrors a typical consumer
|
|
26
|
+
* tsconfig.
|
|
27
|
+
*/
|
|
28
|
+
private collectTypeErrors;
|
|
12
29
|
}
|
|
13
30
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAIjD,OAAO,KAAK,EACR,cAAc,EACd,mBAAmB,EACtB,MAAM,6BAA6B,CAAA;AASpC,qBAAa,SAAS;IAClB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,cAAc,CAAgB;gBAE1B,SAAS,EAAE,MAAM;IAOvB,QAAQ,CACV,MAAM,EAAE,YAAY,EACpB,SAAS,CAAC,EAAE,cAAc,EAAE,EAC5B,UAAU,CAAC,EAAE,mBAAmB,EAAE,EAClC,UAAU,GAAE,MAAW,EACvB,gBAAgB,GAAE,MAAW,EAC7B,MAAM,GAAE,IAAI,GAAG,IAAW,EAC1B,SAAS,GAAE,OAAc,GAC1B,OAAO,CAAC,IAAI,CAAC;IAiDhB,OAAO,CAAC,eAAe;YAMT,aAAa;YAgBb,YAAY;IAsE1B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;CAiD5B"}
|
package/dist/generator/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
|
+
import * as os from 'os';
|
|
2
3
|
import * as path from 'path';
|
|
3
4
|
import * as ts from 'typescript';
|
|
4
5
|
import { TypesGenerator } from './types-generator.js';
|
|
@@ -18,11 +19,7 @@ export class Generator {
|
|
|
18
19
|
this.clientGenerator = new ClientGenerator();
|
|
19
20
|
this.indexGenerator = new IndexGenerator();
|
|
20
21
|
}
|
|
21
|
-
async generate(schema, endpoints, extraTypes, schemaHash = '', generatorVersion = '', format = 'js') {
|
|
22
|
-
// Ensure output directory exists
|
|
23
|
-
if (!fs.existsSync(this.outputDir)) {
|
|
24
|
-
fs.mkdirSync(this.outputDir, { recursive: true });
|
|
25
|
-
}
|
|
22
|
+
async generate(schema, endpoints, extraTypes, schemaHash = '', generatorVersion = '', format = 'js', typecheck = true) {
|
|
26
23
|
// Generate all source contents
|
|
27
24
|
const typesContent = this.typesGenerator.generate(schema);
|
|
28
25
|
const clientContent = this.clientGenerator.generate(schema, endpoints, extraTypes, schemaHash, generatorVersion);
|
|
@@ -39,13 +36,26 @@ export class Generator {
|
|
|
39
36
|
// relative imports first: tsc under moduleResolution "bundler"
|
|
40
37
|
// accepts them (resolves .js → .ts), but Turbopack (Next 16)
|
|
41
38
|
// doesn't, breaking `next build`.
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
const strippedFiles = Object.fromEntries(Object.entries(files).map(([name, data]) => [
|
|
40
|
+
name,
|
|
41
|
+
stripLocalJsExtensions(data),
|
|
42
|
+
]));
|
|
43
|
+
// Type-check the exact bytes we're about to write, BEFORE touching
|
|
44
|
+
// the consumer's tree — a guard throw must leave it untouched.
|
|
45
|
+
this.verifyGeneratedTypes(strippedFiles, typecheck);
|
|
46
|
+
this.ensureOutputDir();
|
|
47
|
+
for (const [fileName, data] of Object.entries(strippedFiles)) {
|
|
48
|
+
fs.writeFileSync(path.join(this.outputDir, fileName), data, 'utf-8');
|
|
44
49
|
}
|
|
45
50
|
return;
|
|
46
51
|
}
|
|
47
52
|
// Compile all files together so cross-file imports resolve correctly
|
|
48
|
-
await this.compileFiles(files);
|
|
53
|
+
await this.compileFiles(files, typecheck);
|
|
54
|
+
}
|
|
55
|
+
ensureOutputDir() {
|
|
56
|
+
if (!fs.existsSync(this.outputDir)) {
|
|
57
|
+
fs.mkdirSync(this.outputDir, { recursive: true });
|
|
58
|
+
}
|
|
49
59
|
}
|
|
50
60
|
async formatContent(content) {
|
|
51
61
|
try {
|
|
@@ -63,7 +73,7 @@ export class Generator {
|
|
|
63
73
|
return content;
|
|
64
74
|
}
|
|
65
75
|
}
|
|
66
|
-
async compileFiles(files) {
|
|
76
|
+
async compileFiles(files, typecheck) {
|
|
67
77
|
const compilerOptions = {
|
|
68
78
|
target: ts.ScriptTarget.ES2022,
|
|
69
79
|
module: ts.ModuleKind.ES2022,
|
|
@@ -93,14 +103,80 @@ export class Generator {
|
|
|
93
103
|
host.writeFile = (fileName, data) => {
|
|
94
104
|
outputs[fileName] = data;
|
|
95
105
|
};
|
|
106
|
+
// The `@ts-nocheck` header is gone, so the generated client must
|
|
107
|
+
// type-check. Verify it the way a consumer's tsc would (on disk, where
|
|
108
|
+
// bundler resolution maps the `.js` import specifiers to the sibling
|
|
109
|
+
// `.ts`) and fail loudly rather than emit broken types into their tree.
|
|
110
|
+
this.verifyGeneratedTypes(files, typecheck);
|
|
96
111
|
// Compile all files together
|
|
97
112
|
const program = ts.createProgram(fileNames, compilerOptions, host);
|
|
98
113
|
program.emit();
|
|
99
114
|
// Write output files
|
|
115
|
+
this.ensureOutputDir();
|
|
100
116
|
for (const [fileName, data] of Object.entries(outputs)) {
|
|
101
117
|
const outputPath = path.join(this.outputDir, fileName);
|
|
102
118
|
fs.writeFileSync(outputPath, data, 'utf-8');
|
|
103
119
|
}
|
|
104
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Block on the generated client's type errors. Default throws — broken
|
|
123
|
+
* types must never reach the consumer's tree; `--no-typecheck` downgrades
|
|
124
|
+
* to a warning and writes anyway, so a strict-only false positive can't
|
|
125
|
+
* wedge an upgrade with no recourse.
|
|
126
|
+
*/
|
|
127
|
+
verifyGeneratedTypes(files, typecheck) {
|
|
128
|
+
const message = this.collectTypeErrors(files);
|
|
129
|
+
if (!message)
|
|
130
|
+
return;
|
|
131
|
+
if (typecheck)
|
|
132
|
+
throw new Error(message);
|
|
133
|
+
console.warn(`${message}\n(--no-typecheck set: writing anyway.)`);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Type-check the generated client the way a consumer's tsc would and return
|
|
137
|
+
* a formatted error message, or null if clean. Run from a temp dir on disk
|
|
138
|
+
* so bundler resolution maps the `.js` import specifiers to the sibling
|
|
139
|
+
* `.ts` files — the in-memory emit program can't resolve those, so it can't
|
|
140
|
+
* double as the check. Strict + skipLibCheck mirrors a typical consumer
|
|
141
|
+
* tsconfig.
|
|
142
|
+
*/
|
|
143
|
+
collectTypeErrors(files) {
|
|
144
|
+
const checkDir = fs.mkdtempSync(path.join(os.tmpdir(), 'strapi-types-check-'));
|
|
145
|
+
try {
|
|
146
|
+
for (const [name, content] of Object.entries(files)) {
|
|
147
|
+
fs.writeFileSync(path.join(checkDir, name), content, 'utf-8');
|
|
148
|
+
}
|
|
149
|
+
const rootNames = Object.keys(files).map(n => path.join(checkDir, n));
|
|
150
|
+
const program = ts.createProgram(rootNames, {
|
|
151
|
+
target: ts.ScriptTarget.ES2022,
|
|
152
|
+
module: ts.ModuleKind.ES2022,
|
|
153
|
+
moduleResolution: ts.ModuleResolutionKind.Bundler,
|
|
154
|
+
strict: true,
|
|
155
|
+
skipLibCheck: true,
|
|
156
|
+
noEmit: true,
|
|
157
|
+
});
|
|
158
|
+
const diagnostics = ts
|
|
159
|
+
.getPreEmitDiagnostics(program)
|
|
160
|
+
.filter(d => d.file && d.file.fileName.startsWith(checkDir));
|
|
161
|
+
if (diagnostics.length === 0)
|
|
162
|
+
return null;
|
|
163
|
+
const details = diagnostics
|
|
164
|
+
.map(d => {
|
|
165
|
+
const msg = ts.flattenDiagnosticMessageText(d.messageText, '\n');
|
|
166
|
+
const loc = d.file && d.start !== undefined
|
|
167
|
+
? `${path.basename(d.file.fileName)}:${d.file.getLineAndCharacterOfPosition(d.start)
|
|
168
|
+
.line + 1} `
|
|
169
|
+
: '';
|
|
170
|
+
return ` ${loc}TS${d.code}: ${msg}`;
|
|
171
|
+
})
|
|
172
|
+
.join('\n');
|
|
173
|
+
return (`Generated client failed type-checking (${diagnostics.length} error(s)). ` +
|
|
174
|
+
`This is a strapi-typed-client bug — please report it. ` +
|
|
175
|
+
`If it's a false positive under your setup, bypass with --no-typecheck.\n${details}`);
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
fs.rmSync(checkDir, { recursive: true, force: true });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
105
181
|
}
|
|
106
182
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,YAAY,CAAA;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAMrD,SAAS,sBAAsB,CAAC,MAAc;IAC1C,OAAO,MAAM,CAAC,OAAO,CACjB,8DAA8D,EAC9D,QAAQ,CACX,CAAA;AACL,CAAC;AAED,MAAM,OAAO,SAAS;IACV,SAAS,CAAQ;IACjB,cAAc,CAAgB;IAC9B,eAAe,CAAiB;IAChC,cAAc,CAAgB;IAEtC,YAAY,SAAiB;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAA;QAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;QAC5C,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,QAAQ,CACV,MAAoB,EACpB,SAA4B,EAC5B,UAAkC,EAClC,aAAqB,EAAE,EACvB,mBAA2B,EAAE,EAC7B,SAAsB,IAAI
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,8 @@ export declare class PluginApiGenerator {
|
|
|
18
18
|
generateAllPluginClasses(contracts?: PluginContract[]): string;
|
|
19
19
|
private generatePluginClass;
|
|
20
20
|
private generateMethod;
|
|
21
|
+
/** Argument names (no types) for delegating to the renamed method. */
|
|
22
|
+
private buildArgNames;
|
|
21
23
|
private buildParameters;
|
|
22
24
|
private buildUrlLines;
|
|
23
25
|
private buildRequestOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-api-generator.d.ts","sourceRoot":"","sources":["../../src/generator/plugin-api-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,cAAc,EAEjB,MAAM,sBAAsB,CAAA;AAE7B;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;IAC3B;;;;;OAKG;IACH,wBAAwB,CACpB,SAAS,GAAE,cAAc,EAAoB,GAC9C,MAAM;IAMT,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"plugin-api-generator.d.ts","sourceRoot":"","sources":["../../src/generator/plugin-api-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,cAAc,EAEjB,MAAM,sBAAsB,CAAA;AAE7B;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;IAC3B;;;;;OAKG;IACH,wBAAwB,CACpB,SAAS,GAAE,cAAc,EAAoB,GAC9C,MAAM;IAMT,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,cAAc;IA0BtB,sEAAsE;IACtE,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,eAAe;CAO1B"}
|
|
@@ -39,11 +39,33 @@ ${methods}
|
|
|
39
39
|
const reqOptions = this.buildRequestOptions(ep);
|
|
40
40
|
const docComment = this.buildDocComment(ep);
|
|
41
41
|
const indentedUrl = urlLines.map(line => ` ${line}`).join('\n');
|
|
42
|
-
|
|
42
|
+
const method = `${docComment}
|
|
43
43
|
async ${ep.methodName}(${params}): Promise<${ep.responseType}> {
|
|
44
44
|
${indentedUrl}
|
|
45
45
|
return this.request<${ep.responseType}>(url, ${reqOptions}, nextOptions, '${errorPrefix}')
|
|
46
46
|
}`;
|
|
47
|
+
if (!ep.deprecatedAlias)
|
|
48
|
+
return method;
|
|
49
|
+
return `${method}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated Use \`${ep.methodName}()\` instead. Will be removed in a future major.
|
|
53
|
+
*/
|
|
54
|
+
async ${ep.deprecatedAlias}(${params}): Promise<${ep.responseType}> {
|
|
55
|
+
return this.${ep.methodName}(${this.buildArgNames(ep)})
|
|
56
|
+
}`;
|
|
57
|
+
}
|
|
58
|
+
/** Argument names (no types) for delegating to the renamed method. */
|
|
59
|
+
buildArgNames(ep) {
|
|
60
|
+
const names = [];
|
|
61
|
+
if (ep.paramTypes)
|
|
62
|
+
names.push(...Object.keys(ep.paramTypes));
|
|
63
|
+
if (ep.bodyType)
|
|
64
|
+
names.push('body');
|
|
65
|
+
if (ep.queryType)
|
|
66
|
+
names.push('params');
|
|
67
|
+
names.push('nextOptions');
|
|
68
|
+
return names.join(', ');
|
|
47
69
|
}
|
|
48
70
|
buildParameters(ep) {
|
|
49
71
|
const parts = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-api-generator.js","sourceRoot":"","sources":["../../src/generator/plugin-api-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,eAAe,GAGlB,MAAM,sBAAsB,CAAA;AAE7B;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkB;IAC3B;;;;;OAKG;IACH,wBAAwB,CACpB,YAA8B,eAAe;QAE7C,OAAO,SAAS;aACX,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;aACnD,IAAI,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;IAEO,mBAAmB,CAAC,QAAwB;QAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS;aAC7B,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;aACxD,IAAI,CAAC,MAAM,CAAC,CAAA;QAEjB,OAAO,eAAe,QAAQ,CAAC,UAAU;QACzC,QAAQ,CAAC,SAAS;;;;;EAKxB,OAAO;EACP,CAAA;IACE,CAAC;IAEO,cAAc,CAAC,EAAkB,EAAE,WAAmB;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAA;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAE3C,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAElE,
|
|
1
|
+
{"version":3,"file":"plugin-api-generator.js","sourceRoot":"","sources":["../../src/generator/plugin-api-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,11 @@ export interface PluginEndpoint {
|
|
|
34
34
|
responseType: string;
|
|
35
35
|
/** Optional one-line description used as a JSDoc comment on the method. */
|
|
36
36
|
description?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Optional former name kept as a `@deprecated` alias that delegates to
|
|
39
|
+
* `methodName`. Used to rename a method without breaking consumers.
|
|
40
|
+
*/
|
|
41
|
+
deprecatedAlias?: string;
|
|
37
42
|
}
|
|
38
43
|
export interface PluginContract {
|
|
39
44
|
/** Strapi plugin name (informational, not used for routing). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-registry.d.ts","sourceRoot":"","sources":["../../src/generator/plugin-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,cAAc;IAC3B,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAA;IAClB,mBAAmB;IACnB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;IACnD;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAA;IACpB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin-registry.d.ts","sourceRoot":"","sources":["../../src/generator/plugin-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,cAAc;IAC3B,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAA;IAClB,mBAAmB;IACnB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;IACnD;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAA;IACpB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,cAAc;IAC3B,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAA;IACtB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAA;IACjB,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAA;IACnB,qCAAqC;IACrC,SAAS,EAAE,cAAc,EAAE,CAAA;CAC9B;AAED,eAAO,MAAM,eAAe,EAAE,cAAc,EA6C3C,CAAA"}
|
|
@@ -46,7 +46,8 @@ export const PLUGIN_REGISTRY = [
|
|
|
46
46
|
description: 'Get a single uploaded file by numeric id.',
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
|
-
methodName: '
|
|
49
|
+
methodName: 'delete',
|
|
50
|
+
deprecatedAlias: 'destroy',
|
|
50
51
|
method: 'DELETE',
|
|
51
52
|
path: '/upload/files/:id',
|
|
52
53
|
paramTypes: { id: 'number' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-registry.js","sourceRoot":"","sources":["../../src/generator/plugin-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"plugin-registry.js","sourceRoot":"","sources":["../../src/generator/plugin-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA0CH,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC7C;QACI,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,SAAS,EAAE,WAAW;QACtB,WAAW,EAAE,eAAe;QAC5B,SAAS,EAAE;YACP;gBACI,UAAU,EAAE,QAAQ;gBACpB,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,UAAU;gBACpB,YAAY,EAAE,aAAa;gBAC3B,WAAW,EACP,6DAA6D;aACpE;YACD;gBACI,UAAU,EAAE,MAAM;gBAClB,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,eAAe;gBACrB,SAAS,EAAE,mBAAmB;gBAC9B,YAAY,EAAE,aAAa;gBAC3B,WAAW,EACP,6EAA6E;aACpF;YACD;gBACI,UAAU,EAAE,SAAS;gBACrB,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,mBAAmB;gBACzB,UAAU,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;gBAC5B,YAAY,EAAE,WAAW;gBACzB,WAAW,EAAE,2CAA2C;aAC3D;YACD;gBACI,UAAU,EAAE,QAAQ;gBACpB,eAAe,EAAE,SAAS;gBAC1B,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,mBAAmB;gBACzB,UAAU,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;gBAC5B,YAAY,EAAE,WAAW;gBACzB,WAAW,EACP,kEAAkE;aACzE;SACJ;KACJ;CACJ,CAAA"}
|
|
@@ -10,11 +10,21 @@ export declare class TypesGenerator {
|
|
|
10
10
|
private addDefaultsConst;
|
|
11
11
|
private addComponentInterface;
|
|
12
12
|
private addComponentDzAlias;
|
|
13
|
-
private
|
|
13
|
+
private addComponentDzInputAliases;
|
|
14
14
|
private collectDzComponentUids;
|
|
15
|
-
private
|
|
15
|
+
private addComponentInputInterfaces;
|
|
16
|
+
/**
|
|
17
|
+
* Shared property list for `*CreateInput` / `*UpdateInput`. In create mode a
|
|
18
|
+
* required *scalar* drops its `?` (and `| null`); update mode is fully
|
|
19
|
+
* partial (every key optional). Required-ness is enforced for scalars only —
|
|
20
|
+
* Strapi does not validate `required` on relations/media/components at the
|
|
21
|
+
* REST layer, so forcing those keys would reject payloads it accepts.
|
|
22
|
+
* Components / dynamic zones still split so their nested required scalars
|
|
23
|
+
* are enforced in the Create variant.
|
|
24
|
+
*/
|
|
25
|
+
private buildInputProperties;
|
|
16
26
|
private addContentTypeInterface;
|
|
17
|
-
private
|
|
27
|
+
private addInputTypeInterfaces;
|
|
18
28
|
private addPopulateParams;
|
|
19
29
|
private buildPopulateParamTypeBody;
|
|
20
30
|
private addPayloadUtilityTypes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-generator.d.ts","sourceRoot":"","sources":["../../src/generator/types-generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types-generator.d.ts","sourceRoot":"","sources":["../../src/generator/types-generator.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,YAAY,EAIf,MAAM,oBAAoB,CAAA;AAc3B,qBAAa,cAAc;IACvB,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,MAAM,CAAC,CAAc;;IAM7B,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IA6GtC,OAAO,CAAC,iBAAiB;IA0MzB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,2BAA2B;IAcnC;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAkD5B,OAAO,CAAC,uBAAuB;IA+B/B,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,0BAA0B;IA+DlC,OAAO,CAAC,sBAAsB;IAyB9B,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuC/B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA2CjC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyE7B,OAAO,CAAC,uBAAuB;IAS/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAqB/B"}
|