{"_id":"typed-immutable","_rev":"19-86cbd76f0c9f5b6dfecafba7ae10a9ad","name":"typed-immutable","time":{"modified":"2022-06-28T00:51:46.167Z","created":"2015-04-04T09:42:58.868Z","0.0.1":"2015-04-04T09:42:58.868Z","0.0.2":"2015-04-08T00:32:09.080Z","0.0.3":"2015-04-19T09:13:52.224Z","0.0.4":"2015-05-24T18:49:12.030Z","0.0.5":"2015-07-01T07:13:39.142Z","0.0.6":"2015-07-05T05:18:26.279Z","0.0.7":"2015-07-10T13:53:56.861Z","0.0.8":"2016-07-29T18:22:46.122Z","0.0.9":"2016-12-09T06:01:03.128Z","0.1.0":"2016-12-09T06:57:20.614Z","0.1.2":"2017-02-23T00:38:37.973Z"},"maintainers":[{"email":"lukesneeringer@google.com","name":"lukesneeringer"},{"email":"sakabako@gmail.com","name":"sakabako"},{"email":"rfobic@gmail.com","name":"gozala"}],"dist-tags":{"latest":"0.1.2"},"description":"Immutable structurally typed data","readme":"# Typed-immutable [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url]\n=========\n\nLibrary provides is built upon [immutable.js][] to leverage it’s immutable [persistent][] data and provide structural typing on top of that. Library is not aiming to provide type safety of typed language (some static type checker like [flow][] would be tool for that) although it allows user to define structured types and guarantees that values produced and later transformed will conform to pre-defined structure. Handy use case for such tool would be an application state modelling (in [MVC][] sense), specially if state is centralised but compartmentalized for us by independent components.\n\n\n## API\n\nIn the following sections we would use term \"type\" for a javascript class that can be instantiated via function call (although use of `new` still possible) and produces immutable persistent data structure that we’ll refer to as \"value\" as they will have more common with primitive values like strings or numbers than with objects.\n\n### Record\n\nRecords are a labeled data structure. They provide a lightweight representation for complex data. Record types can be defined by invoking `Record` function with a type structure descriptor, that is an object that provides field names and types associated with them:\n\n```js\nvar {Record} = require(\"typed-immutable\")\n\nvar Point = Record({x: Number, y: Number})\n```\n\nRecord types maybe invoked as functions or instantiated as a class to produce a value in form of immutable object with a pre-defined structure:\n\n```js\nPoint({x:0, y:0}) // => {x:0, y:0}\nnew Point({x: 0, y:0}) // => {x:0, y:0}\n```\n\nRecord types enforce pre-defined structure and will fail if input provided does not match it:\n\n```js\nPoint() // => TypeError: Invalid value for \"x\" field:\n        //               \"undefined\" is not a number\n\n\nPoint({x: \"1\", y: \"2\"}) // => TypeError: Invalid value for \"x\" field:\n                        //     \"1\" is not a number\n```\n\n\nRecord types definitions may also be provided a default values for feilds for a convenience of use:\n\n```js\nvar Point = Record({x: Number(0), y: Number(0)})\nPoint() // => { \"x\": 0, \"y\": 0 }\nPoint({x: 20}) // => { \"x\": 20, \"y\": 0 }\n\nPoint({x: null}) // => TypeError: Invalid value for \"x\" field:\n                 //     \"null\" is not a number\n```\n\nRecord fields can be accessed by name via property access syntax:\n\n```js\nvar p1 = Point({x: 17})\np1.x // => 17\np1.y // => 0\n```\n\nAttempts to update a field will fail with error:\n\n```js\np1.x = 30 // =>  TypeError: Cannot set on an immutable record.\n```\n\nInstead of changing a record values you can transform them or create new values from existing one similar to how you do that with strings or numbers:\n\n```js\np1 = Point() // => {x:0, y:0}\np1.set(\"x\", 7) // => {x: 7, y:0}\np1 // => {x:0, y:0}\n```\n\nRemoveing a field from a record simply resets it's value to the default if one was defined.\n\n```js\nvar p1 = Point({x: 1, y: 25}) // => {x:1, y:25}\np1.remove(\"y\") // => {x:1, y:0}\n```\n\nRecord types proudce values with only fields that they were defined with everything else\nthey simply ignore:\n\n```js\nPoint({x:30, y:40, z:8}) // => {x:30, y:40}\n```\n\nAlthough the do explicitly forbid setting undeclared fields with error:\n\n```js\nPoint().set(\"z\", 5) // => TypeError: Cannot set unknown field \"z\" on \"Typed.Record({x: Number(0), y: Number(0)})\"\n```\n\nRecord values are actually instances of the record type / class but given immutablity they have much more common with values which is why we refer to them as such:\n\n```js\nvar p1 = Point()\np1 instanceof Point // true\np1.x // => 0\np1.y // => 0\n\nvar p2 = p1.merge({x: 23})\np2 instanceof Point // true\np2.x // => 23\np2.y // => 0\n\np1.equals(Point()) // => true\n\np1.equals(p2) // => false\n\np2.equals(Point({x: 23})) // => true\n```\n\nRecord values serialize to strings that containing their value and a type signature\n\n```js\nPoint({x:23}).toString() // => ‘Typed.Record({x: Number(0), y: Number(0)})({ \"x\": 23, \"y\": 0 })’\n```\n\nBut for records with large number of fields it maybe more handy to provide a name, that\ncan be done during definition:\n\n```js\nvar Point = Record({x: Number(0), y: Number(0)}, \"Point\")\n\nPoint({x: 4, y: 7}).toString() // => ‘Point({ \"x\": 4, \"y\": 7 })’\n```\n\n##### Nested records\n\nFor any complex data defining records contaning records is crucial, which works exactly as expected:\n\n```js\nvar Line = Record({begin: Point, end: Point}, \"Line\")\nvar line = Line({end: {x: 70}})\n\nline instanceof Line // => true\n\nline.toString() // => Line({ \"begin\": Point({ \"x\": 0, \"y\": 0 }), \"end\": Point({ \"x\": 70, \"y\": 0 }) })\n\nline.begin // => {x: 0, y:0}\nline.begin instanceof Point // => true\n\nline.end // => {x: 70, y:0}\nline.end instanceof Point // => true\n```\n\nAs with primitive fields you could provide defaults to a complex records as well:\n\n```js\nvar Line = Record({begin: Point({x:23}), end: Point({y:4})}, \"Line\")\nLine().toString() //=> Line({ \"begin\": Point({ \"x\": 23, \"y\": 0 }), \"end\": Point({ \"x\": 0, \"y\": 4 }) })\n```\n\nRecords can be serialized to JSON and then instantiated back to an equal record value:\n\n```js\nLine(line.toJSON()).equals(line) // => true\n```\n\n### List\n\nYou can define typed lists by providing a `List` function a type that it’s\nitems are supposed to be of:\n\n```js\nvar {List} = require(\"typed-immutable\")\n\nvar Numbers = List(Number)\n\nNumbers().toString() // ‘Typed.List(Number)([])’\n\nNumbers.of(1, 2, 3).toString() // => ‘Typed.List(Number)([ 1, 2, 3 ])’\n```\n\nTyped lists may contain only items of that type and fail with error if attempted to do otherwise:\n\n```js\nNumbers([2, 3]).toString() // => Typed.List(Number)([ 2, 3 ])\n\nNumbers([1, 2, 3, \"4\", \"5\"]) // => TypeError: Invalid value: \"4\" is not a number\n\nNumbers([1, 2, 3]).push(null) // => TypeError: Invalid value: \"null\" is not a number\n```\n\nTyped lists can also be named for convenience:\n\n```js\nvar Strings = List(String, \"Strings\")\n\nStrings.of(\"hello\", \"world\").toString() // => Strings([ \"hello\", \"world\" ])\n```\n\nList can be of a complex a specific record type & records can also have fields of typed list:\n\n\n```js\nvar Points = List(Point, \"Points\")\nPoints().toString() // => Points([])\n\nps = Points.of({x:3}, {y: 5}).toString()\nps.toString() // => Points([ Point({ \"x\": 3, \"y\": 0 }), Point({ \"x\": 0, \"y\": 5 }) ])'\n\nps.get(0) instanceof Point // => true\nps.get(1) instanceof Point // => true\n\nps.get(0).x // => 3\nps.get(1).y // => 5\n\nps.push({z:4, x:-4}).toJSON() // => [ { x: 3, y: 0 }, { x: 0, y: 5 }, { x: -4, y: 0 } ]\n\nPoints(ps.toJSON()).equals(ps) // => true\n```\n\n##### mapping lists form one type to other\n\nOne somewhat tricky thing about lists is that while they enforce certain type they can also be as easily converted to list of other type by simply mapping it:\n\n```js\nps = Points.of({x:1}, {x:2})\nxs = ps.map(p => p.x)\n\nps.toString() // => Points([ Point({ \"x\": 1, \"y\": 0 }), Point({ \"x\": 2, \"y\": 0 }) ])\nxs.toString() // => Typed.List(Number)([ 1, 2 ])\n```\n\nAs you can see from example above original `ps` list was of `Point` records while mapped `xs` list is of numbers and that is refleced in the type of the list. Although given that JS is untyped language theer is no guarantee that mapping function will return values of the same type which makes things little more complex, result of such mapping will be list of union type of all types that mapping funciton produced (see types section for union types).\n\n### Map\n\nYou can define a typed map by providing `Map` the type for the key and the type for the value:\n\n```js\nvar {Map, Record} = require(\"typed-immutable\")\nvar Product = Record({name: String}, \"Product\")\n\nvar Products = Map(Number, Product)\n\nProducts().toString() // ‘Typed.Map(Number, Product)({})’\n\nProducts([[1, {name: \"Mapper 1000\"}]]).toString() \n//Typed.Map(Number, Product)({ 1: Product({ \"name\": \"Mapper 1000\" }) })\n```\n\nTyped maps may contain only entries with key and value that match the specified type:\n\n```js\n\nProducts([[1, \"Mapper 1000\"]]) \n// => TypeError: Invalid value: Invalid data structure \"Mapper 1000\" was passed to Product\n\nProducts().set(\"P1\", {name: \"Mapper 1000\"}) \n// TypeError: Invalid key: \"P1\" is not a number\n\n// All keys in an object are strings, so this fails too:\nProducts({1: {name: \"Mapper 1000\"}}) // TypeError: Invalid key: \"1\" is not a number \n```\n\nNote the last example - all keys in an object are strings so if you instantiate a map from an object the type of your key must be a string (or something that handles strings).\n\nAs with other types Typed maps can also be named for convenience:\n\n```js\nvar Products = Map(Number, Product, \"Products\")\nProducts([[1, {name: \"Mapper 1000\"}]]).toString() \n// Products({ 1: Product({ \"name\": \"Mapper 1000\" }) })\n```\n\n### Types\n\nAs it was illustrated in above sections we strucutre our types using other types there for this libary supports most JS types out of the box and provides few extra to cover more complex cases.\n\n#### JS native types\n\nYou can use `Boolean` `Number` `String` `RegExp` JS built-in constructs structures of those types.\n\n#### Maybe\n\nYou can define an optional type using `Maybe` that will produce a type whos value can be `undefined` `null` or a value of the provided type:\n\n```js\nvar {Maybe} = require(\"typed-immutable\")\nvar Color = Record({\n  red: Number(0),\n  green: Number(0),\n  blue: Number(0),\n  opacity: Maybe(Number)\n})\n\nColor().toJSON() // => { red: 0, green: 0, blue: 0, opacity: null }\nColor({red: 200, opacity: 80}).toJSON() // => { red: 200, green: 0, blue: 0, alpha: 80 }\nColor({red: 200, opacity: \"transparent\"}) // => TypeError: Invalid value for \"opacity\" field:\n                                          // \"transparent\" is not nully nor it is of Number type\n```\n\n#### Union\n\nA union type is a way to put together many different types. This lets you create list or records fields that can take  either one of the several types:\n\n```js\nvar {Union} = require(\"typed-immutable\")\nvar Form = Record({\n  user: Union(Username, Email),\n  password: String('')\n})\n\nvar form = Form()\nform.set('user', Username('gozala'))\nform.set('user', Email('gozala@mail.com'))\n```\n\n#### Custom Type\n\nLibrary lets you declare your own custom types that then you can use in defining more complex types with records and lists:\n\n```js\nvar {Typed} = require(\"typed-immutable\")\nvar Range = (from, to=+Infinity) =>\n  Typed(`Typed.Number.Range(${from}..${to})`, value => {\n    if (typeof(value) !== 'number') {\n      return TypeError(`\"${value}\" is not a number`)\n    }\n\n    if (!(value >= from && value <= to)) {\n      return TypeError(`\"${value}\" isn't in the range of ${from}..${to}`)\n    }\n\n    return value\n  })\n\nvar Color = Record({\n  red: Range(0, 255),\n  green: Range(0, 255),\n  blue: Range(0, 255)\n})\n\nColor({red: 20, green: 20, blue: 20}).toJSON() // => { red: 20, green: 20, blue: 20 }\nColor({red: 20, green: 20, blue: 300}) // => TypeError: Invalid value for \"blue\" field:\n                                       // \"300\" isn't in the range of 0..255\n\nColor() // => TypeError: Invalid value for \"red\" field:\n        // \"undefined\" is not a number\n\nvar Color = Record({\n  red: Range(0, 255)(0),\n  green: Range(0, 255)(0),\n  blue: Range(0, 255)(0)\n})\n\nColor().toJSON() // => { red: 0, green: 0, blue: 0 }\n```\n\nAs a matter of fact `Typed` contains bunch of other types including `Typed.Number.Range` similar to one from the example above.\n\n#### Any type\n\nWhile this defeats the whole purpose there are still cases where use of `Any` type may be a good short term solution. In addition as described in the section about list mapping lists could be mapped to arbitrary types and there are cases where result of mapping is `List(Any)`:\n\n```js\nvar {Any} = require(\"typed-immutable\")\nvar Box = Record({value: Any})\n\nvar v1 = Box({value: 5})\nvar v2 = v1.set(\"value\", \"hello\")\nvar v3 = v2.set(\"value\", v2)\n\nv1.toString() // => Typed.Record({value: Any})({ \"value\": 5 })\nv2.toString() // => Typed.Record({value: Any})({ \"value\": \"hello\" })\nv3.toString() // => Typed.Record({value: Any})({ \"value\": Typed.Record({value: Any})({ \"value\": \"hello\" }) })\n```\n\n## Contribution\n- Run `npm start` before `npm test` as the tests are ran on built code\n\n## License\n\n[MIT License](http://en.wikipedia.org/wiki/MIT_License)\n\n[npm-url]: https://npmjs.org/package/typed-immutable\n[npm-image]: https://img.shields.io/npm/v/typed-immutable.svg?style=flat\n\n[travis-url]: https://travis-ci.org/typed-immutable/typed-immutable\n[travis-image]: https://img.shields.io/travis/typed-immutable/typed-immutable.svg?style=flat\n\n\n[immutable.js]:http://facebook.github.io/immutable-js/\n[Persistent]:http://en.wikipedia.org/wiki/Persistent_data_structure\n[MVC]:http://en.wikipedia.org/wiki/Model–view–controller\n[structs]:http://en.wikipedia.org/wiki/Struct_(C_programming_language)\n[flow]:http://flowtype.org\n","versions":{"0.0.2":{"name":"typed-immutable","version":"0.0.2","description":"Immutable structurally typed data","author":{"name":"Irakli Gozalishvili","email":"rfobic@gmail.com","url":"http://jeditoolkit.com"},"homepage":"https://github.com/gozala/typed-immutable","keywords":["record","structure","schema","typed","immutable","data","persistent","datastructure","functional"],"repository":{"type":"git","url":"git://github.com/gozala/typed-immutable.git","web":"https://github.com/Gozala/typed-immutable"},"bugs":{"url":"https://github.com/gozala/typed-immutable/issues"},"license":"MIT","main":"./lib/index.js","directories":{"test":"test"},"scripts":{"test":"tap lib/test/*.js","start":"babel --watch --modules umdStrict --source-maps-inline --out-dir ./lib ./src","prepublish":"babel --modules umdStrict --source-maps-inline --out-dir ./lib ./src"},"dependencies":{"immutable":"^3.7.0"},"devDependencies":{"babel":"^4.7.4","immutable":"^3.6.4","tap":"~0.4.8","tape":"~2.3.2"},"gitHead":"545e2a72570e8e7d17056c1e1465a3d70960e391","_id":"typed-immutable@0.0.2","_shasum":"3303167a1f96d5efee960f39407b1c3a430fff2b","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"gozala","email":"rfobic@gmail.com"},"maintainers":[{"name":"gozala","email":"rfobic@gmail.com"}],"dist":{"shasum":"3303167a1f96d5efee960f39407b1c3a430fff2b","tarball":"https://registry.npmjs.org/typed-immutable/-/typed-immutable-0.0.2.tgz","integrity":"sha512-MrSag/PLkn67XuNHi9+oHDDeRxk2e7ZmW7UyIxCHi2dK+hpqcnnZZFSkslQc6sWN+RPJlKadYcuFX1oJymiMkQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE9rA1GQy+gQcETNluriNw0U1QSIcuxLRVTiJLCursOhAiBlXTVSgSmVmNGOu3R+k4gPgjWLUyHAXZsyrFjhCZcq/A=="}]}},"0.0.3":{"name":"typed-immutable","version":"0.0.3","description":"Immutable structurally typed data","author":{"name":"Irakli Gozalishvili","email":"rfobic@gmail.com","url":"http://jeditoolkit.com"},"homepage":"https://github.com/gozala/typed-immutable","keywords":["record","structure","schema","typed","immutable","data","persistent","datastructure","functional"],"repository":{"type":"git","url":"git://github.com/gozala/typed-immutable.git","web":"https://github.com/Gozala/typed-immutable"},"bugs":{"url":"https://github.com/gozala/typed-immutable/issues"},"license":"MIT","main":"./lib/index.js","directories":{"test":"test"},"scripts":{"test":"tap lib/test/*.js","start":"babel --watch --modules umdStrict --source-maps-inline --out-dir ./lib ./src","prepublish":"babel --modules umdStrict --source-maps-inline --out-dir ./lib ./src"},"dependencies":{"immutable":"^3.7.0"},"devDependencies":{"babel":"^4.7.4","immutable":"^3.6.4","tap":"~0.4.8","tape":"~2.3.2"},"gitHead":"d6ab846d92c1d6129748393615154cc6df98a3dc","_id":"typed-immutable@0.0.3","_shasum":"cbe8557aa17151f16aee763b30df676332bd5656","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"gozala","email":"rfobic@gmail.com"},"maintainers":[{"name":"gozala","email":"rfobic@gmail.com"}],"dist":{"shasum":"cbe8557aa17151f16aee763b30df676332bd5656","tarball":"https://registry.npmjs.org/typed-immutable/-/typed-immutable-0.0.3.tgz","integrity":"sha512-yfAiHsj1jx0EkLjvOJy0//2KPz+s9AGK4z8KAFnpp+c7o8mjlBX4DhEsxMZ2eN2jOsD2/i5rDMCkigomZ2Nhww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtREZsGfxmri4BnXJac2QLQxjaSZ+XQkgiSCKvTdC+uAiAKp65+cslmMZoatDQL81v71zUkSPPuwxZJjLYw1sOqow=="}]}},"0.0.4":{"name":"typed-immutable","version":"0.0.4","description":"Immutable structurally typed data","author":{"name":"Irakli Gozalishvili","email":"rfobic@gmail.com","url":"http://jeditoolkit.com"},"homepage":"https://github.com/gozala/typed-immutable","keywords":["record","structure","schema","typed","immutable","data","persistent","datastructure","functional"],"repository":{"type":"git","url":"git://github.com/gozala/typed-immutable.git","web":"https://github.com/Gozala/typed-immutable"},"bugs":{"url":"https://github.com/gozala/typed-immutable/issues"},"license":"MIT","main":"./lib/index.js","directories":{"test":"test"},"scripts":{"test":"tap lib/test/*.js","start":"babel --watch --modules umdStrict --source-maps-inline --out-dir ./lib ./src","build":"babel --modules umdStrict --source-maps-inline --out-dir ./lib ./src","prepublish":"npm run build"},"dependencies":{"immutable":"^3.7.0"},"devDependencies":{"babel":"^4.7.4","immutable":"^3.6.4","tap":"~0.4.8","tape":"~2.3.2"},"gitHead":"48937a8c3510b74cf72596646c220dcd794bb23c","_id":"typed-immutable@0.0.4","_shasum":"9e46693ea7ee521dae2203d742ac17ff171ff2d4","_from":".","_npmVersion":"2.7.4","_nodeVersion":"0.12.2","_npmUser":{"name":"gozala","email":"rfobic@gmail.com"},"maintainers":[{"name":"gozala","email":"rfobic@gmail.com"}],"dist":{"shasum":"9e46693ea7ee521dae2203d742ac17ff171ff2d4","tarball":"https://registry.npmjs.org/typed-immutable/-/typed-immutable-0.0.4.tgz","integrity":"sha512-GeV7BpTOZDf1h0ZYTH+o0NxYQrw7X0HfNqmFOtmIIvfcgkQR7dYeghz3cMrHM6wCCW/ovdY3Giq6lohhX9P4Bw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHDW9DjTKYGQuT5DOdD9U+tnirkOABrI0G8YPGZLf/P7AiEAtcvuRhjNLZB+ZSJYFHXiXi1rpCewVG4pbmceP3pRtTM="}]}},"0.0.5":{"name":"typed-immutable","version":"0.0.5","description":"Immutable structurally typed data","author":{"name":"Irakli Gozalishvili","email":"rfobic@gmail.com","url":"http://jeditoolkit.com"},"homepage":"https://github.com/gozala/typed-immutable","keywords":["record","structure","schema","typed","immutable","data","persistent","datastructure","functional"],"repository":{"type":"git","url":"git://github.com/gozala/typed-immutable.git","web":"https://github.com/Gozala/typed-immutable"},"bugs":{"url":"https://github.com/gozala/typed-immutable/issues"},"license":"MIT","main":"./lib/index.js","directories":{"test":"test"},"scripts":{"test":"tap lib/test/*.js","start":"babel --watch --modules umdStrict --source-maps-inline --out-dir ./lib ./src","build":"babel --modules umdStrict --source-maps-inline --out-dir ./lib ./src","prepublish":"npm run build"},"dependencies":{"immutable":"3.7.0"},"devDependencies":{"babel":"4.7.6","tap":"~0.4.8","tape":"~2.3.2"},"gitHead":"bd2b4851e95bd76e03c8b2703adc93b2780202bd","_id":"typed-immutable@0.0.5","_shasum":"53eab37e655764fafb76370a30db914dac86480d","_from":".","_npmVersion":"2.7.4","_nodeVersion":"0.12.2","_npmUser":{"name":"gozala","email":"rfobic@gmail.com"},"maintainers":[{"name":"gozala","email":"rfobic@gmail.com"}],"dist":{"shasum":"53eab37e655764fafb76370a30db914dac86480d","tarball":"https://registry.npmjs.org/typed-immutable/-/typed-immutable-0.0.5.tgz","integrity":"sha512-2MPhD81NHPzMZKEwfH4GcM0lOW14azaPLpDtSAfDd1V63akB6bwdOlOelf6/PWazZ15JLRDJfw2CzRoe0BNI/g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZGdvpmQ8uKSkrBLatOFhnI+VNLa52fayEu1g6ZiqwDAIgOZShEzKNZHm2HcbCg/+RiONf3YyzLvC4FXiEhbapj+8="}]}},"0.0.6":{"name":"typed-immutable","version":"0.0.6","description":"Immutable structurally typed data","author":{"name":"Irakli Gozalishvili","email":"rfobic@gmail.com","url":"http://jeditoolkit.com"},"homepage":"https://github.com/gozala/typed-immutable","keywords":["record","structure","schema","typed","immutable","data","persistent","datastructure","functional"],"repository":{"type":"git","url":"git://github.com/gozala/typed-immutable.git","web":"https://github.com/Gozala/typed-immutable"},"bugs":{"url":"https://github.com/gozala/typed-immutable/issues"},"license":"MIT","main":"./lib/index.js","directories":{"test":"test"},"scripts":{"test":"tap lib/test/*.js","start":"babel --watch --optional spec.protoToAssign --modules umdStrict --source-maps-inline --out-dir ./lib ./src","build":"babel --optional spec.protoToAssign --modules umdStrict --source-maps-inline --out-dir ./lib ./src","prepublish":"npm run build"},"dependencies":{"immutable":"3.7.0"},"devDependencies":{"babel":"5.6.14","tap":"~0.4.8","tape":"~2.3.2"},"gitHead":"cd136304268610839ce4da6116a71933d93c57d5","_id":"typed-immutable@0.0.6","_shasum":"22fcdfbc7a55a2ce9868e16b7fa02c2ddf2f5fd4","_from":".","_npmVersion":"2.7.4","_nodeVersion":"0.12.2","_npmUser":{"name":"gozala","email":"rfobic@gmail.com"},"maintainers":[{"name":"gozala","email":"rfobic@gmail.com"}],"dist":{"shasum":"22fcdfbc7a55a2ce9868e16b7fa02c2ddf2f5fd4","tarball":"https://registry.npmjs.org/typed-immutable/-/typed-immutable-0.0.6.tgz","integrity":"sha512-l6xn/pgQ4ISCX8FetqzKRn1XQ7aISff5D7JcDRRKb+DgnuV+H83Rs4QFmmCHoblOdGtdCjJNTs9MRkCrEbGplA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEEDtUcAOCzY7a5pK6J6TUyUO+Ucj8w5N+Ll3yIdgzmzAiEA2jGyzZQsRDqAqGwV3Yuplp8JLANFQndxowfm7bpdeV0="}]}},"0.0.7":{"name":"typed-immutable","version":"0.0.7","description":"Immutable structurally typed data","author":{"name":"Irakli Gozalishvili","email":"rfobic@gmail.com","url":"http://jeditoolkit.com"},"homepage":"https://github.com/gozala/typed-immutable","keywords":["record","structure","schema","typed","immutable","data","persistent","datastructure","functional"],"repository":{"type":"git","url":"git://github.com/gozala/typed-immutable.git","web":"https://github.com/Gozala/typed-immutable"},"bugs":{"url":"https://github.com/gozala/typed-immutable/issues"},"license":"MIT","main":"./lib/index.js","directories":{"test":"test"},"scripts":{"test":"tap lib/test/*.js","start":"babel --watch --optional spec.protoToAssign --modules umdStrict --source-maps inline --out-dir ./lib ./src","build":"babel --optional spec.protoToAssign --modules umdStrict --source-maps inline --out-dir ./lib ./src","prepublish":"npm run build"},"dependencies":{"immutable":"3.7.0"},"devDependencies":{"babel":"5.6.14","tap":"~0.4.8","tape":"~2.3.2"},"gitHead":"e0828781778b7878882ab8ec167b1ba823e99e1b","_id":"typed-immutable@0.0.7","_shasum":"6cac913486d48153e61c7db5370caa87587b6774","_from":".","_npmVersion":"2.7.4","_nodeVersion":"0.12.2","_npmUser":{"name":"gozala","email":"rfobic@gmail.com"},"maintainers":[{"name":"gozala","email":"rfobic@gmail.com"}],"dist":{"shasum":"6cac913486d48153e61c7db5370caa87587b6774","tarball":"https://registry.npmjs.org/typed-immutable/-/typed-immutable-0.0.7.tgz","integrity":"sha512-jGqy2PE895ALj1/NH/yjgKraojWIEFV0w7peGJyXK9kR9ca4rIa1jAFH3aTySEceFnZeeIH8lgOnWc9Y/flYJw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFSqWTcljDV3lJeBObnSNE2NgH7rjg5+NPgtOECKmvRZAiEAh6bt0QGWr96DNQZXuGuUwnctJROnBC2HzGRGIPKCS94="}]}},"0.0.8":{"name":"typed-immutable","version":"0.0.8","description":"Immutable structurally typed data","author":{"name":"Irakli Gozalishvili","email":"rfobic@gmail.com","url":"http://jeditoolkit.com"},"homepage":"https://github.com/typed-immutable/typed-immutable","keywords":["record","structure","schema","typed","immutable","data","persistent","datastructure","functional"],"repository":{"type":"git","url":"git://github.com/typed-immutable/typed-immutable.git","web":"https://github.com/typed-immutable/typed-immutable"},"bugs":{"url":"https://github.com/typed-immutable/typed-immutable/issues"},"license":"MIT","main":"./lib/index.js","directories":{"test":"test"},"scripts":{"test":"tap lib/test/*.js","start":"babel --watch --optional spec.protoToAssign --modules umdStrict --source-maps inline --out-dir ./lib ./src","build":"babel --optional spec.protoToAssign --modules umdStrict --source-maps inline --out-dir ./lib ./src","prepublish":"npm run build"},"dependencies":{"immutable":">=3.7.6"},"devDependencies":{"babel":"5.6.14","tap":"~0.4.8","tape":"~2.3.2"},"contributors":[{"name":"typed-immutable was originally written by:"},{"name":"Irakli Gozalishvili","url":"GitHub: @Gozala"},{"name":"It is now being maintained by:"},{"name":"Dave Coates","url":"GitHub: @davecoates"},{"name":"Stu Kabakoff","url":"GitHub: @stutrek"},{"name":"Pasindu Perera","url":"GitHub: @udnisap"},{"name":"Luke Sneeringer","url":"GitHub: @lukesneeringer"},{"name":"Other contributors include:"},{"name":"Don Abrams","url":"GitHub: @donabrams"}],"gitHead":"0e3278de1444a91853fab4aee1616905f709ce5c","_id":"typed-immutable@0.0.8","_shasum":"d7aae7bc06c1a1896b5a1e9dfccb80594e9899f0","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"lukesneeringer","email":"luke@sneeringer.com"},"dist":{"shasum":"d7aae7bc06c1a1896b5a1e9dfccb80594e9899f0","tarball":"https://registry.npmjs.org/typed-immutable/-/typed-immutable-0.0.8.tgz","integrity":"sha512-vEQBEn20HPzXH4M9B1ZjBTVA1Wz/4o6ERaUYgE45IZujMb8xgnBbrTCzZyLc3DOcxA6YsUi4QdSqm7HHtqPjmg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEEG6ceppEIYZWzpVj+cLbLZm6lix/7P12V1ODXGXPgEAiA6Eg2t9L7yODApZJCTeVx4BEdMezi9iF6GmFCde9qr4g=="}]},"maintainers":[{"name":"gozala","email":"rfobic@gmail.com"},{"name":"lukesneeringer","email":"luke@sneeringer.com"},{"name":"sakabako","email":"sakabako@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/typed-immutable-0.0.8.tgz_1469816563793_0.8531320963520557"}},"0.0.9":{"name":"typed-immutable","version":"0.0.9","description":"Immutable structurally typed data","author":{"name":"Irakli Gozalishvili","email":"rfobic@gmail.com","url":"http://jeditoolkit.com"},"homepage":"https://github.com/typed-immutable/typed-immutable","keywords":["record","structure","schema","typed","immutable","data","persistent","datastructure","functional"],"repository":{"type":"git","url":"git://github.com/typed-immutable/typed-immutable.git","web":"https://github.com/typed-immutable/typed-immutable"},"bugs":{"url":"https://github.com/typed-immutable/typed-immutable/issues"},"license":"MIT","main":"./lib/index.js","directories":{"test":"test"},"scripts":{"test":"tap lib/test/*.js","start":"babel --watch --optional spec.protoToAssign --modules umdStrict --source-maps inline --out-dir ./lib ./src","build":"babel --optional spec.protoToAssign --modules umdStrict --source-maps inline --out-dir ./lib ./src","prepublish":"npm run build"},"dependencies":{"immutable":">=3.7.6"},"devDependencies":{"babel":"5.6.14","tap":"~0.4.8","tape":"~2.3.2"},"contributors":[{"name":"typed-immutable was originally written by:"},{"name":"Irakli Gozalishvili","url":"GitHub: @Gozala"},{"name":"It is now being maintained by:"},{"name":"Dave Coates","url":"GitHub: @davecoates"},{"name":"Stu Kabakoff","url":"GitHub: @stutrek"},{"name":"Pasindu Perera","url":"GitHub: @udnisap"},{"name":"Luke Sneeringer","url":"GitHub: @lukesneeringer"},{"name":"Other contributors include:"},{"name":"Don Abrams","url":"GitHub: @donabrams"}],"gitHead":"ff73524ff8f0cb2f0747f1af8c7b2c783666c3ec","_id":"typed-immutable@0.0.9","_shasum":"22aa360e71e8f6684981f36c016673d33d719379","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"lukesneeringer","email":"luke@sneeringer.com"},"dist":{"shasum":"22aa360e71e8f6684981f36c016673d33d719379","tarball":"https://registry.npmjs.org/typed-immutable/-/typed-immutable-0.0.9.tgz","integrity":"sha512-C6DkxNhHsoS7UWCdRfbOU0XPlL/nKWLAVc6fjpyjugA0wiX1OPIyE5Au7av/ZYdyL1C9gfZaNumIHFfUhM79NQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGpwVzDbW7f8MM7XkuOrnFG9br9zQNI8L7Pqte6/choSAiBfLCWYP/6rzmo5Sx+uhBePTItfQ/XU76rEm9igJ4X+vg=="}]},"maintainers":[{"name":"gozala","email":"rfobic@gmail.com"},{"name":"lukesneeringer","email":"luke@sneeringer.com"},{"name":"sakabako","email":"sakabako@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/typed-immutable-0.0.9.tgz_1481263262451_0.05880065285600722"}},"0.1.0":{"name":"typed-immutable","version":"0.1.0","description":"Immutable structurally typed data","author":{"name":"Irakli Gozalishvili","email":"rfobic@gmail.com","url":"http://jeditoolkit.com"},"homepage":"https://github.com/typed-immutable/typed-immutable","keywords":["record","structure","schema","typed","immutable","data","persistent","datastructure","functional"],"repository":{"type":"git","url":"git://github.com/typed-immutable/typed-immutable.git","web":"https://github.com/typed-immutable/typed-immutable"},"bugs":{"url":"https://github.com/typed-immutable/typed-immutable/issues"},"license":"MIT","main":"./lib/index.js","directories":{"test":"test"},"scripts":{"test":"tap lib/test/*.js","start":"babel --watch --optional spec.protoToAssign --modules umdStrict --source-maps inline --out-dir ./lib ./src","build":"babel --optional spec.protoToAssign --modules umdStrict --source-maps inline --out-dir ./lib ./src","prepublish":"npm run build"},"dependencies":{"immutable":">=3.7.6"},"devDependencies":{"babel":"5.6.14","tap":"~0.4.8","tape":"~2.3.2"},"contributors":[{"name":"typed-immutable was originally written by:"},{"name":"Irakli Gozalishvili","url":"GitHub: @Gozala"},{"name":"It is now being maintained by:"},{"name":"Dave Coates","url":"GitHub: @davecoates"},{"name":"Stu Kabakoff","url":"GitHub: @stutrek"},{"name":"Pasindu Perera","url":"GitHub: @udnisap"},{"name":"Luke Sneeringer","url":"GitHub: @lukesneeringer"},{"name":"Other contributors include:"},{"name":"Don Abrams","url":"GitHub: @donabrams"}],"gitHead":"ba575e1637f3bbfad41051353cdbd398d757cc25","_id":"typed-immutable@0.1.0","_shasum":"dc624971670c56957f5be26017e0da0142c6895b","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"lukesneeringer","email":"luke@sneeringer.com"},"dist":{"shasum":"dc624971670c56957f5be26017e0da0142c6895b","tarball":"https://registry.npmjs.org/typed-immutable/-/typed-immutable-0.1.0.tgz","integrity":"sha512-9HP7sFzYODSqSWkb7o6/y5KFIoCQi6jyF2/mcJL7D9joqdh2ivGN3vmwM/Jee1slJrnT4kE6XI2IAVW/pqs+cg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGH5T7eNIWsWbix8y1JTXGiRtxRjufnFPm+fFxlAvWoVAiBaSMumq8Gg+tmV76owJZSAusB7WF2w9maXhQOPVAtGCQ=="}]},"maintainers":[{"name":"gozala","email":"rfobic@gmail.com"},{"name":"lukesneeringer","email":"luke@sneeringer.com"},{"name":"sakabako","email":"sakabako@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/typed-immutable-0.1.0.tgz_1481266638290_0.9052343687508255"}},"0.1.2":{"name":"typed-immutable","version":"0.1.2","description":"Immutable structurally typed data","author":{"name":"Irakli Gozalishvili","email":"rfobic@gmail.com","url":"http://jeditoolkit.com"},"homepage":"https://github.com/typed-immutable/typed-immutable","keywords":["record","structure","schema","typed","immutable","data","persistent","datastructure","functional"],"repository":{"type":"git","url":"git://github.com/typed-immutable/typed-immutable.git","web":"https://github.com/typed-immutable/typed-immutable"},"bugs":{"url":"https://github.com/typed-immutable/typed-immutable/issues"},"license":"MIT","main":"./lib/index.js","directories":{"test":"test"},"scripts":{"test":"tap lib/test/*.js","start":"babel --watch --optional spec.protoToAssign --modules umdStrict --source-maps inline --out-dir ./lib ./src","build":"babel --optional spec.protoToAssign --modules umdStrict --source-maps inline --out-dir ./lib ./src","prepublish":"npm run build"},"dependencies":{"immutable":">=3.7.6"},"devDependencies":{"babel":"5.6.14","tap":"~0.4.8","tape":"~2.3.2"},"contributors":[{"name":"typed-immutable was originally written by:"},{"name":"Irakli Gozalishvili","url":"GitHub: @Gozala"},{"name":"It is now being maintained by:"},{"name":"Dave Coates","url":"GitHub: @davecoates"},{"name":"Stu Kabakoff","url":"GitHub: @stutrek"},{"name":"Pasindu Perera","url":"GitHub: @udnisap"},{"name":"Luke Sneeringer","url":"GitHub: @lukesneeringer"},{"name":"Other contributors include:"},{"name":"Don Abrams","url":"GitHub: @donabrams"}],"gitHead":"8f7290b32ec9cf299a0ac54abd686da8f1fd9660","_id":"typed-immutable@0.1.2","_shasum":"6a515119e85dfb8a857d55cbd2d9924edb6dc956","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"sakabako","email":"sakabako@gmail.com"},"maintainers":[{"name":"gozala","email":"rfobic@gmail.com"},{"name":"lukesneeringer","email":"luke@sneeringer.com"},{"name":"sakabako","email":"sakabako@gmail.com"}],"dist":{"shasum":"6a515119e85dfb8a857d55cbd2d9924edb6dc956","tarball":"https://registry.npmjs.org/typed-immutable/-/typed-immutable-0.1.2.tgz","integrity":"sha512-Z2ryqHcKXkWjlF0pDXAgcZPDge5yKcvrciuzttpj2iWSZ/Ry5iVcBOfj0ADpH/MppTjSXkZuH49KU5qdAQBtgA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTrGZ+y9m8kpL8ilnk11wdx1g00PUoSfll/CwOqGRTLwIgFH8ZJz54LmpOeRrcAXZX3dcYGsEPPnpd23F0fU15Guw="}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/typed-immutable-0.1.2.tgz_1487810317222_0.051773282466456294"}}},"homepage":"https://github.com/typed-immutable/typed-immutable","keywords":["record","structure","schema","typed","immutable","data","persistent","datastructure","functional"],"repository":{"type":"git","url":"git://github.com/typed-immutable/typed-immutable.git","web":"https://github.com/typed-immutable/typed-immutable"},"author":{"name":"Irakli Gozalishvili","email":"rfobic@gmail.com","url":"http://jeditoolkit.com"},"bugs":{"url":"https://github.com/typed-immutable/typed-immutable/issues"},"license":"MIT","readmeFilename":"Readme.md","users":{"nelix":true},"contributors":[{"name":"typed-immutable was originally written by:"},{"name":"Irakli Gozalishvili","url":"GitHub: @Gozala"},{"name":"It is now being maintained by:"},{"name":"Dave Coates","url":"GitHub: @davecoates"},{"name":"Stu Kabakoff","url":"GitHub: @stutrek"},{"name":"Pasindu Perera","url":"GitHub: @udnisap"},{"name":"Luke Sneeringer","url":"GitHub: @lukesneeringer"},{"name":"Other contributors include:"},{"name":"Don Abrams","url":"GitHub: @donabrams"}]}