@c-rex/utils 0.1.7 → 0.1.9

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/index.d.mts CHANGED
@@ -1,34 +1,16 @@
1
- import { TreeOfContent, DirectoryNodes, informationUnitsRenditions } from '@c-rex/interfaces';
1
+ import { informationUnitsResponseItem, AvailableVersionsInterface, TreeOfContent, DirectoryNodes, informationUnitsRenditions } from '@c-rex/interfaces';
2
2
  import { ClassValue } from 'clsx';
3
- import { QueryParams, FileRenditionType } from '@c-rex/types';
3
+ import { QueryParams, DocumentsType } from '@c-rex/types';
4
4
 
5
- declare const _generateShaKey: (input: string) => Promise<string>;
5
+ declare const _generateShaKey: (input: string) => string;
6
6
  /**
7
7
  * Retrieves the country code associated with a given language code.
8
8
  * @param lang - The language code to look up (e.g., "en-US")
9
9
  * @returns The corresponding country code, or the original language code if not found
10
10
  */
11
11
  declare const getCountryCodeByLang: (lang: string) => string;
12
- declare const getFromCookieString: (cookieString: string, key: string) => string;
13
12
  declare const formatDateToLocale: (date: string, locale: string) => string;
14
-
15
- /**
16
- * Fetches a cookie value from the server API in client-side code.
17
- * @param key - The key of the cookie to retrieve
18
- * @returns A Promise resolving to an object containing the key and value of the cookie
19
- */
20
- declare const getCookie: (key: string) => Promise<{
21
- key: string;
22
- value: string | null;
23
- }>;
24
- /**
25
- * Sets a cookie value through the server API in client-side code.
26
- * @param key - The key of the cookie to set
27
- * @param value - The value to store in the cookie
28
- * @param maxAge - Optional maximum age of the cookie in seconds. Defaults to DEFAULT_COOKIE_LIMIT if not specified.
29
- * @returns A Promise that resolves when the cookie has been set
30
- */
31
- declare const setCookie: (key: string, value: string, maxAge?: number) => Promise<void>;
13
+ declare const createAvailableVersionList: (versions: informationUnitsResponseItem[], articleLang: string, type: string) => AvailableVersionsInterface[];
32
14
 
33
15
  /**
34
16
  * Generates breadcrumb items by recursively extracting active items and their active children from a TreeOfContent array.
@@ -45,11 +27,7 @@ declare const generateBreadcrumbItems: (treeOfContent: TreeOfContent[]) => TreeO
45
27
  */
46
28
  declare function cn(...inputs: ClassValue[]): string;
47
29
 
48
- type ReturnType = {
49
- rootNode: DirectoryNodes | null;
50
- result: TreeOfContent[];
51
- };
52
- declare const generateTreeOfContent: (directoryNodes: DirectoryNodes[]) => Promise<ReturnType>;
30
+ declare const generateTreeOfContent: (directoryNodes: DirectoryNodes[]) => Promise<TreeOfContent[]>;
53
31
 
54
32
  /**
55
33
  * Creates an array of parameter objects from a list of field values.
@@ -68,15 +46,9 @@ declare const createParams: (fieldsList: string[], key?: string) => {
68
46
  */
69
47
  declare const generateQueryParams: (params: QueryParams[]) => string;
70
48
 
71
- declare const manageToken: () => Promise<string | null>;
72
-
73
- type RenditionType = {
74
- filesToDownload: FileRenditionType[];
75
- filesToOpen: FileRenditionType[];
76
- };
77
49
  declare const getFileRenditions: ({ renditions }: {
78
50
  renditions: informationUnitsRenditions[];
79
- }) => RenditionType;
51
+ }) => DocumentsType;
80
52
 
81
53
  /**
82
54
  * Makes an asynchronous RPC API call to the server.
@@ -86,4 +58,4 @@ declare const getFileRenditions: ({ renditions }: {
86
58
  */
87
59
  declare const call: <T = unknown>(method: string, params?: any) => Promise<T>;
88
60
 
89
- export { _generateShaKey, call, cn, createParams, formatDateToLocale, generateBreadcrumbItems, generateQueryParams, generateTreeOfContent, getCookie, getCountryCodeByLang, getFileRenditions, getFromCookieString, manageToken, setCookie };
61
+ export { _generateShaKey, call, cn, createAvailableVersionList, createParams, formatDateToLocale, generateBreadcrumbItems, generateQueryParams, generateTreeOfContent, getCountryCodeByLang, getFileRenditions };
package/dist/index.d.ts CHANGED
@@ -1,34 +1,16 @@
1
- import { TreeOfContent, DirectoryNodes, informationUnitsRenditions } from '@c-rex/interfaces';
1
+ import { informationUnitsResponseItem, AvailableVersionsInterface, TreeOfContent, DirectoryNodes, informationUnitsRenditions } from '@c-rex/interfaces';
2
2
  import { ClassValue } from 'clsx';
3
- import { QueryParams, FileRenditionType } from '@c-rex/types';
3
+ import { QueryParams, DocumentsType } from '@c-rex/types';
4
4
 
5
- declare const _generateShaKey: (input: string) => Promise<string>;
5
+ declare const _generateShaKey: (input: string) => string;
6
6
  /**
7
7
  * Retrieves the country code associated with a given language code.
8
8
  * @param lang - The language code to look up (e.g., "en-US")
9
9
  * @returns The corresponding country code, or the original language code if not found
10
10
  */
11
11
  declare const getCountryCodeByLang: (lang: string) => string;
12
- declare const getFromCookieString: (cookieString: string, key: string) => string;
13
12
  declare const formatDateToLocale: (date: string, locale: string) => string;
14
-
15
- /**
16
- * Fetches a cookie value from the server API in client-side code.
17
- * @param key - The key of the cookie to retrieve
18
- * @returns A Promise resolving to an object containing the key and value of the cookie
19
- */
20
- declare const getCookie: (key: string) => Promise<{
21
- key: string;
22
- value: string | null;
23
- }>;
24
- /**
25
- * Sets a cookie value through the server API in client-side code.
26
- * @param key - The key of the cookie to set
27
- * @param value - The value to store in the cookie
28
- * @param maxAge - Optional maximum age of the cookie in seconds. Defaults to DEFAULT_COOKIE_LIMIT if not specified.
29
- * @returns A Promise that resolves when the cookie has been set
30
- */
31
- declare const setCookie: (key: string, value: string, maxAge?: number) => Promise<void>;
13
+ declare const createAvailableVersionList: (versions: informationUnitsResponseItem[], articleLang: string, type: string) => AvailableVersionsInterface[];
32
14
 
33
15
  /**
34
16
  * Generates breadcrumb items by recursively extracting active items and their active children from a TreeOfContent array.
@@ -45,11 +27,7 @@ declare const generateBreadcrumbItems: (treeOfContent: TreeOfContent[]) => TreeO
45
27
  */
46
28
  declare function cn(...inputs: ClassValue[]): string;
47
29
 
48
- type ReturnType = {
49
- rootNode: DirectoryNodes | null;
50
- result: TreeOfContent[];
51
- };
52
- declare const generateTreeOfContent: (directoryNodes: DirectoryNodes[]) => Promise<ReturnType>;
30
+ declare const generateTreeOfContent: (directoryNodes: DirectoryNodes[]) => Promise<TreeOfContent[]>;
53
31
 
54
32
  /**
55
33
  * Creates an array of parameter objects from a list of field values.
@@ -68,15 +46,9 @@ declare const createParams: (fieldsList: string[], key?: string) => {
68
46
  */
69
47
  declare const generateQueryParams: (params: QueryParams[]) => string;
70
48
 
71
- declare const manageToken: () => Promise<string | null>;
72
-
73
- type RenditionType = {
74
- filesToDownload: FileRenditionType[];
75
- filesToOpen: FileRenditionType[];
76
- };
77
49
  declare const getFileRenditions: ({ renditions }: {
78
50
  renditions: informationUnitsRenditions[];
79
- }) => RenditionType;
51
+ }) => DocumentsType;
80
52
 
81
53
  /**
82
54
  * Makes an asynchronous RPC API call to the server.
@@ -86,4 +58,4 @@ declare const getFileRenditions: ({ renditions }: {
86
58
  */
87
59
  declare const call: <T = unknown>(method: string, params?: any) => Promise<T>;
88
60
 
89
- export { _generateShaKey, call, cn, createParams, formatDateToLocale, generateBreadcrumbItems, generateQueryParams, generateTreeOfContent, getCookie, getCountryCodeByLang, getFileRenditions, getFromCookieString, manageToken, setCookie };
61
+ export { _generateShaKey, call, cn, createAvailableVersionList, createParams, formatDateToLocale, generateBreadcrumbItems, generateQueryParams, generateTreeOfContent, getCountryCodeByLang, getFileRenditions };
package/dist/index.js CHANGED
@@ -23,17 +23,14 @@ __export(index_exports, {
23
23
  _generateShaKey: () => _generateShaKey,
24
24
  call: () => call,
25
25
  cn: () => cn,
26
+ createAvailableVersionList: () => createAvailableVersionList,
26
27
  createParams: () => createParams,
27
28
  formatDateToLocale: () => formatDateToLocale,
28
29
  generateBreadcrumbItems: () => generateBreadcrumbItems,
29
30
  generateQueryParams: () => generateQueryParams,
30
31
  generateTreeOfContent: () => generateTreeOfContent,
31
- getCookie: () => getCookie,
32
32
  getCountryCodeByLang: () => getCountryCodeByLang,
33
- getFileRenditions: () => getFileRenditions,
34
- getFromCookieString: () => getFromCookieString,
35
- manageToken: () => manageToken,
36
- setCookie: () => setCookie
33
+ getFileRenditions: () => getFileRenditions
37
34
  });
38
35
  module.exports = __toCommonJS(index_exports);
39
36
 
@@ -43,16 +40,15 @@ var FLAGS_BY_LANG = {
43
40
  "de": "DE"
44
41
  };
45
42
  var DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1e3;
46
- var CREX_TOKEN_HEADER_KEY = "crex-token";
47
43
 
48
44
  // src/utils.ts
