@opentui/core 0.3.3 → 0.4.0

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 (42) hide show
  1. package/NativeSpanFeed.d.ts +4 -0
  2. package/{index-mn090kzf.js → index-59t85rvq.js} +3153 -2503
  3. package/index-59t85rvq.js.map +84 -0
  4. package/index.js +11256 -77
  5. package/index.js.map +29 -3
  6. package/lib/selection.d.ts +2 -1
  7. package/lib/singleton.d.ts +1 -0
  8. package/lib/tree-sitter/client.d.ts +17 -1
  9. package/lib/tree-sitter/index.d.ts +1 -0
  10. package/lib/tree-sitter/types.d.ts +104 -1
  11. package/lib/tree-sitter/update-assets.js +8 -6
  12. package/lib/tree-sitter/update-assets.js.map +3 -3
  13. package/package.json +27 -34
  14. package/parser.worker.js +452 -78
  15. package/parser.worker.js.map +8 -7
  16. package/platform/ffi.d.ts +6 -3
  17. package/platform/test.d.ts +12 -0
  18. package/platform/worker.d.ts +26 -4
  19. package/platform/worker.node-test.d.ts +1 -0
  20. package/renderables/Code.d.ts +4 -0
  21. package/renderables/Markdown.d.ts +1 -0
  22. package/runtime-plugin-support-configure.js +36 -18
  23. package/runtime-plugin-support-configure.js.map +1 -9
  24. package/runtime-plugin-support-configure.node.js +15 -0
  25. package/runtime-plugin-support.js +4 -19
  26. package/runtime-plugin-support.js.map +1 -10
  27. package/runtime-plugin-support.node.js +15 -0
  28. package/runtime-plugin.js +473 -16
  29. package/runtime-plugin.js.map +1 -9
  30. package/runtime-plugin.node.js +15 -0
  31. package/testing/bun-test-node.d.ts +87 -0
  32. package/testing/mock-tree-sitter-client.d.ts +4 -0
  33. package/testing.js +15 -9
  34. package/testing.js.map +3 -3
  35. package/zig.d.ts +1 -1
  36. package/index-jh82sd41.js +0 -44
  37. package/index-jh82sd41.js.map +0 -10
  38. package/index-mbck6rbg.js +0 -421
  39. package/index-mbck6rbg.js.map +0 -10
  40. package/index-mn090kzf.js.map +0 -84
  41. package/index-qndc8vq8.js +0 -11670
  42. package/index-qndc8vq8.js.map +0 -35
@@ -1,4 +1,5 @@
1
- import { Renderable, type ViewportBounds } from "../index.js";
1
+ import { Renderable } from "../Renderable.js";
2
+ import type { ViewportBounds } from "../types.js";
2
3
  import { fonts } from "./ascii.font.js";
