joplin/packages/app-mobile/tools/buildInjectedJs/gulpTasks.ts

60 lines
1.7 KiB
TypeScript

import BundledFile from './BundledFile';
import { mkdirp } from 'fs-extra';
import { mobileDir, outputDir } from './constants';
import copyAssets from './copyAssets';
import { readdir, existsSync } from 'fs-extra';
import { join } from 'path';
const getBundles = async () => {
// All folders in the contentScripts/ directories are bundles
const contentScriptDir = `${mobileDir}/contentScripts/`;
const bundles = [];
for (const folderOrFileName of await readdir(contentScriptDir)) {
// Only check subfolders
if (folderOrFileName.includes('.')) continue;
// Skip utilities shared between bundles
if (folderOrFileName === 'utils') continue;
const bundlePath = join(contentScriptDir, folderOrFileName);
const indexPath = join(bundlePath, 'contentScript', 'index.ts');
const contentScriptPath = existsSync(indexPath) ? indexPath : join(bundlePath, 'contentScript.ts');
bundles.push(new BundledFile(folderOrFileName, contentScriptPath));
}
// Bundled JS may also exist within the components/ directory:
bundles.push(new BundledFile(
'pluginBackgroundPage',
`${mobileDir}/components/plugins/backgroundPage/pluginRunnerBackgroundPage.ts`,
));
return bundles;
};
const gulpTasks = {
beforeBundle: {
fn: () => mkdirp(outputDir),
},
buildBundledJs: {
fn: async () => {
for (const bundle of await getBundles()) {
await bundle.build();
}
},
},
watchBundledJs: {
fn: async () => {
const watchPromises = [];
for (const bundle of await getBundles()) {
watchPromises.push(bundle.startWatching());
}
await Promise.all(watchPromises);
},
},
copyWebviewLib: {
fn: () => copyAssets('webviewLib', { js: `${mobileDir}/../lib/renderers/webviewLib.js` }),
},
};
export default gulpTasks;