| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import { join as joinPaths } from 'path'
- import { fileURLToPath } from 'url'
- import { readFile } from 'fs/promises'
- import handlebars from 'handlebars'
- import { execCapture } from '@fullcalendar-scripts/standard/utils/exec'
- /*
- TODO: don't always display prefix when doing config.log()
- TODO: don't reinit rollup watcher on ANY change. Slow when not using fdescribe technique.
- */
- const thisPkgDir = joinPaths(fileURLToPath(import.meta.url), '../..')
- const templatePath = joinPaths(thisPkgDir, 'src/index.global.js.tpl')
- /*
- HACK: watch the transpiled directory, so bundling waits until tsc completes
- */
- export function getWatchPaths(config) {
- const transpileDir = joinPaths(config.pkgDir, 'dist/.tsout')
- return [transpileDir, templatePath]
- }
- export default async function(config) {
- const srcDir = joinPaths(config.pkgDir, 'src')
- // mindepth 2 means subdirectories
- let testPaths = await execCapture(
- 'find . -mindepth 2 -type f \\( -name \'*.ts\' -or -name \'*.tsx\' \\) -print0 | ' +
- 'xargs -0 grep -E "(fdescribe|fit)\\("',
- { cwd: srcDir },
- ).then(
- (stdout) => strToLines(stdout).map((line) => line.trim().split(':')[0]),
- () => {
- return [] // TODO: somehow look at stderr string. if empty, simply no testPaths. if populated, real error
- },
- )
- // the `find` command reports multiple matches per file. consolidate duplicates
- testPaths = uniqueStrs(testPaths)
- if (testPaths.length) {
- config.log(
- 'Only test files that have fdescribe/fit:\n' +
- testPaths.join('\n'),
- )
- } else {
- // mindepth 2 means subdirectories
- testPaths = strToLines((await execCapture(
- 'find . -mindepth 2 -type f \\( -name \'*.ts\' -or -name \'*.tsx\' \\)',
- { cwd: srcDir },
- )))
- config.log(`Using all ${testPaths.length} test files`)
- }
- const extensionlessTestPaths = testPaths.map((testPath) => testPath.replace(/\.tsx?$/, ''))
- const templateText = await readFile(templatePath, 'utf8')
- const template = handlebars.compile(templateText)
- const code = template({ extensionlessTestPaths })
- return code
- }
- function uniqueStrs(strs) {
- const map = {}
- for (const str of strs) {
- map[str] = true
- }
- return Object.keys(map)
- }
- function strToLines(str) {
- str = str.trim()
- return str ? str.split('\n') : []
- }
|