@weaverse/hydrogen 1.0.44 → 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
@@ -59,12 +59,15 @@ function createWeaverseHydrogenContext({ weaverseData }, components) {
59
59
  pageId: page?.id,
60
60
  platformType: "shopify-hydrogen"
61
61
  });
62
+ weaverse.elementInstances.clear();
62
63
  Object.entries(components).forEach(([key, component]) => {
63
64
  weaverse.registerElement({
64
65
  type: component?.schema?.type || key,
65
66
  Component: component?.default,
66
- schema: component?.schema
67
- // defaultCss: component?.css,
67
+ // @ts-ignore
68
+ schema: component?.schema,
69
+ // @ts-ignore
70
+ template: component?.template
68
71
  });
69
72
  });
70
73
  return weaverse;
@@ -545,13 +548,16 @@ var stitchesUtils = {
545
548
  var WeaverseItemStore = class {
546
549
  constructor(itemData, weaverse) {
547
550
  this.listeners = /* @__PURE__ */ new Set();
548
- this.ref = {
549
- current: null
550
- };
551
+ this.ref = { current: null };
552
+ this.platformType = "shopify-section";
551
553
  this.stitchesClass = "";
552
- this._data = { id: "", type: "" };
553
- this.setData = (data) => {
554
- this.data = Object.assign(this.data, data);
554
+ this._store = { id: "", type: "" };
555
+ this.setData = (update) => {
556
+ if (this.platformType === "shopify-hydrogen") {
557
+ this.data = update;
558
+ } else {
559
+ this.data = Object.assign(this.data, update);
560
+ }
555
561
  this.triggerUpdate();
556
562
  return this.data;
557
563
  };
@@ -568,13 +574,14 @@ var WeaverseItemStore = class {
568
574
  };
569
575
  let { type, id } = itemData;
570
576
  this.weaverse = weaverse;
577
+ this.platformType = weaverse.platformType;
571
578
  if (id && type) {
572
579
  weaverse.itemInstances.set(id, this);
573
- this.data = { ...itemData };
580
+ this._store = { ...itemData };
574
581
  }
575
582
  }
576
583
  get _id() {
577
- return this._data.id;
584
+ return this._store.id;
578
585
  }
579
586
  get _element() {
580
587
  return this.ref.current;
@@ -583,17 +590,33 @@ var WeaverseItemStore = class {
583
590
  return this.Element?.schema?.flags || {};
584
591
  }
585
592
  get Element() {
586
- return this.weaverse.elementInstances.get(this._data.type);
593
+ return this.weaverse.elementInstances.get(this._store.type);
587
594
  }
588
- set data(data) {
589
- this._data = { ...this.data, ...data };
595
+ set 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);
602
+ } else {
603
+ this._store = { ...this.data, ...update };
604
+ }
590
605
  }
591
606
  get data() {
592
- let defaultCss = this.Element?.defaultCss || {};
593
- let currentCss = this._data.css || {};
594
- let css = merge(defaultCss, currentCss);
595
- let defaultData = { ...this.Element?.Component?.defaultProps, ...this.Element?.extraData || {} };
596
- return { ...defaultData, ...this._data, css };
607
+ let defaultProps = { ...this.Element?.Component?.defaultProps };
608
+ if (this.platformType === "shopify-hydrogen") {
609
+ return {
610
+ ...this._store,
611
+ data: { ...defaultProps?.data, ...this._store.data }
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 };
619
+ }
597
620
  }
598
621
  };
599
622
  var Weaverse = class {
@@ -608,18 +631,7 @@ var Weaverse = class {
608
631
  * @param elementSchemas {Array<ElementSchema>} List of element schemas
609
632
  * @param platformType {PlatformTypeEnum} Check the platform, shopify-section or react-ssr(hydrogen)
610
633
  */
611
- constructor({
612
- weaverseHost,
613
- weaverseVersion,
614
- projectId,
615
- data,
616
- mediaBreakPoints,
617
- isDesignMode,
618
- ssrMode,
619
- elementSchemas,
620
- platformType,
621
- pageId
622
- } = {}) {
634
+ constructor(params = {}) {
623
635
  this.elementInstances = /* @__PURE__ */ new Map();
624
636
  this.itemInstances = /* @__PURE__ */ new Map();
625
637
  this.weaverseHost = "https://studio.weaverse.io";
@@ -651,42 +663,11 @@ var Weaverse = class {
651
663
  ...externalConfig
652
664
  });
653
665
  };
654
- this.init({
655
- weaverseHost,
656
- weaverseVersion,
657
- projectId,
658
- data,
659
- platformType,
660
- mediaBreakPoints,
661
- isDesignMode,
662
- ssrMode,
663
- elementSchemas,
664
- pageId
666
+ Object.entries(params).forEach(([k2, v2]) => {
667
+ let key = k2;
668
+ this[key] = v2 || this[key];
665
669
  });
666
- }
667
- init({
668
- weaverseHost,
669
- weaverseVersion,
670
- elementSchemas,
671
- platformType,
672
- projectId,
673
- data,
674
- mediaBreakPoints,
675
- isDesignMode,
676
- ssrMode,
677
- pageId
678
- } = {}) {
679
- this.elementSchemas = elementSchemas || this.elementSchemas;
680
- this.weaverseHost = weaverseHost || this.weaverseHost;
681
- this.weaverseVersion = weaverseVersion || this.weaverseVersion;
682
- this.projectId = projectId || this.projectId;
683
- this.pageId = pageId || this.pageId;
684
- this.mediaBreakPoints = mediaBreakPoints || this.mediaBreakPoints;
685
- this.isDesignMode = isDesignMode || this.isDesignMode;
686
- this.ssrMode = ssrMode || this.ssrMode;
687
- this.platformType = platformType || this.platformType;
688
- this.data = data || this.data;
689
- this.initProjectItemData();
670
+ this.initProject();
690
671
  this.initStitches();
691
672
  }
692
673
  /**
@@ -716,12 +697,20 @@ var Weaverse = class {
716
697
  item.triggerUpdate();
717
698
  });
718
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
+ */
719
705
  setProjectData(data) {
720
706
  this.data = data;
721
- this.initProjectItemData();
707
+ this.initProject();
722
708
  this.triggerUpdate();
723
709
  }
724
- initProjectItemData() {
710
+ /**
711
+ * Create new WeaverseItemStore instance for each item in project data
712
+ */
713
+ initProject() {
725
714
  const data = this.data;
726
715
  if (data?.items) {
727
716
  data.items.forEach((item) => {
package/dist/index.mjs CHANGED
@@ -22,12 +22,15 @@ function createWeaverseHydrogenContext({ weaverseData }, components) {
22
22
  pageId: page?.id,
23
23
  platformType: "shopify-hydrogen"
24
24
  });
25
+ weaverse.elementInstances.clear();
25
26
  Object.entries(components).forEach(([key, component]) => {
26
27
  weaverse.registerElement({
27
28
  type: component?.schema?.type || key,
28
29
  Component: component?.default,
29
- schema: component?.schema
30
- // defaultCss: component?.css,
30
+ // @ts-ignore
31
+ schema: component?.schema,
32
+ // @ts-ignore
33
+ template: component?.template
31
34
  });
32
35
  });
33
36
  return weaverse;
@@ -508,13 +511,16 @@ var stitchesUtils = {
508
511
  var WeaverseItemStore = class {
509
512
  constructor(itemData, weaverse) {
510
513
  this.listeners = /* @__PURE__ */ new Set();
511
- this.ref = {
512
- current: null
513
- };
514
+ this.ref = { current: null };
515
+ this.platformType = "shopify-section";
514
516
  this.stitchesClass = "";
515
- this._data = { id: "", type: "" };
516
- this.setData = (data) => {
517
- this.data = Object.assign(this.data, data);
517
+ this._store = { id: "", type: "" };
518
+ this.setData = (update) => {
519
+ if (this.platformType === "shopify-hydrogen") {
520
+ this.data = update;
521
+ } else {
522
+ this.data = Object.assign(this.data, update);
523
+ }
518
524
  this.triggerUpdate();
519
525
  return this.data;
520
526
  };
@@ -531,13 +537,14 @@ var WeaverseItemStore = class {
531
537
  };
532
538
  let { type, id } = itemData;
533
539
  this.weaverse = weaverse;
540
+ this.platformType = weaverse.platformType;
534
541
  if (id && type) {
535
542
  weaverse.itemInstances.set(id, this);
536
- this.data = { ...itemData };
543
+ this._store = { ...itemData };
537
544
  }
538
545
  }
539
546
  get _id() {
540
- return this._data.id;
547
+ return this._store.id;
541
548
  }
542
549
  get _element() {
543
550
  return this.ref.current;
@@ -546,17 +553,33 @@ var WeaverseItemStore = class {
546
553
  return this.Element?.schema?.flags || {};
547
554
  }
548
555
  get Element() {
549
- return this.weaverse.elementInstances.get(this._data.type);
556
+ return this.weaverse.elementInstances.get(this._store.type);
550
557
  }
551
- set data(data) {
552
- this._data = { ...this.data, ...data };
558
+ set 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);
565
+ } else {
566
+ this._store = { ...this.data, ...update };
567
+ }
553
568
  }
554
569
  get data() {
555
- let defaultCss = this.Element?.defaultCss || {};
556
- let currentCss = this._data.css || {};
557
- let css = merge(defaultCss, currentCss);
558
- let defaultData = { ...this.Element?.Component?.defaultProps, ...this.Element?.extraData || {} };
559
- return { ...defaultData, ...this._data, css };
570
+ let defaultProps = { ...this.Element?.Component?.defaultProps };
571
+ if (this.platformType === "shopify-hydrogen") {
572
+ return {
573
+ ...this._store,
574
+ data: { ...defaultProps?.data, ...this._store.data }
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 };
582
+ }
560
583
  }
561
584
  };
562
585
  var Weaverse = class {
@@ -571,18 +594,7 @@ var Weaverse = class {
571
594
  * @param elementSchemas {Array<ElementSchema>} List of element schemas
572
595
  * @param platformType {PlatformTypeEnum} Check the platform, shopify-section or react-ssr(hydrogen)
573
596
  */
574
- constructor({
575
- weaverseHost,
576
- weaverseVersion,
577
- projectId,
578
- data,
579
- mediaBreakPoints,
580
- isDesignMode,
581
- ssrMode,
582
- elementSchemas,
583
- platformType,
584
- pageId
585
- } = {}) {
597
+ constructor(params = {}) {
586
598
  this.elementInstances = /* @__PURE__ */ new Map();
587
599
  this.itemInstances = /* @__PURE__ */ new Map();
588
600
  this.weaverseHost = "https://studio.weaverse.io";
@@ -614,42 +626,11 @@ var Weaverse = class {
614
626
  ...externalConfig
615
627
  });
616
628
  };
617
- this.init({
618
- weaverseHost,
619
- weaverseVersion,
620
- projectId,
621
- data,
622
- platformType,
623
- mediaBreakPoints,
624
- isDesignMode,
625
- ssrMode,
626
- elementSchemas,
627
- pageId
629
+ Object.entries(params).forEach(([k2, v2]) => {
630
+ let key = k2;
631
+ this[key] = v2 || this[key];
628
632
  });
629
- }
630
- init({
631
- weaverseHost,
632
- weaverseVersion,
633
- elementSchemas,
634
- platformType,
635
- projectId,
636
- data,
637
- mediaBreakPoints,
638
- isDesignMode,
639
- ssrMode,
640
- pageId
641
- } = {}) {
642
- this.elementSchemas = elementSchemas || this.elementSchemas;
643
- this.weaverseHost = weaverseHost || this.weaverseHost;
644
- this.weaverseVersion = weaverseVersion || this.weaverseVersion;
645
- this.projectId = projectId || this.projectId;
646
- this.pageId = pageId || this.pageId;
647
- this.mediaBreakPoints = mediaBreakPoints || this.mediaBreakPoints;
648
- this.isDesignMode = isDesignMode || this.isDesignMode;
649
- this.ssrMode = ssrMode || this.ssrMode;
650
- this.platformType = platformType || this.platformType;
651
- this.data = data || this.data;
652
- this.initProjectItemData();
633
+ this.initProject();
653
634
  this.initStitches();
654
635
  }
655
636
  /**
@@ -679,12 +660,20 @@ var Weaverse = class {
679
660
  item.triggerUpdate();
680
661
  });
681
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
+ */
682
668
  setProjectData(data) {
683
669
  this.data = data;
684
- this.initProjectItemData();
670
+ this.initProject();
685
671
  this.triggerUpdate();
686
672
  }
687
- initProjectItemData() {
673
+ /**
674
+ * Create new WeaverseItemStore instance for each item in project data
675
+ */
676
+ initProject() {
688
677
  const data = this.data;
689
678
  if (data?.items) {
690
679
  data.items.forEach((item) => {
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.44",
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.44"
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
  }