@symbo.ls/utils 3.14.0 → 3.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +2 -2
  2. package/assets.js +117 -0
  3. package/cookie.js +20 -13
  4. package/index.js +1 -0
  5. package/methods.js +51 -3
  6. package/object.js +36 -2
  7. package/package.json +1 -1
  8. package/dist/cjs/array.js +0 -168
  9. package/dist/cjs/browser.js +0 -34
  10. package/dist/cjs/cache.js +0 -26
  11. package/dist/cjs/cdn.js +0 -85
  12. package/dist/cjs/component.js +0 -45
  13. package/dist/cjs/cookie.js +0 -75
  14. package/dist/cjs/date.js +0 -31
  15. package/dist/cjs/detectHeight.js +0 -62
  16. package/dist/cjs/element.js +0 -136
  17. package/dist/cjs/env.js +0 -43
  18. package/dist/cjs/events.js +0 -39
  19. package/dist/cjs/extends.js +0 -434
  20. package/dist/cjs/fibonacci.js +0 -30
  21. package/dist/cjs/files.js +0 -24
  22. package/dist/cjs/function.js +0 -114
  23. package/dist/cjs/globals.js +0 -30
  24. package/dist/cjs/if.js +0 -48
  25. package/dist/cjs/index.js +0 -54
  26. package/dist/cjs/key.js +0 -38
  27. package/dist/cjs/keys.js +0 -201
  28. package/dist/cjs/load.js +0 -171
  29. package/dist/cjs/log.js +0 -34
  30. package/dist/cjs/metadata.js +0 -310
  31. package/dist/cjs/methods.js +0 -599
  32. package/dist/cjs/node.js +0 -35
  33. package/dist/cjs/object.js +0 -634
  34. package/dist/cjs/projectKeys.js +0 -35
  35. package/dist/cjs/props.js +0 -282
  36. package/dist/cjs/scaling.js +0 -35
  37. package/dist/cjs/scope.js +0 -44
  38. package/dist/cjs/sharedLibraries.js +0 -146
  39. package/dist/cjs/state.js +0 -173
  40. package/dist/cjs/string-extra.js +0 -72
  41. package/dist/cjs/string.js +0 -183
  42. package/dist/cjs/style.js +0 -40
  43. package/dist/cjs/tags.js +0 -220
  44. package/dist/cjs/triggerEvent.js +0 -112
  45. package/dist/cjs/types.js +0 -74
  46. package/dist/cjs/update.js +0 -42
  47. package/dist/esm/array.js +0 -148
  48. package/dist/esm/browser.js +0 -14
  49. package/dist/esm/cache.js +0 -6
  50. package/dist/esm/cdn.js +0 -65
  51. package/dist/esm/component.js +0 -25
  52. package/dist/esm/cookie.js +0 -55
  53. package/dist/esm/date.js +0 -11
  54. package/dist/esm/detectHeight.js +0 -42
  55. package/dist/esm/element.js +0 -116
  56. package/dist/esm/env.js +0 -23
  57. package/dist/esm/events.js +0 -19
  58. package/dist/esm/extends.js +0 -414
  59. package/dist/esm/fibonacci.js +0 -10
  60. package/dist/esm/files.js +0 -4
  61. package/dist/esm/function.js +0 -94
  62. package/dist/esm/globals.js +0 -10
  63. package/dist/esm/if.js +0 -28
  64. package/dist/esm/index.js +0 -37
  65. package/dist/esm/key.js +0 -18
  66. package/dist/esm/keys.js +0 -181
  67. package/dist/esm/load.js +0 -151
  68. package/dist/esm/log.js +0 -14
  69. package/dist/esm/metadata.js +0 -290
  70. package/dist/esm/methods.js +0 -569
  71. package/dist/esm/node.js +0 -15
  72. package/dist/esm/object.js +0 -621
  73. package/dist/esm/projectKeys.js +0 -16
  74. package/dist/esm/props.js +0 -262
  75. package/dist/esm/scaling.js +0 -15
  76. package/dist/esm/scope.js +0 -24
  77. package/dist/esm/sharedLibraries.js +0 -126
  78. package/dist/esm/state.js +0 -163
  79. package/dist/esm/string-extra.js +0 -52
  80. package/dist/esm/string.js +0 -163
  81. package/dist/esm/style.js +0 -20
  82. package/dist/esm/tags.js +0 -200
  83. package/dist/esm/triggerEvent.js +0 -92
  84. package/dist/esm/types.js +0 -54
  85. package/dist/esm/update.js +0 -22
  86. package/dist/iife/index.js +0 -5818
