wiki-viewer 2.9.0 → 2.9.2

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.
Files changed (97) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +2 -2
  5. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/api/agent/activity/route.js.nft.json +1 -1
  13. package/.next/standalone/.next/server/app/api/agent/events/[...path]/route.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/api/agent/files/[...path]/route.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/api/agent/fs/file/[...path]/route.js.nft.json +1 -1
  16. package/.next/standalone/.next/server/app/api/agent/fs/ls/[[...path]]/route.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/api/agent/fs/move/route.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/api/agent/fs/search/route.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/api/agent/internal/span/route.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/api/agent/settings/route.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/api/agent/sidecar/[...path]/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/assets/[...path]/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/pdf/save/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/share/[token]/asset/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/share/[token]/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/share/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/system/reveal/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/system/set-root/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/branch/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/open/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/refresh/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/system/workspaces/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/upload/[...path]/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/wiki/app/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/wiki/backlinks/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/wiki/content/route.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/api/wiki/download/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/wiki/file/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/wiki/folder/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/wiki/git-branches/route.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/api/wiki/git-checkout/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/wiki/git-diff/route.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/api/wiki/git-file-info/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/api/wiki/git-history/route.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/api/wiki/git-pull/route.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/api/wiki/move/route.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/api/wiki/new-file/route.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/api/wiki/outlinks/route.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/api/wiki/page/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/api/wiki/presence/route.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/api/wiki/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/wiki/search/route.js.nft.json +1 -1
  54. package/.next/standalone/.next/server/app/api/wiki/slugs/route.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/api/wiki/upload/route.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/api/wiki/watch/route.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/chunks/ssr/_0v4uz-4._.js +1 -1
  59. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  60. package/.next/standalone/.next/server/pages/500.html +1 -1
  61. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  63. package/.next/standalone/.next/static/chunks/{08yt220_vis~5.js → 03zmegz1kvvod.js} +1 -1
  64. package/.next/standalone/next.config.ts +8 -0
  65. package/.next/standalone/node_modules/@vscode/ripgrep-linux-x64/bin/rg +0 -0
  66. package/.next/standalone/package.json +129 -129
  67. package/.next/standalone/server.js +1 -1
  68. package/bin/postbuild.js +30 -0
  69. package/package.json +123 -130
  70. package/.next/standalone/node_modules/@img/colour/color.cjs +0 -1596
  71. package/.next/standalone/node_modules/@img/colour/index.cjs +0 -1
  72. package/.next/standalone/node_modules/@img/colour/package.json +0 -58
  73. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/README.md +0 -46
  74. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +0 -221
  75. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +0 -1
  76. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  77. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/package.json +0 -42
  78. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/versions.json +0 -30
  79. package/.next/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  80. package/.next/standalone/node_modules/@img/sharp-linux-x64/package.json +0 -46
  81. package/.next/standalone/node_modules/sharp/lib/channel.js +0 -177
  82. package/.next/standalone/node_modules/sharp/lib/colour.js +0 -195
  83. package/.next/standalone/node_modules/sharp/lib/composite.js +0 -212
  84. package/.next/standalone/node_modules/sharp/lib/constructor.js +0 -499
  85. package/.next/standalone/node_modules/sharp/lib/index.js +0 -16
  86. package/.next/standalone/node_modules/sharp/lib/input.js +0 -809
  87. package/.next/standalone/node_modules/sharp/lib/is.js +0 -143
  88. package/.next/standalone/node_modules/sharp/lib/libvips.js +0 -207
  89. package/.next/standalone/node_modules/sharp/lib/operation.js +0 -1016
  90. package/.next/standalone/node_modules/sharp/lib/output.js +0 -1666
  91. package/.next/standalone/node_modules/sharp/lib/resize.js +0 -595
  92. package/.next/standalone/node_modules/sharp/lib/sharp.js +0 -121
  93. package/.next/standalone/node_modules/sharp/lib/utility.js +0 -291
  94. package/.next/standalone/node_modules/sharp/package.json +0 -202
  95. /package/.next/standalone/.next/static/{014EirzgOgUjO57zMiZrA → R2lG97g-a6HpbZZtS4qep}/_buildManifest.js +0 -0
  96. /package/.next/standalone/.next/static/{014EirzgOgUjO57zMiZrA → R2lG97g-a6HpbZZtS4qep}/_clientMiddlewareManifest.js +0 -0
  97. /package/.next/standalone/.next/static/{014EirzgOgUjO57zMiZrA → R2lG97g-a6HpbZZtS4qep}/_ssgManifest.js +0 -0
