@myop/sdk 0.1.43 → 0.1.45

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 (33) hide show
  1. package/dist/bundled-declarations.d.ts +4 -3
  2. package/dist/cjs/_IframeSDK.1993fad2.min.js +1 -0
  3. package/dist/cjs/{_IframeSDK.d40f5d05.js → _IframeSDK.6e68e329.js} +119 -47
  4. package/dist/cjs/_IframeSDK.6e68e329.js.map +7 -0
  5. package/dist/cjs/{_WebComponentSDK.82d073da.js → _WebComponentSDK.1f50ec03.js} +119 -47
  6. package/dist/cjs/_WebComponentSDK.1f50ec03.js.map +7 -0
  7. package/dist/cjs/_WebComponentSDK.c0dcea75.min.js +1 -0
  8. package/dist/cjs/{_hostSDK.cc791efe.js → _hostSDK.3215ab07.js} +119 -47
  9. package/dist/cjs/_hostSDK.3215ab07.js.map +7 -0
  10. package/dist/cjs/_hostSDK.f697667b.min.js +1 -0
  11. package/dist/cjs/myop_sdk.js +11 -11
  12. package/dist/cjs/myop_sdk.js.map +1 -1
  13. package/dist/cjs/myop_sdk.min.js +1 -1
  14. package/dist/module/Iframe/index.js +140 -58
  15. package/dist/module/Iframe/index.js.map +3 -3
  16. package/dist/module/SDK.js +142 -60
  17. package/dist/module/SDK.js.map +3 -3
  18. package/dist/module/common/index.d.ts +1 -0
  19. package/dist/module/common/index.js +1 -1
  20. package/dist/module/common/index.js.map +2 -2
  21. package/dist/module/host/componentCore.d.ts +2 -2
  22. package/dist/module/host/components/myopIframeComponent.d.ts +1 -1
  23. package/dist/module/host/index.js +140 -58
  24. package/dist/module/host/index.js.map +3 -3
  25. package/dist/module/webcomponent/index.js +140 -58
  26. package/dist/module/webcomponent/index.js.map +3 -3
  27. package/package.json +1 -1
  28. package/dist/cjs/_IframeSDK.125baf65.min.js +0 -1
  29. package/dist/cjs/_IframeSDK.d40f5d05.js.map +0 -7
  30. package/dist/cjs/_WebComponentSDK.82d073da.js.map +0 -7
  31. package/dist/cjs/_WebComponentSDK.e5da466e.min.js +0 -1
  32. package/dist/cjs/_hostSDK.78b64302.min.js +0 -1
  33. package/dist/cjs/_hostSDK.cc791efe.js.map +0 -7
@@ -684,6 +684,10 @@ var ShadowRootModeType = {
684
684
  "none": "none",
685
685
  "localFrame": "localFrame"
686
686
  };
687
+ var PropConfigBehaviorTypes = {
688
+ "message": "message",
689
+ "code": "code"
690
+ };
687
691
  var RefBehaviorType = class {
688
692
  };
689
693
  __publicField(RefBehaviorType, "code", "code");
@@ -1177,7 +1181,22 @@ var setDebugStyle = (id, type, top, container, componentElement, componentDefini
1177
1181
  container.removeChild(topText);
1178
1182
  };
1179
1183
  };
