@d-zero/puppeteer-page-scan 4.4.10 → 4.5.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/README.md CHANGED
@@ -87,9 +87,20 @@ await beforePageScan(page, 'https://example.com', {
87
87
  },
88
88
  ],
89
89
  openDisclosures: true, // オプション: disclosure要素を展開(<details>とbutton[aria-expanded="false"])
90
+ scrollInterval: { random: { min: 200, max: 500 } }, // オプション: スクロール間隔(ms)
91
+ scrollDistance: { random: { min: 300, max: 900 } }, // オプション: 1ステップで進む距離(px)
90
92
  });
91
93
  ```
92
94
 
95
+ #### スクロールオプション
96
+
97
+ | オプション | 型 | 説明 |
98
+ | ---------------- | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
99
+ | `scrollInterval` | `number \| DelayOptions` | `scrollAllOver`の`interval`にそのまま渡されます。未指定時は[`@d-zero/puppeteer-scroll`](../puppeteer-scroll/README.md#デフォルト挙動)のデフォルト。 |
100
+ | `scrollDistance` | `number \| DelayOptions` | `scrollAllOver`の`distance`にそのまま渡されます。未指定時は同上。 |
101
+
102
+ 詳細は[`@d-zero/puppeteer-scroll`](../puppeteer-scroll/README.md#api)を参照。
103
+
93
104
  ### `readPageHooks`
94
105
 
95
106
  ファイルパスの配列からPageHookモジュールを読み込むヘルパー関数です。各パスはESモジュールとしてインポートされ、デフォルトエクスポートを`PageHook`関数として返します。
@@ -125,6 +136,22 @@ await beforePageScan(page, 'https://example.com', {
125
136
  - モジュールが見つからない場合は`Error`を投げます
126
137
  - デフォルトエクスポートが関数でない場合は`TypeError`を投げます
127
138
 
139
+ #### 子プロセスを経由する場合の使い分け
140
+
141
+ Node の IPC(`process.send`)は関数を JSON 化できず `null` に変換するため、`PageHook[]`(関数配列)を親プロセスから子プロセスへ直接渡すことはできません。`@d-zero/print` / `@d-zero/archaeologist` / `@d-zero/a11y-check` のように `@d-zero/puppeteer-dealer` を経由して子プロセスでフックを実行する場合は、**パスの記述([`PageHookSource`](#pagehooksource))を子プロセスに渡し、子プロセス内で `readPageHooks` を呼ぶ**設計にしてください。
142
+
143
+ ```ts
144
+ // 親プロセス: PageHookSource を組み立てて IPC で渡す
145
+ const hookSource = {
146
+ paths: ['./hooks/login.mjs'],
147
+ baseDir: process.cwd(),
148
+ };
149
+
150
+ // 子プロセス: 受け取ったパスから関数化して beforePageScan に渡す
151
+ const hooks = await readPageHooks(hookSource.paths, hookSource.baseDir);
152
+ await beforePageScan(page, url, { name, width, hooks });
153
+ ```
154
+
128
155
  ### `pageScanListener` と `pageScanLoggers`
129
156
 
130
157
  ページスキャン処理中の各フェーズ(ビューポート設定、ページ読み込み、フック実行、スクロール)のログを出力するためのリスナー関数とロガー設定です。
@@ -200,6 +227,19 @@ type PageHook = (
200
227
  ) => Promise<void>;
201
228
  ```
202
229
 
230
+ ### `PageHookSource`
231
+
232
+ 子プロセスにフックをIPCで渡すための「ロード元の記述」を表す型です。Node IPC は関数を `null` 化するため、`PageHook[]`(関数配列)を親→子で直接渡せません。`@d-zero/puppeteer-dealer` を経由するツールはこの形で受け渡しを行い、子プロセス内で `readPageHooks` を呼んで関数化します。
233
+
234
+ ```typescript
235
+ type PageHookSource = {
236
+ readonly paths: readonly string[]; // フックファイルのパス(絶対 or 相対)
237
+ readonly baseDir: string; // 相対パスを解決する基準ディレクトリ
238
+ };
239
+ ```
240
+
241
+ 使い方は [子プロセスを経由する場合の使い分け](#子プロセスを経由する場合の使い分け) を参照してください。
242
+
203
243
  ### `PageScanPhase`
204
244
 
205
245
  ページスキャン処理の各フェーズを表す型です。リスナーのコールバックで使用されます。
@@ -1,5 +1,6 @@
1
1
  import type { PageHook, PageScanPhase, Size } from './types.js';
2
2
  import type { Listener } from '@d-zero/puppeteer-general-actions';
3
+ import type { DelayOptions } from '@d-zero/shared/delay';
3
4
  import type { Page } from 'puppeteer';
4
5
  type Options = {
5
6
  name: string;
@@ -7,6 +8,8 @@ type Options = {
7
8
  listener?: Listener<PageScanPhase>;
8
9
  timeout?: number;
9
10
  openDisclosures?: boolean;
11
+ scrollInterval?: number | DelayOptions;
12
+ scrollDistance?: number | DelayOptions;
10
13
  } & Size;
11
14
  /**
12
15
  *
@@ -101,6 +101,8 @@ export async function beforePageScan(page, url, options) {
101
101
  message: 'Start scrolling',
102
102
  });
103
103
  await scrollAllOver(page, {
104
+ interval: options?.scrollInterval,
105
+ distance: options?.scrollDistance,
104
106
  logger: (scrollY, scrollHeight, message) => listener?.('scroll', { name, scrollY, scrollHeight, message }),
105
107
  });
106
108
  }
package/dist/types.d.ts CHANGED
@@ -8,6 +8,15 @@ export type PageHook = (page: Page, size: Size & {
8
8
  name: string;
9
9
  log: (message: string) => void;
10
10
  }) => Promise<void>;
11
+ /**
12
+ * 子プロセスにフックをIPCで渡すための「ロード元の記述」。
13
+ * 親プロセスではこの形のまま保持し、子プロセスで `readPageHooks(paths, baseDir)`
14
+ * を呼んで関数化する。Node IPC は関数を `null` 化するため、関数配列を直接渡せない。
15
+ */
16
+ export type PageHookSource = {
17
+ readonly paths: readonly string[];
18
+ readonly baseDir: string;
19
+ };
11
20
  export type PageScanPhase = {
12
21
  setViewport: {
13
22
  name: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@d-zero/puppeteer-page-scan",
3
- "version": "4.4.10",
3
+ "version": "4.5.0",
4
4
  "description": "Scanning page function for puppeteer",
5
5
  "author": "D-ZERO",
6
6
  "license": "MIT",
@@ -24,7 +24,8 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@d-zero/puppeteer-general-actions": "1.2.3",
27
- "@d-zero/puppeteer-scroll": "3.1.18"
27
+ "@d-zero/puppeteer-scroll": "4.0.0",
28
+ "@d-zero/shared": "0.22.0"
28
29
  },
29
30
  "devDependencies": {
30
31
  "puppeteer": "24.37.5"
@@ -37,5 +38,5 @@
37
38
  "url": "https://github.com/d-zero-dev/tools.git",
38
39
  "directory": "packages/@d-zero/puppeteer-page-scan"
39
40
  },
40
- "gitHead": "611614bdfcdfe3ef872efd01a1fd31ebedffdbb2"
41
+ "gitHead": "2d24e08c0cb516b7ea9d07a4301eb991193cca11"
41
42
  }