@sntlr/registry-shell 1.1.2 → 2.0.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 CHANGED
@@ -75,8 +75,7 @@ for a branded marketing landing, host it on a separate site.
75
75
  |--------------------------|-----------------------------------------------------|
76
76
  | `registry-shell init` | Scaffold `registry-shell.config.ts` + npm scripts |
77
77
  | `registry-shell dev` | Dev server on `localhost:3000` |
78
- | `registry-shell build` | Production `next build` |
79
- | `registry-shell start` | `next start` against a prior build |
78
+ | `registry-shell build` | Static export → `./out/` (deploy anywhere) |
80
79
 
81
80
  If your registry has no config file, the shell runs in "shell-only" mode and
82
81
  renders its built-in getting-started docs so you can preview the chrome
@@ -147,32 +146,31 @@ defaults.
147
146
  `components/`, `content/` layout — the shell doesn't care if you use
148
147
  Next.js itself).
149
148
 
150
- ## Deploying to Vercel
151
-
152
- The shell's `registry-shell build` writes its Next.js output to
153
- `<your-project>/.next`, so any Next-aware host (Vercel, Netlify's Next runtime,
154
- self-hosted Node, etc.) finds it where they expect. On Vercel specifically:
155
-
156
- 1. **Add `next` to your project's devDependencies.** Vercel auto-detects
157
- Next.js by scanning `package.json`; without a direct `next` entry it may
158
- miss the framework and default to static hosting.
159
- ```bash
160
- npm install -D next
161
- ```
162
- 2. **In the Vercel dashboard** (New Project your repo), set:
163
- - **Framework Preset**: Next.js
164
- - **Build Command**: `npm run shell:build` (or `registry-shell build`)
165
- - **Output Directory**: leave blank (defaults to `.next`)
166
- - **Install Command**: leave default
167
- 3. Deploy. Vercel runs your build command, Next writes `.next/` at the
168
- project root, and Vercel picks it up like a standard Next.js project.
169
-
170
- `registry-shell start` also respects the same output location, so
171
- self-hosted deployments work with `npm run shell:build && npm run shell:start`.
172
-
173
- Need the output somewhere other than `.next`? Set `paths.buildOutput` in
174
- your config (e.g. `"dist-shell"`). Just remember to point your host's
175
- Output Directory setting at the same path.
149
+ ## Deploying
150
+
151
+ `registry-shell build` produces a **pure static export** under `./out/` —
152
+ HTML, JS, CSS, and JSON files with no server runtime required. Same
153
+ deployment model as Storybook, Docusaurus, MkDocs, etc.
154
+
155
+ Deploy `out/` to anything that serves static files:
156
+
157
+ - **Vercel** push the repo, Vercel auto-detects Next.js with
158
+ `output: "export"` and serves `out/` from its edge CDN. No custom
159
+ build command, no Output Directory override. Just push.
160
+ - **Netlify** — `netlify.toml` with `publish = "out"`.
161
+ - **GitHub Pages** upload `out/` as the Pages artifact.
162
+ - **S3 / CloudFront** — `aws s3 sync out/ s3://your-bucket/`.
163
+ - **Local / self-host** `npx serve out/` or any static file server.
164
+
165
+ The shadcn URL contract is preserved: `https://your-domain/r/button.json`
166
+ serves the same bytes consumers' `npx shadcn add` commands expect.
167
+
168
+ > v1.x users: the shell previously produced a serverful Next.js build
169
+ > that needed Vercel's `@vercel/next` integration. v2.0 switched to
170
+ > static export to sidestep an entire class of file-tracing issues
171
+ > when the shell's Next app lives inside `node_modules`. The trade-off
172
+ > is no runtime SSR / no API routes — registries that need those
173
+ > patterns aren't served by this shell.
176
174
 
177
175
  ## Releasing
178
176
 
