@weaverse/hydrogen 1.0.45 → 1.0.46

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/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import React, { ForwardRefExoticComponent } from 'react';
2
2
  import { LoaderArgs, AppLoadContext } from '@shopify/remix-oxygen';
3
- import { ElementSchema, WeaverseElement, Weaverse, WeaverseItemStore } from '@weaverse/react';
3
+ import { ElementData, ElementSchema, WeaverseElement, Weaverse, WeaverseItemStore } from '@weaverse/react';
4
4
  export * from '@weaverse/react';
5
5
 
6
6
  /**
@@ -22,21 +22,45 @@ type WeaverseLoaderArgs = LoaderArgs & {
22
22
  weaverseHost: string;
23
23
  };
24
24
  };
25
+ interface HydrogenComponentData extends Omit<ElementData, 'childIds' | 'css'> {
26
+ id: string;
27
+ createdAt: string;
28
+ updatedAt: string;
29
+ deletedAt: string;
30
+ parentId: string;
31
+ children: {
32
+ id: string;
33
+ }[];
34
+ loaderData: unknown;
35
+ data: Record<string, unknown>;
36
+ }
25
37
  type ComponentFlags = Partial<Record<'isSection', boolean>>;
26
38
  interface HydrogenComponentSchema extends Omit<ElementSchema, 'parentTypes' | 'flags'> {
27
39
  flags?: ComponentFlags;
40
+ childTypes?: string[];
28
41
  }
29
- interface HydrogenComponentProps<T = unknown> extends WeaverseElement {
30
- loaderData?: T;
42
+ interface HydrogenComponentProps<D = unknown, L = unknown> extends WeaverseElement {
43
+ data: D & {
44
+ className?: string;
45
+ };
46
+ loaderData?: L;
31
47
  children?: React.JSX.Element[];
32
48
  }
33
49
  interface WeaverseHydrogen extends Omit<Weaverse, 'itemInstances'> {
34
50
  itemInstances: Map<string | number, HydrogenComponentInstance>;
35
51
  }
36
- interface HydrogenComponentInstance extends Omit<WeaverseItemStore, '_flags'> {
52
+ type HydrogenComponentTemplate = any;
53
+ interface HydrogenElement {
54
+ Component: ForwardRefExoticComponent<any>;
55
+ type: string;
56
+ schema?: HydrogenComponentSchema;
57
+ template?: HydrogenComponentTemplate;
58
+ }
59
+ interface HydrogenComponentInstance extends Omit<WeaverseItemStore, '_flags' | 'data' | 'Element'> {
37
60
  get _element(): HTMLElement | null;
38
61
  get _flags(): ComponentFlags;
39
- get Element(): WeaverseElement | undefined;
62
+ get Element(): HydrogenElement | undefined;
63
+ get data(): HydrogenComponentData;
40
64
  }
41
65
  interface HydrogenComponent<T = HydrogenComponentProps> {
42
66
  default: ForwardRefExoticComponent<T>;
@@ -75,4 +99,4 @@ interface WeaverseHydrogenRootProps {
75
99
  }
76
100
  declare let WeaverseHydrogenRoot: (props: WeaverseHydrogenRootProps) => React.JSX.Element;
77
101
 
78
- export { ComponentFlags, HydrogenComponent, HydrogenComponentInstance, HydrogenComponentProps, HydrogenComponentSchema, HydrogenPageConfigs, HydrogenPageData, TODO, WeaverseHydrogen, WeaverseHydrogenRoot, WeaverseLoaderArgs, fetchWithServerCache, weaverseLoader };
102
+ export { ComponentFlags, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentProps, HydrogenComponentSchema, HydrogenComponentTemplate, HydrogenElement, HydrogenPageConfigs, HydrogenPageData, TODO, WeaverseHydrogen, WeaverseHydrogenRoot, WeaverseLoaderArgs, fetchWithServerCache, weaverseLoader };
package/dist/index.js CHANGED
@@ -65,7 +65,9 @@ function createWeaverseHydrogenContext({ weaverseData }, components) {
65
65
  type: component?.schema?.type || key,
66
66
  Component: component?.default,
67
67
  // @ts-ignore
68
- schema: component?.schema
68
+ schema: component?.schema,
69
+ // @ts-ignore
70
+ template: component?.template
69
71
  });
70
72
  });
71
73
  return weaverse;
@@ -546,14 +548,12 @@ var stitchesUtils = {
546
548
  var WeaverseItemStore = class {
547
549
  constructor(itemData, weaverse) {
548
550
  this.listeners = /* @__PURE__ */ new Set();
549
- this.ref = {
550
- current: null
551
- };
551
+ this.ref = { current: null };
552
+ this.platformType = "shopify-section";
552
553
  this.stitchesClass = "";
