@opentui/core 0.4.3 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/audio-stream/demuxer.d.ts +19 -0
  2. package/audio-stream/icy/demuxer.d.ts +21 -0
  3. package/audio-stream/icy/metadata.d.ts +1 -0
  4. package/audio.d.ts +201 -1
  5. package/chunk-bun-t2myhmwd.js +16382 -0
  6. package/chunk-bun-t2myhmwd.js.map +62 -0
  7. package/chunk-bun-tkm837n2.js +10047 -0
  8. package/chunk-bun-tkm837n2.js.map +32 -0
  9. package/{index-xt9f071j.js → chunk-node-51kpf0mz.js} +4 -3
  10. package/{index-xt9f071j.js.map → chunk-node-51kpf0mz.js.map} +3 -3
  11. package/{index-d5xqskty.js → chunk-node-q0cwyvm9.js} +576 -325
  12. package/chunk-node-q0cwyvm9.js.map +61 -0
  13. package/index.bun.js +13086 -0
  14. package/index.bun.js.map +39 -0
  15. package/index.d.ts +4 -0
  16. package/{index.js → index.node.js} +1440 -64
  17. package/{index.js.map → index.node.js.map} +41 -6
  18. package/lib/tree-sitter/default-parser-assets.bun.d.ts +1 -0
  19. package/lib/tree-sitter/default-parsers.d.ts +1 -0
  20. package/lib/tree-sitter/parsers-config.d.ts +2 -2
  21. package/lib/tree-sitter/types.d.ts +1 -0
  22. package/lib/tree-sitter/update-assets.js +124 -58
  23. package/lib/tree-sitter/update-assets.js.map +3 -3
  24. package/node-asset-target.d.ts +12 -0
  25. package/node-assets.d.ts +7 -0
  26. package/node-assets.js +261 -0
  27. package/node-assets.js.map +16 -0
  28. package/package.json +23 -13
  29. package/parser.worker.js +3350 -188
  30. package/parser.worker.js.map +18 -12
  31. package/platform/assets.d.ts +5 -0
  32. package/platform/runtime-assets.bun.d.ts +4 -0
  33. package/platform/runtime-assets.node.d.ts +4 -0
  34. package/platform/runtime.d.ts +5 -1
  35. package/renderables/text-table-width.d.ts +1 -0
  36. package/runtime-plugin.js +2 -2
  37. package/runtime-plugin.js.map +1 -1
  38. package/testing/bun-test-node.d.ts +1 -0
  39. package/testing.bun.js +1005 -0
  40. package/testing.bun.js.map +18 -0
  41. package/testing.js +2 -2
  42. package/yoga.bun.js +194 -0
  43. package/yoga.bun.js.map +9 -0
  44. package/yoga.js +1 -1
  45. package/zig-structs.d.ts +47 -0
  46. package/zig.d.ts +38 -2
  47. package/index-d5xqskty.js.map +0 -58
