@expofp/loader 1.0.77 → 1.0.79

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.
@@ -0,0 +1,115 @@
1
+ import { g as x } from "./bundle.js";
2
+ function R(s, g) {
3
+ for (var c = 0; c < g.length; c++) {
4
+ const o = g[c];
5
+ if (typeof o != "string" && !Array.isArray(o)) {
6
+ for (const n in o)
7
+ if (n !== "default" && !(n in s)) {
8
+ const i = Object.getOwnPropertyDescriptor(o, n);
9
+ i && Object.defineProperty(s, n, i.get ? i : {
10
+ enumerable: !0,
11
+ get: () => o[n]
12
+ });
13
+ }
14
+ }
15
+ }
16
+ return Object.freeze(Object.defineProperty(s, Symbol.toStringTag, { value: "Module" }));
17
+ }
18
+ var p = { exports: {} }, A = p.exports, d;
19
+ function P() {
20
+ return d || (d = 1, (function(s, g) {
21
+ (function(c, o) {
22
+ s.exports = o();
23
+ })(A, (function() {
24
+ var c = function(i, e) {
25
+ if (e = e || {}, typeof i != "function")
26
+ throw new n("fetch must be a function");
27
+ if (typeof e != "object")
28
+ throw new n("defaults must be an object");
29
+ if (e.retries !== void 0 && !o(e.retries))
30
+ throw new n("retries must be a positive integer");
31
+ if (e.retryDelay !== void 0 && !o(e.retryDelay) && typeof e.retryDelay != "function")
32
+ throw new n("retryDelay must be a positive integer or a function returning a positive integer");
33
+ if (e.retryOn !== void 0 && !Array.isArray(e.retryOn) && typeof e.retryOn != "function")
34
+ throw new n("retryOn property expects an array or function");
35
+ var _ = {
36
+ retries: 3,
37
+ retryDelay: 1e3,
38
+ retryOn: []
39
+ };
40
+ return e = Object.assign(_, e), function(m, r) {
41
+ var v = e.retries, l = e.retryDelay, u = e.retryOn;
42
+ if (r && r.retries !== void 0)
43
+ if (o(r.retries))
44
+ v = r.retries;
45
+ else
46
+ throw new n("retries must be a positive integer");
47
+ if (r && r.retryDelay !== void 0)
48
+ if (o(r.retryDelay) || typeof r.retryDelay == "function")
49
+ l = r.retryDelay;
50
+ else
51
+ throw new n("retryDelay must be a positive integer or a function returning a positive integer");
52
+ if (r && r.retryOn)
53
+ if (Array.isArray(r.retryOn) || typeof r.retryOn == "function")
54
+ u = r.retryOn;
55
+ else
56
+ throw new n("retryOn property expects an array or function");
57
+ return new Promise(function(w, a) {
58
+ var b = function(f) {
59
+ var O = typeof Request < "u" && m instanceof Request ? m.clone() : m;
60
+ i(O, r).then(function(t) {
61
+ if (Array.isArray(u) && u.indexOf(t.status) === -1)
62
+ w(t);
63
+ else if (typeof u == "function")
64
+ try {
65
+ return Promise.resolve(u(f, null, t)).then(function(y) {
66
+ y ? h(f, null, t) : w(t);
67
+ }).catch(a);
68
+ } catch (y) {
69
+ a(y);
70
+ }
71
+ else
72
+ f < v ? h(f, null, t) : w(t);
73
+ }).catch(function(t) {
74
+ if (typeof u == "function")
75
+ try {
76
+ Promise.resolve(u(f, t, null)).then(function(y) {
77
+ y ? h(f, t, null) : a(t);
78
+ }).catch(function(y) {
79
+ a(y);
80
+ });
81
+ } catch (y) {
82
+ a(y);
83
+ }
84
+ else f < v ? h(f, t, null) : a(t);
85
+ });
86
+ };
87
+ function h(f, O, t) {
88
+ var y = typeof l == "function" ? l(f, O, t) : l;
89
+ setTimeout(function() {
90
+ b(++f);
91
+ }, y);
92
+ }
93
+ b(0);
94
+ });
95
+ };
96
+ };
97
+ function o(i) {
98
+ return Number.isInteger(i) && i >= 0;
99
+ }
100
+ function n(i) {
101
+ this.name = "ArgumentError", this.message = i;
102
+ }
103
+ return c;
104
+ }));
105
+ })(p)), p.exports;
106
+ }
107
+ var D = P();
108
+ const q = /* @__PURE__ */ x(D), j = /* @__PURE__ */ R({
109
+ __proto__: null,
110
+ default: q
111
+ }, [D]);
112
+ export {
113
+ j as f
114
+ };
115
+ //# sourceMappingURL=fetch-retry.umd-g1itNdNw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-retry.umd-g1itNdNw.js","sources":["../../node_modules/.pnpm/fetch-retry@6.0.0/node_modules/fetch-retry/dist/fetch-retry.umd.js"],"sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.fetchRetry = factory());\n})(this, (function () { 'use strict';\n\n var fetchRetry = function (fetch, defaults) {\n defaults = defaults || {};\n if (typeof fetch !== 'function') {\n throw new ArgumentError('fetch must be a function');\n }\n\n if (typeof defaults !== 'object') {\n throw new ArgumentError('defaults must be an object');\n }\n\n if (defaults.retries !== undefined && !isPositiveInteger(defaults.retries)) {\n throw new ArgumentError('retries must be a positive integer');\n }\n\n if (defaults.retryDelay !== undefined && !isPositiveInteger(defaults.retryDelay) && typeof defaults.retryDelay !== 'function') {\n throw new ArgumentError('retryDelay must be a positive integer or a function returning a positive integer');\n }\n\n if (defaults.retryOn !== undefined && !Array.isArray(defaults.retryOn) && typeof defaults.retryOn !== 'function') {\n throw new ArgumentError('retryOn property expects an array or function');\n }\n\n var baseDefaults = {\n retries: 3,\n retryDelay: 1000,\n retryOn: [],\n };\n\n defaults = Object.assign(baseDefaults, defaults);\n\n return function fetchRetry(input, init) {\n var retries = defaults.retries;\n var retryDelay = defaults.retryDelay;\n var retryOn = defaults.retryOn;\n\n if (init && init.retries !== undefined) {\n if (isPositiveInteger(init.retries)) {\n retries = init.retries;\n } else {\n throw new ArgumentError('retries must be a positive integer');\n }\n }\n\n if (init && init.retryDelay !== undefined) {\n if (isPositiveInteger(init.retryDelay) || (typeof init.retryDelay === 'function')) {\n retryDelay = init.retryDelay;\n } else {\n throw new ArgumentError('retryDelay must be a positive integer or a function returning a positive integer');\n }\n }\n\n if (init && init.retryOn) {\n if (Array.isArray(init.retryOn) || (typeof init.retryOn === 'function')) {\n retryOn = init.retryOn;\n } else {\n throw new ArgumentError('retryOn property expects an array or function');\n }\n }\n\n // eslint-disable-next-line no-undef\n return new Promise(function (resolve, reject) {\n var wrappedFetch = function (attempt) {\n // As of node 18, this is no longer needed since node comes with native support for fetch:\n /* istanbul ignore next */\n var _input =\n typeof Request !== 'undefined' && input instanceof Request\n ? input.clone()\n : input;\n fetch(_input, init)\n .then(function (response) {\n if (Array.isArray(retryOn) && retryOn.indexOf(response.status) === -1) {\n resolve(response);\n } else if (typeof retryOn === 'function') {\n try {\n // eslint-disable-next-line no-undef\n return Promise.resolve(retryOn(attempt, null, response))\n .then(function (retryOnResponse) {\n if(retryOnResponse) {\n retry(attempt, null, response);\n } else {\n resolve(response);\n }\n }).catch(reject);\n } catch (error) {\n reject(error);\n }\n } else {\n if (attempt < retries) {\n retry(attempt, null, response);\n } else {\n resolve(response);\n }\n }\n })\n .catch(function (error) {\n if (typeof retryOn === 'function') {\n try {\n // eslint-disable-next-line no-undef\n Promise.resolve(retryOn(attempt, error, null))\n .then(function (retryOnResponse) {\n if(retryOnResponse) {\n retry(attempt, error, null);\n } else {\n reject(error);\n }\n })\n .catch(function(error) {\n reject(error);\n });\n } catch(error) {\n reject(error);\n }\n } else if (attempt < retries) {\n retry(attempt, error, null);\n } else {\n reject(error);\n }\n });\n };\n\n function retry(attempt, error, response) {\n var delay = (typeof retryDelay === 'function') ?\n retryDelay(attempt, error, response) : retryDelay;\n setTimeout(function () {\n wrappedFetch(++attempt);\n }, delay);\n }\n\n wrappedFetch(0);\n });\n };\n };\n\n function isPositiveInteger(value) {\n return Number.isInteger(value) && value >= 0;\n }\n\n function ArgumentError(message) {\n this.name = 'ArgumentError';\n this.message = message;\n }\n\n return fetchRetry;\n\n}));\n"],"names":["global","factory","module","this","fetchRetry","fetch","defaults","ArgumentError","isPositiveInteger","baseDefaults","input","init","retries","retryDelay","retryOn","resolve","reject","wrappedFetch","attempt","_input","response","retryOnResponse","retry","error","delay","value","message"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,87 @@
1
+ import { i as U, p as $, j as f, k as m } from "./bundle.js";
2
+ import { a as F, r as _ } from "./tools-D0u8lBvQ.js";
3
+ const D = async function* (a, i) {
4
+ U("legacyDataResolver offlineFunc:", a);
5
+ const n = i.signal, o = $(a), l = `${o}version.js`;
6
+ try {
7
+ await f(l, n);
8
+ } catch {
9
+ console.warn(`Could not load version.js at ${l}, proceeding without it`);
10
+ }
11
+ const e = globalThis.__fpDataVersion || (+/* @__PURE__ */ new Date()).toString(), t = F(o) + e + "/", r = `${o}data.js?v=${e}`;
12
+ await f(r, n);
13
+ const s = p("__data");
14
+ yield* v(s, o, t), yield { text: `var __data = ${JSON.stringify(s, null, 2)};`, targetFilePath: `${t}data.js` }, yield { url: `${o}wf.data.js?v=${e}`, targetFilePath: `${t}wf.data.js` };
15
+ const u = `${o}fp.svg.js?v=${e}`;
16
+ yield { url: u, targetFilePath: `${t}fp.svg.js` }, await f(u, n);
17
+ const y = (p("__fpLayers") || []).map((c) => `fp.svg.${c.name}.js`);
18
+ for (const c of y)
19
+ yield { url: `${o}${c}?v=${e}`, targetFilePath: `${t}${c}` };
20
+ return `${m}:${t}`;
21
+ };
22
+ function* v(a, i, n) {
23
+ if (a.logo) {
24
+ const l = o(a.logo);
25
+ yield l.file, a.logo = l.localUrl;
26
+ }
27
+ for (const l of a.exhibitors || []) {
28
+ if (l.logo) {
29
+ const t = o(l.logo);
30
+ yield t.file;
31
+ const r = ["__small", "__tiny"];
32
+ for (const s of r) {
33
+ const g = h(t.file.url, s), d = h(t.file.targetFilePath, s);
34
+ yield { url: g, targetFilePath: d };
35
+ }
36
+ l.logo = t.localUrl;
37
+ }
38
+ if (l.leadingImageUrl) {
39
+ const t = o(l.leadingImageUrl);
40
+ yield t.file, l.leadingImageUrl = t.localUrl;
41
+ }
42
+ const e = l.gallery || [];
43
+ for (let t = 0; t < e.length; t++) {
44
+ const r = e[t], s = o(r);
45
+ yield s.file, e[t] = s.localUrl;
46
+ }
47
+ }
48
+ for (const l of a.events || []) {
49
+ if (l.logoFile) {
50
+ const e = o(l.logoFile);
51
+ yield e.file, l.logoFile = e.localUrl;
52
+ }
53
+ for (const e of l.speakers || [])
54
+ if (e.photoFile) {
55
+ const t = o(e.photoFile);
56
+ yield t.file, e.photoFile = t.localUrl;
57
+ }
58
+ }
59
+ function o(l) {
60
+ const e = i + l, t = _(l), r = n + t;
61
+ return {
62
+ file: { url: e, targetFilePath: r },
63
+ localUrl: t
64
+ };
65
+ }
66
+ }
67
+ function p(a) {
68
+ const i = globalThis[a];
69
+ return delete globalThis[a], i;
70
+ }
71
+ function h(a, i) {
72
+ let n, o;
73
+ try {
74
+ n = new URL(a), o = !0;
75
+ } catch {
76
+ n = new URL(a, "http://example.com"), o = !1;
77
+ }
78
+ const l = n.pathname, e = l.lastIndexOf(".");
79
+ if (e === -1)
80
+ return a;
81
+ const t = l.substring(0, e), r = l.substring(e);
82
+ return n.pathname = t + i + r, o ? n.toString() : n.pathname.slice(1) + n.search;
83
+ }
84
+ export {
85
+ D as offlineFunc
86
+ };
87
+ //# sourceMappingURL=legacyDataUrlBaseResolver.offlineFunc-DPaSp_zV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacyDataUrlBaseResolver.offlineFunc-DPaSp_zV.js","sources":["../../src/resolvers/legacyDataUrlBaseResolver.offlineFunc.ts"],"sourcesContent":["import { loadScript } from '../loadScript';\nimport { makeTargetPathFromUrl, relativeUrlToFilePath } from '../offline/tools';\nimport { parseRefValue } from '../resolve';\nimport { LocalFetchFile, OfflineFunc } from '../types';\nimport { log, SCHEMA } from './legacyDataUrlBaseResolver';\n\nexport const offlineFunc: OfflineFunc = async function* (ref: string, context: any) {\n log('legacyDataResolver offlineFunc:', ref);\n const signal = context.signal;\n const dataUrlBase = parseRefValue(ref);\n const versionUrl = `${dataUrlBase}version.js`;\n try {\n await loadScript(versionUrl, signal);\n } catch {\n console.warn(`Could not load version.js at ${versionUrl}, proceeding without it`);\n }\n\n const version = (globalThis as any).__fpDataVersion || (+new Date()).toString();\n const localDataUrlBase = makeTargetPathFromUrl(dataUrlBase) + version + '/';\n\n const dataUrl = `${dataUrlBase}data.js?v=${version}`;\n\n // data.js\n await loadScript(dataUrl, signal);\n const __data = getAndDeleteGlobal('__data');\n yield* localizeDataJson(__data, dataUrlBase, localDataUrlBase);\n const text = `var __data = ${JSON.stringify(__data, null, 2)};`;\n yield { text, targetFilePath: `${localDataUrlBase}data.js` };\n\n // wf.data.js\n const wfDataUrl = `${dataUrlBase}wf.data.js?v=${version}`;\n yield { url: wfDataUrl, targetFilePath: `${localDataUrlBase}wf.data.js` };\n\n // fp.svg.js\n const fpSvgUrl = `${dataUrlBase}fp.svg.js?v=${version}`;\n yield { url: fpSvgUrl, targetFilePath: `${localDataUrlBase}fp.svg.js` };\n\n // load fp.svg.js to get __fpLayers\n await loadScript(fpSvgUrl, signal);\n const __fpLayers: { name: string }[] = getAndDeleteGlobal('__fpLayers') || [];\n const fpLayerFiles = __fpLayers.map((x) => `fp.svg.${x.name}.js`);\n for (const layerFile of fpLayerFiles) {\n // fp.svg.{layer}.js\n const layerUrl = `${dataUrlBase}${layerFile}?v=${version}`;\n yield { url: layerUrl, targetFilePath: `${localDataUrlBase}${layerFile}` };\n }\n\n return `${SCHEMA}:${localDataUrlBase}`;\n};\n\nfunction* localizeDataJson(\n data: any,\n dataUrlBase: string,\n localDataUrlBase: string\n): Generator<LocalFetchFile> {\n if (data.logo) {\n const r = z(data.logo);\n yield r.file;\n data.logo = r.localUrl;\n }\n for (const exhibitor of data.exhibitors || []) {\n if (exhibitor.logo) {\n const r = z(exhibitor.logo);\n yield r.file;\n\n const variants = ['__small', '__tiny'];\n for (const variant of variants) {\n const url = addSuffix(r.file.url, variant);\n const targetFilePath = addSuffix(r.file.targetFilePath, variant);\n yield { url, targetFilePath };\n }\n\n exhibitor.logo = r.localUrl;\n }\n if (exhibitor.leadingImageUrl) {\n const r = z(exhibitor.leadingImageUrl);\n yield r.file;\n exhibitor.leadingImageUrl = r.localUrl;\n }\n const gallery = exhibitor.gallery || [];\n for (let i = 0; i < gallery.length; i++) {\n const url = gallery[i];\n const r = z(url);\n yield r.file;\n gallery[i] = r.localUrl;\n }\n }\n\n for (const event of data.events || []) {\n if (event.logoFile) {\n const r = z(event.logoFile);\n yield r.file;\n event.logoFile = r.localUrl;\n }\n for (const speaker of event.speakers || []) {\n if (speaker.photoFile) {\n const r = z(speaker.photoFile);\n yield r.file;\n speaker.photoFile = r.localUrl;\n }\n }\n }\n\n function z(relativeUrl: string) {\n const url = dataUrlBase + relativeUrl;\n const localUrl = relativeUrlToFilePath(relativeUrl);\n const targetFilePath = localDataUrlBase + localUrl;\n return {\n file: { url, targetFilePath },\n localUrl,\n };\n }\n}\n\nfunction getAndDeleteGlobal(globalVar: string): any {\n const value = (globalThis as any)[globalVar];\n delete (globalThis as any)[globalVar];\n return value;\n}\n\n// abs and relative paths\nfunction addSuffix(absoluteOrRelativeUrl: string, suffix: string): string {\n let urlObj: URL;\n let absolute: boolean;\n try {\n urlObj = new URL(absoluteOrRelativeUrl);\n absolute = true;\n } catch {\n urlObj = new URL(absoluteOrRelativeUrl, 'http://example.com');\n absolute = false;\n }\n\n const pathname = urlObj.pathname;\n const dotIndex = pathname.lastIndexOf('.');\n if (dotIndex === -1) {\n return absoluteOrRelativeUrl; // no extension found\n }\n const name = pathname.substring(0, dotIndex);\n const extension = pathname.substring(dotIndex);\n urlObj.pathname = name + suffix + extension;\n if (absolute) {\n // return full absolute URL\n return urlObj.toString();\n } else {\n return urlObj.pathname.slice(1) + urlObj.search;\n }\n}\n"],"names":["offlineFunc","ref","context","log","signal","dataUrlBase","parseRefValue","versionUrl","loadScript","version","localDataUrlBase","makeTargetPathFromUrl","dataUrl","__data","getAndDeleteGlobal","localizeDataJson","fpSvgUrl","fpLayerFiles","x","layerFile","SCHEMA","data","r","z","exhibitor","variants","variant","url","addSuffix","targetFilePath","gallery","i","event","speaker","relativeUrl","localUrl","relativeUrlToFilePath","globalVar","value","absoluteOrRelativeUrl","suffix","urlObj","absolute","pathname","dotIndex","name","extension"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const fetch: (...args: Parameters<typeof window.fetch>) => ReturnType<typeof window.fetch>;
@@ -0,0 +1,14 @@
1
+ let fn;
2
+ export const fetch = async function fetch(...args) {
3
+ if (!fn) {
4
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
5
+ fn = window.fetch.bind(window);
6
+ }
7
+ else {
8
+ const fr = await import('fetch-retry');
9
+ const fetchWithRetry = fr.default(globalThis.fetch);
10
+ fn = fetchWithRetry;
11
+ }
12
+ }
13
+ return fn.apply(null, args);
14
+ };
@@ -1,5 +1,6 @@
1
1
  import { log } from './logger';
