@wener/utils 1.1.18 → 1.1.20

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 (41) hide show
  1. package/dist/cjs/index.cjs +7 -7
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/server.cjs +1 -1
  4. package/dist/cjs/server.cjs.map +1 -1
  5. package/dist/esm/index.js +4 -4
  6. package/dist/esm/index.js.map +1 -1
  7. package/dist/esm/server.js +1 -1
  8. package/dist/esm/server.js.map +1 -1
  9. package/dist/system/index.js +4 -4
  10. package/dist/system/index.js.map +1 -1
  11. package/dist/system/server.js +1 -1
  12. package/dist/system/server.js.map +1 -1
  13. package/lib/asyncs/createAsyncIterator.js +39 -0
  14. package/lib/asyncs/createAsyncIterator.js.map +1 -0
  15. package/lib/asyncs/firstOfAsyncIterator.js +13 -0
  16. package/lib/asyncs/firstOfAsyncIterator.js.map +1 -0
  17. package/lib/asyncs/isIterator.js +6 -0
  18. package/lib/asyncs/isIterator.js.map +1 -0
  19. package/lib/asyncs/nextOfAsyncIterator.js +19 -0
  20. package/lib/asyncs/nextOfAsyncIterator.js.map +1 -0
  21. package/lib/index.js +5 -0
  22. package/lib/index.js.map +1 -1
  23. package/lib/objects/merge/isMergeableObject.js +18 -0
  24. package/lib/objects/merge/isMergeableObject.js.map +1 -0
  25. package/lib/objects/merge/merge.js +90 -0
  26. package/lib/objects/merge/merge.js.map +1 -0
  27. package/lib/server.js +1 -0
  28. package/lib/server.js.map +1 -1
  29. package/lib/servers/polyfill/polyfillWebSocket.js +16 -0
  30. package/lib/servers/polyfill/polyfillWebSocket.js.map +1 -0
  31. package/package.json +1 -1
  32. package/src/asyncs/createAsyncIterator.ts +40 -0
  33. package/src/asyncs/firstOfAsyncIterator.ts +11 -0
  34. package/src/asyncs/isIterator.ts +3 -0
  35. package/src/asyncs/nextOfAsyncIterator.ts +19 -0
  36. package/src/index.ts +5 -0
  37. package/src/objects/merge/index.ts +1 -0
  38. package/src/objects/merge/isMergeableObject.ts +23 -0
  39. package/src/objects/merge/merge.test.ts +912 -0
  40. package/src/objects/merge/merge.ts +140 -0
  41. package/src/server.ts +1 -0
