Skip to content

Commit 933da93

Browse files
committed
Merge branch 'esm-convert'
2 parents a030fc0 + 406c740 commit 933da93

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

91 files changed

+7004
-905
lines changed

.babelrc

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"plugins": ["@babel/plugin-transform-export-namespace-from", "@babel/plugin-transform-modules-commonjs", "add-module-exports"]
3+
}

ESM-IN-BROWSER-README.html

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<!DOCTYPE html>
2+
<html ondrop="dropHandler(event);" ondragover="dragOverHandler(event);">
3+
<head>
4+
<script type="importmap">
5+
{
6+
"imports": {
7+
"@dagrejs/graphlib": "../graphlib/mjs-lib/index.js"
8+
}
9+
}
10+
</script>
11+
<script src="./mjs-lib/index.js" type="module">i
12+
import * as dagre from "./mjs-lib/index.js";
13+
// dagre something
14+
</script>
15+
</head>
16+
<body>
17+
<pre>
18+
This HTML file is an example of how you might use the ESM source directly
19+
in the browser. It can also be used to do a sanity check on the mjs-lib
20+
directory, as it will throw errors if it (the browser) cannot resolve
21+
the modules. You might want to change "../graphlib/mjs-lib/index.js"
22+
to a path pointing to your copy that you'll serve, or a copy somewhere
23+
on a CDN if one is available.
24+
25+
If you use a bundler or nodejs, this doesn't matter because, unlike
26+
a browser, they understand what "@dagrejs/graphlib" means and you
27+
don't need to resolve it manually. -- @ayjayt on github, 2024-02-01
28+
</pre>
29+
</body>
30+
</html>
31+

Makefile

+22-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
MOD = dagre
22

33
NPM = npm
4-
NYC = nyc
4+
NYC = npx nyc
55
BROWSERIFY = ./node_modules/browserify/bin/cmd.js
66
JSHINT = ./node_modules/jshint/bin/jshint
77
ESLINT = ./node_modules/eslint/bin/eslint.js
@@ -16,28 +16,31 @@ BUILD_DIR = build
1616
COVERAGE_DIR = ./.nyc_output
1717
DIST_DIR = dist
1818

19-
SRC_FILES = index.js lib/version.js $(shell find lib -type f -name '*.js')
19+
20+
MJS_FILES = $(shell find mjs-lib -type f -name '*.js')
21+
# CJS_FILES are based off mjs files.
22+
CJS_FILES = $(shell find mjs-lib -type f -name '*.js' -printf lib/%P\\n)
2023
TEST_FILES = $(shell find test -type f -name '*.js' | grep -v 'bundle-test.js')
2124
BUILD_FILES = $(addprefix $(BUILD_DIR)/, $(MOD).js $(MOD).min.js)
2225

2326
DIRS = $(BUILD_DIR)
2427

25-
.PHONY: all bench clean browser-test unit-test test dist
28+
.PHONY: all bench clean convert-clean browser-test unit-test test dist
2629

2730
all: unit-test lint
2831

2932
bench: test
3033
@src/bench.js
3134

32-
lib/version.js: package.json
35+
mjs-lib/version.js: package.json
3336
@src/release/make-version.js > $@
3437

3538
$(DIRS):
3639
@mkdir -p $@
3740

3841
test: unit-test browser-test
3942

40-
unit-test: $(SRC_FILES) $(TEST_FILES) node_modules | $(BUILD_DIR)
43+
unit-test: convert index.js $(CJS_FILES) $(TEST_FILES) node_modules | $(BUILD_DIR)
4144
@$(NYC) $(MOCHA) --dir $(COVERAGE_DIR) -- $(MOCHA_OPTS) $(TEST_FILES) || $(MOCHA) $(MOCHA_OPTS) $(TEST_FILES)
4245

4346
browser-test: $(BUILD_DIR)/$(MOD).js
@@ -46,11 +49,14 @@ browser-test: $(BUILD_DIR)/$(MOD).js
4649
bower.json: package.json src/release/make-bower.json.js
4750
@src/release/make-bower.json.js > $@
4851

52+
# index.js still uses require!
53+
index.js: convert
54+
4955
lint:
5056
@$(JSHINT) $(JSHINT_OPTS) $(filter-out node_modules, $?)
51-
@$(ESLINT) $(SRC_FILES) $(TEST_FILES)
57+
@$(ESLINT) $(MJS_FILES) $(TEST_FILES)
5258

