mirror of
https://github.com/smogon/sprites.git
synced 2026-08-21 17:24:40 -05:00
deploy: deploy -> run
This commit is contained in:
@@ -1,15 +0,0 @@
|
||||
|
||||
import fs from 'fs';
|
||||
import pathlib from 'path';
|
||||
|
||||
export function link(pairs : {src : string, dst : string}[], dstDir : string, mode : 'link' | 'copy') {
|
||||
for (let {src, dst} of pairs) {
|
||||
dst = pathlib.join(dstDir, dst);
|
||||
fs.mkdirSync(pathlib.dirname(dst), {recursive: true});
|
||||
if (mode === 'link') {
|
||||
fs.linkSync(src, dst);
|
||||
} else {
|
||||
fs.copyFileSync(src, dst);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
|
||||
import fs from 'fs';
|
||||
import pathlib from 'path';
|
||||
|
||||
export function find(startDir : string, tag : string) {
|
||||
const stack = [startDir];
|
||||
const results = [];
|
||||
let dir;
|
||||
while (dir = stack.pop()) {
|
||||
for (const name of fs.readdirSync(dir)) {
|
||||
const path = pathlib.join(dir, name);
|
||||
if (fs.lstatSync(path).isDirectory()) {
|
||||
stack.push(path);
|
||||
} else if (name === `${tag}.deploy.js`) {
|
||||
results.push(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
@@ -1,10 +1,8 @@
|
||||
|
||||
import program from 'commander';
|
||||
import {run} from './lang.js';
|
||||
import {find} from './find.js';
|
||||
import {link} from './deploy.js';
|
||||
import * as script from './script.js';
|
||||
import * as pathlib from './path.js';
|
||||
import nodePath from 'path';
|
||||
import fs from 'fs';
|
||||
|
||||
function collect(value : string, previous : string[]) {
|
||||
@@ -49,27 +47,22 @@ program
|
||||
});
|
||||
|
||||
program
|
||||
.command('deploy <tag> <outputDir>')
|
||||
.option('-d, --dir [dir]', 'Directory')
|
||||
.action((tag : string, outputDir : string, opts) => {
|
||||
const dir = opts.dir || '.';
|
||||
const results = run(find(dir, tag));
|
||||
link(results, outputDir, 'link');
|
||||
});
|
||||
.command('run [scripts...]')
|
||||
.requiredOption('-o, --output <dir>', 'Output directory')
|
||||
.option('-n, --no-act', 'No act')
|
||||
.action((scripts : string[], {output: outputDir, act}) => {
|
||||
const aq = new script.ActionQueue;
|
||||
|
||||
program
|
||||
.command('print <tag>')
|
||||
.option('-d, --dir [dir]', 'Directory')
|
||||
.option('--json', 'As JSON')
|
||||
.action((tag : string, opts) => {
|
||||
const dir = opts.dir || '.';
|
||||
const results = run(find(dir, tag));
|
||||
if (opts.json) {
|
||||
process.stdout.write(JSON.stringify(results, null, ' ') + "\n");
|
||||
for (const file of scripts) {
|
||||
const code = fs.readFileSync(file, 'utf8');
|
||||
const scr = new script.Script(code);
|
||||
scr.run(nodePath.dirname(file), outputDir, aq);
|
||||
}
|
||||
|
||||
if (act) {
|
||||
aq.run('link');
|
||||
} else {
|
||||
for (const {src, dst} of results) {
|
||||
console.log(`${src} ==> ${dst}`);
|
||||
}
|
||||
aq.print();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user