@carlonicora/nextjs-jsonapi 1.6.0 → 1.7.1

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 (122) hide show
  1. package/dist/{ApiResponseInterface-CfcC7pPC.d.mts → ApiResponseInterface-DMwITHYP.d.mts} +1 -1
  2. package/dist/{ApiResponseInterface-DTBJaV5R.d.ts → ApiResponseInterface-DWgIAXI-.d.ts} +1 -1
  3. package/dist/{BlockNoteEditor-7FM7B737.js → BlockNoteEditor-IJASTIUZ.js} +14 -18
  4. package/dist/BlockNoteEditor-IJASTIUZ.js.map +1 -0
  5. package/dist/{BlockNoteEditor-RVL76ZAS.mjs → BlockNoteEditor-M6TUP3NT.mjs} +5 -9
  6. package/dist/{BlockNoteEditor-RVL76ZAS.mjs.map → BlockNoteEditor-M6TUP3NT.mjs.map} +1 -1
  7. package/dist/JsonApiRequest-2OM5NDAW.js +24 -0
  8. package/dist/JsonApiRequest-2OM5NDAW.js.map +1 -0
  9. package/dist/{JsonApiRequest-VCCRO732.mjs → JsonApiRequest-SYZ6FGCA.mjs} +2 -3
  10. package/dist/{chunk-SVX7E6RR.js → chunk-4L7OWJ2P.js} +360 -364
  11. package/dist/chunk-4L7OWJ2P.js.map +1 -0
  12. package/dist/{chunk-KFL5ZFM4.mjs → chunk-4U5CJA44.mjs} +732 -20
  13. package/dist/chunk-4U5CJA44.mjs.map +1 -0
  14. package/dist/{chunk-ZUEEIQHW.js → chunk-CKS6SVUK.js} +158 -22
  15. package/dist/chunk-CKS6SVUK.js.map +1 -0
  16. package/dist/{chunk-F4Y3GZG4.mjs → chunk-SAL7XW2G.mjs} +141 -5
  17. package/dist/chunk-SAL7XW2G.mjs.map +1 -0
  18. package/dist/{chunk-ZQTFZKLJ.mjs → chunk-TW4QRJ7D.mjs} +10 -14
  19. package/dist/{chunk-ZQTFZKLJ.mjs.map → chunk-TW4QRJ7D.mjs.map} +1 -1
  20. package/dist/{chunk-2Z56AS2S.js → chunk-U4NADAHN.js} +744 -32
  21. package/dist/chunk-U4NADAHN.js.map +1 -0
  22. package/dist/client/index.d.mts +5 -5
  23. package/dist/client/index.d.ts +5 -5
  24. package/dist/client/index.js +4 -7
  25. package/dist/client/index.js.map +1 -1
  26. package/dist/client/index.mjs +3 -6
  27. package/dist/components/index.d.mts +2 -2
  28. package/dist/components/index.d.ts +2 -2
  29. package/dist/components/index.js +4 -7
  30. package/dist/components/index.js.map +1 -1
  31. package/dist/components/index.mjs +3 -6
  32. package/dist/{config-B43zxEvn.d.mts → config-BdCV25CE.d.mts} +1 -1
  33. package/dist/{config-D2OUrI_G.d.ts → config-C9dt1QiR.d.ts} +1 -1
  34. package/dist/{content.interface-Bs8a7uW6.d.mts → content.interface-B6qP_ABq.d.mts} +1 -1
  35. package/dist/{content.interface-UtsJ-mzs.d.ts → content.interface-DHAFLasV.d.ts} +1 -1
  36. package/dist/contexts/index.d.mts +2 -2
  37. package/dist/contexts/index.d.ts +2 -2
  38. package/dist/contexts/index.js +4 -7
  39. package/dist/contexts/index.js.map +1 -1
  40. package/dist/contexts/index.mjs +3 -6
  41. package/dist/core/index.d.mts +43 -7
  42. package/dist/core/index.d.ts +43 -7
  43. package/dist/core/index.js +29 -3
  44. package/dist/core/index.js.map +1 -1
  45. package/dist/core/index.mjs +28 -2
  46. package/dist/index.d.mts +7 -44
  47. package/dist/index.d.ts +7 -44
  48. package/dist/index.js +20 -4
  49. package/dist/index.js.map +1 -1
  50. package/dist/index.mjs +24 -8
  51. package/dist/{notification.interface-BdcwkuQE.d.mts → notification.interface-agcMYCkg.d.mts} +1 -1
  52. package/dist/{notification.interface-BdcwkuQE.d.ts → notification.interface-agcMYCkg.d.ts} +1 -1
  53. package/dist/s3.service-DYnmymEd.d.mts +350 -0
  54. package/dist/s3.service-DyXjKTqr.d.ts +350 -0
  55. package/dist/scripts/generate-web-module/templates/components/container.template.js +1 -1
  56. package/dist/scripts/generate-web-module/templates/components/content.template.js +1 -1
  57. package/dist/scripts/generate-web-module/templates/components/deleter.template.js +1 -1
  58. package/dist/scripts/generate-web-module/templates/components/editor.template.js +4 -4
  59. package/dist/scripts/generate-web-module/templates/components/editor.template.js.map +1 -1
  60. package/dist/scripts/generate-web-module/templates/components/list.template.js +1 -1
  61. package/dist/scripts/generate-web-module/templates/components/multi-selector.template.js +3 -3
  62. package/dist/scripts/generate-web-module/templates/components/selector.template.js +3 -3
  63. package/dist/scripts/generate-web-module/templates/context.template.js +2 -2
  64. package/dist/scripts/generate-web-module/templates/module.template.js +1 -1
  65. package/dist/scripts/generate-web-module/templates/pages/detail-page.template.js +1 -1
  66. package/dist/scripts/generate-web-module/templates/pages/list-page.template.js +1 -1
  67. package/dist/scripts/generate-web-module/templates/table-hook.template.js +3 -3
  68. package/dist/scripts/generate-web-module/templates/table-hook.template.js.map +1 -1
  69. package/dist/server/index.d.mts +5 -235
  70. package/dist/server/index.d.ts +5 -235
  71. package/dist/server/index.js +12 -16
  72. package/dist/server/index.js.map +1 -1
  73. package/dist/server/index.mjs +3 -7
  74. package/dist/server/index.mjs.map +1 -1
  75. package/dist/{useSocket-BWJUXuOl.d.mts → useSocket-91s8M4Xd.d.mts} +1 -1
  76. package/dist/{useSocket-8vwK_R_c.d.ts → useSocket-DSR7vaXj.d.ts} +1 -1
  77. package/package.json +1 -1
  78. package/scripts/generate-web-module/templates/components/container.template.ts +1 -1
  79. package/scripts/generate-web-module/templates/components/content.template.ts +1 -1
  80. package/scripts/generate-web-module/templates/components/deleter.template.ts +1 -1
  81. package/scripts/generate-web-module/templates/components/editor.template.ts +4 -4
  82. package/scripts/generate-web-module/templates/components/list.template.ts +1 -1
  83. package/scripts/generate-web-module/templates/components/multi-selector.template.ts +3 -3
  84. package/scripts/generate-web-module/templates/components/selector.template.ts +3 -3
  85. package/scripts/generate-web-module/templates/context.template.ts +2 -2
  86. package/scripts/generate-web-module/templates/module.template.ts +1 -1
  87. package/scripts/generate-web-module/templates/pages/detail-page.template.ts +1 -1
  88. package/scripts/generate-web-module/templates/pages/list-page.template.ts +1 -1
  89. package/scripts/generate-web-module/templates/table-hook.template.ts +3 -3
  90. package/src/core/index.ts +3 -0
  91. package/src/features/auth/data/index.ts +1 -0
  92. package/src/features/company/data/index.ts +1 -0
  93. package/src/features/content/data/index.ts +1 -0
  94. package/src/features/feature/data/index.ts +1 -0
  95. package/src/features/notification/data/index.ts +1 -0
  96. package/src/features/push/data/index.ts +1 -0
  97. package/src/features/role/data/index.ts +1 -0
  98. package/src/features/s3/data/index.ts +1 -0
  99. package/src/features/user/data/index.ts +1 -0
  100. package/dist/BlockNoteEditor-7FM7B737.js.map +0 -1
  101. package/dist/JsonApiRequest-KOKGVPBI.js +0 -25
  102. package/dist/JsonApiRequest-KOKGVPBI.js.map +0 -1
  103. package/dist/chunk-2Z56AS2S.js.map +0 -1
  104. package/dist/chunk-37NJZ2VD.mjs +0 -637
  105. package/dist/chunk-37NJZ2VD.mjs.map +0 -1
  106. package/dist/chunk-AGAJMJ4T.js +0 -147
  107. package/dist/chunk-AGAJMJ4T.js.map +0 -1
  108. package/dist/chunk-CSM6AIAP.js +0 -98
  109. package/dist/chunk-CSM6AIAP.js.map +0 -1
  110. package/dist/chunk-F4Y3GZG4.mjs.map +0 -1
  111. package/dist/chunk-K4W5QXL5.mjs +0 -98
  112. package/dist/chunk-K4W5QXL5.mjs.map +0 -1
  113. package/dist/chunk-KFL5ZFM4.mjs.map +0 -1
  114. package/dist/chunk-LOSPCUCF.js +0 -637
  115. package/dist/chunk-LOSPCUCF.js.map +0 -1
  116. package/dist/chunk-RBIVEH2K.mjs +0 -147
  117. package/dist/chunk-RBIVEH2K.mjs.map +0 -1
  118. package/dist/chunk-SVX7E6RR.js.map +0 -1
  119. package/dist/chunk-ZUEEIQHW.js.map +0 -1
  120. package/dist/s3.interface-D7ttGatc.d.ts +0 -119
  121. package/dist/s3.interface-DlaMDRTn.d.mts +0 -119
  122. /package/dist/{JsonApiRequest-VCCRO732.mjs.map → JsonApiRequest-SYZ6FGCA.mjs.map} +0 -0
