Files
webawesome/scripts/utils.js

59 lines
1.5 KiB
JavaScript
Raw Permalink Normal View History

import childProcess from 'child_process';
2024-04-17 11:20:27 -04:00
import { dirname, join } from 'path';
import { fileURLToPath } from 'url';
const __dirname = dirname(fileURLToPath(import.meta.url));
// Helpful directories
export const rootDir = dirname(__dirname);
export const distDir = join(rootDir, 'dist');
Initial SSR implementation (#157) * continued ssr work * continued ssr work * prettier * all components now rendering * everything finally works * fix type issues * working on breadcrumb * working on breadcrumb * radio group * convert all tests to ssr * prettier * test suite finally passing * add layout stuff * add changelog * fix TS issue * fix tests * fixing deploy stuff * get QR code displaying * fix tests * fix tests * prettier * condense hydration stuff * prettier * comment out range test * fixing issues * use base fixtures * fixing examples * dont vendor * fix import of hydration support * adding notes * add notesg * add ssr loader * fix build * prettier * add notes * add notes * prettier * fixing bundled stuff * remove cdn * remove cdn * prettier * fiixng tests * prettier * split jobs?? * prettier * fix build stuff * add reset mouse and await aTimeout * prettier * fix improper tests * prettier * bail on first * fix linting * only test form with client * redundancy on ssr-loader?? * maybe this will work * prettier * try callout now * fix form.test.ts * fix form.test.ts * prettier * fix forms * fix forms * try again * prettier * add some awaits * prettier * comment out broken SSR tests * prettier * comment out broken SSR tests * prettier * dont skip in CI * upgrade playwright to beta * prettier * try some trickery * try some trickery * await updateComplete * try to fix form.test.ts * import hydrateable elements 1 time * prettier * fix input defaultValue issues * fix form controls to behave like their native counterpartS * add changelog entry * prettier * fix unexpected behavior with range / button
2024-09-11 10:25:42 -04:00
export const cdnDir = join(rootDir, 'dist-cdn');
2024-04-17 11:20:27 -04:00
export const docsDir = join(rootDir, 'docs');
export const siteDir = join(rootDir, '_site');
/**
* Runs a script and returns a promise that resolves with the content of stdout when the script exits or rejects with
* the content of stderr when the script exits with an error.
*/
export function runScript(scriptPath, args = []) {
return new Promise((resolve, reject) => {
const child = childProcess.fork(scriptPath, args, { silent: true });
let wasInvoked = false;
let stderr = '';
let stdout = '';
child.on('error', err => {
if (wasInvoked) {
return;
}
wasInvoked = true;
reject(err);
});
// Capture output
child.stderr.on('data', data => (stderr += data));
child.stdout.on('data', data => (stdout += data));
// execute the callback once the process has finished running
child.on('exit', code => {
if (wasInvoked) {
return;
}
wasInvoked = true;
if (code === 0) {
// The process exited normally
resolve(stdout.trim());
} else {
// An error code was received
reject(new Error(stderr));
}
child.unref();
});
});
}