@@ -1,131 +1,131 @@
1
1
  {
2
- "name": "wiki-viewer",
3
- "version": "2.9.0",
4
- "description": "Local file viewer and wiki view markdown, HTML, PDFs, notebooks, office docs, and more from any directory",
5
- "license": "MIT",
6
- "type": "module",
7
- "bin": {
8
- "wiki-viewer": "bin/wiki-viewer.js",
9
- "wiki-viewer-lite": "bin/wiki-viewer-lite.js"
10
- },
11
- "files": [
12
- "bin",
13
- ".next/standalone"
14
- ],
15
- "scripts": {
16
- "dev": "next dev",
17
- "dev:https": "next dev --experimental-https",
18
- "build": "next build",
19
- "start": "next start",
20
- "wiki": "node bin/wiki-viewer.js",
21
- "postbuild": "node bin/postbuild.js",
22
- "prepublishOnly": "npm run build",
23
- "prepack": "node -e \"require('fs').existsSync('.next/standalone/server.js')||(console.error('ERROR: .next/standalone/server.js missing, run pnpm build before publishing'),process.exit(1))\"",
24
- "test": "node scripts/test-floor.mjs",
25
- "test:raw": "tsx --import ./src/tests/proof/preload.ts --test src/tests/proof/*.test.ts"
26
- },
27
- "engines": {
28
- "node": ">=22.5.0"
29
- },
30
- "keywords": [
31
- "wiki",
32
- "markdown",
33
- "viewer",
34
- "notes",
35
- "local",
36
- "cli"
37
- ],
38
- "repository": {
39
- "type": "git",
40
- "url": "https://github.com/anh-chu/wiki-viewer.git"
41
- },
42
- "optionalDependencies": {
43
- "@vscode/ripgrep": "^1.18.0"
44
- },
45
- "dependencies": {
46
- "better-auth": "^1.6.12",
47
- "chokidar": "^5.0.0",
48
- "jszip": "^3.10.1",
49
- "kysely": "0.28.5",
50
- "next": "16.2.4",
51
- "pdfjs-dist": "5.4.296",
52
- "proper-lockfile": "^4.1.2",
53
- "react": "19.2.5",
54
- "react-dom": "19.2.5",
55
- "rehype-parse": "^9.0.1",
56
- "rehype-raw": "^7.0.0",
57
- "rehype-sanitize": "^6.0.0",
58
- "undici": "^8.3.0"
59
- },
60
- "devDependencies": {
61
- "@radix-ui/react-context-menu": "^2.2.16",
62
- "@radix-ui/react-dialog": "^1.1.15",
63
- "@radix-ui/react-dropdown-menu": "^2.1.16",
64
- "@radix-ui/react-label": "^2.1.8",
65
- "@radix-ui/react-popover": "^1.1.15",
66
- "@radix-ui/react-separator": "^1.1.8",
67
- "@radix-ui/react-slot": "^1.2.4",
68
- "@radix-ui/react-switch": "^1.2.6",
69
- "@radix-ui/react-tooltip": "^1.2.8",
70
- "@tailwindcss/typography": "^0.5.19",
71
- "@tiptap/core": "^3.22.5",
72
- "@tiptap/extension-bubble-menu": "^3.22.5",
73
- "@tiptap/extension-code-block-lowlight": "^3.22.5",
74
- "@tiptap/extension-image": "^3.22.5",
75
- "@tiptap/extension-link": "^3.22.5",
76
- "@tiptap/extension-placeholder": "^3.22.5",
77
- "@tiptap/extension-subscript": "^3.22.5",
78
- "@tiptap/extension-superscript": "^3.22.5",
79
- "@tiptap/extension-table": "^3.22.5",
80
- "@tiptap/extension-table-cell": "^3.22.5",
81
- "@tiptap/extension-table-header": "^3.22.5",
82
- "@tiptap/extension-table-row": "^3.22.5",
83
- "@tiptap/extension-task-item": "^3.22.5",
84
- "@tiptap/extension-task-list": "^3.22.5",
85
- "@tiptap/extension-text-align": "^3.22.5",
86
- "@tiptap/extension-underline": "^3.22.5",
87
- "@tiptap/pm": "^3.22.5",
88
- "@tiptap/react": "^3.22.5",
89
- "@tiptap/starter-kit": "^3.22.5",
90
- "@tiptap/suggestion": "^3.22.5",
91
- "@types/mdast": "^4.0.4",
92
- "@types/node": "^22.15.0",
93
- "@types/proper-lockfile": "^4.1.4",
94
- "@types/react": "19.2.14",
95
- "@types/react-dom": "19.2.3",
96
- "@types/turndown": "^5.0.6",
97
- "autoprefixer": "^10.4.20",
98
- "class-variance-authority": "^0.7.1",
99
- "clsx": "^2.1.1",
100
- "cmdk": "^1.1.1",
101
- "docx-preview": "^0.3.7",
102
- "hast-util-to-html": "^9.0.5",
103
- "highlight.js": "^11.11.1",
104
- "lowlight": "^3.3.0",
105
- "lucide-react": "^0.525.0",
106
- "mermaid": "^11.14.0",
107
- "next-themes": "^0.4.6",
108
- "postcss": "^8.5.6",
109
- "pptx-preview": "^1.0.7",
110
- "rehype-stringify": "^10.0.1",
111
- "remark-gfm": "^4.0.1",
112
- "remark-parse": "^11.0.0",
113
- "remark-rehype": "^11.1.2",
114
- "remark-stringify": "^11.0.0",
115
- "sonner": "^2.0.7",
116
- "tailwind-merge": "^3.3.0",
117
- "tailwindcss": "^3.4.17",
118
- "tsx": "^4.22.3",
119
- "turndown": "^7.2.4",
120
- "turndown-plugin-gfm": "^1.0.2",
121
- "typescript": "^5.8.0",
122
- "unified": "^11.0.5",
123
- "xlsx": "^0.18.5",
124
- "zustand": "^5.0.12"
125
- },
126
- "pnpm": {
127
- "overrides": {
128
- "kysely": "0.28.5"
129
- }
130
- }
2
+ "name": "wiki-viewer",
3
+ "version": "2.9.2",
4
+ "description": "Local file viewer and wiki \u2014 view markdown, HTML, PDFs, notebooks, office docs, and more from any directory",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "bin": {
8
+ "wiki-viewer": "bin/wiki-viewer.js",
9
+ "wiki-viewer-lite": "bin/wiki-viewer-lite.js"
10
+ },
11
+ "files": [
12
+ "bin",
13
+ ".next/standalone"
14
+ ],
15
+ "scripts": {
16
+ "dev": "next dev",
17
+ "dev:https": "next dev --experimental-https",
18
+ "build": "next build",
19
+ "start": "next start",
20
+ "wiki": "node bin/wiki-viewer.js",
21
+ "postbuild": "node bin/postbuild.js",
22
+ "prepublishOnly": "npm run build",
23
+ "prepack": "node -e \"require('fs').existsSync('.next/standalone/server.js')||(console.error('ERROR: .next/standalone/server.js missing, run pnpm build before publishing'),process.exit(1))\"",
24
+ "test": "node scripts/test-floor.mjs",
25
+ "test:raw": "tsx --import ./src/tests/proof/preload.ts --test src/tests/proof/*.test.ts"
26
+ },
27
+ "engines": {
28
+ "node": ">=22.5.0"
29
+ },
30
+ "keywords": [
31
+ "wiki",
32
+ "markdown",
33
+ "viewer",
34
+ "notes",
35
+ "local",
36
+ "cli"
37
+ ],
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/anh-chu/wiki-viewer.git"
41
+ },
42
+ "optionalDependencies": {
43
+ "@vscode/ripgrep": "^1.18.0"
44
+ },
45
+ "dependencies": {
46
+ "better-auth": "^1.6.12",
47
+ "chokidar": "^5.0.0",
48
+ "jszip": "^3.10.1",
49
+ "kysely": "0.28.5",
50
+ "next": "16.2.4",
51
+ "pdfjs-dist": "5.4.296",
52
+ "proper-lockfile": "^4.1.2",
53
+ "react": "19.2.5",
54
+ "react-dom": "19.2.5",
55
+ "rehype-parse": "^9.0.1",
56
+ "rehype-raw": "^7.0.0",
57
+ "rehype-sanitize": "^6.0.0",
58
+ "undici": "^8.3.0"
59
+ },
60
+ "devDependencies": {
61
+ "@radix-ui/react-context-menu": "^2.2.16",
62
+ "@radix-ui/react-dialog": "^1.1.15",
63
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
64
+ "@radix-ui/react-label": "^2.1.8",
65
+ "@radix-ui/react-popover": "^1.1.15",
66
+ "@radix-ui/react-separator": "^1.1.8",
67
+ "@radix-ui/react-slot": "^1.2.4",
68
+ "@radix-ui/react-switch": "^1.2.6",
69
+ "@radix-ui/react-tooltip": "^1.2.8",
70
+ "@tailwindcss/typography": "^0.5.19",
71
+ "@tiptap/core": "^3.22.5",
72
+ "@tiptap/extension-bubble-menu": "^3.22.5",
73
+ "@tiptap/extension-code-block-lowlight": "^3.22.5",
74
+ "@tiptap/extension-image": "^3.22.5",
75
+ "@tiptap/extension-link": "^3.22.5",
76
+ "@tiptap/extension-placeholder": "^3.22.5",
77
+ "@tiptap/extension-subscript": "^3.22.5",
78
+ "@tiptap/extension-superscript": "^3.22.5",
79
+ "@tiptap/extension-table": "^3.22.5",
80
+ "@tiptap/extension-table-cell": "^3.22.5",
81
+ "@tiptap/extension-table-header": "^3.22.5",
82
+ "@tiptap/extension-table-row": "^3.22.5",
83
+ "@tiptap/extension-task-item": "^3.22.5",
84
+ "@tiptap/extension-task-list": "^3.22.5",
85
+ "@tiptap/extension-text-align": "^3.22.5",
86
+ "@tiptap/extension-underline": "^3.22.5",
87
+ "@tiptap/pm": "^3.22.5",
88
+ "@tiptap/react": "^3.22.5",
89
+ "@tiptap/starter-kit": "^3.22.5",
90
+ "@tiptap/suggestion": "^3.22.5",
91
+ "@types/mdast": "^4.0.4",
92
+ "@types/node": "^22.15.0",
93
+ "@types/proper-lockfile": "^4.1.4",
94
+ "@types/react": "19.2.14",
95
+ "@types/react-dom": "19.2.3",
96
+ "@types/turndown": "^5.0.6",
97
+ "autoprefixer": "^10.4.20",
98
+ "class-variance-authority": "^0.7.1",
99
+ "clsx": "^2.1.1",
100
+ "cmdk": "^1.1.1",
101
+ "docx-preview": "^0.3.7",
102
+ "hast-util-to-html": "^9.0.5",
103
+ "highlight.js": "^11.11.1",
104
+ "lowlight": "^3.3.0",
105
+ "lucide-react": "^0.525.0",
106
+ "mermaid": "^11.14.0",
107
+ "next-themes": "^0.4.6",
108
+ "postcss": "^8.5.6",
109
+ "pptx-preview": "^1.0.7",
110
+ "rehype-stringify": "^10.0.1",
111
+ "remark-gfm": "^4.0.1",
112
+ "remark-parse": "^11.0.0",
113
+ "remark-rehype": "^11.1.2",
114
+ "remark-stringify": "^11.0.0",
115
+ "sonner": "^2.0.7",
116
+ "tailwind-merge": "^3.3.0",
117
+ "tailwindcss": "^3.4.17",
118
+ "tsx": "^4.22.3",
119
+ "turndown": "^7.2.4",
120
+ "turndown-plugin-gfm": "^1.0.2",
121
+ "typescript": "^5.8.0",
122
+ "unified": "^11.0.5",
123
+ "xlsx": "^0.18.5",
124
+ "zustand": "^5.0.12"
125
+ },
126
+ "pnpm": {
127
+ "overrides": {
128
+ "kysely": "0.28.5"
129
+ }
130
+ }
131
131
  }
