@gridland/web 0.2.26 → 0.2.28
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/dist/core-shims.js +46163 -0
- package/dist/core-shims.js.map +7 -0
- package/dist/index.js +11 -6
- package/dist/index.js.map +3 -3
- package/dist/next-plugin.cjs +38 -31
- package/dist/next-plugin.cjs.map +1 -1
- package/dist/next-plugin.d.cts +4 -2
- package/dist/next-plugin.d.ts +4 -2
- package/dist/next-plugin.js +38 -31
- package/dist/next-plugin.js.map +1 -1
- package/dist/next.js +11 -6
- package/dist/next.js.map +3 -3
- package/dist/vite-plugin.d.ts +11 -6
- package/dist/vite-plugin.js +27 -43
- package/dist/vite-plugin.js.map +1 -1
- package/package.json +2 -2
- package/src/shims/zig-stub.ts +0 -20
package/dist/vite-plugin.d.ts
CHANGED
|
@@ -2,13 +2,18 @@ import { Plugin } from 'vite';
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Vite plugin that sets up module resolution for Gridland.
|
|
5
|
-
* Handles:
|
|
6
|
-
* - Redirecting Zig/FFI imports to browser shims
|
|
7
|
-
* - Resolving @opentui/core, @opentui/react, @opentui/ui
|
|
8
|
-
* - Shimming Node.js built-ins
|
|
9
|
-
* - Breaking circular dependencies
|
|
10
5
|
*
|
|
11
|
-
*
|
|
6
|
+
* In **npm mode** (published packages), @gridland/core resolves via its
|
|
7
|
+
* package.json conditional exports ("import" → dist/browser.js, which is
|
|
8
|
+
* browser-safe). No aliasing needed.
|
|
9
|
+
*
|
|
10
|
+
* In **source mode** (monorepo with opentui submodule), the plugin handles
|
|
11
|
+
* @opentui/* resolution, file-level browser shims for native-backed classes,
|
|
12
|
+
* tree-sitter stubs, node built-in stubs, and circular dependency fixes.
|
|
13
|
+
*
|
|
14
|
+
* Since @opentui/core's index.ts no longer exports native-only modules
|
|
15
|
+
* (zig, renderer, console, NativeSpanFeed), those shims are not needed.
|
|
16
|
+
* Consumer modules import from zig-registry.ts (browser-safe) instead of zig.ts.
|
|
12
17
|
*/
|
|
13
18
|
declare function gridlandWebPlugin(): Plugin[];
|
|
14
19
|
|
package/dist/vite-plugin.js
CHANGED
|
@@ -32,21 +32,16 @@ function gridlandWebPlugin() {
|
|
|
32
32
|
const reactRoot = resolvePackageRoot("@opentui/react", "../../opentui/packages/react");
|
|
33
33
|
const uiRoot = resolvePackageRoot("@opentui/ui", "../../opentui/packages/ui");
|
|
34
34
|
const hasSource = existsSync(path.resolve(reactRoot, "src/index.ts"));
|
|
35
|
-
const coreShims = path.resolve(pkgRoot, "src/core-shims/index.ts");
|
|
36
35
|
const opentuiCoreBarrel = path.resolve(coreRoot, "src/index.ts");
|
|
37
36
|
const sliderDeps = path.resolve(pkgRoot, "src/shims/slider-deps.ts");
|
|
38
37
|
const sliderFile = path.resolve(coreRoot, "src/renderables/Slider.ts");
|
|
39
38
|
const coreFileShims = {
|
|
40
|
-
zig: "src/shims/zig-stub.ts",
|
|
41
39
|
buffer: "src/browser-buffer.ts",
|
|
42
40
|
"text-buffer": "src/shims/text-buffer-shim.ts",
|
|
43
41
|
"text-buffer-view": "src/shims/text-buffer-view-shim.ts",
|
|
44
42
|
"syntax-style": "src/shims/syntax-style-shim.ts",
|
|
45
|
-
renderer: "src/shims/renderer-stub.ts",
|
|
46
|
-
console: "src/shims/console-stub.ts",
|
|
47
43
|
"edit-buffer": "src/shims/edit-buffer-stub.ts",
|
|
48
44
|
"editor-view": "src/shims/editor-view-stub.ts",
|
|
49
|
-
NativeSpanFeed: "src/shims/native-span-feed-stub.ts",
|
|
50
45
|
"post/filters": "src/shims/filters-stub.ts",
|
|
51
46
|
"animation/Timeline": "src/shims/timeline-stub.ts"
|
|
52
47
|
};
|
|
@@ -83,31 +78,27 @@ function gridlandWebPlugin() {
|
|
|
83
78
|
resolveId(source, importer) {
|
|
84
79
|
if (!importer) return null;
|
|
85
80
|
if (importer.startsWith(NPM_REDIRECT)) return null;
|
|
81
|
+
if (!hasSource) return null;
|
|
86
82
|
const isExternalOpentui = importer.startsWith(coreRoot + path.sep) || importer.startsWith(reactRoot + path.sep) || importer.startsWith(uiRoot + path.sep) || importer.includes("/@opentui/core/") || importer.includes("/@opentui/react/") || importer.includes("/@opentui/ui/");
|
|
87
|
-
if (
|
|
83
|
+
if (source === "../index" && importer === sliderFile) {
|
|
88
84
|
return sliderDeps;
|
|
89
85
|
}
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
const subpath = parts.slice(2).join("/");
|
|
107
|
-
if (subpath) {
|
|
108
|
-
const root = pkgRoots[pkgName];
|
|
109
|
-
if (root) return path.resolve(root, subpath + ".js");
|
|
110
|
-
}
|
|
86
|
+
if (source === "@opentui/ui") {
|
|
87
|
+
return path.resolve(uiRoot, "src/index.ts");
|
|
88
|
+
}
|
|
89
|
+
if (source === "@opentui/react") {
|
|
90
|
+
return path.resolve(reactRoot, "src/index.ts");
|
|
91
|
+
}
|
|
92
|
+
if (source === "@opentui/core") {
|
|
93
|
+
return opentuiCoreBarrel;
|
|
94
|
+
}
|
|
95
|
+
if (source.startsWith("@opentui/")) {
|
|
96
|
+
const parts = source.split("/");
|
|
97
|
+
const pkgName = parts[1];
|
|
98
|
+
const subpath = parts.slice(2).join("/");
|
|
99
|
+
if (subpath) {
|
|
100
|
+
const root = pkgRoots[pkgName];
|
|
101
|
+
if (root) return path.resolve(root, subpath + ".js");
|
|
111
102
|
}
|
|
112
103
|
}
|
|
113
104
|
if (source.startsWith(".") && isExternalOpentui) {
|
|
@@ -116,12 +107,10 @@ function gridlandWebPlugin() {
|
|
|
116
107
|
if (resolved.endsWith("devtools-polyfill")) {
|
|
117
108
|
return path.resolve(pkgRoot, "src/shims/devtools-polyfill-stub.ts");
|
|
118
109
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if (indexShim) return indexShim;
|
|
124
|
-
}
|
|
110
|
+
const shim = resolvedCoreShims.get(resolved) || resolvedCoreShims.get(resolved + ".ts");
|
|
111
|
+
if (shim) return shim;
|
|
112
|
+
const indexShim = resolvedCoreShims.get(resolved + "/index.ts");
|
|
113
|
+
if (indexShim) return indexShim;
|
|
125
114
|
}
|
|
126
115
|
if (isExternalOpentui) {
|
|
127
116
|
if (source.endsWith(".scm") || source.endsWith(".wasm")) {
|
|
@@ -141,7 +130,7 @@ function gridlandWebPlugin() {
|
|
|
141
130
|
if (nodeShims[source] && isExternalOpentui) {
|
|
142
131
|
return path.resolve(pkgRoot, nodeShims[source]);
|
|
143
132
|
}
|
|
144
|
-
if (
|
|
133
|
+
if (!source.startsWith(".") && !source.startsWith("/") && !source.startsWith("@opentui/") && isExternalOpentui) {
|
|
145
134
|
return NPM_REDIRECT + source;
|
|
146
135
|
}
|
|
147
136
|
return null;
|
|
@@ -182,12 +171,13 @@ function gridlandWebPlugin() {
|
|
|
182
171
|
name: "gridland-web-aliases",
|
|
183
172
|
config() {
|
|
184
173
|
const aliases = {};
|
|
185
|
-
aliases["@opentui/core"] = coreShims;
|
|
186
174
|
aliases["bun:ffi"] = path.resolve(pkgRoot, "src/shims/bun-ffi.ts");
|
|
187
175
|
aliases["bun-ffi-structs"] = path.resolve(pkgRoot, "src/shims/bun-ffi-structs.ts");
|
|
188
176
|
aliases["node:console"] = path.resolve(pkgRoot, "src/shims/console.ts");
|
|
189
|
-
|
|
190
|
-
|
|
177
|
+
if (hasSource) {
|
|
178
|
+
for (const [key, shimPath] of Object.entries(coreFileShims)) {
|
|
179
|
+
aliases[path.resolve(coreRoot, "src", key)] = path.resolve(pkgRoot, shimPath);
|
|
180
|
+
}
|
|
191
181
|
}
|
|
192
182
|
for (const pkg of ["react-reconciler", "yoga-layout", "diff", "marked"]) {
|
|
193
183
|
try {
|
|
@@ -205,10 +195,6 @@ function gridlandWebPlugin() {
|
|
|
205
195
|
dedupe: ["react", "react-dom", "react-reconciler", "yoga-layout", "events"]
|
|
206
196
|
},
|
|
207
197
|
optimizeDeps: {
|
|
208
|
-
// Pre-bundle npm packages imported by external opentui monorepo code.
|
|
209
|
-
// These are resolved via virtual module redirects, so Vite's initial
|
|
210
|
-
// crawl won't discover them — they must be listed explicitly.
|
|
211
|
-
// Only needed in source mode; compiled npm packages are discovered normally.
|
|
212
198
|
include: hasSource ? [
|
|
213
199
|
"react",
|
|
214
200
|
"react-dom",
|
|
@@ -224,8 +210,6 @@ function gridlandWebPlugin() {
|
|
|
224
210
|
},
|
|
225
211
|
server: {
|
|
226
212
|
fs: {
|
|
227
|
-
// Allow serving from opentui source dirs (for dev-from-source).
|
|
228
|
-
// Use strict: false so Vite's default allow list (project root) is preserved.
|
|
229
213
|
strict: false
|
|
230
214
|
}
|
|
231
215
|
}
|
package/dist/vite-plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vite-plugin.ts"],"sourcesContent":["import { type Plugin } from \"vite\"\nimport path from \"path\"\nimport { existsSync } from \"fs\"\nimport { createRequire } from \"module\"\nimport { fileURLToPath } from \"url\"\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = path.dirname(__filename)\n\n/**\n * Vite plugin that sets up module resolution for Gridland.\n * Handles:\n * - Redirecting Zig/FFI imports to browser shims\n * - Resolving @opentui/core, @opentui/react, @opentui/ui\n * - Shimming Node.js built-ins\n * - Breaking circular dependencies\n *\n * Requires @opentui/core, @opentui/react, and @opentui/ui as peer dependencies.\n */\nexport function gridlandWebPlugin(): Plugin[] {\n const pkgRoot = path.resolve(__dirname, \"..\")\n const _require = createRequire(path.resolve(pkgRoot, \"package.json\"))\n // Separate require for resolving opentui packages from the consumer project's\n // node_modules (not from @gridland/web's location, which may differ when\n // using file: links or in monorepo setups).\n const _projectRequire = createRequire(path.resolve(process.cwd(), \"package.json\"))\n\n // Resolve opentui package roots — try installed packages first,\n // fall back to git submodule for monorepo development.\n // Some packages restrict their exports map (no ./package.json),\n // so we try the main entry point as a fallback.\n function resolvePackageRoot(pkg: string, fallbackRelative: string): string {\n // Try multiple require contexts: project-level first (for consumer apps),\n // then @gridland/web-level (for monorepo dev). This ensures we find\n // packages in the consumer's node_modules, not just our own.\n for (const req of [_projectRequire, _require]) {\n try {\n const pkgJson = req.resolve(`${pkg}/package.json`)\n return path.dirname(pkgJson)\n } catch {\n try {\n // Package exists but doesn't expose package.json in exports map.\n // Resolve the main entry and derive the root from it.\n const entry = req.resolve(pkg)\n let dir = path.dirname(entry)\n for (let i = 0; i < 5; i++) {\n if (existsSync(path.join(dir, \"package.json\"))) return dir\n dir = path.dirname(dir)\n }\n } catch {\n // Package not installed in this context\n }\n }\n }\n return path.resolve(pkgRoot, fallbackRelative)\n }\n const coreRoot = resolvePackageRoot(\"@opentui/core\", \"../../opentui/packages/core\")\n const reactRoot = resolvePackageRoot(\"@opentui/react\", \"../../opentui/packages/react\")\n const uiRoot = resolvePackageRoot(\"@opentui/ui\", \"../../opentui/packages/ui\")\n\n // Detect whether opentui packages have TypeScript source (monorepo/submodule)\n // or only compiled JS (npm install). When source is available, we resolve\n // imports to .ts files and apply shims. Otherwise, let Vite handle them normally.\n const hasSource = existsSync(path.resolve(reactRoot, \"src/index.ts\"))\n\n const coreShims = path.resolve(pkgRoot, \"src/core-shims/index.ts\")\n const opentuiCoreBarrel = path.resolve(coreRoot, \"src/index.ts\")\n const sliderDeps = path.resolve(pkgRoot, \"src/shims/slider-deps.ts\")\n const sliderFile = path.resolve(coreRoot, \"src/renderables/Slider.ts\")\n\n // Map of opentui source files that need browser shims\n const coreFileShims: Record<string, string> = {\n zig: \"src/shims/zig-stub.ts\",\n buffer: \"src/browser-buffer.ts\",\n \"text-buffer\": \"src/shims/text-buffer-shim.ts\",\n \"text-buffer-view\": \"src/shims/text-buffer-view-shim.ts\",\n \"syntax-style\": \"src/shims/syntax-style-shim.ts\",\n renderer: \"src/shims/renderer-stub.ts\",\n console: \"src/shims/console-stub.ts\",\n \"edit-buffer\": \"src/shims/edit-buffer-stub.ts\",\n \"editor-view\": \"src/shims/editor-view-stub.ts\",\n NativeSpanFeed: \"src/shims/native-span-feed-stub.ts\",\n \"post/filters\": \"src/shims/filters-stub.ts\",\n \"animation/Timeline\": \"src/shims/timeline-stub.ts\",\n }\n\n const resolvedCoreShims = new Map<string, string>()\n for (const [key, shimPath] of Object.entries(coreFileShims)) {\n const absoluteTarget = path.resolve(coreRoot, \"src\", key + \".ts\")\n resolvedCoreShims.set(absoluteTarget, path.resolve(pkgRoot, shimPath))\n }\n\n const treeStub = path.resolve(pkgRoot, \"src/shims/tree-sitter-stub.ts\")\n const styledTextStub = path.resolve(pkgRoot, \"src/shims/tree-sitter-styled-text-stub.ts\")\n\n // Lookup tables hoisted out of resolveId to avoid per-call allocation\n const pkgRoots: Record<string, string> = { core: coreRoot, react: reactRoot, ui: uiRoot }\n\n const nodeShims: Record<string, string> = {\n \"node:buffer\": \"src/shims/node-buffer.ts\",\n \"node:path\": \"src/shims/node-path.ts\",\n path: \"src/shims/node-path.ts\",\n \"node:fs\": \"src/shims/node-fs.ts\",\n fs: \"src/shims/node-fs.ts\",\n \"fs/promises\": \"src/shims/node-fs.ts\",\n \"node:util\": \"src/shims/node-util.ts\",\n util: \"src/shims/node-util.ts\",\n os: \"src/shims/node-os.ts\",\n \"node:os\": \"src/shims/node-os.ts\",\n stream: \"src/shims/node-stream.ts\",\n \"node:stream\": \"src/shims/node-stream.ts\",\n url: \"src/shims/node-url.ts\",\n \"node:url\": \"src/shims/node-url.ts\",\n console: \"src/shims/console.ts\",\n bun: \"src/shims/bun-ffi.ts\",\n }\n\n // Virtual module prefix for npm package redirects.\n // When external opentui code imports a bare npm package (e.g. \"react\"),\n // we can't return the raw file path because Vite would serve it via /@fs/\n // without CJS-to-ESM conversion. Instead, we return a virtual module that\n // re-exports from the bare package name, which Vite processes through its\n // normal pre-bundling pipeline (including CJS conversion).\n const NPM_REDIRECT = \"\\0npm-redirect:\"\n\n const shimPlugin: Plugin = {\n name: \"gridland-web-shims\",\n enforce: \"pre\",\n resolveId(source, importer) {\n if (!importer) return null\n\n // Virtual module redirects should not be re-intercepted\n if (importer.startsWith(NPM_REDIRECT)) return null\n\n // Check if importer is in an opentui package.\n // Use both resolved root paths AND path-based matching to handle\n // multiple copies (e.g. bun's cache when using file: links).\n const isExternalOpentui =\n importer.startsWith(coreRoot + path.sep) ||\n importer.startsWith(reactRoot + path.sep) ||\n importer.startsWith(uiRoot + path.sep) ||\n importer.includes(\"/@opentui/core/\") ||\n importer.includes(\"/@opentui/react/\") ||\n importer.includes(\"/@opentui/ui/\")\n\n // Source-mode-only shims: slider circular dep fix, relative import\n // shims, tree-sitter stubs, and node built-in stubs only apply when\n // processing opentui TypeScript source (monorepo/submodule).\n // Compiled npm packages have these already resolved.\n\n // Slider circular dep fix\n if (hasSource && source === \"../index\" && importer === sliderFile) {\n return sliderDeps\n }\n\n // Resolve @opentui packages — only intercept when we have source files.\n // When using npm-installed packages (compiled JS), let Vite resolve normally.\n if (hasSource) {\n if (source === \"@opentui/ui\") {\n return path.resolve(uiRoot, \"src/index.ts\")\n }\n if (source === \"@opentui/react\") {\n return path.resolve(reactRoot, \"src/index.ts\")\n }\n\n // @opentui/core routing\n if (source === \"@opentui/core\") {\n if (importer.startsWith(reactRoot + path.sep)) {\n return opentuiCoreBarrel\n }\n return coreShims\n }\n\n // @opentui/* subpath imports (e.g. @opentui/react/jsx-dev-runtime)\n if (source.startsWith(\"@opentui/\")) {\n const parts = source.split(\"/\")\n const pkgName = parts[1] // \"react\", \"core\", \"ui\"\n const subpath = parts.slice(2).join(\"/\") // \"jsx-dev-runtime\"\n if (subpath) {\n const root = pkgRoots[pkgName]\n if (root) return path.resolve(root, subpath + \".js\")\n }\n }\n }\n\n // Relative imports from opentui tree → check shims\n if (source.startsWith(\".\") && isExternalOpentui) {\n const importerDir = path.dirname(importer)\n const resolved = path.resolve(importerDir, source)\n // Devtools polyfill stub (uses top-level await for ws import)\n if (resolved.endsWith(\"devtools-polyfill\")) {\n return path.resolve(pkgRoot, \"src/shims/devtools-polyfill-stub.ts\")\n }\n // Source-mode shims for core files (only when processing TS source)\n if (hasSource) {\n const shim = resolvedCoreShims.get(resolved) || resolvedCoreShims.get(resolved + \".ts\")\n if (shim) return shim\n const indexShim = resolvedCoreShims.get(resolved + \"/index.ts\")\n if (indexShim) return indexShim\n }\n }\n\n // Tree-sitter and related stubs — needed in both source and npm mode\n // since the compiled @opentui/core still imports these\n if (isExternalOpentui) {\n // Stub .scm and .wasm asset imports first (before tree-sitter name match)\n if (source.endsWith(\".scm\") || source.endsWith(\".wasm\")) {\n return \"\\0opentui-asset-stub\"\n }\n if (source.includes(\"tree-sitter\")) {\n if (source.includes(\"tree-sitter-styled-text\")) return styledTextStub\n return treeStub\n }\n if (source.includes(\"hast-styled-text\")) {\n return path.resolve(pkgRoot, \"src/shims/hast-stub.ts\")\n }\n }\n\n // Events shim — applies to ALL importers (browser-compatible EventEmitter)\n if (source === \"events\") {\n return path.resolve(pkgRoot, \"src/shims/events-shim.ts\")\n }\n\n // Node.js built-in stubs — needed in both modes since compiled\n // @opentui/core still imports node builtins\n if (nodeShims[source] && isExternalOpentui) {\n return path.resolve(pkgRoot, nodeShims[source])\n }\n\n // Redirect bare npm imports from external opentui to virtual modules (source mode only)\n if (hasSource && !source.startsWith(\".\") && !source.startsWith(\"/\") && !source.startsWith(\"@opentui/\") && isExternalOpentui) {\n return NPM_REDIRECT + source\n }\n\n return null\n },\n load(id) {\n // Stub for .scm/.wasm asset imports from compiled opentui packages\n if (id === \"\\0opentui-asset-stub\") {\n return \"export default null;\"\n }\n if (id.startsWith(NPM_REDIRECT)) {\n const pkg = id.slice(NPM_REDIRECT.length)\n // Discover export names by require()-ing the module at build time.\n // We use `import * as __ns` (namespace import) which works for both\n // ESM packages (named exports on namespace) and CJS packages\n // (pre-bundled with only a default export, properties on __ns.default).\n // Each property checks both locations with a fallback.\n // NOTE: We use bare specifiers (not resolved paths) so Vite routes\n // these through its pre-bundling pipeline for CJS-to-ESM conversion.\n try {\n const mod = _require(pkg)\n if (typeof mod === \"object\" && mod !== null) {\n const names = Object.keys(mod).filter(\n (k) => k !== \"default\" && k !== \"__esModule\" && /^[a-zA-Z_$][\\w$]*$/.test(k),\n )\n if (names.length > 0) {\n return [\n `import * as __ns from \"${pkg}\";`,\n `export default __ns.default ?? __ns;`,\n ...names.map(\n (n) => `export const ${n} = __ns[\"${n}\"] ?? __ns.default?.[\"${n}\"];`,\n ),\n ].join(\"\\n\")\n }\n }\n } catch {\n // Fall through to generic approach\n }\n // Fallback for packages we can't introspect\n return [\n `export * from \"${pkg}\";`,\n `import * as __ns from \"${pkg}\";`,\n `export default __ns.default ?? __ns;`,\n ].join(\"\\n\")\n }\n },\n }\n\n const aliasPlugin: Plugin = {\n name: \"gridland-web-aliases\",\n config() {\n const aliases: Record<string, string> = {}\n\n // @opentui/core → browser shims (prevents esbuild dep optimizer from\n // trying to pre-bundle the real @opentui/core which uses unsupported\n // import attributes like `with { type: \"file\" }`)\n aliases[\"@opentui/core\"] = coreShims\n\n // FFI shims\n aliases[\"bun:ffi\"] = path.resolve(pkgRoot, \"src/shims/bun-ffi.ts\")\n aliases[\"bun-ffi-structs\"] = path.resolve(pkgRoot, \"src/shims/bun-ffi-structs.ts\")\n aliases[\"node:console\"] = path.resolve(pkgRoot, \"src/shims/console.ts\")\n\n // Core file shims as aliases too\n for (const [key, shimPath] of Object.entries(coreFileShims)) {\n aliases[path.resolve(coreRoot, \"src\", key)] = path.resolve(pkgRoot, shimPath)\n }\n\n // Resolve npm packages from @gridland/web's dependency tree so\n // consuming projects don't need them as direct dependencies.\n // Uses _require to find the actual installed location (handles\n // hoisted node_modules). Directory aliases let subpath imports\n // (e.g. react-reconciler/constants) work via Vite's prefix\n // matching, and ensure CJS packages go through pre-bundling.\n for (const pkg of [\"react-reconciler\", \"yoga-layout\", \"diff\", \"marked\"]) {\n try {\n aliases[pkg] = path.dirname(_require.resolve(pkg + \"/package.json\"))\n } catch {\n aliases[pkg] = path.resolve(pkgRoot, \"node_modules\", pkg)\n }\n }\n\n return {\n define: {\n \"process.env\": JSON.stringify({}),\n },\n resolve: {\n alias: aliases,\n dedupe: [\"react\", \"react-dom\", \"react-reconciler\", \"yoga-layout\", \"events\"],\n },\n optimizeDeps: {\n // Pre-bundle npm packages imported by external opentui monorepo code.\n // These are resolved via virtual module redirects, so Vite's initial\n // crawl won't discover them — they must be listed explicitly.\n // Only needed in source mode; compiled npm packages are discovered normally.\n include: hasSource ? [\n \"react\",\n \"react-dom\",\n \"react-reconciler\",\n \"react-reconciler/constants\",\n \"diff\",\n \"yoga-layout\",\n \"marked\",\n ] : [\n \"react\",\n \"react-dom\",\n ],\n },\n server: {\n fs: {\n // Allow serving from opentui source dirs (for dev-from-source).\n // Use strict: false so Vite's default allow list (project root) is preserved.\n strict: false,\n },\n },\n }\n },\n }\n\n return [shimPlugin, aliasPlugin]\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/vite-plugin.ts"],"sourcesContent":["import { type Plugin } from \"vite\"\nimport path from \"path\"\nimport { existsSync } from \"fs\"\nimport { createRequire } from \"module\"\nimport { fileURLToPath } from \"url\"\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = path.dirname(__filename)\n\n/**\n * Vite plugin that sets up module resolution for Gridland.\n *\n * In **npm mode** (published packages), @gridland/core resolves via its\n * package.json conditional exports (\"import\" → dist/browser.js, which is\n * browser-safe). No aliasing needed.\n *\n * In **source mode** (monorepo with opentui submodule), the plugin handles\n * @opentui/* resolution, file-level browser shims for native-backed classes,\n * tree-sitter stubs, node built-in stubs, and circular dependency fixes.\n *\n * Since @opentui/core's index.ts no longer exports native-only modules\n * (zig, renderer, console, NativeSpanFeed), those shims are not needed.\n * Consumer modules import from zig-registry.ts (browser-safe) instead of zig.ts.\n */\nexport function gridlandWebPlugin(): Plugin[] {\n const pkgRoot = path.resolve(__dirname, \"..\")\n const _require = createRequire(path.resolve(pkgRoot, \"package.json\"))\n const _projectRequire = createRequire(path.resolve(process.cwd(), \"package.json\"))\n\n // Resolve opentui package roots\n function resolvePackageRoot(pkg: string, fallbackRelative: string): string {\n for (const req of [_projectRequire, _require]) {\n try {\n const pkgJson = req.resolve(`${pkg}/package.json`)\n return path.dirname(pkgJson)\n } catch {\n try {\n const entry = req.resolve(pkg)\n let dir = path.dirname(entry)\n for (let i = 0; i < 5; i++) {\n if (existsSync(path.join(dir, \"package.json\"))) return dir\n dir = path.dirname(dir)\n }\n } catch {\n // Package not installed in this context\n }\n }\n }\n return path.resolve(pkgRoot, fallbackRelative)\n }\n const coreRoot = resolvePackageRoot(\"@opentui/core\", \"../../opentui/packages/core\")\n const reactRoot = resolvePackageRoot(\"@opentui/react\", \"../../opentui/packages/react\")\n const uiRoot = resolvePackageRoot(\"@opentui/ui\", \"../../opentui/packages/ui\")\n\n // Detect whether opentui TypeScript source is available (monorepo/submodule)\n const hasSource = existsSync(path.resolve(reactRoot, \"src/index.ts\"))\n\n const opentuiCoreBarrel = path.resolve(coreRoot, \"src/index.ts\")\n const sliderDeps = path.resolve(pkgRoot, \"src/shims/slider-deps.ts\")\n const sliderFile = path.resolve(coreRoot, \"src/renderables/Slider.ts\")\n\n // File-level shims: replace native-backed opentui classes with browser implementations.\n // Only needed for classes that delegate to RenderLib via pointer-based FFI calls.\n // NOT needed for: zig (zig-registry.ts is browser-safe), renderer, console,\n // NativeSpanFeed (no longer in browser barrel).\n const coreFileShims: Record<string, string> = {\n buffer: \"src/browser-buffer.ts\",\n \"text-buffer\": \"src/shims/text-buffer-shim.ts\",\n \"text-buffer-view\": \"src/shims/text-buffer-view-shim.ts\",\n \"syntax-style\": \"src/shims/syntax-style-shim.ts\",\n \"edit-buffer\": \"src/shims/edit-buffer-stub.ts\",\n \"editor-view\": \"src/shims/editor-view-stub.ts\",\n \"post/filters\": \"src/shims/filters-stub.ts\",\n \"animation/Timeline\": \"src/shims/timeline-stub.ts\",\n }\n\n const resolvedCoreShims = new Map<string, string>()\n for (const [key, shimPath] of Object.entries(coreFileShims)) {\n const absoluteTarget = path.resolve(coreRoot, \"src\", key + \".ts\")\n resolvedCoreShims.set(absoluteTarget, path.resolve(pkgRoot, shimPath))\n }\n\n const treeStub = path.resolve(pkgRoot, \"src/shims/tree-sitter-stub.ts\")\n const styledTextStub = path.resolve(pkgRoot, \"src/shims/tree-sitter-styled-text-stub.ts\")\n\n const pkgRoots: Record<string, string> = { core: coreRoot, react: reactRoot, ui: uiRoot }\n\n const nodeShims: Record<string, string> = {\n \"node:buffer\": \"src/shims/node-buffer.ts\",\n \"node:path\": \"src/shims/node-path.ts\",\n path: \"src/shims/node-path.ts\",\n \"node:fs\": \"src/shims/node-fs.ts\",\n fs: \"src/shims/node-fs.ts\",\n \"fs/promises\": \"src/shims/node-fs.ts\",\n \"node:util\": \"src/shims/node-util.ts\",\n util: \"src/shims/node-util.ts\",\n os: \"src/shims/node-os.ts\",\n \"node:os\": \"src/shims/node-os.ts\",\n stream: \"src/shims/node-stream.ts\",\n \"node:stream\": \"src/shims/node-stream.ts\",\n url: \"src/shims/node-url.ts\",\n \"node:url\": \"src/shims/node-url.ts\",\n console: \"src/shims/console.ts\",\n bun: \"src/shims/bun-ffi.ts\",\n }\n\n const NPM_REDIRECT = \"\\0npm-redirect:\"\n\n const shimPlugin: Plugin = {\n name: \"gridland-web-shims\",\n enforce: \"pre\",\n resolveId(source, importer) {\n if (!importer) return null\n if (importer.startsWith(NPM_REDIRECT)) return null\n\n // ── Source mode only ──────────────────────────────────────────\n if (!hasSource) return null\n\n const isExternalOpentui =\n importer.startsWith(coreRoot + path.sep) ||\n importer.startsWith(reactRoot + path.sep) ||\n importer.startsWith(uiRoot + path.sep) ||\n importer.includes(\"/@opentui/core/\") ||\n importer.includes(\"/@opentui/react/\") ||\n importer.includes(\"/@opentui/ui/\")\n\n // Slider circular dep fix\n if (source === \"../index\" && importer === sliderFile) {\n return sliderDeps\n }\n\n // Resolve @opentui packages\n if (source === \"@opentui/ui\") {\n return path.resolve(uiRoot, \"src/index.ts\")\n }\n if (source === \"@opentui/react\") {\n return path.resolve(reactRoot, \"src/index.ts\")\n }\n if (source === \"@opentui/core\") {\n // All consumers get the real barrel — it's browser-safe now.\n return opentuiCoreBarrel\n }\n\n // @opentui/* subpath imports (e.g. @opentui/react/jsx-dev-runtime)\n if (source.startsWith(\"@opentui/\")) {\n const parts = source.split(\"/\")\n const pkgName = parts[1]\n const subpath = parts.slice(2).join(\"/\")\n if (subpath) {\n const root = pkgRoots[pkgName]\n if (root) return path.resolve(root, subpath + \".js\")\n }\n }\n\n // Relative imports from opentui tree → check shims\n if (source.startsWith(\".\") && isExternalOpentui) {\n const importerDir = path.dirname(importer)\n const resolved = path.resolve(importerDir, source)\n if (resolved.endsWith(\"devtools-polyfill\")) {\n return path.resolve(pkgRoot, \"src/shims/devtools-polyfill-stub.ts\")\n }\n const shim = resolvedCoreShims.get(resolved) || resolvedCoreShims.get(resolved + \".ts\")\n if (shim) return shim\n const indexShim = resolvedCoreShims.get(resolved + \"/index.ts\")\n if (indexShim) return indexShim\n }\n\n // Tree-sitter and related stubs\n if (isExternalOpentui) {\n if (source.endsWith(\".scm\") || source.endsWith(\".wasm\")) {\n return \"\\0opentui-asset-stub\"\n }\n if (source.includes(\"tree-sitter\")) {\n if (source.includes(\"tree-sitter-styled-text\")) return styledTextStub\n return treeStub\n }\n if (source.includes(\"hast-styled-text\")) {\n return path.resolve(pkgRoot, \"src/shims/hast-stub.ts\")\n }\n }\n\n // Events shim\n if (source === \"events\") {\n return path.resolve(pkgRoot, \"src/shims/events-shim.ts\")\n }\n\n // Node.js built-in stubs\n if (nodeShims[source] && isExternalOpentui) {\n return path.resolve(pkgRoot, nodeShims[source])\n }\n\n // Redirect bare npm imports from external opentui to virtual modules\n if (!source.startsWith(\".\") && !source.startsWith(\"/\") && !source.startsWith(\"@opentui/\") && isExternalOpentui) {\n return NPM_REDIRECT + source\n }\n\n return null\n },\n load(id) {\n if (id === \"\\0opentui-asset-stub\") {\n return \"export default null;\"\n }\n if (id.startsWith(NPM_REDIRECT)) {\n const pkg = id.slice(NPM_REDIRECT.length)\n try {\n const mod = _require(pkg)\n if (typeof mod === \"object\" && mod !== null) {\n const names = Object.keys(mod).filter(\n (k) => k !== \"default\" && k !== \"__esModule\" && /^[a-zA-Z_$][\\w$]*$/.test(k),\n )\n if (names.length > 0) {\n return [\n `import * as __ns from \"${pkg}\";`,\n `export default __ns.default ?? __ns;`,\n ...names.map(\n (n) => `export const ${n} = __ns[\"${n}\"] ?? __ns.default?.[\"${n}\"];`,\n ),\n ].join(\"\\n\")\n }\n }\n } catch {\n // Fall through to generic approach\n }\n return [\n `export * from \"${pkg}\";`,\n `import * as __ns from \"${pkg}\";`,\n `export default __ns.default ?? __ns;`,\n ].join(\"\\n\")\n }\n },\n }\n\n const aliasPlugin: Plugin = {\n name: \"gridland-web-aliases\",\n config() {\n const aliases: Record<string, string> = {}\n\n // npm mode: @gridland/core resolves via package.json conditional exports\n // (\"import\" → dist/browser.js). No alias needed.\n\n // FFI shims — still needed for lazy require(\"bun:ffi\") in buffer.ts\n aliases[\"bun:ffi\"] = path.resolve(pkgRoot, \"src/shims/bun-ffi.ts\")\n aliases[\"bun-ffi-structs\"] = path.resolve(pkgRoot, \"src/shims/bun-ffi-structs.ts\")\n aliases[\"node:console\"] = path.resolve(pkgRoot, \"src/shims/console.ts\")\n\n // Core file shims as aliases too (source mode)\n if (hasSource) {\n for (const [key, shimPath] of Object.entries(coreFileShims)) {\n aliases[path.resolve(coreRoot, \"src\", key)] = path.resolve(pkgRoot, shimPath)\n }\n }\n\n // Resolve npm packages from @gridland/web's dependency tree\n for (const pkg of [\"react-reconciler\", \"yoga-layout\", \"diff\", \"marked\"]) {\n try {\n aliases[pkg] = path.dirname(_require.resolve(pkg + \"/package.json\"))\n } catch {\n aliases[pkg] = path.resolve(pkgRoot, \"node_modules\", pkg)\n }\n }\n\n return {\n define: {\n \"process.env\": JSON.stringify({}),\n },\n resolve: {\n alias: aliases,\n dedupe: [\"react\", \"react-dom\", \"react-reconciler\", \"yoga-layout\", \"events\"],\n },\n optimizeDeps: {\n include: hasSource ? [\n \"react\",\n \"react-dom\",\n \"react-reconciler\",\n \"react-reconciler/constants\",\n \"diff\",\n \"yoga-layout\",\n \"marked\",\n ] : [\n \"react\",\n \"react-dom\",\n ],\n },\n server: {\n fs: {\n strict: false,\n },\n },\n }\n },\n }\n\n return [shimPlugin, aliasPlugin]\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gridland/web",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.28",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"test:ci": "bun test --preload ./test/preload.ts --randomize --rerun-each 3"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@gridland/core": "^0.2.
|
|
43
|
+
"@gridland/core": "^0.2.28",
|
|
44
44
|
"diff": "^8.0.3",
|
|
45
45
|
"events": "^3.3.0",
|
|
46
46
|
"marked": "^17.0.3",
|
package/src/shims/zig-stub.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
// Stub for opentui/packages/core/src/zig.ts
|
|
2
|
-
// Provides no-op RenderLib and resolveRenderLib
|
|
3
|
-
|
|
4
|
-
export type Pointer = number
|
|
5
|
-
|
|
6
|
-
export interface LineInfo {
|
|
7
|
-
lineStarts: number[]
|
|
8
|
-
lineWidths: number[]
|
|
9
|
-
maxLineWidth: number
|
|
10
|
-
lineSources: number[]
|
|
11
|
-
lineWraps: number[]
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface RenderLib {
|
|
15
|
-
[key: string]: any
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function resolveRenderLib(): RenderLib {
|
|
19
|
-
throw new Error("Zig render library not available in browser environment")
|
|
20
|
-
}
|