UNPKG

@ilingo/fs

Version:

This is a lightweight library for translation.

1 lines 9.36 kB
{"version":3,"file":"index.mjs","sources":["../src/utils.ts","../src/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { normalize } from 'pathe';\nimport process from 'node:process';\nimport type { Config, ConfigInput } from './types';\n\nexport function buildConfig(input?: ConfigInput) : Config {\n input = input || {};\n\n let directory : string[];\n if (input.directory) {\n directory = Array.isArray(input.directory) ?\n input.directory :\n [input.directory];\n\n for (let i = 0; i < directory.length; i++) {\n directory[i] = normalize(directory[i]);\n }\n } else {\n directory = [process.cwd()];\n }\n\n return {\n directory,\n };\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { LocatorOptionsInput } from 'locter';\nimport {\n load,\n locateMany,\n} from 'locter';\nimport path from 'node:path';\nimport type { Merger } from 'smob';\nimport { createMerger } from 'smob';\nimport type { LinesRecord, StoreGetContext, StoreSetContext } from 'ilingo';\nimport { MemoryStore, isBCP47LanguageCode, isLineRecord } from 'ilingo';\nimport type { ConfigInput } from './types';\nimport { buildConfig } from './utils';\n\nexport class FSStore extends MemoryStore {\n protected loaded : Record<string, string[]>;\n\n protected directories : string[];\n\n protected merger : Merger;\n\n constructor(input?: ConfigInput) {\n super({ data: {} });\n\n const options = buildConfig(input);\n\n this.loaded = {};\n this.directories = options.directory;\n\n this.merger = createMerger({\n inPlace: true,\n array: true,\n arrayDistinct: true,\n });\n }\n\n // ------------------------------------------\n override async get(context: StoreGetContext): Promise<string | undefined> {\n await this.loadGroup(context.group, context.locale);\n\n return super.get(context);\n }\n\n override async set(context: StoreSetContext): Promise<void> {\n return super.set(context);\n\n // todo: write to file!\n }\n\n // ------------------------------------------\n\n override async getLocales() : Promise<string[]> {\n const locations = await locateMany(['*'], {\n path: this.directories,\n onlyDirectories: true,\n });\n\n return locations\n .filter((location) => isBCP47LanguageCode(location.name))\n .map((location) => location.name);\n }\n\n // ------------------------------------------\n\n protected isLoaded(group: string, locale: string) : boolean {\n this.loaded[locale] = this.loaded[locale] || [];\n\n return this.loaded[locale].indexOf(group) !== -1;\n }\n\n protected setIsLoaded(group: string, locale: string) {\n this.loaded[locale] = this.loaded[locale] || [];\n\n this.loaded[locale].push(group);\n }\n\n // ------------------------------------------\n\n async loadGroup(group: string, locale: string) : Promise<Record<string, any>> {\n // only load file once\n if (this.isLoaded(group, locale)) {\n /* istanbul ignore next */\n return {};\n }\n\n this.initLines(group, locale);\n this.setIsLoaded(group, locale);\n\n const locations = await locateMany(\n this.addExtensionPattern(group),\n this.buildLocatorOptionsForLocale(locale),\n );\n\n const loadPromises = locations.map(\n (location) => load(location)\n .then((data) => (data && data.default ? data.default : data)),\n );\n\n const files = await Promise.all(loadPromises);\n if (files.length === 0) {\n return {};\n }\n\n this.data[locale][group] = this.mergeFiles(files);\n\n return this.data[locale][group];\n }\n\n protected buildLocatorOptionsForLocale(locale?: string) : LocatorOptionsInput {\n let directory: string[];\n if (this.directories.length === 0) {\n directory = [locale || 'en'];\n } else {\n directory = this.directories.map(\n (directory) => path.join(directory, locale || 'en'),\n );\n }\n\n return {\n path: directory,\n ignore: [],\n };\n }\n\n protected addExtensionPattern(name: string) {\n return `${name}.{js,mjs,cjs,ts,mts,mjs,json,conf}`;\n }\n\n protected mergeFiles(files: unknown[]) {\n const lineRecord : LinesRecord = {};\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n\n if (isLineRecord(file)) {\n this.merger(lineRecord, file);\n }\n }\n\n return lineRecord;\n }\n}\n"],"names":["buildConfig","input","directory","Array","isArray","i","length","normalize","process","cwd","FSStore","MemoryStore","get","context","loadGroup","group","locale","set","getLocales","locations","locateMany","path","directories","onlyDirectories","filter","location","isBCP47LanguageCode","name","map","isLoaded","loaded","indexOf","setIsLoaded","push","initLines","addExtensionPattern","buildLocatorOptionsForLocale","loadPromises","load","then","data","default","files","Promise","all","mergeFiles","join","ignore","lineRecord","file","isLineRecord","merger","constructor","options","createMerger","inPlace","array","arrayDistinct"],"mappings":";;;;;;;AAWO,SAASA,YAAYC,KAAmB,EAAA;AAC3CA,IAAAA,KAAAA,GAAQA,SAAS,EAAC;IAElB,IAAIC,SAAAA;IACJ,IAAID,KAAAA,CAAMC,SAAS,EAAE;QACjBA,SAAYC,GAAAA,KAAAA,CAAMC,OAAO,CAACH,KAAAA,CAAMC,SAAS,CACrCD,GAAAA,KAAAA,CAAMC,SAAS,GACf;AAACD,YAAAA,KAAAA,CAAMC;AAAU,SAAA;AAErB,QAAA,IAAK,IAAIG,CAAI,GAAA,CAAA,EAAGA,IAAIH,SAAUI,CAAAA,MAAM,EAAED,CAAK,EAAA,CAAA;AACvCH,YAAAA,SAAS,CAACG,CAAE,CAAA,GAAGE,SAAUL,CAAAA,SAAS,CAACG,CAAE,CAAA,CAAA;AACzC;KACG,MAAA;QACHH,SAAY,GAAA;AAACM,YAAAA,OAAAA,CAAQC,GAAG;AAAG,SAAA;AAC/B;IAEA,OAAO;AACHP,QAAAA;AACJ,KAAA;AACJ;;ACVO,MAAMQ,OAAgBC,SAAAA,WAAAA,CAAAA;;IAuBzB,MAAeC,GAAAA,CAAIC,OAAwB,EAA+B;QACtE,MAAM,IAAI,CAACC,SAAS,CAACD,QAAQE,KAAK,EAAEF,QAAQG,MAAM,CAAA;QAElD,OAAO,KAAK,CAACJ,GAAIC,CAAAA,OAAAA,CAAAA;AACrB;IAEA,MAAeI,GAAAA,CAAIJ,OAAwB,EAAiB;QACxD,OAAO,KAAK,CAACI,GAAIJ,CAAAA,OAAAA,CAAAA;;AAGrB;;AAIA,IAAA,MAAeK,UAAiC,GAAA;QAC5C,MAAMC,SAAAA,GAAY,MAAMC,UAAW,CAAA;AAAC,YAAA;SAAI,EAAE;YACtCC,IAAM,EAAA,IAAI,CAACC,WAAW;YACtBC,eAAiB,EAAA;AACrB,SAAA,CAAA;AAEA,QAAA,OAAOJ,SACFK,CAAAA,MAAM,CAAC,CAACC,WAAaC,mBAAoBD,CAAAA,QAAAA,CAASE,IAAI,CAAA,CAAA,CACtDC,GAAG,CAAC,CAACH,QAAAA,GAAaA,SAASE,IAAI,CAAA;AACxC;;IAIUE,QAASd,CAAAA,KAAa,EAAEC,MAAc,EAAY;QACxD,IAAI,CAACc,MAAM,CAACd,MAAO,CAAA,GAAG,IAAI,CAACc,MAAM,CAACd,MAAO,CAAA,IAAI,EAAE;QAE/C,OAAO,IAAI,CAACc,MAAM,CAACd,OAAO,CAACe,OAAO,CAAChB,KAAAA,CAAAA,KAAW,EAAC;AACnD;IAEUiB,WAAYjB,CAAAA,KAAa,EAAEC,MAAc,EAAE;QACjD,IAAI,CAACc,MAAM,CAACd,MAAO,CAAA,GAAG,IAAI,CAACc,MAAM,CAACd,MAAO,CAAA,IAAI,EAAE;AAE/C,QAAA,IAAI,CAACc,MAAM,CAACd,MAAO,CAAA,CAACiB,IAAI,CAAClB,KAAAA,CAAAA;AAC7B;;AAIA,IAAA,MAAMD,SAAUC,CAAAA,KAAa,EAAEC,MAAc,EAAiC;;AAE1E,QAAA,IAAI,IAAI,CAACa,QAAQ,CAACd,OAAOC,MAAS,CAAA,EAAA;uCAE9B,OAAO,EAAC;AACZ;QAEA,IAAI,CAACkB,SAAS,CAACnB,KAAOC,EAAAA,MAAAA,CAAAA;QACtB,IAAI,CAACgB,WAAW,CAACjB,KAAOC,EAAAA,MAAAA,CAAAA;QAExB,MAAMG,SAAAA,GAAY,MAAMC,UAAAA,CACpB,IAAI,CAACe,mBAAmB,CAACpB,KACzB,CAAA,EAAA,IAAI,CAACqB,4BAA4B,CAACpB,MAAAA,CAAAA,CAAAA;AAGtC,QAAA,MAAMqB,eAAelB,SAAUS,CAAAA,GAAG,CAC9B,CAACH,QAAAA,GAAaa,KAAKb,QACdc,CAAAA,CAAAA,IAAI,CAAC,CAACC,OAAUA,IAAQA,IAAAA,IAAAA,CAAKC,OAAO,GAAGD,IAAAA,CAAKC,OAAO,GAAGD,IAAAA,CAAAA,CAAAA;AAG/D,QAAA,MAAME,KAAQ,GAAA,MAAMC,OAAQC,CAAAA,GAAG,CAACP,YAAAA,CAAAA;QAChC,IAAIK,KAAAA,CAAMpC,MAAM,KAAK,CAAG,EAAA;AACpB,YAAA,OAAO,EAAC;AACZ;QAEA,IAAI,CAACkC,IAAI,CAACxB,MAAO,CAAA,CAACD,MAAM,GAAG,IAAI,CAAC8B,UAAU,CAACH,KAAAA,CAAAA;AAE3C,QAAA,OAAO,IAAI,CAACF,IAAI,CAACxB,MAAAA,CAAO,CAACD,KAAM,CAAA;AACnC;AAEUqB,IAAAA,4BAAAA,CAA6BpB,MAAe,EAAwB;QAC1E,IAAId,SAAAA;AACJ,QAAA,IAAI,IAAI,CAACoB,WAAW,CAAChB,MAAM,KAAK,CAAG,EAAA;YAC/BJ,SAAY,GAAA;gBAACc,MAAU,IAAA;AAAK,aAAA;SACzB,MAAA;AACHd,YAAAA,SAAAA,GAAY,IAAI,CAACoB,WAAW,CAACM,GAAG,CAC5B,CAAC1B,SAAAA,GAAcmB,IAAKyB,CAAAA,IAAI,CAAC5C,SAAAA,EAAWc,MAAU,IAAA,IAAA,CAAA,CAAA;AAEtD;QAEA,OAAO;YACHK,IAAMnB,EAAAA,SAAAA;AACN6C,YAAAA,MAAAA,EAAQ;AACZ,SAAA;AACJ;AAEUZ,IAAAA,mBAAAA,CAAoBR,IAAY,EAAE;QACxC,OAAO,CAAA,EAAGA,IAAK,CAAA,kCAAkC,CAAC;AACtD;AAEUkB,IAAAA,UAAAA,CAAWH,KAAgB,EAAE;AACnC,QAAA,MAAMM,aAA2B,EAAC;AAClC,QAAA,IAAK,IAAI3C,CAAI,GAAA,CAAA,EAAGA,IAAIqC,KAAMpC,CAAAA,MAAM,EAAED,CAAK,EAAA,CAAA;YACnC,MAAM4C,IAAAA,GAAOP,KAAK,CAACrC,CAAE,CAAA;AAErB,YAAA,IAAI6C,aAAaD,IAAO,CAAA,EAAA;gBACpB,IAAI,CAACE,MAAM,CAACH,UAAYC,EAAAA,IAAAA,CAAAA;AAC5B;AACJ;QAEA,OAAOD,UAAAA;AACX;AAtHAI,IAAAA,WAAAA,CAAYnD,KAAmB,CAAE;AAC7B,QAAA,KAAK,CAAC;AAAEuC,YAAAA,IAAAA,EAAM;AAAG,SAAA,CAAA;AAEjB,QAAA,MAAMa,UAAUrD,WAAYC,CAAAA,KAAAA,CAAAA;QAE5B,IAAI,CAAC6B,MAAM,GAAG,EAAC;AACf,QAAA,IAAI,CAACR,WAAW,GAAG+B,OAAAA,CAAQnD,SAAS;QAEpC,IAAI,CAACiD,MAAM,GAAGG,YAAa,CAAA;YACvBC,OAAS,EAAA,IAAA;YACTC,KAAO,EAAA,IAAA;YACPC,aAAe,EAAA;AACnB,SAAA,CAAA;AACJ;AA0GJ;;;;"}