@communecter/cocolight-api-client 1.0.51 → 1.0.55

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.
Files changed (179) hide show
  1. package/dist/401.cocolight-api-client.browser.js +1 -0
  2. package/dist/401.cocolight-api-client.cjs +1 -0
  3. package/dist/401.cocolight-api-client.mjs.js +1 -0
  4. package/dist/588.cocolight-api-client.browser.js +1 -0
  5. package/dist/588.cocolight-api-client.cjs +1 -0
  6. package/dist/588.cocolight-api-client.mjs.js +1 -0
  7. package/dist/593.cocolight-api-client.browser.js +1 -0
  8. package/dist/593.cocolight-api-client.cjs +1 -0
  9. package/dist/593.cocolight-api-client.mjs.js +1 -0
  10. package/dist/839.cocolight-api-client.browser.js +1 -0
  11. package/dist/839.cocolight-api-client.cjs +1 -0
  12. package/dist/839.cocolight-api-client.mjs.js +1 -0
  13. package/dist/cocolight-api-client.browser.js +3 -3
  14. package/dist/cocolight-api-client.cjs +1 -1
  15. package/dist/cocolight-api-client.mjs.js +1 -1
  16. package/dist/cocolight-api-client.vite.mjs.js +1 -1
  17. package/dist/cocolight-api-client.vite.mjs.js.map +1 -1
  18. package/package.json +28 -10
  19. package/src/{Api.js → Api.ts} +99 -91
  20. package/src/{ApiClient.js → ApiClient.ts} +444 -240
  21. package/src/EJSONType.ts +103 -0
  22. package/src/api/{Badge.js → Badge.ts} +56 -45
  23. package/src/api/BaseEntity.ts +3897 -0
  24. package/src/api/Comment.ts +200 -0
  25. package/src/api/{EndpointApi.js → EndpointApi.ts} +365 -299
  26. package/src/api/{EndpointApi.types.d.ts → EndpointApi.types.ts} +166 -9
  27. package/src/api/EntityRegistry.ts +208 -0
  28. package/src/api/Event.ts +332 -0
  29. package/src/api/News.ts +331 -0
  30. package/src/api/{Organization.js → Organization.ts} +155 -119
  31. package/src/api/{Poi.js → Poi.ts} +68 -60
  32. package/src/api/{Project.js → Project.ts} +150 -127
  33. package/src/api/{User.js → User.ts} +321 -256
  34. package/src/api/UserApi.ts +148 -0
  35. package/src/api/serverDataType/Comment.ts +88 -0
  36. package/src/api/serverDataType/Event.ts +80 -0
  37. package/src/api/serverDataType/News.ts +138 -0
  38. package/src/api/serverDataType/Organization.ts +80 -0
  39. package/src/api/serverDataType/Project.ts +71 -0
  40. package/src/api/serverDataType/User.ts +103 -0
  41. package/src/api/serverDataType/common.ts +80 -0
  42. package/src/endpoints.module.ts +2621 -0
  43. package/src/error.ts +86 -0
  44. package/src/index.ts +86 -0
  45. package/src/mixin/UserMixin.ts +4 -0
  46. package/src/types/api-responses.ts +217 -0
  47. package/src/types/entities.ts +22 -0
  48. package/src/types/error-guards.ts +230 -0
  49. package/src/types/index.ts +39 -0
  50. package/src/types/payloads.ts +21 -0
  51. package/src/types/transforms.ts +110 -0
  52. package/src/utils/{FileOfflineStorageStrategy.node.js → FileOfflineStorageStrategy.node.ts} +15 -12
  53. package/src/utils/{FileStorageStrategy.node.js → FileStorageStrategy.node.ts} +17 -14
  54. package/src/utils/MultiServerFileStorageStrategy.node.ts +67 -0
  55. package/src/utils/MultiServerTokenStorageStrategy.ts +139 -0
  56. package/src/utils/{OfflineClientManager.js → OfflineClientManager.ts} +82 -86
  57. package/src/utils/OfflineQueueStorageStrategy.ts +47 -0
  58. package/src/utils/TokenStorage.ts +77 -0
  59. package/src/utils/compat.ts +12 -0
  60. package/src/utils/createDefaultMultiServerTokenStorageStrategy.ts +35 -0
  61. package/src/utils/{createDefaultOfflineStrategy.js → createDefaultOfflineStrategy.ts} +8 -3
  62. package/src/utils/createDefaultTokenStorageStrategy.ts +33 -0
  63. package/src/utils/{reactive.js → reactive.ts} +49 -40
  64. package/src/utils/stream-utils.node.ts +12 -0
  65. package/types/Api.d.ts +87 -0
  66. package/types/Api.d.ts.map +1 -0
  67. package/types/ApiClient.d.ts +437 -0
  68. package/types/ApiClient.d.ts.map +1 -0
  69. package/types/EJSONType.d.ts +53 -0
  70. package/types/EJSONType.d.ts.map +1 -0
  71. package/types/api/Badge.d.ts +24 -0
  72. package/types/api/Badge.d.ts.map +1 -0
  73. package/types/api/BaseEntity.d.ts +1322 -0
  74. package/types/api/BaseEntity.d.ts.map +1 -0
  75. package/types/api/Comment.d.ts +36 -0
  76. package/types/api/EndpointApi.d.ts +985 -0
  77. package/types/api/EndpointApi.d.ts.map +1 -0
  78. package/types/api/EndpointApi.types.d.ts +4233 -0
  79. package/types/api/EntityRegistry.d.ts +24 -0
  80. package/types/api/EntityRegistry.d.ts.map +1 -0
  81. package/types/api/Event.d.ts +122 -0
  82. package/types/api/Event.d.ts.map +1 -0
  83. package/types/api/News.d.ts +77 -0
  84. package/types/api/News.d.ts.map +1 -0
  85. package/types/api/Organization.d.ts +203 -0
  86. package/types/api/Organization.d.ts.map +1 -0
  87. package/types/api/Poi.d.ts +54 -0
  88. package/types/api/Poi.d.ts.map +1 -0
  89. package/types/api/Project.d.ts +180 -0
  90. package/types/api/Project.d.ts.map +1 -0
  91. package/types/api/User.d.ts +332 -0
  92. package/types/api/User.d.ts.map +1 -0
  93. package/types/api/UserApi.d.ts +64 -0
  94. package/types/api/UserApi.d.ts.map +1 -0
  95. package/types/api/serverDataType/Comment.d.ts +83 -0
  96. package/types/api/serverDataType/Event.d.ts +67 -0
  97. package/types/api/serverDataType/News.d.ts +130 -0
  98. package/types/api/serverDataType/Organization.d.ts +65 -0
  99. package/types/api/serverDataType/Organization.d.ts.map +1 -0
  100. package/types/api/serverDataType/Project.d.ts +58 -0
  101. package/types/api/serverDataType/Project.d.ts.map +1 -0
  102. package/types/api/serverDataType/User.d.ts +86 -0
  103. package/types/api/serverDataType/User.d.ts.map +1 -0
  104. package/types/api/serverDataType/common.d.ts +71 -0
  105. package/types/api/serverDataType/common.d.ts.map +1 -0
  106. package/types/endpoints.module.d.ts +20559 -0
  107. package/types/endpoints.module.d.ts.map +1 -0
  108. package/types/error.d.ts +54 -0
  109. package/types/error.d.ts.map +1 -0
  110. package/types/index.d.ts +59 -0
  111. package/types/index.d.ts.map +1 -0
  112. package/types/mixin/UserMixin.d.ts +1 -0
  113. package/types/mixin/UserMixin.d.ts.map +1 -0
  114. package/types/types/api-responses.d.ts +190 -0
  115. package/types/types/api-responses.d.ts.map +1 -0
  116. package/types/types/entities.d.ts +17 -0
  117. package/types/types/entities.d.ts.map +1 -0
  118. package/types/types/error-guards.d.ts +99 -0
  119. package/types/types/error-guards.d.ts.map +1 -0
  120. package/types/types/index.d.ts +7 -0
  121. package/types/types/payloads.d.ts +17 -0
  122. package/types/types/payloads.d.ts.map +1 -0
  123. package/types/types/transforms.d.ts +79 -0
  124. package/types/types/transforms.d.ts.map +1 -0
  125. package/types/utils/FileOfflineStorageStrategy.node.d.ts +11 -0
  126. package/types/utils/FileOfflineStorageStrategy.node.d.ts.map +1 -0
  127. package/types/utils/FileStorageStrategy.node.d.ts +14 -0
  128. package/types/utils/FileStorageStrategy.node.d.ts.map +1 -0
  129. package/types/utils/MultiServerFileStorageStrategy.node.d.ts +17 -0
  130. package/types/utils/MultiServerFileStorageStrategy.node.d.ts.map +1 -0
  131. package/types/utils/MultiServerTokenStorageStrategy.d.ts +44 -0
  132. package/types/utils/MultiServerTokenStorageStrategy.d.ts.map +1 -0
  133. package/types/utils/OfflineClientManager.d.ts +58 -0
  134. package/types/utils/OfflineClientManager.d.ts.map +1 -0
  135. package/types/utils/OfflineQueueStorageStrategy.d.ts +16 -0
  136. package/types/utils/OfflineQueueStorageStrategy.d.ts.map +1 -0
  137. package/types/utils/TokenStorage.d.ts +26 -0
  138. package/types/utils/TokenStorage.d.ts.map +1 -0
  139. package/types/utils/compat.d.ts +4 -0
  140. package/types/utils/compat.d.ts.map +1 -0
  141. package/types/utils/createDefaultMultiServerTokenStorageStrategy.d.ts +2 -0
  142. package/types/utils/createDefaultMultiServerTokenStorageStrategy.d.ts.map +1 -0
  143. package/types/utils/createDefaultOfflineStrategy.d.ts +2 -0
  144. package/types/utils/createDefaultOfflineStrategy.d.ts.map +1 -0
  145. package/types/utils/createDefaultTokenStorageStrategy.d.ts +2 -0
  146. package/types/utils/createDefaultTokenStorageStrategy.d.ts.map +1 -0
  147. package/types/utils/reactive.d.ts +54 -0
  148. package/types/utils/reactive.d.ts.map +1 -0
  149. package/types/utils/stream-utils.node.d.ts +3 -0
  150. package/types/utils/stream-utils.node.d.ts.map +1 -0
  151. package/dist/123.cocolight-api-client.browser.js +0 -1
  152. package/dist/123.cocolight-api-client.cjs +0 -1
  153. package/dist/22.cocolight-api-client.mjs.js +0 -1
  154. package/dist/339.cocolight-api-client.mjs.js +0 -1
  155. package/dist/394.cocolight-api-client.browser.js +0 -1
  156. package/dist/394.cocolight-api-client.cjs +0 -1
  157. package/dist/405.cocolight-api-client.browser.js +0 -1
  158. package/dist/405.cocolight-api-client.cjs +0 -1
  159. package/dist/774.cocolight-api-client.mjs.js +0 -1
  160. package/dist/790.cocolight-api-client.mjs.js +0 -1
  161. package/dist/931.cocolight-api-client.browser.js +0 -1
  162. package/dist/931.cocolight-api-client.cjs +0 -1
  163. package/src/EJSONType.js +0 -53
  164. package/src/api/BaseEntity.js +0 -2828
  165. package/src/api/EntityRegistry.js +0 -152
  166. package/src/api/Event.js +0 -226
  167. package/src/api/News.js +0 -244
  168. package/src/api/UserApi.js +0 -81
  169. package/src/endpoints.module.js +0 -5
  170. package/src/error.js +0 -68
  171. package/src/index.js +0 -34
  172. package/src/mixin/UserMixin.js +0 -8
  173. package/src/utils/MultiServerFileStorageStrategy.node.js +0 -65
  174. package/src/utils/MultiServerTokenStorageStrategy.js +0 -131
  175. package/src/utils/OfflineQueueStorageStrategy.js +0 -51
  176. package/src/utils/TokenStorage.js +0 -93
  177. package/src/utils/createDefaultMultiServerTokenStorageStrategy.js +0 -45
  178. package/src/utils/createDefaultTokenStorageStrategy.js +0 -43
  179. package/src/utils/stream-utils.node.js +0 -10