553
- this._data = { id: "", type: "" };
554
+ this._store = { id: "", type: "" };
554
555
  this.setData = (update) => {
555
- let platformType = this.weaverse.platformType;
556
- if (platformType === "shopify-hydrogen") {
556
+ if (this.platformType === "shopify-hydrogen") {
557
557
  this.data = update;
558
558
  } else {
559
559
  this.data = Object.assign(this.data, update);
@@ -574,13 +574,14 @@ var WeaverseItemStore = class {
574
574
  };
575
575
  let { type, id } = itemData;
576
576
  this.weaverse = weaverse;
577
+ this.platformType = weaverse.platformType;
577
578
  if (id && type) {
578
579
  weaverse.itemInstances.set(id, this);
579
- this.data = { ...itemData };
580
+ this._store = { ...itemData };
580
581
  }
581
582
  }
582
583
  get _id() {
583
- return this._data.id;
584
+ return this._store.id;
584
585
  }
585
586
  get _element() {
586
587
  return this.ref.current;
@@ -589,31 +590,33 @@ var WeaverseItemStore = class {
589
590
  return this.Element?.schema?.flags || {};
590
591
  }
591
592
  get Element() {
592
- return this.weaverse.elementInstances.get(this._data.type);
593
+ return this.weaverse.elementInstances.get(this._store.type);
593
594
  }
594
595
  set data(update) {
595
- let platformType = this.weaverse.platformType;
596
- if (platformType === "shopify-hydrogen") {
597
- this._data.data = merge(this.data, update);
596
+ if (this.platformType === "shopify-hydrogen") {
597
+ let { children, ...rest } = update;
598
+ if (children) {
599
+ this._store.children = children;
600
+ }
601
+ this._store.data = merge(this._store.data, rest);
598
602
  } else {
599
- this._data = { ...this.data, ...update };
603
+ this._store = { ...this.data, ...update };
600
604
  }
601
605
  }
602
606
  get data() {
603
- let platformType = this.weaverse.platformType;
604
- if (platformType === "shopify-hydrogen") {
605
- let defaultData2 = { ...this.Element?.Component?.defaultProps };
607
+ let defaultProps = { ...this.Element?.Component?.defaultProps };
608
+ if (this.platformType === "shopify-hydrogen") {
606
609
  return {
607
- ...this._data,
608
- ...defaultData2,
609
- ...this._data.data
610
+ ...this._store,
611
+ data: { ...defaultProps?.data, ...this._store.data }
610
612
  };
613
+ } else {
614
+ let defaultCss = this.Element?.defaultCss || {};
615
+ let currentCss = this._store.css || {};
616
+ let css = merge(defaultCss, currentCss);
617
+ let extraData = this.Element?.extraData;
618
+ return { ...defaultProps, ...extraData, ...this._store, css };
611
619
  }
612
- let defaultCss = this.Element?.defaultCss || {};
613
- let currentCss = this._data.css || {};
614
- let css = merge(defaultCss, currentCss);
615
- let defaultData = { ...this.Element?.Component?.defaultProps, ...this.Element?.extraData || {} };
616
- return { ...defaultData, ...this._data, css };
617
620
  }
618
621
  };
619
622
  var Weaverse = class {
@@ -628,18 +631,7 @@ var Weaverse = class {
628
631
  * @param elementSchemas {Array<ElementSchema>} List of element schemas
629
632
  * @param platformType {PlatformTypeEnum} Check the platform, shopify-section or react-ssr(hydrogen)
630
633
  */
631
- constructor({
632
- weaverseHost,
633
- weaverseVersion,
634
- projectId,
635
- data,
636
- mediaBreakPoints,
637
- isDesignMode,
638
- ssrMode,
639
- elementSchemas,
640
- platformType,
641
- pageId
642
- } = {}) {
634
+ constructor(params = {}) {
643
635
  this.elementInstances = /* @__PURE__ */ new Map();
644
636
  this.itemInstances = /* @__PURE__ */ new Map();
645
637
  this.weaverseHost = "https://studio.weaverse.io";
@@ -671,42 +663,11 @@ var Weaverse = class {
671
663
  ...externalConfig
672
664
  });
673
665
  };
674
- this.init({
675
- weaverseHost,
676
- weaverseVersion,
677
- projectId,
678
- data,
679
- platformType,
680
- mediaBreakPoints,
681
- isDesignMode,
682
- ssrMode,
683
- elementSchemas,
684
- pageId
666
+ Object.entries(params).forEach(([k2, v2]) => {
667
+ let key = k2;
668
+ this[key] = v2 || this[key];
685
669
  });
686
- }
687
- init({
688
- weaverseHost,
689
- weaverseVersion,
690
- elementSchemas,
691
- platformType,
692
- projectId,
693
- data,
694
- mediaBreakPoints,
695
- isDesignMode,
696
- ssrMode,
697
- pageId
698
- } = {}) {
699
- this.elementSchemas = elementSchemas || this.elementSchemas;
700
- this.weaverseHost = weaverseHost || this.weaverseHost;
701
- this.weaverseVersion = weaverseVersion || this.weaverseVersion;
702
- this.projectId = projectId || this.projectId;
703
- this.pageId = pageId || this.pageId;
704
- this.mediaBreakPoints = mediaBreakPoints || this.mediaBreakPoints;
705
- this.isDesignMode = isDesignMode || this.isDesignMode;
706
- this.ssrMode = ssrMode || this.ssrMode;
707
- this.platformType = platformType || this.platformType;
708
- this.data = data || this.data;
709
- this.initProjectItemData();
670
+ this.initProject();
710
671
  this.initStitches();
711
672
  }
712
673
  /**
@@ -736,12 +697,20 @@ var Weaverse = class {
736
697
  item.triggerUpdate();
737
698
  });
738
699
  }
700
+ /**
701
+ * When applying new template,
702
+ * we need to reset the project data and re-initialize the project item data
703
+ * @param data {WeaverseProjectDataType}
704
+ */
739
705
  setProjectData(data) {
740
706
  this.data = data;
741
- this.initProjectItemData();
707
+ this.initProject();
742
708
  this.triggerUpdate();
743
709
  }
744
- initProjectItemData() {
710
+ /**
711
+ * Create new WeaverseItemStore instance for each item in project data
712
+ */
713
+ initProject() {
745
714
  const data = this.data;
746
715
  if (data?.items) {
747
716
  data.items.forEach((item) => {
package/dist/index.mjs CHANGED
@@ -28,7 +28,9 @@ function createWeaverseHydrogenContext({ weaverseData }, components) {
28
28
  type: component?.schema?.type || key,
29
29
  Component: component?.default,
30
30
  // @ts-ignore
31
- schema: component?.schema
31
+ schema: component?.schema,
32
+ // @ts-ignore
33
+ template: component?.template
32
34
  });
33
35
  });
34
36
  return weaverse;
@@ -509,14 +511,12 @@ var stitchesUtils = {
509
511
  var WeaverseItemStore = class {
510
512
  constructor(itemData, weaverse) {
511
513
  this.listeners = /* @__PURE__ */ new Set();
512
- this.ref = {
513
- current: null
514
- };
514
+ this.ref = { current: null };
515
+ this.platformType = "shopify-section";
515
516
  this.stitchesClass = "";
516
- this._data = { id: "", type: "" };
517
+ this._store = { id: "", type: "" };
517
518
  this.setData = (update) => {
518
- let platformType = this.weaverse.platformType;
519
- if (platformType === "shopify-hydrogen") {
519
+ if (this.platformType === "shopify-hydrogen") {
520
520
  this.data = update;
521
521
  } else {
522
522
  this.data = Object.assign(this.data, update);
@@ -537,13 +537,14 @@ var WeaverseItemStore = class {
537
537
  };
538
538
  let { type, id } = itemData;
539
539
  this.weaverse = weaverse;
540
+ this.platformType = weaverse.platformType;
540
541
  if (id && type) {
541
542
  weaverse.itemInstances.set(id, this);
542
- this.data = { ...itemData };
543
+ this._store = { ...itemData };
543
544
  }
544
545
  }
545
546
  get _id() {
546
- return this._data.id;
547
+ return this._store.id;
547
548
  }
548
549
  get _element() {
549
550
  return this.ref.current;
@@ -552,31 +553,33 @@ var WeaverseItemStore = class {
552
553
  return this.Element?.schema?.flags || {};
553
554
  }
554
555
  get Element() {
555
- return this.weaverse.elementInstances.get(this._data.type);
556
+ return this.weaverse.elementInstances.get(this._store.type);
556
557
  }
557
558
  set data(update) {
558
- let platformType = this.weaverse.platformType;
559
- if (platformType === "shopify-hydrogen") {
560
- this._data.data = merge(this.data, update);
559
+ if (this.platformType === "shopify-hydrogen") {
560
+ let { children, ...rest } = update;
561
+ if (children) {
562
+ this._store.children = children;
563
+ }
564
+ this._store.data = merge(this._store.data, rest);
561
565
  } else {
562
- this._data = { ...this.data, ...update };
566
+ this._store = { ...this.data, ...update };
563
567
  }
564
568
  }
565
569
  get data() {
566
- let platformType = this.weaverse.platformType;
567
- if (platformType === "shopify-hydrogen") {
568
- let defaultData2 = { ...this.Element?.Component?.defaultProps };
570
+ let defaultProps = { ...this.Element?.Component?.defaultProps };
571
+ if (this.platformType === "shopify-hydrogen") {
569
572
  return {
570
- ...this._data,
571
- ...defaultData2,
572
- ...this._data.data
573
+ ...this._store,
574
+ data: { ...defaultProps?.data, ...this._store.data }
573
575
  };
576
+ } else {
577
+ let defaultCss = this.Element?.defaultCss || {};
578
+ let currentCss = this._store.css || {};
579
+ let css = merge(defaultCss, currentCss);
580
+ let extraData = this.Element?.extraData;
581
+ return { ...defaultProps, ...extraData, ...this._store, css };
574
582
  }
575
- let defaultCss = this.Element?.defaultCss || {};
576
- let currentCss = this._data.css || {};
577
- let css = merge(defaultCss, currentCss);
578
- let defaultData = { ...this.Element?.Component?.defaultProps, ...this.Element?.extraData || {} };
579
- return { ...defaultData, ...this._data, css };
580
583
  }
581
584
  };
582
585
  var Weaverse = class {
@@ -591,18 +594,7 @@ var Weaverse = class {
591
594
  * @param elementSchemas {Array<ElementSchema>} List of element schemas
592
595
  * @param platformType {PlatformTypeEnum} Check the platform, shopify-section or react-ssr(hydrogen)
593
596
  */
594
- constructor({
595
- weaverseHost,
596
- weaverseVersion,
597
- projectId,
598
- data,
599
- mediaBreakPoints,
600
- isDesignMode,
601
- ssrMode,
602
- elementSchemas,
603
- platformType,
604
- pageId
605
- } = {}) {
597
+ constructor(params = {}) {
606
598
  this.elementInstances = /* @__PURE__ */ new Map();
607
599
  this.itemInstances = /* @__PURE__ */ new Map();
608
600
  this.weaverseHost = "https://studio.weaverse.io";
@@ -634,42 +626,11 @@ var Weaverse = class {
634
626
  ...externalConfig
635
627
  });
636
628
  };
637
- this.init({
638
- weaverseHost,
639
- weaverseVersion,
640
- projectId,
641
- data,
642
- platformType,
643
- mediaBreakPoints,
644
- isDesignMode,
645
- ssrMode,
646
- elementSchemas,
647
- pageId
629
+ Object.entries(params).forEach(([k2, v2]) => {
630
+ let key = k2;
631
+ this[key] = v2 || this[key];
648
632
  });
649
- }
650
- init({
651
- weaverseHost,
652
- weaverseVersion,
653
- elementSchemas,
654
- platformType,
655
- projectId,
656
- data,
657
- mediaBreakPoints,
658
- isDesignMode,
659
- ssrMode,
660
- pageId
661
- } = {}) {
662
- this.elementSchemas = elementSchemas || this.elementSchemas;
663
- this.weaverseHost = weaverseHost || this.weaverseHost;
664
- this.weaverseVersion = weaverseVersion || this.weaverseVersion;
665
- this.projectId = projectId || this.projectId;
666
- this.pageId = pageId || this.pageId;
667
- this.mediaBreakPoints = mediaBreakPoints || this.mediaBreakPoints;
668
- this.isDesignMode = isDesignMode || this.isDesignMode;
669
- this.ssrMode = ssrMode || this.ssrMode;
670
- this.platformType = platformType || this.platformType;
671
- this.data = data || this.data;
672
- this.initProjectItemData();
633
+ this.initProject();
673
634
  this.initStitches();
674
635
  }
675
636
  /**
@@ -699,12 +660,20 @@ var Weaverse = class {
699
660
  item.triggerUpdate();
700
661
  });
701
662
  }
663
+ /**
664
+ * When applying new template,
665
+ * we need to reset the project data and re-initialize the project item data
666
+ * @param data {WeaverseProjectDataType}
667
+ */
702
668
  setProjectData(data) {
703
669
  this.data = data;
704
- this.initProjectItemData();
670
+ this.initProject();
705
671
  this.triggerUpdate();
706
672
  }
707
- initProjectItemData() {
673
+ /**
674
+ * Create new WeaverseItemStore instance for each item in project data
675
+ */
676
+ initProject() {
708
677
  const data = this.data;
709
678
  if (data?.items) {
710
679
  data.items.forEach((item) => {
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.45",
2
+ "version": "1.0.46",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -32,10 +32,10 @@
32
32
  "name": "@weaverse/hydrogen",
33
33
  "author": "Weaverse Team",
34
34
  "dependencies": {
35
- "@shopify/hydrogen": "2023.4.1",
36
- "@weaverse/react": "1.0.45"
35
+ "@shopify/hydrogen": "2023.4.3",
36
+ "@weaverse/react": "1.0.46"
37
37
  },
38
38
  "devDependencies": {
39
- "@shopify/remix-oxygen": "^1.0.6"
39
+ "@shopify/remix-oxygen": "^1.0.7"
40
40
  }
41
41
  }