@netlify/plugin-nextjs 4.40.1 → 4.40.2

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 (161) hide show
  1. package/lib/helpers/edge.js +1 -0
  2. package/lib/templates/vendor.js +20 -0
  3. package/package.json +7 -4
  4. package/src/templates/edge/next-dev.js +3 -3
  5. package/src/templates/edge/shims.js +6 -6
  6. package/src/templates/edge-shared/next-utils.ts +3 -3
  7. package/src/templates/edge-shared/utils.ts +1 -1
  8. package/src/templates/vendor/deno.land/std@0.134.0/fmt/colors.ts +536 -0
  9. package/src/templates/vendor/deno.land/std@0.134.0/testing/_diff.ts +360 -0
  10. package/src/templates/vendor/deno.land/std@0.134.0/testing/asserts.ts +866 -0
  11. package/src/templates/vendor/deno.land/std@0.175.0/_util/asserts.ts +25 -0
  12. package/src/templates/vendor/deno.land/std@0.175.0/_util/os.ts +23 -0
  13. package/src/templates/vendor/deno.land/std@0.175.0/async/abortable.ts +149 -0
  14. package/src/templates/vendor/deno.land/std@0.175.0/async/deadline.ts +30 -0
  15. package/src/templates/vendor/deno.land/std@0.175.0/async/debounce.ts +79 -0
  16. package/src/templates/vendor/deno.land/std@0.175.0/async/deferred.ts +48 -0
  17. package/src/templates/vendor/deno.land/std@0.175.0/async/delay.ts +67 -0
  18. package/src/templates/vendor/deno.land/std@0.175.0/async/mod.ts +18 -0
  19. package/src/templates/vendor/deno.land/std@0.175.0/async/mux_async_iterator.ts +97 -0
  20. package/src/templates/vendor/deno.land/std@0.175.0/async/pool.ts +95 -0
  21. package/src/templates/vendor/deno.land/std@0.175.0/async/retry.ts +81 -0
  22. package/src/templates/vendor/deno.land/std@0.175.0/async/tee.ts +100 -0
  23. package/src/templates/vendor/deno.land/std@0.175.0/bytes/index_of_needle.ts +49 -0
  24. package/src/templates/vendor/deno.land/std@0.175.0/crypto/timing_safe_equal.ts +29 -0
  25. package/src/templates/vendor/deno.land/std@0.175.0/datetime/to_imf.ts +45 -0
  26. package/src/templates/vendor/deno.land/std@0.175.0/encoding/base64.ts +144 -0
  27. package/src/templates/vendor/deno.land/std@0.175.0/encoding/base64url.ts +70 -0
  28. package/src/templates/vendor/deno.land/std@0.175.0/flags/mod.ts +785 -0
  29. package/src/templates/vendor/deno.land/std@0.175.0/fmt/colors.ts +569 -0
  30. package/src/templates/vendor/deno.land/std@0.175.0/fmt/printf.ts +939 -0
  31. package/src/templates/vendor/deno.land/std@0.175.0/http/cookie.ts +403 -0
  32. package/src/templates/vendor/deno.land/std@0.175.0/node/_core.ts +77 -0
  33. package/src/templates/vendor/deno.land/std@0.175.0/node/_events.d.ts +848 -0
  34. package/src/templates/vendor/deno.land/std@0.175.0/node/_events.mjs +1033 -0
  35. package/src/templates/vendor/deno.land/std@0.175.0/node/_global.d.ts +66 -0
  36. package/src/templates/vendor/deno.land/std@0.175.0/node/_next_tick.ts +173 -0
  37. package/src/templates/vendor/deno.land/std@0.175.0/node/_process/exiting.ts +4 -0
  38. package/src/templates/vendor/deno.land/std@0.175.0/node/_process/process.ts +131 -0
  39. package/src/templates/vendor/deno.land/std@0.175.0/node/_process/stdio.mjs +7 -0
  40. package/src/templates/vendor/deno.land/std@0.175.0/node/_process/streams.mjs +146 -0
  41. package/src/templates/vendor/deno.land/std@0.175.0/node/_stream.d.ts +1488 -0
  42. package/src/templates/vendor/deno.land/std@0.175.0/node/_stream.mjs +746 -0
  43. package/src/templates/vendor/deno.land/std@0.175.0/node/_util/_util_callbackify.ts +129 -0
  44. package/src/templates/vendor/deno.land/std@0.175.0/node/_utils.ts +206 -0
  45. package/src/templates/vendor/deno.land/std@0.175.0/node/assert.ts +940 -0
  46. package/src/templates/vendor/deno.land/std@0.175.0/node/assertion_error.ts +579 -0
  47. package/src/templates/vendor/deno.land/std@0.175.0/node/async_hooks.ts +331 -0
  48. package/src/templates/vendor/deno.land/std@0.175.0/node/buffer.ts +13 -0
  49. package/src/templates/vendor/deno.land/std@0.175.0/node/events.ts +14 -0
  50. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/buffer.d.ts +2074 -0
  51. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/buffer.mjs +2607 -0
  52. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/crypto/_keys.ts +16 -0
  53. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/crypto/constants.ts +5 -0
  54. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/error_codes.ts +7 -0
  55. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/errors.ts +2867 -0
  56. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/fixed_queue.ts +123 -0
  57. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/hide_stack_frames.ts +16 -0
  58. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/net.ts +95 -0
  59. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/normalize_encoding.mjs +72 -0
  60. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/options.ts +45 -0
  61. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/primordials.mjs +30 -0
  62. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/process/per_thread.mjs +272 -0
  63. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/readline/callbacks.mjs +137 -0
  64. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/readline/utils.mjs +580 -0
  65. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/streams/destroy.mjs +320 -0
  66. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/streams/end-of-stream.mjs +229 -0
  67. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/streams/utils.mjs +242 -0
  68. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util/comparisons.ts +669 -0
  69. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util/debuglog.ts +118 -0
  70. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util/inspect.mjs +2237 -0
  71. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util/types.ts +113 -0
  72. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util.mjs +143 -0
  73. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/validators.mjs +317 -0
  74. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_libuv_winerror.ts +229 -0
  75. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_listen.ts +16 -0
  76. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_node.ts +18 -0
  77. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_timingSafeEqual.ts +12 -0
  78. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_utils.ts +86 -0
  79. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_winerror.ts +16873 -0
  80. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/ares.ts +66 -0
  81. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/async_wrap.ts +152 -0
  82. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/buffer.ts +130 -0
  83. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/cares_wrap.ts +541 -0
  84. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/config.ts +3 -0
  85. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/connection_wrap.ts +80 -0
  86. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/constants.ts +900 -0
  87. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/contextify.ts +3 -0
  88. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/credentials.ts +3 -0
  89. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/crypto.ts +14 -0
  90. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/errors.ts +3 -0
  91. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/fs.ts +3 -0
  92. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/fs_dir.ts +3 -0
  93. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/fs_event_wrap.ts +3 -0
  94. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/handle_wrap.ts +50 -0
  95. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/heap_utils.ts +3 -0
  96. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/http_parser.ts +3 -0
  97. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/icu.ts +3 -0
  98. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/inspector.ts +3 -0
  99. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/js_stream.ts +3 -0
  100. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/messaging.ts +3 -0
  101. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/mod.ts +108 -0
  102. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/module_wrap.ts +3 -0
  103. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/native_module.ts +3 -0
  104. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/natives.ts +3 -0
  105. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/node_file.ts +84 -0
  106. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/node_options.ts +39 -0
  107. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/options.ts +3 -0
  108. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/os.ts +3 -0
  109. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/performance.ts +3 -0
  110. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/pipe_wrap.ts +392 -0
  111. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/process_methods.ts +3 -0
  112. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/report.ts +3 -0
  113. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/serdes.ts +3 -0
  114. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/signal_wrap.ts +3 -0
  115. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/spawn_sync.ts +3 -0
  116. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/stream_wrap.ts +354 -0
  117. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/string_decoder.ts +15 -0
  118. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/symbols.ts +27 -0
  119. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/task_queue.ts +3 -0
  120. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/tcp_wrap.ts +488 -0
  121. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/timers.ts +3 -0
  122. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/tls_wrap.ts +3 -0
  123. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/trace_events.ts +3 -0
  124. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/tty_wrap.ts +3 -0
  125. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/types.ts +186 -0
  126. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/udp_wrap.ts +496 -0
  127. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/url.ts +3 -0
  128. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/util.ts +126 -0
  129. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/uv.ts +437 -0
  130. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/v8.ts +3 -0
  131. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/worker.ts +3 -0
  132. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/zlib.ts +3 -0
  133. package/src/templates/vendor/deno.land/std@0.175.0/node/process.ts +705 -0
  134. package/src/templates/vendor/deno.land/std@0.175.0/node/stream.ts +37 -0
  135. package/src/templates/vendor/deno.land/std@0.175.0/node/string_decoder.ts +337 -0
  136. package/src/templates/vendor/deno.land/std@0.175.0/node/util/types.ts +4 -0
  137. package/src/templates/vendor/deno.land/std@0.175.0/node/util.ts +289 -0
  138. package/src/templates/vendor/deno.land/std@0.175.0/path/_constants.ts +49 -0
  139. package/src/templates/vendor/deno.land/std@0.175.0/path/_interface.ts +30 -0
  140. package/src/templates/vendor/deno.land/std@0.175.0/path/_util.ts +194 -0
  141. package/src/templates/vendor/deno.land/std@0.175.0/path/common.ts +40 -0
  142. package/src/templates/vendor/deno.land/std@0.175.0/path/glob.ts +418 -0
  143. package/src/templates/vendor/deno.land/std@0.175.0/path/mod.ts +53 -0
  144. package/src/templates/vendor/deno.land/std@0.175.0/path/posix.ts +487 -0
  145. package/src/templates/vendor/deno.land/std@0.175.0/path/separator.ts +7 -0
  146. package/src/templates/vendor/deno.land/std@0.175.0/path/win32.ts +962 -0
  147. package/src/templates/vendor/deno.land/std@0.175.0/streams/write_all.ts +64 -0
  148. package/src/templates/vendor/deno.land/std@0.175.0/testing/_diff.ts +440 -0
  149. package/src/templates/vendor/deno.land/std@0.175.0/testing/_format.ts +23 -0
  150. package/src/templates/vendor/deno.land/std@0.175.0/testing/asserts.ts +906 -0
  151. package/src/templates/vendor/deno.land/std@0.175.0/types.d.ts +89 -0
  152. package/src/templates/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/index.ts +133 -0
  153. package/src/templates/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/vendor/asyncify.js +112 -0
  154. package/src/templates/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/vendor/html_rewriter.d.ts +88 -0
  155. package/src/templates/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/vendor/html_rewriter.js +974 -0
  156. package/src/templates/vendor/deno.land/x/path_to_regexp@v6.2.1/index.ts +621 -0
  157. package/src/templates/vendor/esm.sh/v91/next@12.2.5/deno/dist/compiled/cookie.js +13 -0
  158. package/src/templates/vendor/esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/request.js +12 -0
  159. package/src/templates/vendor/esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/response.js +5 -0
  160. package/src/templates/vendor/import_map.json +13 -0
  161. package/src/templates/vendor/raw.githubusercontent.com/worker-tools/resolvable-promise/master/index.ts +50 -0
