3 import { readfile, basename } from "fs";
4 let uht = require("uht");
8 function parse_category(str) {
9 let items = split(str, "|");
11 for (let item in items) {
12 item = split(item, "=", 2);
14 data["%val"] = item[0];
16 data[item[0]] = item[1];
22 function get_device(meta, name)
26 dev[meta["%val"] ?? "device"] = name;
27 for (let type in meta) {
28 if (substr(type, 0, 1) == "%")
31 dev[type] = meta[type];
37 let out = shift(ARGV);
39 warn(`Syntax: ${basename(sourcepath())} <output> <jsonfile> [<jsonfile> ...]\n`);
43 for (let file in ARGV) {
44 let data = json(readfile(file));
45 for (let category_str in data) {
46 let category = parse_category(category_str);
47 let devices = data[category_str];
48 for (let dev in devices) {
49 for (let sig in devices[dev]) {
50 signatures[sig] ??= [];
51 push(signatures[sig], get_device(category, dev));
57 uht.mark_hashtable(signatures);
58 uht.save(out, signatures);