3
4
  export declare class Selection {
4
5
  private _anchor;
@@ -3,5 +3,6 @@
3
3
  * persists across Bun hot reloads, and is type-safe.
4
4
  */
5
5
  export declare function singleton<T>(key: string, factory: () => T): T;
6
+ export declare function getSingleton<T>(key: string): T | undefined;
6
7
  export declare function destroySingleton(key: string): void;
7
8
  export declare function hasSingleton(key: string): boolean;
@@ -3,6 +3,9 @@ import type { TreeSitterClientOptions, TreeSitterClientEvents, BufferState, File
3
3
  declare global {
4
4
  const OTUI_TREE_SITTER_WORKER_PATH: string;
5
5
  }
6
+ interface TreeSitterClientInternalOptions {
7
+ autoStartWorker?: boolean;
8
+ }
6
9
  export declare function addDefaultParsers(parsers: FiletypeParserOptions[]): void;
7
10
  export declare class TreeSitterClient extends EventEmitter<TreeSitterClientEvents> {
8
11
  private initialized;
@@ -15,18 +18,30 @@ export declare class TreeSitterClient extends EventEmitter<TreeSitterClientEvent
15
18
  private editQueues;
16
19
  private debouncer;
17
20
  private options;
18
- constructor(options: TreeSitterClientOptions);
21
+ private destroyCallbacks;
22
+ private lifecycleGeneration;
23
+ private rejectInitialization;
24
+ private destroyPromise;
25
+ private workerTerminationFailed;
26
+ constructor(options: TreeSitterClientOptions, internalOptions?: TreeSitterClientInternalOptions);
27
+ onDestroy(callback: () => void): () => void;
19
28
  private emitError;
20
29
  private emitWarning;
21
30
  private startWorker;
31
+ private sendWorkerMessage;
32
+ private rejectPendingRequests;
33
+ private rejectActiveInitialization;
34
+ private handleWorkerFailure;
22
35
  private resolveWorkerPath;
23
36
  private stopWorker;
24
37
  private handleReset;
25
38
  initialize(): Promise<void>;
39
+ private assertCurrentInitialization;
26
40
  private initializeClient;
27
41
  private registerDefaultParsers;
28
42
  private resolvePath;
29
43
  addFiletypeParser(filetypeParser: FiletypeParserOptions): void;
44
+ private resolveFiletypeParser;
30
45
  getPerformance(): Promise<PerformanceStats>;
31
46
  highlightOnce(content: string, filetype: string): Promise<{
32
47
  highlights?: SimpleHighlight[];
@@ -47,3 +62,4 @@ export declare class TreeSitterClient extends EventEmitter<TreeSitterClientEvent
47
62
  setDataPath(dataPath: string): Promise<void>;
48
63
  clearCache(): Promise<void>;
49
64
  }
65
+ export {};
@@ -4,3 +4,4 @@ export * from "../tree-sitter-styled-text.js";
4
4
  export * from "./types.js";
5
5
  export * from "./resolve-ft.js";
6
6
  export declare function getTreeSitterClient(): TreeSitterClient;
7
+ export declare function destroyTreeSitterClient(): Promise<void>;
@@ -44,11 +44,114 @@ export interface BufferState {
44
44
  export interface ParsedBuffer extends BufferState {
45
45
  hasParser: true;
46
46
  }
47
+ export type TreeSitterWorkerLogType = "log" | "error" | "warn";
48
+ export type TreeSitterWorkerRequest = {
49
+ type: "INIT";
50
+ dataPath: string;
51
+ } | {
52
+ type: "ADD_FILETYPE_PARSER";
53
+ filetypeParser: FiletypeParserOptions;
54
+ } | {
55
+ type: "PRELOAD_PARSER";
56
+ filetype: string;
57
+ messageId: string;
58
+ } | {
59
+ type: "INITIALIZE_PARSER";
60
+ bufferId: number;
61
+ version: number;
62
+ content: string;
63
+ filetype: string;
64
+ messageId: string;
65
+ } | {
66
+ type: "HANDLE_EDITS";
67
+ bufferId: number;
68
+ version: number;
69
+ content: string;
70
+ edits: Edit[];
71
+ } | {
72
+ type: "GET_PERFORMANCE";
73
+ messageId: string;
74
+ } | {
75
+ type: "RESET_BUFFER";
76
+ bufferId: number;
77
+ version: number;
78
+ content: string;
79
+ edits: Edit[];
80
+ } | {
81
+ type: "DISPOSE_BUFFER";
82
+ bufferId: number;
83
+ } | {
84
+ type: "ONESHOT_HIGHLIGHT";
85
+ content: string;
86
+ filetype: string;
87
+ messageId: string;
88
+ } | {
89
+ type: "UPDATE_DATA_PATH";
90
+ dataPath: string;
91
+ messageId: string;
92
+ } | {
93
+ type: "CLEAR_CACHE";
94
+ messageId: string;
95
+ };
96
+ export type TreeSitterWorkerResponse = {
97
+ type: "INIT_RESPONSE";
98
+ error?: string;
99
+ } | {
100
+ type: "PARSER_INIT_RESPONSE";
101
+ bufferId: number;
102
+ messageId: string;
103
+ hasParser: boolean;
104
+ warning?: string;
105
+ error?: string;
106
+ } | {
107
+ type: "HIGHLIGHT_RESPONSE";
108
+ bufferId: number;
109
+ version: number;
110
+ highlights: HighlightResponse[];
111
+ } | {
112
+ type: "PRELOAD_PARSER_RESPONSE";
113
+ messageId: string;
114
+ hasParser: boolean;
115
+ } | {
116
+ type: "BUFFER_DISPOSED";
117
+ bufferId: number;
118
+ } | {
119
+ type: "PERFORMANCE_RESPONSE";
120
+ performance: PerformanceStats;
121
+ messageId: string;
122
+ } | {
123
+ type: "ONESHOT_HIGHLIGHT_RESPONSE";
124
+ messageId: string;
125
+ hasParser: boolean;
126
+ highlights?: SimpleHighlight[];
127
+ warning?: string;
128
+ error?: string;
129
+ } | {
130
+ type: "UPDATE_DATA_PATH_RESPONSE";
131
+ messageId: string;
132
+ error?: string;
133
+ } | {
134
+ type: "CLEAR_CACHE_RESPONSE";
135
+ messageId: string;
136
+ error?: string;
137
+ } | {
138
+ type: "WARNING";
139
+ bufferId?: number;
140
+ warning: string;
141
+ } | {
142
+ type: "ERROR";
143
+ bufferId?: number;
144
+ error: string;
145
+ } | {
146
+ type: "WORKER_LOG";
147
+ logType: TreeSitterWorkerLogType;
148
+ data: unknown[];
149
+ };
47
150
  export interface TreeSitterClientEvents {
48
151
  "highlights:response": [bufferId: number, version: number, highlights: HighlightResponse[]];
49
152
  "buffer:initialized": [bufferId: number, hasParser: boolean];
50
153
  "buffer:disposed": [bufferId: number];
51
- "worker:log": [logType: "log" | "error", message: string];
154
+ "worker:log": [logType: TreeSitterWorkerLogType, message: string];
52
155
  error: [error: string, bufferId?: number];
53
156
  warning: [warning: string, bufferId?: number];
54
157
  }
@@ -116,12 +116,14 @@ class DownloadUtils {
116
116
  // src/lib/tree-sitter/assets/update.ts
117
117
  import { parseArgs } from "util";
118
118
  import { readdir } from "fs/promises";
119
- var __dirname = "/Users/runner/work/opentui/opentui/packages/core/src/lib/tree-sitter/assets";
119
+ import { fileURLToPath } from "url";
120
+ var __filename2 = fileURLToPath(import.meta.url);
121
+ var __dirname2 = path2.dirname(__filename2);
120
122
  function getDefaultOptions() {
121
123
  return {
122
- configPath: path2.resolve(__dirname, "../parsers-config"),
123
- assetsDir: path2.resolve(__dirname),
124
- outputPath: path2.resolve(__dirname, "../default-parsers.ts")
124
+ configPath: path2.resolve(__dirname2, "../parsers-config"),
125
+ assetsDir: path2.resolve(__dirname2),
126
+ outputPath: path2.resolve(__dirname2, "../default-parsers.ts")
125
127
  };
126
128
  }
127
129
  async function loadConfig(configPath) {
@@ -316,7 +318,7 @@ async function main(options) {
316
318
  function parseCLIArgs() {
317
319
  try {
318
320
  const { values } = parseArgs({
319
- args: Bun.argv.slice(2),
321
+ args: process.argv.slice(2),
320
322
  options: {
321
323
  config: { type: "string" },
322
324
  assets: { type: "string" },
@@ -373,5 +375,5 @@ export {
373
375
  runUpdateAssetsCli
374
376
  };
375
377
 
376
- //# debugId=3D069CA846BE4B5364756E2164756E21
378
+ //# debugId=1A2D716CBBE1018664756E2164756E21
377
379
  //# sourceMappingURL=update-assets.js.map
@@ -2,11 +2,11 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/tree-sitter/assets/update.ts", "../../../src/lib/tree-sitter/download-utils.ts", "../../../src/lib/tree-sitter/update-assets.ts"],
4
4
  "sourcesContent": [
5
- "#!/usr/bin/env bun\n\nimport { readFile, writeFile, mkdir } from \"fs/promises\"\nimport * as path from \"path\"\nimport { DownloadUtils } from \"../download-utils.js\"\nimport { parseArgs } from \"util\"\nimport type { FiletypeParserOptions } from \"../types.js\"\nimport { readdir } from \"fs/promises\"\n\ninterface ParsersConfig {\n parsers: FiletypeParserOptions[]\n}\n\ninterface GeneratedParser {\n filetype: string\n aliases?: string[]\n languagePath: string\n highlightsPath: string\n injectionsPath?: string\n injectionMapping?: any\n}\n\nexport interface UpdateOptions {\n /** Path to parsers-config.json */\n configPath: string\n /** Directory where .wasm and .scm files will be downloaded */\n assetsDir: string\n /** Path where the generated TypeScript file will be written */\n outputPath: string\n}\n\nfunction getDefaultOptions(): UpdateOptions {\n return {\n configPath: path.resolve(__dirname, \"../parsers-config\"),\n assetsDir: path.resolve(__dirname),\n outputPath: path.resolve(__dirname, \"../default-parsers.ts\"),\n }\n}\n\nasync function loadConfig(configPath: string): Promise<ParsersConfig> {\n let ext = path.extname(configPath)\n let resolvedConfigPath = configPath\n\n if (ext === \"\") {\n const files = await readdir(path.dirname(configPath))\n const file = files.find(\n (file) =>\n file.startsWith(path.basename(configPath)) &&\n (file.endsWith(\".json\") || file.endsWith(\".ts\") || file.endsWith(\".js\")),\n )\n if (!file) {\n throw new Error(`No config file found for ${configPath}`)\n }\n resolvedConfigPath = path.join(path.dirname(configPath), file)\n ext = path.extname(resolvedConfigPath)\n }\n\n if (ext === \".json\") {\n const configContent = await readFile(resolvedConfigPath, \"utf-8\")\n return JSON.parse(configContent)\n } else if (ext === \".ts\" || ext === \".js\") {\n const { default: configContent } = await import(resolvedConfigPath)\n return configContent\n }\n throw new Error(`Unsupported config file extension: ${ext}`)\n}\n\nasync function downloadLanguage(\n filetype: string,\n languageUrl: string,\n assetsDir: string,\n outputPath: string,\n): Promise<string> {\n const languageDir = path.join(assetsDir, filetype)\n const languageFilename = path.basename(languageUrl)\n const languagePath = path.join(languageDir, languageFilename)\n\n const result = await DownloadUtils.downloadToPath(languageUrl, languagePath)\n\n if (result.error) {\n throw new Error(`Failed to download language for ${filetype}: ${result.error}`)\n }\n\n return \"./\" + path.relative(path.dirname(outputPath), languagePath)\n}\n\nasync function downloadAndCombineQueries(\n filetype: string,\n queryUrls: string[],\n assetsDir: string,\n outputPath: string,\n queryType: \"highlights\" | \"injections\",\n configPath: string,\n): Promise<string> {\n const queriesDir = path.join(assetsDir, filetype)\n const queryPath = path.join(queriesDir, `${queryType}.scm`)\n\n const queryContents: string[] = []\n\n for (let i = 0; i < queryUrls.length; i++) {\n const queryUrl = queryUrls[i]\n\n if (queryUrl.startsWith(\"./\")) {\n console.log(` Using local query ${i + 1}/${queryUrls.length}: ${queryUrl}`)\n\n try {\n const localPath = path.resolve(path.dirname(configPath), queryUrl)\n const content = await readFile(localPath, \"utf-8\")\n\n if (content.trim()) {\n queryContents.push(content)\n console.log(` ✓ Loaded ${content.split(\"\\n\").length} lines from local file`)\n }\n } catch (error) {\n console.warn(`Failed to read local query from ${queryUrl}: ${error}`)\n continue\n }\n } else {\n console.log(` Downloading query ${i + 1}/${queryUrls.length}: ${queryUrl}`)\n\n try {\n const response = await fetch(queryUrl)\n if (!response.ok) {\n console.warn(`Failed to download query from ${queryUrl}: ${response.statusText}`)\n continue\n }\n\n const content = await response.text()\n if (content.trim()) {\n queryContents.push(`; Query from: ${queryUrl}\\n${content}`)\n console.log(` ✓ Downloaded ${content.split(\"\\n\").length} lines`)\n }\n } catch (error) {\n console.warn(`Failed to download query from ${queryUrl}: ${error}`)\n continue\n }\n }\n }\n\n const combinedContent = queryContents.join(\"\\n\\n\")\n await writeFile(queryPath, combinedContent, \"utf-8\")\n\n console.log(` Combined ${queryContents.length} queries into ${queryPath}`)\n\n return \"./\" + path.relative(path.dirname(outputPath), queryPath)\n}\n\nasync function generateDefaultParsersFile(parsers: GeneratedParser[], outputPath: string): Promise<void> {\n const assetPaths = parsers\n .map((parser) => {\n const safeFiletype = parser.filetype.replace(/[^a-zA-Z0-9]/g, \"_\")\n const lines = [\n `const ${safeFiletype}_highlights = await resolveBundledFilePath(`,\n ` () => import(\"${parser.highlightsPath}\" as string, { with: { type: \"file\" } }),`,\n ` \"${parser.highlightsPath}\",`,\n ` import.meta.url,`,\n `)`,\n `const ${safeFiletype}_language = await resolveBundledFilePath(`,\n ` () => import(\"${parser.languagePath}\" as string, { with: { type: \"file\" } }),`,\n ` \"${parser.languagePath}\",`,\n ` import.meta.url,`,\n `)`,\n ]\n\n if (parser.injectionsPath) {\n lines.push(\n `const ${safeFiletype}_injections = await resolveBundledFilePath(`,\n ` () => import(\"${parser.injectionsPath}\" as string, { with: { type: \"file\" } }),`,\n ` \"${parser.injectionsPath}\",`,\n ` import.meta.url,`,\n `)`,\n )\n }\n\n return lines.join(\"\\n\")\n })\n .join(\"\\n\")\n\n const parserDefinitions = parsers\n .map((parser) => {\n const safeFiletype = parser.filetype.replace(/[^a-zA-Z0-9]/g, \"_\")\n const queriesLines = [` highlights: [${safeFiletype}_highlights],`]\n\n if (parser.injectionsPath) {\n queriesLines.push(` injections: [${safeFiletype}_injections],`)\n }\n\n const injectionMappingLine = parser.injectionMapping\n ? ` injectionMapping: ${JSON.stringify(parser.injectionMapping, null, 10)},`\n : \"\"\n const aliasesLine = parser.aliases?.length ? ` aliases: ${JSON.stringify(parser.aliases)},` : \"\"\n\n return ` {\n filetype: \"${parser.filetype}\",\n${aliasesLine ? aliasesLine + \"\\n\" : \"\"} queries: {\n${queriesLines.join(\"\\n\")}\n },\n wasm: ${safeFiletype}_language,${injectionMappingLine ? \"\\n\" + injectionMappingLine : \"\"}\n }`\n })\n .join(\",\\n\")\n\n const fileContent = `// This file is generated by assets/update.ts - DO NOT EDIT MANUALLY\n// Run 'bun assets/update.ts' to regenerate this file\n// Last generated: ${new Date().toISOString()}\n\nimport type { FiletypeParserOptions } from \"./types.js\"\nimport { resolveBundledFilePath } from \"../../platform/runtime.js\"\n\n// Cached parsers to avoid re-resolving paths on every call\nlet _cachedParsers: Promise<FiletypeParserOptions[]> | undefined\n\nexport function getParsers(): Promise<FiletypeParserOptions[]> {\n if (!_cachedParsers) {\n _cachedParsers = loadParsers()\n }\n return _cachedParsers\n}\n\nasync function loadParsers(): Promise<FiletypeParserOptions[]> {\n${assetPaths}\n\n return [\n${parserDefinitions},\n ]\n}\n`\n\n await mkdir(path.dirname(outputPath), { recursive: true })\n await writeFile(outputPath, fileContent, \"utf-8\")\n console.log(`Generated ${path.basename(outputPath)} with ${parsers.length} parsers`)\n}\n\nasync function main(options?: Partial<UpdateOptions>): Promise<void> {\n const opts = { ...getDefaultOptions(), ...options }\n\n try {\n console.log(\"Loading parsers configuration...\")\n console.log(` Config: ${opts.configPath}`)\n console.log(` Assets Dir: ${opts.assetsDir}`)\n console.log(` Output: ${opts.outputPath}`)\n\n const config = await loadConfig(opts.configPath)\n\n console.log(`Found ${config.parsers.length} parsers to process`)\n\n const generatedParsers: GeneratedParser[] = []\n\n for (const parser of config.parsers) {\n console.log(`Processing ${parser.filetype}...`)\n\n console.log(` Downloading language...`)\n const languagePath = await downloadLanguage(parser.filetype, parser.wasm, opts.assetsDir, opts.outputPath)\n\n console.log(` Downloading ${parser.queries.highlights.length} highlight queries...`)\n const highlightsPath = await downloadAndCombineQueries(\n parser.filetype,\n parser.queries.highlights,\n opts.assetsDir,\n opts.outputPath,\n \"highlights\",\n opts.configPath,\n )\n\n let injectionsPath: string | undefined\n if (parser.queries.injections && parser.queries.injections.length > 0) {\n console.log(` Downloading ${parser.queries.injections.length} injection queries...`)\n injectionsPath = await downloadAndCombineQueries(\n parser.filetype,\n parser.queries.injections,\n opts.assetsDir,\n opts.outputPath,\n \"injections\",\n opts.configPath,\n )\n }\n\n generatedParsers.push({\n filetype: parser.filetype,\n aliases: parser.aliases,\n languagePath,\n highlightsPath,\n injectionsPath,\n injectionMapping: parser.injectionMapping,\n })\n\n console.log(` ✓ Completed ${parser.filetype}`)\n }\n\n console.log(\"Generating output file...\")\n await generateDefaultParsersFile(generatedParsers, opts.outputPath)\n\n console.log(\"✅ Update completed successfully!\")\n } catch (error) {\n console.error(\"❌ Update failed:\", error)\n process.exit(1)\n }\n}\n\nfunction parseCLIArgs(): Partial<UpdateOptions> | null {\n try {\n const { values } = parseArgs({\n args: Bun.argv.slice(2),\n options: {\n config: { type: \"string\" },\n assets: { type: \"string\" },\n output: { type: \"string\" },\n help: { type: \"boolean\" },\n },\n strict: true,\n })\n\n if (values.help) {\n const command = path.basename(Bun.argv[1] ?? \"update-assets.js\")\n\n console.log(`Usage: bun ${command} [options]\n\nOptions:\n --config <path> Path to parsers-config.json\n --assets <path> Directory where .wasm and .scm files will be downloaded\n --output <path> Path where the generated TypeScript file will be written\n --help Show this help message\n\nExamples:\n # Use default paths (for OpenTUI core development)\n bun ${command}\n\n # Use custom paths (for application integration)\n bun ${command} --config ./my-parsers.json --assets ./src/parsers --output ./src/parsers.ts\n`)\n process.exit(0)\n }\n\n const options: Partial<UpdateOptions> = {}\n if (values.config) options.configPath = path.resolve(values.config)\n if (values.assets) options.assetsDir = path.resolve(values.assets)\n if (values.output) options.outputPath = path.resolve(values.output)\n\n return Object.keys(options).length > 0 ? options : null\n } catch (error) {\n console.error(`Error parsing arguments: ${error}`)\n console.log(\"Run with --help for usage information\")\n process.exit(1)\n }\n}\n\nexport function runUpdateAssetsCli(): Promise<void> {\n const cliOptions = parseCLIArgs()\n return main(cliOptions || undefined)\n}\n\nif (import.meta.main) {\n await runUpdateAssetsCli()\n}\n\nexport { main as updateAssets }\n",
5
+ "#!/usr/bin/env bun\n\nimport { readFile, writeFile, mkdir } from \"fs/promises\"\nimport * as path from \"path\"\nimport { DownloadUtils } from \"../download-utils.js\"\nimport { parseArgs } from \"util\"\nimport type { FiletypeParserOptions } from \"../types.js\"\nimport { readdir } from \"fs/promises\"\nimport { fileURLToPath } from \"node:url\"\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = path.dirname(__filename)\n\ninterface ParsersConfig {\n parsers: FiletypeParserOptions[]\n}\n\ninterface GeneratedParser {\n filetype: string\n aliases?: string[]\n languagePath: string\n highlightsPath: string\n injectionsPath?: string\n injectionMapping?: any\n}\n\nexport interface UpdateOptions {\n /** Path to parsers-config.json */\n configPath: string\n /** Directory where .wasm and .scm files will be downloaded */\n assetsDir: string\n /** Path where the generated TypeScript file will be written */\n outputPath: string\n}\n\nfunction getDefaultOptions(): UpdateOptions {\n return {\n configPath: path.resolve(__dirname, \"../parsers-config\"),\n assetsDir: path.resolve(__dirname),\n outputPath: path.resolve(__dirname, \"../default-parsers.ts\"),\n }\n}\n\nasync function loadConfig(configPath: string): Promise<ParsersConfig> {\n let ext = path.extname(configPath)\n let resolvedConfigPath = configPath\n\n if (ext === \"\") {\n const files = await readdir(path.dirname(configPath))\n const file = files.find(\n (file) =>\n file.startsWith(path.basename(configPath)) &&\n (file.endsWith(\".json\") || file.endsWith(\".ts\") || file.endsWith(\".js\")),\n )\n if (!file) {\n throw new Error(`No config file found for ${configPath}`)\n }\n resolvedConfigPath = path.join(path.dirname(configPath), file)\n ext = path.extname(resolvedConfigPath)\n }\n\n if (ext === \".json\") {\n const configContent = await readFile(resolvedConfigPath, \"utf-8\")\n return JSON.parse(configContent)\n } else if (ext === \".ts\" || ext === \".js\") {\n const { default: configContent } = await import(resolvedConfigPath)\n return configContent\n }\n throw new Error(`Unsupported config file extension: ${ext}`)\n}\n\nasync function downloadLanguage(\n filetype: string,\n languageUrl: string,\n assetsDir: string,\n outputPath: string,\n): Promise<string> {\n const languageDir = path.join(assetsDir, filetype)\n const languageFilename = path.basename(languageUrl)\n const languagePath = path.join(languageDir, languageFilename)\n\n const result = await DownloadUtils.downloadToPath(languageUrl, languagePath)\n\n if (result.error) {\n throw new Error(`Failed to download language for ${filetype}: ${result.error}`)\n }\n\n return \"./\" + path.relative(path.dirname(outputPath), languagePath)\n}\n\nasync function downloadAndCombineQueries(\n filetype: string,\n queryUrls: string[],\n assetsDir: string,\n outputPath: string,\n queryType: \"highlights\" | \"injections\",\n configPath: string,\n): Promise<string> {\n const queriesDir = path.join(assetsDir, filetype)\n const queryPath = path.join(queriesDir, `${queryType}.scm`)\n\n const queryContents: string[] = []\n\n for (let i = 0; i < queryUrls.length; i++) {\n const queryUrl = queryUrls[i]\n\n if (queryUrl.startsWith(\"./\")) {\n console.log(` Using local query ${i + 1}/${queryUrls.length}: ${queryUrl}`)\n\n try {\n const localPath = path.resolve(path.dirname(configPath), queryUrl)\n const content = await readFile(localPath, \"utf-8\")\n\n if (content.trim()) {\n queryContents.push(content)\n console.log(` ✓ Loaded ${content.split(\"\\n\").length} lines from local file`)\n }\n } catch (error) {\n console.warn(`Failed to read local query from ${queryUrl}: ${error}`)\n continue\n }\n } else {\n console.log(` Downloading query ${i + 1}/${queryUrls.length}: ${queryUrl}`)\n\n try {\n const response = await fetch(queryUrl)\n if (!response.ok) {\n console.warn(`Failed to download query from ${queryUrl}: ${response.statusText}`)\n continue\n }\n\n const content = await response.text()\n if (content.trim()) {\n queryContents.push(`; Query from: ${queryUrl}\\n${content}`)\n console.log(` ✓ Downloaded ${content.split(\"\\n\").length} lines`)\n }\n } catch (error) {\n console.warn(`Failed to download query from ${queryUrl}: ${error}`)\n continue\n }\n }\n }\n\n const combinedContent = queryContents.join(\"\\n\\n\")\n await writeFile(queryPath, combinedContent, \"utf-8\")\n\n console.log(` Combined ${queryContents.length} queries into ${queryPath}`)\n\n return \"./\" + path.relative(path.dirname(outputPath), queryPath)\n}\n\nasync function generateDefaultParsersFile(parsers: GeneratedParser[], outputPath: string): Promise<void> {\n const assetPaths = parsers\n .map((parser) => {\n const safeFiletype = parser.filetype.replace(/[^a-zA-Z0-9]/g, \"_\")\n const lines = [\n `const ${safeFiletype}_highlights = await resolveBundledFilePath(`,\n ` () => import(\"${parser.highlightsPath}\" as string, { with: { type: \"file\" } }),`,\n ` \"${parser.highlightsPath}\",`,\n ` import.meta.url,`,\n `)`,\n `const ${safeFiletype}_language = await resolveBundledFilePath(`,\n ` () => import(\"${parser.languagePath}\" as string, { with: { type: \"file\" } }),`,\n ` \"${parser.languagePath}\",`,\n ` import.meta.url,`,\n `)`,\n ]\n\n if (parser.injectionsPath) {\n lines.push(\n `const ${safeFiletype}_injections = await resolveBundledFilePath(`,\n ` () => import(\"${parser.injectionsPath}\" as string, { with: { type: \"file\" } }),`,\n ` \"${parser.injectionsPath}\",`,\n ` import.meta.url,`,\n `)`,\n )\n }\n\n return lines.join(\"\\n\")\n })\n .join(\"\\n\")\n\n const parserDefinitions = parsers\n .map((parser) => {\n const safeFiletype = parser.filetype.replace(/[^a-zA-Z0-9]/g, \"_\")\n const queriesLines = [` highlights: [${safeFiletype}_highlights],`]\n\n if (parser.injectionsPath) {\n queriesLines.push(` injections: [${safeFiletype}_injections],`)\n }\n\n const injectionMappingLine = parser.injectionMapping\n ? ` injectionMapping: ${JSON.stringify(parser.injectionMapping, null, 10)},`\n : \"\"\n const aliasesLine = parser.aliases?.length ? ` aliases: ${JSON.stringify(parser.aliases)},` : \"\"\n\n return ` {\n filetype: \"${parser.filetype}\",\n${aliasesLine ? aliasesLine + \"\\n\" : \"\"} queries: {\n${queriesLines.join(\"\\n\")}\n },\n wasm: ${safeFiletype}_language,${injectionMappingLine ? \"\\n\" + injectionMappingLine : \"\"}\n }`\n })\n .join(\",\\n\")\n\n const fileContent = `// This file is generated by assets/update.ts - DO NOT EDIT MANUALLY\n// Run 'bun assets/update.ts' to regenerate this file\n// Last generated: ${new Date().toISOString()}\n\nimport type { FiletypeParserOptions } from \"./types.js\"\nimport { resolveBundledFilePath } from \"../../platform/runtime.js\"\n\n// Cached parsers to avoid re-resolving paths on every call\nlet _cachedParsers: Promise<FiletypeParserOptions[]> | undefined\n\nexport function getParsers(): Promise<FiletypeParserOptions[]> {\n if (!_cachedParsers) {\n _cachedParsers = loadParsers()\n }\n return _cachedParsers\n}\n\nasync function loadParsers(): Promise<FiletypeParserOptions[]> {\n${assetPaths}\n\n return [\n${parserDefinitions},\n ]\n}\n`\n\n await mkdir(path.dirname(outputPath), { recursive: true })\n await writeFile(outputPath, fileContent, \"utf-8\")\n console.log(`Generated ${path.basename(outputPath)} with ${parsers.length} parsers`)\n}\n\nasync function main(options?: Partial<UpdateOptions>): Promise<void> {\n const opts = { ...getDefaultOptions(), ...options }\n\n try {\n console.log(\"Loading parsers configuration...\")\n console.log(` Config: ${opts.configPath}`)\n console.log(` Assets Dir: ${opts.assetsDir}`)\n console.log(` Output: ${opts.outputPath}`)\n\n const config = await loadConfig(opts.configPath)\n\n console.log(`Found ${config.parsers.length} parsers to process`)\n\n const generatedParsers: GeneratedParser[] = []\n\n for (const parser of config.parsers) {\n console.log(`Processing ${parser.filetype}...`)\n\n console.log(` Downloading language...`)\n const languagePath = await downloadLanguage(parser.filetype, parser.wasm, opts.assetsDir, opts.outputPath)\n\n console.log(` Downloading ${parser.queries.highlights.length} highlight queries...`)\n const highlightsPath = await downloadAndCombineQueries(\n parser.filetype,\n parser.queries.highlights,\n opts.assetsDir,\n opts.outputPath,\n \"highlights\",\n opts.configPath,\n )\n\n let injectionsPath: string | undefined\n if (parser.queries.injections && parser.queries.injections.length > 0) {\n console.log(` Downloading ${parser.queries.injections.length} injection queries...`)\n injectionsPath = await downloadAndCombineQueries(\n parser.filetype,\n parser.queries.injections,\n opts.assetsDir,\n opts.outputPath,\n \"injections\",\n opts.configPath,\n )\n }\n\n generatedParsers.push({\n filetype: parser.filetype,\n aliases: parser.aliases,\n languagePath,\n highlightsPath,\n injectionsPath,\n injectionMapping: parser.injectionMapping,\n })\n\n console.log(` ✓ Completed ${parser.filetype}`)\n }\n\n console.log(\"Generating output file...\")\n await generateDefaultParsersFile(generatedParsers, opts.outputPath)\n\n console.log(\"✅ Update completed successfully!\")\n } catch (error) {\n console.error(\"❌ Update failed:\", error)\n process.exit(1)\n }\n}\n\nfunction parseCLIArgs(): Partial<UpdateOptions> | null {\n try {\n const { values } = parseArgs({\n args: process.argv.slice(2),\n options: {\n config: { type: \"string\" },\n assets: { type: \"string\" },\n output: { type: \"string\" },\n help: { type: \"boolean\" },\n },\n strict: true,\n })\n\n if (values.help) {\n const command = path.basename(Bun.argv[1] ?? \"update-assets.js\")\n\n console.log(`Usage: bun ${command} [options]\n\nOptions:\n --config <path> Path to parsers-config.json\n --assets <path> Directory where .wasm and .scm files will be downloaded\n --output <path> Path where the generated TypeScript file will be written\n --help Show this help message\n\nExamples:\n # Use default paths (for OpenTUI core development)\n bun ${command}\n\n # Use custom paths (for application integration)\n bun ${command} --config ./my-parsers.json --assets ./src/parsers --output ./src/parsers.ts\n`)\n process.exit(0)\n }\n\n const options: Partial<UpdateOptions> = {}\n if (values.config) options.configPath = path.resolve(values.config)\n if (values.assets) options.assetsDir = path.resolve(values.assets)\n if (values.output) options.outputPath = path.resolve(values.output)\n\n return Object.keys(options).length > 0 ? options : null\n } catch (error) {\n console.error(`Error parsing arguments: ${error}`)\n console.log(\"Run with --help for usage information\")\n process.exit(1)\n }\n}\n\nexport function runUpdateAssetsCli(): Promise<void> {\n const cliOptions = parseCLIArgs()\n return main(cliOptions || undefined)\n}\n\nif (import.meta.main) {\n await runUpdateAssetsCli()\n}\n\nexport { main as updateAssets }\n",
6
6
  "import { mkdir, readFile, writeFile } from \"fs/promises\"\nimport * as path from \"path\"\n\nexport interface DownloadResult {\n content?: Buffer\n filePath?: string\n error?: string\n}\n\nexport class DownloadUtils {\n private static hashUrl(url: string): string {\n let hash = 0\n for (let i = 0; i < url.length; i++) {\n const char = url.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash\n }\n return Math.abs(hash).toString(16)\n }\n\n /**\n * Download a file from URL or load from local path, with caching support\n */\n static async downloadOrLoad(\n source: string,\n cacheDir: string,\n cacheSubdir: string,\n fileExtension: string,\n useHashForCache: boolean = true,\n filetype?: string,\n ): Promise<DownloadResult> {\n const isUrl = source.startsWith(\"http://\") || source.startsWith(\"https://\")\n\n if (isUrl) {\n let cacheFileName: string\n if (useHashForCache) {\n const hash = this.hashUrl(source)\n cacheFileName = filetype ? `${filetype}-${hash}${fileExtension}` : `${hash}${fileExtension}`\n } else {\n cacheFileName = path.basename(source)\n }\n const cacheFile = path.join(cacheDir, cacheSubdir, cacheFileName)\n\n // Ensure cache directory exists\n await mkdir(path.dirname(cacheFile), { recursive: true })\n\n try {\n const cachedContent = await readFile(cacheFile)\n if (cachedContent.byteLength > 0) {\n console.log(`Loaded from cache: ${cacheFile} (${source})`)\n return { content: cachedContent, filePath: cacheFile }\n }\n } catch (error) {\n // Cache miss, continue to fetch\n }\n\n try {\n console.log(`Downloading from URL: ${source}`)\n const response = await fetch(source)\n if (!response.ok) {\n return { error: `Failed to fetch from ${source}: ${response.statusText}` }\n }\n const content = Buffer.from(await response.arrayBuffer())\n\n try {\n await writeFile(cacheFile, Buffer.from(content))\n console.log(`Cached: ${source}`)\n } catch (cacheError) {\n console.warn(`Failed to cache: ${cacheError}`)\n }\n\n return { content, filePath: cacheFile }\n } catch (error) {\n return { error: `Error downloading from ${source}: ${error}` }\n }\n } else {\n try {\n console.log(`Loading from local path: ${source}`)\n const content = await readFile(source)\n return { content, filePath: source }\n } catch (error) {\n return { error: `Error loading from local path ${source}: ${error}` }\n }\n }\n }\n\n /**\n * Download and save a file to a specific target path\n */\n static async downloadToPath(source: string, targetPath: string): Promise<DownloadResult> {\n const isUrl = source.startsWith(\"http://\") || source.startsWith(\"https://\")\n\n await mkdir(path.dirname(targetPath), { recursive: true })\n\n if (isUrl) {\n try {\n console.log(`Downloading from URL: ${source}`)\n const response = await fetch(source)\n if (!response.ok) {\n return { error: `Failed to fetch from ${source}: ${response.statusText}` }\n }\n const content = Buffer.from(await response.arrayBuffer())\n\n await writeFile(targetPath, Buffer.from(content))\n console.log(`Downloaded: ${source} -> ${targetPath}`)\n\n return { content, filePath: targetPath }\n } catch (error) {\n return { error: `Error downloading from ${source}: ${error}` }\n }\n } else {\n try {\n console.log(`Copying from local path: ${source}`)\n const content = await readFile(source)\n await writeFile(targetPath, Buffer.from(content))\n return { content, filePath: targetPath }\n } catch (error) {\n return { error: `Error copying from local path ${source}: ${error}` }\n }\n }\n }\n\n /**\n * Fetch multiple highlight queries and concatenate them\n */\n static async fetchHighlightQueries(sources: string[], cacheDir: string, filetype: string): Promise<string> {\n const queryPromises = sources.map((source) => this.fetchHighlightQuery(source, cacheDir, filetype))\n const queryResults = await Promise.all(queryPromises)\n\n const validQueries = queryResults.filter((query) => query.trim().length > 0)\n return validQueries.join(\"\\n\")\n }\n\n private static async fetchHighlightQuery(source: string, cacheDir: string, filetype: string): Promise<string> {\n const result = await this.downloadOrLoad(source, cacheDir, \"queries\", \".scm\", true, filetype)\n\n if (result.error) {\n console.error(`Error fetching highlight query from ${source}:`, result.error)\n return \"\"\n }\n\n if (result.content) {\n return new TextDecoder().decode(result.content)\n }\n\n return \"\"\n }\n}\n",
7
7
  "#!/usr/bin/env bun\n\nimport { runUpdateAssetsCli } from \"./assets/update.js\"\n\nexport { runUpdateAssetsCli, updateAssets } from \"./assets/update.js\"\nexport type { UpdateOptions } from \"./assets/update.js\"\n\nif (import.meta.main) {\n await runUpdateAssetsCli()\n}\n"
8
8
  ],
9
- "mappings": "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",
10
- "debugId": "3D069CA846BE4B5364756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "1A2D716CBBE1018664756E2164756E21",
11
11
  "names": []
12
12
  }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "type": "module",
7
- "version": "0.3.3",
7
+ "version": "0.4.0",
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": {
@@ -15,67 +15,60 @@
15
15
  "exports": {
16
16
  ".": {
17
17
  "import": "./index.js",
18
- "require": "./index.js",
19
18
  "types": "./index.d.ts"
20
19
  },
21
20
  "./testing": {
22
21
  "import": "./testing.js",
23
- "require": "./testing.js",
24
22
  "types": "./testing.d.ts"
25
23
  },
26
24
  "./runtime-plugin": {
27
- "import": "./runtime-plugin.js",
28
- "require": "./runtime-plugin.js",
29
- "types": "./runtime-plugin.d.ts"
25
+ "types": "./runtime-plugin.d.ts",
26
+ "bun": "./runtime-plugin.js",
27
+ "node": "./runtime-plugin.node.js",
28
+ "default": "./runtime-plugin.node.js"
30
29
  },
31
30
  "./runtime-plugin-support": {
32
- "import": "./runtime-plugin-support.js",
33
- "require": "./runtime-plugin-support.js",
34
- "types": "./runtime-plugin-support.d.ts"
31
+ "types": "./runtime-plugin-support.d.ts",
32
+ "bun": "./runtime-plugin-support.js",
33
+ "node": "./runtime-plugin-support.node.js",
34
+ "default": "./runtime-plugin-support.node.js"
35
35
  },
36
36
  "./runtime-plugin-support/configure": {
37
- "import": "./runtime-plugin-support-configure.js",
38
- "require": "./runtime-plugin-support-configure.js",
39
- "types": "./runtime-plugin-support-configure.d.ts"
37
+ "types": "./runtime-plugin-support-configure.d.ts",
38
+ "bun": "./runtime-plugin-support-configure.js",
39
+ "node": "./runtime-plugin-support-configure.node.js",
40
+ "default": "./runtime-plugin-support-configure.node.js"
40
41
  },
41
42
  "./tree-sitter/update-assets": {
42
- "import": "./lib/tree-sitter/update-assets.js",
43
- "require": "./lib/tree-sitter/update-assets.js",
44
- "types": "./lib/tree-sitter/update-assets.d.ts"
43
+ "types": "./lib/tree-sitter/update-assets.d.ts",
44
+ "bun": "./lib/tree-sitter/update-assets.js",
45
+ "import": "./lib/tree-sitter/update-assets.js"
45
46
  },
46
47
  "./parser.worker": {
47
- "import": "./lib/tree-sitter/parser.worker.js",
48
- "require": "./lib/tree-sitter/parser.worker.js",
48
+ "import": "./parser.worker.js",
49
+ "require": "./parser.worker.js",
49
50
  "types": "./lib/tree-sitter/parser.worker.d.ts"
50
51
  }
51
52
  },
52
53
  "dependencies": {
53
- "bun-ffi-structs": "0.2.2",
54
+ "bun-ffi-structs": "0.2.3",
54
55
  "diff": "9.0.0",
55
56
  "marked": "17.0.1",
56
57
  "string-width": "7.2.0",
57
58
  "strip-ansi": "7.1.2",
58
59
  "yoga-layout": "3.2.1"
59
60
  },
60
- "devDependencies": {
61
- "@opentui/keymap": "workspace:*",
62
- "@types/bun": "latest",
63
- "@types/node": "^24.0.0",
64
- "commander": "^13.1.0",
65
- "typescript": "^5",
66
- "web-tree-sitter": "0.25.10"
67
- },
68
61
  "peerDependencies": {
69
62
  "web-tree-sitter": "0.25.10"
70
63
  },
71
64
  "optionalDependencies": {
72
- "@opentui/core-darwin-x64": "0.3.3",
73
- "@opentui/core-darwin-arm64": "0.3.3",
74
- "@opentui/core-linux-x64": "0.3.3",
75
- "@opentui/core-linux-arm64": "0.3.3",
76
- "@opentui/core-win32-x64": "0.3.3",
77
- "@opentui/core-win32-arm64": "0.3.3",
78
- "@opentui/core-linux-x64-musl": "0.3.3",
79
- "@opentui/core-linux-arm64-musl": "0.3.3"
65
+ "@opentui/core-darwin-x64": "0.4.0",
66
+ "@opentui/core-darwin-arm64": "0.4.0",
67
+ "@opentui/core-linux-x64": "0.4.0",
68
+ "@opentui/core-linux-arm64": "0.4.0",
69
+ "@opentui/core-win32-x64": "0.4.0",
70
+ "@opentui/core-win32-arm64": "0.4.0",
71
+ "@opentui/core-linux-x64-musl": "0.4.0",
72
+ "@opentui/core-linux-arm64-musl": "0.4.0"
80
73
  }
81
74
  }