
Security News
Open Source Maintainers Feeling the Weight of the EU’s Cyber Resilience Act
The EU Cyber Resilience Act is prompting compliance requests that open source maintainers may not be obligated or equipped to handle.
memory-orm
Advanced tools
yarn add memory-orm
const { Rule, Set, Query } = require('memory-orm')
new Rule('todo').schema(function () {
this.has_many('checks')
})
new Rule('check').schema(function () {
this.belongs_to('todo')
})
Set.todo.merge([
{
_id: 1,
label: '歯を磨く',
},
{
_id: 2,
label: '宿題をする',
},
{
_id: 3,
label: 'お風呂はいる',
},
])
Set.check.merge([
{
_id: 1,
todo_id: 1,
label: '右上',
checked: true,
},
{
_id: 2,
todo_id: 1,
label: '左上',
checked: true,
},
{
_id: 3,
todo_id: 3,
label: 'シャワー浴びる',
checked: false,
},
{
_id: 4,
todo_id: 3,
label: '肩まで入って10数える',
checked: true,
},
])
Query.todos.pluck('label')
Query.todos.find(3).checks.where({ checked: true }).list
Query.todos.find(3).checks.where({ checked: false }).list
name | target | action |
---|---|---|
count | count | reduce + |
all | all | reduce + |
all, count | avg | all / count |
all, count | variance | variance sample. |
all, count | sd | standard deviation. |
pow | pow | reduce * |
pow, count | avg | pow / count |
list | list | listup object ( key is not use ) |
set | set, hash | hash has item by key. set is unique keys. |
min | min, min_is | pick min key. min_is is item. |
max | max, max_is | pick max key. max_is is item. |
min, max | range | max - min |
min, max, all | range, density | all / range |
const { Rule, Set, Query } = require("memory-orm");
new Rule("position").schema(function() {
this.model = class model extends this.model {
static map_reduce (o, emit) {
for ( const p of o.position ) {
emit("position", { count: 1, all: p, min: p, max: p})
}
}
}
});
Set.position.merge([{
"_id": "x1",
"position": [40,60,80,100,200]
},{
"_id": "y1",
"position": [70,190,220,160,240]
},{
"_id": "x2",
"position": [40,60,80,100,200]
},{
"_id": "y2",
"position": [20,90,20,60,40]
}])
{ count, all, avg, density, min, min_is, max, max_is, range } = Query.where({_id: "x1"}).reduce.position
name | target | action |
---|---|---|
belongs_to | data's prototype is Query[key].find( object index or item.id ) | |
page | separate by page-size. see: Query.page(size) | |
sort | lodash.orderBy(...key) | |
diff | diff | calculate differential. use with sort. |
cover | remain, cover | key has full index. cover has index. remain not has index. |
pluck | get path data by list values. | |
index | group by item[key]. |
const { Rule, Set, Query } = require('memory-orm')
new Rule('check').schema(function () {
this.model = class model extends this.model {
static map_reduce(o, emit) {
emit('asc', { list: true })
emit('desc', { list: true })
}
static order(o, emit) {
emit('asc', 'list', { sort: ['label', 'asc'] })
emit('desc', 'list', { sort: ['label', 'desc'] })
}
}
})
Set.check.merge([
{
_id: 1,
todo_id: 1,
label: '右上',
checked: true,
},
{
_id: 2,
todo_id: 1,
label: '左上',
checked: true,
},
{
_id: 3,
todo_id: 3,
label: 'シャワー浴びる',
checked: false,
},
{
_id: 4,
todo_id: 3,
label: '肩まで入って10数える',
checked: true,
},
])
Query.checks.reduce.asc.list.pluck('label')
Query.checks.reduce.desc.list.pluck('label')
style | name | action |
---|---|---|
get | id | same as _id |
static | deploy(model) | event when Set item. this is item. model is class. |
static | update(item, old_item) | event when add data exist. |
static | create(item) | event when add data not exist. |
static | delete(old_item) | event when del data exist. |
static | bless(item) | value become extends this |
static | map_partition(item, emit) | define map reduce. emit is function. |
static | map_reduce(item, emit) | define map reduce. emit is function. |
static | order(item, emit) | define order process for reduced value. |
style | name | action |
---|---|---|
. | pluck(...keys) | listup by keys for item. |
. | where(...) | create query. see Query#where |
. | in(...) | create query. see Query#in |
get | first | [0] |
get | head | [0] |
get | tail | [length - 1] |
get | last | [length - 1] |
get | uniq | get unique values |
const { list } = Query.checks.reduce.asc
list.pluck('label')
list.first
list.head
list.tail
list.last
style | name | action |
---|---|---|
. | schema(dsl) | execute schema definition dsl. |
. | key_by(keys) | id value. default: _id |
. | key_by(callback) | callback return id. default: this._id |
. | deploy(callback) | data adjust before Set. |
. | scope(callback) | define query shorthand and cached. |
. | property(...) | define property shorthand. |
. | default_scope(callback) | root Query replace. |
. | shuffle() | root Query replace. and replace sort order by Math.random. |
. | order(...) | root Query replace. and replace order. |
. | sort(...) | root Query replace. and replace order. |
. | path(...keys) | set name property. for id separate by '-'. add argument '*', tree structure by id. |
. | belongs_to(to, options) | set target property. find by ${target}_id |
. | habtm(to, option) | set target property. finds by ${target}_ids |
. | has_many(to, option) | set target property. find from ${target}_id by _id |
. | tree(option) | set 'nodes' method. scan recursivery by ${target}_id |
. | graph(option) | set 'path' method. scan recursivery by ${target}_id |
. | model | Model base class ( need extends ) |
. | list | List base class ( need extends ) |
. | set | Set base class ( need extends ) |
. | map | Map base class ( need extends ) |
new Rule('todo').schema(function () {
this.key_by(function () {
return this._id
})
this.deploy(function (model) {
this.search_words = this.label
})
this.scope(function (all) {
return {
scan: (word) => all.where({ checked: true }).search(word),
}
})
})
style | name | action |
---|---|---|
. | transaction(callback, meta) | get transaction diff data. |
. | store(meta) | merge transaction diff data. |
. | step.< plural name > | countup if data manipulation. |
get | mixin | for vue.js mixin. |
style | name | action |
---|---|---|
. | set | set data. and old data cleanup. |
. | reset | set data. and old data cleanup. |
. | merge | set data. |
. | add | set datum. |
. | append | set datum. |
. | reject | remove data. |
. | del | remove datum. |
. | remove | remove datum. |
. | clear_cache | recalculate query caches. |
. | refresh | recalculate query caches. |
. | rehash | recalculate query caches. |
. | find | pick first data from all memory by ids. and mark for transaction. |
const {
checks: {
$sort,
$memory,
$format,
}
} = State.transaction(=>{
Set.check.add({
_id: 10,
todo_id: 1,
label: "新しい項目",
checked: true
})
Set.check.del({ _id: 10 })
})
State.store(JSON.parse(JSON.stringify({ checks: { $sort, $memory, $format }})))
style | name | action |
---|---|---|
. | where({ [key]: val }) | copy Query and add conditions. same (o)=> val === o[key] |
. | where({ [key]: /regexp/ }) | copy Query and add conditions. same (o)=> (/regexp/).test( o[key] ) |
. | where({ [key]: [...args] }) | copy Query and add conditions. same (o)=> args.includes( o[key] ) |
. | in({ [key]: val }) | copy Query and add conditions. same (o)=> o[key].includes( val ) |
. | in({ [key]: /regexp/ }) | copy Query and add conditions. same (o)=> o[key].find((oo)=> (/regexp/).test( oo )) |
. | in({ [key]: [...args] }) | copy Query and add conditions. same (o)=> o[key].find((oo)=> args.find((arg)=> oo == arg)) |
. | partition(keys) | copy Query and replace partition keys. default: ["set"] |
. | search(text) | copy Query and add conditions. for "q.search_words" |
. | shuffle() | copy Query and replace sort order by Math.random. |
. | distance(key, "asc", [...point]) | copy Query and replace order. near o[key] is top. |
. | distance(key, "desc", [...point]) | copy Query and replace order. far o[key] is top. |
. | order(keys, order) | copy Query and replace order. |
. | sort(...sort) | copy Query and replace order's sort parameter. same this.order({ sort }) |
. | page(size) | copy Query and replace page_by. if order option set page: true, resuls page separated list. |
. | find(...ids) | pick first data from hash by ids. |
. | finds(ids) | pick all data from hash by ids. |
. | pluck(...keys) | get path data by keys. |
get | reduce | calculate map reduce. |
get | list | calculate list. ( same reduce.list ) |
get | hash | calculate hash. ( same reduce.hash ) |
get | ids | calculate hash and get keys. |
get | memory | all stored data. |
Query.positions.in({ position: 100 }).pluck('_id')
Query.positions.in({ position: [100, 90] }).pluck('_id')
Query.checks.shuffle().pluck('label')
Query.checks.sort('label').pluck('label')
Query.checks.sort('label', 'desc').pluck('label')
Query.checks.order({ sort: ['label', 'desc'] }).pluck('label')
Query.checks.page(3).list[0][0]
Query.checks.page(3).list[0][1]
Query.checks.page(3).list[0][2]
Query.checks.page(3).list[1][0]
FAQs
client side ORM + map reduce
The npm package memory-orm receives a total of 5 weekly downloads. As such, memory-orm popularity was classified as not popular.
We found that memory-orm demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The EU Cyber Resilience Act is prompting compliance requests that open source maintainers may not be obligated or equipped to handle.
Security News
Crates.io adds Trusted Publishing support, enabling secure GitHub Actions-based crate releases without long-lived API tokens.
Research
/Security News
Undocumented protestware found in 28 npm packages disrupts UI for Russian-language users visiting Russian and Belarusian domains.