@decaf-ts/for-http 0.3.0 → 0.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.
- package/README.md +1 -1
- package/dist/for-http.cjs +1 -1
- package/dist/for-http.cjs.map +1 -1
- package/dist/for-http.js +1 -1
- package/dist/for-http.js.map +1 -1
- package/lib/RestRepository.d.ts +3 -5
- package/lib/RestRepository.js.map +1 -1
- package/lib/RestService.cjs +8 -229
- package/lib/RestService.d.ts +4 -156
- package/lib/RestService.js.map +1 -1
- package/lib/adapter.cjs +43 -8
- package/lib/adapter.d.ts +20 -21
- package/lib/adapter.js.map +1 -1
- package/lib/axios/axios.cjs +20 -21
- package/lib/axios/axios.d.ts +10 -7
- package/lib/axios/axios.js.map +1 -1
- package/lib/esm/RestRepository.d.ts +3 -5
- package/lib/esm/RestRepository.js.map +1 -1
- package/lib/esm/RestService.d.ts +4 -156
- package/lib/esm/RestService.js +8 -229
- package/lib/esm/RestService.js.map +1 -1
- package/lib/esm/adapter.d.ts +20 -21
- package/lib/esm/adapter.js +45 -10
- package/lib/esm/adapter.js.map +1 -1
- package/lib/esm/axios/axios.d.ts +10 -7
- package/lib/esm/axios/axios.js +20 -21
- package/lib/esm/axios/axios.js.map +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@ A lightweight HTTP adapter layer for decaf-ts that enables CRUD-style repositori
|
|
|
27
27
|
|
|
28
28
|
Documentation available [here](https://decaf-ts.github.io/for-http/)
|
|
29
29
|
|
|
30
|
-
Minimal size: 1.
|
|
30
|
+
Minimal size: 1.4 KB kb gzipped
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
# decaf-ts/for-http — Detailed Description
|
package/dist/for-http.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e,
|
|
1
|
+
var e,r;e=this,r=function(e,r,t,s,o){"use strict";class n extends r.Repository{constructor(e,r){super(e,r)}url(e,r){return this.adapter.url(e,r)}async request(e){return this.adapter.request(e)}}class i extends n{constructor(e,r){super(e,r),this._overrides={ignoreValidation:!0,ignoreHandlers:!0}}toString(){return s.Model.tableName(this.class)+" REST service"}}class a extends r.Adapter{constructor(e,r,t){super(e,r,t)}flags(e,r,t){return Object.assign(super.flags(e,r,t),{headers:{}})}repository(){return i}prepare(e,...t){const{log:o}=this.logCtx(t,this.prepare),n=Object.assign({},e);return e[r.PersistenceKeys.METADATA]&&(o.silly("Passing along persistence metadata for "+e[r.PersistenceKeys.METADATA]),Object.defineProperty(n,r.PersistenceKeys.METADATA,{enumerable:!1,writable:!1,configurable:!0,value:e[r.PersistenceKeys.METADATA]})),{record:e,id:e[s.Model.pk(e.constructor)]}}revert(e,o,n,...i){const{log:a}=this.logCtx(i,this.revert),c={},l="string"==typeof o?s.Model.build(c,o):new o(c);a.silly(`Rebuilding model ${l.constructor.name} id ${n}`);const d="string"==typeof o?s.Model.get(o):o;if(!d)throw new t.InternalError("Failed to retrieve model constructor for "+o);const u=new d(e),p=e[r.PersistenceKeys.METADATA];return p&&(a.silly(`Passing along ${this.flavour} persistence metadata for ${l.constructor.name} id ${n}: ${p}`),Object.defineProperty(u,r.PersistenceKeys.METADATA,{enumerable:!1,configurable:!1,writable:!1,value:p})),u}toTableName(e){return"string"==typeof e?e:s.Model.tableName(e)}url(e,r){e=this.toTableName(e);const t=new URL(`${this.config.protocol}://${this.config.host}/${e}`);return r&&Object.entries(r).forEach(([e,r])=>t.searchParams.append(e,r.toString())),encodeURI(t.toString()).replace(/\+/g,"%20")}raw(e,...t){return Promise.reject(new r.UnsupportedError("Api is not natively available for HttpAdapters. If required, please extends this class"))}Sequence(e){return Promise.reject(new r.UnsupportedError("Api is not natively available for HttpAdapters. If required, please extends this class"))}Statement(){throw new r.UnsupportedError("Api is not natively available for HttpAdapters. If required, please extends this class")}parseCondition(e){throw new r.UnsupportedError("Api is not natively available for HttpAdapters. If required, please extends this class")}static parseError(e,...s){const o="string"==typeof e?e:e.message;return o.includes(t.NotFoundError.name)?new t.NotFoundError(e):o.includes(t.ConflictError.name)?new t.ConflictError(e):o.includes(t.BadRequestError.name)?new t.BadRequestError(e):o.includes(r.QueryError.name)?new r.QueryError(e):o.includes(r.PagingError.name)?new r.PagingError(e):o.includes(r.UnsupportedError.name)?new r.UnsupportedError(e):o.includes(r.MigrationError.name)?new r.MigrationError(e):o.includes(r.ObserverError.name)?new r.ObserverError(e):o.includes(r.AuthorizationError.name)?new r.AuthorizationError(e):o.includes(r.ForbiddenError.name)?new r.ForbiddenError(e):o.includes(r.ConnectionError.name)?new r.ConnectionError(e):o.includes(t.SerializationError.name)?new t.SerializationError(e):new t.InternalError(e)}}const c="axios";class l extends a{constructor(e,r){super(e,c,r)}getClient(){return new o.Axios({baseURL:`${this.config.protocol}://${this.config.host}`})}async request(e){return this.client.request(e)}async create(e,r,t,...s){try{const r=this.url(e);return this.client.post(r,t)}catch(e){throw this.parseError(e)}}async read(e,r,...t){try{const t=this.url(e,{id:r});return this.client.get(t)}catch(e){throw this.parseError(e)}}async update(e,r,t,...s){try{const r=this.url(e);return this.client.put(r,t)}catch(e){throw this.parseError(e)}}async delete(e,r,...t){try{const t=this.url(e,{id:r});return this.client.delete(t)}catch(e){throw this.parseError(e)}}parseError(e,...r){return a.parseError(e,...r)}}l.decoration(),e.AxiosFlavour=c,e.AxiosHttpAdapter=l,e.HttpAdapter=a,e.RestRepository=n,e.RestService=i,e.VERSION="##VERSION##"},"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@decaf-ts/core"),require("@decaf-ts/db-decorators"),require("@decaf-ts/decorator-validation"),require("axios")):"function"==typeof define&&define.amd?define(["exports","@decaf-ts/core","@decaf-ts/db-decorators","@decaf-ts/decorator-validation","axios"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self)["for-http"]={},e.decafTsCore,e.decafTsDbDecorators,e.decafTsDecoratorValidation,e.axios);
|
|
2
2
|
//# sourceMappingURL=for-http.cjs.map
|
package/dist/for-http.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"for-http.cjs","sources":["../src/
|
|
1
|
+
{"version":3,"file":"for-http.cjs","sources":["../src/RestRepository.ts","../src/RestService.ts","../src/adapter.ts","../src/axios/constants.ts","../src/axios/axios.ts","../src/axios/index.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["RestRepository","Repository","constructor","adapter","clazz","super","url","path","queryParams","this","request","details","RestService","_overrides","ignoreValidation","ignoreHandlers","toString","Model","tableName","class","HttpAdapter","Adapter","config","flavour","alias","flags","operation","model","overrides","Object","assign","headers","repository","prepare","args","log","logCtx","result","PersistenceKeys","METADATA","silly","defineProperty","enumerable","writable","configurable","value","record","id","pk","revert","obj","ob","m","build","name","constr","get","InternalError","metadata","toTableName","t","URL","protocol","host","entries","forEach","key","searchParams","append","encodeURI","replace","raw","rawInput","Promise","reject","UnsupportedError","Sequence","options","Statement","parseCondition","condition","parseError","err","msg","message","includes","NotFoundError","ConflictError","BadRequestError","QueryError","PagingError","MigrationError","ObserverError","AuthorizationError","ForbiddenError","ConnectionError","SerializationError","AxiosFlavour","AxiosHttpAdapter","getClient","Axios","baseURL","client","create","_args","post","e","read","update","put","delete","decoration"],"mappings":"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"}
|
package/dist/for-http.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Repository as e,Adapter as t,PersistenceKeys as r,UnsupportedError as s,AuthorizationError as
|
|
1
|
+
import{Repository as e,Adapter as t,PersistenceKeys as r,UnsupportedError as s,QueryError as n,PagingError as a,MigrationError as i,ObserverError as o,AuthorizationError as c,ForbiddenError as l,ConnectionError as u}from"@decaf-ts/core";import{InternalError as d,NotFoundError as p,ConflictError as h,BadRequestError as m,SerializationError as f}from"@decaf-ts/db-decorators";import{Model as g}from"@decaf-ts/decorator-validation";import{Axios as w}from"axios";class A extends e{constructor(e,t){super(e,t)}url(e,t){return this.adapter.url(e,t)}async request(e){return this.adapter.request(e)}}class y extends A{constructor(e,t){super(e,t),this._overrides={ignoreValidation:!0,ignoreHandlers:!0}}toString(){return g.tableName(this.class)+" REST service"}}class b extends t{constructor(e,t,r){super(e,t,r)}flags(e,t,r){return Object.assign(super.flags(e,t,r),{headers:{}})}repository(){return y}prepare(e,...t){const{log:s}=this.logCtx(t,this.prepare),n=Object.assign({},e);return e[r.METADATA]&&(s.silly("Passing along persistence metadata for "+e[r.METADATA]),Object.defineProperty(n,r.METADATA,{enumerable:!1,writable:!1,configurable:!0,value:e[r.METADATA]})),{record:e,id:e[g.pk(e.constructor)]}}revert(e,t,s,...n){const{log:a}=this.logCtx(n,this.revert),i={},o="string"==typeof t?g.build(i,t):new t(i);a.silly(`Rebuilding model ${o.constructor.name} id ${s}`);const c="string"==typeof t?g.get(t):t;if(!c)throw new d("Failed to retrieve model constructor for "+t);const l=new c(e),u=e[r.METADATA];return u&&(a.silly(`Passing along ${this.flavour} persistence metadata for ${o.constructor.name} id ${s}: ${u}`),Object.defineProperty(l,r.METADATA,{enumerable:!1,configurable:!1,writable:!1,value:u})),l}toTableName(e){return"string"==typeof e?e:g.tableName(e)}url(e,t){e=this.toTableName(e);const r=new URL(`${this.config.protocol}://${this.config.host}/${e}`);return t&&Object.entries(t).forEach(([e,t])=>r.searchParams.append(e,t.toString())),encodeURI(r.toString()).replace(/\+/g,"%20")}raw(e,...t){return Promise.reject(new s("Api is not natively available for HttpAdapters. If required, please extends this class"))}Sequence(e){return Promise.reject(new s("Api is not natively available for HttpAdapters. If required, please extends this class"))}Statement(){throw new s("Api is not natively available for HttpAdapters. If required, please extends this class")}parseCondition(e){throw new s("Api is not natively available for HttpAdapters. If required, please extends this class")}static parseError(e,...t){const r="string"==typeof e?e:e.message;return r.includes(p.name)?new p(e):r.includes(h.name)?new h(e):r.includes(m.name)?new m(e):r.includes(n.name)?new n(e):r.includes(a.name)?new a(e):r.includes(s.name)?new s(e):r.includes(i.name)?new i(e):r.includes(o.name)?new o(e):r.includes(c.name)?new c(e):r.includes(l.name)?new l(e):r.includes(u.name)?new u(e):r.includes(f.name)?new f(e):new d(e)}}const v="axios";class E extends b{constructor(e,t){super(e,v,t)}getClient(){return new w({baseURL:`${this.config.protocol}://${this.config.host}`})}async request(e){return this.client.request(e)}async create(e,t,r,...s){try{const t=this.url(e);return this.client.post(t,r)}catch(e){throw this.parseError(e)}}async read(e,t,...r){try{const r=this.url(e,{id:t});return this.client.get(r)}catch(e){throw this.parseError(e)}}async update(e,t,r,...s){try{const t=this.url(e);return this.client.put(t,r)}catch(e){throw this.parseError(e)}}async delete(e,t,...r){try{const r=this.url(e,{id:t});return this.client.delete(r)}catch(e){throw this.parseError(e)}}parseError(e,...t){return b.parseError(e,...t)}}E.decoration();const T="##VERSION##";export{v as AxiosFlavour,E as AxiosHttpAdapter,b as HttpAdapter,A as RestRepository,y as RestService,T as VERSION};
|
|
2
2
|
//# sourceMappingURL=for-http.js.map
|
package/dist/for-http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"for-http.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"for-http.js","sources":["../src/RestRepository.ts","../src/RestService.ts","../src/adapter.ts","../src/axios/constants.ts","../src/axios/axios.ts","../src/axios/index.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["RestRepository","Repository","constructor","adapter","clazz","super","url","path","queryParams","this","request","details","RestService","_overrides","ignoreValidation","ignoreHandlers","toString","Model","tableName","class","HttpAdapter","Adapter","config","flavour","alias","flags","operation","model","overrides","Object","assign","headers","repository","prepare","args","log","logCtx","result","PersistenceKeys","METADATA","silly","defineProperty","enumerable","writable","configurable","value","record","id","pk","revert","obj","ob","m","build","name","constr","get","InternalError","metadata","toTableName","t","URL","protocol","host","entries","forEach","key","searchParams","append","encodeURI","replace","raw","rawInput","Promise","reject","UnsupportedError","Sequence","options","Statement","parseCondition","condition","parseError","err","msg","message","includes","NotFoundError","ConflictError","BadRequestError","QueryError","PagingError","MigrationError","ObserverError","AuthorizationError","ForbiddenError","ConnectionError","SerializationError","AxiosFlavour","AxiosHttpAdapter","getClient","Axios","baseURL","client","create","_args","post","e","read","update","put","delete","decoration","VERSION"],"mappings":"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"}
|
package/lib/RestRepository.d.ts
CHANGED
|
@@ -2,8 +2,6 @@ import { Repository } from "@decaf-ts/core";
|
|
|
2
2
|
import { Model } from "@decaf-ts/decorator-validation";
|
|
3
3
|
import { Constructor } from "@decaf-ts/decoration";
|
|
4
4
|
import { HttpAdapter } from "./adapter";
|
|
5
|
-
import { Context } from "@decaf-ts/db-decorators";
|
|
6
|
-
import { HttpFlags } from "./types";
|
|
7
5
|
/**
|
|
8
6
|
* @description Repository for REST API interactions
|
|
9
7
|
* @summary A specialized repository implementation for interacting with REST APIs.
|
|
@@ -33,8 +31,8 @@ import { HttpFlags } from "./types";
|
|
|
33
31
|
* ```
|
|
34
32
|
* @see {@link RestService}
|
|
35
33
|
*/
|
|
36
|
-
export declare class RestRepository<M extends Model,
|
|
34
|
+
export declare class RestRepository<M extends Model, A extends HttpAdapter<any, any, any, any>, Q = A extends HttpAdapter<any, any, infer Q, any> ? Q : never> extends Repository<M, A> {
|
|
37
35
|
constructor(adapter: A, clazz?: Constructor<M>);
|
|
38
|
-
url(path: string
|
|
39
|
-
request<
|
|
36
|
+
url(path: string | Constructor<M>, queryParams?: Record<string, string | number>): string;
|
|
37
|
+
request<R>(details: Q): Promise<R>;
|
|
40
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RestRepository.js","sourceRoot":"","sources":["../src/RestRepository.ts"],"names":[],"mappings":";;;AAAA,yCAA4C;
|
|
1
|
+
{"version":3,"file":"RestRepository.js","sourceRoot":"","sources":["../src/RestRepository.ts"],"names":[],"mappings":";;;AAAA,yCAA4C;AAK5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAa,cAIX,SAAQ,iBAAgB;IACxB,YAAY,OAAU,EAAE,KAAsB;QAC5C,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,GAAG,CACD,IAA6B,EAC7B,WAA6C;QAE7C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,OAAU;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAI,OAAO,CAAC,CAAC;IAC1C,CAAC;CACF;AAnBD,wCAmBC"}
|
package/lib/RestService.cjs
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RestService = void 0;
|
|
4
|
-
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
5
4
|
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
6
|
-
const
|
|
7
|
-
const logging_1 = require("@decaf-ts/logging");
|
|
5
|
+
const RestRepository_1 = require("./RestRepository.cjs");
|
|
8
6
|
/**
|
|
9
7
|
* @description Service class for REST API operations
|
|
10
8
|
* @summary Provides a comprehensive implementation for interacting with REST APIs.
|
|
@@ -53,58 +51,7 @@ const logging_1 = require("@decaf-ts/logging");
|
|
|
53
51
|
* Adapter-->>Service: record
|
|
54
52
|
* Service-->>Client: revert(record)
|
|
55
53
|
*/
|
|
56
|
-
class RestService extends
|
|
57
|
-
/**
|
|
58
|
-
* @description Gets the model class constructor
|
|
59
|
-
* @summary Retrieves the model class constructor associated with this service.
|
|
60
|
-
* Throws an error if no class definition is found.
|
|
61
|
-
* @return {Constructor<M>} The model class constructor
|
|
62
|
-
* @throws {InternalError} If no class definition is found
|
|
63
|
-
*/
|
|
64
|
-
get class() {
|
|
65
|
-
if (!this._class)
|
|
66
|
-
throw new db_decorators_1.InternalError("No class definition found for this repository");
|
|
67
|
-
return this._class;
|
|
68
|
-
}
|
|
69
|
-
get log() {
|
|
70
|
-
if (!this.logger)
|
|
71
|
-
this.logger = this.adapter["log"].for(this.toString());
|
|
72
|
-
return this.logger;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* @description Gets the primary key property name
|
|
76
|
-
* @summary Retrieves the name of the primary key property for the model.
|
|
77
|
-
* If not already determined, it finds the primary key using the model class.
|
|
78
|
-
* @return The primary key property name
|
|
79
|
-
*/
|
|
80
|
-
get pk() {
|
|
81
|
-
if (!this._pk)
|
|
82
|
-
this._pk = decorator_validation_1.Model.pk(this.class);
|
|
83
|
-
return this._pk;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* @description Gets the HTTP adapter
|
|
87
|
-
* @summary Retrieves the HTTP adapter associated with this service.
|
|
88
|
-
* Throws an error if no adapter is found.
|
|
89
|
-
* @return {A} The HTTP adapter instance
|
|
90
|
-
* @throws {InternalError} If no adapter is found
|
|
91
|
-
*/
|
|
92
|
-
get adapter() {
|
|
93
|
-
if (!this._adapter)
|
|
94
|
-
throw new db_decorators_1.InternalError("No adapter found for this repository. did you use the @uses decorator or pass it in the constructor?");
|
|
95
|
-
return this._adapter;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* @description Gets the table name for the model
|
|
99
|
-
* @summary Retrieves the table name associated with the model class.
|
|
100
|
-
* If not already determined, it gets the table name from the Repository utility.
|
|
101
|
-
* @return {string} The table name
|
|
102
|
-
*/
|
|
103
|
-
get tableName() {
|
|
104
|
-
if (!this._tableName)
|
|
105
|
-
this._tableName = core_1.Repository.table(this.class);
|
|
106
|
-
return this._tableName;
|
|
107
|
-
}
|
|
54
|
+
class RestService extends RestRepository_1.RestRepository {
|
|
108
55
|
/**
|
|
109
56
|
* @description Initializes a new RestService instance
|
|
110
57
|
* @summary Creates a new service instance with the specified adapter and optional model class.
|
|
@@ -113,182 +60,14 @@ class RestService extends logging_1.LoggedClass {
|
|
|
113
60
|
* @param {Constructor<M>} [clazz] - Optional constructor for the model class
|
|
114
61
|
*/
|
|
115
62
|
constructor(adapter, clazz) {
|
|
116
|
-
super();
|
|
117
|
-
this.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
url(path, queryParams) {
|
|
123
|
-
return this.adapter.url(path, queryParams);
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* @description Creates a new resource
|
|
127
|
-
* @summary Creates a new resource in the REST API using the provided model.
|
|
128
|
-
* The method prepares the model for the adapter, sends the create request,
|
|
129
|
-
* and then converts the response back to a model instance.
|
|
130
|
-
* @param {M} model - The model instance to create
|
|
131
|
-
* @param {...any[]} args - Additional arguments to pass to the adapter
|
|
132
|
-
* @return {Promise<M>} A promise that resolves with the created model instance
|
|
133
|
-
*/
|
|
134
|
-
async create(model, ...args) {
|
|
135
|
-
// eslint-disable-next-line prefer-const
|
|
136
|
-
let { record, id } = this.adapter.prepare(model, this.pk);
|
|
137
|
-
record = await this.adapter.create(this.tableName, id, record, ...args);
|
|
138
|
-
return this.adapter.revert(record, this.class, this.pk, id);
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* @description Retrieves a resource by ID
|
|
142
|
-
* @summary Fetches a resource from the REST API using the provided ID.
|
|
143
|
-
* The method sends the read request and converts the response to a model instance.
|
|
144
|
-
* @param {string|number} id - The identifier of the resource to retrieve
|
|
145
|
-
* @param {...any[]} args - Additional arguments to pass to the adapter
|
|
146
|
-
* @return {Promise<M>} A promise that resolves with the retrieved model instance
|
|
147
|
-
*/
|
|
148
|
-
async read(id, ...args) {
|
|
149
|
-
const m = await this.adapter.read(this.tableName, id, ...args);
|
|
150
|
-
return this.adapter.revert(m, this.class, this.pk, id);
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* @description Updates an existing resource
|
|
154
|
-
* @summary Updates an existing resource in the REST API using the provided model.
|
|
155
|
-
* The method prepares the model for the adapter, sends the update request,
|
|
156
|
-
* and then converts the response back to a model instance.
|
|
157
|
-
* @param {M} model - The model instance with updated data
|
|
158
|
-
* @param {...any[]} args - Additional arguments to pass to the adapter
|
|
159
|
-
* @return {Promise<M>} A promise that resolves with the updated model instance
|
|
160
|
-
*/
|
|
161
|
-
async update(model, ...args) {
|
|
162
|
-
// eslint-disable-next-line prefer-const
|
|
163
|
-
let { record, id } = this.adapter.prepare(model, this.pk);
|
|
164
|
-
record = await this.adapter.update(this.tableName, id, record, ...args);
|
|
165
|
-
return this.adapter.revert(record, this.class, this.pk, id);
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* @description Deletes a resource by ID
|
|
169
|
-
* @summary Removes a resource from the REST API using the provided ID.
|
|
170
|
-
* The method sends the delete request and converts the response to a model instance.
|
|
171
|
-
* @param {string|number} id - The identifier of the resource to delete
|
|
172
|
-
* @param {...any[]} args - Additional arguments to pass to the adapter
|
|
173
|
-
* @return {Promise<M>} A promise that resolves with the deleted model instance
|
|
174
|
-
*/
|
|
175
|
-
async delete(id, ...args) {
|
|
176
|
-
const m = await this.adapter.delete(this.tableName, id, ...args);
|
|
177
|
-
return this.adapter.revert(m, this.class, this.pk, id);
|
|
178
|
-
}
|
|
179
|
-
async request(details) {
|
|
180
|
-
return this.adapter.request(details);
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* @description Creates multiple resources
|
|
184
|
-
* @summary Creates multiple resources in the REST API using the provided models.
|
|
185
|
-
* The method prepares each model for the adapter, sends a bulk create request,
|
|
186
|
-
* and then converts the responses back to model instances.
|
|
187
|
-
* @param {M[]} models - The model instances to create
|
|
188
|
-
* @param {...any[]} args - Additional arguments to pass to the adapter
|
|
189
|
-
* @return {Promise<M[]>} A promise that resolves with an array of created model instances
|
|
190
|
-
* @mermaid
|
|
191
|
-
* sequenceDiagram
|
|
192
|
-
* participant Client
|
|
193
|
-
* participant Service as RestService
|
|
194
|
-
* participant Adapter as HttpAdapter
|
|
195
|
-
* Client->>Service: createAll(models)
|
|
196
|
-
* Service->>Adapter: prepare(model, pk) x N
|
|
197
|
-
* Service->>Adapter: createAll(table, ids[], records[])
|
|
198
|
-
* Adapter-->>Service: records[]
|
|
199
|
-
* Service-->>Client: revert(records[])
|
|
200
|
-
*/
|
|
201
|
-
async createAll(models, ...args) {
|
|
202
|
-
if (!models.length)
|
|
203
|
-
return models;
|
|
204
|
-
const prepared = models.map((m) => this.adapter.prepare(m, this.pk));
|
|
205
|
-
const ids = prepared.map((p) => p.id);
|
|
206
|
-
let records = prepared.map((p) => p.record);
|
|
207
|
-
records = await this.adapter.createAll(this.tableName, ids, records, ...args);
|
|
208
|
-
return records.map((r, i) => this.adapter.revert(r, this.class, this.pk, ids[i]));
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* @description Deletes multiple resources by IDs
|
|
212
|
-
* @summary Removes multiple resources from the REST API using the provided IDs.
|
|
213
|
-
* The method sends a bulk delete request and converts the responses to model instances.
|
|
214
|
-
* @param {string[]|number[]} keys - The identifiers of the resources to delete
|
|
215
|
-
* @param {...any[]} args - Additional arguments to pass to the adapter
|
|
216
|
-
* @return {Promise<M[]>} A promise that resolves with an array of deleted model instances
|
|
217
|
-
*/
|
|
218
|
-
async deleteAll(keys, ...args) {
|
|
219
|
-
const results = await this.adapter.deleteAll(this.tableName, keys, ...args);
|
|
220
|
-
return results.map((r, i) => this.adapter.revert(r, this.class, this.pk, keys[i]));
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* @description Retrieves multiple resources by IDs
|
|
224
|
-
* @summary Fetches multiple resources from the REST API using the provided IDs.
|
|
225
|
-
* The method sends a bulk read request and converts the responses to model instances.
|
|
226
|
-
* @param {string[]|number[]} keys - The identifiers of the resources to retrieve
|
|
227
|
-
* @param {...any[]} args - Additional arguments to pass to the adapter
|
|
228
|
-
* @return {Promise<M[]>} A promise that resolves with an array of retrieved model instances
|
|
229
|
-
*/
|
|
230
|
-
async readAll(keys, ...args) {
|
|
231
|
-
const records = await this.adapter.readAll(this.tableName, keys, ...args);
|
|
232
|
-
return records.map((r, i) => this.adapter.revert(r, this.class, this.pk, keys[i]));
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* @description Updates multiple resources
|
|
236
|
-
* @summary Updates multiple resources in the REST API using the provided models.
|
|
237
|
-
* The method prepares each model for the adapter, sends a bulk update request,
|
|
238
|
-
* and then converts the responses back to model instances.
|
|
239
|
-
* @param {M[]} models - The model instances with updated data
|
|
240
|
-
* @param {...any[]} args - Additional arguments to pass to the adapter
|
|
241
|
-
* @return {Promise<M[]>} A promise that resolves with an array of updated model instances
|
|
242
|
-
*/
|
|
243
|
-
async updateAll(models, ...args) {
|
|
244
|
-
const records = models.map((m) => this.adapter.prepare(m, this.pk));
|
|
245
|
-
const updated = await this.adapter.updateAll(this.tableName, records.map((r) => r.id), records.map((r) => r.record), ...args);
|
|
246
|
-
return updated.map((u, i) => this.adapter.revert(u, this.class, this.pk, records[i].id));
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* @description Registers an observer
|
|
250
|
-
* @summary Adds an observer to the list of observers that will be notified of changes.
|
|
251
|
-
* Throws an error if the observer is already registered.
|
|
252
|
-
* @param {Observer} observer - The observer to register
|
|
253
|
-
* @return {void}
|
|
254
|
-
* @throws {InternalError} If the observer is already registered
|
|
255
|
-
*/
|
|
256
|
-
observe(observer) {
|
|
257
|
-
const index = this.observers.indexOf(observer);
|
|
258
|
-
if (index !== -1)
|
|
259
|
-
throw new db_decorators_1.InternalError("Observer already registered");
|
|
260
|
-
this.observers.push(observer);
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* @description Unregisters an observer
|
|
264
|
-
* @summary Removes an observer from the list of observers.
|
|
265
|
-
* Throws an error if the observer is not found.
|
|
266
|
-
* @param {Observer} observer - The observer to unregister
|
|
267
|
-
* @return {void}
|
|
268
|
-
* @throws {InternalError} If the observer is not found
|
|
269
|
-
*/
|
|
270
|
-
unObserve(observer) {
|
|
271
|
-
const index = this.observers.indexOf(observer);
|
|
272
|
-
if (index === -1)
|
|
273
|
-
throw new db_decorators_1.InternalError("Failed to find Observer");
|
|
274
|
-
this.observers.splice(index, 1);
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* @description Notifies all registered observers
|
|
278
|
-
* @summary Calls the refresh method on all registered observers to update themselves.
|
|
279
|
-
* Any errors during observer refresh are logged as warnings but don't stop the process.
|
|
280
|
-
* @param {...any[]} [args] - Optional arguments to pass to the observer refresh method
|
|
281
|
-
* @return {Promise<void>} A promise that resolves when all observers have been updated
|
|
282
|
-
*/
|
|
283
|
-
async updateObservers(...args) {
|
|
284
|
-
const results = await Promise.allSettled(this.observers.map((o) => o.refresh(...args)));
|
|
285
|
-
results.forEach((result, i) => {
|
|
286
|
-
if (result.status === "rejected")
|
|
287
|
-
console.warn(`Failed to update observable ${this.observers[i]}: ${result.reason}`);
|
|
288
|
-
});
|
|
63
|
+
super(adapter, clazz);
|
|
64
|
+
this._overrides = {
|
|
65
|
+
ignoreValidation: true,
|
|
66
|
+
ignoreHandlers: true,
|
|
67
|
+
};
|
|
289
68
|
}
|
|
290
69
|
toString() {
|
|
291
|
-
return `${this.class
|
|
70
|
+
return `${decorator_validation_1.Model.tableName(this.class)} REST service`;
|
|
292
71
|
}
|
|
293
72
|
}
|
|
294
73
|
exports.RestService = RestService;
|