49
- var _generateShaKey = async (input) => {
50
- const encoder = new TextEncoder();
51
- const data = encoder.encode(input);
52
- const hashBuffer = await crypto.subtle.digest("SHA-1", data);
53
- const hashArray = Array.from(new Uint8Array(hashBuffer));
54
- const base64url = btoa(String.fromCharCode(...hashArray)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
55
- return base64url.slice(0, 12);
45
+ var _generateShaKey = (input) => {
46
+ let hash = 0;
47
+ for (let i = 0; i < input.length; i++) {
48
+ hash = (hash << 5) - hash + input.charCodeAt(i);
49
+ hash |= 0;
50
+ }
51
+ return Math.abs(hash).toString(16);
56
52
  };
57
53
  var getCountryCodeByLang = (lang) => {
58
54
  const mappedKeys = Object.keys(FLAGS_BY_LANG);
@@ -62,16 +58,6 @@ var getCountryCodeByLang = (lang) => {
62
58
  const country = FLAGS_BY_LANG[lang];
63
59
  return country;
64
60
  };
65
- var getFromCookieString = (cookieString, key) => {
66
- const cookies = cookieString.split(";");
67
- for (const cookie of cookies) {
68
- const [cookieKey, cookieValue] = cookie.trim().split("=");
69
- if (cookieKey === key) {
70
- return cookieValue;
71
- }
72
- }
73
- return "";
74
- };
75
61
  var formatDateToLocale = (date, locale) => {
76
62
  if (typeof date !== "string" || !date) {
77
63
  return date;
@@ -83,10 +69,45 @@ var formatDateToLocale = (date, locale) => {
83
69
  year: "numeric"
84
70
  }).format(dateAux);
85
71
  };
72
+ var createAvailableVersionList = (versions, articleLang, type) => {
73
+ const availableVersions = versions.map((item) => {
74
+ return {
75
+ shortId: item.shortId,
76
+ active: item.language === articleLang,
77
+ lang: item.language,
78
+ country: item.language.split("-")[1],
79
+ link: `/${type}/${item.shortId}`
80
+ };
81
+ }).sort((a, b) => {
82
+ if (a.lang < b.lang) return -1;
83
+ if (a.lang > b.lang) return 1;
84
+ return 0;
85
+ });
86
+ return availableVersions;
87
+ };
88
+
89
+ // src/breadcrumbs.ts
90
+ var generateBreadcrumbItems = (treeOfContent) => {
91
+ const result = [];
92
+ treeOfContent.forEach((item) => {
93
+ if (item.active) {
94
+ const filteredChildren = generateBreadcrumbItems(item.children);
95
+ result.push(item, ...filteredChildren);
96
+ }
97
+ });
98
+ return result;
99
+ };
100
+
101
+ // src/classMerge.ts
102
+ var import_clsx = require("clsx");
103
+ var import_tailwind_merge = require("tailwind-merge");
104
+ function cn(...inputs) {
105
+ return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
106
+ }
86
107
 
87
108
  // src/call.ts
88
109
  var call = async (method, params) => {
89
- const shaKey = await _generateShaKey(JSON.stringify({ method, params }));
110
+ const shaKey = _generateShaKey(JSON.stringify({ method, params }));
90
111
  const cache = localStorage.getItem(shaKey);
91
112
  if (cache !== null) {
92
113
  const { data, expireDate } = JSON.parse(cache);
@@ -96,7 +117,7 @@ var call = async (method, params) => {
96
117
  localStorage.removeItem(shaKey);
97
118
  }
98
119
  }
99
- const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/rpc`, {
120
+ const res = await fetch(`/api/rpc`, {
100
121
  method: "POST",
101
122
  headers: { "Content-Type": "application/json" },
102
123
  body: JSON.stringify({ method, params }),
@@ -113,56 +134,6 @@ var call = async (method, params) => {
113
134
  return json.data;
114
135
  };
115
136
 
116
- // src/memory.ts
117
- var getCookie = async (key) => {
118
- const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/cookies?key=${key}`);
119
- if (!res.ok) {
120
- return { key, value: null };
121
- }
122
- const json = await res.json();
123
- return json;
124
- };
125
- var setCookie = async (key, value, maxAge) => {
126
- try {
127
- if (maxAge === void 0) {
128
- maxAge = DEFAULT_COOKIE_LIMIT;
129
- }
130
- await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/cookies`, {
131
- method: "POST",
132
- credentials: "include",
133
- body: JSON.stringify({
134
- key,
135
- value,
136
- maxAge
137
- })
138
- });
139
- } catch (error) {
140
- call("CrexLogger.log", {
141
- level: "error",
142
- message: `utils.setCookie error: ${error}`
143
- });
144
- }
145
- };
146
-
147
- // src/breadcrumbs.ts
148
- var generateBreadcrumbItems = (treeOfContent) => {
149
- const result = [];
150
- treeOfContent.forEach((item) => {
151
- if (item.active) {
152
- const filteredChildren = generateBreadcrumbItems(item.children);
153
- result.push(item, ...filteredChildren);
154
- }
155
- });
156
- return result;
157
- };
158
-
159
- // src/classMerge.ts
160
- var import_clsx = require("clsx");
161
- var import_tailwind_merge = require("tailwind-merge");
162
- function cn(...inputs) {
163
- return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
164
- }
165
-
166
137
  // src/treeOfContent.ts
167
138
  var itemCache = /* @__PURE__ */ new Map();
168
139
  async function getItemCached(id) {
@@ -172,12 +143,12 @@ async function getItemCached(id) {
172
143
  return data;
173
144
  }
174
145
  var generateTreeOfContent = async (directoryNodes) => {
175
- if (!directoryNodes?.length) return { rootNode: null, result: [] };
146
+ if (!directoryNodes?.length) return [];
176
147
  let response = await getItemCached(directoryNodes[0].shortId);
177
148
  let result = await getChildrenInfo(response.childNodes);
178
149
  while (response.parents?.[0]) {
179
150
  if (!response.labels?.[0] || !response.informationUnits?.[0]) {
180
- return { rootNode: null, result };
151
+ return result;
181
152
  }
182
153
  const infoId = response.informationUnits[0].shortId;
183
154
  const parentNode = {
@@ -190,7 +161,7 @@ var generateTreeOfContent = async (directoryNodes) => {
190
161
  response = await getItemCached(response.parents[0].shortId);
191
162
  result = await getChildrenInfo(response.childNodes, parentNode);
192
163
  }
193
- return { rootNode: response, result };
164
+ return result;
194
165
  };
195
166
  async function getChildrenInfo(childNodes, childItem) {
196
167
  if (!childNodes?.length) return [];
@@ -224,106 +195,47 @@ var createParams = (fieldsList, key = "Fields") => fieldsList.map((item) => ({
224
195
  value: item
225
196
  }));
226
197
  var generateQueryParams = (params) => {
227
- const queryParams = params.map(
228
- (param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`
229
- ).join("&");
198
+ const queryParams = params.map((param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`).join("&");
230
199
  return queryParams;
231
200
  };
232
201
 
233
- // src/token.ts
234
- var updateToken = async () => {
235
- try {
236
- const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/token`, {
237
- method: "POST",
238
- credentials: "include"
239
- });
240
- const cookies = response.headers.get("set-cookie");
241
- if (cookies === null) return null;
242
- const aux = cookies.split(`${CREX_TOKEN_HEADER_KEY}=`);
243
- if (aux.length == 0) return null;
244
- const token = aux[1].split(";")[0];
245
- if (token === void 0) throw new Error("Token is undefined");
246
- return token;
247
- } catch (error) {
248
- call("CrexLogger.log", {
249
- level: "error",
250
- message: `utils.updateToken error: ${error}`
251
- });
252
- return null;
253
- }
254
- };
255
- var manageToken = async () => {
256
- try {
257
- const hasToken = await getCookie(CREX_TOKEN_HEADER_KEY);
258
- let token = "";
259
- if (!hasToken || hasToken.value === null) {
260
- const tokenResult = await updateToken();
261
- if (tokenResult === null) throw new Error("Token is undefined");
262
- token = tokenResult;
263
- } else {
264
- token = hasToken.value;
265
- }
266
- return token;
267
- } catch (error) {
268
- call("CrexLogger.log", {
269
- level: "error",
270
- message: `utils.manageToken error: ${error}`
271
- });
272
- return null;
273
- }
274
- };
275
-
276
202
  // src/renditions.ts
277
203
  var getFileRenditions = ({ renditions }) => {
278
204
  if (renditions == void 0 || renditions.length == 0) {
279
- return {
280
- filesToDownload: [],
281
- filesToOpen: []
282
- };
205
+ return {};
283
206
  }
284
207
  const filteredRenditions = renditions.filter(
285
208
  (item) => item.format != "application/xhtml+xml" && item.format != "application/json" && item.format != "application/llm+xml"
286
209
  );
287
210
  if (filteredRenditions.length == 0 || filteredRenditions[0] == void 0) {
288
- return {
289
- filesToDownload: [],
290
- filesToOpen: []
291
- };
211
+ return {};
292
212
  }
293
- const filesToDownload = filteredRenditions.map((item) => {
294
- const filteredLinks = item.links.filter((item2) => item2.rel == "download");
295
- return {
296
- format: item.format,
297
- link: filteredLinks[0].href
298
- };
299
- });
300
- const filesToOpen = filteredRenditions.map((item) => {
301
- const filteredLinks = item.links.filter((item2) => item2.rel == "view");
302
- return {
303
- format: item.format,
304
- link: filteredLinks[0].href
305
- };
213
+ const result = {};
214
+ filteredRenditions.forEach((item) => {
215
+ const key = item.format;
216
+ if (result[key] == void 0) {
217
+ result[key] = {
218
+ view: "",
219
+ download: ""
220
+ };
221
+ }
222
+ result[key].download = item.links.filter((link) => link.rel == "download")[0]?.href;
223
+ result[key].view = item.links.filter((link) => link.rel == "view")[0]?.href;
306
224
  });
307
- return {
308
- filesToDownload,
309
- filesToOpen
310
- };
225
+ return result;
311
226
  };
312
227
  // Annotate the CommonJS export names for ESM import in node:
313
228
  0 && (module.exports = {
314
229
  _generateShaKey,
315
230
  call,
316
231
  cn,
232
+ createAvailableVersionList,
317
233
  createParams,
318
234
  formatDateToLocale,
319
235
  generateBreadcrumbItems,
320
236
  generateQueryParams,
321
237
  generateTreeOfContent,
322
- getCookie,
323
238
  getCountryCodeByLang,
324
- getFileRenditions,
325
- getFromCookieString,
326
- manageToken,
327
- setCookie
239
+ getFileRenditions
328
240
  });
329
241
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../../constants/src/index.ts","../src/utils.ts","../src/call.ts","../src/memory.ts","../src/breadcrumbs.ts","../src/classMerge.ts","../src/treeOfContent.ts","../src/params.ts","../src/token.ts","../src/renditions.ts"],"sourcesContent":["export * from './utils';\nexport * from './memory';\nexport * from './breadcrumbs';\nexport * from './classMerge';\nexport * from './treeOfContent';\nexport * from './params';\nexport * from './token';\nexport * from './renditions';\nexport * from './call';","export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n","import { FLAGS_BY_LANG } from \"@c-rex/constants\";\n\nexport const _generateShaKey = async (input: string): Promise<string> => {\n const encoder = new TextEncoder();\n const data = encoder.encode(input);\n const hashBuffer = await crypto.subtle.digest('SHA-1', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const base64url = btoa(String.fromCharCode(...hashArray))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n\n return base64url.slice(0, 12);\n}\n\n/**\n * Retrieves the country code associated with a given language code.\n * @param lang - The language code to look up (e.g., \"en-US\")\n * @returns The corresponding country code, or the original language code if not found\n */\nexport const getCountryCodeByLang = (lang: string): string => {\n const mappedKeys = Object.keys(FLAGS_BY_LANG);\n\n if (!mappedKeys.includes(lang)) {\n return lang\n }\n\n type LangKey = keyof typeof FLAGS_BY_LANG;\n const country = FLAGS_BY_LANG[lang as LangKey]\n\n return country\n}\n\nexport const getFromCookieString = (cookieString: string, key: string): string => {\n const cookies = cookieString.split(';')\n\n for (const cookie of cookies) {\n const [cookieKey, cookieValue] = cookie.trim().split('=')\n\n if (cookieKey === key) {\n return cookieValue as string;\n }\n }\n\n return ''\n}\n\nexport const formatDateToLocale = (date: string, locale: string): string => {\n if (typeof date !== 'string' || !date) {\n return date;\n }\n\n const dateAux = new Date(date);\n return new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: 'long',\n year: 'numeric'\n }).format(dateAux);\n}","import { _generateShaKey } from \"./utils\"\n\n/**\n * Makes an asynchronous RPC API call to the server.\n * @param method - The RPC method name to call\n * @param params - Optional parameters to pass to the method\n * @returns A Promise resolving to the response data of type T\n */\nexport const call = async<T = unknown>(method: string, params?: any): Promise<T> => {\n type result = {\n data: string,\n expireDate: Date,\n }\n\n const shaKey = await _generateShaKey(JSON.stringify({ method, params }))\n const cache = localStorage.getItem(shaKey)\n\n if (cache !== null) {\n const { data, expireDate } = JSON.parse(cache) as result\n\n if (new Date(expireDate) > new Date()) {\n return JSON.parse(data) as T\n } else {\n localStorage.removeItem(shaKey)\n }\n }\n\n const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/rpc`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ method, params }),\n credentials: 'include',\n });\n\n const json = await res.json();\n\n if (!res.ok) throw new Error(json.error || 'Unknown error');\n\n const today = new Date()\n const result: result = {\n data: JSON.stringify(json.data),\n expireDate: new Date(today.getTime() + 1000 * 60 * 60),\n }\n\n localStorage.setItem(shaKey, JSON.stringify(result))\n\n return json.data;\n}","import { DEFAULT_COOKIE_LIMIT } from \"@c-rex/constants\";\nimport { call } from \"./call\";\n\n/**\n * Fetches a cookie value from the server API in client-side code.\n * @param key - The key of the cookie to retrieve\n * @returns A Promise resolving to an object containing the key and value of the cookie\n */\nexport const getCookie = async (key: string): Promise<{ key: string, value: string | null }> => {\n const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/cookies?key=${key}`);\n\n if (!res.ok) {\n return { key: key, value: null };\n }\n const json = await res.json();\n\n return json;\n}\n\n/**\n * Sets a cookie value through the server API in client-side code.\n * @param key - The key of the cookie to set\n * @param value - The value to store in the cookie\n * @param maxAge - Optional maximum age of the cookie in seconds. Defaults to DEFAULT_COOKIE_LIMIT if not specified.\n * @returns A Promise that resolves when the cookie has been set\n */\nexport const setCookie = async (key: string, value: string, maxAge?: number): Promise<void> => {\n try {\n\n if (maxAge === undefined) {\n maxAge = DEFAULT_COOKIE_LIMIT;\n }\n\n await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/cookies`, {\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n key: key,\n value: value,\n maxAge: maxAge,\n }),\n });\n } catch (error) {\n call(\"CrexLogger.log\", {\n level: \"error\",\n message: `utils.setCookie error: ${error}`\n });\n }\n}\n\n","import { TreeOfContent } from \"@c-rex/interfaces\";\n\n/**\n * Generates breadcrumb items by recursively extracting active items and their active children from a TreeOfContent array.\n * @param treeOfContent - Array of TreeOfContent objects representing the content hierarchy\n * @returns A flattened array of active TreeOfContent items to be used as breadcrumbs\n */\nexport const generateBreadcrumbItems = (\n treeOfContent: TreeOfContent[],\n): TreeOfContent[] => {\n const result: TreeOfContent[] = [];\n\n treeOfContent.forEach((item) => {\n if (item.active) {\n const filteredChildren = generateBreadcrumbItems(item.children);\n result.push(item, ...filteredChildren);\n }\n });\n\n return result;\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges multiple class values into a single string using clsx and tailwind-merge.\n * Useful for conditionally applying Tailwind CSS classes.\n * @param inputs - Any number of class values (strings, objects, arrays, etc.)\n * @returns A merged string of class names optimized for Tailwind CSS\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { DirectoryNodes, DefaultCrexDirectories, TreeOfContent } from \"@c-rex/interfaces\";\nimport { call } from \"./call\";\n\ntype ReturnType = {\n rootNode: DirectoryNodes | null,\n result: TreeOfContent[],\n}\n\nconst itemCache = new Map<string, DirectoryNodes>();\n\nasync function getItemCached(id: string): Promise<DirectoryNodes> {\n if (itemCache.has(id)) return itemCache.get(id)!;\n\n const data = await call<DirectoryNodes>(\"DirectoryNodesService.getItem\", id);\n\n itemCache.set(id, data);\n\n return data;\n}\n\nexport const generateTreeOfContent = async (\n directoryNodes: DirectoryNodes[]\n): Promise<ReturnType> => {\n if (!directoryNodes?.length) return { rootNode: null, result: [] };\n\n let response = await getItemCached(directoryNodes[0].shortId);\n let result = await getChildrenInfo(response.childNodes);\n\n while (response.parents?.[0]) {\n if (!response.labels?.[0] || !response.informationUnits?.[0]) {\n return { rootNode: null, result };\n }\n\n const infoId = response.informationUnits[0].shortId;\n\n const parentNode: TreeOfContent = {\n active: true,\n label: response.labels[0].value,\n id: response.shortId,\n link: `/topics/${infoId}`,\n children: result,\n };\n\n response = await getItemCached(response.parents[0].shortId);\n result = await getChildrenInfo(response.childNodes, parentNode);\n }\n\n return { rootNode: response, result };\n};\n\nasync function getChildrenInfo(\n childNodes: DefaultCrexDirectories[] | undefined,\n childItem?: TreeOfContent\n): Promise<TreeOfContent[]> {\n if (!childNodes?.length) return [];\n\n const validNodes = childNodes.filter((n) => n.labels?.[0]);\n\n const responses = await Promise.all(\n validNodes.map((n) =>\n getItemCached(n.shortId).catch((err) => {\n console.error(\"Erro em\", n.shortId, err);\n return undefined;\n })\n )\n );\n\n return responses.reduce<TreeOfContent[]>((acc, resp, idx) => {\n if (!resp?.informationUnits?.[0]) return acc;\n\n const node = validNodes[idx];\n const treeItem: TreeOfContent = {\n active: false,\n label: node.labels![0].value,\n link: `/topics/${resp.informationUnits[0].shortId}`,\n id: node.shortId,\n children: [],\n };\n\n acc.push(node.shortId === childItem?.id ? childItem : treeItem);\n return acc;\n }, []);\n}\n","import { QueryParams } from '@c-rex/types';\n\n/**\n * Creates an array of parameter objects from a list of field values.\n * @param fieldsList - Array of field values to transform into parameter objects\n * @param key - The key to use for each parameter object (defaults to \"Fields\")\n * @returns An array of objects with key-value pairs\n */\nexport const createParams = (fieldsList: string[], key: string = \"Fields\") =>\n fieldsList.map((item) => ({\n key: key,\n value: item,\n }));\n\n/**\n * Generates a URL query string from an array of parameter objects.\n * @param params - Array of QueryParams objects containing key-value pairs\n * @returns A URL-encoded query string\n */\nexport const generateQueryParams = (params: QueryParams[]): string => {\n const queryParams = params\n .map(\n (param) =>\n `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`,\n )\n .join(\"&\");\n return queryParams;\n};\n","import { CREX_TOKEN_HEADER_KEY } from \"@c-rex/constants\";\nimport { call } from \"./call\";\nimport { getCookie } from \"./memory\";\n\nconst updateToken = async (): Promise<string | null> => {\n try {\n const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/token`, {\n method: 'POST',\n credentials: 'include',\n });\n\n const cookies = response.headers.get(\"set-cookie\");\n if (cookies === null) return null\n\n const aux = cookies.split(`${CREX_TOKEN_HEADER_KEY}=`);\n if (aux.length == 0) return null\n\n const token = aux[1].split(\";\")[0];\n if (token === undefined) throw new Error(\"Token is undefined\");\n\n return token;\n } catch (error) {\n call(\"CrexLogger.log\", {\n level: \"error\",\n message: `utils.updateToken error: ${error}`\n });\n return null\n }\n}\n\nexport const manageToken = async (): Promise<string | null> => {\n try {\n const hasToken = await getCookie(CREX_TOKEN_HEADER_KEY);\n\n let token = \"\";\n if (!hasToken || hasToken.value === null) {\n const tokenResult = await updateToken();\n\n if (tokenResult === null) throw new Error(\"Token is undefined\");\n\n token = tokenResult;\n } else {\n token = hasToken.value;\n }\n\n return token;\n } catch (error) {\n call(\"CrexLogger.log\", {\n level: \"error\",\n message: `utils.manageToken error: ${error}`\n });\n\n return null\n }\n}","import { FileRenditionType } from \"@c-rex/types\";\nimport { informationUnitsRenditions } from \"@c-rex/interfaces\";\n\ntype RenditionType = {\n filesToDownload: FileRenditionType[],\n filesToOpen: FileRenditionType[]\n}\nexport const getFileRenditions = ({ renditions }: { renditions: informationUnitsRenditions[] }): RenditionType => {\n if (renditions == undefined || renditions.length == 0) {\n return {\n filesToDownload: [],\n filesToOpen: [],\n };\n }\n\n const filteredRenditions = renditions.filter(\n (item) => item.format != \"application/xhtml+xml\" && item.format != \"application/json\" && item.format != \"application/llm+xml\"\n );\n\n if (filteredRenditions.length == 0 || filteredRenditions[0] == undefined) {\n return {\n filesToDownload: [],\n filesToOpen: [],\n };\n }\n\n const filesToDownload = filteredRenditions.map((item) => {\n const filteredLinks = item.links.filter((item) => item.rel == \"download\");\n return {\n format: item.format,\n link: filteredLinks[0].href,\n };\n });\n\n const filesToOpen = filteredRenditions.map((item) => {\n const filteredLinks = item.links.filter((item) => item.rel == \"view\");\n return {\n format: item.format,\n link: filteredLinks[0].href,\n };\n })\n\n return {\n filesToDownload: filesToDownload,\n filesToOpen: filesToOpen,\n }\n}"],"mappings":"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","names":["item"]}
1
+ {"version":3,"sources":["../src/index.ts","../../constants/src/index.ts","../src/utils.ts","../src/breadcrumbs.ts","../src/classMerge.ts","../src/call.ts","../src/treeOfContent.ts","../src/params.ts","../src/renditions.ts"],"sourcesContent":["export * from './utils';\nexport * from './breadcrumbs';\nexport * from './classMerge';\nexport * from './treeOfContent';\nexport * from './params';\nexport * from './renditions';\nexport * from './call';","export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n\nexport const DEVICE_OPTIONS = {\n MOBILE: \"mobile\",\n TABLET: \"tablet\",\n DESKTOP: \"desktop\",\n}\nexport const BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};","import { FLAGS_BY_LANG } from \"@c-rex/constants\";\nimport { AvailableVersionsInterface, informationUnitsResponseItem } from \"@c-rex/interfaces\";\n\nexport const _generateShaKey = (input: string): string => {\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n hash = (hash << 5) - hash + input.charCodeAt(i);\n hash |= 0;\n }\n return Math.abs(hash).toString(16);\n}\n\n/**\n * Retrieves the country code associated with a given language code.\n * @param lang - The language code to look up (e.g., \"en-US\")\n * @returns The corresponding country code, or the original language code if not found\n */\nexport const getCountryCodeByLang = (lang: string): string => {\n const mappedKeys = Object.keys(FLAGS_BY_LANG);\n\n if (!mappedKeys.includes(lang)) {\n return lang\n }\n\n type LangKey = keyof typeof FLAGS_BY_LANG;\n const country = FLAGS_BY_LANG[lang as LangKey]\n\n return country\n}\n\nexport const formatDateToLocale = (date: string, locale: string): string => {\n if (typeof date !== 'string' || !date) {\n return date;\n }\n\n const dateAux = new Date(date);\n return new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: 'long',\n year: 'numeric'\n }).format(dateAux);\n}\n\nexport const createAvailableVersionList = (\n versions: informationUnitsResponseItem[],\n articleLang: string,\n type: string\n): AvailableVersionsInterface[] => {\n\n const availableVersions = versions.map(item => {\n return {\n shortId: item.shortId,\n active: item.language === articleLang,\n lang: item.language,\n country: item.language.split(\"-\")[1],\n link: `/${type}/${item.shortId}`,\n }\n }).sort((a, b) => {\n if (a.lang < b.lang) return -1;\n if (a.lang > b.lang) return 1;\n return 0;\n }) as AvailableVersionsInterface[];\n\n return availableVersions;\n}","import { TreeOfContent } from \"@c-rex/interfaces\";\n\n/**\n * Generates breadcrumb items by recursively extracting active items and their active children from a TreeOfContent array.\n * @param treeOfContent - Array of TreeOfContent objects representing the content hierarchy\n * @returns A flattened array of active TreeOfContent items to be used as breadcrumbs\n */\nexport const generateBreadcrumbItems = (\n treeOfContent: TreeOfContent[],\n): TreeOfContent[] => {\n const result: TreeOfContent[] = [];\n\n treeOfContent.forEach((item) => {\n if (item.active) {\n const filteredChildren = generateBreadcrumbItems(item.children);\n result.push(item, ...filteredChildren);\n }\n });\n\n return result;\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges multiple class values into a single string using clsx and tailwind-merge.\n * Useful for conditionally applying Tailwind CSS classes.\n * @param inputs - Any number of class values (strings, objects, arrays, etc.)\n * @returns A merged string of class names optimized for Tailwind CSS\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { _generateShaKey } from \"./utils\"\n\n/**\n * Makes an asynchronous RPC API call to the server.\n * @param method - The RPC method name to call\n * @param params - Optional parameters to pass to the method\n * @returns A Promise resolving to the response data of type T\n */\nexport const call = async<T = unknown>(method: string, params?: any): Promise<T> => {\n type result = {\n data: string,\n expireDate: Date,\n }\n\n const shaKey = _generateShaKey(JSON.stringify({ method, params }))\n const cache = localStorage.getItem(shaKey)\n\n if (cache !== null) {\n const { data, expireDate } = JSON.parse(cache) as result\n\n if (new Date(expireDate) > new Date()) {\n return JSON.parse(data) as T\n } else {\n localStorage.removeItem(shaKey)\n }\n }\n\n const res = await fetch(`/api/rpc`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ method, params }),\n credentials: 'include',\n });\n\n const json = await res.json();\n\n if (!res.ok) throw new Error(json.error || 'Unknown error');\n\n const today = new Date()\n const result: result = {\n data: JSON.stringify(json.data),\n expireDate: new Date(today.getTime() + 1000 * 60 * 60),\n }\n\n localStorage.setItem(shaKey, JSON.stringify(result))\n\n return json.data;\n}","import { DirectoryNodes, DefaultCrexDirectories, TreeOfContent } from \"@c-rex/interfaces\";\nimport { call } from \"./call\";\n\n\nconst itemCache = new Map<string, DirectoryNodes>();\n\nasync function getItemCached(id: string): Promise<DirectoryNodes> {\n if (itemCache.has(id)) return itemCache.get(id)!;\n\n const data = await call<DirectoryNodes>(\"DirectoryNodesService.getItem\", id);\n\n itemCache.set(id, data);\n\n return data;\n}\n\nexport const generateTreeOfContent = async (\n directoryNodes: DirectoryNodes[]\n): Promise<TreeOfContent[]> => {\n if (!directoryNodes?.length) return [];\n\n let response = await getItemCached(directoryNodes[0].shortId);\n let result = await getChildrenInfo(response.childNodes);\n\n while (response.parents?.[0]) {\n if (!response.labels?.[0] || !response.informationUnits?.[0]) {\n return result;\n }\n\n const infoId = response.informationUnits[0].shortId;\n\n const parentNode: TreeOfContent = {\n active: true,\n label: response.labels[0].value,\n id: response.shortId,\n link: `/topics/${infoId}`,\n children: result,\n };\n\n response = await getItemCached(response.parents[0].shortId);\n result = await getChildrenInfo(response.childNodes, parentNode);\n }\n\n return result;\n};\n\nasync function getChildrenInfo(\n childNodes: DefaultCrexDirectories[] | undefined,\n childItem?: TreeOfContent\n): Promise<TreeOfContent[]> {\n if (!childNodes?.length) return [];\n\n const validNodes = childNodes.filter((n) => n.labels?.[0]);\n\n const responses = await Promise.all(\n validNodes.map((n) =>\n getItemCached(n.shortId).catch((err) => {\n console.error(\"Erro em\", n.shortId, err);\n return undefined;\n })\n )\n );\n\n return responses.reduce<TreeOfContent[]>((acc, resp, idx) => {\n if (!resp?.informationUnits?.[0]) return acc;\n\n const node = validNodes[idx];\n const treeItem: TreeOfContent = {\n active: false,\n label: node.labels![0].value,\n link: `/topics/${resp.informationUnits[0].shortId}`,\n id: node.shortId,\n children: [],\n };\n\n acc.push(node.shortId === childItem?.id ? childItem : treeItem);\n return acc;\n }, []);\n}\n","import { QueryParams } from '@c-rex/types';\n\n/**\n * Creates an array of parameter objects from a list of field values.\n * @param fieldsList - Array of field values to transform into parameter objects\n * @param key - The key to use for each parameter object (defaults to \"Fields\")\n * @returns An array of objects with key-value pairs\n */\nexport const createParams = (fieldsList: string[], key: string = \"Fields\") =>\n fieldsList.map((item) => ({\n key: key,\n value: item,\n }));\n\n/**\n * Generates a URL query string from an array of parameter objects.\n * @param params - Array of QueryParams objects containing key-value pairs\n * @returns A URL-encoded query string\n */\nexport const generateQueryParams = (params: QueryParams[]): string => {\n const queryParams = params\n .map((param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`)\n .join(\"&\");\n return queryParams;\n};\n","import { informationUnitsRenditions } from \"@c-rex/interfaces\";\nimport { DocumentsType } from \"@c-rex/types\";\n\n\nexport const getFileRenditions = ({ renditions }: { renditions: informationUnitsRenditions[] }): DocumentsType => {\n if (renditions == undefined || renditions.length == 0) {\n return {};\n }\n\n const filteredRenditions = renditions.filter(\n (item) => item.format != \"application/xhtml+xml\" && item.format != \"application/json\" && item.format != \"application/llm+xml\"\n );\n\n if (filteredRenditions.length == 0 || filteredRenditions[0] == undefined) {\n return {};\n }\n\n const result: {\n [key: string]: {\n view: string;\n download: string;\n }\n } = {}\n\n filteredRenditions.forEach((item) => {\n const key = item.format\n\n if (result[key] == undefined) {\n result[key] = {\n view: \"\",\n download: \"\"\n }\n }\n\n result[key].download = item.links.filter((link) => link.rel == \"download\")[0]?.href\n result[key].view = item.links.filter((link) => link.rel == \"view\")[0]?.href\n })\n\n return result\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC4CO,IAAM,gBAAgB;AAAA,EACzB,MAAM;AAAA,EACN,MAAM;AACV;AA6BO,IAAM,uBAAuB,IAAI,KAAK,KAAK,KAAK;;;ACzEhD,IAAM,kBAAkB,CAAC,UAA0B;AACtD,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YAAQ,QAAQ,KAAK,OAAO,MAAM,WAAW,CAAC;AAC9C,YAAQ;AAAA,EACZ;AACA,SAAO,KAAK,IAAI,IAAI,EAAE,SAAS,EAAE;AACrC;AAOO,IAAM,uBAAuB,CAAC,SAAyB;AAC1D,QAAM,aAAa,OAAO,KAAK,aAAa;AAE5C,MAAI,CAAC,WAAW,SAAS,IAAI,GAAG;AAC5B,WAAO;AAAA,EACX;AAGA,QAAM,UAAU,cAAc,IAAe;AAE7C,SAAO;AACX;AAEO,IAAM,qBAAqB,CAAC,MAAc,WAA2B;AACxE,MAAI,OAAO,SAAS,YAAY,CAAC,MAAM;AACnC,WAAO;AAAA,EACX;AAEA,QAAM,UAAU,IAAI,KAAK,IAAI;AAC7B,SAAO,IAAI,KAAK,eAAe,QAAQ;AAAA,IACnC,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,EACV,CAAC,EAAE,OAAO,OAAO;AACrB;AAEO,IAAM,6BAA6B,CACtC,UACA,aACA,SAC+B;AAE/B,QAAM,oBAAoB,SAAS,IAAI,UAAQ;AAC3C,WAAO;AAAA,MACH,SAAS,KAAK;AAAA,MACd,QAAQ,KAAK,aAAa;AAAA,MAC1B,MAAM,KAAK;AAAA,MACX,SAAS,KAAK,SAAS,MAAM,GAAG,EAAE,CAAC;AAAA,MACnC,MAAM,IAAI,IAAI,IAAI,KAAK,OAAO;AAAA,IAClC;AAAA,EACJ,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM;AACd,QAAI,EAAE,OAAO,EAAE,KAAM,QAAO;AAC5B,QAAI,EAAE,OAAO,EAAE,KAAM,QAAO;AAC5B,WAAO;AAAA,EACX,CAAC;AAED,SAAO;AACX;;;ACzDO,IAAM,0BAA0B,CACnC,kBACkB;AAClB,QAAM,SAA0B,CAAC;AAEjC,gBAAc,QAAQ,CAAC,SAAS;AAC5B,QAAI,KAAK,QAAQ;AACb,YAAM,mBAAmB,wBAAwB,KAAK,QAAQ;AAC9D,aAAO,KAAK,MAAM,GAAG,gBAAgB;AAAA,IACzC;AAAA,EACJ,CAAC;AAED,SAAO;AACX;;;ACpBA,kBAAsC;AACtC,4BAAwB;AAQjB,SAAS,MAAM,QAAsB;AACxC,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC/B;;;ACHO,IAAM,OAAO,OAAmB,QAAgB,WAA6B;AAMhF,QAAM,SAAS,gBAAgB,KAAK,UAAU,EAAE,QAAQ,OAAO,CAAC,CAAC;AACjE,QAAM,QAAQ,aAAa,QAAQ,MAAM;AAEzC,MAAI,UAAU,MAAM;AAChB,UAAM,EAAE,MAAM,WAAW,IAAI,KAAK,MAAM,KAAK;AAE7C,QAAI,IAAI,KAAK,UAAU,IAAI,oBAAI,KAAK,GAAG;AACnC,aAAO,KAAK,MAAM,IAAI;AAAA,IAC1B,OAAO;AACH,mBAAa,WAAW,MAAM;AAAA,IAClC;AAAA,EACJ;AAEA,QAAM,MAAM,MAAM,MAAM,YAAY;AAAA,IAChC,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,IAC9C,MAAM,KAAK,UAAU,EAAE,QAAQ,OAAO,CAAC;AAAA,IACvC,aAAa;AAAA,EACjB,CAAC;AAED,QAAM,OAAO,MAAM,IAAI,KAAK;AAE5B,MAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,KAAK,SAAS,eAAe;AAE1D,QAAM,QAAQ,oBAAI,KAAK;AACvB,QAAM,SAAiB;AAAA,IACnB,MAAM,KAAK,UAAU,KAAK,IAAI;AAAA,IAC9B,YAAY,IAAI,KAAK,MAAM,QAAQ,IAAI,MAAO,KAAK,EAAE;AAAA,EACzD;AAEA,eAAa,QAAQ,QAAQ,KAAK,UAAU,MAAM,CAAC;AAEnD,SAAO,KAAK;AAChB;;;AC3CA,IAAM,YAAY,oBAAI,IAA4B;AAElD,eAAe,cAAc,IAAqC;AAC9D,MAAI,UAAU,IAAI,EAAE,EAAG,QAAO,UAAU,IAAI,EAAE;AAE9C,QAAM,OAAO,MAAM,KAAqB,iCAAiC,EAAE;AAE3E,YAAU,IAAI,IAAI,IAAI;AAEtB,SAAO;AACX;AAEO,IAAM,wBAAwB,OACjC,mBAC2B;AAC3B,MAAI,CAAC,gBAAgB,OAAQ,QAAO,CAAC;AAErC,MAAI,WAAW,MAAM,cAAc,eAAe,CAAC,EAAE,OAAO;AAC5D,MAAI,SAAS,MAAM,gBAAgB,SAAS,UAAU;AAEtD,SAAO,SAAS,UAAU,CAAC,GAAG;AAC1B,QAAI,CAAC,SAAS,SAAS,CAAC,KAAK,CAAC,SAAS,mBAAmB,CAAC,GAAG;AAC1D,aAAO;AAAA,IACX;AAEA,UAAM,SAAS,SAAS,iBAAiB,CAAC,EAAE;AAE5C,UAAM,aAA4B;AAAA,MAC9B,QAAQ;AAAA,MACR,OAAO,SAAS,OAAO,CAAC,EAAE;AAAA,MAC1B,IAAI,SAAS;AAAA,MACb,MAAM,WAAW,MAAM;AAAA,MACvB,UAAU;AAAA,IACd;AAEA,eAAW,MAAM,cAAc,SAAS,QAAQ,CAAC,EAAE,OAAO;AAC1D,aAAS,MAAM,gBAAgB,SAAS,YAAY,UAAU;AAAA,EAClE;AAEA,SAAO;AACX;AAEA,eAAe,gBACX,YACA,WACwB;AACxB,MAAI,CAAC,YAAY,OAAQ,QAAO,CAAC;AAEjC,QAAM,aAAa,WAAW,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEzD,QAAM,YAAY,MAAM,QAAQ;AAAA,IAC5B,WAAW;AAAA,MAAI,CAAC,MACZ,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ;AACpC,gBAAQ,MAAM,WAAW,EAAE,SAAS,GAAG;AACvC,eAAO;AAAA,MACX,CAAC;AAAA,IACL;AAAA,EACJ;AAEA,SAAO,UAAU,OAAwB,CAAC,KAAK,MAAM,QAAQ;AACzD,QAAI,CAAC,MAAM,mBAAmB,CAAC,EAAG,QAAO;AAEzC,UAAM,OAAO,WAAW,GAAG;AAC3B,UAAM,WAA0B;AAAA,MAC5B,QAAQ;AAAA,MACR,OAAO,KAAK,OAAQ,CAAC,EAAE;AAAA,MACvB,MAAM,WAAW,KAAK,iBAAiB,CAAC,EAAE,OAAO;AAAA,MACjD,IAAI,KAAK;AAAA,MACT,UAAU,CAAC;AAAA,IACf;AAEA,QAAI,KAAK,KAAK,YAAY,WAAW,KAAK,YAAY,QAAQ;AAC9D,WAAO;AAAA,EACX,GAAG,CAAC,CAAC;AACT;;;ACtEO,IAAM,eAAe,CAAC,YAAsB,MAAc,aAC7D,WAAW,IAAI,CAAC,UAAU;AAAA,EACtB;AAAA,EACA,OAAO;AACX,EAAE;AAOC,IAAM,sBAAsB,CAAC,WAAkC;AAClE,QAAM,cAAc,OACf,IAAI,CAAC,UAAU,GAAG,mBAAmB,MAAM,GAAG,CAAC,IAAI,mBAAmB,MAAM,KAAK,CAAC,EAAE,EACpF,KAAK,GAAG;AACb,SAAO;AACX;;;ACpBO,IAAM,oBAAoB,CAAC,EAAE,WAAW,MAAmE;AAC9G,MAAI,cAAc,UAAa,WAAW,UAAU,GAAG;AACnD,WAAO,CAAC;AAAA,EACZ;AAEA,QAAM,qBAAqB,WAAW;AAAA,IAClC,CAAC,SAAS,KAAK,UAAU,2BAA2B,KAAK,UAAU,sBAAsB,KAAK,UAAU;AAAA,EAC5G;AAEA,MAAI,mBAAmB,UAAU,KAAK,mBAAmB,CAAC,KAAK,QAAW;AACtE,WAAO,CAAC;AAAA,EACZ;AAEA,QAAM,SAKF,CAAC;AAEL,qBAAmB,QAAQ,CAAC,SAAS;AACjC,UAAM,MAAM,KAAK;AAEjB,QAAI,OAAO,GAAG,KAAK,QAAW;AAC1B,aAAO,GAAG,IAAI;AAAA,QACV,MAAM;AAAA,QACN,UAAU;AAAA,MACd;AAAA,IACJ;AAEA,WAAO,GAAG,EAAE,WAAW,KAAK,MAAM,OAAO,CAAC,SAAS,KAAK,OAAO,UAAU,EAAE,CAAC,GAAG;AAC/E,WAAO,GAAG,EAAE,OAAO,KAAK,MAAM,OAAO,CAAC,SAAS,KAAK,OAAO,MAAM,EAAE,CAAC,GAAG;AAAA,EAC3E,CAAC;AAED,SAAO;AACX;","names":[]}
package/dist/index.mjs CHANGED
@@ -4,16 +4,15 @@ var FLAGS_BY_LANG = {
4
4
  "de": "DE"
5
5
  };
6
6
  var DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1e3;
7
- var CREX_TOKEN_HEADER_KEY = "crex-token";
8
7
 
9
8
  // src/utils.ts
10
- var _generateShaKey = async (input) => {
11
- const encoder = new TextEncoder();
12
- const data = encoder.encode(input);
13
- const hashBuffer = await crypto.subtle.digest("SHA-1", data);
14
- const hashArray = Array.from(new Uint8Array(hashBuffer));
15
- const base64url = btoa(String.fromCharCode(...hashArray)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
16
- return base64url.slice(0, 12);
9
+ var _generateShaKey = (input) => {
10
+ let hash = 0;
11
+ for (let i = 0; i < input.length; i++) {
12
+ hash = (hash << 5) - hash + input.charCodeAt(i);
13
+ hash |= 0;
14
+ }
15
+ return Math.abs(hash).toString(16);
17
16
  };
18
17
  var getCountryCodeByLang = (lang) => {
19
18
  const mappedKeys = Object.keys(FLAGS_BY_LANG);
@@ -23,16 +22,6 @@ var getCountryCodeByLang = (lang) => {
23
22
  const country = FLAGS_BY_LANG[lang];
24
23
  return country;
25
24
  };
26
- var getFromCookieString = (cookieString, key) => {
27
- const cookies = cookieString.split(";");
28
- for (const cookie of cookies) {
29
- const [cookieKey, cookieValue] = cookie.trim().split("=");
30
- if (cookieKey === key) {
31
- return cookieValue;
32
- }
33
- }
34
- return "";
35
- };
36
25
  var formatDateToLocale = (date, locale) => {
37
26
  if (typeof date !== "string" || !date) {
38
27
  return date;
@@ -44,10 +33,45 @@ var formatDateToLocale = (date, locale) => {
44
33
  year: "numeric"
45
34
  }).format(dateAux);
46
35
  };
36
+ var createAvailableVersionList = (versions, articleLang, type) => {
37
+ const availableVersions = versions.map((item) => {
38
+ return {
39
+ shortId: item.shortId,
40
+ active: item.language === articleLang,
41
+ lang: item.language,
42
+ country: item.language.split("-")[1],
43
+ link: `/${type}/${item.shortId}`
44
+ };
45
+ }).sort((a, b) => {
46
+ if (a.lang < b.lang) return -1;
47
+ if (a.lang > b.lang) return 1;
48
+ return 0;
49
+ });
50
+ return availableVersions;
51
+ };
52
+
53
+ // src/breadcrumbs.ts
54
+ var generateBreadcrumbItems = (treeOfContent) => {
55
+ const result = [];
56
+ treeOfContent.forEach((item) => {
57
+ if (item.active) {
58
+ const filteredChildren = generateBreadcrumbItems(item.children);
59
+ result.push(item, ...filteredChildren);
60
+ }
61
+ });
62
+ return result;
63
+ };
64
+
65
+ // src/classMerge.ts
66
+ import { clsx } from "clsx";
67
+ import { twMerge } from "tailwind-merge";
68
+ function cn(...inputs) {
69
+ return twMerge(clsx(inputs));
70
+ }
47
71
 
48
72
  // src/call.ts
49
73
  var call = async (method, params) => {
50
- const shaKey = await _generateShaKey(JSON.stringify({ method, params }));
74
+ const shaKey = _generateShaKey(JSON.stringify({ method, params }));
51
75
  const cache = localStorage.getItem(shaKey);
52
76
  if (cache !== null) {
53
77
  const { data, expireDate } = JSON.parse(cache);
@@ -57,7 +81,7 @@ var call = async (method, params) => {
57
81
  localStorage.removeItem(shaKey);
58
82
  }
59
83
  }
60
- const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/rpc`, {
84
+ const res = await fetch(`/api/rpc`, {
61
85
  method: "POST",
62
86
  headers: { "Content-Type": "application/json" },
63
87
  body: JSON.stringify({ method, params }),
@@ -74,56 +98,6 @@ var call = async (method, params) => {
74
98
  return json.data;
75
99
  };
76
100
 
77
- // src/memory.ts
78
- var getCookie = async (key) => {
79
- const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/cookies?key=${key}`);
80
- if (!res.ok) {
81
- return { key, value: null };
82
- }
83
- const json = await res.json();
84
- return json;
85
- };
86
- var setCookie = async (key, value, maxAge) => {
87
- try {
88
- if (maxAge === void 0) {
89
- maxAge = DEFAULT_COOKIE_LIMIT;
90
- }
91
- await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/cookies`, {
92
- method: "POST",
93
- credentials: "include",
94
- body: JSON.stringify({
95
- key,
96
- value,
97
- maxAge
98
- })
99
- });
100
- } catch (error) {
101
- call("CrexLogger.log", {
102
- level: "error",
103
- message: `utils.setCookie error: ${error}`
104
- });
105
- }
106
- };
107
-
108
- // src/breadcrumbs.ts
109
- var generateBreadcrumbItems = (treeOfContent) => {
110
- const result = [];
111
- treeOfContent.forEach((item) => {
112
- if (item.active) {
113
- const filteredChildren = generateBreadcrumbItems(item.children);
114
- result.push(item, ...filteredChildren);
115
- }
116
- });
117
- return result;
118
- };
119
-
120
- // src/classMerge.ts
121
- import { clsx } from "clsx";
122
- import { twMerge } from "tailwind-merge";
123
- function cn(...inputs) {
124
- return twMerge(clsx(inputs));
125
- }
126
-
127
101
  // src/treeOfContent.ts
128
102
  var itemCache = /* @__PURE__ */ new Map();
129
103
  async function getItemCached(id) {
@@ -133,12 +107,12 @@ async function getItemCached(id) {
133
107
  return data;
134
108
  }
135
109
  var generateTreeOfContent = async (directoryNodes) => {
136
- if (!directoryNodes?.length) return { rootNode: null, result: [] };
110
+ if (!directoryNodes?.length) return [];
137
111
  let response = await getItemCached(directoryNodes[0].shortId);
138
112
  let result = await getChildrenInfo(response.childNodes);
139
113
  while (response.parents?.[0]) {
140
114
  if (!response.labels?.[0] || !response.informationUnits?.[0]) {
141
- return { rootNode: null, result };
115
+ return result;
142
116
  }
143
117
  const infoId = response.informationUnits[0].shortId;
144
118
  const parentNode = {
@@ -151,7 +125,7 @@ var generateTreeOfContent = async (directoryNodes) => {
151
125
  response = await getItemCached(response.parents[0].shortId);
152
126
  result = await getChildrenInfo(response.childNodes, parentNode);
153
127
  }
154
- return { rootNode: response, result };
128
+ return result;
155
129
  };
156
130
  async function getChildrenInfo(childNodes, childItem) {
157
131
  if (!childNodes?.length) return [];
@@ -185,105 +159,46 @@ var createParams = (fieldsList, key = "Fields") => fieldsList.map((item) => ({
185
159
  value: item
186
160
  }));
187
161
  var generateQueryParams = (params) => {
188
- const queryParams = params.map(
189
- (param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`
190
- ).join("&");
162
+ const queryParams = params.map((param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`).join("&");
191
163
  return queryParams;
192
164
  };
193
165
 
194
- // src/token.ts
195
- var updateToken = async () => {
196
- try {
197
- const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/token`, {
198
- method: "POST",
199
- credentials: "include"
200
- });
201
- const cookies = response.headers.get("set-cookie");
202
- if (cookies === null) return null;
203
- const aux = cookies.split(`${CREX_TOKEN_HEADER_KEY}=`);
204
- if (aux.length == 0) return null;
205
- const token = aux[1].split(";")[0];
206
- if (token === void 0) throw new Error("Token is undefined");
207
- return token;
208
- } catch (error) {
209
- call("CrexLogger.log", {
210
- level: "error",
211
- message: `utils.updateToken error: ${error}`
212
- });
213
- return null;
214
- }
215
- };
216
- var manageToken = async () => {
217
- try {
218
- const hasToken = await getCookie(CREX_TOKEN_HEADER_KEY);
219
- let token = "";
220
- if (!hasToken || hasToken.value === null) {
221
- const tokenResult = await updateToken();
222
- if (tokenResult === null) throw new Error("Token is undefined");
223
- token = tokenResult;
224
- } else {
225
- token = hasToken.value;
226
- }
227
- return token;
228
- } catch (error) {
229
- call("CrexLogger.log", {
230
- level: "error",
231
- message: `utils.manageToken error: ${error}`
232
- });
233
- return null;
234
- }
235
- };
236
-
237
166
  // src/renditions.ts
238
167
  var getFileRenditions = ({ renditions }) => {
239
168
  if (renditions == void 0 || renditions.length == 0) {
240
- return {
241
- filesToDownload: [],
242
- filesToOpen: []
243
- };
169
+ return {};
244
170
  }
245
171
  const filteredRenditions = renditions.filter(
246
172
  (item) => item.format != "application/xhtml+xml" && item.format != "application/json" && item.format != "application/llm+xml"
247
173
  );
248
174
  if (filteredRenditions.length == 0 || filteredRenditions[0] == void 0) {
249
- return {
250
- filesToDownload: [],
251
- filesToOpen: []
252
- };
175
+ return {};
253
176
  }
254
- const filesToDownload = filteredRenditions.map((item) => {
255
- const filteredLinks = item.links.filter((item2) => item2.rel == "download");
256
- return {
257
- format: item.format,
258
- link: filteredLinks[0].href
259
- };
260
- });
261
- const filesToOpen = filteredRenditions.map((item) => {
262
- const filteredLinks = item.links.filter((item2) => item2.rel == "view");
263
- return {
264
- format: item.format,
265
- link: filteredLinks[0].href
266
- };
177
+ const result = {};
178
+ filteredRenditions.forEach((item) => {
179
+ const key = item.format;
180
+ if (result[key] == void 0) {
181
+ result[key] = {
182
+ view: "",
183
+ download: ""
184
+ };
185
+ }
186
+ result[key].download = item.links.filter((link) => link.rel == "download")[0]?.href;
187
+ result[key].view = item.links.filter((link) => link.rel == "view")[0]?.href;
267
188
  });
268
- return {
269
- filesToDownload,
270
- filesToOpen
271
- };
189
+ return result;
272
190
  };
273
191
  export {
274
192
  _generateShaKey,
275
193
  call,
276
194
  cn,
195
+ createAvailableVersionList,
277
196
  createParams,
278
197
  formatDateToLocale,
279
198
  generateBreadcrumbItems,
280
199
  generateQueryParams,
281
200
  generateTreeOfContent,
282
- getCookie,
283
201
  getCountryCodeByLang,
284
- getFileRenditions,
285
- getFromCookieString,
286
- manageToken,
287
- setCookie
202
+ getFileRenditions
288
203
  };
289
204
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../constants/src/index.ts","../src/utils.ts","../src/call.ts","../src/memory.ts","../src/breadcrumbs.ts","../src/classMerge.ts","../src/treeOfContent.ts","../src/params.ts","../src/token.ts","../src/renditions.ts"],"sourcesContent":["export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n","import { FLAGS_BY_LANG } from \"@c-rex/constants\";\n\nexport const _generateShaKey = async (input: string): Promise<string> => {\n const encoder = new TextEncoder();\n const data = encoder.encode(input);\n const hashBuffer = await crypto.subtle.digest('SHA-1', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const base64url = btoa(String.fromCharCode(...hashArray))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n\n return base64url.slice(0, 12);\n}\n\n/**\n * Retrieves the country code associated with a given language code.\n * @param lang - The language code to look up (e.g., \"en-US\")\n * @returns The corresponding country code, or the original language code if not found\n */\nexport const getCountryCodeByLang = (lang: string): string => {\n const mappedKeys = Object.keys(FLAGS_BY_LANG);\n\n if (!mappedKeys.includes(lang)) {\n return lang\n }\n\n type LangKey = keyof typeof FLAGS_BY_LANG;\n const country = FLAGS_BY_LANG[lang as LangKey]\n\n return country\n}\n\nexport const getFromCookieString = (cookieString: string, key: string): string => {\n const cookies = cookieString.split(';')\n\n for (const cookie of cookies) {\n const [cookieKey, cookieValue] = cookie.trim().split('=')\n\n if (cookieKey === key) {\n return cookieValue as string;\n }\n }\n\n return ''\n}\n\nexport const formatDateToLocale = (date: string, locale: string): string => {\n if (typeof date !== 'string' || !date) {\n return date;\n }\n\n const dateAux = new Date(date);\n return new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: 'long',\n year: 'numeric'\n }).format(dateAux);\n}","import { _generateShaKey } from \"./utils\"\n\n/**\n * Makes an asynchronous RPC API call to the server.\n * @param method - The RPC method name to call\n * @param params - Optional parameters to pass to the method\n * @returns A Promise resolving to the response data of type T\n */\nexport const call = async<T = unknown>(method: string, params?: any): Promise<T> => {\n type result = {\n data: string,\n expireDate: Date,\n }\n\n const shaKey = await _generateShaKey(JSON.stringify({ method, params }))\n const cache = localStorage.getItem(shaKey)\n\n if (cache !== null) {\n const { data, expireDate } = JSON.parse(cache) as result\n\n if (new Date(expireDate) > new Date()) {\n return JSON.parse(data) as T\n } else {\n localStorage.removeItem(shaKey)\n }\n }\n\n const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/rpc`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ method, params }),\n credentials: 'include',\n });\n\n const json = await res.json();\n\n if (!res.ok) throw new Error(json.error || 'Unknown error');\n\n const today = new Date()\n const result: result = {\n data: JSON.stringify(json.data),\n expireDate: new Date(today.getTime() + 1000 * 60 * 60),\n }\n\n localStorage.setItem(shaKey, JSON.stringify(result))\n\n return json.data;\n}","import { DEFAULT_COOKIE_LIMIT } from \"@c-rex/constants\";\nimport { call } from \"./call\";\n\n/**\n * Fetches a cookie value from the server API in client-side code.\n * @param key - The key of the cookie to retrieve\n * @returns A Promise resolving to an object containing the key and value of the cookie\n */\nexport const getCookie = async (key: string): Promise<{ key: string, value: string | null }> => {\n const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/cookies?key=${key}`);\n\n if (!res.ok) {\n return { key: key, value: null };\n }\n const json = await res.json();\n\n return json;\n}\n\n/**\n * Sets a cookie value through the server API in client-side code.\n * @param key - The key of the cookie to set\n * @param value - The value to store in the cookie\n * @param maxAge - Optional maximum age of the cookie in seconds. Defaults to DEFAULT_COOKIE_LIMIT if not specified.\n * @returns A Promise that resolves when the cookie has been set\n */\nexport const setCookie = async (key: string, value: string, maxAge?: number): Promise<void> => {\n try {\n\n if (maxAge === undefined) {\n maxAge = DEFAULT_COOKIE_LIMIT;\n }\n\n await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/cookies`, {\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n key: key,\n value: value,\n maxAge: maxAge,\n }),\n });\n } catch (error) {\n call(\"CrexLogger.log\", {\n level: \"error\",\n message: `utils.setCookie error: ${error}`\n });\n }\n}\n\n","import { TreeOfContent } from \"@c-rex/interfaces\";\n\n/**\n * Generates breadcrumb items by recursively extracting active items and their active children from a TreeOfContent array.\n * @param treeOfContent - Array of TreeOfContent objects representing the content hierarchy\n * @returns A flattened array of active TreeOfContent items to be used as breadcrumbs\n */\nexport const generateBreadcrumbItems = (\n treeOfContent: TreeOfContent[],\n): TreeOfContent[] => {\n const result: TreeOfContent[] = [];\n\n treeOfContent.forEach((item) => {\n if (item.active) {\n const filteredChildren = generateBreadcrumbItems(item.children);\n result.push(item, ...filteredChildren);\n }\n });\n\n return result;\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges multiple class values into a single string using clsx and tailwind-merge.\n * Useful for conditionally applying Tailwind CSS classes.\n * @param inputs - Any number of class values (strings, objects, arrays, etc.)\n * @returns A merged string of class names optimized for Tailwind CSS\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { DirectoryNodes, DefaultCrexDirectories, TreeOfContent } from \"@c-rex/interfaces\";\nimport { call } from \"./call\";\n\ntype ReturnType = {\n rootNode: DirectoryNodes | null,\n result: TreeOfContent[],\n}\n\nconst itemCache = new Map<string, DirectoryNodes>();\n\nasync function getItemCached(id: string): Promise<DirectoryNodes> {\n if (itemCache.has(id)) return itemCache.get(id)!;\n\n const data = await call<DirectoryNodes>(\"DirectoryNodesService.getItem\", id);\n\n itemCache.set(id, data);\n\n return data;\n}\n\nexport const generateTreeOfContent = async (\n directoryNodes: DirectoryNodes[]\n): Promise<ReturnType> => {\n if (!directoryNodes?.length) return { rootNode: null, result: [] };\n\n let response = await getItemCached(directoryNodes[0].shortId);\n let result = await getChildrenInfo(response.childNodes);\n\n while (response.parents?.[0]) {\n if (!response.labels?.[0] || !response.informationUnits?.[0]) {\n return { rootNode: null, result };\n }\n\n const infoId = response.informationUnits[0].shortId;\n\n const parentNode: TreeOfContent = {\n active: true,\n label: response.labels[0].value,\n id: response.shortId,\n link: `/topics/${infoId}`,\n children: result,\n };\n\n response = await getItemCached(response.parents[0].shortId);\n result = await getChildrenInfo(response.childNodes, parentNode);\n }\n\n return { rootNode: response, result };\n};\n\nasync function getChildrenInfo(\n childNodes: DefaultCrexDirectories[] | undefined,\n childItem?: TreeOfContent\n): Promise<TreeOfContent[]> {\n if (!childNodes?.length) return [];\n\n const validNodes = childNodes.filter((n) => n.labels?.[0]);\n\n const responses = await Promise.all(\n validNodes.map((n) =>\n getItemCached(n.shortId).catch((err) => {\n console.error(\"Erro em\", n.shortId, err);\n return undefined;\n })\n )\n );\n\n return responses.reduce<TreeOfContent[]>((acc, resp, idx) => {\n if (!resp?.informationUnits?.[0]) return acc;\n\n const node = validNodes[idx];\n const treeItem: TreeOfContent = {\n active: false,\n label: node.labels![0].value,\n link: `/topics/${resp.informationUnits[0].shortId}`,\n id: node.shortId,\n children: [],\n };\n\n acc.push(node.shortId === childItem?.id ? childItem : treeItem);\n return acc;\n }, []);\n}\n","import { QueryParams } from '@c-rex/types';\n\n/**\n * Creates an array of parameter objects from a list of field values.\n * @param fieldsList - Array of field values to transform into parameter objects\n * @param key - The key to use for each parameter object (defaults to \"Fields\")\n * @returns An array of objects with key-value pairs\n */\nexport const createParams = (fieldsList: string[], key: string = \"Fields\") =>\n fieldsList.map((item) => ({\n key: key,\n value: item,\n }));\n\n/**\n * Generates a URL query string from an array of parameter objects.\n * @param params - Array of QueryParams objects containing key-value pairs\n * @returns A URL-encoded query string\n */\nexport const generateQueryParams = (params: QueryParams[]): string => {\n const queryParams = params\n .map(\n (param) =>\n `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`,\n )\n .join(\"&\");\n return queryParams;\n};\n","import { CREX_TOKEN_HEADER_KEY } from \"@c-rex/constants\";\nimport { call } from \"./call\";\nimport { getCookie } from \"./memory\";\n\nconst updateToken = async (): Promise<string | null> => {\n try {\n const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/token`, {\n method: 'POST',\n credentials: 'include',\n });\n\n const cookies = response.headers.get(\"set-cookie\");\n if (cookies === null) return null\n\n const aux = cookies.split(`${CREX_TOKEN_HEADER_KEY}=`);\n if (aux.length == 0) return null\n\n const token = aux[1].split(\";\")[0];\n if (token === undefined) throw new Error(\"Token is undefined\");\n\n return token;\n } catch (error) {\n call(\"CrexLogger.log\", {\n level: \"error\",\n message: `utils.updateToken error: ${error}`\n });\n return null\n }\n}\n\nexport const manageToken = async (): Promise<string | null> => {\n try {\n const hasToken = await getCookie(CREX_TOKEN_HEADER_KEY);\n\n let token = \"\";\n if (!hasToken || hasToken.value === null) {\n const tokenResult = await updateToken();\n\n if (tokenResult === null) throw new Error(\"Token is undefined\");\n\n token = tokenResult;\n } else {\n token = hasToken.value;\n }\n\n return token;\n } catch (error) {\n call(\"CrexLogger.log\", {\n level: \"error\",\n message: `utils.manageToken error: ${error}`\n });\n\n return null\n }\n}","import { FileRenditionType } from \"@c-rex/types\";\nimport { informationUnitsRenditions } from \"@c-rex/interfaces\";\n\ntype RenditionType = {\n filesToDownload: FileRenditionType[],\n filesToOpen: FileRenditionType[]\n}\nexport const getFileRenditions = ({ renditions }: { renditions: informationUnitsRenditions[] }): RenditionType => {\n if (renditions == undefined || renditions.length == 0) {\n return {\n filesToDownload: [],\n filesToOpen: [],\n };\n }\n\n const filteredRenditions = renditions.filter(\n (item) => item.format != \"application/xhtml+xml\" && item.format != \"application/json\" && item.format != \"application/llm+xml\"\n );\n\n if (filteredRenditions.length == 0 || filteredRenditions[0] == undefined) {\n return {\n filesToDownload: [],\n filesToOpen: [],\n };\n }\n\n const filesToDownload = filteredRenditions.map((item) => {\n const filteredLinks = item.links.filter((item) => item.rel == \"download\");\n return {\n format: item.format,\n link: filteredLinks[0].href,\n };\n });\n\n const filesToOpen = filteredRenditions.map((item) => {\n const filteredLinks = item.links.filter((item) => item.rel == \"view\");\n return {\n format: item.format,\n link: filteredLinks[0].href,\n };\n })\n\n return {\n filesToDownload: filesToDownload,\n filesToOpen: filesToOpen,\n }\n}"],"mappings":"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","names":["item"]}
1
+ {"version":3,"sources":["../../constants/src/index.ts","../src/utils.ts","../src/breadcrumbs.ts","../src/classMerge.ts","../src/call.ts","../src/treeOfContent.ts","../src/params.ts","../src/renditions.ts"],"sourcesContent":["export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n\nexport const DEVICE_OPTIONS = {\n MOBILE: \"mobile\",\n TABLET: \"tablet\",\n DESKTOP: \"desktop\",\n}\nexport const BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};","import { FLAGS_BY_LANG } from \"@c-rex/constants\";\nimport { AvailableVersionsInterface, informationUnitsResponseItem } from \"@c-rex/interfaces\";\n\nexport const _generateShaKey = (input: string): string => {\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n hash = (hash << 5) - hash + input.charCodeAt(i);\n hash |= 0;\n }\n return Math.abs(hash).toString(16);\n}\n\n/**\n * Retrieves the country code associated with a given language code.\n * @param lang - The language code to look up (e.g., \"en-US\")\n * @returns The corresponding country code, or the original language code if not found\n */\nexport const getCountryCodeByLang = (lang: string): string => {\n const mappedKeys = Object.keys(FLAGS_BY_LANG);\n\n if (!mappedKeys.includes(lang)) {\n return lang\n }\n\n type LangKey = keyof typeof FLAGS_BY_LANG;\n const country = FLAGS_BY_LANG[lang as LangKey]\n\n return country\n}\n\nexport const formatDateToLocale = (date: string, locale: string): string => {\n if (typeof date !== 'string' || !date) {\n return date;\n }\n\n const dateAux = new Date(date);\n return new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: 'long',\n year: 'numeric'\n }).format(dateAux);\n}\n\nexport const createAvailableVersionList = (\n versions: informationUnitsResponseItem[],\n articleLang: string,\n type: string\n): AvailableVersionsInterface[] => {\n\n const availableVersions = versions.map(item => {\n return {\n shortId: item.shortId,\n active: item.language === articleLang,\n lang: item.language,\n country: item.language.split(\"-\")[1],\n link: `/${type}/${item.shortId}`,\n }\n }).sort((a, b) => {\n if (a.lang < b.lang) return -1;\n if (a.lang > b.lang) return 1;\n return 0;\n }) as AvailableVersionsInterface[];\n\n return availableVersions;\n}","import { TreeOfContent } from \"@c-rex/interfaces\";\n\n/**\n * Generates breadcrumb items by recursively extracting active items and their active children from a TreeOfContent array.\n * @param treeOfContent - Array of TreeOfContent objects representing the content hierarchy\n * @returns A flattened array of active TreeOfContent items to be used as breadcrumbs\n */\nexport const generateBreadcrumbItems = (\n treeOfContent: TreeOfContent[],\n): TreeOfContent[] => {\n const result: TreeOfContent[] = [];\n\n treeOfContent.forEach((item) => {\n if (item.active) {\n const filteredChildren = generateBreadcrumbItems(item.children);\n result.push(item, ...filteredChildren);\n }\n });\n\n return result;\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges multiple class values into a single string using clsx and tailwind-merge.\n * Useful for conditionally applying Tailwind CSS classes.\n * @param inputs - Any number of class values (strings, objects, arrays, etc.)\n * @returns A merged string of class names optimized for Tailwind CSS\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { _generateShaKey } from \"./utils\"\n\n/**\n * Makes an asynchronous RPC API call to the server.\n * @param method - The RPC method name to call\n * @param params - Optional parameters to pass to the method\n * @returns A Promise resolving to the response data of type T\n */\nexport const call = async<T = unknown>(method: string, params?: any): Promise<T> => {\n type result = {\n data: string,\n expireDate: Date,\n }\n\n const shaKey = _generateShaKey(JSON.stringify({ method, params }))\n const cache = localStorage.getItem(shaKey)\n\n if (cache !== null) {\n const { data, expireDate } = JSON.parse(cache) as result\n\n if (new Date(expireDate) > new Date()) {\n return JSON.parse(data) as T\n } else {\n localStorage.removeItem(shaKey)\n }\n }\n\n const res = await fetch(`/api/rpc`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ method, params }),\n credentials: 'include',\n });\n\n const json = await res.json();\n\n if (!res.ok) throw new Error(json.error || 'Unknown error');\n\n const today = new Date()\n const result: result = {\n data: JSON.stringify(json.data),\n expireDate: new Date(today.getTime() + 1000 * 60 * 60),\n }\n\n localStorage.setItem(shaKey, JSON.stringify(result))\n\n return json.data;\n}","import { DirectoryNodes, DefaultCrexDirectories, TreeOfContent } from \"@c-rex/interfaces\";\nimport { call } from \"./call\";\n\n\nconst itemCache = new Map<string, DirectoryNodes>();\n\nasync function getItemCached(id: string): Promise<DirectoryNodes> {\n if (itemCache.has(id)) return itemCache.get(id)!;\n\n const data = await call<DirectoryNodes>(\"DirectoryNodesService.getItem\", id);\n\n itemCache.set(id, data);\n\n return data;\n}\n\nexport const generateTreeOfContent = async (\n directoryNodes: DirectoryNodes[]\n): Promise<TreeOfContent[]> => {\n if (!directoryNodes?.length) return [];\n\n let response = await getItemCached(directoryNodes[0].shortId);\n let result = await getChildrenInfo(response.childNodes);\n\n while (response.parents?.[0]) {\n if (!response.labels?.[0] || !response.informationUnits?.[0]) {\n return result;\n }\n\n const infoId = response.informationUnits[0].shortId;\n\n const parentNode: TreeOfContent = {\n active: true,\n label: response.labels[0].value,\n id: response.shortId,\n link: `/topics/${infoId}`,\n children: result,\n };\n\n response = await getItemCached(response.parents[0].shortId);\n result = await getChildrenInfo(response.childNodes, parentNode);\n }\n\n return result;\n};\n\nasync function getChildrenInfo(\n childNodes: DefaultCrexDirectories[] | undefined,\n childItem?: TreeOfContent\n): Promise<TreeOfContent[]> {\n if (!childNodes?.length) return [];\n\n const validNodes = childNodes.filter((n) => n.labels?.[0]);\n\n const responses = await Promise.all(\n validNodes.map((n) =>\n getItemCached(n.shortId).catch((err) => {\n console.error(\"Erro em\", n.shortId, err);\n return undefined;\n })\n )\n );\n\n return responses.reduce<TreeOfContent[]>((acc, resp, idx) => {\n if (!resp?.informationUnits?.[0]) return acc;\n\n const node = validNodes[idx];\n const treeItem: TreeOfContent = {\n active: false,\n label: node.labels![0].value,\n link: `/topics/${resp.informationUnits[0].shortId}`,\n id: node.shortId,\n children: [],\n };\n\n acc.push(node.shortId === childItem?.id ? childItem : treeItem);\n return acc;\n }, []);\n}\n","import { QueryParams } from '@c-rex/types';\n\n/**\n * Creates an array of parameter objects from a list of field values.\n * @param fieldsList - Array of field values to transform into parameter objects\n * @param key - The key to use for each parameter object (defaults to \"Fields\")\n * @returns An array of objects with key-value pairs\n */\nexport const createParams = (fieldsList: string[], key: string = \"Fields\") =>\n fieldsList.map((item) => ({\n key: key,\n value: item,\n }));\n\n/**\n * Generates a URL query string from an array of parameter objects.\n * @param params - Array of QueryParams objects containing key-value pairs\n * @returns A URL-encoded query string\n */\nexport const generateQueryParams = (params: QueryParams[]): string => {\n const queryParams = params\n .map((param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`)\n .join(\"&\");\n return queryParams;\n};\n","import { informationUnitsRenditions } from \"@c-rex/interfaces\";\nimport { DocumentsType } from \"@c-rex/types\";\n\n\nexport const getFileRenditions = ({ renditions }: { renditions: informationUnitsRenditions[] }): DocumentsType => {\n if (renditions == undefined || renditions.length == 0) {\n return {};\n }\n\n const filteredRenditions = renditions.filter(\n (item) => item.format != \"application/xhtml+xml\" && item.format != \"application/json\" && item.format != \"application/llm+xml\"\n );\n\n if (filteredRenditions.length == 0 || filteredRenditions[0] == undefined) {\n return {};\n }\n\n const result: {\n [key: string]: {\n view: string;\n download: string;\n }\n } = {}\n\n filteredRenditions.forEach((item) => {\n const key = item.format\n\n if (result[key] == undefined) {\n result[key] = {\n view: \"\",\n download: \"\"\n }\n }\n\n result[key].download = item.links.filter((link) => link.rel == \"download\")[0]?.href\n result[key].view = item.links.filter((link) => link.rel == \"view\")[0]?.href\n })\n\n return result\n}"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/next-cookies.ts","../../constants/src/index.ts"],"sourcesContent":["'use server';\n\nimport { SDK_CONFIG_KEY } from '@c-rex/constants';\nimport { ConfigInterface } from '@c-rex/interfaces';\nimport { cookies } from 'next/headers';\n\n/**\n * Retrieves and parses configuration data from a cookie.\n * @returns The parsed configuration object\n * @throws Error if the configuration cookie is not found or cannot be parsed\n */\nexport const getConfigs = (): ConfigInterface => {\n const jsonConfigs = cookies().get(SDK_CONFIG_KEY)?.value;\n if (!jsonConfigs) {\n throw new Error('Configs not found');\n }\n\n const configs: ConfigInterface = JSON.parse(jsonConfigs);\n\n return configs;\n}","export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACoCO,IAAM,iBAAiB;AAwCvB,IAAM,uBAAuB,IAAI,KAAK,KAAK,KAAK;;;ADxEvD,qBAAwB;AAOjB,IAAM,aAAa,MAAuB;AAC7C,QAAM,kBAAc,wBAAQ,EAAE,IAAI,cAAc,GAAG;AACnD,MAAI,CAAC,aAAa;AACd,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACvC;AAEA,QAAM,UAA2B,KAAK,MAAM,WAAW;AAEvD,SAAO;AACX;","names":[]}
1
+ {"version":3,"sources":["../src/next-cookies.ts","../../constants/src/index.ts"],"sourcesContent":["'use server';\n\nimport { SDK_CONFIG_KEY } from '@c-rex/constants';\nimport { ConfigInterface } from '@c-rex/interfaces';\nimport { cookies } from 'next/headers';\n\n/**\n * Retrieves and parses configuration data from a cookie.\n * @returns The parsed configuration object\n * @throws Error if the configuration cookie is not found or cannot be parsed\n */\nexport const getConfigs = (): ConfigInterface => {\n const jsonConfigs = cookies().get(SDK_CONFIG_KEY)?.value;\n if (!jsonConfigs) {\n throw new Error('Configs not found');\n }\n\n const configs: ConfigInterface = JSON.parse(jsonConfigs);\n\n return configs;\n}","export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n\nexport const DEVICE_OPTIONS = {\n MOBILE: \"mobile\",\n TABLET: \"tablet\",\n DESKTOP: \"desktop\",\n}\nexport const BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACoCO,IAAM,iBAAiB;AAwCvB,IAAM,uBAAuB,IAAI,KAAK,KAAK,KAAK;;;ADxEvD,qBAAwB;AAOjB,IAAM,aAAa,MAAuB;AAC7C,QAAM,kBAAc,wBAAQ,EAAE,IAAI,cAAc,GAAG;AACnD,MAAI,CAAC,aAAa;AACd,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACvC;AAEA,QAAM,UAA2B,KAAK,MAAM,WAAW;AAEvD,SAAO;AACX;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../constants/src/index.ts","../src/next-cookies.ts"],"sourcesContent":["export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n","'use server';\n\nimport { SDK_CONFIG_KEY } from '@c-rex/constants';\nimport { ConfigInterface } from '@c-rex/interfaces';\nimport { cookies } from 'next/headers';\n\n/**\n * Retrieves and parses configuration data from a cookie.\n * @returns The parsed configuration object\n * @throws Error if the configuration cookie is not found or cannot be parsed\n */\nexport const getConfigs = (): ConfigInterface => {\n const jsonConfigs = cookies().get(SDK_CONFIG_KEY)?.value;\n if (!jsonConfigs) {\n throw new Error('Configs not found');\n }\n\n const configs: ConfigInterface = JSON.parse(jsonConfigs);\n\n return configs;\n}"],"mappings":";;;AAoCO,IAAM,iBAAiB;AAwCvB,IAAM,uBAAuB,IAAI,KAAK,KAAK,KAAK;;;ACxEvD,SAAS,eAAe;AAOjB,IAAM,aAAa,MAAuB;AAC7C,QAAM,cAAc,QAAQ,EAAE,IAAI,cAAc,GAAG;AACnD,MAAI,CAAC,aAAa;AACd,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACvC;AAEA,QAAM,UAA2B,KAAK,MAAM,WAAW;AAEvD,SAAO;AACX;","names":[]}
1
+ {"version":3,"sources":["../../constants/src/index.ts","../src/next-cookies.ts"],"sourcesContent":["export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n\nexport const DEVICE_OPTIONS = {\n MOBILE: \"mobile\",\n TABLET: \"tablet\",\n DESKTOP: \"desktop\",\n}\nexport const BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};","'use server';\n\nimport { SDK_CONFIG_KEY } from '@c-rex/constants';\nimport { ConfigInterface } from '@c-rex/interfaces';\nimport { cookies } from 'next/headers';\n\n/**\n * Retrieves and parses configuration data from a cookie.\n * @returns The parsed configuration object\n * @throws Error if the configuration cookie is not found or cannot be parsed\n */\nexport const getConfigs = (): ConfigInterface => {\n const jsonConfigs = cookies().get(SDK_CONFIG_KEY)?.value;\n if (!jsonConfigs) {\n throw new Error('Configs not found');\n }\n\n const configs: ConfigInterface = JSON.parse(jsonConfigs);\n\n return configs;\n}"],"mappings":";;;AAoCO,IAAM,iBAAiB;AAwCvB,IAAM,uBAAuB,IAAI,KAAK,KAAK,KAAK;;;ACxEvD,SAAS,eAAe;AAOjB,IAAM,aAAa,MAAuB;AAC7C,QAAM,cAAc,QAAQ,EAAE,IAAI,cAAc,GAAG;AACnD,MAAI,CAAC,aAAa;AACd,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACvC;AAEA,QAAM,UAA2B,KAAK,MAAM,WAAW;AAEvD,SAAO;AACX;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c-rex/utils",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "files": [
5
5
  "dist"
6
6
  ],