diff options
author | Alexander Early <alexander.early@gmail.com> | 2017-10-15 14:55:09 -0700 |
---|---|---|
committer | Alexander Early <alexander.early@gmail.com> | 2017-10-15 14:55:09 -0700 |
commit | 95f9dc7f57133d5d634c3e470147a9427588c0fb (patch) | |
tree | 8595ed16f606477782a388afed57c9e374386728 /support/generate-index.js | |
parent | 93515e3b0df21c0910658788d1aa6c2ef21e1775 (diff) | |
download | async-95f9dc7f57133d5d634c3e470147a9427588c0fb.tar.gz |
generate lib/index.js from a template and a list of aliases
Diffstat (limited to 'support/generate-index.js')
-rw-r--r-- | support/generate-index.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/support/generate-index.js b/support/generate-index.js new file mode 100644 index 0000000..4154d03 --- /dev/null +++ b/support/generate-index.js @@ -0,0 +1,66 @@ +#!/usr/bin/env node +'use strict' + +const fs = require('fs') +const path = require('path') +require('babel-core/register') +const autoInject = require('../lib/autoInject').default + +generateIndex(err => { + if (err) throw err +}) + +function generateIndex(cb) { + autoInject({ + entries: cb => readEntries(cb), + aliases: cb => cb(null, require('./aliases')), + template: cb => fs.readFile(path.join(__dirname, './index-template.js'), 'utf8', cb), + generated: (entries, aliases, template, cb) => { + cb(null, renderTemplate(entries, aliases, template)) + } + }, (err, results) => { + if (err) return cb(err) + console.log(results.generated) + }) +} + +function readEntries (cb) { + const libDir = path.join(__dirname, '../lib') + fs.readdir(libDir, (err, files) => { + if (err) return cb(err) + cb(null, files + .map(file => path.basename(file, '.js')) + .filter(file => !file.match(/(^(index|internal)$)/))) + }) +} + +function renderTemplate(entries, aliases, template) { + return template + .replace( + `/*__imports__*/`, + entries + .map(entry => `import ${entry} from './${entry}'`) + .join('\n')) + .replace( + `/*__default_object__*/`, + entries + .map(entry => ` ${entry}: ${entry}`) + .join(',\n') + ',') + + .replace( + `/*__default_aliases__*/`, + Object.keys(aliases) + .map(alias => ` ${alias}: ${aliases[alias]}`) + .join(',\n')) + .replace( + `/*__exports__*/`, + entries + .map(entry => ` ${entry} as ${entry}`) + .join(',\n') + ',') + + .replace( + `/*__alias_exports__*/`, + Object.keys(aliases) + .map(alias => ` ${aliases[alias]} as ${alias}`) + .join(',\n')) +} |