ripple 0.2.208 → 0.2.210

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 (108) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +2 -1
  3. package/package.json +2 -6
  4. package/shims/rollup-estree-types.d.ts +1 -1
  5. package/src/compiler/index.d.ts +1 -0
  6. package/src/compiler/index.js +7 -1
  7. package/src/compiler/phases/1-parse/index.js +15 -6
  8. package/src/compiler/phases/2-analyze/css-analyze.js +100 -104
  9. package/src/compiler/phases/2-analyze/index.js +215 -2
  10. package/src/compiler/phases/3-transform/client/index.js +388 -50
  11. package/src/compiler/phases/3-transform/segments.js +123 -39
  12. package/src/compiler/phases/3-transform/server/index.js +266 -13
  13. package/src/compiler/types/index.d.ts +16 -3
  14. package/src/compiler/utils.js +1 -15
  15. package/src/constants.js +0 -2
  16. package/src/helpers.d.ts +4 -0
  17. package/src/html-tree-validation.js +211 -0
  18. package/src/jsx-runtime.d.ts +260 -259
  19. package/src/jsx-runtime.js +12 -12
  20. package/src/runtime/array.js +17 -17
  21. package/src/runtime/create-subscriber.js +1 -1
  22. package/src/runtime/index-client.js +1 -5
  23. package/src/runtime/index-server.js +15 -0
  24. package/src/runtime/internal/client/compat.js +3 -3
  25. package/src/runtime/internal/client/composite.js +6 -1
  26. package/src/runtime/internal/client/head.js +50 -4
  27. package/src/runtime/internal/client/html.js +73 -12
  28. package/src/runtime/internal/client/hydration.js +12 -0
  29. package/src/runtime/internal/client/index.js +1 -1
  30. package/src/runtime/internal/client/portal.js +54 -29
  31. package/src/runtime/internal/client/rpc.js +3 -1
  32. package/src/runtime/internal/client/switch.js +5 -0
  33. package/src/runtime/internal/client/template.js +117 -11
  34. package/src/runtime/internal/client/try.js +1 -0
  35. package/src/runtime/internal/server/index.js +113 -1
  36. package/src/runtime/internal/server/rpc.js +4 -4
  37. package/src/runtime/map.js +2 -2
  38. package/src/runtime/object.js +6 -6
  39. package/src/runtime/proxy.js +12 -11
  40. package/src/runtime/reactive-value.js +9 -1
  41. package/src/runtime/set.js +12 -7
  42. package/src/runtime/url-search-params.js +0 -1
  43. package/src/server/index.js +4 -0
  44. package/src/utils/hashing.js +15 -0
  45. package/src/utils/normalize_css_property_name.js +1 -1
  46. package/tests/client/array/array.mutations.test.ripple +8 -8
  47. package/tests/client/basic/basic.errors.test.ripple +28 -0
  48. package/tests/client/basic/basic.events.test.ripple +6 -3
  49. package/tests/client/basic/basic.utilities.test.ripple +1 -1
  50. package/tests/client/compiler/compiler.regex.test.ripple +10 -8
  51. package/tests/client/composite/composite.generics.test.ripple +5 -2
  52. package/tests/client/dynamic-elements.test.ripple +30 -1
  53. package/tests/client/function-overload-import.ripple +6 -7
  54. package/tests/client/html.test.ripple +0 -1
  55. package/tests/client/object.test.ripple +2 -2
  56. package/tests/client/portal.test.ripple +3 -3
  57. package/tests/client/return.test.ripple +2500 -0
  58. package/tests/client/try.test.ripple +69 -0
  59. package/tests/client/typescript-generics.test.ripple +1 -1
  60. package/tests/client/url/url.derived.test.ripple +1 -1
  61. package/tests/client/url/url.parsing.test.ripple +3 -3
  62. package/tests/client/url/url.partial-removal.test.ripple +7 -7
  63. package/tests/client/url/url.reactivity.test.ripple +15 -15
  64. package/tests/client/url/url.serialization.test.ripple +2 -2
  65. package/tests/hydration/basic.test.js +23 -0
  66. package/tests/hydration/build-components.js +10 -4
  67. package/tests/hydration/compiled/client/basic.js +165 -3
  68. package/tests/hydration/compiled/client/for.js +1140 -23
  69. package/tests/hydration/compiled/client/head.js +234 -0
  70. package/tests/hydration/compiled/client/html.js +135 -0
  71. package/tests/hydration/compiled/client/portal.js +172 -0
  72. package/tests/hydration/compiled/client/reactivity.js +3 -1
  73. package/tests/hydration/compiled/client/return.js +1976 -0
  74. package/tests/hydration/compiled/client/switch.js +162 -0
  75. package/tests/hydration/compiled/server/basic.js +249 -0
  76. package/tests/hydration/compiled/server/events.js +1 -1
  77. package/tests/hydration/compiled/server/for.js +891 -1
  78. package/tests/hydration/compiled/server/head.js +291 -0
  79. package/tests/hydration/compiled/server/html.js +133 -0
  80. package/tests/hydration/compiled/server/if.js +1 -1
  81. package/tests/hydration/compiled/server/portal.js +250 -0
  82. package/tests/hydration/compiled/server/reactivity.js +1 -1
  83. package/tests/hydration/compiled/server/return.js +1969 -0
  84. package/tests/hydration/compiled/server/switch.js +130 -0
  85. package/tests/hydration/components/basic.ripple +55 -0
  86. package/tests/hydration/components/for.ripple +403 -0
  87. package/tests/hydration/components/head.ripple +111 -0
  88. package/tests/hydration/components/html.ripple +38 -0
  89. package/tests/hydration/components/portal.ripple +49 -0
  90. package/tests/hydration/components/return.ripple +564 -0
  91. package/tests/hydration/components/switch.ripple +51 -0
  92. package/tests/hydration/for.test.js +363 -0
  93. package/tests/hydration/head.test.js +105 -0
  94. package/tests/hydration/html.test.js +46 -0
  95. package/tests/hydration/portal.test.js +71 -0
  96. package/tests/hydration/return.test.js +544 -0
  97. package/tests/hydration/switch.test.js +42 -0
  98. package/tests/server/basic.attributes.test.ripple +1 -1
  99. package/tests/server/compiler.test.ripple +22 -0
  100. package/tests/server/composite.test.ripple +5 -2
  101. package/tests/server/html-nesting-validation.test.ripple +237 -0
  102. package/tests/server/return.test.ripple +1379 -0
  103. package/tests/setup-hydration.js +6 -1
  104. package/tests/utils/escaping.test.js +3 -1
  105. package/tests/utils/normalize_css_property_name.test.js +0 -1
  106. package/tests/utils/patterns.test.js +6 -2
  107. package/tests/utils/sanitize_template_string.test.js +3 -2
  108. package/types/server.d.ts +16 -0
