postfolio 1.0.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/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/src/main.d.ts +33 -0
- package/dist/src/main.d.ts.map +1 -0
- package/dist/src/main.js +93 -0
- package/dist/src/main.js.map +1 -0
- package/dist/src/renderer.d.ts +7 -0
- package/dist/src/renderer.d.ts.map +1 -0
- package/dist/src/renderer.js +10 -0
- package/dist/src/renderer.js.map +1 -0
- package/package.json +42 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export type BlogFrontmatter = {
|
|
2
|
+
title?: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
date?: string;
|
|
5
|
+
tags?: string[];
|
|
6
|
+
author?: string;
|
|
7
|
+
draft?: boolean;
|
|
8
|
+
[key: string]: string | string[] | boolean | undefined;
|
|
9
|
+
};
|
|
10
|
+
export type BlogPostSource = {
|
|
11
|
+
slug: string;
|
|
12
|
+
filename: string;
|
|
13
|
+
filePath: string;
|
|
14
|
+
mdx: string;
|
|
15
|
+
};
|
|
16
|
+
type TOCItem = {
|
|
17
|
+
level: number;
|
|
18
|
+
text: string;
|
|
19
|
+
slug: string;
|
|
20
|
+
};
|
|
21
|
+
export declare function generateSlug(text: string): string;
|
|
22
|
+
export declare function generateTOC(content: string): TOCItem[];
|
|
23
|
+
export declare function Slugs(): string[];
|
|
24
|
+
export declare function Post(slug: string): BlogPostSource | undefined;
|
|
25
|
+
export declare function allPosts(): BlogPostSource[];
|
|
26
|
+
export declare function MDXPost(slug: string): Promise<{
|
|
27
|
+
slug: string;
|
|
28
|
+
code: string;
|
|
29
|
+
frontmatter: any;
|
|
30
|
+
raw: string;
|
|
31
|
+
} | undefined>;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,GAAG,SAAS,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAgDF,KAAK,OAAO,GAAG;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAGF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,UAKxC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAgBtD;AAED,wBAAgB,KAAK,IAAI,MAAM,EAAE,CAEhC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE7D;AAED,wBAAgB,QAAQ,IAAI,cAAc,EAAE,CAI3C;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM;;;;;eAoBzC"}
|
package/dist/src/main.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { bundleMDX } from "mdx-bundler";
|
|
4
|
+
const BLOG_DIR_PATH = path.join(process.cwd(), "content", "blogs");
|
|
5
|
+
const ESBUILD_BINARY_PATH = process.platform === "win32"
|
|
6
|
+
? path.join(process.cwd(), "node_modules", "esbuild", "esbuild.exe")
|
|
7
|
+
: path.join(process.cwd(), "node_modules", "esbuild", "bin", "esbuild");
|
|
8
|
+
function ensureEsbuildBinaryPath() {
|
|
9
|
+
if (!process.env.ESBUILD_BINARY_PATH) {
|
|
10
|
+
process.env.ESBUILD_BINARY_PATH = ESBUILD_BINARY_PATH;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function transformFilenameToSlug(filename) {
|
|
14
|
+
return filename
|
|
15
|
+
.replace(/\.mdx$/, "")
|
|
16
|
+
.toLowerCase()
|
|
17
|
+
.trim()
|
|
18
|
+
.replace(/[^a-z0-9\s-]/g, "")
|
|
19
|
+
.replace(/\s+/g, "-")
|
|
20
|
+
.replace(/-+/g, "-")
|
|
21
|
+
.replace(/^-+|-+$/g, "");
|
|
22
|
+
}
|
|
23
|
+
function getMdxFileNames() {
|
|
24
|
+
if (!fs.existsSync(BLOG_DIR_PATH)) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
return fs
|
|
28
|
+
.readdirSync(BLOG_DIR_PATH)
|
|
29
|
+
.filter((file) => file.endsWith(".mdx"));
|
|
30
|
+
}
|
|
31
|
+
function getPostSourceBySlug(slug) {
|
|
32
|
+
const filename = getMdxFileNames().find((file) => transformFilenameToSlug(file) === slug);
|
|
33
|
+
if (!filename) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
const filePath = path.join(BLOG_DIR_PATH, filename);
|
|
37
|
+
return {
|
|
38
|
+
slug,
|
|
39
|
+
filename,
|
|
40
|
+
filePath,
|
|
41
|
+
mdx: fs.readFileSync(filePath, "utf8"),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function generateSlug(text) {
|
|
45
|
+
return text
|
|
46
|
+
.toLowerCase()
|
|
47
|
+
.replace(/[^\w\s-]/g, "")
|
|
48
|
+
.replace(/\s+/g, "-");
|
|
49
|
+
}
|
|
50
|
+
export function generateTOC(content) {
|
|
51
|
+
const headingRegex = /^(#{1,6})\s+(.+)$/gm;
|
|
52
|
+
return [...content.matchAll(headingRegex)].map((match) => {
|
|
53
|
+
const level = match[1].length;
|
|
54
|
+
const text = match[2].trim();
|
|
55
|
+
return {
|
|
56
|
+
level,
|
|
57
|
+
text,
|
|
58
|
+
slug: text
|
|
59
|
+
.toLowerCase()
|
|
60
|
+
.replace(/[^\w\s-]/g, "")
|
|
61
|
+
.replace(/\s+/g, "-"),
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
export function Slugs() {
|
|
66
|
+
return getMdxFileNames().map(transformFilenameToSlug);
|
|
67
|
+
}
|
|
68
|
+
export function Post(slug) {
|
|
69
|
+
return getPostSourceBySlug(slug);
|
|
70
|
+
}
|
|
71
|
+
export function allPosts() {
|
|
72
|
+
return Slugs()
|
|
73
|
+
.map(getPostSourceBySlug)
|
|
74
|
+
.filter((post) => Boolean(post));
|
|
75
|
+
}
|
|
76
|
+
export async function MDXPost(slug) {
|
|
77
|
+
const post = Post(slug);
|
|
78
|
+
if (!post) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
ensureEsbuildBinaryPath();
|
|
82
|
+
const { code, frontmatter } = await bundleMDX({
|
|
83
|
+
file: post.filePath,
|
|
84
|
+
cwd: BLOG_DIR_PATH,
|
|
85
|
+
});
|
|
86
|
+
return {
|
|
87
|
+
slug: post.slug,
|
|
88
|
+
code,
|
|
89
|
+
frontmatter,
|
|
90
|
+
raw: post.mdx
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { getMDXComponent } from "mdx-bundler/client";
|
|
3
|
+
export declare function Content({ code, components, }: {
|
|
4
|
+
code: string;
|
|
5
|
+
components?: React.ComponentProps<ReturnType<typeof getMDXComponent>>["components"];
|
|
6
|
+
}): React.JSX.Element;
|
|
7
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,UAAU,GACX,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAC/B,UAAU,CAAC,OAAO,eAAe,CAAC,CACnC,CAAC,YAAY,CAAC,CAAC;CACjB,qBAKA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { getMDXComponent } from "mdx-bundler/client";
|
|
5
|
+
export function Content({ code, components, }) {
|
|
6
|
+
const Render = React.useMemo(() => getMDXComponent(code), [code]);
|
|
7
|
+
// eslint-disable-next-line react-hooks/static-components -- mdx-bundler creates a component from compiled MDX at runtime.
|
|
8
|
+
return _jsx(Render, { components: components });
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/renderer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,UAAU,OAAO,CAAC,EACtB,IAAI,EACJ,UAAU,GAMX;IACC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAElE,0HAA0H;IAC1H,OAAO,KAAC,MAAM,IAAC,UAAU,EAAE,UAAU,GAAI,CAAC;AAC5C,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "postfolio",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./index.ts",
|
|
6
|
+
"types": "./index.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./index.ts",
|
|
10
|
+
"import": "./index.ts"
|
|
11
|
+
},
|
|
12
|
+
"./renderer": {
|
|
13
|
+
"types": "./src/renderer.tsx",
|
|
14
|
+
"import": "./src/renderer.tsx"
|
|
15
|
+
},
|
|
16
|
+
"./client": {
|
|
17
|
+
"types": "./src/client.ts",
|
|
18
|
+
"import": "./src/client.ts"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc -p tsconfig.json"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"gray-matter": "^4.0.3",
|
|
29
|
+
"mdx-bundler": "^10.1.1"
|
|
30
|
+
},
|
|
31
|
+
"peerDependencies": {
|
|
32
|
+
"react": ">=19"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/node": "^20",
|
|
36
|
+
"@types/react": "^19",
|
|
37
|
+
"typescript": "^5"
|
|
38
|
+
},
|
|
39
|
+
"allowScripts": {
|
|
40
|
+
"esbuild@0.27.7": true
|
|
41
|
+
}
|
|
42
|
+
}
|