@sntlr/registry-shell 1.1.3 → 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 +26 -28
- package/dist/adapter/default.d.ts +0 -10
- package/dist/adapter/default.js +0 -1
- package/dist/adapter/default.js.map +1 -1
- package/dist/cli/build.js +80 -33
- package/dist/cli/build.js.map +1 -1
- package/dist/cli/dev.js +38 -1
- package/dist/cli/dev.js.map +1 -1
- package/dist/cli/generate-search-index.d.ts +8 -0
- package/dist/cli/generate-search-index.js +52 -0
- package/dist/cli/generate-search-index.js.map +1 -0
- package/dist/cli/index.d.ts +8 -5
- package/dist/cli/index.js +10 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/config-loader.d.ts +0 -10
- package/dist/config-loader.js +6 -2
- package/package.json +1 -1
- package/src/adapter/default.ts +0 -1
- package/src/cli/build.ts +96 -35
- package/src/cli/dev.ts +42 -1
- package/src/cli/generate-search-index.ts +82 -0
- package/src/cli/index.ts +12 -8
- package/src/config-loader.ts +6 -2
- package/src/next-app/components/search.tsx +1 -1
- package/src/next-app/next.config.ts +13 -8
- package/dist/cli/start.d.ts +0 -1
- package/dist/cli/start.js +0 -47
- package/dist/cli/start.js.map +0 -1
- package/src/cli/start.ts +0 -57
- package/src/next-app/app/[...asset]/route.ts +0 -81
- package/src/next-app/app/a11y/[name]/route.ts +0 -19
- package/src/next-app/app/api/search-index/route.ts +0 -19
- package/src/next-app/app/props/[name]/route.ts +0 -19
- package/src/next-app/app/r/[name]/route.ts +0 -14
- package/src/next-app/app/tests/[name]/route.ts +0 -19
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` |
|
|
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
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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;
|
package/dist/adapter/default.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/adapter/default.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/adapter/default.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,MAAM,MAAM,aAAa,CAAA;AA0BhC,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAA6B;IAChE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAA;IAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAA;IACpC,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAA;IAE5C,8DAA8D;IAC9D,SAAS,WAAW;QAClB,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAA;QACrD,OAAO,EAAE;aACN,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aAChD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;aAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IAED,kFAAkF;IAClF,SAAS,SAAS,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACtC,CAAC;IAED,SAAS,gBAAgB;QACvB,MAAM,KAAK,GAAoB,EAAE,CAAA;QAEjC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,QAAQ,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC1F,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;YACjE,CAAC;QACH,CAAC;QAED,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBACxE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,SAAQ;gBAClE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;YAC3E,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED,SAAS,UAAU;QACjB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAA;QAEzC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,CAAA;YACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO,EAAE,CAAA;YAClC,MAAM,YAAY,GAAG,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAAA;YAErE,OAAO,EAAE;iBACN,WAAW,CAAC,GAAG,CAAC;iBAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;iBACjC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAChB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;gBAC3E,MAAM,MAAM,GAA2B,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAA;gBAE9E,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAA;oBAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;wBAAE,SAAQ;oBAC/B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;oBAC7D,IAAI,OAAO,CAAC,KAAK;wBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAA;gBAChD,CAAC;gBAED,OAAO;oBACL,IAAI;oBACJ,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;oBACzB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;oBACnC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG;oBACxB,MAAM;iBACP,CAAA;YACH,CAAC,CAAC;iBACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;QACtC,CAAC;QAED,uDAAuD;QACvD,OAAO,EAAE;aACN,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACjC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;YAClF,OAAO;gBACL,IAAI;gBACJ,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;gBACnC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG;gBACxB,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;aACnC,CAAA;QACH,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC;IAED,SAAS,YAAY,CAAC,IAAY,EAAE,MAAe;QACjD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAA;YACxE,MAAM,UAAU,GAAG;gBACjB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,MAAM,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,GAAG,IAAI,MAAM,CAAC;aACnD,CAAA;YACD,OAAO,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QACtC,CAAC;QAED,sEAAsE;QACtE,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAA;IAClE,CAAC;IAED,SAAS,gBAAgB,CAAC,IAAY;QACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAA;QAEzC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,GAA2B,EAAE,CAAA;YACtC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,EAAE,CAAC;gBAChC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,MAAM,CAAC,CAAA;gBAClD,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrB,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAA;gBACxD,CAAC;YACH,CAAC;YACD,OAAO,GAAG,CAAA;QACZ,CAAC;QAED,uEAAuE;QACvE,kEAAkE;QAClE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,CAAA;QAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAA;QAChC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;IAC5D,CAAC;IAED,SAAS,kBAAkB,CAAC,IAAY;QACtC,MAAM,UAAU,GAAG;YACjB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,MAAM,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC;SAC7C,CAAA;QACD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QAC1D,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,UAAU,eAAe,CAAC,IAAY;QACzC,OAAO,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC;IAED,KAAK,UAAU,WAAW,CAAC,IAAY;QACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,UAAU,WAAW,CAAC,IAAY;QACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACpC,CAAC;IAED,KAAK,UAAU,YAAY,CAAC,IAAY;QACtC,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACpC,CAAC;IAED,OAAO;QACL,gBAAgB;QAChB,UAAU;QACV,YAAY;QACZ,gBAAgB;QAChB,kBAAkB;QAClB,eAAe;QACf,WAAW;QACX,WAAW;QACX,YAAY;QACZ,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;KAC9C,CAAA;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,IAAY;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,CAAA;IAC/C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,SAAS,WAAW,CAAC,IAAY,EAAE,UAAoB;IACrD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,SAAQ;QAC/B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;QAC7D,OAAO;YACL,IAAI,EAAE;gBACJ,IAAI;gBACJ,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;gBACnC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG;aACzB;YACD,OAAO;SACR,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
package/dist/cli/build.js
CHANGED
|
@@ -1,58 +1,105 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `registry-shell build` —
|
|
2
|
+
* `registry-shell build` — produces a Next.js static export tree in
|
|
3
|
+
* `<user-project>/out/`.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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
|
-
|
|
25
|
-
|
|
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
|
-
|
|
30
|
-
|
|
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
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
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
|
|
41
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
package/dist/cli/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"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"}
|
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",
|
|
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
|
package/dist/cli/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAAA
|
|
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"}
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -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
|
|
7
|
-
* dev Run `next dev`
|
|
8
|
-
* build
|
|
9
|
-
*
|
|
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
|
|
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
|
|
8
|
-
* dev Run `next dev`
|
|
9
|
-
* build
|
|
10
|
-
*
|
|
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
|
|
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
|
-
|
|
38
|
-
|
|
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);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AACA
|
|
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"}
|
package/dist/config-loader.d.ts
CHANGED
|
@@ -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). */
|
package/dist/config-loader.js
CHANGED
|
@@ -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
|
|
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": "
|
|
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",
|