commit
eda0e45efb
@ -0,0 +1,10 @@
|
||||
const fileSyncJson = require('../filesync.json');
|
||||
const dist = fileSyncJson['scriptsFolder'];
|
||||
const src = 'src';
|
||||
const allowedFiletypes = fileSyncJson['allowedFiletypes'];
|
||||
|
||||
module.exports = {
|
||||
dist,
|
||||
src,
|
||||
allowedFiletypes,
|
||||
};
|
@ -0,0 +1,7 @@
|
||||
const fs = require('node:fs');
|
||||
const { dist } = require('./config');
|
||||
|
||||
// ensure dist exist
|
||||
if (!fs.existsSync(dist)) {
|
||||
fs.mkdirSync(dist);
|
||||
}
|
@ -0,0 +1,90 @@
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
const syncDirectory = require('sync-directory');
|
||||
const fg = require('fast-glob');
|
||||
const chokidar = require('chokidar');
|
||||
const { src, dist, allowedFiletypes } = require('./config');
|
||||
|
||||
/** Format dist path for printing */
|
||||
function normalize(p) {
|
||||
return p.replace(/\\/g, '/');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sync static files.
|
||||
* Include init and watch phase.
|
||||
*/
|
||||
async function syncStatic() {
|
||||
return syncDirectory.async(path.resolve(src), path.resolve(dist), {
|
||||
exclude: (file) => {
|
||||
const { ext } = path.parse(file);
|
||||
return ext && !allowedFiletypes.includes(ext);
|
||||
},
|
||||
async afterEachSync(event) {
|
||||
// log file action
|
||||
let eventType;
|
||||
if (event.eventType === 'add' || event.eventType === 'init:copy') {
|
||||
eventType = 'changed';
|
||||
} else if (event.eventType === 'unlink') {
|
||||
eventType = 'deleted';
|
||||
}
|
||||
if (eventType) {
|
||||
let relative = event.relativePath;
|
||||
if (relative[0] === '\\') {
|
||||
relative = relative.substring(1);
|
||||
}
|
||||
console.log(`${normalize(relative)} ${eventType}`);
|
||||
}
|
||||
},
|
||||
watch: true,
|
||||
deleteOrphaned: true,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Sync ts script files.
|
||||
* Init phase only.
|
||||
*/
|
||||
async function initTypeScript() {
|
||||
const distFiles = await fg(`${dist}/**/*.js`);
|
||||
for (const distFile of distFiles) {
|
||||
// search existing *.js file in dist
|
||||
const relative = path.relative(dist, distFile);
|
||||
const srcFile = path.resolve(src, relative).replace(/\.js$/, '.ts');
|
||||
// if srcFile does not exist, delete distFile
|
||||
if (!fs.existsSync(srcFile)) {
|
||||
await fs.promises.unlink(distFile);
|
||||
console.log(`${normalize(relative)} deleted`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sync ts script files.
|
||||
* Watch phase only.
|
||||
*/
|
||||
async function watchTypeScript() {
|
||||
chokidar.watch(`${src}/**/*.ts`).on('unlink', async (p) => {
|
||||
// called on *.ts file get deleted
|
||||
const relative = path.relative(src, p).replace(/\.ts$/, '.js');
|
||||
const distFile = path.resolve(dist, relative);
|
||||
// if distFile exists, delete it
|
||||
if (fs.existsSync(distFile)) {
|
||||
await fs.promises.unlink(distFile);
|
||||
console.log(`${normalize(relative)} deleted`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Sync ts script files.
|
||||
* Include init and watch phase.
|
||||
*/
|
||||
async function syncTypeScript() {
|
||||
await initTypeScript();
|
||||
return watchTypeScript();
|
||||
}
|
||||
|
||||
console.log('Start watching static and ts files...');
|
||||
syncStatic();
|
||||
syncTypeScript();
|
File diff suppressed because it is too large
Load Diff
@ -1,16 +1,24 @@
|
||||
{
|
||||
"name": "bitburner-typescript-template",
|
||||
"version": "1.0.0",
|
||||
"version": "2.0.0",
|
||||
"scripts": {
|
||||
"transpile": "npx tsc -w",
|
||||
"watch": "npx bitburner-filesync@latest"
|
||||
"watch:transpile": "tsc -w --preserveWatchOutput",
|
||||
"watch:local": "node build/watch.js",
|
||||
"watch:remote": "bitburner-filesync",
|
||||
"watch:init": "node build/init.js",
|
||||
"watch:all": "concurrently npm:watch:transpile npm:watch:local npm:watch:remote",
|
||||
"watch": "npm run watch:init && npm run watch:all"
|
||||
},
|
||||
"author": "hydroflame, Hoekstraa, based on work by SlyCedix",
|
||||
"devDependencies": {
|
||||
"@typescript-eslint/eslint-plugin": "^5.35.1",
|
||||
"@typescript-eslint/parser": "^5.35.1",
|
||||
"bitburner-filesync": "^1.1.5",
|
||||
"chokidar": "^3.5.3",
|
||||
"concurrently": "^7.4.0",
|
||||
"eslint": "^8.22.0",
|
||||
"fast-glob": "^3.2.12",
|
||||
"sync-directory": "^5.1.7",
|
||||
"typescript": "^4.7.4"
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue