@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.
@@ -0,0 +1,16 @@
1
+ name: Checks
2
+
3
+ on:
4
+ push:
5
+ branches: ["trunk"]
6
+
7
+ jobs:
8
+ check:
9
+ runs-on: ubuntu-latest
10
+
11
+ steps:
12
+ - uses: actions/checkout@v6
13
+ - uses: oven-sh/setup-bun@v2
14
+
15
+ - run: bun ci
16
+ - run: bun check
@@ -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.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": "./src/run.ts",
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.html)
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
@@ -1,4 +1,3 @@
1
1
  export { build } from "./build"
2
2
  export { type Config, defineConfig } from "./config"
3
- export { postcssPlugin } from "./css"
4
3
  export { serve } from "./server"
package/src/render.ts CHANGED
@@ -6,7 +6,7 @@ interface Params {
6
6
 
7
7
  export type Page = {
8
8
  path: string
9
- html: string
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 html = await module.default(params)
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, html, contentType }
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.html, {
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
- }