Skip to content

Commit 4d60d5e

Browse files
committed
UploadTracks
1 parent 1797aa6 commit 4d60d5e

File tree

17 files changed

+1960
-326
lines changed

17 files changed

+1960
-326
lines changed

generate/extractInfoFromSchema.ts

+13-10
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ export type EndpointInfo = {
1818
method: string;
1919
comment: string;
2020
docUrl?: string;
21-
urlPlaceholder?: {
21+
urlPlaceholders: Array<{
22+
variableName: string;
23+
isEntityId: boolean;
24+
relType: string;
25+
}>;
26+
entityIdPlaceholder?: {
2227
variableName: string;
2328
isEntityId: boolean;
2429
relType: string;
@@ -263,7 +268,7 @@ function generateResourceInfo(
263268
}
264269

265270
const endpoints = schema.links.map<EndpointInfo>((link) => {
266-
const urlPlaceholders: EndpointInfo['urlPlaceholder'][] = [];
271+
const urlPlaceholders: EndpointInfo['urlPlaceholders'] = [];
267272

268273
const urlTemplate = link.href.replace(
269274
identityRegexp,
@@ -278,12 +283,6 @@ function generateResourceInfo(
278283
},
279284
);
280285

281-
if (urlPlaceholders.length > 1) {
282-
throw new Error(
283-
`More than one placeholder in ${jsonApiType}#${link.rel}`,
284-
);
285-
}
286-
287286
const baseTypeName = jsonApiType;
288287

289288
const responseType = link.jobSchema
@@ -348,7 +347,9 @@ function generateResourceInfo(
348347
urlTemplate,
349348
method: link.method,
350349
comment: link.title,
351-
urlPlaceholder: urlPlaceholders[0] || undefined,
350+
urlPlaceholders,
351+
entityIdPlaceholder:
352+
urlPlaceholders.find((p) => p.isEntityId) || undefined,
352353
requestBodyType: link.schema
353354
? `${toSafeName(baseTypeName, true)}${toSafeName(link.rel, true)}Schema`
354355
: undefined,
@@ -404,7 +405,9 @@ function generateResourceInfo(
404405
endpoints,
405406
namespace: toSafeName(
406407
endpoints.some(
407-
(e) => e.returnsCollection || (e.name === 'find' && e.urlPlaceholder),
408+
(e) =>
409+
e.returnsCollection ||
410+
(e.name === 'find' && e.urlPlaceholders.length === 1),
408411
)
409412
? `${jsonApiType}s`
410413
: jsonApiType,

generate/templates/resources/ResourceClass.ts.handlebars

+23-23
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ export default class {{{resourceClassName}}} extends BaseResource {
2323
{{/if}}
2424
*/
2525
{{{name}}}(
26-
{{#if urlPlaceholder}}
27-
{{{urlPlaceholder.variableName}}}: string | SimpleSchemaTypes.{{{urlPlaceholder.relType}}},
28-
{{/if}}
26+
{{#each urlPlaceholders}}
27+
{{{variableName}}}: string | SimpleSchemaTypes.{{{relType}}},
28+
{{/each}}
2929
{{#if requestBodyType}}
3030
body{{#if optionalRequestBody}}?{{/if}}: SimpleSchemaTypes.{{{requestBodyType}}},
3131
{{/if}}
@@ -34,16 +34,16 @@ export default class {{{resourceClassName}}} extends BaseResource {
3434
{{/if}}
3535
) {
3636
return this.{{{rawName}}}(
37-
{{#if urlPlaceholder}}
38-
Utils.toId({{{urlPlaceholder.variableName}}}),
39-
{{/if}}
37+
{{#each urlPlaceholders}}
38+
Utils.toId({{{variableName}}}),
39+
{{/each}}
4040
{{#if requestBodyType}}
4141
{{#if optionalRequestBody}}body ? {{/if}}Utils.serializeRequestBody<SchemaTypes.{{{requestBodyType}}}>(
4242
body,
4343
{
44-
{{#if urlPlaceholder.isEntityId}}
44+
{{#if entityIdPlaceholder}}
4545
{{#if requestStructure.idRequired}}
46-
id: Utils.toId({{{urlPlaceholder.variableName}}}),
46+
id: Utils.toId({{{entityIdPlaceholder.variableName}}}),
4747
{{/if}}
4848
{{/if}}
4949
type: {{{stringify requestStructure.type}}},
@@ -79,9 +79,9 @@ export default class {{{resourceClassName}}} extends BaseResource {
7979
{{/if}}
8080
*/
8181
{{{rawName}}}(
82-
{{#if urlPlaceholder}}
83-
{{{urlPlaceholder.variableName}}}: string,
84-
{{/if}}
82+
{{#each urlPlaceholders}}
83+
{{{variableName}}}: string,
84+
{{/each}}
8585
{{#if requestBodyType}}
8686
body{{#if optionalRequestBody}}?{{/if}}: SchemaTypes.{{{requestBodyType}}},
8787
{{/if}}
@@ -127,16 +127,16 @@ export default class {{{resourceClassName}}} extends BaseResource {
127127
* @throws {TimeoutError}
128128
*/
129129
async *{{{name}}}PagedIterator(
130-
{{#if urlPlaceholder}}
131-
{{{urlPlaceholder.variableName}}}: string | SimpleSchemaTypes.{{{urlPlaceholder.relType}}},
132-
{{/if}}
130+
{{#each urlPlaceholders}}
131+
{{{variableName}}}: string | SimpleSchemaTypes.{{{relType}}},
132+
{{/each}}
133133
queryParams{{#unless queryParamsRequired}}?{{/unless}}: Utils.OmitFromKnownKeys<SimpleSchemaTypes.{{{queryParamsType}}}, 'page'>,
134134
iteratorOptions?: Utils.IteratorOptions,
135135
) {
136136
for await (const element of this.{{{rawName}}}PagedIterator(
137-
{{#if urlPlaceholder}}
138-
Utils.toId({{{urlPlaceholder.variableName}}}),
139-
{{/if}}
137+
{{#each urlPlaceholders}}
138+
Utils.toId({{{variableName}}}),
139+
{{/each}}
140140
queryParams,
141141
iteratorOptions,
142142
)) {
@@ -158,9 +158,9 @@ export default class {{{resourceClassName}}} extends BaseResource {
158158
* @throws {TimeoutError}
159159
*/
160160
{{{rawName}}}PagedIterator(
161-
{{#if urlPlaceholder}}
162-
{{{urlPlaceholder.variableName}}}: string,
163-
{{/if}}
161+
{{#each urlPlaceholders}}
162+
{{{variableName}}}: string,
163+
{{/each}}
164164
queryParams{{#unless queryParamsRequired}}?{{/unless}}: Utils.OmitFromKnownKeys<SchemaTypes.{{{queryParamsType}}}, 'page'>,
165165
iteratorOptions?: Utils.IteratorOptions,
166166
) {
@@ -174,9 +174,9 @@ export default class {{{resourceClassName}}} extends BaseResource {
174174
maxLimit: {{{paginatedResponse.maxLimit}}},
175175
},
176176
(page: SchemaTypes.{{{queryParamsType}}}['page']) => this.{{{rawName}}}(
177-
{{#if urlPlaceholder}}
178-
{{{urlPlaceholder.variableName}}},
179-
{{/if}}
177+
{{#each urlPlaceholders}}
178+
{{{variableName}}},
179+
{{/each}}
180180
{ ...queryParams, page },
181181
),
182182
iteratorOptions,

packages/cma-client-browser/package.json

+2-8
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22
"name": "@datocms/cma-client-browser",
33
"version": "3.3.0",
44
"description": "Browser client for DatoCMS REST Content Management API",
5-
"keywords": [
6-
"datocms",
7-
"client"
8-
],
5+
"keywords": ["datocms", "client"],
96
"author": "Stefano Verna <s.verna@datocms.com>",
107
"homepage": "https://github.com/datocms/js-rest-api-clients/tree/main/packages/cma-client-browser#readme",
118
"license": "MIT",
@@ -16,10 +13,7 @@
1613
"lib": "dist",
1714
"test": "__tests__"
1815
},
19-
"files": [
20-
"dist",
21-
"src"
22-
],
16+
"files": ["dist", "src"],
2317
"publishConfig": {
2418
"access": "public"
2519
},

packages/cma-client-browser/src/generated/resources.ts

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export const Item = Resources.Item;
2020
export const ItemVersion = Resources.ItemVersion;
2121
export { default as Upload } from '../resources/Upload';
2222
export const UploadRequest = Resources.UploadRequest;
23+
export const UploadTrack = Resources.UploadTrack;
2324
export const ScheduledPublication = Resources.ScheduledPublication;
2425
export const ScheduledUnpublishing = Resources.ScheduledUnpublishing;
2526
export const SearchResult = Resources.SearchResult;

packages/cma-client-node/package.json

+2-8
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22
"name": "@datocms/cma-client-node",
33
"version": "3.3.0",
44
"description": "NodeJS client for DatoCMS REST Content Management API",
5-
"keywords": [
6-
"datocms",
7-
"client"
8-
],
5+
"keywords": ["datocms", "client"],
96
"author": "Stefano Verna <s.verna@datocms.com>",
107
"homepage": "https://github.com/datocms/js-rest-api-clients/tree/main/packages/cma-client-node#readme",
118
"license": "MIT",
@@ -16,10 +13,7 @@
1613
"lib": "dist",
1714
"test": "__tests__"
1815
},
19-
"files": [
20-
"dist",
21-
"src"
22-
],
16+
"files": ["dist", "src"],
2317
"publishConfig": {
2418
"access": "public"
2519
},

packages/cma-client-node/src/generated/resources.ts

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export const Item = Resources.Item;
2020
export const ItemVersion = Resources.ItemVersion;
2121
export { default as Upload } from '../resources/Upload';
2222
export const UploadRequest = Resources.UploadRequest;
23+
export const UploadTrack = Resources.UploadTrack;
2324
export const ScheduledPublication = Resources.ScheduledPublication;
2425
export const ScheduledUnpublishing = Resources.ScheduledUnpublishing;
2526
export const SearchResult = Resources.SearchResult;

packages/cma-client/package.json

+2-9
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22
"name": "@datocms/cma-client",
33
"version": "3.3.0",
44
"description": "JS client for DatoCMS REST Content Management API",
5-
"keywords": [
6-
"datocms",
7-
"client"
8-
],
5+
"keywords": ["datocms", "client"],
96
"author": "Stefano Verna <s.verna@datocms.com>",
107
"homepage": "https://github.com/datocms/js-rest-api-clients/tree/main/packages/cma-client#readme",
118
"license": "MIT",
@@ -17,11 +14,7 @@
1714
"lib": "dist",
1815
"test": "__tests__"
1916
},
20-
"files": [
21-
"dist",
22-
"src",
23-
"resources.json"
24-
],
17+
"files": ["dist", "src", "resources.json"],
2518
"publishConfig": {
2619
"access": "public"
2720
},

0 commit comments

Comments
 (0)