@nahisaho/katashiro-collector 0.2.2 → 0.2.4

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 (105) hide show
  1. package/dist/browser/ActionExecutor.d.ts +85 -0
  2. package/dist/browser/ActionExecutor.d.ts.map +1 -0
  3. package/dist/browser/ActionExecutor.js +171 -0
  4. package/dist/browser/ActionExecutor.js.map +1 -0
  5. package/dist/browser/BrowserAutomation.d.ts +147 -0
  6. package/dist/browser/BrowserAutomation.d.ts.map +1 -0
  7. package/dist/browser/BrowserAutomation.js +463 -0
  8. package/dist/browser/BrowserAutomation.js.map +1 -0
  9. package/dist/browser/ContentExtractor.d.ts +54 -0
  10. package/dist/browser/ContentExtractor.d.ts.map +1 -0
  11. package/dist/browser/ContentExtractor.js +159 -0
  12. package/dist/browser/ContentExtractor.js.map +1 -0
  13. package/dist/browser/SessionManager.d.ts +67 -0
  14. package/dist/browser/SessionManager.d.ts.map +1 -0
  15. package/dist/browser/SessionManager.js +173 -0
  16. package/dist/browser/SessionManager.js.map +1 -0
  17. package/dist/browser/index.d.ts +17 -0
  18. package/dist/browser/index.d.ts.map +1 -0
  19. package/dist/browser/index.js +17 -0
  20. package/dist/browser/index.js.map +1 -0
  21. package/dist/browser/types.d.ts +361 -0
  22. package/dist/browser/types.d.ts.map +1 -0
  23. package/dist/browser/types.js +23 -0
  24. package/dist/browser/types.js.map +1 -0
  25. package/dist/document/DocumentParser.d.ts +91 -0
  26. package/dist/document/DocumentParser.d.ts.map +1 -0
  27. package/dist/document/DocumentParser.js +234 -0
  28. package/dist/document/DocumentParser.js.map +1 -0
  29. package/dist/document/index.d.ts +11 -0
  30. package/dist/document/index.d.ts.map +1 -0
  31. package/dist/document/index.js +10 -0
  32. package/dist/document/index.js.map +1 -0
  33. package/dist/document/parsers/DOCXParser.d.ts +63 -0
  34. package/dist/document/parsers/DOCXParser.d.ts.map +1 -0
  35. package/dist/document/parsers/DOCXParser.js +362 -0
  36. package/dist/document/parsers/DOCXParser.js.map +1 -0
  37. package/dist/document/parsers/PDFParser.d.ts +60 -0
  38. package/dist/document/parsers/PDFParser.d.ts.map +1 -0
  39. package/dist/document/parsers/PDFParser.js +338 -0
  40. package/dist/document/parsers/PDFParser.js.map +1 -0
  41. package/dist/document/parsers/XLSXParser.d.ts +55 -0
  42. package/dist/document/parsers/XLSXParser.d.ts.map +1 -0
  43. package/dist/document/parsers/XLSXParser.js +314 -0
  44. package/dist/document/parsers/XLSXParser.js.map +1 -0
  45. package/dist/document/parsers/index.d.ts +10 -0
  46. package/dist/document/parsers/index.d.ts.map +1 -0
  47. package/dist/document/parsers/index.js +10 -0
  48. package/dist/document/parsers/index.js.map +1 -0
  49. package/dist/document/types.d.ts +251 -0
  50. package/dist/document/types.d.ts.map +1 -0
  51. package/dist/document/types.js +13 -0
  52. package/dist/document/types.js.map +1 -0
  53. package/dist/index.d.ts +7 -2
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +14 -2
  56. package/dist/index.js.map +1 -1
  57. package/dist/research/CoverageAnalyzer.d.ts +50 -0
  58. package/dist/research/CoverageAnalyzer.d.ts.map +1 -0
  59. package/dist/research/CoverageAnalyzer.js +169 -0
  60. package/dist/research/CoverageAnalyzer.js.map +1 -0
  61. package/dist/research/QueryPlanner.d.ts +57 -0
  62. package/dist/research/QueryPlanner.d.ts.map +1 -0
  63. package/dist/research/QueryPlanner.js +102 -0
  64. package/dist/research/QueryPlanner.js.map +1 -0
  65. package/dist/research/ResultAggregator.d.ts +39 -0
  66. package/dist/research/ResultAggregator.d.ts.map +1 -0
  67. package/dist/research/ResultAggregator.js +85 -0
  68. package/dist/research/ResultAggregator.js.map +1 -0
  69. package/dist/research/WideResearchEngine.d.ts +110 -0
  70. package/dist/research/WideResearchEngine.d.ts.map +1 -0
  71. package/dist/research/WideResearchEngine.js +330 -0
  72. package/dist/research/WideResearchEngine.js.map +1 -0
  73. package/dist/research/agents/AcademicSearchAgent.d.ts +57 -0
  74. package/dist/research/agents/AcademicSearchAgent.d.ts.map +1 -0
  75. package/dist/research/agents/AcademicSearchAgent.js +180 -0
  76. package/dist/research/agents/AcademicSearchAgent.js.map +1 -0
  77. package/dist/research/agents/EncyclopediaAgent.d.ts +49 -0
  78. package/dist/research/agents/EncyclopediaAgent.d.ts.map +1 -0
  79. package/dist/research/agents/EncyclopediaAgent.js +153 -0
  80. package/dist/research/agents/EncyclopediaAgent.js.map +1 -0
  81. package/dist/research/agents/NewsSearchAgent.d.ts +38 -0
  82. package/dist/research/agents/NewsSearchAgent.d.ts.map +1 -0
  83. package/dist/research/agents/NewsSearchAgent.js +146 -0
  84. package/dist/research/agents/NewsSearchAgent.js.map +1 -0
  85. package/dist/research/agents/WebSearchAgent.d.ts +45 -0
  86. package/dist/research/agents/WebSearchAgent.d.ts.map +1 -0
  87. package/dist/research/agents/WebSearchAgent.js +135 -0
  88. package/dist/research/agents/WebSearchAgent.js.map +1 -0
  89. package/dist/research/agents/index.d.ts +13 -0
  90. package/dist/research/agents/index.d.ts.map +1 -0
  91. package/dist/research/agents/index.js +12 -0
  92. package/dist/research/agents/index.js.map +1 -0
  93. package/dist/research/agents/types.d.ts +60 -0
  94. package/dist/research/agents/types.d.ts.map +1 -0
  95. package/dist/research/agents/types.js +9 -0
  96. package/dist/research/agents/types.js.map +1 -0
  97. package/dist/research/index.d.ts +16 -0
  98. package/dist/research/index.d.ts.map +1 -0
  99. package/dist/research/index.js +17 -0
  100. package/dist/research/index.js.map +1 -0
  101. package/dist/research/types.d.ts +206 -0
  102. package/dist/research/types.d.ts.map +1 -0
  103. package/dist/research/types.js +33 -0
  104. package/dist/research/types.js.map +1 -0
  105. package/package.json +1 -1
