dom-expressions 0.35.21 → 0.35.23

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dom-expressions",
3
3
  "description": "A Fine-Grained Runtime for Performant DOM Rendering",
4
- "version": "0.35.21",
4
+ "version": "0.35.23",
5
5
  "author": "Ryan Carniato",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -23,8 +23,8 @@
23
23
  "csstype": "^3.0"
24
24
  },
25
25
  "devDependencies": {
26
- "babel-plugin-jsx-dom-expressions": "^0.35.19",
26
+ "babel-plugin-jsx-dom-expressions": "^0.35.23",
27
27
  "csstype": "^3.1"
28
28
  },
29
- "gitHead": "c110a1d909116fb418691a5145281164330051cf"
29
+ "gitHead": "3f44ae32aeacdae833f18882b79e34cc1960c1a9"
30
30
  }
package/src/client.js CHANGED
@@ -368,7 +368,16 @@ function eventHandler(e) {
368
368
  }
369
369
 
370
370
  function insertExpression(parent, value, current, marker, unwrapArray) {
371
- if (sharedConfig.context && !current) current = [...parent.childNodes];
371
+ if (sharedConfig.context) {
372
+ !current && (current = [...parent.childNodes]);
373
+ let cleaned = [];
374
+ for (let i = 0; i < current.length; i++) {
375
+ const node = current[i];
376
+ if (node.nodeType === 8 && node.data === "!") node.remove();
377
+ else cleaned.push(node);
378
+ }
379
+ current = cleaned;
380
+ }
372
381
  while (typeof current === "function") current = current();
373
382
  if (value === current) return current;
374
383
  const t = typeof value,
@@ -467,9 +476,7 @@ function normalizeIncomingArray(normalized, array, current, unwrap) {
467
476
  } else {
468
477
  // NOTE: is String better than `item + ''`, ``${item}``, `item.toString()` and `item.valueOf()`?
469
478
  const value = String(item);
470
- if (value === "<!>") {
471
- if (prev && prev.nodeType === 8) normalized.push(prev);
472
- } else if (prev && prev.nodeType === 3) {
479
+ if (prev && prev.nodeType === 3) {
473
480
  prev.data = value;
474
481
  normalized.push(prev);
475
482
  } else normalized.push(document.createTextNode(value));
package/src/jsx.d.ts CHANGED
@@ -798,11 +798,13 @@ export namespace JSX {
798
798
  accept?: string;
799
799
  alt?: string;
800
800
  autocomplete?: string;
801
+ autocorrect?: "on" | "off";
801
802
  autofocus?: boolean;
802
803
  capture?: boolean | string;
803
804
  checked?: boolean;
804
805
  crossorigin?: HTMLCrossorigin;
805
806
  disabled?: boolean;
807
+ enterkeyhint?: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send';
806
808
  form?: string;
807
809
  formaction?: string;
808
810
  formenctype?: HTMLFormEncType;
@@ -810,6 +812,7 @@ export namespace JSX {
810
812
  formnovalidate?: boolean;
811
813
  formtarget?: string;
812
814
  height?: number | string;
815
+ incremental?: boolean;
813
816
  list?: string;
814
817
  max?: number | string;
815
818
  maxlength?: number | string;
@@ -820,6 +823,7 @@ export namespace JSX {
820
823
  pattern?: string;
821
824
  placeholder?: string;
822
825
  readonly?: boolean;
826
+ results?: number;
823
827
  required?: boolean;
824
828
  size?: number | string;
825
829
  src?: string;
package/src/server.js CHANGED
@@ -25,9 +25,8 @@ export function renderToString(code, options = {}) {
25
25
  }
26
26
  };
27
27
  let html = root(d => {
28
- const r = resolveSSRNode(escape(code()));
29
- d();
30
- return r;
28
+ setTimeout(d);
29
+ return resolveSSRNode(escape(code()));
31
30
  });
32
31
  sharedConfig.context.noHydrate = true;
33
32
  html = injectAssets(sharedConfig.context.assets, html);
@@ -64,7 +63,7 @@ export function renderToStream(code, options = {}) {
64
63
  });
65
64
  writable && writable.end();
66
65
  completed = true;
67
- dispose();
66
+ setTimeout(dispose);
68
67
  }
69
68
  };
70
69
  const pushTask = task => {
@@ -349,11 +348,10 @@ export function ssrHydrationKey() {
349
348
  export function escape(s, attr) {
350
349
  const t = typeof s;
351
350
  if (t !== "string") {
352
- if (!attr && t === "function") return escape(s(), attr);
351
+ if (!attr && t === "function") return escape(s());
353
352
  if (!attr && Array.isArray(s)) {
354
- let r = "";
355
- for (let i = 0; i < s.length; i++) r += resolveSSRNode(escape(s[i], attr));
356
- return { t: r };
353
+ for (let i = 0; i < s.length; i++) s[i] = escape(s[i]);
354
+ return s;
357
355
  }
358
356
  if (attr && t === "boolean") return String(s);
359
357
  return s;
@@ -405,8 +403,12 @@ export function resolveSSRNode(node) {
405
403
  if (t === "string") return node;
406
404
  if (node == null || t === "boolean") return "";
407
405
  if (Array.isArray(node)) {
406
+ let prev = {};
408
407
  let mapped = "";
409
- for (let i = 0, len = node.length; i < len; i++) mapped += resolveSSRNode(node[i]);
408
+ for (let i = 0, len = node.length; i < len; i++) {
409
+ if (typeof prev !== "object" && typeof node[i] !== "object") mapped += `<!--!-->`;
410
+ mapped += resolveSSRNode(prev = node[i]);
411
+ }
410
412
  return mapped;
411
413
  }
412
414
  if (t === "object") return node.t;
@@ -23,6 +23,7 @@ export interface Renderer<NodeType> {
23
23
  spread<T>(node: any, accessor: (() => T) | T, skipChildren?: Boolean): void;
24
24
  setProp<T>(node: NodeType, name: string, value: T, prev?: T): T;
25
25
  mergeProps(...sources: unknown[]): unknown;
26
+ use<A, T>(fn: (element: NodeType, arg: A) => T, element: NodeType, arg: A): T;
26
27
  }
27
28
 
28
29
  export function createRenderer<NodeType>(options: RendererOptions<NodeType>): Renderer<NodeType>;