dom-expressions 0.35.22 → 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.22",
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": "30c1ae5a5533945b43523f7129a31091da4ddb72"
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,8 @@ 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 && prev.data === value) {
479
+ if (prev && prev.nodeType === 3) {
480
+ prev.data = value;
473
481
  normalized.push(prev);
474
482
  } else normalized.push(document.createTextNode(value));
475
483
  }
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
@@ -348,11 +348,10 @@ export function ssrHydrationKey() {
348
348
  export function escape(s, attr) {
349
349
  const t = typeof s;
350
350
  if (t !== "string") {
351
- if (!attr && t === "function") return escape(s(), attr);
351
+ if (!attr && t === "function") return escape(s());
352
352
  if (!attr && Array.isArray(s)) {
353
- let r = "";
354
- for (let i = 0; i < s.length; i++) r += resolveSSRNode(escape(s[i], attr));
355
- return { t: r };
353
+ for (let i = 0; i < s.length; i++) s[i] = escape(s[i]);
354
+ return s;
356
355
  }
357
356
  if (attr && t === "boolean") return String(s);
358
357
  return s;
@@ -404,8 +403,12 @@ export function resolveSSRNode(node) {
404
403
  if (t === "string") return node;
405
404
  if (node == null || t === "boolean") return "";
406
405
  if (Array.isArray(node)) {
406
+ let prev = {};
407
407
  let mapped = "";
408
- 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
+ }
409
412
  return mapped;
410
413
  }
411
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>;