protosphere
Art by Nick DePasquale
Changelog
- v4.x
- Uses schemas (see examples).
- Lodash-based object-key ordering for intelligent destructuring.
- Adaptive buffer structure for present & absent values.
- Added dist build:
protosphere.min.js
- v0.x to v3.x
- PoC testing, bad performance, barely functional
Usage
Installing
npm install protosphere --save
yarn add protosphere
Sample Usage
- Create an instance with a schema:
const Protosphere = require('protosphere');
const ps = new Protosphere({
name: Protosphere.String(),
details: Protosphere.Object({
verified: Protosphere.Boolean()
}),
age: Protosphere.Integer(),
bitcoins: Protosphere.Double(),
memberships: Protosphere.Array(
Protosphere.String()
)
});
- Prepare your values:
let values = {
name: 'Xemasiv',
details: {
verified: true
},
age: Math.pow(2, 50),
bitcoins: 0.9999999999999991,
memberships: ['Amex', 'Mastercard']
};
- Transform these values to get the buffer:
ps.transform(values)
.then((buffer) => console.log('buffer:', buffer));
- Send this buffer to anywhere in the world
- Rehydrate it upon receipt:
ps.hydrate(response.data)
.then((values) => console.log('values:', values));
Accepted Schema Values:
-
Protosphere.Boolean()
- Accepts
true
,false
,null
,undefined
- Accepts
let ps = new Protosphere({
isVerified: Protosphere.Boolean()
});
-
Protosphere.String()
- Accepts any strings,
null
,undefined
- Accepts any strings,
let ps = new Protosphere({
name: Protosphere.String()
});
-
Protosphere.Integer()
- Accepts positive/negative integers,
null
,undefined
- Accepts positive/negative integers,
let ps = new Protosphere({
age: Protosphere.Integer()
});
-
Protosphere.Double()
- Accepts floating points / doubles,
null
,undefined
- Accepts floating points / doubles,
let ps = new Protosphere({
amount: Protosphere.Double()
});
-
Protosphere.Object({mapped: schemas})
- Accepts string keys and (schema) as values ,
null
,undefined
- Accepts string keys and (schema) as values ,
let ps = new Protosphere({
configs: Protosphere.Object({
fullscreen: Protosphere.Boolean(),
brightness: Protosphere.Integer()
})
});
-
Protosphere.Array(schemas)
- Accepts one schema (even object schema) as value,
null
,undefined
- Accepts one schema (even object schema) as value,
let ps = new Protosphere({
students: Protosphere.Array(
Protosphere.Object({
name: Protosphere.String(),
height: Protosphere.Double()
})
)
});
Testing
- Provided example shows comparison between two requests:
- Req # 1:
axios
+application/json
- Req # 2:
axios
+JSON.stringify
+application/octet-stream
- Req # 3:
axios
+protosphere
+application/octet-stream
npm run playground
- A bare
test.js
is also provided.
npm test
Protosphere
class constructor (schema)
- Takes
-
object
- the schema to be used.
-
function .transform(object)
- Takes
-
object
- the object with values to be transformed
-
- Returns
- Promise.resolve(
buffer
) - result buffer - Promise.reject(
error
) - error from try catch
- Promise.resolve(
function .hydrate(buffer)
- Takes
-
buffer
- the buffer to be hydrated
-
- Returns
- Promise.resolve(
object
) - original object - Promise.reject(
error
) - error from try catch
- Promise.resolve(
License
Attribution 4.0 International (CC BY 4.0)