53-
$(BUILD_DIR)/$(MOD).js: index.js $(SRC_FILES) | unit-test
59+
$(BUILD_DIR)/$(MOD).js: index.js $(CJS_FILES) | unit-test
5460
@$(BROWSERIFY) $< > $@ -s dagre
5561

5662
$(BUILD_DIR)/$(MOD).min.js: $(BUILD_DIR)/$(MOD).js
@@ -73,3 +79,12 @@ clean:
7379
node_modules: package.json
7480
@$(NPM) install
7581
@touch $@
82+
83+
lib/%.js: mjs-lib/%.js
84+
npx babel "$<" -o "$@"
85+
86+
convert-clean:
87+
rsync --existing --ignore-existing --delete -r mjs-lib/ lib/
88+
89+
convert: convert-clean $(CJS_FILES)
90+

lib/acyclic.js

+10-18
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,32 @@
11
"use strict";
22

3-
let greedyFAS = require("./greedy-fas");
4-
let uniqueId = require("./util").uniqueId;
5-
6-
module.exports = {
7-
run: run,
8-
undo: undo
9-
};
10-
3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
exports.run = run;
7+
exports.undo = undo;
8+
var _greedyFas = _interopRequireDefault(require("./greedy-fas.js"));
9+
var _util = require("./util.js");
10+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1111
function run(g) {
12-
let fas = (g.graph().acyclicer === "greedy"
13-
? greedyFAS(g, weightFn(g))
14-
: dfsFAS(g));
12+
let fas = g.graph().acyclicer === "greedy" ? (0, _greedyFas.default)(g, weightFn(g)) : dfsFAS(g);
1513
fas.forEach(e => {
1614
let label = g.edge(e);
1715
g.removeEdge(e);
1816
label.forwardName = e.name;
1917
label.reversed = true;
20-
g.setEdge(e.w, e.v, label, uniqueId("rev"));
18+
g.setEdge(e.w, e.v, label, (0, _util.uniqueId)("rev"));
2119
});
22-
2320
function weightFn(g) {
2421
return e => {
2522
return g.edge(e).weight;
2623
};
2724
}
2825
}
29-
3026
function dfsFAS(g) {
3127
let fas = [];
3228
let stack = {};
3329
let visited = {};
34-
3530
function dfs(v) {
3631
if (visited.hasOwnProperty(v)) {
3732
return;
@@ -47,17 +42,14 @@ function dfsFAS(g) {
4742
});
4843
delete stack[v];
4944
}
50-
5145
g.nodes().forEach(dfs);
5246
return fas;
5347
}
54-
5548
function undo(g) {
5649
g.edges().forEach(e => {
5750
let label = g.edge(e);
5851
if (label.reversed) {
5952
g.removeEdge(e);
60-
6153
let forwardName = label.forwardName;
6254
delete label.reversed;
6355
delete label.forwardName;

lib/add-border-segments.js

+19-11
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,45 @@
1-
let util = require("./util");
2-
3-
module.exports = addBorderSegments;
1+
"use strict";
42

3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
exports.default = addBorderSegments;
7+
var util = _interopRequireWildcard(require("./util.js"));
8+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
9+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
510
function addBorderSegments(g) {
611
function dfs(v) {
712
let children = g.children(v);
813
let node = g.node(v);
914
if (children.length) {
1015
children.forEach(dfs);
1116
}
12-
1317
if (node.hasOwnProperty("minRank")) {
1418
node.borderLeft = [];
1519
node.borderRight = [];
16-
for (let rank = node.minRank, maxRank = node.maxRank + 1;
17-
rank < maxRank;
18-
++rank) {
20+
for (let rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) {
1921
addBorderNode(g, "borderLeft", "_bl", v, node, rank);
2022
addBorderNode(g, "borderRight", "_br", v, node, rank);
2123
}
2224
}
2325
}
24-
2526
g.children().forEach(dfs);
2627
}
27-
2828
function addBorderNode(g, prop, prefix, sg, sgNode, rank) {
29-
let label = { width: 0, height: 0, rank: rank, borderType: prop };
29+
let label = {
30+
width: 0,
31+
height: 0,
32+
rank: rank,
33+
borderType: prop
34+
};
3035
let prev = sgNode[prop][rank - 1];
3136
let curr = util.addDummyNode(g, "border", label, prefix);
3237
sgNode[prop][rank] = curr;
3338
g.setParent(curr, sg);
3439
if (prev) {
35-
g.setEdge(prev, curr, { weight: 1 });
40+
g.setEdge(prev, curr, {
41+
weight: 1
42+
});
3643
}
3744
}
45+
module.exports = exports.default;

lib/coordinate-system.js

+5-15
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,37 @@
11
"use strict";
22

3-
module.exports = {
4-
adjust: adjust,
5-
undo: undo
6-
};
7-
3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
exports.adjust = adjust;
7+
exports.undo = undo;
88
function adjust(g) {
99
let rankDir = g.graph().rankdir.toLowerCase();
1010
if (rankDir === "lr" || rankDir === "rl") {
1111
swapWidthHeight(g);
1212
}
1313
}
14-
1514
function undo(g) {
1615
let rankDir = g.graph().rankdir.toLowerCase();
1716
if (rankDir === "bt" || rankDir === "rl") {
1817
reverseY(g);
1918
}
20-
2119
if (rankDir === "lr" || rankDir === "rl") {
2220
swapXY(g);
2321
swapWidthHeight(g);
2422
}
2523
}
26-
2724
function swapWidthHeight(g) {
2825
g.nodes().forEach(v => swapWidthHeightOne(g.node(v)));
2926
g.edges().forEach(e => swapWidthHeightOne(g.edge(e)));
3027
}
31-
3228
function swapWidthHeightOne(attrs) {
3329
let w = attrs.width;
3430
attrs.width = attrs.height;
3531
attrs.height = w;
3632
}
37-
3833
function reverseY(g) {
3934
g.nodes().forEach(v => reverseYOne(g.node(v)));
40-
4135
g.edges().forEach(e => {
4236
let edge = g.edge(e);
4337
edge.points.forEach(reverseYOne);
@@ -46,14 +40,11 @@ function reverseY(g) {
4640
}
4741
});
4842
}
49-
5043
function reverseYOne(attrs) {
5144
attrs.y = -attrs.y;
5245
}
53-
5446
function swapXY(g) {
5547
g.nodes().forEach(v => swapXYOne(g.node(v)));
56-
5748
g.edges().forEach(e => {
5849
let edge = g.edge(e);
5950
edge.points.forEach(swapXYOne);
@@ -62,7 +53,6 @@ function swapXY(g) {
6253
}
6354
});
6455
}
65-
6656
function swapXYOne(attrs) {
6757
let x = attrs.x;
6858
attrs.x = attrs.y;

lib/data/list.js

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
"use strict";
2+
3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
exports.default = void 0;
17
/*
28
* Simple doubly linked list implementation derived from Cormen, et al.,
39
* "Introduction to Algorithms".
@@ -9,7 +15,6 @@ class List {
915
sentinel._next = sentinel._prev = sentinel;
1016
this._sentinel = sentinel;
1117
}
12-
1318
dequeue() {
1419
let sentinel = this._sentinel;
1520
let entry = sentinel._prev;
@@ -18,7 +23,6 @@ class List {
1823
return entry;
1924
}
2025
}
21-
2226
enqueue(entry) {
2327
let sentinel = this._sentinel;
2428
if (entry._prev && entry._next) {
@@ -29,7 +33,6 @@ class List {
2933
sentinel._next = entry;
3034
entry._prev = sentinel;
3135
}
32-
3336
toString() {
3437
let strs = [];
3538
let sentinel = this._sentinel;
@@ -41,18 +44,16 @@ class List {
4144
return "[" + strs.join(", ") + "]";
4245
}
4346
}
44-
47+
exports.default = List;
4548
function unlink(entry) {
4649
entry._prev._next = entry._next;
4750
entry._next._prev = entry._prev;
4851
delete entry._next;
4952
delete entry._prev;
5053
}
51-
5254
function filterOutLinks(k, v) {
5355
if (k !== "_next" && k !== "_prev") {
5456
return v;
5557
}
5658
}
57-
58-
module.exports = List;
59+
module.exports = exports.default;

0 commit comments

Comments
 (0)