@silicajs/next 0.2.1 → 0.3.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.
@@ -1,7 +1,32 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { createRequire } from "node:module";
4
+ import { fileURLToPath } from "node:url";
1
5
  import type { NextConfig } from "next";
6
+ /* __SILICA_CONFIG_IMPORT__ */
2
7
 
3
- const nextConfig: NextConfig = {
8
+ const require = createRequire(import.meta.url);
9
+ const nextRoot = path.dirname(fileURLToPath(import.meta.url));
10
+ const silicaRoot = path.resolve(nextRoot, "..");
11
+ const vaultMetadata = readVaultMetadata(path.join(silicaRoot, "vault.db"));
12
+ type VaultConfig = {
13
+ render?: { cache?: { storage?: "memory" | "filesystem" } };
14
+ };
15
+ const resolvedConfig = parseJson<VaultConfig>(vaultMetadata.configJson);
16
+ const useFilesystemCache = resolvedConfig?.render?.cache?.storage !== "memory";
17
+
18
+ const baseNextConfig: NextConfig = {
4
19
  cacheComponents: true,
20
+ ...(useFilesystemCache
21
+ ? {
22
+ cacheHandlers: {
23
+ default: require.resolve("./cache-handlers/filesystem-cache.js"),
24
+ remote: require.resolve("./cache-handlers/filesystem-cache.js"),
25
+ },
26
+ }
27
+ : {}),
28
+ generateBuildId: async () => vaultMetadata.renderEnvironmentHash ?? "silica",
29
+ deploymentId: process.env.SILICA_DEPLOYMENT_ID,
5
30
  output: "standalone",
6
31
  transpilePackages: [
7
32
  "@silicajs/core",
@@ -14,15 +39,7 @@ const nextConfig: NextConfig = {
14
39
  ],
15
40
  serverExternalPackages: ["better-sqlite3"],
16
41
  outputFileTracingIncludes: {
17
- "/*": [
18
- "../content/**/*",
19
- "../manifest.json",
20
- "../navigation.json",
21
- "../graph.json",
22
- "../config.json",
23
- "../search.db",
24
- "../build-id.txt",
25
- ],
42
+ "/*": ["../content/**/*", "../vault.db"],
26
43
  },
27
44
  experimental: {
28
45
  externalDir: true,
@@ -30,4 +47,30 @@ const nextConfig: NextConfig = {
30
47
  },
31
48
  };
32
49
 
50
+ function readVaultMetadata(databasePath: string): {
51
+ renderEnvironmentHash?: string;
52
+ configJson?: string;
53
+ } {
54
+ if (!fs.existsSync(databasePath)) return {};
55
+ const Database = require("better-sqlite3") as typeof import("better-sqlite3");
56
+ const db = new Database(databasePath, {
57
+ fileMustExist: true,
58
+ readonly: true,
59
+ });
60
+ try {
61
+ const rows = db
62
+ .prepare("SELECT key, value FROM vault_metadata")
63
+ .all() as Array<{ key: string; value: string }>;
64
+ return Object.fromEntries(rows.map((row) => [row.key, row.value]));
65
+ } finally {
66
+ db.close();
67
+ }
68
+ }
69
+
70
+ function parseJson<T>(value: string | undefined): T | undefined {
71
+ return value ? (JSON.parse(value) as T) : undefined;
72
+ }
73
+
74
+ /* __SILICA_CONFIG_OVERRIDE__ */
75
+
33
76
  export default nextConfig;
@@ -5,7 +5,7 @@ type TemplateFile = {
5
5
  content: string;
6
6
  };
7
7
  declare function getSilicaTemplates(): TemplateFile[];
8
- declare function nextConfigTemplate(): string;
8
+ declare function nextConfigTemplate(userConfigImport?: string): string;
9
9
  declare function themeModuleTemplate(themeValue: unknown): string;
10
10
  declare function proxyTemplate(config: ResolvedSilicaConfig): string;
11
11
  declare function tsconfigTemplate(hasUserTsconfig: boolean): string;
package/dist/templates.js CHANGED
@@ -7,8 +7,15 @@ const templateFilesRoot = fileURLToPath(
7
7
  function getSilicaTemplates() {
8
8
  return readTemplateDirectory(path.join(templateFilesRoot, "generated-app"));
9
9
  }
10
- function nextConfigTemplate() {
11
- return readTemplateFile("next.config.ts");
10
+ function nextConfigTemplate(userConfigImport) {
11
+ const template = readTemplateFile("next.config.ts");
12
+ return template.replace(
13
+ "/* __SILICA_CONFIG_IMPORT__ */",
14
+ userConfigImport ? `import { createJiti } from "jiti";` : ""
15
+ ).replace(
16
+ "/* __SILICA_CONFIG_OVERRIDE__ */",
17
+ nextConfigOverride(userConfigImport)
18
+ );
12
19
  }
13
20
  function themeModuleTemplate(themeValue) {
14
21
  return readTemplateFile("silica-theme.ts").replace(
@@ -51,6 +58,65 @@ function packageJsonTemplate() {
51
58
  function readTemplateFile(filename) {
52
59
  return fs.readFileSync(path.join(templateFilesRoot, filename), "utf8");
53
60
  }
61
+ function nextConfigOverride(userConfigImport) {
62
+ if (!userConfigImport) return "const nextConfig = baseNextConfig;";
63
+ return `type SilicaNextConfigOverride =
64
+ | NextConfig
65
+ | ((base: NextConfig) => NextConfig);
66
+
67
+ type SilicaUserConfig = {
68
+ default?: { nextConfig?: SilicaNextConfigOverride };
69
+ nextConfig?: SilicaNextConfigOverride;
70
+ };
71
+
72
+ const silicaUserConfig = loadSilicaUserConfig();
73
+ const silicaNextConfig = silicaUserConfig.nextConfig;
74
+
75
+ const nextConfig =
76
+ typeof silicaNextConfig === "function"
77
+ ? silicaNextConfig(baseNextConfig)
78
+ : mergeNextConfig(baseNextConfig, silicaNextConfig);
79
+
80
+ function loadSilicaUserConfig(): { nextConfig?: SilicaNextConfigOverride } {
81
+ const jiti = createJiti(import.meta.url, { interopDefault: true });
82
+ const loaded = jiti(${JSON.stringify(userConfigImport)}) as SilicaUserConfig;
83
+ return loaded.default ?? loaded;
84
+ }
85
+
86
+ function mergeNextConfig(
87
+ base: NextConfig,
88
+ override: NextConfig | undefined,
89
+ ): NextConfig {
90
+ if (!override) return base;
91
+ return deepMerge(
92
+ base as Record<string, unknown>,
93
+ override as Record<string, unknown>,
94
+ ) as NextConfig;
95
+ }
96
+
97
+ function deepMerge(
98
+ base: Record<string, unknown>,
99
+ override: Record<string, unknown>,
100
+ ): Record<string, unknown> {
101
+ const merged = { ...base };
102
+ for (const [key, value] of Object.entries(override)) {
103
+ const baseValue = merged[key];
104
+ merged[key] =
105
+ isPlainObject(baseValue) && isPlainObject(value)
106
+ ? deepMerge(baseValue, value)
107
+ : value;
108
+ }
109
+ return merged;
110
+ }
111
+
112
+ function isPlainObject(value: unknown): value is Record<string, unknown> {
113
+ return (
114
+ typeof value === "object" &&
115
+ value !== null &&
116
+ !Array.isArray(value)
117
+ );
118
+ }`;
119
+ }
54
120
  function resolveThemeSpecifier(themeValue) {
55
121
  const themeName = typeof themeValue === "object" && themeValue !== null && "name" in themeValue ? String(themeValue.name ?? "default") : typeof themeValue === "string" ? themeValue : "default";
56
122
  if (!themeName || themeName === "default") return "@silicajs/theme-amethyst";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/templates.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { ResolvedSilicaConfig } from \"@silicajs/core/runtime\";\n\nexport type TemplateFile = {\n path: string;\n content: string;\n};\n\nconst templateFilesRoot = fileURLToPath(\n new URL(\"./template-files\", import.meta.url),\n);\n\nexport function getSilicaTemplates(): TemplateFile[] {\n return readTemplateDirectory(path.join(templateFilesRoot, \"generated-app\"));\n}\n\nexport function nextConfigTemplate(): string {\n return readTemplateFile(\"next.config.ts\");\n}\n\nexport function themeModuleTemplate(themeValue: unknown): string {\n return readTemplateFile(\"silica-theme.ts\").replace(\n '\"{{themeSpecifier}}\"',\n JSON.stringify(resolveThemeSpecifier(themeValue)),\n );\n}\n\nexport function proxyTemplate(config: ResolvedSilicaConfig): string {\n return `import type { NextRequest } from \"next/server\";\nimport { silicaProxy } from \"@silicajs/next/proxy\";\n\nconst silicaProxyConfig = ${JSON.stringify(\n {\n authEnabled: Boolean(config.auth),\n allowedDomains: config.auth?.allowedDomains ?? [],\n allowedEmails: config.auth?.allowedEmails ?? [],\n publicPaths: config.logo ? [config.logo] : [],\n },\n null,\n 2,\n )} as const;\n\nexport function proxy(request: NextRequest) {\n return silicaProxy(request, silicaProxyConfig);\n}\n\nexport const config = {\n matcher: [\"/((?!_next/static|_next/image|favicon.ico).*)\"],\n};\n`;\n}\n\nexport function tsconfigTemplate(hasUserTsconfig: boolean): string {\n const template = readTemplateFile(\"tsconfig.json\");\n const rendered = hasUserTsconfig\n ? template.replaceAll(\"{{extends}}\", \"../../tsconfig.json\")\n : template.replace(' \"extends\": \"{{extends}}\",\\n', \"\");\n return rendered.trimEnd();\n}\n\nexport function packageJsonTemplate(): string {\n return readTemplateFile(\"package.json\");\n}\n\nfunction readTemplateFile(filename: string): string {\n return fs.readFileSync(path.join(templateFilesRoot, filename), \"utf8\");\n}\n\nfunction resolveThemeSpecifier(themeValue: unknown): string {\n const themeName =\n typeof themeValue === \"object\" &&\n themeValue !== null &&\n \"name\" in themeValue\n ? String((themeValue as { name?: string }).name ?? \"default\")\n : typeof themeValue === \"string\"\n ? themeValue\n : \"default\";\n\n if (!themeName || themeName === \"default\") return \"@silicajs/theme-amethyst\";\n if (themeName.startsWith(\".\"))\n return `../../${themeName.replace(/^\\.\\//, \"\")}`;\n return themeName;\n}\n\nfunction readTemplateDirectory(root: string, current = root): TemplateFile[] {\n const entries = fs\n .readdirSync(current, { withFileTypes: true })\n .sort((left, right) => left.name.localeCompare(right.name));\n\n return entries.flatMap((entry) => {\n const absolutePath = path.join(current, entry.name);\n if (entry.isDirectory()) return readTemplateDirectory(root, absolutePath);\n if (!entry.isFile()) return [];\n\n return {\n path: path.relative(root, absolutePath).split(path.sep).join(\"/\"),\n content: fs.readFileSync(absolutePath, \"utf8\"),\n };\n });\n}\n"],"mappings":"AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAQ9B,MAAM,oBAAoB;AAAA,EACxB,IAAI,IAAI,oBAAoB,YAAY,GAAG;AAC7C;AAEO,SAAS,qBAAqC;AACnD,SAAO,sBAAsB,KAAK,KAAK,mBAAmB,eAAe,CAAC;AAC5E;AAEO,SAAS,qBAA6B;AAC3C,SAAO,iBAAiB,gBAAgB;AAC1C;AAEO,SAAS,oBAAoB,YAA6B;AAC/D,SAAO,iBAAiB,iBAAiB,EAAE;AAAA,IACzC;AAAA,IACA,KAAK,UAAU,sBAAsB,UAAU,CAAC;AAAA,EAClD;AACF;AAEO,SAAS,cAAc,QAAsC;AAClE,SAAO;AAAA;AAAA;AAAA,4BAGmB,KAAK;AAAA,IAC7B;AAAA,MACE,aAAa,QAAQ,OAAO,IAAI;AAAA,MAChC,gBAAgB,OAAO,MAAM,kBAAkB,CAAC;AAAA,MAChD,eAAe,OAAO,MAAM,iBAAiB,CAAC;AAAA,MAC9C,aAAa,OAAO,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;AAAA,IAC9C;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUH;AAEO,SAAS,iBAAiB,iBAAkC;AACjE,QAAM,WAAW,iBAAiB,eAAe;AACjD,QAAM,WAAW,kBACb,SAAS,WAAW,eAAe,qBAAqB,IACxD,SAAS,QAAQ,iCAAiC,EAAE;AACxD,SAAO,SAAS,QAAQ;AAC1B;AAEO,SAAS,sBAA8B;AAC5C,SAAO,iBAAiB,cAAc;AACxC;AAEA,SAAS,iBAAiB,UAA0B;AAClD,SAAO,GAAG,aAAa,KAAK,KAAK,mBAAmB,QAAQ,GAAG,MAAM;AACvE;AAEA,SAAS,sBAAsB,YAA6B;AAC1D,QAAM,YACJ,OAAO,eAAe,YACtB,eAAe,QACf,UAAU,aACN,OAAQ,WAAiC,QAAQ,SAAS,IAC1D,OAAO,eAAe,WACpB,aACA;AAER,MAAI,CAAC,aAAa,cAAc,UAAW,QAAO;AAClD,MAAI,UAAU,WAAW,GAAG;AAC1B,WAAO,SAAS,UAAU,QAAQ,SAAS,EAAE,CAAC;AAChD,SAAO;AACT;AAEA,SAAS,sBAAsB,MAAc,UAAU,MAAsB;AAC3E,QAAM,UAAU,GACb,YAAY,SAAS,EAAE,eAAe,KAAK,CAAC,EAC5C,KAAK,CAAC,MAAM,UAAU,KAAK,KAAK,cAAc,MAAM,IAAI,CAAC;AAE5D,SAAO,QAAQ,QAAQ,CAAC,UAAU;AAChC,UAAM,eAAe,KAAK,KAAK,SAAS,MAAM,IAAI;AAClD,QAAI,MAAM,YAAY,EAAG,QAAO,sBAAsB,MAAM,YAAY;AACxE,QAAI,CAAC,MAAM,OAAO,EAAG,QAAO,CAAC;AAE7B,WAAO;AAAA,MACL,MAAM,KAAK,SAAS,MAAM,YAAY,EAAE,MAAM,KAAK,GAAG,EAAE,KAAK,GAAG;AAAA,MAChE,SAAS,GAAG,aAAa,cAAc,MAAM;AAAA,IAC/C;AAAA,EACF,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../src/templates.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { ResolvedSilicaConfig } from \"@silicajs/core/runtime\";\n\nexport type TemplateFile = {\n path: string;\n content: string;\n};\n\nconst templateFilesRoot = fileURLToPath(\n new URL(\"./template-files\", import.meta.url),\n);\n\nexport function getSilicaTemplates(): TemplateFile[] {\n return readTemplateDirectory(path.join(templateFilesRoot, \"generated-app\"));\n}\n\nexport function nextConfigTemplate(userConfigImport?: string): string {\n const template = readTemplateFile(\"next.config.ts\");\n return template\n .replace(\n \"/* __SILICA_CONFIG_IMPORT__ */\",\n userConfigImport ? `import { createJiti } from \"jiti\";` : \"\",\n )\n .replace(\n \"/* __SILICA_CONFIG_OVERRIDE__ */\",\n nextConfigOverride(userConfigImport),\n );\n}\n\nexport function themeModuleTemplate(themeValue: unknown): string {\n return readTemplateFile(\"silica-theme.ts\").replace(\n '\"{{themeSpecifier}}\"',\n JSON.stringify(resolveThemeSpecifier(themeValue)),\n );\n}\n\nexport function proxyTemplate(config: ResolvedSilicaConfig): string {\n return `import type { NextRequest } from \"next/server\";\nimport { silicaProxy } from \"@silicajs/next/proxy\";\n\nconst silicaProxyConfig = ${JSON.stringify(\n {\n authEnabled: Boolean(config.auth),\n allowedDomains: config.auth?.allowedDomains ?? [],\n allowedEmails: config.auth?.allowedEmails ?? [],\n publicPaths: config.logo ? [config.logo] : [],\n },\n null,\n 2,\n )} as const;\n\nexport function proxy(request: NextRequest) {\n return silicaProxy(request, silicaProxyConfig);\n}\n\nexport const config = {\n matcher: [\"/((?!_next/static|_next/image|favicon.ico).*)\"],\n};\n`;\n}\n\nexport function tsconfigTemplate(hasUserTsconfig: boolean): string {\n const template = readTemplateFile(\"tsconfig.json\");\n const rendered = hasUserTsconfig\n ? template.replaceAll(\"{{extends}}\", \"../../tsconfig.json\")\n : template.replace(' \"extends\": \"{{extends}}\",\\n', \"\");\n return rendered.trimEnd();\n}\n\nexport function packageJsonTemplate(): string {\n return readTemplateFile(\"package.json\");\n}\n\nfunction readTemplateFile(filename: string): string {\n return fs.readFileSync(path.join(templateFilesRoot, filename), \"utf8\");\n}\n\nfunction nextConfigOverride(userConfigImport: string | undefined): string {\n if (!userConfigImport) return \"const nextConfig = baseNextConfig;\";\n\n return `type SilicaNextConfigOverride =\n | NextConfig\n | ((base: NextConfig) => NextConfig);\n\ntype SilicaUserConfig = {\n default?: { nextConfig?: SilicaNextConfigOverride };\n nextConfig?: SilicaNextConfigOverride;\n};\n\nconst silicaUserConfig = loadSilicaUserConfig();\nconst silicaNextConfig = silicaUserConfig.nextConfig;\n\nconst nextConfig =\n typeof silicaNextConfig === \"function\"\n ? silicaNextConfig(baseNextConfig)\n : mergeNextConfig(baseNextConfig, silicaNextConfig);\n\nfunction loadSilicaUserConfig(): { nextConfig?: SilicaNextConfigOverride } {\n const jiti = createJiti(import.meta.url, { interopDefault: true });\n const loaded = jiti(${JSON.stringify(userConfigImport)}) as SilicaUserConfig;\n return loaded.default ?? loaded;\n}\n\nfunction mergeNextConfig(\n base: NextConfig,\n override: NextConfig | undefined,\n): NextConfig {\n if (!override) return base;\n return deepMerge(\n base as Record<string, unknown>,\n override as Record<string, unknown>,\n ) as NextConfig;\n}\n\nfunction deepMerge(\n base: Record<string, unknown>,\n override: Record<string, unknown>,\n): Record<string, unknown> {\n const merged = { ...base };\n for (const [key, value] of Object.entries(override)) {\n const baseValue = merged[key];\n merged[key] =\n isPlainObject(baseValue) && isPlainObject(value)\n ? deepMerge(baseValue, value)\n : value;\n }\n return merged;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value)\n );\n}`;\n}\n\nfunction resolveThemeSpecifier(themeValue: unknown): string {\n const themeName =\n typeof themeValue === \"object\" &&\n themeValue !== null &&\n \"name\" in themeValue\n ? String((themeValue as { name?: string }).name ?? \"default\")\n : typeof themeValue === \"string\"\n ? themeValue\n : \"default\";\n\n if (!themeName || themeName === \"default\") return \"@silicajs/theme-amethyst\";\n if (themeName.startsWith(\".\"))\n return `../../${themeName.replace(/^\\.\\//, \"\")}`;\n return themeName;\n}\n\nfunction readTemplateDirectory(root: string, current = root): TemplateFile[] {\n const entries = fs\n .readdirSync(current, { withFileTypes: true })\n .sort((left, right) => left.name.localeCompare(right.name));\n\n return entries.flatMap((entry) => {\n const absolutePath = path.join(current, entry.name);\n if (entry.isDirectory()) return readTemplateDirectory(root, absolutePath);\n if (!entry.isFile()) return [];\n\n return {\n path: path.relative(root, absolutePath).split(path.sep).join(\"/\"),\n content: fs.readFileSync(absolutePath, \"utf8\"),\n };\n });\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@silicajs/next",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Next.js runtime, routes, templates, and proxy for Silica.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -60,6 +60,14 @@
60
60
  "types": "./dist/dev-reload-client.d.ts",
61
61
  "import": "./dist/dev-reload-client.js"
62
62
  },
63
+ "./server-data": {
64
+ "types": "./dist/server-data.d.ts",
65
+ "import": "./dist/server-data.js"
66
+ },
67
+ "./cache-handlers/filesystem": {
68
+ "types": "./dist/cache-handlers/filesystem.d.ts",
69
+ "import": "./dist/cache-handlers/filesystem.js"
70
+ },
63
71
  "./proxy": {
64
72
  "types": "./dist/proxy.d.ts",
65
73
  "import": "./dist/proxy.js"
@@ -88,11 +96,13 @@
88
96
  },
89
97
  "dependencies": {
90
98
  "@silicajs/auth": "^0.1.1",
91
- "@silicajs/components": "^0.2.1",
92
- "@silicajs/core": "^0.3.0",
99
+ "@silicajs/components": "^0.2.3",
100
+ "@silicajs/core": "^0.5.0",
93
101
  "@silicajs/remark-obsidian": "^0.1.0",
94
- "@silicajs/search": "^0.2.0",
102
+ "@silicajs/search": "^0.3.0",
95
103
  "better-auth": "1.6.11",
104
+ "better-sqlite3": "^12.10.0",
105
+ "jiti": "^2.7.0",
96
106
  "katex": "^0.17.0"
97
107
  },
98
108
  "peerDependencies": {