import * as path from "https://deno.land/std@0.167.0/path/mod.ts";import { Site } from "https://deno.land/x/lume@v1.13.2/core.ts";import YAML from 'https://cdn.skypack.dev/pin/yaml@v2.1.3-ntmfesRl3kdsLKTvvOl6/mode=imports,min/optimized/yaml.js';import * as date from 'https://deno.land/std@0.160.0/datetime/mod.ts';
import {Language} from './modules/language.ts';
export default function () { return (site: Site) => {
const languages : string[] = [], currentWorkingDirectoryAbs: string = site.options.cwd, projectSourceDirectory : string = site.options.src, projectSourceDirectoryAbs : string = path.resolve(currentWorkingDirectoryAbs, projectSourceDirectory);
for (const dirEntry of Deno.readDirSync(projectSourceDirectoryAbs)) { if(!(dirEntry.isDirectory && Language.exists(dirEntry.name)))continue;
const langCode: string = dirEntry.name, absLangDirname: string = path.resolve(projectSourceDirectoryAbs, langCode), absLangDataDirname: string = path.resolve(absLangDirname, '_data');
let absLangDataDirInfo: Deno.FileInfo; try { absLangDataDirInfo = Deno.statSync(absLangDataDirname); } catch (_error) { Deno.mkdirSync(absLangDataDirname); absLangDataDirInfo = Deno.statSync(absLangDataDirname); } if(!absLangDataDirInfo.isDirectory)continue;
const langYamlFilenameAbs = path.resolve(absLangDataDirname, 'lang.yaml'); try { const langYamlInfo = Deno.statSync(langYamlFilenameAbs); if(!langYamlInfo.isFile)continue; Deno.removeSync(langYamlFilenameAbs); } catch (_error) { }
try { const now = new Date(), timestamp = date.format(now, "yyyy-MM-dd"), langData = {code: langCode }, yaml = YAML.stringify(langData);
if(!yaml)throw new Error('');
Deno.writeTextFileSync( langYamlFilenameAbs, `# This file was automatically generated at build time# on ${timestamp} by the "langdata" Lume plugin.${yaml}`); } catch (_error) { }
languages.push(langCode); }
const langsFilenameAbs : string = path.resolve(projectSourceDirectoryAbs, 'languages.json'); try { const langsFilenameInfo: Deno.FileInfo = Deno.statSync(langsFilenameAbs); if(!langsFilenameInfo.isFile)return; Deno.removeSync(langsFilenameAbs); } catch (_error) { } try { Deno.writeTextFileSync(langsFilenameAbs, JSON.stringify(languages)); } catch (_error) { console.error(`Error when writing languages file: ${langsFilenameAbs}`); }
};}