@gridland/web 0.2.32 → 0.2.33

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.
@@ -149,6 +149,13 @@ function withGridland(nextConfig = {}) {
149
149
  ...config.experiments,
150
150
  topLevelAwait: true
151
151
  };
152
+ config.output = {
153
+ ...config.output,
154
+ environment: {
155
+ ...config.output?.environment,
156
+ asyncFunction: true
157
+ }
158
+ };
152
159
  return config;
153
160
  }
154
161
  };
@@ -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 // 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"]}
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 yoga-layout WASM compilation).\n // All ESM-capable browsers support top-level await, so we declare\n // asyncFunction support to suppress webpack's false-positive warning.\n config.experiments = {\n ...config.experiments,\n topLevelAwait: true,\n }\n config.output = {\n ...config.output,\n environment: {\n ...config.output?.environment,\n asyncFunction: true,\n },\n }\n\n return config\n },\n }\n}\n"],"mappings":"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","names":["path"]}
@@ -115,6 +115,13 @@ function withGridland(nextConfig = {}) {
115
115
  ...config.experiments,
116
116
  topLevelAwait: true
117
117
  };
118
+ config.output = {
119
+ ...config.output,
120
+ environment: {
121
+ ...config.output?.environment,
122
+ asyncFunction: true
123
+ }
124
+ };
118
125
  return config;
119
126
  }
120
127
  };
@@ -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 // 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":[]}
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 yoga-layout WASM compilation).\n // All ESM-capable browsers support top-level await, so we declare\n // asyncFunction support to suppress webpack's false-positive warning.\n config.experiments = {\n ...config.experiments,\n topLevelAwait: true,\n }\n config.output = {\n ...config.output,\n environment: {\n ...config.output?.environment,\n asyncFunction: true,\n },\n }\n\n return config\n },\n }\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.32",
3
+ "version": "0.2.33",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {