one
Version:
One is a React framework for web, iOS, and Android apps.
1 lines • 3.91 kB
Source Map (JSON)
{"version":3,"file":"skewProtection.js","names":[],"sources":["esm/skewProtection.js"],"sourcesContent":["import { CACHE_KEY } from \"./constants\";\nimport { getURL } from \"./getURL\";\nimport { handleSkewError } from \"./utils/dynamicImport\";\nlet stale = false;\nlet polling = null;\nlet inFlightCheck = null;\nfunction isVersionStale() {\n if (stale) return true;\n if (typeof window !== \"undefined\" && window.__oneVersionStale) return true;\n return false;\n}\nfunction markStale(version) {\n stale = true;\n if (typeof window !== \"undefined\") {\n ;\n window.__oneVersionStale = true;\n window.dispatchEvent(new CustomEvent(\"one-version-update\", { detail: { version } }));\n }\n}\nfunction checkSkewAndReload() {\n if (typeof window === \"undefined\") return Promise.resolve(false);\n if (process.env.ONE_SKEW_PROTECTION === \"false\") return Promise.resolve(false);\n if (isVersionStale()) {\n handleSkewError();\n return Promise.resolve(true);\n }\n if (inFlightCheck) return inFlightCheck;\n inFlightCheck = (async () => {\n try {\n const res = await fetch(`${getURL()}/version.json`, {\n headers: { \"cache-control\": \"no-cache\", pragma: \"no-cache\" }\n });\n if (!res.ok) return false;\n const data = await res.json();\n if (data.version && data.version !== CACHE_KEY) {\n markStale(data.version);\n handleSkewError();\n return true;\n }\n return false;\n } catch {\n return false;\n } finally {\n inFlightCheck = null;\n }\n })();\n return inFlightCheck;\n}\nfunction setupSkewProtection() {\n if (typeof window === \"undefined\") return;\n if (process.env.NODE_ENV === \"development\") return;\n if (process.env.ONE_SKEW_PROTECTION !== \"proactive\") return;\n const POLL_INTERVAL = 12e4;\n const baseUrl = getURL();\n async function check() {\n try {\n const res = await fetch(`${baseUrl}/version.json`, {\n headers: { \"cache-control\": \"no-cache\", pragma: \"no-cache\" }\n });\n if (!res.ok) {\n polling = setTimeout(check, POLL_INTERVAL);\n return;\n }\n const data = await res.json();\n if (data.version !== CACHE_KEY) {\n markStale(data.version);\n return;\n }\n } catch {\n }\n polling = setTimeout(check, POLL_INTERVAL);\n }\n polling = setTimeout(check, POLL_INTERVAL);\n}\nexport {\n checkSkewAndReload,\n isVersionStale,\n setupSkewProtection\n};\n//# sourceMappingURL=skewProtection.js.map\n"],"mappings":";;;;;AAGA,IAAI,QAAQ;AACZ,IAAI,UAAU;AACd,IAAI,gBAAgB;AACpB,SAAS,iBAAiB;CACxB,IAAI,OAAO,OAAO;CAClB,IAAI,OAAO,WAAW,eAAe,OAAO,mBAAmB,OAAO;CACtE,OAAO;AACT;AACA,SAAS,UAAU,SAAS;CAC1B,QAAQ;CACR,IAAI,OAAO,WAAW,aAAa;EACjC;EACA,OAAO,oBAAoB;EAC3B,OAAO,cAAc,IAAI,YAAY,sBAAsB,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;CACrF;AACF;AACA,SAAS,qBAAqB;CAC5B,IAAI,OAAO,WAAW,aAAa,OAAO,QAAQ,QAAQ,KAAK;CAC/D,IAAI,QAAQ,IAAI,wBAAwB,SAAS,OAAO,QAAQ,QAAQ,KAAK;CAC7E,IAAI,eAAe,GAAG;EACpB,gBAAgB;EAChB,OAAO,QAAQ,QAAQ,IAAI;CAC7B;CACA,IAAI,eAAe,OAAO;CAC1B,iBAAiB,YAAY;EAC3B,IAAI;GACF,MAAM,MAAM,MAAM,MAAM,GAAG,OAAO,EAAE,gBAAgB,EAClD,SAAS;IAAE,iBAAiB;IAAY,QAAQ;GAAW,EAC7D,CAAC;GACD,IAAI,CAAC,IAAI,IAAI,OAAO;GACpB,MAAM,OAAO,MAAM,IAAI,KAAK;GAC5B,IAAI,KAAK,WAAW,KAAK,YAAY,WAAW;IAC9C,UAAU,KAAK,OAAO;IACtB,gBAAgB;IAChB,OAAO;GACT;GACA,OAAO;EACT,QAAQ;GACN,OAAO;EACT,UAAU;GACR,gBAAgB;EAClB;CACF,EAAC,CAAE;CACH,OAAO;AACT;AACA,SAAS,sBAAsB;CAC7B,IAAI,OAAO,WAAW,aAAa;CACnC,IAAI,QAAQ,IAAI,aAAa,eAAe;CAC5C,IAAI,QAAQ,IAAI,wBAAwB,aAAa;CACrD,MAAM,gBAAgB;CACtB,MAAM,UAAU,OAAO;CACvB,eAAe,QAAQ;EACrB,IAAI;GACF,MAAM,MAAM,MAAM,MAAM,GAAG,QAAQ,gBAAgB,EACjD,SAAS;IAAE,iBAAiB;IAAY,QAAQ;GAAW,EAC7D,CAAC;GACD,IAAI,CAAC,IAAI,IAAI;IACX,UAAU,WAAW,OAAO,aAAa;IACzC;GACF;GACA,MAAM,OAAO,MAAM,IAAI,KAAK;GAC5B,IAAI,KAAK,YAAY,WAAW;IAC9B,UAAU,KAAK,OAAO;IACtB;GACF;EACF,QAAQ,CACR;EACA,UAAU,WAAW,OAAO,aAAa;CAC3C;CACA,UAAU,WAAW,OAAO,aAAa;AAC3C"}