UNPKG

neuronjs

Version:

Neuron is A Full Feature CommonJS Module Manager, Dependency Graph Handler and Loader for Browsers

110 lines (91 loc) 1.73 kB
# TL;DR Graph > The developers' draft ## Dependency loading We say vertex X is ready, if - `X.ready === true`, or - has no dependencies, or - each dependency Y of X - is ready, or - there is a path directed from Y to X, which forms a [strongly connected graph](http://en.wikipedia.org/wiki/Strongly_connected_component), and each vertex on the path is loaded. If X is a vertex of a strongly connected graph, and X is ready, then all vertices of the graph are ready. Suppose there is a dependency graph ``` A ─────> B(ready) | v C <──────┬──────> E(ready) | | └──────> D ─────> F ─────> G ^ | | | └─────────────────┘ ``` We want to check if A is ready. So, `A.ready <==> C.ready` We are not sure if C is ready, and we found C has a dependency D, so `C.read <==> D.ready` D has 3 dependencies, - E is ready - C: there is a path C -> D - F: there is a path F -> D So, D is ready, which indicates A is ready. ## Shrinkwrap using object `refs` as optimization: ### graph ```js // modules { 0: [ "2.1.0" ], 1: [ "1.9.0" ], 2: [ "1.1.0", { "X@~1.1.0": 3 } ], 3: [ "1.1.0", { "Y@~1.1.0": 2 } ], 4: [ "1.2.0", { "D@^4.0.0": 6 "F@^2.0.0": 0 } ], 5: [ "5.0.0", { "D@^4.0.0": 7 "F@^2.0.0": 0 } ], 6: [ "4.1.0", { "E@^1.0.0": 8 } ], 7: [ "4.1.0", { "E@^1.0.0": 1 } ], 8: [ "1.1.0" ], _: { "A@*": 4, "B@5.0.0": 5, "B^5.0.0": 5 } } ```