@@ -0,0 +1,140 @@
1
+ // https://github.com/TehShrike/deepmerge/blob/master/index.js
2
+ import { isMergeableObject as defaultIsMergeableObject } from './isMergeableObject';
3
+
4
+ function emptyTarget(val: any) {
5
+ return Array.isArray(val) ? [] : {};
6
+ }
7
+
8
+ function cloneUnlessOtherwiseSpecified(value: any, options: Options) {
9
+ return options.clone !== false && options.isMergeableObject(value)
10
+ ? merge(emptyTarget(value), value, options)
11
+ : value;
12
+ }
13
+
14
+ function defaultArrayMerge(target: any, source: any, options: Options) {
15
+ return target.concat(source).map(function (element: any) {
16
+ return cloneUnlessOtherwiseSpecified(element, options);
17
+ });
18
+ }
19
+
20
+ type Merger = (x: any, y: any, options: Options) => any;
21
+
22
+ function getMergeFunction(key: any, options: Options): Merger {
23
+ if (!options.customMerge) {
24
+ return merge;
25
+ }
26
+ var customMerge = options.customMerge(key);
27
+ return typeof customMerge === 'function' ? customMerge : merge;
28
+ }
29
+
30
+ function getEnumerableOwnPropertySymbols(target: any): any {
31
+ return Object.getOwnPropertySymbols
32
+ ? Object.getOwnPropertySymbols(target).filter(function (symbol) {
33
+ return Object.propertyIsEnumerable.call(target, symbol);
34
+ })
35
+ : [];
36
+ }
37
+
38
+ function getKeys(target: any) {
39
+ return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target));
40
+ }
41
+
42
+ function propertyIsOnObject(object: any, property: any) {
43
+ try {
44
+ return property in object;
45
+ } catch (_) {
46
+ return false;
47
+ }
48
+ }
49
+
50
+ // Protects from prototype poisoning and unexpected merging up the prototype chain.
51
+ function propertyIsUnsafe(target: any, key: string) {
52
+ return (
53
+ propertyIsOnObject(target, key) && // Properties are safe to merge if they don't exist in the target yet,
54
+ !(
55
+ Object.hasOwnProperty.call(target, key) && // unsafe if they exist up the prototype chain,
56
+ Object.propertyIsEnumerable.call(target, key)
57
+ )
58
+ ); // and also unsafe if they're nonenumerable.
59
+ }
60
+
61
+ function mergeObject(target: any, source: any, options: Options) {
62
+ const destination: Record<string, any> = {};
63
+ if (options.isMergeableObject(target)) {
64
+ getKeys(target).forEach((key) => {
65
+ destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);
66
+ });
67
+ }
68
+ getKeys(source).forEach((key) => {
69
+ if (propertyIsUnsafe(target, key)) {
70
+ return;
71
+ }
72
+
73
+ if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {
74
+ destination[key] = getMergeFunction(key, options)(target[key], source[key], options);
75
+ } else {
76
+ destination[key] = cloneUnlessOtherwiseSpecified(source[key], options);
77
+ }
78
+ });
79
+ return destination;
80
+ }
81
+
82
+ export function merge<T1, T2>(x: Partial<T1>, y: Partial<T2>, options?: MergeOptions): T1 & T2;
83
+ export function merge<T>(x: Partial<T>, y: Partial<T>, options?: MergeOptions): T;
84
+
85
+ export function merge(target: any, source: any, opts?: any): any {
86
+ const options = {
87
+ arrayMerge: defaultArrayMerge,
88
+ isMergeableObject: defaultIsMergeableObject,
89
+ ...opts,
90
+ // cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()
91
+ // implementations can use it. The caller may not replace it.
92
+ cloneUnlessOtherwiseSpecified,
93
+ } as Options & ArrayMergeOptions;
94
+
95
+ let sourceIsArray = Array.isArray(source);
96
+ let targetIsArray = Array.isArray(target);
97
+ let sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;
98
+
99
+ if (!sourceAndTargetTypesMatch) {
100
+ return cloneUnlessOtherwiseSpecified(source, options);
101
+ } else if (sourceIsArray) {
102
+ return options.arrayMerge(target, source, options);
103
+ } else {
104
+ return mergeObject(target, source, options);
105
+ }
106
+ }
107
+
108
+ merge.all = function deepmergeAll(array: any[], options?: MergeOptions) {
109
+ if (!Array.isArray(array)) {
110
+ throw new Error('first argument should be an array');
111
+ }
112
+
113
+ return array.reduce(function (prev, next) {
114
+ return merge(prev, next, options);
115
+ }, {});
116
+ };
117
+
118
+ export interface MergeOptions {
119
+ arrayMerge?(target: any[], source: any[], options?: ArrayMergeOptions): any[];
120
+
121
+ clone?: boolean;
122
+ customMerge?: (key: string, options?: MergeOptions) => ((x: any, y: any) => any) | undefined;
123
+
124
+ isMergeableObject?(value: object): boolean;
125
+ }
126
+
127
+ interface Options {
128
+ arrayMerge(target: any[], source: any[], options?: ArrayMergeOptions): any[];
129
+
130
+ clone: boolean;
131
+ customMerge: (key: string, options?: MergeOptions) => ((x: any, y: any) => any) | undefined;
132
+
133
+ isMergeableObject(value: object): boolean;
134
+ }
135
+
136
+ export interface ArrayMergeOptions {
137
+ isMergeableObject(value: object): boolean;
138
+
139
+ cloneUnlessOtherwiseSpecified(value: object, options?: MergeOptions): object;
140
+ }
package/src/server.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { polyfillCrypto } from './servers/polyfill/polyfillCrypto';
2
2
  export { polyfillJsDom } from './servers/polyfill/polyfillJsDom';
3
3
  export { polyfillBrowser } from './servers/polyfill/polyfillBrowser';
4
+ export { polyfillWebSocket } from './servers/polyfill/polyfillWebSocket';
4
5
  export { createFetchWithProxyByUndici } from './servers/fetch/createFetchWithProxyByUndici';
5
6
  export { createFetchWithProxy } from './servers/fetch/createFetchWithProxy';
6
7
  export { createFetchWithRetry, type FetchWithRetryOptions } from './servers/fetch/createFetchWithRetry';