@tybys/wasm-util 0.1.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.
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRights = exports.TTY_INHERITING = exports.TTY_BASE = exports.SOCKET_INHERITING = exports.SOCKET_BASE = exports.DIRECTORY_INHERITING = exports.DIRECTORY_BASE = exports.REGULAR_FILE_INHERITING = exports.REGULAR_FILE_BASE = exports.CHARACTER_DEVICE_INHERITING = exports.CHARACTER_DEVICE_BASE = exports.BLOCK_DEVICE_INHERITING = exports.BLOCK_DEVICE_BASE = exports.RIGHTS_ALL = void 0;
4
+ const error_1 = require("./error");
5
+ const types_1 = require("./types");
6
+ exports.RIGHTS_ALL = types_1.WasiRights.FD_DATASYNC |
7
+ types_1.WasiRights.FD_READ |
8
+ types_1.WasiRights.FD_SEEK |
9
+ types_1.WasiRights.FD_FDSTAT_SET_FLAGS |
10
+ types_1.WasiRights.FD_SYNC |
11
+ types_1.WasiRights.FD_TELL |
12
+ types_1.WasiRights.FD_WRITE |
13
+ types_1.WasiRights.FD_ADVISE |
14
+ types_1.WasiRights.FD_ALLOCATE |
15
+ types_1.WasiRights.PATH_CREATE_DIRECTORY |
16
+ types_1.WasiRights.PATH_CREATE_FILE |
17
+ types_1.WasiRights.PATH_LINK_SOURCE |
18
+ types_1.WasiRights.PATH_LINK_TARGET |
19
+ types_1.WasiRights.PATH_OPEN |
20
+ types_1.WasiRights.FD_READDIR |
21
+ types_1.WasiRights.PATH_READLINK |
22
+ types_1.WasiRights.PATH_RENAME_SOURCE |
23
+ types_1.WasiRights.PATH_RENAME_TARGET |
24
+ types_1.WasiRights.PATH_FILESTAT_GET |
25
+ types_1.WasiRights.PATH_FILESTAT_SET_SIZE |
26
+ types_1.WasiRights.PATH_FILESTAT_SET_TIMES |
27
+ types_1.WasiRights.FD_FILESTAT_GET |
28
+ types_1.WasiRights.FD_FILESTAT_SET_TIMES |
29
+ types_1.WasiRights.FD_FILESTAT_SET_SIZE |
30
+ types_1.WasiRights.PATH_SYMLINK |
31
+ types_1.WasiRights.PATH_UNLINK_FILE |
32
+ types_1.WasiRights.PATH_REMOVE_DIRECTORY |
33
+ types_1.WasiRights.POLL_FD_READWRITE |
34
+ types_1.WasiRights.SOCK_SHUTDOWN;
35
+ exports.BLOCK_DEVICE_BASE = exports.RIGHTS_ALL;
36
+ exports.BLOCK_DEVICE_INHERITING = exports.RIGHTS_ALL;
37
+ exports.CHARACTER_DEVICE_BASE = exports.RIGHTS_ALL;
38
+ exports.CHARACTER_DEVICE_INHERITING = exports.RIGHTS_ALL;
39
+ exports.REGULAR_FILE_BASE = types_1.WasiRights.FD_DATASYNC |
40
+ types_1.WasiRights.FD_READ |
41
+ types_1.WasiRights.FD_SEEK |
42
+ types_1.WasiRights.FD_FDSTAT_SET_FLAGS |
43
+ types_1.WasiRights.FD_SYNC |
44
+ types_1.WasiRights.FD_TELL |
45
+ types_1.WasiRights.FD_WRITE |
46
+ types_1.WasiRights.FD_ADVISE |
47
+ types_1.WasiRights.FD_ALLOCATE |
48
+ types_1.WasiRights.FD_FILESTAT_GET |
49
+ types_1.WasiRights.FD_FILESTAT_SET_SIZE |
50
+ types_1.WasiRights.FD_FILESTAT_SET_TIMES |
51
+ types_1.WasiRights.POLL_FD_READWRITE;
52
+ exports.REGULAR_FILE_INHERITING = BigInt(0);
53
+ exports.DIRECTORY_BASE = types_1.WasiRights.FD_FDSTAT_SET_FLAGS |
54
+ types_1.WasiRights.FD_SYNC |
55
+ types_1.WasiRights.FD_ADVISE |
56
+ types_1.WasiRights.PATH_CREATE_DIRECTORY |
57
+ types_1.WasiRights.PATH_CREATE_FILE |
58
+ types_1.WasiRights.PATH_LINK_SOURCE |
59
+ types_1.WasiRights.PATH_LINK_TARGET |
60
+ types_1.WasiRights.PATH_OPEN |
61
+ types_1.WasiRights.FD_READDIR |
62
+ types_1.WasiRights.PATH_READLINK |
63
+ types_1.WasiRights.PATH_RENAME_SOURCE |
64
+ types_1.WasiRights.PATH_RENAME_TARGET |
65
+ types_1.WasiRights.PATH_FILESTAT_GET |
66
+ types_1.WasiRights.PATH_FILESTAT_SET_SIZE |
67
+ types_1.WasiRights.PATH_FILESTAT_SET_TIMES |
68
+ types_1.WasiRights.FD_FILESTAT_GET |
69
+ types_1.WasiRights.FD_FILESTAT_SET_TIMES |
70
+ types_1.WasiRights.PATH_SYMLINK |
71
+ types_1.WasiRights.PATH_UNLINK_FILE |
72
+ types_1.WasiRights.PATH_REMOVE_DIRECTORY |
73
+ types_1.WasiRights.POLL_FD_READWRITE;
74
+ exports.DIRECTORY_INHERITING = exports.DIRECTORY_BASE | exports.REGULAR_FILE_BASE;
75
+ exports.SOCKET_BASE = (types_1.WasiRights.FD_READ |
76
+ types_1.WasiRights.FD_FDSTAT_SET_FLAGS |
77
+ types_1.WasiRights.FD_WRITE |
78
+ types_1.WasiRights.FD_FILESTAT_GET |
79
+ types_1.WasiRights.POLL_FD_READWRITE |
80
+ types_1.WasiRights.SOCK_SHUTDOWN);
81
+ exports.SOCKET_INHERITING = exports.RIGHTS_ALL;
82
+ exports.TTY_BASE = types_1.WasiRights.FD_READ |
83
+ types_1.WasiRights.FD_FDSTAT_SET_FLAGS |
84
+ types_1.WasiRights.FD_WRITE |
85
+ types_1.WasiRights.FD_FILESTAT_GET |
86
+ types_1.WasiRights.POLL_FD_READWRITE;
87
+ exports.TTY_INHERITING = BigInt(0);
88
+ function getRights(stdio, fd, flags, type) {
89
+ const ret = {
90
+ base: BigInt(0),
91
+ inheriting: BigInt(0)
92
+ };
93
+ if (type === types_1.WasiFileType.UNKNOWN) {
94
+ throw new error_1.WasiError('Unknown file type', types_1.WasiErrno.EINVAL);
95
+ }
96
+ switch (type) {
97
+ case types_1.WasiFileType.REGULAR_FILE:
98
+ ret.base = exports.REGULAR_FILE_BASE;
99
+ ret.inheriting = exports.REGULAR_FILE_INHERITING;
100
+ break;
101
+ case types_1.WasiFileType.DIRECTORY:
102
+ ret.base = exports.DIRECTORY_BASE;
103
+ ret.inheriting = exports.DIRECTORY_INHERITING;
104
+ break;
105
+ case types_1.WasiFileType.SOCKET_STREAM:
106
+ case types_1.WasiFileType.SOCKET_DGRAM:
107
+ ret.base = exports.SOCKET_BASE;
108
+ ret.inheriting = exports.SOCKET_INHERITING;
109
+ break;
110
+ case types_1.WasiFileType.CHARACTER_DEVICE:
111
+ if (stdio.indexOf(fd) !== -1) {
112
+ ret.base = exports.TTY_BASE;
113
+ ret.inheriting = exports.TTY_INHERITING;
114
+ }
115
+ else {
116
+ ret.base = exports.CHARACTER_DEVICE_BASE;
117
+ ret.inheriting = exports.CHARACTER_DEVICE_INHERITING;
118
+ }
119
+ break;
120
+ case types_1.WasiFileType.BLOCK_DEVICE:
121
+ ret.base = exports.BLOCK_DEVICE_BASE;
122
+ ret.inheriting = exports.BLOCK_DEVICE_INHERITING;
123
+ break;
124
+ default:
125
+ ret.base = BigInt(0);
126
+ ret.inheriting = BigInt(0);
127
+ }
128
+ /* Disable read/write bits depending on access mode. */
129
+ const read_or_write_only = flags & (0 | 1 | 2);
130
+ if (read_or_write_only === 0) {
131
+ ret.base &= ~types_1.WasiRights.FD_WRITE;
132
+ }
133
+ else if (read_or_write_only === 1) {
134
+ ret.base &= ~types_1.WasiRights.FD_READ;
135
+ }
136
+ return ret;
137
+ }
138
+ exports.getRights = getRights;
139
+ //# sourceMappingURL=rights.js.map
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WasiFstFlag = exports.WasiClockid = exports.WasiFdFlag = exports.WasiFileControlFlag = exports.FileControlFlag = exports.WasiWhence = exports.WasiRights = exports.WasiFileType = exports.WasiErrno = void 0;
4
+ var WasiErrno;
5
+ (function (WasiErrno) {
6
+ WasiErrno[WasiErrno["ESUCCESS"] = 0] = "ESUCCESS";
7
+ WasiErrno[WasiErrno["E2BIG"] = 1] = "E2BIG";
8
+ WasiErrno[WasiErrno["EACCES"] = 2] = "EACCES";
9
+ WasiErrno[WasiErrno["EADDRINUSE"] = 3] = "EADDRINUSE";
10
+ WasiErrno[WasiErrno["EADDRNOTAVAIL"] = 4] = "EADDRNOTAVAIL";
11
+ WasiErrno[WasiErrno["EAFNOSUPPORT"] = 5] = "EAFNOSUPPORT";
12
+ WasiErrno[WasiErrno["EAGAIN"] = 6] = "EAGAIN";
13
+ WasiErrno[WasiErrno["EALREADY"] = 7] = "EALREADY";
14
+ WasiErrno[WasiErrno["EBADF"] = 8] = "EBADF";
15
+ WasiErrno[WasiErrno["EBADMSG"] = 9] = "EBADMSG";
16
+ WasiErrno[WasiErrno["EBUSY"] = 10] = "EBUSY";
17
+ WasiErrno[WasiErrno["ECANCELED"] = 11] = "ECANCELED";
18
+ WasiErrno[WasiErrno["ECHILD"] = 12] = "ECHILD";
19
+ WasiErrno[WasiErrno["ECONNABORTED"] = 13] = "ECONNABORTED";
20
+ WasiErrno[WasiErrno["ECONNREFUSED"] = 14] = "ECONNREFUSED";
21
+ WasiErrno[WasiErrno["ECONNRESET"] = 15] = "ECONNRESET";
22
+ WasiErrno[WasiErrno["EDEADLK"] = 16] = "EDEADLK";
23
+ WasiErrno[WasiErrno["EDESTADDRREQ"] = 17] = "EDESTADDRREQ";
24
+ WasiErrno[WasiErrno["EDOM"] = 18] = "EDOM";
25
+ WasiErrno[WasiErrno["EDQUOT"] = 19] = "EDQUOT";
26
+ WasiErrno[WasiErrno["EEXIST"] = 20] = "EEXIST";
27
+ WasiErrno[WasiErrno["EFAULT"] = 21] = "EFAULT";
28
+ WasiErrno[WasiErrno["EFBIG"] = 22] = "EFBIG";
29
+ WasiErrno[WasiErrno["EHOSTUNREACH"] = 23] = "EHOSTUNREACH";
30
+ WasiErrno[WasiErrno["EIDRM"] = 24] = "EIDRM";
31
+ WasiErrno[WasiErrno["EILSEQ"] = 25] = "EILSEQ";
32
+ WasiErrno[WasiErrno["EINPROGRESS"] = 26] = "EINPROGRESS";
33
+ WasiErrno[WasiErrno["EINTR"] = 27] = "EINTR";
34
+ WasiErrno[WasiErrno["EINVAL"] = 28] = "EINVAL";
35
+ WasiErrno[WasiErrno["EIO"] = 29] = "EIO";
36
+ WasiErrno[WasiErrno["EISCONN"] = 30] = "EISCONN";
37
+ WasiErrno[WasiErrno["EISDIR"] = 31] = "EISDIR";
38
+ WasiErrno[WasiErrno["ELOOP"] = 32] = "ELOOP";
39
+ WasiErrno[WasiErrno["EMFILE"] = 33] = "EMFILE";
40
+ WasiErrno[WasiErrno["EMLINK"] = 34] = "EMLINK";
41
+ WasiErrno[WasiErrno["EMSGSIZE"] = 35] = "EMSGSIZE";
42
+ WasiErrno[WasiErrno["EMULTIHOP"] = 36] = "EMULTIHOP";
43
+ WasiErrno[WasiErrno["ENAMETOOLONG"] = 37] = "ENAMETOOLONG";
44
+ WasiErrno[WasiErrno["ENETDOWN"] = 38] = "ENETDOWN";
45
+ WasiErrno[WasiErrno["ENETRESET"] = 39] = "ENETRESET";
46
+ WasiErrno[WasiErrno["ENETUNREACH"] = 40] = "ENETUNREACH";
47
+ WasiErrno[WasiErrno["ENFILE"] = 41] = "ENFILE";
48
+ WasiErrno[WasiErrno["ENOBUFS"] = 42] = "ENOBUFS";
49
+ WasiErrno[WasiErrno["ENODEV"] = 43] = "ENODEV";
50
+ WasiErrno[WasiErrno["ENOENT"] = 44] = "ENOENT";
51
+ WasiErrno[WasiErrno["ENOEXEC"] = 45] = "ENOEXEC";
52
+ WasiErrno[WasiErrno["ENOLCK"] = 46] = "ENOLCK";
53
+ WasiErrno[WasiErrno["ENOLINK"] = 47] = "ENOLINK";
54
+ WasiErrno[WasiErrno["ENOMEM"] = 48] = "ENOMEM";
55
+ WasiErrno[WasiErrno["ENOMSG"] = 49] = "ENOMSG";
56
+ WasiErrno[WasiErrno["ENOPROTOOPT"] = 50] = "ENOPROTOOPT";
57
+ WasiErrno[WasiErrno["ENOSPC"] = 51] = "ENOSPC";
58
+ WasiErrno[WasiErrno["ENOSYS"] = 52] = "ENOSYS";
59
+ WasiErrno[WasiErrno["ENOTCONN"] = 53] = "ENOTCONN";
60
+ WasiErrno[WasiErrno["ENOTDIR"] = 54] = "ENOTDIR";
61
+ WasiErrno[WasiErrno["ENOTEMPTY"] = 55] = "ENOTEMPTY";
62
+ WasiErrno[WasiErrno["ENOTRECOVERABLE"] = 56] = "ENOTRECOVERABLE";
63
+ WasiErrno[WasiErrno["ENOTSOCK"] = 57] = "ENOTSOCK";
64
+ WasiErrno[WasiErrno["ENOTSUP"] = 58] = "ENOTSUP";
65
+ WasiErrno[WasiErrno["ENOTTY"] = 59] = "ENOTTY";
66
+ WasiErrno[WasiErrno["ENXIO"] = 60] = "ENXIO";
67
+ WasiErrno[WasiErrno["EOVERFLOW"] = 61] = "EOVERFLOW";
68
+ WasiErrno[WasiErrno["EOWNERDEAD"] = 62] = "EOWNERDEAD";
69
+ WasiErrno[WasiErrno["EPERM"] = 63] = "EPERM";
70
+ WasiErrno[WasiErrno["EPIPE"] = 64] = "EPIPE";
71
+ WasiErrno[WasiErrno["EPROTO"] = 65] = "EPROTO";
72
+ WasiErrno[WasiErrno["EPROTONOSUPPORT"] = 66] = "EPROTONOSUPPORT";
73
+ WasiErrno[WasiErrno["EPROTOTYPE"] = 67] = "EPROTOTYPE";
74
+ WasiErrno[WasiErrno["ERANGE"] = 68] = "ERANGE";
75
+ WasiErrno[WasiErrno["EROFS"] = 69] = "EROFS";
76
+ WasiErrno[WasiErrno["ESPIPE"] = 70] = "ESPIPE";
77
+ WasiErrno[WasiErrno["ESRCH"] = 71] = "ESRCH";
78
+ WasiErrno[WasiErrno["ESTALE"] = 72] = "ESTALE";
79
+ WasiErrno[WasiErrno["ETIMEDOUT"] = 73] = "ETIMEDOUT";
80
+ WasiErrno[WasiErrno["ETXTBSY"] = 74] = "ETXTBSY";
81
+ WasiErrno[WasiErrno["EXDEV"] = 75] = "EXDEV";
82
+ WasiErrno[WasiErrno["ENOTCAPABLE"] = 76] = "ENOTCAPABLE";
83
+ })(WasiErrno = exports.WasiErrno || (exports.WasiErrno = {}));
84
+ var WasiFileType;
85
+ (function (WasiFileType) {
86
+ WasiFileType[WasiFileType["UNKNOWN"] = 0] = "UNKNOWN";
87
+ WasiFileType[WasiFileType["BLOCK_DEVICE"] = 1] = "BLOCK_DEVICE";
88
+ WasiFileType[WasiFileType["CHARACTER_DEVICE"] = 2] = "CHARACTER_DEVICE";
89
+ WasiFileType[WasiFileType["DIRECTORY"] = 3] = "DIRECTORY";
90
+ WasiFileType[WasiFileType["REGULAR_FILE"] = 4] = "REGULAR_FILE";
91
+ WasiFileType[WasiFileType["SOCKET_DGRAM"] = 5] = "SOCKET_DGRAM";
92
+ WasiFileType[WasiFileType["SOCKET_STREAM"] = 6] = "SOCKET_STREAM";
93
+ WasiFileType[WasiFileType["SYMBOLIC_LINK"] = 7] = "SYMBOLIC_LINK";
94
+ })(WasiFileType = exports.WasiFileType || (exports.WasiFileType = {}));
95
+ exports.WasiRights = {
96
+ FD_DATASYNC: (BigInt(1) << BigInt(0)),
97
+ FD_READ: (BigInt(1) << BigInt(1)),
98
+ FD_SEEK: (BigInt(1) << BigInt(2)),
99
+ FD_FDSTAT_SET_FLAGS: (BigInt(1) << BigInt(3)),
100
+ FD_SYNC: (BigInt(1) << BigInt(4)),
101
+ FD_TELL: (BigInt(1) << BigInt(5)),
102
+ FD_WRITE: (BigInt(1) << BigInt(6)),
103
+ FD_ADVISE: (BigInt(1) << BigInt(7)),
104
+ FD_ALLOCATE: (BigInt(1) << BigInt(8)),
105
+ PATH_CREATE_DIRECTORY: (BigInt(1) << BigInt(9)),
106
+ PATH_CREATE_FILE: (BigInt(1) << BigInt(10)),
107
+ PATH_LINK_SOURCE: (BigInt(1) << BigInt(11)),
108
+ PATH_LINK_TARGET: (BigInt(1) << BigInt(12)),
109
+ PATH_OPEN: (BigInt(1) << BigInt(13)),
110
+ FD_READDIR: (BigInt(1) << BigInt(14)),
111
+ PATH_READLINK: (BigInt(1) << BigInt(15)),
112
+ PATH_RENAME_SOURCE: (BigInt(1) << BigInt(16)),
113
+ PATH_RENAME_TARGET: (BigInt(1) << BigInt(17)),
114
+ PATH_FILESTAT_GET: (BigInt(1) << BigInt(18)),
115
+ PATH_FILESTAT_SET_SIZE: (BigInt(1) << BigInt(19)),
116
+ PATH_FILESTAT_SET_TIMES: (BigInt(1) << BigInt(20)),
117
+ FD_FILESTAT_GET: (BigInt(1) << BigInt(21)),
118
+ FD_FILESTAT_SET_SIZE: (BigInt(1) << BigInt(22)),
119
+ FD_FILESTAT_SET_TIMES: (BigInt(1) << BigInt(23)),
120
+ PATH_SYMLINK: (BigInt(1) << BigInt(24)),
121
+ PATH_REMOVE_DIRECTORY: (BigInt(1) << BigInt(25)),
122
+ PATH_UNLINK_FILE: (BigInt(1) << BigInt(26)),
123
+ POLL_FD_READWRITE: (BigInt(1) << BigInt(27)),
124
+ SOCK_SHUTDOWN: (BigInt(1) << BigInt(28)),
125
+ SOCK_ACCEPT: (BigInt(1) << BigInt(29))
126
+ };
127
+ var WasiWhence;
128
+ (function (WasiWhence) {
129
+ WasiWhence[WasiWhence["SET"] = 0] = "SET";
130
+ WasiWhence[WasiWhence["CUR"] = 1] = "CUR";
131
+ WasiWhence[WasiWhence["END"] = 2] = "END";
132
+ })(WasiWhence = exports.WasiWhence || (exports.WasiWhence = {}));
133
+ var FileControlFlag;
134
+ (function (FileControlFlag) {
135
+ FileControlFlag[FileControlFlag["O_RDONLY"] = 0] = "O_RDONLY";
136
+ FileControlFlag[FileControlFlag["O_WRONLY"] = 1] = "O_WRONLY";
137
+ FileControlFlag[FileControlFlag["O_RDWR"] = 2] = "O_RDWR";
138
+ FileControlFlag[FileControlFlag["O_CREAT"] = 64] = "O_CREAT";
139
+ FileControlFlag[FileControlFlag["O_EXCL"] = 128] = "O_EXCL";
140
+ FileControlFlag[FileControlFlag["O_NOCTTY"] = 256] = "O_NOCTTY";
141
+ FileControlFlag[FileControlFlag["O_TRUNC"] = 512] = "O_TRUNC";
142
+ FileControlFlag[FileControlFlag["O_APPEND"] = 1024] = "O_APPEND";
143
+ FileControlFlag[FileControlFlag["O_DIRECTORY"] = 65536] = "O_DIRECTORY";
144
+ FileControlFlag[FileControlFlag["O_NOATIME"] = 262144] = "O_NOATIME";
145
+ FileControlFlag[FileControlFlag["O_NOFOLLOW"] = 131072] = "O_NOFOLLOW";
146
+ FileControlFlag[FileControlFlag["O_SYNC"] = 1052672] = "O_SYNC";
147
+ FileControlFlag[FileControlFlag["O_DIRECT"] = 16384] = "O_DIRECT";
148
+ FileControlFlag[FileControlFlag["O_NONBLOCK"] = 2048] = "O_NONBLOCK";
149
+ })(FileControlFlag = exports.FileControlFlag || (exports.FileControlFlag = {}));
150
+ var WasiFileControlFlag;
151
+ (function (WasiFileControlFlag) {
152
+ WasiFileControlFlag[WasiFileControlFlag["O_CREAT"] = 1] = "O_CREAT";
153
+ WasiFileControlFlag[WasiFileControlFlag["O_DIRECTORY"] = 2] = "O_DIRECTORY";
154
+ WasiFileControlFlag[WasiFileControlFlag["O_EXCL"] = 4] = "O_EXCL";
155
+ WasiFileControlFlag[WasiFileControlFlag["O_TRUNC"] = 8] = "O_TRUNC";
156
+ })(WasiFileControlFlag = exports.WasiFileControlFlag || (exports.WasiFileControlFlag = {}));
157
+ var WasiFdFlag;
158
+ (function (WasiFdFlag) {
159
+ WasiFdFlag[WasiFdFlag["APPEND"] = 1] = "APPEND";
160
+ WasiFdFlag[WasiFdFlag["DSYNC"] = 2] = "DSYNC";
161
+ WasiFdFlag[WasiFdFlag["NONBLOCK"] = 4] = "NONBLOCK";
162
+ WasiFdFlag[WasiFdFlag["RSYNC"] = 8] = "RSYNC";
163
+ WasiFdFlag[WasiFdFlag["SYNC"] = 16] = "SYNC";
164
+ })(WasiFdFlag = exports.WasiFdFlag || (exports.WasiFdFlag = {}));
165
+ var WasiClockid;
166
+ (function (WasiClockid) {
167
+ WasiClockid[WasiClockid["REALTIME"] = 0] = "REALTIME";
168
+ WasiClockid[WasiClockid["MONOTONIC"] = 1] = "MONOTONIC";
169
+ WasiClockid[WasiClockid["PROCESS_CPUTIME_ID"] = 2] = "PROCESS_CPUTIME_ID";
170
+ WasiClockid[WasiClockid["THREAD_CPUTIME_ID"] = 3] = "THREAD_CPUTIME_ID";
171
+ })(WasiClockid = exports.WasiClockid || (exports.WasiClockid = {}));
172
+ var WasiFstFlag;
173
+ (function (WasiFstFlag) {
174
+ WasiFstFlag[WasiFstFlag["SET_ATIM"] = 1] = "SET_ATIM";
175
+ WasiFstFlag[WasiFstFlag["SET_ATIM_NOW"] = 2] = "SET_ATIM_NOW";
176
+ WasiFstFlag[WasiFstFlag["SET_MTIM"] = 4] = "SET_MTIM";
177
+ WasiFstFlag[WasiFstFlag["SET_MTIM_NOW"] = 8] = "SET_MTIM_NOW";
178
+ })(WasiFstFlag = exports.WasiFstFlag || (exports.WasiFstFlag = {}));
179
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isPromiseLike = exports.validateInt32 = exports.validateUndefined = exports.validateFunction = exports.validateString = exports.validateBoolean = exports.validateArray = exports.validateObject = void 0;
4
+ function validateObject(value, name) {
5
+ if (value === null || typeof value !== 'object') {
6
+ throw new TypeError(`${name} must be an object. Received ${value === null ? 'null' : typeof value}`);
7
+ }
8
+ }
9
+ exports.validateObject = validateObject;
10
+ function validateArray(value, name) {
11
+ if (!Array.isArray(value)) {
12
+ throw new TypeError(`${name} must be an array. Received ${value === null ? 'null' : typeof value}`);
13
+ }
14
+ }
15
+ exports.validateArray = validateArray;
16
+ function validateBoolean(value, name) {
17
+ if (typeof value !== 'boolean') {
18
+ throw new TypeError(`${name} must be a boolean. Received ${value === null ? 'null' : typeof value}`);
19
+ }
20
+ }
21
+ exports.validateBoolean = validateBoolean;
22
+ function validateString(value, name) {
23
+ if (typeof value !== 'string') {
24
+ throw new TypeError(`${name} must be a string. Received ${value === null ? 'null' : typeof value}`);
25
+ }
26
+ }
27
+ exports.validateString = validateString;
28
+ function validateFunction(value, name) {
29
+ if (typeof value !== 'function') {
30
+ throw new TypeError(`${name} must be a function. Received ${value === null ? 'null' : typeof value}`);
31
+ }
32
+ }
33
+ exports.validateFunction = validateFunction;
34
+ function validateUndefined(value, name) {
35
+ if (value !== undefined) {
36
+ throw new TypeError(`${name} must be undefined. Received ${value === null ? 'null' : typeof value}`);
37
+ }
38
+ }
39
+ exports.validateUndefined = validateUndefined;
40
+ function validateInt32(value, name, min = -2147483648, max = 2147483647) {
41
+ if (typeof value !== 'number') {
42
+ throw new TypeError(`${name} must be a number. Received ${value === null ? 'null' : typeof value}`);
43
+ }
44
+ if (!Number.isInteger(value)) {
45
+ throw new RangeError(`${name} must be a integer.`);
46
+ }
47
+ if (value < min || value > max) {
48
+ throw new RangeError(`${name} must be >= ${min} && <= ${max}. Received ${value}`);
49
+ }
50
+ }
51
+ exports.validateInt32 = validateInt32;
52
+ function isPromiseLike(obj) {
53
+ return !!(obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function');
54
+ }
55
+ exports.isPromiseLike = isPromiseLike;
56
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1,168 @@
1
+ import { isPromiseLike } from "./wasi/util.mjs";
2
+ const ignoreNames = [
3
+ 'asyncify_get_state',
4
+ 'asyncify_start_rewind',
5
+ 'asyncify_start_unwind',
6
+ 'asyncify_stop_rewind',
7
+ 'asyncify_stop_unwind'
8
+ ];
9
+ // const wrappedExports = new WeakMap<WebAssembly.Exports, WebAssembly.Exports>()
10
+ var AsyncifyState;
11
+ (function (AsyncifyState) {
12
+ AsyncifyState[AsyncifyState["NONE"] = 0] = "NONE";
13
+ AsyncifyState[AsyncifyState["UNWINDING"] = 1] = "UNWINDING";
14
+ AsyncifyState[AsyncifyState["REWINDING"] = 2] = "REWINDING";
15
+ })(AsyncifyState || (AsyncifyState = {}));
16
+ function tryAllocate(instance, wasm64, size, mallocName) {
17
+ if (typeof instance.exports[mallocName] !== 'function' || size <= 0) {
18
+ return {
19
+ wasm64,
20
+ dataPtr: 16,
21
+ start: wasm64 ? 32 : 24,
22
+ end: 1024
23
+ };
24
+ }
25
+ const malloc = instance.exports[mallocName];
26
+ const dataPtr = wasm64 ? Number(malloc(BigInt(16) + BigInt(size))) : malloc(8 + size);
27
+ if (dataPtr === 0) {
28
+ throw new Error('Allocate asyncify data failed');
29
+ }
30
+ return wasm64
31
+ ? { wasm64, dataPtr, start: dataPtr + 16, end: dataPtr + 16 + size }
32
+ : { wasm64, dataPtr, start: dataPtr + 8, end: dataPtr + 8 + size };
33
+ }
34
+ /** @public */
35
+ export class Asyncify {
36
+ constructor() {
37
+ this.value = undefined;
38
+ this.exports = undefined;
39
+ this.dataPtr = 0;
40
+ }
41
+ init(memory, instance, options) {
42
+ var _a, _b;
43
+ if (this.exports) {
44
+ throw new Error('Asyncify has been initialized');
45
+ }
46
+ if (!(memory instanceof WebAssembly.Memory)) {
47
+ throw new TypeError('Require WebAssembly.Memory object');
48
+ }
49
+ const exports = instance.exports;
50
+ for (let i = 0; i < ignoreNames.length; ++i) {
51
+ if (typeof exports[ignoreNames[i]] !== 'function') {
52
+ throw new TypeError('Invalid asyncify wasm');
53
+ }
54
+ }
55
+ let address;
56
+ const wasm64 = Boolean(options.wasm64);
57
+ if (!options.tryAllocate) {
58
+ address = {
59
+ wasm64,
60
+ dataPtr: 16,
61
+ start: wasm64 ? 32 : 24,
62
+ end: 1024
63
+ };
64
+ }
65
+ else {
66
+ if (options.tryAllocate === true) {
67
+ address = tryAllocate(instance, wasm64, 4096, 'malloc');
68
+ }
69
+ else {
70
+ address = tryAllocate(instance, wasm64, (_a = options.tryAllocate.size) !== null && _a !== void 0 ? _a : 4096, (_b = options.tryAllocate.name) !== null && _b !== void 0 ? _b : 'malloc');
71
+ }
72
+ }
73
+ this.dataPtr = address.dataPtr;
74
+ if (wasm64) {
75
+ new BigInt64Array(memory.buffer, this.dataPtr).set([BigInt(address.start), BigInt(address.end)]);
76
+ }
77
+ else {
78
+ new Int32Array(memory.buffer, this.dataPtr).set([address.start, address.end]);
79
+ }
80
+ this.exports = this.wrapExports(exports, options.wrapExports);
81
+ const asyncifiedInstance = Object.create(WebAssembly.Instance.prototype);
82
+ Object.defineProperty(asyncifiedInstance, 'exports', { value: this.exports });
83
+ // Object.setPrototypeOf(instance, Instance.prototype)
84
+ return asyncifiedInstance;
85
+ }
86
+ assertState() {
87
+ if (this.exports.asyncify_get_state() !== AsyncifyState.NONE) {
88
+ throw new Error('Asyncify state error');
89
+ }
90
+ }
91
+ wrapImportFunction(f) {
92
+ return ((...args) => {
93
+ // eslint-disable-next-line no-unreachable-loop
94
+ while (this.exports.asyncify_get_state() === AsyncifyState.REWINDING) {
95
+ this.exports.asyncify_stop_rewind();
96
+ return this.value;
97
+ }
98
+ this.assertState();
99
+ const v = f(...args);
100
+ if (!isPromiseLike(v))
101
+ return v;
102
+ this.exports.asyncify_start_unwind(this.dataPtr);
103
+ this.value = v;
104
+ });
105
+ }
106
+ wrapImports(imports) {
107
+ const importObject = {};
108
+ Object.keys(imports).forEach(k => {
109
+ const mod = imports[k];
110
+ const newModule = {};
111
+ Object.keys(mod).forEach(name => {
112
+ const importValue = mod[name];
113
+ if (typeof importValue === 'function') {
114
+ newModule[name] = this.wrapImportFunction(importValue);
115
+ }
116
+ else {
117
+ newModule[name] = importValue;
118
+ }
119
+ });
120
+ importObject[k] = newModule;
121
+ });
122
+ return importObject;
123
+ }
124
+ wrapExportFunction(f) {
125
+ return (async (...args) => {
126
+ this.assertState();
127
+ let ret = f(...args);
128
+ while (this.exports.asyncify_get_state() === AsyncifyState.UNWINDING) {
129
+ this.exports.asyncify_stop_unwind();
130
+ this.value = await this.value;
131
+ this.assertState();
132
+ this.exports.asyncify_start_rewind(this.dataPtr);
133
+ ret = f();
134
+ }
135
+ this.assertState();
136
+ return ret;
137
+ });
138
+ }
139
+ wrapExports(exports, needWrap) {
140
+ const newExports = Object.create(null);
141
+ Object.keys(exports).forEach(name => {
142
+ const exportValue = exports[name];
143
+ let ignore = ignoreNames.indexOf(name) !== -1 || typeof exportValue !== 'function';
144
+ if (Array.isArray(needWrap)) {
145
+ ignore = ignore || (needWrap.indexOf(name) === -1);
146
+ }
147
+ Object.defineProperty(newExports, name, {
148
+ enumerable: true,
149
+ value: ignore ? exportValue : this.wrapExportFunction(exportValue)
150
+ });
151
+ });
152
+ // wrappedExports.set(exports, newExports)
153
+ return newExports;
154
+ }
155
+ }
156
+ // /** @public */
157
+ // export class Instance extends WebAssembly.Instance {
158
+ // constructor (options: AsyncifyOptions, module: WebAssembly.Module, importObject?: WebAssembly.Imports) {
159
+ // importObject = importObject ?? {}
160
+ // const asyncify = new Asyncify()
161
+ // super(module, asyncify.wrapImports(importObject))
162
+ // asyncify.init(importObject, this, options)
163
+ // }
164
+ // get exports (): WebAssembly.Exports {
165
+ // return wrappedExports.get(super.exports)!
166
+ // }
167
+ // }
168
+ // Object.defineProperty(Instance.prototype, 'exports', { enumerable: true })
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @packageDocumentation
3
+ */
4
+ export * from "./asyncify.mjs";
5
+ export * from "./load.mjs";
6
+ export * from "./wasi/index.mjs";
7
+ export * from "./memory.mjs";
@@ -0,0 +1,72 @@
1
+ import { Asyncify } from "./asyncify.mjs";
2
+ async function fetchWasm(urlOrBuffer, imports) {
3
+ const response = await fetch(urlOrBuffer);
4
+ const buffer = await response.arrayBuffer();
5
+ const source = await WebAssembly.instantiate(buffer, imports);
6
+ return source;
7
+ }
8
+ /** @public */
9
+ export async function load(urlOrBuffer, imports, asyncify) {
10
+ var _a, _b;
11
+ if (imports && typeof imports !== 'object') {
12
+ throw new TypeError('imports must be an object or undefined');
13
+ }
14
+ imports = imports !== null && imports !== void 0 ? imports : {};
15
+ let asyncifyHelper;
16
+ let source;
17
+ if (asyncify) {
18
+ asyncifyHelper = new Asyncify();
19
+ imports = asyncifyHelper.wrapImports(imports);
20
+ }
21
+ if (urlOrBuffer instanceof ArrayBuffer || ArrayBuffer.isView(urlOrBuffer)) {
22
+ source = await WebAssembly.instantiate(urlOrBuffer, imports);
23
+ if (asyncify) {
24
+ const memory = source.instance.exports.memory || ((_a = imports.env) === null || _a === void 0 ? void 0 : _a.memory);
25
+ return { module: source.module, instance: asyncifyHelper.init(memory, source.instance, asyncify) };
26
+ }
27
+ return source;
28
+ }
29
+ if (typeof urlOrBuffer !== 'string' && !(urlOrBuffer instanceof URL)) {
30
+ throw new TypeError('Invalid source');
31
+ }
32
+ if (typeof WebAssembly.instantiateStreaming === 'function') {
33
+ try {
34
+ source = await WebAssembly.instantiateStreaming(fetch(urlOrBuffer), imports);
35
+ }
36
+ catch (_) {
37
+ source = await fetchWasm(urlOrBuffer, imports);
38
+ }
39
+ }
40
+ else {
41
+ source = await fetchWasm(urlOrBuffer, imports);
42
+ }
43
+ if (asyncify) {
44
+ const memory = source.instance.exports.memory || ((_b = imports.env) === null || _b === void 0 ? void 0 : _b.memory);
45
+ return { module: source.module, instance: asyncifyHelper.init(memory, source.instance, asyncify) };
46
+ }
47
+ return source;
48
+ }
49
+ /** @public */
50
+ export function loadSync(buffer, imports, asyncify) {
51
+ var _a;
52
+ if ((buffer instanceof ArrayBuffer) && !ArrayBuffer.isView(buffer)) {
53
+ throw new TypeError('Invalid source');
54
+ }
55
+ if (imports && typeof imports !== 'object') {
56
+ throw new TypeError('imports must be an object or undefined');
57
+ }
58
+ imports = imports !== null && imports !== void 0 ? imports : {};
59
+ let asyncifyHelper;
60
+ if (asyncify) {
61
+ asyncifyHelper = new Asyncify();
62
+ imports = asyncifyHelper.wrapImports(imports);
63
+ }
64
+ const module = new WebAssembly.Module(buffer);
65
+ const instance = new WebAssembly.Instance(module, imports);
66
+ const source = { instance, module };
67
+ if (asyncify) {
68
+ const memory = source.instance.exports.memory || ((_a = imports.env) === null || _a === void 0 ? void 0 : _a.memory);
69
+ return { module: source.module, instance: asyncifyHelper.init(memory, instance, asyncify) };
70
+ }
71
+ return source;
72
+ }