@gridland/web 0.2.29 → 0.2.31
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/next-plugin.cjs
CHANGED
|
@@ -58,6 +58,11 @@ function withGridland(nextConfig = {}) {
|
|
|
58
58
|
const userWebpack = nextConfig.webpack;
|
|
59
59
|
return {
|
|
60
60
|
...nextConfig,
|
|
61
|
+
// Ensure Next.js compiles .ts shim files from @gridland/web with SWC
|
|
62
|
+
transpilePackages: [
|
|
63
|
+
...nextConfig.transpilePackages || [],
|
|
64
|
+
"@gridland/web"
|
|
65
|
+
],
|
|
61
66
|
webpack: (config, context) => {
|
|
62
67
|
const { isServer, webpack } = context;
|
|
63
68
|
if (userWebpack) {
|
|
@@ -117,6 +122,7 @@ function withGridland(nextConfig = {}) {
|
|
|
117
122
|
if (!isServer) {
|
|
118
123
|
const clientAliases = {
|
|
119
124
|
"node:console": shimPath("src/shims/console.ts"),
|
|
125
|
+
"console$": shimPath("src/shims/console.ts"),
|
|
120
126
|
"events$": shimPath("src/shims/events-shim.ts"),
|
|
121
127
|
"fs/promises": shimPath("src/shims/node-fs.ts"),
|
|
122
128
|
"fs$": shimPath("src/shims/node-fs.ts"),
|
package/dist/next-plugin.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/next-plugin.ts"],"sourcesContent":["import path from \"path\"\nimport { existsSync } from \"fs\"\n\ntype WebpackConfig = any\ntype WebpackInstance = any\n\ninterface NextConfig {\n webpack?: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => WebpackConfig\n [key: string]: any\n}\n\n/**\n * Next.js plugin that configures webpack for Gridland.\n * Equivalent to `gridlandWebPlugin()` for Vite — handles module aliases,\n * FFI shims, tree-sitter stubs, Node.js built-in stubs, and circular\n * dependency fixes.\n *\n * In **npm mode**, @gridland/core resolves via package.json conditional exports\n * (\"import\" → dist/browser.js). No aliasing needed.\n *\n * In **source mode**, the plugin handles @opentui/* resolution and file-level\n * browser shims for native-backed classes.\n */\nexport function withGridland(nextConfig: NextConfig = {}): NextConfig {\n // __dirname works natively in CJS; tsup shims it for ESM via import.meta.url\n const pkgRoot = path.resolve(__dirname, \"..\")\n\n // Resolve opentui package roots from the git submodule\n const opentuiRoot = path.resolve(pkgRoot, \"../../opentui\")\n const coreRoot = path.resolve(opentuiRoot, \"packages/core\")\n const reactRoot = path.resolve(opentuiRoot, \"packages/react\")\n const uiRoot = path.resolve(opentuiRoot, \"packages/ui\")\n\n // Detect whether opentui source is available (monorepo/submodule)\n const hasSource = existsSync(path.resolve(reactRoot, \"src/index.ts\"))\n\n function shimPath(p: string) {\n return path.resolve(pkgRoot, p)\n }\n\n // File-level shims — browser replacements for native-backed classes.\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 userWebpack = nextConfig.webpack\n\n return {\n ...nextConfig,\n webpack: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => {\n const { isServer, webpack } = context\n\n // Chain user's webpack config first if provided\n if (userWebpack) {\n config = userWebpack(config, context)\n }\n\n const sharedAliases: Record<string, string> = {\n // npm mode: @gridland/core resolves via package.json conditional exports.\n // No alias needed.\n\n // @opentui packages — source mode only (monorepo dev)\n ...(hasSource ? {\n \"@opentui/core\": path.resolve(coreRoot, \"src/index.ts\"),\n \"@opentui/react\": path.resolve(reactRoot, \"src/index.ts\"),\n \"@opentui/ui\": path.resolve(uiRoot, \"src/index.ts\"),\n } : {}),\n\n // FFI shims (no Zig/Bun on server or client in browser context)\n \"bun:ffi\": shimPath(\"src/shims/bun-ffi.ts\"),\n \"bun-ffi-structs\": shimPath(\"src/shims/bun-ffi-structs.ts\"),\n bun: shimPath(\"src/shims/bun-ffi.ts\"),\n\n // Tree-sitter stubs\n \"tree-sitter-styled-text\": shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n \"web-tree-sitter\": shimPath(\"src/shims/tree-sitter-stub.ts\"),\n \"hast-styled-text\": shimPath(\"src/shims/hast-stub.ts\"),\n\n // Source-mode-only aliases\n ...(hasSource ? {\n [path.resolve(coreRoot, \"src/lib/tree-sitter-styled-text\")]:\n shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/tree-sitter\")]:\n shimPath(\"src/shims/tree-sitter-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/hast-styled-text\")]:\n shimPath(\"src/shims/hast-stub.ts\"),\n [path.resolve(reactRoot, \"src/reconciler/devtools-polyfill\")]:\n shimPath(\"src/shims/devtools-polyfill-stub.ts\"),\n } : {}),\n }\n\n // Core file shims (opentui source → browser shim) — source mode only\n if (hasSource) {\n for (const [key, shimFile] of Object.entries(coreFileShims)) {\n sharedAliases[path.resolve(coreRoot, \"src\", key)] = shimPath(shimFile)\n }\n }\n\n config.resolve = config.resolve || {}\n config.resolve.alias = {\n ...config.resolve.alias,\n ...sharedAliases,\n }\n\n // Allow webpack to resolve workspace packages\n config.resolve.modules = [\n ...(config.resolve.modules || []),\n path.resolve(process.cwd(), \"node_modules\"),\n path.resolve(pkgRoot, \"node_modules\"),\n path.resolve(pkgRoot, \"../../node_modules\"),\n ]\n\n // Slider circular dependency fix — source mode only\n if (hasSource) {\n const renderablesDir = path.resolve(coreRoot, \"src/renderables\")\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^\\.\\.\\/index$/, (resource: any) => {\n if (resource.context === renderablesDir) {\n resource.request = shimPath(\"src/shims/slider-deps.ts\")\n }\n }),\n )\n }\n\n if (!isServer) {\n // Client-only: Node.js built-in stubs, events shim, console shim.\n const clientAliases: Record<string, string> = {\n \"node:console\": shimPath(\"src/shims/console.ts\"),\n \"events$\": shimPath(\"src/shims/events-shim.ts\"),\n \"fs/promises\": shimPath(\"src/shims/node-fs.ts\"),\n \"fs$\": shimPath(\"src/shims/node-fs.ts\"),\n \"path$\": shimPath(\"src/shims/node-path.ts\"),\n \"util$\": shimPath(\"src/shims/node-util.ts\"),\n \"os$\": shimPath(\"src/shims/node-os.ts\"),\n \"stream$\": shimPath(\"src/shims/node-stream.ts\"),\n \"url$\": shimPath(\"src/shims/node-url.ts\"),\n }\n\n config.resolve.alias = {\n ...config.resolve.alias,\n ...clientAliases,\n }\n\n // Strip `node:` and `bun:` prefixes from imports\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^node:/, (resource: any) => {\n resource.request = resource.request.replace(/^node:/, \"\")\n }),\n new webpack.NormalModuleReplacementPlugin(/^bun:/, (resource: any) => {\n resource.request = resource.request.replace(/^bun:/, \"\")\n }),\n )\n }\n\n // Enable top-level await (used by opentui source code)\n config.experiments = {\n ...config.experiments,\n topLevelAwait: true,\n }\n\n return config\n },\n }\n}\n"],"mappings":"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","names":["path"]}
|
|
1
|
+
{"version":3,"sources":["../src/next-plugin.ts"],"sourcesContent":["import path from \"path\"\nimport { existsSync } from \"fs\"\n\ntype WebpackConfig = any\ntype WebpackInstance = any\n\ninterface NextConfig {\n webpack?: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => WebpackConfig\n [key: string]: any\n}\n\n/**\n * Next.js plugin that configures webpack for Gridland.\n * Equivalent to `gridlandWebPlugin()` for Vite — handles module aliases,\n * FFI shims, tree-sitter stubs, Node.js built-in stubs, and circular\n * dependency fixes.\n *\n * In **npm mode**, @gridland/core resolves via package.json conditional exports\n * (\"import\" → dist/browser.js). No aliasing needed.\n *\n * In **source mode**, the plugin handles @opentui/* resolution and file-level\n * browser shims for native-backed classes.\n */\nexport function withGridland(nextConfig: NextConfig = {}): NextConfig {\n // __dirname works natively in CJS; tsup shims it for ESM via import.meta.url\n const pkgRoot = path.resolve(__dirname, \"..\")\n\n // Resolve opentui package roots from the git submodule\n const opentuiRoot = path.resolve(pkgRoot, \"../../opentui\")\n const coreRoot = path.resolve(opentuiRoot, \"packages/core\")\n const reactRoot = path.resolve(opentuiRoot, \"packages/react\")\n const uiRoot = path.resolve(opentuiRoot, \"packages/ui\")\n\n // Detect whether opentui source is available (monorepo/submodule)\n const hasSource = existsSync(path.resolve(reactRoot, \"src/index.ts\"))\n\n function shimPath(p: string) {\n return path.resolve(pkgRoot, p)\n }\n\n // File-level shims — browser replacements for native-backed classes.\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 userWebpack = nextConfig.webpack\n\n return {\n ...nextConfig,\n // Ensure Next.js compiles .ts shim files from @gridland/web with SWC\n transpilePackages: [\n ...(nextConfig.transpilePackages || []),\n \"@gridland/web\",\n ],\n webpack: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => {\n const { isServer, webpack } = context\n\n // Chain user's webpack config first if provided\n if (userWebpack) {\n config = userWebpack(config, context)\n }\n\n const sharedAliases: Record<string, string> = {\n // npm mode: @gridland/core resolves via package.json conditional exports.\n // No alias needed.\n\n // @opentui packages — source mode only (monorepo dev)\n ...(hasSource ? {\n \"@opentui/core\": path.resolve(coreRoot, \"src/index.ts\"),\n \"@opentui/react\": path.resolve(reactRoot, \"src/index.ts\"),\n \"@opentui/ui\": path.resolve(uiRoot, \"src/index.ts\"),\n } : {}),\n\n // FFI shims (no Zig/Bun on server or client in browser context)\n \"bun:ffi\": shimPath(\"src/shims/bun-ffi.ts\"),\n \"bun-ffi-structs\": shimPath(\"src/shims/bun-ffi-structs.ts\"),\n bun: shimPath(\"src/shims/bun-ffi.ts\"),\n\n // Tree-sitter stubs\n \"tree-sitter-styled-text\": shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n \"web-tree-sitter\": shimPath(\"src/shims/tree-sitter-stub.ts\"),\n \"hast-styled-text\": shimPath(\"src/shims/hast-stub.ts\"),\n\n // Source-mode-only aliases\n ...(hasSource ? {\n [path.resolve(coreRoot, \"src/lib/tree-sitter-styled-text\")]:\n shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/tree-sitter\")]:\n shimPath(\"src/shims/tree-sitter-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/hast-styled-text\")]:\n shimPath(\"src/shims/hast-stub.ts\"),\n [path.resolve(reactRoot, \"src/reconciler/devtools-polyfill\")]:\n shimPath(\"src/shims/devtools-polyfill-stub.ts\"),\n } : {}),\n }\n\n // Core file shims (opentui source → browser shim) — source mode only\n if (hasSource) {\n for (const [key, shimFile] of Object.entries(coreFileShims)) {\n sharedAliases[path.resolve(coreRoot, \"src\", key)] = shimPath(shimFile)\n }\n }\n\n config.resolve = config.resolve || {}\n config.resolve.alias = {\n ...config.resolve.alias,\n ...sharedAliases,\n }\n\n // Allow webpack to resolve workspace packages\n config.resolve.modules = [\n ...(config.resolve.modules || []),\n path.resolve(process.cwd(), \"node_modules\"),\n path.resolve(pkgRoot, \"node_modules\"),\n path.resolve(pkgRoot, \"../../node_modules\"),\n ]\n\n // Slider circular dependency fix — source mode only\n if (hasSource) {\n const renderablesDir = path.resolve(coreRoot, \"src/renderables\")\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^\\.\\.\\/index$/, (resource: any) => {\n if (resource.context === renderablesDir) {\n resource.request = shimPath(\"src/shims/slider-deps.ts\")\n }\n }),\n )\n }\n\n if (!isServer) {\n // Client-only: Node.js built-in stubs, events shim, console shim.\n // Both node:-prefixed and bare forms are needed because\n // NormalModuleReplacementPlugin strips the node: prefix.\n const clientAliases: Record<string, string> = {\n \"node:console\": shimPath(\"src/shims/console.ts\"),\n \"console$\": shimPath(\"src/shims/console.ts\"),\n \"events$\": shimPath(\"src/shims/events-shim.ts\"),\n \"fs/promises\": shimPath(\"src/shims/node-fs.ts\"),\n \"fs$\": shimPath(\"src/shims/node-fs.ts\"),\n \"path$\": shimPath(\"src/shims/node-path.ts\"),\n \"util$\": shimPath(\"src/shims/node-util.ts\"),\n \"os$\": shimPath(\"src/shims/node-os.ts\"),\n \"stream$\": shimPath(\"src/shims/node-stream.ts\"),\n \"url$\": shimPath(\"src/shims/node-url.ts\"),\n }\n\n config.resolve.alias = {\n ...config.resolve.alias,\n ...clientAliases,\n }\n\n // Strip `node:` and `bun:` prefixes from imports\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^node:/, (resource: any) => {\n resource.request = resource.request.replace(/^node:/, \"\")\n }),\n new webpack.NormalModuleReplacementPlugin(/^bun:/, (resource: any) => {\n resource.request = resource.request.replace(/^bun:/, \"\")\n }),\n )\n }\n\n // Enable top-level await (used by opentui source code)\n config.experiments = {\n ...config.experiments,\n topLevelAwait: true,\n }\n\n return config\n },\n }\n}\n"],"mappings":"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","names":["path"]}
|
package/dist/next-plugin.js
CHANGED
|
@@ -24,6 +24,11 @@ function withGridland(nextConfig = {}) {
|
|
|
24
24
|
const userWebpack = nextConfig.webpack;
|
|
25
25
|
return {
|
|
26
26
|
...nextConfig,
|
|
27
|
+
// Ensure Next.js compiles .ts shim files from @gridland/web with SWC
|
|
28
|
+
transpilePackages: [
|
|
29
|
+
...nextConfig.transpilePackages || [],
|
|
30
|
+
"@gridland/web"
|
|
31
|
+
],
|
|
27
32
|
webpack: (config, context) => {
|
|
28
33
|
const { isServer, webpack } = context;
|
|
29
34
|
if (userWebpack) {
|
|
@@ -83,6 +88,7 @@ function withGridland(nextConfig = {}) {
|
|
|
83
88
|
if (!isServer) {
|
|
84
89
|
const clientAliases = {
|
|
85
90
|
"node:console": shimPath("src/shims/console.ts"),
|
|
91
|
+
"console$": shimPath("src/shims/console.ts"),
|
|
86
92
|
"events$": shimPath("src/shims/events-shim.ts"),
|
|
87
93
|
"fs/promises": shimPath("src/shims/node-fs.ts"),
|
|
88
94
|
"fs$": shimPath("src/shims/node-fs.ts"),
|
package/dist/next-plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/next-plugin.ts"],"sourcesContent":["import path from \"path\"\nimport { existsSync } from \"fs\"\n\ntype WebpackConfig = any\ntype WebpackInstance = any\n\ninterface NextConfig {\n webpack?: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => WebpackConfig\n [key: string]: any\n}\n\n/**\n * Next.js plugin that configures webpack for Gridland.\n * Equivalent to `gridlandWebPlugin()` for Vite — handles module aliases,\n * FFI shims, tree-sitter stubs, Node.js built-in stubs, and circular\n * dependency fixes.\n *\n * In **npm mode**, @gridland/core resolves via package.json conditional exports\n * (\"import\" → dist/browser.js). No aliasing needed.\n *\n * In **source mode**, the plugin handles @opentui/* resolution and file-level\n * browser shims for native-backed classes.\n */\nexport function withGridland(nextConfig: NextConfig = {}): NextConfig {\n // __dirname works natively in CJS; tsup shims it for ESM via import.meta.url\n const pkgRoot = path.resolve(__dirname, \"..\")\n\n // Resolve opentui package roots from the git submodule\n const opentuiRoot = path.resolve(pkgRoot, \"../../opentui\")\n const coreRoot = path.resolve(opentuiRoot, \"packages/core\")\n const reactRoot = path.resolve(opentuiRoot, \"packages/react\")\n const uiRoot = path.resolve(opentuiRoot, \"packages/ui\")\n\n // Detect whether opentui source is available (monorepo/submodule)\n const hasSource = existsSync(path.resolve(reactRoot, \"src/index.ts\"))\n\n function shimPath(p: string) {\n return path.resolve(pkgRoot, p)\n }\n\n // File-level shims — browser replacements for native-backed classes.\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 userWebpack = nextConfig.webpack\n\n return {\n ...nextConfig,\n webpack: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => {\n const { isServer, webpack } = context\n\n // Chain user's webpack config first if provided\n if (userWebpack) {\n config = userWebpack(config, context)\n }\n\n const sharedAliases: Record<string, string> = {\n // npm mode: @gridland/core resolves via package.json conditional exports.\n // No alias needed.\n\n // @opentui packages — source mode only (monorepo dev)\n ...(hasSource ? {\n \"@opentui/core\": path.resolve(coreRoot, \"src/index.ts\"),\n \"@opentui/react\": path.resolve(reactRoot, \"src/index.ts\"),\n \"@opentui/ui\": path.resolve(uiRoot, \"src/index.ts\"),\n } : {}),\n\n // FFI shims (no Zig/Bun on server or client in browser context)\n \"bun:ffi\": shimPath(\"src/shims/bun-ffi.ts\"),\n \"bun-ffi-structs\": shimPath(\"src/shims/bun-ffi-structs.ts\"),\n bun: shimPath(\"src/shims/bun-ffi.ts\"),\n\n // Tree-sitter stubs\n \"tree-sitter-styled-text\": shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n \"web-tree-sitter\": shimPath(\"src/shims/tree-sitter-stub.ts\"),\n \"hast-styled-text\": shimPath(\"src/shims/hast-stub.ts\"),\n\n // Source-mode-only aliases\n ...(hasSource ? {\n [path.resolve(coreRoot, \"src/lib/tree-sitter-styled-text\")]:\n shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/tree-sitter\")]:\n shimPath(\"src/shims/tree-sitter-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/hast-styled-text\")]:\n shimPath(\"src/shims/hast-stub.ts\"),\n [path.resolve(reactRoot, \"src/reconciler/devtools-polyfill\")]:\n shimPath(\"src/shims/devtools-polyfill-stub.ts\"),\n } : {}),\n }\n\n // Core file shims (opentui source → browser shim) — source mode only\n if (hasSource) {\n for (const [key, shimFile] of Object.entries(coreFileShims)) {\n sharedAliases[path.resolve(coreRoot, \"src\", key)] = shimPath(shimFile)\n }\n }\n\n config.resolve = config.resolve || {}\n config.resolve.alias = {\n ...config.resolve.alias,\n ...sharedAliases,\n }\n\n // Allow webpack to resolve workspace packages\n config.resolve.modules = [\n ...(config.resolve.modules || []),\n path.resolve(process.cwd(), \"node_modules\"),\n path.resolve(pkgRoot, \"node_modules\"),\n path.resolve(pkgRoot, \"../../node_modules\"),\n ]\n\n // Slider circular dependency fix — source mode only\n if (hasSource) {\n const renderablesDir = path.resolve(coreRoot, \"src/renderables\")\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^\\.\\.\\/index$/, (resource: any) => {\n if (resource.context === renderablesDir) {\n resource.request = shimPath(\"src/shims/slider-deps.ts\")\n }\n }),\n )\n }\n\n if (!isServer) {\n // Client-only: Node.js built-in stubs, events shim, console shim.\n const clientAliases: Record<string, string> = {\n \"node:console\": shimPath(\"src/shims/console.ts\"),\n \"events$\": shimPath(\"src/shims/events-shim.ts\"),\n \"fs/promises\": shimPath(\"src/shims/node-fs.ts\"),\n \"fs$\": shimPath(\"src/shims/node-fs.ts\"),\n \"path$\": shimPath(\"src/shims/node-path.ts\"),\n \"util$\": shimPath(\"src/shims/node-util.ts\"),\n \"os$\": shimPath(\"src/shims/node-os.ts\"),\n \"stream$\": shimPath(\"src/shims/node-stream.ts\"),\n \"url$\": shimPath(\"src/shims/node-url.ts\"),\n }\n\n config.resolve.alias = {\n ...config.resolve.alias,\n ...clientAliases,\n }\n\n // Strip `node:` and `bun:` prefixes from imports\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^node:/, (resource: any) => {\n resource.request = resource.request.replace(/^node:/, \"\")\n }),\n new webpack.NormalModuleReplacementPlugin(/^bun:/, (resource: any) => {\n resource.request = resource.request.replace(/^bun:/, \"\")\n }),\n )\n }\n\n // Enable top-level await (used by opentui source code)\n config.experiments = {\n ...config.experiments,\n topLevelAwait: true,\n }\n\n return config\n },\n }\n}\n"],"mappings":";AAAA,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAsBpB,SAAS,aAAa,aAAyB,CAAC,GAAe;AAEpE,QAAM,UAAU,KAAK,QAAQ,WAAW,IAAI;AAG5C,QAAM,cAAc,KAAK,QAAQ,SAAS,eAAe;AACzD,QAAM,WAAW,KAAK,QAAQ,aAAa,eAAe;AAC1D,QAAM,YAAY,KAAK,QAAQ,aAAa,gBAAgB;AAC5D,QAAM,SAAS,KAAK,QAAQ,aAAa,aAAa;AAGtD,QAAM,YAAY,WAAW,KAAK,QAAQ,WAAW,cAAc,CAAC;AAEpE,WAAS,SAAS,GAAW;AAC3B,WAAO,KAAK,QAAQ,SAAS,CAAC;AAAA,EAChC;AAKA,QAAM,gBAAwC;AAAA,IAC5C,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,EACxB;AAEA,QAAM,cAAc,WAAW;AAE/B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS,CAAC,QAAuB,YAA6D;AAC5F,YAAM,EAAE,UAAU,QAAQ,IAAI;AAG9B,UAAI,aAAa;AACf,iBAAS,YAAY,QAAQ,OAAO;AAAA,MACtC;AAEA,YAAM,gBAAwC;AAAA;AAAA;AAAA;AAAA,QAK5C,GAAI,YAAY;AAAA,UACd,iBAAiB,KAAK,QAAQ,UAAU,cAAc;AAAA,UACtD,kBAAkB,KAAK,QAAQ,WAAW,cAAc;AAAA,UACxD,eAAe,KAAK,QAAQ,QAAQ,cAAc;AAAA,QACpD,IAAI,CAAC;AAAA;AAAA,QAGL,WAAW,SAAS,sBAAsB;AAAA,QAC1C,mBAAmB,SAAS,8BAA8B;AAAA,QAC1D,KAAK,SAAS,sBAAsB;AAAA;AAAA,QAGpC,2BAA2B,SAAS,2CAA2C;AAAA,QAC/E,mBAAmB,SAAS,+BAA+B;AAAA,QAC3D,oBAAoB,SAAS,wBAAwB;AAAA;AAAA,QAGrD,GAAI,YAAY;AAAA,UACd,CAAC,KAAK,QAAQ,UAAU,iCAAiC,CAAC,GACxD,SAAS,2CAA2C;AAAA,UACtD,CAAC,KAAK,QAAQ,UAAU,qBAAqB,CAAC,GAC5C,SAAS,+BAA+B;AAAA,UAC1C,CAAC,KAAK,QAAQ,UAAU,0BAA0B,CAAC,GACjD,SAAS,wBAAwB;AAAA,UACnC,CAAC,KAAK,QAAQ,WAAW,kCAAkC,CAAC,GAC1D,SAAS,qCAAqC;AAAA,QAClD,IAAI,CAAC;AAAA,MACP;AAGA,UAAI,WAAW;AACb,mBAAW,CAAC,KAAK,QAAQ,KAAK,OAAO,QAAQ,aAAa,GAAG;AAC3D,wBAAc,KAAK,QAAQ,UAAU,OAAO,GAAG,CAAC,IAAI,SAAS,QAAQ;AAAA,QACvE;AAAA,MACF;AAEA,aAAO,UAAU,OAAO,WAAW,CAAC;AACpC,aAAO,QAAQ,QAAQ;AAAA,QACrB,GAAG,OAAO,QAAQ;AAAA,QAClB,GAAG;AAAA,MACL;AAGA,aAAO,QAAQ,UAAU;AAAA,QACvB,GAAI,OAAO,QAAQ,WAAW,CAAC;AAAA,QAC/B,KAAK,QAAQ,QAAQ,IAAI,GAAG,cAAc;AAAA,QAC1C,KAAK,QAAQ,SAAS,cAAc;AAAA,QACpC,KAAK,QAAQ,SAAS,oBAAoB;AAAA,MAC5C;AAGA,UAAI,WAAW;AACb,cAAM,iBAAiB,KAAK,QAAQ,UAAU,iBAAiB;AAC/D,eAAO,QAAQ;AAAA,UACb,IAAI,QAAQ,8BAA8B,iBAAiB,CAAC,aAAkB;AAC5E,gBAAI,SAAS,YAAY,gBAAgB;AACvC,uBAAS,UAAU,SAAS,0BAA0B;AAAA,YACxD;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAEA,UAAI,CAAC,UAAU;AAEb,cAAM,gBAAwC;AAAA,UAC5C,gBAAgB,SAAS,sBAAsB;AAAA,UAC/C,WAAW,SAAS,0BAA0B;AAAA,UAC9C,eAAe,SAAS,sBAAsB;AAAA,UAC9C,OAAO,SAAS,sBAAsB;AAAA,UACtC,SAAS,SAAS,wBAAwB;AAAA,UAC1C,SAAS,SAAS,wBAAwB;AAAA,UAC1C,OAAO,SAAS,sBAAsB;AAAA,UACtC,WAAW,SAAS,0BAA0B;AAAA,UAC9C,QAAQ,SAAS,uBAAuB;AAAA,QAC1C;AAEA,eAAO,QAAQ,QAAQ;AAAA,UACrB,GAAG,OAAO,QAAQ;AAAA,UAClB,GAAG;AAAA,QACL;AAGA,eAAO,QAAQ;AAAA,UACb,IAAI,QAAQ,8BAA8B,UAAU,CAAC,aAAkB;AACrE,qBAAS,UAAU,SAAS,QAAQ,QAAQ,UAAU,EAAE;AAAA,UAC1D,CAAC;AAAA,UACD,IAAI,QAAQ,8BAA8B,SAAS,CAAC,aAAkB;AACpE,qBAAS,UAAU,SAAS,QAAQ,QAAQ,SAAS,EAAE;AAAA,UACzD,CAAC;AAAA,QACH;AAAA,MACF;AAGA,aAAO,cAAc;AAAA,QACnB,GAAG,OAAO;AAAA,QACV,eAAe;AAAA,MACjB;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/next-plugin.ts"],"sourcesContent":["import path from \"path\"\nimport { existsSync } from \"fs\"\n\ntype WebpackConfig = any\ntype WebpackInstance = any\n\ninterface NextConfig {\n webpack?: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => WebpackConfig\n [key: string]: any\n}\n\n/**\n * Next.js plugin that configures webpack for Gridland.\n * Equivalent to `gridlandWebPlugin()` for Vite — handles module aliases,\n * FFI shims, tree-sitter stubs, Node.js built-in stubs, and circular\n * dependency fixes.\n *\n * In **npm mode**, @gridland/core resolves via package.json conditional exports\n * (\"import\" → dist/browser.js). No aliasing needed.\n *\n * In **source mode**, the plugin handles @opentui/* resolution and file-level\n * browser shims for native-backed classes.\n */\nexport function withGridland(nextConfig: NextConfig = {}): NextConfig {\n // __dirname works natively in CJS; tsup shims it for ESM via import.meta.url\n const pkgRoot = path.resolve(__dirname, \"..\")\n\n // Resolve opentui package roots from the git submodule\n const opentuiRoot = path.resolve(pkgRoot, \"../../opentui\")\n const coreRoot = path.resolve(opentuiRoot, \"packages/core\")\n const reactRoot = path.resolve(opentuiRoot, \"packages/react\")\n const uiRoot = path.resolve(opentuiRoot, \"packages/ui\")\n\n // Detect whether opentui source is available (monorepo/submodule)\n const hasSource = existsSync(path.resolve(reactRoot, \"src/index.ts\"))\n\n function shimPath(p: string) {\n return path.resolve(pkgRoot, p)\n }\n\n // File-level shims — browser replacements for native-backed classes.\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 userWebpack = nextConfig.webpack\n\n return {\n ...nextConfig,\n // Ensure Next.js compiles .ts shim files from @gridland/web with SWC\n transpilePackages: [\n ...(nextConfig.transpilePackages || []),\n \"@gridland/web\",\n ],\n webpack: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => {\n const { isServer, webpack } = context\n\n // Chain user's webpack config first if provided\n if (userWebpack) {\n config = userWebpack(config, context)\n }\n\n const sharedAliases: Record<string, string> = {\n // npm mode: @gridland/core resolves via package.json conditional exports.\n // No alias needed.\n\n // @opentui packages — source mode only (monorepo dev)\n ...(hasSource ? {\n \"@opentui/core\": path.resolve(coreRoot, \"src/index.ts\"),\n \"@opentui/react\": path.resolve(reactRoot, \"src/index.ts\"),\n \"@opentui/ui\": path.resolve(uiRoot, \"src/index.ts\"),\n } : {}),\n\n // FFI shims (no Zig/Bun on server or client in browser context)\n \"bun:ffi\": shimPath(\"src/shims/bun-ffi.ts\"),\n \"bun-ffi-structs\": shimPath(\"src/shims/bun-ffi-structs.ts\"),\n bun: shimPath(\"src/shims/bun-ffi.ts\"),\n\n // Tree-sitter stubs\n \"tree-sitter-styled-text\": shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n \"web-tree-sitter\": shimPath(\"src/shims/tree-sitter-stub.ts\"),\n \"hast-styled-text\": shimPath(\"src/shims/hast-stub.ts\"),\n\n // Source-mode-only aliases\n ...(hasSource ? {\n [path.resolve(coreRoot, \"src/lib/tree-sitter-styled-text\")]:\n shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/tree-sitter\")]:\n shimPath(\"src/shims/tree-sitter-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/hast-styled-text\")]:\n shimPath(\"src/shims/hast-stub.ts\"),\n [path.resolve(reactRoot, \"src/reconciler/devtools-polyfill\")]:\n shimPath(\"src/shims/devtools-polyfill-stub.ts\"),\n } : {}),\n }\n\n // Core file shims (opentui source → browser shim) — source mode only\n if (hasSource) {\n for (const [key, shimFile] of Object.entries(coreFileShims)) {\n sharedAliases[path.resolve(coreRoot, \"src\", key)] = shimPath(shimFile)\n }\n }\n\n config.resolve = config.resolve || {}\n config.resolve.alias = {\n ...config.resolve.alias,\n ...sharedAliases,\n }\n\n // Allow webpack to resolve workspace packages\n config.resolve.modules = [\n ...(config.resolve.modules || []),\n path.resolve(process.cwd(), \"node_modules\"),\n path.resolve(pkgRoot, \"node_modules\"),\n path.resolve(pkgRoot, \"../../node_modules\"),\n ]\n\n // Slider circular dependency fix — source mode only\n if (hasSource) {\n const renderablesDir = path.resolve(coreRoot, \"src/renderables\")\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^\\.\\.\\/index$/, (resource: any) => {\n if (resource.context === renderablesDir) {\n resource.request = shimPath(\"src/shims/slider-deps.ts\")\n }\n }),\n )\n }\n\n if (!isServer) {\n // Client-only: Node.js built-in stubs, events shim, console shim.\n // Both node:-prefixed and bare forms are needed because\n // NormalModuleReplacementPlugin strips the node: prefix.\n const clientAliases: Record<string, string> = {\n \"node:console\": shimPath(\"src/shims/console.ts\"),\n \"console$\": shimPath(\"src/shims/console.ts\"),\n \"events$\": shimPath(\"src/shims/events-shim.ts\"),\n \"fs/promises\": shimPath(\"src/shims/node-fs.ts\"),\n \"fs$\": shimPath(\"src/shims/node-fs.ts\"),\n \"path$\": shimPath(\"src/shims/node-path.ts\"),\n \"util$\": shimPath(\"src/shims/node-util.ts\"),\n \"os$\": shimPath(\"src/shims/node-os.ts\"),\n \"stream$\": shimPath(\"src/shims/node-stream.ts\"),\n \"url$\": shimPath(\"src/shims/node-url.ts\"),\n }\n\n config.resolve.alias = {\n ...config.resolve.alias,\n ...clientAliases,\n }\n\n // Strip `node:` and `bun:` prefixes from imports\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^node:/, (resource: any) => {\n resource.request = resource.request.replace(/^node:/, \"\")\n }),\n new webpack.NormalModuleReplacementPlugin(/^bun:/, (resource: any) => {\n resource.request = resource.request.replace(/^bun:/, \"\")\n }),\n )\n }\n\n // Enable top-level await (used by opentui source code)\n config.experiments = {\n ...config.experiments,\n topLevelAwait: true,\n }\n\n return config\n },\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/vite-plugin.js
CHANGED
|
@@ -78,6 +78,12 @@ function gridlandWebPlugin() {
|
|
|
78
78
|
resolveId(source, importer) {
|
|
79
79
|
if (!importer) return null;
|
|
80
80
|
if (importer.startsWith(NPM_REDIRECT)) return null;
|
|
81
|
+
if (nodeShims[source]) {
|
|
82
|
+
return path.resolve(pkgRoot, nodeShims[source]);
|
|
83
|
+
}
|
|
84
|
+
if (source === "events") {
|
|
85
|
+
return path.resolve(pkgRoot, "src/shims/events-shim.ts");
|
|
86
|
+
}
|
|
81
87
|
if (!hasSource) return null;
|
|
82
88
|
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/");
|
|
83
89
|
if (source === "../index" && importer === sliderFile) {
|
|
@@ -124,12 +130,6 @@ function gridlandWebPlugin() {
|
|
|
124
130
|
return path.resolve(pkgRoot, "src/shims/hast-stub.ts");
|
|
125
131
|
}
|
|
126
132
|
}
|
|
127
|
-
if (source === "events") {
|
|
128
|
-
return path.resolve(pkgRoot, "src/shims/events-shim.ts");
|
|
129
|
-
}
|
|
130
|
-
if (nodeShims[source] && isExternalOpentui) {
|
|
131
|
-
return path.resolve(pkgRoot, nodeShims[source]);
|
|
132
|
-
}
|
|
133
133
|
if (!source.startsWith(".") && !source.startsWith("/") && !source.startsWith("@opentui/") && isExternalOpentui) {
|
|
134
134
|
return NPM_REDIRECT + source;
|
|
135
135
|
}
|
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 // ── 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":";AACA,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAE9B,IAAM,aAAa,cAAc,YAAY,GAAG;AAChD,IAAM,YAAY,KAAK,QAAQ,UAAU;AAiBlC,SAAS,oBAA8B;AAC5C,QAAM,UAAU,KAAK,QAAQ,WAAW,IAAI;AAC5C,QAAM,WAAW,cAAc,KAAK,QAAQ,SAAS,cAAc,CAAC;AACpE,QAAM,kBAAkB,cAAc,KAAK,QAAQ,QAAQ,IAAI,GAAG,cAAc,CAAC;AAGjF,WAAS,mBAAmB,KAAa,kBAAkC;AACzE,eAAW,OAAO,CAAC,iBAAiB,QAAQ,GAAG;AAC7C,UAAI;AACF,cAAM,UAAU,IAAI,QAAQ,GAAG,GAAG,eAAe;AACjD,eAAO,KAAK,QAAQ,OAAO;AAAA,MAC7B,QAAQ;AACN,YAAI;AACF,gBAAM,QAAQ,IAAI,QAAQ,GAAG;AAC7B,cAAI,MAAM,KAAK,QAAQ,KAAK;AAC5B,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,gBAAI,WAAW,KAAK,KAAK,KAAK,cAAc,CAAC,EAAG,QAAO;AACvD,kBAAM,KAAK,QAAQ,GAAG;AAAA,UACxB;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK,QAAQ,SAAS,gBAAgB;AAAA,EAC/C;AACA,QAAM,WAAW,mBAAmB,iBAAiB,6BAA6B;AAClF,QAAM,YAAY,mBAAmB,kBAAkB,8BAA8B;AACrF,QAAM,SAAS,mBAAmB,eAAe,2BAA2B;AAG5E,QAAM,YAAY,WAAW,KAAK,QAAQ,WAAW,cAAc,CAAC;AAEpE,QAAM,oBAAoB,KAAK,QAAQ,UAAU,cAAc;AAC/D,QAAM,aAAa,KAAK,QAAQ,SAAS,0BAA0B;AACnE,QAAM,aAAa,KAAK,QAAQ,UAAU,2BAA2B;AAMrE,QAAM,gBAAwC;AAAA,IAC5C,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,EACxB;AAEA,QAAM,oBAAoB,oBAAI,IAAoB;AAClD,aAAW,CAAC,KAAK,QAAQ,KAAK,OAAO,QAAQ,aAAa,GAAG;AAC3D,UAAM,iBAAiB,KAAK,QAAQ,UAAU,OAAO,MAAM,KAAK;AAChE,sBAAkB,IAAI,gBAAgB,KAAK,QAAQ,SAAS,QAAQ,CAAC;AAAA,EACvE;AAEA,QAAM,WAAW,KAAK,QAAQ,SAAS,+BAA+B;AACtE,QAAM,iBAAiB,KAAK,QAAQ,SAAS,2CAA2C;AAExF,QAAM,WAAmC,EAAE,MAAM,UAAU,OAAO,WAAW,IAAI,OAAO;AAExF,QAAM,YAAoC;AAAA,IACxC,eAAe;AAAA,IACf,aAAa;AAAA,IACb,MAAM;AAAA,IACN,WAAW;AAAA,IACX,IAAI;AAAA,IACJ,eAAe;AAAA,IACf,aAAa;AAAA,IACb,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAEA,QAAM,eAAe;AAErB,QAAM,aAAqB;AAAA,IACzB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,QAAQ,UAAU;AAC1B,UAAI,CAAC,SAAU,QAAO;AACtB,UAAI,SAAS,WAAW,YAAY,EAAG,QAAO;AAG9C,UAAI,CAAC,UAAW,QAAO;AAEvB,YAAM,oBACJ,SAAS,WAAW,WAAW,KAAK,GAAG,KACvC,SAAS,WAAW,YAAY,KAAK,GAAG,KACxC,SAAS,WAAW,SAAS,KAAK,GAAG,KACrC,SAAS,SAAS,iBAAiB,KACnC,SAAS,SAAS,kBAAkB,KACpC,SAAS,SAAS,eAAe;AAGnC,UAAI,WAAW,cAAc,aAAa,YAAY;AACpD,eAAO;AAAA,MACT;AAGA,UAAI,WAAW,eAAe;AAC5B,eAAO,KAAK,QAAQ,QAAQ,cAAc;AAAA,MAC5C;AACA,UAAI,WAAW,kBAAkB;AAC/B,eAAO,KAAK,QAAQ,WAAW,cAAc;AAAA,MAC/C;AACA,UAAI,WAAW,iBAAiB;AAE9B,eAAO;AAAA,MACT;AAGA,UAAI,OAAO,WAAW,WAAW,GAAG;AAClC,cAAM,QAAQ,OAAO,MAAM,GAAG;AAC9B,cAAM,UAAU,MAAM,CAAC;AACvB,cAAM,UAAU,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG;AACvC,YAAI,SAAS;AACX,gBAAM,OAAO,SAAS,OAAO;AAC7B,cAAI,KAAM,QAAO,KAAK,QAAQ,MAAM,UAAU,KAAK;AAAA,QACrD;AAAA,MACF;AAGA,UAAI,OAAO,WAAW,GAAG,KAAK,mBAAmB;AAC/C,cAAM,cAAc,KAAK,QAAQ,QAAQ;AACzC,cAAM,WAAW,KAAK,QAAQ,aAAa,MAAM;AACjD,YAAI,SAAS,SAAS,mBAAmB,GAAG;AAC1C,iBAAO,KAAK,QAAQ,SAAS,qCAAqC;AAAA,QACpE;AACA,cAAM,OAAO,kBAAkB,IAAI,QAAQ,KAAK,kBAAkB,IAAI,WAAW,KAAK;AACtF,YAAI,KAAM,QAAO;AACjB,cAAM,YAAY,kBAAkB,IAAI,WAAW,WAAW;AAC9D,YAAI,UAAW,QAAO;AAAA,MACxB;AAGA,UAAI,mBAAmB;AACrB,YAAI,OAAO,SAAS,MAAM,KAAK,OAAO,SAAS,OAAO,GAAG;AACvD,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,SAAS,aAAa,GAAG;AAClC,cAAI,OAAO,SAAS,yBAAyB,EAAG,QAAO;AACvD,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,SAAS,kBAAkB,GAAG;AACvC,iBAAO,KAAK,QAAQ,SAAS,wBAAwB;AAAA,QACvD;AAAA,MACF;AAGA,UAAI,WAAW,UAAU;AACvB,eAAO,KAAK,QAAQ,SAAS,0BAA0B;AAAA,MACzD;AAGA,UAAI,UAAU,MAAM,KAAK,mBAAmB;AAC1C,eAAO,KAAK,QAAQ,SAAS,UAAU,MAAM,CAAC;AAAA,MAChD;AAGA,UAAI,CAAC,OAAO,WAAW,GAAG,KAAK,CAAC,OAAO,WAAW,GAAG,KAAK,CAAC,OAAO,WAAW,WAAW,KAAK,mBAAmB;AAC9G,eAAO,eAAe;AAAA,MACxB;AAEA,aAAO;AAAA,IACT;AAAA,IACA,KAAK,IAAI;AACP,UAAI,OAAO,wBAAwB;AACjC,eAAO;AAAA,MACT;AACA,UAAI,GAAG,WAAW,YAAY,GAAG;AAC/B,cAAM,MAAM,GAAG,MAAM,aAAa,MAAM;AACxC,YAAI;AACF,gBAAM,MAAM,SAAS,GAAG;AACxB,cAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,kBAAM,QAAQ,OAAO,KAAK,GAAG,EAAE;AAAA,cAC7B,CAAC,MAAM,MAAM,aAAa,MAAM,gBAAgB,qBAAqB,KAAK,CAAC;AAAA,YAC7E;AACA,gBAAI,MAAM,SAAS,GAAG;AACpB,qBAAO;AAAA,gBACL,0BAA0B,GAAG;AAAA,gBAC7B;AAAA,gBACA,GAAG,MAAM;AAAA,kBACP,CAAC,MAAM,gBAAgB,CAAC,YAAY,CAAC,yBAAyB,CAAC;AAAA,gBACjE;AAAA,cACF,EAAE,KAAK,IAAI;AAAA,YACb;AAAA,UACF;AAAA,QACF,QAAQ;AAAA,QAER;AACA,eAAO;AAAA,UACL,kBAAkB,GAAG;AAAA,UACrB,0BAA0B,GAAG;AAAA,UAC7B;AAAA,QACF,EAAE,KAAK,IAAI;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAsB;AAAA,IAC1B,MAAM;AAAA,IACN,SAAS;AACP,YAAM,UAAkC,CAAC;AAMzC,cAAQ,SAAS,IAAI,KAAK,QAAQ,SAAS,sBAAsB;AACjE,cAAQ,iBAAiB,IAAI,KAAK,QAAQ,SAAS,8BAA8B;AACjF,cAAQ,cAAc,IAAI,KAAK,QAAQ,SAAS,sBAAsB;AAGtE,UAAI,WAAW;AACb,mBAAW,CAAC,KAAK,QAAQ,KAAK,OAAO,QAAQ,aAAa,GAAG;AAC3D,kBAAQ,KAAK,QAAQ,UAAU,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,SAAS,QAAQ;AAAA,QAC9E;AAAA,MACF;AAGA,iBAAW,OAAO,CAAC,oBAAoB,eAAe,QAAQ,QAAQ,GAAG;AACvE,YAAI;AACF,kBAAQ,GAAG,IAAI,KAAK,QAAQ,SAAS,QAAQ,MAAM,eAAe,CAAC;AAAA,QACrE,QAAQ;AACN,kBAAQ,GAAG,IAAI,KAAK,QAAQ,SAAS,gBAAgB,GAAG;AAAA,QAC1D;AAAA,MACF;AAEA,aAAO;AAAA,QACL,QAAQ;AAAA,UACN,eAAe,KAAK,UAAU,CAAC,CAAC;AAAA,QAClC;AAAA,QACA,SAAS;AAAA,UACP,OAAO;AAAA,UACP,QAAQ,CAAC,SAAS,aAAa,oBAAoB,eAAe,QAAQ;AAAA,QAC5E;AAAA,QACA,cAAc;AAAA,UACZ,SAAS,YAAY;AAAA,YACnB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,IAAI;AAAA,YACF;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,UACN,IAAI;AAAA,YACF,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,CAAC,YAAY,WAAW;AACjC;","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 // ── 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":";AACA,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAE9B,IAAM,aAAa,cAAc,YAAY,GAAG;AAChD,IAAM,YAAY,KAAK,QAAQ,UAAU;AAiBlC,SAAS,oBAA8B;AAC5C,QAAM,UAAU,KAAK,QAAQ,WAAW,IAAI;AAC5C,QAAM,WAAW,cAAc,KAAK,QAAQ,SAAS,cAAc,CAAC;AACpE,QAAM,kBAAkB,cAAc,KAAK,QAAQ,QAAQ,IAAI,GAAG,cAAc,CAAC;AAGjF,WAAS,mBAAmB,KAAa,kBAAkC;AACzE,eAAW,OAAO,CAAC,iBAAiB,QAAQ,GAAG;AAC7C,UAAI;AACF,cAAM,UAAU,IAAI,QAAQ,GAAG,GAAG,eAAe;AACjD,eAAO,KAAK,QAAQ,OAAO;AAAA,MAC7B,QAAQ;AACN,YAAI;AACF,gBAAM,QAAQ,IAAI,QAAQ,GAAG;AAC7B,cAAI,MAAM,KAAK,QAAQ,KAAK;AAC5B,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,gBAAI,WAAW,KAAK,KAAK,KAAK,cAAc,CAAC,EAAG,QAAO;AACvD,kBAAM,KAAK,QAAQ,GAAG;AAAA,UACxB;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK,QAAQ,SAAS,gBAAgB;AAAA,EAC/C;AACA,QAAM,WAAW,mBAAmB,iBAAiB,6BAA6B;AAClF,QAAM,YAAY,mBAAmB,kBAAkB,8BAA8B;AACrF,QAAM,SAAS,mBAAmB,eAAe,2BAA2B;AAG5E,QAAM,YAAY,WAAW,KAAK,QAAQ,WAAW,cAAc,CAAC;AAEpE,QAAM,oBAAoB,KAAK,QAAQ,UAAU,cAAc;AAC/D,QAAM,aAAa,KAAK,QAAQ,SAAS,0BAA0B;AACnE,QAAM,aAAa,KAAK,QAAQ,UAAU,2BAA2B;AAMrE,QAAM,gBAAwC;AAAA,IAC5C,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,EACxB;AAEA,QAAM,oBAAoB,oBAAI,IAAoB;AAClD,aAAW,CAAC,KAAK,QAAQ,KAAK,OAAO,QAAQ,aAAa,GAAG;AAC3D,UAAM,iBAAiB,KAAK,QAAQ,UAAU,OAAO,MAAM,KAAK;AAChE,sBAAkB,IAAI,gBAAgB,KAAK,QAAQ,SAAS,QAAQ,CAAC;AAAA,EACvE;AAEA,QAAM,WAAW,KAAK,QAAQ,SAAS,+BAA+B;AACtE,QAAM,iBAAiB,KAAK,QAAQ,SAAS,2CAA2C;AAExF,QAAM,WAAmC,EAAE,MAAM,UAAU,OAAO,WAAW,IAAI,OAAO;AAExF,QAAM,YAAoC;AAAA,IACxC,eAAe;AAAA,IACf,aAAa;AAAA,IACb,MAAM;AAAA,IACN,WAAW;AAAA,IACX,IAAI;AAAA,IACJ,eAAe;AAAA,IACf,aAAa;AAAA,IACb,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAEA,QAAM,eAAe;AAErB,QAAM,aAAqB;AAAA,IACzB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,QAAQ,UAAU;AAC1B,UAAI,CAAC,SAAU,QAAO;AACtB,UAAI,SAAS,WAAW,YAAY,EAAG,QAAO;AAK9C,UAAI,UAAU,MAAM,GAAG;AACrB,eAAO,KAAK,QAAQ,SAAS,UAAU,MAAM,CAAC;AAAA,MAChD;AACA,UAAI,WAAW,UAAU;AACvB,eAAO,KAAK,QAAQ,SAAS,0BAA0B;AAAA,MACzD;AAGA,UAAI,CAAC,UAAW,QAAO;AAEvB,YAAM,oBACJ,SAAS,WAAW,WAAW,KAAK,GAAG,KACvC,SAAS,WAAW,YAAY,KAAK,GAAG,KACxC,SAAS,WAAW,SAAS,KAAK,GAAG,KACrC,SAAS,SAAS,iBAAiB,KACnC,SAAS,SAAS,kBAAkB,KACpC,SAAS,SAAS,eAAe;AAGnC,UAAI,WAAW,cAAc,aAAa,YAAY;AACpD,eAAO;AAAA,MACT;AAGA,UAAI,WAAW,eAAe;AAC5B,eAAO,KAAK,QAAQ,QAAQ,cAAc;AAAA,MAC5C;AACA,UAAI,WAAW,kBAAkB;AAC/B,eAAO,KAAK,QAAQ,WAAW,cAAc;AAAA,MAC/C;AACA,UAAI,WAAW,iBAAiB;AAE9B,eAAO;AAAA,MACT;AAGA,UAAI,OAAO,WAAW,WAAW,GAAG;AAClC,cAAM,QAAQ,OAAO,MAAM,GAAG;AAC9B,cAAM,UAAU,MAAM,CAAC;AACvB,cAAM,UAAU,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG;AACvC,YAAI,SAAS;AACX,gBAAM,OAAO,SAAS,OAAO;AAC7B,cAAI,KAAM,QAAO,KAAK,QAAQ,MAAM,UAAU,KAAK;AAAA,QACrD;AAAA,MACF;AAGA,UAAI,OAAO,WAAW,GAAG,KAAK,mBAAmB;AAC/C,cAAM,cAAc,KAAK,QAAQ,QAAQ;AACzC,cAAM,WAAW,KAAK,QAAQ,aAAa,MAAM;AACjD,YAAI,SAAS,SAAS,mBAAmB,GAAG;AAC1C,iBAAO,KAAK,QAAQ,SAAS,qCAAqC;AAAA,QACpE;AACA,cAAM,OAAO,kBAAkB,IAAI,QAAQ,KAAK,kBAAkB,IAAI,WAAW,KAAK;AACtF,YAAI,KAAM,QAAO;AACjB,cAAM,YAAY,kBAAkB,IAAI,WAAW,WAAW;AAC9D,YAAI,UAAW,QAAO;AAAA,MACxB;AAGA,UAAI,mBAAmB;AACrB,YAAI,OAAO,SAAS,MAAM,KAAK,OAAO,SAAS,OAAO,GAAG;AACvD,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,SAAS,aAAa,GAAG;AAClC,cAAI,OAAO,SAAS,yBAAyB,EAAG,QAAO;AACvD,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,SAAS,kBAAkB,GAAG;AACvC,iBAAO,KAAK,QAAQ,SAAS,wBAAwB;AAAA,QACvD;AAAA,MACF;AAGA,UAAI,CAAC,OAAO,WAAW,GAAG,KAAK,CAAC,OAAO,WAAW,GAAG,KAAK,CAAC,OAAO,WAAW,WAAW,KAAK,mBAAmB;AAC9G,eAAO,eAAe;AAAA,MACxB;AAEA,aAAO;AAAA,IACT;AAAA,IACA,KAAK,IAAI;AACP,UAAI,OAAO,wBAAwB;AACjC,eAAO;AAAA,MACT;AACA,UAAI,GAAG,WAAW,YAAY,GAAG;AAC/B,cAAM,MAAM,GAAG,MAAM,aAAa,MAAM;AACxC,YAAI;AACF,gBAAM,MAAM,SAAS,GAAG;AACxB,cAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,kBAAM,QAAQ,OAAO,KAAK,GAAG,EAAE;AAAA,cAC7B,CAAC,MAAM,MAAM,aAAa,MAAM,gBAAgB,qBAAqB,KAAK,CAAC;AAAA,YAC7E;AACA,gBAAI,MAAM,SAAS,GAAG;AACpB,qBAAO;AAAA,gBACL,0BAA0B,GAAG;AAAA,gBAC7B;AAAA,gBACA,GAAG,MAAM;AAAA,kBACP,CAAC,MAAM,gBAAgB,CAAC,YAAY,CAAC,yBAAyB,CAAC;AAAA,gBACjE;AAAA,cACF,EAAE,KAAK,IAAI;AAAA,YACb;AAAA,UACF;AAAA,QACF,QAAQ;AAAA,QAER;AACA,eAAO;AAAA,UACL,kBAAkB,GAAG;AAAA,UACrB,0BAA0B,GAAG;AAAA,UAC7B;AAAA,QACF,EAAE,KAAK,IAAI;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAsB;AAAA,IAC1B,MAAM;AAAA,IACN,SAAS;AACP,YAAM,UAAkC,CAAC;AAMzC,cAAQ,SAAS,IAAI,KAAK,QAAQ,SAAS,sBAAsB;AACjE,cAAQ,iBAAiB,IAAI,KAAK,QAAQ,SAAS,8BAA8B;AACjF,cAAQ,cAAc,IAAI,KAAK,QAAQ,SAAS,sBAAsB;AAGtE,UAAI,WAAW;AACb,mBAAW,CAAC,KAAK,QAAQ,KAAK,OAAO,QAAQ,aAAa,GAAG;AAC3D,kBAAQ,KAAK,QAAQ,UAAU,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,SAAS,QAAQ;AAAA,QAC9E;AAAA,MACF;AAGA,iBAAW,OAAO,CAAC,oBAAoB,eAAe,QAAQ,QAAQ,GAAG;AACvE,YAAI;AACF,kBAAQ,GAAG,IAAI,KAAK,QAAQ,SAAS,QAAQ,MAAM,eAAe,CAAC;AAAA,QACrE,QAAQ;AACN,kBAAQ,GAAG,IAAI,KAAK,QAAQ,SAAS,gBAAgB,GAAG;AAAA,QAC1D;AAAA,MACF;AAEA,aAAO;AAAA,QACL,QAAQ;AAAA,UACN,eAAe,KAAK,UAAU,CAAC,CAAC;AAAA,QAClC;AAAA,QACA,SAAS;AAAA,UACP,OAAO;AAAA,UACP,QAAQ,CAAC,SAAS,aAAa,oBAAoB,eAAe,QAAQ;AAAA,QAC5E;AAAA,QACA,cAAc;AAAA,UACZ,SAAS,YAAY;AAAA,YACnB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,IAAI;AAAA,YACF;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,UACN,IAAI;AAAA,YACF,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,CAAC,YAAY,WAAW;AACjC;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gridland/web",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.31",
|
|
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.31",
|
|
44
44
|
"diff": "^8.0.3",
|
|
45
45
|
"events": "^3.3.0",
|
|
46
46
|
"marked": "^17.0.3",
|