objcjs-types 0.2.1 → 0.3.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 (194) hide show
  1. package/bin/objcjs-types.ts +31 -0
  2. package/dist/AVFoundation/functions.d.ts +21 -0
  3. package/dist/AVFoundation/functions.js +32 -0
  4. package/dist/AVFoundation/index.d.ts +1 -0
  5. package/dist/AVFoundation/index.js +1 -0
  6. package/dist/Accessibility/functions.d.ts +16 -0
  7. package/dist/Accessibility/functions.js +35 -0
  8. package/dist/Accessibility/index.d.ts +1 -0
  9. package/dist/Accessibility/index.js +1 -0
  10. package/dist/AddressBook/functions.d.ts +98 -0
  11. package/dist/AddressBook/functions.js +290 -0
  12. package/dist/AddressBook/index.d.ts +1 -0
  13. package/dist/AddressBook/index.js +1 -0
  14. package/dist/AppKit/functions.d.ts +112 -0
  15. package/dist/AppKit/functions.js +272 -0
  16. package/dist/AppKit/index.d.ts +1 -0
  17. package/dist/AppKit/index.js +1 -0
  18. package/dist/AudioToolbox/functions.d.ts +377 -0
  19. package/dist/AudioToolbox/functions.js +1124 -0
  20. package/dist/AudioToolbox/index.d.ts +1 -0
  21. package/dist/AudioToolbox/index.js +1 -0
  22. package/dist/AuthenticationServices/functions.d.ts +2 -0
  23. package/dist/AuthenticationServices/functions.js +5 -0
  24. package/dist/AuthenticationServices/index.d.ts +1 -0
  25. package/dist/AuthenticationServices/index.js +1 -0
  26. package/dist/BrowserEngineCore/functions.d.ts +3 -0
  27. package/dist/BrowserEngineCore/functions.js +11 -0
  28. package/dist/BrowserEngineCore/index.d.ts +1 -0
  29. package/dist/BrowserEngineCore/index.js +1 -0
  30. package/dist/CoreAudio/functions.d.ts +60 -0
  31. package/dist/CoreAudio/functions.js +173 -0
  32. package/dist/CoreAudio/index.d.ts +1 -0
  33. package/dist/CoreAudio/index.js +1 -0
  34. package/dist/CoreMIDI/functions.d.ts +96 -0
  35. package/dist/CoreMIDI/functions.js +287 -0
  36. package/dist/CoreMIDI/index.d.ts +1 -0
  37. package/dist/CoreMIDI/index.js +1 -0
  38. package/dist/CoreML/functions.d.ts +2 -0
  39. package/dist/CoreML/functions.js +5 -0
  40. package/dist/CoreML/index.d.ts +1 -0
  41. package/dist/CoreML/index.js +1 -0
  42. package/dist/CoreMediaIO/functions.d.ts +38 -0
  43. package/dist/CoreMediaIO/functions.js +107 -0
  44. package/dist/CoreMediaIO/index.d.ts +1 -0
  45. package/dist/CoreMediaIO/index.js +1 -0
  46. package/dist/CoreText/functions.d.ts +209 -0
  47. package/dist/CoreText/functions.js +611 -0
  48. package/dist/CoreText/index.d.ts +1 -0
  49. package/dist/CoreText/index.js +1 -0
  50. package/dist/CoreWLAN/functions.d.ts +23 -0
  51. package/dist/CoreWLAN/functions.js +56 -0
  52. package/dist/CoreWLAN/index.d.ts +1 -0
  53. package/dist/CoreWLAN/index.js +1 -0
  54. package/dist/DeviceDiscoveryExtension/functions.d.ts +11 -0
  55. package/dist/DeviceDiscoveryExtension/functions.js +17 -0
  56. package/dist/DeviceDiscoveryExtension/index.d.ts +1 -0
  57. package/dist/DeviceDiscoveryExtension/index.js +1 -0
  58. package/dist/DiscRecording/functions.d.ts +97 -0
  59. package/dist/DiscRecording/functions.js +290 -0
  60. package/dist/DiscRecording/index.d.ts +1 -0
  61. package/dist/DiscRecording/index.js +1 -0
  62. package/dist/DiscRecordingUI/functions.d.ts +13 -0
  63. package/dist/DiscRecordingUI/functions.js +38 -0
  64. package/dist/DiscRecordingUI/index.d.ts +1 -0
  65. package/dist/DiscRecordingUI/index.js +1 -0
  66. package/dist/ExceptionHandling/functions.d.ts +1 -0
  67. package/dist/ExceptionHandling/functions.js +5 -0
  68. package/dist/ExceptionHandling/index.d.ts +1 -0
  69. package/dist/ExceptionHandling/index.js +1 -0
  70. package/dist/FSKit/functions.d.ts +4 -0
  71. package/dist/FSKit/functions.js +11 -0
  72. package/dist/FSKit/index.d.ts +1 -0
  73. package/dist/FSKit/index.js +1 -0
  74. package/dist/Foundation/functions.d.ts +145 -0
  75. package/dist/Foundation/functions.js +386 -0
  76. package/dist/Foundation/index.d.ts +1 -0
  77. package/dist/Foundation/index.js +1 -0
  78. package/dist/GLKit/functions.d.ts +51 -0
  79. package/dist/GLKit/functions.js +146 -0
  80. package/dist/GLKit/index.d.ts +1 -0
  81. package/dist/GLKit/index.js +1 -0
  82. package/dist/GameController/functions.d.ts +18 -0
  83. package/dist/GameController/functions.js +44 -0
  84. package/dist/GameController/index.d.ts +1 -0
  85. package/dist/GameController/index.js +1 -0
  86. package/dist/HealthKit/functions.d.ts +19 -0
  87. package/dist/HealthKit/functions.js +35 -0
  88. package/dist/HealthKit/index.d.ts +1 -0
  89. package/dist/HealthKit/index.js +1 -0
  90. package/dist/IOSurface/functions.d.ts +53 -0
  91. package/dist/IOSurface/functions.js +155 -0
  92. package/dist/IOSurface/index.d.ts +1 -0
  93. package/dist/IOSurface/index.js +1 -0
  94. package/dist/IOUSBHost/functions.d.ts +44 -0
  95. package/dist/IOUSBHost/functions.js +131 -0
  96. package/dist/IOUSBHost/index.d.ts +1 -0
  97. package/dist/IOUSBHost/index.js +1 -0
  98. package/dist/InstantMessage/functions.d.ts +1 -0
  99. package/dist/InstantMessage/functions.js +5 -0
  100. package/dist/InstantMessage/index.d.ts +1 -0
  101. package/dist/InstantMessage/index.js +1 -0
  102. package/dist/JavaRuntimeSupport/functions.d.ts +40 -0
  103. package/dist/JavaRuntimeSupport/functions.js +113 -0
  104. package/dist/JavaRuntimeSupport/index.d.ts +1 -0
  105. package/dist/JavaRuntimeSupport/index.js +1 -0
  106. package/dist/JavaScriptCore/functions.d.ts +120 -0
  107. package/dist/JavaScriptCore/functions.js +359 -0
  108. package/dist/JavaScriptCore/index.d.ts +1 -0
  109. package/dist/JavaScriptCore/index.js +1 -0
  110. package/dist/MLCompute/functions.d.ts +27 -0
  111. package/dist/MLCompute/functions.js +41 -0
  112. package/dist/MLCompute/index.d.ts +1 -0
  113. package/dist/MLCompute/index.js +1 -0
  114. package/dist/MapKit/functions.d.ts +23 -0
  115. package/dist/MapKit/functions.js +56 -0
  116. package/dist/MapKit/index.d.ts +1 -0
  117. package/dist/MapKit/index.js +1 -0
  118. package/dist/Matter/functions.d.ts +17 -0
  119. package/dist/Matter/functions.js +26 -0
  120. package/dist/Matter/index.d.ts +1 -0
  121. package/dist/Matter/index.js +1 -0
  122. package/dist/MediaAccessibility/functions.d.ts +28 -0
  123. package/dist/MediaAccessibility/functions.js +83 -0
  124. package/dist/MediaAccessibility/index.d.ts +1 -0
  125. package/dist/MediaAccessibility/index.js +1 -0
  126. package/dist/MediaPlayer/functions.d.ts +3 -0
  127. package/dist/MediaPlayer/functions.js +11 -0
  128. package/dist/MediaPlayer/index.d.ts +1 -0
  129. package/dist/MediaPlayer/index.js +1 -0
  130. package/dist/Metal/functions.d.ts +14 -0
  131. package/dist/Metal/functions.js +26 -0
  132. package/dist/Metal/index.d.ts +1 -0
  133. package/dist/Metal/index.js +1 -0
  134. package/dist/MetalKit/functions.d.ts +11 -0
  135. package/dist/MetalKit/functions.js +20 -0
  136. package/dist/MetalKit/index.d.ts +1 -0
  137. package/dist/MetalKit/index.js +1 -0
  138. package/dist/MetalPerformanceShaders/functions.d.ts +7 -0
  139. package/dist/MetalPerformanceShaders/functions.js +14 -0
  140. package/dist/MetalPerformanceShaders/index.d.ts +1 -0
  141. package/dist/MetalPerformanceShaders/index.js +1 -0
  142. package/dist/NearbyInteraction/functions.d.ts +3 -0
  143. package/dist/NearbyInteraction/functions.js +5 -0
  144. package/dist/NearbyInteraction/index.d.ts +1 -0
  145. package/dist/NearbyInteraction/index.js +1 -0
  146. package/dist/ParavirtualizedGraphics/functions.d.ts +7 -0
  147. package/dist/ParavirtualizedGraphics/functions.js +14 -0
  148. package/dist/ParavirtualizedGraphics/index.d.ts +1 -0
  149. package/dist/ParavirtualizedGraphics/index.js +1 -0
  150. package/dist/QuartzCore/functions.d.ts +19 -0
  151. package/dist/QuartzCore/functions.js +50 -0
  152. package/dist/QuartzCore/index.d.ts +1 -0
  153. package/dist/QuartzCore/index.js +1 -0
  154. package/dist/SceneKit/functions.d.ts +17 -0
  155. package/dist/SceneKit/functions.js +38 -0
  156. package/dist/SceneKit/index.d.ts +1 -0
  157. package/dist/SceneKit/index.js +1 -0
  158. package/dist/SensorKit/functions.d.ts +4 -0
  159. package/dist/SensorKit/functions.js +14 -0
  160. package/dist/SensorKit/index.d.ts +1 -0
  161. package/dist/SensorKit/index.js +1 -0
  162. package/dist/ServiceManagement/functions.d.ts +7 -0
  163. package/dist/ServiceManagement/functions.js +20 -0
  164. package/dist/ServiceManagement/index.d.ts +1 -0
  165. package/dist/ServiceManagement/index.js +1 -0
  166. package/dist/StoreKit/functions.d.ts +1 -0
  167. package/dist/StoreKit/functions.js +5 -0
  168. package/dist/StoreKit/index.d.ts +1 -0
  169. package/dist/StoreKit/index.js +1 -0
  170. package/dist/VideoToolbox/functions.d.ts +81 -0
  171. package/dist/VideoToolbox/functions.js +236 -0
  172. package/dist/VideoToolbox/index.d.ts +1 -0
  173. package/dist/VideoToolbox/index.js +1 -0
  174. package/dist/Vision/functions.d.ts +16 -0
  175. package/dist/Vision/functions.js +38 -0
  176. package/dist/Vision/index.d.ts +1 -0
  177. package/dist/Vision/index.js +1 -0
  178. package/generator/ast-parser.ts +1368 -0
  179. package/generator/clang.ts +167 -0
  180. package/generator/custom.ts +936 -0
  181. package/generator/discover.ts +111 -0
  182. package/generator/emitter.ts +2026 -0
  183. package/generator/frameworks.ts +135 -0
  184. package/generator/index.ts +1334 -0
  185. package/generator/parse-worker.ts +263 -0
  186. package/generator/resolve-strings.ts +121 -0
  187. package/generator/struct-fields.ts +46 -0
  188. package/generator/templates/bind.ts +100 -0
  189. package/generator/templates/helpers.ts +70 -0
  190. package/generator/templates/nsdata.ts +97 -0
  191. package/generator/templates/osversion.ts +91 -0
  192. package/generator/type-mapper.ts +615 -0
  193. package/generator/worker-pool.ts +309 -0
  194. package/package.json +13 -4
