@myop/sdk 0.3.33 → 0.3.36

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 (39) hide show
  1. package/dist/bundled-declarations.d.ts +66 -3
  2. package/dist/cjs/{_IframeSDK.e5b2bc49.js → _IframeSDK.3283252f.js} +76 -34
  3. package/dist/cjs/{_IframeSDK.e5b2bc49.js.map → _IframeSDK.3283252f.js.map} +2 -2
  4. package/dist/cjs/_IframeSDK.652f4774.min.js +1 -0
  5. package/dist/cjs/{_MyopHelpers.95610381.js → _MyopHelpers.08d1cf5d.js} +68 -20
  6. package/dist/cjs/{_MyopHelpers.95610381.js.map → _MyopHelpers.08d1cf5d.js.map} +2 -2
  7. package/dist/cjs/_MyopHelpers.59521d8f.min.js +1 -0
  8. package/dist/cjs/_WebComponentSDK.8fe7c9bf.min.js +1 -0
  9. package/dist/cjs/{_WebComponentSDK.a7e660ab.js → _WebComponentSDK.e84be6ea.js} +76 -34
  10. package/dist/cjs/{_WebComponentSDK.a7e660ab.js.map → _WebComponentSDK.e84be6ea.js.map} +2 -2
  11. package/dist/cjs/_hostSDK.de2d767e.min.js +1 -0
  12. package/dist/cjs/{_hostSDK.1905850e.js → _hostSDK.fa5b3ccf.js} +76 -34
  13. package/dist/cjs/{_hostSDK.1905850e.js.map → _hostSDK.fa5b3ccf.js.map} +2 -2
  14. package/dist/cjs/myop_sdk.js +14 -14
  15. package/dist/cjs/myop_sdk.js.map +1 -1
  16. package/dist/cjs/myop_sdk.min.js +1 -1
  17. package/dist/cjs-bundled/myop_sdk.bundled.js +85 -36
  18. package/dist/cjs-bundled/myop_sdk.bundled.js.map +2 -2
  19. package/dist/cjs-bundled/myop_sdk.bundled.min.js +1 -1
  20. package/dist/module/Iframe/index.js +79 -35
  21. package/dist/module/Iframe/index.js.map +2 -2
  22. package/dist/module/SDK.js +87 -36
  23. package/dist/module/SDK.js.map +2 -2
  24. package/dist/module/embeddedSDK.js +1 -1
  25. package/dist/module/helpers/CloudRepository.d.ts +43 -0
  26. package/dist/module/helpers/cloudRepositoryHelpers.d.ts +21 -2
  27. package/dist/module/helpers/index.js +70 -21
  28. package/dist/module/helpers/index.js.map +2 -2
  29. package/dist/module/host/embeddedSDK.js +1 -1
  30. package/dist/module/host/index.js +79 -35
  31. package/dist/module/host/index.js.map +2 -2
  32. package/dist/module/host/loaders/HTMLComponentLoader.d.ts +2 -1
  33. package/dist/module/webcomponent/index.js +79 -35
  34. package/dist/module/webcomponent/index.js.map +2 -2
  35. package/package.json +1 -1
  36. package/dist/cjs/_IframeSDK.c7a53057.min.js +0 -1
  37. package/dist/cjs/_MyopHelpers.ca1b3a3c.min.js +0 -1
  38. package/dist/cjs/_WebComponentSDK.3a72ed95.min.js +0 -1
  39. package/dist/cjs/_hostSDK.0529d5ed.min.js +0 -1
@@ -2139,7 +2139,7 @@ var WebcomponentLoader = class extends BaseMyopLoader {
2139
2139
  };
2140
2140
 
2141
2141
  // version:myop-sdk-version
2142
- var myop_sdk_version_default = "0.3.33";
2142
+ var myop_sdk_version_default = "0.3.36";
2143
2143
 
2144
2144
  // src/host/embeddedSDK.ts
2145
2145
  var EMBEDDED_SDK_CONTENT = "";
@@ -2148,7 +2148,7 @@ var HAS_EMBEDDED_SDK = false;
2148
2148
  // src/host/loaders/HTMLComponentLoader.ts
2149
2149
  var MYOP_WEB_COMPONENT_MARKER = "<!-- myop-web-component -->";
2150
2150
  var MYOP_WEB_COMPONENT_SCRIPT_ID = "myop-web-component";
2151
- var extractedWebComponentScripts = /* @__PURE__ */ new Set();
2151
+ var extractedWebComponentScripts = /* @__PURE__ */ new Map();
2152
2152
  var seen2 = [];
2153
2153
  var sdk;
