torrent-online 1.7.8 → 1.7.9

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/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  Формат — [Keep a Changelog](https://keepachangelog.com/ru/1.1.0/), версии — [Semantic Versioning](https://semver.org/lang/ru/).
4
4
 
5
+ ## [1.7.9] — 2026-10-04
6
+ **RU:** В браузере звук больше не идёт рывками и не отстаёт от картинки.
7
+ **EN:** In the browser, audio no longer stutters or drifts off the picture.
8
+ - 🐛 Поток резался на MPEG-TS, и каждый кусок обнулял время. Браузер ставил звук не на ту секунду. Теперь фрагменты fMP4 с одной шкалой времени
9
+
5
10
  ## [1.7.8] — 2026-10-04
6
11
  **RU:** `npm i -g` снова доходит до конца. Зависимость `ip-set` больше не вызывает `npx only-allow pnpm` и не роняет установку.
7
12
  **EN:** `npm i -g` finishes again. The `ip-set` dependency no longer runs `npx only-allow pnpm` and no longer aborts the install.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "torrent-online",
3
- "version": "1.7.8",
3
+ "version": "1.7.9",
4
4
  "type": "module",
5
5
  "description": "Stream .torrent / magnet to VLC or browser — torrent streaming for macOS/Linux without a torrent client. Стрим торрентов в VLC или браузер.",
6
6
  "keywords": [
package/wtui.js CHANGED
@@ -672,26 +672,23 @@ function readBody(req) {
672
672
  const HLS_SEG = 4;
673
673
 
674
674
  function hlsSegName(i) {
675
- return 'seg-' + String(i).padStart(5, '0') + '.ts';
675
+ return 'seg-' + String(i).padStart(5, '0') + '.m4s';
676
676
  }
677
677
 
678
678
  function listHlsSegs(dir) {
679
679
  try {
680
680
  return fs.readdirSync(dir)
681
- .filter(n => /^seg-\d+\.ts$/.test(n))
682
- .map(n => Number(n.slice(4, -3)))
681
+ .filter(n => /^seg-\d+\.m4s$/.test(n))
682
+ .map(n => Number(n.slice(4, -4)))
683
683
  .filter(n => Number.isFinite(n))
684
684
  .sort((a, b) => a - b);
685
685
  } catch { return []; }
686
686
  }
687
687
 
688
- function hlsSegComplete(dir, index, job) {
688
+ function hlsSegComplete(dir, index) {
689
+ // temp_file: готовый фрагмент появляется атомарно, недописанный лежит как .tmp
689
690
  const fp = path.join(dir, hlsSegName(index));
690
- let st;
691
- try { st = fs.statSync(fp); } catch { return false; }
692
- if (st.size < 188) return false;
693
- try { if (fs.statSync(path.join(dir, hlsSegName(index + 1))).size > 0) return true; } catch {}
694
- return !!(job && job.ended && !job.aborted);
691
+ try { return fs.statSync(fp).size > 32; } catch { return false; }
695
692
  }
696
693
 
697
694
  async function probeSource(ffprobe, url) {
@@ -742,13 +739,12 @@ function killHlsJob(job, aborted) {
742
739
  if (!job || job.aborted || job.ended) return;
743
740
  job.aborted = !!aborted;
744
741
  try { job.proc.kill('SIGKILL'); } catch {}
745
- if (!aborted) return;
746
- const segs = listHlsSegs(job.dir);
747
- if (!segs.length) return;
748
- const tail = segs[segs.length - 1];
749
- if (!fs.existsSync(path.join(job.dir, hlsSegName(tail + 1)))) {
750
- try { fs.rmSync(path.join(job.dir, hlsSegName(tail))); } catch {}
751
- }
742
+ if (!aborted || !job.dir) return;
743
+ try {
744
+ for (const n of fs.readdirSync(job.dir)) {
745
+ if (n.endsWith('.tmp')) fs.rmSync(path.join(job.dir, n));
746
+ }
747
+ } catch {}
752
748
  }
753
749
 
754
750
  function jobCovers(job, index) {
@@ -771,35 +767,40 @@ function ensureHlsJob(hls, key, dir, ffmpeg, url, fromIndex, audioIndex, meta) {
771
767
  if (pre > 0.05) args.push('-ss', pre.toFixed(3));
772
768
  args.push('-i', url);
773
769
  if (post > 0.05) args.push('-ss', post.toFixed(3));
770
+ if (target > 0.05) args.push('-output_ts_offset', target.toFixed(3));
774
771
  args.push('-map', '0:v:0');
775
772
  const hasAudio = meta.tracks.length > 0;
776
773
  const a = hasAudio ? Math.max(0, Math.min(audioIndex, meta.tracks.length - 1)) : 0;
777
774
  if (hasAudio) args.push('-map', '0:a:' + a);
778
- // Копия исходного видео режется только по ключевым кадрам, и длина куска
779
- // перестаёт совпадать со шкалой. В браузере всегда H.264 с кадром каждые 4 с.
775
+ // MPEG-TS сбрасывал PTS каждого куска в ноль, браузер ставил звук не на то время.
776
+ // fMP4 держит одну шкалу: картинка и звук без разрывов на границах.
780
777
  // VLC по-прежнему открывает исходный файл как есть.
781
778
  const big = (meta.height || 0) > 1080 || (meta.width || 0) > 1920;
782
779
  const scale = big
783
780
  ? 'scale=trunc(min(1920\\,iw)/2)*2:trunc(min(1080\\,ih)/2)*2'
784
781
  : 'scale=trunc(iw/2)*2:trunc(ih/2)*2';
782
+ const initName = (fs.existsSync(path.join(dir, 'init.mp4')) && fs.statSync(path.join(dir, 'init.mp4')).size > 200)
783
+ ? 'init-extra.mp4' : 'init.mp4';
785
784
  args.push(
786
- '-c:v', 'libx264', '-preset', 'ultrafast', '-tune', 'zerolatency',
787
- '-profile:v', 'main', '-crf', '22',
785
+ '-c:v', 'libx264', '-preset', 'ultrafast', '-profile:v', 'main', '-crf', '22',
788
786
  '-vf', scale + ',format=yuv420p',
787
+ '-g', '1000', '-keyint_min', '1000', '-sc_threshold', '0',
789
788
  '-force_key_frames', 'expr:gte(t,n_forced*' + HLS_SEG + ')'
790
789
  );
791
- if (hasAudio) args.push('-c:a', 'aac', '-b:a', '160k', '-ac', '2', '-af', 'aresample=async=1:first_pts=0');
790
+ if (hasAudio) args.push('-c:a', 'aac', '-b:a', '160k', '-ac', '2', '-ar', '48000');
792
791
  else args.push('-an');
793
792
  args.push(
794
- '-avoid_negative_ts', 'make_zero',
795
793
  '-muxdelay', '0', '-muxpreload', '0',
796
794
  '-max_muxing_queue_size', '9999',
797
- '-f', 'segment', '-segment_time', String(HLS_SEG),
798
- '-segment_format', 'mpegts',
799
- '-reset_timestamps', '1',
800
- '-break_non_keyframes', '1',
801
- '-segment_start_number', String(fromIndex),
802
- path.join(dir, 'seg-%05d.ts')
795
+ '-f', 'hls', '-hls_time', String(HLS_SEG),
796
+ '-hls_playlist_type', 'event',
797
+ '-hls_segment_type', 'fmp4',
798
+ '-hls_fmp4_init_filename', initName,
799
+ '-hls_flags', 'independent_segments+temp_file',
800
+ '-hls_list_size', '0',
801
+ '-start_number', String(fromIndex),
802
+ '-hls_segment_filename', path.join(dir, 'seg-%05d.m4s'),
803
+ path.join(dir, 'ffmpeg.m3u8')
803
804
  );
804
805
  const proc = spawn(ffmpeg, args, { stdio: ['ignore', 'ignore', 'pipe'] });
805
806
  const job = { proc, dir, from: fromIndex, touched: Date.now(), ended: false, aborted: false, err: '' };
@@ -816,8 +817,9 @@ function ensureHlsJob(hls, key, dir, ffmpeg, url, fromIndex, audioIndex, meta) {
816
817
 
817
818
  function vodPlaylist(duration, audio) {
818
819
  const n = Math.max(1, Math.ceil(duration / HLS_SEG - 1e-6));
819
- let pl = '#EXTM3U\n#EXT-X-VERSION:3\n#EXT-X-TARGETDURATION:' + HLS_SEG + '\n#EXT-X-PLAYLIST-TYPE:VOD\n#EXT-X-MEDIA-SEQUENCE:0\n';
820
+ let pl = '#EXTM3U\n#EXT-X-VERSION:7\n#EXT-X-TARGETDURATION:' + HLS_SEG + '\n#EXT-X-PLAYLIST-TYPE:VOD\n#EXT-X-INDEPENDENT-SEGMENTS\n';
820
821
  const qs = '?a=' + encodeURIComponent(String(audio));
822
+ pl += '#EXT-X-MAP:URI="init.mp4' + qs + '"\n';
821
823
  for (let i = 0; i < n; i++) {
822
824
  const segDur = Math.min(HLS_SEG, Math.max(0.001, duration - i * HLS_SEG));
823
825
  pl += '#EXTINF:' + segDur.toFixed(3) + ',\n' + hlsSegName(i) + qs + '\n';
@@ -1134,7 +1136,38 @@ async function webReq(req, res, client, st, opts, cacheDir, base) {
1134
1136
  res.end(vodPlaylist(meta.duration, a));
1135
1137
  return;
1136
1138
  }
1137
- const segM = /^seg-(\d+)\.ts$/.exec(name);
1139
+ if (name === 'init.mp4') {
1140
+ await ensureDir(dir);
1141
+ const initFp = path.join(dir, 'init.mp4');
1142
+ if (!fs.existsSync(initFp) || fs.statSync(initFp).size < 200) {
1143
+ const running = hls.procs.get(key);
1144
+ const job = (running && !running.ended && !running.aborted)
1145
+ ? running
1146
+ : ensureHlsJob(hls, key, dir, ffmpeg, url, 0, a, meta);
1147
+ job.touched = Date.now();
1148
+ const deadline = Date.now() + 20000;
1149
+ while (Date.now() < deadline) {
1150
+ try { if (fs.statSync(initFp).size > 200) break; } catch {}
1151
+ if (job.ended && job.err) break;
1152
+ await sleep(100);
1153
+ }
1154
+ }
1155
+ let initBuf = null;
1156
+ try { if (fs.statSync(initFp).size > 200) initBuf = fs.readFileSync(initFp); } catch {}
1157
+ if (!initBuf) {
1158
+ res.statusCode = 503;
1159
+ res.setHeader('Retry-After', '1');
1160
+ res.setHeader('Cache-Control', 'no-store');
1161
+ res.end('init');
1162
+ return;
1163
+ }
1164
+ res.setHeader('Content-Type', 'video/mp4');
1165
+ res.setHeader('Cache-Control', 'no-store');
1166
+ res.setHeader('Content-Length', initBuf.length);
1167
+ res.end(initBuf);
1168
+ return;
1169
+ }
1170
+ const segM = /^seg-(\d+)\.m4s$/.exec(name);
1138
1171
  if (!segM) { res.statusCode = 404; res.end('no'); return; }
1139
1172
  const index = Number(segM[1]);
1140
1173
  const nSeg = Math.max(1, Math.ceil(meta.duration / HLS_SEG - 1e-6));
@@ -1159,7 +1192,7 @@ async function webReq(req, res, client, st, opts, cacheDir, base) {
1159
1192
  return;
1160
1193
  }
1161
1194
  const buf = fs.readFileSync(fp);
1162
- res.setHeader('Content-Type', 'video/mp2t');
1195
+ res.setHeader('Content-Type', 'video/mp4');
1163
1196
  res.setHeader('Cache-Control', 'no-store');
1164
1197
  res.setHeader('Content-Length', buf.length);
1165
1198
  res.end(buf);
@@ -1,46 +0,0 @@
1
- Changelog
2
- =========
3
-
4
- v0.6.0
5
- ------
6
-
7
- - Updated "devDependencies" versions to fix vulnerability alerts
8
- - Dropped support of io.js and node.js v0.12.x and lower since new versions of
9
- "devDependencies" couldn't work with those old node.js versions
10
- (minimal supported version of node.js now is v4.0.0)
11
-
12
- v0.5.1
13
- ------
14
-
15
- - Fix prototype pollution vulnerability (thanks to @mwakerman for the PR)
16
- - Avoid using deprecated Buffer API (thanks to @ChALkeR for the PR)
17
-
18
- v0.5.0
19
- ------
20
-
21
- - Auto-testing provided by Travis CI;
22
- - Support older Node.JS versions (`v0.11.x` and `v0.10.x`);
23
- - Removed tests files from npm package.
24
-
25
- v0.4.2
26
- ------
27
-
28
- - Fix for `null` as an argument.
29
-
30
- v0.4.1
31
- ------
32
-
33
- - Removed test code from <b>npm</b> package
34
- ([see pull request #21](https://github.com/unclechu/node-deep-extend/pull/21));
35
- - Increased minimal version of Node from `0.4.0` to `0.12.0`
36
- (because can't run tests on lesser version anyway).
37
-
38
- v0.4.0
39
- ------
40
-
41
- - **WARNING!** Broken backward compatibility with `v0.3.x`;
42
- - Fixed bug with extending arrays instead of cloning;
43
- - Deep cloning for arrays;
44
- - Check for own property;
45
- - Fixed some documentation issues;
46
- - Strict JS mode.
@@ -1,14 +0,0 @@
1
- # HTTP Parser
2
-
3
- ## 0.4.4
4
-
5
- Made 'maxHeaderSize' configurable.
6
-
7
- ```js
8
- // Monkey patch before you require http for the first time.
9
- process.binding('http_parser').HTTPParser = require('http-parser-js').HTTPParser;
10
- require('http-parser-js').HTTPParser.maxHeaderSize = 1024 * 1024; // 1MB instead of 80kb
11
-
12
- var http = require('http');
13
- // ...
14
- ```
@@ -1,312 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
-
5
- ## [3.0.0](https://github.com/broofa/mime/compare/v2.6.0...v3.0.0) (2021-11-03)
6
-
7
-
8
- ### ⚠ BREAKING CHANGES
9
-
10
- * drop support for node < 10.x
11
-
12
- ### Bug Fixes
13
-
14
- * skypack.dev for direct browser import, fixes [#263](https://github.com/broofa/mime/issues/263) ([41db4c0](https://github.com/broofa/mime/commit/41db4c042ccf50ea7baf3d2160ea37dcca37998d))
15
-
16
-
17
- ### update
18
-
19
- * drop support for node < 10.x ([8857363](https://github.com/broofa/mime/commit/8857363ae0446ed0229b17291cf4483cf801f0d0))
20
-
21
- ## [2.6.0](https://github.com/broofa/mime/compare/v2.5.2...v2.6.0) (2021-11-02)
22
-
23
-
24
- ### Features
25
-
26
- * mime-db@1.50.0 ([cef0cc4](https://github.com/broofa/mime/commit/cef0cc484ff6d05ff1e12b54ca3e8b856fbc14d8))
27
-
28
- ### [2.5.2](https://github.com/broofa/mime/compare/v2.5.0...v2.5.2) (2021-02-17)
29
-
30
-
31
- ### Bug Fixes
32
-
33
- * update to mime-db@1.46.0, fixes [#253](https://github.com/broofa/mime/issues/253) ([f10e6aa](https://github.com/broofa/mime/commit/f10e6aa62e1356de7e2491d7fb4374c8dac65800))
34
-
35
- ## [2.5.0](https://github.com/broofa/mime/compare/v2.4.7...v2.5.0) (2021-01-16)
36
-
37
-
38
- ### Features
39
-
40
- * improved CLI ([#244](https://github.com/broofa/mime/issues/244)) ([c8a8356](https://github.com/broofa/mime/commit/c8a8356e3b27f3ef46b64b89b428fdb547b14d5f))
41
-
42
- ### [2.4.7](https://github.com/broofa/mime/compare/v2.4.6...v2.4.7) (2020-12-16)
43
-
44
-
45
- ### Bug Fixes
46
-
47
- * update to latest mime-db ([43b09ef](https://github.com/broofa/mime/commit/43b09eff0233eacc449af2b1f99a19ba9e104a44))
48
-
49
- ### [2.4.6](https://github.com/broofa/mime/compare/v2.4.5...v2.4.6) (2020-05-27)
50
-
51
-
52
- ### Bug Fixes
53
-
54
- * add cli.js to package.json files ([#237](https://github.com/broofa/mime/issues/237)) ([6c070bc](https://github.com/broofa/mime/commit/6c070bc298fa12a48e2ed126fbb9de641a1e7ebc))
55
-
56
- ### [2.4.5](https://github.com/broofa/mime/compare/v2.4.4...v2.4.5) (2020-05-01)
57
-
58
-
59
- ### Bug Fixes
60
-
61
- * fix [#236](https://github.com/broofa/mime/issues/236) ([7f4ecd0](https://github.com/broofa/mime/commit/7f4ecd0d850ed22c9e3bfda2c11fc74e4dde12a7))
62
- * update to latest mime-db ([c5cb3f2](https://github.com/broofa/mime/commit/c5cb3f2ab8b07642a066efbde1142af1b90c927b))
63
-
64
- ### [2.4.4](https://github.com/broofa/mime/compare/v2.4.3...v2.4.4) (2019-06-07)
65
-
66
-
67
-
68
- ### [2.4.3](https://github.com/broofa/mime/compare/v2.4.2...v2.4.3) (2019-05-15)
69
-
70
-
71
-
72
- ### [2.4.2](https://github.com/broofa/mime/compare/v2.4.1...v2.4.2) (2019-04-07)
73
-
74
-
75
- ### Bug Fixes
76
-
77
- * don't use arrow function introduced in 2.4.1 ([2e00b5c](https://github.com/broofa/mime/commit/2e00b5c))
78
-
79
-
80
-
81
- ### [2.4.1](https://github.com/broofa/mime/compare/v2.4.0...v2.4.1) (2019-04-03)
82
-
83
-
84
- ### Bug Fixes
85
-
86
- * update MDN and mime-db types ([3e567a9](https://github.com/broofa/mime/commit/3e567a9))
87
-
88
-
89
-
90
- # [2.4.0](https://github.com/broofa/mime/compare/v2.3.1...v2.4.0) (2018-11-26)
91
-
92
-
93
- ### Features
94
-
95
- * Bind exported methods ([9d2a7b8](https://github.com/broofa/mime/commit/9d2a7b8))
96
- * update to mime-db@1.37.0 ([49e6e41](https://github.com/broofa/mime/commit/49e6e41))
97
-
98
-
99
-
100
- ### [2.3.1](https://github.com/broofa/mime/compare/v2.3.0...v2.3.1) (2018-04-11)
101
-
102
-
103
- ### Bug Fixes
104
-
105
- * fix [#198](https://github.com/broofa/mime/issues/198) ([25ca180](https://github.com/broofa/mime/commit/25ca180))
106
-
107
-
108
-
109
- # [2.3.0](https://github.com/broofa/mime/compare/v2.2.2...v2.3.0) (2018-04-11)
110
-
111
-
112
- ### Bug Fixes
113
-
114
- * fix [#192](https://github.com/broofa/mime/issues/192) ([5c35df6](https://github.com/broofa/mime/commit/5c35df6))
115
-
116
-
117
- ### Features
118
-
119
- * add travis-ci testing ([d64160f](https://github.com/broofa/mime/commit/d64160f))
120
-
121
-
122
-
123
- ### [2.2.2](https://github.com/broofa/mime/compare/v2.2.1...v2.2.2) (2018-03-30)
124
-
125
-
126
- ### Bug Fixes
127
-
128
- * update types files to mime-db@1.32.0 ([85aac16](https://github.com/broofa/mime/commit/85aac16))
129
-
130
-
131
- ### [2.2.1](https://github.com/broofa/mime/compare/v2.2.0...v2.2.1) (2018-03-30)
132
-
133
-
134
- ### Bug Fixes
135
-
136
- * Retain type->extension mappings for non-default types. Fixes [#180](https://github.com/broofa/mime/issues/180) ([b5c83fb](https://github.com/broofa/mime/commit/b5c83fb))
137
-
138
-
139
-
140
- # [2.2.0](https://github.com/broofa/mime/compare/v2.1.0...v2.2.0) (2018-01-04)
141
-
142
-
143
- ### Features
144
-
145
- * Retain type->extension mappings for non-default types. Fixes [#180](https://github.com/broofa/mime/issues/180) ([10f82ac](https://github.com/broofa/mime/commit/10f82ac))
146
-
147
-
148
-
149
- # [2.1.0](https://github.com/broofa/mime/compare/v2.0.5...v2.1.0) (2017-12-22)
150
-
151
-
152
- ### Features
153
-
154
- * Upgrade to mime-db@1.32.0. Fixes [#185](https://github.com/broofa/mime/issues/185) ([3f775ba](https://github.com/broofa/mime/commit/3f775ba))
155
-
156
-
157
-
158
- ### [2.0.5](https://github.com/broofa/mime/compare/v2.0.1...v2.0.5) (2017-12-22)
159
-
160
-
161
- ### Bug Fixes
162
-
163
- * ES5 support (back to node v0.4) ([f14ccb6](https://github.com/broofa/mime/commit/f14ccb6))
164
-
165
-
166
-
167
- # Changelog
168
-
169
- ### v2.0.4 (24/11/2017)
170
- - [**closed**] Switch to mime-score module for resolving extension contention issues. [#182](https://github.com/broofa/mime/issues/182)
171
- - [**closed**] Update mime-db to 1.31.0 in v1.x branch [#181](https://github.com/broofa/mime/issues/181)
172
-
173
- ---
174
-
175
- ## v1.5.0 (22/11/2017)
176
- - [**closed**] need ES5 version ready in npm package [#179](https://github.com/broofa/mime/issues/179)
177
- - [**closed**] mime-db no trace of iWork - pages / numbers / etc. [#178](https://github.com/broofa/mime/issues/178)
178
- - [**closed**] How it works in brownser ? [#176](https://github.com/broofa/mime/issues/176)
179
- - [**closed**] Missing `./Mime` [#175](https://github.com/broofa/mime/issues/175)
180
- - [**closed**] Vulnerable Regular Expression [#167](https://github.com/broofa/mime/issues/167)
181
-
182
- ---
183
-
184
- ### v2.0.3 (25/09/2017)
185
- *No changelog for this release.*
186
-
187
- ---
188
-
189
- ### v1.4.1 (25/09/2017)
190
- - [**closed**] Issue when bundling with webpack [#172](https://github.com/broofa/mime/issues/172)
191
-
192
- ---
193
-
194
- ### v2.0.2 (15/09/2017)
195
- - [**V2**] fs.readFileSync is not a function [#165](https://github.com/broofa/mime/issues/165)
196
- - [**closed**] The extension for video/quicktime should map to .mov, not .qt [#164](https://github.com/broofa/mime/issues/164)
197
- - [**V2**] [v2 Feedback request] Mime class API [#163](https://github.com/broofa/mime/issues/163)
198
- - [**V2**] [v2 Feedback request] Resolving conflicts over extensions [#162](https://github.com/broofa/mime/issues/162)
199
- - [**V2**] Allow callers to load module with official, full, or no defined types. [#161](https://github.com/broofa/mime/issues/161)
200
- - [**V2**] Use "facets" to resolve extension conflicts [#160](https://github.com/broofa/mime/issues/160)
201
- - [**V2**] Remove fs and path dependencies [#152](https://github.com/broofa/mime/issues/152)
202
- - [**V2**] Default content-type should not be application/octet-stream [#139](https://github.com/broofa/mime/issues/139)
203
- - [**V2**] reset mime-types [#124](https://github.com/broofa/mime/issues/124)
204
- - [**V2**] Extensionless paths should return null or false [#113](https://github.com/broofa/mime/issues/113)
205
-
206
- ---
207
-
208
- ### v2.0.1 (14/09/2017)
209
- - [**closed**] Changelog for v2.0 does not mention breaking changes [#171](https://github.com/broofa/mime/issues/171)
210
- - [**closed**] MIME breaking with 'class' declaration as it is without 'use strict mode' [#170](https://github.com/broofa/mime/issues/170)
211
-
212
- ---
213
-
214
- ## v2.0.0 (12/09/2017)
215
- - [**closed**] woff and woff2 [#168](https://github.com/broofa/mime/issues/168)
216
-
217
- ---
218
-
219
- ## v1.4.0 (28/08/2017)
220
- - [**closed**] support for ac3 voc files [#159](https://github.com/broofa/mime/issues/159)
221
- - [**closed**] Help understanding change from application/xml to text/xml [#158](https://github.com/broofa/mime/issues/158)
222
- - [**closed**] no longer able to override mimetype [#157](https://github.com/broofa/mime/issues/157)
223
- - [**closed**] application/vnd.adobe.photoshop [#147](https://github.com/broofa/mime/issues/147)
224
- - [**closed**] Directories should appear as something other than application/octet-stream [#135](https://github.com/broofa/mime/issues/135)
225
- - [**closed**] requested features [#131](https://github.com/broofa/mime/issues/131)
226
- - [**closed**] Make types.json loading optional? [#129](https://github.com/broofa/mime/issues/129)
227
- - [**closed**] Cannot find module './types.json' [#120](https://github.com/broofa/mime/issues/120)
228
- - [**V2**] .wav files show up as "audio/x-wav" instead of "audio/x-wave" [#118](https://github.com/broofa/mime/issues/118)
229
- - [**closed**] Don't be a pain in the ass for node community [#108](https://github.com/broofa/mime/issues/108)
230
- - [**closed**] don't make default_type global [#78](https://github.com/broofa/mime/issues/78)
231
- - [**closed**] mime.extension() fails if the content-type is parameterized [#74](https://github.com/broofa/mime/issues/74)
232
-
233
- ---
234
-
235
- ### v1.3.6 (11/05/2017)
236
- - [**closed**] .md should be text/markdown as of March 2016 [#154](https://github.com/broofa/mime/issues/154)
237
- - [**closed**] Error while installing mime [#153](https://github.com/broofa/mime/issues/153)
238
- - [**closed**] application/manifest+json [#149](https://github.com/broofa/mime/issues/149)
239
- - [**closed**] Dynamic adaptive streaming over HTTP (DASH) file extension typo [#141](https://github.com/broofa/mime/issues/141)
240
- - [**closed**] charsets image/png undefined [#140](https://github.com/broofa/mime/issues/140)
241
- - [**closed**] Mime-db dependency out of date [#130](https://github.com/broofa/mime/issues/130)
242
- - [**closed**] how to support plist? [#126](https://github.com/broofa/mime/issues/126)
243
- - [**closed**] how does .types file format look like? [#123](https://github.com/broofa/mime/issues/123)
244
- - [**closed**] Feature: support for expanding MIME patterns [#121](https://github.com/broofa/mime/issues/121)
245
- - [**closed**] DEBUG_MIME doesn't work [#117](https://github.com/broofa/mime/issues/117)
246
-
247
- ---
248
-
249
- ### v1.3.4 (06/02/2015)
250
- *No changelog for this release.*
251
-
252
- ---
253
-
254
- ### v1.3.3 (06/02/2015)
255
- *No changelog for this release.*
256
-
257
- ---
258
-
259
- ### v1.3.1 (05/02/2015)
260
- - [**closed**] Consider adding support for Handlebars .hbs file ending [#111](https://github.com/broofa/mime/issues/111)
261
- - [**closed**] Consider adding support for hjson. [#110](https://github.com/broofa/mime/issues/110)
262
- - [**closed**] Add mime type for Opus audio files [#94](https://github.com/broofa/mime/issues/94)
263
- - [**closed**] Consider making the `Requesting New Types` information more visible [#77](https://github.com/broofa/mime/issues/77)
264
-
265
- ---
266
-
267
- ## v1.3.0 (05/02/2015)
268
- - [**closed**] Add common name? [#114](https://github.com/broofa/mime/issues/114)
269
- - [**closed**] application/x-yaml [#104](https://github.com/broofa/mime/issues/104)
270
- - [**closed**] Add mime type for WOFF file format 2.0 [#102](https://github.com/broofa/mime/issues/102)
271
- - [**closed**] application/x-msi for .msi [#99](https://github.com/broofa/mime/issues/99)
272
- - [**closed**] Add mimetype for gettext translation files [#98](https://github.com/broofa/mime/issues/98)
273
- - [**closed**] collaborators [#88](https://github.com/broofa/mime/issues/88)
274
- - [**closed**] getting errot in installation of mime module...any1 can help? [#87](https://github.com/broofa/mime/issues/87)
275
- - [**closed**] should application/json's charset be utf8? [#86](https://github.com/broofa/mime/issues/86)
276
- - [**closed**] Add "license" and "licenses" to package.json [#81](https://github.com/broofa/mime/issues/81)
277
- - [**closed**] lookup with extension-less file on Windows returns wrong type [#68](https://github.com/broofa/mime/issues/68)
278
-
279
- ---
280
-
281
- ### v1.2.11 (15/08/2013)
282
- - [**closed**] Update mime.types [#65](https://github.com/broofa/mime/issues/65)
283
- - [**closed**] Publish a new version [#63](https://github.com/broofa/mime/issues/63)
284
- - [**closed**] README should state upfront that "application/octet-stream" is default for unknown extension [#55](https://github.com/broofa/mime/issues/55)
285
- - [**closed**] Suggested improvement to the charset API [#52](https://github.com/broofa/mime/issues/52)
286
-
287
- ---
288
-
289
- ### v1.2.10 (25/07/2013)
290
- - [**closed**] Mime type for woff files should be application/font-woff and not application/x-font-woff [#62](https://github.com/broofa/mime/issues/62)
291
- - [**closed**] node.types in conflict with mime.types [#51](https://github.com/broofa/mime/issues/51)
292
-
293
- ---
294
-
295
- ### v1.2.9 (17/01/2013)
296
- - [**closed**] Please update "mime" NPM [#49](https://github.com/broofa/mime/issues/49)
297
- - [**closed**] Please add semicolon [#46](https://github.com/broofa/mime/issues/46)
298
- - [**closed**] parse full mime types [#43](https://github.com/broofa/mime/issues/43)
299
-
300
- ---
301
-
302
- ### v1.2.8 (10/01/2013)
303
- - [**closed**] /js directory mime is application/javascript. Is it correct? [#47](https://github.com/broofa/mime/issues/47)
304
- - [**closed**] Add mime types for lua code. [#45](https://github.com/broofa/mime/issues/45)
305
-
306
- ---
307
-
308
- ### v1.2.7 (19/10/2012)
309
- - [**closed**] cannot install 1.2.7 via npm [#41](https://github.com/broofa/mime/issues/41)
310
- - [**closed**] Transfer ownership to @broofa [#36](https://github.com/broofa/mime/issues/36)
311
- - [**closed**] it's wrong to set charset to UTF-8 for text [#30](https://github.com/broofa/mime/issues/30)
312
- - [**closed**] Allow multiple instances of MIME types container [#27](https://github.com/broofa/mime/issues/27)
@@ -1,20 +0,0 @@
1
-
2
- ### 2.0.1 - 2020-01-DD
3
-
4
- - add support for deprecated IPv4 compatible IPv6 addresses #142
5
- - drop node 8 testing, add v14
6
- - fix parseInt for decimal, octal, hex
7
- - add support for classful (2,3 octet) IPv4
8
-
9
-
10
- ### 2.0.0 - 2019-10-13
11
-
12
- - use es6 templates instead of concatenated strings
13
- - lint: update tests with no-var
14
- - lint: allow no-cond-assign with extra parens
15
- - es6: replace var with const/let
16
- - update README with es6 examples #125
17
- - replace nodeunit with mocha
18
- - rewrite in JS, drop CoffeeScript
19
-
20
- ### 1.9.1 - 2019-07-03
@@ -1,166 +0,0 @@
1
- # Changes
2
-
3
-
4
- ## 2.0.2
5
-
6
- * Rename bin to `node-which`
7
-
8
- ## 2.0.1
9
-
10
- * generate changelog and publish on version bump
11
- * enforce 100% test coverage
12
- * Promise interface
13
-
14
- ## 2.0.0
15
-
16
- * Parallel tests, modern JavaScript, and drop support for node < 8
17
-
18
- ## 1.3.1
19
-
20
- * update deps
21
- * update travis
22
-
23
- ## v1.3.0
24
-
25
- * Add nothrow option to which.sync
26
- * update tap
27
-
28
- ## v1.2.14
29
-
30
- * appveyor: drop node 5 and 0.x
31
- * travis-ci: add node 6, drop 0.x
32
-
33
- ## v1.2.13
34
-
35
- * test: Pass missing option to pass on windows
36
- * update tap
37
- * update isexe to 2.0.0
38
- * neveragain.tech pledge request
39
-
40
- ## v1.2.12
41
-
42
- * Removed unused require
43
-
44
- ## v1.2.11
45
-
46
- * Prevent changelog script from being included in package
47
-
48
- ## v1.2.10
49
-
50
- * Use env.PATH only, not env.Path
51
-
52
- ## v1.2.9
53
-
54
- * fix for paths starting with ../
55
- * Remove unused `is-absolute` module
56
-
57
- ## v1.2.8
58
-
59
- * bullet items in changelog that contain (but don't start with) #
60
-
61
- ## v1.2.7
62
-
63
- * strip 'update changelog' changelog entries out of changelog
64
-
65
- ## v1.2.6
66
-
67
- * make the changelog bulleted
68
-
69
- ## v1.2.5
70
-
71
- * make a changelog, and keep it up to date
72
- * don't include tests in package
73
- * Properly handle relative-path executables
74
- * appveyor
75
- * Attach error code to Not Found error
76
- * Make tests pass on Windows
77
-
78
- ## v1.2.4
79
-
80
- * Fix typo
81
-
82
- ## v1.2.3
83
-
84
- * update isexe, fix regression in pathExt handling
85
-
86
- ## v1.2.2
87
-
88
- * update deps, use isexe module, test windows
89
-
90
- ## v1.2.1
91
-
92
- * Sometimes windows PATH entries are quoted
93
- * Fixed a bug in the check for group and user mode bits. This bug was introduced during refactoring for supporting strict mode.
94
- * doc cli
95
-
96
- ## v1.2.0
97
-
98
- * Add support for opt.all and -as cli flags
99
- * test the bin
100
- * update travis
101
- * Allow checking for multiple programs in bin/which
102
- * tap 2
103
-
104
- ## v1.1.2
105
-
106
- * travis
107
- * Refactored and fixed undefined error on Windows
108
- * Support strict mode
109
-
110
- ## v1.1.1
111
-
112
- * test +g exes against secondary groups, if available
113
- * Use windows exe semantics on cygwin & msys
114
- * cwd should be first in path on win32, not last
115
- * Handle lower-case 'env.Path' on Windows
116
- * Update docs
117
- * use single-quotes
118
-
119
- ## v1.1.0
120
-
121
- * Add tests, depend on is-absolute
122
-
123
- ## v1.0.9
124
-
125
- * which.js: root is allowed to execute files owned by anyone
126
-
127
- ## v1.0.8
128
-
129
- * don't use graceful-fs
130
-
131
- ## v1.0.7
132
-
133
- * add license to package.json
134
-
135
- ## v1.0.6
136
-
137
- * isc license
138
-
139
- ## 1.0.5
140
-
141
- * Awful typo
142
-
143
- ## 1.0.4
144
-
145
- * Test for path absoluteness properly
146
- * win: Allow '' as a pathext if cmd has a . in it
147
-
148
- ## 1.0.3
149
-
150
- * Remove references to execPath
151
- * Make `which.sync()` work on Windows by honoring the PATHEXT variable.
152
- * Make `isExe()` always return true on Windows.
153
- * MIT
154
-
155
- ## 1.0.2
156
-
157
- * Only files can be exes
158
-
159
- ## 1.0.1
160
-
161
- * Respect the PATHEXT env for win32 support
162
- * should 0755 the bin
163
- * binary
164
- * guts
165
- * package
166
- * 1st