From 0b90c615ec97ffa11d722e128044ae77b54230e8 Mon Sep 17 00:00:00 2001 From: Jesse Piascik Date: Thu, 24 Oct 2024 22:31:36 -0400 Subject: [PATCH 1/4] Create raw task in one place --- lib/ProjectContext.js | 2 +- .../parsers/task/CardContentParser.js | 25 ++++++++++++ lib/config.js | 4 ++ lib/file.js | 38 ++++++------------- lib/repository.js | 27 ++++++------- lib/task.js | 16 +++----- package-lock.json | 4 +- package.json | 2 +- tasks.md | 21 ---------- 9 files changed, 61 insertions(+), 78 deletions(-) delete mode 100644 tasks.md diff --git a/lib/ProjectContext.js b/lib/ProjectContext.js index f0237304..537faf30 100644 --- a/lib/ProjectContext.js +++ b/lib/ProjectContext.js @@ -1,5 +1,5 @@ const FileProjectContext = require('./domain/entities/FileProjectContext') -const { isNumber } = require('./task') +const { isNumber } = require('./adapters/parsers/task/CardContentParser') module.exports = class ProjectContext extends FileProjectContext { constructor(repo) { diff --git a/lib/adapters/parsers/task/CardContentParser.js b/lib/adapters/parsers/task/CardContentParser.js index b202fe07..c9480e8e 100644 --- a/lib/adapters/parsers/task/CardContentParser.js +++ b/lib/adapters/parsers/task/CardContentParser.js @@ -5,6 +5,12 @@ const FILE_TYPES = { MARKDOWN: 'markdown', CODE: 'code', } +const TASK_TYPES = { + CODE: 'CODE', + HASHTAG: 'HASHTAG', + MARKDOWN: 'MARKDOWN', +} + const START_TAG = '' const END_TAG = '' @@ -276,12 +282,31 @@ function getTaskContent ({ getTextFileTaskContent({ config, content, beforeText, fileType }) } +function getRawTask ({tokenPrefix = '#', orderMeta, beforeText = '', hasColon = false, list, order= '', text, type}) { + if (type === TASK_TYPES.MARKDOWN) { + return `${beforeText}[${text}](${tokenPrefix}${list}:${ + orderMeta ? '' : order + })` + } + const colon = hasColon || (isNumber(order) && !orderMeta) ? ':' : ''; + return `${beforeText}${tokenPrefix}${list}${colon}${ + orderMeta ? '' : order + } ${text}` +} + +function isNumber (value) { + return !isNaN(parseFloat(value)) && isFinite(value) +} + module.exports = { FILE_TYPES, + TASK_TYPES, getTaskContent, + getRawTask, isBeforeTextMarkdownList, padDescription, getCheckedData, + isNumber, CHECK_REGEX, LIST_NAME_PATTERN, HASH_STYLE_REGEX, diff --git a/lib/config.js b/lib/config.js index 594d7d97..6884629b 100644 --- a/lib/config.js +++ b/lib/config.js @@ -187,6 +187,10 @@ class Config { return _get(this, 'settings.cards.archiveCompleted', false) } + get tokenPrefix() { + return _get(this, 'settings.cards.tokenPrefix', '#') + } + get doneList() { return this.getDoneList() } diff --git a/lib/file.js b/lib/file.js index dde97a34..0edaeb30 100644 --- a/lib/file.js +++ b/lib/file.js @@ -24,6 +24,7 @@ var _clone = require('lodash.clone'), { FILE_TYPES, getTaskContent, + getRawTask, LIST_NAME_PATTERN, HASH_STYLE_REGEX, HASH_STYLE_META_ORDER_REGEX, @@ -31,7 +32,6 @@ var _clone = require('lodash.clone'), } = require('./adapters/parsers/task/CardContentParser') const appContext = require('./context/ApplicationContext') -const { isNumber } = require('./task') const { hasBlankLines } = require('./tools') const ERRORS = { @@ -449,7 +449,7 @@ File.prototype.extractCheckboxTasks = function (config, pos, content) { content: content.substring(result.index), pos: posInContent, }) - task.rawTask = File.getRawTask(type, text, list, task.order) + task.rawTask = getRawTask(type, text, list, task.order) tasks.push(task) } if (tasks) { @@ -484,17 +484,6 @@ File.prototype.extractCheckboxTasks = function (config, pos, content) { } } -File.getRawTask = function (type, text, list, order) { - const TYPES = Task.Types - if (type === TYPES.MARKDOWN) { - return `[${text}](#${list}:${order})` - } else if (appContext().repo.config.orderMeta) { - return `#${list} ${text}` - } - - return `#${list}:${order} ${text}` -} - File.prototype.extractTasks = function (config) { this.tasks = [] if (this.isMarkDownFile()) { @@ -643,19 +632,6 @@ File.prototype.deleteTask = function (task, config) { } } -File.TASK_TYPE_TEMPLATES = { - HASHTAG: (t, config) => { - const colon = t.hasColon || (isNumber(t.order) && !config.orderMeta) ? ':' : ''; - return `${t.beforeText || ''}#${t.list}${colon}${ - config.orderMeta ? '' : t.order - } ${t.text}`; - }, - MARKDOWN: (t, config) => - `${t.beforeText || ''}[${t.text}](#${t.list}:${ - config.orderMeta ? '' : t.order - })`, -} - File.prototype.modifyTask = function (task, config, noEmit) { task.orderModified = true task.updateOrderMeta(config) @@ -669,7 +645,15 @@ File.prototype.modifyTask = function (task, config, noEmit) { } else { task.updateContent() const fileContent = this.getContentLines() - let text = File.TASK_TYPE_TEMPLATES[task.type](task, config) + let text = getRawTask({ + orderMeta: config.orderMeta, + beforeText: task.beforeText, + hasColon: task.hasColon, + list: task.list, + order: task.order, + text: task.text, + type: task.type, + }) const linesBefore = fileContent.slice(0, task.line - 1) if (this.isCodeFile()) { const linesBeforeLength = linesBefore.join(lineEnd).length diff --git a/lib/repository.js b/lib/repository.js index b1323c70..d6c8ca96 100644 --- a/lib/repository.js +++ b/lib/repository.js @@ -1,7 +1,5 @@ 'use strict' -const { isNumber } = require('./task') - var _get = require('lodash.get'), _isObject = require('lodash.isobject'), _isFunction = require('lodash.isfunction'), @@ -37,9 +35,12 @@ var _get = require('lodash.get'), functionRegex = require('function-regex'), Task = require('./task'), newCard = require('./card'), - { replaceDateLanguage } = require('./adapters/parsers/DateLanguageParser') + { replaceDateLanguage } = require('./adapters/parsers/DateLanguageParser'), + { getRawTask, isNumber } = require('./adapters/parsers/task/CardContentParser') + const appContext = require('./context/ApplicationContext') +const get = require('lodash.get') var ERRORS = constants.ERRORS, DEFAULT_FILE_PATTERN = constants.DEFAULT_FILE_PATTERN, @@ -1100,8 +1101,8 @@ Repository.prototype.appendTask = function({file, content, list}, cb) { const description = lines.length > 1 ? Task.padDescription(lines.slice(1), taskPrefix) : [] - let appendContent - const taskContent = config.orderMeta + const rawTask = getRawTask({orderMeta: config.orderMeta, list, order, text, type: taskSyntax}) + const taskContent = config.orderMeta ? this.getTaskContent({ description, order, @@ -1111,18 +1112,14 @@ Repository.prototype.appendTask = function({file, content, list}, cb) { }) : description.join(eol.lf) - if (taskSyntax === Task.Types.MARKDOWN) { - appendContent = `${taskPrefix}[${text}](#${list}:${ - config.orderMeta ? '' : orderString - })${eol.lf}${taskContent}` - } else { - const inLineOrder = config.orderMeta ? '' : `:${orderString}` - appendContent = `${taskPrefix}#${list}${inLineOrder} ${text}${eol.lf}${taskContent}` - } - appendContent = File.trimBlankLines(appendContent) + let appendContent = File.trimBlankLines( + `${taskPrefix}${rawTask}${eol.lf}${taskContent}` + ) + fileContent = `${fileContent}${sep}` const cardTerminator = "\n".repeat(2) file.setContent(`${fileContent}${appendContent}${cardTerminator}`) + this.writeAndExtract(file, true, (err, file) => { if (err) return cb(err) const task = file.getTasks().find(task => task.text === text && task.list === list) @@ -1541,7 +1538,7 @@ Repository.prototype.getTasksInList = function (name, offset, limit) { var tasks = _where(this.getTasks(), { list: name }) if (tasks.length === 0) return [] var allTasks = fastSort(tasks).by(DEFAULT_SORT) - if (Task.isNumber(offset) && Task.isNumber(limit)) + if (isNumber(offset) && isNumber(limit)) return allTasks.slice(offset, offset + limit) return allTasks } diff --git a/lib/task.js b/lib/task.js index 86e8db74..11811532 100644 --- a/lib/task.js +++ b/lib/task.js @@ -16,8 +16,10 @@ var _clone = require('lodash.clone'), const { CHECK_REGEX, + TASK_TYPES, getCheckedData, - isBeforeTextMarkdownList + isBeforeTextMarkdownList, + isNumber } = require('./adapters/parsers/task/CardContentParser.js') /** @@ -234,11 +236,7 @@ Task.prototype.getCheckedData = function () { return getCheckedData(this.beforeText) } -Task.Types = { - CODE: 'CODE', - HASHTAG: 'HASHTAG', - MARKDOWN: 'MARKDOWN', -} +Task.Types = TASK_TYPES Task.AnyLanguageGroup = '#\\w:%/.$-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC' @@ -422,7 +420,7 @@ Task.getMetaOrderRegex = function (config) { Task.prototype.updateOrderMeta = function (config, descContent = this.description.join(lineEnd)) { if (config.orderMeta) { - if (!Task.isNumber(this.order)) return this.order = '' + if (!isNumber(this.order)) return this.order = '' const addNewLine = config.isMetaNewLine() const metaSep = config.getMetaSep() if (this.meta.order) { @@ -778,8 +776,4 @@ Task.prototype.equals = function (task) { ) } -Task.isNumber = function(n) { - return !isNaN(parseFloat(n)) && isFinite(n); -} - module.exports = Task diff --git a/package-lock.json b/package-lock.json index dcda214c..3e39d587 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "imdone-core", - "version": "1.46.2", + "version": "1.47.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "imdone-core", - "version": "1.46.2", + "version": "1.47.0", "license": "MIT", "dependencies": { "@inquirer/editor": "^1.2.12", diff --git a/package.json b/package.json index 2f312553..082b127c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imdone-core", - "version": "1.46.2", + "version": "1.47.0", "description": "imdone-core", "main": "index.js", "scripts": { diff --git a/tasks.md b/tasks.md deleted file mode 100644 index ac781ba3..00000000 --- a/tasks.md +++ /dev/null @@ -1,21 +0,0 @@ -backlog -==== - -## Ungrouped Tasks - -## Phase 1 - -### TODO - -- [ ] Another new task in a new file - - - -## Phase 2 - -### DOING - -- [ ] Another new task in a new files - - - From 868b46335bfa73fc2cf7539661d392f3e99fe3e5 Mon Sep 17 00:00:00 2001 From: Jesse Piascik Date: Thu, 24 Oct 2024 22:56:08 -0400 Subject: [PATCH 2/4] Prepare task parsing for tokenPrefix --- .../parsers/task/CardContentParser.js | 33 ++++++++------ lib/file.js | 43 ++++++++----------- lib/plugins/archive-plugin.js | 2 +- 3 files changed, 39 insertions(+), 39 deletions(-) diff --git a/lib/adapters/parsers/task/CardContentParser.js b/lib/adapters/parsers/task/CardContentParser.js index c9480e8e..4693d215 100644 --- a/lib/adapters/parsers/task/CardContentParser.js +++ b/lib/adapters/parsers/task/CardContentParser.js @@ -11,24 +11,29 @@ const TASK_TYPES = { MARKDOWN: 'MARKDOWN', } - +const DEFAULT_TOKEN_PREFIX = '#' const START_TAG = '' const END_TAG = '' const CODE_STYLE_PATTERN = '([A-Z]+[A-Z-_]+?)((:)(-?[\\d.]+(?:e-?\\d+)?)?)?[ \\t]+(.+)$' const LIST_NAME_PATTERN = '[\\p{L}0-9-_]{2,}' // [a-zA-Z-_]+? -const HASH_STYLE_REGEX = new XRegExp( - `#(${LIST_NAME_PATTERN})(:(-?[\\d.]+(?:e-?\\d+)?)?)?[ \\t]+(.+)$`, - 'gm' -) -const HASH_STYLE_META_ORDER_REGEX = new XRegExp( - `#(${LIST_NAME_PATTERN})[ \\t]+(.+)$`, 'gm' -) const LINK_STYLE_REGEX = new XRegExp( `(\\[.*\\]\\s?)?(\\[(.+)\\]\\(#(${LIST_NAME_PATTERN})(:)(-?[\\d.]+(?:e-?\\d+)?)?\\))`, 'gm' ) const CHECK_REGEX = /^(\s*- )\[([x ])\]/ + +function getHashStyleRegex(tokenPrefix = DEFAULT_TOKEN_PREFIX, metaOrder = false) { + return metaOrder ? + new XRegExp( + `${tokenPrefix}(${LIST_NAME_PATTERN})[ \\t]+(.+)$`, 'gm' + ) : + new XRegExp( + `${tokenPrefix}(${LIST_NAME_PATTERN})(:(-?[\\d.]+(?:e-?\\d+)?)?)?[ \\t]+(.+)$`, + 'gm' + ) +} + function getCheckedData(content) { const taskRegex = new RegExp(CHECK_REGEX) const result = taskRegex.exec(content) @@ -71,10 +76,10 @@ function isCheckBoxTask (config, line, beforeText) { function hasTaskInText(config, text, isCodeFile) { return ( (isCodeFile && hasCodeStyleTask(config, text)) || - ((new XRegExp(HASH_STYLE_REGEX).test(text) || - new XRegExp(HASH_STYLE_META_ORDER_REGEX).test(text) || + ((new XRegExp(getHashStyleRegex(config.tokenPrefix)).test(text) || + new XRegExp(getHashStyleRegex(config.tokenPrefix, true)).test(text) || new XRegExp(LINK_STYLE_REGEX).test(text)) && - config.lists.find((list) => text.includes(`#${list.name}`))) + config.lists.find((list) => text.includes(`${config.tokenPrefix}${list.name}`))) ) } @@ -282,7 +287,7 @@ function getTaskContent ({ getTextFileTaskContent({ config, content, beforeText, fileType }) } -function getRawTask ({tokenPrefix = '#', orderMeta, beforeText = '', hasColon = false, list, order= '', text, type}) { +function getRawTask ({tokenPrefix = DEFAULT_TOKEN_PREFIX, orderMeta, beforeText = '', hasColon = false, list, order= '', text, type}) { if (type === TASK_TYPES.MARKDOWN) { return `${beforeText}[${text}](${tokenPrefix}${list}:${ orderMeta ? '' : order @@ -306,10 +311,10 @@ module.exports = { isBeforeTextMarkdownList, padDescription, getCheckedData, + hasTaskInText, isNumber, + getHashStyleRegex, CHECK_REGEX, LIST_NAME_PATTERN, - HASH_STYLE_REGEX, - HASH_STYLE_META_ORDER_REGEX, LINK_STYLE_REGEX } \ No newline at end of file diff --git a/lib/file.js b/lib/file.js index 0edaeb30..d5b02b5a 100644 --- a/lib/file.js +++ b/lib/file.js @@ -25,9 +25,9 @@ var _clone = require('lodash.clone'), FILE_TYPES, getTaskContent, getRawTask, + getHashStyleRegex, + hasTaskInText, LIST_NAME_PATTERN, - HASH_STYLE_REGEX, - HASH_STYLE_META_ORDER_REGEX, LINK_STYLE_REGEX, } = require('./adapters/parsers/task/CardContentParser') @@ -346,7 +346,7 @@ File.prototype.extractCodeStyleTasks = function (config, pos, content) { } File.prototype.extractHashStyleTasks = function (config, pos, content) { - var hashStyleRegex = new XRegExp(HASH_STYLE_REGEX) + var hashStyleRegex = getHashStyleRegex(config.tokenPrefix) var lang = this.getLang() var result while ((result = hashStyleRegex.exec(content)) !== null) { @@ -617,7 +617,7 @@ File.prototype.deleteTask = function (task, config) { config ) } else if (task.type === Task.Types.HASHTAG) { - this.deleteCodeOrHashTask(HASH_STYLE_REGEX, task, config) + this.deleteCodeOrHashTask(getHashStyleRegex(config.tokenPrefix), task, config) } } else { const fileContent = this.getContentLines() @@ -1095,19 +1095,20 @@ File.prototype.removeTask = function (task) { File.prototype.ignoreCodeBlocks = function () { // BACKLOG:-100 This is not used, but we need a way to ignore tasks in code blocks. Maybe save position ranges - var cleanContent = this.content - var replacer = function (block) { - block = block.replace(new XRegExp(LINK_STYLE_REGEX), '**TASK**') - block = block.replace(new XRegExp(HASH_STYLE_REGEX), '**TASK**') - return block - } - - if (this.isMarkDownFile()) { - cleanContent = this.content - .replace(new RegExp(CODE_BLOCK_REGEX), replacer) - .replace(new RegExp(INLINE_CODE_REGEX), replacer) - } - return cleanContent + // ```javascript + // var cleanContent = this.content + // var replacer = function (block) { + // block = block.replace(new XRegExp(LINK_STYLE_REGEX), '**TASK**') + // block = block.replace(getHashStyleRegex(config.tokenPrefix), '**TASK**') + // return block + // } + // if (this.isMarkDownFile()) { + // cleanContent = this.content + // .replace(new RegExp(CODE_BLOCK_REGEX), replacer) + // .replace(new RegExp(INLINE_CODE_REGEX), replacer) + // } + // return cleanContent + // ``` } File.prototype.isMarkDownFile = function () { @@ -1245,13 +1246,7 @@ File.prototype.hasCodeStyleTask = function (config, text) { } File.prototype.hasTaskInText = function (config, text) { - return ( - this.hasCodeStyleTask(config, text) || - ((new XRegExp(HASH_STYLE_REGEX).test(text) || - new XRegExp(HASH_STYLE_META_ORDER_REGEX).test(text) || - new XRegExp(LINK_STYLE_REGEX).test(text)) && - config.lists.find((list) => text.includes(`#${list.name}`))) - ) + return hasTaskInText(config, text, this.isCodeFile()) } File.prototype.isInBlockComment = function (content) { diff --git a/lib/plugins/archive-plugin.js b/lib/plugins/archive-plugin.js index 65dd5687..595a20d1 100644 --- a/lib/plugins/archive-plugin.js +++ b/lib/plugins/archive-plugin.js @@ -52,7 +52,7 @@ module.exports = class ArchivePlugin extends Plugin { ], task.content ) - const taskContent = `${task.beforeText}#${task.list} ${content}\n\n\n` + const taskContent = `${task.beforeText}${config.tokenPrefix}${task.list} ${content}\n\n\n` this.fileGateway.preparePathForWriting(newPath) this.fileGateway.appendFileSync(newPath, taskContent) From e78d2bae12cd95fe71f5c029f06abdf31e18fe9a Mon Sep 17 00:00:00 2001 From: Jesse Piascik Date: Fri, 25 Oct 2024 08:09:43 -0400 Subject: [PATCH 3/4] Refactor modifyTask to use tokenPrefix --- lib/default-settings.js | 1 + lib/file.js | 8 ++++---- lib/plugins/archive-plugin.js | 1 + lib/repository.js | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/default-settings.js b/lib/default-settings.js index 17075a30..e28cff0d 100644 --- a/lib/default-settings.js +++ b/lib/default-settings.js @@ -21,6 +21,7 @@ cards: addCompletedMeta: false #override addCheckBoxTasks: false #override doneList: DONE #override if + tokenPrefix: '#' #override taskPrefix: '##' #override tagPrefix: '+' #override metaSep: ':' #override diff --git a/lib/file.js b/lib/file.js index d5b02b5a..f6eab09b 100644 --- a/lib/file.js +++ b/lib/file.js @@ -449,7 +449,7 @@ File.prototype.extractCheckboxTasks = function (config, pos, content) { content: content.substring(result.index), pos: posInContent, }) - task.rawTask = getRawTask(type, text, list, task.order) + task.rawTask = getRawTask({tokenPrefix: config.tokenPrefix, orderMeta: config.orderMeta, list, text, type}) tasks.push(task) } if (tasks) { @@ -646,6 +646,7 @@ File.prototype.modifyTask = function (task, config, noEmit) { task.updateContent() const fileContent = this.getContentLines() let text = getRawTask({ + tokenPrefix: config.tokenPrefix, orderMeta: config.orderMeta, beforeText: task.beforeText, hasColon: task.hasColon, @@ -725,9 +726,8 @@ File.prototype.modifyCodeOrHashTask = function (re, task, config, noEmit) { } else text = task.text } else text = task.text if (/[a-z]/.test(task.list)) task.type = Task.Types.HASHTAG - const hash = task.type === Task.Types.HASHTAG ? '#' : '' - const inLineOrder = task.hasColon && !config.orderMeta ? `:${task.order}` : '' - var taskContent = `${task.beforeText || ''}${hash}${task.list}${inLineOrder} ${text}` + const tokenPrefix = task.type === Task.Types.HASHTAG ? config.tokenPrefix : '' + var taskContent = getRawTask({tokenPrefix, orderMeta: config.orderMeta, list: task.list, order: task.order, text, type: task.type}) task.line = this.getLineNumber(index) task.id = getTaskId(self.getPath(), task.line, task.text) this.setContent(beforeContent + taskContent + afterContent) diff --git a/lib/plugins/archive-plugin.js b/lib/plugins/archive-plugin.js index 595a20d1..bcdffe63 100644 --- a/lib/plugins/archive-plugin.js +++ b/lib/plugins/archive-plugin.js @@ -52,6 +52,7 @@ module.exports = class ArchivePlugin extends Plugin { ], task.content ) + // TODO: This should use the CardContentParser to get the raw task const taskContent = `${task.beforeText}${config.tokenPrefix}${task.list} ${content}\n\n\n` this.fileGateway.preparePathForWriting(newPath) diff --git a/lib/repository.js b/lib/repository.js index d6c8ca96..ab627b5c 100644 --- a/lib/repository.js +++ b/lib/repository.js @@ -1101,7 +1101,7 @@ Repository.prototype.appendTask = function({file, content, list}, cb) { const description = lines.length > 1 ? Task.padDescription(lines.slice(1), taskPrefix) : [] - const rawTask = getRawTask({orderMeta: config.orderMeta, list, order, text, type: taskSyntax}) + const rawTask = getRawTask({tokenPrefix: config.tokenPrefix, orderMeta: config.orderMeta, list, order, text, type: taskSyntax}) const taskContent = config.orderMeta ? this.getTaskContent({ description, From 508ac75530ac936dbc6d9405152021496a870195 Mon Sep 17 00:00:00 2001 From: Jesse Piascik Date: Wed, 30 Oct 2024 23:03:25 -0400 Subject: [PATCH 4/4] Implement init and onTaskFound for plugins --- .imdone/config.yml | 18 +- .../imdone-header-footer-plugin/.gitignore | 106 +++ .../imdone-header-footer-plugin/.imdoneignore | 4 + .../imdone-header-footer-plugin/.npmignore | 3 + .../imdone-header-footer-plugin/.prettierrc | 6 + .../imdone-header-footer-plugin/LICENSE | 21 + .../imdone-header-footer-plugin/README.md | 6 + .../imdone-header-footer-plugin/bundle.js | 283 +++++++ .../imdone-header-footer-plugin/main.js | 63 ++ .../package-lock.json | 688 ++++++++++++++++++ .../imdone-header-footer-plugin/package.json | 19 + .../rollup.config.js | 12 + .imdoneignore | 1 + backlog/devex/remove-unused-code.md | 1 - ...en-completing-a-task-with-`imdone-done`.md | 7 - .../Add-story-id-to-new-stories-in-UI.md | 7 - .../tasks/Fix-command-line-prompts.md | 13 - ...E-visible-by-default-in-backlog-project.md | 7 - ...Prompt-for-backlog-project-name-on-init.md | 8 - ...t-filter-for-backlog-and-story-projects.md | 9 - ...project-name-should-be-`story-id-tasks`.md | 7 - ...-task-tag,-story-id-meta-and-group-meta.md | 3 - backlog/stories/Add-a-task/README.md | 3 - .../tasks/Allow-user-to-select-group.md | 3 - backlog/stories/Complete-a-task/README.md | 8 - backlog/stories/Import-tasks/README.md | 3 - .../Import-adds-story-cards-to-current.md | 3 - .../tasks/Can-also-use-a-filter.md | 3 - .../tasks/Can-output-as-JSON.md | 3 - ...the-last-story-as-the-default-selection.md | 3 - .../Produces-output-the-same-as-input.md | 3 - backlog/stories/Plan-a-story/README.md | 42 -- ...filtered-cards-to-delete-filtered-cards.md | 10 - ...ry-Fix-issue-with-multiple-groups-added.md | 10 - backlog/stories/Start-task/README.md | 3 - ...ImdoneInstalled`-function-to-controller.md | 11 - ...he-`open`-command-to-cli-and-controller.md | 11 - ...ement-openImdone-function-in-controller.md | 10 - .../start-a-task-without-args/README.md | 7 - .../tasks/Make-taskId-optional.md | 8 - ...or-story-with-stories-that-are-not-done.md | 8 - ...k-with-tasks-in-story-that-are-not-done.md | 8 - ...DOING-the-story-should-also-be-in-DOING.md | 8 - lib/adapters/file-gateway.js | 4 +- lib/adapters/parsers/task/readme.md | 6 + lib/config.js | 48 +- lib/file.js | 5 + lib/mixins/repo-fs-store.js | 17 +- lib/plugins/archive-plugin.js | 6 +- lib/plugins/plugin-manager.js | 63 +- lib/project.js | 2 + lib/usecases/get-tasks-in-file.js | 27 + notes/2020-11/2020-11-23.md | 8 - notes/2021-03/2021-03-05.md | 11 - notes/2022-04/2022-04-09.md | 10 +- .../Add-`imdone-task`-to-show-defaults.md | 6 + .../Add-a-CLI-command-to-show-current-task.md | 9 +- ...en-completing-a-task-with-`imdone-done`.md | 14 + ...n-story-projects-on-the-backlog-project.md | 9 +- .../Add-story-id-to-new-stories-in-UI.md | 14 + .../tasks/Fix-command-line-prompts.md | 18 + ...E-visible-by-default-in-backlog-project.md | 14 + ...Prompt-for-backlog-project-name-on-init.md | 15 + ...t-filter-for-backlog-and-story-projects.md | 16 + ...project-name-should-be-`story-id-tasks`.md | 14 + ...-task-tag,-story-id-meta-and-group-meta.md | 10 + ...-parent-projects-actions-and-properties.md | 9 +- ...-current-task-and-to-find-current-story.md | 9 +- .../stories/Add-a-task/Add-a-task-to-story.md | 10 + .../tasks/Allow-user-to-select-group.md | 10 + ...tion-to-show-backlog-from-story-project.md | 8 +- ...n-backlog-board-action-in-story-project.md | 8 +- ...omplete-a-task-by-calling-`imdone-done`.md | 14 + .../tasks/Moves-the-task-to-done-list.md | 9 +- .../tasks/Reminds-you-to-commit-and-push.md | 9 +- ...-before-making-any-changes-to-the-tasks.md | 8 +- ...-by-swithing-to-master-and-start-a-task.md | 8 +- ...t-a-story-and-story-tasks-from-markdown.md | 10 + .../Import-adds-story-cards-to-current.md | 10 + ...Initialize-imdone-in-the-backlog-folder.md | 9 +- ...sure-checked-items-are-put-in-DONE-list.md | 9 +- ...-contents-of-the-`backlogstorystory-id`.md | 9 +- .../Import-tasks/tasks/Refactor-to-domain.md | 9 +- ...h-so-it's-available-for-starting-a-task.md | 9 +- ...handle-a-file-with-the-following-format.md | 9 +- ....backlog`-is-the-default-project-folder.md | 9 +- ...`story-id`-should-be-the-markdown-title.md | 9 +- .../use-`markdown-it.parse`-to-create-AST.md | 9 +- ...-select-a-story,-so-I-can-start-a-task..md | 9 +- .../List-all-the-tasks-in-a-story.md | 9 +- ...-story-id-with-the-`-s-story-id`-option.md | 9 +- .../tasks/Can-also-use-a-filter.md | 10 + .../tasks/Can-output-as-JSON.md | 10 + ...the-last-story-as-the-default-selection.md | 10 + ...-all-content-before-`##-Tasks`-to-story.md | 9 +- .../Produces-output-the-same-as-input.md | 10 + ....backlog`-is-the-default-project-folder.md | 9 +- .../stories/Plan-a-story/Plan-a-story.md | 46 ++ ...filtered-cards-to-delete-filtered-cards.md | 16 + .../tasks/Fix-multiple-groups-added.md | 6 + ...ry-Fix-issue-with-multiple-groups-added.md | 16 + .../Start-task/Start-a-task-by-task-id.md | 10 + .../If-the-branch-exists,-check-it-out.md | 9 +- .../Move-the-task-to-the-`DOING`-list.md | 9 +- ...in-session-so-we-can-check-it-out-again.md | 9 +- ...-id-in-session-so-we-know-what-to-close.md | 9 +- ...branch-named-`storysidtasktask-filname`.md | 9 +- ...ub-actions-because-of-docker-dependency.md | 8 +- ...leted-when-a-story-is-deleted-in-the-UI.md | 8 +- ...ethod-so-we-can-implement-in-the-plugin.md | 8 +- ...up-with-the-cli,-replace-group-metadata.md | 8 +- ...ete-group-deta-before-adding-in-addTask.md | 6 + ...open-current-or-selected-task-in-editor.md | 8 +- ...ould-open-the-board-to-the-current-task.md | 8 +- ...-open-the-current-or-selected-task-file.md | 8 +- .../open-imdone-from-the-cli.md | 8 +- ...ImdoneInstalled`-function-to-controller.md | 17 + ...he-`open`-command-to-cli-and-controller.md | 17 + ...ement-openImdone-function-in-controller.md | 16 + ...-a-story-and-task-I-would-like-to-start.md | 14 + .../tasks/Make-taskId-optional.md | 15 + ...or-story-with-stories-that-are-not-done.md | 15 + ...k-with-tasks-in-story-that-are-not-done.md | 15 + ...DOING-the-story-should-also-be-in-DOING.md | 15 + ...o-we-can-call-async-init-on-each-plugin.md | 11 + ...o-we-can-call-async-init-on-each-plugin.md | 11 + .../2020-11/Fix-filter-by-meta.created.md | 15 + .../Fix-adding-task-with-first-line-blank.md | 12 + .../2021-03/Fix-delete-task-with-`card`.md | 12 + ...ard-and-Board-actions-to-return-a-value.md | 12 + notes/archive/notes/2022-04/Release-1.28.8.md | 12 + ...n-be-pasted-into-code-for-quick-context.md | 11 + notes/releases/1.29.0/kanban.md | 4 - package-lock.json | 31 +- package.json | 3 +- 135 files changed, 2188 insertions(+), 373 deletions(-) create mode 100644 .imdone/plugins/imdone-header-footer-plugin/.gitignore create mode 100644 .imdone/plugins/imdone-header-footer-plugin/.imdoneignore create mode 100644 .imdone/plugins/imdone-header-footer-plugin/.npmignore create mode 100644 .imdone/plugins/imdone-header-footer-plugin/.prettierrc create mode 100644 .imdone/plugins/imdone-header-footer-plugin/LICENSE create mode 100644 .imdone/plugins/imdone-header-footer-plugin/README.md create mode 100644 .imdone/plugins/imdone-header-footer-plugin/bundle.js create mode 100644 .imdone/plugins/imdone-header-footer-plugin/main.js create mode 100644 .imdone/plugins/imdone-header-footer-plugin/package-lock.json create mode 100644 .imdone/plugins/imdone-header-footer-plugin/package.json create mode 100644 .imdone/plugins/imdone-header-footer-plugin/rollup.config.js delete mode 100644 backlog/stories/Add-a-command-to-show-defaults/tasks/Add-a-completed-date-when-completing-a-task-with-`imdone-done`.md delete mode 100644 backlog/stories/Add-a-command-to-show-defaults/tasks/Add-story-id-to-new-stories-in-UI.md delete mode 100644 backlog/stories/Add-a-command-to-show-defaults/tasks/Make-TODO,-DOING,-DONE-visible-by-default-in-backlog-project.md delete mode 100644 backlog/stories/Add-a-command-to-show-defaults/tasks/Prompt-for-backlog-project-name-on-init.md delete mode 100644 backlog/stories/Add-a-command-to-show-defaults/tasks/Se-default-filter-for-backlog-and-story-projects.md delete mode 100644 backlog/stories/Add-a-command-to-show-defaults/tasks/Story-project-name-should-be-`story-id-tasks`.md delete mode 100644 backlog/stories/Add-a-command-to-show-defaults/tasks/Update-StoryProject-task-template-to-include-task-tag,-story-id-meta-and-group-meta.md delete mode 100644 backlog/stories/Add-a-task/README.md delete mode 100644 backlog/stories/Add-a-task/tasks/Allow-user-to-select-group.md delete mode 100644 backlog/stories/Complete-a-task/README.md delete mode 100644 backlog/stories/Import-tasks/README.md delete mode 100644 backlog/stories/Import-tasks/tasks/Import-adds-story-cards-to-current.md delete mode 100644 backlog/stories/List-tasks-in-a-story/tasks/Can-also-use-a-filter.md delete mode 100644 backlog/stories/List-tasks-in-a-story/tasks/Can-output-as-JSON.md delete mode 100644 backlog/stories/List-tasks-in-a-story/tasks/If-no-story-is-given-list-the-stories-and-use-the-last-story-as-the-default-selection.md delete mode 100644 backlog/stories/List-tasks-in-a-story/tasks/Produces-output-the-same-as-input.md delete mode 100644 backlog/stories/Start-task/README.md delete mode 100644 backlog/stories/start-a-task-without-args/README.md delete mode 100644 backlog/stories/start-a-task-without-args/tasks/Make-taskId-optional.md delete mode 100644 backlog/stories/start-a-task-without-args/tasks/Prompt-for-story-with-stories-that-are-not-done.md delete mode 100644 backlog/stories/start-a-task-without-args/tasks/Prompt-for-task-with-tasks-in-story-that-are-not-done.md create mode 100644 lib/adapters/parsers/task/readme.md create mode 100644 lib/usecases/get-tasks-in-file.js rename backlog/stories/Add-a-command-to-show-defaults/README.md => notes/archive/backlog/stories/Add-a-command-to-show-defaults/Add-`imdone-task`-to-show-defaults.md (59%) rename {backlog => notes/archive/backlog}/stories/Add-a-command-to-show-defaults/tasks/Add-a-CLI-command-to-show-current-task.md (51%) create mode 100644 notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-a-completed-date-when-completing-a-task-with-`imdone-done`.md rename backlog/stories/Add-a-command-to-show-defaults/tasks/Add-board-actions-to-open-story-projects-on-the-backlog-project.md => notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-card-actions-to-open-story-projects-on-the-backlog-project.md (53%) create mode 100644 notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-story-id-to-new-stories-in-UI.md create mode 100644 notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Fix-command-line-prompts.md create mode 100644 notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Make-TODO,-DOING,-DONE-visible-by-default-in-backlog-project.md create mode 100644 notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Prompt-for-backlog-project-name-on-init.md create mode 100644 notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Set-default-filter-for-backlog-and-story-projects.md create mode 100644 notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Story-project-name-should-be-`story-id-tasks`.md create mode 100644 notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Update-StoryProject-task-template-to-include-task-tag,-story-id-meta-and-group-meta.md rename {backlog => notes/archive/backlog}/stories/Add-a-command-to-show-defaults/tasks/Use-a-parent-projects-actions-and-properties.md (51%) rename {backlog => notes/archive/backlog}/stories/Add-a-command-to-show-defaults/tasks/Use-task-in-DOING-as-current-task-and-to-find-current-story.md (64%) create mode 100644 notes/archive/backlog/stories/Add-a-task/Add-a-task-to-story.md create mode 100644 notes/archive/backlog/stories/Add-a-task/tasks/Allow-user-to-select-group.md rename backlog/stories/Board-action-to-show-backlog-from-story-project/README.md => notes/archive/backlog/stories/Board-action-to-show-backlog-from-story-project/Board-action-to-show-backlog-from-story-project.md (57%) rename {backlog => notes/archive/backlog}/stories/Board-action-to-show-backlog-from-story-project/tasks/Add-Show-story-in-backlog-board-action-in-story-project.md (71%) create mode 100644 notes/archive/backlog/stories/Complete-a-task/Complete-a-task-by-calling-`imdone-done`.md rename {backlog => notes/archive/backlog}/stories/Complete-a-task/tasks/Moves-the-task-to-done-list.md (51%) rename {backlog => notes/archive/backlog}/stories/Complete-a-task/tasks/Reminds-you-to-commit-and-push.md (51%) rename backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/README.md => notes/archive/backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks.md (60%) rename {backlog => notes/archive/backlog}/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/tasks/Test-by-swithing-to-master-and-start-a-task.md (64%) create mode 100644 notes/archive/backlog/stories/Import-tasks/After-collaborative-design,-import-a-story-and-story-tasks-from-markdown.md create mode 100644 notes/archive/backlog/stories/Import-tasks/tasks/Import-adds-story-cards-to-current.md rename {backlog => notes/archive/backlog}/stories/Import-tasks/tasks/Initialize-imdone-in-the-backlog-folder.md (52%) rename {backlog => notes/archive/backlog}/stories/Import-tasks/tasks/Make-sure-checked-items-are-put-in-DONE-list.md (51%) rename backlog/stories/Import-tasks/tasks/On-import-always-remove-the-contents-of-the-backlogstory.md => notes/archive/backlog/stories/Import-tasks/tasks/On-import-always-remove-the-contents-of-the-`backlogstorystory-id`.md (53%) rename {backlog => notes/archive/backlog}/stories/Import-tasks/tasks/Refactor-to-domain.md (52%) rename {backlog => notes/archive/backlog}/stories/Import-tasks/tasks/Save-story-id-project-path-so-it's-available-for-starting-a-task.md (51%) rename {backlog => notes/archive/backlog}/stories/Import-tasks/tasks/Shold-handle-a-file-with-the-following-format.md (51%) rename backlog/stories/Import-tasks/tasks/.backlog-is-the-default-project-folder.md => notes/archive/backlog/stories/Import-tasks/tasks/`.backlog`-is-the-default-project-folder.md (52%) rename backlog/stories/Import-tasks/tasks/``-should-be-the-markdown-title.md => notes/archive/backlog/stories/Import-tasks/tasks/`story-id`-should-be-the-markdown-title.md (53%) rename backlog/stories/Import-tasks/tasks/use-markdown-it.parse-to-create-AST.md => notes/archive/backlog/stories/Import-tasks/tasks/use-`markdown-it.parse`-to-create-AST.md (52%) rename backlog/stories/List-stories/README.md => notes/archive/backlog/stories/List-stories/I-would-like-to-select-a-story-to-start,-so-in-order-to-do-so,-I-would-like-to-select-a-story,-so-I-can-start-a-task..md (53%) rename backlog/stories/List-tasks-in-a-story/README.md => notes/archive/backlog/stories/List-tasks-in-a-story/List-all-the-tasks-in-a-story.md (57%) rename backlog/stories/List-tasks-in-a-story/tasks/Can-also-pass-in-the-story-id-with-the-`-s-story-id-option.md => notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Can-also-pass-in-the-story-id-with-the-`-s-story-id`-option.md (50%) create mode 100644 notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Can-also-use-a-filter.md create mode 100644 notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Can-output-as-JSON.md create mode 100644 notes/archive/backlog/stories/List-tasks-in-a-story/tasks/If-no-story-is-given-list-the-stories-and-use-the-last-story-as-the-default-selection.md rename backlog/stories/List-tasks-in-a-story/tasks/Adds-all-content-before-`##-Tasks`-to-story.md => notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Import-adds-all-content-before-`##-Tasks`-to-story.md (50%) create mode 100644 notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Produces-output-the-same-as-input.md rename {backlog => notes/archive/backlog}/stories/List-tasks-in-a-story/tasks/`.backlog`-is-the-default-project-folder.md (50%) create mode 100644 notes/archive/backlog/stories/Plan-a-story/Plan-a-story.md create mode 100644 notes/archive/backlog/stories/Plan-a-story/tasks/Ask-the-user-to-type-delete-filtered-cards-to-delete-filtered-cards.md rename {backlog => notes/archive/backlog}/stories/Plan-a-story/tasks/Fix-multiple-groups-added.md (57%) create mode 100644 notes/archive/backlog/stories/Plan-a-story/tasks/Plan-Story-Fix-issue-with-multiple-groups-added.md create mode 100644 notes/archive/backlog/stories/Start-task/Start-a-task-by-task-id.md rename {backlog => notes/archive/backlog}/stories/Start-task/tasks/If-the-branch-exists,-check-it-out.md (52%) rename backlog/stories/Start-task/tasks/Move-the-task-to-the-DOING-list.md => notes/archive/backlog/stories/Start-task/tasks/Move-the-task-to-the-`DOING`-list.md (52%) rename {backlog => notes/archive/backlog}/stories/Start-task/tasks/Save-the-branch-name-in-session-so-we-can-check-it-out-again.md (52%) rename {backlog => notes/archive/backlog}/stories/Start-task/tasks/Set-the-task-id-in-session-so-we-know-what-to-close.md (52%) rename backlog/stories/Start-task/tasks/This-should-find-the-task-and-create-a-branch-named-storytask.md => notes/archive/backlog/stories/Start-task/tasks/This-should-find-the-task-and-create-a-branch-named-`storysidtasktask-filname`.md (55%) rename backlog/stories/Tests-don't-succeed-on-github-actions-because-of-docker-dependency/README.md => notes/archive/backlog/stories/Tests-don't-succeed-on-github-actions-because-of-docker-dependency/Tests-don't-succeed-on-github-actions-because-of-docker-dependency.md (60%) rename backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/README.md => notes/archive/backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI.md (59%) rename {backlog => notes/archive/backlog}/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/tasks/Add-onAfterDeleteTask-plugin-method-so-we-can-implement-in-the-plugin.md (63%) rename backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/README.md => notes/archive/backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata.md (59%) rename {backlog => notes/archive/backlog}/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/tasks/Delete-group-deta-before-adding-in-addTask.md (64%) rename backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/README.md => notes/archive/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/`imdone-open`-should-open-current-or-selected-task-in-editor.md (64%) rename backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-board`-should-open-the-board-to-the-current-or-selected-task.md => notes/archive/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-board`-should-open-the-board-to-the-current-task.md (63%) rename {backlog => notes/archive/backlog}/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-open`-should-open-the-current-or-selected-task-file.md (63%) rename backlog/stories/open-imdone-from-the-cli/README.md => notes/archive/backlog/stories/open-imdone-from-the-cli/open-imdone-from-the-cli.md (64%) create mode 100644 notes/archive/backlog/stories/open-imdone-from-the-cli/tasks/Add-`isImdoneInstalled`-function-to-controller.md create mode 100644 notes/archive/backlog/stories/open-imdone-from-the-cli/tasks/Add-the-`open`-command-to-cli-and-controller.md create mode 100644 notes/archive/backlog/stories/open-imdone-from-the-cli/tasks/Implement-openImdone-function-in-controller.md create mode 100644 notes/archive/backlog/stories/start-a-task-without-args/I-should-be-able-to-choose-a-story-and-task-I-would-like-to-start.md create mode 100644 notes/archive/backlog/stories/start-a-task-without-args/tasks/Make-taskId-optional.md create mode 100644 notes/archive/backlog/stories/start-a-task-without-args/tasks/Prompt-for-story-with-stories-that-are-not-done.md create mode 100644 notes/archive/backlog/stories/start-a-task-without-args/tasks/Prompt-for-task-with-tasks-in-story-that-are-not-done.md create mode 100644 notes/archive/backlog/stories/start-a-task-without-args/tasks/When-a-task-is-started-and-moved-to-DOING-the-story-should-also-be-in-DOING.md create mode 100644 notes/archive/lib/plugins/Make-createPlugin-async-so-we-can-call-async-init-on-each-plugin.md create mode 100644 notes/archive/lib/plugins/Make-loadPlugin-async-so-we-can-call-async-init-on-each-plugin.md create mode 100644 notes/archive/notes/2020-11/Fix-filter-by-meta.created.md create mode 100644 notes/archive/notes/2021-03/Fix-adding-task-with-first-line-blank.md create mode 100644 notes/archive/notes/2021-03/Fix-delete-task-with-`card`.md create mode 100644 notes/archive/notes/2022-04/Allow-Card-and-Board-actions-to-return-a-value.md create mode 100644 notes/archive/notes/2022-04/Release-1.28.8.md create mode 100644 notes/archive/notes/releases/1.29.0/Create-card-action-to-copy-task-for-code-so-it-can-be-pasted-into-code-for-quick-context.md diff --git a/.imdone/config.yml b/.imdone/config.yml index 760fe8f2..9b34fb6e 100644 --- a/.imdone/config.yml +++ b/.imdone/config.yml @@ -17,14 +17,14 @@ code: - READY - ABANDONED lists: + - name: NOTE + hidden: false + ignore: false + id: jea6nx7llx85j9k - name: FIXME hidden: false ignore: false id: sktwi22bvlvppcr50 - - name: NOTE - hidden: true - ignore: false - id: jea6nx7llx85j9k - name: Past Due Reminders hidden: true ignore: false @@ -66,7 +66,6 @@ settings: newCardSyntax: MARKDOWN replaceSpacesWith: '-' plugins: - devMode: false imdone-sample-plugin: tags: [] meta: @@ -76,6 +75,12 @@ settings: value: Release 1.29.0 - key: epic value: Release 2.0 + SamplePlugin: + tags: [] + meta: [] + HeaderFooterPlugin: + afterPrefix: '${!/.md$/.test(relPath) ? ''## **:hammer_and_wrench:** '' : ''''}' + devMode: false journalTemplate: null markdownOnly: false theme: dark @@ -86,6 +91,7 @@ settings: views: [] name: imdone core defaultFilter: ! '' + kudosProbability: 0.33 cards: colors: - color: green @@ -122,3 +128,5 @@ settings: pack: fab title: Tweet this card defaultList: FIXME + archiveCompleted: true + archiveFolder: notes/archive diff --git a/.imdone/plugins/imdone-header-footer-plugin/.gitignore b/.imdone/plugins/imdone-header-footer-plugin/.gitignore new file mode 100644 index 00000000..835b8a9c --- /dev/null +++ b/.imdone/plugins/imdone-header-footer-plugin/.gitignore @@ -0,0 +1,106 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +.imdone/plugins diff --git a/.imdone/plugins/imdone-header-footer-plugin/.imdoneignore b/.imdone/plugins/imdone-header-footer-plugin/.imdoneignore new file mode 100644 index 00000000..62bc5041 --- /dev/null +++ b/.imdone/plugins/imdone-header-footer-plugin/.imdoneignore @@ -0,0 +1,4 @@ +.obsidian +.trash +bundle.js +.imdone/plugins \ No newline at end of file diff --git a/.imdone/plugins/imdone-header-footer-plugin/.npmignore b/.imdone/plugins/imdone-header-footer-plugin/.npmignore new file mode 100644 index 00000000..822eae32 --- /dev/null +++ b/.imdone/plugins/imdone-header-footer-plugin/.npmignore @@ -0,0 +1,3 @@ +imdone-tasks.md +main.js +.imdone \ No newline at end of file diff --git a/.imdone/plugins/imdone-header-footer-plugin/.prettierrc b/.imdone/plugins/imdone-header-footer-plugin/.prettierrc new file mode 100644 index 00000000..6fed3d0f --- /dev/null +++ b/.imdone/plugins/imdone-header-footer-plugin/.prettierrc @@ -0,0 +1,6 @@ +{ + "tabWidth": 2, + "useTabs": false, + "semi": false, + "singleQuote": true +} diff --git a/.imdone/plugins/imdone-header-footer-plugin/LICENSE b/.imdone/plugins/imdone-header-footer-plugin/LICENSE new file mode 100644 index 00000000..9107dfc3 --- /dev/null +++ b/.imdone/plugins/imdone-header-footer-plugin/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 imdone + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.imdone/plugins/imdone-header-footer-plugin/README.md b/.imdone/plugins/imdone-header-footer-plugin/README.md new file mode 100644 index 00000000..5c0ff341 --- /dev/null +++ b/.imdone/plugins/imdone-header-footer-plugin/README.md @@ -0,0 +1,6 @@ +# imdone-header-footer-plugin + +Add custom headers and footers to your imdone cards. Just add a **header** and/or **footer** in the plugin settings +and it will appear in all of your cards. + +You can also use [interpolated values](https://imdone.io/docs/#/cards?id=string-interpolation) in your header and footer. \ No newline at end of file diff --git a/.imdone/plugins/imdone-header-footer-plugin/bundle.js b/.imdone/plugins/imdone-header-footer-plugin/bundle.js new file mode 100644 index 00000000..f9a79ff8 --- /dev/null +++ b/.imdone/plugins/imdone-header-footer-plugin/bundle.js @@ -0,0 +1,283 @@ +'use strict'; + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +function getDefaultExportFromCjs (x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; +} + +var plugin = {exports: {}}; + +(function (module, exports) { +var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Plugin = void 0; +class Plugin { + constructor(project) { + this.project = project; + this.unimplWarning = {}; + } + destroy() { } + onBeforeAddTask(request) { + return __awaiter(this, void 0, void 0, function* () { + this.unimplemented('onBeforeAddTask()'); + const { path, list, content, meta, tags, contexts } = request; + return { path, content, meta, tags, contexts }; + }); + } + onBeforeBoardUpdate() { + this.unimplemented('onBeforeBoardUpdate()'); + } + onBoardUpdate(lists) { + this.unimplemented('onBoardUpdate(lists: Array)'); + } + onTaskUpdate(task) { + this.unimplemented('onTaskUpdate(task: Task)'); + } + onAfterDeleteTask(task) { + this.unimplemented('onAfterDeleteTask(task: Task)'); + } + getCardProperties(task) { + this.unimplemented('getCardProperties(task: Task)'); + return {}; + } + getCardActions(task) { + this.unimplemented('getCardActions(task: Task)'); + return []; + } + getBoardActions() { + this.unimplemented('getBoardActions()'); + return []; + } + getSettingsSchema() { + this.unimplemented('getSettingsSchema()'); + return null; + } + getSettings() { + return null; + } + unimplemented(signature) { + if (this.unimplWarning[signature]) + return; + console.info(`${this.constructor.name}.${signature} is not implemented.`); + this.unimplWarning[signature] = true; + } +} +exports.Plugin = Plugin; +(module).exports = Plugin; +}(plugin, plugin.exports)); + +var Plugin = /*@__PURE__*/getDefaultExportFromCjs(plugin.exports); + +var settings = {}; + +Object.defineProperty(settings, "__esModule", { value: true }); +var Settings_1 = settings.Settings = settings.ArrayProperty = settings.ArrayItems = StringProperty_1 = settings.StringProperty = settings.NumberProperty = settings.BooleanProperty = settings.Property = void 0; +class Property { + constructor(type) { + this.type = type; + } + setTitle(title) { + this.title = title; + return this; + } + setDescription(description) { + this.description = description; + return this; + } +} +settings.Property = Property; +class BooleanProperty extends Property { + constructor() { + super('boolean'); + } + setDefault(_default) { + this.default = _default; + return this; + } + setTitle(title) { + this.title = title; + return this; + } + setDescription(description) { + this.description = description; + return this; + } +} +settings.BooleanProperty = BooleanProperty; +class NumberProperty extends Property { + constructor() { + super('number'); + } + setMinimum(min) { + this.minimum = min; + return this; + } + setMaximum(max) { + this.maximum = max; + return this; + } + setDefault(_default) { + this.default = _default; + return this; + } + setTitle(title) { + this.title = title; + return this; + } + setDescription(description) { + this.description = description; + return this; + } +} +settings.NumberProperty = NumberProperty; +class StringProperty extends Property { + constructor() { + super('string'); + this.editor = false; + this.required = false; + } + setDefault(_default) { + this.default = _default; + return this; + } + allowedValues(_enum) { + this.enum = _enum; + return this; + } + textEditor(enable) { + this.editor = enable; + return this; + } + setRequired(required) { + this.required = required; + return this; + } + setTitle(title) { + this.title = title; + return this; + } + setDescription(description) { + this.description = description; + return this; + } +} +var StringProperty_1 = settings.StringProperty = StringProperty; +class ArrayItems { + constructor() { + this.properties = {}; + this.draggable = false; + this.type = 'object'; + this.type = 'object'; + } +} +settings.ArrayItems = ArrayItems; +class ArrayProperty extends Property { + constructor() { + super('array'); + this.items = new ArrayItems(); + } + itemTitle(title) { + this.items.title = title; + return this; + } + itemsDraggable(draggable) { + this.items.draggable = draggable; + return this; + } + addItemProperty(name, property) { + this.items.properties[name] = property; + return this; + } + setTitle(title) { + this.title = title; + return this; + } + setDescription(description) { + this.description = description; + return this; + } +} +settings.ArrayProperty = ArrayProperty; +class Settings { + constructor() { + this.properties = {}; + this.type = 'object'; + } + addProperty(name, property) { + this.properties[name] = property; + return this; + } +} +Settings_1 = settings.Settings = Settings; + +const HEADER_FOOTER_COMMENT = '\n'; + +class HeaderFooterPlugin extends Plugin { + constructor(project) { + super(project); + } + + onTaskUpdate(task) { + if (task.interpretedContent.includes(HEADER_FOOTER_COMMENT)) return + if (this.afterPrefix) { + task.interpretedContent = task.interpretedContent.replace(task.text, `${this.afterPrefix}${task.text}`); + } + + if (this.afterTitle) { + task.interpretedContent = task.interpretedContent.replace(task.text, `${task.text}${this.afterTitle}`); + } + + task.interpretedContent = + task.interpretedContent = `${HEADER_FOOTER_COMMENT}${this.header}${task.interpretedContent}${this.footer}`; + } + + get afterPrefix() { + return this.getSettings().afterPrefix || '' + } + + get afterTitle() { + return this.getSettings().afterTitle || '' + } + + get header() { + return this.getSettings().header || '' + } + + get footer() { + return this.getSettings().footer || '' + } + + getSettingsSchema() { + if (!this.settingSchema) { + this.settingSchema = new Settings_1() + .addProperty( + 'header', + new StringProperty_1().textEditor(true).setTitle('Header markdown') + ) + .addProperty( + 'afterPrefix', + new StringProperty_1().textEditor(true).setTitle('After prefix markdown') + ) + .addProperty( + 'afterTitle', + new StringProperty_1().textEditor(true).setTitle('After title markdown') + ) + .addProperty( + 'footer', + new StringProperty_1().textEditor(true).setTitle('Footer markdown') + ); + } + return this.settingSchema + } +} + +module.exports = HeaderFooterPlugin; diff --git a/.imdone/plugins/imdone-header-footer-plugin/main.js b/.imdone/plugins/imdone-header-footer-plugin/main.js new file mode 100644 index 00000000..9da81070 --- /dev/null +++ b/.imdone/plugins/imdone-header-footer-plugin/main.js @@ -0,0 +1,63 @@ +import Plugin from 'imdone-api' +import { Settings, StringProperty } from 'imdone-api/lib/settings' + +const HEADER_FOOTER_COMMENT = '\n' + +export default class HeaderFooterPlugin extends Plugin { + constructor(project) { + super(project) + } + + onTaskUpdate(task) { + if (task.interpretedContent.includes(HEADER_FOOTER_COMMENT)) return + if (this.afterPrefix) { + task.interpretedContent = task.interpretedContent.replace(task.text, `${this.afterPrefix}${task.text}`) + } + + if (this.afterTitle) { + task.interpretedContent = task.interpretedContent.replace(task.text, `${task.text}${this.afterTitle}`) + } + + task.interpretedContent = + task.interpretedContent = `${HEADER_FOOTER_COMMENT}${this.header}${task.interpretedContent}${this.footer}` + } + + get afterPrefix() { + return this.getSettings().afterPrefix || '' + } + + get afterTitle() { + return this.getSettings().afterTitle || '' + } + + get header() { + return this.getSettings().header || '' + } + + get footer() { + return this.getSettings().footer || '' + } + + getSettingsSchema() { + if (!this.settingSchema) { + this.settingSchema = new Settings() + .addProperty( + 'header', + new StringProperty().textEditor(true).setTitle('Header markdown') + ) + .addProperty( + 'afterPrefix', + new StringProperty().textEditor(true).setTitle('After prefix markdown') + ) + .addProperty( + 'afterTitle', + new StringProperty().textEditor(true).setTitle('After title markdown') + ) + .addProperty( + 'footer', + new StringProperty().textEditor(true).setTitle('Footer markdown') + ) + } + return this.settingSchema + } +} diff --git a/.imdone/plugins/imdone-header-footer-plugin/package-lock.json b/.imdone/plugins/imdone-header-footer-plugin/package-lock.json new file mode 100644 index 00000000..f18b93bb --- /dev/null +++ b/.imdone/plugins/imdone-header-footer-plugin/package-lock.json @@ -0,0 +1,688 @@ +{ + "name": "imdone-header-footer-plugin", + "version": "0.1.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "imdone-header-footer-plugin", + "version": "0.1.1", + "license": "MIT", + "dependencies": { + "imdone-api": "^0.0.16" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-node-resolve": "^13.1.3", + "rollup": "^2.63.0" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "21.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.1.0.tgz", + "integrity": "sha512-6ZtHx3VHIp2ReNNDxHjuUml6ur+WcQ28N1yHgCQwsbNkQg2suhxGMDQGJOn/KuDxKtd1xuZP5xSTwBA4GQ8hbA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.38.3" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz", + "integrity": "sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", + "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/imdone-api": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/imdone-api/-/imdone-api-0.0.16.tgz", + "integrity": "sha512-vbSCcJ+70zYr7rwOTv9dn2rtfxL22kYKzTTBAMX88OpC/ANiO/pSIOPa9Ipd4TDJtuT+C+aNseWJQWOWYX2d2g==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-builtin-module": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", + "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup": { + "version": "2.72.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.72.0.tgz", + "integrity": "sha512-KqtR2YcO35/KKijg4nx4STO3569aqCUeGRkKWnJ6r+AvBBrVY9L4pmf4NHVrQr4mTOq6msbohflxr2kpihhaOA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + }, + "dependencies": { + "@rollup/plugin-commonjs": { + "version": "21.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.1.0.tgz", + "integrity": "sha512-6ZtHx3VHIp2ReNNDxHjuUml6ur+WcQ28N1yHgCQwsbNkQg2suhxGMDQGJOn/KuDxKtd1xuZP5xSTwBA4GQ8hbA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz", + "integrity": "sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + } + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", + "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "imdone-api": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/imdone-api/-/imdone-api-0.0.16.tgz", + "integrity": "sha512-vbSCcJ+70zYr7rwOTv9dn2rtfxL22kYKzTTBAMX88OpC/ANiO/pSIOPa9Ipd4TDJtuT+C+aNseWJQWOWYX2d2g==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-builtin-module": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", + "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", + "dev": true, + "requires": { + "builtin-modules": "^3.0.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rollup": { + "version": "2.72.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.72.0.tgz", + "integrity": "sha512-KqtR2YcO35/KKijg4nx4STO3569aqCUeGRkKWnJ6r+AvBBrVY9L4pmf4NHVrQr4mTOq6msbohflxr2kpihhaOA==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} diff --git a/.imdone/plugins/imdone-header-footer-plugin/package.json b/.imdone/plugins/imdone-header-footer-plugin/package.json new file mode 100644 index 00000000..e2fb7d20 --- /dev/null +++ b/.imdone/plugins/imdone-header-footer-plugin/package.json @@ -0,0 +1,19 @@ +{ + "name": "imdone-header-footer-plugin", + "version": "0.1.1", + "author": "Jesse Piascik", + "description": "Add global headers and/or footers to your cards", + "main": "bundle.js", + "scripts": { + "build": "rollup -c rollup.config.js" + }, + "license": "MIT", + "dependencies": { + "imdone-api": "^0.0.16" + }, + "devDependencies": { + "rollup": "^2.63.0", + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-node-resolve": "^13.1.3" + } +} diff --git a/.imdone/plugins/imdone-header-footer-plugin/rollup.config.js b/.imdone/plugins/imdone-header-footer-plugin/rollup.config.js new file mode 100644 index 00000000..ca5bb539 --- /dev/null +++ b/.imdone/plugins/imdone-header-footer-plugin/rollup.config.js @@ -0,0 +1,12 @@ +import { nodeResolve } from '@rollup/plugin-node-resolve' +import commonjs from '@rollup/plugin-commonjs' + +export default { + input: 'main.js', + output: { + file: 'bundle.js', + format: 'cjs', + exports: 'default' + }, + plugins: [commonjs(), nodeResolve()] +}; \ No newline at end of file diff --git a/.imdoneignore b/.imdoneignore index 8fdc5f60..a87b733b 100644 --- a/.imdoneignore +++ b/.imdoneignore @@ -8,3 +8,4 @@ tmp imdone-export.json .imdone/templates .imdone +notes/archive diff --git a/backlog/devex/remove-unused-code.md b/backlog/devex/remove-unused-code.md index afc8b679..a9b4a1c2 100644 --- a/backlog/devex/remove-unused-code.md +++ b/backlog/devex/remove-unused-code.md @@ -3,7 +3,6 @@ ## Tasks - [x] remove story tasking -- [ ] Remove line parsing \ No newline at end of file diff --git a/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-story-id-to-new-stories-in-UI.md b/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-story-id-to-new-stories-in-UI.md deleted file mode 100644 index 2e959f3f..00000000 --- a/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-story-id-to-new-stories-in-UI.md +++ /dev/null @@ -1,7 +0,0 @@ -## #DONE Add story-id to new stories in UI - \ No newline at end of file diff --git a/backlog/stories/Add-a-command-to-show-defaults/tasks/Fix-command-line-prompts.md b/backlog/stories/Add-a-command-to-show-defaults/tasks/Fix-command-line-prompts.md index e82c6c6b..172d7582 100644 --- a/backlog/stories/Add-a-command-to-show-defaults/tasks/Fix-command-line-prompts.md +++ b/backlog/stories/Add-a-command-to-show-defaults/tasks/Fix-command-line-prompts.md @@ -1,14 +1 @@ -## #DONE Fix command line prompts - -Also changed defaultProject path to a function so it works in imdone ui - - - - --> \ No newline at end of file diff --git a/backlog/stories/Add-a-command-to-show-defaults/tasks/Make-TODO,-DOING,-DONE-visible-by-default-in-backlog-project.md b/backlog/stories/Add-a-command-to-show-defaults/tasks/Make-TODO,-DOING,-DONE-visible-by-default-in-backlog-project.md deleted file mode 100644 index 22a310f2..00000000 --- a/backlog/stories/Add-a-command-to-show-defaults/tasks/Make-TODO,-DOING,-DONE-visible-by-default-in-backlog-project.md +++ /dev/null @@ -1,7 +0,0 @@ -## #DONE Make TODO, DOING, DONE visible by default in backlog project - \ No newline at end of file diff --git a/backlog/stories/Add-a-command-to-show-defaults/tasks/Prompt-for-backlog-project-name-on-init.md b/backlog/stories/Add-a-command-to-show-defaults/tasks/Prompt-for-backlog-project-name-on-init.md deleted file mode 100644 index 482017c4..00000000 --- a/backlog/stories/Add-a-command-to-show-defaults/tasks/Prompt-for-backlog-project-name-on-init.md +++ /dev/null @@ -1,8 +0,0 @@ -## #DONE Prompt for backlog project name on init -- Use ` backlog` as default - \ No newline at end of file diff --git a/backlog/stories/Add-a-command-to-show-defaults/tasks/Se-default-filter-for-backlog-and-story-projects.md b/backlog/stories/Add-a-command-to-show-defaults/tasks/Se-default-filter-for-backlog-and-story-projects.md deleted file mode 100644 index 486c02d2..00000000 --- a/backlog/stories/Add-a-command-to-show-defaults/tasks/Se-default-filter-for-backlog-and-story-projects.md +++ /dev/null @@ -1,9 +0,0 @@ -## #DONE Set default filter for backlog and story projects -- backlog: `tags = story` -- story: `tags = task` - \ No newline at end of file diff --git a/backlog/stories/Add-a-command-to-show-defaults/tasks/Story-project-name-should-be-`story-id-tasks`.md b/backlog/stories/Add-a-command-to-show-defaults/tasks/Story-project-name-should-be-`story-id-tasks`.md deleted file mode 100644 index 383e00b3..00000000 --- a/backlog/stories/Add-a-command-to-show-defaults/tasks/Story-project-name-should-be-`story-id-tasks`.md +++ /dev/null @@ -1,7 +0,0 @@ -## #DONE Story project name should be ` tasks` - \ No newline at end of file diff --git a/backlog/stories/Add-a-command-to-show-defaults/tasks/Update-StoryProject-task-template-to-include-task-tag,-story-id-meta-and-group-meta.md b/backlog/stories/Add-a-command-to-show-defaults/tasks/Update-StoryProject-task-template-to-include-task-tag,-story-id-meta-and-group-meta.md deleted file mode 100644 index 4869400e..00000000 --- a/backlog/stories/Add-a-command-to-show-defaults/tasks/Update-StoryProject-task-template-to-include-task-tag,-story-id-meta-and-group-meta.md +++ /dev/null @@ -1,3 +0,0 @@ -## #DONE Update StoryProject task template to include task tag, story-id meta and group meta - - diff --git a/backlog/stories/Add-a-task/README.md b/backlog/stories/Add-a-task/README.md deleted file mode 100644 index a0b82ac2..00000000 --- a/backlog/stories/Add-a-task/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## #DONE Add a task to story - - diff --git a/backlog/stories/Add-a-task/tasks/Allow-user-to-select-group.md b/backlog/stories/Add-a-task/tasks/Allow-user-to-select-group.md deleted file mode 100644 index 358cf791..00000000 --- a/backlog/stories/Add-a-task/tasks/Allow-user-to-select-group.md +++ /dev/null @@ -1,3 +0,0 @@ -## #DONE Allow user to select group - - diff --git a/backlog/stories/Complete-a-task/README.md b/backlog/stories/Complete-a-task/README.md deleted file mode 100644 index 35d95735..00000000 --- a/backlog/stories/Complete-a-task/README.md +++ /dev/null @@ -1,8 +0,0 @@ -## #DONE Complete a task by calling `imdone done` - -```bash -npx imdone done -``` - - - diff --git a/backlog/stories/Import-tasks/README.md b/backlog/stories/Import-tasks/README.md deleted file mode 100644 index 273a0f17..00000000 --- a/backlog/stories/Import-tasks/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## #DONE After collaborative design, import a story and story tasks from markdown - - diff --git a/backlog/stories/Import-tasks/tasks/Import-adds-story-cards-to-current.md b/backlog/stories/Import-tasks/tasks/Import-adds-story-cards-to-current.md deleted file mode 100644 index d8fd30fe..00000000 --- a/backlog/stories/Import-tasks/tasks/Import-adds-story-cards-to-current.md +++ /dev/null @@ -1,3 +0,0 @@ -## #DONE Import adds story cards to current - - \ No newline at end of file diff --git a/backlog/stories/List-tasks-in-a-story/tasks/Can-also-use-a-filter.md b/backlog/stories/List-tasks-in-a-story/tasks/Can-also-use-a-filter.md deleted file mode 100644 index 41c07682..00000000 --- a/backlog/stories/List-tasks-in-a-story/tasks/Can-also-use-a-filter.md +++ /dev/null @@ -1,3 +0,0 @@ -## #DONE Can also use a filter - - diff --git a/backlog/stories/List-tasks-in-a-story/tasks/Can-output-as-JSON.md b/backlog/stories/List-tasks-in-a-story/tasks/Can-output-as-JSON.md deleted file mode 100644 index ef1e13b0..00000000 --- a/backlog/stories/List-tasks-in-a-story/tasks/Can-output-as-JSON.md +++ /dev/null @@ -1,3 +0,0 @@ -## #DONE Can output as JSON - - diff --git a/backlog/stories/List-tasks-in-a-story/tasks/If-no-story-is-given-list-the-stories-and-use-the-last-story-as-the-default-selection.md b/backlog/stories/List-tasks-in-a-story/tasks/If-no-story-is-given-list-the-stories-and-use-the-last-story-as-the-default-selection.md deleted file mode 100644 index c0d03f18..00000000 --- a/backlog/stories/List-tasks-in-a-story/tasks/If-no-story-is-given-list-the-stories-and-use-the-last-story-as-the-default-selection.md +++ /dev/null @@ -1,3 +0,0 @@ -## #DONE If no story is given list the stories and use the last story as the default selection - - diff --git a/backlog/stories/List-tasks-in-a-story/tasks/Produces-output-the-same-as-input.md b/backlog/stories/List-tasks-in-a-story/tasks/Produces-output-the-same-as-input.md deleted file mode 100644 index 07f11809..00000000 --- a/backlog/stories/List-tasks-in-a-story/tasks/Produces-output-the-same-as-input.md +++ /dev/null @@ -1,3 +0,0 @@ -## #DONE Produces output the same as input - - diff --git a/backlog/stories/Plan-a-story/README.md b/backlog/stories/Plan-a-story/README.md index 74e81a01..bccab546 100644 --- a/backlog/stories/Plan-a-story/README.md +++ b/backlog/stories/Plan-a-story/README.md @@ -1,45 +1,3 @@ -# #DONE Plan a story - -As a developer I would like to plan a story and make it visible by adding tasks to a story markdown in my repo - -## Tasks - -- [x] Set default branch (Ask on init) -- [x] Set working remote (Ask on init) -- [x] Rename `import` to `plan` -- [x] Implement git automation - 1. Fetch from working remote - 2. Checkout default branch - 3. Checkout or create story branch - 4. If it's not a git repo ask to init -- [x] Add the story project -- [x] Move the story task to DOING -- [ ] Commit and push the story branch with force - -## Later Stories - -### Convert a card with tasks to a story and tasks - - [ ] `task.text` is storyId if `story-id` meta is not set - - [ ] First paragraph is story content - - [ ] Process tasks in the same way as command line - -### When we ask for tasks automatically add the DoD, so the user can delete ones that aren't relevant - - [ ] Ask for story id - - [ ] Ask for story description - - [ ] Ask for tasks with inquirer - -### Generate task list in a tasks README: `backlog/stories//tasks/README.md` - - Put a comment at the top of the file that say's it's autogenerated - - Each task should have a relative path link back to task file it came from - - - ## Plan a story ```mermaid diff --git a/backlog/stories/Plan-a-story/tasks/Ask-the-user-to-type-delete-filtered-cards-to-delete-filtered-cards.md b/backlog/stories/Plan-a-story/tasks/Ask-the-user-to-type-delete-filtered-cards-to-delete-filtered-cards.md index db1a7f5a..172d7582 100644 --- a/backlog/stories/Plan-a-story/tasks/Ask-the-user-to-type-delete-filtered-cards-to-delete-filtered-cards.md +++ b/backlog/stories/Plan-a-story/tasks/Ask-the-user-to-type-delete-filtered-cards-to-delete-filtered-cards.md @@ -1,11 +1 @@ -## #DONE Ask the user to type "delete filtered cards" to delete filtered cards - --> \ No newline at end of file diff --git a/backlog/stories/Plan-a-story/tasks/Plan-Story-Fix-issue-with-multiple-groups-added.md b/backlog/stories/Plan-a-story/tasks/Plan-Story-Fix-issue-with-multiple-groups-added.md index 622febea..172d7582 100644 --- a/backlog/stories/Plan-a-story/tasks/Plan-Story-Fix-issue-with-multiple-groups-added.md +++ b/backlog/stories/Plan-a-story/tasks/Plan-Story-Fix-issue-with-multiple-groups-added.md @@ -1,11 +1 @@ -## #DONE Plan Story: Fix issue with multiple groups added - --> \ No newline at end of file diff --git a/backlog/stories/Start-task/README.md b/backlog/stories/Start-task/README.md deleted file mode 100644 index bef1a77c..00000000 --- a/backlog/stories/Start-task/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## #DONE Start a task by task-id - - diff --git a/backlog/stories/open-imdone-from-the-cli/tasks/Add-`isImdoneInstalled`-function-to-controller.md b/backlog/stories/open-imdone-from-the-cli/tasks/Add-`isImdoneInstalled`-function-to-controller.md index 76921500..172d7582 100644 --- a/backlog/stories/open-imdone-from-the-cli/tasks/Add-`isImdoneInstalled`-function-to-controller.md +++ b/backlog/stories/open-imdone-from-the-cli/tasks/Add-`isImdoneInstalled`-function-to-controller.md @@ -1,12 +1 @@ -## #DONE Add `isImdoneInstalled` function to controller -- display imdone url - --> \ No newline at end of file diff --git a/backlog/stories/open-imdone-from-the-cli/tasks/Add-the-`open`-command-to-cli-and-controller.md b/backlog/stories/open-imdone-from-the-cli/tasks/Add-the-`open`-command-to-cli-and-controller.md index 66ac469f..172d7582 100644 --- a/backlog/stories/open-imdone-from-the-cli/tasks/Add-the-`open`-command-to-cli-and-controller.md +++ b/backlog/stories/open-imdone-from-the-cli/tasks/Add-the-`open`-command-to-cli-and-controller.md @@ -1,12 +1 @@ -## #DONE Add the `open` command to cli and controller - --> \ No newline at end of file diff --git a/backlog/stories/open-imdone-from-the-cli/tasks/Implement-openImdone-function-in-controller.md b/backlog/stories/open-imdone-from-the-cli/tasks/Implement-openImdone-function-in-controller.md index fac511bf..172d7582 100644 --- a/backlog/stories/open-imdone-from-the-cli/tasks/Implement-openImdone-function-in-controller.md +++ b/backlog/stories/open-imdone-from-the-cli/tasks/Implement-openImdone-function-in-controller.md @@ -1,11 +1 @@ -## #DONE Implement openImdone function in controller - --> \ No newline at end of file diff --git a/backlog/stories/start-a-task-without-args/README.md b/backlog/stories/start-a-task-without-args/README.md deleted file mode 100644 index 20c59fa1..00000000 --- a/backlog/stories/start-a-task-without-args/README.md +++ /dev/null @@ -1,7 +0,0 @@ -## #DONE I should be able to choose a story and task I would like to start - \ No newline at end of file diff --git a/backlog/stories/start-a-task-without-args/tasks/Make-taskId-optional.md b/backlog/stories/start-a-task-without-args/tasks/Make-taskId-optional.md deleted file mode 100644 index fb48a165..00000000 --- a/backlog/stories/start-a-task-without-args/tasks/Make-taskId-optional.md +++ /dev/null @@ -1,8 +0,0 @@ -## #DONE Make taskId optional - diff --git a/backlog/stories/start-a-task-without-args/tasks/Prompt-for-story-with-stories-that-are-not-done.md b/backlog/stories/start-a-task-without-args/tasks/Prompt-for-story-with-stories-that-are-not-done.md deleted file mode 100644 index 9b5187ed..00000000 --- a/backlog/stories/start-a-task-without-args/tasks/Prompt-for-story-with-stories-that-are-not-done.md +++ /dev/null @@ -1,8 +0,0 @@ -## #DONE Prompt for story with stories that are not done - diff --git a/backlog/stories/start-a-task-without-args/tasks/Prompt-for-task-with-tasks-in-story-that-are-not-done.md b/backlog/stories/start-a-task-without-args/tasks/Prompt-for-task-with-tasks-in-story-that-are-not-done.md deleted file mode 100644 index 1c799d39..00000000 --- a/backlog/stories/start-a-task-without-args/tasks/Prompt-for-task-with-tasks-in-story-that-are-not-done.md +++ /dev/null @@ -1,8 +0,0 @@ -## #DONE Prompt for task with tasks in story that are not done - diff --git a/backlog/stories/start-a-task-without-args/tasks/When-a-task-is-started-and-moved-to-DOING-the-story-should-also-be-in-DOING.md b/backlog/stories/start-a-task-without-args/tasks/When-a-task-is-started-and-moved-to-DOING-the-story-should-also-be-in-DOING.md index 3794ee02..172d7582 100644 --- a/backlog/stories/start-a-task-without-args/tasks/When-a-task-is-started-and-moved-to-DOING-the-story-should-also-be-in-DOING.md +++ b/backlog/stories/start-a-task-without-args/tasks/When-a-task-is-started-and-moved-to-DOING-the-story-should-also-be-in-DOING.md @@ -1,9 +1 @@ -## #DONE When a task is started and moved to DOING the story should also be in DOING - --> \ No newline at end of file diff --git a/lib/adapters/file-gateway.js b/lib/adapters/file-gateway.js index 52d08c9c..8dc8e7e0 100644 --- a/lib/adapters/file-gateway.js +++ b/lib/adapters/file-gateway.js @@ -44,8 +44,8 @@ module.exports = { return fs.promises.writeFile.apply({}, args) }, - readdir(...args) { - return fs.readdir.apply({}, args) + async readdir(...args) { + return fs.promises.readdir.apply({}, args) }, unlinkSync(...args) { diff --git a/lib/adapters/parsers/task/readme.md b/lib/adapters/parsers/task/readme.md new file mode 100644 index 00000000..c04cf531 --- /dev/null +++ b/lib/adapters/parsers/task/readme.md @@ -0,0 +1,6 @@ +# Tasks + +- [ ] ## #DOING Use task line parsers for vs code extension and obsidian plugin + diff --git a/lib/config.js b/lib/config.js index 6884629b..40055906 100644 --- a/lib/config.js +++ b/lib/config.js @@ -3,7 +3,19 @@ const _cloneDeep = require('lodash.clonedeep') const _assign = require('lodash.assign') const _get = require('lodash.get') -const { JOURNAL_TYPE, DEFAULT_CONFIG } = require('./constants') +const { + JOURNAL_TYPE, + DEFAULT_CONFIG, + CONFIG_FILE_YML, + CONFIG_DIR +} = require('./constants') +const _path = require('path') +const findUp = require('find-up') +const { loadYAML } = require('./adapters/yaml') +const { + exists, + readFile, +} = require('./adapters/file-gateway') /** * Description @@ -213,5 +225,37 @@ class Config { } } -Config.newDefaultConfig = (config = {}) => new Config({...DEFAULT_CONFIG, lists: [...DEFAULT_CONFIG.lists], ...config}) +Config.newDefaultConfig = (config = {}) => new Config( + { + ...DEFAULT_CONFIG, + lists: [ + ...DEFAULT_CONFIG.lists + ], + ...config + } +) + +Config.findImdonePath = async (cwd) => { + const configDir = await findUp(CONFIG_DIR, { cwd, type: 'directory' }) + return _path.dirname(configDir) +} + +Config.getYamlConfig = async (filePath) => { + if (!(await exists(filePath))) return + const configData = await readFile(filePath, 'utf-8') + let configLike = {} + try { + configLike = loadYAML(configData.toString()) + } catch (e) { + /* noop */ + } + return configLike +} + +Config.load = async (imdonePath) => { + const configPath = _path.join(imdonePath, CONFIG_FILE_YML) + const configLike = await Config.getYamlConfig(configPath) + return new Config(configLike) +} + module.exports = Config diff --git a/lib/file.js b/lib/file.js index f6eab09b..ea96e0ef 100644 --- a/lib/file.js +++ b/lib/file.js @@ -296,6 +296,11 @@ File.prototype.transformTasks = function (config, modify) { .forEach(task => this.transformTask({config, modify, task})) } +// TODO Blank lines should be allowed in code tasks +// #imdone-1.47.0 +// File.prototype.extractCodeStyleTasks = function (config, pos, content) { var self = this var codeStyleRegex = new RegExp(CODE_STYLE_PATTERN, 'gm') diff --git a/lib/mixins/repo-fs-store.js b/lib/mixins/repo-fs-store.js index 16a4b2cf..37a2f3e1 100644 --- a/lib/mixins/repo-fs-store.js +++ b/lib/mixins/repo-fs-store.js @@ -255,7 +255,7 @@ function mixin(repo, fs = require('fs')) { cb = tools.cb(cb) repo.loadIgnore() // new - let configData = this.getYamlConfig() || this.getJsonConfig() || {} + let configData = this.getYamlConfig() || {} repo.updateConfig(configData, cb) } @@ -263,21 +263,6 @@ function mixin(repo, fs = require('fs')) { return repo.getFullPath(CONFIG_FILE) } - repo.getJsonConfig = function () { - const filePath = repo.getFullPath(CONFIG_FILE) - if (!fs.existsSync(filePath)) return - const configData = fs.readFileSync(filePath) - let configLike = {} - try { - configLike = JSON.parse(configData.toString()) - if (configLike.exclude) delete configLike.exclude - if (configLike.watcher) delete configLike.watcher - } catch (e) { - /* noop */ - } - return configLike - } - repo.getYamlConfig = function () { const filePath = repo.getFullPath(CONFIG_FILE_YML) if (!fs.existsSync(filePath)) return diff --git a/lib/plugins/archive-plugin.js b/lib/plugins/archive-plugin.js index bcdffe63..24d72bdd 100644 --- a/lib/plugins/archive-plugin.js +++ b/lib/plugins/archive-plugin.js @@ -52,7 +52,11 @@ module.exports = class ArchivePlugin extends Plugin { ], task.content ) - // TODO: This should use the CardContentParser to get the raw task + // TODO This should use the CardContentParser to get the raw task + // const taskContent = `${task.beforeText}${config.tokenPrefix}${task.list} ${content}\n\n\n` this.fileGateway.preparePathForWriting(newPath) diff --git a/lib/plugins/plugin-manager.js b/lib/plugins/plugin-manager.js index 2815c58b..64216624 100644 --- a/lib/plugins/plugin-manager.js +++ b/lib/plugins/plugin-manager.js @@ -95,48 +95,47 @@ module.exports = class PluginManager extends Emitter { const installPath = _path.join(this.pluginPath, name) await downloadRepo(version, installPath) console.log(`Done installing ${name}`) - this.loadPlugin(installPath) + await this.loadPlugin(installPath) this.emit('plugin-installed', name) } async loadPlugins() { - return new Promise((resolve, reject) => { - this.defaultPlugins.forEach((pluginPath) => this.loadPlugin(pluginPath)) - - this.exists(this.pluginPath).then((path) => { - if (!path) return resolve() - fs.readdir(this.pluginPath, { withFileTypes: true }, (err, paths) => { - if (err) return reject(err) - paths - .filter( - (entry) => - entry.name !== 'node_modules' && - (entry.isDirectory() || entry.isSymbolicLink()) - ) - .map((entry) => _path.join(this.pluginPath, entry.name)) - .forEach((path) => { - this.loadPlugin(path) - }) - resolve() - }) - }) - }) - } + for (const pluginPath of this.defaultPlugins) { + await this.loadPlugin(pluginPath) + } - loadPlugin(path) { + const path = await this.exists(this.pluginPath) + if (!path) return + const paths = await fs.promises.readdir(this.pluginPath, { withFileTypes: true }) + const pluginPaths = paths + .filter( + (entry) => + entry.name !== 'node_modules' && + (entry.isDirectory() || entry.isSymbolicLink()) + ) + .map((entry) => _path.join(this.pluginPath, entry.name)) + + for (const path of pluginPaths) { + await this.loadPlugin(path) + } + + } + + async loadPlugin(path) { console.log('Loading plugin: ', path) try { // eslint-disable-next-line delete require.cache[require.resolve(path)] // eslint-disable-next-line const pluginClass = require(path) - this.createPlugin(pluginClass, path) + const pluginInstance = await this.createPlugin(pluginClass, path) + if (pluginInstance.init) await pluginInstance.init() } catch (e) { console.error(`Error loading plugin at: ${path}`, e) } } - createPlugin(pluginClass, path) { + async createPlugin(pluginClass, path) { if (!this.isPlugin(pluginClass)) throw new Error(`${pluginClass.name} is not a plugin`) const name = pluginClass.name.toString() @@ -164,6 +163,8 @@ module.exports = class PluginManager extends Emitter { pluginClass, info, } + + return pluginInstance } destroyPlugins() { @@ -268,6 +269,16 @@ module.exports = class PluginManager extends Emitter { }) } + async onTaskFound(task) { + await this.eachPluginAsync(async ({ pluginInstance }) => { + try { + if (pluginInstance.onTaskFound) await pluginInstance.onTaskFound(task) + } catch (e) { + this.pluginError('onTaskFound', pluginInstance, e) + } + }) + } + async onBeforeAddTask({path, list, content, tags, contexts, meta, useCardTemplate}) { await this.eachPluginAsync(async ({ pluginInstance }) => { try { diff --git a/lib/project.js b/lib/project.js index 8c230322..7c6062ed 100644 --- a/lib/project.js +++ b/lib/project.js @@ -62,6 +62,8 @@ module.exports = class WorkerProject extends Project { this.repo.on(event, (data) => onChange(this, event, data)) }) + this.repo.on('task.found', (task) => this.pluginManager.onTaskFound(task)) + const promise = new Promise((resolve, reject) => { this.repo.init((err, files) => { if (err) { diff --git a/lib/usecases/get-tasks-in-file.js b/lib/usecases/get-tasks-in-file.js new file mode 100644 index 00000000..8e1bdfc8 --- /dev/null +++ b/lib/usecases/get-tasks-in-file.js @@ -0,0 +1,27 @@ +const languages = require('../languages') +const Config = require('../config') +const File = require('../file') +const pluginManager = { + onTaskUpdate: () => {}, + getCardProperties: () => { return {} }, + getCardActions: () => [], +} + +// DOING Use task line parsers for vs code extension and obsidian plugin +// +export async function getTasks({filePath, content}) { + const projectPath = await Config.findImdonePath(filePath) + const config = await Config.load(projectPath) + const project = { path: projectPath, config, pluginManager } + // var file = new File({ + // repoId: projectPath, + // filePath, + // content, + // languages, + // project, + // }) + + // return file.extractTasks(config).getTasks() +} \ No newline at end of file diff --git a/notes/2020-11/2020-11-23.md b/notes/2020-11/2020-11-23.md index f283aa1c..fd88d9c7 100644 --- a/notes/2020-11/2020-11-23.md +++ b/notes/2020-11/2020-11-23.md @@ -16,11 +16,3 @@ links: title: Tweet this card href: https://twitter.com/intent/tweet?text=${encodedText}%0ATweeted%20with%20@imdoneio --- - -# [Fix filter by meta.created](#DONE:5) -```javascript -meta.created = "2020-09-29T20:10:26.659Z" -``` - - - diff --git a/notes/2021-03/2021-03-05.md b/notes/2021-03/2021-03-05.md index 96c13ec5..5edb20ad 100644 --- a/notes/2021-03/2021-03-05.md +++ b/notes/2021-03/2021-03-05.md @@ -16,14 +16,3 @@ links: --- - -# [Fix delete task with ``](#DONE:2.5) - - - - - -# [Fix adding task with first line blank](#DONE:0) - - - diff --git a/notes/2022-04/2022-04-09.md b/notes/2022-04/2022-04-09.md index 4546a372..e518515b 100644 --- a/notes/2022-04/2022-04-09.md +++ b/notes/2022-04/2022-04-09.md @@ -1,12 +1,4 @@ # [Release 2.0](#BACKLOG:-790) -# [Allow Card and Board actions to return a value](#DONE:-10) - -# [Release 1.28.8](#DONE:-20) - +created:2022-04-09T14:58:00.759Z expand:1 --> \ No newline at end of file diff --git a/backlog/stories/Add-a-command-to-show-defaults/README.md b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/Add-`imdone-task`-to-show-defaults.md similarity index 59% rename from backlog/stories/Add-a-command-to-show-defaults/README.md rename to notes/archive/backlog/stories/Add-a-command-to-show-defaults/Add-`imdone-task`-to-show-defaults.md index 079bcdcb..e85cf1c5 100644 --- a/backlog/stories/Add-a-command-to-show-defaults/README.md +++ b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/Add-`imdone-task`-to-show-defaults.md @@ -2,4 +2,10 @@ + + diff --git a/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-a-CLI-command-to-show-current-task.md b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-a-CLI-command-to-show-current-task.md similarity index 51% rename from backlog/stories/Add-a-command-to-show-defaults/tasks/Add-a-CLI-command-to-show-current-task.md rename to notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-a-CLI-command-to-show-current-task.md index 46d46a46..440c7d72 100644 --- a/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-a-CLI-command-to-show-current-task.md +++ b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-a-CLI-command-to-show-current-task.md @@ -5,4 +5,11 @@ group:"Ungrouped Tasks" story-id:Add-a-command-to-show-defaults task-id:GNq6s order:0 -branch:story/Add-a-command-to-show-defaults/task/Add-a-CLI-command-to-show-current-task completed:2023-10-03T02:34:28.020Z --> \ No newline at end of file +branch:story/Add-a-command-to-show-defaults/task/Add-a-CLI-command-to-show-current-task completed:2023-10-03T02:34:28.020Z +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/Add-a-command-to-show-defaults/tasks/Add-a-CLI-command-to-show-current-task.md +originalLine:1 +--> + + diff --git a/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-a-completed-date-when-completing-a-task-with-`imdone-done`.md b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-a-completed-date-when-completing-a-task-with-`imdone-done`.md new file mode 100644 index 00000000..d9ee44e6 --- /dev/null +++ b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-a-completed-date-when-completing-a-task-with-`imdone-done`.md @@ -0,0 +1,14 @@ +## #DONE Add a completed date when completing a task with `imdone done` + + + diff --git a/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-board-actions-to-open-story-projects-on-the-backlog-project.md b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-card-actions-to-open-story-projects-on-the-backlog-project.md similarity index 53% rename from backlog/stories/Add-a-command-to-show-defaults/tasks/Add-board-actions-to-open-story-projects-on-the-backlog-project.md rename to notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-card-actions-to-open-story-projects-on-the-backlog-project.md index a6a24461..98324891 100644 --- a/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-board-actions-to-open-story-projects-on-the-backlog-project.md +++ b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-card-actions-to-open-story-projects-on-the-backlog-project.md @@ -1,4 +1,11 @@ ## #DONE Add card actions to open story projects on the backlog project - [x] add `.imdoneignore` that ignores `stories/**/tasks` - + + + diff --git a/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-story-id-to-new-stories-in-UI.md b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-story-id-to-new-stories-in-UI.md new file mode 100644 index 00000000..af019bfe --- /dev/null +++ b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Add-story-id-to-new-stories-in-UI.md @@ -0,0 +1,14 @@ +## #DONE Add story-id to new stories in UI + + + diff --git a/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Fix-command-line-prompts.md b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Fix-command-line-prompts.md new file mode 100644 index 00000000..1ff5ac49 --- /dev/null +++ b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Fix-command-line-prompts.md @@ -0,0 +1,18 @@ +## #DONE Fix command line prompts + +Also changed defaultProject path to a function so it works in imdone ui + + + + diff --git a/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Make-TODO,-DOING,-DONE-visible-by-default-in-backlog-project.md b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Make-TODO,-DOING,-DONE-visible-by-default-in-backlog-project.md new file mode 100644 index 00000000..b017e407 --- /dev/null +++ b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Make-TODO,-DOING,-DONE-visible-by-default-in-backlog-project.md @@ -0,0 +1,14 @@ +## #DONE Make TODO, DOING, DONE visible by default in backlog project + + + diff --git a/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Prompt-for-backlog-project-name-on-init.md b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Prompt-for-backlog-project-name-on-init.md new file mode 100644 index 00000000..1bb8be8e --- /dev/null +++ b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Prompt-for-backlog-project-name-on-init.md @@ -0,0 +1,15 @@ +## #DONE Prompt for backlog project name on init +- Use ` backlog` as default + + + diff --git a/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Set-default-filter-for-backlog-and-story-projects.md b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Set-default-filter-for-backlog-and-story-projects.md new file mode 100644 index 00000000..24a9692f --- /dev/null +++ b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Set-default-filter-for-backlog-and-story-projects.md @@ -0,0 +1,16 @@ +## #DONE Set default filter for backlog and story projects +- backlog: `tags = story` +- story: `tags = task` + + + diff --git a/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Story-project-name-should-be-`story-id-tasks`.md b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Story-project-name-should-be-`story-id-tasks`.md new file mode 100644 index 00000000..e57828ed --- /dev/null +++ b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Story-project-name-should-be-`story-id-tasks`.md @@ -0,0 +1,14 @@ +## #DONE Story project name should be ` tasks` + + + diff --git a/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Update-StoryProject-task-template-to-include-task-tag,-story-id-meta-and-group-meta.md b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Update-StoryProject-task-template-to-include-task-tag,-story-id-meta-and-group-meta.md new file mode 100644 index 00000000..10a02b41 --- /dev/null +++ b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Update-StoryProject-task-template-to-include-task-tag,-story-id-meta-and-group-meta.md @@ -0,0 +1,10 @@ +## #DONE Update StoryProject task template to include task tag, story-id meta and group meta + + + + diff --git a/backlog/stories/Add-a-command-to-show-defaults/tasks/Use-a-parent-projects-actions-and-properties.md b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Use-a-parent-projects-actions-and-properties.md similarity index 51% rename from backlog/stories/Add-a-command-to-show-defaults/tasks/Use-a-parent-projects-actions-and-properties.md rename to notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Use-a-parent-projects-actions-and-properties.md index ae520c1d..3ba37f51 100644 --- a/backlog/stories/Add-a-command-to-show-defaults/tasks/Use-a-parent-projects-actions-and-properties.md +++ b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Use-a-parent-projects-actions-and-properties.md @@ -1,4 +1,11 @@ ## #DONE Use a parent projects actions and properties - Or move functionality to a plugin - + + + diff --git a/backlog/stories/Add-a-command-to-show-defaults/tasks/Use-task-in-DOING-as-current-task-and-to-find-current-story.md b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Use-task-in-DOING-as-current-task-and-to-find-current-story.md similarity index 64% rename from backlog/stories/Add-a-command-to-show-defaults/tasks/Use-task-in-DOING-as-current-task-and-to-find-current-story.md rename to notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Use-task-in-DOING-as-current-task-and-to-find-current-story.md index 0ca5a3cb..6e870643 100644 --- a/backlog/stories/Add-a-command-to-show-defaults/tasks/Use-task-in-DOING-as-current-task-and-to-find-current-story.md +++ b/notes/archive/backlog/stories/Add-a-command-to-show-defaults/tasks/Use-task-in-DOING-as-current-task-and-to-find-current-story.md @@ -7,4 +7,11 @@ group:"Ungrouped Tasks" story-id:Add-a-command-to-show-defaults task-id:pPwZh order:0 - branch:story/Add-a-command-to-show-defaults/task/Use-task-in-DOING-as-current-task-and-to-find-current-story completed:2023-10-03T02:02:44.395Z --> \ No newline at end of file + branch:story/Add-a-command-to-show-defaults/task/Use-task-in-DOING-as-current-task-and-to-find-current-story completed:2023-10-03T02:02:44.395Z +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/Add-a-command-to-show-defaults/tasks/Use-task-in-DOING-as-current-task-and-to-find-current-story.md +originalLine:1 +--> + + diff --git a/notes/archive/backlog/stories/Add-a-task/Add-a-task-to-story.md b/notes/archive/backlog/stories/Add-a-task/Add-a-task-to-story.md new file mode 100644 index 00000000..d826370b --- /dev/null +++ b/notes/archive/backlog/stories/Add-a-task/Add-a-task-to-story.md @@ -0,0 +1,10 @@ +## #DONE Add a task to story + + + + diff --git a/notes/archive/backlog/stories/Add-a-task/tasks/Allow-user-to-select-group.md b/notes/archive/backlog/stories/Add-a-task/tasks/Allow-user-to-select-group.md new file mode 100644 index 00000000..6b76f6ce --- /dev/null +++ b/notes/archive/backlog/stories/Add-a-task/tasks/Allow-user-to-select-group.md @@ -0,0 +1,10 @@ +## #DONE Allow user to select group + + + + diff --git a/backlog/stories/Board-action-to-show-backlog-from-story-project/README.md b/notes/archive/backlog/stories/Board-action-to-show-backlog-from-story-project/Board-action-to-show-backlog-from-story-project.md similarity index 57% rename from backlog/stories/Board-action-to-show-backlog-from-story-project/README.md rename to notes/archive/backlog/stories/Board-action-to-show-backlog-from-story-project/Board-action-to-show-backlog-from-story-project.md index 97629bf2..e818e270 100644 --- a/backlog/stories/Board-action-to-show-backlog-from-story-project/README.md +++ b/notes/archive/backlog/stories/Board-action-to-show-backlog-from-story-project/Board-action-to-show-backlog-from-story-project.md @@ -5,4 +5,10 @@ created:2023-10-05T02:53:07.540Z task-id:72HJF story-id:Board-action-to-show-backlog-from-story-project order:-220 completed:2023-10-05T12:55:08.771Z ---> \ No newline at end of file +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/Board-action-to-show-backlog-from-story-project/README.md +originalLine:1 +--> + + diff --git a/backlog/stories/Board-action-to-show-backlog-from-story-project/tasks/Add-Show-story-in-backlog-board-action-in-story-project.md b/notes/archive/backlog/stories/Board-action-to-show-backlog-from-story-project/tasks/Add-Show-story-in-backlog-board-action-in-story-project.md similarity index 71% rename from backlog/stories/Board-action-to-show-backlog-from-story-project/tasks/Add-Show-story-in-backlog-board-action-in-story-project.md rename to notes/archive/backlog/stories/Board-action-to-show-backlog-from-story-project/tasks/Add-Show-story-in-backlog-board-action-in-story-project.md index 40336f1f..5ddd6539 100644 --- a/backlog/stories/Board-action-to-show-backlog-from-story-project/tasks/Add-Show-story-in-backlog-board-action-in-story-project.md +++ b/notes/archive/backlog/stories/Board-action-to-show-backlog-from-story-project/tasks/Add-Show-story-in-backlog-board-action-in-story-project.md @@ -11,4 +11,10 @@ task-id:vH4Be order:0 branch:story/Board-action-to-show-backlog-from-story-project/task/Add-Show-story-in-backlog-board-action-in-story-project completed:2023-10-05T12:54:51.850Z ---> \ No newline at end of file +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/Board-action-to-show-backlog-from-story-project/tasks/Add-Show-story-in-backlog-board-action-in-story-project.md +originalLine:1 +--> + + diff --git a/notes/archive/backlog/stories/Complete-a-task/Complete-a-task-by-calling-`imdone-done`.md b/notes/archive/backlog/stories/Complete-a-task/Complete-a-task-by-calling-`imdone-done`.md new file mode 100644 index 00000000..6a83814f --- /dev/null +++ b/notes/archive/backlog/stories/Complete-a-task/Complete-a-task-by-calling-`imdone-done`.md @@ -0,0 +1,14 @@ +## #DONE Complete a task by calling `imdone done` + +```bash +npx imdone done +``` + + + + diff --git a/backlog/stories/Complete-a-task/tasks/Moves-the-task-to-done-list.md b/notes/archive/backlog/stories/Complete-a-task/tasks/Moves-the-task-to-done-list.md similarity index 51% rename from backlog/stories/Complete-a-task/tasks/Moves-the-task-to-done-list.md rename to notes/archive/backlog/stories/Complete-a-task/tasks/Moves-the-task-to-done-list.md index f0eb25cf..f25abb58 100644 --- a/backlog/stories/Complete-a-task/tasks/Moves-the-task-to-done-list.md +++ b/notes/archive/backlog/stories/Complete-a-task/tasks/Moves-the-task-to-done-list.md @@ -1,3 +1,10 @@ ## #DONE Moves the task to done list - + + + diff --git a/backlog/stories/Complete-a-task/tasks/Reminds-you-to-commit-and-push.md b/notes/archive/backlog/stories/Complete-a-task/tasks/Reminds-you-to-commit-and-push.md similarity index 51% rename from backlog/stories/Complete-a-task/tasks/Reminds-you-to-commit-and-push.md rename to notes/archive/backlog/stories/Complete-a-task/tasks/Reminds-you-to-commit-and-push.md index 69ef81f6..675dae4d 100644 --- a/backlog/stories/Complete-a-task/tasks/Reminds-you-to-commit-and-push.md +++ b/notes/archive/backlog/stories/Complete-a-task/tasks/Reminds-you-to-commit-and-push.md @@ -1,3 +1,10 @@ ## #DONE Reminds you to commit and push - + + + diff --git a/backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/README.md b/notes/archive/backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks.md similarity index 60% rename from backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/README.md rename to notes/archive/backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks.md index c244c200..92095113 100644 --- a/backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/README.md +++ b/notes/archive/backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks.md @@ -5,4 +5,10 @@ created:2023-10-07T19:17:57.659Z task-id:ibMWW story-id:If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks order:-250 completed:2023-10-07T19:38:07.030Z ---> \ No newline at end of file +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/README.md +originalLine:1 +--> + + diff --git a/backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/tasks/Test-by-swithing-to-master-and-start-a-task.md b/notes/archive/backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/tasks/Test-by-swithing-to-master-and-start-a-task.md similarity index 64% rename from backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/tasks/Test-by-swithing-to-master-and-start-a-task.md rename to notes/archive/backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/tasks/Test-by-swithing-to-master-and-start-a-task.md index 948b54db..b59205c3 100644 --- a/backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/tasks/Test-by-swithing-to-master-and-start-a-task.md +++ b/notes/archive/backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/tasks/Test-by-swithing-to-master-and-start-a-task.md @@ -8,4 +8,10 @@ task-id:otITZ order:0 branch:story/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/task/Test-by-swithing-to-master-and-start-a-task completed:2023-10-07T19:37:48.813Z ---> \ No newline at end of file +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/If-a-branch-already-exists-for-the-story-I-want-to-start,-check-it-out-before-making-any-changes-to-the-tasks/tasks/Test-by-swithing-to-master-and-start-a-task.md +originalLine:1 +--> + + diff --git a/notes/archive/backlog/stories/Import-tasks/After-collaborative-design,-import-a-story-and-story-tasks-from-markdown.md b/notes/archive/backlog/stories/Import-tasks/After-collaborative-design,-import-a-story-and-story-tasks-from-markdown.md new file mode 100644 index 00000000..1e4583f7 --- /dev/null +++ b/notes/archive/backlog/stories/Import-tasks/After-collaborative-design,-import-a-story-and-story-tasks-from-markdown.md @@ -0,0 +1,10 @@ +## #DONE After collaborative design, import a story and story tasks from markdown + + + + diff --git a/notes/archive/backlog/stories/Import-tasks/tasks/Import-adds-story-cards-to-current.md b/notes/archive/backlog/stories/Import-tasks/tasks/Import-adds-story-cards-to-current.md new file mode 100644 index 00000000..26a3c807 --- /dev/null +++ b/notes/archive/backlog/stories/Import-tasks/tasks/Import-adds-story-cards-to-current.md @@ -0,0 +1,10 @@ +## #DONE Import adds story cards to current + + + + diff --git a/backlog/stories/Import-tasks/tasks/Initialize-imdone-in-the-backlog-folder.md b/notes/archive/backlog/stories/Import-tasks/tasks/Initialize-imdone-in-the-backlog-folder.md similarity index 52% rename from backlog/stories/Import-tasks/tasks/Initialize-imdone-in-the-backlog-folder.md rename to notes/archive/backlog/stories/Import-tasks/tasks/Initialize-imdone-in-the-backlog-folder.md index 7b761f4c..208d8f58 100644 --- a/backlog/stories/Import-tasks/tasks/Initialize-imdone-in-the-backlog-folder.md +++ b/notes/archive/backlog/stories/Import-tasks/tasks/Initialize-imdone-in-the-backlog-folder.md @@ -1,3 +1,10 @@ ## #DONE Initialize imdone in the backlog folder - + + + diff --git a/backlog/stories/Import-tasks/tasks/Make-sure-checked-items-are-put-in-DONE-list.md b/notes/archive/backlog/stories/Import-tasks/tasks/Make-sure-checked-items-are-put-in-DONE-list.md similarity index 51% rename from backlog/stories/Import-tasks/tasks/Make-sure-checked-items-are-put-in-DONE-list.md rename to notes/archive/backlog/stories/Import-tasks/tasks/Make-sure-checked-items-are-put-in-DONE-list.md index fa7d001d..531e7596 100644 --- a/backlog/stories/Import-tasks/tasks/Make-sure-checked-items-are-put-in-DONE-list.md +++ b/notes/archive/backlog/stories/Import-tasks/tasks/Make-sure-checked-items-are-put-in-DONE-list.md @@ -1,3 +1,10 @@ ## #DONE Make sure checked items are put in DONE list - + + + diff --git a/backlog/stories/Import-tasks/tasks/On-import-always-remove-the-contents-of-the-backlogstory.md b/notes/archive/backlog/stories/Import-tasks/tasks/On-import-always-remove-the-contents-of-the-`backlogstorystory-id`.md similarity index 53% rename from backlog/stories/Import-tasks/tasks/On-import-always-remove-the-contents-of-the-backlogstory.md rename to notes/archive/backlog/stories/Import-tasks/tasks/On-import-always-remove-the-contents-of-the-`backlogstorystory-id`.md index cf9a6748..3ee3ab75 100644 --- a/backlog/stories/Import-tasks/tasks/On-import-always-remove-the-contents-of-the-backlogstory.md +++ b/notes/archive/backlog/stories/Import-tasks/tasks/On-import-always-remove-the-contents-of-the-`backlogstorystory-id`.md @@ -1,3 +1,10 @@ ## #DONE On import always remove the contents of the `backlog/story/` - + + + diff --git a/backlog/stories/Import-tasks/tasks/Refactor-to-domain.md b/notes/archive/backlog/stories/Import-tasks/tasks/Refactor-to-domain.md similarity index 52% rename from backlog/stories/Import-tasks/tasks/Refactor-to-domain.md rename to notes/archive/backlog/stories/Import-tasks/tasks/Refactor-to-domain.md index dd85c973..24b85954 100644 --- a/backlog/stories/Import-tasks/tasks/Refactor-to-domain.md +++ b/notes/archive/backlog/stories/Import-tasks/tasks/Refactor-to-domain.md @@ -1,3 +1,10 @@ ## #DONE Refactor to domain - + + + diff --git a/backlog/stories/Import-tasks/tasks/Save-story-id-project-path-so-it's-available-for-starting-a-task.md b/notes/archive/backlog/stories/Import-tasks/tasks/Save-story-id-project-path-so-it's-available-for-starting-a-task.md similarity index 51% rename from backlog/stories/Import-tasks/tasks/Save-story-id-project-path-so-it's-available-for-starting-a-task.md rename to notes/archive/backlog/stories/Import-tasks/tasks/Save-story-id-project-path-so-it's-available-for-starting-a-task.md index 3e78b904..accac033 100644 --- a/backlog/stories/Import-tasks/tasks/Save-story-id-project-path-so-it's-available-for-starting-a-task.md +++ b/notes/archive/backlog/stories/Import-tasks/tasks/Save-story-id-project-path-so-it's-available-for-starting-a-task.md @@ -1,3 +1,10 @@ ## #DONE Save story-id project path so it's available for starting a task - + + + diff --git a/backlog/stories/Import-tasks/tasks/Shold-handle-a-file-with-the-following-format.md b/notes/archive/backlog/stories/Import-tasks/tasks/Shold-handle-a-file-with-the-following-format.md similarity index 51% rename from backlog/stories/Import-tasks/tasks/Shold-handle-a-file-with-the-following-format.md rename to notes/archive/backlog/stories/Import-tasks/tasks/Shold-handle-a-file-with-the-following-format.md index b4cfc632..7cfaa423 100644 --- a/backlog/stories/Import-tasks/tasks/Shold-handle-a-file-with-the-following-format.md +++ b/notes/archive/backlog/stories/Import-tasks/tasks/Shold-handle-a-file-with-the-following-format.md @@ -1,3 +1,10 @@ ## #DONE Shold handle a file with the following format - + + + diff --git a/backlog/stories/Import-tasks/tasks/.backlog-is-the-default-project-folder.md b/notes/archive/backlog/stories/Import-tasks/tasks/`.backlog`-is-the-default-project-folder.md similarity index 52% rename from backlog/stories/Import-tasks/tasks/.backlog-is-the-default-project-folder.md rename to notes/archive/backlog/stories/Import-tasks/tasks/`.backlog`-is-the-default-project-folder.md index 3c852c3c..b80d07cd 100644 --- a/backlog/stories/Import-tasks/tasks/.backlog-is-the-default-project-folder.md +++ b/notes/archive/backlog/stories/Import-tasks/tasks/`.backlog`-is-the-default-project-folder.md @@ -1,3 +1,10 @@ ## #DONE `./backlog` is the default project folder - + + + diff --git a/backlog/stories/Import-tasks/tasks/``-should-be-the-markdown-title.md b/notes/archive/backlog/stories/Import-tasks/tasks/`story-id`-should-be-the-markdown-title.md similarity index 53% rename from backlog/stories/Import-tasks/tasks/``-should-be-the-markdown-title.md rename to notes/archive/backlog/stories/Import-tasks/tasks/`story-id`-should-be-the-markdown-title.md index 53a74f24..67143c03 100644 --- a/backlog/stories/Import-tasks/tasks/``-should-be-the-markdown-title.md +++ b/notes/archive/backlog/stories/Import-tasks/tasks/`story-id`-should-be-the-markdown-title.md @@ -1,3 +1,10 @@ ## #DONE `` should be the markdown title - + + + diff --git a/backlog/stories/Import-tasks/tasks/use-markdown-it.parse-to-create-AST.md b/notes/archive/backlog/stories/Import-tasks/tasks/use-`markdown-it.parse`-to-create-AST.md similarity index 52% rename from backlog/stories/Import-tasks/tasks/use-markdown-it.parse-to-create-AST.md rename to notes/archive/backlog/stories/Import-tasks/tasks/use-`markdown-it.parse`-to-create-AST.md index 52232559..14a38892 100644 --- a/backlog/stories/Import-tasks/tasks/use-markdown-it.parse-to-create-AST.md +++ b/notes/archive/backlog/stories/Import-tasks/tasks/use-`markdown-it.parse`-to-create-AST.md @@ -1,3 +1,10 @@ ## #DONE use `markdown-it.parse` to create AST - + + + diff --git a/backlog/stories/List-stories/README.md b/notes/archive/backlog/stories/List-stories/I-would-like-to-select-a-story-to-start,-so-in-order-to-do-so,-I-would-like-to-select-a-story,-so-I-can-start-a-task..md similarity index 53% rename from backlog/stories/List-stories/README.md rename to notes/archive/backlog/stories/List-stories/I-would-like-to-select-a-story-to-start,-so-in-order-to-do-so,-I-would-like-to-select-a-story,-so-I-can-start-a-task..md index 2d0f4132..bfbf4145 100644 --- a/backlog/stories/List-stories/README.md +++ b/notes/archive/backlog/stories/List-stories/I-would-like-to-select-a-story-to-start,-so-in-order-to-do-so,-I-would-like-to-select-a-story,-so-I-can-start-a-task..md @@ -1,3 +1,10 @@ ## #DONE I would like to select a story to start, so in order to do so, I would like to select a story, so I can start a task. - + + + diff --git a/backlog/stories/List-tasks-in-a-story/README.md b/notes/archive/backlog/stories/List-tasks-in-a-story/List-all-the-tasks-in-a-story.md similarity index 57% rename from backlog/stories/List-tasks-in-a-story/README.md rename to notes/archive/backlog/stories/List-tasks-in-a-story/List-all-the-tasks-in-a-story.md index efa640e2..74515286 100644 --- a/backlog/stories/List-tasks-in-a-story/README.md +++ b/notes/archive/backlog/stories/List-tasks-in-a-story/List-all-the-tasks-in-a-story.md @@ -1,3 +1,10 @@ ## #DONE List all the tasks in a story - + + + diff --git a/backlog/stories/List-tasks-in-a-story/tasks/Can-also-pass-in-the-story-id-with-the-`-s-story-id-option.md b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Can-also-pass-in-the-story-id-with-the-`-s-story-id`-option.md similarity index 50% rename from backlog/stories/List-tasks-in-a-story/tasks/Can-also-pass-in-the-story-id-with-the-`-s-story-id-option.md rename to notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Can-also-pass-in-the-story-id-with-the-`-s-story-id`-option.md index 1a2e24ae..a45bc111 100644 --- a/backlog/stories/List-tasks-in-a-story/tasks/Can-also-pass-in-the-story-id-with-the-`-s-story-id-option.md +++ b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Can-also-pass-in-the-story-id-with-the-`-s-story-id`-option.md @@ -1,3 +1,10 @@ ## #DONE Can also pass in the story id with the `-s ` option - + + + diff --git a/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Can-also-use-a-filter.md b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Can-also-use-a-filter.md new file mode 100644 index 00000000..84266b16 --- /dev/null +++ b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Can-also-use-a-filter.md @@ -0,0 +1,10 @@ +## #DONE Can also use a filter + + + + diff --git a/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Can-output-as-JSON.md b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Can-output-as-JSON.md new file mode 100644 index 00000000..58587947 --- /dev/null +++ b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Can-output-as-JSON.md @@ -0,0 +1,10 @@ +## #DONE Can output as JSON + + + + diff --git a/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/If-no-story-is-given-list-the-stories-and-use-the-last-story-as-the-default-selection.md b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/If-no-story-is-given-list-the-stories-and-use-the-last-story-as-the-default-selection.md new file mode 100644 index 00000000..7dcb5364 --- /dev/null +++ b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/If-no-story-is-given-list-the-stories-and-use-the-last-story-as-the-default-selection.md @@ -0,0 +1,10 @@ +## #DONE If no story is given list the stories and use the last story as the default selection + + + + diff --git a/backlog/stories/List-tasks-in-a-story/tasks/Adds-all-content-before-`##-Tasks`-to-story.md b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Import-adds-all-content-before-`##-Tasks`-to-story.md similarity index 50% rename from backlog/stories/List-tasks-in-a-story/tasks/Adds-all-content-before-`##-Tasks`-to-story.md rename to notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Import-adds-all-content-before-`##-Tasks`-to-story.md index 1f5dad76..b6e72174 100644 --- a/backlog/stories/List-tasks-in-a-story/tasks/Adds-all-content-before-`##-Tasks`-to-story.md +++ b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Import-adds-all-content-before-`##-Tasks`-to-story.md @@ -1,3 +1,10 @@ ## #DONE Import adds all content before `## Tasks` to story - + + + diff --git a/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Produces-output-the-same-as-input.md b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Produces-output-the-same-as-input.md new file mode 100644 index 00000000..ceb65262 --- /dev/null +++ b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/Produces-output-the-same-as-input.md @@ -0,0 +1,10 @@ +## #DONE Produces output the same as input + + + + diff --git a/backlog/stories/List-tasks-in-a-story/tasks/`.backlog`-is-the-default-project-folder.md b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/`.backlog`-is-the-default-project-folder.md similarity index 50% rename from backlog/stories/List-tasks-in-a-story/tasks/`.backlog`-is-the-default-project-folder.md rename to notes/archive/backlog/stories/List-tasks-in-a-story/tasks/`.backlog`-is-the-default-project-folder.md index ac0b0fbf..31d37a90 100644 --- a/backlog/stories/List-tasks-in-a-story/tasks/`.backlog`-is-the-default-project-folder.md +++ b/notes/archive/backlog/stories/List-tasks-in-a-story/tasks/`.backlog`-is-the-default-project-folder.md @@ -1,3 +1,10 @@ ## #DONE `./backlog` is the default project folder - + + + diff --git a/notes/archive/backlog/stories/Plan-a-story/Plan-a-story.md b/notes/archive/backlog/stories/Plan-a-story/Plan-a-story.md new file mode 100644 index 00000000..c2c82dec --- /dev/null +++ b/notes/archive/backlog/stories/Plan-a-story/Plan-a-story.md @@ -0,0 +1,46 @@ +# #DONE Plan a story + +As a developer I would like to plan a story and make it visible by adding tasks to a story markdown in my repo + +## Tasks + +- [x] Set default branch (Ask on init) +- [x] Set working remote (Ask on init) +- [x] Rename `import` to `plan` +- [x] Implement git automation + 1. Fetch from working remote + 2. Checkout default branch + 3. Checkout or create story branch + 4. If it's not a git repo ask to init +- [x] Add the story project +- [x] Move the story task to DOING +- [ ] Commit and push the story branch with force + +## Later Stories + +### Convert a card with tasks to a story and tasks + - [ ] `task.text` is storyId if `story-id` meta is not set + - [ ] First paragraph is story content + - [ ] Process tasks in the same way as command line + +### When we ask for tasks automatically add the DoD, so the user can delete ones that aren't relevant + - [ ] Ask for story id + - [ ] Ask for story description + - [ ] Ask for tasks with inquirer + +### Generate task list in a tasks README: `backlog/stories//tasks/README.md` + - Put a comment at the top of the file that say's it's autogenerated + - Each task should have a relative path link back to task file it came from + + + diff --git a/notes/archive/backlog/stories/Plan-a-story/tasks/Ask-the-user-to-type-delete-filtered-cards-to-delete-filtered-cards.md b/notes/archive/backlog/stories/Plan-a-story/tasks/Ask-the-user-to-type-delete-filtered-cards-to-delete-filtered-cards.md new file mode 100644 index 00000000..f0af3345 --- /dev/null +++ b/notes/archive/backlog/stories/Plan-a-story/tasks/Ask-the-user-to-type-delete-filtered-cards-to-delete-filtered-cards.md @@ -0,0 +1,16 @@ +## #DONE Ask the user to type "delete filtered cards" to delete filtered cards + + + diff --git a/backlog/stories/Plan-a-story/tasks/Fix-multiple-groups-added.md b/notes/archive/backlog/stories/Plan-a-story/tasks/Fix-multiple-groups-added.md similarity index 57% rename from backlog/stories/Plan-a-story/tasks/Fix-multiple-groups-added.md rename to notes/archive/backlog/stories/Plan-a-story/tasks/Fix-multiple-groups-added.md index 748538e3..55c39f86 100644 --- a/backlog/stories/Plan-a-story/tasks/Fix-multiple-groups-added.md +++ b/notes/archive/backlog/stories/Plan-a-story/tasks/Fix-multiple-groups-added.md @@ -7,5 +7,11 @@ story-id:Plan-a-story task-id:HauJZ order:-20 completed:2023-12-21T20:13:20.220Z +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/Plan-a-story/tasks/Fix-multiple-groups-added.md +originalLine:1 --> --> + + diff --git a/notes/archive/backlog/stories/Plan-a-story/tasks/Plan-Story-Fix-issue-with-multiple-groups-added.md b/notes/archive/backlog/stories/Plan-a-story/tasks/Plan-Story-Fix-issue-with-multiple-groups-added.md new file mode 100644 index 00000000..8d42283f --- /dev/null +++ b/notes/archive/backlog/stories/Plan-a-story/tasks/Plan-Story-Fix-issue-with-multiple-groups-added.md @@ -0,0 +1,16 @@ +## #DONE Plan Story: Fix issue with multiple groups added + + + diff --git a/notes/archive/backlog/stories/Start-task/Start-a-task-by-task-id.md b/notes/archive/backlog/stories/Start-task/Start-a-task-by-task-id.md new file mode 100644 index 00000000..3f04c730 --- /dev/null +++ b/notes/archive/backlog/stories/Start-task/Start-a-task-by-task-id.md @@ -0,0 +1,10 @@ +## #DONE Start a task by task-id + + + + diff --git a/backlog/stories/Start-task/tasks/If-the-branch-exists,-check-it-out.md b/notes/archive/backlog/stories/Start-task/tasks/If-the-branch-exists,-check-it-out.md similarity index 52% rename from backlog/stories/Start-task/tasks/If-the-branch-exists,-check-it-out.md rename to notes/archive/backlog/stories/Start-task/tasks/If-the-branch-exists,-check-it-out.md index caa02421..af172697 100644 --- a/backlog/stories/Start-task/tasks/If-the-branch-exists,-check-it-out.md +++ b/notes/archive/backlog/stories/Start-task/tasks/If-the-branch-exists,-check-it-out.md @@ -1,3 +1,10 @@ ## #DONE If the branch exists, check it out - + + + diff --git a/backlog/stories/Start-task/tasks/Move-the-task-to-the-DOING-list.md b/notes/archive/backlog/stories/Start-task/tasks/Move-the-task-to-the-`DOING`-list.md similarity index 52% rename from backlog/stories/Start-task/tasks/Move-the-task-to-the-DOING-list.md rename to notes/archive/backlog/stories/Start-task/tasks/Move-the-task-to-the-`DOING`-list.md index 4e4cd7ba..752d1a64 100644 --- a/backlog/stories/Start-task/tasks/Move-the-task-to-the-DOING-list.md +++ b/notes/archive/backlog/stories/Start-task/tasks/Move-the-task-to-the-`DOING`-list.md @@ -1,3 +1,10 @@ ## #DONE Move the task to the `DOING` list - + + + diff --git a/backlog/stories/Start-task/tasks/Save-the-branch-name-in-session-so-we-can-check-it-out-again.md b/notes/archive/backlog/stories/Start-task/tasks/Save-the-branch-name-in-session-so-we-can-check-it-out-again.md similarity index 52% rename from backlog/stories/Start-task/tasks/Save-the-branch-name-in-session-so-we-can-check-it-out-again.md rename to notes/archive/backlog/stories/Start-task/tasks/Save-the-branch-name-in-session-so-we-can-check-it-out-again.md index 99c47e45..16a50548 100644 --- a/backlog/stories/Start-task/tasks/Save-the-branch-name-in-session-so-we-can-check-it-out-again.md +++ b/notes/archive/backlog/stories/Start-task/tasks/Save-the-branch-name-in-session-so-we-can-check-it-out-again.md @@ -1,3 +1,10 @@ ## #DONE Save the branch name in session so we can check it out again - + + + diff --git a/backlog/stories/Start-task/tasks/Set-the-task-id-in-session-so-we-know-what-to-close.md b/notes/archive/backlog/stories/Start-task/tasks/Set-the-task-id-in-session-so-we-know-what-to-close.md similarity index 52% rename from backlog/stories/Start-task/tasks/Set-the-task-id-in-session-so-we-know-what-to-close.md rename to notes/archive/backlog/stories/Start-task/tasks/Set-the-task-id-in-session-so-we-know-what-to-close.md index f42556bb..f868625b 100644 --- a/backlog/stories/Start-task/tasks/Set-the-task-id-in-session-so-we-know-what-to-close.md +++ b/notes/archive/backlog/stories/Start-task/tasks/Set-the-task-id-in-session-so-we-know-what-to-close.md @@ -1,3 +1,10 @@ ## #DONE Set the task id in session so we know what to close - + + + diff --git a/backlog/stories/Start-task/tasks/This-should-find-the-task-and-create-a-branch-named-storytask.md b/notes/archive/backlog/stories/Start-task/tasks/This-should-find-the-task-and-create-a-branch-named-`storysidtasktask-filname`.md similarity index 55% rename from backlog/stories/Start-task/tasks/This-should-find-the-task-and-create-a-branch-named-storytask.md rename to notes/archive/backlog/stories/Start-task/tasks/This-should-find-the-task-and-create-a-branch-named-`storysidtasktask-filname`.md index ab2b56b2..8453a64f 100644 --- a/backlog/stories/Start-task/tasks/This-should-find-the-task-and-create-a-branch-named-storytask.md +++ b/notes/archive/backlog/stories/Start-task/tasks/This-should-find-the-task-and-create-a-branch-named-`storysidtasktask-filname`.md @@ -1,3 +1,10 @@ ## #DONE This should find the task and create a branch named `story//task/` - + + + diff --git a/backlog/stories/Tests-don't-succeed-on-github-actions-because-of-docker-dependency/README.md b/notes/archive/backlog/stories/Tests-don't-succeed-on-github-actions-because-of-docker-dependency/Tests-don't-succeed-on-github-actions-because-of-docker-dependency.md similarity index 60% rename from backlog/stories/Tests-don't-succeed-on-github-actions-because-of-docker-dependency/README.md rename to notes/archive/backlog/stories/Tests-don't-succeed-on-github-actions-because-of-docker-dependency/Tests-don't-succeed-on-github-actions-because-of-docker-dependency.md index 73ab2a0a..5ecff3b9 100644 --- a/backlog/stories/Tests-don't-succeed-on-github-actions-because-of-docker-dependency/README.md +++ b/notes/archive/backlog/stories/Tests-don't-succeed-on-github-actions-because-of-docker-dependency/Tests-don't-succeed-on-github-actions-because-of-docker-dependency.md @@ -7,4 +7,10 @@ created:2023-12-14T17:34:28.444Z task-id:TUPqF story-id:Tests-don't-succeed-on-github-actions-because-of-docker-dependency order:-260 completed:2023-12-21T20:13:57.019Z ---> \ No newline at end of file +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/Tests-don't-succeed-on-github-actions-because-of-docker-dependency/README.md +originalLine:1 +--> + + diff --git a/backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/README.md b/notes/archive/backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI.md similarity index 59% rename from backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/README.md rename to notes/archive/backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI.md index a310269c..255426f7 100644 --- a/backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/README.md +++ b/notes/archive/backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI.md @@ -5,4 +5,10 @@ created:2023-10-03T14:57:48.497Z task-id:3N2nD story-id:The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI order:-200 completed:2023-10-04T23:16:30.025Z ---> \ No newline at end of file +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/README.md +originalLine:1 +--> + + diff --git a/backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/tasks/Add-onAfterDeleteTask-plugin-method-so-we-can-implement-in-the-plugin.md b/notes/archive/backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/tasks/Add-onAfterDeleteTask-plugin-method-so-we-can-implement-in-the-plugin.md similarity index 63% rename from backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/tasks/Add-onAfterDeleteTask-plugin-method-so-we-can-implement-in-the-plugin.md rename to notes/archive/backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/tasks/Add-onAfterDeleteTask-plugin-method-so-we-can-implement-in-the-plugin.md index b965c213..d64ac0ac 100644 --- a/backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/tasks/Add-onAfterDeleteTask-plugin-method-so-we-can-implement-in-the-plugin.md +++ b/notes/archive/backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/tasks/Add-onAfterDeleteTask-plugin-method-so-we-can-implement-in-the-plugin.md @@ -8,4 +8,10 @@ task-id:0BClz branch:story/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/task/Add-onAfterDeleteTask-plugin-method-so-we-can-implement-in-the-plugin order:0 completed:2023-10-04T23:16:19.063Z ---> \ No newline at end of file +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/The-story-project-should-be-deleted-when-a-story-is-deleted-in-the-UI/tasks/Add-onAfterDeleteTask-plugin-method-so-we-can-implement-in-the-plugin.md +originalLine:1 +--> + + diff --git a/backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/README.md b/notes/archive/backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata.md similarity index 59% rename from backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/README.md rename to notes/archive/backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata.md index 5a20d1cd..66721bd5 100644 --- a/backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/README.md +++ b/notes/archive/backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata.md @@ -5,4 +5,10 @@ created:2023-10-03T02:33:03.211Z task-id:Cwven story-id:When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata order:-210 completed:2023-10-05T03:00:27.226Z ---> \ No newline at end of file +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/README.md +originalLine:1 +--> + + diff --git a/backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/tasks/Delete-group-deta-before-adding-in-addTask.md b/notes/archive/backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/tasks/Delete-group-deta-before-adding-in-addTask.md similarity index 64% rename from backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/tasks/Delete-group-deta-before-adding-in-addTask.md rename to notes/archive/backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/tasks/Delete-group-deta-before-adding-in-addTask.md index ee4f4737..1b4f282b 100644 --- a/backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/tasks/Delete-group-deta-before-adding-in-addTask.md +++ b/notes/archive/backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/tasks/Delete-group-deta-before-adding-in-addTask.md @@ -8,4 +8,10 @@ task-id:c7HHz order:0 branch:story/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/task/Delete-group-deta-before-adding-in-addTask completed:2023-10-05T02:58:58.918Z +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/When-adding-a-task-to-a-group-with-the-cli,-replace-group-metadata/tasks/Delete-group-deta-before-adding-in-addTask.md +originalLine:1 --> + + diff --git a/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/README.md b/notes/archive/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/`imdone-open`-should-open-current-or-selected-task-in-editor.md similarity index 64% rename from backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/README.md rename to notes/archive/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/`imdone-open`-should-open-current-or-selected-task-in-editor.md index 2fd49783..7037ee3d 100644 --- a/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/README.md +++ b/notes/archive/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/`imdone-open`-should-open-current-or-selected-task-in-editor.md @@ -6,4 +6,10 @@ created:2023-10-07T17:28:35.810Z task-id:kytB1 story-id:`imdone-open`-should-open-current-or-selected-task-in-editor order:-240 completed:2023-10-07T19:18:28.040Z ---> \ No newline at end of file +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/README.md +originalLine:1 +--> + + diff --git a/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-board`-should-open-the-board-to-the-current-or-selected-task.md b/notes/archive/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-board`-should-open-the-board-to-the-current-task.md similarity index 63% rename from backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-board`-should-open-the-board-to-the-current-or-selected-task.md rename to notes/archive/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-board`-should-open-the-board-to-the-current-task.md index 55ae1275..3ca6d9df 100644 --- a/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-board`-should-open-the-board-to-the-current-or-selected-task.md +++ b/notes/archive/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-board`-should-open-the-board-to-the-current-task.md @@ -8,4 +8,10 @@ task-id:vcNZj order:0 branch:story/`imdone-open`-should-open-current-or-selected-task-in-editor/task/`imdone-board`-should-open-the-board-to-the-current-or-selected-task completed:2023-10-07T18:52:38.227Z ---> \ No newline at end of file +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-board`-should-open-the-board-to-the-current-or-selected-task.md +originalLine:1 +--> + + diff --git a/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-open`-should-open-the-current-or-selected-task-file.md b/notes/archive/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-open`-should-open-the-current-or-selected-task-file.md similarity index 63% rename from backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-open`-should-open-the-current-or-selected-task-file.md rename to notes/archive/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-open`-should-open-the-current-or-selected-task-file.md index febb8637..880a89d7 100644 --- a/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-open`-should-open-the-current-or-selected-task-file.md +++ b/notes/archive/backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-open`-should-open-the-current-or-selected-task-file.md @@ -8,4 +8,10 @@ task-id:zJ3Ab order:0 branch:story/`imdone-open`-should-open-current-or-selected-task-in-editor/task/`imdone-open`-should-open-the-current-or-selected-task-file completed:2023-10-07T19:18:17.173Z ---> \ No newline at end of file +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/`imdone-open`-should-open-current-or-selected-task-in-editor/tasks/`imdone-open`-should-open-the-current-or-selected-task-file.md +originalLine:1 +--> + + diff --git a/backlog/stories/open-imdone-from-the-cli/README.md b/notes/archive/backlog/stories/open-imdone-from-the-cli/open-imdone-from-the-cli.md similarity index 64% rename from backlog/stories/open-imdone-from-the-cli/README.md rename to notes/archive/backlog/stories/open-imdone-from-the-cli/open-imdone-from-the-cli.md index e571dbde..96324483 100644 --- a/backlog/stories/open-imdone-from-the-cli/README.md +++ b/notes/archive/backlog/stories/open-imdone-from-the-cli/open-imdone-from-the-cli.md @@ -6,4 +6,10 @@ created:2023-10-06T02:15:31.934Z task-id:2Hje7 story-id:open-imdone-from-the-cli order:-230 completed:2023-10-06T03:12:35.215Z ---> \ No newline at end of file +archived:true +archivedAt:2024-10-30T22:38:06-04:00 +originalPath:backlog/stories/open-imdone-from-the-cli/README.md +originalLine:1 +--> + + diff --git a/notes/archive/backlog/stories/open-imdone-from-the-cli/tasks/Add-`isImdoneInstalled`-function-to-controller.md b/notes/archive/backlog/stories/open-imdone-from-the-cli/tasks/Add-`isImdoneInstalled`-function-to-controller.md new file mode 100644 index 00000000..e00dd35d --- /dev/null +++ b/notes/archive/backlog/stories/open-imdone-from-the-cli/tasks/Add-`isImdoneInstalled`-function-to-controller.md @@ -0,0 +1,17 @@ +## #DONE Add `isImdoneInstalled` function to controller +- display imdone url + + + diff --git a/notes/archive/backlog/stories/open-imdone-from-the-cli/tasks/Add-the-`open`-command-to-cli-and-controller.md b/notes/archive/backlog/stories/open-imdone-from-the-cli/tasks/Add-the-`open`-command-to-cli-and-controller.md new file mode 100644 index 00000000..f86beea0 --- /dev/null +++ b/notes/archive/backlog/stories/open-imdone-from-the-cli/tasks/Add-the-`open`-command-to-cli-and-controller.md @@ -0,0 +1,17 @@ +## #DONE Add the `open` command to cli and controller + + + diff --git a/notes/archive/backlog/stories/open-imdone-from-the-cli/tasks/Implement-openImdone-function-in-controller.md b/notes/archive/backlog/stories/open-imdone-from-the-cli/tasks/Implement-openImdone-function-in-controller.md new file mode 100644 index 00000000..1854a3a4 --- /dev/null +++ b/notes/archive/backlog/stories/open-imdone-from-the-cli/tasks/Implement-openImdone-function-in-controller.md @@ -0,0 +1,16 @@ +## #DONE Implement openImdone function in controller + + + diff --git a/notes/archive/backlog/stories/start-a-task-without-args/I-should-be-able-to-choose-a-story-and-task-I-would-like-to-start.md b/notes/archive/backlog/stories/start-a-task-without-args/I-should-be-able-to-choose-a-story-and-task-I-would-like-to-start.md new file mode 100644 index 00000000..1630761e --- /dev/null +++ b/notes/archive/backlog/stories/start-a-task-without-args/I-should-be-able-to-choose-a-story-and-task-I-would-like-to-start.md @@ -0,0 +1,14 @@ +## #DONE I should be able to choose a story and task I would like to start + + + diff --git a/notes/archive/backlog/stories/start-a-task-without-args/tasks/Make-taskId-optional.md b/notes/archive/backlog/stories/start-a-task-without-args/tasks/Make-taskId-optional.md new file mode 100644 index 00000000..babadb88 --- /dev/null +++ b/notes/archive/backlog/stories/start-a-task-without-args/tasks/Make-taskId-optional.md @@ -0,0 +1,15 @@ +## #DONE Make taskId optional + + + diff --git a/notes/archive/backlog/stories/start-a-task-without-args/tasks/Prompt-for-story-with-stories-that-are-not-done.md b/notes/archive/backlog/stories/start-a-task-without-args/tasks/Prompt-for-story-with-stories-that-are-not-done.md new file mode 100644 index 00000000..919d62e2 --- /dev/null +++ b/notes/archive/backlog/stories/start-a-task-without-args/tasks/Prompt-for-story-with-stories-that-are-not-done.md @@ -0,0 +1,15 @@ +## #DONE Prompt for story with stories that are not done + + + diff --git a/notes/archive/backlog/stories/start-a-task-without-args/tasks/Prompt-for-task-with-tasks-in-story-that-are-not-done.md b/notes/archive/backlog/stories/start-a-task-without-args/tasks/Prompt-for-task-with-tasks-in-story-that-are-not-done.md new file mode 100644 index 00000000..1f9e9997 --- /dev/null +++ b/notes/archive/backlog/stories/start-a-task-without-args/tasks/Prompt-for-task-with-tasks-in-story-that-are-not-done.md @@ -0,0 +1,15 @@ +## #DONE Prompt for task with tasks in story that are not done + + + diff --git a/notes/archive/backlog/stories/start-a-task-without-args/tasks/When-a-task-is-started-and-moved-to-DOING-the-story-should-also-be-in-DOING.md b/notes/archive/backlog/stories/start-a-task-without-args/tasks/When-a-task-is-started-and-moved-to-DOING-the-story-should-also-be-in-DOING.md new file mode 100644 index 00000000..795de69a --- /dev/null +++ b/notes/archive/backlog/stories/start-a-task-without-args/tasks/When-a-task-is-started-and-moved-to-DOING-the-story-should-also-be-in-DOING.md @@ -0,0 +1,15 @@ +## #DONE When a task is started and moved to DOING the story should also be in DOING + + + diff --git a/notes/archive/lib/plugins/Make-createPlugin-async-so-we-can-call-async-init-on-each-plugin.md b/notes/archive/lib/plugins/Make-createPlugin-async-so-we-can-call-async-init-on-each-plugin.md new file mode 100644 index 00000000..799e52d4 --- /dev/null +++ b/notes/archive/lib/plugins/Make-createPlugin-async-so-we-can-call-async-init-on-each-plugin.md @@ -0,0 +1,11 @@ +null#DONE Make createPlugin async so we can call async init on each plugin + + + diff --git a/notes/archive/lib/plugins/Make-loadPlugin-async-so-we-can-call-async-init-on-each-plugin.md b/notes/archive/lib/plugins/Make-loadPlugin-async-so-we-can-call-async-init-on-each-plugin.md new file mode 100644 index 00000000..63d277ea --- /dev/null +++ b/notes/archive/lib/plugins/Make-loadPlugin-async-so-we-can-call-async-init-on-each-plugin.md @@ -0,0 +1,11 @@ +null#DONE Make loadPlugin async so we can call async init on each plugin + + + diff --git a/notes/archive/notes/2020-11/Fix-filter-by-meta.created.md b/notes/archive/notes/2020-11/Fix-filter-by-meta.created.md new file mode 100644 index 00000000..e14a6021 --- /dev/null +++ b/notes/archive/notes/2020-11/Fix-filter-by-meta.created.md @@ -0,0 +1,15 @@ +# #DONE Fix filter by meta.created +```javascript +meta.created = "2020-09-29T20:10:26.659Z" +``` + + + + + diff --git a/notes/archive/notes/2021-03/Fix-adding-task-with-first-line-blank.md b/notes/archive/notes/2021-03/Fix-adding-task-with-first-line-blank.md new file mode 100644 index 00000000..e763d2a2 --- /dev/null +++ b/notes/archive/notes/2021-03/Fix-adding-task-with-first-line-blank.md @@ -0,0 +1,12 @@ +# #DONE Fix adding task with first line blank + + + + + diff --git a/notes/archive/notes/2021-03/Fix-delete-task-with-`card`.md b/notes/archive/notes/2021-03/Fix-delete-task-with-`card`.md new file mode 100644 index 00000000..4a205c80 --- /dev/null +++ b/notes/archive/notes/2021-03/Fix-delete-task-with-`card`.md @@ -0,0 +1,12 @@ +# #DONE Fix delete task with `` + + + + + diff --git a/notes/archive/notes/2022-04/Allow-Card-and-Board-actions-to-return-a-value.md b/notes/archive/notes/2022-04/Allow-Card-and-Board-actions-to-return-a-value.md new file mode 100644 index 00000000..f2468b5c --- /dev/null +++ b/notes/archive/notes/2022-04/Allow-Card-and-Board-actions-to-return-a-value.md @@ -0,0 +1,12 @@ +# #DONE Allow Card and Board actions to return a value + + + diff --git a/notes/archive/notes/2022-04/Release-1.28.8.md b/notes/archive/notes/2022-04/Release-1.28.8.md new file mode 100644 index 00000000..d6cb266b --- /dev/null +++ b/notes/archive/notes/2022-04/Release-1.28.8.md @@ -0,0 +1,12 @@ +# #DONE Release 1.28.8 + + + diff --git a/notes/archive/notes/releases/1.29.0/Create-card-action-to-copy-task-for-code-so-it-can-be-pasted-into-code-for-quick-context.md b/notes/archive/notes/releases/1.29.0/Create-card-action-to-copy-task-for-code-so-it-can-be-pasted-into-code-for-quick-context.md new file mode 100644 index 00000000..3657593e --- /dev/null +++ b/notes/archive/notes/releases/1.29.0/Create-card-action-to-copy-task-for-code-so-it-can-be-pasted-into-code-for-quick-context.md @@ -0,0 +1,11 @@ +# #DONE Create card action to copy task for code so it can be pasted into code for quick context +- [x] Copy the content of the card with comment prefix and source link + + + diff --git a/notes/releases/1.29.0/kanban.md b/notes/releases/1.29.0/kanban.md index d4470b04..2071b845 100644 --- a/notes/releases/1.29.0/kanban.md +++ b/notes/releases/1.29.0/kanban.md @@ -2,10 +2,6 @@ -# [Create card action to copy task for code so it can be pasted into code for quick context](#DONE:) -- [x] Copy the content of the card with comment prefix and source link - # [Add a card property for the current branch so we can link to github repo](#TODO:-10) - [ ] requires card properties to be async