@kithinji/orca 1.0.7 → 1.0.9

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.
@@ -43,7 +43,7 @@ __export(shared_exports, {
43
43
  Module: () => Module,
44
44
  NODE: () => NODE,
45
45
  Navigate: () => Navigate,
46
- Node: () => Node2,
46
+ Node: () => Node,
47
47
  ORCA_CLIENT_COMPONENT: () => ORCA_CLIENT_COMPONENT,
48
48
  ORCA_ELEMENT_TYPE: () => ORCA_ELEMENT_TYPE,
49
49
  ORCA_FRAGMENT_TYPE: () => ORCA_FRAGMENT_TYPE,
@@ -272,7 +272,7 @@ var ProviderNormalizer = class {
272
272
  return { scope: "singleton", ...provider };
273
273
  }
274
274
  };
275
- var Node2 = class {
275
+ var Node = class {
276
276
  constructor(name) {
277
277
  this.name = name;
278
278
  this.children = [];
@@ -325,7 +325,7 @@ var Compiler = class {
325
325
  const target = this.isDynamicModule(moduleOrDynamic) ? moduleOrDynamic.module : moduleOrDynamic;
326
326
  if (this.nodes.has(target.name))
327
327
  return this.nodes.get(target.name);
328
- const node = new Node2(target.name);
328
+ const node = new Node(target.name);
329
329
  this.nodes.set(target.name, node);
330
330
  const imports = this.getImports(moduleOrDynamic);
331
331
  node.setChildren(imports.map((imp) => this.createNode(imp)));
@@ -777,13 +777,14 @@ var StringRenderer = class {
777
777
  };
778
778
 
779
779
  // src/shared/renderers/stream.ts
780
+ import { JSDOM } from "jsdom";
780
781
  var StreamRenderer = class {
781
782
  constructor(rootInjector, options = {}) {
782
783
  this.rootInjector = rootInjector;
783
784
  this.pending = /* @__PURE__ */ new Map();
784
785
  this.processedIds = /* @__PURE__ */ new Set();
785
786
  this.queueResolvers = [];
786
- this.pushQueue = (u) => this.queueResolvers.shift()?.(u);
787
+ this.idCounter = 0;
787
788
  this.options = {
788
789
  timeout: options.timeout ?? 3e4
789
790
  };
@@ -824,25 +825,7 @@ var StreamRenderer = class {
824
825
  return this.renderClassComponent(vnode, injector);
825
826
  }
826
827
  if (isIntrinsicElement(vnode)) {
827
- const dangerousHTML = vnode.props?.dangerouslySetInnerHTML;
828
- let children;
829
- if (dangerousHTML && dangerousHTML.__html) {
830
- children = this.parseHTMLToJSX(dangerousHTML.__html, injector);
831
- } else {
832
- children = this.mapChildren(vnode.props?.children, injector);
833
- }
834
- return {
835
- $typeof: ORCA_ELEMENT_TYPE,
836
- type: vnode.type,
837
- id: vnode.id,
838
- props: {
839
- ...vnode.props,
840
- dangerouslySetInnerHTML: void 0,
841
- // Remove after processing
842
- children
843
- },
844
- key: vnode.key ?? null
845
- };
828
+ return this.renderIntrinsicElement(vnode, injector);
846
829
  }
847
830
  if (isFragment(vnode)) {
848
831
  return {
@@ -860,6 +843,28 @@ var StreamRenderer = class {
860
843
  this.renderingNodes.delete(vnode);
861
844
  }
862
845
  }
846
+ renderIntrinsicElement(vnode, injector) {
847
+ const { dangerouslySetInnerHTML, children, ...restProps } = vnode.props || {};
848
+ let processedChildren;
849
+ if (dangerouslySetInnerHTML?.__html) {
850
+ processedChildren = this.parseHTMLToJSX(
851
+ dangerouslySetInnerHTML.__html,
852
+ injector
853
+ );
854
+ } else {
855
+ processedChildren = this.mapChildren(children, injector);
856
+ }
857
+ return {
858
+ $$typeof: ORCA_ELEMENT_TYPE,
859
+ type: vnode.type,
860
+ id: vnode.id,
861
+ props: {
862
+ ...restProps,
863
+ children: processedChildren
864
+ },
865
+ key: vnode.key ?? null
866
+ };
867
+ }
863
868
  renderClassComponent(vnode, injector) {
864
869
  const ComponentClass = vnode.type;
865
870
  const isComponent = Reflect.getMetadata(COMPONENT, ComponentClass);
@@ -882,7 +887,9 @@ var StreamRenderer = class {
882
887
  return this.buildSyncTree(childVNode, componentInjector);
883
888
  }
884
889
  mapChildren(children, injector) {
885
- if (children == null || typeof children === "string" || typeof children === "number") {
890
+ if (children == null)
891
+ return void 0;
892
+ if (typeof children === "string" || typeof children === "number") {
886
893
  return children;
887
894
  }
888
895
  if (Array.isArray(children)) {
@@ -891,32 +898,39 @@ var StreamRenderer = class {
891
898
  return this.buildSyncTree(children, injector);
892
899
  }
893
900
  parseHTMLToJSX(html, injector) {
894
- const parser = new DOMParser();
895
- const doc = parser.parseFromString(html, "text/html");
901
+ const dom = new JSDOM(html);
902
+ const document2 = dom.window.document;
896
903
  const convertNode = (node) => {
897
- if (node.nodeType === Node.TEXT_NODE) {
898
- return node.textContent;
904
+ if (node.nodeType === 3) {
905
+ const text = node.textContent || "";
906
+ return text.trim() ? text : null;
899
907
  }
900
- if (node.nodeType === Node.ELEMENT_NODE) {
908
+ if (node.nodeType === 1) {
901
909
  const element = node;
902
910
  const tagName = element.tagName.toLowerCase();
903
911
  const props = {};
904
- for (let i = 0; i < element.attributes.length; i++) {
905
- const attr = element.attributes[i];
906
- let propName = attr.name;
907
- if (propName === "class")
908
- propName = "className";
909
- if (propName === "for")
910
- propName = "htmlFor";
911
- props[propName] = attr.value;
912
- }
912
+ Array.from(element.attributes).forEach((attr) => {
913
+ let name = attr.name;
914
+ if (name === "class")
915
+ name = "className";
916
+ else if (name === "for")
917
+ name = "htmlFor";
918
+ else if (name.startsWith("data-") || name.startsWith("aria-")) {
919
+ } else if (name.includes("-")) {
920
+ name = name.replace(
921
+ /-([a-z])/g,
922
+ (_, letter) => letter.toUpperCase()
923
+ );
924
+ }
925
+ props[name] = attr.value;
926
+ });
913
927
  const children = [];
914
- for (let i = 0; i < element.childNodes.length; i++) {
915
- const child = convertNode(element.childNodes[i]);
916
- if (child !== null && child !== "") {
917
- children.push(child);
928
+ element.childNodes.forEach((child) => {
929
+ const converted = convertNode(child);
930
+ if (converted != null) {
931
+ children.push(converted);
918
932
  }
919
- }
933
+ });
920
934
  const jsxElement = {
921
935
  $$typeof: ORCA_ELEMENT_TYPE,
922
936
  type: tagName,
@@ -931,17 +945,14 @@ var StreamRenderer = class {
931
945
  }
932
946
  return null;
933
947
  };
934
- const bodyChildren = [];
935
- for (let i = 0; i < doc.body.childNodes.length; i++) {
936
- const child = convertNode(doc.body.childNodes[i]);
937
- if (child !== null && child !== "") {
938
- bodyChildren.push(child);
948
+ const result = [];
949
+ document2.body.childNodes.forEach((node) => {
950
+ const converted = convertNode(node);
951
+ if (converted != null) {
952
+ result.push(converted);
939
953
  }
940
- }
941
- return bodyChildren.length === 0 ? void 0 : bodyChildren.length === 1 ? bodyChildren[0] : bodyChildren;
942
- }
943
- generateId() {
944
- return `jsx_${Math.random().toString(36).substr(2, 9)}`;
954
+ });
955
+ return result.length === 0 ? void 0 : result.length === 1 ? result[0] : result;
945
956
  }
946
957
  createPendingReference(vnode, promise, injector) {
947
958
  const id = vnode.id;
@@ -968,13 +979,13 @@ var StreamRenderer = class {
968
979
  if (this.processedIds.has(id))
969
980
  return;
970
981
  this.processedIds.add(id);
971
- this.pushQueue({
982
+ this.queueResolvers.shift()?.({
972
983
  ...resolved,
973
984
  action: "update"
974
985
  });
975
986
  this.pending.delete(id);
976
987
  }).catch((e) => {
977
- this.pushQueue({
988
+ this.queueResolvers.shift()?.({
978
989
  $$typeof: ERROR_ELEMENT,
979
990
  type: "error",
980
991
  action: "error",
@@ -994,6 +1005,9 @@ var StreamRenderer = class {
994
1005
  key: vnode.key ?? null
995
1006
  };
996
1007
  }
1008
+ generateId() {
1009
+ return `jsx_${++this.idCounter}`;
1010
+ }
997
1011
  cleanup() {
998
1012
  for (const { abortController } of this.pending.values()) {
999
1013
  abortController.abort();
@@ -2054,7 +2068,7 @@ export {
2054
2068
  Module,
2055
2069
  NODE,
2056
2070
  Navigate,
2057
- Node2 as Node,
2071
+ Node,
2058
2072
  NodeFactory,
2059
2073
  ORCA_CLIENT_COMPONENT,
2060
2074
  ORCA_ELEMENT_TYPE,