edgespec
Version:
Write Winter-CG compatible routes with filesystem routing and tons of features
84 lines (82 loc) • 2.36 kB
JavaScript
import path from 'path';
import fs from 'fs/promises';
import { bundleRequire } from 'bundle-require';
// src/config/utils.ts
var cloneObjectAndDeleteUndefinedKeys = (obj) => {
const clone = { ...obj };
Object.keys(clone).forEach((key) => {
if (clone[key] === void 0) {
delete clone[key];
}
});
return clone;
};
var resolvePossibleRelativePath = (possibleRelativePath, configDirectory) => {
if (path.isAbsolute(possibleRelativePath)) {
return possibleRelativePath;
}
return path.resolve(configDirectory, possibleRelativePath);
};
var resolveConfig = (config) => {
const { rootDirectory, tsconfigPath, routesDirectory, ...rest } = cloneObjectAndDeleteUndefinedKeys(config);
const resolvedRootDirectory = path.resolve(config.rootDirectory);
return {
rootDirectory: resolvedRootDirectory,
tsconfigPath: resolvePossibleRelativePath(
tsconfigPath ?? "tsconfig.json",
resolvedRootDirectory
),
routesDirectory: resolvePossibleRelativePath(
routesDirectory ?? "api",
resolvedRootDirectory
),
platform: "wintercg-minimal",
...rest
};
};
var validateConfig = async (config) => {
try {
await fs.stat(config.routesDirectory);
} catch (error) {
throw new Error(`Could not find routes directory ${config.routesDirectory}`);
}
try {
await fs.stat(config.tsconfigPath);
} catch (error) {
throw new Error(`Could not find tsconfig.json at ${config.tsconfigPath}`);
}
return config;
};
var loadConfig = async (rootDirectory, overrides) => {
let loadedConfig = {};
let configInRootExists = false;
const potentialConfigPath = path.join(rootDirectory, "edgespec.config.ts");
try {
await fs.stat(potentialConfigPath);
configInRootExists = true;
} catch {
}
if (configInRootExists) {
const {
mod: { default: config }
} = await bundleRequire({
filepath: potentialConfigPath
});
if (!config) {
throw new Error(
`Could not find a default export in ${potentialConfigPath}`
);
}
loadedConfig = config;
}
return await validateConfig(
resolveConfig({
rootDirectory,
...loadedConfig,
...cloneObjectAndDeleteUndefinedKeys(overrides ?? {})
})
);
};
export { loadConfig };
//# sourceMappingURL=chunk-TMYKADNK.js.map
//# sourceMappingURL=chunk-TMYKADNK.js.map