ifct2017 2.0.14 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -21
- package/README.md +1019 -71
- package/abbreviations/index.csv +78 -0
- package/abbreviations/index.d.ts +39 -0
- package/abbreviations/index.js +103 -0
- package/abbreviations/index.txt +12 -0
- package/about/build.ts +31 -0
- package/about/index.d.ts +47 -0
- package/about/index.js +110 -0
- package/about/index.txt +174 -0
- package/build.ts +115 -0
- package/carbohydrates/index.csv +8 -0
- package/carbohydrates/index.d.ts +42 -0
- package/carbohydrates/index.js +112 -0
- package/carbohydrates/index.txt +14 -0
- package/codes/index.csv +2904 -0
- package/codes/index.d.ts +36 -0
- package/codes/index.js +102 -0
- package/codes/index.txt +12 -0
- package/columndescriptions/build.ts +22 -0
- package/columndescriptions/index.csv +215 -0
- package/columndescriptions/index.d.ts +44 -0
- package/columndescriptions/index.js +119 -0
- package/columns/build.ts +23 -0
- package/columns/index.csv +215 -0
- package/columns/index.d.ts +39 -0
- package/columns/index.js +111 -0
- package/columns/index.txt +71 -0
- package/compositingcentres/index.csv +7 -0
- package/compositingcentres/index.d.ts +35 -0
- package/compositingcentres/index.js +103 -0
- package/compositingcentres/index.txt +13 -0
- package/compositions/build.ts +212 -0
- package/compositions/index.csv +543 -0
- package/compositions/index.d.ts +254 -0
- package/compositions/index.js +204 -0
- package/compositionstats/build.ts +103 -0
- package/compositionstats/index.csv +4 -0
- package/compositionstats/index.d.ts +31 -0
- package/compositionstats/index.js +97 -0
- package/contents/index.csv +21 -0
- package/contents/index.d.ts +39 -0
- package/contents/index.js +102 -0
- package/contents/index.txt +13 -0
- package/deno.lock +67 -0
- package/descriptions/index.csv +543 -0
- package/descriptions/index.d.ts +45 -0
- package/descriptions/index.js +124 -0
- package/descriptions/index.txt +15 -0
- package/energies/index.csv +6 -0
- package/energies/index.d.ts +34 -0
- package/energies/index.js +101 -0
- package/energies/index.txt +13 -0
- package/frequencydistribution/index.csv +10 -0
- package/frequencydistribution/index.d.ts +36 -0
- package/frequencydistribution/index.js +90 -0
- package/frequencydistribution/index.txt +14 -0
- package/groups/index.csv +21 -0
- package/groups/index.d.ts +46 -0
- package/groups/index.js +118 -0
- package/groups/index.txt +14 -0
- package/hierarchy/asset.csv +215 -0
- package/hierarchy/asset.txt +70 -0
- package/hierarchy/build.ts +73 -0
- package/hierarchy/index.csv +215 -0
- package/hierarchy/index.d.ts +39 -0
- package/hierarchy/index.js +100 -0
- package/hierarchy/index.txt +14 -0
- package/index.d.ts +24 -28
- package/index.js +28 -39
- package/index.test.ts +717 -0
- package/intakes/build.ts +28 -0
- package/intakes/index.csv +42 -0
- package/intakes/index.d.ts +66 -0
- package/intakes/index.js +113 -0
- package/intakes/index.txt +20 -0
- package/jonesfactors/index.csv +15 -0
- package/jonesfactors/index.d.ts +35 -0
- package/jonesfactors/index.js +105 -0
- package/jonesfactors/index.txt +12 -0
- package/languages/index.csv +22 -0
- package/languages/index.d.ts +39 -0
- package/languages/index.js +103 -0
- package/languages/index.txt +12 -0
- package/methods/build.ts +101 -0
- package/methods/index.csv +37 -0
- package/methods/index.d.ts +39 -0
- package/methods/index.js +196 -0
- package/methods/index.txt +13 -0
- package/package.json +15 -63
- package/regions/index.csv +7 -0
- package/regions/index.d.ts +36 -0
- package/regions/index.js +100 -0
- package/regions/index.txt +12 -0
- package/representations/build.ts +133 -0
- package/representations/index.csv +215 -0
- package/representations/index.d.ts +36 -0
- package/representations/index.js +91 -0
- package/retentionfactors/groups.csv +21 -0
- package/retentionfactors/index.csv +215 -0
- package/samplingunits/index.csv +36 -0
- package/samplingunits/index.d.ts +39 -0
- package/samplingunits/index.js +110 -0
- package/samplingunits/index.txt +14 -0
- package/yieldfactors/index.csv +543 -0
- package/yieldfactors/index.d.ts +57 -0
- package/yieldfactors/index.js +158 -0
- package/yieldfactors/index.txt +294 -0
- package/corpus.js +0 -6
- package/corpus.min.js +0 -1
- package/pictures.d.ts +0 -41
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Composition } from "../compositions/index.js";
|
|
2
|
+
/** Type of the composition stats. */ export type CompositionStatType = "min" | "max" | "avg";
|
|
3
|
+
/**
|
|
4
|
+
* Load the compositions corpus from the file.
|
|
5
|
+
* @returns compositions corpus
|
|
6
|
+
*/ export declare function loadCompositionStats(): Promise<Map<string, Composition>>;
|
|
7
|
+
/**
|
|
8
|
+
* Get the path to the compositions stats CSV file.
|
|
9
|
+
* @returns CSV file URL
|
|
10
|
+
*/ export declare function compositionStatsCsv(): string;
|
|
11
|
+
/**
|
|
12
|
+
* Find the minimum, maximum, or average composition of all the foods.
|
|
13
|
+
* @param type type of the composition stats (min/max/avg)
|
|
14
|
+
* @returns composition stat (minimum, maximum, or average)
|
|
15
|
+
* @example
|
|
16
|
+
* ```javascript
|
|
17
|
+
* ifct2017.compositionsStats('max');
|
|
18
|
+
* // → { code: 'XMAX',
|
|
19
|
+
* // → name: 'Maximum composition of all foods',
|
|
20
|
+
* // → scie: '',
|
|
21
|
+
* // → lang: '',
|
|
22
|
+
* // → grup: '',
|
|
23
|
+
* // → regn: 0,
|
|
24
|
+
* // → tags: '',
|
|
25
|
+
* // → enerc: 2809,
|
|
26
|
+
* // → enerc_e: 86,
|
|
27
|
+
* // → water: 95.77,
|
|
28
|
+
* // → water_e: 2.78,
|
|
29
|
+
* // → ... } ]
|
|
30
|
+
* ```
|
|
31
|
+
*/ export declare function compositionStats(type: CompositionStatType): Composition[];
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// Copyright (C) 2025-26 Subhajit Sahu
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
// See LICENSE for full terms
|
|
4
|
+
import * as csv from "@std/csv";
|
|
5
|
+
//#endregion
|
|
6
|
+
//#region CONSTANTS
|
|
7
|
+
const TEXTCOLS = new Set([
|
|
8
|
+
'code',
|
|
9
|
+
'name',
|
|
10
|
+
'scie',
|
|
11
|
+
'lang',
|
|
12
|
+
'grup',
|
|
13
|
+
'tags'
|
|
14
|
+
]);
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region GLOBALS
|
|
17
|
+
let corpus = null;
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region FUNCTIONS
|
|
20
|
+
// Parse a row from the CSV file.
|
|
21
|
+
function parseRow(row) {
|
|
22
|
+
const a = {};
|
|
23
|
+
for(const k in row){
|
|
24
|
+
// Name of column is after the last semicolon.
|
|
25
|
+
const l = k.substring(k.lastIndexOf(';') + 1).trim();
|
|
26
|
+
a[l] = TEXTCOLS.has(l) ? row[k] : parseFloat(row[k]);
|
|
27
|
+
}
|
|
28
|
+
return a;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Load the compositions corpus from CSV file.
|
|
32
|
+
* @param file CSV file path
|
|
33
|
+
* @returns compositions corpus
|
|
34
|
+
*/ async function loadFromCsv(file) {
|
|
35
|
+
const map = new Map();
|
|
36
|
+
const data = await (await fetch(file)).text();
|
|
37
|
+
const records = csv.parse(data, {
|
|
38
|
+
skipFirstRow: true,
|
|
39
|
+
comment: "#"
|
|
40
|
+
});
|
|
41
|
+
for (const r of records)map.set(r.code, parseRow(r));
|
|
42
|
+
return map;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Load the compositions corpus from the file.
|
|
46
|
+
* @returns compositions corpus
|
|
47
|
+
*/ export async function loadCompositionStats() {
|
|
48
|
+
if (corpus) return corpus;
|
|
49
|
+
corpus = await loadFromCsv(compositionStatsCsv());
|
|
50
|
+
return corpus;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the path to the compositions stats CSV file.
|
|
54
|
+
* @returns CSV file URL
|
|
55
|
+
*/ export function compositionStatsCsv() {
|
|
56
|
+
return import.meta.resolve('./index.csv');
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Find the minimum, maximum, or average composition of all the foods.
|
|
60
|
+
* @param type type of the composition stats (min/max/avg)
|
|
61
|
+
* @returns composition stat (minimum, maximum, or average)
|
|
62
|
+
* @example
|
|
63
|
+
* ```javascript
|
|
64
|
+
* ifct2017.compositionsStats('max');
|
|
65
|
+
* // → { code: 'XMAX',
|
|
66
|
+
* // → name: 'Maximum composition of all foods',
|
|
67
|
+
* // → scie: '',
|
|
68
|
+
* // → lang: '',
|
|
69
|
+
* // → grup: '',
|
|
70
|
+
* // → regn: 0,
|
|
71
|
+
* // → tags: '',
|
|
72
|
+
* // → enerc: 2809,
|
|
73
|
+
* // → enerc_e: 86,
|
|
74
|
+
* // → water: 95.77,
|
|
75
|
+
* // → water_e: 2.78,
|
|
76
|
+
* // → ... } ]
|
|
77
|
+
* ```
|
|
78
|
+
*/ export function compositionStats(type) {
|
|
79
|
+
if (corpus == null) return [];
|
|
80
|
+
switch(type){
|
|
81
|
+
case 'min':
|
|
82
|
+
return [
|
|
83
|
+
corpus.get('XMIN')
|
|
84
|
+
];
|
|
85
|
+
case 'max':
|
|
86
|
+
return [
|
|
87
|
+
corpus.get('XMAX')
|
|
88
|
+
];
|
|
89
|
+
case 'avg':
|
|
90
|
+
return [
|
|
91
|
+
corpus.get('XAVG')
|
|
92
|
+
];
|
|
93
|
+
default:
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
} //#endregion
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9pZmN0MjAxNy9pZmN0MjAxNy9jb21wb3NpdGlvbnN0YXRzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoQykgMjAyNS0yNiBTdWJoYWppdCBTYWh1XG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vIFNlZSBMSUNFTlNFIGZvciBmdWxsIHRlcm1zXG5pbXBvcnQgKiBhcyBjc3YgIGZyb20gXCJAc3RkL2NzdlwiO1xuLy8gaW1wb3J0IGx1bnIgZnJvbSBcImx1bnJcIjsgIC8vIEBkZW5vLXR5cGVzPVwibnBtOkB0eXBlcy9sdW5yQDIuMy43XCJcbmltcG9ydCB0eXBlIHtDb21wb3NpdGlvbn0gZnJvbSBcIi4uL2NvbXBvc2l0aW9ucy9pbmRleC5qc1wiO1xuXG5cblxuLy8jcmVnaW9uIFRZUEVTXG4vKiogVHlwZSBvZiB0aGUgY29tcG9zaXRpb24gc3RhdHMuICovXG5leHBvcnQgdHlwZSBDb21wb3NpdGlvblN0YXRUeXBlID0gXCJtaW5cIiB8IFwibWF4XCIgfCBcImF2Z1wiO1xuLy8jZW5kcmVnaW9uXG5cblxuXG5cbi8vI3JlZ2lvbiBDT05TVEFOVFNcbmNvbnN0IFRFWFRDT0xTID0gbmV3IFNldChbJ2NvZGUnLCAnbmFtZScsICdzY2llJywgJ2xhbmcnLCAnZ3J1cCcsICd0YWdzJ10pO1xuLy8jZW5kcmVnaW9uXG5cblxuXG5cbi8vI3JlZ2lvbiBHTE9CQUxTXG5sZXQgY29ycHVzOiBNYXA8c3RyaW5nLCBDb21wb3NpdGlvbj4gfCBudWxsID0gbnVsbDtcbi8vI2VuZHJlZ2lvblxuXG5cblxuXG4vLyNyZWdpb24gRlVOQ1RJT05TXG4vLyBQYXJzZSBhIHJvdyBmcm9tIHRoZSBDU1YgZmlsZS5cbmZ1bmN0aW9uIHBhcnNlUm93KHJvdzogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICBjb25zdCBhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+ID0ge307XG4gIGZvciAoY29uc3QgayBpbiByb3cpIHtcbiAgICAvLyBOYW1lIG9mIGNvbHVtbiBpcyBhZnRlciB0aGUgbGFzdCBzZW1pY29sb24uXG4gICAgY29uc3QgbCA9IGsuc3Vic3RyaW5nKGsubGFzdEluZGV4T2YoJzsnKSsxKS50cmltKCk7XG4gICAgYVtsXSA9IFRFWFRDT0xTLmhhcyhsKT8gcm93W2tdIDogcGFyc2VGbG9hdChyb3dba10pO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG5cbi8qKlxuICogTG9hZCB0aGUgY29tcG9zaXRpb25zIGNvcnB1cyBmcm9tIENTViBmaWxlLlxuICogQHBhcmFtIGZpbGUgQ1NWIGZpbGUgcGF0aFxuICogQHJldHVybnMgY29tcG9zaXRpb25zIGNvcnB1c1xuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkRnJvbUNzdihmaWxlOiBzdHJpbmcpIHtcbiAgY29uc3QgbWFwICA9IG5ldyBNYXA8c3RyaW5nLCBDb21wb3NpdGlvbj4oKTtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IChhd2FpdCBmZXRjaChmaWxlKSkudGV4dCgpO1xuICBjb25zdCByZWNvcmRzID0gY3N2LnBhcnNlKGRhdGEsIHtza2lwRmlyc3RSb3c6IHRydWUsIGNvbW1lbnQ6IFwiI1wifSk7XG4gIGZvciAoY29uc3QgciBvZiByZWNvcmRzKVxuICAgIG1hcC5zZXQoci5jb2RlLCBwYXJzZVJvdyhyKSBhcyB1bmtub3duIGFzIENvbXBvc2l0aW9uKTtcbiAgcmV0dXJuIG1hcDtcbn1cblxuXG4vKipcbiAqIExvYWQgdGhlIGNvbXBvc2l0aW9ucyBjb3JwdXMgZnJvbSB0aGUgZmlsZS5cbiAqIEByZXR1cm5zIGNvbXBvc2l0aW9ucyBjb3JwdXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRDb21wb3NpdGlvblN0YXRzKCk6IFByb21pc2U8TWFwPHN0cmluZywgQ29tcG9zaXRpb24+PiB7XG4gIGlmIChjb3JwdXMpIHJldHVybiBjb3JwdXM7XG4gIGNvcnB1cyA9IGF3YWl0IGxvYWRGcm9tQ3N2KGNvbXBvc2l0aW9uU3RhdHNDc3YoKSk7XG4gIHJldHVybiBjb3JwdXM7XG59XG5cblxuLyoqXG4gKiBHZXQgdGhlIHBhdGggdG8gdGhlIGNvbXBvc2l0aW9ucyBzdGF0cyBDU1YgZmlsZS5cbiAqIEByZXR1cm5zIENTViBmaWxlIFVSTFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zaXRpb25TdGF0c0NzdigpOiBzdHJpbmcge1xuICByZXR1cm4gaW1wb3J0Lm1ldGEucmVzb2x2ZSgnLi9pbmRleC5jc3YnKTtcbn1cblxuXG4vKipcbiAqIEZpbmQgdGhlIG1pbmltdW0sIG1heGltdW0sIG9yIGF2ZXJhZ2UgY29tcG9zaXRpb24gb2YgYWxsIHRoZSBmb29kcy5cbiAqIEBwYXJhbSB0eXBlIHR5cGUgb2YgdGhlIGNvbXBvc2l0aW9uIHN0YXRzIChtaW4vbWF4L2F2ZylcbiAqIEByZXR1cm5zIGNvbXBvc2l0aW9uIHN0YXQgKG1pbmltdW0sIG1heGltdW0sIG9yIGF2ZXJhZ2UpXG4gKiBAZXhhbXBsZVxuICogYGBgamF2YXNjcmlwdFxuICogaWZjdDIwMTcuY29tcG9zaXRpb25zU3RhdHMoJ21heCcpO1xuICogLy8g4oaSIHsgY29kZTogJ1hNQVgnLFxuICogLy8g4oaSICAgbmFtZTogJ01heGltdW0gY29tcG9zaXRpb24gb2YgYWxsIGZvb2RzJyxcbiAqIC8vIOKGkiAgIHNjaWU6ICcnLFxuICogLy8g4oaSICAgbGFuZzogJycsXG4gKiAvLyDihpIgICBncnVwOiAnJyxcbiAqIC8vIOKGkiAgIHJlZ246IDAsXG4gKiAvLyDihpIgICB0YWdzOiAnJyxcbiAqIC8vIOKGkiAgIGVuZXJjOiAyODA5LFxuICogLy8g4oaSICAgZW5lcmNfZTogODYsXG4gKiAvLyDihpIgICB3YXRlcjogOTUuNzcsXG4gKiAvLyDihpIgICB3YXRlcl9lOiAyLjc4LFxuICogLy8g4oaSICAgLi4uIH0gXVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NpdGlvblN0YXRzKHR5cGU6IENvbXBvc2l0aW9uU3RhdFR5cGUpOiBDb21wb3NpdGlvbltdIHtcbiAgaWYgKGNvcnB1cyA9PSBudWxsKSByZXR1cm4gW107XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ21pbic6IHJldHVybiBbY29ycHVzLmdldCgnWE1JTicpIGFzIENvbXBvc2l0aW9uXTtcbiAgICBjYXNlICdtYXgnOiByZXR1cm4gW2NvcnB1cy5nZXQoJ1hNQVgnKSBhcyBDb21wb3NpdGlvbl07XG4gICAgY2FzZSAnYXZnJzogcmV0dXJuIFtjb3JwdXMuZ2V0KCdYQVZHJykgYXMgQ29tcG9zaXRpb25dO1xuICAgIGRlZmF1bHQ6IHJldHVybiBbXTtcbiAgfVxufVxuLy8jZW5kcmVnaW9uXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0NBQXNDO0FBQ3RDLDZDQUE2QztBQUM3Qyw2QkFBNkI7QUFDN0IsWUFBWSxTQUFVLFdBQVc7QUFTakMsWUFBWTtBQUtaLG1CQUFtQjtBQUNuQixNQUFNLFdBQVcsSUFBSSxJQUFJO0VBQUM7RUFBUTtFQUFRO0VBQVE7RUFBUTtFQUFRO0NBQU87QUFDekUsWUFBWTtBQUtaLGlCQUFpQjtBQUNqQixJQUFJLFNBQTBDO0FBQzlDLFlBQVk7QUFLWixtQkFBbUI7QUFDbkIsaUNBQWlDO0FBQ2pDLFNBQVMsU0FBUyxHQUEyQjtFQUMzQyxNQUFNLElBQXFDLENBQUM7RUFDNUMsSUFBSyxNQUFNLEtBQUssSUFBSztJQUNuQiw4Q0FBOEM7SUFDOUMsTUFBTSxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsV0FBVyxDQUFDLE9BQUssR0FBRyxJQUFJO0lBQ2hELENBQUMsQ0FBQyxFQUFFLEdBQUcsU0FBUyxHQUFHLENBQUMsS0FBSSxHQUFHLENBQUMsRUFBRSxHQUFHLFdBQVcsR0FBRyxDQUFDLEVBQUU7RUFDcEQ7RUFDQSxPQUFPO0FBQ1Q7QUFHQTs7OztDQUlDLEdBQ0QsZUFBZSxZQUFZLElBQVk7RUFDckMsTUFBTSxNQUFPLElBQUk7RUFDakIsTUFBTSxPQUFPLE1BQU0sQ0FBQyxNQUFNLE1BQU0sS0FBSyxFQUFFLElBQUk7RUFDM0MsTUFBTSxVQUFVLElBQUksS0FBSyxDQUFDLE1BQU07SUFBQyxjQUFjO0lBQU0sU0FBUztFQUFHO0VBQ2pFLEtBQUssTUFBTSxLQUFLLFFBQ2QsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUztFQUMzQixPQUFPO0FBQ1Q7QUFHQTs7O0NBR0MsR0FDRCxPQUFPLGVBQWU7RUFDcEIsSUFBSSxRQUFRLE9BQU87RUFDbkIsU0FBUyxNQUFNLFlBQVk7RUFDM0IsT0FBTztBQUNUO0FBR0E7OztDQUdDLEdBQ0QsT0FBTyxTQUFTO0VBQ2QsT0FBTyxZQUFZLE9BQU8sQ0FBQztBQUM3QjtBQUdBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CQyxHQUNELE9BQU8sU0FBUyxpQkFBaUIsSUFBeUI7RUFDeEQsSUFBSSxVQUFVLE1BQU0sT0FBTyxFQUFFO0VBQzdCLE9BQVE7SUFDTixLQUFLO01BQU8sT0FBTztRQUFDLE9BQU8sR0FBRyxDQUFDO09BQXVCO0lBQ3RELEtBQUs7TUFBTyxPQUFPO1FBQUMsT0FBTyxHQUFHLENBQUM7T0FBdUI7SUFDdEQsS0FBSztNQUFPLE9BQU87UUFBQyxPQUFPLEdBQUcsQ0FBQztPQUF1QjtJQUN0RDtNQUFTLE9BQU8sRUFBRTtFQUNwQjtBQUNGLEVBQ0EsWUFBWSJ9
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
sno,title,pagenos
|
|
2
|
+
1.,"Origin and progression of Indian Food Composition Tables",i
|
|
3
|
+
2.,"Identification of key foods, National sampling plan and analytical parameters",xii
|
|
4
|
+
3.,"General Information",xx
|
|
5
|
+
4.,"References",xxiv
|
|
6
|
+
5.,"Abbreviations",xxxi
|
|
7
|
+
6.,"Food Composition Tables",
|
|
8
|
+
6.1.,"Table 1: Proximate Principles and Dietary Fiber",1
|
|
9
|
+
6.2.,"Table 2: Water Soluble Vitamins",31
|
|
10
|
+
6.3.,"Table 3: Fat Soluble Vitamins",61
|
|
11
|
+
6.4.,"Table 4: Carotenoids",91
|
|
12
|
+
6.5.,"Table 5: Minerals and Trace Elements",111
|
|
13
|
+
6.6.,"Table 6: Starch and Individual Sugars",169
|
|
14
|
+
6.7.,"Table 7: Fatty Acid Profile",187
|
|
15
|
+
6.8.,"Table 8: Amino Acid Profile",257
|
|
16
|
+
6.9.,"Table 9: Organic Acids",313
|
|
17
|
+
6.10.,"Table 10: Polyphenols",333
|
|
18
|
+
6.11.,"Table 11: Oligosaccharides, Phytosterols, Saponins and Phytates",403
|
|
19
|
+
6.12.,"Table 12: Fatty Acid Profile of Edible Oils and Fats",423
|
|
20
|
+
7.,"Food Pictures and Description",427
|
|
21
|
+
8.,"Index",501
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type SetupTableOptions } from "@nodef/extra-sql";
|
|
2
|
+
/** Content in the original book. */ export interface Content {
|
|
3
|
+
/** S. No. */ sno: string;
|
|
4
|
+
/** Title. */ title: string;
|
|
5
|
+
/** Page Nos. */ pagenos: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Load the contents corpus from the file.
|
|
9
|
+
* @returns contents corpus
|
|
10
|
+
*/ export declare function loadContents(): Promise<Map<string, Content>>;
|
|
11
|
+
/**
|
|
12
|
+
* Get the path to the contents CSV file.
|
|
13
|
+
* @returns CSV file URL
|
|
14
|
+
*/ export declare function contentsCsv(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Obtain SQL command to create and populate the contents table.
|
|
17
|
+
* @param tab table name
|
|
18
|
+
* @param opt options for the table
|
|
19
|
+
* @returns CREATE TABLE, INSERT, CREATE VIEW, CREATE INDEX statements
|
|
20
|
+
*/ export declare function contentsSql(tab?: string, opt?: SetupTableOptions): Promise<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Find matching contents of an sno/title/pagenos query.
|
|
23
|
+
* @param txt sno/title/pagenos query
|
|
24
|
+
* @returns matches `[{sno, title, pagenos}]`
|
|
25
|
+
* @example
|
|
26
|
+
* ```javascript
|
|
27
|
+
* ifct2017.contents('table 2');
|
|
28
|
+
* ifct2017.contents('Water soluble vitamins');
|
|
29
|
+
* // → [ { sno: '6.2.',
|
|
30
|
+
* // → title: 'Table 2: Water Soluble Vitamins',
|
|
31
|
+
* // → pagenos: '31' } ]
|
|
32
|
+
*
|
|
33
|
+
* ifct2017.contents('what is page number of table 3?');
|
|
34
|
+
* ifct2017.contents('fat soluble vitamin page number');
|
|
35
|
+
* // → [ { sno: '6.3.',
|
|
36
|
+
* // → title: 'Table 3: Fat Soluble Vitamins',
|
|
37
|
+
* // → pagenos: '61' } ]
|
|
38
|
+
* ```
|
|
39
|
+
*/ export declare function contents(txt: string): Content[];
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// Copyright (C) 2025-26 Subhajit Sahu
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
// See LICENSE for full terms
|
|
4
|
+
import * as csv from "@std/csv";
|
|
5
|
+
import lunr from "lunr"; // @deno-types="npm:@types/lunr@2.3.7"
|
|
6
|
+
import { setupTable } from "@nodef/extra-sql";
|
|
7
|
+
//#endregion
|
|
8
|
+
//#region GLOBALS
|
|
9
|
+
let corpus = null;
|
|
10
|
+
let index = null;
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region FUNCTIONS
|
|
13
|
+
/**
|
|
14
|
+
* Load the contents corpus from CSV file.
|
|
15
|
+
* @param file CSV file path
|
|
16
|
+
* @returns contents corpus
|
|
17
|
+
*/ async function loadFromCsv(file) {
|
|
18
|
+
const map = new Map();
|
|
19
|
+
const data = await (await fetch(file)).text();
|
|
20
|
+
const records = csv.parse(data, {
|
|
21
|
+
skipFirstRow: true,
|
|
22
|
+
comment: "#"
|
|
23
|
+
});
|
|
24
|
+
for (const r of records)map.set(r.sno, r);
|
|
25
|
+
return map;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Setup the lunr index for the contents corpus.
|
|
29
|
+
* @returns lunr index
|
|
30
|
+
*/ function setupIndex(corpus) {
|
|
31
|
+
return lunr(function() {
|
|
32
|
+
this.ref('sno');
|
|
33
|
+
this.field('sno');
|
|
34
|
+
this.field('title');
|
|
35
|
+
this.field('pagenos');
|
|
36
|
+
for (const r of corpus.values())this.add(r);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Load the contents corpus from the file.
|
|
41
|
+
* @returns contents corpus
|
|
42
|
+
*/ export async function loadContents() {
|
|
43
|
+
if (corpus) return corpus;
|
|
44
|
+
corpus = await loadFromCsv(contentsCsv());
|
|
45
|
+
index = setupIndex(corpus);
|
|
46
|
+
return corpus;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get the path to the contents CSV file.
|
|
50
|
+
* @returns CSV file URL
|
|
51
|
+
*/ export function contentsCsv() {
|
|
52
|
+
return import.meta.resolve('./index.csv');
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Obtain SQL command to create and populate the contents table.
|
|
56
|
+
* @param tab table name
|
|
57
|
+
* @param opt options for the table
|
|
58
|
+
* @returns CREATE TABLE, INSERT, CREATE VIEW, CREATE INDEX statements
|
|
59
|
+
*/ export async function contentsSql(tab = "contents", opt = {}) {
|
|
60
|
+
return setupTable(tab, {
|
|
61
|
+
sno: "TEXT",
|
|
62
|
+
title: "TEXT",
|
|
63
|
+
pagenos: "TEXT"
|
|
64
|
+
}, (await loadContents()).values(), Object.assign({
|
|
65
|
+
pk: "sno",
|
|
66
|
+
index: true,
|
|
67
|
+
tsvector: {
|
|
68
|
+
sno: "A",
|
|
69
|
+
title: "B",
|
|
70
|
+
pagenos: "C"
|
|
71
|
+
}
|
|
72
|
+
}, opt));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Find matching contents of an sno/title/pagenos query.
|
|
76
|
+
* @param txt sno/title/pagenos query
|
|
77
|
+
* @returns matches `[{sno, title, pagenos}]`
|
|
78
|
+
* @example
|
|
79
|
+
* ```javascript
|
|
80
|
+
* ifct2017.contents('table 2');
|
|
81
|
+
* ifct2017.contents('Water soluble vitamins');
|
|
82
|
+
* // → [ { sno: '6.2.',
|
|
83
|
+
* // → title: 'Table 2: Water Soluble Vitamins',
|
|
84
|
+
* // → pagenos: '31' } ]
|
|
85
|
+
*
|
|
86
|
+
* ifct2017.contents('what is page number of table 3?');
|
|
87
|
+
* ifct2017.contents('fat soluble vitamin page number');
|
|
88
|
+
* // → [ { sno: '6.3.',
|
|
89
|
+
* // → title: 'Table 3: Fat Soluble Vitamins',
|
|
90
|
+
* // → pagenos: '61' } ]
|
|
91
|
+
* ```
|
|
92
|
+
*/ export function contents(txt) {
|
|
93
|
+
if (index == null) return [];
|
|
94
|
+
const a = [];
|
|
95
|
+
txt = txt.replace(/\W/g, ' ');
|
|
96
|
+
const mats = index.search(txt);
|
|
97
|
+
let max = 0;
|
|
98
|
+
for (const mat of mats)max = Math.max(max, Object.keys(mat.matchData.metadata).length);
|
|
99
|
+
for (const mat of mats)if (Object.keys(mat.matchData.metadata).length === max) a.push(corpus?.get(mat.ref) || {});
|
|
100
|
+
return a;
|
|
101
|
+
} //#endregion
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9pZmN0MjAxNy9pZmN0MjAxNy9jb250ZW50cy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKEMpIDIwMjUtMjYgU3ViaGFqaXQgU2FodVxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vLyBTZWUgTElDRU5TRSBmb3IgZnVsbCB0ZXJtc1xuaW1wb3J0ICogYXMgY3N2ICBmcm9tIFwiQHN0ZC9jc3ZcIjtcbmltcG9ydCBsdW5yIGZyb20gXCJsdW5yXCI7ICAvLyBAZGVuby10eXBlcz1cIm5wbTpAdHlwZXMvbHVuckAyLjMuN1wiXG5pbXBvcnQge3R5cGUgUm93RGF0YSwgdHlwZSBTZXR1cFRhYmxlT3B0aW9ucywgc2V0dXBUYWJsZX0gZnJvbSBcIkBub2RlZi9leHRyYS1zcWxcIjtcblxuXG5cblxuLy8jcmVnaW9uIFRZUEVTXG4vKiogQ29udGVudCBpbiB0aGUgb3JpZ2luYWwgYm9vay4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudCB7XG4gIC8qKiBTLiBOby4gKi9cbiAgc25vOiBzdHJpbmcsXG4gIC8qKiBUaXRsZS4gKi9cbiAgdGl0bGU6IHN0cmluZyxcbiAgLyoqIFBhZ2UgTm9zLiAqL1xuICBwYWdlbm9zOiBzdHJpbmdcbn07XG4vLyNlbmRyZWdpb25cblxuXG5cblxuLy8jcmVnaW9uIEdMT0JBTFNcbmxldCBjb3JwdXM6IE1hcDxzdHJpbmcsIENvbnRlbnQ+IHwgbnVsbCA9IG51bGw7XG5sZXQgaW5kZXg6IGx1bnIuSW5kZXggfCBudWxsID0gbnVsbDtcbi8vI2VuZHJlZ2lvblxuXG5cblxuXG4vLyNyZWdpb24gRlVOQ1RJT05TXG4vKipcbiAqIExvYWQgdGhlIGNvbnRlbnRzIGNvcnB1cyBmcm9tIENTViBmaWxlLlxuICogQHBhcmFtIGZpbGUgQ1NWIGZpbGUgcGF0aFxuICogQHJldHVybnMgY29udGVudHMgY29ycHVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRGcm9tQ3N2KGZpbGU6IHN0cmluZykge1xuICBjb25zdCBtYXAgID0gbmV3IE1hcDxzdHJpbmcsIENvbnRlbnQ+KCk7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCAoYXdhaXQgZmV0Y2goZmlsZSkpLnRleHQoKTtcbiAgY29uc3QgcmVjb3JkcyA9IGNzdi5wYXJzZShkYXRhLCB7c2tpcEZpcnN0Um93OiB0cnVlLCBjb21tZW50OiBcIiNcIn0pO1xuICBmb3IgKGNvbnN0IHIgb2YgcmVjb3JkcylcbiAgICBtYXAuc2V0KHIuc25vLCByIGFzIHVua25vd24gYXMgQ29udGVudCk7XG4gIHJldHVybiBtYXA7XG59XG5cblxuLyoqXG4gKiBTZXR1cCB0aGUgbHVuciBpbmRleCBmb3IgdGhlIGNvbnRlbnRzIGNvcnB1cy5cbiAqIEByZXR1cm5zIGx1bnIgaW5kZXhcbiAqL1xuZnVuY3Rpb24gc2V0dXBJbmRleChjb3JwdXM6IE1hcDxzdHJpbmcsIENvbnRlbnQ+KSB7XG4gIHJldHVybiBsdW5yKGZ1bmN0aW9uKHRoaXM6IGx1bnIuQnVpbGRlcikge1xuICAgIHRoaXMucmVmKCdzbm8nKTtcbiAgICB0aGlzLmZpZWxkKCdzbm8nKTtcbiAgICB0aGlzLmZpZWxkKCd0aXRsZScpO1xuICAgIHRoaXMuZmllbGQoJ3BhZ2Vub3MnKTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgY29ycHVzLnZhbHVlcygpKVxuICAgICAgdGhpcy5hZGQocik7XG4gIH0pO1xufVxuXG5cbi8qKlxuICogTG9hZCB0aGUgY29udGVudHMgY29ycHVzIGZyb20gdGhlIGZpbGUuXG4gKiBAcmV0dXJucyBjb250ZW50cyBjb3JwdXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRDb250ZW50cygpOiBQcm9taXNlPE1hcDxzdHJpbmcsIENvbnRlbnQ+PiB7XG4gIGlmIChjb3JwdXMpIHJldHVybiBjb3JwdXM7XG4gIGNvcnB1cyA9IGF3YWl0IGxvYWRGcm9tQ3N2KGNvbnRlbnRzQ3N2KCkpO1xuICBpbmRleCAgPSBzZXR1cEluZGV4KGNvcnB1cyk7XG4gIHJldHVybiBjb3JwdXM7XG59XG5cblxuLyoqXG4gKiBHZXQgdGhlIHBhdGggdG8gdGhlIGNvbnRlbnRzIENTViBmaWxlLlxuICogQHJldHVybnMgQ1NWIGZpbGUgVVJMXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250ZW50c0NzdigpOiBzdHJpbmcge1xuICByZXR1cm4gaW1wb3J0Lm1ldGEucmVzb2x2ZSgnLi9pbmRleC5jc3YnKTtcbn1cblxuXG4vKipcbiAqIE9idGFpbiBTUUwgY29tbWFuZCB0byBjcmVhdGUgYW5kIHBvcHVsYXRlIHRoZSBjb250ZW50cyB0YWJsZS5cbiAqIEBwYXJhbSB0YWIgdGFibGUgbmFtZVxuICogQHBhcmFtIG9wdCBvcHRpb25zIGZvciB0aGUgdGFibGVcbiAqIEByZXR1cm5zIENSRUFURSBUQUJMRSwgSU5TRVJULCBDUkVBVEUgVklFVywgQ1JFQVRFIElOREVYIHN0YXRlbWVudHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbnRlbnRzU3FsKHRhYjogc3RyaW5nPVwiY29udGVudHNcIiwgb3B0OiBTZXR1cFRhYmxlT3B0aW9ucz17fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBzZXR1cFRhYmxlKHRhYiwge3NubzogXCJURVhUXCIsIHRpdGxlOiBcIlRFWFRcIiwgcGFnZW5vczogXCJURVhUXCJ9LFxuICAgIChhd2FpdCBsb2FkQ29udGVudHMoKSkudmFsdWVzKCkgYXMgSXRlcmFibGU8Um93RGF0YT4sXG4gICAgT2JqZWN0LmFzc2lnbih7cGs6IFwic25vXCIsIGluZGV4OiB0cnVlLCB0c3ZlY3Rvcjoge3NubzogXCJBXCIsIHRpdGxlOiBcIkJcIiwgcGFnZW5vczogXCJDXCJ9fSwgb3B0KSk7XG59XG5cblxuLyoqXG4gKiBGaW5kIG1hdGNoaW5nIGNvbnRlbnRzIG9mIGFuIHNuby90aXRsZS9wYWdlbm9zIHF1ZXJ5LlxuICogQHBhcmFtIHR4dCBzbm8vdGl0bGUvcGFnZW5vcyBxdWVyeVxuICogQHJldHVybnMgbWF0Y2hlcyBgW3tzbm8sIHRpdGxlLCBwYWdlbm9zfV1gXG4gKiBAZXhhbXBsZVxuICogYGBgamF2YXNjcmlwdFxuICogaWZjdDIwMTcuY29udGVudHMoJ3RhYmxlIDInKTtcbiAqIGlmY3QyMDE3LmNvbnRlbnRzKCdXYXRlciBzb2x1YmxlIHZpdGFtaW5zJyk7XG4gKiAvLyDihpIgWyB7IHNubzogJzYuMi4nLFxuICogLy8g4oaSICAgICB0aXRsZTogJ1RhYmxlIDI6ICBXYXRlciBTb2x1YmxlIFZpdGFtaW5zJyxcbiAqIC8vIOKGkiAgICAgcGFnZW5vczogJzMxJyB9IF1cbiAqXG4gKiBpZmN0MjAxNy5jb250ZW50cygnd2hhdCBpcyBwYWdlIG51bWJlciBvZiB0YWJsZSAzPycpO1xuICogaWZjdDIwMTcuY29udGVudHMoJ2ZhdCBzb2x1YmxlIHZpdGFtaW4gcGFnZSBudW1iZXInKTtcbiAqIC8vIOKGkiBbIHsgc25vOiAnNi4zLicsXG4gKiAvLyDihpIgICAgIHRpdGxlOiAnVGFibGUgMzogIEZhdCBTb2x1YmxlIFZpdGFtaW5zJyxcbiAqIC8vIOKGkiAgICAgcGFnZW5vczogJzYxJyB9IF1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udGVudHModHh0OiBzdHJpbmcpOiBDb250ZW50W10ge1xuICBpZiAoaW5kZXggPT0gbnVsbCkgcmV0dXJuIFtdO1xuICBjb25zdCBhOiBDb250ZW50W10gPSBbXTsgdHh0ID0gdHh0LnJlcGxhY2UoL1xcVy9nLCAnICcpO1xuICBjb25zdCBtYXRzID0gaW5kZXguc2VhcmNoKHR4dCk7IGxldCBtYXggPSAwO1xuICBmb3IgKGNvbnN0IG1hdCBvZiBtYXRzKVxuICAgIG1heCA9IE1hdGgubWF4KG1heCwgT2JqZWN0LmtleXMobWF0Lm1hdGNoRGF0YS5tZXRhZGF0YSkubGVuZ3RoKTtcbiAgZm9yIChjb25zdCBtYXQgb2YgbWF0cylcbiAgICBpZiAoT2JqZWN0LmtleXMobWF0Lm1hdGNoRGF0YS5tZXRhZGF0YSkubGVuZ3RoID09PSBtYXgpIGEucHVzaChjb3JwdXM/LmdldChtYXQucmVmKSB8fCB7fSBhcyBDb250ZW50KTtcbiAgcmV0dXJuIGE7XG59XG4vLyNlbmRyZWdpb25cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQ0FBc0M7QUFDdEMsNkNBQTZDO0FBQzdDLDZCQUE2QjtBQUM3QixZQUFZLFNBQVUsV0FBVztBQUNqQyxPQUFPLFVBQVUsT0FBTyxDQUFFLHNDQUFzQztBQUNoRSxTQUE4QyxVQUFVLFFBQU8sbUJBQW1CO0FBZWxGLFlBQVk7QUFLWixpQkFBaUI7QUFDakIsSUFBSSxTQUFzQztBQUMxQyxJQUFJLFFBQTJCO0FBQy9CLFlBQVk7QUFLWixtQkFBbUI7QUFDbkI7Ozs7Q0FJQyxHQUNELGVBQWUsWUFBWSxJQUFZO0VBQ3JDLE1BQU0sTUFBTyxJQUFJO0VBQ2pCLE1BQU0sT0FBTyxNQUFNLENBQUMsTUFBTSxNQUFNLEtBQUssRUFBRSxJQUFJO0VBQzNDLE1BQU0sVUFBVSxJQUFJLEtBQUssQ0FBQyxNQUFNO0lBQUMsY0FBYztJQUFNLFNBQVM7RUFBRztFQUNqRSxLQUFLLE1BQU0sS0FBSyxRQUNkLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ2pCLE9BQU87QUFDVDtBQUdBOzs7Q0FHQyxHQUNELFNBQVMsV0FBVyxNQUE0QjtFQUM5QyxPQUFPLEtBQUs7SUFDVixJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNYLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ1gsS0FBSyxNQUFNLEtBQUssT0FBTyxNQUFNLEdBQzNCLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDYjtBQUNGO0FBR0E7OztDQUdDLEdBQ0QsT0FBTyxlQUFlO0VBQ3BCLElBQUksUUFBUSxPQUFPO0VBQ25CLFNBQVMsTUFBTSxZQUFZO0VBQzNCLFFBQVMsV0FBVztFQUNwQixPQUFPO0FBQ1Q7QUFHQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVM7RUFDZCxPQUFPLFlBQVksT0FBTyxDQUFDO0FBQzdCO0FBR0E7Ozs7O0NBS0MsR0FDRCxPQUFPLGVBQWUsWUFBWSxNQUFZLFVBQVUsRUFBRSxNQUF1QixDQUFDLENBQUM7RUFDakYsT0FBTyxXQUFXLEtBQUs7SUFBQyxLQUFLO0lBQVEsT0FBTztJQUFRLFNBQVM7RUFBTSxHQUNqRSxDQUFDLE1BQU0sY0FBYyxFQUFFLE1BQU0sSUFDN0IsT0FBTyxNQUFNLENBQUM7SUFBQyxJQUFJO0lBQU8sT0FBTztJQUFNLFVBQVU7TUFBQyxLQUFLO01BQUssT0FBTztNQUFLLFNBQVM7SUFBRztFQUFDLEdBQUc7QUFDNUY7QUFHQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0JDLEdBQ0QsT0FBTyxTQUFTLFNBQVMsR0FBVztFQUNsQyxJQUFJLFNBQVMsTUFBTSxPQUFPLEVBQUU7RUFDNUIsTUFBTSxJQUFlLEVBQUU7RUFBRSxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU87RUFDbEQsTUFBTSxPQUFPLE1BQU0sTUFBTSxDQUFDO0VBQU0sSUFBSSxNQUFNO0VBQzFDLEtBQUssTUFBTSxPQUFPLEtBQ2hCLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTTtFQUNoRSxLQUFLLE1BQU0sT0FBTyxLQUNoQixJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztFQUMxRixPQUFPO0FBQ1QsRUFDQSxZQUFZIn0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Indian Food Composition Tables 2017
|
|
2
|
+
T. Longvah, R. Ananthan, K. Bhaskarachary and K. Venkaiah
|
|
3
|
+
|
|
4
|
+
Copyright © 2017 by National Institute of Nutrition
|
|
5
|
+
Indian Council of Medical Research
|
|
6
|
+
Department of Health Research Ministry of Health and Family Welfare, Government of India
|
|
7
|
+
Jamai Osmania (PO), Hyderabad – 500 007
|
|
8
|
+
Telangana, India Phone: +91 40 27197334, Fax: +91 40 27000339, Email: nin@ap.nic.in
|
|
9
|
+
|
|
10
|
+
CONTENTS
|
|
11
|
+
- S. No.
|
|
12
|
+
- Title
|
|
13
|
+
- Page Nos.
|
package/deno.lock
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "5",
|
|
3
|
+
"specifiers": {
|
|
4
|
+
"jsr:@nodef/extra-sql@~0.1.2": "0.1.2",
|
|
5
|
+
"jsr:@std/bytes@^1.0.6": "1.0.6",
|
|
6
|
+
"jsr:@std/cli@^1.0.32": "1.0.32",
|
|
7
|
+
"jsr:@std/csv@^1.0.6": "1.0.6",
|
|
8
|
+
"jsr:@std/fmt@^1.0.10": "1.0.10",
|
|
9
|
+
"jsr:@std/internal@^1.0.14": "1.0.14",
|
|
10
|
+
"jsr:@std/path@^1.1.6": "1.1.6",
|
|
11
|
+
"jsr:@std/streams@^1.0.9": "1.1.2",
|
|
12
|
+
"npm:lunr@2.3.9": "2.3.9"
|
|
13
|
+
},
|
|
14
|
+
"jsr": {
|
|
15
|
+
"@nodef/extra-sql@0.1.2": {
|
|
16
|
+
"integrity": "915e7c47145f6f7e64ac04ab1b12c09cc3ef1964e72cd3241f7be423f6d0be8a"
|
|
17
|
+
},
|
|
18
|
+
"@std/bytes@1.0.6": {
|
|
19
|
+
"integrity": "f6ac6adbd8ccd99314045f5703e23af0a68d7f7e58364b47d2c7f408aeb5820a"
|
|
20
|
+
},
|
|
21
|
+
"@std/cli@1.0.32": {
|
|
22
|
+
"integrity": "188b3a100d6202d64e3f5bd3d799c7fa4f6d77f92cc65eb7f641c1fa0aa92a66",
|
|
23
|
+
"dependencies": [
|
|
24
|
+
"jsr:@std/fmt",
|
|
25
|
+
"jsr:@std/internal"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"@std/csv@1.0.6": {
|
|
29
|
+
"integrity": "52ef0e62799a0028d278fa04762f17f9bd263fad9a8e7f98c14fbd371d62d9fd",
|
|
30
|
+
"dependencies": [
|
|
31
|
+
"jsr:@std/streams"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"@std/fmt@1.0.10": {
|
|
35
|
+
"integrity": "90dfba288802ac6de82fb31d0917eb9e4450b9925b954d5e51fc29ac07419db5"
|
|
36
|
+
},
|
|
37
|
+
"@std/internal@1.0.14": {
|
|
38
|
+
"integrity": "291516b3d4c35024d6ffbc0a9df5bf4c64116e05b50012cf846710152d2ffdf7"
|
|
39
|
+
},
|
|
40
|
+
"@std/path@1.1.6": {
|
|
41
|
+
"integrity": "c68485c2a4dfbb5ae3cc74fae4e8c4e5d874cf8a8ed12927917235c758b46cbe",
|
|
42
|
+
"dependencies": [
|
|
43
|
+
"jsr:@std/internal"
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"@std/streams@1.1.2": {
|
|
47
|
+
"integrity": "0249bf9b78a999f57032ca4d8e7ccaa57579090242640b35ddc948fbb745d3af",
|
|
48
|
+
"dependencies": [
|
|
49
|
+
"jsr:@std/bytes"
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"npm": {
|
|
54
|
+
"lunr@2.3.9": {
|
|
55
|
+
"integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"workspace": {
|
|
59
|
+
"dependencies": [
|
|
60
|
+
"jsr:@nodef/extra-sql@~0.1.2",
|
|
61
|
+
"jsr:@std/cli@^1.0.32",
|
|
62
|
+
"jsr:@std/csv@^1.0.6",
|
|
63
|
+
"jsr:@std/path@^1.1.6",
|
|
64
|
+
"npm:lunr@2.3.9"
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
}
|