Skip to content

Commit 9669e9c

Browse files
authored
Maintenance (#850)
- Replaced zod with valibot - Updated all deps - Removed a bunch of pnpm scripts in favor of doing things programatically - Improved Dockerfile to reuse stages better and add a node compile cache
1 parent abb79f7 commit 9669e9c

30 files changed

+1656
-2518
lines changed

Dockerfile

+30-26
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,55 @@
1-
FROM node:22-alpine AS runtime_deps
2-
3-
RUN corepack enable
1+
FROM node:22-alpine as base
42

53
WORKDIR /app
64

7-
COPY package.json .
8-
COPY pnpm-lock.yaml .
9-
COPY .npmrc .
10-
5+
ENV PNPM_HOME=/pnpm
116
ENV CI=1
7+
# Use production in case any dependencies use it in any way
128
ENV NODE_ENV=production
13-
# Install dependencies
14-
RUN pnpm install --frozen-lockfile
159

16-
FROM node:22-alpine AS docs
10+
# Enable node compile cache
11+
ENV NODE_COMPILE_CACHE=/node-cc
12+
RUN mkdir -p $NODE_COMPILE_CACHE
13+
14+
FROM base as base_deps
15+
16+
ENV CI=1
17+
18+
COPY .npmrc package.json pnpm-lock.yaml ./
1719

1820
RUN corepack enable
21+
RUN corepack prepare --activate
1922

20-
WORKDIR /app
23+
FROM base_deps as runtime_deps
24+
25+
# Install dependencies
26+
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
27+
pnpm install --frozen-lockfile --production
28+
29+
FROM base_deps AS docs
2130

22-
COPY package.json .
23-
COPY pnpm-lock.yaml .
24-
COPY .npmrc .
2531
COPY docs/openapi.yaml docs/openapi.yaml
2632

27-
ENV CI=1
2833
# Install dependencies
29-
RUN pnpm install --frozen-lockfile
34+
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
35+
pnpm install --frozen-lockfile
3036

31-
RUN pnpm run docs
37+
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
38+
pnpm run docs
3239

33-
FROM node:22-alpine
40+
FROM base
3441

35-
RUN corepack enable
42+
COPY .npmrc knexfile.js package.json pnpm-lock.yaml ./
43+
COPY src/ src/
44+
COPY migrations/ migrations/
3645

37-
WORKDIR /app
38-
39-
COPY . .
40-
COPY --from=runtime_deps /app/node_modules node_modules
46+
COPY --from=runtime_deps /app/node_modules/ node_modules/
4147
COPY --from=docs /app/redoc-static.html .
4248

4349
# Run with...
4450
# Source maps enabled, since it does not affect performance from what I found
4551
ENV NODE_OPTIONS="--enable-source-maps"
4652
# Warnings disabled, we know what we're doing and they're annoying
4753
ENV NODE_NO_WARNINGS=1
48-
# Use production in case any dependencies use it in any way
49-
ENV NODE_ENV=production
5054

51-
CMD ["pnpm", "--silent", "start"]
55+
CMD ["node", "--run", "start"]

eslint.config.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import antfu from "@antfu/eslint-config"
22

33
export default antfu({
4-
ignores: ["**/package.json"],
4+
ignores: ["**/*.json"],
5+
markdown: false,
56
stylistic: false,
7+
jsonc: false,
8+
jsx: false,
9+
toml: false,
10+
yaml: false,
611
test: { overrides: { "test/no-import-node-test": "off" } },
712
typescript: {
813
tsconfigPath: "tsconfig.json",
@@ -13,12 +18,15 @@ export default antfu({
1318
"ts/consistent-type-imports": ["error", { fixStyle: "inline-type-imports" }],
1419
"ts/no-unsafe-argument": "off",
1520
"ts/no-unsafe-assignment": "off",
21+
"node/prefer-global/process": "off",
22+
"antfu/no-top-level-await": "off",
23+
"import/consistent-type-specifier-style": "off",
1624

1725
"perfectionist/sort-imports": [
1826
"error",
1927
{
2028
type: "natural",
21-
internalPattern: ["@/**", "~/**"],
29+
internalPattern: ["^@/", "^~/", "^#[a-zA-Z0-9-]+/"],
2230
newlinesBetween: "always",
2331
groups: [
2432
["builtin", "builtin-type"],

knexfile.js

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import { mkdirSync } from "node:fs"
2+
3+
mkdirSync("./sqlite", { recursive: true })
4+
15
/** @type5 {import("knex").Knex.Config} */
26
export default {
37
client: "better-sqlite3",

package.json

+38-27
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"private": true,
77
"license": "AGPL-3.0-only",
88
"homepage": "https://arm.haglund.dev/docs",
9-
"packageManager": "pnpm@9.13.2",
9+
"packageManager": "pnpm@10.5.2",
1010
"engines": {
1111
"node": ">=22"
1212
},
@@ -17,61 +17,72 @@
1717
"*.{js,cjs,mjs,ts,cts,mts,json}": ["biome check --fix"]
1818
},
1919
"scripts": {
20-
"dev": "onchange --initial --kill 'src/**' pnpm-lock.yaml -- pnpm --silent run start",
20+
"dev": "node --experimental-strip-types --experimental-transform-types --watch src/index.ts",
2121
"docs": "pnpm --package=@redocly/cli dlx redocly build-docs docs/openapi.yaml",
2222
"docs:dev": "onchange --initial --kill docs/openapi.yaml -- pnpm --silent run docs",
2323
"docker:build": "docker build . --tag arm-server",
2424
"docker:start": "pnpm --silent docker:build; pnpm --silent docker:run",
2525
"docker:run": "docker run -it --rm --name arm -p 3000:3000 arm-server",
2626
"fetch-data": "node --experimental-strip-types --experimental-transform-types bin/update.ts --exit",
2727
"lint": "eslint src",
28-
"migrate": "knex migrate:latest --knexfile knexfile.js",
2928
"migrate:create": "knex migrate:make --knexfile knexfile.js -x ts",
30-
"start": "pnpm --silent run migrate && node --experimental-strip-types --experimental-transform-types src/index.ts",
31-
"test": "NODE_ENV=test pnpm --silent run migrate && vitest",
29+
"start": "node --experimental-strip-types --experimental-transform-types src/index.ts",
30+
"test": "vitest",
3231
"typecheck": "tsc --noEmit",
3332
"prepare": "is-ci || simple-git-hooks"
3433
},
3534
"resolutions": {
36-
"esbuild": "0.24.0"
35+
"esbuild": "0.25.0"
3736
},
3837
"dependencies": {
39-
"@hono/node-server": "1.13.7",
38+
"@hono/node-server": "1.13.8",
4039
"@hono/sentry": "1.2.0",
41-
"@hono/zod-validator": "0.4.1",
42-
"@sentry/node": "8.38.0",
43-
"@tsconfig/node22": "22.0.0",
44-
"@tsconfig/strictest": "2.0.5",
45-
"better-sqlite3": "11.5.0",
46-
"hono": "4.6.10",
47-
"is-ci": "3.0.1",
40+
"@hono/standard-validator": "0.1.2",
41+
"@sentry/node": "9.3.0",
42+
"better-sqlite3": "11.8.1",
43+
"hono": "4.7.2",
44+
"is-ci": "4.1.0",
4845
"knex": "3.1.0",
4946
"ofetch": "1.4.1",
50-
"pino": "9.5.0",
51-
"pino-pretty": "13.0.0",
52-
"sucrase": "3.35.0",
53-
"type-fest": "4.27.0",
54-
"typescript": "5.6.3",
55-
"zod": "3.23.8"
47+
"pino": "9.6.0",
48+
"valibot": "1.0.0-rc.3"
5649
},
5750
"devDependencies": {
58-
"@antfu/eslint-config": "3.8.0",
51+
"@antfu/eslint-config": "4.3.0",
5952
"@biomejs/biome": "1.9.4",
53+
"@standard-schema/spec": "1.0.0",
54+
"@tsconfig/node22": "22.0.0",
55+
"@tsconfig/strictest": "2.0.5",
6056
"@types/json-schema": "7.0.15",
61-
"@types/node": "22.10.10",
62-
"@vitest/coverage-v8": "2.1.8",
63-
"dotenv": "16.4.5",
64-
"eslint": "9.14.0",
57+
"@types/node": "22.13.8",
58+
"@vitest/coverage-v8": "3.0.7",
59+
"dotenv": "16.4.7",
60+
"eslint": "9.21.0",
6561
"nano-staged": "0.8.0",
6662
"onchange": "7.1.0",
63+
"pino-pretty": "13.0.0",
6764
"simple-git-hooks": "2.11.1",
6865
"tsconfig-paths": "4.2.0",
69-
"vitest": "2.1.8"
66+
"type-fest": "4.36.0",
67+
"typescript": "5.8.2",
68+
"vitest": "3.0.7"
7069
},
7170
"pnpm": {
7271
"overrides": {
72+
"@eslint/markdown": "-",
73+
"@stylistic/eslint-plugin": "-",
74+
"eslint-plugin-jsonc": "-",
75+
"eslint-plugin-toml": "-",
76+
"eslint-plugin-vue": "-",
77+
"eslint-processor-vue-blocks": "-",
78+
"eslint-plugin-yml": "-",
79+
"jsonc-eslint-parser": "-",
80+
"toml-eslint-parser": "-",
81+
"yaml-eslint-parser": "-",
7382
"is-core-module": "npm:@nolyfill/is-core-module@^1",
7483
"safe-buffer": "npm:@nolyfill/safe-buffer@^1"
75-
}
84+
},
85+
"onlyBuiltDependencies": ["better-sqlite3"],
86+
"ignoredBuiltDependencies": ["@biomejs/biome", "esbuild", "simple-git-hooks"]
7687
}
7788
}

0 commit comments

Comments
 (0)