haori 0.1.0

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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +157 -0
  3. package/README.md +158 -0
  4. package/dist/haori.cjs.js +13 -0
  5. package/dist/haori.cjs.js.map +1 -0
  6. package/dist/haori.es.js +2929 -0
  7. package/dist/haori.es.js.map +1 -0
  8. package/dist/haori.iife.js +13 -0
  9. package/dist/haori.iife.js.map +1 -0
  10. package/dist/index.d.ts +824 -0
  11. package/dist/src/core.d.ts +144 -0
  12. package/dist/src/core.d.ts.map +1 -0
  13. package/dist/src/core.js +605 -0
  14. package/dist/src/core.js.map +1 -0
  15. package/dist/src/dev.d.ts +35 -0
  16. package/dist/src/dev.d.ts.map +1 -0
  17. package/dist/src/dev.js +44 -0
  18. package/dist/src/dev.js.map +1 -0
  19. package/dist/src/env.d.ts +25 -0
  20. package/dist/src/env.d.ts.map +1 -0
  21. package/dist/src/env.js +64 -0
  22. package/dist/src/env.js.map +1 -0
  23. package/dist/src/event.d.ts +144 -0
  24. package/dist/src/event.d.ts.map +1 -0
  25. package/dist/src/event.js +221 -0
  26. package/dist/src/event.js.map +1 -0
  27. package/dist/src/event_dispatcher.d.ts +50 -0
  28. package/dist/src/event_dispatcher.d.ts.map +1 -0
  29. package/dist/src/event_dispatcher.js +99 -0
  30. package/dist/src/event_dispatcher.js.map +1 -0
  31. package/dist/src/expression.d.ts +39 -0
  32. package/dist/src/expression.d.ts.map +1 -0
  33. package/dist/src/expression.js +148 -0
  34. package/dist/src/expression.js.map +1 -0
  35. package/dist/src/form.d.ts +113 -0
  36. package/dist/src/form.d.ts.map +1 -0
  37. package/dist/src/form.js +361 -0
  38. package/dist/src/form.js.map +1 -0
  39. package/dist/src/fragment.d.ts +427 -0
  40. package/dist/src/fragment.d.ts.map +1 -0
  41. package/dist/src/fragment.js +1168 -0
  42. package/dist/src/fragment.js.map +1 -0
  43. package/dist/src/haori.d.ts +54 -0
  44. package/dist/src/haori.d.ts.map +1 -0
  45. package/dist/src/haori.js +120 -0
  46. package/dist/src/haori.js.map +1 -0
  47. package/dist/src/import.d.ts +19 -0
  48. package/dist/src/import.d.ts.map +1 -0
  49. package/dist/src/import.js +64 -0
  50. package/dist/src/import.js.map +1 -0
  51. package/dist/src/index.d.ts +17 -0
  52. package/dist/src/index.d.ts.map +1 -0
  53. package/dist/src/index.js +21 -0
  54. package/dist/src/index.js.map +1 -0
  55. package/dist/src/log.d.ts +32 -0
  56. package/dist/src/log.d.ts.map +1 -0
  57. package/dist/src/log.js +43 -0
  58. package/dist/src/log.js.map +1 -0
  59. package/dist/src/observer.d.ts +17 -0
  60. package/dist/src/observer.d.ts.map +1 -0
  61. package/dist/src/observer.js +102 -0
  62. package/dist/src/observer.js.map +1 -0
  63. package/dist/src/procedure.d.ts +203 -0
  64. package/dist/src/procedure.d.ts.map +1 -0
  65. package/dist/src/procedure.js +1040 -0
  66. package/dist/src/procedure.js.map +1 -0
  67. package/dist/src/queue.d.ts +28 -0
  68. package/dist/src/queue.d.ts.map +1 -0
  69. package/dist/src/queue.js +150 -0
  70. package/dist/src/queue.js.map +1 -0
  71. package/dist/src/url.d.ts +14 -0
  72. package/dist/src/url.d.ts.map +1 -0
  73. package/dist/src/url.js +22 -0
  74. package/dist/src/url.js.map +1 -0
  75. package/dist/tests/click-attributes.test.d.ts +2 -0
  76. package/dist/tests/click-attributes.test.d.ts.map +1 -0
  77. package/dist/tests/click-attributes.test.js +95 -0
  78. package/dist/tests/click-attributes.test.js.map +1 -0
  79. package/dist/tests/core.test.d.ts +5 -0
  80. package/dist/tests/core.test.d.ts.map +1 -0
  81. package/dist/tests/core.test.js +158 -0
  82. package/dist/tests/core.test.js.map +1 -0
  83. package/dist/tests/data-each-browserlike.test.d.ts +2 -0
  84. package/dist/tests/data-each-browserlike.test.d.ts.map +1 -0
  85. package/dist/tests/data-each-browserlike.test.js +48 -0
  86. package/dist/tests/data-each-browserlike.test.js.map +1 -0
  87. package/dist/tests/data-each-fragment-debug.test.d.ts +2 -0
  88. package/dist/tests/data-each-fragment-debug.test.d.ts.map +1 -0
  89. package/dist/tests/data-each-fragment-debug.test.js +119 -0
  90. package/dist/tests/data-each-fragment-debug.test.js.map +1 -0
  91. package/dist/tests/data-each-table.test.d.ts +2 -0
  92. package/dist/tests/data-each-table.test.d.ts.map +1 -0
  93. package/dist/tests/data-each-table.test.js +63 -0
  94. package/dist/tests/data-each-table.test.js.map +1 -0
  95. package/dist/tests/dev.test.d.ts +2 -0
  96. package/dist/tests/dev.test.d.ts.map +1 -0
  97. package/dist/tests/dev.test.js +51 -0
  98. package/dist/tests/dev.test.js.map +1 -0
  99. package/dist/tests/each_arg.test.d.ts +2 -0
  100. package/dist/tests/each_arg.test.d.ts.map +1 -0
  101. package/dist/tests/each_arg.test.js +41 -0
  102. package/dist/tests/each_arg.test.js.map +1 -0
  103. package/dist/tests/env.test.d.ts +2 -0
  104. package/dist/tests/env.test.d.ts.map +1 -0
  105. package/dist/tests/env.test.js +96 -0
  106. package/dist/tests/env.test.js.map +1 -0
  107. package/dist/tests/event.test.d.ts +2 -0
  108. package/dist/tests/event.test.d.ts.map +1 -0
  109. package/dist/tests/event.test.js +287 -0
  110. package/dist/tests/event.test.js.map +1 -0
  111. package/dist/tests/expression.test.d.ts +2 -0
  112. package/dist/tests/expression.test.d.ts.map +1 -0
  113. package/dist/tests/expression.test.js +281 -0
  114. package/dist/tests/expression.test.js.map +1 -0
  115. package/dist/tests/fetch-and-procedure-scenarios.test.d.ts +2 -0
  116. package/dist/tests/fetch-and-procedure-scenarios.test.d.ts.map +1 -0
  117. package/dist/tests/fetch-and-procedure-scenarios.test.js +133 -0
  118. package/dist/tests/fetch-and-procedure-scenarios.test.js.map +1 -0
  119. package/dist/tests/form.test.d.ts +2 -0
  120. package/dist/tests/form.test.d.ts.map +1 -0
  121. package/dist/tests/form.test.js +607 -0
  122. package/dist/tests/form.test.js.map +1 -0
  123. package/dist/tests/fragment.test.d.ts +2 -0
  124. package/dist/tests/fragment.test.d.ts.map +1 -0
  125. package/dist/tests/fragment.test.js +164 -0
  126. package/dist/tests/fragment.test.js.map +1 -0
  127. package/dist/tests/import.test.d.ts +2 -0
  128. package/dist/tests/import.test.d.ts.map +1 -0
  129. package/dist/tests/import.test.js +148 -0
  130. package/dist/tests/import.test.js.map +1 -0
  131. package/dist/tests/log.test.d.ts +2 -0
  132. package/dist/tests/log.test.d.ts.map +1 -0
  133. package/dist/tests/log.test.js +58 -0
  134. package/dist/tests/log.test.js.map +1 -0
  135. package/dist/tests/procedure-action-operations.test.d.ts +2 -0
  136. package/dist/tests/procedure-action-operations.test.d.ts.map +1 -0
  137. package/dist/tests/procedure-action-operations.test.js +148 -0
  138. package/dist/tests/procedure-action-operations.test.js.map +1 -0
  139. package/dist/tests/procedure-fetch-options.test.d.ts +2 -0
  140. package/dist/tests/procedure-fetch-options.test.d.ts.map +1 -0
  141. package/dist/tests/procedure-fetch-options.test.js +131 -0
  142. package/dist/tests/procedure-fetch-options.test.js.map +1 -0
  143. package/dist/tests/procedure.test.d.ts +2 -0
  144. package/dist/tests/procedure.test.d.ts.map +1 -0
  145. package/dist/tests/procedure.test.js +136 -0
  146. package/dist/tests/procedure.test.js.map +1 -0
  147. package/dist/tests/procedure_events.test.d.ts +7 -0
  148. package/dist/tests/procedure_events.test.d.ts.map +1 -0
  149. package/dist/tests/procedure_events.test.js +96 -0
  150. package/dist/tests/procedure_events.test.js.map +1 -0
  151. package/dist/tests/reset_each.test.d.ts +2 -0
  152. package/dist/tests/reset_each.test.d.ts.map +1 -0
  153. package/dist/tests/reset_each.test.js +215 -0
  154. package/dist/tests/reset_each.test.js.map +1 -0
  155. package/dist/tests/row-move.test.d.ts +2 -0
  156. package/dist/tests/row-move.test.d.ts.map +1 -0
  157. package/dist/tests/row-move.test.js +197 -0
  158. package/dist/tests/row-move.test.js.map +1 -0
  159. package/dist/tests/row-operations.test.d.ts +2 -0
  160. package/dist/tests/row-operations.test.d.ts.map +1 -0
  161. package/dist/tests/row-operations.test.js +238 -0
  162. package/dist/tests/row-operations.test.js.map +1 -0
  163. package/dist/tests/url.test.d.ts +2 -0
  164. package/dist/tests/url.test.d.ts.map +1 -0
  165. package/dist/tests/url.test.js +150 -0
  166. package/dist/tests/url.test.js.map +1 -0
  167. package/dist/vite.config.d.ts +3 -0
  168. package/dist/vite.config.d.ts.map +1 -0
  169. package/dist/vite.config.js +28 -0
  170. package/dist/vite.config.js.map +1 -0
  171. package/dist/vitest.config.d.ts +3 -0
  172. package/dist/vitest.config.d.ts.map +1 -0
  173. package/dist/vitest.config.js +19 -0
  174. package/dist/vitest.config.js.map +1 -0
  175. package/package.json +68 -0
