@serveryyswys/node.operit 0.0.0-stage → 0.1.3
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/BUILTINS.json +383 -0
- package/DESIGN.md +513 -0
- package/LICENSE +201 -0
- package/NOTICE +17 -0
- package/README.md +311 -2
- package/dist/assert/strict.d.ts +2 -0
- package/dist/assert/strict.js +7 -0
- package/dist/assert.d.ts +3 -0
- package/dist/assert.js +483 -0
- package/dist/buffer.d.ts +60 -0
- package/dist/buffer.js +524 -0
- package/dist/child_process.d.ts +56 -0
- package/dist/child_process.js +371 -0
- package/dist/console.d.ts +60 -0
- package/dist/console.js +193 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +19 -0
- package/dist/crypto.d.ts +76 -0
- package/dist/crypto.js +312 -0
- package/dist/diagnostics_channel.d.ts +36 -0
- package/dist/diagnostics_channel.js +76 -0
- package/dist/dns/promises.d.ts +34 -0
- package/dist/dns/promises.js +190 -0
- package/dist/dns.d.ts +88 -0
- package/dist/dns.js +259 -0
- package/dist/events.d.ts +40 -0
- package/dist/events.js +237 -0
- package/dist/fs/promises.d.ts +160 -0
- package/dist/fs/promises.js +130 -0
- package/dist/fs.d.ts +221 -0
- package/dist/fs.js +944 -0
- package/dist/http.d.ts +92 -0
- package/dist/http.js +319 -0
- package/dist/https.d.ts +296 -0
- package/dist/https.js +50 -0
- package/dist/index.d.ts +2821 -0
- package/dist/index.js +93 -0
- package/dist/lib/bridge.d.ts +60 -0
- package/dist/lib/bridge.js +207 -0
- package/dist/lib/bytes.d.ts +20 -0
- package/dist/lib/bytes.js +239 -0
- package/dist/lib/child-process-types.d.ts +45 -0
- package/dist/lib/child-process-types.js +2 -0
- package/dist/lib/console-types.d.ts +12 -0
- package/dist/lib/console-types.js +2 -0
- package/dist/lib/cwd.d.ts +2 -0
- package/dist/lib/cwd.js +32 -0
- package/dist/lib/deep-equal.d.ts +3 -0
- package/dist/lib/deep-equal.js +223 -0
- package/dist/lib/deflate.d.ts +2 -0
- package/dist/lib/deflate.js +234 -0
- package/dist/lib/diagnostics-channel-types.d.ts +7 -0
- package/dist/lib/diagnostics-channel-types.js +2 -0
- package/dist/lib/dns-driver.d.ts +14 -0
- package/dist/lib/dns-driver.js +85 -0
- package/dist/lib/dns-types.d.ts +22 -0
- package/dist/lib/dns-types.js +2 -0
- package/dist/lib/errors.d.ts +48 -0
- package/dist/lib/errors.js +424 -0
- package/dist/lib/fs-driver.d.ts +70 -0
- package/dist/lib/fs-driver.js +364 -0
- package/dist/lib/fs-env.d.ts +30 -0
- package/dist/lib/fs-env.js +157 -0
- package/dist/lib/fs-types.d.ts +19 -0
- package/dist/lib/fs-types.js +2 -0
- package/dist/lib/hashes.d.ts +27 -0
- package/dist/lib/hashes.js +432 -0
- package/dist/lib/http-driver.d.ts +30 -0
- package/dist/lib/http-driver.js +72 -0
- package/dist/lib/http-types.d.ts +18 -0
- package/dist/lib/http-types.js +2 -0
- package/dist/lib/inflate.d.ts +6 -0
- package/dist/lib/inflate.js +284 -0
- package/dist/lib/path-types.d.ts +37 -0
- package/dist/lib/path-types.js +2 -0
- package/dist/lib/paths.d.ts +8 -0
- package/dist/lib/paths.js +106 -0
- package/dist/lib/perf-hooks-types.d.ts +18 -0
- package/dist/lib/perf-hooks-types.js +2 -0
- package/dist/lib/process-driver.d.ts +31 -0
- package/dist/lib/process-driver.js +102 -0
- package/dist/lib/punycode.d.ts +8 -0
- package/dist/lib/punycode.js +179 -0
- package/dist/lib/stream-consumers-types.d.ts +4 -0
- package/dist/lib/stream-consumers-types.js +2 -0
- package/dist/lib/stream-types.d.ts +29 -0
- package/dist/lib/stream-types.js +2 -0
- package/dist/lib/timers-types.d.ts +18 -0
- package/dist/lib/timers-types.js +2 -0
- package/dist/lib/url-search-params.d.ts +26 -0
- package/dist/lib/url-search-params.js +281 -0
- package/dist/lib/url-types.d.ts +44 -0
- package/dist/lib/url-types.js +2 -0
- package/dist/lib/url-whatwg.d.ts +78 -0
- package/dist/lib/url-whatwg.js +857 -0
- package/dist/lib/util-types.d.ts +13 -0
- package/dist/lib/util-types.js +2 -0
- package/dist/lib/v8-types.d.ts +30 -0
- package/dist/lib/v8-types.js +2 -0
- package/dist/lib/zlib-types.d.ts +12 -0
- package/dist/lib/zlib-types.js +2 -0
- package/dist/module.d.ts +8 -0
- package/dist/module.js +102 -0
- package/dist/os.d.ts +80 -0
- package/dist/os.js +247 -0
- package/dist/path/posix.d.ts +2 -0
- package/dist/path/posix.js +7 -0
- package/dist/path/win32.d.ts +2 -0
- package/dist/path/win32.js +10 -0
- package/dist/path.d.ts +3 -0
- package/dist/path.js +1222 -0
- package/dist/perf_hooks.d.ts +36 -0
- package/dist/perf_hooks.js +144 -0
- package/dist/process.d.ts +69 -0
- package/dist/process.js +230 -0
- package/dist/punycode.d.ts +22 -0
- package/dist/punycode.js +53 -0
- package/dist/querystring.d.ts +15 -0
- package/dist/querystring.js +209 -0
- package/dist/stream/consumers.d.ts +24 -0
- package/dist/stream/consumers.js +75 -0
- package/dist/stream/promises.d.ts +5 -0
- package/dist/stream/promises.js +10 -0
- package/dist/stream.d.ts +84 -0
- package/dist/stream.js +875 -0
- package/dist/string_decoder.d.ts +15 -0
- package/dist/string_decoder.js +237 -0
- package/dist/sys.d.ts +8 -0
- package/dist/sys.js +9 -0
- package/dist/timers/promises.d.ts +19 -0
- package/dist/timers/promises.js +74 -0
- package/dist/timers.d.ts +21 -0
- package/dist/timers.js +41 -0
- package/dist/tty.d.ts +9 -0
- package/dist/tty.js +25 -0
- package/dist/unsupported.d.ts +12 -0
- package/dist/unsupported.js +17 -0
- package/dist/url.d.ts +28 -0
- package/dist/url.js +486 -0
- package/dist/util/types.d.ts +16 -0
- package/dist/util/types.js +9 -0
- package/dist/util.d.ts +63 -0
- package/dist/util.js +527 -0
- package/dist/v8.d.ts +25 -0
- package/dist/v8.js +127 -0
- package/dist/zlib.d.ts +88 -0
- package/dist/zlib.js +371 -0
- package/package.json +31 -4
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
/**
|
|
36
|
+
* dns/promises 子路径入口。
|
|
37
|
+
*
|
|
38
|
+
* 与 `require('dns').promises` 是同一份实现:lookup / lookupService / getServers /
|
|
39
|
+
* setDefaultResultOrder 等。resolve 一族同样显式抛 ONJ_UNSUPPORTED(原因见 dns.ts)。
|
|
40
|
+
*/
|
|
41
|
+
const errors_1 = require("../lib/errors");
|
|
42
|
+
const dnsDriver = __importStar(require("../lib/dns-driver"));
|
|
43
|
+
const GETADDRINFO_ERRNO = {
|
|
44
|
+
ENOTFOUND: -3008,
|
|
45
|
+
EAI_AGAIN: -3001,
|
|
46
|
+
EAI_FAIL: -3003,
|
|
47
|
+
EAI_NODATA: -3006,
|
|
48
|
+
EAI_NONAME: -3007,
|
|
49
|
+
ENODATA: -3006
|
|
50
|
+
};
|
|
51
|
+
const SERVICE_NAMES = {
|
|
52
|
+
20: 'ftp-data', 21: 'ftp', 22: 'ssh', 23: 'telnet', 25: 'smtp', 53: 'domain',
|
|
53
|
+
80: 'http', 110: 'pop3', 143: 'imap', 443: 'https', 465: 'smtps', 587: 'submission',
|
|
54
|
+
993: 'imaps', 995: 'pop3s', 3306: 'mysql', 5432: 'postgresql', 6379: 'redis',
|
|
55
|
+
8080: 'http-alt', 8443: 'https-alt'
|
|
56
|
+
};
|
|
57
|
+
let resultOrder = 'verbatim';
|
|
58
|
+
function dnsFailure(code, hostname) {
|
|
59
|
+
const error = new Error('getaddrinfo ' + code + ' ' + hostname);
|
|
60
|
+
error.code = code;
|
|
61
|
+
error.errno = GETADDRINFO_ERRNO[code] === undefined ? -3008 : GETADDRINFO_ERRNO[code];
|
|
62
|
+
error.syscall = 'getaddrinfo';
|
|
63
|
+
error.hostname = hostname;
|
|
64
|
+
return error;
|
|
65
|
+
}
|
|
66
|
+
function codeForFailure(failure) {
|
|
67
|
+
const mapped = failure;
|
|
68
|
+
if (mapped.code === 'ENOTFOUND' || mapped.code === 'EAI_AGAIN') {
|
|
69
|
+
return mapped.code;
|
|
70
|
+
}
|
|
71
|
+
const message = mapped.message === undefined ? '' : mapped.message;
|
|
72
|
+
if (/temporary failure in name resolution|unable to resolve host/i.test(message)) {
|
|
73
|
+
return 'EAI_AGAIN';
|
|
74
|
+
}
|
|
75
|
+
return 'ENOTFOUND';
|
|
76
|
+
}
|
|
77
|
+
function serviceNameOf(port) {
|
|
78
|
+
const known = SERVICE_NAMES[port];
|
|
79
|
+
return known === undefined ? String(port) : known;
|
|
80
|
+
}
|
|
81
|
+
function normalizeOptions(options) {
|
|
82
|
+
let family = 0;
|
|
83
|
+
let all = false;
|
|
84
|
+
let verbatim = resultOrder === 'verbatim';
|
|
85
|
+
if (typeof options === 'number') {
|
|
86
|
+
family = options;
|
|
87
|
+
}
|
|
88
|
+
else if (options !== undefined && options !== null) {
|
|
89
|
+
if (typeof options.family === 'number') {
|
|
90
|
+
family = options.family;
|
|
91
|
+
}
|
|
92
|
+
all = options.all === true;
|
|
93
|
+
if (typeof options.verbatim === 'boolean') {
|
|
94
|
+
verbatim = options.verbatim;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { family: family, all: all, verbatim: verbatim };
|
|
98
|
+
}
|
|
99
|
+
function lookup(hostname, options) {
|
|
100
|
+
const host = String(hostname);
|
|
101
|
+
const settings = normalizeOptions(options);
|
|
102
|
+
return new Promise(function (resolve, reject) {
|
|
103
|
+
let records;
|
|
104
|
+
try {
|
|
105
|
+
records = dnsDriver.getDriver().lookup(host);
|
|
106
|
+
}
|
|
107
|
+
catch (failure) {
|
|
108
|
+
reject(dnsFailure(codeForFailure(failure), host));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
let filtered = records;
|
|
112
|
+
if (settings.family === 4 || settings.family === 6) {
|
|
113
|
+
filtered = records.filter(function (record) { return record.family === settings.family; });
|
|
114
|
+
}
|
|
115
|
+
if (!settings.verbatim) {
|
|
116
|
+
filtered = filtered.slice().sort(function (left, right) { return left.family - right.family; });
|
|
117
|
+
}
|
|
118
|
+
if (filtered.length === 0) {
|
|
119
|
+
reject(dnsFailure('ENOTFOUND', host));
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (settings.all) {
|
|
123
|
+
resolve(filtered);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
resolve({ address: filtered[0].address, family: filtered[0].family });
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
function lookupService(address, port) {
|
|
130
|
+
const target = String(address);
|
|
131
|
+
const numericPort = Number(port);
|
|
132
|
+
return new Promise(function (resolve, reject) {
|
|
133
|
+
try {
|
|
134
|
+
resolve({
|
|
135
|
+
hostname: dnsDriver.getDriver().canonicalNameOf(target),
|
|
136
|
+
service: serviceNameOf(numericPort)
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
catch (failure) {
|
|
140
|
+
reject(dnsFailure(codeForFailure(failure), target));
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
function getServers() {
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
function setServers() {
|
|
148
|
+
throw (0, errors_1.onjError)('ONJ_UNSUPPORTED', 'dns.setServers() 无法实现:JVM 的解析器配置改不了(Android 由 netd 按网络管理)。');
|
|
149
|
+
}
|
|
150
|
+
function getDefaultResultOrder() {
|
|
151
|
+
return resultOrder;
|
|
152
|
+
}
|
|
153
|
+
function setDefaultResultOrder(order) {
|
|
154
|
+
const value = String(order);
|
|
155
|
+
if (value !== 'verbatim' && value !== 'ipv4first' && value !== 'ipv6first') {
|
|
156
|
+
throw new TypeError('Invalid result order: ' + value);
|
|
157
|
+
}
|
|
158
|
+
resultOrder = value;
|
|
159
|
+
}
|
|
160
|
+
function unsupportedResolve(name) {
|
|
161
|
+
return function () {
|
|
162
|
+
throw (0, errors_1.onjError)('ONJ_UNSUPPORTED', 'dns.promises.' + name + '() 需要 DNS 记录级查询,而这要 JNDI 的 DNS provider —— ' +
|
|
163
|
+
'com.sun.jndi.dns 不在 Android 里,所以这个能力在本平台不成立。' +
|
|
164
|
+
'需要解析主机名请用 dns.promises.lookup()(getaddrinfo)。');
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
const api = {
|
|
168
|
+
lookup: lookup,
|
|
169
|
+
lookupService: lookupService,
|
|
170
|
+
resolve: unsupportedResolve('resolve'),
|
|
171
|
+
resolve4: unsupportedResolve('resolve4'),
|
|
172
|
+
resolve6: unsupportedResolve('resolve6'),
|
|
173
|
+
resolveAny: unsupportedResolve('resolveAny'),
|
|
174
|
+
resolveCaa: unsupportedResolve('resolveCaa'),
|
|
175
|
+
resolveCname: unsupportedResolve('resolveCname'),
|
|
176
|
+
resolveMx: unsupportedResolve('resolveMx'),
|
|
177
|
+
resolveNaptr: unsupportedResolve('resolveNaptr'),
|
|
178
|
+
resolveNs: unsupportedResolve('resolveNs'),
|
|
179
|
+
resolvePtr: unsupportedResolve('resolvePtr'),
|
|
180
|
+
resolveSoa: unsupportedResolve('resolveSoa'),
|
|
181
|
+
resolveSrv: unsupportedResolve('resolveSrv'),
|
|
182
|
+
resolveTlsa: unsupportedResolve('resolveTlsa'),
|
|
183
|
+
resolveTxt: unsupportedResolve('resolveTxt'),
|
|
184
|
+
reverse: unsupportedResolve('reverse'),
|
|
185
|
+
getServers: getServers,
|
|
186
|
+
setServers: setServers,
|
|
187
|
+
getDefaultResultOrder: getDefaultResultOrder,
|
|
188
|
+
setDefaultResultOrder: setDefaultResultOrder
|
|
189
|
+
};
|
|
190
|
+
module.exports = api;
|
package/dist/dns.d.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { LookupOptions } from './lib/dns-types';
|
|
2
|
+
declare function lookup(hostname: unknown, options?: number | LookupOptions | ((...args: unknown[]) => void), callback?: (...args: unknown[]) => void): void;
|
|
3
|
+
declare function lookupService(address: unknown, port: unknown, callback: (...args: unknown[]) => void): void;
|
|
4
|
+
/** Node 在 Android 这样的平台上读不到解析器配置,这里如实返回空数组。 */
|
|
5
|
+
declare function getServers(): string[];
|
|
6
|
+
declare function setServers(): never;
|
|
7
|
+
declare function getDefaultResultOrder(): string;
|
|
8
|
+
declare function setDefaultResultOrder(order: unknown): void;
|
|
9
|
+
declare function Resolver(): never;
|
|
10
|
+
declare const api: {
|
|
11
|
+
lookup: typeof lookup;
|
|
12
|
+
lookupService: typeof lookupService;
|
|
13
|
+
resolve: () => never;
|
|
14
|
+
resolve4: () => never;
|
|
15
|
+
resolve6: () => never;
|
|
16
|
+
resolveAny: () => never;
|
|
17
|
+
resolveCaa: () => never;
|
|
18
|
+
resolveCname: () => never;
|
|
19
|
+
resolveMx: () => never;
|
|
20
|
+
resolveNaptr: () => never;
|
|
21
|
+
resolveNs: () => never;
|
|
22
|
+
resolvePtr: () => never;
|
|
23
|
+
resolveSoa: () => never;
|
|
24
|
+
resolveSrv: () => never;
|
|
25
|
+
resolveTlsa: () => never;
|
|
26
|
+
resolveTxt: () => never;
|
|
27
|
+
reverse: () => never;
|
|
28
|
+
getServers: typeof getServers;
|
|
29
|
+
setServers: typeof setServers;
|
|
30
|
+
getDefaultResultOrder: typeof getDefaultResultOrder;
|
|
31
|
+
setDefaultResultOrder: typeof setDefaultResultOrder;
|
|
32
|
+
Resolver: typeof Resolver;
|
|
33
|
+
promises: {
|
|
34
|
+
lookup: (hostname: unknown, options?: number | LookupOptions) => Promise<unknown>;
|
|
35
|
+
lookupService: (address: unknown, port: unknown) => Promise<{
|
|
36
|
+
hostname: string;
|
|
37
|
+
service: string;
|
|
38
|
+
}>;
|
|
39
|
+
resolve: () => never;
|
|
40
|
+
resolve4: () => never;
|
|
41
|
+
resolve6: () => never;
|
|
42
|
+
resolveAny: () => never;
|
|
43
|
+
resolveCaa: () => never;
|
|
44
|
+
resolveCname: () => never;
|
|
45
|
+
resolveMx: () => never;
|
|
46
|
+
resolveNaptr: () => never;
|
|
47
|
+
resolveNs: () => never;
|
|
48
|
+
resolvePtr: () => never;
|
|
49
|
+
resolveSoa: () => never;
|
|
50
|
+
resolveSrv: () => never;
|
|
51
|
+
resolveTlsa: () => never;
|
|
52
|
+
resolveTxt: () => never;
|
|
53
|
+
reverse: () => never;
|
|
54
|
+
getServers: () => string[];
|
|
55
|
+
setServers: () => never;
|
|
56
|
+
getDefaultResultOrder: () => string;
|
|
57
|
+
setDefaultResultOrder: (order: unknown) => void;
|
|
58
|
+
};
|
|
59
|
+
} & {
|
|
60
|
+
ADDRCONFIG: number;
|
|
61
|
+
V4MAPPED: number;
|
|
62
|
+
ALL: number;
|
|
63
|
+
NODATA: string;
|
|
64
|
+
FORMERR: string;
|
|
65
|
+
SERVFAIL: string;
|
|
66
|
+
NOTFOUND: string;
|
|
67
|
+
NOTIMP: string;
|
|
68
|
+
REFUSED: string;
|
|
69
|
+
BADQUERY: string;
|
|
70
|
+
BADNAME: string;
|
|
71
|
+
BADFAMILY: string;
|
|
72
|
+
BADRESP: string;
|
|
73
|
+
CONNREFUSED: string;
|
|
74
|
+
TIMEOUT: string;
|
|
75
|
+
EOF: string;
|
|
76
|
+
FILE: string;
|
|
77
|
+
NOMEM: string;
|
|
78
|
+
DESTRUCTION: string;
|
|
79
|
+
BADSTR: string;
|
|
80
|
+
BADFLAGS: string;
|
|
81
|
+
NONAME: string;
|
|
82
|
+
BADHINTS: string;
|
|
83
|
+
NOTINITIALIZED: string;
|
|
84
|
+
LOADIPHLPAPI: string;
|
|
85
|
+
ADDRGETNETWORKPARAMS: string;
|
|
86
|
+
CANCELLED: string;
|
|
87
|
+
};
|
|
88
|
+
export = api;
|
package/dist/dns.js
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
/**
|
|
36
|
+
* dns 模块。
|
|
37
|
+
*
|
|
38
|
+
* 实现的是 **lookup 一族**(getaddrinfo),也就是 99% 的代码真正用到的那部分:
|
|
39
|
+
* lookup / lookupService / promises.lookup / promises.lookupService /
|
|
40
|
+
* getServers / setServers / getDefaultResultOrder / setDefaultResultOrder / 常量。
|
|
41
|
+
*
|
|
42
|
+
* **resolve 一族(resolveMx / resolveTxt / resolve4 …)与 reverse 显式抛 ONJ_UNSUPPORTED**:
|
|
43
|
+
* 它们要做 DNS 记录级查询,需要 JNDI 的 DNS provider,而 com.sun.jndi.dns 不在 Android 里。
|
|
44
|
+
* 这不是"还没做",是平台不成立 —— 所以给明确拒绝,不给半个实现。
|
|
45
|
+
*
|
|
46
|
+
* 与 Node 的差异(都在 BUILTINS.json 里):
|
|
47
|
+
* - 调用的**接口**是异步的(走 queueMicrotask),但底层 getaddrinfo 是同步的;
|
|
48
|
+
* - getServers() 返回空数组:Android 的 DNS 由 netd 按网络管理,JVM 侧读不到;
|
|
49
|
+
* - setServers() 抛 ONJ_UNSUPPORTED:无法重配 JVM 的解析器;
|
|
50
|
+
* - hints 选项接受但不生效(Java 的 getAllByName 没有对应开关);
|
|
51
|
+
* - lookupService 的 service 用内置的常见端口表,未命中时给端口号字符串。
|
|
52
|
+
*/
|
|
53
|
+
const errors_1 = require("./lib/errors");
|
|
54
|
+
const dnsDriver = __importStar(require("./lib/dns-driver"));
|
|
55
|
+
const dnsPromises = require("./dns/promises");
|
|
56
|
+
/** getaddrinfo 的错误码数值,与 libuv 对齐(Node 用同一套)。 */
|
|
57
|
+
const GETADDRINFO_ERRNO = {
|
|
58
|
+
ENOTFOUND: -3008,
|
|
59
|
+
EAI_AGAIN: -3001,
|
|
60
|
+
EAI_FAIL: -3003,
|
|
61
|
+
EAI_NODATA: -3006,
|
|
62
|
+
EAI_NONAME: -3007,
|
|
63
|
+
ENODATA: -3006
|
|
64
|
+
};
|
|
65
|
+
/** 常见端口 -> 服务名。Node 的 lookupService 走 getnameinfo,这里用表代替。 */
|
|
66
|
+
const SERVICE_NAMES = {
|
|
67
|
+
20: 'ftp-data', 21: 'ftp', 22: 'ssh', 23: 'telnet', 25: 'smtp', 53: 'domain',
|
|
68
|
+
80: 'http', 110: 'pop3', 143: 'imap', 443: 'https', 465: 'smtps', 587: 'submission',
|
|
69
|
+
993: 'imaps', 995: 'pop3s', 3306: 'mysql', 5432: 'postgresql', 6379: 'redis',
|
|
70
|
+
8080: 'http-alt', 8443: 'https-alt'
|
|
71
|
+
};
|
|
72
|
+
let resultOrder = 'verbatim';
|
|
73
|
+
function dnsFailure(code, hostname) {
|
|
74
|
+
const error = new Error('getaddrinfo ' + code + ' ' + hostname);
|
|
75
|
+
error.code = code;
|
|
76
|
+
error.errno = GETADDRINFO_ERRNO[code] === undefined ? -3008 : GETADDRINFO_ERRNO[code];
|
|
77
|
+
error.syscall = 'getaddrinfo';
|
|
78
|
+
error.hostname = hostname;
|
|
79
|
+
return error;
|
|
80
|
+
}
|
|
81
|
+
function codeForFailure(failure) {
|
|
82
|
+
const mapped = failure;
|
|
83
|
+
if (mapped.code === 'ENOTFOUND' || mapped.code === 'EAI_AGAIN') {
|
|
84
|
+
return mapped.code;
|
|
85
|
+
}
|
|
86
|
+
const message = mapped.message === undefined ? '' : mapped.message;
|
|
87
|
+
if (/temporary failure in name resolution|unable to resolve host/i.test(message)) {
|
|
88
|
+
return 'EAI_AGAIN';
|
|
89
|
+
}
|
|
90
|
+
return 'ENOTFOUND';
|
|
91
|
+
}
|
|
92
|
+
function serviceNameOf(port) {
|
|
93
|
+
const known = SERVICE_NAMES[port];
|
|
94
|
+
return known === undefined ? String(port) : known;
|
|
95
|
+
}
|
|
96
|
+
function normalizeOptions(options) {
|
|
97
|
+
let family = 0;
|
|
98
|
+
let all = false;
|
|
99
|
+
let verbatim = resultOrder === 'verbatim';
|
|
100
|
+
if (typeof options === 'number') {
|
|
101
|
+
family = options;
|
|
102
|
+
}
|
|
103
|
+
else if (options !== undefined && options !== null) {
|
|
104
|
+
if (typeof options.family === 'number') {
|
|
105
|
+
family = options.family;
|
|
106
|
+
}
|
|
107
|
+
all = options.all === true;
|
|
108
|
+
if (typeof options.verbatim === 'boolean') {
|
|
109
|
+
verbatim = options.verbatim;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return { family: family, all: all, verbatim: verbatim };
|
|
113
|
+
}
|
|
114
|
+
function lookup(hostname, options, callback) {
|
|
115
|
+
let opts = options;
|
|
116
|
+
let done = callback;
|
|
117
|
+
if (typeof options === 'function') {
|
|
118
|
+
done = options;
|
|
119
|
+
opts = undefined;
|
|
120
|
+
}
|
|
121
|
+
if (typeof done !== 'function') {
|
|
122
|
+
throw new TypeError('The "callback" argument must be of type function');
|
|
123
|
+
}
|
|
124
|
+
const host = String(hostname);
|
|
125
|
+
const settings = normalizeOptions(opts);
|
|
126
|
+
queueMicrotask(function () {
|
|
127
|
+
let records;
|
|
128
|
+
try {
|
|
129
|
+
records = dnsDriver.getDriver().lookup(host);
|
|
130
|
+
}
|
|
131
|
+
catch (failure) {
|
|
132
|
+
done(dnsFailure(codeForFailure(failure), host));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
let filtered = records;
|
|
136
|
+
if (settings.family === 4 || settings.family === 6) {
|
|
137
|
+
filtered = records.filter(function (record) { return record.family === settings.family; });
|
|
138
|
+
}
|
|
139
|
+
if (!settings.verbatim) {
|
|
140
|
+
filtered = filtered.slice().sort(function (left, right) { return left.family - right.family; });
|
|
141
|
+
}
|
|
142
|
+
if (filtered.length === 0) {
|
|
143
|
+
done(dnsFailure('ENOTFOUND', host));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (settings.all) {
|
|
147
|
+
done(null, filtered);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
done(null, filtered[0].address, filtered[0].family);
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
function lookupService(address, port, callback) {
|
|
154
|
+
if (typeof callback !== 'function') {
|
|
155
|
+
throw new TypeError('The "callback" argument must be of type function');
|
|
156
|
+
}
|
|
157
|
+
const target = String(address);
|
|
158
|
+
const numericPort = Number(port);
|
|
159
|
+
queueMicrotask(function () {
|
|
160
|
+
let hostname;
|
|
161
|
+
try {
|
|
162
|
+
hostname = dnsDriver.getDriver().canonicalNameOf(target);
|
|
163
|
+
}
|
|
164
|
+
catch (failure) {
|
|
165
|
+
callback(dnsFailure(codeForFailure(failure), target));
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
callback(null, hostname, serviceNameOf(numericPort));
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
/** Node 在 Android 这样的平台上读不到解析器配置,这里如实返回空数组。 */
|
|
172
|
+
function getServers() {
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
function setServers() {
|
|
176
|
+
throw (0, errors_1.onjError)('ONJ_UNSUPPORTED', 'dns.setServers() 无法实现:JVM 的解析器配置改不了(Android 由 netd 按网络管理)。');
|
|
177
|
+
}
|
|
178
|
+
function getDefaultResultOrder() {
|
|
179
|
+
return resultOrder;
|
|
180
|
+
}
|
|
181
|
+
function setDefaultResultOrder(order) {
|
|
182
|
+
const value = String(order);
|
|
183
|
+
if (value !== 'verbatim' && value !== 'ipv4first' && value !== 'ipv6first') {
|
|
184
|
+
throw new TypeError('Invalid result order: ' + value);
|
|
185
|
+
}
|
|
186
|
+
resultOrder = value;
|
|
187
|
+
}
|
|
188
|
+
function unsupportedResolve(name) {
|
|
189
|
+
return function () {
|
|
190
|
+
throw (0, errors_1.onjError)('ONJ_UNSUPPORTED', 'dns.' + name + '() 需要 DNS 记录级查询,而这要 JNDI 的 DNS provider —— ' +
|
|
191
|
+
'com.sun.jndi.dns 不在 Android 里,所以这个能力在本平台不成立。' +
|
|
192
|
+
'需要解析主机名请用 dns.lookup()(getaddrinfo)。');
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
function Resolver() {
|
|
196
|
+
throw (0, errors_1.onjError)('ONJ_UNSUPPORTED', 'dns.Resolver 需要可配置的 DNS 记录级查询,Android 上不成立(同 dns.resolve*)。');
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* getaddrinfo 的 hints 与错误码字符串。
|
|
200
|
+
*
|
|
201
|
+
* hints 的数值取 Node 自己的(ADDRCONFIG 1024 / V4MAPPED 2048 / ALL 256),
|
|
202
|
+
* 不是 libuv 的原始值 —— Node 在 lib/dns.js 里重映射过,对齐它才有意义。
|
|
203
|
+
* Java 的 getAllByName 没有对应开关,所以这几个只作为取值存在,传了不生效。
|
|
204
|
+
*/
|
|
205
|
+
const constants = {
|
|
206
|
+
ADDRCONFIG: 1024,
|
|
207
|
+
V4MAPPED: 2048,
|
|
208
|
+
ALL: 256,
|
|
209
|
+
NODATA: 'ENODATA',
|
|
210
|
+
FORMERR: 'EFORMERR',
|
|
211
|
+
SERVFAIL: 'ESERVFAIL',
|
|
212
|
+
NOTFOUND: 'ENOTFOUND',
|
|
213
|
+
NOTIMP: 'ENOTIMP',
|
|
214
|
+
REFUSED: 'EREFUSED',
|
|
215
|
+
BADQUERY: 'EBADQUERY',
|
|
216
|
+
BADNAME: 'EBADNAME',
|
|
217
|
+
BADFAMILY: 'EBADFAMILY',
|
|
218
|
+
BADRESP: 'EBADRESP',
|
|
219
|
+
CONNREFUSED: 'ECONNREFUSED',
|
|
220
|
+
TIMEOUT: 'ETIMEOUT',
|
|
221
|
+
EOF: 'EOF',
|
|
222
|
+
FILE: 'EFILE',
|
|
223
|
+
NOMEM: 'ENOMEM',
|
|
224
|
+
DESTRUCTION: 'EDESTRUCTION',
|
|
225
|
+
BADSTR: 'EBADSTR',
|
|
226
|
+
BADFLAGS: 'EBADFLAGS',
|
|
227
|
+
NONAME: 'ENONAME',
|
|
228
|
+
BADHINTS: 'EBADHINTS',
|
|
229
|
+
NOTINITIALIZED: 'ENOTINITIALIZED',
|
|
230
|
+
LOADIPHLPAPI: 'ELOADIPHLPAPI',
|
|
231
|
+
ADDRGETNETWORKPARAMS: 'EADDRGETNETWORKPARAMS',
|
|
232
|
+
CANCELLED: 'ECANCELLED'
|
|
233
|
+
};
|
|
234
|
+
const api = Object.assign({
|
|
235
|
+
lookup: lookup,
|
|
236
|
+
lookupService: lookupService,
|
|
237
|
+
resolve: unsupportedResolve('resolve'),
|
|
238
|
+
resolve4: unsupportedResolve('resolve4'),
|
|
239
|
+
resolve6: unsupportedResolve('resolve6'),
|
|
240
|
+
resolveAny: unsupportedResolve('resolveAny'),
|
|
241
|
+
resolveCaa: unsupportedResolve('resolveCaa'),
|
|
242
|
+
resolveCname: unsupportedResolve('resolveCname'),
|
|
243
|
+
resolveMx: unsupportedResolve('resolveMx'),
|
|
244
|
+
resolveNaptr: unsupportedResolve('resolveNaptr'),
|
|
245
|
+
resolveNs: unsupportedResolve('resolveNs'),
|
|
246
|
+
resolvePtr: unsupportedResolve('resolvePtr'),
|
|
247
|
+
resolveSoa: unsupportedResolve('resolveSoa'),
|
|
248
|
+
resolveSrv: unsupportedResolve('resolveSrv'),
|
|
249
|
+
resolveTlsa: unsupportedResolve('resolveTlsa'),
|
|
250
|
+
resolveTxt: unsupportedResolve('resolveTxt'),
|
|
251
|
+
reverse: unsupportedResolve('reverse'),
|
|
252
|
+
getServers: getServers,
|
|
253
|
+
setServers: setServers,
|
|
254
|
+
getDefaultResultOrder: getDefaultResultOrder,
|
|
255
|
+
setDefaultResultOrder: setDefaultResultOrder,
|
|
256
|
+
Resolver: Resolver,
|
|
257
|
+
promises: dnsPromises
|
|
258
|
+
}, constants);
|
|
259
|
+
module.exports = api;
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node events 模块的移植(EventEmitter)。
|
|
3
|
+
*
|
|
4
|
+
* 与 Node 的差异(有意为之):
|
|
5
|
+
* - 本实现是 ES class,不能用 `EventEmitter.call(this)` 这种函数式继承;
|
|
6
|
+
* 现代代码一律走 `class X extends EventEmitter`,不受影响。
|
|
7
|
+
* - `captureRejections` 与 `events.on()`(异步迭代器)未实现。
|
|
8
|
+
*/
|
|
9
|
+
type EventListener = (...args: unknown[]) => void;
|
|
10
|
+
type EventName = string | symbol;
|
|
11
|
+
declare class EventEmitter {
|
|
12
|
+
static defaultMaxListeners: number;
|
|
13
|
+
static errorMonitor: symbol;
|
|
14
|
+
static EventEmitter: typeof EventEmitter;
|
|
15
|
+
static listenerCount(emitter: EventEmitter, name: EventName): number;
|
|
16
|
+
static getEventListeners(emitter: EventEmitter, name: EventName): EventListener[];
|
|
17
|
+
static once(emitter: EventEmitter, name: EventName): Promise<unknown[]>;
|
|
18
|
+
static on(emitter: EventEmitter, name: EventName): void;
|
|
19
|
+
constructor();
|
|
20
|
+
get maxListeners(): number;
|
|
21
|
+
set maxListeners(value: number);
|
|
22
|
+
setMaxListeners(count: number): this;
|
|
23
|
+
getMaxListeners(): number;
|
|
24
|
+
on(name: EventName, listener: EventListener): this;
|
|
25
|
+
addListener(name: EventName, listener: EventListener): this;
|
|
26
|
+
prependListener(name: EventName, listener: EventListener): this;
|
|
27
|
+
once(name: EventName, listener: EventListener): this;
|
|
28
|
+
prependOnceListener(name: EventName, listener: EventListener): this;
|
|
29
|
+
/** 内部注册入口。Node 的 EventEmitter 没有它,但 Process 只以实例导出,成员必须是 public。 */
|
|
30
|
+
addEntry(name: EventName, listener: EventListener, once: boolean, prepend?: boolean): this;
|
|
31
|
+
emit(name: EventName, ...args: unknown[]): boolean;
|
|
32
|
+
removeListener(name: EventName, listener: EventListener): this;
|
|
33
|
+
off(name: EventName, listener: EventListener): this;
|
|
34
|
+
removeAllListeners(name?: EventName): this;
|
|
35
|
+
listeners(name: EventName): EventListener[];
|
|
36
|
+
rawListeners(name: EventName): EventListener[];
|
|
37
|
+
listenerCount(name: EventName): number;
|
|
38
|
+
eventNames(): EventName[];
|
|
39
|
+
}
|
|
40
|
+
export = EventEmitter;
|