@@ -0,0 +1,669 @@
1
+ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
2
+ // Copyright Joyent and Node contributors. All rights reserved. MIT license.
3
+
4
+ // deno-lint-ignore-file
5
+ import {
6
+ isAnyArrayBuffer,
7
+ isArrayBufferView,
8
+ isBigIntObject,
9
+ isBooleanObject,
10
+ isBoxedPrimitive,
11
+ isDate,
12
+ isFloat32Array,
13
+ isFloat64Array,
14
+ isMap,
15
+ isNativeError,
16
+ isNumberObject,
17
+ isRegExp,
18
+ isSet,
19
+ isStringObject,
20
+ isSymbolObject,
21
+ isTypedArray,
22
+ } from "./types.ts";
23
+
24
+ import { Buffer } from "../../buffer.ts";
25
+ import {
26
+ getOwnNonIndexProperties,
27
+ ONLY_ENUMERABLE,
28
+ SKIP_SYMBOLS,
29
+ } from "../../internal_binding/util.ts";
30
+
31
+ enum valueType {
32
+ noIterator,
33
+ isArray,
34
+ isSet,
35
+ isMap,
36
+ }
37
+
38
+ interface Memo {
39
+ val1: Map<unknown, unknown>;
40
+ val2: Map<unknown, unknown>;
41
+ position: number;
42
+ }
43
+ let memo: Memo;
44
+
45
+ export function isDeepStrictEqual(val1: unknown, val2: unknown): boolean {
46
+ return innerDeepEqual(val1, val2, true);
47
+ }
48
+ export function isDeepEqual(val1: unknown, val2: unknown): boolean {
49
+ return innerDeepEqual(val1, val2, false);
50
+ }
51
+
52
+ function innerDeepEqual(
53
+ val1: unknown,
54
+ val2: unknown,
55
+ strict: boolean,
56
+ memos = memo,
57
+ ): boolean {
58
+ // Basic case covered by Strict Equality Comparison
59
+ if (val1 === val2) {
60
+ if (val1 !== 0) return true;
61
+ return strict ? Object.is(val1, val2) : true;
62
+ }
63
+ if (strict) {
64
+ // Cases where the values are not objects
65
+ // If both values are Not a Number NaN
66
+ if (typeof val1 !== "object") {
67
+ return (
68
+ typeof val1 === "number" && Number.isNaN(val1) && Number.isNaN(val2)
69
+ );
70
+ }
71
+ // If either value is null
72
+ if (typeof val2 !== "object" || val1 === null || val2 === null) {
73
+ return false;
74
+ }
75
+ // If the prototype are not the same
76
+ if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {
77
+ return false;
78
+ }
79
+ } else {
80
+ // Non strict case where values are either null or NaN
81
+ if (val1 === null || typeof val1 !== "object") {
82
+ if (val2 === null || typeof val2 !== "object") {
83
+ return val1 == val2 || (Number.isNaN(val1) && Number.isNaN(val2));
84
+ }
85
+ return false;
86
+ }
87
+ if (val2 === null || typeof val2 !== "object") {
88
+ return false;
89
+ }
90
+ }
91
+
92
+ const val1Tag = Object.prototype.toString.call(val1);
93
+ const val2Tag = Object.prototype.toString.call(val2);
94
+
95
+ // prototype must be Strictly Equal
96
+ if (
97
+ val1Tag !== val2Tag
98
+ ) {
99
+ return false;
100
+ }
101
+
102
+ // handling when values are array
103
+ if (Array.isArray(val1)) {
104
+ // quick rejection cases
105
+ if (!Array.isArray(val2) || val1.length !== val2.length) {
106
+ return false;
107
+ }
108
+ const filter = strict ? ONLY_ENUMERABLE : ONLY_ENUMERABLE | SKIP_SYMBOLS;
109
+ const keys1 = getOwnNonIndexProperties(val1, filter);
110
+ const keys2 = getOwnNonIndexProperties(val2, filter);
111
+ if (keys1.length !== keys2.length) {
112
+ return false;
113
+ }
114
+ return keyCheck(val1, val2, strict, memos, valueType.isArray, keys1);
115
+ } else if (val1Tag === "[object Object]") {
116
+ return keyCheck(
117
+ val1 as object,
118
+ val2 as object,
119
+ strict,
120
+ memos,
121
+ valueType.noIterator,
122
+ );
123
+ } else if (val1 instanceof Date) {
124
+ if (!(val2 instanceof Date) || val1.getTime() !== val2.getTime()) {
125
+ return false;
126
+ }
127
+ } else if (val1 instanceof RegExp) {
128
+ if (!(val2 instanceof RegExp) || !areSimilarRegExps(val1, val2)) {
129
+ return false;
130
+ }
131
+ } else if (isNativeError(val1) || val1 instanceof Error) {
132
+ // stack may or may not be same, hence it shouldn't be compared
133
+ if (
134
+ // How to handle the type errors here
135
+ (!isNativeError(val2) && !(val2 instanceof Error)) ||
136
+ (val1 as Error).message !== (val2 as Error).message ||
137
+ (val1 as Error).name !== (val2 as Error).name
138
+ ) {
139
+ return false;
140
+ }
141
+ } else if (isArrayBufferView(val1)) {
142
+ const TypedArrayPrototypeGetSymbolToStringTag = (val: []) =>
143
+ Object.getOwnPropertySymbols(val)
144
+ .map((item) => item.toString())
145
+ .toString();
146
+ if (
147
+ isTypedArray(val1) &&
148
+ isTypedArray(val2) &&
149
+ (TypedArrayPrototypeGetSymbolToStringTag(val1 as []) !==
150
+ TypedArrayPrototypeGetSymbolToStringTag(val2 as []))
151
+ ) {
152
+ return false;
153
+ }
154
+
155
+ if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {
156
+ if (!areSimilarFloatArrays(val1, val2)) {
157
+ return false;
158
+ }
159
+ } else if (!areSimilarTypedArrays(val1, val2)) {
160
+ return false;
161
+ }
162
+ const filter = strict ? ONLY_ENUMERABLE : ONLY_ENUMERABLE | SKIP_SYMBOLS;
163
+ const keysVal1 = getOwnNonIndexProperties(val1 as object, filter);
164
+ const keysVal2 = getOwnNonIndexProperties(val2 as object, filter);
165
+ if (keysVal1.length !== keysVal2.length) {
166
+ return false;
167
+ }
168
+ return keyCheck(
169
+ val1 as object,
170
+ val2 as object,
171
+ strict,
172
+ memos,
173
+ valueType.noIterator,
174
+ keysVal1,
175
+ );
176
+ } else if (isSet(val1)) {
177
+ if (
178
+ !isSet(val2) ||
179
+ (val1 as Set<unknown>).size !== (val2 as Set<unknown>).size
180
+ ) {
181
+ return false;
182
+ }
183
+ return keyCheck(
184
+ val1 as object,
185
+ val2 as object,
186
+ strict,
187
+ memos,
188
+ valueType.isSet,
189
+ );
190
+ } else if (isMap(val1)) {
191
+ if (
192
+ !isMap(val2) ||
193
+ (val1 as Set<unknown>).size !== (val2 as Set<unknown>).size
194
+ ) {
195
+ return false;
196
+ }
197
+ return keyCheck(
198
+ val1 as object,
199
+ val2 as object,
200
+ strict,
201
+ memos,
202
+ valueType.isMap,
203
+ );
204
+ } else if (isAnyArrayBuffer(val1)) {
205
+ if (!isAnyArrayBuffer(val2) || !areEqualArrayBuffers(val1, val2)) {
206
+ return false;
207
+ }
208
+ } else if (isBoxedPrimitive(val1)) {
209
+ if (!isEqualBoxedPrimitive(val1, val2)) {
210
+ return false;
211
+ }
212
+ } else if (
213
+ Array.isArray(val2) ||
214
+ isArrayBufferView(val2) ||
215
+ isSet(val2) ||
216
+ isMap(val2) ||
217
+ isDate(val2) ||
218
+ isRegExp(val2) ||
219
+ isAnyArrayBuffer(val2) ||
220
+ isBoxedPrimitive(val2) ||
221
+ isNativeError(val2) ||
222
+ val2 instanceof Error
223
+ ) {
224
+ return false;
225
+ }
226
+ return keyCheck(
227
+ val1 as object,
228
+ val2 as object,
229
+ strict,
230
+ memos,
231
+ valueType.noIterator,
232
+ );
233
+ }
234
+
235
+ function keyCheck(
236
+ val1: object,
237
+ val2: object,
238
+ strict: boolean,
239
+ memos: Memo,
240
+ iterationType: valueType,
241
+ aKeys: (string | symbol)[] = [],
242
+ ) {
243
+ if (arguments.length === 5) {
244
+ aKeys = Object.keys(val1);
245
+ const bKeys = Object.keys(val2);
246
+
247
+ // The pair must have the same number of owned properties.
248
+ if (aKeys.length !== bKeys.length) {
249
+ return false;
250
+ }
251
+ }
252
+
253
+ // Cheap key test
254
+ let i = 0;
255
+ for (; i < aKeys.length; i++) {
256
+ if (!val2.propertyIsEnumerable(aKeys[i])) {
257
+ return false;
258
+ }
259
+ }
260
+
261
+ if (strict && arguments.length === 5) {
262
+ const symbolKeysA = Object.getOwnPropertySymbols(val1);
263
+ if (symbolKeysA.length !== 0) {
264
+ let count = 0;
265
+ for (i = 0; i < symbolKeysA.length; i++) {
266
+ const key = symbolKeysA[i];
267
+ if (val1.propertyIsEnumerable(key)) {
268
+ if (!val2.propertyIsEnumerable(key)) {
269
+ return false;
270
+ }
271
+ // added toString here
272
+ aKeys.push(key.toString());
273
+ count++;
274
+ } else if (val2.propertyIsEnumerable(key)) {
275
+ return false;
276
+ }
277
+ }
278
+ const symbolKeysB = Object.getOwnPropertySymbols(val2);
279
+ if (
280
+ symbolKeysA.length !== symbolKeysB.length &&
281
+ getEnumerables(val2, symbolKeysB).length !== count
282
+ ) {
283
+ return false;
284
+ }
285
+ } else {
286
+ const symbolKeysB = Object.getOwnPropertySymbols(val2);
287
+ if (
288
+ symbolKeysB.length !== 0 &&
289
+ getEnumerables(val2, symbolKeysB).length !== 0
290
+ ) {
291
+ return false;
292
+ }
293
+ }
294
+ }
295
+ if (
296
+ aKeys.length === 0 &&
297
+ (iterationType === valueType.noIterator ||
298
+ (iterationType === valueType.isArray && (val1 as []).length === 0) ||
299
+ (val1 as Set<unknown>).size === 0)
300
+ ) {
301
+ return true;
302
+ }
303
+
304
+ if (memos === undefined) {
305
+ memos = {
306
+ val1: new Map(),
307
+ val2: new Map(),
308
+ position: 0,
309
+ };
310
+ } else {
311
+ const val2MemoA = memos.val1.get(val1);
312
+ if (val2MemoA !== undefined) {
313
+ const val2MemoB = memos.val2.get(val2);
314
+ if (val2MemoB !== undefined) {
315
+ return val2MemoA === val2MemoB;
316
+ }
317
+ }
318
+ memos.position++;
319
+ }
320
+
321
+ memos.val1.set(val1, memos.position);
322
+ memos.val2.set(val2, memos.position);
323
+
324
+ const areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);
325
+
326
+ memos.val1.delete(val1);
327
+ memos.val2.delete(val2);
328
+
329
+ return areEq;
330
+ }
331
+
332
+ function areSimilarRegExps(a: RegExp, b: RegExp) {
333
+ return a.source === b.source && a.flags === b.flags &&
334
+ a.lastIndex === b.lastIndex;
335
+ }
336
+
337
+ // TODO(standvpmnt): add type for arguments
338
+ function areSimilarFloatArrays(arr1: any, arr2: any): boolean {
339
+ if (arr1.byteLength !== arr2.byteLength) {
340
+ return false;
341
+ }
342
+ for (let i = 0; i < arr1.byteLength; i++) {
343
+ if (arr1[i] !== arr2[i]) {
344
+ return false;
345
+ }
346
+ }
347
+ return true;
348
+ }
349
+
350
+ // TODO(standvpmnt): add type for arguments
351
+ function areSimilarTypedArrays(arr1: any, arr2: any): boolean {
352
+ if (arr1.byteLength !== arr2.byteLength) {
353
+ return false;
354
+ }
355
+ return (
356
+ Buffer.compare(
357
+ new Uint8Array(arr1.buffer, arr1.byteOffset, arr1.byteLength),
358
+ new Uint8Array(arr2.buffer, arr2.byteOffset, arr2.byteLength),
359
+ ) === 0
360
+ );
361
+ }
362
+ // TODO(standvpmnt): add type for arguments
363
+ function areEqualArrayBuffers(buf1: any, buf2: any): boolean {
364
+ return (
365
+ buf1.byteLength === buf2.byteLength &&
366
+ Buffer.compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0
367
+ );
368
+ }
369
+
370
+ // TODO(standvpmnt): this check of getOwnPropertySymbols and getOwnPropertyNames
371
+ // length is sufficient to handle the current test case, however this will fail
372
+ // to catch a scenario wherein the getOwnPropertySymbols and getOwnPropertyNames
373
+ // length is the same(will be very contrived but a possible shortcoming
374
+ function isEqualBoxedPrimitive(a: any, b: any): boolean {
375
+ if (
376
+ Object.getOwnPropertyNames(a).length !==
377
+ Object.getOwnPropertyNames(b).length
378
+ ) {
379
+ return false;
380
+ }
381
+ if (
382
+ Object.getOwnPropertySymbols(a).length !==
383
+ Object.getOwnPropertySymbols(b).length
384
+ ) {
385
+ return false;
386
+ }
387
+ if (isNumberObject(a)) {
388
+ return (
389
+ isNumberObject(b) &&
390
+ Object.is(
391
+ Number.prototype.valueOf.call(a),
392
+ Number.prototype.valueOf.call(b),
393
+ )
394
+ );
395
+ }
396
+ if (isStringObject(a)) {
397
+ return (
398
+ isStringObject(b) &&
399
+ (String.prototype.valueOf.call(a) === String.prototype.valueOf.call(b))
400
+ );
401
+ }
402
+ if (isBooleanObject(a)) {
403
+ return (
404
+ isBooleanObject(b) &&
405
+ (Boolean.prototype.valueOf.call(a) === Boolean.prototype.valueOf.call(b))
406
+ );
407
+ }
408
+ if (isBigIntObject(a)) {
409
+ return (
410
+ isBigIntObject(b) &&
411
+ (BigInt.prototype.valueOf.call(a) === BigInt.prototype.valueOf.call(b))
412
+ );
413
+ }
414
+ if (isSymbolObject(a)) {
415
+ return (
416
+ isSymbolObject(b) &&
417
+ (Symbol.prototype.valueOf.call(a) ===
418
+ Symbol.prototype.valueOf.call(b))
419
+ );
420
+ }
421
+ // assert.fail(`Unknown boxed type ${val1}`);
422
+ // return false;
423
+ throw Error(`Unknown boxed type`);
424
+ }
425
+
426
+ function getEnumerables(val: any, keys: any) {
427
+ return keys.filter((key: string) => val.propertyIsEnumerable(key));
428
+ }
429
+
430
+ function objEquiv(
431
+ obj1: any,
432
+ obj2: any,
433
+ strict: boolean,
434
+ keys: any,
435
+ memos: Memo,
436
+ iterationType: valueType,
437
+ ): boolean {
438
+ let i = 0;
439
+
440
+ if (iterationType === valueType.isSet) {
441
+ if (!setEquiv(obj1, obj2, strict, memos)) {
442
+ return false;
443
+ }
444
+ } else if (iterationType === valueType.isMap) {
445
+ if (!mapEquiv(obj1, obj2, strict, memos)) {
446
+ return false;
447
+ }
448
+ } else if (iterationType === valueType.isArray) {
449
+ for (; i < obj1.length; i++) {
450
+ if (obj1.hasOwnProperty(i)) {
451
+ if (
452
+ !obj2.hasOwnProperty(i) ||
453
+ !innerDeepEqual(obj1[i], obj2[i], strict, memos)
454
+ ) {
455
+ return false;
456
+ }
457
+ } else if (obj2.hasOwnProperty(i)) {
458
+ return false;
459
+ } else {
460
+ const keys1 = Object.keys(obj1);
461
+ for (; i < keys1.length; i++) {
462
+ const key = keys1[i];
463
+ if (
464
+ !obj2.hasOwnProperty(key) ||
465
+ !innerDeepEqual(obj1[key], obj2[key], strict, memos)
466
+ ) {
467
+ return false;
468
+ }
469
+ }
470
+ if (keys1.length !== Object.keys(obj2).length) {
471
+ return false;
472
+ }
473
+ if (keys1.length !== Object.keys(obj2).length) {
474
+ return false;
475
+ }
476
+ return true;
477
+ }
478
+ }
479
+ }
480
+
481
+ // Expensive test
482
+ for (i = 0; i < keys.length; i++) {
483
+ const key = keys[i];
484
+ if (!innerDeepEqual(obj1[key], obj2[key], strict, memos)) {
485
+ return false;
486
+ }
487
+ }
488
+ return true;
489
+ }
490
+
491
+ function findLooseMatchingPrimitives(
492
+ primitive: unknown,
493
+ ): boolean | null | undefined {
494
+ switch (typeof primitive) {
495
+ case "undefined":
496
+ return null;
497
+ case "object":
498
+ return undefined;
499
+ case "symbol":
500
+ return false;
501
+ case "string":
502
+ primitive = +primitive;
503
+ case "number":
504
+ if (Number.isNaN(primitive)) {
505
+ return false;
506
+ }
507
+ }
508
+ return true;
509
+ }
510
+
511
+ function setMightHaveLoosePrim(
512
+ set1: Set<unknown>,
513
+ set2: Set<unknown>,
514
+ primitive: any,
515
+ ) {
516
+ const altValue = findLooseMatchingPrimitives(primitive);
517
+ if (altValue != null) return altValue;
518
+
519
+ return set2.has(altValue) && !set1.has(altValue);
520
+ }
521
+
522
+ function setHasEqualElement(
523
+ set: any,
524
+ val1: any,
525
+ strict: boolean,
526
+ memos: Memo,
527
+ ): boolean {
528
+ for (const val2 of set) {
529
+ if (innerDeepEqual(val1, val2, strict, memos)) {
530
+ set.delete(val2);
531
+ return true;
532
+ }
533
+ }
534
+
535
+ return false;
536
+ }
537
+
538
+ function setEquiv(set1: any, set2: any, strict: boolean, memos: Memo): boolean {
539
+ let set = null;
540
+ for (const item of set1) {
541
+ if (typeof item === "object" && item !== null) {
542
+ if (set === null) {
543
+ // What is SafeSet from primordials?
544
+ // set = new SafeSet();
545
+ set = new Set();
546
+ }
547
+ set.add(item);
548
+ } else if (!set2.has(item)) {
549
+ if (strict) return false;
550
+
551
+ if (!setMightHaveLoosePrim(set1, set2, item)) {
552
+ return false;
553
+ }
554
+
555
+ if (set === null) {
556
+ set = new Set();
557
+ }
558
+ set.add(item);
559
+ }
560
+ }
561
+
562
+ if (set !== null) {
563
+ for (const item of set2) {
564
+ if (typeof item === "object" && item !== null) {
565
+ if (!setHasEqualElement(set, item, strict, memos)) return false;
566
+ } else if (
567
+ !strict &&
568
+ !set1.has(item) &&
569
+ !setHasEqualElement(set, item, strict, memos)
570
+ ) {
571
+ return false;
572
+ }
573
+ }
574
+ return set.size === 0;
575
+ }
576
+
577
+ return true;
578
+ }
579
+
580
+ // TODO(standvpmnt): add types for argument
581
+ function mapMightHaveLoosePrimitive(
582
+ map1: Map<unknown, unknown>,
583
+ map2: Map<unknown, unknown>,
584
+ primitive: any,
585
+ item: any,
586
+ memos: Memo,
587
+ ): boolean {
588
+ const altValue = findLooseMatchingPrimitives(primitive);
589
+ if (altValue != null) {
590
+ return altValue;
591
+ }
592
+ const curB = map2.get(altValue);
593
+ if (
594
+ (curB === undefined && !map2.has(altValue)) ||
595
+ !innerDeepEqual(item, curB, false, memo)
596
+ ) {
597
+ return false;
598
+ }
599
+ return !map1.has(altValue) && innerDeepEqual(item, curB, false, memos);
600
+ }
601
+
602
+ function mapEquiv(map1: any, map2: any, strict: boolean, memos: Memo): boolean {
603
+ let set = null;
604
+
605
+ for (const { 0: key, 1: item1 } of map1) {
606
+ if (typeof key === "object" && key !== null) {
607
+ if (set === null) {
608
+ set = new Set();
609
+ }
610
+ set.add(key);
611
+ } else {
612
+ const item2 = map2.get(key);
613
+ if (
614
+ (
615
+ (item2 === undefined && !map2.has(key)) ||
616
+ !innerDeepEqual(item1, item2, strict, memos)
617
+ )
618
+ ) {
619
+ if (strict) return false;
620
+ if (!mapMightHaveLoosePrimitive(map1, map2, key, item1, memos)) {
621
+ return false;
622
+ }
623
+ if (set === null) {
624
+ set = new Set();
625
+ }
626
+ set.add(key);
627
+ }
628
+ }
629
+ }
630
+
631
+ if (set !== null) {
632
+ for (const { 0: key, 1: item } of map2) {
633
+ if (typeof key === "object" && key !== null) {
634
+ if (!mapHasEqualEntry(set, map1, key, item, strict, memos)) {
635
+ return false;
636
+ }
637
+ } else if (
638
+ !strict && (!map1.has(key) ||
639
+ !innerDeepEqual(map1.get(key), item, false, memos)) &&
640
+ !mapHasEqualEntry(set, map1, key, item, false, memos)
641
+ ) {
642
+ return false;
643
+ }
644
+ }
645
+ return set.size === 0;
646
+ }
647
+
648
+ return true;
649
+ }
650
+
651
+ function mapHasEqualEntry(
652
+ set: any,
653
+ map: any,
654
+ key1: any,
655
+ item1: any,
656
+ strict: boolean,
657
+ memos: Memo,
658
+ ): boolean {
659
+ for (const key2 of set) {
660
+ if (
661
+ innerDeepEqual(key1, key2, strict, memos) &&
662
+ innerDeepEqual(item1, map.get(key2), strict, memos)
663
+ ) {
664
+ set.delete(key2);
665
+ return true;
666
+ }
667
+ }
668
+ return false;
669
+ }