haori 0.1.1 → 0.1.2
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/README.ja.md +26 -15
- package/README.md +26 -15
- package/dist/haori.cjs.js +10 -9
- package/dist/haori.cjs.js.map +1 -1
- package/dist/haori.es.js +1169 -736
- package/dist/haori.es.js.map +1 -1
- package/dist/haori.iife.js +9 -8
- package/dist/haori.iife.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/package.json +70 -0
- package/dist/src/expression.d.ts +92 -0
- package/dist/src/expression.d.ts.map +1 -1
- package/dist/src/expression.js +475 -2
- package/dist/src/expression.js.map +1 -1
- package/dist/src/fragment.d.ts +9 -1
- package/dist/src/fragment.d.ts.map +1 -1
- package/dist/src/fragment.js +50 -6
- package/dist/src/fragment.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/tests/data-each-table.test.js +5 -20
- package/dist/tests/data-each-table.test.js.map +1 -1
- package/dist/tests/data-fetch-tbody-dom.test.js +1 -1
- package/dist/tests/data-fetch-tbody-dom.test.js.map +1 -1
- package/dist/tests/event.test.js +3 -2
- package/dist/tests/event.test.js.map +1 -1
- package/dist/tests/expression.test.js +92 -0
- package/dist/tests/expression.test.js.map +1 -1
- package/dist/tests/form.test.js +35 -34
- package/dist/tests/form.test.js.map +1 -1
- package/dist/tests/fragment.test.js +51 -1
- package/dist/tests/fragment.test.js.map +1 -1
- package/dist/tests/helpers/async.d.ts +19 -0
- package/dist/tests/helpers/async.d.ts.map +1 -0
- package/dist/tests/helpers/async.js +31 -0
- package/dist/tests/helpers/async.js.map +1 -0
- package/dist/tests/procedure-action-operations.test.js +15 -12
- package/dist/tests/procedure-action-operations.test.js.map +1 -1
- package/dist/tests/row-move.test.js +36 -13
- package/dist/tests/row-move.test.js.map +1 -1
- package/dist/tests/row-operations.test.js +21 -20
- package/dist/tests/row-operations.test.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -374,6 +374,14 @@ declare class ElementFragment extends Fragment {
|
|
|
374
374
|
* @returns 属性の有無
|
|
375
375
|
*/
|
|
376
376
|
hasAttribute(name: string): boolean;
|
|
377
|
+
/**
|
|
378
|
+
* DOM上の順序から、参照フラグメントに対応する children 配列の挿入位置を推定します。
|
|
379
|
+
*
|
|
380
|
+
* @param referenceChild 参照フラグメント
|
|
381
|
+
* @param insertAfter 参照位置の後ろに挿入するかどうか
|
|
382
|
+
* @returns 挿入位置。解決できない場合はnull
|
|
383
|
+
*/
|
|
384
|
+
private resolveInsertionPointFromDom;
|
|
377
385
|
/**
|
|
378
386
|
* 子ノードを参照ノードの前に挿入します。
|
|
379
387
|
* 参照ノードがnullの場合、親の最後に追加されます。
|
|
@@ -382,7 +390,7 @@ declare class ElementFragment extends Fragment {
|
|
|
382
390
|
* @param referenceChild 参照ノード
|
|
383
391
|
* @return 挿入のPromise
|
|
384
392
|
*/
|
|
385
|
-
insertBefore(newChild: Fragment, referenceChild: Fragment | null): Promise<void>;
|
|
393
|
+
insertBefore(newChild: Fragment, referenceChild: Fragment | null, referenceNodeOverride?: Node | null): Promise<void>;
|
|
386
394
|
/**
|
|
387
395
|
* 指定した参照ノードの後に子ノードを挿入します。
|
|
388
396
|
*
|
|
@@ -819,6 +827,6 @@ declare class TextFragment extends Fragment {
|
|
|
819
827
|
evaluate(): Promise<void>;
|
|
820
828
|
}
|
|
821
829
|
|
|
822
|
-
export declare const version = "0.1.
|
|
830
|
+
export declare const version = "0.1.2";
|
|
823
831
|
|
|
824
832
|
export { }
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "haori",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "A lightweight HTML-first UI engine powered by declarative data bindings and expressions.",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "vite",
|
|
7
|
+
"build": "vite build",
|
|
8
|
+
"dev:demo": "vite --config demo/vite.config.ts",
|
|
9
|
+
"build:demo": "vite build --config demo/vite.config.ts",
|
|
10
|
+
"preview:demo": "vite preview --config demo/vite.config.ts",
|
|
11
|
+
"test": "vitest run",
|
|
12
|
+
"test:watch": "vitest",
|
|
13
|
+
"lint": "eslint src",
|
|
14
|
+
"lint:fix": "eslint src --fix",
|
|
15
|
+
"format": "prettier --write src/**/*.{ts,js,json}",
|
|
16
|
+
"format:check": "prettier --check src/**/*.{ts,js,json}",
|
|
17
|
+
"type-check": "tsc --noEmit",
|
|
18
|
+
"preview": "vite preview",
|
|
19
|
+
"compile": "tsc",
|
|
20
|
+
"clean": "rm -rf dist",
|
|
21
|
+
"prepare": "npm run compile",
|
|
22
|
+
"pretest": "npm run compile",
|
|
23
|
+
"posttest": "npm run lint"
|
|
24
|
+
},
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git+https://github.com/meibinlab/haori-js.git"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"html",
|
|
31
|
+
"template",
|
|
32
|
+
"binding",
|
|
33
|
+
"ui-engine",
|
|
34
|
+
"no-javascript",
|
|
35
|
+
"dom",
|
|
36
|
+
"declarative",
|
|
37
|
+
"frontend"
|
|
38
|
+
],
|
|
39
|
+
"author": "meibinlab",
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"type": "module",
|
|
42
|
+
"exports": {
|
|
43
|
+
".": {
|
|
44
|
+
"import": "./dist/haori.js"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"main": "dist/haori.es.js",
|
|
48
|
+
"types": "./dist/index.d.ts",
|
|
49
|
+
"files": [
|
|
50
|
+
"dist"
|
|
51
|
+
],
|
|
52
|
+
"bugs": {
|
|
53
|
+
"url": "https://github.com/meibinlab/haori-js/issues"
|
|
54
|
+
},
|
|
55
|
+
"homepage": "https://github.com/meibinlab/haori-js#readme",
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@eslint/js": "^9.31.0",
|
|
58
|
+
"@playwright/test": "^1.57.0",
|
|
59
|
+
"@types/node": "^22.7.5",
|
|
60
|
+
"eslint": "^9.31.0",
|
|
61
|
+
"http-server": "^14.1.1",
|
|
62
|
+
"jsdom": "^26.1.0",
|
|
63
|
+
"prettier": "^3.6.2",
|
|
64
|
+
"typescript": "^5.6.3",
|
|
65
|
+
"typescript-eslint": "^8.37.0",
|
|
66
|
+
"vite": "^7.0.4",
|
|
67
|
+
"vite-plugin-dts": "^4.5.4",
|
|
68
|
+
"vitest": "^3.2.4"
|
|
69
|
+
}
|
|
70
|
+
}
|
package/dist/src/expression.d.ts
CHANGED
|
@@ -10,6 +10,10 @@ export default class Expression {
|
|
|
10
10
|
private static readonly FORBIDDEN_NAMES;
|
|
11
11
|
/** strict モードで禁止される識別子 */
|
|
12
12
|
private static readonly STRICT_FORBIDDEN_NAMES;
|
|
13
|
+
/** プロパティアクセスで拒否する名前 */
|
|
14
|
+
private static readonly FORBIDDEN_PROPERTY_NAMES;
|
|
15
|
+
/** 式構文として許可しない予約語 */
|
|
16
|
+
private static readonly DISALLOWED_KEYWORDS;
|
|
13
17
|
/** 式 → 評価関数のグローバルキャッシュ */
|
|
14
18
|
private static readonly EXPRESSION_CACHE;
|
|
15
19
|
/** 評価関数の前に実行されるコード */
|
|
@@ -28,6 +32,94 @@ export default class Expression {
|
|
|
28
32
|
* @return 危険なパターンが含まれている場合はtrue
|
|
29
33
|
*/
|
|
30
34
|
protected static containsDangerousPatterns(expression: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* 許可する式構文かどうかを検証します。
|
|
37
|
+
*
|
|
38
|
+
* @param expression 検証対象の式
|
|
39
|
+
* @returns 許可する構文であればtrue
|
|
40
|
+
*/
|
|
41
|
+
private static hasAllowedSyntax;
|
|
42
|
+
/**
|
|
43
|
+
* 式をトークン列に分解します。
|
|
44
|
+
*
|
|
45
|
+
* @param expression 評価前に検証する式
|
|
46
|
+
* @returns 分解結果。未対応構文を含む場合はnull
|
|
47
|
+
*/
|
|
48
|
+
private static tokenizeExpression;
|
|
49
|
+
/**
|
|
50
|
+
* 文字列リテラルを読み取ります。
|
|
51
|
+
*
|
|
52
|
+
* @param expression 式全体
|
|
53
|
+
* @param start 開始位置
|
|
54
|
+
* @returns トークンと次の位置
|
|
55
|
+
*/
|
|
56
|
+
private static readStringToken;
|
|
57
|
+
/**
|
|
58
|
+
* 数値リテラルを読み取ります。
|
|
59
|
+
*
|
|
60
|
+
* @param expression 式全体
|
|
61
|
+
* @param start 開始位置
|
|
62
|
+
* @returns トークンと次の位置
|
|
63
|
+
*/
|
|
64
|
+
private static readNumberToken;
|
|
65
|
+
/**
|
|
66
|
+
* 識別子を読み取ります。
|
|
67
|
+
*
|
|
68
|
+
* @param expression 式全体
|
|
69
|
+
* @param start 開始位置
|
|
70
|
+
* @returns トークンと次の位置
|
|
71
|
+
*/
|
|
72
|
+
private static readIdentifierToken;
|
|
73
|
+
/**
|
|
74
|
+
* 角括弧がメンバーアクセスかどうかを判定します。
|
|
75
|
+
*
|
|
76
|
+
* @param previous 直前のトークン
|
|
77
|
+
* @returns メンバーアクセスであればtrue
|
|
78
|
+
*/
|
|
79
|
+
private static startsMemberAccess;
|
|
80
|
+
/**
|
|
81
|
+
* 文字列リテラルをプレーン文字列へ変換します。
|
|
82
|
+
*
|
|
83
|
+
* @param literal 文字列リテラル
|
|
84
|
+
* @returns デコード後の文字列
|
|
85
|
+
*/
|
|
86
|
+
private static decodeStringLiteral;
|
|
87
|
+
/**
|
|
88
|
+
* バインド値を安全なProxyでラップします。
|
|
89
|
+
*
|
|
90
|
+
* @param bindedValues バインド値
|
|
91
|
+
* @returns ラップ済みのバインド値
|
|
92
|
+
*/
|
|
93
|
+
private static wrapBoundValues;
|
|
94
|
+
/**
|
|
95
|
+
* 危険なプロパティアクセスを防ぐために値を再帰的にラップします。
|
|
96
|
+
*
|
|
97
|
+
* @param value ラップ対象の値
|
|
98
|
+
* @param cache 既存Proxyのキャッシュ
|
|
99
|
+
* @returns ラップ済みの値
|
|
100
|
+
*/
|
|
101
|
+
private static wrapBoundValue;
|
|
102
|
+
/**
|
|
103
|
+
* Proxy ラップ対象の値かどうかを判定します。
|
|
104
|
+
*
|
|
105
|
+
* @param value 判定対象
|
|
106
|
+
* @returns ラップ対象であればtrue
|
|
107
|
+
*/
|
|
108
|
+
private static shouldWrapValue;
|
|
109
|
+
/**
|
|
110
|
+
* 評価中のみ prototype 系プロパティへの生アクセスを抑止します。
|
|
111
|
+
*
|
|
112
|
+
* @param callback 実行する処理
|
|
113
|
+
* @returns 処理結果
|
|
114
|
+
*/
|
|
115
|
+
private static withBlockedPropertyAccess;
|
|
116
|
+
/**
|
|
117
|
+
* イテレータ互換オブジェクトかどうかを判定します。
|
|
118
|
+
*
|
|
119
|
+
* @param value 判定対象
|
|
120
|
+
* @returns イテレータ互換であればtrue
|
|
121
|
+
*/
|
|
122
|
+
private static isIteratorLike;
|
|
31
123
|
/**
|
|
32
124
|
* valuesオブジェクトに禁止識別子が含まれていないか再帰的にチェックします。
|
|
33
125
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../src/expression.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../src/expression.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,0DAA0D;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAgCrC;IAEF,0BAA0B;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAyB;IAEvE,uBAAuB;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAI7C;IAEH,qBAAqB;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAkCxC;IAEH,0BAA0B;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAGpC;IAEJ,sBAAsB;IACtB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAS;IAWnC;;;;;OAKG;WACW,QAAQ,CACpB,UAAU,EAAE,MAAM,EAClB,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACzC,OAAO;IA2DV;;;;;OAKG;IACH,SAAS,CAAC,MAAM,CAAC,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAYvE;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAuF/B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAiGjC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IA6B9B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAwB9B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAqBlC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAcjC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA+BlC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAa9B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IA4E7B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAe9B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAiCxC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAQ7B;;;;;OAKG;IACH,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;CAiB9D"}
|