@@ -0,0 +1,463 @@
1
+ /**
2
+ * BrowserAutomation - ブラウザ自動化メインクラス
3
+ *
4
+ * Puppeteerベースのブラウザ自動化機能を提供する。
5
+ * JavaScriptで動的に生成されるページや認証が必要なサイトから情報を収集する。
6
+ *
7
+ * @requirement REQ-COLLECT-009
8
+ * @design DES-COLLECT-009-BrowserAutomation
9
+ */
10
+ import { ok, err } from '@nahisaho/katashiro-core';
11
+ import { DEFAULT_BROWSER_CONFIG } from './types.js';
12
+ import { ActionExecutor } from './ActionExecutor.js';
13
+ import { ContentExtractor } from './ContentExtractor.js';
14
+ import { SessionManager } from './SessionManager.js';
15
+ /**
16
+ * BrowserAutomation エラー
17
+ */
18
+ export class BrowserAutomationError extends Error {
19
+ code;
20
+ cause;
21
+ constructor(code, message, cause) {
22
+ super(message);
23
+ this.code = code;
24
+ this.cause = cause;
25
+ this.name = 'BrowserAutomationError';
26
+ }
27
+ }
28
+ /**
29
+ * Browser Automation
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * const browser = new BrowserAutomation();
34
+ *
35
+ * // シンプルなスクレイピング
36
+ * const result = await browser.scrape('https://example.com');
37
+ * if (isOk(result)) {
38
+ * console.log(result.value.content);
39
+ * }
40
+ *
41
+ * // スクリーンショット
42
+ * const screenshot = await browser.screenshot('https://example.com');
43
+ *
44
+ * await browser.close();
45
+ * ```
46
+ */
47
+ export class BrowserAutomation {
48
+ config;
49
+ browser = null;
50
+ executor;
51
+ extractor;
52
+ sessionManager;
53
+ puppeteer = null;
54
+ constructor(config = {}) {
55
+ this.config = { ...DEFAULT_BROWSER_CONFIG, ...config };
56
+ this.executor = new ActionExecutor();
57
+ this.extractor = new ContentExtractor();
58
+ this.sessionManager = new SessionManager();
59
+ }
60
+ /**
61
+ * Puppeteerランチャーを設定(DI用)
62
+ */
63
+ setPuppeteer(puppeteer) {
64
+ this.puppeteer = puppeteer;
65
+ }
66
+ /**
67
+ * ブラウザを初期化
68
+ */
69
+ async initialize() {
70
+ if (this.browser)
71
+ return;
72
+ if (!this.puppeteer) {
73
+ // 動的インポートを試みる
74
+ try {
75
+ // @ts-ignore - puppeteer is optional peer dependency
76
+ const puppeteer = await import(/* webpackIgnore: true */ 'puppeteer');
77
+ this.puppeteer = puppeteer.default || puppeteer;
78
+ }
79
+ catch {
80
+ throw new BrowserAutomationError('BROWSER_NOT_INITIALIZED', 'Puppeteer is not available. Please install puppeteer: npm install puppeteer');
81
+ }
82
+ }
83
+ this.browser = await this.puppeteer.launch({
84
+ headless: this.config.headless ? 'new' : false,
85
+ args: [
86
+ '--no-sandbox',
87
+ '--disable-setuid-sandbox',
88
+ '--disable-dev-shm-usage',
89
+ ...(this.config.args || []),
90
+ ],
91
+ });
92
+ }
93
+ /**
94
+ * ブラウザを終了
95
+ */
96
+ async close() {
97
+ if (this.browser) {
98
+ await this.browser.close();
99
+ this.browser = null;
100
+ }
101
+ }
102
+ /**
103
+ * ブラウザが初期化されているか
104
+ */
105
+ isInitialized() {
106
+ return this.browser !== null;
107
+ }
108
+ /**
109
+ * ページをスクレイピング
110
+ */
111
+ async scrape(url, options) {
112
+ try {
113
+ await this.initialize();
114
+ const page = await this.createPage();
115
+ try {
116
+ // ページに移動
117
+ await page.goto(url, {
118
+ waitUntil: options?.waitUntil || 'domcontentloaded',
119
+ timeout: options?.timeout || this.config.timeout,
120
+ referer: options?.referer,
121
+ });
122
+ // コンテンツを抽出
123
+ const result = await this.extractor.extract(page, options?.extractors);
124
+ // スクリーンショット(オプション)
125
+ let screenshot;
126
+ if (options?.screenshot) {
127
+ screenshot = (await page.screenshot({ type: 'png' }));
128
+ }
129
+ const extPage = page;
130
+ return ok({
131
+ url: extPage.url(),
132
+ title: await extPage.title(),
133
+ content: result.content,
134
+ html: result.html,
135
+ extractedData: result.extractedData,
136
+ links: result.links,
137
+ images: result.images,
138
+ metadata: result.metadata,
139
+ screenshot,
140
+ });
141
+ }
142
+ finally {
143
+ await page.close();
144
+ }
145
+ }
146
+ catch (error) {
147
+ return err(new BrowserAutomationError('NAVIGATION_FAILED', `Failed to scrape ${url}: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined));
148
+ }
149
+ }
150
+ /**
151
+ * スクリプトを実行
152
+ */
153
+ async runScript(script) {
154
+ try {
155
+ await this.initialize();
156
+ const page = await this.createPage();
157
+ const results = [];
158
+ try {
159
+ for (const action of script.actions) {
160
+ // 変数を置換
161
+ const processedAction = this.processVariables(action, script.variables);
162
+ const result = await this.executor.execute(page, processedAction);
163
+ results.push(result);
164
+ if (!result.success) {
165
+ break;
166
+ }
167
+ }
168
+ return ok(results);
169
+ }
170
+ finally {
171
+ await page.close();
172
+ }
173
+ }
174
+ catch (error) {
175
+ return err(new BrowserAutomationError('ACTION_FAILED', `Script execution failed: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined));
176
+ }
177
+ }
178
+ /**
179
+ * 単一アクションを実行
180
+ */
181
+ async executeAction(url, action) {
182
+ try {
183
+ await this.initialize();
184
+ const page = await this.createPage();
185
+ try {
186
+ // まずURLに移動
187
+ await page.goto(url, {
188
+ waitUntil: 'domcontentloaded',
189
+ timeout: this.config.timeout,
190
+ });
191
+ // アクションを実行
192
+ const result = await this.executor.execute(page, action);
193
+ return ok(result);
194
+ }
195
+ finally {
196
+ await page.close();
197
+ }
198
+ }
199
+ catch (error) {
200
+ return err(new BrowserAutomationError('ACTION_FAILED', `Action execution failed: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined));
201
+ }
202
+ }
203
+ /**
204
+ * スクリーンショットを取得
205
+ */
206
+ async screenshot(url, options) {
207
+ try {
208
+ await this.initialize();
209
+ const page = await this.createPage();
210
+ try {
211
+ await page.goto(url, {
212
+ waitUntil: options?.waitUntil || 'networkidle2',
213
+ timeout: this.config.timeout,
214
+ });
215
+ const screenshot = (await page.screenshot({
216
+ fullPage: options?.fullPage ?? true,
217
+ type: options?.type || 'png',
218
+ quality: options?.type === 'jpeg' ? options?.quality : undefined,
219
+ }));
220
+ return ok(screenshot);
221
+ }
222
+ finally {
223
+ await page.close();
224
+ }
225
+ }
226
+ catch (error) {
227
+ return err(new BrowserAutomationError('ACTION_FAILED', `Screenshot failed: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined));
228
+ }
229
+ }
230
+ /**
231
+ * PDFを生成
232
+ */
233
+ async pdf(url, options) {
234
+ try {
235
+ await this.initialize();
236
+ const page = await this.createPage();
237
+ try {
238
+ await page.goto(url, {
239
+ waitUntil: options?.waitUntil || 'networkidle2',
240
+ timeout: this.config.timeout,
241
+ });
242
+ const pdf = await page.pdf({
243
+ format: options?.format || 'A4',
244
+ landscape: options?.landscape || false,
245
+ printBackground: options?.printBackground ?? true,
246
+ });
247
+ return ok(pdf);
248
+ }
249
+ finally {
250
+ await page.close();
251
+ }
252
+ }
253
+ catch (error) {
254
+ return err(new BrowserAutomationError('ACTION_FAILED', `PDF generation failed: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined));
255
+ }
256
+ }
257
+ /**
258
+ * 認証付きでページにアクセス
259
+ */
260
+ async scrapeWithAuth(url, loginUrl, credentials, loginSelectors) {
261
+ try {
262
+ await this.initialize();
263
+ const page = await this.createPage();
264
+ const extPage = page;
265
+ try {
266
+ // ログインページに移動
267
+ await extPage.goto(loginUrl, {
268
+ waitUntil: 'networkidle2',
269
+ timeout: this.config.timeout,
270
+ });
271
+ // 認証情報を入力
272
+ await page.type(loginSelectors.username, credentials.username);
273
+ await page.type(loginSelectors.password, credentials.password);
274
+ // ログインボタンをクリック
275
+ await Promise.all([
276
+ page.waitForSelector('body'), // ナビゲーション待機の代替
277
+ page.click(loginSelectors.submit),
278
+ ]);
279
+ // 少し待機
280
+ await new Promise(resolve => setTimeout(resolve, 2000));
281
+ // ログイン成功を確認
282
+ if (loginSelectors.successIndicator) {
283
+ await page.waitForSelector(loginSelectors.successIndicator, {
284
+ timeout: 10000,
285
+ });
286
+ }
287
+ // 目的のURLに移動
288
+ await extPage.goto(url, {
289
+ waitUntil: 'networkidle2',
290
+ timeout: this.config.timeout,
291
+ });
292
+ // コンテンツを抽出
293
+ const result = await this.extractor.extract(page);
294
+ return ok({
295
+ url: extPage.url(),
296
+ title: await extPage.title(),
297
+ content: result.content,
298
+ html: result.html,
299
+ links: result.links,
300
+ images: result.images,
301
+ metadata: result.metadata,
302
+ });
303
+ }
304
+ finally {
305
+ await extPage.close();
306
+ }
307
+ }
308
+ catch (error) {
309
+ return err(new BrowserAutomationError('AUTHENTICATION_FAILED', `Authentication failed: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined));
310
+ }
311
+ }
312
+ /**
313
+ * 無限スクロールを処理
314
+ */
315
+ async scrapeInfiniteScroll(url, options) {
316
+ try {
317
+ await this.initialize();
318
+ const page = await this.createPage();
319
+ const extPage = page;
320
+ const maxScrolls = options?.maxScrolls || 10;
321
+ const scrollDelay = options?.scrollDelay || 1000;
322
+ try {
323
+ await extPage.goto(url, {
324
+ waitUntil: 'networkidle2',
325
+ timeout: this.config.timeout,
326
+ });
327
+ let previousHeight = 0;
328
+ let scrollCount = 0;
329
+ while (scrollCount < maxScrolls) {
330
+ // ページの高さを取得
331
+ const currentHeight = await page.evaluate('document.body.scrollHeight');
332
+ if (currentHeight === previousHeight) {
333
+ break;
334
+ }
335
+ previousHeight = currentHeight;
336
+ // 下までスクロール
337
+ await page.evaluate('window.scrollTo(0, document.body.scrollHeight)');
338
+ // 待機
339
+ await new Promise(resolve => setTimeout(resolve, scrollDelay));
340
+ scrollCount++;
341
+ }
342
+ // コンテンツを抽出
343
+ const result = await this.extractor.extract(page);
344
+ return ok({
345
+ url: extPage.url(),
346
+ title: await extPage.title(),
347
+ content: result.content,
348
+ html: result.html,
349
+ links: result.links,
350
+ images: result.images,
351
+ metadata: result.metadata,
352
+ });
353
+ }
354
+ finally {
355
+ await extPage.close();
356
+ }
357
+ }
358
+ catch (error) {
359
+ return err(new BrowserAutomationError('NAVIGATION_FAILED', `Infinite scroll scraping failed: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined));
360
+ }
361
+ }
362
+ /**
363
+ * セッションを保存
364
+ */
365
+ async saveSession(name) {
366
+ try {
367
+ await this.initialize();
368
+ const page = await this.createPage();
369
+ try {
370
+ const session = await this.sessionManager.save(page, name);
371
+ return ok(session);
372
+ }
373
+ finally {
374
+ await page.close();
375
+ }
376
+ }
377
+ catch (error) {
378
+ return err(new BrowserAutomationError('ACTION_FAILED', `Failed to save session: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined));
379
+ }
380
+ }
381
+ /**
382
+ * セッションを復元
383
+ */
384
+ async loadSession(name) {
385
+ try {
386
+ await this.initialize();
387
+ const page = await this.createPage();
388
+ try {
389
+ await this.sessionManager.load(page, name);
390
+ return ok(undefined);
391
+ }
392
+ finally {
393
+ await page.close();
394
+ }
395
+ }
396
+ catch (error) {
397
+ return err(new BrowserAutomationError('SESSION_NOT_FOUND', `Failed to load session: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined));
398
+ }
399
+ }
400
+ /**
401
+ * 新しいページを作成
402
+ */
403
+ async createPage() {
404
+ if (!this.browser) {
405
+ throw new BrowserAutomationError('BROWSER_NOT_INITIALIZED', 'Browser not initialized. Call initialize() first.');
406
+ }
407
+ const page = (await this.browser.newPage());
408
+ // ビューポート設定
409
+ if (this.config.viewport) {
410
+ await page.setViewport(this.config.viewport);
411
+ }
412
+ // ユーザーエージェント設定
413
+ if (this.config.userAgent) {
414
+ await page.setUserAgent(this.config.userAgent);
415
+ }
416
+ // JavaScript無効化
417
+ if (this.config.disableJavaScript) {
418
+ await page.setJavaScriptEnabled(false);
419
+ }
420
+ // リクエストインターセプト(画像ブロック等)
421
+ if (this.config.disableImages) {
422
+ await page.setRequestInterception(true);
423
+ page.on('request', (req) => {
424
+ const request = req;
425
+ if (request.resourceType() === 'image') {
426
+ request.abort();
427
+ }
428
+ else {
429
+ request.continue();
430
+ }
431
+ });
432
+ }
433
+ return page;
434
+ }
435
+ /**
436
+ * 変数を置換
437
+ */
438
+ processVariables(action, variables) {
439
+ if (!variables)
440
+ return action;
441
+ const actionStr = JSON.stringify(action);
442
+ let processed = actionStr;
443
+ for (const [key, value] of Object.entries(variables)) {
444
+ processed = processed.replace(new RegExp(`\\$\\{${key}\\}`, 'g'), value);
445
+ }
446
+ return JSON.parse(processed);
447
+ }
448
+ /**
449
+ * 設定を取得
450
+ */
451
+ getConfig() {
452
+ return { ...this.config };
453
+ }
454
+ /**
455
+ * セッションマネージャーを取得
456
+ */
457
+ getSessionManager() {
458
+ return this.sessionManager;
459
+ }
460
+ }
461
+ // デフォルトエクスポート
462
+ export default BrowserAutomation;
463
+ //# sourceMappingURL=BrowserAutomation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserAutomation.js","sourceRoot":"","sources":["../../src/browser/BrowserAutomation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,EAAE,EAAE,GAAG,EAAe,MAAM,0BAA0B,CAAC;AAehE,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,cAAc,EAAoB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA4CrD;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAE7B;IAEA;IAHlB,YACkB,IAAgC,EAChD,OAAe,EACC,KAAa;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAA4B;QAEhC,UAAK,GAAL,KAAK,CAAQ;QAG7B,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAgB;IACtB,OAAO,GAAmB,IAAI,CAAC;IAC/B,QAAQ,CAAiB;IACzB,SAAS,CAAmB;IAC5B,cAAc,CAAiB;IAC/B,SAAS,GAA6B,IAAI,CAAC;IAEnD,YAAY,SAAiC,EAAE;QAC7C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,sBAAsB,EAAE,GAAG,MAAM,EAAE,CAAC;QACvD,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAA4B;QACvC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAEzB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,cAAc;YACd,IAAI,CAAC;gBACH,qDAAqD;gBACrD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC;gBACtE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,sBAAsB,CAC9B,yBAAyB,EACzB,6EAA6E,CAC9E,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,SAAU,CAAC,MAAM,CAAC;YAC1C,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;YAC9C,IAAI,EAAE;gBACJ,cAAc;gBACd,0BAA0B;gBAC1B,yBAAyB;gBACzB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;aAC5B;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,GAAW,EACX,OAGC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAErC,IAAI,CAAC;gBACH,SAAS;gBACT,MAAO,IAAqB,CAAC,IAAI,CAAC,GAAG,EAAE;oBACrC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,kBAAkB;oBACnD,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;oBAChD,OAAO,EAAE,OAAO,EAAE,OAAO;iBAC1B,CAAC,CAAC;gBAEH,WAAW;gBACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;gBAEvE,mBAAmB;gBACnB,IAAI,UAA8B,CAAC;gBACnC,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;oBACxB,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAW,CAAC;gBAClE,CAAC;gBAED,MAAM,OAAO,GAAG,IAAoB,CAAC;gBACrC,OAAO,EAAE,CAAC;oBACR,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;oBAClB,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE;oBAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,MAAO,IAAqB,CAAC,KAAK,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,CACR,IAAI,sBAAsB,CACxB,mBAAmB,EACnB,oBAAoB,GAAG,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACpF,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CACb,MAAqB;QAErB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACrC,MAAM,OAAO,GAAmB,EAAE,CAAC;YAEnC,IAAI,CAAC;gBACH,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpC,QAAQ;oBACR,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;oBAExE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;oBAClE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAErB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACpB,MAAM;oBACR,CAAC;gBACH,CAAC;gBAED,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;oBAAS,CAAC;gBACT,MAAO,IAAqB,CAAC,KAAK,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,CACR,IAAI,sBAAsB,CACxB,eAAe,EACf,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACpF,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,GAAW,EACX,MAAqB;QAErB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAErC,IAAI,CAAC;gBACH,WAAW;gBACX,MAAO,IAAqB,CAAC,IAAI,CAAC,GAAG,EAAE;oBACrC,SAAS,EAAE,kBAAkB;oBAC7B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;iBAC7B,CAAC,CAAC;gBAEH,WAAW;gBACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAEzD,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC;oBAAS,CAAC;gBACT,MAAO,IAAqB,CAAC,KAAK,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,CACR,IAAI,sBAAsB,CACxB,eAAe,EACf,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACpF,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,GAAW,EACX,OAEC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAErC,IAAI,CAAC;gBACH,MAAO,IAAqB,CAAC,IAAI,CAAC,GAAG,EAAE;oBACrC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,cAAc;oBAC/C,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;iBAC7B,CAAC,CAAC;gBAEH,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC;oBACxC,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,IAAI;oBACnC,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,KAAK;oBAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;iBACjE,CAAC,CAAW,CAAC;gBAEd,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC;YACxB,CAAC;oBAAS,CAAC;gBACT,MAAO,IAAqB,CAAC,KAAK,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,CACR,IAAI,sBAAsB,CACxB,eAAe,EACf,sBAAsB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC9E,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,GAAW,EACX,OAEC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAErC,IAAI,CAAC;gBACH,MAAO,IAAqB,CAAC,IAAI,CAAC,GAAG,EAAE;oBACrC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,cAAc;oBAC/C,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;iBAC7B,CAAC,CAAC;gBAEH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;oBACzB,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI;oBAC/B,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,KAAK;oBACtC,eAAe,EAAE,OAAO,EAAE,eAAe,IAAI,IAAI;iBAClD,CAAC,CAAC;gBAEH,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;oBAAS,CAAC;gBACT,MAAO,IAAqB,CAAC,KAAK,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,CACR,IAAI,sBAAsB,CACxB,eAAe,EACf,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAClF,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,GAAW,EACX,QAAgB,EAChB,WAA4B,EAC5B,cAA8B;QAE9B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAoB,CAAC;YAErC,IAAI,CAAC;gBACH,aAAa;gBACb,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAC3B,SAAS,EAAE,cAAc;oBACzB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;iBAC7B,CAAC,CAAC;gBAEH,UAAU;gBACV,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC/D,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAE/D,eAAe;gBACf,MAAM,OAAO,CAAC,GAAG,CAAC;oBAChB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,eAAe;oBAC7C,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;iBAClC,CAAC,CAAC;gBAEH,OAAO;gBACP,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBAExD,YAAY;gBACZ,IAAI,cAAc,CAAC,gBAAgB,EAAE,CAAC;oBACpC,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,gBAAgB,EAAE;wBAC1D,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;gBACL,CAAC;gBAED,YAAY;gBACZ,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;oBACtB,SAAS,EAAE,cAAc;oBACzB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;iBAC7B,CAAC,CAAC;gBAEH,WAAW;gBACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAElD,OAAO,EAAE,CAAC;oBACR,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;oBAClB,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE;oBAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,CACR,IAAI,sBAAsB,CACxB,uBAAuB,EACvB,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAClF,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CACxB,GAAW,EACX,OAIC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAoB,CAAC;YACrC,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC;YAEjD,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;oBACtB,SAAS,EAAE,cAAc;oBACzB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;iBAC7B,CAAC,CAAC;gBAEH,IAAI,cAAc,GAAG,CAAC,CAAC;gBACvB,IAAI,WAAW,GAAG,CAAC,CAAC;gBAEpB,OAAO,WAAW,GAAG,UAAU,EAAE,CAAC;oBAChC,YAAY;oBACZ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CACvC,4BAA4B,CACnB,CAAC;oBAEZ,IAAI,aAAa,KAAK,cAAc,EAAE,CAAC;wBACrC,MAAM;oBACR,CAAC;oBAED,cAAc,GAAG,aAAa,CAAC;oBAE/B,WAAW;oBACX,MAAM,IAAI,CAAC,QAAQ,CAAC,gDAAgD,CAAC,CAAC;oBAEtE,KAAK;oBACL,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;oBAE/D,WAAW,EAAE,CAAC;gBAChB,CAAC;gBAED,WAAW;gBACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAElD,OAAO,EAAE,CAAC;oBACR,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;oBAClB,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE;oBAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,CACR,IAAI,sBAAsB,CACxB,mBAAmB,EACnB,oCAAoC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC5F,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,IAAY;QAEZ,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAErC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC3D,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;oBAAS,CAAC;gBACT,MAAO,IAAqB,CAAC,KAAK,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,CACR,IAAI,sBAAsB,CACxB,eAAe,EACf,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACnF,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAErC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC3C,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;oBAAS,CAAC;gBACT,MAAO,IAAqB,CAAC,KAAK,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,CACR,IAAI,sBAAsB,CACxB,mBAAmB,EACnB,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACnF,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,sBAAsB,CAC9B,yBAAyB,EACzB,mDAAmD,CACpD,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAiB,CAAC;QAE5D,WAAW;QACX,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAED,eAAe;QACf,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;QAED,gBAAgB;QAChB,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,EAAE;gBAClC,MAAM,OAAO,GAAG,GAA8E,CAAC;gBAC/F,IAAI,OAAO,CAAC,YAAY,EAAE,KAAK,OAAO,EAAE,CAAC;oBACvC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,MAAqB,EACrB,SAAkC;QAElC,IAAI,CAAC,SAAS;YAAE,OAAO,MAAM,CAAC;QAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,SAAS,GAAG,SAAS,CAAC;QAE1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,GAAG,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,cAAc;AACd,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * ContentExtractor - ページからコンテンツを抽出
3
+ *
4
+ * @requirement REQ-COLLECT-009
5
+ * @design DES-COLLECT-009-BrowserAutomation
6
+ */
7
+ import type { ExtractionResult, ExtractorConfig } from './types.js';
8
+ import type { BrowserPage } from './ActionExecutor.js';
9
+ /**
10
+ * ページからコンテンツを抽出
11
+ */
12
+ export declare class ContentExtractor {
13
+ /**
14
+ * ページからコンテンツを抽出
15
+ */
16
+ extract(page: BrowserPage, extractors?: ExtractorConfig[]): Promise<ExtractionResult>;
17
+ /**
18
+ * メインコンテンツを抽出
19
+ */
20
+ private extractMainContent;
21
+ /**
22
+ * HTML全体を取得
23
+ */
24
+ private extractHtml;
25
+ /**
26
+ * リンクを抽出
27
+ */
28
+ private extractLinks;
29
+ /**
30
+ * 画像を抽出
31
+ */
32
+ private extractImages;
33
+ /**
34
+ * メタデータを抽出
35
+ */
36
+ private extractMetadata;
37
+ /**
38
+ * カスタム抽出
39
+ */
40
+ private extractCustomData;
41
+ /**
42
+ * テキストコンテンツを抽出(シンプル版)
43
+ */
44
+ extractText(page: BrowserPage, selector: string): Promise<string>;
45
+ /**
46
+ * 属性を抽出
47
+ */
48
+ extractAttribute(page: BrowserPage, selector: string, attribute: string): Promise<string | null>;
49
+ /**
50
+ * 複数要素のテキストを抽出
51
+ */
52
+ extractAllText(page: BrowserPage, selector: string): Promise<string[]>;
53
+ }
54
+ //# sourceMappingURL=ContentExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentExtractor.d.ts","sourceRoot":"","sources":["../../src/browser/ContentExtractor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAIhB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACG,OAAO,CACX,IAAI,EAAE,WAAW,EACjB,UAAU,CAAC,EAAE,eAAe,EAAE,GAC7B,OAAO,CAAC,gBAAgB,CAAC;IAgC5B;;OAEG;YACW,kBAAkB;IAahC;;OAEG;YACW,WAAW;IAIzB;;OAEG;YACW,YAAY;IAa1B;;OAEG;YACW,aAAa;IAc3B;;OAEG;YACW,eAAe;IA2B7B;;OAEG;YACW,iBAAiB;IAiC/B;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOvE;;OAEG;IACG,gBAAgB,CACpB,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQzB;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAM7E"}