@vizejs/fresco-native 0.0.1-alpha.31

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 (3) hide show
  1. package/index.d.ts +228 -0
  2. package/index.js +349 -0
  3. package/package.json +60 -0
package/index.d.ts ADDED
@@ -0,0 +1,228 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+
4
+ /* auto-generated by NAPI-RS */
5
+
6
+ /**
7
+ * Poll for input events.
8
+ *
9
+ * Returns an event if available within the timeout, or null if no event.
10
+ */
11
+ export declare function pollEvent(timeoutMs: number): InputEventNapi | null
12
+ /** Poll for input events without blocking. */
13
+ export declare function pollEventNonBlocking(): InputEventNapi | null
14
+ /** Read an input event, blocking until one is available. */
15
+ export declare function readEvent(): InputEventNapi
16
+ /** Get current IME state. */
17
+ export declare function getImeState(): ImeStateNapi
18
+ /** Enable IME. */
19
+ export declare function enableIme(): boolean
20
+ /** Disable IME. */
21
+ export declare function disableIme(): boolean
22
+ /** Set IME input mode. */
23
+ export declare function setImeMode(mode: string): void
24
+ /** Initialize layout engine. */
25
+ export declare function initLayout(): void
26
+ /** Create a new layout node. */
27
+ export declare function createLayoutNode(style?: FlexStyleNapi | undefined | null): number
28
+ /** Create a new leaf layout node with measured size. */
29
+ export declare function createLayoutLeaf(width: number, height: number, style?: FlexStyleNapi | undefined | null): number
30
+ /** Set layout root node. */
31
+ export declare function setLayoutRoot(id: number): void
32
+ /** Add child to parent node. */
33
+ export declare function addLayoutChild(parent: number, child: number): void
34
+ /** Remove child from parent node. */
35
+ export declare function removeLayoutChild(parent: number, child: number): void
36
+ /** Update node style. */
37
+ export declare function setLayoutStyle(id: number, style: FlexStyleNapi): void
38
+ /** Remove a node. */
39
+ export declare function removeLayoutNode(id: number): void
40
+ /** Compute layout. */
41
+ export declare function computeLayout(width: number, height: number): void
42
+ /** Get layout result for a node. */
43
+ export declare function getLayout(id: number): LayoutResultNapi | null
44
+ /** Get all layout results. */
45
+ export declare function getAllLayouts(): Array<LayoutResultNapi>
46
+ /** Clear layout engine. */
47
+ export declare function clearLayout(): void
48
+ /** Render text at position. */
49
+ export declare function renderText(x: number, y: number, text: string, style?: StyleNapi | undefined | null): void
50
+ /** Render a box (rectangle). */
51
+ export declare function renderBox(x: number, y: number, width: number, height: number, border?: string | undefined | null, style?: StyleNapi | undefined | null): void
52
+ /** Fill a rectangle with a character. */
53
+ export declare function fillRect(x: number, y: number, width: number, height: number, char?: string | undefined | null, style?: StyleNapi | undefined | null): void
54
+ /** Clear a rectangular area. */
55
+ export declare function clearRect(x: number, y: number, width: number, height: number): void
56
+ /** Set cursor position. */
57
+ export declare function setCursor(x: number, y: number): void
58
+ /** Show cursor. */
59
+ export declare function showCursor(): void
60
+ /** Hide cursor. */
61
+ export declare function hideCursor(): void
62
+ /** Set cursor shape. */
63
+ export declare function setCursorShape(shape: string): void
64
+ /** Render a tree of nodes. */
65
+ export declare function renderTree(nodes: Array<RenderNodeNapi>): void
66
+ /** Initialize terminal for TUI mode. */
67
+ export declare function initTerminal(): void
68
+ /** Initialize terminal with mouse capture. */
69
+ export declare function initTerminalWithMouse(): void
70
+ /** Restore terminal to normal mode. */
71
+ export declare function restoreTerminal(): void
72
+ /** Get terminal info. */
73
+ export declare function getTerminalInfo(): TerminalInfoNapi
74
+ /** Clear the screen. */
75
+ export declare function clearScreen(): void
76
+ /** Flush the terminal buffer. */
77
+ export declare function flushTerminal(): void
78
+ /** Sync terminal size (call after resize events). */
79
+ export declare function syncTerminalSize(): boolean
80
+ /** Style options for NAPI. */
81
+ export interface StyleNapi {
82
+ /** Foreground color (hex or named) */
83
+ fg?: string
84
+ /** Background color (hex or named) */
85
+ bg?: string
86
+ /** Bold text */
87
+ bold?: boolean
88
+ /** Dim text */
89
+ dim?: boolean
90
+ /** Italic text */
91
+ italic?: boolean
92
+ /** Underline text */
93
+ underline?: boolean
94
+ /** Strikethrough text */
95
+ strikethrough?: boolean
96
+ }
97
+ /**
98
+ * Flex style options for NAPI.
99
+ * NAPI automatically converts JavaScript camelCase to Rust snake_case.
100
+ */
101
+ export interface FlexStyleNapi {
102
+ display?: string
103
+ flexDirection?: string
104
+ flexWrap?: string
105
+ justifyContent?: string
106
+ alignItems?: string
107
+ alignSelf?: string
108
+ alignContent?: string
109
+ flexGrow?: number
110
+ flexShrink?: number
111
+ width?: string
112
+ height?: string
113
+ minWidth?: string
114
+ minHeight?: string
115
+ maxWidth?: string
116
+ maxHeight?: string
117
+ padding?: number
118
+ paddingTop?: number
119
+ paddingRight?: number
120
+ paddingBottom?: number
121
+ paddingLeft?: number
122
+ margin?: number
123
+ marginTop?: number
124
+ marginRight?: number
125
+ marginBottom?: number
126
+ marginLeft?: number
127
+ gap?: number
128
+ }
129
+ /** Render node for NAPI. */
130
+ export interface RenderNodeNapi {
131
+ /** Node ID */
132
+ id: number
133
+ /** Node type: "box" | "text" | "input" */
134
+ nodeType: string
135
+ /** Text content (for text nodes) */
136
+ text?: string
137
+ /** Whether text should wrap */
138
+ wrap?: boolean
139
+ /** Input value (for input nodes) */
140
+ value?: string
141
+ /** Placeholder text (for input nodes) */
142
+ placeholder?: string
143
+ /** Whether input is focused */
144
+ focused?: boolean
145
+ /** Cursor position in input */
146
+ cursor?: number
147
+ /** Whether to mask input (password) */
148
+ mask?: boolean
149
+ /** Flex style */
150
+ style?: FlexStyleNapi
151
+ /** Visual appearance */
152
+ appearance?: StyleNapi
153
+ /** Border style: "none" | "single" | "double" | "rounded" | "heavy" */
154
+ border?: string
155
+ /** Child node IDs */
156
+ children?: Array<number>
157
+ }
158
+ /** Layout result for NAPI. */
159
+ export interface LayoutResultNapi {
160
+ /** Node ID */
161
+ id: number
162
+ /** X position */
163
+ x: number
164
+ /** Y position */
165
+ y: number
166
+ /** Width */
167
+ width: number
168
+ /** Height */
169
+ height: number
170
+ }
171
+ /** Input event for NAPI. */
172
+ export interface InputEventNapi {
173
+ /** Event type: "key" | "mouse" | "resize" | "focus" | "paste" */
174
+ eventType: string
175
+ /** Key code (for key events) */
176
+ key?: string
177
+ /** Character (for key events) */
178
+ char?: string
179
+ /** Modifiers: { ctrl, alt, shift, meta } */
180
+ modifiers?: ModifiersNapi
181
+ /** Mouse button (for mouse events) */
182
+ button?: string
183
+ /** Mouse x position */
184
+ x?: number
185
+ /** Mouse y position */
186
+ y?: number
187
+ /** New width (for resize events) */
188
+ width?: number
189
+ /** New height (for resize events) */
190
+ height?: number
191
+ /** Pasted text (for paste events) */
192
+ text?: string
193
+ }
194
+ /** Key modifiers for NAPI. */
195
+ export interface ModifiersNapi {
196
+ ctrl: boolean
197
+ alt: boolean
198
+ shift: boolean
199
+ meta: boolean
200
+ }
201
+ /** IME state for NAPI. */
202
+ export interface ImeStateNapi {
203
+ /** Whether IME is active */
204
+ active: boolean
205
+ /** Current input mode */
206
+ mode: string
207
+ /** Whether currently composing */
208
+ composing: boolean
209
+ /** Preedit text */
210
+ preedit?: string
211
+ /** Cursor position in preedit */
212
+ preeditCursor?: number
213
+ /** Candidate list */
214
+ candidates?: Array<string>
215
+ /** Selected candidate index */
216
+ selected?: number
217
+ }
218
+ /** Terminal info for NAPI. */
219
+ export interface TerminalInfoNapi {
220
+ /** Terminal width in columns */
221
+ width: number
222
+ /** Terminal height in rows */
223
+ height: number
224
+ /** Whether colors are supported */
225
+ colors: boolean
226
+ /** Whether true color (24-bit) is supported */
227
+ trueColor: boolean
228
+ }
package/index.js ADDED
@@ -0,0 +1,349 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /* prettier-ignore */
4
+
5
+ /* auto-generated by NAPI-RS */
6
+
7
+ const { existsSync, readFileSync } = require('fs')
8
+ const { join } = require('path')
9
+
10
+ const { platform, arch } = process
11
+
12
+ let nativeBinding = null
13
+ let localFileExisted = false
14
+ let loadError = null
15
+
16
+ function isMusl() {
17
+ // For Node 10
18
+ if (!process.report || typeof process.report.getReport !== 'function') {
19
+ try {
20
+ const lddPath = require('child_process').execSync('which ldd').toString().trim()
21
+ return readFileSync(lddPath, 'utf8').includes('musl')
22
+ } catch (e) {
23
+ return true
24
+ }
25
+ } else {
26
+ const { glibcVersionRuntime } = process.report.getReport().header
27
+ return !glibcVersionRuntime
28
+ }
29
+ }
30
+
31
+ switch (platform) {
32
+ case 'android':
33
+ switch (arch) {
34
+ case 'arm64':
35
+ localFileExisted = existsSync(join(__dirname, 'vize-fresco.android-arm64.node'))
36
+ try {
37
+ if (localFileExisted) {
38
+ nativeBinding = require('./vize-fresco.android-arm64.node')
39
+ } else {
40
+ nativeBinding = require('@vizejs/fresco-native-android-arm64')
41
+ }
42
+ } catch (e) {
43
+ loadError = e
44
+ }
45
+ break
46
+ case 'arm':
47
+ localFileExisted = existsSync(join(__dirname, 'vize-fresco.android-arm-eabi.node'))
48
+ try {
49
+ if (localFileExisted) {
50
+ nativeBinding = require('./vize-fresco.android-arm-eabi.node')
51
+ } else {
52
+ nativeBinding = require('@vizejs/fresco-native-android-arm-eabi')
53
+ }
54
+ } catch (e) {
55
+ loadError = e
56
+ }
57
+ break
58
+ default:
59
+ throw new Error(`Unsupported architecture on Android ${arch}`)
60
+ }
61
+ break
62
+ case 'win32':
63
+ switch (arch) {
64
+ case 'x64':
65
+ localFileExisted = existsSync(
66
+ join(__dirname, 'vize-fresco.win32-x64-msvc.node')
67
+ )
68
+ try {
69
+ if (localFileExisted) {
70
+ nativeBinding = require('./vize-fresco.win32-x64-msvc.node')
71
+ } else {
72
+ nativeBinding = require('@vizejs/fresco-native-win32-x64-msvc')
73
+ }
74
+ } catch (e) {
75
+ loadError = e
76
+ }
77
+ break
78
+ case 'ia32':
79
+ localFileExisted = existsSync(
80
+ join(__dirname, 'vize-fresco.win32-ia32-msvc.node')
81
+ )
82
+ try {
83
+ if (localFileExisted) {
84
+ nativeBinding = require('./vize-fresco.win32-ia32-msvc.node')
85
+ } else {
86
+ nativeBinding = require('@vizejs/fresco-native-win32-ia32-msvc')
87
+ }
88
+ } catch (e) {
89
+ loadError = e
90
+ }
91
+ break
92
+ case 'arm64':
93
+ localFileExisted = existsSync(
94
+ join(__dirname, 'vize-fresco.win32-arm64-msvc.node')
95
+ )
96
+ try {
97
+ if (localFileExisted) {
98
+ nativeBinding = require('./vize-fresco.win32-arm64-msvc.node')
99
+ } else {
100
+ nativeBinding = require('@vizejs/fresco-native-win32-arm64-msvc')
101
+ }
102
+ } catch (e) {
103
+ loadError = e
104
+ }
105
+ break
106
+ default:
107
+ throw new Error(`Unsupported architecture on Windows: ${arch}`)
108
+ }
109
+ break
110
+ case 'darwin':
111
+ localFileExisted = existsSync(join(__dirname, 'vize-fresco.darwin-universal.node'))
112
+ try {
113
+ if (localFileExisted) {
114
+ nativeBinding = require('./vize-fresco.darwin-universal.node')
115
+ } else {
116
+ nativeBinding = require('@vizejs/fresco-native-darwin-universal')
117
+ }
118
+ break
119
+ } catch {}
120
+ switch (arch) {
121
+ case 'x64':
122
+ localFileExisted = existsSync(join(__dirname, 'vize-fresco.darwin-x64.node'))
123
+ try {
124
+ if (localFileExisted) {
125
+ nativeBinding = require('./vize-fresco.darwin-x64.node')
126
+ } else {
127
+ nativeBinding = require('@vizejs/fresco-native-darwin-x64')
128
+ }
129
+ } catch (e) {
130
+ loadError = e
131
+ }
132
+ break
133
+ case 'arm64':
134
+ localFileExisted = existsSync(
135
+ join(__dirname, 'vize-fresco.darwin-arm64.node')
136
+ )
137
+ try {
138
+ if (localFileExisted) {
139
+ nativeBinding = require('./vize-fresco.darwin-arm64.node')
140
+ } else {
141
+ nativeBinding = require('@vizejs/fresco-native-darwin-arm64')
142
+ }
143
+ } catch (e) {
144
+ loadError = e
145
+ }
146
+ break
147
+ default:
148
+ throw new Error(`Unsupported architecture on macOS: ${arch}`)
149
+ }
150
+ break
151
+ case 'freebsd':
152
+ if (arch !== 'x64') {
153
+ throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
154
+ }
155
+ localFileExisted = existsSync(join(__dirname, 'vize-fresco.freebsd-x64.node'))
156
+ try {
157
+ if (localFileExisted) {
158
+ nativeBinding = require('./vize-fresco.freebsd-x64.node')
159
+ } else {
160
+ nativeBinding = require('@vizejs/fresco-native-freebsd-x64')
161
+ }
162
+ } catch (e) {
163
+ loadError = e
164
+ }
165
+ break
166
+ case 'linux':
167
+ switch (arch) {
168
+ case 'x64':
169
+ if (isMusl()) {
170
+ localFileExisted = existsSync(
171
+ join(__dirname, 'vize-fresco.linux-x64-musl.node')
172
+ )
173
+ try {
174
+ if (localFileExisted) {
175
+ nativeBinding = require('./vize-fresco.linux-x64-musl.node')
176
+ } else {
177
+ nativeBinding = require('@vizejs/fresco-native-linux-x64-musl')
178
+ }
179
+ } catch (e) {
180
+ loadError = e
181
+ }
182
+ } else {
183
+ localFileExisted = existsSync(
184
+ join(__dirname, 'vize-fresco.linux-x64-gnu.node')
185
+ )
186
+ try {
187
+ if (localFileExisted) {
188
+ nativeBinding = require('./vize-fresco.linux-x64-gnu.node')
189
+ } else {
190
+ nativeBinding = require('@vizejs/fresco-native-linux-x64-gnu')
191
+ }
192
+ } catch (e) {
193
+ loadError = e
194
+ }
195
+ }
196
+ break
197
+ case 'arm64':
198
+ if (isMusl()) {
199
+ localFileExisted = existsSync(
200
+ join(__dirname, 'vize-fresco.linux-arm64-musl.node')
201
+ )
202
+ try {
203
+ if (localFileExisted) {
204
+ nativeBinding = require('./vize-fresco.linux-arm64-musl.node')
205
+ } else {
206
+ nativeBinding = require('@vizejs/fresco-native-linux-arm64-musl')
207
+ }
208
+ } catch (e) {
209
+ loadError = e
210
+ }
211
+ } else {
212
+ localFileExisted = existsSync(
213
+ join(__dirname, 'vize-fresco.linux-arm64-gnu.node')
214
+ )
215
+ try {
216
+ if (localFileExisted) {
217
+ nativeBinding = require('./vize-fresco.linux-arm64-gnu.node')
218
+ } else {
219
+ nativeBinding = require('@vizejs/fresco-native-linux-arm64-gnu')
220
+ }
221
+ } catch (e) {
222
+ loadError = e
223
+ }
224
+ }
225
+ break
226
+ case 'arm':
227
+ if (isMusl()) {
228
+ localFileExisted = existsSync(
229
+ join(__dirname, 'vize-fresco.linux-arm-musleabihf.node')
230
+ )
231
+ try {
232
+ if (localFileExisted) {
233
+ nativeBinding = require('./vize-fresco.linux-arm-musleabihf.node')
234
+ } else {
235
+ nativeBinding = require('@vizejs/fresco-native-linux-arm-musleabihf')
236
+ }
237
+ } catch (e) {
238
+ loadError = e
239
+ }
240
+ } else {
241
+ localFileExisted = existsSync(
242
+ join(__dirname, 'vize-fresco.linux-arm-gnueabihf.node')
243
+ )
244
+ try {
245
+ if (localFileExisted) {
246
+ nativeBinding = require('./vize-fresco.linux-arm-gnueabihf.node')
247
+ } else {
248
+ nativeBinding = require('@vizejs/fresco-native-linux-arm-gnueabihf')
249
+ }
250
+ } catch (e) {
251
+ loadError = e
252
+ }
253
+ }
254
+ break
255
+ case 'riscv64':
256
+ if (isMusl()) {
257
+ localFileExisted = existsSync(
258
+ join(__dirname, 'vize-fresco.linux-riscv64-musl.node')
259
+ )
260
+ try {
261
+ if (localFileExisted) {
262
+ nativeBinding = require('./vize-fresco.linux-riscv64-musl.node')
263
+ } else {
264
+ nativeBinding = require('@vizejs/fresco-native-linux-riscv64-musl')
265
+ }
266
+ } catch (e) {
267
+ loadError = e
268
+ }
269
+ } else {
270
+ localFileExisted = existsSync(
271
+ join(__dirname, 'vize-fresco.linux-riscv64-gnu.node')
272
+ )
273
+ try {
274
+ if (localFileExisted) {
275
+ nativeBinding = require('./vize-fresco.linux-riscv64-gnu.node')
276
+ } else {
277
+ nativeBinding = require('@vizejs/fresco-native-linux-riscv64-gnu')
278
+ }
279
+ } catch (e) {
280
+ loadError = e
281
+ }
282
+ }
283
+ break
284
+ case 's390x':
285
+ localFileExisted = existsSync(
286
+ join(__dirname, 'vize-fresco.linux-s390x-gnu.node')
287
+ )
288
+ try {
289
+ if (localFileExisted) {
290
+ nativeBinding = require('./vize-fresco.linux-s390x-gnu.node')
291
+ } else {
292
+ nativeBinding = require('@vizejs/fresco-native-linux-s390x-gnu')
293
+ }
294
+ } catch (e) {
295
+ loadError = e
296
+ }
297
+ break
298
+ default:
299
+ throw new Error(`Unsupported architecture on Linux: ${arch}`)
300
+ }
301
+ break
302
+ default:
303
+ throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
304
+ }
305
+
306
+ if (!nativeBinding) {
307
+ if (loadError) {
308
+ throw loadError
309
+ }
310
+ throw new Error(`Failed to load native binding`)
311
+ }
312
+
313
+ const { pollEvent, pollEventNonBlocking, readEvent, getImeState, enableIme, disableIme, setImeMode, initLayout, createLayoutNode, createLayoutLeaf, setLayoutRoot, addLayoutChild, removeLayoutChild, setLayoutStyle, removeLayoutNode, computeLayout, getLayout, getAllLayouts, clearLayout, renderText, renderBox, fillRect, clearRect, setCursor, showCursor, hideCursor, setCursorShape, renderTree, initTerminal, initTerminalWithMouse, restoreTerminal, getTerminalInfo, clearScreen, flushTerminal, syncTerminalSize } = nativeBinding
314
+
315
+ module.exports.pollEvent = pollEvent
316
+ module.exports.pollEventNonBlocking = pollEventNonBlocking
317
+ module.exports.readEvent = readEvent
318
+ module.exports.getImeState = getImeState
319
+ module.exports.enableIme = enableIme
320
+ module.exports.disableIme = disableIme
321
+ module.exports.setImeMode = setImeMode
322
+ module.exports.initLayout = initLayout
323
+ module.exports.createLayoutNode = createLayoutNode
324
+ module.exports.createLayoutLeaf = createLayoutLeaf
325
+ module.exports.setLayoutRoot = setLayoutRoot
326
+ module.exports.addLayoutChild = addLayoutChild
327
+ module.exports.removeLayoutChild = removeLayoutChild
328
+ module.exports.setLayoutStyle = setLayoutStyle
329
+ module.exports.removeLayoutNode = removeLayoutNode
330
+ module.exports.computeLayout = computeLayout
331
+ module.exports.getLayout = getLayout
332
+ module.exports.getAllLayouts = getAllLayouts
333
+ module.exports.clearLayout = clearLayout
334
+ module.exports.renderText = renderText
335
+ module.exports.renderBox = renderBox
336
+ module.exports.fillRect = fillRect
337
+ module.exports.clearRect = clearRect
338
+ module.exports.setCursor = setCursor
339
+ module.exports.showCursor = showCursor
340
+ module.exports.hideCursor = hideCursor
341
+ module.exports.setCursorShape = setCursorShape
342
+ module.exports.renderTree = renderTree
343
+ module.exports.initTerminal = initTerminal
344
+ module.exports.initTerminalWithMouse = initTerminalWithMouse
345
+ module.exports.restoreTerminal = restoreTerminal
346
+ module.exports.getTerminalInfo = getTerminalInfo
347
+ module.exports.clearScreen = clearScreen
348
+ module.exports.flushTerminal = flushTerminal
349
+ module.exports.syncTerminalSize = syncTerminalSize
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@vizejs/fresco-native",
3
+ "version": "0.0.1-alpha.31",
4
+ "description": "Vue TUI framework - Native bindings",
5
+ "publishConfig": {
6
+ "provenance": true,
7
+ "access": "public"
8
+ },
9
+ "main": "index.js",
10
+ "types": "index.d.ts",
11
+ "napi": {
12
+ "name": "vize-fresco",
13
+ "triples": {
14
+ "defaults": true,
15
+ "additional": [
16
+ "x86_64-unknown-linux-musl",
17
+ "aarch64-unknown-linux-gnu",
18
+ "aarch64-unknown-linux-musl",
19
+ "aarch64-apple-darwin",
20
+ "aarch64-pc-windows-msvc"
21
+ ]
22
+ }
23
+ },
24
+ "files": [
25
+ "index.js",
26
+ "index.d.ts"
27
+ ],
28
+ "scripts": {
29
+ "build": "napi build --platform --release --cargo-cwd=../../crates/vize_fresco --cargo-name=vize_fresco --features napi",
30
+ "build:debug": "napi build --platform --cargo-cwd=../../crates/vize_fresco --cargo-name=vize_fresco --features napi",
31
+ "prepublishOnly": "napi prepublish -t npm"
32
+ },
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/ubugeeei/vize"
36
+ },
37
+ "keywords": [
38
+ "vue",
39
+ "tui",
40
+ "terminal",
41
+ "native",
42
+ "napi",
43
+ "vize",
44
+ "fresco"
45
+ ],
46
+ "license": "MIT",
47
+ "devDependencies": {
48
+ "@napi-rs/cli": "^2.18.0"
49
+ },
50
+ "optionalDependencies": {
51
+ "@vizejs/fresco-native-win32-x64-msvc": "0.0.1-alpha.31",
52
+ "@vizejs/fresco-native-darwin-x64": "0.0.1-alpha.31",
53
+ "@vizejs/fresco-native-linux-x64-gnu": "0.0.1-alpha.31",
54
+ "@vizejs/fresco-native-linux-x64-musl": "0.0.1-alpha.31",
55
+ "@vizejs/fresco-native-linux-arm64-gnu": "0.0.1-alpha.31",
56
+ "@vizejs/fresco-native-linux-arm64-musl": "0.0.1-alpha.31",
57
+ "@vizejs/fresco-native-darwin-arm64": "0.0.1-alpha.31",
58
+ "@vizejs/fresco-native-win32-arm64-msvc": "0.0.1-alpha.31"
59
+ }
60
+ }