From 5ead4d7b56047b3fef56a41da43cdf0104bbe54b Mon Sep 17 00:00:00 2001 From: Subhajit Sahu Date: Sat, 17 Sep 2022 14:44:38 +0530 Subject: [PATCH] :mango: decorate code --- LICENSE | 2 +- README.md | 7 +++- build.js | 99 ++++++++++++++++++++++++----------------------- index.js | 49 +++++++++++------------ package-lock.json | 4 +- package.json | 2 +- 6 files changed, 84 insertions(+), 79 deletions(-) diff --git a/LICENSE b/LICENSE index 4db977b..46fff01 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2018-21 Subhajit Sahu +Copyright (c) 2018-22 Subhajit Sahu Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index a90893c..a912c75 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -Detailed [nutrient composition] of 528 key foods in India. +Detailed [nutrient composition] of 528 key foods in India.
+📦 [Node.js](https://www.npmjs.com/package/@ifct2017/compositions), +📜 [Files](https://unpkg.com/@ifct2017/compositions/). > This is part of package [ifct2017].
> Online database: [ifct2017.github.io]. @@ -41,7 +43,8 @@ compositions.csv() // → path of csv file

-[![](https://i.imgur.com/D5UYmbD.jpg)](http://ifct2017.com/) +[![](https://i.imgur.com/D5UYmbD.jpg)](http://ifct2017.com/)
+[![ORG](https://img.shields.io/badge/org-ifct2017-green?logo=Org)](https://ifct2017.github.io) > Data was obtained from the book [Indian Food Composition Tables 2017].
> Food composition values were measured by [National Institute of Nutrition, Hyderabad].
diff --git a/build.js b/build.js index 57ab760..8d633b1 100644 --- a/build.js +++ b/build.js @@ -1,9 +1,9 @@ -const descriptions = require('@ifct2017/descriptions') -const groups = require('@ifct2017/groups'); +const path = require('path'); +const fs = require('fs'); +const os = require('os'); const parse = require('csv-parse'); -const path = require('path'); -const fs = require('fs'); -const os = require('os'); +const descriptions = require('@ifct2017/descriptions') +const groups = require('@ifct2017/groups'); const BASE = ['code', 'name', 'scie', 'lang', 'grup', 'regn', 'tags']; @@ -39,12 +39,12 @@ var dat = { regn: [], tags: [], }; -var di = 0; +var di = 0; var map = new Map(); var factors = null; var renames = null; -var sums = null; -var orders = null; +var sums = null; +var orders = null; var descCorpus; var grupCorpus; groups.load(); @@ -54,15 +54,15 @@ function valParse(val, code, dat, i) { var f = factors.get(code); var fn = parseFloat(f.replace(/\*.*/, '')); var fi = f.indexOf('*'), fk = fi>=0? f.substring(fi+1):null; - var z = (parseFloat(val)||0)*fn*(fk? parseFloat(dat[fk][i])||0:1); - // z = parseFloat(z.toExponential((significantDigits(parseFloat(val))||1)-1)); - return round(z); + var a = (parseFloat(val)||0)*fn*(fk? parseFloat(dat[fk][i])||0:1); + // a = parseFloat(a.toExponential((significantDigits(parseFloat(val))||1)-1)); + return round(a); } function nameSci(str) { var bgn = str.lastIndexOf('('); - if(bgn<0) return ''; + if (bgn<0) return ''; var end = str.lastIndexOf(')'); end = end<0? str.length:end; var sci = str.substring(bgn+1, end).trim(); @@ -72,7 +72,7 @@ function nameSci(str) { function nameBas(str) { var sci = nameSci(str); - if(!sci) return str.trim(); + if (!sci) return str.trim(); return str.replace(new RegExp(`\\(\\s*${sci}\\s*\\)`), '').trim(); } @@ -89,20 +89,20 @@ function readAssetRow(row) { dat.grup[i] = grupCorpus.get(cod[0]).group; dat.regn[i] = parseInt(row.regn.trim(), 10); dat.tags[i] = grupCorpus.get(cod[0]).tags.trim(); - for(var k in row) { - if(BASE.includes(k)) continue; + for (var k in row) { + if (BASE.includes(k)) continue; var val = row[k].trim().split('±'), kt = renames.get(k)||k; - if(!dat[kt]) { dat[kt] = []; dat[kt+'_e'] = []; } + if (!dat[kt]) { dat[kt] = []; dat[kt+'_e'] = []; } dat[kt][i] = valParse(val[0]||'0', k, dat, i); dat[kt+'_e'][i] = valParse(val[1]||'0', k, dat, i); } } function readAsset(pth) { - return new Promise((fres) => { - var stm = fs.createReadStream(pth).pipe(parse({columns: true, comment: '#'})); - stm.on('data', readAssetRow); - stm.on('end', () => fres()); + return new Promise(resolve => { + var stream = fs.createReadStream(pth).pipe(parse({columns: true, comment: '#'})); + stream.on('data', readAssetRow); + stream.on('end', () => resolve()); }); } @@ -111,39 +111,39 @@ function readAsset(pth) { function nullToZero(d) { var K = Object.keys(d); - for(var k of K) { - for(var i=0; i acc.set(r.code, r.factor), new Map()); - renames = await readCsv('configs/renames.csv', (acc, r) => acc.set(r.code, r.actual), new Map()); - sums = await readCsv('configs/sums.csv', (acc, r) => acc.set(r.code, r.expression), new Map()); - orders = await readCsv('configs/orders.csv', (acc, r) => { - var arr = acc.get(r.before)||[]; + factors = await readCsv('configs/factors.csv', (acc, r) => acc.set(r.code, r.factor), new Map()); + renames = await readCsv('configs/renames.csv', (acc, r) => acc.set(r.code, r.actual), new Map()); + sums = await readCsv('configs/sums.csv', (acc, r) => acc.set(r.code, r.expression), new Map()); + orders = await readCsv('configs/orders.csv', (acc, r) => { + var arr = acc.get(r.before) || []; acc.set(r.before, arr); arr.push(r.code); }, new Map()); - for(var file of fs.readdirSync('assets')) + for (var file of fs.readdirSync('assets')) await readAsset(path.join('assets', file)); nullToZero(dat); sumAll(dat); dat = orderAll(dat); - var ks = Object.keys(dat), z = ks.join()+os.EOL; - for(var i=0; i { - stream.on('error', frej); + var stream = fs.createReadStream(csv()).pipe(csvx.parse({columns: true, comment: '#'})); + return new Promise((resolve, reject) => { + stream.on('error', reject); stream.on('data', (r) => { - if(++i===0) { cols = r; a = createTable(tab, cols, opt, a); a = insertIntoBegin(tab, cols, a); } + if (++i===0) { cols = r; a = createTable(tab, cols, opt, a); a = insertIntoBegin(tab, cols, a); } a = insertIntoMid(r, a); }); stream.on('end', () => { - a = insertIntoEnd(a); + a = insertIntoEnd(a); a += createFunctionLangTags(tab); a += esql.createView(`${tab}_tsvector`, `SELECT *, ${tsv} AS "tsvector" FROM "${tab}"`); a += esql.createIndex(`${tab}_tsvector_idx`, tab, `(${tsv})`, {method: 'GIN'}); - a = esql.setupTable.index(tab, cols, opt, a); - fres(a); + a = esql.setupTable.index(tab, cols, opt, a); + resolve(a); }); }); } @@ -105,8 +106,8 @@ function sql(tab='compositions', opt={}) { function loadRow(row) { var a = {}; - for(var k in row) { - if(TEXTCOLS.has(k)) a[k] = row[k]; + for (var k in row) { + if (TEXTCOLS.has(k)) a[k] = row[k]; else a[k] = parseFloat(row[k]); } return a; @@ -114,7 +115,7 @@ function loadRow(row) { function loadCorpus() { return new Promise((fres) => { - var s = fs.createReadStream(csv()).pipe(parse({columns: true, comment: '#'})); + var s = fs.createReadStream(csv()).pipe(csvx.parse({columns: true, comment: '#'})); s.on('data', (r) => corpus.set(r.code, loadRow(r))); s.on('end', fres); }); @@ -129,7 +130,7 @@ function createIndex() { this.field('lang'); this.field('grup'); this.field('tags'); - for(var r of corpus.values()) { + for (var r of corpus.values()) { var {code, name, scie, lang, grup, tags} = r; name = name.replace(/^(\w+),/g, '$1 $1 $1 $1,'); lang = lang.replace(/\[.*?\]/g, ''); @@ -158,7 +159,7 @@ function matchRate(m) { function compositions(txt) { if (!index) { load(); return []; } - var a = [], txt = txt.replace(/\W/g, ' '); + var a = [], txt = txt.replace(/\W/g, ' '); var ms = index.search(txt), max = 0; for (var m of ms) max = Math.max(max, matchRate(m)); @@ -167,6 +168,6 @@ function compositions(txt) { return a; } compositions.load = load; -compositions.csv = csv; -compositions.sql = sql; +compositions.csv = csv; +compositions.sql = sql; module.exports = compositions; diff --git a/package-lock.json b/package-lock.json index 4ceabae..74ce1c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ifct2017/compositions", - "version": "2.0.5", + "version": "2.0.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ifct2017/compositions", - "version": "2.0.5", + "version": "2.0.6", "license": "MIT", "dependencies": { "csv-parse": "4.8", diff --git a/package.json b/package.json index 53bfb01..52442bc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ifct2017/compositions", - "version": "2.0.5", + "version": "2.0.6", "description": "Detailed nutrient composition of 528 key foods in India.", "main": "index.js", "scripts": {