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.
- package/LICENSE +21 -0
- package/README.ja.md +157 -0
- package/README.md +158 -0
- package/dist/haori.cjs.js +13 -0
- package/dist/haori.cjs.js.map +1 -0
- package/dist/haori.es.js +2929 -0
- package/dist/haori.es.js.map +1 -0
- package/dist/haori.iife.js +13 -0
- package/dist/haori.iife.js.map +1 -0
- package/dist/index.d.ts +824 -0
- package/dist/src/core.d.ts +144 -0
- package/dist/src/core.d.ts.map +1 -0
- package/dist/src/core.js +605 -0
- package/dist/src/core.js.map +1 -0
- package/dist/src/dev.d.ts +35 -0
- package/dist/src/dev.d.ts.map +1 -0
- package/dist/src/dev.js +44 -0
- package/dist/src/dev.js.map +1 -0
- package/dist/src/env.d.ts +25 -0
- package/dist/src/env.d.ts.map +1 -0
- package/dist/src/env.js +64 -0
- package/dist/src/env.js.map +1 -0
- package/dist/src/event.d.ts +144 -0
- package/dist/src/event.d.ts.map +1 -0
- package/dist/src/event.js +221 -0
- package/dist/src/event.js.map +1 -0
- package/dist/src/event_dispatcher.d.ts +50 -0
- package/dist/src/event_dispatcher.d.ts.map +1 -0
- package/dist/src/event_dispatcher.js +99 -0
- package/dist/src/event_dispatcher.js.map +1 -0
- package/dist/src/expression.d.ts +39 -0
- package/dist/src/expression.d.ts.map +1 -0
- package/dist/src/expression.js +148 -0
- package/dist/src/expression.js.map +1 -0
- package/dist/src/form.d.ts +113 -0
- package/dist/src/form.d.ts.map +1 -0
- package/dist/src/form.js +361 -0
- package/dist/src/form.js.map +1 -0
- package/dist/src/fragment.d.ts +427 -0
- package/dist/src/fragment.d.ts.map +1 -0
- package/dist/src/fragment.js +1168 -0
- package/dist/src/fragment.js.map +1 -0
- package/dist/src/haori.d.ts +54 -0
- package/dist/src/haori.d.ts.map +1 -0
- package/dist/src/haori.js +120 -0
- package/dist/src/haori.js.map +1 -0
- package/dist/src/import.d.ts +19 -0
- package/dist/src/import.d.ts.map +1 -0
- package/dist/src/import.js +64 -0
- package/dist/src/import.js.map +1 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +21 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/log.d.ts +32 -0
- package/dist/src/log.d.ts.map +1 -0
- package/dist/src/log.js +43 -0
- package/dist/src/log.js.map +1 -0
- package/dist/src/observer.d.ts +17 -0
- package/dist/src/observer.d.ts.map +1 -0
- package/dist/src/observer.js +102 -0
- package/dist/src/observer.js.map +1 -0
- package/dist/src/procedure.d.ts +203 -0
- package/dist/src/procedure.d.ts.map +1 -0
- package/dist/src/procedure.js +1040 -0
- package/dist/src/procedure.js.map +1 -0
- package/dist/src/queue.d.ts +28 -0
- package/dist/src/queue.d.ts.map +1 -0
- package/dist/src/queue.js +150 -0
- package/dist/src/queue.js.map +1 -0
- package/dist/src/url.d.ts +14 -0
- package/dist/src/url.d.ts.map +1 -0
- package/dist/src/url.js +22 -0
- package/dist/src/url.js.map +1 -0
- package/dist/tests/click-attributes.test.d.ts +2 -0
- package/dist/tests/click-attributes.test.d.ts.map +1 -0
- package/dist/tests/click-attributes.test.js +95 -0
- package/dist/tests/click-attributes.test.js.map +1 -0
- package/dist/tests/core.test.d.ts +5 -0
- package/dist/tests/core.test.d.ts.map +1 -0
- package/dist/tests/core.test.js +158 -0
- package/dist/tests/core.test.js.map +1 -0
- package/dist/tests/data-each-browserlike.test.d.ts +2 -0
- package/dist/tests/data-each-browserlike.test.d.ts.map +1 -0
- package/dist/tests/data-each-browserlike.test.js +48 -0
- package/dist/tests/data-each-browserlike.test.js.map +1 -0
- package/dist/tests/data-each-fragment-debug.test.d.ts +2 -0
- package/dist/tests/data-each-fragment-debug.test.d.ts.map +1 -0
- package/dist/tests/data-each-fragment-debug.test.js +119 -0
- package/dist/tests/data-each-fragment-debug.test.js.map +1 -0
- package/dist/tests/data-each-table.test.d.ts +2 -0
- package/dist/tests/data-each-table.test.d.ts.map +1 -0
- package/dist/tests/data-each-table.test.js +63 -0
- package/dist/tests/data-each-table.test.js.map +1 -0
- package/dist/tests/dev.test.d.ts +2 -0
- package/dist/tests/dev.test.d.ts.map +1 -0
- package/dist/tests/dev.test.js +51 -0
- package/dist/tests/dev.test.js.map +1 -0
- package/dist/tests/each_arg.test.d.ts +2 -0
- package/dist/tests/each_arg.test.d.ts.map +1 -0
- package/dist/tests/each_arg.test.js +41 -0
- package/dist/tests/each_arg.test.js.map +1 -0
- package/dist/tests/env.test.d.ts +2 -0
- package/dist/tests/env.test.d.ts.map +1 -0
- package/dist/tests/env.test.js +96 -0
- package/dist/tests/env.test.js.map +1 -0
- package/dist/tests/event.test.d.ts +2 -0
- package/dist/tests/event.test.d.ts.map +1 -0
- package/dist/tests/event.test.js +287 -0
- package/dist/tests/event.test.js.map +1 -0
- package/dist/tests/expression.test.d.ts +2 -0
- package/dist/tests/expression.test.d.ts.map +1 -0
- package/dist/tests/expression.test.js +281 -0
- package/dist/tests/expression.test.js.map +1 -0
- package/dist/tests/fetch-and-procedure-scenarios.test.d.ts +2 -0
- package/dist/tests/fetch-and-procedure-scenarios.test.d.ts.map +1 -0
- package/dist/tests/fetch-and-procedure-scenarios.test.js +133 -0
- package/dist/tests/fetch-and-procedure-scenarios.test.js.map +1 -0
- package/dist/tests/form.test.d.ts +2 -0
- package/dist/tests/form.test.d.ts.map +1 -0
- package/dist/tests/form.test.js +607 -0
- package/dist/tests/form.test.js.map +1 -0
- package/dist/tests/fragment.test.d.ts +2 -0
- package/dist/tests/fragment.test.d.ts.map +1 -0
- package/dist/tests/fragment.test.js +164 -0
- package/dist/tests/fragment.test.js.map +1 -0
- package/dist/tests/import.test.d.ts +2 -0
- package/dist/tests/import.test.d.ts.map +1 -0
- package/dist/tests/import.test.js +148 -0
- package/dist/tests/import.test.js.map +1 -0
- package/dist/tests/log.test.d.ts +2 -0
- package/dist/tests/log.test.d.ts.map +1 -0
- package/dist/tests/log.test.js +58 -0
- package/dist/tests/log.test.js.map +1 -0
- package/dist/tests/procedure-action-operations.test.d.ts +2 -0
- package/dist/tests/procedure-action-operations.test.d.ts.map +1 -0
- package/dist/tests/procedure-action-operations.test.js +148 -0
- package/dist/tests/procedure-action-operations.test.js.map +1 -0
- package/dist/tests/procedure-fetch-options.test.d.ts +2 -0
- package/dist/tests/procedure-fetch-options.test.d.ts.map +1 -0
- package/dist/tests/procedure-fetch-options.test.js +131 -0
- package/dist/tests/procedure-fetch-options.test.js.map +1 -0
- package/dist/tests/procedure.test.d.ts +2 -0
- package/dist/tests/procedure.test.d.ts.map +1 -0
- package/dist/tests/procedure.test.js +136 -0
- package/dist/tests/procedure.test.js.map +1 -0
- package/dist/tests/procedure_events.test.d.ts +7 -0
- package/dist/tests/procedure_events.test.d.ts.map +1 -0
- package/dist/tests/procedure_events.test.js +96 -0
- package/dist/tests/procedure_events.test.js.map +1 -0
- package/dist/tests/reset_each.test.d.ts +2 -0
- package/dist/tests/reset_each.test.d.ts.map +1 -0
- package/dist/tests/reset_each.test.js +215 -0
- package/dist/tests/reset_each.test.js.map +1 -0
- package/dist/tests/row-move.test.d.ts +2 -0
- package/dist/tests/row-move.test.d.ts.map +1 -0
- package/dist/tests/row-move.test.js +197 -0
- package/dist/tests/row-move.test.js.map +1 -0
- package/dist/tests/row-operations.test.d.ts +2 -0
- package/dist/tests/row-operations.test.d.ts.map +1 -0
- package/dist/tests/row-operations.test.js +238 -0
- package/dist/tests/row-operations.test.js.map +1 -0
- package/dist/tests/url.test.d.ts +2 -0
- package/dist/tests/url.test.d.ts.map +1 -0
- package/dist/tests/url.test.js +150 -0
- package/dist/tests/url.test.js.map +1 -0
- package/dist/vite.config.d.ts +3 -0
- package/dist/vite.config.d.ts.map +1 -0
- package/dist/vite.config.js +28 -0
- package/dist/vite.config.js.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +19 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* @vitest-environment jsdom */
|
|
2
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
3
|
+
import Core from '../src/core';
|
|
4
|
+
import Queue from '../src/queue';
|
|
5
|
+
describe('data-each 実ブラウザ挙動テスト', () => {
|
|
6
|
+
let container;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
container = document.createElement('div');
|
|
9
|
+
document.body.appendChild(container);
|
|
10
|
+
});
|
|
11
|
+
afterEach(() => {
|
|
12
|
+
document.body.removeChild(container);
|
|
13
|
+
});
|
|
14
|
+
it('data-bind + data-eachで複数行が生成される', async () => {
|
|
15
|
+
const root = document.createElement('div');
|
|
16
|
+
const bindData = {
|
|
17
|
+
users: [
|
|
18
|
+
{ id: 1, name: '田中太郎', age: 25 },
|
|
19
|
+
{ id: 2, name: '佐藤花子', age: 30 },
|
|
20
|
+
],
|
|
21
|
+
};
|
|
22
|
+
root.setAttribute('data-bind', JSON.stringify(bindData));
|
|
23
|
+
root.innerHTML = `
|
|
24
|
+
<table>
|
|
25
|
+
<tbody data-each="users">
|
|
26
|
+
<tr>
|
|
27
|
+
<td>{{id}}</td>
|
|
28
|
+
<td>{{name}}</td>
|
|
29
|
+
<td>{{age}}歳</td>
|
|
30
|
+
</tr>
|
|
31
|
+
</tbody>
|
|
32
|
+
</table>
|
|
33
|
+
`;
|
|
34
|
+
container.appendChild(root);
|
|
35
|
+
// ブラウザ同様、Core.scanのみ呼ぶ
|
|
36
|
+
await Core.scan(root);
|
|
37
|
+
await Queue.wait();
|
|
38
|
+
// tbodyのtrが2行生成されているか
|
|
39
|
+
const tbody = container.querySelector('tbody');
|
|
40
|
+
const rows = tbody?.querySelectorAll('tr');
|
|
41
|
+
expect(rows?.length).toBe(2);
|
|
42
|
+
if (rows && rows.length === 2) {
|
|
43
|
+
expect(rows[0].textContent).toContain('田中太郎');
|
|
44
|
+
expect(rows[1].textContent).toContain('佐藤花子');
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=data-each-browserlike.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-each-browserlike.test.js","sourceRoot":"","sources":["../../tests/data-each-browserlike.test.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAC,MAAM,QAAQ,CAAC;AACnE,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,SAAsB,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG;YACf,KAAK,EAAE;gBACL,EAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAC;gBAC9B,EAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAC;aAC/B;SACF,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,GAAG;;;;;;;;;;KAUhB,CAAC;QACF,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5B,uBAAuB;QACvB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QAEnB,sBAAsB;QACtB,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-each-fragment-debug.test.d.ts","sourceRoot":"","sources":["../../tests/data-each-fragment-debug.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/* @vitest-environment jsdom */
|
|
2
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
3
|
+
import Core from '../src/core';
|
|
4
|
+
import Queue from '../src/queue';
|
|
5
|
+
import Fragment, { ElementFragment } from '../src/fragment';
|
|
6
|
+
// usersデータ
|
|
7
|
+
const users = [
|
|
8
|
+
{ id: 1, name: '田中太郎', age: 25 },
|
|
9
|
+
{ id: 2, name: '佐藤花子', age: 30 },
|
|
10
|
+
];
|
|
11
|
+
describe('data-each内部処理デバッグ', () => {
|
|
12
|
+
let container;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
container = document.createElement('div');
|
|
15
|
+
document.body.appendChild(container);
|
|
16
|
+
});
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
document.body.removeChild(container);
|
|
19
|
+
});
|
|
20
|
+
it('テンプレートtrがchildrenから正しく切り離されるか', async () => {
|
|
21
|
+
container.innerHTML = `
|
|
22
|
+
<table>
|
|
23
|
+
<tbody data-each="users">
|
|
24
|
+
<tr>
|
|
25
|
+
<td>{{id}}</td>
|
|
26
|
+
<td>{{name}}</td>
|
|
27
|
+
<td>{{age}}</td>
|
|
28
|
+
</tr>
|
|
29
|
+
</tbody>
|
|
30
|
+
</table>
|
|
31
|
+
`;
|
|
32
|
+
const tbody = container.querySelector('tbody');
|
|
33
|
+
const fragment = Fragment.get(tbody);
|
|
34
|
+
fragment.setBindingData({ users });
|
|
35
|
+
fragment.setMounted(true);
|
|
36
|
+
await Core.evaluateEach(fragment);
|
|
37
|
+
await Queue.wait();
|
|
38
|
+
// テンプレートtrがchildrenから除去されているか
|
|
39
|
+
const children = fragment.getChildren();
|
|
40
|
+
const filtered = children.filter(c => c instanceof ElementFragment);
|
|
41
|
+
const trCount = filtered.length;
|
|
42
|
+
expect(trCount).toBe(2); // 2行生成されている
|
|
43
|
+
});
|
|
44
|
+
it('テンプレートtrがsetTemplateで保存されているか', async () => {
|
|
45
|
+
container.innerHTML = `
|
|
46
|
+
<table>
|
|
47
|
+
<tbody data-each="users">
|
|
48
|
+
<tr>
|
|
49
|
+
<td>{{id}}</td>
|
|
50
|
+
<td>{{name}}</td>
|
|
51
|
+
<td>{{age}}</td>
|
|
52
|
+
</tr>
|
|
53
|
+
</tbody>
|
|
54
|
+
</table>
|
|
55
|
+
`;
|
|
56
|
+
const tbody = container.querySelector('tbody');
|
|
57
|
+
const fragment = Fragment.get(tbody);
|
|
58
|
+
fragment.setBindingData({ users });
|
|
59
|
+
fragment.setMounted(true);
|
|
60
|
+
await Core.evaluateEach(fragment);
|
|
61
|
+
await Queue.wait();
|
|
62
|
+
const template = fragment.getTemplate();
|
|
63
|
+
expect(template).not.toBeNull();
|
|
64
|
+
expect(template?.getTarget().nodeName).toBe('TR');
|
|
65
|
+
});
|
|
66
|
+
it('newKeysの数がusers配列と一致するか', async () => {
|
|
67
|
+
container.innerHTML = `
|
|
68
|
+
<table>
|
|
69
|
+
<tbody data-each="users">
|
|
70
|
+
<tr>
|
|
71
|
+
<td>{{id}}</td>
|
|
72
|
+
<td>{{name}}</td>
|
|
73
|
+
<td>{{age}}</td>
|
|
74
|
+
</tr>
|
|
75
|
+
</tbody>
|
|
76
|
+
</table>
|
|
77
|
+
`;
|
|
78
|
+
const tbody = container.querySelector('tbody');
|
|
79
|
+
const fragment = Fragment.get(tbody);
|
|
80
|
+
fragment.setBindingData({ users });
|
|
81
|
+
fragment.setMounted(true);
|
|
82
|
+
// updateDiff内部のnewKeys数を確認
|
|
83
|
+
let newKeysCount = 0;
|
|
84
|
+
const origUpdateDiff = Core.updateDiff;
|
|
85
|
+
Core.updateDiff = function (parent, newList) {
|
|
86
|
+
newKeysCount = newList.length;
|
|
87
|
+
const fn = origUpdateDiff;
|
|
88
|
+
return fn.apply(this, [parent, newList]);
|
|
89
|
+
};
|
|
90
|
+
await Core.evaluateEach(fragment);
|
|
91
|
+
await Queue.wait();
|
|
92
|
+
expect(newKeysCount).toBe(users.length);
|
|
93
|
+
Core.updateDiff = origUpdateDiff;
|
|
94
|
+
});
|
|
95
|
+
it('rowFragmentにバインディングデータが正しくセットされるか', async () => {
|
|
96
|
+
container.innerHTML = `
|
|
97
|
+
<table>
|
|
98
|
+
<tbody data-each="users">
|
|
99
|
+
<tr><td>{{id}}</td><td>{{name}}</td><td>{{age}}</td></tr>
|
|
100
|
+
</tbody>
|
|
101
|
+
</table>
|
|
102
|
+
`;
|
|
103
|
+
const tbody = container.querySelector('tbody');
|
|
104
|
+
const fragment = Fragment.get(tbody);
|
|
105
|
+
fragment.setBindingData({ users });
|
|
106
|
+
fragment.setMounted(true);
|
|
107
|
+
await Core.evaluateEach(fragment);
|
|
108
|
+
await Queue.wait();
|
|
109
|
+
const rows = tbody.querySelectorAll('tr');
|
|
110
|
+
expect(rows.length).toBe(users.length);
|
|
111
|
+
// 1行目のFragmentのバインディングデータを確認
|
|
112
|
+
const rowFragment = Fragment.get(rows[0]);
|
|
113
|
+
const binding = rowFragment.getBindingData();
|
|
114
|
+
expect(binding.id).toBe(1);
|
|
115
|
+
expect(binding.name).toBe('田中太郎');
|
|
116
|
+
expect(binding.age).toBe(25);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=data-each-fragment-debug.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-each-fragment-debug.test.js","sourceRoot":"","sources":["../../tests/data-each-fragment-debug.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-each-table.test.d.ts","sourceRoot":"","sources":["../../tests/data-each-table.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/* @vitest-environment jsdom */
|
|
2
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
3
|
+
import Core from '../src/core';
|
|
4
|
+
import Queue from '../src/queue';
|
|
5
|
+
// Fragment はこのテストで直接使用しないためインポートを削除
|
|
6
|
+
describe('data-each with tbody element', () => {
|
|
7
|
+
let container;
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
container = document.createElement('div');
|
|
10
|
+
document.body.appendChild(container);
|
|
11
|
+
});
|
|
12
|
+
afterEach(() => {
|
|
13
|
+
document.body.removeChild(container);
|
|
14
|
+
});
|
|
15
|
+
it('tbodyにdata-each属性を設定した場合、trがテンプレートとして使われる', async () => {
|
|
16
|
+
const root = document.createElement('div');
|
|
17
|
+
const bindData = {
|
|
18
|
+
users: [
|
|
19
|
+
{ id: 1, name: '田中太郎', age: 25 },
|
|
20
|
+
{ id: 2, name: '佐藤花子', age: 30 },
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
root.setAttribute('data-bind', JSON.stringify(bindData));
|
|
24
|
+
root.innerHTML = `
|
|
25
|
+
<table>
|
|
26
|
+
<tbody data-each="users" data-each-key="id">
|
|
27
|
+
<tr>
|
|
28
|
+
<td>{{id}}</td>
|
|
29
|
+
<td>{{name}}</td>
|
|
30
|
+
<td>{{age}}歳</td>
|
|
31
|
+
</tr>
|
|
32
|
+
</tbody>
|
|
33
|
+
</table>
|
|
34
|
+
`;
|
|
35
|
+
container.appendChild(root);
|
|
36
|
+
// markMountedは呼ばず、Core.scanのみ
|
|
37
|
+
await Core.scan(root);
|
|
38
|
+
await Queue.wait();
|
|
39
|
+
// ポーリングで最終状態を確認
|
|
40
|
+
for (let i = 0; i < 10; i++) {
|
|
41
|
+
const tbody = container.querySelector('tbody');
|
|
42
|
+
const rows = tbody?.querySelectorAll('tr');
|
|
43
|
+
if (rows && rows.length === 2) {
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
47
|
+
}
|
|
48
|
+
const tbody = container.querySelector('tbody');
|
|
49
|
+
expect(tbody).not.toBeNull();
|
|
50
|
+
// tbodyの子要素としてtrが生成されているか確認
|
|
51
|
+
const rows = tbody?.querySelectorAll('tr');
|
|
52
|
+
console.log('Generated rows:', rows?.length);
|
|
53
|
+
console.log('tbody innerHTML:', tbody?.innerHTML);
|
|
54
|
+
if (rows && rows.length > 0) {
|
|
55
|
+
console.log('First row content:', rows[0].innerHTML);
|
|
56
|
+
if (rows.length > 1) {
|
|
57
|
+
console.log('Second row content:', rows[1].innerHTML);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
expect(rows?.length).toBe(2);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=data-each-table.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-each-table.test.js","sourceRoot":"","sources":["../../tests/data-each-table.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.test.d.ts","sourceRoot":"","sources":["../../tests/dev.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import Dev from '../src/dev';
|
|
3
|
+
describe('Dev', () => {
|
|
4
|
+
beforeEach(() => {
|
|
5
|
+
// 各テスト前に開発モードを確実に無効化
|
|
6
|
+
Dev.disable();
|
|
7
|
+
});
|
|
8
|
+
afterEach(() => {
|
|
9
|
+
// 各テスト後にも状態をクリーンアップ
|
|
10
|
+
Dev.disable();
|
|
11
|
+
});
|
|
12
|
+
describe('isEnabled', () => {
|
|
13
|
+
it('初期状態では無効になっている', () => {
|
|
14
|
+
expect(Dev.isEnabled()).toBe(false);
|
|
15
|
+
});
|
|
16
|
+
it('有効化後は true を返す', () => {
|
|
17
|
+
expect(Dev.isEnabled()).toBe(false); // 初期状態確認
|
|
18
|
+
Dev.enable();
|
|
19
|
+
expect(Dev.isEnabled()).toBe(true);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe('enable', () => {
|
|
23
|
+
it('開発モードを有効化する', () => {
|
|
24
|
+
expect(Dev.isEnabled()).toBe(false); // 初期状態確認
|
|
25
|
+
Dev.enable();
|
|
26
|
+
expect(Dev.isEnabled()).toBe(true);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('disable', () => {
|
|
30
|
+
it('開発モードを無効化する', () => {
|
|
31
|
+
Dev.enable();
|
|
32
|
+
expect(Dev.isEnabled()).toBe(true); // 有効化確認
|
|
33
|
+
Dev.disable();
|
|
34
|
+
expect(Dev.isEnabled()).toBe(false);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('set', () => {
|
|
38
|
+
it('true を渡すと有効化される', () => {
|
|
39
|
+
expect(Dev.isEnabled()).toBe(false); // 初期状態確認
|
|
40
|
+
Dev.set(true);
|
|
41
|
+
expect(Dev.isEnabled()).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
it('false を渡すと無効化される', () => {
|
|
44
|
+
Dev.enable(); // 一度有効化
|
|
45
|
+
expect(Dev.isEnabled()).toBe(true); // 有効化確認
|
|
46
|
+
Dev.set(false);
|
|
47
|
+
expect(Dev.isEnabled()).toBe(false);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=dev.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.test.js","sourceRoot":"","sources":["../../tests/dev.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAC,MAAM,QAAQ,CAAC;AACnE,OAAO,GAAG,MAAM,YAAY,CAAC;AAE7B,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,UAAU,CAAC,GAAG,EAAE;QACd,qBAAqB;QACrB,GAAG,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,oBAAoB;QACpB,GAAG,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACxB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACxB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAC9C,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAC9C,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;YAC5C,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;QACnB,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACzB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAC9C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ;YACtB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;YAC5C,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"each_arg.test.d.ts","sourceRoot":"","sources":["../../tests/each_arg.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import Core from '../src/core';
|
|
3
|
+
import Queue from '../src/queue';
|
|
4
|
+
import Fragment from '../src/fragment';
|
|
5
|
+
describe('data-each-arg の適用(プリミティブ配列のバインディング)', () => {
|
|
6
|
+
const markMounted = (f) => {
|
|
7
|
+
f.setMounted(true);
|
|
8
|
+
f.getChildElementFragments().forEach(child => markMounted(child));
|
|
9
|
+
};
|
|
10
|
+
it('プリミティブ配列 + each-arg で {{item}} が展開される', async () => {
|
|
11
|
+
const container = document.createElement('div');
|
|
12
|
+
document.body.appendChild(container);
|
|
13
|
+
const each = document.createElement('div');
|
|
14
|
+
each.setAttribute('data-each', '["A","B"]');
|
|
15
|
+
each.setAttribute('data-each-arg', 'item');
|
|
16
|
+
const child = document.createElement('span');
|
|
17
|
+
child.textContent = '{{item}}';
|
|
18
|
+
each.appendChild(child);
|
|
19
|
+
container.appendChild(each);
|
|
20
|
+
const frag = Fragment.get(each);
|
|
21
|
+
markMounted(frag);
|
|
22
|
+
await Core.evaluateAll(frag);
|
|
23
|
+
// キューに積まれたDOM更新が完了するまで待機
|
|
24
|
+
await Queue.wait();
|
|
25
|
+
// 念のためポーリングで最終状態を確認
|
|
26
|
+
for (let i = 0; i < 10; i++) {
|
|
27
|
+
const count = each.querySelectorAll('span').length;
|
|
28
|
+
if (count === 2) {
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
await new Promise(resolve => setTimeout(resolve, 5));
|
|
32
|
+
}
|
|
33
|
+
const spans = Array.from(each.querySelectorAll('span'));
|
|
34
|
+
// 2つのクローン(テンプレート以外)が存在し、テキストが A, B に評価される
|
|
35
|
+
expect(spans.length).toBe(2);
|
|
36
|
+
expect(spans[0].textContent).toBe('A');
|
|
37
|
+
expect(spans[1].textContent).toBe('B');
|
|
38
|
+
container.remove();
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=each_arg.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"each_arg.test.js","sourceRoot":"","sources":["../../tests/each_arg.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAC,MAAM,QAAQ,CAAC;AAC5C,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,KAAK,MAAM,cAAc,CAAC;AACjC,OAAO,QAA2B,MAAM,iBAAiB,CAAC;AAE1D,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,MAAM,WAAW,GAAG,CAAC,CAAkB,EAAE,EAAE;QACzC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,CAAC,wBAAwB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC;IAEF,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE5B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAoB,CAAC;QACnD,WAAW,CAAC,IAAI,CAAC,CAAC;QAElB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,yBAAyB;QACzB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,oBAAoB;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;YACnD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,MAAM;YACR,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CACtB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CACT,CAAC;QACvB,0CAA0C;QAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEvC,SAAS,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.test.d.ts","sourceRoot":"","sources":["../../tests/env.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import Dev from '../src/dev';
|
|
2
|
+
import Env from '../src/env';
|
|
3
|
+
describe('環境から開発モードを検出します', () => {
|
|
4
|
+
beforeEach(() => {
|
|
5
|
+
Dev.set(false);
|
|
6
|
+
document.querySelectorAll('script').forEach(script => script.remove());
|
|
7
|
+
Object.defineProperty(window, 'location', {
|
|
8
|
+
value: new URL('http://test.com'),
|
|
9
|
+
writable: true,
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
/**
|
|
13
|
+
* scriptタグを追加します。
|
|
14
|
+
*
|
|
15
|
+
* @param attr scriptタグに設定する属性名
|
|
16
|
+
* @param src scriptタグのsrc属性
|
|
17
|
+
* @param value 属性の値(省略可能)
|
|
18
|
+
*/
|
|
19
|
+
function mockScriptWithAttribute(attr, src, value) {
|
|
20
|
+
const script = document.createElement('script');
|
|
21
|
+
if (value !== undefined) {
|
|
22
|
+
script.setAttribute(attr, value);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
script.setAttribute(attr, '');
|
|
26
|
+
}
|
|
27
|
+
script.src = src;
|
|
28
|
+
document.body.appendChild(script);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* ホスト名をモックします。
|
|
32
|
+
*
|
|
33
|
+
* @param hostname モックするホスト名
|
|
34
|
+
*/
|
|
35
|
+
function mockHostname(hostname) {
|
|
36
|
+
Object.defineProperty(window, 'location', {
|
|
37
|
+
value: { hostname: hostname, href: `http://${hostname}` },
|
|
38
|
+
writable: true,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
it('data-dev属性がある場合', () => {
|
|
42
|
+
mockScriptWithAttribute('data-dev', 'haori.js');
|
|
43
|
+
Env.detect();
|
|
44
|
+
expect(Dev.isEnabled()).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
it('data-prefix="hor"属性がある場合', () => {
|
|
47
|
+
const script = document.createElement('script');
|
|
48
|
+
script.setAttribute('data-prefix', 'hor');
|
|
49
|
+
script.setAttribute('hor-dev', '');
|
|
50
|
+
script.src = 'haori.js';
|
|
51
|
+
document.body.appendChild(script);
|
|
52
|
+
Env.detect();
|
|
53
|
+
expect(Dev.isEnabled()).toBe(true);
|
|
54
|
+
});
|
|
55
|
+
it('hor-dev属性がある場合', () => {
|
|
56
|
+
mockScriptWithAttribute('hor-dev', 'haori.js');
|
|
57
|
+
Env.detect();
|
|
58
|
+
expect(Dev.isEnabled()).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
it('localhostの場合', () => {
|
|
61
|
+
mockHostname('localhost');
|
|
62
|
+
Env.detect();
|
|
63
|
+
expect(Dev.isEnabled()).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
it('127.0.0.1の場合', () => {
|
|
66
|
+
mockHostname('127.0.0.1');
|
|
67
|
+
Env.detect();
|
|
68
|
+
expect(Dev.isEnabled()).toBe(true);
|
|
69
|
+
});
|
|
70
|
+
it('::1の場合', () => {
|
|
71
|
+
mockHostname('::1');
|
|
72
|
+
Env.detect();
|
|
73
|
+
expect(Dev.isEnabled()).toBe(true);
|
|
74
|
+
});
|
|
75
|
+
it('*.localの場合', () => {
|
|
76
|
+
mockHostname('test.local');
|
|
77
|
+
Env.detect();
|
|
78
|
+
expect(Dev.isEnabled()).toBe(true);
|
|
79
|
+
});
|
|
80
|
+
it('*.localhostの場合', () => {
|
|
81
|
+
mockHostname('test.localhost');
|
|
82
|
+
Env.detect();
|
|
83
|
+
expect(Dev.isEnabled()).toBe(true);
|
|
84
|
+
});
|
|
85
|
+
it('ローカルでないホスト名の場合', () => {
|
|
86
|
+
mockHostname('test.app');
|
|
87
|
+
Env.detect();
|
|
88
|
+
expect(Dev.isEnabled()).toBe(false);
|
|
89
|
+
});
|
|
90
|
+
it('無関係なスクリプトの場合', () => {
|
|
91
|
+
mockScriptWithAttribute('data-dev', 'other.js');
|
|
92
|
+
Env.detect();
|
|
93
|
+
expect(Dev.isEnabled()).toBe(false);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=env.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.test.js","sourceRoot":"","sources":["../../tests/env.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.test.d.ts","sourceRoot":"","sources":["../../tests/event.test.ts"],"names":[],"mappings":""}
|