couchdb-compile

Build CouchDB documents from fs.

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
couchdb-compile
1.11.23 years ago9 years agoMinified + gzip package size for couchdb-compile in KB

Readme

couchdb-compile
Build CouchDB documents from directory, JSON or module.

API

compile(source[, options], callback)
  • source - Can be an object, a CouchDB Directory Tree (see below), a JSON file or a CommonJS module
  • options.index - When set to true, folders are searched for index.js, which, if present, is treated as CommonJS module. Default is false.
  • options.multipart - When set to true, attachments are handled as multipart. Default is false.
  • callback - called when done with two arguments: error and doc.

In case options.multipart is set, callback is called with a third argument: attachments. This is a multipart attachments array as required by nanos db.multipart.insert:
{
  name: 'rabbit.png',
  content_type: 'image/png',
  data: <Buffer>
}
data can be a Buffer or a String.

Example

var compile = require('couchdb-compile');
compile('project/couchdb', function(error, doc) {
  // doc is a compile object now
});

CLI

couchdb-compile [SOURCE] [OPTIONS]

When SOURCE is omitted, the current directory will be used.
OPTIONS can be --index and --pretty, see above.
Use --pretty to get a pretty printed json output.

Example

couchdb-compile project/couchdb
couchdb-compile project/couchdb --pretty

Stringifying Functions

If there is a function inside source (passed as object or path to CommonJS module), functions get stringified by calling toString on them.
eg:
compile({
  foo: function () {
    return 42
  }
}, (error, result) => {
  // {
  //   foo: 'function () {\n  return 42\n}'
  // }
})

The CouchDB Directory Tree

couchdb-compile uses a filesystem mapping similar to Couchapp python tool and Erica: The Couchapp Filesystem Mapping.
It is quite self-explanatory. For example:
myapp
├── _id
├── language
└── views
    └── numbers
        ├── map.js
        └── reduce.js

becomes:
{
  "_id": "_design/myapp",
  "language": "javascript",
  "views": {
    "numbers": {
      "map": "function...",
      "reduce": "function..."
    }
  }
}

See test/fixtures and test/expected for usage examples.

IDs

If you do not include an _id property, the filename will be used.

File Extensions

For property names file extensions will be stripped:
{
  "validate_doc_update": "content of validate_doc_update.js",
}

Attachments

Files inside the _attachments directory are handled special: They become attachment entries of the form
{
  "a/file.txt": {
    "data": "SGVsbG8gV29ybGQhCg==",
    "content_type": "text/plain"
  }
}

The content_type is computed using mime, with a fallback to application/octet-stream. data is the base64 encoded value of the file.
Read more about Inline Attachments.

Tests

npm test

(c) 2014-2018 Johannes J. Schmidt Apache 2.0 License