Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/marcello3d/falcor-shapes
object-based falcor pathset generator
https://github.com/marcello3d/falcor-shapes
Last synced: 15 days ago
JSON representation
object-based falcor pathset generator
- Host: GitHub
- URL: https://github.com/marcello3d/falcor-shapes
- Owner: marcello3d
- License: zlib
- Created: 2015-08-23T18:15:21.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2015-10-26T11:03:52.000Z (about 9 years ago)
- Last Synced: 2024-10-18T15:05:45.201Z (29 days ago)
- Language: JavaScript
- Size: 162 KB
- Stars: 11
- Watchers: 4
- Forks: 2
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: HISTORY.md
- License: LICENSE
Awesome Lists containing this project
README
# falcor-shapes [![Build Status](https://travis-ci.org/marcello3d/falcor-shapes.svg)](https://travis-ci.org/marcello3d/falcor-shapes)
falcor-shapes is a convenience function for generating [Falcor](http://netflix.github.io/falcor/)
[PathSets](http://netflix.github.io/falcor/documentation/paths.html).It converts a "Shape" into an array of Falcor PathSets.
For example:
```js
{
name: {
first: true,
last: true
},
location: {
city: true,
region: true,
country: true
}
}
```becomes
```js
[
[ 'name', 'first' ],
[ 'name', 'last' ],
[ 'location', 'city' ],
[ 'location', 'region' ],
[ 'location', 'country' ]
]
```## Install
```
npm install falcor-shapes
```## Background
I built this function while playing around with falcor for the first time a few days ago. I found it easier to think of
data in terms of a hierarchical structure rather than a list of string paths.It also allows you to split up the list of what fields you need across multiple files (similar to GraphQL/Relay in React).
## What is a "Shape"?
A shape is a recursive structure that resembles the JavaScript structure you're expecting. Shapes are simply JavaScript
objects with keys and values. If a value is a nested JavaScript object, it will be expanded into multiple PathSets.* `{ : true }` is a leaf value, and becomes the path `[ '' ]`
* `{ : }` recurses
* `$` is a special key that expects an array: `{ $: [ , ] }` and becomes `[ , ]`Example:
```js
{
people: {
length: true,
$: [
{from: 0, to: 100},
{
name: {
first: true,
last: true
},
age: true
}
]
}
}
```becomes:
```js
[ 'people', 'length' ],
[ 'people', { from: 0, to: 100 }, 'name', 'first' ],
[ 'people', { from: 0, to: 100 }, 'name', 'last' ],
[ 'people', { from: 0, to: 100 }, 'age' ]
```See more examples in [test/test.js](test/test.js).
## Usage
```js
var shapeToSet = require('falcor-shapes')var sets = shapeToSet({
people: {
length: true,
$: [
{from: 0, to: 100},
{
name: {
first: true,
last: true
},
age: true
}
]
}
})// falcor's model.get expects each path as separate arguments, so we need to call 'apply'
model.get.apply(model, sets).then( ... )
```We can make a helper function to simplify this:
```js
function getWithShape(shape) {
return model.get.apply(model, shape)
}getWithShape({
people: {
length: true,
$: [
{from: 0, to: 100},
{
name: {
first: true,
last: true
},
age: true
}
]
}
}).then( ... )
```## Development and Test
```
# Clone the repo
git clone [email protected]:marcello3d/falcor-shapes.git# Install dependencies
npm install# Run tests
npm test
```## Contributing
Feel free to submit pull requests!
## License
zlib