draft-ole 0.9.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 +134 -0
- package/README.md +128 -0
- package/dist/chunk-5BNNDTRT.js +95 -0
- package/dist/chunk-5BNNDTRT.js.map +1 -0
- package/dist/chunk-STLTIBMA.js +7658 -0
- package/dist/chunk-STLTIBMA.js.map +1 -0
- package/dist/chunk-YK4Y4ENL.js +389 -0
- package/dist/chunk-YK4Y4ENL.js.map +1 -0
- package/dist/entries/app.cjs +7337 -0
- package/dist/entries/app.cjs.map +1 -0
- package/dist/entries/app.d.cts +115 -0
- package/dist/entries/app.d.ts +115 -0
- package/dist/entries/app.js +10 -0
- package/dist/entries/app.js.map +1 -0
- package/dist/entries/page.cjs +7558 -0
- package/dist/entries/page.cjs.map +1 -0
- package/dist/entries/page.d.cts +2 -0
- package/dist/entries/page.d.ts +2 -0
- package/dist/entries/page.js +30 -0
- package/dist/entries/page.js.map +1 -0
- package/dist/index.cjs +10524 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +4700 -0
- package/dist/index.d.ts +4700 -0
- package/dist/index.js +2573 -0
- package/dist/index.js.map +1 -0
- package/dist/page-DylNkWXm.d.ts +366 -0
- package/dist/page-h3DPzs8l.d.cts +366 -0
- package/dist/transformer/call-detector.d.ts +38 -0
- package/dist/transformer/call-detector.d.ts.map +1 -0
- package/dist/transformer/call-detector.js +151 -0
- package/dist/transformer/call-detector.js.map +1 -0
- package/dist/transformer/command-injector.d.ts +27 -0
- package/dist/transformer/command-injector.d.ts.map +1 -0
- package/dist/transformer/command-injector.js +111 -0
- package/dist/transformer/command-injector.js.map +1 -0
- package/dist/transformer/diagnostic-reporter.d.ts +81 -0
- package/dist/transformer/diagnostic-reporter.d.ts.map +1 -0
- package/dist/transformer/diagnostic-reporter.js +330 -0
- package/dist/transformer/diagnostic-reporter.js.map +1 -0
- package/dist/transformer/each-scope-branch.d.ts +28 -0
- package/dist/transformer/each-scope-branch.d.ts.map +1 -0
- package/dist/transformer/each-scope-branch.js +95 -0
- package/dist/transformer/each-scope-branch.js.map +1 -0
- package/dist/transformer/each-state-rewriter.d.ts +117 -0
- package/dist/transformer/each-state-rewriter.d.ts.map +1 -0
- package/dist/transformer/each-state-rewriter.js +393 -0
- package/dist/transformer/each-state-rewriter.js.map +1 -0
- package/dist/transformer/format-diagnostics.d.ts +27 -0
- package/dist/transformer/format-diagnostics.d.ts.map +1 -0
- package/dist/transformer/format-diagnostics.js +50 -0
- package/dist/transformer/format-diagnostics.js.map +1 -0
- package/dist/transformer/handler-ir-extractor.d.ts +71 -0
- package/dist/transformer/handler-ir-extractor.d.ts.map +1 -0
- package/dist/transformer/handler-ir-extractor.js +171 -0
- package/dist/transformer/handler-ir-extractor.js.map +1 -0
- package/dist/transformer/handler-serializer.d.ts +56 -0
- package/dist/transformer/handler-serializer.d.ts.map +1 -0
- package/dist/transformer/handler-serializer.js +315 -0
- package/dist/transformer/handler-serializer.js.map +1 -0
- package/dist/transformer/helper-context-resolver.d.ts +180 -0
- package/dist/transformer/helper-context-resolver.d.ts.map +1 -0
- package/dist/transformer/helper-context-resolver.js +376 -0
- package/dist/transformer/helper-context-resolver.js.map +1 -0
- package/dist/transformer/helper-decl-utils.d.ts +28 -0
- package/dist/transformer/helper-decl-utils.d.ts.map +1 -0
- package/dist/transformer/helper-decl-utils.js +92 -0
- package/dist/transformer/helper-decl-utils.js.map +1 -0
- package/dist/transformer/identifier-collector.d.ts +28 -0
- package/dist/transformer/identifier-collector.d.ts.map +1 -0
- package/dist/transformer/identifier-collector.js +184 -0
- package/dist/transformer/identifier-collector.js.map +1 -0
- package/dist/transformer/index.d.ts +56 -0
- package/dist/transformer/index.d.ts.map +1 -0
- package/dist/transformer/index.js +333 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/transformer/inline-recovery.d.ts +109 -0
- package/dist/transformer/inline-recovery.d.ts.map +1 -0
- package/dist/transformer/inline-recovery.js +369 -0
- package/dist/transformer/inline-recovery.js.map +1 -0
- package/dist/transformer/label-injector.d.ts +105 -0
- package/dist/transformer/label-injector.d.ts.map +1 -0
- package/dist/transformer/label-injector.js +221 -0
- package/dist/transformer/label-injector.js.map +1 -0
- package/dist/transformer/package.json +3 -0
- package/dist/transformer/per-call-context.d.ts +95 -0
- package/dist/transformer/per-call-context.d.ts.map +1 -0
- package/dist/transformer/per-call-context.js +3 -0
- package/dist/transformer/per-call-context.js.map +1 -0
- package/dist/transformer/state-id-fallback.d.ts +85 -0
- package/dist/transformer/state-id-fallback.d.ts.map +1 -0
- package/dist/transformer/state-id-fallback.js +132 -0
- package/dist/transformer/state-id-fallback.js.map +1 -0
- package/dist/transformer/state-id-resolver.d.ts +104 -0
- package/dist/transformer/state-id-resolver.d.ts.map +1 -0
- package/dist/transformer/state-id-resolver.js +222 -0
- package/dist/transformer/state-id-resolver.js.map +1 -0
- package/dist/transformer/theme-class-detector.d.ts +47 -0
- package/dist/transformer/theme-class-detector.d.ts.map +1 -0
- package/dist/transformer/theme-class-detector.js +242 -0
- package/dist/transformer/theme-class-detector.js.map +1 -0
- package/dist/transformer/varname-resolver.d.ts +53 -0
- package/dist/transformer/varname-resolver.d.ts.map +1 -0
- package/dist/transformer/varname-resolver.js +231 -0
- package/dist/transformer/varname-resolver.js.map +1 -0
- package/dist/transformer/whitelist-registry.d.ts +68 -0
- package/dist/transformer/whitelist-registry.d.ts.map +1 -0
- package/dist/transformer/whitelist-registry.js +122 -0
- package/dist/transformer/whitelist-registry.js.map +1 -0
- package/dist/transformer/whitelist-validator.d.ts +59 -0
- package/dist/transformer/whitelist-validator.d.ts.map +1 -0
- package/dist/transformer/whitelist-validator.js +493 -0
- package/dist/transformer/whitelist-validator.js.map +1 -0
- package/dist/types-BXV3vhHS.d.cts +4590 -0
- package/dist/types-BXV3vhHS.d.ts +4590 -0
- package/package.json +121 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { aF as Root, aG as StaticView, al as PageOptions, b as HtmlTag, T as TagType, e as HtmlTagOptions, R as RenderContext, a as HTMLTagProtocol, v as ButtonOptions, ay as View, ad as HeadingLevel, ak as LinkOptions } from './types-BXV3vhHS.cjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 静的ページ書き出しのオプション。
|
|
5
|
+
*
|
|
6
|
+
* design.md §6.3 で定義された `StaticExportOptions` インターフェース。
|
|
7
|
+
*
|
|
8
|
+
* - `htmlFileName`: 出力 HTML ファイル名(デフォルト: `'index.html'`)
|
|
9
|
+
* - `cssFileName`: 出力 CSS ファイル名(デフォルト: `'style.css'`)。`inlineCss=false` のときのみ使用
|
|
10
|
+
* - `inlineCss`: CSS を `<style>` タグとして HTML 内に埋め込むか(デフォルト: `true`)
|
|
11
|
+
*
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
interface StaticExportOptions {
|
|
15
|
+
readonly htmlFileName?: string;
|
|
16
|
+
readonly cssFileName?: string;
|
|
17
|
+
readonly inlineCss?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* 静的ページの境界オブジェクト。
|
|
22
|
+
*
|
|
23
|
+
* 内部で {@link Root} を保持するが外部 API では露出しない。
|
|
24
|
+
* `render()` は HTML + inline CSS を返し、`export()` は {@link StaticPageWriter} に委譲する。
|
|
25
|
+
*
|
|
26
|
+
* design.md §6.3 / requirements.md 4.2, 5.1, 5.2 に対応。
|
|
27
|
+
*
|
|
28
|
+
* 構築時 pure validation を {@link page} ファクトリで 1 度だけ実施するため、
|
|
29
|
+
* `render()` / `export()` 側では再検証しない(冪等性)。
|
|
30
|
+
*/
|
|
31
|
+
declare class PageDocument {
|
|
32
|
+
private readonly _root;
|
|
33
|
+
/**
|
|
34
|
+
* @internal `page()` ファクトリからのみ呼び出されることを想定する。
|
|
35
|
+
* 外部から直接構築すると静的性検証を素通りするため非推奨。
|
|
36
|
+
*/
|
|
37
|
+
constructor(root: Root);
|
|
38
|
+
render(): string;
|
|
39
|
+
export(outputPath: string, options?: StaticExportOptions): void;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 静的ページのファクトリ。
|
|
43
|
+
*
|
|
44
|
+
* design.md §6.2 に準拠し `StaticView` を受け取り {@link PageDocument} を返す。
|
|
45
|
+
*
|
|
46
|
+
* **レイアウト契約**: 渡した StaticView は `<main>` の直接の子として縦方向に積まれる(ブロックフロー)。
|
|
47
|
+
* ページルート自体のレイアウト変更は不可。横並び等が必要な場合は View 側でコンテナを組むこと。
|
|
48
|
+
*
|
|
49
|
+
* 構築時 pure validation:
|
|
50
|
+
* - 新規 `Root` 構築直後に `_root.collectUsedMethods()` / `_root.collectJsContent()`
|
|
51
|
+
* を 1 回だけ読み取り専用 walk として実行する。
|
|
52
|
+
* - いずれかが非空なら `Error('page surface does not allow runtime content: <hint>')`
|
|
53
|
+
* を throw し、`PageDocument` は生成されない(requirements.md 3.2)。
|
|
54
|
+
* - `protoRender()` は呼ばないため `RenderContext.registry.reset()` 等の
|
|
55
|
+
* レンダー副作用は発生しない(design.md §6.3 冪等性)。
|
|
56
|
+
*/
|
|
57
|
+
declare function page(...views: StaticView[]): PageDocument;
|
|
58
|
+
declare function page(...args: [...StaticView[], PageOptions]): PageDocument;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Alignment 定数と型定義
|
|
62
|
+
*
|
|
63
|
+
* SwiftUI の Alignment に対応する CSS 値の定数を提供する。
|
|
64
|
+
*/
|
|
65
|
+
declare const Alignment: {
|
|
66
|
+
readonly center: "center";
|
|
67
|
+
readonly leading: "flex-start";
|
|
68
|
+
readonly trailing: "flex-end";
|
|
69
|
+
readonly top: "flex-start";
|
|
70
|
+
readonly bottom: "flex-end";
|
|
71
|
+
};
|
|
72
|
+
type AlignmentValue = typeof Alignment[keyof typeof Alignment];
|
|
73
|
+
declare const ZStackAlignment: {
|
|
74
|
+
readonly center: {
|
|
75
|
+
readonly alignItems: "center";
|
|
76
|
+
readonly justifyContent: "center";
|
|
77
|
+
};
|
|
78
|
+
readonly topLeading: {
|
|
79
|
+
readonly alignItems: "flex-start";
|
|
80
|
+
readonly justifyContent: "flex-start";
|
|
81
|
+
};
|
|
82
|
+
readonly topTrailing: {
|
|
83
|
+
readonly alignItems: "flex-start";
|
|
84
|
+
readonly justifyContent: "flex-end";
|
|
85
|
+
};
|
|
86
|
+
readonly bottomLeading: {
|
|
87
|
+
readonly alignItems: "flex-end";
|
|
88
|
+
readonly justifyContent: "flex-start";
|
|
89
|
+
};
|
|
90
|
+
readonly bottomTrailing: {
|
|
91
|
+
readonly alignItems: "flex-end";
|
|
92
|
+
readonly justifyContent: "flex-end";
|
|
93
|
+
};
|
|
94
|
+
readonly top: {
|
|
95
|
+
readonly alignItems: "flex-start";
|
|
96
|
+
readonly justifyContent: "center";
|
|
97
|
+
};
|
|
98
|
+
readonly bottom: {
|
|
99
|
+
readonly alignItems: "flex-end";
|
|
100
|
+
readonly justifyContent: "center";
|
|
101
|
+
};
|
|
102
|
+
readonly leading: {
|
|
103
|
+
readonly alignItems: "center";
|
|
104
|
+
readonly justifyContent: "flex-start";
|
|
105
|
+
};
|
|
106
|
+
readonly trailing: {
|
|
107
|
+
readonly alignItems: "center";
|
|
108
|
+
readonly justifyContent: "flex-end";
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
type ZStackAlignmentKey = keyof typeof ZStackAlignment;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* レイアウト型定義
|
|
115
|
+
*
|
|
116
|
+
* SwiftUI の HStack / VStack / ZStack / Spacer に対応するオプション型と
|
|
117
|
+
* 子要素型を定義する。
|
|
118
|
+
*
|
|
119
|
+
* Requirements: 1.1, 2.1, 3.1, 4.1, 5.1
|
|
120
|
+
*/
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* HStack / VStack のオプション。
|
|
124
|
+
*
|
|
125
|
+
* - `spacing`: 子要素間のギャップ(px 単位の数値)。CSS `gap` に対応する。
|
|
126
|
+
* - `alignment`: 交差軸方向の整列。CSS `align-items` に対応する。
|
|
127
|
+
* - `wrap`: 折り返し有無。CSS `flex-wrap: wrap` に対応する。
|
|
128
|
+
*/
|
|
129
|
+
interface StackOptions {
|
|
130
|
+
spacing?: number;
|
|
131
|
+
alignment?: AlignmentValue;
|
|
132
|
+
wrap?: boolean;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* ZStack のオプション。
|
|
136
|
+
*
|
|
137
|
+
* - `alignment`: 重ね合わせ時の整列キー。`ZStackAlignment` の各キーに対応する。
|
|
138
|
+
*/
|
|
139
|
+
interface ZStackOptions {
|
|
140
|
+
alignment?: ZStackAlignmentKey;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Spacer のオプション。
|
|
144
|
+
*
|
|
145
|
+
* - `minLength`: スペーサーの最小サイズ(px 単位の数値)。
|
|
146
|
+
* 水平方向では `min-width`、垂直方向では `min-height` に対応する。
|
|
147
|
+
*/
|
|
148
|
+
interface SpacerOptions {
|
|
149
|
+
minLength?: number;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* レイアウトコンテナの子要素型。
|
|
153
|
+
*
|
|
154
|
+
* `HtmlTag` インスタンスまたはテキスト文字列を受け付ける。
|
|
155
|
+
*/
|
|
156
|
+
type LayoutChild = HtmlTag | string;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Task 4.2: PairType ペアタグ要素
|
|
160
|
+
*
|
|
161
|
+
* 開始タグと終了タグを持つペア要素(div, p, span等)を表現する。
|
|
162
|
+
* HtmlTag 基底クラスを継承し、<tag attrs>children</tag> 形式でレンダリングする。
|
|
163
|
+
*
|
|
164
|
+
* PairType は HtmlTag の全動作をそのまま継承する最も標準的なタグ種別であり、
|
|
165
|
+
* addChild()/addChildren() で子要素を追加順に保持し、
|
|
166
|
+
* protoRender() で <tag attrs>children</tag> を出力する。
|
|
167
|
+
*
|
|
168
|
+
* Requirements: 3.2, 3.5, 3.6, 6.5, 6.8
|
|
169
|
+
*/
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Represents HTML elements with opening and closing tags.
|
|
173
|
+
*
|
|
174
|
+
* PairType is the most common HTML element type, used for elements like
|
|
175
|
+
* `<div>`, `<p>`, `<span>`, etc. These elements have both an opening tag
|
|
176
|
+
* and a closing tag, and can contain child elements.
|
|
177
|
+
*
|
|
178
|
+
* **Rendering Format:**
|
|
179
|
+
* ```html
|
|
180
|
+
* <tag attrs>children</tag>
|
|
181
|
+
* ```
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```typescript
|
|
185
|
+
* // Using factory functions (recommended)
|
|
186
|
+
* const element = div(
|
|
187
|
+
* p('Hello'),
|
|
188
|
+
* span('World')
|
|
189
|
+
* );
|
|
190
|
+
*
|
|
191
|
+
* // Direct instantiation (less common)
|
|
192
|
+
* const custom = new PairType('div');
|
|
193
|
+
* custom.addChild(new TextType('Content'));
|
|
194
|
+
* ```
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* With attributes:
|
|
198
|
+
* ```typescript
|
|
199
|
+
* const element = div(
|
|
200
|
+
* { class: 'container', id: 'main' },
|
|
201
|
+
* p('Content')
|
|
202
|
+
* );
|
|
203
|
+
* console.log(element.render());
|
|
204
|
+
* // <div class="container" id="main">
|
|
205
|
+
* // <p>Content</p>
|
|
206
|
+
* // </div>
|
|
207
|
+
* ```
|
|
208
|
+
*
|
|
209
|
+
* @remarks
|
|
210
|
+
* **Preconditions:** tagType must be a valid pair tag (not self-closing)
|
|
211
|
+
*
|
|
212
|
+
* **Postconditions:** `protoRender()` returns `<tag attrs>children</tag>` format
|
|
213
|
+
*
|
|
214
|
+
* **Invariants:** Children order is preserved in insertion order
|
|
215
|
+
*/
|
|
216
|
+
declare class PairType extends HtmlTag {
|
|
217
|
+
/**
|
|
218
|
+
* Creates a new PairType element.
|
|
219
|
+
*
|
|
220
|
+
* @param tagType - The HTML tag type (e.g., 'div', 'p', 'span')
|
|
221
|
+
*
|
|
222
|
+
* @remarks
|
|
223
|
+
* It's recommended to use factory functions like {@link div}, {@link p}, {@link span}
|
|
224
|
+
* instead of direct instantiation.
|
|
225
|
+
*/
|
|
226
|
+
constructor(tagType: TagType, options?: HtmlTagOptions);
|
|
227
|
+
/**
|
|
228
|
+
* Task 3.2: PairType の protoRender override。
|
|
229
|
+
*
|
|
230
|
+
* 受け取った ctx を基底クラス実装に伝搬し、基底クラスが内部で
|
|
231
|
+
* 子要素 `protoRender(ctx)` に同一インスタンスを渡せるようにする。
|
|
232
|
+
* 出力フォーマット(`<tag attrs>children</tag>`)は基底クラス挙動を維持する。
|
|
233
|
+
*/
|
|
234
|
+
protoRender(ctx?: RenderContext): string;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Task 4.3: SelfClosingType 自己終了タグ要素
|
|
239
|
+
*
|
|
240
|
+
* 終了タグを持たない自己終了要素(br, hr, img, input, meta, link 等)を表す。
|
|
241
|
+
* HtmlTag を継承し、addChild/addChildren をオーバーライドして
|
|
242
|
+
* 子要素追加を静かに無視する(no-op)。
|
|
243
|
+
*
|
|
244
|
+
* レンダリングは基底クラスの protoRender() が SELF_CLOSING_TAGS を参照して
|
|
245
|
+
* `<tag attrs>` 形式を生成するため、追加のオーバーライドは不要。
|
|
246
|
+
*
|
|
247
|
+
* Requirements: 3.3, 6.4, 10.1
|
|
248
|
+
*/
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Represents self-closing (void) HTML elements.
|
|
252
|
+
*
|
|
253
|
+
* Self-closing elements don't have closing tags and cannot contain children.
|
|
254
|
+
* Examples include `<br>`, `<hr>`, `<img>`, `<input>`, `<meta>`, `<link>`, etc.
|
|
255
|
+
*
|
|
256
|
+
* **Rendering Format:**
|
|
257
|
+
* ```html
|
|
258
|
+
* <tag attrs>
|
|
259
|
+
* ```
|
|
260
|
+
*
|
|
261
|
+
* **Child Handling:**
|
|
262
|
+
* Attempts to add children are silently ignored (no-op) to maintain API consistency.
|
|
263
|
+
* This design choice prevents runtime errors while maintaining fluent method chaining.
|
|
264
|
+
*
|
|
265
|
+
* @example
|
|
266
|
+
* Basic usage:
|
|
267
|
+
* ```typescript
|
|
268
|
+
* // Using factory functions (recommended)
|
|
269
|
+
* const lineBreak = br();
|
|
270
|
+
* const image = img({ src: 'photo.jpg', alt: 'My photo' });
|
|
271
|
+
* const inputField = input({ type: 'text', placeholder: 'Enter name' });
|
|
272
|
+
* ```
|
|
273
|
+
*
|
|
274
|
+
* @example
|
|
275
|
+
* Child elements are silently ignored:
|
|
276
|
+
* ```typescript
|
|
277
|
+
* const lineBreak = br();
|
|
278
|
+
* lineBreak.addChild(p('This will be ignored'));
|
|
279
|
+
* console.log(lineBreak.render());
|
|
280
|
+
* // Output: <br>
|
|
281
|
+
* // (no error, child is simply not rendered)
|
|
282
|
+
* ```
|
|
283
|
+
*
|
|
284
|
+
* @remarks
|
|
285
|
+
* **Preconditions:** tagType must be in {@link SELF_CLOSING_TAGS}
|
|
286
|
+
*
|
|
287
|
+
* **Postconditions:** `protoRender()` returns `<tag attrs>` format
|
|
288
|
+
*
|
|
289
|
+
* **Invariants:** Children array is always empty (addChild/addChildren are no-ops)
|
|
290
|
+
*/
|
|
291
|
+
declare class SelfClosingType extends HtmlTag {
|
|
292
|
+
/**
|
|
293
|
+
* Creates a new SelfClosingType element.
|
|
294
|
+
*
|
|
295
|
+
* @param tagType - The HTML tag type (must be a self-closing tag like 'br', 'img', etc.)
|
|
296
|
+
*
|
|
297
|
+
* @remarks
|
|
298
|
+
* It's recommended to use factory functions like {@link br}, {@link img}, {@link input}
|
|
299
|
+
* instead of direct instantiation.
|
|
300
|
+
*/
|
|
301
|
+
constructor(tagType: TagType, options?: HtmlTagOptions);
|
|
302
|
+
/**
|
|
303
|
+
* Silently ignores child element addition (no-op).
|
|
304
|
+
*
|
|
305
|
+
* Self-closing tags cannot have children, so this method does nothing.
|
|
306
|
+
* This design prevents runtime errors while maintaining method chaining compatibility.
|
|
307
|
+
*
|
|
308
|
+
* @param _child - The child element (ignored)
|
|
309
|
+
* @returns This instance for method chaining
|
|
310
|
+
*
|
|
311
|
+
* @example
|
|
312
|
+
* ```typescript
|
|
313
|
+
* const element = br()
|
|
314
|
+
* .addChild(p('Ignored')) // No error, just ignored
|
|
315
|
+
* .addHtmlAttribute(HtmlAttribute.className('line-break'));
|
|
316
|
+
* ```
|
|
317
|
+
*/
|
|
318
|
+
addChild(_child: HTMLTagProtocol): this;
|
|
319
|
+
/**
|
|
320
|
+
* Silently ignores multiple child elements addition (no-op).
|
|
321
|
+
*
|
|
322
|
+
* Self-closing tags cannot have children, so this method does nothing.
|
|
323
|
+
*
|
|
324
|
+
* @param _children - The child elements (ignored)
|
|
325
|
+
* @returns This instance for method chaining
|
|
326
|
+
*/
|
|
327
|
+
addChildren(_children: ReadonlyArray<HTMLTagProtocol>): this;
|
|
328
|
+
/**
|
|
329
|
+
* Task 3.2: SelfClosingType の protoRender override。
|
|
330
|
+
*
|
|
331
|
+
* SelfClosing 要素は子を持たないが、シグネチャを ctx 受理形に widen し、
|
|
332
|
+
* 基底クラス実装に ctx を伝搬する。出力フォーマット(`<tag attrs>`)は
|
|
333
|
+
* 基底クラス挙動を維持する。
|
|
334
|
+
*/
|
|
335
|
+
protoRender(ctx?: RenderContext): string;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
declare function VStack(options?: StackOptions, ...children: View[]): PairType;
|
|
339
|
+
declare function HStack(options?: StackOptions, ...children: View[]): PairType;
|
|
340
|
+
declare function Text(content: string): PairType;
|
|
341
|
+
declare function Image(src: string, alt: string): SelfClosingType;
|
|
342
|
+
declare function Section(...children: View[]): PairType;
|
|
343
|
+
declare function Spacer(options?: SpacerOptions): PairType;
|
|
344
|
+
declare function Heading(level: HeadingLevel, content: string): PairType;
|
|
345
|
+
declare function Link(options: LinkOptions, ...children: View[]): PairType;
|
|
346
|
+
declare function Button(options: ButtonOptions | undefined, ...children: View[]): PairType;
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* AppSlot — マウントポイントを表す StaticView プリミティブ。
|
|
350
|
+
*
|
|
351
|
+
* `data-draftole-mount` 属性を持つ `<div>` を生成し、
|
|
352
|
+
* ランタイム系の App コンポーネントをマウントする際の
|
|
353
|
+
* プレースホルダとして機能する。
|
|
354
|
+
*
|
|
355
|
+
* - `protoRender()` は `<div data-draftole-mount="${id}"></div>` を返す。
|
|
356
|
+
* - `collectCssStyleString()` は空文字列を返す(CSS なし)。
|
|
357
|
+
* - runtime メソッド(jqm / state / script 等)は持たない。
|
|
358
|
+
* - `app/` モジュールへの依存を持たない。
|
|
359
|
+
*/
|
|
360
|
+
interface AppSlotOptions {
|
|
361
|
+
readonly id: string;
|
|
362
|
+
}
|
|
363
|
+
declare function AppSlot(options: AppSlotOptions): StaticView;
|
|
364
|
+
declare function AppSlot(id: string): StaticView;
|
|
365
|
+
|
|
366
|
+
export { Alignment as A, Button as B, HStack as H, Image as I, type LayoutChild as L, PairType as P, SelfClosingType as S, Text as T, VStack as V, type ZStackOptions as Z, type StackOptions as a, type SpacerOptions as b, type AlignmentValue as c, AppSlot as d, type AppSlotOptions as e, Heading as f, Link as g, PageDocument as h, Section as i, Spacer as j, ZStackAlignment as k, type ZStackAlignmentKey as l, type StaticExportOptions as m, page as p };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* call-detector: `.on(event, arrow)` 呼び出しの AST 特定
|
|
3
|
+
*
|
|
4
|
+
* Task 4.1:
|
|
5
|
+
* - `ts.visitEachChild` で `ts.CallExpression` を走査
|
|
6
|
+
* - プロパティアクセスが `.on` かつ引数数=2 かつ第1引数が string literal かつ
|
|
7
|
+
* 第2引数が `ts.ArrowFunction` を特定
|
|
8
|
+
* - `(s: ScriptScope) => ...` 形式(第2引数のパラメータ型が ScriptScope)はスキップ
|
|
9
|
+
* - 第2引数が ArrowFunction でない場合は `ts.Diagnostic` error を生成
|
|
10
|
+
*
|
|
11
|
+
* 対応 requirements: 2.1, 2.4, 5.3
|
|
12
|
+
*/
|
|
13
|
+
import * as ts from 'typescript';
|
|
14
|
+
export interface OnCallInfo {
|
|
15
|
+
/** `.on(event, arrow)` の CallExpression ノード */
|
|
16
|
+
readonly callExpr: ts.CallExpression;
|
|
17
|
+
/** 第1引数: イベント名 string literal */
|
|
18
|
+
readonly eventArg: ts.StringLiteral;
|
|
19
|
+
/** 第2引数: アロー関数 */
|
|
20
|
+
readonly handlerArg: ts.ArrowFunction;
|
|
21
|
+
}
|
|
22
|
+
export interface CallDetectorResult {
|
|
23
|
+
/** 検出された `.on(event, arrow)` 呼び出し一覧 */
|
|
24
|
+
readonly detected: readonly OnCallInfo[];
|
|
25
|
+
/** 非アロー関数ハンドラに対するエラー診断一覧 */
|
|
26
|
+
readonly diagnostics: readonly ts.Diagnostic[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* ts.Program を受け取り、ソースファイルを走査して `.on(event, arrow)` を検出する
|
|
30
|
+
* ビジター関数を返す。
|
|
31
|
+
*
|
|
32
|
+
* フィーチャーフラグが OFF の場合はスタブ(何も検出しない)を返す。
|
|
33
|
+
*
|
|
34
|
+
* @param program ts.Program インスタンス
|
|
35
|
+
* @returns SourceFile を受け取り CallDetectorResult を返す関数
|
|
36
|
+
*/
|
|
37
|
+
export declare function createCallDetector(program: ts.Program): (sourceFile: ts.SourceFile) => CallDetectorResult;
|
|
38
|
+
//# sourceMappingURL=call-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-detector.d.ts","sourceRoot":"","sources":["../../src/transformer/call-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAIjC,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC;IACrC,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,CAAC;IACpC,kBAAkB;IAClB,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,aAAa,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;IACzC,4BAA4B;IAC5B,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;CAChD;AA0DD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,EAAE,CAAC,OAAO,GAClB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,KAAK,kBAAkB,CA8DnD"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* call-detector: `.on(event, arrow)` 呼び出しの AST 特定
|
|
4
|
+
*
|
|
5
|
+
* Task 4.1:
|
|
6
|
+
* - `ts.visitEachChild` で `ts.CallExpression` を走査
|
|
7
|
+
* - プロパティアクセスが `.on` かつ引数数=2 かつ第1引数が string literal かつ
|
|
8
|
+
* 第2引数が `ts.ArrowFunction` を特定
|
|
9
|
+
* - `(s: ScriptScope) => ...` 形式(第2引数のパラメータ型が ScriptScope)はスキップ
|
|
10
|
+
* - 第2引数が ArrowFunction でない場合は `ts.Diagnostic` error を生成
|
|
11
|
+
*
|
|
12
|
+
* 対応 requirements: 2.1, 2.4, 5.3
|
|
13
|
+
*/
|
|
14
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}) : (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
}));
|
|
25
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
+
}) : function(o, v) {
|
|
28
|
+
o["default"] = v;
|
|
29
|
+
});
|
|
30
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
+
var ownKeys = function(o) {
|
|
32
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
+
var ar = [];
|
|
34
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
return ownKeys(o);
|
|
38
|
+
};
|
|
39
|
+
return function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.createCallDetector = createCallDetector;
|
|
49
|
+
const ts = __importStar(require("typescript"));
|
|
50
|
+
// ---- ヘルパー ----------------------------------------------------------------
|
|
51
|
+
/**
|
|
52
|
+
* ts.ArrowFunction の第1パラメータの型が ScriptScope であるかを判定する。
|
|
53
|
+
*
|
|
54
|
+
* TypeChecker を使って型名を取得し、`ScriptScope` または `_emitHandlerBody` プロパティ
|
|
55
|
+
* を持つ型であればスキップ対象とする。
|
|
56
|
+
*/
|
|
57
|
+
function isScriptScopeHandler(arrowFn, checker) {
|
|
58
|
+
if (arrowFn.parameters.length === 0) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
const firstParam = arrowFn.parameters[0];
|
|
62
|
+
const paramType = checker.getTypeAtLocation(firstParam);
|
|
63
|
+
// 型名文字列によるチェック
|
|
64
|
+
const typeName = checker.typeToString(paramType);
|
|
65
|
+
if (typeName === 'ScriptScope') {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
// 構造的マーカー: _emitHandlerBody プロパティを持つ型は ScriptScope 派生とみなす
|
|
69
|
+
const emitProp = paramType.getProperty('_emitHandlerBody');
|
|
70
|
+
if (emitProp !== undefined) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* ソースファイルの診断情報を作成するヘルパー
|
|
77
|
+
*/
|
|
78
|
+
function createDiagnostic(node, messageText) {
|
|
79
|
+
const sourceFile = node.getSourceFile();
|
|
80
|
+
const start = node.getStart(sourceFile, false);
|
|
81
|
+
const length = node.getWidth(sourceFile);
|
|
82
|
+
return {
|
|
83
|
+
file: sourceFile,
|
|
84
|
+
start,
|
|
85
|
+
length,
|
|
86
|
+
messageText,
|
|
87
|
+
category: ts.DiagnosticCategory.Error,
|
|
88
|
+
code: 9001,
|
|
89
|
+
source: 'draftole-transformer',
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// ---- メイン実装 --------------------------------------------------------------
|
|
93
|
+
/**
|
|
94
|
+
* ts.Program を受け取り、ソースファイルを走査して `.on(event, arrow)` を検出する
|
|
95
|
+
* ビジター関数を返す。
|
|
96
|
+
*
|
|
97
|
+
* フィーチャーフラグが OFF の場合はスタブ(何も検出しない)を返す。
|
|
98
|
+
*
|
|
99
|
+
* @param program ts.Program インスタンス
|
|
100
|
+
* @returns SourceFile を受け取り CallDetectorResult を返す関数
|
|
101
|
+
*/
|
|
102
|
+
function createCallDetector(program) {
|
|
103
|
+
const checker = program.getTypeChecker();
|
|
104
|
+
return (sourceFile) => {
|
|
105
|
+
const detected = [];
|
|
106
|
+
const diagnostics = [];
|
|
107
|
+
function visit(node) {
|
|
108
|
+
if (ts.isCallExpression(node)) {
|
|
109
|
+
const expr = node.expression;
|
|
110
|
+
// `.on(...)` の形: PropertyAccessExpression でプロパティ名が "on"
|
|
111
|
+
if (ts.isPropertyAccessExpression(expr) &&
|
|
112
|
+
expr.name.text === 'on' &&
|
|
113
|
+
node.arguments.length === 2) {
|
|
114
|
+
const firstArg = node.arguments[0];
|
|
115
|
+
const secondArg = node.arguments[1];
|
|
116
|
+
// 第1引数が string literal であること
|
|
117
|
+
if (ts.isStringLiteral(firstArg)) {
|
|
118
|
+
if (ts.isArrowFunction(secondArg)) {
|
|
119
|
+
// ArrowFunction: ScriptScope 形式かチェック
|
|
120
|
+
if (isScriptScopeHandler(secondArg, checker)) {
|
|
121
|
+
// (s: ScriptScope) => ... 形式はスキップ(従来形式)
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// 対象として記録
|
|
125
|
+
detected.push({
|
|
126
|
+
callExpr: node,
|
|
127
|
+
eventArg: firstArg,
|
|
128
|
+
handlerArg: secondArg,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else if (ts.isFunctionExpression(secondArg) ||
|
|
133
|
+
ts.isFunctionDeclaration(secondArg) ||
|
|
134
|
+
ts.isIdentifier(secondArg) ||
|
|
135
|
+
ts.isPropertyAccessExpression(secondArg)) {
|
|
136
|
+
// 非アロー関数(関数式・変数参照等)はエラー
|
|
137
|
+
diagnostics.push(createDiagnostic(secondArg, 'DraftOle DT001: .on() handler must be an arrow function `(e) => ...`. ' +
|
|
138
|
+
'Function declarations, function expressions, and variable references are not supported. ' +
|
|
139
|
+
'See docs/api/handler-serialization.md'));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// 子ノードを再帰的に走査
|
|
145
|
+
ts.forEachChild(node, visit);
|
|
146
|
+
}
|
|
147
|
+
visit(sourceFile);
|
|
148
|
+
return { detected, diagnostics };
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=call-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-detector.js","sourceRoot":"","sources":["../../src/transformer/call-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* command-injector: 検査 PASS した `.on` 呼び出しの第2引数を
|
|
3
|
+
* `(s) => s._emitHandlerBody("<serialized>", [<params>])` に書き換え、
|
|
4
|
+
* 生成アロー関数に `_draftoleEmitted = true` マーカーを付与するラッパを挿入する。
|
|
5
|
+
*
|
|
6
|
+
* Task 6.2:
|
|
7
|
+
* - `SerializedHandler { code, params }` を受け取り、`.on` の CallExpression を変換
|
|
8
|
+
* - 書き換え後の第2引数:
|
|
9
|
+
* `Object.assign((s) => s._emitHandlerBody("<code>", [<params>]), { _draftoleEmitted: true })`
|
|
10
|
+
* - `Object.assign` により runtime で `_draftoleEmitted === true` が判定可能になる
|
|
11
|
+
*
|
|
12
|
+
* 対応 requirements: 1.5, 4.1
|
|
13
|
+
* 対応 design: §command-injector, §`.on` 実装側 dispatcher 擬似コード
|
|
14
|
+
*/
|
|
15
|
+
import * as ts from 'typescript';
|
|
16
|
+
import type { SerializedHandler } from './handler-serializer.ts';
|
|
17
|
+
/**
|
|
18
|
+
* `.on(event, originalArrow)` の CallExpression を受け取り、
|
|
19
|
+
* 第2引数を `Object.assign((s) => s._emitHandlerBody(...), { _draftoleEmitted: true })`
|
|
20
|
+
* に書き換えた新しい CallExpression を返す。
|
|
21
|
+
*
|
|
22
|
+
* @param callExpr - 元の `.on(event, arrow)` CallExpression
|
|
23
|
+
* @param serialized - `handler-serializer` の出力 `SerializedHandler`
|
|
24
|
+
* @returns 書き換え後の CallExpression
|
|
25
|
+
*/
|
|
26
|
+
export declare function injectCommand(callExpr: ts.CallExpression, serialized: SerializedHandler): ts.CallExpression;
|
|
27
|
+
//# sourceMappingURL=command-injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-injector.d.ts","sourceRoot":"","sources":["../../src/transformer/command-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAIjE;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,EAAE,CAAC,cAAc,EAC3B,UAAU,EAAE,iBAAiB,GAC5B,EAAE,CAAC,cAAc,CA0FnB"}
|