@@ -1,310 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var metadata_exports = {};
20
- __export(metadata_exports, {
21
- generateMetaTags: () => generateMetaTags,
22
- getPageMetadata: () => getPageMetadata
23
- });
24
- module.exports = __toCommonJS(metadata_exports);
25
- var import_types = require("./types.js");
26
- const escapeHtml = (text) => {
27
- if (text === null || text === void 0) return "";
28
- const map = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#039;" };
29
- return text.toString().replace(/[&<>"']/g, (m) => map[m]);
30
- };
31
- const buildAttrs = (obj) => Object.entries(obj || {}).filter(([_, v]) => v !== void 0).map(([k, v]) => `${k}="${escapeHtml(v)}"`).join(" ");
32
- const generateMetaTags = (metadata, isProduction) => {
33
- if (!isProduction) {
34
- metadata = { ...metadata, robots: "noindex" };
35
- }
36
- const tags = Object.entries(metadata).reduce(
37
- (acc, [key, value]) => {
38
- if (!value && value !== 0 && value !== false) return acc;
39
- if (key === "title") {
40
- acc.push(`<title>${escapeHtml(value)}</title>`);
41
- return acc;
42
- }
43
- if (key === "canonical") {
44
- acc.push(`<link rel="canonical" href="${escapeHtml(value)}">`);
45
- return acc;
46
- }
47
- if (key === "manifest") {
48
- acc.push(`<link rel="manifest" href="${escapeHtml(value)}">`);
49
- return acc;
50
- }
51
- if (key === "favicon" || key === "favicons" || key === "icon" || key === "icons") {
52
- const items = Array.isArray(value) ? value : [value];
53
- items.forEach((item) => {
54
- if (typeof item === "string") {
55
- acc.push(`<link rel="icon" href="${escapeHtml(item)}">`);
56
- } else if (typeof item === "object") {
57
- const attrs = buildAttrs(item);
58
- if (!/rel=/.test(attrs)) {
59
- acc.push(`<link rel="icon" ${attrs}>`);
60
- } else {
61
- acc.push(`<link ${attrs}>`);
62
- }
63
- }
64
- });
65
- return acc;
66
- }
67
- if (key === "alternate") {
68
- const alternates = Array.isArray(value) ? value : [value];
69
- alternates.forEach((alt) => {
70
- if (typeof alt === "object") {
71
- const attrs = Object.entries(alt).filter(([_, attrValue]) => attrValue !== void 0).map(([attrKey, attrValue]) => `${attrKey}="${escapeHtml(attrValue)}"`).join(" ");
72
- acc.push(`<link rel="alternate" ${attrs}>`);
73
- }
74
- });
75
- return acc;
76
- }
77
- const processMetaTag = (tagKey, tagValue, attrType = "name") => {
78
- if (typeof tagValue === "string" || typeof tagValue === "number" || typeof tagValue === "boolean") {
79
- acc.push(`<meta ${attrType}="${escapeHtml(tagKey)}" content="${escapeHtml(tagValue)}">`);
80
- } else if (Array.isArray(tagValue)) {
81
- tagValue.forEach((item) => {
82
- if (typeof item === "string" || typeof item === "number" || typeof item === "boolean") {
83
- acc.push(`<meta ${attrType}="${escapeHtml(tagKey)}" content="${escapeHtml(item)}">`);
84
- } else if (typeof item === "object") {
85
- const attrs = Object.entries(item).filter(([_, attrValue]) => attrValue !== void 0).map(([attrKey, attrValue]) => `${attrKey}="${escapeHtml(attrValue)}"`).join(" ");
86
- acc.push(`<meta ${attrs}>`);
87
- }
88
- });
89
- } else if (typeof tagValue === "object") {
90
- const attrs = Object.entries(tagValue).filter(([_, attrValue]) => attrValue !== void 0).map(([attrKey, attrValue]) => `${attrKey}="${escapeHtml(attrValue)}"`).join(" ");
91
- acc.push(`<meta ${attrs}>`);
92
- }
93
- };
94
- if (key.startsWith("http-equiv:")) {
95
- const httpEquivKey = key.replace("http-equiv:", "");
96
- processMetaTag(httpEquivKey, value, "http-equiv");
97
- return acc;
98
- }
99
- if (key.startsWith("itemprop:")) {
100
- const itempropKey = key.replace("itemprop:", "");
101
- processMetaTag(itempropKey, value, "itemprop");
102
- return acc;
103
- }
104
- const prefixes = [
105
- "og:",
106
- "twitter:",
107
- "fb:",
108
- "article:",
109
- "profile:",
110
- "book:",
111
- "business:",
112
- "music:",
113
- "product:",
114
- "video:",
115
- "DC:",
116
- "DCTERMS:"
117
- ];
118
- const prefix = prefixes.find((p) => key.startsWith(p));
119
- if (prefix) {
120
- const tagKey = key.replace(prefix, "");
121
- processMetaTag(
122
- `${prefix.replace(":", "")}:${tagKey}`,
123
- value,
124
- prefix === "twitter:" || prefix === "DC:" || prefix === "DCTERMS:" ? "name" : "property"
125
- );
126
- return acc;
127
- }
128
- if (key.startsWith("apple:") || key.startsWith("msapplication:")) {
129
- const pfx = key.startsWith("apple:") ? "apple-" : "msapplication-";
130
- const tagKey = key.replace(/^apple:|^msapplication:/, "");
131
- processMetaTag(`${pfx}${tagKey}`, value, "name");
132
- return acc;
133
- }
134
- processMetaTag(key, value);
135
- return acc;
136
- },
137
- [
138
- '<meta charset="UTF-8">',
139
- '<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">'
140
- ]
141
- );
142
- return tags.join("\n");
143
- };
144
- const isBareFilename = (val) => typeof val === "string" && val.length > 0 && !val.startsWith("/") && !val.startsWith("http");
145
- function resolveFileReferences(metadata, files) {
146
- if (!files || typeof files !== "object") return metadata;
147
- const resolve = (val) => {
148
- if (!isBareFilename(val)) return val;
149
- const fileEntry = files[val];
150
- if (fileEntry?.src) return fileEntry.src;
151
- return val;
152
- };
153
- const result = { ...metadata };
154
- for (const [key, value] of Object.entries(result)) {
155
- if (typeof value === "string") {
156
- result[key] = resolve(value);
157
- } else if (Array.isArray(value)) {
158
- result[key] = value.map(
159
- (item) => typeof item === "string" ? resolve(item) : item
160
- );
161
- }
162
- }
163
- return result;
164
- }
165
- function resolveDotPath(obj, path) {
166
- if (!obj || !path) return void 0;
167
- const parts = path.split(".");
168
- let v = obj;
169
- for (const p of parts) {
170
- if (v == null || typeof v !== "object") return void 0;
171
- v = v[p];
172
- }
173
- return v;
174
- }
175
- function resolveMetadataTemplates(metadata, data, ssrContext) {
176
- const config = data.config || data.settings || {};
177
- const polyglot = config.polyglot || data.polyglot;
178
- const defaultLang = ssrContext?.lang || polyglot?.defaultLang || "en";
179
- const translations = polyglot?.translations || {};
180
- const langMap = translations[defaultLang] || {};
181
- const state = ssrContext?.state || {};
182
- const result = { ...metadata };
183
- for (const [key, value] of Object.entries(result)) {
184
- if (typeof value !== "string" || !value.includes("{{")) continue;
185
- result[key] = value.replace(/\{\{\s*([^|{}]+?)\s*(?:\|\s*(\w+)\s*)?\}\}/g, (match, k, filter) => {
186
- const trimmed = k.trim();
187
- if (filter === "polyglot") {
188
- return langMap[trimmed] ?? resolveDotPath(langMap, trimmed) ?? match;
189
- }
190
- if (filter === "getLocalStateLang") {
191
- const resolved = resolveDotPath(state, trimmed + defaultLang);
192
- return resolved ?? match;
193
- }
194
- const fromState = resolveDotPath(state, trimmed);
195
- if (fromState !== void 0) return fromState;
196
- return langMap[trimmed] ?? resolveDotPath(langMap, trimmed) ?? match;
197
- });
198
- }
199
- return result;
200
- }
201
- function convertFunctionMetaToTemplates(metadata) {
202
- const result = { ...metadata };
203
- for (const [key, value] of Object.entries(result)) {
204
- if (typeof value === "function") {
205
- const src = value.toString();
206
- const langMatch = src.match(/el\.call\(\s*["']getLocalStateLang["']\s*,\s*["']([^"']+)["']\s*\)/);
207
- if (langMatch) {
208
- result[key] = `{{ ${langMatch[1]} | getLocalStateLang }}`;
209
- continue;
210
- }
211
- const polyMatch = src.match(/el\.call\(\s*["']polyglot["']\s*,\s*["']([^"']+)["']\s*\)/);
212
- if (polyMatch) {
213
- result[key] = `{{ ${polyMatch[1]} | polyglot }}`;
214
- continue;
215
- }
216
- const stateMatch = src.match(/s\.(\w+(?:\.\w+)+)/);
217
- if (stateMatch) {
218
- result[key] = `{{ ${stateMatch[1]} }}`;
219
- continue;
220
- }
221
- delete result[key];
222
- } else if (typeof value === "string") {
223
- const langMatch = value.match(/el\.call\(\s*["']getLocalStateLang["']\s*,\s*["']([^"']+)["']\s*\)/);
224
- if (langMatch) {
225
- result[key] = `{{ ${langMatch[1]} | getLocalStateLang }}`;
226
- continue;
227
- }
228
- const polyMatch = value.match(/el\.call\(\s*["']polyglot["']\s*,\s*["']([^"']+)["']\s*\)/);
229
- if (polyMatch) {
230
- result[key] = `{{ ${polyMatch[1]} | polyglot }}`;
231
- continue;
232
- }
233
- if (value.includes("=>") && value.includes("s.")) {
234
- const stateMatch = value.match(/s\.(\w+(?:\.\w+)+)/);
235
- if (stateMatch) {
236
- result[key] = `{{ ${stateMatch[1]} }}`;
237
- continue;
238
- }
239
- }
240
- }
241
- }
242
- return result;
243
- }
244
- function getPageMetadata(data, pathname, ssrContext, { isProduction = false, channel = "production" } = {}) {
245
- const currentPage = data.pages?.[pathname];
246
- const stateObject = (0, import_types.isObject)(currentPage?.state) && currentPage?.state;
247
- const rawPageMeta = currentPage?.metadata || currentPage?.helmet || stateObject || {};
248
- const pageMetadata = convertFunctionMetaToTemplates(rawPageMeta);
249
- const pageExplicitKeys = new Set(Object.keys(pageMetadata));
250
- const appMetadata = data.app?.metadata || {};
251
- const cleanAppMeta = convertFunctionMetaToTemplates(appMetadata);
252
- let merged = {};
253
- if (data.integrations?.seo) {
254
- merged = { ...data.integrations.seo, ...cleanAppMeta, ...pageMetadata };
255
- } else if (Object.keys(cleanAppMeta).length) {
256
- merged = { ...cleanAppMeta, ...pageMetadata };
257
- } else {
258
- merged = { ...pageMetadata };
259
- }
260
- if (!merged.title) {
261
- const label = data.name || data.key;
262
- if (label) {
263
- if (isProduction) merged.title = label;
264
- else if (channel === "development") merged.title = `${label} / dev:symbo.ls`;
265
- else if (channel === "staging") merged.title = `${label} / staging:symbo.ls`;
266
- else merged.title = `${label} / symbo.ls`;
267
- } else {
268
- merged.title = "Symbols demo";
269
- }
270
- }
271
- merged = resolveMetadataTemplates(merged, data, ssrContext);
272
- if (merged.title && (pageExplicitKeys.has("title") || !merged["og:title"])) {
273
- if (!pageExplicitKeys.has("og:title")) {
274
- merged["og:title"] = merged.title;
275
- }
276
- }
277
- if (merged.description && (pageExplicitKeys.has("description") || !merged["og:description"])) {
278
- if (!pageExplicitKeys.has("og:description")) {
279
- merged["og:description"] = merged.description;
280
- }
281
- }
282
- if (merged.title && !merged["twitter:title"]) {
283
- merged["twitter:title"] = merged.title;
284
- }
285
- if (merged.description && !merged["twitter:description"]) {
286
- merged["twitter:description"] = merged.description;
287
- }
288
- const routeForUrl = ssrContext?.actualPathname || pathname;
289
- if (merged["og:url"] || merged.url) {
290
- const baseUrl = (merged["og:url"] || merged.url || "").replace(/\/$/, "");
291
- if (baseUrl && routeForUrl && routeForUrl !== "/") {
292
- const cleanRoute = routeForUrl.startsWith("/") ? routeForUrl : "/" + routeForUrl;
293
- merged["og:url"] = baseUrl + cleanRoute;
294
- }
295
- }
296
- merged = resolveFileReferences(merged, data.files);
297
- const siteName = data.name || data.app?.metadata?.title || data.app?.name || "";
298
- for (const [key, value] of Object.entries(merged)) {
299
- if (typeof value === "string" && value.includes("{{")) {
300
- const cleaned = value.replace(/\{\{[^}]*\}\}/g, "").trim();
301
- if (!cleaned) {
302
- if (key === "title") merged[key] = siteName;
303
- else delete merged[key];
304
- } else {
305
- merged[key] = cleaned;
306
- }
307
- }
308
- }
309
- return merged;
310
- }