dx-server 0.12.2 → 0.13.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 (106) hide show
  1. package/README.md +47 -55
  2. package/{cjs → lib}/body.d.ts +2 -3
  3. package/lib/body.js +10 -0
  4. package/{esm → lib}/bodyHelpers.d.ts +2 -4
  5. package/lib/bodyHelpers.js +89 -0
  6. package/{esm → lib}/dx.d.ts +5 -8
  7. package/lib/dx.js +127 -0
  8. package/{cjs → lib}/dxHelpers.d.ts +0 -4
  9. package/{esm → lib}/dxHelpers.js +0 -2
  10. package/{cjs → lib}/index.d.ts +0 -1
  11. package/{esm/index.d.ts → lib/index.js} +0 -1
  12. package/lib/logger.js +56 -0
  13. package/lib/router.d.ts +42 -0
  14. package/lib/router.js +43 -0
  15. package/lib/static.js +22 -0
  16. package/{cjs → lib}/staticHelpers.d.ts +0 -2
  17. package/lib/staticHelpers.js +186 -0
  18. package/{cjs → lib}/stream.d.ts +2 -7
  19. package/lib/stream.js +90 -0
  20. package/{esm → lib}/vendors/contentType.js +0 -1
  21. package/{cjs → lib}/vendors/etag.d.ts +0 -3
  22. package/lib/vendors/etag.js +104 -0
  23. package/{cjs → lib}/vendors/fresh.d.ts +2 -2
  24. package/lib/vendors/fresh.js +95 -0
  25. package/lib/vendors/mime.d.ts +1 -0
  26. package/lib/vendors/mime.js +35 -0
  27. package/{esm → lib}/vendors/mimeDb.js +0 -1
  28. package/{cjs → lib}/vendors/mimeScore.d.ts +1 -1
  29. package/lib/vendors/mimeScore.js +45 -0
  30. package/{cjs → lib}/vendors/onFinished.d.ts +1 -1
  31. package/lib/vendors/onFinished.js +231 -0
  32. package/lib/vendors/rangeParser.d.ts +20 -0
  33. package/lib/vendors/rangeParser.js +121 -0
  34. package/package.json +10 -19
  35. package/cjs/body.js +0 -14
  36. package/cjs/bodyHelpers.d.ts +0 -16
  37. package/cjs/bodyHelpers.js +0 -101
  38. package/cjs/connect.d.ts +0 -5
  39. package/cjs/connect.js +0 -44
  40. package/cjs/dx.d.ts +0 -46
  41. package/cjs/dx.js +0 -144
  42. package/cjs/dxHelpers.js +0 -123
  43. package/cjs/express.d.ts +0 -4
  44. package/cjs/express.js +0 -43
  45. package/cjs/helpers.js +0 -14
  46. package/cjs/index.js +0 -38
  47. package/cjs/logger.js +0 -61
  48. package/cjs/package.json +0 -3
  49. package/cjs/polyfillWithResolvers.d.ts +0 -1
  50. package/cjs/polyfillWithResolvers.js +0 -17
  51. package/cjs/router.js +0 -47
  52. package/cjs/static.js +0 -27
  53. package/cjs/staticHelpers.js +0 -195
  54. package/cjs/stream.js +0 -97
  55. package/cjs/vendors/contentType.js +0 -92
  56. package/cjs/vendors/etag.js +0 -136
  57. package/cjs/vendors/fresh.js +0 -102
  58. package/cjs/vendors/mime.d.ts +0 -1
  59. package/cjs/vendors/mime.js +0 -42
  60. package/cjs/vendors/mimeDb.js +0 -9417
  61. package/cjs/vendors/mimeScore.js +0 -50
  62. package/cjs/vendors/onFinished.js +0 -245
  63. package/cjs/vendors/rangeParser.d.ts +0 -10
  64. package/cjs/vendors/rangeParser.js +0 -126
  65. package/esm/body.d.ts +0 -8
  66. package/esm/body.js +0 -11
  67. package/esm/bodyHelpers.js +0 -90
  68. package/esm/connect.d.ts +0 -5
  69. package/esm/connect.js +0 -40
  70. package/esm/dx.js +0 -128
  71. package/esm/dxHelpers.d.ts +0 -49
  72. package/esm/express.d.ts +0 -4
  73. package/esm/express.js +0 -35
  74. package/esm/helpers.js +0 -3
  75. package/esm/index.js +0 -9
  76. package/esm/logger.d.ts +0 -3
  77. package/esm/logger.js +0 -57
  78. package/esm/polyfillWithResolvers.d.ts +0 -1
  79. package/esm/polyfillWithResolvers.js +0 -16
  80. package/esm/router.js +0 -44
  81. package/esm/static.d.ts +0 -5
  82. package/esm/static.js +0 -23
  83. package/esm/staticHelpers.d.ts +0 -18
  84. package/esm/staticHelpers.js +0 -188
  85. package/esm/stream.d.ts +0 -12
  86. package/esm/stream.js +0 -92
  87. package/esm/vendors/contentType.d.ts +0 -4
  88. package/esm/vendors/etag.d.ts +0 -10
  89. package/esm/vendors/etag.js +0 -105
  90. package/esm/vendors/fresh.d.ts +0 -23
  91. package/esm/vendors/fresh.js +0 -96
  92. package/esm/vendors/mime.d.ts +0 -1
  93. package/esm/vendors/mime.js +0 -35
  94. package/esm/vendors/mimeDb.d.ts +0 -9413
  95. package/esm/vendors/mimeScore.d.ts +0 -5
  96. package/esm/vendors/mimeScore.js +0 -46
  97. package/esm/vendors/onFinished.d.ts +0 -14
  98. package/esm/vendors/onFinished.js +0 -241
  99. package/esm/vendors/rangeParser.d.ts +0 -10
  100. package/esm/vendors/rangeParser.js +0 -122
  101. /package/{cjs → lib}/helpers.d.ts +0 -0
  102. /package/{esm/helpers.d.ts → lib/helpers.js} +0 -0
  103. /package/{cjs → lib}/logger.d.ts +0 -0
  104. /package/{cjs → lib}/static.d.ts +0 -0
  105. /package/{cjs → lib}/vendors/contentType.d.ts +0 -0
  106. /package/{cjs → lib}/vendors/mimeDb.d.ts +0 -0
