-
Notifications
You must be signed in to change notification settings - Fork 86
Expand file tree
/
Copy pathbuild-register.js
More file actions
executable file
·69 lines (56 loc) · 2.33 KB
/
build-register.js
File metadata and controls
executable file
·69 lines (56 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env node
import { readdir, writeFile } from 'fs/promises';
import path from 'path';
import { fileURLToPath } from 'url';
import { styleText } from 'util';
import importJson from '../lib/import-json.js';
import { Register } from '../lib/register.js';
let register;
let manufacturers;
const fixturesPath = fileURLToPath(new URL('../fixtures/', import.meta.url));
try {
manufacturers = await importJson('../fixtures/manufacturers.json', import.meta.url);
register = new Register(manufacturers);
await addFixturesToRegister();
}
catch (readError) {
console.error('Read error:', readError);
process.exit(1);
}
const registerFilename = path.join(fixturesPath, (process.argv.length === 3 ? process.argv[2] : 'register.json'));
const fileContents = `${JSON.stringify(register.getAsSortedObject(), null, 2)}\n`;
try {
await writeFile(registerFilename, fileContents, 'utf-8');
console.log(styleText('green', '[Success]'), 'Updated register file', registerFilename);
process.exit(0);
}
catch (error) {
console.error(styleText('red', '[Fail]'), 'Could not write register file.', error);
process.exit(1);
}
/**
* Loop through all manufacturer directories and fixture files and add them to the register.
*/
async function addFixturesToRegister() {
const directoryEntries = await readdir(fixturesPath, { withFileTypes: true });
const manufacturerKeys = directoryEntries.filter((entry) => entry.isDirectory()).map((entry) => entry.name);
for (const manufacturerKey of manufacturerKeys) {
register.addManufacturer(manufacturerKey, manufacturers[manufacturerKey]);
const manufacturerDirectory = path.join(fixturesPath, manufacturerKey);
const fixtureFiles = await readdir(manufacturerDirectory);
for (const filename of fixtureFiles) {
if (path.extname(filename) !== '.json') {
continue;
}
const fixtureKey = path.basename(filename, '.json');
const fixtureData = await importJson(`${manufacturerKey}/${filename}`, fixturesPath);
if (fixtureData.$schema.endsWith('/fixture-redirect.json')) {
const redirectToData = await importJson(`${fixtureData.redirectTo}.json`, fixturesPath);
register.addFixtureRedirect(manufacturerKey, fixtureKey, fixtureData, redirectToData);
}
else {
register.addFixture(manufacturerKey, fixtureKey, fixtureData);
}
}
}
}