Skip to content

Commit 5a96d45

Browse files
committed
Add Mutable.
1 parent c42ea41 commit 5a96d45

File tree

6 files changed

+61
-40
lines changed

6 files changed

+61
-40
lines changed

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@
1111
"url": "https://github.com/observablehq/notebook-stdlib.git"
1212
},
1313
"scripts": {
14-
"test": "tape -r @std/esm 'test/**/*-test.js'",
14+
"test": "tape -r esm 'test/**/*-test.js'",
1515
"precommit": "eslint . && yarn test"
1616
},
17-
"@std/esm": {
18-
"esm": "js",
17+
"esm": {
18+
"mode": "all",
1919
"cjs": true
2020
},
2121
"dependencies": {
22-
"@std/esm": "^0.16.0",
22+
"esm": "^3.0.5",
2323
"d3-require": "^0.6.6"
2424
},
2525
"devDependencies": {

src/index.js

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,2 @@
1-
import {resolve as resolveDefault, requireFrom} from "d3-require";
2-
import constant from "./constant";
3-
import DOM from "./dom/index";
4-
import Files from "./files/index";
5-
import Generators from "./generators/index";
6-
import html from "./html";
7-
import md from "./md";
8-
import now from "./now";
9-
import Promises from "./promises/index";
10-
import svg from "./svg";
11-
import tex from "./tex";
12-
import width from "./width";
13-
14-
export default function Library(resolve) {
15-
if (resolve == null) resolve = resolveDefault;
16-
var require = requireFrom(resolve);
17-
Object.defineProperties(this, {
18-
DOM: {value: DOM, enumerable: true},
19-
Files: {value: Files, enumerable: true},
20-
Generators: {value: Generators, enumerable: true},
21-
Promises: {value: Promises, enumerable: true},
22-
require: {value: constant(require), enumerable: true},
23-
resolve: {value: constant(resolve), enumerable: true},
24-
html: {value: constant(html), enumerable: true},
25-
md: {value: md(require, resolve), enumerable: true},
26-
svg: {value: constant(svg), enumerable: true},
27-
tex: {value: tex(require, resolve), enumerable: true},
28-
now: {value: now, enumerable: true},
29-
width: {value: width, enumerable: true}
30-
});
31-
}
1+
export {default as Library} from "./library";
2+
export {default as Mutable} from "./mutable";

src/library.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import {resolve as resolveDefault, requireFrom} from "d3-require";
2+
import constant from "./constant";
3+
import DOM from "./dom/index";
4+
import Files from "./files/index";
5+
import Generators from "./generators/index";
6+
import html from "./html";
7+
import md from "./md";
8+
import now from "./now";
9+
import Promises from "./promises/index";
10+
import svg from "./svg";
11+
import tex from "./tex";
12+
import width from "./width";
13+
14+
export default function Library(resolve) {
15+
if (resolve == null) resolve = resolveDefault;
16+
var require = requireFrom(resolve);
17+
Object.defineProperties(this, {
18+
DOM: {value: DOM, enumerable: true},
19+
Files: {value: Files, enumerable: true},
20+
Generators: {value: Generators, enumerable: true},
21+
Promises: {value: Promises, enumerable: true},
22+
require: {value: constant(require), enumerable: true},
23+
resolve: {value: constant(resolve), enumerable: true},
24+
html: {value: constant(html), enumerable: true},
25+
md: {value: md(require, resolve), enumerable: true},
26+
svg: {value: constant(svg), enumerable: true},
27+
tex: {value: tex(require, resolve), enumerable: true},
28+
now: {value: now, enumerable: true},
29+
width: {value: width, enumerable: true}
30+
});
31+
}

src/mutable.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import observe from "./generators/observe";
2+
3+
export default function Mutable(value) {
4+
let change;
5+
Object.defineProperties(this, {
6+
generator: {value: observe(_ => change = _)},
7+
value: {
8+
get: function() { return value; },
9+
set: function(x) { return change((value = x)); }
10+
}
11+
});
12+
if (value !== undefined) change(value);
13+
}
14+
15+
Mutable.value = function(init) {
16+
return function() {
17+
return new Mutable(init.apply(this, arguments));
18+
};
19+
};

test/index-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import tape from "tape-await";
2-
import Library from "../src/";
2+
import Library from "../src/library";
33

44
tape("new Library returns a library with the expected keys", async test => {
55
test.deepEqual(Object.keys(new Library()).sort(), [

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22
# yarn lockfile v1
33

44

5-
"@std/esm@^0.16.0":
6-
version "0.16.0"
7-
resolved "https://registry.yarnpkg.com/@std/esm/-/esm-0.16.0.tgz#2a7a33ecb7f1701cebd4c87df6d0d945ed51f730"
8-
95
abab@^1.0.4:
106
version "1.0.4"
117
resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"
@@ -427,6 +423,10 @@ eslint@^4.12.1:
427423
table "^4.0.1"
428424
text-table "~0.2.0"
429425

426+
esm@^3.0.5:
427+
version "3.0.25"
428+
resolved "https://registry.yarnpkg.com/esm/-/esm-3.0.25.tgz#d374e714c07abe0b8a7e80d18819e5823e491dbd"
429+
430430
espree@^3.5.2:
431431
version "3.5.2"
432432
resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca"

0 commit comments

Comments
 (0)