[API] Include dependencies during rebundling

This commit is contained in:
Victor Woeltjen 2016-01-07 15:00:51 -08:00
parent 792fda48e3
commit 8d3aec02d6
2 changed files with 47 additions and 14 deletions

View File

@ -3,29 +3,53 @@
var glob = require('glob'), var glob = require('glob'),
fs = require('fs'), fs = require('fs'),
header = fs.readFileSync('header.txt', 'utf8'); _ = require('lodash'),
template = _.template(fs.readFileSync('template.txt', 'utf8'));
function indent(str) { function indent(str, depth) {
return str.split('\n').map(function (line, index) { return _.trimLeft(str.split('\n').map(function (line) {
return index === 0 ? line : (' ' + line); return _.repeat(' ', depth || 1) + line;
}).filter(function (line) { }).filter(function (line) {
return line.trim().length > 0; return line.trim().length > 0;
}).join('\n'));
}
function findImpls(bundleContents) {
return _(bundleContents.extensions || {})
.map().flatten().pluck('implementation').filter().value();
}
function toIdentifier(impl) {
var parts = impl.replace(".js", "").split('/');
return parts[parts.length - 1];
}
function toPath(impl) {
return "\"./src/" + impl.replace(".js", "") + "\"";
}
function replaceImpls(bundleText) {
var rx = /"implementation": "([^"]*)"/;
return bundleText.split('\n').map(function (line) {
var m = line.match(rx);
return m !== null ?
line.replace(rx, '"implementation": ' + toIdentifier(m[1])) :
line;
}).join('\n'); }).join('\n');
} }
function rebundle(file) { function rebundle(file) {
var plainJson = fs.readFileSync(file, 'utf8'), var plainJson = fs.readFileSync(file, 'utf8'),
bundleContents = JSON.parse(plainJson),
impls = findImpls(bundleContents),
bundleName = file.replace("/bundle.json", ""), bundleName = file.replace("/bundle.json", ""),
outputFile = file.replace(".json", ".js"), outputFile = file.replace(".json", ".js"),
contents = [ contents = template({
header, bundleName: bundleName,
" legacyRegistry.register(\"", implPaths: indent(impls.map(toPath).concat([""]).join(",\n")),
bundleName, implNames: indent(impls.map(toIdentifier).concat([""]).join(",\n")),
"\", ", bundleContents: indent(replaceImpls(JSON.stringify(bundleContents, null, 4)))
indent(plainJson), });
");\n",
"});\n"
].join('');
fs.writeFileSync(outputFile, contents, 'utf8'); fs.writeFileSync(outputFile, contents, 'utf8');
} }

View File

@ -21,5 +21,14 @@
*****************************************************************************/ *****************************************************************************/
/*global define*/ /*global define*/
define(['legacyRegistry'], function (legacyRegistry) { define([
<%= implPaths %>
'legacyRegistry'
], function (
<%= implNames %>
legacyRegistry
) {
"use strict"; "use strict";
legacyRegistry.register("<%= bundleName %>", <%= bundleContents %>);
});