2154
2154
  var getInitiatedSdk = async () => {
@@ -2389,19 +2389,25 @@ var HTMLComponentLoader = class extends BaseMyopLoader {
2389
2389
  return (script == null ? void 0 : script.textContent) || null;
2390
2390
  }
2391
2391
  /**
2392
- * Execute the web component script on the host document
2392
+ * Execute the web component script on the host document.
2393
+ * Returns the custom element tag name this script registered.
2393
2394
  */
2394
2395
  executeWebComponentScript(scriptContent, scriptId) {
2395
- if (extractedWebComponentScripts.has(scriptId)) {
2396
- console.log("[MyopWebComponent] Script already executed for ".concat(scriptId, ", skipping"));
2397
- return;
2396
+ const cachedTagName = extractedWebComponentScripts.get(scriptId);
2397
+ if (cachedTagName) {
2398
+ console.log("[MyopWebComponent] Script already executed for ".concat(scriptId, ", reusing <").concat(cachedTagName, ">"));
2399
+ return cachedTagName;
2398
2400
  }
2399
2401
  const script = document.createElement("script");
2400
2402
  script.textContent = scriptContent;
2401
2403
  script.id = "myop-extracted-".concat(scriptId);
2402
2404
  document.head.appendChild(script);
2403
- extractedWebComponentScripts.add(scriptId);
2404
- console.log("[MyopWebComponent] Executed web component script: ".concat(scriptId));
2405
+ const tagName = window.__MYOP_TAG_NAME__;
2406
+ if (tagName) {
2407
+ extractedWebComponentScripts.set(scriptId, tagName);
2408
+ }
2409
+ console.log("[MyopWebComponent] Executed web component script: ".concat(scriptId, " -> <").concat(tagName, ">"));
2410
+ return tagName;
2405
2411
  }
2406
2412
  /**
2407
2413
  * Load a Myop Web Component (extracted and run on host document)
@@ -2412,15 +2418,10 @@ var HTMLComponentLoader = class extends BaseMyopLoader {
2412
2418
  throw new Error('[MyopWebComponent] No <script id="myop-web-component"> found in HTML');
2413
2419
  }
2414
2420
  const scriptId = "".concat(componentDefinition.id, "-").concat(skin.id);
2415
- const previousTagName = window.__MYOP_TAG_NAME__;
2416
- this.executeWebComponentScript(scriptContent, scriptId);
2417
- const tagName = window.__MYOP_TAG_NAME__;
2421
+ const tagName = this.executeWebComponentScript(scriptContent, scriptId);
2418
2422
  if (!tagName) {
2419
2423
  throw new Error("[MyopWebComponent] Script did not set window.__MYOP_TAG_NAME__");
2420
2424
  }
2421
- if (previousTagName && previousTagName !== tagName) {
2422
- console.warn("[MyopWebComponent] __MYOP_TAG_NAME__ changed from ".concat(previousTagName, " to ").concat(tagName));
2423
- }
2424
2425
  const domId = "myop-comp-".concat(uuidv4());
2425
2426
  const element = document.createElement(tagName);
2426
2427
  element.id = domId;
@@ -2596,24 +2597,33 @@ var _CloudRepository = class _CloudRepository {
2596
2597
  getPreloadedParams(componentId) {
2597
2598
  return this.preloadedComponents[componentId];
2598
2599
  }
2600
+ /**
2601
+ * Resolve a component config: fetch it once, then serve it from this
2602
+ * repository's cache.
2603
+ *
2604
+ * This is the name to use. `fetchComponentV2` is the same method under its
2605
+ * versioned name and stays for backward compatibility — note that the
2606
+ * unversioned `fetchComponent` is a *deprecated v1* API and is NOT this.
2607
+ *
2608
+ * Completes the trio with {@link getResolvedConfig} (synchronous read of an
2609
+ * already-resolved config) and {@link hydrateComponent} (seed one you
2610
+ * already hold).
2611
+ *
2612
+ * Prefer the module-level `preloadComponents([id])` in app code; reach for
2613
+ * this when you need an isolated repository instance whose cache lifetime
2614
+ * you control — a server with its own TTL, for example.
2615
+ */
2616
+ async resolveComponent(componentId, env, preview) {
2617
+ return this.fetchComponentV2(componentId, env, preview);
2618
+ }
2599
2619
  /**
2600
2620
  * Fetch a v2 component config
2601
2621
  * If env/preview not specified and component was preloaded, uses preloaded params
2622
+ *
2623
+ * @see resolveComponent — the unversioned name for this method
2602
2624
  */
2603
2625
  async fetchComponentV2(componentId, environmentIdentifier, preview) {
2604
- const preloaded = this.preloadedComponents[componentId];
2605
- const hasExplicitParams = environmentIdentifier !== void 0 || preview !== void 0;
2606
- let env;
2607
- let usePreview;
2608
- if (!hasExplicitParams && preloaded) {
2609
- env = preloaded.env;
2610
- usePreview = preloaded.preview;
2611
- } else {
2612
- env = environmentIdentifier || this._defaultEnv;
2613
- const hasEffectiveEnv = environmentIdentifier || this._envExplicitlySet;
2614
- usePreview = preview === true ? true : preview === false ? false : !hasEffectiveEnv;
2615
- }
2616
- const cacheKey = "".concat(componentId, ":").concat(env, ":").concat(usePreview ? "preview" : "live");
2626
+ const { env, usePreview, cacheKey } = this.resolveParams(componentId, environmentIdentifier, preview);
2617
2627
  console.log("[CloudRepository] fetchComponentV2", {
2618
2628
  componentId: componentId.slice(0, 8) + "...",
2619
2629
  env,
@@ -2682,20 +2692,52 @@ var _CloudRepository = class _CloudRepository {
2682
2692
  */
2683
2693
  getResolvedConfig(componentId, env, preview) {
2684
2694
  var _a;
2695
+ const { cacheKey } = this.resolveParams(componentId, env, preview);
2696
+ return ((_a = this.variants[cacheKey]) == null ? void 0 : _a.resolved) || null;
2697
+ }
2698
+ /**
2699
+ * Resolve which (env, preview) pair — and therefore which cache key — a call
2700
+ * for `componentId` refers to.
2701
+ *
2702
+ * Single source of truth for fetchComponentV2, getResolvedConfig and
2703
+ * hydrateComponent, so a hydrated config always lands on the key a later
2704
+ * fetch will look under.
2705
+ */
2706
+ resolveParams(componentId, environmentIdentifier, preview) {
2685
2707
  const preloaded = this.preloadedComponents[componentId];
2686
- const hasExplicitParams = env !== void 0 || preview !== void 0;
2687
- let resolvedEnv;
2708
+ const hasExplicitParams = environmentIdentifier !== void 0 || preview !== void 0;
2709
+ let env;
2688
2710
  let usePreview;
2689
2711
  if (!hasExplicitParams && preloaded) {
2690
- resolvedEnv = preloaded.env;
2712
+ env = preloaded.env;
2691
2713
  usePreview = preloaded.preview;
2692
2714
  } else {
2693
- resolvedEnv = env || this._defaultEnv;
2694
- const hasEffectiveEnv = env || this._envExplicitlySet;
2715
+ env = environmentIdentifier || this._defaultEnv;
2716
+ const hasEffectiveEnv = environmentIdentifier || this._envExplicitlySet;
2695
2717
  usePreview = preview === true ? true : preview === false ? false : !hasEffectiveEnv;
2696
2718
  }
2697
- const cacheKey = "".concat(componentId, ":").concat(resolvedEnv, ":").concat(usePreview ? "preview" : "live");
2698
- return ((_a = this.variants[cacheKey]) == null ? void 0 : _a.resolved) || null;
2719
+ return { env, usePreview, cacheKey: "".concat(componentId, ":").concat(env, ":").concat(usePreview ? "preview" : "live") };
2720
+ }
2721
+ /**
2722
+ * Seed an already-resolved component config into the cache, without any
2723
+ * network request.
2724
+ *
2725
+ * The counterpart to {@link fetchComponentV2}: use it when the config was
2726
+ * resolved somewhere else — most often on a server, then embedded in the
2727
+ * page — so the browser can render the component with no round trip.
2728
+ *
2729
+ * After hydrating, `fetchComponentV2`, `getResolvedConfig` and `isPreloaded`
2730
+ * all answer for this component from memory.
2731
+ *
2732
+ * Pass the same `env` / `preview` the config was resolved with; the defaults
2733
+ * match what a plain `fetchComponentV2(componentId)` would have used.
2734
+ */
2735
+ hydrateComponent(componentId, config, env, preview) {
2736
+ const { env: resolvedEnv, usePreview, cacheKey } = this.resolveParams(componentId, env, preview);
2737
+ const promise = Promise.resolve(config);
2738
+ promise.resolved = config;
2739
+ this.variants[cacheKey] = promise;
2740
+ this.preloadedComponents[componentId] = { env: resolvedEnv, preview: usePreview };
2699
2741
  }
2700
2742
  // ============ V1 Methods (Legacy) ============
2701
2743
  /**