murasaki 0.5.1 → 0.6.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.
- package/dist/jsx/dom/index.d.ts +2 -2
- package/dist/jsx/dom/index.d.ts.map +1 -1
- package/dist/jsx/dom/index.js +1 -1
- package/dist/jsx/dom/index.js.map +1 -1
- package/dist/jsx/dom/native.d.ts +50 -0
- package/dist/jsx/dom/native.d.ts.map +1 -1
- package/dist/jsx/dom/native.js +119 -0
- package/dist/jsx/dom/native.js.map +1 -1
- package/dist/runtime/native.d.ts +32 -0
- package/dist/runtime/native.d.ts.map +1 -1
- package/dist/runtime/native.js +150 -1
- package/dist/runtime/native.js.map +1 -1
- package/package.json +1 -1
package/dist/jsx/dom/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { createElement, createRoot, Fragment, jsx, jsxDEV, jsxs, useEffect, useRef, useState, } from './runtime.ts';
|
|
2
|
-
export { useNotification, useClipboard, useShell } from './native.ts';
|
|
3
|
-
export type { NotifyOptions } from './native.ts';
|
|
2
|
+
export { useNotification, useClipboard, useShell, useFs, useDialog } from './native.ts';
|
|
3
|
+
export type { NotifyOptions, OpenFileOptions, SaveFileOptions, DirEntry } from './native.ts';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jsx/dom/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EACb,UAAU,EACV,QAAQ,EACR,GAAG,EACH,MAAM,EACN,IAAI,EACJ,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jsx/dom/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EACb,UAAU,EACV,QAAQ,EACR,GAAG,EACH,MAAM,EACN,IAAI,EACJ,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvF,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/jsx/dom/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Public surface for `import { ... } from 'murasaki/jsx/dom'`.
|
|
2
2
|
export { createElement, createRoot, Fragment, jsx, jsxDEV, jsxs, useEffect, useRef, useState, } from "./runtime.js";
|
|
3
|
-
export { useNotification, useClipboard, useShell } from "./native.js";
|
|
3
|
+
export { useNotification, useClipboard, useShell, useFs, useDialog } from "./native.js";
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jsx/dom/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,OAAO,EACL,aAAa,EACb,UAAU,EACV,QAAQ,EACR,GAAG,EACH,MAAM,EACN,IAAI,EACJ,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jsx/dom/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,OAAO,EACL,aAAa,EACb,UAAU,EACV,QAAQ,EACR,GAAG,EACH,MAAM,EACN,IAAI,EACJ,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/jsx/dom/native.d.ts
CHANGED
|
@@ -3,11 +3,32 @@ export type NotifyOptions = {
|
|
|
3
3
|
body?: string;
|
|
4
4
|
sound?: boolean;
|
|
5
5
|
};
|
|
6
|
+
export type OpenFileOptions = {
|
|
7
|
+
title?: string;
|
|
8
|
+
multiple?: boolean;
|
|
9
|
+
directory?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export type SaveFileOptions = {
|
|
12
|
+
title?: string;
|
|
13
|
+
defaultName?: string;
|
|
14
|
+
};
|
|
15
|
+
export type DirEntry = {
|
|
16
|
+
name: string;
|
|
17
|
+
isDirectory: boolean;
|
|
18
|
+
isFile: boolean;
|
|
19
|
+
};
|
|
6
20
|
type Bridge = {
|
|
7
21
|
notify(opts: NotifyOptions): Promise<void>;
|
|
8
22
|
clipboardWrite(text: string): Promise<void>;
|
|
9
23
|
clipboardRead(): Promise<string>;
|
|
10
24
|
openExternal(target: string): Promise<void>;
|
|
25
|
+
fsReadFile(path: string): Promise<string>;
|
|
26
|
+
fsWriteFile(path: string, content: string): Promise<void>;
|
|
27
|
+
fsExists(path: string): Promise<boolean>;
|
|
28
|
+
fsMkdir(path: string): Promise<void>;
|
|
29
|
+
fsReadDir(path: string): Promise<DirEntry[]>;
|
|
30
|
+
openFile(opts?: OpenFileOptions): Promise<string[]>;
|
|
31
|
+
saveFile(opts?: SaveFileOptions): Promise<string>;
|
|
11
32
|
};
|
|
12
33
|
declare global {
|
|
13
34
|
interface Window {
|
|
@@ -41,5 +62,34 @@ export declare function useClipboard(): {
|
|
|
41
62
|
export declare function useShell(): {
|
|
42
63
|
openExternal(target: string): Promise<void>;
|
|
43
64
|
};
|
|
65
|
+
/**
|
|
66
|
+
* File system access (server-side, via the native bridge).
|
|
67
|
+
*
|
|
68
|
+
* const fs = useFs()
|
|
69
|
+
* const text = await fs.readFile('/path/to/file.txt')
|
|
70
|
+
* await fs.writeFile('/path/out.txt', 'hello')
|
|
71
|
+
* if (await fs.exists('/path')) { ... }
|
|
72
|
+
* const entries = await fs.readDir('/path')
|
|
73
|
+
*/
|
|
74
|
+
export declare function useFs(): {
|
|
75
|
+
readFile(path: string): Promise<string>;
|
|
76
|
+
writeFile(path: string, content: string): Promise<void>;
|
|
77
|
+
exists(path: string): Promise<boolean>;
|
|
78
|
+
mkdir(path: string): Promise<void>;
|
|
79
|
+
readDir(path: string): Promise<DirEntry[]>;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Native file dialogs.
|
|
83
|
+
*
|
|
84
|
+
* const dialog = useDialog()
|
|
85
|
+
* const paths = await dialog.openFile({ title: 'Choose…', multiple: true })
|
|
86
|
+
* const out = await dialog.saveFile({ defaultName: 'untitled.md' })
|
|
87
|
+
* const folder = await dialog.openDirectory()
|
|
88
|
+
*/
|
|
89
|
+
export declare function useDialog(): {
|
|
90
|
+
openFile(opts?: OpenFileOptions): Promise<string[]>;
|
|
91
|
+
openDirectory(opts?: Omit<OpenFileOptions, "directory">): Promise<string>;
|
|
92
|
+
saveFile(opts?: SaveFileOptions): Promise<string>;
|
|
93
|
+
};
|
|
44
94
|
export {};
|
|
45
95
|
//# sourceMappingURL=native.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../src/jsx/dom/native.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAChC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../src/jsx/dom/native.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAChC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAClD,CAAA;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB;CACF;AAOD;;;;;GAKG;AACH,wBAAgB,eAAe,KACf,MAAM,aAAa,KAAG,OAAO,CAAC,IAAI,CAAC,CASlD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY;YAEV,OAAO,CAAC,MAAM,CAAC;gBAUX,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAU3C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ;yBAEO,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAUpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK;mBAEI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;oBAUvB,MAAM,WAAW,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;iBAS1C,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;gBAS1B,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;kBASpB,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;EAWnD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS;oBAEA,eAAe,GAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;yBAUnC,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,GAAQ,OAAO,CAAC,MAAM,CAAC;oBAW9D,eAAe,GAAQ,OAAO,CAAC,MAAM,CAAC;EAW9D"}
|
package/dist/jsx/dom/native.js
CHANGED
|
@@ -85,4 +85,123 @@ export function useShell() {
|
|
|
85
85
|
},
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* File system access (server-side, via the native bridge).
|
|
90
|
+
*
|
|
91
|
+
* const fs = useFs()
|
|
92
|
+
* const text = await fs.readFile('/path/to/file.txt')
|
|
93
|
+
* await fs.writeFile('/path/out.txt', 'hello')
|
|
94
|
+
* if (await fs.exists('/path')) { ... }
|
|
95
|
+
* const entries = await fs.readDir('/path')
|
|
96
|
+
*/
|
|
97
|
+
export function useFs() {
|
|
98
|
+
return {
|
|
99
|
+
async readFile(path) {
|
|
100
|
+
const b = bridge();
|
|
101
|
+
if (!b)
|
|
102
|
+
return '';
|
|
103
|
+
try {
|
|
104
|
+
return await b.fsReadFile(path);
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
console.warn('[murasaki] fs.readFile failed:', e);
|
|
108
|
+
return '';
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
async writeFile(path, content) {
|
|
112
|
+
const b = bridge();
|
|
113
|
+
if (!b)
|
|
114
|
+
return;
|
|
115
|
+
try {
|
|
116
|
+
await b.fsWriteFile(path, content);
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
console.warn('[murasaki] fs.writeFile failed:', e);
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
async exists(path) {
|
|
123
|
+
const b = bridge();
|
|
124
|
+
if (!b)
|
|
125
|
+
return false;
|
|
126
|
+
try {
|
|
127
|
+
return await b.fsExists(path);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
async mkdir(path) {
|
|
134
|
+
const b = bridge();
|
|
135
|
+
if (!b)
|
|
136
|
+
return;
|
|
137
|
+
try {
|
|
138
|
+
await b.fsMkdir(path);
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
console.warn('[murasaki] fs.mkdir failed:', e);
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
async readDir(path) {
|
|
145
|
+
const b = bridge();
|
|
146
|
+
if (!b)
|
|
147
|
+
return [];
|
|
148
|
+
try {
|
|
149
|
+
return await b.fsReadDir(path);
|
|
150
|
+
}
|
|
151
|
+
catch (e) {
|
|
152
|
+
console.warn('[murasaki] fs.readDir failed:', e);
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Native file dialogs.
|
|
160
|
+
*
|
|
161
|
+
* const dialog = useDialog()
|
|
162
|
+
* const paths = await dialog.openFile({ title: 'Choose…', multiple: true })
|
|
163
|
+
* const out = await dialog.saveFile({ defaultName: 'untitled.md' })
|
|
164
|
+
* const folder = await dialog.openDirectory()
|
|
165
|
+
*/
|
|
166
|
+
export function useDialog() {
|
|
167
|
+
return {
|
|
168
|
+
async openFile(opts = {}) {
|
|
169
|
+
const b = bridge();
|
|
170
|
+
if (!b)
|
|
171
|
+
return [];
|
|
172
|
+
try {
|
|
173
|
+
return await b.openFile(opts);
|
|
174
|
+
}
|
|
175
|
+
catch (e) {
|
|
176
|
+
console.warn('[murasaki] dialog.openFile failed:', e);
|
|
177
|
+
return [];
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
async openDirectory(opts = {}) {
|
|
181
|
+
const b = bridge();
|
|
182
|
+
if (!b)
|
|
183
|
+
return '';
|
|
184
|
+
try {
|
|
185
|
+
const paths = await b.openFile({ ...opts, directory: true, multiple: false });
|
|
186
|
+
return paths[0] ?? '';
|
|
187
|
+
}
|
|
188
|
+
catch (e) {
|
|
189
|
+
console.warn('[murasaki] dialog.openDirectory failed:', e);
|
|
190
|
+
return '';
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
async saveFile(opts = {}) {
|
|
194
|
+
const b = bridge();
|
|
195
|
+
if (!b)
|
|
196
|
+
return '';
|
|
197
|
+
try {
|
|
198
|
+
return await b.saveFile(opts);
|
|
199
|
+
}
|
|
200
|
+
catch (e) {
|
|
201
|
+
console.warn('[murasaki] dialog.saveFile failed:', e);
|
|
202
|
+
return '';
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
}
|
|
88
207
|
//# sourceMappingURL=native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../../src/jsx/dom/native.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,uEAAuE;AACvE,oEAAoE;AACpE,EAAE;AACF,qEAAqE;AACrE,sEAAsE;AACtE,8BAA8B;
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../../src/jsx/dom/native.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/native.d.ts
CHANGED
|
@@ -3,6 +3,24 @@ type NotifyOptions = {
|
|
|
3
3
|
body?: string;
|
|
4
4
|
sound?: boolean;
|
|
5
5
|
};
|
|
6
|
+
type OpenFileOptions = {
|
|
7
|
+
/** Window title for the dialog */
|
|
8
|
+
title?: string;
|
|
9
|
+
/** Allow selecting multiple files */
|
|
10
|
+
multiple?: boolean;
|
|
11
|
+
/** Allow selecting folders instead of files */
|
|
12
|
+
directory?: boolean;
|
|
13
|
+
};
|
|
14
|
+
type SaveFileOptions = {
|
|
15
|
+
title?: string;
|
|
16
|
+
/** Suggested filename (and extension) */
|
|
17
|
+
defaultName?: string;
|
|
18
|
+
};
|
|
19
|
+
type DirEntry = {
|
|
20
|
+
name: string;
|
|
21
|
+
isDirectory: boolean;
|
|
22
|
+
isFile: boolean;
|
|
23
|
+
};
|
|
6
24
|
export declare const nativeBridge: {
|
|
7
25
|
/** Show an OS notification. */
|
|
8
26
|
notify(opts: NotifyOptions): Promise<void>;
|
|
@@ -12,6 +30,20 @@ export declare const nativeBridge: {
|
|
|
12
30
|
clipboardRead(): Promise<string>;
|
|
13
31
|
/** Open a URL or file path in the system default handler (browser, etc). */
|
|
14
32
|
openExternal(target: string): Promise<void>;
|
|
33
|
+
/** Read a UTF-8 file. */
|
|
34
|
+
fsReadFile(path: string): Promise<string>;
|
|
35
|
+
/** Write a UTF-8 file (creates or overwrites). */
|
|
36
|
+
fsWriteFile(path: string, content: string): Promise<void>;
|
|
37
|
+
/** Check if a path exists. */
|
|
38
|
+
fsExists(path: string): Promise<boolean>;
|
|
39
|
+
/** Create a directory (recursive). */
|
|
40
|
+
fsMkdir(path: string): Promise<void>;
|
|
41
|
+
/** List a directory's contents. */
|
|
42
|
+
fsReadDir(path: string): Promise<DirEntry[]>;
|
|
43
|
+
/** Open a file picker. Returns selected paths (empty if cancelled). */
|
|
44
|
+
openFile(opts?: OpenFileOptions): Promise<string[]>;
|
|
45
|
+
/** Save dialog. Returns selected path (empty if cancelled). */
|
|
46
|
+
saveFile(opts?: SaveFileOptions): Promise<string>;
|
|
15
47
|
/** Murasaki version (debug/probe). */
|
|
16
48
|
version: string;
|
|
17
49
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/runtime/native.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/runtime/native.ts"],"names":[],"mappings":"AAkBA,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,KAAK,QAAQ,GAAG;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAoCD,eAAO,MAAM,YAAY;IACvB,+BAA+B;iBACZ,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBhD,yCAAyC;yBACd,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjD,2CAA2C;qBACpB,OAAO,CAAC,MAAM,CAAC;IAYtC,4EAA4E;yBACjD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjD,yBAAyB;qBACF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/C,kDAAkD;sBAC1B,MAAM,WAAW,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D,8BAA8B;mBACT,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS9C,sCAAsC;kBAClB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,mCAAmC;oBACb,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAUlD,uEAAuE;oBAClD,eAAe,GAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;IAM7D,+DAA+D;oBAC1C,eAAe,GAAQ,OAAO,CAAC,MAAM,CAAC;IAM3D,sCAAsC;;CAEvC,CAAA"}
|
package/dist/runtime/native.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
// macOS-first; Windows/Linux paths are best-effort. All values & arguments
|
|
8
8
|
// must be JSON-serializable.
|
|
9
9
|
import { spawn } from 'node:child_process';
|
|
10
|
+
import { mkdir as fsMkdir, readFile as fsReadFile, readdir as fsReaddir, stat as fsStat, writeFile as fsWriteFile, } from 'node:fs/promises';
|
|
10
11
|
function runSilent(cmd, args, stdin) {
|
|
11
12
|
return new Promise((resolve, reject) => {
|
|
12
13
|
const proc = spawn(cmd, args, { stdio: ['pipe', 'ignore', 'ignore'] });
|
|
@@ -105,7 +106,155 @@ export const nativeBridge = {
|
|
|
105
106
|
const args = process.platform === 'win32' ? ['/c', 'start', '', target] : [target];
|
|
106
107
|
return runSilent(cmd, args);
|
|
107
108
|
},
|
|
109
|
+
// ── File system ────────────────────────────────────────────────────
|
|
110
|
+
/** Read a UTF-8 file. */
|
|
111
|
+
async fsReadFile(path) {
|
|
112
|
+
return fsReadFile(path, 'utf8');
|
|
113
|
+
},
|
|
114
|
+
/** Write a UTF-8 file (creates or overwrites). */
|
|
115
|
+
async fsWriteFile(path, content) {
|
|
116
|
+
return fsWriteFile(path, content, 'utf8');
|
|
117
|
+
},
|
|
118
|
+
/** Check if a path exists. */
|
|
119
|
+
async fsExists(path) {
|
|
120
|
+
try {
|
|
121
|
+
await fsStat(path);
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
/** Create a directory (recursive). */
|
|
129
|
+
async fsMkdir(path) {
|
|
130
|
+
await fsMkdir(path, { recursive: true });
|
|
131
|
+
},
|
|
132
|
+
/** List a directory's contents. */
|
|
133
|
+
async fsReadDir(path) {
|
|
134
|
+
const entries = await fsReaddir(path, { withFileTypes: true });
|
|
135
|
+
return entries.map((e) => ({
|
|
136
|
+
name: e.name,
|
|
137
|
+
isDirectory: e.isDirectory(),
|
|
138
|
+
isFile: e.isFile(),
|
|
139
|
+
}));
|
|
140
|
+
},
|
|
141
|
+
// ── File dialogs ──────────────────────────────────────────────────
|
|
142
|
+
/** Open a file picker. Returns selected paths (empty if cancelled). */
|
|
143
|
+
async openFile(opts = {}) {
|
|
144
|
+
if (process.platform === 'darwin')
|
|
145
|
+
return openFileMac(opts);
|
|
146
|
+
if (process.platform === 'win32')
|
|
147
|
+
return openFileWindows(opts);
|
|
148
|
+
return openFileLinux(opts);
|
|
149
|
+
},
|
|
150
|
+
/** Save dialog. Returns selected path (empty if cancelled). */
|
|
151
|
+
async saveFile(opts = {}) {
|
|
152
|
+
if (process.platform === 'darwin')
|
|
153
|
+
return saveFileMac(opts);
|
|
154
|
+
if (process.platform === 'win32')
|
|
155
|
+
return saveFileWindows(opts);
|
|
156
|
+
return saveFileLinux(opts);
|
|
157
|
+
},
|
|
108
158
|
/** Murasaki version (debug/probe). */
|
|
109
|
-
version: '0.
|
|
159
|
+
version: '0.6.0',
|
|
110
160
|
};
|
|
161
|
+
// ── Dialog helpers (per-platform) ──────────────────────────────────
|
|
162
|
+
async function openFileMac(opts) {
|
|
163
|
+
const what = opts.directory ? 'choose folder' : 'choose file';
|
|
164
|
+
const withMultiple = opts.multiple ? ' with multiple selections allowed' : '';
|
|
165
|
+
const withTitle = opts.title ? ` with prompt "${escapeAppleScript(opts.title)}"` : '';
|
|
166
|
+
// AppleScript: returns POSIX path(s); on cancel, throws — we catch.
|
|
167
|
+
const script = opts.multiple
|
|
168
|
+
? `set theFiles to ${what}${withTitle}${withMultiple}
|
|
169
|
+
set thePaths to {}
|
|
170
|
+
repeat with f in theFiles
|
|
171
|
+
set end of thePaths to POSIX path of f
|
|
172
|
+
end repeat
|
|
173
|
+
set AppleScript's text item delimiters to "\\n"
|
|
174
|
+
return thePaths as text`
|
|
175
|
+
: `POSIX path of (${what}${withTitle})`;
|
|
176
|
+
try {
|
|
177
|
+
const out = await runCapture('osascript', ['-e', script]);
|
|
178
|
+
return out
|
|
179
|
+
.trim()
|
|
180
|
+
.split('\n')
|
|
181
|
+
.filter((p) => p.length > 0);
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return [];
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async function saveFileMac(opts) {
|
|
188
|
+
const withTitle = opts.title ? ` with prompt "${escapeAppleScript(opts.title)}"` : '';
|
|
189
|
+
const withDefault = opts.defaultName
|
|
190
|
+
? ` default name "${escapeAppleScript(opts.defaultName)}"`
|
|
191
|
+
: '';
|
|
192
|
+
const script = `POSIX path of (choose file name${withTitle}${withDefault})`;
|
|
193
|
+
try {
|
|
194
|
+
return (await runCapture('osascript', ['-e', script])).trim();
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
return '';
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
async function openFileWindows(_opts) {
|
|
201
|
+
// Best-effort: minimal PowerShell. Production-ready dialogs are a TODO.
|
|
202
|
+
const ps = `Add-Type -AssemblyName System.Windows.Forms
|
|
203
|
+
$d = New-Object System.Windows.Forms.OpenFileDialog
|
|
204
|
+
$d.Multiselect = $true
|
|
205
|
+
if ($d.ShowDialog() -eq 'OK') { $d.FileNames -join "\`n" }`;
|
|
206
|
+
try {
|
|
207
|
+
const out = await runCapture('powershell', ['-Command', ps]);
|
|
208
|
+
return out
|
|
209
|
+
.trim()
|
|
210
|
+
.split('\n')
|
|
211
|
+
.filter((p) => p.length > 0);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return [];
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async function saveFileWindows(_opts) {
|
|
218
|
+
const ps = `Add-Type -AssemblyName System.Windows.Forms
|
|
219
|
+
$d = New-Object System.Windows.Forms.SaveFileDialog
|
|
220
|
+
if ($d.ShowDialog() -eq 'OK') { $d.FileName }`;
|
|
221
|
+
try {
|
|
222
|
+
return (await runCapture('powershell', ['-Command', ps])).trim();
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return '';
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
async function openFileLinux(opts) {
|
|
229
|
+
const args = ['--file-selection'];
|
|
230
|
+
if (opts.multiple)
|
|
231
|
+
args.push('--multiple', '--separator=\n');
|
|
232
|
+
if (opts.directory)
|
|
233
|
+
args.push('--directory');
|
|
234
|
+
if (opts.title)
|
|
235
|
+
args.push(`--title=${opts.title}`);
|
|
236
|
+
try {
|
|
237
|
+
const out = await runCapture('zenity', args);
|
|
238
|
+
return out
|
|
239
|
+
.trim()
|
|
240
|
+
.split('\n')
|
|
241
|
+
.filter((p) => p.length > 0);
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return [];
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
async function saveFileLinux(opts) {
|
|
248
|
+
const args = ['--file-selection', '--save', '--confirm-overwrite'];
|
|
249
|
+
if (opts.title)
|
|
250
|
+
args.push(`--title=${opts.title}`);
|
|
251
|
+
if (opts.defaultName)
|
|
252
|
+
args.push(`--filename=${opts.defaultName}`);
|
|
253
|
+
try {
|
|
254
|
+
return (await runCapture('zenity', args)).trim();
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
return '';
|
|
258
|
+
}
|
|
259
|
+
}
|
|
111
260
|
//# sourceMappingURL=native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/runtime/native.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,2DAA2D;AAC3D,uCAAuC;AACvC,uEAAuE;AACvE,EAAE;AACF,2EAA2E;AAC3E,6BAA6B;AAE7B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/runtime/native.ts"],"names":[],"mappings":"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"}
|