import Plugin from '../Plugin'; import JoplinData from './JoplinData'; import JoplinPlugins from './JoplinPlugins'; import JoplinWorkspace from './JoplinWorkspace'; import JoplinFilters from './JoplinFilters'; import JoplinCommands from './JoplinCommands'; import JoplinViews from './JoplinViews'; import JoplinInterop from './JoplinInterop'; import JoplinSettings from './JoplinSettings'; import JoplinContentScripts from './JoplinContentScripts'; /** * This is the main entry point to the Joplin API. You can access various services using the provided accessors. * * **This is a beta API** * * Please note that the plugin API is relatively new and should be considered Beta state. Besides possible bugs, what it means is that there might be necessary breaking changes from one version to the next. Whenever such change is needed, best effort will be done to: * * - Maintain backward compatibility; * - When possible, deprecate features instead of removing them; * - Document breaking changes in the changelog; * * So if you are developing a plugin, please keep an eye on the changelog as everything will be in there with information about how to update your code. There won't be any major API rewrite or architecture changes, but possibly small tweaks like function signature change, type change, etc. * * Eventually, the plugin API will be versioned to make this process smoother. */ export default class Joplin { private data_: JoplinData = null; private plugins_: JoplinPlugins = null; private workspace_: JoplinWorkspace = null; private filters_: JoplinFilters = null; private commands_: JoplinCommands = null; private views_: JoplinViews = null; private interop_: JoplinInterop = null; private settings_: JoplinSettings = null; private contentScripts_: JoplinContentScripts = null; constructor(implementation: any, plugin: Plugin, store: any) { this.data_ = new JoplinData(); this.plugins_ = new JoplinPlugins(plugin); this.workspace_ = new JoplinWorkspace(store); this.filters_ = new JoplinFilters(); this.commands_ = new JoplinCommands(); this.views_ = new JoplinViews(implementation.views, plugin, store); this.interop_ = new JoplinInterop(); this.settings_ = new JoplinSettings(plugin); this.contentScripts_ = new JoplinContentScripts(plugin); } get data(): JoplinData { return this.data_; } get plugins(): JoplinPlugins { return this.plugins_; } get workspace(): JoplinWorkspace { return this.workspace_; } get contentScripts(): JoplinContentScripts { return this.contentScripts_; } /** * @ignore * * Not sure if it's the best way to hook into the app * so for now disable filters. */ get filters(): JoplinFilters { return this.filters_; } get commands(): JoplinCommands { return this.commands_; } get views(): JoplinViews { return this.views_; } get interop(): JoplinInterop { return this.interop_; } get settings(): JoplinSettings { return this.settings_; } /** * It is not possible to bundle native packages with a plugin, because they * need to work cross-platforms. Instead access to certain useful native * packages is provided using this function. * * Currently these packages are available: * * - [sqlite3](https://www.npmjs.com/package/sqlite3) * - [fs-extra](https://www.npmjs.com/package/fs-extra) * * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/nativeModule) */ public require(_path: string): any { // Just a stub. Implementation has to be done within plugin process, in plugin_index.js } }