accept-md-runtime 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -0
- package/dist/handler.d.ts.map +1 -1
- package/dist/handler.js +0 -1
- package/dist/handler.js.map +1 -1
- package/package.json +8 -2
package/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# accept-md-runtime
|
|
2
|
+
|
|
3
|
+
Runtime for [accept-md](https://github.com/hemanthvalsaraj/accept-md): HTML-to-Markdown conversion and the handler that serves markdown for Next.js pages when clients send `Accept: text/markdown`. Use this in your Next.js API route or Route Handler.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add accept-md-runtime
|
|
9
|
+
# or npm install accept-md-runtime
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
**Peer dependency:** Next.js 12 or later.
|
|
13
|
+
|
|
14
|
+
## Quick setup
|
|
15
|
+
|
|
16
|
+
1. Add middleware that rewrites `Accept: text/markdown` requests to your handler (e.g. `/api/accept-md?path=...`).
|
|
17
|
+
2. In that API route / Route Handler, call `getMarkdownForPath` with the request and path.
|
|
18
|
+
|
|
19
|
+
Or use the CLI: `npx accept-md init` to generate middleware and handler for you.
|
|
20
|
+
|
|
21
|
+
## API
|
|
22
|
+
|
|
23
|
+
### `getMarkdownForPath(req, path, options?)`
|
|
24
|
+
|
|
25
|
+
Fetches the given path as HTML from your app, converts it to markdown, and returns it. Use this in your App Router Route Handler or Pages API route.
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
import { getMarkdownForPath } from 'accept-md-runtime';
|
|
29
|
+
|
|
30
|
+
// App Router: app/api/accept-md/route.ts
|
|
31
|
+
export async function GET(req: Request) {
|
|
32
|
+
const path = new URL(req.url).searchParams.get('path') ?? '/';
|
|
33
|
+
const markdown = await getMarkdownForPath(req, path);
|
|
34
|
+
return new Response(markdown, {
|
|
35
|
+
headers: { 'Content-Type': 'text/markdown; charset=utf-8' },
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### `htmlToMarkdown(html, options?)`
|
|
41
|
+
|
|
42
|
+
Converts an HTML string to markdown (uses Turndown; optional selectors to strip).
|
|
43
|
+
|
|
44
|
+
### `loadConfig(projectRoot)`
|
|
45
|
+
|
|
46
|
+
Loads `accept-md.config.js` and returns a `NextMarkdownConfig` object.
|
|
47
|
+
|
|
48
|
+
### Types
|
|
49
|
+
|
|
50
|
+
- **`NextMarkdownConfig`** – include, exclude, cleanSelectors, cache, transformers, baseUrl, debug
|
|
51
|
+
- **`MarkdownOptions`** – options for `htmlToMarkdown`
|
|
52
|
+
- **`GetMarkdownOptions`** – options for `getMarkdownForPath`
|
|
53
|
+
|
|
54
|
+
### Templates (for tooling)
|
|
55
|
+
|
|
56
|
+
- **`MIDDLEWARE_TEMPLATE`** – snippet for Next.js middleware
|
|
57
|
+
- **`APP_ROUTE_HANDLER_TEMPLATE`** – snippet for App Router handler
|
|
58
|
+
- **`PAGES_API_HANDLER_TEMPLATE`** – snippet for Pages API handler
|
|
59
|
+
|
|
60
|
+
## License
|
|
61
|
+
|
|
62
|
+
MIT · [Repository](https://github.com/hemanthvalsaraj/accept-md)
|
package/dist/handler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA8BrD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,iFAAiF;IACjF,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BrF"}
|
package/dist/handler.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* Handler logic: fetch page HTML and return markdown. Used by generated route/API.
|
|
3
3
|
*/
|
|
4
4
|
import { htmlToMarkdown } from './markdown.js';
|
|
5
|
-
const DEFAULT_EXCLUDE = ['/api/**', '/_next/**', '/__markdown/**'];
|
|
6
5
|
function pathMatches(pathname, patterns) {
|
|
7
6
|
const norm = pathname.endsWith('/') && pathname !== '/' ? pathname.slice(0, -1) : pathname;
|
|
8
7
|
const parts = norm.split('/').filter(Boolean);
|
package/dist/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "accept-md-runtime",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "HTML→Markdown conversion and route handler for accept-md (Next.js)",
|
|
4
5
|
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
5
10
|
"repository": {
|
|
6
11
|
"type": "git",
|
|
7
12
|
"url": "https://github.com/hemanthvalsaraj/accept-md.git"
|
|
@@ -20,7 +25,8 @@
|
|
|
20
25
|
}
|
|
21
26
|
},
|
|
22
27
|
"files": [
|
|
23
|
-
"dist"
|
|
28
|
+
"dist",
|
|
29
|
+
"README.md"
|
|
24
30
|
],
|
|
25
31
|
"dependencies": {
|
|
26
32
|
"turndown": "^7.2.0",
|