@wener/utils 1.1.32 → 1.1.35

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.
Files changed (160) hide show
  1. package/lib/asyncs/nextOfAsyncIterator.js +8 -0
  2. package/lib/asyncs/nextOfAsyncIterator.js.map +1 -1
  3. package/lib/asyncs/timeout.js +9 -5
  4. package/lib/asyncs/timeout.js.map +1 -1
  5. package/lib/cn/index.js +3 -0
  6. package/lib/cn/index.js.map +1 -0
  7. package/lib/cn/parseChineseNumber.js +94 -0
  8. package/lib/cn/parseChineseNumber.js.map +1 -0
  9. package/lib/crypto/getRandomValues.js +6 -3
  10. package/lib/crypto/getRandomValues.js.map +1 -1
  11. package/lib/errors/Errors.js +1 -1
  12. package/lib/errors/Errors.js.map +1 -1
  13. package/lib/index.js +3 -0
  14. package/lib/index.js.map +1 -1
  15. package/lib/io/Bytes.js +51 -0
  16. package/lib/io/Bytes.js.map +1 -0
  17. package/lib/isomorphics/structuredClone.js +1 -3
  18. package/lib/isomorphics/structuredClone.js.map +1 -1
  19. package/lib/langs/AsyncCloser.js +40 -0
  20. package/lib/langs/AsyncCloser.js.map +1 -0
  21. package/lib/langs/Closer.js +34 -0
  22. package/lib/langs/Closer.js.map +1 -0
  23. package/lib/logging/Logger.js.map +1 -1
  24. package/lib/logging/slog.js.map +1 -1
  25. package/lib/objects/merge/merge.js +1 -0
  26. package/lib/schema/typebox/gen/codegen/common/encoder.js +0 -6
  27. package/lib/schema/typebox/gen/codegen/common/encoder.js.map +1 -1
  28. package/lib/schema/typebox/gen/codegen/common/formatter.js.map +1 -1
  29. package/lib/schema/typebox/gen/codegen/common/index.js +25 -1
  30. package/lib/schema/typebox/gen/codegen/common/jsdoc.js.map +1 -1
  31. package/lib/schema/typebox/gen/codegen/expression/compiler.js +2 -5
  32. package/lib/schema/typebox/gen/codegen/expression/compiler.js.map +1 -1
  33. package/lib/schema/typebox/gen/codegen/expression/errors.js +1 -1
  34. package/lib/schema/typebox/gen/codegen/expression/errors.js.map +1 -1
  35. package/lib/schema/typebox/gen/codegen/expression/evaluator.js +1 -1
  36. package/lib/schema/typebox/gen/codegen/expression/evaluator.js.map +1 -1
  37. package/lib/schema/typebox/gen/codegen/expression/expression.js +48 -51
  38. package/lib/schema/typebox/gen/codegen/expression/expression.js.map +1 -1
  39. package/lib/schema/typebox/gen/codegen/expression/index.js +27 -1
  40. package/lib/schema/typebox/gen/codegen/index.js +25 -1
  41. package/lib/schema/typebox/gen/codegen/model/index.js +25 -1
  42. package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js +25 -4
  43. package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js.map +1 -1
  44. package/lib/schema/typebox/gen/codegen/model/model-to-expression.js +26 -2
  45. package/lib/schema/typebox/gen/codegen/model/model-to-expression.js.map +1 -1
  46. package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js +25 -4
  47. package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js.map +1 -1
  48. package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js +25 -4
  49. package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js.map +1 -1
  50. package/lib/schema/typebox/gen/codegen/model/model-to-javascript.js.map +1 -1
  51. package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js +25 -4
  52. package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js.map +1 -1
  53. package/lib/schema/typebox/gen/codegen/model/model-to-typebox.js.map +1 -1
  54. package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js +25 -1
  55. package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js.map +1 -1
  56. package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js +25 -4
  57. package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js.map +1 -1
  58. package/lib/schema/typebox/gen/codegen/model/model-to-value.js.map +1 -1
  59. package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js +25 -4
  60. package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js.map +1 -1
  61. package/lib/schema/typebox/gen/codegen/model/model-to-yup.js +25 -4
  62. package/lib/schema/typebox/gen/codegen/model/model-to-yup.js.map +1 -1
  63. package/lib/schema/typebox/gen/codegen/model/model-to-zod.js +25 -4
  64. package/lib/schema/typebox/gen/codegen/model/model-to-zod.js.map +1 -1
  65. package/lib/schema/typebox/gen/codegen/model/model.js.map +1 -1
  66. package/lib/schema/typebox/gen/codegen/typescript/index.js +25 -1
  67. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js +25 -1
  68. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js.map +1 -1
  69. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js +27 -3
  70. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js.map +1 -1
  71. package/lib/server/crypto/md5.js.map +1 -0
  72. package/lib/server/fetch/createFetchWithProxy.js.map +1 -0
  73. package/lib/server/fetch/createFetchWithProxyByNodeFetch.js.map +1 -0
  74. package/lib/server/fetch/createFetchWithProxyByUndici.js.map +1 -0
  75. package/lib/server/getPackageDir.js.map +1 -0
  76. package/lib/server/index.js +7 -0
  77. package/lib/server/index.js.map +1 -0
  78. package/lib/server/jsdom.js.map +1 -0
  79. package/lib/server/node-fetch.js.map +1 -0
  80. package/lib/server/polyfill/polyfillBrowser.js.map +1 -0
  81. package/lib/server/polyfill/polyfillCrypto.js.map +1 -0
  82. package/lib/server/polyfill/polyfillFetch.js.map +1 -0
  83. package/lib/server/polyfill/polyfillJsDom.js.map +1 -0
  84. package/lib/{servers → server}/polyfill/polyfillWebSocket.js +5 -0
  85. package/lib/server/polyfill/polyfillWebSocket.js.map +1 -0
  86. package/lib/server/ws.js.map +1 -0
  87. package/lib/{types/index.d.js → types.d.js} +1 -1
  88. package/lib/types.d.js.map +1 -0
  89. package/package.json +37 -71
  90. package/src/asyncs/nextOfAsyncIterator.ts +13 -1
  91. package/src/asyncs/timeout.ts +15 -12
  92. package/src/cn/index.ts +1 -0
  93. package/src/cn/parseChineseNumber.test.ts +24 -0
  94. package/src/cn/parseChineseNumber.ts +97 -0
  95. package/src/crypto/getRandomValues.ts +5 -3
  96. package/src/crypto/hashing.test.ts +1 -1
  97. package/src/errors/Errors.test.ts +22 -0
  98. package/src/errors/Errors.ts +1 -4
  99. package/src/index.ts +2 -0
  100. package/src/io/Bytes.ts +64 -0
  101. package/src/isomorphics/structuredClone.ts +0 -3
  102. package/src/langs/AsyncCloser.ts +45 -0
  103. package/src/langs/Closer.ts +39 -0
  104. package/src/server/index.ts +6 -0
  105. package/src/{servers → server}/polyfill/polyfillWebSocket.ts +5 -0
  106. package/src/{types/index.d.ts → types.d.ts} +12 -0
  107. package/tsconfig.json +7 -5
  108. package/index.ts +0 -1
  109. package/lib/server.js +0 -7
  110. package/lib/server.js.map +0 -1
  111. package/lib/servers/crypto/md5.js.map +0 -1
  112. package/lib/servers/fetch/createFetchWithProxy.js.map +0 -1
  113. package/lib/servers/fetch/createFetchWithProxyByNodeFetch.js.map +0 -1
  114. package/lib/servers/fetch/createFetchWithProxyByUndici.js.map +0 -1
  115. package/lib/servers/getPackageDir.js.map +0 -1
  116. package/lib/servers/jsdom.js.map +0 -1
  117. package/lib/servers/node-fetch.js.map +0 -1
  118. package/lib/servers/polyfill/polyfillBrowser.js.map +0 -1
  119. package/lib/servers/polyfill/polyfillCrypto.js.map +0 -1
  120. package/lib/servers/polyfill/polyfillFetch.js.map +0 -1
  121. package/lib/servers/polyfill/polyfillJsDom.js.map +0 -1
  122. package/lib/servers/polyfill/polyfillWebSocket.js.map +0 -1
  123. package/lib/servers/ws.js.map +0 -1
  124. package/lib/types/global.d.js +0 -2
  125. package/lib/types/global.d.js.map +0 -1
  126. package/lib/types/index.d.js.map +0 -1
  127. package/schema/typebox/gen/index.ts +0 -1
  128. package/schema/typebox/index.ts +0 -1
  129. package/server/jsdom.ts +0 -1
  130. package/server/node-fetch.ts +0 -1
  131. package/server/ws.ts +0 -1
  132. package/server.ts +0 -1
  133. package/src/server.ts +0 -6
  134. package/src/types/global.d.ts +0 -11
  135. package/types.d.ts +0 -1
  136. /package/lib/{servers → server}/crypto/md5.js +0 -0
  137. /package/lib/{servers → server}/fetch/createFetchWithProxy.js +0 -0
  138. /package/lib/{servers → server}/fetch/createFetchWithProxyByNodeFetch.js +0 -0
  139. /package/lib/{servers → server}/fetch/createFetchWithProxyByUndici.js +0 -0
  140. /package/lib/{servers → server}/getPackageDir.js +0 -0
  141. /package/lib/{servers → server}/jsdom.js +0 -0
  142. /package/lib/{servers → server}/node-fetch.js +0 -0
  143. /package/lib/{servers → server}/polyfill/polyfillBrowser.js +0 -0
  144. /package/lib/{servers → server}/polyfill/polyfillCrypto.js +0 -0
  145. /package/lib/{servers → server}/polyfill/polyfillFetch.js +0 -0
  146. /package/lib/{servers → server}/polyfill/polyfillJsDom.js +0 -0
  147. /package/lib/{servers → server}/ws.js +0 -0
  148. /package/src/{servers → server}/crypto/md5.ts +0 -0
  149. /package/src/{servers → server}/fetch/createFetchWithProxy.ts +0 -0
  150. /package/src/{servers → server}/fetch/createFetchWithProxyByNodeFetch.ts +0 -0
  151. /package/src/{servers → server}/fetch/createFetchWithProxyByUndici.ts +0 -0
  152. /package/src/{servers → server}/getPackageDir.ts +0 -0
  153. /package/src/{servers → server}/jsdom.ts +0 -0
  154. /package/src/{servers → server}/node-fetch.ts +0 -0
  155. /package/src/{servers → server}/polyfill/polyfillBrowser.test.ts +0 -0
  156. /package/src/{servers → server}/polyfill/polyfillBrowser.ts +0 -0
  157. /package/src/{servers → server}/polyfill/polyfillCrypto.ts +0 -0
  158. /package/src/{servers → server}/polyfill/polyfillFetch.ts +0 -0
  159. /package/src/{servers → server}/polyfill/polyfillJsDom.ts +0 -0
  160. /package/src/{servers → server}/ws.ts +0 -0
