Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

nedb-lite

kaizhu25640MIT2016.9.1

this package will run a standalone, browser-compatible version of the nedb v1.8.0 database with zero npm-dependencies

browser, db, indexeddb, localstorage, mongo, mongodb, nedb, no-sql, nosql, persistence, persistent, web, web-sql, websql

readme

nedb-lite

this package will run a standalone, browser-compatible version of the nedb v1.8.0 database with zero npm-dependencies

travis-ci.org build-status

NPM

package-listing

live demo

github.com test-server

documentation

todo

  • none

change since c6fd675c

  • npm publish 2016.9.1
  • make db always persistent
  • removed support for native-datetime (automatically converted to iso-string)
  • tables automatically includes createdAt and updatedAt fields
  • remove async dependency
  • remove localForage dependency
  • remove underscore dependency
  • remove util dependency
  • none

this package requires

  • darwin or linux os

additional info

differences from original nedb @ https://github.com/louischatriot/nedb

  • shared js-env - removed options afterSerialization, beforeSerialization, corruptAlertThreshold, inMemoryOnly
  • shared js-env - removed support for native-datetime (automatically converted to iso-string)
  • shared js-env - removed support for promises (callbacks only)
  • shared js-env - tables always have the timestamp-fields createdAt and updatedAt
  • browser js-env - removed support for persistence in localStorage and web-sql (persistence requires indexedDB)
  • node js-env - removed support for ms-windows platform

api-doc

api-doc

build-status travis-ci.org build-status

build commit status

git-branch : master beta alpha
test-server-1 : github.com test-server github.com test-server github.com test-server
test-server-2 : heroku.com test-server heroku.com test-server heroku.com test-server
test-report : test-report test-report test-report
coverage : istanbul coverage istanbul coverage istanbul coverage
build-artifacts : build-artifacts build-artifacts build-artifacts

master branch

  • stable branch
  • HEAD should be tagged, npm-published package

beta branch

  • semi-stable branch
  • HEAD should be latest, npm-published package

alpha branch

  • unstable branch
  • HEAD is arbitrary
  • commit history may be rewritten

quickstart web example

screen-capture

to run this example, follow the instruction in the script below

this script will will demo the browser-version of nedb

instruction

1. save this script as example.js
2. run the shell command:
    $ npm install nedb-lite && export PORT=8081 && node example.js
3. open a browser to http://localhost:8081
4. edit or paste script in browser to eval

*/

