123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', { value: true });
- var path = require('path');
- var fs = require('fs');
- var svelte = require('../compiler/svelte.js');
- const $ = { enabled:true };
- const CODES = {
- // modifiers
- reset: fmt(0, 0),
- bold: fmt(1, 22),
- dim: fmt(2, 22),
- italic: fmt(3, 23),
- underline: fmt(4, 24),
- inverse: fmt(7, 27),
- hidden: fmt(8, 28),
- strikethrough: fmt(9, 29),
- // colors
- black: fmt(30, 39),
- red: fmt(31, 39),
- green: fmt(32, 39),
- yellow: fmt(33, 39),
- blue: fmt(34, 39),
- magenta: fmt(35, 39),
- cyan: fmt(36, 39),
- white: fmt(37, 39),
- gray: fmt(90, 39),
- // background colors
- bgBlack: fmt(40, 49),
- bgRed: fmt(41, 49),
- bgGreen: fmt(42, 49),
- bgYellow: fmt(43, 49),
- bgBlue: fmt(44, 49),
- bgMagenta: fmt(45, 49),
- bgCyan: fmt(46, 49),
- bgWhite: fmt(47, 49)
- };
- function fmt(x, y) {
- return {
- open: `\x1b[${x}m`,
- close: `\x1b[${y}m`,
- rgx: new RegExp(`\\x1b\\[${y}m`, 'g')
- }
- }
- function run(key, str) {
- let tmp = CODES[key];
- return tmp.open + str.replace(tmp.rgx, tmp.open) + tmp.close;
- }
- function exec(key, str) {
- str += '';
- if (!$.enabled) return str;
- let arr = this.keys;
- while (arr.length > 0) {
- str = run(arr.shift(), str);
- }
- this.keys.push(key);
- return str;
- }
- function attach(key) {
- let ctx = { keys:[key] };
- let fn = exec.bind(ctx, key);
- for (let k in CODES) {
- Reflect.defineProperty(fn, k, {
- get() {
- ctx.keys.push(k);
- return fn;
- }
- });
- }
- return fn;
- }
- for (let k in CODES) {
- $[k] = attach(k);
- }
- var kleur = $;
- function stderr(msg) {
- console.error(msg); // eslint-disable-line no-console
- }
- function error(err) {
- stderr(kleur.red(err.message || err));
- if (err.frame) {
- stderr(err.frame);
- }
- else if (err.stack) {
- stderr(kleur.gray(err.stack));
- }
- process.exit(1);
- }
- function mkdirp(dir) {
- const parent = path.dirname(dir);
- if (dir === parent)
- return;
- mkdirp(parent);
- if (!fs.existsSync(dir))
- fs.mkdirSync(dir);
- }
- function compile(input, opts) {
- if (opts._.length > 0) {
- error(`Can only compile a single file or directory`);
- }
- const output = opts.output;
- const stats = fs.statSync(input);
- const isDir = stats.isDirectory();
- if (isDir) {
- if (!output) {
- error(`You must specify an --output (-o) option when compiling a directory of files`);
- }
- if (opts.name || opts.amdId) {
- error(`Cannot specify --${opts.name ? 'name' : 'amdId'} when compiling a directory`);
- }
- }
- const globals = {};
- if (opts.globals) {
- opts.globals.split(',').forEach(pair => {
- const [key, value] = pair.split(':');
- globals[key] = value;
- });
- }
- const options = {
- name: opts.name,
- format: opts.format,
- sourceMap: opts.sourcemap,
- globals,
- amd: opts.amdId
- ? {
- id: opts.amdId,
- }
- : undefined,
- css: opts.css !== false,
- dev: opts.dev,
- immutable: opts.immutable,
- generate: opts.generate || 'dom',
- customElement: opts.customElement,
- store: opts.store,
- shared: opts.shared
- };
- if (isDir) {
- mkdirp(output);
- compileDirectory(input, output, options);
- }
- else {
- compileFile(input, output, options);
- }
- }
- function compileDirectory(input, output, options) {
- fs.readdirSync(input).forEach(file => {
- const src = path.resolve(input, file);
- const dest = path.resolve(output, file);
- if (path.extname(file) === '.html') {
- compileFile(src, dest.substring(0, dest.lastIndexOf('.html')) + '.js', options);
- }
- else {
- const stats = fs.statSync(src);
- if (stats.isDirectory()) {
- compileDirectory(src, dest, options);
- }
- }
- });
- }
- let SOURCEMAPPING_URL = 'sourceMa';
- SOURCEMAPPING_URL += 'ppingURL';
- function compileFile(input, output, options) {
- console.error(`compiling ${path.relative(process.cwd(), input)}...`); // eslint-disable-line no-console
- options = Object.assign({}, options);
- if (!options.name)
- options.name = getName(input);
- options.filename = input;
- options.outputFilename = output;
- const { sourceMap } = options;
- const inline = sourceMap === 'inline';
- let source = fs.readFileSync(input, 'utf-8');
- if (source[0] === 0xfeff)
- source = source.slice(1);
- let compiled;
- try {
- compiled = svelte.compile(source, options);
- }
- catch (err) {
- error(err);
- }
- const { js } = compiled;
- if (sourceMap) {
- js.code += `\n//# ${SOURCEMAPPING_URL}=${inline || !output
- ? js.map.toUrl()
- : `${path.basename(output)}.map`}\n`;
- }
- if (output) {
- const outputDir = path.dirname(output);
- mkdirp(outputDir);
- fs.writeFileSync(output, js.code);
- console.error(`wrote ${path.relative(process.cwd(), output)}`); // eslint-disable-line no-console
- if (sourceMap && !inline) {
- fs.writeFileSync(`${output}.map`, js.map);
- console.error(`wrote ${path.relative(process.cwd(), `${output}.map`)}`); // eslint-disable-line no-console
- }
- }
- else {
- process.stdout.write(js.code);
- }
- }
- function getName(input) {
- return path.basename(input)
- .replace(path.extname(input), '')
- .replace(/[^a-zA-Z_$0-9]+/g, '_')
- .replace(/^_/, '')
- .replace(/_$/, '')
- .replace(/^(\d)/, '_$1');
- }
- exports.compile = compile;
|