SerialiSON
Resolve every link of a {json:api} document
Usage
Install SerialiSON and its dependencies:
npm install serialison
If you want to use SerialiSON in a browser, compile it with npm run build
and link your HTML document to one the *.js
files in the client
directory.
Require the constructor, instanciate it with your document and call the resolve()
method:
// The SerialiSON variable is already declared in a browser environmentvar SerialiSON = ; var myDocument = "posts": "id": "1" "title": "Rails is Omakase" "links": "author": "id": "9" "type": "people" "comments": "1" "2" "3" "linked": "people": "id": "9" "name": "@d2h" "comments": "id": "1" "body": "Mmmmmakase" "id": "2" "body": "I prefer unagi" "id": "3" "body": "What's Omakase?" ; var resolver = myDocument; var resolvedDocument = resolver;
The resolvedDocument
variable will contain the following structure:
Options
You can pass options to the constructor:
myDocument // Options;
The available options with their default values (syntax based on JSDoc):
/** * Set to `false` to disable errors when the documents contain two resources * with the same type and ID, the latest resource will override the other ones. * @type */ throwErrorsForDuplicateIDs: true /** * Set to `false` to disable errors when the documents contain two URL templates * with the same path, the latest URL template will override the other ones. * @type */ throwErrorsForDuplicateUrlTemplates: true /** * Defines the maximum of nested resources the `resolve()` method will process. * Raising this value may increase the resolving time, as memory usage. * @type */ maxNestingDepth: 4 /** * Lists the top level properties except the primary resource. Allows the * constructor to find the name of your primary resource. Normally you shouldn't * have to use this option but, if your document isn't {json:api} compliant and * contains other top level properties, you can add them to this array. * @type */ topLevelProperties: 'meta' 'links' 'linked' /** * Strips the `links` and `linked` top level properties once the document is * resolved. * @type */ stripTopLinkingProperties: true /** * Strips the `links` property from each resource. * @type */ stripLinksProperty: true /** * A custom transformer to alter an object * @callback transformer * @param * @returns */ /** * A collection of transformers to execute once the main document has been * resolved. Each transformer will receive the main document as the first * parameter. * @type */ mainDocumentTransformers: /** * A collection of transformers to execute for each resource once it has been * resolved. Each transformer will receive a resource as the first parameter. * @type */ resourceTransformers:
Testing
To run the tests, use the following command:
npm test