/* istanbul instrument in package nedb-lite / /jslint bitwise: true, browser: true, maxerr: 8, maxlen: 96, node: true, nomen: true, regexp: true, stupid: true */ (function () { 'use strict'; var local;

// run shared js-env code - pre-init
(function () {
    // init local
    local = {};
    // init modeJs
    local.modeJs = (function () {
        try {
            return typeof navigator.userAgent === 'string' &&
                typeof document.querySelector('body') === 'object' &&
                typeof XMLHttpRequest.prototype.open === 'function' &&
                'browser';
        } catch (errorCaughtBrowser) {
            return module.exports &&
                typeof process.versions.node === 'string' &&
                typeof require('http').createServer === 'function' &&
                'node';
        }
    }());
    /* istanbul ignore next */
    // re-init local
    local = local.modeJs === 'browser'
        ? window.Nedb.local
        : module.isRollup
        ? module
        : require('nedb-lite').local;
    // init global
    local.global = local.modeJs === 'browser'
        ? window
        : global;
    // export local
    local.global.local = local;
}());
switch (local.modeJs) {



// run browser js-env code - post-init
case 'browser':
    ['error', 'log'].forEach(function (key) {
        console['_' + key] = console[key];
        console[key] = function () {
            console['_' + key].apply(console, arguments);
            document.querySelector('#outputTextarea1').value +=
                Array.prototype.slice.call(arguments).map(function (arg) {
                    return typeof arg === 'string'
                        ? arg
                        : local.Nedb.jsonStringifyOrdered(arg, null, 4);
                }).join(' ') + '\n';
        };
    });
    /* istanbul ignore next */
    local.testRun = function (event) {
        var reader, tmp;
        switch (event && event.currentTarget.id) {
        case 'nedbExportButton1':
            tmp = window.URL.createObjectURL(new window.Blob([local.Nedb.dbExport()]));
            document.querySelector('#nedbExportA1').href = tmp;
            document.querySelector('#nedbExportA1').click();
            setTimeout(function () {
                window.URL.revokeObjectURL(tmp);
            }, 30000);
            break;
        case 'nedbImportButton1':
            document.querySelector('#nedbImportInput1').click();
            break;
        case 'nedbImportInput1':
            document.querySelector('#outputTextarea1').value = '';
            console.log('importing nedb-database ...');
            reader = new window.FileReader();
            tmp = document.querySelector('#nedbImportInput1').files[0];
            if (!tmp) {
                return;
            }
            reader.addEventListener('load', function () {
                local.Nedb.dbImport(reader.result, function () {
                    console.log('... imported nedb-database');
                });
            });
            reader.readAsText(tmp);
            break;
        case 'nedbResetButton1':
            document.querySelector('#outputTextarea1').value = '';
            console.log('resetting nedb-database ...');
            local.Nedb.dbReset(function () {
                console.log('... resetted nedb-database');
            });
            break;
        case 'testRunButton1':
            local.modeTest = true;
            local.utility2.testRun(local);
            break;
        default:
            document.querySelector('#outputTextarea1').value = '';
            try {
                /*jslint evil: true*/
                eval(document.querySelector('#inputTextarea1').value);
            } catch (errorCaught) {
                document.querySelector('#outputTextarea1').value = errorCaught.stack;
            }
        }
    };
    // init event-handling
    ['change', 'click', 'keyup'].forEach(function (event) {
        Array.prototype.slice.call(
            document.querySelectorAll('.on' + event)
        ).forEach(function (element) {
            element.addEventListener(event, local.testRun);
        });
    });
    // run tests
    local.testRun();
    break;



/* istanbul ignore next */
// run node js-env code - post-init
case 'node':
    // export local
    module.exports = local;
    // require modules
    local.fs = require('fs');
    local.http = require('http');
    local.path = require('path');
    local.url = require('url');
    // init assets
    /* jslint-ignore-begin */
    local.templateIndexHtml = '\
<!doctype html>

\n\

<html lang="en">\n\ <head>\n\ <meta charset="UTF-8">\n\ <meta name="viewport" content="width=device-width, initial-scale=1">\n\ <title>\n\ {{envDict.npm_package_name}} v{{envDict.npm_package_version}}\n\ </title>\n\ <style>\n\ /*csslint\n\ box-sizing: false,\n\ ids: false,\n\ universal-selector: false\n\ */\n\ * {\n\ box-sizing: border-box;\n\ }\n\ body {\n\ background-color: #fff;\n\ font-family: Arial, Helvetica, sans-serif;\n\ }\n\ body > * {\n\ margin-bottom: 1rem;\n\ }\n\ body > button {\n\ width: 15rem;\n\ }\n\ textarea {\n\ font-family: monospace;\n\ height: 16rem;\n\ width: 100%;\n\ }\n\ textarea[readonly] {\n\ background-color: #ddd;\n\ }\n\ .zeroPixel {\n\ border: 0;\n\ height: 0;\n\ margin: 0;\n\ padding: 0;\n\ width: 0;\n\ }\n\ </style>\n\ </head>\n\ <body>\n\

\n\ \n\ {{envDict.npm_package_name}} v{{envDict.npm_package_version}}\n\ \n\ \n\

\n\

{{envDict.npm_package_description}}

\n\ \n\ \n\ <button class="onclick" id="nedbResetButton1">reset nedb-database</button>
\n\ <button class="onclick" id="nedbExportButton1">save nedb-database to file</button>
\n\ \n\ <button class="onclick" id="nedbImportButton1">load nedb-database from file</button>
\n\ <input class="onchange zeroPixel" type="file" id="nedbImportInput1">\n\ <label>edit or paste script below to\n\ <a\n\ href="https://kaizhu256.github.io/node-nedb-lite/build/doc.api.html"\n\ target="_blank"\n\ >eval\n\ </label>\n\ <textarea class="onkeyup" id="inputTextarea1">\n\ window.table1 = window.Nedb.dbTableCreate({ name: "table1" });\n\ table1.insert({ field1: "hello", field2: "world"}, function () {\n\ console.log();\n\ console.log(table1.export());\n\ });\n\ \n\ window.table2 = window.Nedb.dbTableCreate({ name: "table2" });\n\ table2.insert({ field1: "hello", field2: "world"}, function () {\n\ console.log();\n\ console.log(table2.export());\n\ });\n\ </textarea>\n\ <label>stderr and stdout</label>\n\ <textarea id="outputTextarea1" readonly></textarea>\n\ \n\ <script src="https://raw.githubusercontent.com/kaizhu256/node-nedb-lite/master/assets.utility2.rollup.js"></script>\n\ <script src="https://raw.githubusercontent.com/kaizhu256/node-nedb-lite/master/jsonp.utility2.stateInit?callback=window.utility2.stateInit"></script>\n\ <script src="https://raw.githubusercontent.com/kaizhu256/node-nedb-lite/master/assets.nedb-lite.js"></script>\n\ <script src="https://raw.githubusercontent.com/kaizhu256/node-nedb-lite/master/assets.example.js"></script>\n\ <script src="https://raw.githubusercontent.com/kaizhu256/node-nedb-lite/master/assets.test.js"></script>\n\ \n\ </body>\n\ </html>\n\ '; /* jslint-ignore-end */ local['/'] = local.templateIndexHtml .replace((/\{\{envDict\.(\w+?)\}\}/g), function (match0, match1) { // jslint-hack String(match0); switch (match1) { case 'npm_package_description': return 'example module'; case 'npm_package_name': return 'example'; case 'npm_package_version': return '0.0.1'; } }); if (module.isRollup) { break; } try { local['/assets.example.js'] = local.fs.readFileSync(__filename, 'utf8'); } catch (ignore) { } local['/assets.nedb-lite.js'] = local.fs.readFileSync( local.Nedb.__dirname + '/index.js', 'utf8' ); // run the cli if (module !== require.main) { break; } // start server console.log('server starting on port ' + process.env.PORT); local.http.createServer(function (request, response) { switch (local.url.parse(request.url).pathname) { case '/': case '/assets.example.js': case '/assets.nedb-lite.js': case '/assets.test.js': response.end(local[local.url.parse(request.url).pathname]); break; default: response.end(); } }).listen(process.env.PORT); // if $npm_config_timeout_exit is defined, // then exit this process after $npm_config_timeout_exit ms if (Number(process.env.npm_config_timeout_exit)) { setTimeout(process.exit, Number(process.env.npm_config_timeout_exit)); } break; } }()); ```

output from electron

screen-capture

output from shell

screen-capture

package.json

{
    "package.json": true,
    "author": "kai zhu <kaizhu256@gmail.com>",
    "description": "{{packageJson.description}}",
    "devDependencies": {
        "electron-lite": "kaizhu256/node-electron-lite#alpha",
        "utility2": "kaizhu256/node-utility2#alpha"
    },
    "engines": { "node": ">=4.2" },
    "homepage": "https://github.com/kaizhu256/node-nedb-lite",
    "keywords": [
        "browser",
        "db",
        "indexeddb",
        "localstorage",
        "mongo", "mongodb",
        "nedb", "no-sql", "nosql",
        "persistence", "persistent",
        "web", "web-sql", "websql"
    ],
    "license": "MIT",
    "name": "nedb-lite",
    "os": ["darwin", "linux"],
    "repository": {
        "type": "git",
        "url": "https://github.com/kaizhu256/node-nedb-lite.git"
    },
    "scripts": {
        "build-ci": "utility2 shRun shReadmeBuild",
        "start": "\
export PORT=${PORT:-8080} && \
export npm_config_mode_auto_restart=1 && \
utility2 shRun shIstanbulCover test.js",
        "test": "export PORT=$(utility2 shServerPortRandom) && utility2 test test.js"
    },
    "version": "2016.9.1"
}

changelog of last 50 commits

screen-capture

internal build-script

  • build.sh `shell

    build.sh

this shell script will run the build for this package

shBuildCiTestPre() {(set -e

this function will run the pre-test build

# test example.js
(export MODE_BUILD=testExampleJs &&
    shRunScreenCapture shReadmeTestJs example.js) || return $?
# test published-package
(export MODE_BUILD=npmTestPublished &&
    shRunScreenCapture shNpmTestPublished) || return $?
# coverage-hack - reset mock persistence
mkdir -p tmp/nedb.persistence.test
touch tmp/nedb.persistence.test/undefined

)}

shBuildCiTestPost() {(set -e

this function will run the post-test build

# if running legacy-node, then return
[ "$(node --version)" \< "v5.0" ] && return || true
export NODE_ENV=production
# deploy app to gh-pages
export TEST_URL="https://$(printf "$GITHUB_REPO" | \
    sed 's/\//.github.io\//')/build..$CI_BRANCH..travis-ci.org/app/index.html"
(export MODE_BUILD=githubDeploy &&
    shGithubDeploy) || return $?
# test deployed app to gh-pages
(export MODE_BUILD=githubTest &&
    export modeBrowserTest=test &&
    export url="$TEST_URL?modeTest=1&timeExit={{timeExit}}" &&
    shBrowserTest) || return $?
# deploy app to heroku
export HEROKU_REPO="hrku01-$npm_package_name-$CI_BRANCH"
export TEST_URL="https://$HEROKU_REPO.herokuapp.com"
shGitRepoBranchUpdateLocal() {(set -e
# this function will local-update git-repo-branch
    cp "$npm_config_dir_build/app/assets.app.js" .
    printf "web: npm_config_mode_backend=1 node assets.app.js" > Procfile
)}
(export MODE_BUILD=herokuDeploy &&
    shHerokuDeploy) || return $?
# test deployed app to heroku
(export MODE_BUILD=herokuTest &&
    export modeBrowserTest=test &&
    export url="$TEST_URL?modeTest=1&timeExit={{timeExit}}" &&
    shBrowserTest) || return $?

)}

shBuild() {(set -e

this function will run the main build

# init env
. node_modules/.bin/utility2 && shInit
# cleanup github-gh-pages dir
# export BUILD_GITHUB_UPLOAD_PRE_SH="rm -fr build"
# init github-gh-pages commit-limit
export COMMIT_LIMIT=16
# if branch is alpha, beta, or master, then run default build
if [ "$CI_BRANCH" = alpha ] ||
    [ "$CI_BRANCH" = beta ] ||
    [ "$CI_BRANCH" = master ]
then
    shBuildCiDefault
fi

)} shBuild `