{"_id":"sanctuary-type-identifiers","_rev":"4181718","name":"sanctuary-type-identifiers","description":"Specification for type identifiers","dist-tags":{"latest":"4.0.0"},"maintainers":[{"name":"avaq","email":""},{"name":"davidchambers","email":""}],"time":{"modified":"2026-03-01T21:52:49.000Z","created":"2016-12-24T21:14:24.270Z","4.0.0":"2022-01-21T09:28:25.269Z","3.0.0":"2019-11-03T12:32:06.775Z","2.0.1":"2017-05-24T07:26:39.325Z","2.0.0":"2017-05-12T03:47:06.362Z","1.0.0":"2016-12-24T21:14:24.270Z"},"users":{},"repository":{"type":"git","url":"git://github.com/sanctuary-js/sanctuary-type-identifiers.git"},"versions":{"4.0.0":{"name":"sanctuary-type-identifiers","version":"4.0.0","description":"Specification for type identifiers","license":"MIT","repository":{"type":"git","url":"git://github.com/sanctuary-js/sanctuary-type-identifiers.git"},"scripts":{"doctest":"sanctuary-doctest","lint":"sanctuary-lint","release":"sanctuary-release","test":"npm run lint && sanctuary-test && npm run doctest"},"dependencies":{},"devDependencies":{"sanctuary-scripts":"5.0.x","sanctuary-show":"3.0.x","sanctuary-type-classes":"13.0.x"},"mocha":{"ui":"tdd"},"gitHead":"085e77161173442305c4a36aef614ccf6d700a7c","bugs":{"url":"https://github.com/sanctuary-js/sanctuary-type-identifiers/issues"},"homepage":"https://github.com/sanctuary-js/sanctuary-type-identifiers#readme","_id":"sanctuary-type-identifiers@4.0.0","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","dist":{"shasum":"ec7cb8b62cc7718c7564dc02e96522ddb97fd52a","size":3494,"noattachment":false,"key":"/sanctuary-type-identifiers/-/sanctuary-type-identifiers-4.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/sanctuary-type-identifiers/download/sanctuary-type-identifiers-4.0.0.tgz"},"_npmUser":{"name":"davidchambers","email":"dc@davidchambers.me"},"directories":{},"maintainers":[{"name":"avaq","email":""},{"name":"davidchambers","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sanctuary-type-identifiers_4.0.0_1642757305125_0.3484202856583847"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-01-21T09:44:49.329Z","publish_time":1642757305269,"_cnpm_publish_time":1642757305269},"3.0.0":{"name":"sanctuary-type-identifiers","version":"3.0.0","description":"Specification for type identifiers","license":"MIT","repository":{"type":"git","url":"git://github.com/sanctuary-js/sanctuary-type-identifiers.git"},"scripts":{"doctest":"sanctuary-doctest","lint":"sanctuary-lint","release":"sanctuary-release","test":"npm run lint && sanctuary-test && npm run doctest"},"dependencies":{},"devDependencies":{"sanctuary-scripts":"3.2.x","sanctuary-show":"1.0.x","sanctuary-type-classes":"11.0.x"},"gitHead":"f0dc566c59ce51c72a071f08b043cda2a215faaa","bugs":{"url":"https://github.com/sanctuary-js/sanctuary-type-identifiers/issues"},"homepage":"https://github.com/sanctuary-js/sanctuary-type-identifiers#readme","_id":"sanctuary-type-identifiers@3.0.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"shasum":"51cb488d2ed9f194946a64ffe2b41dd49a348c0b","size":3472,"noattachment":false,"key":"/sanctuary-type-identifiers/-/sanctuary-type-identifiers-3.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/sanctuary-type-identifiers/download/sanctuary-type-identifiers-3.0.0.tgz"},"maintainers":[{"name":"avaq","email":""},{"name":"davidchambers","email":""}],"_npmUser":{"name":"davidchambers","email":"dc@davidchambers.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sanctuary-type-identifiers_3.0.0_1572784326677_0.10344697511069723"},"_hasShrinkwrap":false,"publish_time":1572784326775,"_cnpm_publish_time":1572784326775,"_cnpmcore_publish_time":"2021-12-16T18:30:53.549Z"},"2.0.1":{"name":"sanctuary-type-identifiers","version":"2.0.1","description":"Specification for type identifiers","license":"MIT","repository":{"type":"git","url":"git://github.com/sanctuary-js/sanctuary-type-identifiers.git"},"scripts":{"test":"make lint test"},"dependencies":{},"devDependencies":{"doctest":"0.12.x","eslint":"3.19.x","mocha":"3.2.x","remember-bower":"0.1.x","sanctuary-style":"0.5.x","sanctuary-type-classes":"5.1.x","transcribe":"0.5.x","xyz":"2.0.x"},"files":["/LICENSE","/README.md","/index.js","/package.json"],"gitHead":"4f8ad1b0d36429a8929e2c9936224a9e79c2d3a2","bugs":{"url":"https://github.com/sanctuary-js/sanctuary-type-identifiers/issues"},"homepage":"https://github.com/sanctuary-js/sanctuary-type-identifiers#readme","_id":"sanctuary-type-identifiers@2.0.1","_shasum":"fc524cf6dd92cebfcbb0dd9509eff193159a20ed","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"davidchambers","email":"dc@davidchambers.me"},"dist":{"shasum":"fc524cf6dd92cebfcbb0dd9509eff193159a20ed","size":3776,"noattachment":false,"key":"/sanctuary-type-identifiers/-/sanctuary-type-identifiers-2.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/sanctuary-type-identifiers/download/sanctuary-type-identifiers-2.0.1.tgz"},"maintainers":[{"name":"avaq","email":""},{"name":"davidchambers","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sanctuary-type-identifiers-2.0.1.tgz_1495610798413_0.3393361393827945"},"directories":{},"publish_time":1495610799325,"_hasShrinkwrap":false,"_cnpm_publish_time":1495610799325,"_cnpmcore_publish_time":"2021-12-16T18:30:53.784Z"},"2.0.0":{"name":"sanctuary-type-identifiers","version":"2.0.0","description":"Specification for type identifiers","license":"MIT","repository":{"type":"git","url":"git://github.com/sanctuary-js/sanctuary-type-identifiers.git"},"scripts":{"test":"make lint test"},"dependencies":{},"devDependencies":{"doctest":"0.12.x","eslint":"3.19.x","mocha":"3.2.x","remember-bower":"0.1.x","sanctuary-style":"0.5.x","sanctuary-type-classes":"5.1.x","transcribe":"0.5.x","xyz":"2.0.x"},"files":["/LICENSE","/README.md","/index.js","/package.json"],"gitHead":"5c0058832e6d0e9488a66895ec34ad01b12bdcac","bugs":{"url":"https://github.com/sanctuary-js/sanctuary-type-identifiers/issues"},"homepage":"https://github.com/sanctuary-js/sanctuary-type-identifiers#readme","_id":"sanctuary-type-identifiers@2.0.0","_shasum":"48991770c0a09cfe63f5351c15f500f5c3f56680","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"davidchambers","email":"dc@davidchambers.me"},"dist":{"shasum":"48991770c0a09cfe63f5351c15f500f5c3f56680","size":3769,"noattachment":false,"key":"/sanctuary-type-identifiers/-/sanctuary-type-identifiers-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/sanctuary-type-identifiers/download/sanctuary-type-identifiers-2.0.0.tgz"},"maintainers":[{"name":"avaq","email":""},{"name":"davidchambers","email":""}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/sanctuary-type-identifiers-2.0.0.tgz_1494560824275_0.44421488675288856"},"directories":{},"publish_time":1494560826362,"_hasShrinkwrap":false,"_cnpm_publish_time":1494560826362,"_cnpmcore_publish_time":"2021-12-16T18:30:54.028Z"},"1.0.0":{"name":"sanctuary-type-identifiers","version":"1.0.0","description":"Specification for type identifiers","license":"MIT","repository":{"type":"git","url":"git://github.com/sanctuary-js/sanctuary-type-identifiers.git"},"scripts":{"test":"make lint test"},"dependencies":{},"devDependencies":{"eslint":"2.9.x","mocha":"3.2.x","remember-bower":"0.1.x","sanctuary-style":"0.4.x","sanctuary-type-classes":"1.3.x","transcribe":"0.5.x","xyz":"2.0.x"},"files":["/LICENSE","/README.md","/index.js","/package.json"],"gitHead":"1e55dea707bde93b77ffd142b2ed132160c110c4","bugs":{"url":"https://github.com/sanctuary-js/sanctuary-type-identifiers/issues"},"homepage":"https://github.com/sanctuary-js/sanctuary-type-identifiers#readme","_id":"sanctuary-type-identifiers@1.0.0","_shasum":"e8f359f006cb5e624cfb8464603fc114608bde9f","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.6.1","_npmUser":{"name":"davidchambers","email":"dc@davidchambers.me"},"dist":{"shasum":"e8f359f006cb5e624cfb8464603fc114608bde9f","size":3005,"noattachment":false,"key":"/sanctuary-type-identifiers/-/sanctuary-type-identifiers-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/sanctuary-type-identifiers/download/sanctuary-type-identifiers-1.0.0.tgz"},"maintainers":[{"name":"avaq","email":""},{"name":"davidchambers","email":""}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/sanctuary-type-identifiers-1.0.0.tgz_1482614062255_0.02900577918626368"},"directories":{},"publish_time":1482614064270,"_hasShrinkwrap":false,"_cnpm_publish_time":1482614064270,"_cnpmcore_publish_time":"2021-12-16T18:30:54.194Z"}},"readme":"# sanctuary-type-identifiers\n\nA type is a set of values. Boolean, for example, is the type comprising\n`true` and `false`. A value may be a member of multiple types (`42` is a\nmember of Number, PositiveNumber, Integer, and many other types).\n\nIn certain situations it is useful to divide JavaScript values into\nnon-overlapping types. The language provides two constructs for this\npurpose: the [`typeof`][1] operator and [`Object.prototype.toString`][2].\nEach has pros and cons, but neither supports user-defined types.\n\nsanctuary-type-identifiers comprises:\n\n  - an npm and browser -compatible package for deriving the\n    _type identifier_ of a JavaScript value; and\n  - a specification which authors may follow to specify type\n    identifiers for their types.\n\n### Specification\n\nFor a type to be compatible with the algorithm:\n\n  - every member of the type MUST have a `@@type` property\n    (the _type identifier_); and\n\n  - the type identifier MUST be a string primitive and SHOULD have\n    format `'<namespace>/<name>[@<version>]'`, where:\n\n      - `<namespace>` MUST consist of one or more characters, and\n        SHOULD equal the name of the npm package which defines the\n        type (including [scope][3] where appropriate);\n\n      - `<name>` MUST consist of one or more characters, and SHOULD\n        be the unique name of the type; and\n\n      - `<version>` MUST consist of one or more digits, and SHOULD\n        represent the version of the type.\n\nIf the type identifier does not conform to the format specified above,\nit is assumed that the entire string represents the _name_ of the type;\n_namespace_ will be `null` and _version_ will be `0`.\n\nIf the _version_ is not given, it is assumed to be `0`.\n\n### Usage\n\n```javascript\nconst type = require ('sanctuary-type-identifiers');\n```\n\n```javascript\n> const Identity$prototype = {\n.   '@@type': 'my-package/Identity@1',\n.   '@@show': function() {\n.     return 'Identity (' + show (this.value) + ')';\n.   }\n. }\n\n> const Identity = value =>\n.   Object.assign (Object.create (Identity$prototype), {value})\n\n> type (Identity (0))\n'my-package/Identity@1'\n\n> type.parse (type (Identity (0)))\n{namespace: 'my-package', name: 'Identity', version: 1}\n```\n\n### API\n\n#### <a name=\"type\" href=\"https://github.com/sanctuary-js/sanctuary-type-identifiers/blob/v3.0.0/index.js#L115\">`type :: Any -⁠> String`</a>\n\nTakes any value and returns a string which identifies its type. If the\nvalue conforms to the [specification][4], the custom type identifier is\nreturned.\n\n```javascript\n> type (null)\n'Null'\n\n> type (true)\n'Boolean'\n\n> type (Identity (0))\n'my-package/Identity@1'\n```\n\n#### <a name=\"type.parse\" href=\"https://github.com/sanctuary-js/sanctuary-type-identifiers/blob/v3.0.0/index.js#L141\">`type.parse :: String -⁠> { namespace :: Nullable String, name :: String, version :: Number }`</a>\n\nTakes any string and parses it according to the [specification][4],\nreturning an object with `namespace`, `name`, and `version` fields.\n\n```javascript\n> type.parse ('my-package/List@2')\n{namespace: 'my-package', name: 'List', version: 2}\n\n> type.parse ('nonsense!')\n{namespace: null, name: 'nonsense!', version: 0}\n\n> type.parse (type (Identity (0)))\n{namespace: 'my-package', name: 'Identity', version: 1}\n```\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof\n[2]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString\n[3]: https://docs.npmjs.com/misc/scope\n[4]: #specification\n","_attachments":{},"homepage":"https://github.com/sanctuary-js/sanctuary-type-identifiers#readme","bugs":{"url":"https://github.com/sanctuary-js/sanctuary-type-identifiers/issues"},"license":"MIT"}