@knapsack/app
Version:
Build Design Systems on top of knapsack, by Basalt
183 lines (154 loc) • 5.72 kB
JavaScript
/**
* Copyright (C) 2018 Basalt
This file is part of Knapsack.
Knapsack is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option)
any later version.
Knapsack is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License along
with Knapsack; if not, see <https://www.gnu.org/licenses>.
*/
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _commander = _interopRequireDefault(require("commander"));
var _path = require("path");
var _fsExtra = require("fs-extra");
var log = _interopRequireWildcard(require("./log"));
var _events = require("../server/events");
var _server = require("../server/server");
var _commands = require("./commands");
var _bootstrap = require("../lib/bootstrap");
const {
version
} = (0, _fsExtra.readJSONSync)((0, _path.join)(__dirname, '../../package.json'));
_commander.default.version(version).option('--loglevel <loglevel>', 'one of: error, warn, http, info, verbose, silly. Can also set through env var $knapsack_LOG_LEVEL', /^(error|warn|http|info|verbose|silly)$/i, 'info');
_commander.default.on('option:loglevel', loglevel => {
// @todo see if this can get set earlier; currently if one does `--loglevel verbose` they don't see events that fire before `program.parse()` that only show info if loglevel is high enough. perhaps find a way to parse args earlier (i.e. twice)?
log.setLogLevel(loglevel);
});
const configPath = (0, _path.join)(process.cwd(), 'knapsack.config.js');
const ksBrain = (0, _bootstrap.bootstrapFromConfigFile)(configPath);
const {
patterns,
config,
assetSets
} = ksBrain;
_commander.default.command('serve').action(async () => {
const meta = await (0, _commands.initAll)(ksBrain);
log.info('Serving...');
try {
await (0, _server.getServer)({
meta
}).then(({
serve
}) => serve());
} catch (e) {
log.error('Knapsack serve error', e);
process.exit(1);
}
});
_commander.default.command('build').action(async () => {
await (0, _commands.initAll)(ksBrain).catch(err => {
log.error('Knapsack init error', err, 'init');
process.exit(1);
});
await (0, _commands.build)({
config,
patterns
}).catch(err => {
log.error('Knapsack build error', err, 'build');
process.exit(1);
});
await (0, _commands.writeTemplateMeta)({
allPatterns: patterns.allPatterns,
templateRenderers: config.templateRenderers,
distDir: config.dist
}).catch(err => {
log.error('Knapsack writeTemplateMeta error', err, 'build');
process.exit(1);
}); // @todo restore writing meta.json with useful demo url info
// // writing meta
// const patternDemos = patterns.getPatternsDemoUrls();
// const patternsMeta = patternDemos.map(patternDemo => {
// const { templates } = patternDemo;
// return {
// title: patternDemo.title,
// id: patternDemo.id,
// templates: templates.map(template => ({
// title: template.title,
// id: template.id,
// demoUrls: template.demoUrls,
// })),
// };
// });
//
// const metaPath = join(config.dist, 'meta.json');
//
// ensureDirSync(config.dist);
// writeFileSync(
// metaPath,
// JSON.stringify(
// {
// patterns: patternsMeta,
// },
// null,
// ' ',
// ),
// );
const used = process.memoryUsage().heapUsed / 1024 / 1024;
log.info(`The script uses approximately ${Math.round(used * 100) / 100} MB`);
_events.knapsackEvents.emit(_events.EVENTS.SHUTDOWN);
});
_commander.default.command('start').action(async () => {
const meta = await (0, _commands.initAll)(ksBrain);
log.info('Starting...');
const templateRendererWatches = config.templateRenderers.filter(t => t.watch); // knapsackEvents.on(
// EVENTS.PATTERNS_DATA_READY,
// (allPatterns: KnapsackEventsData['PATTERNS_DATA_READY']) => {
// writeTemplateMeta({
// allPatterns,
// templateRenderers: config.templateRenderers,
// distDir: config.dist,
// });
// },
// );
const {
serve
} = await (0, _server.getServer)({
meta
});
return Promise.all([// patterns.watch(), // @todo restore
assetSets.watch(), ...templateRendererWatches.map(t => t.watch({
templatePaths: patterns.getAllTemplatePaths({
templateLanguageId: t.id
})
})), serve() // writeTemplateMeta({
// allPatterns: patterns.allPatterns,
// templateRenderers: config.templateRenderers,
// distDir: config.dist,
// }),
]).then(() => log.info('Started!', null, 'start')).catch(err => {
log.error('Knapsack start error', err, 'start');
process.exit(1);
});
});
_commander.default.command('test').action(async () => {
const meta = await (0, _commands.initAll)(ksBrain);
await (0, _commands.build)({
patterns,
config
});
await (0, _commands.testPatternRenders)(patterns.allPatterns, patterns);
_events.knapsackEvents.emit(_events.EVENTS.SHUTDOWN);
});
_commander.default.command('upgrade-config').action(async () => {
_events.knapsackEvents.emit(_events.EVENTS.SHUTDOWN);
});
_commander.default.parse(process.argv);
if (!_commander.default.args.length) _commander.default.help();