@communecter/cocolight-api-client 1.0.54 → 1.0.56
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/dist/401.cocolight-api-client.browser.js +1 -0
- package/dist/401.cocolight-api-client.cjs +1 -0
- package/dist/401.cocolight-api-client.mjs.js +1 -0
- package/dist/588.cocolight-api-client.browser.js +1 -0
- package/dist/588.cocolight-api-client.cjs +1 -0
- package/dist/588.cocolight-api-client.mjs.js +1 -0
- package/dist/593.cocolight-api-client.browser.js +1 -0
- package/dist/593.cocolight-api-client.cjs +1 -0
- package/dist/593.cocolight-api-client.mjs.js +1 -0
- package/dist/839.cocolight-api-client.browser.js +1 -0
- package/dist/839.cocolight-api-client.cjs +1 -0
- package/dist/839.cocolight-api-client.mjs.js +1 -0
- package/dist/cocolight-api-client.browser.js +3 -3
- package/dist/cocolight-api-client.cjs +1 -1
- package/dist/cocolight-api-client.mjs.js +1 -1
- package/dist/cocolight-api-client.vite.mjs.js +1 -1
- package/dist/cocolight-api-client.vite.mjs.js.map +1 -1
- package/package.json +29 -17
- package/src/{Api.js → Api.ts} +85 -95
- package/src/{ApiClient.js → ApiClient.ts} +436 -247
- package/src/EJSONType.ts +103 -0
- package/src/api/{Badge.js → Badge.ts} +56 -45
- package/src/api/BaseEntity.ts +3890 -0
- package/src/api/Comment.ts +200 -0
- package/src/api/{EndpointApi.js → EndpointApi.ts} +363 -297
- package/src/api/EndpointApi.types.ts +4609 -0
- package/src/api/EntityRegistry.ts +203 -0
- package/src/api/Event.ts +332 -0
- package/src/api/News.ts +331 -0
- package/src/api/{Organization.js → Organization.ts} +155 -119
- package/src/api/{Poi.js → Poi.ts} +68 -60
- package/src/api/{Project.js → Project.ts} +150 -127
- package/src/api/{User.js → User.ts} +321 -256
- package/src/api/UserApi.ts +148 -0
- package/src/api/serverDataType/Comment.ts +88 -0
- package/src/api/serverDataType/Event.ts +80 -0
- package/src/api/serverDataType/News.ts +138 -0
- package/src/api/serverDataType/Organization.ts +80 -0
- package/src/api/serverDataType/Project.ts +71 -0
- package/src/api/serverDataType/User.ts +103 -0
- package/src/api/serverDataType/common.ts +80 -0
- package/src/endpoints.module.ts +2621 -0
- package/src/error.ts +86 -0
- package/src/index.ts +86 -0
- package/src/mixin/UserMixin.ts +4 -0
- package/src/types/api-responses.ts +217 -0
- package/src/types/entities.ts +22 -0
- package/src/types/error-guards.ts +230 -0
- package/src/types/index.ts +39 -0
- package/src/types/payloads.ts +21 -0
- package/src/types/transforms.ts +110 -0
- package/src/utils/{FileOfflineStorageStrategy.node.js → FileOfflineStorageStrategy.node.ts} +15 -12
- package/src/utils/{FileStorageStrategy.node.js → FileStorageStrategy.node.ts} +16 -39
- package/src/utils/MultiServerFileStorageStrategy.node.ts +67 -0
- package/src/utils/MultiServerTokenStorageStrategy.ts +139 -0
- package/src/utils/{OfflineClientManager.js → OfflineClientManager.ts} +82 -86
- package/src/utils/OfflineQueueStorageStrategy.ts +47 -0
- package/src/utils/TokenStorage.ts +77 -0
- package/src/utils/compat.ts +12 -0
- package/src/utils/createDefaultMultiServerTokenStorageStrategy.ts +35 -0
- package/src/utils/{createDefaultOfflineStrategy.js → createDefaultOfflineStrategy.ts} +8 -3
- package/src/utils/createDefaultTokenStorageStrategy.ts +33 -0
- package/src/utils/{reactive.js → reactive.ts} +49 -40
- package/src/utils/stream-utils.node.ts +12 -0
- package/types/Api.d.ts +38 -82
- package/types/Api.d.ts.map +1 -0
- package/types/ApiClient.d.ts +244 -184
- package/types/ApiClient.d.ts.map +1 -0
- package/types/EJSONType.d.ts +48 -22
- package/types/EJSONType.d.ts.map +1 -0
- package/types/api/Badge.d.ts +20 -20
- package/types/api/Badge.d.ts.map +1 -0
- package/types/api/BaseEntity.d.ts +751 -446
- package/types/api/BaseEntity.d.ts.map +1 -0
- package/types/api/Comment.d.ts +36 -0
- package/types/api/EndpointApi.d.ts +347 -295
- package/types/api/EndpointApi.d.ts.map +1 -0
- package/types/api/EndpointApi.types.d.ts +3914 -4133
- package/types/api/EntityRegistry.d.ts +18 -16
- package/types/api/EntityRegistry.d.ts.map +1 -0
- package/types/api/Event.d.ts +119 -35
- package/types/api/Event.d.ts.map +1 -0
- package/types/api/News.d.ts +52 -20
- package/types/api/News.d.ts.map +1 -0
- package/types/api/Organization.d.ts +165 -49
- package/types/api/Organization.d.ts.map +1 -0
- package/types/api/Poi.d.ts +51 -22
- package/types/api/Poi.d.ts.map +1 -0
- package/types/api/Project.d.ts +151 -52
- package/types/api/Project.d.ts.map +1 -0
- package/types/api/User.d.ts +222 -93
- package/types/api/User.d.ts.map +1 -0
- package/types/api/UserApi.d.ts +60 -9
- package/types/api/UserApi.d.ts.map +1 -0
- package/types/api/serverDataType/Comment.d.ts +83 -0
- package/types/api/serverDataType/Event.d.ts +67 -0
- package/types/api/serverDataType/News.d.ts +130 -0
- package/types/api/serverDataType/Organization.d.ts +65 -0
- package/types/api/serverDataType/Organization.d.ts.map +1 -0
- package/types/api/serverDataType/Project.d.ts +58 -0
- package/types/api/serverDataType/Project.d.ts.map +1 -0
- package/types/api/serverDataType/User.d.ts +86 -0
- package/types/api/serverDataType/User.d.ts.map +1 -0
- package/types/api/serverDataType/common.d.ts +71 -0
- package/types/api/serverDataType/common.d.ts.map +1 -0
- package/types/endpoints.module.d.ts +6922 -1215
- package/types/endpoints.module.d.ts.map +1 -0
- package/types/error.d.ts +25 -51
- package/types/error.d.ts.map +1 -0
- package/types/index.d.ts +55 -48
- package/types/index.d.ts.map +1 -0
- package/types/mixin/UserMixin.d.ts +1 -1
- package/types/mixin/UserMixin.d.ts.map +1 -0
- package/types/types/api-responses.d.ts +190 -0
- package/types/types/api-responses.d.ts.map +1 -0
- package/types/types/entities.d.ts +17 -0
- package/types/types/entities.d.ts.map +1 -0
- package/types/types/error-guards.d.ts +99 -0
- package/types/types/error-guards.d.ts.map +1 -0
- package/types/types/index.d.ts +7 -0
- package/types/types/payloads.d.ts +17 -0
- package/types/types/payloads.d.ts.map +1 -0
- package/types/types/transforms.d.ts +79 -0
- package/types/types/transforms.d.ts.map +1 -0
- package/types/utils/FileOfflineStorageStrategy.node.d.ts +10 -9
- package/types/utils/FileOfflineStorageStrategy.node.d.ts.map +1 -0
- package/types/utils/FileStorageStrategy.node.d.ts +9 -20
- package/types/utils/FileStorageStrategy.node.d.ts.map +1 -0
- package/types/utils/MultiServerFileStorageStrategy.node.d.ts +13 -18
- package/types/utils/MultiServerFileStorageStrategy.node.d.ts.map +1 -0
- package/types/utils/MultiServerTokenStorageStrategy.d.ts +30 -51
- package/types/utils/MultiServerTokenStorageStrategy.d.ts.map +1 -0
- package/types/utils/OfflineClientManager.d.ts +52 -88
- package/types/utils/OfflineClientManager.d.ts.map +1 -0
- package/types/utils/OfflineQueueStorageStrategy.d.ts +12 -9
- package/types/utils/OfflineQueueStorageStrategy.d.ts.map +1 -0
- package/types/utils/TokenStorage.d.ts +20 -70
- package/types/utils/TokenStorage.d.ts.map +1 -0
- package/types/utils/compat.d.ts +4 -0
- package/types/utils/compat.d.ts.map +1 -0
- package/types/utils/createDefaultMultiServerTokenStorageStrategy.d.ts +2 -11
- package/types/utils/createDefaultMultiServerTokenStorageStrategy.d.ts.map +1 -0
- package/types/utils/createDefaultOfflineStrategy.d.ts +2 -3
- package/types/utils/createDefaultOfflineStrategy.d.ts.map +1 -0
- package/types/utils/createDefaultTokenStorageStrategy.d.ts +2 -12
- package/types/utils/createDefaultTokenStorageStrategy.d.ts.map +1 -0
- package/types/utils/reactive.d.ts +10 -16
- package/types/utils/reactive.d.ts.map +1 -0
- package/types/utils/stream-utils.node.d.ts +3 -2
- package/types/utils/stream-utils.node.d.ts.map +1 -0
- package/dist/123.cocolight-api-client.browser.js +0 -1
- package/dist/123.cocolight-api-client.cjs +0 -1
- package/dist/22.cocolight-api-client.mjs.js +0 -1
- package/dist/339.cocolight-api-client.mjs.js +0 -1
- package/dist/394.cocolight-api-client.browser.js +0 -1
- package/dist/394.cocolight-api-client.cjs +0 -1
- package/dist/405.cocolight-api-client.browser.js +0 -1
- package/dist/405.cocolight-api-client.cjs +0 -1
- package/dist/774.cocolight-api-client.mjs.js +0 -1
- package/dist/790.cocolight-api-client.mjs.js +0 -1
- package/dist/931.cocolight-api-client.browser.js +0 -1
- package/dist/931.cocolight-api-client.cjs +0 -1
- package/src/EJSONType.js +0 -53
- package/src/api/BaseEntity.js +0 -2828
- package/src/api/EntityRegistry.js +0 -152
- package/src/api/Event.js +0 -226
- package/src/api/News.js +0 -244
- package/src/api/UserApi.js +0 -81
- package/src/endpoints.module.js +0 -5
- package/src/error.js +0 -121
- package/src/index.js +0 -97
- package/src/mixin/UserMixin.js +0 -8
- package/src/utils/MultiServerFileStorageStrategy.node.js +0 -87
- package/src/utils/MultiServerTokenStorageStrategy.js +0 -188
- package/src/utils/OfflineQueueStorageStrategy.js +0 -51
- package/src/utils/TokenStorage.js +0 -153
- package/src/utils/createDefaultMultiServerTokenStorageStrategy.js +0 -51
- package/src/utils/createDefaultTokenStorageStrategy.js +0 -49
- package/src/utils/stream-utils.node.js +0 -10
package/src/EJSONType.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface pour le module MongoID
|
|
3
|
+
*/
|
|
4
|
+
export interface MongoIDModule {
|
|
5
|
+
_looksLikeObjectID: (str: string) => boolean;
|
|
6
|
+
ObjectID: typeof ObjectID;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Teste si une chaîne ressemble à un ObjectID Mongo (24 hex).
|
|
11
|
+
*/
|
|
12
|
+
const looksLikeObjectID = (str: string): boolean => str.length === 24 && /^[0-9a-f]*$/.test(str);
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Représentation minimaliste d'un ObjectID Mongo (stocke l'hex en interne).
|
|
16
|
+
*/
|
|
17
|
+
class ObjectID {
|
|
18
|
+
private _str?: string;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @param hexString - Chaîne hexadécimale (24 chars). Si omise, l'instance est vide.
|
|
22
|
+
* @throws {Error} Si `hexString` est fournie mais invalide.
|
|
23
|
+
*/
|
|
24
|
+
constructor(hexString?: string) {
|
|
25
|
+
this._str = undefined;
|
|
26
|
+
|
|
27
|
+
// impl « random-based » d'origine commentée, on accepte seulement un hex fourni
|
|
28
|
+
if (hexString) {
|
|
29
|
+
hexString = hexString.toLowerCase();
|
|
30
|
+
if (!looksLikeObjectID(hexString)) {
|
|
31
|
+
throw new Error("Invalid hexadecimal string for creating an ObjectID");
|
|
32
|
+
}
|
|
33
|
+
// pour _.isEqual() / égalité structurelle
|
|
34
|
+
this._str = hexString;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Compare à un autre ObjectID.
|
|
40
|
+
*/
|
|
41
|
+
equals(other: unknown): boolean {
|
|
42
|
+
return other instanceof ObjectID && this.valueOf() === other.valueOf();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Représentation lisible (style Mongo shell).
|
|
47
|
+
*/
|
|
48
|
+
toString(): string {
|
|
49
|
+
return `ObjectID("${this._str}")`;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Clone l'ObjectID.
|
|
54
|
+
*/
|
|
55
|
+
clone(): ObjectID {
|
|
56
|
+
return new ObjectID(this._str);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Nom de type EJSON.
|
|
61
|
+
*/
|
|
62
|
+
typeName(): "oid" {
|
|
63
|
+
return "oid";
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Timestamp (secondes) extrait des 4 premiers octets.
|
|
68
|
+
* @returns Nombre de secondes depuis l'époque Unix.
|
|
69
|
+
*/
|
|
70
|
+
getTimestamp(): number {
|
|
71
|
+
// _str est défini si le constructeur a validé la chaîne
|
|
72
|
+
// si undefined, parseInt renverra NaN (comportement d'origine)
|
|
73
|
+
return Number.parseInt(this._str?.substr(0, 8) ?? "", 16);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Valeur primitive (hex).
|
|
78
|
+
*/
|
|
79
|
+
valueOf(): string | undefined {
|
|
80
|
+
return this._str;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Valeur JSON (hex).
|
|
85
|
+
*/
|
|
86
|
+
toJSONValue(): string | undefined {
|
|
87
|
+
return this.valueOf();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Chaîne hexadécimale (24 chars).
|
|
92
|
+
*/
|
|
93
|
+
toHexString(): string | undefined {
|
|
94
|
+
return this.valueOf();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const MongoID: MongoIDModule = {
|
|
99
|
+
_looksLikeObjectID: looksLikeObjectID,
|
|
100
|
+
ObjectID
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export default MongoID;
|
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
import { ApiError } from "../error.js";
|
|
2
|
-
import BaseEntity from "./BaseEntity.js";
|
|
2
|
+
import { BaseEntity } from "./BaseEntity.js";
|
|
3
3
|
|
|
4
|
-
export class Badge extends BaseEntity {
|
|
5
|
-
static entityType = "badges";
|
|
4
|
+
export class Badge extends BaseEntity<any> {
|
|
5
|
+
static override entityType = "badges";
|
|
6
6
|
|
|
7
|
-
static entityTag = "Badge";
|
|
7
|
+
static override entityTag = "Badge";
|
|
8
8
|
|
|
9
|
-
static SCHEMA_CONSTANTS = [
|
|
9
|
+
static override SCHEMA_CONSTANTS: string[] = [
|
|
10
10
|
"ADD_BADGES",
|
|
11
11
|
];
|
|
12
12
|
|
|
13
|
-
static ADD_BLOCKS = new Map([
|
|
13
|
+
static ADD_BLOCKS: Map<string, string> = new Map([
|
|
14
14
|
["ADD_BADGES", "addBadges"]
|
|
15
15
|
]);
|
|
16
16
|
|
|
17
|
-
static UPDATE_BLOCKS = new Map([
|
|
17
|
+
static UPDATE_BLOCKS: Map<string, string> = new Map([
|
|
18
18
|
]);
|
|
19
19
|
|
|
20
|
-
defaultFields = {
|
|
20
|
+
override defaultFields: Record<string, any> = {
|
|
21
21
|
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
-
removeFields = [];
|
|
24
|
+
override removeFields: string[] = [];
|
|
25
25
|
|
|
26
|
-
transforms = {
|
|
26
|
+
// transforms = {
|
|
27
27
|
|
|
28
|
-
};
|
|
28
|
+
// };
|
|
29
29
|
|
|
30
|
-
async
|
|
30
|
+
override _add = async (payload: Record<string, any>): Promise<void> => {
|
|
31
31
|
if (!this._calledFromSave) {
|
|
32
|
-
throw new ApiError("utilisation invalide de _add, utilisez save");
|
|
32
|
+
throw new ApiError("utilisation invalide de _add, utilisez save", 400);
|
|
33
33
|
}
|
|
34
34
|
payload.id = this._newId?.();
|
|
35
35
|
if (payload.slug) delete payload.slug;
|
|
36
36
|
|
|
37
|
-
for (const [constant, methodName] of Badge.ADD_BLOCKS) {
|
|
37
|
+
for (const [constant, methodName] of Array.from(Badge.ADD_BLOCKS)) {
|
|
38
38
|
const blockData = this._extractChangedFieldsFromSchema(
|
|
39
39
|
this.apiClient,
|
|
40
40
|
constant,
|
|
@@ -42,24 +42,24 @@ export class Badge extends BaseEntity {
|
|
|
42
42
|
() => {}
|
|
43
43
|
);
|
|
44
44
|
if (blockData && Object.keys(blockData).length > 0) {
|
|
45
|
-
const data = await this[methodName](blockData);
|
|
45
|
+
const data = await (this as any)[methodName](blockData);
|
|
46
46
|
if (!this.id && data?.map?.id) {
|
|
47
47
|
this._draftData.id = data.map.id;
|
|
48
48
|
this._draftData.slug = data.map.slug;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
}
|
|
52
|
+
};
|
|
53
53
|
|
|
54
|
-
async
|
|
54
|
+
override _update = async (payload: Record<string, any>): Promise<boolean> => {
|
|
55
55
|
// TODO: qui peut modifier un badge ?
|
|
56
56
|
if (!this._calledFromSave) {
|
|
57
|
-
throw new ApiError("utilisation invalide de _update, utilisez save");
|
|
57
|
+
throw new ApiError("utilisation invalide de _update, utilisez save", 400);
|
|
58
58
|
}
|
|
59
59
|
if (payload.id) delete payload.id;
|
|
60
60
|
let hasChanged = false;
|
|
61
61
|
|
|
62
|
-
for (const [constant, methodName] of Badge.UPDATE_BLOCKS) {
|
|
62
|
+
for (const [constant, methodName] of Array.from(Badge.UPDATE_BLOCKS)) {
|
|
63
63
|
const blockData = this._extractChangedFieldsFromSchema(
|
|
64
64
|
this.apiClient,
|
|
65
65
|
constant,
|
|
@@ -68,60 +68,71 @@ export class Badge extends BaseEntity {
|
|
|
68
68
|
this.removeFields
|
|
69
69
|
);
|
|
70
70
|
if (blockData && Object.keys(blockData).length > 0) {
|
|
71
|
-
await this[methodName](blockData);
|
|
71
|
+
await (this as any)[methodName](blockData);
|
|
72
72
|
hasChanged = true;
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
return hasChanged;
|
|
77
|
-
}
|
|
77
|
+
};
|
|
78
78
|
|
|
79
|
-
async getOrganizations() {
|
|
80
|
-
throw new ApiError(`getOrganizations n'existe pas dans ${this.constructor.name}
|
|
79
|
+
override async getOrganizations(): Promise<never> {
|
|
80
|
+
throw new ApiError(`getOrganizations n'existe pas dans ${this.constructor.name}`, 501);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
|
|
84
|
+
override async getProjects(): Promise<never> {
|
|
85
|
+
throw new ApiError(`getProjects n'existe pas dans ${this.constructor.name}`, 501);
|
|
85
86
|
}
|
|
86
87
|
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
|
|
89
|
+
async getEvents(): Promise<never> {
|
|
90
|
+
throw new ApiError(`getEvents n'existe pas dans ${this.constructor.name}`, 501);
|
|
89
91
|
}
|
|
90
92
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
|
|
94
|
+
override async getPois(): Promise<never> {
|
|
95
|
+
throw new ApiError(`getPois n'existe pas dans ${this.constructor.name}`, 501);
|
|
93
96
|
}
|
|
94
97
|
|
|
95
|
-
|
|
96
|
-
|
|
98
|
+
|
|
99
|
+
override async getBadgesIssuer(): Promise<never> {
|
|
100
|
+
throw new ApiError(`getBadgesIssuer n'existe pas dans ${this.constructor.name}`, 501);
|
|
97
101
|
}
|
|
98
102
|
|
|
99
|
-
|
|
100
|
-
|
|
103
|
+
|
|
104
|
+
override async getNews(): Promise<never> {
|
|
105
|
+
throw new ApiError(`getNews n'existe pas dans ${this.constructor.name}`, 501);
|
|
101
106
|
}
|
|
102
107
|
|
|
103
|
-
|
|
104
|
-
|
|
108
|
+
|
|
109
|
+
override async getSubscribers(): Promise<never> {
|
|
110
|
+
throw new ApiError(`getSubscribers n'existe pas dans ${this.constructor.name}`, 501);
|
|
105
111
|
}
|
|
106
112
|
|
|
107
|
-
|
|
108
|
-
|
|
113
|
+
|
|
114
|
+
override async project(): Promise<never> {
|
|
115
|
+
throw new ApiError(`project n'existe pas dans ${this.constructor.name}`, 501);
|
|
109
116
|
}
|
|
110
117
|
|
|
111
|
-
|
|
112
|
-
|
|
118
|
+
|
|
119
|
+
override async poi(): Promise<never> {
|
|
120
|
+
throw new ApiError(`poi n'existe pas dans ${this.constructor.name}`, 501);
|
|
113
121
|
}
|
|
114
122
|
|
|
115
|
-
|
|
116
|
-
|
|
123
|
+
|
|
124
|
+
override async event(): Promise<never> {
|
|
125
|
+
throw new ApiError(`event n'existe pas dans ${this.constructor.name}`, 501);
|
|
117
126
|
}
|
|
118
127
|
|
|
119
|
-
|
|
120
|
-
|
|
128
|
+
|
|
129
|
+
override async badge(): Promise<never> {
|
|
130
|
+
throw new ApiError(`badge n'existe pas dans ${this.constructor.name}`, 501);
|
|
121
131
|
}
|
|
122
132
|
|
|
123
|
-
|
|
124
|
-
|
|
133
|
+
|
|
134
|
+
override async news(): Promise<never> {
|
|
135
|
+
throw new ApiError(`news n'existe pas dans ${this.constructor.name}`, 501);
|
|
125
136
|
}
|
|
126
137
|
|
|
127
138
|
}
|