@@ -1,13 +1,3 @@
1
- /**
2
- * Default convention-based RegistryAdapter implementation.
3
- *
4
- * Builds a RegistryAdapter from a `ResolvedShellConfig`: scans the filesystem
5
- * paths declared in the user's config, parses MDX frontmatter, and reads
6
- * registry JSON. The `previewLoader` is wired separately via a Next.js alias
7
- * (see next-app/next.config.ts) because Next's `dynamic()` needs string
8
- * literal imports.
9
- */
10
- import "server-only";
11
1
  import type { ResolvedShellConfig } from "../config-loader.js";
12
2
  export interface ComponentMeta {
13
3
  name: string;
@@ -7,7 +7,6 @@
7
7
  * (see next-app/next.config.ts) because Next's `dynamic()` needs string
8
8
  * literal imports.
9
9
  */
10
- import "server-only";
11
10
  import fs from "node:fs";
12
11
  import path from "node:path";
13
12
  import matter from "gray-matter";
@@ -1 +1 @@
1
- {"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/adapter/default.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/adapter/default.ts"],"names":[],"mappings":"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"}
package/dist/cli/build.js CHANGED
@@ -1,58 +1,105 @@
1
1
  /**
2
- * `registry-shell build` — run `next build` against the user's project.
2
+ * `registry-shell build` — produces a Next.js static export tree in
3
+ * `<user-project>/out/`.
3
4
  *
4
- * Strategy: `next build` writes to its default `<next-project>/.next`
5
- * location (inside our node_modules). After a successful build, MOVE that
6
- * directory to `<user-project>/<paths.buildOutput ?? ".next">`.
7
- *
8
- * Why not use Next's `distDir` config? Next silently ignores absolute
9
- * paths that point outside the Next project dir (the output ends up back
10
- * in the default location). The env-var approach we tried first worked
11
- * locally on Windows but failed on Vercel. A post-build move is
12
- * platform-independent.
5
+ * Pipeline:
6
+ * 1. Overlay user's public/ onto the shell's bundled public/ (so Next
7
+ * sees user's registry manifests at /r/*.json, /a11y/*.json, etc.).
8
+ * 2. Run build-time generators that write derived JSON into the merged
9
+ * public/ currently just `api/search-index.json`.
10
+ * 3. Run `next build` with `output: "export"` (set in next.config.ts).
11
+ * Next writes static HTML/JS/CSS to `<shell>/out/`.
12
+ * 4. Copy `<shell>/out/` `<user-project>/out/`.
13
+ * 5. Restore shell's public/ to its pristine state (remove anything we
14
+ * added in step 1/2) so repeated builds are idempotent.
13
15
  */
14
16
  import fs from "node:fs";
15
17
  import path from "node:path";
16
18
  import { spawn } from "node:child_process";
17
19
  import { NEXT_BIN, buildEnvVars, clearStaleNextCacheIfModeChanged, loadUserConfig, nextAppDir, writeUserSourcesCss, } from "./shared.js";