@@ -1,5 +0,0 @@
1
- /**
2
- * Get each component of the score for a mime type. The sum of these is the
3
- * total score. The higher the score, the more "official" the type.
4
- */
5
- export declare function mimeScore(mimeType: any, source?: string): any;
@@ -1,46 +0,0 @@
1
- // 'mime-score' back-ported to CommonJS
2
- // Score RFC facets (see https://tools.ietf.org/html/rfc6838#section-3)
3
- const FACET_SCORES = {
4
- 'prs.': 100,
5
- 'x-': 200,
6
- 'x.': 300,
7
- 'vnd.': 400,
8
- default: 900
9
- };
10
- // Score mime source (Logic originally from `jshttp/mime-types` module)
11
- const SOURCE_SCORES = {
12
- nginx: 10,
13
- apache: 20,
14
- iana: 40,
15
- default: 30 // definitions added by `jshttp/mime-db` project?
16
- };
17
- const TYPE_SCORES = {
18
- // prefer application/xml over text/xml
19
- // prefer application/rtf over text/rtf
20
- application: 1,
21
- // prefer font/woff over application/font-woff
22
- font: 2,
23
- // prefer video/mp4 over audio/mp4 over application/mp4
24
- // See https://www.rfc-editor.org/rfc/rfc4337.html#section-2
25
- audio: 2,
26
- video: 3,
27
- default: 0
28
- };
29
- /**
30
- * Get each component of the score for a mime type. The sum of these is the
31
- * total score. The higher the score, the more "official" the type.
32
- */
33
- export function mimeScore(mimeType, source = 'default') {
34
- if (mimeType === 'application/octet-stream') {
35
- return 0;
36
- }
37
- const [type, subtype] = mimeType.split('/');
38
- const facet = subtype.replace(/(\.|x-).*/, '$1');
39
- const facetScore = FACET_SCORES[facet] || FACET_SCORES.default;
40
- const sourceScore = SOURCE_SCORES[source] || SOURCE_SCORES.default;
41
- const typeScore = TYPE_SCORES[type] || TYPE_SCORES.default;
42
- // All else being equal prefer shorter types
43
- const lengthScore = 1 - mimeType.length / 100;
44
- return facetScore + sourceScore + typeScore + lengthScore;
45
- }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWltZVNjb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZlbmRvcnMvbWltZVNjb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVDQUF1QztBQUV2Qyx1RUFBdUU7QUFDdkUsTUFBTSxZQUFZLEdBQUc7SUFDcEIsTUFBTSxFQUFFLEdBQUc7SUFDWCxJQUFJLEVBQUUsR0FBRztJQUNULElBQUksRUFBRSxHQUFHO0lBQ1QsTUFBTSxFQUFFLEdBQUc7SUFDWCxPQUFPLEVBQUUsR0FBRztDQUNaLENBQUE7QUFFRCx1RUFBdUU7QUFDdkUsTUFBTSxhQUFhLEdBQUc7SUFDckIsS0FBSyxFQUFFLEVBQUU7SUFDVCxNQUFNLEVBQUUsRUFBRTtJQUNWLElBQUksRUFBRSxFQUFFO0lBQ1IsT0FBTyxFQUFFLEVBQUUsQ0FBQyxpREFBaUQ7Q0FDN0QsQ0FBQTtBQUVELE1BQU0sV0FBVyxHQUFHO0lBQ25CLHVDQUF1QztJQUN2Qyx1Q0FBdUM7SUFDdkMsV0FBVyxFQUFFLENBQUM7SUFFZCw4Q0FBOEM7SUFDOUMsSUFBSSxFQUFFLENBQUM7SUFFUCx1REFBdUQ7SUFDdkQsNERBQTREO0lBQzVELEtBQUssRUFBRSxDQUFDO0lBQ1IsS0FBSyxFQUFFLENBQUM7SUFFUixPQUFPLEVBQUUsQ0FBQztDQUNWLENBQUE7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsU0FBUztJQUNyRCxJQUFJLFFBQVEsS0FBSywwQkFBMEIsRUFBRSxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxDQUFBO0lBQ1QsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUUzQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUVoRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQTtJQUM5RCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQTtJQUNsRSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQTtJQUUxRCw0Q0FBNEM7SUFDNUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFBO0lBRTdDLE9BQU8sVUFBVSxHQUFHLFdBQVcsR0FBRyxTQUFTLEdBQUcsV0FBVyxDQUFBO0FBQzFELENBQUMifQ==
@@ -1,14 +0,0 @@
1
- /**
2
- * Variables.
3
- * @private
4
- */
5
- /**
6
- * Invoke callback when the response has finished, useful for
7
- * cleaning up resources afterwards.
8
- *
9
- * @param {object} msg
10
- * @param {function} listener
11
- * @return {object}
12
- * @public
13
- */
14
- export declare function onFinished(msg: any, listener: any): any;
@@ -1,241 +0,0 @@
1
- /**
2
- * Variables.
3
- * @private
4
- */
5
- /* istanbul ignore next */
6
- import { AsyncResource } from 'node:async_hooks';
7
- const defer = typeof setImmediate === 'function'
8
- ? setImmediate
9
- : function (fn) {
10
- process.nextTick(fn.bind.apply(fn, arguments));
11
- };
12
- /**
13
- * Invoke callback when the response has finished, useful for
14
- * cleaning up resources afterwards.
15
- *
16
- * @param {object} msg
17
- * @param {function} listener
18
- * @return {object}
19
- * @public
20
- */
21
- export function onFinished(msg, listener) {
22
- if (isFinished(msg) !== false) {
23
- defer(listener, null, msg);
24
- return msg;
25
- }
26
- // attach the listener to the message
27
- attachListener(msg, wrap(listener));
28
- return msg;
29
- }
30
- /**
31
- * Determine if message is already finished.
32
- *
33
- * @param {object} msg
34
- * @return {boolean}
35
- * @public
36
- */
37
- function isFinished(msg) {
38
- const socket = msg.socket;
39
- if (typeof msg.finished === 'boolean') {
40
- // OutgoingMessage
41
- return Boolean(msg.finished || (socket && !socket.writable));
42
- }
43
- if (typeof msg.complete === 'boolean') {
44
- // IncomingMessage
45
- return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable));
46
- }
47
- // don't know
48
- return undefined;
49
- }
50
- /**
51
- * Attach a finished listener to the message.
52
- *
53
- * @param {object} msg
54
- * @param {function} callback
55
- * @private
56
- */
57
- function attachFinishedListener(msg, callback) {
58
- let eeMsg;
59
- let eeSocket;
60
- let finished = false;
61
- function onFinish(error) {
62
- eeMsg.cancel();
63
- eeSocket.cancel();
64
- finished = true;
65
- callback(error);
66
- }
67
- // finished on first message event
68
- eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish);
69
- function onSocket(socket) {
70
- // remove listener
71
- msg.removeListener('socket', onSocket);
72
- if (finished)
73
- return;
74
- if (eeMsg !== eeSocket)
75
- return;
76
- // finished on first socket event
77
- eeSocket = first([[socket, 'error', 'close']], onFinish);
78
- }
79
- if (msg.socket) {
80
- // socket already assigned
81
- onSocket(msg.socket);
82
- return;
83
- }
84
- // wait for socket to be assigned
85
- msg.on('socket', onSocket);
86
- if (msg.socket === undefined) {
87
- // istanbul ignore next: node.js 0.8 patch
88
- patchAssignSocket(msg, onSocket);
89
- }
90
- }
91
- /**
92
- * Attach the listener to the message.
93
- *
94
- * @param {object} msg
95
- * @return {function}
96
- * @private
97
- */
98
- function attachListener(msg, listener) {
99
- let attached = msg.__onFinished;
100
- // create a private single listener with queue
101
- if (!attached || !attached.queue) {
102
- attached = msg.__onFinished = createListener(msg);
103
- attachFinishedListener(msg, attached);
104
- }
105
- attached.queue.push(listener);
106
- }
107
- /**
108
- * Create listener on message.
109
- *
110
- * @param {object} msg
111
- * @return {function}
112
- * @private
113
- */
114
- function createListener(msg) {
115
- function listener(err) {
116
- if (msg.__onFinished === listener)
117
- msg.__onFinished = null;
118
- if (!listener.queue)
119
- return;
120
- const queue = listener.queue;
121
- listener.queue = null;
122
- for (let i = 0; i < queue.length; i++) {
123
- queue[i](err, msg);
124
- }
125
- }
126
- listener.queue = [];
127
- return listener;
128
- }
129
- /**
130
- * Patch ServerResponse.prototype.assignSocket for node.js 0.8.
131
- *
132
- * @param {ServerResponse} res
133
- * @param {function} callback
134
- * @private
135
- */
136
- // istanbul ignore next: node.js 0.8 patch
137
- function patchAssignSocket(res, callback) {
138
- const assignSocket = res.assignSocket;
139
- if (typeof assignSocket !== 'function')
140
- return;
141
- // res.on('socket', callback) is broken in 0.8
142
- res.assignSocket = function _assignSocket(socket) {
143
- assignSocket.call(this, socket);
144
- callback(socket);
145
- };
146
- }
147
- /**
148
- * Try to require async_hooks
149
- * @private
150
- */
151
- function tryRequireAsyncHooks() {
152
- try {
153
- return require('async_hooks');
154
- }
155
- catch (e) {
156
- return {};
157
- }
158
- }
159
- /**
160
- * Wrap function with async resource, if possible.
161
- * AsyncResource.bind static method backported.
162
- * @private
163
- */
164
- function wrap(fn) {
165
- let res;
166
- // create anonymous resource
167
- res = new AsyncResource(fn.name || 'bound-anonymous-fn');
168
- // incompatible node.js
169
- if (!res || !res.runInAsyncScope) {
170
- return fn;
171
- }
172
- // return bound function
173
- return res.runInAsyncScope.bind(res, fn, null);
174
- }
175
- /**
176
- * Get the first event in a set of event emitters and event pairs.
177
- *
178
- * @param {array} stuff
179
- * @param {function} done
180
- * @public
181
- */
182
- function first(stuff, done) {
183
- if (!Array.isArray(stuff)) {
184
- throw new TypeError('arg must be an array of [ee, events...] arrays');
185
- }
186
- const cleanups = [];
187
- for (let i = 0; i < stuff.length; i++) {
188
- const arr = stuff[i];
189
- if (!Array.isArray(arr) || arr.length < 2) {
190
- throw new TypeError('each array member must be [ee, events...]');
191
- }
192
- const ee = arr[0];
193
- for (let j = 1; j < arr.length; j++) {
194
- const event = arr[j];
195
- const fn = listener(event, callback);
196
- // listen to the event
197
- ee.on(event, fn);
198
- // push this listener to the list of cleanups
199
- cleanups.push({
200
- ee: ee,
201
- event: event,
202
- fn: fn
203
- });
204
- }
205
- }
206
- function callback() {
207
- cleanup();
208
- done.apply(null, arguments);
209
- }
210
- function cleanup() {
211
- let x;
212
- for (let i = 0; i < cleanups.length; i++) {
213
- x = cleanups[i];
214
- x.ee.removeListener(x.event, x.fn);
215
- }
216
- }
217
- function thunk(fn) {
218
- done = fn;
219
- }
220
- thunk.cancel = cleanup;
221
- return thunk;
222
- }
223
- /**
224
- * Create the event listener.
225
- * @private
226
- */
227
- function listener(event, done) {
228
- return function onevent(arg1) {
229
- const args = new Array(arguments.length);
230
- const ee = this;
231
- const err = event === 'error'
232
- ? arg1
233
- : null;
234
- // copy args to prevent arguments escaping scope
235
- for (let i = 0; i < args.length; i++) {
236
- args[i] = arguments[i];
237
- }
238
- done(err, ee, event, args);
239
- };
240
- }
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25GaW5pc2hlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZW5kb3JzL29uRmluaXNoZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsMEJBQTBCO0FBQzFCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUU5QyxNQUFNLEtBQUssR0FBRyxPQUFPLFlBQVksS0FBSyxVQUFVO0lBQy9DLENBQUMsQ0FBQyxZQUFZO0lBQ2QsQ0FBQyxDQUFDLFVBQVUsRUFBRTtRQUNiLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDL0MsQ0FBQyxDQUFBO0FBRUY7Ozs7Ozs7O0dBUUc7QUFFSCxNQUFNLFVBQVUsVUFBVSxDQUFFLEdBQUcsRUFBRSxRQUFRO0lBQ3hDLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQy9CLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQzFCLE9BQU8sR0FBRyxDQUFBO0lBQ1gsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBRW5DLE9BQU8sR0FBRyxDQUFBO0FBQ1gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUVILFNBQVMsVUFBVSxDQUFFLEdBQUc7SUFDdkIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUV6QixJQUFJLE9BQU8sR0FBRyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN2QyxrQkFBa0I7UUFDbEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFB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
@@ -1,10 +0,0 @@
1
- /**
2
- * Parse "Range" header `str` relative to the given file `size`.
3
- *
4
- * @param {Number} size
5
- * @param {String} str
6
- * @param {Object} [options]
7
- * @return {Array}
8
- * @public
9
- */
10
- export declare function parseRange(size: any, str: any, options: any): any;
@@ -1,122 +0,0 @@
1
- /**
2
- * Parse "Range" header `str` relative to the given file `size`.
3
- *
4
- * @param {Number} size
5
- * @param {String} str
6
- * @param {Object} [options]
7
- * @return {Array}
8
- * @public
9
- */
10
- export function parseRange(size, str, options) {
11
- if (typeof str !== 'string') {
12
- throw new TypeError('argument str must be a string');
13
- }
14
- const index = str.indexOf('=');
15
- if (index === -1) {
16
- return -2;
17
- }
18
- // split the range string
19
- const arr = str.slice(index + 1).split(',');
20
- const ranges = [];
21
- // add ranges type
22
- ranges.type = str.slice(0, index);
23
- // parse all ranges
24
- for (let i = 0; i < arr.length; i++) {
25
- const range = arr[i].split('-');
26
- let start = parseInt(range[0], 10);
27
- let end = parseInt(range[1], 10);
28
- // -nnn
29
- if (isNaN(start)) {
30
- start = size - end;
31
- end = size - 1;
32
- // nnn-
33
- }
34
- else if (isNaN(end)) {
35
- end = size - 1;
36
- }
37
- // limit last-byte-pos to current length
38
- if (end > size - 1) {
39
- end = size - 1;
40
- }
41
- // invalid or unsatisifiable
42
- if (isNaN(start) || isNaN(end) || start > end || start < 0) {
43
- continue;
44
- }
45
- // add range
46
- ranges.push({
47
- start: start,
48
- end: end
49
- });
50
- }
51
- if (ranges.length < 1) {
52
- // unsatisifiable
53
- return -1;
54
- }
55
- return options && options.combine
56
- ? combineRanges(ranges)
57
- : ranges;
58
- }
59
- /**
60
- * Combine overlapping & adjacent ranges.
61
- * @private
62
- */
63
- function combineRanges(ranges) {
64
- const ordered = ranges.map(mapWithIndex).sort(sortByRangeStart);
65
- let j = 0;
66
- for (let i = 1; i < ordered.length; i++) {
67
- const range = ordered[i];
68
- const current = ordered[j];
69
- if (range.start > current.end + 1) {
70
- // next range
71
- ordered[++j] = range;
72
- }
73
- else if (range.end > current.end) {
74
- // extend range
75
- current.end = range.end;
76
- current.index = Math.min(current.index, range.index);
77
- }
78
- }
79
- // trim ordered array
80
- ordered.length = j + 1;
81
- // generate combined range
82
- const combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex);
83
- // copy ranges type
84
- combined.type = ranges.type;
85
- return combined;
86
- }
87
- /**
88
- * Map function to add index value to ranges.
89
- * @private
90
- */
91
- function mapWithIndex(range, index) {
92
- return {
93
- start: range.start,
94
- end: range.end,
95
- index: index
96
- };
97
- }
98
- /**
99
- * Map function to remove index value from ranges.
100
- * @private
101
- */
102
- function mapWithoutIndex(range) {
103
- return {
104
- start: range.start,
105
- end: range.end
106
- };
107
- }
108
- /**
109
- * Sort function to sort ranges by index.
110
- * @private
111
- */
112
- function sortByRangeIndex(a, b) {
113
- return a.index - b.index;
114
- }
115
- /**
116
- * Sort function to sort ranges by start position.
117
- * @private
118
- */
119
- function sortByRangeStart(a, b) {
120
- return a.start - b.start;
121
- }
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2VQYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVuZG9ycy9yYW5nZVBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE1BQU0sVUFBVSxVQUFVLENBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPO0lBQzdDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLFNBQVMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO0lBQ3JELENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRTlCLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUNWLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtJQUVqQixrQkFBa0I7SUFDbEIsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUVqQyxtQkFBbUI7SUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQy9CLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDbEMsSUFBSSxHQUFHLEdBQUcsUUFB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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes