Files
foam/packages/foam-vscode/package.json
Riccardo cf70c97fd7 add note embeddings and semantic similarity search (#1560)
* First implementation of embedding feature

* Improved caching

* Progress on embedding index build

* Added cancellation option, and updating embeds continuously

* Added "Related Notes" panel, plus various tweaks

* Added task deduplicator so that notes analysis command has only one running instance

* Added progress/cancel features to vscode mock

* Tests

* refactored code into `ai` module

* Added `foam.experimental.ai` feature flag, with AI features disabled by default

* `waitForNoteInFoamWorkspace` now fails on timeout

* Added watcher in VS Code mock, and updated related test
2025-12-15 13:22:19 +01:00

856 lines
30 KiB
JSON

{
"name": "foam-vscode",
"displayName": "Foam",
"description": "VS Code + Markdown + Wikilinks for your note taking and knowledge base",
"private": true,
"repository": {
"url": "https://github.com/foambubble/foam",
"type": "git"
},
"homepage": "https://github.com/foambubble/foam",
"version": "0.29.1",
"license": "MIT",
"publisher": "foam",
"engines": {
"vscode": "^1.96.0"
},
"icon": "assets/icon/FOAM_ICON_256.png",
"categories": [
"Other"
],
"main": "./out/bundles/extension-node.js",
"browser": "./out/bundles/extension-web.js",
"capabilities": {
"untrustedWorkspaces": {
"supported": "limited",
"description": "No expressions are allowed in filters."
}
},
"contributes": {
"markdown.markdownItPlugins": true,
"markdown.previewStyles": [
"./static/preview/style.css"
],
"grammars": [
{
"path": "./syntaxes/injection.json",
"scopeName": "foam.wikilink.injection",
"injectTo": [
"text.html.markdown"
]
}
],
"colors": [
{
"id": "foam.placeholder",
"description": "Color of foam placeholders.",
"defaults": {
"dark": "editorWarning.foreground",
"light": "editorWarning.foreground",
"highContrast": "editorWarning.foreground"
}
}
],
"views": {
"explorer": [
{
"id": "foam-vscode.connections",
"name": "Connections",
"icon": "$(references)",
"contextualTitle": "Foam"
},
{
"id": "foam-vscode.tags-explorer",
"name": "Tag Explorer",
"icon": "$(tag)",
"contextualTitle": "Foam"
},
{
"id": "foam-vscode.notes-explorer",
"name": "Notes",
"icon": "$(notebook)",
"contextualTitle": "Foam"
},
{
"id": "foam-vscode.orphans",
"name": "Orphans",
"icon": "$(debug-gripper)",
"contextualTitle": "Foam"
},
{
"id": "foam-vscode.placeholders",
"name": "Placeholders",
"icon": "$(debug-disconnect)",
"contextualTitle": "Foam"
},
{
"when": "config.foam.experimental.ai",
"id": "foam-vscode.related-notes",
"name": "Related Notes (AI)",
"icon": "$(sparkle)",
"contextualTitle": "Foam"
}
]
},
"viewsWelcome": [
{
"view": "foam-vscode.tags-explorer",
"contents": "No tags found. Notes that contain tags will show up here. You may add tags to a note with a hashtag (#tag) or by adding a tag list to the front matter (tags: tag1, tag2)."
},
{
"view": "foam-vscode.connections",
"contents": "Nothing found for the selected resource and the current filter."
},
{
"view": "foam-vscode.orphans",
"contents": "No orphans found. Notes that have no backlinks nor links will show up here."
},
{
"view": "foam-vscode.placeholders",
"contents": "No placeholders found for selected resource or workspace."
},
{
"view": "foam-vscode.related-notes",
"contents": "Open a note to see related notes.",
"when": "config.foam.experimental.ai && foam.relatedNotes.state == 'no-note'"
},
{
"view": "foam-vscode.related-notes",
"contents": "Notes haven't been analyzed yet.\n[Analyze Notes](command:foam-vscode.build-embeddings)\nAnalyze your notes to discover similar content.",
"when": "config.foam.experimental.ai && foam.relatedNotes.state == 'no-embedding'"
},
{
"view": "foam-vscode.related-notes",
"contents": "No similar notes found for the current note.",
"when": "config.foam.experimental.ai && foam.relatedNotes.state == 'ready'"
}
],
"menus": {
"view/item/context": [
{
"command": "foam-vscode.search-tag",
"when": "view == foam-vscode.tags-explorer && viewItem == tag",
"group": "inline",
"icon": "$(search)"
},
{
"command": "foam-vscode.rename-tag",
"when": "view == foam-vscode.tags-explorer && viewItem == tag",
"group": "inline",
"icon": "$(edit)"
}
],
"editor/context": [
{
"command": "foam-vscode.rename-tag",
"when": "editorTextFocus && resourceExtname == '.md'",
"group": "foam",
"title": "Rename Tag"
}
],
"view/title": [
{
"command": "foam-vscode.views.connections.show:backlinks",
"when": "view == foam-vscode.connections && foam-vscode.views.connections.show == 'all links'",
"group": "navigation"
},
{
"command": "foam-vscode.views.connections.show:forward-links",
"when": "view == foam-vscode.connections && foam-vscode.views.connections.show == 'backlinks'",
"group": "navigation"
},
{
"command": "foam-vscode.views.connections.show:all-links",
"when": "view == foam-vscode.connections && foam-vscode.views.connections.show == 'forward links'",
"group": "navigation"
},
{
"command": "foam-vscode.views.orphans.group-by:folder",
"when": "view == foam-vscode.orphans && foam-vscode.views.orphans.group-by == 'off'",
"group": "navigation"
},
{
"command": "foam-vscode.views.orphans.group-by:off",
"when": "view == foam-vscode.orphans && foam-vscode.views.orphans.group-by == 'folder'",
"group": "navigation"
},
{
"command": "foam-vscode.views.tags-explorer.show:for-current-file",
"when": "view == foam-vscode.tags-explorer && foam-vscode.views.tags-explorer.show == 'all'",
"group": "navigation"
},
{
"command": "foam-vscode.views.tags-explorer.show:all",
"when": "view == foam-vscode.tags-explorer && foam-vscode.views.tags-explorer.show == 'for-current-file'",
"group": "navigation"
},
{
"command": "foam-vscode.views.tags-explorer.group-by:folder",
"when": "view == foam-vscode.tags-explorer && foam-vscode.views.tags-explorer.group-by == 'off'",
"group": "navigation"
},
{
"command": "foam-vscode.views.tags-explorer.group-by:off",
"when": "view == foam-vscode.tags-explorer && foam-vscode.views.tags-explorer.group-by == 'folder'",
"group": "navigation"
},
{
"command": "foam-vscode.views.tags-explorer.expand-all",
"when": "view == foam-vscode.tags-explorer",
"group": "navigation"
},
{
"command": "foam-vscode.views.placeholders.show:for-current-file",
"when": "view == foam-vscode.placeholders && foam-vscode.views.placeholders.show == 'all'",
"group": "navigation"
},
{
"command": "foam-vscode.views.placeholders.show:all",
"when": "view == foam-vscode.placeholders && foam-vscode.views.placeholders.show == 'for-current-file'",
"group": "navigation"
},
{
"command": "foam-vscode.views.placeholders.group-by:folder",
"when": "view == foam-vscode.placeholders && foam-vscode.views.placeholders.group-by == 'off'",
"group": "navigation"
},
{
"command": "foam-vscode.views.placeholders.group-by:off",
"when": "view == foam-vscode.placeholders && foam-vscode.views.placeholders.group-by == 'folder'",
"group": "navigation"
},
{
"command": "foam-vscode.views.placeholders.expand-all",
"when": "view == foam-vscode.placeholders",
"group": "navigation"
},
{
"command": "foam-vscode.views.notes-explorer.show:notes",
"when": "view == foam-vscode.notes-explorer && foam-vscode.views.notes-explorer.show == 'all'",
"group": "navigation"
},
{
"command": "foam-vscode.views.notes-explorer.show:all",
"when": "view == foam-vscode.notes-explorer && foam-vscode.views.notes-explorer.show == 'notes-only'",
"group": "navigation"
},
{
"command": "foam-vscode.views.notes-explorer.expand-all",
"when": "view == foam-vscode.notes-explorer",
"group": "navigation"
}
],
"commandPalette": [
{
"command": "foam-vscode.create-note-from-default-template",
"when": "false"
},
{
"command": "foam-vscode.update-graph",
"when": "false"
},
{
"command": "foam-vscode.views.connections.show:all-links",
"when": "false"
},
{
"command": "foam-vscode.views.connections.show:backlinks",
"when": "false"
},
{
"command": "foam-vscode.views.connections.show:forward-links",
"when": "false"
},
{
"command": "foam-vscode.views.orphans.group-by:folder",
"when": "false"
},
{
"command": "foam-vscode.views.orphans.group-by:off",
"when": "false"
},
{
"command": "foam-vscode.views.tags-explorer.show:for-current-file",
"when": "false"
},
{
"command": "foam-vscode.views.tags-explorer.show:all",
"when": "false"
},
{
"command": "foam-vscode.views.tags-explorer.group-by:folder",
"when": "false"
},
{
"command": "foam-vscode.views.tags-explorer.group-by:off",
"when": "false"
},
{
"command": "foam-vscode.views.tags-explorer.expand-all",
"when": "false"
},
{
"command": "foam-vscode.views.placeholders.show:for-current-file",
"when": "false"
},
{
"command": "foam-vscode.views.placeholders.show:all",
"when": "false"
},
{
"command": "foam-vscode.views.placeholders.group-by:folder",
"when": "false"
},
{
"command": "foam-vscode.views.placeholders.group-by:off",
"when": "false"
},
{
"command": "foam-vscode.views.placeholders.expand-all",
"when": "false"
},
{
"command": "foam-vscode.views.notes-explorer.show:all",
"when": "false"
},
{
"command": "foam-vscode.views.notes-explorer.show:notes",
"when": "false"
},
{
"command": "foam-vscode.views.notes-explorer.expand-all",
"when": "false"
},
{
"command": "foam-vscode.open-resource",
"when": "false"
},
{
"command": "foam-vscode.completion-move-cursor",
"when": "false"
}
]
},
"commands": [
{
"command": "foam-vscode.create-note",
"title": "Foam: Create New Note"
},
{
"command": "foam-vscode.clear-cache",
"title": "Foam: Clear Cache"
},
{
"command": "foam-vscode.update-graph",
"title": "Foam: Update Graph"
},
{
"command": "foam-vscode.set-log-level",
"title": "Foam: Set Log Level"
},
{
"command": "foam-vscode.show-graph",
"title": "Foam: Show Graph"
},
{
"command": "foam-vscode.update-wikilink-definitions",
"title": "Foam: Update Wikilink Definitions"
},
{
"command": "foam-vscode.open-daily-note",
"title": "Foam: Open Today's Note"
},
{
"command": "foam-vscode.open-daily-note-for-date",
"title": "Foam: Open Daily Note"
},
{
"command": "foam-vscode.open-random-note",
"title": "Foam: Open Random Note"
},
{
"command": "foam-vscode.janitor",
"title": "Foam: Run Janitor (Experimental)"
},
{
"command": "foam-vscode.copy-without-brackets",
"title": "Foam: Copy To Clipboard Without Brackets"
},
{
"command": "foam-vscode.create-note-from-template",
"title": "Foam: Create New Note From Template"
},
{
"command": "foam-vscode.create-note-from-default-template",
"title": "Foam: Create New Note"
},
{
"command": "foam-vscode.open-resource",
"title": "Foam: Open Resource"
},
{
"command": "foam-vscode.convert-wikilink-to-mdlink",
"title": "Foam: Convert Wikilink to Markdown Link"
},
{
"command": "foam-vscode.convert-mdlink-to-wikilink",
"title": "Foam: Convert Markdown Link to Wikilink"
},
{
"command": "foam-vscode.search-tag",
"title": "Foam: Search Tag",
"icon": "$(search)"
},
{
"command": "foam-vscode.rename-tag",
"title": "Foam: Rename Tag",
"icon": "$(edit)"
},
{
"command": "foam-vscode.show-similar-notes",
"title": "Foam: Show Similar Notes",
"when": "config.foam.experimental.ai"
},
{
"command": "foam-vscode.build-embeddings",
"title": "Foam: Build Embeddings Index",
"when": "config.foam.experimental.ai"
},
{
"command": "foam-vscode.views.orphans.group-by:folder",
"title": "Group By Folder",
"icon": "$(list-tree)"
},
{
"command": "foam-vscode.views.connections.show:backlinks",
"title": "Show Backlinks",
"icon": "$(arrow-left)"
},
{
"command": "foam-vscode.views.connections.show:forward-links",
"title": "Show Links",
"icon": "$(arrow-right)"
},
{
"command": "foam-vscode.views.connections.show:all-links",
"title": "Show All",
"icon": "$(arrow-swap)"
},
{
"command": "foam-vscode.views.orphans.group-by:off",
"title": "Flat list",
"icon": "$(list-flat)"
},
{
"command": "foam-vscode.views.tags-explorer.show:for-current-file",
"title": "Show tags in current file",
"icon": "$(file)"
},
{
"command": "foam-vscode.views.tags-explorer.show:all",
"title": "Show tags in workspace",
"icon": "$(files)"
},
{
"command": "foam-vscode.views.tags-explorer.group-by:folder",
"title": "Group By Folder",
"icon": "$(list-tree)"
},
{
"command": "foam-vscode.views.tags-explorer.group-by:off",
"title": "Flat list",
"icon": "$(list-flat)"
},
{
"command": "foam-vscode.views.tags-explorer.expand-all",
"title": "Expand all",
"icon": "$(expand-all)"
},
{
"command": "foam-vscode.views.tags-explorer.focus",
"title": "Focus on tag",
"icon": "$(symbol-number)"
},
{
"command": "foam-vscode.views.placeholders.show:for-current-file",
"title": "Show placeholders in current file",
"icon": "$(file)"
},
{
"command": "foam-vscode.views.placeholders.show:all",
"title": "Show placeholders in workspace",
"icon": "$(files)"
},
{
"command": "foam-vscode.views.placeholders.group-by:folder",
"title": "Group By Folder",
"icon": "$(list-tree)"
},
{
"command": "foam-vscode.views.placeholders.group-by:off",
"title": "Flat list",
"icon": "$(list-flat)"
},
{
"command": "foam-vscode.views.placeholders.expand-all",
"title": "Expand all",
"icon": "$(expand-all)"
},
{
"command": "foam-vscode.views.notes-explorer.show:all",
"title": "Show all resources",
"icon": "$(files)"
},
{
"command": "foam-vscode.views.notes-explorer.expand-all",
"title": "Expand all",
"icon": "$(expand-all)"
},
{
"command": "foam-vscode.views.notes-explorer.show:notes",
"title": "Show only notes",
"icon": "$(file)"
},
{
"command": "foam-vscode.create-new-template",
"title": "Foam: Create New Template"
},
{
"command": "foam-vscode.completion-move-cursor",
"title": "Foam: Move cursor after completion"
}
],
"configuration": {
"title": "Foam",
"properties": {
"foam.supportedLanguages": {
"type": "array",
"default": [
"markdown"
],
"description": "List of languages to treat as Markdown-like documents."
},
"foam.completion.label": {
"type": "string",
"default": "path",
"description": "Describes what note property to use as a label for completion items",
"enum": [
"path",
"title",
"identifier"
],
"enumDescriptions": [
"Use the path of the note",
"Use the title of the note",
"Use the identifier of the note"
]
},
"foam.completion.useAlias": {
"type": "string",
"default": "never",
"description": "Specifies in which cases to use an alias when creating a wikilink",
"enum": [
"never",
"whenPathDiffersFromTitle"
],
"enumDescriptions": [
"Never use aliases in completion items",
"Use alias if resource path is different from title"
]
},
"foam.completion.linkFormat": {
"type": "string",
"default": "wikilink",
"description": "Controls the format of completed links",
"enum": [
"wikilink",
"link"
],
"enumDescriptions": [
"Complete as wikilinks (e.g., [[note-name]])",
"Complete as markdown links (e.g., [Note Name](note-name.md))"
]
},
"foam.files.ignore": {
"type": [
"array"
],
"default": [
"**/.vscode/**/*",
"**/_layouts/**/*",
"**/_site/**/*",
"**/node_modules/**/*"
],
"description": "Specifies the list of globs that will be ignored by Foam (e.g. they will not be considered when creating the graph). To ignore all the content of a given folder, use `<folderName>/**/*`",
"deprecationMessage": "Use 'foam.files.exclude' instead. This setting will be removed in a future version."
},
"foam.files.exclude": {
"type": [
"array"
],
"default": [],
"description": "Specifies the list of globs that will be excluded by Foam (e.g. they will not be considered when creating the graph). To exclude all the content of a given folder, use `<folderName>/**/*`. This setting is combined with 'foam.files.ignore' (deprecated) and 'files.exclude'."
},
"foam.files.include": {
"type": [
"array"
],
"default": [
"**/*"
],
"description": "Specifies the list of glob patterns for files to include in Foam. Files must match at least one include pattern and not match any exclude patterns. Use this to limit Foam to specific directories (e.g., [\"notes/**\"]) or file types (e.g., [\"**/*.md\"]). Defaults to all files."
},
"foam.files.attachmentExtensions": {
"type": "string",
"default": "pdf mp3 webm wav m4a mp4 avi mov rtf txt doc docx pages xls xlsx numbers ppt pptm pptx",
"description": "Space separated list of file extensions that will be considered attachments"
},
"foam.files.notesExtensions": {
"type": "string",
"default": "",
"description": "Space separated list of extra file extensions that will be considered text notes (e.g. 'mdx txt markdown')"
},
"foam.files.defaultNoteExtension": {
"type": "string",
"default": "md",
"description": "The default extension for new notes"
},
"foam.files.newNotePath": {
"type": "string",
"default": "root",
"description": "Specifies where to create a new note. It is overruled by the template or command arguments",
"enum": [
"root",
"currentDir"
],
"enumDescriptions": [
"Use the root of the workspace",
"Use the directory of the file in the current editor"
]
},
"foam.logging.level": {
"type": "string",
"default": "info",
"enum": [
"off",
"debug",
"info",
"warn",
"error"
]
},
"foam.edit.linkReferenceDefinitions": {
"type": "string",
"default": "off",
"enum": [
"withExtensions",
"withoutExtensions",
"off"
],
"enumDescriptions": [
"Include extension in wikilinks paths",
"Remove extension in wikilink paths",
"Disable wikilink definitions generation"
]
},
"foam.links.sync.enable": {
"description": "Enable synching links when moving/renaming notes",
"type": "boolean",
"default": true
},
"foam.links.hover.enable": {
"description": "Enable displaying note content on hover links",
"type": "boolean",
"default": true
},
"foam.openDailyNote.onStartup": {
"type": "boolean",
"default": false
},
"foam.openDailyNote.fileExtension": {
"deprecationMessage": "This setting is deprecated and will be removed in future versions. Please use the daily-note template: https://github.com/foambubble/foam/blob/fe0228bdcc647e85682670656b5f09203b1c2518/docs/user/features/daily-notes.md",
"type": "string",
"default": "md"
},
"foam.openDailyNote.filenameFormat": {
"deprecationMessage": "This setting is deprecated and will be removed in future versions. Please use the daily-note template: https://github.com/foambubble/foam/blob/fe0228bdcc647e85682670656b5f09203b1c2518/docs/user/features/daily-notes.md",
"type": "string",
"default": "isoDate",
"markdownDescription": "Specifies how the daily note filename is formatted. See the [dateformat docs](https://www.npmjs.com/package/dateformat) for valid formats"
},
"foam.openDailyNote.titleFormat": {
"deprecationMessage": "This setting is deprecated and will be removed in future versions. Please use the daily-note template: https://github.com/foambubble/foam/blob/fe0228bdcc647e85682670656b5f09203b1c2518/docs/user/features/daily-notes.md",
"type": [
"string",
"null"
],
"default": null,
"markdownDescription": "Specifies how the daily note title is formatted. Will default to the filename format if set to null. See the [dateformat docs](https://www.npmjs.com/package/dateformat) for valid formats"
},
"foam.openDailyNote.directory": {
"deprecationMessage": "This setting is deprecated and will be removed in future versions. Please use the daily-note template: https://github.com/foambubble/foam/blob/fe0228bdcc647e85682670656b5f09203b1c2518/docs/user/features/daily-notes.md",
"type": [
"string",
"null"
],
"default": null,
"description": "The directory into which daily notes should be created. Defaults to the workspace root."
},
"foam.orphans.exclude": {
"type": [
"array"
],
"default": [],
"markdownDescription": "Specifies the list of glob patterns that will be excluded from the orphans report. To ignore the all the content of a given folder, use `**<folderName>/**/*`"
},
"foam.placeholders.exclude": {
"type": [
"array"
],
"default": [],
"markdownDescription": "Specifies the list of glob patterns that will be excluded from the placeholders report. To ignore the all the content of a given folder, use `**<folderName>/**/*`"
},
"foam.dateSnippets.afterCompletion": {
"type": "string",
"default": "createNote",
"enum": [
"noop",
"createNote",
"navigateToNote"
],
"enumDescriptions": [
"Nothing happens after selecting the completion item",
"The note is created following your daily note settings if it does not exist, but no navigation takes place",
"Navigates to the note, creating it following your daily note settings if it does not exist"
],
"description": "Whether or not to navigate to the target daily note when a daily note snippet is selected."
},
"foam.preview.embedNoteType": {
"when": "config.foam.experimental.ai",
"type": "string",
"default": "full-card",
"enum": [
"full-inline",
"full-card",
"content-inline",
"content-card"
],
"enumDescriptions": [
"Include the section with title and style inline",
"Include the section with title and style it within a container",
"Include the section without title and style inline",
"Include the section without title and style it within a container"
]
},
"foam.graph.titleMaxLength": {
"type": "number",
"default": 24,
"description": "The maximum title length before being abbreviated. Set to 0 or less to disable."
},
"foam.graph.style": {
"type": "object",
"description": "Custom graph styling settings. An example is present in the documentation.",
"default": {}
},
"foam.graph.onStartup": {
"type": "boolean",
"default": false,
"description": "Whether to open the graph on startup."
}
}
},
"keybindings": [
{
"command": "foam-vscode.open-daily-note",
"key": "alt+d"
},
{
"command": "foam-vscode.open-daily-note-for-date",
"key": "alt+h"
}
]
},
"scripts": {
"build:node": "node esbuild.js --platform=node",
"build:web": "node esbuild.js --platform=web",
"build": "yarn build:node && yarn build:web",
"vscode:prepublish": "yarn clean && yarn build:node --production && yarn build:web --production",
"compile": "tsc -p ./",
"test-reset-workspace": "rm -rf .test-workspace && mkdir .test-workspace && touch .test-workspace/.keep",
"test-setup": "yarn compile && yarn build && yarn test-reset-workspace",
"test": "yarn test-setup && node ./out/test/run-tests.js",
"test:unit": "yarn test-setup && node ./out/test/run-tests.js --unit",
"test:unit-without-specs": "yarn test-setup && node ./out/test/run-tests.js --unit --exclude-specs",
"test:e2e": "yarn test-setup && node ./out/test/run-tests.js --e2e",
"lint": "dts lint src",
"clean": "rimraf out",
"watch": "nodemon --watch 'src/**/*.ts' --exec 'yarn build' --ext ts",
"vscode:start-debugging": "yarn clean && yarn watch",
"package-extension": "npx @vscode/vsce@3.6.0 package --yarn",
"install-extension": "code --install-extension ./foam-vscode-$npm_package_version.vsix",
"open-in-browser": "vscode-test-web --quality=stable --browser=chromium --extensionDevelopmentPath=. ",
"publish-extension-openvsx": "npx ovsx publish foam-vscode-$npm_package_version.vsix -p $OPENVSX_TOKEN",
"publish-extension-vscode": "npx vsce publish --packagePath foam-vscode-$npm_package_version.vsix",
"publish-extension": "yarn publish-extension-vscode && yarn publish-extension-openvsx"
},
"devDependencies": {
"@types/dateformat": "^3.0.1",
"@types/jest": "^29.5.3",
"@types/lodash": "^4.14.157",
"@types/markdown-it": "^12.0.1",
"@types/micromatch": "^4.0.1",
"@types/node": "^18.0.0",
"@types/picomatch": "^2.2.1",
"@types/remove-markdown": "^0.1.1",
"@types/vscode": "^1.70.0",
"@typescript-eslint/eslint-plugin": "^5.51.0",
"@typescript-eslint/parser": "^5.51.0",
"@vscode/test-web": "^0.0.62",
"dts-cli": "^1.6.3",
"esbuild": "^0.17.7",
"esbuild-plugin-polyfill-node": "^0.3.0",
"eslint": "^8.33.0",
"eslint-import-resolver-typescript": "^3.5.3",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jest": "^27.2.1",
"husky": "^4.2.5",
"jest": "^29.6.2",
"jest-extended": "^3.2.3",
"markdown-it": "^12.0.4",
"micromatch": "^4.0.2",
"nodemon": "^3.1.7",
"rimraf": "^3.0.2",
"ts-jest": "^29.1.1",
"tslib": "^2.0.0",
"typescript": "^4.9.5",
"vscode-test": "^1.3.0",
"wait-for-expect": "^3.0.2"
},
"dependencies": {
"dateformat": "4.5.1",
"dayjs": "^1.11.13",
"detect-newline": "^3.1.0",
"github-slugger": "^1.4.0",
"gray-matter": "^4.0.2",
"js-sha1": "^0.7.0",
"lodash": "^4.17.21",
"lru-cache": "^7.14.1",
"markdown-it-regex": "^0.2.0",
"mnemonist": "^0.39.8",
"path-browserify": "^1.0.1",
"remark-frontmatter": "^2.0.0",
"remark-parse": "^8.0.2",
"remark-wiki-link": "^0.0.4",
"title-case": "^3.0.2",
"unified": "^9.0.0",
"unist-util-visit": "^2.0.2",
"yaml": "^2.2.2"
},
"__metadata": {
"id": "b85c6625-454b-4b61-8a22-c42f3d0f2e1e",
"publisherDisplayName": "Foam",
"publisherId": "34339645-24f0-4619-9917-12157fd92446",
"isPreReleaseVersion": false
}
}