jo / couchdb-compile

Build CouchDB documents from directory, JSON or CommonJS module
Other
38 stars 11 forks source link

couchdb-compile

Build CouchDB documents from directory, JSON or module.

API

compile(source[, options], callback)

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