diff --git a/packages/foam-cli/src/commands/janitor.ts b/packages/foam-cli/src/commands/janitor.ts index 54b591e0..3b89f10f 100644 --- a/packages/foam-cli/src/commands/janitor.ts +++ b/packages/foam-cli/src/commands/janitor.ts @@ -11,7 +11,7 @@ export default class Janitor extends Command { static examples = [ `$ foam-cli janitor path-to-foam-workspace -Sucessfully generated link references and heading! +Successfully generated link references and heading! `, ] @@ -33,18 +33,19 @@ Sucessfully generated link references and heading! const notes = graph.getNotes(); const fileWritePromises = notes.map(note => { - // Generate Heading + // Get edits const heading = generateHeading(note); + const definitions = generateLinkReferences(note, graph); - const fileWithHeading = heading ? applyTextEdit(note.source, heading) : note.source; - // Generate Link References - const linkRefTextEdits = generateLinkReferences(note, graph); + // apply Edits + let file = note.source; + file = heading ? applyTextEdit(file, heading) : file; + file = definitions ? applyTextEdit(file, definitions) : file; - const fileWithLinkReferences = linkRefTextEdits ? applyTextEdit(fileWithHeading, linkRefTextEdits) : fileWithHeading; - if (fileWithHeading || fileWithLinkReferences) { - return writeFileToDisk(note.path, fileWithLinkReferences); + if (heading || definitions) { + return writeFileToDisk(note.path, file); } return null; @@ -68,6 +69,6 @@ Sucessfully generated link references and heading! // Improve the message (also show changed files??) // Use Chalk - this.log('Succfully generated link references and heading!') + this.log('Successfully generated link references and heading!') } } diff --git a/packages/foam-cli/test/write-file-to-disk.test.ts b/packages/foam-cli/test/write-file-to-disk.test.ts index 828cb130..98e3e989 100644 --- a/packages/foam-cli/test/write-file-to-disk.test.ts +++ b/packages/foam-cli/test/write-file-to-disk.test.ts @@ -3,17 +3,20 @@ import { writeFileToDisk } from '../src/utils/write-file-to-disk' import * as fs from 'fs'; import * as path from 'path'; +// TODO: Mock fs describe('writeFileToDisk', () => { + const fileUri = path.join(__dirname, 'test-file.md'); + + afterAll(() => { + fs.unlinkSync(fileUri); + }) + it('should overrwrite existing file in the disk with the new data', async () => { const existingData = `content in the existing file`; const newData = `content in the new file`; - const fileUri = path.join(__dirname, 'test-file.md'); fs.writeFileSync(fileUri, existingData); - await writeFileToDisk(fileUri, newData); - const actual = fs.readFileSync(fileUri, { encoding: 'utf8' }); expect(actual).toBe(newData); - fs.unlinkSync(fileUri); }); }) \ No newline at end of file diff --git a/packages/foam-core/package.json b/packages/foam-core/package.json index 28ab2d58..b70870a3 100644 --- a/packages/foam-core/package.json +++ b/packages/foam-core/package.json @@ -15,6 +15,7 @@ "prepare": "tsdx build" }, "devDependencies": { + "@types/dashify": "^1.0.0", "@types/graphlib": "^2.1.6", "@types/lodash": "^4.14.157", "glob": "^7.1.6", diff --git a/packages/foam-core/src/index.ts b/packages/foam-core/src/index.ts index 2ec68e08..3441421b 100644 --- a/packages/foam-core/src/index.ts +++ b/packages/foam-core/src/index.ts @@ -8,7 +8,7 @@ export { export { TextEdit, generateHeading, generateLinkReferences, getKebabCaseFileName } from './janitor' -export { initializeNoteGraph } from './utils' +export { initializeNoteGraph } from './initializeNoteGraph' export { NoteGraph, Note, NoteLink }; diff --git a/packages/foam-core/src/initializeNoteGraph.ts b/packages/foam-core/src/initializeNoteGraph.ts new file mode 100644 index 00000000..a92ad504 --- /dev/null +++ b/packages/foam-core/src/initializeNoteGraph.ts @@ -0,0 +1,27 @@ + +import glob from 'glob'; +import { promisify } from 'util'; +import fs from 'fs'; +import { NoteGraph } from './note-graph'; +import { createNoteFromMarkdown } from './markdown-provider'; + +const findAllFiles = promisify(glob); + +export const initializeNoteGraph = async (aboluteDir: string) => { + // remove trailing slash from aboluteDir if exists + if (aboluteDir.substr(-1) == '/') aboluteDir = aboluteDir.slice(0, -1); + + const files = await findAllFiles(`${aboluteDir}/**/*.md`, {}); + + const graph = new NoteGraph(); + await Promise.all( + (await files).map(f => { + return fs.promises.readFile(f).then(data => { + const markdown = (data || '').toString(); + graph.setNote(createNoteFromMarkdown(f, markdown)); + }); + }) + ); + + return graph; +} diff --git a/packages/foam-core/src/utils.ts b/packages/foam-core/src/utils.ts index 7ccd47c0..e68255bf 100644 --- a/packages/foam-core/src/utils.ts +++ b/packages/foam-core/src/utils.ts @@ -1,11 +1,4 @@ import { titleCase } from 'title-case'; -import glob from 'glob'; -import { promisify } from 'util'; -import fs from 'fs'; -import { NoteGraph } from './note-graph'; -import { createNoteFromMarkdown } from './markdown-provider'; - -const findAllFiles = promisify(glob); export function dropExtension(path: string): string { const parts = path.split('.'); @@ -20,23 +13,4 @@ export function dropExtension(path: string): string { */ export const getHeadingFromFileName = (filename: string): string => { return titleCase(filename.replace(/[^\w\s]/gi, ' ')); -} - -export const initializeNoteGraph = async (aboluteDir: string) => { - // remove trailing slash from aboluteDir if exists - if (aboluteDir.substr(-1) == '/') aboluteDir = aboluteDir.slice(0, -1); - - const files = await findAllFiles(`${aboluteDir}/**/*.md`, {}); - - const graph = new NoteGraph(); - await Promise.all( - (await files).map(f => { - return fs.promises.readFile(f).then(data => { - const markdown = (data || '').toString(); - graph.setNote(createNoteFromMarkdown(f, markdown)); - }); - }) - ); - - return graph; -} +} \ No newline at end of file diff --git a/packages/foam-core/types/utils.d.ts b/packages/foam-core/types/utils.d.ts index bf1a7530..45f331de 100644 --- a/packages/foam-core/types/utils.d.ts +++ b/packages/foam-core/types/utils.d.ts @@ -1,3 +1 @@ -declare module 'remark-wiki-link'; - -declare module 'dashify'; \ No newline at end of file +declare module 'remark-wiki-link'; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 088fad87..1041d4c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2307,6 +2307,11 @@ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== +"@types/dashify@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/dashify/-/dashify-1.0.0.tgz#19ade107e1e330344a65ad65f0e7e1875483d2e9" + integrity sha512-uyYom3SM48jvowobcby+1z3r/sDX+5N8lAdPoNLKYMhF819pNjV6K5g8lAUGrwj80n+P7Qf10GcA9h7aIO2GJw== + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"