Skip to content

Commit eb207c2

Browse files
committed
build: use async/wait in scripts instead of generators
1 parent 92715b3 commit eb207c2

File tree

5 files changed

+75
-115
lines changed

5 files changed

+75
-115
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ jobs:
170170
171171
- name: Remove non-test npm modules
172172
run: |
173-
echo co csv-parse gnode got stream-to-array | \
173+
echo csv-parse got stream-to-array | \
174174
xargs -n1 npm rm --silent --save-dev
175175
176176
- name: Remove npm module(s) ${{ matrix.npm-rm }}

package.json

+1-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
],
2020
"repository": "jshttp/mime-db",
2121
"devDependencies": {
22-
"co": "4.6.0",
2322
"csv-parse": "4.16.3",
2423
"eslint": "8.32.0",
2524
"eslint-config-standard": "15.0.1",
@@ -28,7 +27,6 @@
2827
"eslint-plugin-node": "11.1.0",
2928
"eslint-plugin-promise": "6.1.1",
3029
"eslint-plugin-standard": "4.1.0",
31-
"gnode": "0.1.2",
3230
"got": "11.8.6",
3331
"media-typer": "1.1.0",
3432
"mocha": "10.2.0",
@@ -47,7 +45,7 @@
4745
},
4846
"scripts": {
4947
"build": "node scripts/build",
50-
"fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx",
48+
"fetch": "node scripts/fetch-apache && node scripts/fetch-iana && node scripts/fetch-nginx",
5149
"lint": "eslint .",
5250
"test": "mocha --reporter spec --bail --check-leaks test/",
5351
"test-ci": "nyc --reporter=lcovonly --reporter=text npm test",

scripts/fetch-apache.js

+4-15
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ var TYPE_LINE_REGEXP = /^(?:# )?([\w-]+\/[\w+.-]+)((?:\s+[\w-]+)*)$/gm
3131
*/
3232
var URL = 'https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types'
3333

34-
get(URL, function onResponse (err, body) {
35-
if (err) throw err
34+
;(async function () {
35+
const res = await got(URL)
3636

3737
var json = {}
3838
var match = null
3939

4040
TYPE_LINE_REGEXP.index = 0
4141

42-
while ((match = TYPE_LINE_REGEXP.exec(body))) {
42+
while ((match = TYPE_LINE_REGEXP.exec(res.body))) {
4343
var mime = match[1]
4444

4545
if (mime.slice(-8) === '/example') {
@@ -57,7 +57,7 @@ get(URL, function onResponse (err, body) {
5757
}
5858

5959
writedb('src/apache-types.json', json)
60-
})
60+
}())
6161

6262
/**
6363
* Append an extension to an object.
@@ -87,14 +87,3 @@ function appendExtensions (obj, extensions) {
8787
appendExtension(obj, extension)
8888
}
8989
}
90-
91-
/**
92-
* Get HTTP resource body.
93-
*/
94-
function get (url, callback) {
95-
got(url).then(function onResponse (res) {
96-
callback(null, res.body)
97-
}).catch(function onError (err) {
98-
callback(err)
99-
})
100-
}

scripts/fetch-iana.js

+65-81
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
* Convert the IANA definitions from CSV to local.
1010
*/
1111

12-
var co = require('co')
1312
var got = require('got')
1413
var parser = require('csv-parse')
1514
var toArray = require('stream-to-array')
@@ -34,30 +33,18 @@ var INTENDED_USAGE_REGEXP = /^\s*(?:(?:\d{1,2}\.|o)\s+)?Intended\s+Usage\s*:\s*(
3433
var MIME_SUBTYPE_LINE_REGEXP = /^[^:\s-]*\s*(?:MIME )?(?:[Mm]edia )?(?:[Ss]ub ?type|SUB ?TYPE)(?: (?:[Nn]ame|NAME))?\s*:\s+(?:[A-Za-z]+ [Tt]ree\s+(?:- ?)?|(?:[a-z]+ )+- )?([0-9A-Za-z][0-9A-Za-z_.+-]*)(?:\s|$)/m
3534
var MIME_TYPE_HAS_CHARSET_PARAMETER_REGEXP = /parameters\s*:[^.]*\bcharset\b/im
3635

37-
co(function * () {
38-
var gens = yield [
39-
get('application', { extensions: /(?:\/(?:cwl|ecmascript|express|fdf|gzip|(?:ld|manifest)\+json|n-quads|n-triples|pgp-.+|trig|vnd\.(?:age|apple\..+|dbf|mapbox-vector-tile|rar))|xfdf|\+xml)$/ }),
40-
get('audio', { extensions: /\/(?:aac|mobile-xmf)$/ }),
41-
get('font', { extensions: true }),
42-
get('image', { extensions: true }),
43-
get('message', { extensions: true }),
44-
get('model', { extensions: true }),
45-
get('multipart'),
46-
get('text', { extensions: /\/(?:javascript|markdown|spdx|turtle|vnd\.familysearch\.gedcom|vtt)$/ }),
47-
get('video', { extensions: /\/iso\.segment$/ })
48-
]
49-
50-
// flatten generators
51-
gens = gens.reduce(concat, [])
52-
53-
// get results in groups
54-
var results = []
55-
while (gens.length !== 0) {
56-
results.push(yield gens.splice(0, 10))
57-
}
58-
59-
// flatten results
60-
results = results.reduce(concat, [])
36+
;(async function () {
37+
const results = Array.prototype.concat.apply([], [
38+
await get('application', { extensions: /(?:\/(?:cwl|ecmascript|express|fdf|gzip|(?:ld|manifest)\+json|n-quads|n-triples|pgp-.+|trig|vnd\.(?:age|apple\..+|dbf|mapbox-vector-tile|rar))|xfdf|\+xml)$/ }),
39+
await get('audio', { extensions: /\/(?:aac|mobile-xmf)$/ }),
40+
await get('font', { extensions: true }),
41+
await get('image', { extensions: true }),
42+
await get('message', { extensions: true }),
43+
await get('model', { extensions: true }),
44+
await get('multipart'),
45+
await get('text', { extensions: /\/(?:javascript|markdown|spdx|turtle|vnd\.familysearch\.gedcom|vtt)$/ }),
46+
await get('video', { extensions: /\/iso\.segment$/ })
47+
])
6148

6249
// gather extension frequency
6350
var exts = Object.create(null)
@@ -98,69 +85,65 @@ co(function * () {
9885
})
9986

10087
writedb('src/iana-types.json', json)
101-
}).then()
88+
}())
10289

103-
function addTemplateData (data, options) {
90+
async function addTemplateData (data, options) {
10491
var opts = options || {}
10592

10693
if (!data.template) {
107-
return data
94+
return
10895
}
10996

110-
return function * get () {
111-
var res = yield got('https://www.iana.org/assignments/media-types/' + data.template)
112-
var ref = data.type + '/' + data.name
113-
var rfc = getRfcReferences(data.reference)[0]
97+
let res = await got('https://www.iana.org/assignments/media-types/' + data.template)
98+
var ref = data.type + '/' + data.name
99+
var rfc = getRfcReferences(data.reference)[0]
114100

115-
if (res.statusCode === 404 && data.template !== ref) {
116-
console.log('template ' + data.template + ' not found, retry as ' + ref)
117-
data.template = ref
118-
res = yield got('https://www.iana.org/assignments/media-types/' + ref)
101+
if (res.statusCode === 404 && data.template !== ref) {
102+
console.log('template ' + data.template + ' not found, retry as ' + ref)
103+
data.template = ref
104+
res = await got('https://www.iana.org/assignments/media-types/' + ref)
119105

120-
// replace the guessed mime
121-
if (res.statusCode === 200) {
122-
data.mime = data.template
123-
}
106+
// replace the guessed mime
107+
if (res.statusCode === 200) {
108+
data.mime = data.template
124109
}
110+
}
125111

126-
if (res.statusCode === 404 && rfc !== undefined) {
127-
console.log('template ' + data.template + ' not found, fetch ' + rfc)
128-
res = yield got('https://tools.ietf.org/rfc/' + rfc.toLowerCase() + '.txt')
129-
}
112+
if (res.statusCode === 404 && rfc !== undefined) {
113+
console.log('template ' + data.template + ' not found, fetch ' + rfc)
114+
res = await got('https://tools.ietf.org/rfc/' + rfc.toLowerCase() + '.txt')
115+
}
130116

131-
if (res.statusCode === 404) {
132-
console.log('template ' + data.template + ' not found')
133-
return data
134-
}
117+
if (res.statusCode === 404) {
118+
console.log('template ' + data.template + ' not found')
119+
return
120+
}
135121

136-
if (res.statusCode !== 200) {
137-
throw new Error('got status code ' + res.statusCode + ' from template ' + data.template)
138-
}
122+
if (res.statusCode !== 200) {
123+
throw new Error('got status code ' + res.statusCode + ' from template ' + data.template)
124+
}
139125

140-
var body = getTemplateBody(res.body)
141-
var mime = extractTemplateMime(body)
126+
var body = getTemplateBody(res.body)
127+
var mime = extractTemplateMime(body)
142128

143-
// add the template as a source
144-
addSource(data, res.url)
129+
// add the template as a source
130+
addSource(data, res.url)
145131

146-
if (mimeEql(mime, data.mime)) {
147-
// use extracted mime
148-
data.mime = mime
132+
if (mimeEql(mime, data.mime)) {
133+
// use extracted mime
134+
data.mime = mime
149135

150-
// use extracted charset
151-
data.charset = extractTemplateCharset(body)
136+
// use extracted charset
137+
data.charset = extractTemplateCharset(body)
152138

153-
// use extracted usage
154-
data.usage = extractIntendedUsage(body)
139+
// use extracted usage
140+
data.usage = extractIntendedUsage(body)
155141

156-
// use extracted extensions
157-
if (data.usage === 'common' && opts.extensions &&
158-
(opts.extensions === true || opts.extensions.test(data.mime))) {
159-
data.extensions = extractTemplateExtensions(body)
160-
}
142+
// use extracted extensions
143+
if (data.usage === 'common' && opts.extensions &&
144+
(opts.extensions === true || opts.extensions.test(data.mime))) {
145+
data.extensions = extractTemplateExtensions(body)
161146
}
162-
163-
return data
164147
}
165148
}
166149

@@ -229,29 +212,30 @@ function extractTemplateExtensions (body) {
229212
: exts
230213
}
231214

232-
function * get (type, options) {
233-
var res = yield got('https://www.iana.org/assignments/media-types/' + encodeURIComponent(type) + '.csv')
215+
async function get (type, options) {
216+
const res = await got('https://www.iana.org/assignments/media-types/' + encodeURIComponent(type) + '.csv')
234217

235218
if (res.statusCode !== 200) {
236219
throw new Error('got status code ' + res.statusCode + ' from ' + type)
237220
}
238221

239-
var mimes = yield toArray(parser(res.body))
222+
const mimes = await toArray(parser(res.body))
240223
var headers = mimes.shift().map(normalizeHeader)
241224
var reduceRows = generateRowMapper(headers)
225+
const results = []
242226
var templates = Object.create(null)
243227

244-
return mimes.map(function (row) {
228+
for (const row of mimes) {
245229
var data = row.reduce(reduceRows, { type: type })
246230

247231
if (data.template) {
248232
if (data.template === type + '/example') {
249-
return
233+
continue
250234
}
251235

252236
if (templates[data.template]) {
253237
// duplicate entry
254-
return
238+
continue
255239
}
256240

257241
templates[data.template] = true
@@ -270,8 +254,12 @@ function * get (type, options) {
270254
addSource(data, url)
271255
})
272256

273-
return addTemplateData(data, options)
274-
})
257+
await addTemplateData(data, options)
258+
259+
results.push(data)
260+
}
261+
262+
return results
275263
}
276264

277265
function getTemplateBody (body) {
@@ -323,10 +311,6 @@ function appendToLine (line, str) {
323311
return trimmed + append
324312
}
325313

326-
function concat (a, b) {
327-
return a.concat(b.filter(Boolean))
328-
}
329-
330314
function generateRowMapper (headers) {
331315
return function reduceRows (obj, val, index) {
332316
if (val !== '') {

scripts/fetch-nginx.js

+4-15
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ var TYPE_LINE_REGEXP = /^\s*([\w-]+\/[\w+.-]+)((?:\s+[\w-]+)*);\s*$/gm
2929
*/
3030
var URL = 'https://raw.githubusercontent.com/nginx/nginx/master/conf/mime.types'
3131

32-
get(URL, function onResponse (err, body) {
33-
if (err) throw err
32+
;(async function () {
33+
const res = await got(URL)
3434

3535
var json = {}
3636
var match = null
3737

3838
TYPE_LINE_REGEXP.index = 0
3939

40-
while ((match = TYPE_LINE_REGEXP.exec(body))) {
40+
while ((match = TYPE_LINE_REGEXP.exec(res.body))) {
4141
var mime = match[1]
4242

4343
// parse the extensions
@@ -51,7 +51,7 @@ get(URL, function onResponse (err, body) {
5151
}
5252

5353
writedb('src/nginx-types.json', json)
54-
})
54+
}())
5555

5656
/**
5757
* Append an extension to an object.
@@ -81,14 +81,3 @@ function appendExtensions (obj, extensions) {
8181
appendExtension(obj, extension)
8282
}
8383
}
84-
85-
/**
86-
* Get HTTP resource body.
87-
*/
88-
function get (url, callback) {
89-
got(url).then(function onResponse (res) {
90-
callback(null, res.body)
91-
}).catch(function onError (err) {
92-
callback(err)
93-
})
94-
}

0 commit comments

Comments
 (0)