@@ -29,11 +29,16 @@ export async function hydrateComponent(serverComponent, clientComponent) {
29
29
  /**
30
30
  * Strips hydration markers from HTML for testing purposes.
31
31
  * Hydration markers are: <!--[--> <!--[!--> <!--]-->
32
+ * Also strips HTML block markers: hash comments and empty comment end markers
32
33
  * @param {string} html - The HTML string with hydration markers
33
34
  * @returns {string} The HTML string without hydration markers
34
35
  */
35
36
  export function stripHydrationMarkers(html) {
36
- return html.replace(/<!--\[!?-->/g, '').replace(/<!--\]-->/g, '');
37
+ return html
38
+ .replace(/<!--\[!?-->/g, '') // Remove <!--[--> and <!--[!-->
39
+ .replace(/<!--\]-->/g, '') // Remove <!--]-->
40
+ .replace(/<!--[a-z0-9]+-->/g, '') // Remove hash comments like <!--usbxy9-->
41
+ .replace(/<!---->/g, ''); // Remove empty comment end markers
37
42
  }
38
43
 
39
44
  // Extend expect with a custom matcher for HTML comparison that strips hydration markers
@@ -90,7 +90,9 @@ describe('escape utility', () => {
90
90
  });
91
91
 
92
92
  it('should handle mixed escaping', () => {
93
- expect(escape('<div class="foo & bar">', true)).toBe('&lt;div class=&quot;foo &amp; bar&quot;>');
93
+ expect(escape('<div class="foo & bar">', true)).toBe(
94
+ '&lt;div class=&quot;foo &amp; bar&quot;>',
95
+ );
94
96
  });
95
97
  });
96
98
 
@@ -40,4 +40,3 @@ describe('normalize_css_property_name utility', () => {
40
40
  expect(normalize_css_property_name('textDecorationColor')).toBe('text-decoration-color');
41
41
  });
42
42
  });
43
-
@@ -256,8 +256,12 @@ describe('patterns utility', () => {
256
256
  it('should remove invalid identifier characters', () => {
257
257
  expect('123abc'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe('_23abc');
258
258
  expect('my-var'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe('my_var');
259
- expect('hello.world'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe('hello_world');
260
- expect('\t\r\nhello.world'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe('___hello_world');
259
+ expect('hello.world'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe(
260
+ 'hello_world',
261
+ );
262
+ expect('\t\r\nhello.world'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe(
263
+ '___hello_world',
264
+ );
261
265
  expect('my\tvar'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe('my_var');
262
266
  expect('my\rvar'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe('my_var');
263
267
  expect(''.replace(patterns.regex_invalid_identifier_chars, '_')).toBe('');
@@ -39,7 +39,9 @@ describe('sanitize_template_string utility', () => {
39
39
  });
40
40
 
41
41
  it('should handle mixed content', () => {
42
- expect(sanitize_template_string('Path: C:\\Users\\${name}`')).toBe('Path: C:\\\\Users\\\\\\${name}\\`');
42
+ expect(sanitize_template_string('Path: C:\\Users\\${name}`')).toBe(
43
+ 'Path: C:\\\\Users\\\\\\${name}\\`',
44
+ );
43
45
  });
44
46
 
45
47
  it('should handle complex template literals', () => {
@@ -48,4 +50,3 @@ describe('sanitize_template_string utility', () => {
48
50
  expect(sanitize_template_string(input)).toBe(expected);
49
51
  });
50
52
  });
51
-
package/types/server.d.ts CHANGED
@@ -1,6 +1,22 @@
1
1
  import type { Props } from '#public';
2
2
  import type { Readable } from 'node:stream';
3
3
 
4
+ // Re-export runtime types for server-compiled components
5
+ export {
6
+ track,
7
+ untrack,
8
+ flushSync,
9
+ effect,
10
+ tick,
11
+ Context,
12
+ TrackedArray,
13
+ TrackedSet,
14
+ TrackedMap,
15
+ TrackedDate,
16
+ TrackedURL,
17
+ TrackedURLSearchParams,
18
+ } from './index.js';
19
+
4
20
  export interface SSRRenderOutput {
5
21
  head: string;
6
22
  body: string;