@@ -1,131 +0,0 @@
1
- // MultiServerTokenStorageStrategy.js
2
- import { TokenStorageStrategy } from "./TokenStorage.js";
3
-
4
- export class MultiServerTokenStorageStrategy extends TokenStorageStrategy {
5
- constructor() {
6
- super();
7
- this._currentBaseURL = null;
8
- }
9
-
10
- use(baseURL) {
11
- if (!baseURL) throw new Error("baseURL est requis");
12
- this._currentBaseURL = baseURL.replace(/\/+$/, "");
13
- }
14
-
15
- _ensureContext() {
16
- if (!this._currentBaseURL) throw new Error("baseURL non défini. Appelez use(baseURL)");
17
- }
18
-
19
- getServers() {
20
- throw new Error("getServers() doit être implémenté");
21
- }
22
-
23
- exportAll() {
24
- throw new Error("exportAll() doit être implémenté");
25
- }
26
- }
27
-
28
- // Mémoire
29
- export class MultiServerMemoryStorageStrategy extends MultiServerTokenStorageStrategy {
30
- constructor() {
31
- super();
32
- this._storage = new Map();
33
- }
34
-
35
- getAccessToken() {
36
- this._ensureContext();
37
- return this._storage.get(this._currentBaseURL)?.accessToken || null;
38
- }
39
-
40
- setAccessToken(token) {
41
- this._ensureContext();
42
- const current = this._storage.get(this._currentBaseURL) || {};
43
- this._storage.set(this._currentBaseURL, { ...current, accessToken: token });
44
- }
45
-
46
- getRefreshToken() {
47
- this._ensureContext();
48
- return this._storage.get(this._currentBaseURL)?.refreshToken || null;
49
- }
50
-
51
- setRefreshToken(token) {
52
- this._ensureContext();
53
- const current = this._storage.get(this._currentBaseURL) || {};
54
- this._storage.set(this._currentBaseURL, { ...current, refreshToken: token });
55
- }
56
-
57
- clear() {
58
- this._ensureContext();
59
- this._storage.delete(this._currentBaseURL);
60
- }
61
-
62
- getServers() {
63
- return [...this._storage.keys()];
64
- }
65
-
66
- exportAll() {
67
- return Object.fromEntries(this._storage.entries());
68
- }
69
- }
70
-
71
- // Navigateur (localStorage)
72
- export class MultiServerLocalStorageStrategy extends MultiServerTokenStorageStrategy {
73
- constructor(prefix = "cocolight") {
74
- super();
75
- this.prefix = prefix;
76
- }
77
-
78
- _key(baseURL) {
79
- return `${this.prefix}_tokens_${baseURL}`;
80
- }
81
-
82
- _getData() {
83
- this._ensureContext();
84
- const raw = localStorage.getItem(this._key(this._currentBaseURL));
85
- return raw ? JSON.parse(raw) : {};
86
- }
87
-
88
- _setData(data) {
89
- localStorage.setItem(this._key(this._currentBaseURL), JSON.stringify(data));
90
- }
91
-
92
- getAccessToken() {
93
- return this._getData().accessToken || null;
94
- }
95
-
96
- setAccessToken(token) {
97
- const data = this._getData();
98
- data.accessToken = token;
99
- this._setData(data);
100
- }
101
-
102
- getRefreshToken() {
103
- return this._getData().refreshToken || null;
104
- }
105
-
106
- setRefreshToken(token) {
107
- const data = this._getData();
108
- data.refreshToken = token;
109
- this._setData(data);
110
- }
111
-
112
- clear() {
113
- localStorage.removeItem(this._key(this._currentBaseURL));
114
- }
115
-
116
- getServers() {
117
- const keys = Object.keys(localStorage);
118
- return keys
119
- .filter(k => k.startsWith(`${this.prefix}_tokens_`))
120
- .map(k => k.replace(`${this.prefix}_tokens_`, ""));
121
- }
122
-
123
- exportAll() {
124
- const result = {};
125
- for (const baseURL of this.getServers()) {
126
- const raw = localStorage.getItem(this._key(baseURL));
127
- if (raw) result[baseURL] = JSON.parse(raw);
128
- }
129
- return result;
130
- }
131
- }
@@ -1,51 +0,0 @@
1
- // OfflineQueueStorageStrategy.js
2
-
3
- export class OfflineQueueStorageStrategy {
4
- async loadQueue() {
5
- throw new Error("loadQueue() doit être implémenté");
6
- }
7
-
8
- // eslint-disable-next-line no-unused-vars
9
- async saveQueue(queue) {
10
- throw new Error("saveQueue(queue) doit être implémenté");
11
- }
12
- }
13
-
14
- export class MemoryOfflineStorage extends OfflineQueueStorageStrategy {
15
- constructor() {
16
- super();
17
- this._queue = [];
18
- }
19
-
20
- async loadQueue() {
21
- return this._queue;
22
- }
23
-
24
- async saveQueue(queue) {
25
- this._queue = [...queue];
26
- }
27
- }
28
-
29
- export class LocalStorageOfflineStorage extends OfflineQueueStorageStrategy {
30
- constructor(key = "cocolight-api-offline-queue") {
31
- super();
32
- this.key = key;
33
- }
34
-
35
- async loadQueue() {
36
- try {
37
- const raw = localStorage.getItem(this.key);
38
- return raw ? JSON.parse(raw) : [];
39
- } catch {
40
- return [];
41
- }
42
- }
43
-
44
- async saveQueue(queue) {
45
- try {
46
- localStorage.setItem(this.key, JSON.stringify(queue));
47
- } catch (e) {
48
- console.warn("[Offline] Échec du stockage localStorage", e);
49
- }
50
- }
51
- }
@@ -1,93 +0,0 @@
1
- // src/utils/TokenStorage.js
2
-
3
- export class TokenStorageStrategy {
4
- getAccessToken() {
5
- throw new Error("getAccessToken() doit être implémenté");
6
- }
7
-
8
- // eslint-disable-next-line no-unused-vars
9
- setAccessToken(token) {
10
- throw new Error("setAccessToken() doit être implémenté");
11
- }
12
-
13
- getRefreshToken() {
14
- throw new Error("getRefreshToken() doit être implémenté");
15
- }
16
-
17
- // eslint-disable-next-line no-unused-vars
18
- setRefreshToken(token) {
19
- throw new Error("setRefreshToken() doit être implémenté");
20
- }
21
-
22
- clear() {
23
- throw new Error("clear() doit être implémenté");
24
- }
25
- }
26
-
27
- export class MemoryStorageStrategy extends TokenStorageStrategy {
28
- constructor() {
29
- super();
30
- this._accessToken = null;
31
- this._refreshToken = null;
32
- }
33
-
34
- getAccessToken() {
35
- return this._accessToken;
36
- }
37
-
38
- setAccessToken(token) {
39
- this._accessToken = token;
40
- }
41
-
42
- getRefreshToken() {
43
- return this._refreshToken;
44
- }
45
-
46
- setRefreshToken(token) {
47
- this._refreshToken = token;
48
- }
49
-
50
- clear() {
51
- this._accessToken = null;
52
- this._refreshToken = null;
53
- }
54
- }
55
-
56
- export class LocalStorageStrategy extends TokenStorageStrategy {
57
- constructor(prefix = "cocolight") {
58
- super();
59
- this.prefix = prefix;
60
- }
61
-
62
- getAccessToken() {
63
- return typeof localStorage !== "undefined"
64
- ? localStorage.getItem(`${this.prefix}_accessToken`)
65
- : null;
66
- }
67
-
68
- setAccessToken(token) {
69
- if (typeof localStorage !== "undefined") {
70
- localStorage.setItem(`${this.prefix}_accessToken`, token);
71
- }
72
- }
73
-
74
- getRefreshToken() {
75
- return typeof localStorage !== "undefined"
76
- ? localStorage.getItem(`${this.prefix}_refreshToken`)
77
- : null;
78
- }
79
-
80
- setRefreshToken(token) {
81
- if (typeof localStorage !== "undefined") {
82
- localStorage.setItem(`${this.prefix}_refreshToken`, token);
83
- }
84
- }
85
-
86
- clear() {
87
- if (typeof localStorage !== "undefined") {
88
- localStorage.removeItem(`${this.prefix}_accessToken`);
89
- localStorage.removeItem(`${this.prefix}_refreshToken`);
90
- }
91
- }
92
- }
93
-
@@ -1,45 +0,0 @@
1
- import {
2
- MultiServerMemoryStorageStrategy,
3
- MultiServerLocalStorageStrategy,
4
- } from "./MultiServerTokenStorageStrategy.js";
5
-
6
- /**
7
- * Crée une stratégie de stockage de tokens multi-serveurs adaptée à l’environnement.
8
- *
9
- * @param {string} [strategyType="auto"] - Type de stockage souhaité :
10
- * - "memory" : en mémoire (non persistant)
11
- * - "localStorage" : navigateur uniquement
12
- * - "file" : Node.js uniquement
13
- * - "auto" : choisit automatiquement selon l’environnement
14
- * @returns {Promise<MultiServerTokenStorageStrategy>}
15
- */
16
- export async function createDefaultMultiServerTokenStorageStrategy(strategyType = "auto") {
17
- if (strategyType === "memory") {
18
- return new MultiServerMemoryStorageStrategy();
19
- }
20
-
21
- if (strategyType === "localStorage") {
22
- if (typeof window !== "undefined" && window.localStorage) {
23
- return new MultiServerLocalStorageStrategy();
24
- } else {
25
- throw new Error("localStorage n’est pas disponible dans cet environnement.");
26
- }
27
- }
28
-
29
- if (strategyType === "file") {
30
- if (typeof window !== "undefined" && window.localStorage) {
31
- throw new Error("Le stockage fichier n’est pas disponible côté navigateur.");
32
- }
33
- const { MultiServerFileStorageStrategy } = await import("./MultiServerFileStorageStrategy.node.js");
34
- return new MultiServerFileStorageStrategy();
35
- }
36
-
37
- // stratégie "auto"
38
- if (typeof window !== "undefined" && window.localStorage) {
39
- return new MultiServerLocalStorageStrategy();
40
- } else {
41
- const { MultiServerFileStorageStrategy } = await import("./MultiServerFileStorageStrategy.node.js");
42
- return new MultiServerFileStorageStrategy();
43
- }
44
- }
45
-
@@ -1,43 +0,0 @@
1
- import { LocalStorageStrategy, MemoryStorageStrategy } from "./TokenStorage.js";
2
-
3
- /**
4
- * Crée une stratégie de stockage de jetons par défaut en fonction de l'option fournie.
5
- *
6
- * @param {string} [tokenStorageStrategy="auto"] - La stratégie de stockage de jetons souhaitée.
7
- * Les valeurs possibles sont :
8
- * - "memory" : Utilise une stratégie de stockage en mémoire.
9
- * - "localStorage" : Utilise le localStorage du navigateur (si disponible).
10
- * - "file" : Utilise une stratégie de stockage basée sur des fichiers (non disponible dans les environnements navigateur).
11
- * - "auto" : Sélectionne automatiquement la meilleure stratégie de stockage disponible.
12
- *
13
- * @returns {Promise<Object>} Une promesse qui se résout avec une instance de la stratégie de stockage sélectionnée.
14
- *
15
- * @throws {Error} Lève une erreur si la stratégie sélectionnée n'est pas disponible dans l'environnement actuel.
16
- */
17
- export async function createDefaultTokenStorageStrategy(tokenStorageStrategy = "auto") {
18
- if (tokenStorageStrategy === "memory") {
19
- return new MemoryStorageStrategy();
20
- }
21
- if (tokenStorageStrategy === "localStorage") {
22
- if (typeof window !== "undefined" && window.localStorage) {
23
- return new LocalStorageStrategy();
24
- } else {
25
- throw new Error("localStorage is not available in this environment.");
26
- }
27
- }
28
- if (tokenStorageStrategy === "file") {
29
- if (typeof window !== "undefined" && window.localStorage) {
30
- throw new Error("file storage is not available in this environment.");
31
- }
32
- const { FileStorageStrategy } = await import("./FileStorageStrategy.node.js");
33
- return new FileStorageStrategy();
34
- }
35
- if (tokenStorageStrategy === "auto") {
36
- if (typeof window !== "undefined" && window.localStorage) {
37
- return new LocalStorageStrategy();
38
- } else {
39
- const { FileStorageStrategy } = await import("./FileStorageStrategy.node.js");
40
- return new FileStorageStrategy();
41
- }
42
- }
43
- }
@@ -1,10 +0,0 @@
1
- // utils/stream-utils.node.js
2
- export async function bufferToReadable(buffer) {
3
- const { Readable } = await import("stream");
4
- return Readable.from(buffer);
5
- }
6
-
7
- export async function createPassThrough() {
8
- const { PassThrough } = await import("stream");
9
- return new PassThrough();
10
- }