isotropic-timeout 0.12.0 → 0.13.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.
Files changed (3) hide show
  1. package/README.md +211 -2
  2. package/lib/timeout.js +2 -2
  3. package/package.json +15 -17
package/README.md CHANGED
@@ -1,6 +1,215 @@
1
1
  # isotropic-timeout
2
- Limit the amount of time a callback function will wait to be called.
3
2
 
3
+ [![npm version](https://img.shields.io/npm/v/isotropic-timeout.svg)](https://www.npmjs.com/package/isotropic-timeout)
4
+ [![License](https://img.shields.io/npm/l/isotropic-timeout.svg)](https://github.com/ibi-group/isotropic-timeout/blob/main/LICENSE)
4
5
  ![](https://img.shields.io/badge/tests-passing-brightgreen.svg)
5
6
  ![](https://img.shields.io/badge/coverage-100%25-brightgreen.svg)
6
- ![](https://img.shields.io/badge/license-BSD--3-blue.svg)
7
+
8
+ A utility that limits the amount of time a callback function will wait to be called or a promise will wait to be resolved/rejected.
9
+
10
+ ## Why Use This?
11
+
12
+ - **Prevent Indefinite Waiting**: Set maximum wait times for asynchronous operations
13
+ - **Dual API Support**: Works with both callbacks and promises
14
+ - **Error Handling**: Provides standardized timeout errors
15
+ - **Late Response Handling**: Option to handle responses that arrive after timeout
16
+ - **Simplified Syntax**: Clean, concise API for common timeout patterns
17
+ - **Zero Dependencies**: Lightweight implementation with minimal external requirements
18
+
19
+ ## Installation
20
+
21
+ ```bash
22
+ npm install isotropic-timeout
23
+ ```
24
+
25
+ ## Usage
26
+
27
+ ### With Callback Functions
28
+
29
+ ```javascript
30
+ import _timeout from 'isotropic-timeout';
31
+
32
+ {
33
+ // Create a time-limited callback function
34
+ const timeLimitedCallback = _timeout(
35
+ 5000, // Timeout in milliseconds
36
+ (error, result) => { // Main callback
37
+ if (error) {
38
+ console.error('Operation failed or timed out:', error);
39
+
40
+ return;
41
+ }
42
+
43
+ console.log('Operation succeeded:', result);
44
+ },
45
+ (error, result) => { // Optional late callback (called if response arrives after timeout)
46
+ console.log('Late response received:', error || result);
47
+ }
48
+ );
49
+
50
+ // Pass the time-limited callback to an async operation
51
+ someAsyncOperation(timeLimitedCallback);
52
+ }
53
+ ```
54
+
55
+ ### With Promises
56
+
57
+ ```javascript
58
+ import _timeout from 'isotropic-timeout';
59
+
60
+ // Wrap a promise with a timeout
61
+ const _fetchWithTimeout = async url {
62
+ try {
63
+ const response = await timeout(
64
+ 5000, // Timeout in milliseconds
65
+ fetch(url), // Promise to wrap
66
+ (error, result) => { // Optional late callback
67
+ console.log('Late response:', error || result);
68
+ }
69
+ );
70
+
71
+ return response.json();
72
+ } catch (error) {
73
+ if (error.name === 'TimeoutError') {
74
+ console.error('Request timed out');
75
+ } else {
76
+ console.error('Request failed:', error);
77
+ }
78
+
79
+ throw error;
80
+ }
81
+ };
82
+ ```
83
+
84
+ ## API
85
+
86
+ ### timeout(milliseconds, callbackFunctionOrPromise, lateCallbackFunction)
87
+
88
+ A function that applies a timeout to a callback function or promise.
89
+
90
+ #### Parameters
91
+
92
+ - `milliseconds` (Number): The timeout duration in milliseconds
93
+ - `callbackFunctionOrPromise` (Function|Promise):
94
+ - If a function: The callback to be wrapped with timeout functionality
95
+ - If a promise: The promise to be wrapped with timeout functionality
96
+ - `lateCallbackFunction` (Function, optional): Function to be called if the original operation completes after timeout
97
+
98
+ #### Returns
99
+
100
+ - If `callbackFunctionOrPromise` is a function: Returns a wrapped function that will either call the original callback or trigger a timeout error
101
+ - If `callbackFunctionOrPromise` is a promise: Returns a new promise that will either resolve/reject with the original promise or reject with a timeout error
102
+
103
+ ## Examples
104
+
105
+ ### Working with Node.js Callbacks
106
+
107
+ ```javascript
108
+ import _fs from 'node:fs';
109
+ import _timeout from 'isotropic-timeout';
110
+
111
+ // Create a file read operation with a 2-second timeout
112
+ _fs.readFile(filepath, 'utf8', _timeout(2000, (error, data) => {
113
+ if (error) {
114
+ if (error.name === 'TimeoutError') {
115
+ console.error('File read timed out');
116
+ } else {
117
+ console.error('File read error:', error);
118
+ }
119
+
120
+ return;
121
+ }
122
+
123
+ console.log('File contents:', data);
124
+ }));
125
+ ```
126
+
127
+ ### HTTP Request with Timeout
128
+
129
+ ```javascript
130
+ import _https from 'node:https';
131
+ import _timeout from 'isotropic-timeout';
132
+
133
+ const _httpsGet = url => new Promise((resolve, reject) => {
134
+ _https.get(url, response => {
135
+ const chunks = [];
136
+
137
+ response.on('data', chunk => {
138
+ chunks.push(chunk);
139
+ });
140
+
141
+ response.on('end', () => {
142
+ resolve(chunks.join(''));
143
+ });
144
+ }).on('error', reject);
145
+ });
146
+
147
+ // Add a 3-second timeout to the HTTP request
148
+ _timeout(3000, _httpsGet('https://api.example.com/data')).then(data => {
149
+ data = JSON.parse(data);
150
+
151
+ console.log('Data received:', data);
152
+ }).catch(error => {
153
+ if (error.name === 'TimeoutError') {
154
+ console.error('Request timed out after 3 seconds');
155
+ } else {
156
+ console.error('Request failed:', error);
157
+ }
158
+ });
159
+ ```
160
+
161
+ ### Database Query with Timeout
162
+
163
+ ```javascript
164
+ import _createConnection from 'some-db-library';
165
+ import _timeout from 'isotropic-timeout';
166
+
167
+ const _queryWithTimeout = (db, query, params, timeout = 5000) => {
168
+ return _timeout(
169
+ timeout,
170
+ db.query(query, params),
171
+ (error, results) => {
172
+ // Log late responses for debugging
173
+ if (error) {
174
+ console.log(`Query failed after timeout: ${query}`, error);
175
+ } else {
176
+ console.log(`Query succeeded after timeout: ${query} (${results.length} results)`);
177
+ }
178
+ }
179
+ );
180
+ };
181
+
182
+ {
183
+ const db = _createConnection({ /* connection options */ });
184
+
185
+ try {
186
+ const userData = await _queryWithTimeout(db, 'SELECT * FROM users WHERE id = ?', [
187
+ userId
188
+ ]);
189
+ } catch (error) {
190
+ if (error.name === 'TimeoutError') {
191
+ console.error('Database query timed out - server might be overloaded');
192
+ }
193
+
194
+ throw error;
195
+ }
196
+ }
197
+ ```
198
+
199
+ ## Error Handling
200
+
201
+ When a timeout occurs, the utility generates a standardized `TimeoutError` (an instance of `isotropic-error`) with:
202
+
203
+ - `details`: Object containing the timeout duration
204
+ - `message`: 'Timeout after X milliseconds'
205
+ - `name`: 'TimeoutError'
206
+
207
+ This makes error handling and identification consistent across your application.
208
+
209
+ ## Contributing
210
+
211
+ Please refer to [CONTRIBUTING.md](https://github.com/ibi-group/isotropic-timeout/blob/main/CONTRIBUTING.md) for contribution guidelines.
212
+
213
+ ## Issues
214
+
215
+ If you encounter any issues, please file them at https://github.com/ibi-group/isotropic-timeout/issues
package/lib/timeout.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _isotropicError=_interopRequireDefault(require("isotropic-error")),_isotropicLater=_interopRequireDefault(require("isotropic-later"));function _interopRequireDefault(a){return a&&a.__esModule?a:{default:a}}var _default=(a,b,c)=>{if("function"==typeof b){const d=(0,_isotropicLater.default)(a,()=>{b((0,_isotropicError.default)({details:{milliseconds:a},message:`Timeout after ${a} milliseconds`,name:"TimeoutError"}))});return function(...a){return d.completed?c?Reflect.apply(c,this,a):void 0:(d.cancel(),Reflect.apply(b,this,a))}}return new Promise((d,e)=>{const f=(0,_isotropicLater.default)(a,()=>{e((0,_isotropicError.default)({details:{milliseconds:a},message:`Timeout after ${a} milliseconds`,name:"TimeoutError"}))});b.then(a=>{f.completed?c&&c(null,a):(f.cancel(),d(a))},a=>{f.completed?c&&c(a):(f.cancel(),e(a))})})};exports.default=_default;
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2pzL3RpbWVvdXQuanMiXSwibmFtZXMiOlsibWlsbGlzZWNvbmRzIiwiY2FsbGJhY2tGdW5jdGlvbk9yUHJvbWlzZSIsImxhdGVDYWxsYmFja0Z1bmN0aW9uIiwiaGFuZGxlIiwiZGV0YWlscyIsIm1lc3NhZ2UiLCJuYW1lIiwiYXJncyIsImNvbXBsZXRlZCIsIlJlZmxlY3QiLCJhcHBseSIsImNhbmNlbCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwidGhlbiIsInZhbHVlIiwiZXJyb3IiXSwibWFwcGluZ3MiOiIwVEFHZSxDQUFDQSxDQUFELENBQWVDLENBQWYsQ0FBMENDLENBQTFDLEdBQW1FLENBQzlFLEdBQXlDLFVBQXJDLFFBQU9ELENBQUFBLENBQVgsQ0FBcUQsQ0FDakQsS0FBTUUsQ0FBQUEsQ0FBTSxDQUFHLDRCQUFPSCxDQUFQLENBQXFCLElBQU0sQ0FDdENDLENBQXlCLENBQUMsNEJBQU8sQ0FDN0JHLE9BQU8sQ0FBRSxDQUNMSixZQUFZLENBQVpBLENBREssQ0FEb0IsQ0FJN0JLLE9BQU8sQ0FBRyxpQkFBZ0JMLENBQWEsZUFKVixDQUs3Qk0sSUFBSSxDQUFFLGNBTHVCLENBQVAsQ0FBRCxDQU81QixDQVJjLENBQWYsQ0FVQSxNQUFPLFVBQVUsR0FBR0MsQ0FBYixDQUFtQixPQUNqQkosQ0FBQUEsQ0FBTSxDQUFDSyxTQURVLENBTWxCTixDQU5rQixDQU9YTyxPQUFPLENBQUNDLEtBQVIsQ0FBY1IsQ0FBZCxDQUFvQyxJQUFwQyxDQUEwQ0ssQ0FBMUMsQ0FQVyxTQUVsQkosQ0FBTSxDQUFDUSxNQUFQLEVBRmtCLENBR1hGLE9BQU8sQ0FBQ0MsS0FBUixDQUFjVCxDQUFkLENBQXlDLElBQXpDLENBQStDTSxDQUEvQyxDQUhXLENBU3pCLENBQ0osQ0FFRCxNQUFPLElBQUlLLENBQUFBLE9BQUosQ0FBWSxDQUFDQyxDQUFELENBQVVDLENBQVYsR0FBcUIsQ0FDcEMsS0FBTVgsQ0FBQUEsQ0FBTSxDQUFHLDRCQUFPSCxDQUFQLENBQXFCLElBQU0sQ0FDdENjLENBQU0sQ0FBQyw0QkFBTyxDQUNWVixPQUFPLENBQUUsQ0FDTEosWUFBWSxDQUFaQSxDQURLLENBREMsQ0FJVkssT0FBTyxDQUFHLGlCQUFnQkwsQ0FBYSxlQUo3QixDQUtWTSxJQUFJLENBQUUsY0FMSSxDQUFQLENBQUQsQ0FPVCxDQVJjLENBQWYsQ0FVQUwsQ0FBeUIsQ0FBQ2MsSUFBMUIsQ0FBK0JDLENBQUssRUFBSSxDQUMvQmIsQ0FBTSxDQUFDSyxTQUR3QixDQUl6Qk4sQ0FKeUIsRUFLaENBLENBQW9CLENBQUMsSUFBRCxDQUFPYyxDQUFQLENBTFksRUFFaENiLENBQU0sQ0FBQ1EsTUFBUCxFQUZnQyxDQUdoQ0UsQ0FBTyxDQUFDRyxDQUFELENBSHlCLENBT3ZDLENBUEQsQ0FPR0MsQ0FBSyxFQUFJLENBQ0hkLENBQU0sQ0FBQ0ssU0FESixDQUlHTixDQUpILEVBS0pBLENBQW9CLENBQUNlLENBQUQsQ0FMaEIsRUFFSmQsQ0FBTSxDQUFDUSxNQUFQLEVBRkksQ0FHSkcsQ0FBTSxDQUFDRyxDQUFELENBSEYsQ0FPWCxDQWRELENBZUgsQ0ExQk0sQ0EyQlYsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfRXJyb3IgZnJvbSAnaXNvdHJvcGljLWVycm9yJztcbmltcG9ydCBfbGF0ZXIgZnJvbSAnaXNvdHJvcGljLWxhdGVyJztcblxuZXhwb3J0IGRlZmF1bHQgKG1pbGxpc2Vjb25kcywgY2FsbGJhY2tGdW5jdGlvbk9yUHJvbWlzZSwgbGF0ZUNhbGxiYWNrRnVuY3Rpb24pID0+IHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRnVuY3Rpb25PclByb21pc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlID0gX2xhdGVyKG1pbGxpc2Vjb25kcywgKCkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbk9yUHJvbWlzZShfRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGRldGFpbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGltZW91dCBhZnRlciAke21pbGxpc2Vjb25kc30gbWlsbGlzZWNvbmRzYCxcbiAgICAgICAgICAgICAgICBuYW1lOiAnVGltZW91dEVycm9yJ1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghaGFuZGxlLmNvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgIGhhbmRsZS5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShjYWxsYmFja0Z1bmN0aW9uT3JQcm9taXNlLCB0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxhdGVDYWxsYmFja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkobGF0ZUNhbGxiYWNrRnVuY3Rpb24sIHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZSA9IF9sYXRlcihtaWxsaXNlY29uZHMsICgpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChfRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGRldGFpbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGltZW91dCBhZnRlciAke21pbGxpc2Vjb25kc30gbWlsbGlzZWNvbmRzYCxcbiAgICAgICAgICAgICAgICBuYW1lOiAnVGltZW91dEVycm9yJ1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjYWxsYmFja0Z1bmN0aW9uT3JQcm9taXNlLnRoZW4odmFsdWUgPT4ge1xuICAgICAgICAgICAgaWYgKCFoYW5kbGUuY29tcGxldGVkKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXRlQ2FsbGJhY2tGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIGxhdGVDYWxsYmFja0Z1bmN0aW9uKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgaWYgKCFoYW5kbGUuY29tcGxldGVkKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhdGVDYWxsYmFja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgbGF0ZUNhbGxiYWNrRnVuY3Rpb24oZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG4iXX0=
1
+ import _Error from"isotropic-error";import _later from"isotropic-later";export default((a,b,c)=>{if("function"==typeof b){const d=_later(a,()=>{b(_Error({details:{milliseconds:a},message:`Timeout after ${a} milliseconds`,name:"TimeoutError"}))});return function(...a){return d.completed?c?Reflect.apply(c,this,a):void 0:(d.cancel(),Reflect.apply(b,this,a))}}return new Promise((d,e)=>{const f=_later(a,()=>{e(_Error({details:{milliseconds:a},message:`Timeout after ${a} milliseconds`,name:"TimeoutError"}))});b.then(a=>{f.completed?c&&c(null,a):(f.cancel(),d(a))},a=>{f.completed?c&&c(a):(f.cancel(),e(a))})})});
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRXJyb3IiLCJfbGF0ZXIiLCJtaWxsaXNlY29uZHMiLCJjYWxsYmFja0Z1bmN0aW9uT3JQcm9taXNlIiwibGF0ZUNhbGxiYWNrRnVuY3Rpb24iLCJoYW5kbGUiLCJkZXRhaWxzIiwibWVzc2FnZSIsIm5hbWUiLCJhcmdzIiwiY29tcGxldGVkIiwiUmVmbGVjdCIsImFwcGx5IiwiY2FuY2VsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ0aGVuIiwidmFsdWUiLCJlcnJvciJdLCJzb3VyY2VzIjpbIi4uL2pzL3RpbWVvdXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9FcnJvciBmcm9tICdpc290cm9waWMtZXJyb3InO1xuaW1wb3J0IF9sYXRlciBmcm9tICdpc290cm9waWMtbGF0ZXInO1xuXG5leHBvcnQgZGVmYXVsdCAobWlsbGlzZWNvbmRzLCBjYWxsYmFja0Z1bmN0aW9uT3JQcm9taXNlLCBsYXRlQ2FsbGJhY2tGdW5jdGlvbikgPT4ge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2tGdW5jdGlvbk9yUHJvbWlzZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBoYW5kbGUgPSBfbGF0ZXIobWlsbGlzZWNvbmRzLCAoKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFja0Z1bmN0aW9uT3JQcm9taXNlKF9FcnJvcih7XG4gICAgICAgICAgICAgICAgZGV0YWlsczoge1xuICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHNcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBUaW1lb3V0IGFmdGVyICR7bWlsbGlzZWNvbmRzfSBtaWxsaXNlY29uZHNgLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdUaW1lb3V0RXJyb3InXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKCFoYW5kbGUuY29tcGxldGVkKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGNhbGxiYWNrRnVuY3Rpb25PclByb21pc2UsIHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobGF0ZUNhbGxiYWNrRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShsYXRlQ2FsbGJhY2tGdW5jdGlvbiwgdGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlID0gX2xhdGVyKG1pbGxpc2Vjb25kcywgKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KF9FcnJvcih7XG4gICAgICAgICAgICAgICAgZGV0YWlsczoge1xuICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHNcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBUaW1lb3V0IGFmdGVyICR7bWlsbGlzZWNvbmRzfSBtaWxsaXNlY29uZHNgLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdUaW1lb3V0RXJyb3InXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNhbGxiYWNrRnVuY3Rpb25PclByb21pc2UudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAoIWhhbmRsZS5jb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGUuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhdGVDYWxsYmFja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgbGF0ZUNhbGxiYWNrRnVuY3Rpb24obnVsbCwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoIWhhbmRsZS5jb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGUuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGF0ZUNhbGxiYWNrRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBsYXRlQ2FsbGJhY2tGdW5jdGlvbihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTyxDQUFBQSxNQUFNLEtBQU0saUJBQWlCLENBQ3BDLE1BQU8sQ0FBQUMsTUFBTSxLQUFNLGlCQUFpQixDQUVwQyxlQUFlLENBQUNDLENBQVksQ0FBRUMsQ0FBeUIsQ0FBRUMsQ0FBb0IsR0FBSyxDQUM5RSxHQUF5QyxVQUFVLEVBQS9DLE1BQU8sQ0FBQUQsQ0FBd0MsQ0FBRSxDQUNqRCxLQUFNLENBQUFFLENBQU0sQ0FBR0osTUFBTSxDQUFDQyxDQUFZLENBQUUsSUFBTSxDQUN0Q0MsQ0FBeUIsQ0FBQ0gsTUFBTSxDQUFDLENBQzdCTSxPQUFPLENBQUUsQ0FDTEosWUFBWSxDQUFaQSxDQUNKLENBQUMsQ0FDREssT0FBTyxDQUFFLGlCQUFpQkwsQ0FBWSxlQUFlLENBQ3JETSxJQUFJLENBQUUsY0FDVixDQUFDLENBQUMsQ0FDTixDQUFDLENBQUMsQ0FFRixNQUFPLFVBQVUsR0FBR0MsQ0FBSSxDQUFFLE9BQ2pCLENBQUFKLENBQU0sQ0FBQ0ssU0FBUyxDQUtqQk4sQ0FBb0IsQ0FDYk8sT0FBTyxDQUFDQyxLQUFLLENBQUNSLENBQW9CLENBQUUsSUFBSSxDQUFFSyxDQUFJLENBQUMsU0FMdERKLENBQU0sQ0FBQ1EsTUFBTSxDQUFDLENBQUMsQ0FDUkYsT0FBTyxDQUFDQyxLQUFLLENBQUNULENBQXlCLENBQUUsSUFBSSxDQUFFTSxDQUFJLENBQUMsQ0FNbkUsQ0FDSixDQUVBLE1BQU8sSUFBSSxDQUFBSyxPQUFPLENBQUMsQ0FBQ0MsQ0FBTyxDQUFFQyxDQUFNLEdBQUssQ0FDcEMsS0FBTSxDQUFBWCxDQUFNLENBQUdKLE1BQU0sQ0FBQ0MsQ0FBWSxDQUFFLElBQU0sQ0FDdENjLENBQU0sQ0FBQ2hCLE1BQU0sQ0FBQyxDQUNWTSxPQUFPLENBQUUsQ0FDTEosWUFBWSxDQUFaQSxDQUNKLENBQUMsQ0FDREssT0FBTyxDQUFFLGlCQUFpQkwsQ0FBWSxlQUFlLENBQ3JETSxJQUFJLENBQUUsY0FDVixDQUFDLENBQUMsQ0FDTixDQUFDLENBQUMsQ0FFRkwsQ0FBeUIsQ0FBQ2MsSUFBSSxDQUFDQyxDQUFLLEVBQUksQ0FDL0JiLENBQU0sQ0FBQ0ssU0FBUyxDQUdWTixDQUFvQixFQUMzQkEsQ0FBb0IsQ0FBQyxJQUFJLENBQUVjLENBQUssQ0FBQyxFQUhqQ2IsQ0FBTSxDQUFDUSxNQUFNLENBQUMsQ0FBQyxDQUNmRSxDQUFPLENBQUNHLENBQUssQ0FBQyxDQUl0QixDQUFDLENBQUVDLENBQUssRUFBSSxDQUNIZCxDQUFNLENBQUNLLFNBQVMsQ0FHVk4sQ0FBb0IsRUFDM0JBLENBQW9CLENBQUNlLENBQUssQ0FBQyxFQUgzQmQsQ0FBTSxDQUFDUSxNQUFNLENBQUMsQ0FBQyxDQUNmRyxDQUFNLENBQUNHLENBQUssQ0FBQyxDQUlyQixDQUFDLENBQ0wsQ0FBQyxDQUNMLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
package/package.json CHANGED
@@ -1,20 +1,18 @@
1
1
  {
2
2
  "author": "Steven Olmsted <steven.olmsted@ibigroup.com>",
3
3
  "bugs": "https://github.com/ibi-group/isotropic-timeout/issues",
4
- "contributors": [
5
- "Duane Sibilly <duane.sibilly@ibigroup.com>"
6
- ],
7
4
  "dependencies": {
8
- "isotropic-error": "~0.12.0",
9
- "isotropic-later": "~0.12.0"
5
+ "isotropic-error": "~0.13.1",
6
+ "isotropic-later": "~0.13.1"
10
7
  },
11
8
  "description": "Limit the amount of time a callback function will wait to be called",
12
9
  "devDependencies": {
13
- "isotropic-dev-dependencies": "~0.1.0"
10
+ "eslint": "~9.8.0",
11
+ "isotropic-dev-dependencies": "~0.3.1"
14
12
  },
15
13
  "engines": {
16
- "node": "^14.15.5",
17
- "npm": "^7.5.4"
14
+ "node": "^22.5.1",
15
+ "npm": "^10.8.2"
18
16
  },
19
17
  "files": [
20
18
  "lib"
@@ -26,17 +24,17 @@
26
24
  "license": "BSD-3-Clause",
27
25
  "main": "lib/timeout.js",
28
26
  "name": "isotropic-timeout",
29
- "repository": "ibi-group/isotropic-timeout",
27
+ "repository": "github:ibi-group/isotropic-timeout",
30
28
  "scripts": {
31
- "build": "cross-env BABEL_ENV=node-minify babel --config-file ./node_modules/isotropic-dev-dependencies/config/babel.json js -d lib",
32
- "lint": "eslint -c ./node_modules/isotropic-dev-dependencies/config/eslint-module.json --no-eslintrc --resolve-plugins-relative-to ./node_modules/isotropic-dev-dependencies js test",
33
- "_postinstall": "husky install ./node_modules/isotropic-dev-dependencies/hooks",
34
- "postpublish": "pinst --enable",
35
- "posttest": "[ -z \"$npm_config_coverage\" ] || nyc --nycrc-path ./node_modules/isotropic-dev-dependencies/config/nyc.json check-coverage",
29
+ "build": "cross-env BABEL_ENV=node-minify babel --config-file ./node_modules/isotropic-dev-dependencies/config/babel.json js -d lib --delete-dir-on-start",
30
+ "lint": "eslint js test",
31
+ "postprepare": "node ./node_modules/isotropic-dev-dependencies/lib/install-git-hooks.js",
32
+ "posttest": "[ -z \"$npm_config_coverage\" ] || c8 -c ./node_modules/isotropic-dev-dependencies/config/c8.json check-coverage",
36
33
  "prepare": "npm run build",
37
- "prepublishOnly": "npm test --coverage && pinst --disable",
34
+ "prepublishOnly": "npm test --coverage",
38
35
  "pretest": "npm run lint",
39
- "test": "cross-env BABEL_ENV=test nyc --nycrc-path ./node_modules/isotropic-dev-dependencies/config/nyc.json mocha"
36
+ "test": "cross-env BABEL_ENV=test c8 -c ./node_modules/isotropic-dev-dependencies/config/c8.json mocha --import=isotropic-dev-dependencies/lib/register-babel-loader.js"
40
37
  },
41
- "version": "0.12.0"
38
+ "type": "module",
39
+ "version": "0.13.1"
42
40
  }