1180
- var connectProps = (component, propsConfig) => {
1184
+ var reportError = (propConfig, propName, component) => {
1185
+ if (!propConfig) {
1186
+ console.error(
1187
+ // throw new Error(
1188
+ "Error: Undefined Prop\n\nIt looks like you've tried to use a prop that hasn't been defined.\nPlease check the prop name for any typos or ensure that it is properly defined in the component's prop list.\n\n" + "Prop Name: ".concat(propName, "\n") + "Component: ".concat(component.componentDefinition.name, ", ID: ").concat(component.componentDefinition.id, "\n\n") + "For more information, refer to the component page https://dashboard.myop.dev/dashboard/component/".concat(component.componentDefinition.id, " or consult the developer guide.")
1189
+ );
1190
+ return true;
1191
+ }
1192
+ return false;
1193
+ };
1194
+ var reportUnsupported = (propConfig, propName, component) => {
1195
+ console.error(
1196
+ "Error: Code Prop Not Supported\n\nCurrently, code props are only supported in local frame components.\n\u26A0\uFE0F This is a work in progress feature \u2014 code props will be supported in upcoming versions.\n\nIn the meantime, you can use message props.\n\n" + "Prop Name: ".concat(propName, "\n") + "Component: ".concat(component.componentDefinition.name, ", ID: ").concat(component.componentDefinition.id, "\n\n") + "For more information, refer to the component page https://dashboard.myop.dev/dashboard/component/".concat(component.componentDefinition.id, " or consult the developer guide.")
1197
+ );
1198
+ };
1199
+ var connectProps = (component, propsConfig, selectedSkin) => {
1181
1200
  const propsMap = propsConfig.reduce((previousValue, currentValue) => {
1182
1201
  return __spreadProps(__spreadValues({}, previousValue), {
1183
1202
  [currentValue.name]: __spreadValues({}, currentValue)
@@ -1186,6 +1205,20 @@ var connectProps = (component, propsConfig) => {
1186
1205
  const propsHandler = {
1187
1206
  get: (_, prop) => {
1188
1207
  const propConfig = propsMap[prop];
1208
+ if (reportError(propConfig, prop, component)) {
1209
+ return false;
1210
+ }
1211
+ if (propConfig.behavior.type === PropConfigBehaviorTypes.code) {
1212
+ if (selectedSkin.loader.type === SkinLoaders.HTMLLoader) {
1213
+ const typedLoader = selectedSkin.loader;
1214
+ if (typedLoader.shadowRootMode === ShadowRootModeType.localFrame) {
1215
+ const typedPropBehavior = propConfig.behavior;
1216
+ return component.element.contentWindow[typedPropBehavior.remap || prop];
1217
+ }
1218
+ }
1219
+ reportUnsupported(propConfig, prop, component);
1220
+ return false;
1221
+ }
1189
1222
  if (propConfig.mode === "output") {
1190
1223
  return new Promise((resolve) => {
1191
1224
  const messageParams = [];
@@ -1206,29 +1239,40 @@ var connectProps = (component, propsConfig) => {
1206
1239
  },
1207
1240
  set: (_, prop, value) => {
1208
1241
  const propConfig = propsMap[prop];
1209
- if (!propConfig) {
1210
- throw new Error(
1211
- "Error: Undefined Prop\n\nIt looks like you've tried to use a prop that hasn't been defined.\nPlease check the prop name for any typos or ensure that it is properly defined in the component's prop list.\n\n" + "Prop Name: ".concat(prop, "\n") + "Component: ".concat(component.componentDefinition.name, ", ID: ").concat(component.componentDefinition.id, "\n\n") + "For more information, refer to the component page https://dashboard.myop.dev/dashboard/component/".concat(component.componentDefinition.id, " or consult the developer guide.")
1212
- );
1242
+ if (reportError(propConfig, prop, component)) {
1243
+ return false;
1213
1244
  }
1214
- if (propConfig.mode === "input") {
1215
- if (propConfig.behavior.type === "message") {
1216
- const messageParams = [];
1217
- if (propConfig.behavior.ref) {
1218
- messageParams.push(Ref.create(propConfig.behavior.ref));
1245
+ if (propConfig.behavior.type === PropConfigBehaviorTypes.code) {
1246
+ if (selectedSkin.loader.type === SkinLoaders.HTMLLoader) {
1247
+ const typedLoader = selectedSkin.loader;
1248
+ if (typedLoader.shadowRootMode === ShadowRootModeType.localFrame) {
1249
+ const typedPropBehavior = propConfig.behavior;
1250
+ component.element.contentWindow[typedPropBehavior.remap || prop] = value;
1251
+ return true;
1219
1252
  }
1220
- messageParams.push(value);
1221
- if (propConfig.behavior.params) {
1222
- messageParams.push(...propConfig.behavior.params);
1253
+ }
1254
+ reportUnsupported(propConfig, prop, component);
1255
+ return false;
1256
+ } else {
1257
+ if (propConfig.mode === "input") {
1258
+ if (propConfig.behavior.type === "message") {
1259
+ const messageParams = [];
1260
+ if (propConfig.behavior.ref) {
1261
+ messageParams.push(Ref.create(propConfig.behavior.ref));
1262
+ }
1263
+ messageParams.push(value);
1264
+ if (propConfig.behavior.params) {
1265
+ messageParams.push(...propConfig.behavior.params);
1266
+ }
1267
+ const messageCtor = messages_exports[propConfig.behavior.message];
1268
+ component.send(new messageCtor(...messageParams));
1269
+ return true;
1270
+ } else {
1271
+ throw new Error(
1272
+ "Error: Unsupported Behavior\n\nThe 'behavior' field provided is not supported.\n" + "Component: ".concat(component.componentDefinition.name, ", ID: ").concat(component.componentDefinition.id, "\n\n") + "Prop Name: ".concat(prop, "\n") + "Behavior Field: ".concat(propConfig.behavior.type, "\n\n") + "Check the documentation for valid behavior options."
1273
+ );
1274
+ return false;
1223
1275
  }
1224
- const messageCtor = messages_exports[propConfig.behavior.message];
1225
- component.send(new messageCtor(...messageParams));
1226
- return true;
1227
- } else {
1228
- throw new Error(
1229
- "Error: Unsupported Behavior\n\nThe 'behavior' field provided is not supported.\n" + "Component: ".concat(component.componentDefinition.name, ", ID: ").concat(component.componentDefinition.id, "\n\n") + "Prop Name: ".concat(prop, "\n") + "Behavior Field: ".concat(propConfig.behavior.type, "\n\n") + "Check the documentation for valid behavior options."
1230
- );
1231
- return false;
1232
1276
  }
1233
1277
  }
1234
1278
  return false;
@@ -1422,6 +1466,7 @@ var MyopIframeComponent = class extends BaseMyopComponent {
1422
1466
  this.IframeElement.style.width = "".concat(ret.content.width, "px");
1423
1467
  this.IframeElement.style.height = "".concat(ret.content.height, "px");
1424
1468
  }));
1469
+ return cleanupHandler;
1425
1470
  });
1426
1471
  __publicField(this, "setSizeBasedOnDocumentElement", () => {
1427
1472
  const cleanupHandler = this.send(new ExecuteScriptMessage(() => {
@@ -1682,7 +1727,7 @@ var WebcomponentLoader = class extends BaseMyopLoader {
1682
1727
  };
1683
1728
 
1684
1729
  // version:myop-sdk-version
1685
- var myop_sdk_version_default = "0.1.43";
1730
+ var myop_sdk_version_default = "0.1.45";
1686
1731
 
1687
1732
  // src/host/loaders/HTMLComponentLoader.ts
1688
1733
  var seen2 = [];
@@ -1756,12 +1801,14 @@ var HTMLComponentLoader = class extends BaseMyopLoader {
1756
1801
  doc.writeln('<script src="'.concat(window.myop.__ROOT_SDK_PUBLIC_URL__, "\"><\/script>\n <script>\n window.__federation__ = \n { ...window.__federation__,\n //TODO : get from ENV at build time, \n // inject value to module at build time \n // today we doing so just for the CJS version \n __public_path__ :'https://cdn.myop.dev/sdk/next',\n ...").concat(JSON.stringify(
1757
1802
  // @ts-ignore
1758
1803
  window.__federation__
1759
- ), "};\n const init = async () => {\n const {IframeSDK} = (await window.myop.rootSDK.getIframeModule());\n const sdk = new IframeSDK()\n sdk.init();\n }\n init().then();\n <\/script>"));
1804
+ ), "};\n const __myop_init = async () => {\n const {IframeSDK} = (await window.myop.rootSDK.getIframeModule());\n const sdk = new IframeSDK()\n sdk.init();\n }\n __myop_init().then();\n <\/script>"));
1760
1805
  doc.close();
1761
1806
  const comp = new MyopIframeComponent(componentDefinition, skin, container, IframeElement, options);
1762
- IframeElement.onload = () => {
1763
- comp.observeSizeBasedOnDocumentElement();
1764
- };
1807
+ if (loaderConfig.autoHeight) {
1808
+ IframeElement.onload = () => {
1809
+ comp.observeSizeBasedOnDocumentElement();
1810
+ };
1811
+ }
1765
1812
  return comp;
1766
1813
  }
1767
1814
  if (loaderConfig.shadowRootMode === ShadowRootModeType.none) {
@@ -1859,24 +1906,50 @@ var checkMyopOverride = async (componentConfig) => {
1859
1906
  const params = new URLSearchParams(url.search);
1860
1907
  const myopOverride = params.get("myopOverride");
1861
1908
  if (myopOverride) {
1862
- const [flowId, experimentId] = decompressUUIDs(myopOverride);
1863
- const flow = await CloudRepository.Main.fetchFlow(flowId);
1864
- const componentToOverride = flow.components.find((c) => c.type.id === componentConfig.type.id);
1865
- if (componentToOverride) {
1866
- if (componentToOverride.instance.skinSelector.type === SkinSelectorTypes.Segmented) {
1867
- if (componentToOverride.instance.resolvedExperiences) {
1868
- const resolvedExperience = componentToOverride.instance.resolvedExperiences.find((e) => e.id === experimentId);
1869
- if ((resolvedExperience == null ? void 0 : resolvedExperience.type) === ExperienceTypes.Segment) {
1870
- const typedResolvedExperience = resolvedExperience;
1871
- const typedSkinSelector = componentToOverride.instance.skinSelector;
1872
- const segment = typedSkinSelector.segments.find((s) => s.segmentId === typedResolvedExperience.segment.id);
1873
- if (segment) {
1874
- componentToOverride.instance.skinSelector = segment == null ? void 0 : segment.skinSelector;
1909
+ const [source, ...uuids] = decompressUUIDs(myopOverride);
1910
+ switch (source) {
1911
+ case "component":
1912
+ {
1913
+ const [componentId, skinId] = uuids;
1914
+ const componentToOverride = await CloudRepository.Main.fetchComponent(componentId);
1915
+ if (componentToOverride) {
1916
+ const skin = componentToOverride.type.skins.find((skin2) => skin2.id === skinId);
1917
+ if (skin) {
1918
+ componentToOverride.instance.skinSelector = {
1919
+ type: SkinSelectorTypes.Dedicated,
1920
+ skin: {
1921
+ id: skinId
1922
+ }
1923
+ };
1875
1924
  return componentToOverride;
1876
1925
  }
1877
1926
  }
1878
1927
  }
1879
- }
1928
+ break;
1929
+ // case 'flow': {
1930
+ default:
1931
+ {
1932
+ const [flowId, experimentId] = decompressUUIDs(myopOverride);
1933
+ const flow = await CloudRepository.Main.fetchFlow(flowId);
1934
+ const componentToOverride = flow.components.find((c) => c.type.id === componentConfig.type.id);
1935
+ if (componentToOverride) {
1936
+ if (componentToOverride.instance.skinSelector.type === SkinSelectorTypes.Segmented) {
1937
+ if (componentToOverride.instance.resolvedExperiences) {
1938
+ const resolvedExperience = componentToOverride.instance.resolvedExperiences.find((e) => e.id === experimentId);
1939
+ if ((resolvedExperience == null ? void 0 : resolvedExperience.type) === ExperienceTypes.Segment) {
1940
+ const typedResolvedExperience = resolvedExperience;
1941
+ const typedSkinSelector = componentToOverride.instance.skinSelector;
1942
+ const segment = typedSkinSelector.segments.find((s) => s.segmentId === typedResolvedExperience.segment.id);
1943
+ if (segment) {
1944
+ componentToOverride.instance.skinSelector = segment == null ? void 0 : segment.skinSelector;
1945
+ return componentToOverride;
1946
+ }
1947
+ }
1948
+ }
1949
+ }
1950
+ }
1951
+ }
1952
+ break;
1880
1953
  }
1881
1954
  }
1882
1955
  } finally {
@@ -2080,7 +2153,7 @@ var HostSDK = class {
2080
2153
  });
2081
2154
  __publicField(this, "loaderHooks");
2082
2155
  __publicField(this, "loadComponent", async (componentConfig, container, options) => {
2083
- var _a, _b, _c, _d, _e, _f;
2156
+ var _a, _b, _c, _d;
2084
2157
  if (!container) {
2085
2158
  debugger;
2086
2159
  throw new Error("no container was found for this component");
@@ -2089,13 +2162,13 @@ var HostSDK = class {
2089
2162
  if (overriddenConfig) {
2090
2163
  componentConfig = overriddenConfig;
2091
2164
  }
2165
+ const hooks = __spreadValues(__spreadValues({}, (_a = this.loaderHooks) != null ? _a : {}), (_b = options == null ? void 0 : options.hooks) != null ? _b : {});
2092
2166
  const ref = container;
2093
2167
  if (ref.myop) {
2094
2168
  if (ref.component) {
2095
2169
  componentConfig = __spreadValues({}, componentConfig);
2096
2170
  componentConfig.instance = __spreadValues({}, componentConfig.instance);
2097
- const hooks2 = __spreadValues(__spreadValues({}, (_a = this.loaderHooks) != null ? _a : {}), (_b = options == null ? void 0 : options.hooks) != null ? _b : {});
2098
- let selectedSkin2 = await this.runSkinSelector(componentConfig, hooks2);
2171
+ let selectedSkin2 = await this.runSkinSelector(componentConfig, hooks);
2099
2172
  if (!selectedSkin2) {
2100
2173
  throw new Error("runSkinSelector failed to choose skin, check the provided config");
2101
2174
  }
@@ -2118,12 +2191,11 @@ var HostSDK = class {
2118
2191
  }
2119
2192
  }
2120
2193
  container = container;
2121
- const hooks = __spreadValues(__spreadValues({}, (_d = this.loaderHooks) != null ? _d : {}), (_e = options == null ? void 0 : options.hooks) != null ? _e : {});
2122
2194
  let selectedSkin = await this.runSkinSelector(componentConfig, hooks);
2123
2195
  if (!selectedSkin) {
2124
2196
  throw new Error("runSkinSelector failed to choose skin, check the provided config");
2125
2197
  }
2126
- if ((_f = options == null ? void 0 : options.hooks) == null ? void 0 : _f.afterSkinSelected) {
2198
+ if ((_d = options == null ? void 0 : options.hooks) == null ? void 0 : _d.afterSkinSelected) {
2127
2199
  selectedSkin = await options.hooks.afterSkinSelected(__spreadValues({}, selectedSkin));
2128
2200
  }
2129
2201
  const componentLoader = this.componentsLoaders.find((loader) => loader.type === selectedSkin.loader.type);
@@ -2140,8 +2212,8 @@ var HostSDK = class {
2140
2212
  return true;
2141
2213
  });
2142
2214
  this.components.push(component);
2143
- if (options == null ? void 0 : options.connectProps) {
2144
- component = connectProps(component, componentConfig.type.props);
2215
+ if (!options || options.connectProps !== false) {
2216
+ component = connectProps(component, componentConfig.type.props, selectedSkin);
2145
2217
  }
2146
2218
  try {
2147
2219
  await connectRefs(component, componentConfig, this.components);