@gridland/web 0.2.33 → 0.2.35
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/index.d.ts +3 -2
- package/dist/index.js +1750 -8254
- package/dist/index.js.map +4 -4
- package/dist/{next-Cwun29WQ.d.ts → next-Cdtr1evW.d.ts} +4 -90
- package/dist/next-plugin.cjs +12 -35
- package/dist/next-plugin.cjs.map +1 -1
- package/dist/next-plugin.d.cts +2 -7
- package/dist/next-plugin.d.ts +2 -7
- package/dist/next-plugin.js +12 -35
- package/dist/next-plugin.js.map +1 -1
- package/dist/next.d.ts +2 -1
- package/dist/next.js +654 -7623
- package/dist/next.js.map +4 -4
- package/dist/vite-plugin.d.ts +4 -9
- package/dist/vite-plugin.js +20 -74
- package/dist/vite-plugin.js.map +1 -1
- package/package.json +3 -5
- package/src/shims/native-stub.ts +6 -0
- package/src/shims/slider-deps.ts +2 -2
- package/dist/core-shims.js +0 -46163
- package/dist/core-shims.js.map +0 -7
- package/src/browser-buffer.ts +0 -715
- package/src/core-shims/index.ts +0 -269
- package/src/core-shims/renderable-types.ts +0 -4
- package/src/core-shims/rgba.ts +0 -195
- package/src/core-shims/types.ts +0 -132
- package/src/shims/console-stub.ts +0 -13
- package/src/shims/console.ts +0 -3
- package/src/shims/filters-stub.ts +0 -4
- package/src/shims/native-span-feed-stub.ts +0 -7
- package/src/shims/node-buffer.ts +0 -39
- package/src/shims/node-fs.ts +0 -20
- package/src/shims/node-os.ts +0 -6
- package/src/shims/node-path.ts +0 -35
- package/src/shims/node-stream.ts +0 -10
- package/src/shims/node-url.ts +0 -8
- package/src/shims/node-util.ts +0 -33
- package/src/shims/renderer-stub.ts +0 -21
- package/src/shims/timeline-stub.ts +0 -43
package/dist/vite-plugin.d.ts
CHANGED
|
@@ -3,17 +3,12 @@ import { Plugin } from 'vite';
|
|
|
3
3
|
/**
|
|
4
4
|
* Vite plugin that sets up module resolution for Gridland.
|
|
5
5
|
*
|
|
6
|
-
* In **npm mode** (published packages), @gridland/
|
|
7
|
-
* package.json
|
|
8
|
-
* browser-safe). No aliasing needed.
|
|
6
|
+
* In **npm mode** (published packages), @gridland/utils resolves via its
|
|
7
|
+
* package.json. No special aliasing needed.
|
|
9
8
|
*
|
|
10
9
|
* In **source mode** (monorepo with opentui submodule), the plugin handles
|
|
11
|
-
* @opentui/* resolution,
|
|
12
|
-
*
|
|
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.
|
|
10
|
+
* @opentui/* resolution, native stubs, tree-sitter stubs, and circular
|
|
11
|
+
* dependency fixes.
|
|
17
12
|
*/
|
|
18
13
|
declare function gridlandWebPlugin(): Plugin[];
|
|
19
14
|
|
package/dist/vite-plugin.js
CHANGED
|
@@ -8,9 +8,8 @@ var __dirname = path.dirname(__filename);
|
|
|
8
8
|
function gridlandWebPlugin() {
|
|
9
9
|
const pkgRoot = path.resolve(__dirname, "..");
|
|
10
10
|
const _require = createRequire(path.resolve(pkgRoot, "package.json"));
|
|
11
|
-
const _projectRequire = createRequire(path.resolve(process.cwd(), "package.json"));
|
|
12
11
|
function resolvePackageRoot(pkg, fallbackRelative) {
|
|
13
|
-
for (const req of [
|
|
12
|
+
for (const req of [_require]) {
|
|
14
13
|
try {
|
|
15
14
|
const pkgJson = req.resolve(`${pkg}/package.json`);
|
|
16
15
|
return path.dirname(pkgJson);
|
|
@@ -35,52 +34,28 @@ function gridlandWebPlugin() {
|
|
|
35
34
|
const opentuiCoreBarrel = path.resolve(coreRoot, "src/index.ts");
|
|
36
35
|
const sliderDeps = path.resolve(pkgRoot, "src/shims/slider-deps.ts");
|
|
37
36
|
const sliderFile = path.resolve(coreRoot, "src/renderables/Slider.ts");
|
|
37
|
+
const treeStub = path.resolve(pkgRoot, "src/shims/tree-sitter-stub.ts");
|
|
38
|
+
const styledTextStub = path.resolve(pkgRoot, "src/shims/tree-sitter-styled-text-stub.ts");
|
|
39
|
+
const pkgRoots = { core: coreRoot, react: reactRoot, ui: uiRoot };
|
|
38
40
|
const coreFileShims = {
|
|
39
|
-
buffer: "src/browser-buffer.ts",
|
|
40
|
-
"text-buffer": "src/shims/text-buffer-shim.ts",
|
|
41
|
-
"text-buffer-view": "src/shims/text-buffer-view-shim.ts",
|
|
42
|
-
"syntax-style": "src/shims/syntax-style-shim.ts",
|
|
43
41
|
"edit-buffer": "src/shims/edit-buffer-stub.ts",
|
|
44
42
|
"editor-view": "src/shims/editor-view-stub.ts",
|
|
45
|
-
"
|
|
46
|
-
"
|
|
43
|
+
"text-buffer": "src/shims/text-buffer-shim.ts",
|
|
44
|
+
"text-buffer-view": "src/shims/text-buffer-view-shim.ts",
|
|
45
|
+
"syntax-style": "src/shims/syntax-style-shim.ts"
|
|
47
46
|
};
|
|
48
47
|
const resolvedCoreShims = /* @__PURE__ */ new Map();
|
|
49
48
|
for (const [key, shimPath] of Object.entries(coreFileShims)) {
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
resolvedCoreShims.set(
|
|
50
|
+
path.resolve(coreRoot, "src", key + ".ts"),
|
|
51
|
+
path.resolve(pkgRoot, shimPath)
|
|
52
|
+
);
|
|
52
53
|
}
|
|
53
|
-
const treeStub = path.resolve(pkgRoot, "src/shims/tree-sitter-stub.ts");
|
|
54
|
-
const styledTextStub = path.resolve(pkgRoot, "src/shims/tree-sitter-styled-text-stub.ts");
|
|
55
|
-
const pkgRoots = { core: coreRoot, react: reactRoot, ui: uiRoot };
|
|
56
|
-
const nodeShims = {
|
|
57
|
-
"node:buffer": "src/shims/node-buffer.ts",
|
|
58
|
-
"node:path": "src/shims/node-path.ts",
|
|
59
|
-
path: "src/shims/node-path.ts",
|
|
60
|
-
"node:fs": "src/shims/node-fs.ts",
|
|
61
|
-
fs: "src/shims/node-fs.ts",
|
|
62
|
-
"fs/promises": "src/shims/node-fs.ts",
|
|
63
|
-
"node:util": "src/shims/node-util.ts",
|
|
64
|
-
util: "src/shims/node-util.ts",
|
|
65
|
-
os: "src/shims/node-os.ts",
|
|
66
|
-
"node:os": "src/shims/node-os.ts",
|
|
67
|
-
stream: "src/shims/node-stream.ts",
|
|
68
|
-
"node:stream": "src/shims/node-stream.ts",
|
|
69
|
-
url: "src/shims/node-url.ts",
|
|
70
|
-
"node:url": "src/shims/node-url.ts",
|
|
71
|
-
console: "src/shims/console.ts",
|
|
72
|
-
bun: "src/shims/bun-ffi.ts"
|
|
73
|
-
};
|
|
74
|
-
const NPM_REDIRECT = "\0npm-redirect:";
|
|
75
54
|
const shimPlugin = {
|
|
76
55
|
name: "gridland-web-shims",
|
|
77
56
|
enforce: "pre",
|
|
78
57
|
resolveId(source, importer) {
|
|
79
58
|
if (!importer) return null;
|
|
80
|
-
if (importer.startsWith(NPM_REDIRECT)) return null;
|
|
81
|
-
if (nodeShims[source]) {
|
|
82
|
-
return path.resolve(pkgRoot, nodeShims[source]);
|
|
83
|
-
}
|
|
84
59
|
if (source === "events") {
|
|
85
60
|
return path.resolve(pkgRoot, "src/shims/events-shim.ts");
|
|
86
61
|
}
|
|
@@ -98,6 +73,9 @@ function gridlandWebPlugin() {
|
|
|
98
73
|
if (source === "@opentui/core") {
|
|
99
74
|
return opentuiCoreBarrel;
|
|
100
75
|
}
|
|
76
|
+
if (source === "@opentui/core/native") {
|
|
77
|
+
return "\0opentui-core-native-stub";
|
|
78
|
+
}
|
|
101
79
|
if (source.startsWith("@opentui/")) {
|
|
102
80
|
const parts = source.split("/");
|
|
103
81
|
const pkgName = parts[1];
|
|
@@ -107,7 +85,7 @@ function gridlandWebPlugin() {
|
|
|
107
85
|
if (root) return path.resolve(root, subpath + ".js");
|
|
108
86
|
}
|
|
109
87
|
}
|
|
110
|
-
if (source.startsWith(".")
|
|
88
|
+
if (source.startsWith(".")) {
|
|
111
89
|
const importerDir = path.dirname(importer);
|
|
112
90
|
const resolved = path.resolve(importerDir, source);
|
|
113
91
|
if (resolved.endsWith("devtools-polyfill")) {
|
|
@@ -115,8 +93,6 @@ function gridlandWebPlugin() {
|
|
|
115
93
|
}
|
|
116
94
|
const shim = resolvedCoreShims.get(resolved) || resolvedCoreShims.get(resolved + ".ts");
|
|
117
95
|
if (shim) return shim;
|
|
118
|
-
const indexShim = resolvedCoreShims.get(resolved + "/index.ts");
|
|
119
|
-
if (indexShim) return indexShim;
|
|
120
96
|
}
|
|
121
97
|
if (isExternalOpentui) {
|
|
122
98
|
if (source.endsWith(".scm") || source.endsWith(".wasm")) {
|
|
@@ -130,40 +106,14 @@ function gridlandWebPlugin() {
|
|
|
130
106
|
return path.resolve(pkgRoot, "src/shims/hast-stub.ts");
|
|
131
107
|
}
|
|
132
108
|
}
|
|
133
|
-
if (!source.startsWith(".") && !source.startsWith("/") && !source.startsWith("@opentui/") && isExternalOpentui) {
|
|
134
|
-
return NPM_REDIRECT + source;
|
|
135
|
-
}
|
|
136
109
|
return null;
|
|
137
110
|
},
|
|
138
111
|
load(id) {
|
|
139
112
|
if (id === "\0opentui-asset-stub") {
|
|
140
113
|
return "export default null;";
|
|
141
114
|
}
|
|
142
|
-
if (id
|
|
143
|
-
const
|
|
144
|
-
try {
|
|
145
|
-
const mod = _require(pkg);
|
|
146
|
-
if (typeof mod === "object" && mod !== null) {
|
|
147
|
-
const names = Object.keys(mod).filter(
|
|
148
|
-
(k) => k !== "default" && k !== "__esModule" && /^[a-zA-Z_$][\w$]*$/.test(k)
|
|
149
|
-
);
|
|
150
|
-
if (names.length > 0) {
|
|
151
|
-
return [
|
|
152
|
-
`import * as __ns from "${pkg}";`,
|
|
153
|
-
`export default __ns.default ?? __ns;`,
|
|
154
|
-
...names.map(
|
|
155
|
-
(n) => `export const ${n} = __ns["${n}"] ?? __ns.default?.["${n}"];`
|
|
156
|
-
)
|
|
157
|
-
].join("\n");
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
} catch {
|
|
161
|
-
}
|
|
162
|
-
return [
|
|
163
|
-
`export * from "${pkg}";`,
|
|
164
|
-
`import * as __ns from "${pkg}";`,
|
|
165
|
-
`export default __ns.default ?? __ns;`
|
|
166
|
-
].join("\n");
|
|
115
|
+
if (id === "\0opentui-core-native-stub") {
|
|
116
|
+
return "export const CliRenderer = null; export const CliRenderEvents = null; export const createCliRenderer = null; export const NativeSpanFeed = null; export const setRenderLibPath = () => {};";
|
|
167
117
|
}
|
|
168
118
|
}
|
|
169
119
|
};
|
|
@@ -173,12 +123,7 @@ function gridlandWebPlugin() {
|
|
|
173
123
|
const aliases = {};
|
|
174
124
|
aliases["bun:ffi"] = path.resolve(pkgRoot, "src/shims/bun-ffi.ts");
|
|
175
125
|
aliases["bun-ffi-structs"] = path.resolve(pkgRoot, "src/shims/bun-ffi-structs.ts");
|
|
176
|
-
aliases["
|
|
177
|
-
if (hasSource) {
|
|
178
|
-
for (const [key, shimPath] of Object.entries(coreFileShims)) {
|
|
179
|
-
aliases[path.resolve(coreRoot, "src", key)] = path.resolve(pkgRoot, shimPath);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
126
|
+
aliases["bun"] = path.resolve(pkgRoot, "src/shims/bun-ffi.ts");
|
|
182
127
|
for (const pkg of ["react-reconciler", "yoga-layout", "diff", "marked"]) {
|
|
183
128
|
try {
|
|
184
129
|
aliases[pkg] = path.dirname(_require.resolve(pkg + "/package.json"));
|
|
@@ -188,7 +133,8 @@ function gridlandWebPlugin() {
|
|
|
188
133
|
}
|
|
189
134
|
return {
|
|
190
135
|
define: {
|
|
191
|
-
"process.env": JSON.stringify({})
|
|
136
|
+
"process.env": JSON.stringify({}),
|
|
137
|
+
"globalThis.Bun": "undefined"
|
|
192
138
|
},
|
|
193
139
|
resolve: {
|
|
194
140
|
alias: aliases,
|
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 *\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 // ── Node.js built-in shims (both source and npm mode) ────────\n // Needed even in npm mode because older @gridland/core versions\n // or transitive deps may import these bare modules.\n if (nodeShims[source]) {\n return path.resolve(pkgRoot, nodeShims[source])\n }\n if (source === \"events\") {\n return path.resolve(pkgRoot, \"src/shims/events-shim.ts\")\n }\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 // 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":[]}
|
|
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/utils resolves via its\n * package.json. No special aliasing needed.\n *\n * In **source mode** (monorepo with opentui submodule), the plugin handles\n * @opentui/* resolution, native stubs, tree-sitter stubs, and circular\n * dependency fixes.\n */\nexport function gridlandWebPlugin(): Plugin[] {\n const pkgRoot = path.resolve(__dirname, \"..\")\n const _require = createRequire(path.resolve(pkgRoot, \"package.json\"))\n\n // Resolve opentui package roots\n function resolvePackageRoot(pkg: string, fallbackRelative: string): string {\n for (const req of [_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 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 // File-level shims: edit-buffer and editor-view call resolveRenderLib() at runtime.\n // Replace with pure-JS browser implementations.\n const coreFileShims: Record<string, string> = {\n \"edit-buffer\": \"src/shims/edit-buffer-stub.ts\",\n \"editor-view\": \"src/shims/editor-view-stub.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 }\n const resolvedCoreShims = new Map<string, string>()\n for (const [key, shimPath] of Object.entries(coreFileShims)) {\n resolvedCoreShims.set(\n path.resolve(coreRoot, \"src\", key + \".ts\"),\n path.resolve(pkgRoot, shimPath),\n )\n }\n\n const shimPlugin: Plugin = {\n name: \"gridland-web-shims\",\n enforce: \"pre\",\n resolveId(source, importer) {\n if (!importer) return null\n\n // ── Events shim (both source and npm mode) ────────────────\n if (source === \"events\") {\n return path.resolve(pkgRoot, \"src/shims/events-shim.ts\")\n }\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 return opentuiCoreBarrel\n }\n\n // Stub @opentui/core/native\n if (source === \"@opentui/core/native\") {\n return \"\\0opentui-core-native-stub\"\n }\n\n // @opentui/* subpath imports\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: check for file-level shims and devtools-polyfill stub\n if (source.startsWith(\".\")) {\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 }\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 return null\n },\n load(id) {\n if (id === \"\\0opentui-asset-stub\") {\n return \"export default null;\"\n }\n if (id === \"\\0opentui-core-native-stub\") {\n return \"export const CliRenderer = null; export const CliRenderEvents = null; export const createCliRenderer = null; export const NativeSpanFeed = null; export const setRenderLibPath = () => {};\"\n }\n },\n }\n\n const aliasPlugin: Plugin = {\n name: \"gridland-web-aliases\",\n config() {\n const aliases: Record<string, string> = {}\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[\"bun\"] = path.resolve(pkgRoot, \"src/shims/bun-ffi.ts\")\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 \"globalThis.Bun\": \"undefined\",\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.35",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -29,9 +29,7 @@
|
|
|
29
29
|
"types": "./dist/index.d.ts",
|
|
30
30
|
"files": [
|
|
31
31
|
"dist",
|
|
32
|
-
"src/shims"
|
|
33
|
-
"src/core-shims",
|
|
34
|
-
"src/browser-buffer.ts"
|
|
32
|
+
"src/shims"
|
|
35
33
|
],
|
|
36
34
|
"scripts": {
|
|
37
35
|
"build": "tsup; node build-browser.mjs",
|
|
@@ -40,7 +38,7 @@
|
|
|
40
38
|
"test:ci": "bun test --preload ./test/preload.ts --randomize --rerun-each 3"
|
|
41
39
|
},
|
|
42
40
|
"dependencies": {
|
|
43
|
-
"@gridland/
|
|
41
|
+
"@gridland/utils": "0.2.35",
|
|
44
42
|
"diff": "^8.0.3",
|
|
45
43
|
"events": "^3.3.0",
|
|
46
44
|
"marked": "^17.0.3",
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Stub for @opentui/core/native — browser builds don't need CliRenderer, NativeSpanFeed, or zig.
|
|
2
|
+
export const CliRenderer = null
|
|
3
|
+
export const CliRenderEvents = null
|
|
4
|
+
export const createCliRenderer = null
|
|
5
|
+
export const NativeSpanFeed = null
|
|
6
|
+
export const setRenderLibPath = () => {}
|
package/src/shims/slider-deps.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
// We provide these directly from the source files, bypassing any barrel that re-exports renderables.
|
|
4
4
|
|
|
5
5
|
export { Renderable, type RenderableOptions } from "../../../../opentui/packages/core/src/Renderable"
|
|
6
|
-
export type { RenderContext } from "
|
|
6
|
+
export type { RenderContext } from "@gridland/utils"
|
|
7
7
|
export { BrowserBuffer as OptimizedBuffer } from "../browser-buffer"
|
|
8
|
-
export { RGBA, parseColor, type ColorInput } from "
|
|
8
|
+
export { RGBA, parseColor, type ColorInput } from "@gridland/utils"
|