package/node-assets.js ADDED
@@ -0,0 +1,261 @@
1
+ // src/node-assets.ts
2
+ import { statSync } from "node:fs";
3
+ import { dirname, join as join2, resolve } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+
6
+ // src/node-asset-target.ts
7
+ var NATIVE_FILE_NAMES = {
8
+ darwin: "libopentui.dylib",
9
+ linux: "libopentui.so",
10
+ win32: "opentui.dll"
11
+ };
12
+ function getNativeAssetDescriptor(target) {
13
+ if (!Object.hasOwn(NATIVE_FILE_NAMES, target.platform) || target.arch !== "arm64" && target.arch !== "x64") {
14
+ throw new Error(`Unsupported OpenTUI Node asset target: ${String(target.platform)}-${String(target.arch)}`);
15
+ }
16
+ if (target.libc !== undefined && target.libc !== "glibc" && target.libc !== "musl") {
17
+ throw new Error(`Unsupported libc for OpenTUI Node assets: ${String(target.libc)}`);
18
+ }
19
+ if (target.platform !== "linux" && target.libc !== undefined) {
20
+ throw new Error(`OpenTUI Node asset target libc is only supported on Linux, got ${target.platform}`);
21
+ }
22
+ const libcSuffix = target.platform === "linux" && target.libc === "musl" ? "-musl" : "";
23
+ const packageName = `@opentui/core-${target.platform}-${target.arch}${libcSuffix}`;
24
+ const fileName = NATIVE_FILE_NAMES[target.platform];
25
+ return {
26
+ key: `${packageName}/${fileName}`,
27
+ packageName,
28
+ fileName
29
+ };
30
+ }
31
+
32
+ // src/platform/assets.ts
33
+ import { isAbsolute, join } from "node:path";
34
+
35
+ // src/lib/singleton.ts
36
+ var singletonCacheSymbol = Symbol.for("@opentui/core/singleton");
37
+ function singleton(key, factory) {
38
+ const bag = globalThis[singletonCacheSymbol] ??= {};
39
+ if (!(key in bag)) {
40
+ bag[key] = factory();
41
+ }
42
+ return bag[key];
43
+ }
44
+
45
+ // src/lib/env.ts
46
+ var envRegistry = singleton("env-registry", () => ({}));
47
+ function registerEnvVar(config) {
48
+ const existing = envRegistry[config.name];
49
+ if (existing) {
50
+ if (existing.description !== config.description || existing.type !== config.type || existing.default !== config.default) {
51
+ throw new Error(`Environment variable "${config.name}" is already registered with different configuration. ` + `Existing: ${JSON.stringify(existing)}, New: ${JSON.stringify(config)}`);
52
+ }
53
+ return;
54
+ }
55
+ envRegistry[config.name] = config;
56
+ }
57
+ function normalizeBoolean(value) {
58
+ const lowerValue = value.toLowerCase();
59
+ return ["true", "1", "on", "yes"].includes(lowerValue);
60
+ }
61
+ function parseEnvValue(config) {
62
+ const envValue = process.env[config.name];
63
+ if (envValue === undefined && config.default !== undefined) {
64
+ return config.default;
65
+ }
66
+ if (envValue === undefined) {
67
+ throw new Error(`Required environment variable ${config.name} is not set. ${config.description}`);
68
+ }
69
+ switch (config.type) {
70
+ case "boolean":
71
+ return typeof envValue === "boolean" ? envValue : normalizeBoolean(envValue);
72
+ case "number":
73
+ const numValue = Number(envValue);
74
+ if (isNaN(numValue)) {
75
+ throw new Error(`Environment variable ${config.name} must be a valid number, got: ${envValue}`);
76
+ }
77
+ return numValue;
78
+ case "string":
79
+ default:
80
+ return envValue;
81
+ }
82
+ }
83
+
84
+ class EnvStore {
85
+ parsedValues = new Map;
86
+ get(key) {
87
+ if (this.parsedValues.has(key)) {
88
+ return this.parsedValues.get(key);
89
+ }
90
+ if (!(key in envRegistry)) {
91
+ throw new Error(`Environment variable ${key} is not registered.`);
92
+ }
93
+ try {
94
+ const value = parseEnvValue(envRegistry[key]);
95
+ this.parsedValues.set(key, value);
96
+ return value;
97
+ } catch (error) {
98
+ throw new Error(`Failed to parse env var ${key}: ${error instanceof Error ? error.message : String(error)}`);
99
+ }
100
+ }
101
+ has(key) {
102
+ return key in envRegistry;
103
+ }
104
+ clearCache() {
105
+ this.parsedValues.clear();
106
+ }
107
+ }
108
+ var envStore = singleton("env-store", () => new EnvStore);
109
+ var env = new Proxy({}, {
110
+ get(target, prop) {
111
+ if (typeof prop !== "string") {
112
+ return;
113
+ }
114
+ return envStore.get(prop);
115
+ },
116
+ has(target, prop) {
117
+ return envStore.has(prop);
118
+ },
119
+ ownKeys() {
120
+ return Object.keys(envRegistry);
121
+ },
122
+ getOwnPropertyDescriptor(target, prop) {
123
+ if (envStore.has(prop)) {
124
+ return {
125
+ enumerable: true,
126
+ configurable: true,
127
+ get: () => envStore.get(prop)
128
+ };
129
+ }
130
+ return;
131
+ }
132
+ });
133
+
134
+ // src/platform/assets.ts
135
+ registerEnvVar({
136
+ name: "OTUI_ASSET_ROOT",
137
+ description: "Absolute directory containing relocatable OpenTUI runtime assets",
138
+ type: "string",
139
+ default: ""
140
+ });
141
+ function validateAssetKey(key) {
142
+ if (key.length === 0 || isAbsolute(key) || key.includes("\\") || key.split("/").includes("..")) {
143
+ throw new Error(`Invalid OpenTUI asset key: ${JSON.stringify(key)}`);
144
+ }
145
+ }
146
+
147
+ // src/platform/runtime-assets.node.ts
148
+ var CORE_ASSET_PREFIX = "@opentui/core/";
149
+ var PARSER_WORKER_ASSET_KEY = `${CORE_ASSET_PREFIX}parser.worker.js`;
150
+
151
+ // src/lib/tree-sitter/default-parsers.ts
152
+ var defaultParserDescriptors = [
153
+ {
154
+ filetype: "javascript",
155
+ aliases: ["javascriptreact"],
156
+ queries: { highlights: ["assets/javascript/highlights.scm"] },
157
+ wasm: "assets/javascript/tree-sitter-javascript.wasm"
158
+ },
159
+ {
160
+ filetype: "typescript",
161
+ aliases: ["typescriptreact"],
162
+ queries: { highlights: ["assets/typescript/highlights.scm"] },
163
+ wasm: "assets/typescript/tree-sitter-typescript.wasm"
164
+ },
165
+ {
166
+ filetype: "markdown",
167
+ queries: {
168
+ highlights: ["assets/markdown/highlights.scm"],
169
+ injections: ["assets/markdown/injections.scm"]
170
+ },
171
+ wasm: "assets/markdown/tree-sitter-markdown.wasm",
172
+ injectionMapping: {
173
+ nodeTypes: { inline: "markdown_inline", pipe_table_cell: "markdown_inline" },
174
+ infoStringMap: {
175
+ javascript: "javascript",
176
+ js: "javascript",
177
+ jsx: "javascriptreact",
178
+ javascriptreact: "javascriptreact",
179
+ typescript: "typescript",
180
+ ts: "typescript",
181
+ tsx: "typescriptreact",
182
+ typescriptreact: "typescriptreact",
183
+ markdown: "markdown",
184
+ md: "markdown"
185
+ }
186
+ }
187
+ },
188
+ {
189
+ filetype: "markdown_inline",
190
+ queries: { highlights: ["assets/markdown_inline/highlights.scm"] },
191
+ wasm: "assets/markdown_inline/tree-sitter-markdown_inline.wasm"
192
+ },
193
+ {
194
+ filetype: "zig",
195
+ queries: { highlights: ["assets/zig/highlights.scm"] },
196
+ wasm: "assets/zig/tree-sitter-zig.wasm"
197
+ }
198
+ ];
199
+ var defaultParserAssetPaths = [
200
+ ...new Set(defaultParserDescriptors.flatMap((parser) => [
201
+ ...parser.queries.highlights,
202
+ parser.wasm,
203
+ ...parser.queries.injections ?? []
204
+ ]))
205
+ ];
206
+
207
+ // src/node-assets.ts
208
+ var CORE_PREFIX = "@opentui/core/";
209
+ var PARSER_WORKER_KEY = `${CORE_PREFIX}parser.worker.js`;
210
+ var TREE_SITTER_WASM_KEY = "web-tree-sitter/tree-sitter.wasm";
211
+ function getNodeAssets(target) {
212
+ const native = getNativeAssetDescriptor(target);
213
+ const coreRoot = resolveCoreRuntimeRoot();
214
+ const nativeRoot = dirname(resolvePackageEntry(native.packageName));
215
+ const assets = [
216
+ { key: native.key, source: join2(nativeRoot, native.fileName) },
217
+ { key: PARSER_WORKER_KEY, source: join2(coreRoot, "parser.worker.js") },
218
+ ...defaultParserAssetPaths.map((relativePath) => ({
219
+ key: `${CORE_PREFIX}${relativePath}`,
220
+ source: join2(coreRoot, relativePath)
221
+ })),
222
+ { key: TREE_SITTER_WASM_KEY, source: resolvePackageEntry(TREE_SITTER_WASM_KEY) }
223
+ ];
224
+ const keys = new Set;
225
+ for (const asset of assets) {
226
+ validateAssetKey(asset.key);
227
+ if (keys.has(asset.key)) {
228
+ throw new Error(`Duplicate OpenTUI Node asset key: ${JSON.stringify(asset.key)}`);
229
+ }
230
+ keys.add(asset.key);
231
+ let isFile = false;
232
+ try {
233
+ isFile = statSync(asset.source).isFile();
234
+ } catch {}
235
+ if (!isFile) {
236
+ throw new Error(`Missing OpenTUI Node asset ${JSON.stringify(asset.key)} at ${JSON.stringify(asset.source)}`);
237
+ }
238
+ }
239
+ return assets.toSorted((left, right) => left.key < right.key ? -1 : left.key > right.key ? 1 : 0);
240
+ }
241
+ function resolveCoreRuntimeRoot() {
242
+ const moduleDirectory = dirname(fileURLToPath(import.meta.url));
243
+ const candidates = [moduleDirectory, resolve(moduleDirectory, "../dist")];
244
+ return candidates.find((candidate) => statIsFile(join2(candidate, "parser.worker.js"))) ?? moduleDirectory;
245
+ }
246
+ function resolvePackageEntry(specifier) {
247
+ return fileURLToPath(import.meta.resolve(specifier));
248
+ }
249
+ function statIsFile(path) {
250
+ try {
251
+ return statSync(path).isFile();
252
+ } catch {
253
+ return false;
254
+ }
255
+ }
256
+ export {
257
+ getNodeAssets
258
+ };
259
+
260
+ //# debugId=CA3D232D897F070364756E2164756E21
261
+ //# sourceMappingURL=node-assets.js.map
@@ -0,0 +1,16 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/node-assets.ts", "../src/node-asset-target.ts", "../src/platform/assets.ts", "../src/lib/singleton.ts", "../src/lib/env.ts", "../src/platform/runtime-assets.node.ts", "../src/lib/tree-sitter/default-parsers.ts"],
4
+ "sourcesContent": [
5
+ "import { statSync } from \"node:fs\"\nimport { dirname, join, resolve } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\nimport { defaultParserAssetPaths } from \"./lib/tree-sitter/default-parsers.js\"\nimport { getNativeAssetDescriptor, type NodeAssetTarget } from \"./node-asset-target.js\"\nimport { validateAssetKey } from \"./platform/assets.js\"\n\nexport type { NodeAssetTarget }\n\nexport type NodeAsset = {\n readonly key: string\n readonly source: string\n}\n\nconst CORE_PREFIX = \"@opentui/core/\"\nconst PARSER_WORKER_KEY = `${CORE_PREFIX}parser.worker.js`\nconst TREE_SITTER_WASM_KEY = \"web-tree-sitter/tree-sitter.wasm\"\n\nexport function getNodeAssets(target: NodeAssetTarget): readonly NodeAsset[] {\n const native = getNativeAssetDescriptor(target)\n const coreRoot = resolveCoreRuntimeRoot()\n const nativeRoot = dirname(resolvePackageEntry(native.packageName))\n const assets: NodeAsset[] = [\n { key: native.key, source: join(nativeRoot, native.fileName) },\n { key: PARSER_WORKER_KEY, source: join(coreRoot, \"parser.worker.js\") },\n ...defaultParserAssetPaths.map((relativePath) => ({\n key: `${CORE_PREFIX}${relativePath}`,\n source: join(coreRoot, relativePath),\n })),\n { key: TREE_SITTER_WASM_KEY, source: resolvePackageEntry(TREE_SITTER_WASM_KEY) },\n ]\n\n const keys = new Set<string>()\n for (const asset of assets) {\n validateAssetKey(asset.key)\n if (keys.has(asset.key)) {\n throw new Error(`Duplicate OpenTUI Node asset key: ${JSON.stringify(asset.key)}`)\n }\n keys.add(asset.key)\n\n let isFile = false\n try {\n isFile = statSync(asset.source).isFile()\n } catch {}\n if (!isFile) {\n throw new Error(`Missing OpenTUI Node asset ${JSON.stringify(asset.key)} at ${JSON.stringify(asset.source)}`)\n }\n }\n\n return assets.toSorted((left, right) => (left.key < right.key ? -1 : left.key > right.key ? 1 : 0))\n}\n\nfunction resolveCoreRuntimeRoot(): string {\n const moduleDirectory = dirname(fileURLToPath(import.meta.url))\n const candidates = [moduleDirectory, resolve(moduleDirectory, \"../dist\")]\n return candidates.find((candidate) => statIsFile(join(candidate, \"parser.worker.js\"))) ?? moduleDirectory\n}\n\nfunction resolvePackageEntry(specifier: string): string {\n return fileURLToPath(import.meta.resolve(specifier))\n}\n\nfunction statIsFile(path: string): boolean {\n try {\n return statSync(path).isFile()\n } catch {\n return false\n }\n}\n",
6
+ "export type NodeAssetTarget = {\n readonly platform: \"darwin\" | \"linux\" | \"win32\"\n readonly arch: \"arm64\" | \"x64\"\n readonly libc?: \"glibc\" | \"musl\"\n}\n\nexport interface NativeAssetDescriptor {\n readonly key: string\n readonly packageName: string\n readonly fileName: string\n}\n\nconst NATIVE_FILE_NAMES = {\n darwin: \"libopentui.dylib\",\n linux: \"libopentui.so\",\n win32: \"opentui.dll\",\n} as const\n\nexport function getNativeAssetDescriptor(target: NodeAssetTarget): NativeAssetDescriptor {\n if (!Object.hasOwn(NATIVE_FILE_NAMES, target.platform) || (target.arch !== \"arm64\" && target.arch !== \"x64\")) {\n throw new Error(`Unsupported OpenTUI Node asset target: ${String(target.platform)}-${String(target.arch)}`)\n }\n\n if (target.libc !== undefined && target.libc !== \"glibc\" && target.libc !== \"musl\") {\n throw new Error(`Unsupported libc for OpenTUI Node assets: ${String(target.libc)}`)\n }\n if (target.platform !== \"linux\" && target.libc !== undefined) {\n throw new Error(`OpenTUI Node asset target libc is only supported on Linux, got ${target.platform}`)\n }\n\n const libcSuffix = target.platform === \"linux\" && target.libc === \"musl\" ? \"-musl\" : \"\"\n const packageName = `@opentui/core-${target.platform}-${target.arch}${libcSuffix}`\n const fileName = NATIVE_FILE_NAMES[target.platform]\n return {\n key: `${packageName}/${fileName}`,\n packageName,\n fileName,\n }\n}\n\nexport function getCurrentNodeAssetTarget(): NodeAssetTarget {\n const libc = process.env.OPENTUI_LIBC\n if (process.platform === \"linux\" && libc !== undefined && libc !== \"\" && libc !== \"glibc\" && libc !== \"musl\") {\n throw new Error(`On Linux, OPENTUI_LIBC must be unset, empty, \"glibc\", or \"musl\", got ${JSON.stringify(libc)}`)\n }\n\n return {\n platform: process.platform as NodeAssetTarget[\"platform\"],\n arch: process.arch as NodeAssetTarget[\"arch\"],\n ...(process.platform === \"linux\" && libc === \"musl\" ? { libc } : {}),\n }\n}\n",
7
+ "import { statSync } from \"node:fs\"\nimport { isAbsolute, join } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\nimport { registerEnvVar } from \"../lib/env.js\"\n\ntype AssetFallback = string | URL | (() => string | URL)\n\nregisterEnvVar({\n name: \"OTUI_ASSET_ROOT\",\n description: \"Absolute directory containing relocatable OpenTUI runtime assets\",\n type: \"string\",\n default: \"\",\n})\n\nexport function resolveAssetPath(key: string, fallback?: AssetFallback): string {\n validateAssetKey(key)\n\n const configuredPath = resolveAssetRootPath(key)\n if (configuredPath !== undefined) {\n return configuredPath\n }\n\n if (fallback === undefined) {\n throw new Error(`OpenTUI asset ${JSON.stringify(key)} has no package-relative fallback`)\n }\n\n const value = typeof fallback === \"function\" ? fallback() : fallback\n return value instanceof URL ? fileURLToPath(value) : value\n}\n\nexport function resolveAssetRootPath(key: string): string | undefined {\n validateAssetKey(key)\n\n const root = process.env.OTUI_ASSET_ROOT\n if (!root) {\n return undefined\n }\n\n if (!isAbsolute(root)) {\n throw new Error(`OTUI_ASSET_ROOT must be an absolute directory, got ${JSON.stringify(root)}`)\n }\n\n const assetPath = join(root, key)\n let isFile = false\n try {\n isFile = statSync(assetPath).isFile()\n } catch {}\n if (!isFile) {\n throw new Error(`Missing OpenTUI asset ${JSON.stringify(key)} at ${JSON.stringify(assetPath)}`)\n }\n return assetPath\n}\n\nexport function validateAssetKey(key: string): void {\n if (key.length === 0 || isAbsolute(key) || key.includes(\"\\\\\") || key.split(\"/\").includes(\"..\")) {\n throw new Error(`Invalid OpenTUI asset key: ${JSON.stringify(key)}`)\n }\n}\n",
8
+ "const singletonCacheSymbol = Symbol.for(\"@opentui/core/singleton\")\n\n/**\n * Ensures a value is initialized once per process,\n * persists across Bun hot reloads, and is type-safe.\n */\nexport function singleton<T>(key: string, factory: () => T): T {\n // @ts-expect-error this symbol is only used in this file and is not part of the public API\n const bag = (globalThis[singletonCacheSymbol] ??= {})\n if (!(key in bag)) {\n bag[key] = factory()\n }\n return bag[key] as T\n}\n\nexport function getSingleton<T>(key: string): T | undefined {\n // @ts-expect-error this symbol is only used in this file and is not part of the public API\n const bag = globalThis[singletonCacheSymbol]\n return bag?.[key] as T | undefined\n}\n\nexport function destroySingleton(key: string): void {\n // @ts-expect-error this symbol is only used in this file and is not part of the public API\n const bag = globalThis[singletonCacheSymbol]\n if (bag && key in bag) {\n delete bag[key]\n }\n}\n\nexport function hasSingleton(key: string): boolean {\n // @ts-expect-error this symbol is only used in this file and is not part of the public API\n const bag = globalThis[singletonCacheSymbol]\n return bag && key in bag\n}\n",
9
+ "import { singleton } from \"./singleton.js\"\n\n/**\n * Environment variable registry\n *\n * Usage:\n * ```ts\n * import { registerEnvVar, env } from \"./lib/env.ts\";\n *\n * // Register environment variables\n * registerEnvVar({\n * name: \"DEBUG\",\n * description: \"Enable debug logging\",\n * type: \"boolean\",\n * default: false\n * });\n *\n * registerEnvVar({\n * name: \"PORT\",\n * description: \"Server port number\",\n * type: \"number\",\n * default: 3000\n * });\n *\n * // Access environment variables\n * if (env.DEBUG) {\n * console.log(\"Debug mode enabled\");\n * }\n *\n * const port = env.PORT; // number\n * ```\n */\n\nexport interface EnvVarConfig {\n name: string\n description: string\n default?: string | boolean | number\n type?: \"string\" | \"boolean\" | \"number\"\n}\n\nexport const envRegistry: Record<string, EnvVarConfig> = singleton(\"env-registry\", () => ({}))\n\nexport function registerEnvVar(config: EnvVarConfig): void {\n const existing = envRegistry[config.name]\n if (existing) {\n if (\n existing.description !== config.description ||\n existing.type !== config.type ||\n existing.default !== config.default\n ) {\n throw new Error(\n `Environment variable \"${config.name}\" is already registered with different configuration. ` +\n `Existing: ${JSON.stringify(existing)}, New: ${JSON.stringify(config)}`,\n )\n }\n return\n }\n envRegistry[config.name] = config\n}\n\nfunction normalizeBoolean(value: string): boolean {\n const lowerValue = value.toLowerCase()\n return [\"true\", \"1\", \"on\", \"yes\"].includes(lowerValue)\n}\n\nfunction parseEnvValue(config: EnvVarConfig): string | boolean | number {\n const envValue = process.env[config.name]\n\n if (envValue === undefined && config.default !== undefined) {\n return config.default\n }\n\n if (envValue === undefined) {\n throw new Error(`Required environment variable ${config.name} is not set. ${config.description}`)\n }\n\n switch (config.type) {\n case \"boolean\":\n return typeof envValue === \"boolean\" ? envValue : normalizeBoolean(envValue)\n case \"number\":\n const numValue = Number(envValue)\n if (isNaN(numValue)) {\n throw new Error(`Environment variable ${config.name} must be a valid number, got: ${envValue}`)\n }\n return numValue\n case \"string\":\n default:\n return envValue\n }\n}\n\nclass EnvStore {\n private parsedValues: Map<string, string | boolean | number> = new Map()\n\n get(key: string): any {\n if (this.parsedValues.has(key)) {\n return this.parsedValues.get(key)!\n }\n\n if (!(key in envRegistry)) {\n throw new Error(`Environment variable ${key} is not registered.`)\n }\n\n try {\n const value = parseEnvValue(envRegistry[key])\n this.parsedValues.set(key, value)\n return value\n } catch (error) {\n throw new Error(`Failed to parse env var ${key}: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n\n has(key: string): boolean {\n return key in envRegistry\n }\n\n clearCache(): void {\n this.parsedValues.clear()\n }\n}\n\nconst envStore = singleton(\"env-store\", () => new EnvStore())\n\nexport function clearEnvCache(): void {\n envStore.clearCache()\n}\n\nexport function generateEnvMarkdown(): string {\n const configs = Object.values(envRegistry)\n\n if (configs.length === 0) {\n return \"# Environment Variables\\n\\nNo environment variables registered.\\n\"\n }\n\n let markdown = \"# Environment Variables\\n\\n\"\n\n for (const config of configs) {\n markdown += `## ${config.name}\\n\\n`\n markdown += `${config.description}\\n\\n`\n\n markdown += `**Type:** \\`${config.type || \"string\"}\\` \\n`\n\n if (config.default !== undefined) {\n const defaultValue = typeof config.default === \"string\" ? `\"${config.default}\"` : String(config.default)\n markdown += `**Default:** \\`${defaultValue}\\`\\n`\n } else {\n markdown += \"**Default:** *Required*\\n\"\n }\n\n markdown += \"\\n\"\n }\n\n return markdown\n}\n\nexport function generateEnvColored(): string {\n const configs = Object.values(envRegistry)\n\n if (configs.length === 0) {\n return \"\\x1b[1;36mEnvironment Variables\\x1b[0m\\n\\nNo environment variables registered.\\n\"\n }\n\n let output = \"\\x1b[1;36mEnvironment Variables\\x1b[0m\\n\\n\"\n\n for (const config of configs) {\n output += `\\x1b[1;33m${config.name}\\x1b[0m\\n`\n output += `${config.description}\\n`\n output += `\\x1b[32mType:\\x1b[0m \\x1b[36m${config.type || \"string\"}\\x1b[0m\\n`\n\n if (config.default !== undefined) {\n const defaultValue = typeof config.default === \"string\" ? `\"${config.default}\"` : String(config.default)\n output += `\\x1b[32mDefault:\\x1b[0m \\x1b[35m${defaultValue}\\x1b[0m\\n`\n } else {\n output += `\\x1b[32mDefault:\\x1b[0m \\x1b[31mRequired\\x1b[0m\\n`\n }\n\n output += \"\\n\"\n }\n\n return output\n}\n\nexport const env = new Proxy({} as Record<string, any>, {\n get(target, prop: string) {\n if (typeof prop !== \"string\") {\n return undefined\n }\n return envStore.get(prop)\n },\n\n has(target, prop: string) {\n return envStore.has(prop)\n },\n\n ownKeys() {\n return Object.keys(envRegistry)\n },\n\n getOwnPropertyDescriptor(target, prop: string) {\n if (envStore.has(prop)) {\n return {\n enumerable: true,\n configurable: true,\n get: () => envStore.get(prop),\n }\n }\n return undefined\n },\n})\n",
10
+ "import { getCurrentNodeAssetTarget, getNativeAssetDescriptor } from \"../node-asset-target.js\"\nimport { resolveAssetPath, resolveAssetRootPath } from \"./assets.js\"\n\ninterface NativePackageModule {\n readonly default: string\n}\n\nconst CORE_ASSET_PREFIX = \"@opentui/core/\"\nconst PARSER_WORKER_ASSET_KEY = `${CORE_ASSET_PREFIX}parser.worker.js`\nconst TREE_SITTER_WASM_ASSET_KEY = \"web-tree-sitter/tree-sitter.wasm\"\n\nexport function resolveDefaultParserAsset(relativePath: string, fallbackPath: URL): Promise<string> {\n return Promise.resolve(resolveAssetPath(`${CORE_ASSET_PREFIX}${relativePath}`, fallbackPath))\n}\n\nexport function resolveDefaultTreeSitterWorkerPath(fallbackPath: URL): string {\n return resolveAssetPath(PARSER_WORKER_ASSET_KEY, fallbackPath)\n}\n\nexport function resolveTreeSitterWasm(): Promise<string> {\n return Promise.resolve(\n resolveAssetPath(TREE_SITTER_WASM_ASSET_KEY, () => new URL(import.meta.resolve(TREE_SITTER_WASM_ASSET_KEY))),\n )\n}\n\nexport async function resolveNativeLibraryPath(): Promise<string> {\n const asset = getNativeAssetDescriptor(getCurrentNodeAssetTarget())\n const configuredPath = resolveAssetRootPath(asset.key)\n if (configuredPath !== undefined) {\n return configuredPath\n }\n\n const specifier: string = asset.packageName\n return ((await import(specifier)) as NativePackageModule).default\n}\n",
11
+ "// This file is generated by assets/update.ts - DO NOT EDIT MANUALLY\n// Run 'bun assets/update.ts' to regenerate this file\n\nimport { resolveDefaultParserAsset } from \"#opentui/runtime-assets\"\n\nimport type { FiletypeParserOptions, InjectionMapping } from \"./types.js\"\n\ninterface DefaultParserDescriptor {\n readonly filetype: string\n readonly aliases?: readonly string[]\n readonly queries: {\n readonly highlights: readonly string[]\n readonly injections?: readonly string[]\n }\n readonly wasm: string\n readonly injectionMapping?: InjectionMapping\n}\n\nconst defaultParserDescriptors: readonly DefaultParserDescriptor[] = [\n {\n \"filetype\": \"javascript\",\n \"aliases\": [\"javascriptreact\"],\n \"queries\": { \"highlights\": [\"assets/javascript/highlights.scm\"] },\n \"wasm\": \"assets/javascript/tree-sitter-javascript.wasm\"\n },\n {\n \"filetype\": \"typescript\",\n \"aliases\": [\"typescriptreact\"],\n \"queries\": { \"highlights\": [\"assets/typescript/highlights.scm\"] },\n \"wasm\": \"assets/typescript/tree-sitter-typescript.wasm\"\n },\n {\n \"filetype\": \"markdown\",\n \"queries\": {\n \"highlights\": [\"assets/markdown/highlights.scm\"],\n \"injections\": [\"assets/markdown/injections.scm\"]\n },\n \"wasm\": \"assets/markdown/tree-sitter-markdown.wasm\",\n \"injectionMapping\": {\n \"nodeTypes\": { \"inline\": \"markdown_inline\", \"pipe_table_cell\": \"markdown_inline\" },\n \"infoStringMap\": {\n \"javascript\": \"javascript\",\n \"js\": \"javascript\",\n \"jsx\": \"javascriptreact\",\n \"javascriptreact\": \"javascriptreact\",\n \"typescript\": \"typescript\",\n \"ts\": \"typescript\",\n \"tsx\": \"typescriptreact\",\n \"typescriptreact\": \"typescriptreact\",\n \"markdown\": \"markdown\",\n \"md\": \"markdown\"\n }\n }\n },\n {\n \"filetype\": \"markdown_inline\",\n \"queries\": { \"highlights\": [\"assets/markdown_inline/highlights.scm\"] },\n \"wasm\": \"assets/markdown_inline/tree-sitter-markdown_inline.wasm\"\n },\n {\n \"filetype\": \"zig\",\n \"queries\": { \"highlights\": [\"assets/zig/highlights.scm\"] },\n \"wasm\": \"assets/zig/tree-sitter-zig.wasm\"\n }\n]\n\nexport const defaultParserAssetPaths: readonly string[] = [\n ...new Set(\n defaultParserDescriptors.flatMap((parser) => [\n ...parser.queries.highlights,\n parser.wasm,\n ...(parser.queries.injections ?? []),\n ]),\n ),\n]\n\nlet cachedParsers: Promise<FiletypeParserOptions[]> | undefined\n\nexport function getParsers(): Promise<FiletypeParserOptions[]> {\n cachedParsers ??= Promise.all(defaultParserDescriptors.map(resolveDefaultParser))\n return cachedParsers\n}\n\nasync function resolveDefaultParser(parser: DefaultParserDescriptor): Promise<FiletypeParserOptions> {\n const queries: FiletypeParserOptions[\"queries\"] = {\n highlights: await Promise.all(parser.queries.highlights.map(resolveParserAsset)),\n }\n if (parser.queries.injections) {\n queries.injections = await Promise.all(parser.queries.injections.map(resolveParserAsset))\n }\n\n return {\n filetype: parser.filetype,\n ...(parser.aliases ? { aliases: [...parser.aliases] } : {}),\n queries,\n wasm: await resolveParserAsset(parser.wasm),\n ...(parser.injectionMapping ? { injectionMapping: parser.injectionMapping } : {}),\n }\n}\n\nfunction resolveParserAsset(relativePath: string): Promise<string> {\n return resolveDefaultParserAsset(relativePath, new URL(`./${relativePath}`, import.meta.url))\n}\n"
12
+ ],
13
+ "mappings": "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",
14
+ "debugId": "CA3D232D897F070364756E2164756E21",
15
+ "names": []
16
+ }
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@opentui/core",
3
- "module": "index.js",
4
- "main": "index.js",
3
+ "module": "index.node.js",
4
+ "main": "index.node.js",
5
5
  "types": "index.d.ts",