@@ -2,12 +2,16 @@ import { MaybePromise } from './MaybePromise';
2
2
  import { isIterator } from './isIterator';
3
3
  import { isPromise } from './isPromise';
4
4
 
5
+ type IteratorLike<T> = Iterable<T> | Iterator<T>;
6
+ type AsyncIteratorLike<T> = AsyncIterable<T> | AsyncIterator<T> | AsyncIterableIterator<T> | IteratorLike<T>;
7
+
5
8
  export function nextOfAsyncIterator<T>(
6
- it: MaybePromise<AsyncIterator<T> | Iterator<T> | T>,
9
+ it: MaybePromise<AsyncIterable<T> | Iterable<T> | AsyncIterator<T> | Iterator<T> | T>,
7
10
  ): MaybePromise<[value: T, done?: boolean]> {
8
11
  if (isPromise(it)) {
9
12
  return it.then((v) => nextOfAsyncIterator(v));
10
13
  }
14
+
11
15
  if (isIterator(it)) {
12
16
  let next = it.next();
13
17
  if (isPromise(next)) {
@@ -15,5 +19,13 @@ export function nextOfAsyncIterator<T>(
15
19
  }
16
20
  return [next.value, next.done];
17
21
  }
22
+ if (it && typeof it === 'object') {
23
+ if (Symbol.iterator in it) {
24
+ return nextOfAsyncIterator(it[Symbol.iterator]());
25
+ }
26
+ if (Symbol.asyncIterator in it) {
27
+ return nextOfAsyncIterator(it[Symbol.asyncIterator]());
28
+ }
29
+ }
18
30
  return [it];
19
31
  }
@@ -1,23 +1,26 @@
1
- export function timeout<T = any>(v: Promise<T>, ms: number): Promise<T> {
1
+ export function timeout<T = any>(
2
+ v: Promise<T> | ((args: { signal: AbortSignal }) => Promise<T>),
3
+ ms: number,
4
+ ): Promise<T> {
2
5
  const error = new TimeoutError();
3
6
  let timeout: any;
4
- return Promise.race([
7
+ let ac: AbortController | undefined;
8
+ if (typeof v === 'function') {
9
+ ac = new AbortController();
10
+ v = v({ signal: ac.signal });
11
+ }
12
+
13
+ return Promise.race<T>([
5
14
  v,
6
15
  new Promise((_resolve, reject) => {
7
16
  timeout = setTimeout(() => {
17
+ ac?.abort(error);
8
18
  reject(error);
9
19
  }, ms);
10
20
  }),
11
- ]).then(
12
- (v) => {
13
- clearTimeout(timeout);
14
- return v;
15
- },
16
- (e) => {
17
- clearTimeout(timeout);
18
- throw e;
19
- },
20
- ) as Promise<T>;
21
+ ]).finally(() => {
22
+ clearTimeout(timeout);
23
+ });
21
24
  }
22
25
 
23
26
  export class TimeoutError extends Error {
@@ -0,0 +1 @@
1
+ export { parseChineseNumber } from './parseChineseNumber';
@@ -0,0 +1,24 @@
1
+ import { expect, test } from 'vitest';
2
+ import { parseChineseNumber } from './parseChineseNumber';
3
+
4
+ test('parseChineseNumber', () => {
5
+ for (const [a, b] of [
6
+ ['0', 0],
7
+ ['10000', 10_000],
8
+ ['123', 123],
9
+ ['一万', 10_000],
10
+ ['一万一', 10_001],
11
+ ['一万一百一', 10_101],
12
+ ['一万零一百零一', 10_101],
13
+ ['一千零一十', 1010],
14
+ ['一千零一十一', 1011],
15
+ ['一捌玖', 189],
16
+ ['一百一', 101],
17
+ ['一百九十二', 192],
18
+ ['捌玖', 89],
19
+ ['捌玖零', 890],
20
+ ['零捌玖', 89],
21
+ ] as const) {
22
+ expect(parseChineseNumber(a)).toBe(b);
23
+ }
24
+ });
@@ -0,0 +1,97 @@
1
+ const ToNumber: Record<string, number> = {
2
+ 〇: 0,
3
+ 一: 1,
4
+ 二: 2,
5
+ 三: 3,
6
+ 四: 4,
7
+ 五: 5,
8
+ 六: 6,
9
+ 七: 7,
10
+ 八: 8,
11
+ 九: 9,
12
+ 十: 10,
13
+ 百: 100,
14
+ 千: 1000,
15
+ 万: 10_000,
16
+ 零: 0,
17
+ 壹: 1,
18
+ 贰: 2,
19
+ 叁: 3,
20
+ 肆: 4,
21
+ 伍: 5,
22
+ 陆: 6,
23
+ 柒: 7,
24
+ 捌: 8,
25
+ 玖: 9,
26
+ 拾: 10,
27
+ 佰: 100,
28
+ 仟: 1000,
29
+ 0: 0,
30
+ 1: 1,
31
+ 2: 2,
32
+ 3: 3,
33
+ 4: 4,
34
+ 5: 5,
35
+ 6: 6,
36
+ 7: 7,
37
+ 8: 8,
38
+ 9: 9,
39
+ };
40
+
41
+ // 一万一 -> 10001
42
+ // 一万一百一 -> 10101
43
+ // 一万 -> 10000
44
+ // 10000 -> 10000
45
+ export function parseChineseNumber(s: string | number) {
46
+ if (typeof s === 'number') {
47
+ return s;
48
+ }
49
+
50
+ let n = 0;
51
+ let c = 0;
52
+ let base = 0;
53
+ let shouldAddLast = false;
54
+ for (const char of s.split('').reverse()) {
55
+ c = ToNumber[char];
56
+ if (c === undefined) {
57
+ throw new Error(`无法解析的数字: ${char}`);
58
+ }
59
+
60
+ switch (c) {
61
+ case 10: {
62
+ base = 1;
63
+ break;
64
+ }
65
+
66
+ case 100: {
67
+ base = 2;
68
+ break;
69
+ }
70
+
71
+ case 1000: {
72
+ base = 3;
73
+ break;
74
+ }
75
+
76
+ case 10_000: {
77
+ base = 4;
78
+ break;
79
+ }
80
+ }
81
+
82
+ //
83
+ if (c < 10) {
84
+ n += c * 10 ** base;
85
+ base++;
86
+ shouldAddLast = false;
87
+ } else {
88
+ shouldAddLast = true;
89
+ }
90
+ }
91
+
92
+ if (shouldAddLast) {
93
+ n += c;
94
+ }
95
+
96
+ return n;
97
+ }
@@ -11,9 +11,11 @@ export let getRandomValues: <T extends Exclude<TypedArray, Float32Array | Float6
11
11
 
12
12
  function _getRandomValues<T extends Exclude<TypedArray, Float32Array | Float64Array>>(buf: T) {
13
13
  const nodeCrypto = getNodeCrypto();
14
- if (nodeCrypto?.webcrypto?.getRandomValues) {
15
- getRandomValues = nodeCrypto?.webcrypto?.getRandomValues?.bind(nodeCrypto?.webcrypto);
16
- return nodeCrypto.webcrypto.getRandomValues(buf);
14
+ // avoid type error
15
+ let wc = nodeCrypto?.webcrypto as any;
16
+ if (wc?.getRandomValues) {
17
+ getRandomValues = wc.getRandomValues?.bind(nodeCrypto?.webcrypto);
18
+ return wc.getRandomValues(buf);
17
19
  }
18
20
  if (nodeCrypto?.randomBytes) {
19
21
  if (!(buf instanceof Uint8Array)) {
@@ -1,6 +1,6 @@
1
1
  import { assert, beforeAll, expect, test } from 'vitest';
2
2
  import { ArrayBuffers } from '../io/ArrayBuffers';
3
- import { polyfillCrypto } from '../servers/polyfill/polyfillCrypto';
3
+ import { polyfillCrypto } from '../server/polyfill/polyfillCrypto';
4
4
  import { isUUID } from '../validations/isUUID';
5
5
  import { hex } from './base';
6
6
  import { hmac, sha1, sha256, sha384, sha512 } from './hashing';
@@ -0,0 +1,22 @@
1
+ import { test } from 'vitest';
2
+ import { Errors } from './Errors';
3
+
4
+ test('Errors', () => {
5
+ {
6
+ let a: string | undefined = '';
7
+ Errors.NotFound.check(a);
8
+ let b: string = a;
9
+ hole(b);
10
+ }
11
+ if (false) {
12
+ // 不能同时 asserts 且返回
13
+ // https://stackoverflow.com/a/73252858/1870054
14
+ // https://github.com/microsoft/TypeScript/issues/34636
15
+ let a: string | undefined;
16
+ Errors.NotFound.require(a);
17
+ // let c: string = a;
18
+ // hole(c);
19
+ }
20
+ });
21
+
22
+ function hole(..._: any[]) {}
@@ -147,9 +147,6 @@ export interface ErrorDetail {
147
147
 
148
148
  require<T>(v: T | undefined, o?: Partial<ErrorDetailInit> | string): NonNullable<T>;
149
149
 
150
- // 不支持 return value
151
- // https://stackoverflow.com/a/73252858/1870054
152
-
153
150
  check(condition: boolean, o?: Partial<ErrorDetailInit> | string): asserts condition;
154
151
 
155
152
  check<T>(v: T | undefined | null, o?: Partial<ErrorDetailInit> | string): asserts v is NonNullable<T>;
@@ -160,7 +157,7 @@ export class Errors {
160
157
  static Unauthorized: ErrorDetail = this.with({ status: 403 });
161
158
  static Forbidden: ErrorDetail = this.with({ status: 403 });
162
159
  static NotFound: ErrorDetail = this.with({ status: 404 });
163
- static InternalServerError: ErrorDetail = this.with({ status: 501 });
160
+ static InternalServerError: ErrorDetail = this.with({ status: 500 });
164
161
  static NotImplemented: ErrorDetail = this.with({ status: 501 });
165
162
  static ServiceUnavailable: ErrorDetail = this.with({ status: 503 });
166
163
 
package/src/index.ts CHANGED
@@ -42,6 +42,8 @@ export { isPlainObject } from './langs/isPlainObject';
42
42
  export { parseBoolean } from './langs/parseBoolean';
43
43
  export { maybeFunction, type MaybeFunction } from './langs/MaybeFunction';
44
44
  export { memoize } from './langs/memoize';
45
+ export { AsyncCloser } from './langs/AsyncCloser';
46
+ export { Closer } from './langs/Closer';
45
47
 
46
48
  export { isUUID } from './validations/isUUID';
47
49
  export { parseTimestamp } from './validations/parseTimestamp';
@@ -0,0 +1,64 @@
1
+ const objectToString = Object.prototype.toString;
2
+ const uint8ArrayStringified = '[object Uint8Array]';
3
+
4
+ /**
5
+ * Utils for UInt8Array
6
+ *
7
+ * @see https://github.com/sindresorhus/uint8array-extras/blob/main/index.js
8
+ */
9
+ export class Bytes {
10
+ static #decoder = new globalThis.TextDecoder();
11
+
12
+ static isUint8Array(value: any): value is Uint8Array {
13
+ if (!value) {
14
+ return false;
15
+ }
16
+
17
+ if (value.constructor === Uint8Array) {
18
+ return true;
19
+ }
20
+
21
+ return objectToString.call(value) === uint8ArrayStringified;
22
+ }
23
+
24
+ static require(value: any): Uint8Array {
25
+ if (!this.isUint8Array(value)) {
26
+ throw new TypeError(`Expected \`Uint8Array\`, got \`${typeof value}\``);
27
+ }
28
+ return value;
29
+ }
30
+
31
+ static toUint8Array(value: ArrayBuffer | ArrayBufferView): Uint8Array {
32
+ if (value instanceof ArrayBuffer) {
33
+ return new Uint8Array(value);
34
+ }
35
+
36
+ if (ArrayBuffer.isView(value)) {
37
+ return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
38
+ }
39
+
40
+ throw new TypeError(`Unsupported value, got \`${typeof value}\`.`);
41
+ }
42
+
43
+ static concat(arrays: Uint8Array[], totalLength: number): Uint8Array {
44
+ if (arrays.length === 0) {
45
+ return new Uint8Array(0);
46
+ }
47
+
48
+ totalLength ??= arrays.reduce((accumulator, currentValue) => accumulator + currentValue.length, 0);
49
+
50
+ const returnValue = new Uint8Array(totalLength);
51
+
52
+ let offset = 0;
53
+ for (const array of arrays) {
54
+ returnValue.set(this.require(array), offset);
55
+ offset += array.length;
56
+ }
57
+
58
+ return returnValue;
59
+ }
60
+
61
+ static toString(value: Uint8Array) {
62
+ return this.#decoder.decode(value);
63
+ }
64
+ }
@@ -1,8 +1,5 @@
1
1
  /* eslint no-proto:0 */
2
2
  import { classOf } from '../langs/classOf';
3
- import { getGlobalThis } from './getGlobalThis';
4
-
5
- const globalThis = getGlobalThis();
6
3
 
7
4
  /**
8
5
  * Clone an object using structured cloning algorithm
@@ -0,0 +1,45 @@
1
+ type AsyncClosable = { close(): void | Promise<void> } | (() => void | Promise<void>) | AsyncDisposable | Disposable;
2
+
3
+ /**
4
+ * @see AsyncDisposableStack
5
+ */
6
+ export class AsyncCloser implements AsyncDisposable {
7
+ closers: Array<AsyncClosable> = [];
8
+
9
+ defer(closer: AsyncClosable | null | undefined) {
10
+ if (!closer) {
11
+ return;
12
+ }
13
+ this.closers.push(closer);
14
+ }
15
+
16
+ add<T extends AsyncClosable | null | undefined>(closer: T): T {
17
+ if (!closer) {
18
+ return closer;
19
+ }
20
+ this.closers.push(closer);
21
+ return closer;
22
+ }
23
+
24
+ async [Symbol.asyncDispose]() {
25
+ for (let closer of this.closers) {
26
+ let o;
27
+ if (typeof closer === 'function') {
28
+ o = closer();
29
+ } else if (Symbol.asyncDispose in closer) {
30
+ o = closer[Symbol.asyncDispose]();
31
+ } else if (Symbol.dispose in closer) {
32
+ closer[Symbol.dispose]();
33
+ } else {
34
+ o = closer.close();
35
+ }
36
+ if (o && typeof o.then === 'function') {
37
+ await o;
38
+ }
39
+ }
40
+ }
41
+
42
+ close() {
43
+ return this[Symbol.asyncDispose]();
44
+ }
45
+ }
@@ -0,0 +1,39 @@
1
+ type Closable = { close(): void } | (() => void) | Disposable;
2
+
3
+ /**
4
+ * @see DisposableStack
5
+ */
6
+ export class Closer implements Disposable {
7
+ closers: Array<Closable> = [];
8
+
9
+ defer(closer: Closable | null | undefined) {
10
+ if (!closer) {
11
+ return;
12
+ }
13
+ this.closers.push(closer);
14
+ }
15
+
16
+ add<T extends Closable | null | undefined>(closer: T): T {
17
+ if (!closer) {
18
+ return closer;
19
+ }
20
+ this.closers.push(closer);
21
+ return closer;
22
+ }
23
+
24
+ [Symbol.dispose]() {
25
+ for (let closer of this.closers) {
26
+ if (typeof closer === 'function') {
27
+ closer();
28
+ } else if (Symbol.dispose in closer) {
29
+ closer[Symbol.dispose]();
30
+ } else {
31
+ closer.close();
32
+ }
33
+ }
34
+ }
35
+
36
+ close() {
37
+ this[Symbol.dispose]();
38
+ }
39
+ }
@@ -0,0 +1,6 @@
1
+ export { polyfillCrypto } from './polyfill/polyfillCrypto';
2
+ export { createFetchWithProxyByUndici } from './fetch/createFetchWithProxyByUndici';
3
+ export { createFetchWithProxy } from './fetch/createFetchWithProxy';
4
+
5
+ export { md5 } from './crypto/md5';
6
+ export { getPackageDir } from './getPackageDir';
@@ -8,6 +8,11 @@ export function polyfillWebSocket(ws?: any): MaybePromise<boolean> {
8
8
  if ('WebSocket' in globalThis) {
9
9
  return false;
10
10
  }
11
+ if ('then' in ws) {
12
+ return ws.then((v: any) => {
13
+ return polyfillWebSocket(v?.default || v);
14
+ });
15
+ }
11
16
  if (ws) {
12
17
  const { WebSocket } = ws;
13
18
  Object.assign(globalThis, { WebSocket });
@@ -1,3 +1,15 @@
1
+ declare var __DEV__: boolean;
2
+
3
+ namespace NodeJS {
4
+ interface Process {
5
+ // webpack check
6
+ readonly browser?: boolean;
7
+ }
8
+ interface ProcessEnv {
9
+ readonly NODE_ENV: 'development' | 'production' | 'test';
10
+ }
11
+ }
12
+
1
13
  export type AbstractConstructor<T = unknown> = abstract new (...args: any[]) => T;
2
14
  export type Constructor<T = unknown> = new (...args: any[]) => T;
3
15
  export type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
package/tsconfig.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "moduleResolution": "node",
3
+ "moduleResolution": "bundler",
4
4
  "target": "ESNext",
5
5
  "module": "ESNext",
6
6
  "lib": [
@@ -15,17 +15,19 @@
15
15
  "allowSyntheticDefaultImports": true,
16
16
  "noImplicitAny": true,
17
17
  "noImplicitReturns": true,
18
- "noUnusedLocals": true,
19
- "noUnusedParameters": true,
18
+ "noUnusedLocals": false,
19
+ "noUnusedParameters": false,
20
20
  "pretty": true,
21
21
  "removeComments": false,
22
- "stripInternal": true
22
+ "stripInternal": true,
23
+ "isolatedModules": true,
24
+ "outDir": "lib"
23
25
  },
24
26
  "exclude": [
25
27
  "node_modules"
26
28
  ],
27
29
  "include": [
28
- "types.d.ts",
30
+ "src/types.d.ts",
29
31
  "src"
30
32
  ]
31
33
  }
package/index.ts DELETED
@@ -1 +0,0 @@
1
- export * from './src';
package/lib/server.js DELETED
@@ -1,7 +0,0 @@
1
- export { polyfillCrypto } from './servers/polyfill/polyfillCrypto.js';
2
- export { createFetchWithProxyByUndici } from './servers/fetch/createFetchWithProxyByUndici.js';
3
- export { createFetchWithProxy } from './servers/fetch/createFetchWithProxy.js';
4
- export { md5 } from './servers/crypto/md5.js';
5
- export { getPackageDir } from './servers/getPackageDir.js';
6
-
7
- //# sourceMappingURL=server.js.map
package/lib/server.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/server.ts"],"sourcesContent":["export { polyfillCrypto } from './servers/polyfill/polyfillCrypto';\nexport { createFetchWithProxyByUndici } from './servers/fetch/createFetchWithProxyByUndici';\nexport { createFetchWithProxy } from './servers/fetch/createFetchWithProxy';\n\nexport { md5 } from './servers/crypto/md5';\nexport { getPackageDir } from './servers/getPackageDir';\n"],"names":["polyfillCrypto","createFetchWithProxyByUndici","createFetchWithProxy","md5","getPackageDir"],"mappings":"AAAA,SAASA,cAAc,QAAQ,oCAAoC;AACnE,SAASC,4BAA4B,QAAQ,+CAA+C;AAC5F,SAASC,oBAAoB,QAAQ,uCAAuC;AAE5E,SAASC,GAAG,QAAQ,uBAAuB;AAC3C,SAASC,aAAa,QAAQ,0BAA0B"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/servers/crypto/md5.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\nexport function md5(input: Buffer | string) {\n return createHash('md5').update(input).digest('hex') as string;\n}\n"],"names":["createHash","md5","input","update","digest"],"mappings":"AAAA,SAASA,UAAU,QAAQ,cAAc;AAEzC,OAAO,SAASC,IAAIC,KAAsB;IACxC,OAAOF,WAAW,OAAOG,MAAM,CAACD,OAAOE,MAAM,CAAC;AAChD"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/servers/fetch/createFetchWithProxy.ts"],"sourcesContent":["import { createFetchWithProxyByUndici } from './createFetchWithProxyByUndici';\n\nexport const createFetchWithProxy = createFetchWithProxyByUndici;\n"],"names":["createFetchWithProxyByUndici","createFetchWithProxy"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,iCAAiC;AAE9E,OAAO,MAAMC,uBAAuBD,6BAA6B"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/servers/fetch/createFetchWithProxyByNodeFetch.ts"],"sourcesContent":["import { type FetchLike } from '../../fetch';\nimport { getGlobalThis } from '../../isomorphics/getGlobalThis';\n\nexport function createFetchWithProxyByNodeFetch({\n proxy,\n fetch,\n}: { proxy?: string; fetch?: FetchLike } = {}): FetchLike {\n const globalThis = getGlobalThis();\n if (!proxy) {\n return fetch || globalThis.fetch;\n }\n\n let agent: any;\n const Request = globalThis.Request;\n let NodeRequest: any;\n let NodeFetch: any;\n return async (url, init?: RequestInit) => {\n if (!agent) {\n const { default: createHttpsProxyAgent } = await import('https-proxy-agent');\n agent = (createHttpsProxyAgent as any)(proxy);\n }\n\n // node-fetch 才可以,node v18 fetch 不支持\n if (!NodeRequest) {\n ({ Request: NodeRequest, default: NodeFetch } = await import('node-fetch'));\n }\n\n fetch ||= NodeFetch;\n\n if (url instanceof Request) {\n return (fetch as any)(new Request(url, { agent } as any));\n }\n if ((url as any) instanceof NodeRequest) {\n return (fetch as any)(new NodeRequest(url, { agent } as any));\n }\n return (fetch as any)(url, {\n ...init,\n agent,\n } as any);\n };\n}\n"],"names":["getGlobalThis","createFetchWithProxyByNodeFetch","proxy","fetch","globalThis","agent","Request","NodeRequest","NodeFetch","url","init","default","createHttpsProxyAgent"],"mappings":"AACA,SAASA,aAAa,QAAQ,kCAAkC;AAEhE,OAAO,SAASC,gCAAgC,EAC9CC,KAAK,EACLC,KAAK,EACiC,GAAG,CAAC,CAAC;IAC3C,MAAMC,aAAaJ;IACnB,IAAI,CAACE,OAAO;QACV,OAAOC,SAASC,WAAWD,KAAK;IAClC;IAEA,IAAIE;IACJ,MAAMC,UAAUF,WAAWE,OAAO;IAClC,IAAIC;IACJ,IAAIC;IACJ,OAAO,OAAOC,KAAKC;QACjB,IAAI,CAACL,OAAO;YACV,MAAM,EAAEM,SAASC,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC;YACxDP,QAAQ,AAACO,sBAA8BV;QACzC;QAEA,oCAAoC;QACpC,IAAI,CAACK,aAAa;YACf,CAAA,EAAED,SAASC,WAAW,EAAEI,SAASH,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,aAAY;QAC3E;QAEAL,UAAUK;QAEV,IAAIC,eAAeH,SAAS;YAC1B,OAAO,AAACH,MAAc,IAAIG,QAAQG,KAAK;gBAAEJ;YAAM;QACjD;QACA,IAAI,AAACI,eAAuBF,aAAa;YACvC,OAAO,AAACJ,MAAc,IAAII,YAAYE,KAAK;gBAAEJ;YAAM;QACrD;QACA,OAAO,AAACF,MAAcM,KAAK;YACzB,GAAGC,IAAI;YACPL;QACF;IACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/servers/fetch/createFetchWithProxyByUndici.ts"],"sourcesContent":["import { MaybePromise } from '../../asyncs/MaybePromise';\nimport { createFetchWith, FetchLike } from '../../fetch';\nimport { getGlobalThis } from '../../isomorphics/getGlobalThis';\n\nexport function createFetchWithProxyByUndici({\n proxy,\n token: _token,\n fetch,\n undici,\n}: {\n proxy?: string;\n token?: string;\n fetch?: FetchLike;\n undici?: MaybePromise<{ fetch: any; ProxyAgent: any }>;\n} = {}): FetchLike {\n if (!proxy) {\n return fetch || globalThis.fetch;\n }\n\n if ((getGlobalThis() as any).Bun) {\n return createFetchWith({\n fetch,\n onRequest: ({ url, req, next }) => {\n return next(url, {\n ...req,\n // https://github.com/oven-sh/bun/issues/1829\n proxy,\n } as RequestInit);\n },\n });\n }\n\n let agent: any;\n // https://github.com/nodejs/undici/blob/main/docs/best-practices/proxy.md\n return async (...args) => {\n const init = (args[1] ||= {}) as RequestInit & {\n duplex?: string;\n dispatcher?: any;\n };\n {\n const body = init.body;\n if (typeof body === 'object' && body && (body instanceof ReadableStream || Symbol.asyncIterator in body)) {\n // request.duplex must be set if request.body is ReadableStream or Async Iterables\n init.duplex ||= 'half';\n }\n }\n if (!agent) {\n let uri = proxy;\n let token = _token;\n {\n let u: URL | undefined;\n try {\n u = new URL(proxy);\n } catch (e) {}\n if (!token && u && (u.username || u.password)) {\n token = `Basic ${btoa(`${u.username || ''}:${u.password}`)}`;\n u.username = '';\n u.password = '';\n uri = u.toString();\n }\n }\n // if in next use 'next/dist/compiled/undici'\n undici ||= import('undici');\n const mod = await undici;\n const ProxyAgent = mod.ProxyAgent as new (_: any) => any;\n fetch ||= mod.fetch as FetchLike;\n // https://github.com/nodejs/undici/blob/main/docs/api/ProxyAgent.md\n agent = new ProxyAgent({\n uri,\n token,\n });\n // https://github.com/nodejs/node/issues/43187#issuecomment-1134634174\n // (global as any)[Symbol.for('undici.globalDispatcher.1')] = agent;\n // fixme should unwrap error https://github.com/nodejs/undici/issues/1248\n }\n init.dispatcher = agent;\n return await fetch!(...args);\n };\n}\n"],"names":["createFetchWith","getGlobalThis","createFetchWithProxyByUndici","proxy","token","_token","fetch","undici","globalThis","Bun","onRequest","url","req","next","agent","args","init","body","ReadableStream","Symbol","asyncIterator","duplex","uri","u","URL","e","username","password","btoa","toString","mod","ProxyAgent","dispatcher"],"mappings":"AACA,SAASA,eAAe,QAAmB,cAAc;AACzD,SAASC,aAAa,QAAQ,kCAAkC;AAEhE,OAAO,SAASC,6BAA6B,EAC3CC,KAAK,EACLC,OAAOC,MAAM,EACbC,KAAK,EACLC,MAAM,EAMP,GAAG,CAAC,CAAC;IACJ,IAAI,CAACJ,OAAO;QACV,OAAOG,SAASE,WAAWF,KAAK;IAClC;IAEA,IAAI,AAACL,gBAAwBQ,GAAG,EAAE;QAChC,OAAOT,gBAAgB;YACrBM;YACAI,WAAW,CAAC,EAAEC,GAAG,EAAEC,GAAG,EAAEC,IAAI,EAAE;gBAC5B,OAAOA,KAAKF,KAAK;oBACf,GAAGC,GAAG;oBACN,6CAA6C;oBAC7CT;gBACF;YACF;QACF;IACF;IAEA,IAAIW;IACJ,0EAA0E;IAC1E,OAAO,OAAO,GAAGC;QACf,MAAMC,OAAQD,IAAI,CAAC,EAAE,KAAK,CAAC;QAI3B;YACE,MAAME,OAAOD,KAAKC,IAAI;YACtB,IAAI,OAAOA,SAAS,YAAYA,QAASA,CAAAA,gBAAgBC,kBAAkBC,OAAOC,aAAa,IAAIH,IAAG,GAAI;gBACxG,kFAAkF;gBAClFD,KAAKK,MAAM,KAAK;YAClB;QACF;QACA,IAAI,CAACP,OAAO;YACV,IAAIQ,MAAMnB;YACV,IAAIC,QAAQC;YACZ;gBACE,IAAIkB;gBACJ,IAAI;oBACFA,IAAI,IAAIC,IAAIrB;gBACd,EAAE,OAAOsB,GAAG,CAAC;gBACb,IAAI,CAACrB,SAASmB,KAAMA,CAAAA,EAAEG,QAAQ,IAAIH,EAAEI,QAAQ,AAAD,GAAI;oBAC7CvB,QAAQ,CAAC,MAAM,EAAEwB,KAAK,CAAC,EAAEL,EAAEG,QAAQ,IAAI,GAAG,CAAC,EAAEH,EAAEI,QAAQ,CAAC,CAAC,EAAE,CAAC;oBAC5DJ,EAAEG,QAAQ,GAAG;oBACbH,EAAEI,QAAQ,GAAG;oBACbL,MAAMC,EAAEM,QAAQ;gBAClB;YACF;YACA,6CAA6C;YAC7CtB,WAAW,MAAM,CAAC;YAClB,MAAMuB,MAAM,MAAMvB;YAClB,MAAMwB,aAAaD,IAAIC,UAAU;YACjCzB,UAAUwB,IAAIxB,KAAK;YACnB,oEAAoE;YACpEQ,QAAQ,IAAIiB,WAAW;gBACrBT;gBACAlB;YACF;QACA,sEAAsE;QACtE,oEAAoE;QACpE,yEAAyE;QAC3E;QACAY,KAAKgB,UAAU,GAAGlB;QAClB,OAAO,MAAMR,SAAUS;IACzB;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/servers/getPackageDir.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport function getPackageDir(currentDir: string = __dirname) {\n while (!fs.existsSync(path.join(currentDir, 'package.json'))) {\n currentDir = path.resolve(currentDir, '..');\n if (currentDir === '/') {\n return undefined;\n }\n }\n return currentDir;\n}\n"],"names":["fs","path","fileURLToPath","__filename","url","__dirname","dirname","getPackageDir","currentDir","existsSync","join","resolve","undefined"],"mappings":"AAAA,OAAOA,QAAQ,UAAU;AACzB,OAAOC,UAAU,YAAY;AAC7B,SAASC,aAAa,QAAQ,WAAW;AAEzC,MAAMC,aAAaD,cAAc,YAAYE,GAAG;AAChD,MAAMC,YAAYJ,KAAKK,OAAO,CAACH;AAE/B,OAAO,SAASI,cAAcC,aAAqBH,SAAS;IAC1D,MAAO,CAACL,GAAGS,UAAU,CAACR,KAAKS,IAAI,CAACF,YAAY,iBAAkB;QAC5DA,aAAaP,KAAKU,OAAO,CAACH,YAAY;QACtC,IAAIA,eAAe,KAAK;YACtB,OAAOI;QACT;IACF;IACA,OAAOJ;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/servers/jsdom.ts"],"sourcesContent":["export * from './polyfill/polyfillJsDom';\n"],"names":[],"mappings":"AAAA,cAAc,2BAA2B"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/servers/node-fetch.ts"],"sourcesContent":["export * from './polyfill/polyfillFetch';\nexport * from './fetch/createFetchWithProxyByNodeFetch';\n"],"names":[],"mappings":"AAAA,cAAc,2BAA2B;AACzC,cAAc,0CAA0C"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/servers/polyfill/polyfillBrowser.ts"],"sourcesContent":["import { polyfillCrypto } from './polyfillCrypto';\nimport { polyfillFetch } from './polyfillFetch';\nimport { polyfillJsDom } from './polyfillJsDom';\n\n/**\n * Polyfills the browser environment with the necessary APIs for the server.\n * Currently, this includes:\n * - `window`\n * - `document`\n * - `fetch`\n * - `crypto`\n */\nexport async function polyfillBrowser() {\n await polyfillCrypto();\n await polyfillFetch();\n await polyfillJsDom();\n}\n"],"names":["polyfillCrypto","polyfillFetch","polyfillJsDom","polyfillBrowser"],"mappings":"AAAA,SAASA,cAAc,QAAQ,mBAAmB;AAClD,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,aAAa,QAAQ,kBAAkB;AAEhD;;;;;;;CAOC,GACD,OAAO,eAAeC;IACpB,MAAMH;IACN,MAAMC;IACN,MAAMC;AACR"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/servers/polyfill/polyfillCrypto.ts"],"sourcesContent":["import { getGlobalThis } from '../../isomorphics/getGlobalThis';\n\nexport async function polyfillCrypto() {\n const globalThis = getGlobalThis();\n if ('crypto' in globalThis) {\n return false;\n }\n (globalThis as any).crypto = (await import('node:crypto')).webcrypto as Crypto;\n return true;\n}\n"],"names":["getGlobalThis","polyfillCrypto","globalThis","crypto","webcrypto"],"mappings":"AAAA,SAASA,aAAa,QAAQ,kCAAkC;AAEhE,OAAO,eAAeC;IACpB,MAAMC,aAAaF;IACnB,IAAI,YAAYE,YAAY;QAC1B,OAAO;IACT;IACCA,WAAmBC,MAAM,GAAG,AAAC,CAAA,MAAM,MAAM,CAAC,cAAa,EAAGC,SAAS;IACpE,OAAO;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/servers/polyfill/polyfillFetch.ts"],"sourcesContent":["import type { MaybePromise } from '../../asyncs/MaybePromise';\n\nexport function polyfillFetch(nodeFetch: typeof import('node-fetch')): boolean;\nexport function polyfillFetch(nodeFetch?: undefined): Promise<boolean>;\nexport function polyfillFetch(nodeFetch?: typeof import('node-fetch')): MaybePromise<boolean> {\n if ('fetch' in globalThis) {\n return false;\n }\n // sync mode\n if (nodeFetch) {\n const { default: fetch, Response, Headers, Request, AbortError, FetchError, FormData, Blob, File } = nodeFetch;\n Object.assign(globalThis, {\n fetch,\n Response,\n Headers,\n Request,\n AbortError,\n FetchError,\n FormData,\n Blob,\n File,\n });\n // abort controller\n return true;\n }\n return import('node-fetch').then((v) => polyfillFetch(v));\n}\n"],"names":["polyfillFetch","nodeFetch","globalThis","default","fetch","Response","Headers","Request","AbortError","FetchError","FormData","Blob","File","Object","assign","then","v"],"mappings":"AAIA,OAAO,SAASA,cAAcC,SAAuC;IACnE,IAAI,WAAWC,YAAY;QACzB,OAAO;IACT;IACA,YAAY;IACZ,IAAID,WAAW;QACb,MAAM,EAAEE,SAASC,KAAK,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,EAAEC,UAAU,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,IAAI,EAAE,GAAGX;QACrGY,OAAOC,MAAM,CAACZ,YAAY;YACxBE;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;QACF;QACA,mBAAmB;QACnB,OAAO;IACT;IACA,OAAO,MAAM,CAAC,cAAcG,IAAI,CAAC,CAACC,IAAMhB,cAAcgB;AACxD"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/servers/polyfill/polyfillJsDom.ts"],"sourcesContent":["import type { ConstructorOptions, ResourceLoaderConstructorOptions } from 'jsdom';\nimport { getGlobalThis } from '../../isomorphics/getGlobalThis';\n\nexport async function polyfillJsDom() {\n if (typeof window !== 'undefined') {\n return false;\n }\n\n const globalThis = getGlobalThis();\n\n const { ResourceLoader, JSDOM } = await import('jsdom');\n\n // https://github.com/lukechilds/window/blob/master/src/index.js\n // eslint-disable-next-line @typescript-eslint/no-extraneous-class\n class Window {\n constructor(opts: ResourceLoaderConstructorOptions & ConstructorOptions = {}) {\n const { proxy, strictSSL, userAgent, ...jsdomOpts } = opts;\n const resources = new ResourceLoader({\n proxy,\n strictSSL,\n userAgent,\n });\n return new JSDOM(\n '',\n Object.assign(jsdomOpts, {\n resources,\n }),\n ).window;\n }\n }\n\n // https://github.com/lukechilds/browser-env/blob/master/src/index.js\n // Default jsdom config.\n // These settings must override any custom settings to make sure we can iterate\n // over the window object.\n const defaultJsdomConfig = {\n // features: {\n // FetchExternalResources: false,\n // ProcessExternalResources: false,\n // },\n };\n // IIFE executed on import to return an array of global Node.js properties that\n // conflict with global browser properties.\n const protectedProperties = (() =>\n Object.getOwnPropertyNames(new Window(defaultJsdomConfig)).filter(\n (prop) => typeof globalThis[prop as keyof typeof globalThis] !== 'undefined',\n ))();\n\n function installEnv(...args: any[]) {\n // Sets up global browser environment\n // Extract options from args\n const properties = args.filter((arg: any) => Array.isArray(arg))[0];\n const userJsdomConfig = args.filter((arg: any) => !Array.isArray(arg))[0];\n\n // Create window object\n const window = new Window(Object.assign({}, userJsdomConfig, defaultJsdomConfig));\n\n // Get all global browser properties\n Object.getOwnPropertyNames(window)\n\n // Remove protected properties\n .filter((prop) => !protectedProperties.includes(prop))\n\n // If we're only applying specific required properties remove everything else\n .filter((prop) => !(properties && properties.indexOf(prop) === -1))\n .filter((prop) => {\n switch (prop) {\n case 'undefined':\n return false;\n }\n return true;\n })\n\n // Copy what's left to the Node.js global scope\n .forEach((prop) => {\n // console.debug(`define globalThis.${prop}`);\n Object.defineProperty(globalThis, prop, {\n configurable: true,\n get: () => window[prop as keyof Window] as any,\n });\n });\n\n return window;\n }\n\n installEnv({ url: 'http://localhost' });\n return true;\n}\n"],"names":["getGlobalThis","polyfillJsDom","window","globalThis","ResourceLoader","JSDOM","Window","constructor","opts","proxy","strictSSL","userAgent","jsdomOpts","resources","Object","assign","defaultJsdomConfig","protectedProperties","getOwnPropertyNames","filter","prop","installEnv","args","properties","arg","Array","isArray","userJsdomConfig","includes","indexOf","forEach","defineProperty","configurable","get","url"],"mappings":"AACA,SAASA,aAAa,QAAQ,kCAAkC;AAEhE,OAAO,eAAeC;IACpB,IAAI,OAAOC,WAAW,aAAa;QACjC,OAAO;IACT;IAEA,MAAMC,aAAaH;IAEnB,MAAM,EAAEI,cAAc,EAAEC,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC;IAE/C,gEAAgE;IAChE,kEAAkE;IAClE,IAAA,AAAMC,SAAN,MAAMA;QACJC,YAAYC,OAA8D,CAAC,CAAC,CAAE;YAC5E,MAAM,EAAEC,KAAK,EAAEC,SAAS,EAAEC,SAAS,EAAE,GAAGC,WAAW,GAAGJ;YACtD,MAAMK,YAAY,IAAIT,eAAe;gBACnCK;gBACAC;gBACAC;YACF;YACA,OAAO,IAAIN,MACT,IACAS,OAAOC,MAAM,CAACH,WAAW;gBACvBC;YACF,IACAX,MAAM;QACV;IACF;IAEA,qEAAqE;IACrE,wBAAwB;IACxB,+EAA+E;IAC/E,0BAA0B;IAC1B,MAAMc,qBAAqB;IAK3B;IACA,+EAA+E;IAC/E,2CAA2C;IAC3C,MAAMC,sBAAsB,AAAC,CAAA,IAC3BH,OAAOI,mBAAmB,CAAC,IAAIZ,OAAOU,qBAAqBG,MAAM,CAC/D,CAACC,OAAS,OAAOjB,UAAU,CAACiB,KAAgC,KAAK,YACnE;IAEF,SAASC,WAAW,GAAGC,IAAW;QAChC,qCAAqC;QACrC,4BAA4B;QAC5B,MAAMC,aAAaD,KAAKH,MAAM,CAAC,CAACK,MAAaC,MAAMC,OAAO,CAACF,KAAK,CAAC,EAAE;QACnE,MAAMG,kBAAkBL,KAAKH,MAAM,CAAC,CAACK,MAAa,CAACC,MAAMC,OAAO,CAACF,KAAK,CAAC,EAAE;QAEzE,uBAAuB;QACvB,MAAMtB,UAAS,IAAII,OAAOQ,OAAOC,MAAM,CAAC,CAAC,GAAGY,iBAAiBX;QAE7D,oCAAoC;QACpCF,OAAOI,mBAAmB,CAAChB,QAEzB,8BAA8B;SAC7BiB,MAAM,CAAC,CAACC,OAAS,CAACH,oBAAoBW,QAAQ,CAACR,MAEhD,6EAA6E;SAC5ED,MAAM,CAAC,CAACC,OAAS,CAAEG,CAAAA,cAAcA,WAAWM,OAAO,CAACT,UAAU,CAAC,CAAA,GAC/DD,MAAM,CAAC,CAACC;YACP,OAAQA;gBACN,KAAK;oBACH,OAAO;YACX;YACA,OAAO;QACT,EAEA,+CAA+C;SAC9CU,OAAO,CAAC,CAACV;YACR,8CAA8C;YAC9CN,OAAOiB,cAAc,CAAC5B,YAAYiB,MAAM;gBACtCY,cAAc;gBACdC,KAAK,IAAM/B,OAAM,CAACkB,KAAqB;YACzC;QACF;QAEF,OAAOlB;IACT;IAEAmB,WAAW;QAAEa,KAAK;IAAmB;IACrC,OAAO;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/servers/polyfill/polyfillWebSocket.ts"],"sourcesContent":["import type { MaybePromise } from '../../asyncs/MaybePromise';\nimport { getGlobalThis } from '../../isomorphics/getGlobalThis';\n\nexport function polyfillWebSocket(ws: any): boolean;\nexport function polyfillWebSocket(ws?: undefined): Promise<boolean>;\nexport function polyfillWebSocket(ws?: any): MaybePromise<boolean> {\n const globalThis = getGlobalThis();\n if ('WebSocket' in globalThis) {\n return false;\n }\n if (ws) {\n const { WebSocket } = ws;\n Object.assign(globalThis, { WebSocket });\n }\n return import('ws').then((ws) => polyfillWebSocket(ws));\n}\n"],"names":["getGlobalThis","polyfillWebSocket","ws","globalThis","WebSocket","Object","assign","then"],"mappings":"AACA,SAASA,aAAa,QAAQ,kCAAkC;AAIhE,OAAO,SAASC,kBAAkBC,EAAQ;IACxC,MAAMC,aAAaH;IACnB,IAAI,eAAeG,YAAY;QAC7B,OAAO;IACT;IACA,IAAID,IAAI;QACN,MAAM,EAAEE,SAAS,EAAE,GAAGF;QACtBG,OAAOC,MAAM,CAACH,YAAY;YAAEC;QAAU;IACxC;IACA,OAAO,MAAM,CAAC,MAAMG,IAAI,CAAC,CAACL,KAAOD,kBAAkBC;AACrD"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/servers/ws.ts"],"sourcesContent":["export * from './polyfill/polyfillWebSocket';\n"],"names":[],"mappings":"AAAA,cAAc,+BAA+B"}
@@ -1,2 +0,0 @@
1
-
2
- //# sourceMappingURL=global.d.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/types/global.d.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/types/index.d.ts"],"sourcesContent":["export type AbstractConstructor<T = unknown> = abstract new (...args: any[]) => T;\nexport type Constructor<T = unknown> = new (...args: any[]) => T;\nexport type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport type PartialRequired<T, K extends keyof T> = Partial<Omit<T, K>> & Required<Pick<T, K>>;\n\n/*\nhttps://github.com/total-typescript/ts-reset/blob/main/src/entrypoints/filter-boolean.d.ts\nhttps://github.com/sindresorhus/type-fest\n */\n"],"names":[],"mappings":"AAAA,WAG+F,CAE/F;;;CAGC"}
@@ -1 +0,0 @@
1
- export * from '../../../src/schema/typebox/gen';
@@ -1 +0,0 @@
1
- export * from '../../src/schema/typebox';
package/server/jsdom.ts DELETED
@@ -1 +0,0 @@
1
- export * from '../src/servers/jsdom';
@@ -1 +0,0 @@
1
- export * from '../src/servers/node-fetch';
package/server/ws.ts DELETED
@@ -1 +0,0 @@
1
- export * from '../src/servers/ws';
package/server.ts DELETED
@@ -1 +0,0 @@
1
- export * from './src/server';
package/src/server.ts DELETED
@@ -1,6 +0,0 @@
1
- export { polyfillCrypto } from './servers/polyfill/polyfillCrypto';
2
- export { createFetchWithProxyByUndici } from './servers/fetch/createFetchWithProxyByUndici';
3
- export { createFetchWithProxy } from './servers/fetch/createFetchWithProxy';
4
-
5
- export { md5 } from './servers/crypto/md5';
6
- export { getPackageDir } from './servers/getPackageDir';