@@ -0,0 +1,164 @@
1
+ /* @vitest-environment jsdom */
2
+ import { describe, it, expect } from 'vitest';
3
+ import Fragment, { ElementFragment, TextFragment, CommentFragment, } from '../src/fragment';
4
+ // ヘルパー: DOM子要素のタグ名配列を取得
5
+ const childTagNames = (el) => Array.from(el.children)
6
+ .map(e => e.tagName.toLowerCase());
7
+ describe('Fragment.get の検証', () => {
8
+ it('HTMLElement/Text/Comment から適切なフラグメントを返し、キャッシュされる', () => {
9
+ const div = document.createElement('div');
10
+ const text = document.createTextNode('hello');
11
+ const comment = document.createComment('c');
12
+ div.append(text, comment);
13
+ const ef = Fragment.get(div);
14
+ const tf = Fragment.get(text);
15
+ const cf = Fragment.get(comment);
16
+ expect(ef).toBeInstanceOf(ElementFragment);
17
+ expect(tf).toBeInstanceOf(TextFragment);
18
+ expect(cf).toBeInstanceOf(CommentFragment);
19
+ // キャッシュ検証(同一インスタンスが返る)
20
+ expect(Fragment.get(div)).toBe(ef);
21
+ expect(Fragment.get(text)).toBe(tf);
22
+ expect(Fragment.get(comment)).toBe(cf);
23
+ // 子フラグメントが生成済み
24
+ expect(ef.getChildren().length).toBe(2);
25
+ });
26
+ });
27
+ describe('ElementFragment の mount/unmount/hide/show', () => {
28
+ it('子フラグメントの mount/unmount を正しく行う', async () => {
29
+ const wrapper = document.createElement('div');
30
+ const inner = document.createElement('span');
31
+ wrapper.appendChild(inner);
32
+ const wrapperFrag = new ElementFragment(wrapper);
33
+ const childFrags = wrapperFrag.getChildElementFragments();
34
+ expect(childFrags.length).toBe(1);
35
+ const childFrag = childFrags[0];
36
+ expect(childFrag.isMounted()).toBe(false);
37
+ await childFrag.mount();
38
+ expect(childFrag.isMounted()).toBe(true);
39
+ await childFrag.unmount();
40
+ expect(childFrag.isMounted()).toBe(false);
41
+ expect(inner.parentNode).toBeNull();
42
+ });
43
+ it('hide/show でテキストノードを含む子要素が保持される', async () => {
44
+ const wrapper = document.createElement('div');
45
+ const p = document.createElement('p');
46
+ p.textContent = 'テストテキスト';
47
+ wrapper.appendChild(p);
48
+ const wrapperFrag = new ElementFragment(wrapper);
49
+ // 初期状態: 子要素とテキストが存在
50
+ expect(wrapper.children.length).toBe(1);
51
+ expect(p.textContent).toBe('テストテキスト');
52
+ // 1回目: hide → show
53
+ await wrapperFrag.hide();
54
+ expect(wrapper.style.display).toBe('none');
55
+ expect(wrapper.getAttribute('data-if-false')).toBe('');
56
+ expect(wrapper.children.length).toBe(1); // 子要素は残っている
57
+ expect(p.textContent).toBe('テストテキスト'); // テキストも残っている
58
+ await wrapperFrag.show();
59
+ expect(wrapper.style.display).toBe('');
60
+ expect(wrapper.hasAttribute('data-if-false')).toBe(false);
61
+ expect(wrapper.children.length).toBe(1);
62
+ expect(p.textContent).toBe('テストテキスト');
63
+ // 2回目: hide → show(複数回のサイクルをテスト)
64
+ await wrapperFrag.hide();
65
+ expect(wrapper.style.display).toBe('none');
66
+ expect(wrapper.children.length).toBe(1);
67
+ expect(p.textContent).toBe('テストテキスト');
68
+ await wrapperFrag.show();
69
+ expect(wrapper.style.display).toBe('');
70
+ expect(wrapper.children.length).toBe(1);
71
+ expect(p.textContent).toBe('テストテキスト');
72
+ // 3回目: hide → show(さらに繰り返し)
73
+ await wrapperFrag.hide();
74
+ expect(wrapper.children.length).toBe(1);
75
+ expect(p.textContent).toBe('テストテキスト');
76
+ await wrapperFrag.show();
77
+ expect(wrapper.children.length).toBe(1);
78
+ expect(p.textContent).toBe('テストテキスト'); // 何度でもテキストが保持される
79
+ });
80
+ });
81
+ describe('ElementFragment の insertBefore/insertAfter', () => {
82
+ it('insertBefore で参照ノードの前に挿入し、子配列とDOM順が一致する', async () => {
83
+ const parent = document.createElement('div');
84
+ const a = document.createElement('span');
85
+ a.id = 'a';
86
+ const b = document.createElement('span');
87
+ b.id = 'b';
88
+ parent.append(a, b);
89
+ const pf = new ElementFragment(parent);
90
+ const initial = pf.getChildElementFragments();
91
+ const bf = initial[1];
92
+ const c = document.createElement('span');
93
+ c.id = 'c';
94
+ const cf = Fragment.get(c); // parentなし
95
+ await pf.insertBefore(cf, bf);
96
+ // DOM順
97
+ expect(childTagNames(parent)).toEqual(['span', 'span', 'span']);
98
+ const ids1 = Array.from(parent.children).map(e => e.id);
99
+ expect(ids1).toEqual(['a', 'c', 'b']);
100
+ // 子配列順
101
+ const elems = pf.getChildElementFragments();
102
+ expect(elems.map(e => e.getTarget().id)).toEqual(['a', 'c', 'b']);
103
+ // 親/マウント状態
104
+ expect(cf.getParent()).toBe(pf);
105
+ expect(cf.isMounted()).toBe(pf.isMounted());
106
+ // insertAfter の確認(bの後ろ=末尾)
107
+ const d = document.createElement('span');
108
+ d.id = 'd';
109
+ const df = Fragment.get(d);
110
+ await pf.insertAfter(df, pf.getChildElementFragments()[2]);
111
+ const ids2 = Array.from(parent.children).map(e => e.id);
112
+ expect(ids2).toEqual(['a', 'c', 'b', 'd']);
113
+ });
114
+ });
115
+ describe('ElementFragment の setValue', () => {
116
+ it('text input に値を設定して同期される', async () => {
117
+ const input = document.createElement('input');
118
+ input.type = 'text';
119
+ const ef = new ElementFragment(input);
120
+ await ef.setValue('hello');
121
+ expect(input.value).toBe('hello');
122
+ expect(ef.getValue()).toBe('hello');
123
+ });
124
+ it('checkbox に boolean を設定して checked が同期される', async () => {
125
+ const input = document.createElement('input');
126
+ input.type = 'checkbox';
127
+ input.setAttribute('value', 'true');
128
+ const ef = new ElementFragment(input);
129
+ await ef.setValue(true);
130
+ expect(input.checked).toBe(true);
131
+ expect(ef.getValue()).toBe(true);
132
+ await ef.setValue(false);
133
+ expect(input.checked).toBe(false);
134
+ expect(ef.getValue()).toBeNull();
135
+ });
136
+ });
137
+ describe('ElementFragment の属性操作', () => {
138
+ it('getAttribute/removeAttribute/setAttribute の基本動作', async () => {
139
+ const el = document.createElement('div');
140
+ el.setAttribute('data-x', '123');
141
+ const ef = new ElementFragment(el);
142
+ expect(ef.getAttribute('data-x')).toBe('123');
143
+ await ef.removeAttribute('data-x');
144
+ expect(ef.getAttribute('data-x')).toBeNull();
145
+ await ef.setAttribute('data-y', 'abc');
146
+ expect(el.getAttribute('data-y')).toBe('abc');
147
+ });
148
+ });
149
+ describe('TextFragment と CommentFragment', () => {
150
+ it('TextFragment setContent/evaluate が textContent を更新する', async () => {
151
+ const text = document.createTextNode('hello');
152
+ const tf = new TextFragment(text);
153
+ await tf.setContent('world');
154
+ // 通常テキストのみ(プレースホルダなし)
155
+ expect(text.textContent).toBe('world');
156
+ });
157
+ it('CommentFragment setContent が textContent を更新する', async () => {
158
+ const c = document.createComment('a');
159
+ const cf = new CommentFragment(c);
160
+ await cf.setContent('b');
161
+ expect(c.textContent).toBe('b');
162
+ });
163
+ });
164
+ //# sourceMappingURL=fragment.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fragment.test.js","sourceRoot":"","sources":["../../tests/fragment.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=import.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.test.d.ts","sourceRoot":"","sources":["../../tests/import.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,148 @@
1
+ /* @vitest-environment jsdom */
2
+ /**
3
+ * @fileoverview Import(HTMLインポート機能)のテスト
4
+ */
5
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
6
+ import { Import } from '../src/import';
7
+ describe('Import', () => {
8
+ beforeEach(() => {
9
+ vi.resetAllMocks();
10
+ });
11
+ afterEach(() => {
12
+ vi.restoreAllMocks();
13
+ });
14
+ describe('load', () => {
15
+ it('HTMLからbodyの内容のみを抽出する', async () => {
16
+ const html = `
17
+ <!DOCTYPE html>
18
+ <html>
19
+ <head><title>Test</title></head>
20
+ <body>
21
+ <h1>Hello</h1>
22
+ <p>World</p>
23
+ </body>
24
+ </html>
25
+ `;
26
+ vi.spyOn(globalThis, 'fetch').mockResolvedValue({
27
+ ok: true,
28
+ text: () => Promise.resolve(html),
29
+ });
30
+ const result = await Import.load('https://example.com/test.html');
31
+ expect(result).toContain('<h1>Hello</h1>');
32
+ expect(result).toContain('<p>World</p>');
33
+ expect(result).not.toContain('<title>');
34
+ expect(result).not.toContain('<html>');
35
+ });
36
+ it('bodyタグがない場合はテキスト全体を返す', async () => {
37
+ const text = '<div>Content without body</div>';
38
+ vi.spyOn(globalThis, 'fetch').mockResolvedValue({
39
+ ok: true,
40
+ text: () => Promise.resolve(text),
41
+ });
42
+ const result = await Import.load('https://example.com/test.html');
43
+ // DOMParserはbodyを自動生成するため、コンテンツは含まれる
44
+ expect(result).toContain('Content without body');
45
+ });
46
+ it('fetchオプションを渡せる', async () => {
47
+ const html = '<html><body><p>Test</p></body></html>';
48
+ const fetchSpy = vi.spyOn(globalThis, 'fetch').mockResolvedValue({
49
+ ok: true,
50
+ text: () => Promise.resolve(html),
51
+ });
52
+ await Import.load('https://example.com/test.html', {
53
+ method: 'POST',
54
+ headers: { 'Content-Type': 'application/json' },
55
+ });
56
+ expect(fetchSpy).toHaveBeenCalledWith('https://example.com/test.html', {
57
+ method: 'POST',
58
+ headers: { 'Content-Type': 'application/json' },
59
+ });
60
+ });
61
+ it('HTTPエラー時は例外を投げる', async () => {
62
+ vi.spyOn(globalThis, 'fetch').mockResolvedValue({
63
+ ok: false,
64
+ status: 404,
65
+ statusText: 'Not Found',
66
+ });
67
+ await expect(Import.load('https://example.com/not-found.html')).rejects.toThrow('Failed to load');
68
+ });
69
+ it('ネットワークエラー時は例外を投げる', async () => {
70
+ vi.spyOn(globalThis, 'fetch').mockRejectedValue(new Error('Network error'));
71
+ await expect(Import.load('https://example.com/test.html')).rejects.toThrow('Failed to fetch');
72
+ });
73
+ it('レスポンステキスト読み取りエラー時は例外を投げる', async () => {
74
+ vi.spyOn(globalThis, 'fetch').mockResolvedValue({
75
+ ok: true,
76
+ text: () => Promise.reject(new Error('Read error')),
77
+ });
78
+ await expect(Import.load('https://example.com/test.html')).rejects.toThrow('Failed to read response');
79
+ });
80
+ it('複数の子要素を持つbodyを正しく抽出する', async () => {
81
+ const html = `
82
+ <html>
83
+ <body>
84
+ <header>Header</header>
85
+ <main>Main Content</main>
86
+ <footer>Footer</footer>
87
+ </body>
88
+ </html>
89
+ `;
90
+ vi.spyOn(globalThis, 'fetch').mockResolvedValue({
91
+ ok: true,
92
+ text: () => Promise.resolve(html),
93
+ });
94
+ const result = await Import.load('https://example.com/test.html');
95
+ expect(result).toContain('<header>Header</header>');
96
+ expect(result).toContain('<main>Main Content</main>');
97
+ expect(result).toContain('<footer>Footer</footer>');
98
+ });
99
+ it('空のbodyを正しく処理する', async () => {
100
+ const html = '<html><body></body></html>';
101
+ vi.spyOn(globalThis, 'fetch').mockResolvedValue({
102
+ ok: true,
103
+ text: () => Promise.resolve(html),
104
+ });
105
+ const result = await Import.load('https://example.com/test.html');
106
+ expect(result).toBe('');
107
+ });
108
+ it('body内のスクリプトタグも含める', async () => {
109
+ const html = `
110
+ <html>
111
+ <body>
112
+ <p>Content</p>
113
+ <script>console.log('test');</script>
114
+ </body>
115
+ </html>
116
+ `;
117
+ vi.spyOn(globalThis, 'fetch').mockResolvedValue({
118
+ ok: true,
119
+ text: () => Promise.resolve(html),
120
+ });
121
+ const result = await Import.load('https://example.com/test.html');
122
+ expect(result).toContain('<p>Content</p>');
123
+ // scriptタグはDOMParserによって処理される
124
+ });
125
+ it('ネストされた要素を正しく抽出する', async () => {
126
+ const html = `
127
+ <html>
128
+ <body>
129
+ <div class="outer">
130
+ <div class="inner">
131
+ <span>Nested content</span>
132
+ </div>
133
+ </div>
134
+ </body>
135
+ </html>
136
+ `;
137
+ vi.spyOn(globalThis, 'fetch').mockResolvedValue({
138
+ ok: true,
139
+ text: () => Promise.resolve(html),
140
+ });
141
+ const result = await Import.load('https://example.com/test.html');
142
+ expect(result).toContain('class="outer"');
143
+ expect(result).toContain('class="inner"');
144
+ expect(result).toContain('Nested content');
145
+ });
146
+ });
147
+ });
148
+ //# sourceMappingURL=import.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.test.js","sourceRoot":"","sources":["../../tests/import.test.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B;;GAEG;AACH,OAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAC,MAAM,QAAQ,CAAC;AACvE,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAErC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YACpC,MAAM,IAAI,GAAG;;;;;;;;;OASZ,CAAC;YAEF,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAC9C,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;aACtB,CAAC,CAAC;YAEf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAElE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,IAAI,GAAG,iCAAiC,CAAC;YAE/C,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAC9C,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;aACtB,CAAC,CAAC;YAEf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAElE,qCAAqC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,IAAI,GAAG,uCAAuC,CAAC;YACrD,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAC/D,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;aACtB,CAAC,CAAC;YAEf,MAAM,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;gBACjD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAC,cAAc,EAAE,kBAAkB,EAAC;aAC9C,CAAC,CAAC;YAEH,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,+BAA+B,EAAE;gBACrE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAC,cAAc,EAAE,kBAAkB,EAAC;aAC9C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC/B,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAC9C,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,WAAW;aACZ,CAAC,CAAC;YAEf,MAAM,MAAM,CACV,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAClD,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;YACjC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAC7C,IAAI,KAAK,CAAC,eAAe,CAAC,CAC3B,CAAC;YAEF,MAAM,MAAM,CACV,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAC7C,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACxC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAC9C,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;aACxC,CAAC,CAAC;YAEf,MAAM,MAAM,CACV,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAC7C,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,IAAI,GAAG;;;;;;;;OAQZ,CAAC;YAEF,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAC9C,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;aACtB,CAAC,CAAC;YAEf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAElE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,IAAI,GAAG,4BAA4B,CAAC;YAE1C,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAC9C,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;aACtB,CAAC,CAAC;YAEf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAElE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;YACjC,MAAM,IAAI,GAAG;;;;;;;OAOZ,CAAC;YAEF,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAC9C,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;aACtB,CAAC,CAAC;YAEf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAElE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAC3C,8BAA8B;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAChC,MAAM,IAAI,GAAG;;;;;;;;;;OAUZ,CAAC;YAEF,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAC9C,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;aACtB,CAAC,CAAC;YAEf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAElE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=log.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.test.d.ts","sourceRoot":"","sources":["../../tests/log.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ // devモジュールをモック
3
+ vi.mock('../src/dev');
4
+ import Log from '../src/log';
5
+ import Dev from '../src/dev';
6
+ describe('ログ機能', () => {
7
+ beforeEach(() => {
8
+ vi.clearAllMocks();
9
+ vi.mocked(Dev.isEnabled).mockReturnValue(true);
10
+ });
11
+ afterEach(() => {
12
+ vi.restoreAllMocks();
13
+ });
14
+ describe('info', () => {
15
+ it('開発モードでconsole.logが呼ばれる', () => {
16
+ const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
17
+ Log.info('test info', 'arg1', 'arg2');
18
+ expect(consoleSpy).toHaveBeenCalledWith('test info', 'arg1', 'arg2');
19
+ });
20
+ it('開発モードが無効の時はconsole.logが呼ばれない', () => {
21
+ const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
22
+ vi.mocked(Dev.isEnabled).mockReturnValue(false);
23
+ Log.info('test info', 'arg1', 'arg2');
24
+ expect(consoleSpy).not.toHaveBeenCalled();
25
+ });
26
+ });
27
+ describe('warn', () => {
28
+ it('開発モードでconsole.warnが呼ばれる', () => {
29
+ const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
30
+ Log.warn('test warning', 'arg1', 'arg2');
31
+ expect(consoleSpy).toHaveBeenCalledWith('test warning', 'arg1', 'arg2');
32
+ });
33
+ it('開発モードが無効の時はconsole.warnが呼ばれない', () => {
34
+ const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
35
+ vi.mocked(Dev.isEnabled).mockReturnValue(false);
36
+ Log.warn('test warning', 'arg1', 'arg2');
37
+ expect(consoleSpy).not.toHaveBeenCalled();
38
+ });
39
+ });
40
+ describe('error', () => {
41
+ it('モードに関係なくconsole.errorが呼ばれる(開発モード有効)', () => {
42
+ const consoleSpy = vi
43
+ .spyOn(console, 'error')
44
+ .mockImplementation(() => { });
45
+ Log.error('test error', 'arg1', 'arg2');
46
+ expect(consoleSpy).toHaveBeenCalledWith('test error', 'arg1', 'arg2');
47
+ });
48
+ it('モードに関係なくconsole.errorが呼ばれる(開発モード無効)', () => {
49
+ const consoleSpy = vi
50
+ .spyOn(console, 'error')
51
+ .mockImplementation(() => { });
52
+ vi.mocked(Dev.isEnabled).mockReturnValue(false);
53
+ Log.error('test error', 'arg1', 'arg2');
54
+ expect(consoleSpy).toHaveBeenCalledWith('test error', 'arg1', 'arg2');
55
+ });
56
+ });
57
+ });
58
+ //# sourceMappingURL=log.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.test.js","sourceRoot":"","sources":["../../tests/log.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=procedure-action-operations.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procedure-action-operations.test.d.ts","sourceRoot":"","sources":["../../tests/procedure-action-operations.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,148 @@
1
+ /* @vitest-environment jsdom */
2
+ /**
3
+ * Procedure のリセット、refetch、click、open/close、redirect、data-message に関するテスト
4
+ */
5
+ import { describe, it, expect, beforeEach, vi } from 'vitest';
6
+ import Form from '../src/form';
7
+ import Haori from '../src/haori';
8
+ describe('Procedure action operations', () => {
9
+ beforeEach(async () => {
10
+ vi.restoreAllMocks();
11
+ await import('../src/observer');
12
+ });
13
+ it('resetFragments calls Form.reset', async () => {
14
+ const resetSpy = vi.spyOn(Form, 'reset').mockResolvedValue(undefined);
15
+ vi.spyOn(globalThis, 'fetch').mockImplementation(() => {
16
+ return Promise.resolve(new Response('{}', { headers: { 'Content-Type': 'application/json' } }));
17
+ });
18
+ const container = document.createElement('div');
19
+ document.body.appendChild(container);
20
+ const target = document.createElement('div');
21
+ target.id = 'to-reset';
22
+ container.appendChild(target);
23
+ const btn = document.createElement('button');
24
+ btn.setAttribute('data-click-fetch', 'http://api.test/reset');
25
+ btn.setAttribute('data-click-reset', '#to-reset');
26
+ container.appendChild(btn);
27
+ await new Promise(resolve => setTimeout(resolve, 50));
28
+ btn.click();
29
+ await new Promise(resolve => setTimeout(resolve, 50));
30
+ expect(resetSpy).toHaveBeenCalled();
31
+ container.remove();
32
+ });
33
+ it('refetchFragments invokes Procedure.run', async () => {
34
+ vi.spyOn(globalThis, 'fetch').mockImplementation(() => {
35
+ return Promise.resolve(new Response('{}', { headers: { 'Content-Type': 'application/json' } }));
36
+ });
37
+ const ProcedureModule = await import('../src/procedure');
38
+ const runSpy = vi.spyOn(ProcedureModule.default.prototype, 'run');
39
+ const container = document.createElement('div');
40
+ document.body.appendChild(container);
41
+ // リフェッチ対象は data-fetch を持つ要素
42
+ const refetchTarget = document.createElement('div');
43
+ refetchTarget.id = 'refetch-target';
44
+ refetchTarget.setAttribute('data-fetch', 'http://api.test/refetch-target');
45
+ container.appendChild(refetchTarget);
46
+ const btn = document.createElement('button');
47
+ btn.setAttribute('data-click-fetch', 'http://api.test/refetch');
48
+ btn.setAttribute('data-click-refetch', '#refetch-target');
49
+ container.appendChild(btn);
50
+ await new Promise(resolve => setTimeout(resolve, 50));
51
+ btn.click();
52
+ await new Promise(resolve => setTimeout(resolve, 50));
53
+ expect(runSpy).toHaveBeenCalled();
54
+ container.remove();
55
+ });
56
+ it('clickFragments will click returned targets (attribute-driven)', async () => {
57
+ vi.spyOn(globalThis, 'fetch').mockImplementation(() => {
58
+ return Promise.resolve(new Response('{}', { headers: { 'Content-Type': 'application/json' } }));
59
+ });
60
+ const button = document.createElement('button');
61
+ const clickSpy = vi.spyOn(button, 'click');
62
+ clickSpy.mockImplementation(() => { });
63
+ document.body.appendChild(button);
64
+ const container = document.createElement('div');
65
+ document.body.appendChild(container);
66
+ const btn = document.createElement('button');
67
+ btn.setAttribute('data-click-fetch', 'http://api.test/click');
68
+ // Instead of selector by id, push button to DOM and reference via selector
69
+ button.id = 'click-target';
70
+ btn.setAttribute('data-click-click', '#click-target');
71
+ container.appendChild(btn);
72
+ await new Promise(resolve => setTimeout(resolve, 50));
73
+ btn.click();
74
+ await new Promise(resolve => setTimeout(resolve, 50));
75
+ expect(clickSpy).toHaveBeenCalled();
76
+ button.remove();
77
+ container.remove();
78
+ });
79
+ it('open/close call Haori.openDialog/closeDialog', async () => {
80
+ vi.spyOn(globalThis, 'fetch').mockImplementation(() => {
81
+ return Promise.resolve(new Response('{}', { headers: { 'Content-Type': 'application/json' } }));
82
+ });
83
+ const dialog = document.createElement('dialog');
84
+ dialog.id = 'dlg';
85
+ document.body.appendChild(dialog);
86
+ const openSpy = vi.spyOn(Haori, 'openDialog');
87
+ openSpy.mockResolvedValue(undefined);
88
+ const closeSpy = vi.spyOn(Haori, 'closeDialog');
89
+ closeSpy.mockResolvedValue(undefined);
90
+ const container = document.createElement('div');
91
+ document.body.appendChild(container);
92
+ const btn = document.createElement('button');
93
+ btn.setAttribute('data-click-fetch', 'http://api.test/dialog');
94
+ btn.setAttribute('data-click-open', '#dlg');
95
+ btn.setAttribute('data-click-close', '#dlg');
96
+ container.appendChild(btn);
97
+ await new Promise(resolve => setTimeout(resolve, 50));
98
+ btn.click();
99
+ await new Promise(resolve => setTimeout(resolve, 50));
100
+ expect(openSpy).toHaveBeenCalled();
101
+ expect(closeSpy).toHaveBeenCalled();
102
+ dialog.remove();
103
+ container.remove();
104
+ });
105
+ it('redirectUrl sets window.location.href (attribute-driven)', async () => {
106
+ vi.spyOn(globalThis, 'fetch').mockImplementation(() => {
107
+ return Promise.resolve(new Response('{}', { headers: { 'Content-Type': 'application/json' } }));
108
+ });
109
+ // jsdom does not implement full navigation; use hash redirect to avoid navigation error
110
+ const url = '#/redirected';
111
+ const container = document.createElement('div');
112
+ document.body.appendChild(container);
113
+ const btn = document.createElement('button');
114
+ btn.setAttribute('data-click-fetch', 'http://api.test/redirect');
115
+ btn.setAttribute('data-click-redirect', url);
116
+ container.appendChild(btn);
117
+ await new Promise(resolve => setTimeout(resolve, 50));
118
+ btn.click();
119
+ await new Promise(resolve => setTimeout(resolve, 50));
120
+ const redirected = window.location.href.endsWith(url);
121
+ expect(redirected).toBeTruthy();
122
+ container.remove();
123
+ });
124
+ it('handleFetchError sets data-message on parent via Haori.addErrorMessage (attribute-driven)', async () => {
125
+ vi.spyOn(globalThis, 'fetch').mockImplementation(() => {
126
+ return Promise.resolve(new Response('Server failed', {
127
+ status: 400,
128
+ statusText: 'Bad',
129
+ headers: { 'Content-Type': 'text/plain' },
130
+ }));
131
+ });
132
+ const parent = document.createElement('div');
133
+ const input = document.createElement('input');
134
+ parent.appendChild(input);
135
+ document.body.appendChild(parent);
136
+ const btn = document.createElement('button');
137
+ // ボタンは parent 内に入れることで、Haori.addErrorMessage が親要素に data-message を付加する
138
+ parent.appendChild(btn);
139
+ btn.setAttribute('data-click-fetch', 'http://api.test/error');
140
+ await new Promise(resolve => setTimeout(resolve, 50));
141
+ btn.click();
142
+ await new Promise(resolve => setTimeout(resolve, 50));
143
+ // Haori.addErrorMessage sets data-message on parent element
144
+ expect(parent.getAttribute('data-message')).toBe('Server failed');
145
+ parent.remove();
146
+ });
147
+ });
148
+ //# sourceMappingURL=procedure-action-operations.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procedure-action-operations.test.js","sourceRoot":"","sources":["../../tests/procedure-action-operations.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=procedure-fetch-options.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procedure-fetch-options.test.d.ts","sourceRoot":"","sources":["../../tests/procedure-fetch-options.test.ts"],"names":[],"mappings":""}