{
  "version": 3,
  "sources": ["../../src/config/validation.mts"],
  "sourcesContent": ["/*\n * Copyright (c) 2022 Kiyozz.\n *\n * All rights reserved.\n */\n\nimport Joi from 'joi'\nimport yaml from 'js-yaml'\nimport path from 'node:path'\n\nimport { EnvConfig } from './config.mjs'\nimport { Target, TypeConfig } from './enums.mjs'\nimport { Yaml, YamlItem, YamlSkeleton } from './yaml.mjs'\nimport { Logger } from '../console.mjs'\n\nconst _logger = new Logger('Config/Validation')\nconst buildSchema = (yaml: YamlSkeleton) => {\n  return Joi.object<YamlSkeleton>({\n    mainConfig: Joi.object({\n      type: Joi.string().valid(TypeConfig.esbuild).required(),\n      path: Joi.string().required(),\n      src: Joi.string().required(),\n      output: Joi.object({\n        dir: Joi.string().required(),\n        filename: Joi.string().required(),\n      }).required(),\n    }).required(),\n    rendererConfig: Joi.object({\n      type: Joi.string().valid(TypeConfig.esbuild, TypeConfig.vite).required(),\n      path: Joi.string().required(),\n      src: Joi.string().required(),\n      output:\n        yaml.rendererConfig?.type === 'vite'\n          ? Joi.object({\n              dir: Joi.string().required(),\n              filename: Joi.forbidden(),\n            }).required()\n          : Joi.object({\n              dir: Joi.string().required(),\n              filename: Joi.string().required(),\n            }).required(),\n      html: Joi.string().optional(),\n    })\n      .optional()\n      .allow(null),\n  })\n}\n\nexport class ConfigFile {\n  constructor(public readonly config: YamlSkeleton) {\n    if (this.config.rendererConfig === undefined) {\n      this.config.rendererConfig = null\n    }\n  }\n\n  private _dumpYaml(config: YamlItem, isMain: boolean) {\n    return yaml.dump({\n      [isMain ? 'mainConfig' : 'rendererConfig']: {\n        ...config,\n        output: {\n          dir: config.output as unknown as string,\n          filename: path.basename(config.src).replace(/\\.[tj]sx?$/, '.js'),\n        },\n      },\n    })\n  }\n\n  ensureValid(): true | never {\n    // checks configuration file before 6.0.0: output is no longer a string, but now an object\n    if (\n      (typeof this.config.mainConfig.output as unknown) === 'string' ||\n      typeof (this.config.rendererConfig?.output as unknown) === 'string'\n    ) {\n      const processType =\n        (typeof this.config.mainConfig.output as unknown) === 'string'\n          ? Target.main\n          : typeof (this.config.rendererConfig?.output as unknown) === 'string'\n          ? Target.renderer\n          : undefined\n      const processName: keyof YamlSkeleton | undefined =\n        processType === Target.main\n          ? 'mainConfig'\n          : processType === Target.renderer\n          ? 'rendererConfig'\n          : undefined\n      const dump =\n        processType === Target.main\n          ? this._dumpYaml(this.config.mainConfig, true)\n          : this.config.rendererConfig !== null &&\n            processType === Target.renderer\n          ? this._dumpYaml(this.config.rendererConfig, false)\n          : undefined\n\n      if (dump) {\n        _logger.end(`starting from electron-esbuild@6.0.0, \\`output\\` is an object. Please update ** ${\n          processName ?? ''\n        } ** \u2B07\n\n# electron-esbuild.config.yaml\n\n${dump}`)\n      }\n    }\n\n    const schema = buildSchema(this.config)\n\n    const result = schema.validate(this.config)\n\n    if (result.error) {\n      return _logger.end(\n        'Configuration file contains errors,',\n        result.error.details.map((item) => item.message).join('; '),\n      )\n    }\n\n    return true\n  }\n\n  toYaml(): Yaml {\n    return new Yaml({\n      main: EnvConfig.fromYaml(this.config.mainConfig),\n      renderer:\n        this.config.rendererConfig !== null\n          ? EnvConfig.fromYaml(this.config.rendererConfig)\n          : null,\n    })\n  }\n}\n"],
  "mappings": "AAMA,OAAO,SAAS;AAChB,OAAO,UAAU;AACjB,OAAO,UAAU;AAEjB,SAAS,iBAAiB;AAC1B,SAAS,QAAQ,kBAAkB;AACnC,SAAS,YAAoC;AAC7C,SAAS,cAAc;AAEvB,MAAM,UAAU,IAAI,OAAO,mBAAmB;AAC9C,MAAM,cAAc,CAACA,UAAuB;AAC1C,SAAO,IAAI,OAAqB;AAAA,IAC9B,YAAY,IAAI,OAAO;AAAA,MACrB,MAAM,IAAI,OAAO,EAAE,MAAM,WAAW,OAAO,EAAE,SAAS;AAAA,MACtD,MAAM,IAAI,OAAO,EAAE,SAAS;AAAA,MAC5B,KAAK,IAAI,OAAO,EAAE,SAAS;AAAA,MAC3B,QAAQ,IAAI,OAAO;AAAA,QACjB,KAAK,IAAI,OAAO,EAAE,SAAS;AAAA,QAC3B,UAAU,IAAI,OAAO,EAAE,SAAS;AAAA,MAClC,CAAC,EAAE,SAAS;AAAA,IACd,CAAC,EAAE,SAAS;AAAA,IACZ,gBAAgB,IAAI,OAAO;AAAA,MACzB,MAAM,IAAI,OAAO,EAAE,MAAM,WAAW,SAAS,WAAW,IAAI,EAAE,SAAS;AAAA,MACvE,MAAM,IAAI,OAAO,EAAE,SAAS;AAAA,MAC5B,KAAK,IAAI,OAAO,EAAE,SAAS;AAAA,MAC3B,QACEA,MAAK,gBAAgB,SAAS,SAC1B,IAAI,OAAO;AAAA,QACT,KAAK,IAAI,OAAO,EAAE,SAAS;AAAA,QAC3B,UAAU,IAAI,UAAU;AAAA,MAC1B,CAAC,EAAE,SAAS,IACZ,IAAI,OAAO;AAAA,QACT,KAAK,IAAI,OAAO,EAAE,SAAS;AAAA,QAC3B,UAAU,IAAI,OAAO,EAAE,SAAS;AAAA,MAClC,CAAC,EAAE,SAAS;AAAA,MAClB,MAAM,IAAI,OAAO,EAAE,SAAS;AAAA,IAC9B,CAAC,EACE,SAAS,EACT,MAAM,IAAI;AAAA,EACf,CAAC;AACH;AAEO,MAAM,WAAW;AAAA,EACtB,YAA4B,QAAsB;AAAtB;AAC1B,QAAI,KAAK,OAAO,mBAAmB,QAAW;AAC5C,WAAK,OAAO,iBAAiB;AAAA,IAC/B;AAAA,EACF;AAAA,EAEQ,UAAU,QAAkB,QAAiB;AACnD,WAAO,KAAK,KAAK;AAAA,MACf,CAAC,SAAS,eAAe,gBAAgB,GAAG;AAAA,QAC1C,GAAG;AAAA,QACH,QAAQ;AAAA,UACN,KAAK,OAAO;AAAA,UACZ,UAAU,KAAK,SAAS,OAAO,GAAG,EAAE,QAAQ,cAAc,KAAK;AAAA,QACjE;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,cAA4B;AAE1B,QACG,OAAO,KAAK,OAAO,WAAW,WAAuB,YACtD,OAAQ,KAAK,OAAO,gBAAgB,WAAuB,UAC3D;AACA,YAAM,cACH,OAAO,KAAK,OAAO,WAAW,WAAuB,WAClD,OAAO,OACP,OAAQ,KAAK,OAAO,gBAAgB,WAAuB,WAC3D,OAAO,WACP;AACN,YAAM,cACJ,gBAAgB,OAAO,OACnB,eACA,gBAAgB,OAAO,WACvB,mBACA;AACN,YAAM,OACJ,gBAAgB,OAAO,OACnB,KAAK,UAAU,KAAK,OAAO,YAAY,IAAI,IAC3C,KAAK,OAAO,mBAAmB,QAC/B,gBAAgB,OAAO,WACvB,KAAK,UAAU,KAAK,OAAO,gBAAgB,KAAK,IAChD;AAEN,UAAI,MAAM;AACR,gBAAQ,IAAI,mFACV,eAAe;AAAA;AAAA;AAAA;AAAA,EAKvB,MAAM;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,YAAY,KAAK,MAAM;AAEtC,UAAM,SAAS,OAAO,SAAS,KAAK,MAAM;AAE1C,QAAI,OAAO,OAAO;AAChB,aAAO,QAAQ;AAAA,QACb;AAAA,QACA,OAAO,MAAM,QAAQ,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE,KAAK,IAAI;AAAA,MAC5D;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,SAAe;AACb,WAAO,IAAI,KAAK;AAAA,MACd,MAAM,UAAU,SAAS,KAAK,OAAO,UAAU;AAAA,MAC/C,UACE,KAAK,OAAO,mBAAmB,OAC3B,UAAU,SAAS,KAAK,OAAO,cAAc,IAC7C;AAAA,IACR,CAAC;AAAA,EACH;AACF;",
  "names": ["yaml"]
}