@@ -0,0 +1,309 @@
1
+ /**
2
+ * Worker pool for parallel header parsing.
3
+ * Manages a fixed pool of worker threads and distributes parse tasks
4
+ * with automatic load balancing via an internal queue.
5
+ *
6
+ * Each worker runs clang + AST parsing independently. The pool routes
7
+ * tasks to idle workers and queues excess tasks until a worker is free.
8
+ */
9
+
10
+ import type {
11
+ ObjCClass,
12
+ ObjCProtocol,
13
+ ObjCIntegerEnum,
14
+ ObjCStringEnum,
15
+ ObjCStruct,
16
+ ObjCStructAlias,
17
+ ObjCFunction
18
+ } from "./ast-parser.ts";
19
+
20
+ /** Result from a unified parse-all task (classes + protocols + enums + structs from one clang invocation) */
21
+ export interface UnifiedParseResult {
22
+ /** Parsed classes from the header (class name → ObjCClass) */
23
+ classes: Map<string, ObjCClass>;
24
+ /** Parsed protocols from the header (protocol name → ObjCProtocol) */
25
+ protocols: Map<string, ObjCProtocol>;
26
+ /** Parsed integer enums from the header (enum name → ObjCIntegerEnum) */
27
+ integerEnums: Map<string, ObjCIntegerEnum>;
28
+ /** Parsed string enums from the header (enum name → ObjCStringEnum) */
29
+ stringEnums: Map<string, ObjCStringEnum>;
30
+ /** Parsed struct definitions from the header (struct name → ObjCStruct) */
31
+ structs: Map<string, ObjCStruct>;
32
+ /** Struct typedef aliases (e.g., NSPoint → CGPoint) */
33
+ structAliases: ObjCStructAlias[];
34
+ /** General typedef resolution table (typedef name → underlying qualType) */
35
+ typedefs: Map<string, string>;
36
+ /** Parsed C function declarations (function name → ObjCFunction) */
37
+ functions: Map<string, ObjCFunction>;
38
+ }
39
+
40
+ export interface ClassParseResult {
41
+ /** Parsed classes from the header (class name → ObjCClass) */
42
+ classes: Map<string, ObjCClass>;
43
+ /** Original target class names that were requested */
44
+ targets: string[];
45
+ }
46
+
47
+ export interface ProtocolParseResult {
48
+ /** Parsed protocols from the header (protocol name → ObjCProtocol) */
49
+ protocols: Map<string, ObjCProtocol>;
50
+ /** Original target protocol names that were requested */
51
+ targets: string[];
52
+ }
53
+
54
+ export interface EnumParseResult {
55
+ /** Parsed integer enums from the header (enum name → ObjCIntegerEnum) */
56
+ integerEnums: Map<string, ObjCIntegerEnum>;
57
+ /** Parsed string enums from the header (enum name → ObjCStringEnum) */
58
+ stringEnums: Map<string, ObjCStringEnum>;
59
+ /** Original target integer enum names that were requested */
60
+ integerTargets: string[];
61
+ /** Original target string enum names that were requested */
62
+ stringTargets: string[];
63
+ }
64
+
65
+ interface PendingTask {
66
+ resolve: (value: any) => void;
67
+ reject: (error: Error) => void;
68
+ }
69
+
70
+ interface QueuedTask {
71
+ message: any;
72
+ resolve: (value: any) => void;
73
+ reject: (error: Error) => void;
74
+ }
75
+
76
+ /**
77
+ * Pool of worker threads for running clang + AST parsing in parallel.
78
+ * Tasks are automatically load-balanced: each new task goes to an idle
79
+ * worker, or queues until one becomes available.
80
+ */
81
+ export class WorkerPool {
82
+ private workers: Worker[];
83
+ private idle: Worker[];
84
+ private queue: QueuedTask[];
85
+ private pending: Map<Worker, PendingTask>;
86
+ private nextId = 0;
87
+
88
+ constructor(size: number) {
89
+ const workerUrl = new URL("./parse-worker.ts", import.meta.url).href;
90
+ this.workers = [];
91
+ this.idle = [];
92
+ this.queue = [];
93
+ this.pending = new Map();
94
+
95
+ for (let i = 0; i < size; i++) {
96
+ const worker = new Worker(workerUrl, { smol: true });
97
+ worker.onmessage = (event) => this.onWorkerMessage(worker, event.data);
98
+ worker.onerror = (event) => this.onWorkerError(worker, event);
99
+ this.workers.push(worker);
100
+ this.idle.push(worker);
101
+ }
102
+ }
103
+
104
+ /** Number of workers in the pool. */
105
+ get size(): number {
106
+ return this.workers.length;
107
+ }
108
+
109
+ private onWorkerMessage(worker: Worker, data: any): void {
110
+ const task = this.pending.get(worker);
111
+ this.pending.delete(worker);
112
+
113
+ if (data.type === "error") {
114
+ task?.reject(new Error(data.error));
115
+ } else {
116
+ task?.resolve(data);
117
+ }
118
+
119
+ this.dispatchNext(worker);
120
+ }
121
+
122
+ private onWorkerError(worker: Worker, event: Event | ErrorEvent): void {
123
+ const task = this.pending.get(worker);
124
+ this.pending.delete(worker);
125
+ const msg = event instanceof ErrorEvent ? event.message : "Worker error";
126
+ task?.reject(new Error(msg));
127
+ this.dispatchNext(worker);
128
+ }
129
+
130
+ /** Send the next queued task to a now-idle worker, or mark it idle. */
131
+ private dispatchNext(worker: Worker): void {
132
+ const next = this.queue.shift();
133
+ if (next) {
134
+ this.pending.set(worker, { resolve: next.resolve, reject: next.reject });
135
+ worker.postMessage(next.message);
136
+ } else {
137
+ this.idle.push(worker);
138
+ }
139
+ }
140
+
141
+ /** Send a message to an available worker, or queue it. */
142
+ private dispatch(message: any): Promise<any> {
143
+ return new Promise((resolve, reject) => {
144
+ const worker = this.idle.pop();
145
+ if (worker) {
146
+ this.pending.set(worker, { resolve, reject });
147
+ worker.postMessage(message);
148
+ } else {
149
+ this.queue.push({ message, resolve, reject });
150
+ }
151
+ });
152
+ }
153
+
154
+ /**
155
+ * Parse classes from a header file using a worker thread.
156
+ * Automatically retries with fallback pre-includes if initial parse finds nothing.
157
+ */
158
+ async parseClasses(headerPath: string, targets: string[], fallbackPreIncludes?: string[]): Promise<ClassParseResult> {
159
+ const result = await this.dispatch({
160
+ id: this.nextId++,
161
+ type: "parse-classes",
162
+ headerPath,
163
+ targets,
164
+ fallbackPreIncludes
165
+ });
166
+ return {
167
+ classes: new Map(result.classes),
168
+ targets: result.targets
169
+ };
170
+ }
171
+
172
+ /**
173
+ * Parse protocols from a header file using a worker thread.
174
+ * Automatically retries with fallback pre-includes if initial parse finds nothing.
175
+ */
176
+ async parseProtocols(
177
+ headerPath: string,
178
+ targets: string[],
179
+ fallbackPreIncludes?: string[]
180
+ ): Promise<ProtocolParseResult> {
181
+ const result = await this.dispatch({
182
+ id: this.nextId++,
183
+ type: "parse-protocols",
184
+ headerPath,
185
+ targets,
186
+ fallbackPreIncludes
187
+ });
188
+ return {
189
+ protocols: new Map(result.protocols),
190
+ targets: result.targets
191
+ };
192
+ }
193
+
194
+ /**
195
+ * Parse enums from a header file using a worker thread.
196
+ * Extracts both integer enums (NS_ENUM/NS_OPTIONS) and string enums
197
+ * (NS_TYPED_EXTENSIBLE_ENUM) in a single clang pass.
198
+ */
199
+ async parseEnums(
200
+ headerPath: string,
201
+ integerTargets: string[],
202
+ stringTargets: string[],
203
+ fallbackPreIncludes?: string[]
204
+ ): Promise<EnumParseResult> {
205
+ const result = await this.dispatch({
206
+ id: this.nextId++,
207
+ type: "parse-enums",
208
+ headerPath,
209
+ integerTargets,
210
+ stringTargets,
211
+ fallbackPreIncludes
212
+ });
213
+ return {
214
+ integerEnums: new Map(result.integerEnums),
215
+ stringEnums: new Map(result.stringEnums),
216
+ integerTargets: result.integerTargets,
217
+ stringTargets: result.stringTargets
218
+ };
219
+ }
220
+
221
+ /**
222
+ * Parse classes, protocols, and enums from a single header in one clang invocation.
223
+ * This avoids spawning multiple clang processes for the same header file.
224
+ */
225
+ async parseAll(
226
+ headerPath: string,
227
+ classTargets: string[],
228
+ protocolTargets: string[],
229
+ integerEnumTargets: string[],
230
+ stringEnumTargets: string[],
231
+ fallbackPreIncludes?: string[]
232
+ ): Promise<UnifiedParseResult> {
233
+ const result = await this.dispatch({
234
+ id: this.nextId++,
235
+ type: "parse-all",
236
+ headerPath,
237
+ classTargets,
238
+ protocolTargets,
239
+ integerEnumTargets,
240
+ stringEnumTargets,
241
+ fallbackPreIncludes
242
+ });
243
+ return {
244
+ classes: new Map(result.classes),
245
+ protocols: new Map(result.protocols),
246
+ integerEnums: new Map(result.integerEnums),
247
+ stringEnums: new Map(result.stringEnums),
248
+ structs: new Map(result.structs ?? []),
249
+ structAliases: result.structAliases ?? [],
250
+ typedefs: new Map(result.typedefs ?? []),
251
+ functions: new Map(result.functions ?? [])
252
+ };
253
+ }
254
+
255
+ /**
256
+ * Parse all targets from an entire framework using a single batched clang invocation.
257
+ * All framework headers are included in one temp .m file, reducing clang overhead
258
+ * from one process per header to one process per framework.
259
+ *
260
+ * @param headerPaths - All header file paths for this framework
261
+ * @param classTargets - All class names to extract
262
+ * @param protocolTargets - All protocol names to extract
263
+ * @param integerEnumTargets - All integer enum names to extract
264
+ * @param stringEnumTargets - All string enum names to extract
265
+ * @param preIncludes - Pre-include headers for macro expansion (e.g., Foundation/Foundation.h)
266
+ */
267
+ async parseBatch(
268
+ headerPaths: string[],
269
+ classTargets: string[],
270
+ protocolTargets: string[],
271
+ integerEnumTargets: string[],
272
+ stringEnumTargets: string[],
273
+ preIncludes: string[],
274
+ frameworkName?: string
275
+ ): Promise<UnifiedParseResult> {
276
+ const result = await this.dispatch({
277
+ id: this.nextId++,
278
+ type: "parse-batch",
279
+ headerPaths,
280
+ classTargets,
281
+ protocolTargets,
282
+ integerEnumTargets,
283
+ stringEnumTargets,
284
+ preIncludes,
285
+ frameworkName
286
+ });
287
+ return {
288
+ classes: new Map(result.classes),
289
+ protocols: new Map(result.protocols),
290
+ integerEnums: new Map(result.integerEnums),
291
+ stringEnums: new Map(result.stringEnums),
292
+ structs: new Map(result.structs ?? []),
293
+ structAliases: result.structAliases ?? [],
294
+ typedefs: new Map(result.typedefs ?? []),
295
+ functions: new Map(result.functions ?? [])
296
+ };
297
+ }
298
+
299
+ /** Terminate all workers and clean up resources. */
300
+ destroy(): void {
301
+ for (const worker of this.workers) {
302
+ worker.terminate();
303
+ }
304
+ this.workers = [];
305
+ this.idle = [];
306
+ this.queue = [];
307
+ this.pending.clear();
308
+ }
309
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "objcjs-types",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Auto-generated TypeScript type declarations for macOS Objective-C frameworks",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -32,11 +32,17 @@
32
32
  }
33
33
  },
34
34
  "files": [
35
- "dist"
35
+ "dist",
36
+ "generator",
37
+ "bin"
36
38
  ],
39
+ "bin": {
40
+ "objcjs-types": "./bin/objcjs-types.ts"
41
+ },
37
42
  "scripts": {
38
43
  "clear": "rm -rf src && rm -rf dist",
39
44
  "generate": "bun run generator/index.ts",
45
+ "generate:custom": "bun run generator/custom.ts",
40
46
  "build": "bun run clear && bun run generate && bunx tsgo",
41
47
  "format": "prettier --write ."
42
48
  },
@@ -59,7 +65,10 @@
59
65
  "devDependencies": {
60
66
  "@types/bun": "latest",
61
67
  "@typescript/native-preview": "^7.0.0-dev.20260218.1",
62
- "objc-js": "^1.1.0",
68
+ "objc-js": "^1.2.1",
63
69
  "prettier": "^3.8.1"
64
- }
70
+ },
71
+ "trustedDependencies": [
72
+ "objc-js"
73
+ ]
65
74
  }