pi-smart-fetch 0.2.15 โ 0.2.23
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 +60 -197
- package/dist/index.js +36 -36
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,30 +1,33 @@
|
|
|
1
1
|
# pi-smart-fetch
|
|
2
2
|
|
|
3
|
-
`pi-smart-fetch` adds
|
|
3
|
+
`pi-smart-fetch` adds smarter web fetching tools to pi.dev.
|
|
4
4
|
|
|
5
|
-

|
|
6
|
-
|
|
7
|
-
Registers 2 tools:
|
|
8
|
-
- `web_fetch`
|
|
9
|
-
- `batch_web_fetch`
|
|
5
|
+

|
|
10
6
|
|
|
11
7
|
## Features
|
|
12
8
|
|
|
13
|
-
|
|
14
|
-
- **
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
17
|
-
- **
|
|
18
|
-
- **
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
- **
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
9
|
+
- ๐ **Browser-like TLS/SSL + HTTP fingerprints** โ better success on bot-defended pages
|
|
10
|
+
- ๐งน **Defuddle extraction** โ clean readable content instead of noisy HTML
|
|
11
|
+
- ๐ง **Useful metadata** โ title, author, site, language, published date when available
|
|
12
|
+
- ๐ฆ **Downloads + large file support** โ stream attachments and binaries to temp files
|
|
13
|
+
- โก **Batch fetch** โ fetch many URLs with bounded concurrency
|
|
14
|
+
- ๐ **Multiple output formats** โ `markdown`, `html`, `text`, `json`
|
|
15
|
+
|
|
16
|
+
## Supported sites
|
|
17
|
+
|
|
18
|
+
- **Anything fetchable over server-side HTTP** โ this package is not limited to a fixed allowlist
|
|
19
|
+
- Docs, blog posts, articles, and knowledge-base pages
|
|
20
|
+
- Reddit posts and comment threads
|
|
21
|
+
- X / Twitter posts
|
|
22
|
+
- YouTube pages and transcripts
|
|
23
|
+
- GitHub pages, issues, PRs, and discussions
|
|
24
|
+
- Hacker News threads
|
|
25
|
+
- Substack posts
|
|
26
|
+
- Pages with code blocks, footnotes, math, and callouts
|
|
27
|
+
|
|
28
|
+
Notes:
|
|
29
|
+
- Defuddle is the cleanup layer: it strips common page chrome like nav, sidebars, related links, share widgets, and footers
|
|
30
|
+
- It does **not** execute JavaScript or solve interactive anti-bot/login flows
|
|
28
31
|
|
|
29
32
|
## Install
|
|
30
33
|
|
|
@@ -41,163 +44,38 @@ gh repo clone Thinkscape/agent-smart-fetch
|
|
|
41
44
|
pi install agent-smart-fetch/packages/pi-smart-fetch
|
|
42
45
|
```
|
|
43
46
|
|
|
44
|
-
##
|
|
47
|
+
## Pi tools
|
|
45
48
|
|
|
46
|
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
- reduce agent token waste on noisy page chrome
|
|
50
|
-
- get author/title/published metadata when available
|
|
51
|
-
- work around pages that reject ordinary server-side fetches
|
|
52
|
-
|
|
53
|
-
Use `batch_web_fetch` when you want to:
|
|
54
|
-
- fetch multiple URLs in one tool call
|
|
55
|
-
- preserve a clear mapping between each input URL and its result
|
|
56
|
-
- let pi show per-item progress while the batch runs
|
|
57
|
-
- collect a mix of successes and failures without losing per-item errors
|
|
49
|
+
Registers:
|
|
50
|
+
- `web_fetch`
|
|
51
|
+
- `batch_web_fetch`
|
|
58
52
|
|
|
59
|
-
|
|
53
|
+
Synopsis:
|
|
60
54
|
|
|
61
55
|
```text
|
|
62
|
-
web_fetch(url, browser?, os?, headers?, maxChars?, format?, removeImages?, includeReplies?, proxy?, verbose?)
|
|
56
|
+
web_fetch(url, browser?, os?, headers?, maxChars?, timeoutMs?, format?, removeImages?, includeReplies?, proxy?, verbose?)
|
|
63
57
|
batch_web_fetch(requests, verbose?)
|
|
64
58
|
```
|
|
65
59
|
|
|
66
|
-
For `batch_web_fetch`, `requests`
|
|
67
|
-
|
|
68
|
-
## Output behavior
|
|
69
|
-
|
|
70
|
-
### `web_fetch`
|
|
71
|
-
|
|
72
|
-
Agent-facing tool output always includes the full non-empty metadata header plus the extracted document body.
|
|
73
|
-
|
|
74
|
-
In the pi TUI backlog/history preview, user-facing metadata is intentionally brief and only shows:
|
|
75
|
-
- Title
|
|
76
|
-
- Published
|
|
77
|
-
|
|
78
|
-
The duplicated `URL:` line is hidden from the preview because the tool call line already shows the URL.
|
|
79
|
-
|
|
80
|
-
The optional `verbose` flag is retained for compatibility, but pi now always returns the full metadata header to the agent.
|
|
81
|
-
|
|
82
|
-
### `batch_web_fetch`
|
|
83
|
-
|
|
84
|
-
Batch output:
|
|
85
|
-
- starts with a batch summary (`Requests`, `Succeeded`, `Failed`, `Concurrency`)
|
|
86
|
-
- keeps results in input order
|
|
87
|
-
- labels each item with its ordinal and URL
|
|
88
|
-
- includes full content for successful items
|
|
89
|
-
- includes a bot-friendly `Error:` line for failed items
|
|
90
|
-
|
|
91
|
-
In the pi TUI, batch mode also streams per-item progress rows showing:
|
|
92
|
-
- a small spinner/check/error glyph
|
|
93
|
-
- a truncated URL
|
|
94
|
-
- a one-word status (`queued`, `fetching`, `extracting`, `done`, `error`)
|
|
95
|
-
- a small progress bar
|
|
96
|
-
|
|
97
|
-
## Example tool outputs
|
|
98
|
-
|
|
99
|
-
### Agent-facing `web_fetch` output
|
|
100
|
-
|
|
101
|
-
```text
|
|
102
|
-
> URL: https://example.com/blog/some-article
|
|
103
|
-
> Title: Some Article
|
|
104
|
-
> Author: Jane Doe
|
|
105
|
-
> Published: 2026-03-12
|
|
106
|
-
> Site: Example Blog
|
|
107
|
-
> Language: en
|
|
108
|
-
> Words: 1284
|
|
109
|
-
> Browser: chrome_145/windows
|
|
110
|
-
|
|
111
|
-
# Some Article
|
|
112
|
-
|
|
113
|
-
This is the cleaned readable content extracted from the page.
|
|
114
|
-
It includes the body plus the full metadata header available to the agent.
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### pi history/backlog preview for `web_fetch`
|
|
118
|
-
|
|
119
|
-
```text
|
|
120
|
-
web_fetch https://example.com/blog/some-article
|
|
121
|
-
Title: Some Article
|
|
122
|
-
Published: 2026-03-12
|
|
123
|
-
|
|
124
|
-
# Some Article
|
|
125
|
-
|
|
126
|
-
This is the cleaned readable content extracted from the page.
|
|
127
|
-
... (more lines, Ctrl+O to expand)
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Attachment/binary `web_fetch` output
|
|
131
|
-
|
|
132
|
-
```text
|
|
133
|
-
> URL: https://example.com/download/report
|
|
134
|
-
> File size: 999999
|
|
135
|
-
> Mime type: application/pdf
|
|
136
|
-
> File path: /absolute/path/to/temp/report.pdf
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### `batch_web_fetch` output
|
|
140
|
-
|
|
141
|
-
```text
|
|
142
|
-
> Requests: 2
|
|
143
|
-
> Succeeded: 1
|
|
144
|
-
> Failed: 1
|
|
145
|
-
> Concurrency: 8
|
|
146
|
-
|
|
147
|
-
## [1/2] https://example.com/blog/some-article
|
|
148
|
-
> URL: https://example.com/blog/some-article
|
|
149
|
-
> Title: Some Article
|
|
150
|
-
> Author: Jane Doe
|
|
151
|
-
> Published: 2026-03-12
|
|
152
|
-
|
|
153
|
-
# Some Article
|
|
154
|
-
|
|
155
|
-
This is the cleaned readable content extracted from the page.
|
|
156
|
-
|
|
157
|
-
## [2/2] https://blocked.example/post
|
|
158
|
-
> URL: https://blocked.example/post
|
|
159
|
-
> Status: error
|
|
160
|
-
> Error: HTTP 403 Forbidden for https://blocked.example/post
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
### Error output
|
|
164
|
-
|
|
165
|
-
```text
|
|
166
|
-
Error: Invalid URL: not-a-url
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## Parameters
|
|
170
|
-
|
|
171
|
-
### `web_fetch`
|
|
172
|
-
|
|
173
|
-
| Parameter | Type | Default | Description |
|
|
174
|
-
|-------------------|-------------------------------|-----------------|------------------------------------------------------------------------------|
|
|
175
|
-
| `url` | string | required | URL to fetch |
|
|
176
|
-
| `browser` | string | `chrome_145` | Browser profile used for transport fingerprinting |
|
|
177
|
-
| `os` | string | `windows` | OS profile: `windows`, `macos`, `linux`, `android`, `ios` |
|
|
178
|
-
| `headers` | object | auto | Extra request headers |
|
|
179
|
-
| `maxChars` | number | `50000` | Maximum returned characters. Can be overridden by pi settings |
|
|
180
|
-
| `format` | `markdown` \| `html` \| `text` \| `json` | `markdown` | Output format |
|
|
181
|
-
| `removeImages` | boolean | `false` | Strip image references from output |
|
|
182
|
-
| `includeReplies` | boolean \| `extractors` | `extractors` | Include replies/comments |
|
|
183
|
-
| `proxy` | string | none | Proxy URL |
|
|
184
|
-
| `verbose` | boolean | `false` | Compatibility flag. pi currently returns the full metadata header to the agent regardless; user history preview stays compact |
|
|
60
|
+
For `batch_web_fetch`, each item in `requests` accepts the same parameters as `web_fetch` except `verbose`.
|
|
185
61
|
|
|
186
|
-
|
|
62
|
+
## Output formats
|
|
187
63
|
|
|
188
|
-
|
|
|
189
|
-
|
|
190
|
-
| `
|
|
191
|
-
| `
|
|
64
|
+
| Format | What you get |
|
|
65
|
+
|---|---|
|
|
66
|
+
| `markdown` | Best default for readable page content |
|
|
67
|
+
| `html` | Cleaned HTML output |
|
|
68
|
+
| `text` | Plain text with markdown stripped |
|
|
69
|
+
| `json` | Structured JSON for metadata-heavy workflows |
|
|
192
70
|
|
|
193
|
-
##
|
|
71
|
+
## Global defaults
|
|
194
72
|
|
|
195
|
-
Optional
|
|
73
|
+
Optional settings in `~/.pi/agent/settings.json` or `.pi/settings.json`:
|
|
196
74
|
|
|
197
75
|
```json
|
|
198
76
|
{
|
|
199
77
|
"smartFetchVerboseByDefault": false,
|
|
200
|
-
"smartFetchDefaultMaxChars":
|
|
78
|
+
"smartFetchDefaultMaxChars": 50000,
|
|
201
79
|
"smartFetchDefaultTimeoutMs": 15000,
|
|
202
80
|
"smartFetchDefaultBrowser": "chrome_145",
|
|
203
81
|
"smartFetchDefaultOs": "windows",
|
|
@@ -208,37 +86,22 @@ Optional custom settings in `~/.pi/agent/settings.json` or `.pi/settings.json`:
|
|
|
208
86
|
}
|
|
209
87
|
```
|
|
210
88
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
- `
|
|
225
|
-
- `
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
Do not use these tools when:
|
|
232
|
-
- the site requires JS rendering
|
|
233
|
-
- you need login/session flows
|
|
234
|
-
- you need to click, scroll, or submit forms
|
|
235
|
-
- you need a fully interactive browser session
|
|
236
|
-
|
|
237
|
-
In those cases, switch to browser automation.
|
|
238
|
-
|
|
239
|
-
## Recent feature additions reflected here
|
|
240
|
-
|
|
241
|
-
Recent `feat:` work added:
|
|
242
|
-
- publish-ready TS tooling, tests, and packaging checks
|
|
243
|
-
- timer-driven spinner animation for batch progress in the pi TUI
|
|
244
|
-
- attachment and binary streaming into temp files with sanitized output paths
|
|
89
|
+
| Setting | Default | Description |
|
|
90
|
+
|---|---:|---|
|
|
91
|
+
| `smartFetchVerboseByDefault` | `false` | Stored default for the compatibility `verbose` flag |
|
|
92
|
+
| `smartFetchDefaultMaxChars` | `50000` | Default `maxChars` limit |
|
|
93
|
+
| `smartFetchDefaultTimeoutMs` | `15000` | Default request timeout in milliseconds |
|
|
94
|
+
| `smartFetchDefaultBrowser` | `chrome_145` | Default browser fingerprint profile |
|
|
95
|
+
| `smartFetchDefaultOs` | `windows` | Default OS fingerprint profile |
|
|
96
|
+
| `smartFetchDefaultRemoveImages` | `false` | Strip image references by default |
|
|
97
|
+
| `smartFetchDefaultIncludeReplies` | `extractors` | Include replies/comments only when site extractors support them |
|
|
98
|
+
| `smartFetchDefaultBatchConcurrency` | `8` | Default bounded concurrency for `batch_web_fetch` |
|
|
99
|
+
| `smartFetchTempDir` | OS temp dir | Base directory for attachment and binary downloads |
|
|
100
|
+
|
|
101
|
+
Notes:
|
|
102
|
+
- Project `.pi/settings.json` overrides global `~/.pi/agent/settings.json`
|
|
103
|
+
- Legacy `webFetch*` aliases are still supported
|
|
104
|
+
|
|
105
|
+
## Dev and publishing note
|
|
106
|
+
|
|
107
|
+
This repo uses Bun for local development, tests, and workspace scripts. Package publishing still goes through `npm publish` in CI so npm Trusted Publishing can be used.
|
package/dist/index.js
CHANGED
|
@@ -44,9 +44,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
44
44
|
mod
|
|
45
45
|
));
|
|
46
46
|
|
|
47
|
-
// ../../node_modules
|
|
47
|
+
// ../../node_modules/lodash/_basePropertyOf.js
|
|
48
48
|
var require_basePropertyOf = __commonJS({
|
|
49
|
-
"../../node_modules
|
|
49
|
+
"../../node_modules/lodash/_basePropertyOf.js"(exports$1, module) {
|
|
50
50
|
function basePropertyOf(object) {
|
|
51
51
|
return function(key) {
|
|
52
52
|
return object == null ? void 0 : object[key];
|
|
@@ -56,9 +56,9 @@ var require_basePropertyOf = __commonJS({
|
|
|
56
56
|
}
|
|
57
57
|
});
|
|
58
58
|
|
|
59
|
-
// ../../node_modules
|
|
59
|
+
// ../../node_modules/lodash/_deburrLetter.js
|
|
60
60
|
var require_deburrLetter = __commonJS({
|
|
61
|
-
"../../node_modules
|
|
61
|
+
"../../node_modules/lodash/_deburrLetter.js"(exports$1, module) {
|
|
62
62
|
var basePropertyOf = require_basePropertyOf();
|
|
63
63
|
var deburredLetters = {
|
|
64
64
|
// Latin-1 Supplement block.
|
|
@@ -259,17 +259,17 @@ var require_deburrLetter = __commonJS({
|
|
|
259
259
|
}
|
|
260
260
|
});
|
|
261
261
|
|
|
262
|
-
// ../../node_modules
|
|
262
|
+
// ../../node_modules/lodash/_freeGlobal.js
|
|
263
263
|
var require_freeGlobal = __commonJS({
|
|
264
|
-
"../../node_modules
|
|
264
|
+
"../../node_modules/lodash/_freeGlobal.js"(exports$1, module) {
|
|
265
265
|
var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
|
|
266
266
|
module.exports = freeGlobal;
|
|
267
267
|
}
|
|
268
268
|
});
|
|
269
269
|
|
|
270
|
-
// ../../node_modules
|
|
270
|
+
// ../../node_modules/lodash/_root.js
|
|
271
271
|
var require_root = __commonJS({
|
|
272
|
-
"../../node_modules
|
|
272
|
+
"../../node_modules/lodash/_root.js"(exports$1, module) {
|
|
273
273
|
var freeGlobal = require_freeGlobal();
|
|
274
274
|
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
|
|
275
275
|
var root = freeGlobal || freeSelf || Function("return this")();
|
|
@@ -277,18 +277,18 @@ var require_root = __commonJS({
|
|
|
277
277
|
}
|
|
278
278
|
});
|
|
279
279
|
|
|
280
|
-
// ../../node_modules
|
|
280
|
+
// ../../node_modules/lodash/_Symbol.js
|
|
281
281
|
var require_Symbol = __commonJS({
|
|
282
|
-
"../../node_modules
|
|
282
|
+
"../../node_modules/lodash/_Symbol.js"(exports$1, module) {
|
|
283
283
|
var root = require_root();
|
|
284
284
|
var Symbol2 = root.Symbol;
|
|
285
285
|
module.exports = Symbol2;
|
|
286
286
|
}
|
|
287
287
|
});
|
|
288
288
|
|
|
289
|
-
// ../../node_modules
|
|
289
|
+
// ../../node_modules/lodash/_arrayMap.js
|
|
290
290
|
var require_arrayMap = __commonJS({
|
|
291
|
-
"../../node_modules
|
|
291
|
+
"../../node_modules/lodash/_arrayMap.js"(exports$1, module) {
|
|
292
292
|
function arrayMap(array, iteratee) {
|
|
293
293
|
var index = -1, length = array == null ? 0 : array.length, result = Array(length);
|
|
294
294
|
while (++index < length) {
|
|
@@ -300,17 +300,17 @@ var require_arrayMap = __commonJS({
|
|
|
300
300
|
}
|
|
301
301
|
});
|
|
302
302
|
|
|
303
|
-
// ../../node_modules
|
|
303
|
+
// ../../node_modules/lodash/isArray.js
|
|
304
304
|
var require_isArray = __commonJS({
|
|
305
|
-
"../../node_modules
|
|
305
|
+
"../../node_modules/lodash/isArray.js"(exports$1, module) {
|
|
306
306
|
var isArray = Array.isArray;
|
|
307
307
|
module.exports = isArray;
|
|
308
308
|
}
|
|
309
309
|
});
|
|
310
310
|
|
|
311
|
-
// ../../node_modules
|
|
311
|
+
// ../../node_modules/lodash/_getRawTag.js
|
|
312
312
|
var require_getRawTag = __commonJS({
|
|
313
|
-
"../../node_modules
|
|
313
|
+
"../../node_modules/lodash/_getRawTag.js"(exports$1, module) {
|
|
314
314
|
var Symbol2 = require_Symbol();
|
|
315
315
|
var objectProto = Object.prototype;
|
|
316
316
|
var hasOwnProperty = objectProto.hasOwnProperty;
|
|
@@ -337,9 +337,9 @@ var require_getRawTag = __commonJS({
|
|
|
337
337
|
}
|
|
338
338
|
});
|
|
339
339
|
|
|
340
|
-
// ../../node_modules
|
|
340
|
+
// ../../node_modules/lodash/_objectToString.js
|
|
341
341
|
var require_objectToString = __commonJS({
|
|
342
|
-
"../../node_modules
|
|
342
|
+
"../../node_modules/lodash/_objectToString.js"(exports$1, module) {
|
|
343
343
|
var objectProto = Object.prototype;
|
|
344
344
|
var nativeObjectToString = objectProto.toString;
|
|
345
345
|
function objectToString(value) {
|
|
@@ -349,9 +349,9 @@ var require_objectToString = __commonJS({
|
|
|
349
349
|
}
|
|
350
350
|
});
|
|
351
351
|
|
|
352
|
-
// ../../node_modules
|
|
352
|
+
// ../../node_modules/lodash/_baseGetTag.js
|
|
353
353
|
var require_baseGetTag = __commonJS({
|
|
354
|
-
"../../node_modules
|
|
354
|
+
"../../node_modules/lodash/_baseGetTag.js"(exports$1, module) {
|
|
355
355
|
var Symbol2 = require_Symbol();
|
|
356
356
|
var getRawTag = require_getRawTag();
|
|
357
357
|
var objectToString = require_objectToString();
|
|
@@ -368,9 +368,9 @@ var require_baseGetTag = __commonJS({
|
|
|
368
368
|
}
|
|
369
369
|
});
|
|
370
370
|
|
|
371
|
-
// ../../node_modules
|
|
371
|
+
// ../../node_modules/lodash/isObjectLike.js
|
|
372
372
|
var require_isObjectLike = __commonJS({
|
|
373
|
-
"../../node_modules
|
|
373
|
+
"../../node_modules/lodash/isObjectLike.js"(exports$1, module) {
|
|
374
374
|
function isObjectLike(value) {
|
|
375
375
|
return value != null && typeof value == "object";
|
|
376
376
|
}
|
|
@@ -378,9 +378,9 @@ var require_isObjectLike = __commonJS({
|
|
|
378
378
|
}
|
|
379
379
|
});
|
|
380
380
|
|
|
381
|
-
// ../../node_modules
|
|
381
|
+
// ../../node_modules/lodash/isSymbol.js
|
|
382
382
|
var require_isSymbol = __commonJS({
|
|
383
|
-
"../../node_modules
|
|
383
|
+
"../../node_modules/lodash/isSymbol.js"(exports$1, module) {
|
|
384
384
|
var baseGetTag = require_baseGetTag();
|
|
385
385
|
var isObjectLike = require_isObjectLike();
|
|
386
386
|
var symbolTag = "[object Symbol]";
|
|
@@ -391,9 +391,9 @@ var require_isSymbol = __commonJS({
|
|
|
391
391
|
}
|
|
392
392
|
});
|
|
393
393
|
|
|
394
|
-
// ../../node_modules
|
|
394
|
+
// ../../node_modules/lodash/_baseToString.js
|
|
395
395
|
var require_baseToString = __commonJS({
|
|
396
|
-
"../../node_modules
|
|
396
|
+
"../../node_modules/lodash/_baseToString.js"(exports$1, module) {
|
|
397
397
|
var Symbol2 = require_Symbol();
|
|
398
398
|
var arrayMap = require_arrayMap();
|
|
399
399
|
var isArray = require_isArray();
|
|
@@ -417,9 +417,9 @@ var require_baseToString = __commonJS({
|
|
|
417
417
|
}
|
|
418
418
|
});
|
|
419
419
|
|
|
420
|
-
// ../../node_modules
|
|
420
|
+
// ../../node_modules/lodash/toString.js
|
|
421
421
|
var require_toString = __commonJS({
|
|
422
|
-
"../../node_modules
|
|
422
|
+
"../../node_modules/lodash/toString.js"(exports$1, module) {
|
|
423
423
|
var baseToString = require_baseToString();
|
|
424
424
|
function toString(value) {
|
|
425
425
|
return value == null ? "" : baseToString(value);
|
|
@@ -428,9 +428,9 @@ var require_toString = __commonJS({
|
|
|
428
428
|
}
|
|
429
429
|
});
|
|
430
430
|
|
|
431
|
-
// ../../node_modules
|
|
431
|
+
// ../../node_modules/lodash/deburr.js
|
|
432
432
|
var require_deburr = __commonJS({
|
|
433
|
-
"../../node_modules
|
|
433
|
+
"../../node_modules/lodash/deburr.js"(exports$1, module) {
|
|
434
434
|
var deburrLetter = require_deburrLetter();
|
|
435
435
|
var toString = require_toString();
|
|
436
436
|
var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
|
|
@@ -448,9 +448,9 @@ var require_deburr = __commonJS({
|
|
|
448
448
|
}
|
|
449
449
|
});
|
|
450
450
|
|
|
451
|
-
// ../../node_modules
|
|
451
|
+
// ../../node_modules/mime-db/db.json
|
|
452
452
|
var require_db = __commonJS({
|
|
453
|
-
"../../node_modules
|
|
453
|
+
"../../node_modules/mime-db/db.json"(exports$1, module) {
|
|
454
454
|
module.exports = {
|
|
455
455
|
"application/1d-interleaved-parityfec": {
|
|
456
456
|
source: "iana"
|
|
@@ -8973,16 +8973,16 @@ var require_db = __commonJS({
|
|
|
8973
8973
|
}
|
|
8974
8974
|
});
|
|
8975
8975
|
|
|
8976
|
-
// ../../node_modules
|
|
8976
|
+
// ../../node_modules/mime-db/index.js
|
|
8977
8977
|
var require_mime_db = __commonJS({
|
|
8978
|
-
"../../node_modules
|
|
8978
|
+
"../../node_modules/mime-db/index.js"(exports$1, module) {
|
|
8979
8979
|
module.exports = require_db();
|
|
8980
8980
|
}
|
|
8981
8981
|
});
|
|
8982
8982
|
|
|
8983
|
-
// ../../node_modules
|
|
8983
|
+
// ../../node_modules/mime-types/index.js
|
|
8984
8984
|
var require_mime_types = __commonJS({
|
|
8985
|
-
"../../node_modules
|
|
8985
|
+
"../../node_modules/mime-types/index.js"(exports$1) {
|
|
8986
8986
|
var db = require_mime_db();
|
|
8987
8987
|
var extname = __require("path").extname;
|
|
8988
8988
|
var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
|