{"version":3,"file":"scan.cjs","sources":["../../../../../src/v4/server/utils/template/scan.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { GrowiTemplatePluginValidationData } from '../../../../model/index.js';\nimport {\n  isTemplateStatusValid,\n  type TemplateStatus,\n  type TemplateSummary,\n} from '../../../interfaces/index.js';\nimport { getStatus } from './get-status.js';\nimport { validateTemplatePluginGrowiDirective } from './validate-growi-plugin-directive.js';\n\nexport const scanTemplate = async (\n  projectDirRoot: string,\n  templateId: string,\n  data: GrowiTemplatePluginValidationData,\n  opts?: {\n    pluginId?: string;\n  },\n): Promise<TemplateStatus[]> => {\n  const status: TemplateStatus[] = [];\n\n  const tplRootDirPath = path.resolve(projectDirRoot, 'dist', templateId);\n\n  let isDefaultPushed = false;\n  for await (const locale of data.supportingLocales) {\n    const tplDir = path.resolve(tplRootDirPath, locale);\n\n    try {\n      const stats = await getStatus(tplDir);\n      const { isTemplateExists, meta } = stats;\n\n      if (!isTemplateExists) throw new Error(\"'template.md does not exist.\");\n      if (meta == null) throw new Error(\"'meta.md does not exist.\");\n      if (meta?.title == null)\n        throw new Error(\"'meta.md does not contain the title.\");\n\n      const isDefault = !isDefaultPushed;\n      status.push({\n        pluginId: opts?.pluginId,\n        id: templateId,\n        locale,\n        isValid: true,\n        isDefault,\n        title: meta.title,\n        desc: meta.desc,\n      });\n      isDefaultPushed = true;\n    } catch (err) {\n      status.push({\n        pluginId: opts?.pluginId,\n        id: templateId,\n        locale,\n        isValid: false,\n        invalidReason: (err as Error).message,\n      });\n    }\n  }\n\n  // biome-ignore lint/suspicious/noConsole: Allow to use\n  console.debug(`Template directory (${projectDirRoot}) has scanned`, {\n    status,\n  });\n\n  return status;\n};\n\nexport const scanAllTemplates = async (\n  projectDirRoot: string,\n  opts?: {\n    data?: GrowiTemplatePluginValidationData;\n    pluginId?: string;\n    returnsInvalidTemplates?: boolean;\n  },\n): Promise<TemplateSummary[]> => {\n  const data =\n    opts?.data ?? validateTemplatePluginGrowiDirective(projectDirRoot);\n\n  const summaries: TemplateSummary[] = [];\n\n  const distDirPath = path.resolve(projectDirRoot, 'dist');\n  const distDirFiles = fs.readdirSync(distDirPath);\n\n  for await (const templateId of distDirFiles) {\n    const status = (\n      await scanTemplate(projectDirRoot, templateId, data, {\n        pluginId: opts?.pluginId,\n      })\n    )\n      // omit invalid templates if `returnsInvalidTemplates` is true\n      .filter((s) => (opts?.returnsInvalidTemplates ? true : s.isValid));\n\n    // determine default locale\n    const defaultTemplateStatus = status.find(\n      (s) => 'isDefault' in s && s.isDefault,\n    );\n\n    if (\n      defaultTemplateStatus == null ||\n      !isTemplateStatusValid(defaultTemplateStatus)\n    ) {\n      continue;\n    }\n\n    summaries.push({\n      // for the 'default' key\n      default: defaultTemplateStatus,\n      // for each locale keys\n      ...Object.fromEntries(\n        status.map((templateStatus) => [templateStatus.locale, templateStatus]),\n      ),\n    });\n  }\n\n  return summaries;\n};\n"],"names":["scanTemplate","projectDirRoot","templateId","data","opts","status","tplRootDirPath","path","isDefaultPushed","locale","tplDir","stats","getStatus","isTemplateExists","meta","isDefault","err","scanAllTemplates","validateTemplatePluginGrowiDirective","summaries","distDirPath","distDirFiles","fs","s","defaultTemplateStatus","isTemplateStatusValid","templateStatus"],"mappings":"iQAYaA,EAAe,MAC1BC,EACAC,EACAC,EACAC,IAG8B,CAC9B,MAAMC,EAA2B,CAAA,EAE3BC,EAAiBC,EAAK,QAAQN,EAAgB,OAAQC,CAAU,EAEtE,IAAIM,EAAkB,GACtB,gBAAiBC,KAAUN,EAAK,kBAAmB,CACjD,MAAMO,EAASH,EAAK,QAAQD,EAAgBG,CAAM,EAElD,GAAI,CACF,MAAME,EAAQ,MAAMC,EAAAA,UAAUF,CAAM,EAC9B,CAAE,iBAAAG,EAAkB,KAAAC,CAAA,EAASH,EAEnC,GAAI,CAACE,EAAkB,MAAM,IAAI,MAAM,8BAA8B,EACrE,GAAIC,GAAQ,KAAM,MAAM,IAAI,MAAM,0BAA0B,EAC5D,IAAIA,GAAA,YAAAA,EAAM,QAAS,KACjB,MAAM,IAAI,MAAM,sCAAsC,EAExD,MAAMC,EAAY,CAACP,EACnBH,EAAO,KAAK,CACV,SAAUD,GAAA,YAAAA,EAAM,SAChB,GAAIF,EACJ,OAAAO,EACA,QAAS,GACT,UAAAM,EACA,MAAOD,EAAK,MACZ,KAAMA,EAAK,IAAA,CACZ,EACDN,EAAkB,EACpB,OAASQ,EAAK,CACZX,EAAO,KAAK,CACV,SAAUD,GAAA,YAAAA,EAAM,SAChB,GAAIF,EACJ,OAAAO,EACA,QAAS,GACT,cAAgBO,EAAc,OAAA,CAC/B,CACH,CACF,CAGA,eAAQ,MAAM,uBAAuBf,CAAc,gBAAiB,CAClE,OAAAI,CAAA,CACD,EAEMA,CACT,EAEaY,EAAmB,MAC9BhB,EACAG,IAK+B,CAC/B,MAAMD,GACJC,GAAA,YAAAA,EAAM,OAAQc,EAAAA,qCAAqCjB,CAAc,EAE7DkB,EAA+B,CAAA,EAE/BC,EAAcb,EAAK,QAAQN,EAAgB,MAAM,EACjDoB,EAAeC,EAAG,YAAYF,CAAW,EAE/C,gBAAiBlB,KAAcmB,EAAc,CAC3C,MAAMhB,GACJ,MAAML,EAAaC,EAAgBC,EAAYC,EAAM,CACnD,SAAUC,GAAA,YAAAA,EAAM,QAAA,CACjB,GAGA,OAAQmB,GAAOnB,GAAA,MAAAA,EAAM,wBAA0B,GAAOmB,EAAE,OAAQ,EAG7DC,EAAwBnB,EAAO,KAClCkB,GAAM,cAAeA,GAAKA,EAAE,SAAA,EAI7BC,GAAyB,MACzB,CAACC,EAAAA,sBAAsBD,CAAqB,GAK9CL,EAAU,KAAK,CAEb,QAASK,EAET,GAAG,OAAO,YACRnB,EAAO,IAAKqB,GAAmB,CAACA,EAAe,OAAQA,CAAc,CAAC,CAAA,CACxE,CACD,CACH,CAEA,OAAOP,CACT"}