@@ -15,7 +15,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
15
15
  const hostname = process.env.HOSTNAME || '0.0.0.0'
16
16
 
17
17
  let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
18
- const nextConfig = {"env":{"NEXT_PUBLIC_APP_VERSION":"2.9.0"},"webpack":null,"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":false,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/sil/wiki-viewer","allowedDevOrigins":["devvm"],"cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":false,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"partialFallbacks":false,"dynamicOnHover":false,"varyParams":false,"prefetchInlining":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","turbopack":{"root":"/home/sil/wiki-viewer"},"distDirRoot":".next"}
18
+ const nextConfig = {"env":{"NEXT_PUBLIC_APP_VERSION":"2.9.2"},"webpack":null,"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/sil/wiki-viewer","allowedDevOrigins":["devvm"],"cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":false,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"partialFallbacks":false,"dynamicOnHover":false,"varyParams":false,"prefetchInlining":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","turbopack":{"root":"/home/sil/wiki-viewer"},"distDirRoot":".next"}
19
19
 
20
20
  process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
21
21
 
package/bin/postbuild.js CHANGED
@@ -216,8 +216,30 @@ if (existsSync(pnpmStore)) {
216
216
  process.exit(1);
217
217
  }
218
218
 
219
+ // sharp is an optional dependency of next, required lazily by the
220
+ // /_next/image optimizer (next/dist/server/image-optimizer.js does
221
+ // `_sharp = require('sharp')` inside a function, never at module scope).
222
+ // This app imports next/image nowhere and sets images.unoptimized, so that
223
+ // code path is unreachable and sharp is dead weight.
224
+ //
225
+ // Excluding it matters for more than the ~11MB: @img/sharp-<platform> is a
226
+ // prebuilt .node binary chosen for the *publishing* machine. Because publish
227
+ // is pack+tar with no install step, that binary would be frozen into the
228
+ // tarball and fail to load on any other OS/arch. Dropping it leaves the
229
+ // package free of platform-locked native binaries.
230
+ //
231
+ // Note this is the same failure mode that shipped a Node-22-ABI
232
+ // better_sqlite3.node in 2.8.0; there the axis was ABI, here it is platform.
233
+ const isExcluded = (name) => name === "sharp" || name.startsWith("@img/");
234
+
219
235
  let hoisted = 0;
236
+ let excluded = 0;
220
237
  for (const [name, src] of found) {
238
+ if (isExcluded(name)) {
239
+ excluded++;
240
+ continue;
241
+ }
242
+
221
243
  const dst = path.join(nodeModules, name);
222
244
 
223
245
  // lstat, not existsSync: a symlink whose target has already been hoisted
@@ -234,8 +256,16 @@ if (existsSync(pnpmStore)) {
234
256
  hoisted++;
235
257
  }
236
258
 
259
+ // Skipping the hoist above leaves these inside .pnpm, which is removed below.
260
+ // These removals cover the other placement: a copy Next wrote directly to the
261
+ // top level rather than through the store.
262
+ for (const rel of ["sharp", "@img"]) {
263
+ rmSync(path.join(nodeModules, rel), { recursive: true, force: true });
264
+ }
265
+
237
266
  rmSync(pnpmStore, { recursive: true, force: true });
238
267
  console.log(`postbuild: hoisted ${hoisted} package(s) out of the pnpm store`);
268
+ console.log(`postbuild: excluded ${excluded} unreachable native package(s) (sharp/@img)`);
239
269
 
240
270
  // Nothing may resolve through a symlink after this point, or npm pack will
241
271
  // drop it again and the failure only surfaces on a user's machine.
package/package.json CHANGED
@@ -1,131 +1,124 @@
1
1
  {
2
- "name": "wiki-viewer",
3
- "version": "2.9.0",
4
- "description": "Local file viewer and wiki — view markdown, HTML, PDFs, notebooks, office docs, and more from any directory",
5
- "license": "MIT",
6
- "type": "module",
7
- "bin": {
8
- "wiki-viewer": "bin/wiki-viewer.js",
9
- "wiki-viewer-lite": "bin/wiki-viewer-lite.js"
10
- },
11
- "files": [
12
- "bin",
13
- ".next/standalone"
14
- ],
15
- "scripts": {
16
- "dev": "next dev",
17
- "dev:https": "next dev --experimental-https",
18
- "build": "next build",
19
- "start": "next start",
20
- "wiki": "node bin/wiki-viewer.js",
21
- "postbuild": "node bin/postbuild.js",
22
- "prepublishOnly": "npm run build",
23
- "prepack": "node -e \"require('fs').existsSync('.next/standalone/server.js')||(console.error('ERROR: .next/standalone/server.js missing, run pnpm build before publishing'),process.exit(1))\"",
24
- "test": "node scripts/test-floor.mjs",
25
- "test:raw": "tsx --import ./src/tests/proof/preload.ts --test src/tests/proof/*.test.ts"
26
- },
27
- "engines": {
28
- "node": ">=22.5.0"
29
- },
30
- "keywords": [
31
- "wiki",
32
- "markdown",
33
- "viewer",
34
- "notes",
35
- "local",
36
- "cli"
37
- ],
38
- "repository": {
39
- "type": "git",
40
- "url": "https://github.com/anh-chu/wiki-viewer.git"
41
- },
42
- "optionalDependencies": {
43
- "@vscode/ripgrep": "^1.18.0"
44
- },
45
- "dependencies": {
46
- "better-auth": "^1.6.12",
47
- "chokidar": "^5.0.0",
48
- "jszip": "^3.10.1",
49
- "kysely": "0.28.5",
50
- "next": "16.2.4",
51
- "pdfjs-dist": "5.4.296",
52
- "proper-lockfile": "^4.1.2",
53
- "react": "19.2.5",
54
- "react-dom": "19.2.5",
55
- "rehype-parse": "^9.0.1",
56
- "rehype-raw": "^7.0.0",
57
- "rehype-sanitize": "^6.0.0",
58
- "undici": "^8.3.0"
59
- },
60
- "devDependencies": {
61
- "@radix-ui/react-context-menu": "^2.2.16",
62
- "@radix-ui/react-dialog": "^1.1.15",
63
- "@radix-ui/react-dropdown-menu": "^2.1.16",
64
- "@radix-ui/react-label": "^2.1.8",
65
- "@radix-ui/react-popover": "^1.1.15",
66
- "@radix-ui/react-separator": "^1.1.8",
67
- "@radix-ui/react-slot": "^1.2.4",
68
- "@radix-ui/react-switch": "^1.2.6",
69
- "@radix-ui/react-tooltip": "^1.2.8",
70
- "@tailwindcss/typography": "^0.5.19",
71
- "@tiptap/core": "^3.22.5",
72
- "@tiptap/extension-bubble-menu": "^3.22.5",
73
- "@tiptap/extension-code-block-lowlight": "^3.22.5",
74
- "@tiptap/extension-image": "^3.22.5",
75
- "@tiptap/extension-link": "^3.22.5",
76
- "@tiptap/extension-placeholder": "^3.22.5",
77
- "@tiptap/extension-subscript": "^3.22.5",
78
- "@tiptap/extension-superscript": "^3.22.5",
79
- "@tiptap/extension-table": "^3.22.5",
80
- "@tiptap/extension-table-cell": "^3.22.5",
81
- "@tiptap/extension-table-header": "^3.22.5",
82
- "@tiptap/extension-table-row": "^3.22.5",
83
- "@tiptap/extension-task-item": "^3.22.5",
84
- "@tiptap/extension-task-list": "^3.22.5",
85
- "@tiptap/extension-text-align": "^3.22.5",
86
- "@tiptap/extension-underline": "^3.22.5",
87
- "@tiptap/pm": "^3.22.5",
88
- "@tiptap/react": "^3.22.5",
89
- "@tiptap/starter-kit": "^3.22.5",
90
- "@tiptap/suggestion": "^3.22.5",
91
- "@types/mdast": "^4.0.4",
92
- "@types/node": "^22.15.0",
93
- "@types/proper-lockfile": "^4.1.4",
94
- "@types/react": "19.2.14",
95
- "@types/react-dom": "19.2.3",
96
- "@types/turndown": "^5.0.6",
97
- "autoprefixer": "^10.4.20",
98
- "class-variance-authority": "^0.7.1",
99
- "clsx": "^2.1.1",
100
- "cmdk": "^1.1.1",
101
- "docx-preview": "^0.3.7",
102
- "hast-util-to-html": "^9.0.5",
103
- "highlight.js": "^11.11.1",
104
- "lowlight": "^3.3.0",
105
- "lucide-react": "^0.525.0",
106
- "mermaid": "^11.14.0",
107
- "next-themes": "^0.4.6",
108
- "postcss": "^8.5.6",
109
- "pptx-preview": "^1.0.7",
110
- "rehype-stringify": "^10.0.1",
111
- "remark-gfm": "^4.0.1",
112
- "remark-parse": "^11.0.0",
113
- "remark-rehype": "^11.1.2",
114
- "remark-stringify": "^11.0.0",
115
- "sonner": "^2.0.7",
116
- "tailwind-merge": "^3.3.0",
117
- "tailwindcss": "^3.4.17",
118
- "tsx": "^4.22.3",
119
- "turndown": "^7.2.4",
120
- "turndown-plugin-gfm": "^1.0.2",
121
- "typescript": "^5.8.0",
122
- "unified": "^11.0.5",
123
- "xlsx": "^0.18.5",
124
- "zustand": "^5.0.12"
125
- },
126
- "pnpm": {
127
- "overrides": {
128
- "kysely": "0.28.5"
129
- }
130
- }
131
- }
2
+ "name": "wiki-viewer",
3
+ "version": "2.9.2",
4
+ "description": "Local file viewer and wiki — view markdown, HTML, PDFs, notebooks, office docs, and more from any directory",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "bin": {
8
+ "wiki-viewer": "bin/wiki-viewer.js",
9
+ "wiki-viewer-lite": "bin/wiki-viewer-lite.js"
10
+ },
11
+ "files": [
12
+ "bin",
13
+ ".next/standalone"
14
+ ],
15
+ "engines": {
16
+ "node": ">=22.5.0"
17
+ },
18
+ "keywords": [
19
+ "wiki",
20
+ "markdown",
21
+ "viewer",
22
+ "notes",
23
+ "local",
24
+ "cli"
25
+ ],
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "https://github.com/anh-chu/wiki-viewer.git"
29
+ },
30
+ "optionalDependencies": {
31
+ "@vscode/ripgrep": "^1.18.0"
32
+ },
33
+ "dependencies": {
34
+ "better-auth": "^1.6.12",
35
+ "chokidar": "^5.0.0",
36
+ "jszip": "^3.10.1",
37
+ "kysely": "0.28.5",
38
+ "next": "16.2.4",
39
+ "pdfjs-dist": "5.4.296",
40
+ "proper-lockfile": "^4.1.2",
41
+ "react": "19.2.5",
42
+ "react-dom": "19.2.5",
43
+ "rehype-parse": "^9.0.1",
44
+ "rehype-raw": "^7.0.0",
45
+ "rehype-sanitize": "^6.0.0",
46
+ "undici": "^8.3.0"
47
+ },
48
+ "devDependencies": {
49
+ "@radix-ui/react-context-menu": "^2.2.16",
50
+ "@radix-ui/react-dialog": "^1.1.15",
51
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
52
+ "@radix-ui/react-label": "^2.1.8",
53
+ "@radix-ui/react-popover": "^1.1.15",
54
+ "@radix-ui/react-separator": "^1.1.8",
55
+ "@radix-ui/react-slot": "^1.2.4",
56
+ "@radix-ui/react-switch": "^1.2.6",
57
+ "@radix-ui/react-tooltip": "^1.2.8",
58
+ "@tailwindcss/typography": "^0.5.19",
59
+ "@tiptap/core": "^3.22.5",
60
+ "@tiptap/extension-bubble-menu": "^3.22.5",
61
+ "@tiptap/extension-code-block-lowlight": "^3.22.5",
62
+ "@tiptap/extension-image": "^3.22.5",
63
+ "@tiptap/extension-link": "^3.22.5",
64
+ "@tiptap/extension-placeholder": "^3.22.5",
65
+ "@tiptap/extension-subscript": "^3.22.5",
66
+ "@tiptap/extension-superscript": "^3.22.5",
67
+ "@tiptap/extension-table": "^3.22.5",
68
+ "@tiptap/extension-table-cell": "^3.22.5",
69
+ "@tiptap/extension-table-header": "^3.22.5",
70
+ "@tiptap/extension-table-row": "^3.22.5",
71
+ "@tiptap/extension-task-item": "^3.22.5",
72
+ "@tiptap/extension-task-list": "^3.22.5",
73
+ "@tiptap/extension-text-align": "^3.22.5",
74
+ "@tiptap/extension-underline": "^3.22.5",
75
+ "@tiptap/pm": "^3.22.5",
76
+ "@tiptap/react": "^3.22.5",
77
+ "@tiptap/starter-kit": "^3.22.5",
78
+ "@tiptap/suggestion": "^3.22.5",
79
+ "@types/mdast": "^4.0.4",
80
+ "@types/node": "^22.15.0",
81
+ "@types/proper-lockfile": "^4.1.4",
82
+ "@types/react": "19.2.14",
83
+ "@types/react-dom": "19.2.3",
84
+ "@types/turndown": "^5.0.6",
85
+ "autoprefixer": "^10.4.20",
86
+ "class-variance-authority": "^0.7.1",
87
+ "clsx": "^2.1.1",
88
+ "cmdk": "^1.1.1",
89
+ "docx-preview": "^0.3.7",
90
+ "hast-util-to-html": "^9.0.5",
91
+ "highlight.js": "^11.11.1",
92
+ "lowlight": "^3.3.0",
93
+ "lucide-react": "^0.525.0",
94
+ "mermaid": "^11.14.0",
95
+ "next-themes": "^0.4.6",
96
+ "postcss": "^8.5.6",
97
+ "pptx-preview": "^1.0.7",
98
+ "rehype-stringify": "^10.0.1",
99
+ "remark-gfm": "^4.0.1",
100
+ "remark-parse": "^11.0.0",
101
+ "remark-rehype": "^11.1.2",
102
+ "remark-stringify": "^11.0.0",
103
+ "sonner": "^2.0.7",
104
+ "tailwind-merge": "^3.3.0",
105
+ "tailwindcss": "^3.4.17",
106
+ "tsx": "^4.22.3",
107
+ "turndown": "^7.2.4",
108
+ "turndown-plugin-gfm": "^1.0.2",
109
+ "typescript": "^5.8.0",
110
+ "unified": "^11.0.5",
111
+ "xlsx": "^0.18.5",
112
+ "zustand": "^5.0.12"
113
+ },
114
+ "scripts": {
115
+ "dev": "next dev",
116
+ "dev:https": "next dev --experimental-https",
117
+ "build": "next build",
118
+ "start": "next start",
119
+ "wiki": "node bin/wiki-viewer.js",
120
+ "postbuild": "node bin/postbuild.js",
121
+ "test": "node scripts/test-floor.mjs",
122
+ "test:raw": "tsx --import ./src/tests/proof/preload.ts --test src/tests/proof/*.test.ts"
123
+ }
124
+ }