@mochabug/adapt-sdk 0.1.4 → 0.1.6
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/README.md +3 -3
- package/dist/cjs/api.cjs.map +2 -2
- package/dist/cjs/frontend.cjs +1 -1
- package/dist/cjs/frontend.cjs.map +3 -3
- package/dist/cjs/router.cjs.map +2 -2
- package/dist/esm/api.mjs.map +2 -2
- package/dist/esm/frontend.mjs +1 -1
- package/dist/esm/frontend.mjs.map +3 -3
- package/dist/esm/router.mjs.map +2 -2
- package/dist/frontend.d.ts +15 -6
- package/dist/frontend.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/esm/frontend.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var c=null;function z(e=!1){if(e)return"dev-token";if(c!==null)return c;if(typeof window>"u"||typeof location>"u")throw new Error("getToken() is only available in browser environments");let t=location.hash.slice(1);if(!t)throw new Error("No token found in URL hash");let n=new URLSearchParams(t).get("mb_token");if(!n)throw new Error('Token "mb_token" not found in URL hash');return c=decodeURIComponent(n),c}function M(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function k(e){return M(e)&&e.type==="adapt-darkMode"&&typeof e.darkMode=="boolean"}function b(e){return Number.isFinite(e)&&e>=1}function v(e){return M(e)&&typeof e.postMessage=="function"}var d=null,p=null,l=null,i=!1,h=-1,m=-1,r=null,a=null,R=16;function s(){return typeof window<"u"&&typeof document<"u"&&typeof window.postMessage=="function"}function w(){if(!s())return!1;try{return window.self!==window.top}catch{return!0}}function E(){let{body:e,documentElement:t}=document;if(!e||!t)return null;let n=Math.max(e.scrollHeight,e.offsetHeight,t.clientHeight,t.scrollHeight,t.offsetHeight),o=Math.max(e.scrollWidth,e.offsetWidth,t.clientWidth,t.scrollWidth,t.offsetWidth);return!b(o)||!b(n)?null:{width:o,height:n}}function f(){!i||r!==null||(r=setTimeout(()=>{r=null,i&&u()},R))}function u(){if(!s()||!w())return;let e=window.parent;if(!v(e))return;let t=E();if(!t)return;let{width:n,height:o}=t;if(!(n===h&&o===m)){h=n,m=o;try{e.postMessage({type:"adapt-resize",width:n,height:o},"*")}catch{}}}function y(e){let t;try{t=e.data}catch{return}if(k(t)&&l)try{l(t.darkMode)}catch{}}function T(){!s()||!w()||(d=new ResizeObserver(f),document.body&&d.observe(document.body),document.documentElement&&d.observe(document.documentElement),document.body&&(p=new MutationObserver(f),p.observe(document.body,{childList:!0,subtree:!0,attributes:!0,characterData:!0})),document.addEventListener("load",f,!0),document.fonts?.ready?.then(()=>{i&&u()}),document.readyState==="complete"?u():(a=u,window.addEventListener("load",a)))}function g(){s()&&(window.removeEventListener("message",y),document.removeEventListener("load",f,!0),a&&(window.removeEventListener("load",a),a=null),r!==null&&(clearTimeout(r),r=null),d?.disconnect(),d=null,p?.disconnect(),p=null,l=null,i=!1,h=-1,m=-1)}function L(e){return s()?i?(e&&(l=e),g):(l=e??null,window.addEventListener("message",y),T(),i=!0,g):()=>{}}function A(){u()}function x(e){if(!s()||!w())return;let t=window.parent;if(v(t))try{t.postMessage(e,"*")}catch{}}export{z as getToken,L as initIframeCommunication,A as sendResize,x as sendToParent};
|
|
2
2
|
//# sourceMappingURL=frontend.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/frontend.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n *
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["cachedToken", "getToken", "isDevelopment", "
|
|
4
|
+
"sourcesContent": ["/**\n * Frontend utilities for Adapt plugins running in browser/iframe contexts\n */\n\nlet cachedToken: string | null = null;\n\nexport function getToken(isDevelopment = false): string {\n if (isDevelopment) return 'dev-token';\n if (cachedToken !== null) return cachedToken;\n\n if (typeof window === 'undefined' || typeof location === 'undefined') {\n throw new Error('getToken() is only available in browser environments');\n }\n\n const hash = location.hash.slice(1);\n if (!hash) throw new Error('No token found in URL hash');\n\n const token = new URLSearchParams(hash).get('mb_token');\n if (!token) throw new Error('Token \"mb_token\" not found in URL hash');\n\n cachedToken = decodeURIComponent(token);\n return cachedToken;\n}\n\n// Message types\nexport interface AdaptResizeMessage {\n type: 'adapt-resize';\n width: number;\n height: number;\n}\n\nexport interface AdaptDarkModeMessage {\n type: 'adapt-darkMode';\n darkMode: boolean;\n}\n\nexport type AdaptParentMessage = AdaptDarkModeMessage;\nexport type AdaptChildMessage = AdaptResizeMessage;\n\n// Type guards\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isDarkModeMessage(data: unknown): data is AdaptDarkModeMessage {\n return (\n isObject(data) &&\n data.type === 'adapt-darkMode' &&\n typeof data.darkMode === 'boolean'\n );\n}\n\nfunction isValidDimension(value: number): boolean {\n return Number.isFinite(value) && value >= 1;\n}\n\nfunction hasPostMessage(\n obj: unknown\n): obj is { postMessage: typeof postMessage } {\n return isObject(obj) && typeof obj.postMessage === 'function';\n}\n\n// State\nlet resizeObserver: ResizeObserver | null = null;\nlet mutationObserver: MutationObserver | null = null;\nlet darkModeCallback: ((darkMode: boolean) => void) | null = null;\nlet initialized = false;\nlet lastSentWidth = -1;\nlet lastSentHeight = -1;\nlet throttleTimer: ReturnType<typeof setTimeout> | null = null;\nlet windowLoadHandler: (() => void) | null = null;\n\nconst THROTTLE_MS = 16;\n\nfunction isBrowser(): boolean {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof window.postMessage === 'function'\n );\n}\n\nfunction isInIframe(): boolean {\n if (!isBrowser()) return false;\n try {\n return window.self !== window.top;\n } catch {\n return true;\n }\n}\n\nfunction getContentDimensions(): { width: number; height: number } | null {\n const { body, documentElement: html } = document;\n if (!body || !html) return null;\n\n const height = Math.max(\n body.scrollHeight,\n body.offsetHeight,\n html.clientHeight,\n html.scrollHeight,\n html.offsetHeight\n );\n\n const width = Math.max(\n body.scrollWidth,\n body.offsetWidth,\n html.clientWidth,\n html.scrollWidth,\n html.offsetWidth\n );\n\n if (!isValidDimension(width) || !isValidDimension(height)) return null;\n\n return { width, height };\n}\n\nfunction sendResizeThrottled(): void {\n if (!initialized || throttleTimer !== null) return;\n\n throttleTimer = setTimeout(() => {\n throttleTimer = null;\n if (initialized) sendResizeImmediate();\n }, THROTTLE_MS);\n}\n\nfunction sendResizeImmediate(): void {\n if (!isBrowser() || !isInIframe()) return;\n\n const parent = window.parent;\n if (!hasPostMessage(parent)) return;\n\n const dims = getContentDimensions();\n if (!dims) return;\n\n const { width, height } = dims;\n if (width === lastSentWidth && height === lastSentHeight) return;\n\n lastSentWidth = width;\n lastSentHeight = height;\n\n try {\n parent.postMessage(\n { type: 'adapt-resize', width, height } satisfies AdaptResizeMessage,\n '*'\n );\n } catch {}\n}\n\nfunction handleMessage(event: MessageEvent): void {\n let data: unknown;\n try {\n data = event.data;\n } catch {\n return;\n }\n\n if (isDarkModeMessage(data) && darkModeCallback) {\n try {\n darkModeCallback(data.darkMode);\n } catch {}\n }\n}\n\nfunction setupObservers(): void {\n if (!isBrowser() || !isInIframe()) return;\n\n resizeObserver = new ResizeObserver(sendResizeThrottled);\n if (document.body) resizeObserver.observe(document.body);\n if (document.documentElement)\n resizeObserver.observe(document.documentElement);\n\n if (document.body) {\n mutationObserver = new MutationObserver(sendResizeThrottled);\n mutationObserver.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n characterData: true\n });\n }\n\n document.addEventListener('load', sendResizeThrottled, true);\n\n document.fonts?.ready?.then(() => {\n if (initialized) sendResizeImmediate();\n });\n\n if (document.readyState === 'complete') {\n sendResizeImmediate();\n } else {\n windowLoadHandler = sendResizeImmediate;\n window.addEventListener('load', windowLoadHandler);\n }\n}\n\nfunction cleanup(): void {\n if (!isBrowser()) return;\n\n window.removeEventListener('message', handleMessage);\n document.removeEventListener('load', sendResizeThrottled, true);\n\n if (windowLoadHandler) {\n window.removeEventListener('load', windowLoadHandler);\n windowLoadHandler = null;\n }\n\n if (throttleTimer !== null) {\n clearTimeout(throttleTimer);\n throttleTimer = null;\n }\n\n resizeObserver?.disconnect();\n resizeObserver = null;\n\n mutationObserver?.disconnect();\n mutationObserver = null;\n\n darkModeCallback = null;\n initialized = false;\n lastSentWidth = -1;\n lastSentHeight = -1;\n}\n\nexport function initIframeCommunication(\n onDarkModeChange?: (darkMode: boolean) => void\n): () => void {\n if (!isBrowser()) return () => {};\n\n if (initialized) {\n if (onDarkModeChange) darkModeCallback = onDarkModeChange;\n return cleanup;\n }\n\n darkModeCallback = onDarkModeChange ?? null;\n window.addEventListener('message', handleMessage);\n setupObservers();\n initialized = true;\n\n return cleanup;\n}\n\nexport function sendResize(): void {\n sendResizeImmediate();\n}\n\nexport function sendToParent(message: AdaptChildMessage): void {\n if (!isBrowser() || !isInIframe()) return;\n\n const parent = window.parent;\n if (!hasPostMessage(parent)) return;\n\n try {\n parent.postMessage(message, '*');\n } catch {}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["cachedToken", "getToken", "isDevelopment", "hash", "token", "isObject", "value", "isDarkModeMessage", "data", "isValidDimension", "hasPostMessage", "obj", "resizeObserver", "mutationObserver", "darkModeCallback", "initialized", "lastSentWidth", "lastSentHeight", "throttleTimer", "windowLoadHandler", "THROTTLE_MS", "isBrowser", "isInIframe", "getContentDimensions", "body", "html", "height", "width", "sendResizeThrottled", "sendResizeImmediate", "parent", "dims", "handleMessage", "event", "setupObservers", "cleanup", "initIframeCommunication", "onDarkModeChange", "sendResize", "sendToParent", "message"]
|
|
7
7
|
}
|