20
+ import { generateSearchIndex } from "./generate-search-index.js";
18
21
  export async function run(args) {
19
22
  const loaded = loadUserConfig();
23
+ if (!loaded) {
24
+ console.error("[registry-shell] No registry-shell.config.ts found — `build` requires a registry.");
25
+ process.exit(1);
26
+ }
20
27
  clearStaleNextCacheIfModeChanged(loaded);
21
28
  writeUserSourcesCss(loaded);
22
29
  const shellNextApp = nextAppDir();
30
+ const shellPublic = path.join(shellNextApp, "public");
31
+ const userPublic = path.join(loaded.root, "public");
32
+ // Step 1: Snapshot shell's public/ before overlay so we can restore it.
33
+ const shellOwnEntries = new Set(fs.existsSync(shellPublic) ? fs.readdirSync(shellPublic) : []);
34
+ // Step 2: Overlay user's public/ onto shell's public/ (user files win).
35
+ const overlaidEntries = [];
36
+ if (fs.existsSync(userPublic)) {
37
+ for (const entry of fs.readdirSync(userPublic)) {
38
+ const src = path.join(userPublic, entry);
39
+ const dest = path.join(shellPublic, entry);
40
+ fs.cpSync(src, dest, { recursive: true, force: true });
41
+ overlaidEntries.push(entry);
42
+ }
43
+ }
44
+ // Apply the shell env vars to THIS process so build-time generators can
45
+ // call `loadResolvedConfig()` (which reads USER_REGISTRY_ROOT etc.).
46
+ // The same env is also forwarded to the spawn child below.
23
47
  const env = { ...process.env, ...buildEnvVars(loaded) };
24
- const child = spawn(process.execPath, [NEXT_BIN, "build", shellNextApp, ...args], { stdio: "inherit", env });
25
- child.on("exit", (code) => {
48
+ Object.assign(process.env, buildEnvVars(loaded));
49
+ // Step 3: Pre-build generators (writes into shell's public/ so Next picks up).
50
+ try {
51
+ await generateSearchIndex(loaded, shellPublic);
52
+ }
53
+ catch (err) {
54
+ console.warn(`[registry-shell] search-index generation failed: ${err.message}`);
55
+ }
56
+ // Step 4: next build (static export — writes to <shellNextApp>/out/).
57
+ const buildChild = spawn(process.execPath, [NEXT_BIN, "build", shellNextApp, ...args], { stdio: "inherit", env });
58
+ buildChild.on("exit", (code) => {
26
59
  if (code !== 0) {
60
+ restoreShellPublic(shellPublic, shellOwnEntries, overlaidEntries);
27
61
  process.exit(code ?? 1);
28
62
  }
29
- if (loaded)
30
- relocateBuildOutput(shellNextApp, loaded.root, loaded.config.paths?.buildOutput);
63
+ // Step 5: Copy out/ to user project root.
64
+ const src = path.join(shellNextApp, "out");
65
+ const dest = path.resolve(loaded.root, "out");
66
+ if (fs.existsSync(src)) {
67
+ if (fs.existsSync(dest)) {
68
+ fs.rmSync(dest, { recursive: true, force: true, maxRetries: 5, retryDelay: 200 });
69
+ }
70
+ fs.cpSync(src, dest, { recursive: true });
71
+ // Remove the build output from inside node_modules so it doesn't
72
+ // accumulate stale copies across releases.
73
+ fs.rmSync(src, { recursive: true, force: true, maxRetries: 5, retryDelay: 200 });
74
+ console.log(`[registry-shell] Static build ready at ${dest}`);
75
+ }
76
+ // Step 6: Restore shell's public/ (remove overlay).
77
+ restoreShellPublic(shellPublic, shellOwnEntries, overlaidEntries);
31
78
  process.exit(0);
32
79
  });
33
80
  }
34
81
  /**
35
- * Moves `<shellNextApp>/.next` `<userRoot>/<outputName ?? ".next">`.
36
- * Idempotent: removes stale destination first. Noop if source is missing
37
- * (e.g. Next's distDir *did* happen to work) or source and dest are the
38
- * same path.
82
+ * Removes anything from `shellPublic` that wasn't there before the overlay.
83
+ * Keeps shell's bundled favicons + anything else that was part of the
84
+ * shipped package. Runs on both success and failure paths.
39
85
  */
40
- function relocateBuildOutput(shellNextApp, userRoot, outputName) {
41
- const src = path.join(shellNextApp, ".next");
42
- const dest = path.resolve(userRoot, outputName ?? ".next");
43
- if (src === dest)
86
+ function restoreShellPublic(shellPublic, shellOwnEntries, overlaidEntries) {
87
+ if (!fs.existsSync(shellPublic))
44
88
  return;
45
- if (!fs.existsSync(src))
46
- return;
47
- if (fs.existsSync(dest)) {
48
- fs.rmSync(dest, {
49
- recursive: true,
50
- force: true,
51
- maxRetries: 5,
52
- retryDelay: 200,
53
- });
89
+ for (const entry of overlaidEntries) {
90
+ if (!shellOwnEntries.has(entry)) {
91
+ // Entry didn't exist before overlay — remove cleanly.
92
+ fs.rmSync(path.join(shellPublic, entry), {
93
+ recursive: true,
94
+ force: true,
95
+ maxRetries: 5,
96
+ retryDelay: 200,
97
+ });
98
+ }
99
+ // Entry existed in shell's own public/ — we overwrote it, can't
100
+ // cleanly restore without reinstalling. Leave it; on next build the
101
+ // user's version replaces it again. Mostly affects favicon.* files
102
+ // the user might customize.
54
103
  }
55
- fs.renameSync(src, dest);
56
- console.log(`[registry-shell] Build output moved to ${dest}`);
57
104
  }
58
105
  //# sourceMappingURL=build.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,gCAAgC,EAChC,cAAc,EACd,UAAU,EACV,mBAAmB,GACpB,MAAM,aAAa,CAAA;AAEpB,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,gCAAgC,CAAC,MAAM,CAAC,CAAA;IACxC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAE3B,MAAM,YAAY,GAAG,UAAU,EAAE,CAAA;IACjC,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAA;IACvD,MAAM,KAAK,GAAG,KAAK,CACjB,OAAO,CAAC,QAAQ,EAChB,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,EAC1C,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAC1B,CAAA;IAED,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;QACzB,CAAC;QACD,IAAI,MAAM;YAAE,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;QAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAC1B,YAAoB,EACpB,QAAgB,EAChB,UAA8B;IAE9B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,IAAI,OAAO,CAAC,CAAA;IAC1D,IAAI,GAAG,KAAK,IAAI;QAAE,OAAM;IACxB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAM;IAE/B,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;YACd,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,GAAG;SAChB,CAAC,CAAA;IACJ,CAAC;IACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACxB,OAAO,CAAC,GAAG,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAA;AAC/D,CAAC"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,gCAAgC,EAChC,cAAc,EACd,UAAU,EACV,mBAAmB,GACpB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CACX,mFAAmF,CACpF,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,gCAAgC,CAAC,MAAM,CAAC,CAAA;IACxC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAE3B,MAAM,YAAY,GAAG,UAAU,EAAE,CAAA;IACjC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAEnD,wEAAwE;IACxE,MAAM,eAAe,GAAgB,IAAI,GAAG,CAC1C,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAC9D,CAAA;IAED,wEAAwE;IACxE,MAAM,eAAe,GAAa,EAAE,CAAA;IACpC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;YAC1C,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACtD,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,qEAAqE;IACrE,2DAA2D;IAC3D,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAA;IACvD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAA;IAEhD,+EAA+E;IAC/E,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,oDAAqD,GAAa,CAAC,OAAO,EAAE,CAC7E,CAAA;IACH,CAAC;IAED,sEAAsE;IACtE,MAAM,UAAU,GAAG,KAAK,CACtB,OAAO,CAAC,QAAQ,EAChB,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,EAC1C,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAC1B,CAAA;IAED,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QAC7B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,kBAAkB,CAAC,WAAW,EAAE,eAAe,EAAE,eAAe,CAAC,CAAA;YACjE,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;QACzB,CAAC;QAED,0CAA0C;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAA;YACnF,CAAC;YACD,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACzC,iEAAiE;YACjE,2CAA2C;YAC3C,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAA;YAChF,OAAO,CAAC,GAAG,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAA;QAC/D,CAAC;QAED,oDAAoD;QACpD,kBAAkB,CAAC,WAAW,EAAE,eAAe,EAAE,eAAe,CAAC,CAAA;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CACzB,WAAmB,EACnB,eAA4B,EAC5B,eAAyB;IAEzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAM;IACvC,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,sDAAsD;YACtD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;gBACvC,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,IAAI;gBACX,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,GAAG;aAChB,CAAC,CAAA;QACJ,CAAC;QACD,gEAAgE;QAChE,oEAAoE;QACpE,mEAAmE;QACnE,4BAA4B;IAC9B,CAAC;AACH,CAAC"}
package/dist/cli/dev.js CHANGED
@@ -1,8 +1,22 @@
1
1
  /**
2
2
  * `registry-shell dev` — run `next dev` against the user's project.
3
+ *
4
+ * Dev mode runs Next in its normal dynamic-rendering mode (so hot reload
5
+ * / live MDX / interactive previews all work). The `output: "export"`
6
+ * config only affects `next build`, so dev behaves identically to pre-v2.
7
+ *
8
+ * We still overlay the user's `public/` onto the shell's bundled `public/`
9
+ * before starting Next, so dynamic registry assets (`/r/*.json`,
10
+ * `/a11y/*.json`, `/props/*.json`, `/tests/*.json`, `/api/search-index.json`,
11
+ * plus any user-custom static files) are served the same way they will be
12
+ * in a production build. Note: changes to the user's `public/` during a
13
+ * dev session require a restart to refresh the overlay.
3
14
  */
15
+ import fs from "node:fs";
16
+ import path from "node:path";
4
17
  import { spawn } from "node:child_process";
5
18
  import { NEXT_BIN, buildEnvVars, clearStaleNextCacheIfModeChanged, loadUserConfig, nextAppDir, writeUserSourcesCss, } from "./shared.js";
19
+ import { generateSearchIndex } from "./generate-search-index.js";
6
20
  export async function run(args) {
7
21
  const loaded = loadUserConfig();
8
22
  if (loaded) {
@@ -13,6 +27,18 @@ export async function run(args) {
13
27
  }
14
28
  clearStaleNextCacheIfModeChanged(loaded);
15
29
  writeUserSourcesCss(loaded);
30
+ const shellNextApp = nextAppDir();
31
+ // Overlay user's public/ onto shell's public/ so dev-mode URLs match
32
+ // what production will serve statically. Skipped in shell-only mode.
33
+ if (loaded) {
34
+ overlayUserPublic(loaded.root, shellNextApp);
35
+ try {
36
+ await generateSearchIndex(loaded, path.join(shellNextApp, "public"));
37
+ }
38
+ catch (err) {
39
+ console.warn(`[registry-shell] search-index generation failed: ${err.message}`);
40
+ }
41
+ }
16
42
  const env = { ...process.env, ...buildEnvVars(loaded) };
17
43
  const portArgs = loaded?.config.port ? ["-p", String(loaded.config.port)] : [];
18
44
  // Webpack by default. Turbopack currently can't compile files reached via
@@ -20,7 +46,18 @@ export async function run(args) {
20
46
  // and crashes on `next/dynamic`. Set UI_SHELL_TURBOPACK=1 to opt in once
21
47
  // Turbopack supports this (track https://github.com/vercel/next.js).
22
48
  const turbopackArgs = process.env.UI_SHELL_TURBOPACK ? ["--turbopack"] : [];
23
- const child = spawn(process.execPath, [NEXT_BIN, "dev", nextAppDir(), ...turbopackArgs, ...portArgs, ...args], { stdio: "inherit", env });
49
+ const child = spawn(process.execPath, [NEXT_BIN, "dev", shellNextApp, ...turbopackArgs, ...portArgs, ...args], { stdio: "inherit", env });
24
50
  child.on("exit", (code) => process.exit(code ?? 0));
25
51
  }
52
+ function overlayUserPublic(userRoot, shellNextApp) {
53
+ const userPublic = path.join(userRoot, "public");
54
+ const shellPublic = path.join(shellNextApp, "public");
55
+ if (!fs.existsSync(userPublic))
56
+ return;
57
+ for (const entry of fs.readdirSync(userPublic)) {
58
+ const src = path.join(userPublic, entry);
59
+ const dest = path.join(shellPublic, entry);
60
+ fs.cpSync(src, dest, { recursive: true, force: true });
61
+ }
62
+ }
26
63
  //# sourceMappingURL=dev.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,gCAAgC,EAChC,cAAc,EACd,UAAU,EACV,mBAAmB,GACpB,MAAM,aAAa,CAAA;AAEpB,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;IACpE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAA;IACjG,CAAC;IAED,gCAAgC,CAAC,MAAM,CAAC,CAAA;IACxC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAC3B,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAA;IACvD,MAAM,QAAQ,GAAG,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9E,0EAA0E;IAC1E,0EAA0E;IAC1E,yEAAyE;IACzE,qEAAqE;IACrE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3E,MAAM,KAAK,GAAG,KAAK,CACjB,OAAO,CAAC,QAAQ,EAChB,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,GAAG,aAAa,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,EACvE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAC1B,CAAA;IAED,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;AACrD,CAAC"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { LoadedConfig } from "./shared.js";
2
+ /**
3
+ * Writes the search index JSON into `targetPublicDir/api/search-index.json`.
4
+ * `targetPublicDir` is expected to be the shell's bundled `public/` dir
5
+ * (inside node_modules). The build pipeline overlays the user's public/
6
+ * onto this dir so the merged tree is what `next build` sees.
7
+ */
8
+ export declare function generateSearchIndex(loaded: LoadedConfig, targetPublicDir: string): Promise<void>;
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Pre-build generator: writes `public/api/search-index.json` into the
3
+ * user's public tree. Replaces the former `/api/search-index` route
4
+ * handler — the shell's static-export mode can't serve dynamic route
5
+ * handlers, so we bake the search index at build time instead.
6
+ *
7
+ * The generator runs in a child `tsx` process so the shell's own build
8
+ * pipeline (which ships as compiled `.js`) can invoke user-registry-side
9
+ * .ts files (docs loaders, adapters) without the user's `node_modules/`
10
+ * needing to be on our resolution path.
11
+ */
12
+ import fs from "node:fs";
13
+ import path from "node:path";
14
+ import { createJiti } from "jiti";
15
+ /**
16
+ * Writes the search index JSON into `targetPublicDir/api/search-index.json`.
17
+ * `targetPublicDir` is expected to be the shell's bundled `public/` dir
18
+ * (inside node_modules). The build pipeline overlays the user's public/
19
+ * onto this dir so the merged tree is what `next build` sees.
20
+ */
21
+ export async function generateSearchIndex(loaded, targetPublicDir) {
22
+ const { config } = loaded;
23
+ void config;
24
+ // Load the shell's registry-adapter + config-loader via jiti so we can
25
+ // evaluate the same filesystem-walking logic the server used to do at
26
+ // request time.
27
+ const jiti = createJiti(import.meta.url, { interopDefault: true });
28
+ const resolved = jiti("../config-loader.js").loadResolvedConfig();
29
+ if (!resolved) {
30
+ console.warn("[registry-shell] generate-search-index: no resolved config, skipping");
31
+ return;
32
+ }
33
+ const { createDefaultAdapter } = jiti("../adapter/default.js");
34
+ const adapter = createDefaultAdapter(resolved);
35
+ const docs = adapter.getAllDocs().map((doc) => ({
36
+ label: doc.title,
37
+ href: `/docs/${doc.slug}/`,
38
+ group: "Documentation",
39
+ }));
40
+ const components = adapter.getAllComponents().map((comp) => ({
41
+ label: comp.label,
42
+ href: `/components/${comp.name}/`,
43
+ group: "Components",
44
+ }));
45
+ const items = [...docs, ...components];
46
+ const outDir = path.join(targetPublicDir, "api");
47
+ fs.mkdirSync(outDir, { recursive: true });
48
+ const outPath = path.join(outDir, "search-index.json");
49
+ fs.writeFileSync(outPath, JSON.stringify(items), "utf-8");
50
+ console.log(`[registry-shell] Wrote search index (${items.length} items) → ${outPath}`);
51
+ }
52
+ //# sourceMappingURL=generate-search-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-search-index.js","sourceRoot":"","sources":["../../src/cli/generate-search-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAUjC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAoB,EACpB,eAAuB;IAEvB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACzB,KAAK,MAAM,CAAA;IAEX,uEAAuE;IACvE,sEAAsE;IACtE,gBAAgB;IAChB,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAA;IAClE,MAAM,QAAQ,GACZ,IAAI,CAAC,qBAAqB,CAG3B,CAAC,kBAAkB,EAAE,CAAA;IAEtB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAA;QACpF,OAAM;IACR,CAAC;IAED,MAAM,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAK5D,CAAA;IACD,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;IAE9C,MAAM,IAAI,GAAiB,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5D,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,SAAS,GAAG,CAAC,IAAI,GAAG;QAC1B,KAAK,EAAE,eAAe;KACvB,CAAC,CAAC,CAAA;IAEH,MAAM,UAAU,GAAiB,OAAO,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,eAAe,IAAI,CAAC,IAAI,GAAG;QACjC,KAAK,EAAE,YAAY;KACpB,CAAC,CAAC,CAAA;IAEH,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,UAAU,CAAC,CAAA;IAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;IAChD,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IACtD,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAA;IAEzD,OAAO,CAAC,GAAG,CACT,wCAAwC,KAAK,CAAC,MAAM,aAAa,OAAO,EAAE,CAC3E,CAAA;AACH,CAAC"}
@@ -3,10 +3,13 @@
3
3
  * @sntlr/registry-shell CLI entry.
4
4
  *
5
5
  * Commands:
6
- * init Scaffold registry-shell.config.ts and add a script to package.json.
7
- * dev Run `next dev` pointed at the user's current directory.
8
- * build Run `next build` pointed at the user's current directory.
9
- * start Run `next start` for a built shell.
6
+ * init Scaffold registry-shell.config.ts and add scripts to package.json.
7
+ * dev Run `next dev` for local iteration on the registry.
8
+ * build Produce a static export in `<user-project>/out/` (Storybook-style).
9
+ *
10
+ * `start` was removed in v2.0.0 — `next build` now produces a static site,
11
+ * so there's no server to "start". Serve `out/` with any static host
12
+ * (`npx serve out`, Vercel, Netlify, S3, etc.).
10
13
  */
11
- declare const USAGE = "Usage: registry-shell <command> [args]\n\nCommands:\n init Scaffold registry-shell.config.ts in the current project.\n dev Start the shell in dev mode on http://localhost:3000.\n build Build the shell for production.\n start Start the production server against a prior build.\n";
14
+ declare const USAGE = "Usage: registry-shell <command> [args]\n\nCommands:\n init Scaffold registry-shell.config.ts in the current project.\n dev Start the shell in dev mode on http://localhost:3000.\n build Produce a static export in ./out (deploy anywhere).\n";
12
15
  declare function main(): Promise<void>;
package/dist/cli/index.js CHANGED
@@ -4,18 +4,20 @@
4
4
  * @sntlr/registry-shell CLI entry.
5
5
  *
6
6
  * Commands:
7
- * init Scaffold registry-shell.config.ts and add a script to package.json.
8
- * dev Run `next dev` pointed at the user's current directory.
9
- * build Run `next build` pointed at the user's current directory.
10
- * start Run `next start` for a built shell.
7
+ * init Scaffold registry-shell.config.ts and add scripts to package.json.
8
+ * dev Run `next dev` for local iteration on the registry.
9
+ * build Produce a static export in `<user-project>/out/` (Storybook-style).
10
+ *
11
+ * `start` was removed in v2.0.0 — `next build` now produces a static site,
12
+ * so there's no server to "start". Serve `out/` with any static host
13
+ * (`npx serve out`, Vercel, Netlify, S3, etc.).
11
14
  */
12
15
  const USAGE = `Usage: registry-shell <command> [args]
13
16
 
14
17
  Commands:
15
18
  init Scaffold registry-shell.config.ts in the current project.
16
19
  dev Start the shell in dev mode on http://localhost:3000.
17
- build Build the shell for production.
18
- start Start the production server against a prior build.
20
+ build Produce a static export in ./out (deploy anywhere).
19
21
  `;
20
22
  async function main() {
21
23
  const [, , cmd, ...args] = process.argv;
@@ -34,8 +36,8 @@ async function main() {
34
36
  await (await import("./build.js")).run(args);
35
37
  break;
36
38
  case "start":
37
- await (await import("./start.js")).run(args);
38
- break;
39
+ console.error("[registry-shell] `start` was removed in v2.0.0. `build` now produces a static site — serve `./out` with any static host (e.g. `npx serve out`).");
40
+ process.exit(1);
39
41
  default:
40
42
  console.error(`Unknown command: ${cmd}\n`);
41
43
  console.log(USAGE);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AACA;;;;;;;;GAQG;AAEH,MAAM,KAAK,GAAG;;;;;;;CAOb,CAAA;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,EAAE,AAAD,EAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAA;IAEvC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM;YACT,MAAM,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC3C,MAAK;QACP,KAAK,KAAK;YACR,MAAM,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC1C,MAAK;QACP,KAAK,OAAO;YACV,MAAM,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC5C,MAAK;QACP,KAAK,OAAO;YACV,MAAM,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC5C,MAAK;QACP;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAA;YAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;GAWG;AAEH,MAAM,KAAK,GAAG;;;;;;CAMb,CAAA;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,EAAE,AAAD,EAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAA;IAEvC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM;YACT,MAAM,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC3C,MAAK;QACP,KAAK,KAAK;YACR,MAAM,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC1C,MAAK;QACP,KAAK,OAAO;YACV,MAAM,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC5C,MAAK;QACP,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CACX,iJAAiJ,CAClJ,CAAA;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAA;YAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
@@ -1,13 +1,3 @@
1
- /**
2
- * Loads the user's `registry-shell.config.ts` at server boot. Uses `jiti` so
3
- * the user doesn't need a build step or TS tooling of their own — the shell
4
- * parses TS on the fly.
5
- *
6
- * Called once at Next.js server startup (see src/next-app/registry.config.ts).
7
- * The returned `ResolvedShellConfig` contains absolute paths and defaults
8
- * applied.
9
- */
10
- import "server-only";
11
1
  import type { BrandingConfig } from "./define-config.js";
12
2
  export interface ResolvedShellConfig {
13
3
  /** Absolute path to the user's registry root (dir containing the config). */
@@ -3,11 +3,15 @@
3
3
  * the user doesn't need a build step or TS tooling of their own — the shell
4
4
  * parses TS on the fly.
5
5
  *
6
- * Called once at Next.js server startup (see src/next-app/registry.config.ts).
6
+ * Called from two places:
7
+ * • Next.js server startup (src/next-app/registry.config.ts) — runtime.
8
+ * • The shell CLI's build pipeline (src/cli/generate-search-index.ts) —
9
+ * pre-build. The CLI runs in plain Node, not inside Next, so we don't
10
+ * use Next's `server-only` guard here.
11
+ *
7
12
  * The returned `ResolvedShellConfig` contains absolute paths and defaults
8
13
  * applied.
9
14
  */
10
- import "server-only";
11
15
  import path from "node:path";
12
16
  import fs from "node:fs";
13
17
  import { createJiti } from "jiti";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sntlr/registry-shell",
3
- "version": "1.1.2",
3
+ "version": "2.0.0",
4
4
  "description": "Generic Next.js viewer for component registries. Drop a registry-shell.config.ts into your registry and get a full docs/components/blocks site on localhost:3000.",
5
5
  "keywords": [
6
6
  "shadcn",
@@ -7,7 +7,6 @@
7
7
  * (see next-app/next.config.ts) because Next's `dynamic()` needs string
8
8
  * literal imports.
9
9
  */
10
- import "server-only"
11
10
  import fs from "node:fs"
12
11
  import path from "node:path"
13
12
  import matter from "gray-matter"