2
2
  import { deepFreeze } from './shared';
3
+ import { fetch } from './fetch';
3
4
  let importJsonNotAvailable;
4
5
  const jsonFrozen = new WeakSet();
5
6
  // ET: this is a workaround for Vite that analyzes dynamic imports and removes 'with' option
@@ -46,6 +47,7 @@ async function loadJson(url, fetchCache, signal) {
46
47
  return fetchCache.get(key);
47
48
  }
48
49
  const dataPromise = (async function loadJsonInner() {
50
+ // in browser just use fetch, for node - fetch-retry
49
51
  const response = await fetch(url, { signal });
50
52
  if (!response.ok) {
51
53
  throw new Error(`Failed to fetch JSON from ${url}`);
@@ -1,6 +1,5 @@
1
1
  import debug from 'debug';
2
- import fetchRetry from 'fetch-retry';
3
- const fetchWithRetry = fetchRetry(fetch);
2
+ import { fetch } from './fetch';
4
3
  const log = debug('efp:loader:loadScript');
5
4
  /**
6
5
  * @deprecated Use loadScript directly instead.
@@ -81,7 +80,7 @@ async function loadInNode(scriptUrl, signal) {
81
80
  }
82
81
  let res;
83
82
  try {
84
- res = await fetchWithRetry(scriptUrl, { signal });
83
+ res = await fetch(scriptUrl, { signal });
85
84
  }
86
85
  catch (err) {
87
86
  // Node / WHATWG fetch uses AbortError on abort
@@ -62,23 +62,13 @@ function* localizeDataJson(data, dataUrlBase, localDataUrlBase) {
62
62
  yield r.file;
63
63
  exhibitor.leadingImageUrl = r.localUrl;
64
64
  }
65
- for (const url of exhibitor.gallery || []) {
65
+ const gallery = exhibitor.gallery || [];
66
+ for (let i = 0; i < gallery.length; i++) {
67
+ const url = gallery[i];
66
68
  const r = z(url);
67
69
  yield r.file;
70
+ gallery[i] = r.localUrl;
68
71
  }
69
- // if (exhibitor.logo) {
70
- // const logoUrl = dataUrlBase + exhibitor.logo;
71
- // const localLogoUrl = relativeUrlToFilePath(exhibitor.logo);
72
- // const targetFilePath = localDataUrlBase + localLogoUrl;
73
- // yield { url: logoUrl, targetFilePath };
74
- // const variants = ['__small', '__tiny'];
75
- // for (const variant of variants) {
76
- // const variantLogo = logoUrl.replace(/(\.[^.]*)$/, `${variant}$1`);
77
- // const variantTargetFilePath = targetFilePath.replace(/(\.[^.]*)$/, `${variant}$1`);
78
- // yield { url: variantLogo, targetFilePath: variantTargetFilePath };
79
- // }
80
- // exhibitor.logo = targetFilePath;
81
- // }
82
72
  }
83
73
  for (const event of data.events || []) {
84
74
  if (event.logoFile) {
@@ -121,7 +111,6 @@ function addSuffix(absoluteOrRelativeUrl, suffix) {
121
111
  urlObj = new URL(absoluteOrRelativeUrl, 'http://example.com');
122
112
  absolute = false;
123
113
  }
124
- // const urlObj = new URL(absoluteOrRelativeUrl, 'http://example.com');
125
114
  const pathname = urlObj.pathname;
126
115
  const dotIndex = pathname.lastIndexOf('.');
127
116
  if (dotIndex === -1) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expofp/loader",
3
- "version": "1.0.77",
3
+ "version": "1.0.79",
4
4
  "description": "ExpoFP JavaScript loader library",
5
5
  "license": "MIT",
6
6
  "homepage": "https://expofp.com",
@@ -1,84 +0,0 @@
1
- import { i as y, p as $, j as f, k as m } from "./bundle.js";
2
- import { a as F, r as U } from "./tools-D0u8lBvQ.js";
3
- const D = async function* (a, s) {
4
- y("legacyDataResolver offlineFunc:", a);
5
- const n = s.signal, l = $(a), e = `${l}version.js`;
6
- try {
7
- await f(e, n);
8
- } catch {
9
- console.warn(`Could not load version.js at ${e}, proceeding without it`);
10
- }
11
- const t = globalThis.__fpDataVersion || (+/* @__PURE__ */ new Date()).toString(), o = F(l) + t + "/", r = `${l}data.js?v=${t}`;
12
- await f(r, n);
13
- const i = u("__data");
14
- yield* _(i, l, o), yield { text: `var __data = ${JSON.stringify(i, null, 2)};`, targetFilePath: `${o}data.js` }, yield { url: `${l}wf.data.js?v=${t}`, targetFilePath: `${o}wf.data.js` };
15
- const d = `${l}fp.svg.js?v=${t}`;
16
- yield { url: d, targetFilePath: `${o}fp.svg.js` }, await f(d, n);
17
- const h = (u("__fpLayers") || []).map((c) => `fp.svg.${c.name}.js`);
18
- for (const c of h)
19
- yield { url: `${l}${c}?v=${t}`, targetFilePath: `${o}${c}` };
20
- return `${m}:${o}`;
21
- };
22
- function* _(a, s, n) {
23
- if (a.logo) {
24
- const e = l(a.logo);
25
- yield e.file, a.logo = e.localUrl;
26
- }
27
- for (const e of a.exhibitors || []) {
28
- if (e.logo) {
29
- const t = l(e.logo);
30
- yield t.file;
31
- const o = ["__small", "__tiny"];
32
- for (const r of o) {
33
- const i = p(t.file.url, r), g = p(t.file.targetFilePath, r);
34
- yield { url: i, targetFilePath: g };
35
- }
36
- e.logo = t.localUrl;
37
- }
38
- if (e.leadingImageUrl) {
39
- const t = l(e.leadingImageUrl);
40
- yield t.file, e.leadingImageUrl = t.localUrl;
41
- }
42
- for (const t of e.gallery || [])
43
- yield l(t).file;
44
- }
45
- for (const e of a.events || []) {
46
- if (e.logoFile) {
47
- const t = l(e.logoFile);
48
- yield t.file, e.logoFile = t.localUrl;
49
- }
50
- for (const t of e.speakers || [])
51
- if (t.photoFile) {
52
- const o = l(t.photoFile);
53
- yield o.file, t.photoFile = o.localUrl;
54
- }
55
- }
56
- function l(e) {
57
- const t = s + e, o = U(e), r = n + o;
58
- return {
59
- file: { url: t, targetFilePath: r },
60
- localUrl: o
61
- };
62
- }
63
- }
64
- function u(a) {
65
- const s = globalThis[a];
66
- return delete globalThis[a], s;
67
- }
68
- function p(a, s) {
69
- let n, l;
70
- try {
71
- n = new URL(a), l = !0;
72
- } catch {
73
- n = new URL(a, "http://example.com"), l = !1;
74
- }
75
- const e = n.pathname, t = e.lastIndexOf(".");
76
- if (t === -1)
77
- return a;
78
- const o = e.substring(0, t), r = e.substring(t);
79
- return n.pathname = o + s + r, l ? n.toString() : n.pathname.slice(1) + n.search;
80
- }
81
- export {
82
- D as offlineFunc
83
- };
84
- //# sourceMappingURL=legacyDataUrlBaseResolver.offlineFunc-BPlVJ7wy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"legacyDataUrlBaseResolver.offlineFunc-BPlVJ7wy.js","sources":["../../src/resolvers/legacyDataUrlBaseResolver.offlineFunc.ts"],"sourcesContent":["import { loadScript } from '../loadScript';\nimport { makeTargetPathFromUrl, relativeUrlToFilePath } from '../offline/tools';\nimport { parseRefValue } from '../resolve';\nimport { LocalFetchFile, OfflineFunc } from '../types';\nimport { log, SCHEMA } from './legacyDataUrlBaseResolver';\n\nexport const offlineFunc: OfflineFunc = async function* (ref: string, context: any) {\n log('legacyDataResolver offlineFunc:', ref);\n const signal = context.signal;\n const dataUrlBase = parseRefValue(ref);\n const versionUrl = `${dataUrlBase}version.js`;\n try {\n await loadScript(versionUrl, signal);\n } catch {\n console.warn(`Could not load version.js at ${versionUrl}, proceeding without it`);\n }\n\n const version = (globalThis as any).__fpDataVersion || (+new Date()).toString();\n const localDataUrlBase = makeTargetPathFromUrl(dataUrlBase) + version + '/';\n\n const dataUrl = `${dataUrlBase}data.js?v=${version}`;\n\n // data.js\n await loadScript(dataUrl, signal);\n const __data = getAndDeleteGlobal('__data');\n yield* localizeDataJson(__data, dataUrlBase, localDataUrlBase);\n const text = `var __data = ${JSON.stringify(__data, null, 2)};`;\n yield { text, targetFilePath: `${localDataUrlBase}data.js` };\n\n // wf.data.js\n const wfDataUrl = `${dataUrlBase}wf.data.js?v=${version}`;\n yield { url: wfDataUrl, targetFilePath: `${localDataUrlBase}wf.data.js` };\n\n // fp.svg.js\n const fpSvgUrl = `${dataUrlBase}fp.svg.js?v=${version}`;\n yield { url: fpSvgUrl, targetFilePath: `${localDataUrlBase}fp.svg.js` };\n\n // load fp.svg.js to get __fpLayers\n await loadScript(fpSvgUrl, signal);\n const __fpLayers: { name: string }[] = getAndDeleteGlobal('__fpLayers') || [];\n const fpLayerFiles = __fpLayers.map((x) => `fp.svg.${x.name}.js`);\n for (const layerFile of fpLayerFiles) {\n // fp.svg.{layer}.js\n const layerUrl = `${dataUrlBase}${layerFile}?v=${version}`;\n yield { url: layerUrl, targetFilePath: `${localDataUrlBase}${layerFile}` };\n }\n\n return `${SCHEMA}:${localDataUrlBase}`;\n};\n\nfunction* localizeDataJson(\n data: any,\n dataUrlBase: string,\n localDataUrlBase: string\n): Generator<LocalFetchFile> {\n if (data.logo) {\n const r = z(data.logo);\n yield r.file;\n data.logo = r.localUrl;\n }\n for (const exhibitor of data.exhibitors || []) {\n if (exhibitor.logo) {\n const r = z(exhibitor.logo);\n yield r.file;\n\n const variants = ['__small', '__tiny'];\n for (const variant of variants) {\n const url = addSuffix(r.file.url, variant);\n const targetFilePath = addSuffix(r.file.targetFilePath, variant);\n yield { url, targetFilePath };\n }\n\n exhibitor.logo = r.localUrl;\n }\n if (exhibitor.leadingImageUrl) {\n const r = z(exhibitor.leadingImageUrl);\n yield r.file;\n exhibitor.leadingImageUrl = r.localUrl;\n }\n for (const url of exhibitor.gallery || []) {\n const r = z(url);\n yield r.file;\n }\n\n // if (exhibitor.logo) {\n // const logoUrl = dataUrlBase + exhibitor.logo;\n // const localLogoUrl = relativeUrlToFilePath(exhibitor.logo);\n // const targetFilePath = localDataUrlBase + localLogoUrl;\n // yield { url: logoUrl, targetFilePath };\n // const variants = ['__small', '__tiny'];\n // for (const variant of variants) {\n // const variantLogo = logoUrl.replace(/(\\.[^.]*)$/, `${variant}$1`);\n // const variantTargetFilePath = targetFilePath.replace(/(\\.[^.]*)$/, `${variant}$1`);\n // yield { url: variantLogo, targetFilePath: variantTargetFilePath };\n // }\n // exhibitor.logo = targetFilePath;\n // }\n }\n\n for (const event of data.events || []) {\n if (event.logoFile) {\n const r = z(event.logoFile);\n yield r.file;\n event.logoFile = r.localUrl;\n }\n for (const speaker of event.speakers || []) {\n if (speaker.photoFile) {\n const r = z(speaker.photoFile);\n yield r.file;\n speaker.photoFile = r.localUrl;\n }\n }\n }\n\n function z(relativeUrl: string) {\n const url = dataUrlBase + relativeUrl;\n const localUrl = relativeUrlToFilePath(relativeUrl);\n const targetFilePath = localDataUrlBase + localUrl;\n return {\n file: { url, targetFilePath },\n localUrl,\n };\n }\n}\n\nfunction getAndDeleteGlobal(globalVar: string): any {\n const value = (globalThis as any)[globalVar];\n delete (globalThis as any)[globalVar];\n return value;\n}\n\n// abs and relative paths\nfunction addSuffix(absoluteOrRelativeUrl: string, suffix: string): string {\n let urlObj: URL;\n let absolute: boolean;\n try {\n urlObj = new URL(absoluteOrRelativeUrl);\n absolute = true;\n } catch {\n urlObj = new URL(absoluteOrRelativeUrl, 'http://example.com');\n absolute = false;\n }\n\n // const urlObj = new URL(absoluteOrRelativeUrl, 'http://example.com');\n\n const pathname = urlObj.pathname;\n const dotIndex = pathname.lastIndexOf('.');\n if (dotIndex === -1) {\n return absoluteOrRelativeUrl; // no extension found\n }\n const name = pathname.substring(0, dotIndex);\n const extension = pathname.substring(dotIndex);\n urlObj.pathname = name + suffix + extension;\n if (absolute) {\n // return full absolute URL\n return urlObj.toString();\n } else {\n return urlObj.pathname.slice(1) + urlObj.search;\n }\n}\n"],"names":["offlineFunc","ref","context","log","signal","dataUrlBase","parseRefValue","versionUrl","loadScript","version","localDataUrlBase","makeTargetPathFromUrl","dataUrl","__data","getAndDeleteGlobal","localizeDataJson","fpSvgUrl","fpLayerFiles","x","layerFile","SCHEMA","data","r","z","exhibitor","variants","variant","url","addSuffix","targetFilePath","event","speaker","relativeUrl","localUrl","relativeUrlToFilePath","globalVar","value","absoluteOrRelativeUrl","suffix","urlObj","absolute","pathname","dotIndex","name","extension"],"mappings":"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"}