UNPKG

@knapsack/app

Version:

Build Design Systems on top of knapsack, by Basalt

183 lines (154 loc) • 5.72 kB
#! /usr/bin/env node /** * 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>. */ "use strict"; 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();