Ghost/.github/dev.js
Fabien "egg" O'Carroll b9565bc290 Migrated @tryghost/post-revisions to TypeScript!
This is an initial start to using TypeScript in our non-core Ghost packages.

- Adds a prepare script to build the project after installing deps
- Adds an initial tsconfig.json which is compatible with our node env
- Migrates all of the code to TypeScript, including tests
- Updates tests to use ts-node so that we don't need to compile the tests
- ts-node is installed at the top level because the env is weird with lerna and
  doesn't work otherwise
- Updates the yarn dev script to build the project with the --all and --revisions flag
2023-05-03 14:32:31 -04:00

125 lines
3.6 KiB
JavaScript

const path = require('path');
const util = require('util');
const exec = util.promisify(require('child_process').exec);
const concurrently = require('concurrently');
const config = require('../ghost/core/core/shared/config/loader').loadNconf({
customConfigPath: path.join(__dirname, '../ghost/core')
});
const liveReloadBaseUrl = config.getSubdir() || '/ghost/';
const siteUrl = config.getSiteUrl();
const DASH_DASH_ARGS = process.argv.filter(a => a.startsWith('--')).map(a => a.slice(2));
let commands = [];
const COMMAND_GHOST = {
name: 'ghost',
// Note: if this isn't working for you, please use Node 18 and above
command: 'node --watch index.js',
cwd: path.resolve(__dirname, '../ghost/core'),
prefixColor: 'blue',
env: {}
};
const COMMAND_ADMIN = {
name: 'admin',
command: `yarn start --live-reload-base-url=${liveReloadBaseUrl} --live-reload-port=4201`,
cwd: path.resolve(__dirname, '../ghost/admin'),
prefixColor: 'green',
env: {}
};
if (DASH_DASH_ARGS.includes('ghost')) {
commands = [COMMAND_GHOST];
} else if (DASH_DASH_ARGS.includes('admin')) {
commands = [COMMAND_ADMIN];
} else {
commands = [COMMAND_GHOST, COMMAND_ADMIN];
}
if (DASH_DASH_ARGS.includes('revisions') || DASH_DASH_ARGS.includes('all')) {
commands.push({
name: 'post-revisions',
command: 'yarn dev',
cwd: path.resolve(__dirname, '../ghost/post-revisions'),
prefixColor: 'green',
env: {}
});
}
if (DASH_DASH_ARGS.includes('portal') || DASH_DASH_ARGS.includes('all')) {
commands.push({
name: 'portal',
command: 'yarn dev',
cwd: path.resolve(__dirname, '../ghost/portal'),
prefixColor: 'magenta',
env: {}
});
COMMAND_GHOST.env['portal__url'] = 'http://localhost:5368/umd/portal.min.js';
}
if (DASH_DASH_ARGS.includes('search') || DASH_DASH_ARGS.includes('all')) {
commands.push({
name: 'search',
command: 'yarn dev',
cwd: path.resolve(__dirname, '../ghost/sodo-search'),
prefixColor: '#23de43',
env: {}
});
COMMAND_GHOST.env['sodoSearch__url'] = 'http://localhost:5370/umd/sodo-search.min.js';
COMMAND_GHOST.env['sodoSearch__styles'] = 'http://localhost:5370/umd/main.css';
}
async function handleStripe() {
if (DASH_DASH_ARGS.includes('stripe') || DASH_DASH_ARGS.includes('all')) {
if (DASH_DASH_ARGS.includes('offline')) {
return;
}
console.log('Fetching Stripe secret token..');
let stripeSecret;
try {
stripeSecret = await exec('stripe listen --print-secret');
} catch (err) {
console.error('Failed to fetch Stripe secret token, do you need to connect Stripe CLI?', err);
return;
}
if (!stripeSecret || !stripeSecret.stdout) {
console.error('No Stripe secret was present');
return;
}
COMMAND_GHOST.env['WEBHOOK_SECRET'] = stripeSecret.stdout.trim();
commands.push({
name: 'stripe',
command: `stripe listen --forward-to ${siteUrl}members/webhooks/stripe/`,
prefixColor: 'yellow',
env: {}
});
}
}
(async () => {
await handleStripe();
if (!commands.length) {
console.log(`No commands provided`);
process.exit(0);
}
const {result} = concurrently(commands, {
prefix: 'name',
killOthers: ['failure', 'success']
});
try {
await result;
} catch (err) {
console.error('\nExecuting dev command failed, ensure dependencies are up-to-date by running `yarn fix`\n');
}
})();