trigger.dev
Version:
A Command-Line Interface for Trigger.dev (v3) projects
69 lines • 3.03 kB
JavaScript
import fs from "node:fs";
import { join, relative, resolve } from "node:path";
export function createTaskFileImports(taskFiles) {
return taskFiles
.map((taskFile) => `import * as ${taskFile.importName} from "./${taskFile.importPath}"; TaskFileImports["${taskFile.importName}"] = ${taskFile.importName}; TaskFiles["${taskFile.importName}"] = ${JSON.stringify(taskFile)};`)
.join("\n");
}
// Find all the top-level .js or .ts files in the trigger directories
export async function gatherTaskFiles(config) {
const taskFiles = [];
for (const triggerDir of config.triggerDirectories) {
const files = await gatherTaskFilesFromDir(triggerDir, triggerDir, config);
taskFiles.push(...files);
}
return taskFiles;
}
async function gatherTaskFilesFromDir(dirPath, triggerDir, config) {
const taskFiles = [];
const files = await fs.promises.readdir(dirPath, { withFileTypes: true });
for (const file of files) {
if (!file.isFile()) {
// Recurse into subdirectories
const fullPath = join(dirPath, file.name);
taskFiles.push(...(await gatherTaskFilesFromDir(fullPath, triggerDir, config)));
}
else {
if (!file.name.endsWith(".js") &&
!file.name.endsWith(".ts") &&
!file.name.endsWith(".jsx") &&
!file.name.endsWith(".tsx")) {
continue;
}
const fullPath = join(dirPath, file.name);
const filePath = relative(config.projectDir, fullPath);
//remove the file extension and replace any invalid characters with underscores
const importName = filePath.replace(/\..+$/, "").replace(/[^a-zA-Z0-9_$]/g, "_");
//change backslashes to forward slashes
const importPath = filePath.replace(/\\/g, "/");
taskFiles.push({ triggerDir, importPath, importName, filePath });
}
}
return taskFiles;
}
export function resolveTriggerDirectories(projectDir, dirs) {
return dirs.map((dir) => resolve(projectDir, dir));
}
const IGNORED_DIRS = ["node_modules", ".git", "dist", "build"];
export async function findTriggerDirectories(dirPath) {
return getTriggerDirectories(dirPath);
}
async function getTriggerDirectories(dirPath) {
const entries = await fs.promises.readdir(dirPath, { withFileTypes: true });
const triggerDirectories = [];
for (const entry of entries) {
if (!entry.isDirectory() || IGNORED_DIRS.includes(entry.name) || entry.name.startsWith("."))
continue;
const fullPath = join(dirPath, entry.name);
// Ignore the directory if it's <any>/app/api/trigger
if (fullPath.endsWith("app/api/trigger")) {
continue;
}
if (entry.name === "trigger") {
triggerDirectories.push(fullPath);
}
triggerDirectories.push(...(await getTriggerDirectories(fullPath)));
}
return triggerDirectories;
}
//# sourceMappingURL=taskFiles.js.map