From 857a1823fbb0afe5db04eda1eb24ff49c98ca6cf Mon Sep 17 00:00:00 2001 From: Sean Date: Sun, 10 Oct 2021 21:11:26 +1100 Subject: [PATCH 1/7] Add docs folder --- docs | 1 + 1 file changed, 1 insertion(+) create mode 120000 docs diff --git a/docs b/docs new file mode 120000 index 0000000..10a7059 --- /dev/null +++ b/docs @@ -0,0 +1 @@ +/home/sean/Documents/Notes/Personal/CliNotes/docs \ No newline at end of file From cb3d7bb638b47578cf9ec589f4f4775453c8da4e Mon Sep 17 00:00:00 2001 From: Sean Date: Sun, 10 Oct 2021 21:12:52 +1100 Subject: [PATCH 2/7] Remove docs --- docs | 1 - 1 file changed, 1 deletion(-) delete mode 120000 docs diff --git a/docs b/docs deleted file mode 120000 index 10a7059..0000000 --- a/docs +++ /dev/null @@ -1 +0,0 @@ -/home/sean/Documents/Notes/Personal/CliNotes/docs \ No newline at end of file From f8c2f179c314b2275e3b2862f4ca46a529d2e1cf Mon Sep 17 00:00:00 2001 From: Sean Date: Sun, 10 Oct 2021 21:27:08 +1100 Subject: [PATCH 3/7] Create docs within project --- docs/commands/create.md | 0 docs/intro.md | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 docs/commands/create.md create mode 100644 docs/intro.md diff --git a/docs/commands/create.md b/docs/commands/create.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/intro.md b/docs/intro.md new file mode 100644 index 0000000..1816809 --- /dev/null +++ b/docs/intro.md @@ -0,0 +1,23 @@ +# Intro + +cli-notes is a tool for managing your markdown notes. It has a couple of basic +assumptions that it makes about the sort of notes you make; + +1. You like writing your notes in markdown +2. They are either plain notes, meeting notes, or todo lists +3. You keep your notes in a nested folder structure +4. Creating a new note, and putting it in the right place is the most painful part of the note taking life-cycle + +If you find yourself agreeing with this list of issues, then this project is for you. + +## Installing + + + + +## Commands + +The following commands are available to you: + +- [Create](./commands/create.md) + From f1eb49ba0fbc8cce08e3e358f28b221fc3c38d8f Mon Sep 17 00:00:00 2001 From: Sean Date: Sun, 10 Oct 2021 21:42:28 +1100 Subject: [PATCH 4/7] Update intro doc with Install instructions --- docs/intro.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/intro.md b/docs/intro.md index 1816809..72dd7ec 100644 --- a/docs/intro.md +++ b/docs/intro.md @@ -12,12 +12,22 @@ If you find yourself agreeing with this list of issues, then this project is for ## Installing +Run: +``` +npm install -g cli-notes +``` +or: + +``` +yarn global add cli-notes +``` ## Commands The following commands are available to you: +- Help - [Create](./commands/create.md) From 2655790b090b1e93c2d729672856960f1f78ff32 Mon Sep 17 00:00:00 2001 From: Sean Gilmore Date: Sun, 12 Dec 2021 09:21:15 +1100 Subject: [PATCH 5/7] WIP: Begin work on selecting correct directory - Installed `inquirier` package to enable selection of directory of list - Broke tests trying to see if it's possible to test for output of selection method from `inquirier` - Created a basic loop to process user's selection of project (or sub project) --- package.json | 2 + src/commands/create.ts | 63 ++++++++--- src/services/Project.ts | 1 + test/commands/create.test.ts | 2 +- yarn.lock | 208 ++++++++++++++++++++++++++++++++++- 5 files changed, 259 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index 4f79959..62f4820 100644 --- a/package.json +++ b/package.json @@ -12,12 +12,14 @@ "@oclif/config": "^1", "@oclif/plugin-help": "^3", "fs": "^0.0.1-security", + "inquirer": "^8.2.0", "tslib": "^1" }, "devDependencies": { "@oclif/dev-cli": "^1", "@oclif/test": "^1", "@types/chai": "^4", + "@types/inquirer": "^8.1.3", "@types/mocha": "^5", "@types/node": "^10", "@typescript-eslint/eslint-plugin": "^4.26.0", diff --git a/src/commands/create.ts b/src/commands/create.ts index 65821e9..544626f 100644 --- a/src/commands/create.ts +++ b/src/commands/create.ts @@ -1,6 +1,8 @@ import { Command, flags } from '@oclif/command'; +import * as inquirer from 'inquirer'; import Note from '../services/Note'; import Today from '../services/Today'; +import Collection from '../services/Collection'; export default class Create extends Command { static availableTypes = { @@ -15,7 +17,7 @@ export default class Create extends Command { ]; static flags = { - project: flags.boolean({char: 'p'}), + project: flags.boolean({ char: 'p' }), } static description = 'Creates a new note'; @@ -28,23 +30,55 @@ new file created! async run(): Promise { const { args, flags } = this.parse(Create); - const project = flags.project; + let project = flags.project; const type = args.type; const title = args.title ? args.title : this.defaultNoteTitle(type); - switch (type) { - case Create.availableTypes.meeting: - return this.meeting(project, title); - case Create.availableTypes.todo: - return this.todo(project, title); - default: - return this.default(project, title); + + const tree = Collection.getTree(); + + console.log(tree); + let foundDir = false; + + let targetDir = tree; + + if (!project) { + while (!foundDir) { + console.log(targetDir); + const responses: any = await inquirer.prompt([{ + name: 'project', + message: 'select a Project', + type: 'list', + choices: [{ ...targetDir, name: `${tree.name}`, currentDir: true }, ...targetDir.projects], + }]); + + if (responses.project === targetDir.name) { + project = responses.project; + foundDir = true; + } else { + + targetDir = responses.project; + } + } + // project = responses.stage } + + this.log(`the stage is: ${project}`) + + + // switch (type) { + // case Create.availableTypes.meeting: + // return this.meeting(project, title); + // case Create.availableTypes.todo: + // return this.todo(project, title); + // default: + // return this.default(project, title); + // } } meeting(project: boolean, title: string): void { const today = new Today(); - const content = `# Meeting on ${today.date({separator: '/'})} at ${today.time()} + const content = `# Meeting on ${today.date({ separator: '/' })} at ${today.time()} ## Attendees @@ -54,7 +88,7 @@ new file created! -`; - const formattedTitle = `${today.date({separator: '-'})}_meeting-${title}`; + const formattedTitle = `${today.date({ separator: '-' })}_meeting-${title}`; const note = new Note({ fileName: formattedTitle, extension: 'md', content: content @@ -62,12 +96,13 @@ new file created! note.write(); - this.log(`New meeting note created: ${note.fullName()}`); + // this.log(`New meeting note created: ${note.fullName()}`); + // this.log() } todo(project: boolean, title: string): void { const today = new Today(); - const formattedTitle = `${today.date({separator: '-'})}_todo-${title}`; + const formattedTitle = `${today.date({ separator: '-' })}_todo-${title}`; const content = `# TODO - @@ -84,7 +119,7 @@ new file created! default(project: boolean, title: string): void { const today = new Today(); - const formattedTitle = `${today.date({separator: '-'})}_${title}`; + const formattedTitle = `${today.date({ separator: '-' })}_${title}`; const content = `# ${title}`; const note = new Note({ diff --git a/src/services/Project.ts b/src/services/Project.ts index 8f0505b..8556e90 100644 --- a/src/services/Project.ts +++ b/src/services/Project.ts @@ -7,6 +7,7 @@ export default class Project { projects: Array; constructor(args: {path: string, projects: Array}) { + this.name = args.path; this.path = args.path; this.projects = args.projects; } diff --git a/test/commands/create.test.ts b/test/commands/create.test.ts index 3727177..b0e4144 100644 --- a/test/commands/create.test.ts +++ b/test/commands/create.test.ts @@ -8,7 +8,7 @@ describe("create", () => { test .stdout() - .command(["create", "meeting", "test"]) + .command(["create", "meeting", "test", "-p", "development"]) .it("creates a meeting note", (ctx) => { expect(ctx.stdout).to.contain("New meeting note created"); }); diff --git a/yarn.lock b/yarn.lock index da20046..57772a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -258,6 +258,14 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/inquirer@^8.1.3": + version "8.1.3" + resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-8.1.3.tgz#dfda4c97cdbe304e4dceb378a80f79448ea5c8fe" + integrity sha512-AayK4ZL5ssPzR1OtnOLGAwpT0Dda3Xi/h1G0l1oJDNrowp7T1423q4Zb8/emr7tzRlCy4ssEri0LWVexAqHyKQ== + dependencies: + "@types/through" "*" + rxjs "^7.2.0" + "@types/json-schema@^7.0.7": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" @@ -300,6 +308,13 @@ dependencies: "@sinonjs/fake-timers" "^7.0.4" +"@types/through@*": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895" + integrity sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg== + dependencies: + "@types/node" "*" + "@typescript-eslint/eslint-plugin@^4.26.0": version "4.26.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.0.tgz#12bbd6ebd5e7fabd32e48e1e60efa1f3554a3242" @@ -410,7 +425,7 @@ ansi-escapes@^3.1.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.3.0: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -520,7 +535,7 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bl@^4.0.3: +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -627,6 +642,19 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" @@ -644,6 +672,13 @@ clean-stack@^3.0.0: dependencies: escape-string-regexp "4.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + cli-progress@^3.4.0: version "3.9.0" resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.9.0.tgz#25db83447deb812e62d05bac1af9aec5387ef3d4" @@ -652,6 +687,11 @@ cli-progress@^3.4.0: colors "^1.1.2" string-width "^4.2.0" +cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + cli-ux@^5.2.1: version "5.5.1" resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-5.5.1.tgz#99d28dae0c3ef7845fa2ea56e066a1d5fcceca9e" @@ -684,6 +724,11 @@ cli-ux@^5.2.1: supports-hyperlinks "^2.1.0" tslib "^2.0.0" +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -693,6 +738,11 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -840,6 +890,13 @@ default-require-extensions@^2.0.0: dependencies: strip-bom "^3.0.0" +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -1160,6 +1217,15 @@ execa@^0.10.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extract-stack@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/extract-stack/-/extract-stack-2.0.0.tgz#11367bc865bfcd9bc0db3123e5edb57786f11f9b" @@ -1213,6 +1279,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -1519,6 +1592,13 @@ hyperlinker@^1.0.0: resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -1565,6 +1645,26 @@ inherits@2, inherits@^2.0.3, inherits@^2.0.4: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inquirer@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.0.tgz#f44f008dd344bbfc4b30031f45d984e034a3ac3a" + integrity sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.2.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -1626,6 +1726,11 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-negative-zero@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" @@ -1686,6 +1791,11 @@ is-typedarray@^1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" @@ -1918,6 +2028,14 @@ lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -1973,6 +2091,11 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.2.3" +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -2046,6 +2169,11 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -2175,6 +2303,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -2187,11 +2322,31 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -2513,6 +2668,14 @@ resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.20.0: is-core-module "^2.2.0" path-parse "^1.0.6" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -2532,6 +2695,11 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -2539,6 +2707,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@^7.2.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" + integrity sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w== + dependencies: + tslib "~2.1.0" + safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -2549,6 +2724,11 @@ safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -2864,6 +3044,18 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + tmp@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" @@ -2914,6 +3106,11 @@ tslib@^2.0.0, tslib@^2.0.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== +tslib@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -3012,6 +3209,13 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" From 83d6e90da13f428e1160415172e765f26e567aa5 Mon Sep 17 00:00:00 2001 From: Sean Gilmore Date: Sun, 12 Dec 2021 17:15:02 +1100 Subject: [PATCH 6/7] WIP: Get created file saving into correctly selected directory --- src/commands/create.ts | 27 +++++++++++++-------------- src/services/Note.ts | 13 ++++++++----- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/commands/create.ts b/src/commands/create.ts index 544626f..3ff9cfa 100644 --- a/src/commands/create.ts +++ b/src/commands/create.ts @@ -44,36 +44,35 @@ new file created! if (!project) { while (!foundDir) { - console.log(targetDir); const responses: any = await inquirer.prompt([{ name: 'project', message: 'select a Project', type: 'list', - choices: [{ ...targetDir, name: `${tree.name}`, currentDir: true }, ...targetDir.projects], + choices: [{ ...targetDir, name: `${targetDir.name}`, currentDir: true }, ...targetDir.projects], }]); if (responses.project === targetDir.name) { project = responses.project; foundDir = true; } else { - - targetDir = responses.project; + targetDir = targetDir.projects.find((p) => p.name === responses.project ); + // targetDir = responses.project; } } // project = responses.stage } - this.log(`the stage is: ${project}`) + // this.log(`the stage is: ${project}`) - // switch (type) { - // case Create.availableTypes.meeting: - // return this.meeting(project, title); - // case Create.availableTypes.todo: - // return this.todo(project, title); - // default: - // return this.default(project, title); - // } + switch (type) { + case Create.availableTypes.meeting: + return this.meeting(project, title); + case Create.availableTypes.todo: + return this.todo(project, title); + default: + return this.default(project, title); + } } meeting(project: boolean, title: string): void { @@ -91,7 +90,7 @@ new file created! const formattedTitle = `${today.date({ separator: '-' })}_meeting-${title}`; const note = new Note({ - fileName: formattedTitle, extension: 'md', content: content + fileName: formattedTitle, extension: 'md', content: content, filePath: project }); note.write(); diff --git a/src/services/Note.ts b/src/services/Note.ts index cee575a..f756324 100644 --- a/src/services/Note.ts +++ b/src/services/Note.ts @@ -5,6 +5,7 @@ type Arguments = { fileName: string; extension: string; content?: string; + filePath: string; } /** @@ -14,25 +15,27 @@ export default class Note { fileName: string; extension: string; content?: string; + filePath: string; constructor(args: Arguments) { this.fileName = args.fileName; + this.filePath = args.filePath; this.extension = args.extension; this.content = args.content; } write(): void { - fs.writeFileSync(this.filePath(), this.content); + fs.writeFileSync(this.fullPath(), this.content); } fullName(): string { return `${this.fileName}.${this.extension}`; } - private filePath(): string { - const config = new Config; - const settings = config.getSettings(); + private fullPath(): string { + // const config = new Config; + // const settings = config.getSettings(); - return `${settings.collectionLocation}/${this.fullName()}`; + return `${this.filePath}/${this.fullName()}`; } } From 82879c0a2fae6fa501e017771b16420aacb94a22 Mon Sep 17 00:00:00 2001 From: Sean Gilmore Date: Mon, 13 Dec 2021 08:18:17 +1100 Subject: [PATCH 7/7] WIP: Output created file to correct directory --- src/commands/create.ts | 23 ++++++++++------------- src/services/Note.ts | 10 ++++++---- test/commands/create.test.ts | 2 +- test/services/Note.test.ts | 2 +- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/commands/create.ts b/src/commands/create.ts index 3ff9cfa..a658fe6 100644 --- a/src/commands/create.ts +++ b/src/commands/create.ts @@ -3,6 +3,7 @@ import * as inquirer from 'inquirer'; import Note from '../services/Note'; import Today from '../services/Today'; import Collection from '../services/Collection'; +import Project from '../services/Project'; export default class Create extends Command { static availableTypes = { @@ -17,7 +18,7 @@ export default class Create extends Command { ]; static flags = { - project: flags.boolean({ char: 'p' }), + project: flags.string({ char: 'p' }), } static description = 'Creates a new note'; @@ -38,7 +39,7 @@ new file created! const tree = Collection.getTree(); console.log(tree); - let foundDir = false; + let foundDir; let targetDir = tree; @@ -55,16 +56,12 @@ new file created! project = responses.project; foundDir = true; } else { - targetDir = targetDir.projects.find((p) => p.name === responses.project ); - // targetDir = responses.project; + foundDir = targetDir.projects.find((p) => p.name === responses.project ); + targetDir = foundDir !== undefined ? foundDir : targetDir; } } - // project = responses.stage } - // this.log(`the stage is: ${project}`) - - switch (type) { case Create.availableTypes.meeting: return this.meeting(project, title); @@ -75,7 +72,7 @@ new file created! } } - meeting(project: boolean, title: string): void { + meeting(project: string|undefined, title: string): void { const today = new Today(); const content = `# Meeting on ${today.date({ separator: '/' })} at ${today.time()} @@ -99,7 +96,7 @@ new file created! // this.log() } - todo(project: boolean, title: string): void { + todo(project: string|undefined, title: string): void { const today = new Today(); const formattedTitle = `${today.date({ separator: '-' })}_todo-${title}`; const content = `# TODO @@ -108,7 +105,7 @@ new file created! `; const note = new Note({ - fileName: formattedTitle, extension: 'md', content: content + fileName: formattedTitle, extension: 'md', content: content, filePath: project }); note.write(); @@ -116,13 +113,13 @@ new file created! this.log(`New todo note created: ${note.fullName()}`); } - default(project: boolean, title: string): void { + default(project: string|undefined, title: string): void { const today = new Today(); const formattedTitle = `${today.date({ separator: '-' })}_${title}`; const content = `# ${title}`; const note = new Note({ - fileName: formattedTitle, extension: 'md', content: content + fileName: formattedTitle, extension: 'md', content: content, filePath: project }); note.write(); diff --git a/src/services/Note.ts b/src/services/Note.ts index f756324..3a602c6 100644 --- a/src/services/Note.ts +++ b/src/services/Note.ts @@ -1,11 +1,10 @@ import * as fs from 'fs'; -import Config from './Config'; type Arguments = { fileName: string; extension: string; content?: string; - filePath: string; + filePath: string|undefined; } /** @@ -15,7 +14,7 @@ export default class Note { fileName: string; extension: string; content?: string; - filePath: string; + filePath: string | undefined; constructor(args: Arguments) { this.fileName = args.fileName; @@ -25,7 +24,10 @@ export default class Note { } write(): void { - fs.writeFileSync(this.fullPath(), this.content); + + if (this.fileName && this.filePath) { + fs.writeFileSync(this.fullPath(), this.content); + } } fullName(): string { diff --git a/test/commands/create.test.ts b/test/commands/create.test.ts index b0e4144..4724ad3 100644 --- a/test/commands/create.test.ts +++ b/test/commands/create.test.ts @@ -8,7 +8,7 @@ describe("create", () => { test .stdout() - .command(["create", "meeting", "test", "-p", "development"]) + .command(["create", "meeting", "test", "--project", "development"]) .it("creates a meeting note", (ctx) => { expect(ctx.stdout).to.contain("New meeting note created"); }); diff --git a/test/services/Note.test.ts b/test/services/Note.test.ts index 2fcea35..95e6e15 100644 --- a/test/services/Note.test.ts +++ b/test/services/Note.test.ts @@ -9,7 +9,7 @@ describe("Note", () => { process.env.HOME = './test-dir'; }); - const note = new Note({ fileName: 'test-file', extension: 'txt', content: 'Test' }); + const note = new Note({ fileName: 'test-file', extension: 'txt', content: 'Test', filePath: './test-dir/' }); note.write(); expect(fs.existsSync('./test-dir/test-file.txt')).to.eq(true); });