remove build script
This commit is contained in:
parent
20442c1f43
commit
c9fa93de72
21 changed files with 4368 additions and 33 deletions
230
src/shell.js
Normal file
230
src/shell.js
Normal file
|
@ -0,0 +1,230 @@
|
|||
// tauri/tooling/api/src/tauri.ts
|
||||
function uid() {
|
||||
return window.crypto.getRandomValues(new Uint32Array(1))[0];
|
||||
}
|
||||
function transformCallback(callback, once = false) {
|
||||
const identifier = uid();
|
||||
const prop = `_${identifier}`;
|
||||
Object.defineProperty(window, prop, {
|
||||
value: (result) => {
|
||||
if (once) {
|
||||
Reflect.deleteProperty(window, prop);
|
||||
}
|
||||
return callback?.(result);
|
||||
},
|
||||
writable: false,
|
||||
configurable: true
|
||||
});
|
||||
return identifier;
|
||||
}
|
||||
async function invoke(cmd, args = {}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const callback = transformCallback((e) => {
|
||||
resolve(e);
|
||||
Reflect.deleteProperty(window, `_${error}`);
|
||||
}, true);
|
||||
const error = transformCallback((e) => {
|
||||
reject(e);
|
||||
Reflect.deleteProperty(window, `_${callback}`);
|
||||
}, true);
|
||||
window.__TAURI_IPC__({
|
||||
cmd,
|
||||
callback,
|
||||
error,
|
||||
...args
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// tauri/tooling/api/src/helpers/tauri.ts
|
||||
async function invokeTauriCommand(command) {
|
||||
return invoke("tauri", command);
|
||||
}
|
||||
|
||||
// tauri/tooling/api/src/shell.ts
|
||||
async function execute(onEvent, program, args = [], options) {
|
||||
if (typeof args === "object") {
|
||||
Object.freeze(args);
|
||||
}
|
||||
return invokeTauriCommand({
|
||||
__tauriModule: "Shell",
|
||||
message: {
|
||||
cmd: "execute",
|
||||
program,
|
||||
args,
|
||||
options,
|
||||
onEventFn: transformCallback(onEvent)
|
||||
}
|
||||
});
|
||||
}
|
||||
var EventEmitter = class {
|
||||
constructor() {
|
||||
this.eventListeners = /* @__PURE__ */ Object.create(null);
|
||||
}
|
||||
addListener(eventName, listener) {
|
||||
return this.on(eventName, listener);
|
||||
}
|
||||
removeListener(eventName, listener) {
|
||||
return this.off(eventName, listener);
|
||||
}
|
||||
on(eventName, listener) {
|
||||
if (eventName in this.eventListeners) {
|
||||
this.eventListeners[eventName].push(listener);
|
||||
} else {
|
||||
this.eventListeners[eventName] = [listener];
|
||||
}
|
||||
return this;
|
||||
}
|
||||
once(eventName, listener) {
|
||||
const wrapper = (...args) => {
|
||||
this.removeListener(eventName, wrapper);
|
||||
listener(...args);
|
||||
};
|
||||
return this.addListener(eventName, wrapper);
|
||||
}
|
||||
off(eventName, listener) {
|
||||
if (eventName in this.eventListeners) {
|
||||
this.eventListeners[eventName] = this.eventListeners[eventName].filter(
|
||||
(l) => l !== listener
|
||||
);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
removeAllListeners(event) {
|
||||
if (event) {
|
||||
delete this.eventListeners[event];
|
||||
} else {
|
||||
this.eventListeners = /* @__PURE__ */ Object.create(null);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
emit(eventName, ...args) {
|
||||
if (eventName in this.eventListeners) {
|
||||
const listeners = this.eventListeners[eventName];
|
||||
for (const listener of listeners)
|
||||
listener(...args);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
listenerCount(eventName) {
|
||||
if (eventName in this.eventListeners)
|
||||
return this.eventListeners[eventName].length;
|
||||
return 0;
|
||||
}
|
||||
prependListener(eventName, listener) {
|
||||
if (eventName in this.eventListeners) {
|
||||
this.eventListeners[eventName].unshift(listener);
|
||||
} else {
|
||||
this.eventListeners[eventName] = [listener];
|
||||
}
|
||||
return this;
|
||||
}
|
||||
prependOnceListener(eventName, listener) {
|
||||
const wrapper = (...args) => {
|
||||
this.removeListener(eventName, wrapper);
|
||||
listener(...args);
|
||||
};
|
||||
return this.prependListener(eventName, wrapper);
|
||||
}
|
||||
};
|
||||
var Child = class {
|
||||
constructor(pid) {
|
||||
this.pid = pid;
|
||||
}
|
||||
async write(data) {
|
||||
return invokeTauriCommand({
|
||||
__tauriModule: "Shell",
|
||||
message: {
|
||||
cmd: "stdinWrite",
|
||||
pid: this.pid,
|
||||
buffer: typeof data === "string" ? data : Array.from(data)
|
||||
}
|
||||
});
|
||||
}
|
||||
async kill() {
|
||||
return invokeTauriCommand({
|
||||
__tauriModule: "Shell",
|
||||
message: {
|
||||
cmd: "killChild",
|
||||
pid: this.pid
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
var Command = class extends EventEmitter {
|
||||
constructor(program, args = [], options) {
|
||||
super();
|
||||
this.stdout = new EventEmitter();
|
||||
this.stderr = new EventEmitter();
|
||||
this.program = program;
|
||||
this.args = typeof args === "string" ? [args] : args;
|
||||
this.options = options ?? {};
|
||||
}
|
||||
static sidecar(program, args = [], options) {
|
||||
const instance = new Command(program, args, options);
|
||||
instance.options.sidecar = true;
|
||||
return instance;
|
||||
}
|
||||
async spawn() {
|
||||
return execute(
|
||||
(event) => {
|
||||
switch (event.event) {
|
||||
case "Error":
|
||||
this.emit("error", event.payload);
|
||||
break;
|
||||
case "Terminated":
|
||||
this.emit("close", event.payload);
|
||||
break;
|
||||
case "Stdout":
|
||||
this.stdout.emit("data", event.payload);
|
||||
break;
|
||||
case "Stderr":
|
||||
this.stderr.emit("data", event.payload);
|
||||
break;
|
||||
}
|
||||
},
|
||||
this.program,
|
||||
this.args,
|
||||
this.options
|
||||
).then((pid) => new Child(pid));
|
||||
}
|
||||
async execute() {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.on("error", reject);
|
||||
const stdout = [];
|
||||
const stderr = [];
|
||||
this.stdout.on("data", (line) => {
|
||||
stdout.push(line);
|
||||
});
|
||||
this.stderr.on("data", (line) => {
|
||||
stderr.push(line);
|
||||
});
|
||||
this.on("close", (payload) => {
|
||||
resolve({
|
||||
code: payload.code,
|
||||
signal: payload.signal,
|
||||
stdout: stdout.join("\n"),
|
||||
stderr: stderr.join("\n")
|
||||
});
|
||||
});
|
||||
this.spawn().catch(reject);
|
||||
});
|
||||
}
|
||||
};
|
||||
async function open(path, openWith) {
|
||||
return invokeTauriCommand({
|
||||
__tauriModule: "Shell",
|
||||
message: {
|
||||
cmd: "open",
|
||||
path,
|
||||
with: openWith
|
||||
}
|
||||
});
|
||||
}
|
||||
export {
|
||||
Child,
|
||||
Command,
|
||||
EventEmitter,
|
||||
open
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue