UNPKG

imdone-core

Version:
282 lines (228 loc) 5.56 kB
/** * Description * @method Config * @param {} opts * @return */ const COLON = ':' const DOUBLE_COLON = '::' const META_SEPS = [COLON, DOUBLE_COLON] const JOURNAL_TYPE = { SINGLE_FILE: 'Single File', FOLDER: 'Folder', NEW_FILE: 'New File', } const DEFAULT_CONFIG = { keepEmptyPriority: false, code: { include_lists: [ 'TODO', 'DOING', 'DONE', 'PLANNING', 'FIXME', 'ARCHIVE', 'HACK', 'CHANGED', 'XXX', 'IDEA', 'NOTE', 'REVIEW', ], }, lists: [ { hidden: false, name: 'TODO', }, { hidden: false, name: 'DOING', }, { hidden: false, name: 'DONE', }, ], } export class Config { constructor(opts) { Object.assign(this, opts) if (!this.settings) this.settings = {} if (!this.settings.views) this.settings.views = [] if (!this.settings.cards) this.settings.cards = {} } static DEFAULT_CONFIG = DEFAULT_CONFIG static JOURNAL_TYPE = JOURNAL_TYPE static newDefaultConfig(config = {}) { return new Config( { ...DEFAULT_CONFIG, lists: [ ...DEFAULT_CONFIG.lists ], ...config } ) } get cards () { return this?.settings?.cards } get fields() { return this?.settings?.cards?.fields ?? {} } set fields(fields) { if (!this.settings.cards) this.settings.cards = {} this.settings.cards.fields = fields } get defaultFilter() { return this?.settings?.defaultFilter ?? '' } set defaultFilter(filter) { this.settings.defaultFilter = filter } get name() { return this?.settings?.name ?? '' } set name(name) { this.settings.name = name } includeList(name) { return this?.code?.include_lists?.includes(name) } ignoreList(name) { const list = this?.lists?.find((list) => name === list.name) return !list || (list && list.ignore) } listExists(name) { return this?.lists?.findIndex((list) => list.name === name) > -1 } getDefaultList() { return this?.cards?.defaultList ?? this.lists[0].name } getDoneList() { const lists = structuredClone(this.lists).reverse().filter((list) => !list.filter) return this?.cards?.doneList || lists?.find(list => /dene|completed|finished/i.test(list?.name ?? ''))?.name || lists[0]?.name || '' } getDoingList() { const lists = structuredClone(this.lists).filter((list) => !list.filter) .reverse() return this?.cards?.doingList || lists?.find(list => /doing|progress/i.test(list?.name ?? ''))?.name || lists[1]?.name || '' } isAddNewCardsToTop() { return this?.cards?.addNewCardsToTop ?? false } getNewCardSyntax() { return this?.settings?.newCardSyntax?? 'MARKDOWN' } isMetaNewLine() { return this?.cards?.metaNewLine ?? false } getTagPrefix() { return this?.cards?.tagPrefix ?? '+' } getCommentTagsOnly() { return this?.cards?.commentTagsOnly ?? false } getCommentMetaOnly() { return this?.cards?.commentMetaOnly ?? false } getTaskPrefix() { return this?.cards?.taskPrefix ?? '##' } isAddCheckBoxTasks() { return this?.cards?.addCheckBoxTasks ?? false } isAddCompletedMeta() { return this?.cards?.addCompletedMeta ?? false } get customCardTerminator() { return this?.cards?.customCardTerminator } set customCardTerminator(terminator) { this.settings.cards.customCardTerminator = terminator } get markdownOnly() { return this?.settings?.markdownOnly } get views() { return this?.settings?.views } get appendNewCardsTo() { return this?.settings?.appendNewCardsTo ?? false } get ignoreFrontMatter() { return this?.settings?.ignoreFrontMatter ?? false } get ignoreFrontMatterTags() { return this?.settings?.ignoreFrontMatterTags ?? false } get journalPath() { return this?.settings?.journalPath ?? '' } set journalPath(path) { this.settings.journalPath = path } get journalTemplate() { const template = this?.settings?.journalTemplate ?? '' return template === 'null' ? '' : template || '' } get journalType() { return this?.settings?.journalType ?? JOURNAL_TYPE.FOLDER } get journalFilePrefix() { return this?.settings?.journalFilePrefix ?? '' } get journalFileSuffix() { return this?.settings?.journalFileSuffix ?? '' } get replaceSpacesWith() { return this?.settings?.replaceSpacesWith } get devMode() { return this?.settings?.plugins?.devMode ?? false } get plugins() { return this?.settings?.plugins ?? { devMode: this.devMode } } get orderMeta() { return this?.cards?.orderMeta ?? false } get maxLines() { return this?.cards?.maxLines ?? 1 } get archiveFolder() { return this?.cards?.archiveFolder ?? 'archive' } get archiveCompleted() { return this?.cards?.archiveCompleted ?? false } set archiveCompleted(archive) { this.settings.cards.archiveCompleted = archive } get tokenPrefix() { return this?.cards?.tokenPrefix ?? '#' } get doneList() { return this.getDoneList() } get metaSep() { return this?.cards?.metaSep ?? COLON } set metaSep(value) { if (!META_SEPS.includes(value)) { throw new Error(`Invalid meta separator: ${value}`) } this.settings.cards.metaSep = value } getMetaSep() { const metaSep = this?.cards?.metaSep ?? COLON return META_SEPS.includes(metaSep) ? metaSep : COLON } }