@@ -1,10 +1,142 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
2
2
 
3
+ var _chunk7QVYU63Ejs = require('./chunk-7QVYU63E.js');
3
4
 
4
- var _chunkAGAJMJ4Tjs = require('./chunk-AGAJMJ4T.js');
5
+ // src/core/registry/DataClassRegistry.ts
6
+ var DataClassRegistry = (_class = class {
7
+ static {
8
+ _chunk7QVYU63Ejs.__name.call(void 0, this, "DataClassRegistry");
9
+ }
10
+ static __initStatic() {this._map = /* @__PURE__ */ new Map()}
11
+ static registerObjectClass(key, classConstructor) {
12
+ const classKey = key.name;
13
+ if (!this._map.has(classKey)) {
14
+ this._map.set(classKey, classConstructor);
15
+ }
16
+ }
17
+ static get(classKey) {
18
+ const response = this._map.get(classKey.name);
19
+ if (!response) {
20
+ throw new Error(`Class not registered for key: ${typeof classKey === "string" ? classKey : classKey.name}`);
21
+ }
22
+ return response;
23
+ }
24
+ /**
25
+ * Bootstrap the registry with all modules.
26
+ * This is a convenience method for apps to register all their modules at once.
27
+ *
28
+ * @param modules - An object with module definitions (like the app's Modules class)
29
+ */
30
+ static bootstrap(modules) {
31
+ Object.values(modules).forEach((module) => {
32
+ if (module && module.model) {
33
+ this.registerObjectClass(module, module.model);
34
+ }
35
+ });
36
+ }
37
+ /**
38
+ * Clear all registered classes. Useful for testing.
39
+ */
40
+ static clear() {
41
+ this._map.clear();
42
+ }
43
+ }, _class.__initStatic(), _class);
5
44
 
45
+ // src/core/factories/JsonApiDataFactory.ts
46
+ var JsonApiDataFactory = class {
47
+ static {
48
+ _chunk7QVYU63Ejs.__name.call(void 0, this, "JsonApiDataFactory");
49
+ }
50
+ static create(classKey, data) {
51
+ const factoryClass = DataClassRegistry.get(classKey);
52
+ const instance = new factoryClass();
53
+ return instance.createJsonApi(data);
54
+ }
55
+ };
6
56
 
7
- var _chunk7QVYU63Ejs = require('./chunk-7QVYU63E.js');
57
+ // src/core/utils/translateResponse.ts
58
+ function translateData(params) {
59
+ const factoryClass = DataClassRegistry.get(params.classKey);
60
+ if (!factoryClass) {
61
+ throw new Error(
62
+ `Class not registered for key: ${typeof params.classKey === "string" ? params.classKey : params.classKey.name}`
63
+ );
64
+ }
65
+ const included = _nullishCoalesce(params.data.included, () => ( []));
66
+ if (Array.isArray(params.data.data)) {
67
+ const responseData = [];
68
+ for (const data of params.data.data) {
69
+ const object = new factoryClass();
70
+ object.rehydrate({ jsonApi: data, included, allData: params.data.data });
71
+ responseData.push(object);
72
+ }
73
+ return responseData;
74
+ } else {
75
+ const responseData = new factoryClass();
76
+ responseData.rehydrate({
77
+ jsonApi: params.data.data,
78
+ included
79
+ });
80
+ return responseData;
81
+ }
82
+ }
83
+ _chunk7QVYU63Ejs.__name.call(void 0, translateData, "translateData");
84
+ async function translateResponse(params) {
85
+ const response = {
86
+ ok: true,
87
+ response: 0,
88
+ data: [],
89
+ error: ""
90
+ };
91
+ const factoryClass = DataClassRegistry.get(params.classKey);
92
+ if (!factoryClass) {
93
+ throw new Error(
94
+ `Class not registered for key: ${typeof params.classKey === "string" ? params.classKey : params.classKey.name}`
95
+ );
96
+ }
97
+ response.ok = params.apiResponse.ok;
98
+ response.response = params.apiResponse.status;
99
+ if (!params.apiResponse.ok) {
100
+ response.error = _nullishCoalesce(_optionalChain([params, 'access', _ => _.apiResponse, 'optionalAccess', _2 => _2.data, 'optionalAccess', _3 => _3.message]), () => ( params.apiResponse.statusText));
101
+ return response;
102
+ }
103
+ if (params.apiResponse.status === 204) return response;
104
+ response.raw = params.apiResponse.data;
105
+ try {
106
+ const included = _nullishCoalesce(params.apiResponse.data.included, () => ( []));
107
+ if (params.apiResponse.data.links) {
108
+ response.self = params.apiResponse.data.links.self;
109
+ if (params.apiResponse.data.links.next && params.paginationHandler) {
110
+ response.next = params.apiResponse.data.links.next;
111
+ response.nextPage = async () => params.paginationHandler(params.apiResponse.data.links.next);
112
+ }
113
+ if (params.apiResponse.data.links.prev && params.paginationHandler) {
114
+ response.prev = params.apiResponse.data.links.prev;
115
+ response.prevPage = async () => params.paginationHandler(params.apiResponse.data.links.prev);
116
+ }
117
+ }
118
+ if (Array.isArray(params.apiResponse.data.data)) {
119
+ const responseData = [];
120
+ for (const data of params.apiResponse.data.data) {
121
+ const object = new factoryClass();
122
+ object.rehydrate({ jsonApi: data, included, allData: params.apiResponse.data.data });
123
+ responseData.push(object);
124
+ }
125
+ response.data = responseData;
126
+ } else {
127
+ const responseData = new factoryClass();
128
+ responseData.rehydrate({
129
+ jsonApi: params.apiResponse.data.data,
130
+ included
131
+ });
132
+ response.data = responseData;
133
+ }
134
+ } catch (e) {
135
+ console.error(e);
136
+ }
137
+ return response;
138
+ }
139
+ _chunk7QVYU63Ejs.__name.call(void 0, translateResponse, "translateResponse");
8
140
 
