Comparing version 0.14.0 to 0.15.0
@@ -1,109 +0,154 @@ | ||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.low = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
'use strict'; | ||
/*! lowdb v0.15.0 */ | ||
var low = | ||
/******/ (function(modules) { // webpackBootstrap | ||
/******/ // The module cache | ||
/******/ var installedModules = {}; | ||
var isPromise = require('is-promise'); | ||
/******/ // The require function | ||
/******/ function __webpack_require__(moduleId) { | ||
module.exports = function (source) { | ||
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, | ||
_ref$format = _ref.format, | ||
format = _ref$format === undefined ? null : _ref$format, | ||
_ref$storage = _ref.storage, | ||
storage = _ref$storage === undefined ? null : _ref$storage, | ||
_ref$writeOnChange = _ref.writeOnChange, | ||
writeOnChange = _ref$writeOnChange === undefined ? true : _ref$writeOnChange; | ||
/******/ // Check if module is in cache | ||
/******/ if(installedModules[moduleId]) | ||
/******/ return installedModules[moduleId].exports; | ||
var lodash = arguments[2]; | ||
/******/ // Create a new module (and put it into the cache) | ||
/******/ var module = installedModules[moduleId] = { | ||
/******/ i: moduleId, | ||
/******/ l: false, | ||
/******/ exports: {} | ||
/******/ }; | ||
// Create a fresh copy of lodash | ||
var _ = lodash.runInContext(); | ||
/******/ // Execute the module function | ||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); | ||
var db = _.chain({}); | ||
/******/ // Flag the module as loaded | ||
/******/ module.l = true; | ||
if (source) { | ||
if (format) { | ||
if (format.serialize) { | ||
db.serialize = format.serialize; | ||
} | ||
if (format.deserialize) { | ||
db.deserialize = format.deserialize; | ||
} | ||
} | ||
/******/ // Return the exports of the module | ||
/******/ return module.exports; | ||
/******/ } | ||
if (storage) { | ||
if (storage.read) { | ||
db.read = function () { | ||
var s = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : source; | ||
var res = storage.read(s, db.deserialize); | ||
var init = function init(obj) { | ||
db.__wrapped__ = obj; | ||
db._checksum = JSON.stringify(db.__wrapped__); | ||
}; | ||
/******/ // expose the modules object (__webpack_modules__) | ||
/******/ __webpack_require__.m = modules; | ||
if (isPromise(res)) { | ||
return res.then(function (obj) { | ||
init(obj); | ||
return db; | ||
}); | ||
} | ||
/******/ // expose the module cache | ||
/******/ __webpack_require__.c = installedModules; | ||
init(res); | ||
return db; | ||
}; | ||
} | ||
/******/ // identity function for calling harmony imports with the correct context | ||
/******/ __webpack_require__.i = function(value) { return value; }; | ||
if (storage.write) { | ||
db.write = function () { | ||
var dest = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : source; | ||
return storage.write(dest, db.__wrapped__, db.serialize); | ||
}; | ||
} | ||
} | ||
} | ||
/******/ // define getter function for harmony exports | ||
/******/ __webpack_require__.d = function(exports, name, getter) { | ||
/******/ if(!__webpack_require__.o(exports, name)) { | ||
/******/ Object.defineProperty(exports, name, { | ||
/******/ configurable: false, | ||
/******/ enumerable: true, | ||
/******/ get: getter | ||
/******/ }); | ||
/******/ } | ||
/******/ }; | ||
// Persist database state | ||
function persist() { | ||
if (db.source && db.write && writeOnChange) { | ||
var str = JSON.stringify(db.__wrapped__); | ||
/******/ // getDefaultExport function for compatibility with non-harmony modules | ||
/******/ __webpack_require__.n = function(module) { | ||
/******/ var getter = module && module.__esModule ? | ||
/******/ function getDefault() { return module['default']; } : | ||
/******/ function getModuleExports() { return module; }; | ||
/******/ __webpack_require__.d(getter, 'a', getter); | ||
/******/ return getter; | ||
/******/ }; | ||
if (str !== db._checksum) { | ||
db._checksum = str; | ||
db.write(db.source); | ||
} | ||
} | ||
} | ||
/******/ // Object.prototype.hasOwnProperty.call | ||
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; | ||
// Modify value function to call save before returning result | ||
_.prototype.value = _.wrap(_.prototype.value, function (value) { | ||
var v = value.apply(this); | ||
persist(); | ||
return v; | ||
}); | ||
/******/ // __webpack_public_path__ | ||
/******/ __webpack_require__.p = ""; | ||
// Get or set database state | ||
/******/ // Load entry module and return exports | ||
/******/ return __webpack_require__(__webpack_require__.s = 5); | ||
/******/ }) | ||
/************************************************************************/ | ||
/******/ ([ | ||
/* 0 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; | ||
var isPromise = __webpack_require__(4); | ||
var memory = __webpack_require__(3); | ||
var defaultStorage = __webpack_require__(2); | ||
var init = function init(db, key, source) { | ||
var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}, | ||
_ref$storage = _ref.storage, | ||
storage = _ref$storage === undefined ? defaultStorage : _ref$storage, | ||
_ref$format = _ref.format, | ||
format = _ref$format === undefined ? {} : _ref$format; | ||
db.source = source; | ||
// Set storage | ||
// In-memory only if no source is provided | ||
db.storage = _extends({}, memory, db.source && storage); | ||
db.read = function () { | ||
var s = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : source; | ||
var r = db.storage.read(s, format.deserialize); | ||
return isPromise(r) ? r.then(db.plant) : db.plant(r); | ||
}; | ||
db.write = function () { | ||
var dest = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : source; | ||
var defaultValue = arguments[1]; | ||
var value = defaultValue || db.getState(); | ||
var w = db.storage.write(dest, db.getState(), format.serialize); | ||
return isPromise(w) ? w.then(function () { | ||
return value; | ||
}) : value; | ||
}; | ||
db.plant = function (state) { | ||
db[key] = state; | ||
return db; | ||
}; | ||
db.getState = function () { | ||
return db.__wrapped__; | ||
return db[key]; | ||
}; | ||
db.setState = function (state) { | ||
db.__wrapped__ = state; | ||
persist(); | ||
db.plant(state); | ||
return db.write(); | ||
}; | ||
db._ = _; | ||
db.source = source; | ||
return db.read(); | ||
}; | ||
// Read | ||
if (db.read) { | ||
return db.read(); | ||
} else { | ||
return db; | ||
} | ||
module.exports = { | ||
init: init | ||
}; | ||
},{"is-promise":4}],2:[function(require,module,exports){ | ||
'use strict'; | ||
/***/ }), | ||
/* 1 */ | ||
/***/ (function(module, exports) { | ||
module.exports = undefined; | ||
/***/ }), | ||
/* 2 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
/* global localStorage */ | ||
module.exports = { | ||
read: function read(source) { | ||
read: function browserRead(source) { | ||
var deserialize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : JSON.parse; | ||
@@ -119,19 +164,29 @@ | ||
}, | ||
write: function write(dest, obj) { | ||
write: function browserWrite(dest, obj) { | ||
var serialize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : JSON.stringify; | ||
return localStorage.setItem(dest, serialize(obj)); | ||
localStorage.setItem(dest, serialize(obj)); | ||
} | ||
}; | ||
},{}],3:[function(require,module,exports){ | ||
'use strict'; | ||
var index = require('./_index'); | ||
var storage = require('./browser'); | ||
/***/ }), | ||
/* 3 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
module.exports = function low(source) { | ||
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { storage: storage }; | ||
"use strict"; | ||
return index(source, opts, window._); | ||
module.exports = { | ||
read: function memoryRead() { | ||
return {}; | ||
}, | ||
write: function memoryWrite() { | ||
return {}; | ||
} | ||
}; | ||
},{"./_index":1,"./browser":2}],4:[function(require,module,exports){ | ||
/***/ }), | ||
/* 4 */ | ||
/***/ (function(module, exports) { | ||
module.exports = isPromise; | ||
@@ -143,3 +198,36 @@ | ||
},{}]},{},[3])(3) | ||
}); | ||
/***/ }), | ||
/* 5 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
var lodash = __webpack_require__(1); | ||
var common = __webpack_require__(0); | ||
module.exports = function (source) { | ||
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
// Create a fresh copy of lodash | ||
var _ = lodash.runInContext(); | ||
var db = _.chain({}); | ||
// Expose _ for mixins | ||
db._ = _; | ||
// Add write function to lodash | ||
// Calls save before returning result | ||
_.prototype.write = _.wrap(_.prototype.value, function (func) { | ||
var dest = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : source; | ||
var funcRes = func.apply(this); | ||
return db.write(dest, funcRes); | ||
}); | ||
return common.init(db, '__wrapped__', source, opts); | ||
}; | ||
/***/ }) | ||
/******/ ]); |
@@ -1,1 +0,2 @@ | ||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.low=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){"use strict";var isPromise=require("is-promise");module.exports=function(source){var _ref=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},_ref$format=_ref.format,format=_ref$format===undefined?null:_ref$format,_ref$storage=_ref.storage,storage=_ref$storage===undefined?null:_ref$storage,_ref$writeOnChange=_ref.writeOnChange,writeOnChange=_ref$writeOnChange===undefined?true:_ref$writeOnChange;var lodash=arguments[2];var _=lodash.runInContext();var db=_.chain({});if(source){if(format){if(format.serialize){db.serialize=format.serialize}if(format.deserialize){db.deserialize=format.deserialize}}if(storage){if(storage.read){db.read=function(){var s=arguments.length>0&&arguments[0]!==undefined?arguments[0]:source;var res=storage.read(s,db.deserialize);var init=function init(obj){db.__wrapped__=obj;db._checksum=JSON.stringify(db.__wrapped__)};if(isPromise(res)){return res.then(function(obj){init(obj);return db})}init(res);return db}}if(storage.write){db.write=function(){var dest=arguments.length>0&&arguments[0]!==undefined?arguments[0]:source;return storage.write(dest,db.__wrapped__,db.serialize)}}}}function persist(){if(db.source&&db.write&&writeOnChange){var str=JSON.stringify(db.__wrapped__);if(str!==db._checksum){db._checksum=str;db.write(db.source)}}}_.prototype.value=_.wrap(_.prototype.value,function(value){var v=value.apply(this);persist();return v});db.getState=function(){return db.__wrapped__};db.setState=function(state){db.__wrapped__=state;persist()};db._=_;db.source=source;if(db.read){return db.read()}else{return db}}},{"is-promise":4}],2:[function(require,module,exports){"use strict";module.exports={read:function read(source){var deserialize=arguments.length>1&&arguments[1]!==undefined?arguments[1]:JSON.parse;var data=localStorage.getItem(source);if(data){return deserialize(data)}else{localStorage.setItem(source,"{}");return{}}},write:function write(dest,obj){var serialize=arguments.length>2&&arguments[2]!==undefined?arguments[2]:JSON.stringify;return localStorage.setItem(dest,serialize(obj))}}},{}],3:[function(require,module,exports){"use strict";var index=require("./_index");var storage=require("./browser");module.exports=function low(source){var opts=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{storage:storage};return index(source,opts,window._)}},{"./_index":1,"./browser":2}],4:[function(require,module,exports){module.exports=isPromise;function isPromise(obj){return!!obj&&(typeof obj==="object"||typeof obj==="function")&&typeof obj.then==="function"}},{}]},{},[3])(3)}); | ||
/*! lowdb v0.15.0 */ | ||
var low=function(t){function r(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var e={};return r.m=t,r.c=e,r.i=function(t){return t},r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,r){return Object.prototype.hasOwnProperty.call(t,r)},r.p="",r(r.s=5)}([function(t,r,e){"use strict";var n=Object.assign||function(t){for(var r=1;r<arguments.length;r++){var e=arguments[r];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])}return t},o=e(4),i=e(3),u=e(2),a=function(t,r,e){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},c=a.storage,f=void 0===c?u:c,s=a.format,p=void 0===s?{}:s;return t.source=e,t.storage=n({},i,t.source&&f),t.read=function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:e,n=t.storage.read(r,p.deserialize);return o(n)?n.then(t.plant):t.plant(n)},t.write=function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:e,n=arguments[1],i=n||t.getState(),u=t.storage.write(r,t.getState(),p.serialize);return o(u)?u.then(function(){return i}):i},t.plant=function(e){return t[r]=e,t},t.getState=function(){return t[r]},t.setState=function(r){return t.plant(r),t.write()},t.read()};t.exports={init:a}},function(t,r){t.exports=void 0},function(t,r,e){"use strict";t.exports={read:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:JSON.parse,e=localStorage.getItem(t);return e?r(e):(localStorage.setItem(t,"{}"),{})},write:function(t,r){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:JSON.stringify;localStorage.setItem(t,e(r))}}},function(t,r,e){"use strict";t.exports={read:function(){return{}},write:function(){return{}}}},function(t,r){function e(t){return!!t&&("object"==typeof t||"function"==typeof t)&&"function"==typeof t.then}t.exports=e},function(t,r,e){"use strict";var n=e(1),o=e(0);t.exports=function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=n.runInContext(),i=e.chain({});return i._=e,e.prototype.write=e.wrap(e.prototype.value,function(r){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,n=r.apply(this);return i.write(e,n)}),o.init(i,"__wrapped__",t,r)}}]); |
@@ -15,3 +15,3 @@ # Examples | ||
.push({ name: process.argv[2] }) | ||
.value() | ||
.write() | ||
@@ -33,3 +33,3 @@ console.log(result) | ||
db.defaults({ posts: [] }) | ||
.value() | ||
.write() | ||
@@ -39,3 +39,3 @@ // Data is automatically saved to localStorage | ||
.push({ title: 'lowdb' }) | ||
.value() | ||
.write() | ||
``` | ||
@@ -62,17 +62,9 @@ | ||
// Init | ||
db.defaults({ posts: [] }) | ||
.value() | ||
// Define posts | ||
const posts = db.get('posts') | ||
// Routes | ||
// GET /posts/:id | ||
app.get('/posts/:id', (req, res) => { | ||
const post = posts | ||
db.get('posts') | ||
.find({ id: req.params.id }) | ||
.value() | ||
res.send(post) | ||
.write() | ||
.then(post => res.send(post)) | ||
}) | ||
@@ -82,38 +74,30 @@ | ||
app.post('/posts', (req, res) => { | ||
// Some basic id generation, use uuid ideally | ||
req.body.id = Date.now() | ||
// post will be created asynchronously in the background | ||
const post = posts | ||
db.get('posts') | ||
.push(req.body) | ||
.last() | ||
.value() | ||
res.send(post) | ||
.assign({ id: Date.now() }) | ||
.write() | ||
.then(post => res.send(post)) | ||
}) | ||
app.listen(3000, () => console.log('Server is listening')) | ||
// Init | ||
db.defaults({ posts: [] }) | ||
.write() | ||
.then(() => { | ||
app.listen(3000, () => console.log('Server is listening') | ||
}) | ||
``` | ||
In the example above, data is written asynchronously in the background. If you want to send the response only after it has been written, set `writeOnChange` to `false` and call `db.write()` manually. | ||
Using ES7 `async/await` and [Babel](https://babeljs.io/), you can write: | ||
```js | ||
const db = low('db.json', { | ||
storage: fileAsync, | ||
writeOnChange: false | ||
app.get('/posts/:id', async (req, res) => { | ||
const post = await db.get('posts') | ||
.find({ id: req.params.id }) | ||
.write() | ||
res.send(post) | ||
}) | ||
//... | ||
app.post('/posts', (req, res) => { | ||
const post = posts | ||
.push(req.body) | ||
.last() | ||
.value() | ||
db.write() | ||
.then(() => res.send(post)) | ||
}) | ||
// ... | ||
``` | ||
## In-memory | ||
@@ -130,7 +114,7 @@ | ||
db.defaults({ posts: [] }) | ||
.value() | ||
.write() | ||
db.get('posts') | ||
.push({ title: 'lowdb' }) | ||
.value() | ||
.write() | ||
@@ -137,0 +121,0 @@ // Manual writing |
{ | ||
"name": "lowdb", | ||
"version": "0.14.0", | ||
"version": "0.15.0", | ||
"description": "JSON database for Node and the browser powered by lodash API", | ||
@@ -21,9 +21,8 @@ "keywords": [ | ||
"scripts": { | ||
"test": "tape -r babel-register -r babel-polyfill test/*.js | tap-spec", | ||
"test": "npm run tape && standard", | ||
"fix": "standard --fix", | ||
"tape": "tape -r babel-register -r babel-polyfill test/*.js | tap-spec", | ||
"prepublish": "npm run build", | ||
"precommit": "npm test", | ||
"build": "npm run babel && npm run browserify && npm run uglify", | ||
"babel": "babel src --out-dir lib", | ||
"browserify": "mkdir -p dist && browserify lib/index.browser.js -o dist/lowdb.js --standalone low", | ||
"uglify": "uglifyjs dist/lowdb.js -o dist/lowdb.min.js" | ||
"build": "rimraf dist && webpack && webpack -p" | ||
}, | ||
@@ -45,3 +44,4 @@ "repository": { | ||
"lodash": "4", | ||
"steno": "^0.4.1" | ||
"steno": "^0.4.1", | ||
"webpack": "^2.2.1" | ||
}, | ||
@@ -56,5 +56,5 @@ "devDependencies": { | ||
"babel-register": "^6.9.0", | ||
"browserify": "^13.0.1", | ||
"husky": "^0.11.9", | ||
"lodash": "^4.12.0", | ||
"husky": "^0.13.0", | ||
"ramda": "^0.23.0", | ||
"rimraf": "^2.5.4", | ||
"sinon": "^1.17.2", | ||
@@ -65,5 +65,3 @@ "standard": "^8.5.0", | ||
"tempfile": "^1.1.1", | ||
"uglify-js": "^2.6.2", | ||
"underscore-db": "^0.12.0", | ||
"webpack": "^1.12.13" | ||
"underscore-db": "^0.12.0" | ||
}, | ||
@@ -74,11 +72,8 @@ "engines": { | ||
"browser": { | ||
"./lib/index.node.js": "./lib/index.browser.js" | ||
"./src/storages/file-sync.js": "./src/storages/browser.js", | ||
"./lib/storages/file-sync.js": "./lib/storages/browser.js" | ||
}, | ||
"standard": { | ||
"parser": "babel-eslint" | ||
}, | ||
"typings": "./lowdb.d.ts", | ||
"typescript": { | ||
"definition": "./lowdb.d.ts" | ||
} | ||
} |
# Lowdb [![NPM version](https://badge.fury.io/js/lowdb.svg)](http://badge.fury.io/js/lowdb) [![Build Status](https://travis-ci.org/typicode/lowdb.svg?branch=master)](https://travis-ci.org/typicode/lowdb) | ||
> A small local database for small projects :cat: (powered by lodash API) | ||
> A small local database powered by lodash API | ||
Used by [json-server](https://github.com/typicode/json-server) and [more than 90 awesome projects on npm](https://www.npmjs.com/package/lowdb). | ||
```js | ||
const db = low('db.json') | ||
// Set some defaults if your JSON file is empty | ||
db.defaults({ posts: [], user: {} }) | ||
.value() | ||
.write() | ||
// Add a post | ||
db.get('posts') | ||
.push({ id: 1, title: 'lowdb is awesome'}) | ||
.value() | ||
.write() | ||
// Set a user | ||
db.set('user.name', 'typicode') | ||
@@ -19,3 +24,3 @@ .value() | ||
Data is __automatically__ saved to `db.json` | ||
Data is saved to `db.json` | ||
@@ -33,3 +38,3 @@ ```json | ||
And you can query it using [lodash API](https://lodash.com/docs) | ||
You can use any [lodash](https://lodash.com/docs) function like `_.get` and `_.find` with shorthand syntax. | ||
@@ -71,5 +76,10 @@ ```js | ||
npm install lowdb --save | ||
yarn add lowdb # if you prefer to use yarn | ||
``` | ||
Alternatively, if you're using [yarn](https://yarnpkg.com/) | ||
```sh | ||
yarn add lowdb | ||
``` | ||
A UMD build is also available on [unpkg](https://unpkg.com/) for testing and quick prototyping: | ||
@@ -92,8 +102,7 @@ | ||
* `storage` object, by default `lowdb/lib/file-sync` or `lowdb/lib/browser`. | ||
* `read` function or null | ||
* `write` function or null | ||
* `read` function | ||
* `write` function | ||
* `format` object | ||
* `serialize` function, by default `JSON.stringify` | ||
* `deserialize` function, by default `JSON.parse` | ||
* `writeOnChange`boolean | ||
@@ -114,5 +123,2 @@ Creates a __lodash chain__, you can use __any__ lodash method on it. When `.value()` is called data is saved using `storage`. | ||
// write on change disabled | ||
low('db.json', { writeOnChange: false }) | ||
// read-only | ||
@@ -168,3 +174,3 @@ const fileSync = require('lowdb/lib/file-sync') | ||
Persists database using `storage.write` option. Depending on the storage, it may return a promise (for example, with `file-async'). | ||
Persists database using `storage.write` option. Depending on the storage, it may return a promise (for example, with `file-async`). | ||
@@ -212,3 +218,3 @@ By default, lowdb automatically calls it when database changes. | ||
db.set('posts', []) | ||
.value() | ||
.write() | ||
``` | ||
@@ -256,3 +262,3 @@ | ||
.assign({ title: 'hi!'}) | ||
.value() | ||
.write() | ||
``` | ||
@@ -265,5 +271,12 @@ | ||
.remove({ title: 'low!' }) | ||
.value() | ||
.write() | ||
``` | ||
Remove a property. | ||
```js | ||
db.unset('user.name') | ||
.write() | ||
``` | ||
Make a deep clone of posts. | ||
@@ -289,3 +302,3 @@ | ||
const postId = db.get('posts').insert({ title: 'low!' }).value().id | ||
const postId = db.get('posts').insert({ title: 'low!' }).write().id | ||
const post = db.get('posts').getById(postId).value() | ||
@@ -299,3 +312,3 @@ ``` | ||
const postId = db.get('posts').push({ id: uuid(), title: 'low!' }).value().id | ||
const postId = db.get('posts').push({ id: uuid(), title: 'low!' }).write().id | ||
const post = db.get('posts').find({ id: postId }).value() | ||
@@ -302,0 +315,0 @@ ``` |
@@ -0,1 +1,2 @@ | ||
var path = require('path') | ||
var webpack = require('webpack') | ||
@@ -6,10 +7,14 @@ var pkg = require('./package.json') | ||
module.exports = { | ||
entry: './src/index.js', | ||
entry: './src/main.js', | ||
output: { | ||
path: './dist', | ||
library: 'low', | ||
libraryTarget: 'umd' | ||
path: path.resolve(__dirname, 'dist'), | ||
filename: process.argv.indexOf('-p') !== -1 | ||
? 'lowdb.min.js' | ||
: 'lowdb.js', | ||
library: 'low' | ||
}, | ||
externals: { | ||
'lodash': '_' | ||
lodash: { | ||
root: '_' // indicates global variable | ||
} | ||
}, | ||
@@ -21,5 +26,5 @@ plugins: [ | ||
loaders: [ | ||
{ test: /\.js$/, exclude: /node_modules/, loader: 'babel' } | ||
{ test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader' } | ||
] | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
16
1
366
0
23020
6
9
198
+ Addedwebpack@^2.2.1
+ Addedacorn@4.0.135.7.4(transitive)
+ Addedacorn-dynamic-import@2.0.2(transitive)
+ Addedajv@4.11.8(transitive)
+ Addedajv-keywords@1.5.1(transitive)
+ Addedalign-text@0.1.4(transitive)
+ Addedansi-regex@2.1.1(transitive)
+ Addedanymatch@2.0.03.1.3(transitive)
+ Addedarr-diff@4.0.0(transitive)
+ Addedarr-flatten@1.1.0(transitive)
+ Addedarr-union@3.1.0(transitive)
+ Addedarray-unique@0.3.2(transitive)
+ Addedasn1.js@4.10.1(transitive)
+ Addedassert@1.5.1(transitive)
+ Addedassign-symbols@1.0.0(transitive)
+ Addedasync@2.6.4(transitive)
+ Addedasync-each@1.0.6(transitive)
+ Addedatob@2.1.2(transitive)
+ Addedbase@0.11.2(transitive)
+ Addedbase64-js@1.5.1(transitive)
+ Addedbig.js@3.2.0(transitive)
+ Addedbinary-extensions@1.13.12.3.0(transitive)
+ Addedbindings@1.5.0(transitive)
+ Addedbn.js@4.12.05.2.1(transitive)
+ Addedbraces@2.3.23.0.3(transitive)
+ Addedbrorand@1.1.0(transitive)
+ Addedbrowserify-aes@1.2.0(transitive)
+ Addedbrowserify-cipher@1.0.1(transitive)
+ Addedbrowserify-des@1.0.2(transitive)
+ Addedbrowserify-rsa@4.1.1(transitive)
+ Addedbrowserify-sign@4.2.3(transitive)
+ Addedbrowserify-zlib@0.2.0(transitive)
+ Addedbuffer@4.9.2(transitive)
+ Addedbuffer-xor@1.0.3(transitive)
+ Addedbuiltin-status-codes@3.0.0(transitive)
+ Addedcache-base@1.0.1(transitive)
+ Addedcall-bind@1.0.7(transitive)
+ Addedcamelcase@1.2.13.0.0(transitive)
+ Addedcenter-align@0.1.3(transitive)
+ Addedchokidar@2.1.83.6.0(transitive)
+ Addedcipher-base@1.0.4(transitive)
+ Addedclass-utils@0.3.6(transitive)
+ Addedcliui@2.1.03.2.0(transitive)
+ Addedco@4.6.0(transitive)
+ Addedcode-point-at@1.1.0(transitive)
+ Addedcollection-visit@1.0.0(transitive)
+ Addedcomponent-emitter@1.3.1(transitive)
+ Addedconsole-browserify@1.2.0(transitive)
+ Addedconstants-browserify@1.0.0(transitive)
+ Addedcopy-descriptor@0.1.1(transitive)
+ Addedcore-util-is@1.0.3(transitive)
+ Addedcreate-ecdh@4.0.4(transitive)
+ Addedcreate-hash@1.2.0(transitive)
+ Addedcreate-hmac@1.1.7(transitive)
+ Addedcrypto-browserify@3.12.0(transitive)
+ Addeddebug@2.6.9(transitive)
+ Addeddecamelize@1.2.0(transitive)
+ Addeddecode-uri-component@0.2.2(transitive)
+ Addeddefine-data-property@1.1.4(transitive)
+ Addeddefine-properties@1.2.1(transitive)
+ Addeddefine-property@0.2.51.0.02.0.2(transitive)
+ Addeddes.js@1.1.0(transitive)
+ Addeddiffie-hellman@5.0.3(transitive)
+ Addeddomain-browser@1.2.0(transitive)
+ Addedelliptic@6.5.7(transitive)
+ Addedemojis-list@2.1.0(transitive)
+ Addedenhanced-resolve@3.4.1(transitive)
+ Addederrno@0.1.8(transitive)
+ Addederror-ex@1.3.2(transitive)
+ Addedes-define-property@1.0.0(transitive)
+ Addedes-errors@1.3.0(transitive)
+ Addedevents@3.3.0(transitive)
+ Addedevp_bytestokey@1.0.3(transitive)
+ Addedexpand-brackets@2.1.4(transitive)
+ Addedextend-shallow@2.0.13.0.2(transitive)
+ Addedextglob@2.0.4(transitive)
+ Addedfile-uri-to-path@1.0.0(transitive)
+ Addedfill-range@4.0.07.1.1(transitive)
+ Addedfind-up@1.1.2(transitive)
+ Addedfor-in@1.0.2(transitive)
+ Addedfragment-cache@0.2.1(transitive)
+ Addedfsevents@1.2.132.3.3(transitive)
+ Addedfunction-bind@1.1.2(transitive)
+ Addedget-caller-file@1.0.3(transitive)
+ Addedget-intrinsic@1.2.4(transitive)
+ Addedget-value@2.0.6(transitive)
+ Addedglob-parent@3.1.05.1.2(transitive)
+ Addedgopd@1.0.1(transitive)
+ Addedhas-flag@1.0.0(transitive)
+ Addedhas-property-descriptors@1.0.2(transitive)
+ Addedhas-proto@1.0.3(transitive)
+ Addedhas-symbols@1.0.3(transitive)
+ Addedhas-value@0.3.11.0.0(transitive)
+ Addedhas-values@0.1.41.0.0(transitive)
+ Addedhash-base@3.0.4(transitive)
+ Addedhash.js@1.1.7(transitive)
+ Addedhasown@2.0.2(transitive)
+ Addedhmac-drbg@1.0.1(transitive)
+ Addedhosted-git-info@2.8.9(transitive)
+ Addedhttps-browserify@1.0.0(transitive)
+ Addedieee754@1.2.1(transitive)
+ Addedinherits@2.0.32.0.4(transitive)
+ Addedinterpret@1.4.0(transitive)
+ Addedinvert-kv@1.0.0(transitive)
+ Addedis-accessor-descriptor@1.0.1(transitive)
+ Addedis-arrayish@0.2.1(transitive)
+ Addedis-binary-path@1.0.12.1.0(transitive)
+ Addedis-buffer@1.1.6(transitive)
+ Addedis-core-module@2.15.1(transitive)
+ Addedis-data-descriptor@1.0.1(transitive)
+ Addedis-descriptor@0.1.71.0.3(transitive)
+ Addedis-extendable@0.1.11.0.1(transitive)
+ Addedis-extglob@2.1.1(transitive)
+ Addedis-fullwidth-code-point@1.0.0(transitive)
+ Addedis-glob@3.1.04.0.3(transitive)
+ Addedis-number@3.0.07.0.0(transitive)
+ Addedis-plain-object@2.0.4(transitive)
+ Addedis-utf8@0.2.1(transitive)
+ Addedis-windows@1.0.2(transitive)
+ Addedisarray@1.0.02.0.5(transitive)
+ Addedisobject@2.1.03.0.1(transitive)
+ Addedjson-loader@0.5.7(transitive)
+ Addedjson-stable-stringify@1.1.1(transitive)
+ Addedjson5@0.5.1(transitive)
+ Addedjsonify@0.0.1(transitive)
+ Addedkind-of@3.2.24.0.06.0.3(transitive)
+ Addedlazy-cache@1.0.4(transitive)
+ Addedlcid@1.0.0(transitive)
+ Addedload-json-file@1.1.0(transitive)
+ Addedloader-runner@2.4.0(transitive)
+ Addedloader-utils@0.2.17(transitive)
+ Addedlongest@1.0.1(transitive)
+ Addedmap-cache@0.2.2(transitive)
+ Addedmap-visit@1.0.0(transitive)
+ Addedmd5.js@1.3.5(transitive)
+ Addedmemory-fs@0.4.1(transitive)
+ Addedmicromatch@3.1.10(transitive)
+ Addedmiller-rabin@4.0.1(transitive)
+ Addedminimalistic-assert@1.0.1(transitive)
+ Addedminimalistic-crypto-utils@1.0.1(transitive)
+ Addedminimist@1.2.8(transitive)
+ Addedmixin-deep@1.3.2(transitive)
+ Addedmkdirp@0.5.6(transitive)
+ Addedms@2.0.0(transitive)
+ Addednan@2.20.0(transitive)
+ Addednanomatch@1.2.13(transitive)
+ Addedneo-async@2.6.2(transitive)
+ Addednode-libs-browser@2.2.1(transitive)
+ Addednormalize-package-data@2.5.0(transitive)
+ Addednormalize-path@2.1.13.0.0(transitive)
+ Addednumber-is-nan@1.0.1(transitive)
+ Addedobject-assign@4.1.1(transitive)
+ Addedobject-copy@0.1.0(transitive)
+ Addedobject-inspect@1.13.2(transitive)
+ Addedobject-keys@1.1.1(transitive)
+ Addedobject-visit@1.0.1(transitive)
+ Addedobject.assign@4.1.5(transitive)
+ Addedobject.pick@1.3.0(transitive)
+ Addedos-browserify@0.3.0(transitive)
+ Addedos-locale@1.4.0(transitive)
+ Addedpako@1.0.11(transitive)
+ Addedparse-asn1@5.1.7(transitive)
+ Addedparse-json@2.2.0(transitive)
+ Addedpascalcase@0.1.1(transitive)
+ Addedpath-browserify@0.0.1(transitive)
+ Addedpath-dirname@1.0.2(transitive)
+ Addedpath-exists@2.1.0(transitive)
+ Addedpath-is-absolute@1.0.1(transitive)
+ Addedpath-parse@1.0.7(transitive)
+ Addedpath-type@1.1.0(transitive)
+ Addedpbkdf2@3.1.2(transitive)
+ Addedpicomatch@2.3.1(transitive)
+ Addedpify@2.3.0(transitive)
+ Addedpinkie@2.0.4(transitive)
+ Addedpinkie-promise@2.0.1(transitive)
+ Addedposix-character-classes@0.1.1(transitive)
+ Addedprocess@0.11.10(transitive)
+ Addedprocess-nextick-args@2.0.1(transitive)
+ Addedprr@1.0.1(transitive)
+ Addedpublic-encrypt@4.0.3(transitive)
+ Addedpunycode@1.4.1(transitive)
+ Addedqs@6.13.0(transitive)
+ Addedquerystring-es3@0.2.1(transitive)
+ Addedrandombytes@2.1.0(transitive)
+ Addedrandomfill@1.0.4(transitive)
+ Addedread-pkg@1.1.0(transitive)
+ Addedread-pkg-up@1.0.1(transitive)
+ Addedreadable-stream@2.3.8(transitive)
+ Addedreaddirp@2.2.13.6.0(transitive)
+ Addedregex-not@1.0.2(transitive)
+ Addedremove-trailing-separator@1.1.0(transitive)
+ Addedrepeat-element@1.1.4(transitive)
+ Addedrepeat-string@1.6.1(transitive)
+ Addedrequire-directory@2.1.1(transitive)
+ Addedrequire-main-filename@1.0.1(transitive)
+ Addedresolve@1.22.8(transitive)
+ Addedresolve-url@0.2.1(transitive)
+ Addedret@0.1.15(transitive)
+ Addedright-align@0.1.3(transitive)
+ Addedripemd160@2.0.2(transitive)
+ Addedsafe-buffer@5.1.25.2.1(transitive)
+ Addedsafe-regex@1.1.0(transitive)
+ Addedsemver@5.7.2(transitive)
+ Addedset-blocking@2.0.0(transitive)
+ Addedset-function-length@1.2.2(transitive)
+ Addedset-value@2.0.1(transitive)
+ Addedsetimmediate@1.0.5(transitive)
+ Addedsha.js@2.4.11(transitive)
+ Addedside-channel@1.0.6(transitive)
+ Addedsnapdragon@0.8.2(transitive)
+ Addedsnapdragon-node@2.1.1(transitive)
+ Addedsnapdragon-util@3.0.1(transitive)
+ Addedsource-list-map@2.0.1(transitive)
+ Addedsource-map@0.5.70.6.1(transitive)
+ Addedsource-map-resolve@0.5.3(transitive)
+ Addedsource-map-url@0.4.1(transitive)
+ Addedspdx-correct@3.2.0(transitive)
+ Addedspdx-exceptions@2.5.0(transitive)
+ Addedspdx-expression-parse@3.0.1(transitive)
+ Addedspdx-license-ids@3.0.20(transitive)
+ Addedsplit-string@3.1.0(transitive)
+ Addedstatic-extend@0.1.2(transitive)
+ Addedstream-browserify@2.0.2(transitive)
+ Addedstream-http@2.8.3(transitive)
+ Addedstring-width@1.0.2(transitive)
+ Addedstring_decoder@1.1.11.3.0(transitive)
+ Addedstrip-ansi@3.0.1(transitive)
+ Addedstrip-bom@2.0.0(transitive)
+ Addedsupports-color@3.2.3(transitive)
+ Addedsupports-preserve-symlinks-flag@1.0.0(transitive)
+ Addedtapable@0.2.9(transitive)
+ Addedtimers-browserify@2.0.12(transitive)
+ Addedto-arraybuffer@1.0.1(transitive)
+ Addedto-object-path@0.3.0(transitive)
+ Addedto-regex@3.0.2(transitive)
+ Addedto-regex-range@2.1.15.0.1(transitive)
+ Addedtty-browserify@0.0.0(transitive)
+ Addeduglify-js@2.8.29(transitive)
+ Addeduglify-to-browserify@1.0.2(transitive)
+ Addedunion-value@1.0.1(transitive)
+ Addedunset-value@1.0.0(transitive)
+ Addedupath@1.2.0(transitive)
+ Addedurix@0.1.0(transitive)
+ Addedurl@0.11.4(transitive)
+ Addeduse@3.1.1(transitive)
+ Addedutil@0.10.40.11.1(transitive)
+ Addedutil-deprecate@1.0.2(transitive)
+ Addedvalidate-npm-package-license@3.0.4(transitive)
+ Addedvm-browserify@1.1.2(transitive)
+ Addedwatchpack@1.7.5(transitive)
+ Addedwatchpack-chokidar2@2.0.1(transitive)
+ Addedwebpack@2.7.0(transitive)
+ Addedwebpack-sources@1.4.3(transitive)
+ Addedwhich-module@1.0.0(transitive)
+ Addedwindow-size@0.1.0(transitive)
+ Addedwordwrap@0.0.2(transitive)
+ Addedwrap-ansi@2.1.0(transitive)
+ Addedxtend@4.0.2(transitive)
+ Addedy18n@3.2.2(transitive)
+ Addedyargs@3.10.06.6.0(transitive)
+ Addedyargs-parser@4.2.1(transitive)