From 812c1e4779602a52b440dc8b39920d58f97ff50b Mon Sep 17 00:00:00 2001 From: David Braun Date: Tue, 2 Aug 2016 16:33:59 -0400 Subject: [PATCH 1/5] Add node_modules to .gitignore. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e69de29..3c3629e 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +node_modules From dff2fc83ac26616e2217c71f2e3d122e9f8e9d80 Mon Sep 17 00:00:00 2001 From: David Braun Date: Tue, 2 Aug 2016 16:31:25 -0400 Subject: [PATCH 2/5] Remove generated index.js from source. --- index.js | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 index.js diff --git a/index.js b/index.js deleted file mode 100644 index 366f630..0000000 --- a/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _immutable = require('immutable'); - -var _immutable2 = _interopRequireDefault(_immutable); - -var _map = require('./map'); - -var _map2 = _interopRequireDefault(_map); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = _extends({}, _immutable2.default, { - Map: _map2.default -}); From b27aab92216374ef1aab88f9b7697f8cafb94fc8 Mon Sep 17 00:00:00 2001 From: David Braun Date: Tue, 2 Aug 2016 16:37:04 -0400 Subject: [PATCH 3/5] Fix babel part of build script. --- .gitignore | 1 + package.json | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 3c3629e..3063f07 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ +lib node_modules diff --git a/package.json b/package.json index eb35046..fa5e9df 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "immutable-proxy", "version": "0.0.1", "description": "access immutable values more easily", - "main": "index.js", + "main": "lib/index.js", "peerDependencies": { "immutable": "^3.7.6" }, @@ -19,7 +19,7 @@ }, "scripts": { "test": "mocha tests --compilers js:babel-register --recursive --harmony_shipping ", - "build": "babel src/index.js --out-file index.js && npm run build-umd && npm run build-min", + "build": "babel src -d lib && npm run build-umd && npm run build-min", "build-umd": "NODE_ENV=production webpack src/index.js umd/index.js", "build-min": "NODE_ENV=production webpack -p src/index.js umd/index.min.js" }, From cb10874b183092bc83ae5de5b4090df9fff72222 Mon Sep 17 00:00:00 2001 From: David Braun Date: Tue, 2 Aug 2016 16:47:46 -0400 Subject: [PATCH 4/5] Tell CircleCI to use Node 6.1.0 for Proxy support. --- circle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circle.yml b/circle.yml index de50e36..ee1c24b 100644 --- a/circle.yml +++ b/circle.yml @@ -1,3 +1,3 @@ machine: node: - version: 5.6.0 \ No newline at end of file + version: 6.1.0 From 84e717139992995394013cc600cfafc238e25e3e Mon Sep 17 00:00:00 2001 From: David Braun Date: Tue, 2 Aug 2016 16:16:53 -0400 Subject: [PATCH 5/5] Add basic List support. --- src/index.js | 4 +++- src/list.js | 15 +++++++++++++++ tests/list.js | 14 ++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/list.js create mode 100644 tests/list.js diff --git a/src/index.js b/src/index.js index 5498d7a..db29eb7 100644 --- a/src/index.js +++ b/src/index.js @@ -1,7 +1,9 @@ import Immutable from 'immutable' +import List from './list' import Map from './map' module.exports = { ...Immutable, + List, Map -} \ No newline at end of file +} diff --git a/src/list.js b/src/list.js new file mode 100644 index 0000000..ab12495 --- /dev/null +++ b/src/list.js @@ -0,0 +1,15 @@ +import { List } from 'immutable' + +export default initialData => { + const immutableList = List(initialData) + + return new Proxy(immutableList, { + get: (proxy, name) => { + const immutableName = name === 'length' + ? 'size' + : name + + return immutableList.get(immutableName) || immutableList[immutableName] + } + }) +} diff --git a/tests/list.js b/tests/list.js new file mode 100644 index 0000000..a99c3cb --- /dev/null +++ b/tests/list.js @@ -0,0 +1,14 @@ +import List from '../src/list' +import { expect } from 'chai' + +describe('List Proxy', () => { + it('should access value without calling .get', () => { + const data = List([1, 2, 3]) + expect(data[1]).to.equal(2) + }) + + it('should provide the "length" property', () => { + const data = List([1, 2, 3]) + expect(data.length).to.equal(3) + }) +})