@kaathewise/ssg 0.4.0 → 0.5.1
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/.github/workflows/check.yml +16 -0
- package/.github/workflows/publish.yml +23 -0
- package/bun.lock +50 -0
- package/package.json +8 -5
- package/src/build.ts +7 -1
- package/src/index.ts +0 -1
- package/src/render.ts +18 -3
- package/src/server.ts +1 -1
- package/src/css.ts +0 -32
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: Publish package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
id-token: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v6
|
|
17
|
+
|
|
18
|
+
- uses: actions/setup-node@v6
|
|
19
|
+
with:
|
|
20
|
+
node-version: "latest"
|
|
21
|
+
registry-url: "https://registry.npmjs.org"
|
|
22
|
+
|
|
23
|
+
- run: npm publish --verbose --access public
|
package/bun.lock
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lockfileVersion": 1,
|
|
3
|
+
"workspaces": {
|
|
4
|
+
"": {
|
|
5
|
+
"name": "@kaathewise/ssg",
|
|
6
|
+
"devDependencies": {
|
|
7
|
+
"@biomejs/biome": "^2.2.3",
|
|
8
|
+
"@types/bun": "^1.2.21",
|
|
9
|
+
"@types/node": "^24.3.1",
|
|
10
|
+
"typescript": "^5.9.2",
|
|
11
|
+
"typescript-language-server": "^4.4.0",
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
"packages": {
|
|
16
|
+
"@biomejs/biome": ["@biomejs/biome@2.2.3", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.2.3", "@biomejs/cli-darwin-x64": "2.2.3", "@biomejs/cli-linux-arm64": "2.2.3", "@biomejs/cli-linux-arm64-musl": "2.2.3", "@biomejs/cli-linux-x64": "2.2.3", "@biomejs/cli-linux-x64-musl": "2.2.3", "@biomejs/cli-win32-arm64": "2.2.3", "@biomejs/cli-win32-x64": "2.2.3" }, "bin": { "biome": "bin/biome" } }, "sha512-9w0uMTvPrIdvUrxazZ42Ib7t8Y2yoGLKLdNne93RLICmaHw7mcLv4PPb5LvZLJF3141gQHiCColOh/v6VWlWmg=="],
|
|
17
|
+
|
|
18
|
+
"@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.2.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-OrqQVBpadB5eqzinXN4+Q6honBz+tTlKVCsbEuEpljK8ASSItzIRZUA02mTikl3H/1nO2BMPFiJ0nkEZNy3B1w=="],
|
|
19
|
+
|
|
20
|
+
"@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.2.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-OCdBpb1TmyfsTgBAM1kPMXyYKTohQ48WpiN9tkt9xvU6gKVKHY4oVwteBebiOqyfyzCNaSiuKIPjmHjUZ2ZNMg=="],
|
|
21
|
+
|
|
22
|
+
"@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-g/Uta2DqYpECxG+vUmTAmUKlVhnGEcY7DXWgKP8ruLRa8Si1QHsWknPY3B/wCo0KgYiFIOAZ9hjsHfNb9L85+g=="],
|
|
23
|
+
|
|
24
|
+
"@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-q3w9jJ6JFPZPeqyvwwPeaiS/6NEszZ+pXKF+IczNo8Xj6fsii45a4gEEicKyKIytalV+s829ACZujQlXAiVLBQ=="],
|
|
25
|
+
|
|
26
|
+
"@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-LEtyYL1fJsvw35CxrbQ0gZoxOG3oZsAjzfRdvRBRHxOpQ91Q5doRVjvWW/wepgSdgk5hlaNzfeqpyGmfSD0Eyw=="],
|
|
27
|
+
|
|
28
|
+
"@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-y76Dn4vkP1sMRGPFlNc+OTETBhGPJ90jY3il6jAfur8XWrYBQV3swZ1Jo0R2g+JpOeeoA0cOwM7mJG6svDz79w=="],
|
|
29
|
+
|
|
30
|
+
"@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.2.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-Ms9zFYzjcJK7LV+AOMYnjN3pV3xL8Prxf9aWdDVL74onLn5kcvZ1ZMQswE5XHtnd/r/0bnUd928Rpbs14BzVmA=="],
|
|
31
|
+
|
|
32
|
+
"@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.2.3", "", { "os": "win32", "cpu": "x64" }, "sha512-gvCpewE7mBwBIpqk1YrUqNR4mCiyJm6UI3YWQQXkedSSEwzRdodRpaKhbdbHw1/hmTWOVXQ+Eih5Qctf4TCVOQ=="],
|
|
33
|
+
|
|
34
|
+
"@types/bun": ["@types/bun@1.2.21", "", { "dependencies": { "bun-types": "1.2.21" } }, "sha512-NiDnvEqmbfQ6dmZ3EeUO577s4P5bf4HCTXtI6trMc6f6RzirY5IrF3aIookuSpyslFzrnvv2lmEWv5HyC1X79A=="],
|
|
35
|
+
|
|
36
|
+
"@types/node": ["@types/node@24.3.1", "", { "dependencies": { "undici-types": "~7.10.0" } }, "sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g=="],
|
|
37
|
+
|
|
38
|
+
"@types/react": ["@types/react@19.1.12", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w=="],
|
|
39
|
+
|
|
40
|
+
"bun-types": ["bun-types@1.2.21", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-sa2Tj77Ijc/NTLS0/Odjq/qngmEPZfbfnOERi0KRUYhT9R8M4VBioWVmMWE5GrYbKMc+5lVybXygLdibHaqVqw=="],
|
|
41
|
+
|
|
42
|
+
"csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
|
|
43
|
+
|
|
44
|
+
"typescript": ["typescript@5.9.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="],
|
|
45
|
+
|
|
46
|
+
"typescript-language-server": ["typescript-language-server@4.4.0", "", { "bin": { "typescript-language-server": "lib/cli.mjs" } }, "sha512-enWhplhHX7PA0q+IcKHBMpTQh9I2Bmb3L45rwnkATHMsZ7YLduyyCdOmVUWJSYZfkWaBMiKwi/e2FQo4xsKeWw=="],
|
|
47
|
+
|
|
48
|
+
"undici-types": ["undici-types@7.10.0", "", {}, "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag=="],
|
|
49
|
+
}
|
|
50
|
+
}
|
package/package.json
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kaathewise/ssg",
|
|
3
3
|
"description": "Bun & JSX static site generator",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.1",
|
|
5
5
|
"license": "MPL-2.0",
|
|
6
6
|
"author": "Andrej Kolčin",
|
|
7
7
|
"type": "module",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/kaathewisegit/ssg.git"
|
|
11
|
+
},
|
|
8
12
|
"scripts": {
|
|
9
13
|
"check": "biome check && tsc --noEmit"
|
|
10
14
|
},
|
|
11
15
|
"main": "src/index.ts",
|
|
12
|
-
"bin":
|
|
16
|
+
"bin": {
|
|
17
|
+
"ssg": "src/run.ts"
|
|
18
|
+
},
|
|
13
19
|
"devDependencies": {
|
|
14
20
|
"@biomejs/biome": "^2.2.3",
|
|
15
21
|
"@types/bun": "^1.2.21",
|
|
16
22
|
"@types/node": "^24.3.1",
|
|
17
23
|
"typescript": "^5.9.2",
|
|
18
24
|
"typescript-language-server": "^4.4.0"
|
|
19
|
-
},
|
|
20
|
-
"dependencies": {
|
|
21
|
-
"postcss": "^8.5.6"
|
|
22
25
|
}
|
|
23
26
|
}
|
package/src/build.ts
CHANGED
|
@@ -26,6 +26,12 @@ export async function build(config: Config) {
|
|
|
26
26
|
})
|
|
27
27
|
}
|
|
28
28
|
const file = Bun.file(destPath)
|
|
29
|
-
await write(file, page.
|
|
29
|
+
await write(file, page.src)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (config.assetDir) {
|
|
33
|
+
await fs.cp(config.assetDir, config.outputDir, {
|
|
34
|
+
recursive: true,
|
|
35
|
+
})
|
|
30
36
|
}
|
|
31
37
|
}
|
package/src/index.ts
CHANGED
package/src/render.ts
CHANGED
|
@@ -6,7 +6,7 @@ interface Params {
|
|
|
6
6
|
|
|
7
7
|
export type Page = {
|
|
8
8
|
path: string
|
|
9
|
-
|
|
9
|
+
src: string
|
|
10
10
|
contentType: string | null
|
|
11
11
|
}
|
|
12
12
|
|
|
@@ -22,7 +22,22 @@ export async function render(
|
|
|
22
22
|
contentType = module.getContentType()
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
const
|
|
25
|
+
const def = module.default()
|
|
26
|
+
|
|
27
|
+
let src: string
|
|
28
|
+
switch (typeof def) {
|
|
29
|
+
case "string": {
|
|
30
|
+
src = def
|
|
31
|
+
break
|
|
32
|
+
}
|
|
33
|
+
case "function": {
|
|
34
|
+
src = await def(params)
|
|
35
|
+
break
|
|
36
|
+
}
|
|
37
|
+
default: {
|
|
38
|
+
throw "Not implemented"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
26
41
|
|
|
27
42
|
let pagePath = path.relative(pagesDir, modulePath)
|
|
28
43
|
pagePath = substituteParams(pagePath, params)
|
|
@@ -31,7 +46,7 @@ export async function render(
|
|
|
31
46
|
pagePath += ".html"
|
|
32
47
|
}
|
|
33
48
|
|
|
34
|
-
return { path: pagePath,
|
|
49
|
+
return { path: pagePath, src, contentType }
|
|
35
50
|
}
|
|
36
51
|
|
|
37
52
|
export async function renderAll(
|
package/src/server.ts
CHANGED
|
@@ -127,7 +127,7 @@ async function createHtml(
|
|
|
127
127
|
): Promise<Response> {
|
|
128
128
|
const page = await render(route.filePath, pagesDir, route.params)
|
|
129
129
|
|
|
130
|
-
const response = new Response(page.
|
|
130
|
+
const response = new Response(page.src, {
|
|
131
131
|
headers: {
|
|
132
132
|
"Content-Type": page.contentType ?? "text/html",
|
|
133
133
|
},
|
package/src/css.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { BunPlugin, OnLoadArgs, OnLoadResult } from "bun"
|
|
2
|
-
import postcss from "postcss"
|
|
3
|
-
|
|
4
|
-
export function postcssPlugin(config: {
|
|
5
|
-
plugins?: postcss.Plugin[]
|
|
6
|
-
}): BunPlugin {
|
|
7
|
-
return {
|
|
8
|
-
name: "bun-postcss",
|
|
9
|
-
|
|
10
|
-
async setup(build) {
|
|
11
|
-
const processor = postcss(config?.plugins ?? [])
|
|
12
|
-
|
|
13
|
-
async function apply(
|
|
14
|
-
args: OnLoadArgs,
|
|
15
|
-
): Promise<OnLoadResult> {
|
|
16
|
-
const raw = await Bun.file(args.path).text()
|
|
17
|
-
|
|
18
|
-
const result = await processor.process(raw, {
|
|
19
|
-
from: args.path,
|
|
20
|
-
})
|
|
21
|
-
const css = result.css
|
|
22
|
-
|
|
23
|
-
return {
|
|
24
|
-
exports: { default: css },
|
|
25
|
-
loader: "object",
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
build.onLoad({ filter: /\.css$/ }, apply)
|
|
30
|
-
},
|
|
31
|
-
}
|
|
32
|
-
}
|