6
6
  "type": "module",
7
- "version": "0.4.3",
7
+ "version": "0.4.5",
8
8
  "description": "OpenTUI is a TypeScript library on a native Zig core for building terminal user interfaces (TUIs)",
9
9
  "license": "MIT",
10
10
  "repository": {
@@ -14,10 +14,13 @@
14
14
  },
15
15
  "exports": {
16
16
  ".": {
17
- "import": "./index.js",
18
- "types": "./index.d.ts"
17
+ "types": "./index.d.ts",
18
+ "bun": "./index.bun.js",
19
+ "node": "./index.node.js",
20
+ "import": "./index.node.js"
19
21
  },
20
22
  "./testing": {
23
+ "bun": "./testing.bun.js",
21
24
  "import": "./testing.js",
22
25
  "types": "./testing.d.ts"
23
26
  },
@@ -40,6 +43,7 @@
40
43
  "default": "./runtime-plugin-support-configure.node.js"
41
44
  },
42
45
  "./yoga": {
46
+ "bun": "./yoga.bun.js",
43
47
  "types": "./yoga.d.ts",
44
48
  "import": "./yoga.js"
45
49
  },
@@ -49,9 +53,15 @@
49
53
  "import": "./lib/tree-sitter/update-assets.js"
50
54
  },
