@adaas/are-html 0.0.22 → 0.0.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.
Files changed (129) hide show
  1. package/dist/browser/index.d.mts +176 -8
  2. package/dist/browser/index.mjs +661 -235
  3. package/dist/browser/index.mjs.map +1 -1
  4. package/dist/node/{AreBinding.attribute-doUvtOjc.d.mts → AreBinding.attribute-BWzEIw6H.d.mts} +45 -0
  5. package/dist/node/{AreBinding.attribute-Bm5LlOyE.d.ts → AreBinding.attribute-GpT-5Qmf.d.ts} +45 -0
  6. package/dist/node/attributes/AreBinding.attribute.d.mts +1 -1
  7. package/dist/node/attributes/AreBinding.attribute.d.ts +1 -1
  8. package/dist/node/attributes/AreDirective.attribute.d.mts +1 -1
  9. package/dist/node/attributes/AreDirective.attribute.d.ts +1 -1
  10. package/dist/node/attributes/AreEvent.attribute.d.mts +1 -1
  11. package/dist/node/attributes/AreEvent.attribute.d.ts +1 -1
  12. package/dist/node/attributes/AreStatic.attribute.d.mts +1 -1
  13. package/dist/node/attributes/AreStatic.attribute.d.ts +1 -1
  14. package/dist/node/directives/AreDirectiveFor.directive.d.mts +18 -1
  15. package/dist/node/directives/AreDirectiveFor.directive.d.ts +18 -1
  16. package/dist/node/directives/AreDirectiveFor.directive.js +57 -9
  17. package/dist/node/directives/AreDirectiveFor.directive.js.map +1 -1
  18. package/dist/node/directives/AreDirectiveFor.directive.mjs +57 -9
  19. package/dist/node/directives/AreDirectiveFor.directive.mjs.map +1 -1
  20. package/dist/node/directives/AreDirectiveIf.directive.d.mts +1 -1
  21. package/dist/node/directives/AreDirectiveIf.directive.d.ts +1 -1
  22. package/dist/node/directives/AreDirectiveShow.directive.d.mts +1 -1
  23. package/dist/node/directives/AreDirectiveShow.directive.d.ts +1 -1
  24. package/dist/node/engine/AreHTML.compiler.d.mts +1 -1
  25. package/dist/node/engine/AreHTML.compiler.d.ts +1 -1
  26. package/dist/node/engine/AreHTML.compiler.js +4 -0
  27. package/dist/node/engine/AreHTML.compiler.js.map +1 -1
  28. package/dist/node/engine/AreHTML.compiler.mjs +4 -0
  29. package/dist/node/engine/AreHTML.compiler.mjs.map +1 -1
  30. package/dist/node/engine/AreHTML.constants.d.mts +33 -1
  31. package/dist/node/engine/AreHTML.constants.d.ts +33 -1
  32. package/dist/node/engine/AreHTML.constants.js +166 -0
  33. package/dist/node/engine/AreHTML.constants.js.map +1 -1
  34. package/dist/node/engine/AreHTML.constants.mjs +165 -1
  35. package/dist/node/engine/AreHTML.constants.mjs.map +1 -1
  36. package/dist/node/engine/AreHTML.context.d.mts +66 -0
  37. package/dist/node/engine/AreHTML.context.d.ts +66 -0
  38. package/dist/node/engine/AreHTML.context.js +98 -0
  39. package/dist/node/engine/AreHTML.context.js.map +1 -1
  40. package/dist/node/engine/AreHTML.context.mjs +98 -0
  41. package/dist/node/engine/AreHTML.context.mjs.map +1 -1
  42. package/dist/node/engine/AreHTML.interpreter.d.mts +3 -0
  43. package/dist/node/engine/AreHTML.interpreter.d.ts +3 -0
  44. package/dist/node/engine/AreHTML.interpreter.js +66 -10
  45. package/dist/node/engine/AreHTML.interpreter.js.map +1 -1
  46. package/dist/node/engine/AreHTML.interpreter.mjs +66 -10
  47. package/dist/node/engine/AreHTML.interpreter.mjs.map +1 -1
  48. package/dist/node/engine/AreHTML.lifecycle.d.mts +1 -8
  49. package/dist/node/engine/AreHTML.lifecycle.d.ts +1 -8
  50. package/dist/node/engine/AreHTML.lifecycle.js +29 -44
  51. package/dist/node/engine/AreHTML.lifecycle.js.map +1 -1
  52. package/dist/node/engine/AreHTML.lifecycle.mjs +29 -44
  53. package/dist/node/engine/AreHTML.lifecycle.mjs.map +1 -1
  54. package/dist/node/engine/AreHTML.tokenizer.d.mts +1 -1
  55. package/dist/node/engine/AreHTML.tokenizer.d.ts +1 -1
  56. package/dist/node/engine/AreHTML.tokenizer.js +7 -1
  57. package/dist/node/engine/AreHTML.tokenizer.js.map +1 -1
  58. package/dist/node/engine/AreHTML.tokenizer.mjs +7 -1
  59. package/dist/node/engine/AreHTML.tokenizer.mjs.map +1 -1
  60. package/dist/node/engine/AreHTML.transformer.d.mts +1 -1
  61. package/dist/node/engine/AreHTML.transformer.d.ts +1 -1
  62. package/dist/node/index.d.mts +4 -3
  63. package/dist/node/index.d.ts +4 -3
  64. package/dist/node/index.js +7 -0
  65. package/dist/node/index.mjs +1 -0
  66. package/dist/node/instructions/AddStaticHTML.instruction.d.mts +8 -0
  67. package/dist/node/instructions/AddStaticHTML.instruction.d.ts +8 -0
  68. package/dist/node/instructions/AddStaticHTML.instruction.js +31 -0
  69. package/dist/node/instructions/AddStaticHTML.instruction.js.map +1 -0
  70. package/dist/node/instructions/AddStaticHTML.instruction.mjs +24 -0
  71. package/dist/node/instructions/AddStaticHTML.instruction.mjs.map +1 -0
  72. package/dist/node/instructions/AreHTML.instructions.constants.d.mts +1 -0
  73. package/dist/node/instructions/AreHTML.instructions.constants.d.ts +1 -0
  74. package/dist/node/instructions/AreHTML.instructions.constants.js +1 -0
  75. package/dist/node/instructions/AreHTML.instructions.constants.js.map +1 -1
  76. package/dist/node/instructions/AreHTML.instructions.constants.mjs +1 -0
  77. package/dist/node/instructions/AreHTML.instructions.constants.mjs.map +1 -1
  78. package/dist/node/instructions/AreHTML.instructions.types.d.mts +9 -1
  79. package/dist/node/instructions/AreHTML.instructions.types.d.ts +9 -1
  80. package/dist/node/lib/AreDirective/AreDirective.component.d.mts +1 -1
  81. package/dist/node/lib/AreDirective/AreDirective.component.d.ts +1 -1
  82. package/dist/node/lib/AreDirective/AreDirective.types.d.mts +1 -1
  83. package/dist/node/lib/AreDirective/AreDirective.types.d.ts +1 -1
  84. package/dist/node/lib/AreHTML/AreHTML.tokenizer.d.mts +1 -1
  85. package/dist/node/lib/AreHTML/AreHTML.tokenizer.d.ts +1 -1
  86. package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.d.mts +1 -1
  87. package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.d.ts +1 -1
  88. package/dist/node/lib/AreHTMLNode/AreHTMLNode.d.mts +1 -1
  89. package/dist/node/lib/AreHTMLNode/AreHTMLNode.d.ts +1 -1
  90. package/dist/node/lib/AreHTMLNode/AreHTMLNode.js +51 -0
  91. package/dist/node/lib/AreHTMLNode/AreHTMLNode.js.map +1 -1
  92. package/dist/node/lib/AreHTMLNode/AreHTMLNode.mjs +51 -0
  93. package/dist/node/lib/AreHTMLNode/AreHTMLNode.mjs.map +1 -1
  94. package/dist/node/lib/AreRoot/AreRoot.component.js.map +1 -1
  95. package/dist/node/lib/AreRoot/AreRoot.component.mjs.map +1 -1
  96. package/dist/node/nodes/AreComment.d.mts +1 -1
  97. package/dist/node/nodes/AreComment.d.ts +1 -1
  98. package/dist/node/nodes/AreComponent.d.mts +1 -1
  99. package/dist/node/nodes/AreComponent.d.ts +1 -1
  100. package/dist/node/nodes/AreInterpolation.d.mts +1 -1
  101. package/dist/node/nodes/AreInterpolation.d.ts +1 -1
  102. package/dist/node/nodes/AreRoot.d.mts +1 -1
  103. package/dist/node/nodes/AreRoot.d.ts +1 -1
  104. package/dist/node/nodes/AreText.d.mts +1 -1
  105. package/dist/node/nodes/AreText.d.ts +1 -1
  106. package/examples/dashboard/concept.ts +1 -1
  107. package/examples/dashboard/dist/index.html +1 -1
  108. package/examples/dashboard/dist/{mqh9ryml-xat335.js → mqiw5sqa-ypckmj.js} +403 -57
  109. package/examples/for-perf/dist/index.html +1 -1
  110. package/examples/for-perf/dist/{mqh9ryfo-6a8d0o.js → mqj1mpf2-z4aokv.js} +558 -117
  111. package/examples/for-perf/dist/{mqh9ryfq-4pf5cv.js → mqj1mpff-4fr7mw.js} +558 -117
  112. package/examples/signal-routing/dist/index.html +1 -1
  113. package/examples/signal-routing/dist/{mqh9ryc9-dkcbkx.js → mqiwo23h-bhcolu.js} +413 -60
  114. package/package.json +5 -5
  115. package/src/directives/AreDirectiveFor.directive.ts +99 -16
  116. package/src/engine/AreHTML.compiler.ts +13 -0
  117. package/src/engine/AreHTML.constants.ts +142 -0
  118. package/src/engine/AreHTML.context.ts +112 -0
  119. package/src/engine/AreHTML.interpreter.ts +114 -13
  120. package/src/engine/AreHTML.lifecycle.ts +81 -74
  121. package/src/engine/AreHTML.tokenizer.ts +30 -1
  122. package/src/index.ts +1 -0
  123. package/src/instructions/AddStaticHTML.instruction.ts +23 -0
  124. package/src/instructions/AreHTML.instructions.constants.ts +1 -0
  125. package/src/instructions/AreHTML.instructions.types.ts +9 -0
  126. package/src/lib/AreHTMLNode/AreHTMLNode.ts +74 -0
  127. package/src/lib/AreRoot/AreRoot.component.ts +3 -3
  128. package/tests/StaticIsland.test.ts +115 -0
  129. package/examples/for-perf/dist/mqh9ryde-m243t8.js +0 -15223
