@ikatec/digisac-api-sdk 1.3.1 → 1.3.2
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.
|
@@ -34,7 +34,7 @@ var BaseCrudApi = class {
|
|
|
34
34
|
* @permissions $resourceName.update
|
|
35
35
|
*/
|
|
36
36
|
updateById(id, body, headers) {
|
|
37
|
-
return this.client.
|
|
37
|
+
return this.client.put(`${this.basePath}/${id}`, body, headers);
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
40
|
* Deletes a resource by ID.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCrudApi.cjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from './ApiClient'\nimport type { CrudApi, ListQuery, Paginated } from './types'\nexport type {\n WhereClause,\n IncludeItem,\n ListQuery,\n Paginated,\n HasGetMany,\n HasGetById,\n HasCreate,\n HasUpdateById,\n HasDeleteById,\n CrudApi,\n} from './types'\n\nexport class BaseCrudApi<\n TResponse,\n TCreate,\n TUpdate = TCreate,\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {\n protected readonly client: ApiClient\n protected readonly basePath: string\n\n constructor(client: ApiClient, basePath: string) {\n this.client = client\n this.basePath = basePath.replace(/\\/$/, '')\n }\n\n getMany(\n query: TQuery & { paginate: false },\n headers?: Record<string, string>,\n ): Promise<TResponse[]>\n getMany(\n query?: TQuery & { paginate?: true },\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse>>\n getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<Paginated<TResponse> | TResponse[]>(\n `${this.basePath}${queryString}`,\n headers,\n )\n }\n\n /**\n * Returns a single resource by ID.\n * @permissions $resourceName.view\n */\n getById(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.get<TResponse>(`${this.basePath}/${id}`, headers)\n }\n\n /**\n * Creates a new resource.\n * @permissions $resourceName.create\n */\n create(body: TCreate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.post<TResponse, TCreate>(this.basePath, body, headers)\n }\n\n /**\n * Updates an existing resource by ID.\n * @permissions $resourceName.update\n */\n updateById(id: string, body: TUpdate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.
|
|
1
|
+
{"version":3,"file":"BaseCrudApi.cjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from './ApiClient'\nimport type { CrudApi, ListQuery, Paginated } from './types'\nexport type {\n WhereClause,\n IncludeItem,\n ListQuery,\n Paginated,\n HasGetMany,\n HasGetById,\n HasCreate,\n HasUpdateById,\n HasDeleteById,\n CrudApi,\n} from './types'\n\nexport class BaseCrudApi<\n TResponse,\n TCreate,\n TUpdate = TCreate,\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {\n protected readonly client: ApiClient\n protected readonly basePath: string\n\n constructor(client: ApiClient, basePath: string) {\n this.client = client\n this.basePath = basePath.replace(/\\/$/, '')\n }\n\n getMany(\n query: TQuery & { paginate: false },\n headers?: Record<string, string>,\n ): Promise<TResponse[]>\n getMany(\n query?: TQuery & { paginate?: true },\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse>>\n getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<Paginated<TResponse> | TResponse[]>(\n `${this.basePath}${queryString}`,\n headers,\n )\n }\n\n /**\n * Returns a single resource by ID.\n * @permissions $resourceName.view\n */\n getById(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.get<TResponse>(`${this.basePath}/${id}`, headers)\n }\n\n /**\n * Creates a new resource.\n * @permissions $resourceName.create\n */\n create(body: TCreate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.post<TResponse, TCreate>(this.basePath, body, headers)\n }\n\n /**\n * Updates an existing resource by ID.\n * @permissions $resourceName.update\n */\n updateById(id: string, body: TUpdate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.put<TResponse, TUpdate>(`${this.basePath}/${id}`, body, headers)\n }\n\n /**\n * Deletes a resource by ID.\n * @permissions $resourceName.delete\n */\n deleteById(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.delete<TResponse>(`${this.basePath}/${id}`, headers)\n }\n}\n"],"mappings":";;;;;;AAgBA,IAAa,cAAb,MAK0D;CACxD,AAAmB;CACnB,AAAmB;CAEnB,YAAY,QAAmB,UAAkB;AAC/C,OAAK,SAAS;AACd,OAAK,WAAW,SAAS,QAAQ,OAAO,GAAG;;CAW7C,QACE,OACA,SAC6C;EAC7C,MAAM,cAAc,QAAQ,IAAI,WAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,WAAW,eACnB,QACD;;;;;;CAOH,QAAQ,IAAY,SAAsD;AACxE,SAAO,KAAK,OAAO,IAAe,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ;;;;;;CAOtE,OAAO,MAAe,SAAsD;AAC1E,SAAO,KAAK,OAAO,KAAyB,KAAK,UAAU,MAAM,QAAQ;;;;;;CAO3E,WAAW,IAAY,MAAe,SAAsD;AAC1F,SAAO,KAAK,OAAO,IAAwB,GAAG,KAAK,SAAS,GAAG,MAAM,MAAM,QAAQ;;;;;;CAOrF,WAAW,IAAY,SAAsD;AAC3E,SAAO,KAAK,OAAO,OAAkB,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ"}
|
|
@@ -31,7 +31,7 @@ var BaseCrudApi = class {
|
|
|
31
31
|
* @permissions $resourceName.update
|
|
32
32
|
*/
|
|
33
33
|
updateById(id, body, headers) {
|
|
34
|
-
return this.client.
|
|
34
|
+
return this.client.put(`${this.basePath}/${id}`, body, headers);
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
37
|
* Deletes a resource by ID.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCrudApi.mjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from './ApiClient'\nimport type { CrudApi, ListQuery, Paginated } from './types'\nexport type {\n WhereClause,\n IncludeItem,\n ListQuery,\n Paginated,\n HasGetMany,\n HasGetById,\n HasCreate,\n HasUpdateById,\n HasDeleteById,\n CrudApi,\n} from './types'\n\nexport class BaseCrudApi<\n TResponse,\n TCreate,\n TUpdate = TCreate,\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {\n protected readonly client: ApiClient\n protected readonly basePath: string\n\n constructor(client: ApiClient, basePath: string) {\n this.client = client\n this.basePath = basePath.replace(/\\/$/, '')\n }\n\n getMany(\n query: TQuery & { paginate: false },\n headers?: Record<string, string>,\n ): Promise<TResponse[]>\n getMany(\n query?: TQuery & { paginate?: true },\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse>>\n getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<Paginated<TResponse> | TResponse[]>(\n `${this.basePath}${queryString}`,\n headers,\n )\n }\n\n /**\n * Returns a single resource by ID.\n * @permissions $resourceName.view\n */\n getById(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.get<TResponse>(`${this.basePath}/${id}`, headers)\n }\n\n /**\n * Creates a new resource.\n * @permissions $resourceName.create\n */\n create(body: TCreate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.post<TResponse, TCreate>(this.basePath, body, headers)\n }\n\n /**\n * Updates an existing resource by ID.\n * @permissions $resourceName.update\n */\n updateById(id: string, body: TUpdate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.
|
|
1
|
+
{"version":3,"file":"BaseCrudApi.mjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from './ApiClient'\nimport type { CrudApi, ListQuery, Paginated } from './types'\nexport type {\n WhereClause,\n IncludeItem,\n ListQuery,\n Paginated,\n HasGetMany,\n HasGetById,\n HasCreate,\n HasUpdateById,\n HasDeleteById,\n CrudApi,\n} from './types'\n\nexport class BaseCrudApi<\n TResponse,\n TCreate,\n TUpdate = TCreate,\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {\n protected readonly client: ApiClient\n protected readonly basePath: string\n\n constructor(client: ApiClient, basePath: string) {\n this.client = client\n this.basePath = basePath.replace(/\\/$/, '')\n }\n\n getMany(\n query: TQuery & { paginate: false },\n headers?: Record<string, string>,\n ): Promise<TResponse[]>\n getMany(\n query?: TQuery & { paginate?: true },\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse>>\n getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<Paginated<TResponse> | TResponse[]>(\n `${this.basePath}${queryString}`,\n headers,\n )\n }\n\n /**\n * Returns a single resource by ID.\n * @permissions $resourceName.view\n */\n getById(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.get<TResponse>(`${this.basePath}/${id}`, headers)\n }\n\n /**\n * Creates a new resource.\n * @permissions $resourceName.create\n */\n create(body: TCreate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.post<TResponse, TCreate>(this.basePath, body, headers)\n }\n\n /**\n * Updates an existing resource by ID.\n * @permissions $resourceName.update\n */\n updateById(id: string, body: TUpdate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.put<TResponse, TUpdate>(`${this.basePath}/${id}`, body, headers)\n }\n\n /**\n * Deletes a resource by ID.\n * @permissions $resourceName.delete\n */\n deleteById(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.delete<TResponse>(`${this.basePath}/${id}`, headers)\n }\n}\n"],"mappings":";;;AAgBA,IAAa,cAAb,MAK0D;CACxD,AAAmB;CACnB,AAAmB;CAEnB,YAAY,QAAmB,UAAkB;AAC/C,OAAK,SAAS;AACd,OAAK,WAAW,SAAS,QAAQ,OAAO,GAAG;;CAW7C,QACE,OACA,SAC6C;EAC7C,MAAM,cAAc,QAAQ,IAAI,GAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,WAAW,eACnB,QACD;;;;;;CAOH,QAAQ,IAAY,SAAsD;AACxE,SAAO,KAAK,OAAO,IAAe,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ;;;;;;CAOtE,OAAO,MAAe,SAAsD;AAC1E,SAAO,KAAK,OAAO,KAAyB,KAAK,UAAU,MAAM,QAAQ;;;;;;CAO3E,WAAW,IAAY,MAAe,SAAsD;AAC1F,SAAO,KAAK,OAAO,IAAwB,GAAG,KAAK,SAAS,GAAG,MAAM,MAAM,QAAQ;;;;;;CAOrF,WAAW,IAAY,SAAsD;AAC3E,SAAO,KAAK,OAAO,OAAkB,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ"}
|
package/package.json
CHANGED
|
@@ -176,21 +176,21 @@ describe('BaseCrudApi', () => {
|
|
|
176
176
|
// ── updateById ───────────────────────────────────────────────────
|
|
177
177
|
|
|
178
178
|
describe('updateById', () => {
|
|
179
|
-
it('calls client.
|
|
179
|
+
it('calls client.put with basePath/id and body', async () => {
|
|
180
180
|
const updated: Item = { id: 'abc', name: 'Updated' }
|
|
181
|
-
vi.mocked(client.
|
|
181
|
+
vi.mocked(client.put).mockResolvedValue(updated)
|
|
182
182
|
|
|
183
183
|
const result = await api.updateById('abc', { name: 'Updated' })
|
|
184
|
-
expect(client.
|
|
184
|
+
expect(client.put).toHaveBeenCalledWith('/items/abc', { name: 'Updated' }, undefined)
|
|
185
185
|
expect(result).toEqual(updated)
|
|
186
186
|
})
|
|
187
187
|
|
|
188
188
|
it('forwards custom headers', async () => {
|
|
189
|
-
vi.mocked(client.
|
|
189
|
+
vi.mocked(client.put).mockResolvedValue({ id: '1', name: 'y' })
|
|
190
190
|
const headers = { 'If-Match': 'etag-1' }
|
|
191
191
|
|
|
192
192
|
await api.updateById('1', { name: 'y' }, headers)
|
|
193
|
-
expect(client.
|
|
193
|
+
expect(client.put).toHaveBeenCalledWith('/items/1', { name: 'y' }, headers)
|
|
194
194
|
})
|
|
195
195
|
})
|
|
196
196
|
|
|
@@ -233,8 +233,8 @@ describe('BaseCrudApi', () => {
|
|
|
233
233
|
await expect(api.create({ name: 'bad' })).rejects.toThrow('Validation failed')
|
|
234
234
|
})
|
|
235
235
|
|
|
236
|
-
it('propagates errors from client.
|
|
237
|
-
vi.mocked(client.
|
|
236
|
+
it('propagates errors from client.put in updateById', async () => {
|
|
237
|
+
vi.mocked(client.put).mockRejectedValue(new Error('Conflict'))
|
|
238
238
|
await expect(api.updateById('1', { name: 'x' })).rejects.toThrow('Conflict')
|
|
239
239
|
})
|
|
240
240
|
|
package/src/core/BaseCrudApi.ts
CHANGED
|
@@ -68,7 +68,7 @@ export class BaseCrudApi<
|
|
|
68
68
|
* @permissions $resourceName.update
|
|
69
69
|
*/
|
|
70
70
|
updateById(id: string, body: TUpdate, headers?: Record<string, string>): Promise<TResponse> {
|
|
71
|
-
return this.client.
|
|
71
|
+
return this.client.put<TResponse, TUpdate>(`${this.basePath}/${id}`, body, headers)
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
/**
|