@lukaskj/ts-utils 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Lukas Kososki Jacomin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,151 @@
1
+ # @lukaskj/ts-utils
2
+
3
+ A collection of TypeScript utilities for common programming patterns and operations.
4
+
5
+ [![NPM Version](https://img.shields.io/npm/v/@lukaskj/ts-utils)](https://www.npmjs.com/package/@lukaskj/ts-utils)
6
+ [![License](https://img.shields.io/npm/l/@lukaskj/ts-utils)](https://github.com/lukaskj/ts-utils/blob/main/LICENSE)
7
+ [![Node Version](https://img.shields.io/node/v/@lukaskj/ts-utils)](https://nodejs.org)
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ # Using npm
13
+ npm install @lukaskj/ts-utils
14
+
15
+ # Using yarn
16
+ yarn add @lukaskj/ts-utils
17
+
18
+ # Using bun
19
+ bun add @lukaskj/ts-utils
20
+ ```
21
+
22
+ ## Features
23
+
24
+ ### Error Handling
25
+
26
+ #### `tryCatch` and `tryCatchAsync`
27
+ Type-safe error handling utilities inspired by Rust's Result type.
28
+
29
+ ```typescript
30
+ import { tryCatch, tryCatchAsync } from '@lukaskj/ts-utils';
31
+
32
+ // Synchronous usage
33
+ const [data, error] = tryCatch(() => someRiskyOperation());
34
+ if (error) {
35
+ console.error(error);
36
+ } else {
37
+ console.log(data);
38
+ }
39
+
40
+ // Asynchronous usage
41
+ const [data, error] = await tryCatchAsync(somePromise);
42
+ if (error) {
43
+ console.error(error);
44
+ } else {
45
+ console.log(data);
46
+ }
47
+ ```
48
+
49
+ ### Terminal Colors
50
+
51
+ The package includes a color utility for terminal output:
52
+
53
+ ```typescript
54
+ import colors from '@lukaskj/ts-utils/colors';
55
+
56
+ console.log(colors.red('Error message'));
57
+ console.log(colors.green('Success message'));
58
+ console.log(colors.blueBold('Important information'));
59
+ ```
60
+
61
+ ### JSON Utilities
62
+
63
+ #### `jsonParser`
64
+ A secure JSON parser that protects against prototype pollution.
65
+
66
+ ```typescript
67
+ import { jsonParser } from '@lukaskj/ts-utils';
68
+
69
+ const result = jsonParser('{"name": "test"}');
70
+ if (result.err) {
71
+ console.error(result.err);
72
+ } else {
73
+ console.log(result.value);
74
+ }
75
+ ```
76
+
77
+ ### Type Guards
78
+
79
+ #### `isObject`
80
+ Type guard for checking if a value is a plain JavaScript object.
81
+
82
+ ```typescript
83
+ import { isObject } from '@lukaskj/ts-utils';
84
+
85
+ if (isObject(value)) {
86
+ // value is typed as Record<string, any>
87
+ console.log(Object.keys(value));
88
+ }
89
+ ```
90
+
91
+ #### `isNullOrUndefined` and `isNullOrEmptyOrUndefined`
92
+ Type guards for null/undefined checks.
93
+
94
+ ```typescript
95
+ import { isNullOrUndefined, isNullOrEmptyOrUndefined } from '@lukaskj/ts-utils';
96
+
97
+ if (!isNullOrUndefined(value)) {
98
+ // value is not null or undefined
99
+ }
100
+
101
+ if (!isNullOrEmptyOrUndefined(value)) {
102
+ // value is not null, undefined, or empty string
103
+ }
104
+ ```
105
+
106
+ ### Stream Processing
107
+
108
+ #### `chunksToLines`
109
+ Converts an async iterable of chunks into lines of text.
110
+
111
+ ```typescript
112
+ import { chunksToLines } from '@lukaskj/ts-utils';
113
+ import { pipeline } from 'node:stream/promises';
114
+ import { createReadStream } from 'node:fs';
115
+
116
+ const readStream = createReadStream('file.txt', { encoding: 'utf-8' });
117
+ await pipeline(readStream, chunksToLines, process.stdout);
118
+ ```
119
+
120
+ ## Development
121
+
122
+ ```bash
123
+ # Install dependencies
124
+ bun install
125
+
126
+ # Run tests
127
+ bun test
128
+
129
+ # Build the package
130
+ bun run build:all
131
+
132
+ # Run linting
133
+ bun run lint
134
+ ```
135
+
136
+ ## Requirements
137
+
138
+ - Node.js >= 23
139
+ - Bun >= 1.2.20
140
+
141
+ ## License
142
+
143
+ MIT
144
+
145
+ ## Contributing
146
+
147
+ 1. Fork the repository
148
+ 2. Create your feature branch
149
+ 3. Commit your changes
150
+ 4. Push to the branch
151
+ 5. Create a new Pull Request
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Converts an async iterable of string or Uint8Array chunks into an async iterable of lines.
3
+ * Handles cases where lines may be split across multiple chunks.
4
+ * Usage:
5
+ * ```ts
6
+ * import { pipeline } from "node:stream/promises";
7
+ * import { createReadStream } from "node:fs";
8
+ * import { chunksToLines } from "@lukaskj/ts-utils";
9
+ *
10
+ * const readStream = createReadStream("path/to/file.txt", { encoding: "utf-8" });
11
+ * await pipeline(readStream, chunksToLines, process.stdout).catch((err) => {
12
+ * console.error(err);
13
+ * process.exit(1);
14
+ * });
15
+ * ```
16
+ * @param chunks
17
+ */
18
+ export declare function chunksToLines(chunks: AsyncIterable<string | Uint8Array>): AsyncGenerator<string, void, unknown>;
@@ -0,0 +1,109 @@
1
+ var __create = Object.create;
2
+ var __getProtoOf = Object.getPrototypeOf;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
18
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
19
+ var __toCommonJS = (from) => {
20
+ var entry = __moduleCache.get(from), desc;
21
+ if (entry)
22
+ return entry;
23
+ entry = __defProp({}, "__esModule", { value: true });
24
+ if (from && typeof from === "object" || typeof from === "function")
25
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
26
+ get: () => from[key],
27
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
28
+ }));
29
+ __moduleCache.set(from, entry);
30
+ return entry;
31
+ };
32
+ var __export = (target, all) => {
33
+ for (var name in all)
34
+ __defProp(target, name, {
35
+ get: all[name],
36
+ enumerable: true,
37
+ configurable: true,
38
+ set: (newValue) => all[name] = () => newValue
39
+ });
40
+ };
41
+
42
+ // src/colors/index.ts
43
+ var exports_colors = {};
44
+ __export(exports_colors, {
45
+ default: () => colors_default
46
+ });
47
+ module.exports = __toCommonJS(exports_colors);
48
+ var __reset = "\x1B[0m";
49
+ var COLORS_MAP;
50
+ ((COLORS_MAP2) => {
51
+ COLORS_MAP2["black"] = "\x1B[0;30m";
52
+ COLORS_MAP2["red"] = "\x1B[0;31m";
53
+ COLORS_MAP2["green"] = "\x1B[0;32m";
54
+ COLORS_MAP2["yellow"] = "\x1B[0;33m";
55
+ COLORS_MAP2["blue"] = "\x1B[0;34m";
56
+ COLORS_MAP2["purple"] = "\x1B[0;35m";
57
+ COLORS_MAP2["cyan"] = "\x1B[0;36m";
58
+ COLORS_MAP2["white"] = "\x1B[0;37m";
59
+ COLORS_MAP2["blackBright"] = "\x1B[0;90m";
60
+ COLORS_MAP2["redBright"] = "\x1B[0;91m";
61
+ COLORS_MAP2["greenBright"] = "\x1B[0;92m";
62
+ COLORS_MAP2["yellowBright"] = "\x1B[0;93m";
63
+ COLORS_MAP2["blueBright"] = "\x1B[0;94m";
64
+ COLORS_MAP2["purpleBright"] = "\x1B[0;95m";
65
+ COLORS_MAP2["cyanBright"] = "\x1B[0;96m";
66
+ COLORS_MAP2["whiteBright"] = "\x1B[0;97m";
67
+ COLORS_MAP2["redBold"] = "\x1B[1;31m";
68
+ COLORS_MAP2["greenBold"] = "\x1B[1;32m";
69
+ COLORS_MAP2["yellowBold"] = "\x1B[1;33m";
70
+ COLORS_MAP2["blueBold"] = "\x1B[1;34m";
71
+ COLORS_MAP2["purpleBold"] = "\x1B[1;35m";
72
+ COLORS_MAP2["cyanBold"] = "\x1B[1;36m";
73
+ COLORS_MAP2["whiteBold"] = "\x1B[1;37m";
74
+ COLORS_MAP2["blackUnderline"] = "\x1B[4;30m";
75
+ COLORS_MAP2["redUnderline"] = "\x1B[4;31m";
76
+ COLORS_MAP2["greenUnderline"] = "\x1B[4;32m";
77
+ COLORS_MAP2["yellowUnderline"] = "\x1B[4;33m";
78
+ COLORS_MAP2["blueUnderline"] = "\x1B[4;34m";
79
+ COLORS_MAP2["purpleUnderline"] = "\x1B[4;35m";
80
+ COLORS_MAP2["cyanUnderline"] = "\x1B[4;36m";
81
+ COLORS_MAP2["whiteUnderline"] = "\x1B[4;37m";
82
+ COLORS_MAP2["bgBlack"] = "\x1B[40m";
83
+ COLORS_MAP2["bgRed"] = "\x1B[41m";
84
+ COLORS_MAP2["bgGreen"] = "\x1B[42m";
85
+ COLORS_MAP2["bgYellow"] = "\x1B[43m";
86
+ COLORS_MAP2["bgBlue"] = "\x1B[44m";
87
+ COLORS_MAP2["bgPurple"] = "\x1B[45m";
88
+ COLORS_MAP2["bgCyan"] = "\x1B[46m";
89
+ COLORS_MAP2["bgWhite"] = "\x1B[47m";
90
+ COLORS_MAP2["bgBlackBright"] = "\x1B[100m";
91
+ COLORS_MAP2["bgRedBright"] = "\x1B[101m";
92
+ COLORS_MAP2["bgGreenBright"] = "\x1B[102m";
93
+ COLORS_MAP2["bgYellowBright"] = "\x1B[103m";
94
+ COLORS_MAP2["bgBlueBright"] = "\x1B[104m";
95
+ COLORS_MAP2["bgPurpleBright"] = "\x1B[105m";
96
+ COLORS_MAP2["bgCyanBright"] = "\x1B[106m";
97
+ COLORS_MAP2["bgWhiteBright"] = "\x1B[107m";
98
+ })(COLORS_MAP ||= {});
99
+ function wrap(color) {
100
+ return (data) => `${color}${data}${__reset}`;
101
+ }
102
+ var colors = {};
103
+ for (const [colorName, colorValue] of Object.entries(COLORS_MAP)) {
104
+ colors[colorName] = wrap(colorValue);
105
+ }
106
+ var colors_default = colors;
107
+
108
+ //# debugId=F8C6D3ADE772C14164756E2164756E21
109
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NvbG9ycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9KQmxvbmQvMmZlYTQzYTMwNDliMzgyODdlNWU5Y2VmYzg3YjIxMjRcblxuY29uc3QgX19yZXNldCA9IFwiXFx4MWJbMG1cIjtcblxuZW51bSBDT0xPUlNfTUFQIHtcbiAgYmxhY2sgPSBcIlxceDFiWzA7MzBtXCIsXG4gIHJlZCA9IFwiXFx4MWJbMDszMW1cIixcbiAgZ3JlZW4gPSBcIlxceDFiWzA7MzJtXCIsXG4gIHllbGxvdyA9IFwiXFx4MWJbMDszM21cIixcbiAgYmx1ZSA9IFwiXFx4MWJbMDszNG1cIixcbiAgcHVycGxlID0gXCJcXHgxYlswOzM1bVwiLFxuICBjeWFuID0gXCJcXHgxYlswOzM2bVwiLFxuICB3aGl0ZSA9IFwiXFx4MWJbMDszN21cIixcblxuICBibGFja0JyaWdodCA9IFwiXFx4MWJbMDs5MG1cIixcbiAgcmVkQnJpZ2h0ID0gXCJcXHgxYlswOzkxbVwiLFxuICBncmVlbkJyaWdodCA9IFwiXFx4MWJbMDs5Mm1cIixcbiAgeWVsbG93QnJpZ2h0ID0gXCJcXHgxYlswOzkzbVwiLFxuICBibHVlQnJpZ2h0ID0gXCJcXHgxYlswOzk0bVwiLFxuICBwdXJwbGVCcmlnaHQgPSBcIlxceDFiWzA7OTVtXCIsXG4gIGN5YW5CcmlnaHQgPSBcIlxceDFiWzA7OTZtXCIsXG4gIHdoaXRlQnJpZ2h0ID0gXCJcXHgxYlswOzk3bVwiLFxuXG4gIHJlZEJvbGQgPSBcIlxceDFiWzE7MzFtXCIsXG4gIGdyZWVuQm9sZCA9IFwiXFx4MWJbMTszMm1cIixcbiAgeWVsbG93Qm9sZCA9IFwiXFx4MWJbMTszM21cIixcbiAgYmx1ZUJvbGQgPSBcIlxceDFiWzE7MzRtXCIsXG4gIHB1cnBsZUJvbGQgPSBcIlxceDFiWzE7MzVtXCIsXG4gIGN5YW5Cb2xkID0gXCJcXHgxYlsxOzM2bVwiLFxuICB3aGl0ZUJvbGQgPSBcIlxceDFiWzE7MzdtXCIsXG5cbiAgYmxhY2tVbmRlcmxpbmUgPSBcIlxceDFiWzQ7MzBtXCIsXG4gIHJlZFVuZGVybGluZSA9IFwiXFx4MWJbNDszMW1cIixcbiAgZ3JlZW5VbmRlcmxpbmUgPSBcIlxceDFiWzQ7MzJtXCIsXG4gIHllbGxvd1VuZGVybGluZSA9IFwiXFx4MWJbNDszM21cIixcbiAgYmx1ZVVuZGVybGluZSA9IFwiXFx4MWJbNDszNG1cIixcbiAgcHVycGxlVW5kZXJsaW5lID0gXCJcXHgxYls0OzM1bVwiLFxuICBjeWFuVW5kZXJsaW5lID0gXCJcXHgxYls0OzM2bVwiLFxuICB3aGl0ZVVuZGVybGluZSA9IFwiXFx4MWJbNDszN21cIixcblxuICBiZ0JsYWNrID0gXCJcXHgxYls0MG1cIixcbiAgYmdSZWQgPSBcIlxceDFiWzQxbVwiLFxuICBiZ0dyZWVuID0gXCJcXHgxYls0Mm1cIixcbiAgYmdZZWxsb3cgPSBcIlxceDFiWzQzbVwiLFxuICBiZ0JsdWUgPSBcIlxceDFiWzQ0bVwiLFxuICBiZ1B1cnBsZSA9IFwiXFx4MWJbNDVtXCIsXG4gIGJnQ3lhbiA9IFwiXFx4MWJbNDZtXCIsXG4gIGJnV2hpdGUgPSBcIlxceDFiWzQ3bVwiLFxuXG4gIGJnQmxhY2tCcmlnaHQgPSBcIlxceDFiWzEwMG1cIixcbiAgYmdSZWRCcmlnaHQgPSBcIlxceDFiWzEwMW1cIixcbiAgYmdHcmVlbkJyaWdodCA9IFwiXFx4MWJbMTAybVwiLFxuICBiZ1llbGxvd0JyaWdodCA9IFwiXFx4MWJbMTAzbVwiLFxuICBiZ0JsdWVCcmlnaHQgPSBcIlxceDFiWzEwNG1cIixcbiAgYmdQdXJwbGVCcmlnaHQgPSBcIlxceDFiWzEwNW1cIixcbiAgYmdDeWFuQnJpZ2h0ID0gXCJcXHgxYlsxMDZtXCIsXG4gIGJnV2hpdGVCcmlnaHQgPSBcIlxceDFiWzEwN21cIixcbn1cblxuZnVuY3Rpb24gd3JhcChjb2xvcjogc3RyaW5nKSB7XG4gIHJldHVybiAoZGF0YTogdW5rbm93bikgPT4gYCR7Y29sb3J9JHtkYXRhfSR7X19yZXNldH1gO1xufVxuXG5jb25zdCBjb2xvcnM6IFJlY29yZDxrZXlvZiB0eXBlb2YgQ09MT1JTX01BUCwgUmV0dXJuVHlwZTx0eXBlb2Ygd3JhcD4+ID0ge30gYXMgYW55O1xuXG5mb3IgKGNvbnN0IFtjb2xvck5hbWUsIGNvbG9yVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKENPTE9SU19NQVApKSB7XG4gIGNvbG9yc1tjb2xvck5hbWUgYXMga2V5b2YgdHlwZW9mIENPTE9SU19NQVBdID0gd3JhcChjb2xvclZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNLFVBQVU7QUFFaEIsSUFBSztBQUFBLENBQUwsQ0FBSyxnQkFBTDtBQUFBLEVBQ0UsdUJBQVE7QUFBQSxFQUNSLHFCQUFNO0FBQUEsRUFDTix1QkFBUTtBQUFBLEVBQ1Isd0JBQVM7QUFBQSxFQUNULHNCQUFPO0FBQUEsRUFDUCx3QkFBUztBQUFBLEVBQ1Qsc0JBQU87QUFBQSxFQUNQLHVCQUFRO0FBQUEsRUFFUiw2QkFBYztBQUFBLEVBQ2QsMkJBQVk7QUFBQSxFQUNaLDZCQUFjO0FBQUEsRUFDZCw4QkFBZTtBQUFBLEVBQ2YsNEJBQWE7QUFBQSxFQUNiLDhCQUFlO0FBQUEsRUFDZiw0QkFBYTtBQUFBLEVBQ2IsNkJBQWM7QUFBQSxFQUVkLHlCQUFVO0FBQUEsRUFDViwyQkFBWTtBQUFBLEVBQ1osNEJBQWE7QUFBQSxFQUNiLDBCQUFXO0FBQUEsRUFDWCw0QkFBYTtBQUFBLEVBQ2IsMEJBQVc7QUFBQSxFQUNYLDJCQUFZO0FBQUEsRUFFWixnQ0FBaUI7QUFBQSxFQUNqQiw4QkFBZTtBQUFBLEVBQ2YsZ0NBQWlCO0FBQUEsRUFDakIsaUNBQWtCO0FBQUEsRUFDbEIsK0JBQWdCO0FBQUEsRUFDaEIsaUNBQWtCO0FBQUEsRUFDbEIsK0JBQWdCO0FBQUEsRUFDaEIsZ0NBQWlCO0FBQUEsRUFFakIseUJBQVU7QUFBQSxFQUNWLHVCQUFRO0FBQUEsRUFDUix5QkFBVTtBQUFBLEVBQ1YsMEJBQVc7QUFBQSxFQUNYLHdCQUFTO0FBQUEsRUFDVCwwQkFBVztBQUFBLEVBQ1gsd0JBQVM7QUFBQSxFQUNULHlCQUFVO0FBQUEsRUFFViwrQkFBZ0I7QUFBQSxFQUNoQiw2QkFBYztBQUFBLEVBQ2QsK0JBQWdCO0FBQUEsRUFDaEIsZ0NBQWlCO0FBQUEsRUFDakIsOEJBQWU7QUFBQSxFQUNmLGdDQUFpQjtBQUFBLEVBQ2pCLDhCQUFlO0FBQUEsRUFDZiwrQkFBZ0I7QUFBQSxHQXBEYjtBQXVETCxTQUFTLElBQUksQ0FBQyxPQUFlO0FBQUEsRUFDM0IsT0FBTyxDQUFDLFNBQWtCLEdBQUcsUUFBUSxPQUFPO0FBQUE7QUFHOUMsSUFBTSxTQUFtRSxDQUFDO0FBRTFFLFlBQVksV0FBVyxlQUFlLE9BQU8sUUFBUSxVQUFVLEdBQUc7QUFBQSxFQUNoRSxPQUFPLGFBQXdDLEtBQUssVUFBVTtBQUNoRTtBQUVBLElBQWU7IiwKICAiZGVidWdJZCI6ICJGOEM2RDNBREU3NzJDMTQxNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
@@ -0,0 +1,52 @@
1
+ declare enum COLORS_MAP {
2
+ black = "\u001B[0;30m",
3
+ red = "\u001B[0;31m",
4
+ green = "\u001B[0;32m",
5
+ yellow = "\u001B[0;33m",
6
+ blue = "\u001B[0;34m",
7
+ purple = "\u001B[0;35m",
8
+ cyan = "\u001B[0;36m",
9
+ white = "\u001B[0;37m",
10
+ blackBright = "\u001B[0;90m",
11
+ redBright = "\u001B[0;91m",
12
+ greenBright = "\u001B[0;92m",
13
+ yellowBright = "\u001B[0;93m",
14
+ blueBright = "\u001B[0;94m",
15
+ purpleBright = "\u001B[0;95m",
16
+ cyanBright = "\u001B[0;96m",
17
+ whiteBright = "\u001B[0;97m",
18
+ redBold = "\u001B[1;31m",
19
+ greenBold = "\u001B[1;32m",
20
+ yellowBold = "\u001B[1;33m",
21
+ blueBold = "\u001B[1;34m",
22
+ purpleBold = "\u001B[1;35m",
23
+ cyanBold = "\u001B[1;36m",
24
+ whiteBold = "\u001B[1;37m",
25
+ blackUnderline = "\u001B[4;30m",
26
+ redUnderline = "\u001B[4;31m",
27
+ greenUnderline = "\u001B[4;32m",
28
+ yellowUnderline = "\u001B[4;33m",
29
+ blueUnderline = "\u001B[4;34m",
30
+ purpleUnderline = "\u001B[4;35m",
31
+ cyanUnderline = "\u001B[4;36m",
32
+ whiteUnderline = "\u001B[4;37m",
33
+ bgBlack = "\u001B[40m",
34
+ bgRed = "\u001B[41m",
35
+ bgGreen = "\u001B[42m",
36
+ bgYellow = "\u001B[43m",
37
+ bgBlue = "\u001B[44m",
38
+ bgPurple = "\u001B[45m",
39
+ bgCyan = "\u001B[46m",
40
+ bgWhite = "\u001B[47m",
41
+ bgBlackBright = "\u001B[100m",
42
+ bgRedBright = "\u001B[101m",
43
+ bgGreenBright = "\u001B[102m",
44
+ bgYellowBright = "\u001B[103m",
45
+ bgBlueBright = "\u001B[104m",
46
+ bgPurpleBright = "\u001B[105m",
47
+ bgCyanBright = "\u001B[106m",
48
+ bgWhiteBright = "\u001B[107m"
49
+ }
50
+ declare function wrap(color: string): (data: unknown) => string;
51
+ declare const colors: Record<keyof typeof COLORS_MAP, ReturnType<typeof wrap>>;
52
+ export default colors;
@@ -0,0 +1,66 @@
1
+ // src/colors/index.ts
2
+ var __reset = "\x1B[0m";
3
+ var COLORS_MAP;
4
+ ((COLORS_MAP2) => {
5
+ COLORS_MAP2["black"] = "\x1B[0;30m";
6
+ COLORS_MAP2["red"] = "\x1B[0;31m";
7
+ COLORS_MAP2["green"] = "\x1B[0;32m";
8
+ COLORS_MAP2["yellow"] = "\x1B[0;33m";
9
+ COLORS_MAP2["blue"] = "\x1B[0;34m";
10
+ COLORS_MAP2["purple"] = "\x1B[0;35m";
11
+ COLORS_MAP2["cyan"] = "\x1B[0;36m";
12
+ COLORS_MAP2["white"] = "\x1B[0;37m";
13
+ COLORS_MAP2["blackBright"] = "\x1B[0;90m";
14
+ COLORS_MAP2["redBright"] = "\x1B[0;91m";
15
+ COLORS_MAP2["greenBright"] = "\x1B[0;92m";
16
+ COLORS_MAP2["yellowBright"] = "\x1B[0;93m";
17
+ COLORS_MAP2["blueBright"] = "\x1B[0;94m";
18
+ COLORS_MAP2["purpleBright"] = "\x1B[0;95m";
19
+ COLORS_MAP2["cyanBright"] = "\x1B[0;96m";
20
+ COLORS_MAP2["whiteBright"] = "\x1B[0;97m";
21
+ COLORS_MAP2["redBold"] = "\x1B[1;31m";
22
+ COLORS_MAP2["greenBold"] = "\x1B[1;32m";
23
+ COLORS_MAP2["yellowBold"] = "\x1B[1;33m";
24
+ COLORS_MAP2["blueBold"] = "\x1B[1;34m";
25
+ COLORS_MAP2["purpleBold"] = "\x1B[1;35m";
26
+ COLORS_MAP2["cyanBold"] = "\x1B[1;36m";
27
+ COLORS_MAP2["whiteBold"] = "\x1B[1;37m";
28
+ COLORS_MAP2["blackUnderline"] = "\x1B[4;30m";
29
+ COLORS_MAP2["redUnderline"] = "\x1B[4;31m";
30
+ COLORS_MAP2["greenUnderline"] = "\x1B[4;32m";
31
+ COLORS_MAP2["yellowUnderline"] = "\x1B[4;33m";
32
+ COLORS_MAP2["blueUnderline"] = "\x1B[4;34m";
33
+ COLORS_MAP2["purpleUnderline"] = "\x1B[4;35m";
34
+ COLORS_MAP2["cyanUnderline"] = "\x1B[4;36m";
35
+ COLORS_MAP2["whiteUnderline"] = "\x1B[4;37m";
36
+ COLORS_MAP2["bgBlack"] = "\x1B[40m";
37
+ COLORS_MAP2["bgRed"] = "\x1B[41m";
38
+ COLORS_MAP2["bgGreen"] = "\x1B[42m";
39
+ COLORS_MAP2["bgYellow"] = "\x1B[43m";
40
+ COLORS_MAP2["bgBlue"] = "\x1B[44m";
41
+ COLORS_MAP2["bgPurple"] = "\x1B[45m";
42
+ COLORS_MAP2["bgCyan"] = "\x1B[46m";
43
+ COLORS_MAP2["bgWhite"] = "\x1B[47m";
44
+ COLORS_MAP2["bgBlackBright"] = "\x1B[100m";
45
+ COLORS_MAP2["bgRedBright"] = "\x1B[101m";
46
+ COLORS_MAP2["bgGreenBright"] = "\x1B[102m";
47
+ COLORS_MAP2["bgYellowBright"] = "\x1B[103m";
48
+ COLORS_MAP2["bgBlueBright"] = "\x1B[104m";
49
+ COLORS_MAP2["bgPurpleBright"] = "\x1B[105m";
50
+ COLORS_MAP2["bgCyanBright"] = "\x1B[106m";
51
+ COLORS_MAP2["bgWhiteBright"] = "\x1B[107m";
52
+ })(COLORS_MAP ||= {});
53
+ function wrap(color) {
54
+ return (data) => `${color}${data}${__reset}`;
55
+ }
56
+ var colors = {};
57
+ for (const [colorName, colorValue] of Object.entries(COLORS_MAP)) {
58
+ colors[colorName] = wrap(colorValue);
59
+ }
60
+ var colors_default = colors;
61
+ export {
62
+ colors_default as default
63
+ };
64
+
65
+ //# debugId=2E2399BDD412E4AB64756E2164756E21
66
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NvbG9ycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9KQmxvbmQvMmZlYTQzYTMwNDliMzgyODdlNWU5Y2VmYzg3YjIxMjRcblxuY29uc3QgX19yZXNldCA9IFwiXFx4MWJbMG1cIjtcblxuZW51bSBDT0xPUlNfTUFQIHtcbiAgYmxhY2sgPSBcIlxceDFiWzA7MzBtXCIsXG4gIHJlZCA9IFwiXFx4MWJbMDszMW1cIixcbiAgZ3JlZW4gPSBcIlxceDFiWzA7MzJtXCIsXG4gIHllbGxvdyA9IFwiXFx4MWJbMDszM21cIixcbiAgYmx1ZSA9IFwiXFx4MWJbMDszNG1cIixcbiAgcHVycGxlID0gXCJcXHgxYlswOzM1bVwiLFxuICBjeWFuID0gXCJcXHgxYlswOzM2bVwiLFxuICB3aGl0ZSA9IFwiXFx4MWJbMDszN21cIixcblxuICBibGFja0JyaWdodCA9IFwiXFx4MWJbMDs5MG1cIixcbiAgcmVkQnJpZ2h0ID0gXCJcXHgxYlswOzkxbVwiLFxuICBncmVlbkJyaWdodCA9IFwiXFx4MWJbMDs5Mm1cIixcbiAgeWVsbG93QnJpZ2h0ID0gXCJcXHgxYlswOzkzbVwiLFxuICBibHVlQnJpZ2h0ID0gXCJcXHgxYlswOzk0bVwiLFxuICBwdXJwbGVCcmlnaHQgPSBcIlxceDFiWzA7OTVtXCIsXG4gIGN5YW5CcmlnaHQgPSBcIlxceDFiWzA7OTZtXCIsXG4gIHdoaXRlQnJpZ2h0ID0gXCJcXHgxYlswOzk3bVwiLFxuXG4gIHJlZEJvbGQgPSBcIlxceDFiWzE7MzFtXCIsXG4gIGdyZWVuQm9sZCA9IFwiXFx4MWJbMTszMm1cIixcbiAgeWVsbG93Qm9sZCA9IFwiXFx4MWJbMTszM21cIixcbiAgYmx1ZUJvbGQgPSBcIlxceDFiWzE7MzRtXCIsXG4gIHB1cnBsZUJvbGQgPSBcIlxceDFiWzE7MzVtXCIsXG4gIGN5YW5Cb2xkID0gXCJcXHgxYlsxOzM2bVwiLFxuICB3aGl0ZUJvbGQgPSBcIlxceDFiWzE7MzdtXCIsXG5cbiAgYmxhY2tVbmRlcmxpbmUgPSBcIlxceDFiWzQ7MzBtXCIsXG4gIHJlZFVuZGVybGluZSA9IFwiXFx4MWJbNDszMW1cIixcbiAgZ3JlZW5VbmRlcmxpbmUgPSBcIlxceDFiWzQ7MzJtXCIsXG4gIHllbGxvd1VuZGVybGluZSA9IFwiXFx4MWJbNDszM21cIixcbiAgYmx1ZVVuZGVybGluZSA9IFwiXFx4MWJbNDszNG1cIixcbiAgcHVycGxlVW5kZXJsaW5lID0gXCJcXHgxYls0OzM1bVwiLFxuICBjeWFuVW5kZXJsaW5lID0gXCJcXHgxYls0OzM2bVwiLFxuICB3aGl0ZVVuZGVybGluZSA9IFwiXFx4MWJbNDszN21cIixcblxuICBiZ0JsYWNrID0gXCJcXHgxYls0MG1cIixcbiAgYmdSZWQgPSBcIlxceDFiWzQxbVwiLFxuICBiZ0dyZWVuID0gXCJcXHgxYls0Mm1cIixcbiAgYmdZZWxsb3cgPSBcIlxceDFiWzQzbVwiLFxuICBiZ0JsdWUgPSBcIlxceDFiWzQ0bVwiLFxuICBiZ1B1cnBsZSA9IFwiXFx4MWJbNDVtXCIsXG4gIGJnQ3lhbiA9IFwiXFx4MWJbNDZtXCIsXG4gIGJnV2hpdGUgPSBcIlxceDFiWzQ3bVwiLFxuXG4gIGJnQmxhY2tCcmlnaHQgPSBcIlxceDFiWzEwMG1cIixcbiAgYmdSZWRCcmlnaHQgPSBcIlxceDFiWzEwMW1cIixcbiAgYmdHcmVlbkJyaWdodCA9IFwiXFx4MWJbMTAybVwiLFxuICBiZ1llbGxvd0JyaWdodCA9IFwiXFx4MWJbMTAzbVwiLFxuICBiZ0JsdWVCcmlnaHQgPSBcIlxceDFiWzEwNG1cIixcbiAgYmdQdXJwbGVCcmlnaHQgPSBcIlxceDFiWzEwNW1cIixcbiAgYmdDeWFuQnJpZ2h0ID0gXCJcXHgxYlsxMDZtXCIsXG4gIGJnV2hpdGVCcmlnaHQgPSBcIlxceDFiWzEwN21cIixcbn1cblxuZnVuY3Rpb24gd3JhcChjb2xvcjogc3RyaW5nKSB7XG4gIHJldHVybiAoZGF0YTogdW5rbm93bikgPT4gYCR7Y29sb3J9JHtkYXRhfSR7X19yZXNldH1gO1xufVxuXG5jb25zdCBjb2xvcnM6IFJlY29yZDxrZXlvZiB0eXBlb2YgQ09MT1JTX01BUCwgUmV0dXJuVHlwZTx0eXBlb2Ygd3JhcD4+ID0ge30gYXMgYW55O1xuXG5mb3IgKGNvbnN0IFtjb2xvck5hbWUsIGNvbG9yVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKENPTE9SU19NQVApKSB7XG4gIGNvbG9yc1tjb2xvck5hbWUgYXMga2V5b2YgdHlwZW9mIENPTE9SU19NQVBdID0gd3JhcChjb2xvclZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLElBQU0sVUFBVTtBQUVoQixJQUFLO0FBQUEsQ0FBTCxDQUFLLGdCQUFMO0FBQUEsRUFDRSx1QkFBUTtBQUFBLEVBQ1IscUJBQU07QUFBQSxFQUNOLHVCQUFRO0FBQUEsRUFDUix3QkFBUztBQUFBLEVBQ1Qsc0JBQU87QUFBQSxFQUNQLHdCQUFTO0FBQUEsRUFDVCxzQkFBTztBQUFBLEVBQ1AsdUJBQVE7QUFBQSxFQUVSLDZCQUFjO0FBQUEsRUFDZCwyQkFBWTtBQUFBLEVBQ1osNkJBQWM7QUFBQSxFQUNkLDhCQUFlO0FBQUEsRUFDZiw0QkFBYTtBQUFBLEVBQ2IsOEJBQWU7QUFBQSxFQUNmLDRCQUFhO0FBQUEsRUFDYiw2QkFBYztBQUFBLEVBRWQseUJBQVU7QUFBQSxFQUNWLDJCQUFZO0FBQUEsRUFDWiw0QkFBYTtBQUFBLEVBQ2IsMEJBQVc7QUFBQSxFQUNYLDRCQUFhO0FBQUEsRUFDYiwwQkFBVztBQUFBLEVBQ1gsMkJBQVk7QUFBQSxFQUVaLGdDQUFpQjtBQUFBLEVBQ2pCLDhCQUFlO0FBQUEsRUFDZixnQ0FBaUI7QUFBQSxFQUNqQixpQ0FBa0I7QUFBQSxFQUNsQiwrQkFBZ0I7QUFBQSxFQUNoQixpQ0FBa0I7QUFBQSxFQUNsQiwrQkFBZ0I7QUFBQSxFQUNoQixnQ0FBaUI7QUFBQSxFQUVqQix5QkFBVTtBQUFBLEVBQ1YsdUJBQVE7QUFBQSxFQUNSLHlCQUFVO0FBQUEsRUFDViwwQkFBVztBQUFBLEVBQ1gsd0JBQVM7QUFBQSxFQUNULDBCQUFXO0FBQUEsRUFDWCx3QkFBUztBQUFBLEVBQ1QseUJBQVU7QUFBQSxFQUVWLCtCQUFnQjtBQUFBLEVBQ2hCLDZCQUFjO0FBQUEsRUFDZCwrQkFBZ0I7QUFBQSxFQUNoQixnQ0FBaUI7QUFBQSxFQUNqQiw4QkFBZTtBQUFBLEVBQ2YsZ0NBQWlCO0FBQUEsRUFDakIsOEJBQWU7QUFBQSxFQUNmLCtCQUFnQjtBQUFBLEdBcERiO0FBdURMLFNBQVMsSUFBSSxDQUFDLE9BQWU7QUFBQSxFQUMzQixPQUFPLENBQUMsU0FBa0IsR0FBRyxRQUFRLE9BQU87QUFBQTtBQUc5QyxJQUFNLFNBQW1FLENBQUM7QUFFMUUsWUFBWSxXQUFXLGVBQWUsT0FBTyxRQUFRLFVBQVUsR0FBRztBQUFBLEVBQ2hFLE9BQU8sYUFBd0MsS0FBSyxVQUFVO0FBQ2hFO0FBRUEsSUFBZTsiLAogICJkZWJ1Z0lkIjogIjJFMjM5OUJERDQxMkU0QUI2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
package/dist/index.cjs ADDED
@@ -0,0 +1,109 @@
1
+ var __create = Object.create;
2
+ var __getProtoOf = Object.getPrototypeOf;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
18
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
19
+ var __toCommonJS = (from) => {
20
+ var entry = __moduleCache.get(from), desc;
21
+ if (entry)
22
+ return entry;
23
+ entry = __defProp({}, "__esModule", { value: true });
24
+ if (from && typeof from === "object" || typeof from === "function")
25
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
26
+ get: () => from[key],
27
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
28
+ }));
29
+ __moduleCache.set(from, entry);
30
+ return entry;
31
+ };
32
+ var __export = (target, all) => {
33
+ for (var name in all)
34
+ __defProp(target, name, {
35
+ get: all[name],
36
+ enumerable: true,
37
+ configurable: true,
38
+ set: (newValue) => all[name] = () => newValue
39
+ });
40
+ };
41
+
42
+ // src/index.ts
43
+ var exports_src = {};
44
+ __export(exports_src, {
45
+ tryCatchAsync: () => tryCatchAsync,
46
+ tryCatch: () => tryCatch,
47
+ jsonParser: () => jsonParser,
48
+ isObject: () => isObject,
49
+ isNullOrUndefined: () => isNullOrUndefined,
50
+ isNullOrEmptyOrUndefined: () => isNullOrEmptyOrUndefined,
51
+ chunksToLines: () => chunksToLines
52
+ });
53
+ module.exports = __toCommonJS(exports_src);
54
+
55
+ // src/chunksToLines.ts
56
+ async function* chunksToLines(chunks) {
57
+ let previous = "";
58
+ for await (const chunk of chunks) {
59
+ previous += chunk;
60
+ let eolIndex;
61
+ while ((eolIndex = previous.indexOf(`
62
+ `)) >= 0) {
63
+ const line = previous.slice(0, eolIndex + 1);
64
+ yield line?.trim() ?? "";
65
+ previous = previous.slice(eolIndex + 1);
66
+ }
67
+ }
68
+ if (previous.length > 0) {
69
+ yield previous;
70
+ }
71
+ }
72
+ // src/isObject.ts
73
+ function isObject(input) {
74
+ return Object.prototype.toString.apply(input) === "[object Object]";
75
+ }
76
+ // src/jsonParser.ts
77
+ var import_secure_json_parse = __toESM(require("secure-json-parse"));
78
+ function jsonParser(input) {
79
+ try {
80
+ return { value: import_secure_json_parse.default.parse(input, { protoAction: "remove" }) };
81
+ } catch (err) {
82
+ return { err };
83
+ }
84
+ }
85
+ // src/neverthrow/tryCatch.ts
86
+ function tryCatch(fn) {
87
+ try {
88
+ const data = fn();
89
+ return [data, undefined];
90
+ } catch (error) {
91
+ return [undefined, error];
92
+ }
93
+ }
94
+ async function tryCatchAsync(promise) {
95
+ try {
96
+ const data = await promise;
97
+ return [data, undefined];
98
+ } catch (error) {
99
+ return [undefined, error];
100
+ }
101
+ }
102
+ // src/isNullOrUndefined.ts
103
+ var isNullOrUndefined = (value) => value === null || value === undefined;
104
+ function isNullOrEmptyOrUndefined(value) {
105
+ return value === undefined || value === null || value === "" || value.toString().trim() === "";
106
+ }
107
+
108
+ //# debugId=BE1349762FEF2BD064756E2164756E21
109
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NodW5rc1RvTGluZXMudHMiLCAiLi4vc3JjL2lzT2JqZWN0LnRzIiwgIi4uL3NyYy9qc29uUGFyc2VyLnRzIiwgIi4uL3NyYy9uZXZlcnRocm93L3RyeUNhdGNoLnRzIiwgIi4uL3NyYy9pc051bGxPclVuZGVmaW5lZC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvKipcbiAqIENvbnZlcnRzIGFuIGFzeW5jIGl0ZXJhYmxlIG9mIHN0cmluZyBvciBVaW50OEFycmF5IGNodW5rcyBpbnRvIGFuIGFzeW5jIGl0ZXJhYmxlIG9mIGxpbmVzLlxuICogSGFuZGxlcyBjYXNlcyB3aGVyZSBsaW5lcyBtYXkgYmUgc3BsaXQgYWNyb3NzIG11bHRpcGxlIGNodW5rcy5cbiAqIFVzYWdlOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHBpcGVsaW5lIH0gZnJvbSBcIm5vZGU6c3RyZWFtL3Byb21pc2VzXCI7XG4gKiBpbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbiAqIGltcG9ydCB7IGNodW5rc1RvTGluZXMgfSBmcm9tIFwiQGx1a2Fza2ovdHMtdXRpbHNcIjtcbiAqXG4gKiBjb25zdCByZWFkU3RyZWFtID0gY3JlYXRlUmVhZFN0cmVhbShcInBhdGgvdG8vZmlsZS50eHRcIiwgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0pO1xuICogYXdhaXQgcGlwZWxpbmUocmVhZFN0cmVhbSwgY2h1bmtzVG9MaW5lcywgcHJvY2Vzcy5zdGRvdXQpLmNhdGNoKChlcnIpID0+IHtcbiAqICAgY29uc29sZS5lcnJvcihlcnIpO1xuICogICBwcm9jZXNzLmV4aXQoMSk7XG4gKiB9KTtcbiAqIGBgYFxuICogQHBhcmFtIGNodW5rc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGNodW5rc1RvTGluZXMoY2h1bmtzOiBBc3luY0l0ZXJhYmxlPHN0cmluZyB8IFVpbnQ4QXJyYXk+KSB7XG4gIGxldCBwcmV2aW91cyA9IFwiXCI7XG5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBjaHVua3MpIHtcbiAgICBwcmV2aW91cyArPSBjaHVuaztcbiAgICBsZXQgZW9sSW5kZXg6IG51bWJlcjtcblxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9Bc3NpZ25JbkV4cHJlc3Npb25zOiBcImV4cGxhbmF0aW9uXCJcbiAgICB3aGlsZSAoKGVvbEluZGV4ID0gcHJldmlvdXMuaW5kZXhPZihcIlxcblwiKSkgPj0gMCkge1xuICAgICAgLy8gdGhpcyBsaW5lIGluY2x1ZGVzIHRoZSBFT0xcbiAgICAgIGNvbnN0IGxpbmUgPSBwcmV2aW91cy5zbGljZSgwLCBlb2xJbmRleCArIDEpO1xuICAgICAgeWllbGQgbGluZT8udHJpbSgpID8/IFwiXCI7XG4gICAgICBwcmV2aW91cyA9IHByZXZpb3VzLnNsaWNlKGVvbEluZGV4ICsgMSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHByZXZpb3VzLmxlbmd0aCA+IDApIHtcbiAgICB5aWVsZCBwcmV2aW91cztcbiAgfVxufVxuIiwKICAgICIvKipcbiAqIFR5cGUgZ3VhcmQgdGhhdCBjaGVja3MgaWYgdGhlIGlucHV0IGlzIGEgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge2FueX0gaW5wdXQgLSBUaGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBpbnB1dCBpcyBhIHBsYWluIG9iamVjdCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKiBAdHlwZVBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBUeXBlIGd1YXJkIG5hcnJvd3MgdGhlIGlucHV0IHR5cGUgdG8gYSBzdHJpbmcta2V5ZWQgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdChpbnB1dDogYW55KTogaW5wdXQgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGlucHV0KSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIjtcbn1cbiIsCiAgICAiaW1wb3J0IHNqcyBmcm9tIFwic2VjdXJlLWpzb24tcGFyc2VcIjtcblxuLyoqXG4gKiBTYWZlbHkgcGFyc2VzIEpTT04gaW5wdXQgdXNpbmcgc2VjdXJlLWpzb24tcGFyc2Ugd2l0aCBwcm90b3R5cGUgcG9sbHV0aW9uIHByb3RlY3Rpb24uXG4gKiBAcGFyYW0ge2FueX0gaW5wdXQgLSBUaGUgaW5wdXQgdG8gYmUgcGFyc2VkIGFzIEpTT05cbiAqIEByZXR1cm5zIHt7IHZhbHVlPzogYW55LCBlcnI/OiBFcnJvciB9fSBBbiBvYmplY3QgY29udGFpbmluZyBlaXRoZXIgdGhlIHBhcnNlZCB2YWx1ZSBvciBhbiBlcnJvciBpZiBwYXJzaW5nIGZhaWxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvblBhcnNlcihpbnB1dDogYW55KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHNqcy5wYXJzZShpbnB1dCwgeyBwcm90b0FjdGlvbjogXCJyZW1vdmVcIiB9KSB9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4geyBlcnIgfTtcbiAgfVxufVxuIiwKICAgICIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90M2RvdGdnL2E0ODZjNGFlNjZkMzJiZjE3YzA5YzczNjA5ZGFjYzViXG4vLyBUeXBlcyBmb3IgdGhlIHJlc3VsdCBvYmplY3Qgd2l0aCBkaXNjcmltaW5hdGVkIHVuaW9uXG4vLyB0eXBlIFN1Y2Nlc3M8VD4gPSB7XG4vLyAgIGRhdGE6IFQ7XG4vLyAgIGVycm9yOiBudWxsO1xuLy8gfTtcblxuLy8gdHlwZSBGYWlsdXJlPEU+ID0ge1xuLy8gICBkYXRhOiBudWxsO1xuLy8gICBlcnJvcjogRTtcbi8vIH07XG5cbi8vIGV4cG9ydCB0eXBlIFJlc3VsdDxULCBFID0gRXJyb3I+ID0gU3VjY2VzczxUPiB8IEZhaWx1cmU8RT47XG5cbmV4cG9ydCB0eXBlIFJlc3VsdDxULCBFPiA9IFt1bmRlZmluZWQsIEVdIHwgW1QsIHVuZGVmaW5lZF07XG5leHBvcnQgdHlwZSBQcm9taXNlUmVzdWx0PFQsIEU+ID0gUHJvbWlzZTxSZXN1bHQ8VCwgRT4+O1xuXG4vKipcbiAqIFdyYXBzIGEgc3luY2hyb25vdXMgZnVuY3Rpb24gaW4gYSB0cnktY2F0Y2ggYmxvY2sgYW5kIHJldHVybnMgYSBSZXN1bHQgdHVwbGUgY29udGFpbmluZyBlaXRoZXIgdGhlIHJldHVybmVkIHZhbHVlIG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBzdWNjZXNzZnVsIHJlc3VsdCB2YWx1ZVxuICogQHRlbXBsYXRlIEUgLSBUaGUgdHlwZSBvZiB0aGUgZXJyb3IgdmFsdWUsIG11c3QgZXh0ZW5kIEVycm9yXG4gKiBAcGFyYW0geygpID0+IFR9IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkXG4gKiBAcmV0dXJucyB7UmVzdWx0PFQsIEU+fSBBIHR1cGxlIGNvbnRhaW5pbmcgZWl0aGVyIFtkYXRhLCB1bmRlZmluZWRdIG9yIFt1bmRlZmluZWQsIGVycm9yXVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBbZGF0YSwgZXJyb3JdID0gdHJ5Q2F0Y2goKCkgPT4gc29tZVJpc2t5T3BlcmF0aW9uKCkpO1xuICogaWYgKGVycm9yKSB7XG4gKiAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICogfSBlbHNlIHtcbiAqICAgY29uc29sZS5sb2coZGF0YSk7XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cnlDYXRjaDxULCBFIGV4dGVuZHMgRXJyb3I+KGZuOiAoKSA9PiBUKTogUmVzdWx0PFQsIEU+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gZm4oKTtcbiAgICByZXR1cm4gW2RhdGEgYXMgVCwgdW5kZWZpbmVkXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gW3VuZGVmaW5lZCwgZXJyb3IgYXMgRV07XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwcyBhIFByb21pc2UgaW4gYSB0cnktY2F0Y2ggYmxvY2sgYW5kIHJldHVybnMgYSBSZXN1bHQgb2JqZWN0IGNvbnRhaW5pbmcgZWl0aGVyIHRoZSByZXNvbHZlZCBkYXRhIG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBzdWNjZXNzZnVsIHJlc3VsdCB2YWx1ZVxuICogQHRlbXBsYXRlIEUgLSBUaGUgdHlwZSBvZiB0aGUgZXJyb3IgdmFsdWUsIGRlZmF1bHRzIHRvIEVycm9yXG4gKiBAcGFyYW0ge1Byb21pc2U8VD59IHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBiZSBleGVjdXRlZFxuICogQHJldHVybnMge1Byb21pc2U8UmVzdWx0PFQsIEU+Pn0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBSZXN1bHQgb2JqZWN0IGNvbnRhaW5pbmcgZWl0aGVyIHRoZSBkYXRhIG9yIGVycm9yXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHtkYXRhLCBlcnJvcn0gPSBhd2FpdCB0cnlDYXRjaEFzeW5jKHNvbWVQcm9taXNlKTtcbiAqIGlmIChlcnJvcikge1xuICogICBjb25zb2xlLmVycm9yKHJlc3VsdC5lcnJvcik7XG4gKiB9IGVsc2Uge1xuICogICBjb25zb2xlLmxvZyhkYXRhKTtcbiAqIH1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyeUNhdGNoQXN5bmM8VCwgRSBleHRlbmRzIEVycm9yPihwcm9taXNlOiBQcm9taXNlPFQ+KTogUHJvbWlzZVJlc3VsdDxULCBFPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHByb21pc2U7XG4gICAgcmV0dXJuIFtkYXRhIGFzIFQsIHVuZGVmaW5lZF07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFt1bmRlZmluZWQsIGVycm9yIGFzIEVdO1xuICB9XG59XG4iLAogICAgImV4cG9ydCBjb25zdCBpc051bGxPclVuZGVmaW5lZCA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCA9PiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eU9yVW5kZWZpbmVkKHZhbHVlPzogYW55IHwgbnVsbCk6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS50b1N0cmluZygpLnRyaW0oKSA9PT0gXCJcIjtcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkEsZ0JBQXVCLGFBQWEsQ0FBQyxRQUE0QztBQUFBLEVBQy9FLElBQUksV0FBVztBQUFBLEVBRWYsaUJBQWlCLFNBQVMsUUFBUTtBQUFBLElBQ2hDLFlBQVk7QUFBQSxJQUNaLElBQUk7QUFBQSxJQUdKLFFBQVEsV0FBVyxTQUFTLFFBQVE7QUFBQSxDQUFJLE1BQU0sR0FBRztBQUFBLE1BRS9DLE1BQU0sT0FBTyxTQUFTLE1BQU0sR0FBRyxXQUFXLENBQUM7QUFBQSxNQUMzQyxNQUFNLE1BQU0sS0FBSyxLQUFLO0FBQUEsTUFDdEIsV0FBVyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBQUEsSUFDeEM7QUFBQSxFQUNGO0FBQUEsRUFFQSxJQUFJLFNBQVMsU0FBUyxHQUFHO0FBQUEsSUFDdkIsTUFBTTtBQUFBLEVBQ1I7QUFBQTs7QUM3QkssU0FBUyxRQUFRLENBQUMsT0FBMEM7QUFBQSxFQUNqRSxPQUFPLE9BQU8sVUFBVSxTQUFTLE1BQU0sS0FBSyxNQUFNO0FBQUE7O0FDUHBDLElBQWhCO0FBT08sU0FBUyxVQUFVLENBQUMsT0FBWTtBQUFBLEVBQ3JDLElBQUk7QUFBQSxJQUNGLE9BQU8sRUFBRSxPQUFPLGlDQUFJLE1BQU0sT0FBTyxFQUFFLGFBQWEsU0FBUyxDQUFDLEVBQUU7QUFBQSxJQUM1RCxPQUFPLEtBQUs7QUFBQSxJQUNaLE9BQU8sRUFBRSxJQUFJO0FBQUE7QUFBQTs7QUNzQlYsU0FBUyxRQUE0QixDQUFDLElBQTJCO0FBQUEsRUFDdEUsSUFBSTtBQUFBLElBQ0YsTUFBTSxPQUFPLEdBQUc7QUFBQSxJQUNoQixPQUFPLENBQUMsTUFBVyxTQUFTO0FBQUEsSUFDNUIsT0FBTyxPQUFPO0FBQUEsSUFDZCxPQUFPLENBQUMsV0FBVyxLQUFVO0FBQUE7QUFBQTtBQW9CakMsZUFBc0IsYUFBaUMsQ0FBQyxTQUEwQztBQUFBLEVBQ2hHLElBQUk7QUFBQSxJQUNGLE1BQU0sT0FBTyxNQUFNO0FBQUEsSUFDbkIsT0FBTyxDQUFDLE1BQVcsU0FBUztBQUFBLElBQzVCLE9BQU8sT0FBTztBQUFBLElBQ2QsT0FBTyxDQUFDLFdBQVcsS0FBVTtBQUFBO0FBQUE7O0FDL0QxQixJQUFNLG9CQUFvQixDQUFDLFVBQTBDLFVBQVUsUUFBUSxVQUFVO0FBRWpHLFNBQVMsd0JBQXdCLENBQUMsT0FBK0M7QUFBQSxFQUN0RixPQUFPLFVBQVUsYUFBYSxVQUFVLFFBQVEsVUFBVSxNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUssTUFBTTtBQUFBOyIsCiAgImRlYnVnSWQiOiAiQkUxMzQ5NzYyRkVGMkJEMDY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
@@ -0,0 +1,6 @@
1
+ export * from "./chunksToLines.ts";
2
+ export * from "./isObject.ts";
3
+ export * from "./jsonParser.ts";
4
+ export * from "./neverthrow/tryCatch.ts";
5
+ export * from "./types.ts";
6
+ export * from "./isNullOrUndefined.ts";
package/dist/index.mjs ADDED
@@ -0,0 +1,64 @@
1
+ // src/chunksToLines.ts
2
+ async function* chunksToLines(chunks) {
3
+ let previous = "";
4
+ for await (const chunk of chunks) {
5
+ previous += chunk;
6
+ let eolIndex;
7
+ while ((eolIndex = previous.indexOf(`
8
+ `)) >= 0) {
9
+ const line = previous.slice(0, eolIndex + 1);
10
+ yield line?.trim() ?? "";
11
+ previous = previous.slice(eolIndex + 1);
12
+ }
13
+ }
14
+ if (previous.length > 0) {
15
+ yield previous;
16
+ }
17
+ }
18
+ // src/isObject.ts
19
+ function isObject(input) {
20
+ return Object.prototype.toString.apply(input) === "[object Object]";
21
+ }
22
+ // src/jsonParser.ts
23
+ import sjs from "secure-json-parse";
24
+ function jsonParser(input) {
25
+ try {
26
+ return { value: sjs.parse(input, { protoAction: "remove" }) };
27
+ } catch (err) {
28
+ return { err };
29
+ }
30
+ }
31
+ // src/neverthrow/tryCatch.ts
32
+ function tryCatch(fn) {
33
+ try {
34
+ const data = fn();
35
+ return [data, undefined];
36
+ } catch (error) {
37
+ return [undefined, error];
38
+ }
39
+ }
40
+ async function tryCatchAsync(promise) {
41
+ try {
42
+ const data = await promise;
43
+ return [data, undefined];
44
+ } catch (error) {
45
+ return [undefined, error];
46
+ }
47
+ }
48
+ // src/isNullOrUndefined.ts
49
+ var isNullOrUndefined = (value) => value === null || value === undefined;
50
+ function isNullOrEmptyOrUndefined(value) {
51
+ return value === undefined || value === null || value === "" || value.toString().trim() === "";
52
+ }
53
+ export {
54
+ tryCatchAsync,
55
+ tryCatch,
56
+ jsonParser,
57
+ isObject,
58
+ isNullOrUndefined,
59
+ isNullOrEmptyOrUndefined,
60
+ chunksToLines
61
+ };
62
+
63
+ //# debugId=2F1D216C3D5C751D64756E2164756E21
64
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NodW5rc1RvTGluZXMudHMiLCAiLi4vc3JjL2lzT2JqZWN0LnRzIiwgIi4uL3NyYy9qc29uUGFyc2VyLnRzIiwgIi4uL3NyYy9uZXZlcnRocm93L3RyeUNhdGNoLnRzIiwgIi4uL3NyYy9pc051bGxPclVuZGVmaW5lZC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvKipcbiAqIENvbnZlcnRzIGFuIGFzeW5jIGl0ZXJhYmxlIG9mIHN0cmluZyBvciBVaW50OEFycmF5IGNodW5rcyBpbnRvIGFuIGFzeW5jIGl0ZXJhYmxlIG9mIGxpbmVzLlxuICogSGFuZGxlcyBjYXNlcyB3aGVyZSBsaW5lcyBtYXkgYmUgc3BsaXQgYWNyb3NzIG11bHRpcGxlIGNodW5rcy5cbiAqIFVzYWdlOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHBpcGVsaW5lIH0gZnJvbSBcIm5vZGU6c3RyZWFtL3Byb21pc2VzXCI7XG4gKiBpbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbiAqIGltcG9ydCB7IGNodW5rc1RvTGluZXMgfSBmcm9tIFwiQGx1a2Fza2ovdHMtdXRpbHNcIjtcbiAqXG4gKiBjb25zdCByZWFkU3RyZWFtID0gY3JlYXRlUmVhZFN0cmVhbShcInBhdGgvdG8vZmlsZS50eHRcIiwgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0pO1xuICogYXdhaXQgcGlwZWxpbmUocmVhZFN0cmVhbSwgY2h1bmtzVG9MaW5lcywgcHJvY2Vzcy5zdGRvdXQpLmNhdGNoKChlcnIpID0+IHtcbiAqICAgY29uc29sZS5lcnJvcihlcnIpO1xuICogICBwcm9jZXNzLmV4aXQoMSk7XG4gKiB9KTtcbiAqIGBgYFxuICogQHBhcmFtIGNodW5rc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGNodW5rc1RvTGluZXMoY2h1bmtzOiBBc3luY0l0ZXJhYmxlPHN0cmluZyB8IFVpbnQ4QXJyYXk+KSB7XG4gIGxldCBwcmV2aW91cyA9IFwiXCI7XG5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBjaHVua3MpIHtcbiAgICBwcmV2aW91cyArPSBjaHVuaztcbiAgICBsZXQgZW9sSW5kZXg6IG51bWJlcjtcblxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9Bc3NpZ25JbkV4cHJlc3Npb25zOiBcImV4cGxhbmF0aW9uXCJcbiAgICB3aGlsZSAoKGVvbEluZGV4ID0gcHJldmlvdXMuaW5kZXhPZihcIlxcblwiKSkgPj0gMCkge1xuICAgICAgLy8gdGhpcyBsaW5lIGluY2x1ZGVzIHRoZSBFT0xcbiAgICAgIGNvbnN0IGxpbmUgPSBwcmV2aW91cy5zbGljZSgwLCBlb2xJbmRleCArIDEpO1xuICAgICAgeWllbGQgbGluZT8udHJpbSgpID8/IFwiXCI7XG4gICAgICBwcmV2aW91cyA9IHByZXZpb3VzLnNsaWNlKGVvbEluZGV4ICsgMSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHByZXZpb3VzLmxlbmd0aCA+IDApIHtcbiAgICB5aWVsZCBwcmV2aW91cztcbiAgfVxufVxuIiwKICAgICIvKipcbiAqIFR5cGUgZ3VhcmQgdGhhdCBjaGVja3MgaWYgdGhlIGlucHV0IGlzIGEgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge2FueX0gaW5wdXQgLSBUaGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBpbnB1dCBpcyBhIHBsYWluIG9iamVjdCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKiBAdHlwZVBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBUeXBlIGd1YXJkIG5hcnJvd3MgdGhlIGlucHV0IHR5cGUgdG8gYSBzdHJpbmcta2V5ZWQgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdChpbnB1dDogYW55KTogaW5wdXQgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGlucHV0KSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIjtcbn1cbiIsCiAgICAiaW1wb3J0IHNqcyBmcm9tIFwic2VjdXJlLWpzb24tcGFyc2VcIjtcblxuLyoqXG4gKiBTYWZlbHkgcGFyc2VzIEpTT04gaW5wdXQgdXNpbmcgc2VjdXJlLWpzb24tcGFyc2Ugd2l0aCBwcm90b3R5cGUgcG9sbHV0aW9uIHByb3RlY3Rpb24uXG4gKiBAcGFyYW0ge2FueX0gaW5wdXQgLSBUaGUgaW5wdXQgdG8gYmUgcGFyc2VkIGFzIEpTT05cbiAqIEByZXR1cm5zIHt7IHZhbHVlPzogYW55LCBlcnI/OiBFcnJvciB9fSBBbiBvYmplY3QgY29udGFpbmluZyBlaXRoZXIgdGhlIHBhcnNlZCB2YWx1ZSBvciBhbiBlcnJvciBpZiBwYXJzaW5nIGZhaWxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvblBhcnNlcihpbnB1dDogYW55KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHNqcy5wYXJzZShpbnB1dCwgeyBwcm90b0FjdGlvbjogXCJyZW1vdmVcIiB9KSB9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4geyBlcnIgfTtcbiAgfVxufVxuIiwKICAgICIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90M2RvdGdnL2E0ODZjNGFlNjZkMzJiZjE3YzA5YzczNjA5ZGFjYzViXG4vLyBUeXBlcyBmb3IgdGhlIHJlc3VsdCBvYmplY3Qgd2l0aCBkaXNjcmltaW5hdGVkIHVuaW9uXG4vLyB0eXBlIFN1Y2Nlc3M8VD4gPSB7XG4vLyAgIGRhdGE6IFQ7XG4vLyAgIGVycm9yOiBudWxsO1xuLy8gfTtcblxuLy8gdHlwZSBGYWlsdXJlPEU+ID0ge1xuLy8gICBkYXRhOiBudWxsO1xuLy8gICBlcnJvcjogRTtcbi8vIH07XG5cbi8vIGV4cG9ydCB0eXBlIFJlc3VsdDxULCBFID0gRXJyb3I+ID0gU3VjY2VzczxUPiB8IEZhaWx1cmU8RT47XG5cbmV4cG9ydCB0eXBlIFJlc3VsdDxULCBFPiA9IFt1bmRlZmluZWQsIEVdIHwgW1QsIHVuZGVmaW5lZF07XG5leHBvcnQgdHlwZSBQcm9taXNlUmVzdWx0PFQsIEU+ID0gUHJvbWlzZTxSZXN1bHQ8VCwgRT4+O1xuXG4vKipcbiAqIFdyYXBzIGEgc3luY2hyb25vdXMgZnVuY3Rpb24gaW4gYSB0cnktY2F0Y2ggYmxvY2sgYW5kIHJldHVybnMgYSBSZXN1bHQgdHVwbGUgY29udGFpbmluZyBlaXRoZXIgdGhlIHJldHVybmVkIHZhbHVlIG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBzdWNjZXNzZnVsIHJlc3VsdCB2YWx1ZVxuICogQHRlbXBsYXRlIEUgLSBUaGUgdHlwZSBvZiB0aGUgZXJyb3IgdmFsdWUsIG11c3QgZXh0ZW5kIEVycm9yXG4gKiBAcGFyYW0geygpID0+IFR9IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkXG4gKiBAcmV0dXJucyB7UmVzdWx0PFQsIEU+fSBBIHR1cGxlIGNvbnRhaW5pbmcgZWl0aGVyIFtkYXRhLCB1bmRlZmluZWRdIG9yIFt1bmRlZmluZWQsIGVycm9yXVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBbZGF0YSwgZXJyb3JdID0gdHJ5Q2F0Y2goKCkgPT4gc29tZVJpc2t5T3BlcmF0aW9uKCkpO1xuICogaWYgKGVycm9yKSB7XG4gKiAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICogfSBlbHNlIHtcbiAqICAgY29uc29sZS5sb2coZGF0YSk7XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cnlDYXRjaDxULCBFIGV4dGVuZHMgRXJyb3I+KGZuOiAoKSA9PiBUKTogUmVzdWx0PFQsIEU+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gZm4oKTtcbiAgICByZXR1cm4gW2RhdGEgYXMgVCwgdW5kZWZpbmVkXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gW3VuZGVmaW5lZCwgZXJyb3IgYXMgRV07XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwcyBhIFByb21pc2UgaW4gYSB0cnktY2F0Y2ggYmxvY2sgYW5kIHJldHVybnMgYSBSZXN1bHQgb2JqZWN0IGNvbnRhaW5pbmcgZWl0aGVyIHRoZSByZXNvbHZlZCBkYXRhIG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBzdWNjZXNzZnVsIHJlc3VsdCB2YWx1ZVxuICogQHRlbXBsYXRlIEUgLSBUaGUgdHlwZSBvZiB0aGUgZXJyb3IgdmFsdWUsIGRlZmF1bHRzIHRvIEVycm9yXG4gKiBAcGFyYW0ge1Byb21pc2U8VD59IHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBiZSBleGVjdXRlZFxuICogQHJldHVybnMge1Byb21pc2U8UmVzdWx0PFQsIEU+Pn0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBSZXN1bHQgb2JqZWN0IGNvbnRhaW5pbmcgZWl0aGVyIHRoZSBkYXRhIG9yIGVycm9yXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHtkYXRhLCBlcnJvcn0gPSBhd2FpdCB0cnlDYXRjaEFzeW5jKHNvbWVQcm9taXNlKTtcbiAqIGlmIChlcnJvcikge1xuICogICBjb25zb2xlLmVycm9yKHJlc3VsdC5lcnJvcik7XG4gKiB9IGVsc2Uge1xuICogICBjb25zb2xlLmxvZyhkYXRhKTtcbiAqIH1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyeUNhdGNoQXN5bmM8VCwgRSBleHRlbmRzIEVycm9yPihwcm9taXNlOiBQcm9taXNlPFQ+KTogUHJvbWlzZVJlc3VsdDxULCBFPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHByb21pc2U7XG4gICAgcmV0dXJuIFtkYXRhIGFzIFQsIHVuZGVmaW5lZF07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFt1bmRlZmluZWQsIGVycm9yIGFzIEVdO1xuICB9XG59XG4iLAogICAgImV4cG9ydCBjb25zdCBpc051bGxPclVuZGVmaW5lZCA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCA9PiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eU9yVW5kZWZpbmVkKHZhbHVlPzogYW55IHwgbnVsbCk6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS50b1N0cmluZygpLnRyaW0oKSA9PT0gXCJcIjtcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFpQkEsZ0JBQXVCLGFBQWEsQ0FBQyxRQUE0QztBQUFBLEVBQy9FLElBQUksV0FBVztBQUFBLEVBRWYsaUJBQWlCLFNBQVMsUUFBUTtBQUFBLElBQ2hDLFlBQVk7QUFBQSxJQUNaLElBQUk7QUFBQSxJQUdKLFFBQVEsV0FBVyxTQUFTLFFBQVE7QUFBQSxDQUFJLE1BQU0sR0FBRztBQUFBLE1BRS9DLE1BQU0sT0FBTyxTQUFTLE1BQU0sR0FBRyxXQUFXLENBQUM7QUFBQSxNQUMzQyxNQUFNLE1BQU0sS0FBSyxLQUFLO0FBQUEsTUFDdEIsV0FBVyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBQUEsSUFDeEM7QUFBQSxFQUNGO0FBQUEsRUFFQSxJQUFJLFNBQVMsU0FBUyxHQUFHO0FBQUEsSUFDdkIsTUFBTTtBQUFBLEVBQ1I7QUFBQTs7QUM3QkssU0FBUyxRQUFRLENBQUMsT0FBMEM7QUFBQSxFQUNqRSxPQUFPLE9BQU8sVUFBVSxTQUFTLE1BQU0sS0FBSyxNQUFNO0FBQUE7O0FDUHBEO0FBT08sU0FBUyxVQUFVLENBQUMsT0FBWTtBQUFBLEVBQ3JDLElBQUk7QUFBQSxJQUNGLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxPQUFPLEVBQUUsYUFBYSxTQUFTLENBQUMsRUFBRTtBQUFBLElBQzVELE9BQU8sS0FBSztBQUFBLElBQ1osT0FBTyxFQUFFLElBQUk7QUFBQTtBQUFBOztBQ3NCVixTQUFTLFFBQTRCLENBQUMsSUFBMkI7QUFBQSxFQUN0RSxJQUFJO0FBQUEsSUFDRixNQUFNLE9BQU8sR0FBRztBQUFBLElBQ2hCLE9BQU8sQ0FBQyxNQUFXLFNBQVM7QUFBQSxJQUM1QixPQUFPLE9BQU87QUFBQSxJQUNkLE9BQU8sQ0FBQyxXQUFXLEtBQVU7QUFBQTtBQUFBO0FBb0JqQyxlQUFzQixhQUFpQyxDQUFDLFNBQTBDO0FBQUEsRUFDaEcsSUFBSTtBQUFBLElBQ0YsTUFBTSxPQUFPLE1BQU07QUFBQSxJQUNuQixPQUFPLENBQUMsTUFBVyxTQUFTO0FBQUEsSUFDNUIsT0FBTyxPQUFPO0FBQUEsSUFDZCxPQUFPLENBQUMsV0FBVyxLQUFVO0FBQUE7QUFBQTs7QUMvRDFCLElBQU0sb0JBQW9CLENBQUMsVUFBMEMsVUFBVSxRQUFRLFVBQVU7QUFFakcsU0FBUyx3QkFBd0IsQ0FBQyxPQUErQztBQUFBLEVBQ3RGLE9BQU8sVUFBVSxhQUFhLFVBQVUsUUFBUSxVQUFVLE1BQU0sTUFBTSxTQUFTLEVBQUUsS0FBSyxNQUFNO0FBQUE7IiwKICAiZGVidWdJZCI6ICIyRjFEMjE2QzNENUM3NTFENjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
@@ -0,0 +1,2 @@
1
+ export declare const isNullOrUndefined: (value: any) => value is null | undefined;
2
+ export declare function isNullOrEmptyOrUndefined(value?: any | null): value is null | undefined;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Type guard that checks if the input is a plain JavaScript object.
3
+ * @param {any} input - The value to check
4
+ * @returns {boolean} True if the input is a plain object, false otherwise
5
+ * @typeParam {Record<string, any>} Type guard narrows the input type to a string-keyed object
6
+ */
7
+ export declare function isObject(input: any): input is Record<string, any>;
@@ -0,0 +1 @@
1
+ export declare function isPrimitive(value: unknown): boolean;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Safely parses JSON input using secure-json-parse with prototype pollution protection.
3
+ * @param {any} input - The input to be parsed as JSON
4
+ * @returns {{ value?: any, err?: Error }} An object containing either the parsed value or an error if parsing failed
5
+ */
6
+ export declare function jsonParser(input: any): {
7
+ value: any;
8
+ err?: undefined;
9
+ } | {
10
+ err: unknown;
11
+ value?: undefined;
12
+ };
@@ -0,0 +1,69 @@
1
+ var __create = Object.create;
2
+ var __getProtoOf = Object.getPrototypeOf;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
18
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
19
+ var __toCommonJS = (from) => {
20
+ var entry = __moduleCache.get(from), desc;
21
+ if (entry)
22
+ return entry;
23
+ entry = __defProp({}, "__esModule", { value: true });
24
+ if (from && typeof from === "object" || typeof from === "function")
25
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
26
+ get: () => from[key],
27
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
28
+ }));
29
+ __moduleCache.set(from, entry);
30
+ return entry;
31
+ };
32
+ var __export = (target, all) => {
33
+ for (var name in all)
34
+ __defProp(target, name, {
35
+ get: all[name],
36
+ enumerable: true,
37
+ configurable: true,
38
+ set: (newValue) => all[name] = () => newValue
39
+ });
40
+ };
41
+
42
+ // src/neverthrow/index.ts
43
+ var exports_neverthrow = {};
44
+ __export(exports_neverthrow, {
45
+ tryCatchAsync: () => tryCatchAsync,
46
+ tryCatch: () => tryCatch
47
+ });
48
+ module.exports = __toCommonJS(exports_neverthrow);
49
+
50
+ // src/neverthrow/tryCatch.ts
51
+ function tryCatch(fn) {
52
+ try {
53
+ const data = fn();
54
+ return [data, undefined];
55
+ } catch (error) {
56
+ return [undefined, error];
57
+ }
58
+ }
59
+ async function tryCatchAsync(promise) {
60
+ try {
61
+ const data = await promise;
62
+ return [data, undefined];
63
+ } catch (error) {
64
+ return [undefined, error];
65
+ }
66
+ }
67
+
68
+ //# debugId=E33DF9FD309B2CCD64756E2164756E21
69
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25ldmVydGhyb3cvdHJ5Q2F0Y2gudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdDNkb3RnZy9hNDg2YzRhZTY2ZDMyYmYxN2MwOWM3MzYwOWRhY2M1YlxuLy8gVHlwZXMgZm9yIHRoZSByZXN1bHQgb2JqZWN0IHdpdGggZGlzY3JpbWluYXRlZCB1bmlvblxuLy8gdHlwZSBTdWNjZXNzPFQ+ID0ge1xuLy8gICBkYXRhOiBUO1xuLy8gICBlcnJvcjogbnVsbDtcbi8vIH07XG5cbi8vIHR5cGUgRmFpbHVyZTxFPiA9IHtcbi8vICAgZGF0YTogbnVsbDtcbi8vICAgZXJyb3I6IEU7XG4vLyB9O1xuXG4vLyBleHBvcnQgdHlwZSBSZXN1bHQ8VCwgRSA9IEVycm9yPiA9IFN1Y2Nlc3M8VD4gfCBGYWlsdXJlPEU+O1xuXG5leHBvcnQgdHlwZSBSZXN1bHQ8VCwgRT4gPSBbdW5kZWZpbmVkLCBFXSB8IFtULCB1bmRlZmluZWRdO1xuZXhwb3J0IHR5cGUgUHJvbWlzZVJlc3VsdDxULCBFPiA9IFByb21pc2U8UmVzdWx0PFQsIEU+PjtcblxuLyoqXG4gKiBXcmFwcyBhIHN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGEgdHJ5LWNhdGNoIGJsb2NrIGFuZCByZXR1cm5zIGEgUmVzdWx0IHR1cGxlIGNvbnRhaW5pbmcgZWl0aGVyIHRoZSByZXR1cm5lZCB2YWx1ZSBvciB0aGUgY2F1Z2h0IGVycm9yXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgc3VjY2Vzc2Z1bCByZXN1bHQgdmFsdWVcbiAqIEB0ZW1wbGF0ZSBFIC0gVGhlIHR5cGUgb2YgdGhlIGVycm9yIHZhbHVlLCBtdXN0IGV4dGVuZCBFcnJvclxuICogQHBhcmFtIHsoKSA9PiBUfSBmbiAtIFRoZSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZFxuICogQHJldHVybnMge1Jlc3VsdDxULCBFPn0gQSB0dXBsZSBjb250YWluaW5nIGVpdGhlciBbZGF0YSwgdW5kZWZpbmVkXSBvciBbdW5kZWZpbmVkLCBlcnJvcl1cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgW2RhdGEsIGVycm9yXSA9IHRyeUNhdGNoKCgpID0+IHNvbWVSaXNreU9wZXJhdGlvbigpKTtcbiAqIGlmIChlcnJvcikge1xuICogICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ5Q2F0Y2g8VCwgRSBleHRlbmRzIEVycm9yPihmbjogKCkgPT4gVCk6IFJlc3VsdDxULCBFPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IGZuKCk7XG4gICAgcmV0dXJuIFtkYXRhIGFzIFQsIHVuZGVmaW5lZF07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFt1bmRlZmluZWQsIGVycm9yIGFzIEVdO1xuICB9XG59XG5cbi8qKlxuICogV3JhcHMgYSBQcm9taXNlIGluIGEgdHJ5LWNhdGNoIGJsb2NrIGFuZCByZXR1cm5zIGEgUmVzdWx0IG9iamVjdCBjb250YWluaW5nIGVpdGhlciB0aGUgcmVzb2x2ZWQgZGF0YSBvciB0aGUgY2F1Z2h0IGVycm9yXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgc3VjY2Vzc2Z1bCByZXN1bHQgdmFsdWVcbiAqIEB0ZW1wbGF0ZSBFIC0gVGhlIHR5cGUgb2YgdGhlIGVycm9yIHZhbHVlLCBkZWZhdWx0cyB0byBFcnJvclxuICogQHBhcmFtIHtQcm9taXNlPFQ+fSBwcm9taXNlIC0gVGhlIHByb21pc2UgdG8gYmUgZXhlY3V0ZWRcbiAqIEByZXR1cm5zIHtQcm9taXNlPFJlc3VsdDxULCBFPj59IEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgUmVzdWx0IG9iamVjdCBjb250YWluaW5nIGVpdGhlciB0aGUgZGF0YSBvciBlcnJvclxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7ZGF0YSwgZXJyb3J9ID0gYXdhaXQgdHJ5Q2F0Y2hBc3luYyhzb21lUHJvbWlzZSk7XG4gKiBpZiAoZXJyb3IpIHtcbiAqICAgY29uc29sZS5lcnJvcihyZXN1bHQuZXJyb3IpO1xuICogfSBlbHNlIHtcbiAqICAgY29uc29sZS5sb2coZGF0YSk7XG4gKiB9XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cnlDYXRjaEFzeW5jPFQsIEUgZXh0ZW5kcyBFcnJvcj4ocHJvbWlzZTogUHJvbWlzZTxUPik6IFByb21pc2VSZXN1bHQ8VCwgRT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwcm9taXNlO1xuICAgIHJldHVybiBbZGF0YSBhcyBULCB1bmRlZmluZWRdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBbdW5kZWZpbmVkLCBlcnJvciBhcyBFXTtcbiAgfVxufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQ08sU0FBUyxRQUE0QixDQUFDLElBQTJCO0FBQUEsRUFDdEUsSUFBSTtBQUFBLElBQ0YsTUFBTSxPQUFPLEdBQUc7QUFBQSxJQUNoQixPQUFPLENBQUMsTUFBVyxTQUFTO0FBQUEsSUFDNUIsT0FBTyxPQUFPO0FBQUEsSUFDZCxPQUFPLENBQUMsV0FBVyxLQUFVO0FBQUE7QUFBQTtBQW9CakMsZUFBc0IsYUFBaUMsQ0FBQyxTQUEwQztBQUFBLEVBQ2hHLElBQUk7QUFBQSxJQUNGLE1BQU0sT0FBTyxNQUFNO0FBQUEsSUFDbkIsT0FBTyxDQUFDLE1BQVcsU0FBUztBQUFBLElBQzVCLE9BQU8sT0FBTztBQUFBLElBQ2QsT0FBTyxDQUFDLFdBQVcsS0FBVTtBQUFBO0FBQUE7IiwKICAiZGVidWdJZCI6ICJFMzNERjlGRDMwOUIyQ0NENjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
@@ -0,0 +1 @@
1
+ export * from "./tryCatch.ts";
@@ -0,0 +1,24 @@
1
+ // src/neverthrow/tryCatch.ts
2
+ function tryCatch(fn) {
3
+ try {
4
+ const data = fn();
5
+ return [data, undefined];
6
+ } catch (error) {
7
+ return [undefined, error];
8
+ }
9
+ }
10
+ async function tryCatchAsync(promise) {
11
+ try {
12
+ const data = await promise;
13
+ return [data, undefined];
14
+ } catch (error) {
15
+ return [undefined, error];
16
+ }
17
+ }
18
+ export {
19
+ tryCatchAsync,
20
+ tryCatch
21
+ };
22
+
23
+ //# debugId=5E0040E9752F227C64756E2164756E21
24
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25ldmVydGhyb3cvdHJ5Q2F0Y2gudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdDNkb3RnZy9hNDg2YzRhZTY2ZDMyYmYxN2MwOWM3MzYwOWRhY2M1YlxuLy8gVHlwZXMgZm9yIHRoZSByZXN1bHQgb2JqZWN0IHdpdGggZGlzY3JpbWluYXRlZCB1bmlvblxuLy8gdHlwZSBTdWNjZXNzPFQ+ID0ge1xuLy8gICBkYXRhOiBUO1xuLy8gICBlcnJvcjogbnVsbDtcbi8vIH07XG5cbi8vIHR5cGUgRmFpbHVyZTxFPiA9IHtcbi8vICAgZGF0YTogbnVsbDtcbi8vICAgZXJyb3I6IEU7XG4vLyB9O1xuXG4vLyBleHBvcnQgdHlwZSBSZXN1bHQ8VCwgRSA9IEVycm9yPiA9IFN1Y2Nlc3M8VD4gfCBGYWlsdXJlPEU+O1xuXG5leHBvcnQgdHlwZSBSZXN1bHQ8VCwgRT4gPSBbdW5kZWZpbmVkLCBFXSB8IFtULCB1bmRlZmluZWRdO1xuZXhwb3J0IHR5cGUgUHJvbWlzZVJlc3VsdDxULCBFPiA9IFByb21pc2U8UmVzdWx0PFQsIEU+PjtcblxuLyoqXG4gKiBXcmFwcyBhIHN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGEgdHJ5LWNhdGNoIGJsb2NrIGFuZCByZXR1cm5zIGEgUmVzdWx0IHR1cGxlIGNvbnRhaW5pbmcgZWl0aGVyIHRoZSByZXR1cm5lZCB2YWx1ZSBvciB0aGUgY2F1Z2h0IGVycm9yXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgc3VjY2Vzc2Z1bCByZXN1bHQgdmFsdWVcbiAqIEB0ZW1wbGF0ZSBFIC0gVGhlIHR5cGUgb2YgdGhlIGVycm9yIHZhbHVlLCBtdXN0IGV4dGVuZCBFcnJvclxuICogQHBhcmFtIHsoKSA9PiBUfSBmbiAtIFRoZSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZFxuICogQHJldHVybnMge1Jlc3VsdDxULCBFPn0gQSB0dXBsZSBjb250YWluaW5nIGVpdGhlciBbZGF0YSwgdW5kZWZpbmVkXSBvciBbdW5kZWZpbmVkLCBlcnJvcl1cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgW2RhdGEsIGVycm9yXSA9IHRyeUNhdGNoKCgpID0+IHNvbWVSaXNreU9wZXJhdGlvbigpKTtcbiAqIGlmIChlcnJvcikge1xuICogICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ5Q2F0Y2g8VCwgRSBleHRlbmRzIEVycm9yPihmbjogKCkgPT4gVCk6IFJlc3VsdDxULCBFPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IGZuKCk7XG4gICAgcmV0dXJuIFtkYXRhIGFzIFQsIHVuZGVmaW5lZF07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFt1bmRlZmluZWQsIGVycm9yIGFzIEVdO1xuICB9XG59XG5cbi8qKlxuICogV3JhcHMgYSBQcm9taXNlIGluIGEgdHJ5LWNhdGNoIGJsb2NrIGFuZCByZXR1cm5zIGEgUmVzdWx0IG9iamVjdCBjb250YWluaW5nIGVpdGhlciB0aGUgcmVzb2x2ZWQgZGF0YSBvciB0aGUgY2F1Z2h0IGVycm9yXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgc3VjY2Vzc2Z1bCByZXN1bHQgdmFsdWVcbiAqIEB0ZW1wbGF0ZSBFIC0gVGhlIHR5cGUgb2YgdGhlIGVycm9yIHZhbHVlLCBkZWZhdWx0cyB0byBFcnJvclxuICogQHBhcmFtIHtQcm9taXNlPFQ+fSBwcm9taXNlIC0gVGhlIHByb21pc2UgdG8gYmUgZXhlY3V0ZWRcbiAqIEByZXR1cm5zIHtQcm9taXNlPFJlc3VsdDxULCBFPj59IEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgUmVzdWx0IG9iamVjdCBjb250YWluaW5nIGVpdGhlciB0aGUgZGF0YSBvciBlcnJvclxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7ZGF0YSwgZXJyb3J9ID0gYXdhaXQgdHJ5Q2F0Y2hBc3luYyhzb21lUHJvbWlzZSk7XG4gKiBpZiAoZXJyb3IpIHtcbiAqICAgY29uc29sZS5lcnJvcihyZXN1bHQuZXJyb3IpO1xuICogfSBlbHNlIHtcbiAqICAgY29uc29sZS5sb2coZGF0YSk7XG4gKiB9XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cnlDYXRjaEFzeW5jPFQsIEUgZXh0ZW5kcyBFcnJvcj4ocHJvbWlzZTogUHJvbWlzZTxUPik6IFByb21pc2VSZXN1bHQ8VCwgRT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwcm9taXNlO1xuICAgIHJldHVybiBbZGF0YSBhcyBULCB1bmRlZmluZWRdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBbdW5kZWZpbmVkLCBlcnJvciBhcyBFXTtcbiAgfVxufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQWlDTyxTQUFTLFFBQTRCLENBQUMsSUFBMkI7QUFBQSxFQUN0RSxJQUFJO0FBQUEsSUFDRixNQUFNLE9BQU8sR0FBRztBQUFBLElBQ2hCLE9BQU8sQ0FBQyxNQUFXLFNBQVM7QUFBQSxJQUM1QixPQUFPLE9BQU87QUFBQSxJQUNkLE9BQU8sQ0FBQyxXQUFXLEtBQVU7QUFBQTtBQUFBO0FBb0JqQyxlQUFzQixhQUFpQyxDQUFDLFNBQTBDO0FBQUEsRUFDaEcsSUFBSTtBQUFBLElBQ0YsTUFBTSxPQUFPLE1BQU07QUFBQSxJQUNuQixPQUFPLENBQUMsTUFBVyxTQUFTO0FBQUEsSUFDNUIsT0FBTyxPQUFPO0FBQUEsSUFDZCxPQUFPLENBQUMsV0FBVyxLQUFVO0FBQUE7QUFBQTsiLAogICJkZWJ1Z0lkIjogIjVFMDA0MEU5NzUyRjIyN0M2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
@@ -0,0 +1,36 @@
1
+ export type Result<T, E> = [undefined, E] | [T, undefined];
2
+ export type PromiseResult<T, E> = Promise<Result<T, E>>;
3
+ /**
4
+ * Wraps a synchronous function in a try-catch block and returns a Result tuple containing either the returned value or the caught error
5
+ *
6
+ * @template T - The type of the successful result value
7
+ * @template E - The type of the error value, must extend Error
8
+ * @param {() => T} fn - The function to be executed
9
+ * @returns {Result<T, E>} A tuple containing either [data, undefined] or [undefined, error]
10
+ *
11
+ * @example
12
+ * const [data, error] = tryCatch(() => someRiskyOperation());
13
+ * if (error) {
14
+ * console.error(error);
15
+ * } else {
16
+ * console.log(data);
17
+ * }
18
+ */
19
+ export declare function tryCatch<T, E extends Error>(fn: () => T): Result<T, E>;
20
+ /**
21
+ * Wraps a Promise in a try-catch block and returns a Result object containing either the resolved data or the caught error
22
+ *
23
+ * @template T - The type of the successful result value
24
+ * @template E - The type of the error value, defaults to Error
25
+ * @param {Promise<T>} promise - The promise to be executed
26
+ * @returns {Promise<Result<T, E>>} A Promise that resolves to a Result object containing either the data or error
27
+ *
28
+ * @example
29
+ * const {data, error} = await tryCatchAsync(somePromise);
30
+ * if (error) {
31
+ * console.error(result.error);
32
+ * } else {
33
+ * console.log(data);
34
+ * }
35
+ */
36
+ export declare function tryCatchAsync<T, E extends Error>(promise: Promise<T>): PromiseResult<T, E>;
@@ -0,0 +1 @@
1
+ export declare function randomString(length?: number): string;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Reads data from standard input (stdin) asynchronously until the stream ends.
3
+ * @returns {Promise<string>} A promise that resolves with the complete string of data read from stdin.
4
+ */
5
+ export declare function readStdinAsync(): Promise<string>;
6
+ /**
7
+ * Creates an async generator that yields chunks from an async iterable source.
8
+ * @param chunks - An async iterable source of string or Uint8Array chunks
9
+ * @yields {string | Uint8Array} Each chunk from the input source
10
+ * @returns {AsyncGenerator<string | Uint8Array, void, unknown>} An async generator that yields the input chunks
11
+ */
12
+ export declare function readStdin(chunks: AsyncIterable<string | Uint8Array>): AsyncGenerator<string | Uint8Array, void, unknown>;
@@ -0,0 +1,16 @@
1
+ /** biome-ignore-all lint/complexity/noBannedTypes: a */
2
+ export type FunctionPropertyNames<T> = {
3
+ [K in keyof T]: T[K] extends Function ? K : never;
4
+ }[keyof T];
5
+ export type NonFunctionPropertyNames<T> = {
6
+ [K in keyof T]: T[K] extends Function ? never : K;
7
+ }[keyof T];
8
+ export type NonFunctionProperties<T> = Pick<T, NonFunctionPropertyNames<T>>;
9
+ export type ClassConstructor<T> = {
10
+ new (): T;
11
+ };
12
+ export type Self<T> = ClassConstructor<T>;
13
+ export type AnyObject = {
14
+ [key: string]: any;
15
+ };
16
+ export type AnyType = string | number | boolean | AnyObject;
package/package.json ADDED
@@ -0,0 +1,91 @@
1
+ {
2
+ "name": "@lukaskj/ts-utils",
3
+ "version": "1.0.1",
4
+ "module": "src/index.ts",
5
+ "type": "module",
6
+ "scripts": {
7
+ "prepare": "husky",
8
+ "init:husky": "bunx husky init",
9
+ "build": "bun run scripts/build.ts",
10
+ "declaration": "bunx tsc -p tsconfig.build.json --outDir dist --declaration --emitDeclarationOnly",
11
+ "build:all": "rm -rf dist/ && bun run declaration && bun run scripts/build.ts",
12
+ "dev": "bun run src/index.ts",
13
+ "lint": "tsc -p . --noEmit && biome lint --write",
14
+ "format": "biome format --write",
15
+ "test:cov": "bun run test --coverage",
16
+ "test": "bun test --env-file .env.test"
17
+ },
18
+ "dependencies": {
19
+ "secure-json-parse": "^4.0.0"
20
+ },
21
+ "devDependencies": {
22
+ "@biomejs/biome": "^2.1.4",
23
+ "@faker-js/faker": "^9.9.0",
24
+ "@types/bun": "latest",
25
+ "@types/node": "^24.2.1",
26
+ "husky": "^9.1.7",
27
+ "lint-staged": "^16.1.5",
28
+ "typescript": "^5.9.2"
29
+ },
30
+ "lint-staged": {
31
+ "*.{ts,tsx}": [
32
+ "bun format",
33
+ "bun lint"
34
+ ]
35
+ },
36
+ "main": "dist/index.mjs",
37
+ "types": "dist/index.d.ts",
38
+ "exports": {
39
+ ".": {
40
+ "import": {
41
+ "default": "./dist/index.mjs",
42
+ "types": "./dist/index.d.ts"
43
+ },
44
+ "require": {
45
+ "default": "./dist/index.cjs",
46
+ "types": "./dist/index.d.ts"
47
+ }
48
+ },
49
+ "./neverthrow": {
50
+ "import": {
51
+ "default": "./dist/neverthrow/index.mjs",
52
+ "types": "./dist/neverthrow/index.d.ts"
53
+ },
54
+ "require": {
55
+ "default": "./dist/neverthrow/index.cjs",
56
+ "types": "./dist/neverthrow/index.d.ts"
57
+ }
58
+ },
59
+ "./colors": {
60
+ "import": {
61
+ "default": "./dist/colors/index.mjs",
62
+ "types": "./dist/colors/index.d.ts"
63
+ },
64
+ "require": {
65
+ "default": "./dist/colors/index.cjs",
66
+ "types": "./dist/colors/index.d.ts"
67
+ }
68
+ }
69
+ },
70
+ "bin": {
71
+ "bun-base-template": "dist/index.mjs",
72
+ "bbt": "dist/index.mjs"
73
+ },
74
+ "engines": {
75
+ "node": ">=23",
76
+ "bun": ">= 1.2.20"
77
+ },
78
+ "repository": {
79
+ "type": "git",
80
+ "url": "git+https://github.com/lukaskj/bun-base-template.git"
81
+ },
82
+ "bugs": {
83
+ "url": "https://github.com/lukaskj/bun-base-template/issues"
84
+ },
85
+ "homepage": "https://github.com/lukaskj/bun-base-template#readme",
86
+ "files": [
87
+ "dist/**/*",
88
+ "!**/test/**",
89
+ "!node_modules"
90
+ ]
91
+ }