51
55
  "./parser.worker": {
56
+ "bun": "./parser.worker.js",
57
+ "node": "./parser.worker.js",
52
58
  "import": "./parser.worker.js",
53
59
  "require": "./parser.worker.js",
54
60
  "types": "./lib/tree-sitter/parser.worker.d.ts"
61
+ },
62
+ "./node-assets": {
63
+ "types": "./node-assets.d.ts",
64
+ "import": "./node-assets.js"
55
65
  }
56
66
  },
57
67
  "dependencies": {
@@ -65,13 +75,13 @@
65
75
  "web-tree-sitter": "0.25.10"
66
76
  },
67
77
  "optionalDependencies": {
68
- "@opentui/core-darwin-x64": "0.4.3",
69
- "@opentui/core-darwin-arm64": "0.4.3",
70
- "@opentui/core-linux-x64": "0.4.3",
71
- "@opentui/core-linux-arm64": "0.4.3",
72
- "@opentui/core-win32-x64": "0.4.3",
73
- "@opentui/core-win32-arm64": "0.4.3",
74
- "@opentui/core-linux-x64-musl": "0.4.3",
75
- "@opentui/core-linux-arm64-musl": "0.4.3"
78
+ "@opentui/core-darwin-x64": "0.4.5",
79
+ "@opentui/core-darwin-arm64": "0.4.5",
80
+ "@opentui/core-linux-x64": "0.4.5",
81
+ "@opentui/core-linux-arm64": "0.4.5",
82
+ "@opentui/core-win32-x64": "0.4.5",
83
+ "@opentui/core-win32-arm64": "0.4.5",
84
+ "@opentui/core-linux-x64-musl": "0.4.5",
85
+ "@opentui/core-linux-arm64-musl": "0.4.5"
76
86
  }
77
87
  }