• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/netifd/examples/utils.uc

  1 'use strict';
  2 
  3 import { glob, basename, realpath, chdir, mkstemp } from "fs";
  4 
  5 export const TYPE_ARRAY = 1;
  6 export const TYPE_STRING = 3;
  7 export const TYPE_INT = 5;
  8 export const TYPE_BOOL = 7;
  9 
 10 export function parse_bool(val)
 11 {
 12         switch (val) {
 13         case "1":
 14         case "true":
 15                 return true;
 16         case "0":
 17         case "false":
 18                 return false;
 19         }
 20 };
 21 
 22 export function parse_array(val)
 23 {
 24         if (type(val) != "array")
 25                 val = split(val, /\s+/);
 26         return val;
 27 };
 28 
 29 function __type_parsers()
 30 {
 31         let ret = [];
 32 
 33         ret[TYPE_ARRAY] = parse_array;
 34         ret[TYPE_STRING] = function(val) {
 35                 return val;
 36         };
 37         ret[TYPE_INT] = function(val) {
 38                 return +val;
 39         };
 40         ret[TYPE_BOOL] = parse_bool;
 41 
 42         return ret;
 43 }
 44 export const type_parser = __type_parsers();
 45 
 46 export function handler_load(path, cb)
 47 {
 48         for (let script in glob(path + "/*.sh")) {
 49                 script = basename(script);
 50 
 51                 let f = mkstemp();
 52                 let prev_dir = realpath(".");
 53                 chdir(path);
 54                 system(`./${script} "" "dump" >&${f.fileno()}`);
 55                 chdir(prev_dir);
 56                 f.seek();
 57                 while (!f.error()) {
 58                         let data = trim(f.read("line"));
 59                         try {
 60                                 data = json(data);
 61                         } catch (e) {
 62                                 continue;
 63                         }
 64 
 65                         if (type(data) != "object")
 66                                 continue;
 67 
 68                         cb(script, data);
 69                 }
 70                 f.close();
 71         }
 72 };
 73 
 74 export function handler_attributes(data, extra, validate)
 75 {
 76         let ret = { ...extra };
 77         for (let cur in data) {
 78                 let name_data = split(cur[0], ":", 2);
 79                 let name = name_data[0];
 80                 ret[name] = cur[1];
 81                 if (validate && name_data[1])
 82                         validate[name] = name_data[1];
 83         }
 84         return ret;
 85 };
 86 
 87 export function parse_attribute_list(data, spec)
 88 {
 89         let ret = {};
 90 
 91         for (let name, type_id in spec) {
 92                 if (!(name in data))
 93                         continue;
 94 
 95                 let val = data[name];
 96                 let parser = type_parser[type_id];
 97                 if (parser)
 98                         val = parser(val);
 99                 ret[name] = val;
100         }
101 
102         return ret;
103 };
104 
105 export function is_equal(val1, val2) {
106         let t1 = type(val1);
107 
108         if (t1 != type(val2))
109                 return false;
110 
111         if (t1 == "array") {
112                 if (length(val1) != length(val2))
113                         return false;
114 
115                 for (let i = 0; i < length(val1); i++)
116                         if (!is_equal(val1[i], val2[i]))
117                                 return false;
118 
119                 return true;
120         } else if (t1 == "object") {
121                 for (let key in val1)
122                         if (!is_equal(val1[key], val2[key]))
123                                 return false;
124                 for (let key in val2)
125                         if (val1[key] == null)
126                                 return false;
127                 return true;
128         } else {
129                 return val1 == val2;
130         }
131 };

This page was automatically generated by LXR 0.3.1.  •  OpenWrt