@gtkx/utils 1.0.0-rc.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/README.md +8 -9
  2. package/dist/array/index-before-or-end.d.ts +0 -12
  3. package/dist/array/index-before-or-end.d.ts.map +1 -1
  4. package/dist/array/index-before-or-end.js +0 -12
  5. package/dist/array/index-before-or-end.js.map +1 -1
  6. package/dist/array/index.d.ts +5 -5
  7. package/dist/array/index.js.map +1 -1
  8. package/dist/array/remove.d.ts +0 -11
  9. package/dist/array/remove.d.ts.map +1 -1
  10. package/dist/array/remove.js +0 -11
  11. package/dist/array/remove.js.map +1 -1
  12. package/dist/array/sort-strings-by.d.ts +0 -12
  13. package/dist/array/sort-strings-by.d.ts.map +1 -1
  14. package/dist/array/sort-strings-by.js +0 -12
  15. package/dist/array/sort-strings-by.js.map +1 -1
  16. package/dist/array/sort-strings.d.ts +0 -9
  17. package/dist/array/sort-strings.d.ts.map +1 -1
  18. package/dist/array/sort-strings.js +0 -9
  19. package/dist/array/sort-strings.js.map +1 -1
  20. package/dist/array/uniq-by.d.ts +0 -15
  21. package/dist/array/uniq-by.d.ts.map +1 -1
  22. package/dist/array/uniq-by.js +0 -15
  23. package/dist/array/uniq-by.js.map +1 -1
  24. package/dist/class/any-class.d.ts +2 -3
  25. package/dist/class/any-class.d.ts.map +1 -1
  26. package/dist/class/any-class.js.map +1 -1
  27. package/dist/class/get-parent-class.d.ts +1 -7
  28. package/dist/class/get-parent-class.d.ts.map +1 -1
  29. package/dist/class/get-parent-class.js +0 -6
  30. package/dist/class/get-parent-class.js.map +1 -1
  31. package/dist/class/index.d.ts +3 -3
  32. package/dist/class/index.js.map +1 -1
  33. package/dist/class/walk-class-chain.d.ts +1 -10
  34. package/dist/class/walk-class-chain.d.ts.map +1 -1
  35. package/dist/class/walk-class-chain.js +0 -9
  36. package/dist/class/walk-class-chain.js.map +1 -1
  37. package/dist/error/error-like.js.map +1 -1
  38. package/dist/error/error-message.d.ts +0 -10
  39. package/dist/error/error-message.d.ts.map +1 -1
  40. package/dist/error/error-message.js +0 -10
  41. package/dist/error/error-message.js.map +1 -1
  42. package/dist/error/format-child-process-error.d.ts +0 -9
  43. package/dist/error/format-child-process-error.d.ts.map +1 -1
  44. package/dist/error/format-child-process-error.js +0 -9
  45. package/dist/error/format-child-process-error.js.map +1 -1
  46. package/dist/error/index.d.ts +3 -3
  47. package/dist/error/index.js.map +1 -1
  48. package/dist/error/normalize-error.d.ts +0 -10
  49. package/dist/error/normalize-error.d.ts.map +1 -1
  50. package/dist/error/normalize-error.js +0 -10
  51. package/dist/error/normalize-error.js.map +1 -1
  52. package/dist/index.d.ts +12 -13
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +0 -1
  55. package/dist/index.js.map +1 -1
  56. package/dist/log/create-logger.d.ts +1 -12
  57. package/dist/log/create-logger.d.ts.map +1 -1
  58. package/dist/log/create-logger.js +0 -11
  59. package/dist/log/create-logger.js.map +1 -1
  60. package/dist/log/default-logger.d.ts +4 -30
  61. package/dist/log/default-logger.d.ts.map +1 -1
  62. package/dist/log/default-logger.js +3 -29
  63. package/dist/log/default-logger.js.map +1 -1
  64. package/dist/log/index.d.ts +5 -3
  65. package/dist/log/index.d.ts.map +1 -1
  66. package/dist/log/index.js +3 -1
  67. package/dist/log/index.js.map +1 -1
  68. package/dist/log/logger.d.ts +2 -43
  69. package/dist/log/logger.d.ts.map +1 -1
  70. package/dist/log/logger.js +3 -34
  71. package/dist/log/logger.js.map +1 -1
  72. package/dist/map/get-or-insert.d.ts +1 -16
  73. package/dist/map/get-or-insert.d.ts.map +1 -1
  74. package/dist/map/get-or-insert.js +0 -15
  75. package/dist/map/get-or-insert.js.map +1 -1
  76. package/dist/map/index.d.ts +1 -1
  77. package/dist/map/index.js.map +1 -1
  78. package/dist/object/index.d.ts +3 -3
  79. package/dist/object/index.js.map +1 -1
  80. package/dist/object/omit.d.ts +0 -12
  81. package/dist/object/omit.d.ts.map +1 -1
  82. package/dist/object/omit.js +0 -12
  83. package/dist/object/omit.js.map +1 -1
  84. package/dist/object/pick-by.d.ts +0 -12
  85. package/dist/object/pick-by.d.ts.map +1 -1
  86. package/dist/object/pick-by.js +0 -12
  87. package/dist/object/pick-by.js.map +1 -1
  88. package/dist/object/structured-clone.d.ts +0 -16
  89. package/dist/object/structured-clone.d.ts.map +1 -1
  90. package/dist/object/structured-clone.js +0 -16
  91. package/dist/object/structured-clone.js.map +1 -1
  92. package/dist/predicate/index.d.ts +6 -6
  93. package/dist/predicate/index.js.map +1 -1
  94. package/dist/predicate/is-deep-equal.d.ts.map +1 -1
  95. package/dist/predicate/is-deep-equal.js +0 -13
  96. package/dist/predicate/is-deep-equal.js.map +1 -1
  97. package/dist/predicate/is-plain-object.d.ts +0 -14
  98. package/dist/predicate/is-plain-object.d.ts.map +1 -1
  99. package/dist/predicate/is-plain-object.js +0 -14
  100. package/dist/predicate/is-plain-object.js.map +1 -1
  101. package/dist/predicate/is-record.d.ts +0 -11
  102. package/dist/predicate/is-record.d.ts.map +1 -1
  103. package/dist/predicate/is-record.js +0 -11
  104. package/dist/predicate/is-record.js.map +1 -1
  105. package/dist/predicate/is-same-array-by.d.ts +0 -12
  106. package/dist/predicate/is-same-array-by.d.ts.map +1 -1
  107. package/dist/predicate/is-same-array-by.js +0 -12
  108. package/dist/predicate/is-same-array-by.js.map +1 -1
  109. package/dist/predicate/is-same-array.d.ts +0 -12
  110. package/dist/predicate/is-same-array.d.ts.map +1 -1
  111. package/dist/predicate/is-same-array.js +0 -12
  112. package/dist/predicate/is-same-array.js.map +1 -1
  113. package/dist/predicate/is-shallow-equal.d.ts.map +1 -1
  114. package/dist/predicate/is-shallow-equal.js +0 -14
  115. package/dist/predicate/is-shallow-equal.js.map +1 -1
  116. package/dist/process/exit-code-for-signal.d.ts +0 -11
  117. package/dist/process/exit-code-for-signal.d.ts.map +1 -1
  118. package/dist/process/exit-code-for-signal.js +0 -11
  119. package/dist/process/exit-code-for-signal.js.map +1 -1
  120. package/dist/process/index.d.ts +4 -3
  121. package/dist/process/index.d.ts.map +1 -1
  122. package/dist/process/index.js +2 -1
  123. package/dist/process/index.js.map +1 -1
  124. package/dist/process/install-graceful-shutdown.d.ts +1 -7
  125. package/dist/process/install-graceful-shutdown.d.ts.map +1 -1
  126. package/dist/process/install-graceful-shutdown.js +7 -13
  127. package/dist/process/install-graceful-shutdown.js.map +1 -1
  128. package/dist/process/kill-marked-processes.d.ts +4 -0
  129. package/dist/process/kill-marked-processes.d.ts.map +1 -0
  130. package/dist/process/kill-marked-processes.js +38 -0
  131. package/dist/process/kill-marked-processes.js.map +1 -0
  132. package/dist/process/process-guard.d.ts +2 -0
  133. package/dist/process/process-guard.d.ts.map +1 -0
  134. package/dist/process/process-guard.js +16 -0
  135. package/dist/process/process-guard.js.map +1 -0
  136. package/dist/process/resolve-executable.d.ts +2 -12
  137. package/dist/process/resolve-executable.d.ts.map +1 -1
  138. package/dist/process/resolve-executable.js +6 -14
  139. package/dist/process/resolve-executable.js.map +1 -1
  140. package/dist/process/spawn-with-parent-death-signal.d.ts +8 -0
  141. package/dist/process/spawn-with-parent-death-signal.d.ts.map +1 -0
  142. package/dist/process/spawn-with-parent-death-signal.js +50 -0
  143. package/dist/process/spawn-with-parent-death-signal.js.map +1 -0
  144. package/dist/set/drain.d.ts +0 -8
  145. package/dist/set/drain.d.ts.map +1 -1
  146. package/dist/set/drain.js +0 -8
  147. package/dist/set/drain.js.map +1 -1
  148. package/dist/set/index.d.ts +1 -1
  149. package/dist/set/index.js.map +1 -1
  150. package/dist/source/index.d.ts +3 -3
  151. package/dist/source/index.js.map +1 -1
  152. package/dist/source/sanitize-identifier.d.ts +0 -11
  153. package/dist/source/sanitize-identifier.d.ts.map +1 -1
  154. package/dist/source/sanitize-identifier.js +0 -11
  155. package/dist/source/sanitize-identifier.js.map +1 -1
  156. package/dist/source/source-string-literal.d.ts +0 -10
  157. package/dist/source/source-string-literal.d.ts.map +1 -1
  158. package/dist/source/source-string-literal.js +0 -10
  159. package/dist/source/source-string-literal.js.map +1 -1
  160. package/dist/source/to-camel-identifier.d.ts +0 -10
  161. package/dist/source/to-camel-identifier.d.ts.map +1 -1
  162. package/dist/source/to-camel-identifier.js +0 -10
  163. package/dist/source/to-camel-identifier.js.map +1 -1
  164. package/dist/string/camel-case.d.ts +0 -14
  165. package/dist/string/camel-case.d.ts.map +1 -1
  166. package/dist/string/camel-case.js +0 -14
  167. package/dist/string/camel-case.js.map +1 -1
  168. package/dist/string/index.d.ts +5 -5
  169. package/dist/string/index.js.map +1 -1
  170. package/dist/string/kebab-case.d.ts +0 -11
  171. package/dist/string/kebab-case.d.ts.map +1 -1
  172. package/dist/string/kebab-case.js +0 -11
  173. package/dist/string/kebab-case.js.map +1 -1
  174. package/dist/string/lower-first.d.ts +0 -10
  175. package/dist/string/lower-first.d.ts.map +1 -1
  176. package/dist/string/lower-first.js +0 -10
  177. package/dist/string/lower-first.js.map +1 -1
  178. package/dist/string/pascal-case.d.ts +0 -13
  179. package/dist/string/pascal-case.d.ts.map +1 -1
  180. package/dist/string/pascal-case.js +0 -13
  181. package/dist/string/pascal-case.js.map +1 -1
  182. package/dist/string/upper-first.d.ts +0 -10
  183. package/dist/string/upper-first.d.ts.map +1 -1
  184. package/dist/string/upper-first.js +0 -10
  185. package/dist/string/upper-first.js.map +1 -1
  186. package/dist/util/index.d.ts +1 -1
  187. package/dist/util/index.js.map +1 -1
  188. package/dist/util/package-version.d.ts +1 -10
  189. package/dist/util/package-version.d.ts.map +1 -1
  190. package/dist/util/package-version.js +2 -11
  191. package/dist/util/package-version.js.map +1 -1
  192. package/package.json +1 -1
  193. package/src/array/index-before-or-end.ts +0 -12
  194. package/src/array/index.ts +5 -5
  195. package/src/array/remove.ts +0 -11
  196. package/src/array/sort-strings-by.ts +0 -12
  197. package/src/array/sort-strings.ts +0 -9
  198. package/src/array/uniq-by.ts +0 -15
  199. package/src/class/any-class.ts +2 -3
  200. package/src/class/get-parent-class.ts +1 -7
  201. package/src/class/index.ts +3 -3
  202. package/src/class/walk-class-chain.ts +2 -11
  203. package/src/error/error-like.ts +1 -1
  204. package/src/error/error-message.ts +1 -11
  205. package/src/error/format-child-process-error.ts +2 -11
  206. package/src/error/index.ts +3 -3
  207. package/src/error/normalize-error.ts +2 -12
  208. package/src/index.ts +12 -13
  209. package/src/log/create-logger.ts +1 -12
  210. package/src/log/default-logger.ts +4 -30
  211. package/src/log/index.ts +5 -3
  212. package/src/log/logger.ts +4 -45
  213. package/src/map/get-or-insert.ts +1 -16
  214. package/src/map/index.ts +1 -1
  215. package/src/object/index.ts +3 -3
  216. package/src/object/omit.ts +0 -12
  217. package/src/object/pick-by.ts +0 -12
  218. package/src/object/structured-clone.ts +1 -17
  219. package/src/predicate/index.ts +6 -6
  220. package/src/predicate/is-deep-equal.ts +2 -15
  221. package/src/predicate/is-plain-object.ts +0 -14
  222. package/src/predicate/is-record.ts +0 -11
  223. package/src/predicate/is-same-array-by.ts +0 -12
  224. package/src/predicate/is-same-array.ts +1 -13
  225. package/src/predicate/is-shallow-equal.ts +2 -16
  226. package/src/process/exit-code-for-signal.ts +0 -11
  227. package/src/process/index.ts +4 -3
  228. package/src/process/install-graceful-shutdown.ts +12 -18
  229. package/src/process/kill-marked-processes.ts +44 -0
  230. package/src/process/process-guard.ts +20 -0
  231. package/src/process/resolve-executable.ts +7 -14
  232. package/src/process/spawn-with-parent-death-signal.ts +74 -0
  233. package/src/set/drain.ts +0 -8
  234. package/src/set/index.ts +1 -1
  235. package/src/source/index.ts +3 -3
  236. package/src/source/sanitize-identifier.ts +0 -11
  237. package/src/source/source-string-literal.ts +0 -10
  238. package/src/source/to-camel-identifier.ts +2 -12
  239. package/src/string/camel-case.ts +2 -16
  240. package/src/string/index.ts +5 -5
  241. package/src/string/kebab-case.ts +0 -11
  242. package/src/string/lower-first.ts +0 -10
  243. package/src/string/pascal-case.ts +2 -15
  244. package/src/string/upper-first.ts +0 -10
  245. package/src/util/index.ts +1 -1
  246. package/src/util/package-version.ts +2 -11
  247. package/dist/function/call-method.d.ts +0 -3
  248. package/dist/function/call-method.d.ts.map +0 -1
  249. package/dist/function/call-method.js +0 -19
  250. package/dist/function/call-method.js.map +0 -1
  251. package/dist/function/index.d.ts +0 -2
  252. package/dist/function/index.d.ts.map +0 -1
  253. package/dist/function/index.js +0 -2
  254. package/dist/function/index.js.map +0 -1
  255. package/src/function/call-method.ts +0 -22
  256. package/src/function/index.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"structured-clone.d.ts","sourceRoot":"","sources":["../../src/object/structured-clone.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,iBAAS,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAUvC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"structured-clone.d.ts","sourceRoot":"","sources":["../../src/object/structured-clone.ts"],"names":[],"mappings":"AAEA,iBAAS,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAUvC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -1,20 +1,4 @@
1
1
  import { isPlainObject } from "../predicate/is-plain-object.js";
2
- /**
3
- * Recursively copies arrays and plain objects, sharing every other value by reference. The result
4
- * mirrors exactly the structure `isDeepEqual` traverses, so comparing a value against its earlier
5
- * clone detects in-place mutations of the original. Unlike the global of the same name, class
6
- * instances such as `Date` and `Map` are shared rather than copied, and no value is ever rejected.
7
- *
8
- * @template T - The type of the value.
9
- * @param value - The value to clone.
10
- * @returns A clone whose arrays and plain objects are fresh and whose other values are shared.
11
- *
12
- * @example
13
- * const source = { a: [{ b: 1 }] };
14
- * const copy = structuredClone(source);
15
- * source.a[0].b = 2;
16
- * copy.a[0].b; // 1
17
- */
18
2
  function structuredClone(value) {
19
3
  if (Array.isArray(value)) {
20
4
  return value.map((item) => structuredClone(item));
@@ -1 +1 @@
1
- {"version":3,"file":"structured-clone.js","sourceRoot":"","sources":["../../src/object/structured-clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE;;;;;;;;;;;;;;;GAeG;AACH,SAAS,eAAe,CAAI,KAAQ;IAChC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAM,CAAC;IACpE,CAAC;IAED,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAM,CAAC;IAC/G,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import { isPlainObject } from \"../predicate/is-plain-object.js\";\n\n/**\n * Recursively copies arrays and plain objects, sharing every other value by reference. The result\n * mirrors exactly the structure `isDeepEqual` traverses, so comparing a value against its earlier\n * clone detects in-place mutations of the original. Unlike the global of the same name, class\n * instances such as `Date` and `Map` are shared rather than copied, and no value is ever rejected.\n *\n * @template T - The type of the value.\n * @param value - The value to clone.\n * @returns A clone whose arrays and plain objects are fresh and whose other values are shared.\n *\n * @example\n * const source = { a: [{ b: 1 }] };\n * const copy = structuredClone(source);\n * source.a[0].b = 2;\n * copy.a[0].b; // 1\n */\nfunction structuredClone<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map((item: unknown) => structuredClone(item)) as T;\n }\n\n if (isPlainObject(value)) {\n return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, structuredClone(entry)])) as T;\n }\n\n return value;\n}\n\nexport { structuredClone };\n"]}
1
+ {"version":3,"file":"structured-clone.js","sourceRoot":"","sources":["../../src/object/structured-clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE,SAAS,eAAe,CAAI,KAAQ;IAChC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAM,CAAC;IACpE,CAAC;IAED,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAM,CAAC;IAC/G,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import { isPlainObject } from \"../predicate/is-plain-object.ts\";\n\nfunction structuredClone<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map((item: unknown) => structuredClone(item)) as T;\n }\n\n if (isPlainObject(value)) {\n return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, structuredClone(entry)])) as T;\n }\n\n return value;\n}\n\nexport { structuredClone };\n"]}
@@ -1,7 +1,7 @@
1
- export { isDeepEqual } from "./is-deep-equal.js";
2
- export { isPlainObject } from "./is-plain-object.js";
3
- export { isRecord } from "./is-record.js";
4
- export { isSameArrayBy } from "./is-same-array-by.js";
5
- export { isSameArray } from "./is-same-array.js";
6
- export { isShallowEqual } from "./is-shallow-equal.js";
1
+ export { isDeepEqual } from "./is-deep-equal.ts";
2
+ export { isPlainObject } from "./is-plain-object.ts";
3
+ export { isRecord } from "./is-record.ts";
4
+ export { isSameArrayBy } from "./is-same-array-by.ts";
5
+ export { isSameArray } from "./is-same-array.ts";
6
+ export { isShallowEqual } from "./is-shallow-equal.ts";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/predicate/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["export { isDeepEqual } from \"./is-deep-equal.js\";\nexport { isPlainObject } from \"./is-plain-object.js\";\nexport { isRecord } from \"./is-record.js\";\nexport { isSameArrayBy } from \"./is-same-array-by.js\";\nexport { isSameArray } from \"./is-same-array.js\";\nexport { isShallowEqual } from \"./is-shallow-equal.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/predicate/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["export { isDeepEqual } from \"./is-deep-equal.ts\";\nexport { isPlainObject } from \"./is-plain-object.ts\";\nexport { isRecord } from \"./is-record.ts\";\nexport { isSameArrayBy } from \"./is-same-array-by.ts\";\nexport { isSameArray } from \"./is-same-array.ts\";\nexport { isShallowEqual } from \"./is-shallow-equal.ts\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"is-deep-equal.d.ts","sourceRoot":"","sources":["../../src/predicate/is-deep-equal.ts"],"names":[],"mappings":"AAwBA,iBAAS,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAcpD;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"is-deep-equal.d.ts","sourceRoot":"","sources":["../../src/predicate/is-deep-equal.ts"],"names":[],"mappings":"AAWA,iBAAS,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAcpD;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -1,18 +1,5 @@
1
1
  import { areObjectKeysEqual } from "./are-object-keys-equal.js";
2
2
  import { isPlainObject } from "./is-plain-object.js";
3
- /**
4
- * Checks whether two values are deeply equal: identical, arrays of the same length whose elements
5
- * are deeply equal in order, or plain objects with the same own enumerable keys and deeply equal
6
- * values. Values that are neither both arrays nor both plain objects are equal only when identical.
7
- *
8
- * @param a - The first value.
9
- * @param b - The second value.
10
- * @returns `true` when the values are deeply equal.
11
- *
12
- * @example
13
- * isDeepEqual({ a: [1, { b: 2 }] }, { a: [1, { b: 2 }] }); // true
14
- * isDeepEqual({ a: [1] }, { a: [2] }); // false
15
- */
16
3
  const isDeepArrayEqual = (a, b) => {
17
4
  if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) {
18
5
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"is-deep-equal.js","sourceRoot":"","sources":["../../src/predicate/is-deep-equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;;;;;;;;;GAYG;AACH,MAAM,gBAAgB,GAAG,CAAC,CAAU,EAAE,CAAU,EAAW,EAAE;IACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,SAAS,WAAW,CAAC,CAAU,EAAE,CAAU;IACvC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC","sourcesContent":["import { areObjectKeysEqual } from \"./are-object-keys-equal.js\";\nimport { isPlainObject } from \"./is-plain-object.js\";\n\n/**\n * Checks whether two values are deeply equal: identical, arrays of the same length whose elements\n * are deeply equal in order, or plain objects with the same own enumerable keys and deeply equal\n * values. Values that are neither both arrays nor both plain objects are equal only when identical.\n *\n * @param a - The first value.\n * @param b - The second value.\n * @returns `true` when the values are deeply equal.\n *\n * @example\n * isDeepEqual({ a: [1, { b: 2 }] }, { a: [1, { b: 2 }] }); // true\n * isDeepEqual({ a: [1] }, { a: [2] }); // false\n */\nconst isDeepArrayEqual = (a: unknown, b: unknown): boolean => {\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n\n return a.every((item, index) => isDeepEqual(item, b[index]));\n};\n\nfunction isDeepEqual(a: unknown, b: unknown): boolean {\n if (a === b) {\n return true;\n }\n\n if (Array.isArray(a) || Array.isArray(b)) {\n return isDeepArrayEqual(a, b);\n }\n\n if (isPlainObject(a) && isPlainObject(b)) {\n return areObjectKeysEqual(a, b, isDeepEqual);\n }\n\n return false;\n}\n\nexport { isDeepEqual };\n"]}
1
+ {"version":3,"file":"is-deep-equal.js","sourceRoot":"","sources":["../../src/predicate/is-deep-equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,gBAAgB,GAAG,CAAC,CAAU,EAAE,CAAU,EAAW,EAAE;IACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,SAAS,WAAW,CAAC,CAAU,EAAE,CAAU;IACvC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC","sourcesContent":["import { areObjectKeysEqual } from \"./are-object-keys-equal.ts\";\nimport { isPlainObject } from \"./is-plain-object.ts\";\n\nconst isDeepArrayEqual = (a: unknown, b: unknown): boolean => {\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n\n return a.every((item, index) => isDeepEqual(item, b[index]));\n};\n\nfunction isDeepEqual(a: unknown, b: unknown): boolean {\n if (a === b) {\n return true;\n }\n\n if (Array.isArray(a) || Array.isArray(b)) {\n return isDeepArrayEqual(a, b);\n }\n\n if (isPlainObject(a) && isPlainObject(b)) {\n return areObjectKeysEqual(a, b, isDeepEqual);\n }\n\n return false;\n}\n\nexport { isDeepEqual };\n"]}
@@ -1,17 +1,3 @@
1
- /**
2
- * Checks whether a value is a plain object, i.e. one whose prototype is `Object.prototype` or `null`.
3
- *
4
- * Class instances, arrays, and other exotic objects return `false`.
5
- *
6
- * @param value - The value to test.
7
- * @returns `true` when `value` is a plain object.
8
- *
9
- * @example
10
- * isPlainObject({ a: 1 }); // true
11
- * isPlainObject(Object.create(null)); // true
12
- * isPlainObject([1, 2]); // false
13
- * isPlainObject(new Date()); // false
14
- */
15
1
  declare function isPlainObject(value: unknown): value is Record<string, unknown>;
16
2
  export { isPlainObject };
17
3
  //# sourceMappingURL=is-plain-object.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"is-plain-object.d.ts","sourceRoot":"","sources":["../../src/predicate/is-plain-object.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,iBAAS,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQvE;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"is-plain-object.d.ts","sourceRoot":"","sources":["../../src/predicate/is-plain-object.ts"],"names":[],"mappings":"AAAA,iBAAS,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQvE;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,17 +1,3 @@
1
- /**
2
- * Checks whether a value is a plain object, i.e. one whose prototype is `Object.prototype` or `null`.
3
- *
4
- * Class instances, arrays, and other exotic objects return `false`.
5
- *
6
- * @param value - The value to test.
7
- * @returns `true` when `value` is a plain object.
8
- *
9
- * @example
10
- * isPlainObject({ a: 1 }); // true
11
- * isPlainObject(Object.create(null)); // true
12
- * isPlainObject([1, 2]); // false
13
- * isPlainObject(new Date()); // false
14
- */
15
1
  function isPlainObject(value) {
16
2
  if (typeof value !== "object" || value === null) {
17
3
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"is-plain-object.js","sourceRoot":"","sources":["../../src/predicate/is-plain-object.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,SAAS,aAAa,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAY,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAEpD,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AACxD,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["/**\n * Checks whether a value is a plain object, i.e. one whose prototype is `Object.prototype` or `null`.\n *\n * Class instances, arrays, and other exotic objects return `false`.\n *\n * @param value - The value to test.\n * @returns `true` when `value` is a plain object.\n *\n * @example\n * isPlainObject({ a: 1 }); // true\n * isPlainObject(Object.create(null)); // true\n * isPlainObject([1, 2]); // false\n * isPlainObject(new Date()); // false\n */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const proto: unknown = Object.getPrototypeOf(value);\n\n return proto === Object.prototype || proto === null;\n}\n\nexport { isPlainObject };\n"]}
1
+ {"version":3,"file":"is-plain-object.js","sourceRoot":"","sources":["../../src/predicate/is-plain-object.ts"],"names":[],"mappings":"AAAA,SAAS,aAAa,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAY,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAEpD,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AACxD,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["function isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const proto: unknown = Object.getPrototypeOf(value);\n\n return proto === Object.prototype || proto === null;\n}\n\nexport { isPlainObject };\n"]}
@@ -1,14 +1,3 @@
1
- /**
2
- * Checks whether a value is a non-null object (including arrays and class instances, excluding `null`).
3
- *
4
- * @param value - The value to test.
5
- * @returns `true` when `value` is a non-null object.
6
- *
7
- * @example
8
- * isRecord({ a: 1 }); // true
9
- * isRecord(null); // false
10
- * isRecord("x"); // false
11
- */
12
1
  declare function isRecord(value: unknown): value is Record<string, unknown>;
13
2
  export { isRecord };
14
3
  //# sourceMappingURL=is-record.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"is-record.d.ts","sourceRoot":"","sources":["../../src/predicate/is-record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,iBAAS,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElE;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"is-record.d.ts","sourceRoot":"","sources":["../../src/predicate/is-record.ts"],"names":[],"mappings":"AAAA,iBAAS,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElE;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -1,14 +1,3 @@
1
- /**
2
- * Checks whether a value is a non-null object (including arrays and class instances, excluding `null`).
3
- *
4
- * @param value - The value to test.
5
- * @returns `true` when `value` is a non-null object.
6
- *
7
- * @example
8
- * isRecord({ a: 1 }); // true
9
- * isRecord(null); // false
10
- * isRecord("x"); // false
11
- */
12
1
  function isRecord(value) {
13
2
  return typeof value === "object" && value !== null;
14
3
  }
@@ -1 +1 @@
1
- {"version":3,"file":"is-record.js","sourceRoot":"","sources":["../../src/predicate/is-record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACvD,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC","sourcesContent":["/**\n * Checks whether a value is a non-null object (including arrays and class instances, excluding `null`).\n *\n * @param value - The value to test.\n * @returns `true` when `value` is a non-null object.\n *\n * @example\n * isRecord({ a: 1 }); // true\n * isRecord(null); // false\n * isRecord(\"x\"); // false\n */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport { isRecord };\n"]}
1
+ {"version":3,"file":"is-record.js","sourceRoot":"","sources":["../../src/predicate/is-record.ts"],"names":[],"mappings":"AAAA,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACvD,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC","sourcesContent":["function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport { isRecord };\n"]}
@@ -1,15 +1,3 @@
1
- /**
2
- * Checks whether two arrays have the same length and elements the comparator treats as equal, in order.
3
- *
4
- * @template T - The type of the array elements.
5
- * @param a - The first array.
6
- * @param b - The second array.
7
- * @param isEqual - Compares elements at the same index; return `true` when they are equal.
8
- * @returns `true` when the arrays are element-wise equal under `isEqual`.
9
- *
10
- * @example
11
- * isSameArrayBy([{ id: 1 }], [{ id: 1 }], (x, y) => x.id === y.id); // true
12
- */
13
1
  declare function isSameArrayBy<T>(a: T[], b: T[], isEqual: (x: T, y: T) => boolean): boolean;
14
2
  export { isSameArrayBy };
15
3
  //# sourceMappingURL=is-same-array-by.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"is-same-array-by.d.ts","sourceRoot":"","sources":["../../src/predicate/is-same-array-by.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,iBAAS,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAMnF;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"is-same-array-by.d.ts","sourceRoot":"","sources":["../../src/predicate/is-same-array-by.ts"],"names":[],"mappings":"AAAA,iBAAS,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAMnF;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,15 +1,3 @@
1
- /**
2
- * Checks whether two arrays have the same length and elements the comparator treats as equal, in order.
3
- *
4
- * @template T - The type of the array elements.
5
- * @param a - The first array.
6
- * @param b - The second array.
7
- * @param isEqual - Compares elements at the same index; return `true` when they are equal.
8
- * @returns `true` when the arrays are element-wise equal under `isEqual`.
9
- *
10
- * @example
11
- * isSameArrayBy([{ id: 1 }], [{ id: 1 }], (x, y) => x.id === y.id); // true
12
- */
13
1
  function isSameArrayBy(a, b, isEqual) {
14
2
  if (a.length !== b.length) {
15
3
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"is-same-array-by.js","sourceRoot":"","sources":["../../src/predicate/is-same-array-by.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,SAAS,aAAa,CAAI,CAAM,EAAE,CAAM,EAAE,OAAgC;IACtE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAM,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["/**\n * Checks whether two arrays have the same length and elements the comparator treats as equal, in order.\n *\n * @template T - The type of the array elements.\n * @param a - The first array.\n * @param b - The second array.\n * @param isEqual - Compares elements at the same index; return `true` when they are equal.\n * @returns `true` when the arrays are element-wise equal under `isEqual`.\n *\n * @example\n * isSameArrayBy([{ id: 1 }], [{ id: 1 }], (x, y) => x.id === y.id); // true\n */\nfunction isSameArrayBy<T>(a: T[], b: T[], isEqual: (x: T, y: T) => boolean): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n return a.every((item, index) => isEqual(item, b[index] as T));\n}\n\nexport { isSameArrayBy };\n"]}
1
+ {"version":3,"file":"is-same-array-by.js","sourceRoot":"","sources":["../../src/predicate/is-same-array-by.ts"],"names":[],"mappings":"AAAA,SAAS,aAAa,CAAI,CAAM,EAAE,CAAM,EAAE,OAAgC;IACtE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAM,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["function isSameArrayBy<T>(a: T[], b: T[], isEqual: (x: T, y: T) => boolean): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n return a.every((item, index) => isEqual(item, b[index] as T));\n}\n\nexport { isSameArrayBy };\n"]}
@@ -1,15 +1,3 @@
1
- /**
2
- * Checks whether two arrays have the same length and strictly equal (`===`) elements in order.
3
- *
4
- * @template T - The type of the array elements.
5
- * @param a - The first array.
6
- * @param b - The second array.
7
- * @returns `true` when the arrays are element-wise strictly equal.
8
- *
9
- * @example
10
- * isSameArray([1, 2], [1, 2]); // true
11
- * isSameArray([1, 2], [2, 1]); // false
12
- */
13
1
  declare function isSameArray<T>(a: T[], b: T[]): boolean;
14
2
  export { isSameArray };
15
3
  //# sourceMappingURL=is-same-array.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"is-same-array.d.ts","sourceRoot":"","sources":["../../src/predicate/is-same-array.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,iBAAS,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAE/C;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"is-same-array.d.ts","sourceRoot":"","sources":["../../src/predicate/is-same-array.ts"],"names":[],"mappings":"AAEA,iBAAS,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAE/C;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -1,16 +1,4 @@
1
1
  import { isSameArrayBy } from "./is-same-array-by.js";
2
- /**
3
- * Checks whether two arrays have the same length and strictly equal (`===`) elements in order.
4
- *
5
- * @template T - The type of the array elements.
6
- * @param a - The first array.
7
- * @param b - The second array.
8
- * @returns `true` when the arrays are element-wise strictly equal.
9
- *
10
- * @example
11
- * isSameArray([1, 2], [1, 2]); // true
12
- * isSameArray([1, 2], [2, 1]); // false
13
- */
14
2
  function isSameArray(a, b) {
15
3
  return isSameArrayBy(a, b, (x, y) => x === y);
16
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"is-same-array.js","sourceRoot":"","sources":["../../src/predicate/is-same-array.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;;;;;GAWG;AACH,SAAS,WAAW,CAAI,CAAM,EAAE,CAAM;IAClC,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC","sourcesContent":["import { isSameArrayBy } from \"./is-same-array-by.js\";\n\n/**\n * Checks whether two arrays have the same length and strictly equal (`===`) elements in order.\n *\n * @template T - The type of the array elements.\n * @param a - The first array.\n * @param b - The second array.\n * @returns `true` when the arrays are element-wise strictly equal.\n *\n * @example\n * isSameArray([1, 2], [1, 2]); // true\n * isSameArray([1, 2], [2, 1]); // false\n */\nfunction isSameArray<T>(a: T[], b: T[]): boolean {\n return isSameArrayBy(a, b, (x, y) => x === y);\n}\n\nexport { isSameArray };\n"]}
1
+ {"version":3,"file":"is-same-array.js","sourceRoot":"","sources":["../../src/predicate/is-same-array.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,SAAS,WAAW,CAAI,CAAM,EAAE,CAAM;IAClC,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC","sourcesContent":["import { isSameArrayBy } from \"./is-same-array-by.ts\";\n\nfunction isSameArray<T>(a: T[], b: T[]): boolean {\n return isSameArrayBy(a, b, (x, y) => x === y);\n}\n\nexport { isSameArray };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"is-shallow-equal.d.ts","sourceRoot":"","sources":["../../src/predicate/is-shallow-equal.ts"],"names":[],"mappings":"AAmBA,iBAAS,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAUvD;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"is-shallow-equal.d.ts","sourceRoot":"","sources":["../../src/predicate/is-shallow-equal.ts"],"names":[],"mappings":"AAKA,iBAAS,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAUvD;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -1,19 +1,5 @@
1
1
  import { areObjectKeysEqual } from "./are-object-keys-equal.js";
2
2
  import { isPlainObject } from "./is-plain-object.js";
3
- /**
4
- * Checks whether two values are shallowly equal: identical, or plain objects with the same own
5
- * enumerable keys and strictly equal (`===`) values. Values that are not both plain objects are
6
- * equal only when identical.
7
- *
8
- * @param a - The first value.
9
- * @param b - The second value.
10
- * @returns `true` when the values are shallowly equal.
11
- *
12
- * @example
13
- * isShallowEqual({ a: 1 }, { a: 1 }); // true
14
- * isShallowEqual({ a: 1 }, { a: 2 }); // false
15
- * isShallowEqual(3, 3); // true
16
- */
17
3
  const isStrictEqual = (a, b) => a === b;
18
4
  function isShallowEqual(a, b) {
19
5
  if (a === b) {
@@ -1 +1 @@
1
- {"version":3,"file":"is-shallow-equal.js","sourceRoot":"","sources":["../../src/predicate/is-shallow-equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;;;;;;;;;;GAaG;AACH,MAAM,aAAa,GAAG,CAAC,CAAU,EAAE,CAAU,EAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AAEnE,SAAS,cAAc,CAAC,CAAU,EAAE,CAAU;IAC1C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import { areObjectKeysEqual } from \"./are-object-keys-equal.js\";\nimport { isPlainObject } from \"./is-plain-object.js\";\n\n/**\n * Checks whether two values are shallowly equal: identical, or plain objects with the same own\n * enumerable keys and strictly equal (`===`) values. Values that are not both plain objects are\n * equal only when identical.\n *\n * @param a - The first value.\n * @param b - The second value.\n * @returns `true` when the values are shallowly equal.\n *\n * @example\n * isShallowEqual({ a: 1 }, { a: 1 }); // true\n * isShallowEqual({ a: 1 }, { a: 2 }); // false\n * isShallowEqual(3, 3); // true\n */\nconst isStrictEqual = (a: unknown, b: unknown): boolean => a === b;\n\nfunction isShallowEqual(a: unknown, b: unknown): boolean {\n if (a === b) {\n return true;\n }\n\n if (isPlainObject(a) && isPlainObject(b)) {\n return areObjectKeysEqual(a, b, isStrictEqual);\n }\n\n return false;\n}\n\nexport { isShallowEqual };\n"]}
1
+ {"version":3,"file":"is-shallow-equal.js","sourceRoot":"","sources":["../../src/predicate/is-shallow-equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,aAAa,GAAG,CAAC,CAAU,EAAE,CAAU,EAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AAEnE,SAAS,cAAc,CAAC,CAAU,EAAE,CAAU;IAC1C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import { areObjectKeysEqual } from \"./are-object-keys-equal.ts\";\nimport { isPlainObject } from \"./is-plain-object.ts\";\n\nconst isStrictEqual = (a: unknown, b: unknown): boolean => a === b;\n\nfunction isShallowEqual(a: unknown, b: unknown): boolean {\n if (a === b) {\n return true;\n }\n\n if (isPlainObject(a) && isPlainObject(b)) {\n return areObjectKeysEqual(a, b, isStrictEqual);\n }\n\n return false;\n}\n\nexport { isShallowEqual };\n"]}
@@ -1,14 +1,3 @@
1
- /**
2
- * Maps a terminating signal to its conventional process exit code (130 for `SIGINT`, 143 otherwise),
3
- * or 0 when no signal is given.
4
- *
5
- * @param signal - The signal that triggered termination, or `null`.
6
- * @returns The conventional exit code for the signal.
7
- *
8
- * @example
9
- * exitCodeForSignal("SIGINT"); // 130
10
- * exitCodeForSignal(null); // 0
11
- */
12
1
  declare function exitCodeForSignal(signal: NodeJS.Signals | null): number;
13
2
  export { exitCodeForSignal };
14
3
  //# sourceMappingURL=exit-code-for-signal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exit-code-for-signal.d.ts","sourceRoot":"","sources":["../../src/process/exit-code-for-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,GAAG,MAAM,CAMhE;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"exit-code-for-signal.d.ts","sourceRoot":"","sources":["../../src/process/exit-code-for-signal.ts"],"names":[],"mappings":"AAAA,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,GAAG,MAAM,CAMhE;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1,14 +1,3 @@
1
- /**
2
- * Maps a terminating signal to its conventional process exit code (130 for `SIGINT`, 143 otherwise),
3
- * or 0 when no signal is given.
4
- *
5
- * @param signal - The signal that triggered termination, or `null`.
6
- * @returns The conventional exit code for the signal.
7
- *
8
- * @example
9
- * exitCodeForSignal("SIGINT"); // 130
10
- * exitCodeForSignal(null); // 0
11
- */
12
1
  function exitCodeForSignal(signal) {
13
2
  if (!signal) {
14
3
  return 0;
@@ -1 +1 @@
1
- {"version":3,"file":"exit-code-for-signal.js","sourceRoot":"","sources":["../../src/process/exit-code-for-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,SAAS,iBAAiB,CAAC,MAA6B;IACpD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,CAAC;IACb,CAAC;IAED,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["/**\n * Maps a terminating signal to its conventional process exit code (130 for `SIGINT`, 143 otherwise),\n * or 0 when no signal is given.\n *\n * @param signal - The signal that triggered termination, or `null`.\n * @returns The conventional exit code for the signal.\n *\n * @example\n * exitCodeForSignal(\"SIGINT\"); // 130\n * exitCodeForSignal(null); // 0\n */\nfunction exitCodeForSignal(signal: NodeJS.Signals | null): number {\n if (!signal) {\n return 0;\n }\n\n return signal === \"SIGINT\" ? 130 : 143;\n}\n\nexport { exitCodeForSignal };\n"]}
1
+ {"version":3,"file":"exit-code-for-signal.js","sourceRoot":"","sources":["../../src/process/exit-code-for-signal.ts"],"names":[],"mappings":"AAAA,SAAS,iBAAiB,CAAC,MAA6B;IACpD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,CAAC;IACb,CAAC;IAED,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["function exitCodeForSignal(signal: NodeJS.Signals | null): number {\n if (!signal) {\n return 0;\n }\n\n return signal === \"SIGINT\" ? 130 : 143;\n}\n\nexport { exitCodeForSignal };\n"]}
@@ -1,4 +1,5 @@
1
- export { exitCodeForSignal } from "./exit-code-for-signal.js";
2
- export { installGracefulShutdown } from "./install-graceful-shutdown.js";
3
- export { resolveExecutable } from "./resolve-executable.js";
1
+ export { exitCodeForSignal } from "./exit-code-for-signal.ts";
2
+ export { installGracefulShutdown } from "./install-graceful-shutdown.ts";
3
+ export { resolveExecutable, tryResolveExecutable } from "./resolve-executable.ts";
4
+ export { spawnWithParentDeathSignal } from "./spawn-with-parent-death-signal.ts";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/process/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/process/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { exitCodeForSignal } from "./exit-code-for-signal.js";
2
2
  export { installGracefulShutdown } from "./install-graceful-shutdown.js";
3
- export { resolveExecutable } from "./resolve-executable.js";
3
+ export { resolveExecutable, tryResolveExecutable } from "./resolve-executable.js";
4
+ export { spawnWithParentDeathSignal } from "./spawn-with-parent-death-signal.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/process/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC","sourcesContent":["export { exitCodeForSignal } from \"./exit-code-for-signal.js\";\nexport { installGracefulShutdown } from \"./install-graceful-shutdown.js\";\nexport { resolveExecutable } from \"./resolve-executable.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/process/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC","sourcesContent":["export { exitCodeForSignal } from \"./exit-code-for-signal.ts\";\nexport { installGracefulShutdown } from \"./install-graceful-shutdown.ts\";\nexport { resolveExecutable, tryResolveExecutable } from \"./resolve-executable.ts\";\nexport { spawnWithParentDeathSignal } from \"./spawn-with-parent-death-signal.ts\";\n"]}
@@ -5,12 +5,6 @@ type GracefulShutdownOptions = {
5
5
  coalesceWindowMs?: number;
6
6
  exitCode?: (signal: NodeJS.Signals, isGraceful: boolean) => number;
7
7
  };
8
- /**
9
- * Registers handlers for `SIGINT`, `SIGTERM`, and `SIGHUP` that run the given cleanup callback once
10
- * and then exit, forcing exit if a repeated signal arrives or the cleanup exceeds its timeout.
11
- *
12
- * @param options - The shutdown callbacks and timing configuration.
13
- */
14
8
  declare function installGracefulShutdown(options: GracefulShutdownOptions): void;
15
- export { installGracefulShutdown, type GracefulShutdownOptions };
9
+ export { installGracefulShutdown };
16
10
  //# sourceMappingURL=install-graceful-shutdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-graceful-shutdown.d.ts","sourceRoot":"","sources":["../../src/process/install-graceful-shutdown.ts"],"names":[],"mappings":"AAGA,KAAK,uBAAuB,GAAG;IAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,KAAK,MAAM,CAAC;CACtE,CAAC;AA2FF;;;;;GAKG;AACH,iBAAS,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAiBvE;AAED,OAAO,EAAE,uBAAuB,EAAE,KAAK,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"install-graceful-shutdown.d.ts","sourceRoot":"","sources":["../../src/process/install-graceful-shutdown.ts"],"names":[],"mappings":"AAGA,KAAK,uBAAuB,GAAG;IAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,KAAK,MAAM,CAAC;CACtE,CAAC;AA2FF,iBAAS,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAiBvE;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -14,10 +14,10 @@ const clearTimers = (state) => {
14
14
  }
15
15
  };
16
16
  const finish = (state, signal, isGraceful) => {
17
- if (state.exited) {
17
+ if (state.hasExited) {
18
18
  return;
19
19
  }
20
- state.exited = true;
20
+ state.hasExited = true;
21
21
  clearTimers(state);
22
22
  const { exitCode } = state.options;
23
23
  const defaultCode = isGraceful ? 0 : exitCodeForSignal(signal);
@@ -36,9 +36,9 @@ const runShutdown = async (state, signal) => {
36
36
  const beginShutdown = (state, signal) => {
37
37
  state.firstSignal = signal;
38
38
  if (state.coalesceWindowMs > 0) {
39
- state.coalescing = true;
39
+ state.isCoalescing = true;
40
40
  state.coalesceTimer = setTimeout(() => {
41
- state.coalescing = false;
41
+ state.isCoalescing = false;
42
42
  }, state.coalesceWindowMs);
43
43
  state.coalesceTimer.unref();
44
44
  }
@@ -56,26 +56,20 @@ const handle = (state, signal) => {
56
56
  beginShutdown(state, signal);
57
57
  return;
58
58
  }
59
- if (state.coalescing) {
59
+ if (state.isCoalescing) {
60
60
  return;
61
61
  }
62
62
  state.options.onForce?.();
63
63
  finish(state, signal, false);
64
64
  };
65
- /**
66
- * Registers handlers for `SIGINT`, `SIGTERM`, and `SIGHUP` that run the given cleanup callback once
67
- * and then exit, forcing exit if a repeated signal arrives or the cleanup exceeds its timeout.
68
- *
69
- * @param options - The shutdown callbacks and timing configuration.
70
- */
71
65
  function installGracefulShutdown(options) {
72
66
  const state = {
73
67
  options,
74
68
  forceKillMs: options.forceKillAfterMs ?? DEFAULT_FORCE_KILL_TIMEOUT_MS,
75
69
  coalesceWindowMs: options.coalesceWindowMs ?? DEFAULT_COALESCE_WINDOW_MS,
76
70
  firstSignal: null,
77
- exited: false,
78
- coalescing: false,
71
+ hasExited: false,
72
+ isCoalescing: false,
79
73
  forceTimer: null,
80
74
  coalesceTimer: null,
81
75
  };
@@ -1 +1 @@
1
- {"version":3,"file":"install-graceful-shutdown.js","sourceRoot":"","sources":["../../src/process/install-graceful-shutdown.ts"],"names":[],"mappings":"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","sourcesContent":["import { error } from \"../log/default-logger.js\";\nimport { exitCodeForSignal } from \"./exit-code-for-signal.js\";\n\ntype GracefulShutdownOptions = {\n onSignal: (signal: NodeJS.Signals) => void | Promise<void>;\n onForce?: () => void;\n forceKillAfterMs?: number;\n coalesceWindowMs?: number;\n exitCode?: (signal: NodeJS.Signals, isGraceful: boolean) => number;\n};\n\ntype ShutdownState = {\n options: GracefulShutdownOptions;\n forceKillMs: number;\n coalesceWindowMs: number;\n firstSignal: NodeJS.Signals | null;\n exited: boolean;\n coalescing: boolean;\n forceTimer: NodeJS.Timeout | null;\n coalesceTimer: NodeJS.Timeout | null;\n};\n\nconst HANDLED_SIGNALS = [\"SIGINT\", \"SIGTERM\", \"SIGHUP\"] as const satisfies NodeJS.Signals[];\nconst DEFAULT_FORCE_KILL_TIMEOUT_MS = 5000;\nconst DEFAULT_COALESCE_WINDOW_MS = 500;\n\nconst clearTimers = (state: ShutdownState): void => {\n if (state.forceTimer) {\n clearTimeout(state.forceTimer);\n state.forceTimer = null;\n }\n\n if (state.coalesceTimer) {\n clearTimeout(state.coalesceTimer);\n state.coalesceTimer = null;\n }\n};\n\nconst finish = (state: ShutdownState, signal: NodeJS.Signals, isGraceful: boolean): void => {\n if (state.exited) {\n return;\n }\n\n state.exited = true;\n clearTimers(state);\n const { exitCode } = state.options;\n const defaultCode = isGraceful ? 0 : exitCodeForSignal(signal);\n process.exit(exitCode ? exitCode(signal, isGraceful) : defaultCode);\n};\n\nconst runShutdown = async (state: ShutdownState, signal: NodeJS.Signals): Promise<void> => {\n try {\n await state.options.onSignal(signal);\n finish(state, signal, true);\n } catch (error_) {\n error(\"graceful shutdown failed\", error_);\n finish(state, signal, false);\n }\n};\n\nconst beginShutdown = (state: ShutdownState, signal: NodeJS.Signals): void => {\n state.firstSignal = signal;\n\n if (state.coalesceWindowMs > 0) {\n state.coalescing = true;\n\n state.coalesceTimer = setTimeout(() => {\n state.coalescing = false;\n }, state.coalesceWindowMs);\n\n state.coalesceTimer.unref();\n }\n\n if (state.options.onForce && state.forceKillMs > 0) {\n state.forceTimer = setTimeout(() => {\n state.options.onForce?.();\n finish(state, signal, false);\n }, state.forceKillMs);\n\n state.forceTimer.unref();\n }\n\n void runShutdown(state, signal);\n};\n\nconst handle = (state: ShutdownState, signal: NodeJS.Signals): void => {\n if (state.firstSignal === null) {\n beginShutdown(state, signal);\n\n return;\n }\n\n if (state.coalescing) {\n return;\n }\n\n state.options.onForce?.();\n finish(state, signal, false);\n};\n\n/**\n * Registers handlers for `SIGINT`, `SIGTERM`, and `SIGHUP` that run the given cleanup callback once\n * and then exit, forcing exit if a repeated signal arrives or the cleanup exceeds its timeout.\n *\n * @param options - The shutdown callbacks and timing configuration.\n */\nfunction installGracefulShutdown(options: GracefulShutdownOptions): void {\n const state: ShutdownState = {\n options,\n forceKillMs: options.forceKillAfterMs ?? DEFAULT_FORCE_KILL_TIMEOUT_MS,\n coalesceWindowMs: options.coalesceWindowMs ?? DEFAULT_COALESCE_WINDOW_MS,\n firstSignal: null,\n exited: false,\n coalescing: false,\n forceTimer: null,\n coalesceTimer: null,\n };\n\n for (const sig of HANDLED_SIGNALS) {\n process.on(sig, () => {\n handle(state, sig);\n });\n }\n}\n\nexport { installGracefulShutdown, type GracefulShutdownOptions };\n"]}
1
+ {"version":3,"file":"install-graceful-shutdown.js","sourceRoot":"","sources":["../../src/process/install-graceful-shutdown.ts"],"names":[],"mappings":"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","sourcesContent":["import { error } from \"../log/default-logger.ts\";\nimport { exitCodeForSignal } from \"./exit-code-for-signal.ts\";\n\ntype GracefulShutdownOptions = {\n onSignal: (signal: NodeJS.Signals) => void | Promise<void>;\n onForce?: () => void;\n forceKillAfterMs?: number;\n coalesceWindowMs?: number;\n exitCode?: (signal: NodeJS.Signals, isGraceful: boolean) => number;\n};\n\ntype ShutdownState = {\n options: GracefulShutdownOptions;\n forceKillMs: number;\n coalesceWindowMs: number;\n firstSignal: NodeJS.Signals | null;\n hasExited: boolean;\n isCoalescing: boolean;\n forceTimer: NodeJS.Timeout | null;\n coalesceTimer: NodeJS.Timeout | null;\n};\n\nconst HANDLED_SIGNALS = [\"SIGINT\", \"SIGTERM\", \"SIGHUP\"] as const satisfies NodeJS.Signals[];\nconst DEFAULT_FORCE_KILL_TIMEOUT_MS = 5000;\nconst DEFAULT_COALESCE_WINDOW_MS = 500;\n\nconst clearTimers = (state: ShutdownState): void => {\n if (state.forceTimer) {\n clearTimeout(state.forceTimer);\n state.forceTimer = null;\n }\n\n if (state.coalesceTimer) {\n clearTimeout(state.coalesceTimer);\n state.coalesceTimer = null;\n }\n};\n\nconst finish = (state: ShutdownState, signal: NodeJS.Signals, isGraceful: boolean): void => {\n if (state.hasExited) {\n return;\n }\n\n state.hasExited = true;\n clearTimers(state);\n const { exitCode } = state.options;\n const defaultCode = isGraceful ? 0 : exitCodeForSignal(signal);\n process.exit(exitCode ? exitCode(signal, isGraceful) : defaultCode);\n};\n\nconst runShutdown = async (state: ShutdownState, signal: NodeJS.Signals): Promise<void> => {\n try {\n await state.options.onSignal(signal);\n finish(state, signal, true);\n } catch (error_) {\n error(\"graceful shutdown failed\", error_);\n finish(state, signal, false);\n }\n};\n\nconst beginShutdown = (state: ShutdownState, signal: NodeJS.Signals): void => {\n state.firstSignal = signal;\n\n if (state.coalesceWindowMs > 0) {\n state.isCoalescing = true;\n\n state.coalesceTimer = setTimeout(() => {\n state.isCoalescing = false;\n }, state.coalesceWindowMs);\n\n state.coalesceTimer.unref();\n }\n\n if (state.options.onForce && state.forceKillMs > 0) {\n state.forceTimer = setTimeout(() => {\n state.options.onForce?.();\n finish(state, signal, false);\n }, state.forceKillMs);\n\n state.forceTimer.unref();\n }\n\n void runShutdown(state, signal);\n};\n\nconst handle = (state: ShutdownState, signal: NodeJS.Signals): void => {\n if (state.firstSignal === null) {\n beginShutdown(state, signal);\n\n return;\n }\n\n if (state.isCoalescing) {\n return;\n }\n\n state.options.onForce?.();\n finish(state, signal, false);\n};\n\nfunction installGracefulShutdown(options: GracefulShutdownOptions): void {\n const state: ShutdownState = {\n options,\n forceKillMs: options.forceKillAfterMs ?? DEFAULT_FORCE_KILL_TIMEOUT_MS,\n coalesceWindowMs: options.coalesceWindowMs ?? DEFAULT_COALESCE_WINDOW_MS,\n firstSignal: null,\n hasExited: false,\n isCoalescing: false,\n forceTimer: null,\n coalesceTimer: null,\n };\n\n for (const sig of HANDLED_SIGNALS) {\n process.on(sig, () => {\n handle(state, sig);\n });\n }\n}\n\nexport { installGracefulShutdown };\n"]}
@@ -0,0 +1,4 @@
1
+ declare const PROCESS_MARKER = "GTKX_PROCESS_GUARD";
2
+ declare function killMarkedProcesses(prefix: string): void;
3
+ export { PROCESS_MARKER, killMarkedProcesses };
4
+ //# sourceMappingURL=kill-marked-processes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill-marked-processes.d.ts","sourceRoot":"","sources":["../../src/process/kill-marked-processes.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,cAAc,uBAAuB,CAAC;AA2B5C,iBAAS,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAYjD;AAED,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { readdirSync, readFileSync } from "node:fs";
2
+ const PROCESS_MARKER = "GTKX_PROCESS_GUARD";
3
+ const MAX_KILL_PASSES = 8;
4
+ const isMarked = (pid, prefix) => {
5
+ try {
6
+ return readFileSync(`/proc/${String(pid)}/environ`, "utf8")
7
+ .split("\0")
8
+ .some((assignment) => assignment.startsWith(prefix));
9
+ }
10
+ catch {
11
+ return false;
12
+ }
13
+ };
14
+ const markedPids = (prefix) => readdirSync("/proc")
15
+ .map(Number)
16
+ .filter((pid) => Number.isSafeInteger(pid) && pid > 1 && pid !== process.pid)
17
+ .filter((pid) => isMarked(pid, prefix));
18
+ const killPid = (pid) => {
19
+ try {
20
+ process.kill(pid, "SIGKILL");
21
+ }
22
+ catch {
23
+ return;
24
+ }
25
+ };
26
+ function killMarkedProcesses(prefix) {
27
+ for (let pass = 0; pass < MAX_KILL_PASSES; pass += 1) {
28
+ const pids = markedPids(prefix);
29
+ if (pids.length === 0) {
30
+ return;
31
+ }
32
+ for (const pid of pids) {
33
+ killPid(pid);
34
+ }
35
+ }
36
+ }
37
+ export { PROCESS_MARKER, killMarkedProcesses };
38
+ //# sourceMappingURL=kill-marked-processes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill-marked-processes.js","sourceRoot":"","sources":["../../src/process/kill-marked-processes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEpD,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAC5C,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,MAAc,EAAW,EAAE;IACtD,IAAI,CAAC;QACD,OAAO,YAAY,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC;aACtD,KAAK,CAAC,IAAI,CAAC;aACX,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAY,EAAE,CAC5C,WAAW,CAAC,OAAO,CAAC;KACf,GAAG,CAAC,MAAM,CAAC;KACX,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC;KAC5E,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAQ,EAAE;IAClC,IAAI,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO;IACX,CAAC;AACL,CAAC,CAAC;AAEF,SAAS,mBAAmB,CAAC,MAAc;IACvC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,eAAe,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAEhC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACL,CAAC;AACL,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import { readdirSync, readFileSync } from \"node:fs\";\n\nconst PROCESS_MARKER = \"GTKX_PROCESS_GUARD\";\nconst MAX_KILL_PASSES = 8;\n\nconst isMarked = (pid: number, prefix: string): boolean => {\n try {\n return readFileSync(`/proc/${String(pid)}/environ`, \"utf8\")\n .split(\"\\0\")\n .some((assignment) => assignment.startsWith(prefix));\n } catch {\n return false;\n }\n};\n\nconst markedPids = (prefix: string): number[] =>\n readdirSync(\"/proc\")\n .map(Number)\n .filter((pid) => Number.isSafeInteger(pid) && pid > 1 && pid !== process.pid)\n .filter((pid) => isMarked(pid, prefix));\n\nconst killPid = (pid: number): void => {\n try {\n process.kill(pid, \"SIGKILL\");\n } catch {\n return;\n }\n};\n\nfunction killMarkedProcesses(prefix: string): void {\n for (let pass = 0; pass < MAX_KILL_PASSES; pass += 1) {\n const pids = markedPids(prefix);\n\n if (pids.length === 0) {\n return;\n }\n\n for (const pid of pids) {\n killPid(pid);\n }\n }\n}\n\nexport { PROCESS_MARKER, killMarkedProcesses };\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=process-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-guard.d.ts","sourceRoot":"","sources":["../../src/process/process-guard.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { killMarkedProcesses } from "./kill-marked-processes.js";
2
+ const GUARD_PREFIX = process.argv[2] ?? "";
3
+ const WATCHED_SIGNALS = ["SIGTERM", "SIGINT", "SIGHUP"];
4
+ const sweep = () => {
5
+ if (GUARD_PREFIX.length > 0) {
6
+ killMarkedProcesses(GUARD_PREFIX);
7
+ }
8
+ process.exit(0);
9
+ };
10
+ process.stdin.resume();
11
+ process.stdin.on("end", sweep);
12
+ process.stdin.on("error", sweep);
13
+ for (const signal of WATCHED_SIGNALS) {
14
+ process.on(signal, sweep);
15
+ }
16
+ //# sourceMappingURL=process-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-guard.js","sourceRoot":"","sources":["../../src/process/process-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3C,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAqC,CAAC;AAE5F,MAAM,KAAK,GAAG,GAAS,EAAE;IACrB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC;AAEF,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACvB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAEjC,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["import { killMarkedProcesses } from \"./kill-marked-processes.ts\";\n\nconst GUARD_PREFIX = process.argv[2] ?? \"\";\nconst WATCHED_SIGNALS = [\"SIGTERM\", \"SIGINT\", \"SIGHUP\"] as const satisfies NodeJS.Signals[];\n\nconst sweep = (): void => {\n if (GUARD_PREFIX.length > 0) {\n killMarkedProcesses(GUARD_PREFIX);\n }\n\n process.exit(0);\n};\n\nprocess.stdin.resume();\nprocess.stdin.on(\"end\", sweep);\nprocess.stdin.on(\"error\", sweep);\n\nfor (const signal of WATCHED_SIGNALS) {\n process.on(signal, sweep);\n}\n"]}