Socket
Socket
Sign inDemoInstall

lowdb

Package Overview
Dependencies
Maintainers
1
Versions
76
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lowdb - npm Package Compare versions

Comparing version 0.14.0 to 0.15.0

276

dist/lowdb.js

@@ -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' }
]
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc