@primate/markdown 0.6.0 → 0.8.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/lib/private/Component.d.ts +2 -1
- package/lib/private/Default.d.ts +5 -1
- package/lib/private/Default.js +40 -20
- package/lib/private/Runtime.d.ts +4 -4
- package/lib/private/Runtime.js +14 -18
- package/lib/public/browser.d.ts +3 -0
- package/lib/public/browser.js +2 -0
- package/package.json +18 -14
package/lib/private/Default.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import Runtime from "#Runtime";
|
|
2
|
+
import type BuildApp from "@primate/core/BuildApp";
|
|
3
|
+
import type NextBuild from "@primate/core/NextBuild";
|
|
4
|
+
import type { FileRef } from "@rcompat/fs";
|
|
2
5
|
export default class Default extends Runtime {
|
|
3
6
|
compile: {
|
|
4
|
-
server: (
|
|
7
|
+
server: (_: string, file: FileRef) => Promise<string>;
|
|
5
8
|
};
|
|
9
|
+
build(app: BuildApp, next: NextBuild): Promise<BuildApp>;
|
|
6
10
|
}
|
|
7
11
|
//# sourceMappingURL=Default.d.ts.map
|
package/lib/private/Default.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Runtime from "#Runtime";
|
|
2
|
-
import
|
|
2
|
+
import fs from "@rcompat/fs";
|
|
3
|
+
import string from "@rcompat/string";
|
|
3
4
|
import { marked } from "marked";
|
|
4
5
|
function slugify(text) {
|
|
5
6
|
return text
|
|
@@ -55,25 +56,44 @@ function frontmatter(src) {
|
|
|
55
56
|
;
|
|
56
57
|
export default class Default extends Runtime {
|
|
57
58
|
compile = {
|
|
58
|
-
server: async (
|
|
59
|
-
const pretransformed = await this.pretransform(text);
|
|
60
|
-
const { body, meta } = frontmatter(pretransformed);
|
|
61
|
-
const tokens = marked.lexer(body);
|
|
62
|
-
const toc = tokens
|
|
63
|
-
.filter(token => token.type === "heading")
|
|
64
|
-
.map(token => ({
|
|
65
|
-
depth: token.depth,
|
|
66
|
-
slug: slugify(token.text),
|
|
67
|
-
text: token.text,
|
|
68
|
-
}));
|
|
69
|
-
return dedent `
|
|
70
|
-
export default {
|
|
71
|
-
html: ${JSON.stringify(await marked.parse(body))},
|
|
72
|
-
toc: JSON.parse(${JSON.stringify(JSON.stringify(toc))}),
|
|
73
|
-
meta: ${meta ? JSON.stringify(meta) : "null"},
|
|
74
|
-
};
|
|
75
|
-
`;
|
|
76
|
-
},
|
|
59
|
+
server: async (_, file) => `export { default } from "markdown:${file.path}";`,
|
|
77
60
|
};
|
|
61
|
+
async build(app, next) {
|
|
62
|
+
const { pretransform } = this;
|
|
63
|
+
app.plugin("server", {
|
|
64
|
+
name: "markdown",
|
|
65
|
+
setup(build) {
|
|
66
|
+
build.onResolve({ filter: /^markdown:/ }, ({ path }) => {
|
|
67
|
+
const filePath = path.slice("markdown:".length);
|
|
68
|
+
return { path: filePath, namespace: "markdown" };
|
|
69
|
+
});
|
|
70
|
+
build.onLoad({ filter: /.*/, namespace: "markdown" }, async (args) => {
|
|
71
|
+
const text = await fs.text(args.path);
|
|
72
|
+
const { body, meta } = frontmatter(await pretransform(text));
|
|
73
|
+
const tokens = marked.lexer(body);
|
|
74
|
+
const toc = tokens
|
|
75
|
+
.filter(token => token.type === "heading")
|
|
76
|
+
.map(token => ({
|
|
77
|
+
depth: token.depth,
|
|
78
|
+
slug: slugify(token.text),
|
|
79
|
+
text: token.text,
|
|
80
|
+
}));
|
|
81
|
+
return {
|
|
82
|
+
contents: string.dedent `
|
|
83
|
+
export default {
|
|
84
|
+
md: ${JSON.stringify(body)},
|
|
85
|
+
html: ${JSON.stringify(await marked.parse(body))},
|
|
86
|
+
toc: JSON.parse(${JSON.stringify(JSON.stringify(toc))}),
|
|
87
|
+
meta: ${meta ? JSON.stringify(meta) : "null"},
|
|
88
|
+
};
|
|
89
|
+
`,
|
|
90
|
+
loader: "js",
|
|
91
|
+
watchFiles: [args.path],
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
return super.build(app, next);
|
|
97
|
+
}
|
|
78
98
|
}
|
|
79
99
|
//# sourceMappingURL=Default.js.map
|
package/lib/private/Runtime.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type Component from "#Component";
|
|
2
2
|
import FrontendModule from "@primate/core/frontend/Module";
|
|
3
|
-
import type MaybePromise from "@rcompat/type
|
|
3
|
+
import type { MaybePromise } from "@rcompat/type";
|
|
4
4
|
import type { MarkedExtension } from "marked";
|
|
5
5
|
declare function render(component: Component): {
|
|
6
6
|
body: string;
|
|
@@ -14,11 +14,11 @@ export default class Runtime extends FrontendModule<Component> {
|
|
|
14
14
|
client: boolean;
|
|
15
15
|
render: typeof render;
|
|
16
16
|
static schema: import("pema").ObjectType<{
|
|
17
|
-
fileExtensions: import("pema").OptionalType<import("pema
|
|
17
|
+
fileExtensions: import("pema").OptionalType<import("pema").ArrayType<import("pema").StringType>>;
|
|
18
18
|
marked: import("pema").OptionalType<import("pema").PureType<MarkedExtension<string, string>, "PureType">>;
|
|
19
19
|
pretransform: import("pema").OptionalType<import("pema").PureType<Pretransform, "PureType">>;
|
|
20
|
-
spa: import("pema").DefaultType<import("pema
|
|
21
|
-
ssr: import("pema").DefaultType<import("pema
|
|
20
|
+
spa: import("pema").DefaultType<import("pema").BooleanType, true>;
|
|
21
|
+
ssr: import("pema").DefaultType<import("pema").BooleanType, true>;
|
|
22
22
|
}>;
|
|
23
23
|
static options: {
|
|
24
24
|
fileExtensions: string[] | undefined;
|
package/lib/private/Runtime.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import FrontendModule from "@primate/core/frontend/Module";
|
|
2
|
-
import
|
|
2
|
+
import assert from "@rcompat/assert";
|
|
3
3
|
import { marked } from "marked";
|
|
4
|
-
import
|
|
5
|
-
import array from "pema/array";
|
|
6
|
-
import boolean from "pema/boolean";
|
|
7
|
-
import pure from "pema/pure";
|
|
8
|
-
import string from "pema/string";
|
|
4
|
+
import p from "pema";
|
|
9
5
|
function render(component) {
|
|
10
6
|
return { body: component.html };
|
|
11
7
|
}
|
|
@@ -16,23 +12,23 @@ export default class Runtime extends FrontendModule {
|
|
|
16
12
|
client = false;
|
|
17
13
|
render = render;
|
|
18
14
|
#pretransform;
|
|
19
|
-
static schema =
|
|
20
|
-
fileExtensions: array(string).optional(),
|
|
21
|
-
marked: pure().optional(),
|
|
22
|
-
pretransform: pure().optional(),
|
|
23
|
-
spa: boolean.default(true),
|
|
24
|
-
ssr: boolean.default(true),
|
|
15
|
+
static schema = p({
|
|
16
|
+
fileExtensions: p.array(p.string).optional(),
|
|
17
|
+
marked: p.pure().optional(),
|
|
18
|
+
pretransform: p.pure().optional(),
|
|
19
|
+
spa: p.boolean.default(true),
|
|
20
|
+
ssr: p.boolean.default(true),
|
|
25
21
|
});
|
|
26
22
|
static options = Runtime.schema.infer;
|
|
27
23
|
static input = Runtime.schema.input;
|
|
28
24
|
constructor(config = {}) {
|
|
29
|
-
const { marked:
|
|
30
|
-
super(
|
|
31
|
-
maybe
|
|
32
|
-
maybe
|
|
25
|
+
const { marked: marked_options, pretransform, ...super_config } = config;
|
|
26
|
+
super(super_config);
|
|
27
|
+
assert.maybe.dict(marked_options);
|
|
28
|
+
assert.maybe.function(pretransform);
|
|
33
29
|
this.#pretransform = (pretransform ?? ((m) => m));
|
|
34
|
-
const renderer = { ...
|
|
35
|
-
marked.use({ ...
|
|
30
|
+
const renderer = { ...marked_options?.renderer ?? {} };
|
|
31
|
+
marked.use({ ...marked_options, renderer });
|
|
36
32
|
}
|
|
37
33
|
get pretransform() {
|
|
38
34
|
return this.#pretransform;
|
package/package.json
CHANGED
|
@@ -1,31 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@primate/markdown",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.8.0",
|
|
4
|
+
"description": "Markdown for Primate",
|
|
5
5
|
"homepage": "https://primate.run/docs/frontend/markdown",
|
|
6
6
|
"bugs": "https://github.com/primate-run/primate/issues",
|
|
7
|
+
"type": "module",
|
|
7
8
|
"license": "MIT",
|
|
8
|
-
"files": [
|
|
9
|
-
"/lib/**/*.js",
|
|
10
|
-
"/lib/**/*.d.ts",
|
|
11
|
-
"!/**/*.spec.*"
|
|
12
|
-
],
|
|
13
9
|
"repository": {
|
|
14
10
|
"type": "git",
|
|
15
11
|
"url": "https://github.com/primate-run/primate",
|
|
16
12
|
"directory": "packages/markdown"
|
|
17
13
|
},
|
|
14
|
+
"files": [
|
|
15
|
+
"/lib/**/*.js",
|
|
16
|
+
"/lib/**/*.d.ts",
|
|
17
|
+
"!/**/*.spec.*"
|
|
18
|
+
],
|
|
18
19
|
"dependencies": {
|
|
19
|
-
"@rcompat/assert": "^0.
|
|
20
|
-
"@rcompat/string": "^0.
|
|
21
|
-
"marked": "^
|
|
22
|
-
"@primate/core": "^0.
|
|
23
|
-
"pema": "^0.
|
|
20
|
+
"@rcompat/assert": "^0.6.0",
|
|
21
|
+
"@rcompat/string": "^0.13.0",
|
|
22
|
+
"marked": "^17.0.2",
|
|
23
|
+
"@primate/core": "^0.5.0",
|
|
24
|
+
"pema": "^0.5.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@rcompat/type": "^0.9.0"
|
|
24
28
|
},
|
|
25
29
|
"peerDependencies": {
|
|
26
|
-
"primate": "^0.
|
|
30
|
+
"primate": "^0.36.0"
|
|
27
31
|
},
|
|
28
|
-
"type": "module",
|
|
29
32
|
"imports": {
|
|
30
33
|
"#*": {
|
|
31
34
|
"apekit": "./src/private/*.ts",
|
|
@@ -34,6 +37,7 @@
|
|
|
34
37
|
},
|
|
35
38
|
"exports": {
|
|
36
39
|
".": {
|
|
40
|
+
"browser": "./lib/public/browser.js",
|
|
37
41
|
"runtime": "./lib/public/runtime.js",
|
|
38
42
|
"default": "./lib/public/default.js"
|
|
39
43
|
},
|