diff --git a/.github/workflows/bench-native-smoke.yml b/.github/workflows/bench-native-smoke.yml index f6031d4c8..d931e931e 100644 --- a/.github/workflows/bench-native-smoke.yml +++ b/.github/workflows/bench-native-smoke.yml @@ -40,7 +40,7 @@ jobs: - name: Restore Zig cache uses: actions/cache@v5 with: - path: .zig-cache + path: packages/native/.zig-cache key: zig-v1-${{ runner.os }}-${{ env.ZIG_VERSION }}-${{ github.run_id }}-${{ github.job }} restore-keys: zig-v1-${{ runner.os }}-${{ env.ZIG_VERSION }}- diff --git a/.github/workflows/build-core.yml b/.github/workflows/build-core.yml index 999969873..7f17668f2 100644 --- a/.github/workflows/build-core.yml +++ b/.github/workflows/build-core.yml @@ -40,7 +40,7 @@ jobs: - name: Restore Zig cache uses: actions/cache@v5 with: - path: .zig-cache + path: packages/native/.zig-cache key: zig-v1-${{ runner.os }}-${{ env.ZIG_VERSION }}-${{ github.run_id }}-${{ github.job }} restore-keys: zig-v1-${{ runner.os }}-${{ env.ZIG_VERSION }}- @@ -53,8 +53,8 @@ jobs: bun run build:native --all - name: Build custom target without Ghostty VT - working-directory: packages/core/src/zig - run: zig build -Dtarget=x86_64-freebsd -Doptimize=ReleaseFast + working-directory: packages/native + run: zig build -Dlibrary-target=x86_64-freebsd -Doptimize=ReleaseFast - name: Upload native artifacts uses: actions/upload-artifact@v7 @@ -105,7 +105,7 @@ jobs: if: runner.os != 'Windows' uses: actions/cache@v5 with: - path: .zig-cache + path: packages/native/.zig-cache key: zig-v1-${{ runner.os }}-${{ env.ZIG_VERSION }}-${{ github.run_id }}-${{ github.job }} restore-keys: zig-v1-${{ runner.os }}-${{ env.ZIG_VERSION }}- @@ -125,9 +125,8 @@ jobs: ls -la packages/core/node_modules/@opentui/core-${{ matrix.platform }}/ - name: Run native tests - run: | - cd packages/core/src/zig - zig build test --summary all + working-directory: packages/core + run: bun run test:native - name: Build TypeScript library run: | diff --git a/.github/workflows/build-examples.yml b/.github/workflows/build-examples.yml index bb7d8c776..6f10f50f9 100644 --- a/.github/workflows/build-examples.yml +++ b/.github/workflows/build-examples.yml @@ -131,12 +131,12 @@ jobs: mkdir -p artifacts/example-notices cp LICENSE artifacts/example-notices/LICENSE cp packages/core/THIRD_PARTY_LICENSES/GHOSTTY artifacts/example-notices/LICENSE-GHOSTTY - cp packages/core/src/zig/vendor/wuffs/LICENSE artifacts/example-notices/LICENSE-WUFFS - cp packages/core/src/zig/vendor/stb/LICENSE artifacts/example-notices/LICENSE-STB - cp packages/core/src/zig/vendor/libwebp/COPYING artifacts/example-notices/LICENSE-LIBWEBP - cp packages/core/src/zig/vendor/libwebp/PATENTS artifacts/example-notices/PATENTS-LIBWEBP - cp packages/core/src/zig/vendor/libwebp/AUTHORS artifacts/example-notices/AUTHORS-LIBWEBP - cp packages/core/src/zig/vendor/lcms2/LICENSE artifacts/example-notices/LICENSE-LCMS2 + cp packages/native/src/vendor/wuffs/LICENSE artifacts/example-notices/LICENSE-WUFFS + cp packages/native/src/vendor/stb/LICENSE artifacts/example-notices/LICENSE-STB + cp packages/native/src/vendor/libwebp/COPYING artifacts/example-notices/LICENSE-LIBWEBP + cp packages/native/src/vendor/libwebp/PATENTS artifacts/example-notices/PATENTS-LIBWEBP + cp packages/native/src/vendor/libwebp/AUTHORS artifacts/example-notices/AUTHORS-LIBWEBP + cp packages/native/src/vendor/lcms2/LICENSE artifacts/example-notices/LICENSE-LCMS2 # Create separate zips for each platform's examples - name: Package examples - darwin-x64 diff --git a/.github/workflows/build-keymap.yml b/.github/workflows/build-keymap.yml index d852807a5..1ab210a3c 100644 --- a/.github/workflows/build-keymap.yml +++ b/.github/workflows/build-keymap.yml @@ -46,7 +46,7 @@ jobs: if: runner.os != 'Windows' uses: actions/cache@v5 with: - path: .zig-cache + path: packages/native/.zig-cache key: zig-v1-${{ runner.os }}-0.16.0-${{ github.run_id }}-${{ github.job }} restore-keys: zig-v1-${{ runner.os }}-0.16.0- @@ -97,7 +97,7 @@ jobs: - name: Restore Zig cache uses: actions/cache@v5 with: - path: .zig-cache + path: packages/native/.zig-cache key: zig-v1-${{ runner.os }}-0.16.0-${{ github.run_id }}-${{ github.job }} restore-keys: zig-v1-${{ runner.os }}-0.16.0- diff --git a/.github/workflows/build-native.yml b/.github/workflows/build-native.yml index 6210263e4..fcac52766 100644 --- a/.github/workflows/build-native.yml +++ b/.github/workflows/build-native.yml @@ -38,7 +38,7 @@ jobs: - name: Restore Zig cache uses: actions/cache@v5 with: - path: .zig-cache + path: packages/native/.zig-cache key: zig-v1-${{ runner.os }}-${{ env.ZIG_VERSION }}-${{ github.run_id }}-${{ github.job }} restore-keys: zig-v1-${{ runner.os }}-${{ env.ZIG_VERSION }}- @@ -107,12 +107,12 @@ jobs: mkdir -p artifacts/native-notices cp LICENSE artifacts/native-notices/LICENSE cp packages/core/THIRD_PARTY_LICENSES/GHOSTTY artifacts/native-notices/LICENSE-GHOSTTY - cp packages/core/src/zig/vendor/wuffs/LICENSE artifacts/native-notices/LICENSE-WUFFS - cp packages/core/src/zig/vendor/stb/LICENSE artifacts/native-notices/LICENSE-STB - cp packages/core/src/zig/vendor/libwebp/COPYING artifacts/native-notices/LICENSE-LIBWEBP - cp packages/core/src/zig/vendor/libwebp/PATENTS artifacts/native-notices/PATENTS-LIBWEBP - cp packages/core/src/zig/vendor/libwebp/AUTHORS artifacts/native-notices/AUTHORS-LIBWEBP - cp packages/core/src/zig/vendor/lcms2/LICENSE artifacts/native-notices/LICENSE-LCMS2 + cp packages/native/src/vendor/wuffs/LICENSE artifacts/native-notices/LICENSE-WUFFS + cp packages/native/src/vendor/stb/LICENSE artifacts/native-notices/LICENSE-STB + cp packages/native/src/vendor/libwebp/COPYING artifacts/native-notices/LICENSE-LIBWEBP + cp packages/native/src/vendor/libwebp/PATENTS artifacts/native-notices/PATENTS-LIBWEBP + cp packages/native/src/vendor/libwebp/AUTHORS artifacts/native-notices/AUTHORS-LIBWEBP + cp packages/native/src/vendor/lcms2/LICENSE artifacts/native-notices/LICENSE-LCMS2 # Create separate zips for each platform's native binaries - name: Package native binaries - darwin-x64 diff --git a/.github/workflows/build-qrcode.yml b/.github/workflows/build-qrcode.yml index cfbdf84ca..fd7e6ab8a 100644 --- a/.github/workflows/build-qrcode.yml +++ b/.github/workflows/build-qrcode.yml @@ -44,7 +44,7 @@ jobs: if: runner.os != 'Windows' uses: actions/cache@v5 with: - path: .zig-cache + path: packages/native/.zig-cache key: zig-v1-${{ runner.os }}-0.16.0-${{ github.run_id }}-${{ github.job }} restore-keys: zig-v1-${{ runner.os }}-0.16.0- diff --git a/.github/workflows/build-react.yml b/.github/workflows/build-react.yml index d8d08bff2..96463e48a 100644 --- a/.github/workflows/build-react.yml +++ b/.github/workflows/build-react.yml @@ -45,7 +45,7 @@ jobs: if: runner.os != 'Windows' uses: actions/cache@v5 with: - path: .zig-cache + path: packages/native/.zig-cache key: zig-v1-${{ runner.os }}-0.16.0-${{ github.run_id }}-${{ github.job }} restore-keys: zig-v1-${{ runner.os }}-0.16.0- diff --git a/.github/workflows/build-solid.yml b/.github/workflows/build-solid.yml index b7550cd15..0778d5d16 100644 --- a/.github/workflows/build-solid.yml +++ b/.github/workflows/build-solid.yml @@ -46,7 +46,7 @@ jobs: if: runner.os != 'Windows' uses: actions/cache@v5 with: - path: .zig-cache + path: packages/native/.zig-cache key: zig-v1-${{ runner.os }}-0.16.0-${{ github.run_id }}-${{ github.job }} restore-keys: zig-v1-${{ runner.os }}-0.16.0- @@ -94,7 +94,7 @@ jobs: - name: Restore Zig cache uses: actions/cache@v5 with: - path: .zig-cache + path: packages/native/.zig-cache key: zig-v1-${{ runner.os }}-0.16.0-${{ github.run_id }}-${{ github.job }} restore-keys: zig-v1-${{ runner.os }}-0.16.0- @@ -142,7 +142,7 @@ jobs: - name: Restore Zig cache uses: actions/cache@v5 with: - path: .zig-cache + path: packages/native/.zig-cache key: zig-v1-${{ runner.os }}-0.16.0-${{ github.run_id }}-${{ github.job }} restore-keys: zig-v1-${{ runner.os }}-0.16.0- diff --git a/.github/workflows/npm-release.yml b/.github/workflows/npm-release.yml index 77d21cee6..850e1b436 100644 --- a/.github/workflows/npm-release.yml +++ b/.github/workflows/npm-release.yml @@ -38,7 +38,7 @@ jobs: - name: Restore Zig cache uses: actions/cache@v5 with: - path: .zig-cache + path: packages/native/.zig-cache key: zig-v1-${{ runner.os }}-0.16.0-${{ github.run_id }}-${{ github.job }} restore-keys: zig-v1-${{ runner.os }}-0.16.0- diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml index c49155688..5d364529e 100644 --- a/.github/workflows/pkg-pr-new.yml +++ b/.github/workflows/pkg-pr-new.yml @@ -39,7 +39,7 @@ jobs: - name: Restore Zig cache uses: actions/cache@v5 with: - path: .zig-cache + path: packages/native/.zig-cache key: zig-v1-${{ runner.os }}-0.16.0-${{ github.run_id }}-${{ github.job }} restore-keys: zig-v1-${{ runner.os }}-0.16.0- diff --git a/.oxfmtrc.json b/.oxfmtrc.json index 5d09ca5b3..9b946b60a 100644 --- a/.oxfmtrc.json +++ b/.oxfmtrc.json @@ -5,6 +5,7 @@ "sortPackageJson": false, "ignorePatterns": [ "**/.zig-cache/**", + "**/zig-pkg/**", "packages/core/src/lib/tree-sitter/default-parsers.ts", "packages/web/public/recordings/*.json" ] diff --git a/README.md b/README.md index 2e0485679..ff666e801 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ bun create tui This monorepo contains the following packages: +- [`@opentui/native`](packages/native) - Private workspace package containing the Zig implementation, tests, and benchmarks. - [`@opentui/core`](packages/core) - TypeScript bindings for OpenTUI's native Zig core, with an imperative API and all primitives. - [`@opentui/three`](packages/three) - Three.js WebGPU renderer for OpenTUI. - [`@opentui/solid`](packages/solid) - The SolidJS reconciler for OpenTUI. diff --git a/bun.lock b/bun.lock index 999b3935f..e0f5870f8 100644 --- a/bun.lock +++ b/bun.lock @@ -92,6 +92,10 @@ "solid-js", ], }, + "packages/native": { + "name": "@opentui/native", + "version": "0.5.4", + }, "packages/qrcode": { "name": "@opentui/qrcode", "version": "0.5.4", @@ -560,6 +564,8 @@ "@opentui/keymap": ["@opentui/keymap@workspace:packages/keymap"], + "@opentui/native": ["@opentui/native@workspace:packages/native"], + "@opentui/qrcode": ["@opentui/qrcode@workspace:packages/qrcode"], "@opentui/react": ["@opentui/react@workspace:packages/react"], diff --git a/package.json b/package.json index efeb732fc..1328dd026 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "packages/solid/examples" ], "scripts": { - "build": "cd packages/core && bun run build && cd ../qrcode && bun run build && cd ../three && bun run build && cd ../solid && bun run build && cd ../react && bun run build && cd ../keymap && bun run build && cd ../ssh && bun run build", + "build": "cd packages/native && bun run build && cd ../core && bun scripts/build.ts --native --skip-zig && bun run build:lib && cd ../qrcode && bun run build && cd ../three && bun run build && cd ../solid && bun run build && cd ../react && bun run build && cd ../keymap && bun run build && cd ../ssh && bun run build", "build:examples": "cd packages/examples && bun run build", "clean": "bun scripts/clean.ts", "examples:node": "node packages/examples/scripts/run-node26.mjs", @@ -25,7 +25,7 @@ "publish:keymap": "cd packages/keymap && bun run publish", "publish:ssh": "cd packages/ssh && bun run publish", "prepare-release": "bun scripts/prepare-release.ts", - "test": "bun run --filter '@opentui/core' --filter '@opentui/qrcode' --filter '@opentui/three' --filter '@opentui/solid' --filter '@opentui/react' --filter '@opentui/keymap' --filter '@opentui/ssh' --if-present test" + "test": "bun run --filter '@opentui/native' --filter '@opentui/core' --filter '@opentui/qrcode' --filter '@opentui/three' --filter '@opentui/solid' --filter '@opentui/react' --filter '@opentui/keymap' --filter '@opentui/ssh' --if-present test" }, "devDependencies": { "oxfmt": "0.41.0", diff --git a/packages/core/.gitignore b/packages/core/.gitignore index abe0f6778..6822bdf21 100644 --- a/packages/core/.gitignore +++ b/packages/core/.gitignore @@ -1,8 +1,4 @@ -# Zig build cache -.zig-cache .node-test .node-benchmark ffi-fast-path-paired.json -zig-out -src/zig/lib -src/zig/zig-pkg +src/zig/ diff --git a/packages/core/README.md b/packages/core/README.md index d8fe117a8..65cb9206c 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -40,7 +40,7 @@ Run native performance benchmarks: bun run bench:native ``` -See [src/zig/bench.zig](src/zig/bench.zig) for available options like `--filter` and `--mem`. +See [the native benchmark runner](../native/src/bench.zig) for options such as `--filter` and `--mem`. NativeSpanFeed TypeScript benchmarks: diff --git a/packages/core/docs/development.md b/packages/core/docs/development.md index 6e4d7c2c2..cab110194 100644 --- a/packages/core/docs/development.md +++ b/packages/core/docs/development.md @@ -48,6 +48,16 @@ bun run test:native -Dtest-filter="test name" bun run bench:native ``` +The Zig implementation, tests, and benchmarks live in `packages/native`. Run direct Zig commands and the no-JavaScript +example from that package: + +```bash +cd packages/native +zig build test --summary all +cd examples/hello +zig build run +``` + ## Local Development Linking Link your local OpenTUI to another project: diff --git a/packages/core/package.json b/packages/core/package.json index 6dd8639d1..5047ca1af 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -24,9 +24,9 @@ "build:lib": "bun scripts/build.ts --lib", "build:native": "bun scripts/build.ts --native", "build:native:dev": "bun scripts/build.ts --native --dev", - "vendor:update:images": "sh src/zig/vendor/update.sh", - "test:native": "cd src/zig && zig build test --summary all", - "bench:native": "cd src/zig && zig build bench -Dbench-optimize=ReleaseFast --", + "vendor:update:images": "cd ../native && sh src/vendor/update.sh", + "test:native": "cd ../native && bun run test", + "bench:native": "cd ../native && bun run bench --", "bench:js": "bun src/benchmark/js-benchmark.ts", "bench:js:node": "bun scripts/bench-js-node.ts", "bench:layout": "bun src/benchmark/layout-benchmark.ts", @@ -47,7 +47,7 @@ "test:standalone": "bun scripts/standalone-test.ts", "test:js": "bun test --path-ignore-patterns='src/zig/zig-pkg/**'", "test:js:node": "bun scripts/test-node.ts", - "test": "bun run test:native && bun run test:js" + "test": "bun run test:js" }, "license": "MIT", "devDependencies": { diff --git a/packages/core/scripts/build.ts b/packages/core/scripts/build.ts index d57da4727..f407800f9 100644 --- a/packages/core/scripts/build.ts +++ b/packages/core/scripts/build.ts @@ -41,6 +41,7 @@ interface BunBuildOptions { const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) const rootDir = resolve(__dirname, "..") +const nativeRoot = resolve(rootDir, "../native") const licensePath = path.resolve(__dirname, "../../../LICENSE") const ghosttyLicensePath = path.resolve(rootDir, "THIRD_PARTY_LICENSES/GHOSTTY") const packageJson: PackageJson = JSON.parse(readFileSync(join(rootDir, "package.json"), "utf8")) @@ -51,6 +52,7 @@ const buildNative = args.find((arg) => arg === "--native") const isDev = args.includes("--dev") const buildAll = args.includes("--all") // Build for all platforms const gpaSafeStats = args.includes("--gpa-safe-stats") +const skipZig = args.includes("--skip-zig") const getHostVariant = (): Variant => { const hostVariant = variants.find((variant) => variant.platform === process.platform && variant.arch === process.arch) @@ -187,14 +189,14 @@ if (buildNative) { zigArgs.push("-Dgpa-safe-stats=true") } - runCommand("zig", zigArgs, join(rootDir, "src", "zig"), "Error: Zig build failed") + if (!skipZig) runCommand("zig", zigArgs, nativeRoot, "Error: Zig build failed") const variantsToPackage = buildAll ? variants : [getHostVariant()] for (const { platform, arch, abi } of variantsToPackage) { const nativeName = `${packageJson.name}-${platform}-${arch}${abi ? `-${abi}` : ""}` const nativeDir = join(rootDir, "node_modules", nativeName) - const libDir = join(rootDir, "src", "zig", "lib", getZigTarget(platform, arch, abi)) + const libDir = join(nativeRoot, "lib", getZigTarget(platform, arch, abi)) rmSync(nativeDir, { recursive: true, force: true }) mkdirSync(nativeDir, { recursive: true }) @@ -279,12 +281,12 @@ export default module.default if (existsSync(licensePath)) copyFileSync(licensePath, join(nativeDir, "LICENSE")) for (const [source, destination] of [ [ghosttyLicensePath, "LICENSE-GHOSTTY"], - [join(rootDir, "src", "zig", "vendor", "wuffs", "LICENSE"), "LICENSE-WUFFS"], - [join(rootDir, "src", "zig", "vendor", "stb", "LICENSE"), "LICENSE-STB"], - [join(rootDir, "src", "zig", "vendor", "libwebp", "COPYING"), "LICENSE-LIBWEBP"], - [join(rootDir, "src", "zig", "vendor", "libwebp", "PATENTS"), "PATENTS-LIBWEBP"], - [join(rootDir, "src", "zig", "vendor", "libwebp", "AUTHORS"), "AUTHORS-LIBWEBP"], - [join(rootDir, "src", "zig", "vendor", "lcms2", "LICENSE"), "LICENSE-LCMS2"], + [join(nativeRoot, "src", "vendor", "wuffs", "LICENSE"), "LICENSE-WUFFS"], + [join(nativeRoot, "src", "vendor", "stb", "LICENSE"), "LICENSE-STB"], + [join(nativeRoot, "src", "vendor", "libwebp", "COPYING"), "LICENSE-LIBWEBP"], + [join(nativeRoot, "src", "vendor", "libwebp", "PATENTS"), "PATENTS-LIBWEBP"], + [join(nativeRoot, "src", "vendor", "libwebp", "AUTHORS"), "AUTHORS-LIBWEBP"], + [join(nativeRoot, "src", "vendor", "lcms2", "LICENSE"), "LICENSE-LCMS2"], ] as const) { if (!existsSync(source)) throw new Error(`Required native license file is missing: ${source}`) copyFileSync(source, join(nativeDir, destination)) diff --git a/packages/core/scripts/test-node.ts b/packages/core/scripts/test-node.ts index 635509390..7358b7909 100644 --- a/packages/core/scripts/test-node.ts +++ b/packages/core/scripts/test-node.ts @@ -40,7 +40,10 @@ const treeSitterTestDataPaths = [ const treeSitterAssetsDir = "src/lib/tree-sitter/assets" const audioFixturesDir = "src/tests/fixtures/audio" const imageFixturesDir = "src/tests/fixtures/images" -const iccFixturesDir = "src/zig/tests/fixtures" +const iccFixturesDir = "../native/src/tests/fixtures" +const stagedNativeFixturesRoot = resolve(outDir, iccFixturesDir) +const stagedNativeRoot = resolve(packageRoot, "native") +let stagedNativeRootOwned = false const nodeTestTimeoutMs = 30_000 const nodeProcessTimeoutMs = 10 * 60_000 const nodePath = requireNode26() @@ -206,10 +209,14 @@ try { } if (exitCode === 0) { + if (existsSync(stagedNativeRoot)) { + throw new Error(`Refusing to replace existing native fixture staging directory: ${stagedNativeRoot}`) + } cpSync(resolve(packageRoot, treeSitterAssetsDir), resolve(outDir, treeSitterAssetsDir), { recursive: true }) cpSync(resolve(packageRoot, audioFixturesDir), resolve(outDir, audioFixturesDir), { recursive: true }) cpSync(resolve(packageRoot, imageFixturesDir), resolve(outDir, imageFixturesDir), { recursive: true }) - cpSync(resolve(packageRoot, iccFixturesDir), resolve(outDir, iccFixturesDir), { recursive: true }) + stagedNativeRootOwned = true + cpSync(resolve(packageRoot, iccFixturesDir), stagedNativeFixturesRoot, { recursive: true }) for (const dataPath of treeSitterTestDataPaths) { mkdirSync(dataPath, { recursive: true }) } @@ -253,6 +260,7 @@ try { } } finally { rmSync(outDir, { recursive: true, force: true }) + if (stagedNativeRootOwned) rmSync(stagedNativeRoot, { recursive: true, force: true }) } process.exit(exitCode) diff --git a/packages/core/src/benchmark/js-benchmark.ts b/packages/core/src/benchmark/js-benchmark.ts index 9f8e48ff6..939f593ce 100644 --- a/packages/core/src/benchmark/js-benchmark.ts +++ b/packages/core/src/benchmark/js-benchmark.ts @@ -71,8 +71,8 @@ export async function runBenchmarkCli(args: readonly string[], dependencies: Cli } function readZigVersion(): string { - const sourceZigDirectory = fileURLToPath(new URL("../zig", import.meta.url)) - const zigDirectory = existsSync(sourceZigDirectory) ? sourceZigDirectory : resolve("src/zig") + const sourceZigDirectory = fileURLToPath(new URL("../../../native", import.meta.url)) + const zigDirectory = existsSync(sourceZigDirectory) ? sourceZigDirectory : resolve("../native") const child = spawnSync("zig", ["version"], { cwd: zigDirectory, encoding: "utf8", diff --git a/packages/core/src/benchmark/native-span-feed-async-benchmark.ts b/packages/core/src/benchmark/native-span-feed-async-benchmark.ts index 6d711cb8e..3fc7aa23a 100644 --- a/packages/core/src/benchmark/native-span-feed-async-benchmark.ts +++ b/packages/core/src/benchmark/native-span-feed-async-benchmark.ts @@ -22,7 +22,7 @@ function hasFlag(name: string): boolean { const libVariant = process.env.NATIVE_SPAN_FEED_LIB const libBase = libVariant === "bench" ? "native_span_feed_bench" : (libVariant ?? "native_span_feed") -const libPath = new URL(`../zig/zig-out/lib/lib${libBase}.${suffix}`, import.meta.url).pathname +const libPath = new URL(`../../../native/zig-out/lib/lib${libBase}.${suffix}`, import.meta.url).pathname setRenderLibPath(libPath) diff --git a/packages/core/src/benchmark/native-span-feed-benchmark.md b/packages/core/src/benchmark/native-span-feed-benchmark.md index 5165e17de..3f739d3f7 100644 --- a/packages/core/src/benchmark/native-span-feed-benchmark.md +++ b/packages/core/src/benchmark/native-span-feed-benchmark.md @@ -8,11 +8,11 @@ The benchmark library (`libnative_span_feed_bench`) is built by the Zig bench-ff with `ReleaseFast` by default. Override with `-Dbench-optimize=` if needed. ```bash -cd packages/core/src/zig +cd packages/native zig build bench-ffi ``` -This installs `zig-out/lib/libnative_span_feed_bench.*`, which +This installs `packages/native/zig-out/lib/libnative_span_feed_bench.*`, which `src/benchmark/native-span-feed-benchmark.ts` loads by default. You can also run `zig build bench` to build the bench runner and install the FFI bench library in one step. diff --git a/packages/core/src/benchmark/native-span-feed-benchmark.ts b/packages/core/src/benchmark/native-span-feed-benchmark.ts index 1004ddb59..a8462a6f7 100644 --- a/packages/core/src/benchmark/native-span-feed-benchmark.ts +++ b/packages/core/src/benchmark/native-span-feed-benchmark.ts @@ -44,7 +44,7 @@ const jsonPath = jsonArg ?? (hasFlag("json") ? jsonDefault : null) const libVariant = process.env.NATIVE_SPAN_FEED_LIB const libBase = libVariant === "bench" ? "native_span_feed_bench" : (libVariant ?? "native_span_feed") -const libPath = new URL(`../zig/zig-out/lib/lib${libBase}.${suffix}`, import.meta.url).pathname +const libPath = new URL(`../../../native/zig-out/lib/lib${libBase}.${suffix}`, import.meta.url).pathname setRenderLibPath(libPath) diff --git a/packages/core/src/tests/image-icc-allocation-child.ts b/packages/core/src/tests/image-icc-allocation-child.ts index e5a0b190e..ac9059360 100644 --- a/packages/core/src/tests/image-icc-allocation-child.ts +++ b/packages/core/src/tests/image-icc-allocation-child.ts @@ -5,7 +5,7 @@ import { resolveRenderLib } from "../zig.js" const png = Uint8Array.from( Buffer.from( - readFileSync(new URL("../zig/tests/fixtures/display-p3.png.base64", import.meta.url), "utf8").trim(), + readFileSync(new URL("../../../native/src/tests/fixtures/display-p3.png.base64", import.meta.url), "utf8").trim(), "base64", ), ) diff --git a/packages/core/src/tests/image-renderable.test.ts b/packages/core/src/tests/image-renderable.test.ts index f063f1b11..8b156d62e 100644 --- a/packages/core/src/tests/image-renderable.test.ts +++ b/packages/core/src/tests/image-renderable.test.ts @@ -16,7 +16,10 @@ const FIXTURES = new URL("./fixtures/images/", import.meta.url) async function readBase64Fixture(name: string): Promise { return Uint8Array.from( - Buffer.from((await readFile(new URL(`../zig/tests/fixtures/${name}`, import.meta.url), "utf8")).trim(), "base64"), + Buffer.from( + (await readFile(new URL(`../../../native/src/tests/fixtures/${name}`, import.meta.url), "utf8")).trim(), + "base64", + ), ) } diff --git a/packages/core/src/tests/image.test.ts b/packages/core/src/tests/image.test.ts index badf1e9ed..c774801dd 100644 --- a/packages/core/src/tests/image.test.ts +++ b/packages/core/src/tests/image.test.ts @@ -29,7 +29,10 @@ const FIXTURES = new URL("./fixtures/images/", import.meta.url) async function readBase64Fixture(name: string): Promise { return Uint8Array.from( - Buffer.from((await readFile(new URL(`../zig/tests/fixtures/${name}`, import.meta.url), "utf8")).trim(), "base64"), + Buffer.from( + (await readFile(new URL(`../../../native/src/tests/fixtures/${name}`, import.meta.url), "utf8")).trim(), + "base64", + ), ) } diff --git a/packages/native/.gitignore b/packages/native/.gitignore new file mode 100644 index 000000000..17dc2e829 --- /dev/null +++ b/packages/native/.gitignore @@ -0,0 +1,7 @@ +.zig-cache +zig-out +lib +zig-pkg +examples/*/.zig-cache +examples/*/zig-out +examples/*/zig-pkg diff --git a/packages/core/src/zig/build.zig b/packages/native/build.zig similarity index 93% rename from packages/core/src/zig/build.zig rename to packages/native/build.zig index ed85ddf2e..a698e69e6 100644 --- a/packages/core/src/zig/build.zig +++ b/packages/native/build.zig @@ -32,7 +32,7 @@ const SUPPORTED_TARGETS = [_]SupportedTarget{ const DEFAULT_MACOS_SDK_PATH = "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"; const LIB_NAME = "opentui"; -const ROOT_SOURCE_FILE = "lib.zig"; +const ROOT_SOURCE_FILE = "src/lib.zig"; const GHOSTTY_VT_VERSION = "0.1.0-dev+b988efcf"; const YOGA_CXX_FLAGS = [_][]const u8{ @@ -185,10 +185,10 @@ fn addMiniaudioShim( else => &.{"-std=c99"}, }; - module.addIncludePath(b.path(".")); + module.addIncludePath(b.path("src")); module.link_libc = true; module.addCSourceFile(.{ - .file = b.path("miniaudio_shim.c"), + .file = b.path("src/miniaudio_shim.c"), .flags = c_flags, }); } @@ -207,13 +207,13 @@ fn addImageShim(b: *std.Build, module: *std.Build.Module, target: std.Build.Reso }; module.addCSourceFile(.{ - .file = b.path("image-shim.c"), + .file = b.path("src/image-shim.c"), .flags = flags, }); - module.addIncludePath(b.path("vendor/lcms2/include")); - module.addIncludePath(b.path("vendor/lcms2/src")); + module.addIncludePath(b.path("src/vendor/lcms2/include")); + module.addIncludePath(b.path("src/vendor/lcms2/src")); module.addCSourceFiles(.{ - .root = b.path("vendor/lcms2"), + .root = b.path("src/vendor/lcms2"), .files = &LCMS2_SOURCES, // image.zig serializes every LittleCMS operation with icc_cache_mutex. .flags = flags, @@ -230,7 +230,7 @@ fn addImageShim(b: *std.Build, module: *std.Build.Module, target: std.Build.Reso else => &.{ "-std=c99", "-ffp-contract=off", "-fvisibility=hidden", "-fno-sanitize=bounds" }, }; module.addCSourceFile(.{ - .file = b.path("image-resize-shim.c"), + .file = b.path("src/image-resize-shim.c"), .flags = resize_flags, }); @@ -242,13 +242,13 @@ fn addImageShim(b: *std.Build, module: *std.Build.Module, target: std.Build.Reso appendCFlags(b, webp_flags, &.{ "-DWEBP_HAVE_SSE2", "-DWEBP_HAVE_SSE41", "-DWEBP_HAVE_AVX2" }) else webp_flags; - module.addIncludePath(b.path("vendor/libwebp")); + module.addIncludePath(b.path("src/vendor/libwebp")); module.addCSourceFile(.{ - .file = b.path("image-webp-config.c"), + .file = b.path("src/image-webp-config.c"), .flags = webp_dispatch_flags, }); module.addCSourceFiles(.{ - .root = b.path("vendor/libwebp"), + .root = b.path("src/vendor/libwebp"), .files = &.{ "src/dec/alpha_dec.c", "src/dec/buffer_dec.c", @@ -286,7 +286,7 @@ fn addImageShim(b: *std.Build, module: *std.Build.Module, target: std.Build.Reso switch (target.result.cpu.arch) { .x86_64 => { module.addCSourceFiles(.{ - .root = b.path("vendor/libwebp"), + .root = b.path("src/vendor/libwebp"), .files = &.{ "src/dsp/alpha_processing_sse2.c", "src/dsp/dec_sse2.c", @@ -299,16 +299,16 @@ fn addImageShim(b: *std.Build, module: *std.Build.Module, target: std.Build.Reso .flags = webp_flags, }); module.addCSourceFile(.{ - .file = b.path("image-webp-sse41.c"), + .file = b.path("src/image-webp-sse41.c"), .flags = webp_flags, }); module.addCSourceFile(.{ - .file = b.path("image-webp-avx2.c"), + .file = b.path("src/image-webp-avx2.c"), .flags = webp_flags, }); }, .aarch64 => module.addCSourceFiles(.{ - .root = b.path("vendor/libwebp"), + .root = b.path("src/vendor/libwebp"), .files = &.{ "src/dsp/alpha_processing_neon.c", "src/dsp/dec_neon.c", @@ -337,7 +337,7 @@ fn addMacOSSDKSearchPaths(b: *std.Build, module: *std.Build.Module, sdk_path: [] fn addMacOSClipboardDependencies(b: *std.Build, module: *std.Build.Module, sdk_path: []const u8) void { module.addCSourceFile(.{ - .file = b.path("clipboard/macos-shim.m"), + .file = b.path("src/clipboard/macos-shim.m"), .flags = &.{ "-fobjc-arc", "-fobjc-arc-exceptions", "-isysroot", sdk_path }, }); module.linkFramework("AppKit", .{}); @@ -406,11 +406,11 @@ fn addTranslatedCImports( target: std.Build.ResolvedTarget, ) void { const miniaudio_translate = b.addTranslateC(.{ - .root_source_file = b.path("vendor/miniaudio/miniaudio.h"), + .root_source_file = b.path("src/vendor/miniaudio/miniaudio.h"), .target = target, .optimize = optimize, }); - miniaudio_translate.addIncludePath(b.path(".")); + miniaudio_translate.addIncludePath(b.path("src")); module.addImport("miniaudio", miniaudio_translate.createModule()); const yoga_dep = b.dependency("yoga", .{}); @@ -509,13 +509,23 @@ pub fn build(b: *std.Build) void { const optimize = b.standardOptimizeOption(.{}); const bench_optimize = b.option(std.builtin.OptimizeMode, "bench-optimize", "Optimize mode for benchmarks") orelse .ReleaseFast; const debug_use_llvm = b.option(bool, "debug-llvm", "Use LLVM backend for debug/test artifacts"); - const target_option = b.option([]const u8, "target", "Build for specific target (e.g., 'x86_64-linux-gnu.2.17')."); + const target_option = b.option([]const u8, "library-target", "Build shared library for a specific target (e.g., 'x86_64-linux-gnu.2.17')."); const build_all = b.option(bool, "all", "Build for all supported targets") orelse false; const gpa_safe_stats = b.option(bool, "gpa-safe-stats", "Enable GPA safety checks for trustworthy allocator stats") orelse false; const macos_sdk_path = resolveMacOSSDKPath(b); const build_options = b.addOptions(); build_options.addOption(bool, "gpa_safe_stats", gpa_safe_stats); + const module_target = b.standardTargetOptions(.{}); + const opentui_module = b.addModule("opentui", .{ + .root_source_file = b.path("src/opentui.zig"), + .target = module_target, + .optimize = optimize, + }); + applyDependencies(b, opentui_module, optimize, module_target, build_options); + addNativeAudioDependencies(b, opentui_module, module_target, macos_sdk_path); + addYogaDependencies(b, opentui_module); + if (target_option) |target_str| { // Build single target buildSingleTarget(b, target_str, optimize, build_options, macos_sdk_path) catch |err| { @@ -540,7 +550,7 @@ pub fn build(b: *std.Build) void { const test_step = b.step("test", "Run unit tests"); const native_target = nativeExecutableTarget(b); const test_mod = b.createModule(.{ - .root_source_file = b.path("test.zig"), + .root_source_file = b.path("src/test.zig"), .target = native_target, .optimize = .Debug, }); @@ -564,7 +574,7 @@ pub fn build(b: *std.Build) void { // Bench step (native only) const bench_step = b.step("bench", "Run benchmarks"); const bench_mod = b.createModule(.{ - .root_source_file = b.path("bench.zig"), + .root_source_file = b.path("src/bench.zig"), .target = native_target, .optimize = bench_optimize, }); @@ -585,7 +595,7 @@ pub fn build(b: *std.Build) void { const bench_ffi_step = b.step("bench-ffi", "Build NativeSpanFeed benchmark library"); const bench_ffi_target = b.resolveTargetQuery(.{}); const bench_ffi_mod = b.createModule(.{ - .root_source_file = b.path("native-span-feed-bench-lib.zig"), + .root_source_file = b.path("src/native-span-feed-bench-lib.zig"), .target = bench_ffi_target, .optimize = bench_optimize, }); @@ -608,7 +618,7 @@ pub fn build(b: *std.Build) void { // Debug step (native only) const debug_step = b.step("debug", "Run debug executable"); const debug_mod = b.createModule(.{ - .root_source_file = b.path("debug-view.zig"), + .root_source_file = b.path("src/debug-view.zig"), .target = native_target, .optimize = .Debug, }); diff --git a/packages/core/src/zig/build.zig.zon b/packages/native/build.zig.zon similarity index 93% rename from packages/core/src/zig/build.zig.zon rename to packages/native/build.zig.zon index a498aecd7..f67e35145 100644 --- a/packages/core/src/zig/build.zig.zon +++ b/packages/native/build.zig.zon @@ -19,6 +19,8 @@ }, }, .paths = .{ - ".", + "build.zig", + "build.zig.zon", + "src", }, } diff --git a/packages/native/examples/hello/build.zig b/packages/native/examples/hello/build.zig new file mode 100644 index 000000000..0e3256331 --- /dev/null +++ b/packages/native/examples/hello/build.zig @@ -0,0 +1,34 @@ +const std = @import("std"); +const builtin = @import("builtin"); + +pub fn build(b: *std.Build) void { + var default_target = b.graph.host.query; + if (builtin.os.tag == .linux) { + default_target.abi = .musl; + default_target.glibc_version = null; + } + const target = b.standardTargetOptions(.{ .default_target = default_target }); + const optimize = b.standardOptimizeOption(.{}); + const opentui = b.dependency("opentui", .{ + .target = target, + .optimize = optimize, + }); + + const module = b.createModule(.{ + .root_source_file = b.path("src/main.zig"), + .target = target, + .optimize = optimize, + }); + module.addImport("opentui", opentui.module("opentui")); + + const executable = b.addExecutable(.{ + .name = "opentui-hello", + .root_module = module, + }); + b.installArtifact(executable); + + const run = b.addRunArtifact(executable); + run.step.dependOn(b.getInstallStep()); + const run_step = b.step("run", "Render two frames without JavaScript"); + run_step.dependOn(&run.step); +} diff --git a/packages/native/examples/hello/build.zig.zon b/packages/native/examples/hello/build.zig.zon new file mode 100644 index 000000000..0ba7e3a55 --- /dev/null +++ b/packages/native/examples/hello/build.zig.zon @@ -0,0 +1,16 @@ +.{ + .name = .opentui_hello, + .version = "0.0.0", + .fingerprint = 0xb62b2906a6ba79de, + .minimum_zig_version = "0.16.0", + .dependencies = .{ + .opentui = .{ + .path = "../..", + }, + }, + .paths = .{ + "build.zig", + "build.zig.zon", + "src", + }, +} diff --git a/packages/native/examples/hello/src/main.zig b/packages/native/examples/hello/src/main.zig new file mode 100644 index 000000000..af5ecbf9e --- /dev/null +++ b/packages/native/examples/hello/src/main.zig @@ -0,0 +1,92 @@ +const std = @import("std"); +const opentui = @import("opentui"); + +var io_threaded: std.Io.Threaded = .init_single_threaded; +pub const io = io_threaded.io(); + +const MemorySink = struct { + const capacity = 64 * 1024; + + bytes: [capacity]u8 = undefined, + length: usize = 0, + + fn output(self: *MemorySink) opentui.BufferedOutput { + return .{ .ctx = self, .write_fn = write }; + } + + fn write(context: *anyopaque, bytes: []const u8) void { + const self: *MemorySink = @ptrCast(@alignCast(context)); + std.debug.assert(bytes.len <= capacity - self.length); + @memcpy(self.bytes[self.length..][0..bytes.len], bytes); + self.length += bytes.len; + } + + fn slice(self: *const MemorySink) []const u8 { + return self.bytes[0..self.length]; + } + + fn clear(self: *MemorySink) void { + self.length = 0; + } +}; + +pub fn main() !void { + var debug_allocator: std.heap.DebugAllocator(.{}) = .init; + defer std.debug.assert(debug_allocator.deinit() == .ok); + const allocator = debug_allocator.allocator(); + + var graphemes = opentui.GraphemePool.init(allocator); + defer graphemes.deinit(); + var links = opentui.LinkPool.init(allocator); + defer links.deinit(); + var environment = std.process.Environ.Map.init(allocator); + defer environment.deinit(); + var sink: MemorySink = .{}; + + if (opentui.CliRenderer.createWithOptions(allocator, 0, 1, &graphemes, .{ + .output = .{ .buffered = sink.output() }, + .clearOnShutdown = false, + .link_pool = &links, + .env_map = &environment, + })) |invalid_renderer| { + invalid_renderer.destroy(); + return error.ExpectedInvalidDimensions; + } else |err| { + if (err != error.InvalidDimensions) return err; + } + + const renderer = try opentui.CliRenderer.createWithOptions(allocator, 8, 1, &graphemes, .{ + .output = .{ .buffered = sink.output() }, + .clearOnShutdown = false, + .link_pool = &links, + .env_map = &environment, + }); + defer renderer.destroy(); + + try renderer.getNextBuffer().drawText( + "OpenTUI", + 0, + 0, + opentui.rgbColor(255, 180, 40, 255), + opentui.rgbColor(10, 20, 30, 255), + opentui.TextAttributes.BOLD | opentui.TextAttributes.UNDERLINE, + ); + if (renderer.render(true) != .rendered) return error.FirstFrameNotRendered; + const first_frame_length = sink.length; + if (std.mem.indexOf(u8, sink.slice(), "OpenTUI") == null) return error.MissingFirstFrameText; + + sink.clear(); + try renderer.resize(12, 2); + try renderer.getNextBuffer().drawText( + "resized", + 1, + 1, + opentui.rgbColor(80, 220, 255, 255), + null, + opentui.TextAttributes.ITALIC, + ); + if (renderer.render(true) != .rendered) return error.SecondFrameNotRendered; + if (std.mem.indexOf(u8, sink.slice(), "resized") == null) return error.MissingSecondFrameText; + + std.debug.print("rendered {d} and {d} bytes\n", .{ first_frame_length, sink.slice().len }); +} diff --git a/packages/native/package.json b/packages/native/package.json new file mode 100644 index 000000000..3239d3b68 --- /dev/null +++ b/packages/native/package.json @@ -0,0 +1,13 @@ +{ + "name": "@opentui/native", + "version": "0.5.4", + "private": true, + "scripts": { + "build": "zig build -Doptimize=ReleaseFast", + "build:dev": "zig build -Doptimize=Debug", + "test": "sh scripts/test.sh", + "bench": "zig build bench -Dbench-optimize=ReleaseFast --", + "bench:ffi": "zig build bench-ffi", + "clean": "bun ../../scripts/clean.ts --native" + } +} diff --git a/packages/native/scripts/test.sh b/packages/native/scripts/test.sh new file mode 100644 index 000000000..f1b1f03ed --- /dev/null +++ b/packages/native/scripts/test.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -eu + +zig build test --summary all "$@" +(cd examples/hello && zig build run) diff --git a/packages/core/src/zig/ansi.zig b/packages/native/src/ansi.zig similarity index 100% rename from packages/core/src/zig/ansi.zig rename to packages/native/src/ansi.zig diff --git a/packages/core/src/zig/audio.zig b/packages/native/src/audio.zig similarity index 100% rename from packages/core/src/zig/audio.zig rename to packages/native/src/audio.zig diff --git a/packages/core/src/zig/bench-utils.zig b/packages/native/src/bench-utils.zig similarity index 100% rename from packages/core/src/zig/bench-utils.zig rename to packages/native/src/bench-utils.zig diff --git a/packages/core/src/zig/bench.zig b/packages/native/src/bench.zig similarity index 100% rename from packages/core/src/zig/bench.zig rename to packages/native/src/bench.zig diff --git a/packages/core/src/zig/bench/README.md b/packages/native/src/bench/README.md similarity index 97% rename from packages/core/src/zig/bench/README.md rename to packages/native/src/bench/README.md index 7fa6ca8c1..69a9a1cda 100644 --- a/packages/core/src/zig/bench/README.md +++ b/packages/native/src/bench/README.md @@ -13,7 +13,7 @@ bun bench:native # Include memory statistics bun bench:native --mem -# Or from packages/core/src/zig directory: +# Or from packages/native: zig build bench -Doptimize=ReleaseFast zig build bench -Doptimize=ReleaseFast -- --mem ``` diff --git a/packages/core/src/zig/bench/buffer-cell-drawing_bench.zig b/packages/native/src/bench/buffer-cell-drawing_bench.zig similarity index 100% rename from packages/core/src/zig/bench/buffer-cell-drawing_bench.zig rename to packages/native/src/bench/buffer-cell-drawing_bench.zig diff --git a/packages/core/src/zig/bench/buffer-color-blending_bench.zig b/packages/native/src/bench/buffer-color-blending_bench.zig similarity index 100% rename from packages/core/src/zig/bench/buffer-color-blending_bench.zig rename to packages/native/src/bench/buffer-color-blending_bench.zig diff --git a/packages/core/src/zig/bench/buffer-draw-box_bench.zig b/packages/native/src/bench/buffer-draw-box_bench.zig similarity index 100% rename from packages/core/src/zig/bench/buffer-draw-box_bench.zig rename to packages/native/src/bench/buffer-draw-box_bench.zig diff --git a/packages/core/src/zig/bench/buffer-draw-text-buffer_bench.zig b/packages/native/src/bench/buffer-draw-text-buffer_bench.zig similarity index 100% rename from packages/core/src/zig/bench/buffer-draw-text-buffer_bench.zig rename to packages/native/src/bench/buffer-draw-text-buffer_bench.zig diff --git a/packages/core/src/zig/bench/buffer-image-overlap_bench.zig b/packages/native/src/bench/buffer-image-overlap_bench.zig similarity index 100% rename from packages/core/src/zig/bench/buffer-image-overlap_bench.zig rename to packages/native/src/bench/buffer-image-overlap_bench.zig diff --git a/packages/core/src/zig/bench/edit-buffer_bench.zig b/packages/native/src/bench/edit-buffer_bench.zig similarity index 100% rename from packages/core/src/zig/bench/edit-buffer_bench.zig rename to packages/native/src/bench/edit-buffer_bench.zig diff --git a/packages/core/src/zig/bench/editor-view_bench.zig b/packages/native/src/bench/editor-view_bench.zig similarity index 100% rename from packages/core/src/zig/bench/editor-view_bench.zig rename to packages/native/src/bench/editor-view_bench.zig diff --git a/packages/core/src/zig/bench/image-operations_bench.zig b/packages/native/src/bench/image-operations_bench.zig similarity index 97% rename from packages/core/src/zig/bench/image-operations_bench.zig rename to packages/native/src/bench/image-operations_bench.zig index d59f53bdb..45a628adb 100644 --- a/packages/core/src/zig/bench/image-operations_bench.zig +++ b/packages/native/src/bench/image-operations_bench.zig @@ -10,10 +10,10 @@ const EncodedScenario = struct { }; const encoded_scenarios = [_]EncodedScenario{ - .{ .label = "PNG", .path = "../../../examples/src/assets/image-demo.png" }, - .{ .label = "JPEG", .path = "../../../examples/src/assets/dragon.jpg" }, - .{ .label = "WebP", .path = "../../../examples/src/assets/image-demo.webp" }, - .{ .label = "GIF", .path = "../../../examples/src/assets/image-demo.gif" }, + .{ .label = "PNG", .path = "../examples/src/assets/image-demo.png" }, + .{ .label = "JPEG", .path = "../examples/src/assets/dragon.jpg" }, + .{ .label = "WebP", .path = "../examples/src/assets/image-demo.webp" }, + .{ .label = "GIF", .path = "../examples/src/assets/image-demo.gif" }, }; fn appendResult( diff --git a/packages/core/src/zig/bench/native-span-feed_bench.zig b/packages/native/src/bench/native-span-feed_bench.zig similarity index 100% rename from packages/core/src/zig/bench/native-span-feed_bench.zig rename to packages/native/src/bench/native-span-feed_bench.zig diff --git a/packages/core/src/zig/bench/renderer-image_bench.zig b/packages/native/src/bench/renderer-image_bench.zig similarity index 100% rename from packages/core/src/zig/bench/renderer-image_bench.zig rename to packages/native/src/bench/renderer-image_bench.zig diff --git a/packages/core/src/zig/bench/renderer-output_bench.zig b/packages/native/src/bench/renderer-output_bench.zig similarity index 100% rename from packages/core/src/zig/bench/renderer-output_bench.zig rename to packages/native/src/bench/renderer-output_bench.zig diff --git a/packages/core/src/zig/bench/renderer-overhead_bench.zig b/packages/native/src/bench/renderer-overhead_bench.zig similarity index 100% rename from packages/core/src/zig/bench/renderer-overhead_bench.zig rename to packages/native/src/bench/renderer-overhead_bench.zig diff --git a/packages/core/src/zig/bench/rope-markers_bench.zig b/packages/native/src/bench/rope-markers_bench.zig similarity index 100% rename from packages/core/src/zig/bench/rope-markers_bench.zig rename to packages/native/src/bench/rope-markers_bench.zig diff --git a/packages/core/src/zig/bench/rope_bench.zig b/packages/native/src/bench/rope_bench.zig similarity index 100% rename from packages/core/src/zig/bench/rope_bench.zig rename to packages/native/src/bench/rope_bench.zig diff --git a/packages/core/src/zig/bench/styled-text_bench.zig b/packages/native/src/bench/styled-text_bench.zig similarity index 100% rename from packages/core/src/zig/bench/styled-text_bench.zig rename to packages/native/src/bench/styled-text_bench.zig diff --git a/packages/core/src/zig/bench/terminal-image_bench.zig b/packages/native/src/bench/terminal-image_bench.zig similarity index 98% rename from packages/core/src/zig/bench/terminal-image_bench.zig rename to packages/native/src/bench/terminal-image_bench.zig index 902dbf979..b300749ea 100644 --- a/packages/core/src/zig/bench/terminal-image_bench.zig +++ b/packages/native/src/bench/terminal-image_bench.zig @@ -109,7 +109,7 @@ fn appendDragonGeometryBenchmarks( var gpa: std.heap.DebugAllocator(.{}) = .init; defer _ = gpa.deinit(); const work_allocator = gpa.allocator(); - const encoded = try std.Io.Dir.cwd().readFileAlloc(io, "../../../examples/src/assets/image-demo.gif", work_allocator, .limited(2 * 1024 * 1024)); + const encoded = try std.Io.Dir.cwd().readFileAlloc(io, "../examples/src/assets/image-demo.gif", work_allocator, .limited(2 * 1024 * 1024)); defer work_allocator.free(encoded); const decoded = try image.decode(work_allocator, encoded, .{}); defer decoded.deinit(); @@ -198,7 +198,7 @@ fn appendKittyBenchmarks( var gpa: std.heap.DebugAllocator(.{}) = .init; defer _ = gpa.deinit(); const work_allocator = gpa.allocator(); - const encoded = try std.Io.Dir.cwd().readFileAlloc(io, "../../../examples/src/assets/image-demo.gif", work_allocator, .limited(2 * 1024 * 1024)); + const encoded = try std.Io.Dir.cwd().readFileAlloc(io, "../examples/src/assets/image-demo.gif", work_allocator, .limited(2 * 1024 * 1024)); defer work_allocator.free(encoded); const decoded = try image.decode(work_allocator, encoded, .{}); defer decoded.deinit(); @@ -345,7 +345,7 @@ fn appendKittyPngBenchmarks( var gpa: std.heap.DebugAllocator(.{}) = .init; defer _ = gpa.deinit(); const work_allocator = gpa.allocator(); - const encoded = try std.Io.Dir.cwd().readFileAlloc(io, "../../../examples/src/assets/image-demo.png", work_allocator, .limited(2 * 1024 * 1024)); + const encoded = try std.Io.Dir.cwd().readFileAlloc(io, "../examples/src/assets/image-demo.png", work_allocator, .limited(2 * 1024 * 1024)); defer work_allocator.free(encoded); const decoded = try image.decode(work_allocator, encoded, .{}); defer decoded.deinit(); @@ -410,7 +410,7 @@ fn appendImageSwitchBenchmarks( var gpa: std.heap.DebugAllocator(.{}) = .init; defer _ = gpa.deinit(); const work_allocator = gpa.allocator(); - const encoded = try std.Io.Dir.cwd().readFileAlloc(io, "../../../examples/src/assets/image-demo.gif", work_allocator, .limited(2 * 1024 * 1024)); + const encoded = try std.Io.Dir.cwd().readFileAlloc(io, "../examples/src/assets/image-demo.gif", work_allocator, .limited(2 * 1024 * 1024)); defer work_allocator.free(encoded); const decoded = try image.decode(work_allocator, encoded, .{}); defer decoded.deinit(); diff --git a/packages/core/src/zig/bench/text-buffer-coords_bench.zig b/packages/native/src/bench/text-buffer-coords_bench.zig similarity index 100% rename from packages/core/src/zig/bench/text-buffer-coords_bench.zig rename to packages/native/src/bench/text-buffer-coords_bench.zig diff --git a/packages/core/src/zig/bench/text-buffer-view_bench.zig b/packages/native/src/bench/text-buffer-view_bench.zig similarity index 100% rename from packages/core/src/zig/bench/text-buffer-view_bench.zig rename to packages/native/src/bench/text-buffer-view_bench.zig diff --git a/packages/core/src/zig/bench/text-chunk-graphemes_bench.zig b/packages/native/src/bench/text-chunk-graphemes_bench.zig similarity index 100% rename from packages/core/src/zig/bench/text-chunk-graphemes_bench.zig rename to packages/native/src/bench/text-chunk-graphemes_bench.zig diff --git a/packages/core/src/zig/bench/utf8_bench.zig b/packages/native/src/bench/utf8_bench.zig similarity index 100% rename from packages/core/src/zig/bench/utf8_bench.zig rename to packages/native/src/bench/utf8_bench.zig diff --git a/packages/core/src/zig/buffer-methods.zig b/packages/native/src/buffer-methods.zig similarity index 100% rename from packages/core/src/zig/buffer-methods.zig rename to packages/native/src/buffer-methods.zig diff --git a/packages/core/src/zig/buffer.zig b/packages/native/src/buffer.zig similarity index 100% rename from packages/core/src/zig/buffer.zig rename to packages/native/src/buffer.zig diff --git a/packages/core/src/zig/clipboard/clock.zig b/packages/native/src/clipboard/clock.zig similarity index 100% rename from packages/core/src/zig/clipboard/clock.zig rename to packages/native/src/clipboard/clock.zig diff --git a/packages/core/src/zig/clipboard/host.zig b/packages/native/src/clipboard/host.zig similarity index 100% rename from packages/core/src/zig/clipboard/host.zig rename to packages/native/src/clipboard/host.zig diff --git a/packages/core/src/zig/clipboard/linux.zig b/packages/native/src/clipboard/linux.zig similarity index 100% rename from packages/core/src/zig/clipboard/linux.zig rename to packages/native/src/clipboard/linux.zig diff --git a/packages/core/src/zig/clipboard/macos-shim.m b/packages/native/src/clipboard/macos-shim.m similarity index 100% rename from packages/core/src/zig/clipboard/macos-shim.m rename to packages/native/src/clipboard/macos-shim.m diff --git a/packages/core/src/zig/clipboard/macos.zig b/packages/native/src/clipboard/macos.zig similarity index 100% rename from packages/core/src/zig/clipboard/macos.zig rename to packages/native/src/clipboard/macos.zig diff --git a/packages/core/src/zig/clipboard/posix-io.zig b/packages/native/src/clipboard/posix-io.zig similarity index 100% rename from packages/core/src/zig/clipboard/posix-io.zig rename to packages/native/src/clipboard/posix-io.zig diff --git a/packages/core/src/zig/clipboard/sync.zig b/packages/native/src/clipboard/sync.zig similarity index 100% rename from packages/core/src/zig/clipboard/sync.zig rename to packages/native/src/clipboard/sync.zig diff --git a/packages/core/src/zig/clipboard/wayland-protocol.zig b/packages/native/src/clipboard/wayland-protocol.zig similarity index 100% rename from packages/core/src/zig/clipboard/wayland-protocol.zig rename to packages/native/src/clipboard/wayland-protocol.zig diff --git a/packages/core/src/zig/clipboard/wayland.zig b/packages/native/src/clipboard/wayland.zig similarity index 100% rename from packages/core/src/zig/clipboard/wayland.zig rename to packages/native/src/clipboard/wayland.zig diff --git a/packages/core/src/zig/clipboard/windows-dib.zig b/packages/native/src/clipboard/windows-dib.zig similarity index 100% rename from packages/core/src/zig/clipboard/windows-dib.zig rename to packages/native/src/clipboard/windows-dib.zig diff --git a/packages/core/src/zig/clipboard/windows.zig b/packages/native/src/clipboard/windows.zig similarity index 100% rename from packages/core/src/zig/clipboard/windows.zig rename to packages/native/src/clipboard/windows.zig diff --git a/packages/core/src/zig/clipboard/x11.zig b/packages/native/src/clipboard/x11.zig similarity index 100% rename from packages/core/src/zig/clipboard/x11.zig rename to packages/native/src/clipboard/x11.zig diff --git a/packages/core/src/zig/edit-buffer.zig b/packages/native/src/edit-buffer.zig similarity index 100% rename from packages/core/src/zig/edit-buffer.zig rename to packages/native/src/edit-buffer.zig diff --git a/packages/core/src/zig/editor-view.zig b/packages/native/src/editor-view.zig similarity index 100% rename from packages/core/src/zig/editor-view.zig rename to packages/native/src/editor-view.zig diff --git a/packages/core/src/zig/embedded-terminal/compositor.zig b/packages/native/src/embedded-terminal/compositor.zig similarity index 100% rename from packages/core/src/zig/embedded-terminal/compositor.zig rename to packages/native/src/embedded-terminal/compositor.zig diff --git a/packages/core/src/zig/embedded-terminal/ghostty.zig b/packages/native/src/embedded-terminal/ghostty.zig similarity index 100% rename from packages/core/src/zig/embedded-terminal/ghostty.zig rename to packages/native/src/embedded-terminal/ghostty.zig diff --git a/packages/core/src/zig/embedded-terminal/main.zig b/packages/native/src/embedded-terminal/main.zig similarity index 100% rename from packages/core/src/zig/embedded-terminal/main.zig rename to packages/native/src/embedded-terminal/main.zig diff --git a/packages/core/src/zig/embedded-terminal/tests.zig b/packages/native/src/embedded-terminal/tests.zig similarity index 100% rename from packages/core/src/zig/embedded-terminal/tests.zig rename to packages/native/src/embedded-terminal/tests.zig diff --git a/packages/core/src/zig/embedded-terminal/unavailable.zig b/packages/native/src/embedded-terminal/unavailable.zig similarity index 100% rename from packages/core/src/zig/embedded-terminal/unavailable.zig rename to packages/native/src/embedded-terminal/unavailable.zig diff --git a/packages/core/src/zig/event-bus.zig b/packages/native/src/event-bus.zig similarity index 100% rename from packages/core/src/zig/event-bus.zig rename to packages/native/src/event-bus.zig diff --git a/packages/core/src/zig/event-emitter.zig b/packages/native/src/event-emitter.zig similarity index 100% rename from packages/core/src/zig/event-emitter.zig rename to packages/native/src/event-emitter.zig diff --git a/packages/core/src/zig/file-logger.zig b/packages/native/src/file-logger.zig similarity index 100% rename from packages/core/src/zig/file-logger.zig rename to packages/native/src/file-logger.zig diff --git a/packages/core/src/zig/ghostty-vt.zig b/packages/native/src/ghostty-vt.zig similarity index 100% rename from packages/core/src/zig/ghostty-vt.zig rename to packages/native/src/ghostty-vt.zig diff --git a/packages/core/src/zig/grapheme.zig b/packages/native/src/grapheme.zig similarity index 100% rename from packages/core/src/zig/grapheme.zig rename to packages/native/src/grapheme.zig diff --git a/packages/core/src/zig/handles.zig b/packages/native/src/handles.zig similarity index 100% rename from packages/core/src/zig/handles.zig rename to packages/native/src/handles.zig diff --git a/packages/core/src/zig/image-resize-shim.c b/packages/native/src/image-resize-shim.c similarity index 100% rename from packages/core/src/zig/image-resize-shim.c rename to packages/native/src/image-resize-shim.c diff --git a/packages/core/src/zig/image-shim.c b/packages/native/src/image-shim.c similarity index 100% rename from packages/core/src/zig/image-shim.c rename to packages/native/src/image-shim.c diff --git a/packages/core/src/zig/image-webp-avx2.c b/packages/native/src/image-webp-avx2.c similarity index 100% rename from packages/core/src/zig/image-webp-avx2.c rename to packages/native/src/image-webp-avx2.c diff --git a/packages/core/src/zig/image-webp-config.c b/packages/native/src/image-webp-config.c similarity index 100% rename from packages/core/src/zig/image-webp-config.c rename to packages/native/src/image-webp-config.c diff --git a/packages/core/src/zig/image-webp-sse41.c b/packages/native/src/image-webp-sse41.c similarity index 100% rename from packages/core/src/zig/image-webp-sse41.c rename to packages/native/src/image-webp-sse41.c diff --git a/packages/core/src/zig/image.zig b/packages/native/src/image.zig similarity index 100% rename from packages/core/src/zig/image.zig rename to packages/native/src/image.zig diff --git a/packages/core/src/zig/lib.zig b/packages/native/src/lib.zig similarity index 100% rename from packages/core/src/zig/lib.zig rename to packages/native/src/lib.zig diff --git a/packages/core/src/zig/link.zig b/packages/native/src/link.zig similarity index 100% rename from packages/core/src/zig/link.zig rename to packages/native/src/link.zig diff --git a/packages/core/src/zig/logger.zig b/packages/native/src/logger.zig similarity index 100% rename from packages/core/src/zig/logger.zig rename to packages/native/src/logger.zig diff --git a/packages/core/src/zig/mem-registry.zig b/packages/native/src/mem-registry.zig similarity index 100% rename from packages/core/src/zig/mem-registry.zig rename to packages/native/src/mem-registry.zig diff --git a/packages/core/src/zig/miniaudio_shim.c b/packages/native/src/miniaudio_shim.c similarity index 100% rename from packages/core/src/zig/miniaudio_shim.c rename to packages/native/src/miniaudio_shim.c diff --git a/packages/core/src/zig/native-renderable.zig b/packages/native/src/native-renderable.zig similarity index 100% rename from packages/core/src/zig/native-renderable.zig rename to packages/native/src/native-renderable.zig diff --git a/packages/core/src/zig/native-span-feed-bench-lib.zig b/packages/native/src/native-span-feed-bench-lib.zig similarity index 100% rename from packages/core/src/zig/native-span-feed-bench-lib.zig rename to packages/native/src/native-span-feed-bench-lib.zig diff --git a/packages/core/src/zig/native-span-feed.zig b/packages/native/src/native-span-feed.zig similarity index 100% rename from packages/core/src/zig/native-span-feed.zig rename to packages/native/src/native-span-feed.zig diff --git a/packages/native/src/opentui.zig b/packages/native/src/opentui.zig new file mode 100644 index 000000000..5828e6c50 --- /dev/null +++ b/packages/native/src/opentui.zig @@ -0,0 +1,16 @@ +pub const ansi = @import("ansi.zig"); +pub const buffer = @import("buffer.zig"); +pub const renderer = @import("renderer.zig"); +pub const text_buffer = @import("text-buffer.zig"); +pub const text_buffer_view = @import("text-buffer-view.zig"); + +pub const BufferedOutput = renderer.BufferedOutput; +pub const CliRenderer = renderer.CliRenderer; +pub const GraphemePool = @import("grapheme.zig").GraphemePool; +pub const LinkPool = @import("link.zig").LinkPool; +pub const OptimizedBuffer = buffer.OptimizedBuffer; +pub const RGBA = ansi.RGBA; +pub const TextAttributes = ansi.TextAttributes; +pub const UnifiedTextBuffer = text_buffer.UnifiedTextBuffer; +pub const UnifiedTextBufferView = text_buffer_view.UnifiedTextBufferView; +pub const rgbColor = ansi.rgbColor; diff --git a/packages/core/src/zig/renderer-output.zig b/packages/native/src/renderer-output.zig similarity index 100% rename from packages/core/src/zig/renderer-output.zig rename to packages/native/src/renderer-output.zig diff --git a/packages/core/src/zig/renderer.zig b/packages/native/src/renderer.zig similarity index 99% rename from packages/core/src/zig/renderer.zig rename to packages/native/src/renderer.zig index 0091a5314..b298c5851 100644 --- a/packages/core/src/zig/renderer.zig +++ b/packages/native/src/renderer.zig @@ -314,6 +314,8 @@ pub const CliRenderer = struct { remote_mode: Terminal.RemoteMode = .local, output: OutputTarget = .stdout, clearOnShutdown: bool = true, + // Borrowed: when provided, both frame buffers share this caller-owned pool. + link_pool: ?*link.LinkPool = null, // Optional override for terminal environment lookups. Borrowed: the // caller owns the map and must keep it alive for the renderer's lifetime. env_map: ?*const std.process.Environ.Map = null, @@ -333,9 +335,19 @@ pub const CliRenderer = struct { const self = try allocator.create(CliRenderer); errdefer allocator.destroy(self); - const currentBuffer = try OptimizedBuffer.init(allocator, width, height, .{ .pool = pool, .width_method = .unicode, .id = "current buffer" }); + const currentBuffer = try OptimizedBuffer.init(allocator, width, height, .{ + .pool = pool, + .link_pool = opts.link_pool, + .width_method = .unicode, + .id = "current buffer", + }); errdefer currentBuffer.deinit(); - const nextBuffer = try OptimizedBuffer.init(allocator, width, height, .{ .pool = pool, .width_method = .unicode, .id = "next buffer" }); + const nextBuffer = try OptimizedBuffer.init(allocator, width, height, .{ + .pool = pool, + .link_pool = opts.link_pool, + .width_method = .unicode, + .id = "next buffer", + }); errdefer nextBuffer.deinit(); // stat sample arrays @@ -1471,7 +1483,7 @@ pub const CliRenderer = struct { } currentLinkId = linkId; if (currentLinkId != 0) { - const lp = link.initGlobalLinkPool(self.allocator); + const lp = self.nextRenderBuffer.link_pool; if (lp.get(currentLinkId)) |url_bytes| { writer.print("\x1b]8;id={d};{s}\x1b\\", .{ currentLinkId, url_bytes }) catch {}; } else |_| { @@ -2471,7 +2483,7 @@ pub const CliRenderer = struct { } currentLinkId = linkId; if (currentLinkId != 0) { - const lp = link.initGlobalLinkPool(self.allocator); + const lp = self.nextRenderBuffer.link_pool; if (lp.get(currentLinkId)) |url_bytes| { writer.print("\x1b]8;id={d};{s}\x1b\\", .{ currentLinkId, url_bytes }) catch {}; } else |_| { @@ -2606,7 +2618,7 @@ pub const CliRenderer = struct { ansi.TextAttributes.applyAttributesOutputWriter(writer, cell.attributes) catch {}; const replay_link_id = if (hyperlinksEnabled) ansi.TextAttributes.getLinkId(cell.attributes) else 0; if (replay_link_id != 0) { - const lp = link.initGlobalLinkPool(self.allocator); + const lp = self.nextRenderBuffer.link_pool; if (lp.get(replay_link_id)) |url_bytes| { writer.print("\x1b]8;id={d};{s}\x1b\\", .{ replay_link_id, url_bytes }) catch {}; } else |_| {} diff --git a/packages/core/src/zig/rope.zig b/packages/native/src/rope.zig similarity index 100% rename from packages/core/src/zig/rope.zig rename to packages/native/src/rope.zig diff --git a/packages/core/src/zig/split-scrollback.zig b/packages/native/src/split-scrollback.zig similarity index 100% rename from packages/core/src/zig/split-scrollback.zig rename to packages/native/src/split-scrollback.zig diff --git a/packages/core/src/zig/syntax-style.zig b/packages/native/src/syntax-style.zig similarity index 100% rename from packages/core/src/zig/syntax-style.zig rename to packages/native/src/syntax-style.zig diff --git a/packages/core/src/zig/terminal-image.zig b/packages/native/src/terminal-image.zig similarity index 100% rename from packages/core/src/zig/terminal-image.zig rename to packages/native/src/terminal-image.zig diff --git a/packages/core/src/zig/terminal.zig b/packages/native/src/terminal.zig similarity index 100% rename from packages/core/src/zig/terminal.zig rename to packages/native/src/terminal.zig diff --git a/packages/core/src/zig/test.zig b/packages/native/src/test.zig similarity index 100% rename from packages/core/src/zig/test.zig rename to packages/native/src/test.zig diff --git a/packages/core/src/zig/tests/README.md b/packages/native/src/tests/README.md similarity index 100% rename from packages/core/src/zig/tests/README.md rename to packages/native/src/tests/README.md diff --git a/packages/core/src/zig/tests/ansi_test.zig b/packages/native/src/tests/ansi_test.zig similarity index 100% rename from packages/core/src/zig/tests/ansi_test.zig rename to packages/native/src/tests/ansi_test.zig diff --git a/packages/core/src/zig/tests/audio_test.zig b/packages/native/src/tests/audio_test.zig similarity index 99% rename from packages/core/src/zig/tests/audio_test.zig rename to packages/native/src/tests/audio_test.zig index 1e83d372c..165c98fba 100644 --- a/packages/core/src/zig/tests/audio_test.zig +++ b/packages/native/src/tests/audio_test.zig @@ -3,7 +3,7 @@ const testing = std.testing; const audio = @import("../audio.zig"); const TEST_SAMPLE_RATE: u32 = 48_000; -const TEST_MP3_PATH = "../tests/fixtures/audio/tone-750hz-48k-mono-1s.mp3"; +const TEST_MP3_PATH = "../core/src/tests/fixtures/audio/tone-750hz-48k-mono-1s.mp3"; fn expectStatusOk(status: i32) !void { try testing.expectEqual(audio.Status.ok, status); diff --git a/packages/core/src/zig/tests/buffer-methods_test.zig b/packages/native/src/tests/buffer-methods_test.zig similarity index 100% rename from packages/core/src/zig/tests/buffer-methods_test.zig rename to packages/native/src/tests/buffer-methods_test.zig diff --git a/packages/core/src/zig/tests/buffer_test.zig b/packages/native/src/tests/buffer_test.zig similarity index 100% rename from packages/core/src/zig/tests/buffer_test.zig rename to packages/native/src/tests/buffer_test.zig diff --git a/packages/core/src/zig/tests/edit-buffer-history_test.zig b/packages/native/src/tests/edit-buffer-history_test.zig similarity index 100% rename from packages/core/src/zig/tests/edit-buffer-history_test.zig rename to packages/native/src/tests/edit-buffer-history_test.zig diff --git a/packages/core/src/zig/tests/edit-buffer_test.zig b/packages/native/src/tests/edit-buffer_test.zig similarity index 100% rename from packages/core/src/zig/tests/edit-buffer_test.zig rename to packages/native/src/tests/edit-buffer_test.zig diff --git a/packages/core/src/zig/tests/editor-view_test.zig b/packages/native/src/tests/editor-view_test.zig similarity index 100% rename from packages/core/src/zig/tests/editor-view_test.zig rename to packages/native/src/tests/editor-view_test.zig diff --git a/packages/core/src/zig/tests/event-emitter_test.zig b/packages/native/src/tests/event-emitter_test.zig similarity index 100% rename from packages/core/src/zig/tests/event-emitter_test.zig rename to packages/native/src/tests/event-emitter_test.zig diff --git a/packages/core/src/zig/tests/fixtures/README.md b/packages/native/src/tests/fixtures/README.md similarity index 100% rename from packages/core/src/zig/tests/fixtures/README.md rename to packages/native/src/tests/fixtures/README.md diff --git a/packages/core/src/zig/tests/fixtures/display-p3-palette-alpha.png.base64 b/packages/native/src/tests/fixtures/display-p3-palette-alpha.png.base64 similarity index 100% rename from packages/core/src/zig/tests/fixtures/display-p3-palette-alpha.png.base64 rename to packages/native/src/tests/fixtures/display-p3-palette-alpha.png.base64 diff --git a/packages/core/src/zig/tests/fixtures/display-p3-palette.png.base64 b/packages/native/src/tests/fixtures/display-p3-palette.png.base64 similarity index 100% rename from packages/core/src/zig/tests/fixtures/display-p3-palette.png.base64 rename to packages/native/src/tests/fixtures/display-p3-palette.png.base64 diff --git a/packages/core/src/zig/tests/fixtures/display-p3-rgba.png.base64 b/packages/native/src/tests/fixtures/display-p3-rgba.png.base64 similarity index 100% rename from packages/core/src/zig/tests/fixtures/display-p3-rgba.png.base64 rename to packages/native/src/tests/fixtures/display-p3-rgba.png.base64 diff --git a/packages/core/src/zig/tests/fixtures/display-p3.png.base64 b/packages/native/src/tests/fixtures/display-p3.png.base64 similarity index 100% rename from packages/core/src/zig/tests/fixtures/display-p3.png.base64 rename to packages/native/src/tests/fixtures/display-p3.png.base64 diff --git a/packages/core/src/zig/tests/fixtures/gray-alpha-profile.png.base64 b/packages/native/src/tests/fixtures/gray-alpha-profile.png.base64 similarity index 100% rename from packages/core/src/zig/tests/fixtures/gray-alpha-profile.png.base64 rename to packages/native/src/tests/fixtures/gray-alpha-profile.png.base64 diff --git a/packages/core/src/zig/tests/fixtures/gray-profile.png.base64 b/packages/native/src/tests/fixtures/gray-profile.png.base64 similarity index 100% rename from packages/core/src/zig/tests/fixtures/gray-profile.png.base64 rename to packages/native/src/tests/fixtures/gray-profile.png.base64 diff --git a/packages/core/src/zig/tests/fixtures/srgb-profile.png.base64 b/packages/native/src/tests/fixtures/srgb-profile.png.base64 similarity index 100% rename from packages/core/src/zig/tests/fixtures/srgb-profile.png.base64 rename to packages/native/src/tests/fixtures/srgb-profile.png.base64 diff --git a/packages/core/src/zig/tests/fixtures/wide-opaque.png.base64 b/packages/native/src/tests/fixtures/wide-opaque.png.base64 similarity index 100% rename from packages/core/src/zig/tests/fixtures/wide-opaque.png.base64 rename to packages/native/src/tests/fixtures/wide-opaque.png.base64 diff --git a/packages/core/src/zig/tests/ghostty_vt_test.zig b/packages/native/src/tests/ghostty_vt_test.zig similarity index 100% rename from packages/core/src/zig/tests/ghostty_vt_test.zig rename to packages/native/src/tests/ghostty_vt_test.zig diff --git a/packages/core/src/zig/tests/grapheme_test.zig b/packages/native/src/tests/grapheme_test.zig similarity index 100% rename from packages/core/src/zig/tests/grapheme_test.zig rename to packages/native/src/tests/grapheme_test.zig diff --git a/packages/core/src/zig/tests/handles_test.zig b/packages/native/src/tests/handles_test.zig similarity index 100% rename from packages/core/src/zig/tests/handles_test.zig rename to packages/native/src/tests/handles_test.zig diff --git a/packages/core/src/zig/tests/image_test.zig b/packages/native/src/tests/image_test.zig similarity index 99% rename from packages/core/src/zig/tests/image_test.zig rename to packages/native/src/tests/image_test.zig index 9a8675827..323cae77b 100644 --- a/packages/core/src/zig/tests/image_test.zig +++ b/packages/native/src/tests/image_test.zig @@ -717,7 +717,7 @@ fn injectJpegExifOrientation( } test "JPEG EXIF orientation swaps probe and decode dimensions" { - const jpeg = try std.Io.Dir.cwd().readFileAlloc(std.testing.io, "../tests/fixtures/images/orientation.jpg", std.testing.allocator, .limited(1 << 20)); + const jpeg = try std.Io.Dir.cwd().readFileAlloc(std.testing.io, "../core/src/tests/fixtures/images/orientation.jpg", std.testing.allocator, .limited(1 << 20)); defer std.testing.allocator.free(jpeg); const plain = try image.decode(std.testing.allocator, jpeg, .{}); defer plain.deinit(); @@ -759,7 +759,7 @@ test "JPEG EXIF orientation swaps probe and decode dimensions" { } test "JPEG EXIF orientation 180 keeps dimensions" { - const jpeg = try std.Io.Dir.cwd().readFileAlloc(std.testing.io, "../tests/fixtures/images/orientation.jpg", std.testing.allocator, .limited(1 << 20)); + const jpeg = try std.Io.Dir.cwd().readFileAlloc(std.testing.io, "../core/src/tests/fixtures/images/orientation.jpg", std.testing.allocator, .limited(1 << 20)); defer std.testing.allocator.free(jpeg); const plain = try image.decode(std.testing.allocator, jpeg, .{}); defer plain.deinit(); @@ -788,7 +788,7 @@ test "JPEG EXIF orientation 180 keeps dimensions" { } test "JPEG EXIF orientation ignores invalid values and uses the default" { - const jpeg = try std.Io.Dir.cwd().readFileAlloc(std.testing.io, "../tests/fixtures/images/orientation.jpg", std.testing.allocator, .limited(1 << 20)); + const jpeg = try std.Io.Dir.cwd().readFileAlloc(std.testing.io, "../core/src/tests/fixtures/images/orientation.jpg", std.testing.allocator, .limited(1 << 20)); defer std.testing.allocator.free(jpeg); for ([_]u16{ 0, 9, 200 }) |invalid| { const bytes = try injectJpegExifOrientation(std.testing.allocator, jpeg, invalid, .little); diff --git a/packages/core/src/zig/tests/link_test.zig b/packages/native/src/tests/link_test.zig similarity index 100% rename from packages/core/src/zig/tests/link_test.zig rename to packages/native/src/tests/link_test.zig diff --git a/packages/core/src/zig/tests/mem-registry_test.zig b/packages/native/src/tests/mem-registry_test.zig similarity index 100% rename from packages/core/src/zig/tests/mem-registry_test.zig rename to packages/native/src/tests/mem-registry_test.zig diff --git a/packages/core/src/zig/tests/memory_leak_regression_test.zig b/packages/native/src/tests/memory_leak_regression_test.zig similarity index 100% rename from packages/core/src/zig/tests/memory_leak_regression_test.zig rename to packages/native/src/tests/memory_leak_regression_test.zig diff --git a/packages/core/src/zig/tests/native-renderable_test.zig b/packages/native/src/tests/native-renderable_test.zig similarity index 100% rename from packages/core/src/zig/tests/native-renderable_test.zig rename to packages/native/src/tests/native-renderable_test.zig diff --git a/packages/core/src/zig/tests/native-span-feed_test.zig b/packages/native/src/tests/native-span-feed_test.zig similarity index 100% rename from packages/core/src/zig/tests/native-span-feed_test.zig rename to packages/native/src/tests/native-span-feed_test.zig diff --git a/packages/core/src/zig/tests/renderer_test.zig b/packages/native/src/tests/renderer_test.zig similarity index 99% rename from packages/core/src/zig/tests/renderer_test.zig rename to packages/native/src/tests/renderer_test.zig index a616cf748..6fc19e890 100644 --- a/packages/core/src/zig/tests/renderer_test.zig +++ b/packages/native/src/tests/renderer_test.zig @@ -1749,14 +1749,15 @@ test "renderer - grows frame output instead of committing cells whose ANSI was d test "renderer - hyperlinks enabled with OSC 8 output" { const pool = gp.initGlobalPool(std.testing.allocator); defer gp.deinitGlobalPool(); - const local_link_pool = link.initGlobalLinkPool(std.testing.allocator); - defer link.deinitGlobalLinkPool(); + var local_link_pool = link.LinkPool.init(std.testing.allocator); + defer local_link_pool.deinit(); - var test_cli_renderer = try TestRenderer.create( + var test_cli_renderer = try TestRenderer.createWithLinkPool( std.testing.allocator, 80, 24, pool, + &local_link_pool, ); defer test_cli_renderer.deinit(); const cli_renderer = test_cli_renderer.renderer; diff --git a/packages/core/src/zig/tests/rope-nested_test.zig b/packages/native/src/tests/rope-nested_test.zig similarity index 100% rename from packages/core/src/zig/tests/rope-nested_test.zig rename to packages/native/src/tests/rope-nested_test.zig diff --git a/packages/core/src/zig/tests/rope_fuzz_test.zig b/packages/native/src/tests/rope_fuzz_test.zig similarity index 100% rename from packages/core/src/zig/tests/rope_fuzz_test.zig rename to packages/native/src/tests/rope_fuzz_test.zig diff --git a/packages/core/src/zig/tests/rope_test.zig b/packages/native/src/tests/rope_test.zig similarity index 100% rename from packages/core/src/zig/tests/rope_test.zig rename to packages/native/src/tests/rope_test.zig diff --git a/packages/core/src/zig/tests/segment-merge.test.zig b/packages/native/src/tests/segment-merge.test.zig similarity index 100% rename from packages/core/src/zig/tests/segment-merge.test.zig rename to packages/native/src/tests/segment-merge.test.zig diff --git a/packages/core/src/zig/tests/split-scrollback_test.zig b/packages/native/src/tests/split-scrollback_test.zig similarity index 100% rename from packages/core/src/zig/tests/split-scrollback_test.zig rename to packages/native/src/tests/split-scrollback_test.zig diff --git a/packages/core/src/zig/tests/syntax-style_test.zig b/packages/native/src/tests/syntax-style_test.zig similarity index 100% rename from packages/core/src/zig/tests/syntax-style_test.zig rename to packages/native/src/tests/syntax-style_test.zig diff --git a/packages/core/src/zig/tests/terminal-image_test.zig b/packages/native/src/tests/terminal-image_test.zig similarity index 99% rename from packages/core/src/zig/tests/terminal-image_test.zig rename to packages/native/src/tests/terminal-image_test.zig index 73b185604..64c0e0cc2 100644 --- a/packages/core/src/zig/tests/terminal-image_test.zig +++ b/packages/native/src/tests/terminal-image_test.zig @@ -553,7 +553,7 @@ test "adaptive Sixel palette quality by color limit" { } test "kitty transmits decoded JPEG images as raw RGB pixels" { - const jpeg = try std.Io.Dir.cwd().readFileAlloc(std.testing.io, "../tests/fixtures/images/halves.jpg", std.testing.allocator, .limited(1 << 20)); + const jpeg = try std.Io.Dir.cwd().readFileAlloc(std.testing.io, "../core/src/tests/fixtures/images/halves.jpg", std.testing.allocator, .limited(1 << 20)); defer std.testing.allocator.free(jpeg); const decoded = try image.decode(std.testing.allocator, jpeg, .{}); defer decoded.deinit(); @@ -576,7 +576,7 @@ test "kitty transmits decoded JPEG images as raw RGB pixels" { } test "kitty transmits decoded WebP alpha images as raw RGBA pixels" { - const webp = try std.Io.Dir.cwd().readFileAlloc(std.testing.io, "../tests/fixtures/images/alpha.webp", std.testing.allocator, .limited(1 << 20)); + const webp = try std.Io.Dir.cwd().readFileAlloc(std.testing.io, "../core/src/tests/fixtures/images/alpha.webp", std.testing.allocator, .limited(1 << 20)); defer std.testing.allocator.free(webp); const decoded = try image.decode(std.testing.allocator, webp, .{}); defer decoded.deinit(); diff --git a/packages/core/src/zig/tests/terminal_test.zig b/packages/native/src/tests/terminal_test.zig similarity index 100% rename from packages/core/src/zig/tests/terminal_test.zig rename to packages/native/src/tests/terminal_test.zig diff --git a/packages/core/src/zig/tests/test-renderer.zig b/packages/native/src/tests/test-renderer.zig similarity index 92% rename from packages/core/src/zig/tests/test-renderer.zig rename to packages/native/src/tests/test-renderer.zig index 9610dffe1..f613d13ff 100644 --- a/packages/core/src/zig/tests/test-renderer.zig +++ b/packages/native/src/tests/test-renderer.zig @@ -4,6 +4,7 @@ const io = if (builtin.is_test) std.testing.io else @import("root").io; const renderer = @import("../renderer.zig"); const renderer_output = @import("../renderer-output.zig"); const gp = @import("../grapheme.zig"); +const link = @import("../link.zig"); pub const TestMemoryOutput = struct { allocator: std.mem.Allocator, @@ -59,6 +60,7 @@ pub const TestRenderer = struct { const CreateConfig = struct { thread_safe: bool = false, env_vars: []const TestEnvVar = &.{}, + link_pool: ?*link.LinkPool = null, }; pub fn create(allocator: std.mem.Allocator, width: u32, height: u32, pool: *gp.GraphemePool) !TestRenderer { @@ -79,6 +81,10 @@ pub const TestRenderer = struct { return createWithConfig(allocator, width, height, pool, .{ .env_vars = env_vars }); } + pub fn createWithLinkPool(allocator: std.mem.Allocator, width: u32, height: u32, pool: *gp.GraphemePool, link_pool: *link.LinkPool) !TestRenderer { + return createWithConfig(allocator, width, height, pool, .{ .link_pool = link_pool }); + } + fn createWithConfig( allocator: std.mem.Allocator, width: u32, @@ -103,6 +109,7 @@ pub const TestRenderer = struct { const cli_renderer = try renderer.CliRenderer.createWithOptions(allocator, width, height, pool, .{ .output = .{ .buffered = memory.bufferedOutput() }, .env_map = env_map, + .link_pool = config.link_pool, }); return .{ diff --git a/packages/core/src/zig/tests/text-buffer-drawing_test.zig b/packages/native/src/tests/text-buffer-drawing_test.zig similarity index 100% rename from packages/core/src/zig/tests/text-buffer-drawing_test.zig rename to packages/native/src/tests/text-buffer-drawing_test.zig diff --git a/packages/core/src/zig/tests/text-buffer-highlights_test.zig b/packages/native/src/tests/text-buffer-highlights_test.zig similarity index 100% rename from packages/core/src/zig/tests/text-buffer-highlights_test.zig rename to packages/native/src/tests/text-buffer-highlights_test.zig diff --git a/packages/core/src/zig/tests/text-buffer-iterators_test.zig b/packages/native/src/tests/text-buffer-iterators_test.zig similarity index 100% rename from packages/core/src/zig/tests/text-buffer-iterators_test.zig rename to packages/native/src/tests/text-buffer-iterators_test.zig diff --git a/packages/core/src/zig/tests/text-buffer-segment_test.zig b/packages/native/src/tests/text-buffer-segment_test.zig similarity index 100% rename from packages/core/src/zig/tests/text-buffer-segment_test.zig rename to packages/native/src/tests/text-buffer-segment_test.zig diff --git a/packages/core/src/zig/tests/text-buffer-selection_test.zig b/packages/native/src/tests/text-buffer-selection_test.zig similarity index 100% rename from packages/core/src/zig/tests/text-buffer-selection_test.zig rename to packages/native/src/tests/text-buffer-selection_test.zig diff --git a/packages/core/src/zig/tests/text-buffer-selection_viewport_test.zig b/packages/native/src/tests/text-buffer-selection_viewport_test.zig similarity index 100% rename from packages/core/src/zig/tests/text-buffer-selection_viewport_test.zig rename to packages/native/src/tests/text-buffer-selection_viewport_test.zig diff --git a/packages/core/src/zig/tests/text-buffer-view_test.zig b/packages/native/src/tests/text-buffer-view_test.zig similarity index 100% rename from packages/core/src/zig/tests/text-buffer-view_test.zig rename to packages/native/src/tests/text-buffer-view_test.zig diff --git a/packages/core/src/zig/tests/text-buffer_test.zig b/packages/native/src/tests/text-buffer_test.zig similarity index 100% rename from packages/core/src/zig/tests/text-buffer_test.zig rename to packages/native/src/tests/text-buffer_test.zig diff --git a/packages/core/src/zig/tests/unicode-width-map.zon b/packages/native/src/tests/unicode-width-map.zon similarity index 100% rename from packages/core/src/zig/tests/unicode-width-map.zon rename to packages/native/src/tests/unicode-width-map.zon diff --git a/packages/core/src/zig/tests/utf8_no_zwj_test.zig b/packages/native/src/tests/utf8_no_zwj_test.zig similarity index 100% rename from packages/core/src/zig/tests/utf8_no_zwj_test.zig rename to packages/native/src/tests/utf8_no_zwj_test.zig diff --git a/packages/core/src/zig/tests/utf8_test.zig b/packages/native/src/tests/utf8_test.zig similarity index 100% rename from packages/core/src/zig/tests/utf8_test.zig rename to packages/native/src/tests/utf8_test.zig diff --git a/packages/core/src/zig/tests/utf8_wcwidth_cursor_test.zig b/packages/native/src/tests/utf8_wcwidth_cursor_test.zig similarity index 100% rename from packages/core/src/zig/tests/utf8_wcwidth_cursor_test.zig rename to packages/native/src/tests/utf8_wcwidth_cursor_test.zig diff --git a/packages/core/src/zig/tests/utf8_wcwidth_test.zig b/packages/native/src/tests/utf8_wcwidth_test.zig similarity index 100% rename from packages/core/src/zig/tests/utf8_wcwidth_test.zig rename to packages/native/src/tests/utf8_wcwidth_test.zig diff --git a/packages/core/src/zig/tests/word-wrap-editing_test.zig b/packages/native/src/tests/word-wrap-editing_test.zig similarity index 100% rename from packages/core/src/zig/tests/word-wrap-editing_test.zig rename to packages/native/src/tests/word-wrap-editing_test.zig diff --git a/packages/core/src/zig/tests/wrap-cache-perf_test.zig b/packages/native/src/tests/wrap-cache-perf_test.zig similarity index 100% rename from packages/core/src/zig/tests/wrap-cache-perf_test.zig rename to packages/native/src/tests/wrap-cache-perf_test.zig diff --git a/packages/core/src/zig/tests/yoga_test.zig b/packages/native/src/tests/yoga_test.zig similarity index 100% rename from packages/core/src/zig/tests/yoga_test.zig rename to packages/native/src/tests/yoga_test.zig diff --git a/packages/core/src/zig/text-buffer-iterators.zig b/packages/native/src/text-buffer-iterators.zig similarity index 100% rename from packages/core/src/zig/text-buffer-iterators.zig rename to packages/native/src/text-buffer-iterators.zig diff --git a/packages/core/src/zig/text-buffer-segment.zig b/packages/native/src/text-buffer-segment.zig similarity index 100% rename from packages/core/src/zig/text-buffer-segment.zig rename to packages/native/src/text-buffer-segment.zig diff --git a/packages/core/src/zig/text-buffer-view.zig b/packages/native/src/text-buffer-view.zig similarity index 100% rename from packages/core/src/zig/text-buffer-view.zig rename to packages/native/src/text-buffer-view.zig diff --git a/packages/core/src/zig/text-buffer.zig b/packages/native/src/text-buffer.zig similarity index 100% rename from packages/core/src/zig/text-buffer.zig rename to packages/native/src/text-buffer.zig diff --git a/packages/core/src/zig/utf8.zig b/packages/native/src/utf8.zig similarity index 100% rename from packages/core/src/zig/utf8.zig rename to packages/native/src/utf8.zig diff --git a/packages/core/src/zig/utils.zig b/packages/native/src/utils.zig similarity index 100% rename from packages/core/src/zig/utils.zig rename to packages/native/src/utils.zig diff --git a/packages/core/src/zig/vendor/README.md b/packages/native/src/vendor/README.md similarity index 100% rename from packages/core/src/zig/vendor/README.md rename to packages/native/src/vendor/README.md diff --git a/packages/core/src/zig/vendor/lcms2/FILES b/packages/native/src/vendor/lcms2/FILES similarity index 100% rename from packages/core/src/zig/vendor/lcms2/FILES rename to packages/native/src/vendor/lcms2/FILES diff --git a/packages/core/src/zig/vendor/lcms2/LICENSE b/packages/native/src/vendor/lcms2/LICENSE similarity index 100% rename from packages/core/src/zig/vendor/lcms2/LICENSE rename to packages/native/src/vendor/lcms2/LICENSE diff --git a/packages/core/src/zig/vendor/lcms2/README.md b/packages/native/src/vendor/lcms2/README.md similarity index 100% rename from packages/core/src/zig/vendor/lcms2/README.md rename to packages/native/src/vendor/lcms2/README.md diff --git a/packages/core/src/zig/vendor/lcms2/include/lcms2.h b/packages/native/src/vendor/lcms2/include/lcms2.h similarity index 100% rename from packages/core/src/zig/vendor/lcms2/include/lcms2.h rename to packages/native/src/vendor/lcms2/include/lcms2.h diff --git a/packages/core/src/zig/vendor/lcms2/include/lcms2_plugin.h b/packages/native/src/vendor/lcms2/include/lcms2_plugin.h similarity index 100% rename from packages/core/src/zig/vendor/lcms2/include/lcms2_plugin.h rename to packages/native/src/vendor/lcms2/include/lcms2_plugin.h diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsalpha.c b/packages/native/src/vendor/lcms2/src/cmsalpha.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsalpha.c rename to packages/native/src/vendor/lcms2/src/cmsalpha.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmscam02.c b/packages/native/src/vendor/lcms2/src/cmscam02.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmscam02.c rename to packages/native/src/vendor/lcms2/src/cmscam02.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmscgats.c b/packages/native/src/vendor/lcms2/src/cmscgats.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmscgats.c rename to packages/native/src/vendor/lcms2/src/cmscgats.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmscnvrt.c b/packages/native/src/vendor/lcms2/src/cmscnvrt.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmscnvrt.c rename to packages/native/src/vendor/lcms2/src/cmscnvrt.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmserr.c b/packages/native/src/vendor/lcms2/src/cmserr.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmserr.c rename to packages/native/src/vendor/lcms2/src/cmserr.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsgamma.c b/packages/native/src/vendor/lcms2/src/cmsgamma.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsgamma.c rename to packages/native/src/vendor/lcms2/src/cmsgamma.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsgmt.c b/packages/native/src/vendor/lcms2/src/cmsgmt.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsgmt.c rename to packages/native/src/vendor/lcms2/src/cmsgmt.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmshalf.c b/packages/native/src/vendor/lcms2/src/cmshalf.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmshalf.c rename to packages/native/src/vendor/lcms2/src/cmshalf.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsintrp.c b/packages/native/src/vendor/lcms2/src/cmsintrp.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsintrp.c rename to packages/native/src/vendor/lcms2/src/cmsintrp.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsio0.c b/packages/native/src/vendor/lcms2/src/cmsio0.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsio0.c rename to packages/native/src/vendor/lcms2/src/cmsio0.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsio1.c b/packages/native/src/vendor/lcms2/src/cmsio1.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsio1.c rename to packages/native/src/vendor/lcms2/src/cmsio1.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmslut.c b/packages/native/src/vendor/lcms2/src/cmslut.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmslut.c rename to packages/native/src/vendor/lcms2/src/cmslut.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsmd5.c b/packages/native/src/vendor/lcms2/src/cmsmd5.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsmd5.c rename to packages/native/src/vendor/lcms2/src/cmsmd5.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsmtrx.c b/packages/native/src/vendor/lcms2/src/cmsmtrx.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsmtrx.c rename to packages/native/src/vendor/lcms2/src/cmsmtrx.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsnamed.c b/packages/native/src/vendor/lcms2/src/cmsnamed.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsnamed.c rename to packages/native/src/vendor/lcms2/src/cmsnamed.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsopt.c b/packages/native/src/vendor/lcms2/src/cmsopt.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsopt.c rename to packages/native/src/vendor/lcms2/src/cmsopt.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmspack.c b/packages/native/src/vendor/lcms2/src/cmspack.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmspack.c rename to packages/native/src/vendor/lcms2/src/cmspack.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmspcs.c b/packages/native/src/vendor/lcms2/src/cmspcs.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmspcs.c rename to packages/native/src/vendor/lcms2/src/cmspcs.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsplugin.c b/packages/native/src/vendor/lcms2/src/cmsplugin.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsplugin.c rename to packages/native/src/vendor/lcms2/src/cmsplugin.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsps2.c b/packages/native/src/vendor/lcms2/src/cmsps2.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsps2.c rename to packages/native/src/vendor/lcms2/src/cmsps2.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmssamp.c b/packages/native/src/vendor/lcms2/src/cmssamp.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmssamp.c rename to packages/native/src/vendor/lcms2/src/cmssamp.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmssm.c b/packages/native/src/vendor/lcms2/src/cmssm.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmssm.c rename to packages/native/src/vendor/lcms2/src/cmssm.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmstypes.c b/packages/native/src/vendor/lcms2/src/cmstypes.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmstypes.c rename to packages/native/src/vendor/lcms2/src/cmstypes.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsvirt.c b/packages/native/src/vendor/lcms2/src/cmsvirt.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsvirt.c rename to packages/native/src/vendor/lcms2/src/cmsvirt.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmswtpnt.c b/packages/native/src/vendor/lcms2/src/cmswtpnt.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmswtpnt.c rename to packages/native/src/vendor/lcms2/src/cmswtpnt.c diff --git a/packages/core/src/zig/vendor/lcms2/src/cmsxform.c b/packages/native/src/vendor/lcms2/src/cmsxform.c similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/cmsxform.c rename to packages/native/src/vendor/lcms2/src/cmsxform.c diff --git a/packages/core/src/zig/vendor/lcms2/src/lcms2_internal.h b/packages/native/src/vendor/lcms2/src/lcms2_internal.h similarity index 100% rename from packages/core/src/zig/vendor/lcms2/src/lcms2_internal.h rename to packages/native/src/vendor/lcms2/src/lcms2_internal.h diff --git a/packages/core/src/zig/vendor/libwebp/AUTHORS b/packages/native/src/vendor/libwebp/AUTHORS similarity index 100% rename from packages/core/src/zig/vendor/libwebp/AUTHORS rename to packages/native/src/vendor/libwebp/AUTHORS diff --git a/packages/core/src/zig/vendor/libwebp/COPYING b/packages/native/src/vendor/libwebp/COPYING similarity index 100% rename from packages/core/src/zig/vendor/libwebp/COPYING rename to packages/native/src/vendor/libwebp/COPYING diff --git a/packages/core/src/zig/vendor/libwebp/FILES b/packages/native/src/vendor/libwebp/FILES similarity index 100% rename from packages/core/src/zig/vendor/libwebp/FILES rename to packages/native/src/vendor/libwebp/FILES diff --git a/packages/core/src/zig/vendor/libwebp/PATENTS b/packages/native/src/vendor/libwebp/PATENTS similarity index 100% rename from packages/core/src/zig/vendor/libwebp/PATENTS rename to packages/native/src/vendor/libwebp/PATENTS diff --git a/packages/core/src/zig/vendor/libwebp/README.md b/packages/native/src/vendor/libwebp/README.md similarity index 100% rename from packages/core/src/zig/vendor/libwebp/README.md rename to packages/native/src/vendor/libwebp/README.md diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/alpha_dec.c b/packages/native/src/vendor/libwebp/src/dec/alpha_dec.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/alpha_dec.c rename to packages/native/src/vendor/libwebp/src/dec/alpha_dec.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/alphai_dec.h b/packages/native/src/vendor/libwebp/src/dec/alphai_dec.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/alphai_dec.h rename to packages/native/src/vendor/libwebp/src/dec/alphai_dec.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/buffer_dec.c b/packages/native/src/vendor/libwebp/src/dec/buffer_dec.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/buffer_dec.c rename to packages/native/src/vendor/libwebp/src/dec/buffer_dec.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/common_dec.h b/packages/native/src/vendor/libwebp/src/dec/common_dec.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/common_dec.h rename to packages/native/src/vendor/libwebp/src/dec/common_dec.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/frame_dec.c b/packages/native/src/vendor/libwebp/src/dec/frame_dec.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/frame_dec.c rename to packages/native/src/vendor/libwebp/src/dec/frame_dec.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/idec_dec.c b/packages/native/src/vendor/libwebp/src/dec/idec_dec.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/idec_dec.c rename to packages/native/src/vendor/libwebp/src/dec/idec_dec.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/io_dec.c b/packages/native/src/vendor/libwebp/src/dec/io_dec.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/io_dec.c rename to packages/native/src/vendor/libwebp/src/dec/io_dec.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/quant_dec.c b/packages/native/src/vendor/libwebp/src/dec/quant_dec.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/quant_dec.c rename to packages/native/src/vendor/libwebp/src/dec/quant_dec.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/tree_dec.c b/packages/native/src/vendor/libwebp/src/dec/tree_dec.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/tree_dec.c rename to packages/native/src/vendor/libwebp/src/dec/tree_dec.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/vp8_dec.c b/packages/native/src/vendor/libwebp/src/dec/vp8_dec.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/vp8_dec.c rename to packages/native/src/vendor/libwebp/src/dec/vp8_dec.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/vp8_dec.h b/packages/native/src/vendor/libwebp/src/dec/vp8_dec.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/vp8_dec.h rename to packages/native/src/vendor/libwebp/src/dec/vp8_dec.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/vp8i_dec.h b/packages/native/src/vendor/libwebp/src/dec/vp8i_dec.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/vp8i_dec.h rename to packages/native/src/vendor/libwebp/src/dec/vp8i_dec.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/vp8l_dec.c b/packages/native/src/vendor/libwebp/src/dec/vp8l_dec.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/vp8l_dec.c rename to packages/native/src/vendor/libwebp/src/dec/vp8l_dec.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/vp8li_dec.h b/packages/native/src/vendor/libwebp/src/dec/vp8li_dec.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/vp8li_dec.h rename to packages/native/src/vendor/libwebp/src/dec/vp8li_dec.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/webp_dec.c b/packages/native/src/vendor/libwebp/src/dec/webp_dec.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/webp_dec.c rename to packages/native/src/vendor/libwebp/src/dec/webp_dec.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dec/webpi_dec.h b/packages/native/src/vendor/libwebp/src/dec/webpi_dec.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dec/webpi_dec.h rename to packages/native/src/vendor/libwebp/src/dec/webpi_dec.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/alpha_processing.c b/packages/native/src/vendor/libwebp/src/dsp/alpha_processing.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/alpha_processing.c rename to packages/native/src/vendor/libwebp/src/dsp/alpha_processing.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/alpha_processing_neon.c b/packages/native/src/vendor/libwebp/src/dsp/alpha_processing_neon.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/alpha_processing_neon.c rename to packages/native/src/vendor/libwebp/src/dsp/alpha_processing_neon.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/alpha_processing_sse2.c b/packages/native/src/vendor/libwebp/src/dsp/alpha_processing_sse2.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/alpha_processing_sse2.c rename to packages/native/src/vendor/libwebp/src/dsp/alpha_processing_sse2.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/alpha_processing_sse41.c b/packages/native/src/vendor/libwebp/src/dsp/alpha_processing_sse41.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/alpha_processing_sse41.c rename to packages/native/src/vendor/libwebp/src/dsp/alpha_processing_sse41.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/common_sse2.h b/packages/native/src/vendor/libwebp/src/dsp/common_sse2.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/common_sse2.h rename to packages/native/src/vendor/libwebp/src/dsp/common_sse2.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/common_sse41.h b/packages/native/src/vendor/libwebp/src/dsp/common_sse41.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/common_sse41.h rename to packages/native/src/vendor/libwebp/src/dsp/common_sse41.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/cpu.c b/packages/native/src/vendor/libwebp/src/dsp/cpu.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/cpu.c rename to packages/native/src/vendor/libwebp/src/dsp/cpu.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/cpu.h b/packages/native/src/vendor/libwebp/src/dsp/cpu.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/cpu.h rename to packages/native/src/vendor/libwebp/src/dsp/cpu.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/dec.c b/packages/native/src/vendor/libwebp/src/dsp/dec.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/dec.c rename to packages/native/src/vendor/libwebp/src/dsp/dec.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/dec_clip_tables.c b/packages/native/src/vendor/libwebp/src/dsp/dec_clip_tables.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/dec_clip_tables.c rename to packages/native/src/vendor/libwebp/src/dsp/dec_clip_tables.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/dec_neon.c b/packages/native/src/vendor/libwebp/src/dsp/dec_neon.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/dec_neon.c rename to packages/native/src/vendor/libwebp/src/dsp/dec_neon.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/dec_sse2.c b/packages/native/src/vendor/libwebp/src/dsp/dec_sse2.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/dec_sse2.c rename to packages/native/src/vendor/libwebp/src/dsp/dec_sse2.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/dec_sse41.c b/packages/native/src/vendor/libwebp/src/dsp/dec_sse41.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/dec_sse41.c rename to packages/native/src/vendor/libwebp/src/dsp/dec_sse41.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/dsp.h b/packages/native/src/vendor/libwebp/src/dsp/dsp.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/dsp.h rename to packages/native/src/vendor/libwebp/src/dsp/dsp.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/filters.c b/packages/native/src/vendor/libwebp/src/dsp/filters.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/filters.c rename to packages/native/src/vendor/libwebp/src/dsp/filters.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/filters_neon.c b/packages/native/src/vendor/libwebp/src/dsp/filters_neon.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/filters_neon.c rename to packages/native/src/vendor/libwebp/src/dsp/filters_neon.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/filters_sse2.c b/packages/native/src/vendor/libwebp/src/dsp/filters_sse2.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/filters_sse2.c rename to packages/native/src/vendor/libwebp/src/dsp/filters_sse2.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/lossless.c b/packages/native/src/vendor/libwebp/src/dsp/lossless.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/lossless.c rename to packages/native/src/vendor/libwebp/src/dsp/lossless.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/lossless.h b/packages/native/src/vendor/libwebp/src/dsp/lossless.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/lossless.h rename to packages/native/src/vendor/libwebp/src/dsp/lossless.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/lossless_avx2.c b/packages/native/src/vendor/libwebp/src/dsp/lossless_avx2.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/lossless_avx2.c rename to packages/native/src/vendor/libwebp/src/dsp/lossless_avx2.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/lossless_common.h b/packages/native/src/vendor/libwebp/src/dsp/lossless_common.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/lossless_common.h rename to packages/native/src/vendor/libwebp/src/dsp/lossless_common.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/lossless_neon.c b/packages/native/src/vendor/libwebp/src/dsp/lossless_neon.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/lossless_neon.c rename to packages/native/src/vendor/libwebp/src/dsp/lossless_neon.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/lossless_sse2.c b/packages/native/src/vendor/libwebp/src/dsp/lossless_sse2.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/lossless_sse2.c rename to packages/native/src/vendor/libwebp/src/dsp/lossless_sse2.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/lossless_sse41.c b/packages/native/src/vendor/libwebp/src/dsp/lossless_sse41.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/lossless_sse41.c rename to packages/native/src/vendor/libwebp/src/dsp/lossless_sse41.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/neon.h b/packages/native/src/vendor/libwebp/src/dsp/neon.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/neon.h rename to packages/native/src/vendor/libwebp/src/dsp/neon.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/rescaler.c b/packages/native/src/vendor/libwebp/src/dsp/rescaler.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/rescaler.c rename to packages/native/src/vendor/libwebp/src/dsp/rescaler.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/rescaler_neon.c b/packages/native/src/vendor/libwebp/src/dsp/rescaler_neon.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/rescaler_neon.c rename to packages/native/src/vendor/libwebp/src/dsp/rescaler_neon.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/rescaler_sse2.c b/packages/native/src/vendor/libwebp/src/dsp/rescaler_sse2.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/rescaler_sse2.c rename to packages/native/src/vendor/libwebp/src/dsp/rescaler_sse2.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/upsampling.c b/packages/native/src/vendor/libwebp/src/dsp/upsampling.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/upsampling.c rename to packages/native/src/vendor/libwebp/src/dsp/upsampling.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/upsampling_neon.c b/packages/native/src/vendor/libwebp/src/dsp/upsampling_neon.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/upsampling_neon.c rename to packages/native/src/vendor/libwebp/src/dsp/upsampling_neon.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/upsampling_sse2.c b/packages/native/src/vendor/libwebp/src/dsp/upsampling_sse2.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/upsampling_sse2.c rename to packages/native/src/vendor/libwebp/src/dsp/upsampling_sse2.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/upsampling_sse41.c b/packages/native/src/vendor/libwebp/src/dsp/upsampling_sse41.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/upsampling_sse41.c rename to packages/native/src/vendor/libwebp/src/dsp/upsampling_sse41.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/yuv.c b/packages/native/src/vendor/libwebp/src/dsp/yuv.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/yuv.c rename to packages/native/src/vendor/libwebp/src/dsp/yuv.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/yuv.h b/packages/native/src/vendor/libwebp/src/dsp/yuv.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/yuv.h rename to packages/native/src/vendor/libwebp/src/dsp/yuv.h diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/yuv_neon.c b/packages/native/src/vendor/libwebp/src/dsp/yuv_neon.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/yuv_neon.c rename to packages/native/src/vendor/libwebp/src/dsp/yuv_neon.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/yuv_sse2.c b/packages/native/src/vendor/libwebp/src/dsp/yuv_sse2.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/yuv_sse2.c rename to packages/native/src/vendor/libwebp/src/dsp/yuv_sse2.c diff --git a/packages/core/src/zig/vendor/libwebp/src/dsp/yuv_sse41.c b/packages/native/src/vendor/libwebp/src/dsp/yuv_sse41.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/dsp/yuv_sse41.c rename to packages/native/src/vendor/libwebp/src/dsp/yuv_sse41.c diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/bit_reader_inl_utils.h b/packages/native/src/vendor/libwebp/src/utils/bit_reader_inl_utils.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/bit_reader_inl_utils.h rename to packages/native/src/vendor/libwebp/src/utils/bit_reader_inl_utils.h diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/bit_reader_utils.c b/packages/native/src/vendor/libwebp/src/utils/bit_reader_utils.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/bit_reader_utils.c rename to packages/native/src/vendor/libwebp/src/utils/bit_reader_utils.c diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/bit_reader_utils.h b/packages/native/src/vendor/libwebp/src/utils/bit_reader_utils.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/bit_reader_utils.h rename to packages/native/src/vendor/libwebp/src/utils/bit_reader_utils.h diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/color_cache_utils.c b/packages/native/src/vendor/libwebp/src/utils/color_cache_utils.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/color_cache_utils.c rename to packages/native/src/vendor/libwebp/src/utils/color_cache_utils.c diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/color_cache_utils.h b/packages/native/src/vendor/libwebp/src/utils/color_cache_utils.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/color_cache_utils.h rename to packages/native/src/vendor/libwebp/src/utils/color_cache_utils.h diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/endian_inl_utils.h b/packages/native/src/vendor/libwebp/src/utils/endian_inl_utils.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/endian_inl_utils.h rename to packages/native/src/vendor/libwebp/src/utils/endian_inl_utils.h diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/filters_utils.c b/packages/native/src/vendor/libwebp/src/utils/filters_utils.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/filters_utils.c rename to packages/native/src/vendor/libwebp/src/utils/filters_utils.c diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/filters_utils.h b/packages/native/src/vendor/libwebp/src/utils/filters_utils.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/filters_utils.h rename to packages/native/src/vendor/libwebp/src/utils/filters_utils.h diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/huffman_utils.c b/packages/native/src/vendor/libwebp/src/utils/huffman_utils.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/huffman_utils.c rename to packages/native/src/vendor/libwebp/src/utils/huffman_utils.c diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/huffman_utils.h b/packages/native/src/vendor/libwebp/src/utils/huffman_utils.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/huffman_utils.h rename to packages/native/src/vendor/libwebp/src/utils/huffman_utils.h diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/palette.c b/packages/native/src/vendor/libwebp/src/utils/palette.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/palette.c rename to packages/native/src/vendor/libwebp/src/utils/palette.c diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/palette.h b/packages/native/src/vendor/libwebp/src/utils/palette.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/palette.h rename to packages/native/src/vendor/libwebp/src/utils/palette.h diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/quant_levels_dec_utils.c b/packages/native/src/vendor/libwebp/src/utils/quant_levels_dec_utils.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/quant_levels_dec_utils.c rename to packages/native/src/vendor/libwebp/src/utils/quant_levels_dec_utils.c diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/quant_levels_dec_utils.h b/packages/native/src/vendor/libwebp/src/utils/quant_levels_dec_utils.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/quant_levels_dec_utils.h rename to packages/native/src/vendor/libwebp/src/utils/quant_levels_dec_utils.h diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/random_utils.c b/packages/native/src/vendor/libwebp/src/utils/random_utils.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/random_utils.c rename to packages/native/src/vendor/libwebp/src/utils/random_utils.c diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/random_utils.h b/packages/native/src/vendor/libwebp/src/utils/random_utils.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/random_utils.h rename to packages/native/src/vendor/libwebp/src/utils/random_utils.h diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/rescaler_utils.c b/packages/native/src/vendor/libwebp/src/utils/rescaler_utils.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/rescaler_utils.c rename to packages/native/src/vendor/libwebp/src/utils/rescaler_utils.c diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/rescaler_utils.h b/packages/native/src/vendor/libwebp/src/utils/rescaler_utils.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/rescaler_utils.h rename to packages/native/src/vendor/libwebp/src/utils/rescaler_utils.h diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/thread_utils.c b/packages/native/src/vendor/libwebp/src/utils/thread_utils.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/thread_utils.c rename to packages/native/src/vendor/libwebp/src/utils/thread_utils.c diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/thread_utils.h b/packages/native/src/vendor/libwebp/src/utils/thread_utils.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/thread_utils.h rename to packages/native/src/vendor/libwebp/src/utils/thread_utils.h diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/utils.c b/packages/native/src/vendor/libwebp/src/utils/utils.c similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/utils.c rename to packages/native/src/vendor/libwebp/src/utils/utils.c diff --git a/packages/core/src/zig/vendor/libwebp/src/utils/utils.h b/packages/native/src/vendor/libwebp/src/utils/utils.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/utils/utils.h rename to packages/native/src/vendor/libwebp/src/utils/utils.h diff --git a/packages/core/src/zig/vendor/libwebp/src/webp/decode.h b/packages/native/src/vendor/libwebp/src/webp/decode.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/webp/decode.h rename to packages/native/src/vendor/libwebp/src/webp/decode.h diff --git a/packages/core/src/zig/vendor/libwebp/src/webp/encode.h b/packages/native/src/vendor/libwebp/src/webp/encode.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/webp/encode.h rename to packages/native/src/vendor/libwebp/src/webp/encode.h diff --git a/packages/core/src/zig/vendor/libwebp/src/webp/format_constants.h b/packages/native/src/vendor/libwebp/src/webp/format_constants.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/webp/format_constants.h rename to packages/native/src/vendor/libwebp/src/webp/format_constants.h diff --git a/packages/core/src/zig/vendor/libwebp/src/webp/mux_types.h b/packages/native/src/vendor/libwebp/src/webp/mux_types.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/webp/mux_types.h rename to packages/native/src/vendor/libwebp/src/webp/mux_types.h diff --git a/packages/core/src/zig/vendor/libwebp/src/webp/types.h b/packages/native/src/vendor/libwebp/src/webp/types.h similarity index 100% rename from packages/core/src/zig/vendor/libwebp/src/webp/types.h rename to packages/native/src/vendor/libwebp/src/webp/types.h diff --git a/packages/core/src/zig/vendor/miniaudio/miniaudio.h b/packages/native/src/vendor/miniaudio/miniaudio.h similarity index 100% rename from packages/core/src/zig/vendor/miniaudio/miniaudio.h rename to packages/native/src/vendor/miniaudio/miniaudio.h diff --git a/packages/core/src/zig/vendor/stb/LICENSE b/packages/native/src/vendor/stb/LICENSE similarity index 100% rename from packages/core/src/zig/vendor/stb/LICENSE rename to packages/native/src/vendor/stb/LICENSE diff --git a/packages/core/src/zig/vendor/stb/README.md b/packages/native/src/vendor/stb/README.md similarity index 100% rename from packages/core/src/zig/vendor/stb/README.md rename to packages/native/src/vendor/stb/README.md diff --git a/packages/core/src/zig/vendor/stb/patches/stb_image-strict-jpeg.patch b/packages/native/src/vendor/stb/patches/stb_image-strict-jpeg.patch similarity index 100% rename from packages/core/src/zig/vendor/stb/patches/stb_image-strict-jpeg.patch rename to packages/native/src/vendor/stb/patches/stb_image-strict-jpeg.patch diff --git a/packages/core/src/zig/vendor/stb/patches/stb_image_resize2-alignment.patch b/packages/native/src/vendor/stb/patches/stb_image_resize2-alignment.patch similarity index 100% rename from packages/core/src/zig/vendor/stb/patches/stb_image_resize2-alignment.patch rename to packages/native/src/vendor/stb/patches/stb_image_resize2-alignment.patch diff --git a/packages/core/src/zig/vendor/stb/stb_image.h b/packages/native/src/vendor/stb/stb_image.h similarity index 100% rename from packages/core/src/zig/vendor/stb/stb_image.h rename to packages/native/src/vendor/stb/stb_image.h diff --git a/packages/core/src/zig/vendor/stb/stb_image_resize2.h b/packages/native/src/vendor/stb/stb_image_resize2.h similarity index 100% rename from packages/core/src/zig/vendor/stb/stb_image_resize2.h rename to packages/native/src/vendor/stb/stb_image_resize2.h diff --git a/packages/core/src/zig/vendor/update.sh b/packages/native/src/vendor/update.sh similarity index 100% rename from packages/core/src/zig/vendor/update.sh rename to packages/native/src/vendor/update.sh diff --git a/packages/core/src/zig/vendor/wuffs/LICENSE b/packages/native/src/vendor/wuffs/LICENSE similarity index 100% rename from packages/core/src/zig/vendor/wuffs/LICENSE rename to packages/native/src/vendor/wuffs/LICENSE diff --git a/packages/core/src/zig/vendor/wuffs/README.md b/packages/native/src/vendor/wuffs/README.md similarity index 100% rename from packages/core/src/zig/vendor/wuffs/README.md rename to packages/native/src/vendor/wuffs/README.md diff --git a/packages/core/src/zig/vendor/wuffs/wuffs-v0.3.c b/packages/native/src/vendor/wuffs/wuffs-v0.3.c similarity index 100% rename from packages/core/src/zig/vendor/wuffs/wuffs-v0.3.c rename to packages/native/src/vendor/wuffs/wuffs-v0.3.c diff --git a/packages/core/src/zig/yoga.zig b/packages/native/src/yoga.zig similarity index 100% rename from packages/core/src/zig/yoga.zig rename to packages/native/src/yoga.zig diff --git a/packages/web/src/lib/package-facts.ts b/packages/web/src/lib/package-facts.ts index 572afa184..0758f244a 100644 --- a/packages/web/src/lib/package-facts.ts +++ b/packages/web/src/lib/package-facts.ts @@ -124,9 +124,7 @@ export async function loadFirstPartyPackageFacts(repoRoot = findRepoRoot()): Pro if (manifest.name === "@opentui/core") { packageFacts.platformPackages = matchPlatformPackages(manifest.name, manifest.optionalDependencies, variants) packageFacts.platforms = variants.map(normalizePlatform) - packageFacts.zig = extractZigMetadata( - await readFile(join(packagesRoot, directory, "src/zig/build.zig.zon"), "utf8"), - ) + packageFacts.zig = extractZigMetadata(await readFile(join(packagesRoot, "native", "build.zig.zon"), "utf8")) } return packageFacts diff --git a/scripts/clean.ts b/scripts/clean.ts index d9de6770b..898e9a2c8 100644 --- a/scripts/clean.ts +++ b/scripts/clean.ts @@ -30,7 +30,7 @@ Removes build artifacts from the OpenTUI workspace. Scopes (combine freely; if none given, lib + native + caches are cleaned): --lib Library outputs: packages/*/dist, *.tsbuildinfo, *.tgz, out/, packed/ - --native Native (Zig) artifacts: .zig-cache/, zig-out/, src/zig/lib/, + --native Native (Zig) artifacts under packages/native, and prebuilt @opentui/core-- in node_modules --caches Caches & coverage: .cache/, coverage/, *.lcov --deps node_modules in the root and every package (full reset) @@ -137,14 +137,24 @@ function collectTargets(flags: Flags): CleanTarget[] { } if (wantNative) { - const zigDir = join(packagesDir, "core", "src", "zig") + const zigDir = join(packagesDir, "native") add(join(zigDir, ".zig-cache"), "zig cache") add(join(zigDir, "zig-out"), "zig build output") add(join(zigDir, "lib"), "zig prebuilt libs") + add(join(zigDir, "zig-pkg"), "zig dependencies") + add(join(zigDir, "examples", "hello", ".zig-cache"), "zig cache") + add(join(zigDir, "examples", "hello", "zig-out"), "zig build output") + add(join(zigDir, "examples", "hello", "zig-pkg"), "zig dependencies") + + const legacyZigDir = join(packagesDir, "core", "src", "zig") + add(join(legacyZigDir, ".zig-cache"), "zig cache") + add(join(legacyZigDir, "zig-out"), "zig build output") + add(join(legacyZigDir, "lib"), "zig prebuilt libs") + add(join(legacyZigDir, "zig-pkg"), "zig dependencies") const coreOpentui = join(packagesDir, "core", "node_modules", "@opentui") for (const entry of safeReaddir(coreOpentui)) { - if (entry.isDirectory() && /^core-(darwin|linux|win32)-(x64|arm64)$/.test(entry.name)) { + if (entry.isDirectory() && /^core-(darwin|linux|win32)-(x64|arm64)(?:-musl)?$/.test(entry.name)) { add(join(coreOpentui, entry.name), "prebuilt native package") } }