@@ -0,0 +1,115 @@
1
+ import { isStaticMarkup, STANDARD_HTML_TAGS } from '../src/engine/AreHTML.constants';
2
+
3
+ /**
4
+ * Unit coverage for the static-island detector that drives the
5
+ * tokenizer fast-path (skip per-node explosion) and the AddStaticHTML
6
+ * one-shot materialisation. Correctness here is what guarantees we never
7
+ * collapse a subtree that actually needs reactive per-node handling.
8
+ */
9
+ describe('isStaticMarkup — static-island detection', () => {
10
+
11
+ describe('returns TRUE for fully static content', () => {
12
+ it('plain text', () => {
13
+ expect(isStaticMarkup('Hello World')).toBe(true);
14
+ });
15
+
16
+ it('text with HTML entities (the   case)', () => {
17
+ expect(isStaticMarkup('Hello World')).toBe(true);
18
+ expect(isStaticMarkup('a & b   c A')).toBe(true);
19
+ });
20
+
21
+ it('a single standard element with static attributes', () => {
22
+ expect(isStaticMarkup('<span class="x">hi</span>')).toBe(true);
23
+ });
24
+
25
+ it('nested standard elements', () => {
26
+ expect(isStaticMarkup('<div class="card"><span>Hello&nbsp;World</span></div>')).toBe(true);
27
+ });
28
+
29
+ it('static attribute value containing a colon (url / style)', () => {
30
+ expect(isStaticMarkup('<a href="https://example.com">x</a>')).toBe(true);
31
+ expect(isStaticMarkup('<span style="color:red;margin:0">x</span>')).toBe(true);
32
+ });
33
+
34
+ it('static attribute value containing @ (email)', () => {
35
+ expect(isStaticMarkup('<span data-mail="a@b.com">x</span>')).toBe(true);
36
+ });
37
+
38
+ it('void elements and self-closing tags', () => {
39
+ expect(isStaticMarkup('line<br/>break<hr>')).toBe(true);
40
+ expect(isStaticMarkup('<img src="x.png" alt="pic">')).toBe(true);
41
+ });
42
+
43
+ it('table fragments', () => {
44
+ expect(isStaticMarkup('<tr><td>a</td><td>b</td></tr>')).toBe(true);
45
+ });
46
+
47
+ it('html comments are inert', () => {
48
+ expect(isStaticMarkup('<span>x</span><!-- a note --><b>y</b>')).toBe(true);
49
+ });
50
+
51
+ it('single-quoted static attributes', () => {
52
+ expect(isStaticMarkup("<div class='a b'>x</div>")).toBe(true);
53
+ });
54
+ });
55
+
56
+ describe('returns FALSE for dynamic content', () => {
57
+ it('interpolations', () => {
58
+ expect(isStaticMarkup('<span>{{name}}</span>')).toBe(false);
59
+ expect(isStaticMarkup('Hello {{name}}')).toBe(false);
60
+ });
61
+
62
+ it('binding attribute (:)', () => {
63
+ expect(isStaticMarkup('<div :class="x">y</div>')).toBe(false);
64
+ });
65
+
66
+ it('event attribute (@)', () => {
67
+ expect(isStaticMarkup('<button @click="$do()">y</button>')).toBe(false);
68
+ });
69
+
70
+ it('directive attribute ($)', () => {
71
+ expect(isStaticMarkup('<div $if="cond">y</div>')).toBe(false);
72
+ expect(isStaticMarkup('<li $for="x in items">y</li>')).toBe(false);
73
+ });
74
+
75
+ it('dynamic attribute nested deep in an otherwise static tree', () => {
76
+ expect(isStaticMarkup('<div class="a"><span><b :title="t">x</b></span></div>')).toBe(false);
77
+ });
78
+ });
79
+
80
+ describe('returns FALSE for non-standard tags (components / custom / svg)', () => {
81
+ it('custom component (kebab-case)', () => {
82
+ expect(isStaticMarkup('<dashboard-header></dashboard-header>')).toBe(false);
83
+ expect(isStaticMarkup('<div><the-card>x</the-card></div>')).toBe(false);
84
+ });
85
+
86
+ it('are-root outlet', () => {
87
+ expect(isStaticMarkup('<are-root id="x"></are-root>')).toBe(false);
88
+ });
89
+
90
+ it('svg elements (need namespace handling)', () => {
91
+ expect(isStaticMarkup('<svg><rect/></svg>')).toBe(false);
92
+ expect(isStaticMarkup('<div><path d="M0 0"/></div>')).toBe(false);
93
+ });
94
+ });
95
+
96
+ describe('edge cases', () => {
97
+ it('empty / falsy content is not an island', () => {
98
+ expect(isStaticMarkup('')).toBe(false);
99
+ });
100
+
101
+ it('unterminated tag bails to the safe path', () => {
102
+ expect(isStaticMarkup('<div class="x"')).toBe(false);
103
+ });
104
+
105
+ it('whitespace-only content is treated as static text', () => {
106
+ expect(isStaticMarkup(' ')).toBe(true);
107
+ });
108
+
109
+ it('STANDARD_HTML_TAGS excludes svg/component tags', () => {
110
+ expect(STANDARD_HTML_TAGS.has('div')).toBe(true);
111
+ expect(STANDARD_HTML_TAGS.has('svg')).toBe(false);
112
+ expect(STANDARD_HTML_TAGS.has('rect')).toBe(false);
113
+ });
114
+ });
115
+ });