couchdb-compile
v1.11.2
Published
Build CouchDB documents from fs.
Downloads
10,298
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 moduleoptions.index
- When set totrue
, folders are searched forindex.js
, which, if present, is treated as CommonJS module. Default isfalse
.options.multipart
- When set totrue
, attachments are handled as multipart. Default isfalse
.callback
- called when done with two arguments:error
anddoc
.
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