{"_id":"@brainhubeu/hadron-serialization","_rev":"25-38bf27c8a69e7ebd1e967c9c1a984811","name":"@brainhubeu/hadron-serialization","dist-tags":{"latest":"1.0.0"},"versions":{"0.0.1":{"name":"@brainhubeu/hadron-serialization","version":"0.0.1","keywords":["hadron","brainhub","hadron-serialization"],"author":{"name":"Brainhub"},"license":"MIT","_id":"@brainhubeu/hadron-serialization@0.0.1","maintainers":[{"name":"brainhub-adam","email":"adam@brainhub.pl"},{"name":"caderek","email":"maciej.caderek@gmail.com"},{"name":"drymek","email":"marcin@dryka.pl"},{"name":"dyoda","email":"lukasz.pluszczewski@gmail.com"},{"name":"szymon.morawski","email":"szymon.morawski@brainhub.pl"}],"dist":{"shasum":"afbe84553a03b9aa6dcc4cd2c48d29d49d41bf5d","tarball":"https://registry.npmjs.org/@brainhubeu/hadron-serialization/-/hadron-serialization-0.0.1.tgz","fileCount":13,"integrity":"sha512-wUFNwlHKlde1W5bnjjBxKJoPc6hJkqyjUo4XFH19zFgz8hk5+F2Vq1DdtNtkbG8wnqHsjiv0IinEG6ljwed/2w==","signatures":[{"sig":"MEUCIQDdFnw1kCe+soirJF0HnPbzEN+V1F7LZWOcZHS/4Y11dwIgRVoTs9JLEFK8wadlYu8V4r6f7Kh8oJ2XIxfEdV/6gs0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa2fCZCRA9TVsSAnZWagAAB00P/RWAZNb3jB8VdcrPZ4Yc\nkQTCL/RrNizc9t+mmwWmt9Xeshvo6DTev01ly8+vITKyS1Un7fVrzzcdERHi\ndOpEz64p1MECfHii3BpsRNXQ2qX0FFu7qh6g2C32RjUmyHp7D89f79+2DfSz\n1c9iASHecoEpKTz9fydJNr3W4SdQx2heoRgSf3rxtcnSaIPLytFbuzyxx9KD\nkDpHkO5pd4jOgCtpjPHcp5Lw4dTCYVArLpKxFpe6OueYPONMDdE4XWeBHdLE\nwgSRfZTZwtQas4NtK5HlPORNUVxcNiB4n1Z2iWrzuPheJKRrKsKook/VM78h\n8J8QD8c84OglFDvFA7tN/x2HHRJI6wh0HeXEszU3cAE7NcZJEERIjJA16W2+\nqQMPClSb+8cih70oZX5OOPAMceSDudxY4koT9fg5LXWTFoupuwo+7q3vw7BV\ng2F05jiMAPGiGFa4M8jplR2w5cv8xS2qrAggetSsbzWqSB/8Pr5RKbBKSyJy\nNysANJsZ8RQ/UPIzU2CBq1NmHtJD/TlMu9AFJFCcpJBSXgU2PM6qBnv6ABl0\nRnXl1lYGBb/k06O26QvVQHD/5k5P2sS4tjkpXai5eWbf24ijaPJLeUl9aqgy\nP+eyEzfBnGDhhZzLzJ8b2DUtkclBCnFGvCYDxpdfvAtFf9c0C3BbmJuIbP0U\nXHmg\r\n=lLBc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","files":["dist","./LICENSE"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepare":"tsc"},"_npmUser":{"name":"szymon.morawski","email":"szymon.morawski@brainhub.pl"},"_npmVersion":"5.5.1","description":"Hadron serialization module","directories":{},"_nodeVersion":"8.6.0","dependencies":{"@brainhubeu/hadron-core":"^0.0.1","@brainhubeu/hadron-json-provider":"^0.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hadron-serialization_0.0.1_1524232343857_0.7226087135839505","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@brainhubeu/hadron-serialization","version":"0.0.2","keywords":["hadron","brainhub","hadron-serialization"],"author":{"name":"Brainhub"},"license":"MIT","_id":"@brainhubeu/hadron-serialization@0.0.2","maintainers":[{"name":"brainhub-adam","email":"adam@brainhub.pl"},{"name":"caderek","email":"maciej.caderek@gmail.com"},{"name":"drymek","email":"marcin@dryka.pl"},{"name":"dyoda","email":"lukasz.pluszczewski@gmail.com"},{"name":"szymon.morawski","email":"szymon.morawski@brainhub.pl"}],"dist":{"shasum":"ffa12b8f32e47732c8fad44860759b27de6ca168","tarball":"https://registry.npmjs.org/@brainhubeu/hadron-serialization/-/hadron-serialization-0.0.2.tgz","fileCount":13,"integrity":"sha512-RAT+GYOGKX/957KhEQeNmplAaC+AERamyk0Cs98UvirczycDw6H9LXO1A99+PHs3qmsUJ0SAjjQwq+f96UdvjQ==","signatures":[{"sig":"MEUCIQDyyxV+/GAQtHR8C/e1K3ZzXivq+0Z/Zpa4krdWi5PT4gIgW0xk7Klwwfj1ZMh63kknSNaOQDQYCXrxVVG12wJzOi0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8ClqCRA9TVsSAnZWagAACgwP/RRKBcF/tO+H2+JyqwRV\nHTpZfsKuQvbO8VwAwxCrKAS+Sl8/fK8bHtFXVtTIH0Uq7y5+dLikLXqF5iWn\nDBO+ex6idT9DsA6TnbI93O5cxjoVK5K/2PYSlh0NrBm1vq0qXoxX2+qTuyI8\nc+ITN0qRXWZxwUdcO6nhyxOVQQ7lDWZm4J0Gu/IBeS7D9zdPj+wwJfHu0q7B\nuJoFp3Aa9KmgFVW55azGqtUo5tD1anMrAnsYa4HV4bALV+qx7ntK1Z/I2btV\nXjJ9mQKJSnu+oeC9CkpBLcN2kxWNGI2qIk9q9DdfQmDq5+26a58VNEaUTsPP\njUoINAdt80xiHWNaFTU5kGXUjSVbRNE+RkQGBLGHoWHQBBOu0YU0RxrlPg2N\n74huBFw7z5AqmRP/pUT5Co/wm69K8W81jqkb/RZ9GaEWMaINnqWlSasYfDur\nXGLKhsuzifaDk8cTuIbB0w16r+vxthEg8A5OjHOzzpH1eTlC6Ds3zXTP5b3E\nuVobfL+qG9+ez4VDD5ACPqSircAn5Wt8NDZR0hFwU+yqE3PLCPxAHotpYcot\ny8IX4tCr6dT15poKtyA42aRBaFgiDTdcKUhKXCiLDeOuXCys97nqkE/3MNpu\nBpSx53ajmNzmxOB3OyIlMcKx0WM7+NqFKXLqq4OhdHZmWd1FNuBFtAsCdOsD\ngyuW\r\n=NiWD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","files":["dist","./LICENSE"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepare":"tsc"},"_npmUser":{"name":"szymon.morawski","email":"szymon.morawski@brainhub.pl"},"_npmVersion":"5.5.1","description":"Hadron serialization module","directories":{},"_nodeVersion":"8.6.0","dependencies":{"@brainhubeu/hadron-core":"^0.0.2","@brainhubeu/hadron-json-provider":"^0.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hadron-serialization_0.0.2_1525688682446_0.35147254738836287","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"@brainhubeu/hadron-serialization","version":"1.0.0","keywords":["hadron","brainhub","hadron-serialization"],"author":{"name":"Brainhub"},"license":"MIT","_id":"@brainhubeu/hadron-serialization@1.0.0","maintainers":[{"name":"brainhub-adam","email":"adam@brainhub.pl"},{"name":"caderek","email":"maciej.caderek@gmail.com"},{"name":"drymek","email":"marcin@dryka.pl"},{"name":"dyoda","email":"lukasz.pluszczewski@gmail.com"},{"name":"szymon.morawski","email":"szymon.morawski@brainhub.pl"}],"dist":{"shasum":"50a0a24b9ebf5009daa6ca6acfb80bcb5ed559e1","tarball":"https://registry.npmjs.org/@brainhubeu/hadron-serialization/-/hadron-serialization-1.0.0.tgz","fileCount":13,"integrity":"sha512-rWh52MYJZBu6wCHCIE+54xp0SEnNCgVpdZz8vvwjS6ZEnjoq/tR7+42xfPIOGvVlCbgGotVs9cW6pe7o3UOIAg==","signatures":[{"sig":"MEUCIQDAZ/cYt7ZK7pISDlUK0qj5D0w6hCXFyIMMhZ5OiOHH6AIgDWJMRTt8uMsJrJf7de3euMA48iJP05T51IRj/mZSO+4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFXV+CRA9TVsSAnZWagAAPp4P/2vT6tGiArLJAsNsWB66\nWWDt67D9wrt4PmXEIKl5r0pFOTMkO6JN/VFyuostGlkZUPSjCiQ/fTMvfsbM\nqw6xbFhSADA4Xfm5WfD5ppccJ2WQqjm6/byMX1zoP4dUYOa/0zvu7xSu6w1N\nv92uYCvhVRWOgxzC2r/e6abnOPeEpJFgZMxdouLk9Q5gLV18eimwbSrQGMAf\nZejAq1Xaf9hJvGsKnT5acoSm0SQb83HFg9andXOR52HGR7/PcBLj9dq1FT11\nXKf2F62U1MuMoI1KBOmtA/gk0W1+sC8hAhPFyfj4adV/c0eoa2solD038hD1\nudBDj4hRN0mww/b4FhziOEmL77CA4bdzCib9rkDujjv2+tRgw/UiyzmO8PnZ\n683LCXUkNSplJTmvrMSESxFZvTlv2EM84RcrEx/O7mp3XQTk3MlkoHtdOJ8D\njo4y3aWZYtobeg6fm5F65bSmjtNGR49lwit1xfJbEf6jrerm1vrSU8a5ZLph\nJ3ZVok2kBxcZ6BcpDorh0XfyLu/Fg6clykgMrm8RS4Nywwpz6+O6EAMxeuyy\nXzzQjg5Kvm5VyK0YRXHFyuyfxzX5cPwfX8Bz7M4nrK4v7fumuAshsMi/j2fj\nbZD2B8PMdBDWC2equW7Ofz/XDhuku+yvv5b/F7PS7r2p3sjG2D+R8JZ27OPL\nH8B4\r\n=cP1o\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","files":["dist","./LICENSE"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepare":"tsc"},"_npmUser":{"name":"szymon.morawski","email":"szymon.morawski@brainhub.pl"},"_npmVersion":"5.5.1","description":"Hadron serialization module","directories":{},"_nodeVersion":"8.6.0","dependencies":{"@brainhubeu/hadron-core":"^1.0.0","@brainhubeu/hadron-json-provider":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hadron-serialization_1.0.0_1528132988944_0.4021450750292406","host":"s3://npm-registry-packages"}}},"time":{"created":"2018-04-20T13:52:23.808Z","modified":"2024-10-25T13:04:56.538Z","0.0.1":"2018-04-20T13:52:23.914Z","0.0.2":"2018-05-07T10:24:42.506Z","1.0.0":"2018-06-04T17:23:09.129Z"},"author":{"name":"Brainhub"},"license":"MIT","keywords":["hadron","brainhub","hadron-serialization"],"description":"Hadron serialization module","maintainers":[{"email":"angjeziorska@gmail.com","name":"angjez"},{"email":"mateusz.jarzebowski.bownik@gmail.com","name":"matt-jb"},{"email":"filip.kublin@brainhub.pl","name":"fkublin"},{"email":"cypherq@gmail.com","name":"benedyktdryl"},{"email":"dariusz.luber@gmail.com","name":"dluber"},{"email":"devops@brainhub.pl","name":"brainhubeu-devops"},{"email":"anna.lach@brainhub.pl","name":"annalach"},{"email":"szymon.morawski@brainhub.pl","name":"szymon.morawski"},{"email":"lukasz.pluszczewski@gmail.com","name":"dyoda"},{"email":"dev@brainhub.pl","name":"brainhubeu-ci"},{"email":"robert_hebel@icloud.com","name":"roberthebel"}],"readme":"## Installation\n\n```bash\nnpm install @brainhubeu/hadron-serialization --save\n```\n\n[More info about installation](http://hadron-docs.dev.brainhub.pl/core/#installation)\n\n## Overview\n\nSerializer allows You to quickly and easy shape and parse data way You want it. You just need to create schema (in json file, or as simple object) and You are ready to go!s\n\n## Initializing as Hadron package\n\nPass package as an argument for hadron bootstrapping function:\n\n```javascript\n// ... importing and initializing other components\n\nhadron(expressApp, [require('@brainhubeu/hadron-serialization')], config);\n```\n\nThat way, You should be able to get it from [Container](http://hadron-docs.dev.brainhub.pl/core/#dependency-injection) like that:\n\n```javascript\nconst serializer = container.take('serializer');\nserializer.addSchema({\n  name: 'User',\n  properties: [ ... ],\n});\n\n// ...\n\nconst data = { ... };\nserializer.serialize(data, 'User');\n// or\nconst data = new User();\nserializer.serialize(data);\n```\n\n## Initializing without Hadron\n\nJust import `serializerProvider` function from package and pass there Your [schemas](#schema) and parsers.\n\n```javascript\nconst serializerProvider = require('@brainhubeu/hadron-serialization');\n\nconst serializer = serializerProvider({\n  schemas: mySchemas,\n  parsers: {\n    superParser: (value) => `Super ${value}`,\n  },\n  // ...\n});\n```\n\n## Configuration\n\nIf You are using hadron application, You just need to add to it's config schemas and set of parsers:\n\n```javascript\nconst config = {\n  // ...\n  serializer: {\n    schemas: [ ... ],\n    parser: [ ... ],\n  }\n};\n```\n\nIf You are using TypeScript, You can just implement exported interface `ISerializerConfig`\n\n```typescript\ninterface ISerializerConfig {\n  parsers?: object;\n  schemas?: ISerializationSchema[];\n}\n```\n\n## Usage\n\nSerializer contain three methods.\n\n```javascript\nserialize(data, groups, schemaName);\n```\n\n* `data` - object we want to serialize\n* `groups` - optional array of access [groups](#groups), on default `[]`\n* `schemaName` - name of schema, on default name of passed object\n\n```javascript\naddSchema(schemaObj);\n```\n\n* `schemaObj` - [schema](#schema) object we want to add\n\n```javascript\naddParser(parser, name);\n```\n\nAdds parser that can be used in schemas, where:\n\n* `parser` is a method\n* `name` is name under which parser will be available\n\n## Schema\n\nSchema is basic structure, that allows You to easily define your desired object. You can provider them as `json` file. F.e.\n\n```json\n{\n  \"name\": \"User\",\n  \"properties\": [\n    { \"name\": \"name\", \"type\": \"string\" },\n    { \"name\": \"address\", \"type\": \"string\", \"groups\": [\"admin\"] },\n    {\n      \"name\": \"money\",\n      \"type\": \"number\",\n      \"parsers\": [\"currency\"],\n      \"groups\": [\"admin\"]\n    },\n    {\n      \"name\": \"friends\",\n      \"type\": \"array\",\n      \"properties\": [\n        { \"name\": \"name\", \"type\": \"string\" },\n        { \"name\": \"profession\", \"type\": \"string\", \"groups\": [\"admin\"] },\n        { \"name\": \"salary\", \"type\": \"number\", \"parsers\": [\"currency\"] }\n      ]\n    }\n  ]\n}\n```\n\nEach schema should contain `name`, which will be its identifier, and `properties` which should be an array of fields of defined schema.\n\nAll properties that are not defined in schema, will be excluded from the serialized data result.\n\nIf You are using TypeScript, You can just implement exported interface `ISerializationSchema`:\n\n```typescript\ninterface ISerializationSchema {\n  name: string;\n  properties: IProperty[];\n}\n```\n\n## Property\n\nEach property should contain such fields:\n\n* `name` - (required) name of the field\n* `type` - (required) one of such types:\n  * `string`\n  * `number`\n  * `bool`\n  * `array`\n  * `object`\n* `groups` - array of strings, that will define accessibility to this field ([link](#groups)). If empty, such field if public and will be returned always.\n* `parsers` - array of parsers name, that should be run on this field, before it's returned\n* `properties` - array of properties, that are required in case of type `object` and `array`\n* `serializedName` - name of field after serialization\n\nIf You are using TypeScript, You can just implement exported interface `IProperty`:\n\n```typescript\ninterface IProperty {\n  name: string;\n  type: string;\n  serializedName?: string;\n  groups?: string[];\n  parsers?: string[];\n  properties?: IProperty[];\n}\n```\n\n## Groups\n\nWhile defining schema, You can add `groups` parameter to properties. That way, while serializing data, You can specify serialization group.\n\n```javascript\nconst schema = {\n  name: 'User',\n  properties: [\n    // ...\n    { name: 'firstname', type: 'string' },\n    { name: 'lastname', type: 'string', groups: ['friends'] }\n  ],\n}\nserializer.addSchema(schema);\n\n// ...\n\nconst data = {\n  firstname: 'John',\n  lastname: 'Doe',\n  id: 481,\n};\n\nconsole.log(serializer.serialize(data, [], 'User');\n// { 'firstname': 'John' }\n\nconsole.log(serializer.serialize(data, ['friends'], 'User');\n// { 'firstname': 'John', 'lastname': 'Doe' }\n```\n","readmeFilename":"README.md"}