@gridland/web 0.2.33 → 0.2.34

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.
Files changed (39) hide show
  1. package/dist/index.d.ts +3 -2
  2. package/dist/index.js +1750 -8254
  3. package/dist/index.js.map +4 -4
  4. package/dist/{next-Cwun29WQ.d.ts → next-Cdtr1evW.d.ts} +4 -90
  5. package/dist/next-plugin.cjs +12 -35
  6. package/dist/next-plugin.cjs.map +1 -1
  7. package/dist/next-plugin.d.cts +2 -7
  8. package/dist/next-plugin.d.ts +2 -7
  9. package/dist/next-plugin.js +12 -35
  10. package/dist/next-plugin.js.map +1 -1
  11. package/dist/next.d.ts +2 -1
  12. package/dist/next.js +654 -7623
  13. package/dist/next.js.map +4 -4
  14. package/dist/vite-plugin.d.ts +4 -9
  15. package/dist/vite-plugin.js +20 -74
  16. package/dist/vite-plugin.js.map +1 -1
  17. package/package.json +3 -5
  18. package/src/shims/native-stub.ts +6 -0
  19. package/src/shims/slider-deps.ts +2 -2
  20. package/dist/core-shims.js +0 -46163
  21. package/dist/core-shims.js.map +0 -7
  22. package/src/browser-buffer.ts +0 -715
  23. package/src/core-shims/index.ts +0 -269
  24. package/src/core-shims/renderable-types.ts +0 -4
  25. package/src/core-shims/rgba.ts +0 -195
  26. package/src/core-shims/types.ts +0 -132
  27. package/src/shims/console-stub.ts +0 -13
  28. package/src/shims/console.ts +0 -3
  29. package/src/shims/filters-stub.ts +0 -4
  30. package/src/shims/native-span-feed-stub.ts +0 -7
  31. package/src/shims/node-buffer.ts +0 -39
  32. package/src/shims/node-fs.ts +0 -20
  33. package/src/shims/node-os.ts +0 -6
  34. package/src/shims/node-path.ts +0 -35
  35. package/src/shims/node-stream.ts +0 -10
  36. package/src/shims/node-url.ts +0 -8
  37. package/src/shims/node-util.ts +0 -33
  38. package/src/shims/renderer-stub.ts +0 -21
  39. package/src/shims/timeline-stub.ts +0 -43
@@ -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/core resolves via its
7
- * package.json conditional exports ("import" → dist/browser.js, which is
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, 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.
10
+ * @opentui/* resolution, native stubs, tree-sitter stubs, and circular
11
+ * dependency fixes.
17
12
  */
18
13
  declare function gridlandWebPlugin(): Plugin[];
19
14
 
@@ -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 [_projectRequire, _require]) {
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
- "post/filters": "src/shims/filters-stub.ts",
46
- "animation/Timeline": "src/shims/timeline-stub.ts"
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
- const absoluteTarget = path.resolve(coreRoot, "src", key + ".ts");
51
- resolvedCoreShims.set(absoluteTarget, path.resolve(pkgRoot, shimPath));
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(".") && isExternalOpentui) {
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.startsWith(NPM_REDIRECT)) {
143
- const pkg = id.slice(NPM_REDIRECT.length);
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["node:console"] = path.resolve(pkgRoot, "src/shims/console.ts");
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,
@@ -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.33",
3
+ "version": "0.2.34",
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/core": "^0.2.31",
41
+ "@gridland/utils": "workspace:*",
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 = () => {}
@@ -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 "../core-shims/types"
6
+ export type { RenderContext } from "@gridland/utils"
7
7
  export { BrowserBuffer as OptimizedBuffer } from "../browser-buffer"
8
- export { RGBA, parseColor, type ColorInput } from "../core-shims/rgba"
8
+ export { RGBA, parseColor, type ColorInput } from "@gridland/utils"