@solarity/hardhat-markup
Version:
Customizable markdown documentation for smart contracts
70 lines • 2.52 kB
JavaScript
import { isAbsolute } from "path";
import { validateUserConfigZodType } from "@nomicfoundation/hardhat-zod-utils";
import { z } from "zod";
export default async () => ({
validateUserConfig,
resolveUserConfig,
});
const userConfigType = z.object({
markup: z
.object({
outdir: z.string().optional(),
onlyFiles: z.array(z.string().refine((p) => !isAbsolute(p), "Expected a relative path")).optional(),
skipFiles: z.array(z.string().refine((p) => !isAbsolute(p), "Expected a relative path")).optional(),
noCompile: z.boolean().optional(),
verbose: z.boolean().optional(),
})
.optional(),
});
export async function validateUserConfig(userConfig) {
return validateUserConfigZodType(userConfig, userConfigType);
}
export async function resolveUserConfig(userConfig, resolveConfigurationVariable, next) {
const resolvedConfig = await next(userConfig, resolveConfigurationVariable);
return {
...resolvedConfig,
markup: {
...resolvedConfig.markup,
...omitUndefined(await resolveMarkupConfig(userConfig.markup, resolveConfigurationVariable)),
},
};
}
async function resolveMarkupConfig(markupConfig, resolveConfigurationVariable) {
const defaultConfig = {
outdir: "./generated-markups",
onlyFiles: [],
skipFiles: [],
noCompile: false,
verbose: false,
};
if (markupConfig === undefined) {
return defaultConfig;
}
const resolved = defaultConfig;
if (typeof markupConfig.outdir === "string") {
resolved.outdir = await resolveConfigurationVariable(markupConfig.outdir).get();
}
if (Array.isArray(markupConfig.onlyFiles)) {
resolved.onlyFiles = await Promise.all(markupConfig.onlyFiles.map((p) => resolveConfigurationVariable(p).get()));
}
if (Array.isArray(markupConfig.skipFiles)) {
resolved.skipFiles = await Promise.all(markupConfig.skipFiles.map((p) => resolveConfigurationVariable(p).get()));
}
if (typeof markupConfig.noCompile === "boolean") {
resolved.noCompile = markupConfig.noCompile;
}
if (typeof markupConfig.verbose === "boolean") {
resolved.verbose = markupConfig.verbose;
}
return resolved;
}
function omitUndefined(obj) {
const out = {};
for (const [key, value] of Object.entries(obj)) {
if (value !== undefined) {
out[key] = value;
}
}
return out;
}
//# sourceMappingURL=config.js.map