@silicajs/next 0.1.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.
- package/README.md +7 -0
- package/dist/auth-config.d.ts +10 -0
- package/dist/auth-config.js +25 -0
- package/dist/auth-config.js.map +1 -0
- package/dist/dev-reload-client.d.ts +3 -0
- package/dist/dev-reload-client.js +19 -0
- package/dist/dev-reload-client.js.map +1 -0
- package/dist/dev-reload.d.ts +6 -0
- package/dist/dev-reload.js +36 -0
- package/dist/dev-reload.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/proxy.d.ts +14 -0
- package/dist/proxy.js +56 -0
- package/dist/proxy.js.map +1 -0
- package/dist/routes/api-auth.d.ts +4 -0
- package/dist/routes/api-auth.js +27 -0
- package/dist/routes/api-auth.js.map +1 -0
- package/dist/routes/api-dev-events.d.ts +3 -0
- package/dist/routes/api-dev-events.js +18 -0
- package/dist/routes/api-dev-events.js.map +1 -0
- package/dist/routes/api-revalidate.d.ts +10 -0
- package/dist/routes/api-revalidate.js +22 -0
- package/dist/routes/api-revalidate.js.map +1 -0
- package/dist/routes/api-search.d.ts +17 -0
- package/dist/routes/api-search.js +53 -0
- package/dist/routes/api-search.js.map +1 -0
- package/dist/routes/layout.d.ts +24 -0
- package/dist/routes/layout.js +48 -0
- package/dist/routes/layout.js.map +1 -0
- package/dist/routes/not-allowed.d.ts +5 -0
- package/dist/routes/not-allowed.js +9 -0
- package/dist/routes/not-allowed.js.map +1 -0
- package/dist/routes/not-found.d.ts +5 -0
- package/dist/routes/not-found.js +9 -0
- package/dist/routes/not-found.js.map +1 -0
- package/dist/routes/page.d.ts +26 -0
- package/dist/routes/page.js +175 -0
- package/dist/routes/page.js.map +1 -0
- package/dist/routes/sign-in.d.ts +5 -0
- package/dist/routes/sign-in.js +31 -0
- package/dist/routes/sign-in.js.map +1 -0
- package/dist/routes/tags-page.d.ts +18 -0
- package/dist/routes/tags-page.js +57 -0
- package/dist/routes/tags-page.js.map +1 -0
- package/dist/routing-provider.d.ts +8 -0
- package/dist/routing-provider.js +40 -0
- package/dist/routing-provider.js.map +1 -0
- package/dist/server-data.d.ts +11 -0
- package/dist/server-data.js +53 -0
- package/dist/server-data.js.map +1 -0
- package/dist/template-files/generated-app/app/[[...slug]]/page.tsx +18 -0
- package/dist/template-files/generated-app/app/api/auth/[...all]/route.ts +1 -0
- package/dist/template-files/generated-app/app/api/search/route.ts +1 -0
- package/dist/template-files/generated-app/app/api/silica/dev-events/route.ts +1 -0
- package/dist/template-files/generated-app/app/api/silica/revalidate/route.ts +1 -0
- package/dist/template-files/generated-app/app/layout.tsx +22 -0
- package/dist/template-files/generated-app/app/not-allowed/page.tsx +1 -0
- package/dist/template-files/generated-app/app/not-found.tsx +1 -0
- package/dist/template-files/generated-app/app/sign-in/page.tsx +1 -0
- package/dist/template-files/generated-app/app/tags/[...tag]/page.tsx +5 -0
- package/dist/template-files/generated-app/postcss.config.mjs +1 -0
- package/dist/template-files/generated-app/proxy.ts +10 -0
- package/dist/template-files/next.config.ts +32 -0
- package/dist/template-files/package.json +15 -0
- package/dist/template-files/silica-theme.ts +7 -0
- package/dist/template-files/tsconfig.json +21 -0
- package/dist/templates.d.ts +14 -0
- package/dist/templates.js +80 -0
- package/dist/templates.js.map +1 -0
- package/dist/theme-layout.d.ts +1 -0
- package/dist/theme-layout.js +6 -0
- package/dist/theme-layout.js.map +1 -0
- package/dist/theme-page.d.ts +3 -0
- package/dist/theme-page.js +11 -0
- package/dist/theme-page.js.map +1 -0
- package/package.json +104 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
const templateFilesRoot = fileURLToPath(
|
|
5
|
+
new URL("./template-files", import.meta.url)
|
|
6
|
+
);
|
|
7
|
+
function getSilicaTemplates() {
|
|
8
|
+
return readTemplateDirectory(path.join(templateFilesRoot, "generated-app"));
|
|
9
|
+
}
|
|
10
|
+
function nextConfigTemplate() {
|
|
11
|
+
return readTemplateFile("next.config.ts");
|
|
12
|
+
}
|
|
13
|
+
function themeModuleTemplate(themeValue) {
|
|
14
|
+
return readTemplateFile("silica-theme.ts").replace(
|
|
15
|
+
'"{{themeSpecifier}}"',
|
|
16
|
+
JSON.stringify(resolveThemeSpecifier(themeValue))
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
function proxyTemplate(config) {
|
|
20
|
+
return `import type { NextRequest } from "next/server";
|
|
21
|
+
import { silicaProxy } from "@silicajs/next/proxy";
|
|
22
|
+
|
|
23
|
+
const silicaProxyConfig = ${JSON.stringify(
|
|
24
|
+
{
|
|
25
|
+
authEnabled: Boolean(config.auth),
|
|
26
|
+
allowedDomains: config.auth?.allowedDomains ?? [],
|
|
27
|
+
allowedEmails: config.auth?.allowedEmails ?? []
|
|
28
|
+
},
|
|
29
|
+
null,
|
|
30
|
+
2
|
|
31
|
+
)} as const;
|
|
32
|
+
|
|
33
|
+
export function proxy(request: NextRequest) {
|
|
34
|
+
return silicaProxy(request, silicaProxyConfig);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const config = {
|
|
38
|
+
matcher: ["/((?!_next/static|_next/image|favicon.ico).*)"],
|
|
39
|
+
};
|
|
40
|
+
`;
|
|
41
|
+
}
|
|
42
|
+
function tsconfigTemplate(hasUserTsconfig) {
|
|
43
|
+
const template = readTemplateFile("tsconfig.json");
|
|
44
|
+
const rendered = hasUserTsconfig ? template.replaceAll("{{extends}}", "../../tsconfig.json") : template.replace(' "extends": "{{extends}}",\n', "");
|
|
45
|
+
return rendered.trimEnd();
|
|
46
|
+
}
|
|
47
|
+
function packageJsonTemplate() {
|
|
48
|
+
return readTemplateFile("package.json");
|
|
49
|
+
}
|
|
50
|
+
function readTemplateFile(filename) {
|
|
51
|
+
return fs.readFileSync(path.join(templateFilesRoot, filename), "utf8");
|
|
52
|
+
}
|
|
53
|
+
function resolveThemeSpecifier(themeValue) {
|
|
54
|
+
const themeName = typeof themeValue === "object" && themeValue !== null && "name" in themeValue ? String(themeValue.name ?? "default") : typeof themeValue === "string" ? themeValue : "default";
|
|
55
|
+
if (!themeName || themeName === "default") return "@silicajs/theme-amethyst";
|
|
56
|
+
if (themeName.startsWith("."))
|
|
57
|
+
return `../../${themeName.replace(/^\.\//, "")}`;
|
|
58
|
+
return themeName;
|
|
59
|
+
}
|
|
60
|
+
function readTemplateDirectory(root, current = root) {
|
|
61
|
+
const entries = fs.readdirSync(current, { withFileTypes: true }).sort((left, right) => left.name.localeCompare(right.name));
|
|
62
|
+
return entries.flatMap((entry) => {
|
|
63
|
+
const absolutePath = path.join(current, entry.name);
|
|
64
|
+
if (entry.isDirectory()) return readTemplateDirectory(root, absolutePath);
|
|
65
|
+
if (!entry.isFile()) return [];
|
|
66
|
+
return {
|
|
67
|
+
path: path.relative(root, absolutePath).split(path.sep).join("/"),
|
|
68
|
+
content: fs.readFileSync(absolutePath, "utf8")
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
export {
|
|
73
|
+
getSilicaTemplates,
|
|
74
|
+
nextConfigTemplate,
|
|
75
|
+
packageJsonTemplate,
|
|
76
|
+
proxyTemplate,
|
|
77
|
+
themeModuleTemplate,
|
|
78
|
+
tsconfigTemplate
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +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 },\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,IAChD;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":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { generateMetadata, getLayoutProps } from './routes/layout.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme-layout.tsx"],"sourcesContent":["export { generateMetadata, getLayoutProps } from \"./routes/layout.js\";\n"],"mappings":"AAAA,SAAS,kBAAkB,sBAAsB;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme-page.tsx"],"sourcesContent":["export {\n generateMetadata,\n generateStaticParams,\n VaultContent,\n} from \"./routes/page.js\";\nexport type { PageProps } from \"./routes/page.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@silicajs/next",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Next.js runtime, routes, templates, and proxy for Silica.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"./routes/page": {
|
|
16
|
+
"types": "./dist/routes/page.d.ts",
|
|
17
|
+
"import": "./dist/routes/page.js"
|
|
18
|
+
},
|
|
19
|
+
"./routes/tags-page": {
|
|
20
|
+
"types": "./dist/routes/tags-page.d.ts",
|
|
21
|
+
"import": "./dist/routes/tags-page.js"
|
|
22
|
+
},
|
|
23
|
+
"./routes/layout": {
|
|
24
|
+
"types": "./dist/routes/layout.d.ts",
|
|
25
|
+
"import": "./dist/routes/layout.js"
|
|
26
|
+
},
|
|
27
|
+
"./routes/not-found": {
|
|
28
|
+
"types": "./dist/routes/not-found.d.ts",
|
|
29
|
+
"import": "./dist/routes/not-found.js"
|
|
30
|
+
},
|
|
31
|
+
"./routes/sign-in": {
|
|
32
|
+
"types": "./dist/routes/sign-in.d.ts",
|
|
33
|
+
"import": "./dist/routes/sign-in.js"
|
|
34
|
+
},
|
|
35
|
+
"./routes/not-allowed": {
|
|
36
|
+
"types": "./dist/routes/not-allowed.d.ts",
|
|
37
|
+
"import": "./dist/routes/not-allowed.js"
|
|
38
|
+
},
|
|
39
|
+
"./routes/api-auth": {
|
|
40
|
+
"types": "./dist/routes/api-auth.d.ts",
|
|
41
|
+
"import": "./dist/routes/api-auth.js"
|
|
42
|
+
},
|
|
43
|
+
"./routes/api-search": {
|
|
44
|
+
"types": "./dist/routes/api-search.d.ts",
|
|
45
|
+
"import": "./dist/routes/api-search.js"
|
|
46
|
+
},
|
|
47
|
+
"./routes/api-revalidate": {
|
|
48
|
+
"types": "./dist/routes/api-revalidate.d.ts",
|
|
49
|
+
"import": "./dist/routes/api-revalidate.js"
|
|
50
|
+
},
|
|
51
|
+
"./routes/api-dev-events": {
|
|
52
|
+
"types": "./dist/routes/api-dev-events.d.ts",
|
|
53
|
+
"import": "./dist/routes/api-dev-events.js"
|
|
54
|
+
},
|
|
55
|
+
"./dev-reload-client": {
|
|
56
|
+
"types": "./dist/dev-reload-client.d.ts",
|
|
57
|
+
"import": "./dist/dev-reload-client.js"
|
|
58
|
+
},
|
|
59
|
+
"./proxy": {
|
|
60
|
+
"types": "./dist/proxy.d.ts",
|
|
61
|
+
"import": "./dist/proxy.js"
|
|
62
|
+
},
|
|
63
|
+
"./theme-layout": {
|
|
64
|
+
"types": "./dist/theme-layout.d.ts",
|
|
65
|
+
"import": "./dist/theme-layout.js"
|
|
66
|
+
},
|
|
67
|
+
"./theme-page": {
|
|
68
|
+
"types": "./dist/theme-page.d.ts",
|
|
69
|
+
"import": "./dist/theme-page.js"
|
|
70
|
+
},
|
|
71
|
+
"./routing-provider": {
|
|
72
|
+
"types": "./dist/routing-provider.d.ts",
|
|
73
|
+
"import": "./dist/routing-provider.js"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"files": [
|
|
77
|
+
"dist"
|
|
78
|
+
],
|
|
79
|
+
"scripts": {
|
|
80
|
+
"build": "tsup",
|
|
81
|
+
"test": "vitest run --passWithNoTests",
|
|
82
|
+
"typecheck": "tsc --noEmit",
|
|
83
|
+
"lint": "tsc --noEmit"
|
|
84
|
+
},
|
|
85
|
+
"dependencies": {
|
|
86
|
+
"@silicajs/auth": "^0.1.0",
|
|
87
|
+
"@silicajs/components": "^0.1.0",
|
|
88
|
+
"@silicajs/core": "^0.1.0",
|
|
89
|
+
"@silicajs/remark-obsidian": "^0.1.0",
|
|
90
|
+
"@silicajs/search": "^0.1.0",
|
|
91
|
+
"better-auth": "^1.6.11",
|
|
92
|
+
"katex": "^0.17.0"
|
|
93
|
+
},
|
|
94
|
+
"peerDependencies": {
|
|
95
|
+
"next": "^16.2.0",
|
|
96
|
+
"react": "^19.2.0",
|
|
97
|
+
"react-dom": "^19.2.0"
|
|
98
|
+
},
|
|
99
|
+
"devDependencies": {
|
|
100
|
+
"next": "^16.2.6",
|
|
101
|
+
"react": "^19.2.6",
|
|
102
|
+
"react-dom": "^19.2.6"
|
|
103
|
+
}
|
|
104
|
+
}
|