yeow-api 0.2.7 → 0.2.8
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/package.json +3 -4
- package/src/fs.ts +40 -21
- package/src/http.ts +44 -50
- package/src/index.ts +2 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yeow-api",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "Yeow API �?TypeScript OOP wrappers over the task protocol",
|
|
3
|
+
"version": "0.2.8",
|
|
4
|
+
"description": "Yeow API �?TypeScript OOP wrappers over the task protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.ts",
|
|
7
7
|
"types": "./src/index.ts",
|
|
@@ -9,5 +9,4 @@
|
|
|
9
9
|
"src/"
|
|
10
10
|
],
|
|
11
11
|
"license": "MIT"
|
|
12
|
-
}
|
|
13
|
-
|
|
12
|
+
}
|
package/src/fs.ts
CHANGED
|
@@ -1,33 +1,52 @@
|
|
|
1
|
-
|
|
1
|
+
function _sendFs(payload) {
|
|
2
|
+
const raw = $send('fs', JSON.stringify(payload));
|
|
3
|
+
if (!raw) return undefined;
|
|
4
|
+
const r = JSON.parse(raw);
|
|
5
|
+
if (r.err) throw new Error(r.err);
|
|
6
|
+
return r;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function readFile(path) {
|
|
10
|
+
return new Promise((resolve, reject) => {
|
|
11
|
+
try { const r = _sendFs({ t: 'readFile', p: { path } }); resolve(r.data); } catch(e) { reject(e); }
|
|
12
|
+
});
|
|
13
|
+
}
|
|
2
14
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
15
|
+
export function readFileSync(path) {
|
|
16
|
+
return _sendFs({ t: 'readFile', p: { path } }).data;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function writeFile(path, data) {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
try { _sendFs({ t: 'writeFile', p: { path, data } }); resolve(); } catch(e) { reject(e); }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
7
24
|
|
|
8
|
-
export function
|
|
9
|
-
|
|
25
|
+
export function writeFileSync(path, data) {
|
|
26
|
+
_sendFs({ t: 'writeFile', p: { path, data } });
|
|
10
27
|
}
|
|
11
28
|
|
|
12
|
-
export function
|
|
13
|
-
|
|
29
|
+
export function existsSync(path) {
|
|
30
|
+
const r = _sendFs({ t: 'exists', p: { path } });
|
|
31
|
+
return r === true || String(r) === 'true';
|
|
14
32
|
}
|
|
15
33
|
|
|
16
|
-
export function
|
|
17
|
-
return
|
|
34
|
+
export function deleteFile(path) {
|
|
35
|
+
return new Promise((resolve, reject) => {
|
|
36
|
+
try { const r = _sendFs({ t: 'delete', p: { path } }); resolve(r === true || String(r) === 'true'); } catch(e) { reject(e); }
|
|
37
|
+
});
|
|
18
38
|
}
|
|
19
39
|
|
|
20
|
-
export function
|
|
21
|
-
|
|
40
|
+
export function mkdir(path) {
|
|
41
|
+
return new Promise((resolve, reject) => {
|
|
42
|
+
try { _sendFs({ t: 'mkdir', p: { path } }); resolve(); } catch(e) { reject(e); }
|
|
43
|
+
});
|
|
22
44
|
}
|
|
23
45
|
|
|
24
|
-
export function
|
|
25
|
-
return
|
|
46
|
+
export function list(path) {
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
try { const r = _sendFs({ t: 'list', p: { path } }); resolve(r); } catch(e) { reject(e); }
|
|
49
|
+
});
|
|
26
50
|
}
|
|
27
51
|
|
|
28
|
-
export const fs = {
|
|
29
|
-
readFile, readFileSync,
|
|
30
|
-
writeFile, writeFileSync,
|
|
31
|
-
existsSync,
|
|
32
|
-
// ... more to come
|
|
33
|
-
};
|
|
52
|
+
export const fs = { readFile, readFileSync, writeFile, writeFileSync, existsSync, deleteFile, mkdir, list };
|
package/src/http.ts
CHANGED
|
@@ -1,69 +1,63 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
const _servers = new Set();
|
|
2
|
+
|
|
3
|
+
function _sendHttp(payload) {
|
|
4
|
+
const raw = $send('http', JSON.stringify(payload));
|
|
5
|
+
if (!raw) return undefined;
|
|
6
|
+
const r = JSON.parse(raw);
|
|
7
|
+
if (r.err) throw new Error(r.err);
|
|
8
|
+
return r;
|
|
9
|
+
}
|
|
4
10
|
|
|
5
|
-
|
|
6
|
-
* Start an HTTP server on a random available port.
|
|
7
|
-
* The callback receives: { connId, serverId, method, path, query, headers, body }
|
|
8
|
-
* Response is sent via http.respond(task: { serverId, connId, status?, headers?, body? })
|
|
9
|
-
*/
|
|
10
|
-
export function listen(
|
|
11
|
-
callback: (req: HttpRequest) => void,
|
|
12
|
-
port?: number
|
|
13
|
-
): Promise<{ serverId: string; port: number }> {
|
|
11
|
+
export function listen(callback, port) {
|
|
14
12
|
return new Promise((resolve, reject) => {
|
|
15
|
-
const cbId =
|
|
13
|
+
const cbId = _registerCallback((payload) => {
|
|
16
14
|
callback(payload);
|
|
17
15
|
}, { persistent: true });
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
try {
|
|
18
|
+
const result = _sendHttp({ t: 'listen', p: {
|
|
19
|
+
pluginName: __plugin?.name || 'unknown',
|
|
20
|
+
callbackId: String(cbId),
|
|
21
|
+
port: port || 0,
|
|
22
|
+
}});
|
|
23
|
+
_servers.add(result.serverId);
|
|
24
|
+
resolve(result);
|
|
25
|
+
} catch(e) { reject(e); }
|
|
27
26
|
});
|
|
28
27
|
}
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
serverId,
|
|
38
|
-
connId,
|
|
39
|
-
status: options.status || 200,
|
|
40
|
-
headers: options.headers || {},
|
|
41
|
-
body: options.body || '',
|
|
42
|
-
}) as Promise<void>;
|
|
29
|
+
export function respond(serverId, connId, opts = {}) {
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
try {
|
|
32
|
+
_sendHttp({ t: 'respond', p: { serverId, connId, ...opts }});
|
|
33
|
+
resolve();
|
|
34
|
+
} catch(e) { reject(e); }
|
|
35
|
+
});
|
|
43
36
|
}
|
|
44
37
|
|
|
45
|
-
|
|
46
|
-
* Stop an HTTP server and release its port.
|
|
47
|
-
*/
|
|
48
|
-
export function close(serverId: string): Promise<void> {
|
|
38
|
+
export function close(serverId) {
|
|
49
39
|
_servers.delete(serverId);
|
|
50
|
-
return
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
try { _sendHttp({ t: 'close', p: { serverId }}); resolve(); } catch(e) { reject(e); }
|
|
42
|
+
});
|
|
51
43
|
}
|
|
52
44
|
|
|
53
|
-
|
|
54
|
-
(globalThis as any)._registerCallback(() => {
|
|
45
|
+
_registerCallback(() => {
|
|
55
46
|
for (const id of _servers) {
|
|
56
|
-
try {
|
|
47
|
+
try { _sendHttp({ t: 'close', p: { serverId: id }}); } catch {}
|
|
57
48
|
}
|
|
58
49
|
_servers.clear();
|
|
59
50
|
}, { persistent: true });
|
|
60
51
|
|
|
61
|
-
export
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
52
|
+
export function request(url, opts = {}) {
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
try {
|
|
55
|
+
const result = _sendHttp({ t: 'request', p: { url, ...opts }});
|
|
56
|
+
resolve(result);
|
|
57
|
+
} catch(e) { reject(e); }
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function requestSync(url, opts = {}) {
|
|
62
|
+
return _sendHttp({ t: 'request', p: { url, ...opts }});
|
|
69
63
|
}
|
package/src/index.ts
CHANGED
|
@@ -5,3 +5,5 @@ export { registerCommand } from './command.js';
|
|
|
5
5
|
export type { CommandOptions, CommandPayload, CommandSender } from './command.js';
|
|
6
6
|
export { eventOn, eventOff } from './event.js';
|
|
7
7
|
export { broadcast, getMotd, getVersion } from './server.js';
|
|
8
|
+
export { fs, readFile, readFileSync, writeFile, writeFileSync, existsSync, deleteFile, mkdir, list } from './fs.js';
|
|
9
|
+
export { listen, respond, close, request, requestSync } from './http.js';
|