@coko/server
Version:
Reusable server for use by Coko's projects
59 lines • 2.17 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const zod_1 = require("zod");
const mergeWith_1 = __importDefault(require("lodash/mergeWith"));
const BuilderConfigError_1 = __importDefault(require("./BuilderConfigError"));
const internals_1 = __importDefault(require("../logger/internals"));
const builderConfigSchema = zod_1.z.strictObject({
devServer: zod_1.z.strictObject({
ignore: zod_1.z.array(zod_1.z.string()),
inspectorPort: zod_1.z.number().int().positive(),
}),
assetExtensions: zod_1.z.array(zod_1.z.string()),
});
const DEFAULT_CONFIG = {
devServer: {
ignore: ['./tmp/*'],
inspectorPort: 9229,
},
assetExtensions: ['json', 'graphql'],
};
function arrayCustomizer(objValue, srcValue) {
if (Array.isArray(objValue) && Array.isArray(srcValue)) {
return objValue.concat(srcValue);
}
return undefined;
}
function defineBuilderConfig() {
const configPath = path_1.default.join(process.cwd(), 'builder.json');
if (!fs_extra_1.default.existsSync(configPath)) {
internals_1.default.builder('Configuration file "builder.json" not found. Using default configuration.');
return DEFAULT_CONFIG;
}
// read
let fileConfig;
try {
const fileContents = fs_extra_1.default.readFileSync(configPath, 'utf8');
fileConfig = JSON.parse(fileContents);
}
catch (e) {
throw new BuilderConfigError_1.default(e.message);
}
// merge
const merged = (0, mergeWith_1.default)(DEFAULT_CONFIG, fileConfig, arrayCustomizer);
// validate
builderConfigSchema.parse(merged);
return merged;
}
function loadBuilderConfig() {
const config = defineBuilderConfig();
internals_1.default.builder(`Ignored files: ${config.devServer.ignore}`);
return config;
}
exports.default = loadBuilderConfig;
//# sourceMappingURL=loadBuilderConfig.js.map