9
141
  // src/unified/JsonApiRequest.ts
10
142
  var _directFetch;
@@ -71,7 +203,7 @@ async function makeRequest(params) {
71
203
  }
72
204
  _chunk7QVYU63Ejs.__name.call(void 0, makeRequest, "makeRequest");
73
205
  function getApiUrl() {
74
- if (_optionalChain([_staticConfig, 'optionalAccess', _ => _.apiUrl])) {
206
+ if (_optionalChain([_staticConfig, 'optionalAccess', _4 => _4.apiUrl])) {
75
207
  return _staticConfig.apiUrl;
76
208
  }
77
209
  const envUrl = process.env.NEXT_PUBLIC_API_URL;
@@ -82,7 +214,7 @@ function getApiUrl() {
82
214
  }
83
215
  _chunk7QVYU63Ejs.__name.call(void 0, getApiUrl, "getApiUrl");
84
216
  function getAppUrl() {
85
- if (_optionalChain([_staticConfig, 'optionalAccess', _2 => _2.appUrl])) {
217
+ if (_optionalChain([_staticConfig, 'optionalAccess', _5 => _5.appUrl])) {
86
218
  return _staticConfig.appUrl;
87
219
  }
88
220
  const envUrl = process.env.NEXT_PUBLIC_ADDRESS;
@@ -95,11 +227,11 @@ function getAppUrl() {
95
227
  }
96
228
  _chunk7QVYU63Ejs.__name.call(void 0, getAppUrl, "getAppUrl");
97
229
  function getTrackablePages() {
98
- return _nullishCoalesce(_optionalChain([_staticConfig, 'optionalAccess', _3 => _3.trackablePages]), () => ( []));
230
+ return _nullishCoalesce(_optionalChain([_staticConfig, 'optionalAccess', _6 => _6.trackablePages]), () => ( []));
99
231
  }
100
232
  _chunk7QVYU63Ejs.__name.call(void 0, getTrackablePages, "getTrackablePages");
101
233
  function runBootstrapper() {
102
- if (_optionalChain([_staticConfig, 'optionalAccess', _4 => _4.bootstrapper])) {
234
+ if (_optionalChain([_staticConfig, 'optionalAccess', _7 => _7.bootstrapper])) {
103
235
  _staticConfig.bootstrapper();
104
236
  }
105
237
  }
@@ -119,9 +251,9 @@ async function JsonApiGet(params) {
119
251
  cache: params.classKey.cache,
120
252
  companyId: params.companyId,
121
253
  language: params.language,
122
- additionalHeaders: _optionalChain([_staticConfig, 'optionalAccess', _5 => _5.additionalHeaders])
254
+ additionalHeaders: _optionalChain([_staticConfig, 'optionalAccess', _8 => _8.additionalHeaders])
123
255
  });
124
- return _chunkAGAJMJ4Tjs.translateResponse.call(void 0, {
256
+ return translateResponse({
125
257
  classKey: params.classKey,
126
258
  apiResponse,
127
259
  companyId: params.companyId,
@@ -142,7 +274,7 @@ async function JsonApiPost(params) {
142
274
  if (!body) {
143
275
  body = {};
144
276
  } else if (params.overridesJsonApiCreation !== true) {
145
- body = _chunkAGAJMJ4Tjs.JsonApiDataFactory.create(params.classKey, body);
277
+ body = JsonApiDataFactory.create(params.classKey, body);
146
278
  }
147
279
  const apiResponse = await makeRequest({
148
280
  method: "POST",
@@ -152,9 +284,9 @@ async function JsonApiPost(params) {
152
284
  files: params.files,
153
285
  companyId: params.companyId,
154
286
  language: params.language,
155
- additionalHeaders: _optionalChain([_staticConfig, 'optionalAccess', _6 => _6.additionalHeaders])
287
+ additionalHeaders: _optionalChain([_staticConfig, 'optionalAccess', _9 => _9.additionalHeaders])
156
288
  });
157
- return _chunkAGAJMJ4Tjs.translateResponse.call(void 0, {
289
+ return translateResponse({
158
290
  classKey: _nullishCoalesce(params.responseType, () => ( params.classKey)),
159
291
  apiResponse,
160
292
  companyId: params.companyId,
@@ -169,7 +301,7 @@ async function JsonApiPut(params) {
169
301
  if (!body) {
170
302
  body = {};
171
303
  } else {
172
- body = _chunkAGAJMJ4Tjs.JsonApiDataFactory.create(params.classKey, body);
304
+ body = JsonApiDataFactory.create(params.classKey, body);
173
305
  }
174
306
  const apiResponse = await makeRequest({
175
307
  method: "PUT",
@@ -179,9 +311,9 @@ async function JsonApiPut(params) {
179
311
  files: params.files,
180
312
  companyId: params.companyId,
181
313
  language: params.language,
182
- additionalHeaders: _optionalChain([_staticConfig, 'optionalAccess', _7 => _7.additionalHeaders])
314
+ additionalHeaders: _optionalChain([_staticConfig, 'optionalAccess', _10 => _10.additionalHeaders])
183
315
  });
184
- return _chunkAGAJMJ4Tjs.translateResponse.call(void 0, {
316
+ return translateResponse({
185
317
  classKey: _nullishCoalesce(params.responseType, () => ( params.classKey)),
186
318
  apiResponse,
187
319
  companyId: params.companyId,
@@ -196,7 +328,7 @@ async function JsonApiPatch(params) {
196
328
  if (!body) {
197
329
  body = {};
198
330
  } else if (params.overridesJsonApiCreation !== true) {
199
- body = _chunkAGAJMJ4Tjs.JsonApiDataFactory.create(params.classKey, body);
331
+ body = JsonApiDataFactory.create(params.classKey, body);
200
332
  }
201
333
  const apiResponse = await makeRequest({
202
334
  method: "PATCH",
@@ -206,9 +338,9 @@ async function JsonApiPatch(params) {
206
338
  files: params.files,
207
339
  companyId: params.companyId,
208
340
  language: params.language,
209
- additionalHeaders: _optionalChain([_staticConfig, 'optionalAccess', _8 => _8.additionalHeaders])
341
+ additionalHeaders: _optionalChain([_staticConfig, 'optionalAccess', _11 => _11.additionalHeaders])
210
342
  });
211
- return _chunkAGAJMJ4Tjs.translateResponse.call(void 0, {
343
+ return translateResponse({
212
344
  classKey: _nullishCoalesce(params.responseType, () => ( params.classKey)),
213
345
  apiResponse,
214
346
  companyId: params.companyId,
@@ -225,9 +357,9 @@ async function JsonApiDelete(params) {
225
357
  token,
226
358
  companyId: params.companyId,
227
359
  language: params.language,
228
- additionalHeaders: _optionalChain([_staticConfig, 'optionalAccess', _9 => _9.additionalHeaders])
360
+ additionalHeaders: _optionalChain([_staticConfig, 'optionalAccess', _12 => _12.additionalHeaders])
229
361
  });
230
- return _chunkAGAJMJ4Tjs.translateResponse.call(void 0, {
362
+ return translateResponse({
231
363
  classKey: _nullishCoalesce(params.responseType, () => ( params.classKey)),
232
364
  apiResponse,
233
365
  companyId: params.companyId,
@@ -246,5 +378,9 @@ _chunk7QVYU63Ejs.__name.call(void 0, JsonApiDelete, "JsonApiDelete");
246
378
 
247
379
 
248
380
 
249
- exports.configureJsonApi = configureJsonApi; exports.getApiUrl = getApiUrl; exports.getAppUrl = getAppUrl; exports.getTrackablePages = getTrackablePages; exports.JsonApiGet = JsonApiGet; exports.JsonApiPost = JsonApiPost; exports.JsonApiPut = JsonApiPut; exports.JsonApiPatch = JsonApiPatch; exports.JsonApiDelete = JsonApiDelete;
250
- //# sourceMappingURL=chunk-ZUEEIQHW.js.map
381
+
382
+
383
+
384
+
385
+ exports.DataClassRegistry = DataClassRegistry; exports.JsonApiDataFactory = JsonApiDataFactory; exports.translateData = translateData; exports.translateResponse = translateResponse; exports.configureJsonApi = configureJsonApi; exports.getApiUrl = getApiUrl; exports.getAppUrl = getAppUrl; exports.getTrackablePages = getTrackablePages; exports.JsonApiGet = JsonApiGet; exports.JsonApiPost = JsonApiPost; exports.JsonApiPut = JsonApiPut; exports.JsonApiPatch = JsonApiPatch; exports.JsonApiDelete = JsonApiDelete;
386
+ //# sourceMappingURL=chunk-CKS6SVUK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-CKS6SVUK.js","../src/core/registry/DataClassRegistry.ts","../src/core/factories/JsonApiDataFactory.ts","../src/core/utils/translateResponse.ts","../src/unified/JsonApiRequest.ts"],"names":[],"mappings":"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","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-CKS6SVUK.js","sourcesContent":[null,"import { ApiDataInterface } from \"../interfaces/ApiDataInterface\";\nimport { ApiRequestDataTypeInterface } from \"../interfaces/ApiRequestDataTypeInterface\";\n\nexport class DataClassRegistry {\n private static _map = new Map<string, { new (): ApiDataInterface }>();\n\n public static registerObjectClass(\n key: ApiRequestDataTypeInterface,\n classConstructor: { new (): ApiDataInterface },\n ): void {\n const classKey = key.name;\n if (!this._map.has(classKey)) {\n this._map.set(classKey, classConstructor);\n }\n }\n\n public static get(classKey: ApiRequestDataTypeInterface): {\n new (): ApiDataInterface;\n } {\n const response = this._map.get(classKey.name);\n if (!response) {\n throw new Error(`Class not registered for key: ${typeof classKey === \"string\" ? classKey : classKey.name}`);\n }\n\n return response;\n }\n\n /**\n * Bootstrap the registry with all modules.\n * This is a convenience method for apps to register all their modules at once.\n *\n * @param modules - An object with module definitions (like the app's Modules class)\n */\n public static bootstrap(modules: Record<string, ApiRequestDataTypeInterface>): void {\n Object.values(modules).forEach((module) => {\n if (module && module.model) {\n this.registerObjectClass(module, module.model);\n }\n });\n }\n\n /**\n * Clear all registered classes. Useful for testing.\n */\n public static clear(): void {\n this._map.clear();\n }\n}\n\n// Export alias for backward compatibility\nexport { DataClassRegistry as DataClass };\n","import { ApiDataInterface } from \"../interfaces/ApiDataInterface\";\nimport { ApiRequestDataTypeInterface } from \"../interfaces/ApiRequestDataTypeInterface\";\nimport { DataClassRegistry } from \"../registry/DataClassRegistry\";\n\nexport class JsonApiDataFactory {\n public static create(classKey: ApiRequestDataTypeInterface, data: any): any {\n const factoryClass = DataClassRegistry.get(classKey);\n\n const instance = new factoryClass() as ApiDataInterface;\n return instance.createJsonApi(data);\n }\n}\n","import { ApiData } from \"../interfaces/ApiData\";\nimport { ApiDataInterface } from \"../interfaces/ApiDataInterface\";\nimport { ApiRequestDataTypeInterface } from \"../interfaces/ApiRequestDataTypeInterface\";\nimport { ApiResponseInterface } from \"../interfaces/ApiResponseInterface\";\nimport { DataClassRegistry } from \"../registry/DataClassRegistry\";\n\n/**\n * Translates raw JSON:API data into typed objects.\n * Does not require API response metadata.\n */\nexport function translateData<T extends ApiDataInterface>(params: {\n classKey: ApiRequestDataTypeInterface;\n data: any;\n}): T | T[] {\n const factoryClass = DataClassRegistry.get(params.classKey);\n\n if (!factoryClass) {\n throw new Error(\n `Class not registered for key: ${typeof params.classKey === \"string\" ? params.classKey : params.classKey.name}`,\n );\n }\n\n const included: any = params.data.included ?? [];\n\n if (Array.isArray(params.data.data)) {\n const responseData: T[] = [];\n\n for (const data of params.data.data) {\n const object = new factoryClass();\n object.rehydrate({ jsonApi: data, included: included, allData: params.data.data });\n responseData.push(object as T);\n }\n\n return responseData as T[];\n } else {\n const responseData = new factoryClass();\n responseData.rehydrate({\n jsonApi: params.data.data,\n included: included,\n });\n\n return responseData as T;\n }\n}\n\n/**\n * Translates a full API response into a typed ApiResponseInterface.\n * Includes pagination support.\n */\nexport async function translateResponse<T extends ApiDataInterface>(params: {\n classKey: ApiRequestDataTypeInterface;\n apiResponse: ApiData;\n companyId?: string;\n language: string;\n paginationHandler?: (endpoint: string) => Promise<ApiResponseInterface>;\n}): Promise<ApiResponseInterface> {\n const response: ApiResponseInterface = {\n ok: true,\n response: 0,\n data: [],\n error: \"\",\n };\n\n const factoryClass = DataClassRegistry.get(params.classKey);\n\n if (!factoryClass) {\n throw new Error(\n `Class not registered for key: ${typeof params.classKey === \"string\" ? params.classKey : params.classKey.name}`,\n );\n }\n\n response.ok = params.apiResponse.ok;\n response.response = params.apiResponse.status;\n\n if (!params.apiResponse.ok) {\n response.error = params.apiResponse?.data?.message ?? params.apiResponse.statusText;\n return response;\n }\n\n if (params.apiResponse.status === 204) return response;\n\n response.raw = params.apiResponse.data;\n\n try {\n const included: any = params.apiResponse.data.included ?? [];\n\n if (params.apiResponse.data.links) {\n response.self = params.apiResponse.data.links.self;\n\n if (params.apiResponse.data.links.next && params.paginationHandler) {\n response.next = params.apiResponse.data.links.next;\n response.nextPage = async () => params.paginationHandler!(params.apiResponse.data.links.next);\n }\n\n if (params.apiResponse.data.links.prev && params.paginationHandler) {\n response.prev = params.apiResponse.data.links.prev;\n response.prevPage = async () => params.paginationHandler!(params.apiResponse.data.links.prev);\n }\n }\n\n if (Array.isArray(params.apiResponse.data.data)) {\n const responseData: T[] = [];\n\n for (const data of params.apiResponse.data.data) {\n const object = new factoryClass();\n object.rehydrate({ jsonApi: data, included: included, allData: params.apiResponse.data.data });\n responseData.push(object as T);\n }\n\n response.data = responseData;\n } else {\n const responseData = new factoryClass();\n responseData.rehydrate({\n jsonApi: params.apiResponse.data.data,\n included: included,\n });\n\n response.data = responseData;\n }\n } catch (e) {\n console.error(e);\n }\n\n return response;\n}\n","import { JsonApiDataFactory } from \"../core/factories/JsonApiDataFactory\";\nimport { ApiData } from \"../core/interfaces/ApiData\";\nimport { ApiRequestDataTypeInterface } from \"../core/interfaces/ApiRequestDataTypeInterface\";\nimport { ApiResponseInterface } from \"../core/interfaces/ApiResponseInterface\";\nimport { translateResponse } from \"../core/utils/translateResponse\";\nimport { ModuleWithPermissions } from \"../permissions/types\";\n\n// Type definitions for dynamically imported functions (avoiding typeof import to prevent bundling)\ntype DirectFetchFn = (params: {\n method: string;\n url: string;\n token?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n companyId?: string;\n language: string;\n additionalHeaders?: Record<string, string>;\n}) => Promise<ApiData>;\n\ntype ServerRequestFn = (params: {\n method: string;\n url: string;\n token?: string;\n cache?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n companyId?: string;\n language: string;\n additionalHeaders?: Record<string, string>;\n}) => Promise<ApiData>;\n\ntype GetTokenFn = () => Promise<string | undefined>;\n\n// These will be dynamically imported based on environment\nlet _directFetch: DirectFetchFn;\nlet _serverRequest: ServerRequestFn;\nlet _getClientToken: GetTokenFn;\nlet _getServerToken: GetTokenFn;\n\n// Config storage for non-React contexts\nlet _staticConfig: {\n apiUrl: string;\n appUrl?: string;\n trackablePages?: ModuleWithPermissions[];\n bootstrapper?: () => void;\n additionalHeaders?: Record<string, string>;\n} | null = null;\n\n/**\n * Configure the JSON:API client for non-React contexts (e.g., server components).\n * For React contexts, use JsonApiProvider instead.\n */\nexport function configureJsonApi(config: {\n apiUrl: string;\n appUrl?: string;\n trackablePages?: ModuleWithPermissions[];\n bootstrapper?: () => void;\n additionalHeaders?: Record<string, string>;\n}): void {\n _staticConfig = config;\n // Call bootstrapper immediately to register all modules\n if (config.bootstrapper) {\n config.bootstrapper();\n }\n}\n\nasync function getToken(): Promise<string | undefined> {\n if (typeof window === \"undefined\") {\n // Server-side\n if (!_getServerToken) {\n const serverModule = await import(\"../server/token\");\n _getServerToken = serverModule.getServerToken;\n }\n return _getServerToken();\n } else {\n // Client-side\n if (!_getClientToken) {\n const clientModule = await import(\"../client/token\");\n _getClientToken = clientModule.getClientToken;\n }\n return _getClientToken();\n }\n}\n\nasync function makeRequest(params: {\n method: string;\n url: string;\n token?: string;\n cache?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n companyId?: string;\n language: string;\n additionalHeaders?: Record<string, string>;\n}): Promise<ApiData> {\n if (typeof window !== \"undefined\") {\n // Client-side: use direct fetch\n if (!_directFetch) {\n const clientModule = await import(\"../client/request\");\n _directFetch = clientModule.directFetch;\n }\n return _directFetch({\n method: params.method,\n url: params.url,\n token: params.token,\n body: params.body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: params.additionalHeaders,\n });\n } else {\n // Server-side: use server request with caching\n if (!_serverRequest) {\n const serverModule = await import(\"../server/request\");\n _serverRequest = serverModule.serverRequest;\n }\n return _serverRequest({\n method: params.method,\n url: params.url,\n token: params.token,\n cache: params.cache,\n body: params.body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: params.additionalHeaders,\n });\n }\n}\n\nexport function getApiUrl(): string {\n if (_staticConfig?.apiUrl) {\n return _staticConfig.apiUrl;\n }\n // Fallback to environment variable\n const envUrl = process.env.NEXT_PUBLIC_API_URL;\n if (!envUrl) {\n throw new Error(\"API URL not configured. Use configureJsonApi() or set NEXT_PUBLIC_API_URL environment variable.\");\n }\n return envUrl;\n}\n\nexport function getAppUrl(): string {\n if (_staticConfig?.appUrl) {\n return _staticConfig.appUrl;\n }\n // Fallback to environment variable\n const envUrl = process.env.NEXT_PUBLIC_ADDRESS;\n if (!envUrl) {\n throw new Error(\n \"App URL not configured. Use configureJsonApi({ appUrl }) or set NEXT_PUBLIC_ADDRESS environment variable.\",\n );\n }\n return envUrl.trim().replace(/\\/+$/, \"\");\n}\n\nexport function getTrackablePages(): ModuleWithPermissions[] {\n return _staticConfig?.trackablePages ?? [];\n}\n\nfunction runBootstrapper(): void {\n if (_staticConfig?.bootstrapper) {\n _staticConfig.bootstrapper();\n }\n}\n\nfunction buildUrl(endpoint: string): string {\n const apiUrl = getApiUrl();\n return endpoint.startsWith(\"http\") ? endpoint : `${apiUrl}${endpoint}`;\n}\n\nexport async function JsonApiGet(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n language: string;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n const apiResponse = await makeRequest({\n method: \"GET\",\n url: buildUrl(params.endpoint),\n token,\n cache: params.classKey.cache,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n paginationHandler: async (endpoint: string) =>\n JsonApiGet({\n classKey: params.classKey,\n endpoint,\n companyId: params.companyId,\n language: params.language,\n }),\n });\n}\n\nexport async function JsonApiPost(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n overridesJsonApiCreation?: boolean;\n files?: { [key: string]: File | Blob } | File | Blob;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else if (params.overridesJsonApiCreation !== true) {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await makeRequest({\n method: \"POST\",\n url: buildUrl(params.endpoint),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function JsonApiPut(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await makeRequest({\n method: \"PUT\",\n url: buildUrl(params.endpoint),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function JsonApiPatch(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n overridesJsonApiCreation?: boolean;\n responseType?: ApiRequestDataTypeInterface;\n language: string;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else if (params.overridesJsonApiCreation !== true) {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await makeRequest({\n method: \"PATCH\",\n url: buildUrl(params.endpoint),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function JsonApiDelete(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n const apiResponse = await makeRequest({\n method: \"DELETE\",\n url: buildUrl(params.endpoint),\n token,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n"]}
@@ -1,11 +1,143 @@
1
- import {
2
- JsonApiDataFactory,
3
- translateResponse
4
- } from "./chunk-RBIVEH2K.mjs";
5
1
  import {
6
2
  __name
7
3
  } from "./chunk-PAWJFY3S.mjs";
8
4
 
5
+ // src/core/registry/DataClassRegistry.ts
6
+ var DataClassRegistry = class {
7
+ static {
8
+ __name(this, "DataClassRegistry");
9
+ }
10
+ static _map = /* @__PURE__ */ new Map();
11
+ static registerObjectClass(key, classConstructor) {
12
+ const classKey = key.name;
13
+ if (!this._map.has(classKey)) {
14
+ this._map.set(classKey, classConstructor);
15
+ }
16
+ }
17
+ static get(classKey) {
18
+ const response = this._map.get(classKey.name);
19
+ if (!response) {
20
+ throw new Error(`Class not registered for key: ${typeof classKey === "string" ? classKey : classKey.name}`);
21
+ }
22
+ return response;
23
+ }
24
+ /**
25
+ * Bootstrap the registry with all modules.
26
+ * This is a convenience method for apps to register all their modules at once.
27
+ *
28
+ * @param modules - An object with module definitions (like the app's Modules class)
29
+ */
30
+ static bootstrap(modules) {
31
+ Object.values(modules).forEach((module) => {
32
+ if (module && module.model) {
33
+ this.registerObjectClass(module, module.model);
34
+ }
35
+ });
36
+ }
37
+ /**
38
+ * Clear all registered classes. Useful for testing.
39
+ */
40
+ static clear() {
41
+ this._map.clear();
42
+ }
43
+ };
44
+
45
+ // src/core/factories/JsonApiDataFactory.ts
46
+ var JsonApiDataFactory = class {
47
+ static {
48
+ __name(this, "JsonApiDataFactory");
49
+ }
50
+ static create(classKey, data) {
51
+ const factoryClass = DataClassRegistry.get(classKey);
52
+ const instance = new factoryClass();
53
+ return instance.createJsonApi(data);
54
+ }
55
+ };
56
+
57
+ // src/core/utils/translateResponse.ts
58
+ function translateData(params) {
59
+ const factoryClass = DataClassRegistry.get(params.classKey);
60
+ if (!factoryClass) {
61
+ throw new Error(
62
+ `Class not registered for key: ${typeof params.classKey === "string" ? params.classKey : params.classKey.name}`
63
+ );
64
+ }
65
+ const included = params.data.included ?? [];
66
+ if (Array.isArray(params.data.data)) {
67
+ const responseData = [];
68
+ for (const data of params.data.data) {
69
+ const object = new factoryClass();
70
+ object.rehydrate({ jsonApi: data, included, allData: params.data.data });
71
+ responseData.push(object);
72
+ }
73
+ return responseData;
74
+ } else {
75
+ const responseData = new factoryClass();
76
+ responseData.rehydrate({
77
+ jsonApi: params.data.data,
78
+ included
79
+ });
80
+ return responseData;
81
+ }
82
+ }
83
+ __name(translateData, "translateData");
84
+ async function translateResponse(params) {
85
+ const response = {
86
+ ok: true,
87
+ response: 0,
88
+ data: [],
89
+ error: ""
90
+ };
91
+ const factoryClass = DataClassRegistry.get(params.classKey);
92
+ if (!factoryClass) {
93
+ throw new Error(
94
+ `Class not registered for key: ${typeof params.classKey === "string" ? params.classKey : params.classKey.name}`
95
+ );
96
+ }
97
+ response.ok = params.apiResponse.ok;
98
+ response.response = params.apiResponse.status;
99
+ if (!params.apiResponse.ok) {
100
+ response.error = params.apiResponse?.data?.message ?? params.apiResponse.statusText;
101
+ return response;
102
+ }
103
+ if (params.apiResponse.status === 204) return response;
104
+ response.raw = params.apiResponse.data;
105
+ try {
106
+ const included = params.apiResponse.data.included ?? [];
107
+ if (params.apiResponse.data.links) {
108
+ response.self = params.apiResponse.data.links.self;
109
+ if (params.apiResponse.data.links.next && params.paginationHandler) {
110
+ response.next = params.apiResponse.data.links.next;
111
+ response.nextPage = async () => params.paginationHandler(params.apiResponse.data.links.next);
112
+ }
113
+ if (params.apiResponse.data.links.prev && params.paginationHandler) {
114
+ response.prev = params.apiResponse.data.links.prev;
115
+ response.prevPage = async () => params.paginationHandler(params.apiResponse.data.links.prev);
116
+ }
117
+ }
118
+ if (Array.isArray(params.apiResponse.data.data)) {
119
+ const responseData = [];
120
+ for (const data of params.apiResponse.data.data) {
121
+ const object = new factoryClass();
122
+ object.rehydrate({ jsonApi: data, included, allData: params.apiResponse.data.data });
123
+ responseData.push(object);
124
+ }
125
+ response.data = responseData;
126
+ } else {
127
+ const responseData = new factoryClass();
128
+ responseData.rehydrate({
129
+ jsonApi: params.apiResponse.data.data,
130
+ included
131
+ });
132
+ response.data = responseData;
133
+ }
134
+ } catch (e) {
135
+ console.error(e);
136
+ }
137
+ return response;
138
+ }
139
+ __name(translateResponse, "translateResponse");
140
+
9
141
  // src/unified/JsonApiRequest.ts
10
142
  var _directFetch;
11
143
  var _serverRequest;
@@ -237,6 +369,10 @@ async function JsonApiDelete(params) {
237
369
  __name(JsonApiDelete, "JsonApiDelete");
238
370
 
239
371
  export {
372
+ DataClassRegistry,
373
+ JsonApiDataFactory,
374
+ translateData,
375
+ translateResponse,
240
376
  configureJsonApi,
241
377
  getApiUrl,
242
378
  getAppUrl,
@@ -247,4 +383,4 @@ export {
247
383
  JsonApiPatch,
248
384
  JsonApiDelete
249
385
  };
250
- //# sourceMappingURL=chunk-F4Y3GZG4.mjs.map
386
+ //# sourceMappingURL=chunk-SAL7XW2G.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/registry/DataClassRegistry.ts","../src/core/factories/JsonApiDataFactory.ts","../src/core/utils/translateResponse.ts","../src/unified/JsonApiRequest.ts"],"sourcesContent":["import { ApiDataInterface } from \"../interfaces/ApiDataInterface\";\nimport { ApiRequestDataTypeInterface } from \"../interfaces/ApiRequestDataTypeInterface\";\n\nexport class DataClassRegistry {\n private static _map = new Map<string, { new (): ApiDataInterface }>();\n\n public static registerObjectClass(\n key: ApiRequestDataTypeInterface,\n classConstructor: { new (): ApiDataInterface },\n ): void {\n const classKey = key.name;\n if (!this._map.has(classKey)) {\n this._map.set(classKey, classConstructor);\n }\n }\n\n public static get(classKey: ApiRequestDataTypeInterface): {\n new (): ApiDataInterface;\n } {\n const response = this._map.get(classKey.name);\n if (!response) {\n throw new Error(`Class not registered for key: ${typeof classKey === \"string\" ? classKey : classKey.name}`);\n }\n\n return response;\n }\n\n /**\n * Bootstrap the registry with all modules.\n * This is a convenience method for apps to register all their modules at once.\n *\n * @param modules - An object with module definitions (like the app's Modules class)\n */\n public static bootstrap(modules: Record<string, ApiRequestDataTypeInterface>): void {\n Object.values(modules).forEach((module) => {\n if (module && module.model) {\n this.registerObjectClass(module, module.model);\n }\n });\n }\n\n /**\n * Clear all registered classes. Useful for testing.\n */\n public static clear(): void {\n this._map.clear();\n }\n}\n\n// Export alias for backward compatibility\nexport { DataClassRegistry as DataClass };\n","import { ApiDataInterface } from \"../interfaces/ApiDataInterface\";\nimport { ApiRequestDataTypeInterface } from \"../interfaces/ApiRequestDataTypeInterface\";\nimport { DataClassRegistry } from \"../registry/DataClassRegistry\";\n\nexport class JsonApiDataFactory {\n public static create(classKey: ApiRequestDataTypeInterface, data: any): any {\n const factoryClass = DataClassRegistry.get(classKey);\n\n const instance = new factoryClass() as ApiDataInterface;\n return instance.createJsonApi(data);\n }\n}\n","import { ApiData } from \"../interfaces/ApiData\";\nimport { ApiDataInterface } from \"../interfaces/ApiDataInterface\";\nimport { ApiRequestDataTypeInterface } from \"../interfaces/ApiRequestDataTypeInterface\";\nimport { ApiResponseInterface } from \"../interfaces/ApiResponseInterface\";\nimport { DataClassRegistry } from \"../registry/DataClassRegistry\";\n\n/**\n * Translates raw JSON:API data into typed objects.\n * Does not require API response metadata.\n */\nexport function translateData<T extends ApiDataInterface>(params: {\n classKey: ApiRequestDataTypeInterface;\n data: any;\n}): T | T[] {\n const factoryClass = DataClassRegistry.get(params.classKey);\n\n if (!factoryClass) {\n throw new Error(\n `Class not registered for key: ${typeof params.classKey === \"string\" ? params.classKey : params.classKey.name}`,\n );\n }\n\n const included: any = params.data.included ?? [];\n\n if (Array.isArray(params.data.data)) {\n const responseData: T[] = [];\n\n for (const data of params.data.data) {\n const object = new factoryClass();\n object.rehydrate({ jsonApi: data, included: included, allData: params.data.data });\n responseData.push(object as T);\n }\n\n return responseData as T[];\n } else {\n const responseData = new factoryClass();\n responseData.rehydrate({\n jsonApi: params.data.data,\n included: included,\n });\n\n return responseData as T;\n }\n}\n\n/**\n * Translates a full API response into a typed ApiResponseInterface.\n * Includes pagination support.\n */\nexport async function translateResponse<T extends ApiDataInterface>(params: {\n classKey: ApiRequestDataTypeInterface;\n apiResponse: ApiData;\n companyId?: string;\n language: string;\n paginationHandler?: (endpoint: string) => Promise<ApiResponseInterface>;\n}): Promise<ApiResponseInterface> {\n const response: ApiResponseInterface = {\n ok: true,\n response: 0,\n data: [],\n error: \"\",\n };\n\n const factoryClass = DataClassRegistry.get(params.classKey);\n\n if (!factoryClass) {\n throw new Error(\n `Class not registered for key: ${typeof params.classKey === \"string\" ? params.classKey : params.classKey.name}`,\n );\n }\n\n response.ok = params.apiResponse.ok;\n response.response = params.apiResponse.status;\n\n if (!params.apiResponse.ok) {\n response.error = params.apiResponse?.data?.message ?? params.apiResponse.statusText;\n return response;\n }\n\n if (params.apiResponse.status === 204) return response;\n\n response.raw = params.apiResponse.data;\n\n try {\n const included: any = params.apiResponse.data.included ?? [];\n\n if (params.apiResponse.data.links) {\n response.self = params.apiResponse.data.links.self;\n\n if (params.apiResponse.data.links.next && params.paginationHandler) {\n response.next = params.apiResponse.data.links.next;\n response.nextPage = async () => params.paginationHandler!(params.apiResponse.data.links.next);\n }\n\n if (params.apiResponse.data.links.prev && params.paginationHandler) {\n response.prev = params.apiResponse.data.links.prev;\n response.prevPage = async () => params.paginationHandler!(params.apiResponse.data.links.prev);\n }\n }\n\n if (Array.isArray(params.apiResponse.data.data)) {\n const responseData: T[] = [];\n\n for (const data of params.apiResponse.data.data) {\n const object = new factoryClass();\n object.rehydrate({ jsonApi: data, included: included, allData: params.apiResponse.data.data });\n responseData.push(object as T);\n }\n\n response.data = responseData;\n } else {\n const responseData = new factoryClass();\n responseData.rehydrate({\n jsonApi: params.apiResponse.data.data,\n included: included,\n });\n\n response.data = responseData;\n }\n } catch (e) {\n console.error(e);\n }\n\n return response;\n}\n","import { JsonApiDataFactory } from \"../core/factories/JsonApiDataFactory\";\nimport { ApiData } from \"../core/interfaces/ApiData\";\nimport { ApiRequestDataTypeInterface } from \"../core/interfaces/ApiRequestDataTypeInterface\";\nimport { ApiResponseInterface } from \"../core/interfaces/ApiResponseInterface\";\nimport { translateResponse } from \"../core/utils/translateResponse\";\nimport { ModuleWithPermissions } from \"../permissions/types\";\n\n// Type definitions for dynamically imported functions (avoiding typeof import to prevent bundling)\ntype DirectFetchFn = (params: {\n method: string;\n url: string;\n token?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n companyId?: string;\n language: string;\n additionalHeaders?: Record<string, string>;\n}) => Promise<ApiData>;\n\ntype ServerRequestFn = (params: {\n method: string;\n url: string;\n token?: string;\n cache?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n companyId?: string;\n language: string;\n additionalHeaders?: Record<string, string>;\n}) => Promise<ApiData>;\n\ntype GetTokenFn = () => Promise<string | undefined>;\n\n// These will be dynamically imported based on environment\nlet _directFetch: DirectFetchFn;\nlet _serverRequest: ServerRequestFn;\nlet _getClientToken: GetTokenFn;\nlet _getServerToken: GetTokenFn;\n\n// Config storage for non-React contexts\nlet _staticConfig: {\n apiUrl: string;\n appUrl?: string;\n trackablePages?: ModuleWithPermissions[];\n bootstrapper?: () => void;\n additionalHeaders?: Record<string, string>;\n} | null = null;\n\n/**\n * Configure the JSON:API client for non-React contexts (e.g., server components).\n * For React contexts, use JsonApiProvider instead.\n */\nexport function configureJsonApi(config: {\n apiUrl: string;\n appUrl?: string;\n trackablePages?: ModuleWithPermissions[];\n bootstrapper?: () => void;\n additionalHeaders?: Record<string, string>;\n}): void {\n _staticConfig = config;\n // Call bootstrapper immediately to register all modules\n if (config.bootstrapper) {\n config.bootstrapper();\n }\n}\n\nasync function getToken(): Promise<string | undefined> {\n if (typeof window === \"undefined\") {\n // Server-side\n if (!_getServerToken) {\n const serverModule = await import(\"../server/token\");\n _getServerToken = serverModule.getServerToken;\n }\n return _getServerToken();\n } else {\n // Client-side\n if (!_getClientToken) {\n const clientModule = await import(\"../client/token\");\n _getClientToken = clientModule.getClientToken;\n }\n return _getClientToken();\n }\n}\n\nasync function makeRequest(params: {\n method: string;\n url: string;\n token?: string;\n cache?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n companyId?: string;\n language: string;\n additionalHeaders?: Record<string, string>;\n}): Promise<ApiData> {\n if (typeof window !== \"undefined\") {\n // Client-side: use direct fetch\n if (!_directFetch) {\n const clientModule = await import(\"../client/request\");\n _directFetch = clientModule.directFetch;\n }\n return _directFetch({\n method: params.method,\n url: params.url,\n token: params.token,\n body: params.body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: params.additionalHeaders,\n });\n } else {\n // Server-side: use server request with caching\n if (!_serverRequest) {\n const serverModule = await import(\"../server/request\");\n _serverRequest = serverModule.serverRequest;\n }\n return _serverRequest({\n method: params.method,\n url: params.url,\n token: params.token,\n cache: params.cache,\n body: params.body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: params.additionalHeaders,\n });\n }\n}\n\nexport function getApiUrl(): string {\n if (_staticConfig?.apiUrl) {\n return _staticConfig.apiUrl;\n }\n // Fallback to environment variable\n const envUrl = process.env.NEXT_PUBLIC_API_URL;\n if (!envUrl) {\n throw new Error(\"API URL not configured. Use configureJsonApi() or set NEXT_PUBLIC_API_URL environment variable.\");\n }\n return envUrl;\n}\n\nexport function getAppUrl(): string {\n if (_staticConfig?.appUrl) {\n return _staticConfig.appUrl;\n }\n // Fallback to environment variable\n const envUrl = process.env.NEXT_PUBLIC_ADDRESS;\n if (!envUrl) {\n throw new Error(\n \"App URL not configured. Use configureJsonApi({ appUrl }) or set NEXT_PUBLIC_ADDRESS environment variable.\",\n );\n }\n return envUrl.trim().replace(/\\/+$/, \"\");\n}\n\nexport function getTrackablePages(): ModuleWithPermissions[] {\n return _staticConfig?.trackablePages ?? [];\n}\n\nfunction runBootstrapper(): void {\n if (_staticConfig?.bootstrapper) {\n _staticConfig.bootstrapper();\n }\n}\n\nfunction buildUrl(endpoint: string): string {\n const apiUrl = getApiUrl();\n return endpoint.startsWith(\"http\") ? endpoint : `${apiUrl}${endpoint}`;\n}\n\nexport async function JsonApiGet(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n language: string;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n const apiResponse = await makeRequest({\n method: \"GET\",\n url: buildUrl(params.endpoint),\n token,\n cache: params.classKey.cache,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n paginationHandler: async (endpoint: string) =>\n JsonApiGet({\n classKey: params.classKey,\n endpoint,\n companyId: params.companyId,\n language: params.language,\n }),\n });\n}\n\nexport async function JsonApiPost(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n overridesJsonApiCreation?: boolean;\n files?: { [key: string]: File | Blob } | File | Blob;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else if (params.overridesJsonApiCreation !== true) {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await makeRequest({\n method: \"POST\",\n url: buildUrl(params.endpoint),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function JsonApiPut(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await makeRequest({\n method: \"PUT\",\n url: buildUrl(params.endpoint),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function JsonApiPatch(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n overridesJsonApiCreation?: boolean;\n responseType?: ApiRequestDataTypeInterface;\n language: string;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else if (params.overridesJsonApiCreation !== true) {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await makeRequest({\n method: \"PATCH\",\n url: buildUrl(params.endpoint),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function JsonApiDelete(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n}): Promise<ApiResponseInterface> {\n runBootstrapper();\n const token = await getToken();\n\n const apiResponse = await makeRequest({\n method: \"DELETE\",\n url: buildUrl(params.endpoint),\n token,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _staticConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n"],"mappings":"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","names":[]}
@@ -12,29 +12,25 @@ import {
12
12
  } from "./chunk-IGOWVLJH.mjs";
13
13
  import {
14
14
  AuthService,
15
+ ClientAbstractService,
15
16
  CompanyService,
16
17
  ContentService,
17
18
  FeatureService,
19
+ Modules,
18
20
  NotificationService,
19
21
  PushService,
22
+ RehydrationFactory,
20
23
  RoleService,
21
24
  S3Service,
22
- UserService
23
- } from "./chunk-37NJZ2VD.mjs";
24
- import {
25
- checkPermissions
26
- } from "./chunk-K4W5QXL5.mjs";
27
- import {
28
- ClientAbstractService,
29
- Modules,
30
- RehydrationFactory,
25
+ UserService,
26
+ checkPermissions,
31
27
  cn,
32
28
  getIconByModule,
33
29
  getTokenHandler,
34
30
  rehydrate,
35
31
  useComposedRefs,
36
32
  useIsMobile
37
- } from "./chunk-KFL5ZFM4.mjs";
33
+ } from "./chunk-4U5CJA44.mjs";
38
34
  import {
39
35
  __name
40
36
  } from "./chunk-PAWJFY3S.mjs";
@@ -7592,7 +7588,7 @@ __name(AllowedUsersDetails, "AllowedUsersDetails");
7592
7588
  import dynamic from "next/dynamic";
7593
7589
  import React37 from "react";
7594
7590
  import { jsx as jsx96 } from "react/jsx-runtime";
7595
- var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-RVL76ZAS.mjs"), {
7591
+ var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-M6TUP3NT.mjs"), {
7596
7592
  ssr: false
7597
7593
  });
7598
7594
  var BlockNoteEditorContainer = React37.memo(/* @__PURE__ */ __name(function EditorContainer(props) {
@@ -9586,7 +9582,7 @@ function useJsonApiGet(params) {
9586
9582
  setLoading(true);
9587
9583
  setError(null);
9588
9584
  try {
9589
- const { JsonApiGet } = await import("./JsonApiRequest-VCCRO732.mjs");
9585
+ const { JsonApiGet } = await import("./JsonApiRequest-SYZ6FGCA.mjs");
9590
9586
  const language = navigator.language.split("-")[0] || "en";
9591
9587
  const apiResponse = await JsonApiGet({
9592
9588
  classKey: params.classKey,
@@ -9691,7 +9687,7 @@ function useJsonApiMutation(config) {
9691
9687
  setLoading(true);
9692
9688
  setError(null);
9693
9689
  try {
9694
- const { JsonApiPost, JsonApiPut, JsonApiPatch, JsonApiDelete } = await import("./JsonApiRequest-VCCRO732.mjs");
9690
+ const { JsonApiPost, JsonApiPut, JsonApiPatch, JsonApiDelete } = await import("./JsonApiRequest-SYZ6FGCA.mjs");
9695
9691
  const language = navigator.language.split("-")[0] || "en";
9696
9692
  let apiResponse;
9697
9693
  switch (config.method) {
@@ -12086,4 +12082,4 @@ export {
12086
12082
  useUserTableStructure,
12087
12083
  useContentTableStructure
12088
12084
  };
12089
- //# sourceMappingURL=chunk-ZQTFZKLJ.mjs.map
12085
+ //# sourceMappingURL=chunk-TW4QRJ7D.mjs.map