UNPKG

@coko/server

Version:

Reusable server for use by Coko's projects

59 lines 2.17 kB
"use strict"; 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