UNPKG

@4dsas/doc_preprocessing

Version:

Preprocess 4D doc to be built by docusaurus

162 lines (137 loc) 4.51 kB
const fs = require('fs') const SETTINGS_KEY = { PATH : "path", CONFIG: "config", SYNTAX_OUTPUT: "syntax_output", OUTPUT: "output", WATCH: "watch", SETTINGS: "settings", SETTINGS_TYPE: "settings_type", DEPENDENCIES: "dependencies", BUILD_DEPENDENCIES: "build_dependencies", ARGS_DEPENDENCIES: "args_dependencies", LIST_ARGS: "list_args", SYNTAX_ONLY:"syntax_only", SYNTAX_PRETTY:"syntax_pretty", LANGUAGES_LIST: "languages", EXCLUDE_LIST: "exclude_list", VERBOSE: "verbose", SYNTAX_ESCAPE_LIST: "syntax_escape_list", INCLUDE_ESCAPE_LIST: "include_escape_list", } const SETTINGS_TYPE = { DEFAULT : "default" } class Settings { constructor() { this._path = "" this._settings = new Object this.set(SETTINGS_KEY.VERBOSE, true); } has(inSetting) { var found = Object.keys(this._settings).find(e => e == inSetting) return found && (this._settings[inSetting] !== null && this._settings[inSetting] !== undefined); } get(inSetting) { var v = this._settings[inSetting] if(v !== undefined && v !== null) { return v } return null } getArray(inSetting) { var v = this._settings[inSetting] if(v !== undefined && v !== null) { return v } return null } getBoolean(inSetting) { var v = this._settings[inSetting] if(v !== undefined && v!== null) { return !!v } return null } set(inSetting, inValue) { this._settings[inSetting] = inValue } getString(inSetting, inValue) { var v = this._settings[inSetting] if((v !== undefined && v!== null) && typeof v == 'string' && v.length > 0) { if(inValue !== undefined) return v + inValue; else return v; } return "" } clone() { var s = new Settings() s._settings = Object.assign({}, this._settings); return s; } load(inArgs, inRoot = "", inFatherSettings = null) { this._path = inRoot + ".doc_preprocessing.json" if(inArgs !=undefined && inArgs[SETTINGS_KEY.SETTINGS] != undefined) { this._path = inRoot + inArgs[SETTINGS_KEY.SETTINGS] } let obj = null if(fs.existsSync(this._path)) { obj = JSON.parse(fs.readFileSync(this._path, 'utf8')) } if(obj != null) { //fill values with JSON let defaultValue = obj[SETTINGS_TYPE.DEFAULT] for (let [key, value] of Object.entries(defaultValue)) { this._settings[key] = value } //Get the kind and fill let kind; if(inArgs != undefined) { kind = obj[inArgs[SETTINGS_KEY.SETTINGS_TYPE]] } //check father if(!kind && inFatherSettings !== null) { kind = inFatherSettings[inArgs[SETTINGS_KEY.SETTINGS_TYPE]] } if(!kind) { return false; } let listArgs if(inFatherSettings && inFatherSettings._settings) { listArgs = inFatherSettings._settings[SETTINGS_KEY.LIST_ARGS] } if(kind !== undefined) { for (let [key, value] of Object.entries(kind)) { if(listArgs) { let re = /%(.*?)%/g let content = value; let matches = [...content.matchAll(re)] for(let match of matches) { const arg = listArgs[match[1]] if(arg) { content = content.substring(0, match.index) + arg + content.substring(match.index + match[0].length); } } value = content } this._settings[key] = value } } } //fill values with args if(inArgs != undefined) { for (let [key, value] of Object.entries(inArgs)) { if(key !== '_') { this._settings[key] = value } } } return true; } } exports.Settings = Settings exports.SETTINGS_KEY = SETTINGS_KEY exports.SETTINGS_TYPE = SETTINGS_TYPE