1 | import { readFile } from "fs";
|
2 | import { handleError, info } from "./error";
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | export default function(deps, config, d3) {
|
13 | return new Promise(resolve => {
|
14 | deps = extendDeps([], deps, config, d3);
|
15 | readAll(deps, config, resolve);
|
16 | });
|
17 | }
|
18 |
|
19 | function readAll(deps, config, resolve) {
|
20 | if (!deps.length) return resolve(config);
|
21 | var dep = deps.splice(0, 1)[0],
|
22 | current = config.dependencies[dep.name];
|
23 | current = current || {};
|
24 | if (current.origin) return readAll(deps, config, resolve);
|
25 |
|
26 | readFile(
|
27 | `${config.node_modules}/${dep.name}/package.json`,
|
28 | "utf-8",
|
29 | (error, text) => {
|
30 | if (error) handleError(error, true);
|
31 | else {
|
32 | var json = JSON.parse(text),
|
33 | main = location(current.main || json.main);
|
34 | info(config, `${dep.name} @ ${dep.version}/${main}`);
|
35 | config.dependencies[dep.name] = {
|
36 | version: dep.version,
|
37 | main: main
|
38 | };
|
39 | if (dep.name.substring(0, 3) === "d3-")
|
40 | extendDeps(deps, json.dependencies, config, true);
|
41 | }
|
42 | readAll(deps, config, resolve);
|
43 | }
|
44 | );
|
45 | }
|
46 |
|
47 | function extendDeps(deps, dependencies, config, d3) {
|
48 | var version, t;
|
49 | dependencies = dependencies || {};
|
50 | Object.keys(dependencies).forEach(function(name) {
|
51 | if (
|
52 | !config.available.has(name) &&
|
53 | (!d3 || name.substring(0, 3) === "d3-")
|
54 | ) {
|
55 | version = dependencies[name];
|
56 | info(config, `${name} ${version}`);
|
57 | t = version.split(".").reduce((s, v) => s + +v, 0);
|
58 | if (t !== t)
|
59 | handleError("Cannot set dependency " + name + " " + version, true);
|
60 | else {
|
61 | deps.push({
|
62 | name: name,
|
63 | version: version
|
64 | });
|
65 | config.available.add(name);
|
66 | }
|
67 | }
|
68 | });
|
69 | return deps;
|
70 | }
|
71 |
|
72 | function location(main) {
|
73 | if (!main) return "";
|
74 | if (main.substring(0, 1) === "/") main = main.substring(1);
|
75 | else if (main.substring(0, 2) === "./") main = main.substring(2);
|
76 | return main;
|
77 | }
|