diff --git a/.eslintignore b/.eslintignore index 0416f3f970..2fe9c66cdb 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,359 +1,1255 @@ -*.min.js -.git/ -.github/ _mydocs/ _releases/ +.git/ +.github/ +*.min.js +**/node_modules/ Assets/ -CliClient/build -CliClient/locales -CliClient/locales-build -CliClient/node_modules -CliClient/tests-build -CliClient/tests/enex_to_md -CliClient/tests/html_to_md -CliClient/tests/logs -CliClient/tests/support -CliClient/tests/sync -CliClient/tests/tmp -Clipper/content_scripts/JSDOMParser.js -Clipper/content_scripts/Readability-readerable.js -Clipper/content_scripts/Readability.js -Clipper/dist -Clipper/icons -Clipper/popup/build -Clipper/popup/config/webpack.config.js -Clipper/popup/config/webpack_config_at_eject_time.js -Clipper/popup/node_modules -Clipper/popup/scripts/build.js docs/ -ElectronClient/dist -ElectronClient/lib -ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/plugins/lists.js -ElectronClient/lib/vendor/sjcl-rn.js -ElectronClient/lib/vendor/sjcl.js -ElectronClient/locales -ElectronClient/node_modules -ElectronClient/packageInfo.js -ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/supportedLocales.js highlight.pack.js -Modules/TinyMCE/JoplinLists/ -node_modules/ -ReactNativeClient/android -ReactNativeClient/ios -ReactNativeClient/lib/joplin-renderer/assets/ -ReactNativeClient/lib/joplin-renderer/vendor/fountain.min.js -ReactNativeClient/lib/rnInjectedJs/ -ReactNativeClient/lib/vendor/ -ReactNativeClient/lib/welcomeAssets.js -ReactNativeClient/locales -ReactNativeClient/node_modules -ReactNativeClient/pluginAssets/ -readme/ -Server/.git/ -Server/.github/ -Server/bin/ -Server/dist/ -Server/docs/ -Server/node_modules/ -Tools/node_modules -Tools/PortableAppsLauncher Modules/TinyMCE/IconPack/postinstall.js +Modules/TinyMCE/JoplinLists/ Modules/TinyMCE/langs/ -CliClient/build/ +node_modules/ +packages/lib/lib/lib.js +packages/lib/locales/index.js +packages/app-cli/build +packages/app-cli/build/ +packages/app-cli/locales +packages/app-cli/locales-build +packages/app-cli/node_modules +packages/app-cli/tests-build +packages/app-cli/tests/enex_to_md +packages/app-cli/tests/html_to_md +packages/app-cli/tests/logs +packages/app-cli/tests/support +packages/app-cli/tests/sync +packages/app-cli/tests/tmp +packages/app-clipper/content_scripts/JSDOMParser.js +packages/app-clipper/content_scripts/Readability-readerable.js +packages/app-clipper/content_scripts/Readability.js +packages/app-clipper/dist +packages/app-clipper/icons +packages/app-clipper/popup/build +packages/app-clipper/popup/config/webpack_config_at_eject_time.js +packages/app-clipper/popup/config/webpack.config.js +packages/app-clipper/popup/node_modules +packages/app-clipper/popup/scripts/build.js +packages/app-desktop/dist +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/plugins/lists.js +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/supportedLocales.js +packages/app-desktop/locales +packages/app-desktop/node_modules +packages/app-desktop/packageInfo.js +packages/app-mobile/android +packages/app-mobile/ios +packages/app-mobile/locales +packages/app-mobile/node_modules +packages/app-mobile/pluginAssets/ +packages/lib/assets/ +packages/lib/rnInjectedJs/ +packages/lib/vendor/ +packages/lib/vendor/fountain.min.js +packages/lib/welcomeAssets.js +packages/tools/node_modules +packages/tools/PortableAppsLauncher +packages/fork-* +plugin_types/ +readme/ # AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD -CliClient/app/LinkSelector.js -CliClient/app/services/plugins/PluginRunner.js -CliClient/tests/fsDriver.js -CliClient/tests/InMemoryCache.js -CliClient/tests/MdToHtml.js -CliClient/tests/models_Setting.js -CliClient/tests/services_CommandService.js -CliClient/tests/services_InteropService.js -CliClient/tests/services_keychainService.js -CliClient/tests/services_PluginService.js -CliClient/tests/services_rest_Api.js -CliClient/tests/services/plugins/api/JoplinSetting.js -CliClient/tests/services/plugins/sandboxProxy.js -CliClient/tests/synchronizer_LockHandler.js -CliClient/tests/synchronizer_MigrationHandler.js -ElectronClient/app.js -ElectronClient/bridge.js -ElectronClient/commands/copyDevCommand.js -ElectronClient/commands/focusElement.js -ElectronClient/commands/openProfileDirectory.js -ElectronClient/commands/startExternalEditing.js -ElectronClient/commands/stopExternalEditing.js -ElectronClient/commands/toggleExternalEditing.js -ElectronClient/ElectronAppWrapper.js -ElectronClient/global.d.js -ElectronClient/gui/Button/Button.js -ElectronClient/gui/ConfigScreen/ButtonBar.js -ElectronClient/gui/ConfigScreen/ConfigScreen.js -ElectronClient/gui/ConfigScreen/SideBar.js -ElectronClient/gui/DropboxLoginScreen.js -ElectronClient/gui/ErrorBoundary.js -ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js -ElectronClient/gui/KeymapConfig/ShortcutRecorder.js -ElectronClient/gui/KeymapConfig/styles/index.js -ElectronClient/gui/KeymapConfig/utils/getLabel.js -ElectronClient/gui/KeymapConfig/utils/useCommandStatus.js -ElectronClient/gui/KeymapConfig/utils/useKeymap.js -ElectronClient/gui/MainScreen/commands/editAlarm.js -ElectronClient/gui/MainScreen/commands/exportPdf.js -ElectronClient/gui/MainScreen/commands/hideModalMessage.js -ElectronClient/gui/MainScreen/commands/moveToFolder.js -ElectronClient/gui/MainScreen/commands/newFolder.js -ElectronClient/gui/MainScreen/commands/newNote.js -ElectronClient/gui/MainScreen/commands/newSubFolder.js -ElectronClient/gui/MainScreen/commands/newTodo.js -ElectronClient/gui/MainScreen/commands/openFolder.js -ElectronClient/gui/MainScreen/commands/openNote.js -ElectronClient/gui/MainScreen/commands/openTag.js -ElectronClient/gui/MainScreen/commands/print.js -ElectronClient/gui/MainScreen/commands/renameFolder.js -ElectronClient/gui/MainScreen/commands/renameTag.js -ElectronClient/gui/MainScreen/commands/search.js -ElectronClient/gui/MainScreen/commands/selectTemplate.js -ElectronClient/gui/MainScreen/commands/setTags.js -ElectronClient/gui/MainScreen/commands/showModalMessage.js -ElectronClient/gui/MainScreen/commands/showNoteContentProperties.js -ElectronClient/gui/MainScreen/commands/showNoteProperties.js -ElectronClient/gui/MainScreen/commands/showShareNoteDialog.js -ElectronClient/gui/MainScreen/commands/toggleEditors.js -ElectronClient/gui/MainScreen/commands/toggleNoteList.js -ElectronClient/gui/MainScreen/commands/toggleSideBar.js -ElectronClient/gui/MainScreen/commands/toggleVisiblePanes.js -ElectronClient/gui/MainScreen/MainScreen.js -ElectronClient/gui/MenuBar.js -ElectronClient/gui/menuCommandNames.js -ElectronClient/gui/MultiNoteActions.js -ElectronClient/gui/NoteContentPropertiesDialog.js -ElectronClient/gui/NoteEditor/commands/editorCommandDeclarations.js -ElectronClient/gui/NoteEditor/commands/focusElementNoteBody.js -ElectronClient/gui/NoteEditor/commands/focusElementNoteTitle.js -ElectronClient/gui/NoteEditor/commands/showLocalSearch.js -ElectronClient/gui/NoteEditor/commands/showRevisions.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Editor.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js -ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js -ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js -ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js -ElectronClient/gui/NoteEditor/NoteEditor.js -ElectronClient/gui/NoteEditor/styles/index.js -ElectronClient/gui/NoteEditor/utils/contextMenu.js -ElectronClient/gui/NoteEditor/utils/index.js -ElectronClient/gui/NoteEditor/utils/resourceHandling.js -ElectronClient/gui/NoteEditor/utils/types.js -ElectronClient/gui/NoteEditor/utils/useDropHandler.js -ElectronClient/gui/NoteEditor/utils/useFolder.js -ElectronClient/gui/NoteEditor/utils/useFormNote.js -ElectronClient/gui/NoteEditor/utils/useMarkupToHtml.js -ElectronClient/gui/NoteEditor/utils/useMessageHandler.js -ElectronClient/gui/NoteEditor/utils/useNoteSearchBar.js -ElectronClient/gui/NoteEditor/utils/usePluginServiceRegistration.js -ElectronClient/gui/NoteEditor/utils/useSearchMarkers.js -ElectronClient/gui/NoteEditor/utils/useWindowCommandHandler.js -ElectronClient/gui/NoteList/commands/focusElementNoteList.js -ElectronClient/gui/NoteList/NoteList.js -ElectronClient/gui/NoteListControls/commands/focusSearch.js -ElectronClient/gui/NoteListControls/NoteListControls.js -ElectronClient/gui/NoteListItem.js -ElectronClient/gui/NoteTextViewer.js -ElectronClient/gui/NoteToolbar/NoteToolbar.js -ElectronClient/gui/OneDriveLoginScreen.js -ElectronClient/gui/ResizableLayout/hooks/useLayoutItemSizes.js -ElectronClient/gui/ResizableLayout/hooks/useWindowResizeEvent.js -ElectronClient/gui/ResizableLayout/ResizableLayout.js -ElectronClient/gui/ResourceScreen.js -ElectronClient/gui/Root_UpgradeSyncTarget.js -ElectronClient/gui/Root.js -ElectronClient/gui/SearchBar/hooks/useSearch.js -ElectronClient/gui/SearchBar/SearchBar.js -ElectronClient/gui/SearchBar/styles/index.js -ElectronClient/gui/ShareNoteDialog.js -ElectronClient/gui/SideBar/commands/focusElementSideBar.js -ElectronClient/gui/SideBar/SideBar.js -ElectronClient/gui/SideBar/styles/index.js -ElectronClient/gui/StatusScreen/StatusScreen.js -ElectronClient/gui/style/StyledInput.js -ElectronClient/gui/style/StyledTextInput.js -ElectronClient/gui/TagList.js -ElectronClient/gui/ToggleEditorsButton/styles/index.js -ElectronClient/gui/ToggleEditorsButton/ToggleEditorsButton.js -ElectronClient/gui/ToolbarBase.js -ElectronClient/gui/ToolbarButton/styles/index.js -ElectronClient/gui/ToolbarButton/ToolbarButton.js -ElectronClient/gui/utils/NoteListUtils.js -ElectronClient/InteropServiceHelper.js -ElectronClient/plugins/GotoAnything.js -ElectronClient/services/bridge.js -ElectronClient/services/commands/types.js -ElectronClient/services/plugins/hooks/useThemeCss.js -ElectronClient/services/plugins/hooks/useViewIsReady.js -ElectronClient/services/plugins/PlatformImplementation.js -ElectronClient/services/plugins/PluginRunner.js -ElectronClient/services/plugins/UserWebview.js -ElectronClient/services/plugins/UserWebviewDialog.js -ElectronClient/services/plugins/UserWebviewDialogButtonBar.js -ReactNativeClient/lib/AsyncActionQueue.js -ReactNativeClient/lib/BaseApplication.js -ReactNativeClient/lib/checkPermissions.js -ReactNativeClient/lib/commands/historyBackward.js -ReactNativeClient/lib/commands/historyForward.js -ReactNativeClient/lib/commands/synchronize.js -ReactNativeClient/lib/components/BackButtonDialogBox.js -ReactNativeClient/lib/components/CameraView.js -ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnMessage.js -ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnResourceLongPress.js -ReactNativeClient/lib/components/NoteBodyViewer/hooks/useSource.js -ReactNativeClient/lib/components/NoteBodyViewer/NoteBodyViewer.js -ReactNativeClient/lib/components/screens/Note.js -ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.js -ReactNativeClient/lib/components/SelectDateTimeDialog.js -ReactNativeClient/lib/errorUtils.js -ReactNativeClient/lib/eventManager.js -ReactNativeClient/lib/fs-driver-node.js -ReactNativeClient/lib/hooks/useEffectDebugger.js -ReactNativeClient/lib/hooks/useImperativeHandlerDebugger.js -ReactNativeClient/lib/hooks/usePrevious.js -ReactNativeClient/lib/hooks/usePropsDebugger.js -ReactNativeClient/lib/InMemoryCache.js -ReactNativeClient/lib/joplin-renderer/MarkupToHtml.js -ReactNativeClient/lib/joplin-renderer/MdToHtml.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/code_inline.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fence.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fountain.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/highlight_keywords.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/html_image.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/image.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/katex.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/link_open.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js -ReactNativeClient/lib/joplin-renderer/noteStyle.js -ReactNativeClient/lib/joplin-renderer/pathUtils.js -ReactNativeClient/lib/JoplinServerApi.js -ReactNativeClient/lib/locale.js -ReactNativeClient/lib/Logger.js -ReactNativeClient/lib/markdownUtils.js -ReactNativeClient/lib/markupLanguageUtils.js -ReactNativeClient/lib/models/Alarm.js -ReactNativeClient/lib/models/Setting.js -ReactNativeClient/lib/ntpDate.js -ReactNativeClient/lib/path-utils.js -ReactNativeClient/lib/PoorManIntervals.js -ReactNativeClient/lib/reducer.js -ReactNativeClient/lib/services/AlarmService.js -ReactNativeClient/lib/services/AlarmServiceDriver.android.js -ReactNativeClient/lib/services/AlarmServiceDriver.ios.js -ReactNativeClient/lib/services/AlarmServiceDriverNode.js -ReactNativeClient/lib/services/BaseService.js -ReactNativeClient/lib/services/commands/commandsToMarkdownTable.js -ReactNativeClient/lib/services/commands/MenuUtils.js -ReactNativeClient/lib/services/commands/propsHaveChanged.js -ReactNativeClient/lib/services/commands/stateToWhenClauseContext.js -ReactNativeClient/lib/services/commands/ToolbarButtonUtils.js -ReactNativeClient/lib/services/CommandService.js -ReactNativeClient/lib/services/contextkey/contextkey.js -ReactNativeClient/lib/services/debug/populateDatabase.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Base.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Custom.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Html.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Jex.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Md.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Raw.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Base.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Custom.js -ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToHtml.js -ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToMd.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Jex.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Md.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Raw.js -ReactNativeClient/lib/services/interop/InteropService.js -ReactNativeClient/lib/services/interop/types.js -ReactNativeClient/lib/services/keychain/KeychainService.js -ReactNativeClient/lib/services/keychain/KeychainServiceDriver.dummy.js -ReactNativeClient/lib/services/keychain/KeychainServiceDriver.mobile.js -ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.js -ReactNativeClient/lib/services/keychain/KeychainServiceDriverBase.js -ReactNativeClient/lib/services/KeymapService.js -ReactNativeClient/lib/services/plugins/api/Global.js -ReactNativeClient/lib/services/plugins/api/Joplin.js -ReactNativeClient/lib/services/plugins/api/JoplinCommands.js -ReactNativeClient/lib/services/plugins/api/JoplinData.js -ReactNativeClient/lib/services/plugins/api/JoplinFilters.js -ReactNativeClient/lib/services/plugins/api/JoplinInterop.js -ReactNativeClient/lib/services/plugins/api/JoplinPlugins.js -ReactNativeClient/lib/services/plugins/api/JoplinSettings.js -ReactNativeClient/lib/services/plugins/api/JoplinViews.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsMenus.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.js -ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.js -ReactNativeClient/lib/services/plugins/api/types.js -ReactNativeClient/lib/services/plugins/BasePluginRunner.js -ReactNativeClient/lib/services/plugins/MenuController.js -ReactNativeClient/lib/services/plugins/MenuItemController.js -ReactNativeClient/lib/services/plugins/Plugin.js -ReactNativeClient/lib/services/plugins/PluginService.js -ReactNativeClient/lib/services/plugins/reducer.js -ReactNativeClient/lib/services/plugins/sandboxProxy.js -ReactNativeClient/lib/services/plugins/ToolbarButtonController.js -ReactNativeClient/lib/services/plugins/utils/contentScriptsToRendererRules.js -ReactNativeClient/lib/services/plugins/utils/createViewHandle.js -ReactNativeClient/lib/services/plugins/utils/executeSandboxCall.js -ReactNativeClient/lib/services/plugins/utils/manifestFromObject.js -ReactNativeClient/lib/services/plugins/utils/mapEventHandlersToIds.js -ReactNativeClient/lib/services/plugins/utils/types.js -ReactNativeClient/lib/services/plugins/ViewController.js -ReactNativeClient/lib/services/plugins/WebviewController.js -ReactNativeClient/lib/services/ResourceEditWatcher/index.js -ReactNativeClient/lib/services/ResourceEditWatcher/reducer.js -ReactNativeClient/lib/services/rest/actionApi.desktop.js -ReactNativeClient/lib/services/rest/Api.js -ReactNativeClient/lib/services/rest/errors.js -ReactNativeClient/lib/services/searchengine/filterParser.js -ReactNativeClient/lib/services/searchengine/queryBuilder.js -ReactNativeClient/lib/services/SettingUtils.js -ReactNativeClient/lib/services/synchronizer/gui/useSyncTargetUpgrade.js -ReactNativeClient/lib/services/synchronizer/LockHandler.js -ReactNativeClient/lib/services/synchronizer/MigrationHandler.js -ReactNativeClient/lib/services/synchronizer/migrations/1.js -ReactNativeClient/lib/services/synchronizer/migrations/2.js -ReactNativeClient/lib/services/synchronizer/utils/types.js -ReactNativeClient/lib/services/UndoRedoService.js -ReactNativeClient/lib/services/WhenClause.js -ReactNativeClient/lib/ShareExtension.js -ReactNativeClient/lib/shareHandler.js -ReactNativeClient/lib/shim.js -ReactNativeClient/lib/Synchronizer.js -ReactNativeClient/lib/theme.js -ReactNativeClient/lib/themes/aritimDark.js -ReactNativeClient/lib/themes/dark.js -ReactNativeClient/lib/themes/dracula.js -ReactNativeClient/lib/themes/light.js -ReactNativeClient/lib/themes/nord.js -ReactNativeClient/lib/themes/oledDark.js -ReactNativeClient/lib/themes/solarizedDark.js -ReactNativeClient/lib/themes/solarizedLight.js -ReactNativeClient/lib/themes/type.js -ReactNativeClient/lib/uuid.js -ReactNativeClient/lib/versionInfo.js -ReactNativeClient/PluginAssetsLoader.js -ReactNativeClient/setUpQuickActions.js +Assets/TinyMCE/JoplinLists/src/main/ts/Main.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/Main.js +Assets/TinyMCE/JoplinLists/src/main/ts/Main.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/Plugin.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/Plugin.js +Assets/TinyMCE/JoplinLists/src/main/ts/Plugin.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/actions/Indendation.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/actions/Indendation.js +Assets/TinyMCE/JoplinLists/src/main/ts/actions/Indendation.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/actions/ToggleList.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/actions/ToggleList.js +Assets/TinyMCE/JoplinLists/src/main/ts/actions/ToggleList.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/api/Api.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/api/Api.js +Assets/TinyMCE/JoplinLists/src/main/ts/api/Api.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/api/Commands.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/api/Commands.js +Assets/TinyMCE/JoplinLists/src/main/ts/api/Commands.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/api/Events.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/api/Events.js +Assets/TinyMCE/JoplinLists/src/main/ts/api/Events.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/api/Settings.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/api/Settings.js +Assets/TinyMCE/JoplinLists/src/main/ts/api/Settings.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Bookmark.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Bookmark.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Bookmark.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Delete.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Delete.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Delete.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/DlIndentation.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/DlIndentation.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/DlIndentation.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Keyboard.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Keyboard.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Keyboard.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/ListAction.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/ListAction.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/ListAction.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/NodeType.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/NodeType.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/NodeType.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/NormalizeLists.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/NormalizeLists.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/NormalizeLists.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Range.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Range.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Range.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Selection.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Selection.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Selection.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/SplitList.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/SplitList.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/SplitList.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/TextBlock.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/TextBlock.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/TextBlock.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Util.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Util.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Util.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ComposeList.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ComposeList.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ComposeList.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Entry.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Entry.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Entry.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Indentation.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Indentation.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Indentation.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/JoplinListUtil.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/JoplinListUtil.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/JoplinListUtil.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ListsIndendation.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ListsIndendation.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ListsIndendation.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/NormalizeEntries.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/NormalizeEntries.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/NormalizeEntries.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ParseLists.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ParseLists.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ParseLists.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Util.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Util.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Util.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.js +Assets/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.js.map +packages/app-cli/app/LinkSelector.d.ts +packages/app-cli/app/LinkSelector.js +packages/app-cli/app/LinkSelector.js.map +packages/app-cli/app/services/plugins/PluginRunner.d.ts +packages/app-cli/app/services/plugins/PluginRunner.js +packages/app-cli/app/services/plugins/PluginRunner.js.map +packages/app-cli/build/LinkSelector.d.ts +packages/app-cli/build/LinkSelector.js +packages/app-cli/build/LinkSelector.js.map +packages/app-cli/build/services/plugins/PluginRunner.d.ts +packages/app-cli/build/services/plugins/PluginRunner.js +packages/app-cli/build/services/plugins/PluginRunner.js.map +packages/app-cli/tests/InMemoryCache.d.ts +packages/app-cli/tests/InMemoryCache.js +packages/app-cli/tests/InMemoryCache.js.map +packages/app-cli/tests/MdToHtml.d.ts +packages/app-cli/tests/MdToHtml.js +packages/app-cli/tests/MdToHtml.js.map +packages/app-cli/tests/fsDriver.d.ts +packages/app-cli/tests/fsDriver.js +packages/app-cli/tests/fsDriver.js.map +packages/app-cli/tests/models_Setting.d.ts +packages/app-cli/tests/models_Setting.js +packages/app-cli/tests/models_Setting.js.map +packages/app-cli/tests/services/plugins/api/JoplinSetting.d.ts +packages/app-cli/tests/services/plugins/api/JoplinSetting.js +packages/app-cli/tests/services/plugins/api/JoplinSetting.js.map +packages/app-cli/tests/services/plugins/sandboxProxy.d.ts +packages/app-cli/tests/services/plugins/sandboxProxy.js +packages/app-cli/tests/services/plugins/sandboxProxy.js.map +packages/app-cli/tests/services_CommandService.d.ts +packages/app-cli/tests/services_CommandService.js +packages/app-cli/tests/services_CommandService.js.map +packages/app-cli/tests/services_InteropService.d.ts +packages/app-cli/tests/services_InteropService.js +packages/app-cli/tests/services_InteropService.js.map +packages/app-cli/tests/services_PluginService.d.ts +packages/app-cli/tests/services_PluginService.js +packages/app-cli/tests/services_PluginService.js.map +packages/app-cli/tests/services_keychainService.d.ts +packages/app-cli/tests/services_keychainService.js +packages/app-cli/tests/services_keychainService.js.map +packages/app-cli/tests/services_rest_Api.d.ts +packages/app-cli/tests/services_rest_Api.js +packages/app-cli/tests/services_rest_Api.js.map +packages/app-cli/tests/support/plugins/content_script/api/index.d.ts +packages/app-cli/tests/support/plugins/content_script/api/index.js +packages/app-cli/tests/support/plugins/content_script/api/index.js.map +packages/app-cli/tests/support/plugins/content_script/api/types.d.ts +packages/app-cli/tests/support/plugins/content_script/api/types.js +packages/app-cli/tests/support/plugins/content_script/api/types.js.map +packages/app-cli/tests/support/plugins/content_script/src/index.d.ts +packages/app-cli/tests/support/plugins/content_script/src/index.js +packages/app-cli/tests/support/plugins/content_script/src/index.js.map +packages/app-cli/tests/support/plugins/dialog/api/index.d.ts +packages/app-cli/tests/support/plugins/dialog/api/index.js +packages/app-cli/tests/support/plugins/dialog/api/index.js.map +packages/app-cli/tests/support/plugins/dialog/api/types.d.ts +packages/app-cli/tests/support/plugins/dialog/api/types.js +packages/app-cli/tests/support/plugins/dialog/api/types.js.map +packages/app-cli/tests/support/plugins/dialog/src/index.d.ts +packages/app-cli/tests/support/plugins/dialog/src/index.js +packages/app-cli/tests/support/plugins/dialog/src/index.js.map +packages/app-cli/tests/support/plugins/events/api/index.d.ts +packages/app-cli/tests/support/plugins/events/api/index.js +packages/app-cli/tests/support/plugins/events/api/index.js.map +packages/app-cli/tests/support/plugins/events/api/types.d.ts +packages/app-cli/tests/support/plugins/events/api/types.js +packages/app-cli/tests/support/plugins/events/api/types.js.map +packages/app-cli/tests/support/plugins/events/src/index.d.ts +packages/app-cli/tests/support/plugins/events/src/index.js +packages/app-cli/tests/support/plugins/events/src/index.js.map +packages/app-cli/tests/support/plugins/json_export/api/index.d.ts +packages/app-cli/tests/support/plugins/json_export/api/index.js +packages/app-cli/tests/support/plugins/json_export/api/index.js.map +packages/app-cli/tests/support/plugins/json_export/api/types.d.ts +packages/app-cli/tests/support/plugins/json_export/api/types.js +packages/app-cli/tests/support/plugins/json_export/api/types.js.map +packages/app-cli/tests/support/plugins/json_export/src/index.d.ts +packages/app-cli/tests/support/plugins/json_export/src/index.js +packages/app-cli/tests/support/plugins/json_export/src/index.js.map +packages/app-cli/tests/support/plugins/menu/api/index.d.ts +packages/app-cli/tests/support/plugins/menu/api/index.js +packages/app-cli/tests/support/plugins/menu/api/index.js.map +packages/app-cli/tests/support/plugins/menu/api/types.d.ts +packages/app-cli/tests/support/plugins/menu/api/types.js +packages/app-cli/tests/support/plugins/menu/api/types.js.map +packages/app-cli/tests/support/plugins/menu/src/index.d.ts +packages/app-cli/tests/support/plugins/menu/src/index.js +packages/app-cli/tests/support/plugins/menu/src/index.js.map +packages/app-cli/tests/support/plugins/multi_selection/api/index.d.ts +packages/app-cli/tests/support/plugins/multi_selection/api/index.js +packages/app-cli/tests/support/plugins/multi_selection/api/index.js.map +packages/app-cli/tests/support/plugins/multi_selection/api/types.d.ts +packages/app-cli/tests/support/plugins/multi_selection/api/types.js +packages/app-cli/tests/support/plugins/multi_selection/api/types.js.map +packages/app-cli/tests/support/plugins/multi_selection/src/index.d.ts +packages/app-cli/tests/support/plugins/multi_selection/src/index.js +packages/app-cli/tests/support/plugins/multi_selection/src/index.js.map +packages/app-cli/tests/support/plugins/register_command/api/index.d.ts +packages/app-cli/tests/support/plugins/register_command/api/index.js +packages/app-cli/tests/support/plugins/register_command/api/index.js.map +packages/app-cli/tests/support/plugins/register_command/api/types.d.ts +packages/app-cli/tests/support/plugins/register_command/api/types.js +packages/app-cli/tests/support/plugins/register_command/api/types.js.map +packages/app-cli/tests/support/plugins/register_command/src/index.d.ts +packages/app-cli/tests/support/plugins/register_command/src/index.js +packages/app-cli/tests/support/plugins/register_command/src/index.js.map +packages/app-cli/tests/support/plugins/selected_text/api/index.d.ts +packages/app-cli/tests/support/plugins/selected_text/api/index.js +packages/app-cli/tests/support/plugins/selected_text/api/index.js.map +packages/app-cli/tests/support/plugins/selected_text/api/types.d.ts +packages/app-cli/tests/support/plugins/selected_text/api/types.js +packages/app-cli/tests/support/plugins/selected_text/api/types.js.map +packages/app-cli/tests/support/plugins/selected_text/src/index.d.ts +packages/app-cli/tests/support/plugins/selected_text/src/index.js +packages/app-cli/tests/support/plugins/selected_text/src/index.js.map +packages/app-cli/tests/support/plugins/settings/api/index.d.ts +packages/app-cli/tests/support/plugins/settings/api/index.js +packages/app-cli/tests/support/plugins/settings/api/index.js.map +packages/app-cli/tests/support/plugins/settings/api/types.d.ts +packages/app-cli/tests/support/plugins/settings/api/types.js +packages/app-cli/tests/support/plugins/settings/api/types.js.map +packages/app-cli/tests/support/plugins/settings/src/index.d.ts +packages/app-cli/tests/support/plugins/settings/src/index.js +packages/app-cli/tests/support/plugins/settings/src/index.js.map +packages/app-cli/tests/support/plugins/toc/api/index.d.ts +packages/app-cli/tests/support/plugins/toc/api/index.js +packages/app-cli/tests/support/plugins/toc/api/index.js.map +packages/app-cli/tests/support/plugins/toc/api/types.d.ts +packages/app-cli/tests/support/plugins/toc/api/types.js +packages/app-cli/tests/support/plugins/toc/api/types.js.map +packages/app-cli/tests/support/plugins/toc/src/index.d.ts +packages/app-cli/tests/support/plugins/toc/src/index.js +packages/app-cli/tests/support/plugins/toc/src/index.js.map +packages/app-cli/tests/support/plugins/withExternalModules/api/index.d.ts +packages/app-cli/tests/support/plugins/withExternalModules/api/index.js +packages/app-cli/tests/support/plugins/withExternalModules/api/index.js.map +packages/app-cli/tests/support/plugins/withExternalModules/api/types.d.ts +packages/app-cli/tests/support/plugins/withExternalModules/api/types.js +packages/app-cli/tests/support/plugins/withExternalModules/api/types.js.map +packages/app-cli/tests/support/plugins/withExternalModules/src/index.d.ts +packages/app-cli/tests/support/plugins/withExternalModules/src/index.js +packages/app-cli/tests/support/plugins/withExternalModules/src/index.js.map +packages/app-cli/tests/synchronizer_LockHandler.d.ts +packages/app-cli/tests/synchronizer_LockHandler.js +packages/app-cli/tests/synchronizer_LockHandler.js.map +packages/app-cli/tests/synchronizer_MigrationHandler.d.ts +packages/app-cli/tests/synchronizer_MigrationHandler.js +packages/app-cli/tests/synchronizer_MigrationHandler.js.map +packages/app-desktop/ElectronAppWrapper.d.ts +packages/app-desktop/ElectronAppWrapper.js +packages/app-desktop/ElectronAppWrapper.js.map +packages/app-desktop/InteropServiceHelper.d.ts +packages/app-desktop/InteropServiceHelper.js +packages/app-desktop/InteropServiceHelper.js.map +packages/app-desktop/app.d.ts +packages/app-desktop/app.js +packages/app-desktop/app.js.map +packages/app-desktop/bridge.d.ts +packages/app-desktop/bridge.js +packages/app-desktop/bridge.js.map +packages/app-desktop/commands/copyDevCommand.d.ts +packages/app-desktop/commands/copyDevCommand.js +packages/app-desktop/commands/copyDevCommand.js.map +packages/app-desktop/commands/focusElement.d.ts +packages/app-desktop/commands/focusElement.js +packages/app-desktop/commands/focusElement.js.map +packages/app-desktop/commands/openProfileDirectory.d.ts +packages/app-desktop/commands/openProfileDirectory.js +packages/app-desktop/commands/openProfileDirectory.js.map +packages/app-desktop/commands/startExternalEditing.d.ts +packages/app-desktop/commands/startExternalEditing.js +packages/app-desktop/commands/startExternalEditing.js.map +packages/app-desktop/commands/stopExternalEditing.d.ts +packages/app-desktop/commands/stopExternalEditing.js +packages/app-desktop/commands/stopExternalEditing.js.map +packages/app-desktop/commands/toggleExternalEditing.d.ts +packages/app-desktop/commands/toggleExternalEditing.js +packages/app-desktop/commands/toggleExternalEditing.js.map +packages/app-desktop/gui/Button/Button.d.ts +packages/app-desktop/gui/Button/Button.js +packages/app-desktop/gui/Button/Button.js.map +packages/app-desktop/gui/ConfigScreen/ButtonBar.d.ts +packages/app-desktop/gui/ConfigScreen/ButtonBar.js +packages/app-desktop/gui/ConfigScreen/ButtonBar.js.map +packages/app-desktop/gui/ConfigScreen/ConfigScreen.d.ts +packages/app-desktop/gui/ConfigScreen/ConfigScreen.js +packages/app-desktop/gui/ConfigScreen/ConfigScreen.js.map +packages/app-desktop/gui/ConfigScreen/SideBar.d.ts +packages/app-desktop/gui/ConfigScreen/SideBar.js +packages/app-desktop/gui/ConfigScreen/SideBar.js.map +packages/app-desktop/gui/DropboxLoginScreen.d.ts +packages/app-desktop/gui/DropboxLoginScreen.js +packages/app-desktop/gui/DropboxLoginScreen.js.map +packages/app-desktop/gui/ErrorBoundary.d.ts +packages/app-desktop/gui/ErrorBoundary.js +packages/app-desktop/gui/ErrorBoundary.js.map +packages/app-desktop/gui/KeymapConfig/KeymapConfigScreen.d.ts +packages/app-desktop/gui/KeymapConfig/KeymapConfigScreen.js +packages/app-desktop/gui/KeymapConfig/KeymapConfigScreen.js.map +packages/app-desktop/gui/KeymapConfig/ShortcutRecorder.d.ts +packages/app-desktop/gui/KeymapConfig/ShortcutRecorder.js +packages/app-desktop/gui/KeymapConfig/ShortcutRecorder.js.map +packages/app-desktop/gui/KeymapConfig/styles/index.d.ts +packages/app-desktop/gui/KeymapConfig/styles/index.js +packages/app-desktop/gui/KeymapConfig/styles/index.js.map +packages/app-desktop/gui/KeymapConfig/utils/getLabel.d.ts +packages/app-desktop/gui/KeymapConfig/utils/getLabel.js +packages/app-desktop/gui/KeymapConfig/utils/getLabel.js.map +packages/app-desktop/gui/KeymapConfig/utils/useCommandStatus.d.ts +packages/app-desktop/gui/KeymapConfig/utils/useCommandStatus.js +packages/app-desktop/gui/KeymapConfig/utils/useCommandStatus.js.map +packages/app-desktop/gui/KeymapConfig/utils/useKeymap.d.ts +packages/app-desktop/gui/KeymapConfig/utils/useKeymap.js +packages/app-desktop/gui/KeymapConfig/utils/useKeymap.js.map +packages/app-desktop/gui/MainScreen/MainScreen.d.ts +packages/app-desktop/gui/MainScreen/MainScreen.js +packages/app-desktop/gui/MainScreen/MainScreen.js.map +packages/app-desktop/gui/MainScreen/commands/editAlarm.d.ts +packages/app-desktop/gui/MainScreen/commands/editAlarm.js +packages/app-desktop/gui/MainScreen/commands/editAlarm.js.map +packages/app-desktop/gui/MainScreen/commands/exportPdf.d.ts +packages/app-desktop/gui/MainScreen/commands/exportPdf.js +packages/app-desktop/gui/MainScreen/commands/exportPdf.js.map +packages/app-desktop/gui/MainScreen/commands/hideModalMessage.d.ts +packages/app-desktop/gui/MainScreen/commands/hideModalMessage.js +packages/app-desktop/gui/MainScreen/commands/hideModalMessage.js.map +packages/app-desktop/gui/MainScreen/commands/moveToFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/moveToFolder.js +packages/app-desktop/gui/MainScreen/commands/moveToFolder.js.map +packages/app-desktop/gui/MainScreen/commands/newFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/newFolder.js +packages/app-desktop/gui/MainScreen/commands/newFolder.js.map +packages/app-desktop/gui/MainScreen/commands/newNote.d.ts +packages/app-desktop/gui/MainScreen/commands/newNote.js +packages/app-desktop/gui/MainScreen/commands/newNote.js.map +packages/app-desktop/gui/MainScreen/commands/newSubFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/newSubFolder.js +packages/app-desktop/gui/MainScreen/commands/newSubFolder.js.map +packages/app-desktop/gui/MainScreen/commands/newTodo.d.ts +packages/app-desktop/gui/MainScreen/commands/newTodo.js +packages/app-desktop/gui/MainScreen/commands/newTodo.js.map +packages/app-desktop/gui/MainScreen/commands/openFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/openFolder.js +packages/app-desktop/gui/MainScreen/commands/openFolder.js.map +packages/app-desktop/gui/MainScreen/commands/openNote.d.ts +packages/app-desktop/gui/MainScreen/commands/openNote.js +packages/app-desktop/gui/MainScreen/commands/openNote.js.map +packages/app-desktop/gui/MainScreen/commands/openTag.d.ts +packages/app-desktop/gui/MainScreen/commands/openTag.js +packages/app-desktop/gui/MainScreen/commands/openTag.js.map +packages/app-desktop/gui/MainScreen/commands/print.d.ts +packages/app-desktop/gui/MainScreen/commands/print.js +packages/app-desktop/gui/MainScreen/commands/print.js.map +packages/app-desktop/gui/MainScreen/commands/renameFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/renameFolder.js +packages/app-desktop/gui/MainScreen/commands/renameFolder.js.map +packages/app-desktop/gui/MainScreen/commands/renameTag.d.ts +packages/app-desktop/gui/MainScreen/commands/renameTag.js +packages/app-desktop/gui/MainScreen/commands/renameTag.js.map +packages/app-desktop/gui/MainScreen/commands/search.d.ts +packages/app-desktop/gui/MainScreen/commands/search.js +packages/app-desktop/gui/MainScreen/commands/search.js.map +packages/app-desktop/gui/MainScreen/commands/selectTemplate.d.ts +packages/app-desktop/gui/MainScreen/commands/selectTemplate.js +packages/app-desktop/gui/MainScreen/commands/selectTemplate.js.map +packages/app-desktop/gui/MainScreen/commands/setTags.d.ts +packages/app-desktop/gui/MainScreen/commands/setTags.js +packages/app-desktop/gui/MainScreen/commands/setTags.js.map +packages/app-desktop/gui/MainScreen/commands/showModalMessage.d.ts +packages/app-desktop/gui/MainScreen/commands/showModalMessage.js +packages/app-desktop/gui/MainScreen/commands/showModalMessage.js.map +packages/app-desktop/gui/MainScreen/commands/showNoteContentProperties.d.ts +packages/app-desktop/gui/MainScreen/commands/showNoteContentProperties.js +packages/app-desktop/gui/MainScreen/commands/showNoteContentProperties.js.map +packages/app-desktop/gui/MainScreen/commands/showNoteProperties.d.ts +packages/app-desktop/gui/MainScreen/commands/showNoteProperties.js +packages/app-desktop/gui/MainScreen/commands/showNoteProperties.js.map +packages/app-desktop/gui/MainScreen/commands/showShareNoteDialog.d.ts +packages/app-desktop/gui/MainScreen/commands/showShareNoteDialog.js +packages/app-desktop/gui/MainScreen/commands/showShareNoteDialog.js.map +packages/app-desktop/gui/MainScreen/commands/toggleEditors.d.ts +packages/app-desktop/gui/MainScreen/commands/toggleEditors.js +packages/app-desktop/gui/MainScreen/commands/toggleEditors.js.map +packages/app-desktop/gui/MainScreen/commands/toggleNoteList.d.ts +packages/app-desktop/gui/MainScreen/commands/toggleNoteList.js +packages/app-desktop/gui/MainScreen/commands/toggleNoteList.js.map +packages/app-desktop/gui/MainScreen/commands/toggleSideBar.d.ts +packages/app-desktop/gui/MainScreen/commands/toggleSideBar.js +packages/app-desktop/gui/MainScreen/commands/toggleSideBar.js.map +packages/app-desktop/gui/MainScreen/commands/toggleVisiblePanes.d.ts +packages/app-desktop/gui/MainScreen/commands/toggleVisiblePanes.js +packages/app-desktop/gui/MainScreen/commands/toggleVisiblePanes.js.map +packages/app-desktop/gui/MenuBar.d.ts +packages/app-desktop/gui/MenuBar.js +packages/app-desktop/gui/MenuBar.js.map +packages/app-desktop/gui/MultiNoteActions.d.ts +packages/app-desktop/gui/MultiNoteActions.js +packages/app-desktop/gui/MultiNoteActions.js.map +packages/app-desktop/gui/NoteContentPropertiesDialog.d.ts +packages/app-desktop/gui/NoteContentPropertiesDialog.js +packages/app-desktop/gui/NoteContentPropertiesDialog.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Editor.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Editor.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Editor.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/styles/index.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/index.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/types.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/styles/index.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/setupContextMenu.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/setupContextMenu.js +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/setupContextMenu.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js.map +packages/app-desktop/gui/NoteEditor/NoteEditor.d.ts +packages/app-desktop/gui/NoteEditor/NoteEditor.js +packages/app-desktop/gui/NoteEditor/NoteEditor.js.map +packages/app-desktop/gui/NoteEditor/NoteTitle/NoteTitleBar.d.ts +packages/app-desktop/gui/NoteEditor/NoteTitle/NoteTitleBar.js +packages/app-desktop/gui/NoteEditor/NoteTitle/NoteTitleBar.js.map +packages/app-desktop/gui/NoteEditor/commands/editorCommandDeclarations.d.ts +packages/app-desktop/gui/NoteEditor/commands/editorCommandDeclarations.js +packages/app-desktop/gui/NoteEditor/commands/editorCommandDeclarations.js.map +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteBody.d.ts +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteBody.js +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteBody.js.map +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteTitle.d.ts +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteTitle.js +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteTitle.js.map +packages/app-desktop/gui/NoteEditor/commands/showLocalSearch.d.ts +packages/app-desktop/gui/NoteEditor/commands/showLocalSearch.js +packages/app-desktop/gui/NoteEditor/commands/showLocalSearch.js.map +packages/app-desktop/gui/NoteEditor/commands/showRevisions.d.ts +packages/app-desktop/gui/NoteEditor/commands/showRevisions.js +packages/app-desktop/gui/NoteEditor/commands/showRevisions.js.map +packages/app-desktop/gui/NoteEditor/styles/index.d.ts +packages/app-desktop/gui/NoteEditor/styles/index.js +packages/app-desktop/gui/NoteEditor/styles/index.js.map +packages/app-desktop/gui/NoteEditor/utils/contextMenu.d.ts +packages/app-desktop/gui/NoteEditor/utils/contextMenu.js +packages/app-desktop/gui/NoteEditor/utils/contextMenu.js.map +packages/app-desktop/gui/NoteEditor/utils/index.d.ts +packages/app-desktop/gui/NoteEditor/utils/index.js +packages/app-desktop/gui/NoteEditor/utils/index.js.map +packages/app-desktop/gui/NoteEditor/utils/resourceHandling.d.ts +packages/app-desktop/gui/NoteEditor/utils/resourceHandling.js +packages/app-desktop/gui/NoteEditor/utils/resourceHandling.js.map +packages/app-desktop/gui/NoteEditor/utils/types.d.ts +packages/app-desktop/gui/NoteEditor/utils/types.js +packages/app-desktop/gui/NoteEditor/utils/types.js.map +packages/app-desktop/gui/NoteEditor/utils/useDropHandler.d.ts +packages/app-desktop/gui/NoteEditor/utils/useDropHandler.js +packages/app-desktop/gui/NoteEditor/utils/useDropHandler.js.map +packages/app-desktop/gui/NoteEditor/utils/useFolder.d.ts +packages/app-desktop/gui/NoteEditor/utils/useFolder.js +packages/app-desktop/gui/NoteEditor/utils/useFolder.js.map +packages/app-desktop/gui/NoteEditor/utils/useFormNote.d.ts +packages/app-desktop/gui/NoteEditor/utils/useFormNote.js +packages/app-desktop/gui/NoteEditor/utils/useFormNote.js.map +packages/app-desktop/gui/NoteEditor/utils/useMarkupToHtml.d.ts +packages/app-desktop/gui/NoteEditor/utils/useMarkupToHtml.js +packages/app-desktop/gui/NoteEditor/utils/useMarkupToHtml.js.map +packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.d.ts +packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.js +packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.js.map +packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.d.ts +packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.js +packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.js.map +packages/app-desktop/gui/NoteEditor/utils/usePluginServiceRegistration.d.ts +packages/app-desktop/gui/NoteEditor/utils/usePluginServiceRegistration.js +packages/app-desktop/gui/NoteEditor/utils/usePluginServiceRegistration.js.map +packages/app-desktop/gui/NoteEditor/utils/useSearchMarkers.d.ts +packages/app-desktop/gui/NoteEditor/utils/useSearchMarkers.js +packages/app-desktop/gui/NoteEditor/utils/useSearchMarkers.js.map +packages/app-desktop/gui/NoteEditor/utils/useWindowCommandHandler.d.ts +packages/app-desktop/gui/NoteEditor/utils/useWindowCommandHandler.js +packages/app-desktop/gui/NoteEditor/utils/useWindowCommandHandler.js.map +packages/app-desktop/gui/NoteList/NoteList.d.ts +packages/app-desktop/gui/NoteList/NoteList.js +packages/app-desktop/gui/NoteList/NoteList.js.map +packages/app-desktop/gui/NoteList/commands/focusElementNoteList.d.ts +packages/app-desktop/gui/NoteList/commands/focusElementNoteList.js +packages/app-desktop/gui/NoteList/commands/focusElementNoteList.js.map +packages/app-desktop/gui/NoteListControls/NoteListControls.d.ts +packages/app-desktop/gui/NoteListControls/NoteListControls.js +packages/app-desktop/gui/NoteListControls/NoteListControls.js.map +packages/app-desktop/gui/NoteListControls/commands/focusSearch.d.ts +packages/app-desktop/gui/NoteListControls/commands/focusSearch.js +packages/app-desktop/gui/NoteListControls/commands/focusSearch.js.map +packages/app-desktop/gui/NoteListItem.d.ts +packages/app-desktop/gui/NoteListItem.js +packages/app-desktop/gui/NoteListItem.js.map +packages/app-desktop/gui/NoteTextViewer.d.ts +packages/app-desktop/gui/NoteTextViewer.js +packages/app-desktop/gui/NoteTextViewer.js.map +packages/app-desktop/gui/NoteToolbar/NoteToolbar.d.ts +packages/app-desktop/gui/NoteToolbar/NoteToolbar.js +packages/app-desktop/gui/NoteToolbar/NoteToolbar.js.map +packages/app-desktop/gui/OneDriveLoginScreen.d.ts +packages/app-desktop/gui/OneDriveLoginScreen.js +packages/app-desktop/gui/OneDriveLoginScreen.js.map +packages/app-desktop/gui/ResizableLayout/ResizableLayout.d.ts +packages/app-desktop/gui/ResizableLayout/ResizableLayout.js +packages/app-desktop/gui/ResizableLayout/ResizableLayout.js.map +packages/app-desktop/gui/ResizableLayout/hooks/useLayoutItemSizes.d.ts +packages/app-desktop/gui/ResizableLayout/hooks/useLayoutItemSizes.js +packages/app-desktop/gui/ResizableLayout/hooks/useLayoutItemSizes.js.map +packages/app-desktop/gui/ResizableLayout/hooks/useWindowResizeEvent.d.ts +packages/app-desktop/gui/ResizableLayout/hooks/useWindowResizeEvent.js +packages/app-desktop/gui/ResizableLayout/hooks/useWindowResizeEvent.js.map +packages/app-desktop/gui/ResourceScreen.d.ts +packages/app-desktop/gui/ResourceScreen.js +packages/app-desktop/gui/ResourceScreen.js.map +packages/app-desktop/gui/Root.d.ts +packages/app-desktop/gui/Root.js +packages/app-desktop/gui/Root.js.map +packages/app-desktop/gui/Root_UpgradeSyncTarget.d.ts +packages/app-desktop/gui/Root_UpgradeSyncTarget.js +packages/app-desktop/gui/Root_UpgradeSyncTarget.js.map +packages/app-desktop/gui/SearchBar/SearchBar.d.ts +packages/app-desktop/gui/SearchBar/SearchBar.js +packages/app-desktop/gui/SearchBar/SearchBar.js.map +packages/app-desktop/gui/SearchBar/hooks/useSearch.d.ts +packages/app-desktop/gui/SearchBar/hooks/useSearch.js +packages/app-desktop/gui/SearchBar/hooks/useSearch.js.map +packages/app-desktop/gui/SearchBar/styles/index.d.ts +packages/app-desktop/gui/SearchBar/styles/index.js +packages/app-desktop/gui/SearchBar/styles/index.js.map +packages/app-desktop/gui/ShareNoteDialog.d.ts +packages/app-desktop/gui/ShareNoteDialog.js +packages/app-desktop/gui/ShareNoteDialog.js.map +packages/app-desktop/gui/SideBar/SideBar.d.ts +packages/app-desktop/gui/SideBar/SideBar.js +packages/app-desktop/gui/SideBar/SideBar.js.map +packages/app-desktop/gui/SideBar/commands/focusElementSideBar.d.ts +packages/app-desktop/gui/SideBar/commands/focusElementSideBar.js +packages/app-desktop/gui/SideBar/commands/focusElementSideBar.js.map +packages/app-desktop/gui/SideBar/styles/index.d.ts +packages/app-desktop/gui/SideBar/styles/index.js +packages/app-desktop/gui/SideBar/styles/index.js.map +packages/app-desktop/gui/StatusScreen/StatusScreen.d.ts +packages/app-desktop/gui/StatusScreen/StatusScreen.js +packages/app-desktop/gui/StatusScreen/StatusScreen.js.map +packages/app-desktop/gui/TagList.d.ts +packages/app-desktop/gui/TagList.js +packages/app-desktop/gui/TagList.js.map +packages/app-desktop/gui/ToggleEditorsButton/ToggleEditorsButton.d.ts +packages/app-desktop/gui/ToggleEditorsButton/ToggleEditorsButton.js +packages/app-desktop/gui/ToggleEditorsButton/ToggleEditorsButton.js.map +packages/app-desktop/gui/ToggleEditorsButton/styles/index.d.ts +packages/app-desktop/gui/ToggleEditorsButton/styles/index.js +packages/app-desktop/gui/ToggleEditorsButton/styles/index.js.map +packages/app-desktop/gui/ToolbarBase.d.ts +packages/app-desktop/gui/ToolbarBase.js +packages/app-desktop/gui/ToolbarBase.js.map +packages/app-desktop/gui/ToolbarButton/ToolbarButton.d.ts +packages/app-desktop/gui/ToolbarButton/ToolbarButton.js +packages/app-desktop/gui/ToolbarButton/ToolbarButton.js.map +packages/app-desktop/gui/ToolbarButton/styles/index.d.ts +packages/app-desktop/gui/ToolbarButton/styles/index.js +packages/app-desktop/gui/ToolbarButton/styles/index.js.map +packages/app-desktop/gui/hooks/useEffectDebugger.d.ts +packages/app-desktop/gui/hooks/useEffectDebugger.js +packages/app-desktop/gui/hooks/useEffectDebugger.js.map +packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.d.ts +packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.js +packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.js.map +packages/app-desktop/gui/hooks/usePrevious.d.ts +packages/app-desktop/gui/hooks/usePrevious.js +packages/app-desktop/gui/hooks/usePrevious.js.map +packages/app-desktop/gui/hooks/usePropsDebugger.d.ts +packages/app-desktop/gui/hooks/usePropsDebugger.js +packages/app-desktop/gui/hooks/usePropsDebugger.js.map +packages/app-desktop/gui/menuCommandNames.d.ts +packages/app-desktop/gui/menuCommandNames.js +packages/app-desktop/gui/menuCommandNames.js.map +packages/app-desktop/gui/style/StyledInput.d.ts +packages/app-desktop/gui/style/StyledInput.js +packages/app-desktop/gui/style/StyledInput.js.map +packages/app-desktop/gui/style/StyledTextInput.d.ts +packages/app-desktop/gui/style/StyledTextInput.js +packages/app-desktop/gui/style/StyledTextInput.js.map +packages/app-desktop/gui/utils/NoteListUtils.d.ts +packages/app-desktop/gui/utils/NoteListUtils.js +packages/app-desktop/gui/utils/NoteListUtils.js.map +packages/app-desktop/plugins/GotoAnything.d.ts +packages/app-desktop/plugins/GotoAnything.js +packages/app-desktop/plugins/GotoAnything.js.map +packages/app-desktop/services/bridge.d.ts +packages/app-desktop/services/bridge.js +packages/app-desktop/services/bridge.js.map +packages/app-desktop/services/commands/types.d.ts +packages/app-desktop/services/commands/types.js +packages/app-desktop/services/commands/types.js.map +packages/app-desktop/services/plugins/PlatformImplementation.d.ts +packages/app-desktop/services/plugins/PlatformImplementation.js +packages/app-desktop/services/plugins/PlatformImplementation.js.map +packages/app-desktop/services/plugins/PluginRunner.d.ts +packages/app-desktop/services/plugins/PluginRunner.js +packages/app-desktop/services/plugins/PluginRunner.js.map +packages/app-desktop/services/plugins/UserWebview.d.ts +packages/app-desktop/services/plugins/UserWebview.js +packages/app-desktop/services/plugins/UserWebview.js.map +packages/app-desktop/services/plugins/UserWebviewDialog.d.ts +packages/app-desktop/services/plugins/UserWebviewDialog.js +packages/app-desktop/services/plugins/UserWebviewDialog.js.map +packages/app-desktop/services/plugins/UserWebviewDialogButtonBar.d.ts +packages/app-desktop/services/plugins/UserWebviewDialogButtonBar.js +packages/app-desktop/services/plugins/UserWebviewDialogButtonBar.js.map +packages/app-desktop/services/plugins/hooks/useThemeCss.d.ts +packages/app-desktop/services/plugins/hooks/useThemeCss.js +packages/app-desktop/services/plugins/hooks/useThemeCss.js.map +packages/app-desktop/services/plugins/hooks/useViewIsReady.d.ts +packages/app-desktop/services/plugins/hooks/useViewIsReady.js +packages/app-desktop/services/plugins/hooks/useViewIsReady.js.map +packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.d.ts +packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.js +packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.js.map +packages/app-mobile/PluginAssetsLoader.d.ts +packages/app-mobile/PluginAssetsLoader.js +packages/app-mobile/PluginAssetsLoader.js.map +packages/app-mobile/components/BackButtonDialogBox.d.ts +packages/app-mobile/components/BackButtonDialogBox.js +packages/app-mobile/components/BackButtonDialogBox.js.map +packages/app-mobile/components/CameraView.d.ts +packages/app-mobile/components/CameraView.js +packages/app-mobile/components/CameraView.js.map +packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.d.ts +packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.js +packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.js.map +packages/app-mobile/components/NoteBodyViewer/hooks/useOnMessage.d.ts +packages/app-mobile/components/NoteBodyViewer/hooks/useOnMessage.js +packages/app-mobile/components/NoteBodyViewer/hooks/useOnMessage.js.map +packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.d.ts +packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.js +packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.js.map +packages/app-mobile/components/NoteBodyViewer/hooks/useSource.d.ts +packages/app-mobile/components/NoteBodyViewer/hooks/useSource.js +packages/app-mobile/components/NoteBodyViewer/hooks/useSource.js.map +packages/app-mobile/components/SelectDateTimeDialog.d.ts +packages/app-mobile/components/SelectDateTimeDialog.js +packages/app-mobile/components/SelectDateTimeDialog.js.map +packages/app-mobile/components/screens/Note.d.ts +packages/app-mobile/components/screens/Note.js +packages/app-mobile/components/screens/Note.js.map +packages/app-mobile/components/screens/UpgradeSyncTargetScreen.d.ts +packages/app-mobile/components/screens/UpgradeSyncTargetScreen.js +packages/app-mobile/components/screens/UpgradeSyncTargetScreen.js.map +packages/app-mobile/services/AlarmServiceDriver.android.d.ts +packages/app-mobile/services/AlarmServiceDriver.android.js +packages/app-mobile/services/AlarmServiceDriver.android.js.map +packages/app-mobile/services/AlarmServiceDriver.ios.d.ts +packages/app-mobile/services/AlarmServiceDriver.ios.js +packages/app-mobile/services/AlarmServiceDriver.ios.js.map +packages/app-mobile/setUpQuickActions.d.ts +packages/app-mobile/setUpQuickActions.js +packages/app-mobile/setUpQuickActions.js.map +packages/app-mobile/utils/ShareExtension.d.ts +packages/app-mobile/utils/ShareExtension.js +packages/app-mobile/utils/ShareExtension.js.map +packages/app-mobile/utils/checkPermissions.d.ts +packages/app-mobile/utils/checkPermissions.js +packages/app-mobile/utils/checkPermissions.js.map +packages/app-mobile/utils/shareHandler.d.ts +packages/app-mobile/utils/shareHandler.js +packages/app-mobile/utils/shareHandler.js.map +packages/fork-htmlparser2/src/CollectingHandler.d.ts +packages/fork-htmlparser2/src/CollectingHandler.js +packages/fork-htmlparser2/src/CollectingHandler.js.map +packages/fork-htmlparser2/src/FeedHandler.d.ts +packages/fork-htmlparser2/src/FeedHandler.js +packages/fork-htmlparser2/src/FeedHandler.js.map +packages/fork-htmlparser2/src/FeedHandler.spec.d.ts +packages/fork-htmlparser2/src/FeedHandler.spec.js +packages/fork-htmlparser2/src/FeedHandler.spec.js.map +packages/fork-htmlparser2/src/MultiplexHandler.d.ts +packages/fork-htmlparser2/src/MultiplexHandler.js +packages/fork-htmlparser2/src/MultiplexHandler.js.map +packages/fork-htmlparser2/src/Parser.d.ts +packages/fork-htmlparser2/src/Parser.js +packages/fork-htmlparser2/src/Parser.js.map +packages/fork-htmlparser2/src/Parser.spec.d.ts +packages/fork-htmlparser2/src/Parser.spec.js +packages/fork-htmlparser2/src/Parser.spec.js.map +packages/fork-htmlparser2/src/Tokenizer.d.ts +packages/fork-htmlparser2/src/Tokenizer.js +packages/fork-htmlparser2/src/Tokenizer.js.map +packages/fork-htmlparser2/src/WritableStream.d.ts +packages/fork-htmlparser2/src/WritableStream.js +packages/fork-htmlparser2/src/WritableStream.js.map +packages/fork-htmlparser2/src/WritableStream.spec.d.ts +packages/fork-htmlparser2/src/WritableStream.spec.js +packages/fork-htmlparser2/src/WritableStream.spec.js.map +packages/fork-htmlparser2/src/__fixtures__/test-helper.d.ts +packages/fork-htmlparser2/src/__fixtures__/test-helper.js +packages/fork-htmlparser2/src/__fixtures__/test-helper.js.map +packages/fork-htmlparser2/src/__tests__/events.d.ts +packages/fork-htmlparser2/src/__tests__/events.js +packages/fork-htmlparser2/src/__tests__/events.js.map +packages/fork-htmlparser2/src/__tests__/stream.d.ts +packages/fork-htmlparser2/src/__tests__/stream.js +packages/fork-htmlparser2/src/__tests__/stream.js.map +packages/fork-htmlparser2/src/index.d.ts +packages/fork-htmlparser2/src/index.js +packages/fork-htmlparser2/src/index.js.map +packages/fork-htmlparser2/src/index.spec.d.ts +packages/fork-htmlparser2/src/index.spec.js +packages/fork-htmlparser2/src/index.spec.js.map +packages/lib/AsyncActionQueue.d.ts +packages/lib/AsyncActionQueue.js +packages/lib/AsyncActionQueue.js.map +packages/lib/BaseApplication.d.ts +packages/lib/BaseApplication.js +packages/lib/BaseApplication.js.map +packages/lib/BaseModel.d.ts +packages/lib/BaseModel.js +packages/lib/BaseModel.js.map +packages/lib/InMemoryCache.d.ts +packages/lib/InMemoryCache.js +packages/lib/InMemoryCache.js.map +packages/lib/JoplinServerApi.d.ts +packages/lib/JoplinServerApi.js +packages/lib/JoplinServerApi.js.map +packages/lib/Logger.d.ts +packages/lib/Logger.js +packages/lib/Logger.js.map +packages/lib/PoorManIntervals.d.ts +packages/lib/PoorManIntervals.js +packages/lib/PoorManIntervals.js.map +packages/lib/Synchronizer.d.ts +packages/lib/Synchronizer.js +packages/lib/Synchronizer.js.map +packages/lib/commands/historyBackward.d.ts +packages/lib/commands/historyBackward.js +packages/lib/commands/historyBackward.js.map +packages/lib/commands/historyForward.d.ts +packages/lib/commands/historyForward.js +packages/lib/commands/historyForward.js.map +packages/lib/commands/synchronize.d.ts +packages/lib/commands/synchronize.js +packages/lib/commands/synchronize.js.map +packages/lib/errorUtils.d.ts +packages/lib/errorUtils.js +packages/lib/errorUtils.js.map +packages/lib/eventManager.d.ts +packages/lib/eventManager.js +packages/lib/eventManager.js.map +packages/lib/fs-driver-node.d.ts +packages/lib/fs-driver-node.js +packages/lib/fs-driver-node.js.map +packages/lib/locale.d.ts +packages/lib/locale.js +packages/lib/locale.js.map +packages/lib/markdownUtils.d.ts +packages/lib/markdownUtils.js +packages/lib/markdownUtils.js.map +packages/lib/markupLanguageUtils.d.ts +packages/lib/markupLanguageUtils.js +packages/lib/markupLanguageUtils.js.map +packages/lib/models/Alarm.d.ts +packages/lib/models/Alarm.js +packages/lib/models/Alarm.js.map +packages/lib/models/Setting.d.ts +packages/lib/models/Setting.js +packages/lib/models/Setting.js.map +packages/lib/models/utils/modelFeed.d.ts +packages/lib/models/utils/modelFeed.js +packages/lib/models/utils/modelFeed.js.map +packages/lib/models/utils/paginationToSql.d.ts +packages/lib/models/utils/paginationToSql.js +packages/lib/models/utils/paginationToSql.js.map +packages/lib/models/utils/types.d.ts +packages/lib/models/utils/types.js +packages/lib/models/utils/types.js.map +packages/lib/ntpDate.d.ts +packages/lib/ntpDate.js +packages/lib/ntpDate.js.map +packages/lib/path-utils.d.ts +packages/lib/path-utils.js +packages/lib/path-utils.js.map +packages/lib/reducer.d.ts +packages/lib/reducer.js +packages/lib/reducer.js.map +packages/lib/services/AlarmService.d.ts +packages/lib/services/AlarmService.js +packages/lib/services/AlarmService.js.map +packages/lib/services/AlarmServiceDriverNode.d.ts +packages/lib/services/AlarmServiceDriverNode.js +packages/lib/services/AlarmServiceDriverNode.js.map +packages/lib/services/BaseService.d.ts +packages/lib/services/BaseService.js +packages/lib/services/BaseService.js.map +packages/lib/services/CommandService.d.ts +packages/lib/services/CommandService.js +packages/lib/services/CommandService.js.map +packages/lib/services/KeymapService.d.ts +packages/lib/services/KeymapService.js +packages/lib/services/KeymapService.js.map +packages/lib/services/ResourceEditWatcher/index.d.ts +packages/lib/services/ResourceEditWatcher/index.js +packages/lib/services/ResourceEditWatcher/index.js.map +packages/lib/services/ResourceEditWatcher/reducer.d.ts +packages/lib/services/ResourceEditWatcher/reducer.js +packages/lib/services/ResourceEditWatcher/reducer.js.map +packages/lib/services/SettingUtils.d.ts +packages/lib/services/SettingUtils.js +packages/lib/services/SettingUtils.js.map +packages/lib/services/UndoRedoService.d.ts +packages/lib/services/UndoRedoService.js +packages/lib/services/UndoRedoService.js.map +packages/lib/services/WhenClause.d.ts +packages/lib/services/WhenClause.js +packages/lib/services/WhenClause.js.map +packages/lib/services/commands/MenuUtils.d.ts +packages/lib/services/commands/MenuUtils.js +packages/lib/services/commands/MenuUtils.js.map +packages/lib/services/commands/ToolbarButtonUtils.d.ts +packages/lib/services/commands/ToolbarButtonUtils.js +packages/lib/services/commands/ToolbarButtonUtils.js.map +packages/lib/services/commands/commandsToMarkdownTable.d.ts +packages/lib/services/commands/commandsToMarkdownTable.js +packages/lib/services/commands/commandsToMarkdownTable.js.map +packages/lib/services/commands/propsHaveChanged.d.ts +packages/lib/services/commands/propsHaveChanged.js +packages/lib/services/commands/propsHaveChanged.js.map +packages/lib/services/commands/stateToWhenClauseContext.d.ts +packages/lib/services/commands/stateToWhenClauseContext.js +packages/lib/services/commands/stateToWhenClauseContext.js.map +packages/lib/services/contextkey/contextkey.d.ts +packages/lib/services/contextkey/contextkey.js +packages/lib/services/contextkey/contextkey.js.map +packages/lib/services/debug/populateDatabase.d.ts +packages/lib/services/debug/populateDatabase.js +packages/lib/services/debug/populateDatabase.js.map +packages/lib/services/interop/InteropService.d.ts +packages/lib/services/interop/InteropService.js +packages/lib/services/interop/InteropService.js.map +packages/lib/services/interop/InteropService_Exporter_Base.d.ts +packages/lib/services/interop/InteropService_Exporter_Base.js +packages/lib/services/interop/InteropService_Exporter_Base.js.map +packages/lib/services/interop/InteropService_Exporter_Custom.d.ts +packages/lib/services/interop/InteropService_Exporter_Custom.js +packages/lib/services/interop/InteropService_Exporter_Custom.js.map +packages/lib/services/interop/InteropService_Exporter_Html.d.ts +packages/lib/services/interop/InteropService_Exporter_Html.js +packages/lib/services/interop/InteropService_Exporter_Html.js.map +packages/lib/services/interop/InteropService_Exporter_Jex.d.ts +packages/lib/services/interop/InteropService_Exporter_Jex.js +packages/lib/services/interop/InteropService_Exporter_Jex.js.map +packages/lib/services/interop/InteropService_Exporter_Md.d.ts +packages/lib/services/interop/InteropService_Exporter_Md.js +packages/lib/services/interop/InteropService_Exporter_Md.js.map +packages/lib/services/interop/InteropService_Exporter_Raw.d.ts +packages/lib/services/interop/InteropService_Exporter_Raw.js +packages/lib/services/interop/InteropService_Exporter_Raw.js.map +packages/lib/services/interop/InteropService_Importer_Base.d.ts +packages/lib/services/interop/InteropService_Importer_Base.js +packages/lib/services/interop/InteropService_Importer_Base.js.map +packages/lib/services/interop/InteropService_Importer_Custom.d.ts +packages/lib/services/interop/InteropService_Importer_Custom.js +packages/lib/services/interop/InteropService_Importer_Custom.js.map +packages/lib/services/interop/InteropService_Importer_EnexToHtml.d.ts +packages/lib/services/interop/InteropService_Importer_EnexToHtml.js +packages/lib/services/interop/InteropService_Importer_EnexToHtml.js.map +packages/lib/services/interop/InteropService_Importer_EnexToMd.d.ts +packages/lib/services/interop/InteropService_Importer_EnexToMd.js +packages/lib/services/interop/InteropService_Importer_EnexToMd.js.map +packages/lib/services/interop/InteropService_Importer_Jex.d.ts +packages/lib/services/interop/InteropService_Importer_Jex.js +packages/lib/services/interop/InteropService_Importer_Jex.js.map +packages/lib/services/interop/InteropService_Importer_Md.d.ts +packages/lib/services/interop/InteropService_Importer_Md.js +packages/lib/services/interop/InteropService_Importer_Md.js.map +packages/lib/services/interop/InteropService_Importer_Raw.d.ts +packages/lib/services/interop/InteropService_Importer_Raw.js +packages/lib/services/interop/InteropService_Importer_Raw.js.map +packages/lib/services/interop/types.d.ts +packages/lib/services/interop/types.js +packages/lib/services/interop/types.js.map +packages/lib/services/keychain/KeychainService.d.ts +packages/lib/services/keychain/KeychainService.js +packages/lib/services/keychain/KeychainService.js.map +packages/lib/services/keychain/KeychainServiceDriver.dummy.d.ts +packages/lib/services/keychain/KeychainServiceDriver.dummy.js +packages/lib/services/keychain/KeychainServiceDriver.dummy.js.map +packages/lib/services/keychain/KeychainServiceDriver.mobile.d.ts +packages/lib/services/keychain/KeychainServiceDriver.mobile.js +packages/lib/services/keychain/KeychainServiceDriver.mobile.js.map +packages/lib/services/keychain/KeychainServiceDriver.node.d.ts +packages/lib/services/keychain/KeychainServiceDriver.node.js +packages/lib/services/keychain/KeychainServiceDriver.node.js.map +packages/lib/services/keychain/KeychainServiceDriverBase.d.ts +packages/lib/services/keychain/KeychainServiceDriverBase.js +packages/lib/services/keychain/KeychainServiceDriverBase.js.map +packages/lib/services/plugins/BasePluginRunner.d.ts +packages/lib/services/plugins/BasePluginRunner.js +packages/lib/services/plugins/BasePluginRunner.js.map +packages/lib/services/plugins/MenuController.d.ts +packages/lib/services/plugins/MenuController.js +packages/lib/services/plugins/MenuController.js.map +packages/lib/services/plugins/MenuItemController.d.ts +packages/lib/services/plugins/MenuItemController.js +packages/lib/services/plugins/MenuItemController.js.map +packages/lib/services/plugins/Plugin.d.ts +packages/lib/services/plugins/Plugin.js +packages/lib/services/plugins/Plugin.js.map +packages/lib/services/plugins/PluginService.d.ts +packages/lib/services/plugins/PluginService.js +packages/lib/services/plugins/PluginService.js.map +packages/lib/services/plugins/ToolbarButtonController.d.ts +packages/lib/services/plugins/ToolbarButtonController.js +packages/lib/services/plugins/ToolbarButtonController.js.map +packages/lib/services/plugins/ViewController.d.ts +packages/lib/services/plugins/ViewController.js +packages/lib/services/plugins/ViewController.js.map +packages/lib/services/plugins/WebviewController.d.ts +packages/lib/services/plugins/WebviewController.js +packages/lib/services/plugins/WebviewController.js.map +packages/lib/services/plugins/api/Global.d.ts +packages/lib/services/plugins/api/Global.js +packages/lib/services/plugins/api/Global.js.map +packages/lib/services/plugins/api/Joplin.d.ts +packages/lib/services/plugins/api/Joplin.js +packages/lib/services/plugins/api/Joplin.js.map +packages/lib/services/plugins/api/JoplinCommands.d.ts +packages/lib/services/plugins/api/JoplinCommands.js +packages/lib/services/plugins/api/JoplinCommands.js.map +packages/lib/services/plugins/api/JoplinData.d.ts +packages/lib/services/plugins/api/JoplinData.js +packages/lib/services/plugins/api/JoplinData.js.map +packages/lib/services/plugins/api/JoplinFilters.d.ts +packages/lib/services/plugins/api/JoplinFilters.js +packages/lib/services/plugins/api/JoplinFilters.js.map +packages/lib/services/plugins/api/JoplinInterop.d.ts +packages/lib/services/plugins/api/JoplinInterop.js +packages/lib/services/plugins/api/JoplinInterop.js.map +packages/lib/services/plugins/api/JoplinPlugins.d.ts +packages/lib/services/plugins/api/JoplinPlugins.js +packages/lib/services/plugins/api/JoplinPlugins.js.map +packages/lib/services/plugins/api/JoplinSettings.d.ts +packages/lib/services/plugins/api/JoplinSettings.js +packages/lib/services/plugins/api/JoplinSettings.js.map +packages/lib/services/plugins/api/JoplinViews.d.ts +packages/lib/services/plugins/api/JoplinViews.js +packages/lib/services/plugins/api/JoplinViews.js.map +packages/lib/services/plugins/api/JoplinViewsDialogs.d.ts +packages/lib/services/plugins/api/JoplinViewsDialogs.js +packages/lib/services/plugins/api/JoplinViewsDialogs.js.map +packages/lib/services/plugins/api/JoplinViewsMenuItems.d.ts +packages/lib/services/plugins/api/JoplinViewsMenuItems.js +packages/lib/services/plugins/api/JoplinViewsMenuItems.js.map +packages/lib/services/plugins/api/JoplinViewsMenus.d.ts +packages/lib/services/plugins/api/JoplinViewsMenus.js +packages/lib/services/plugins/api/JoplinViewsMenus.js.map +packages/lib/services/plugins/api/JoplinViewsPanels.d.ts +packages/lib/services/plugins/api/JoplinViewsPanels.js +packages/lib/services/plugins/api/JoplinViewsPanels.js.map +packages/lib/services/plugins/api/JoplinViewsToolbarButtons.d.ts +packages/lib/services/plugins/api/JoplinViewsToolbarButtons.js +packages/lib/services/plugins/api/JoplinViewsToolbarButtons.js.map +packages/lib/services/plugins/api/JoplinWorkspace.d.ts +packages/lib/services/plugins/api/JoplinWorkspace.js +packages/lib/services/plugins/api/JoplinWorkspace.js.map +packages/lib/services/plugins/api/types.d.ts +packages/lib/services/plugins/api/types.js +packages/lib/services/plugins/api/types.js.map +packages/lib/services/plugins/reducer.d.ts +packages/lib/services/plugins/reducer.js +packages/lib/services/plugins/reducer.js.map +packages/lib/services/plugins/sandboxProxy.d.ts +packages/lib/services/plugins/sandboxProxy.js +packages/lib/services/plugins/sandboxProxy.js.map +packages/lib/services/plugins/utils/contentScriptsToRendererRules.d.ts +packages/lib/services/plugins/utils/contentScriptsToRendererRules.js +packages/lib/services/plugins/utils/contentScriptsToRendererRules.js.map +packages/lib/services/plugins/utils/createViewHandle.d.ts +packages/lib/services/plugins/utils/createViewHandle.js +packages/lib/services/plugins/utils/createViewHandle.js.map +packages/lib/services/plugins/utils/executeSandboxCall.d.ts +packages/lib/services/plugins/utils/executeSandboxCall.js +packages/lib/services/plugins/utils/executeSandboxCall.js.map +packages/lib/services/plugins/utils/manifestFromObject.d.ts +packages/lib/services/plugins/utils/manifestFromObject.js +packages/lib/services/plugins/utils/manifestFromObject.js.map +packages/lib/services/plugins/utils/mapEventHandlersToIds.d.ts +packages/lib/services/plugins/utils/mapEventHandlersToIds.js +packages/lib/services/plugins/utils/mapEventHandlersToIds.js.map +packages/lib/services/plugins/utils/types.d.ts +packages/lib/services/plugins/utils/types.js +packages/lib/services/plugins/utils/types.js.map +packages/lib/services/rest/Api.d.ts +packages/lib/services/rest/Api.js +packages/lib/services/rest/Api.js.map +packages/lib/services/rest/ApiResponse.d.ts +packages/lib/services/rest/ApiResponse.js +packages/lib/services/rest/ApiResponse.js.map +packages/lib/services/rest/actionApi.desktop.d.ts +packages/lib/services/rest/actionApi.desktop.js +packages/lib/services/rest/actionApi.desktop.js.map +packages/lib/services/rest/routes/folders.d.ts +packages/lib/services/rest/routes/folders.js +packages/lib/services/rest/routes/folders.js.map +packages/lib/services/rest/routes/master_keys.d.ts +packages/lib/services/rest/routes/master_keys.js +packages/lib/services/rest/routes/master_keys.js.map +packages/lib/services/rest/routes/notes.d.ts +packages/lib/services/rest/routes/notes.js +packages/lib/services/rest/routes/notes.js.map +packages/lib/services/rest/routes/ping.d.ts +packages/lib/services/rest/routes/ping.js +packages/lib/services/rest/routes/ping.js.map +packages/lib/services/rest/routes/resources.d.ts +packages/lib/services/rest/routes/resources.js +packages/lib/services/rest/routes/resources.js.map +packages/lib/services/rest/routes/search.d.ts +packages/lib/services/rest/routes/search.js +packages/lib/services/rest/routes/search.js.map +packages/lib/services/rest/routes/tags.d.ts +packages/lib/services/rest/routes/tags.js +packages/lib/services/rest/routes/tags.js.map +packages/lib/services/rest/utils/defaultAction.d.ts +packages/lib/services/rest/utils/defaultAction.js +packages/lib/services/rest/utils/defaultAction.js.map +packages/lib/services/rest/utils/defaultLoadOptions.d.ts +packages/lib/services/rest/utils/defaultLoadOptions.js +packages/lib/services/rest/utils/defaultLoadOptions.js.map +packages/lib/services/rest/utils/defaultSaveOptions.d.ts +packages/lib/services/rest/utils/defaultSaveOptions.js +packages/lib/services/rest/utils/defaultSaveOptions.js.map +packages/lib/services/rest/utils/errors.d.ts +packages/lib/services/rest/utils/errors.js +packages/lib/services/rest/utils/errors.js.map +packages/lib/services/rest/utils/paginatedResults.d.ts +packages/lib/services/rest/utils/paginatedResults.js +packages/lib/services/rest/utils/paginatedResults.js.map +packages/lib/services/rest/utils/readonlyProperties.d.ts +packages/lib/services/rest/utils/readonlyProperties.js +packages/lib/services/rest/utils/readonlyProperties.js.map +packages/lib/services/rest/utils/requestFields.d.ts +packages/lib/services/rest/utils/requestFields.js +packages/lib/services/rest/utils/requestFields.js.map +packages/lib/services/rest/utils/requestPaginationOptions.d.ts +packages/lib/services/rest/utils/requestPaginationOptions.js +packages/lib/services/rest/utils/requestPaginationOptions.js.map +packages/lib/services/searchengine/filterParser.d.ts +packages/lib/services/searchengine/filterParser.js +packages/lib/services/searchengine/filterParser.js.map +packages/lib/services/searchengine/queryBuilder.d.ts +packages/lib/services/searchengine/queryBuilder.js +packages/lib/services/searchengine/queryBuilder.js.map +packages/lib/services/spellChecker/SpellCheckerService.d.ts +packages/lib/services/spellChecker/SpellCheckerService.js +packages/lib/services/spellChecker/SpellCheckerService.js.map +packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.d.ts +packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.js +packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.js.map +packages/lib/services/synchronizer/LockHandler.d.ts +packages/lib/services/synchronizer/LockHandler.js +packages/lib/services/synchronizer/LockHandler.js.map +packages/lib/services/synchronizer/MigrationHandler.d.ts +packages/lib/services/synchronizer/MigrationHandler.js +packages/lib/services/synchronizer/MigrationHandler.js.map +packages/lib/services/synchronizer/gui/useSyncTargetUpgrade.d.ts +packages/lib/services/synchronizer/gui/useSyncTargetUpgrade.js +packages/lib/services/synchronizer/gui/useSyncTargetUpgrade.js.map +packages/lib/services/synchronizer/migrations/1.d.ts +packages/lib/services/synchronizer/migrations/1.js +packages/lib/services/synchronizer/migrations/1.js.map +packages/lib/services/synchronizer/migrations/2.d.ts +packages/lib/services/synchronizer/migrations/2.js +packages/lib/services/synchronizer/migrations/2.js.map +packages/lib/services/synchronizer/utils/types.d.ts +packages/lib/services/synchronizer/utils/types.js +packages/lib/services/synchronizer/utils/types.js.map +packages/lib/shim.d.ts +packages/lib/shim.js +packages/lib/shim.js.map +packages/lib/theme.d.ts +packages/lib/theme.js +packages/lib/theme.js.map +packages/lib/themes/aritimDark.d.ts +packages/lib/themes/aritimDark.js +packages/lib/themes/aritimDark.js.map +packages/lib/themes/dark.d.ts +packages/lib/themes/dark.js +packages/lib/themes/dark.js.map +packages/lib/themes/dracula.d.ts +packages/lib/themes/dracula.js +packages/lib/themes/dracula.js.map +packages/lib/themes/light.d.ts +packages/lib/themes/light.js +packages/lib/themes/light.js.map +packages/lib/themes/nord.d.ts +packages/lib/themes/nord.js +packages/lib/themes/nord.js.map +packages/lib/themes/oledDark.d.ts +packages/lib/themes/oledDark.js +packages/lib/themes/oledDark.js.map +packages/lib/themes/solarizedDark.d.ts +packages/lib/themes/solarizedDark.js +packages/lib/themes/solarizedDark.js.map +packages/lib/themes/solarizedLight.d.ts +packages/lib/themes/solarizedLight.js +packages/lib/themes/solarizedLight.js.map +packages/lib/themes/type.d.ts +packages/lib/themes/type.js +packages/lib/themes/type.js.map +packages/lib/time.d.ts +packages/lib/time.js +packages/lib/time.js.map +packages/lib/uuid.d.ts +packages/lib/uuid.js +packages/lib/uuid.js.map +packages/lib/versionInfo.d.ts +packages/lib/versionInfo.js +packages/lib/versionInfo.js.map +packages/renderer/InMemoryCache.d.ts +packages/renderer/InMemoryCache.js +packages/renderer/InMemoryCache.js.map +packages/renderer/MarkupToHtml.d.ts +packages/renderer/MarkupToHtml.js +packages/renderer/MarkupToHtml.js.map +packages/renderer/MdToHtml.d.ts +packages/renderer/MdToHtml.js +packages/renderer/MdToHtml.js.map +packages/renderer/MdToHtml/rules/checkbox.d.ts +packages/renderer/MdToHtml/rules/checkbox.js +packages/renderer/MdToHtml/rules/checkbox.js.map +packages/renderer/MdToHtml/rules/code_inline.d.ts +packages/renderer/MdToHtml/rules/code_inline.js +packages/renderer/MdToHtml/rules/code_inline.js.map +packages/renderer/MdToHtml/rules/fence.d.ts +packages/renderer/MdToHtml/rules/fence.js +packages/renderer/MdToHtml/rules/fence.js.map +packages/renderer/MdToHtml/rules/fountain.d.ts +packages/renderer/MdToHtml/rules/fountain.js +packages/renderer/MdToHtml/rules/fountain.js.map +packages/renderer/MdToHtml/rules/highlight_keywords.d.ts +packages/renderer/MdToHtml/rules/highlight_keywords.js +packages/renderer/MdToHtml/rules/highlight_keywords.js.map +packages/renderer/MdToHtml/rules/html_image.d.ts +packages/renderer/MdToHtml/rules/html_image.js +packages/renderer/MdToHtml/rules/html_image.js.map +packages/renderer/MdToHtml/rules/image.d.ts +packages/renderer/MdToHtml/rules/image.js +packages/renderer/MdToHtml/rules/image.js.map +packages/renderer/MdToHtml/rules/katex.d.ts +packages/renderer/MdToHtml/rules/katex.js +packages/renderer/MdToHtml/rules/katex.js.map +packages/renderer/MdToHtml/rules/link_open.d.ts +packages/renderer/MdToHtml/rules/link_open.js +packages/renderer/MdToHtml/rules/link_open.js.map +packages/renderer/MdToHtml/rules/mermaid.d.ts +packages/renderer/MdToHtml/rules/mermaid.js +packages/renderer/MdToHtml/rules/mermaid.js.map +packages/renderer/MdToHtml/rules/sanitize_html.d.ts +packages/renderer/MdToHtml/rules/sanitize_html.js +packages/renderer/MdToHtml/rules/sanitize_html.js.map +packages/renderer/index.d.ts +packages/renderer/index.js +packages/renderer/index.js.map +packages/renderer/noteStyle.d.ts +packages/renderer/noteStyle.js +packages/renderer/noteStyle.js.map +packages/renderer/pathUtils.d.ts +packages/renderer/pathUtils.js +packages/renderer/pathUtils.js.map # AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD diff --git a/.gitignore b/.gitignore index f41f7f70a5..100727f381 100644 --- a/.gitignore +++ b/.gitignore @@ -1,353 +1,1247 @@ -/app/config/parameters.yml +_mydocs +_releases +_vieux/ +!/var/cache +!/var/logs +!/var/sessions +!app/data/uploads/.gitkeep +!var/cache/.gitkeep +!var/logs/.gitkeep +!var/sessions/.gitkeep +!var/SymfonyRequirements.php +.DS_Store +.vscode/* +*.map +*.pro.user +*.sublime-workspace +*.swp +**/*.js.map +**/node_modules/ /app/config/parameters_dev.yml /app/config/parameters_prod.yml +/app/config/parameters.yml /build/ /phpunit.xml /var/* -!/var/cache /var/cache/* -!var/cache/.gitkeep -!/var/logs /var/logs/* -!var/logs/.gitkeep -!/var/sessions /var/sessions/* -!var/sessions/.gitkeep -!var/SymfonyRequirements.php /vendor/ /web/bundles/ -*.sublime-workspace -Makefile.Debug -Makefile.Release -Makefile -QtClient/build-* -TODO.md -*.pro.user -QtClient/data/ -app/data/uploads/ -!app/data/uploads/.gitkeep -sparse_test.php -INFO.md /web/env.php -sync_staging.sh -*.swp -_vieux/ -_mydocs -.DS_Store +app/data/uploads/ Assets/DownloadBadges*.psd -node_modules -Tools/github_oauth_token.txt -CliClient/tests/support/amazon-s3-auth.json -_releases -ReactNativeClient/lib/csstojs/ -ReactNativeClient/lib/rnInjectedJs/ -ElectronClient/gui/note-viewer/fonts/ -ElectronClient/gui/note-viewer/lib.js -ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/supportedLocales.js Clipper-source/ Clipper/joplin-webclipper-source.zip +INFO.md joplin-webclipper-source.zip -Tools/commit_hook.txt -.vscode/* -*.map -ReactNativeClient/lib/sql-extensions/spellfix.so -ReactNativeClient/lib/sql-extensions/spellfix.dylib -CliClient/build/ +Makefile +Makefile.Debug +Makefile.Release +node_modules plugin_types/ +QtClient/build-* +QtClient/data/ +sparse_test.php +sync_staging.sh +TODO.md +Tools/commit_hook.txt +Tools/github_oauth_token.txt +lerna-debug.log # AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD -CliClient/app/LinkSelector.js -CliClient/app/services/plugins/PluginRunner.js -CliClient/tests/fsDriver.js -CliClient/tests/InMemoryCache.js -CliClient/tests/MdToHtml.js -CliClient/tests/models_Setting.js -CliClient/tests/services_CommandService.js -CliClient/tests/services_InteropService.js -CliClient/tests/services_keychainService.js -CliClient/tests/services_PluginService.js -CliClient/tests/services_rest_Api.js -CliClient/tests/services/plugins/api/JoplinSetting.js -CliClient/tests/services/plugins/sandboxProxy.js -CliClient/tests/synchronizer_LockHandler.js -CliClient/tests/synchronizer_MigrationHandler.js -ElectronClient/app.js -ElectronClient/bridge.js -ElectronClient/commands/copyDevCommand.js -ElectronClient/commands/focusElement.js -ElectronClient/commands/openProfileDirectory.js -ElectronClient/commands/startExternalEditing.js -ElectronClient/commands/stopExternalEditing.js -ElectronClient/commands/toggleExternalEditing.js -ElectronClient/ElectronAppWrapper.js -ElectronClient/global.d.js -ElectronClient/gui/Button/Button.js -ElectronClient/gui/ConfigScreen/ButtonBar.js -ElectronClient/gui/ConfigScreen/ConfigScreen.js -ElectronClient/gui/ConfigScreen/SideBar.js -ElectronClient/gui/DropboxLoginScreen.js -ElectronClient/gui/ErrorBoundary.js -ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js -ElectronClient/gui/KeymapConfig/ShortcutRecorder.js -ElectronClient/gui/KeymapConfig/styles/index.js -ElectronClient/gui/KeymapConfig/utils/getLabel.js -ElectronClient/gui/KeymapConfig/utils/useCommandStatus.js -ElectronClient/gui/KeymapConfig/utils/useKeymap.js -ElectronClient/gui/MainScreen/commands/editAlarm.js -ElectronClient/gui/MainScreen/commands/exportPdf.js -ElectronClient/gui/MainScreen/commands/hideModalMessage.js -ElectronClient/gui/MainScreen/commands/moveToFolder.js -ElectronClient/gui/MainScreen/commands/newFolder.js -ElectronClient/gui/MainScreen/commands/newNote.js -ElectronClient/gui/MainScreen/commands/newSubFolder.js -ElectronClient/gui/MainScreen/commands/newTodo.js -ElectronClient/gui/MainScreen/commands/openFolder.js -ElectronClient/gui/MainScreen/commands/openNote.js -ElectronClient/gui/MainScreen/commands/openTag.js -ElectronClient/gui/MainScreen/commands/print.js -ElectronClient/gui/MainScreen/commands/renameFolder.js -ElectronClient/gui/MainScreen/commands/renameTag.js -ElectronClient/gui/MainScreen/commands/search.js -ElectronClient/gui/MainScreen/commands/selectTemplate.js -ElectronClient/gui/MainScreen/commands/setTags.js -ElectronClient/gui/MainScreen/commands/showModalMessage.js -ElectronClient/gui/MainScreen/commands/showNoteContentProperties.js -ElectronClient/gui/MainScreen/commands/showNoteProperties.js -ElectronClient/gui/MainScreen/commands/showShareNoteDialog.js -ElectronClient/gui/MainScreen/commands/toggleEditors.js -ElectronClient/gui/MainScreen/commands/toggleNoteList.js -ElectronClient/gui/MainScreen/commands/toggleSideBar.js -ElectronClient/gui/MainScreen/commands/toggleVisiblePanes.js -ElectronClient/gui/MainScreen/MainScreen.js -ElectronClient/gui/MenuBar.js -ElectronClient/gui/menuCommandNames.js -ElectronClient/gui/MultiNoteActions.js -ElectronClient/gui/NoteContentPropertiesDialog.js -ElectronClient/gui/NoteEditor/commands/editorCommandDeclarations.js -ElectronClient/gui/NoteEditor/commands/focusElementNoteBody.js -ElectronClient/gui/NoteEditor/commands/focusElementNoteTitle.js -ElectronClient/gui/NoteEditor/commands/showLocalSearch.js -ElectronClient/gui/NoteEditor/commands/showRevisions.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Editor.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js -ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js -ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js -ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js -ElectronClient/gui/NoteEditor/NoteEditor.js -ElectronClient/gui/NoteEditor/styles/index.js -ElectronClient/gui/NoteEditor/utils/contextMenu.js -ElectronClient/gui/NoteEditor/utils/index.js -ElectronClient/gui/NoteEditor/utils/resourceHandling.js -ElectronClient/gui/NoteEditor/utils/types.js -ElectronClient/gui/NoteEditor/utils/useDropHandler.js -ElectronClient/gui/NoteEditor/utils/useFolder.js -ElectronClient/gui/NoteEditor/utils/useFormNote.js -ElectronClient/gui/NoteEditor/utils/useMarkupToHtml.js -ElectronClient/gui/NoteEditor/utils/useMessageHandler.js -ElectronClient/gui/NoteEditor/utils/useNoteSearchBar.js -ElectronClient/gui/NoteEditor/utils/usePluginServiceRegistration.js -ElectronClient/gui/NoteEditor/utils/useSearchMarkers.js -ElectronClient/gui/NoteEditor/utils/useWindowCommandHandler.js -ElectronClient/gui/NoteList/commands/focusElementNoteList.js -ElectronClient/gui/NoteList/NoteList.js -ElectronClient/gui/NoteListControls/commands/focusSearch.js -ElectronClient/gui/NoteListControls/NoteListControls.js -ElectronClient/gui/NoteListItem.js -ElectronClient/gui/NoteTextViewer.js -ElectronClient/gui/NoteToolbar/NoteToolbar.js -ElectronClient/gui/OneDriveLoginScreen.js -ElectronClient/gui/ResizableLayout/hooks/useLayoutItemSizes.js -ElectronClient/gui/ResizableLayout/hooks/useWindowResizeEvent.js -ElectronClient/gui/ResizableLayout/ResizableLayout.js -ElectronClient/gui/ResourceScreen.js -ElectronClient/gui/Root_UpgradeSyncTarget.js -ElectronClient/gui/Root.js -ElectronClient/gui/SearchBar/hooks/useSearch.js -ElectronClient/gui/SearchBar/SearchBar.js -ElectronClient/gui/SearchBar/styles/index.js -ElectronClient/gui/ShareNoteDialog.js -ElectronClient/gui/SideBar/commands/focusElementSideBar.js -ElectronClient/gui/SideBar/SideBar.js -ElectronClient/gui/SideBar/styles/index.js -ElectronClient/gui/StatusScreen/StatusScreen.js -ElectronClient/gui/style/StyledInput.js -ElectronClient/gui/style/StyledTextInput.js -ElectronClient/gui/TagList.js -ElectronClient/gui/ToggleEditorsButton/styles/index.js -ElectronClient/gui/ToggleEditorsButton/ToggleEditorsButton.js -ElectronClient/gui/ToolbarBase.js -ElectronClient/gui/ToolbarButton/styles/index.js -ElectronClient/gui/ToolbarButton/ToolbarButton.js -ElectronClient/gui/utils/NoteListUtils.js -ElectronClient/InteropServiceHelper.js -ElectronClient/plugins/GotoAnything.js -ElectronClient/services/bridge.js -ElectronClient/services/commands/types.js -ElectronClient/services/plugins/hooks/useThemeCss.js -ElectronClient/services/plugins/hooks/useViewIsReady.js -ElectronClient/services/plugins/PlatformImplementation.js -ElectronClient/services/plugins/PluginRunner.js -ElectronClient/services/plugins/UserWebview.js -ElectronClient/services/plugins/UserWebviewDialog.js -ElectronClient/services/plugins/UserWebviewDialogButtonBar.js -ReactNativeClient/lib/AsyncActionQueue.js -ReactNativeClient/lib/BaseApplication.js -ReactNativeClient/lib/checkPermissions.js -ReactNativeClient/lib/commands/historyBackward.js -ReactNativeClient/lib/commands/historyForward.js -ReactNativeClient/lib/commands/synchronize.js -ReactNativeClient/lib/components/BackButtonDialogBox.js -ReactNativeClient/lib/components/CameraView.js -ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnMessage.js -ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnResourceLongPress.js -ReactNativeClient/lib/components/NoteBodyViewer/hooks/useSource.js -ReactNativeClient/lib/components/NoteBodyViewer/NoteBodyViewer.js -ReactNativeClient/lib/components/screens/Note.js -ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.js -ReactNativeClient/lib/components/SelectDateTimeDialog.js -ReactNativeClient/lib/errorUtils.js -ReactNativeClient/lib/eventManager.js -ReactNativeClient/lib/fs-driver-node.js -ReactNativeClient/lib/hooks/useEffectDebugger.js -ReactNativeClient/lib/hooks/useImperativeHandlerDebugger.js -ReactNativeClient/lib/hooks/usePrevious.js -ReactNativeClient/lib/hooks/usePropsDebugger.js -ReactNativeClient/lib/InMemoryCache.js -ReactNativeClient/lib/joplin-renderer/MarkupToHtml.js -ReactNativeClient/lib/joplin-renderer/MdToHtml.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/code_inline.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fence.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fountain.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/highlight_keywords.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/html_image.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/image.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/katex.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/link_open.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js -ReactNativeClient/lib/joplin-renderer/noteStyle.js -ReactNativeClient/lib/joplin-renderer/pathUtils.js -ReactNativeClient/lib/JoplinServerApi.js -ReactNativeClient/lib/locale.js -ReactNativeClient/lib/Logger.js -ReactNativeClient/lib/markdownUtils.js -ReactNativeClient/lib/markupLanguageUtils.js -ReactNativeClient/lib/models/Alarm.js -ReactNativeClient/lib/models/Setting.js -ReactNativeClient/lib/ntpDate.js -ReactNativeClient/lib/path-utils.js -ReactNativeClient/lib/PoorManIntervals.js -ReactNativeClient/lib/reducer.js -ReactNativeClient/lib/services/AlarmService.js -ReactNativeClient/lib/services/AlarmServiceDriver.android.js -ReactNativeClient/lib/services/AlarmServiceDriver.ios.js -ReactNativeClient/lib/services/AlarmServiceDriverNode.js -ReactNativeClient/lib/services/BaseService.js -ReactNativeClient/lib/services/commands/commandsToMarkdownTable.js -ReactNativeClient/lib/services/commands/MenuUtils.js -ReactNativeClient/lib/services/commands/propsHaveChanged.js -ReactNativeClient/lib/services/commands/stateToWhenClauseContext.js -ReactNativeClient/lib/services/commands/ToolbarButtonUtils.js -ReactNativeClient/lib/services/CommandService.js -ReactNativeClient/lib/services/contextkey/contextkey.js -ReactNativeClient/lib/services/debug/populateDatabase.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Base.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Custom.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Html.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Jex.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Md.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Raw.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Base.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Custom.js -ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToHtml.js -ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToMd.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Jex.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Md.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Raw.js -ReactNativeClient/lib/services/interop/InteropService.js -ReactNativeClient/lib/services/interop/types.js -ReactNativeClient/lib/services/keychain/KeychainService.js -ReactNativeClient/lib/services/keychain/KeychainServiceDriver.dummy.js -ReactNativeClient/lib/services/keychain/KeychainServiceDriver.mobile.js -ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.js -ReactNativeClient/lib/services/keychain/KeychainServiceDriverBase.js -ReactNativeClient/lib/services/KeymapService.js -ReactNativeClient/lib/services/plugins/api/Global.js -ReactNativeClient/lib/services/plugins/api/Joplin.js -ReactNativeClient/lib/services/plugins/api/JoplinCommands.js -ReactNativeClient/lib/services/plugins/api/JoplinData.js -ReactNativeClient/lib/services/plugins/api/JoplinFilters.js -ReactNativeClient/lib/services/plugins/api/JoplinInterop.js -ReactNativeClient/lib/services/plugins/api/JoplinPlugins.js -ReactNativeClient/lib/services/plugins/api/JoplinSettings.js -ReactNativeClient/lib/services/plugins/api/JoplinViews.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsMenus.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.js -ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.js -ReactNativeClient/lib/services/plugins/api/types.js -ReactNativeClient/lib/services/plugins/BasePluginRunner.js -ReactNativeClient/lib/services/plugins/MenuController.js -ReactNativeClient/lib/services/plugins/MenuItemController.js -ReactNativeClient/lib/services/plugins/Plugin.js -ReactNativeClient/lib/services/plugins/PluginService.js -ReactNativeClient/lib/services/plugins/reducer.js -ReactNativeClient/lib/services/plugins/sandboxProxy.js -ReactNativeClient/lib/services/plugins/ToolbarButtonController.js -ReactNativeClient/lib/services/plugins/utils/contentScriptsToRendererRules.js -ReactNativeClient/lib/services/plugins/utils/createViewHandle.js -ReactNativeClient/lib/services/plugins/utils/executeSandboxCall.js -ReactNativeClient/lib/services/plugins/utils/manifestFromObject.js -ReactNativeClient/lib/services/plugins/utils/mapEventHandlersToIds.js -ReactNativeClient/lib/services/plugins/utils/types.js -ReactNativeClient/lib/services/plugins/ViewController.js -ReactNativeClient/lib/services/plugins/WebviewController.js -ReactNativeClient/lib/services/ResourceEditWatcher/index.js -ReactNativeClient/lib/services/ResourceEditWatcher/reducer.js -ReactNativeClient/lib/services/rest/actionApi.desktop.js -ReactNativeClient/lib/services/rest/Api.js -ReactNativeClient/lib/services/rest/errors.js -ReactNativeClient/lib/services/searchengine/filterParser.js -ReactNativeClient/lib/services/searchengine/queryBuilder.js -ReactNativeClient/lib/services/SettingUtils.js -ReactNativeClient/lib/services/synchronizer/gui/useSyncTargetUpgrade.js -ReactNativeClient/lib/services/synchronizer/LockHandler.js -ReactNativeClient/lib/services/synchronizer/MigrationHandler.js -ReactNativeClient/lib/services/synchronizer/migrations/1.js -ReactNativeClient/lib/services/synchronizer/migrations/2.js -ReactNativeClient/lib/services/synchronizer/utils/types.js -ReactNativeClient/lib/services/UndoRedoService.js -ReactNativeClient/lib/services/WhenClause.js -ReactNativeClient/lib/ShareExtension.js -ReactNativeClient/lib/shareHandler.js -ReactNativeClient/lib/shim.js -ReactNativeClient/lib/Synchronizer.js -ReactNativeClient/lib/theme.js -ReactNativeClient/lib/themes/aritimDark.js -ReactNativeClient/lib/themes/dark.js -ReactNativeClient/lib/themes/dracula.js -ReactNativeClient/lib/themes/light.js -ReactNativeClient/lib/themes/nord.js -ReactNativeClient/lib/themes/oledDark.js -ReactNativeClient/lib/themes/solarizedDark.js -ReactNativeClient/lib/themes/solarizedLight.js -ReactNativeClient/lib/themes/type.js -ReactNativeClient/lib/uuid.js -ReactNativeClient/lib/versionInfo.js -ReactNativeClient/PluginAssetsLoader.js -ReactNativeClient/setUpQuickActions.js -# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD +Assets/TinyMCE/JoplinLists/src/main/ts/Main.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/Main.js +Assets/TinyMCE/JoplinLists/src/main/ts/Main.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/Plugin.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/Plugin.js +Assets/TinyMCE/JoplinLists/src/main/ts/Plugin.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/actions/Indendation.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/actions/Indendation.js +Assets/TinyMCE/JoplinLists/src/main/ts/actions/Indendation.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/actions/ToggleList.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/actions/ToggleList.js +Assets/TinyMCE/JoplinLists/src/main/ts/actions/ToggleList.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/api/Api.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/api/Api.js +Assets/TinyMCE/JoplinLists/src/main/ts/api/Api.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/api/Commands.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/api/Commands.js +Assets/TinyMCE/JoplinLists/src/main/ts/api/Commands.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/api/Events.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/api/Events.js +Assets/TinyMCE/JoplinLists/src/main/ts/api/Events.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/api/Settings.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/api/Settings.js +Assets/TinyMCE/JoplinLists/src/main/ts/api/Settings.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Bookmark.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Bookmark.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Bookmark.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Delete.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Delete.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Delete.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/DlIndentation.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/DlIndentation.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/DlIndentation.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Keyboard.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Keyboard.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Keyboard.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/ListAction.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/ListAction.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/ListAction.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/NodeType.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/NodeType.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/NodeType.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/NormalizeLists.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/NormalizeLists.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/NormalizeLists.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Range.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Range.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Range.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Selection.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Selection.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Selection.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/SplitList.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/SplitList.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/SplitList.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/TextBlock.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/TextBlock.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/TextBlock.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Util.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Util.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Util.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ComposeList.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ComposeList.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ComposeList.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Entry.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Entry.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Entry.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Indentation.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Indentation.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Indentation.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/JoplinListUtil.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/JoplinListUtil.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/JoplinListUtil.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ListsIndendation.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ListsIndendation.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ListsIndendation.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/NormalizeEntries.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/NormalizeEntries.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/NormalizeEntries.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ParseLists.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ParseLists.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ParseLists.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Util.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Util.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Util.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.js +Assets/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.js.map +packages/app-cli/app/LinkSelector.d.ts +packages/app-cli/app/LinkSelector.js +packages/app-cli/app/LinkSelector.js.map +packages/app-cli/app/services/plugins/PluginRunner.d.ts +packages/app-cli/app/services/plugins/PluginRunner.js +packages/app-cli/app/services/plugins/PluginRunner.js.map +packages/app-cli/build/LinkSelector.d.ts +packages/app-cli/build/LinkSelector.js +packages/app-cli/build/LinkSelector.js.map +packages/app-cli/build/services/plugins/PluginRunner.d.ts +packages/app-cli/build/services/plugins/PluginRunner.js +packages/app-cli/build/services/plugins/PluginRunner.js.map +packages/app-cli/tests/InMemoryCache.d.ts +packages/app-cli/tests/InMemoryCache.js +packages/app-cli/tests/InMemoryCache.js.map +packages/app-cli/tests/MdToHtml.d.ts +packages/app-cli/tests/MdToHtml.js +packages/app-cli/tests/MdToHtml.js.map +packages/app-cli/tests/fsDriver.d.ts +packages/app-cli/tests/fsDriver.js +packages/app-cli/tests/fsDriver.js.map +packages/app-cli/tests/models_Setting.d.ts +packages/app-cli/tests/models_Setting.js +packages/app-cli/tests/models_Setting.js.map +packages/app-cli/tests/services/plugins/api/JoplinSetting.d.ts +packages/app-cli/tests/services/plugins/api/JoplinSetting.js +packages/app-cli/tests/services/plugins/api/JoplinSetting.js.map +packages/app-cli/tests/services/plugins/sandboxProxy.d.ts +packages/app-cli/tests/services/plugins/sandboxProxy.js +packages/app-cli/tests/services/plugins/sandboxProxy.js.map +packages/app-cli/tests/services_CommandService.d.ts +packages/app-cli/tests/services_CommandService.js +packages/app-cli/tests/services_CommandService.js.map +packages/app-cli/tests/services_InteropService.d.ts +packages/app-cli/tests/services_InteropService.js +packages/app-cli/tests/services_InteropService.js.map +packages/app-cli/tests/services_PluginService.d.ts +packages/app-cli/tests/services_PluginService.js +packages/app-cli/tests/services_PluginService.js.map +packages/app-cli/tests/services_keychainService.d.ts +packages/app-cli/tests/services_keychainService.js +packages/app-cli/tests/services_keychainService.js.map +packages/app-cli/tests/services_rest_Api.d.ts +packages/app-cli/tests/services_rest_Api.js +packages/app-cli/tests/services_rest_Api.js.map +packages/app-cli/tests/support/plugins/content_script/api/index.d.ts +packages/app-cli/tests/support/plugins/content_script/api/index.js +packages/app-cli/tests/support/plugins/content_script/api/index.js.map +packages/app-cli/tests/support/plugins/content_script/api/types.d.ts +packages/app-cli/tests/support/plugins/content_script/api/types.js +packages/app-cli/tests/support/plugins/content_script/api/types.js.map +packages/app-cli/tests/support/plugins/content_script/src/index.d.ts +packages/app-cli/tests/support/plugins/content_script/src/index.js +packages/app-cli/tests/support/plugins/content_script/src/index.js.map +packages/app-cli/tests/support/plugins/dialog/api/index.d.ts +packages/app-cli/tests/support/plugins/dialog/api/index.js +packages/app-cli/tests/support/plugins/dialog/api/index.js.map +packages/app-cli/tests/support/plugins/dialog/api/types.d.ts +packages/app-cli/tests/support/plugins/dialog/api/types.js +packages/app-cli/tests/support/plugins/dialog/api/types.js.map +packages/app-cli/tests/support/plugins/dialog/src/index.d.ts +packages/app-cli/tests/support/plugins/dialog/src/index.js +packages/app-cli/tests/support/plugins/dialog/src/index.js.map +packages/app-cli/tests/support/plugins/events/api/index.d.ts +packages/app-cli/tests/support/plugins/events/api/index.js +packages/app-cli/tests/support/plugins/events/api/index.js.map +packages/app-cli/tests/support/plugins/events/api/types.d.ts +packages/app-cli/tests/support/plugins/events/api/types.js +packages/app-cli/tests/support/plugins/events/api/types.js.map +packages/app-cli/tests/support/plugins/events/src/index.d.ts +packages/app-cli/tests/support/plugins/events/src/index.js +packages/app-cli/tests/support/plugins/events/src/index.js.map +packages/app-cli/tests/support/plugins/json_export/api/index.d.ts +packages/app-cli/tests/support/plugins/json_export/api/index.js +packages/app-cli/tests/support/plugins/json_export/api/index.js.map +packages/app-cli/tests/support/plugins/json_export/api/types.d.ts +packages/app-cli/tests/support/plugins/json_export/api/types.js +packages/app-cli/tests/support/plugins/json_export/api/types.js.map +packages/app-cli/tests/support/plugins/json_export/src/index.d.ts +packages/app-cli/tests/support/plugins/json_export/src/index.js +packages/app-cli/tests/support/plugins/json_export/src/index.js.map +packages/app-cli/tests/support/plugins/menu/api/index.d.ts +packages/app-cli/tests/support/plugins/menu/api/index.js +packages/app-cli/tests/support/plugins/menu/api/index.js.map +packages/app-cli/tests/support/plugins/menu/api/types.d.ts +packages/app-cli/tests/support/plugins/menu/api/types.js +packages/app-cli/tests/support/plugins/menu/api/types.js.map +packages/app-cli/tests/support/plugins/menu/src/index.d.ts +packages/app-cli/tests/support/plugins/menu/src/index.js +packages/app-cli/tests/support/plugins/menu/src/index.js.map +packages/app-cli/tests/support/plugins/multi_selection/api/index.d.ts +packages/app-cli/tests/support/plugins/multi_selection/api/index.js +packages/app-cli/tests/support/plugins/multi_selection/api/index.js.map +packages/app-cli/tests/support/plugins/multi_selection/api/types.d.ts +packages/app-cli/tests/support/plugins/multi_selection/api/types.js +packages/app-cli/tests/support/plugins/multi_selection/api/types.js.map +packages/app-cli/tests/support/plugins/multi_selection/src/index.d.ts +packages/app-cli/tests/support/plugins/multi_selection/src/index.js +packages/app-cli/tests/support/plugins/multi_selection/src/index.js.map +packages/app-cli/tests/support/plugins/register_command/api/index.d.ts +packages/app-cli/tests/support/plugins/register_command/api/index.js +packages/app-cli/tests/support/plugins/register_command/api/index.js.map +packages/app-cli/tests/support/plugins/register_command/api/types.d.ts +packages/app-cli/tests/support/plugins/register_command/api/types.js +packages/app-cli/tests/support/plugins/register_command/api/types.js.map +packages/app-cli/tests/support/plugins/register_command/src/index.d.ts +packages/app-cli/tests/support/plugins/register_command/src/index.js +packages/app-cli/tests/support/plugins/register_command/src/index.js.map +packages/app-cli/tests/support/plugins/selected_text/api/index.d.ts +packages/app-cli/tests/support/plugins/selected_text/api/index.js +packages/app-cli/tests/support/plugins/selected_text/api/index.js.map +packages/app-cli/tests/support/plugins/selected_text/api/types.d.ts +packages/app-cli/tests/support/plugins/selected_text/api/types.js +packages/app-cli/tests/support/plugins/selected_text/api/types.js.map +packages/app-cli/tests/support/plugins/selected_text/src/index.d.ts +packages/app-cli/tests/support/plugins/selected_text/src/index.js +packages/app-cli/tests/support/plugins/selected_text/src/index.js.map +packages/app-cli/tests/support/plugins/settings/api/index.d.ts +packages/app-cli/tests/support/plugins/settings/api/index.js +packages/app-cli/tests/support/plugins/settings/api/index.js.map +packages/app-cli/tests/support/plugins/settings/api/types.d.ts +packages/app-cli/tests/support/plugins/settings/api/types.js +packages/app-cli/tests/support/plugins/settings/api/types.js.map +packages/app-cli/tests/support/plugins/settings/src/index.d.ts +packages/app-cli/tests/support/plugins/settings/src/index.js +packages/app-cli/tests/support/plugins/settings/src/index.js.map +packages/app-cli/tests/support/plugins/toc/api/index.d.ts +packages/app-cli/tests/support/plugins/toc/api/index.js +packages/app-cli/tests/support/plugins/toc/api/index.js.map +packages/app-cli/tests/support/plugins/toc/api/types.d.ts +packages/app-cli/tests/support/plugins/toc/api/types.js +packages/app-cli/tests/support/plugins/toc/api/types.js.map +packages/app-cli/tests/support/plugins/toc/src/index.d.ts +packages/app-cli/tests/support/plugins/toc/src/index.js +packages/app-cli/tests/support/plugins/toc/src/index.js.map +packages/app-cli/tests/support/plugins/withExternalModules/api/index.d.ts +packages/app-cli/tests/support/plugins/withExternalModules/api/index.js +packages/app-cli/tests/support/plugins/withExternalModules/api/index.js.map +packages/app-cli/tests/support/plugins/withExternalModules/api/types.d.ts +packages/app-cli/tests/support/plugins/withExternalModules/api/types.js +packages/app-cli/tests/support/plugins/withExternalModules/api/types.js.map +packages/app-cli/tests/support/plugins/withExternalModules/src/index.d.ts +packages/app-cli/tests/support/plugins/withExternalModules/src/index.js +packages/app-cli/tests/support/plugins/withExternalModules/src/index.js.map +packages/app-cli/tests/synchronizer_LockHandler.d.ts +packages/app-cli/tests/synchronizer_LockHandler.js +packages/app-cli/tests/synchronizer_LockHandler.js.map +packages/app-cli/tests/synchronizer_MigrationHandler.d.ts +packages/app-cli/tests/synchronizer_MigrationHandler.js +packages/app-cli/tests/synchronizer_MigrationHandler.js.map +packages/app-desktop/ElectronAppWrapper.d.ts +packages/app-desktop/ElectronAppWrapper.js +packages/app-desktop/ElectronAppWrapper.js.map +packages/app-desktop/InteropServiceHelper.d.ts +packages/app-desktop/InteropServiceHelper.js +packages/app-desktop/InteropServiceHelper.js.map +packages/app-desktop/app.d.ts +packages/app-desktop/app.js +packages/app-desktop/app.js.map +packages/app-desktop/bridge.d.ts +packages/app-desktop/bridge.js +packages/app-desktop/bridge.js.map +packages/app-desktop/commands/copyDevCommand.d.ts +packages/app-desktop/commands/copyDevCommand.js +packages/app-desktop/commands/copyDevCommand.js.map +packages/app-desktop/commands/focusElement.d.ts +packages/app-desktop/commands/focusElement.js +packages/app-desktop/commands/focusElement.js.map +packages/app-desktop/commands/openProfileDirectory.d.ts +packages/app-desktop/commands/openProfileDirectory.js +packages/app-desktop/commands/openProfileDirectory.js.map +packages/app-desktop/commands/startExternalEditing.d.ts +packages/app-desktop/commands/startExternalEditing.js +packages/app-desktop/commands/startExternalEditing.js.map +packages/app-desktop/commands/stopExternalEditing.d.ts +packages/app-desktop/commands/stopExternalEditing.js +packages/app-desktop/commands/stopExternalEditing.js.map +packages/app-desktop/commands/toggleExternalEditing.d.ts +packages/app-desktop/commands/toggleExternalEditing.js +packages/app-desktop/commands/toggleExternalEditing.js.map +packages/app-desktop/gui/Button/Button.d.ts +packages/app-desktop/gui/Button/Button.js +packages/app-desktop/gui/Button/Button.js.map +packages/app-desktop/gui/ConfigScreen/ButtonBar.d.ts +packages/app-desktop/gui/ConfigScreen/ButtonBar.js +packages/app-desktop/gui/ConfigScreen/ButtonBar.js.map +packages/app-desktop/gui/ConfigScreen/ConfigScreen.d.ts +packages/app-desktop/gui/ConfigScreen/ConfigScreen.js +packages/app-desktop/gui/ConfigScreen/ConfigScreen.js.map +packages/app-desktop/gui/ConfigScreen/SideBar.d.ts +packages/app-desktop/gui/ConfigScreen/SideBar.js +packages/app-desktop/gui/ConfigScreen/SideBar.js.map +packages/app-desktop/gui/DropboxLoginScreen.d.ts +packages/app-desktop/gui/DropboxLoginScreen.js +packages/app-desktop/gui/DropboxLoginScreen.js.map +packages/app-desktop/gui/ErrorBoundary.d.ts +packages/app-desktop/gui/ErrorBoundary.js +packages/app-desktop/gui/ErrorBoundary.js.map +packages/app-desktop/gui/KeymapConfig/KeymapConfigScreen.d.ts +packages/app-desktop/gui/KeymapConfig/KeymapConfigScreen.js +packages/app-desktop/gui/KeymapConfig/KeymapConfigScreen.js.map +packages/app-desktop/gui/KeymapConfig/ShortcutRecorder.d.ts +packages/app-desktop/gui/KeymapConfig/ShortcutRecorder.js +packages/app-desktop/gui/KeymapConfig/ShortcutRecorder.js.map +packages/app-desktop/gui/KeymapConfig/styles/index.d.ts +packages/app-desktop/gui/KeymapConfig/styles/index.js +packages/app-desktop/gui/KeymapConfig/styles/index.js.map +packages/app-desktop/gui/KeymapConfig/utils/getLabel.d.ts +packages/app-desktop/gui/KeymapConfig/utils/getLabel.js +packages/app-desktop/gui/KeymapConfig/utils/getLabel.js.map +packages/app-desktop/gui/KeymapConfig/utils/useCommandStatus.d.ts +packages/app-desktop/gui/KeymapConfig/utils/useCommandStatus.js +packages/app-desktop/gui/KeymapConfig/utils/useCommandStatus.js.map +packages/app-desktop/gui/KeymapConfig/utils/useKeymap.d.ts +packages/app-desktop/gui/KeymapConfig/utils/useKeymap.js +packages/app-desktop/gui/KeymapConfig/utils/useKeymap.js.map +packages/app-desktop/gui/MainScreen/MainScreen.d.ts +packages/app-desktop/gui/MainScreen/MainScreen.js +packages/app-desktop/gui/MainScreen/MainScreen.js.map +packages/app-desktop/gui/MainScreen/commands/editAlarm.d.ts +packages/app-desktop/gui/MainScreen/commands/editAlarm.js +packages/app-desktop/gui/MainScreen/commands/editAlarm.js.map +packages/app-desktop/gui/MainScreen/commands/exportPdf.d.ts +packages/app-desktop/gui/MainScreen/commands/exportPdf.js +packages/app-desktop/gui/MainScreen/commands/exportPdf.js.map +packages/app-desktop/gui/MainScreen/commands/hideModalMessage.d.ts +packages/app-desktop/gui/MainScreen/commands/hideModalMessage.js +packages/app-desktop/gui/MainScreen/commands/hideModalMessage.js.map +packages/app-desktop/gui/MainScreen/commands/moveToFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/moveToFolder.js +packages/app-desktop/gui/MainScreen/commands/moveToFolder.js.map +packages/app-desktop/gui/MainScreen/commands/newFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/newFolder.js +packages/app-desktop/gui/MainScreen/commands/newFolder.js.map +packages/app-desktop/gui/MainScreen/commands/newNote.d.ts +packages/app-desktop/gui/MainScreen/commands/newNote.js +packages/app-desktop/gui/MainScreen/commands/newNote.js.map +packages/app-desktop/gui/MainScreen/commands/newSubFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/newSubFolder.js +packages/app-desktop/gui/MainScreen/commands/newSubFolder.js.map +packages/app-desktop/gui/MainScreen/commands/newTodo.d.ts +packages/app-desktop/gui/MainScreen/commands/newTodo.js +packages/app-desktop/gui/MainScreen/commands/newTodo.js.map +packages/app-desktop/gui/MainScreen/commands/openFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/openFolder.js +packages/app-desktop/gui/MainScreen/commands/openFolder.js.map +packages/app-desktop/gui/MainScreen/commands/openNote.d.ts +packages/app-desktop/gui/MainScreen/commands/openNote.js +packages/app-desktop/gui/MainScreen/commands/openNote.js.map +packages/app-desktop/gui/MainScreen/commands/openTag.d.ts +packages/app-desktop/gui/MainScreen/commands/openTag.js +packages/app-desktop/gui/MainScreen/commands/openTag.js.map +packages/app-desktop/gui/MainScreen/commands/print.d.ts +packages/app-desktop/gui/MainScreen/commands/print.js +packages/app-desktop/gui/MainScreen/commands/print.js.map +packages/app-desktop/gui/MainScreen/commands/renameFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/renameFolder.js +packages/app-desktop/gui/MainScreen/commands/renameFolder.js.map +packages/app-desktop/gui/MainScreen/commands/renameTag.d.ts +packages/app-desktop/gui/MainScreen/commands/renameTag.js +packages/app-desktop/gui/MainScreen/commands/renameTag.js.map +packages/app-desktop/gui/MainScreen/commands/search.d.ts +packages/app-desktop/gui/MainScreen/commands/search.js +packages/app-desktop/gui/MainScreen/commands/search.js.map +packages/app-desktop/gui/MainScreen/commands/selectTemplate.d.ts +packages/app-desktop/gui/MainScreen/commands/selectTemplate.js +packages/app-desktop/gui/MainScreen/commands/selectTemplate.js.map +packages/app-desktop/gui/MainScreen/commands/setTags.d.ts +packages/app-desktop/gui/MainScreen/commands/setTags.js +packages/app-desktop/gui/MainScreen/commands/setTags.js.map +packages/app-desktop/gui/MainScreen/commands/showModalMessage.d.ts +packages/app-desktop/gui/MainScreen/commands/showModalMessage.js +packages/app-desktop/gui/MainScreen/commands/showModalMessage.js.map +packages/app-desktop/gui/MainScreen/commands/showNoteContentProperties.d.ts +packages/app-desktop/gui/MainScreen/commands/showNoteContentProperties.js +packages/app-desktop/gui/MainScreen/commands/showNoteContentProperties.js.map +packages/app-desktop/gui/MainScreen/commands/showNoteProperties.d.ts +packages/app-desktop/gui/MainScreen/commands/showNoteProperties.js +packages/app-desktop/gui/MainScreen/commands/showNoteProperties.js.map +packages/app-desktop/gui/MainScreen/commands/showShareNoteDialog.d.ts +packages/app-desktop/gui/MainScreen/commands/showShareNoteDialog.js +packages/app-desktop/gui/MainScreen/commands/showShareNoteDialog.js.map +packages/app-desktop/gui/MainScreen/commands/toggleEditors.d.ts +packages/app-desktop/gui/MainScreen/commands/toggleEditors.js +packages/app-desktop/gui/MainScreen/commands/toggleEditors.js.map +packages/app-desktop/gui/MainScreen/commands/toggleNoteList.d.ts +packages/app-desktop/gui/MainScreen/commands/toggleNoteList.js +packages/app-desktop/gui/MainScreen/commands/toggleNoteList.js.map +packages/app-desktop/gui/MainScreen/commands/toggleSideBar.d.ts +packages/app-desktop/gui/MainScreen/commands/toggleSideBar.js +packages/app-desktop/gui/MainScreen/commands/toggleSideBar.js.map +packages/app-desktop/gui/MainScreen/commands/toggleVisiblePanes.d.ts +packages/app-desktop/gui/MainScreen/commands/toggleVisiblePanes.js +packages/app-desktop/gui/MainScreen/commands/toggleVisiblePanes.js.map +packages/app-desktop/gui/MenuBar.d.ts +packages/app-desktop/gui/MenuBar.js +packages/app-desktop/gui/MenuBar.js.map +packages/app-desktop/gui/MultiNoteActions.d.ts +packages/app-desktop/gui/MultiNoteActions.js +packages/app-desktop/gui/MultiNoteActions.js.map +packages/app-desktop/gui/NoteContentPropertiesDialog.d.ts +packages/app-desktop/gui/NoteContentPropertiesDialog.js +packages/app-desktop/gui/NoteContentPropertiesDialog.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Editor.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Editor.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Editor.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/styles/index.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/index.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/types.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/styles/index.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/setupContextMenu.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/setupContextMenu.js +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/setupContextMenu.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js.map +packages/app-desktop/gui/NoteEditor/NoteEditor.d.ts +packages/app-desktop/gui/NoteEditor/NoteEditor.js +packages/app-desktop/gui/NoteEditor/NoteEditor.js.map +packages/app-desktop/gui/NoteEditor/NoteTitle/NoteTitleBar.d.ts +packages/app-desktop/gui/NoteEditor/NoteTitle/NoteTitleBar.js +packages/app-desktop/gui/NoteEditor/NoteTitle/NoteTitleBar.js.map +packages/app-desktop/gui/NoteEditor/commands/editorCommandDeclarations.d.ts +packages/app-desktop/gui/NoteEditor/commands/editorCommandDeclarations.js +packages/app-desktop/gui/NoteEditor/commands/editorCommandDeclarations.js.map +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteBody.d.ts +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteBody.js +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteBody.js.map +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteTitle.d.ts +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteTitle.js +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteTitle.js.map +packages/app-desktop/gui/NoteEditor/commands/showLocalSearch.d.ts +packages/app-desktop/gui/NoteEditor/commands/showLocalSearch.js +packages/app-desktop/gui/NoteEditor/commands/showLocalSearch.js.map +packages/app-desktop/gui/NoteEditor/commands/showRevisions.d.ts +packages/app-desktop/gui/NoteEditor/commands/showRevisions.js +packages/app-desktop/gui/NoteEditor/commands/showRevisions.js.map +packages/app-desktop/gui/NoteEditor/styles/index.d.ts +packages/app-desktop/gui/NoteEditor/styles/index.js +packages/app-desktop/gui/NoteEditor/styles/index.js.map +packages/app-desktop/gui/NoteEditor/utils/contextMenu.d.ts +packages/app-desktop/gui/NoteEditor/utils/contextMenu.js +packages/app-desktop/gui/NoteEditor/utils/contextMenu.js.map +packages/app-desktop/gui/NoteEditor/utils/index.d.ts +packages/app-desktop/gui/NoteEditor/utils/index.js +packages/app-desktop/gui/NoteEditor/utils/index.js.map +packages/app-desktop/gui/NoteEditor/utils/resourceHandling.d.ts +packages/app-desktop/gui/NoteEditor/utils/resourceHandling.js +packages/app-desktop/gui/NoteEditor/utils/resourceHandling.js.map +packages/app-desktop/gui/NoteEditor/utils/types.d.ts +packages/app-desktop/gui/NoteEditor/utils/types.js +packages/app-desktop/gui/NoteEditor/utils/types.js.map +packages/app-desktop/gui/NoteEditor/utils/useDropHandler.d.ts +packages/app-desktop/gui/NoteEditor/utils/useDropHandler.js +packages/app-desktop/gui/NoteEditor/utils/useDropHandler.js.map +packages/app-desktop/gui/NoteEditor/utils/useFolder.d.ts +packages/app-desktop/gui/NoteEditor/utils/useFolder.js +packages/app-desktop/gui/NoteEditor/utils/useFolder.js.map +packages/app-desktop/gui/NoteEditor/utils/useFormNote.d.ts +packages/app-desktop/gui/NoteEditor/utils/useFormNote.js +packages/app-desktop/gui/NoteEditor/utils/useFormNote.js.map +packages/app-desktop/gui/NoteEditor/utils/useMarkupToHtml.d.ts +packages/app-desktop/gui/NoteEditor/utils/useMarkupToHtml.js +packages/app-desktop/gui/NoteEditor/utils/useMarkupToHtml.js.map +packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.d.ts +packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.js +packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.js.map +packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.d.ts +packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.js +packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.js.map +packages/app-desktop/gui/NoteEditor/utils/usePluginServiceRegistration.d.ts +packages/app-desktop/gui/NoteEditor/utils/usePluginServiceRegistration.js +packages/app-desktop/gui/NoteEditor/utils/usePluginServiceRegistration.js.map +packages/app-desktop/gui/NoteEditor/utils/useSearchMarkers.d.ts +packages/app-desktop/gui/NoteEditor/utils/useSearchMarkers.js +packages/app-desktop/gui/NoteEditor/utils/useSearchMarkers.js.map +packages/app-desktop/gui/NoteEditor/utils/useWindowCommandHandler.d.ts +packages/app-desktop/gui/NoteEditor/utils/useWindowCommandHandler.js +packages/app-desktop/gui/NoteEditor/utils/useWindowCommandHandler.js.map +packages/app-desktop/gui/NoteList/NoteList.d.ts +packages/app-desktop/gui/NoteList/NoteList.js +packages/app-desktop/gui/NoteList/NoteList.js.map +packages/app-desktop/gui/NoteList/commands/focusElementNoteList.d.ts +packages/app-desktop/gui/NoteList/commands/focusElementNoteList.js +packages/app-desktop/gui/NoteList/commands/focusElementNoteList.js.map +packages/app-desktop/gui/NoteListControls/NoteListControls.d.ts +packages/app-desktop/gui/NoteListControls/NoteListControls.js +packages/app-desktop/gui/NoteListControls/NoteListControls.js.map +packages/app-desktop/gui/NoteListControls/commands/focusSearch.d.ts +packages/app-desktop/gui/NoteListControls/commands/focusSearch.js +packages/app-desktop/gui/NoteListControls/commands/focusSearch.js.map +packages/app-desktop/gui/NoteListItem.d.ts +packages/app-desktop/gui/NoteListItem.js +packages/app-desktop/gui/NoteListItem.js.map +packages/app-desktop/gui/NoteTextViewer.d.ts +packages/app-desktop/gui/NoteTextViewer.js +packages/app-desktop/gui/NoteTextViewer.js.map +packages/app-desktop/gui/NoteToolbar/NoteToolbar.d.ts +packages/app-desktop/gui/NoteToolbar/NoteToolbar.js +packages/app-desktop/gui/NoteToolbar/NoteToolbar.js.map +packages/app-desktop/gui/OneDriveLoginScreen.d.ts +packages/app-desktop/gui/OneDriveLoginScreen.js +packages/app-desktop/gui/OneDriveLoginScreen.js.map +packages/app-desktop/gui/ResizableLayout/ResizableLayout.d.ts +packages/app-desktop/gui/ResizableLayout/ResizableLayout.js +packages/app-desktop/gui/ResizableLayout/ResizableLayout.js.map +packages/app-desktop/gui/ResizableLayout/hooks/useLayoutItemSizes.d.ts +packages/app-desktop/gui/ResizableLayout/hooks/useLayoutItemSizes.js +packages/app-desktop/gui/ResizableLayout/hooks/useLayoutItemSizes.js.map +packages/app-desktop/gui/ResizableLayout/hooks/useWindowResizeEvent.d.ts +packages/app-desktop/gui/ResizableLayout/hooks/useWindowResizeEvent.js +packages/app-desktop/gui/ResizableLayout/hooks/useWindowResizeEvent.js.map +packages/app-desktop/gui/ResourceScreen.d.ts +packages/app-desktop/gui/ResourceScreen.js +packages/app-desktop/gui/ResourceScreen.js.map +packages/app-desktop/gui/Root.d.ts +packages/app-desktop/gui/Root.js +packages/app-desktop/gui/Root.js.map +packages/app-desktop/gui/Root_UpgradeSyncTarget.d.ts +packages/app-desktop/gui/Root_UpgradeSyncTarget.js +packages/app-desktop/gui/Root_UpgradeSyncTarget.js.map +packages/app-desktop/gui/SearchBar/SearchBar.d.ts +packages/app-desktop/gui/SearchBar/SearchBar.js +packages/app-desktop/gui/SearchBar/SearchBar.js.map +packages/app-desktop/gui/SearchBar/hooks/useSearch.d.ts +packages/app-desktop/gui/SearchBar/hooks/useSearch.js +packages/app-desktop/gui/SearchBar/hooks/useSearch.js.map +packages/app-desktop/gui/SearchBar/styles/index.d.ts +packages/app-desktop/gui/SearchBar/styles/index.js +packages/app-desktop/gui/SearchBar/styles/index.js.map +packages/app-desktop/gui/ShareNoteDialog.d.ts +packages/app-desktop/gui/ShareNoteDialog.js +packages/app-desktop/gui/ShareNoteDialog.js.map +packages/app-desktop/gui/SideBar/SideBar.d.ts +packages/app-desktop/gui/SideBar/SideBar.js +packages/app-desktop/gui/SideBar/SideBar.js.map +packages/app-desktop/gui/SideBar/commands/focusElementSideBar.d.ts +packages/app-desktop/gui/SideBar/commands/focusElementSideBar.js +packages/app-desktop/gui/SideBar/commands/focusElementSideBar.js.map +packages/app-desktop/gui/SideBar/styles/index.d.ts +packages/app-desktop/gui/SideBar/styles/index.js +packages/app-desktop/gui/SideBar/styles/index.js.map +packages/app-desktop/gui/StatusScreen/StatusScreen.d.ts +packages/app-desktop/gui/StatusScreen/StatusScreen.js +packages/app-desktop/gui/StatusScreen/StatusScreen.js.map +packages/app-desktop/gui/TagList.d.ts +packages/app-desktop/gui/TagList.js +packages/app-desktop/gui/TagList.js.map +packages/app-desktop/gui/ToggleEditorsButton/ToggleEditorsButton.d.ts +packages/app-desktop/gui/ToggleEditorsButton/ToggleEditorsButton.js +packages/app-desktop/gui/ToggleEditorsButton/ToggleEditorsButton.js.map +packages/app-desktop/gui/ToggleEditorsButton/styles/index.d.ts +packages/app-desktop/gui/ToggleEditorsButton/styles/index.js +packages/app-desktop/gui/ToggleEditorsButton/styles/index.js.map +packages/app-desktop/gui/ToolbarBase.d.ts +packages/app-desktop/gui/ToolbarBase.js +packages/app-desktop/gui/ToolbarBase.js.map +packages/app-desktop/gui/ToolbarButton/ToolbarButton.d.ts +packages/app-desktop/gui/ToolbarButton/ToolbarButton.js +packages/app-desktop/gui/ToolbarButton/ToolbarButton.js.map +packages/app-desktop/gui/ToolbarButton/styles/index.d.ts +packages/app-desktop/gui/ToolbarButton/styles/index.js +packages/app-desktop/gui/ToolbarButton/styles/index.js.map +packages/app-desktop/gui/hooks/useEffectDebugger.d.ts +packages/app-desktop/gui/hooks/useEffectDebugger.js +packages/app-desktop/gui/hooks/useEffectDebugger.js.map +packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.d.ts +packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.js +packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.js.map +packages/app-desktop/gui/hooks/usePrevious.d.ts +packages/app-desktop/gui/hooks/usePrevious.js +packages/app-desktop/gui/hooks/usePrevious.js.map +packages/app-desktop/gui/hooks/usePropsDebugger.d.ts +packages/app-desktop/gui/hooks/usePropsDebugger.js +packages/app-desktop/gui/hooks/usePropsDebugger.js.map +packages/app-desktop/gui/menuCommandNames.d.ts +packages/app-desktop/gui/menuCommandNames.js +packages/app-desktop/gui/menuCommandNames.js.map +packages/app-desktop/gui/style/StyledInput.d.ts +packages/app-desktop/gui/style/StyledInput.js +packages/app-desktop/gui/style/StyledInput.js.map +packages/app-desktop/gui/style/StyledTextInput.d.ts +packages/app-desktop/gui/style/StyledTextInput.js +packages/app-desktop/gui/style/StyledTextInput.js.map +packages/app-desktop/gui/utils/NoteListUtils.d.ts +packages/app-desktop/gui/utils/NoteListUtils.js +packages/app-desktop/gui/utils/NoteListUtils.js.map +packages/app-desktop/plugins/GotoAnything.d.ts +packages/app-desktop/plugins/GotoAnything.js +packages/app-desktop/plugins/GotoAnything.js.map +packages/app-desktop/services/bridge.d.ts +packages/app-desktop/services/bridge.js +packages/app-desktop/services/bridge.js.map +packages/app-desktop/services/commands/types.d.ts +packages/app-desktop/services/commands/types.js +packages/app-desktop/services/commands/types.js.map +packages/app-desktop/services/plugins/PlatformImplementation.d.ts +packages/app-desktop/services/plugins/PlatformImplementation.js +packages/app-desktop/services/plugins/PlatformImplementation.js.map +packages/app-desktop/services/plugins/PluginRunner.d.ts +packages/app-desktop/services/plugins/PluginRunner.js +packages/app-desktop/services/plugins/PluginRunner.js.map +packages/app-desktop/services/plugins/UserWebview.d.ts +packages/app-desktop/services/plugins/UserWebview.js +packages/app-desktop/services/plugins/UserWebview.js.map +packages/app-desktop/services/plugins/UserWebviewDialog.d.ts +packages/app-desktop/services/plugins/UserWebviewDialog.js +packages/app-desktop/services/plugins/UserWebviewDialog.js.map +packages/app-desktop/services/plugins/UserWebviewDialogButtonBar.d.ts +packages/app-desktop/services/plugins/UserWebviewDialogButtonBar.js +packages/app-desktop/services/plugins/UserWebviewDialogButtonBar.js.map +packages/app-desktop/services/plugins/hooks/useThemeCss.d.ts +packages/app-desktop/services/plugins/hooks/useThemeCss.js +packages/app-desktop/services/plugins/hooks/useThemeCss.js.map +packages/app-desktop/services/plugins/hooks/useViewIsReady.d.ts +packages/app-desktop/services/plugins/hooks/useViewIsReady.js +packages/app-desktop/services/plugins/hooks/useViewIsReady.js.map +packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.d.ts +packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.js +packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.js.map +packages/app-mobile/PluginAssetsLoader.d.ts +packages/app-mobile/PluginAssetsLoader.js +packages/app-mobile/PluginAssetsLoader.js.map +packages/app-mobile/components/BackButtonDialogBox.d.ts +packages/app-mobile/components/BackButtonDialogBox.js +packages/app-mobile/components/BackButtonDialogBox.js.map +packages/app-mobile/components/CameraView.d.ts +packages/app-mobile/components/CameraView.js +packages/app-mobile/components/CameraView.js.map +packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.d.ts +packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.js +packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.js.map +packages/app-mobile/components/NoteBodyViewer/hooks/useOnMessage.d.ts +packages/app-mobile/components/NoteBodyViewer/hooks/useOnMessage.js +packages/app-mobile/components/NoteBodyViewer/hooks/useOnMessage.js.map +packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.d.ts +packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.js +packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.js.map +packages/app-mobile/components/NoteBodyViewer/hooks/useSource.d.ts +packages/app-mobile/components/NoteBodyViewer/hooks/useSource.js +packages/app-mobile/components/NoteBodyViewer/hooks/useSource.js.map +packages/app-mobile/components/SelectDateTimeDialog.d.ts +packages/app-mobile/components/SelectDateTimeDialog.js +packages/app-mobile/components/SelectDateTimeDialog.js.map +packages/app-mobile/components/screens/Note.d.ts +packages/app-mobile/components/screens/Note.js +packages/app-mobile/components/screens/Note.js.map +packages/app-mobile/components/screens/UpgradeSyncTargetScreen.d.ts +packages/app-mobile/components/screens/UpgradeSyncTargetScreen.js +packages/app-mobile/components/screens/UpgradeSyncTargetScreen.js.map +packages/app-mobile/services/AlarmServiceDriver.android.d.ts +packages/app-mobile/services/AlarmServiceDriver.android.js +packages/app-mobile/services/AlarmServiceDriver.android.js.map +packages/app-mobile/services/AlarmServiceDriver.ios.d.ts +packages/app-mobile/services/AlarmServiceDriver.ios.js +packages/app-mobile/services/AlarmServiceDriver.ios.js.map +packages/app-mobile/setUpQuickActions.d.ts +packages/app-mobile/setUpQuickActions.js +packages/app-mobile/setUpQuickActions.js.map +packages/app-mobile/utils/ShareExtension.d.ts +packages/app-mobile/utils/ShareExtension.js +packages/app-mobile/utils/ShareExtension.js.map +packages/app-mobile/utils/checkPermissions.d.ts +packages/app-mobile/utils/checkPermissions.js +packages/app-mobile/utils/checkPermissions.js.map +packages/app-mobile/utils/shareHandler.d.ts +packages/app-mobile/utils/shareHandler.js +packages/app-mobile/utils/shareHandler.js.map +packages/fork-htmlparser2/src/CollectingHandler.d.ts +packages/fork-htmlparser2/src/CollectingHandler.js +packages/fork-htmlparser2/src/CollectingHandler.js.map +packages/fork-htmlparser2/src/FeedHandler.d.ts +packages/fork-htmlparser2/src/FeedHandler.js +packages/fork-htmlparser2/src/FeedHandler.js.map +packages/fork-htmlparser2/src/FeedHandler.spec.d.ts +packages/fork-htmlparser2/src/FeedHandler.spec.js +packages/fork-htmlparser2/src/FeedHandler.spec.js.map +packages/fork-htmlparser2/src/MultiplexHandler.d.ts +packages/fork-htmlparser2/src/MultiplexHandler.js +packages/fork-htmlparser2/src/MultiplexHandler.js.map +packages/fork-htmlparser2/src/Parser.d.ts +packages/fork-htmlparser2/src/Parser.js +packages/fork-htmlparser2/src/Parser.js.map +packages/fork-htmlparser2/src/Parser.spec.d.ts +packages/fork-htmlparser2/src/Parser.spec.js +packages/fork-htmlparser2/src/Parser.spec.js.map +packages/fork-htmlparser2/src/Tokenizer.d.ts +packages/fork-htmlparser2/src/Tokenizer.js +packages/fork-htmlparser2/src/Tokenizer.js.map +packages/fork-htmlparser2/src/WritableStream.d.ts +packages/fork-htmlparser2/src/WritableStream.js +packages/fork-htmlparser2/src/WritableStream.js.map +packages/fork-htmlparser2/src/WritableStream.spec.d.ts +packages/fork-htmlparser2/src/WritableStream.spec.js +packages/fork-htmlparser2/src/WritableStream.spec.js.map +packages/fork-htmlparser2/src/__fixtures__/test-helper.d.ts +packages/fork-htmlparser2/src/__fixtures__/test-helper.js +packages/fork-htmlparser2/src/__fixtures__/test-helper.js.map +packages/fork-htmlparser2/src/__tests__/events.d.ts +packages/fork-htmlparser2/src/__tests__/events.js +packages/fork-htmlparser2/src/__tests__/events.js.map +packages/fork-htmlparser2/src/__tests__/stream.d.ts +packages/fork-htmlparser2/src/__tests__/stream.js +packages/fork-htmlparser2/src/__tests__/stream.js.map +packages/fork-htmlparser2/src/index.d.ts +packages/fork-htmlparser2/src/index.js +packages/fork-htmlparser2/src/index.js.map +packages/fork-htmlparser2/src/index.spec.d.ts +packages/fork-htmlparser2/src/index.spec.js +packages/fork-htmlparser2/src/index.spec.js.map +packages/lib/AsyncActionQueue.d.ts +packages/lib/AsyncActionQueue.js +packages/lib/AsyncActionQueue.js.map +packages/lib/BaseApplication.d.ts +packages/lib/BaseApplication.js +packages/lib/BaseApplication.js.map +packages/lib/BaseModel.d.ts +packages/lib/BaseModel.js +packages/lib/BaseModel.js.map +packages/lib/InMemoryCache.d.ts +packages/lib/InMemoryCache.js +packages/lib/InMemoryCache.js.map +packages/lib/JoplinServerApi.d.ts +packages/lib/JoplinServerApi.js +packages/lib/JoplinServerApi.js.map +packages/lib/Logger.d.ts +packages/lib/Logger.js +packages/lib/Logger.js.map +packages/lib/PoorManIntervals.d.ts +packages/lib/PoorManIntervals.js +packages/lib/PoorManIntervals.js.map +packages/lib/Synchronizer.d.ts +packages/lib/Synchronizer.js +packages/lib/Synchronizer.js.map +packages/lib/commands/historyBackward.d.ts +packages/lib/commands/historyBackward.js +packages/lib/commands/historyBackward.js.map +packages/lib/commands/historyForward.d.ts +packages/lib/commands/historyForward.js +packages/lib/commands/historyForward.js.map +packages/lib/commands/synchronize.d.ts +packages/lib/commands/synchronize.js +packages/lib/commands/synchronize.js.map +packages/lib/errorUtils.d.ts +packages/lib/errorUtils.js +packages/lib/errorUtils.js.map +packages/lib/eventManager.d.ts +packages/lib/eventManager.js +packages/lib/eventManager.js.map +packages/lib/fs-driver-node.d.ts +packages/lib/fs-driver-node.js +packages/lib/fs-driver-node.js.map +packages/lib/locale.d.ts +packages/lib/locale.js +packages/lib/locale.js.map +packages/lib/markdownUtils.d.ts +packages/lib/markdownUtils.js +packages/lib/markdownUtils.js.map +packages/lib/markupLanguageUtils.d.ts +packages/lib/markupLanguageUtils.js +packages/lib/markupLanguageUtils.js.map +packages/lib/models/Alarm.d.ts +packages/lib/models/Alarm.js +packages/lib/models/Alarm.js.map +packages/lib/models/Setting.d.ts +packages/lib/models/Setting.js +packages/lib/models/Setting.js.map +packages/lib/models/utils/modelFeed.d.ts +packages/lib/models/utils/modelFeed.js +packages/lib/models/utils/modelFeed.js.map +packages/lib/models/utils/paginationToSql.d.ts +packages/lib/models/utils/paginationToSql.js +packages/lib/models/utils/paginationToSql.js.map +packages/lib/models/utils/types.d.ts +packages/lib/models/utils/types.js +packages/lib/models/utils/types.js.map +packages/lib/ntpDate.d.ts +packages/lib/ntpDate.js +packages/lib/ntpDate.js.map +packages/lib/path-utils.d.ts +packages/lib/path-utils.js +packages/lib/path-utils.js.map +packages/lib/reducer.d.ts +packages/lib/reducer.js +packages/lib/reducer.js.map +packages/lib/services/AlarmService.d.ts +packages/lib/services/AlarmService.js +packages/lib/services/AlarmService.js.map +packages/lib/services/AlarmServiceDriverNode.d.ts +packages/lib/services/AlarmServiceDriverNode.js +packages/lib/services/AlarmServiceDriverNode.js.map +packages/lib/services/BaseService.d.ts +packages/lib/services/BaseService.js +packages/lib/services/BaseService.js.map +packages/lib/services/CommandService.d.ts +packages/lib/services/CommandService.js +packages/lib/services/CommandService.js.map +packages/lib/services/KeymapService.d.ts +packages/lib/services/KeymapService.js +packages/lib/services/KeymapService.js.map +packages/lib/services/ResourceEditWatcher/index.d.ts +packages/lib/services/ResourceEditWatcher/index.js +packages/lib/services/ResourceEditWatcher/index.js.map +packages/lib/services/ResourceEditWatcher/reducer.d.ts +packages/lib/services/ResourceEditWatcher/reducer.js +packages/lib/services/ResourceEditWatcher/reducer.js.map +packages/lib/services/SettingUtils.d.ts +packages/lib/services/SettingUtils.js +packages/lib/services/SettingUtils.js.map +packages/lib/services/UndoRedoService.d.ts +packages/lib/services/UndoRedoService.js +packages/lib/services/UndoRedoService.js.map +packages/lib/services/WhenClause.d.ts +packages/lib/services/WhenClause.js +packages/lib/services/WhenClause.js.map +packages/lib/services/commands/MenuUtils.d.ts +packages/lib/services/commands/MenuUtils.js +packages/lib/services/commands/MenuUtils.js.map +packages/lib/services/commands/ToolbarButtonUtils.d.ts +packages/lib/services/commands/ToolbarButtonUtils.js +packages/lib/services/commands/ToolbarButtonUtils.js.map +packages/lib/services/commands/commandsToMarkdownTable.d.ts +packages/lib/services/commands/commandsToMarkdownTable.js +packages/lib/services/commands/commandsToMarkdownTable.js.map +packages/lib/services/commands/propsHaveChanged.d.ts +packages/lib/services/commands/propsHaveChanged.js +packages/lib/services/commands/propsHaveChanged.js.map +packages/lib/services/commands/stateToWhenClauseContext.d.ts +packages/lib/services/commands/stateToWhenClauseContext.js +packages/lib/services/commands/stateToWhenClauseContext.js.map +packages/lib/services/contextkey/contextkey.d.ts +packages/lib/services/contextkey/contextkey.js +packages/lib/services/contextkey/contextkey.js.map +packages/lib/services/debug/populateDatabase.d.ts +packages/lib/services/debug/populateDatabase.js +packages/lib/services/debug/populateDatabase.js.map +packages/lib/services/interop/InteropService.d.ts +packages/lib/services/interop/InteropService.js +packages/lib/services/interop/InteropService.js.map +packages/lib/services/interop/InteropService_Exporter_Base.d.ts +packages/lib/services/interop/InteropService_Exporter_Base.js +packages/lib/services/interop/InteropService_Exporter_Base.js.map +packages/lib/services/interop/InteropService_Exporter_Custom.d.ts +packages/lib/services/interop/InteropService_Exporter_Custom.js +packages/lib/services/interop/InteropService_Exporter_Custom.js.map +packages/lib/services/interop/InteropService_Exporter_Html.d.ts +packages/lib/services/interop/InteropService_Exporter_Html.js +packages/lib/services/interop/InteropService_Exporter_Html.js.map +packages/lib/services/interop/InteropService_Exporter_Jex.d.ts +packages/lib/services/interop/InteropService_Exporter_Jex.js +packages/lib/services/interop/InteropService_Exporter_Jex.js.map +packages/lib/services/interop/InteropService_Exporter_Md.d.ts +packages/lib/services/interop/InteropService_Exporter_Md.js +packages/lib/services/interop/InteropService_Exporter_Md.js.map +packages/lib/services/interop/InteropService_Exporter_Raw.d.ts +packages/lib/services/interop/InteropService_Exporter_Raw.js +packages/lib/services/interop/InteropService_Exporter_Raw.js.map +packages/lib/services/interop/InteropService_Importer_Base.d.ts +packages/lib/services/interop/InteropService_Importer_Base.js +packages/lib/services/interop/InteropService_Importer_Base.js.map +packages/lib/services/interop/InteropService_Importer_Custom.d.ts +packages/lib/services/interop/InteropService_Importer_Custom.js +packages/lib/services/interop/InteropService_Importer_Custom.js.map +packages/lib/services/interop/InteropService_Importer_EnexToHtml.d.ts +packages/lib/services/interop/InteropService_Importer_EnexToHtml.js +packages/lib/services/interop/InteropService_Importer_EnexToHtml.js.map +packages/lib/services/interop/InteropService_Importer_EnexToMd.d.ts +packages/lib/services/interop/InteropService_Importer_EnexToMd.js +packages/lib/services/interop/InteropService_Importer_EnexToMd.js.map +packages/lib/services/interop/InteropService_Importer_Jex.d.ts +packages/lib/services/interop/InteropService_Importer_Jex.js +packages/lib/services/interop/InteropService_Importer_Jex.js.map +packages/lib/services/interop/InteropService_Importer_Md.d.ts +packages/lib/services/interop/InteropService_Importer_Md.js +packages/lib/services/interop/InteropService_Importer_Md.js.map +packages/lib/services/interop/InteropService_Importer_Raw.d.ts +packages/lib/services/interop/InteropService_Importer_Raw.js +packages/lib/services/interop/InteropService_Importer_Raw.js.map +packages/lib/services/interop/types.d.ts +packages/lib/services/interop/types.js +packages/lib/services/interop/types.js.map +packages/lib/services/keychain/KeychainService.d.ts +packages/lib/services/keychain/KeychainService.js +packages/lib/services/keychain/KeychainService.js.map +packages/lib/services/keychain/KeychainServiceDriver.dummy.d.ts +packages/lib/services/keychain/KeychainServiceDriver.dummy.js +packages/lib/services/keychain/KeychainServiceDriver.dummy.js.map +packages/lib/services/keychain/KeychainServiceDriver.mobile.d.ts +packages/lib/services/keychain/KeychainServiceDriver.mobile.js +packages/lib/services/keychain/KeychainServiceDriver.mobile.js.map +packages/lib/services/keychain/KeychainServiceDriver.node.d.ts +packages/lib/services/keychain/KeychainServiceDriver.node.js +packages/lib/services/keychain/KeychainServiceDriver.node.js.map +packages/lib/services/keychain/KeychainServiceDriverBase.d.ts +packages/lib/services/keychain/KeychainServiceDriverBase.js +packages/lib/services/keychain/KeychainServiceDriverBase.js.map +packages/lib/services/plugins/BasePluginRunner.d.ts +packages/lib/services/plugins/BasePluginRunner.js +packages/lib/services/plugins/BasePluginRunner.js.map +packages/lib/services/plugins/MenuController.d.ts +packages/lib/services/plugins/MenuController.js +packages/lib/services/plugins/MenuController.js.map +packages/lib/services/plugins/MenuItemController.d.ts +packages/lib/services/plugins/MenuItemController.js +packages/lib/services/plugins/MenuItemController.js.map +packages/lib/services/plugins/Plugin.d.ts +packages/lib/services/plugins/Plugin.js +packages/lib/services/plugins/Plugin.js.map +packages/lib/services/plugins/PluginService.d.ts +packages/lib/services/plugins/PluginService.js +packages/lib/services/plugins/PluginService.js.map +packages/lib/services/plugins/ToolbarButtonController.d.ts +packages/lib/services/plugins/ToolbarButtonController.js +packages/lib/services/plugins/ToolbarButtonController.js.map +packages/lib/services/plugins/ViewController.d.ts +packages/lib/services/plugins/ViewController.js +packages/lib/services/plugins/ViewController.js.map +packages/lib/services/plugins/WebviewController.d.ts +packages/lib/services/plugins/WebviewController.js +packages/lib/services/plugins/WebviewController.js.map +packages/lib/services/plugins/api/Global.d.ts +packages/lib/services/plugins/api/Global.js +packages/lib/services/plugins/api/Global.js.map +packages/lib/services/plugins/api/Joplin.d.ts +packages/lib/services/plugins/api/Joplin.js +packages/lib/services/plugins/api/Joplin.js.map +packages/lib/services/plugins/api/JoplinCommands.d.ts +packages/lib/services/plugins/api/JoplinCommands.js +packages/lib/services/plugins/api/JoplinCommands.js.map +packages/lib/services/plugins/api/JoplinData.d.ts +packages/lib/services/plugins/api/JoplinData.js +packages/lib/services/plugins/api/JoplinData.js.map +packages/lib/services/plugins/api/JoplinFilters.d.ts +packages/lib/services/plugins/api/JoplinFilters.js +packages/lib/services/plugins/api/JoplinFilters.js.map +packages/lib/services/plugins/api/JoplinInterop.d.ts +packages/lib/services/plugins/api/JoplinInterop.js +packages/lib/services/plugins/api/JoplinInterop.js.map +packages/lib/services/plugins/api/JoplinPlugins.d.ts +packages/lib/services/plugins/api/JoplinPlugins.js +packages/lib/services/plugins/api/JoplinPlugins.js.map +packages/lib/services/plugins/api/JoplinSettings.d.ts +packages/lib/services/plugins/api/JoplinSettings.js +packages/lib/services/plugins/api/JoplinSettings.js.map +packages/lib/services/plugins/api/JoplinViews.d.ts +packages/lib/services/plugins/api/JoplinViews.js +packages/lib/services/plugins/api/JoplinViews.js.map +packages/lib/services/plugins/api/JoplinViewsDialogs.d.ts +packages/lib/services/plugins/api/JoplinViewsDialogs.js +packages/lib/services/plugins/api/JoplinViewsDialogs.js.map +packages/lib/services/plugins/api/JoplinViewsMenuItems.d.ts +packages/lib/services/plugins/api/JoplinViewsMenuItems.js +packages/lib/services/plugins/api/JoplinViewsMenuItems.js.map +packages/lib/services/plugins/api/JoplinViewsMenus.d.ts +packages/lib/services/plugins/api/JoplinViewsMenus.js +packages/lib/services/plugins/api/JoplinViewsMenus.js.map +packages/lib/services/plugins/api/JoplinViewsPanels.d.ts +packages/lib/services/plugins/api/JoplinViewsPanels.js +packages/lib/services/plugins/api/JoplinViewsPanels.js.map +packages/lib/services/plugins/api/JoplinViewsToolbarButtons.d.ts +packages/lib/services/plugins/api/JoplinViewsToolbarButtons.js +packages/lib/services/plugins/api/JoplinViewsToolbarButtons.js.map +packages/lib/services/plugins/api/JoplinWorkspace.d.ts +packages/lib/services/plugins/api/JoplinWorkspace.js +packages/lib/services/plugins/api/JoplinWorkspace.js.map +packages/lib/services/plugins/api/types.d.ts +packages/lib/services/plugins/api/types.js +packages/lib/services/plugins/api/types.js.map +packages/lib/services/plugins/reducer.d.ts +packages/lib/services/plugins/reducer.js +packages/lib/services/plugins/reducer.js.map +packages/lib/services/plugins/sandboxProxy.d.ts +packages/lib/services/plugins/sandboxProxy.js +packages/lib/services/plugins/sandboxProxy.js.map +packages/lib/services/plugins/utils/contentScriptsToRendererRules.d.ts +packages/lib/services/plugins/utils/contentScriptsToRendererRules.js +packages/lib/services/plugins/utils/contentScriptsToRendererRules.js.map +packages/lib/services/plugins/utils/createViewHandle.d.ts +packages/lib/services/plugins/utils/createViewHandle.js +packages/lib/services/plugins/utils/createViewHandle.js.map +packages/lib/services/plugins/utils/executeSandboxCall.d.ts +packages/lib/services/plugins/utils/executeSandboxCall.js +packages/lib/services/plugins/utils/executeSandboxCall.js.map +packages/lib/services/plugins/utils/manifestFromObject.d.ts +packages/lib/services/plugins/utils/manifestFromObject.js +packages/lib/services/plugins/utils/manifestFromObject.js.map +packages/lib/services/plugins/utils/mapEventHandlersToIds.d.ts +packages/lib/services/plugins/utils/mapEventHandlersToIds.js +packages/lib/services/plugins/utils/mapEventHandlersToIds.js.map +packages/lib/services/plugins/utils/types.d.ts +packages/lib/services/plugins/utils/types.js +packages/lib/services/plugins/utils/types.js.map +packages/lib/services/rest/Api.d.ts +packages/lib/services/rest/Api.js +packages/lib/services/rest/Api.js.map +packages/lib/services/rest/ApiResponse.d.ts +packages/lib/services/rest/ApiResponse.js +packages/lib/services/rest/ApiResponse.js.map +packages/lib/services/rest/actionApi.desktop.d.ts +packages/lib/services/rest/actionApi.desktop.js +packages/lib/services/rest/actionApi.desktop.js.map +packages/lib/services/rest/routes/folders.d.ts +packages/lib/services/rest/routes/folders.js +packages/lib/services/rest/routes/folders.js.map +packages/lib/services/rest/routes/master_keys.d.ts +packages/lib/services/rest/routes/master_keys.js +packages/lib/services/rest/routes/master_keys.js.map +packages/lib/services/rest/routes/notes.d.ts +packages/lib/services/rest/routes/notes.js +packages/lib/services/rest/routes/notes.js.map +packages/lib/services/rest/routes/ping.d.ts +packages/lib/services/rest/routes/ping.js +packages/lib/services/rest/routes/ping.js.map +packages/lib/services/rest/routes/resources.d.ts +packages/lib/services/rest/routes/resources.js +packages/lib/services/rest/routes/resources.js.map +packages/lib/services/rest/routes/search.d.ts +packages/lib/services/rest/routes/search.js +packages/lib/services/rest/routes/search.js.map +packages/lib/services/rest/routes/tags.d.ts +packages/lib/services/rest/routes/tags.js +packages/lib/services/rest/routes/tags.js.map +packages/lib/services/rest/utils/defaultAction.d.ts +packages/lib/services/rest/utils/defaultAction.js +packages/lib/services/rest/utils/defaultAction.js.map +packages/lib/services/rest/utils/defaultLoadOptions.d.ts +packages/lib/services/rest/utils/defaultLoadOptions.js +packages/lib/services/rest/utils/defaultLoadOptions.js.map +packages/lib/services/rest/utils/defaultSaveOptions.d.ts +packages/lib/services/rest/utils/defaultSaveOptions.js +packages/lib/services/rest/utils/defaultSaveOptions.js.map +packages/lib/services/rest/utils/errors.d.ts +packages/lib/services/rest/utils/errors.js +packages/lib/services/rest/utils/errors.js.map +packages/lib/services/rest/utils/paginatedResults.d.ts +packages/lib/services/rest/utils/paginatedResults.js +packages/lib/services/rest/utils/paginatedResults.js.map +packages/lib/services/rest/utils/readonlyProperties.d.ts +packages/lib/services/rest/utils/readonlyProperties.js +packages/lib/services/rest/utils/readonlyProperties.js.map +packages/lib/services/rest/utils/requestFields.d.ts +packages/lib/services/rest/utils/requestFields.js +packages/lib/services/rest/utils/requestFields.js.map +packages/lib/services/rest/utils/requestPaginationOptions.d.ts +packages/lib/services/rest/utils/requestPaginationOptions.js +packages/lib/services/rest/utils/requestPaginationOptions.js.map +packages/lib/services/searchengine/filterParser.d.ts +packages/lib/services/searchengine/filterParser.js +packages/lib/services/searchengine/filterParser.js.map +packages/lib/services/searchengine/queryBuilder.d.ts +packages/lib/services/searchengine/queryBuilder.js +packages/lib/services/searchengine/queryBuilder.js.map +packages/lib/services/spellChecker/SpellCheckerService.d.ts +packages/lib/services/spellChecker/SpellCheckerService.js +packages/lib/services/spellChecker/SpellCheckerService.js.map +packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.d.ts +packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.js +packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.js.map +packages/lib/services/synchronizer/LockHandler.d.ts +packages/lib/services/synchronizer/LockHandler.js +packages/lib/services/synchronizer/LockHandler.js.map +packages/lib/services/synchronizer/MigrationHandler.d.ts +packages/lib/services/synchronizer/MigrationHandler.js +packages/lib/services/synchronizer/MigrationHandler.js.map +packages/lib/services/synchronizer/gui/useSyncTargetUpgrade.d.ts +packages/lib/services/synchronizer/gui/useSyncTargetUpgrade.js +packages/lib/services/synchronizer/gui/useSyncTargetUpgrade.js.map +packages/lib/services/synchronizer/migrations/1.d.ts +packages/lib/services/synchronizer/migrations/1.js +packages/lib/services/synchronizer/migrations/1.js.map +packages/lib/services/synchronizer/migrations/2.d.ts +packages/lib/services/synchronizer/migrations/2.js +packages/lib/services/synchronizer/migrations/2.js.map +packages/lib/services/synchronizer/utils/types.d.ts +packages/lib/services/synchronizer/utils/types.js +packages/lib/services/synchronizer/utils/types.js.map +packages/lib/shim.d.ts +packages/lib/shim.js +packages/lib/shim.js.map +packages/lib/theme.d.ts +packages/lib/theme.js +packages/lib/theme.js.map +packages/lib/themes/aritimDark.d.ts +packages/lib/themes/aritimDark.js +packages/lib/themes/aritimDark.js.map +packages/lib/themes/dark.d.ts +packages/lib/themes/dark.js +packages/lib/themes/dark.js.map +packages/lib/themes/dracula.d.ts +packages/lib/themes/dracula.js +packages/lib/themes/dracula.js.map +packages/lib/themes/light.d.ts +packages/lib/themes/light.js +packages/lib/themes/light.js.map +packages/lib/themes/nord.d.ts +packages/lib/themes/nord.js +packages/lib/themes/nord.js.map +packages/lib/themes/oledDark.d.ts +packages/lib/themes/oledDark.js +packages/lib/themes/oledDark.js.map +packages/lib/themes/solarizedDark.d.ts +packages/lib/themes/solarizedDark.js +packages/lib/themes/solarizedDark.js.map +packages/lib/themes/solarizedLight.d.ts +packages/lib/themes/solarizedLight.js +packages/lib/themes/solarizedLight.js.map +packages/lib/themes/type.d.ts +packages/lib/themes/type.js +packages/lib/themes/type.js.map +packages/lib/time.d.ts +packages/lib/time.js +packages/lib/time.js.map +packages/lib/uuid.d.ts +packages/lib/uuid.js +packages/lib/uuid.js.map +packages/lib/versionInfo.d.ts +packages/lib/versionInfo.js +packages/lib/versionInfo.js.map +packages/renderer/InMemoryCache.d.ts +packages/renderer/InMemoryCache.js +packages/renderer/InMemoryCache.js.map +packages/renderer/MarkupToHtml.d.ts +packages/renderer/MarkupToHtml.js +packages/renderer/MarkupToHtml.js.map +packages/renderer/MdToHtml.d.ts +packages/renderer/MdToHtml.js +packages/renderer/MdToHtml.js.map +packages/renderer/MdToHtml/rules/checkbox.d.ts +packages/renderer/MdToHtml/rules/checkbox.js +packages/renderer/MdToHtml/rules/checkbox.js.map +packages/renderer/MdToHtml/rules/code_inline.d.ts +packages/renderer/MdToHtml/rules/code_inline.js +packages/renderer/MdToHtml/rules/code_inline.js.map +packages/renderer/MdToHtml/rules/fence.d.ts +packages/renderer/MdToHtml/rules/fence.js +packages/renderer/MdToHtml/rules/fence.js.map +packages/renderer/MdToHtml/rules/fountain.d.ts +packages/renderer/MdToHtml/rules/fountain.js +packages/renderer/MdToHtml/rules/fountain.js.map +packages/renderer/MdToHtml/rules/highlight_keywords.d.ts +packages/renderer/MdToHtml/rules/highlight_keywords.js +packages/renderer/MdToHtml/rules/highlight_keywords.js.map +packages/renderer/MdToHtml/rules/html_image.d.ts +packages/renderer/MdToHtml/rules/html_image.js +packages/renderer/MdToHtml/rules/html_image.js.map +packages/renderer/MdToHtml/rules/image.d.ts +packages/renderer/MdToHtml/rules/image.js +packages/renderer/MdToHtml/rules/image.js.map +packages/renderer/MdToHtml/rules/katex.d.ts +packages/renderer/MdToHtml/rules/katex.js +packages/renderer/MdToHtml/rules/katex.js.map +packages/renderer/MdToHtml/rules/link_open.d.ts +packages/renderer/MdToHtml/rules/link_open.js +packages/renderer/MdToHtml/rules/link_open.js.map +packages/renderer/MdToHtml/rules/mermaid.d.ts +packages/renderer/MdToHtml/rules/mermaid.js +packages/renderer/MdToHtml/rules/mermaid.js.map +packages/renderer/MdToHtml/rules/sanitize_html.d.ts +packages/renderer/MdToHtml/rules/sanitize_html.js +packages/renderer/MdToHtml/rules/sanitize_html.js.map +packages/renderer/index.d.ts +packages/renderer/index.js +packages/renderer/index.js.map +packages/renderer/noteStyle.d.ts +packages/renderer/noteStyle.js +packages/renderer/noteStyle.js.map +packages/renderer/pathUtils.d.ts +packages/renderer/pathUtils.js +packages/renderer/pathUtils.js.map +# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD \ No newline at end of file diff --git a/.ignore b/.ignore index 48a1ecc655..23e3295cd1 100644 --- a/.ignore +++ b/.ignore @@ -5,298 +5,1198 @@ # https://github.com/microsoft/vscode/issues/94718 # AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD -CliClient/app/LinkSelector.js -CliClient/app/services/plugins/PluginRunner.js -CliClient/tests/fsDriver.js -CliClient/tests/InMemoryCache.js -CliClient/tests/MdToHtml.js -CliClient/tests/models_Setting.js -CliClient/tests/services_CommandService.js -CliClient/tests/services_InteropService.js -CliClient/tests/services_keychainService.js -CliClient/tests/services_PluginService.js -CliClient/tests/services_rest_Api.js -CliClient/tests/services/plugins/api/JoplinSetting.js -CliClient/tests/services/plugins/sandboxProxy.js -CliClient/tests/synchronizer_LockHandler.js -CliClient/tests/synchronizer_MigrationHandler.js -ElectronClient/app.js -ElectronClient/bridge.js -ElectronClient/commands/copyDevCommand.js -ElectronClient/commands/focusElement.js -ElectronClient/commands/openProfileDirectory.js -ElectronClient/commands/startExternalEditing.js -ElectronClient/commands/stopExternalEditing.js -ElectronClient/commands/toggleExternalEditing.js -ElectronClient/ElectronAppWrapper.js -ElectronClient/global.d.js -ElectronClient/gui/Button/Button.js -ElectronClient/gui/ConfigScreen/ButtonBar.js -ElectronClient/gui/ConfigScreen/ConfigScreen.js -ElectronClient/gui/ConfigScreen/SideBar.js -ElectronClient/gui/DropboxLoginScreen.js -ElectronClient/gui/ErrorBoundary.js -ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js -ElectronClient/gui/KeymapConfig/ShortcutRecorder.js -ElectronClient/gui/KeymapConfig/styles/index.js -ElectronClient/gui/KeymapConfig/utils/getLabel.js -ElectronClient/gui/KeymapConfig/utils/useCommandStatus.js -ElectronClient/gui/KeymapConfig/utils/useKeymap.js -ElectronClient/gui/MainScreen/commands/editAlarm.js -ElectronClient/gui/MainScreen/commands/exportPdf.js -ElectronClient/gui/MainScreen/commands/hideModalMessage.js -ElectronClient/gui/MainScreen/commands/moveToFolder.js -ElectronClient/gui/MainScreen/commands/newFolder.js -ElectronClient/gui/MainScreen/commands/newNote.js -ElectronClient/gui/MainScreen/commands/newSubFolder.js -ElectronClient/gui/MainScreen/commands/newTodo.js -ElectronClient/gui/MainScreen/commands/openFolder.js -ElectronClient/gui/MainScreen/commands/openNote.js -ElectronClient/gui/MainScreen/commands/openTag.js -ElectronClient/gui/MainScreen/commands/print.js -ElectronClient/gui/MainScreen/commands/renameFolder.js -ElectronClient/gui/MainScreen/commands/renameTag.js -ElectronClient/gui/MainScreen/commands/search.js -ElectronClient/gui/MainScreen/commands/selectTemplate.js -ElectronClient/gui/MainScreen/commands/setTags.js -ElectronClient/gui/MainScreen/commands/showModalMessage.js -ElectronClient/gui/MainScreen/commands/showNoteContentProperties.js -ElectronClient/gui/MainScreen/commands/showNoteProperties.js -ElectronClient/gui/MainScreen/commands/showShareNoteDialog.js -ElectronClient/gui/MainScreen/commands/toggleEditors.js -ElectronClient/gui/MainScreen/commands/toggleNoteList.js -ElectronClient/gui/MainScreen/commands/toggleSideBar.js -ElectronClient/gui/MainScreen/commands/toggleVisiblePanes.js -ElectronClient/gui/MainScreen/MainScreen.js -ElectronClient/gui/MenuBar.js -ElectronClient/gui/menuCommandNames.js -ElectronClient/gui/MultiNoteActions.js -ElectronClient/gui/NoteContentPropertiesDialog.js -ElectronClient/gui/NoteEditor/commands/editorCommandDeclarations.js -ElectronClient/gui/NoteEditor/commands/focusElementNoteBody.js -ElectronClient/gui/NoteEditor/commands/focusElementNoteTitle.js -ElectronClient/gui/NoteEditor/commands/showLocalSearch.js -ElectronClient/gui/NoteEditor/commands/showRevisions.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Editor.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js -ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js -ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js -ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js -ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js -ElectronClient/gui/NoteEditor/NoteEditor.js -ElectronClient/gui/NoteEditor/styles/index.js -ElectronClient/gui/NoteEditor/utils/contextMenu.js -ElectronClient/gui/NoteEditor/utils/index.js -ElectronClient/gui/NoteEditor/utils/resourceHandling.js -ElectronClient/gui/NoteEditor/utils/types.js -ElectronClient/gui/NoteEditor/utils/useDropHandler.js -ElectronClient/gui/NoteEditor/utils/useFolder.js -ElectronClient/gui/NoteEditor/utils/useFormNote.js -ElectronClient/gui/NoteEditor/utils/useMarkupToHtml.js -ElectronClient/gui/NoteEditor/utils/useMessageHandler.js -ElectronClient/gui/NoteEditor/utils/useNoteSearchBar.js -ElectronClient/gui/NoteEditor/utils/usePluginServiceRegistration.js -ElectronClient/gui/NoteEditor/utils/useSearchMarkers.js -ElectronClient/gui/NoteEditor/utils/useWindowCommandHandler.js -ElectronClient/gui/NoteList/commands/focusElementNoteList.js -ElectronClient/gui/NoteList/NoteList.js -ElectronClient/gui/NoteListControls/commands/focusSearch.js -ElectronClient/gui/NoteListControls/NoteListControls.js -ElectronClient/gui/NoteListItem.js -ElectronClient/gui/NoteTextViewer.js -ElectronClient/gui/NoteToolbar/NoteToolbar.js -ElectronClient/gui/OneDriveLoginScreen.js -ElectronClient/gui/ResizableLayout/hooks/useLayoutItemSizes.js -ElectronClient/gui/ResizableLayout/hooks/useWindowResizeEvent.js -ElectronClient/gui/ResizableLayout/ResizableLayout.js -ElectronClient/gui/ResourceScreen.js -ElectronClient/gui/Root_UpgradeSyncTarget.js -ElectronClient/gui/Root.js -ElectronClient/gui/SearchBar/hooks/useSearch.js -ElectronClient/gui/SearchBar/SearchBar.js -ElectronClient/gui/SearchBar/styles/index.js -ElectronClient/gui/ShareNoteDialog.js -ElectronClient/gui/SideBar/commands/focusElementSideBar.js -ElectronClient/gui/SideBar/SideBar.js -ElectronClient/gui/SideBar/styles/index.js -ElectronClient/gui/StatusScreen/StatusScreen.js -ElectronClient/gui/style/StyledInput.js -ElectronClient/gui/style/StyledTextInput.js -ElectronClient/gui/TagList.js -ElectronClient/gui/ToggleEditorsButton/styles/index.js -ElectronClient/gui/ToggleEditorsButton/ToggleEditorsButton.js -ElectronClient/gui/ToolbarBase.js -ElectronClient/gui/ToolbarButton/styles/index.js -ElectronClient/gui/ToolbarButton/ToolbarButton.js -ElectronClient/gui/utils/NoteListUtils.js -ElectronClient/InteropServiceHelper.js -ElectronClient/plugins/GotoAnything.js -ElectronClient/services/bridge.js -ElectronClient/services/commands/types.js -ElectronClient/services/plugins/hooks/useThemeCss.js -ElectronClient/services/plugins/hooks/useViewIsReady.js -ElectronClient/services/plugins/PlatformImplementation.js -ElectronClient/services/plugins/PluginRunner.js -ElectronClient/services/plugins/UserWebview.js -ElectronClient/services/plugins/UserWebviewDialog.js -ElectronClient/services/plugins/UserWebviewDialogButtonBar.js -ReactNativeClient/lib/AsyncActionQueue.js -ReactNativeClient/lib/BaseApplication.js -ReactNativeClient/lib/checkPermissions.js -ReactNativeClient/lib/commands/historyBackward.js -ReactNativeClient/lib/commands/historyForward.js -ReactNativeClient/lib/commands/synchronize.js -ReactNativeClient/lib/components/BackButtonDialogBox.js -ReactNativeClient/lib/components/CameraView.js -ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnMessage.js -ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnResourceLongPress.js -ReactNativeClient/lib/components/NoteBodyViewer/hooks/useSource.js -ReactNativeClient/lib/components/NoteBodyViewer/NoteBodyViewer.js -ReactNativeClient/lib/components/screens/Note.js -ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.js -ReactNativeClient/lib/components/SelectDateTimeDialog.js -ReactNativeClient/lib/errorUtils.js -ReactNativeClient/lib/eventManager.js -ReactNativeClient/lib/fs-driver-node.js -ReactNativeClient/lib/hooks/useEffectDebugger.js -ReactNativeClient/lib/hooks/useImperativeHandlerDebugger.js -ReactNativeClient/lib/hooks/usePrevious.js -ReactNativeClient/lib/hooks/usePropsDebugger.js -ReactNativeClient/lib/InMemoryCache.js -ReactNativeClient/lib/joplin-renderer/MarkupToHtml.js -ReactNativeClient/lib/joplin-renderer/MdToHtml.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/code_inline.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fence.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fountain.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/highlight_keywords.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/html_image.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/image.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/katex.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/link_open.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js -ReactNativeClient/lib/joplin-renderer/noteStyle.js -ReactNativeClient/lib/joplin-renderer/pathUtils.js -ReactNativeClient/lib/JoplinServerApi.js -ReactNativeClient/lib/locale.js -ReactNativeClient/lib/Logger.js -ReactNativeClient/lib/markdownUtils.js -ReactNativeClient/lib/markupLanguageUtils.js -ReactNativeClient/lib/models/Alarm.js -ReactNativeClient/lib/models/Setting.js -ReactNativeClient/lib/ntpDate.js -ReactNativeClient/lib/path-utils.js -ReactNativeClient/lib/PoorManIntervals.js -ReactNativeClient/lib/reducer.js -ReactNativeClient/lib/services/AlarmService.js -ReactNativeClient/lib/services/AlarmServiceDriver.android.js -ReactNativeClient/lib/services/AlarmServiceDriver.ios.js -ReactNativeClient/lib/services/AlarmServiceDriverNode.js -ReactNativeClient/lib/services/BaseService.js -ReactNativeClient/lib/services/commands/commandsToMarkdownTable.js -ReactNativeClient/lib/services/commands/MenuUtils.js -ReactNativeClient/lib/services/commands/propsHaveChanged.js -ReactNativeClient/lib/services/commands/stateToWhenClauseContext.js -ReactNativeClient/lib/services/commands/ToolbarButtonUtils.js -ReactNativeClient/lib/services/CommandService.js -ReactNativeClient/lib/services/contextkey/contextkey.js -ReactNativeClient/lib/services/debug/populateDatabase.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Base.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Custom.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Html.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Jex.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Md.js -ReactNativeClient/lib/services/interop/InteropService_Exporter_Raw.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Base.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Custom.js -ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToHtml.js -ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToMd.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Jex.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Md.js -ReactNativeClient/lib/services/interop/InteropService_Importer_Raw.js -ReactNativeClient/lib/services/interop/InteropService.js -ReactNativeClient/lib/services/interop/types.js -ReactNativeClient/lib/services/keychain/KeychainService.js -ReactNativeClient/lib/services/keychain/KeychainServiceDriver.dummy.js -ReactNativeClient/lib/services/keychain/KeychainServiceDriver.mobile.js -ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.js -ReactNativeClient/lib/services/keychain/KeychainServiceDriverBase.js -ReactNativeClient/lib/services/KeymapService.js -ReactNativeClient/lib/services/plugins/api/Global.js -ReactNativeClient/lib/services/plugins/api/Joplin.js -ReactNativeClient/lib/services/plugins/api/JoplinCommands.js -ReactNativeClient/lib/services/plugins/api/JoplinData.js -ReactNativeClient/lib/services/plugins/api/JoplinFilters.js -ReactNativeClient/lib/services/plugins/api/JoplinInterop.js -ReactNativeClient/lib/services/plugins/api/JoplinPlugins.js -ReactNativeClient/lib/services/plugins/api/JoplinSettings.js -ReactNativeClient/lib/services/plugins/api/JoplinViews.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsMenus.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.js -ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.js -ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.js -ReactNativeClient/lib/services/plugins/api/types.js -ReactNativeClient/lib/services/plugins/BasePluginRunner.js -ReactNativeClient/lib/services/plugins/MenuController.js -ReactNativeClient/lib/services/plugins/MenuItemController.js -ReactNativeClient/lib/services/plugins/Plugin.js -ReactNativeClient/lib/services/plugins/PluginService.js -ReactNativeClient/lib/services/plugins/reducer.js -ReactNativeClient/lib/services/plugins/sandboxProxy.js -ReactNativeClient/lib/services/plugins/ToolbarButtonController.js -ReactNativeClient/lib/services/plugins/utils/contentScriptsToRendererRules.js -ReactNativeClient/lib/services/plugins/utils/createViewHandle.js -ReactNativeClient/lib/services/plugins/utils/executeSandboxCall.js -ReactNativeClient/lib/services/plugins/utils/manifestFromObject.js -ReactNativeClient/lib/services/plugins/utils/mapEventHandlersToIds.js -ReactNativeClient/lib/services/plugins/utils/types.js -ReactNativeClient/lib/services/plugins/ViewController.js -ReactNativeClient/lib/services/plugins/WebviewController.js -ReactNativeClient/lib/services/ResourceEditWatcher/index.js -ReactNativeClient/lib/services/ResourceEditWatcher/reducer.js -ReactNativeClient/lib/services/rest/actionApi.desktop.js -ReactNativeClient/lib/services/rest/Api.js -ReactNativeClient/lib/services/rest/errors.js -ReactNativeClient/lib/services/searchengine/filterParser.js -ReactNativeClient/lib/services/searchengine/queryBuilder.js -ReactNativeClient/lib/services/SettingUtils.js -ReactNativeClient/lib/services/synchronizer/gui/useSyncTargetUpgrade.js -ReactNativeClient/lib/services/synchronizer/LockHandler.js -ReactNativeClient/lib/services/synchronizer/MigrationHandler.js -ReactNativeClient/lib/services/synchronizer/migrations/1.js -ReactNativeClient/lib/services/synchronizer/migrations/2.js -ReactNativeClient/lib/services/synchronizer/utils/types.js -ReactNativeClient/lib/services/UndoRedoService.js -ReactNativeClient/lib/services/WhenClause.js -ReactNativeClient/lib/ShareExtension.js -ReactNativeClient/lib/shareHandler.js -ReactNativeClient/lib/shim.js -ReactNativeClient/lib/Synchronizer.js -ReactNativeClient/lib/theme.js -ReactNativeClient/lib/themes/aritimDark.js -ReactNativeClient/lib/themes/dark.js -ReactNativeClient/lib/themes/dracula.js -ReactNativeClient/lib/themes/light.js -ReactNativeClient/lib/themes/nord.js -ReactNativeClient/lib/themes/oledDark.js -ReactNativeClient/lib/themes/solarizedDark.js -ReactNativeClient/lib/themes/solarizedLight.js -ReactNativeClient/lib/themes/type.js -ReactNativeClient/lib/uuid.js -ReactNativeClient/lib/versionInfo.js -ReactNativeClient/PluginAssetsLoader.js -ReactNativeClient/setUpQuickActions.js -# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD +Assets/TinyMCE/JoplinLists/src/main/ts/Main.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/Main.js +Assets/TinyMCE/JoplinLists/src/main/ts/Main.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/Plugin.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/Plugin.js +Assets/TinyMCE/JoplinLists/src/main/ts/Plugin.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/actions/Indendation.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/actions/Indendation.js +Assets/TinyMCE/JoplinLists/src/main/ts/actions/Indendation.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/actions/ToggleList.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/actions/ToggleList.js +Assets/TinyMCE/JoplinLists/src/main/ts/actions/ToggleList.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/api/Api.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/api/Api.js +Assets/TinyMCE/JoplinLists/src/main/ts/api/Api.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/api/Commands.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/api/Commands.js +Assets/TinyMCE/JoplinLists/src/main/ts/api/Commands.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/api/Events.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/api/Events.js +Assets/TinyMCE/JoplinLists/src/main/ts/api/Events.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/api/Settings.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/api/Settings.js +Assets/TinyMCE/JoplinLists/src/main/ts/api/Settings.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Bookmark.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Bookmark.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Bookmark.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Delete.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Delete.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Delete.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/DlIndentation.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/DlIndentation.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/DlIndentation.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Keyboard.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Keyboard.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Keyboard.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/ListAction.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/ListAction.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/ListAction.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/NodeType.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/NodeType.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/NodeType.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/NormalizeLists.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/NormalizeLists.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/NormalizeLists.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Range.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Range.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Range.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Selection.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Selection.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Selection.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/SplitList.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/SplitList.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/SplitList.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/TextBlock.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/TextBlock.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/TextBlock.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/core/Util.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/core/Util.js +Assets/TinyMCE/JoplinLists/src/main/ts/core/Util.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ComposeList.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ComposeList.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ComposeList.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Entry.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Entry.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Entry.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Indentation.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Indentation.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Indentation.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/JoplinListUtil.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/JoplinListUtil.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/JoplinListUtil.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ListsIndendation.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ListsIndendation.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ListsIndendation.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/NormalizeEntries.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/NormalizeEntries.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/NormalizeEntries.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ParseLists.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ParseLists.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ParseLists.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Util.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Util.js +Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Util.js.map +Assets/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.d.ts +Assets/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.js +Assets/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.js.map +packages/app-cli/app/LinkSelector.d.ts +packages/app-cli/app/LinkSelector.js +packages/app-cli/app/LinkSelector.js.map +packages/app-cli/app/services/plugins/PluginRunner.d.ts +packages/app-cli/app/services/plugins/PluginRunner.js +packages/app-cli/app/services/plugins/PluginRunner.js.map +packages/app-cli/build/LinkSelector.d.ts +packages/app-cli/build/LinkSelector.js +packages/app-cli/build/LinkSelector.js.map +packages/app-cli/build/services/plugins/PluginRunner.d.ts +packages/app-cli/build/services/plugins/PluginRunner.js +packages/app-cli/build/services/plugins/PluginRunner.js.map +packages/app-cli/tests/InMemoryCache.d.ts +packages/app-cli/tests/InMemoryCache.js +packages/app-cli/tests/InMemoryCache.js.map +packages/app-cli/tests/MdToHtml.d.ts +packages/app-cli/tests/MdToHtml.js +packages/app-cli/tests/MdToHtml.js.map +packages/app-cli/tests/fsDriver.d.ts +packages/app-cli/tests/fsDriver.js +packages/app-cli/tests/fsDriver.js.map +packages/app-cli/tests/models_Setting.d.ts +packages/app-cli/tests/models_Setting.js +packages/app-cli/tests/models_Setting.js.map +packages/app-cli/tests/services/plugins/api/JoplinSetting.d.ts +packages/app-cli/tests/services/plugins/api/JoplinSetting.js +packages/app-cli/tests/services/plugins/api/JoplinSetting.js.map +packages/app-cli/tests/services/plugins/sandboxProxy.d.ts +packages/app-cli/tests/services/plugins/sandboxProxy.js +packages/app-cli/tests/services/plugins/sandboxProxy.js.map +packages/app-cli/tests/services_CommandService.d.ts +packages/app-cli/tests/services_CommandService.js +packages/app-cli/tests/services_CommandService.js.map +packages/app-cli/tests/services_InteropService.d.ts +packages/app-cli/tests/services_InteropService.js +packages/app-cli/tests/services_InteropService.js.map +packages/app-cli/tests/services_PluginService.d.ts +packages/app-cli/tests/services_PluginService.js +packages/app-cli/tests/services_PluginService.js.map +packages/app-cli/tests/services_keychainService.d.ts +packages/app-cli/tests/services_keychainService.js +packages/app-cli/tests/services_keychainService.js.map +packages/app-cli/tests/services_rest_Api.d.ts +packages/app-cli/tests/services_rest_Api.js +packages/app-cli/tests/services_rest_Api.js.map +packages/app-cli/tests/support/plugins/content_script/api/index.d.ts +packages/app-cli/tests/support/plugins/content_script/api/index.js +packages/app-cli/tests/support/plugins/content_script/api/index.js.map +packages/app-cli/tests/support/plugins/content_script/api/types.d.ts +packages/app-cli/tests/support/plugins/content_script/api/types.js +packages/app-cli/tests/support/plugins/content_script/api/types.js.map +packages/app-cli/tests/support/plugins/content_script/src/index.d.ts +packages/app-cli/tests/support/plugins/content_script/src/index.js +packages/app-cli/tests/support/plugins/content_script/src/index.js.map +packages/app-cli/tests/support/plugins/dialog/api/index.d.ts +packages/app-cli/tests/support/plugins/dialog/api/index.js +packages/app-cli/tests/support/plugins/dialog/api/index.js.map +packages/app-cli/tests/support/plugins/dialog/api/types.d.ts +packages/app-cli/tests/support/plugins/dialog/api/types.js +packages/app-cli/tests/support/plugins/dialog/api/types.js.map +packages/app-cli/tests/support/plugins/dialog/src/index.d.ts +packages/app-cli/tests/support/plugins/dialog/src/index.js +packages/app-cli/tests/support/plugins/dialog/src/index.js.map +packages/app-cli/tests/support/plugins/events/api/index.d.ts +packages/app-cli/tests/support/plugins/events/api/index.js +packages/app-cli/tests/support/plugins/events/api/index.js.map +packages/app-cli/tests/support/plugins/events/api/types.d.ts +packages/app-cli/tests/support/plugins/events/api/types.js +packages/app-cli/tests/support/plugins/events/api/types.js.map +packages/app-cli/tests/support/plugins/events/src/index.d.ts +packages/app-cli/tests/support/plugins/events/src/index.js +packages/app-cli/tests/support/plugins/events/src/index.js.map +packages/app-cli/tests/support/plugins/json_export/api/index.d.ts +packages/app-cli/tests/support/plugins/json_export/api/index.js +packages/app-cli/tests/support/plugins/json_export/api/index.js.map +packages/app-cli/tests/support/plugins/json_export/api/types.d.ts +packages/app-cli/tests/support/plugins/json_export/api/types.js +packages/app-cli/tests/support/plugins/json_export/api/types.js.map +packages/app-cli/tests/support/plugins/json_export/src/index.d.ts +packages/app-cli/tests/support/plugins/json_export/src/index.js +packages/app-cli/tests/support/plugins/json_export/src/index.js.map +packages/app-cli/tests/support/plugins/menu/api/index.d.ts +packages/app-cli/tests/support/plugins/menu/api/index.js +packages/app-cli/tests/support/plugins/menu/api/index.js.map +packages/app-cli/tests/support/plugins/menu/api/types.d.ts +packages/app-cli/tests/support/plugins/menu/api/types.js +packages/app-cli/tests/support/plugins/menu/api/types.js.map +packages/app-cli/tests/support/plugins/menu/src/index.d.ts +packages/app-cli/tests/support/plugins/menu/src/index.js +packages/app-cli/tests/support/plugins/menu/src/index.js.map +packages/app-cli/tests/support/plugins/multi_selection/api/index.d.ts +packages/app-cli/tests/support/plugins/multi_selection/api/index.js +packages/app-cli/tests/support/plugins/multi_selection/api/index.js.map +packages/app-cli/tests/support/plugins/multi_selection/api/types.d.ts +packages/app-cli/tests/support/plugins/multi_selection/api/types.js +packages/app-cli/tests/support/plugins/multi_selection/api/types.js.map +packages/app-cli/tests/support/plugins/multi_selection/src/index.d.ts +packages/app-cli/tests/support/plugins/multi_selection/src/index.js +packages/app-cli/tests/support/plugins/multi_selection/src/index.js.map +packages/app-cli/tests/support/plugins/register_command/api/index.d.ts +packages/app-cli/tests/support/plugins/register_command/api/index.js +packages/app-cli/tests/support/plugins/register_command/api/index.js.map +packages/app-cli/tests/support/plugins/register_command/api/types.d.ts +packages/app-cli/tests/support/plugins/register_command/api/types.js +packages/app-cli/tests/support/plugins/register_command/api/types.js.map +packages/app-cli/tests/support/plugins/register_command/src/index.d.ts +packages/app-cli/tests/support/plugins/register_command/src/index.js +packages/app-cli/tests/support/plugins/register_command/src/index.js.map +packages/app-cli/tests/support/plugins/selected_text/api/index.d.ts +packages/app-cli/tests/support/plugins/selected_text/api/index.js +packages/app-cli/tests/support/plugins/selected_text/api/index.js.map +packages/app-cli/tests/support/plugins/selected_text/api/types.d.ts +packages/app-cli/tests/support/plugins/selected_text/api/types.js +packages/app-cli/tests/support/plugins/selected_text/api/types.js.map +packages/app-cli/tests/support/plugins/selected_text/src/index.d.ts +packages/app-cli/tests/support/plugins/selected_text/src/index.js +packages/app-cli/tests/support/plugins/selected_text/src/index.js.map +packages/app-cli/tests/support/plugins/settings/api/index.d.ts +packages/app-cli/tests/support/plugins/settings/api/index.js +packages/app-cli/tests/support/plugins/settings/api/index.js.map +packages/app-cli/tests/support/plugins/settings/api/types.d.ts +packages/app-cli/tests/support/plugins/settings/api/types.js +packages/app-cli/tests/support/plugins/settings/api/types.js.map +packages/app-cli/tests/support/plugins/settings/src/index.d.ts +packages/app-cli/tests/support/plugins/settings/src/index.js +packages/app-cli/tests/support/plugins/settings/src/index.js.map +packages/app-cli/tests/support/plugins/toc/api/index.d.ts +packages/app-cli/tests/support/plugins/toc/api/index.js +packages/app-cli/tests/support/plugins/toc/api/index.js.map +packages/app-cli/tests/support/plugins/toc/api/types.d.ts +packages/app-cli/tests/support/plugins/toc/api/types.js +packages/app-cli/tests/support/plugins/toc/api/types.js.map +packages/app-cli/tests/support/plugins/toc/src/index.d.ts +packages/app-cli/tests/support/plugins/toc/src/index.js +packages/app-cli/tests/support/plugins/toc/src/index.js.map +packages/app-cli/tests/support/plugins/withExternalModules/api/index.d.ts +packages/app-cli/tests/support/plugins/withExternalModules/api/index.js +packages/app-cli/tests/support/plugins/withExternalModules/api/index.js.map +packages/app-cli/tests/support/plugins/withExternalModules/api/types.d.ts +packages/app-cli/tests/support/plugins/withExternalModules/api/types.js +packages/app-cli/tests/support/plugins/withExternalModules/api/types.js.map +packages/app-cli/tests/support/plugins/withExternalModules/src/index.d.ts +packages/app-cli/tests/support/plugins/withExternalModules/src/index.js +packages/app-cli/tests/support/plugins/withExternalModules/src/index.js.map +packages/app-cli/tests/synchronizer_LockHandler.d.ts +packages/app-cli/tests/synchronizer_LockHandler.js +packages/app-cli/tests/synchronizer_LockHandler.js.map +packages/app-cli/tests/synchronizer_MigrationHandler.d.ts +packages/app-cli/tests/synchronizer_MigrationHandler.js +packages/app-cli/tests/synchronizer_MigrationHandler.js.map +packages/app-desktop/ElectronAppWrapper.d.ts +packages/app-desktop/ElectronAppWrapper.js +packages/app-desktop/ElectronAppWrapper.js.map +packages/app-desktop/InteropServiceHelper.d.ts +packages/app-desktop/InteropServiceHelper.js +packages/app-desktop/InteropServiceHelper.js.map +packages/app-desktop/app.d.ts +packages/app-desktop/app.js +packages/app-desktop/app.js.map +packages/app-desktop/bridge.d.ts +packages/app-desktop/bridge.js +packages/app-desktop/bridge.js.map +packages/app-desktop/commands/copyDevCommand.d.ts +packages/app-desktop/commands/copyDevCommand.js +packages/app-desktop/commands/copyDevCommand.js.map +packages/app-desktop/commands/focusElement.d.ts +packages/app-desktop/commands/focusElement.js +packages/app-desktop/commands/focusElement.js.map +packages/app-desktop/commands/openProfileDirectory.d.ts +packages/app-desktop/commands/openProfileDirectory.js +packages/app-desktop/commands/openProfileDirectory.js.map +packages/app-desktop/commands/startExternalEditing.d.ts +packages/app-desktop/commands/startExternalEditing.js +packages/app-desktop/commands/startExternalEditing.js.map +packages/app-desktop/commands/stopExternalEditing.d.ts +packages/app-desktop/commands/stopExternalEditing.js +packages/app-desktop/commands/stopExternalEditing.js.map +packages/app-desktop/commands/toggleExternalEditing.d.ts +packages/app-desktop/commands/toggleExternalEditing.js +packages/app-desktop/commands/toggleExternalEditing.js.map +packages/app-desktop/gui/Button/Button.d.ts +packages/app-desktop/gui/Button/Button.js +packages/app-desktop/gui/Button/Button.js.map +packages/app-desktop/gui/ConfigScreen/ButtonBar.d.ts +packages/app-desktop/gui/ConfigScreen/ButtonBar.js +packages/app-desktop/gui/ConfigScreen/ButtonBar.js.map +packages/app-desktop/gui/ConfigScreen/ConfigScreen.d.ts +packages/app-desktop/gui/ConfigScreen/ConfigScreen.js +packages/app-desktop/gui/ConfigScreen/ConfigScreen.js.map +packages/app-desktop/gui/ConfigScreen/SideBar.d.ts +packages/app-desktop/gui/ConfigScreen/SideBar.js +packages/app-desktop/gui/ConfigScreen/SideBar.js.map +packages/app-desktop/gui/DropboxLoginScreen.d.ts +packages/app-desktop/gui/DropboxLoginScreen.js +packages/app-desktop/gui/DropboxLoginScreen.js.map +packages/app-desktop/gui/ErrorBoundary.d.ts +packages/app-desktop/gui/ErrorBoundary.js +packages/app-desktop/gui/ErrorBoundary.js.map +packages/app-desktop/gui/KeymapConfig/KeymapConfigScreen.d.ts +packages/app-desktop/gui/KeymapConfig/KeymapConfigScreen.js +packages/app-desktop/gui/KeymapConfig/KeymapConfigScreen.js.map +packages/app-desktop/gui/KeymapConfig/ShortcutRecorder.d.ts +packages/app-desktop/gui/KeymapConfig/ShortcutRecorder.js +packages/app-desktop/gui/KeymapConfig/ShortcutRecorder.js.map +packages/app-desktop/gui/KeymapConfig/styles/index.d.ts +packages/app-desktop/gui/KeymapConfig/styles/index.js +packages/app-desktop/gui/KeymapConfig/styles/index.js.map +packages/app-desktop/gui/KeymapConfig/utils/getLabel.d.ts +packages/app-desktop/gui/KeymapConfig/utils/getLabel.js +packages/app-desktop/gui/KeymapConfig/utils/getLabel.js.map +packages/app-desktop/gui/KeymapConfig/utils/useCommandStatus.d.ts +packages/app-desktop/gui/KeymapConfig/utils/useCommandStatus.js +packages/app-desktop/gui/KeymapConfig/utils/useCommandStatus.js.map +packages/app-desktop/gui/KeymapConfig/utils/useKeymap.d.ts +packages/app-desktop/gui/KeymapConfig/utils/useKeymap.js +packages/app-desktop/gui/KeymapConfig/utils/useKeymap.js.map +packages/app-desktop/gui/MainScreen/MainScreen.d.ts +packages/app-desktop/gui/MainScreen/MainScreen.js +packages/app-desktop/gui/MainScreen/MainScreen.js.map +packages/app-desktop/gui/MainScreen/commands/editAlarm.d.ts +packages/app-desktop/gui/MainScreen/commands/editAlarm.js +packages/app-desktop/gui/MainScreen/commands/editAlarm.js.map +packages/app-desktop/gui/MainScreen/commands/exportPdf.d.ts +packages/app-desktop/gui/MainScreen/commands/exportPdf.js +packages/app-desktop/gui/MainScreen/commands/exportPdf.js.map +packages/app-desktop/gui/MainScreen/commands/hideModalMessage.d.ts +packages/app-desktop/gui/MainScreen/commands/hideModalMessage.js +packages/app-desktop/gui/MainScreen/commands/hideModalMessage.js.map +packages/app-desktop/gui/MainScreen/commands/moveToFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/moveToFolder.js +packages/app-desktop/gui/MainScreen/commands/moveToFolder.js.map +packages/app-desktop/gui/MainScreen/commands/newFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/newFolder.js +packages/app-desktop/gui/MainScreen/commands/newFolder.js.map +packages/app-desktop/gui/MainScreen/commands/newNote.d.ts +packages/app-desktop/gui/MainScreen/commands/newNote.js +packages/app-desktop/gui/MainScreen/commands/newNote.js.map +packages/app-desktop/gui/MainScreen/commands/newSubFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/newSubFolder.js +packages/app-desktop/gui/MainScreen/commands/newSubFolder.js.map +packages/app-desktop/gui/MainScreen/commands/newTodo.d.ts +packages/app-desktop/gui/MainScreen/commands/newTodo.js +packages/app-desktop/gui/MainScreen/commands/newTodo.js.map +packages/app-desktop/gui/MainScreen/commands/openFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/openFolder.js +packages/app-desktop/gui/MainScreen/commands/openFolder.js.map +packages/app-desktop/gui/MainScreen/commands/openNote.d.ts +packages/app-desktop/gui/MainScreen/commands/openNote.js +packages/app-desktop/gui/MainScreen/commands/openNote.js.map +packages/app-desktop/gui/MainScreen/commands/openTag.d.ts +packages/app-desktop/gui/MainScreen/commands/openTag.js +packages/app-desktop/gui/MainScreen/commands/openTag.js.map +packages/app-desktop/gui/MainScreen/commands/print.d.ts +packages/app-desktop/gui/MainScreen/commands/print.js +packages/app-desktop/gui/MainScreen/commands/print.js.map +packages/app-desktop/gui/MainScreen/commands/renameFolder.d.ts +packages/app-desktop/gui/MainScreen/commands/renameFolder.js +packages/app-desktop/gui/MainScreen/commands/renameFolder.js.map +packages/app-desktop/gui/MainScreen/commands/renameTag.d.ts +packages/app-desktop/gui/MainScreen/commands/renameTag.js +packages/app-desktop/gui/MainScreen/commands/renameTag.js.map +packages/app-desktop/gui/MainScreen/commands/search.d.ts +packages/app-desktop/gui/MainScreen/commands/search.js +packages/app-desktop/gui/MainScreen/commands/search.js.map +packages/app-desktop/gui/MainScreen/commands/selectTemplate.d.ts +packages/app-desktop/gui/MainScreen/commands/selectTemplate.js +packages/app-desktop/gui/MainScreen/commands/selectTemplate.js.map +packages/app-desktop/gui/MainScreen/commands/setTags.d.ts +packages/app-desktop/gui/MainScreen/commands/setTags.js +packages/app-desktop/gui/MainScreen/commands/setTags.js.map +packages/app-desktop/gui/MainScreen/commands/showModalMessage.d.ts +packages/app-desktop/gui/MainScreen/commands/showModalMessage.js +packages/app-desktop/gui/MainScreen/commands/showModalMessage.js.map +packages/app-desktop/gui/MainScreen/commands/showNoteContentProperties.d.ts +packages/app-desktop/gui/MainScreen/commands/showNoteContentProperties.js +packages/app-desktop/gui/MainScreen/commands/showNoteContentProperties.js.map +packages/app-desktop/gui/MainScreen/commands/showNoteProperties.d.ts +packages/app-desktop/gui/MainScreen/commands/showNoteProperties.js +packages/app-desktop/gui/MainScreen/commands/showNoteProperties.js.map +packages/app-desktop/gui/MainScreen/commands/showShareNoteDialog.d.ts +packages/app-desktop/gui/MainScreen/commands/showShareNoteDialog.js +packages/app-desktop/gui/MainScreen/commands/showShareNoteDialog.js.map +packages/app-desktop/gui/MainScreen/commands/toggleEditors.d.ts +packages/app-desktop/gui/MainScreen/commands/toggleEditors.js +packages/app-desktop/gui/MainScreen/commands/toggleEditors.js.map +packages/app-desktop/gui/MainScreen/commands/toggleNoteList.d.ts +packages/app-desktop/gui/MainScreen/commands/toggleNoteList.js +packages/app-desktop/gui/MainScreen/commands/toggleNoteList.js.map +packages/app-desktop/gui/MainScreen/commands/toggleSideBar.d.ts +packages/app-desktop/gui/MainScreen/commands/toggleSideBar.js +packages/app-desktop/gui/MainScreen/commands/toggleSideBar.js.map +packages/app-desktop/gui/MainScreen/commands/toggleVisiblePanes.d.ts +packages/app-desktop/gui/MainScreen/commands/toggleVisiblePanes.js +packages/app-desktop/gui/MainScreen/commands/toggleVisiblePanes.js.map +packages/app-desktop/gui/MenuBar.d.ts +packages/app-desktop/gui/MenuBar.js +packages/app-desktop/gui/MenuBar.js.map +packages/app-desktop/gui/MultiNoteActions.d.ts +packages/app-desktop/gui/MultiNoteActions.js +packages/app-desktop/gui/MultiNoteActions.js.map +packages/app-desktop/gui/NoteContentPropertiesDialog.d.ts +packages/app-desktop/gui/NoteContentPropertiesDialog.js +packages/app-desktop/gui/NoteContentPropertiesDialog.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Editor.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Editor.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Editor.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/styles/index.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/index.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/types.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/styles/index.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/setupContextMenu.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/setupContextMenu.js +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/setupContextMenu.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js +packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js.map +packages/app-desktop/gui/NoteEditor/NoteEditor.d.ts +packages/app-desktop/gui/NoteEditor/NoteEditor.js +packages/app-desktop/gui/NoteEditor/NoteEditor.js.map +packages/app-desktop/gui/NoteEditor/NoteTitle/NoteTitleBar.d.ts +packages/app-desktop/gui/NoteEditor/NoteTitle/NoteTitleBar.js +packages/app-desktop/gui/NoteEditor/NoteTitle/NoteTitleBar.js.map +packages/app-desktop/gui/NoteEditor/commands/editorCommandDeclarations.d.ts +packages/app-desktop/gui/NoteEditor/commands/editorCommandDeclarations.js +packages/app-desktop/gui/NoteEditor/commands/editorCommandDeclarations.js.map +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteBody.d.ts +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteBody.js +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteBody.js.map +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteTitle.d.ts +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteTitle.js +packages/app-desktop/gui/NoteEditor/commands/focusElementNoteTitle.js.map +packages/app-desktop/gui/NoteEditor/commands/showLocalSearch.d.ts +packages/app-desktop/gui/NoteEditor/commands/showLocalSearch.js +packages/app-desktop/gui/NoteEditor/commands/showLocalSearch.js.map +packages/app-desktop/gui/NoteEditor/commands/showRevisions.d.ts +packages/app-desktop/gui/NoteEditor/commands/showRevisions.js +packages/app-desktop/gui/NoteEditor/commands/showRevisions.js.map +packages/app-desktop/gui/NoteEditor/styles/index.d.ts +packages/app-desktop/gui/NoteEditor/styles/index.js +packages/app-desktop/gui/NoteEditor/styles/index.js.map +packages/app-desktop/gui/NoteEditor/utils/contextMenu.d.ts +packages/app-desktop/gui/NoteEditor/utils/contextMenu.js +packages/app-desktop/gui/NoteEditor/utils/contextMenu.js.map +packages/app-desktop/gui/NoteEditor/utils/index.d.ts +packages/app-desktop/gui/NoteEditor/utils/index.js +packages/app-desktop/gui/NoteEditor/utils/index.js.map +packages/app-desktop/gui/NoteEditor/utils/resourceHandling.d.ts +packages/app-desktop/gui/NoteEditor/utils/resourceHandling.js +packages/app-desktop/gui/NoteEditor/utils/resourceHandling.js.map +packages/app-desktop/gui/NoteEditor/utils/types.d.ts +packages/app-desktop/gui/NoteEditor/utils/types.js +packages/app-desktop/gui/NoteEditor/utils/types.js.map +packages/app-desktop/gui/NoteEditor/utils/useDropHandler.d.ts +packages/app-desktop/gui/NoteEditor/utils/useDropHandler.js +packages/app-desktop/gui/NoteEditor/utils/useDropHandler.js.map +packages/app-desktop/gui/NoteEditor/utils/useFolder.d.ts +packages/app-desktop/gui/NoteEditor/utils/useFolder.js +packages/app-desktop/gui/NoteEditor/utils/useFolder.js.map +packages/app-desktop/gui/NoteEditor/utils/useFormNote.d.ts +packages/app-desktop/gui/NoteEditor/utils/useFormNote.js +packages/app-desktop/gui/NoteEditor/utils/useFormNote.js.map +packages/app-desktop/gui/NoteEditor/utils/useMarkupToHtml.d.ts +packages/app-desktop/gui/NoteEditor/utils/useMarkupToHtml.js +packages/app-desktop/gui/NoteEditor/utils/useMarkupToHtml.js.map +packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.d.ts +packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.js +packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.js.map +packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.d.ts +packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.js +packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.js.map +packages/app-desktop/gui/NoteEditor/utils/usePluginServiceRegistration.d.ts +packages/app-desktop/gui/NoteEditor/utils/usePluginServiceRegistration.js +packages/app-desktop/gui/NoteEditor/utils/usePluginServiceRegistration.js.map +packages/app-desktop/gui/NoteEditor/utils/useSearchMarkers.d.ts +packages/app-desktop/gui/NoteEditor/utils/useSearchMarkers.js +packages/app-desktop/gui/NoteEditor/utils/useSearchMarkers.js.map +packages/app-desktop/gui/NoteEditor/utils/useWindowCommandHandler.d.ts +packages/app-desktop/gui/NoteEditor/utils/useWindowCommandHandler.js +packages/app-desktop/gui/NoteEditor/utils/useWindowCommandHandler.js.map +packages/app-desktop/gui/NoteList/NoteList.d.ts +packages/app-desktop/gui/NoteList/NoteList.js +packages/app-desktop/gui/NoteList/NoteList.js.map +packages/app-desktop/gui/NoteList/commands/focusElementNoteList.d.ts +packages/app-desktop/gui/NoteList/commands/focusElementNoteList.js +packages/app-desktop/gui/NoteList/commands/focusElementNoteList.js.map +packages/app-desktop/gui/NoteListControls/NoteListControls.d.ts +packages/app-desktop/gui/NoteListControls/NoteListControls.js +packages/app-desktop/gui/NoteListControls/NoteListControls.js.map +packages/app-desktop/gui/NoteListControls/commands/focusSearch.d.ts +packages/app-desktop/gui/NoteListControls/commands/focusSearch.js +packages/app-desktop/gui/NoteListControls/commands/focusSearch.js.map +packages/app-desktop/gui/NoteListItem.d.ts +packages/app-desktop/gui/NoteListItem.js +packages/app-desktop/gui/NoteListItem.js.map +packages/app-desktop/gui/NoteTextViewer.d.ts +packages/app-desktop/gui/NoteTextViewer.js +packages/app-desktop/gui/NoteTextViewer.js.map +packages/app-desktop/gui/NoteToolbar/NoteToolbar.d.ts +packages/app-desktop/gui/NoteToolbar/NoteToolbar.js +packages/app-desktop/gui/NoteToolbar/NoteToolbar.js.map +packages/app-desktop/gui/OneDriveLoginScreen.d.ts +packages/app-desktop/gui/OneDriveLoginScreen.js +packages/app-desktop/gui/OneDriveLoginScreen.js.map +packages/app-desktop/gui/ResizableLayout/ResizableLayout.d.ts +packages/app-desktop/gui/ResizableLayout/ResizableLayout.js +packages/app-desktop/gui/ResizableLayout/ResizableLayout.js.map +packages/app-desktop/gui/ResizableLayout/hooks/useLayoutItemSizes.d.ts +packages/app-desktop/gui/ResizableLayout/hooks/useLayoutItemSizes.js +packages/app-desktop/gui/ResizableLayout/hooks/useLayoutItemSizes.js.map +packages/app-desktop/gui/ResizableLayout/hooks/useWindowResizeEvent.d.ts +packages/app-desktop/gui/ResizableLayout/hooks/useWindowResizeEvent.js +packages/app-desktop/gui/ResizableLayout/hooks/useWindowResizeEvent.js.map +packages/app-desktop/gui/ResourceScreen.d.ts +packages/app-desktop/gui/ResourceScreen.js +packages/app-desktop/gui/ResourceScreen.js.map +packages/app-desktop/gui/Root.d.ts +packages/app-desktop/gui/Root.js +packages/app-desktop/gui/Root.js.map +packages/app-desktop/gui/Root_UpgradeSyncTarget.d.ts +packages/app-desktop/gui/Root_UpgradeSyncTarget.js +packages/app-desktop/gui/Root_UpgradeSyncTarget.js.map +packages/app-desktop/gui/SearchBar/SearchBar.d.ts +packages/app-desktop/gui/SearchBar/SearchBar.js +packages/app-desktop/gui/SearchBar/SearchBar.js.map +packages/app-desktop/gui/SearchBar/hooks/useSearch.d.ts +packages/app-desktop/gui/SearchBar/hooks/useSearch.js +packages/app-desktop/gui/SearchBar/hooks/useSearch.js.map +packages/app-desktop/gui/SearchBar/styles/index.d.ts +packages/app-desktop/gui/SearchBar/styles/index.js +packages/app-desktop/gui/SearchBar/styles/index.js.map +packages/app-desktop/gui/ShareNoteDialog.d.ts +packages/app-desktop/gui/ShareNoteDialog.js +packages/app-desktop/gui/ShareNoteDialog.js.map +packages/app-desktop/gui/SideBar/SideBar.d.ts +packages/app-desktop/gui/SideBar/SideBar.js +packages/app-desktop/gui/SideBar/SideBar.js.map +packages/app-desktop/gui/SideBar/commands/focusElementSideBar.d.ts +packages/app-desktop/gui/SideBar/commands/focusElementSideBar.js +packages/app-desktop/gui/SideBar/commands/focusElementSideBar.js.map +packages/app-desktop/gui/SideBar/styles/index.d.ts +packages/app-desktop/gui/SideBar/styles/index.js +packages/app-desktop/gui/SideBar/styles/index.js.map +packages/app-desktop/gui/StatusScreen/StatusScreen.d.ts +packages/app-desktop/gui/StatusScreen/StatusScreen.js +packages/app-desktop/gui/StatusScreen/StatusScreen.js.map +packages/app-desktop/gui/TagList.d.ts +packages/app-desktop/gui/TagList.js +packages/app-desktop/gui/TagList.js.map +packages/app-desktop/gui/ToggleEditorsButton/ToggleEditorsButton.d.ts +packages/app-desktop/gui/ToggleEditorsButton/ToggleEditorsButton.js +packages/app-desktop/gui/ToggleEditorsButton/ToggleEditorsButton.js.map +packages/app-desktop/gui/ToggleEditorsButton/styles/index.d.ts +packages/app-desktop/gui/ToggleEditorsButton/styles/index.js +packages/app-desktop/gui/ToggleEditorsButton/styles/index.js.map +packages/app-desktop/gui/ToolbarBase.d.ts +packages/app-desktop/gui/ToolbarBase.js +packages/app-desktop/gui/ToolbarBase.js.map +packages/app-desktop/gui/ToolbarButton/ToolbarButton.d.ts +packages/app-desktop/gui/ToolbarButton/ToolbarButton.js +packages/app-desktop/gui/ToolbarButton/ToolbarButton.js.map +packages/app-desktop/gui/ToolbarButton/styles/index.d.ts +packages/app-desktop/gui/ToolbarButton/styles/index.js +packages/app-desktop/gui/ToolbarButton/styles/index.js.map +packages/app-desktop/gui/hooks/useEffectDebugger.d.ts +packages/app-desktop/gui/hooks/useEffectDebugger.js +packages/app-desktop/gui/hooks/useEffectDebugger.js.map +packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.d.ts +packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.js +packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.js.map +packages/app-desktop/gui/hooks/usePrevious.d.ts +packages/app-desktop/gui/hooks/usePrevious.js +packages/app-desktop/gui/hooks/usePrevious.js.map +packages/app-desktop/gui/hooks/usePropsDebugger.d.ts +packages/app-desktop/gui/hooks/usePropsDebugger.js +packages/app-desktop/gui/hooks/usePropsDebugger.js.map +packages/app-desktop/gui/menuCommandNames.d.ts +packages/app-desktop/gui/menuCommandNames.js +packages/app-desktop/gui/menuCommandNames.js.map +packages/app-desktop/gui/style/StyledInput.d.ts +packages/app-desktop/gui/style/StyledInput.js +packages/app-desktop/gui/style/StyledInput.js.map +packages/app-desktop/gui/style/StyledTextInput.d.ts +packages/app-desktop/gui/style/StyledTextInput.js +packages/app-desktop/gui/style/StyledTextInput.js.map +packages/app-desktop/gui/utils/NoteListUtils.d.ts +packages/app-desktop/gui/utils/NoteListUtils.js +packages/app-desktop/gui/utils/NoteListUtils.js.map +packages/app-desktop/plugins/GotoAnything.d.ts +packages/app-desktop/plugins/GotoAnything.js +packages/app-desktop/plugins/GotoAnything.js.map +packages/app-desktop/services/bridge.d.ts +packages/app-desktop/services/bridge.js +packages/app-desktop/services/bridge.js.map +packages/app-desktop/services/commands/types.d.ts +packages/app-desktop/services/commands/types.js +packages/app-desktop/services/commands/types.js.map +packages/app-desktop/services/plugins/PlatformImplementation.d.ts +packages/app-desktop/services/plugins/PlatformImplementation.js +packages/app-desktop/services/plugins/PlatformImplementation.js.map +packages/app-desktop/services/plugins/PluginRunner.d.ts +packages/app-desktop/services/plugins/PluginRunner.js +packages/app-desktop/services/plugins/PluginRunner.js.map +packages/app-desktop/services/plugins/UserWebview.d.ts +packages/app-desktop/services/plugins/UserWebview.js +packages/app-desktop/services/plugins/UserWebview.js.map +packages/app-desktop/services/plugins/UserWebviewDialog.d.ts +packages/app-desktop/services/plugins/UserWebviewDialog.js +packages/app-desktop/services/plugins/UserWebviewDialog.js.map +packages/app-desktop/services/plugins/UserWebviewDialogButtonBar.d.ts +packages/app-desktop/services/plugins/UserWebviewDialogButtonBar.js +packages/app-desktop/services/plugins/UserWebviewDialogButtonBar.js.map +packages/app-desktop/services/plugins/hooks/useThemeCss.d.ts +packages/app-desktop/services/plugins/hooks/useThemeCss.js +packages/app-desktop/services/plugins/hooks/useThemeCss.js.map +packages/app-desktop/services/plugins/hooks/useViewIsReady.d.ts +packages/app-desktop/services/plugins/hooks/useViewIsReady.js +packages/app-desktop/services/plugins/hooks/useViewIsReady.js.map +packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.d.ts +packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.js +packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.js.map +packages/app-mobile/PluginAssetsLoader.d.ts +packages/app-mobile/PluginAssetsLoader.js +packages/app-mobile/PluginAssetsLoader.js.map +packages/app-mobile/components/BackButtonDialogBox.d.ts +packages/app-mobile/components/BackButtonDialogBox.js +packages/app-mobile/components/BackButtonDialogBox.js.map +packages/app-mobile/components/CameraView.d.ts +packages/app-mobile/components/CameraView.js +packages/app-mobile/components/CameraView.js.map +packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.d.ts +packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.js +packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.js.map +packages/app-mobile/components/NoteBodyViewer/hooks/useOnMessage.d.ts +packages/app-mobile/components/NoteBodyViewer/hooks/useOnMessage.js +packages/app-mobile/components/NoteBodyViewer/hooks/useOnMessage.js.map +packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.d.ts +packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.js +packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.js.map +packages/app-mobile/components/NoteBodyViewer/hooks/useSource.d.ts +packages/app-mobile/components/NoteBodyViewer/hooks/useSource.js +packages/app-mobile/components/NoteBodyViewer/hooks/useSource.js.map +packages/app-mobile/components/SelectDateTimeDialog.d.ts +packages/app-mobile/components/SelectDateTimeDialog.js +packages/app-mobile/components/SelectDateTimeDialog.js.map +packages/app-mobile/components/screens/Note.d.ts +packages/app-mobile/components/screens/Note.js +packages/app-mobile/components/screens/Note.js.map +packages/app-mobile/components/screens/UpgradeSyncTargetScreen.d.ts +packages/app-mobile/components/screens/UpgradeSyncTargetScreen.js +packages/app-mobile/components/screens/UpgradeSyncTargetScreen.js.map +packages/app-mobile/services/AlarmServiceDriver.android.d.ts +packages/app-mobile/services/AlarmServiceDriver.android.js +packages/app-mobile/services/AlarmServiceDriver.android.js.map +packages/app-mobile/services/AlarmServiceDriver.ios.d.ts +packages/app-mobile/services/AlarmServiceDriver.ios.js +packages/app-mobile/services/AlarmServiceDriver.ios.js.map +packages/app-mobile/setUpQuickActions.d.ts +packages/app-mobile/setUpQuickActions.js +packages/app-mobile/setUpQuickActions.js.map +packages/app-mobile/utils/ShareExtension.d.ts +packages/app-mobile/utils/ShareExtension.js +packages/app-mobile/utils/ShareExtension.js.map +packages/app-mobile/utils/checkPermissions.d.ts +packages/app-mobile/utils/checkPermissions.js +packages/app-mobile/utils/checkPermissions.js.map +packages/app-mobile/utils/shareHandler.d.ts +packages/app-mobile/utils/shareHandler.js +packages/app-mobile/utils/shareHandler.js.map +packages/fork-htmlparser2/src/CollectingHandler.d.ts +packages/fork-htmlparser2/src/CollectingHandler.js +packages/fork-htmlparser2/src/CollectingHandler.js.map +packages/fork-htmlparser2/src/FeedHandler.d.ts +packages/fork-htmlparser2/src/FeedHandler.js +packages/fork-htmlparser2/src/FeedHandler.js.map +packages/fork-htmlparser2/src/FeedHandler.spec.d.ts +packages/fork-htmlparser2/src/FeedHandler.spec.js +packages/fork-htmlparser2/src/FeedHandler.spec.js.map +packages/fork-htmlparser2/src/MultiplexHandler.d.ts +packages/fork-htmlparser2/src/MultiplexHandler.js +packages/fork-htmlparser2/src/MultiplexHandler.js.map +packages/fork-htmlparser2/src/Parser.d.ts +packages/fork-htmlparser2/src/Parser.js +packages/fork-htmlparser2/src/Parser.js.map +packages/fork-htmlparser2/src/Parser.spec.d.ts +packages/fork-htmlparser2/src/Parser.spec.js +packages/fork-htmlparser2/src/Parser.spec.js.map +packages/fork-htmlparser2/src/Tokenizer.d.ts +packages/fork-htmlparser2/src/Tokenizer.js +packages/fork-htmlparser2/src/Tokenizer.js.map +packages/fork-htmlparser2/src/WritableStream.d.ts +packages/fork-htmlparser2/src/WritableStream.js +packages/fork-htmlparser2/src/WritableStream.js.map +packages/fork-htmlparser2/src/WritableStream.spec.d.ts +packages/fork-htmlparser2/src/WritableStream.spec.js +packages/fork-htmlparser2/src/WritableStream.spec.js.map +packages/fork-htmlparser2/src/__fixtures__/test-helper.d.ts +packages/fork-htmlparser2/src/__fixtures__/test-helper.js +packages/fork-htmlparser2/src/__fixtures__/test-helper.js.map +packages/fork-htmlparser2/src/__tests__/events.d.ts +packages/fork-htmlparser2/src/__tests__/events.js +packages/fork-htmlparser2/src/__tests__/events.js.map +packages/fork-htmlparser2/src/__tests__/stream.d.ts +packages/fork-htmlparser2/src/__tests__/stream.js +packages/fork-htmlparser2/src/__tests__/stream.js.map +packages/fork-htmlparser2/src/index.d.ts +packages/fork-htmlparser2/src/index.js +packages/fork-htmlparser2/src/index.js.map +packages/fork-htmlparser2/src/index.spec.d.ts +packages/fork-htmlparser2/src/index.spec.js +packages/fork-htmlparser2/src/index.spec.js.map +packages/lib/AsyncActionQueue.d.ts +packages/lib/AsyncActionQueue.js +packages/lib/AsyncActionQueue.js.map +packages/lib/BaseApplication.d.ts +packages/lib/BaseApplication.js +packages/lib/BaseApplication.js.map +packages/lib/BaseModel.d.ts +packages/lib/BaseModel.js +packages/lib/BaseModel.js.map +packages/lib/InMemoryCache.d.ts +packages/lib/InMemoryCache.js +packages/lib/InMemoryCache.js.map +packages/lib/JoplinServerApi.d.ts +packages/lib/JoplinServerApi.js +packages/lib/JoplinServerApi.js.map +packages/lib/Logger.d.ts +packages/lib/Logger.js +packages/lib/Logger.js.map +packages/lib/PoorManIntervals.d.ts +packages/lib/PoorManIntervals.js +packages/lib/PoorManIntervals.js.map +packages/lib/Synchronizer.d.ts +packages/lib/Synchronizer.js +packages/lib/Synchronizer.js.map +packages/lib/commands/historyBackward.d.ts +packages/lib/commands/historyBackward.js +packages/lib/commands/historyBackward.js.map +packages/lib/commands/historyForward.d.ts +packages/lib/commands/historyForward.js +packages/lib/commands/historyForward.js.map +packages/lib/commands/synchronize.d.ts +packages/lib/commands/synchronize.js +packages/lib/commands/synchronize.js.map +packages/lib/errorUtils.d.ts +packages/lib/errorUtils.js +packages/lib/errorUtils.js.map +packages/lib/eventManager.d.ts +packages/lib/eventManager.js +packages/lib/eventManager.js.map +packages/lib/fs-driver-node.d.ts +packages/lib/fs-driver-node.js +packages/lib/fs-driver-node.js.map +packages/lib/locale.d.ts +packages/lib/locale.js +packages/lib/locale.js.map +packages/lib/markdownUtils.d.ts +packages/lib/markdownUtils.js +packages/lib/markdownUtils.js.map +packages/lib/markupLanguageUtils.d.ts +packages/lib/markupLanguageUtils.js +packages/lib/markupLanguageUtils.js.map +packages/lib/models/Alarm.d.ts +packages/lib/models/Alarm.js +packages/lib/models/Alarm.js.map +packages/lib/models/Setting.d.ts +packages/lib/models/Setting.js +packages/lib/models/Setting.js.map +packages/lib/models/utils/modelFeed.d.ts +packages/lib/models/utils/modelFeed.js +packages/lib/models/utils/modelFeed.js.map +packages/lib/models/utils/paginationToSql.d.ts +packages/lib/models/utils/paginationToSql.js +packages/lib/models/utils/paginationToSql.js.map +packages/lib/models/utils/types.d.ts +packages/lib/models/utils/types.js +packages/lib/models/utils/types.js.map +packages/lib/ntpDate.d.ts +packages/lib/ntpDate.js +packages/lib/ntpDate.js.map +packages/lib/path-utils.d.ts +packages/lib/path-utils.js +packages/lib/path-utils.js.map +packages/lib/reducer.d.ts +packages/lib/reducer.js +packages/lib/reducer.js.map +packages/lib/services/AlarmService.d.ts +packages/lib/services/AlarmService.js +packages/lib/services/AlarmService.js.map +packages/lib/services/AlarmServiceDriverNode.d.ts +packages/lib/services/AlarmServiceDriverNode.js +packages/lib/services/AlarmServiceDriverNode.js.map +packages/lib/services/BaseService.d.ts +packages/lib/services/BaseService.js +packages/lib/services/BaseService.js.map +packages/lib/services/CommandService.d.ts +packages/lib/services/CommandService.js +packages/lib/services/CommandService.js.map +packages/lib/services/KeymapService.d.ts +packages/lib/services/KeymapService.js +packages/lib/services/KeymapService.js.map +packages/lib/services/ResourceEditWatcher/index.d.ts +packages/lib/services/ResourceEditWatcher/index.js +packages/lib/services/ResourceEditWatcher/index.js.map +packages/lib/services/ResourceEditWatcher/reducer.d.ts +packages/lib/services/ResourceEditWatcher/reducer.js +packages/lib/services/ResourceEditWatcher/reducer.js.map +packages/lib/services/SettingUtils.d.ts +packages/lib/services/SettingUtils.js +packages/lib/services/SettingUtils.js.map +packages/lib/services/UndoRedoService.d.ts +packages/lib/services/UndoRedoService.js +packages/lib/services/UndoRedoService.js.map +packages/lib/services/WhenClause.d.ts +packages/lib/services/WhenClause.js +packages/lib/services/WhenClause.js.map +packages/lib/services/commands/MenuUtils.d.ts +packages/lib/services/commands/MenuUtils.js +packages/lib/services/commands/MenuUtils.js.map +packages/lib/services/commands/ToolbarButtonUtils.d.ts +packages/lib/services/commands/ToolbarButtonUtils.js +packages/lib/services/commands/ToolbarButtonUtils.js.map +packages/lib/services/commands/commandsToMarkdownTable.d.ts +packages/lib/services/commands/commandsToMarkdownTable.js +packages/lib/services/commands/commandsToMarkdownTable.js.map +packages/lib/services/commands/propsHaveChanged.d.ts +packages/lib/services/commands/propsHaveChanged.js +packages/lib/services/commands/propsHaveChanged.js.map +packages/lib/services/commands/stateToWhenClauseContext.d.ts +packages/lib/services/commands/stateToWhenClauseContext.js +packages/lib/services/commands/stateToWhenClauseContext.js.map +packages/lib/services/contextkey/contextkey.d.ts +packages/lib/services/contextkey/contextkey.js +packages/lib/services/contextkey/contextkey.js.map +packages/lib/services/debug/populateDatabase.d.ts +packages/lib/services/debug/populateDatabase.js +packages/lib/services/debug/populateDatabase.js.map +packages/lib/services/interop/InteropService.d.ts +packages/lib/services/interop/InteropService.js +packages/lib/services/interop/InteropService.js.map +packages/lib/services/interop/InteropService_Exporter_Base.d.ts +packages/lib/services/interop/InteropService_Exporter_Base.js +packages/lib/services/interop/InteropService_Exporter_Base.js.map +packages/lib/services/interop/InteropService_Exporter_Custom.d.ts +packages/lib/services/interop/InteropService_Exporter_Custom.js +packages/lib/services/interop/InteropService_Exporter_Custom.js.map +packages/lib/services/interop/InteropService_Exporter_Html.d.ts +packages/lib/services/interop/InteropService_Exporter_Html.js +packages/lib/services/interop/InteropService_Exporter_Html.js.map +packages/lib/services/interop/InteropService_Exporter_Jex.d.ts +packages/lib/services/interop/InteropService_Exporter_Jex.js +packages/lib/services/interop/InteropService_Exporter_Jex.js.map +packages/lib/services/interop/InteropService_Exporter_Md.d.ts +packages/lib/services/interop/InteropService_Exporter_Md.js +packages/lib/services/interop/InteropService_Exporter_Md.js.map +packages/lib/services/interop/InteropService_Exporter_Raw.d.ts +packages/lib/services/interop/InteropService_Exporter_Raw.js +packages/lib/services/interop/InteropService_Exporter_Raw.js.map +packages/lib/services/interop/InteropService_Importer_Base.d.ts +packages/lib/services/interop/InteropService_Importer_Base.js +packages/lib/services/interop/InteropService_Importer_Base.js.map +packages/lib/services/interop/InteropService_Importer_Custom.d.ts +packages/lib/services/interop/InteropService_Importer_Custom.js +packages/lib/services/interop/InteropService_Importer_Custom.js.map +packages/lib/services/interop/InteropService_Importer_EnexToHtml.d.ts +packages/lib/services/interop/InteropService_Importer_EnexToHtml.js +packages/lib/services/interop/InteropService_Importer_EnexToHtml.js.map +packages/lib/services/interop/InteropService_Importer_EnexToMd.d.ts +packages/lib/services/interop/InteropService_Importer_EnexToMd.js +packages/lib/services/interop/InteropService_Importer_EnexToMd.js.map +packages/lib/services/interop/InteropService_Importer_Jex.d.ts +packages/lib/services/interop/InteropService_Importer_Jex.js +packages/lib/services/interop/InteropService_Importer_Jex.js.map +packages/lib/services/interop/InteropService_Importer_Md.d.ts +packages/lib/services/interop/InteropService_Importer_Md.js +packages/lib/services/interop/InteropService_Importer_Md.js.map +packages/lib/services/interop/InteropService_Importer_Raw.d.ts +packages/lib/services/interop/InteropService_Importer_Raw.js +packages/lib/services/interop/InteropService_Importer_Raw.js.map +packages/lib/services/interop/types.d.ts +packages/lib/services/interop/types.js +packages/lib/services/interop/types.js.map +packages/lib/services/keychain/KeychainService.d.ts +packages/lib/services/keychain/KeychainService.js +packages/lib/services/keychain/KeychainService.js.map +packages/lib/services/keychain/KeychainServiceDriver.dummy.d.ts +packages/lib/services/keychain/KeychainServiceDriver.dummy.js +packages/lib/services/keychain/KeychainServiceDriver.dummy.js.map +packages/lib/services/keychain/KeychainServiceDriver.mobile.d.ts +packages/lib/services/keychain/KeychainServiceDriver.mobile.js +packages/lib/services/keychain/KeychainServiceDriver.mobile.js.map +packages/lib/services/keychain/KeychainServiceDriver.node.d.ts +packages/lib/services/keychain/KeychainServiceDriver.node.js +packages/lib/services/keychain/KeychainServiceDriver.node.js.map +packages/lib/services/keychain/KeychainServiceDriverBase.d.ts +packages/lib/services/keychain/KeychainServiceDriverBase.js +packages/lib/services/keychain/KeychainServiceDriverBase.js.map +packages/lib/services/plugins/BasePluginRunner.d.ts +packages/lib/services/plugins/BasePluginRunner.js +packages/lib/services/plugins/BasePluginRunner.js.map +packages/lib/services/plugins/MenuController.d.ts +packages/lib/services/plugins/MenuController.js +packages/lib/services/plugins/MenuController.js.map +packages/lib/services/plugins/MenuItemController.d.ts +packages/lib/services/plugins/MenuItemController.js +packages/lib/services/plugins/MenuItemController.js.map +packages/lib/services/plugins/Plugin.d.ts +packages/lib/services/plugins/Plugin.js +packages/lib/services/plugins/Plugin.js.map +packages/lib/services/plugins/PluginService.d.ts +packages/lib/services/plugins/PluginService.js +packages/lib/services/plugins/PluginService.js.map +packages/lib/services/plugins/ToolbarButtonController.d.ts +packages/lib/services/plugins/ToolbarButtonController.js +packages/lib/services/plugins/ToolbarButtonController.js.map +packages/lib/services/plugins/ViewController.d.ts +packages/lib/services/plugins/ViewController.js +packages/lib/services/plugins/ViewController.js.map +packages/lib/services/plugins/WebviewController.d.ts +packages/lib/services/plugins/WebviewController.js +packages/lib/services/plugins/WebviewController.js.map +packages/lib/services/plugins/api/Global.d.ts +packages/lib/services/plugins/api/Global.js +packages/lib/services/plugins/api/Global.js.map +packages/lib/services/plugins/api/Joplin.d.ts +packages/lib/services/plugins/api/Joplin.js +packages/lib/services/plugins/api/Joplin.js.map +packages/lib/services/plugins/api/JoplinCommands.d.ts +packages/lib/services/plugins/api/JoplinCommands.js +packages/lib/services/plugins/api/JoplinCommands.js.map +packages/lib/services/plugins/api/JoplinData.d.ts +packages/lib/services/plugins/api/JoplinData.js +packages/lib/services/plugins/api/JoplinData.js.map +packages/lib/services/plugins/api/JoplinFilters.d.ts +packages/lib/services/plugins/api/JoplinFilters.js +packages/lib/services/plugins/api/JoplinFilters.js.map +packages/lib/services/plugins/api/JoplinInterop.d.ts +packages/lib/services/plugins/api/JoplinInterop.js +packages/lib/services/plugins/api/JoplinInterop.js.map +packages/lib/services/plugins/api/JoplinPlugins.d.ts +packages/lib/services/plugins/api/JoplinPlugins.js +packages/lib/services/plugins/api/JoplinPlugins.js.map +packages/lib/services/plugins/api/JoplinSettings.d.ts +packages/lib/services/plugins/api/JoplinSettings.js +packages/lib/services/plugins/api/JoplinSettings.js.map +packages/lib/services/plugins/api/JoplinViews.d.ts +packages/lib/services/plugins/api/JoplinViews.js +packages/lib/services/plugins/api/JoplinViews.js.map +packages/lib/services/plugins/api/JoplinViewsDialogs.d.ts +packages/lib/services/plugins/api/JoplinViewsDialogs.js +packages/lib/services/plugins/api/JoplinViewsDialogs.js.map +packages/lib/services/plugins/api/JoplinViewsMenuItems.d.ts +packages/lib/services/plugins/api/JoplinViewsMenuItems.js +packages/lib/services/plugins/api/JoplinViewsMenuItems.js.map +packages/lib/services/plugins/api/JoplinViewsMenus.d.ts +packages/lib/services/plugins/api/JoplinViewsMenus.js +packages/lib/services/plugins/api/JoplinViewsMenus.js.map +packages/lib/services/plugins/api/JoplinViewsPanels.d.ts +packages/lib/services/plugins/api/JoplinViewsPanels.js +packages/lib/services/plugins/api/JoplinViewsPanels.js.map +packages/lib/services/plugins/api/JoplinViewsToolbarButtons.d.ts +packages/lib/services/plugins/api/JoplinViewsToolbarButtons.js +packages/lib/services/plugins/api/JoplinViewsToolbarButtons.js.map +packages/lib/services/plugins/api/JoplinWorkspace.d.ts +packages/lib/services/plugins/api/JoplinWorkspace.js +packages/lib/services/plugins/api/JoplinWorkspace.js.map +packages/lib/services/plugins/api/types.d.ts +packages/lib/services/plugins/api/types.js +packages/lib/services/plugins/api/types.js.map +packages/lib/services/plugins/reducer.d.ts +packages/lib/services/plugins/reducer.js +packages/lib/services/plugins/reducer.js.map +packages/lib/services/plugins/sandboxProxy.d.ts +packages/lib/services/plugins/sandboxProxy.js +packages/lib/services/plugins/sandboxProxy.js.map +packages/lib/services/plugins/utils/contentScriptsToRendererRules.d.ts +packages/lib/services/plugins/utils/contentScriptsToRendererRules.js +packages/lib/services/plugins/utils/contentScriptsToRendererRules.js.map +packages/lib/services/plugins/utils/createViewHandle.d.ts +packages/lib/services/plugins/utils/createViewHandle.js +packages/lib/services/plugins/utils/createViewHandle.js.map +packages/lib/services/plugins/utils/executeSandboxCall.d.ts +packages/lib/services/plugins/utils/executeSandboxCall.js +packages/lib/services/plugins/utils/executeSandboxCall.js.map +packages/lib/services/plugins/utils/manifestFromObject.d.ts +packages/lib/services/plugins/utils/manifestFromObject.js +packages/lib/services/plugins/utils/manifestFromObject.js.map +packages/lib/services/plugins/utils/mapEventHandlersToIds.d.ts +packages/lib/services/plugins/utils/mapEventHandlersToIds.js +packages/lib/services/plugins/utils/mapEventHandlersToIds.js.map +packages/lib/services/plugins/utils/types.d.ts +packages/lib/services/plugins/utils/types.js +packages/lib/services/plugins/utils/types.js.map +packages/lib/services/rest/Api.d.ts +packages/lib/services/rest/Api.js +packages/lib/services/rest/Api.js.map +packages/lib/services/rest/ApiResponse.d.ts +packages/lib/services/rest/ApiResponse.js +packages/lib/services/rest/ApiResponse.js.map +packages/lib/services/rest/actionApi.desktop.d.ts +packages/lib/services/rest/actionApi.desktop.js +packages/lib/services/rest/actionApi.desktop.js.map +packages/lib/services/rest/routes/folders.d.ts +packages/lib/services/rest/routes/folders.js +packages/lib/services/rest/routes/folders.js.map +packages/lib/services/rest/routes/master_keys.d.ts +packages/lib/services/rest/routes/master_keys.js +packages/lib/services/rest/routes/master_keys.js.map +packages/lib/services/rest/routes/notes.d.ts +packages/lib/services/rest/routes/notes.js +packages/lib/services/rest/routes/notes.js.map +packages/lib/services/rest/routes/ping.d.ts +packages/lib/services/rest/routes/ping.js +packages/lib/services/rest/routes/ping.js.map +packages/lib/services/rest/routes/resources.d.ts +packages/lib/services/rest/routes/resources.js +packages/lib/services/rest/routes/resources.js.map +packages/lib/services/rest/routes/search.d.ts +packages/lib/services/rest/routes/search.js +packages/lib/services/rest/routes/search.js.map +packages/lib/services/rest/routes/tags.d.ts +packages/lib/services/rest/routes/tags.js +packages/lib/services/rest/routes/tags.js.map +packages/lib/services/rest/utils/defaultAction.d.ts +packages/lib/services/rest/utils/defaultAction.js +packages/lib/services/rest/utils/defaultAction.js.map +packages/lib/services/rest/utils/defaultLoadOptions.d.ts +packages/lib/services/rest/utils/defaultLoadOptions.js +packages/lib/services/rest/utils/defaultLoadOptions.js.map +packages/lib/services/rest/utils/defaultSaveOptions.d.ts +packages/lib/services/rest/utils/defaultSaveOptions.js +packages/lib/services/rest/utils/defaultSaveOptions.js.map +packages/lib/services/rest/utils/errors.d.ts +packages/lib/services/rest/utils/errors.js +packages/lib/services/rest/utils/errors.js.map +packages/lib/services/rest/utils/paginatedResults.d.ts +packages/lib/services/rest/utils/paginatedResults.js +packages/lib/services/rest/utils/paginatedResults.js.map +packages/lib/services/rest/utils/readonlyProperties.d.ts +packages/lib/services/rest/utils/readonlyProperties.js +packages/lib/services/rest/utils/readonlyProperties.js.map +packages/lib/services/rest/utils/requestFields.d.ts +packages/lib/services/rest/utils/requestFields.js +packages/lib/services/rest/utils/requestFields.js.map +packages/lib/services/rest/utils/requestPaginationOptions.d.ts +packages/lib/services/rest/utils/requestPaginationOptions.js +packages/lib/services/rest/utils/requestPaginationOptions.js.map +packages/lib/services/searchengine/filterParser.d.ts +packages/lib/services/searchengine/filterParser.js +packages/lib/services/searchengine/filterParser.js.map +packages/lib/services/searchengine/queryBuilder.d.ts +packages/lib/services/searchengine/queryBuilder.js +packages/lib/services/searchengine/queryBuilder.js.map +packages/lib/services/spellChecker/SpellCheckerService.d.ts +packages/lib/services/spellChecker/SpellCheckerService.js +packages/lib/services/spellChecker/SpellCheckerService.js.map +packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.d.ts +packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.js +packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.js.map +packages/lib/services/synchronizer/LockHandler.d.ts +packages/lib/services/synchronizer/LockHandler.js +packages/lib/services/synchronizer/LockHandler.js.map +packages/lib/services/synchronizer/MigrationHandler.d.ts +packages/lib/services/synchronizer/MigrationHandler.js +packages/lib/services/synchronizer/MigrationHandler.js.map +packages/lib/services/synchronizer/gui/useSyncTargetUpgrade.d.ts +packages/lib/services/synchronizer/gui/useSyncTargetUpgrade.js +packages/lib/services/synchronizer/gui/useSyncTargetUpgrade.js.map +packages/lib/services/synchronizer/migrations/1.d.ts +packages/lib/services/synchronizer/migrations/1.js +packages/lib/services/synchronizer/migrations/1.js.map +packages/lib/services/synchronizer/migrations/2.d.ts +packages/lib/services/synchronizer/migrations/2.js +packages/lib/services/synchronizer/migrations/2.js.map +packages/lib/services/synchronizer/utils/types.d.ts +packages/lib/services/synchronizer/utils/types.js +packages/lib/services/synchronizer/utils/types.js.map +packages/lib/shim.d.ts +packages/lib/shim.js +packages/lib/shim.js.map +packages/lib/theme.d.ts +packages/lib/theme.js +packages/lib/theme.js.map +packages/lib/themes/aritimDark.d.ts +packages/lib/themes/aritimDark.js +packages/lib/themes/aritimDark.js.map +packages/lib/themes/dark.d.ts +packages/lib/themes/dark.js +packages/lib/themes/dark.js.map +packages/lib/themes/dracula.d.ts +packages/lib/themes/dracula.js +packages/lib/themes/dracula.js.map +packages/lib/themes/light.d.ts +packages/lib/themes/light.js +packages/lib/themes/light.js.map +packages/lib/themes/nord.d.ts +packages/lib/themes/nord.js +packages/lib/themes/nord.js.map +packages/lib/themes/oledDark.d.ts +packages/lib/themes/oledDark.js +packages/lib/themes/oledDark.js.map +packages/lib/themes/solarizedDark.d.ts +packages/lib/themes/solarizedDark.js +packages/lib/themes/solarizedDark.js.map +packages/lib/themes/solarizedLight.d.ts +packages/lib/themes/solarizedLight.js +packages/lib/themes/solarizedLight.js.map +packages/lib/themes/type.d.ts +packages/lib/themes/type.js +packages/lib/themes/type.js.map +packages/lib/time.d.ts +packages/lib/time.js +packages/lib/time.js.map +packages/lib/uuid.d.ts +packages/lib/uuid.js +packages/lib/uuid.js.map +packages/lib/versionInfo.d.ts +packages/lib/versionInfo.js +packages/lib/versionInfo.js.map +packages/renderer/InMemoryCache.d.ts +packages/renderer/InMemoryCache.js +packages/renderer/InMemoryCache.js.map +packages/renderer/MarkupToHtml.d.ts +packages/renderer/MarkupToHtml.js +packages/renderer/MarkupToHtml.js.map +packages/renderer/MdToHtml.d.ts +packages/renderer/MdToHtml.js +packages/renderer/MdToHtml.js.map +packages/renderer/MdToHtml/rules/checkbox.d.ts +packages/renderer/MdToHtml/rules/checkbox.js +packages/renderer/MdToHtml/rules/checkbox.js.map +packages/renderer/MdToHtml/rules/code_inline.d.ts +packages/renderer/MdToHtml/rules/code_inline.js +packages/renderer/MdToHtml/rules/code_inline.js.map +packages/renderer/MdToHtml/rules/fence.d.ts +packages/renderer/MdToHtml/rules/fence.js +packages/renderer/MdToHtml/rules/fence.js.map +packages/renderer/MdToHtml/rules/fountain.d.ts +packages/renderer/MdToHtml/rules/fountain.js +packages/renderer/MdToHtml/rules/fountain.js.map +packages/renderer/MdToHtml/rules/highlight_keywords.d.ts +packages/renderer/MdToHtml/rules/highlight_keywords.js +packages/renderer/MdToHtml/rules/highlight_keywords.js.map +packages/renderer/MdToHtml/rules/html_image.d.ts +packages/renderer/MdToHtml/rules/html_image.js +packages/renderer/MdToHtml/rules/html_image.js.map +packages/renderer/MdToHtml/rules/image.d.ts +packages/renderer/MdToHtml/rules/image.js +packages/renderer/MdToHtml/rules/image.js.map +packages/renderer/MdToHtml/rules/katex.d.ts +packages/renderer/MdToHtml/rules/katex.js +packages/renderer/MdToHtml/rules/katex.js.map +packages/renderer/MdToHtml/rules/link_open.d.ts +packages/renderer/MdToHtml/rules/link_open.js +packages/renderer/MdToHtml/rules/link_open.js.map +packages/renderer/MdToHtml/rules/mermaid.d.ts +packages/renderer/MdToHtml/rules/mermaid.js +packages/renderer/MdToHtml/rules/mermaid.js.map +packages/renderer/MdToHtml/rules/sanitize_html.d.ts +packages/renderer/MdToHtml/rules/sanitize_html.js +packages/renderer/MdToHtml/rules/sanitize_html.js.map +packages/renderer/index.d.ts +packages/renderer/index.js +packages/renderer/index.js.map +packages/renderer/noteStyle.d.ts +packages/renderer/noteStyle.js +packages/renderer/noteStyle.js.map +packages/renderer/pathUtils.d.ts +packages/renderer/pathUtils.js +packages/renderer/pathUtils.js.map +# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 79caf56912..95dccdf497 100644 --- a/.travis.yml +++ b/.travis.yml @@ -61,21 +61,18 @@ script: - | # Install tools npm install - cd Tools - npm install - cd .. # Run test units. # Only do it for pull requests because Travis randomly fails to run them # and that would break the desktop release. if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then - cd CliClient + cd packages/app-cli npm run test-ci testResult=$? if [ $testResult -ne 0 ]; then exit $testResult fi - cd .. + cd ../.. fi # Run linter for pull requests only - this is so that @@ -93,7 +90,7 @@ script: # tool like poedit. Doing it for Linux only is sufficient. if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then if [ "$TRAVIS_OS_NAME" != "osx" ]; then - node Tools/validate-translation.js + node packages/tools/validate-translation.js testResult=$? if [ $testResult -ne 0 ]; then exit $testResult @@ -102,7 +99,7 @@ script: fi # Find out if we should run the build or not. Electron-builder gets stuck when - # builing PRs so we disable it in this case. The Linux build should provide + # building PRs so we disable it in this case. The Linux build should provide # enough info if the app builds or not. # https://github.com/electron-userland/electron-builder/issues/4263 if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then @@ -112,5 +109,5 @@ script: fi # Prepare the Electron app and build it - cd ElectronClient + cd packages/app-desktop USE_HARD_LINKS=false npm run dist diff --git a/Modules/PluginDocTheme/assets/css/main.css b/Assets/PluginDocTheme/assets/css/main.css similarity index 100% rename from Modules/PluginDocTheme/assets/css/main.css rename to Assets/PluginDocTheme/assets/css/main.css diff --git a/Modules/PluginDocTheme/assets/images/icons.png b/Assets/PluginDocTheme/assets/images/icons.png similarity index 100% rename from Modules/PluginDocTheme/assets/images/icons.png rename to Assets/PluginDocTheme/assets/images/icons.png diff --git a/Modules/PluginDocTheme/assets/images/icons@2x.png b/Assets/PluginDocTheme/assets/images/icons@2x.png similarity index 100% rename from Modules/PluginDocTheme/assets/images/icons@2x.png rename to Assets/PluginDocTheme/assets/images/icons@2x.png diff --git a/Modules/PluginDocTheme/assets/images/widgets.png b/Assets/PluginDocTheme/assets/images/widgets.png similarity index 100% rename from Modules/PluginDocTheme/assets/images/widgets.png rename to Assets/PluginDocTheme/assets/images/widgets.png diff --git a/Modules/PluginDocTheme/assets/images/widgets@2x.png b/Assets/PluginDocTheme/assets/images/widgets@2x.png similarity index 100% rename from Modules/PluginDocTheme/assets/images/widgets@2x.png rename to Assets/PluginDocTheme/assets/images/widgets@2x.png diff --git a/Modules/PluginDocTheme/assets/js/main.js b/Assets/PluginDocTheme/assets/js/main.js similarity index 100% rename from Modules/PluginDocTheme/assets/js/main.js rename to Assets/PluginDocTheme/assets/js/main.js diff --git a/Modules/PluginDocTheme/helpers/index.js b/Assets/PluginDocTheme/helpers/index.js similarity index 100% rename from Modules/PluginDocTheme/helpers/index.js rename to Assets/PluginDocTheme/helpers/index.js diff --git a/Modules/PluginDocTheme/index.md b/Assets/PluginDocTheme/index.md similarity index 100% rename from Modules/PluginDocTheme/index.md rename to Assets/PluginDocTheme/index.md diff --git a/Modules/PluginDocTheme/layouts/default.hbs b/Assets/PluginDocTheme/layouts/default.hbs similarity index 100% rename from Modules/PluginDocTheme/layouts/default.hbs rename to Assets/PluginDocTheme/layouts/default.hbs diff --git a/Modules/PluginDocTheme/partials/analytics.hbs b/Assets/PluginDocTheme/partials/analytics.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/analytics.hbs rename to Assets/PluginDocTheme/partials/analytics.hbs diff --git a/Modules/PluginDocTheme/partials/breadcrumb.hbs b/Assets/PluginDocTheme/partials/breadcrumb.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/breadcrumb.hbs rename to Assets/PluginDocTheme/partials/breadcrumb.hbs diff --git a/Modules/PluginDocTheme/partials/comment.hbs b/Assets/PluginDocTheme/partials/comment.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/comment.hbs rename to Assets/PluginDocTheme/partials/comment.hbs diff --git a/Modules/PluginDocTheme/partials/footer.hbs b/Assets/PluginDocTheme/partials/footer.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/footer.hbs rename to Assets/PluginDocTheme/partials/footer.hbs diff --git a/Modules/PluginDocTheme/partials/header.hbs b/Assets/PluginDocTheme/partials/header.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/header.hbs rename to Assets/PluginDocTheme/partials/header.hbs diff --git a/Modules/PluginDocTheme/partials/hierarchy.hbs b/Assets/PluginDocTheme/partials/hierarchy.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/hierarchy.hbs rename to Assets/PluginDocTheme/partials/hierarchy.hbs diff --git a/Modules/PluginDocTheme/partials/index.hbs b/Assets/PluginDocTheme/partials/index.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/index.hbs rename to Assets/PluginDocTheme/partials/index.hbs diff --git a/Modules/PluginDocTheme/partials/member.declaration.hbs b/Assets/PluginDocTheme/partials/member.declaration.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/member.declaration.hbs rename to Assets/PluginDocTheme/partials/member.declaration.hbs diff --git a/Modules/PluginDocTheme/partials/member.getterSetter.hbs b/Assets/PluginDocTheme/partials/member.getterSetter.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/member.getterSetter.hbs rename to Assets/PluginDocTheme/partials/member.getterSetter.hbs diff --git a/Modules/PluginDocTheme/partials/member.hbs b/Assets/PluginDocTheme/partials/member.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/member.hbs rename to Assets/PluginDocTheme/partials/member.hbs diff --git a/Modules/PluginDocTheme/partials/member.reference.hbs b/Assets/PluginDocTheme/partials/member.reference.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/member.reference.hbs rename to Assets/PluginDocTheme/partials/member.reference.hbs diff --git a/Modules/PluginDocTheme/partials/member.signature.body.hbs b/Assets/PluginDocTheme/partials/member.signature.body.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/member.signature.body.hbs rename to Assets/PluginDocTheme/partials/member.signature.body.hbs diff --git a/Modules/PluginDocTheme/partials/member.signature.title.hbs b/Assets/PluginDocTheme/partials/member.signature.title.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/member.signature.title.hbs rename to Assets/PluginDocTheme/partials/member.signature.title.hbs diff --git a/Modules/PluginDocTheme/partials/member.signatures.hbs b/Assets/PluginDocTheme/partials/member.signatures.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/member.signatures.hbs rename to Assets/PluginDocTheme/partials/member.signatures.hbs diff --git a/Modules/PluginDocTheme/partials/member.sources.hbs b/Assets/PluginDocTheme/partials/member.sources.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/member.sources.hbs rename to Assets/PluginDocTheme/partials/member.sources.hbs diff --git a/Modules/PluginDocTheme/partials/members.group.hbs b/Assets/PluginDocTheme/partials/members.group.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/members.group.hbs rename to Assets/PluginDocTheme/partials/members.group.hbs diff --git a/Modules/PluginDocTheme/partials/members.hbs b/Assets/PluginDocTheme/partials/members.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/members.hbs rename to Assets/PluginDocTheme/partials/members.hbs diff --git a/Modules/PluginDocTheme/partials/navigation.hbs b/Assets/PluginDocTheme/partials/navigation.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/navigation.hbs rename to Assets/PluginDocTheme/partials/navigation.hbs diff --git a/Modules/PluginDocTheme/partials/parameter.hbs b/Assets/PluginDocTheme/partials/parameter.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/parameter.hbs rename to Assets/PluginDocTheme/partials/parameter.hbs diff --git a/Modules/PluginDocTheme/partials/toc.hbs b/Assets/PluginDocTheme/partials/toc.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/toc.hbs rename to Assets/PluginDocTheme/partials/toc.hbs diff --git a/Modules/PluginDocTheme/partials/toc.root.hbs b/Assets/PluginDocTheme/partials/toc.root.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/toc.root.hbs rename to Assets/PluginDocTheme/partials/toc.root.hbs diff --git a/Modules/PluginDocTheme/partials/type.hbs b/Assets/PluginDocTheme/partials/type.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/type.hbs rename to Assets/PluginDocTheme/partials/type.hbs diff --git a/Modules/PluginDocTheme/partials/typeAndParent.hbs b/Assets/PluginDocTheme/partials/typeAndParent.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/typeAndParent.hbs rename to Assets/PluginDocTheme/partials/typeAndParent.hbs diff --git a/Modules/PluginDocTheme/partials/typeParameters.hbs b/Assets/PluginDocTheme/partials/typeParameters.hbs similarity index 100% rename from Modules/PluginDocTheme/partials/typeParameters.hbs rename to Assets/PluginDocTheme/partials/typeParameters.hbs diff --git a/Modules/PluginDocTheme/templates/index.hbs b/Assets/PluginDocTheme/templates/index.hbs similarity index 100% rename from Modules/PluginDocTheme/templates/index.hbs rename to Assets/PluginDocTheme/templates/index.hbs diff --git a/Modules/PluginDocTheme/templates/reflection.hbs b/Assets/PluginDocTheme/templates/reflection.hbs similarity index 100% rename from Modules/PluginDocTheme/templates/reflection.hbs rename to Assets/PluginDocTheme/templates/reflection.hbs diff --git a/Assets/Screenshots/Screenshot_1511192805.png b/Assets/Screenshots/Screenshot_1511192805.png index 6c8d467f12..d9dd18b3f1 100644 Binary files a/Assets/Screenshots/Screenshot_1511192805.png and b/Assets/Screenshots/Screenshot_1511192805.png differ diff --git a/Modules/TinyMCE/IconPack/.gitignore b/Assets/TinyMCE/IconPack/.gitignore similarity index 100% rename from Modules/TinyMCE/IconPack/.gitignore rename to Assets/TinyMCE/IconPack/.gitignore diff --git a/Modules/TinyMCE/IconPack/IconDimensions.png b/Assets/TinyMCE/IconPack/IconDimensions.png similarity index 100% rename from Modules/TinyMCE/IconPack/IconDimensions.png rename to Assets/TinyMCE/IconPack/IconDimensions.png diff --git a/Modules/TinyMCE/IconPack/README.md b/Assets/TinyMCE/IconPack/README.md similarity index 100% rename from Modules/TinyMCE/IconPack/README.md rename to Assets/TinyMCE/IconPack/README.md diff --git a/Modules/TinyMCE/IconPack/gulpfile.js b/Assets/TinyMCE/IconPack/gulpfile.js similarity index 89% rename from Modules/TinyMCE/IconPack/gulpfile.js rename to Assets/TinyMCE/IconPack/gulpfile.js index 3d022cbaed..d27f31416f 100644 --- a/Modules/TinyMCE/IconPack/gulpfile.js +++ b/Assets/TinyMCE/IconPack/gulpfile.js @@ -13,7 +13,7 @@ gulp.task('icon-packager', function() { }); gulp.task('deploy', function() { - fs.copyFileSync(`${__dirname}/dist/icons/Joplin/icons.js`, `${__dirname}/../../../ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/icons.js`); + fs.copyFileSync(`${__dirname}/dist/icons/Joplin/icons.js`, `${__dirname}/../../../packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/icons.js`); return Promise.resolve(); }); diff --git a/Modules/TinyMCE/IconPack/package-lock.json b/Assets/TinyMCE/IconPack/package-lock.json similarity index 100% rename from Modules/TinyMCE/IconPack/package-lock.json rename to Assets/TinyMCE/IconPack/package-lock.json diff --git a/Modules/TinyMCE/IconPack/package.json b/Assets/TinyMCE/IconPack/package.json similarity index 100% rename from Modules/TinyMCE/IconPack/package.json rename to Assets/TinyMCE/IconPack/package.json diff --git a/Modules/TinyMCE/IconPack/postinstall.js b/Assets/TinyMCE/IconPack/postinstall.js similarity index 100% rename from Modules/TinyMCE/IconPack/postinstall.js rename to Assets/TinyMCE/IconPack/postinstall.js diff --git a/Modules/TinyMCE/IconPack/src/svg/paperclip.svg b/Assets/TinyMCE/IconPack/src/svg/paperclip.svg similarity index 100% rename from Modules/TinyMCE/IconPack/src/svg/paperclip.svg rename to Assets/TinyMCE/IconPack/src/svg/paperclip.svg diff --git a/Modules/TinyMCE/JoplinLists/.gitignore b/Assets/TinyMCE/JoplinLists/.gitignore similarity index 100% rename from Modules/TinyMCE/JoplinLists/.gitignore rename to Assets/TinyMCE/JoplinLists/.gitignore diff --git a/Modules/TinyMCE/JoplinLists/Gruntfile.js b/Assets/TinyMCE/JoplinLists/Gruntfile.js similarity index 96% rename from Modules/TinyMCE/JoplinLists/Gruntfile.js rename to Assets/TinyMCE/JoplinLists/Gruntfile.js index faf2d44afb..0dd79c8d0a 100644 --- a/Modules/TinyMCE/JoplinLists/Gruntfile.js +++ b/Assets/TinyMCE/JoplinLists/Gruntfile.js @@ -27,7 +27,7 @@ module.exports = function(grunt) { // }, shell: { - command: 'tsc', + command: 'tsc --project tsconfig.json', }, rollup: { @@ -125,7 +125,7 @@ module.exports = function(grunt) { // { src: ['changelog.txt'], dest: 'dist', expand: true }, { src: ['dist/joplinLists.js'], - dest: '../../../ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/plugins/lists.js', + dest: '../../../packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/plugins/lists.js', }, ], }, diff --git a/Modules/TinyMCE/JoplinLists/LICENSE.txt b/Assets/TinyMCE/JoplinLists/LICENSE.txt similarity index 100% rename from Modules/TinyMCE/JoplinLists/LICENSE.txt rename to Assets/TinyMCE/JoplinLists/LICENSE.txt diff --git a/Modules/TinyMCE/JoplinLists/README.md b/Assets/TinyMCE/JoplinLists/README.md similarity index 52% rename from Modules/TinyMCE/JoplinLists/README.md rename to Assets/TinyMCE/JoplinLists/README.md index 0017de4b2c..c6a3fe5c5b 100644 --- a/Modules/TinyMCE/JoplinLists/README.md +++ b/Assets/TinyMCE/JoplinLists/README.md @@ -1,11 +1,13 @@ # TinyMCE Joplin Lists Plugin +**As of 2020-11-02 this module no longer builds (a ton of TypeScript errors). No idea why since nothing was changed but should be investigated if modifying this plugin is ever needed.** + This is based on https://github.com/tinymce/tinymce/tree/59748a11303fb7cf00fdb8c9392dcb082ee9d965/modules/tinymce/src/plugins/lists But with support for Joplin checkboxes. ## Building -Use `npm i && npm run build` to build the plugin, which will also copy the compiled version to the right ElectronClient sub-directory. +Use `npm i && npm run build` to build the plugin, which will also copy the compiled version to the right packages/app-desktop sub-directory. To test the plugin, use `npm run buildAndStart`, which will build the plugin and start the desktop application. \ No newline at end of file diff --git a/Modules/TinyMCE/JoplinLists/global.d.ts b/Assets/TinyMCE/JoplinLists/global.d.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/global.d.ts rename to Assets/TinyMCE/JoplinLists/global.d.ts diff --git a/Modules/TinyMCE/JoplinLists/package.json b/Assets/TinyMCE/JoplinLists/package.json similarity index 97% rename from Modules/TinyMCE/JoplinLists/package.json rename to Assets/TinyMCE/JoplinLists/package.json index 3395d91a22..9aa18f26df 100644 --- a/Modules/TinyMCE/JoplinLists/package.json +++ b/Assets/TinyMCE/JoplinLists/package.json @@ -9,7 +9,7 @@ "test": "bedrock-auto -b phantomjs -d src/test/ts/", "test-manual": "bedrock -d src/test/ts/", "start": "grunt webpack", - "buildAndStart": "yarn build && cd .. && cd .. && cd .. && cd ElectronClient && npm start" + "buildAndStart": "yarn build && cd .. && cd .. && cd .. && cd packages/app-desktop && npm start" }, "keywords": [], "author": "Tiny Technologies Inc.", diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/Main.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/Main.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/Main.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/Main.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/Plugin.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/Plugin.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/Plugin.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/Plugin.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/actions/Indendation.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/actions/Indendation.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/actions/Indendation.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/actions/Indendation.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/actions/ToggleList.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/actions/ToggleList.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/actions/ToggleList.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/actions/ToggleList.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/api/Api.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/api/Api.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/api/Api.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/api/Api.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/api/Commands.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/api/Commands.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/api/Commands.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/api/Commands.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/api/Events.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/api/Events.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/api/Events.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/api/Events.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/api/Settings.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/api/Settings.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/api/Settings.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/api/Settings.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/core/Bookmark.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/core/Bookmark.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/core/Bookmark.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/core/Bookmark.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/core/Delete.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/core/Delete.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/core/Delete.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/core/Delete.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/core/DlIndentation.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/core/DlIndentation.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/core/DlIndentation.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/core/DlIndentation.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/core/Keyboard.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/core/Keyboard.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/core/Keyboard.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/core/Keyboard.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/core/ListAction.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/core/ListAction.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/core/ListAction.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/core/ListAction.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/core/NodeType.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/core/NodeType.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/core/NodeType.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/core/NodeType.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/core/NormalizeLists.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/core/NormalizeLists.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/core/NormalizeLists.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/core/NormalizeLists.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/core/Range.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/core/Range.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/core/Range.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/core/Range.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/core/Selection.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/core/Selection.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/core/Selection.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/core/Selection.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/core/SplitList.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/core/SplitList.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/core/SplitList.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/core/SplitList.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/core/TextBlock.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/core/TextBlock.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/core/TextBlock.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/core/TextBlock.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/core/Util.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/core/Util.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/core/Util.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/core/Util.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/listModel/ComposeList.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ComposeList.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/listModel/ComposeList.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ComposeList.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/listModel/Entry.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Entry.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/listModel/Entry.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Entry.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/listModel/Indentation.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Indentation.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/listModel/Indentation.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Indentation.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/listModel/JoplinListUtil.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/listModel/JoplinListUtil.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/listModel/JoplinListUtil.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/listModel/JoplinListUtil.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/listModel/ListsIndendation.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ListsIndendation.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/listModel/ListsIndendation.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ListsIndendation.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/listModel/NormalizeEntries.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/listModel/NormalizeEntries.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/listModel/NormalizeEntries.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/listModel/NormalizeEntries.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/listModel/ParseLists.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ParseLists.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/listModel/ParseLists.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/listModel/ParseLists.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/listModel/Util.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Util.ts similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/listModel/Util.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/listModel/Util.ts diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/tsconfig.json b/Assets/TinyMCE/JoplinLists/src/main/ts/tsconfig.json similarity index 100% rename from Modules/TinyMCE/JoplinLists/src/main/ts/tsconfig.json rename to Assets/TinyMCE/JoplinLists/src/main/ts/tsconfig.json diff --git a/Modules/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.ts b/Assets/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.ts similarity index 98% rename from Modules/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.ts rename to Assets/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.ts index d83afe5f1e..d152446db6 100644 --- a/Modules/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.ts +++ b/Assets/TinyMCE/JoplinLists/src/main/ts/ui/Buttons.ts @@ -48,7 +48,7 @@ const listState = function (editor: Editor, listName, options:any = {}) { // dependent on how the checkbox is styled, so if the style is changed, this might need // to be updated too. // For the styling, see: - // ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.ts + // packages/app-mobile/lib/joplin-renderer/MdToHtml/rules/checkbox.ts // // The previous solution was to use "pointer-event: none", which mostly work, however // it means that links are no longer clickable when they are within the checkbox label. diff --git a/Modules/TinyMCE/JoplinLists/tsconfig.json b/Assets/TinyMCE/JoplinLists/tsconfig.json similarity index 100% rename from Modules/TinyMCE/JoplinLists/tsconfig.json rename to Assets/TinyMCE/JoplinLists/tsconfig.json diff --git a/Modules/TinyMCE/JoplinLists/tslint.json b/Assets/TinyMCE/JoplinLists/tslint.json similarity index 100% rename from Modules/TinyMCE/JoplinLists/tslint.json rename to Assets/TinyMCE/JoplinLists/tslint.json diff --git a/Modules/TinyMCE/JoplinLists/yarn.lock b/Assets/TinyMCE/JoplinLists/yarn.lock similarity index 100% rename from Modules/TinyMCE/JoplinLists/yarn.lock rename to Assets/TinyMCE/JoplinLists/yarn.lock diff --git a/Modules/TinyMCE/langs/README.md b/Assets/TinyMCE/langs/README.md similarity index 100% rename from Modules/TinyMCE/langs/README.md rename to Assets/TinyMCE/langs/README.md diff --git a/Modules/TinyMCE/langs/ar.js b/Assets/TinyMCE/langs/ar.js similarity index 100% rename from Modules/TinyMCE/langs/ar.js rename to Assets/TinyMCE/langs/ar.js diff --git a/Modules/TinyMCE/langs/bg_BG.js b/Assets/TinyMCE/langs/bg_BG.js similarity index 100% rename from Modules/TinyMCE/langs/bg_BG.js rename to Assets/TinyMCE/langs/bg_BG.js diff --git a/Modules/TinyMCE/langs/ca.js b/Assets/TinyMCE/langs/ca.js similarity index 100% rename from Modules/TinyMCE/langs/ca.js rename to Assets/TinyMCE/langs/ca.js diff --git a/Modules/TinyMCE/langs/cs.js b/Assets/TinyMCE/langs/cs.js similarity index 100% rename from Modules/TinyMCE/langs/cs.js rename to Assets/TinyMCE/langs/cs.js diff --git a/Modules/TinyMCE/langs/cy.js b/Assets/TinyMCE/langs/cy.js similarity index 100% rename from Modules/TinyMCE/langs/cy.js rename to Assets/TinyMCE/langs/cy.js diff --git a/Modules/TinyMCE/langs/da.js b/Assets/TinyMCE/langs/da.js similarity index 100% rename from Modules/TinyMCE/langs/da.js rename to Assets/TinyMCE/langs/da.js diff --git a/Modules/TinyMCE/langs/de.js b/Assets/TinyMCE/langs/de.js similarity index 100% rename from Modules/TinyMCE/langs/de.js rename to Assets/TinyMCE/langs/de.js diff --git a/Modules/TinyMCE/langs/el.js b/Assets/TinyMCE/langs/el.js similarity index 100% rename from Modules/TinyMCE/langs/el.js rename to Assets/TinyMCE/langs/el.js diff --git a/Modules/TinyMCE/langs/eo.js b/Assets/TinyMCE/langs/eo.js similarity index 100% rename from Modules/TinyMCE/langs/eo.js rename to Assets/TinyMCE/langs/eo.js diff --git a/Modules/TinyMCE/langs/es.js b/Assets/TinyMCE/langs/es.js similarity index 100% rename from Modules/TinyMCE/langs/es.js rename to Assets/TinyMCE/langs/es.js diff --git a/Modules/TinyMCE/langs/es_ES.js b/Assets/TinyMCE/langs/es_ES.js similarity index 100% rename from Modules/TinyMCE/langs/es_ES.js rename to Assets/TinyMCE/langs/es_ES.js diff --git a/Modules/TinyMCE/langs/es_MX.js b/Assets/TinyMCE/langs/es_MX.js similarity index 100% rename from Modules/TinyMCE/langs/es_MX.js rename to Assets/TinyMCE/langs/es_MX.js diff --git a/Modules/TinyMCE/langs/eu.js b/Assets/TinyMCE/langs/eu.js similarity index 100% rename from Modules/TinyMCE/langs/eu.js rename to Assets/TinyMCE/langs/eu.js diff --git a/Modules/TinyMCE/langs/fa.js b/Assets/TinyMCE/langs/fa.js similarity index 100% rename from Modules/TinyMCE/langs/fa.js rename to Assets/TinyMCE/langs/fa.js diff --git a/Modules/TinyMCE/langs/fa_IR.js b/Assets/TinyMCE/langs/fa_IR.js similarity index 100% rename from Modules/TinyMCE/langs/fa_IR.js rename to Assets/TinyMCE/langs/fa_IR.js diff --git a/Modules/TinyMCE/langs/fi.js b/Assets/TinyMCE/langs/fi.js similarity index 100% rename from Modules/TinyMCE/langs/fi.js rename to Assets/TinyMCE/langs/fi.js diff --git a/Modules/TinyMCE/langs/fr_FR.js b/Assets/TinyMCE/langs/fr_FR.js similarity index 100% rename from Modules/TinyMCE/langs/fr_FR.js rename to Assets/TinyMCE/langs/fr_FR.js diff --git a/Modules/TinyMCE/langs/gl.js b/Assets/TinyMCE/langs/gl.js similarity index 100% rename from Modules/TinyMCE/langs/gl.js rename to Assets/TinyMCE/langs/gl.js diff --git a/Modules/TinyMCE/langs/he_IL.js b/Assets/TinyMCE/langs/he_IL.js similarity index 100% rename from Modules/TinyMCE/langs/he_IL.js rename to Assets/TinyMCE/langs/he_IL.js diff --git a/Modules/TinyMCE/langs/hr.js b/Assets/TinyMCE/langs/hr.js similarity index 100% rename from Modules/TinyMCE/langs/hr.js rename to Assets/TinyMCE/langs/hr.js diff --git a/Modules/TinyMCE/langs/hu_HU.js b/Assets/TinyMCE/langs/hu_HU.js similarity index 100% rename from Modules/TinyMCE/langs/hu_HU.js rename to Assets/TinyMCE/langs/hu_HU.js diff --git a/Modules/TinyMCE/langs/id.js b/Assets/TinyMCE/langs/id.js similarity index 100% rename from Modules/TinyMCE/langs/id.js rename to Assets/TinyMCE/langs/id.js diff --git a/Modules/TinyMCE/langs/it.js b/Assets/TinyMCE/langs/it.js similarity index 100% rename from Modules/TinyMCE/langs/it.js rename to Assets/TinyMCE/langs/it.js diff --git a/Modules/TinyMCE/langs/it_IT.js b/Assets/TinyMCE/langs/it_IT.js similarity index 100% rename from Modules/TinyMCE/langs/it_IT.js rename to Assets/TinyMCE/langs/it_IT.js diff --git a/Modules/TinyMCE/langs/ja.js b/Assets/TinyMCE/langs/ja.js similarity index 100% rename from Modules/TinyMCE/langs/ja.js rename to Assets/TinyMCE/langs/ja.js diff --git a/Modules/TinyMCE/langs/kk.js b/Assets/TinyMCE/langs/kk.js similarity index 100% rename from Modules/TinyMCE/langs/kk.js rename to Assets/TinyMCE/langs/kk.js diff --git a/Modules/TinyMCE/langs/ko_KR.js b/Assets/TinyMCE/langs/ko_KR.js similarity index 100% rename from Modules/TinyMCE/langs/ko_KR.js rename to Assets/TinyMCE/langs/ko_KR.js diff --git a/Modules/TinyMCE/langs/lt.js b/Assets/TinyMCE/langs/lt.js similarity index 100% rename from Modules/TinyMCE/langs/lt.js rename to Assets/TinyMCE/langs/lt.js diff --git a/Modules/TinyMCE/langs/nb_NO.js b/Assets/TinyMCE/langs/nb_NO.js similarity index 100% rename from Modules/TinyMCE/langs/nb_NO.js rename to Assets/TinyMCE/langs/nb_NO.js diff --git a/Modules/TinyMCE/langs/nl.js b/Assets/TinyMCE/langs/nl.js similarity index 100% rename from Modules/TinyMCE/langs/nl.js rename to Assets/TinyMCE/langs/nl.js diff --git a/Modules/TinyMCE/langs/pl.js b/Assets/TinyMCE/langs/pl.js similarity index 100% rename from Modules/TinyMCE/langs/pl.js rename to Assets/TinyMCE/langs/pl.js diff --git a/Modules/TinyMCE/langs/pt_BR.js b/Assets/TinyMCE/langs/pt_BR.js similarity index 100% rename from Modules/TinyMCE/langs/pt_BR.js rename to Assets/TinyMCE/langs/pt_BR.js diff --git a/Modules/TinyMCE/langs/pt_PT.js b/Assets/TinyMCE/langs/pt_PT.js similarity index 100% rename from Modules/TinyMCE/langs/pt_PT.js rename to Assets/TinyMCE/langs/pt_PT.js diff --git a/Modules/TinyMCE/langs/ro.js b/Assets/TinyMCE/langs/ro.js similarity index 100% rename from Modules/TinyMCE/langs/ro.js rename to Assets/TinyMCE/langs/ro.js diff --git a/Modules/TinyMCE/langs/ro_RO.js b/Assets/TinyMCE/langs/ro_RO.js similarity index 100% rename from Modules/TinyMCE/langs/ro_RO.js rename to Assets/TinyMCE/langs/ro_RO.js diff --git a/Modules/TinyMCE/langs/ru.js b/Assets/TinyMCE/langs/ru.js similarity index 100% rename from Modules/TinyMCE/langs/ru.js rename to Assets/TinyMCE/langs/ru.js diff --git a/Modules/TinyMCE/langs/sk.js b/Assets/TinyMCE/langs/sk.js similarity index 100% rename from Modules/TinyMCE/langs/sk.js rename to Assets/TinyMCE/langs/sk.js diff --git a/Modules/TinyMCE/langs/sl.js b/Assets/TinyMCE/langs/sl.js similarity index 100% rename from Modules/TinyMCE/langs/sl.js rename to Assets/TinyMCE/langs/sl.js diff --git a/Modules/TinyMCE/langs/sl_SI.js b/Assets/TinyMCE/langs/sl_SI.js similarity index 100% rename from Modules/TinyMCE/langs/sl_SI.js rename to Assets/TinyMCE/langs/sl_SI.js diff --git a/Modules/TinyMCE/langs/sv_SE.js b/Assets/TinyMCE/langs/sv_SE.js similarity index 100% rename from Modules/TinyMCE/langs/sv_SE.js rename to Assets/TinyMCE/langs/sv_SE.js diff --git a/Modules/TinyMCE/langs/ta.js b/Assets/TinyMCE/langs/ta.js similarity index 100% rename from Modules/TinyMCE/langs/ta.js rename to Assets/TinyMCE/langs/ta.js diff --git a/Modules/TinyMCE/langs/ta_IN.js b/Assets/TinyMCE/langs/ta_IN.js similarity index 100% rename from Modules/TinyMCE/langs/ta_IN.js rename to Assets/TinyMCE/langs/ta_IN.js diff --git a/Modules/TinyMCE/langs/th_TH.js b/Assets/TinyMCE/langs/th_TH.js similarity index 100% rename from Modules/TinyMCE/langs/th_TH.js rename to Assets/TinyMCE/langs/th_TH.js diff --git a/Modules/TinyMCE/langs/tr.js b/Assets/TinyMCE/langs/tr.js similarity index 100% rename from Modules/TinyMCE/langs/tr.js rename to Assets/TinyMCE/langs/tr.js diff --git a/Modules/TinyMCE/langs/tr_TR.js b/Assets/TinyMCE/langs/tr_TR.js similarity index 100% rename from Modules/TinyMCE/langs/tr_TR.js rename to Assets/TinyMCE/langs/tr_TR.js diff --git a/Modules/TinyMCE/langs/uk.js b/Assets/TinyMCE/langs/uk.js similarity index 100% rename from Modules/TinyMCE/langs/uk.js rename to Assets/TinyMCE/langs/uk.js diff --git a/Modules/TinyMCE/langs/vi.js b/Assets/TinyMCE/langs/vi.js similarity index 100% rename from Modules/TinyMCE/langs/vi.js rename to Assets/TinyMCE/langs/vi.js diff --git a/Modules/TinyMCE/langs/zh_CN.js b/Assets/TinyMCE/langs/zh_CN.js similarity index 100% rename from Modules/TinyMCE/langs/zh_CN.js rename to Assets/TinyMCE/langs/zh_CN.js diff --git a/Modules/TinyMCE/langs/zh_TW.js b/Assets/TinyMCE/langs/zh_TW.js similarity index 100% rename from Modules/TinyMCE/langs/zh_TW.js rename to Assets/TinyMCE/langs/zh_TW.js diff --git a/Modules/WebsiteAssets/CNAME b/Assets/WebsiteAssets/CNAME similarity index 100% rename from Modules/WebsiteAssets/CNAME rename to Assets/WebsiteAssets/CNAME diff --git a/Modules/WebsiteAssets/css/bootstrap.min.css b/Assets/WebsiteAssets/css/bootstrap.min.css similarity index 100% rename from Modules/WebsiteAssets/css/bootstrap.min.css rename to Assets/WebsiteAssets/css/bootstrap.min.css diff --git a/Modules/WebsiteAssets/css/font-awesome.min.css b/Assets/WebsiteAssets/css/font-awesome.min.css similarity index 100% rename from Modules/WebsiteAssets/css/font-awesome.min.css rename to Assets/WebsiteAssets/css/font-awesome.min.css diff --git a/Modules/WebsiteAssets/css/fontawesome-all.min.css b/Assets/WebsiteAssets/css/fontawesome-all.min.css similarity index 100% rename from Modules/WebsiteAssets/css/fontawesome-all.min.css rename to Assets/WebsiteAssets/css/fontawesome-all.min.css diff --git a/Modules/WebsiteAssets/css/fork-awesome.min.css b/Assets/WebsiteAssets/css/fork-awesome.min.css similarity index 100% rename from Modules/WebsiteAssets/css/fork-awesome.min.css rename to Assets/WebsiteAssets/css/fork-awesome.min.css diff --git a/Modules/WebsiteAssets/favicon.ico b/Assets/WebsiteAssets/favicon.ico similarity index 100% rename from Modules/WebsiteAssets/favicon.ico rename to Assets/WebsiteAssets/favicon.ico diff --git a/Modules/WebsiteAssets/fonts/forkawesome-webfont.eot b/Assets/WebsiteAssets/fonts/forkawesome-webfont.eot similarity index 100% rename from Modules/WebsiteAssets/fonts/forkawesome-webfont.eot rename to Assets/WebsiteAssets/fonts/forkawesome-webfont.eot diff --git a/Modules/WebsiteAssets/fonts/forkawesome-webfont.svg b/Assets/WebsiteAssets/fonts/forkawesome-webfont.svg similarity index 100% rename from Modules/WebsiteAssets/fonts/forkawesome-webfont.svg rename to Assets/WebsiteAssets/fonts/forkawesome-webfont.svg diff --git a/Modules/WebsiteAssets/fonts/forkawesome-webfont.ttf b/Assets/WebsiteAssets/fonts/forkawesome-webfont.ttf similarity index 100% rename from Modules/WebsiteAssets/fonts/forkawesome-webfont.ttf rename to Assets/WebsiteAssets/fonts/forkawesome-webfont.ttf diff --git a/Modules/WebsiteAssets/fonts/forkawesome-webfont.woff b/Assets/WebsiteAssets/fonts/forkawesome-webfont.woff similarity index 100% rename from Modules/WebsiteAssets/fonts/forkawesome-webfont.woff rename to Assets/WebsiteAssets/fonts/forkawesome-webfont.woff diff --git a/Modules/WebsiteAssets/fonts/forkawesome-webfont.woff2 b/Assets/WebsiteAssets/fonts/forkawesome-webfont.woff2 similarity index 100% rename from Modules/WebsiteAssets/fonts/forkawesome-webfont.woff2 rename to Assets/WebsiteAssets/fonts/forkawesome-webfont.woff2 diff --git a/Modules/WebsiteAssets/fonts/glyphicons-halflings-regular.eot b/Assets/WebsiteAssets/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from Modules/WebsiteAssets/fonts/glyphicons-halflings-regular.eot rename to Assets/WebsiteAssets/fonts/glyphicons-halflings-regular.eot diff --git a/Modules/WebsiteAssets/fonts/glyphicons-halflings-regular.svg b/Assets/WebsiteAssets/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from Modules/WebsiteAssets/fonts/glyphicons-halflings-regular.svg rename to Assets/WebsiteAssets/fonts/glyphicons-halflings-regular.svg diff --git a/Modules/WebsiteAssets/fonts/glyphicons-halflings-regular.ttf b/Assets/WebsiteAssets/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from Modules/WebsiteAssets/fonts/glyphicons-halflings-regular.ttf rename to Assets/WebsiteAssets/fonts/glyphicons-halflings-regular.ttf diff --git a/Modules/WebsiteAssets/fonts/glyphicons-halflings-regular.woff b/Assets/WebsiteAssets/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from Modules/WebsiteAssets/fonts/glyphicons-halflings-regular.woff rename to Assets/WebsiteAssets/fonts/glyphicons-halflings-regular.woff diff --git a/Modules/WebsiteAssets/fonts/glyphicons-halflings-regular.woff2 b/Assets/WebsiteAssets/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from Modules/WebsiteAssets/fonts/glyphicons-halflings-regular.woff2 rename to Assets/WebsiteAssets/fonts/glyphicons-halflings-regular.woff2 diff --git a/Modules/WebsiteAssets/images/AllClients.jpg b/Assets/WebsiteAssets/images/AllClients.jpg similarity index 100% rename from Modules/WebsiteAssets/images/AllClients.jpg rename to Assets/WebsiteAssets/images/AllClients.jpg diff --git a/Modules/WebsiteAssets/images/BadgeAndroid.png b/Assets/WebsiteAssets/images/BadgeAndroid.png similarity index 100% rename from Modules/WebsiteAssets/images/BadgeAndroid.png rename to Assets/WebsiteAssets/images/BadgeAndroid.png diff --git a/Modules/WebsiteAssets/images/BadgeIOS.png b/Assets/WebsiteAssets/images/BadgeIOS.png similarity index 100% rename from Modules/WebsiteAssets/images/BadgeIOS.png rename to Assets/WebsiteAssets/images/BadgeIOS.png diff --git a/Modules/WebsiteAssets/images/BadgeLinux.png b/Assets/WebsiteAssets/images/BadgeLinux.png similarity index 100% rename from Modules/WebsiteAssets/images/BadgeLinux.png rename to Assets/WebsiteAssets/images/BadgeLinux.png diff --git a/Modules/WebsiteAssets/images/BadgeMacOS.png b/Assets/WebsiteAssets/images/BadgeMacOS.png similarity index 100% rename from Modules/WebsiteAssets/images/BadgeMacOS.png rename to Assets/WebsiteAssets/images/BadgeMacOS.png diff --git a/Modules/WebsiteAssets/images/BadgeWindows.png b/Assets/WebsiteAssets/images/BadgeWindows.png similarity index 100% rename from Modules/WebsiteAssets/images/BadgeWindows.png rename to Assets/WebsiteAssets/images/BadgeWindows.png diff --git a/Modules/WebsiteAssets/images/BitcoinQr.png b/Assets/WebsiteAssets/images/BitcoinQr.png similarity index 100% rename from Modules/WebsiteAssets/images/BitcoinQr.png rename to Assets/WebsiteAssets/images/BitcoinQr.png diff --git a/Modules/WebsiteAssets/images/DemoDesktop.png b/Assets/WebsiteAssets/images/DemoDesktop.png similarity index 100% rename from Modules/WebsiteAssets/images/DemoDesktop.png rename to Assets/WebsiteAssets/images/DemoDesktop.png diff --git a/Modules/WebsiteAssets/images/ForkMe.png b/Assets/WebsiteAssets/images/ForkMe.png similarity index 100% rename from Modules/WebsiteAssets/images/ForkMe.png rename to Assets/WebsiteAssets/images/ForkMe.png diff --git a/Modules/WebsiteAssets/images/Icon512.png b/Assets/WebsiteAssets/images/Icon512.png similarity index 100% rename from Modules/WebsiteAssets/images/Icon512.png rename to Assets/WebsiteAssets/images/Icon512.png diff --git a/Modules/WebsiteAssets/images/Katex.png b/Assets/WebsiteAssets/images/Katex.png similarity index 100% rename from Modules/WebsiteAssets/images/Katex.png rename to Assets/WebsiteAssets/images/Katex.png diff --git a/Modules/WebsiteAssets/images/Katex_mhchem.png b/Assets/WebsiteAssets/images/Katex_mhchem.png similarity index 100% rename from Modules/WebsiteAssets/images/Katex_mhchem.png rename to Assets/WebsiteAssets/images/Katex_mhchem.png diff --git a/Modules/WebsiteAssets/images/Markdown_checkbox.jpg b/Assets/WebsiteAssets/images/Markdown_checkbox.jpg similarity index 100% rename from Modules/WebsiteAssets/images/Markdown_checkbox.jpg rename to Assets/WebsiteAssets/images/Markdown_checkbox.jpg diff --git a/Modules/WebsiteAssets/images/Mermaid.png b/Assets/WebsiteAssets/images/Mermaid.png similarity index 100% rename from Modules/WebsiteAssets/images/Mermaid.png rename to Assets/WebsiteAssets/images/Mermaid.png diff --git a/Modules/WebsiteAssets/images/Mobile.png b/Assets/WebsiteAssets/images/Mobile.png similarity index 100% rename from Modules/WebsiteAssets/images/Mobile.png rename to Assets/WebsiteAssets/images/Mobile.png diff --git a/Modules/WebsiteAssets/images/PayPalDonate.png b/Assets/WebsiteAssets/images/PayPalDonate.png similarity index 100% rename from Modules/WebsiteAssets/images/PayPalDonate.png rename to Assets/WebsiteAssets/images/PayPalDonate.png diff --git a/Modules/WebsiteAssets/images/Phone.png b/Assets/WebsiteAssets/images/Phone.png similarity index 100% rename from Modules/WebsiteAssets/images/Phone.png rename to Assets/WebsiteAssets/images/Phone.png diff --git a/Modules/WebsiteAssets/images/ScreenshotTerminal.png b/Assets/WebsiteAssets/images/ScreenshotTerminal.png similarity index 100% rename from Modules/WebsiteAssets/images/ScreenshotTerminal.png rename to Assets/WebsiteAssets/images/ScreenshotTerminal.png diff --git a/Modules/WebsiteAssets/images/ScreenshotTerminalCaptions.png b/Assets/WebsiteAssets/images/ScreenshotTerminalCaptions.png similarity index 100% rename from Modules/WebsiteAssets/images/ScreenshotTerminalCaptions.png rename to Assets/WebsiteAssets/images/ScreenshotTerminalCaptions.png diff --git a/Modules/WebsiteAssets/images/ShareFacebook.svg b/Assets/WebsiteAssets/images/ShareFacebook.svg similarity index 100% rename from Modules/WebsiteAssets/images/ShareFacebook.svg rename to Assets/WebsiteAssets/images/ShareFacebook.svg diff --git a/Modules/WebsiteAssets/images/ShareGithub.svg b/Assets/WebsiteAssets/images/ShareGithub.svg similarity index 100% rename from Modules/WebsiteAssets/images/ShareGithub.svg rename to Assets/WebsiteAssets/images/ShareGithub.svg diff --git a/Modules/WebsiteAssets/images/ShareTwitter.svg b/Assets/WebsiteAssets/images/ShareTwitter.svg similarity index 100% rename from Modules/WebsiteAssets/images/ShareTwitter.svg rename to Assets/WebsiteAssets/images/ShareTwitter.svg diff --git a/Modules/WebsiteAssets/images/SubNotebooks.png b/Assets/WebsiteAssets/images/SubNotebooks.png similarity index 100% rename from Modules/WebsiteAssets/images/SubNotebooks.png rename to Assets/WebsiteAssets/images/SubNotebooks.png diff --git a/Modules/WebsiteAssets/images/UrlCut.png b/Assets/WebsiteAssets/images/UrlCut.png similarity index 100% rename from Modules/WebsiteAssets/images/UrlCut.png rename to Assets/WebsiteAssets/images/UrlCut.png diff --git a/Modules/WebsiteAssets/images/UrlNoCut.png b/Assets/WebsiteAssets/images/UrlNoCut.png similarity index 100% rename from Modules/WebsiteAssets/images/UrlNoCut.png rename to Assets/WebsiteAssets/images/UrlNoCut.png diff --git a/Modules/WebsiteAssets/images/WebExtensionScreenshot.png b/Assets/WebsiteAssets/images/WebExtensionScreenshot.png similarity index 100% rename from Modules/WebsiteAssets/images/WebExtensionScreenshot.png rename to Assets/WebsiteAssets/images/WebExtensionScreenshot.png diff --git a/Modules/WebsiteAssets/images/badges/Donate-Bitcoin.svg b/Assets/WebsiteAssets/images/badges/Donate-Bitcoin.svg similarity index 100% rename from Modules/WebsiteAssets/images/badges/Donate-Bitcoin.svg rename to Assets/WebsiteAssets/images/badges/Donate-Bitcoin.svg diff --git a/Modules/WebsiteAssets/images/badges/Donate-PayPal-green.svg b/Assets/WebsiteAssets/images/badges/Donate-PayPal-green.svg similarity index 100% rename from Modules/WebsiteAssets/images/badges/Donate-PayPal-green.svg rename to Assets/WebsiteAssets/images/badges/Donate-PayPal-green.svg diff --git a/Modules/WebsiteAssets/images/badges/GitHub-Badge.svg b/Assets/WebsiteAssets/images/badges/GitHub-Badge.svg similarity index 100% rename from Modules/WebsiteAssets/images/badges/GitHub-Badge.svg rename to Assets/WebsiteAssets/images/badges/GitHub-Badge.svg diff --git a/Modules/WebsiteAssets/images/badges/Patreon-Badge.svg b/Assets/WebsiteAssets/images/badges/Patreon-Badge.svg similarity index 100% rename from Modules/WebsiteAssets/images/badges/Patreon-Badge.svg rename to Assets/WebsiteAssets/images/badges/Patreon-Badge.svg diff --git a/Modules/WebsiteAssets/images/badges/Patreon.png b/Assets/WebsiteAssets/images/badges/Patreon.png similarity index 100% rename from Modules/WebsiteAssets/images/badges/Patreon.png rename to Assets/WebsiteAssets/images/badges/Patreon.png diff --git a/Modules/WebsiteAssets/images/flags/README.md b/Assets/WebsiteAssets/images/flags/README.md similarity index 100% rename from Modules/WebsiteAssets/images/flags/README.md rename to Assets/WebsiteAssets/images/flags/README.md diff --git a/Modules/WebsiteAssets/images/flags/au/australian_capital_territory.png b/Assets/WebsiteAssets/images/flags/au/australian_capital_territory.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/au/australian_capital_territory.png rename to Assets/WebsiteAssets/images/flags/au/australian_capital_territory.png diff --git a/Modules/WebsiteAssets/images/flags/au/new_south_wales.png b/Assets/WebsiteAssets/images/flags/au/new_south_wales.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/au/new_south_wales.png rename to Assets/WebsiteAssets/images/flags/au/new_south_wales.png diff --git a/Modules/WebsiteAssets/images/flags/au/northern_territory.png b/Assets/WebsiteAssets/images/flags/au/northern_territory.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/au/northern_territory.png rename to Assets/WebsiteAssets/images/flags/au/northern_territory.png diff --git a/Modules/WebsiteAssets/images/flags/au/queensland.png b/Assets/WebsiteAssets/images/flags/au/queensland.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/au/queensland.png rename to Assets/WebsiteAssets/images/flags/au/queensland.png diff --git a/Modules/WebsiteAssets/images/flags/au/south_australia.png b/Assets/WebsiteAssets/images/flags/au/south_australia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/au/south_australia.png rename to Assets/WebsiteAssets/images/flags/au/south_australia.png diff --git a/Modules/WebsiteAssets/images/flags/au/tasmania.png b/Assets/WebsiteAssets/images/flags/au/tasmania.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/au/tasmania.png rename to Assets/WebsiteAssets/images/flags/au/tasmania.png diff --git a/Modules/WebsiteAssets/images/flags/au/victoria.png b/Assets/WebsiteAssets/images/flags/au/victoria.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/au/victoria.png rename to Assets/WebsiteAssets/images/flags/au/victoria.png diff --git a/Modules/WebsiteAssets/images/flags/au/western_australia.png b/Assets/WebsiteAssets/images/flags/au/western_australia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/au/western_australia.png rename to Assets/WebsiteAssets/images/flags/au/western_australia.png diff --git a/Modules/WebsiteAssets/images/flags/br/acre.png b/Assets/WebsiteAssets/images/flags/br/acre.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/acre.png rename to Assets/WebsiteAssets/images/flags/br/acre.png diff --git a/Modules/WebsiteAssets/images/flags/br/alagoas.png b/Assets/WebsiteAssets/images/flags/br/alagoas.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/alagoas.png rename to Assets/WebsiteAssets/images/flags/br/alagoas.png diff --git a/Modules/WebsiteAssets/images/flags/br/amapá.png b/Assets/WebsiteAssets/images/flags/br/amapá.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/amapá.png rename to Assets/WebsiteAssets/images/flags/br/amapá.png diff --git a/Modules/WebsiteAssets/images/flags/br/amazonas.png b/Assets/WebsiteAssets/images/flags/br/amazonas.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/amazonas.png rename to Assets/WebsiteAssets/images/flags/br/amazonas.png diff --git a/Modules/WebsiteAssets/images/flags/br/bahia.png b/Assets/WebsiteAssets/images/flags/br/bahia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/bahia.png rename to Assets/WebsiteAssets/images/flags/br/bahia.png diff --git a/Modules/WebsiteAssets/images/flags/br/ceará.png b/Assets/WebsiteAssets/images/flags/br/ceará.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/ceará.png rename to Assets/WebsiteAssets/images/flags/br/ceará.png diff --git a/Modules/WebsiteAssets/images/flags/br/distrito_federal.png b/Assets/WebsiteAssets/images/flags/br/distrito_federal.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/distrito_federal.png rename to Assets/WebsiteAssets/images/flags/br/distrito_federal.png diff --git a/Modules/WebsiteAssets/images/flags/br/espírito_santo.png b/Assets/WebsiteAssets/images/flags/br/espírito_santo.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/espírito_santo.png rename to Assets/WebsiteAssets/images/flags/br/espírito_santo.png diff --git a/Modules/WebsiteAssets/images/flags/br/goiás.png b/Assets/WebsiteAssets/images/flags/br/goiás.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/goiás.png rename to Assets/WebsiteAssets/images/flags/br/goiás.png diff --git a/Modules/WebsiteAssets/images/flags/br/maranhão.png b/Assets/WebsiteAssets/images/flags/br/maranhão.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/maranhão.png rename to Assets/WebsiteAssets/images/flags/br/maranhão.png diff --git a/Modules/WebsiteAssets/images/flags/br/mato_grosso.png b/Assets/WebsiteAssets/images/flags/br/mato_grosso.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/mato_grosso.png rename to Assets/WebsiteAssets/images/flags/br/mato_grosso.png diff --git a/Modules/WebsiteAssets/images/flags/br/mato_grosso_do_sul.png b/Assets/WebsiteAssets/images/flags/br/mato_grosso_do_sul.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/mato_grosso_do_sul.png rename to Assets/WebsiteAssets/images/flags/br/mato_grosso_do_sul.png diff --git a/Modules/WebsiteAssets/images/flags/br/minas_gerais.png b/Assets/WebsiteAssets/images/flags/br/minas_gerais.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/minas_gerais.png rename to Assets/WebsiteAssets/images/flags/br/minas_gerais.png diff --git a/Modules/WebsiteAssets/images/flags/br/paraná.png b/Assets/WebsiteAssets/images/flags/br/paraná.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/paraná.png rename to Assets/WebsiteAssets/images/flags/br/paraná.png diff --git a/Modules/WebsiteAssets/images/flags/br/paraíba.png b/Assets/WebsiteAssets/images/flags/br/paraíba.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/paraíba.png rename to Assets/WebsiteAssets/images/flags/br/paraíba.png diff --git a/Modules/WebsiteAssets/images/flags/br/pará.png b/Assets/WebsiteAssets/images/flags/br/pará.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/pará.png rename to Assets/WebsiteAssets/images/flags/br/pará.png diff --git a/Modules/WebsiteAssets/images/flags/br/pernambuco.png b/Assets/WebsiteAssets/images/flags/br/pernambuco.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/pernambuco.png rename to Assets/WebsiteAssets/images/flags/br/pernambuco.png diff --git a/Modules/WebsiteAssets/images/flags/br/piauí.png b/Assets/WebsiteAssets/images/flags/br/piauí.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/piauí.png rename to Assets/WebsiteAssets/images/flags/br/piauí.png diff --git a/Modules/WebsiteAssets/images/flags/br/rio_de_janeiro.png b/Assets/WebsiteAssets/images/flags/br/rio_de_janeiro.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/rio_de_janeiro.png rename to Assets/WebsiteAssets/images/flags/br/rio_de_janeiro.png diff --git a/Modules/WebsiteAssets/images/flags/br/rio_grande_do_norte.png b/Assets/WebsiteAssets/images/flags/br/rio_grande_do_norte.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/rio_grande_do_norte.png rename to Assets/WebsiteAssets/images/flags/br/rio_grande_do_norte.png diff --git a/Modules/WebsiteAssets/images/flags/br/rio_grande_do_sul.png b/Assets/WebsiteAssets/images/flags/br/rio_grande_do_sul.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/rio_grande_do_sul.png rename to Assets/WebsiteAssets/images/flags/br/rio_grande_do_sul.png diff --git a/Modules/WebsiteAssets/images/flags/br/rondônia.png b/Assets/WebsiteAssets/images/flags/br/rondônia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/rondônia.png rename to Assets/WebsiteAssets/images/flags/br/rondônia.png diff --git a/Modules/WebsiteAssets/images/flags/br/roraima.png b/Assets/WebsiteAssets/images/flags/br/roraima.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/roraima.png rename to Assets/WebsiteAssets/images/flags/br/roraima.png diff --git a/Modules/WebsiteAssets/images/flags/br/santa_catarina.png b/Assets/WebsiteAssets/images/flags/br/santa_catarina.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/santa_catarina.png rename to Assets/WebsiteAssets/images/flags/br/santa_catarina.png diff --git a/Modules/WebsiteAssets/images/flags/br/sergipe.png b/Assets/WebsiteAssets/images/flags/br/sergipe.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/sergipe.png rename to Assets/WebsiteAssets/images/flags/br/sergipe.png diff --git a/Modules/WebsiteAssets/images/flags/br/são_paulo.png b/Assets/WebsiteAssets/images/flags/br/são_paulo.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/são_paulo.png rename to Assets/WebsiteAssets/images/flags/br/são_paulo.png diff --git a/Modules/WebsiteAssets/images/flags/br/tocantins.png b/Assets/WebsiteAssets/images/flags/br/tocantins.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/br/tocantins.png rename to Assets/WebsiteAssets/images/flags/br/tocantins.png diff --git a/Modules/WebsiteAssets/images/flags/ca/alberta.png b/Assets/WebsiteAssets/images/flags/ca/alberta.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ca/alberta.png rename to Assets/WebsiteAssets/images/flags/ca/alberta.png diff --git a/Modules/WebsiteAssets/images/flags/ca/british_columbia.png b/Assets/WebsiteAssets/images/flags/ca/british_columbia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ca/british_columbia.png rename to Assets/WebsiteAssets/images/flags/ca/british_columbia.png diff --git a/Modules/WebsiteAssets/images/flags/ca/manitoba.png b/Assets/WebsiteAssets/images/flags/ca/manitoba.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ca/manitoba.png rename to Assets/WebsiteAssets/images/flags/ca/manitoba.png diff --git a/Modules/WebsiteAssets/images/flags/ca/new_brunswick.png b/Assets/WebsiteAssets/images/flags/ca/new_brunswick.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ca/new_brunswick.png rename to Assets/WebsiteAssets/images/flags/ca/new_brunswick.png diff --git a/Modules/WebsiteAssets/images/flags/ca/newfoundland_and_labrador.png b/Assets/WebsiteAssets/images/flags/ca/newfoundland_and_labrador.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ca/newfoundland_and_labrador.png rename to Assets/WebsiteAssets/images/flags/ca/newfoundland_and_labrador.png diff --git a/Modules/WebsiteAssets/images/flags/ca/northwest_territories.png b/Assets/WebsiteAssets/images/flags/ca/northwest_territories.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ca/northwest_territories.png rename to Assets/WebsiteAssets/images/flags/ca/northwest_territories.png diff --git a/Modules/WebsiteAssets/images/flags/ca/nova_scotia.png b/Assets/WebsiteAssets/images/flags/ca/nova_scotia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ca/nova_scotia.png rename to Assets/WebsiteAssets/images/flags/ca/nova_scotia.png diff --git a/Modules/WebsiteAssets/images/flags/ca/nunavut.png b/Assets/WebsiteAssets/images/flags/ca/nunavut.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ca/nunavut.png rename to Assets/WebsiteAssets/images/flags/ca/nunavut.png diff --git a/Modules/WebsiteAssets/images/flags/ca/ontario.png b/Assets/WebsiteAssets/images/flags/ca/ontario.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ca/ontario.png rename to Assets/WebsiteAssets/images/flags/ca/ontario.png diff --git a/Modules/WebsiteAssets/images/flags/ca/prince_edward_island.png b/Assets/WebsiteAssets/images/flags/ca/prince_edward_island.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ca/prince_edward_island.png rename to Assets/WebsiteAssets/images/flags/ca/prince_edward_island.png diff --git a/Modules/WebsiteAssets/images/flags/ca/québec.png b/Assets/WebsiteAssets/images/flags/ca/québec.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ca/québec.png rename to Assets/WebsiteAssets/images/flags/ca/québec.png diff --git a/Modules/WebsiteAssets/images/flags/ca/saskatchewan.png b/Assets/WebsiteAssets/images/flags/ca/saskatchewan.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ca/saskatchewan.png rename to Assets/WebsiteAssets/images/flags/ca/saskatchewan.png diff --git a/Modules/WebsiteAssets/images/flags/ca/yukon.png b/Assets/WebsiteAssets/images/flags/ca/yukon.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ca/yukon.png rename to Assets/WebsiteAssets/images/flags/ca/yukon.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ab.png b/Assets/WebsiteAssets/images/flags/country-4x3/ab.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ab.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ab.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ad.png b/Assets/WebsiteAssets/images/flags/country-4x3/ad.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ad.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ad.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ae.png b/Assets/WebsiteAssets/images/flags/country-4x3/ae.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ae.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ae.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/af.png b/Assets/WebsiteAssets/images/flags/country-4x3/af.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/af.png rename to Assets/WebsiteAssets/images/flags/country-4x3/af.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ag.png b/Assets/WebsiteAssets/images/flags/country-4x3/ag.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ag.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ag.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ai.png b/Assets/WebsiteAssets/images/flags/country-4x3/ai.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ai.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ai.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/al.png b/Assets/WebsiteAssets/images/flags/country-4x3/al.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/al.png rename to Assets/WebsiteAssets/images/flags/country-4x3/al.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/am.png b/Assets/WebsiteAssets/images/flags/country-4x3/am.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/am.png rename to Assets/WebsiteAssets/images/flags/country-4x3/am.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/an.png b/Assets/WebsiteAssets/images/flags/country-4x3/an.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/an.png rename to Assets/WebsiteAssets/images/flags/country-4x3/an.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ao.png b/Assets/WebsiteAssets/images/flags/country-4x3/ao.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ao.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ao.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/aq.png b/Assets/WebsiteAssets/images/flags/country-4x3/aq.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/aq.png rename to Assets/WebsiteAssets/images/flags/country-4x3/aq.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ar.png b/Assets/WebsiteAssets/images/flags/country-4x3/ar.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ar.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ar.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/arableague.png b/Assets/WebsiteAssets/images/flags/country-4x3/arableague.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/arableague.png rename to Assets/WebsiteAssets/images/flags/country-4x3/arableague.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/as.png b/Assets/WebsiteAssets/images/flags/country-4x3/as.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/as.png rename to Assets/WebsiteAssets/images/flags/country-4x3/as.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/at.png b/Assets/WebsiteAssets/images/flags/country-4x3/at.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/at.png rename to Assets/WebsiteAssets/images/flags/country-4x3/at.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/au.png b/Assets/WebsiteAssets/images/flags/country-4x3/au.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/au.png rename to Assets/WebsiteAssets/images/flags/country-4x3/au.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/aw.png b/Assets/WebsiteAssets/images/flags/country-4x3/aw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/aw.png rename to Assets/WebsiteAssets/images/flags/country-4x3/aw.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ax.png b/Assets/WebsiteAssets/images/flags/country-4x3/ax.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ax.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ax.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/az.png b/Assets/WebsiteAssets/images/flags/country-4x3/az.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/az.png rename to Assets/WebsiteAssets/images/flags/country-4x3/az.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ba.png b/Assets/WebsiteAssets/images/flags/country-4x3/ba.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ba.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ba.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bb.png b/Assets/WebsiteAssets/images/flags/country-4x3/bb.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bb.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bb.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bd.png b/Assets/WebsiteAssets/images/flags/country-4x3/bd.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bd.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bd.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/be.png b/Assets/WebsiteAssets/images/flags/country-4x3/be.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/be.png rename to Assets/WebsiteAssets/images/flags/country-4x3/be.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bf.png b/Assets/WebsiteAssets/images/flags/country-4x3/bf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bf.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bf.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bg.png b/Assets/WebsiteAssets/images/flags/country-4x3/bg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bg.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bg.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bh.png b/Assets/WebsiteAssets/images/flags/country-4x3/bh.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bh.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bh.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bi.png b/Assets/WebsiteAssets/images/flags/country-4x3/bi.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bi.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bi.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bj.png b/Assets/WebsiteAssets/images/flags/country-4x3/bj.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bj.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bj.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bl.png b/Assets/WebsiteAssets/images/flags/country-4x3/bl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bl.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bl.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bm.png b/Assets/WebsiteAssets/images/flags/country-4x3/bm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bm.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bm.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bn.png b/Assets/WebsiteAssets/images/flags/country-4x3/bn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bn.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bn.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bo.png b/Assets/WebsiteAssets/images/flags/country-4x3/bo.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bo.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bo.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bq.png b/Assets/WebsiteAssets/images/flags/country-4x3/bq.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bq.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bq.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/br.png b/Assets/WebsiteAssets/images/flags/country-4x3/br.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/br.png rename to Assets/WebsiteAssets/images/flags/country-4x3/br.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bs.png b/Assets/WebsiteAssets/images/flags/country-4x3/bs.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bs.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bs.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bt.png b/Assets/WebsiteAssets/images/flags/country-4x3/bt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bt.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bt.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bv.png b/Assets/WebsiteAssets/images/flags/country-4x3/bv.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bv.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bv.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bw.png b/Assets/WebsiteAssets/images/flags/country-4x3/bw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bw.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bw.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/by.png b/Assets/WebsiteAssets/images/flags/country-4x3/by.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/by.png rename to Assets/WebsiteAssets/images/flags/country-4x3/by.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/bz.png b/Assets/WebsiteAssets/images/flags/country-4x3/bz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/bz.png rename to Assets/WebsiteAssets/images/flags/country-4x3/bz.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ca.png b/Assets/WebsiteAssets/images/flags/country-4x3/ca.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ca.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ca.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cc.png b/Assets/WebsiteAssets/images/flags/country-4x3/cc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cc.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cc.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cd.png b/Assets/WebsiteAssets/images/flags/country-4x3/cd.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cd.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cd.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cf.png b/Assets/WebsiteAssets/images/flags/country-4x3/cf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cf.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cf.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cg.png b/Assets/WebsiteAssets/images/flags/country-4x3/cg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cg.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cg.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ch.png b/Assets/WebsiteAssets/images/flags/country-4x3/ch.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ch.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ch.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ci.png b/Assets/WebsiteAssets/images/flags/country-4x3/ci.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ci.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ci.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ck.png b/Assets/WebsiteAssets/images/flags/country-4x3/ck.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ck.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ck.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cl.png b/Assets/WebsiteAssets/images/flags/country-4x3/cl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cl.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cl.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cm.png b/Assets/WebsiteAssets/images/flags/country-4x3/cm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cm.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cm.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cn.png b/Assets/WebsiteAssets/images/flags/country-4x3/cn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cn.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cn.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/co.png b/Assets/WebsiteAssets/images/flags/country-4x3/co.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/co.png rename to Assets/WebsiteAssets/images/flags/country-4x3/co.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cr.png b/Assets/WebsiteAssets/images/flags/country-4x3/cr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cr.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cr.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cs.png b/Assets/WebsiteAssets/images/flags/country-4x3/cs.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cs.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cs.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cu.png b/Assets/WebsiteAssets/images/flags/country-4x3/cu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cu.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cu.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cv.png b/Assets/WebsiteAssets/images/flags/country-4x3/cv.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cv.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cv.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cw.png b/Assets/WebsiteAssets/images/flags/country-4x3/cw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cw.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cw.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cx.png b/Assets/WebsiteAssets/images/flags/country-4x3/cx.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cx.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cx.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cy.png b/Assets/WebsiteAssets/images/flags/country-4x3/cy.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cy.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cy.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/cz.png b/Assets/WebsiteAssets/images/flags/country-4x3/cz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/cz.png rename to Assets/WebsiteAssets/images/flags/country-4x3/cz.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/de.png b/Assets/WebsiteAssets/images/flags/country-4x3/de.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/de.png rename to Assets/WebsiteAssets/images/flags/country-4x3/de.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/dj.png b/Assets/WebsiteAssets/images/flags/country-4x3/dj.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/dj.png rename to Assets/WebsiteAssets/images/flags/country-4x3/dj.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/dk.png b/Assets/WebsiteAssets/images/flags/country-4x3/dk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/dk.png rename to Assets/WebsiteAssets/images/flags/country-4x3/dk.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/dm.png b/Assets/WebsiteAssets/images/flags/country-4x3/dm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/dm.png rename to Assets/WebsiteAssets/images/flags/country-4x3/dm.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/do.png b/Assets/WebsiteAssets/images/flags/country-4x3/do.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/do.png rename to Assets/WebsiteAssets/images/flags/country-4x3/do.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/dz.png b/Assets/WebsiteAssets/images/flags/country-4x3/dz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/dz.png rename to Assets/WebsiteAssets/images/flags/country-4x3/dz.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ec.png b/Assets/WebsiteAssets/images/flags/country-4x3/ec.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ec.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ec.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ee.png b/Assets/WebsiteAssets/images/flags/country-4x3/ee.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ee.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ee.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/eg.png b/Assets/WebsiteAssets/images/flags/country-4x3/eg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/eg.png rename to Assets/WebsiteAssets/images/flags/country-4x3/eg.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/eh.png b/Assets/WebsiteAssets/images/flags/country-4x3/eh.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/eh.png rename to Assets/WebsiteAssets/images/flags/country-4x3/eh.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/england.png b/Assets/WebsiteAssets/images/flags/country-4x3/england.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/england.png rename to Assets/WebsiteAssets/images/flags/country-4x3/england.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/er.png b/Assets/WebsiteAssets/images/flags/country-4x3/er.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/er.png rename to Assets/WebsiteAssets/images/flags/country-4x3/er.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/es.png b/Assets/WebsiteAssets/images/flags/country-4x3/es.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/es.png rename to Assets/WebsiteAssets/images/flags/country-4x3/es.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/et.png b/Assets/WebsiteAssets/images/flags/country-4x3/et.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/et.png rename to Assets/WebsiteAssets/images/flags/country-4x3/et.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/europeanunion.png b/Assets/WebsiteAssets/images/flags/country-4x3/europeanunion.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/europeanunion.png rename to Assets/WebsiteAssets/images/flags/country-4x3/europeanunion.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/fam.png b/Assets/WebsiteAssets/images/flags/country-4x3/fam.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/fam.png rename to Assets/WebsiteAssets/images/flags/country-4x3/fam.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/fi.png b/Assets/WebsiteAssets/images/flags/country-4x3/fi.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/fi.png rename to Assets/WebsiteAssets/images/flags/country-4x3/fi.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/fj.png b/Assets/WebsiteAssets/images/flags/country-4x3/fj.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/fj.png rename to Assets/WebsiteAssets/images/flags/country-4x3/fj.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/fk.png b/Assets/WebsiteAssets/images/flags/country-4x3/fk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/fk.png rename to Assets/WebsiteAssets/images/flags/country-4x3/fk.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/fm.png b/Assets/WebsiteAssets/images/flags/country-4x3/fm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/fm.png rename to Assets/WebsiteAssets/images/flags/country-4x3/fm.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/fo.png b/Assets/WebsiteAssets/images/flags/country-4x3/fo.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/fo.png rename to Assets/WebsiteAssets/images/flags/country-4x3/fo.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/fr.png b/Assets/WebsiteAssets/images/flags/country-4x3/fr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/fr.png rename to Assets/WebsiteAssets/images/flags/country-4x3/fr.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ga.png b/Assets/WebsiteAssets/images/flags/country-4x3/ga.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ga.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ga.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gb.png b/Assets/WebsiteAssets/images/flags/country-4x3/gb.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gb.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gb.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gd.png b/Assets/WebsiteAssets/images/flags/country-4x3/gd.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gd.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gd.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ge.png b/Assets/WebsiteAssets/images/flags/country-4x3/ge.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ge.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ge.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gf.png b/Assets/WebsiteAssets/images/flags/country-4x3/gf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gf.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gf.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gg.png b/Assets/WebsiteAssets/images/flags/country-4x3/gg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gg.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gg.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gh.png b/Assets/WebsiteAssets/images/flags/country-4x3/gh.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gh.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gh.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gi.png b/Assets/WebsiteAssets/images/flags/country-4x3/gi.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gi.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gi.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gl.png b/Assets/WebsiteAssets/images/flags/country-4x3/gl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gl.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gl.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gm.png b/Assets/WebsiteAssets/images/flags/country-4x3/gm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gm.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gm.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gn.png b/Assets/WebsiteAssets/images/flags/country-4x3/gn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gn.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gn.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gp.png b/Assets/WebsiteAssets/images/flags/country-4x3/gp.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gp.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gp.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gq.png b/Assets/WebsiteAssets/images/flags/country-4x3/gq.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gq.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gq.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gr.png b/Assets/WebsiteAssets/images/flags/country-4x3/gr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gr.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gr.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gs.png b/Assets/WebsiteAssets/images/flags/country-4x3/gs.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gs.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gs.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gt.png b/Assets/WebsiteAssets/images/flags/country-4x3/gt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gt.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gt.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gu.png b/Assets/WebsiteAssets/images/flags/country-4x3/gu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gu.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gu.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gw.png b/Assets/WebsiteAssets/images/flags/country-4x3/gw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gw.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gw.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/gy.png b/Assets/WebsiteAssets/images/flags/country-4x3/gy.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/gy.png rename to Assets/WebsiteAssets/images/flags/country-4x3/gy.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/hk.png b/Assets/WebsiteAssets/images/flags/country-4x3/hk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/hk.png rename to Assets/WebsiteAssets/images/flags/country-4x3/hk.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/hm.png b/Assets/WebsiteAssets/images/flags/country-4x3/hm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/hm.png rename to Assets/WebsiteAssets/images/flags/country-4x3/hm.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/hn.png b/Assets/WebsiteAssets/images/flags/country-4x3/hn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/hn.png rename to Assets/WebsiteAssets/images/flags/country-4x3/hn.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/hr.png b/Assets/WebsiteAssets/images/flags/country-4x3/hr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/hr.png rename to Assets/WebsiteAssets/images/flags/country-4x3/hr.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ht.png b/Assets/WebsiteAssets/images/flags/country-4x3/ht.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ht.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ht.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/hu.png b/Assets/WebsiteAssets/images/flags/country-4x3/hu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/hu.png rename to Assets/WebsiteAssets/images/flags/country-4x3/hu.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/id.png b/Assets/WebsiteAssets/images/flags/country-4x3/id.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/id.png rename to Assets/WebsiteAssets/images/flags/country-4x3/id.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ie.png b/Assets/WebsiteAssets/images/flags/country-4x3/ie.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ie.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ie.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/il.png b/Assets/WebsiteAssets/images/flags/country-4x3/il.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/il.png rename to Assets/WebsiteAssets/images/flags/country-4x3/il.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/im.png b/Assets/WebsiteAssets/images/flags/country-4x3/im.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/im.png rename to Assets/WebsiteAssets/images/flags/country-4x3/im.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/in.png b/Assets/WebsiteAssets/images/flags/country-4x3/in.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/in.png rename to Assets/WebsiteAssets/images/flags/country-4x3/in.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/io.png b/Assets/WebsiteAssets/images/flags/country-4x3/io.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/io.png rename to Assets/WebsiteAssets/images/flags/country-4x3/io.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/iq.png b/Assets/WebsiteAssets/images/flags/country-4x3/iq.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/iq.png rename to Assets/WebsiteAssets/images/flags/country-4x3/iq.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ir.png b/Assets/WebsiteAssets/images/flags/country-4x3/ir.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ir.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ir.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/is.png b/Assets/WebsiteAssets/images/flags/country-4x3/is.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/is.png rename to Assets/WebsiteAssets/images/flags/country-4x3/is.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/it.png b/Assets/WebsiteAssets/images/flags/country-4x3/it.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/it.png rename to Assets/WebsiteAssets/images/flags/country-4x3/it.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/je.png b/Assets/WebsiteAssets/images/flags/country-4x3/je.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/je.png rename to Assets/WebsiteAssets/images/flags/country-4x3/je.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/jm.png b/Assets/WebsiteAssets/images/flags/country-4x3/jm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/jm.png rename to Assets/WebsiteAssets/images/flags/country-4x3/jm.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/jo.png b/Assets/WebsiteAssets/images/flags/country-4x3/jo.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/jo.png rename to Assets/WebsiteAssets/images/flags/country-4x3/jo.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/jp.png b/Assets/WebsiteAssets/images/flags/country-4x3/jp.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/jp.png rename to Assets/WebsiteAssets/images/flags/country-4x3/jp.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ke.png b/Assets/WebsiteAssets/images/flags/country-4x3/ke.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ke.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ke.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/kg.png b/Assets/WebsiteAssets/images/flags/country-4x3/kg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/kg.png rename to Assets/WebsiteAssets/images/flags/country-4x3/kg.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/kh.png b/Assets/WebsiteAssets/images/flags/country-4x3/kh.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/kh.png rename to Assets/WebsiteAssets/images/flags/country-4x3/kh.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ki.png b/Assets/WebsiteAssets/images/flags/country-4x3/ki.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ki.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ki.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/km.png b/Assets/WebsiteAssets/images/flags/country-4x3/km.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/km.png rename to Assets/WebsiteAssets/images/flags/country-4x3/km.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/kn.png b/Assets/WebsiteAssets/images/flags/country-4x3/kn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/kn.png rename to Assets/WebsiteAssets/images/flags/country-4x3/kn.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/kp.png b/Assets/WebsiteAssets/images/flags/country-4x3/kp.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/kp.png rename to Assets/WebsiteAssets/images/flags/country-4x3/kp.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/kr.png b/Assets/WebsiteAssets/images/flags/country-4x3/kr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/kr.png rename to Assets/WebsiteAssets/images/flags/country-4x3/kr.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/kw.png b/Assets/WebsiteAssets/images/flags/country-4x3/kw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/kw.png rename to Assets/WebsiteAssets/images/flags/country-4x3/kw.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ky.png b/Assets/WebsiteAssets/images/flags/country-4x3/ky.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ky.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ky.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/kz.png b/Assets/WebsiteAssets/images/flags/country-4x3/kz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/kz.png rename to Assets/WebsiteAssets/images/flags/country-4x3/kz.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/la.png b/Assets/WebsiteAssets/images/flags/country-4x3/la.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/la.png rename to Assets/WebsiteAssets/images/flags/country-4x3/la.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/lb.png b/Assets/WebsiteAssets/images/flags/country-4x3/lb.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/lb.png rename to Assets/WebsiteAssets/images/flags/country-4x3/lb.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/lc.png b/Assets/WebsiteAssets/images/flags/country-4x3/lc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/lc.png rename to Assets/WebsiteAssets/images/flags/country-4x3/lc.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/li.png b/Assets/WebsiteAssets/images/flags/country-4x3/li.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/li.png rename to Assets/WebsiteAssets/images/flags/country-4x3/li.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/lk.png b/Assets/WebsiteAssets/images/flags/country-4x3/lk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/lk.png rename to Assets/WebsiteAssets/images/flags/country-4x3/lk.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/lr.png b/Assets/WebsiteAssets/images/flags/country-4x3/lr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/lr.png rename to Assets/WebsiteAssets/images/flags/country-4x3/lr.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ls.png b/Assets/WebsiteAssets/images/flags/country-4x3/ls.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ls.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ls.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/lt.png b/Assets/WebsiteAssets/images/flags/country-4x3/lt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/lt.png rename to Assets/WebsiteAssets/images/flags/country-4x3/lt.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/lu.png b/Assets/WebsiteAssets/images/flags/country-4x3/lu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/lu.png rename to Assets/WebsiteAssets/images/flags/country-4x3/lu.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/lv.png b/Assets/WebsiteAssets/images/flags/country-4x3/lv.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/lv.png rename to Assets/WebsiteAssets/images/flags/country-4x3/lv.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ly.png b/Assets/WebsiteAssets/images/flags/country-4x3/ly.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ly.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ly.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ma.png b/Assets/WebsiteAssets/images/flags/country-4x3/ma.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ma.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ma.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mc.png b/Assets/WebsiteAssets/images/flags/country-4x3/mc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mc.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mc.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/md.png b/Assets/WebsiteAssets/images/flags/country-4x3/md.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/md.png rename to Assets/WebsiteAssets/images/flags/country-4x3/md.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/me.png b/Assets/WebsiteAssets/images/flags/country-4x3/me.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/me.png rename to Assets/WebsiteAssets/images/flags/country-4x3/me.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mf.png b/Assets/WebsiteAssets/images/flags/country-4x3/mf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mf.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mf.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mg.png b/Assets/WebsiteAssets/images/flags/country-4x3/mg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mg.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mg.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mh.png b/Assets/WebsiteAssets/images/flags/country-4x3/mh.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mh.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mh.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mk.png b/Assets/WebsiteAssets/images/flags/country-4x3/mk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mk.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mk.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ml.png b/Assets/WebsiteAssets/images/flags/country-4x3/ml.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ml.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ml.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mm.png b/Assets/WebsiteAssets/images/flags/country-4x3/mm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mm.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mm.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mn.png b/Assets/WebsiteAssets/images/flags/country-4x3/mn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mn.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mn.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mo.png b/Assets/WebsiteAssets/images/flags/country-4x3/mo.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mo.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mo.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mp.png b/Assets/WebsiteAssets/images/flags/country-4x3/mp.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mp.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mp.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mq.png b/Assets/WebsiteAssets/images/flags/country-4x3/mq.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mq.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mq.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mr.png b/Assets/WebsiteAssets/images/flags/country-4x3/mr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mr.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mr.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ms.png b/Assets/WebsiteAssets/images/flags/country-4x3/ms.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ms.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ms.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mt.png b/Assets/WebsiteAssets/images/flags/country-4x3/mt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mt.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mt.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mu.png b/Assets/WebsiteAssets/images/flags/country-4x3/mu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mu.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mu.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mv.png b/Assets/WebsiteAssets/images/flags/country-4x3/mv.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mv.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mv.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mw.png b/Assets/WebsiteAssets/images/flags/country-4x3/mw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mw.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mw.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mx.png b/Assets/WebsiteAssets/images/flags/country-4x3/mx.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mx.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mx.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/my.png b/Assets/WebsiteAssets/images/flags/country-4x3/my.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/my.png rename to Assets/WebsiteAssets/images/flags/country-4x3/my.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/mz.png b/Assets/WebsiteAssets/images/flags/country-4x3/mz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/mz.png rename to Assets/WebsiteAssets/images/flags/country-4x3/mz.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/na.png b/Assets/WebsiteAssets/images/flags/country-4x3/na.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/na.png rename to Assets/WebsiteAssets/images/flags/country-4x3/na.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/nc.png b/Assets/WebsiteAssets/images/flags/country-4x3/nc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/nc.png rename to Assets/WebsiteAssets/images/flags/country-4x3/nc.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ne.png b/Assets/WebsiteAssets/images/flags/country-4x3/ne.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ne.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ne.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/nf.png b/Assets/WebsiteAssets/images/flags/country-4x3/nf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/nf.png rename to Assets/WebsiteAssets/images/flags/country-4x3/nf.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ng.png b/Assets/WebsiteAssets/images/flags/country-4x3/ng.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ng.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ng.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ni.png b/Assets/WebsiteAssets/images/flags/country-4x3/ni.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ni.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ni.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/nl.png b/Assets/WebsiteAssets/images/flags/country-4x3/nl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/nl.png rename to Assets/WebsiteAssets/images/flags/country-4x3/nl.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/no.png b/Assets/WebsiteAssets/images/flags/country-4x3/no.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/no.png rename to Assets/WebsiteAssets/images/flags/country-4x3/no.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/northerncyprus.png b/Assets/WebsiteAssets/images/flags/country-4x3/northerncyprus.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/northerncyprus.png rename to Assets/WebsiteAssets/images/flags/country-4x3/northerncyprus.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/np.png b/Assets/WebsiteAssets/images/flags/country-4x3/np.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/np.png rename to Assets/WebsiteAssets/images/flags/country-4x3/np.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/nr.png b/Assets/WebsiteAssets/images/flags/country-4x3/nr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/nr.png rename to Assets/WebsiteAssets/images/flags/country-4x3/nr.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/nu.png b/Assets/WebsiteAssets/images/flags/country-4x3/nu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/nu.png rename to Assets/WebsiteAssets/images/flags/country-4x3/nu.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/nz.png b/Assets/WebsiteAssets/images/flags/country-4x3/nz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/nz.png rename to Assets/WebsiteAssets/images/flags/country-4x3/nz.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/om.png b/Assets/WebsiteAssets/images/flags/country-4x3/om.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/om.png rename to Assets/WebsiteAssets/images/flags/country-4x3/om.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/pa.png b/Assets/WebsiteAssets/images/flags/country-4x3/pa.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/pa.png rename to Assets/WebsiteAssets/images/flags/country-4x3/pa.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/pe.png b/Assets/WebsiteAssets/images/flags/country-4x3/pe.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/pe.png rename to Assets/WebsiteAssets/images/flags/country-4x3/pe.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/pf.png b/Assets/WebsiteAssets/images/flags/country-4x3/pf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/pf.png rename to Assets/WebsiteAssets/images/flags/country-4x3/pf.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/pg.png b/Assets/WebsiteAssets/images/flags/country-4x3/pg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/pg.png rename to Assets/WebsiteAssets/images/flags/country-4x3/pg.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ph.png b/Assets/WebsiteAssets/images/flags/country-4x3/ph.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ph.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ph.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/pk.png b/Assets/WebsiteAssets/images/flags/country-4x3/pk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/pk.png rename to Assets/WebsiteAssets/images/flags/country-4x3/pk.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/pl.png b/Assets/WebsiteAssets/images/flags/country-4x3/pl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/pl.png rename to Assets/WebsiteAssets/images/flags/country-4x3/pl.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/pm.png b/Assets/WebsiteAssets/images/flags/country-4x3/pm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/pm.png rename to Assets/WebsiteAssets/images/flags/country-4x3/pm.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/pn.png b/Assets/WebsiteAssets/images/flags/country-4x3/pn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/pn.png rename to Assets/WebsiteAssets/images/flags/country-4x3/pn.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/pr.png b/Assets/WebsiteAssets/images/flags/country-4x3/pr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/pr.png rename to Assets/WebsiteAssets/images/flags/country-4x3/pr.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ps.png b/Assets/WebsiteAssets/images/flags/country-4x3/ps.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ps.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ps.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/pt.png b/Assets/WebsiteAssets/images/flags/country-4x3/pt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/pt.png rename to Assets/WebsiteAssets/images/flags/country-4x3/pt.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/pw.png b/Assets/WebsiteAssets/images/flags/country-4x3/pw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/pw.png rename to Assets/WebsiteAssets/images/flags/country-4x3/pw.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/py.png b/Assets/WebsiteAssets/images/flags/country-4x3/py.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/py.png rename to Assets/WebsiteAssets/images/flags/country-4x3/py.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/qa.png b/Assets/WebsiteAssets/images/flags/country-4x3/qa.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/qa.png rename to Assets/WebsiteAssets/images/flags/country-4x3/qa.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/re.png b/Assets/WebsiteAssets/images/flags/country-4x3/re.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/re.png rename to Assets/WebsiteAssets/images/flags/country-4x3/re.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/readme.txt b/Assets/WebsiteAssets/images/flags/country-4x3/readme.txt similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/readme.txt rename to Assets/WebsiteAssets/images/flags/country-4x3/readme.txt diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ro.png b/Assets/WebsiteAssets/images/flags/country-4x3/ro.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ro.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ro.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/rs.png b/Assets/WebsiteAssets/images/flags/country-4x3/rs.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/rs.png rename to Assets/WebsiteAssets/images/flags/country-4x3/rs.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ru.png b/Assets/WebsiteAssets/images/flags/country-4x3/ru.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ru.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ru.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/rw.png b/Assets/WebsiteAssets/images/flags/country-4x3/rw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/rw.png rename to Assets/WebsiteAssets/images/flags/country-4x3/rw.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sa.png b/Assets/WebsiteAssets/images/flags/country-4x3/sa.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sa.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sa.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sb.png b/Assets/WebsiteAssets/images/flags/country-4x3/sb.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sb.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sb.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sc.png b/Assets/WebsiteAssets/images/flags/country-4x3/sc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sc.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sc.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/scotland.png b/Assets/WebsiteAssets/images/flags/country-4x3/scotland.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/scotland.png rename to Assets/WebsiteAssets/images/flags/country-4x3/scotland.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sd.png b/Assets/WebsiteAssets/images/flags/country-4x3/sd.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sd.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sd.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/se.png b/Assets/WebsiteAssets/images/flags/country-4x3/se.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/se.png rename to Assets/WebsiteAssets/images/flags/country-4x3/se.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sg.png b/Assets/WebsiteAssets/images/flags/country-4x3/sg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sg.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sg.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sh.png b/Assets/WebsiteAssets/images/flags/country-4x3/sh.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sh.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sh.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/si.png b/Assets/WebsiteAssets/images/flags/country-4x3/si.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/si.png rename to Assets/WebsiteAssets/images/flags/country-4x3/si.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sj.png b/Assets/WebsiteAssets/images/flags/country-4x3/sj.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sj.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sj.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sk.png b/Assets/WebsiteAssets/images/flags/country-4x3/sk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sk.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sk.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sl.png b/Assets/WebsiteAssets/images/flags/country-4x3/sl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sl.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sl.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sm.png b/Assets/WebsiteAssets/images/flags/country-4x3/sm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sm.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sm.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sn.png b/Assets/WebsiteAssets/images/flags/country-4x3/sn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sn.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sn.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/so.png b/Assets/WebsiteAssets/images/flags/country-4x3/so.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/so.png rename to Assets/WebsiteAssets/images/flags/country-4x3/so.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/southossetia.png b/Assets/WebsiteAssets/images/flags/country-4x3/southossetia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/southossetia.png rename to Assets/WebsiteAssets/images/flags/country-4x3/southossetia.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sr.png b/Assets/WebsiteAssets/images/flags/country-4x3/sr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sr.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sr.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ss.png b/Assets/WebsiteAssets/images/flags/country-4x3/ss.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ss.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ss.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/st.png b/Assets/WebsiteAssets/images/flags/country-4x3/st.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/st.png rename to Assets/WebsiteAssets/images/flags/country-4x3/st.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sv.png b/Assets/WebsiteAssets/images/flags/country-4x3/sv.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sv.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sv.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sx.png b/Assets/WebsiteAssets/images/flags/country-4x3/sx.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sx.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sx.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sy.png b/Assets/WebsiteAssets/images/flags/country-4x3/sy.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sy.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sy.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/sz.png b/Assets/WebsiteAssets/images/flags/country-4x3/sz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/sz.png rename to Assets/WebsiteAssets/images/flags/country-4x3/sz.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/tc.png b/Assets/WebsiteAssets/images/flags/country-4x3/tc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/tc.png rename to Assets/WebsiteAssets/images/flags/country-4x3/tc.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/td.png b/Assets/WebsiteAssets/images/flags/country-4x3/td.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/td.png rename to Assets/WebsiteAssets/images/flags/country-4x3/td.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/tf.png b/Assets/WebsiteAssets/images/flags/country-4x3/tf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/tf.png rename to Assets/WebsiteAssets/images/flags/country-4x3/tf.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/tg.png b/Assets/WebsiteAssets/images/flags/country-4x3/tg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/tg.png rename to Assets/WebsiteAssets/images/flags/country-4x3/tg.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/th.png b/Assets/WebsiteAssets/images/flags/country-4x3/th.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/th.png rename to Assets/WebsiteAssets/images/flags/country-4x3/th.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/tj.png b/Assets/WebsiteAssets/images/flags/country-4x3/tj.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/tj.png rename to Assets/WebsiteAssets/images/flags/country-4x3/tj.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/tk.png b/Assets/WebsiteAssets/images/flags/country-4x3/tk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/tk.png rename to Assets/WebsiteAssets/images/flags/country-4x3/tk.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/tl.png b/Assets/WebsiteAssets/images/flags/country-4x3/tl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/tl.png rename to Assets/WebsiteAssets/images/flags/country-4x3/tl.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/tm.png b/Assets/WebsiteAssets/images/flags/country-4x3/tm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/tm.png rename to Assets/WebsiteAssets/images/flags/country-4x3/tm.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/tn.png b/Assets/WebsiteAssets/images/flags/country-4x3/tn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/tn.png rename to Assets/WebsiteAssets/images/flags/country-4x3/tn.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/to.png b/Assets/WebsiteAssets/images/flags/country-4x3/to.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/to.png rename to Assets/WebsiteAssets/images/flags/country-4x3/to.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/tr.png b/Assets/WebsiteAssets/images/flags/country-4x3/tr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/tr.png rename to Assets/WebsiteAssets/images/flags/country-4x3/tr.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/tt.png b/Assets/WebsiteAssets/images/flags/country-4x3/tt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/tt.png rename to Assets/WebsiteAssets/images/flags/country-4x3/tt.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/tv.png b/Assets/WebsiteAssets/images/flags/country-4x3/tv.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/tv.png rename to Assets/WebsiteAssets/images/flags/country-4x3/tv.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/tw.png b/Assets/WebsiteAssets/images/flags/country-4x3/tw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/tw.png rename to Assets/WebsiteAssets/images/flags/country-4x3/tw.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/tz.png b/Assets/WebsiteAssets/images/flags/country-4x3/tz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/tz.png rename to Assets/WebsiteAssets/images/flags/country-4x3/tz.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ua.png b/Assets/WebsiteAssets/images/flags/country-4x3/ua.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ua.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ua.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ug.png b/Assets/WebsiteAssets/images/flags/country-4x3/ug.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ug.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ug.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/um.png b/Assets/WebsiteAssets/images/flags/country-4x3/um.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/um.png rename to Assets/WebsiteAssets/images/flags/country-4x3/um.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/unitednations.png b/Assets/WebsiteAssets/images/flags/country-4x3/unitednations.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/unitednations.png rename to Assets/WebsiteAssets/images/flags/country-4x3/unitednations.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/us.png b/Assets/WebsiteAssets/images/flags/country-4x3/us.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/us.png rename to Assets/WebsiteAssets/images/flags/country-4x3/us.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/uy.png b/Assets/WebsiteAssets/images/flags/country-4x3/uy.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/uy.png rename to Assets/WebsiteAssets/images/flags/country-4x3/uy.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/uz.png b/Assets/WebsiteAssets/images/flags/country-4x3/uz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/uz.png rename to Assets/WebsiteAssets/images/flags/country-4x3/uz.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/va.png b/Assets/WebsiteAssets/images/flags/country-4x3/va.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/va.png rename to Assets/WebsiteAssets/images/flags/country-4x3/va.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/vc.png b/Assets/WebsiteAssets/images/flags/country-4x3/vc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/vc.png rename to Assets/WebsiteAssets/images/flags/country-4x3/vc.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ve.png b/Assets/WebsiteAssets/images/flags/country-4x3/ve.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ve.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ve.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/vg.png b/Assets/WebsiteAssets/images/flags/country-4x3/vg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/vg.png rename to Assets/WebsiteAssets/images/flags/country-4x3/vg.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/vi.png b/Assets/WebsiteAssets/images/flags/country-4x3/vi.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/vi.png rename to Assets/WebsiteAssets/images/flags/country-4x3/vi.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/vn.png b/Assets/WebsiteAssets/images/flags/country-4x3/vn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/vn.png rename to Assets/WebsiteAssets/images/flags/country-4x3/vn.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/vu.png b/Assets/WebsiteAssets/images/flags/country-4x3/vu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/vu.png rename to Assets/WebsiteAssets/images/flags/country-4x3/vu.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/wales.png b/Assets/WebsiteAssets/images/flags/country-4x3/wales.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/wales.png rename to Assets/WebsiteAssets/images/flags/country-4x3/wales.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/wf.png b/Assets/WebsiteAssets/images/flags/country-4x3/wf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/wf.png rename to Assets/WebsiteAssets/images/flags/country-4x3/wf.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ws.png b/Assets/WebsiteAssets/images/flags/country-4x3/ws.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ws.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ws.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/xk.png b/Assets/WebsiteAssets/images/flags/country-4x3/xk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/xk.png rename to Assets/WebsiteAssets/images/flags/country-4x3/xk.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/ye.png b/Assets/WebsiteAssets/images/flags/country-4x3/ye.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/ye.png rename to Assets/WebsiteAssets/images/flags/country-4x3/ye.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/yt.png b/Assets/WebsiteAssets/images/flags/country-4x3/yt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/yt.png rename to Assets/WebsiteAssets/images/flags/country-4x3/yt.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/za.png b/Assets/WebsiteAssets/images/flags/country-4x3/za.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/za.png rename to Assets/WebsiteAssets/images/flags/country-4x3/za.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/zm.png b/Assets/WebsiteAssets/images/flags/country-4x3/zm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/zm.png rename to Assets/WebsiteAssets/images/flags/country-4x3/zm.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/zw.png b/Assets/WebsiteAssets/images/flags/country-4x3/zw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/zw.png rename to Assets/WebsiteAssets/images/flags/country-4x3/zw.png diff --git a/Modules/WebsiteAssets/images/flags/country-4x3/zz.png b/Assets/WebsiteAssets/images/flags/country-4x3/zz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-4x3/zz.png rename to Assets/WebsiteAssets/images/flags/country-4x3/zz.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ad.png b/Assets/WebsiteAssets/images/flags/country-squared/ad.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ad.png rename to Assets/WebsiteAssets/images/flags/country-squared/ad.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ae.png b/Assets/WebsiteAssets/images/flags/country-squared/ae.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ae.png rename to Assets/WebsiteAssets/images/flags/country-squared/ae.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/af.png b/Assets/WebsiteAssets/images/flags/country-squared/af.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/af.png rename to Assets/WebsiteAssets/images/flags/country-squared/af.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ag.png b/Assets/WebsiteAssets/images/flags/country-squared/ag.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ag.png rename to Assets/WebsiteAssets/images/flags/country-squared/ag.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ai.png b/Assets/WebsiteAssets/images/flags/country-squared/ai.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ai.png rename to Assets/WebsiteAssets/images/flags/country-squared/ai.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/al.png b/Assets/WebsiteAssets/images/flags/country-squared/al.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/al.png rename to Assets/WebsiteAssets/images/flags/country-squared/al.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/am.png b/Assets/WebsiteAssets/images/flags/country-squared/am.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/am.png rename to Assets/WebsiteAssets/images/flags/country-squared/am.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ao.png b/Assets/WebsiteAssets/images/flags/country-squared/ao.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ao.png rename to Assets/WebsiteAssets/images/flags/country-squared/ao.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/aq.png b/Assets/WebsiteAssets/images/flags/country-squared/aq.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/aq.png rename to Assets/WebsiteAssets/images/flags/country-squared/aq.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ar.png b/Assets/WebsiteAssets/images/flags/country-squared/ar.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ar.png rename to Assets/WebsiteAssets/images/flags/country-squared/ar.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/as.png b/Assets/WebsiteAssets/images/flags/country-squared/as.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/as.png rename to Assets/WebsiteAssets/images/flags/country-squared/as.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/at.png b/Assets/WebsiteAssets/images/flags/country-squared/at.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/at.png rename to Assets/WebsiteAssets/images/flags/country-squared/at.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/au.png b/Assets/WebsiteAssets/images/flags/country-squared/au.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/au.png rename to Assets/WebsiteAssets/images/flags/country-squared/au.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/aw.png b/Assets/WebsiteAssets/images/flags/country-squared/aw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/aw.png rename to Assets/WebsiteAssets/images/flags/country-squared/aw.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ax.png b/Assets/WebsiteAssets/images/flags/country-squared/ax.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ax.png rename to Assets/WebsiteAssets/images/flags/country-squared/ax.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/az.png b/Assets/WebsiteAssets/images/flags/country-squared/az.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/az.png rename to Assets/WebsiteAssets/images/flags/country-squared/az.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ba.png b/Assets/WebsiteAssets/images/flags/country-squared/ba.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ba.png rename to Assets/WebsiteAssets/images/flags/country-squared/ba.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bb.png b/Assets/WebsiteAssets/images/flags/country-squared/bb.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bb.png rename to Assets/WebsiteAssets/images/flags/country-squared/bb.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bd.png b/Assets/WebsiteAssets/images/flags/country-squared/bd.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bd.png rename to Assets/WebsiteAssets/images/flags/country-squared/bd.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/be.png b/Assets/WebsiteAssets/images/flags/country-squared/be.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/be.png rename to Assets/WebsiteAssets/images/flags/country-squared/be.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bf.png b/Assets/WebsiteAssets/images/flags/country-squared/bf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bf.png rename to Assets/WebsiteAssets/images/flags/country-squared/bf.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bg.png b/Assets/WebsiteAssets/images/flags/country-squared/bg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bg.png rename to Assets/WebsiteAssets/images/flags/country-squared/bg.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bh.png b/Assets/WebsiteAssets/images/flags/country-squared/bh.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bh.png rename to Assets/WebsiteAssets/images/flags/country-squared/bh.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bi.png b/Assets/WebsiteAssets/images/flags/country-squared/bi.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bi.png rename to Assets/WebsiteAssets/images/flags/country-squared/bi.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bj.png b/Assets/WebsiteAssets/images/flags/country-squared/bj.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bj.png rename to Assets/WebsiteAssets/images/flags/country-squared/bj.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bl.png b/Assets/WebsiteAssets/images/flags/country-squared/bl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bl.png rename to Assets/WebsiteAssets/images/flags/country-squared/bl.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bm.png b/Assets/WebsiteAssets/images/flags/country-squared/bm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bm.png rename to Assets/WebsiteAssets/images/flags/country-squared/bm.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bn.png b/Assets/WebsiteAssets/images/flags/country-squared/bn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bn.png rename to Assets/WebsiteAssets/images/flags/country-squared/bn.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bo.png b/Assets/WebsiteAssets/images/flags/country-squared/bo.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bo.png rename to Assets/WebsiteAssets/images/flags/country-squared/bo.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bq.png b/Assets/WebsiteAssets/images/flags/country-squared/bq.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bq.png rename to Assets/WebsiteAssets/images/flags/country-squared/bq.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/br.png b/Assets/WebsiteAssets/images/flags/country-squared/br.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/br.png rename to Assets/WebsiteAssets/images/flags/country-squared/br.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bs.png b/Assets/WebsiteAssets/images/flags/country-squared/bs.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bs.png rename to Assets/WebsiteAssets/images/flags/country-squared/bs.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bt.png b/Assets/WebsiteAssets/images/flags/country-squared/bt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bt.png rename to Assets/WebsiteAssets/images/flags/country-squared/bt.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bv.png b/Assets/WebsiteAssets/images/flags/country-squared/bv.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bv.png rename to Assets/WebsiteAssets/images/flags/country-squared/bv.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bw.png b/Assets/WebsiteAssets/images/flags/country-squared/bw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bw.png rename to Assets/WebsiteAssets/images/flags/country-squared/bw.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/by.png b/Assets/WebsiteAssets/images/flags/country-squared/by.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/by.png rename to Assets/WebsiteAssets/images/flags/country-squared/by.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/bz.png b/Assets/WebsiteAssets/images/flags/country-squared/bz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/bz.png rename to Assets/WebsiteAssets/images/flags/country-squared/bz.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ca.png b/Assets/WebsiteAssets/images/flags/country-squared/ca.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ca.png rename to Assets/WebsiteAssets/images/flags/country-squared/ca.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cc.png b/Assets/WebsiteAssets/images/flags/country-squared/cc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cc.png rename to Assets/WebsiteAssets/images/flags/country-squared/cc.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cd.png b/Assets/WebsiteAssets/images/flags/country-squared/cd.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cd.png rename to Assets/WebsiteAssets/images/flags/country-squared/cd.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cf.png b/Assets/WebsiteAssets/images/flags/country-squared/cf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cf.png rename to Assets/WebsiteAssets/images/flags/country-squared/cf.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cg.png b/Assets/WebsiteAssets/images/flags/country-squared/cg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cg.png rename to Assets/WebsiteAssets/images/flags/country-squared/cg.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ch.png b/Assets/WebsiteAssets/images/flags/country-squared/ch.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ch.png rename to Assets/WebsiteAssets/images/flags/country-squared/ch.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ci.png b/Assets/WebsiteAssets/images/flags/country-squared/ci.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ci.png rename to Assets/WebsiteAssets/images/flags/country-squared/ci.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ck.png b/Assets/WebsiteAssets/images/flags/country-squared/ck.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ck.png rename to Assets/WebsiteAssets/images/flags/country-squared/ck.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cl.png b/Assets/WebsiteAssets/images/flags/country-squared/cl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cl.png rename to Assets/WebsiteAssets/images/flags/country-squared/cl.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cm.png b/Assets/WebsiteAssets/images/flags/country-squared/cm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cm.png rename to Assets/WebsiteAssets/images/flags/country-squared/cm.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cn.png b/Assets/WebsiteAssets/images/flags/country-squared/cn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cn.png rename to Assets/WebsiteAssets/images/flags/country-squared/cn.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/co.png b/Assets/WebsiteAssets/images/flags/country-squared/co.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/co.png rename to Assets/WebsiteAssets/images/flags/country-squared/co.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cr.png b/Assets/WebsiteAssets/images/flags/country-squared/cr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cr.png rename to Assets/WebsiteAssets/images/flags/country-squared/cr.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cu.png b/Assets/WebsiteAssets/images/flags/country-squared/cu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cu.png rename to Assets/WebsiteAssets/images/flags/country-squared/cu.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cv.png b/Assets/WebsiteAssets/images/flags/country-squared/cv.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cv.png rename to Assets/WebsiteAssets/images/flags/country-squared/cv.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cw.png b/Assets/WebsiteAssets/images/flags/country-squared/cw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cw.png rename to Assets/WebsiteAssets/images/flags/country-squared/cw.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cx.png b/Assets/WebsiteAssets/images/flags/country-squared/cx.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cx.png rename to Assets/WebsiteAssets/images/flags/country-squared/cx.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cy.png b/Assets/WebsiteAssets/images/flags/country-squared/cy.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cy.png rename to Assets/WebsiteAssets/images/flags/country-squared/cy.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/cz.png b/Assets/WebsiteAssets/images/flags/country-squared/cz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/cz.png rename to Assets/WebsiteAssets/images/flags/country-squared/cz.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/de.png b/Assets/WebsiteAssets/images/flags/country-squared/de.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/de.png rename to Assets/WebsiteAssets/images/flags/country-squared/de.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/dj.png b/Assets/WebsiteAssets/images/flags/country-squared/dj.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/dj.png rename to Assets/WebsiteAssets/images/flags/country-squared/dj.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/dk.png b/Assets/WebsiteAssets/images/flags/country-squared/dk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/dk.png rename to Assets/WebsiteAssets/images/flags/country-squared/dk.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/dm.png b/Assets/WebsiteAssets/images/flags/country-squared/dm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/dm.png rename to Assets/WebsiteAssets/images/flags/country-squared/dm.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/do.png b/Assets/WebsiteAssets/images/flags/country-squared/do.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/do.png rename to Assets/WebsiteAssets/images/flags/country-squared/do.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/dz.png b/Assets/WebsiteAssets/images/flags/country-squared/dz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/dz.png rename to Assets/WebsiteAssets/images/flags/country-squared/dz.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ec.png b/Assets/WebsiteAssets/images/flags/country-squared/ec.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ec.png rename to Assets/WebsiteAssets/images/flags/country-squared/ec.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ee.png b/Assets/WebsiteAssets/images/flags/country-squared/ee.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ee.png rename to Assets/WebsiteAssets/images/flags/country-squared/ee.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/eg.png b/Assets/WebsiteAssets/images/flags/country-squared/eg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/eg.png rename to Assets/WebsiteAssets/images/flags/country-squared/eg.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/eh.png b/Assets/WebsiteAssets/images/flags/country-squared/eh.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/eh.png rename to Assets/WebsiteAssets/images/flags/country-squared/eh.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/er.png b/Assets/WebsiteAssets/images/flags/country-squared/er.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/er.png rename to Assets/WebsiteAssets/images/flags/country-squared/er.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/es.png b/Assets/WebsiteAssets/images/flags/country-squared/es.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/es.png rename to Assets/WebsiteAssets/images/flags/country-squared/es.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/et.png b/Assets/WebsiteAssets/images/flags/country-squared/et.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/et.png rename to Assets/WebsiteAssets/images/flags/country-squared/et.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/fi.png b/Assets/WebsiteAssets/images/flags/country-squared/fi.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/fi.png rename to Assets/WebsiteAssets/images/flags/country-squared/fi.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/fj.png b/Assets/WebsiteAssets/images/flags/country-squared/fj.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/fj.png rename to Assets/WebsiteAssets/images/flags/country-squared/fj.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/fk.png b/Assets/WebsiteAssets/images/flags/country-squared/fk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/fk.png rename to Assets/WebsiteAssets/images/flags/country-squared/fk.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/fm.png b/Assets/WebsiteAssets/images/flags/country-squared/fm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/fm.png rename to Assets/WebsiteAssets/images/flags/country-squared/fm.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/fo.png b/Assets/WebsiteAssets/images/flags/country-squared/fo.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/fo.png rename to Assets/WebsiteAssets/images/flags/country-squared/fo.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/fr.png b/Assets/WebsiteAssets/images/flags/country-squared/fr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/fr.png rename to Assets/WebsiteAssets/images/flags/country-squared/fr.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ga.png b/Assets/WebsiteAssets/images/flags/country-squared/ga.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ga.png rename to Assets/WebsiteAssets/images/flags/country-squared/ga.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gb.png b/Assets/WebsiteAssets/images/flags/country-squared/gb.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gb.png rename to Assets/WebsiteAssets/images/flags/country-squared/gb.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gd.png b/Assets/WebsiteAssets/images/flags/country-squared/gd.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gd.png rename to Assets/WebsiteAssets/images/flags/country-squared/gd.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ge.png b/Assets/WebsiteAssets/images/flags/country-squared/ge.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ge.png rename to Assets/WebsiteAssets/images/flags/country-squared/ge.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gf.png b/Assets/WebsiteAssets/images/flags/country-squared/gf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gf.png rename to Assets/WebsiteAssets/images/flags/country-squared/gf.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gg.png b/Assets/WebsiteAssets/images/flags/country-squared/gg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gg.png rename to Assets/WebsiteAssets/images/flags/country-squared/gg.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gh.png b/Assets/WebsiteAssets/images/flags/country-squared/gh.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gh.png rename to Assets/WebsiteAssets/images/flags/country-squared/gh.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gi.png b/Assets/WebsiteAssets/images/flags/country-squared/gi.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gi.png rename to Assets/WebsiteAssets/images/flags/country-squared/gi.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gl.png b/Assets/WebsiteAssets/images/flags/country-squared/gl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gl.png rename to Assets/WebsiteAssets/images/flags/country-squared/gl.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gm.png b/Assets/WebsiteAssets/images/flags/country-squared/gm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gm.png rename to Assets/WebsiteAssets/images/flags/country-squared/gm.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gn.png b/Assets/WebsiteAssets/images/flags/country-squared/gn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gn.png rename to Assets/WebsiteAssets/images/flags/country-squared/gn.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gp.png b/Assets/WebsiteAssets/images/flags/country-squared/gp.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gp.png rename to Assets/WebsiteAssets/images/flags/country-squared/gp.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gq.png b/Assets/WebsiteAssets/images/flags/country-squared/gq.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gq.png rename to Assets/WebsiteAssets/images/flags/country-squared/gq.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gr.png b/Assets/WebsiteAssets/images/flags/country-squared/gr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gr.png rename to Assets/WebsiteAssets/images/flags/country-squared/gr.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gs.png b/Assets/WebsiteAssets/images/flags/country-squared/gs.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gs.png rename to Assets/WebsiteAssets/images/flags/country-squared/gs.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gt.png b/Assets/WebsiteAssets/images/flags/country-squared/gt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gt.png rename to Assets/WebsiteAssets/images/flags/country-squared/gt.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gu.png b/Assets/WebsiteAssets/images/flags/country-squared/gu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gu.png rename to Assets/WebsiteAssets/images/flags/country-squared/gu.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gw.png b/Assets/WebsiteAssets/images/flags/country-squared/gw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gw.png rename to Assets/WebsiteAssets/images/flags/country-squared/gw.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/gy.png b/Assets/WebsiteAssets/images/flags/country-squared/gy.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/gy.png rename to Assets/WebsiteAssets/images/flags/country-squared/gy.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/hk.png b/Assets/WebsiteAssets/images/flags/country-squared/hk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/hk.png rename to Assets/WebsiteAssets/images/flags/country-squared/hk.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/hm.png b/Assets/WebsiteAssets/images/flags/country-squared/hm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/hm.png rename to Assets/WebsiteAssets/images/flags/country-squared/hm.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/hn.png b/Assets/WebsiteAssets/images/flags/country-squared/hn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/hn.png rename to Assets/WebsiteAssets/images/flags/country-squared/hn.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/hr.png b/Assets/WebsiteAssets/images/flags/country-squared/hr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/hr.png rename to Assets/WebsiteAssets/images/flags/country-squared/hr.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ht.png b/Assets/WebsiteAssets/images/flags/country-squared/ht.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ht.png rename to Assets/WebsiteAssets/images/flags/country-squared/ht.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/hu.png b/Assets/WebsiteAssets/images/flags/country-squared/hu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/hu.png rename to Assets/WebsiteAssets/images/flags/country-squared/hu.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/id.png b/Assets/WebsiteAssets/images/flags/country-squared/id.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/id.png rename to Assets/WebsiteAssets/images/flags/country-squared/id.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ie.png b/Assets/WebsiteAssets/images/flags/country-squared/ie.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ie.png rename to Assets/WebsiteAssets/images/flags/country-squared/ie.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/il.png b/Assets/WebsiteAssets/images/flags/country-squared/il.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/il.png rename to Assets/WebsiteAssets/images/flags/country-squared/il.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/im.png b/Assets/WebsiteAssets/images/flags/country-squared/im.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/im.png rename to Assets/WebsiteAssets/images/flags/country-squared/im.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/in.png b/Assets/WebsiteAssets/images/flags/country-squared/in.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/in.png rename to Assets/WebsiteAssets/images/flags/country-squared/in.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/io.png b/Assets/WebsiteAssets/images/flags/country-squared/io.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/io.png rename to Assets/WebsiteAssets/images/flags/country-squared/io.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/iq.png b/Assets/WebsiteAssets/images/flags/country-squared/iq.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/iq.png rename to Assets/WebsiteAssets/images/flags/country-squared/iq.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ir.png b/Assets/WebsiteAssets/images/flags/country-squared/ir.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ir.png rename to Assets/WebsiteAssets/images/flags/country-squared/ir.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/is.png b/Assets/WebsiteAssets/images/flags/country-squared/is.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/is.png rename to Assets/WebsiteAssets/images/flags/country-squared/is.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/it.png b/Assets/WebsiteAssets/images/flags/country-squared/it.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/it.png rename to Assets/WebsiteAssets/images/flags/country-squared/it.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/je.png b/Assets/WebsiteAssets/images/flags/country-squared/je.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/je.png rename to Assets/WebsiteAssets/images/flags/country-squared/je.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/jm.png b/Assets/WebsiteAssets/images/flags/country-squared/jm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/jm.png rename to Assets/WebsiteAssets/images/flags/country-squared/jm.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/jo.png b/Assets/WebsiteAssets/images/flags/country-squared/jo.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/jo.png rename to Assets/WebsiteAssets/images/flags/country-squared/jo.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/jp.png b/Assets/WebsiteAssets/images/flags/country-squared/jp.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/jp.png rename to Assets/WebsiteAssets/images/flags/country-squared/jp.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ke.png b/Assets/WebsiteAssets/images/flags/country-squared/ke.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ke.png rename to Assets/WebsiteAssets/images/flags/country-squared/ke.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/kg.png b/Assets/WebsiteAssets/images/flags/country-squared/kg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/kg.png rename to Assets/WebsiteAssets/images/flags/country-squared/kg.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/kh.png b/Assets/WebsiteAssets/images/flags/country-squared/kh.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/kh.png rename to Assets/WebsiteAssets/images/flags/country-squared/kh.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ki.png b/Assets/WebsiteAssets/images/flags/country-squared/ki.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ki.png rename to Assets/WebsiteAssets/images/flags/country-squared/ki.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/km.png b/Assets/WebsiteAssets/images/flags/country-squared/km.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/km.png rename to Assets/WebsiteAssets/images/flags/country-squared/km.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/kn.png b/Assets/WebsiteAssets/images/flags/country-squared/kn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/kn.png rename to Assets/WebsiteAssets/images/flags/country-squared/kn.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/kp.png b/Assets/WebsiteAssets/images/flags/country-squared/kp.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/kp.png rename to Assets/WebsiteAssets/images/flags/country-squared/kp.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/kr.png b/Assets/WebsiteAssets/images/flags/country-squared/kr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/kr.png rename to Assets/WebsiteAssets/images/flags/country-squared/kr.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/kw.png b/Assets/WebsiteAssets/images/flags/country-squared/kw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/kw.png rename to Assets/WebsiteAssets/images/flags/country-squared/kw.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ky.png b/Assets/WebsiteAssets/images/flags/country-squared/ky.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ky.png rename to Assets/WebsiteAssets/images/flags/country-squared/ky.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/kz.png b/Assets/WebsiteAssets/images/flags/country-squared/kz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/kz.png rename to Assets/WebsiteAssets/images/flags/country-squared/kz.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/la.png b/Assets/WebsiteAssets/images/flags/country-squared/la.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/la.png rename to Assets/WebsiteAssets/images/flags/country-squared/la.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/lb.png b/Assets/WebsiteAssets/images/flags/country-squared/lb.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/lb.png rename to Assets/WebsiteAssets/images/flags/country-squared/lb.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/lc.png b/Assets/WebsiteAssets/images/flags/country-squared/lc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/lc.png rename to Assets/WebsiteAssets/images/flags/country-squared/lc.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/li.png b/Assets/WebsiteAssets/images/flags/country-squared/li.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/li.png rename to Assets/WebsiteAssets/images/flags/country-squared/li.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/lk.png b/Assets/WebsiteAssets/images/flags/country-squared/lk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/lk.png rename to Assets/WebsiteAssets/images/flags/country-squared/lk.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/lr.png b/Assets/WebsiteAssets/images/flags/country-squared/lr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/lr.png rename to Assets/WebsiteAssets/images/flags/country-squared/lr.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ls.png b/Assets/WebsiteAssets/images/flags/country-squared/ls.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ls.png rename to Assets/WebsiteAssets/images/flags/country-squared/ls.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/lt.png b/Assets/WebsiteAssets/images/flags/country-squared/lt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/lt.png rename to Assets/WebsiteAssets/images/flags/country-squared/lt.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/lu.png b/Assets/WebsiteAssets/images/flags/country-squared/lu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/lu.png rename to Assets/WebsiteAssets/images/flags/country-squared/lu.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/lv.png b/Assets/WebsiteAssets/images/flags/country-squared/lv.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/lv.png rename to Assets/WebsiteAssets/images/flags/country-squared/lv.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ly.png b/Assets/WebsiteAssets/images/flags/country-squared/ly.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ly.png rename to Assets/WebsiteAssets/images/flags/country-squared/ly.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ma.png b/Assets/WebsiteAssets/images/flags/country-squared/ma.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ma.png rename to Assets/WebsiteAssets/images/flags/country-squared/ma.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mc.png b/Assets/WebsiteAssets/images/flags/country-squared/mc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mc.png rename to Assets/WebsiteAssets/images/flags/country-squared/mc.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/md.png b/Assets/WebsiteAssets/images/flags/country-squared/md.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/md.png rename to Assets/WebsiteAssets/images/flags/country-squared/md.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/me.png b/Assets/WebsiteAssets/images/flags/country-squared/me.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/me.png rename to Assets/WebsiteAssets/images/flags/country-squared/me.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mf.png b/Assets/WebsiteAssets/images/flags/country-squared/mf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mf.png rename to Assets/WebsiteAssets/images/flags/country-squared/mf.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mg.png b/Assets/WebsiteAssets/images/flags/country-squared/mg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mg.png rename to Assets/WebsiteAssets/images/flags/country-squared/mg.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mh.png b/Assets/WebsiteAssets/images/flags/country-squared/mh.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mh.png rename to Assets/WebsiteAssets/images/flags/country-squared/mh.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mk.png b/Assets/WebsiteAssets/images/flags/country-squared/mk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mk.png rename to Assets/WebsiteAssets/images/flags/country-squared/mk.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ml.png b/Assets/WebsiteAssets/images/flags/country-squared/ml.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ml.png rename to Assets/WebsiteAssets/images/flags/country-squared/ml.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mm.png b/Assets/WebsiteAssets/images/flags/country-squared/mm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mm.png rename to Assets/WebsiteAssets/images/flags/country-squared/mm.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mn.png b/Assets/WebsiteAssets/images/flags/country-squared/mn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mn.png rename to Assets/WebsiteAssets/images/flags/country-squared/mn.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mo.png b/Assets/WebsiteAssets/images/flags/country-squared/mo.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mo.png rename to Assets/WebsiteAssets/images/flags/country-squared/mo.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mp.png b/Assets/WebsiteAssets/images/flags/country-squared/mp.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mp.png rename to Assets/WebsiteAssets/images/flags/country-squared/mp.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mq.png b/Assets/WebsiteAssets/images/flags/country-squared/mq.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mq.png rename to Assets/WebsiteAssets/images/flags/country-squared/mq.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mr.png b/Assets/WebsiteAssets/images/flags/country-squared/mr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mr.png rename to Assets/WebsiteAssets/images/flags/country-squared/mr.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ms.png b/Assets/WebsiteAssets/images/flags/country-squared/ms.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ms.png rename to Assets/WebsiteAssets/images/flags/country-squared/ms.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mt.png b/Assets/WebsiteAssets/images/flags/country-squared/mt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mt.png rename to Assets/WebsiteAssets/images/flags/country-squared/mt.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mu.png b/Assets/WebsiteAssets/images/flags/country-squared/mu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mu.png rename to Assets/WebsiteAssets/images/flags/country-squared/mu.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mv.png b/Assets/WebsiteAssets/images/flags/country-squared/mv.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mv.png rename to Assets/WebsiteAssets/images/flags/country-squared/mv.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mw.png b/Assets/WebsiteAssets/images/flags/country-squared/mw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mw.png rename to Assets/WebsiteAssets/images/flags/country-squared/mw.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mx.png b/Assets/WebsiteAssets/images/flags/country-squared/mx.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mx.png rename to Assets/WebsiteAssets/images/flags/country-squared/mx.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/my.png b/Assets/WebsiteAssets/images/flags/country-squared/my.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/my.png rename to Assets/WebsiteAssets/images/flags/country-squared/my.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/mz.png b/Assets/WebsiteAssets/images/flags/country-squared/mz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/mz.png rename to Assets/WebsiteAssets/images/flags/country-squared/mz.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/na.png b/Assets/WebsiteAssets/images/flags/country-squared/na.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/na.png rename to Assets/WebsiteAssets/images/flags/country-squared/na.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/nc.png b/Assets/WebsiteAssets/images/flags/country-squared/nc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/nc.png rename to Assets/WebsiteAssets/images/flags/country-squared/nc.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ne.png b/Assets/WebsiteAssets/images/flags/country-squared/ne.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ne.png rename to Assets/WebsiteAssets/images/flags/country-squared/ne.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/nf.png b/Assets/WebsiteAssets/images/flags/country-squared/nf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/nf.png rename to Assets/WebsiteAssets/images/flags/country-squared/nf.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ng.png b/Assets/WebsiteAssets/images/flags/country-squared/ng.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ng.png rename to Assets/WebsiteAssets/images/flags/country-squared/ng.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ni.png b/Assets/WebsiteAssets/images/flags/country-squared/ni.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ni.png rename to Assets/WebsiteAssets/images/flags/country-squared/ni.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/nl.png b/Assets/WebsiteAssets/images/flags/country-squared/nl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/nl.png rename to Assets/WebsiteAssets/images/flags/country-squared/nl.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/no.png b/Assets/WebsiteAssets/images/flags/country-squared/no.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/no.png rename to Assets/WebsiteAssets/images/flags/country-squared/no.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/np.png b/Assets/WebsiteAssets/images/flags/country-squared/np.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/np.png rename to Assets/WebsiteAssets/images/flags/country-squared/np.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/nr.png b/Assets/WebsiteAssets/images/flags/country-squared/nr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/nr.png rename to Assets/WebsiteAssets/images/flags/country-squared/nr.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/nu.png b/Assets/WebsiteAssets/images/flags/country-squared/nu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/nu.png rename to Assets/WebsiteAssets/images/flags/country-squared/nu.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/nz.png b/Assets/WebsiteAssets/images/flags/country-squared/nz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/nz.png rename to Assets/WebsiteAssets/images/flags/country-squared/nz.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/om.png b/Assets/WebsiteAssets/images/flags/country-squared/om.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/om.png rename to Assets/WebsiteAssets/images/flags/country-squared/om.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/pa.png b/Assets/WebsiteAssets/images/flags/country-squared/pa.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/pa.png rename to Assets/WebsiteAssets/images/flags/country-squared/pa.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/pe.png b/Assets/WebsiteAssets/images/flags/country-squared/pe.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/pe.png rename to Assets/WebsiteAssets/images/flags/country-squared/pe.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/pf.png b/Assets/WebsiteAssets/images/flags/country-squared/pf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/pf.png rename to Assets/WebsiteAssets/images/flags/country-squared/pf.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/pg.png b/Assets/WebsiteAssets/images/flags/country-squared/pg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/pg.png rename to Assets/WebsiteAssets/images/flags/country-squared/pg.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ph.png b/Assets/WebsiteAssets/images/flags/country-squared/ph.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ph.png rename to Assets/WebsiteAssets/images/flags/country-squared/ph.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/pk.png b/Assets/WebsiteAssets/images/flags/country-squared/pk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/pk.png rename to Assets/WebsiteAssets/images/flags/country-squared/pk.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/pl.png b/Assets/WebsiteAssets/images/flags/country-squared/pl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/pl.png rename to Assets/WebsiteAssets/images/flags/country-squared/pl.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/pm.png b/Assets/WebsiteAssets/images/flags/country-squared/pm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/pm.png rename to Assets/WebsiteAssets/images/flags/country-squared/pm.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/pn.png b/Assets/WebsiteAssets/images/flags/country-squared/pn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/pn.png rename to Assets/WebsiteAssets/images/flags/country-squared/pn.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/pr.png b/Assets/WebsiteAssets/images/flags/country-squared/pr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/pr.png rename to Assets/WebsiteAssets/images/flags/country-squared/pr.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ps.png b/Assets/WebsiteAssets/images/flags/country-squared/ps.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ps.png rename to Assets/WebsiteAssets/images/flags/country-squared/ps.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/pt.png b/Assets/WebsiteAssets/images/flags/country-squared/pt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/pt.png rename to Assets/WebsiteAssets/images/flags/country-squared/pt.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/pw.png b/Assets/WebsiteAssets/images/flags/country-squared/pw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/pw.png rename to Assets/WebsiteAssets/images/flags/country-squared/pw.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/py.png b/Assets/WebsiteAssets/images/flags/country-squared/py.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/py.png rename to Assets/WebsiteAssets/images/flags/country-squared/py.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/qa.png b/Assets/WebsiteAssets/images/flags/country-squared/qa.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/qa.png rename to Assets/WebsiteAssets/images/flags/country-squared/qa.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/re.png b/Assets/WebsiteAssets/images/flags/country-squared/re.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/re.png rename to Assets/WebsiteAssets/images/flags/country-squared/re.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ro.png b/Assets/WebsiteAssets/images/flags/country-squared/ro.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ro.png rename to Assets/WebsiteAssets/images/flags/country-squared/ro.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/rs.png b/Assets/WebsiteAssets/images/flags/country-squared/rs.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/rs.png rename to Assets/WebsiteAssets/images/flags/country-squared/rs.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ru.png b/Assets/WebsiteAssets/images/flags/country-squared/ru.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ru.png rename to Assets/WebsiteAssets/images/flags/country-squared/ru.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/rw.png b/Assets/WebsiteAssets/images/flags/country-squared/rw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/rw.png rename to Assets/WebsiteAssets/images/flags/country-squared/rw.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sa.png b/Assets/WebsiteAssets/images/flags/country-squared/sa.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sa.png rename to Assets/WebsiteAssets/images/flags/country-squared/sa.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sb.png b/Assets/WebsiteAssets/images/flags/country-squared/sb.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sb.png rename to Assets/WebsiteAssets/images/flags/country-squared/sb.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sc.png b/Assets/WebsiteAssets/images/flags/country-squared/sc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sc.png rename to Assets/WebsiteAssets/images/flags/country-squared/sc.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sd.png b/Assets/WebsiteAssets/images/flags/country-squared/sd.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sd.png rename to Assets/WebsiteAssets/images/flags/country-squared/sd.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/se.png b/Assets/WebsiteAssets/images/flags/country-squared/se.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/se.png rename to Assets/WebsiteAssets/images/flags/country-squared/se.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sg.png b/Assets/WebsiteAssets/images/flags/country-squared/sg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sg.png rename to Assets/WebsiteAssets/images/flags/country-squared/sg.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sh.png b/Assets/WebsiteAssets/images/flags/country-squared/sh.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sh.png rename to Assets/WebsiteAssets/images/flags/country-squared/sh.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/si.png b/Assets/WebsiteAssets/images/flags/country-squared/si.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/si.png rename to Assets/WebsiteAssets/images/flags/country-squared/si.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sj.png b/Assets/WebsiteAssets/images/flags/country-squared/sj.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sj.png rename to Assets/WebsiteAssets/images/flags/country-squared/sj.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sk.png b/Assets/WebsiteAssets/images/flags/country-squared/sk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sk.png rename to Assets/WebsiteAssets/images/flags/country-squared/sk.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sl.png b/Assets/WebsiteAssets/images/flags/country-squared/sl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sl.png rename to Assets/WebsiteAssets/images/flags/country-squared/sl.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sm.png b/Assets/WebsiteAssets/images/flags/country-squared/sm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sm.png rename to Assets/WebsiteAssets/images/flags/country-squared/sm.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sn.png b/Assets/WebsiteAssets/images/flags/country-squared/sn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sn.png rename to Assets/WebsiteAssets/images/flags/country-squared/sn.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/so.png b/Assets/WebsiteAssets/images/flags/country-squared/so.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/so.png rename to Assets/WebsiteAssets/images/flags/country-squared/so.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sr.png b/Assets/WebsiteAssets/images/flags/country-squared/sr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sr.png rename to Assets/WebsiteAssets/images/flags/country-squared/sr.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ss.png b/Assets/WebsiteAssets/images/flags/country-squared/ss.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ss.png rename to Assets/WebsiteAssets/images/flags/country-squared/ss.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/st.png b/Assets/WebsiteAssets/images/flags/country-squared/st.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/st.png rename to Assets/WebsiteAssets/images/flags/country-squared/st.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sv.png b/Assets/WebsiteAssets/images/flags/country-squared/sv.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sv.png rename to Assets/WebsiteAssets/images/flags/country-squared/sv.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sx.png b/Assets/WebsiteAssets/images/flags/country-squared/sx.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sx.png rename to Assets/WebsiteAssets/images/flags/country-squared/sx.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sy.png b/Assets/WebsiteAssets/images/flags/country-squared/sy.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sy.png rename to Assets/WebsiteAssets/images/flags/country-squared/sy.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/sz.png b/Assets/WebsiteAssets/images/flags/country-squared/sz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/sz.png rename to Assets/WebsiteAssets/images/flags/country-squared/sz.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/tc.png b/Assets/WebsiteAssets/images/flags/country-squared/tc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/tc.png rename to Assets/WebsiteAssets/images/flags/country-squared/tc.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/td.png b/Assets/WebsiteAssets/images/flags/country-squared/td.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/td.png rename to Assets/WebsiteAssets/images/flags/country-squared/td.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/tf.png b/Assets/WebsiteAssets/images/flags/country-squared/tf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/tf.png rename to Assets/WebsiteAssets/images/flags/country-squared/tf.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/tg.png b/Assets/WebsiteAssets/images/flags/country-squared/tg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/tg.png rename to Assets/WebsiteAssets/images/flags/country-squared/tg.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/th.png b/Assets/WebsiteAssets/images/flags/country-squared/th.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/th.png rename to Assets/WebsiteAssets/images/flags/country-squared/th.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/tj.png b/Assets/WebsiteAssets/images/flags/country-squared/tj.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/tj.png rename to Assets/WebsiteAssets/images/flags/country-squared/tj.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/tk.png b/Assets/WebsiteAssets/images/flags/country-squared/tk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/tk.png rename to Assets/WebsiteAssets/images/flags/country-squared/tk.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/tl.png b/Assets/WebsiteAssets/images/flags/country-squared/tl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/tl.png rename to Assets/WebsiteAssets/images/flags/country-squared/tl.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/tm.png b/Assets/WebsiteAssets/images/flags/country-squared/tm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/tm.png rename to Assets/WebsiteAssets/images/flags/country-squared/tm.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/tn.png b/Assets/WebsiteAssets/images/flags/country-squared/tn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/tn.png rename to Assets/WebsiteAssets/images/flags/country-squared/tn.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/to.png b/Assets/WebsiteAssets/images/flags/country-squared/to.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/to.png rename to Assets/WebsiteAssets/images/flags/country-squared/to.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/tr.png b/Assets/WebsiteAssets/images/flags/country-squared/tr.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/tr.png rename to Assets/WebsiteAssets/images/flags/country-squared/tr.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/tt.png b/Assets/WebsiteAssets/images/flags/country-squared/tt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/tt.png rename to Assets/WebsiteAssets/images/flags/country-squared/tt.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/tv.png b/Assets/WebsiteAssets/images/flags/country-squared/tv.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/tv.png rename to Assets/WebsiteAssets/images/flags/country-squared/tv.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/tw.png b/Assets/WebsiteAssets/images/flags/country-squared/tw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/tw.png rename to Assets/WebsiteAssets/images/flags/country-squared/tw.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/tz.png b/Assets/WebsiteAssets/images/flags/country-squared/tz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/tz.png rename to Assets/WebsiteAssets/images/flags/country-squared/tz.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ua.png b/Assets/WebsiteAssets/images/flags/country-squared/ua.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ua.png rename to Assets/WebsiteAssets/images/flags/country-squared/ua.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ug.png b/Assets/WebsiteAssets/images/flags/country-squared/ug.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ug.png rename to Assets/WebsiteAssets/images/flags/country-squared/ug.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/um.png b/Assets/WebsiteAssets/images/flags/country-squared/um.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/um.png rename to Assets/WebsiteAssets/images/flags/country-squared/um.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/us.png b/Assets/WebsiteAssets/images/flags/country-squared/us.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/us.png rename to Assets/WebsiteAssets/images/flags/country-squared/us.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/uy.png b/Assets/WebsiteAssets/images/flags/country-squared/uy.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/uy.png rename to Assets/WebsiteAssets/images/flags/country-squared/uy.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/uz.png b/Assets/WebsiteAssets/images/flags/country-squared/uz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/uz.png rename to Assets/WebsiteAssets/images/flags/country-squared/uz.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/va.png b/Assets/WebsiteAssets/images/flags/country-squared/va.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/va.png rename to Assets/WebsiteAssets/images/flags/country-squared/va.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/vc.png b/Assets/WebsiteAssets/images/flags/country-squared/vc.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/vc.png rename to Assets/WebsiteAssets/images/flags/country-squared/vc.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ve.png b/Assets/WebsiteAssets/images/flags/country-squared/ve.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ve.png rename to Assets/WebsiteAssets/images/flags/country-squared/ve.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/vg.png b/Assets/WebsiteAssets/images/flags/country-squared/vg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/vg.png rename to Assets/WebsiteAssets/images/flags/country-squared/vg.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/vi.png b/Assets/WebsiteAssets/images/flags/country-squared/vi.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/vi.png rename to Assets/WebsiteAssets/images/flags/country-squared/vi.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/vn.png b/Assets/WebsiteAssets/images/flags/country-squared/vn.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/vn.png rename to Assets/WebsiteAssets/images/flags/country-squared/vn.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/vu.png b/Assets/WebsiteAssets/images/flags/country-squared/vu.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/vu.png rename to Assets/WebsiteAssets/images/flags/country-squared/vu.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/wf.png b/Assets/WebsiteAssets/images/flags/country-squared/wf.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/wf.png rename to Assets/WebsiteAssets/images/flags/country-squared/wf.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ws.png b/Assets/WebsiteAssets/images/flags/country-squared/ws.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ws.png rename to Assets/WebsiteAssets/images/flags/country-squared/ws.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/ye.png b/Assets/WebsiteAssets/images/flags/country-squared/ye.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/ye.png rename to Assets/WebsiteAssets/images/flags/country-squared/ye.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/yt.png b/Assets/WebsiteAssets/images/flags/country-squared/yt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/yt.png rename to Assets/WebsiteAssets/images/flags/country-squared/yt.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/za.png b/Assets/WebsiteAssets/images/flags/country-squared/za.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/za.png rename to Assets/WebsiteAssets/images/flags/country-squared/za.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/zm.png b/Assets/WebsiteAssets/images/flags/country-squared/zm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/zm.png rename to Assets/WebsiteAssets/images/flags/country-squared/zm.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/zw.png b/Assets/WebsiteAssets/images/flags/country-squared/zw.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/zw.png rename to Assets/WebsiteAssets/images/flags/country-squared/zw.png diff --git a/Modules/WebsiteAssets/images/flags/country-squared/zz.png b/Assets/WebsiteAssets/images/flags/country-squared/zz.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/country-squared/zz.png rename to Assets/WebsiteAssets/images/flags/country-squared/zz.png diff --git a/Modules/WebsiteAssets/images/flags/de/baden-württemberg.png b/Assets/WebsiteAssets/images/flags/de/baden-württemberg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/baden-württemberg.png rename to Assets/WebsiteAssets/images/flags/de/baden-württemberg.png diff --git a/Modules/WebsiteAssets/images/flags/de/bavaria.png b/Assets/WebsiteAssets/images/flags/de/bavaria.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/bavaria.png rename to Assets/WebsiteAssets/images/flags/de/bavaria.png diff --git a/Modules/WebsiteAssets/images/flags/de/berlin.png b/Assets/WebsiteAssets/images/flags/de/berlin.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/berlin.png rename to Assets/WebsiteAssets/images/flags/de/berlin.png diff --git a/Modules/WebsiteAssets/images/flags/de/brandenburg.png b/Assets/WebsiteAssets/images/flags/de/brandenburg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/brandenburg.png rename to Assets/WebsiteAssets/images/flags/de/brandenburg.png diff --git a/Modules/WebsiteAssets/images/flags/de/bremen.png b/Assets/WebsiteAssets/images/flags/de/bremen.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/bremen.png rename to Assets/WebsiteAssets/images/flags/de/bremen.png diff --git a/Modules/WebsiteAssets/images/flags/de/hamburg.png b/Assets/WebsiteAssets/images/flags/de/hamburg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/hamburg.png rename to Assets/WebsiteAssets/images/flags/de/hamburg.png diff --git a/Modules/WebsiteAssets/images/flags/de/hessen.png b/Assets/WebsiteAssets/images/flags/de/hessen.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/hessen.png rename to Assets/WebsiteAssets/images/flags/de/hessen.png diff --git a/Modules/WebsiteAssets/images/flags/de/lower_saxony.png b/Assets/WebsiteAssets/images/flags/de/lower_saxony.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/lower_saxony.png rename to Assets/WebsiteAssets/images/flags/de/lower_saxony.png diff --git a/Modules/WebsiteAssets/images/flags/de/mecklenburg-western_pomerania.png b/Assets/WebsiteAssets/images/flags/de/mecklenburg-western_pomerania.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/mecklenburg-western_pomerania.png rename to Assets/WebsiteAssets/images/flags/de/mecklenburg-western_pomerania.png diff --git a/Modules/WebsiteAssets/images/flags/de/north_rhine-westphalia.png b/Assets/WebsiteAssets/images/flags/de/north_rhine-westphalia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/north_rhine-westphalia.png rename to Assets/WebsiteAssets/images/flags/de/north_rhine-westphalia.png diff --git a/Modules/WebsiteAssets/images/flags/de/rhineland-palatinate.png b/Assets/WebsiteAssets/images/flags/de/rhineland-palatinate.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/rhineland-palatinate.png rename to Assets/WebsiteAssets/images/flags/de/rhineland-palatinate.png diff --git a/Modules/WebsiteAssets/images/flags/de/saarland.png b/Assets/WebsiteAssets/images/flags/de/saarland.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/saarland.png rename to Assets/WebsiteAssets/images/flags/de/saarland.png diff --git a/Modules/WebsiteAssets/images/flags/de/saxony-anhalt.png b/Assets/WebsiteAssets/images/flags/de/saxony-anhalt.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/saxony-anhalt.png rename to Assets/WebsiteAssets/images/flags/de/saxony-anhalt.png diff --git a/Modules/WebsiteAssets/images/flags/de/saxony.png b/Assets/WebsiteAssets/images/flags/de/saxony.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/saxony.png rename to Assets/WebsiteAssets/images/flags/de/saxony.png diff --git a/Modules/WebsiteAssets/images/flags/de/schleswig-holstein.png b/Assets/WebsiteAssets/images/flags/de/schleswig-holstein.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/schleswig-holstein.png rename to Assets/WebsiteAssets/images/flags/de/schleswig-holstein.png diff --git a/Modules/WebsiteAssets/images/flags/de/thuringia.png b/Assets/WebsiteAssets/images/flags/de/thuringia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/de/thuringia.png rename to Assets/WebsiteAssets/images/flags/de/thuringia.png diff --git a/Modules/WebsiteAssets/images/flags/es/andalucía.png b/Assets/WebsiteAssets/images/flags/es/andalucía.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/andalucía.png rename to Assets/WebsiteAssets/images/flags/es/andalucía.png diff --git a/Modules/WebsiteAssets/images/flags/es/aragón.png b/Assets/WebsiteAssets/images/flags/es/aragón.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/aragón.png rename to Assets/WebsiteAssets/images/flags/es/aragón.png diff --git a/Modules/WebsiteAssets/images/flags/es/asturias.png b/Assets/WebsiteAssets/images/flags/es/asturias.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/asturias.png rename to Assets/WebsiteAssets/images/flags/es/asturias.png diff --git a/Modules/WebsiteAssets/images/flags/es/balearic_islands.png b/Assets/WebsiteAssets/images/flags/es/balearic_islands.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/balearic_islands.png rename to Assets/WebsiteAssets/images/flags/es/balearic_islands.png diff --git a/Modules/WebsiteAssets/images/flags/es/basque_country.png b/Assets/WebsiteAssets/images/flags/es/basque_country.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/basque_country.png rename to Assets/WebsiteAssets/images/flags/es/basque_country.png diff --git a/Modules/WebsiteAssets/images/flags/es/canary_islands.png b/Assets/WebsiteAssets/images/flags/es/canary_islands.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/canary_islands.png rename to Assets/WebsiteAssets/images/flags/es/canary_islands.png diff --git a/Modules/WebsiteAssets/images/flags/es/cantabria.png b/Assets/WebsiteAssets/images/flags/es/cantabria.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/cantabria.png rename to Assets/WebsiteAssets/images/flags/es/cantabria.png diff --git a/Modules/WebsiteAssets/images/flags/es/castile_and_león.png b/Assets/WebsiteAssets/images/flags/es/castile_and_león.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/castile_and_león.png rename to Assets/WebsiteAssets/images/flags/es/castile_and_león.png diff --git a/Modules/WebsiteAssets/images/flags/es/castilla-la_mancha.png b/Assets/WebsiteAssets/images/flags/es/castilla-la_mancha.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/castilla-la_mancha.png rename to Assets/WebsiteAssets/images/flags/es/castilla-la_mancha.png diff --git a/Modules/WebsiteAssets/images/flags/es/catalonia.png b/Assets/WebsiteAssets/images/flags/es/catalonia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/catalonia.png rename to Assets/WebsiteAssets/images/flags/es/catalonia.png diff --git a/Modules/WebsiteAssets/images/flags/es/ceuta.png b/Assets/WebsiteAssets/images/flags/es/ceuta.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/ceuta.png rename to Assets/WebsiteAssets/images/flags/es/ceuta.png diff --git a/Modules/WebsiteAssets/images/flags/es/community_of_madrid.png b/Assets/WebsiteAssets/images/flags/es/community_of_madrid.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/community_of_madrid.png rename to Assets/WebsiteAssets/images/flags/es/community_of_madrid.png diff --git a/Modules/WebsiteAssets/images/flags/es/extremadura.png b/Assets/WebsiteAssets/images/flags/es/extremadura.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/extremadura.png rename to Assets/WebsiteAssets/images/flags/es/extremadura.png diff --git a/Modules/WebsiteAssets/images/flags/es/galicia.png b/Assets/WebsiteAssets/images/flags/es/galicia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/galicia.png rename to Assets/WebsiteAssets/images/flags/es/galicia.png diff --git a/Modules/WebsiteAssets/images/flags/es/la_rioja.png b/Assets/WebsiteAssets/images/flags/es/la_rioja.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/la_rioja.png rename to Assets/WebsiteAssets/images/flags/es/la_rioja.png diff --git a/Modules/WebsiteAssets/images/flags/es/melilla.png b/Assets/WebsiteAssets/images/flags/es/melilla.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/melilla.png rename to Assets/WebsiteAssets/images/flags/es/melilla.png diff --git a/Modules/WebsiteAssets/images/flags/es/navarra.png b/Assets/WebsiteAssets/images/flags/es/navarra.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/navarra.png rename to Assets/WebsiteAssets/images/flags/es/navarra.png diff --git a/Modules/WebsiteAssets/images/flags/es/region_of_murcia.png b/Assets/WebsiteAssets/images/flags/es/region_of_murcia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/region_of_murcia.png rename to Assets/WebsiteAssets/images/flags/es/region_of_murcia.png diff --git a/Modules/WebsiteAssets/images/flags/es/valencia_community.png b/Assets/WebsiteAssets/images/flags/es/valencia_community.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/es/valencia_community.png rename to Assets/WebsiteAssets/images/flags/es/valencia_community.png diff --git a/Modules/WebsiteAssets/images/flags/esperanto.png b/Assets/WebsiteAssets/images/flags/esperanto.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/esperanto.png rename to Assets/WebsiteAssets/images/flags/esperanto.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/0.png b/Assets/WebsiteAssets/images/flags/maritime/0.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/0.png rename to Assets/WebsiteAssets/images/flags/maritime/0.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/1.png b/Assets/WebsiteAssets/images/flags/maritime/1.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/1.png rename to Assets/WebsiteAssets/images/flags/maritime/1.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/2.png b/Assets/WebsiteAssets/images/flags/maritime/2.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/2.png rename to Assets/WebsiteAssets/images/flags/maritime/2.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/3.png b/Assets/WebsiteAssets/images/flags/maritime/3.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/3.png rename to Assets/WebsiteAssets/images/flags/maritime/3.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/4.png b/Assets/WebsiteAssets/images/flags/maritime/4.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/4.png rename to Assets/WebsiteAssets/images/flags/maritime/4.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/5.png b/Assets/WebsiteAssets/images/flags/maritime/5.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/5.png rename to Assets/WebsiteAssets/images/flags/maritime/5.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/6.png b/Assets/WebsiteAssets/images/flags/maritime/6.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/6.png rename to Assets/WebsiteAssets/images/flags/maritime/6.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/7.png b/Assets/WebsiteAssets/images/flags/maritime/7.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/7.png rename to Assets/WebsiteAssets/images/flags/maritime/7.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/8.png b/Assets/WebsiteAssets/images/flags/maritime/8.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/8.png rename to Assets/WebsiteAssets/images/flags/maritime/8.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/9.png b/Assets/WebsiteAssets/images/flags/maritime/9.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/9.png rename to Assets/WebsiteAssets/images/flags/maritime/9.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/a.png b/Assets/WebsiteAssets/images/flags/maritime/a.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/a.png rename to Assets/WebsiteAssets/images/flags/maritime/a.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/b.png b/Assets/WebsiteAssets/images/flags/maritime/b.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/b.png rename to Assets/WebsiteAssets/images/flags/maritime/b.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/c.png b/Assets/WebsiteAssets/images/flags/maritime/c.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/c.png rename to Assets/WebsiteAssets/images/flags/maritime/c.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/d.png b/Assets/WebsiteAssets/images/flags/maritime/d.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/d.png rename to Assets/WebsiteAssets/images/flags/maritime/d.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/e.png b/Assets/WebsiteAssets/images/flags/maritime/e.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/e.png rename to Assets/WebsiteAssets/images/flags/maritime/e.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/f.png b/Assets/WebsiteAssets/images/flags/maritime/f.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/f.png rename to Assets/WebsiteAssets/images/flags/maritime/f.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/g.png b/Assets/WebsiteAssets/images/flags/maritime/g.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/g.png rename to Assets/WebsiteAssets/images/flags/maritime/g.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/h.png b/Assets/WebsiteAssets/images/flags/maritime/h.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/h.png rename to Assets/WebsiteAssets/images/flags/maritime/h.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/i.png b/Assets/WebsiteAssets/images/flags/maritime/i.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/i.png rename to Assets/WebsiteAssets/images/flags/maritime/i.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/j.png b/Assets/WebsiteAssets/images/flags/maritime/j.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/j.png rename to Assets/WebsiteAssets/images/flags/maritime/j.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/k.png b/Assets/WebsiteAssets/images/flags/maritime/k.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/k.png rename to Assets/WebsiteAssets/images/flags/maritime/k.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/l.png b/Assets/WebsiteAssets/images/flags/maritime/l.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/l.png rename to Assets/WebsiteAssets/images/flags/maritime/l.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/m.png b/Assets/WebsiteAssets/images/flags/maritime/m.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/m.png rename to Assets/WebsiteAssets/images/flags/maritime/m.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/n.png b/Assets/WebsiteAssets/images/flags/maritime/n.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/n.png rename to Assets/WebsiteAssets/images/flags/maritime/n.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/o.png b/Assets/WebsiteAssets/images/flags/maritime/o.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/o.png rename to Assets/WebsiteAssets/images/flags/maritime/o.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/p.png b/Assets/WebsiteAssets/images/flags/maritime/p.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/p.png rename to Assets/WebsiteAssets/images/flags/maritime/p.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/q.png b/Assets/WebsiteAssets/images/flags/maritime/q.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/q.png rename to Assets/WebsiteAssets/images/flags/maritime/q.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/r.png b/Assets/WebsiteAssets/images/flags/maritime/r.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/r.png rename to Assets/WebsiteAssets/images/flags/maritime/r.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/s.png b/Assets/WebsiteAssets/images/flags/maritime/s.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/s.png rename to Assets/WebsiteAssets/images/flags/maritime/s.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/t.png b/Assets/WebsiteAssets/images/flags/maritime/t.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/t.png rename to Assets/WebsiteAssets/images/flags/maritime/t.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/u.png b/Assets/WebsiteAssets/images/flags/maritime/u.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/u.png rename to Assets/WebsiteAssets/images/flags/maritime/u.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/v.png b/Assets/WebsiteAssets/images/flags/maritime/v.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/v.png rename to Assets/WebsiteAssets/images/flags/maritime/v.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/w.png b/Assets/WebsiteAssets/images/flags/maritime/w.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/w.png rename to Assets/WebsiteAssets/images/flags/maritime/w.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/x.png b/Assets/WebsiteAssets/images/flags/maritime/x.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/x.png rename to Assets/WebsiteAssets/images/flags/maritime/x.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/y.png b/Assets/WebsiteAssets/images/flags/maritime/y.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/y.png rename to Assets/WebsiteAssets/images/flags/maritime/y.png diff --git a/Modules/WebsiteAssets/images/flags/maritime/z.png b/Assets/WebsiteAssets/images/flags/maritime/z.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/maritime/z.png rename to Assets/WebsiteAssets/images/flags/maritime/z.png diff --git a/Modules/WebsiteAssets/images/flags/racing/black.png b/Assets/WebsiteAssets/images/flags/racing/black.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/black.png rename to Assets/WebsiteAssets/images/flags/racing/black.png diff --git a/Modules/WebsiteAssets/images/flags/racing/blackwhiteperbend.png b/Assets/WebsiteAssets/images/flags/racing/blackwhiteperbend.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/blackwhiteperbend.png rename to Assets/WebsiteAssets/images/flags/racing/blackwhiteperbend.png diff --git a/Modules/WebsiteAssets/images/flags/racing/blue.png b/Assets/WebsiteAssets/images/flags/racing/blue.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/blue.png rename to Assets/WebsiteAssets/images/flags/racing/blue.png diff --git a/Modules/WebsiteAssets/images/flags/racing/checkered.png b/Assets/WebsiteAssets/images/flags/racing/checkered.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/checkered.png rename to Assets/WebsiteAssets/images/flags/racing/checkered.png diff --git a/Modules/WebsiteAssets/images/flags/racing/green.png b/Assets/WebsiteAssets/images/flags/racing/green.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/green.png rename to Assets/WebsiteAssets/images/flags/racing/green.png diff --git a/Modules/WebsiteAssets/images/flags/racing/orangecircle.png b/Assets/WebsiteAssets/images/flags/racing/orangecircle.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/orangecircle.png rename to Assets/WebsiteAssets/images/flags/racing/orangecircle.png diff --git a/Modules/WebsiteAssets/images/flags/racing/red.png b/Assets/WebsiteAssets/images/flags/racing/red.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/red.png rename to Assets/WebsiteAssets/images/flags/racing/red.png diff --git a/Modules/WebsiteAssets/images/flags/racing/redcross.png b/Assets/WebsiteAssets/images/flags/racing/redcross.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/redcross.png rename to Assets/WebsiteAssets/images/flags/racing/redcross.png diff --git a/Modules/WebsiteAssets/images/flags/racing/verticalstripes.png b/Assets/WebsiteAssets/images/flags/racing/verticalstripes.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/verticalstripes.png rename to Assets/WebsiteAssets/images/flags/racing/verticalstripes.png diff --git a/Modules/WebsiteAssets/images/flags/racing/white.png b/Assets/WebsiteAssets/images/flags/racing/white.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/white.png rename to Assets/WebsiteAssets/images/flags/racing/white.png diff --git a/Modules/WebsiteAssets/images/flags/racing/whitesaltire.png b/Assets/WebsiteAssets/images/flags/racing/whitesaltire.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/whitesaltire.png rename to Assets/WebsiteAssets/images/flags/racing/whitesaltire.png diff --git a/Modules/WebsiteAssets/images/flags/racing/yellow.png b/Assets/WebsiteAssets/images/flags/racing/yellow.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/yellow.png rename to Assets/WebsiteAssets/images/flags/racing/yellow.png diff --git a/Modules/WebsiteAssets/images/flags/racing/yellowsaltire.png b/Assets/WebsiteAssets/images/flags/racing/yellowsaltire.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/yellowsaltire.png rename to Assets/WebsiteAssets/images/flags/racing/yellowsaltire.png diff --git a/Modules/WebsiteAssets/images/flags/racing/yellowslash.png b/Assets/WebsiteAssets/images/flags/racing/yellowslash.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/racing/yellowslash.png rename to Assets/WebsiteAssets/images/flags/racing/yellowslash.png diff --git a/Modules/WebsiteAssets/images/flags/ru/adygea.png b/Assets/WebsiteAssets/images/flags/ru/adygea.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/adygea.png rename to Assets/WebsiteAssets/images/flags/ru/adygea.png diff --git a/Modules/WebsiteAssets/images/flags/ru/altai.png b/Assets/WebsiteAssets/images/flags/ru/altai.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/altai.png rename to Assets/WebsiteAssets/images/flags/ru/altai.png diff --git a/Modules/WebsiteAssets/images/flags/ru/altai_krai.png b/Assets/WebsiteAssets/images/flags/ru/altai_krai.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/altai_krai.png rename to Assets/WebsiteAssets/images/flags/ru/altai_krai.png diff --git a/Modules/WebsiteAssets/images/flags/ru/amur.png b/Assets/WebsiteAssets/images/flags/ru/amur.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/amur.png rename to Assets/WebsiteAssets/images/flags/ru/amur.png diff --git a/Modules/WebsiteAssets/images/flags/ru/arkhangelsk.png b/Assets/WebsiteAssets/images/flags/ru/arkhangelsk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/arkhangelsk.png rename to Assets/WebsiteAssets/images/flags/ru/arkhangelsk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/astrakhan.png b/Assets/WebsiteAssets/images/flags/ru/astrakhan.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/astrakhan.png rename to Assets/WebsiteAssets/images/flags/ru/astrakhan.png diff --git a/Modules/WebsiteAssets/images/flags/ru/bashkortostan.png b/Assets/WebsiteAssets/images/flags/ru/bashkortostan.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/bashkortostan.png rename to Assets/WebsiteAssets/images/flags/ru/bashkortostan.png diff --git a/Modules/WebsiteAssets/images/flags/ru/belgorod.png b/Assets/WebsiteAssets/images/flags/ru/belgorod.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/belgorod.png rename to Assets/WebsiteAssets/images/flags/ru/belgorod.png diff --git a/Modules/WebsiteAssets/images/flags/ru/bryansk.png b/Assets/WebsiteAssets/images/flags/ru/bryansk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/bryansk.png rename to Assets/WebsiteAssets/images/flags/ru/bryansk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/buryatia.png b/Assets/WebsiteAssets/images/flags/ru/buryatia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/buryatia.png rename to Assets/WebsiteAssets/images/flags/ru/buryatia.png diff --git a/Modules/WebsiteAssets/images/flags/ru/chechen.png b/Assets/WebsiteAssets/images/flags/ru/chechen.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/chechen.png rename to Assets/WebsiteAssets/images/flags/ru/chechen.png diff --git a/Modules/WebsiteAssets/images/flags/ru/chechnya.png b/Assets/WebsiteAssets/images/flags/ru/chechnya.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/chechnya.png rename to Assets/WebsiteAssets/images/flags/ru/chechnya.png diff --git a/Modules/WebsiteAssets/images/flags/ru/chelyabinsk.png b/Assets/WebsiteAssets/images/flags/ru/chelyabinsk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/chelyabinsk.png rename to Assets/WebsiteAssets/images/flags/ru/chelyabinsk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/chukotka.png b/Assets/WebsiteAssets/images/flags/ru/chukotka.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/chukotka.png rename to Assets/WebsiteAssets/images/flags/ru/chukotka.png diff --git a/Modules/WebsiteAssets/images/flags/ru/chuvashia.png b/Assets/WebsiteAssets/images/flags/ru/chuvashia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/chuvashia.png rename to Assets/WebsiteAssets/images/flags/ru/chuvashia.png diff --git a/Modules/WebsiteAssets/images/flags/ru/crimea.png b/Assets/WebsiteAssets/images/flags/ru/crimea.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/crimea.png rename to Assets/WebsiteAssets/images/flags/ru/crimea.png diff --git a/Modules/WebsiteAssets/images/flags/ru/dagestan.png b/Assets/WebsiteAssets/images/flags/ru/dagestan.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/dagestan.png rename to Assets/WebsiteAssets/images/flags/ru/dagestan.png diff --git a/Modules/WebsiteAssets/images/flags/ru/ingushetia.png b/Assets/WebsiteAssets/images/flags/ru/ingushetia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/ingushetia.png rename to Assets/WebsiteAssets/images/flags/ru/ingushetia.png diff --git a/Modules/WebsiteAssets/images/flags/ru/irkutsk.png b/Assets/WebsiteAssets/images/flags/ru/irkutsk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/irkutsk.png rename to Assets/WebsiteAssets/images/flags/ru/irkutsk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/ivanovo.png b/Assets/WebsiteAssets/images/flags/ru/ivanovo.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/ivanovo.png rename to Assets/WebsiteAssets/images/flags/ru/ivanovo.png diff --git a/Modules/WebsiteAssets/images/flags/ru/jewish_autonomous_oblast.png b/Assets/WebsiteAssets/images/flags/ru/jewish_autonomous_oblast.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/jewish_autonomous_oblast.png rename to Assets/WebsiteAssets/images/flags/ru/jewish_autonomous_oblast.png diff --git a/Modules/WebsiteAssets/images/flags/ru/kabardino-balkar.png b/Assets/WebsiteAssets/images/flags/ru/kabardino-balkar.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/kabardino-balkar.png rename to Assets/WebsiteAssets/images/flags/ru/kabardino-balkar.png diff --git a/Modules/WebsiteAssets/images/flags/ru/kaliningrad.png b/Assets/WebsiteAssets/images/flags/ru/kaliningrad.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/kaliningrad.png rename to Assets/WebsiteAssets/images/flags/ru/kaliningrad.png diff --git a/Modules/WebsiteAssets/images/flags/ru/kalmykia.png b/Assets/WebsiteAssets/images/flags/ru/kalmykia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/kalmykia.png rename to Assets/WebsiteAssets/images/flags/ru/kalmykia.png diff --git a/Modules/WebsiteAssets/images/flags/ru/kaluga.png b/Assets/WebsiteAssets/images/flags/ru/kaluga.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/kaluga.png rename to Assets/WebsiteAssets/images/flags/ru/kaluga.png diff --git a/Modules/WebsiteAssets/images/flags/ru/kamchatka.png b/Assets/WebsiteAssets/images/flags/ru/kamchatka.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/kamchatka.png rename to Assets/WebsiteAssets/images/flags/ru/kamchatka.png diff --git a/Modules/WebsiteAssets/images/flags/ru/karachay-cherkess.png b/Assets/WebsiteAssets/images/flags/ru/karachay-cherkess.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/karachay-cherkess.png rename to Assets/WebsiteAssets/images/flags/ru/karachay-cherkess.png diff --git a/Modules/WebsiteAssets/images/flags/ru/karelia.png b/Assets/WebsiteAssets/images/flags/ru/karelia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/karelia.png rename to Assets/WebsiteAssets/images/flags/ru/karelia.png diff --git a/Modules/WebsiteAssets/images/flags/ru/kemerovo.png b/Assets/WebsiteAssets/images/flags/ru/kemerovo.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/kemerovo.png rename to Assets/WebsiteAssets/images/flags/ru/kemerovo.png diff --git a/Modules/WebsiteAssets/images/flags/ru/khabarovsk.png b/Assets/WebsiteAssets/images/flags/ru/khabarovsk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/khabarovsk.png rename to Assets/WebsiteAssets/images/flags/ru/khabarovsk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/khakasiya.png b/Assets/WebsiteAssets/images/flags/ru/khakasiya.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/khakasiya.png rename to Assets/WebsiteAssets/images/flags/ru/khakasiya.png diff --git a/Modules/WebsiteAssets/images/flags/ru/khanty–mansi.png b/Assets/WebsiteAssets/images/flags/ru/khanty–mansi.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/khanty–mansi.png rename to Assets/WebsiteAssets/images/flags/ru/khanty–mansi.png diff --git a/Modules/WebsiteAssets/images/flags/ru/kirov.png b/Assets/WebsiteAssets/images/flags/ru/kirov.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/kirov.png rename to Assets/WebsiteAssets/images/flags/ru/kirov.png diff --git a/Modules/WebsiteAssets/images/flags/ru/komi.png b/Assets/WebsiteAssets/images/flags/ru/komi.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/komi.png rename to Assets/WebsiteAssets/images/flags/ru/komi.png diff --git a/Modules/WebsiteAssets/images/flags/ru/kostroma.png b/Assets/WebsiteAssets/images/flags/ru/kostroma.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/kostroma.png rename to Assets/WebsiteAssets/images/flags/ru/kostroma.png diff --git a/Modules/WebsiteAssets/images/flags/ru/krasnodar.png b/Assets/WebsiteAssets/images/flags/ru/krasnodar.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/krasnodar.png rename to Assets/WebsiteAssets/images/flags/ru/krasnodar.png diff --git a/Modules/WebsiteAssets/images/flags/ru/krasnoyarsk.png b/Assets/WebsiteAssets/images/flags/ru/krasnoyarsk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/krasnoyarsk.png rename to Assets/WebsiteAssets/images/flags/ru/krasnoyarsk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/kurgan.png b/Assets/WebsiteAssets/images/flags/ru/kurgan.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/kurgan.png rename to Assets/WebsiteAssets/images/flags/ru/kurgan.png diff --git a/Modules/WebsiteAssets/images/flags/ru/kursk.png b/Assets/WebsiteAssets/images/flags/ru/kursk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/kursk.png rename to Assets/WebsiteAssets/images/flags/ru/kursk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/leningrad.png b/Assets/WebsiteAssets/images/flags/ru/leningrad.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/leningrad.png rename to Assets/WebsiteAssets/images/flags/ru/leningrad.png diff --git a/Modules/WebsiteAssets/images/flags/ru/lipetsk.png b/Assets/WebsiteAssets/images/flags/ru/lipetsk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/lipetsk.png rename to Assets/WebsiteAssets/images/flags/ru/lipetsk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/magadan.png b/Assets/WebsiteAssets/images/flags/ru/magadan.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/magadan.png rename to Assets/WebsiteAssets/images/flags/ru/magadan.png diff --git a/Modules/WebsiteAssets/images/flags/ru/mari_el.png b/Assets/WebsiteAssets/images/flags/ru/mari_el.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/mari_el.png rename to Assets/WebsiteAssets/images/flags/ru/mari_el.png diff --git a/Modules/WebsiteAssets/images/flags/ru/mordovia.png b/Assets/WebsiteAssets/images/flags/ru/mordovia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/mordovia.png rename to Assets/WebsiteAssets/images/flags/ru/mordovia.png diff --git a/Modules/WebsiteAssets/images/flags/ru/moscow.png b/Assets/WebsiteAssets/images/flags/ru/moscow.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/moscow.png rename to Assets/WebsiteAssets/images/flags/ru/moscow.png diff --git a/Modules/WebsiteAssets/images/flags/ru/murmansk.png b/Assets/WebsiteAssets/images/flags/ru/murmansk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/murmansk.png rename to Assets/WebsiteAssets/images/flags/ru/murmansk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/nenets.png b/Assets/WebsiteAssets/images/flags/ru/nenets.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/nenets.png rename to Assets/WebsiteAssets/images/flags/ru/nenets.png diff --git a/Modules/WebsiteAssets/images/flags/ru/nizhny_novgorod.png b/Assets/WebsiteAssets/images/flags/ru/nizhny_novgorod.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/nizhny_novgorod.png rename to Assets/WebsiteAssets/images/flags/ru/nizhny_novgorod.png diff --git a/Modules/WebsiteAssets/images/flags/ru/north_ossetia-alania.png b/Assets/WebsiteAssets/images/flags/ru/north_ossetia-alania.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/north_ossetia-alania.png rename to Assets/WebsiteAssets/images/flags/ru/north_ossetia-alania.png diff --git a/Modules/WebsiteAssets/images/flags/ru/north_ossetia.png b/Assets/WebsiteAssets/images/flags/ru/north_ossetia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/north_ossetia.png rename to Assets/WebsiteAssets/images/flags/ru/north_ossetia.png diff --git a/Modules/WebsiteAssets/images/flags/ru/novgorod.png b/Assets/WebsiteAssets/images/flags/ru/novgorod.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/novgorod.png rename to Assets/WebsiteAssets/images/flags/ru/novgorod.png diff --git a/Modules/WebsiteAssets/images/flags/ru/novosibirsk.png b/Assets/WebsiteAssets/images/flags/ru/novosibirsk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/novosibirsk.png rename to Assets/WebsiteAssets/images/flags/ru/novosibirsk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/omsk.png b/Assets/WebsiteAssets/images/flags/ru/omsk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/omsk.png rename to Assets/WebsiteAssets/images/flags/ru/omsk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/orenburg.png b/Assets/WebsiteAssets/images/flags/ru/orenburg.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/orenburg.png rename to Assets/WebsiteAssets/images/flags/ru/orenburg.png diff --git a/Modules/WebsiteAssets/images/flags/ru/oryol.png b/Assets/WebsiteAssets/images/flags/ru/oryol.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/oryol.png rename to Assets/WebsiteAssets/images/flags/ru/oryol.png diff --git a/Modules/WebsiteAssets/images/flags/ru/penza.png b/Assets/WebsiteAssets/images/flags/ru/penza.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/penza.png rename to Assets/WebsiteAssets/images/flags/ru/penza.png diff --git a/Modules/WebsiteAssets/images/flags/ru/perm.png b/Assets/WebsiteAssets/images/flags/ru/perm.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/perm.png rename to Assets/WebsiteAssets/images/flags/ru/perm.png diff --git a/Modules/WebsiteAssets/images/flags/ru/primorsky.png b/Assets/WebsiteAssets/images/flags/ru/primorsky.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/primorsky.png rename to Assets/WebsiteAssets/images/flags/ru/primorsky.png diff --git a/Modules/WebsiteAssets/images/flags/ru/pskov.png b/Assets/WebsiteAssets/images/flags/ru/pskov.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/pskov.png rename to Assets/WebsiteAssets/images/flags/ru/pskov.png diff --git a/Modules/WebsiteAssets/images/flags/ru/rostov.png b/Assets/WebsiteAssets/images/flags/ru/rostov.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/rostov.png rename to Assets/WebsiteAssets/images/flags/ru/rostov.png diff --git a/Modules/WebsiteAssets/images/flags/ru/ryazan.png b/Assets/WebsiteAssets/images/flags/ru/ryazan.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/ryazan.png rename to Assets/WebsiteAssets/images/flags/ru/ryazan.png diff --git a/Modules/WebsiteAssets/images/flags/ru/sakha.png b/Assets/WebsiteAssets/images/flags/ru/sakha.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/sakha.png rename to Assets/WebsiteAssets/images/flags/ru/sakha.png diff --git a/Modules/WebsiteAssets/images/flags/ru/sakhalin.png b/Assets/WebsiteAssets/images/flags/ru/sakhalin.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/sakhalin.png rename to Assets/WebsiteAssets/images/flags/ru/sakhalin.png diff --git a/Modules/WebsiteAssets/images/flags/ru/samara.png b/Assets/WebsiteAssets/images/flags/ru/samara.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/samara.png rename to Assets/WebsiteAssets/images/flags/ru/samara.png diff --git a/Modules/WebsiteAssets/images/flags/ru/saratov.png b/Assets/WebsiteAssets/images/flags/ru/saratov.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/saratov.png rename to Assets/WebsiteAssets/images/flags/ru/saratov.png diff --git a/Modules/WebsiteAssets/images/flags/ru/smolensk.png b/Assets/WebsiteAssets/images/flags/ru/smolensk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/smolensk.png rename to Assets/WebsiteAssets/images/flags/ru/smolensk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/stavropol.png b/Assets/WebsiteAssets/images/flags/ru/stavropol.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/stavropol.png rename to Assets/WebsiteAssets/images/flags/ru/stavropol.png diff --git a/Modules/WebsiteAssets/images/flags/ru/sverdlovsk.png b/Assets/WebsiteAssets/images/flags/ru/sverdlovsk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/sverdlovsk.png rename to Assets/WebsiteAssets/images/flags/ru/sverdlovsk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/tambov.png b/Assets/WebsiteAssets/images/flags/ru/tambov.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/tambov.png rename to Assets/WebsiteAssets/images/flags/ru/tambov.png diff --git a/Modules/WebsiteAssets/images/flags/ru/tatarstan.png b/Assets/WebsiteAssets/images/flags/ru/tatarstan.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/tatarstan.png rename to Assets/WebsiteAssets/images/flags/ru/tatarstan.png diff --git a/Modules/WebsiteAssets/images/flags/ru/tomsk.png b/Assets/WebsiteAssets/images/flags/ru/tomsk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/tomsk.png rename to Assets/WebsiteAssets/images/flags/ru/tomsk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/tula.png b/Assets/WebsiteAssets/images/flags/ru/tula.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/tula.png rename to Assets/WebsiteAssets/images/flags/ru/tula.png diff --git a/Modules/WebsiteAssets/images/flags/ru/tuva.png b/Assets/WebsiteAssets/images/flags/ru/tuva.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/tuva.png rename to Assets/WebsiteAssets/images/flags/ru/tuva.png diff --git a/Modules/WebsiteAssets/images/flags/ru/tver.png b/Assets/WebsiteAssets/images/flags/ru/tver.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/tver.png rename to Assets/WebsiteAssets/images/flags/ru/tver.png diff --git a/Modules/WebsiteAssets/images/flags/ru/tyumen.png b/Assets/WebsiteAssets/images/flags/ru/tyumen.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/tyumen.png rename to Assets/WebsiteAssets/images/flags/ru/tyumen.png diff --git a/Modules/WebsiteAssets/images/flags/ru/udmurtia.png b/Assets/WebsiteAssets/images/flags/ru/udmurtia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/udmurtia.png rename to Assets/WebsiteAssets/images/flags/ru/udmurtia.png diff --git a/Modules/WebsiteAssets/images/flags/ru/ulyanovsk.png b/Assets/WebsiteAssets/images/flags/ru/ulyanovsk.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/ulyanovsk.png rename to Assets/WebsiteAssets/images/flags/ru/ulyanovsk.png diff --git a/Modules/WebsiteAssets/images/flags/ru/vladimir.png b/Assets/WebsiteAssets/images/flags/ru/vladimir.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/vladimir.png rename to Assets/WebsiteAssets/images/flags/ru/vladimir.png diff --git a/Modules/WebsiteAssets/images/flags/ru/volgograd.png b/Assets/WebsiteAssets/images/flags/ru/volgograd.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/volgograd.png rename to Assets/WebsiteAssets/images/flags/ru/volgograd.png diff --git a/Modules/WebsiteAssets/images/flags/ru/vologda.png b/Assets/WebsiteAssets/images/flags/ru/vologda.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/vologda.png rename to Assets/WebsiteAssets/images/flags/ru/vologda.png diff --git a/Modules/WebsiteAssets/images/flags/ru/voronezh.png b/Assets/WebsiteAssets/images/flags/ru/voronezh.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/voronezh.png rename to Assets/WebsiteAssets/images/flags/ru/voronezh.png diff --git a/Modules/WebsiteAssets/images/flags/ru/yamal-nenets.png b/Assets/WebsiteAssets/images/flags/ru/yamal-nenets.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/yamal-nenets.png rename to Assets/WebsiteAssets/images/flags/ru/yamal-nenets.png diff --git a/Modules/WebsiteAssets/images/flags/ru/yaroslavl.png b/Assets/WebsiteAssets/images/flags/ru/yaroslavl.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/yaroslavl.png rename to Assets/WebsiteAssets/images/flags/ru/yaroslavl.png diff --git a/Modules/WebsiteAssets/images/flags/ru/zabaykalsky.png b/Assets/WebsiteAssets/images/flags/ru/zabaykalsky.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/ru/zabaykalsky.png rename to Assets/WebsiteAssets/images/flags/ru/zabaykalsky.png diff --git a/Modules/WebsiteAssets/images/flags/us/Naval_Ensign_of_Maine.png b/Assets/WebsiteAssets/images/flags/us/Naval_Ensign_of_Maine.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/Naval_Ensign_of_Maine.png rename to Assets/WebsiteAssets/images/flags/us/Naval_Ensign_of_Maine.png diff --git a/Modules/WebsiteAssets/images/flags/us/Naval_Ensign_of_Massachusetts.png b/Assets/WebsiteAssets/images/flags/us/Naval_Ensign_of_Massachusetts.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/Naval_Ensign_of_Massachusetts.png rename to Assets/WebsiteAssets/images/flags/us/Naval_Ensign_of_Massachusetts.png diff --git a/Modules/WebsiteAssets/images/flags/us/alabama.png b/Assets/WebsiteAssets/images/flags/us/alabama.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/alabama.png rename to Assets/WebsiteAssets/images/flags/us/alabama.png diff --git a/Modules/WebsiteAssets/images/flags/us/alaska.png b/Assets/WebsiteAssets/images/flags/us/alaska.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/alaska.png rename to Assets/WebsiteAssets/images/flags/us/alaska.png diff --git a/Modules/WebsiteAssets/images/flags/us/arizona.png b/Assets/WebsiteAssets/images/flags/us/arizona.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/arizona.png rename to Assets/WebsiteAssets/images/flags/us/arizona.png diff --git a/Modules/WebsiteAssets/images/flags/us/arkansas.png b/Assets/WebsiteAssets/images/flags/us/arkansas.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/arkansas.png rename to Assets/WebsiteAssets/images/flags/us/arkansas.png diff --git a/Modules/WebsiteAssets/images/flags/us/california.png b/Assets/WebsiteAssets/images/flags/us/california.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/california.png rename to Assets/WebsiteAssets/images/flags/us/california.png diff --git a/Modules/WebsiteAssets/images/flags/us/colorado.png b/Assets/WebsiteAssets/images/flags/us/colorado.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/colorado.png rename to Assets/WebsiteAssets/images/flags/us/colorado.png diff --git a/Modules/WebsiteAssets/images/flags/us/connecticut.png b/Assets/WebsiteAssets/images/flags/us/connecticut.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/connecticut.png rename to Assets/WebsiteAssets/images/flags/us/connecticut.png diff --git a/Modules/WebsiteAssets/images/flags/us/delaware.png b/Assets/WebsiteAssets/images/flags/us/delaware.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/delaware.png rename to Assets/WebsiteAssets/images/flags/us/delaware.png diff --git a/Modules/WebsiteAssets/images/flags/us/district_of_columbia.png b/Assets/WebsiteAssets/images/flags/us/district_of_columbia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/district_of_columbia.png rename to Assets/WebsiteAssets/images/flags/us/district_of_columbia.png diff --git a/Modules/WebsiteAssets/images/flags/us/florida.png b/Assets/WebsiteAssets/images/flags/us/florida.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/florida.png rename to Assets/WebsiteAssets/images/flags/us/florida.png diff --git a/Modules/WebsiteAssets/images/flags/us/georgia.png b/Assets/WebsiteAssets/images/flags/us/georgia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/georgia.png rename to Assets/WebsiteAssets/images/flags/us/georgia.png diff --git a/Modules/WebsiteAssets/images/flags/us/hawaii.png b/Assets/WebsiteAssets/images/flags/us/hawaii.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/hawaii.png rename to Assets/WebsiteAssets/images/flags/us/hawaii.png diff --git a/Modules/WebsiteAssets/images/flags/us/idaho.png b/Assets/WebsiteAssets/images/flags/us/idaho.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/idaho.png rename to Assets/WebsiteAssets/images/flags/us/idaho.png diff --git a/Modules/WebsiteAssets/images/flags/us/illinois.png b/Assets/WebsiteAssets/images/flags/us/illinois.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/illinois.png rename to Assets/WebsiteAssets/images/flags/us/illinois.png diff --git a/Modules/WebsiteAssets/images/flags/us/indiana.png b/Assets/WebsiteAssets/images/flags/us/indiana.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/indiana.png rename to Assets/WebsiteAssets/images/flags/us/indiana.png diff --git a/Modules/WebsiteAssets/images/flags/us/iowa.png b/Assets/WebsiteAssets/images/flags/us/iowa.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/iowa.png rename to Assets/WebsiteAssets/images/flags/us/iowa.png diff --git a/Modules/WebsiteAssets/images/flags/us/kansas.png b/Assets/WebsiteAssets/images/flags/us/kansas.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/kansas.png rename to Assets/WebsiteAssets/images/flags/us/kansas.png diff --git a/Modules/WebsiteAssets/images/flags/us/kentucky.png b/Assets/WebsiteAssets/images/flags/us/kentucky.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/kentucky.png rename to Assets/WebsiteAssets/images/flags/us/kentucky.png diff --git a/Modules/WebsiteAssets/images/flags/us/louisiana.png b/Assets/WebsiteAssets/images/flags/us/louisiana.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/louisiana.png rename to Assets/WebsiteAssets/images/flags/us/louisiana.png diff --git a/Modules/WebsiteAssets/images/flags/us/maine.png b/Assets/WebsiteAssets/images/flags/us/maine.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/maine.png rename to Assets/WebsiteAssets/images/flags/us/maine.png diff --git a/Modules/WebsiteAssets/images/flags/us/maryland.png b/Assets/WebsiteAssets/images/flags/us/maryland.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/maryland.png rename to Assets/WebsiteAssets/images/flags/us/maryland.png diff --git a/Modules/WebsiteAssets/images/flags/us/massachusetts.png b/Assets/WebsiteAssets/images/flags/us/massachusetts.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/massachusetts.png rename to Assets/WebsiteAssets/images/flags/us/massachusetts.png diff --git a/Modules/WebsiteAssets/images/flags/us/michigan.png b/Assets/WebsiteAssets/images/flags/us/michigan.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/michigan.png rename to Assets/WebsiteAssets/images/flags/us/michigan.png diff --git a/Modules/WebsiteAssets/images/flags/us/minnesota.png b/Assets/WebsiteAssets/images/flags/us/minnesota.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/minnesota.png rename to Assets/WebsiteAssets/images/flags/us/minnesota.png diff --git a/Modules/WebsiteAssets/images/flags/us/mississippi.png b/Assets/WebsiteAssets/images/flags/us/mississippi.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/mississippi.png rename to Assets/WebsiteAssets/images/flags/us/mississippi.png diff --git a/Modules/WebsiteAssets/images/flags/us/missouri.png b/Assets/WebsiteAssets/images/flags/us/missouri.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/missouri.png rename to Assets/WebsiteAssets/images/flags/us/missouri.png diff --git a/Modules/WebsiteAssets/images/flags/us/montana.png b/Assets/WebsiteAssets/images/flags/us/montana.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/montana.png rename to Assets/WebsiteAssets/images/flags/us/montana.png diff --git a/Modules/WebsiteAssets/images/flags/us/nebraska.png b/Assets/WebsiteAssets/images/flags/us/nebraska.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/nebraska.png rename to Assets/WebsiteAssets/images/flags/us/nebraska.png diff --git a/Modules/WebsiteAssets/images/flags/us/nevada.png b/Assets/WebsiteAssets/images/flags/us/nevada.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/nevada.png rename to Assets/WebsiteAssets/images/flags/us/nevada.png diff --git a/Modules/WebsiteAssets/images/flags/us/new_hampshire.png b/Assets/WebsiteAssets/images/flags/us/new_hampshire.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/new_hampshire.png rename to Assets/WebsiteAssets/images/flags/us/new_hampshire.png diff --git a/Modules/WebsiteAssets/images/flags/us/new_jersey.png b/Assets/WebsiteAssets/images/flags/us/new_jersey.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/new_jersey.png rename to Assets/WebsiteAssets/images/flags/us/new_jersey.png diff --git a/Modules/WebsiteAssets/images/flags/us/new_mexico.png b/Assets/WebsiteAssets/images/flags/us/new_mexico.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/new_mexico.png rename to Assets/WebsiteAssets/images/flags/us/new_mexico.png diff --git a/Modules/WebsiteAssets/images/flags/us/new_york.png b/Assets/WebsiteAssets/images/flags/us/new_york.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/new_york.png rename to Assets/WebsiteAssets/images/flags/us/new_york.png diff --git a/Modules/WebsiteAssets/images/flags/us/north_carolina.png b/Assets/WebsiteAssets/images/flags/us/north_carolina.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/north_carolina.png rename to Assets/WebsiteAssets/images/flags/us/north_carolina.png diff --git a/Modules/WebsiteAssets/images/flags/us/north_dakota.png b/Assets/WebsiteAssets/images/flags/us/north_dakota.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/north_dakota.png rename to Assets/WebsiteAssets/images/flags/us/north_dakota.png diff --git a/Modules/WebsiteAssets/images/flags/us/ohio.png b/Assets/WebsiteAssets/images/flags/us/ohio.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/ohio.png rename to Assets/WebsiteAssets/images/flags/us/ohio.png diff --git a/Modules/WebsiteAssets/images/flags/us/oklahoma.png b/Assets/WebsiteAssets/images/flags/us/oklahoma.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/oklahoma.png rename to Assets/WebsiteAssets/images/flags/us/oklahoma.png diff --git a/Modules/WebsiteAssets/images/flags/us/oregon.png b/Assets/WebsiteAssets/images/flags/us/oregon.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/oregon.png rename to Assets/WebsiteAssets/images/flags/us/oregon.png diff --git a/Modules/WebsiteAssets/images/flags/us/pennsylvania.png b/Assets/WebsiteAssets/images/flags/us/pennsylvania.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/pennsylvania.png rename to Assets/WebsiteAssets/images/flags/us/pennsylvania.png diff --git a/Modules/WebsiteAssets/images/flags/us/rhode_island.png b/Assets/WebsiteAssets/images/flags/us/rhode_island.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/rhode_island.png rename to Assets/WebsiteAssets/images/flags/us/rhode_island.png diff --git a/Modules/WebsiteAssets/images/flags/us/south_carolina.png b/Assets/WebsiteAssets/images/flags/us/south_carolina.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/south_carolina.png rename to Assets/WebsiteAssets/images/flags/us/south_carolina.png diff --git a/Modules/WebsiteAssets/images/flags/us/south_dakota.png b/Assets/WebsiteAssets/images/flags/us/south_dakota.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/south_dakota.png rename to Assets/WebsiteAssets/images/flags/us/south_dakota.png diff --git a/Modules/WebsiteAssets/images/flags/us/tennessee.png b/Assets/WebsiteAssets/images/flags/us/tennessee.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/tennessee.png rename to Assets/WebsiteAssets/images/flags/us/tennessee.png diff --git a/Modules/WebsiteAssets/images/flags/us/texas.png b/Assets/WebsiteAssets/images/flags/us/texas.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/texas.png rename to Assets/WebsiteAssets/images/flags/us/texas.png diff --git a/Modules/WebsiteAssets/images/flags/us/utah.png b/Assets/WebsiteAssets/images/flags/us/utah.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/utah.png rename to Assets/WebsiteAssets/images/flags/us/utah.png diff --git a/Modules/WebsiteAssets/images/flags/us/vermont.png b/Assets/WebsiteAssets/images/flags/us/vermont.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/vermont.png rename to Assets/WebsiteAssets/images/flags/us/vermont.png diff --git a/Modules/WebsiteAssets/images/flags/us/virginia.png b/Assets/WebsiteAssets/images/flags/us/virginia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/virginia.png rename to Assets/WebsiteAssets/images/flags/us/virginia.png diff --git a/Modules/WebsiteAssets/images/flags/us/washington.png b/Assets/WebsiteAssets/images/flags/us/washington.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/washington.png rename to Assets/WebsiteAssets/images/flags/us/washington.png diff --git a/Modules/WebsiteAssets/images/flags/us/west_virginia.png b/Assets/WebsiteAssets/images/flags/us/west_virginia.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/west_virginia.png rename to Assets/WebsiteAssets/images/flags/us/west_virginia.png diff --git a/Modules/WebsiteAssets/images/flags/us/wisconsin.png b/Assets/WebsiteAssets/images/flags/us/wisconsin.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/wisconsin.png rename to Assets/WebsiteAssets/images/flags/us/wisconsin.png diff --git a/Modules/WebsiteAssets/images/flags/us/wyoming.png b/Assets/WebsiteAssets/images/flags/us/wyoming.png similarity index 100% rename from Modules/WebsiteAssets/images/flags/us/wyoming.png rename to Assets/WebsiteAssets/images/flags/us/wyoming.png diff --git a/Modules/WebsiteAssets/images/md_plugins/abbr_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/abbr_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/abbr_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/abbr_plugin.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/deflist_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/deflist_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/deflist_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/deflist_plugin.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/emoji_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/emoji_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/emoji_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/emoji_plugin.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/footnote_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/footnote_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/footnote_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/footnote_plugin.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/fountain_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/fountain_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/fountain_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/fountain_plugin.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/insert_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/insert_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/insert_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/insert_plugin.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/katex_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/katex_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/katex_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/katex_plugin.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/mark_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/mark_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/mark_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/mark_plugin.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/mermaid.jpg b/Assets/WebsiteAssets/images/md_plugins/mermaid.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/mermaid.jpg rename to Assets/WebsiteAssets/images/md_plugins/mermaid.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/multitable_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/multitable_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/multitable_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/multitable_plugin.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/softbreaks_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/softbreaks_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/softbreaks_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/softbreaks_plugin.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/sub_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/sub_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/sub_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/sub_plugin.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/sup_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/sup_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/sup_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/sup_plugin.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/toc_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/toc_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/toc_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/toc_plugin.jpg diff --git a/Modules/WebsiteAssets/images/md_plugins/typographer_plugin.jpg b/Assets/WebsiteAssets/images/md_plugins/typographer_plugin.jpg similarity index 100% rename from Modules/WebsiteAssets/images/md_plugins/typographer_plugin.jpg rename to Assets/WebsiteAssets/images/md_plugins/typographer_plugin.jpg diff --git a/Modules/WebsiteAssets/images/nextcloud-logo-background.png b/Assets/WebsiteAssets/images/nextcloud-logo-background.png similarity index 100% rename from Modules/WebsiteAssets/images/nextcloud-logo-background.png rename to Assets/WebsiteAssets/images/nextcloud-logo-background.png diff --git a/Modules/WebsiteAssets/images/sponsors/RingingSupply.svg b/Assets/WebsiteAssets/images/sponsors/RingingSupply.svg similarity index 100% rename from Modules/WebsiteAssets/images/sponsors/RingingSupply.svg rename to Assets/WebsiteAssets/images/sponsors/RingingSupply.svg diff --git a/Modules/WebsiteAssets/images/sponsors/SeireiNetwork.png b/Assets/WebsiteAssets/images/sponsors/SeireiNetwork.png similarity index 100% rename from Modules/WebsiteAssets/images/sponsors/SeireiNetwork.png rename to Assets/WebsiteAssets/images/sponsors/SeireiNetwork.png diff --git a/Modules/WebsiteAssets/js/jquery-3.2.1.slim.min.js b/Assets/WebsiteAssets/js/jquery-3.2.1.slim.min.js similarity index 100% rename from Modules/WebsiteAssets/js/jquery-3.2.1.slim.min.js rename to Assets/WebsiteAssets/js/jquery-3.2.1.slim.min.js diff --git a/Modules/WebsiteAssets/webfonts/fa-brands-400.eot b/Assets/WebsiteAssets/webfonts/fa-brands-400.eot similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-brands-400.eot rename to Assets/WebsiteAssets/webfonts/fa-brands-400.eot diff --git a/Modules/WebsiteAssets/webfonts/fa-brands-400.svg b/Assets/WebsiteAssets/webfonts/fa-brands-400.svg similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-brands-400.svg rename to Assets/WebsiteAssets/webfonts/fa-brands-400.svg diff --git a/Modules/WebsiteAssets/webfonts/fa-brands-400.ttf b/Assets/WebsiteAssets/webfonts/fa-brands-400.ttf similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-brands-400.ttf rename to Assets/WebsiteAssets/webfonts/fa-brands-400.ttf diff --git a/Modules/WebsiteAssets/webfonts/fa-brands-400.woff b/Assets/WebsiteAssets/webfonts/fa-brands-400.woff similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-brands-400.woff rename to Assets/WebsiteAssets/webfonts/fa-brands-400.woff diff --git a/Modules/WebsiteAssets/webfonts/fa-brands-400.woff2 b/Assets/WebsiteAssets/webfonts/fa-brands-400.woff2 similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-brands-400.woff2 rename to Assets/WebsiteAssets/webfonts/fa-brands-400.woff2 diff --git a/Modules/WebsiteAssets/webfonts/fa-regular-400.eot b/Assets/WebsiteAssets/webfonts/fa-regular-400.eot similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-regular-400.eot rename to Assets/WebsiteAssets/webfonts/fa-regular-400.eot diff --git a/Modules/WebsiteAssets/webfonts/fa-regular-400.svg b/Assets/WebsiteAssets/webfonts/fa-regular-400.svg similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-regular-400.svg rename to Assets/WebsiteAssets/webfonts/fa-regular-400.svg diff --git a/Modules/WebsiteAssets/webfonts/fa-regular-400.ttf b/Assets/WebsiteAssets/webfonts/fa-regular-400.ttf similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-regular-400.ttf rename to Assets/WebsiteAssets/webfonts/fa-regular-400.ttf diff --git a/Modules/WebsiteAssets/webfonts/fa-regular-400.woff b/Assets/WebsiteAssets/webfonts/fa-regular-400.woff similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-regular-400.woff rename to Assets/WebsiteAssets/webfonts/fa-regular-400.woff diff --git a/Modules/WebsiteAssets/webfonts/fa-regular-400.woff2 b/Assets/WebsiteAssets/webfonts/fa-regular-400.woff2 similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-regular-400.woff2 rename to Assets/WebsiteAssets/webfonts/fa-regular-400.woff2 diff --git a/Modules/WebsiteAssets/webfonts/fa-solid-900.eot b/Assets/WebsiteAssets/webfonts/fa-solid-900.eot similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-solid-900.eot rename to Assets/WebsiteAssets/webfonts/fa-solid-900.eot diff --git a/Modules/WebsiteAssets/webfonts/fa-solid-900.svg b/Assets/WebsiteAssets/webfonts/fa-solid-900.svg similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-solid-900.svg rename to Assets/WebsiteAssets/webfonts/fa-solid-900.svg diff --git a/Modules/WebsiteAssets/webfonts/fa-solid-900.ttf b/Assets/WebsiteAssets/webfonts/fa-solid-900.ttf similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-solid-900.ttf rename to Assets/WebsiteAssets/webfonts/fa-solid-900.ttf diff --git a/Modules/WebsiteAssets/webfonts/fa-solid-900.woff b/Assets/WebsiteAssets/webfonts/fa-solid-900.woff similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-solid-900.woff rename to Assets/WebsiteAssets/webfonts/fa-solid-900.woff diff --git a/Modules/WebsiteAssets/webfonts/fa-solid-900.woff2 b/Assets/WebsiteAssets/webfonts/fa-solid-900.woff2 similarity index 100% rename from Modules/WebsiteAssets/webfonts/fa-solid-900.woff2 rename to Assets/WebsiteAssets/webfonts/fa-solid-900.woff2 diff --git a/BUILD.md b/BUILD.md index a02eda65f9..bf0014f64d 100644 --- a/BUILD.md +++ b/BUILD.md @@ -2,11 +2,24 @@ # Building the applications -Note that all the applications share the same library, which, for historical reasons, is in `ReactNativeClient/lib`. This library is copied to the relevant directories when building each app. +The Joplin source code is hosted on a [monorepo](https://en.wikipedia.org/wiki/Monorepo) managed by Lerna. The usage of Lerna is mostly transparent as the needed commands have been moved to the root package.json and thus are invoked for example when running `npm install` or `npm run watch`. The main thing to know about Lerna is that it links the packages in the monorepo using `npm link`, so if you check the node_modules directory you will see links instead of actual directories for certain packages. This is something to keep in mind as these links can cause issues in some cases. + +The list of the main sub-packages is below: + +Package name | Description +--- | --- +app-cli | The CLI application +app-clipper | The web clipper +app-desktop | The desktop application +app-mobile | The mobile application +lib | The core library, shared by all applications. It deals with things like synchronisation, encryption, import/export, database and pretty much all the app business logic +renderer | The Joplin Markdown and HTML renderer +tools | Tools used to build the apps and other tasks + +There are also a few forks of existing packages under the "fork-*" name. ## Required dependencies -- Install yarn - https://yarnpkg.com/lang/en/docs/install/ - Install node 10+ - https://nodejs.org/en/ - macOS, Linux: Install rsync - https://nodejs.org/en/ - macOS: Install Cocoapods - `brew install cocoapods` @@ -23,33 +36,32 @@ Then you can test the various applications: ## Testing the desktop application - cd ElectronClient + cd packages/app-desktop npm start You can also run it under WSL 2. To do so, [follow these instructions](https://www.beekeeperstudio.io/blog/building-electron-windows-ubuntu-wsl2) to setup your environment. ## Testing the Terminal application - cd CliClient + cd packages/app-cli npm start ## Testing the Mobile application First you need to setup React Native to build projects with native code. For this, follow the instructions on the [Get Started](https://facebook.github.io/react-native/docs/getting-started.html) tutorial, in the "React Native CLI Quickstart" tab. -Then: +Then, for **Android**: - cd ReactNativeClient - npm run start-android - # Or: npm run start-ios + cd packages/app-mobile/android + ./gradlew installDebug # or gradlew.bat installDebug on Windows -To run the iOS application, it might be easier to open the file `ios/Joplin.xcworkspace` on XCode and run the app from there. +On **iOS**, open the file `ios/Joplin.xcworkspace` on XCode and run the app from there. -Normally the bundler should start automatically with the application. If it doesn't, run `npm start`. +Normally the **bundler** should start automatically with the application. If it doesn't, run `npm start` from `packages/app-mobile`. ## Building the clipper - cd Clipper/popup + cd packages/app-clipper/popup npm install npm run watch # To watch for changes @@ -57,30 +69,36 @@ To test the extension please refer to the relevant pages for each browser: [Fire ## Watching files -To make changes to the application, you'll need to rebuild any TypeScript file you've changed, and rebuild the lib. The simplest way to do all this is to watch for changes from the root of the project. Simply run this command, and it should take care of the rest: +To make changes to the application, you'll need to rebuild any TypeScript file you've changed. The simplest way to do this is to watch for changes from the root of the project. Simply run this command, and it should take care of the rest: npm run watch -Running `npm run build` would have the same effect, but without watching. +Running `npm run tsc` would have the same effect, but without watching. ## Running an application with additional parameters You can specify additional parameters when running the desktop or CLI application. To do so, add `--` to the `npm start` command, followed by your flags. For example: - npm start -- --profile ~/MyTestProfile + npm start -- --debug + +## Adding a new dependency + +Since Joplin uses Lerna, adding a new dependency should not be done using `npm i -s ...`. Instead you should use the `lerna add` command, which will take care of adding the package while handling the linked packages correctly. For example, to add the package "leftpad" to the "app-desktop" sub-package, you would run: + + npx lerna add leftpad --scope=@joplinapp/app-desktop + +Note that you should most likely always specify a scope because otherwise it will add the package to all the sub-packages. ## TypeScript -Most of the application is written in JavaScript, however new classes and files should generally be written in [TypeScript](https://www.typescriptlang.org/). All TypeScript files are generated next to the .ts or .tsx file. So for example, if there's a file "lib/MyClass.ts", there will be a generated "lib/MyClass.js" next to it. It is implemented that way as it requires minimal changes to integrate TypeScript in the existing JavaScript code base. - -In the current setup, `tsc` is executed from the root of the project, and will compile everything in CliClient, ElectronClient, etc. This is more convenient to have just one place to compile everything, and it also means there's only one watch command to run. However, one drawback is that TypeScript doesn't find types defined in node_modules folders in sub-directories. For example, if you install `immer` in ElectronClient, then try to use the package, TypeScript will report that it cannot find this module. In theory using `typeRoots`, it should be possible to make it find the right modules but it doesn't seem to work in this case. Currently the workaround is to install any such package at the root of the project. By doing so, TypeScript will find the type definitions and compilation will work. It's not ideal since the module is installed at the root even though it's not used, but for now that will work. +The application was originally written JavaScript, however it has slowly been migrated to [TypeScript](https://www.typescriptlang.org/). New classes and files should be written in TypeScript. All compiled files are generated next to the .ts or .tsx file. So for example, if there's a file "lib/MyClass.ts", there will be a generated "lib/MyClass.js" next to it. It is implemented that way as it requires minimal changes to integrate TypeScript in the existing JavaScript code base. ## Hot reload If you'd like to auto-reload the desktop app on changes rather than having to quit and restart it manually each time, you can use [watchman-make](https://facebook.github.io/watchman/docs/watchman-make.html): ```sh -cd ElectronClient +cd packages/app-desktop watchman-make -p '**/*.js' '**/*.jsx' --run "npm start" ``` @@ -90,10 +108,6 @@ It still requires you to quit the application each time you want it to rebuild, 2. Switch to the Electron app and cmd+Q to quit it. 3. `watchman` immediately restarts the app for you (whereas usually you'd have to switch back to the terminal, type `"npm start"`, and hit enter). -# Updating Markdown renderer packages - -The Markdown renderer is located under ReactNativeClient/lib/joplin-renderer. Whenever updating one of its dependencies, such as Mermaid or Katex, please run `npm run buildAssets` to make sure all assets such as fonts or CSS files are deployed correctly. - # Troubleshooting Please read for the [Build Troubleshooting Document](https://github.com/laurent22/joplin/blob/dev/readme/build_troubleshooting.md) for various tips on how to get the build working. \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f58d25a7ad..0a36ad11fb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -46,7 +46,7 @@ Coding style is enforced by a pre-commit hook that runs eslint. This hook is ins For new React components, please use [React Hooks](https://reactjs.org/docs/hooks-intro.html). For new code in general, please use TypeScript (unless you are modifying a file that was originally in JavaScript). -For changes made to the Desktop client that affect the user interface, refer to `ElectronClient/app/theme.js` for all styling information. The goal is to create a consistent user interface to allow for easy navigation of Joplin's various features and improve the overall user experience. +For changes made to the Desktop client that affect the user interface, refer to `packages/app-desktop/app/theme.js` for all styling information. The goal is to create a consistent user interface to allow for easy navigation of Joplin's various features and improve the overall user experience. ## Automated tests @@ -56,11 +56,11 @@ When submitting a pull request for a new feature or a bug fix, please add automa * **Feature tests** on the other hand are to test higher level functionalities such as interactions with the GUI and how they affect the underlying model. Often these tests would dispatch Redux actions, and inspect how the application state has been changed. The feature tests should be prefixed with "feature_", for example "feature_TagList". There's a good explanation on what qualifies as a feature test in [this post](https://github.com/laurent22/joplin/pull/2819#issuecomment-603502230). -The tests are under CliClient/tests. To get them running, you first need to build the CLI app: +The tests are under packages/app-cli/tests. To get them running, you first need to build the CLI app: ```sh npm install -cd CliClient +cd packages/app-cli ``` To run all the test units: diff --git a/CliClient/fuzzing.sh b/CliClient/fuzzing.sh deleted file mode 100755 index aea8ddbc27..0000000000 --- a/CliClient/fuzzing.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -set -e -npm run build && NODE_PATH="build/" node build/fuzzing.js \ No newline at end of file diff --git a/CliClient/gulpfile.js b/CliClient/gulpfile.js deleted file mode 100644 index 112681e2dd..0000000000 --- a/CliClient/gulpfile.js +++ /dev/null @@ -1,84 +0,0 @@ -const gulp = require('gulp'); -const fs = require('fs-extra'); -const utils = require('../Tools/gulp/utils'); -const tasks = { - compileExtensions: { - fn: require('../Tools/gulp/tasks/compileExtensions.js'), - }, - copyLib: require('../Tools/gulp/tasks/copyLib'), - tsc: require('../Tools/gulp/tasks/tsc'), - updateIgnoredTypeScriptBuild: require('../Tools/gulp/tasks/updateIgnoredTypeScriptBuild'), -}; - -tasks.prepareBuild = { - fn: async () => { - const buildDir = `${__dirname}/build`; - await utils.copyDir(`${__dirname}/app`, buildDir, { - excluded: ['node_modules'], - }); - await utils.copyDir(`${__dirname}/locales-build`, `${buildDir}/locales`); - await tasks.copyLib.fn(); - await utils.copyFile(`${__dirname}/package.json`, `${buildDir}/package.json`); - await utils.copyFile(`${__dirname}/package-lock.json`, `${buildDir}/package-lock.json`); - await utils.copyFile(`${__dirname}/gulpfile.js`, `${buildDir}/gulpfile.js`); - - // Import all the patches inside the CliClient directory - // and build file. Needs to be in CliClient dir for when running - // in dev mode, and in build dir for production. - const localPatchDir = `${buildDir}/patches`; - await fs.remove(localPatchDir); - await fs.mkdirp(localPatchDir); - await utils.copyDir(`${__dirname}/../patches/shared`, `${localPatchDir}`, { delete: false }); - await utils.copyDir(`${__dirname}/../patches/node`, `${localPatchDir}`, { delete: false }); - - await fs.remove(`${__dirname}/patches`); - await utils.copyDir(`${localPatchDir}`, `${__dirname}/patches`); - - const packageRaw = await fs.readFile(`${buildDir}/package.json`); - const package = JSON.parse(packageRaw.toString()); - package.scripts.postinstall = 'patch-package'; - await fs.writeFile(`${buildDir}/package.json`, JSON.stringify(package, null, 2), 'utf8'); - - fs.chmodSync(`${buildDir}/main.js`, 0o755); - }, -}; - -tasks.prepareTestBuild = { - fn: async () => { - const testBuildDir = `${__dirname}/tests-build`; - - await utils.copyDir(`${__dirname}/tests`, testBuildDir, { - excluded: [ - 'lib/', - 'locales/', - 'node_modules/', - '*.ts', - '*.tsx', - ], - }); - - const rootDir = utils.rootDir(); - - await utils.copyDir(`${rootDir}/ReactNativeClient/lib`, `${testBuildDir}/lib`, { - excluded: [ - `${rootDir}/ReactNativeClient/lib/joplin-renderer/node_modules`, - ], - }); - await utils.copyDir(`${rootDir}/ReactNativeClient/locales`, `${testBuildDir}/locales`); - await fs.mkdirp(`${testBuildDir}/data`); - }, -}; - -utils.registerGulpTasks(gulp, tasks); - -gulp.task('build', gulp.series([ - 'prepareBuild', - 'compileExtensions', - 'copyLib', -])); - -gulp.task('buildTests', gulp.series([ - 'prepareTestBuild', - 'compileExtensions', - 'copyLib', -])); diff --git a/CliClient/package.json b/CliClient/package.json deleted file mode 100644 index 8f7ab2c695..0000000000 --- a/CliClient/package.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "name": "joplin", - "description": "Joplin CLI Client", - "license": "MIT", - "author": "Laurent Cozic", - "scripts": { - "test": "gulp buildTests -L && node node_modules/jasmine/bin/jasmine.js --fail-fast=true --config=tests/support/jasmine.json", - "test-ci": "gulp buildTests -L && node node_modules/jasmine/bin/jasmine.js --config=tests/support/jasmine.json", - "postinstall": "npm run build && patch-package --patch-dir ./patches", - "build": "gulp build", - "start": "gulp build -L && node 'build/main.js' --stack-trace-enabled --log-level debug --env dev" - }, - "bugs": { - "url": "https://github.com/laurent22/joplin/issues" - }, - "repository": { - "type": "git", - "url": "https://github.com/laurent22/joplin" - }, - "copyright": { - "title": "Joplin CLI", - "years": [ - 2016, - 2017, - 2018, - 2019, - 2020 - ], - "owner": "Laurent Cozic" - }, - "version": "1.3.3", - "bin": { - "joplin": "./main.js" - }, - "engines": { - "node": ">=10.0.0" - }, - "dependencies": { - "app-module-path": "^2.2.0", - "async-mutex": "^0.1.3", - "aws-sdk": "^2.588.0", - "base-64": "^0.1.0", - "base64-stream": "^1.0.0", - "builtin-modules": "^3.1.0", - "clean-html": "^1.5.0", - "compare-version": "^0.1.2", - "diacritics": "^1.3.0", - "diff-match-patch": "^1.0.4", - "es6-promise-pool": "^2.5.0", - "file-uri-to-path": "^1.0.0", - "follow-redirects": "^1.2.4", - "font-awesome-filetypes": "^2.1.0", - "form-data": "^2.1.4", - "fs-extra": "^5.0.0", - "highlight.js": "^10.2.1", - "html-entities": "^1.2.1", - "html-minifier": "^3.5.15", - "htmlparser2": "^4.1.0", - "image-data-uri": "^2.0.0", - "image-type": "^3.0.0", - "immer": "^7.0.14", - "joplin-turndown": "^4.0.30", - "joplin-turndown-plugin-gfm": "^1.0.12", - "json-stringify-safe": "^5.0.1", - "jssha": "^2.3.0", - "katex": "^0.12.0", - "keytar": "^5.4.0", - "levenshtein": "^1.0.5", - "markdown-it": "^10.0.0", - "markdown-it-abbr": "^1.0.4", - "markdown-it-anchor": "^5.2.5", - "markdown-it-deflist": "^2.0.3", - "markdown-it-emoji": "^1.4.0", - "markdown-it-expand-tabs": "^1.0.13", - "markdown-it-footnote": "^3.0.2", - "markdown-it-ins": "^3.0.0", - "markdown-it-mark": "^3.0.0", - "markdown-it-multimd-table": "^4.0.1", - "markdown-it-sub": "^1.0.0", - "markdown-it-sup": "^1.0.0", - "markdown-it-toc-done-right": "^4.1.0", - "md5": "^2.2.1", - "md5-file": "^4.0.0", - "mime": "^2.0.3", - "moment": "^2.24.0", - "multiparty": "^4.2.1", - "nanoid": "^3.1.12", - "node-emoji": "^1.8.1", - "node-fetch": "^1.7.1", - "node-persist": "^2.1.0", - "open": "^7.0.4", - "patch-package": "^6.2.2", - "promise": "^7.1.1", - "proper-lockfile": "^2.0.1", - "query-string": "4.3.4", - "re-reselect": "^4.0.0", - "read-chunk": "^2.1.0", - "redux": "^3.7.2", - "relative": "^3.0.2", - "request": "^2.88.0", - "reselect": "^4.0.0", - "sax": "^1.2.4", - "server-destroy": "^1.0.1", - "sharp": "^0.23.2", - "sprintf-js": "^1.1.1", - "sqlite3": "^4.1.1", - "string-padding": "^1.0.2", - "string-to-stream": "^1.1.0", - "strip-ansi": "^4.0.0", - "syswide-cas": "^5.2.0", - "tar": "^4.4.10", - "tcp-port-used": "^0.1.2", - "terminal-kit": "^1.30.0", - "tkwidgets": "^0.5.26", - "url-parse": "^1.4.7", - "uslug": "git+https://github.com/laurent22/uslug.git#emoji-support", - "uuid": "^3.0.1", - "valid-url": "^1.0.9", - "word-wrap": "^1.2.3", - "xml2js": "^0.4.19", - "yargs-parser": "^7.0.0" - }, - "devDependencies": { - "gulp": "^4.0.2", - "jasmine": "^3.5.0", - "temp": "^0.9.1" - } -} diff --git a/ElectronClient/.gitignore b/ElectronClient/.gitignore deleted file mode 100644 index 2cfe42a9c3..0000000000 --- a/ElectronClient/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -node_modules/ -packageInfo.js -dist/ -lib/ -*.min.js -.DS_Store -gui/note-viewer/pluginAssets/ -pluginAssets/ \ No newline at end of file diff --git a/ElectronClient/gulpfile.js b/ElectronClient/gulpfile.js deleted file mode 100644 index 165a64a43d..0000000000 --- a/ElectronClient/gulpfile.js +++ /dev/null @@ -1,51 +0,0 @@ -const gulp = require('gulp'); -const utils = require('../Tools/gulp/utils'); - -const tasks = { - compileScripts: { - fn: require('./tools/compileScripts'), - }, - compilePackageInfo: { - fn: require('./tools/compile-package-info.js'), - }, - copyPluginAssets: { - fn: require('./tools/copyPluginAssets.js'), - }, - copyTinyMceLangs: { - fn: require('./tools/copyTinyMceLangs.js'), - }, - electronRebuild: { - fn: require('./tools/electronRebuild.js'), - }, - compileExtensions: { - fn: require('../Tools/gulp/tasks/compileExtensions.js'), - }, - copyLib: require('../Tools/gulp/tasks/copyLib'), - tsc: require('../Tools/gulp/tasks/tsc'), - updateIgnoredTypeScriptBuild: require('../Tools/gulp/tasks/updateIgnoredTypeScriptBuild'), -}; - -utils.registerGulpTasks(gulp, tasks); - -const buildSeries = [ - 'compileExtensions', - 'copyLib', -]; - -// On Windows also run tsc because `npm run watch` locks some folders -// which makes the copyPluginAssets command fail. For that reason, -// it's not possible to run watch on Windows while testing the desktop app. -if (require('os').platform() === 'win32') { - // buildSeries.push('tsc'); -} - -const buildParallel = [ - gulp.series(...buildSeries), - 'compileScripts', - 'compilePackageInfo', - 'copyPluginAssets', - 'copyTinyMceLangs', - 'updateIgnoredTypeScriptBuild', -]; - -gulp.task('build', gulp.parallel(...buildParallel)); diff --git a/README.md b/README.md index 7298c6240e..4338c46960 100644 --- a/README.md +++ b/README.md @@ -411,7 +411,7 @@ Please see the guide for information on how to contribute to the development of Joplin is currently available in the languages below. If you would like to contribute a **new translation**, it is quite straightforward, please follow these steps: - [Download Poedit](https://poedit.net/), the translation editor, and install it. -- [Download the file to be translated](https://raw.githubusercontent.com/laurent22/joplin/dev/CliClient/locales/joplin.pot). +- [Download the file to be translated](https://raw.githubusercontent.com/laurent22/joplin/dev/packages/app-cli/locales/joplin.pot). - In Poedit, open this .pot file, go into the Catalog menu and click Configuration. Change "Country" and "Language" to your own country and language. - From then you can translate the file. - Once it is done, please [open a pull request](https://github.com/laurent22/joplin/pulls) and add the file to it. @@ -425,44 +425,44 @@ Current translations:   | Language | Po File | Last translator | Percent done ---|---|---|---|--- -![](https://joplinapp.org/images/flags/country-4x3/arableague.png) | Arabic | [ar](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/ar.po) | [أحمد باشا إبراهيم](mailto:fi_ahmed_bacha@esi.dz) | 78% -![](https://joplinapp.org/images/flags/es/basque_country.png) | Basque | [eu](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/eu.po) | juan.abasolo@ehu.eus | 33% -![](https://joplinapp.org/images/flags/country-4x3/ba.png) | Bosnian | [bs_BA](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/bs_BA.po) | [Derviš T.](mailto:dervis.t@pm.me) | 82% -![](https://joplinapp.org/images/flags/country-4x3/bg.png) | Bulgarian | [bg_BG](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/bg_BG.po) | | 65% -![](https://joplinapp.org/images/flags/es/catalonia.png) | Catalan | [ca](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/ca.po) | jmontane, 2019 | 95% -![](https://joplinapp.org/images/flags/country-4x3/hr.png) | Croatian | [hr_HR](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/hr_HR.po) | [Hrvoje Mandić](mailto:trbuhom@net.hr) | 27% -![](https://joplinapp.org/images/flags/country-4x3/cz.png) | Czech | [cs_CZ](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/cs_CZ.po) | [Lukas Helebrandt](mailto:lukas@aiya.cz) | 98% -![](https://joplinapp.org/images/flags/country-4x3/dk.png) | Dansk | [da_DK](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/da_DK.po) | [Morten Juhl-Johansen Zölde-Fejér](mailto:mjjzf@syntaktisk.) | 72% -![](https://joplinapp.org/images/flags/country-4x3/de.png) | Deutsch | [de_DE](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/de_DE.po) | [Ettore Atalan](mailto:atalanttore@users.noreply.github.com) | 97% -![](https://joplinapp.org/images/flags/country-4x3/ee.png) | Eesti Keel | [et_EE](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/et_EE.po) | | 65% -![](https://joplinapp.org/images/flags/country-4x3/gb.png) | English (UK) | [en_GB](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/en_GB.po) | | 100% -![](https://joplinapp.org/images/flags/country-4x3/us.png) | English (US) | [en_US](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/en_US.po) | | 100% -![](https://joplinapp.org/images/flags/country-4x3/es.png) | Español | [es_ES](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/es_ES.po) | [Mario Campo](mailto:mario.campo@gmail.com) | 98% -![](https://joplinapp.org/images/flags/esperanto.png) | Esperanto | [eo](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/eo.po) | Marton Paulo | 37% -![](https://joplinapp.org/images/flags/country-4x3/fr.png) | Français | [fr_FR](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/fr_FR.po) | Laurent Cozic | 98% -![](https://joplinapp.org/images/flags/es/galicia.png) | Galician | [gl_ES](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/gl_ES.po) | [Marcos Lans](mailto:marcoslansgarza@gmail.com) | 42% -![](https://joplinapp.org/images/flags/country-4x3/id.png) | Indonesian | [id_ID](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/id_ID.po) | [Fathy AR](mailto:16875937+fathyar@users.noreply.github.com) | 92% -![](https://joplinapp.org/images/flags/country-4x3/it.png) | Italiano | [it_IT](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/it_IT.po) | [Alessandro Bernardello](mailto:mailfilledwithspam@gmail.com) | 98% -![](https://joplinapp.org/images/flags/country-4x3/nl.png) | Nederlands | [nl_NL](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/nl_NL.po) | [MetBril](mailto:metbril@users.noreply.github.com) | 94% -![](https://joplinapp.org/images/flags/country-4x3/be.png) | Nederlands | [nl_BE](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/nl_BE.po) | | 33% -![](https://joplinapp.org/images/flags/country-4x3/no.png) | Norwegian | [nb_NO](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/nb_NO.po) | [Mats Estensen](mailto:code@mxe.no) | 87% -![](https://joplinapp.org/images/flags/country-4x3/ir.png) | Persian | [fa](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/fa.po) | [Kourosh Firoozbakht](mailto:kourox@protonmail.com) | 82% -![](https://joplinapp.org/images/flags/country-4x3/pl.png) | Polski | [pl_PL](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/pl_PL.po) | | 97% -![](https://joplinapp.org/images/flags/country-4x3/pt.png) | Português | [pt_PT](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/pt_PT.po) | [João Duarte](mailto:jduar@protonmail.com) | 98% -![](https://joplinapp.org/images/flags/country-4x3/br.png) | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/pt_BR.po) | [Renato Nunes Bastos](mailto:rnbastos@gmail.com) | 96% -![](https://joplinapp.org/images/flags/country-4x3/ro.png) | Română | [ro](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/ro.po) | [Cristi Duluta](mailto:cristi.duluta@gmail.com) | 77% -![](https://joplinapp.org/images/flags/country-4x3/si.png) | Slovenian | [sl_SI](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/sl_SI.po) | | 41% -![](https://joplinapp.org/images/flags/country-4x3/se.png) | Svenska | [sv](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/sv.po) | [Jonatan Nyberg](mailto:jonatan@autistici.org) | 70% -![](https://joplinapp.org/images/flags/country-4x3/th.png) | Thai | [th_TH](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/th_TH.po) | | 52% -![](https://joplinapp.org/images/flags/country-4x3/vi.png) | Tiếng Việt | [vi](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/vi.po) | | 84% -![](https://joplinapp.org/images/flags/country-4x3/tr.png) | Türkçe | [tr_TR](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/tr_TR.po) | [Arda Kılıçdağı](mailto:arda@kilicdagi.com) | 97% -![](https://joplinapp.org/images/flags/country-4x3/gr.png) | Ελληνικά | [el_GR](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/el_GR.po) | [Harris Arvanitis](mailto:xaris@tuta.io) | 95% -![](https://joplinapp.org/images/flags/country-4x3/ru.png) | Русский | [ru_RU](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/ru_RU.po) | [Sergey Segeda](mailto:thesermanarm@gmail.com) | 94% -![](https://joplinapp.org/images/flags/country-4x3/rs.png) | српски језик | [sr_RS](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/sr_RS.po) | | 70% -![](https://joplinapp.org/images/flags/country-4x3/cn.png) | 中文 (简体) | [zh_CN](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/zh_CN.po) | [WhiredPlanck](mailto:fungdaat31@outlook.com) | 95% -![](https://joplinapp.org/images/flags/country-4x3/tw.png) | 中文 (繁體) | [zh_TW](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/zh_TW.po) | [Yaoze Ye](mailto:yaozeye@yahoo.co.jp) | 94% -![](https://joplinapp.org/images/flags/country-4x3/jp.png) | 日本語 | [ja_JP](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/ja_JP.po) | [genneko](mailto:genneko217@gmail.com) | 99% -![](https://joplinapp.org/images/flags/country-4x3/kr.png) | 한국어 | [ko](https://github.com/laurent22/joplin/blob/dev/CliClient/locales/ko.po) | [Ji-Hyeon Gim](mailto:potatogim@potatogim.net) | 99% +![](https://joplinapp.org/images/flags/country-4x3/arableague.png) | Arabic | [ar](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/ar.po) | [أحمد باشا إبراهيم](mailto:fi_ahmed_bacha@esi.dz) | 78% +![](https://joplinapp.org/images/flags/es/basque_country.png) | Basque | [eu](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/eu.po) | juan.abasolo@ehu.eus | 33% +![](https://joplinapp.org/images/flags/country-4x3/ba.png) | Bosnian | [bs_BA](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/bs_BA.po) | [Derviš T.](mailto:dervis.t@pm.me) | 82% +![](https://joplinapp.org/images/flags/country-4x3/bg.png) | Bulgarian | [bg_BG](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/bg_BG.po) | | 65% +![](https://joplinapp.org/images/flags/es/catalonia.png) | Catalan | [ca](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/ca.po) | jmontane, 2019 | 95% +![](https://joplinapp.org/images/flags/country-4x3/hr.png) | Croatian | [hr_HR](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/hr_HR.po) | [Hrvoje Mandić](mailto:trbuhom@net.hr) | 27% +![](https://joplinapp.org/images/flags/country-4x3/cz.png) | Czech | [cs_CZ](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/cs_CZ.po) | [Lukas Helebrandt](mailto:lukas@aiya.cz) | 98% +![](https://joplinapp.org/images/flags/country-4x3/dk.png) | Dansk | [da_DK](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/da_DK.po) | [Morten Juhl-Johansen Zölde-Fejér](mailto:mjjzf@syntaktisk.) | 72% +![](https://joplinapp.org/images/flags/country-4x3/de.png) | Deutsch | [de_DE](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/de_DE.po) | [Ettore Atalan](mailto:atalanttore@users.noreply.github.com) | 97% +![](https://joplinapp.org/images/flags/country-4x3/ee.png) | Eesti Keel | [et_EE](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/et_EE.po) | | 65% +![](https://joplinapp.org/images/flags/country-4x3/gb.png) | English (UK) | [en_GB](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/en_GB.po) | | 100% +![](https://joplinapp.org/images/flags/country-4x3/us.png) | English (US) | [en_US](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/en_US.po) | | 100% +![](https://joplinapp.org/images/flags/country-4x3/es.png) | Español | [es_ES](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/es_ES.po) | [Mario Campo](mailto:mario.campo@gmail.com) | 98% +![](https://joplinapp.org/images/flags/esperanto.png) | Esperanto | [eo](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/eo.po) | Marton Paulo | 37% +![](https://joplinapp.org/images/flags/country-4x3/fr.png) | Français | [fr_FR](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/fr_FR.po) | Laurent Cozic | 98% +![](https://joplinapp.org/images/flags/es/galicia.png) | Galician | [gl_ES](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/gl_ES.po) | [Marcos Lans](mailto:marcoslansgarza@gmail.com) | 42% +![](https://joplinapp.org/images/flags/country-4x3/id.png) | Indonesian | [id_ID](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/id_ID.po) | [Fathy AR](mailto:16875937+fathyar@users.noreply.github.com) | 92% +![](https://joplinapp.org/images/flags/country-4x3/it.png) | Italiano | [it_IT](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/it_IT.po) | [Alessandro Bernardello](mailto:mailfilledwithspam@gmail.com) | 98% +![](https://joplinapp.org/images/flags/country-4x3/nl.png) | Nederlands | [nl_NL](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/nl_NL.po) | [MetBril](mailto:metbril@users.noreply.github.com) | 94% +![](https://joplinapp.org/images/flags/country-4x3/be.png) | Nederlands | [nl_BE](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/nl_BE.po) | | 33% +![](https://joplinapp.org/images/flags/country-4x3/no.png) | Norwegian | [nb_NO](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/nb_NO.po) | [Mats Estensen](mailto:code@mxe.no) | 87% +![](https://joplinapp.org/images/flags/country-4x3/ir.png) | Persian | [fa](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/fa.po) | [Kourosh Firoozbakht](mailto:kourox@protonmail.com) | 82% +![](https://joplinapp.org/images/flags/country-4x3/pl.png) | Polski | [pl_PL](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/pl_PL.po) | | 97% +![](https://joplinapp.org/images/flags/country-4x3/pt.png) | Português | [pt_PT](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/pt_PT.po) | [João Duarte](mailto:jduar@protonmail.com) | 98% +![](https://joplinapp.org/images/flags/country-4x3/br.png) | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/pt_BR.po) | [Renato Nunes Bastos](mailto:rnbastos@gmail.com) | 96% +![](https://joplinapp.org/images/flags/country-4x3/ro.png) | Română | [ro](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/ro.po) | [Cristi Duluta](mailto:cristi.duluta@gmail.com) | 77% +![](https://joplinapp.org/images/flags/country-4x3/si.png) | Slovenian | [sl_SI](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/sl_SI.po) | | 41% +![](https://joplinapp.org/images/flags/country-4x3/se.png) | Svenska | [sv](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/sv.po) | [Jonatan Nyberg](mailto:jonatan@autistici.org) | 70% +![](https://joplinapp.org/images/flags/country-4x3/th.png) | Thai | [th_TH](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/th_TH.po) | | 52% +![](https://joplinapp.org/images/flags/country-4x3/vi.png) | Tiếng Việt | [vi](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/vi.po) | | 84% +![](https://joplinapp.org/images/flags/country-4x3/tr.png) | Türkçe | [tr_TR](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/tr_TR.po) | [Arda Kılıçdağı](mailto:arda@kilicdagi.com) | 97% +![](https://joplinapp.org/images/flags/country-4x3/gr.png) | Ελληνικά | [el_GR](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/el_GR.po) | [Harris Arvanitis](mailto:xaris@tuta.io) | 95% +![](https://joplinapp.org/images/flags/country-4x3/ru.png) | Русский | [ru_RU](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/ru_RU.po) | [Sergey Segeda](mailto:thesermanarm@gmail.com) | 94% +![](https://joplinapp.org/images/flags/country-4x3/rs.png) | српски језик | [sr_RS](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/sr_RS.po) | | 70% +![](https://joplinapp.org/images/flags/country-4x3/cn.png) | 中文 (简体) | [zh_CN](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/zh_CN.po) | [WhiredPlanck](mailto:fungdaat31@outlook.com) | 95% +![](https://joplinapp.org/images/flags/country-4x3/tw.png) | 中文 (繁體) | [zh_TW](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/zh_TW.po) | [Yaoze Ye](mailto:yaozeye@yahoo.co.jp) | 94% +![](https://joplinapp.org/images/flags/country-4x3/jp.png) | 日本語 | [ja_JP](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/ja_JP.po) | [genneko](mailto:genneko217@gmail.com) | 99% +![](https://joplinapp.org/images/flags/country-4x3/kr.png) | 한국어 | [ko](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/ko.po) | [Ji-Hyeon Gim](mailto:potatogim@potatogim.net) | 99% # Contributors diff --git a/ReactNativeClient/lib/joplin-renderer/index.js b/ReactNativeClient/lib/joplin-renderer/index.js deleted file mode 100644 index 62b524a519..0000000000 --- a/ReactNativeClient/lib/joplin-renderer/index.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - MarkupToHtml: require('./MarkupToHtml').default, - MdToHtml: require('./MdToHtml').default, - HtmlToHtml: require('./HtmlToHtml'), - setupLinkify: require('./MdToHtml/setupLinkify'), - assetsToHeaders: require('./assetsToHeaders'), - utils: require('./utils'), -}; diff --git a/ReactNativeClient/lib/locale.ts b/ReactNativeClient/lib/locale.ts deleted file mode 100644 index 313bc005f2..0000000000 --- a/ReactNativeClient/lib/locale.ts +++ /dev/null @@ -1,333 +0,0 @@ -const { sprintf } = require('sprintf-js'); - -interface StringToStringMap { - [key:string]: string, -} - -const codeToLanguageE_:StringToStringMap = {}; -codeToLanguageE_['aa'] = 'Afar'; -codeToLanguageE_['ab'] = 'Abkhazian'; -codeToLanguageE_['af'] = 'Afrikaans'; -codeToLanguageE_['am'] = 'Amharic'; -codeToLanguageE_['an'] = 'Aragonese'; -codeToLanguageE_['ar'] = 'Arabic'; -codeToLanguageE_['as'] = 'Assamese'; -codeToLanguageE_['ay'] = 'Aymara'; -codeToLanguageE_['az'] = 'Azerbaijani'; -codeToLanguageE_['ba'] = 'Bashkir'; -codeToLanguageE_['be'] = 'Byelorussian'; -codeToLanguageE_['bg'] = 'Bulgarian'; -codeToLanguageE_['bh'] = 'Bihari'; -codeToLanguageE_['bi'] = 'Bislama'; -codeToLanguageE_['bn'] = 'Bangla'; -codeToLanguageE_['bo'] = 'Tibetan'; -codeToLanguageE_['br'] = 'Breton'; -codeToLanguageE_['bs'] = 'Bosnian'; -codeToLanguageE_['ca'] = 'Catalan'; -codeToLanguageE_['co'] = 'Corsican'; -codeToLanguageE_['cs'] = 'Czech'; -codeToLanguageE_['cy'] = 'Welsh'; -codeToLanguageE_['da'] = 'Danish'; -codeToLanguageE_['de'] = 'German'; -codeToLanguageE_['dz'] = 'Bhutani'; -codeToLanguageE_['el'] = 'Greek'; -codeToLanguageE_['en'] = 'English'; -codeToLanguageE_['eo'] = 'Esperanto'; -codeToLanguageE_['es'] = 'Spanish'; -codeToLanguageE_['et'] = 'Estonian'; -codeToLanguageE_['eu'] = 'Basque'; -codeToLanguageE_['fa'] = 'Persian'; -codeToLanguageE_['fi'] = 'Finnish'; -codeToLanguageE_['fj'] = 'Fiji'; -codeToLanguageE_['fo'] = 'Faroese'; -codeToLanguageE_['fr'] = 'French'; -codeToLanguageE_['fy'] = 'Frisian'; -codeToLanguageE_['ga'] = 'Irish'; -codeToLanguageE_['gd'] = 'Gaelic'; -codeToLanguageE_['gl'] = 'Galician'; -codeToLanguageE_['gn'] = 'Guarani'; -codeToLanguageE_['gu'] = 'Gujarati'; -codeToLanguageE_['ha'] = 'Hausa'; -codeToLanguageE_['he'] = 'Hebrew'; -codeToLanguageE_['hi'] = 'Hindi'; -codeToLanguageE_['hr'] = 'Croatian'; -codeToLanguageE_['hu'] = 'Hungarian'; -codeToLanguageE_['hy'] = 'Armenian'; -codeToLanguageE_['ia'] = 'Interlingua'; -codeToLanguageE_['id'] = 'Indonesian'; -codeToLanguageE_['ie'] = 'Interlingue'; -codeToLanguageE_['ik'] = 'Inupiak'; -codeToLanguageE_['is'] = 'Icelandic'; -codeToLanguageE_['it'] = 'Italian'; -codeToLanguageE_['iu'] = 'Inuktitut'; -codeToLanguageE_['ja'] = 'Japanese'; -codeToLanguageE_['jw'] = 'Javanese'; -codeToLanguageE_['ka'] = 'Georgian'; -codeToLanguageE_['kk'] = 'Kazakh'; -codeToLanguageE_['kl'] = 'Greenlandic'; -codeToLanguageE_['km'] = 'Cambodian'; -codeToLanguageE_['kn'] = 'Kannada'; -codeToLanguageE_['ko'] = 'Korean'; -codeToLanguageE_['ks'] = 'Kashmiri'; -codeToLanguageE_['ku'] = 'Kurdish'; -codeToLanguageE_['ky'] = 'Kirghiz'; -codeToLanguageE_['la'] = 'Latin'; -codeToLanguageE_['ln'] = 'Lingala'; -codeToLanguageE_['lo'] = 'Laothian'; -codeToLanguageE_['lt'] = 'Lithuanian'; -codeToLanguageE_['lv'] = 'Lettish'; -codeToLanguageE_['mg'] = 'Malagasy'; -codeToLanguageE_['mi'] = 'Maori'; -codeToLanguageE_['mk'] = 'Macedonian'; -codeToLanguageE_['ml'] = 'Malayalam'; -codeToLanguageE_['mn'] = 'Mongolian'; -codeToLanguageE_['mo'] = 'Moldavian'; -codeToLanguageE_['mr'] = 'Marathi'; -codeToLanguageE_['ms'] = 'Malay'; -codeToLanguageE_['mt'] = 'Maltese'; -codeToLanguageE_['my'] = 'Burmese'; -codeToLanguageE_['na'] = 'Nauru'; -codeToLanguageE_['nb'] = 'Norwegian'; -codeToLanguageE_['ne'] = 'Nepali'; -codeToLanguageE_['nl'] = 'Dutch'; -codeToLanguageE_['no'] = 'Norwegian'; -codeToLanguageE_['oc'] = 'Occitan'; -codeToLanguageE_['om'] = 'Oromo'; -codeToLanguageE_['or'] = 'Oriya'; -codeToLanguageE_['pa'] = 'Punjabi'; -codeToLanguageE_['pl'] = 'Polish'; -codeToLanguageE_['ps'] = 'Pushto'; -codeToLanguageE_['pt'] = 'Portuguese'; -codeToLanguageE_['qu'] = 'Quechua'; -codeToLanguageE_['rm'] = 'Rhaeto-Romance'; -codeToLanguageE_['rn'] = 'Kirundi'; -codeToLanguageE_['ro'] = 'Romanian'; -codeToLanguageE_['ru'] = 'Russian'; -codeToLanguageE_['rw'] = 'Kinyarwanda'; -codeToLanguageE_['sa'] = 'Sanskrit'; -codeToLanguageE_['sd'] = 'Sindhi'; -codeToLanguageE_['sg'] = 'Sangho'; -codeToLanguageE_['sh'] = 'Serbo-Croatian'; -codeToLanguageE_['si'] = 'Sinhalese'; -codeToLanguageE_['sk'] = 'Slovak'; -codeToLanguageE_['sl'] = 'Slovenian'; -codeToLanguageE_['sm'] = 'Samoan'; -codeToLanguageE_['sn'] = 'Shona'; -codeToLanguageE_['so'] = 'Somali'; -codeToLanguageE_['sq'] = 'Albanian'; -codeToLanguageE_['sr'] = 'Serbian'; -codeToLanguageE_['ss'] = 'Siswati'; -codeToLanguageE_['st'] = 'Sesotho'; -codeToLanguageE_['su'] = 'Sundanese'; -codeToLanguageE_['sv'] = 'Swedish'; -codeToLanguageE_['sw'] = 'Swahili'; -codeToLanguageE_['ta'] = 'Tamil'; -codeToLanguageE_['te'] = 'Telugu'; -codeToLanguageE_['tg'] = 'Tajik'; -codeToLanguageE_['th'] = 'Thai'; -codeToLanguageE_['ti'] = 'Tigrinya'; -codeToLanguageE_['tk'] = 'Turkmen'; -codeToLanguageE_['tl'] = 'Tagalog'; -codeToLanguageE_['tn'] = 'Setswana'; -codeToLanguageE_['to'] = 'Tonga'; -codeToLanguageE_['tr'] = 'Turkish'; -codeToLanguageE_['ts'] = 'Tsonga'; -codeToLanguageE_['tt'] = 'Tatar'; -codeToLanguageE_['tw'] = 'Twi'; -codeToLanguageE_['ug'] = 'Uighur'; -codeToLanguageE_['uk'] = 'Ukrainian'; -codeToLanguageE_['ur'] = 'Urdu'; -codeToLanguageE_['uz'] = 'Uzbek'; -codeToLanguageE_['vi'] = 'Vietnamese'; -codeToLanguageE_['vo'] = 'Volapuk'; -codeToLanguageE_['wo'] = 'Wolof'; -codeToLanguageE_['xh'] = 'Xhosa'; -codeToLanguageE_['yi'] = 'Yiddish'; -codeToLanguageE_['yo'] = 'Yoruba'; -codeToLanguageE_['za'] = 'Zhuang'; -codeToLanguageE_['zh'] = 'Chinese'; -codeToLanguageE_['zu'] = 'Zulu'; - -const codeToLanguage_:StringToStringMap = {}; -codeToLanguage_['an'] = 'Aragonés'; -codeToLanguage_['da'] = 'Dansk'; -codeToLanguage_['de'] = 'Deutsch'; -codeToLanguage_['en'] = 'English'; -codeToLanguage_['es'] = 'Español'; -codeToLanguage_['fr'] = 'Français'; -codeToLanguage_['he'] = 'עיברית'; -codeToLanguage_['it'] = 'Italiano'; -codeToLanguage_['lt'] = 'Lietuvių kalba'; -codeToLanguage_['nl'] = 'Nederlands'; -codeToLanguage_['pl'] = 'Polski'; -codeToLanguage_['pt'] = 'Português'; -codeToLanguage_['ru'] = 'Русский'; -codeToLanguage_['sk'] = 'Slovenčina'; -codeToLanguage_['sq'] = 'Shqip'; -codeToLanguage_['sr'] = 'српски језик'; -codeToLanguage_['tr'] = 'Türkçe'; -codeToLanguage_['ja'] = '日本語'; -codeToLanguage_['ko'] = '한국어'; -codeToLanguage_['sv'] = 'Svenska'; -codeToLanguage_['el'] = 'Ελληνικά'; -codeToLanguage_['zh'] = '中文'; -codeToLanguage_['ro'] = 'Română'; -codeToLanguage_['et'] = 'Eesti Keel'; -codeToLanguage_['vi'] = 'Tiếng Việt'; -codeToLanguage_['hu'] = 'Magyar'; - -const codeToCountry_:StringToStringMap = {}; -codeToCountry_['BR'] = 'Brasil'; -codeToCountry_['CR'] = 'Costa Rica'; -codeToCountry_['CN'] = '中国'; -codeToCountry_['GB'] = 'UK'; -codeToCountry_['US'] = 'US'; - -let supportedLocales_:any = null; -let localeStats_:any = null; - -const loadedLocales_:any = {}; - -const defaultLocale_ = 'en_GB'; - -let currentLocale_ = defaultLocale_; - -function defaultLocale() { - return defaultLocale_; -} - -function localeStats() { - if (!localeStats_) localeStats_ = require('../locales/index.js').stats; - return localeStats_; -} - -function supportedLocales():string[] { - if (!supportedLocales_) supportedLocales_ = require('../locales/index.js').locales; - - const output = []; - for (const n in supportedLocales_) { - if (!supportedLocales_.hasOwnProperty(n)) continue; - output.push(n); - } - return output; -} - -interface SupportedLocalesToLanguagesOptions { - includeStats?: boolean, -} - -function supportedLocalesToLanguages(options:SupportedLocalesToLanguagesOptions = null) { - if (!options) options = {}; - const stats = localeStats(); - const locales = supportedLocales(); - const output:StringToStringMap = {}; - for (let i = 0; i < locales.length; i++) { - const locale = locales[i]; - output[locale] = countryDisplayName(locale); - - const stat = stats[locale]; - if (options.includeStats && stat) { - output[locale] += ` (${stat.percentDone}%)`; - } - } - return output; -} - -function closestSupportedLocale(canonicalName:string, defaultToEnglish:boolean = true, locales:string[] = null) { - locales = locales === null ? supportedLocales() : locales; - if (locales.indexOf(canonicalName) >= 0) return canonicalName; - - const requiredLanguage = languageCodeOnly(canonicalName).toLowerCase(); - - for (let i = 0; i < locales.length; i++) { - const locale = locales[i]; - const language = locale.split('_')[0]; - if (requiredLanguage == language) return locale; - } - - return defaultToEnglish ? 'en_GB' : null; -} - -function countryName(countryCode:string) { - return codeToCountry_[countryCode] ? codeToCountry_[countryCode] : ''; -} - -function languageNameInEnglish(languageCode:string) { - return codeToLanguageE_[languageCode] ? codeToLanguageE_[languageCode] : ''; -} - -function languageName(languageCode:string, defaultToEnglish:boolean = true) { - if (codeToLanguage_[languageCode]) return codeToLanguage_[languageCode]; - if (defaultToEnglish) return languageNameInEnglish(languageCode); - return ''; -} - -function languageCodeOnly(canonicalName:string) { - if (canonicalName.length < 2) return canonicalName; - return canonicalName.substr(0, 2); -} - -function countryCodeOnly(canonicalName:string) { - if (canonicalName.length <= 2) return ''; - return canonicalName.substr(3); -} - -function countryDisplayName(canonicalName:string) { - const languageCode = languageCodeOnly(canonicalName); - const countryCode = countryCodeOnly(canonicalName); - - let output = languageName(languageCode); - - let extraString; - - if (countryCode) { - if (languageCode == 'zh' && countryCode == 'CN') { - extraString = '简体'; // "Simplified" in "Simplified Chinese" - } else { - extraString = countryName(countryCode); - } - } - - if (languageCode == 'zh' && (countryCode == '' || countryCode == 'TW')) extraString = '繁體'; // "Traditional" in "Traditional Chinese" - - if (extraString) output += ` (${extraString})`; - - return output; -} - -function localeStrings(canonicalName:string) { - const locale = closestSupportedLocale(canonicalName); - - if (loadedLocales_[locale]) return loadedLocales_[locale]; - - loadedLocales_[locale] = Object.assign({}, supportedLocales_[locale]); - - return loadedLocales_[locale]; -} - -function setLocale(canonicalName:string) { - if (currentLocale_ == canonicalName) return; - currentLocale_ = closestSupportedLocale(canonicalName); -} - -function languageCode() { - return languageCodeOnly(currentLocale_); -} - -function _(s:string, ...args:any[]) { - const strings = localeStrings(currentLocale_); - let result = strings[s]; - if (result === '' || result === undefined) result = s; - try { - return sprintf(result, ...args); - } catch (error) { - return `${result} ${args.join(', ')} (Translation error: ${error.message})`; - } -} - -function _n(singular:string, plural:string, n:number, ...args:any[]) { - if (n > 1) return _(plural, ...args); - return _(singular, ...args); -} - -export { _, _n, supportedLocales, countryDisplayName, localeStrings, setLocale, supportedLocalesToLanguages, defaultLocale, closestSupportedLocale, languageCode, countryCodeOnly }; diff --git a/ReactNativeClient/lib/package.json b/ReactNativeClient/lib/package.json deleted file mode 100644 index adac565885..0000000000 --- a/ReactNativeClient/lib/package.json +++ /dev/null @@ -1 +0,0 @@ -{ "name": "lib" } \ No newline at end of file diff --git a/ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.ts b/ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.ts deleted file mode 100644 index 5522622527..0000000000 --- a/ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.ts +++ /dev/null @@ -1,44 +0,0 @@ -import KeychainServiceDriverBase from './KeychainServiceDriverBase'; -import shim from 'lib/shim'; - -// keytar throws an error when system keychain is not present; -// even when keytar itself is installed. -// try/catch to ensure system keychain is present and no error is thrown. - -// For now, keychain support is disabled on Linux because when keytar is loaded -// it seems to cause the following error when loading Sharp: -// -// Something went wrong installing the "sharp" module -// /lib/x86_64-linux-gnu/libz.so.1: version `ZLIB_1.2.9' not found (required by /home/travis/build/laurent22/joplin/CliClient/node_modules/sharp/build/Release/../../vendor/lib/libpng16.so.16) -// -// See: https://travis-ci.org/github/laurent22/joplin/jobs/686222036 -// -// Also disabled in portable mode obviously. - -let keytar:any; -try { - keytar = (shim.isWindows() || shim.isMac()) && !shim.isPortable() ? require('keytar') : null; -} catch (error) { - console.error('Cannot load keytar - keychain support will be disabled', error); - keytar = null; -} - -export default class KeychainServiceDriver extends KeychainServiceDriverBase { - - async setPassword(name:string, password:string):Promise { - if (!keytar) return false; - await keytar.setPassword(`${this.appId}.${name}`, `${this.clientId}@joplin`, password); - return true; - } - - async password(name:string):Promise { - if (!keytar) return null; - return keytar.getPassword(`${this.appId}.${name}`, `${this.clientId}@joplin`); - } - - async deletePassword(name:string):Promise { - if (!keytar) return; - await keytar.deletePassword(`${this.appId}.${name}`, `${this.clientId}@joplin`); - } - -} diff --git a/ReactNativeClient/lib/services/rest/Api.ts b/ReactNativeClient/lib/services/rest/Api.ts deleted file mode 100644 index 415ef8a0b0..0000000000 --- a/ReactNativeClient/lib/services/rest/Api.ts +++ /dev/null @@ -1,760 +0,0 @@ -import Setting from 'lib/models/Setting'; -import Logger from 'lib/Logger'; -import shim from 'lib/shim'; -import uuid from 'lib/uuid'; -import markdownUtils from 'lib/markdownUtils'; - -const { ltrimSlashes } = require('lib/path-utils'); -const { Database } = require('lib/database.js'); -const Folder = require('lib/models/Folder'); -const Note = require('lib/models/Note'); -const Tag = require('lib/models/Tag'); -const BaseItem = require('lib/models/BaseItem'); -const Resource = require('lib/models/Resource'); -const BaseModel = require('lib/BaseModel'); -const htmlUtils = require('lib/htmlUtils'); -const markupLanguageUtils = require('lib/markupLanguageUtils').default; -const mimeUtils = require('lib/mime-utils.js').mime; -const md5 = require('md5'); -const HtmlToMd = require('lib/HtmlToMd'); -const urlUtils = require('lib/urlUtils.js'); -const ArrayUtils = require('lib/ArrayUtils.js'); -const { netUtils } = require('lib/net-utils'); -const { fileExtension, safeFileExtension, safeFilename, filename } = require('lib/path-utils'); -const ApiResponse = require('lib/services/rest/ApiResponse'); -const SearchEngineUtils = require('lib/services/searchengine/SearchEngineUtils'); -const { FoldersScreenUtils } = require('lib/folders-screen-utils.js'); -const uri2path = require('file-uri-to-path'); -const { MarkupToHtml } = require('lib/joplin-renderer'); -const { ErrorMethodNotAllowed, ErrorForbidden, ErrorBadRequest, ErrorNotFound } = require('./errors'); - -export default class Api { - - private token_:string | Function; - private knownNounces_:any = {}; - private logger_:Logger; - private actionApi_:any; - private htmlToMdParser_:any; - - constructor(token:string = null, actionApi:any = null) { - this.token_ = token; - this.logger_ = new Logger(); - this.actionApi_ = actionApi; - } - - get token() { - return typeof this.token_ === 'function' ? this.token_() : this.token_; - } - - parsePath(path:string) { - path = ltrimSlashes(path); - if (!path) return { callName: '', params: [] }; - - const pathParts = path.split('/'); - const callSuffix = pathParts.splice(0, 1)[0]; - const callName = `action_${callSuffix}`; - return { - callName: callName, - params: pathParts, - }; - } - - // Response can be any valid JSON object, so a string, and array or an object (key/value pairs). - async route(method:string, path:string, query:any = null, body:any = null, files:string[] = null):Promise { - if (!files) files = []; - if (!query) query = {}; - - const parsedPath = this.parsePath(path); - if (!parsedPath.callName) throw new ErrorNotFound(); // Nothing at the root yet - - if (query && query.nounce) { - const requestMd5 = md5(JSON.stringify([method, path, body, query, files.length])); - if (this.knownNounces_[query.nounce] === requestMd5) { - throw new ErrorBadRequest('Duplicate Nounce'); - } - this.knownNounces_[query.nounce] = requestMd5; - } - - const request:any = { - method: method, - path: ltrimSlashes(path), - query: query ? query : {}, - body: body, - bodyJson_: null, - bodyJson: function(disallowedProperties:string[] = null) { - if (!this.bodyJson_) this.bodyJson_ = JSON.parse(this.body); - - if (disallowedProperties) { - const filteredBody = Object.assign({}, this.bodyJson_); - for (let i = 0; i < disallowedProperties.length; i++) { - const n = disallowedProperties[i]; - delete filteredBody[n]; - } - return filteredBody; - } - - return this.bodyJson_; - }, - files: files, - }; - - let id = null; - let link = null; - const params = parsedPath.params; - - if (params.length >= 1) { - id = params[0]; - params.splice(0, 1); - if (params.length >= 1) { - link = params[0]; - params.splice(0, 1); - } - } - - request.params = params; - - if (!(this as any)[parsedPath.callName]) throw new ErrorNotFound(); - - try { - return await (this as any)[parsedPath.callName](request, id, link); - } catch (error) { - if (!error.httpCode) error.httpCode = 500; - throw error; - } - } - - setLogger(l:Logger) { - this.logger_ = l; - } - - logger() { - return this.logger_; - } - - readonlyProperties(requestMethod:string) { - const output = ['created_time', 'updated_time', 'encryption_blob_encrypted', 'encryption_applied', 'encryption_cipher_text']; - if (requestMethod !== 'POST') output.splice(0, 0, 'id'); - return output; - } - - fields_(request:any, defaultFields:string[]) { - const query = request.query; - if (!query || !query.fields) return defaultFields; - if (Array.isArray(query.fields)) return query.fields.slice(); - const fields = query.fields - .split(',') - .map((f:string) => f.trim()) - .filter((f:string) => !!f); - return fields.length ? fields : defaultFields; - } - - checkToken_(request:any) { - // For now, whitelist some calls to allow the web clipper to work - // without an extra auth step - const whiteList = [['GET', 'ping'], ['GET', 'tags'], ['GET', 'folders'], ['POST', 'notes']]; - - for (let i = 0; i < whiteList.length; i++) { - if (whiteList[i][0] === request.method && whiteList[i][1] === request.path) return; - } - - if (!this.token) return; - if (!request.query || !request.query.token) throw new ErrorForbidden('Missing "token" parameter'); - if (request.query.token !== this.token) throw new ErrorForbidden('Invalid "token" parameter'); - } - - async defaultAction_(modelType:number, request:any, id:string = null, link:string = null) { - this.checkToken_(request); - - if (link) throw new ErrorNotFound(); // Default action doesn't support links at all for now - - const ModelClass = BaseItem.getClassByItemType(modelType); - - const getOneModel = async () => { - const model = await ModelClass.load(id); - if (!model) throw new ErrorNotFound(); - return model; - }; - - if (request.method === 'GET') { - if (id) { - return getOneModel(); - } else { - const options:any = {}; - const fields = this.fields_(request, []); - if (fields.length) options.fields = fields; - return await ModelClass.all(options); - } - } - - if (request.method === 'PUT' && id) { - const model = await getOneModel(); - let newModel = Object.assign({}, model, request.bodyJson(this.readonlyProperties('PUT'))); - newModel = await ModelClass.save(newModel, { userSideValidation: true }); - return newModel; - } - - if (request.method === 'DELETE' && id) { - const model = await getOneModel(); - await ModelClass.delete(model.id); - return; - } - - if (request.method === 'POST') { - const props = this.readonlyProperties('POST'); - const idIdx = props.indexOf('id'); - if (idIdx >= 0) props.splice(idIdx, 1); - const model = request.bodyJson(props); - const result = await ModelClass.save(model, this.defaultSaveOptions_(model, 'POST')); - return result; - } - - throw new ErrorMethodNotAllowed(); - } - - async action_ping(request:any) { - if (request.method === 'GET') { - return 'JoplinClipperServer'; - } - - throw new ErrorMethodNotAllowed(); - } - - async action_search(request:any) { - this.checkToken_(request); - - if (request.method !== 'GET') throw new ErrorMethodNotAllowed(); - - const query = request.query.query; - if (!query) throw new ErrorBadRequest('Missing "query" parameter'); - - const queryType = request.query.type ? BaseModel.modelNameToType(request.query.type) : BaseModel.TYPE_NOTE; - - if (queryType !== BaseItem.TYPE_NOTE) { - const ModelClass = BaseItem.getClassByItemType(queryType); - const options:any = {}; - const fields = this.fields_(request, []); - if (fields.length) options.fields = fields; - const sqlQueryPart = query.replace(/\*/g, '%'); - options.where = 'title LIKE ?'; - options.whereParams = [sqlQueryPart]; - options.caseInsensitive = true; - return await ModelClass.all(options); - } else { - return await SearchEngineUtils.notesForQuery(query, this.notePreviewsOptions_(request)); - } - } - - async action_folders(request:any, id:string = null, link:string = null) { - if (request.method === 'GET' && !id) { - const folders = await FoldersScreenUtils.allForDisplay({ fields: this.fields_(request, ['id', 'parent_id', 'title']) }); - const output = await Folder.allAsTree(folders); - return output; - } - - if (request.method === 'GET' && id) { - if (link && link === 'notes') { - const options = this.notePreviewsOptions_(request); - return Note.previews(id, options); - } else if (link) { - throw new ErrorNotFound(); - } - } - - return this.defaultAction_(BaseModel.TYPE_FOLDER, request, id, link); - } - - async action_tags(request:any, id:string = null, link:string = null) { - if (link === 'notes') { - const tag = await Tag.load(id); - if (!tag) throw new ErrorNotFound(); - - if (request.method === 'POST') { - const note = request.bodyJson(); - if (!note || !note.id) throw new ErrorBadRequest('Missing note ID'); - return await Tag.addNote(tag.id, note.id); - } - - if (request.method === 'DELETE') { - const noteId = request.params.length ? request.params[0] : null; - if (!noteId) throw new ErrorBadRequest('Missing note ID'); - await Tag.removeNote(tag.id, noteId); - return; - } - - if (request.method === 'GET') { - // Ideally we should get all this in one SQL query but for now that will do - const noteIds = await Tag.noteIds(tag.id); - const output = []; - for (let i = 0; i < noteIds.length; i++) { - const n = await Note.preview(noteIds[i], this.notePreviewsOptions_(request)); - if (!n) continue; - output.push(n); - } - return output; - } - } - - return this.defaultAction_(BaseModel.TYPE_TAG, request, id, link); - } - - async action_master_keys(request:any, id:string = null, link:string = null) { - return this.defaultAction_(BaseModel.TYPE_MASTER_KEY, request, id, link); - } - - async action_resources(request:any, id:string = null, link:string = null) { - // fieldName: "data" - // headers: Object - // originalFilename: "test.jpg" - // path: "C:\Users\Laurent\AppData\Local\Temp\BW77wkpP23iIGUstd0kDuXXC.jpg" - // size: 164394 - - if (request.method === 'GET') { - if (link === 'file') { - const resource = await Resource.load(id); - if (!resource) throw new ErrorNotFound(); - - const filePath = Resource.fullPath(resource); - const buffer = await shim.fsDriver().readFile(filePath, 'Buffer'); - - const response = new ApiResponse(); - response.type = 'attachment'; - response.body = buffer; - response.contentType = resource.mime; - response.attachmentFilename = Resource.friendlyFilename(resource); - return response; - } - - if (link) throw new ErrorNotFound(); - } - - if (request.method === 'POST') { - if (!request.files.length) throw new ErrorBadRequest('Resource cannot be created without a file'); - const filePath = request.files[0].path; - const defaultProps = request.bodyJson(this.readonlyProperties('POST')); - return shim.createResourceFromPath(filePath, defaultProps, { userSideValidation: true }); - } - - return this.defaultAction_(BaseModel.TYPE_RESOURCE, request, id, link); - } - - notePreviewsOptions_(request:any) { - const fields = this.fields_(request, []); // previews() already returns default fields - const options:any = {}; - if (fields.length) options.fields = fields; - return options; - } - - defaultSaveOptions_(model:any, requestMethod:string) { - const options:any = { userSideValidation: true }; - if (requestMethod === 'POST' && model.id) options.isNew = true; - return options; - } - - defaultLoadOptions_(request:any) { - const options:any = {}; - const fields = this.fields_(request, []); - if (fields.length) options.fields = fields; - return options; - } - - async execServiceActionFromRequest_(externalApi:any, request:any) { - const action = externalApi[request.action]; - if (!action) throw new ErrorNotFound(`Invalid action: ${request.action}`); - const args = Object.assign({}, request); - delete args.action; - return action(args); - } - - async action_services(request:any, serviceName:string) { - this.checkToken_(request); - - if (request.method !== 'POST') throw new ErrorMethodNotAllowed(); - if (!this.actionApi_) throw new ErrorNotFound('No action API has been setup!'); - if (!this.actionApi_[serviceName]) throw new ErrorNotFound(`No such service: ${serviceName}`); - - const externalApi = this.actionApi_[serviceName](); - return this.execServiceActionFromRequest_(externalApi, JSON.parse(request.body)); - } - - async action_notes(request:any, id:string = null, link:string = null) { - this.checkToken_(request); - - if (request.method === 'GET') { - if (link && link === 'tags') { - return Tag.tagsByNoteId(id); - } else if (link && link === 'resources') { - const note = await Note.load(id); - if (!note) throw new ErrorNotFound(); - const resourceIds = await Note.linkedResourceIds(note.body); - const output = []; - const loadOptions = this.defaultLoadOptions_(request); - for (const resourceId of resourceIds) { - output.push(await Resource.load(resourceId, loadOptions)); - } - return output; - } else if (link) { - throw new ErrorNotFound(); - } - - const options = this.notePreviewsOptions_(request); - if (id) { - return await Note.preview(id, options); - } else { - return await Note.previews(null, options); - } - } - - if (request.method === 'POST') { - const requestId = Date.now(); - const requestNote = JSON.parse(request.body); - - // const allowFileProtocolImages = urlUtils.urlProtocol(requestNote.base_url).toLowerCase() === 'file:'; - - const imageSizes = requestNote.image_sizes ? requestNote.image_sizes : {}; - - let note:any = await this.requestNoteToNote_(requestNote); - - const imageUrls = ArrayUtils.unique(markupLanguageUtils.extractImageUrls(note.markup_language, note.body)); - - this.logger().info(`Request (${requestId}): Downloading images: ${imageUrls.length}`); - - let result = await this.downloadImages_(imageUrls); // , allowFileProtocolImages); - - this.logger().info(`Request (${requestId}): Creating resources from paths: ${Object.getOwnPropertyNames(result).length}`); - - result = await this.createResourcesFromPaths_(result); - await this.removeTempFiles_(result); - note.body = this.replaceImageUrlsByResources_(note.markup_language, note.body, result, imageSizes); - - this.logger().info(`Request (${requestId}): Saving note...`); - - const saveOptions = this.defaultSaveOptions_(note, 'POST'); - saveOptions.autoTimestamp = false; // No auto-timestamp because user may have provided them - const timestamp = Date.now(); - note.updated_time = timestamp; - note.created_time = timestamp; - if (!('user_updated_time' in note)) note.user_updated_time = timestamp; - if (!('user_created_time' in note)) note.user_created_time = timestamp; - - note = await Note.save(note, saveOptions); - - if (requestNote.tags) { - const tagTitles = requestNote.tags.split(','); - await Tag.setNoteTagsByTitles(note.id, tagTitles); - } - - if (requestNote.image_data_url) { - note = await this.attachImageFromDataUrl_(note, requestNote.image_data_url, requestNote.crop_rect); - } - - this.logger().info(`Request (${requestId}): Created note ${note.id}`); - - return note; - } - - if (request.method === 'PUT') { - const note = await Note.load(id); - - if (!note) throw new ErrorNotFound(); - - const saveOptions = { - ...this.defaultSaveOptions_(note, 'PUT'), - autoTimestamp: false, // No auto-timestamp because user may have provided them - userSideValidation: true, - }; - - const timestamp = Date.now(); - - const newProps = request.bodyJson(this.readonlyProperties('PUT')); - if (!('user_updated_time' in newProps)) newProps.user_updated_time = timestamp; - - let newNote = { - ...note, - ...newProps, - updated_time: timestamp, - }; - - newNote = await Note.save(newNote, saveOptions); - - const requestNote = JSON.parse(request.body); - if (requestNote.tags || requestNote.tags === '') { - const tagTitles = requestNote.tags.split(','); - await Tag.setNoteTagsByTitles(id, tagTitles); - } - - return newNote; - } - - return this.defaultAction_(BaseModel.TYPE_NOTE, request, id, link); - } - - // ======================================================================================================================== - // UTILIY FUNCTIONS - // ======================================================================================================================== - - htmlToMdParser() { - if (this.htmlToMdParser_) return this.htmlToMdParser_; - this.htmlToMdParser_ = new HtmlToMd(); - return this.htmlToMdParser_; - } - - async requestNoteToNote_(requestNote:any) { - const output:any = { - title: requestNote.title ? requestNote.title : '', - body: requestNote.body ? requestNote.body : '', - }; - - if (requestNote.id) output.id = requestNote.id; - - const baseUrl = requestNote.base_url ? requestNote.base_url : ''; - - if (requestNote.body_html) { - if (requestNote.convert_to === 'html') { - const style = await this.buildNoteStyleSheet_(requestNote.stylesheets); - const minify = require('html-minifier').minify; - - const minifyOptions = { - // Remove all spaces and, especially, newlines from tag attributes, as that would - // break the rendering. - customAttrCollapse: /.*/, - // Need to remove all whitespaces because whitespace at a beginning of a line - // means a code block in Markdown. - collapseWhitespace: true, - minifyCSS: true, - maxLineLength: 300, - }; - - const uglifycss = require('uglifycss'); - const styleString = uglifycss.processString(style.join('\n'), { - // Need to set a max length because Ace Editor takes forever - // to display notes with long lines. - maxLineLen: 200, - }); - - const styleTag = style.length ? `` + '\n' : ''; - let minifiedHtml = ''; - try { - minifiedHtml = minify(requestNote.body_html, minifyOptions); - } catch (error) { - console.warn('Could not minify HTML - using non-minified HTML instead', error); - minifiedHtml = requestNote.body_html; - } - output.body = styleTag + minifiedHtml; - output.body = htmlUtils.prependBaseUrl(output.body, baseUrl); - output.markup_language = MarkupToHtml.MARKUP_LANGUAGE_HTML; - } else { - // Convert to Markdown - // Parsing will not work if the HTML is not wrapped in a top level tag, which is not guaranteed - // when getting the content from elsewhere. So here wrap it - it won't change anything to the final - // rendering but it makes sure everything will be parsed. - output.body = await this.htmlToMdParser().parse(`
${requestNote.body_html}
`, { - baseUrl: baseUrl, - anchorNames: requestNote.anchor_names ? requestNote.anchor_names : [], - }); - output.markup_language = MarkupToHtml.MARKUP_LANGUAGE_MARKDOWN; - } - } - - if (requestNote.parent_id) { - output.parent_id = requestNote.parent_id; - } else { - const folder = await Folder.defaultFolder(); - if (!folder) throw new Error('Cannot find folder for note'); - output.parent_id = folder.id; - } - - if ('source_url' in requestNote) output.source_url = requestNote.source_url; - if ('author' in requestNote) output.author = requestNote.author; - if ('user_updated_time' in requestNote) output.user_updated_time = Database.formatValue(Database.TYPE_INT, requestNote.user_updated_time); - if ('user_created_time' in requestNote) output.user_created_time = Database.formatValue(Database.TYPE_INT, requestNote.user_created_time); - if ('is_todo' in requestNote) output.is_todo = Database.formatValue(Database.TYPE_INT, requestNote.is_todo); - if ('markup_language' in requestNote) output.markup_language = Database.formatValue(Database.TYPE_INT, requestNote.markup_language); - if ('longitude' in requestNote) output.longitude = requestNote.longitude; - if ('latitude' in requestNote) output.latitude = requestNote.latitude; - if ('altitude' in requestNote) output.altitude = requestNote.altitude; - - if (!output.markup_language) output.markup_language = MarkupToHtml.MARKUP_LANGUAGE_MARKDOWN; - - return output; - } - - // Note must have been saved first - async attachImageFromDataUrl_(note:any, imageDataUrl:string, cropRect:any) { - const tempDir = Setting.value('tempDir'); - const mime = mimeUtils.fromDataUrl(imageDataUrl); - let ext = mimeUtils.toFileExtension(mime) || ''; - if (ext) ext = `.${ext}`; - const tempFilePath = `${tempDir}/${md5(`${Math.random()}_${Date.now()}`)}${ext}`; - const imageConvOptions:any = {}; - if (cropRect) imageConvOptions.cropRect = cropRect; - await shim.imageFromDataUrl(imageDataUrl, tempFilePath, imageConvOptions); - return await shim.attachFileToNote(note, tempFilePath); - } - - async tryToGuessImageExtFromMimeType_(response:any, imagePath:string) { - const mimeType = netUtils.mimeTypeFromHeaders(response.headers); - if (!mimeType) return imagePath; - - const newExt = mimeUtils.toFileExtension(mimeType); - if (!newExt) return imagePath; - - const newImagePath = `${imagePath}.${newExt}`; - await shim.fsDriver().move(imagePath, newImagePath); - return newImagePath; - } - - async buildNoteStyleSheet_(stylesheets:any[]) { - if (!stylesheets) return []; - - const output = []; - - for (const stylesheet of stylesheets) { - if (stylesheet.type === 'text') { - output.push(stylesheet.value); - } else if (stylesheet.type === 'url') { - try { - const tempPath = `${Setting.value('tempDir')}/${md5(`${Math.random()}_${Date.now()}`)}.css`; - await shim.fetchBlob(stylesheet.value, { path: tempPath, maxRetry: 1 }); - const text = await shim.fsDriver().readFile(tempPath); - output.push(text); - await shim.fsDriver().remove(tempPath); - } catch (error) { - this.logger().warn(`Cannot download stylesheet at ${stylesheet.value}`, error); - } - } else { - throw new Error(`Invalid stylesheet type: ${stylesheet.type}`); - } - } - - return output; - } - - async downloadImage_(url:string /* , allowFileProtocolImages */) { - const tempDir = Setting.value('tempDir'); - - // The URL we get to download have been extracted from the Markdown document - url = markdownUtils.unescapeLinkUrl(url); - - const isDataUrl = url && url.toLowerCase().indexOf('data:') === 0; - - const name = isDataUrl ? md5(`${Math.random()}_${Date.now()}`) : filename(url); - let fileExt = isDataUrl ? mimeUtils.toFileExtension(mimeUtils.fromDataUrl(url)) : safeFileExtension(fileExtension(url).toLowerCase()); - if (!mimeUtils.fromFileExtension(fileExt)) fileExt = ''; // If the file extension is unknown - clear it. - if (fileExt) fileExt = `.${fileExt}`; - - // Append a UUID because simply checking if the file exists is not enough since - // multiple resources can be downloaded at the same time (race condition). - let imagePath = `${tempDir}/${safeFilename(name)}_${uuid.create()}${fileExt}`; - - try { - if (isDataUrl) { - await shim.imageFromDataUrl(url, imagePath); - } else if (urlUtils.urlProtocol(url).toLowerCase() === 'file:') { - // Can't think of any reason to disallow this at this point - // if (!allowFileProtocolImages) throw new Error('For security reasons, this URL with file:// protocol cannot be downloaded'); - const localPath = uri2path(url); - await shim.fsDriver().copy(localPath, imagePath); - } else { - const response = await shim.fetchBlob(url, { path: imagePath, maxRetry: 1 }); - - // If we could not find the file extension from the URL, try to get it - // now based on the Content-Type header. - if (!fileExt) imagePath = await this.tryToGuessImageExtFromMimeType_(response, imagePath); - } - return imagePath; - } catch (error) { - this.logger().warn(`Cannot download image at ${url}`, error); - return ''; - } - } - - async downloadImages_(urls:string[] /* , allowFileProtocolImages:boolean */) { - const PromisePool = require('es6-promise-pool'); - - const output:any = {}; - - const downloadOne = async (url:string) => { - const imagePath = await this.downloadImage_(url); // , allowFileProtocolImages); - if (imagePath) output[url] = { path: imagePath, originalUrl: url }; - }; - - let urlIndex = 0; - const promiseProducer = () => { - if (urlIndex >= urls.length) return null; - - const url = urls[urlIndex++]; - return downloadOne(url); - }; - - const concurrency = 10; - const pool = new PromisePool(promiseProducer, concurrency); - await pool.start(); - - return output; - } - - async createResourcesFromPaths_(urls:string[]) { - for (const url in urls) { - if (!urls.hasOwnProperty(url)) continue; - const urlInfo:any = urls[url]; - try { - const resource = await shim.createResourceFromPath(urlInfo.path); - urlInfo.resource = resource; - } catch (error) { - this.logger().warn(`Cannot create resource for ${url}`, error); - } - } - return urls; - } - - async removeTempFiles_(urls:string[]) { - for (const url in urls) { - if (!urls.hasOwnProperty(url)) continue; - const urlInfo:any = urls[url]; - try { - await shim.fsDriver().remove(urlInfo.path); - } catch (error) { - this.logger().warn(`Cannot remove ${urlInfo.path}`, error); - } - } - } - - replaceImageUrlsByResources_(markupLanguage:number, md:string, urls:any, imageSizes:any) { - const imageSizesIndexes:any = {}; - - if (markupLanguage === MarkupToHtml.MARKUP_LANGUAGE_HTML) { - return htmlUtils.replaceImageUrls(md, (imageUrl:string) => { - const urlInfo:any = urls[imageUrl]; - if (!urlInfo || !urlInfo.resource) return imageUrl; - return Resource.internalUrl(urlInfo.resource); - }); - } else { - // eslint-disable-next-line no-useless-escape - return md.replace(/(!\[.*?\]\()([^\s\)]+)(.*?\))/g, (_match:any, before:string, imageUrl:string, after:string) => { - const urlInfo = urls[imageUrl]; - if (!urlInfo || !urlInfo.resource) return before + imageUrl + after; - if (!(urlInfo.originalUrl in imageSizesIndexes)) imageSizesIndexes[urlInfo.originalUrl] = 0; - - const resourceUrl = Resource.internalUrl(urlInfo.resource); - const imageSizesCollection = imageSizes[urlInfo.originalUrl]; - - if (!imageSizesCollection) { - // In some cases, we won't find the image size information for that particular URL. Normally - // it will only happen when using the "Clip simplified page" feature, which can modify the - // image URLs (for example it will select a smaller size resolution). In that case, it's - // fine to return the image as-is because it has already good dimensions. - return before + resourceUrl + after; - } - - const imageSize = imageSizesCollection[imageSizesIndexes[urlInfo.originalUrl]]; - imageSizesIndexes[urlInfo.originalUrl]++; - - if (imageSize && (imageSize.naturalWidth !== imageSize.width || imageSize.naturalHeight !== imageSize.height)) { - return ``; - } else { - return before + resourceUrl + after; - } - }); - } - } -} diff --git a/ReactNativeClient/lib/services/rest/ApiResponse.js b/ReactNativeClient/lib/services/rest/ApiResponse.js deleted file mode 100644 index c55318abd7..0000000000 --- a/ReactNativeClient/lib/services/rest/ApiResponse.js +++ /dev/null @@ -1,5 +0,0 @@ -class ApiResponse { - constructor() {} -} - -module.exports = ApiResponse; diff --git a/ReactNativeClient/metro.config.js b/ReactNativeClient/metro.config.js deleted file mode 100644 index 2f499d999d..0000000000 --- a/ReactNativeClient/metro.config.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Metro configuration for React Native - * https://github.com/facebook/react-native - * - * @format - */ - -module.exports = { - transformer: { - getTransformOptions: async () => ({ - transform: { - experimentalImportSupport: false, - inlineRequires: false, - }, - }), - }, -}; diff --git a/ReactNativeClient/pluginAssets/mermaid/mermaid_render.js.base64.js b/ReactNativeClient/pluginAssets/mermaid/mermaid_render.js.base64.js deleted file mode 100644 index 15917ee0a0..0000000000 --- a/ReactNativeClient/pluginAssets/mermaid/mermaid_render.js.base64.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = `LyogZ2xvYmFsIG1lcm1haWQgKi8KCmZ1bmN0aW9uIG1lcm1haWRSZWFkeSgpIHsKCXJldHVybiB0eXBlb2YgbWVybWFpZCAhPT0gJ3VuZGVmaW5lZCc7Cn0KCmZ1bmN0aW9uIG1lcm1haWRJbml0KCkgewoJLy8gTWVybWFpZCdzIHdvbmRlcmZ1bCBBUEkgaGFzIHR3byBpbml0IG1ldGhvZHM6IGluaXQoKSBhbmQgaW5pdGlhbGl6ZSgpLgoJLy8gaW5pdCgpIGlzIGRlcHJlY3RhdGVkIGJ1dCB3b3JrcywgYW5kIGluaXRpYWxpemUoKSBpcyByZWNvbW1lbmRlZCBidXQgZG9lc24ndAoJLy8gd29yaywgc28gbGV0J3MgdXNlIGluaXQoKSBmb3Igbm93LgoJaWYgKG1lcm1haWRSZWFkeSgpKSB7CgkJdHJ5IHsKCQkJbWVybWFpZC5pbml0KCk7CgkJfSBjYXRjaCAoZXJyb3IpIHsKCQkJY29uc29sZS5lcnJvcignTWVybWFpZCBlcnJvcicsIGVycm9yKTsKCQl9CgoJCS8vIFJlc2V0dGluZyBlbGVtZW50cyBzaXplIC0gc2VlIG1lcm1haWQudHMKCQljb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21lcm1haWQnKTsKCQlmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHsKCQkJZWxlbWVudC5zdHlsZS53aWR0aCA9ICcxMDAlJzsKCQl9Cgl9Cn0KCmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2pvcGxpbi1ub3RlRGlkVXBkYXRlJywgKCkgPT4gewoJbWVybWFpZEluaXQoKTsKfSk7Cgpjb25zdCBpbml0SUlEXyA9IHNldEludGVydmFsKCgpID0+IHsKCWNvbnN0IGlzUmVhZHkgPSBtZXJtYWlkUmVhZHkoKTsKCWlmIChpc1JlYWR5KSB7CgkJY2xlYXJJbnRlcnZhbChpbml0SUlEXyk7CgkJbWVybWFpZEluaXQoKTsKCX0KfSwgMTAwKTsK`; \ No newline at end of file diff --git a/Tools/gulp/tasks/copyLib.js b/Tools/gulp/tasks/copyLib.js deleted file mode 100644 index 57af201c3e..0000000000 --- a/Tools/gulp/tasks/copyLib.js +++ /dev/null @@ -1,17 +0,0 @@ -const utils = require('../utils'); - -const rootDir = utils.rootDir(); - -module.exports = { - src: `${rootDir}/ReactNativeClient/lib/**/*`, - fn: async function() { - const copyOptions = { - excluded: [ - `${rootDir}/ReactNativeClient/lib/joplin-renderer/node_modules`, - ], - }; - - await utils.copyDir(`${rootDir}/ReactNativeClient/lib`, `${rootDir}/CliClient/build/lib`, copyOptions); - await utils.copyDir(`${rootDir}/ReactNativeClient/lib`, `${rootDir}/ElectronClient/lib`, copyOptions); - }, -}; diff --git a/Tools/package-lock.json b/Tools/package-lock.json deleted file mode 100644 index ab7f9ef095..0000000000 --- a/Tools/package-lock.json +++ /dev/null @@ -1,1342 +0,0 @@ -{ - "name": "tools", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "ajv": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", - "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - }, - "dependencies": { - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } - } - }, - "app-module-path": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", - "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=" - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bl": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", - "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "buffer": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", - "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", - "requires": { - "source-map": "~0.6.0" - } - }, - "cliui": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.1.tgz", - "integrity": "sha512-rcvHOWyGyid6I1WjT/3NatKj2kDt9OdSHSXpyLXaMWFbKpGACNW8pRhhdPUq9MWUOdwn8Rz9AVETjF4105rZZQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "requires": { - "mimic-response": "^2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" - }, - "escalade": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.0.tgz", - "integrity": "sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig==" - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "gettext-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.3.0.tgz", - "integrity": "sha512-iloxjcw+uTPnQ8DrGICWtqkHNgk3mAiDI77pLmXQCnhM+BxFQXstzTA4zj3EpIYMysRQnnNzHyHzBUEazz80Sw==", - "requires": { - "encoding": "^0.1.12", - "safe-buffer": "^5.1.1" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "html-minifier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", - "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", - "requires": { - "camel-case": "^3.0.0", - "clean-css": "^4.2.1", - "commander": "^2.19.0", - "he": "^1.2.0", - "param-case": "^2.1.1", - "relateurl": "^0.2.7", - "uglify-js": "^3.5.1" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "linkify-it": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz", - "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=", - "requires": { - "uc.micro": "^1.0.1" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" - }, - "markdown-it": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.1.tgz", - "integrity": "sha512-CzzqSSNkFRUf9vlWvhK1awpJreMRqdCrBvZ8DIoDWTOkESMIF741UPAhuAmbyWmdiFPA6WARNhnu2M6Nrhwa+A==", - "requires": { - "argparse": "^1.0.7", - "entities": "~1.1.1", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - }, - "md5-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-4.0.0.tgz", - "integrity": "sha512-UC0qFwyAjn4YdPpKaDNw6gNxRf7Mcx7jC1UGCY4boCzgvU2Aoc1mOGzTtrjjLKhM5ivsnhoKpQVxKPp+1j1qwg==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" - }, - "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", - "requires": { - "mime-db": "1.43.0" - } - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", - "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "mkdirp-classic": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", - "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==" - }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - }, - "momentjs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/momentjs/-/momentjs-2.0.0.tgz", - "integrity": "sha1-c9+QS0+kGPbjxgXoMc727VUY69Q=" - }, - "mustache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz", - "integrity": "sha1-QCj3d4sXcIpImTCm5SrDvKDaQdA=" - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-abi": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.15.0.tgz", - "integrity": "sha512-FeLpTS0F39U7hHZU1srAK4Vx+5AHNVOTP+hxBNQknR/54laTHSFIJkDWDqiquY1LeLUgTfPN7sLPhMubx0PLAg==", - "requires": { - "semver": "^5.4.1" - } - }, - "node-addon-api": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", - "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==" - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "requires": { - "no-case": "^2.2.0" - } - }, - "pct-encode": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pct-encode/-/pct-encode-1.0.2.tgz", - "integrity": "sha1-uZt7BE1r18OeSDmnqAEirXUVyqU=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "prebuild-install": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz", - "integrity": "sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==", - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "sharp": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.2.tgz", - "integrity": "sha512-l1GN0kFNtJr3U9i9pt7a+vo2Ij0xv4tTKDIPx8W6G9WELhPwrMyZZJKAAQNBSI785XB4uZfS5Wpz8C9jWV4AFQ==", - "requires": { - "color": "^3.1.2", - "detect-libc": "^1.0.3", - "node-addon-api": "^2.0.0", - "npmlog": "^4.1.2", - "prebuild-install": "^5.3.3", - "semver": "^7.1.3", - "simple-get": "^3.1.0", - "tar": "^6.0.1", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "semver": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.2.1.tgz", - "integrity": "sha512-aHhm1pD02jXXkyIpq25qBZjr3CQgg8KST8uX0OWXch3xE6jw+1bfbWnCjzMwojsTquroUmKFHNzU6x26mEiRxw==" - } - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" - }, - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "string-padding": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-padding/-/string-padding-1.0.2.tgz", - "integrity": "sha1-OqrYVbPpc1xeQS3+chmMz5nH9I4=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "tar": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.1.tgz", - "integrity": "sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q==", - "requires": { - "chownr": "^1.1.3", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.0", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - } - }, - "tar-stream": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", - "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", - "requires": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "uc.micro": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.5.tgz", - "integrity": "sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==" - }, - "uglify-js": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", - "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", - "requires": { - "commander": "~2.20.0", - "source-map": "~0.6.1" - } - }, - "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "uri-template": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uri-template/-/uri-template-1.0.1.tgz", - "integrity": "sha1-FKklo35Nk/diVDKqEWsF5Qyuga0=", - "requires": { - "pct-encode": "~1.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "y18n": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.1.tgz", - "integrity": "sha512-/jJ831jEs4vGDbYPQp4yGKDYPSCCEQ45uZWJHE1AoYBzqdZi8+LDWas0z4HrmJXmKdpFsTiowSHXdxyFhpmdMg==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-6+nLw8xa9uK1BOEOykaiYAJVh6/CjxWXK/q9b5FpRgNslt8s22F2xMBqVIKgCRjNgGvGPBy8Vog7WN7yh4amtA==", - "requires": { - "cliui": "^7.0.0", - "escalade": "^3.0.2", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.1", - "yargs-parser": "^20.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-2agPoRFPoIcFzOIp6656gcvsg2ohtscpw2OINr/q46+Sq41xz2OYLqx5HRHabmFU1OARIPAYH5uteICE7mn/5A==" - } - } -} diff --git a/appveyor.yml b/appveyor.yml index 4d29320614..ca5a955390 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -14,7 +14,7 @@ install: build_script: - npm install - - ps: cd ElectronClient + - ps: cd packages/app-desktop - npm run dist test: off diff --git a/docs/api/references/plugin_api/assets/js/search.json b/docs/api/references/plugin_api/assets/js/search.json index 34ad62d9a0..b8d161ff78 100644 --- a/docs/api/references/plugin_api/assets/js/search.json +++ b/docs/api/references/plugin_api/assets/js/search.json @@ -1 +1 @@ -{"kinds":{"4":"Enumeration","16":"Enumeration member","128":"Class","256":"Interface","512":"Constructor","1024":"Property","2048":"Method","262144":"Accessor","4194304":"Type alias"},"rows":[{"id":0,"kind":256,"name":"Command","url":"interfaces/command.html","classes":"tsd-kind-interface"},{"id":1,"kind":1024,"name":"name","url":"interfaces/command.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Command"},{"id":2,"kind":1024,"name":"label","url":"interfaces/command.html#label","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Command"},{"id":3,"kind":1024,"name":"iconName","url":"interfaces/command.html#iconname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Command"},{"id":4,"kind":2048,"name":"execute","url":"interfaces/command.html#execute","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Command"},{"id":5,"kind":1024,"name":"enabledCondition","url":"interfaces/command.html#enabledcondition","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Command"},{"id":6,"kind":4,"name":"FileSystemItem","url":"enums/filesystemitem.html","classes":"tsd-kind-enum"},{"id":7,"kind":16,"name":"File","url":"enums/filesystemitem.html#file","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"FileSystemItem"},{"id":8,"kind":16,"name":"Directory","url":"enums/filesystemitem.html#directory","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"FileSystemItem"},{"id":9,"kind":4,"name":"ImportModuleOutputFormat","url":"enums/importmoduleoutputformat.html","classes":"tsd-kind-enum"},{"id":10,"kind":16,"name":"Markdown","url":"enums/importmoduleoutputformat.html#markdown","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ImportModuleOutputFormat"},{"id":11,"kind":16,"name":"Html","url":"enums/importmoduleoutputformat.html#html","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ImportModuleOutputFormat"},{"id":12,"kind":256,"name":"ExportModule","url":"interfaces/exportmodule.html","classes":"tsd-kind-interface"},{"id":13,"kind":1024,"name":"format","url":"interfaces/exportmodule.html#format","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportModule"},{"id":14,"kind":1024,"name":"description","url":"interfaces/exportmodule.html#description","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportModule"},{"id":15,"kind":1024,"name":"target","url":"interfaces/exportmodule.html#target","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportModule"},{"id":16,"kind":1024,"name":"isNoteArchive","url":"interfaces/exportmodule.html#isnotearchive","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportModule"},{"id":17,"kind":1024,"name":"fileExtensions","url":"interfaces/exportmodule.html#fileextensions","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportModule"},{"id":18,"kind":2048,"name":"onInit","url":"interfaces/exportmodule.html#oninit","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ExportModule"},{"id":19,"kind":2048,"name":"onProcessItem","url":"interfaces/exportmodule.html#onprocessitem","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ExportModule"},{"id":20,"kind":2048,"name":"onProcessResource","url":"interfaces/exportmodule.html#onprocessresource","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ExportModule"},{"id":21,"kind":2048,"name":"onClose","url":"interfaces/exportmodule.html#onclose","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ExportModule"},{"id":22,"kind":256,"name":"ImportModule","url":"interfaces/importmodule.html","classes":"tsd-kind-interface"},{"id":23,"kind":1024,"name":"format","url":"interfaces/importmodule.html#format","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportModule"},{"id":24,"kind":1024,"name":"description","url":"interfaces/importmodule.html#description","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportModule"},{"id":25,"kind":1024,"name":"isNoteArchive","url":"interfaces/importmodule.html#isnotearchive","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportModule"},{"id":26,"kind":1024,"name":"sources","url":"interfaces/importmodule.html#sources","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportModule"},{"id":27,"kind":1024,"name":"fileExtensions","url":"interfaces/importmodule.html#fileextensions","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportModule"},{"id":28,"kind":1024,"name":"outputFormat","url":"interfaces/importmodule.html#outputformat","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportModule"},{"id":29,"kind":2048,"name":"onExec","url":"interfaces/importmodule.html#onexec","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ImportModule"},{"id":30,"kind":256,"name":"ExportOptions","url":"interfaces/exportoptions.html","classes":"tsd-kind-interface"},{"id":31,"kind":1024,"name":"format","url":"interfaces/exportoptions.html#format","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportOptions"},{"id":32,"kind":1024,"name":"path","url":"interfaces/exportoptions.html#path","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportOptions"},{"id":33,"kind":1024,"name":"sourceFolderIds","url":"interfaces/exportoptions.html#sourcefolderids","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportOptions"},{"id":34,"kind":1024,"name":"sourceNoteIds","url":"interfaces/exportoptions.html#sourcenoteids","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportOptions"},{"id":35,"kind":1024,"name":"modulePath","url":"interfaces/exportoptions.html#modulepath","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportOptions"},{"id":36,"kind":1024,"name":"target","url":"interfaces/exportoptions.html#target","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportOptions"},{"id":37,"kind":256,"name":"ExportContext","url":"interfaces/exportcontext.html","classes":"tsd-kind-interface"},{"id":38,"kind":1024,"name":"destPath","url":"interfaces/exportcontext.html#destpath","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportContext"},{"id":39,"kind":1024,"name":"options","url":"interfaces/exportcontext.html#options","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportContext"},{"id":40,"kind":1024,"name":"userData","url":"interfaces/exportcontext.html#userdata","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportContext"},{"id":41,"kind":256,"name":"ImportContext","url":"interfaces/importcontext.html","classes":"tsd-kind-interface"},{"id":42,"kind":1024,"name":"sourcePath","url":"interfaces/importcontext.html#sourcepath","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportContext"},{"id":43,"kind":1024,"name":"options","url":"interfaces/importcontext.html#options","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportContext"},{"id":44,"kind":1024,"name":"warnings","url":"interfaces/importcontext.html#warnings","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportContext"},{"id":45,"kind":256,"name":"Script","url":"interfaces/script.html","classes":"tsd-kind-interface"},{"id":46,"kind":2048,"name":"onStart","url":"interfaces/script.html#onstart","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Script"},{"id":47,"kind":256,"name":"CreateMenuItemOptions","url":"interfaces/createmenuitemoptions.html","classes":"tsd-kind-interface"},{"id":48,"kind":1024,"name":"accelerator","url":"interfaces/createmenuitemoptions.html#accelerator","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CreateMenuItemOptions"},{"id":49,"kind":4,"name":"MenuItemLocation","url":"enums/menuitemlocation.html","classes":"tsd-kind-enum"},{"id":50,"kind":16,"name":"File","url":"enums/menuitemlocation.html#file","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":51,"kind":16,"name":"Edit","url":"enums/menuitemlocation.html#edit","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":52,"kind":16,"name":"View","url":"enums/menuitemlocation.html#view","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":53,"kind":16,"name":"Note","url":"enums/menuitemlocation.html#note","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":54,"kind":16,"name":"Tools","url":"enums/menuitemlocation.html#tools","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":55,"kind":16,"name":"Help","url":"enums/menuitemlocation.html#help","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":56,"kind":16,"name":"Context","url":"enums/menuitemlocation.html#context","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":57,"kind":256,"name":"MenuItem","url":"interfaces/menuitem.html","classes":"tsd-kind-interface"},{"id":58,"kind":1024,"name":"commandName","url":"interfaces/menuitem.html#commandname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MenuItem"},{"id":59,"kind":1024,"name":"accelerator","url":"interfaces/menuitem.html#accelerator","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MenuItem"},{"id":60,"kind":1024,"name":"submenu","url":"interfaces/menuitem.html#submenu","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MenuItem"},{"id":61,"kind":1024,"name":"label","url":"interfaces/menuitem.html#label","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MenuItem"},{"id":62,"kind":256,"name":"ButtonSpec","url":"interfaces/buttonspec.html","classes":"tsd-kind-interface"},{"id":63,"kind":1024,"name":"id","url":"interfaces/buttonspec.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ButtonSpec"},{"id":64,"kind":1024,"name":"title","url":"interfaces/buttonspec.html#title","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ButtonSpec"},{"id":65,"kind":2048,"name":"onClick","url":"interfaces/buttonspec.html#onclick","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ButtonSpec"},{"id":66,"kind":4,"name":"ToolbarButtonLocation","url":"enums/toolbarbuttonlocation.html","classes":"tsd-kind-enum"},{"id":67,"kind":16,"name":"NoteToolbar","url":"enums/toolbarbuttonlocation.html#notetoolbar","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ToolbarButtonLocation"},{"id":68,"kind":16,"name":"EditorToolbar","url":"enums/toolbarbuttonlocation.html#editortoolbar","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ToolbarButtonLocation"},{"id":69,"kind":256,"name":"EditorCommand","url":"interfaces/editorcommand.html","classes":"tsd-kind-interface"},{"id":70,"kind":1024,"name":"name","url":"interfaces/editorcommand.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"EditorCommand"},{"id":71,"kind":1024,"name":"value","url":"interfaces/editorcommand.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"EditorCommand"},{"id":72,"kind":4,"name":"SettingItemType","url":"enums/settingitemtype.html","classes":"tsd-kind-enum"},{"id":73,"kind":16,"name":"Int","url":"enums/settingitemtype.html#int","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SettingItemType"},{"id":74,"kind":16,"name":"String","url":"enums/settingitemtype.html#string","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SettingItemType"},{"id":75,"kind":16,"name":"Bool","url":"enums/settingitemtype.html#bool","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SettingItemType"},{"id":76,"kind":16,"name":"Array","url":"enums/settingitemtype.html#array","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SettingItemType"},{"id":77,"kind":16,"name":"Object","url":"enums/settingitemtype.html#object","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SettingItemType"},{"id":78,"kind":16,"name":"Button","url":"enums/settingitemtype.html#button","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SettingItemType"},{"id":79,"kind":256,"name":"SettingItem","url":"interfaces/settingitem.html","classes":"tsd-kind-interface"},{"id":80,"kind":1024,"name":"value","url":"interfaces/settingitem.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":81,"kind":1024,"name":"type","url":"interfaces/settingitem.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":82,"kind":1024,"name":"public","url":"interfaces/settingitem.html#public","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":83,"kind":1024,"name":"label","url":"interfaces/settingitem.html#label","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":84,"kind":1024,"name":"description","url":"interfaces/settingitem.html#description","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":85,"kind":1024,"name":"isEnum","url":"interfaces/settingitem.html#isenum","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":86,"kind":1024,"name":"section","url":"interfaces/settingitem.html#section","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":87,"kind":1024,"name":"options","url":"interfaces/settingitem.html#options","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":88,"kind":1024,"name":"appTypes","url":"interfaces/settingitem.html#apptypes","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":89,"kind":1024,"name":"secure","url":"interfaces/settingitem.html#secure","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":90,"kind":1024,"name":"advanced","url":"interfaces/settingitem.html#advanced","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":91,"kind":1024,"name":"minimum","url":"interfaces/settingitem.html#minimum","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":92,"kind":1024,"name":"maximum","url":"interfaces/settingitem.html#maximum","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":93,"kind":1024,"name":"step","url":"interfaces/settingitem.html#step","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":94,"kind":256,"name":"SettingSection","url":"interfaces/settingsection.html","classes":"tsd-kind-interface"},{"id":95,"kind":1024,"name":"label","url":"interfaces/settingsection.html#label","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingSection"},{"id":96,"kind":1024,"name":"iconName","url":"interfaces/settingsection.html#iconname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingSection"},{"id":97,"kind":1024,"name":"description","url":"interfaces/settingsection.html#description","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingSection"},{"id":98,"kind":1024,"name":"name","url":"interfaces/settingsection.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingSection"},{"id":99,"kind":4,"name":"ContentScriptType","url":"enums/contentscripttype.html","classes":"tsd-kind-enum"},{"id":100,"kind":16,"name":"MarkdownItPlugin","url":"enums/contentscripttype.html#markdownitplugin","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ContentScriptType"},{"id":101,"kind":16,"name":"CodeMirrorPlugin","url":"enums/contentscripttype.html#codemirrorplugin","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ContentScriptType"},{"id":102,"kind":4194304,"name":"ButtonId","url":"globals.html#buttonid","classes":"tsd-kind-type-alias"},{"id":103,"kind":4194304,"name":"ViewHandle","url":"globals.html#viewhandle","classes":"tsd-kind-type-alias"},{"id":104,"kind":4194304,"name":"Path","url":"globals.html#path","classes":"tsd-kind-type-alias"},{"id":105,"kind":128,"name":"JoplinData","url":"classes/joplindata.html","classes":"tsd-kind-class"},{"id":106,"kind":2048,"name":"get","url":"classes/joplindata.html#get","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinData"},{"id":107,"kind":2048,"name":"post","url":"classes/joplindata.html#post","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinData"},{"id":108,"kind":2048,"name":"put","url":"classes/joplindata.html#put","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinData"},{"id":109,"kind":2048,"name":"delete","url":"classes/joplindata.html#delete","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinData"},{"id":110,"kind":128,"name":"JoplinPlugins","url":"classes/joplinplugins.html","classes":"tsd-kind-class"},{"id":111,"kind":512,"name":"constructor","url":"classes/joplinplugins.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinPlugins"},{"id":112,"kind":2048,"name":"register","url":"classes/joplinplugins.html#register","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinPlugins"},{"id":113,"kind":2048,"name":"registerContentScript","url":"classes/joplinplugins.html#registercontentscript","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinPlugins"},{"id":114,"kind":128,"name":"JoplinWorkspace","url":"classes/joplinworkspace.html","classes":"tsd-kind-class"},{"id":115,"kind":512,"name":"constructor","url":"classes/joplinworkspace.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":116,"kind":2048,"name":"onNoteSelectionChange","url":"classes/joplinworkspace.html#onnoteselectionchange","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":117,"kind":2048,"name":"onNoteContentChange","url":"classes/joplinworkspace.html#onnotecontentchange","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":118,"kind":2048,"name":"onNoteAlarmTrigger","url":"classes/joplinworkspace.html#onnotealarmtrigger","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":119,"kind":2048,"name":"onSyncComplete","url":"classes/joplinworkspace.html#onsynccomplete","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":120,"kind":2048,"name":"selectedNote","url":"classes/joplinworkspace.html#selectednote","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":121,"kind":2048,"name":"selectedNoteIds","url":"classes/joplinworkspace.html#selectednoteids","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":122,"kind":128,"name":"JoplinCommands","url":"classes/joplincommands.html","classes":"tsd-kind-class"},{"id":123,"kind":2048,"name":"execute","url":"classes/joplincommands.html#execute","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinCommands"},{"id":124,"kind":2048,"name":"register","url":"classes/joplincommands.html#register","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinCommands"},{"id":125,"kind":128,"name":"JoplinViewsDialogs","url":"classes/joplinviewsdialogs.html","classes":"tsd-kind-class"},{"id":126,"kind":512,"name":"constructor","url":"classes/joplinviewsdialogs.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinViewsDialogs"},{"id":127,"kind":2048,"name":"create","url":"classes/joplinviewsdialogs.html#create","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsDialogs"},{"id":128,"kind":2048,"name":"showMessageBox","url":"classes/joplinviewsdialogs.html#showmessagebox","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsDialogs"},{"id":129,"kind":2048,"name":"setHtml","url":"classes/joplinviewsdialogs.html#sethtml","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsDialogs"},{"id":130,"kind":2048,"name":"setButtons","url":"classes/joplinviewsdialogs.html#setbuttons","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsDialogs"},{"id":131,"kind":2048,"name":"open","url":"classes/joplinviewsdialogs.html#open","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsDialogs"},{"id":132,"kind":128,"name":"JoplinViewsMenuItems","url":"classes/joplinviewsmenuitems.html","classes":"tsd-kind-class"},{"id":133,"kind":512,"name":"constructor","url":"classes/joplinviewsmenuitems.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinViewsMenuItems"},{"id":134,"kind":2048,"name":"create","url":"classes/joplinviewsmenuitems.html#create","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsMenuItems"},{"id":135,"kind":128,"name":"JoplinViewsMenus","url":"classes/joplinviewsmenus.html","classes":"tsd-kind-class"},{"id":136,"kind":512,"name":"constructor","url":"classes/joplinviewsmenus.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinViewsMenus"},{"id":137,"kind":2048,"name":"create","url":"classes/joplinviewsmenus.html#create","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsMenus"},{"id":138,"kind":128,"name":"JoplinViewsToolbarButtons","url":"classes/joplinviewstoolbarbuttons.html","classes":"tsd-kind-class"},{"id":139,"kind":512,"name":"constructor","url":"classes/joplinviewstoolbarbuttons.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinViewsToolbarButtons"},{"id":140,"kind":2048,"name":"create","url":"classes/joplinviewstoolbarbuttons.html#create","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsToolbarButtons"},{"id":141,"kind":128,"name":"JoplinViewsPanels","url":"classes/joplinviewspanels.html","classes":"tsd-kind-class"},{"id":142,"kind":512,"name":"constructor","url":"classes/joplinviewspanels.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinViewsPanels"},{"id":143,"kind":2048,"name":"create","url":"classes/joplinviewspanels.html#create","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsPanels"},{"id":144,"kind":2048,"name":"setHtml","url":"classes/joplinviewspanels.html#sethtml","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsPanels"},{"id":145,"kind":2048,"name":"addScript","url":"classes/joplinviewspanels.html#addscript","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsPanels"},{"id":146,"kind":2048,"name":"onMessage","url":"classes/joplinviewspanels.html#onmessage","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsPanels"},{"id":147,"kind":128,"name":"JoplinViews","url":"classes/joplinviews.html","classes":"tsd-kind-class"},{"id":148,"kind":512,"name":"constructor","url":"classes/joplinviews.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinViews"},{"id":149,"kind":262144,"name":"dialogs","url":"classes/joplinviews.html#dialogs","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"JoplinViews"},{"id":150,"kind":262144,"name":"panels","url":"classes/joplinviews.html#panels","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"JoplinViews"},{"id":151,"kind":262144,"name":"menuItems","url":"classes/joplinviews.html#menuitems","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"JoplinViews"},{"id":152,"kind":262144,"name":"menus","url":"classes/joplinviews.html#menus","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"JoplinViews"},{"id":153,"kind":262144,"name":"toolbarButtons","url":"classes/joplinviews.html#toolbarbuttons","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"JoplinViews"},{"id":154,"kind":128,"name":"JoplinInterop","url":"classes/joplininterop.html","classes":"tsd-kind-class"},{"id":155,"kind":2048,"name":"registerExportModule","url":"classes/joplininterop.html#registerexportmodule","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinInterop"},{"id":156,"kind":2048,"name":"registerImportModule","url":"classes/joplininterop.html#registerimportmodule","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinInterop"},{"id":157,"kind":128,"name":"JoplinSettings","url":"classes/joplinsettings.html","classes":"tsd-kind-class"},{"id":158,"kind":512,"name":"constructor","url":"classes/joplinsettings.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinSettings"},{"id":159,"kind":2048,"name":"registerSetting","url":"classes/joplinsettings.html#registersetting","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinSettings"},{"id":160,"kind":2048,"name":"registerSection","url":"classes/joplinsettings.html#registersection","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinSettings"},{"id":161,"kind":2048,"name":"value","url":"classes/joplinsettings.html#value","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinSettings"},{"id":162,"kind":2048,"name":"setValue","url":"classes/joplinsettings.html#setvalue","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinSettings"},{"id":163,"kind":2048,"name":"globalValue","url":"classes/joplinsettings.html#globalvalue","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinSettings"},{"id":164,"kind":128,"name":"Joplin","url":"classes/joplin.html","classes":"tsd-kind-class"},{"id":165,"kind":512,"name":"constructor","url":"classes/joplin.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"Joplin"},{"id":166,"kind":262144,"name":"data","url":"classes/joplin.html#data","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"},{"id":167,"kind":262144,"name":"plugins","url":"classes/joplin.html#plugins","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"},{"id":168,"kind":262144,"name":"workspace","url":"classes/joplin.html#workspace","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"},{"id":169,"kind":262144,"name":"commands","url":"classes/joplin.html#commands","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"},{"id":170,"kind":262144,"name":"views","url":"classes/joplin.html#views","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"},{"id":171,"kind":262144,"name":"interop","url":"classes/joplin.html#interop","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"},{"id":172,"kind":262144,"name":"settings","url":"classes/joplin.html#settings","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"}],"index":{"version":"2.3.8","fields":["name","parent"],"fieldVectors":[["name/0",[0,32.873]],["parent/0",[]],["name/1",[1,39.063]],["parent/1",[0,2.978]],["name/2",[2,36.55]],["parent/2",[0,2.978]],["name/3",[3,42.428]],["parent/3",[0,2.978]],["name/4",[4,42.428]],["parent/4",[0,2.978]],["name/5",[5,47.536]],["parent/5",[0,2.978]],["name/6",[6,39.063]],["parent/6",[]],["name/7",[7,42.428]],["parent/7",[6,3.539]],["name/8",[8,47.536]],["parent/8",[6,3.539]],["name/9",[9,39.063]],["parent/9",[]],["name/10",[10,47.536]],["parent/10",[9,3.539]],["name/11",[11,47.536]],["parent/11",[9,3.539]],["name/12",[12,28.077]],["parent/12",[]],["name/13",[13,39.063]],["parent/13",[12,2.544]],["name/14",[14,36.55]],["parent/14",[12,2.544]],["name/15",[15,42.428]],["parent/15",[12,2.544]],["name/16",[16,42.428]],["parent/16",[12,2.544]],["name/17",[17,42.428]],["parent/17",[12,2.544]],["name/18",[18,47.536]],["parent/18",[12,2.544]],["name/19",[19,47.536]],["parent/19",[12,2.544]],["name/20",[20,47.536]],["parent/20",[12,2.544]],["name/21",[21,47.536]],["parent/21",[12,2.544]],["name/22",[22,30.19]],["parent/22",[]],["name/23",[13,39.063]],["parent/23",[22,2.735]],["name/24",[14,36.55]],["parent/24",[22,2.735]],["name/25",[16,42.428]],["parent/25",[22,2.735]],["name/26",[23,47.536]],["parent/26",[22,2.735]],["name/27",[17,42.428]],["parent/27",[22,2.735]],["name/28",[24,47.536]],["parent/28",[22,2.735]],["name/29",[25,47.536]],["parent/29",[22,2.735]],["name/30",[26,31.442]],["parent/30",[]],["name/31",[13,39.063]],["parent/31",[26,2.849]],["name/32",[27,42.428]],["parent/32",[26,2.849]],["name/33",[28,47.536]],["parent/33",[26,2.849]],["name/34",[29,47.536]],["parent/34",[26,2.849]],["name/35",[30,47.536]],["parent/35",[26,2.849]],["name/36",[15,42.428]],["parent/36",[26,2.849]],["name/37",[31,36.55]],["parent/37",[]],["name/38",[32,47.536]],["parent/38",[31,3.311]],["name/39",[33,39.063]],["parent/39",[31,3.311]],["name/40",[34,47.536]],["parent/40",[31,3.311]],["name/41",[35,36.55]],["parent/41",[]],["name/42",[36,47.536]],["parent/42",[35,3.311]],["name/43",[33,39.063]],["parent/43",[35,3.311]],["name/44",[37,47.536]],["parent/44",[35,3.311]],["name/45",[38,42.428]],["parent/45",[]],["name/46",[39,47.536]],["parent/46",[38,3.844]],["name/47",[40,42.428]],["parent/47",[]],["name/48",[41,42.428]],["parent/48",[40,3.844]],["name/49",[42,30.19]],["parent/49",[]],["name/50",[7,42.428]],["parent/50",[42,2.735]],["name/51",[43,47.536]],["parent/51",[42,2.735]],["name/52",[44,47.536]],["parent/52",[42,2.735]],["name/53",[45,47.536]],["parent/53",[42,2.735]],["name/54",[46,47.536]],["parent/54",[42,2.735]],["name/55",[47,47.536]],["parent/55",[42,2.735]],["name/56",[48,47.536]],["parent/56",[42,2.735]],["name/57",[49,34.543]],["parent/57",[]],["name/58",[50,47.536]],["parent/58",[49,3.13]],["name/59",[41,42.428]],["parent/59",[49,3.13]],["name/60",[51,47.536]],["parent/60",[49,3.13]],["name/61",[2,36.55]],["parent/61",[49,3.13]],["name/62",[52,36.55]],["parent/62",[]],["name/63",[53,47.536]],["parent/63",[52,3.311]],["name/64",[54,47.536]],["parent/64",[52,3.311]],["name/65",[55,47.536]],["parent/65",[52,3.311]],["name/66",[56,39.063]],["parent/66",[]],["name/67",[57,47.536]],["parent/67",[56,3.539]],["name/68",[58,47.536]],["parent/68",[56,3.539]],["name/69",[59,39.063]],["parent/69",[]],["name/70",[1,39.063]],["parent/70",[59,3.539]],["name/71",[60,39.063]],["parent/71",[59,3.539]],["name/72",[61,31.442]],["parent/72",[]],["name/73",[62,47.536]],["parent/73",[61,2.849]],["name/74",[63,47.536]],["parent/74",[61,2.849]],["name/75",[64,47.536]],["parent/75",[61,2.849]],["name/76",[65,47.536]],["parent/76",[61,2.849]],["name/77",[66,47.536]],["parent/77",[61,2.849]],["name/78",[67,47.536]],["parent/78",[61,2.849]],["name/79",[68,24.182]],["parent/79",[]],["name/80",[60,39.063]],["parent/80",[68,2.191]],["name/81",[69,47.536]],["parent/81",[68,2.191]],["name/82",[70,47.536]],["parent/82",[68,2.191]],["name/83",[2,36.55]],["parent/83",[68,2.191]],["name/84",[14,36.55]],["parent/84",[68,2.191]],["name/85",[71,47.536]],["parent/85",[68,2.191]],["name/86",[72,47.536]],["parent/86",[68,2.191]],["name/87",[33,39.063]],["parent/87",[68,2.191]],["name/88",[73,47.536]],["parent/88",[68,2.191]],["name/89",[74,47.536]],["parent/89",[68,2.191]],["name/90",[75,47.536]],["parent/90",[68,2.191]],["name/91",[76,47.536]],["parent/91",[68,2.191]],["name/92",[77,47.536]],["parent/92",[68,2.191]],["name/93",[78,47.536]],["parent/93",[68,2.191]],["name/94",[79,34.543]],["parent/94",[]],["name/95",[2,36.55]],["parent/95",[79,3.13]],["name/96",[3,42.428]],["parent/96",[79,3.13]],["name/97",[14,36.55]],["parent/97",[79,3.13]],["name/98",[1,39.063]],["parent/98",[79,3.13]],["name/99",[80,39.063]],["parent/99",[]],["name/100",[81,47.536]],["parent/100",[80,3.539]],["name/101",[82,47.536]],["parent/101",[80,3.539]],["name/102",[83,47.536]],["parent/102",[]],["name/103",[84,47.536]],["parent/103",[]],["name/104",[27,42.428]],["parent/104",[]],["name/105",[85,34.543]],["parent/105",[]],["name/106",[86,47.536]],["parent/106",[85,3.13]],["name/107",[87,47.536]],["parent/107",[85,3.13]],["name/108",[88,47.536]],["parent/108",[85,3.13]],["name/109",[89,47.536]],["parent/109",[85,3.13]],["name/110",[90,36.55]],["parent/110",[]],["name/111",[91,28.077]],["parent/111",[90,3.311]],["name/112",[92,42.428]],["parent/112",[90,3.311]],["name/113",[93,47.536]],["parent/113",[90,3.311]],["name/114",[94,30.19]],["parent/114",[]],["name/115",[91,28.077]],["parent/115",[94,2.735]],["name/116",[95,47.536]],["parent/116",[94,2.735]],["name/117",[96,47.536]],["parent/117",[94,2.735]],["name/118",[97,47.536]],["parent/118",[94,2.735]],["name/119",[98,47.536]],["parent/119",[94,2.735]],["name/120",[99,47.536]],["parent/120",[94,2.735]],["name/121",[100,47.536]],["parent/121",[94,2.735]],["name/122",[101,39.063]],["parent/122",[]],["name/123",[4,42.428]],["parent/123",[101,3.539]],["name/124",[92,42.428]],["parent/124",[101,3.539]],["name/125",[102,31.442]],["parent/125",[]],["name/126",[91,28.077]],["parent/126",[102,2.849]],["name/127",[103,34.543]],["parent/127",[102,2.849]],["name/128",[104,47.536]],["parent/128",[102,2.849]],["name/129",[105,42.428]],["parent/129",[102,2.849]],["name/130",[106,47.536]],["parent/130",[102,2.849]],["name/131",[107,47.536]],["parent/131",[102,2.849]],["name/132",[108,39.063]],["parent/132",[]],["name/133",[91,28.077]],["parent/133",[108,3.539]],["name/134",[103,34.543]],["parent/134",[108,3.539]],["name/135",[109,39.063]],["parent/135",[]],["name/136",[91,28.077]],["parent/136",[109,3.539]],["name/137",[103,34.543]],["parent/137",[109,3.539]],["name/138",[110,39.063]],["parent/138",[]],["name/139",[91,28.077]],["parent/139",[110,3.539]],["name/140",[103,34.543]],["parent/140",[110,3.539]],["name/141",[111,32.873]],["parent/141",[]],["name/142",[91,28.077]],["parent/142",[111,2.978]],["name/143",[103,34.543]],["parent/143",[111,2.978]],["name/144",[105,42.428]],["parent/144",[111,2.978]],["name/145",[112,47.536]],["parent/145",[111,2.978]],["name/146",[113,47.536]],["parent/146",[111,2.978]],["name/147",[114,31.442]],["parent/147",[]],["name/148",[91,28.077]],["parent/148",[114,2.849]],["name/149",[115,47.536]],["parent/149",[114,2.849]],["name/150",[116,47.536]],["parent/150",[114,2.849]],["name/151",[117,47.536]],["parent/151",[114,2.849]],["name/152",[118,47.536]],["parent/152",[114,2.849]],["name/153",[119,47.536]],["parent/153",[114,2.849]],["name/154",[120,39.063]],["parent/154",[]],["name/155",[121,47.536]],["parent/155",[120,3.539]],["name/156",[122,47.536]],["parent/156",[120,3.539]],["name/157",[123,31.442]],["parent/157",[]],["name/158",[91,28.077]],["parent/158",[123,2.849]],["name/159",[124,47.536]],["parent/159",[123,2.849]],["name/160",[125,47.536]],["parent/160",[123,2.849]],["name/161",[60,39.063]],["parent/161",[123,2.849]],["name/162",[126,47.536]],["parent/162",[123,2.849]],["name/163",[127,47.536]],["parent/163",[123,2.849]],["name/164",[128,29.078]],["parent/164",[]],["name/165",[91,28.077]],["parent/165",[128,2.634]],["name/166",[129,47.536]],["parent/166",[128,2.634]],["name/167",[130,47.536]],["parent/167",[128,2.634]],["name/168",[131,47.536]],["parent/168",[128,2.634]],["name/169",[132,47.536]],["parent/169",[128,2.634]],["name/170",[133,47.536]],["parent/170",[128,2.634]],["name/171",[134,47.536]],["parent/171",[128,2.634]],["name/172",[135,47.536]],["parent/172",[128,2.634]]],"invertedIndex":[["accelerator",{"_index":41,"name":{"48":{},"59":{}},"parent":{}}],["addscript",{"_index":112,"name":{"145":{}},"parent":{}}],["advanced",{"_index":75,"name":{"90":{}},"parent":{}}],["apptypes",{"_index":73,"name":{"88":{}},"parent":{}}],["array",{"_index":65,"name":{"76":{}},"parent":{}}],["bool",{"_index":64,"name":{"75":{}},"parent":{}}],["button",{"_index":67,"name":{"78":{}},"parent":{}}],["buttonid",{"_index":83,"name":{"102":{}},"parent":{}}],["buttonspec",{"_index":52,"name":{"62":{}},"parent":{"63":{},"64":{},"65":{}}}],["codemirrorplugin",{"_index":82,"name":{"101":{}},"parent":{}}],["command",{"_index":0,"name":{"0":{}},"parent":{"1":{},"2":{},"3":{},"4":{},"5":{}}}],["commandname",{"_index":50,"name":{"58":{}},"parent":{}}],["commands",{"_index":132,"name":{"169":{}},"parent":{}}],["constructor",{"_index":91,"name":{"111":{},"115":{},"126":{},"133":{},"136":{},"139":{},"142":{},"148":{},"158":{},"165":{}},"parent":{}}],["contentscripttype",{"_index":80,"name":{"99":{}},"parent":{"100":{},"101":{}}}],["context",{"_index":48,"name":{"56":{}},"parent":{}}],["create",{"_index":103,"name":{"127":{},"134":{},"137":{},"140":{},"143":{}},"parent":{}}],["createmenuitemoptions",{"_index":40,"name":{"47":{}},"parent":{"48":{}}}],["data",{"_index":129,"name":{"166":{}},"parent":{}}],["delete",{"_index":89,"name":{"109":{}},"parent":{}}],["description",{"_index":14,"name":{"14":{},"24":{},"84":{},"97":{}},"parent":{}}],["destpath",{"_index":32,"name":{"38":{}},"parent":{}}],["dialogs",{"_index":115,"name":{"149":{}},"parent":{}}],["directory",{"_index":8,"name":{"8":{}},"parent":{}}],["edit",{"_index":43,"name":{"51":{}},"parent":{}}],["editorcommand",{"_index":59,"name":{"69":{}},"parent":{"70":{},"71":{}}}],["editortoolbar",{"_index":58,"name":{"68":{}},"parent":{}}],["enabledcondition",{"_index":5,"name":{"5":{}},"parent":{}}],["execute",{"_index":4,"name":{"4":{},"123":{}},"parent":{}}],["exportcontext",{"_index":31,"name":{"37":{}},"parent":{"38":{},"39":{},"40":{}}}],["exportmodule",{"_index":12,"name":{"12":{}},"parent":{"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{}}}],["exportoptions",{"_index":26,"name":{"30":{}},"parent":{"31":{},"32":{},"33":{},"34":{},"35":{},"36":{}}}],["file",{"_index":7,"name":{"7":{},"50":{}},"parent":{}}],["fileextensions",{"_index":17,"name":{"17":{},"27":{}},"parent":{}}],["filesystemitem",{"_index":6,"name":{"6":{}},"parent":{"7":{},"8":{}}}],["format",{"_index":13,"name":{"13":{},"23":{},"31":{}},"parent":{}}],["get",{"_index":86,"name":{"106":{}},"parent":{}}],["globalvalue",{"_index":127,"name":{"163":{}},"parent":{}}],["help",{"_index":47,"name":{"55":{}},"parent":{}}],["html",{"_index":11,"name":{"11":{}},"parent":{}}],["iconname",{"_index":3,"name":{"3":{},"96":{}},"parent":{}}],["id",{"_index":53,"name":{"63":{}},"parent":{}}],["importcontext",{"_index":35,"name":{"41":{}},"parent":{"42":{},"43":{},"44":{}}}],["importmodule",{"_index":22,"name":{"22":{}},"parent":{"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{}}}],["importmoduleoutputformat",{"_index":9,"name":{"9":{}},"parent":{"10":{},"11":{}}}],["int",{"_index":62,"name":{"73":{}},"parent":{}}],["interop",{"_index":134,"name":{"171":{}},"parent":{}}],["isenum",{"_index":71,"name":{"85":{}},"parent":{}}],["isnotearchive",{"_index":16,"name":{"16":{},"25":{}},"parent":{}}],["joplin",{"_index":128,"name":{"164":{}},"parent":{"165":{},"166":{},"167":{},"168":{},"169":{},"170":{},"171":{},"172":{}}}],["joplincommands",{"_index":101,"name":{"122":{}},"parent":{"123":{},"124":{}}}],["joplindata",{"_index":85,"name":{"105":{}},"parent":{"106":{},"107":{},"108":{},"109":{}}}],["joplininterop",{"_index":120,"name":{"154":{}},"parent":{"155":{},"156":{}}}],["joplinplugins",{"_index":90,"name":{"110":{}},"parent":{"111":{},"112":{},"113":{}}}],["joplinsettings",{"_index":123,"name":{"157":{}},"parent":{"158":{},"159":{},"160":{},"161":{},"162":{},"163":{}}}],["joplinviews",{"_index":114,"name":{"147":{}},"parent":{"148":{},"149":{},"150":{},"151":{},"152":{},"153":{}}}],["joplinviewsdialogs",{"_index":102,"name":{"125":{}},"parent":{"126":{},"127":{},"128":{},"129":{},"130":{},"131":{}}}],["joplinviewsmenuitems",{"_index":108,"name":{"132":{}},"parent":{"133":{},"134":{}}}],["joplinviewsmenus",{"_index":109,"name":{"135":{}},"parent":{"136":{},"137":{}}}],["joplinviewspanels",{"_index":111,"name":{"141":{}},"parent":{"142":{},"143":{},"144":{},"145":{},"146":{}}}],["joplinviewstoolbarbuttons",{"_index":110,"name":{"138":{}},"parent":{"139":{},"140":{}}}],["joplinworkspace",{"_index":94,"name":{"114":{}},"parent":{"115":{},"116":{},"117":{},"118":{},"119":{},"120":{},"121":{}}}],["label",{"_index":2,"name":{"2":{},"61":{},"83":{},"95":{}},"parent":{}}],["markdown",{"_index":10,"name":{"10":{}},"parent":{}}],["markdownitplugin",{"_index":81,"name":{"100":{}},"parent":{}}],["maximum",{"_index":77,"name":{"92":{}},"parent":{}}],["menuitem",{"_index":49,"name":{"57":{}},"parent":{"58":{},"59":{},"60":{},"61":{}}}],["menuitemlocation",{"_index":42,"name":{"49":{}},"parent":{"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{}}}],["menuitems",{"_index":117,"name":{"151":{}},"parent":{}}],["menus",{"_index":118,"name":{"152":{}},"parent":{}}],["minimum",{"_index":76,"name":{"91":{}},"parent":{}}],["modulepath",{"_index":30,"name":{"35":{}},"parent":{}}],["name",{"_index":1,"name":{"1":{},"70":{},"98":{}},"parent":{}}],["note",{"_index":45,"name":{"53":{}},"parent":{}}],["notetoolbar",{"_index":57,"name":{"67":{}},"parent":{}}],["object",{"_index":66,"name":{"77":{}},"parent":{}}],["onclick",{"_index":55,"name":{"65":{}},"parent":{}}],["onclose",{"_index":21,"name":{"21":{}},"parent":{}}],["onexec",{"_index":25,"name":{"29":{}},"parent":{}}],["oninit",{"_index":18,"name":{"18":{}},"parent":{}}],["onmessage",{"_index":113,"name":{"146":{}},"parent":{}}],["onnotealarmtrigger",{"_index":97,"name":{"118":{}},"parent":{}}],["onnotecontentchange",{"_index":96,"name":{"117":{}},"parent":{}}],["onnoteselectionchange",{"_index":95,"name":{"116":{}},"parent":{}}],["onprocessitem",{"_index":19,"name":{"19":{}},"parent":{}}],["onprocessresource",{"_index":20,"name":{"20":{}},"parent":{}}],["onstart",{"_index":39,"name":{"46":{}},"parent":{}}],["onsynccomplete",{"_index":98,"name":{"119":{}},"parent":{}}],["open",{"_index":107,"name":{"131":{}},"parent":{}}],["options",{"_index":33,"name":{"39":{},"43":{},"87":{}},"parent":{}}],["outputformat",{"_index":24,"name":{"28":{}},"parent":{}}],["panels",{"_index":116,"name":{"150":{}},"parent":{}}],["path",{"_index":27,"name":{"32":{},"104":{}},"parent":{}}],["plugins",{"_index":130,"name":{"167":{}},"parent":{}}],["post",{"_index":87,"name":{"107":{}},"parent":{}}],["public",{"_index":70,"name":{"82":{}},"parent":{}}],["put",{"_index":88,"name":{"108":{}},"parent":{}}],["register",{"_index":92,"name":{"112":{},"124":{}},"parent":{}}],["registercontentscript",{"_index":93,"name":{"113":{}},"parent":{}}],["registerexportmodule",{"_index":121,"name":{"155":{}},"parent":{}}],["registerimportmodule",{"_index":122,"name":{"156":{}},"parent":{}}],["registersection",{"_index":125,"name":{"160":{}},"parent":{}}],["registersetting",{"_index":124,"name":{"159":{}},"parent":{}}],["script",{"_index":38,"name":{"45":{}},"parent":{"46":{}}}],["section",{"_index":72,"name":{"86":{}},"parent":{}}],["secure",{"_index":74,"name":{"89":{}},"parent":{}}],["selectednote",{"_index":99,"name":{"120":{}},"parent":{}}],["selectednoteids",{"_index":100,"name":{"121":{}},"parent":{}}],["setbuttons",{"_index":106,"name":{"130":{}},"parent":{}}],["sethtml",{"_index":105,"name":{"129":{},"144":{}},"parent":{}}],["settingitem",{"_index":68,"name":{"79":{}},"parent":{"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"92":{},"93":{}}}],["settingitemtype",{"_index":61,"name":{"72":{}},"parent":{"73":{},"74":{},"75":{},"76":{},"77":{},"78":{}}}],["settings",{"_index":135,"name":{"172":{}},"parent":{}}],["settingsection",{"_index":79,"name":{"94":{}},"parent":{"95":{},"96":{},"97":{},"98":{}}}],["setvalue",{"_index":126,"name":{"162":{}},"parent":{}}],["showmessagebox",{"_index":104,"name":{"128":{}},"parent":{}}],["sourcefolderids",{"_index":28,"name":{"33":{}},"parent":{}}],["sourcenoteids",{"_index":29,"name":{"34":{}},"parent":{}}],["sourcepath",{"_index":36,"name":{"42":{}},"parent":{}}],["sources",{"_index":23,"name":{"26":{}},"parent":{}}],["step",{"_index":78,"name":{"93":{}},"parent":{}}],["string",{"_index":63,"name":{"74":{}},"parent":{}}],["submenu",{"_index":51,"name":{"60":{}},"parent":{}}],["target",{"_index":15,"name":{"15":{},"36":{}},"parent":{}}],["title",{"_index":54,"name":{"64":{}},"parent":{}}],["toolbarbuttonlocation",{"_index":56,"name":{"66":{}},"parent":{"67":{},"68":{}}}],["toolbarbuttons",{"_index":119,"name":{"153":{}},"parent":{}}],["tools",{"_index":46,"name":{"54":{}},"parent":{}}],["type",{"_index":69,"name":{"81":{}},"parent":{}}],["userdata",{"_index":34,"name":{"40":{}},"parent":{}}],["value",{"_index":60,"name":{"71":{},"80":{},"161":{}},"parent":{}}],["view",{"_index":44,"name":{"52":{}},"parent":{}}],["viewhandle",{"_index":84,"name":{"103":{}},"parent":{}}],["views",{"_index":133,"name":{"170":{}},"parent":{}}],["warnings",{"_index":37,"name":{"44":{}},"parent":{}}],["workspace",{"_index":131,"name":{"168":{}},"parent":{}}]],"pipeline":[]}} \ No newline at end of file +{"kinds":{"4":"Enumeration","16":"Enumeration member","128":"Class","256":"Interface","512":"Constructor","1024":"Property","2048":"Method","262144":"Accessor","4194304":"Type alias"},"rows":[{"id":0,"kind":256,"name":"Command","url":"interfaces/command.html","classes":"tsd-kind-interface"},{"id":1,"kind":1024,"name":"name","url":"interfaces/command.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Command"},{"id":2,"kind":1024,"name":"label","url":"interfaces/command.html#label","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Command"},{"id":3,"kind":1024,"name":"iconName","url":"interfaces/command.html#iconname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Command"},{"id":4,"kind":2048,"name":"execute","url":"interfaces/command.html#execute","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Command"},{"id":5,"kind":1024,"name":"enabledCondition","url":"interfaces/command.html#enabledcondition","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Command"},{"id":6,"kind":4,"name":"FileSystemItem","url":"enums/filesystemitem.html","classes":"tsd-kind-enum"},{"id":7,"kind":16,"name":"File","url":"enums/filesystemitem.html#file","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"FileSystemItem"},{"id":8,"kind":16,"name":"Directory","url":"enums/filesystemitem.html#directory","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"FileSystemItem"},{"id":9,"kind":4,"name":"ImportModuleOutputFormat","url":"enums/importmoduleoutputformat.html","classes":"tsd-kind-enum"},{"id":10,"kind":16,"name":"Markdown","url":"enums/importmoduleoutputformat.html#markdown","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ImportModuleOutputFormat"},{"id":11,"kind":16,"name":"Html","url":"enums/importmoduleoutputformat.html#html","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ImportModuleOutputFormat"},{"id":12,"kind":256,"name":"ExportModule","url":"interfaces/exportmodule.html","classes":"tsd-kind-interface"},{"id":13,"kind":1024,"name":"format","url":"interfaces/exportmodule.html#format","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportModule"},{"id":14,"kind":1024,"name":"description","url":"interfaces/exportmodule.html#description","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportModule"},{"id":15,"kind":1024,"name":"target","url":"interfaces/exportmodule.html#target","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportModule"},{"id":16,"kind":1024,"name":"isNoteArchive","url":"interfaces/exportmodule.html#isnotearchive","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportModule"},{"id":17,"kind":1024,"name":"fileExtensions","url":"interfaces/exportmodule.html#fileextensions","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportModule"},{"id":18,"kind":2048,"name":"onInit","url":"interfaces/exportmodule.html#oninit","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ExportModule"},{"id":19,"kind":2048,"name":"onProcessItem","url":"interfaces/exportmodule.html#onprocessitem","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ExportModule"},{"id":20,"kind":2048,"name":"onProcessResource","url":"interfaces/exportmodule.html#onprocessresource","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ExportModule"},{"id":21,"kind":2048,"name":"onClose","url":"interfaces/exportmodule.html#onclose","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ExportModule"},{"id":22,"kind":256,"name":"ImportModule","url":"interfaces/importmodule.html","classes":"tsd-kind-interface"},{"id":23,"kind":1024,"name":"format","url":"interfaces/importmodule.html#format","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportModule"},{"id":24,"kind":1024,"name":"description","url":"interfaces/importmodule.html#description","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportModule"},{"id":25,"kind":1024,"name":"isNoteArchive","url":"interfaces/importmodule.html#isnotearchive","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportModule"},{"id":26,"kind":1024,"name":"sources","url":"interfaces/importmodule.html#sources","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportModule"},{"id":27,"kind":1024,"name":"fileExtensions","url":"interfaces/importmodule.html#fileextensions","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportModule"},{"id":28,"kind":1024,"name":"outputFormat","url":"interfaces/importmodule.html#outputformat","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportModule"},{"id":29,"kind":2048,"name":"onExec","url":"interfaces/importmodule.html#onexec","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ImportModule"},{"id":30,"kind":256,"name":"ExportOptions","url":"interfaces/exportoptions.html","classes":"tsd-kind-interface"},{"id":31,"kind":1024,"name":"format","url":"interfaces/exportoptions.html#format","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportOptions"},{"id":32,"kind":1024,"name":"path","url":"interfaces/exportoptions.html#path","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportOptions"},{"id":33,"kind":1024,"name":"sourceFolderIds","url":"interfaces/exportoptions.html#sourcefolderids","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportOptions"},{"id":34,"kind":1024,"name":"sourceNoteIds","url":"interfaces/exportoptions.html#sourcenoteids","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportOptions"},{"id":35,"kind":1024,"name":"modulePath","url":"interfaces/exportoptions.html#modulepath","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportOptions"},{"id":36,"kind":1024,"name":"target","url":"interfaces/exportoptions.html#target","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportOptions"},{"id":37,"kind":256,"name":"ExportContext","url":"interfaces/exportcontext.html","classes":"tsd-kind-interface"},{"id":38,"kind":1024,"name":"destPath","url":"interfaces/exportcontext.html#destpath","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportContext"},{"id":39,"kind":1024,"name":"options","url":"interfaces/exportcontext.html#options","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportContext"},{"id":40,"kind":1024,"name":"userData","url":"interfaces/exportcontext.html#userdata","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ExportContext"},{"id":41,"kind":256,"name":"ImportContext","url":"interfaces/importcontext.html","classes":"tsd-kind-interface"},{"id":42,"kind":1024,"name":"sourcePath","url":"interfaces/importcontext.html#sourcepath","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportContext"},{"id":43,"kind":1024,"name":"options","url":"interfaces/importcontext.html#options","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportContext"},{"id":44,"kind":1024,"name":"warnings","url":"interfaces/importcontext.html#warnings","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ImportContext"},{"id":45,"kind":256,"name":"Script","url":"interfaces/script.html","classes":"tsd-kind-interface"},{"id":46,"kind":2048,"name":"onStart","url":"interfaces/script.html#onstart","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Script"},{"id":47,"kind":256,"name":"CreateMenuItemOptions","url":"interfaces/createmenuitemoptions.html","classes":"tsd-kind-interface"},{"id":48,"kind":1024,"name":"accelerator","url":"interfaces/createmenuitemoptions.html#accelerator","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CreateMenuItemOptions"},{"id":49,"kind":4,"name":"MenuItemLocation","url":"enums/menuitemlocation.html","classes":"tsd-kind-enum"},{"id":50,"kind":16,"name":"File","url":"enums/menuitemlocation.html#file","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":51,"kind":16,"name":"Edit","url":"enums/menuitemlocation.html#edit","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":52,"kind":16,"name":"View","url":"enums/menuitemlocation.html#view","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":53,"kind":16,"name":"Note","url":"enums/menuitemlocation.html#note","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":54,"kind":16,"name":"Tools","url":"enums/menuitemlocation.html#tools","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":55,"kind":16,"name":"Help","url":"enums/menuitemlocation.html#help","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":56,"kind":16,"name":"Context","url":"enums/menuitemlocation.html#context","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"MenuItemLocation"},{"id":57,"kind":256,"name":"MenuItem","url":"interfaces/menuitem.html","classes":"tsd-kind-interface"},{"id":58,"kind":1024,"name":"commandName","url":"interfaces/menuitem.html#commandname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MenuItem"},{"id":59,"kind":1024,"name":"accelerator","url":"interfaces/menuitem.html#accelerator","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MenuItem"},{"id":60,"kind":1024,"name":"submenu","url":"interfaces/menuitem.html#submenu","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MenuItem"},{"id":61,"kind":1024,"name":"label","url":"interfaces/menuitem.html#label","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MenuItem"},{"id":62,"kind":256,"name":"ButtonSpec","url":"interfaces/buttonspec.html","classes":"tsd-kind-interface"},{"id":63,"kind":1024,"name":"id","url":"interfaces/buttonspec.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ButtonSpec"},{"id":64,"kind":1024,"name":"title","url":"interfaces/buttonspec.html#title","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ButtonSpec"},{"id":65,"kind":2048,"name":"onClick","url":"interfaces/buttonspec.html#onclick","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ButtonSpec"},{"id":66,"kind":4,"name":"ToolbarButtonLocation","url":"enums/toolbarbuttonlocation.html","classes":"tsd-kind-enum"},{"id":67,"kind":16,"name":"NoteToolbar","url":"enums/toolbarbuttonlocation.html#notetoolbar","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ToolbarButtonLocation"},{"id":68,"kind":16,"name":"EditorToolbar","url":"enums/toolbarbuttonlocation.html#editortoolbar","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ToolbarButtonLocation"},{"id":69,"kind":256,"name":"EditorCommand","url":"interfaces/editorcommand.html","classes":"tsd-kind-interface"},{"id":70,"kind":1024,"name":"name","url":"interfaces/editorcommand.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"EditorCommand"},{"id":71,"kind":1024,"name":"value","url":"interfaces/editorcommand.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"EditorCommand"},{"id":72,"kind":4,"name":"SettingItemType","url":"enums/settingitemtype.html","classes":"tsd-kind-enum"},{"id":73,"kind":16,"name":"Int","url":"enums/settingitemtype.html#int","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SettingItemType"},{"id":74,"kind":16,"name":"String","url":"enums/settingitemtype.html#string","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SettingItemType"},{"id":75,"kind":16,"name":"Bool","url":"enums/settingitemtype.html#bool","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SettingItemType"},{"id":76,"kind":16,"name":"Array","url":"enums/settingitemtype.html#array","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SettingItemType"},{"id":77,"kind":16,"name":"Object","url":"enums/settingitemtype.html#object","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SettingItemType"},{"id":78,"kind":16,"name":"Button","url":"enums/settingitemtype.html#button","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SettingItemType"},{"id":79,"kind":256,"name":"SettingItem","url":"interfaces/settingitem.html","classes":"tsd-kind-interface"},{"id":80,"kind":1024,"name":"value","url":"interfaces/settingitem.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":81,"kind":1024,"name":"type","url":"interfaces/settingitem.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":82,"kind":1024,"name":"public","url":"interfaces/settingitem.html#public","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":83,"kind":1024,"name":"label","url":"interfaces/settingitem.html#label","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":84,"kind":1024,"name":"description","url":"interfaces/settingitem.html#description","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":85,"kind":1024,"name":"isEnum","url":"interfaces/settingitem.html#isenum","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":86,"kind":1024,"name":"section","url":"interfaces/settingitem.html#section","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":87,"kind":1024,"name":"options","url":"interfaces/settingitem.html#options","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":88,"kind":1024,"name":"appTypes","url":"interfaces/settingitem.html#apptypes","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":89,"kind":1024,"name":"secure","url":"interfaces/settingitem.html#secure","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":90,"kind":1024,"name":"advanced","url":"interfaces/settingitem.html#advanced","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":91,"kind":1024,"name":"minimum","url":"interfaces/settingitem.html#minimum","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":92,"kind":1024,"name":"maximum","url":"interfaces/settingitem.html#maximum","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":93,"kind":1024,"name":"step","url":"interfaces/settingitem.html#step","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingItem"},{"id":94,"kind":256,"name":"SettingSection","url":"interfaces/settingsection.html","classes":"tsd-kind-interface"},{"id":95,"kind":1024,"name":"label","url":"interfaces/settingsection.html#label","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingSection"},{"id":96,"kind":1024,"name":"iconName","url":"interfaces/settingsection.html#iconname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingSection"},{"id":97,"kind":1024,"name":"description","url":"interfaces/settingsection.html#description","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingSection"},{"id":98,"kind":1024,"name":"name","url":"interfaces/settingsection.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingSection"},{"id":99,"kind":4,"name":"ContentScriptType","url":"enums/contentscripttype.html","classes":"tsd-kind-enum"},{"id":100,"kind":16,"name":"MarkdownItPlugin","url":"enums/contentscripttype.html#markdownitplugin","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ContentScriptType"},{"id":101,"kind":16,"name":"CodeMirrorPlugin","url":"enums/contentscripttype.html#codemirrorplugin","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"ContentScriptType"},{"id":102,"kind":4194304,"name":"ButtonId","url":"globals.html#buttonid","classes":"tsd-kind-type-alias"},{"id":103,"kind":4194304,"name":"ViewHandle","url":"globals.html#viewhandle","classes":"tsd-kind-type-alias"},{"id":104,"kind":4194304,"name":"Path","url":"globals.html#path","classes":"tsd-kind-type-alias"},{"id":105,"kind":128,"name":"JoplinData","url":"classes/joplindata.html","classes":"tsd-kind-class"},{"id":106,"kind":2048,"name":"get","url":"classes/joplindata.html#get","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinData"},{"id":107,"kind":2048,"name":"post","url":"classes/joplindata.html#post","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinData"},{"id":108,"kind":2048,"name":"put","url":"classes/joplindata.html#put","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinData"},{"id":109,"kind":2048,"name":"delete","url":"classes/joplindata.html#delete","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinData"},{"id":110,"kind":128,"name":"JoplinPlugins","url":"classes/joplinplugins.html","classes":"tsd-kind-class"},{"id":111,"kind":512,"name":"constructor","url":"classes/joplinplugins.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinPlugins"},{"id":112,"kind":2048,"name":"register","url":"classes/joplinplugins.html#register","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinPlugins"},{"id":113,"kind":2048,"name":"registerContentScript","url":"classes/joplinplugins.html#registercontentscript","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinPlugins"},{"id":114,"kind":128,"name":"JoplinWorkspace","url":"classes/joplinworkspace.html","classes":"tsd-kind-class"},{"id":115,"kind":512,"name":"constructor","url":"classes/joplinworkspace.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":116,"kind":2048,"name":"onNoteSelectionChange","url":"classes/joplinworkspace.html#onnoteselectionchange","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":117,"kind":2048,"name":"onNoteContentChange","url":"classes/joplinworkspace.html#onnotecontentchange","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":118,"kind":2048,"name":"onNoteAlarmTrigger","url":"classes/joplinworkspace.html#onnotealarmtrigger","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":119,"kind":2048,"name":"onSyncComplete","url":"classes/joplinworkspace.html#onsynccomplete","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":120,"kind":2048,"name":"selectedNote","url":"classes/joplinworkspace.html#selectednote","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":121,"kind":2048,"name":"selectedNoteIds","url":"classes/joplinworkspace.html#selectednoteids","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinWorkspace"},{"id":122,"kind":128,"name":"JoplinCommands","url":"classes/joplincommands.html","classes":"tsd-kind-class"},{"id":123,"kind":2048,"name":"execute","url":"classes/joplincommands.html#execute","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinCommands"},{"id":124,"kind":2048,"name":"register","url":"classes/joplincommands.html#register","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinCommands"},{"id":125,"kind":128,"name":"JoplinViewsDialogs","url":"classes/joplinviewsdialogs.html","classes":"tsd-kind-class"},{"id":126,"kind":512,"name":"constructor","url":"classes/joplinviewsdialogs.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinViewsDialogs"},{"id":127,"kind":2048,"name":"create","url":"classes/joplinviewsdialogs.html#create","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsDialogs"},{"id":128,"kind":2048,"name":"showMessageBox","url":"classes/joplinviewsdialogs.html#showmessagebox","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsDialogs"},{"id":129,"kind":2048,"name":"setHtml","url":"classes/joplinviewsdialogs.html#sethtml","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsDialogs"},{"id":130,"kind":2048,"name":"setButtons","url":"classes/joplinviewsdialogs.html#setbuttons","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsDialogs"},{"id":131,"kind":2048,"name":"open","url":"classes/joplinviewsdialogs.html#open","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsDialogs"},{"id":132,"kind":128,"name":"JoplinViewsMenuItems","url":"classes/joplinviewsmenuitems.html","classes":"tsd-kind-class"},{"id":133,"kind":512,"name":"constructor","url":"classes/joplinviewsmenuitems.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinViewsMenuItems"},{"id":134,"kind":2048,"name":"create","url":"classes/joplinviewsmenuitems.html#create","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsMenuItems"},{"id":135,"kind":128,"name":"JoplinViewsMenus","url":"classes/joplinviewsmenus.html","classes":"tsd-kind-class"},{"id":136,"kind":512,"name":"constructor","url":"classes/joplinviewsmenus.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinViewsMenus"},{"id":137,"kind":2048,"name":"create","url":"classes/joplinviewsmenus.html#create","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsMenus"},{"id":138,"kind":128,"name":"JoplinViewsToolbarButtons","url":"classes/joplinviewstoolbarbuttons.html","classes":"tsd-kind-class"},{"id":139,"kind":512,"name":"constructor","url":"classes/joplinviewstoolbarbuttons.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinViewsToolbarButtons"},{"id":140,"kind":2048,"name":"create","url":"classes/joplinviewstoolbarbuttons.html#create","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsToolbarButtons"},{"id":141,"kind":128,"name":"JoplinViewsPanels","url":"classes/joplinviewspanels.html","classes":"tsd-kind-class"},{"id":142,"kind":512,"name":"constructor","url":"classes/joplinviewspanels.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinViewsPanels"},{"id":143,"kind":2048,"name":"create","url":"classes/joplinviewspanels.html#create","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsPanels"},{"id":144,"kind":2048,"name":"setHtml","url":"classes/joplinviewspanels.html#sethtml","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsPanels"},{"id":145,"kind":2048,"name":"addScript","url":"classes/joplinviewspanels.html#addscript","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsPanels"},{"id":146,"kind":2048,"name":"onMessage","url":"classes/joplinviewspanels.html#onmessage","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinViewsPanels"},{"id":147,"kind":128,"name":"JoplinViews","url":"classes/joplinviews.html","classes":"tsd-kind-class"},{"id":148,"kind":512,"name":"constructor","url":"classes/joplinviews.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinViews"},{"id":149,"kind":262144,"name":"dialogs","url":"classes/joplinviews.html#dialogs","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"JoplinViews"},{"id":150,"kind":262144,"name":"panels","url":"classes/joplinviews.html#panels","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"JoplinViews"},{"id":151,"kind":262144,"name":"menuItems","url":"classes/joplinviews.html#menuitems","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"JoplinViews"},{"id":152,"kind":262144,"name":"menus","url":"classes/joplinviews.html#menus","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"JoplinViews"},{"id":153,"kind":262144,"name":"toolbarButtons","url":"classes/joplinviews.html#toolbarbuttons","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"JoplinViews"},{"id":154,"kind":128,"name":"JoplinInterop","url":"classes/joplininterop.html","classes":"tsd-kind-class"},{"id":155,"kind":2048,"name":"registerExportModule","url":"classes/joplininterop.html#registerexportmodule","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinInterop"},{"id":156,"kind":2048,"name":"registerImportModule","url":"classes/joplininterop.html#registerimportmodule","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinInterop"},{"id":157,"kind":128,"name":"JoplinSettings","url":"classes/joplinsettings.html","classes":"tsd-kind-class"},{"id":158,"kind":512,"name":"constructor","url":"classes/joplinsettings.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"JoplinSettings"},{"id":159,"kind":2048,"name":"registerSetting","url":"classes/joplinsettings.html#registersetting","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinSettings"},{"id":160,"kind":2048,"name":"registerSection","url":"classes/joplinsettings.html#registersection","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinSettings"},{"id":161,"kind":2048,"name":"value","url":"classes/joplinsettings.html#value","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinSettings"},{"id":162,"kind":2048,"name":"setValue","url":"classes/joplinsettings.html#setvalue","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinSettings"},{"id":163,"kind":2048,"name":"globalValue","url":"classes/joplinsettings.html#globalvalue","classes":"tsd-kind-method tsd-parent-kind-class","parent":"JoplinSettings"},{"id":164,"kind":128,"name":"Joplin","url":"classes/joplin.html","classes":"tsd-kind-class"},{"id":165,"kind":512,"name":"constructor","url":"classes/joplin.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"Joplin"},{"id":166,"kind":262144,"name":"data","url":"classes/joplin.html#data","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"},{"id":167,"kind":262144,"name":"plugins","url":"classes/joplin.html#plugins","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"},{"id":168,"kind":262144,"name":"workspace","url":"classes/joplin.html#workspace","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"},{"id":169,"kind":262144,"name":"commands","url":"classes/joplin.html#commands","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"},{"id":170,"kind":262144,"name":"views","url":"classes/joplin.html#views","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"},{"id":171,"kind":262144,"name":"interop","url":"classes/joplin.html#interop","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"},{"id":172,"kind":262144,"name":"settings","url":"classes/joplin.html#settings","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"Joplin"}],"index":{"version":"2.3.9","fields":["name","parent"],"fieldVectors":[["name/0",[0,32.873]],["parent/0",[]],["name/1",[1,39.063]],["parent/1",[0,2.978]],["name/2",[2,36.55]],["parent/2",[0,2.978]],["name/3",[3,42.428]],["parent/3",[0,2.978]],["name/4",[4,42.428]],["parent/4",[0,2.978]],["name/5",[5,47.536]],["parent/5",[0,2.978]],["name/6",[6,39.063]],["parent/6",[]],["name/7",[7,42.428]],["parent/7",[6,3.539]],["name/8",[8,47.536]],["parent/8",[6,3.539]],["name/9",[9,39.063]],["parent/9",[]],["name/10",[10,47.536]],["parent/10",[9,3.539]],["name/11",[11,47.536]],["parent/11",[9,3.539]],["name/12",[12,28.077]],["parent/12",[]],["name/13",[13,39.063]],["parent/13",[12,2.544]],["name/14",[14,36.55]],["parent/14",[12,2.544]],["name/15",[15,42.428]],["parent/15",[12,2.544]],["name/16",[16,42.428]],["parent/16",[12,2.544]],["name/17",[17,42.428]],["parent/17",[12,2.544]],["name/18",[18,47.536]],["parent/18",[12,2.544]],["name/19",[19,47.536]],["parent/19",[12,2.544]],["name/20",[20,47.536]],["parent/20",[12,2.544]],["name/21",[21,47.536]],["parent/21",[12,2.544]],["name/22",[22,30.19]],["parent/22",[]],["name/23",[13,39.063]],["parent/23",[22,2.735]],["name/24",[14,36.55]],["parent/24",[22,2.735]],["name/25",[16,42.428]],["parent/25",[22,2.735]],["name/26",[23,47.536]],["parent/26",[22,2.735]],["name/27",[17,42.428]],["parent/27",[22,2.735]],["name/28",[24,47.536]],["parent/28",[22,2.735]],["name/29",[25,47.536]],["parent/29",[22,2.735]],["name/30",[26,31.442]],["parent/30",[]],["name/31",[13,39.063]],["parent/31",[26,2.849]],["name/32",[27,42.428]],["parent/32",[26,2.849]],["name/33",[28,47.536]],["parent/33",[26,2.849]],["name/34",[29,47.536]],["parent/34",[26,2.849]],["name/35",[30,47.536]],["parent/35",[26,2.849]],["name/36",[15,42.428]],["parent/36",[26,2.849]],["name/37",[31,36.55]],["parent/37",[]],["name/38",[32,47.536]],["parent/38",[31,3.311]],["name/39",[33,39.063]],["parent/39",[31,3.311]],["name/40",[34,47.536]],["parent/40",[31,3.311]],["name/41",[35,36.55]],["parent/41",[]],["name/42",[36,47.536]],["parent/42",[35,3.311]],["name/43",[33,39.063]],["parent/43",[35,3.311]],["name/44",[37,47.536]],["parent/44",[35,3.311]],["name/45",[38,42.428]],["parent/45",[]],["name/46",[39,47.536]],["parent/46",[38,3.844]],["name/47",[40,42.428]],["parent/47",[]],["name/48",[41,42.428]],["parent/48",[40,3.844]],["name/49",[42,30.19]],["parent/49",[]],["name/50",[7,42.428]],["parent/50",[42,2.735]],["name/51",[43,47.536]],["parent/51",[42,2.735]],["name/52",[44,47.536]],["parent/52",[42,2.735]],["name/53",[45,47.536]],["parent/53",[42,2.735]],["name/54",[46,47.536]],["parent/54",[42,2.735]],["name/55",[47,47.536]],["parent/55",[42,2.735]],["name/56",[48,47.536]],["parent/56",[42,2.735]],["name/57",[49,34.543]],["parent/57",[]],["name/58",[50,47.536]],["parent/58",[49,3.13]],["name/59",[41,42.428]],["parent/59",[49,3.13]],["name/60",[51,47.536]],["parent/60",[49,3.13]],["name/61",[2,36.55]],["parent/61",[49,3.13]],["name/62",[52,36.55]],["parent/62",[]],["name/63",[53,47.536]],["parent/63",[52,3.311]],["name/64",[54,47.536]],["parent/64",[52,3.311]],["name/65",[55,47.536]],["parent/65",[52,3.311]],["name/66",[56,39.063]],["parent/66",[]],["name/67",[57,47.536]],["parent/67",[56,3.539]],["name/68",[58,47.536]],["parent/68",[56,3.539]],["name/69",[59,39.063]],["parent/69",[]],["name/70",[1,39.063]],["parent/70",[59,3.539]],["name/71",[60,39.063]],["parent/71",[59,3.539]],["name/72",[61,31.442]],["parent/72",[]],["name/73",[62,47.536]],["parent/73",[61,2.849]],["name/74",[63,47.536]],["parent/74",[61,2.849]],["name/75",[64,47.536]],["parent/75",[61,2.849]],["name/76",[65,47.536]],["parent/76",[61,2.849]],["name/77",[66,47.536]],["parent/77",[61,2.849]],["name/78",[67,47.536]],["parent/78",[61,2.849]],["name/79",[68,24.182]],["parent/79",[]],["name/80",[60,39.063]],["parent/80",[68,2.191]],["name/81",[69,47.536]],["parent/81",[68,2.191]],["name/82",[70,47.536]],["parent/82",[68,2.191]],["name/83",[2,36.55]],["parent/83",[68,2.191]],["name/84",[14,36.55]],["parent/84",[68,2.191]],["name/85",[71,47.536]],["parent/85",[68,2.191]],["name/86",[72,47.536]],["parent/86",[68,2.191]],["name/87",[33,39.063]],["parent/87",[68,2.191]],["name/88",[73,47.536]],["parent/88",[68,2.191]],["name/89",[74,47.536]],["parent/89",[68,2.191]],["name/90",[75,47.536]],["parent/90",[68,2.191]],["name/91",[76,47.536]],["parent/91",[68,2.191]],["name/92",[77,47.536]],["parent/92",[68,2.191]],["name/93",[78,47.536]],["parent/93",[68,2.191]],["name/94",[79,34.543]],["parent/94",[]],["name/95",[2,36.55]],["parent/95",[79,3.13]],["name/96",[3,42.428]],["parent/96",[79,3.13]],["name/97",[14,36.55]],["parent/97",[79,3.13]],["name/98",[1,39.063]],["parent/98",[79,3.13]],["name/99",[80,39.063]],["parent/99",[]],["name/100",[81,47.536]],["parent/100",[80,3.539]],["name/101",[82,47.536]],["parent/101",[80,3.539]],["name/102",[83,47.536]],["parent/102",[]],["name/103",[84,47.536]],["parent/103",[]],["name/104",[27,42.428]],["parent/104",[]],["name/105",[85,34.543]],["parent/105",[]],["name/106",[86,47.536]],["parent/106",[85,3.13]],["name/107",[87,47.536]],["parent/107",[85,3.13]],["name/108",[88,47.536]],["parent/108",[85,3.13]],["name/109",[89,47.536]],["parent/109",[85,3.13]],["name/110",[90,36.55]],["parent/110",[]],["name/111",[91,28.077]],["parent/111",[90,3.311]],["name/112",[92,42.428]],["parent/112",[90,3.311]],["name/113",[93,47.536]],["parent/113",[90,3.311]],["name/114",[94,30.19]],["parent/114",[]],["name/115",[91,28.077]],["parent/115",[94,2.735]],["name/116",[95,47.536]],["parent/116",[94,2.735]],["name/117",[96,47.536]],["parent/117",[94,2.735]],["name/118",[97,47.536]],["parent/118",[94,2.735]],["name/119",[98,47.536]],["parent/119",[94,2.735]],["name/120",[99,47.536]],["parent/120",[94,2.735]],["name/121",[100,47.536]],["parent/121",[94,2.735]],["name/122",[101,39.063]],["parent/122",[]],["name/123",[4,42.428]],["parent/123",[101,3.539]],["name/124",[92,42.428]],["parent/124",[101,3.539]],["name/125",[102,31.442]],["parent/125",[]],["name/126",[91,28.077]],["parent/126",[102,2.849]],["name/127",[103,34.543]],["parent/127",[102,2.849]],["name/128",[104,47.536]],["parent/128",[102,2.849]],["name/129",[105,42.428]],["parent/129",[102,2.849]],["name/130",[106,47.536]],["parent/130",[102,2.849]],["name/131",[107,47.536]],["parent/131",[102,2.849]],["name/132",[108,39.063]],["parent/132",[]],["name/133",[91,28.077]],["parent/133",[108,3.539]],["name/134",[103,34.543]],["parent/134",[108,3.539]],["name/135",[109,39.063]],["parent/135",[]],["name/136",[91,28.077]],["parent/136",[109,3.539]],["name/137",[103,34.543]],["parent/137",[109,3.539]],["name/138",[110,39.063]],["parent/138",[]],["name/139",[91,28.077]],["parent/139",[110,3.539]],["name/140",[103,34.543]],["parent/140",[110,3.539]],["name/141",[111,32.873]],["parent/141",[]],["name/142",[91,28.077]],["parent/142",[111,2.978]],["name/143",[103,34.543]],["parent/143",[111,2.978]],["name/144",[105,42.428]],["parent/144",[111,2.978]],["name/145",[112,47.536]],["parent/145",[111,2.978]],["name/146",[113,47.536]],["parent/146",[111,2.978]],["name/147",[114,31.442]],["parent/147",[]],["name/148",[91,28.077]],["parent/148",[114,2.849]],["name/149",[115,47.536]],["parent/149",[114,2.849]],["name/150",[116,47.536]],["parent/150",[114,2.849]],["name/151",[117,47.536]],["parent/151",[114,2.849]],["name/152",[118,47.536]],["parent/152",[114,2.849]],["name/153",[119,47.536]],["parent/153",[114,2.849]],["name/154",[120,39.063]],["parent/154",[]],["name/155",[121,47.536]],["parent/155",[120,3.539]],["name/156",[122,47.536]],["parent/156",[120,3.539]],["name/157",[123,31.442]],["parent/157",[]],["name/158",[91,28.077]],["parent/158",[123,2.849]],["name/159",[124,47.536]],["parent/159",[123,2.849]],["name/160",[125,47.536]],["parent/160",[123,2.849]],["name/161",[60,39.063]],["parent/161",[123,2.849]],["name/162",[126,47.536]],["parent/162",[123,2.849]],["name/163",[127,47.536]],["parent/163",[123,2.849]],["name/164",[128,29.078]],["parent/164",[]],["name/165",[91,28.077]],["parent/165",[128,2.634]],["name/166",[129,47.536]],["parent/166",[128,2.634]],["name/167",[130,47.536]],["parent/167",[128,2.634]],["name/168",[131,47.536]],["parent/168",[128,2.634]],["name/169",[132,47.536]],["parent/169",[128,2.634]],["name/170",[133,47.536]],["parent/170",[128,2.634]],["name/171",[134,47.536]],["parent/171",[128,2.634]],["name/172",[135,47.536]],["parent/172",[128,2.634]]],"invertedIndex":[["accelerator",{"_index":41,"name":{"48":{},"59":{}},"parent":{}}],["addscript",{"_index":112,"name":{"145":{}},"parent":{}}],["advanced",{"_index":75,"name":{"90":{}},"parent":{}}],["apptypes",{"_index":73,"name":{"88":{}},"parent":{}}],["array",{"_index":65,"name":{"76":{}},"parent":{}}],["bool",{"_index":64,"name":{"75":{}},"parent":{}}],["button",{"_index":67,"name":{"78":{}},"parent":{}}],["buttonid",{"_index":83,"name":{"102":{}},"parent":{}}],["buttonspec",{"_index":52,"name":{"62":{}},"parent":{"63":{},"64":{},"65":{}}}],["codemirrorplugin",{"_index":82,"name":{"101":{}},"parent":{}}],["command",{"_index":0,"name":{"0":{}},"parent":{"1":{},"2":{},"3":{},"4":{},"5":{}}}],["commandname",{"_index":50,"name":{"58":{}},"parent":{}}],["commands",{"_index":132,"name":{"169":{}},"parent":{}}],["constructor",{"_index":91,"name":{"111":{},"115":{},"126":{},"133":{},"136":{},"139":{},"142":{},"148":{},"158":{},"165":{}},"parent":{}}],["contentscripttype",{"_index":80,"name":{"99":{}},"parent":{"100":{},"101":{}}}],["context",{"_index":48,"name":{"56":{}},"parent":{}}],["create",{"_index":103,"name":{"127":{},"134":{},"137":{},"140":{},"143":{}},"parent":{}}],["createmenuitemoptions",{"_index":40,"name":{"47":{}},"parent":{"48":{}}}],["data",{"_index":129,"name":{"166":{}},"parent":{}}],["delete",{"_index":89,"name":{"109":{}},"parent":{}}],["description",{"_index":14,"name":{"14":{},"24":{},"84":{},"97":{}},"parent":{}}],["destpath",{"_index":32,"name":{"38":{}},"parent":{}}],["dialogs",{"_index":115,"name":{"149":{}},"parent":{}}],["directory",{"_index":8,"name":{"8":{}},"parent":{}}],["edit",{"_index":43,"name":{"51":{}},"parent":{}}],["editorcommand",{"_index":59,"name":{"69":{}},"parent":{"70":{},"71":{}}}],["editortoolbar",{"_index":58,"name":{"68":{}},"parent":{}}],["enabledcondition",{"_index":5,"name":{"5":{}},"parent":{}}],["execute",{"_index":4,"name":{"4":{},"123":{}},"parent":{}}],["exportcontext",{"_index":31,"name":{"37":{}},"parent":{"38":{},"39":{},"40":{}}}],["exportmodule",{"_index":12,"name":{"12":{}},"parent":{"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{}}}],["exportoptions",{"_index":26,"name":{"30":{}},"parent":{"31":{},"32":{},"33":{},"34":{},"35":{},"36":{}}}],["file",{"_index":7,"name":{"7":{},"50":{}},"parent":{}}],["fileextensions",{"_index":17,"name":{"17":{},"27":{}},"parent":{}}],["filesystemitem",{"_index":6,"name":{"6":{}},"parent":{"7":{},"8":{}}}],["format",{"_index":13,"name":{"13":{},"23":{},"31":{}},"parent":{}}],["get",{"_index":86,"name":{"106":{}},"parent":{}}],["globalvalue",{"_index":127,"name":{"163":{}},"parent":{}}],["help",{"_index":47,"name":{"55":{}},"parent":{}}],["html",{"_index":11,"name":{"11":{}},"parent":{}}],["iconname",{"_index":3,"name":{"3":{},"96":{}},"parent":{}}],["id",{"_index":53,"name":{"63":{}},"parent":{}}],["importcontext",{"_index":35,"name":{"41":{}},"parent":{"42":{},"43":{},"44":{}}}],["importmodule",{"_index":22,"name":{"22":{}},"parent":{"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{}}}],["importmoduleoutputformat",{"_index":9,"name":{"9":{}},"parent":{"10":{},"11":{}}}],["int",{"_index":62,"name":{"73":{}},"parent":{}}],["interop",{"_index":134,"name":{"171":{}},"parent":{}}],["isenum",{"_index":71,"name":{"85":{}},"parent":{}}],["isnotearchive",{"_index":16,"name":{"16":{},"25":{}},"parent":{}}],["joplin",{"_index":128,"name":{"164":{}},"parent":{"165":{},"166":{},"167":{},"168":{},"169":{},"170":{},"171":{},"172":{}}}],["joplincommands",{"_index":101,"name":{"122":{}},"parent":{"123":{},"124":{}}}],["joplindata",{"_index":85,"name":{"105":{}},"parent":{"106":{},"107":{},"108":{},"109":{}}}],["joplininterop",{"_index":120,"name":{"154":{}},"parent":{"155":{},"156":{}}}],["joplinplugins",{"_index":90,"name":{"110":{}},"parent":{"111":{},"112":{},"113":{}}}],["joplinsettings",{"_index":123,"name":{"157":{}},"parent":{"158":{},"159":{},"160":{},"161":{},"162":{},"163":{}}}],["joplinviews",{"_index":114,"name":{"147":{}},"parent":{"148":{},"149":{},"150":{},"151":{},"152":{},"153":{}}}],["joplinviewsdialogs",{"_index":102,"name":{"125":{}},"parent":{"126":{},"127":{},"128":{},"129":{},"130":{},"131":{}}}],["joplinviewsmenuitems",{"_index":108,"name":{"132":{}},"parent":{"133":{},"134":{}}}],["joplinviewsmenus",{"_index":109,"name":{"135":{}},"parent":{"136":{},"137":{}}}],["joplinviewspanels",{"_index":111,"name":{"141":{}},"parent":{"142":{},"143":{},"144":{},"145":{},"146":{}}}],["joplinviewstoolbarbuttons",{"_index":110,"name":{"138":{}},"parent":{"139":{},"140":{}}}],["joplinworkspace",{"_index":94,"name":{"114":{}},"parent":{"115":{},"116":{},"117":{},"118":{},"119":{},"120":{},"121":{}}}],["label",{"_index":2,"name":{"2":{},"61":{},"83":{},"95":{}},"parent":{}}],["markdown",{"_index":10,"name":{"10":{}},"parent":{}}],["markdownitplugin",{"_index":81,"name":{"100":{}},"parent":{}}],["maximum",{"_index":77,"name":{"92":{}},"parent":{}}],["menuitem",{"_index":49,"name":{"57":{}},"parent":{"58":{},"59":{},"60":{},"61":{}}}],["menuitemlocation",{"_index":42,"name":{"49":{}},"parent":{"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{}}}],["menuitems",{"_index":117,"name":{"151":{}},"parent":{}}],["menus",{"_index":118,"name":{"152":{}},"parent":{}}],["minimum",{"_index":76,"name":{"91":{}},"parent":{}}],["modulepath",{"_index":30,"name":{"35":{}},"parent":{}}],["name",{"_index":1,"name":{"1":{},"70":{},"98":{}},"parent":{}}],["note",{"_index":45,"name":{"53":{}},"parent":{}}],["notetoolbar",{"_index":57,"name":{"67":{}},"parent":{}}],["object",{"_index":66,"name":{"77":{}},"parent":{}}],["onclick",{"_index":55,"name":{"65":{}},"parent":{}}],["onclose",{"_index":21,"name":{"21":{}},"parent":{}}],["onexec",{"_index":25,"name":{"29":{}},"parent":{}}],["oninit",{"_index":18,"name":{"18":{}},"parent":{}}],["onmessage",{"_index":113,"name":{"146":{}},"parent":{}}],["onnotealarmtrigger",{"_index":97,"name":{"118":{}},"parent":{}}],["onnotecontentchange",{"_index":96,"name":{"117":{}},"parent":{}}],["onnoteselectionchange",{"_index":95,"name":{"116":{}},"parent":{}}],["onprocessitem",{"_index":19,"name":{"19":{}},"parent":{}}],["onprocessresource",{"_index":20,"name":{"20":{}},"parent":{}}],["onstart",{"_index":39,"name":{"46":{}},"parent":{}}],["onsynccomplete",{"_index":98,"name":{"119":{}},"parent":{}}],["open",{"_index":107,"name":{"131":{}},"parent":{}}],["options",{"_index":33,"name":{"39":{},"43":{},"87":{}},"parent":{}}],["outputformat",{"_index":24,"name":{"28":{}},"parent":{}}],["panels",{"_index":116,"name":{"150":{}},"parent":{}}],["path",{"_index":27,"name":{"32":{},"104":{}},"parent":{}}],["plugins",{"_index":130,"name":{"167":{}},"parent":{}}],["post",{"_index":87,"name":{"107":{}},"parent":{}}],["public",{"_index":70,"name":{"82":{}},"parent":{}}],["put",{"_index":88,"name":{"108":{}},"parent":{}}],["register",{"_index":92,"name":{"112":{},"124":{}},"parent":{}}],["registercontentscript",{"_index":93,"name":{"113":{}},"parent":{}}],["registerexportmodule",{"_index":121,"name":{"155":{}},"parent":{}}],["registerimportmodule",{"_index":122,"name":{"156":{}},"parent":{}}],["registersection",{"_index":125,"name":{"160":{}},"parent":{}}],["registersetting",{"_index":124,"name":{"159":{}},"parent":{}}],["script",{"_index":38,"name":{"45":{}},"parent":{"46":{}}}],["section",{"_index":72,"name":{"86":{}},"parent":{}}],["secure",{"_index":74,"name":{"89":{}},"parent":{}}],["selectednote",{"_index":99,"name":{"120":{}},"parent":{}}],["selectednoteids",{"_index":100,"name":{"121":{}},"parent":{}}],["setbuttons",{"_index":106,"name":{"130":{}},"parent":{}}],["sethtml",{"_index":105,"name":{"129":{},"144":{}},"parent":{}}],["settingitem",{"_index":68,"name":{"79":{}},"parent":{"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"92":{},"93":{}}}],["settingitemtype",{"_index":61,"name":{"72":{}},"parent":{"73":{},"74":{},"75":{},"76":{},"77":{},"78":{}}}],["settings",{"_index":135,"name":{"172":{}},"parent":{}}],["settingsection",{"_index":79,"name":{"94":{}},"parent":{"95":{},"96":{},"97":{},"98":{}}}],["setvalue",{"_index":126,"name":{"162":{}},"parent":{}}],["showmessagebox",{"_index":104,"name":{"128":{}},"parent":{}}],["sourcefolderids",{"_index":28,"name":{"33":{}},"parent":{}}],["sourcenoteids",{"_index":29,"name":{"34":{}},"parent":{}}],["sourcepath",{"_index":36,"name":{"42":{}},"parent":{}}],["sources",{"_index":23,"name":{"26":{}},"parent":{}}],["step",{"_index":78,"name":{"93":{}},"parent":{}}],["string",{"_index":63,"name":{"74":{}},"parent":{}}],["submenu",{"_index":51,"name":{"60":{}},"parent":{}}],["target",{"_index":15,"name":{"15":{},"36":{}},"parent":{}}],["title",{"_index":54,"name":{"64":{}},"parent":{}}],["toolbarbuttonlocation",{"_index":56,"name":{"66":{}},"parent":{"67":{},"68":{}}}],["toolbarbuttons",{"_index":119,"name":{"153":{}},"parent":{}}],["tools",{"_index":46,"name":{"54":{}},"parent":{}}],["type",{"_index":69,"name":{"81":{}},"parent":{}}],["userdata",{"_index":34,"name":{"40":{}},"parent":{}}],["value",{"_index":60,"name":{"71":{},"80":{},"161":{}},"parent":{}}],["view",{"_index":44,"name":{"52":{}},"parent":{}}],["viewhandle",{"_index":84,"name":{"103":{}},"parent":{}}],["views",{"_index":133,"name":{"170":{}},"parent":{}}],["warnings",{"_index":37,"name":{"44":{}},"parent":{}}],["workspace",{"_index":131,"name":{"168":{}},"parent":{}}]],"pipeline":[]}} \ No newline at end of file diff --git a/docs/api/references/plugin_api/classes/joplincommands.html b/docs/api/references/plugin_api/classes/joplincommands.html index 87bb53d744..386bd4a06e 100644 --- a/docs/api/references/plugin_api/classes/joplincommands.html +++ b/docs/api/references/plugin_api/classes/joplincommands.html @@ -168,10 +168,10 @@
// Register a new commmand called "testCommand1"
 
 await joplin.commands.register({
-    name: 'testCommand1',
-    label: 'My Test Command 1',
-    iconName: 'fas fa-music',
-    execute: () => {
+    name: 'testCommand1',
+    label: 'My Test Command 1',
+    iconName: 'fas fa-music',
+    execute: () => {
         alert('Testing plugin command 1');
     },
 });
diff --git a/docs/api/references/plugin_api/classes/joplindata.html b/docs/api/references/plugin_api/classes/joplindata.html index bc80be1e63..cef2bf877c 100644 --- a/docs/api/references/plugin_api/classes/joplindata.html +++ b/docs/api/references/plugin_api/classes/joplindata.html @@ -85,16 +85,16 @@

For example:

// Get a note ID, title and body
 const noteId = 'some_note_id';
-const note = await joplin.data.get(['notes', noteId], { fields: ['id', 'title', 'body'] });
+const note = await joplin.data.get(['notes', noteId], { fields: ['id', 'title', 'body'] });
 
 // Get all folders
 const folders = await joplin.data.get(['folders']);
 
 // Set the note body
-await joplin.data.put(['notes', noteId], null, { body: "New note body" });
+await joplin.data.put(['notes', noteId], null, { body: "New note body" });
 
 // Create a new note under one of the folders
-await joplin.data.post(['notes'], null, { body: "my new note", title: "some title", parent_id: folders[0].id });
+await joplin.data.post(['notes'], null, { body: "my new note", title: "some title", parent_id: folders[0].id }); { diff --git a/ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnResourceLongPress.ts b/packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.ts similarity index 81% rename from ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnResourceLongPress.ts rename to packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.ts index 066c9e22d1..dee8a35148 100644 --- a/ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnResourceLongPress.ts +++ b/packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.ts @@ -1,12 +1,12 @@ import { useCallback } from 'react'; -import Setting from 'lib/models/Setting'; -import shim from 'lib/shim'; +import Setting from '@joplinapp/lib/models/Setting'; +import shim from '@joplinapp/lib/shim'; const { ToastAndroid } = require('react-native'); -const { _ } = require('lib/locale.js'); -const { reg } = require('lib/registry.js'); -const { dialogs } = require('lib/dialogs.js'); -const Resource = require('lib/models/Resource.js'); +const { _ } = require('@joplinapp/lib/locale.js'); +const { reg } = require('@joplinapp/lib/registry.js'); +const { dialogs } = require('../../../utils/dialogs.js'); +const Resource = require('@joplinapp/lib/models/Resource.js'); const Share = require('react-native-share').default; export default function useOnResourceLongPress(onJoplinLinkClick:Function, dialogBoxRef:any) { diff --git a/ReactNativeClient/lib/components/NoteBodyViewer/hooks/useSource.ts b/packages/app-mobile/components/NoteBodyViewer/hooks/useSource.ts similarity index 95% rename from ReactNativeClient/lib/components/NoteBodyViewer/hooks/useSource.ts rename to packages/app-mobile/components/NoteBodyViewer/hooks/useSource.ts index 2f689d17c4..f253c03dbb 100644 --- a/ReactNativeClient/lib/components/NoteBodyViewer/hooks/useSource.ts +++ b/packages/app-mobile/components/NoteBodyViewer/hooks/useSource.ts @@ -1,9 +1,9 @@ import { useEffect, useState, useMemo } from 'react'; -import shim from 'lib/shim'; -import Setting from 'lib/models/Setting'; -const { themeStyle } = require('lib/components/global-style.js'); -const markupLanguageUtils = require('lib/markupLanguageUtils').default; -const { assetsToHeaders } = require('lib/joplin-renderer'); +import shim from '@joplinapp/lib/shim'; +import Setting from '@joplinapp/lib/models/Setting'; +const { themeStyle } = require('../../global-style.js'); +const markupLanguageUtils = require('@joplinapp/lib/markupLanguageUtils').default; +const { assetsToHeaders } = require('@joplinapp/renderer'); interface Source { uri: string, diff --git a/ReactNativeClient/lib/components/SafeAreaView.js b/packages/app-mobile/components/SafeAreaView.js similarity index 100% rename from ReactNativeClient/lib/components/SafeAreaView.js rename to packages/app-mobile/components/SafeAreaView.js diff --git a/ReactNativeClient/lib/components/SaveIcon.png b/packages/app-mobile/components/SaveIcon.png similarity index 100% rename from ReactNativeClient/lib/components/SaveIcon.png rename to packages/app-mobile/components/SaveIcon.png diff --git a/ReactNativeClient/lib/components/SelectDateTimeDialog.tsx b/packages/app-mobile/components/SelectDateTimeDialog.tsx similarity index 95% rename from ReactNativeClient/lib/components/SelectDateTimeDialog.tsx rename to packages/app-mobile/components/SelectDateTimeDialog.tsx index 7ec75c7acf..ee367caa98 100644 --- a/ReactNativeClient/lib/components/SelectDateTimeDialog.tsx +++ b/packages/app-mobile/components/SelectDateTimeDialog.tsx @@ -1,11 +1,11 @@ import * as React from 'react'; -import { themeStyle } from 'lib/theme'; -import { _ } from 'lib/locale'; +import { themeStyle } from '@joplinapp/lib/theme'; +import { _ } from '@joplinapp/lib/locale'; const { View, Button, Text } = require('react-native'); const PopupDialog = require('react-native-popup-dialog').default; const { DialogTitle, DialogButton } = require('react-native-popup-dialog'); -const { time } = require('lib/time-utils.js'); +const time = require('@joplinapp/lib/time').default; const DateTimePickerModal = require('react-native-modal-datetime-picker').default; export default class SelectDateTimeDialog extends React.PureComponent { diff --git a/ReactNativeClient/lib/components/action-button.js b/packages/app-mobile/components/action-button.js similarity index 97% rename from ReactNativeClient/lib/components/action-button.js rename to packages/app-mobile/components/action-button.js index 225609d9fa..a36a62d3f4 100644 --- a/ReactNativeClient/lib/components/action-button.js +++ b/packages/app-mobile/components/action-button.js @@ -1,11 +1,11 @@ const React = require('react'); const { StyleSheet } = require('react-native'); -const Note = require('lib/models/Note'); +const Note = require('@joplinapp/lib/models/Note'); const Icon = require('react-native-vector-icons/Ionicons').default; const ReactNativeActionButton = require('react-native-action-button').default; const { connect } = require('react-redux'); -const { _ } = require('lib/locale'); +const { _ } = require('@joplinapp/lib/locale'); Icon.loadFont(); diff --git a/ReactNativeClient/lib/components/app-nav.js b/packages/app-mobile/components/app-nav.js similarity index 93% rename from ReactNativeClient/lib/components/app-nav.js rename to packages/app-mobile/components/app-nav.js index 2ecc216ee8..daa092166e 100644 --- a/ReactNativeClient/lib/components/app-nav.js +++ b/packages/app-mobile/components/app-nav.js @@ -1,10 +1,10 @@ const React = require('react'); const Component = React.Component; const { connect } = require('react-redux'); -const { NotesScreen } = require('lib/components/screens/notes.js'); -const { SearchScreen } = require('lib/components/screens/search.js'); +const { NotesScreen } = require('./screens/notes.js'); +const { SearchScreen } = require('./screens/search.js'); const { KeyboardAvoidingView, Keyboard, Platform, View } = require('react-native'); -const { themeStyle } = require('lib/components/global-style.js'); +const { themeStyle } = require('./global-style.js'); class AppNavComponent extends Component { constructor() { diff --git a/ReactNativeClient/lib/components/base-screen.js b/packages/app-mobile/components/base-screen.js similarity index 87% rename from ReactNativeClient/lib/components/base-screen.js rename to packages/app-mobile/components/base-screen.js index b4bb0a4040..091f0ba0db 100644 --- a/ReactNativeClient/lib/components/base-screen.js +++ b/packages/app-mobile/components/base-screen.js @@ -1,7 +1,7 @@ const React = require('react'); const { StyleSheet } = require('react-native'); -const { themeStyle } = require('lib/components/global-style.js'); +const { themeStyle } = require('./global-style.js'); const rootStyles_ = {}; diff --git a/ReactNativeClient/lib/components/checkbox.js b/packages/app-mobile/components/checkbox.js similarity index 100% rename from ReactNativeClient/lib/components/checkbox.js rename to packages/app-mobile/components/checkbox.js diff --git a/ReactNativeClient/lib/components/global-style.js b/packages/app-mobile/components/global-style.js similarity index 94% rename from ReactNativeClient/lib/components/global-style.js rename to packages/app-mobile/components/global-style.js index 4a66bee9ce..9058308978 100644 --- a/ReactNativeClient/lib/components/global-style.js +++ b/packages/app-mobile/components/global-style.js @@ -1,6 +1,6 @@ -const Setting = require('lib/models/Setting').default; +const Setting = require('@joplinapp/lib/models/Setting').default; const { Platform } = require('react-native'); -const { themeById } = require('lib/theme'); +const { themeById } = require('@joplinapp/lib/theme'); const baseStyle = { appearance: 'light', diff --git a/ReactNativeClient/lib/components/note-item.js b/packages/app-mobile/components/note-item.js similarity index 95% rename from ReactNativeClient/lib/components/note-item.js rename to packages/app-mobile/components/note-item.js index 413986d972..e6977d4b50 100644 --- a/ReactNativeClient/lib/components/note-item.js +++ b/packages/app-mobile/components/note-item.js @@ -2,10 +2,10 @@ const React = require('react'); const Component = React.Component; const { connect } = require('react-redux'); const { Text, TouchableOpacity, View, StyleSheet } = require('react-native'); -const { Checkbox } = require('lib/components/checkbox.js'); -const Note = require('lib/models/Note.js'); -const { time } = require('lib/time-utils.js'); -const { themeStyle } = require('lib/components/global-style.js'); +const { Checkbox } = require('./checkbox.js'); +const Note = require('@joplinapp/lib/models/Note.js'); +const time = require('@joplinapp/lib/time').default; +const { themeStyle } = require('./global-style.js'); class NoteItemComponent extends Component { constructor() { diff --git a/ReactNativeClient/lib/components/note-list.js b/packages/app-mobile/components/note-list.js similarity index 93% rename from ReactNativeClient/lib/components/note-list.js rename to packages/app-mobile/components/note-list.js index a618e3dd95..c791993bc1 100644 --- a/ReactNativeClient/lib/components/note-list.js +++ b/packages/app-mobile/components/note-list.js @@ -2,10 +2,10 @@ const React = require('react'); const Component = React.Component; const { connect } = require('react-redux'); const { FlatList, Text, StyleSheet, Button, View } = require('react-native'); -const { _ } = require('lib/locale'); -const { NoteItem } = require('lib/components/note-item.js'); -const { time } = require('lib/time-utils.js'); -const { themeStyle } = require('lib/components/global-style.js'); +const { _ } = require('@joplinapp/lib/locale'); +const { NoteItem } = require('./note-item.js'); +const time = require('@joplinapp/lib/time').default; +const { themeStyle } = require('./global-style.js'); class NoteListComponent extends Component { constructor() { diff --git a/ReactNativeClient/lib/components/screen-header.js b/packages/app-mobile/components/screen-header.js similarity index 97% rename from ReactNativeClient/lib/components/screen-header.js rename to packages/app-mobile/components/screen-header.js index a2057b6657..a451485f85 100644 --- a/ReactNativeClient/lib/components/screen-header.js +++ b/packages/app-mobile/components/screen-header.js @@ -3,16 +3,16 @@ const React = require('react'); const { connect } = require('react-redux'); const { View, Text, StyleSheet, TouchableOpacity, Image, ScrollView, Dimensions } = require('react-native'); const Icon = require('react-native-vector-icons/Ionicons').default; -const { BackButtonService } = require('lib/services/back-button.js'); -const NavService = require('lib/services/NavService.js'); +const { BackButtonService } = require('../services/back-button.js'); +const NavService = require('@joplinapp/lib/services/NavService.js'); const { Menu, MenuOptions, MenuOption, MenuTrigger } = require('react-native-popup-menu'); -const { _ } = require('lib/locale'); -const Setting = require('lib/models/Setting').default; -const Note = require('lib/models/Note.js'); -const Folder = require('lib/models/Folder.js'); -const { themeStyle } = require('lib/components/global-style.js'); -const { Dropdown } = require('lib/components/Dropdown.js'); -const { dialogs } = require('lib/dialogs.js'); +const { _ } = require('@joplinapp/lib/locale'); +const Setting = require('@joplinapp/lib/models/Setting').default; +const Note = require('@joplinapp/lib/models/Note.js'); +const Folder = require('@joplinapp/lib/models/Folder.js'); +const { themeStyle } = require('./global-style.js'); +const { Dropdown } = require('./Dropdown.js'); +const { dialogs } = require('../utils/dialogs.js'); const DialogBox = require('react-native-dialogbox').default; Icon.loadFont(); diff --git a/ReactNativeClient/lib/components/screens/Note.tsx b/packages/app-mobile/components/screens/Note.tsx similarity index 85% rename from ReactNativeClient/lib/components/screens/Note.tsx rename to packages/app-mobile/components/screens/Note.tsx index 7cda1f6d1e..dd4e14844c 100644 --- a/ReactNativeClient/lib/components/screens/Note.tsx +++ b/packages/app-mobile/components/screens/Note.tsx @@ -1,48 +1,48 @@ -import AsyncActionQueue from '../../AsyncActionQueue'; -import UndoRedoService from 'lib/services/UndoRedoService'; -import uuid from 'lib/uuid'; -import Setting from 'lib/models/Setting'; -import shim from 'lib/shim'; -import NoteBodyViewer from 'lib/components/NoteBodyViewer/NoteBodyViewer'; -import checkPermissions from 'lib/checkPermissions'; +import AsyncActionQueue from '@joplinapp/lib/AsyncActionQueue'; +import UndoRedoService from '@joplinapp/lib/services/UndoRedoService'; +import uuid from '@joplinapp/lib/uuid'; +import Setting from '@joplinapp/lib/models/Setting'; +import shim from '@joplinapp/lib/shim'; +import NoteBodyViewer from '../NoteBodyViewer/NoteBodyViewer'; +import checkPermissions from '../../utils/checkPermissions'; const FileViewer = require('react-native-file-viewer').default; const React = require('react'); const { Platform, Keyboard, View, TextInput, StyleSheet, Linking, Image, Share, PermissionsAndroid } = require('react-native'); const { connect } = require('react-redux'); -const { MarkdownEditor } = require('../../../MarkdownEditor/index.js'); +// const { MarkdownEditor } = require('@joplinapp/lib/../MarkdownEditor/index.js'); const RNFS = require('react-native-fs'); -const Note = require('lib/models/Note.js'); -const BaseItem = require('lib/models/BaseItem.js'); -const Resource = require('lib/models/Resource.js'); -const Folder = require('lib/models/Folder.js'); +const Note = require('@joplinapp/lib/models/Note.js'); +const BaseItem = require('@joplinapp/lib/models/BaseItem.js'); +const Resource = require('@joplinapp/lib/models/Resource.js'); +const Folder = require('@joplinapp/lib/models/Folder.js'); const Clipboard = require('@react-native-community/clipboard').default; const md5 = require('md5'); -const { BackButtonService } = require('lib/services/back-button.js'); -const NavService = require('lib/services/NavService.js'); -const BaseModel = require('lib/BaseModel.js'); -const { ActionButton } = require('lib/components/action-button.js'); -const { fileExtension, safeFileExtension } = require('lib/path-utils'); -const mimeUtils = require('lib/mime-utils.js').mime; -const { ScreenHeader } = require('lib/components/screen-header.js'); -const NoteTagsDialog = require('lib/components/screens/NoteTagsDialog'); -const { time } = require('lib/time-utils.js'); -const { Checkbox } = require('lib/components/checkbox.js'); -const { _ } = require('lib/locale'); -const { reg } = require('lib/registry.js'); -const ResourceFetcher = require('lib/services/ResourceFetcher'); -const { BaseScreenComponent } = require('lib/components/base-screen.js'); -const { themeStyle, editorFont } = require('lib/components/global-style.js'); -const { dialogs } = require('lib/dialogs.js'); +const { BackButtonService } = require('../../services/back-button.js'); +const NavService = require('@joplinapp/lib/services/NavService.js'); +const BaseModel = require('@joplinapp/lib/BaseModel').default; +const { ActionButton } = require('../action-button.js'); +const { fileExtension, safeFileExtension } = require('@joplinapp/lib/path-utils'); +const mimeUtils = require('@joplinapp/lib/mime-utils.js').mime; +const { ScreenHeader } = require('../screen-header.js'); +const NoteTagsDialog = require('./NoteTagsDialog'); +const time = require('@joplinapp/lib/time').default; +const { Checkbox } = require('../checkbox.js'); +const { _ } = require('@joplinapp/lib/locale'); +const { reg } = require('@joplinapp/lib/registry.js'); +const ResourceFetcher = require('@joplinapp/lib/services/ResourceFetcher'); +const { BaseScreenComponent } = require('../base-screen.js'); +const { themeStyle, editorFont } = require('../global-style.js'); +const { dialogs } = require('../../utils/dialogs.js'); const DialogBox = require('react-native-dialogbox').default; const DocumentPicker = require('react-native-document-picker').default; const ImageResizer = require('react-native-image-resizer').default; -const shared = require('lib/components/shared/note-screen-shared.js'); +const shared = require('@joplinapp/lib/components/shared/note-screen-shared.js'); const ImagePicker = require('react-native-image-picker').default; -const SelectDateTimeDialog = require('lib/components/SelectDateTimeDialog').default; -const ShareExtension = require('lib/ShareExtension.js').default; -const CameraView = require('lib/components/CameraView').default; -const urlUtils = require('lib/urlUtils'); +const SelectDateTimeDialog = require('../SelectDateTimeDialog').default; +const ShareExtension = require('../../utils/ShareExtension.js').default; +const CameraView = require('../CameraView').default; +const urlUtils = require('@joplinapp/lib/urlUtils'); const emptyArray:any[] = []; @@ -84,7 +84,7 @@ class NoteScreenComponent extends BaseScreenComponent { this.saveActionQueues_ = {}; - this.markdownEditorRef = React.createRef(); // For focusing the Markdown editor + // this.markdownEditorRef = React.createRef(); // For focusing the Markdown editor this.doFocusUpdate_ = false; @@ -959,11 +959,11 @@ class NoteScreenComponent extends BaseScreenComponent { if (fieldToFocus === 'title' && this.refs.titleTextField) { this.refs.titleTextField.focus(); } - if (fieldToFocus === 'body' && this.markdownEditorRef.current) { - if (this.markdownEditorRef.current) { - this.markdownEditorRef.current.focus(); - } - } + // if (fieldToFocus === 'body' && this.markdownEditorRef.current) { + // if (this.markdownEditorRef.current) { + // this.markdownEditorRef.current.focus(); + // } + // } } async folderPickerOptions_valueChanged(itemValue:any) { @@ -1057,75 +1057,75 @@ class NoteScreenComponent extends BaseScreenComponent { /> ); } else { - bodyComponent = this.useBetaEditor() - // Note: blurOnSubmit is necessary to get multiline to work. - // See https://github.com/facebook/react-native/issues/12717#issuecomment-327001997 - // - // 2020-10-16: As of React Native 0.63, the Markdown Editor no longer crashes in Android, however the - // cursor is still too unreliable to be usable, so we disable it in Android. - ? this.body_changeText(text)} - blurOnSubmit={false} - selectionColor={theme.textSelectionColor} - keyboardAppearance={theme.keyboardAppearance} - placeholder={_('Add body')} - placeholderTextColor={theme.colorFaded} - noteBodyViewer={{ - onJoplinLinkClick: this.onJoplinLinkClick_, - style: this.styles().noteBodyViewerPreview, - paddingBottom: 0, - webViewStyle: theme, - noteBody: note.body, - noteMarkupLanguage: note.markup_language, - noteResources: this.state.noteResources, - highlightedKeywords: keywords, - themeId: this.props.themeId, - noteHash: this.props.noteHash, - onCheckboxChange: this.onBodyViewerCheckboxChange, - onMarkForDownload: this.onMarkForDownload, - onLoadEnd: this.onBodyViewerLoadEnd, - }} + // bodyComponent = this.useBetaEditor() + // // Note: blurOnSubmit is necessary to get multiline to work. + // // See https://github.com/facebook/react-native/issues/12717#issuecomment-327001997 + // // + // // 2020-10-16: As of React Native 0.63, the Markdown Editor no longer crashes in Android, however the + // // cursor is still too unreliable to be usable, so we disable it in Android. + // ? this.body_changeText(text)} + // blurOnSubmit={false} + // selectionColor={theme.textSelectionColor} + // keyboardAppearance={theme.keyboardAppearance} + // placeholder={_('Add body')} + // placeholderTextColor={theme.colorFaded} + // noteBodyViewer={{ + // onJoplinLinkClick: this.onJoplinLinkClick_, + // style: this.styles().noteBodyViewerPreview, + // paddingBottom: 0, + // webViewStyle: theme, + // noteBody: note.body, + // noteMarkupLanguage: note.markup_language, + // noteResources: this.state.noteResources, + // highlightedKeywords: keywords, + // themeId: this.props.themeId, + // noteHash: this.props.noteHash, + // onCheckboxChange: this.onBodyViewerCheckboxChange, + // onMarkForDownload: this.onMarkForDownload, + // onLoadEnd: this.onBodyViewerLoadEnd, + // }} - /> - : - // Note: In theory ScrollView can be used to provide smoother scrolling of the TextInput. - // However it causes memory or rendering issues on older Android devices, probably because - // the whole text input has to be in memory for the scrollview to work. So we keep it as - // a plain TextInput for now. - // See https://github.com/laurent22/joplin/issues/3041 + // /> + // : + // // Note: In theory ScrollView can be used to provide smoother scrolling of the TextInput. + // // However it causes memory or rendering issues on older Android devices, probably because + // // the whole text input has to be in memory for the scrollview to work. So we keep it as + // // a plain TextInput for now. + // // See https://github.com/laurent22/joplin/issues/3041 - // IMPORTANT: The TextInput selection is unreliable and cannot be used in a controlled component - // context. In other words, the selection should be considered read-only. For example, if the seleciton - // is saved to the state in onSelectionChange and the current text in onChangeText, then set - // back in `selection` and `value` props, it will mostly work. But when typing fast, sooner or - // later the real selection will be different from what is stored in the state, thus making - // the cursor jump around. Eg, when typing "abcdef", it will do this: - // abcd| - // abcde| - // abcde|f - ( - this.body_changeText(text)} - onSelectionChange={this.body_selectionChange} - blurOnSubmit={false} - selectionColor={theme.textSelectionColor} - keyboardAppearance={theme.keyboardAppearance} - placeholder={_('Add body')} - placeholderTextColor={theme.colorFaded} - /> - ); + // // IMPORTANT: The TextInput selection is unreliable and cannot be used in a controlled component + // // context. In other words, the selection should be considered read-only. For example, if the seleciton + // // is saved to the state in onSelectionChange and the current text in onChangeText, then set + // // back in `selection` and `value` props, it will mostly work. But when typing fast, sooner or + // // later the real selection will be different from what is stored in the state, thus making + // // the cursor jump around. Eg, when typing "abcdef", it will do this: + // // abcd| + // // abcde| + // // abcde|f + // ( + // this.body_changeText(text)} + // onSelectionChange={this.body_selectionChange} + // blurOnSubmit={false} + // selectionColor={theme.textSelectionColor} + // keyboardAppearance={theme.keyboardAppearance} + // placeholder={_('Add body')} + // placeholderTextColor={theme.colorFaded} + // /> + // ); } const renderActionButton = () => { diff --git a/ReactNativeClient/lib/components/screens/NoteTagsDialog.js b/packages/app-mobile/components/screens/NoteTagsDialog.js similarity index 96% rename from ReactNativeClient/lib/components/screens/NoteTagsDialog.js rename to packages/app-mobile/components/screens/NoteTagsDialog.js index a64c1f9060..6c9223d151 100644 --- a/ReactNativeClient/lib/components/screens/NoteTagsDialog.js +++ b/packages/app-mobile/components/screens/NoteTagsDialog.js @@ -2,11 +2,11 @@ const React = require('react'); const { StyleSheet, View, Text, FlatList, TouchableOpacity, TextInput } = require('react-native'); const { connect } = require('react-redux'); -const Tag = require('lib/models/Tag.js'); -const { _ } = require('lib/locale'); -const { themeStyle } = require('lib/components/global-style.js'); +const Tag = require('@joplinapp/lib/models/Tag.js'); +const { _ } = require('@joplinapp/lib/locale'); +const { themeStyle } = require('../global-style.js'); const Icon = require('react-native-vector-icons/Ionicons').default; -const ModalDialog = require('lib/components/ModalDialog'); +const ModalDialog = require('../ModalDialog'); const naturalCompare = require('string-natural-compare'); Icon.loadFont(); diff --git a/ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.tsx b/packages/app-mobile/components/screens/UpgradeSyncTargetScreen.tsx similarity index 90% rename from ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.tsx rename to packages/app-mobile/components/screens/UpgradeSyncTargetScreen.tsx index 5a1c3f2a87..aa669a9f24 100644 --- a/ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.tsx +++ b/packages/app-mobile/components/screens/UpgradeSyncTargetScreen.tsx @@ -1,11 +1,11 @@ import * as React from 'react'; -import useSyncTargetUpgrade from 'lib/services/synchronizer/gui/useSyncTargetUpgrade'; -import { _ } from 'lib/locale'; +import useSyncTargetUpgrade from '@joplinapp/lib/services/synchronizer/gui/useSyncTargetUpgrade'; +import { _ } from '@joplinapp/lib/locale'; const { View, Text, ScrollView } = require('react-native'); const { connect } = require('react-redux'); -const { themeStyle } = require('lib/components/global-style.js'); -const { ScreenHeader } = require('lib/components/screen-header.js'); +const { themeStyle } = require('../global-style.js'); +const { ScreenHeader } = require('../screen-header.js'); function UpgradeSyncTargetScreen(props:any) { const upgradeResult = useSyncTargetUpgrade(); diff --git a/ReactNativeClient/lib/components/screens/config.js b/packages/app-mobile/components/screens/config.js similarity index 95% rename from ReactNativeClient/lib/components/screens/config.js rename to packages/app-mobile/components/screens/config.js index 256499b0e9..fb240fac53 100644 --- a/ReactNativeClient/lib/components/screens/config.js +++ b/packages/app-mobile/components/screens/config.js @@ -2,23 +2,23 @@ import Slider from '@react-native-community/slider'; const React = require('react'); const { Platform, TouchableOpacity, Linking, View, Switch, StyleSheet, Text, Button, ScrollView, TextInput, Alert, PermissionsAndroid } = require('react-native'); const { connect } = require('react-redux'); -const { ScreenHeader } = require('lib/components/screen-header.js'); -const { _ } = require('lib/locale'); -const { BaseScreenComponent } = require('lib/components/base-screen.js'); -const { Dropdown } = require('lib/components/Dropdown.js'); -const { themeStyle } = require('lib/components/global-style.js'); -const Setting = require('lib/models/Setting').default; -const shared = require('lib/components/shared/config-shared.js'); -const SyncTargetRegistry = require('lib/SyncTargetRegistry'); -const { reg } = require('lib/registry.js'); -const NavService = require('lib/services/NavService.js'); +const { ScreenHeader } = require('../screen-header.js'); +const { _ } = require('@joplinapp/lib/locale'); +const { BaseScreenComponent } = require('../base-screen.js'); +const { Dropdown } = require('../Dropdown.js'); +const { themeStyle } = require('../global-style.js'); +const Setting = require('@joplinapp/lib/models/Setting').default; +const shared = require('@joplinapp/lib/components/shared/config-shared.js'); +const SyncTargetRegistry = require('@joplinapp/lib/SyncTargetRegistry'); +const { reg } = require('@joplinapp/lib/registry.js'); +const NavService = require('@joplinapp/lib/services/NavService.js'); const VersionInfo = require('react-native-version-info').default; -const { ReportService } = require('lib/services/report.js'); -const { time } = require('lib/time-utils'); -const shim = require('lib/shim').default; -const SearchEngine = require('lib/services/searchengine/SearchEngine'); +const { ReportService } = require('@joplinapp/lib/services/report.js'); +const time = require('@joplinapp/lib/time').default; +const shim = require('@joplinapp/lib/shim').default; +const SearchEngine = require('@joplinapp/lib/services/searchengine/SearchEngine'); const RNFS = require('react-native-fs'); -const checkPermissions = require('lib/checkPermissions.js').default; +const checkPermissions = require('../../utils/checkPermissions.js').default; class ConfigScreenComponent extends BaseScreenComponent { static navigationOptions() { diff --git a/ReactNativeClient/lib/components/screens/dropbox-login.js b/packages/app-mobile/components/screens/dropbox-login.js similarity index 88% rename from ReactNativeClient/lib/components/screens/dropbox-login.js rename to packages/app-mobile/components/screens/dropbox-login.js index df3512db2e..56b92b7b76 100644 --- a/ReactNativeClient/lib/components/screens/dropbox-login.js +++ b/packages/app-mobile/components/screens/dropbox-login.js @@ -2,13 +2,13 @@ const React = require('react'); const { View, Button, Text, TextInput, TouchableOpacity, StyleSheet, ScrollView } = require('react-native'); const { connect } = require('react-redux'); -const { ScreenHeader } = require('lib/components/screen-header.js'); -const { _ } = require('lib/locale'); -const { BaseScreenComponent } = require('lib/components/base-screen.js'); +const { ScreenHeader } = require('../screen-header.js'); +const { _ } = require('@joplinapp/lib/locale'); +const { BaseScreenComponent } = require('../base-screen.js'); const DialogBox = require('react-native-dialogbox').default; -const { dialogs } = require('lib/dialogs.js'); -const Shared = require('lib/components/shared/dropbox-login-shared'); -const { themeStyle } = require('lib/components/global-style.js'); +const { dialogs } = require('../../utils/dialogs.js'); +const Shared = require('@joplinapp/lib/components/shared/dropbox-login-shared'); +const { themeStyle } = require('../global-style.js'); class DropboxLoginScreenComponent extends BaseScreenComponent { constructor() { diff --git a/ReactNativeClient/lib/components/screens/encryption-config.js b/packages/app-mobile/components/screens/encryption-config.js similarity index 95% rename from ReactNativeClient/lib/components/screens/encryption-config.js rename to packages/app-mobile/components/screens/encryption-config.js index 38a8e1628a..d1f84dcacb 100644 --- a/ReactNativeClient/lib/components/screens/encryption-config.js +++ b/packages/app-mobile/components/screens/encryption-config.js @@ -1,15 +1,15 @@ const React = require('react'); const { TextInput, TouchableOpacity, Linking, View, StyleSheet, Text, Button, ScrollView } = require('react-native'); -const EncryptionService = require('lib/services/EncryptionService'); +const EncryptionService = require('@joplinapp/lib/services/EncryptionService'); const { connect } = require('react-redux'); -const { ScreenHeader } = require('lib/components/screen-header.js'); -const { _ } = require('lib/locale'); -const { BaseScreenComponent } = require('lib/components/base-screen.js'); -const { themeStyle } = require('lib/components/global-style.js'); -const { time } = require('lib/time-utils.js'); -const shared = require('lib/components/shared/encryption-config-shared.js'); -const { dialogs } = require('lib/dialogs.js'); +const { ScreenHeader } = require('../screen-header.js'); +const { _ } = require('@joplinapp/lib/locale'); +const { BaseScreenComponent } = require('../base-screen.js'); +const { themeStyle } = require('../global-style.js'); +const time = require('@joplinapp/lib/time').default; +const shared = require('@joplinapp/lib/components/shared/encryption-config-shared.js'); +const { dialogs } = require('../../utils/dialogs.js'); const DialogBox = require('react-native-dialogbox').default; class EncryptionConfigScreenComponent extends BaseScreenComponent { diff --git a/ReactNativeClient/lib/components/screens/folder.js b/packages/app-mobile/components/screens/folder.js similarity index 89% rename from ReactNativeClient/lib/components/screens/folder.js rename to packages/app-mobile/components/screens/folder.js index 97c562358f..b9789e6e0a 100644 --- a/ReactNativeClient/lib/components/screens/folder.js +++ b/packages/app-mobile/components/screens/folder.js @@ -2,13 +2,13 @@ const React = require('react'); const { View, TextInput, StyleSheet } = require('react-native'); const { connect } = require('react-redux'); -const Folder = require('lib/models/Folder.js'); -const BaseModel = require('lib/BaseModel.js'); -const { ScreenHeader } = require('lib/components/screen-header.js'); -const { BaseScreenComponent } = require('lib/components/base-screen.js'); -const { dialogs } = require('lib/dialogs.js'); -const { themeStyle } = require('lib/components/global-style.js'); -const { _ } = require('lib/locale'); +const Folder = require('@joplinapp/lib/models/Folder.js'); +const BaseModel = require('@joplinapp/lib/BaseModel').default; +const { ScreenHeader } = require('../screen-header.js'); +const { BaseScreenComponent } = require('../base-screen.js'); +const { dialogs } = require('../../utils/dialogs.js'); +const { themeStyle } = require('../global-style.js'); +const { _ } = require('@joplinapp/lib/locale'); class FolderScreenComponent extends BaseScreenComponent { static navigationOptions() { diff --git a/ReactNativeClient/lib/components/screens/log.js b/packages/app-mobile/components/screens/log.js similarity index 89% rename from ReactNativeClient/lib/components/screens/log.js rename to packages/app-mobile/components/screens/log.js index a97fcd3566..327787a7de 100644 --- a/ReactNativeClient/lib/components/screens/log.js +++ b/packages/app-mobile/components/screens/log.js @@ -2,13 +2,13 @@ const React = require('react'); const { FlatList, View, Text, Button, StyleSheet, Platform } = require('react-native'); const { connect } = require('react-redux'); -const { reg } = require('lib/registry.js'); -const { ScreenHeader } = require('lib/components/screen-header.js'); -const { time } = require('lib/time-utils'); -const { themeStyle } = require('lib/components/global-style.js'); -const Logger = require('lib/Logger').default; -const { BaseScreenComponent } = require('lib/components/base-screen.js'); -const { _ } = require('lib/locale'); +const { reg } = require('@joplinapp/lib/registry.js'); +const { ScreenHeader } = require('../screen-header.js'); +const time = require('@joplinapp/lib/time').default; +const { themeStyle } = require('../global-style.js'); +const Logger = require('@joplinapp/lib/Logger').default; +const { BaseScreenComponent } = require('../base-screen.js'); +const { _ } = require('@joplinapp/lib/locale'); class LogScreenComponent extends BaseScreenComponent { static navigationOptions() { diff --git a/ReactNativeClient/lib/components/screens/notes.js b/packages/app-mobile/components/screens/notes.js similarity index 91% rename from ReactNativeClient/lib/components/screens/notes.js rename to packages/app-mobile/components/screens/notes.js index fad281630c..10fdbd7ee4 100644 --- a/ReactNativeClient/lib/components/screens/notes.js +++ b/packages/app-mobile/components/screens/notes.js @@ -1,21 +1,21 @@ const React = require('react'); const { AppState, View, StyleSheet } = require('react-native'); -const { stateUtils } = require('lib/reducer'); +const { stateUtils } = require('@joplinapp/lib/reducer'); const { connect } = require('react-redux'); -const { NoteList } = require('lib/components/note-list.js'); -const Folder = require('lib/models/Folder.js'); -const Tag = require('lib/models/Tag.js'); -const Note = require('lib/models/Note.js'); -const Setting = require('lib/models/Setting').default; -const { themeStyle } = require('lib/components/global-style.js'); -const { ScreenHeader } = require('lib/components/screen-header.js'); -const { _ } = require('lib/locale'); -const { ActionButton } = require('lib/components/action-button.js'); -const { dialogs } = require('lib/dialogs.js'); +const { NoteList } = require('../note-list.js'); +const Folder = require('@joplinapp/lib/models/Folder.js'); +const Tag = require('@joplinapp/lib/models/Tag.js'); +const Note = require('@joplinapp/lib/models/Note.js'); +const Setting = require('@joplinapp/lib/models/Setting').default; +const { themeStyle } = require('../global-style.js'); +const { ScreenHeader } = require('../screen-header.js'); +const { _ } = require('@joplinapp/lib/locale'); +const { ActionButton } = require('../action-button.js'); +const { dialogs } = require('../../utils/dialogs.js'); const DialogBox = require('react-native-dialogbox').default; -const { BaseScreenComponent } = require('lib/components/base-screen.js'); -const { BackButtonService } = require('lib/services/back-button.js'); +const { BaseScreenComponent } = require('../base-screen.js'); +const { BackButtonService } = require('../../services/back-button.js'); class NotesScreenComponent extends BaseScreenComponent { static navigationOptions() { diff --git a/ReactNativeClient/lib/components/screens/onedrive-login.js b/packages/app-mobile/components/screens/onedrive-login.js similarity index 88% rename from ReactNativeClient/lib/components/screens/onedrive-login.js rename to packages/app-mobile/components/screens/onedrive-login.js index 460582b532..f70bdf7085 100644 --- a/ReactNativeClient/lib/components/screens/onedrive-login.js +++ b/packages/app-mobile/components/screens/onedrive-login.js @@ -4,13 +4,13 @@ const { View } = require('react-native'); const { Button } = require('react-native'); const { WebView } = require('react-native-webview'); const { connect } = require('react-redux'); -const { ScreenHeader } = require('lib/components/screen-header.js'); -const { reg } = require('lib/registry.js'); -const { _ } = require('lib/locale'); -const { BaseScreenComponent } = require('lib/components/base-screen.js'); -const parseUri = require('lib/parseUri'); -const { themeStyle } = require('lib/components/global-style.js'); -const shim = require('lib/shim').default; +const { ScreenHeader } = require('../screen-header.js'); +const { reg } = require('@joplinapp/lib/registry.js'); +const { _ } = require('@joplinapp/lib/locale'); +const { BaseScreenComponent } = require('../base-screen.js'); +const parseUri = require('@joplinapp/lib/parseUri'); +const { themeStyle } = require('../global-style.js'); +const shim = require('@joplinapp/lib/shim').default; class OneDriveLoginScreenComponent extends BaseScreenComponent { static navigationOptions() { diff --git a/ReactNativeClient/lib/components/screens/search.js b/packages/app-mobile/components/screens/search.js similarity index 90% rename from ReactNativeClient/lib/components/screens/search.js rename to packages/app-mobile/components/screens/search.js index 3cc09b6ab7..9198209fec 100644 --- a/ReactNativeClient/lib/components/screens/search.js +++ b/packages/app-mobile/components/screens/search.js @@ -2,16 +2,16 @@ const React = require('react'); const { StyleSheet, View, TextInput, FlatList, TouchableHighlight } = require('react-native'); const { connect } = require('react-redux'); -const { ScreenHeader } = require('lib/components/screen-header.js'); +const { ScreenHeader } = require('../screen-header.js'); const Icon = require('react-native-vector-icons/Ionicons').default; -const { _ } = require('lib/locale'); -const Note = require('lib/models/Note.js'); -const { NoteItem } = require('lib/components/note-item.js'); -const { BaseScreenComponent } = require('lib/components/base-screen.js'); -const { themeStyle } = require('lib/components/global-style.js'); +const { _ } = require('@joplinapp/lib/locale'); +const Note = require('@joplinapp/lib/models/Note.js'); +const { NoteItem } = require('../note-item.js'); +const { BaseScreenComponent } = require('../base-screen.js'); +const { themeStyle } = require('../global-style.js'); const DialogBox = require('react-native-dialogbox').default; -const SearchEngineUtils = require('lib/services/searchengine/SearchEngineUtils'); -const SearchEngine = require('lib/services/searchengine/SearchEngine'); +const SearchEngineUtils = require('@joplinapp/lib/services/searchengine/SearchEngineUtils'); +const SearchEngine = require('@joplinapp/lib/services/searchengine/SearchEngine'); Icon.loadFont(); diff --git a/ReactNativeClient/lib/components/screens/status.js b/packages/app-mobile/components/screens/status.js similarity index 90% rename from ReactNativeClient/lib/components/screens/status.js rename to packages/app-mobile/components/screens/status.js index d06f58e8ee..2a15131228 100644 --- a/ReactNativeClient/lib/components/screens/status.js +++ b/packages/app-mobile/components/screens/status.js @@ -1,13 +1,13 @@ const React = require('react'); const { View, Text, Button, FlatList } = require('react-native'); -const Setting = require('lib/models/Setting').default; +const Setting = require('@joplinapp/lib/models/Setting').default; const { connect } = require('react-redux'); -const { ScreenHeader } = require('lib/components/screen-header.js'); -const { ReportService } = require('lib/services/report.js'); -const { _ } = require('lib/locale'); -const { BaseScreenComponent } = require('lib/components/base-screen.js'); -const { themeStyle } = require('lib/components/global-style.js'); +const { ScreenHeader } = require('../screen-header.js'); +const { ReportService } = require('@joplinapp/lib/services/report.js'); +const { _ } = require('@joplinapp/lib/locale'); +const { BaseScreenComponent } = require('../base-screen.js'); +const { themeStyle } = require('../global-style.js'); class StatusScreenComponent extends BaseScreenComponent { static navigationOptions() { diff --git a/ReactNativeClient/lib/components/screens/tags.js b/packages/app-mobile/components/screens/tags.js similarity index 89% rename from ReactNativeClient/lib/components/screens/tags.js rename to packages/app-mobile/components/screens/tags.js index 38ba6ca3cc..e9e5498b1a 100644 --- a/ReactNativeClient/lib/components/screens/tags.js +++ b/packages/app-mobile/components/screens/tags.js @@ -2,11 +2,11 @@ const React = require('react'); const { View, Text, FlatList, StyleSheet, TouchableOpacity } = require('react-native'); const { connect } = require('react-redux'); -const Tag = require('lib/models/Tag.js'); -const { themeStyle } = require('lib/components/global-style.js'); -const { ScreenHeader } = require('lib/components/screen-header.js'); -const { _ } = require('lib/locale'); -const { BaseScreenComponent } = require('lib/components/base-screen.js'); +const Tag = require('@joplinapp/lib/models/Tag.js'); +const { themeStyle } = require('../global-style.js'); +const { ScreenHeader } = require('../screen-header.js'); +const { _ } = require('@joplinapp/lib/locale'); +const { BaseScreenComponent } = require('../base-screen.js'); class TagsScreenComponent extends BaseScreenComponent { static navigationOptions() { diff --git a/ReactNativeClient/lib/components/side-menu-content-note.js b/packages/app-mobile/components/side-menu-content-note.js similarity index 97% rename from ReactNativeClient/lib/components/side-menu-content-note.js rename to packages/app-mobile/components/side-menu-content-note.js index 25660f6027..d23394c2d5 100644 --- a/ReactNativeClient/lib/components/side-menu-content-note.js +++ b/packages/app-mobile/components/side-menu-content-note.js @@ -3,7 +3,7 @@ const Component = React.Component; const { TouchableOpacity, Text, StyleSheet, ScrollView, View } = require('react-native'); const { connect } = require('react-redux'); const Icon = require('react-native-vector-icons/Ionicons').default; -const { themeStyle } = require('lib/components/global-style.js'); +const { themeStyle } = require('./global-style.js'); Icon.loadFont(); diff --git a/ReactNativeClient/lib/components/side-menu-content.js b/packages/app-mobile/components/side-menu-content.js similarity index 96% rename from ReactNativeClient/lib/components/side-menu-content.js rename to packages/app-mobile/components/side-menu-content.js index 2cf75b78d5..b372cf713d 100644 --- a/ReactNativeClient/lib/components/side-menu-content.js +++ b/packages/app-mobile/components/side-menu-content.js @@ -3,12 +3,12 @@ const Component = React.Component; const { Easing, Animated, TouchableOpacity, Text, StyleSheet, ScrollView, View, Alert } = require('react-native'); const { connect } = require('react-redux'); const Icon = require('react-native-vector-icons/Ionicons').default; -const Folder = require('lib/models/Folder.js'); -const Synchronizer = require('lib/Synchronizer').default; -const NavService = require('lib/services/NavService.js'); -const { _ } = require('lib/locale'); -const { themeStyle } = require('lib/components/global-style.js'); -const shared = require('lib/components/shared/side-menu-shared.js'); +const Folder = require('@joplinapp/lib/models/Folder.js'); +const Synchronizer = require('@joplinapp/lib/Synchronizer').default; +const NavService = require('@joplinapp/lib/services/NavService.js'); +const { _ } = require('@joplinapp/lib/locale'); +const { themeStyle } = require('./global-style.js'); +const shared = require('@joplinapp/lib/components/shared/side-menu-shared.js'); Icon.loadFont(); diff --git a/ReactNativeClient/lib/components/side-menu.js b/packages/app-mobile/components/side-menu.js similarity index 100% rename from ReactNativeClient/lib/components/side-menu.js rename to packages/app-mobile/components/side-menu.js diff --git a/packages/app-mobile/gulpfile.js b/packages/app-mobile/gulpfile.js new file mode 100644 index 0000000000..eb14194903 --- /dev/null +++ b/packages/app-mobile/gulpfile.js @@ -0,0 +1,38 @@ +const gulp = require('gulp'); +const fs = require('fs-extra'); +const utils = require('@joplinapp/tools/gulp/utils'); + +const tasks = { + encodeAssets: { + fn: require('./tools/encodeAssets'), + }, + buildReactNativeInjectedJs: { + fn: require('./tools/buildReactNativeInjectedJs'), + }, + podInstall: { + fn: require('./tools/podInstall'), + }, + // clean: { + // fn: require('./tools/clean'), + // }, + linkReact: { + fn: async () => { + // React is a dependency of both the lib and app-desktop + // packages, which cause a duplicate React issue. To go around + // this, one way is to manually link the package. + // https://reactjs.org/warnings/invalid-hook-call-warning.html#duplicate-react + process.chdir(__dirname); + await fs.remove('./node_modules/react'); + await utils.execCommand('npm link ../lib/node_modules/react'); + }, + }, +}; + +utils.registerGulpTasks(gulp, tasks); + +gulp.task('build', gulp.series( + 'buildReactNativeInjectedJs', + 'encodeAssets', + // 'linkReact', + 'podInstall' +)); diff --git a/ReactNativeClient/index.js b/packages/app-mobile/index.js similarity index 96% rename from ReactNativeClient/index.js rename to packages/app-mobile/index.js index 792be0d4f1..c4425c28e9 100644 --- a/ReactNativeClient/index.js +++ b/packages/app-mobile/index.js @@ -29,6 +29,8 @@ LogBox.ignoreLogs([ 'Require cycle: node_modules\\rn-fetch-blob', 'Require cycle: node_modules/aws-sdk', 'Require cycle: node_modules\\aws-sdk', + 'Require cycle: ../lib/node_modules/aws-sdk', + 'Require cycle: ..\\lib\\node_modules\\aws-sdk', // It's being updated over time and we don't need to see these warnings all the time 'Warning: componentWillReceiveProps has been renamed', diff --git a/ReactNativeClient/ios/Joplin-tvOS/Info.plist b/packages/app-mobile/ios/Joplin-tvOS/Info.plist similarity index 100% rename from ReactNativeClient/ios/Joplin-tvOS/Info.plist rename to packages/app-mobile/ios/Joplin-tvOS/Info.plist diff --git a/ReactNativeClient/ios/Joplin-tvOSTests/Info.plist b/packages/app-mobile/ios/Joplin-tvOSTests/Info.plist similarity index 100% rename from ReactNativeClient/ios/Joplin-tvOSTests/Info.plist rename to packages/app-mobile/ios/Joplin-tvOSTests/Info.plist diff --git a/ReactNativeClient/ios/Joplin.xcodeproj/project.pbxproj b/packages/app-mobile/ios/Joplin.xcodeproj/project.pbxproj similarity index 100% rename from ReactNativeClient/ios/Joplin.xcodeproj/project.pbxproj rename to packages/app-mobile/ios/Joplin.xcodeproj/project.pbxproj diff --git a/ReactNativeClient/ios/Joplin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/app-mobile/ios/Joplin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from ReactNativeClient/ios/Joplin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to packages/app-mobile/ios/Joplin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/ReactNativeClient/ios/Joplin.xcodeproj/xcshareddata/xcschemes/Joplin-tvOS.xcscheme b/packages/app-mobile/ios/Joplin.xcodeproj/xcshareddata/xcschemes/Joplin-tvOS.xcscheme similarity index 100% rename from ReactNativeClient/ios/Joplin.xcodeproj/xcshareddata/xcschemes/Joplin-tvOS.xcscheme rename to packages/app-mobile/ios/Joplin.xcodeproj/xcshareddata/xcschemes/Joplin-tvOS.xcscheme diff --git a/ReactNativeClient/ios/Joplin.xcodeproj/xcshareddata/xcschemes/Joplin.xcscheme b/packages/app-mobile/ios/Joplin.xcodeproj/xcshareddata/xcschemes/Joplin.xcscheme similarity index 100% rename from ReactNativeClient/ios/Joplin.xcodeproj/xcshareddata/xcschemes/Joplin.xcscheme rename to packages/app-mobile/ios/Joplin.xcodeproj/xcshareddata/xcschemes/Joplin.xcscheme diff --git a/ReactNativeClient/ios/Joplin.xcworkspace/contents.xcworkspacedata b/packages/app-mobile/ios/Joplin.xcworkspace/contents.xcworkspacedata similarity index 100% rename from ReactNativeClient/ios/Joplin.xcworkspace/contents.xcworkspacedata rename to packages/app-mobile/ios/Joplin.xcworkspace/contents.xcworkspacedata diff --git a/ReactNativeClient/ios/Joplin.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/app-mobile/ios/Joplin.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from ReactNativeClient/ios/Joplin.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to packages/app-mobile/ios/Joplin.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/ReactNativeClient/ios/Joplin/AppDelegate.h b/packages/app-mobile/ios/Joplin/AppDelegate.h similarity index 100% rename from ReactNativeClient/ios/Joplin/AppDelegate.h rename to packages/app-mobile/ios/Joplin/AppDelegate.h diff --git a/ReactNativeClient/ios/Joplin/AppDelegate.m b/packages/app-mobile/ios/Joplin/AppDelegate.m similarity index 100% rename from ReactNativeClient/ios/Joplin/AppDelegate.m rename to packages/app-mobile/ios/Joplin/AppDelegate.m diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/Contents.json b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/Contents.json rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ios_marketing1024x1024.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ios_marketing1024x1024.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ios_marketing1024x1024.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ios_marketing1024x1024.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76@2x.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76@2x.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76@2x.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20@2x.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20@2x.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20@2x.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_pro_app83.5x83.5@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_pro_app83.5x83.5@2x.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_pro_app83.5x83.5@2x.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_pro_app83.5x83.5@2x.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29@2x.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29@2x.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29@2x.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40@2x.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40@2x.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40@2x.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@2x.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@2x.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@2x.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@3x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@3x.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@3x.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@3x.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@2x.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@2x.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@2x.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@3x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@3x.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@3x.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@3x.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@2x.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@2x.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@2x.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@3x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@3x.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@3x.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@3x.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@2x.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@2x.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@2x.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@3x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@3x.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@3x.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@3x.png diff --git a/ReactNativeClient/ios/Joplin/Images.xcassets/iTunesArtwork.png b/packages/app-mobile/ios/Joplin/Images.xcassets/iTunesArtwork.png similarity index 100% rename from ReactNativeClient/ios/Joplin/Images.xcassets/iTunesArtwork.png rename to packages/app-mobile/ios/Joplin/Images.xcassets/iTunesArtwork.png diff --git a/ReactNativeClient/ios/Joplin/Info.plist b/packages/app-mobile/ios/Joplin/Info.plist similarity index 100% rename from ReactNativeClient/ios/Joplin/Info.plist rename to packages/app-mobile/ios/Joplin/Info.plist diff --git a/ReactNativeClient/ios/Joplin/LaunchScreen.storyboard b/packages/app-mobile/ios/Joplin/LaunchScreen.storyboard similarity index 100% rename from ReactNativeClient/ios/Joplin/LaunchScreen.storyboard rename to packages/app-mobile/ios/Joplin/LaunchScreen.storyboard diff --git a/ReactNativeClient/ios/Joplin/main.m b/packages/app-mobile/ios/Joplin/main.m similarity index 100% rename from ReactNativeClient/ios/Joplin/main.m rename to packages/app-mobile/ios/Joplin/main.m diff --git a/ReactNativeClient/ios/JoplinTests/Info.plist b/packages/app-mobile/ios/JoplinTests/Info.plist similarity index 100% rename from ReactNativeClient/ios/JoplinTests/Info.plist rename to packages/app-mobile/ios/JoplinTests/Info.plist diff --git a/ReactNativeClient/ios/JoplinTests/JoplinTests.m b/packages/app-mobile/ios/JoplinTests/JoplinTests.m similarity index 100% rename from ReactNativeClient/ios/JoplinTests/JoplinTests.m rename to packages/app-mobile/ios/JoplinTests/JoplinTests.m diff --git a/ReactNativeClient/ios/Podfile b/packages/app-mobile/ios/Podfile similarity index 100% rename from ReactNativeClient/ios/Podfile rename to packages/app-mobile/ios/Podfile diff --git a/ReactNativeClient/ios/Podfile.lock b/packages/app-mobile/ios/Podfile.lock similarity index 100% rename from ReactNativeClient/ios/Podfile.lock rename to packages/app-mobile/ios/Podfile.lock diff --git a/ElectronClient/locales/ar.json b/packages/app-mobile/locales/ar.json similarity index 100% rename from ElectronClient/locales/ar.json rename to packages/app-mobile/locales/ar.json diff --git a/ElectronClient/locales/bg_BG.json b/packages/app-mobile/locales/bg_BG.json similarity index 100% rename from ElectronClient/locales/bg_BG.json rename to packages/app-mobile/locales/bg_BG.json diff --git a/ElectronClient/locales/bs_BA.json b/packages/app-mobile/locales/bs_BA.json similarity index 100% rename from ElectronClient/locales/bs_BA.json rename to packages/app-mobile/locales/bs_BA.json diff --git a/ElectronClient/locales/ca.json b/packages/app-mobile/locales/ca.json similarity index 100% rename from ElectronClient/locales/ca.json rename to packages/app-mobile/locales/ca.json diff --git a/ElectronClient/locales/cs_CZ.json b/packages/app-mobile/locales/cs_CZ.json similarity index 100% rename from ElectronClient/locales/cs_CZ.json rename to packages/app-mobile/locales/cs_CZ.json diff --git a/ElectronClient/locales/da_DK.json b/packages/app-mobile/locales/da_DK.json similarity index 100% rename from ElectronClient/locales/da_DK.json rename to packages/app-mobile/locales/da_DK.json diff --git a/ElectronClient/locales/de_DE.json b/packages/app-mobile/locales/de_DE.json similarity index 100% rename from ElectronClient/locales/de_DE.json rename to packages/app-mobile/locales/de_DE.json diff --git a/ElectronClient/locales/el_GR.json b/packages/app-mobile/locales/el_GR.json similarity index 100% rename from ElectronClient/locales/el_GR.json rename to packages/app-mobile/locales/el_GR.json diff --git a/ElectronClient/locales/en_GB.json b/packages/app-mobile/locales/en_GB.json similarity index 100% rename from ElectronClient/locales/en_GB.json rename to packages/app-mobile/locales/en_GB.json diff --git a/ElectronClient/locales/en_US.json b/packages/app-mobile/locales/en_US.json similarity index 100% rename from ElectronClient/locales/en_US.json rename to packages/app-mobile/locales/en_US.json diff --git a/ElectronClient/locales/eo.json b/packages/app-mobile/locales/eo.json similarity index 100% rename from ElectronClient/locales/eo.json rename to packages/app-mobile/locales/eo.json diff --git a/ElectronClient/locales/es_ES.json b/packages/app-mobile/locales/es_ES.json similarity index 100% rename from ElectronClient/locales/es_ES.json rename to packages/app-mobile/locales/es_ES.json diff --git a/ElectronClient/locales/et_EE.json b/packages/app-mobile/locales/et_EE.json similarity index 100% rename from ElectronClient/locales/et_EE.json rename to packages/app-mobile/locales/et_EE.json diff --git a/ElectronClient/locales/eu.json b/packages/app-mobile/locales/eu.json similarity index 100% rename from ElectronClient/locales/eu.json rename to packages/app-mobile/locales/eu.json diff --git a/ElectronClient/locales/fa.json b/packages/app-mobile/locales/fa.json similarity index 100% rename from ElectronClient/locales/fa.json rename to packages/app-mobile/locales/fa.json diff --git a/ElectronClient/locales/fr_FR.json b/packages/app-mobile/locales/fr_FR.json similarity index 100% rename from ElectronClient/locales/fr_FR.json rename to packages/app-mobile/locales/fr_FR.json diff --git a/ElectronClient/locales/gl_ES.json b/packages/app-mobile/locales/gl_ES.json similarity index 100% rename from ElectronClient/locales/gl_ES.json rename to packages/app-mobile/locales/gl_ES.json diff --git a/ElectronClient/locales/hr_HR.json b/packages/app-mobile/locales/hr_HR.json similarity index 100% rename from ElectronClient/locales/hr_HR.json rename to packages/app-mobile/locales/hr_HR.json diff --git a/ElectronClient/locales/id_ID.json b/packages/app-mobile/locales/id_ID.json similarity index 100% rename from ElectronClient/locales/id_ID.json rename to packages/app-mobile/locales/id_ID.json diff --git a/ElectronClient/locales/index.js b/packages/app-mobile/locales/index.js similarity index 100% rename from ElectronClient/locales/index.js rename to packages/app-mobile/locales/index.js diff --git a/ElectronClient/locales/it_IT.json b/packages/app-mobile/locales/it_IT.json similarity index 100% rename from ElectronClient/locales/it_IT.json rename to packages/app-mobile/locales/it_IT.json diff --git a/ElectronClient/locales/ja_JP.json b/packages/app-mobile/locales/ja_JP.json similarity index 100% rename from ElectronClient/locales/ja_JP.json rename to packages/app-mobile/locales/ja_JP.json diff --git a/ElectronClient/locales/ko.json b/packages/app-mobile/locales/ko.json similarity index 100% rename from ElectronClient/locales/ko.json rename to packages/app-mobile/locales/ko.json diff --git a/ElectronClient/locales/nb.json b/packages/app-mobile/locales/nb.json similarity index 100% rename from ElectronClient/locales/nb.json rename to packages/app-mobile/locales/nb.json diff --git a/ElectronClient/locales/nb_NO.json b/packages/app-mobile/locales/nb_NO.json similarity index 100% rename from ElectronClient/locales/nb_NO.json rename to packages/app-mobile/locales/nb_NO.json diff --git a/ElectronClient/locales/nl_BE.json b/packages/app-mobile/locales/nl_BE.json similarity index 100% rename from ElectronClient/locales/nl_BE.json rename to packages/app-mobile/locales/nl_BE.json diff --git a/ElectronClient/locales/nl_NL.json b/packages/app-mobile/locales/nl_NL.json similarity index 100% rename from ElectronClient/locales/nl_NL.json rename to packages/app-mobile/locales/nl_NL.json diff --git a/ElectronClient/locales/pl_PL.json b/packages/app-mobile/locales/pl_PL.json similarity index 100% rename from ElectronClient/locales/pl_PL.json rename to packages/app-mobile/locales/pl_PL.json diff --git a/ElectronClient/locales/pt_BR.json b/packages/app-mobile/locales/pt_BR.json similarity index 100% rename from ElectronClient/locales/pt_BR.json rename to packages/app-mobile/locales/pt_BR.json diff --git a/ElectronClient/locales/pt_PT.json b/packages/app-mobile/locales/pt_PT.json similarity index 100% rename from ElectronClient/locales/pt_PT.json rename to packages/app-mobile/locales/pt_PT.json diff --git a/ElectronClient/locales/ro.json b/packages/app-mobile/locales/ro.json similarity index 100% rename from ElectronClient/locales/ro.json rename to packages/app-mobile/locales/ro.json diff --git a/ElectronClient/locales/ru_RU.json b/packages/app-mobile/locales/ru_RU.json similarity index 100% rename from ElectronClient/locales/ru_RU.json rename to packages/app-mobile/locales/ru_RU.json diff --git a/ElectronClient/locales/sl_SI.json b/packages/app-mobile/locales/sl_SI.json similarity index 100% rename from ElectronClient/locales/sl_SI.json rename to packages/app-mobile/locales/sl_SI.json diff --git a/ElectronClient/locales/sr_RS.json b/packages/app-mobile/locales/sr_RS.json similarity index 100% rename from ElectronClient/locales/sr_RS.json rename to packages/app-mobile/locales/sr_RS.json diff --git a/ElectronClient/locales/sv.json b/packages/app-mobile/locales/sv.json similarity index 100% rename from ElectronClient/locales/sv.json rename to packages/app-mobile/locales/sv.json diff --git a/ElectronClient/locales/th_TH.json b/packages/app-mobile/locales/th_TH.json similarity index 100% rename from ElectronClient/locales/th_TH.json rename to packages/app-mobile/locales/th_TH.json diff --git a/ElectronClient/locales/tr_TR.json b/packages/app-mobile/locales/tr_TR.json similarity index 100% rename from ElectronClient/locales/tr_TR.json rename to packages/app-mobile/locales/tr_TR.json diff --git a/ElectronClient/locales/vi.json b/packages/app-mobile/locales/vi.json similarity index 100% rename from ElectronClient/locales/vi.json rename to packages/app-mobile/locales/vi.json diff --git a/ElectronClient/locales/zh_CN.json b/packages/app-mobile/locales/zh_CN.json similarity index 100% rename from ElectronClient/locales/zh_CN.json rename to packages/app-mobile/locales/zh_CN.json diff --git a/ElectronClient/locales/zh_TW.json b/packages/app-mobile/locales/zh_TW.json similarity index 100% rename from ElectronClient/locales/zh_TW.json rename to packages/app-mobile/locales/zh_TW.json diff --git a/packages/app-mobile/metro.config.js b/packages/app-mobile/metro.config.js new file mode 100644 index 0000000000..4636622fd5 --- /dev/null +++ b/packages/app-mobile/metro.config.js @@ -0,0 +1,64 @@ +/** + * Metro configuration for React Native + * https://github.com/facebook/react-native + * + * @format + */ + +// The technique below to get the symlinked packages to work with the Metro +// bundler comes from this comment: +// +// https://github.com/facebook/metro/issues/1#issuecomment-501143843 +// +// Perhaps also investigate this technique as it's specifically for Lerna: +// +// https://github.com/facebook/metro/issues/1#issuecomment-511228599 + +const path = require('path'); + +module.exports = { + transformer: { + getTransformOptions: async () => ({ + transform: { + experimentalImportSupport: false, + inlineRequires: false, + }, + }), + }, + resolver: { + // This configuration allows you to build React-Native modules and + // * test them without having to publish the module. Any exports provided + // * by your source should be added to the "target" parameter. Any import + // * not matched by a key in target will have to be located in the embedded + // * app's node_modules directory. + // + extraNodeModules: new Proxy( + // The first argument to the Proxy constructor is passed as + // * "target" to the "get" method below. + // * Put the names of the libraries included in your reusable + // * module as they would be imported when the module is actually used. + // + { + '@joplinapp/lib': path.resolve(__dirname, '../lib/'), + '@joplinapp/renderer': path.resolve(__dirname, '../renderer/'), + '@joplinapp/tools': path.resolve(__dirname, '../tools/'), + '@joplinapp/fork-htmlparser2': path.resolve(__dirname, '../fork-htmlparser2/'), + }, + { + get: (target, name) => { + if (target.hasOwnProperty(name)) { + return target[name]; + } + return path.join(process.cwd(), `node_modules/${name}`); + }, + } + ), + }, + projectRoot: path.resolve(__dirname), + watchFolders: [ + path.resolve(__dirname, '../lib'), + path.resolve(__dirname, '../renderer'), + path.resolve(__dirname, '../tools'), + path.resolve(__dirname, '../fork-htmlparser2'), + ], +}; diff --git a/ReactNativeClient/package-lock.json b/packages/app-mobile/package-lock.json similarity index 88% rename from ReactNativeClient/package-lock.json rename to packages/app-mobile/package-lock.json index 62499f4778..eb25b61389 100644 --- a/ReactNativeClient/package-lock.json +++ b/packages/app-mobile/package-lock.json @@ -1,6 +1,6 @@ { - "name": "Joplin", - "version": "0.8.0", + "name": "@joplinapp/app-mobile", + "version": "0.8.9", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -821,11 +821,6 @@ "to-fast-properties": "^2.0.0" } }, - "@braintree/sanitize-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-3.1.0.tgz", - "integrity": "sha512-GcIY79elgB+azP74j8vqkiXz8xLFfIzbQJdlwOPisgbKT00tviJQuEghOXSMVxJ00HoYJbGswr4kcllUc4xCcg==" - }, "@cnakazawa/watch": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", @@ -1131,6 +1126,28 @@ "@types/istanbul-lib-report": "*" } }, + "@types/node": { + "version": "14.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", + "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", + "dev": true + }, + "@types/react": { + "version": "16.9.55", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.55.tgz", + "integrity": "sha512-6KLe6lkILeRwyyy7yG9rULKJ0sXplUsl98MGoCfpteXf9sPWFWWMknDcsvubcpaTdBuxtsLF6HDUwdApZL/xIg==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, "@types/yargs": { "version": "15.0.8", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.8.tgz", @@ -1144,12 +1161,6 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -1325,12 +1336,6 @@ } } }, - "app-module-path": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", - "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=", - "dev": true - }, "append-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", @@ -1519,11 +1524,6 @@ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, - "async-mutex": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.1.4.tgz", - "integrity": "sha512-zVWTmAnxxHaeB2B1te84oecI8zTDJ/8G49aVBblRX6be0oq6pAybNcUSxwfgVOmOjSCvN4aYZAqwtyNI8e1YGw==" - }, "async-settle": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", @@ -1533,72 +1533,11 @@ "async-done": "^1.2.2" } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, - "aws-sdk": { - "version": "2.771.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.771.0.tgz", - "integrity": "sha512-fqNGusCwkdemx3yFqvQbU1+xq/PB2wGq7EQIrrTZx/zxfXUp+7+PnrHzXtViCRghN0tylLghBfWYD4VcVcqi7g==", - "requires": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - } - } - }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -1689,19 +1628,6 @@ } } }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } - }, "babel-generator": { "version": "6.26.1", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", @@ -2106,15 +2032,6 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -2262,21 +2179,6 @@ } } }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -2389,30 +2291,6 @@ "object-visit": "^1.0.0" } }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - } - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2426,15 +2304,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -2445,14 +2314,6 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "command-exists": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", @@ -2630,10 +2491,11 @@ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" }, - "css-b64-images": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/css-b64-images/-/css-b64-images-0.2.5.tgz", - "integrity": "sha1-QgBdgyBLK0pdk7axpWRBM7WSegI=" + "csstype": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.4.tgz", + "integrity": "sha512-xc8DUsCLmjvCfoD7LTGE0ou2MIWLx0K9RCZwSHMOdynqRsP4MtUcLeqh1HcQ2dInwDTqn+3CE0/FZh1et+p4jA==", + "dev": true }, "d": { "version": "1.0.1", @@ -2645,290 +2507,6 @@ "type": "^1.0.1" } }, - "d3": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", - "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", - "requires": { - "d3-array": "1", - "d3-axis": "1", - "d3-brush": "1", - "d3-chord": "1", - "d3-collection": "1", - "d3-color": "1", - "d3-contour": "1", - "d3-dispatch": "1", - "d3-drag": "1", - "d3-dsv": "1", - "d3-ease": "1", - "d3-fetch": "1", - "d3-force": "1", - "d3-format": "1", - "d3-geo": "1", - "d3-hierarchy": "1", - "d3-interpolate": "1", - "d3-path": "1", - "d3-polygon": "1", - "d3-quadtree": "1", - "d3-random": "1", - "d3-scale": "2", - "d3-scale-chromatic": "1", - "d3-selection": "1", - "d3-shape": "1", - "d3-time": "1", - "d3-time-format": "2", - "d3-timer": "1", - "d3-transition": "1", - "d3-voronoi": "1", - "d3-zoom": "1" - } - }, - "d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" - }, - "d3-axis": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", - "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" - }, - "d3-brush": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", - "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", - "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "d3-chord": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", - "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", - "requires": { - "d3-array": "1", - "d3-path": "1" - } - }, - "d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" - }, - "d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" - }, - "d3-contour": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", - "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", - "requires": { - "d3-array": "^1.1.1" - } - }, - "d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" - }, - "d3-drag": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", - "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", - "requires": { - "d3-dispatch": "1", - "d3-selection": "1" - } - }, - "d3-dsv": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", - "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", - "requires": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" - } - }, - "d3-ease": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", - "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" - }, - "d3-fetch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", - "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", - "requires": { - "d3-dsv": "1" - } - }, - "d3-force": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", - "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", - "requires": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" - } - }, - "d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" - }, - "d3-geo": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", - "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", - "requires": { - "d3-array": "1" - } - }, - "d3-hierarchy": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", - "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" - }, - "d3-interpolate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", - "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", - "requires": { - "d3-color": "1" - } - }, - "d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "d3-polygon": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", - "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==" - }, - "d3-quadtree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", - "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==" - }, - "d3-random": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", - "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==" - }, - "d3-scale": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", - "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", - "requires": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" - } - }, - "d3-scale-chromatic": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", - "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", - "requires": { - "d3-color": "1", - "d3-interpolate": "1" - } - }, - "d3-selection": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", - "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" - }, - "d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "requires": { - "d3-path": "1" - } - }, - "d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" - }, - "d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", - "requires": { - "d3-time": "1" - } - }, - "d3-timer": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", - "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" - }, - "d3-transition": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", - "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", - "requires": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" - } - }, - "d3-voronoi": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", - "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" - }, - "d3-zoom": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", - "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", - "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "dagre": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", - "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", - "requires": { - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, - "dagre-d3": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz", - "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==", - "requires": { - "d3": "^5.14", - "dagre": "^0.8.5", - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, "dayjs": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.9.3.tgz", @@ -3040,11 +2618,6 @@ } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, "denodeify": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", @@ -3074,49 +2647,6 @@ "repeating": "^2.0.0" } }, - "diacritics": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz", - "integrity": "sha1-PvqHMj67hj5mls67AILUj/PW96E=" - }, - "diff-match-patch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", - "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" - }, - "dom-serializer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.1.0.tgz", - "integrity": "sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", - "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==" - }, - "domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", - "requires": { - "domelementtype": "^2.0.1" - } - }, - "domutils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.2.tgz", - "integrity": "sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^3.3.0" - } - }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -3185,19 +2715,6 @@ "once": "^1.4.0" } }, - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" - }, - "entity-decode": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/entity-decode/-/entity-decode-2.0.2.tgz", - "integrity": "sha512-5CCY/3ci4MC1m2jlumNjWd7VBFt4VfFnmSqSNmVcXq4gxM3Vmarxtt+SvmBnzwLS669MWdVuXboNVj1qN2esVg==", - "requires": { - "he": "^1.1.1" - } - }, "envinfo": { "version": "7.7.3", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", @@ -3302,11 +2819,6 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -3333,9 +2845,9 @@ "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" }, "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" }, "exec-sh": { "version": "0.3.4", @@ -3708,112 +3220,6 @@ "path-exists": "^4.0.0" } }, - "find-yarn-workspace-root": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz", - "integrity": "sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==", - "dev": true, - "requires": { - "fs-extra": "^4.0.3", - "micromatch": "^3.1.4" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, "findup-sync": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", @@ -3940,11 +3346,6 @@ "readable-stream": "^2.3.6" } }, - "font-awesome-filetypes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/font-awesome-filetypes/-/font-awesome-filetypes-2.1.0.tgz", - "integrity": "sha512-U6hi14GRjfZFIWsTNyVmCBuHyPhiizWEKVbaQqHipKQv3rA1l1PNvmKulzpqxonFnQMToty5ZhfWbc/0IjLDGA==" - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3959,16 +3360,6 @@ "for-in": "^1.0.1" } }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -4163,14 +3554,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, - "graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "requires": { - "lodash": "^4.17.15" - } - }, "gulp": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", @@ -4399,11 +3782,6 @@ } } }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, "hermes-engine": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.5.1.tgz", @@ -4424,11 +3802,6 @@ } } }, - "highlight.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.2.1.tgz", - "integrity": "sha512-A+sckVPIb9zQTUydC9lpRX1qRFO/N0OKEh0NwIr65ckvWA/oMY8v9P3+kGRK3w2ULSh9E8v5MszXafodQ6039g==" - }, "hoist-non-react-statics": { "version": "2.5.5", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", @@ -4458,36 +3831,6 @@ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, - "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==" - }, - "html-minifier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", - "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", - "requires": { - "camel-case": "^3.0.0", - "clean-css": "^4.2.1", - "commander": "^2.19.0", - "he": "^1.2.0", - "param-case": "^2.1.1", - "relateurl": "^0.2.7", - "uglify-js": "^3.5.1" - } - }, - "htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" - } - }, "http-errors": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", @@ -4524,11 +3867,6 @@ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==" }, - "immer": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/immer/-/immer-7.0.9.tgz", - "integrity": "sha512-Vs/gxoM4DqNAYR7pugIxi0Xc8XAun/uy7AQu4fLLqaTBHxjOP9pJ266Q9MWA/ly4z6rAFZbvViOtihxUZ7O28A==" - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -4946,11 +4284,6 @@ "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.6.tgz", "integrity": "sha512-JNAkmPeB/GS2tCRqUzRPsTOHpGDah7xP18vGJfIjZC+W2sxEHbxgJxetIjIqhjQ3yYbYNEELkM/spKLtwoOSUQ==" }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4994,11 +4327,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, "json5": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", @@ -5026,19 +4354,6 @@ "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", "dev": true }, - "katex": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.12.0.tgz", - "integrity": "sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg==", - "requires": { - "commander": "^2.19.0" - } - }, - "khroma": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-1.1.0.tgz", - "integrity": "sha512-aTO+YX22tYOLEQJYFiatAj1lc5QZ+H5sHWFRBWNCiKwc5NWNUJZyeSeiHEPeURJ2a1GEVYcmyMUwGjjLe5ec5A==" - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -5052,15 +4367,6 @@ "graceful-fs": "^4.1.9" } }, - "klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11" - } - }, "last-run": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", @@ -5119,14 +4425,6 @@ "resolve": "^1.1.7" } }, - "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "requires": { - "uc.micro": "^1.0.1" - } - }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -5205,11 +4503,6 @@ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" }, - "lodash.repeat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-4.1.0.tgz", - "integrity": "sha1-/H3oEx2MisB+S0n3T/6CnR8r7EQ=" - }, "lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", @@ -5232,11 +4525,6 @@ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" - }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", @@ -5304,11 +4592,6 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" - }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -5357,106 +4640,6 @@ "object-visit": "^1.0.0" } }, - "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", - "requires": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - }, - "markdown-it-abbr": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-it-abbr/-/markdown-it-abbr-1.0.4.tgz", - "integrity": "sha1-1mtTZFIcuz3Yqlna37ovtoZcj9g=" - }, - "markdown-it-anchor": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", - "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==" - }, - "markdown-it-deflist": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/markdown-it-deflist/-/markdown-it-deflist-2.1.0.tgz", - "integrity": "sha512-3OuqoRUlSxJiuQYu0cWTLHNhhq2xtoSFqsZK8plANg91+RJQU1ziQ6lA2LzmFAEes18uPBsHZpcX6We5l76Nzg==" - }, - "markdown-it-emoji": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz", - "integrity": "sha1-m+4OmpkKljupbfaYDE/dsF37Tcw=" - }, - "markdown-it-expand-tabs": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/markdown-it-expand-tabs/-/markdown-it-expand-tabs-1.0.13.tgz", - "integrity": "sha512-ODpk98FWkGIq2vkwm2NOLt4G6TRgy3M9eTa9SFm06pUyOd0zjjYAwkhsjiCDU42pzKuz0ChiwBO0utuOj3LNOA==", - "requires": { - "lodash.repeat": "^4.0.0" - } - }, - "markdown-it-footnote": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/markdown-it-footnote/-/markdown-it-footnote-3.0.2.tgz", - "integrity": "sha512-JVW6fCmZWjvMdDQSbOT3nnOQtd9iAXmw7hTSh26+v42BnvXeVyGMDBm5b/EZocMed2MbCAHiTX632vY0FyGB8A==" - }, - "markdown-it-ins": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-ins/-/markdown-it-ins-3.0.0.tgz", - "integrity": "sha512-+vyAdBuMGwmT2yMlAFJSx2VR/0QZ1onQ/Mkkmr4l9tDFOh5sVoAgRbkgbuSsk+sxJ9vaMH/IQ323ydfvQrPO/Q==" - }, - "markdown-it-mark": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-mark/-/markdown-it-mark-3.0.0.tgz", - "integrity": "sha512-HqMWeKfMMOu4zBO0emmxsoMWmbf2cPKZY1wP6FsTbKmicFfp5y4L3KXAsNeO1rM6NTJVOrNlLKMPjWzriBGspw==" - }, - "markdown-it-multimd-table": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/markdown-it-multimd-table/-/markdown-it-multimd-table-4.0.3.tgz", - "integrity": "sha512-uVLriNj6doq1dGyJppQdwbaGcK6uSzbrk7osxRHjOmZBeShgMtPS6/d+pnIKkohOjaRyP9e5kwTAlAIe/lEaIQ==", - "requires": { - "markdown-it": "^11.0.0" - }, - "dependencies": { - "linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==", - "requires": { - "uc.micro": "^1.0.1" - } - }, - "markdown-it": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-11.0.1.tgz", - "integrity": "sha512-aU1TzmBKcWNNYvH9pjq6u92BML+Hz3h5S/QpfTFwiQF852pLT+9qHsrhM9JYipkOXZxGn+sGH8oyJE9FD9WezQ==", - "requires": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - } - } - }, - "markdown-it-sub": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-sub/-/markdown-it-sub-1.0.0.tgz", - "integrity": "sha1-N1/WAm6ufdywEkl/ZBEZXqHjr+g=" - }, - "markdown-it-sup": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-sup/-/markdown-it-sup-1.0.0.tgz", - "integrity": "sha1-y5yf+RpSVawI8/09YyhuFd8KH8M=" - }, - "markdown-it-toc-done-right": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/markdown-it-toc-done-right/-/markdown-it-toc-done-right-4.1.0.tgz", - "integrity": "sha512-UhD2Oj6cZV3ycYPoelt4hTkwKIK3zbPP1wjjdpCq7UGtWQOFalDFDv1s2zBYV6aR2gMs/X8kpJcOYsQmUbiXDw==" - }, "matchdep": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", @@ -5585,35 +4768,11 @@ "is-buffer": "~1.1.6" } }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, - "mermaid": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-8.8.2.tgz", - "integrity": "sha512-Ib9jl5TMwgMKv2+vdfKZ/SIUxKYc4GMauKeV2+3BD/bU47kGbc5zv5taCY5iZR+V4hdweHKE7YOl11VGcWBy/w==", - "requires": { - "@braintree/sanitize-url": "^3.1.0", - "babel-eslint": "^10.1.0", - "d3": "^5.7.0", - "dagre": "^0.8.4", - "dagre-d3": "^0.6.4", - "entity-decode": "^2.0.2", - "graphlib": "^2.1.7", - "he": "^1.2.0", - "khroma": "^1.1.0", - "minify": "^4.1.1", - "moment-mini": "^2.22.1", - "stylis": "^3.5.2" - } - }, "metro": { "version": "0.58.0", "resolved": "https://registry.npmjs.org/metro/-/metro-0.58.0.tgz", @@ -6982,35 +6141,6 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "minify": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/minify/-/minify-4.1.3.tgz", - "integrity": "sha512-ykuscavxivSmVpcCzsXmsVTukWYLUUtPhHj0w2ILvHDGqC+hsuTCihBn9+PJBd58JNvWTNg9132J9nrrI2anzA==", - "requires": { - "clean-css": "^4.1.6", - "css-b64-images": "~0.2.5", - "debug": "^4.1.0", - "html-minifier": "^4.0.0", - "terser": "^4.0.0", - "try-catch": "^2.0.0", - "try-to-catch": "^1.0.2" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -7051,16 +6181,6 @@ "minimist": "^1.2.5" } }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" - }, - "moment-mini": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.24.0.tgz", - "integrity": "sha512-9ARkWHBs+6YJIvrIp0Ik5tyTTtP9PoV0Ssu2Ocq5y9v8+NOOpWiRshAp8c4rZVWTOe+157on/5G+zj5pwIQFEQ==" - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -7083,11 +6203,6 @@ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", "optional": true }, - "nanoid": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", - "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==" - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -7122,22 +6237,6 @@ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", - "requires": { - "lodash.toarray": "^4.4.0" - } - }, "node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", @@ -7493,14 +6592,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "requires": { - "no-case": "^2.2.0" - } - }, "parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", @@ -7542,102 +6633,6 @@ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, - "patch-package": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.2.2.tgz", - "integrity": "sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg==", - "dev": true, - "requires": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^1.2.1", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -7858,35 +6853,11 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, - "re-reselect": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/re-reselect/-/re-reselect-4.0.0.tgz", - "integrity": "sha512-wuygyq8TXUlSdVXv2kigXxQNOgdb9m7LbIjwfTNGSpaY1riLd5e+VeQjlQMyUtrk0oiyhi1AqIVynworl3qxHA==" - }, "react": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", @@ -7897,11 +6868,6 @@ "prop-types": "^15.6.2" } }, - "react-async": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/react-async/-/react-async-10.0.1.tgz", - "integrity": "sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA==" - }, "react-devtools-core": { "version": "4.8.2", "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.8.2.tgz", @@ -8658,11 +7624,6 @@ } } }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" - }, "remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", @@ -8734,16 +7695,6 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "reselect": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz", - "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==" - }, "resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", @@ -8847,11 +7798,6 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, - "rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" - }, "rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", @@ -9151,21 +8097,6 @@ "plist": "^3.0.1" } }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } - } - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -9465,21 +8396,11 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, "string-natural-compare": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-2.0.3.tgz", "integrity": "sha512-4Kcl12rNjc+6EKhY8QyDVuQTAlMWwRiNbsxnVwBUKFr7dYPQuXVrtNU4sEkjF9LHY0AY6uVbB3ktbkIH4LC+BQ==" }, - "string-padding": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-padding/-/string-padding-1.0.2.tgz", - "integrity": "sha1-OqrYVbPpc1xeQS3+chmMz5nH9I4=" - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -9551,11 +8472,6 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, - "stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, "sudo-prompt": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", @@ -9607,23 +8523,6 @@ } } }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -9734,16 +8633,6 @@ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, - "try-catch": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/try-catch/-/try-catch-2.0.1.tgz", - "integrity": "sha512-LsOrmObN/2WdM+y2xG+t16vhYrQsnV8wftXIcIOWZhQcBJvKGYuamJGwnU98A7Jxs2oZNkJztXlphEOoA0DWqg==" - }, - "try-to-catch": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-1.1.1.tgz", - "integrity": "sha512-ikUlS+/BcImLhNYyIgZcEmq4byc31QpC+46/6Jm5ECWkVFhf8SM2Fp/0pMVXPX6vk45SMCwrP4Taxucne8I0VA==" - }, "type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -9755,21 +8644,17 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "typescript": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", + "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", + "dev": true + }, "ua-parser-js": { "version": "0.7.22", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==" }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "uglify-js": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.2.tgz", - "integrity": "sha512-G440NU6fewtnQftSgqRV1r2A5ChKbU1gqFCJ7I8S7MPpY/eZZfLGefaY6gUZYiWebMaO+txgiQ1ZyLDuNWJulg==" - }, "ultron": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", @@ -9863,11 +8748,6 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, - "unorm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", - "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==" - }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -9915,41 +8795,11 @@ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" - }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -9963,14 +8813,6 @@ "object-assign": "^4.1.1" } }, - "uslug": { - "version": "git+https://github.com/laurent22/uslug.git#ba2834d79beb0435318709958b2f5e817d96674d", - "from": "git+https://github.com/laurent22/uslug.git#emoji-support", - "requires": { - "node-emoji": "^1.10.0", - "unorm": ">= 1.0.0" - } - }, "utf8": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", @@ -10127,11 +8969,6 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -10200,22 +9037,6 @@ "uuid": "^3.3.2" } }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "dependencies": { - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - } - } - }, "xmlbuilder": { "version": "9.0.7", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", diff --git a/ReactNativeClient/package.json b/packages/app-mobile/package.json similarity index 56% rename from ReactNativeClient/package.json rename to packages/app-mobile/package.json index 9e09ae36ba..ae0b01866f 100644 --- a/ReactNativeClient/package.json +++ b/packages/app-mobile/package.json @@ -1,60 +1,34 @@ { - "name": "Joplin", + "name": "@joplinapp/app-mobile", "description": "Joplin for Mobile", "license": "MIT", - "version": "0.8.0", + "version": "0.8.9", "private": true, "scripts": { "start": "react-native start --reset-cache", "build": "gulp build", - "postinstall": "patch-package --patch-dir ../patches/shared && jetify && npm run build" + "tsc": "node node_modules/typescript/bin/tsc --project tsconfig.json", + "watch": "node node_modules/typescript/bin/tsc --watch --project tsconfig.json", + "preinstall": "node tools/unlinkReact.js", + "clean": "node tools/clean.js", + "postinstall": "jetify && npm run build" }, "dependencies": { + "@joplinapp/lib": "^1.0.9", + "@joplinapp/renderer": "^1.0.17", + "@joplinapp/tools": "^1.0.9", "@react-native-community/clipboard": "^1.5.0", "@react-native-community/datetimepicker": "^3.0.3", "@react-native-community/geolocation": "^2.0.2", "@react-native-community/push-notification-ios": "^1.6.0", "@react-native-community/slider": "^3.0.3", - "async-mutex": "^0.1.3", - "aws-sdk": "^2.588.0", - "base-64": "^0.1.0", "buffer": "^5.0.8", - "color": "^3.1.2", - "diacritics": "^1.3.0", - "diff-match-patch": "^1.0.4", - "events": "^1.1.1", - "font-awesome-filetypes": "^2.1.0", - "form-data": "^2.1.4", - "highlight.js": "^10.2.1", - "html-entities": "^1.2.1", - "htmlparser2": "^4.1.0", - "immer": "^7.0.9", + "events": "^3.2.0", "jsc-android": "241213.1.0", - "json-stringify-safe": "^5.0.1", - "katex": "^0.12.0", - "markdown-it": "^10.0.0", - "markdown-it-abbr": "^1.0.4", - "markdown-it-anchor": "^5.2.5", - "markdown-it-deflist": "^2.0.3", - "markdown-it-emoji": "^1.4.0", - "markdown-it-expand-tabs": "^1.0.13", - "markdown-it-footnote": "^3.0.2", - "markdown-it-ins": "^3.0.0", - "markdown-it-mark": "^3.0.0", - "markdown-it-multimd-table": "^4.0.1", - "markdown-it-sub": "^1.0.0", - "markdown-it-sup": "^1.0.0", - "markdown-it-toc-done-right": "^4.1.0", "md5": "^2.2.1", - "mermaid": "^8.8.1", - "moment": "^2.24.0", - "nanoid": "^3.1.12", "prop-types": "^15.6.0", "punycode": "^2.1.1", - "query-string": "4.3.4", - "re-reselect": "^4.0.0", "react": "16.13.1", - "react-async": "^10.0.0", "react-native": "0.63.3", "react-native-action-button": "^2.8.5", "react-native-alarm-notification": "^1.7.1", @@ -79,29 +53,22 @@ "react-native-webview": "^10.9.2", "react-redux": "5.0.7", "redux": "4.0.0", - "reselect": "^4.0.0", "rn-fetch-blob": "^0.12.0", "stream": "0.0.2", "string-natural-compare": "^2.0.2", - "string-padding": "^1.0.2", "timers": "^0.1.1", - "url": "^0.11.0", - "url-parse": "^1.4.7", - "uslug": "git+https://github.com/laurent22/uslug.git#emoji-support", - "uuid": "^3.0.1", - "valid-url": "^1.0.9", - "word-wrap": "^1.2.3", - "xml2js": "^0.4.19" + "valid-url": "^1.0.9" }, "devDependencies": { "@babel/core": "^7.11.6", "@babel/runtime": "^7.11.2", - "app-module-path": "^2.2.0", + "@types/node": "^14.14.6", + "@types/react": "^16.9.55", "execa": "^4.0.0", "fs-extra": "^8.1.0", "gulp": "^4.0.2", "jetifier": "^1.6.5", "metro-react-native-babel-preset": "^0.63.0", - "patch-package": "^6.2.2" + "typescript": "^4.0.5" } } diff --git a/ReactNativeClient/pluginAssets/highlight.js/atom-one-dark-reasonable.css.base64.js b/packages/app-mobile/pluginAssets/highlight.js/atom-one-dark-reasonable.css.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/highlight.js/atom-one-dark-reasonable.css.base64.js rename to packages/app-mobile/pluginAssets/highlight.js/atom-one-dark-reasonable.css.base64.js diff --git a/ReactNativeClient/pluginAssets/highlight.js/atom-one-light.css.base64.js b/packages/app-mobile/pluginAssets/highlight.js/atom-one-light.css.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/highlight.js/atom-one-light.css.base64.js rename to packages/app-mobile/pluginAssets/highlight.js/atom-one-light.css.base64.js diff --git a/ReactNativeClient/pluginAssets/index.js b/packages/app-mobile/pluginAssets/index.js similarity index 98% rename from ReactNativeClient/pluginAssets/index.js rename to packages/app-mobile/pluginAssets/index.js index 48dc983602..5bcdeb6c52 100644 --- a/ReactNativeClient/pluginAssets/index.js +++ b/packages/app-mobile/pluginAssets/index.js @@ -1,5 +1,5 @@ module.exports = { -hash:"0f24ccb2b0c004ee83a88554e1d7bf62", files: { +hash:"2a71f1576e9e795ccb1f7f66bdc309a2", files: { 'highlight.js/atom-one-dark-reasonable.css': { data: require('./highlight.js/atom-one-dark-reasonable.css.base64.js'), mime: 'text/css', encoding: 'base64' }, 'highlight.js/atom-one-light.css': { data: require('./highlight.js/atom-one-light.css.base64.js'), mime: 'text/css', encoding: 'base64' }, 'katex/fonts/KaTeX_AMS-Regular.woff2': { data: require('./katex/fonts/KaTeX_AMS-Regular.woff2.base64.js'), mime: 'application/octet-stream', encoding: 'base64' }, diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_AMS-Regular.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_AMS-Regular.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_AMS-Regular.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_AMS-Regular.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Caligraphic-Bold.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Caligraphic-Bold.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Caligraphic-Bold.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Caligraphic-Bold.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Caligraphic-Regular.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Caligraphic-Regular.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Caligraphic-Regular.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Caligraphic-Regular.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Fraktur-Bold.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Fraktur-Bold.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Fraktur-Bold.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Fraktur-Bold.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Fraktur-Regular.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Fraktur-Regular.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Fraktur-Regular.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Fraktur-Regular.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Main-Bold.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Main-Bold.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Main-Bold.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Main-Bold.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Main-BoldItalic.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Main-BoldItalic.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Main-BoldItalic.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Main-BoldItalic.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Main-Italic.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Main-Italic.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Main-Italic.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Main-Italic.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Main-Regular.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Main-Regular.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Main-Regular.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Main-Regular.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Math-BoldItalic.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Math-BoldItalic.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Math-BoldItalic.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Math-BoldItalic.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Math-Italic.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Math-Italic.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Math-Italic.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Math-Italic.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_SansSerif-Bold.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_SansSerif-Bold.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_SansSerif-Bold.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_SansSerif-Bold.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_SansSerif-Italic.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_SansSerif-Italic.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_SansSerif-Italic.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_SansSerif-Italic.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_SansSerif-Regular.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_SansSerif-Regular.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_SansSerif-Regular.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_SansSerif-Regular.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Script-Regular.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Script-Regular.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Script-Regular.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Script-Regular.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Size1-Regular.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Size1-Regular.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Size1-Regular.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Size1-Regular.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Size2-Regular.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Size2-Regular.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Size2-Regular.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Size2-Regular.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Size3-Regular.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Size3-Regular.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Size3-Regular.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Size3-Regular.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Size4-Regular.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Size4-Regular.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Size4-Regular.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Size4-Regular.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Typewriter-Regular.woff2.base64.js b/packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Typewriter-Regular.woff2.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/fonts/KaTeX_Typewriter-Regular.woff2.base64.js rename to packages/app-mobile/pluginAssets/katex/fonts/KaTeX_Typewriter-Regular.woff2.base64.js diff --git a/ReactNativeClient/pluginAssets/katex/katex.css.base64.js b/packages/app-mobile/pluginAssets/katex/katex.css.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/katex/katex.css.base64.js rename to packages/app-mobile/pluginAssets/katex/katex.css.base64.js diff --git a/ReactNativeClient/pluginAssets/mermaid/mermaid.min.js.base64.js b/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js similarity index 100% rename from ReactNativeClient/pluginAssets/mermaid/mermaid.min.js.base64.js rename to packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js diff --git a/packages/app-mobile/pluginAssets/mermaid/mermaid_render.js.base64.js b/packages/app-mobile/pluginAssets/mermaid/mermaid_render.js.base64.js new file mode 100644 index 0000000000..d5e80dcddd --- /dev/null +++ b/packages/app-mobile/pluginAssets/mermaid/mermaid_render.js.base64.js @@ -0,0 +1 @@ +module.exports = `LyogZ2xvYmFsIG1lcm1haWQgKi8KCmZ1bmN0aW9uIG1lcm1haWRSZWFkeSgpIHsKCS8vIFRoZSBNZXJtYWlkIGluaXRpYWxpemF0aW9uIGNvZGUgcmVuZGVycyB0aGUgTWVybWFpZCBjb2RlIHdpdGhpbiBhbnkgZWxlbWVudCB3aXRoIGNsYXNzICJtZXJtYWlkIiBvcgoJLy8gSUQgIm1lcm1haWQiLiBIb3dldmVyIGluIHNvbWUgY2FzZXMgc29tZSBlbGVtZW50cyBtaWdodCBoYXZlIHRoaXMgSUQgYnV0IG5vdCBiZSBNZXJtYWlkIGNvZGUuCgkvLyBGb3IgZXhhbXBsZSwgTWFya2Rvd24gY29kZSBsaWtlIHRoaXM6CgkvLwoJLy8gICAgICMgTWVybWFpZAoJLy8KCS8vIFdpbGwgZ2VuZXJhdGUgdGhpcyBIVE1MOgoJLy8KCS8vICAgICA8aDEgaWQ9Im1lcm1haWQiPk1lcm1haWQ8L2gxPgoJLy8KCS8vIEFuZCB0aGF0J3MgZ29pbmcgdG8gbWFrZSB0aGUgbGliIHNldCB0aGUgYG1lcm1haWRgIG9iamVjdCB0byB0aGUgSDEgZWxlbWVudC4KCS8vIFNvIGJlbG93LCB3ZSBkb3VibGUtY2hlY2sgdGhhdCB3aGF0IHdlIGhhdmUgcmVhbGx5IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBsaWJyYXJ5LgoJcmV0dXJuIHR5cGVvZiBtZXJtYWlkICE9PSAndW5kZWZpbmVkJyAmJiBtZXJtYWlkICE9PSBudWxsICYmIHR5cGVvZiBtZXJtYWlkID09PSAnb2JqZWN0JyAmJiAhIW1lcm1haWQuaW5pdDsKfQoKZnVuY3Rpb24gbWVybWFpZEluaXQoKSB7CgkvLyBNZXJtYWlkJ3Mgd29uZGVyZnVsIEFQSSBoYXMgdHdvIGluaXQgbWV0aG9kczogaW5pdCgpIGFuZCBpbml0aWFsaXplKCkuCgkvLyBpbml0KCkgaXMgZGVwcmVjdGF0ZWQgYnV0IHdvcmtzLCBhbmQgaW5pdGlhbGl6ZSgpIGlzIHJlY29tbWVuZGVkIGJ1dCBkb2Vzbid0CgkvLyB3b3JrLCBzbyBsZXQncyB1c2UgaW5pdCgpIGZvciBub3cuCglpZiAobWVybWFpZFJlYWR5KCkpIHsKCQl0cnkgewoJCQltZXJtYWlkLmluaXQoKTsKCQl9IGNhdGNoIChlcnJvcikgewoJCQljb25zb2xlLmVycm9yKCdNZXJtYWlkIGVycm9yJywgZXJyb3IpOwoJCX0KCgkJLy8gUmVzZXR0aW5nIGVsZW1lbnRzIHNpemUgLSBzZWUgbWVybWFpZC50cwoJCWNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbWVybWFpZCcpOwoJCWZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykgewoJCQllbGVtZW50LnN0eWxlLndpZHRoID0gJzEwMCUnOwoJCX0KCX0KfQoKZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignam9wbGluLW5vdGVEaWRVcGRhdGUnLCAoKSA9PiB7CgltZXJtYWlkSW5pdCgpOwp9KTsKCmNvbnN0IGluaXRJSURfID0gc2V0SW50ZXJ2YWwoKCkgPT4gewoJY29uc3QgaXNSZWFkeSA9IG1lcm1haWRSZWFkeSgpOwoJaWYgKGlzUmVhZHkpIHsKCQljbGVhckludGVydmFsKGluaXRJSURfKTsKCQltZXJtYWlkSW5pdCgpOwoJfQp9LCAxMDApOwo=`; \ No newline at end of file diff --git a/ReactNativeClient/root.js b/packages/app-mobile/root.js similarity index 81% rename from ReactNativeClient/root.js rename to packages/app-mobile/root.js index eb2e5953ab..7757b61f8e 100644 --- a/ReactNativeClient/root.js +++ b/packages/app-mobile/root.js @@ -3,80 +3,83 @@ import PluginAssetsLoader from './PluginAssetsLoader'; const React = require('react'); const { AppState, Keyboard, NativeModules, BackHandler, Animated, View, StatusBar } = require('react-native'); -const SafeAreaView = require('lib/components/SafeAreaView'); +const shim = require('@joplinapp/lib/shim').default; +shim.setReact(React); + +const SafeAreaView = require('./components/SafeAreaView'); const { connect, Provider } = require('react-redux'); -const { BackButtonService } = require('lib/services/back-button.js'); -const NavService = require('lib/services/NavService.js'); -const AlarmService = require('lib/services/AlarmService.js').default; -const AlarmServiceDriver = require('lib/services/AlarmServiceDriver').default; -const Alarm = require('lib/models/Alarm').default; +const { BackButtonService } = require('./services/back-button.js'); +const NavService = require('@joplinapp/lib/services/NavService.js'); +const AlarmService = require('@joplinapp/lib/services/AlarmService.js').default; +const AlarmServiceDriver = require('./services/AlarmServiceDriver').default; +const Alarm = require('@joplinapp/lib/models/Alarm').default; const { createStore, applyMiddleware } = require('redux'); -const reduxSharedMiddleware = require('lib/components/shared/reduxSharedMiddleware'); -const { shimInit } = require('lib/shim-init-react.js'); -const { time } = require('lib/time-utils.js'); -const { AppNav } = require('lib/components/app-nav.js'); -const Logger = require('lib/Logger').default; -const Note = require('lib/models/Note.js'); -const Folder = require('lib/models/Folder.js'); -const BaseSyncTarget = require('lib/BaseSyncTarget.js'); -const { FoldersScreenUtils } = require('lib/folders-screen-utils.js'); -const Resource = require('lib/models/Resource.js'); -const Tag = require('lib/models/Tag.js'); -const NoteTag = require('lib/models/NoteTag.js'); -const BaseItem = require('lib/models/BaseItem.js'); -const MasterKey = require('lib/models/MasterKey.js'); -const Revision = require('lib/models/Revision.js'); -const BaseModel = require('lib/BaseModel.js'); -const BaseService = require('lib/services/BaseService').default; -const ResourceService = require('lib/services/ResourceService'); -const RevisionService = require('lib/services/RevisionService'); -const KvStore = require('lib/services/KvStore'); -const { JoplinDatabase } = require('lib/joplin-database.js'); -const { Database } = require('lib/database.js'); -const { NotesScreen } = require('lib/components/screens/notes.js'); -const { TagsScreen } = require('lib/components/screens/tags.js'); -const NoteScreen = require('lib/components/screens/Note').default; -const { ConfigScreen } = require('lib/components/screens/config.js'); -const { FolderScreen } = require('lib/components/screens/folder.js'); -const { LogScreen } = require('lib/components/screens/log.js'); -const { StatusScreen } = require('lib/components/screens/status.js'); -const { SearchScreen } = require('lib/components/screens/search.js'); -const { OneDriveLoginScreen } = require('lib/components/screens/onedrive-login.js'); -const { EncryptionConfigScreen } = require('lib/components/screens/encryption-config.js'); -const { DropboxLoginScreen } = require('lib/components/screens/dropbox-login.js'); -const UpgradeSyncTargetScreen = require('lib/components/screens/UpgradeSyncTargetScreen').default; -const Setting = require('lib/models/Setting').default; +const reduxSharedMiddleware = require('@joplinapp/lib/components/shared/reduxSharedMiddleware'); +const { shimInit } = require('./utils/shim-init-react.js'); +const time = require('@joplinapp/lib/time').default; +const { AppNav } = require('./components/app-nav.js'); +const Logger = require('@joplinapp/lib/Logger').default; +const Note = require('@joplinapp/lib/models/Note.js'); +const Folder = require('@joplinapp/lib/models/Folder.js'); +const BaseSyncTarget = require('@joplinapp/lib/BaseSyncTarget.js'); +const { FoldersScreenUtils } = require('@joplinapp/lib/folders-screen-utils.js'); +const Resource = require('@joplinapp/lib/models/Resource.js'); +const Tag = require('@joplinapp/lib/models/Tag.js'); +const NoteTag = require('@joplinapp/lib/models/NoteTag.js'); +const BaseItem = require('@joplinapp/lib/models/BaseItem.js'); +const MasterKey = require('@joplinapp/lib/models/MasterKey.js'); +const Revision = require('@joplinapp/lib/models/Revision.js'); +const BaseModel = require('@joplinapp/lib/BaseModel').default; +const BaseService = require('@joplinapp/lib/services/BaseService').default; +const ResourceService = require('@joplinapp/lib/services/ResourceService'); +const RevisionService = require('@joplinapp/lib/services/RevisionService'); +const KvStore = require('@joplinapp/lib/services/KvStore'); +const { JoplinDatabase } = require('@joplinapp/lib/joplin-database.js'); +const { Database } = require('@joplinapp/lib/database.js'); +const { NotesScreen } = require('./components/screens/notes.js'); +const { TagsScreen } = require('./components/screens/tags.js'); +const NoteScreen = require('./components/screens/Note').default; +const { ConfigScreen } = require('./components/screens/config.js'); +const { FolderScreen } = require('./components/screens/folder.js'); +const { LogScreen } = require('./components/screens/log.js'); +const { StatusScreen } = require('./components/screens/status.js'); +const { SearchScreen } = require('./components/screens/search.js'); +const { OneDriveLoginScreen } = require('./components/screens/onedrive-login.js'); +const { EncryptionConfigScreen } = require('./components/screens/encryption-config.js'); +const { DropboxLoginScreen } = require('./components/screens/dropbox-login.js'); +const UpgradeSyncTargetScreen = require('./components/screens/UpgradeSyncTargetScreen').default; +const Setting = require('@joplinapp/lib/models/Setting').default; const { MenuContext } = require('react-native-popup-menu'); -const { SideMenu } = require('lib/components/side-menu.js'); -const { SideMenuContent } = require('lib/components/side-menu-content.js'); -const { SideMenuContentNote } = require('lib/components/side-menu-content-note.js'); -const { DatabaseDriverReactNative } = require('lib/database-driver-react-native'); -const { reg } = require('lib/registry.js'); -const { setLocale, closestSupportedLocale, defaultLocale } = require('lib/locale'); +const { SideMenu } = require('./components/side-menu.js'); +const { SideMenuContent } = require('./components/side-menu-content.js'); +const { SideMenuContentNote } = require('./components/side-menu-content-note.js'); +const { DatabaseDriverReactNative } = require('./utils/database-driver-react-native'); +const { reg } = require('@joplinapp/lib/registry.js'); +const { setLocale, closestSupportedLocale, defaultLocale } = require('@joplinapp/lib/locale'); const RNFetchBlob = require('rn-fetch-blob').default; -const PoorManIntervals = require('lib/PoorManIntervals').default; -const reducer = require('lib/reducer').default; -const { defaultState } = require('lib/reducer'); -const { FileApiDriverLocal } = require('lib/file-api-driver-local.js'); +const PoorManIntervals = require('@joplinapp/lib/PoorManIntervals').default; +const reducer = require('@joplinapp/lib/reducer').default; +const { defaultState } = require('@joplinapp/lib/reducer'); +const { FileApiDriverLocal } = require('@joplinapp/lib/file-api-driver-local.js'); const DropdownAlert = require('react-native-dropdownalert').default; -const ShareExtension = require('lib/ShareExtension.js').default; -const handleShared = require('lib/shareHandler').default; -const ResourceFetcher = require('lib/services/ResourceFetcher'); -const SearchEngine = require('lib/services/searchengine/SearchEngine'); -const WelcomeUtils = require('lib/WelcomeUtils'); -const { themeStyle } = require('lib/components/global-style.js'); -const uuid = require('lib/uuid').default; +const ShareExtension = require('./utils/ShareExtension.js').default; +const handleShared = require('./utils/shareHandler').default; +const ResourceFetcher = require('@joplinapp/lib/services/ResourceFetcher'); +const SearchEngine = require('@joplinapp/lib/services/searchengine/SearchEngine'); +const WelcomeUtils = require('@joplinapp/lib/WelcomeUtils'); +const { themeStyle } = require('./components/global-style.js'); +const uuid = require('@joplinapp/lib/uuid').default; -const { loadKeychainServiceAndSettings } = require('lib/services/SettingUtils'); -const KeychainServiceDriverMobile = require('lib/services/keychain/KeychainServiceDriver.mobile').default; +const { loadKeychainServiceAndSettings } = require('@joplinapp/lib/services/SettingUtils'); +const KeychainServiceDriverMobile = require('@joplinapp/lib/services/keychain/KeychainServiceDriver.mobile').default; -const SyncTargetRegistry = require('lib/SyncTargetRegistry.js'); -const SyncTargetOneDrive = require('lib/SyncTargetOneDrive.js'); -const SyncTargetFilesystem = require('lib/SyncTargetFilesystem.js'); -const SyncTargetNextcloud = require('lib/SyncTargetNextcloud.js'); -const SyncTargetWebDAV = require('lib/SyncTargetWebDAV.js'); -const SyncTargetDropbox = require('lib/SyncTargetDropbox.js'); -const SyncTargetAmazonS3 = require('lib/SyncTargetAmazonS3.js'); +const SyncTargetRegistry = require('@joplinapp/lib/SyncTargetRegistry.js'); +const SyncTargetOneDrive = require('@joplinapp/lib/SyncTargetOneDrive.js'); +const SyncTargetFilesystem = require('@joplinapp/lib/SyncTargetFilesystem.js'); +const SyncTargetNextcloud = require('@joplinapp/lib/SyncTargetNextcloud.js'); +const SyncTargetWebDAV = require('@joplinapp/lib/SyncTargetWebDAV.js'); +const SyncTargetDropbox = require('@joplinapp/lib/SyncTargetDropbox.js'); +const SyncTargetAmazonS3 = require('@joplinapp/lib/SyncTargetAmazonS3.js'); SyncTargetRegistry.addClass(SyncTargetOneDrive); SyncTargetRegistry.addClass(SyncTargetNextcloud); @@ -85,10 +88,10 @@ SyncTargetRegistry.addClass(SyncTargetDropbox); SyncTargetRegistry.addClass(SyncTargetFilesystem); SyncTargetRegistry.addClass(SyncTargetAmazonS3); -const FsDriverRN = require('lib/fs-driver-rn.js').FsDriverRN; -const DecryptionWorker = require('lib/services/DecryptionWorker'); -const EncryptionService = require('lib/services/EncryptionService'); -const MigrationService = require('lib/services/MigrationService'); +const FsDriverRN = require('./utils/fs-driver-rn.js').FsDriverRN; +const DecryptionWorker = require('@joplinapp/lib/services/DecryptionWorker'); +const EncryptionService = require('@joplinapp/lib/services/EncryptionService'); +const MigrationService = require('@joplinapp/lib/services/MigrationService'); let storeDispatch = function() {}; @@ -400,7 +403,7 @@ async function initialize(dispatch) { reg.setShowErrorMessageBoxHandler((message) => { alert(message); }); BaseService.logger_ = mainLogger; - // require('lib/ntpDate').setLogger(reg.logger()); + // require('@joplinapp/lib/ntpDate').setLogger(reg.logger()); reg.logger().info('===================================='); reg.logger().info(`Starting application ${Setting.value('appId')} (${Setting.value('env')})`); diff --git a/ReactNativeClient/lib/services/AlarmServiceDriver.android.ts b/packages/app-mobile/services/AlarmServiceDriver.android.ts similarity index 95% rename from ReactNativeClient/lib/services/AlarmServiceDriver.android.ts rename to packages/app-mobile/services/AlarmServiceDriver.android.ts index 504f0e4d93..10417a55c2 100644 --- a/ReactNativeClient/lib/services/AlarmServiceDriver.android.ts +++ b/packages/app-mobile/services/AlarmServiceDriver.android.ts @@ -1,5 +1,5 @@ -import Logger from 'lib/Logger'; -import { Notification } from 'lib/models/Alarm'; +import Logger from '@joplinapp/lib/Logger'; +import { Notification } from '@joplinapp/lib/models/Alarm'; const ReactNativeAN = require('react-native-alarm-notification').default; diff --git a/ReactNativeClient/lib/services/AlarmServiceDriver.ios.ts b/packages/app-mobile/services/AlarmServiceDriver.ios.ts similarity index 95% rename from ReactNativeClient/lib/services/AlarmServiceDriver.ios.ts rename to packages/app-mobile/services/AlarmServiceDriver.ios.ts index da459ab8e0..d221c61f5d 100644 --- a/ReactNativeClient/lib/services/AlarmServiceDriver.ios.ts +++ b/packages/app-mobile/services/AlarmServiceDriver.ios.ts @@ -1,5 +1,5 @@ -import { Notification } from 'lib/models/Alarm'; -import Logger from 'lib/Logger'; +import { Notification } from '@joplinapp/lib/models/Alarm'; +import Logger from '@joplinapp/lib/Logger'; const PushNotificationIOS = require('@react-native-community/push-notification-ios').default; export default class AlarmServiceDriver { diff --git a/ReactNativeClient/lib/services/back-button.js b/packages/app-mobile/services/back-button.js similarity index 100% rename from ReactNativeClient/lib/services/back-button.js rename to packages/app-mobile/services/back-button.js diff --git a/ReactNativeClient/setUpQuickActions.ts b/packages/app-mobile/setUpQuickActions.ts similarity index 92% rename from ReactNativeClient/setUpQuickActions.ts rename to packages/app-mobile/setUpQuickActions.ts index 4a99fa392a..6e4de1b96c 100644 --- a/ReactNativeClient/setUpQuickActions.ts +++ b/packages/app-mobile/setUpQuickActions.ts @@ -2,10 +2,10 @@ // to disable buggy type-checking, maybe because this // class is undocumented. import * as QuickActions from 'react-native-quick-actions'; -import { _ } from 'lib/locale'; +import { _ } from '@joplinapp/lib/locale'; const { DeviceEventEmitter } = require('react-native'); -const Note = require('lib/models/Note.js'); -const { reg } = require('lib/registry.js'); +const Note = require('@joplinapp/lib/models/Note.js'); +const { reg } = require('@joplinapp/lib/registry.js'); type TData = { type: string diff --git a/ReactNativeClient/tools/buildReactNativeInjectedJs.js b/packages/app-mobile/tools/buildReactNativeInjectedJs.js similarity index 88% rename from ReactNativeClient/tools/buildReactNativeInjectedJs.js rename to packages/app-mobile/tools/buildReactNativeInjectedJs.js index ab84947b55..df3100f839 100644 --- a/ReactNativeClient/tools/buildReactNativeInjectedJs.js +++ b/packages/app-mobile/tools/buildReactNativeInjectedJs.js @@ -17,7 +17,7 @@ async function copyJs(name, filePath) { async function main() { await fs.mkdirp(outputDir); - await copyJs('webviewLib', `${rnDir}/lib/renderers/webviewLib.js`); + await copyJs('webviewLib', `${rnDir}/node_modules/@joplinapp/lib/renderers/webviewLib.js`); } module.exports = main; diff --git a/packages/app-mobile/tools/clean.js b/packages/app-mobile/tools/clean.js new file mode 100644 index 0000000000..155f1bf578 --- /dev/null +++ b/packages/app-mobile/tools/clean.js @@ -0,0 +1,16 @@ +// We don't make that a gulp task because we might want to run it before +// gulp has been installed. + +const fs = require('fs-extra'); + +async function main() { + const mobileDir = `${__dirname}/..`; + await fs.remove(`${mobileDir}/android/.gradle`); + await fs.remove(`${mobileDir}/android/app/build`); + console.info('To clean the Android build, in some rare cases you might also need to clear the cache in ~/.android and ~/.gradle'); +} + +main().catch((error) => { + console.error('Could not clean mobile app build', error); + process.exit(1); +}); diff --git a/ReactNativeClient/tools/encodeAssets.js b/packages/app-mobile/tools/encodeAssets.js similarity index 93% rename from ReactNativeClient/tools/encodeAssets.js rename to packages/app-mobile/tools/encodeAssets.js index 57711fa05c..da2294217d 100644 --- a/ReactNativeClient/tools/encodeAssets.js +++ b/packages/app-mobile/tools/encodeAssets.js @@ -1,4 +1,4 @@ -const utils = require('../../Tools/gulp/utils'); +const utils = require('@joplinapp/tools/gulp/utils'); const fs = require('fs-extra'); const md5 = require('md5'); @@ -47,7 +47,7 @@ async function main() { await fs.mkdirp(outputDir); const encodedFiles = []; - const sourceAssetDir = `${rootDir}/lib/joplin-renderer/assets`; + const sourceAssetDir = `${rootDir}/node_modules/@joplinapp/renderer/assets`; const files = walk(sourceAssetDir); for (const file of files) { diff --git a/ReactNativeClient/tools/podInstall.js b/packages/app-mobile/tools/podInstall.js similarity index 100% rename from ReactNativeClient/tools/podInstall.js rename to packages/app-mobile/tools/podInstall.js diff --git a/packages/app-mobile/tools/unlinkReact.js b/packages/app-mobile/tools/unlinkReact.js new file mode 100644 index 0000000000..e84673e7ae --- /dev/null +++ b/packages/app-mobile/tools/unlinkReact.js @@ -0,0 +1,31 @@ +// const fs = require('fs'); +// const { execSync } = require("child_process"); + +// const isWindows = process.platform === "win32"; + +// function toSystemSlashes(path) { +// const os = process.platform; +// if (os === 'win32') return path.replace(/\//g, '\\'); +// return path.replace(/\\/g, '/'); +// } + +// const nodeModulesPath = `${__dirname}/../node_modules`; + +// function deleteLink(path) { +// if (isWindows) { +// try { +// execSync(`rmdir "${toSystemSlashes(path)}"`, { stdio : 'pipe' }); +// } catch (error) { +// // console.info('Error: ' + error.message); +// } +// } else { +// try { +// fs.unlinkSync(toSystemSlashes(path)); +// } catch (error) { + +// } +// } +// } + +// deleteLink(nodeModulesPath + '/react'); +// deleteLink(nodeModulesPath + '/react-dom'); diff --git a/packages/app-mobile/tsconfig.json b/packages/app-mobile/tsconfig.json new file mode 100644 index 0000000000..51509e42e7 --- /dev/null +++ b/packages/app-mobile/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "include": [ + "**/*.ts", + "**/*.tsx", + ], + "exclude": [ + "**/node_modules", + ], +} \ No newline at end of file diff --git a/ReactNativeClient/lib/ShareExtension.ts b/packages/app-mobile/utils/ShareExtension.ts similarity index 100% rename from ReactNativeClient/lib/ShareExtension.ts rename to packages/app-mobile/utils/ShareExtension.ts diff --git a/ReactNativeClient/lib/checkPermissions.ts b/packages/app-mobile/utils/checkPermissions.ts similarity index 100% rename from ReactNativeClient/lib/checkPermissions.ts rename to packages/app-mobile/utils/checkPermissions.ts diff --git a/ReactNativeClient/lib/database-driver-react-native.js b/packages/app-mobile/utils/database-driver-react-native.js similarity index 100% rename from ReactNativeClient/lib/database-driver-react-native.js rename to packages/app-mobile/utils/database-driver-react-native.js diff --git a/ReactNativeClient/lib/dialogs.js b/packages/app-mobile/utils/dialogs.js similarity index 100% rename from ReactNativeClient/lib/dialogs.js rename to packages/app-mobile/utils/dialogs.js diff --git a/ReactNativeClient/lib/fs-driver-rn.js b/packages/app-mobile/utils/fs-driver-rn.js similarity index 98% rename from ReactNativeClient/lib/fs-driver-rn.js rename to packages/app-mobile/utils/fs-driver-rn.js index 8ac28ee1b8..9dbdfee612 100644 --- a/ReactNativeClient/lib/fs-driver-rn.js +++ b/packages/app-mobile/utils/fs-driver-rn.js @@ -1,5 +1,5 @@ const RNFS = require('react-native-fs'); -const FsDriverBase = require('lib/fs-driver-base'); +const FsDriverBase = require('@joplinapp/lib/fs-driver-base'); const RNFetchBlob = require('rn-fetch-blob').default; class FsDriverRN extends FsDriverBase { diff --git a/ReactNativeClient/lib/geolocation-react.js b/packages/app-mobile/utils/geolocation-react.js similarity index 93% rename from ReactNativeClient/lib/geolocation-react.js rename to packages/app-mobile/utils/geolocation-react.js index 14770110e9..98c1a609ca 100644 --- a/ReactNativeClient/lib/geolocation-react.js +++ b/packages/app-mobile/utils/geolocation-react.js @@ -1,6 +1,6 @@ import Geolocation from '@react-native-community/geolocation'; -const Setting = require('lib/models/Setting').default; +const Setting = require('@joplinapp/lib/models/Setting').default; class GeolocationReact { static currentPosition_testResponse() { diff --git a/ReactNativeClient/lib/shareHandler.ts b/packages/app-mobile/utils/shareHandler.ts similarity index 88% rename from ReactNativeClient/lib/shareHandler.ts rename to packages/app-mobile/utils/shareHandler.ts index 1f29078ea8..6c037f35eb 100644 --- a/ReactNativeClient/lib/shareHandler.ts +++ b/packages/app-mobile/utils/shareHandler.ts @@ -1,8 +1,8 @@ import ShareExtension, { SharedData } from './ShareExtension'; -import shim from 'lib/shim'; +import shim from '@joplinapp/lib/shim'; -const Note = require('lib/models/Note.js'); -const checkPermissions = require('lib/checkPermissions.js').default; +const Note = require('@joplinapp/lib/models/Note.js'); +const checkPermissions = require('./checkPermissions.js').default; const { ToastAndroid } = require('react-native'); const { PermissionsAndroid } = require('react-native'); diff --git a/ReactNativeClient/lib/shim-init-react.js b/packages/app-mobile/utils/shim-init-react.js similarity index 91% rename from ReactNativeClient/lib/shim-init-react.js rename to packages/app-mobile/utils/shim-init-react.js index a8ac2dd346..fadb1ae368 100644 --- a/ReactNativeClient/lib/shim-init-react.js +++ b/packages/app-mobile/utils/shim-init-react.js @@ -1,24 +1,24 @@ -const shim = require('lib/shim').default; -const { GeolocationReact } = require('lib/geolocation-react.js'); -const PoorManIntervals = require('lib/PoorManIntervals').default; +const shim = require('@joplinapp/lib/shim').default; +const { GeolocationReact } = require('./geolocation-react.js'); +const PoorManIntervals = require('@joplinapp/lib/PoorManIntervals').default; const RNFetchBlob = require('rn-fetch-blob').default; const { generateSecureRandom } = require('react-native-securerandom'); -const FsDriverRN = require('lib/fs-driver-rn.js').FsDriverRN; +const FsDriverRN = require('./fs-driver-rn.js').FsDriverRN; const urlValidator = require('valid-url'); const { Buffer } = require('buffer'); const { Linking, Platform } = require('react-native'); -const mimeUtils = require('lib/mime-utils.js').mime; -const { basename, fileExtension } = require('lib/path-utils'); -const uuid = require('lib/uuid').default; -const Resource = require('lib/models/Resource'); +const mimeUtils = require('@joplinapp/lib/mime-utils.js').mime; +const { basename, fileExtension } = require('@joplinapp/lib/path-utils'); +const uuid = require('@joplinapp/lib/uuid').default; +const Resource = require('@joplinapp/lib/models/Resource'); const injectedJs = { - webviewLib: require('lib/rnInjectedJs/webviewLib'), + webviewLib: require('@joplinapp/lib/rnInjectedJs/webviewLib'), }; function shimInit() { shim.Geolocation = GeolocationReact; - shim.sjclModule = require('lib/vendor/sjcl-rn.js'); + shim.sjclModule = require('@joplinapp/lib/vendor/sjcl-rn.js'); shim.fsDriver = () => { if (!shim.fsDriver_) shim.fsDriver_ = new FsDriverRN(); diff --git a/packages/fork-htmlparser2/.eslintrc.json b/packages/fork-htmlparser2/.eslintrc.json new file mode 100644 index 0000000000..70fd13e7d5 --- /dev/null +++ b/packages/fork-htmlparser2/.eslintrc.json @@ -0,0 +1,27 @@ +{ + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + "prettier", + "prettier/@typescript-eslint" + ], + "env": { + "node": true, + "es6": true + }, + "rules": { + "eqeqeq": 2, + "no-caller": 2, + "dot-notation": 2, + "no-var": 2, + "prefer-const": 2, + "prefer-arrow-callback": 2, + "arrow-body-style": [2, "as-needed"], + "object-shorthand": 2, + + "@typescript-eslint/explicit-function-return-type": 0, + "@typescript-eslint/explicit-member-accessibility": 0, + "@typescript-eslint/no-use-before-define": [2, { "functions": false }] + } +} diff --git a/packages/fork-htmlparser2/.gitattributes b/packages/fork-htmlparser2/.gitattributes new file mode 100644 index 0000000000..4bb50dc17f --- /dev/null +++ b/packages/fork-htmlparser2/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text eol=lf \ No newline at end of file diff --git a/packages/fork-htmlparser2/.github/FUNDING.yml b/packages/fork-htmlparser2/.github/FUNDING.yml new file mode 100644 index 0000000000..e68c90cabc --- /dev/null +++ b/packages/fork-htmlparser2/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: "npm/htmlparser2" +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/packages/fork-htmlparser2/.gitignore b/packages/fork-htmlparser2/.gitignore new file mode 100644 index 0000000000..f41745234b --- /dev/null +++ b/packages/fork-htmlparser2/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +coverage/ +lib/ diff --git a/packages/fork-htmlparser2/.travis.yml b/packages/fork-htmlparser2/.travis.yml new file mode 100644 index 0000000000..02026fc8bb --- /dev/null +++ b/packages/fork-htmlparser2/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - lts/* +after_success: npm run coverage diff --git a/packages/fork-htmlparser2/LICENSE b/packages/fork-htmlparser2/LICENSE new file mode 100644 index 0000000000..0a35e029af --- /dev/null +++ b/packages/fork-htmlparser2/LICENSE @@ -0,0 +1,18 @@ +Copyright 2010, 2011, Chris Winberry . All rights reserved. +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. \ No newline at end of file diff --git a/packages/fork-htmlparser2/README.md b/packages/fork-htmlparser2/README.md new file mode 100644 index 0000000000..24486137f3 --- /dev/null +++ b/packages/fork-htmlparser2/README.md @@ -0,0 +1,169 @@ +* * * + +Fork of htmlparser2@4.1.0 for Joplin. + +Patch: + +```diff +diff --git a/node_modules/htmlparser2/lib/Parser.js b/node_modules/htmlparser2/lib/Parser.js +index 44b4371..bcd7cc2 100644 +--- a/node_modules/htmlparser2/lib/Parser.js ++++ b/node_modules/htmlparser2/lib/Parser.js +@@ -212,6 +212,13 @@ var Parser = /** @class */ (function (_super) { + this._tagname = ""; + }; + Parser.prototype.onclosetag = function (name) { ++ // When this is true, the onclosetag event will always be emitted ++ // for closing tags (eg ) even if that tag was not previously ++ // open. This is needed because we reconstruct the HTML based on ++ // fragments that don't necessarily contain the opening tag. ++ // Without this patch, onopentagname would not be emitted, and ++ // so the closing tag would disappear from the output. ++ var alwaysClose = true; + this._updatePosition(1); + if (this._lowerCaseTagNames) { + name = name.toLowerCase(); +@@ -236,11 +243,15 @@ var Parser = /** @class */ (function (_super) { + else if (name === "p" && !this._options.xmlMode) { + this.onopentagname(name); + this._closeCurrentTag(); ++ } else if (!this._stack.length && alwaysClose) { ++ this._cbs.onclosetag(name); + } + } + else if (!this._options.xmlMode && (name === "br" || name === "p")) { + this.onopentagname(name); + this._closeCurrentTag(); ++ } else if (!this._stack.length && alwaysClose) { ++ this._cbs.onclosetag(name); + } + }; + Parser.prototype.onselfclosingtag = function () { +@@ -331,7 +342,11 @@ var Parser = /** @class */ (function (_super) { + }; + Parser.prototype.onend = function () { + if (this._cbs.onclosetag) { +- for (var i = this._stack.length; i > 0; this._cbs.onclosetag(this._stack[--i])) ++ // Prevent the parser from auto-closing tags. Since we deal with fragments that ++ // maybe contain the opening tag but not the closing one, we don't want that ++ // closing tag to be auto-added. ++ // ++ // for (var i = this._stack.length; i > 0; this._cbs.onclosetag(this._stack[--i])) + ; + } + if (this._cbs.onend) +``` + +* * * + +# htmlparser2 + +[![NPM version](http://img.shields.io/npm/v/htmlparser2.svg?style=flat)](https://npmjs.org/package/htmlparser2) +[![Downloads](https://img.shields.io/npm/dm/htmlparser2.svg?style=flat)](https://npmjs.org/package/htmlparser2) +[![Build Status](http://img.shields.io/travis/fb55/htmlparser2/master.svg?style=flat)](http://travis-ci.org/fb55/htmlparser2) +[![Coverage](http://img.shields.io/coveralls/fb55/htmlparser2.svg?style=flat)](https://coveralls.io/r/fb55/htmlparser2) + +A forgiving HTML/XML/RSS parser. +The parser can handle streams and provides a callback interface. + +## Installation + + npm install htmlparser2 + +A live demo of htmlparser2 is available [here](https://astexplorer.net/#/2AmVrGuGVJ). + +## Usage + +```javascript +const htmlparser2 = require("htmlparser2"); +const parser = new htmlparser2.Parser( + { + onopentag(name, attribs) { + if (name === "script" && attribs.type === "text/javascript") { + console.log("JS! Hooray!"); + } + }, + ontext(text) { + console.log("-->", text); + }, + onclosetag(tagname) { + if (tagname === "script") { + console.log("That's it?!"); + } + } + }, + { decodeEntities: true } +); +parser.write( + "Xyz

", + "expected": [ + { + "event": "opentagname", + "data": ["p"] + }, + { + "event": "opentag", + "data": ["p", {}] + }, + { + "event": "opentagname", + "data": ["script"] + }, + { + "event": "attribute", + "data": ["type", "text/template"] + }, + { + "event": "opentag", + "data": [ + "script", + { + "type": "text/template" + } + ] + }, + { + "event": "text", + "data": ["

Heading1

"] + }, + { + "event": "closetag", + "data": ["script"] + }, + { + "event": "closetag", + "data": ["p"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/03-lowercase_tags.json b/packages/fork-htmlparser2/src/__fixtures__/Events/03-lowercase_tags.json new file mode 100644 index 0000000000..dafa4eedce --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/03-lowercase_tags.json @@ -0,0 +1,37 @@ +{ + "name": "Lowercase tags", + "options": { + "handler": {}, + "parser": { + "lowerCaseTags": true + } + }, + "html": "

adsf

", + "expected": [ + { + "event": "opentagname", + "data": ["h1"] + }, + { + "event": "attribute", + "data": ["class", "test"] + }, + { + "event": "opentag", + "data": [ + "h1", + { + "class": "test" + } + ] + }, + { + "event": "text", + "data": ["adsf"] + }, + { + "event": "closetag", + "data": ["h1"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/04-cdata.json b/packages/fork-htmlparser2/src/__fixtures__/Events/04-cdata.json new file mode 100644 index 0000000000..c4c6555355 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/04-cdata.json @@ -0,0 +1,38 @@ +{ + "name": "CDATA", + "options": { + "handler": {}, + "parser": { "xmlMode": true } + }, + "html": "<> fo]]>", + "expected": [ + { + "event": "opentagname", + "data": ["tag"] + }, + { + "event": "opentag", + "data": ["tag", {}] + }, + { + "event": "cdatastart", + "data": [] + }, + { + "event": "text", + "data": [" asdf ><> fo"] + }, + { + "event": "cdataend", + "data": [] + }, + { + "event": "closetag", + "data": ["tag"] + }, + { + "event": "processinginstruction", + "data": ["![CD", "![CD"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/05-cdata-special.json b/packages/fork-htmlparser2/src/__fixtures__/Events/05-cdata-special.json new file mode 100644 index 0000000000..d23adf4159 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/05-cdata-special.json @@ -0,0 +1,26 @@ +{ + "name": "CDATA (inside special)", + "options": { + "handler": {}, + "parser": {} + }, + "html": "", + "expected": [ + { + "event": "opentagname", + "data": ["script"] + }, + { + "event": "opentag", + "data": ["script", {}] + }, + { + "event": "text", + "data": ["/*<> fo/*]]>*/"] + }, + { + "event": "closetag", + "data": ["script"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/06-leading-lt.json b/packages/fork-htmlparser2/src/__fixtures__/Events/06-leading-lt.json new file mode 100644 index 0000000000..f99044f09d --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/06-leading-lt.json @@ -0,0 +1,14 @@ +{ + "name": "leading lt", + "options": { + "handler": {}, + "parser": {} + }, + "html": ">a>", + "expected": [ + { + "event": "text", + "data": [">a>"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/07-self-closing.json b/packages/fork-htmlparser2/src/__fixtures__/Events/07-self-closing.json new file mode 100644 index 0000000000..6cbabbfbb4 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/07-self-closing.json @@ -0,0 +1,47 @@ +{ + "name": "Self-closing tags", + "options": { + "handler": {}, + "parser": {} + }, + "html": "Foo
", + "expected": [ + { + "event": "opentagname", + "data": ["a"] + }, + { + "event": "attribute", + "data": ["href", "http://test.com/"] + }, + { + "event": "opentag", + "data": [ + "a", + { + "href": "http://test.com/" + } + ] + }, + { + "event": "text", + "data": ["Foo"] + }, + { + "event": "closetag", + "data": ["a"] + }, + { + "event": "opentagname", + "data": ["hr"] + }, + { + "event": "opentag", + "data": ["hr", {}] + }, + { + "event": "closetag", + "data": ["hr"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/08-implicit-close-tags.json b/packages/fork-htmlparser2/src/__fixtures__/Events/08-implicit-close-tags.json new file mode 100644 index 0000000000..f3b56ca21c --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/08-implicit-close-tags.json @@ -0,0 +1,85 @@ +{ + "name": "Implicit close tags", + "options": {}, + "html": "
  1. TH

    Heading

    Div
    Div2
  2. Heading 2

Para

Heading 4

  • Hi
  • bye
", + "expected": [ + { "event": "opentagname", "data": ["ol"] }, + { "event": "opentag", "data": ["ol", {}] }, + { "event": "opentagname", "data": ["li"] }, + { "event": "attribute", "data": ["class", "test"] }, + { "event": "opentag", "data": ["li", { "class": "test" }] }, + { "event": "opentagname", "data": ["div"] }, + { "event": "opentag", "data": ["div", {}] }, + { "event": "opentagname", "data": ["table"] }, + { "event": "attribute", "data": ["style", "width:100%"] }, + { "event": "opentag", "data": ["table", { "style": "width:100%" }] }, + { "event": "opentagname", "data": ["tr"] }, + { "event": "opentag", "data": ["tr", {}] }, + { "event": "opentagname", "data": ["th"] }, + { "event": "opentag", "data": ["th", {}] }, + { "event": "text", "data": ["TH"] }, + { "event": "closetag", "data": ["th"] }, + { "event": "opentagname", "data": ["td"] }, + { "event": "attribute", "data": ["colspan", "2"] }, + { "event": "opentag", "data": ["td", { "colspan": "2" }] }, + { "event": "opentagname", "data": ["h3"] }, + { "event": "opentag", "data": ["h3", {}] }, + { "event": "text", "data": ["Heading"] }, + { "event": "closetag", "data": ["h3"] }, + { "event": "closetag", "data": ["td"] }, + { "event": "closetag", "data": ["tr"] }, + { "event": "opentagname", "data": ["tr"] }, + { "event": "opentag", "data": ["tr", {}] }, + { "event": "opentagname", "data": ["td"] }, + { "event": "opentag", "data": ["td", {}] }, + { "event": "opentagname", "data": ["div"] }, + { "event": "opentag", "data": ["div", {}] }, + { "event": "text", "data": ["Div"] }, + { "event": "closetag", "data": ["div"] }, + { "event": "closetag", "data": ["td"] }, + { "event": "opentagname", "data": ["td"] }, + { "event": "opentag", "data": ["td", {}] }, + { "event": "opentagname", "data": ["div"] }, + { "event": "opentag", "data": ["div", {}] }, + { "event": "text", "data": ["Div2"] }, + { "event": "closetag", "data": ["div"] }, + { "event": "closetag", "data": ["td"] }, + { "event": "closetag", "data": ["tr"] }, + { "event": "closetag", "data": ["table"] }, + { "event": "closetag", "data": ["div"] }, + { "event": "closetag", "data": ["li"] }, + { "event": "opentagname", "data": ["li"] }, + { "event": "opentag", "data": ["li", {}] }, + { "event": "opentagname", "data": ["div"] }, + { "event": "opentag", "data": ["div", {}] }, + { "event": "opentagname", "data": ["h3"] }, + { "event": "opentag", "data": ["h3", {}] }, + { "event": "text", "data": ["Heading 2"] }, + { "event": "closetag", "data": ["h3"] }, + { "event": "closetag", "data": ["div"] }, + { "event": "closetag", "data": ["li"] }, + { "event": "closetag", "data": ["ol"] }, + { "event": "opentagname", "data": ["p"] }, + { "event": "opentag", "data": ["p", {}] }, + { "event": "text", "data": ["Para"] }, + { "event": "closetag", "data": ["p"] }, + { "event": "opentagname", "data": ["h4"] }, + { "event": "opentag", "data": ["h4", {}] }, + { "event": "text", "data": ["Heading 4"] }, + { "event": "closetag", "data": ["h4"] }, + { "event": "opentagname", "data": ["p"] }, + { "event": "opentag", "data": ["p", {}] }, + { "event": "closetag", "data": ["p"] }, + { "event": "opentagname", "data": ["ul"] }, + { "event": "opentag", "data": ["ul", {}] }, + { "event": "opentagname", "data": ["li"] }, + { "event": "opentag", "data": ["li", {}] }, + { "event": "text", "data": ["Hi"] }, + { "event": "closetag", "data": ["li"] }, + { "event": "opentagname", "data": ["li"] }, + { "event": "opentag", "data": ["li", {}] }, + { "event": "text", "data": ["bye"] }, + { "event": "closetag", "data": ["li"] }, + { "event": "closetag", "data": ["ul"] } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/09-attributes.json b/packages/fork-htmlparser2/src/__fixtures__/Events/09-attributes.json new file mode 100644 index 0000000000..b5aac14c5c --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/09-attributes.json @@ -0,0 +1,50 @@ +{ + "name": "attributes (no white space, no value, no quotes)", + "options": { + "handler": {}, + "parser": {} + }, + "html": "", + "expected": [ + { + "event": "opentagname", + "data": ["button"] + }, + { + "event": "attribute", + "data": ["class", "test0"] + }, + { + "event": "attribute", + "data": ["title", "test1"] + }, + { + "event": "attribute", + "data": ["disabled", ""] + }, + { + "event": "attribute", + "data": ["value", "test2"] + }, + { + "event": "opentag", + "data": [ + "button", + { + "class": "test0", + "title": "test1", + "disabled": "", + "value": "test2" + } + ] + }, + { + "event": "text", + "data": ["adsf"] + }, + { + "event": "closetag", + "data": ["button"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/10-crazy-attrib.json b/packages/fork-htmlparser2/src/__fixtures__/Events/10-crazy-attrib.json new file mode 100644 index 0000000000..a76ec161c9 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/10-crazy-attrib.json @@ -0,0 +1,40 @@ +{ + "name": "crazy attribute", + "options": { + "handler": {}, + "parser": {} + }, + "html": "

stuff

", + "expected": [ + { + "event": "opentagname", + "data": ["p"] + }, + { + "event": "opentag", + "data": ["p", {}] + }, + { + "event": "opentagname", + "data": ["script"] + }, + { + "event": "opentag", + "data": ["script", {}] + }, + { + "event": "text", + "data": ["var str = '", + "expected": [ + { + "event": "opentagname", + "data": ["script"] + }, + { + "event": "opentag", + "data": ["script", {}] + }, + { + "event": "text", + "data": ["", + "expected": [ + { + "event": "text", + "data": ["< >"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/26-not-quite-closed.json b/packages/fork-htmlparser2/src/__fixtures__/Events/26-not-quite-closed.json new file mode 100644 index 0000000000..0b36e92bed --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/26-not-quite-closed.json @@ -0,0 +1,28 @@ +{ + "name": "Not quite closed", + "options": {}, + "html": "", + "expected": [ + { + "event": "opentagname", + "data": ["foo"] + }, + { + "event": "attribute", + "data": ["bar", ""] + }, + { + "event": "opentag", + "data": [ + "foo", + { + "bar": "" + } + ] + }, + { + "event": "closetag", + "data": ["foo"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/27-entities_in_attributes.json b/packages/fork-htmlparser2/src/__fixtures__/Events/27-entities_in_attributes.json new file mode 100644 index 0000000000..71a3c0bb91 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/27-entities_in_attributes.json @@ -0,0 +1,46 @@ +{ + "name": "Entities in attributes", + "options": { + "handler": {}, + "parser": { "decodeEntities": true } + }, + "html": "", + "expected": [ + { + "event": "opentagname", + "data": ["foo"] + }, + { + "event": "attribute", + "data": ["bar", "&"] + }, + { + "event": "attribute", + "data": ["baz", "&"] + }, + { + "event": "attribute", + "data": ["boo", "&"] + }, + { + "event": "attribute", + "data": ["noo", ""] + }, + { + "event": "opentag", + "data": [ + "foo", + { + "bar": "&", + "baz": "&", + "boo": "&", + "noo": "" + } + ] + }, + { + "event": "closetag", + "data": ["foo"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/28-cdata_in_html.json b/packages/fork-htmlparser2/src/__fixtures__/Events/28-cdata_in_html.json new file mode 100644 index 0000000000..4c2402def1 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/28-cdata_in_html.json @@ -0,0 +1,9 @@ +{ + "name": "CDATA in HTML", + "options": {}, + "html": "", + "expected": [ + { "event": "comment", "data": ["[CDATA[ foo ]]"] }, + { "event": "commentend", "data": [] } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/29-comment_edge-cases.json b/packages/fork-htmlparser2/src/__fixtures__/Events/29-comment_edge-cases.json new file mode 100644 index 0000000000..b1f1b61565 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/29-comment_edge-cases.json @@ -0,0 +1,15 @@ +{ + "name": "Comment edge-cases", + "options": {}, + "html": "", + "expected": [ + { "event": "comment", "data": [" a-b-> "] }, + { "event": "commentend", "data": [] } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/32-script-ending-with-lessthan.json b/packages/fork-htmlparser2/src/__fixtures__/Events/32-script-ending-with-lessthan.json new file mode 100644 index 0000000000..1144681ed4 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/32-script-ending-with-lessthan.json @@ -0,0 +1,26 @@ +{ + "name": "Scripts ending with <", + "options": { + "handler": {}, + "parser": {} + }, + "html": "", + "expected": [ + { + "event": "opentagname", + "data": ["script"] + }, + { + "event": "opentag", + "data": ["script", {}] + }, + { + "event": "text", + "data": ["<"] + }, + { + "event": "closetag", + "data": ["script"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Events/33-cdata_more-edge-cases.json b/packages/fork-htmlparser2/src/__fixtures__/Events/33-cdata_more-edge-cases.json new file mode 100644 index 0000000000..a6be253874 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Events/33-cdata_more-edge-cases.json @@ -0,0 +1,12 @@ +{ + "name": "CDATA more edge-cases", + "options": { + "parser": { "recognizeCDATA": true } + }, + "html": "baz]]>", + "expected": [ + { "event": "cdatastart", "data": [] }, + { "event": "text", "data": ["foo]bar]>baz"] }, + { "event": "cdataend", "data": [] } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Feeds/01-rss.json b/packages/fork-htmlparser2/src/__fixtures__/Feeds/01-rss.json new file mode 100644 index 0000000000..cac9c9d07b --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Feeds/01-rss.json @@ -0,0 +1,5 @@ +{ + "name": "RSS (2.0)", + "file": "RSS_Example.xml", + "useSnapshot": true +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Feeds/02-atom.json b/packages/fork-htmlparser2/src/__fixtures__/Feeds/02-atom.json new file mode 100644 index 0000000000..70b06f5fe5 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Feeds/02-atom.json @@ -0,0 +1,5 @@ +{ + "name": "Atom (1.0)", + "file": "Atom_Example.xml", + "useSnapshot": true +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Feeds/03-rdf.json b/packages/fork-htmlparser2/src/__fixtures__/Feeds/03-rdf.json new file mode 100644 index 0000000000..9b09ee4426 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Feeds/03-rdf.json @@ -0,0 +1,5 @@ +{ + "name": "RDF test", + "file": "RDF_Example.xml", + "useSnapshot": true +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Stream/01-basic.json b/packages/fork-htmlparser2/src/__fixtures__/Stream/01-basic.json new file mode 100644 index 0000000000..56aedf0d48 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Stream/01-basic.json @@ -0,0 +1,55 @@ +{ + "name": "Basic html", + "options": {}, + "file": "Basic.html", + "expected": [ + { + "event": "processinginstruction", + "data": ["!doctype", "!DOCTYPE html"] + }, + { + "event": "opentagname", + "data": ["html"] + }, + { + "event": "opentag", + "data": ["html", {}] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "text", + "data": ["The Title"] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "opentagname", + "data": ["body"] + }, + { + "event": "opentag", + "data": ["body", {}] + }, + { + "event": "text", + "data": ["Hello world"] + }, + { + "event": "closetag", + "data": ["body"] + }, + { + "event": "closetag", + "data": ["html"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Stream/02-RSS.json b/packages/fork-htmlparser2/src/__fixtures__/Stream/02-RSS.json new file mode 100644 index 0000000000..78f6e26ccd --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Stream/02-RSS.json @@ -0,0 +1,722 @@ +{ + "name": "RSS feed", + "options": { "xmlMode": true }, + "file": "RSS_Example.xml", + "expected": [ + { + "event": "processinginstruction", + "data": ["?xml", "?xml version=\"1.0\"?"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "comment", + "data": [ + " http://cyber.law.harvard.edu/rss/examples/rss2sample.xml " + ] + }, + { + "event": "commentend", + "data": [] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "opentagname", + "data": ["rss"] + }, + { + "event": "attribute", + "data": ["version", "2.0"] + }, + { + "event": "opentag", + "data": [ + "rss", + { + "version": "2.0" + } + ] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["channel"] + }, + { + "event": "opentag", + "data": ["channel", {}] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "text", + "data": ["Liftoff News"] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["link"] + }, + { + "event": "opentag", + "data": ["link", {}] + }, + { + "event": "text", + "data": ["http://liftoff.msfc.nasa.gov/"] + }, + { + "event": "closetag", + "data": ["link"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["description"] + }, + { + "event": "opentag", + "data": ["description", {}] + }, + { + "event": "text", + "data": ["Liftoff to Space Exploration."] + }, + { + "event": "closetag", + "data": ["description"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["language"] + }, + { + "event": "opentag", + "data": ["language", {}] + }, + { + "event": "text", + "data": ["en-us"] + }, + { + "event": "closetag", + "data": ["language"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["pubDate"] + }, + { + "event": "opentag", + "data": ["pubDate", {}] + }, + { + "event": "text", + "data": ["Tue, 10 Jun 2003 04:00:00 GMT"] + }, + { + "event": "closetag", + "data": ["pubDate"] + }, + { + "event": "text", + "data": ["\n\n "] + }, + { + "event": "opentagname", + "data": ["lastBuildDate"] + }, + { + "event": "opentag", + "data": ["lastBuildDate", {}] + }, + { + "event": "text", + "data": ["Tue, 10 Jun 2003 09:41:01 GMT"] + }, + { + "event": "closetag", + "data": ["lastBuildDate"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["docs"] + }, + { + "event": "opentag", + "data": ["docs", {}] + }, + { + "event": "text", + "data": ["http://blogs.law.harvard.edu/tech/rss"] + }, + { + "event": "closetag", + "data": ["docs"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["generator"] + }, + { + "event": "opentag", + "data": ["generator", {}] + }, + { + "event": "text", + "data": ["Weblog Editor 2.0"] + }, + { + "event": "closetag", + "data": ["generator"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["managingEditor"] + }, + { + "event": "opentag", + "data": ["managingEditor", {}] + }, + { + "event": "text", + "data": ["editor@example.com"] + }, + { + "event": "closetag", + "data": ["managingEditor"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["webMaster"] + }, + { + "event": "opentag", + "data": ["webMaster", {}] + }, + { + "event": "text", + "data": ["webmaster@example.com"] + }, + { + "event": "closetag", + "data": ["webMaster"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["item"] + }, + { + "event": "opentag", + "data": ["item", {}] + }, + { + "event": "text", + "data": ["\n\n "] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "text", + "data": ["Star City"] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["link"] + }, + { + "event": "opentag", + "data": ["link", {}] + }, + { + "event": "text", + "data": ["http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp"] + }, + { + "event": "closetag", + "data": ["link"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["description"] + }, + { + "event": "opentag", + "data": ["description", {}] + }, + { + "event": "text", + "data": [ + "How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's <a href=\"http://howe.iki.rssi.ru/GCTC/gctc_e.htm\">Star City</a>." + ] + }, + { + "event": "closetag", + "data": ["description"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["pubDate"] + }, + { + "event": "opentag", + "data": ["pubDate", {}] + }, + { + "event": "text", + "data": ["Tue, 03 Jun 2003 09:39:21 GMT"] + }, + { + "event": "closetag", + "data": ["pubDate"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["guid"] + }, + { + "event": "opentag", + "data": ["guid", {}] + }, + { + "event": "text", + "data": ["http://liftoff.msfc.nasa.gov/2003/06/03.html#item573"] + }, + { + "event": "closetag", + "data": ["guid"] + }, + { + "event": "text", + "data": ["\n\n "] + }, + { + "event": "closetag", + "data": ["item"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["item"] + }, + { + "event": "opentag", + "data": ["item", {}] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["description"] + }, + { + "event": "opentag", + "data": ["description", {}] + }, + { + "event": "text", + "data": [ + "Sky watchers in Europe, Asia, and parts of Alaska and Canada will experience a <a href=\"http://science.nasa.gov/headlines/y2003/30may_solareclipse.htm\">partial eclipse of the Sun</a> on Saturday, May 31st." + ] + }, + { + "event": "closetag", + "data": ["description"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["pubDate"] + }, + { + "event": "opentag", + "data": ["pubDate", {}] + }, + { + "event": "text", + "data": ["Fri, 30 May 2003 11:06:42 GMT"] + }, + { + "event": "closetag", + "data": ["pubDate"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["guid"] + }, + { + "event": "opentag", + "data": ["guid", {}] + }, + { + "event": "text", + "data": ["http://liftoff.msfc.nasa.gov/2003/05/30.html#item572"] + }, + { + "event": "closetag", + "data": ["guid"] + }, + { + "event": "text", + "data": ["\n\n "] + }, + { + "event": "closetag", + "data": ["item"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["item"] + }, + { + "event": "opentag", + "data": ["item", {}] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "text", + "data": ["The Engine That Does More"] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["link"] + }, + { + "event": "opentag", + "data": ["link", {}] + }, + { + "event": "text", + "data": ["http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp"] + }, + { + "event": "closetag", + "data": ["link"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["description"] + }, + { + "event": "opentag", + "data": ["description", {}] + }, + { + "event": "text", + "data": [ + "Before man travels to Mars, NASA hopes to design new engines that will let us fly through the Solar System more quickly. The proposed VASIMR engine would do that." + ] + }, + { + "event": "closetag", + "data": ["description"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["pubDate"] + }, + { + "event": "opentag", + "data": ["pubDate", {}] + }, + { + "event": "text", + "data": ["Tue, 27 May 2003 08:37:32 GMT"] + }, + { + "event": "closetag", + "data": ["pubDate"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["guid"] + }, + { + "event": "opentag", + "data": ["guid", {}] + }, + { + "event": "text", + "data": ["http://liftoff.msfc.nasa.gov/2003/05/27.html#item571"] + }, + { + "event": "closetag", + "data": ["guid"] + }, + { + "event": "text", + "data": ["\n\n "] + }, + { + "event": "closetag", + "data": ["item"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["item"] + }, + { + "event": "opentag", + "data": ["item", {}] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "text", + "data": ["Astronauts' Dirty Laundry"] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["link"] + }, + { + "event": "opentag", + "data": ["link", {}] + }, + { + "event": "text", + "data": ["http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp"] + }, + { + "event": "closetag", + "data": ["link"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["description"] + }, + { + "event": "opentag", + "data": ["description", {}] + }, + { + "event": "text", + "data": [ + "Compared to earlier spacecraft, the International Space Station has many luxuries, but laundry facilities are not one of them. Instead, astronauts have other options." + ] + }, + { + "event": "closetag", + "data": ["description"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["pubDate"] + }, + { + "event": "opentag", + "data": ["pubDate", {}] + }, + { + "event": "text", + "data": ["Tue, 20 May 2003 08:56:02 GMT"] + }, + { + "event": "closetag", + "data": ["pubDate"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "opentagname", + "data": ["guid"] + }, + { + "event": "opentag", + "data": ["guid", {}] + }, + { + "event": "text", + "data": ["http://liftoff.msfc.nasa.gov/2003/05/20.html#item570"] + }, + { + "event": "closetag", + "data": ["guid"] + }, + { + "event": "text", + "data": ["\n\n "] + }, + { + "event": "closetag", + "data": ["item"] + }, + { + "event": "text", + "data": ["\n "] + }, + { + "event": "closetag", + "data": ["channel"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "closetag", + "data": ["rss"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Stream/03-Atom.json b/packages/fork-htmlparser2/src/__fixtures__/Stream/03-Atom.json new file mode 100644 index 0000000000..6dcf484ad2 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Stream/03-Atom.json @@ -0,0 +1,462 @@ +{ + "name": "Atom feed", + "options": { "xmlMode": true }, + "file": "Atom_Example.xml", + "expected": [ + { + "event": "processinginstruction", + "data": ["?xml", "?xml version=\"1.0\" encoding=\"utf-8\"?"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "comment", + "data": [" http://en.wikipedia.org/wiki/Atom_%28standard%29 "] + }, + { + "event": "commentend", + "data": [] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "opentagname", + "data": ["feed"] + }, + { + "event": "attribute", + "data": ["xmlns", "http://www.w3.org/2005/Atom"] + }, + { + "event": "opentag", + "data": [ + "feed", + { + "xmlns": "http://www.w3.org/2005/Atom" + } + ] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "text", + "data": ["Example Feed"] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["subtitle"] + }, + { + "event": "opentag", + "data": ["subtitle", {}] + }, + { + "event": "text", + "data": ["A subtitle."] + }, + { + "event": "closetag", + "data": ["subtitle"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["link"] + }, + { + "event": "attribute", + "data": ["href", "http://example.org/feed/"] + }, + { + "event": "attribute", + "data": ["rel", "self"] + }, + { + "event": "opentag", + "data": [ + "link", + { + "href": "http://example.org/feed/", + "rel": "self" + } + ] + }, + { + "event": "closetag", + "data": ["link"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["link"] + }, + { + "event": "attribute", + "data": ["href", "http://example.org/"] + }, + { + "event": "opentag", + "data": [ + "link", + { + "href": "http://example.org/" + } + ] + }, + { + "event": "closetag", + "data": ["link"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["id"] + }, + { + "event": "opentag", + "data": ["id", {}] + }, + { + "event": "text", + "data": ["urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6"] + }, + { + "event": "closetag", + "data": ["id"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["updated"] + }, + { + "event": "opentag", + "data": ["updated", {}] + }, + { + "event": "text", + "data": ["2003-12-13T18:30:02Z"] + }, + { + "event": "closetag", + "data": ["updated"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["author"] + }, + { + "event": "opentag", + "data": ["author", {}] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["name"] + }, + { + "event": "opentag", + "data": ["name", {}] + }, + { + "event": "text", + "data": ["John Doe"] + }, + { + "event": "closetag", + "data": ["name"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["email"] + }, + { + "event": "opentag", + "data": ["email", {}] + }, + { + "event": "text", + "data": ["johndoe@example.com"] + }, + { + "event": "closetag", + "data": ["email"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "closetag", + "data": ["author"] + }, + { + "event": "text", + "data": ["\n\n\t"] + }, + { + "event": "opentagname", + "data": ["entry"] + }, + { + "event": "opentag", + "data": ["entry", {}] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "text", + "data": ["Atom-Powered Robots Run Amok"] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["link"] + }, + { + "event": "attribute", + "data": ["href", "http://example.org/2003/12/13/atom03"] + }, + { + "event": "opentag", + "data": [ + "link", + { + "href": "http://example.org/2003/12/13/atom03" + } + ] + }, + { + "event": "closetag", + "data": ["link"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["link"] + }, + { + "event": "attribute", + "data": ["rel", "alternate"] + }, + { + "event": "attribute", + "data": ["type", "text/html"] + }, + { + "event": "attribute", + "data": ["href", "http://example.org/2003/12/13/atom03.html"] + }, + { + "event": "opentag", + "data": [ + "link", + { + "rel": "alternate", + "type": "text/html", + "href": "http://example.org/2003/12/13/atom03.html" + } + ] + }, + { + "event": "closetag", + "data": ["link"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["link"] + }, + { + "event": "attribute", + "data": ["rel", "edit"] + }, + { + "event": "attribute", + "data": ["href", "http://example.org/2003/12/13/atom03/edit"] + }, + { + "event": "opentag", + "data": [ + "link", + { + "rel": "edit", + "href": "http://example.org/2003/12/13/atom03/edit" + } + ] + }, + { + "event": "closetag", + "data": ["link"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["id"] + }, + { + "event": "opentag", + "data": ["id", {}] + }, + { + "event": "text", + "data": ["urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a"] + }, + { + "event": "closetag", + "data": ["id"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["updated"] + }, + { + "event": "opentag", + "data": ["updated", {}] + }, + { + "event": "text", + "data": ["2003-12-13T18:30:02Z"] + }, + { + "event": "closetag", + "data": ["updated"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["content"] + }, + { + "event": "attribute", + "data": ["type", "html"] + }, + { + "event": "opentag", + "data": [ + "content", + { + "type": "html" + } + ] + }, + { + "event": "opentagname", + "data": ["p"] + }, + { + "event": "opentag", + "data": ["p", {}] + }, + { + "event": "text", + "data": ["Some content."] + }, + { + "event": "closetag", + "data": ["p"] + }, + { + "event": "closetag", + "data": ["content"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "closetag", + "data": ["entry"] + }, + { + "event": "text", + "data": ["\n\n"] + }, + { + "event": "closetag", + "data": ["feed"] + }, + { + "event": "text", + "data": ["\n"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Stream/04-RDF.json b/packages/fork-htmlparser2/src/__fixtures__/Stream/04-RDF.json new file mode 100644 index 0000000000..0f1f62fa5d --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Stream/04-RDF.json @@ -0,0 +1,950 @@ +{ + "name": "RDF feed", + "options": { "xmlMode": true }, + "file": "RDF_Example.xml", + "expected": [ + { + "event": "processinginstruction", + "data": ["?xml", "?xml version=\"1.0\" encoding=\"UTF-8\"?"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "opentagname", + "data": ["rdf:RDF"] + }, + { + "event": "attribute", + "data": ["xmlns:rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"] + }, + { + "event": "attribute", + "data": ["xmlns", "http://purl.org/rss/1.0/"] + }, + { + "event": "attribute", + "data": ["xmlns:ev", "http://purl.org/rss/1.0/modules/event/"] + }, + { + "event": "attribute", + "data": [ + "xmlns:content", + "http://purl.org/rss/1.0/modules/content/" + ] + }, + { + "event": "attribute", + "data": ["xmlns:taxo", "http://purl.org/rss/1.0/modules/taxonomy/"] + }, + { + "event": "attribute", + "data": ["xmlns:dc", "http://purl.org/dc/elements/1.1/"] + }, + { + "event": "attribute", + "data": [ + "xmlns:syn", + "http://purl.org/rss/1.0/modules/syndication/" + ] + }, + { + "event": "attribute", + "data": ["xmlns:dcterms", "http://purl.org/dc/terms/"] + }, + { + "event": "attribute", + "data": ["xmlns:admin", "http://webns.net/mvcb/"] + }, + { + "event": "opentag", + "data": [ + "rdf:RDF", + { + "xmlns:rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "xmlns": "http://purl.org/rss/1.0/", + "xmlns:ev": "http://purl.org/rss/1.0/modules/event/", + "xmlns:content": "http://purl.org/rss/1.0/modules/content/", + "xmlns:taxo": "http://purl.org/rss/1.0/modules/taxonomy/", + "xmlns:dc": "http://purl.org/dc/elements/1.1/", + "xmlns:syn": "http://purl.org/rss/1.0/modules/syndication/", + "xmlns:dcterms": "http://purl.org/dc/terms/", + "xmlns:admin": "http://webns.net/mvcb/" + } + ] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["channel"] + }, + { + "event": "attribute", + "data": ["rdf:about", "https://github.com/fb55/htmlparser2/"] + }, + { + "event": "opentag", + "data": [ + "channel", + { + "rdf:about": "https://github.com/fb55/htmlparser2/" + } + ] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "text", + "data": ["A title to parse and remember"] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["link"] + }, + { + "event": "opentag", + "data": ["link", {}] + }, + { + "event": "text", + "data": ["https://github.com/fb55/htmlparser2/"] + }, + { + "event": "closetag", + "data": ["link"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["description"] + }, + { + "event": "opentag", + "data": ["description", {}] + }, + { + "event": "closetag", + "data": ["description"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:language"] + }, + { + "event": "opentag", + "data": ["dc:language", {}] + }, + { + "event": "text", + "data": ["en-us"] + }, + { + "event": "closetag", + "data": ["dc:language"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:rights"] + }, + { + "event": "opentag", + "data": ["dc:rights", {}] + }, + { + "event": "text", + "data": ["Copyright 2015 the authors"] + }, + { + "event": "closetag", + "data": ["dc:rights"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:publisher"] + }, + { + "event": "opentag", + "data": ["dc:publisher", {}] + }, + { + "event": "text", + "data": ["webmaster@thisisafakedoma.in"] + }, + { + "event": "closetag", + "data": ["dc:publisher"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:creator"] + }, + { + "event": "opentag", + "data": ["dc:creator", {}] + }, + { + "event": "text", + "data": ["webmaster@thisisafakedoma.in"] + }, + { + "event": "closetag", + "data": ["dc:creator"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:source"] + }, + { + "event": "opentag", + "data": ["dc:source", {}] + }, + { + "event": "text", + "data": ["https://github.com/fb55/htmlparser2/"] + }, + { + "event": "closetag", + "data": ["dc:source"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:title"] + }, + { + "event": "opentag", + "data": ["dc:title", {}] + }, + { + "event": "text", + "data": ["A title to parse and remember"] + }, + { + "event": "closetag", + "data": ["dc:title"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:type"] + }, + { + "event": "opentag", + "data": ["dc:type", {}] + }, + { + "event": "text", + "data": ["Collection"] + }, + { + "event": "closetag", + "data": ["dc:type"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["syn:updateBase"] + }, + { + "event": "opentag", + "data": ["syn:updateBase", {}] + }, + { + "event": "text", + "data": ["2011-11-04T09:39:10-07:00"] + }, + { + "event": "closetag", + "data": ["syn:updateBase"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["syn:updateFrequency"] + }, + { + "event": "opentag", + "data": ["syn:updateFrequency", {}] + }, + { + "event": "text", + "data": ["4"] + }, + { + "event": "closetag", + "data": ["syn:updateFrequency"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["syn:updatePeriod"] + }, + { + "event": "opentag", + "data": ["syn:updatePeriod", {}] + }, + { + "event": "text", + "data": ["hourly"] + }, + { + "event": "closetag", + "data": ["syn:updatePeriod"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["items"] + }, + { + "event": "opentag", + "data": ["items", {}] + }, + { + "event": "text", + "data": ["\n\t\t\t"] + }, + { + "event": "opentagname", + "data": ["rdf:Seq"] + }, + { + "event": "opentag", + "data": ["rdf:Seq", {}] + }, + { + "event": "text", + "data": ["\n\t\t\t\t"] + }, + { + "event": "opentagname", + "data": ["rdf:li"] + }, + { + "event": "attribute", + "data": [ + "rdf:resource", + "http://somefakesite/path/to/something.html" + ] + }, + { + "event": "opentag", + "data": [ + "rdf:li", + { + "rdf:resource": "http://somefakesite/path/to/something.html" + } + ] + }, + { + "event": "closetag", + "data": ["rdf:li"] + }, + { + "event": "text", + "data": ["\n\t\t\t"] + }, + { + "event": "closetag", + "data": ["rdf:Seq"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "closetag", + "data": ["items"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "closetag", + "data": ["channel"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["item"] + }, + { + "event": "attribute", + "data": ["rdf:about", "http://somefakesite/path/to/something.html"] + }, + { + "event": "opentag", + "data": [ + "item", + { + "rdf:about": "http://somefakesite/path/to/something.html" + } + ] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "cdatastart", + "data": [] + }, + { + "event": "text", + "data": [" Fast HTML Parsing "] + }, + { + "event": "cdataend", + "data": [] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["link"] + }, + { + "event": "opentag", + "data": ["link", {}] + }, + { + "event": "text", + "data": ["\nhttp://somefakesite/path/to/something.html\n"] + }, + { + "event": "closetag", + "data": ["link"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["description"] + }, + { + "event": "opentag", + "data": ["description", {}] + }, + { + "event": "cdatastart", + "data": [] + }, + { + "event": "text", + "data": [ + "\nGreat test content
A link: Github\n" + ] + }, + { + "event": "cdataend", + "data": [] + }, + { + "event": "closetag", + "data": ["description"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:date"] + }, + { + "event": "opentag", + "data": ["dc:date", {}] + }, + { + "event": "text", + "data": ["2011-11-04T09:35:17-07:00"] + }, + { + "event": "closetag", + "data": ["dc:date"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:language"] + }, + { + "event": "opentag", + "data": ["dc:language", {}] + }, + { + "event": "text", + "data": ["en-us"] + }, + { + "event": "closetag", + "data": ["dc:language"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:rights"] + }, + { + "event": "opentag", + "data": ["dc:rights", {}] + }, + { + "event": "text", + "data": ["Copyright 2015 the authors"] + }, + { + "event": "closetag", + "data": ["dc:rights"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:source"] + }, + { + "event": "opentag", + "data": ["dc:source", {}] + }, + { + "event": "text", + "data": ["\nhttp://somefakesite/path/to/something.html\n"] + }, + { + "event": "closetag", + "data": ["dc:source"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:title"] + }, + { + "event": "opentag", + "data": ["dc:title", {}] + }, + { + "event": "cdatastart", + "data": [] + }, + { + "event": "text", + "data": [" Fast HTML Parsing "] + }, + { + "event": "cdataend", + "data": [] + }, + { + "event": "closetag", + "data": ["dc:title"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:type"] + }, + { + "event": "opentag", + "data": ["dc:type", {}] + }, + { + "event": "text", + "data": ["text"] + }, + { + "event": "closetag", + "data": ["dc:type"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dcterms:issued"] + }, + { + "event": "opentag", + "data": ["dcterms:issued", {}] + }, + { + "event": "text", + "data": ["2011-11-04T09:35:17-07:00"] + }, + { + "event": "closetag", + "data": ["dcterms:issued"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "closetag", + "data": ["item"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["item"] + }, + { + "event": "attribute", + "data": [ + "rdf:about", + "http://somefakesite/path/to/something-else.html" + ] + }, + { + "event": "opentag", + "data": [ + "item", + { + "rdf:about": "http://somefakesite/path/to/something-else.html" + } + ] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "cdatastart", + "data": [] + }, + { + "event": "text", + "data": ["\nThis space intentionally left blank\n"] + }, + { + "event": "cdataend", + "data": [] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["link"] + }, + { + "event": "opentag", + "data": ["link", {}] + }, + { + "event": "text", + "data": ["\nhttp://somefakesite/path/to/something-else.html\n"] + }, + { + "event": "closetag", + "data": ["link"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["description"] + }, + { + "event": "opentag", + "data": ["description", {}] + }, + { + "event": "cdatastart", + "data": [] + }, + { + "event": "text", + "data": ["\nThe early bird gets the worm\n"] + }, + { + "event": "cdataend", + "data": [] + }, + { + "event": "closetag", + "data": ["description"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:date"] + }, + { + "event": "opentag", + "data": ["dc:date", {}] + }, + { + "event": "text", + "data": ["2011-11-04T09:34:54-07:00"] + }, + { + "event": "closetag", + "data": ["dc:date"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:language"] + }, + { + "event": "opentag", + "data": ["dc:language", {}] + }, + { + "event": "text", + "data": ["en-us"] + }, + { + "event": "closetag", + "data": ["dc:language"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:rights"] + }, + { + "event": "opentag", + "data": ["dc:rights", {}] + }, + { + "event": "text", + "data": ["Copyright 2015 the authors"] + }, + { + "event": "closetag", + "data": ["dc:rights"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:source"] + }, + { + "event": "opentag", + "data": ["dc:source", {}] + }, + { + "event": "text", + "data": ["\nhttp://somefakesite/path/to/something-else.html\n"] + }, + { + "event": "closetag", + "data": ["dc:source"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:title"] + }, + { + "event": "opentag", + "data": ["dc:title", {}] + }, + { + "event": "cdatastart", + "data": [] + }, + { + "event": "text", + "data": ["\nThis space intentionally left blank\n"] + }, + { + "event": "cdataend", + "data": [] + }, + { + "event": "closetag", + "data": ["dc:title"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dc:type"] + }, + { + "event": "opentag", + "data": ["dc:type", {}] + }, + { + "event": "text", + "data": ["text"] + }, + { + "event": "closetag", + "data": ["dc:type"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["dcterms:issued"] + }, + { + "event": "opentag", + "data": ["dcterms:issued", {}] + }, + { + "event": "text", + "data": ["2011-11-04T09:34:54-07:00"] + }, + { + "event": "closetag", + "data": ["dcterms:issued"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "closetag", + "data": ["item"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "closetag", + "data": ["rdf:RDF"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Stream/05-Attributes.json b/packages/fork-htmlparser2/src/__fixtures__/Stream/05-Attributes.json new file mode 100644 index 0000000000..c7b01a9451 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Stream/05-Attributes.json @@ -0,0 +1,246 @@ +{ + "name": "Attributes", + "options": {}, + "file": "Attributes.html", + "expected": [ + { + "event": "processinginstruction", + "data": ["!doctype", "!doctype html"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "opentagname", + "data": ["html"] + }, + { + "event": "opentag", + "data": ["html", {}] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "opentagname", + "data": ["head"] + }, + { + "event": "opentag", + "data": ["head", {}] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "text", + "data": ["Attributes test"] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "closetag", + "data": ["head"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "opentagname", + "data": ["body"] + }, + { + "event": "opentag", + "data": ["body", {}] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "comment", + "data": [" Normal attributes "] + }, + { + "event": "commentend", + "data": [] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["button"] + }, + { + "event": "attribute", + "data": ["id", "test0"] + }, + { + "event": "attribute", + "data": ["class", "value0"] + }, + { + "event": "attribute", + "data": ["title", "value1"] + }, + { + "event": "opentag", + "data": [ + "button", + { + "id": "test0", + "class": "value0", + "title": "value1" + } + ] + }, + { + "event": "text", + "data": ["class=\"value0\" title=\"value1\""] + }, + { + "event": "closetag", + "data": ["button"] + }, + { + "event": "text", + "data": ["\n\n\t"] + }, + { + "event": "comment", + "data": [" Attributes with no quotes or value "] + }, + { + "event": "commentend", + "data": [] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["button"] + }, + { + "event": "attribute", + "data": ["id", "test1"] + }, + { + "event": "attribute", + "data": ["class", "value2"] + }, + { + "event": "attribute", + "data": ["disabled", ""] + }, + { + "event": "opentag", + "data": [ + "button", + { + "id": "test1", + "class": "value2", + "disabled": "" + } + ] + }, + { + "event": "text", + "data": ["class=value2 disabled"] + }, + { + "event": "closetag", + "data": ["button"] + }, + { + "event": "text", + "data": ["\n\n\t"] + }, + { + "event": "comment", + "data": [ + " Attributes with no space between them. No valid, but accepted by the browser " + ] + }, + { + "event": "commentend", + "data": [] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["button"] + }, + { + "event": "attribute", + "data": ["id", "test2"] + }, + { + "event": "attribute", + "data": ["class", "value4"] + }, + { + "event": "attribute", + "data": ["title", "value5"] + }, + { + "event": "opentag", + "data": [ + "button", + { + "id": "test2", + "class": "value4", + "title": "value5" + } + ] + }, + { + "event": "text", + "data": ["class=\"value4\"title=\"value5\""] + }, + { + "event": "closetag", + "data": ["button"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "closetag", + "data": ["body"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "closetag", + "data": ["html"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/Stream/06-Svg.json b/packages/fork-htmlparser2/src/__fixtures__/Stream/06-Svg.json new file mode 100644 index 0000000000..89084d954e --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/Stream/06-Svg.json @@ -0,0 +1,261 @@ +{ + "name": "SVG", + "file": "Svg.html", + "expected": [ + { + "event": "processinginstruction", + "data": ["!doctype", "!doctype html"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "opentagname", + "data": ["html"] + }, + { + "event": "opentag", + "data": ["html", {}] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "opentagname", + "data": ["head"] + }, + { + "event": "opentag", + "data": ["head", {}] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "text", + "data": ["SVG test"] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "closetag", + "data": ["head"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "opentagname", + "data": ["body"] + }, + { + "event": "opentag", + "data": ["body", {}] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "opentagname", + "data": ["svg"] + }, + { + "event": "attribute", + "data": ["version", "1.1"] + }, + { + "event": "attribute", + "data": ["xmlns", "http://www.w3.org/2000/svg"] + }, + { + "event": "attribute", + "data": ["xmlns:xlink", "http://www.w3.org/1999/xlink"] + }, + { + "event": "opentag", + "data": [ + "svg", + { + "version": "1.1", + "xmlns": "http://www.w3.org/2000/svg", + "xmlns:xlink": "http://www.w3.org/1999/xlink" + } + ] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "text", + "data": ["Test"] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["animate"] + }, + { + "event": "opentag", + "data": ["animate", {}] + }, + { + "event": "closetag", + "data": ["animate"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["polygon"] + }, + { + "event": "opentag", + "data": ["polygon", {}] + }, + { + "event": "closetag", + "data": ["polygon"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "opentagname", + "data": ["g"] + }, + { + "event": "opentag", + "data": ["g", {}] + }, + { + "event": "text", + "data": ["\n\t\t\t"] + }, + { + "event": "opentagname", + "data": ["path"] + }, + { + "event": "opentag", + "data": ["path", {}] + }, + { + "event": "text", + "data": ["\n\t\t\t\t"] + }, + { + "event": "opentagname", + "data": ["title"] + }, + { + "event": "opentag", + "data": ["title", {}] + }, + { + "event": "text", + "data": ["x"] + }, + { + "event": "closetag", + "data": ["title"] + }, + { + "event": "text", + "data": ["\n\t\t\t\t"] + }, + { + "event": "opentagname", + "data": ["animate"] + }, + { + "event": "opentag", + "data": ["animate", {}] + }, + { + "event": "closetag", + "data": ["animate"] + }, + { + "event": "text", + "data": ["\n\t\t\t"] + }, + { + "event": "closetag", + "data": ["path"] + }, + { + "event": "text", + "data": ["\n\t\t"] + }, + { + "event": "closetag", + "data": ["g"] + }, + { + "event": "text", + "data": ["\n\t"] + }, + { + "event": "closetag", + "data": ["svg"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "closetag", + "data": ["body"] + }, + { + "event": "text", + "data": ["\n"] + }, + { + "event": "closetag", + "data": ["html"] + }, + { + "event": "text", + "data": ["\n"] + } + ] +} diff --git a/packages/fork-htmlparser2/src/__fixtures__/test-helper.ts b/packages/fork-htmlparser2/src/__fixtures__/test-helper.ts new file mode 100644 index 0000000000..5f474471d4 --- /dev/null +++ b/packages/fork-htmlparser2/src/__fixtures__/test-helper.ts @@ -0,0 +1,116 @@ +import { Parser, Handler, ParserOptions } from "../Parser"; +import { CollectingHandler } from "../CollectingHandler"; +import { DomHandlerOptions } from ".."; +import fs from "fs"; +import path from "path"; + +export function writeToParser( + handler: Partial, + options: ParserOptions | undefined, + data: string +) { + const parser = new Parser(handler, options); + // First, try to run the test via chunks + for (let i = 0; i < data.length; i++) { + parser.write(data.charAt(i)); + } + parser.end(); + // Then, parse everything + parser.parseComplete(data); +} + +interface Event { + event: string; + data: unknown[]; +} + +// Returns a tree structure +export function getEventCollector( + cb: (error: Error | null, events?: Event[]) => void +) { + const handler = new CollectingHandler({ + onerror: cb, + onend() { + cb(null, handler.events.reduce(eventReducer, [])); + } + }); + + return handler; +} + +function eventReducer(events: Event[], arr: [string, ...unknown[]]): Event[] { + if ( + arr[0] === "onerror" || + arr[0] === "onend" || + arr[0] === "onparserinit" + ) { + // ignore + } else if ( + arr[0] === "ontext" && + events.length && + events[events.length - 1].event === "text" + ) { + // Combine text nodes + // @ts-ignore + events[events.length - 1].data[0] += arr[1]; + } else { + events.push({ + event: arr[0].substr(2), + data: arr.slice(1) + }); + } + + return events; +} + +function getCallback(file: TestFile, done: (err?: Error | null) => void) { + let repeated = false; + + return (err: null | Error, actual?: {} | {}[]) => { + expect(err).toBeNull(); + if (file.useSnapshot) { + expect(actual).toMatchSnapshot(); + } else { + expect(actual).toEqual(file.expected); + } + + if (repeated) done(); + else repeated = true; + }; +} + +interface TestFile { + name: string; + options: { + parser?: ParserOptions; + handler?: DomHandlerOptions; + } & Partial; + html: string; + file: string; + useSnapshot?: boolean; + expected?: {} | {}[]; +} + +export function createSuite( + name: string, + getResult: ( + file: TestFile, + done: (error: Error | null, actual?: {} | {}[]) => void + ) => void +) { + describe(name, readDir); + + function readDir() { + const dir = path.join(__dirname, name); + + fs.readdirSync(dir) + .filter(file => !file.startsWith(".") && !file.startsWith("_")) + .map(name => path.join(dir, name)) + .map(require) + .forEach(runTest); + } + + function runTest(file: TestFile) { + test(file.name, done => getResult(file, getCallback(file, done))); + } +} diff --git a/packages/fork-htmlparser2/src/__snapshots__/FeedHandler.spec.ts.snap b/packages/fork-htmlparser2/src/__snapshots__/FeedHandler.spec.ts.snap new file mode 100644 index 0000000000..5d4d8969cd --- /dev/null +++ b/packages/fork-htmlparser2/src/__snapshots__/FeedHandler.spec.ts.snap @@ -0,0 +1,205 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Feeds Atom (1.0) 1`] = ` +Object { + "author": "johndoe@example.com", + "description": "A subtitle.", + "id": "urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6", + "items": Array [ + Object { + "description": "Some content.", + "id": "urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a", + "link": "http://example.org/2003/12/13/atom03", + "pubDate": 2003-12-13T18:30:02.000Z, + "title": "Atom-Powered Robots Run Amok", + }, + ], + "link": "http://example.org/feed/", + "title": "Example Feed", + "type": "atom", + "updated": 2003-12-13T18:30:02.000Z, +} +`; + +exports[`Feeds Atom (1.0) 2`] = ` +Object { + "author": "johndoe@example.com", + "description": "A subtitle.", + "id": "urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6", + "items": Array [ + Object { + "description": "Some content.", + "id": "urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a", + "link": "http://example.org/2003/12/13/atom03", + "pubDate": 2003-12-13T18:30:02.000Z, + "title": "Atom-Powered Robots Run Amok", + }, + ], + "link": "http://example.org/feed/", + "title": "Example Feed", + "type": "atom", + "updated": 2003-12-13T18:30:02.000Z, +} +`; + +exports[`Feeds RDF test 1`] = ` +Object { + "id": "", + "items": Array [ + Object { + "description": "Great test content
A link: Github", + "link": "http://somefakesite/path/to/something.html", + "title": "Fast HTML Parsing", + }, + Object { + "description": "The early bird gets the worm", + "link": "http://somefakesite/path/to/something-else.html", + "title": "This space intentionally left blank", + }, + ], + "link": "https://github.com/fb55/htmlparser2/", + "title": "A title to parse and remember", + "type": "rdf", +} +`; + +exports[`Feeds RDF test 2`] = ` +Object { + "id": "", + "items": Array [ + Object { + "description": "Great test content
A link: Github", + "link": "http://somefakesite/path/to/something.html", + "title": "Fast HTML Parsing", + }, + Object { + "description": "The early bird gets the worm", + "link": "http://somefakesite/path/to/something-else.html", + "title": "This space intentionally left blank", + }, + ], + "link": "https://github.com/fb55/htmlparser2/", + "title": "A title to parse and remember", + "type": "rdf", +} +`; + +exports[`Feeds RSS (2.0) 1`] = ` +Object { + "author": "editor@example.com", + "description": "Liftoff to Space Exploration.", + "id": "", + "items": Array [ + Object { + "description": "How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's <a href=\\"http://howe.iki.rssi.ru/GCTC/gctc_e.htm\\">Star City</a>.", + "id": "http://liftoff.msfc.nasa.gov/2003/06/03.html#item573", + "link": "http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp", + "pubDate": 2003-06-03T09:39:21.000Z, + "title": "Star City", + }, + Object { + "description": "Sky watchers in Europe, Asia, and parts of Alaska and Canada will experience a <a href=\\"http://science.nasa.gov/headlines/y2003/30may_solareclipse.htm\\">partial eclipse of the Sun</a> on Saturday, May 31st.", + "id": "http://liftoff.msfc.nasa.gov/2003/05/30.html#item572", + "pubDate": 2003-05-30T11:06:42.000Z, + }, + Object { + "description": "Before man travels to Mars, NASA hopes to design new engines that will let us fly through the Solar System more quickly. The proposed VASIMR engine would do that.", + "id": "http://liftoff.msfc.nasa.gov/2003/05/27.html#item571", + "link": "http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp", + "pubDate": 2003-05-27T08:37:32.000Z, + "title": "The Engine That Does More", + }, + Object { + "description": "Compared to earlier spacecraft, the International Space Station has many luxuries, but laundry facilities are not one of them. Instead, astronauts have other options.", + "id": "http://liftoff.msfc.nasa.gov/2003/05/20.html#item570", + "link": "http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp", + "pubDate": 2003-05-20T08:56:02.000Z, + "title": "Astronauts' Dirty Laundry", + }, + ], + "link": "http://liftoff.msfc.nasa.gov/", + "title": "Liftoff News", + "type": "rss", + "updated": 2003-06-10T09:41:01.000Z, +} +`; + +exports[`Feeds RSS (2.0) 2`] = ` +Object { + "author": "editor@example.com", + "description": "Liftoff to Space Exploration.", + "id": "", + "items": Array [ + Object { + "description": "How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's <a href=\\"http://howe.iki.rssi.ru/GCTC/gctc_e.htm\\">Star City</a>.", + "id": "http://liftoff.msfc.nasa.gov/2003/06/03.html#item573", + "link": "http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp", + "pubDate": 2003-06-03T09:39:21.000Z, + "title": "Star City", + }, + Object { + "description": "Sky watchers in Europe, Asia, and parts of Alaska and Canada will experience a <a href=\\"http://science.nasa.gov/headlines/y2003/30may_solareclipse.htm\\">partial eclipse of the Sun</a> on Saturday, May 31st.", + "id": "http://liftoff.msfc.nasa.gov/2003/05/30.html#item572", + "pubDate": 2003-05-30T11:06:42.000Z, + }, + Object { + "description": "Before man travels to Mars, NASA hopes to design new engines that will let us fly through the Solar System more quickly. The proposed VASIMR engine would do that.", + "id": "http://liftoff.msfc.nasa.gov/2003/05/27.html#item571", + "link": "http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp", + "pubDate": 2003-05-27T08:37:32.000Z, + "title": "The Engine That Does More", + }, + Object { + "description": "Compared to earlier spacecraft, the International Space Station has many luxuries, but laundry facilities are not one of them. Instead, astronauts have other options.", + "id": "http://liftoff.msfc.nasa.gov/2003/05/20.html#item570", + "link": "http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp", + "pubDate": 2003-05-20T08:56:02.000Z, + "title": "Astronauts' Dirty Laundry", + }, + ], + "link": "http://liftoff.msfc.nasa.gov/", + "title": "Liftoff News", + "type": "rss", + "updated": 2003-06-10T09:41:01.000Z, +} +`; + +exports[`parseFeed (rssFeed) 1`] = ` +Object { + "author": "editor@example.com", + "description": "Liftoff to Space Exploration.", + "id": "", + "items": Array [ + Object { + "description": "How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's <a href=\\"http://howe.iki.rssi.ru/GCTC/gctc_e.htm\\">Star City</a>.", + "id": "http://liftoff.msfc.nasa.gov/2003/06/03.html#item573", + "link": "http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp", + "pubDate": 2003-06-03T09:39:21.000Z, + "title": "Star City", + }, + Object { + "description": "Sky watchers in Europe, Asia, and parts of Alaska and Canada will experience a <a href=\\"http://science.nasa.gov/headlines/y2003/30may_solareclipse.htm\\">partial eclipse of the Sun</a> on Saturday, May 31st.", + "id": "http://liftoff.msfc.nasa.gov/2003/05/30.html#item572", + "pubDate": 2003-05-30T11:06:42.000Z, + }, + Object { + "description": "Before man travels to Mars, NASA hopes to design new engines that will let us fly through the Solar System more quickly. The proposed VASIMR engine would do that.", + "id": "http://liftoff.msfc.nasa.gov/2003/05/27.html#item571", + "link": "http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp", + "pubDate": 2003-05-27T08:37:32.000Z, + "title": "The Engine That Does More", + }, + Object { + "description": "Compared to earlier spacecraft, the International Space Station has many luxuries, but laundry facilities are not one of them. Instead, astronauts have other options.", + "id": "http://liftoff.msfc.nasa.gov/2003/05/20.html#item570", + "link": "http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp", + "pubDate": 2003-05-20T08:56:02.000Z, + "title": "Astronauts' Dirty Laundry", + }, + ], + "link": "http://liftoff.msfc.nasa.gov/", + "title": "Liftoff News", + "type": "rss", + "updated": 2003-06-10T09:41:01.000Z, +} +`; diff --git a/packages/fork-htmlparser2/src/__snapshots__/index.spec.ts.snap b/packages/fork-htmlparser2/src/__snapshots__/index.spec.ts.snap new file mode 100644 index 0000000000..2862b8e128 --- /dev/null +++ b/packages/fork-htmlparser2/src/__snapshots__/index.spec.ts.snap @@ -0,0 +1,125 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Index createDomStream 1`] = ` +Array [ + DataNode { + "data": "&This is text", + "endIndex": null, + "next": DataNode { + "data": " and comments ", + "endIndex": null, + "next": , + "parent": null, + "prev": [Circular], + "startIndex": null, + "type": "comment", + }, + "parent": null, + "prev": null, + "startIndex": null, + "type": "text", + }, + DataNode { + "data": " and comments ", + "endIndex": null, + "next": , + "parent": null, + "prev": DataNode { + "data": "&This is text", + "endIndex": null, + "next": [Circular], + "parent": null, + "prev": null, + "startIndex": null, + "type": "text", + }, + "startIndex": null, + "type": "comment", + }, + , +] +`; + +exports[`Index parseDOM 1`] = ` +Array [ + + + + ProcessingInstruction { + "data": "?foo", + "endIndex": null, + "name": "?foo", + "next": DataNode { + "data": "Yay!", + "endIndex": null, + "next": null, + "parent": + [Circular] + [Circular] + , + "prev": [Circular], + "startIndex": null, + "type": "text", + }, + "parent": + [Circular] + DataNode { + "data": "Yay!", + "endIndex": null, + "next": null, + "parent": + [Circular] + [Circular] + , + "prev": [Circular], + "startIndex": null, + "type": "text", + } + , + "prev": null, + "startIndex": null, + "type": "directive", + } + DataNode { + "data": "Yay!", + "endIndex": null, + "next": null, + "parent": + ProcessingInstruction { + "data": "?foo", + "endIndex": null, + "name": "?foo", + "next": [Circular], + "parent": + [Circular] + [Circular] + , + "prev": null, + "startIndex": null, + "type": "directive", + } + [Circular] + , + "prev": ProcessingInstruction { + "data": "?foo", + "endIndex": null, + "name": "?foo", + "next": [Circular], + "parent": + [Circular] + [Circular] + , + "prev": null, + "startIndex": null, + "type": "directive", + }, + "startIndex": null, + "type": "text", + } + + + , +] +`; diff --git a/packages/fork-htmlparser2/src/__tests__/events.ts b/packages/fork-htmlparser2/src/__tests__/events.ts new file mode 100644 index 0000000000..c55cf57124 --- /dev/null +++ b/packages/fork-htmlparser2/src/__tests__/events.ts @@ -0,0 +1,9 @@ +import * as helper from "../__fixtures__/test-helper"; + +helper.createSuite("Events", (test, cb) => + helper.writeToParser( + helper.getEventCollector(cb), + test.options.parser, + test.html + ) +); diff --git a/packages/fork-htmlparser2/src/__tests__/stream.ts b/packages/fork-htmlparser2/src/__tests__/stream.ts new file mode 100644 index 0000000000..6e86e7e736 --- /dev/null +++ b/packages/fork-htmlparser2/src/__tests__/stream.ts @@ -0,0 +1,33 @@ +import * as helper from "../__fixtures__/test-helper"; +import { WritableStream } from "../WritableStream"; +import fs from "fs"; +import path from "path"; + +helper.createSuite("Stream", (test, cb) => { + const filePath = path.join( + __dirname, + "..", + "__fixtures__", + "Documents", + test.file + ); + + fs.createReadStream(filePath) + .pipe( + new WritableStream( + helper.getEventCollector((err, events) => { + cb(err, events); + + const handler = helper.getEventCollector(cb); + const stream = new WritableStream(handler, test.options); + + fs.readFile(filePath, (err, data) => { + if (err) throw err; + stream.end(data); + }); + }), + test.options + ) + ) + .on("error", cb); +}); diff --git a/packages/fork-htmlparser2/src/index.spec.ts b/packages/fork-htmlparser2/src/index.spec.ts new file mode 100644 index 0000000000..fb3489cbe5 --- /dev/null +++ b/packages/fork-htmlparser2/src/index.spec.ts @@ -0,0 +1,36 @@ +import { parseDOM, createDomStream } from "."; +import { Element } from "domhandler"; + +// Add an `attributes` prop to the Element for now, to make it possible for Jest to render DOM nodes. +Object.defineProperty(Element.prototype, "attributes", { + get() { + return Object.keys(this.attribs).map(name => ({ + name, + value: this.attribs[name] + })); + }, + configurable: true, + enumerable: false +}); + +describe("Index", () => { + test("parseDOM", () => { + const dom = parseDOM("Yay!"); + expect(dom).toMatchSnapshot(); + }); + + test("createDomStream", done => { + const domStream = createDomStream((err, dom) => { + expect(err).toBeNull(); + expect(dom).toMatchSnapshot(); + + done(); + }); + + for (const c of "&This is text") { + domStream.write(c); + } + + domStream.end(); + }); +}); diff --git a/packages/fork-htmlparser2/src/index.ts b/packages/fork-htmlparser2/src/index.ts new file mode 100644 index 0000000000..fefee2ec43 --- /dev/null +++ b/packages/fork-htmlparser2/src/index.ts @@ -0,0 +1,77 @@ +import { Parser, ParserOptions } from "./Parser"; +export { Parser, ParserOptions }; + +import { DomHandler, DomHandlerOptions, Node, Element } from "domhandler"; + +export { DomHandler, DomHandlerOptions }; + +type Options = ParserOptions & DomHandlerOptions; + +// Helper methods + +/** + * Parses data, returns the resulting DOM. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM builder. + */ +export function parseDOM(data: string, options?: Options): Node[] { + const handler = new DomHandler(void 0, options); + new Parser(handler, options).end(data); + return handler.dom; +} +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param cb A callback that will be called once parsing has been completed. + * @param options Optional options for the parser and DOM builder. + * @param elementCb An optional callback that will be called every time a tag has been completed inside of the DOM. + */ +export function createDomStream( + cb: (error: Error | null, dom: Node[]) => void, + options?: Options, + elementCb?: (element: Element) => void +) { + const handler = new DomHandler(cb, options, elementCb); + return new Parser(handler, options); +} + +export { default as Tokenizer } from "./Tokenizer"; +import * as ElementType from "domelementtype"; +export { ElementType }; + +/** + * List of all events that the parser emits. + * + * Format: eventname: number of arguments. + */ +export const EVENTS = { + attribute: 2, + cdatastart: 0, + cdataend: 0, + text: 1, + processinginstruction: 2, + comment: 1, + commentend: 0, + closetag: 1, + opentag: 2, + opentagname: 1, + error: 1, + end: 0 +}; + +/* + All of the following exports exist for backwards-compatibility. + They should probably be removed eventually. +*/ + +export * from "./FeedHandler"; +export * from "./WritableStream"; +export * from "./CollectingHandler"; + +import * as DomUtils from "domutils"; +export { DomUtils }; + +// Old names for Dom- & FeedHandler +export { DomHandler as DefaultHandler }; +export { FeedHandler as RssHandler } from "./FeedHandler"; diff --git a/packages/fork-htmlparser2/tsconfig.json b/packages/fork-htmlparser2/tsconfig.json new file mode 100644 index 0000000000..3ebe3a0cb8 --- /dev/null +++ b/packages/fork-htmlparser2/tsconfig.json @@ -0,0 +1,37 @@ +{ + "compilerOptions": { + /* Basic Options */ + "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, + "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, + // "lib": [], /* Specify library files to be included in the compilation. */ + "declaration": true /* Generates corresponding '.d.ts' file. */, + "declarationMap": true /* Generates a sourcemap for each corresponding '.d.ts' file. */, + // "sourceMap": true, /* Generates corresponding '.map' file. */ + "outDir": "lib" /* Redirect output structure to the directory. */, + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + + /* Additional Checks */ + "noUnusedLocals": true /* Report errors on unused locals. */, + "noUnusedParameters": true /* Report errors on unused parameters. */, + "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, + "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, + + /* Module Resolution Options */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + "resolveJsonModule": true, + "typeRoots": [ + "./node_modules/@types", + ], + }, + "include": ["src"], + "exclude": [ + "**/*.spec.ts", + "**/__fixtures__/*", + "**/__tests__/*", + "**/__snapshots__/*" + ] +} diff --git a/packages/fork-sax/.gitignore b/packages/fork-sax/.gitignore new file mode 100644 index 0000000000..8428194c93 --- /dev/null +++ b/packages/fork-sax/.gitignore @@ -0,0 +1,5 @@ +.*.swp +node_modules/* +nyc_output/ +.nyc_output/ +coverage/ diff --git a/packages/fork-sax/.travis.yml b/packages/fork-sax/.travis.yml new file mode 100644 index 0000000000..12f7eeb604 --- /dev/null +++ b/packages/fork-sax/.travis.yml @@ -0,0 +1,12 @@ +language: node_js +sudo: false +node_js: + - 8 + - 6 + - 4 +notifications: + email: false +cache: + directories: + - $HOME/.npm + - node_modules diff --git a/packages/fork-sax/AUTHORS b/packages/fork-sax/AUTHORS new file mode 100644 index 0000000000..7145cbcd99 --- /dev/null +++ b/packages/fork-sax/AUTHORS @@ -0,0 +1,10 @@ +# contributors sorted by whether or not they're me. +Isaac Z. Schlueter +Stein Martin Hustad +Mikeal Rogers +Laurie Harper +Jann Horn +Elijah Insua +Henry Rawas +Justin Makeig +Mike Schilling diff --git a/packages/fork-sax/CONTRIBUTING.md b/packages/fork-sax/CONTRIBUTING.md new file mode 100644 index 0000000000..86b731170c --- /dev/null +++ b/packages/fork-sax/CONTRIBUTING.md @@ -0,0 +1,14 @@ +**NO PATCHES WITHOUT A TEST** + +**TEST MUST PASS WITH THE PATCH.** + +**TEST MUST FAIL WITHOUT THE PATCH.** + +**NO EXCEPTIONS.** + +# EVERY PULL REQUEST MUST HAVE A TEST. + +Seriously. This is a very strict rule, and I will not bend it for any +patch, no matter how minor. + +Write a test. diff --git a/packages/fork-sax/LICENSE b/packages/fork-sax/LICENSE new file mode 100644 index 0000000000..ccffa082c9 --- /dev/null +++ b/packages/fork-sax/LICENSE @@ -0,0 +1,41 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +==== + +`String.fromCodePoint` by Mathias Bynens used according to terms of MIT +License, as follows: + + Copyright Mathias Bynens + + 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/packages/fork-sax/README.md b/packages/fork-sax/README.md new file mode 100644 index 0000000000..71616a10c2 --- /dev/null +++ b/packages/fork-sax/README.md @@ -0,0 +1,254 @@ +* * * + +Fork of sax@1.2.4 for Joplin. + +Patch: + +```diff +diff --git a/node_modules/sax/lib/sax.js b/node_modules/sax/lib/sax.js +index 795d607..ccad5d8 100644 +--- a/node_modules/sax/lib/sax.js ++++ b/node_modules/sax/lib/sax.js +@@ -1040,6 +1040,13 @@ + parser.textNode += c + } + } ++ ++ // Sax is kind of buggy when handling large text node. It has a function to check that ++ // the buffer doesn't run out of space but it doesn't seem to call it for text node. ++ // The result is that parser.textNode reaches 1GB and then the app crashes. So here ++ // we call checkBufferLength to make sure the buffer is cleared and the "text" event ++ // emitted so that the caller can handle memory properly. ++ checkBufferLength(parser); + continue + + case S.SCRIPT: +``` + +* * * + +# sax js + +A sax-style parser for XML and HTML. + +Designed with [node](http://nodejs.org/) in mind, but should work fine in +the browser or other CommonJS implementations. + +## What This Is + +* A very simple tool to parse through an XML string. +* A stepping stone to a streaming HTML parser. +* A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML + docs. + +## What This Is (probably) Not + +* An HTML Parser - That's a fine goal, but this isn't it. It's just + XML. +* A DOM Builder - You can use it to build an object model out of XML, + but it doesn't do that out of the box. +* XSLT - No DOM = no querying. +* 100% Compliant with (some other SAX implementation) - Most SAX + implementations are in Java and do a lot more than this does. +* An XML Validator - It does a little validation when in strict mode, but + not much. +* A Schema-Aware XSD Thing - Schemas are an exercise in fetishistic + masochism. +* A DTD-aware Thing - Fetching DTDs is a much bigger job. + +## Regarding `Hello, world!').close(); + +// stream usage +// takes the same options as the parser +var saxStream = require("sax").createStream(strict, options) +saxStream.on("error", function (e) { + // unhandled errors will throw, since this is a proper node + // event emitter. + console.error("error!", e) + // clear the error + this._parser.error = null + this._parser.resume() +}) +saxStream.on("opentag", function (node) { + // same object as above +}) +// pipe is supported, and it's readable/writable +// same chunks coming in also go out. +fs.createReadStream("file.xml") + .pipe(saxStream) + .pipe(fs.createWriteStream("file-copy.xml")) +``` + + +## Arguments + +Pass the following arguments to the parser function. All are optional. + +`strict` - Boolean. Whether or not to be a jerk. Default: `false`. + +`opt` - Object bag of settings regarding string formatting. All default to `false`. + +Settings supported: + +* `trim` - Boolean. Whether or not to trim text and comment nodes. +* `normalize` - Boolean. If true, then turn any whitespace into a single + space. +* `lowercase` - Boolean. If true, then lowercase tag names and attribute names + in loose mode, rather than uppercasing them. +* `xmlns` - Boolean. If true, then namespaces are supported. +* `position` - Boolean. If false, then don't track line/col/position. +* `strictEntities` - Boolean. If true, only parse [predefined XML + entities](http://www.w3.org/TR/REC-xml/#sec-predefined-ent) + (`&`, `'`, `>`, `<`, and `"`) + +## Methods + +`write` - Write bytes onto the stream. You don't have to do this all at +once. You can keep writing as much as you want. + +`close` - Close the stream. Once closed, no more data may be written until +it is done processing the buffer, which is signaled by the `end` event. + +`resume` - To gracefully handle errors, assign a listener to the `error` +event. Then, when the error is taken care of, you can call `resume` to +continue parsing. Otherwise, the parser will not continue while in an error +state. + +## Members + +At all times, the parser object will have the following members: + +`line`, `column`, `position` - Indications of the position in the XML +document where the parser currently is looking. + +`startTagPosition` - Indicates the position where the current tag starts. + +`closed` - Boolean indicating whether or not the parser can be written to. +If it's `true`, then wait for the `ready` event to write again. + +`strict` - Boolean indicating whether or not the parser is a jerk. + +`opt` - Any options passed into the constructor. + +`tag` - The current tag being dealt with. + +And a bunch of other stuff that you probably shouldn't touch. + +## Events + +All events emit with a single argument. To listen to an event, assign a +function to `on`. Functions get executed in the this-context of +the parser object. The list of supported events are also in the exported +`EVENTS` array. + +When using the stream interface, assign handlers using the EventEmitter +`on` function in the normal fashion. + +`error` - Indication that something bad happened. The error will be hanging +out on `parser.error`, and must be deleted before parsing can continue. By +listening to this event, you can keep an eye on that kind of stuff. Note: +this happens *much* more in strict mode. Argument: instance of `Error`. + +`text` - Text node. Argument: string of text. + +`doctype` - The ``. Argument: +object with `name` and `body` members. Attributes are not parsed, as +processing instructions have implementation dependent semantics. + +`sgmldeclaration` - Random SGML declarations. Stuff like `` +would trigger this kind of event. This is a weird thing to support, so it +might go away at some point. SAX isn't intended to be used to parse SGML, +after all. + +`opentagstart` - Emitted immediately when the tag name is available, +but before any attributes are encountered. Argument: object with a +`name` field and an empty `attributes` set. Note that this is the +same object that will later be emitted in the `opentag` event. + +`opentag` - An opening tag. Argument: object with `name` and `attributes`. +In non-strict mode, tag names are uppercased, unless the `lowercase` +option is set. If the `xmlns` option is set, then it will contain +namespace binding information on the `ns` member, and will have a +`local`, `prefix`, and `uri` member. + +`closetag` - A closing tag. In loose mode, tags are auto-closed if their +parent closes. In strict mode, well-formedness is enforced. Note that +self-closing tags will have `closeTag` emitted immediately after `openTag`. +Argument: tag name. + +`attribute` - An attribute node. Argument: object with `name` and `value`. +In non-strict mode, attribute names are uppercased, unless the `lowercase` +option is set. If the `xmlns` option is set, it will also contains namespace +information. + +`comment` - A comment node. Argument: the string of the comment. + +`opencdata` - The opening tag of a ``) of a `` tags trigger a `"script"` +event, and their contents are not checked for special xml characters. +If you pass `noscript: true`, then this behavior is suppressed. + +## Reporting Problems + +It's best to write a failing test if you find an issue. I will always +accept pull requests with failing tests if they demonstrate intended +behavior, but it is very hard to figure out what issue you're describing +without a test. Writing a test is also the best way for you yourself +to figure out if you really understand the issue you think you have with +sax-js. diff --git a/packages/fork-sax/examples/big-not-pretty.xml b/packages/fork-sax/examples/big-not-pretty.xml new file mode 100644 index 0000000000..fb5265dde1 --- /dev/null +++ b/packages/fork-sax/examples/big-not-pretty.xml @@ -0,0 +1,8002 @@ + + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + diff --git a/packages/fork-sax/examples/example.js b/packages/fork-sax/examples/example.js new file mode 100644 index 0000000000..152ba44ae8 --- /dev/null +++ b/packages/fork-sax/examples/example.js @@ -0,0 +1,28 @@ +var fs = require('fs'), + util = require('util'), + path = require('path'), + xml = fs.readFileSync(path.join(__dirname, 'test.xml'), 'utf8'), + sax = require('../lib/sax'), + strict = sax.parser(true), + loose = sax.parser(false, {trim: true}), + inspector = function (ev) { return function (data) { + console.error('%s %s %j', this.line + ':' + this.column, ev, data) + }} + +sax.EVENTS.forEach(function (ev) { + loose['on' + ev] = inspector(ev) +}) +loose.onend = function () { + console.error('end') + console.error(loose) +} + +// do this in random bits at a time to verify that it works. +(function () { + if (xml) { + var c = Math.ceil(Math.random() * 1000) + loose.write(xml.substr(0, c)) + xml = xml.substr(c) + process.nextTick(arguments.callee) + } else loose.close() +})() diff --git a/packages/fork-sax/examples/get-products.js b/packages/fork-sax/examples/get-products.js new file mode 100644 index 0000000000..897c4c6b4a --- /dev/null +++ b/packages/fork-sax/examples/get-products.js @@ -0,0 +1,58 @@ +// pull out /GeneralSearchResponse/categories/category/items/product tags +// the rest we don't care about. + +var sax = require('../lib/sax.js') +var fs = require('fs') +var path = require('path') +var xmlFile = path.resolve(__dirname, 'shopping.xml') +var util = require('util') +var http = require('http') + +fs.readFile(xmlFile, function (er, d) { + http.createServer(function (req, res) { + if (er) throw er + var xmlstr = d.toString('utf8') + + var parser = sax.parser(true) + var products = [] + var product = null + var currentTag = null + + parser.onclosetag = function (tagName) { + if (tagName === 'product') { + products.push(product) + currentTag = product = null + return + } + if (currentTag && currentTag.parent) { + var p = currentTag.parent + delete currentTag.parent + currentTag = p + } + } + + parser.onopentag = function (tag) { + if (tag.name !== 'product' && !product) return + if (tag.name === 'product') { + product = tag + } + tag.parent = currentTag + tag.children = [] + tag.parent && tag.parent.children.push(tag) + currentTag = tag + } + + parser.ontext = function (text) { + if (currentTag) currentTag.children.push(text) + } + + parser.onend = function () { + var out = util.inspect(products, false, 3, true) + res.writeHead(200, {'content-type': 'application/json'}) + res.end('{"ok":true}') + // res.end(JSON.stringify(products)) + } + + parser.write(xmlstr).end() + }).listen(1337) +}) diff --git a/packages/fork-sax/examples/hello-world.js b/packages/fork-sax/examples/hello-world.js new file mode 100644 index 0000000000..612e057a06 --- /dev/null +++ b/packages/fork-sax/examples/hello-world.js @@ -0,0 +1,4 @@ +require('http').createServer(function (req, res) { + res.writeHead(200, {'content-type': 'application/json'}) + res.end(JSON.stringify({ok: true})) +}).listen(1337) diff --git a/packages/fork-sax/examples/not-pretty.xml b/packages/fork-sax/examples/not-pretty.xml new file mode 100644 index 0000000000..9592852d0c --- /dev/null +++ b/packages/fork-sax/examples/not-pretty.xml @@ -0,0 +1,8 @@ + + something blerm a bit down here diff --git a/packages/fork-sax/examples/pretty-print.js b/packages/fork-sax/examples/pretty-print.js new file mode 100644 index 0000000000..c2f20fdd47 --- /dev/null +++ b/packages/fork-sax/examples/pretty-print.js @@ -0,0 +1,74 @@ +var sax = require('../lib/sax'), + printer = sax.createStream(false, {lowercasetags: true, trim: true}), + fs = require('fs') + +function entity (str) { + return str.replace('"', '"') +} + +printer.tabstop = 2 +printer.level = 0 +printer.indent = function () { + print('\n') + for (var i = this.level; i > 0; i--) { + for (var j = this.tabstop; j > 0; j--) { + print(' ') + } + } +} +printer.on('opentag', function (tag) { + this.indent() + this.level++ + print('<' + tag.name) + for (var i in tag.attributes) { + print(' ' + i + '="' + entity(tag.attributes[i]) + '"') + } + print('>') +}) + +printer.on('text', ontext) +printer.on('doctype', ontext) +function ontext (text) { + this.indent() + print(text) +} + +printer.on('closetag', function (tag) { + this.level-- + this.indent() + print('') +}) + +printer.on('cdata', function (data) { + this.indent() + print('') +}) + +printer.on('comment', function (comment) { + this.indent() + print('') +}) + +printer.on('error', function (error) { + console.error(error) + throw error +}) + +if (!process.argv[2]) { + throw new Error('Please provide an xml file to prettify\n' + + 'TODO: read from stdin or take a file') +} +var xmlfile = require('path').join(process.cwd(), process.argv[2]) +var fstr = fs.createReadStream(xmlfile, { encoding: 'utf8' }) + +function print (c) { + if (!process.stdout.write(c)) { + fstr.pause() + } +} + +process.stdout.on('drain', function () { + fstr.resume() +}) + +fstr.pipe(printer) diff --git a/packages/fork-sax/examples/shopping.xml b/packages/fork-sax/examples/shopping.xml new file mode 100644 index 0000000000..223c6c6656 --- /dev/null +++ b/packages/fork-sax/examples/shopping.xml @@ -0,0 +1,2 @@ + +sandbox3.1 r31.Kadu4DC.phase357782011.10.06 15:37:23 PSTp2.a121bc2aaf029435dce62011-10-21T18:38:45.982-04:00P0Y0M0DT0H0M0.169S1112You are currently using the SDC API sandbox environment! No clicks to merchant URLs from this response will be paid. Please change the host of your API requests to 'publisher.api.shopping.com' when you have finished development and testinghttp://statTest.dealtime.com/pixel/noscript?PV_EvnTyp=APPV&APPV_APITSP=10%2F21%2F11_06%3A38%3A45_PM&APPV_DSPRQSID=p2.a121bc2aaf029435dce6&APPV_IMGURL=http://img.shopping.com/sc/glb/sdc_logo_106x19.gif&APPV_LI_LNKINID=7000610&APPV_LI_SBMKYW=nikon&APPV_MTCTYP=1000&APPV_PRTID=2002&APPV_BrnID=14804http://www.shopping.com/digital-cameras/productsDigital CamerasDigital CamerasElectronicshttp://www.shopping.com/xCH-electronics-nikon~linkin_id-7000610?oq=nikonCameras and Photographyhttp://www.shopping.com/xCH-cameras_and_photography-nikon~linkin_id-7000610?oq=nikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610nikonnikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610Nikon D3100 Digital Camera14.2 Megapixel, SLR Camera, 3 in. LCD Screen, With High Definition Video, Weight: 1 lb.The Nikon D3100 digital SLR camera speaks to the growing ranks of enthusiastic D-SLR users and aspiring photographers by providing an easy-to-use and affordable entrance to the world of Nikon D-SLR’s. The 14.2-megapixel D3100 has powerful features, such as the enhanced Guide Mode that makes it easy to unleash creative potential and capture memories with still images and full HD video. Like having a personal photo tutor at your fingertips, this unique feature provides a simple graphical interface on the camera’s LCD that guides users by suggesting and/or adjusting camera settings to achieve the desired end result images. The D3100 is also the world’s first D-SLR to introduce full time auto focus (AF) in Live View and D-Movie mode to effortlessly achieve the critical focus needed when shooting Full HD 1080p video.http://di1.shopping.com/images/pi/93/bc/04/101677489-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-606x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=194.56http://img.shopping.com/sc/pr/sdc_stars_sm_4.5.gifhttp://www.shopping.com/Nikon-D3100/reviews~linkin_id-7000610429.001360.00http://www.shopping.com/Nikon-D3100/prices~linkin_id-7000610http://www.shopping.com/Nikon-D3100/info~linkin_id-7000610Nikon D3100 Digital SLR Camera with 18-55mm NIKKOR VR LensThe Nikon D3100 Digital SLR Camera is an affordable compact and lightweight photographic power-house. It features the all-purpose 18-55mm VR lens a high-resolution 14.2 MP CMOS sensor along with a feature set that's comprehensive yet easy to navigate - the intuitive onboard learn-as-you grow guide mode allows the photographer to understand what the 3100 can do quickly and easily. Capture beautiful pictures and amazing Full HD 1080p movies with sound and full-time autofocus. Availabilty: In Stock!7185Nikonhttp://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFree Shipping with Any Purchase!529.000.00799.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=-ZW6BMZqz6fbS-aULwga_g%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F343.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+Digital+SLR+Camera+with+18-55mm+NIKKOR+VR+Lens&dlprc=529.0&crn=&istrsmrc=1&isathrsl=0&AR=1&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=1&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF343C5Nikon Nikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR, CamerasNikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR7185Nikonhttp://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-385x352-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock549.000.00549.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=779&BEFID=7185&aon=%5E1&MerchantID=305814&crawler_id=305814&dealId=md1e9lD8vdOu4FHQfJqKng%3D%3D&url=http%3A%2F%2Fwww.electronics-expo.com%2Findex.php%3Fpage%3Ditem%26id%3DNIKD3100%26source%3DSideCar%26scpid%3D8%26scid%3Dscsho318727%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Nikon+D3100+14.2MP+Digital+SLR+Camera+with+18-55mm+f%2F3.5-5.6+AF-S+DX+VR%2C+Cameras&dlprc=549.0&crn=&istrsmrc=1&isathrsl=0&AR=9&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=9&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=771&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Electronics Expohttp://img.shopping.com/cctool/merch_logos/305814.gif1-888-707-EXPO3713.90http://img.shopping.com/sc/mr/sdc_checks_4.gifhttp://www.shopping.com/xMR-store_electronics_expo~MRD-305814~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSNIKD3100Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, BlackSplit-second shutter response captures shots other cameras may have missed Helps eliminate the frustration of shutter delay! 14.2-megapixels for enlargements worth framing and hanging. Takes breathtaking 1080p HD movies. ISO sensitivity from 100-1600 for bright or dimly lit settings. 3.0in. color LCD for beautiful, wide-angle framing and viewing. In-camera image editing lets you retouch with no PC. Automatic scene modes include Child, Sports, Night Portrait and more. Accepts SDHC memory cards. Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, Black is one of many Digital SLR Cameras available through Office Depot. Made by Nikon.7185Nikonhttp://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-250x250-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock549.990.00699.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=698&BEFID=7185&aon=%5E1&MerchantID=467671&crawler_id=467671&dealId=yYuaXnDFtCY7rDUjkY2aaw%3D%3D&url=http%3A%2F%2Flink.mercent.com%2Fredirect.ashx%3Fmr%3AmerchantID%3DOfficeDepot%26mr%3AtrackingCode%3DCEC9669E-6ABC-E011-9F24-0019B9C043EB%26mr%3AtargetUrl%3Dhttp%3A%2F%2Fwww.officedepot.com%2Fa%2Fproducts%2F486292%2FNikon-D3100-142-Megapixel-Digital-SLR%2F%253fcm_mmc%253dMercent-_-Shopping-_-Cameras_and_Camcorders-_-486292&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+14.2-Megapixel+Digital+SLR+Camera+With+18-55mm+Zoom-Nikkor+Lens%2C+Black&dlprc=549.99&crn=&istrsmrc=1&isathrsl=0&AR=10&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=10&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=690&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Office Depothttp://img.shopping.com/cctool/merch_logos/467671.gif1-800-GO-DEPOT1352.37http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_office_depot_4158555~MRD-467671~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS486292Nikon® D3100™ 14.2MP Digital SLR with 18-55mm LensThe Nikon D3100 DSLR will surprise you with its simplicity and impress you with superb results.7185Nikonhttp://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock549.996.05549.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=Rl56U7CuiTYsH4MGZ02lxQ%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D903483107%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D3100%E2%84%A2+14.2MP+Digital+SLR+with+18-55mm+Lens&dlprc=549.99&crn=&istrsmrc=0&isathrsl=0&AR=11&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=11&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS9614867Nikon D3100 SLR w/Nikon 18-55mm VR & 55-200mm VR Lenses14.2 Megapixels3" LCDLive ViewHD 1080p Video w/ Sound & Autofocus11-point Autofocus3 Frames per Second ShootingISO 100 to 3200 (Expand to 12800-Hi2)Self Cleaning SensorEXPEED 2, Image Processing EngineScene Recognition System7185Nikonhttp://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-345x345-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stock695.000.00695.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=huS6xZKDKaKMTMP71eI6DA%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D32983%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+SLR+w%2FNikon+18-55mm+VR+%26+55-200mm+VR+Lenses&dlprc=695.0&crn=&istrsmrc=0&isathrsl=0&AR=15&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=15&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS32983Nikon COOLPIX S203 Digital Camera10 Megapixel, Ultra-Compact Camera, 2.5 in. LCD Screen, 3x Optical Zoom, With Video Capability, Weight: 0.23 lb.With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.http://di1.shopping.com/images/pi/c4/ef/1b/95397883-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-500x499-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=20139.00139.00http://www.shopping.com/Nikon-Coolpix-S203/prices~linkin_id-7000610http://www.shopping.com/Nikon-Coolpix-S203/info~linkin_id-7000610Nikon Coolpix S203 Digital Camera (Red)With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.7185Nikonhttp://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFantastic prices with ease & comfort of Amazon.com!139.009.50139.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=sBd2JnIEPM-A_lBAM1RZgQ%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB002T964IM%2Fref%3Dasc_df_B002T964IM1751618%3Fsmid%3DA22UHVNXG98FAT%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB002T964IM&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S203+Digital+Camera+%28Red%29&dlprc=139.0&crn=&istrsmrc=0&isathrsl=0&AR=63&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=95397883&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=63&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=518&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB002T964IMNikon S3100 Digital Camera14.5 Megapixel, Compact Camera, 2.7 in. LCD Screen, 5x Optical Zoom, With High Definition Video, Weight: 0.23 lb.This digital camera features a wide-angle optical Zoom-NIKKOR glass lens that allows you to capture anything from landscapes to portraits to action shots. The high-definition movie mode with one-touch recording makes it easy to capture video clips.http://di1.shopping.com/images/pi/66/2d/33/106834268-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-507x387-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=312.00http://img.shopping.com/sc/pr/sdc_stars_sm_2.gifhttp://www.shopping.com/nikon-s3100/reviews~linkin_id-700061099.95134.95http://www.shopping.com/nikon-s3100/prices~linkin_id-7000610http://www.shopping.com/nikon-s3100/info~linkin_id-7000610CoolPix S3100 14 Megapixel Compact Digital Camera- RedNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - red7185Nikonhttp://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=UUyGoqV8r0-xrkn-rnGNbg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJ3Yx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmDAJeU1oyGG0GcBdhGwUGCAVqYF9SO0xSN1sZdmA7dmMdBQAJB24qX1NbQxI6AjA2ME5dVFULPDsGPFcQTTdaLTA6SR0OFlQvPAwMDxYcYlxIVkcoLTcCDA%3D%3D%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=CoolPix+S3100+14+Megapixel+Compact+Digital+Camera-+Red&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=28&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=28&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337013000COOLPIX S3100 PinkNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - pink7185Nikonhttp://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=X87AwXlW1dXoMXk4QQDToQ%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJxYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGsPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Pink&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=31&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=31&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337015000Nikon Coolpix S3100 14.0 MP Digital Camera - SilverNikon Coolpix S3100 14.0 MP Digital Camera - Silver7185Nikonhttp://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-270x270-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock109.970.00109.97http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=803&BEFID=7185&aon=%5E&MerchantID=475774&crawler_id=475774&dealId=nvFwnpfA4rlA1Dbksdsa0w%3D%3D&url=http%3A%2F%2Fwww.thewiz.com%2Fcatalog%2Fproduct.jsp%3FmodelNo%3DS3100SILVER%26gdftrk%3DgdfV2677_a_7c996_a_7c4049_a_7c26262&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S3100+14.0+MP+Digital+Camera+-+Silver&dlprc=109.97&crn=&istrsmrc=0&isathrsl=0&AR=33&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=33&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=797&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=TheWiz.comhttp://img.shopping.com/cctool/merch_logos/475774.gif877-542-69880http://img.shopping.com/sc/glb/flag/US.gifUS26262Nikon� COOLPIX� S3100 14MP Digital Camera (Silver)The Nikon COOLPIX S3100 is the easy way to share your life and stay connected.7185Nikonhttp://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock119.996.05119.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=5GtaN2NeryKwps-Se2l-4g%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D848064082%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C3%AF%C2%BF%C2%BD+COOLPIX%C3%AF%C2%BF%C2%BD+S3100+14MP+Digital+Camera+%28Silver%29&dlprc=119.99&crn=&istrsmrc=0&isathrsl=0&AR=37&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=37&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=509&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10101095COOLPIX S3100 YellowNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - yellow7185Nikonhttp://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=a43m0RXulX38zCnQjU59jw%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJwYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGoPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Yellow&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=38&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=38&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337014000Nikon D90 Digital Camera12.3 Megapixel, Point and Shoot Camera, 3 in. LCD Screen, With Video Capability, Weight: 1.36 lb.Untitled Document Nikon D90 SLR Digital Camera With 28-80mm 75-300mm Lens Kit The Nikon D90 SLR Digital Camera, with its 12.3-megapixel DX-format CMOS, 3" High resolution LCD display, Scene Recognition System, Picture Control, Active D-Lighting, and one-button Live View, provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera.http://di1.shopping.com/images/pi/52/fb/d3/99671132-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-499x255-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=475.00http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-270mm-Lens/reviews~linkin_id-7000610689.002299.00http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/info~linkin_id-7000610Nikon® D90 12.3MP Digital SLR Camera (Body Only)The Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock1015.996.051015.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=GU5JJkpUAxe5HujB7fkwAA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D851830266%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=1015.99&crn=&istrsmrc=0&isathrsl=0&AR=14&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=14&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10148659Nikon D90 SLR Digital Camera (Camera Body)The Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CCD 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera. In addition the D90 introduces the D-Movie mode allowing for the first time an interchangeable lens SLR camera that is capable of recording 720p HD movie clips. Availabilty: In Stock7185Nikonhttp://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockFree Shipping with Any Purchase!689.000.00900.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=XhURuSC-spBbTIDfo4qfzQ%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F169.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+Digital+Camera+%28Camera+Body%29&dlprc=689.0&crn=&istrsmrc=1&isathrsl=0&AR=16&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=16&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF169C5Nikon D90 SLR w/Nikon 18-105mm VR & 55-200mm VR Lenses12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock1189.000.001189.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=o0Px_XLWDbrxAYRy3rCmyQ%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30619%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+%26+55-200mm+VR+Lenses&dlprc=1189.0&crn=&istrsmrc=0&isathrsl=0&AR=20&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=20&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS30619Nikon D90 12.3 Megapixel Digital SLR Camera (Body Only)Fusing 12.3 megapixel image quality and a cinematic 24fps D-Movie Mode, the Nikon D90 exceeds the demands of passionate photographers. Coupled with Nikon's EXPEED image processing technologies and NIKKOR optics, breathtaking image fidelity is assured. Combined with fast 0.15ms power-up and split-second 65ms shooting lag, dramatic action and decisive moments are captured easily. Effective 4-frequency, ultrasonic sensor cleaning frees image degrading dust particles from the sensor's optical low pass filter.7185Nikonhttp://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stockFREE FEDEX 2-3 DAY DELIVERY899.950.00899.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=269&BEFID=7185&aon=%5E&MerchantID=9296&crawler_id=811558&dealId=4HgbWJSJ8ssgIf8B0MXIwA%3D%3D&url=http%3A%2F%2Fwww.pcnation.com%2Foptics-gallery%2Fdetails.asp%3Faffid%3D305%26item%3D2N145P&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3+Megapixel+Digital+SLR+Camera+%28Body+Only%29&dlprc=899.95&crn=&istrsmrc=1&isathrsl=0&AR=21&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=21&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=257&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=PCNationhttp://img.shopping.com/cctool/merch_logos/9296.gif800-470-707916224.43http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_pcnation_9689~MRD-9296~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS2N145PNikon D90 12.3MP Digital SLR Camera (Body Only)Fusing 12.3-megapixel image quality inherited from the award-winning D300 with groundbreaking features, the D90's breathtaking, low-noise image quality is further advanced with EXPEED image processing. Split-second shutter response and continuous shooting at up to 4.5 frames-per-second provide the power to capture fast action and precise moments perfectly, while Nikon's exclusive Scene Recognition System contributes to faster 11-area autofocus performance, finer white balance detection and more. The D90 delivers the control passionate photographers demand, utilizing comprehensive exposure functions and the intelligence of 3D Color Matrix Metering II. Stunning results come to life on a 3-inch 920,000-dot color LCD monitor, providing accurate image review, Live View composition and brilliant playback of the D90's cinematic-quality 24-fps HD D-Movie mode.7185Nikonhttp://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockFantastic prices with ease & comfort of Amazon.com!780.000.00780.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=UNDa3uMDZXOnvD_7sTILYg%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB001ET5U92%2Fref%3Dasc_df_B001ET5U921751618%3Fsmid%3DAHF4SYKP09WBH%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB001ET5U92&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=780.0&crn=&istrsmrc=0&isathrsl=0&AR=29&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=29&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=520&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB001ET5U92Nikon D90 Digital Camera with 18-105mm lens12.9 Megapixel, SLR Camera, 3 in. LCD Screen, 5.8x Optical Zoom, With Video Capability, Weight: 2.3 lb.Its 12.3 megapixel DX-format CMOS image sensor and EXPEED image processing system offer outstanding image quality across a wide ISO light sensitivity range. Live View mode lets you compose and shoot via the high-resolution 3-inch LCD monitor, and an advanced Scene Recognition System and autofocus performance help capture images with astounding accuracy. Movies can be shot in Motion JPEG format using the D-Movie function. The camera’s large image sensor ensures exceptional movie image quality and you can create dramatic effects by shooting with a wide range of interchangeable NIKKOR lenses, from wide-angle to macro to fisheye, or by adjusting the lens aperture and experimenting with depth-of-field. The D90 – designed to fuel your passion for photography.http://di1.shopping.com/images/pi/57/6a/4f/70621646-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-490x489-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5324.81http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-105mm-lens/reviews~linkin_id-7000610849.951599.95http://www.shopping.com/Nikon-D90-with-18-105mm-lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-105mm-lens/info~linkin_id-7000610Nikon D90 18-105mm VR LensThe Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CMOS 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View prov7185Nikonhttp://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-260x260-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock849.950.00849.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=419&BEFID=7185&aon=%5E1&MerchantID=9390&crawler_id=1905054&dealId=3o5e1VghgJPfhLvT1JFKTA%3D%3D&url=http%3A%2F%2Fwww.ajrichard.com%2FNikon-D90-18-105mm-VR-Lens%2Fp-292%3Frefid%3DShopping%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+18-105mm+VR+Lens&dlprc=849.95&crn=&istrsmrc=0&isathrsl=0&AR=2&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=2&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=425&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=AJRichardhttp://img.shopping.com/cctool/merch_logos/9390.gif1-888-871-125631244.48http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_ajrichard~MRD-9390~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS292Nikon D90 SLR w/Nikon 18-105mm VR Lens12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock909.000.00909.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=_lYWj_jbwfsSkfcwUcDuww%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30971%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+Lens&dlprc=909.0&crn=&istrsmrc=0&isathrsl=0&AR=3&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=3&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS3097125448/D90 12.3 Megapixel Digital Camera 18-105mm Zoom Lens w/ 3" Screen - BlackNikon D90 - Digital camera - SLR - 12.3 Mpix - Nikon AF-S DX 18-105mm lens - optical zoom: 5.8 x - supported memory: SD, SDHC7185Nikonhttp://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stockGet 30 days FREE SHIPPING w/ ShipVantage1199.008.201199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=1KCclCGuWvty2XKU9skadg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBRtFXpzYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcVlhCGGkPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=25448%2FD90+12.3+Megapixel+Digital+Camera+18-105mm+Zoom+Lens+w%2F+3%22+Screen+-+Black&dlprc=1199.0&crn=&istrsmrc=1&isathrsl=0&AR=4&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=4&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=586&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00353197000Nikon® D90 12.3MP Digital SLR with 18-105mm LensThe Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock1350.996.051350.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=3-VOSfVV5Jo7HlA4kJtanA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D982673361%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+with+18-105mm+Lens&dlprc=1350.99&crn=&istrsmrc=0&isathrsl=0&AR=5&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=5&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS11148905Nikon D90 Kit 12.3-megapixel Digital SLR with 18-105mm VR LensPhotographers, take your passion further!Now is the time for new creativity, and to rethink what a digital SLR camera can achieve. It's time for the D90, a camera with everything you would expect from Nikon's next-generation D-SLRs, and some unexpected surprises, as well. The stunning image quality is inherited from the D300, Nikon's DX-format flagship. The D90 also has Nikon's unmatched ergonomics and high performance, and now takes high-quality movies with beautifully cinematic results. The world of photography has changed, and with the D90 in your hands, it's time to make your own rules.AF-S DX NIKKOR 18-105mm f/3.5-5.6G ED VR LensWide-ratio 5.8x zoom Compact, versatile and ideal for a broad range of shooting situations, ranging from interiors and landscapes to beautiful portraits� a perfect everyday zoom. Nikon VR (Vibration Reduction) image stabilization Vibration Reduction is engineered specifically for each VR NIKKOR lens and enables handheld shooting at up to 3 shutter speeds slower than would7185Nikonhttp://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x232-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockShipping Included!1050.000.001199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=135&BEFID=7185&aon=%5E1&MerchantID=313162&crawler_id=313162&dealId=kQnB6rS4AjN5dx5h2_631g%3D%3D&url=http%3A%2F%2Fonecall.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1pZSxNoWHFwLx8GTAICa2ZeH1sPXTZLNzRpAh1HR0BxPQEGCBJNMhFHUElsFCFCVkVTTHAcBggEHQ4aHXNpGERGH3RQODsbAgdechJtbBt8fx8JAwhtZFAzJj1oGgIWCxRlNyFOUV9UUGIxBgo0T0IyTSYqJ0RWHw4QPCIBAAQXRGMDICg6TllZVBhh%26nAID%3D13736960&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+Kit+12.3-megapixel+Digital+SLR+with+18-105mm+VR+Lens&dlprc=1050.0&crn=&istrsmrc=1&isathrsl=0&AR=6&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=6&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=1&code=&acode=143&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=OneCallhttp://img.shopping.com/cctool/merch_logos/313162.gif1.800.398.07661804.44http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_onecall_9689~MRD-313162~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS92826Price rangehttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610$24 - $4012http://www.shopping.com/digital-cameras/nikon/products?minPrice=24&maxPrice=4012&linkin_id=7000610$4012 - $7999http://www.shopping.com/digital-cameras/nikon/products?minPrice=4012&maxPrice=7999&linkin_id=7000610Brandhttp://www.shopping.com/digital-cameras/nikon/products~all-9688-brand~MS-1?oq=nikon&linkin_id=7000610Nikonhttp://www.shopping.com/digital-cameras/nikon+brand-nikon/products~linkin_id-7000610Cranehttp://www.shopping.com/digital-cameras/nikon+9688-brand-crane/products~linkin_id-7000610Ikelitehttp://www.shopping.com/digital-cameras/nikon+ikelite/products~linkin_id-7000610Bowerhttp://www.shopping.com/digital-cameras/nikon+bower/products~linkin_id-7000610FUJIFILMhttp://www.shopping.com/digital-cameras/nikon+brand-fuji/products~linkin_id-7000610Storehttp://www.shopping.com/digital-cameras/nikon/products~all-store~MS-1?oq=nikon&linkin_id=7000610Amazon Marketplacehttp://www.shopping.com/digital-cameras/nikon+store-amazon-marketplace-9689/products~linkin_id-7000610Amazonhttp://www.shopping.com/digital-cameras/nikon+store-amazon/products~linkin_id-7000610Adoramahttp://www.shopping.com/digital-cameras/nikon+store-adorama/products~linkin_id-7000610J&R Music and Computer Worldhttp://www.shopping.com/digital-cameras/nikon+store-j-r-music-and-computer-world/products~linkin_id-7000610RytherCamera.comhttp://www.shopping.com/digital-cameras/nikon+store-rythercamera-com/products~linkin_id-7000610Resolutionhttp://www.shopping.com/digital-cameras/nikon/products~all-21885-resolution~MS-1?oq=nikon&linkin_id=7000610Under 4 Megapixelhttp://www.shopping.com/digital-cameras/nikon+under-4-megapixel/products~linkin_id-7000610At least 5 Megapixelhttp://www.shopping.com/digital-cameras/nikon+5-megapixel-digital-cameras/products~linkin_id-7000610At least 6 Megapixelhttp://www.shopping.com/digital-cameras/nikon+6-megapixel-digital-cameras/products~linkin_id-7000610At least 7 Megapixelhttp://www.shopping.com/digital-cameras/nikon+7-megapixel-digital-cameras/products~linkin_id-7000610At least 8 Megapixelhttp://www.shopping.com/digital-cameras/nikon+8-megapixel-digital-cameras/products~linkin_id-7000610Featureshttp://www.shopping.com/digital-cameras/nikon/products~all-32804-features~MS-1?oq=nikon&linkin_id=7000610Shockproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-shockproof/products~linkin_id-7000610Waterproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-waterproof/products~linkin_id-7000610Freezeproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-freezeproof/products~linkin_id-7000610Dust proofhttp://www.shopping.com/digital-cameras/nikon+32804-features-dust-proof/products~linkin_id-7000610Image Stabilizationhttp://www.shopping.com/digital-cameras/nikon+32804-features-image-stabilization/products~linkin_id-7000610hybriddigital camerag1sonycameracanonnikonkodak digital camerakodaksony cybershotkodak easyshare digital cameranikon coolpixolympuspink digital cameracanon powershot \ No newline at end of file diff --git a/packages/fork-sax/examples/test.html b/packages/fork-sax/examples/test.html new file mode 100644 index 0000000000..61f8f1ab91 --- /dev/null +++ b/packages/fork-sax/examples/test.html @@ -0,0 +1,15 @@ + + + + + testing the parser + + + +

hello + + + + diff --git a/packages/fork-sax/examples/test.xml b/packages/fork-sax/examples/test.xml new file mode 100644 index 0000000000..801292d7f2 --- /dev/null +++ b/packages/fork-sax/examples/test.xml @@ -0,0 +1,1254 @@ + + +]> + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + \ No newline at end of file diff --git a/packages/fork-sax/lib/sax.js b/packages/fork-sax/lib/sax.js new file mode 100644 index 0000000000..ccad5d89f1 --- /dev/null +++ b/packages/fork-sax/lib/sax.js @@ -0,0 +1,1572 @@ +;(function (sax) { // wrapper for non-node envs + sax.parser = function (strict, opt) { return new SAXParser(strict, opt) } + sax.SAXParser = SAXParser + sax.SAXStream = SAXStream + sax.createStream = createStream + + // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns. + // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)), + // since that's the earliest that a buffer overrun could occur. This way, checks are + // as rare as required, but as often as necessary to ensure never crossing this bound. + // Furthermore, buffers are only tested at most once per write(), so passing a very + // large string into write() might have undesirable effects, but this is manageable by + // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme + // edge case, result in creating at most one complete copy of the string passed in. + // Set to Infinity to have unlimited buffers. + sax.MAX_BUFFER_LENGTH = 64 * 1024 + + var buffers = [ + 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype', + 'procInstName', 'procInstBody', 'entity', 'attribName', + 'attribValue', 'cdata', 'script' + ] + + sax.EVENTS = [ + 'text', + 'processinginstruction', + 'sgmldeclaration', + 'doctype', + 'comment', + 'opentagstart', + 'attribute', + 'opentag', + 'closetag', + 'opencdata', + 'cdata', + 'closecdata', + 'error', + 'end', + 'ready', + 'script', + 'opennamespace', + 'closenamespace' + ] + + function SAXParser (strict, opt) { + if (!(this instanceof SAXParser)) { + return new SAXParser(strict, opt) + } + + var parser = this + clearBuffers(parser) + parser.q = parser.c = '' + parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH + parser.opt = opt || {} + parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags + parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase' + parser.tags = [] + parser.closed = parser.closedRoot = parser.sawRoot = false + parser.tag = parser.error = null + parser.strict = !!strict + parser.noscript = !!(strict || parser.opt.noscript) + parser.state = S.BEGIN + parser.strictEntities = parser.opt.strictEntities + parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES) + parser.attribList = [] + + // namespaces form a prototype chain. + // it always points at the current tag, + // which protos to its parent tag. + if (parser.opt.xmlns) { + parser.ns = Object.create(rootNS) + } + + // mostly just for error reporting + parser.trackPosition = parser.opt.position !== false + if (parser.trackPosition) { + parser.position = parser.line = parser.column = 0 + } + emit(parser, 'onready') + } + + if (!Object.create) { + Object.create = function (o) { + function F () {} + F.prototype = o + var newf = new F() + return newf + } + } + + if (!Object.keys) { + Object.keys = function (o) { + var a = [] + for (var i in o) if (o.hasOwnProperty(i)) a.push(i) + return a + } + } + + function checkBufferLength (parser) { + var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10) + var maxActual = 0 + for (var i = 0, l = buffers.length; i < l; i++) { + var len = parser[buffers[i]].length + if (len > maxAllowed) { + // Text/cdata nodes can get big, and since they're buffered, + // we can get here under normal conditions. + // Avoid issues by emitting the text node now, + // so at least it won't get any bigger. + switch (buffers[i]) { + case 'textNode': + closeText(parser) + break + + case 'cdata': + emitNode(parser, 'oncdata', parser.cdata) + parser.cdata = '' + break + + case 'script': + emitNode(parser, 'onscript', parser.script) + parser.script = '' + break + + default: + error(parser, 'Max buffer length exceeded: ' + buffers[i]) + } + } + maxActual = Math.max(maxActual, len) + } + // schedule the next check for the earliest possible buffer overrun. + var m = sax.MAX_BUFFER_LENGTH - maxActual + parser.bufferCheckPosition = m + parser.position + } + + function clearBuffers (parser) { + for (var i = 0, l = buffers.length; i < l; i++) { + parser[buffers[i]] = '' + } + } + + function flushBuffers (parser) { + closeText(parser) + if (parser.cdata !== '') { + emitNode(parser, 'oncdata', parser.cdata) + parser.cdata = '' + } + if (parser.script !== '') { + emitNode(parser, 'onscript', parser.script) + parser.script = '' + } + } + + SAXParser.prototype = { + end: function () { end(this) }, + write: write, + resume: function () { this.error = null; return this }, + close: function () { return this.write(null) }, + flush: function () { flushBuffers(this) } + } + + var Stream + try { + Stream = require('stream').Stream + } catch (ex) { + Stream = function () {} + } + + var streamWraps = sax.EVENTS.filter(function (ev) { + return ev !== 'error' && ev !== 'end' + }) + + function createStream (strict, opt) { + return new SAXStream(strict, opt) + } + + function SAXStream (strict, opt) { + if (!(this instanceof SAXStream)) { + return new SAXStream(strict, opt) + } + + Stream.apply(this) + + this._parser = new SAXParser(strict, opt) + this.writable = true + this.readable = true + + var me = this + + this._parser.onend = function () { + me.emit('end') + } + + this._parser.onerror = function (er) { + me.emit('error', er) + + // if didn't throw, then means error was handled. + // go ahead and clear error, so we can write again. + me._parser.error = null + } + + this._decoder = null + + streamWraps.forEach(function (ev) { + Object.defineProperty(me, 'on' + ev, { + get: function () { + return me._parser['on' + ev] + }, + set: function (h) { + if (!h) { + me.removeAllListeners(ev) + me._parser['on' + ev] = h + return h + } + me.on(ev, h) + }, + enumerable: true, + configurable: false + }) + }) + } + + SAXStream.prototype = Object.create(Stream.prototype, { + constructor: { + value: SAXStream + } + }) + + SAXStream.prototype.write = function (data) { + if (typeof Buffer === 'function' && + typeof Buffer.isBuffer === 'function' && + Buffer.isBuffer(data)) { + if (!this._decoder) { + var SD = require('string_decoder').StringDecoder + this._decoder = new SD('utf8') + } + data = this._decoder.write(data) + } + + this._parser.write(data.toString()) + this.emit('data', data) + return true + } + + SAXStream.prototype.end = function (chunk) { + if (chunk && chunk.length) { + this.write(chunk) + } + this._parser.end() + return true + } + + SAXStream.prototype.on = function (ev, handler) { + var me = this + if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) { + me._parser['on' + ev] = function () { + var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments) + args.splice(0, 0, ev) + me.emit.apply(me, args) + } + } + + return Stream.prototype.on.call(me, ev, handler) + } + + // this really needs to be replaced with character classes. + // XML allows all manner of ridiculous numbers and digits. + var CDATA = '[CDATA[' + var DOCTYPE = 'DOCTYPE' + var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace' + var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/' + var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE } + + // http://www.w3.org/TR/REC-xml/#NT-NameStartChar + // This implementation works on strings, a single character at a time + // as such, it cannot ever support astral-plane characters (10000-EFFFF) + // without a significant breaking change to either this parser, or the + // JavaScript language. Implementation of an emoji-capable xml parser + // is left as an exercise for the reader. + var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ + + var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/ + + var entityStart = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ + var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/ + + function isWhitespace (c) { + return c === ' ' || c === '\n' || c === '\r' || c === '\t' + } + + function isQuote (c) { + return c === '"' || c === '\'' + } + + function isAttribEnd (c) { + return c === '>' || isWhitespace(c) + } + + function isMatch (regex, c) { + return regex.test(c) + } + + function notMatch (regex, c) { + return !isMatch(regex, c) + } + + var S = 0 + sax.STATE = { + BEGIN: S++, // leading byte order mark or whitespace + BEGIN_WHITESPACE: S++, // leading whitespace + TEXT: S++, // general stuff + TEXT_ENTITY: S++, // & and such. + OPEN_WAKA: S++, // < + SGML_DECL: S++, // + SCRIPT: S++, // ', + expect: [ + [ 'opentagstart', { name: 'xml', attributes: {} } ], + [ 'opentag', { name: 'xml', attributes: {}, isSelfClosing: false } ], + [ 'opentagstart', { name: 'script', attributes: {} } ], + [ 'opentag', { name: 'script', attributes: {}, isSelfClosing: false } ], + [ 'text', 'hello world' ], + [ 'closetag', 'script' ], + [ 'closetag', 'xml' ] + ], + strict: false, + opt: { lowercasetags: true, noscript: true } +}) + +require(__dirname).test({ + xml: '', + expect: [ + [ 'opentagstart', { name: 'xml', attributes: {} } ], + [ 'opentag', { name: 'xml', attributes: {}, isSelfClosing: false } ], + [ 'opentagstart', { name: 'script', attributes: {} } ], + [ 'opentag', { name: 'script', attributes: {}, isSelfClosing: false } ], + [ 'opencdata', undefined ], + [ 'cdata', 'hello world' ], + [ 'closecdata', undefined ], + [ 'closetag', 'script' ], + [ 'closetag', 'xml' ] + ], + strict: false, + opt: { lowercasetags: true, noscript: true } +}) diff --git a/packages/fork-sax/test/issue-84.js b/packages/fork-sax/test/issue-84.js new file mode 100644 index 0000000000..9a2195e353 --- /dev/null +++ b/packages/fork-sax/test/issue-84.js @@ -0,0 +1,13 @@ +// https://github.com/isaacs/sax-js/issues/49 +require(__dirname).test({ + xml: 'body', + expect: [ + [ 'processinginstruction', { name: 'has', body: 'unbalanced "quotes' } ], + [ 'opentagstart', { name: 'xml', attributes: {} } ], + [ 'opentag', { name: 'xml', attributes: {}, isSelfClosing: false } ], + [ 'text', 'body' ], + [ 'closetag', 'xml' ] + ], + strict: false, + opt: { lowercasetags: true, noscript: true } +}) diff --git a/packages/fork-sax/test/issue-86.js b/packages/fork-sax/test/issue-86.js new file mode 100644 index 0000000000..00e27d5bb0 --- /dev/null +++ b/packages/fork-sax/test/issue-86.js @@ -0,0 +1,85 @@ +require(__dirname).test({ + xml: 'abcdeabcdey') +parser.write(xml).close() diff --git a/packages/fork-sax/test/opentagstart.js b/packages/fork-sax/test/opentagstart.js new file mode 100644 index 0000000000..6aeb019395 --- /dev/null +++ b/packages/fork-sax/test/opentagstart.js @@ -0,0 +1,86 @@ +require(__dirname).test({ + xml: "", + expect: [ + [ + 'opentagstart', + { + name: 'root', + ns: {}, + attributes: {} + } + ], + [ + 'attribute', + { + name: 'length', + value: '12345', + prefix: '', + local: 'length', + uri: '' + } + ], + [ + 'opentag', + { + name: 'root', + prefix: '', + local: 'root', + uri: '', + attributes: { + length: { + name: 'length', + value: '12345', + prefix: '', + local: 'length', + uri: '' + } + }, + ns: {}, + isSelfClosing: false + } + ], + [ + 'closetag', + 'root' + ] + ], + strict: true, + opt: { + xmlns: true + } +}) + +require(__dirname).test({ + xml: "", + expect: [ + [ + 'opentagstart', + { + name: 'root', + attributes: {} + } + ], + [ + 'attribute', + { + name: 'length', + value: '12345' + } + ], + [ + 'opentag', + { + name: 'root', + attributes: { + length: '12345' + }, + isSelfClosing: false + } + ], + [ + 'closetag', + 'root' + ] + ], + strict: true +}) diff --git a/packages/fork-sax/test/parser-position.js b/packages/fork-sax/test/parser-position.js new file mode 100644 index 0000000000..3e04887d8a --- /dev/null +++ b/packages/fork-sax/test/parser-position.js @@ -0,0 +1,30 @@ +var sax = require('../lib/sax') +var tap = require('tap') + +function testPosition (chunks, expectedEvents) { + var parser = sax.parser() + expectedEvents.forEach(function (expectation) { + parser['on' + expectation[0]] = function () { + for (var prop in expectation[1]) { + tap.equal(parser[prop], expectation[1][prop]) + } + } + }) + chunks.forEach(function (chunk) { + parser.write(chunk) + }) +} + +testPosition(['

abcdefgh
'], [ + [ 'opentagstart', { position: 5, startTagPosition: 1 } ], + [ 'opentag', { position: 5, startTagPosition: 1 } ], + [ 'text', { position: 19, startTagPosition: 14 } ], + [ 'closetag', { position: 19, startTagPosition: 14 } ] +]) + +testPosition(['
abcde', 'fgh
'], [ + ['opentagstart', { position: 5, startTagPosition: 1 }], + ['opentag', { position: 5, startTagPosition: 1 }], + ['text', { position: 19, startTagPosition: 14 }], + ['closetag', { position: 19, startTagPosition: 14 }] +]) diff --git a/packages/fork-sax/test/script-close-better.js b/packages/fork-sax/test/script-close-better.js new file mode 100644 index 0000000000..a796693775 --- /dev/null +++ b/packages/fork-sax/test/script-close-better.js @@ -0,0 +1,15 @@ +require(__dirname).test({ + xml: "", + expect: [ + ['opentagstart', {'name': 'HTML', 'attributes': {}}], + ['opentag', {'name': 'HTML', 'attributes': {}, isSelfClosing: false}], + ['opentagstart', {'name': 'HEAD', 'attributes': {}}], + ['opentag', {'name': 'HEAD', 'attributes': {}, isSelfClosing: false}], + ['opentagstart', {'name': 'SCRIPT', 'attributes': {}}], + ['opentag', {'name': 'SCRIPT', 'attributes': {}, isSelfClosing: false}], + ['script', "'
foo
", + expect: [ + [ + 'opentagstart', + { + 'name': 'HTML', + 'attributes': {} + } + ], + [ + 'opentag', + { + 'name': 'HTML', + 'attributes': {}, + 'isSelfClosing': false + } + ], + [ + 'opentagstart', + { + 'name': 'HEAD', + 'attributes': {} + } + ], + [ + 'opentag', + { + 'name': 'HEAD', + 'attributes': {}, + 'isSelfClosing': false + } + ], + [ + 'opentagstart', + { + 'name': 'SCRIPT', + 'attributes': {} + } + ], + [ + 'opentag', + { + 'name': 'SCRIPT', + 'attributes': {}, + 'isSelfClosing': false + } + ], + [ + 'script', + "if (1 < 0) { console.log('elo there'); }" + ], + [ + 'closetag', + 'SCRIPT' + ], + [ + 'closetag', + 'HEAD' + ], + [ + 'closetag', + 'HTML' + ] + ] +}) diff --git a/packages/fork-sax/test/self-closing-child-strict.js b/packages/fork-sax/test/self-closing-child-strict.js new file mode 100644 index 0000000000..359670af56 --- /dev/null +++ b/packages/fork-sax/test/self-closing-child-strict.js @@ -0,0 +1,57 @@ +require(__dirname).test({ + xml: '' + + '' + + '' + + '' + + '' + + '=(|)' + + '' + + '', + expect: [ + ['opentagstart', { + 'name': 'root', + 'attributes': {} + }], + ['opentag', { + 'name': 'root', + 'attributes': {}, + 'isSelfClosing': false + }], + ['opentagstart', { + 'name': 'child', + 'attributes': {} + }], + ['opentag', { + 'name': 'child', + 'attributes': {}, + 'isSelfClosing': false + }], + ['opentagstart', { + 'name': 'haha', + 'attributes': {} + }], + ['opentag', { + 'name': 'haha', + 'attributes': {}, + 'isSelfClosing': true + }], + ['closetag', 'haha'], + ['closetag', 'child'], + ['opentagstart', { + 'name': 'monkey', + 'attributes': {} + }], + ['opentag', { + 'name': 'monkey', + 'attributes': {}, + 'isSelfClosing': false + }], + ['text', '=(|)'], + ['closetag', 'monkey'], + ['closetag', 'root'], + ['end'], + ['ready'] + ], + strict: true, + opt: {} +}) diff --git a/packages/fork-sax/test/self-closing-child.js b/packages/fork-sax/test/self-closing-child.js new file mode 100644 index 0000000000..e24a17ba3b --- /dev/null +++ b/packages/fork-sax/test/self-closing-child.js @@ -0,0 +1,57 @@ +require(__dirname).test({ + xml: '' + + '' + + '' + + '' + + '' + + '=(|)' + + '' + + '', + expect: [ + ['opentagstart', { + 'name': 'ROOT', + 'attributes': {} + }], + ['opentag', { + 'name': 'ROOT', + 'attributes': {}, + 'isSelfClosing': false + }], + ['opentagstart', { + 'name': 'CHILD', + 'attributes': {} + }], + ['opentag', { + 'name': 'CHILD', + 'attributes': {}, + 'isSelfClosing': false + }], + ['opentagstart', { + 'name': 'HAHA', + 'attributes': {} + }], + ['opentag', { + 'name': 'HAHA', + 'attributes': {}, + 'isSelfClosing': true + }], + ['closetag', 'HAHA'], + ['closetag', 'CHILD'], + ['opentagstart', { + 'name': 'MONKEY', + 'attributes': {} + }], + ['opentag', { + 'name': 'MONKEY', + 'attributes': {}, + 'isSelfClosing': false + }], + ['text', '=(|)'], + ['closetag', 'MONKEY'], + ['closetag', 'ROOT'], + ['end'], + ['ready'] + ], + strict: false, + opt: {} +}) diff --git a/packages/fork-sax/test/self-closing-tag.js b/packages/fork-sax/test/self-closing-tag.js new file mode 100644 index 0000000000..4e1bd7dff7 --- /dev/null +++ b/packages/fork-sax/test/self-closing-tag.js @@ -0,0 +1,27 @@ +require(__dirname).test({ + xml: ' ' + + ' ' + + ' ' + + ' ' + + '=(|) ' + + '' + + ' ', + expect: [ + ['opentagstart', {name: 'ROOT', attributes: {}}], + ['opentag', {name: 'ROOT', attributes: {}, isSelfClosing: false}], + ['opentagstart', {name: 'HAHA', attributes: {}}], + ['opentag', {name: 'HAHA', attributes: {}, isSelfClosing: true}], + ['closetag', 'HAHA'], + ['opentagstart', {name: 'HAHA', attributes: {}}], + ['opentag', {name: 'HAHA', attributes: {}, isSelfClosing: true}], + ['closetag', 'HAHA'], + // ["opentag", {name:"HAHA", attributes:{}}], + // ["closetag", "HAHA"], + ['opentagstart', {name: 'MONKEY', attributes: {}}], + ['opentag', {name: 'MONKEY', attributes: {}, isSelfClosing: false}], + ['text', '=(|)'], + ['closetag', 'MONKEY'], + ['closetag', 'ROOT'] + ], + opt: { trim: true } +}) diff --git a/packages/fork-sax/test/stand-alone-comment.js b/packages/fork-sax/test/stand-alone-comment.js new file mode 100644 index 0000000000..a13a8b03d1 --- /dev/null +++ b/packages/fork-sax/test/stand-alone-comment.js @@ -0,0 +1,12 @@ +// https://github.com/isaacs/sax-js/issues/124 +require(__dirname).test({ + xml: '', + expect: [ + [ + 'comment', + ' stand alone comment ' + ] + ], + strict: true, + opt: {} +}) diff --git a/packages/fork-sax/test/stray-ending.js b/packages/fork-sax/test/stray-ending.js new file mode 100644 index 0000000000..2577c48132 --- /dev/null +++ b/packages/fork-sax/test/stray-ending.js @@ -0,0 +1,51 @@ +// stray ending tags should just be ignored in non-strict mode. +// https://github.com/isaacs/sax-js/issues/32 +require(__dirname).test({ + xml: '
', + expect: [ + [ + 'opentagstart', + { + name: 'A', + attributes: {} + } + ], + [ + 'opentag', + { + name: 'A', + attributes: {}, + isSelfClosing: false + } + ], + [ + 'opentagstart', + { + name: 'B', + attributes: {} + } + ], + [ + 'opentag', + { + name: 'B', + attributes: {}, + isSelfClosing: false + } + ], + [ + 'text', + '' + ], + [ + 'closetag', + 'B' + ], + [ + 'closetag', + 'A' + ] + ], + strict: false, + opt: {} +}) diff --git a/packages/fork-sax/test/trailing-attribute-no-value.js b/packages/fork-sax/test/trailing-attribute-no-value.js new file mode 100644 index 0000000000..e6403225a8 --- /dev/null +++ b/packages/fork-sax/test/trailing-attribute-no-value.js @@ -0,0 +1,9 @@ +require(__dirname).test({ + xml: '', + expect: [ + ['opentagstart', {name: 'ROOT', attributes: {}}], + ['attribute', {name: 'ATTRIB', value: 'attrib'}], + ['opentag', {name: 'ROOT', attributes: {'ATTRIB': 'attrib'}, isSelfClosing: false}] + ], + opt: { trim: true } +}) diff --git a/packages/fork-sax/test/trailing-non-whitespace.js b/packages/fork-sax/test/trailing-non-whitespace.js new file mode 100644 index 0000000000..8212d6ce30 --- /dev/null +++ b/packages/fork-sax/test/trailing-non-whitespace.js @@ -0,0 +1,21 @@ +require(__dirname).test({ + xml: 'Welcome, to monkey land', + expect: [ + ['opentagstart', { + 'name': 'SPAN', + 'attributes': {} + }], + ['opentag', { + 'name': 'SPAN', + 'attributes': {}, + isSelfClosing: false + }], + ['text', 'Welcome,'], + ['closetag', 'SPAN'], + ['text', ' to monkey land'], + ['end'], + ['ready'] + ], + strict: false, + opt: {} +}) diff --git a/packages/fork-sax/test/unclosed-root.js b/packages/fork-sax/test/unclosed-root.js new file mode 100644 index 0000000000..dbd1178a87 --- /dev/null +++ b/packages/fork-sax/test/unclosed-root.js @@ -0,0 +1,26 @@ +require(__dirname).test({ + xml: '', + expect: [ + [ + 'opentagstart', + { + name: 'root', + attributes: {} + } + ], + [ + 'opentag', + { + name: 'root', + attributes: {}, + isSelfClosing: false + } + ], + [ + 'error', + 'Unclosed root tag\nLine: 0\nColumn: 6\nChar: ' + ] + ], + strict: true, + opt: {} +}) diff --git a/packages/fork-sax/test/unquoted.js b/packages/fork-sax/test/unquoted.js new file mode 100644 index 0000000000..4bbd511c6f --- /dev/null +++ b/packages/fork-sax/test/unquoted.js @@ -0,0 +1,45 @@ +// unquoted attributes should be ok in non-strict mode +// https://github.com/isaacs/sax-js/issues/31 +require(__dirname).test({ + xml: '', + expect: [ + [ + 'opentagstart', + { + name: 'SPAN', + attributes: {} + } + ], + [ + 'attribute', + { + name: 'CLASS', + value: 'test' + } + ], + [ + 'attribute', + { + name: 'HELLO', + value: 'world' + } + ], + [ + 'opentag', + { + name: 'SPAN', + attributes: { + CLASS: 'test', + HELLO: 'world' + }, + isSelfClosing: false + } + ], + [ + 'closetag', + 'SPAN' + ] + ], + strict: false, + opt: {} +}) diff --git a/packages/fork-sax/test/utf8-split.js b/packages/fork-sax/test/utf8-split.js new file mode 100644 index 0000000000..80047e2f96 --- /dev/null +++ b/packages/fork-sax/test/utf8-split.js @@ -0,0 +1,34 @@ +var tap = require('tap') +var saxStream = require('../lib/sax').createStream() + +var b = new Buffer('误') + +saxStream.on('text', function (text) { + tap.equal(text, b.toString()) +}) + +saxStream.write(new Buffer('')) +saxStream.write(b.slice(0, 1)) +saxStream.write(b.slice(1)) +saxStream.write(new Buffer('')) +saxStream.write(b.slice(0, 2)) +saxStream.write(b.slice(2)) +saxStream.write(new Buffer('')) +saxStream.write(b) +saxStream.write(new Buffer('')) +saxStream.write(Buffer.concat([new Buffer(''), b.slice(0, 1)])) +saxStream.end(Buffer.concat([b.slice(1), new Buffer('')])) + +var saxStream2 = require('../lib/sax').createStream() + +saxStream2.on('text', function (text) { + tap.equal(text, '�') +}) + +saxStream2.write(new Buffer('')) +saxStream2.write(new Buffer('')) +saxStream2.write(new Buffer([0xC0])) +saxStream2.write(new Buffer('')) +saxStream2.write(Buffer.concat([new Buffer(''), b.slice(0, 1)])) +saxStream2.write(new Buffer('')) +saxStream2.end() diff --git a/packages/fork-sax/test/xml-internal-entities.js b/packages/fork-sax/test/xml-internal-entities.js new file mode 100644 index 0000000000..3c49e500ab --- /dev/null +++ b/packages/fork-sax/test/xml-internal-entities.js @@ -0,0 +1,92 @@ +var iExpect = [] +var myAttributes = {} +var ENTITIES = {} + +// generates xml like test0="&control;" +var entitiesToTest = { + // 'ENTITY_NAME': IS_VALID || [invalidCharPos, invalidChar], + 'control0': true, // This is a vanilla control. + // entityStart + '_uscore': true, + '#hash': true, + ':colon': true, + '-bad': [0, '-'], + '.bad': [0, '.'], + // general entity + 'u_score': true, + 'd-ash': true, + 'd.ot': true, + 'all:_#-.': true +} + +var xmlStart = '⌋ ' + + '♠ © → & ' + + '< < < < < > ℜ ℘ €', + expect: [ + ['opentagstart', {'name': 'R', attributes: {}}], + ['opentag', {'name': 'R', attributes: {}, isSelfClosing: false}], + ['text', '⌋ ♠ © → & < < < < < > ℜ ℘ €'], + ['closetag', 'R'] + ] +}) diff --git a/packages/fork-sax/test/xmlns-as-tag-name.js b/packages/fork-sax/test/xmlns-as-tag-name.js new file mode 100644 index 0000000000..18cd44d666 --- /dev/null +++ b/packages/fork-sax/test/xmlns-as-tag-name.js @@ -0,0 +1,33 @@ +require(__dirname).test({ + xml: '', + expect: [ + [ + 'opentagstart', + { + name: 'xmlns', + attributes: {}, + ns: {} + } + ], + [ + 'opentag', + { + name: 'xmlns', + uri: '', + prefix: '', + local: 'xmlns', + attributes: {}, + ns: {}, + isSelfClosing: true + } + ], + [ + 'closetag', + 'xmlns' + ] + ], + strict: true, + opt: { + xmlns: true + } +}) diff --git a/packages/fork-sax/test/xmlns-issue-41.js b/packages/fork-sax/test/xmlns-issue-41.js new file mode 100644 index 0000000000..435b7e6cd4 --- /dev/null +++ b/packages/fork-sax/test/xmlns-issue-41.js @@ -0,0 +1,93 @@ +var t = require(__dirname) + +// should be the same both ways. +var xmls = [ + '', + '' +] + +var ex1 = [ + [ 'opentagstart', { name: 'parent', attributes: {}, ns: {} } ], + [ + 'opennamespace', + { + prefix: 'a', + uri: 'http://ATTRIBUTE' + } + ], + [ + 'attribute', + { + name: 'xmlns:a', + value: 'http://ATTRIBUTE', + prefix: 'xmlns', + local: 'a', + uri: 'http://www.w3.org/2000/xmlns/' + } + ], + [ + 'attribute', + { + name: 'a:attr', + local: 'attr', + prefix: 'a', + uri: 'http://ATTRIBUTE', + value: 'value' + } + ], + [ + 'opentag', + { + name: 'parent', + uri: '', + prefix: '', + local: 'parent', + attributes: { + 'a:attr': { + name: 'a:attr', + local: 'attr', + prefix: 'a', + uri: 'http://ATTRIBUTE', + value: 'value' + }, + 'xmlns:a': { + name: 'xmlns:a', + local: 'a', + prefix: 'xmlns', + uri: 'http://www.w3.org/2000/xmlns/', + value: 'http://ATTRIBUTE' + } + }, + ns: { + a: 'http://ATTRIBUTE' + }, + isSelfClosing: true + } + ], + [ + 'closetag', + 'parent' + ], + [ + 'closenamespace', + { + prefix: 'a', + uri: 'http://ATTRIBUTE' + } + ] +] + +// swap the order of elements 2 and 3 +var ex2 = [ex1[0], ex1[1], ex1[3], ex1[2]].concat(ex1.slice(4)) +var expected = [ex1, ex2] + +xmls.forEach(function (x, i) { + t.test({ + xml: x, + expect: expected[i], + strict: true, + opt: { + xmlns: true + } + }) +}) diff --git a/packages/fork-sax/test/xmlns-rebinding.js b/packages/fork-sax/test/xmlns-rebinding.js new file mode 100644 index 0000000000..8086b44756 --- /dev/null +++ b/packages/fork-sax/test/xmlns-rebinding.js @@ -0,0 +1,327 @@ +require(__dirname).test({ + xml: '' + + '' + + '' + + '' + + '' + + '', + expect: [ + [ + 'opentagstart', + { + name: 'root', + attributes: {}, + ns: {} + } + ], + [ + 'opennamespace', + { + prefix: 'x', + uri: 'x1' + } + ], + [ + 'opennamespace', + { + prefix: 'y', + uri: 'y1' + } + ], + [ + 'attribute', + { + name: 'xmlns:x', + value: 'x1', + uri: 'http://www.w3.org/2000/xmlns/', + prefix: 'xmlns', + local: 'x' + } + ], + [ + 'attribute', + { + name: 'xmlns:y', + value: 'y1', + uri: 'http://www.w3.org/2000/xmlns/', + prefix: 'xmlns', + local: 'y' + } + ], + [ + 'attribute', + { + name: 'x:a', + value: 'x1', + uri: 'x1', + prefix: 'x', + local: 'a' + } + ], + [ + 'attribute', + { + name: 'y:a', + value: 'y1', + uri: 'y1', + prefix: 'y', + local: 'a' + } + ], + [ + 'opentag', + { + name: 'root', + uri: '', + prefix: '', + local: 'root', + attributes: { + 'xmlns:x': { + name: 'xmlns:x', + value: 'x1', + uri: 'http://www.w3.org/2000/xmlns/', + prefix: 'xmlns', + local: 'x' + }, + 'xmlns:y': { + name: 'xmlns:y', + value: 'y1', + uri: 'http://www.w3.org/2000/xmlns/', + prefix: 'xmlns', + local: 'y' + }, + 'x:a': { + name: 'x:a', + value: 'x1', + uri: 'x1', + prefix: 'x', + local: 'a' + }, + 'y:a': { + name: 'y:a', + value: 'y1', + uri: 'y1', + prefix: 'y', + local: 'a' + } + }, + ns: { + x: 'x1', + y: 'y1' + }, + isSelfClosing: false + } + ], + [ + 'opentagstart', + { + name: 'rebind', + attributes: {}, + ns: { + x: 'x1', + y: 'y1' + } + } + ], + [ + 'opennamespace', + { + prefix: 'x', + uri: 'x2' + } + ], + [ + 'attribute', + { + name: 'xmlns:x', + value: 'x2', + uri: 'http://www.w3.org/2000/xmlns/', + prefix: 'xmlns', + local: 'x' + } + ], + [ + 'opentag', + { + name: 'rebind', + uri: '', + prefix: '', + local: 'rebind', + attributes: { + 'xmlns:x': { + name: 'xmlns:x', + value: 'x2', + uri: 'http://www.w3.org/2000/xmlns/', + prefix: 'xmlns', + local: 'x' + } + }, + ns: { + x: 'x2' + }, + isSelfClosing: false + } + ], + [ + 'opentagstart', + { + name: 'check', + attributes: {}, + ns: { + x: 'x2' + } + } + ], + [ + 'attribute', + { + name: 'x:a', + value: 'x2', + uri: 'x2', + prefix: 'x', + local: 'a' + } + ], + [ + 'attribute', + { + name: 'y:a', + value: 'y1', + uri: 'y1', + prefix: 'y', + local: 'a' + } + ], + [ + 'opentag', + { + name: 'check', + uri: '', + prefix: '', + local: 'check', + attributes: { + 'x:a': { + name: 'x:a', + value: 'x2', + uri: 'x2', + prefix: 'x', + local: 'a' + }, + 'y:a': { + name: 'y:a', + value: 'y1', + uri: 'y1', + prefix: 'y', + local: 'a' + } + }, + ns: { + x: 'x2' + }, + isSelfClosing: true + } + ], + [ + 'closetag', + 'check' + ], + [ + 'closetag', + 'rebind' + ], + [ + 'closenamespace', + { + prefix: 'x', + uri: 'x2' + } + ], + [ + 'opentagstart', + { + name: 'check', + attributes: {}, + ns: { + x: 'x1', + y: 'y1' + } + } + ], + [ + 'attribute', + { + name: 'x:a', + value: 'x1', + uri: 'x1', + prefix: 'x', + local: 'a' + } + ], + [ + 'attribute', + { + name: 'y:a', + value: 'y1', + uri: 'y1', + prefix: 'y', + local: 'a' + } + ], + [ + 'opentag', + { + name: 'check', + uri: '', + prefix: '', + local: 'check', + attributes: { + 'x:a': { + name: 'x:a', + value: 'x1', + uri: 'x1', + prefix: 'x', + local: 'a' + }, + 'y:a': { + name: 'y:a', + value: 'y1', + uri: 'y1', + prefix: 'y', + local: 'a' + } + }, + ns: { + x: 'x1', + y: 'y1' + }, + isSelfClosing: true + } + ], + [ + 'closetag', + 'check' + ], + [ + 'closetag', + 'root' + ], + [ + 'closenamespace', + { + prefix: 'x', + uri: 'x1' + } + ], + [ + 'closenamespace', + { + prefix: 'y', + uri: 'y1' + } + ] + ], + strict: true, + opt: { + xmlns: true + } +}) diff --git a/packages/fork-sax/test/xmlns-strict.js b/packages/fork-sax/test/xmlns-strict.js new file mode 100644 index 0000000000..87d26c4470 --- /dev/null +++ b/packages/fork-sax/test/xmlns-strict.js @@ -0,0 +1,334 @@ +require(__dirname).test({ + xml: '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '', + expect: [ + [ + 'opentagstart', + { + name: 'root', + attributes: {}, + ns: {} + } + ], + [ + 'opentag', + { + name: 'root', + prefix: '', + local: 'root', + uri: '', + attributes: {}, + ns: {}, + isSelfClosing: false + } + ], + [ + 'opentagstart', + { + name: 'plain', + attributes: {}, + ns: {} + } + ], + [ + 'attribute', + { + name: 'attr', + value: 'normal', + prefix: '', + local: 'attr', + uri: '' + } + ], + [ + 'opentag', + { + name: 'plain', + prefix: '', + local: 'plain', + uri: '', + attributes: { + 'attr': { + name: 'attr', + value: 'normal', + prefix: '', + local: 'attr', + uri: '' + } + }, + ns: {}, + isSelfClosing: true + } + ], + [ + 'closetag', + 'plain' + ], + [ + 'opentagstart', + { + name: 'ns1', + attributes: {}, + ns: {} + } + ], + [ + 'opennamespace', + { + prefix: '', + uri: 'uri:default' + } + ], + [ + 'attribute', + { + name: 'xmlns', + value: 'uri:default', + prefix: 'xmlns', + local: '', + uri: 'http://www.w3.org/2000/xmlns/' + } + ], + [ + 'opentag', + { + name: 'ns1', + prefix: '', + local: 'ns1', + uri: 'uri:default', + attributes: { + 'xmlns': { + name: 'xmlns', + value: 'uri:default', + prefix: 'xmlns', + local: '', + uri: 'http://www.w3.org/2000/xmlns/' + } + }, + ns: { + '': 'uri:default' + }, + isSelfClosing: false + } + ], + [ + 'opentagstart', + { + name: 'plain', + ns: { + '': 'uri:default' + }, + attributes: {} + } + ], + [ + 'attribute', + { + name: 'attr', + value: 'normal', + prefix: '', + local: 'attr', + uri: '' + } + ], + [ + 'opentag', + { + name: 'plain', + prefix: '', + local: 'plain', + uri: 'uri:default', + ns: { + '': 'uri:default' + }, + attributes: { + 'attr': { + name: 'attr', + value: 'normal', + prefix: '', + local: 'attr', + uri: '' + } + }, + isSelfClosing: true + } + ], + [ + 'closetag', + 'plain' + ], + [ + 'closetag', + 'ns1' + ], + [ + 'closenamespace', + { + prefix: '', + uri: 'uri:default' + } + ], + [ + 'opentagstart', + { + name: 'ns2', + attributes: {}, + ns: {} + } + ], + [ + 'opennamespace', + { + prefix: 'a', + uri: 'uri:nsa' + } + ], + [ + 'attribute', + { + name: 'xmlns:a', + value: 'uri:nsa', + prefix: 'xmlns', + local: 'a', + uri: 'http://www.w3.org/2000/xmlns/' + } + ], + [ + 'opentag', + { + name: 'ns2', + prefix: '', + local: 'ns2', + uri: '', + attributes: { + 'xmlns:a': { + name: 'xmlns:a', + value: 'uri:nsa', + prefix: 'xmlns', + local: 'a', + uri: 'http://www.w3.org/2000/xmlns/' + } + }, + ns: { + a: 'uri:nsa' + }, + isSelfClosing: false + } + ], + [ + 'opentagstart', + { + name: 'plain', + attributes: {}, + ns: { + a: 'uri:nsa' + } + } + ], + [ + 'attribute', + { + name: 'attr', + value: 'normal', + prefix: '', + local: 'attr', + uri: '' + } + ], + [ + 'opentag', + { + name: 'plain', + prefix: '', + local: 'plain', + uri: '', + attributes: { + 'attr': { + name: 'attr', + value: 'normal', + prefix: '', + local: 'attr', + uri: '' + } + }, + ns: { + a: 'uri:nsa' + }, + isSelfClosing: true + } + ], + [ + 'closetag', + 'plain' + ], + [ + 'opentagstart', + { + name: 'a:ns', + attributes: {}, + ns: { a: 'uri:nsa' } + } + ], + [ + 'attribute', + { + name: 'a:attr', + value: 'namespaced', + prefix: 'a', + local: 'attr', + uri: 'uri:nsa' + } + ], + [ + 'opentag', + { + name: 'a:ns', + prefix: 'a', + local: 'ns', + uri: 'uri:nsa', + attributes: { + 'a:attr': { + name: 'a:attr', + value: 'namespaced', + prefix: 'a', + local: 'attr', + uri: 'uri:nsa' + } + }, + ns: { a: 'uri:nsa' }, + isSelfClosing: true + } + ], + [ + 'closetag', + 'a:ns' + ], + [ + 'closetag', + 'ns2' + ], + [ + 'closenamespace', + { + prefix: 'a', + uri: 'uri:nsa' + } + ], + [ + 'closetag', + 'root' + ] + ], + strict: true, + opt: { + xmlns: true + } +}) diff --git a/packages/fork-sax/test/xmlns-unbound-element.js b/packages/fork-sax/test/xmlns-unbound-element.js new file mode 100644 index 0000000000..60759b1d58 --- /dev/null +++ b/packages/fork-sax/test/xmlns-unbound-element.js @@ -0,0 +1,101 @@ +require(__dirname).test({ + strict: true, + opt: { xmlns: true }, + expect: [ + [ + 'opentagstart', + { + name: 'unbound:root', + attributes: {}, + ns: {} + } + ], + [ + 'error', + 'Unbound namespace prefix: "unbound:root"\nLine: 0\nColumn: 15\nChar: >' + ], + [ + 'opentag', + { + name: 'unbound:root', + uri: 'unbound', + prefix: 'unbound', + local: 'root', + attributes: {}, + ns: {}, + isSelfClosing: true + } + ], + [ + 'closetag', + 'unbound:root' + ] + ] +}).write('') + +require(__dirname).test({ + strict: true, + opt: { + xmlns: true + }, + expect: [ + [ + 'opentagstart', + { + name: 'unbound:root', + attributes: {}, + ns: {} + } + ], + [ + 'opennamespace', + { + prefix: 'unbound', + uri: 'someuri' + } + ], + [ + 'attribute', + { + name: 'xmlns:unbound', + value: 'someuri', + prefix: 'xmlns', + local: 'unbound', + uri: 'http://www.w3.org/2000/xmlns/' + } + ], + [ + 'opentag', + { + name: 'unbound:root', + uri: 'someuri', + prefix: 'unbound', + local: 'root', + attributes: { + 'xmlns:unbound': { + name: 'xmlns:unbound', + value: 'someuri', + prefix: 'xmlns', + local: 'unbound', + uri: 'http://www.w3.org/2000/xmlns/' + } + }, + ns: { + 'unbound': 'someuri' + }, + isSelfClosing: true + } + ], + [ + 'closetag', + 'unbound:root' + ], + [ + 'closenamespace', + { + prefix: 'unbound', + uri: 'someuri' + } + ] + ] +}).write('') diff --git a/packages/fork-sax/test/xmlns-unbound.js b/packages/fork-sax/test/xmlns-unbound.js new file mode 100644 index 0000000000..319d35047b --- /dev/null +++ b/packages/fork-sax/test/xmlns-unbound.js @@ -0,0 +1,52 @@ +require(__dirname).test({ + strict: true, + opt: { xmlns: true }, + expect: [ + [ + 'opentagstart', + { + name: 'root', + attributes: {}, + ns: {} + } + ], + [ + 'error', + 'Unbound namespace prefix: "unbound"\nLine: 0\nColumn: 28\nChar: >' + ], + [ + 'attribute', + { + name: 'unbound:attr', + value: 'value', + uri: 'unbound', + prefix: 'unbound', + local: 'attr' + } + ], + [ + 'opentag', + { + name: 'root', + uri: '', + prefix: '', + local: 'root', + attributes: { + 'unbound:attr': { + name: 'unbound:attr', + value: 'value', + uri: 'unbound', + prefix: 'unbound', + local: 'attr' + } + }, + ns: {}, + isSelfClosing: true + } + ], + [ + 'closetag', + 'root' + ] + ] +}).write("") diff --git a/packages/fork-sax/test/xmlns-xml-default-ns.js b/packages/fork-sax/test/xmlns-xml-default-ns.js new file mode 100644 index 0000000000..41d5572065 --- /dev/null +++ b/packages/fork-sax/test/xmlns-xml-default-ns.js @@ -0,0 +1,71 @@ +var xmlnsAttr = { + name: 'xmlns', + value: 'http://foo', + prefix: 'xmlns', + local: '', + uri: 'http://www.w3.org/2000/xmlns/' +} + +var attrAttr = { + name: 'attr', + value: 'bar', + prefix: '', + local: 'attr', + uri: '' +} + +require(__dirname).test({ + xml: "", + expect: [ + [ + 'opentagstart', + { + name: 'elm', + attributes: {}, + ns: {} + } + ], + [ + 'opennamespace', + { prefix: '', uri: 'http://foo' } + ], + [ + 'attribute', + xmlnsAttr + ], + [ + 'attribute', + attrAttr + ], + [ + 'opentag', + { + name: 'elm', + prefix: '', + local: 'elm', + uri: 'http://foo', + ns: { '': 'http://foo' }, + attributes: { + xmlns: xmlnsAttr, + attr: attrAttr + }, + isSelfClosing: true + } + ], + [ + 'closetag', + 'elm' + ], + [ + 'closenamespace', + { + prefix: '', + uri: 'http://foo' + } + ] + ], + strict: true, + opt: { + xmlns: true + } +}) diff --git a/packages/fork-sax/test/xmlns-xml-default-prefix-attribute.js b/packages/fork-sax/test/xmlns-xml-default-prefix-attribute.js new file mode 100644 index 0000000000..51cfbb6f39 --- /dev/null +++ b/packages/fork-sax/test/xmlns-xml-default-prefix-attribute.js @@ -0,0 +1,49 @@ +require(__dirname).test({ + xml: "", + expect: [ + [ + 'opentagstart', + { + name: 'root', + attributes: {}, + ns: {} + } + ], + [ + 'attribute', + { + name: 'xml:lang', + local: 'lang', + prefix: 'xml', + uri: 'http://www.w3.org/XML/1998/namespace', + value: 'en' + } + ], + [ + 'opentag', + { + name: 'root', + uri: '', + prefix: '', + local: 'root', + attributes: { + 'xml:lang': { + name: 'xml:lang', + local: 'lang', + prefix: 'xml', + uri: 'http://www.w3.org/XML/1998/namespace', + value: 'en' + } + }, + ns: {}, + isSelfClosing: true + } + ], + [ + 'closetag', + 'root' + ] + ], + strict: true, + opt: { xmlns: true } +}) diff --git a/packages/fork-sax/test/xmlns-xml-default-prefix.js b/packages/fork-sax/test/xmlns-xml-default-prefix.js new file mode 100644 index 0000000000..fd48cbdd3b --- /dev/null +++ b/packages/fork-sax/test/xmlns-xml-default-prefix.js @@ -0,0 +1,31 @@ +require(__dirname).test({ + xml: '', + expect: [ + [ + 'opentagstart', + { + name: 'xml:root', + attributes: {}, + ns: {} + } + ], + [ + 'opentag', + { + name: 'xml:root', + uri: 'http://www.w3.org/XML/1998/namespace', + prefix: 'xml', + local: 'root', + attributes: {}, + ns: {}, + isSelfClosing: true + } + ], + [ + 'closetag', + 'xml:root' + ] + ], + strict: true, + opt: { xmlns: true } +}) diff --git a/packages/fork-sax/test/xmlns-xml-default-redefine.js b/packages/fork-sax/test/xmlns-xml-default-redefine.js new file mode 100644 index 0000000000..2a8f7050e8 --- /dev/null +++ b/packages/fork-sax/test/xmlns-xml-default-redefine.js @@ -0,0 +1,55 @@ +require(__dirname).test({ + xml: "", + expect: [ + [ + 'opentagstart', + { + name: 'xml:root', + attributes: {}, + ns: {} + } + ], + [ + 'error', + 'xml: prefix must be bound to http://www.w3.org/XML/1998/namespace\n' + + 'Actual: ERROR\n' + + "Line: 0\nColumn: 27\nChar: '" + ], + [ + 'attribute', + { + name: 'xmlns:xml', + local: 'xml', + prefix: 'xmlns', + uri: 'http://www.w3.org/2000/xmlns/', + value: 'ERROR' + } + ], + [ + 'opentag', + { + name: 'xml:root', + uri: 'http://www.w3.org/XML/1998/namespace', + prefix: 'xml', + local: 'root', + attributes: { + 'xmlns:xml': { + name: 'xmlns:xml', + local: 'xml', + prefix: 'xmlns', + uri: 'http://www.w3.org/2000/xmlns/', + value: 'ERROR' + } + }, + ns: {}, + isSelfClosing: true + } + ], + [ + 'closetag', + 'xml:root' + ] + ], + strict: true, + opt: { xmlns: true } +}) diff --git a/ReactNativeClient/lib/ArrayUtils.js b/packages/lib/ArrayUtils.js similarity index 100% rename from ReactNativeClient/lib/ArrayUtils.js rename to packages/lib/ArrayUtils.js diff --git a/ReactNativeClient/lib/AsyncActionQueue.ts b/packages/lib/AsyncActionQueue.ts similarity index 98% rename from ReactNativeClient/lib/AsyncActionQueue.ts rename to packages/lib/AsyncActionQueue.ts index 12a23c68b6..723342fbb9 100644 --- a/ReactNativeClient/lib/AsyncActionQueue.ts +++ b/packages/lib/AsyncActionQueue.ts @@ -1,4 +1,4 @@ -import shim from 'lib/shim'; +import shim from './shim'; export interface QueueItemAction { (): void, diff --git a/ReactNativeClient/lib/BaseApplication.ts b/packages/lib/BaseApplication.ts similarity index 89% rename from ReactNativeClient/lib/BaseApplication.ts rename to packages/lib/BaseApplication.ts index d019b96722..be957bda7d 100644 --- a/ReactNativeClient/lib/BaseApplication.ts +++ b/packages/lib/BaseApplication.ts @@ -1,52 +1,52 @@ -import Setting from 'lib/models/Setting'; -import Logger, { TargetType } from 'lib/Logger'; -import shim from 'lib/shim'; -import BaseService from 'lib/services/BaseService'; -import reducer from 'lib/reducer'; -import KeychainServiceDriver from 'lib/services/keychain/KeychainServiceDriver.node'; -import { _, setLocale } from 'lib/locale'; +import Setting from './models/Setting'; +import Logger, { TargetType } from './Logger'; +import shim from './shim'; +import BaseService from './services/BaseService'; +import reducer from './reducer'; +import KeychainServiceDriver from './services/keychain/KeychainServiceDriver.node'; +import { _, setLocale } from './locale'; const { createStore, applyMiddleware } = require('redux'); -const { defaultState, stateUtils } = require('lib/reducer'); -const { JoplinDatabase } = require('lib/joplin-database.js'); -const { FoldersScreenUtils } = require('lib/folders-screen-utils.js'); -const { DatabaseDriverNode } = require('lib/database-driver-node.js'); -const BaseModel = require('lib/BaseModel.js'); -const Folder = require('lib/models/Folder.js'); -const BaseItem = require('lib/models/BaseItem.js'); -const Note = require('lib/models/Note.js'); -const Tag = require('lib/models/Tag.js'); -const { splitCommandString } = require('lib/string-utils.js'); -const { reg } = require('lib/registry.js'); -const { time } = require('lib/time-utils.js'); -const BaseSyncTarget = require('lib/BaseSyncTarget.js'); -const reduxSharedMiddleware = require('lib/components/shared/reduxSharedMiddleware'); +const { defaultState, stateUtils } = require('./reducer'); +const { JoplinDatabase } = require('./joplin-database.js'); +const { FoldersScreenUtils } = require('./folders-screen-utils.js'); +const { DatabaseDriverNode } = require('./database-driver-node.js'); +const BaseModel = require('./BaseModel').default; +const Folder = require('./models/Folder.js'); +const BaseItem = require('./models/BaseItem.js'); +const Note = require('./models/Note.js'); +const Tag = require('./models/Tag.js'); +const { splitCommandString } = require('./string-utils.js'); +const { reg } = require('./registry.js'); +const time = require('./time').default; +const BaseSyncTarget = require('./BaseSyncTarget.js'); +const reduxSharedMiddleware = require('./components/shared/reduxSharedMiddleware'); const os = require('os'); const fs = require('fs-extra'); -const JoplinError = require('lib/JoplinError'); +const JoplinError = require('./JoplinError'); const EventEmitter = require('events'); const syswidecas = require('syswide-cas'); -const SyncTargetRegistry = require('lib/SyncTargetRegistry.js'); -const SyncTargetFilesystem = require('lib/SyncTargetFilesystem.js'); -const SyncTargetOneDrive = require('lib/SyncTargetOneDrive.js'); -const SyncTargetNextcloud = require('lib/SyncTargetNextcloud.js'); -const SyncTargetWebDAV = require('lib/SyncTargetWebDAV.js'); -const SyncTargetDropbox = require('lib/SyncTargetDropbox.js'); -const SyncTargetAmazonS3 = require('lib/SyncTargetAmazonS3.js'); -const EncryptionService = require('lib/services/EncryptionService'); -const ResourceFetcher = require('lib/services/ResourceFetcher'); -const SearchEngineUtils = require('lib/services/searchengine/SearchEngineUtils'); -const SearchEngine = require('lib/services/searchengine/SearchEngine'); -const RevisionService = require('lib/services/RevisionService'); -const ResourceService = require('lib/services/RevisionService'); -const DecryptionWorker = require('lib/services/DecryptionWorker'); -const { loadKeychainServiceAndSettings } = require('lib/services/SettingUtils'); -const KvStore = require('lib/services/KvStore'); -const MigrationService = require('lib/services/MigrationService'); -const { toSystemSlashes } = require('lib/path-utils'); +const SyncTargetRegistry = require('./SyncTargetRegistry.js'); +const SyncTargetFilesystem = require('./SyncTargetFilesystem.js'); +const SyncTargetOneDrive = require('./SyncTargetOneDrive.js'); +const SyncTargetNextcloud = require('./SyncTargetNextcloud.js'); +const SyncTargetWebDAV = require('./SyncTargetWebDAV.js'); +const SyncTargetDropbox = require('./SyncTargetDropbox.js'); +const SyncTargetAmazonS3 = require('./SyncTargetAmazonS3.js'); +const EncryptionService = require('./services/EncryptionService'); +const ResourceFetcher = require('./services/ResourceFetcher'); +const SearchEngineUtils = require('./services/searchengine/SearchEngineUtils'); +const SearchEngine = require('./services/searchengine/SearchEngine'); +const RevisionService = require('./services/RevisionService'); +const ResourceService = require('./services/RevisionService'); +const DecryptionWorker = require('./services/DecryptionWorker'); +const { loadKeychainServiceAndSettings } = require('./services/SettingUtils'); +const KvStore = require('./services/KvStore'); +const MigrationService = require('./services/MigrationService'); +const { toSystemSlashes } = require('./path-utils'); const { setAutoFreeze } = require('immer'); -// const ntpClient = require('lib/vendor/ntp-client'); +// const ntpClient = require('./vendor/ntp-client'); // ntpClient.dgram = require('dgram'); export default class BaseApplication { @@ -731,21 +731,21 @@ export default class BaseApplication { this.database_.setLogExcludedQueryTypes(['SELECT']); this.database_.setLogger(this.dbLogger_); - if (Setting.value('env') === 'dev') { - if (shim.isElectron()) { - this.database_.extensionToLoad = './lib/sql-extensions/spellfix'; - } - } else { - if (shim.isElectron()) { - if (shim.isWindows()) { - const appDir = process.execPath.substring(0, process.execPath.lastIndexOf('\\')); - this.database_.extensionToLoad = `${appDir}/usr/lib/spellfix`; - } else { - const appDir = process.execPath.substring(0, process.execPath.lastIndexOf('/')); - this.database_.extensionToLoad = `${appDir}/usr/lib/spellfix`; - } - } - } + // if (Setting.value('env') === 'dev') { + // if (shim.isElectron()) { + // this.database_.extensionToLoad = './lib/sql-extensions/spellfix'; + // } + // } else { + // if (shim.isElectron()) { + // if (shim.isWindows()) { + // const appDir = process.execPath.substring(0, process.execPath.lastIndexOf('\\')); + // this.database_.extensionToLoad = `${appDir}/usr/lib/spellfix`; + // } else { + // const appDir = process.execPath.substring(0, process.execPath.lastIndexOf('/')); + // this.database_.extensionToLoad = `${appDir}/usr/lib/spellfix`; + // } + // } + // } await this.database_.open({ name: `${profileDir}/database.sqlite` }); diff --git a/ReactNativeClient/lib/BaseModel.js b/packages/lib/BaseModel.ts similarity index 74% rename from ReactNativeClient/lib/BaseModel.js rename to packages/lib/BaseModel.ts index b63e59dacf..5002147460 100644 --- a/ReactNativeClient/lib/BaseModel.js +++ b/packages/lib/BaseModel.ts @@ -1,22 +1,89 @@ -const { Database } = require('lib/database.js'); -const uuid = require('lib/uuid').default; -const { time } = require('lib/time-utils.js'); +import paginationToSql from './models/utils/paginationToSql'; + +const { Database } = require('./database.js'); +const uuid = require('./uuid').default; +const time = require('./time').default; const Mutex = require('async-mutex').Mutex; +// New code should make use of this enum +export enum ModelType { + Note = 1, + Folder = 2, + Setting = 3, + Resource = 4, + Tag = 5, + NoteTag = 6, + Search = 7, + Alarm = 8, + MasterKey = 9, + ItemChange = 10, + NoteResource = 11, + ResourceLocalState = 12, + Revision = 13, + Migration = 14, + SmartFilter = 15, + Command = 16, +} + class BaseModel { - static modelType() { + + // TODO: This ancient part of Joplin about model types is a bit of a + // mess and should be refactored properly. + + public static typeEnum_:any[] = [ + ['TYPE_NOTE', ModelType.Note], + ['TYPE_FOLDER', ModelType.Folder], + ['TYPE_SETTING', ModelType.Setting], + ['TYPE_RESOURCE', ModelType.Resource], + ['TYPE_TAG', ModelType.Tag], + ['TYPE_NOTE_TAG', ModelType.NoteTag], + ['TYPE_SEARCH', ModelType.Search], + ['TYPE_ALARM', ModelType.Alarm], + ['TYPE_MASTER_KEY', ModelType.MasterKey], + ['TYPE_ITEM_CHANGE', ModelType.ItemChange], + ['TYPE_NOTE_RESOURCE', ModelType.NoteResource], + ['TYPE_RESOURCE_LOCAL_STATE', ModelType.ResourceLocalState], + ['TYPE_REVISION', ModelType.Revision], + ['TYPE_MIGRATION', ModelType.Migration], + ['TYPE_SMART_FILTER', ModelType.SmartFilter], + ['TYPE_COMMAND', ModelType.Command], + ] + + public static TYPE_NOTE = ModelType.Note; + public static TYPE_FOLDER = ModelType.Folder; + public static TYPE_SETTING = ModelType.Setting; + public static TYPE_RESOURCE = ModelType.Resource; + public static TYPE_TAG = ModelType.Tag; + public static TYPE_NOTE_TAG = ModelType.NoteTag; + public static TYPE_SEARCH = ModelType.Search; + public static TYPE_ALARM = ModelType.Alarm; + public static TYPE_MASTER_KEY = ModelType.MasterKey; + public static TYPE_ITEM_CHANGE = ModelType.ItemChange; + public static TYPE_NOTE_RESOURCE = ModelType.NoteResource; + public static TYPE_RESOURCE_LOCAL_STATE = ModelType.ResourceLocalState; + public static TYPE_REVISION = ModelType.Revision; + public static TYPE_MIGRATION = ModelType.Migration; + public static TYPE_SMART_FILTER = ModelType.SmartFilter; + public static TYPE_COMMAND = ModelType.Command; + + protected static dispatch:Function = function() {}; + private static saveMutexes_:any = {}; + + private static db_:any; + + static modelType():ModelType { throw new Error('Must be overriden'); } - static tableName() { + static tableName():string { throw new Error('Must be overriden'); } - static setDb(db) { + static setDb(db:any) { this.db_ = db; } - static addModelMd(model) { + static addModelMd(model:any):any { if (!model) return model; if (Array.isArray(model)) { @@ -40,29 +107,29 @@ class BaseModel { return false; } - static byId(items, id) { + static byId(items:any[], id:string) { for (let i = 0; i < items.length; i++) { if (items[i].id == id) return items[i]; } return null; } - static defaultValues(fieldNames) { - const output = {}; + static defaultValues(fieldNames:string[]) { + const output:any = {}; for (const n of fieldNames) { output[n] = this.db().fieldDefaultValue(this.tableName(), n); } return output; } - static modelIndexById(items, id) { + static modelIndexById(items:any[], id:string) { for (let i = 0; i < items.length; i++) { if (items[i].id == id) return i; } return -1; } - static modelsByIds(items, ids) { + static modelsByIds(items:any[], ids:string[]) { const output = []; for (let i = 0; i < items.length; i++) { if (ids.indexOf(items[i].id) >= 0) { @@ -74,14 +141,14 @@ class BaseModel { // Prefer the use of this function to compare IDs as it handles the case where // one ID is null and the other is "", in which case they are actually considered to be the same. - static idsEqual(id1, id2) { + static idsEqual(id1:string, id2:string) { if (!id1 && !id2) return true; if (!id1 && !!id2) return false; if (!!id1 && !id2) return false; return id1 === id2; } - static modelTypeToName(type) { + static modelTypeToName(type:number) { for (let i = 0; i < BaseModel.typeEnum_.length; i++) { const e = BaseModel.typeEnum_[i]; if (e[1] === type) return e[0].substr(5).toLowerCase(); @@ -89,7 +156,7 @@ class BaseModel { throw new Error(`Unknown model type: ${type}`); } - static modelNameToType(name) { + static modelNameToType(name:string) { for (let i = 0; i < BaseModel.typeEnum_.length; i++) { const e = BaseModel.typeEnum_[i]; const eName = e[0].substr(5).toLowerCase(); @@ -98,12 +165,12 @@ class BaseModel { throw new Error(`Unknown model name: ${name}`); } - static hasField(name) { + static hasField(name:string) { const fields = this.fieldNames(); return fields.indexOf(name) >= 0; } - static fieldNames(withPrefix = false) { + static fieldNames(withPrefix:boolean = false) { const output = this.db().tableFieldNames(this.tableName()); if (!withPrefix) return output; @@ -116,7 +183,7 @@ class BaseModel { return temp; } - static fieldType(name, defaultValue = null) { + static fieldType(name:string, defaultValue:any = null) { const fields = this.fields(); for (let i = 0; i < fields.length; i++) { if (fields[i].name == name) return fields[i].type; @@ -129,8 +196,8 @@ class BaseModel { return this.db().tableFields(this.tableName()); } - static removeUnknownFields(model) { - const newModel = {}; + static removeUnknownFields(model:any) { + const newModel:any = {}; for (const n in model) { if (!model.hasOwnProperty(n)) continue; if (!this.hasField(n) && n !== 'type_') continue; @@ -141,7 +208,7 @@ class BaseModel { static new() { const fields = this.fields(); - const output = {}; + const output:any = {}; for (let i = 0; i < fields.length; i++) { const f = fields[i]; output[f.name] = f.default; @@ -149,7 +216,7 @@ class BaseModel { return output; } - static modOptions(options) { + static modOptions(options:any) { if (!options) { options = {}; } else { @@ -161,42 +228,42 @@ class BaseModel { return options; } - static count(options = null) { + static count(options:any = null) { if (!options) options = {}; let sql = `SELECT count(*) as total FROM \`${this.tableName()}\``; if (options.where) sql += ` WHERE ${options.where}`; return this.db() .selectOne(sql) - .then(r => { + .then((r:any) => { return r ? r['total'] : 0; }); } - static load(id, options = null) { + static load(id:string, options:any = null) { return this.loadByField('id', id, options); } - static shortId(id) { + static shortId(id:string) { return id.substr(0, 5); } - static loadByPartialId(partialId) { + static loadByPartialId(partialId:string) { return this.modelSelectAll(`SELECT * FROM \`${this.tableName()}\` WHERE \`id\` LIKE ?`, [`${partialId}%`]); } - static applySqlOptions(options, sql, params = null) { + static applySqlOptions(options:any, sql:string, params:any[] = null) { if (!options) options = {}; if (options.order && options.order.length) { - const items = []; - for (let i = 0; i < options.order.length; i++) { - const o = options.order[i]; - let item = `\`${o.by}\``; - if (options.caseInsensitive === true) item += ' COLLATE NOCASE'; - if (o.dir) item += ` ${o.dir}`; - items.push(item); - } - sql += ` ORDER BY ${items.join(', ')}`; + // const items = []; + // for (let i = 0; i < options.order.length; i++) { + // const o = options.order[i]; + // let item = `\`${o.by}\``; + // if (options.caseInsensitive === true) item += ' COLLATE NOCASE'; + // if (o.dir) item += ` ${o.dir}`; + // items.push(item); + // } + sql += ` ORDER BY ${paginationToSql(options)}`; } if (options.limit) sql += ` LIMIT ${options.limit}`; @@ -204,18 +271,18 @@ class BaseModel { return { sql: sql, params: params }; } - static async allIds(options = null) { + static async allIds(options:any = null) { const q = this.applySqlOptions(options, `SELECT id FROM \`${this.tableName()}\``); const rows = await this.db().selectAll(q.sql, q.params); - return rows.map(r => r.id); + return rows.map((r:any) => r.id); } - static async all(options = null) { + static async all(options:any = null) { if (!options) options = {}; if (!options.fields) options.fields = '*'; let sql = `SELECT ${this.db().escapeFields(options.fields)} FROM \`${this.tableName()}\``; - let params = []; + let params:any[] = []; if (options.where) { sql += ` WHERE ${options.where}`; if (options.whereParams) params = params.concat(options.whereParams); @@ -225,7 +292,7 @@ class BaseModel { return this.modelSelectAll(q.sql, q.params); } - static async byIds(ids, options = null) { + static async byIds(ids:string[], options:any = null) { if (!ids.length) return []; if (!options) options = {}; if (!options.fields) options.fields = '*'; @@ -236,7 +303,7 @@ class BaseModel { return this.modelSelectAll(q.sql); } - static async search(options = null) { + static async search(options:any = null) { if (!options) options = {}; if (!options.fields) options.fields = '*'; @@ -258,25 +325,25 @@ class BaseModel { return this.modelSelectAll(query.sql, query.params); } - static modelSelectOne(sql, params = null) { + static modelSelectOne(sql:string, params:any[] = null) { if (params === null) params = []; return this.db() .selectOne(sql, params) - .then(model => { + .then((model:any) => { return this.filter(this.addModelMd(model)); }); } - static modelSelectAll(sql, params = null) { + static modelSelectAll(sql:string, params:any[] = null) { if (params === null) params = []; return this.db() .selectAll(sql, params) - .then(models => { + .then((models:any[]) => { return this.filterArray(this.addModelMd(models)); }); } - static loadByField(fieldName, fieldValue, options = null) { + static loadByField(fieldName:string, fieldValue:any, options:any = null) { if (!options) options = {}; if (!('caseInsensitive' in options)) options.caseInsensitive = false; if (!options.fields) options.fields = '*'; @@ -285,7 +352,7 @@ class BaseModel { return this.modelSelectOne(sql, [fieldValue]); } - static loadByFields(fields, options = null) { + static loadByFields(fields:string[], options:any = null) { if (!options) options = {}; if (!('caseInsensitive' in options)) options.caseInsensitive = false; if (!options.fields) options.fields = '*'; @@ -300,12 +367,12 @@ class BaseModel { return this.modelSelectOne(sql, params); } - static loadByTitle(fieldValue) { + static loadByTitle(fieldValue:any) { return this.modelSelectOne(`SELECT * FROM \`${this.tableName()}\` WHERE \`title\` = ?`, [fieldValue]); } - static diffObjects(oldModel, newModel) { - const output = {}; + static diffObjects(oldModel:any, newModel:any) { + const output:any = {}; const fields = this.diffObjectsFields(oldModel, newModel); for (let i = 0; i < fields.length; i++) { output[fields[i]] = newModel[fields[i]]; @@ -314,7 +381,7 @@ class BaseModel { return output; } - static diffObjectsFields(oldModel, newModel) { + static diffObjectsFields(oldModel:any, newModel:any) { const output = []; for (const n in newModel) { if (!newModel.hasOwnProperty(n)) continue; @@ -326,15 +393,15 @@ class BaseModel { return output; } - static modelsAreSame(oldModel, newModel) { + static modelsAreSame(oldModel:any, newModel:any) { const diff = this.diffObjects(oldModel, newModel); delete diff.type_; return !Object.getOwnPropertyNames(diff).length; } - static saveMutex(modelOrId) { + static saveMutex(modelOrId:any) { const noLockMutex = { - acquire: function() { + acquire: function():any { return null; }, }; @@ -353,7 +420,7 @@ class BaseModel { return mutex; } - static releaseSaveMutex(modelOrId, release) { + static releaseSaveMutex(modelOrId:any, release:Function) { if (!release) return; if (!modelOrId) return release(); @@ -368,8 +435,8 @@ class BaseModel { release(); } - static saveQuery(o, options) { - let temp = {}; + static saveQuery(o:any, options:any) { + let temp:any = {}; const fieldNames = this.fieldNames(); for (let i = 0; i < fieldNames.length; i++) { const n = fieldNames[i]; @@ -381,7 +448,7 @@ class BaseModel { // be part of the final list of fields if autoTimestamp is on. // id also will stay. if (!options.isNew && options.fields) { - const filtered = {}; + const filtered:any = {}; for (const k in temp) { if (!temp.hasOwnProperty(k)) continue; if (k !== 'id' && options.fields.indexOf(k) < 0) continue; @@ -393,7 +460,7 @@ class BaseModel { o = temp; let modelId = temp.id; - let query = {}; + let query:any = {}; const timeNow = time.unixMs(); @@ -445,7 +512,7 @@ class BaseModel { return query; } - static userSideValidation(o) { + static userSideValidation(o:any) { if (o.id && !o.id.match(/^[a-f0-9]{32}$/)) { throw new Error('Validation error: ID must a 32-characters lowercase hexadecimal string'); } @@ -456,7 +523,7 @@ class BaseModel { } } - static async save(o, options = null) { + static async save(o:any, options:any = null) { // When saving, there's a mutex per model ID. This is because the model returned from this function // is basically its input `o` (instead of being read from the database, for performance reasons). // This works well in general except if that model is saved simultaneously in two places. In that @@ -526,7 +593,7 @@ class BaseModel { return output; } - static isNew(object, options) { + static isNew(object:any, options:any) { if (options && 'isNew' in options) { // options.isNew can be "auto" too if (options.isNew === true) return true; @@ -536,7 +603,7 @@ class BaseModel { return !object.id; } - static filterArray(models) { + static filterArray(models:any[]) { const output = []; for (let i = 0; i < models.length; i++) { output.push(this.filter(models[i])); @@ -544,7 +611,7 @@ class BaseModel { return output; } - static filter(model) { + static filter(model:any) { if (!model) return model; const output = Object.assign({}, model); @@ -567,12 +634,12 @@ class BaseModel { return output; } - static delete(id) { + static delete(id:string) { if (!id) throw new Error('Cannot delete object without an ID'); return this.db().exec(`DELETE FROM ${this.tableName()} WHERE id = ?`, [id]); } - static batchDelete(ids, options = null) { + static batchDelete(ids:string[], options:any = null) { if (!ids.length) return; options = this.modOptions(options); const idFieldName = options.idFieldName ? options.idFieldName : 'id'; @@ -590,32 +657,9 @@ class BaseModel { } } -BaseModel.typeEnum_ = [ - ['TYPE_NOTE', 1], - ['TYPE_FOLDER', 2], - ['TYPE_SETTING', 3], - ['TYPE_RESOURCE', 4], - ['TYPE_TAG', 5], - ['TYPE_NOTE_TAG', 6], - ['TYPE_SEARCH', 7], - ['TYPE_ALARM', 8], - ['TYPE_MASTER_KEY', 9], - ['TYPE_ITEM_CHANGE', 10], - ['TYPE_NOTE_RESOURCE', 11], - ['TYPE_RESOURCE_LOCAL_STATE', 12], - ['TYPE_REVISION', 13], - ['TYPE_MIGRATION', 14], - ['TYPE_SMART_FILTER', 15], - ['TYPE_COMMAND', 16], -]; - for (let i = 0; i < BaseModel.typeEnum_.length; i++) { const e = BaseModel.typeEnum_[i]; - BaseModel[e[0]] = e[1]; + (BaseModel as any)[e[0]] = e[1]; } -BaseModel.db_ = null; -BaseModel.dispatch = function() {}; -BaseModel.saveMutexes_ = {}; - -module.exports = BaseModel; +export default BaseModel; diff --git a/ReactNativeClient/lib/BaseSyncTarget.js b/packages/lib/BaseSyncTarget.js similarity index 96% rename from ReactNativeClient/lib/BaseSyncTarget.js rename to packages/lib/BaseSyncTarget.js index f120943f4a..384279c610 100644 --- a/ReactNativeClient/lib/BaseSyncTarget.js +++ b/packages/lib/BaseSyncTarget.js @@ -1,5 +1,5 @@ -const EncryptionService = require('lib/services/EncryptionService.js'); -const shim = require('lib/shim').default; +const EncryptionService = require('./services/EncryptionService.js'); +const shim = require('./shim').default; class BaseSyncTarget { constructor(db, options = null) { diff --git a/ReactNativeClient/lib/Cache.js b/packages/lib/Cache.js similarity index 100% rename from ReactNativeClient/lib/Cache.js rename to packages/lib/Cache.js diff --git a/ReactNativeClient/lib/ClipperServer.js b/packages/lib/ClipperServer.js similarity index 94% rename from ReactNativeClient/lib/ClipperServer.js rename to packages/lib/ClipperServer.js index c711adf657..7fd0ed9793 100644 --- a/ReactNativeClient/lib/ClipperServer.js +++ b/packages/lib/ClipperServer.js @@ -1,10 +1,10 @@ const urlParser = require('url'); -const Setting = require('lib/models/Setting').default; -const Logger = require('lib/Logger').default; -const { randomClipperPort, startPort } = require('lib/randomClipperPort'); +const Setting = require('./models/Setting').default; +const Logger = require('./Logger').default; +const { randomClipperPort, startPort } = require('./randomClipperPort'); const enableServerDestroy = require('server-destroy'); -const Api = require('lib/services/rest/Api').default; -const ApiResponse = require('lib/services/rest/ApiResponse'); +const Api = require('./services/rest/Api').default; +const ApiResponse = require('./services/rest/ApiResponse').default; const multiparty = require('multiparty'); class ClipperServer { @@ -29,7 +29,6 @@ class ClipperServer { setLogger(l) { this.logger_ = l; - this.api_.setLogger(l); } logger() { diff --git a/ReactNativeClient/lib/CssUtils.js b/packages/lib/CssUtils.js similarity index 100% rename from ReactNativeClient/lib/CssUtils.js rename to packages/lib/CssUtils.js diff --git a/ReactNativeClient/lib/DropboxApi.js b/packages/lib/DropboxApi.js similarity index 96% rename from ReactNativeClient/lib/DropboxApi.js rename to packages/lib/DropboxApi.js index 47b71c60b0..7c7c02d3b6 100644 --- a/ReactNativeClient/lib/DropboxApi.js +++ b/packages/lib/DropboxApi.js @@ -1,8 +1,8 @@ -const Logger = require('lib/Logger').default; -const shim = require('lib/shim').default; -const JoplinError = require('lib/JoplinError'); -const { time } = require('lib/time-utils'); -const EventDispatcher = require('lib/EventDispatcher'); +const Logger = require('./Logger').default; +const shim = require('./shim').default; +const JoplinError = require('./JoplinError'); +const time = require('./time').default; +const EventDispatcher = require('./EventDispatcher'); class DropboxApi { constructor(options) { diff --git a/ReactNativeClient/lib/EventDispatcher.js b/packages/lib/EventDispatcher.js similarity index 100% rename from ReactNativeClient/lib/EventDispatcher.js rename to packages/lib/EventDispatcher.js diff --git a/ReactNativeClient/lib/HtmlToMd.js b/packages/lib/HtmlToMd.js similarity index 92% rename from ReactNativeClient/lib/HtmlToMd.js rename to packages/lib/HtmlToMd.js index 2986be37ca..bb217873e6 100644 --- a/ReactNativeClient/lib/HtmlToMd.js +++ b/packages/lib/HtmlToMd.js @@ -1,5 +1,5 @@ const TurndownService = require('joplin-turndown'); -const markdownUtils = require('lib/markdownUtils').default; +const markdownUtils = require('./markdownUtils').default; class HtmlToMd { parse(html, options = {}) { diff --git a/ReactNativeClient/lib/InMemoryCache.ts b/packages/lib/InMemoryCache.ts similarity index 100% rename from ReactNativeClient/lib/InMemoryCache.ts rename to packages/lib/InMemoryCache.ts diff --git a/ReactNativeClient/lib/JoplinError.js b/packages/lib/JoplinError.js similarity index 100% rename from ReactNativeClient/lib/JoplinError.js rename to packages/lib/JoplinError.js diff --git a/ReactNativeClient/lib/JoplinServerApi.ts b/packages/lib/JoplinServerApi.ts similarity index 95% rename from ReactNativeClient/lib/JoplinServerApi.ts rename to packages/lib/JoplinServerApi.ts index 2ad2ed798f..e53d5e1453 100644 --- a/ReactNativeClient/lib/JoplinServerApi.ts +++ b/packages/lib/JoplinServerApi.ts @@ -1,8 +1,8 @@ -import shim from 'lib/shim'; -import { _ } from 'lib/locale'; -const Logger = require('lib/Logger').default; -const JoplinError = require('lib/JoplinError'); -const { rtrimSlashes } = require('lib/path-utils'); +import shim from './shim'; +import { _ } from './locale'; +const Logger = require('./Logger').default; +const JoplinError = require('./JoplinError'); +const { rtrimSlashes } = require('./path-utils'); const base64 = require('base-64'); interface JoplinServerApiOptions { diff --git a/ReactNativeClient/lib/Logger.ts b/packages/lib/Logger.ts similarity index 98% rename from ReactNativeClient/lib/Logger.ts rename to packages/lib/Logger.ts index 636866389e..d424ec260b 100644 --- a/ReactNativeClient/lib/Logger.ts +++ b/packages/lib/Logger.ts @@ -1,6 +1,6 @@ const moment = require('moment'); -const { time } = require('lib/time-utils.js'); -const { FsDriverDummy } = require('lib/fs-driver-dummy.js'); +const time = require('./time').default; +const { FsDriverDummy } = require('./fs-driver-dummy.js'); export enum TargetType { Database = 'database', diff --git a/ReactNativeClient/lib/ModelCache.js b/packages/lib/ModelCache.js similarity index 100% rename from ReactNativeClient/lib/ModelCache.js rename to packages/lib/ModelCache.js diff --git a/ReactNativeClient/lib/ObjectUtils.js b/packages/lib/ObjectUtils.js similarity index 100% rename from ReactNativeClient/lib/ObjectUtils.js rename to packages/lib/ObjectUtils.js diff --git a/ReactNativeClient/lib/PoorManIntervals.ts b/packages/lib/PoorManIntervals.ts similarity index 98% rename from ReactNativeClient/lib/PoorManIntervals.ts rename to packages/lib/PoorManIntervals.ts index 05af91d988..16b438b2d0 100644 --- a/ReactNativeClient/lib/PoorManIntervals.ts +++ b/packages/lib/PoorManIntervals.ts @@ -6,7 +6,7 @@ // whenever the update() function is called, and in mobile it's called for // example on the Redux action middleware or when the app gets focus. -const { time } = require('lib/time-utils.js'); +const time = require('./time').default; type IntervalId = number; diff --git a/packages/lib/README.md b/packages/lib/README.md new file mode 100644 index 0000000000..3bf35aef48 --- /dev/null +++ b/packages/lib/README.md @@ -0,0 +1,7 @@ +# @joplinapp/lib + +Library shared between all applications. + +- It should not have dependencies to any other `@joplin` package to avoid dependency cycles. +- Binary packages should be passed via dependency injection from the parent packages, for example like it is done in shim-init-node. This is because each app might need to compile the binary package in a specific way, so doing it from /lib would cause issues. +- It should not include the `react` or `react-native` packages because React in particular breaks when there's more than one instance of it in node_modules. React is passed via dependency injections so that some hooks can be shared. \ No newline at end of file diff --git a/ReactNativeClient/lib/SyncTargetAmazonS3.js b/packages/lib/SyncTargetAmazonS3.js similarity index 88% rename from ReactNativeClient/lib/SyncTargetAmazonS3.js rename to packages/lib/SyncTargetAmazonS3.js index a21b81b7cc..b21c665c1c 100644 --- a/ReactNativeClient/lib/SyncTargetAmazonS3.js +++ b/packages/lib/SyncTargetAmazonS3.js @@ -1,9 +1,9 @@ -const BaseSyncTarget = require('lib/BaseSyncTarget.js'); -const { _ } = require('lib/locale'); -const Setting = require('lib/models/Setting').default; -const { FileApi } = require('lib/file-api.js'); -const Synchronizer = require('lib/Synchronizer').default; -const { FileApiDriverAmazonS3 } = require('lib/file-api-driver-amazon-s3.js'); +const BaseSyncTarget = require('./BaseSyncTarget.js'); +const { _ } = require('./locale'); +const Setting = require('./models/Setting').default; +const { FileApi } = require('./file-api.js'); +const Synchronizer = require('./Synchronizer').default; +const { FileApiDriverAmazonS3 } = require('./file-api-driver-amazon-s3.js'); const S3 = require('aws-sdk/clients/s3'); class SyncTargetAmazonS3 extends BaseSyncTarget { diff --git a/ReactNativeClient/lib/SyncTargetDropbox.js b/packages/lib/SyncTargetDropbox.js similarity index 76% rename from ReactNativeClient/lib/SyncTargetDropbox.js rename to packages/lib/SyncTargetDropbox.js index 493b0ec036..65d86a0038 100644 --- a/ReactNativeClient/lib/SyncTargetDropbox.js +++ b/packages/lib/SyncTargetDropbox.js @@ -1,11 +1,11 @@ -const BaseSyncTarget = require('lib/BaseSyncTarget.js'); -const { _ } = require('lib/locale'); -const DropboxApi = require('lib/DropboxApi'); -const Setting = require('lib/models/Setting').default; -const { parameters } = require('lib/parameters.js'); -const { FileApi } = require('lib/file-api.js'); -const Synchronizer = require('lib/Synchronizer').default; -const { FileApiDriverDropbox } = require('lib/file-api-driver-dropbox.js'); +const BaseSyncTarget = require('./BaseSyncTarget.js'); +const { _ } = require('./locale'); +const DropboxApi = require('./DropboxApi'); +const Setting = require('./models/Setting').default; +const { parameters } = require('./parameters.js'); +const { FileApi } = require('./file-api.js'); +const Synchronizer = require('./Synchronizer').default; +const { FileApiDriverDropbox } = require('./file-api-driver-dropbox.js'); class SyncTargetDropbox extends BaseSyncTarget { static id() { diff --git a/ReactNativeClient/lib/SyncTargetFilesystem.js b/packages/lib/SyncTargetFilesystem.js similarity index 69% rename from ReactNativeClient/lib/SyncTargetFilesystem.js rename to packages/lib/SyncTargetFilesystem.js index 00ac98b068..85ba1f8abd 100644 --- a/ReactNativeClient/lib/SyncTargetFilesystem.js +++ b/packages/lib/SyncTargetFilesystem.js @@ -1,9 +1,9 @@ -const BaseSyncTarget = require('lib/BaseSyncTarget.js'); -const { _ } = require('lib/locale'); -const Setting = require('lib/models/Setting').default; -const { FileApi } = require('lib/file-api.js'); -const { FileApiDriverLocal } = require('lib/file-api-driver-local.js'); -const Synchronizer = require('lib/Synchronizer').default; +const BaseSyncTarget = require('./BaseSyncTarget.js'); +const { _ } = require('./locale'); +const Setting = require('./models/Setting').default; +const { FileApi } = require('./file-api.js'); +const { FileApiDriverLocal } = require('./file-api-driver-local.js'); +const Synchronizer = require('./Synchronizer').default; class SyncTargetFilesystem extends BaseSyncTarget { static id() { diff --git a/ReactNativeClient/lib/SyncTargetMemory.js b/packages/lib/SyncTargetMemory.js similarity index 65% rename from ReactNativeClient/lib/SyncTargetMemory.js rename to packages/lib/SyncTargetMemory.js index b107dce352..91e268c67f 100644 --- a/ReactNativeClient/lib/SyncTargetMemory.js +++ b/packages/lib/SyncTargetMemory.js @@ -1,8 +1,8 @@ -const BaseSyncTarget = require('lib/BaseSyncTarget.js'); -const Setting = require('lib/models/Setting').default; -const { FileApi } = require('lib/file-api.js'); -const { FileApiDriverMemory } = require('lib/file-api-driver-memory.js'); -const Synchronizer = require('lib/Synchronizer').default; +const BaseSyncTarget = require('./BaseSyncTarget.js'); +const Setting = require('./models/Setting').default; +const { FileApi } = require('./file-api.js'); +const { FileApiDriverMemory } = require('./file-api-driver-memory.js'); +const Synchronizer = require('./Synchronizer').default; class SyncTargetMemory extends BaseSyncTarget { static id() { diff --git a/ReactNativeClient/lib/SyncTargetNextcloud.js b/packages/lib/SyncTargetNextcloud.js similarity index 82% rename from ReactNativeClient/lib/SyncTargetNextcloud.js rename to packages/lib/SyncTargetNextcloud.js index 5a128280b2..48e2f7a340 100644 --- a/ReactNativeClient/lib/SyncTargetNextcloud.js +++ b/packages/lib/SyncTargetNextcloud.js @@ -1,12 +1,12 @@ // The Nextcloud sync target is essentially a wrapper over the WebDAV sync target, // thus all the calls to SyncTargetWebDAV to avoid duplicate code. -const BaseSyncTarget = require('lib/BaseSyncTarget.js'); -const { _ } = require('lib/locale'); -const Setting = require('lib/models/Setting').default; -const Synchronizer = require('lib/Synchronizer').default; -const SyncTargetWebDAV = require('lib/SyncTargetWebDAV'); -const JoplinServerApi = require('lib/JoplinServerApi.js').default; +const BaseSyncTarget = require('./BaseSyncTarget.js'); +const { _ } = require('./locale'); +const Setting = require('./models/Setting').default; +const Synchronizer = require('./Synchronizer').default; +const SyncTargetWebDAV = require('./SyncTargetWebDAV'); +const JoplinServerApi = require('./JoplinServerApi.js').default; class SyncTargetNextcloud extends BaseSyncTarget { diff --git a/ReactNativeClient/lib/SyncTargetOneDrive.js b/packages/lib/SyncTargetOneDrive.js similarity index 85% rename from ReactNativeClient/lib/SyncTargetOneDrive.js rename to packages/lib/SyncTargetOneDrive.js index 42b1f1c7d7..4d23a1a637 100644 --- a/ReactNativeClient/lib/SyncTargetOneDrive.js +++ b/packages/lib/SyncTargetOneDrive.js @@ -1,11 +1,11 @@ -const BaseSyncTarget = require('lib/BaseSyncTarget.js'); -const { _ } = require('lib/locale'); -const { OneDriveApi } = require('lib/onedrive-api.js'); -const Setting = require('lib/models/Setting').default; -const { parameters } = require('lib/parameters.js'); -const { FileApi } = require('lib/file-api.js'); -const Synchronizer = require('lib/Synchronizer').default; -const { FileApiDriverOneDrive } = require('lib/file-api-driver-onedrive.js'); +const BaseSyncTarget = require('./BaseSyncTarget.js'); +const { _ } = require('./locale'); +const { OneDriveApi } = require('./onedrive-api.js'); +const Setting = require('./models/Setting').default; +const { parameters } = require('./parameters.js'); +const { FileApi } = require('./file-api.js'); +const Synchronizer = require('./Synchronizer').default; +const { FileApiDriverOneDrive } = require('./file-api-driver-onedrive.js'); class SyncTargetOneDrive extends BaseSyncTarget { static id() { diff --git a/ReactNativeClient/lib/SyncTargetOneDriveDev.js b/packages/lib/SyncTargetOneDriveDev.js similarity index 70% rename from ReactNativeClient/lib/SyncTargetOneDriveDev.js rename to packages/lib/SyncTargetOneDriveDev.js index 429645f0a6..48949925ff 100644 --- a/ReactNativeClient/lib/SyncTargetOneDriveDev.js +++ b/packages/lib/SyncTargetOneDriveDev.js @@ -1,6 +1,6 @@ -const SyncTargetOneDrive = require('lib/SyncTargetOneDrive.js'); -const { _ } = require('lib/locale'); -const { parameters } = require('lib/parameters.js'); +const SyncTargetOneDrive = require('./SyncTargetOneDrive.js'); +const { _ } = require('./locale'); +const { parameters } = require('./parameters.js'); class SyncTargetOneDriveDev extends SyncTargetOneDrive { static id() { diff --git a/ReactNativeClient/lib/SyncTargetRegistry.js b/packages/lib/SyncTargetRegistry.js similarity index 100% rename from ReactNativeClient/lib/SyncTargetRegistry.js rename to packages/lib/SyncTargetRegistry.js diff --git a/ReactNativeClient/lib/SyncTargetWebDAV.js b/packages/lib/SyncTargetWebDAV.js similarity index 81% rename from ReactNativeClient/lib/SyncTargetWebDAV.js rename to packages/lib/SyncTargetWebDAV.js index 1b1a068182..4d00499c73 100644 --- a/ReactNativeClient/lib/SyncTargetWebDAV.js +++ b/packages/lib/SyncTargetWebDAV.js @@ -1,10 +1,10 @@ -const BaseSyncTarget = require('lib/BaseSyncTarget.js'); -const { _ } = require('lib/locale'); -const Setting = require('lib/models/Setting').default; -const { FileApi } = require('lib/file-api.js'); -const Synchronizer = require('lib/Synchronizer').default; -const WebDavApi = require('lib/WebDavApi'); -const { FileApiDriverWebDav } = require('lib/file-api-driver-webdav'); +const BaseSyncTarget = require('./BaseSyncTarget.js'); +const { _ } = require('./locale'); +const Setting = require('./models/Setting').default; +const { FileApi } = require('./file-api.js'); +const Synchronizer = require('./Synchronizer').default; +const WebDavApi = require('./WebDavApi'); +const { FileApiDriverWebDav } = require('./file-api-driver-webdav'); class SyncTargetWebDAV extends BaseSyncTarget { static id() { diff --git a/ReactNativeClient/lib/Synchronizer.ts b/packages/lib/Synchronizer.ts similarity index 97% rename from ReactNativeClient/lib/Synchronizer.ts rename to packages/lib/Synchronizer.ts index f4b5e571a4..2acaf5a48b 100644 --- a/ReactNativeClient/lib/Synchronizer.ts +++ b/packages/lib/Synchronizer.ts @@ -1,24 +1,24 @@ import Logger from './Logger'; -import LockHandler, { LockType } from 'lib/services/synchronizer/LockHandler'; -import Setting from 'lib/models/Setting'; -import shim from 'lib/shim'; -import MigrationHandler from 'lib/services/synchronizer/MigrationHandler'; -import eventManager from 'lib/eventManager'; -import { _ } from 'lib/locale'; +import LockHandler, { LockType } from './services/synchronizer/LockHandler'; +import Setting from './models/Setting'; +import shim from './shim'; +import MigrationHandler from './services/synchronizer/MigrationHandler'; +import eventManager from './eventManager'; +import { _ } from './locale'; -const BaseItem = require('lib/models/BaseItem.js'); -const Folder = require('lib/models/Folder.js'); -const Note = require('lib/models/Note.js'); -const Resource = require('lib/models/Resource.js'); -const ItemChange = require('lib/models/ItemChange.js'); -const ResourceLocalState = require('lib/models/ResourceLocalState.js'); -const MasterKey = require('lib/models/MasterKey.js'); -const BaseModel = require('lib/BaseModel.js'); +const BaseItem = require('./models/BaseItem.js'); +const Folder = require('./models/Folder.js'); +const Note = require('./models/Note.js'); +const Resource = require('./models/Resource.js'); +const ItemChange = require('./models/ItemChange.js'); +const ResourceLocalState = require('./models/ResourceLocalState.js'); +const MasterKey = require('./models/MasterKey.js'); +const BaseModel = require('./BaseModel').default; const { sprintf } = require('sprintf-js'); -const { time } = require('lib/time-utils.js'); -const JoplinError = require('lib/JoplinError'); -const TaskQueue = require('lib/TaskQueue'); -const { Dirnames } = require('lib/services/synchronizer/utils/types'); +const time = require('./time').default; +const JoplinError = require('./JoplinError'); +const TaskQueue = require('./TaskQueue'); +const { Dirnames } = require('./services/synchronizer/utils/types'); interface RemoteItem { id: string, diff --git a/ReactNativeClient/lib/TaskQueue.js b/packages/lib/TaskQueue.js similarity index 95% rename from ReactNativeClient/lib/TaskQueue.js rename to packages/lib/TaskQueue.js index 8276d95d09..f452030ba4 100644 --- a/ReactNativeClient/lib/TaskQueue.js +++ b/packages/lib/TaskQueue.js @@ -1,6 +1,6 @@ -const { time } = require('lib/time-utils.js'); -const Setting = require('lib/models/Setting').default; -const Logger = require('lib/Logger').default; +const time = require('./time').default; +const Setting = require('./models/Setting').default; +const Logger = require('./Logger').default; class TaskQueue { constructor(name) { diff --git a/ReactNativeClient/lib/TemplateUtils.js b/packages/lib/TemplateUtils.js similarity index 95% rename from ReactNativeClient/lib/TemplateUtils.js rename to packages/lib/TemplateUtils.js index b03ad6b2ff..3d7791febb 100644 --- a/ReactNativeClient/lib/TemplateUtils.js +++ b/packages/lib/TemplateUtils.js @@ -1,5 +1,5 @@ -const shim = require('lib/shim').default; -const { time } = require('lib/time-utils.js'); +const shim = require('./shim').default; +const time = require('./time').default; const Mustache = require('mustache'); const TemplateUtils = {}; diff --git a/ReactNativeClient/lib/WebDavApi.js b/packages/lib/WebDavApi.js similarity index 98% rename from ReactNativeClient/lib/WebDavApi.js rename to packages/lib/WebDavApi.js index 8bfe99e164..6fea00f818 100644 --- a/ReactNativeClient/lib/WebDavApi.js +++ b/packages/lib/WebDavApi.js @@ -1,9 +1,9 @@ -const Logger = require('lib/Logger').default; -const shim = require('lib/shim').default; +const Logger = require('./Logger').default; +const shim = require('./shim').default; const parseXmlString = require('xml2js').parseString; -const JoplinError = require('lib/JoplinError'); +const JoplinError = require('./JoplinError'); const URL = require('url-parse'); -const { rtrimSlashes } = require('lib/path-utils'); +const { rtrimSlashes } = require('./path-utils'); const base64 = require('base-64'); diff --git a/ReactNativeClient/lib/WelcomeUtils.js b/packages/lib/WelcomeUtils.js similarity index 84% rename from ReactNativeClient/lib/WelcomeUtils.js rename to packages/lib/WelcomeUtils.js index c3ce19c99f..7df5ca73c8 100644 --- a/ReactNativeClient/lib/WelcomeUtils.js +++ b/packages/lib/WelcomeUtils.js @@ -1,12 +1,12 @@ const welcomeAssets = require('./welcomeAssets'); -const Note = require('lib/models/Note'); -const Setting = require('lib/models/Setting').default; -const Folder = require('lib/models/Folder'); -const Tag = require('lib/models/Tag'); -const shim = require('lib/shim').default; -const uuid = require('lib/uuid').default; -const { fileExtension, basename } = require('lib/path-utils'); -const { pregQuote } = require('lib/string-utils'); +const Note = require('./models/Note'); +const Setting = require('./models/Setting').default; +const Folder = require('./models/Folder'); +const Tag = require('./models/Tag'); +const shim = require('./shim').default; +const uuid = require('./uuid').default; +const { fileExtension, basename } = require('./path-utils'); +const { pregQuote } = require('./string-utils'); class WelcomeUtils { static async createWelcomeItems() { diff --git a/ReactNativeClient/lib/commands/historyBackward.ts b/packages/lib/commands/historyBackward.ts similarity index 92% rename from ReactNativeClient/lib/commands/historyBackward.ts rename to packages/lib/commands/historyBackward.ts index 1e1c749f13..d0209a124e 100644 --- a/ReactNativeClient/lib/commands/historyBackward.ts +++ b/packages/lib/commands/historyBackward.ts @@ -1,5 +1,5 @@ import { utils, CommandRuntime, CommandDeclaration } from '../services/CommandService'; -import { _ } from 'lib/locale'; +import { _ } from '../locale'; export const declaration:CommandDeclaration = { name: 'historyBackward', diff --git a/ReactNativeClient/lib/commands/historyForward.ts b/packages/lib/commands/historyForward.ts similarity index 92% rename from ReactNativeClient/lib/commands/historyForward.ts rename to packages/lib/commands/historyForward.ts index 42fb29b1a2..be1804d124 100644 --- a/ReactNativeClient/lib/commands/historyForward.ts +++ b/packages/lib/commands/historyForward.ts @@ -1,5 +1,5 @@ import { utils, CommandRuntime, CommandDeclaration } from '../services/CommandService'; -import { _ } from 'lib/locale'; +import { _ } from '../locale'; export const declaration:CommandDeclaration = { name: 'historyForward', diff --git a/ReactNativeClient/lib/commands/synchronize.ts b/packages/lib/commands/synchronize.ts similarity index 94% rename from ReactNativeClient/lib/commands/synchronize.ts rename to packages/lib/commands/synchronize.ts index c9f976b0b5..e9a4afbb55 100644 --- a/ReactNativeClient/lib/commands/synchronize.ts +++ b/packages/lib/commands/synchronize.ts @@ -1,6 +1,6 @@ import { utils, CommandRuntime, CommandDeclaration, CommandContext } from '../services/CommandService'; -import { _ } from 'lib/locale'; -const { reg } = require('lib/registry.js'); +import { _ } from '../locale'; +const { reg } = require('../registry.js'); export const declaration:CommandDeclaration = { name: 'synchronize', diff --git a/ReactNativeClient/lib/components/shared/config-shared.js b/packages/lib/components/shared/config-shared.js similarity index 95% rename from ReactNativeClient/lib/components/shared/config-shared.js rename to packages/lib/components/shared/config-shared.js index a74a40b9b5..52e5acb54a 100644 --- a/ReactNativeClient/lib/components/shared/config-shared.js +++ b/packages/lib/components/shared/config-shared.js @@ -1,9 +1,9 @@ -const Setting = require('lib/models/Setting').default; -const SyncTargetRegistry = require('lib/SyncTargetRegistry'); -const ObjectUtils = require('lib/ObjectUtils'); -const { _ } = require('lib/locale'); +const Setting = require('../../models/Setting').default; +const SyncTargetRegistry = require('../../SyncTargetRegistry'); +const ObjectUtils = require('../../ObjectUtils'); +const { _ } = require('../../locale'); const { createSelector } = require('reselect'); -const { reg } = require('lib/registry'); +const { reg } = require('../../registry'); const shared = {}; diff --git a/ReactNativeClient/lib/components/shared/dropbox-login-shared.js b/packages/lib/components/shared/dropbox-login-shared.js similarity index 86% rename from ReactNativeClient/lib/components/shared/dropbox-login-shared.js rename to packages/lib/components/shared/dropbox-login-shared.js index 2df9a6cf80..209b1a171b 100644 --- a/ReactNativeClient/lib/components/shared/dropbox-login-shared.js +++ b/packages/lib/components/shared/dropbox-login-shared.js @@ -1,8 +1,8 @@ -const shim = require('lib/shim').default; -const SyncTargetRegistry = require('lib/SyncTargetRegistry'); -const { reg } = require('lib/registry.js'); -const { _ } = require('lib/locale'); -const Setting = require('lib/models/Setting').default; +const shim = require('../../shim').default; +const SyncTargetRegistry = require('../../SyncTargetRegistry'); +const { reg } = require('../../registry.js'); +const { _ } = require('../../locale'); +const Setting = require('../../models/Setting').default; class Shared { constructor(comp, showInfoMessageBox, showErrorMessageBox) { diff --git a/ReactNativeClient/lib/components/shared/encryption-config-shared.js b/packages/lib/components/shared/encryption-config-shared.js similarity index 91% rename from ReactNativeClient/lib/components/shared/encryption-config-shared.js rename to packages/lib/components/shared/encryption-config-shared.js index 32c29a7f7d..72c019835b 100644 --- a/ReactNativeClient/lib/components/shared/encryption-config-shared.js +++ b/packages/lib/components/shared/encryption-config-shared.js @@ -1,10 +1,10 @@ -const EncryptionService = require('lib/services/EncryptionService'); -const { _ } = require('lib/locale'); -const BaseItem = require('lib/models/BaseItem.js'); -const Setting = require('lib/models/Setting').default; -const MasterKey = require('lib/models/MasterKey.js'); -const { reg } = require('lib/registry.js'); -const shim = require('lib/shim').default; +const EncryptionService = require('../../services/EncryptionService'); +const { _ } = require('../../locale'); +const BaseItem = require('../../models/BaseItem.js'); +const Setting = require('../../models/Setting').default; +const MasterKey = require('../../models/MasterKey.js'); +const { reg } = require('../../registry.js'); +const shim = require('../../shim').default; const shared = {}; diff --git a/ReactNativeClient/lib/components/shared/note-screen-shared.js b/packages/lib/components/shared/note-screen-shared.js similarity index 95% rename from ReactNativeClient/lib/components/shared/note-screen-shared.js rename to packages/lib/components/shared/note-screen-shared.js index 5911cefb5d..8bf74c5c65 100644 --- a/ReactNativeClient/lib/components/shared/note-screen-shared.js +++ b/packages/lib/components/shared/note-screen-shared.js @@ -1,11 +1,11 @@ -const { reg } = require('lib/registry.js'); -const Folder = require('lib/models/Folder.js'); -const BaseModel = require('lib/BaseModel.js'); -const Note = require('lib/models/Note.js'); -const Resource = require('lib/models/Resource.js'); -const ResourceFetcher = require('lib/services/ResourceFetcher.js'); -const DecryptionWorker = require('lib/services/DecryptionWorker.js'); -const Setting = require('lib/models/Setting').default; +const { reg } = require('../../registry.js'); +const Folder = require('../../models/Folder.js'); +const BaseModel = require('../../BaseModel').default; +const Note = require('../../models/Note.js'); +const Resource = require('../../models/Resource.js'); +const ResourceFetcher = require('../../services/ResourceFetcher.js'); +const DecryptionWorker = require('../../services/DecryptionWorker.js'); +const Setting = require('../../models/Setting').default; const Mutex = require('async-mutex').Mutex; const shared = {}; diff --git a/ReactNativeClient/lib/components/shared/reduxSharedMiddleware.js b/packages/lib/components/shared/reduxSharedMiddleware.js similarity index 88% rename from ReactNativeClient/lib/components/shared/reduxSharedMiddleware.js rename to packages/lib/components/shared/reduxSharedMiddleware.js index 7e764650fd..3eb9cf8026 100644 --- a/ReactNativeClient/lib/components/shared/reduxSharedMiddleware.js +++ b/packages/lib/components/shared/reduxSharedMiddleware.js @@ -1,11 +1,11 @@ -const Setting = require('lib/models/Setting').default; -const Tag = require('lib/models/Tag'); -const BaseModel = require('lib/BaseModel'); -const Note = require('lib/models/Note'); -const { reg } = require('lib/registry.js'); -const ResourceFetcher = require('lib/services/ResourceFetcher'); -const DecryptionWorker = require('lib/services/DecryptionWorker'); -const eventManager = require('lib/eventManager').default; +const Setting = require('../../models/Setting').default; +const Tag = require('../../models/Tag'); +const BaseModel = require('../../BaseModel').default; +const Note = require('../../models/Note'); +const { reg } = require('../../registry.js'); +const ResourceFetcher = require('../../services/ResourceFetcher'); +const DecryptionWorker = require('../../services/DecryptionWorker'); +const eventManager = require('../../eventManager').default; const reduxSharedMiddleware = async function(store, next, action) { const newState = store.getState(); diff --git a/ReactNativeClient/lib/components/shared/side-menu-shared.js b/packages/lib/components/shared/side-menu-shared.js similarity index 95% rename from ReactNativeClient/lib/components/shared/side-menu-shared.js rename to packages/lib/components/shared/side-menu-shared.js index 6c1cb953c5..a2c5d6fcfe 100644 --- a/ReactNativeClient/lib/components/shared/side-menu-shared.js +++ b/packages/lib/components/shared/side-menu-shared.js @@ -1,5 +1,5 @@ -const Folder = require('lib/models/Folder'); -const BaseModel = require('lib/BaseModel'); +const Folder = require('../../models/Folder'); +const BaseModel = require('../../BaseModel').default; const shared = {}; @@ -70,7 +70,7 @@ shared.renderTags = function(props, renderItem) { }; shared.synchronize_press = async function(comp) { - const { reg } = require('lib/registry.js'); + const { reg } = require('../../registry.js'); const action = comp.props.syncStarted ? 'cancel' : 'start'; diff --git a/ReactNativeClient/lib/database-driver-node.js b/packages/lib/database-driver-node.js similarity index 100% rename from ReactNativeClient/lib/database-driver-node.js rename to packages/lib/database-driver-node.js diff --git a/ReactNativeClient/lib/database.js b/packages/lib/database.js similarity index 98% rename from ReactNativeClient/lib/database.js rename to packages/lib/database.js index 873f438d9d..6a60d307a2 100644 --- a/ReactNativeClient/lib/database.js +++ b/packages/lib/database.js @@ -1,7 +1,7 @@ -const Logger = require('lib/Logger').default; -const { time } = require('lib/time-utils.js'); +const Logger = require('./Logger').default; +const time = require('./time').default; const Mutex = require('async-mutex').Mutex; -const shim = require('lib/shim').default; +const shim = require('./shim').default; class Database { constructor(driver) { diff --git a/ReactNativeClient/lib/envFromArgs.js b/packages/lib/envFromArgs.js similarity index 100% rename from ReactNativeClient/lib/envFromArgs.js rename to packages/lib/envFromArgs.js diff --git a/ReactNativeClient/lib/errorUtils.ts b/packages/lib/errorUtils.ts similarity index 100% rename from ReactNativeClient/lib/errorUtils.ts rename to packages/lib/errorUtils.ts diff --git a/ReactNativeClient/lib/eventManager.ts b/packages/lib/eventManager.ts similarity index 100% rename from ReactNativeClient/lib/eventManager.ts rename to packages/lib/eventManager.ts diff --git a/ReactNativeClient/lib/file-api-driver-amazon-s3.js b/packages/lib/file-api-driver-amazon-s3.js similarity index 97% rename from ReactNativeClient/lib/file-api-driver-amazon-s3.js rename to packages/lib/file-api-driver-amazon-s3.js index 3bd458174e..6e202db261 100644 --- a/ReactNativeClient/lib/file-api-driver-amazon-s3.js +++ b/packages/lib/file-api-driver-amazon-s3.js @@ -1,7 +1,7 @@ -const { basicDelta } = require('lib/file-api'); -const { basename } = require('lib/path-utils'); -const shim = require('lib/shim').default; -const JoplinError = require('lib/JoplinError'); +const { basicDelta } = require('./file-api'); +const { basename } = require('./path-utils'); +const shim = require('./shim').default; +const JoplinError = require('./JoplinError'); const S3_MAX_DELETES = 1000; diff --git a/ReactNativeClient/lib/file-api-driver-dropbox.js b/packages/lib/file-api-driver-dropbox.js similarity index 97% rename from ReactNativeClient/lib/file-api-driver-dropbox.js rename to packages/lib/file-api-driver-dropbox.js index 94a07eb1fc..ba6dd5df0b 100644 --- a/ReactNativeClient/lib/file-api-driver-dropbox.js +++ b/packages/lib/file-api-driver-dropbox.js @@ -1,6 +1,6 @@ -const { time } = require('lib/time-utils.js'); -const shim = require('lib/shim').default; -const JoplinError = require('lib/JoplinError'); +const time = require('./time').default; +const shim = require('./shim').default; +const JoplinError = require('./JoplinError'); class FileApiDriverDropbox { constructor(api) { diff --git a/ReactNativeClient/lib/file-api-driver-local.js b/packages/lib/file-api-driver-local.js similarity index 99% rename from ReactNativeClient/lib/file-api-driver-local.js rename to packages/lib/file-api-driver-local.js index 8393f623a0..9b72e0f6a6 100644 --- a/ReactNativeClient/lib/file-api-driver-local.js +++ b/packages/lib/file-api-driver-local.js @@ -1,4 +1,4 @@ -const { basicDelta } = require('lib/file-api'); +const { basicDelta } = require('./file-api'); // NOTE: when synchronising with the file system the time resolution is the second (unlike milliseconds for OneDrive for instance). // What it means is that if, for example, client 1 changes a note at time t, and client 2 changes the same note within the same second, diff --git a/ReactNativeClient/lib/file-api-driver-memory.js b/packages/lib/file-api-driver-memory.js similarity index 97% rename from ReactNativeClient/lib/file-api-driver-memory.js rename to packages/lib/file-api-driver-memory.js index 568ef3aabc..9d8168092e 100644 --- a/ReactNativeClient/lib/file-api-driver-memory.js +++ b/packages/lib/file-api-driver-memory.js @@ -1,6 +1,6 @@ -const { time } = require('lib/time-utils.js'); +const time = require('./time').default; const fs = require('fs-extra'); -const { basicDelta } = require('lib/file-api'); +const { basicDelta } = require('./file-api'); class FileApiDriverMemory { constructor() { diff --git a/ReactNativeClient/lib/file-api-driver-onedrive.js b/packages/lib/file-api-driver-onedrive.js similarity index 98% rename from ReactNativeClient/lib/file-api-driver-onedrive.js rename to packages/lib/file-api-driver-onedrive.js index 32f5f0f081..7284650a4c 100644 --- a/ReactNativeClient/lib/file-api-driver-onedrive.js +++ b/packages/lib/file-api-driver-onedrive.js @@ -1,6 +1,6 @@ const moment = require('moment'); -const { dirname, basename } = require('lib/path-utils'); -const shim = require('lib/shim').default; +const { dirname, basename } = require('./path-utils'); +const shim = require('./shim').default; class FileApiDriverOneDrive { constructor(api) { diff --git a/ReactNativeClient/lib/file-api-driver-webdav.js b/packages/lib/file-api-driver-webdav.js similarity index 97% rename from ReactNativeClient/lib/file-api-driver-webdav.js rename to packages/lib/file-api-driver-webdav.js index 9d05f828f7..a189e8d27f 100644 --- a/ReactNativeClient/lib/file-api-driver-webdav.js +++ b/packages/lib/file-api-driver-webdav.js @@ -1,6 +1,6 @@ -const { basicDelta } = require('lib/file-api'); -const { rtrimSlashes, ltrimSlashes } = require('lib/path-utils'); -const JoplinError = require('lib/JoplinError'); +const { basicDelta } = require('./file-api'); +const { rtrimSlashes, ltrimSlashes } = require('./path-utils'); +const JoplinError = require('./JoplinError'); class FileApiDriverWebDav { constructor(api) { diff --git a/ReactNativeClient/lib/file-api.js b/packages/lib/file-api.js similarity index 97% rename from ReactNativeClient/lib/file-api.js rename to packages/lib/file-api.js index 79cc3df03a..c2b70076ea 100644 --- a/ReactNativeClient/lib/file-api.js +++ b/packages/lib/file-api.js @@ -1,10 +1,10 @@ -const { isHidden } = require('lib/path-utils'); -const Logger = require('lib/Logger').default; -const shim = require('lib/shim').default; -const BaseItem = require('lib/models/BaseItem.js'); -const JoplinError = require('lib/JoplinError'); -const ArrayUtils = require('lib/ArrayUtils'); -const { time } = require('lib/time-utils.js'); +const { isHidden } = require('./path-utils'); +const Logger = require('./Logger').default; +const shim = require('./shim').default; +const BaseItem = require('./models/BaseItem.js'); +const JoplinError = require('./JoplinError'); +const ArrayUtils = require('./ArrayUtils'); +const time = require('./time').default; const { sprintf } = require('sprintf-js'); const Mutex = require('async-mutex').Mutex; diff --git a/ReactNativeClient/lib/folders-screen-utils.js b/packages/lib/folders-screen-utils.js similarity index 92% rename from ReactNativeClient/lib/folders-screen-utils.js rename to packages/lib/folders-screen-utils.js index 86b365177c..93789c4400 100644 --- a/ReactNativeClient/lib/folders-screen-utils.js +++ b/packages/lib/folders-screen-utils.js @@ -1,6 +1,6 @@ -const Folder = require('lib/models/Folder.js'); -const Setting = require('lib/models/Setting').default; -const shim = require('lib/shim').default; +const Folder = require('./models/Folder.js'); +const Setting = require('./models/Setting').default; +const shim = require('./shim').default; class FoldersScreenUtils { static async allForDisplay(options = {}) { diff --git a/ReactNativeClient/lib/fs-driver-base.js b/packages/lib/fs-driver-base.js similarity index 93% rename from ReactNativeClient/lib/fs-driver-base.js rename to packages/lib/fs-driver-base.js index 1e145b3ce2..e7639d9994 100644 --- a/ReactNativeClient/lib/fs-driver-base.js +++ b/packages/lib/fs-driver-base.js @@ -1,6 +1,6 @@ -const { filename, fileExtension } = require('lib/path-utils'); -const { time } = require('lib/time-utils.js'); -const Setting = require('lib/models/Setting').default; +const { filename, fileExtension } = require('./path-utils'); +const time = require('./time').default; +const Setting = require('./models/Setting').default; const md5 = require('md5'); class FsDriverBase { diff --git a/ReactNativeClient/lib/fs-driver-dummy.js b/packages/lib/fs-driver-dummy.js similarity index 100% rename from ReactNativeClient/lib/fs-driver-dummy.js rename to packages/lib/fs-driver-dummy.js diff --git a/ReactNativeClient/lib/fs-driver-node.ts b/packages/lib/fs-driver-node.ts similarity index 98% rename from ReactNativeClient/lib/fs-driver-node.ts rename to packages/lib/fs-driver-node.ts index 35a1422aed..833261684b 100644 --- a/ReactNativeClient/lib/fs-driver-node.ts +++ b/packages/lib/fs-driver-node.ts @@ -1,8 +1,8 @@ import { resolve as nodeResolve } from 'path'; const fs = require('fs-extra'); -const { time } = require('lib/time-utils.js'); -const FsDriverBase = require('lib/fs-driver-base'); +const time = require('./time').default; +const FsDriverBase = require('./fs-driver-base'); export default class FsDriverNode extends FsDriverBase { diff --git a/ReactNativeClient/lib/geolocation-node.js b/packages/lib/geolocation-node.js similarity index 94% rename from ReactNativeClient/lib/geolocation-node.js rename to packages/lib/geolocation-node.js index 7084f013d6..7ece9e3635 100644 --- a/ReactNativeClient/lib/geolocation-node.js +++ b/packages/lib/geolocation-node.js @@ -1,4 +1,4 @@ -const shim = require('lib/shim').default; +const shim = require('./shim').default; class GeolocationNode { static async currentPosition(options = null) { diff --git a/ReactNativeClient/lib/htmlUtils.js b/packages/lib/htmlUtils.js similarity index 96% rename from ReactNativeClient/lib/htmlUtils.js rename to packages/lib/htmlUtils.js index 2da94dfe6c..acd0b6f062 100644 --- a/ReactNativeClient/lib/htmlUtils.js +++ b/packages/lib/htmlUtils.js @@ -1,7 +1,7 @@ -const urlUtils = require('lib/urlUtils.js'); +const urlUtils = require('./urlUtils.js'); const Entities = require('html-entities').AllHtmlEntities; const htmlentities = new Entities().encode; -const htmlparser2 = require('htmlparser2'); +const htmlparser2 = require('@joplinapp/fork-htmlparser2'); // [\s\S] instead of . for multiline matching // https://stackoverflow.com/a/16119722/561309 diff --git a/ReactNativeClient/lib/images/SideMenuHeader.png b/packages/lib/images/SideMenuHeader.png similarity index 100% rename from ReactNativeClient/lib/images/SideMenuHeader.png rename to packages/lib/images/SideMenuHeader.png diff --git a/ReactNativeClient/lib/import-enex-html-gen.js b/packages/lib/import-enex-html-gen.js similarity index 96% rename from ReactNativeClient/lib/import-enex-html-gen.js rename to packages/lib/import-enex-html-gen.js index 2d543a4317..36eb525485 100644 --- a/ReactNativeClient/lib/import-enex-html-gen.js +++ b/packages/lib/import-enex-html-gen.js @@ -1,7 +1,7 @@ const stringToStream = require('string-to-stream'); // const cleanHtml = require('clean-html'); -const resourceUtils = require('lib/resourceUtils.js'); -const { isSelfClosingTag } = require('lib/htmlUtils'); +const resourceUtils = require('./resourceUtils.js'); +const { isSelfClosingTag } = require('./htmlUtils'); const Entities = require('html-entities').AllHtmlEntities; const htmlentities = new Entities().encode; @@ -62,7 +62,7 @@ function enexXmlToHtml_(stream, resources) { return new Promise((resolve) => { const options = {}; const strict = false; - const saxStream = require('sax').createStream(strict, options); + const saxStream = require('@joplinapp/fork-sax').createStream(strict, options); const section = { type: 'text', diff --git a/ReactNativeClient/lib/import-enex-md-gen.js b/packages/lib/import-enex-md-gen.js similarity index 99% rename from ReactNativeClient/lib/import-enex-md-gen.js rename to packages/lib/import-enex-md-gen.js index 6c0d519062..7e521d2369 100644 --- a/ReactNativeClient/lib/import-enex-md-gen.js +++ b/packages/lib/import-enex-md-gen.js @@ -1,6 +1,6 @@ const stringPadding = require('string-padding'); const stringToStream = require('string-to-stream'); -const resourceUtils = require('lib/resourceUtils.js'); +const resourceUtils = require('./resourceUtils.js'); const BLOCK_OPEN = '[[BLOCK_OPEN]]'; const BLOCK_CLOSE = '[[BLOCK_CLOSE]]'; @@ -430,7 +430,7 @@ function enexXmlToMdArray(stream, resources) { const options = {}; const strict = false; - const saxStream = require('sax').createStream(strict, options); + const saxStream = require('@joplinapp/fork-sax').createStream(strict, options); let section = { type: 'text', diff --git a/ReactNativeClient/lib/import-enex.js b/packages/lib/import-enex.js similarity index 96% rename from ReactNativeClient/lib/import-enex.js rename to packages/lib/import-enex.js index 18ec71f2c5..2d27507119 100644 --- a/ReactNativeClient/lib/import-enex.js +++ b/packages/lib/import-enex.js @@ -1,19 +1,19 @@ -const uuid = require('lib/uuid').default; +const uuid = require('./uuid').default; const moment = require('moment'); -const BaseModel = require('lib/BaseModel.js'); -const Note = require('lib/models/Note.js'); -const Tag = require('lib/models/Tag.js'); -const Resource = require('lib/models/Resource.js'); -const Setting = require('lib/models/Setting').default; -const { MarkupToHtml } = require('lib/joplin-renderer'); +const BaseModel = require('./BaseModel').default; +const Note = require('./models/Note.js'); +const Tag = require('./models/Tag.js'); +const Resource = require('./models/Resource.js'); +const Setting = require('./models/Setting').default; +const { MarkupToHtml } = require('@joplinapp/renderer'); const { enexXmlToMd } = require('./import-enex-md-gen.js'); const { enexXmlToHtml } = require('./import-enex-html-gen.js'); -const { time } = require('lib/time-utils.js'); +const time = require('./time').default; const Levenshtein = require('levenshtein'); const md5 = require('md5'); const { Base64Decode } = require('base64-stream'); const md5File = require('md5-file'); -const shim = require('lib/shim').default; +const shim = require('./shim').default; // const Promise = require('promise'); const fs = require('fs-extra'); @@ -272,7 +272,7 @@ function importEnex(parentFolderId, filePath, importOptions = null) { const options = {}; const strict = true; - const saxStream = require('sax').createStream(strict, options); + const saxStream = require('@joplinapp/fork-sax').createStream(strict, options); const nodes = []; // LIFO list of nodes so that we know in which node we are in the onText event let note = null; diff --git a/ReactNativeClient/lib/joplin-database.js b/packages/lib/joplin-database.js similarity index 98% rename from ReactNativeClient/lib/joplin-database.js rename to packages/lib/joplin-database.js index 18f0e71840..63c34f9569 100644 --- a/ReactNativeClient/lib/joplin-database.js +++ b/packages/lib/joplin-database.js @@ -1,8 +1,8 @@ -const { promiseChain } = require('lib/promise-utils.js'); -const { Database } = require('lib/database.js'); +const { promiseChain } = require('./promise-utils.js'); +const { Database } = require('./database.js'); const { sprintf } = require('sprintf-js'); -const Resource = require('lib/models/Resource'); -const shim = require('lib/shim').default; +const Resource = require('./models/Resource'); +const shim = require('./shim').default; const structureSql = ` CREATE TABLE folders ( @@ -125,7 +125,7 @@ class JoplinDatabase extends Database { this.tableFields_ = null; this.version_ = null; this.tableFieldNames_ = {}; - this.extensionToLoad = './build/lib/sql-extensions/spellfix'; + // this.extensionToLoad = './build/lib/sql-extensions/spellfix'; } initialized() { @@ -917,14 +917,14 @@ class JoplinDatabase extends Database { async initialize() { this.logger().info('Checking for database schema update...'); - try { - // Note that the only extension that can be loaded as of now is spellfix. - // If it fails here, it will fail on the fuzzySearchEnabled() check above - // too, thus disabling spellfix for the app. - await this.loadExtension(this.extensionToLoad); - } catch (error) { - this.logger().error(error); - } + // try { + // // Note that the only extension that can be loaded as of now is spellfix. + // // If it fails here, it will fail on the fuzzySearchEnabled() check above + // // too, thus disabling spellfix for the app. + // await this.loadExtension(this.extensionToLoad); + // } catch (error) { + // this.logger().error(error); + // } let versionRow = null; try { diff --git a/packages/lib/lib/lib.js b/packages/lib/lib/lib.js new file mode 100644 index 0000000000..9ce9d99b55 --- /dev/null +++ b/packages/lib/lib/lib.js @@ -0,0 +1,7 @@ +'use strict'; + +module.exports = lib; + +function lib() { + // TODO +} diff --git a/packages/lib/locale.ts b/packages/lib/locale.ts new file mode 100644 index 0000000000..2e1ec588d8 --- /dev/null +++ b/packages/lib/locale.ts @@ -0,0 +1,591 @@ +const { sprintf } = require('sprintf-js'); + +interface StringToStringMap { + [key:string]: string, +} + +interface CodeToCountryMap { + [key:string]: string[], +} + +const codeToLanguageE_:StringToStringMap = {}; +codeToLanguageE_['aa'] = 'Afar'; +codeToLanguageE_['ab'] = 'Abkhazian'; +codeToLanguageE_['af'] = 'Afrikaans'; +codeToLanguageE_['am'] = 'Amharic'; +codeToLanguageE_['an'] = 'Aragonese'; +codeToLanguageE_['ar'] = 'Arabic'; +codeToLanguageE_['as'] = 'Assamese'; +codeToLanguageE_['ay'] = 'Aymara'; +codeToLanguageE_['az'] = 'Azerbaijani'; +codeToLanguageE_['ba'] = 'Bashkir'; +codeToLanguageE_['be'] = 'Byelorussian'; +codeToLanguageE_['bg'] = 'Bulgarian'; +codeToLanguageE_['bh'] = 'Bihari'; +codeToLanguageE_['bi'] = 'Bislama'; +codeToLanguageE_['bn'] = 'Bangla'; +codeToLanguageE_['bo'] = 'Tibetan'; +codeToLanguageE_['br'] = 'Breton'; +codeToLanguageE_['bs'] = 'Bosnian'; +codeToLanguageE_['ca'] = 'Catalan'; +codeToLanguageE_['co'] = 'Corsican'; +codeToLanguageE_['cs'] = 'Czech'; +codeToLanguageE_['cy'] = 'Welsh'; +codeToLanguageE_['da'] = 'Danish'; +codeToLanguageE_['de'] = 'German'; +codeToLanguageE_['dz'] = 'Bhutani'; +codeToLanguageE_['el'] = 'Greek'; +codeToLanguageE_['en'] = 'English'; +codeToLanguageE_['eo'] = 'Esperanto'; +codeToLanguageE_['es'] = 'Spanish'; +codeToLanguageE_['et'] = 'Estonian'; +codeToLanguageE_['eu'] = 'Basque'; +codeToLanguageE_['fa'] = 'Persian'; +codeToLanguageE_['fi'] = 'Finnish'; +codeToLanguageE_['fj'] = 'Fiji'; +codeToLanguageE_['fo'] = 'Faroese'; +codeToLanguageE_['fr'] = 'French'; +codeToLanguageE_['fy'] = 'Frisian'; +codeToLanguageE_['ga'] = 'Irish'; +codeToLanguageE_['gd'] = 'Gaelic'; +codeToLanguageE_['gl'] = 'Galician'; +codeToLanguageE_['gn'] = 'Guarani'; +codeToLanguageE_['gu'] = 'Gujarati'; +codeToLanguageE_['ha'] = 'Hausa'; +codeToLanguageE_['he'] = 'Hebrew'; +codeToLanguageE_['hi'] = 'Hindi'; +codeToLanguageE_['hr'] = 'Croatian'; +codeToLanguageE_['hu'] = 'Hungarian'; +codeToLanguageE_['hy'] = 'Armenian'; +codeToLanguageE_['ia'] = 'Interlingua'; +codeToLanguageE_['id'] = 'Indonesian'; +codeToLanguageE_['ie'] = 'Interlingue'; +codeToLanguageE_['ik'] = 'Inupiak'; +codeToLanguageE_['is'] = 'Icelandic'; +codeToLanguageE_['it'] = 'Italian'; +codeToLanguageE_['iu'] = 'Inuktitut'; +codeToLanguageE_['ja'] = 'Japanese'; +codeToLanguageE_['jw'] = 'Javanese'; +codeToLanguageE_['ka'] = 'Georgian'; +codeToLanguageE_['kk'] = 'Kazakh'; +codeToLanguageE_['kl'] = 'Greenlandic'; +codeToLanguageE_['km'] = 'Cambodian'; +codeToLanguageE_['kn'] = 'Kannada'; +codeToLanguageE_['ko'] = 'Korean'; +codeToLanguageE_['ks'] = 'Kashmiri'; +codeToLanguageE_['ku'] = 'Kurdish'; +codeToLanguageE_['ky'] = 'Kirghiz'; +codeToLanguageE_['la'] = 'Latin'; +codeToLanguageE_['ln'] = 'Lingala'; +codeToLanguageE_['lo'] = 'Laothian'; +codeToLanguageE_['lt'] = 'Lithuanian'; +codeToLanguageE_['lv'] = 'Lettish'; +codeToLanguageE_['mg'] = 'Malagasy'; +codeToLanguageE_['mi'] = 'Maori'; +codeToLanguageE_['mk'] = 'Macedonian'; +codeToLanguageE_['ml'] = 'Malayalam'; +codeToLanguageE_['mn'] = 'Mongolian'; +codeToLanguageE_['mo'] = 'Moldavian'; +codeToLanguageE_['mr'] = 'Marathi'; +codeToLanguageE_['ms'] = 'Malay'; +codeToLanguageE_['mt'] = 'Maltese'; +codeToLanguageE_['my'] = 'Burmese'; +codeToLanguageE_['na'] = 'Nauru'; +codeToLanguageE_['nb'] = 'Norwegian'; +codeToLanguageE_['ne'] = 'Nepali'; +codeToLanguageE_['nl'] = 'Dutch'; +codeToLanguageE_['no'] = 'Norwegian'; +codeToLanguageE_['oc'] = 'Occitan'; +codeToLanguageE_['om'] = 'Oromo'; +codeToLanguageE_['or'] = 'Oriya'; +codeToLanguageE_['pa'] = 'Punjabi'; +codeToLanguageE_['pl'] = 'Polish'; +codeToLanguageE_['ps'] = 'Pushto'; +codeToLanguageE_['pt'] = 'Portuguese'; +codeToLanguageE_['qu'] = 'Quechua'; +codeToLanguageE_['rm'] = 'Rhaeto-Romance'; +codeToLanguageE_['rn'] = 'Kirundi'; +codeToLanguageE_['ro'] = 'Romanian'; +codeToLanguageE_['ru'] = 'Russian'; +codeToLanguageE_['rw'] = 'Kinyarwanda'; +codeToLanguageE_['sa'] = 'Sanskrit'; +codeToLanguageE_['sd'] = 'Sindhi'; +codeToLanguageE_['sg'] = 'Sangho'; +codeToLanguageE_['sh'] = 'Serbo-Croatian'; +codeToLanguageE_['si'] = 'Sinhalese'; +codeToLanguageE_['sk'] = 'Slovak'; +codeToLanguageE_['sl'] = 'Slovenian'; +codeToLanguageE_['sm'] = 'Samoan'; +codeToLanguageE_['sn'] = 'Shona'; +codeToLanguageE_['so'] = 'Somali'; +codeToLanguageE_['sq'] = 'Albanian'; +codeToLanguageE_['sr'] = 'Serbian'; +codeToLanguageE_['ss'] = 'Siswati'; +codeToLanguageE_['st'] = 'Sesotho'; +codeToLanguageE_['su'] = 'Sundanese'; +codeToLanguageE_['sv'] = 'Swedish'; +codeToLanguageE_['sw'] = 'Swahili'; +codeToLanguageE_['ta'] = 'Tamil'; +codeToLanguageE_['te'] = 'Telugu'; +codeToLanguageE_['tg'] = 'Tajik'; +codeToLanguageE_['th'] = 'Thai'; +codeToLanguageE_['ti'] = 'Tigrinya'; +codeToLanguageE_['tk'] = 'Turkmen'; +codeToLanguageE_['tl'] = 'Tagalog'; +codeToLanguageE_['tn'] = 'Setswana'; +codeToLanguageE_['to'] = 'Tonga'; +codeToLanguageE_['tr'] = 'Turkish'; +codeToLanguageE_['ts'] = 'Tsonga'; +codeToLanguageE_['tt'] = 'Tatar'; +codeToLanguageE_['tw'] = 'Twi'; +codeToLanguageE_['ug'] = 'Uighur'; +codeToLanguageE_['uk'] = 'Ukrainian'; +codeToLanguageE_['ur'] = 'Urdu'; +codeToLanguageE_['uz'] = 'Uzbek'; +codeToLanguageE_['vi'] = 'Vietnamese'; +codeToLanguageE_['vo'] = 'Volapuk'; +codeToLanguageE_['wo'] = 'Wolof'; +codeToLanguageE_['xh'] = 'Xhosa'; +codeToLanguageE_['yi'] = 'Yiddish'; +codeToLanguageE_['yo'] = 'Yoruba'; +codeToLanguageE_['za'] = 'Zhuang'; +codeToLanguageE_['zh'] = 'Chinese'; +codeToLanguageE_['zu'] = 'Zulu'; + +const codeToLanguage_:StringToStringMap = {}; +codeToLanguage_['an'] = 'Aragonés'; +codeToLanguage_['da'] = 'Dansk'; +codeToLanguage_['de'] = 'Deutsch'; +codeToLanguage_['en'] = 'English'; +codeToLanguage_['es'] = 'Español'; +codeToLanguage_['fr'] = 'Français'; +codeToLanguage_['he'] = 'עיברית'; +codeToLanguage_['it'] = 'Italiano'; +codeToLanguage_['lt'] = 'Lietuvių kalba'; +codeToLanguage_['nl'] = 'Nederlands'; +codeToLanguage_['pl'] = 'Polski'; +codeToLanguage_['pt'] = 'Português'; +codeToLanguage_['ru'] = 'Русский'; +codeToLanguage_['sk'] = 'Slovenčina'; +codeToLanguage_['sq'] = 'Shqip'; +codeToLanguage_['sr'] = 'српски језик'; +codeToLanguage_['tr'] = 'Türkçe'; +codeToLanguage_['ja'] = '日本語'; +codeToLanguage_['ko'] = '한국어'; +codeToLanguage_['sv'] = 'Svenska'; +codeToLanguage_['el'] = 'Ελληνικά'; +codeToLanguage_['zh'] = '中文'; +codeToLanguage_['ro'] = 'Română'; +codeToLanguage_['et'] = 'Eesti Keel'; +codeToLanguage_['vi'] = 'Tiếng Việt'; +codeToLanguage_['hu'] = 'Magyar'; + +const codeToCountry_:CodeToCountryMap = { + AD: ['Andorra', 'Andorra'], + AE: ['United Arab Emirates', 'دولة الإمارات العربيّة المتّحدة'], + AF: ['Afghanistan', 'د افغانستان اسلامي دولتدولت اسلامی افغانستان, جمهوری اسلامی افغانستان'], + AG: ['Antigua and Barbuda', 'Antigua and Barbuda'], + AI: ['Anguilla', 'Anguilla'], + AL: ['Albania', 'Shqipëria'], + AM: ['Armenia', 'Հայաստան'], + AO: ['Angola', 'Angola'], + AQ: ['Antarctica', 'Antarctica, Antártico, Antarctique, Антарктике'], + AR: ['Argentina', 'Argentina'], + AS: ['American Samoa', 'American Samoa'], + AT: ['Austria', 'Österreich'], + AU: ['Australia', 'Australia'], + AW: ['Aruba', 'Aruba'], + AX: ['Aland Islands', 'Åland'], + AZ: ['Azerbaijan', 'Azərbaycan'], + BA: ['Bosnia and Herzegovina', 'Bosna i Hercegovina'], + BB: ['Barbados', 'Barbados'], + BD: ['Bangladesh', 'গণপ্রজাতন্ত্রী বাংলাদেশ'], + BE: ['Belgium', 'België, Belgique, Belgien'], + BF: ['Burkina Faso', 'Burkina Faso'], + BG: ['Bulgaria', 'България'], + BH: ['Bahrain', 'البحرين'], + BI: ['Burundi', 'Burundi'], + BJ: ['Benin', 'Bénin'], + BL: ['Saint-Barthélemy', 'Saint-Barthélemy'], + BM: ['Bermuda', 'Bermuda'], + BN: ['Brunei Darussalam', 'Brunei Darussalam'], + BO: ['Bolivia', 'Bolivia, Bulibiya, Volívia, Wuliwya'], + BQ: ['Caribbean Netherlands', 'Caribisch Nederland'], + BR: ['Brazil', 'Brasil'], + BS: ['Bahamas', 'Bahamas'], + BT: ['Bhutan', 'འབྲུག་ཡུལ'], + BV: ['Bouvet Island', 'Bouvetøya'], + BW: ['Botswana', 'Botswana'], + BY: ['Belarus', 'Беларусь'], + BZ: ['Belize', 'Belize'], + CA: ['Canada', 'Canada'], + CC: ['Cocos (Keeling) Islands', 'Cocos (Keeling) Islands'], + CD: ['Democratic Republic of the Congo (Congo-Kinshasa, former Zaire)', 'République Démocratique du Congo'], + CF: ['Centrafrican Republic', 'République centrafricaine, Ködörösêse tî Bêafrîka'], + CG: ['Republic of the Congo (Congo-Brazzaville)', 'République du Congo'], + CH: ['Switzerland', 'Schweiz, Suisse, Svizzera, Svizra'], + CI: ['Côte d\'Ivoire', 'Côte d\'Ivoire'], + CK: ['Cook Islands', 'Cook Islands, Kūki ʻĀirani'], + CL: ['Chile', 'Chile'], + CM: ['Cameroon', 'Cameroun, Cameroon'], + CN: ['China', '中国'], + CO: ['Colombia', 'Colombia'], + CR: ['Costa Rica', 'Costa Rica'], + CU: ['Cuba', 'Cuba'], + CV: ['Cabo Verde', 'Cabo Verde'], + CW: ['Curaçao', 'Curaçao'], + CX: ['Christmas Island', 'Christmas Island'], + CY: ['Cyprus', 'Κύπρος, Kibris'], + CZ: ['Czech Republic', 'Česká republika'], + DE: ['Germany', 'Deutschland'], + DJ: ['Djibouti', 'Djibouti, جيبوتي, Jabuuti, Gabuutih'], + DK: ['Denmark', 'Danmark'], + DM: ['Dominica', 'Dominica'], + DO: ['Dominican Republic', 'República Dominicana'], + DZ: ['Algeria', 'الجزائر'], + EC: ['Ecuador', 'Ecuador'], + EE: ['Estonia', 'Eesti'], + EG: ['Egypt', 'مصر'], + EH: ['Western Sahara', 'Sahara Occidental'], + ER: ['Eritrea', 'ኤርትራ, إرتريا, Eritrea'], + ES: ['Spain', 'España'], + ET: ['Ethiopia', 'ኢትዮጵያ, Itoophiyaa'], + FI: ['Finland', 'Suomi'], + FJ: ['Fiji', 'Fiji'], + FK: ['Falkland Islands', 'Falkland Islands'], + FM: ['Micronesia (Federated States of)', 'Micronesia'], + FO: ['Faroe Islands', 'Føroyar, Færøerne'], + FR: ['France', 'France'], + GA: ['Gabon', 'Gabon'], + GB: ['United Kingdom', 'United Kingdom'], + GD: ['Grenada', 'Grenada'], + GE: ['Georgia', 'საქართველო'], + GF: ['French Guiana', 'Guyane française'], + GG: ['Guernsey', 'Guernsey'], + GH: ['Ghana', 'Ghana'], + GI: ['Gibraltar', 'Gibraltar'], + GL: ['Greenland', 'Kalaallit Nunaat, Grønland'], + GM: ['The Gambia', 'The Gambia'], + GN: ['Guinea', 'Guinée'], + GP: ['Guadeloupe', 'Guadeloupe'], + GQ: ['Equatorial Guinea', 'Guiena ecuatorial, Guinée équatoriale, Guiné Equatorial'], + GR: ['Greece', 'Ελλάδα'], + GS: ['South Georgia and the South Sandwich Islands', 'South Georgia and the South Sandwich Islands'], + GT: ['Guatemala', 'Guatemala'], + GU: ['Guam', 'Guam, Guåhån'], + GW: ['Guinea Bissau', 'Guiné-Bissau'], + GY: ['Guyana', 'Guyana'], + HK: ['Hong Kong (SAR of China)', '香港, Hong Kong'], + HM: ['Heard Island and McDonald Islands', 'Heard Island and McDonald Islands'], + HN: ['Honduras', 'Honduras'], + HR: ['Croatia', 'Hrvatska'], + HT: ['Haiti', 'Haïti, Ayiti'], + HU: ['Hungary', 'Magyarország'], + ID: ['Indonesia', 'Indonesia'], + IE: ['Ireland', 'Ireland, Éire'], + IL: ['Israel', 'ישראל'], + IM: ['Isle of Man', 'Isle of Man'], + IN: ['India', 'भारत, India'], + IO: ['British Indian Ocean Territory', 'British Indian Ocean Territory'], + IQ: ['Iraq', 'العراق, Iraq'], + IR: ['Iran', 'ایران'], + IS: ['Iceland', 'Ísland'], + IT: ['Italy', 'Italia'], + JE: ['Jersey', 'Jersey'], + JM: ['Jamaica', 'Jamaica'], + JO: ['Jordan', 'الأُرْدُن'], + JP: ['Japan', '日本'], + KE: ['Kenya', 'Kenya'], + KG: ['Kyrgyzstan', 'Кыргызстан, Киргизия'], + KH: ['Cambodia', 'កម្ពុជា'], + KI: ['Kiribati', 'Kiribati'], + KM: ['Comores', 'ﺍﻟﻘﻤﺮي, Comores, Komori'], + KN: ['Saint Kitts and Nevis', 'Saint Kitts and Nevis'], + KP: ['North Korea', '북조선'], + KR: ['South Korea', '대한민국'], + KW: ['Kuwait', 'الكويت'], + KY: ['Cayman Islands', 'Cayman Islands'], + KZ: ['Kazakhstan', 'Қазақстан, Казахстан'], + LA: ['Laos', 'ປະຊາຊົນລາວ'], + LB: ['Lebanon', 'لبنان, Liban'], + LC: ['Saint Lucia', 'Saint Lucia'], + LI: ['Liechtenstein', 'Liechtenstein'], + LK: ['Sri Lanka', 'ශ්‍රී ලංකා, இலங்கை'], + LR: ['Liberia', 'Liberia'], + LS: ['Lesotho', 'Lesotho'], + LT: ['Lithuania', 'Lietuva'], + LU: ['Luxembourg', 'Lëtzebuerg, Luxembourg, Luxemburg'], + LV: ['Latvia', 'Latvija'], + LY: ['Libya', 'ليبيا'], + MA: ['Morocco', 'Maroc, ⵍⵎⵖⵔⵉⴱ, المغرب'], + MC: ['Monaco', 'Monaco'], + MD: ['Moldova', 'Moldova, Молдавия'], + ME: ['Montenegro', 'Crna Gora, Црна Гора'], + MF: ['Saint Martin (French part)', 'Saint-Martin'], + MG: ['Madagascar', 'Madagasikara, Madagascar'], + MH: ['Marshall Islands', 'Marshall Islands'], + MK: ['North Macedonia', 'Северна Македонија'], + ML: ['Mali', 'Mali'], + MM: ['Myanmar', 'မြန်မာ'], + MN: ['Mongolia', 'Монгол Улс'], + MO: ['Macao (SAR of China)', '澳門, Macau'], + MP: ['Northern Mariana Islands', 'Northern Mariana Islands'], + MQ: ['Martinique', 'Martinique'], + MR: ['Mauritania', 'موريتانيا, Mauritanie'], + MS: ['Montserrat', 'Montserrat'], + MT: ['Malta', 'Malta'], + MU: ['Mauritius', 'Maurice, Mauritius'], + MV: ['Maldives', ''], + MW: ['Malawi', 'Malawi'], + MX: ['Mexico', 'México'], + MY: ['Malaysia', ''], + MZ: ['Mozambique', 'Mozambique'], + NA: ['Namibia', 'Namibia'], + NC: ['New Caledonia', 'Nouvelle-Calédonie'], + NE: ['Niger', 'Niger'], + NF: ['Norfolk Island', 'Norfolk Island'], + NG: ['Nigeria', 'Nigeria'], + NI: ['Nicaragua', 'Nicaragua'], + NL: ['The Netherlands', 'Nederland'], + NO: ['Norway', 'Norge, Noreg'], + NP: ['Nepal', ''], + NR: ['Nauru', 'Nauru'], + NU: ['Niue', 'Niue'], + NZ: ['New Zealand', 'New Zealand'], + OM: ['Oman', 'سلطنة عُمان'], + PA: ['Panama', 'Panama'], + PE: ['Peru', 'Perú'], + PF: ['French Polynesia', 'Polynésie française'], + PG: ['Papua New Guinea', 'Papua New Guinea'], + PH: ['Philippines', 'Philippines'], + PK: ['Pakistan', 'پاکستان'], + PL: ['Poland', 'Polska'], + PM: ['Saint Pierre and Miquelon', 'Saint-Pierre-et-Miquelon'], + PN: ['Pitcairn', 'Pitcairn'], + PR: ['Puerto Rico', 'Puerto Rico'], + PS: ['Palestinian Territory', 'Palestinian Territory'], + PT: ['Portugal', 'Portugal'], + PW: ['Palau', 'Palau'], + PY: ['Paraguay', 'Paraguay'], + QA: ['Qatar', 'قطر'], + RE: ['Reunion', 'La Réunion'], + RO: ['Romania', 'România'], + RS: ['Serbia', 'Србија'], + RU: ['Russia', 'Россия'], + RW: ['Rwanda', 'Rwanda'], + SA: ['Saudi Arabia', 'السعودية'], + SB: ['Solomon Islands', 'Solomon Islands'], + SC: ['Seychelles', 'Seychelles'], + SD: ['Sudan', 'السودان'], + SE: ['Sweden', 'Sverige'], + SG: ['Singapore', 'Singapore'], + SH: ['Saint Helena', 'Saint Helena'], + SI: ['Slovenia', 'Slovenija'], + SJ: ['Svalbard and Jan Mayen', 'Svalbard and Jan Mayen'], + SK: ['Slovakia', 'Slovensko'], + SL: ['Sierra Leone', 'Sierra Leone'], + SM: ['San Marino', 'San Marino'], + SN: ['Sénégal', 'Sénégal'], + SO: ['Somalia', 'Somalia, الصومال'], + SR: ['Suriname', 'Suriname'], + ST: ['São Tomé and Príncipe', 'São Tomé e Príncipe'], + SS: ['South Sudan', 'South Sudan'], + SV: ['El Salvador', 'El Salvador'], + SX: ['Saint Martin (Dutch part)', 'Sint Maarten'], + SY: ['Syria', 'سوريا, Sūriyya'], + SZ: ['eSwatini', 'eSwatini'], + TC: ['Turks and Caicos Islands', 'Turks and Caicos Islands'], + TD: ['Chad', 'Tchad, تشاد'], + TF: ['French Southern and Antarctic Lands', 'Terres australes et antarctiques françaises'], + TG: ['Togo', 'Togo'], + TH: ['Thailand', 'ประเทศไทย'], + TJ: ['Tajikistan', ','], + TK: ['Tokelau', 'Tokelau'], + TL: ['Timor-Leste', 'Timor-Leste'], + TM: ['Turkmenistan', 'Türkmenistan'], + TN: ['Tunisia', 'تونس, Tunisie'], + TO: ['Tonga', 'Tonga'], + TR: ['Turkey', 'Türkiye'], + TT: ['Trinidad and Tobago', 'Trinidad and Tobago'], + TV: ['Tuvalu', 'Tuvalu'], + TW: ['Taiwan', 'Taiwan'], + TZ: ['Tanzania', 'Tanzania'], + UA: ['Ukraine', 'Україна'], + UG: ['Uganda', 'Uganda'], + UM: ['United States Minor Outlying Islands', 'United States Minor Outlying Islands'], + US: ['United States of America', 'United States of America'], + UY: ['Uruguay', 'Uruguay'], + UZ: ['Uzbekistan', ''], + VA: ['City of the Vatican', 'Città del Vaticano'], + VC: ['Saint Vincent and the Grenadines', 'Saint Vincent and the Grenadines'], + VE: ['Venezuela', 'Venezuela'], + VG: ['British Virgin Islands', 'British Virgin Islands'], + VI: ['United States Virgin Islands', 'United States Virgin Islands'], + VN: ['Vietnam', 'Việt Nam'], + VU: ['Vanuatu', 'Vanuatu'], + WF: ['Wallis and Futuna', 'Wallis-et-Futuna'], + WS: ['Samoa', 'Samoa'], + YE: ['Yemen', 'اليَمَن'], + YT: ['Mayotte', 'Mayotte'], + ZA: ['South Africa', 'South Africa'], + ZM: ['Zambia', 'Zambia'], + ZW: ['Zimbabwe', 'Zimbabwe'], +}; + +let supportedLocales_:any = null; +let localeStats_:any = null; + +const loadedLocales_:any = {}; + +const defaultLocale_ = 'en_GB'; + +let currentLocale_ = defaultLocale_; + +function defaultLocale() { + return defaultLocale_; +} + +function localeStats() { + if (!localeStats_) localeStats_ = require('./locales/index.js').stats; + return localeStats_; +} + +function supportedLocales():string[] { + if (!supportedLocales_) supportedLocales_ = require('./locales/index.js').locales; + + const output = []; + for (const n in supportedLocales_) { + if (!supportedLocales_.hasOwnProperty(n)) continue; + output.push(n); + } + return output; +} + +interface SupportedLocalesToLanguagesOptions { + includeStats?: boolean, +} + +function supportedLocalesToLanguages(options:SupportedLocalesToLanguagesOptions = null) { + if (!options) options = {}; + const stats = localeStats(); + const locales = supportedLocales(); + const output:StringToStringMap = {}; + for (let i = 0; i < locales.length; i++) { + const locale = locales[i]; + output[locale] = countryDisplayName(locale); + + const stat = stats[locale]; + if (options.includeStats && stat) { + output[locale] += ` (${stat.percentDone}%)`; + } + } + return output; +} + +function closestSupportedLocale(canonicalName:string, defaultToEnglish:boolean = true, locales:string[] = null) { + locales = locales === null ? supportedLocales() : locales; + if (locales.indexOf(canonicalName) >= 0) return canonicalName; + + const requiredLanguage = languageCodeOnly(canonicalName).toLowerCase(); + + for (let i = 0; i < locales.length; i++) { + const locale = locales[i]; + const language = locale.split('_')[0]; + if (requiredLanguage == language) return locale; + } + + return defaultToEnglish ? 'en_GB' : null; +} + +function countryName(countryCode:string) { + const r = codeToCountry_[countryCode] ? codeToCountry_[countryCode] : null; + if (!r) return ''; + return r.length > 1 && !!r[1] ? r[1] : r[0]; +} + +function languageNameInEnglish(languageCode:string) { + return codeToLanguageE_[languageCode] ? codeToLanguageE_[languageCode] : ''; +} + +function languageName(languageCode:string, defaultToEnglish:boolean = true) { + if (codeToLanguage_[languageCode]) return codeToLanguage_[languageCode]; + if (defaultToEnglish) return languageNameInEnglish(languageCode); + return ''; +} + +function languageCodeOnly(canonicalName:string) { + if (canonicalName.length < 2) return canonicalName; + return canonicalName.substr(0, 2); +} + +function countryCodeOnly(canonicalName:string) { + if (canonicalName.length <= 2) return ''; + return canonicalName.substr(3); +} + +function countryDisplayName(canonicalName:string) { + const languageCode = languageCodeOnly(canonicalName); + const countryCode = countryCodeOnly(canonicalName); + + let output = languageName(languageCode); + + let extraString; + + if (countryCode) { + if (languageCode == 'zh' && countryCode == 'CN') { + extraString = '简体'; // "Simplified" in "Simplified Chinese" + } else { + extraString = countryName(countryCode); + } + } + + if (languageCode == 'zh' && (countryCode == '' || countryCode == 'TW')) extraString = '繁體'; // "Traditional" in "Traditional Chinese" + + if (extraString) { + output += ` (${extraString})`; + } else if (countryCode) { + // If we have a country code but couldn't match it to a country name, + // just display the full canonical name (applies for example to es-419 + // for Latin American Spanish). + output += ` (${canonicalName})`; + } + + return output; +} + +function localeStrings(canonicalName:string) { + const locale = closestSupportedLocale(canonicalName); + + if (loadedLocales_[locale]) return loadedLocales_[locale]; + + loadedLocales_[locale] = Object.assign({}, supportedLocales_[locale]); + + return loadedLocales_[locale]; +} + +function setLocale(canonicalName:string) { + if (currentLocale_ == canonicalName) return; + currentLocale_ = closestSupportedLocale(canonicalName); +} + +function languageCode() { + return languageCodeOnly(currentLocale_); +} + +function _(s:string, ...args:any[]) { + const strings = localeStrings(currentLocale_); + let result = strings[s]; + if (result === '' || result === undefined) result = s; + try { + return sprintf(result, ...args); + } catch (error) { + return `${result} ${args.join(', ')} (Translation error: ${error.message})`; + } +} + +function _n(singular:string, plural:string, n:number, ...args:any[]) { + if (n > 1) return _(plural, ...args); + return _(singular, ...args); +} + +export { _, _n, supportedLocales, countryDisplayName, localeStrings, setLocale, supportedLocalesToLanguages, defaultLocale, closestSupportedLocale, languageCode, countryCodeOnly }; diff --git a/ReactNativeClient/locales/ar.json b/packages/lib/locales/ar.json similarity index 100% rename from ReactNativeClient/locales/ar.json rename to packages/lib/locales/ar.json diff --git a/ReactNativeClient/locales/bg_BG.json b/packages/lib/locales/bg_BG.json similarity index 100% rename from ReactNativeClient/locales/bg_BG.json rename to packages/lib/locales/bg_BG.json diff --git a/ReactNativeClient/locales/bs_BA.json b/packages/lib/locales/bs_BA.json similarity index 100% rename from ReactNativeClient/locales/bs_BA.json rename to packages/lib/locales/bs_BA.json diff --git a/ReactNativeClient/locales/ca.json b/packages/lib/locales/ca.json similarity index 100% rename from ReactNativeClient/locales/ca.json rename to packages/lib/locales/ca.json diff --git a/ReactNativeClient/locales/cs_CZ.json b/packages/lib/locales/cs_CZ.json similarity index 100% rename from ReactNativeClient/locales/cs_CZ.json rename to packages/lib/locales/cs_CZ.json diff --git a/ReactNativeClient/locales/da_DK.json b/packages/lib/locales/da_DK.json similarity index 100% rename from ReactNativeClient/locales/da_DK.json rename to packages/lib/locales/da_DK.json diff --git a/ReactNativeClient/locales/de_DE.json b/packages/lib/locales/de_DE.json similarity index 100% rename from ReactNativeClient/locales/de_DE.json rename to packages/lib/locales/de_DE.json diff --git a/ReactNativeClient/locales/el_GR.json b/packages/lib/locales/el_GR.json similarity index 100% rename from ReactNativeClient/locales/el_GR.json rename to packages/lib/locales/el_GR.json diff --git a/ReactNativeClient/locales/en_GB.json b/packages/lib/locales/en_GB.json similarity index 100% rename from ReactNativeClient/locales/en_GB.json rename to packages/lib/locales/en_GB.json diff --git a/ReactNativeClient/locales/en_US.json b/packages/lib/locales/en_US.json similarity index 100% rename from ReactNativeClient/locales/en_US.json rename to packages/lib/locales/en_US.json diff --git a/ReactNativeClient/locales/eo.json b/packages/lib/locales/eo.json similarity index 100% rename from ReactNativeClient/locales/eo.json rename to packages/lib/locales/eo.json diff --git a/ReactNativeClient/locales/es_ES.json b/packages/lib/locales/es_ES.json similarity index 100% rename from ReactNativeClient/locales/es_ES.json rename to packages/lib/locales/es_ES.json diff --git a/ReactNativeClient/locales/et_EE.json b/packages/lib/locales/et_EE.json similarity index 100% rename from ReactNativeClient/locales/et_EE.json rename to packages/lib/locales/et_EE.json diff --git a/ReactNativeClient/locales/eu.json b/packages/lib/locales/eu.json similarity index 100% rename from ReactNativeClient/locales/eu.json rename to packages/lib/locales/eu.json diff --git a/ReactNativeClient/locales/fa.json b/packages/lib/locales/fa.json similarity index 100% rename from ReactNativeClient/locales/fa.json rename to packages/lib/locales/fa.json diff --git a/ReactNativeClient/locales/fr_FR.json b/packages/lib/locales/fr_FR.json similarity index 100% rename from ReactNativeClient/locales/fr_FR.json rename to packages/lib/locales/fr_FR.json diff --git a/ReactNativeClient/locales/gl_ES.json b/packages/lib/locales/gl_ES.json similarity index 100% rename from ReactNativeClient/locales/gl_ES.json rename to packages/lib/locales/gl_ES.json diff --git a/ReactNativeClient/locales/hr_HR.json b/packages/lib/locales/hr_HR.json similarity index 100% rename from ReactNativeClient/locales/hr_HR.json rename to packages/lib/locales/hr_HR.json diff --git a/ReactNativeClient/locales/id_ID.json b/packages/lib/locales/id_ID.json similarity index 100% rename from ReactNativeClient/locales/id_ID.json rename to packages/lib/locales/id_ID.json diff --git a/ReactNativeClient/locales/index.js b/packages/lib/locales/index.js similarity index 50% rename from ReactNativeClient/locales/index.js rename to packages/lib/locales/index.js index f760d9095a..1a193e7819 100644 --- a/ReactNativeClient/locales/index.js +++ b/packages/lib/locales/index.js @@ -1,5 +1,5 @@ -var locales = {}; -var stats = {}; +const locales = {}; +const stats = {}; locales['en_GB'] = require('./en_GB.json'); locales['ar'] = require('./ar.json'); locales['bg_BG'] = require('./bg_BG.json'); @@ -38,42 +38,42 @@ locales['tr_TR'] = require('./tr_TR.json'); locales['vi'] = require('./vi.json'); locales['zh_CN'] = require('./zh_CN.json'); locales['zh_TW'] = require('./zh_TW.json'); -stats['ar'] = {"percentDone":78}; -stats['eu'] = {"percentDone":33}; -stats['bs_BA'] = {"percentDone":82}; -stats['bg_BG'] = {"percentDone":65}; -stats['ca'] = {"percentDone":95}; -stats['hr_HR'] = {"percentDone":27}; -stats['cs_CZ'] = {"percentDone":98}; -stats['da_DK'] = {"percentDone":72}; -stats['de_DE'] = {"percentDone":97}; -stats['et_EE'] = {"percentDone":65}; -stats['en_GB'] = {"percentDone":100}; -stats['en_US'] = {"percentDone":100}; -stats['es_ES'] = {"percentDone":98}; -stats['eo'] = {"percentDone":37}; -stats['fr_FR'] = {"percentDone":98}; -stats['gl_ES'] = {"percentDone":42}; -stats['id_ID'] = {"percentDone":92}; -stats['it_IT'] = {"percentDone":98}; -stats['nl_NL'] = {"percentDone":94}; -stats['nl_BE'] = {"percentDone":33}; -stats['nb_NO'] = {"percentDone":87}; -stats['fa'] = {"percentDone":82}; -stats['pl_PL'] = {"percentDone":97}; -stats['pt_PT'] = {"percentDone":98}; -stats['pt_BR'] = {"percentDone":96}; -stats['ro'] = {"percentDone":77}; -stats['sl_SI'] = {"percentDone":41}; -stats['sv'] = {"percentDone":70}; -stats['th_TH'] = {"percentDone":52}; -stats['vi'] = {"percentDone":84}; -stats['tr_TR'] = {"percentDone":97}; -stats['el_GR'] = {"percentDone":95}; -stats['ru_RU'] = {"percentDone":94}; -stats['sr_RS'] = {"percentDone":70}; -stats['zh_CN'] = {"percentDone":95}; -stats['zh_TW'] = {"percentDone":94}; -stats['ja_JP'] = {"percentDone":99}; -stats['ko'] = {"percentDone":99}; -module.exports = { locales: locales, stats: stats }; \ No newline at end of file +stats['ar'] = { 'percentDone': 78 }; +stats['eu'] = { 'percentDone': 33 }; +stats['bs_BA'] = { 'percentDone': 82 }; +stats['bg_BG'] = { 'percentDone': 65 }; +stats['ca'] = { 'percentDone': 95 }; +stats['hr_HR'] = { 'percentDone': 27 }; +stats['cs_CZ'] = { 'percentDone': 98 }; +stats['da_DK'] = { 'percentDone': 72 }; +stats['de_DE'] = { 'percentDone': 97 }; +stats['et_EE'] = { 'percentDone': 65 }; +stats['en_GB'] = { 'percentDone': 100 }; +stats['en_US'] = { 'percentDone': 100 }; +stats['es_ES'] = { 'percentDone': 98 }; +stats['eo'] = { 'percentDone': 37 }; +stats['fr_FR'] = { 'percentDone': 98 }; +stats['gl_ES'] = { 'percentDone': 42 }; +stats['id_ID'] = { 'percentDone': 92 }; +stats['it_IT'] = { 'percentDone': 98 }; +stats['nl_NL'] = { 'percentDone': 94 }; +stats['nl_BE'] = { 'percentDone': 33 }; +stats['nb_NO'] = { 'percentDone': 87 }; +stats['fa'] = { 'percentDone': 82 }; +stats['pl_PL'] = { 'percentDone': 97 }; +stats['pt_PT'] = { 'percentDone': 98 }; +stats['pt_BR'] = { 'percentDone': 96 }; +stats['ro'] = { 'percentDone': 77 }; +stats['sl_SI'] = { 'percentDone': 41 }; +stats['sv'] = { 'percentDone': 70 }; +stats['th_TH'] = { 'percentDone': 52 }; +stats['vi'] = { 'percentDone': 84 }; +stats['tr_TR'] = { 'percentDone': 97 }; +stats['el_GR'] = { 'percentDone': 95 }; +stats['ru_RU'] = { 'percentDone': 94 }; +stats['sr_RS'] = { 'percentDone': 70 }; +stats['zh_CN'] = { 'percentDone': 95 }; +stats['zh_TW'] = { 'percentDone': 94 }; +stats['ja_JP'] = { 'percentDone': 99 }; +stats['ko'] = { 'percentDone': 99 }; +module.exports = { locales: locales, stats: stats }; diff --git a/ReactNativeClient/locales/it_IT.json b/packages/lib/locales/it_IT.json similarity index 100% rename from ReactNativeClient/locales/it_IT.json rename to packages/lib/locales/it_IT.json diff --git a/ReactNativeClient/locales/ja_JP.json b/packages/lib/locales/ja_JP.json similarity index 100% rename from ReactNativeClient/locales/ja_JP.json rename to packages/lib/locales/ja_JP.json diff --git a/ReactNativeClient/locales/ko.json b/packages/lib/locales/ko.json similarity index 100% rename from ReactNativeClient/locales/ko.json rename to packages/lib/locales/ko.json diff --git a/ReactNativeClient/locales/nb.json b/packages/lib/locales/nb.json similarity index 100% rename from ReactNativeClient/locales/nb.json rename to packages/lib/locales/nb.json diff --git a/ReactNativeClient/locales/nb_NO.json b/packages/lib/locales/nb_NO.json similarity index 100% rename from ReactNativeClient/locales/nb_NO.json rename to packages/lib/locales/nb_NO.json diff --git a/ReactNativeClient/locales/nl_BE.json b/packages/lib/locales/nl_BE.json similarity index 100% rename from ReactNativeClient/locales/nl_BE.json rename to packages/lib/locales/nl_BE.json diff --git a/ReactNativeClient/locales/nl_NL.json b/packages/lib/locales/nl_NL.json similarity index 100% rename from ReactNativeClient/locales/nl_NL.json rename to packages/lib/locales/nl_NL.json diff --git a/ReactNativeClient/locales/pl_PL.json b/packages/lib/locales/pl_PL.json similarity index 100% rename from ReactNativeClient/locales/pl_PL.json rename to packages/lib/locales/pl_PL.json diff --git a/ReactNativeClient/locales/pt_BR.json b/packages/lib/locales/pt_BR.json similarity index 100% rename from ReactNativeClient/locales/pt_BR.json rename to packages/lib/locales/pt_BR.json diff --git a/ReactNativeClient/locales/pt_PT.json b/packages/lib/locales/pt_PT.json similarity index 100% rename from ReactNativeClient/locales/pt_PT.json rename to packages/lib/locales/pt_PT.json diff --git a/ReactNativeClient/locales/ro.json b/packages/lib/locales/ro.json similarity index 100% rename from ReactNativeClient/locales/ro.json rename to packages/lib/locales/ro.json diff --git a/ReactNativeClient/locales/ru_RU.json b/packages/lib/locales/ru_RU.json similarity index 100% rename from ReactNativeClient/locales/ru_RU.json rename to packages/lib/locales/ru_RU.json diff --git a/ReactNativeClient/locales/sl_SI.json b/packages/lib/locales/sl_SI.json similarity index 100% rename from ReactNativeClient/locales/sl_SI.json rename to packages/lib/locales/sl_SI.json diff --git a/ReactNativeClient/locales/sr_RS.json b/packages/lib/locales/sr_RS.json similarity index 100% rename from ReactNativeClient/locales/sr_RS.json rename to packages/lib/locales/sr_RS.json diff --git a/ReactNativeClient/locales/sv.json b/packages/lib/locales/sv.json similarity index 100% rename from ReactNativeClient/locales/sv.json rename to packages/lib/locales/sv.json diff --git a/ReactNativeClient/locales/th_TH.json b/packages/lib/locales/th_TH.json similarity index 100% rename from ReactNativeClient/locales/th_TH.json rename to packages/lib/locales/th_TH.json diff --git a/ReactNativeClient/locales/tr_TR.json b/packages/lib/locales/tr_TR.json similarity index 100% rename from ReactNativeClient/locales/tr_TR.json rename to packages/lib/locales/tr_TR.json diff --git a/ReactNativeClient/locales/vi.json b/packages/lib/locales/vi.json similarity index 100% rename from ReactNativeClient/locales/vi.json rename to packages/lib/locales/vi.json diff --git a/ReactNativeClient/locales/zh_CN.json b/packages/lib/locales/zh_CN.json similarity index 100% rename from ReactNativeClient/locales/zh_CN.json rename to packages/lib/locales/zh_CN.json diff --git a/ReactNativeClient/locales/zh_TW.json b/packages/lib/locales/zh_TW.json similarity index 100% rename from ReactNativeClient/locales/zh_TW.json rename to packages/lib/locales/zh_TW.json diff --git a/ReactNativeClient/lib/markJsUtils.js b/packages/lib/markJsUtils.js similarity index 100% rename from ReactNativeClient/lib/markJsUtils.js rename to packages/lib/markJsUtils.js diff --git a/ReactNativeClient/lib/markdownUtils.ts b/packages/lib/markdownUtils.ts similarity index 97% rename from ReactNativeClient/lib/markdownUtils.ts rename to packages/lib/markdownUtils.ts index 774dd07ade..060b8ded04 100644 --- a/ReactNativeClient/lib/markdownUtils.ts +++ b/packages/lib/markdownUtils.ts @@ -1,7 +1,7 @@ const stringPadding = require('string-padding'); -const urlUtils = require('lib/urlUtils'); +const urlUtils = require('./urlUtils'); const MarkdownIt = require('markdown-it'); -const { setupLinkify } = require('lib/joplin-renderer'); +const { setupLinkify } = require('@joplinapp/renderer'); // Taken from codemirror/addon/edit/continuelist.js const listRegex = /^(\s*)([*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]\s))(\s*)/; diff --git a/ReactNativeClient/lib/markupLanguageUtils.ts b/packages/lib/markupLanguageUtils.ts similarity index 79% rename from ReactNativeClient/lib/markupLanguageUtils.ts rename to packages/lib/markupLanguageUtils.ts index 06031a6c41..2c28cfec79 100644 --- a/ReactNativeClient/lib/markupLanguageUtils.ts +++ b/packages/lib/markupLanguageUtils.ts @@ -1,10 +1,10 @@ -import markdownUtils from 'lib/markdownUtils'; -import Setting from 'lib/models/Setting'; -import shim from 'lib/shim'; -import MarkupToHtml, { MarkupLanguage } from 'lib/joplin-renderer/MarkupToHtml'; +import markdownUtils from './markdownUtils'; +import Setting from './models/Setting'; +import shim from './shim'; +import MarkupToHtml, { MarkupLanguage } from '@joplinapp/renderer/MarkupToHtml'; -const htmlUtils = require('lib/htmlUtils'); -const Resource = require('lib/models/Resource'); +const htmlUtils = require('./htmlUtils'); +const Resource = require('./models/Resource'); class MarkupLanguageUtils { lib_(language:MarkupLanguage) { diff --git a/ReactNativeClient/lib/migrations/20.js b/packages/lib/migrations/20.js similarity index 71% rename from ReactNativeClient/lib/migrations/20.js rename to packages/lib/migrations/20.js index 8a76d1643f..87630fe5f6 100644 --- a/ReactNativeClient/lib/migrations/20.js +++ b/packages/lib/migrations/20.js @@ -1,8 +1,8 @@ -const Resource = require('lib/models/Resource'); -const Setting = require('lib/models/Setting').default; -const shim = require('lib/shim').default; -const { reg } = require('lib/registry.js'); -const { fileExtension } = require('lib/path-utils'); +const Resource = require('../models/Resource'); +const Setting = require('../models/Setting').default; +const shim = require('../shim').default; +const { reg } = require('../registry.js'); +const { fileExtension } = require('../path-utils'); const script = {}; diff --git a/ReactNativeClient/lib/migrations/27.js b/packages/lib/migrations/27.js similarity index 82% rename from ReactNativeClient/lib/migrations/27.js rename to packages/lib/migrations/27.js index 3594b2fc07..0323c1d2f7 100644 --- a/ReactNativeClient/lib/migrations/27.js +++ b/packages/lib/migrations/27.js @@ -1,4 +1,4 @@ -const Setting = require('lib/models/Setting').default; +const Setting = require('../models/Setting').default; const script = {}; diff --git a/ReactNativeClient/lib/migrations/33.js b/packages/lib/migrations/33.js similarity index 64% rename from ReactNativeClient/lib/migrations/33.js rename to packages/lib/migrations/33.js index f9164e5b01..576801a2b9 100644 --- a/ReactNativeClient/lib/migrations/33.js +++ b/packages/lib/migrations/33.js @@ -1,4 +1,4 @@ -const SearchEngine = require('lib/services/searchengine/SearchEngine'); +const SearchEngine = require('../services/searchengine/SearchEngine'); const script = {}; diff --git a/ReactNativeClient/lib/mime-utils-types.js b/packages/lib/mime-utils-types.js similarity index 100% rename from ReactNativeClient/lib/mime-utils-types.js rename to packages/lib/mime-utils-types.js diff --git a/ReactNativeClient/lib/mime-utils.js b/packages/lib/mime-utils.js similarity index 100% rename from ReactNativeClient/lib/mime-utils.js rename to packages/lib/mime-utils.js diff --git a/ReactNativeClient/lib/models/Alarm.ts b/packages/lib/models/Alarm.ts similarity index 94% rename from ReactNativeClient/lib/models/Alarm.ts rename to packages/lib/models/Alarm.ts index d628210982..e8993347d7 100644 --- a/ReactNativeClient/lib/models/Alarm.ts +++ b/packages/lib/models/Alarm.ts @@ -1,5 +1,5 @@ -const BaseModel = require('lib/BaseModel.js'); -const Note = require('lib/models/Note.js'); +const BaseModel = require('../BaseModel').default; +const Note = require('./Note.js'); export interface Notification { id: number, diff --git a/ReactNativeClient/lib/models/BaseItem.js b/packages/lib/models/BaseItem.js similarity index 98% rename from ReactNativeClient/lib/models/BaseItem.js rename to packages/lib/models/BaseItem.js index 4bec3d72d2..e88798d286 100644 --- a/ReactNativeClient/lib/models/BaseItem.js +++ b/packages/lib/models/BaseItem.js @@ -1,13 +1,13 @@ -const BaseModel = require('lib/BaseModel.js'); -const { Database } = require('lib/database.js'); -const Setting = require('lib/models/Setting').default; -const ItemChange = require('lib/models/ItemChange.js'); -const JoplinError = require('lib/JoplinError.js'); -const { time } = require('lib/time-utils.js'); +const BaseModel = require('../BaseModel').default; +const { Database } = require('../database.js'); +const Setting = require('./Setting').default; +const ItemChange = require('./ItemChange.js'); +const JoplinError = require('../JoplinError.js'); +const time = require('../time').default; const { sprintf } = require('sprintf-js'); -const { _ } = require('lib/locale'); +const { _ } = require('../locale'); const moment = require('moment'); -const markdownUtils = require('lib/markdownUtils').default; +const markdownUtils = require('../markdownUtils').default; class BaseItem extends BaseModel { static useUuid() { diff --git a/ReactNativeClient/lib/models/Folder.js b/packages/lib/models/Folder.js similarity index 97% rename from ReactNativeClient/lib/models/Folder.js rename to packages/lib/models/Folder.js index 7353efef73..2b95b99497 100644 --- a/ReactNativeClient/lib/models/Folder.js +++ b/packages/lib/models/Folder.js @@ -1,10 +1,10 @@ -const BaseModel = require('lib/BaseModel.js'); -const { time } = require('lib/time-utils.js'); -const Note = require('lib/models/Note.js'); -const { Database } = require('lib/database.js'); -const { _ } = require('lib/locale'); -const BaseItem = require('lib/models/BaseItem.js'); -const { substrWithEllipsis } = require('lib/string-utils.js'); +const BaseModel = require('../BaseModel').default; +const time = require('../time').default; +const Note = require('./Note.js'); +const { Database } = require('../database.js'); +const { _ } = require('../locale'); +const BaseItem = require('./BaseItem.js'); +const { substrWithEllipsis } = require('../string-utils.js'); class Folder extends BaseItem { static tableName() { diff --git a/ReactNativeClient/lib/models/ItemChange.js b/packages/lib/models/ItemChange.js similarity index 95% rename from ReactNativeClient/lib/models/ItemChange.js rename to packages/lib/models/ItemChange.js index 44bb5332f7..2227882d72 100644 --- a/ReactNativeClient/lib/models/ItemChange.js +++ b/packages/lib/models/ItemChange.js @@ -1,6 +1,6 @@ -const BaseModel = require('lib/BaseModel.js'); +const BaseModel = require('../BaseModel').default; const Mutex = require('async-mutex').Mutex; -const shim = require('lib/shim').default; +const shim = require('../shim').default; class ItemChange extends BaseModel { static tableName() { diff --git a/ReactNativeClient/lib/models/MasterKey.js b/packages/lib/models/MasterKey.js similarity index 87% rename from ReactNativeClient/lib/models/MasterKey.js rename to packages/lib/models/MasterKey.js index ace960e20c..68f6ff3acf 100644 --- a/ReactNativeClient/lib/models/MasterKey.js +++ b/packages/lib/models/MasterKey.js @@ -1,5 +1,5 @@ -const BaseModel = require('lib/BaseModel.js'); -const BaseItem = require('lib/models/BaseItem.js'); +const BaseModel = require('../BaseModel').default; +const BaseItem = require('./BaseItem.js'); class MasterKey extends BaseItem { static tableName() { diff --git a/ReactNativeClient/lib/models/Migration.js b/packages/lib/models/Migration.js similarity index 75% rename from ReactNativeClient/lib/models/Migration.js rename to packages/lib/models/Migration.js index 1843ac40d9..06a852df84 100644 --- a/ReactNativeClient/lib/models/Migration.js +++ b/packages/lib/models/Migration.js @@ -1,9 +1,9 @@ -const BaseModel = require('lib/BaseModel.js'); +const BaseModel = require('../BaseModel').default; const migrationScripts = { - 20: require('lib/migrations/20.js'), - 27: require('lib/migrations/27.js'), - 33: require('lib/migrations/33.js'), + 20: require('../migrations/20.js'), + 27: require('../migrations/27.js'), + 33: require('../migrations/33.js'), }; class Migration extends BaseModel { diff --git a/ReactNativeClient/lib/models/Note.js b/packages/lib/models/Note.js similarity index 97% rename from ReactNativeClient/lib/models/Note.js rename to packages/lib/models/Note.js index ac14b7e389..ff62e6a716 100644 --- a/ReactNativeClient/lib/models/Note.js +++ b/packages/lib/models/Note.js @@ -1,19 +1,19 @@ -const BaseModel = require('lib/BaseModel.js'); +const BaseModel = require('../BaseModel').default; const { sprintf } = require('sprintf-js'); -const BaseItem = require('lib/models/BaseItem.js'); -const ItemChange = require('lib/models/ItemChange.js'); -const Resource = require('lib/models/Resource.js'); -const Setting = require('lib/models/Setting').default; -const shim = require('lib/shim').default; -const { pregQuote } = require('lib/string-utils.js'); -const { time } = require('lib/time-utils.js'); -const { _ } = require('lib/locale'); -const ArrayUtils = require('lib/ArrayUtils.js'); +const BaseItem = require('./BaseItem.js'); +const ItemChange = require('./ItemChange.js'); +const Resource = require('./Resource.js'); +const Setting = require('./Setting').default; +const shim = require('../shim').default; +const { pregQuote } = require('../string-utils.js'); +const time = require('../time').default; +const { _ } = require('../locale'); +const ArrayUtils = require('../ArrayUtils.js'); const lodash = require('lodash'); -const urlUtils = require('lib/urlUtils.js'); -const markdownUtils = require('lib/markdownUtils').default; -const { MarkupToHtml } = require('lib/joplin-renderer'); -const { ALL_NOTES_FILTER_ID } = require('lib/reserved-ids'); +const urlUtils = require('../urlUtils.js'); +const markdownUtils = require('../markdownUtils').default; +const { MarkupToHtml } = require('@joplinapp/renderer'); +const { ALL_NOTES_FILTER_ID } = require('../reserved-ids'); class Note extends BaseItem { static tableName() { diff --git a/ReactNativeClient/lib/models/NoteResource.js b/packages/lib/models/NoteResource.js similarity index 98% rename from ReactNativeClient/lib/models/NoteResource.js rename to packages/lib/models/NoteResource.js index 57e6e96eb1..7359dbbd0a 100644 --- a/ReactNativeClient/lib/models/NoteResource.js +++ b/packages/lib/models/NoteResource.js @@ -1,4 +1,4 @@ -const BaseModel = require('lib/BaseModel.js'); +const BaseModel = require('../BaseModel').default; // - If is_associated = 1, note_resources indicates which note_id is currently associated with the given resource_id // - If is_associated = 0, note_resources indicates which note_id *was* associated with the given resource_id diff --git a/ReactNativeClient/lib/models/NoteTag.js b/packages/lib/models/NoteTag.js similarity index 85% rename from ReactNativeClient/lib/models/NoteTag.js rename to packages/lib/models/NoteTag.js index 0750ceabda..ace90d2b25 100644 --- a/ReactNativeClient/lib/models/NoteTag.js +++ b/packages/lib/models/NoteTag.js @@ -1,5 +1,5 @@ -const BaseItem = require('lib/models/BaseItem.js'); -const BaseModel = require('lib/BaseModel.js'); +const BaseItem = require('./BaseItem.js'); +const BaseModel = require('../BaseModel').default; class NoteTag extends BaseItem { static tableName() { diff --git a/ReactNativeClient/lib/models/Resource.js b/packages/lib/models/Resource.js similarity index 95% rename from ReactNativeClient/lib/models/Resource.js rename to packages/lib/models/Resource.js index 830a022a08..78f6849d02 100644 --- a/ReactNativeClient/lib/models/Resource.js +++ b/packages/lib/models/Resource.js @@ -1,16 +1,16 @@ -const BaseModel = require('lib/BaseModel.js'); -const BaseItem = require('lib/models/BaseItem.js'); -const ItemChange = require('lib/models/ItemChange.js'); -const NoteResource = require('lib/models/NoteResource.js'); -const ResourceLocalState = require('lib/models/ResourceLocalState.js'); -const Setting = require('lib/models/Setting').default; -const pathUtils = require('lib/path-utils'); -const { mime } = require('lib/mime-utils.js'); -const { filename, safeFilename } = require('lib/path-utils'); -const { FsDriverDummy } = require('lib/fs-driver-dummy.js'); -const markdownUtils = require('lib/markdownUtils').default; -const JoplinError = require('lib/JoplinError'); -const { _ } = require('lib/locale'); +const BaseModel = require('../BaseModel').default; +const BaseItem = require('./BaseItem.js'); +const ItemChange = require('./ItemChange.js'); +const NoteResource = require('./NoteResource.js'); +const ResourceLocalState = require('./ResourceLocalState.js'); +const Setting = require('./Setting').default; +const pathUtils = require('../path-utils'); +const { mime } = require('../mime-utils.js'); +const { filename, safeFilename } = require('../path-utils'); +const { FsDriverDummy } = require('../fs-driver-dummy.js'); +const markdownUtils = require('../markdownUtils').default; +const JoplinError = require('../JoplinError'); +const { _ } = require('../locale'); class Resource extends BaseItem { static tableName() { diff --git a/ReactNativeClient/lib/models/ResourceLocalState.js b/packages/lib/models/ResourceLocalState.js similarity index 91% rename from ReactNativeClient/lib/models/ResourceLocalState.js rename to packages/lib/models/ResourceLocalState.js index c9773359cb..2edb60478a 100644 --- a/ReactNativeClient/lib/models/ResourceLocalState.js +++ b/packages/lib/models/ResourceLocalState.js @@ -1,5 +1,5 @@ -const BaseModel = require('lib/BaseModel.js'); -const { Database } = require('lib/database.js'); +const BaseModel = require('../BaseModel').default; +const { Database } = require('../database.js'); class ResourceLocalState extends BaseModel { static tableName() { diff --git a/ReactNativeClient/lib/models/Revision.js b/packages/lib/models/Revision.js similarity index 97% rename from ReactNativeClient/lib/models/Revision.js rename to packages/lib/models/Revision.js index a74b7980de..cf13e6b1d2 100644 --- a/ReactNativeClient/lib/models/Revision.js +++ b/packages/lib/models/Revision.js @@ -1,8 +1,8 @@ -const BaseModel = require('lib/BaseModel.js'); -const BaseItem = require('lib/models/BaseItem.js'); +const BaseModel = require('../BaseModel').default; +const BaseItem = require('./BaseItem.js'); const DiffMatchPatch = require('diff-match-patch'); -const ArrayUtils = require('lib/ArrayUtils.js'); -const JoplinError = require('lib/JoplinError'); +const ArrayUtils = require('../ArrayUtils.js'); +const JoplinError = require('../JoplinError'); const { sprintf } = require('sprintf-js'); const dmp = new DiffMatchPatch(); diff --git a/ReactNativeClient/lib/models/Search.js b/packages/lib/models/Search.js similarity index 86% rename from ReactNativeClient/lib/models/Search.js rename to packages/lib/models/Search.js index f4bed53a0e..0cf545702a 100644 --- a/ReactNativeClient/lib/models/Search.js +++ b/packages/lib/models/Search.js @@ -1,4 +1,4 @@ -const BaseModel = require('lib/BaseModel.js'); +const BaseModel = require('../BaseModel').default; class Search extends BaseModel { static tableName() { diff --git a/ReactNativeClient/lib/models/Setting.ts b/packages/lib/models/Setting.ts similarity index 98% rename from ReactNativeClient/lib/models/Setting.ts rename to packages/lib/models/Setting.ts index e05bc09e91..ddf6a6f58b 100644 --- a/ReactNativeClient/lib/models/Setting.ts +++ b/packages/lib/models/Setting.ts @@ -1,13 +1,13 @@ -import shim from 'lib/shim'; -import { _, supportedLocalesToLanguages, defaultLocale } from 'lib/locale'; -const BaseModel = require('lib/BaseModel.js'); -const { Database } = require('lib/database.js'); -const SyncTargetRegistry = require('lib/SyncTargetRegistry.js'); -const { time } = require('lib/time-utils.js'); +import shim from '../shim'; +import { _, supportedLocalesToLanguages, defaultLocale } from '../locale'; +const BaseModel = require('../BaseModel').default; +const { Database } = require('../database.js'); +const SyncTargetRegistry = require('../SyncTargetRegistry.js'); +const time = require('../time').default; const { sprintf } = require('sprintf-js'); -const ObjectUtils = require('lib/ObjectUtils'); -const { toTitleCase } = require('lib/string-utils.js'); -const { rtrimSlashes, toSystemSlashes } = require('lib/path-utils'); +const ObjectUtils = require('../ObjectUtils'); +const { toTitleCase } = require('../string-utils.js'); +const { rtrimSlashes, toSystemSlashes } = require('../path-utils'); export enum SettingItemType { Int = 1, @@ -470,7 +470,7 @@ class Setting extends BaseModel { appTypes: ['cli'], label: () => _('Sort notes by'), options: () => { - const Note = require('lib/models/Note'); + const Note = require('./Note'); const noteSortFields = ['user_updated_time', 'user_created_time', 'title', 'order']; const options:any = {}; for (let i = 0; i < noteSortFields.length; i++) { @@ -496,7 +496,7 @@ class Setting extends BaseModel { appTypes: ['cli'], label: () => _('Sort notebooks by'), options: () => { - const Folder = require('lib/models/Folder'); + const Folder = require('./Folder'); const folderSortFields = ['title', 'last_note_user_updated_time']; const options:any = {}; for (let i = 0; i < folderSortFields.length; i++) { @@ -565,11 +565,11 @@ class Setting extends BaseModel { }, // Deprecated - use markdown.plugin.* - 'markdown.softbreaks': { value: false, type: SettingItemType.Bool, public: false, appTypes: ['mobile', 'desktop'] }, + 'markdown.softbreaks': { value: true, type: SettingItemType.Bool, public: false, appTypes: ['mobile', 'desktop'] }, 'markdown.typographer': { value: false, type: SettingItemType.Bool, public: false, appTypes: ['mobile', 'desktop'] }, // Deprecated - 'markdown.plugin.softbreaks': { value: false, type: SettingItemType.Bool, section: 'markdownPlugins', public: true, appTypes: ['mobile', 'desktop'], label: () => `${_('Enable soft breaks')}${wysiwygYes}` }, + 'markdown.plugin.softbreaks': { value: true, type: SettingItemType.Bool, section: 'markdownPlugins', public: true, appTypes: ['mobile', 'desktop'], label: () => `${_('Enable soft breaks')}${wysiwygYes}` }, 'markdown.plugin.typographer': { value: false, type: SettingItemType.Bool, section: 'markdownPlugins', public: true, appTypes: ['mobile', 'desktop'], label: () => `${_('Enable typographer support')}${wysiwygYes}` }, 'markdown.plugin.katex': { value: true, type: SettingItemType.Bool, section: 'markdownPlugins', public: true, appTypes: ['mobile', 'desktop'], label: () => `${_('Enable math expressions')}${wysiwygYes}` }, 'markdown.plugin.fountain': { value: false, type: SettingItemType.Bool, section: 'markdownPlugins', public: true, appTypes: ['mobile', 'desktop'], label: () => `${_('Enable Fountain syntax support')}${wysiwygYes}` }, @@ -835,6 +835,9 @@ class Setting extends BaseModel { 'camera.type': { value: 0, type: SettingItemType.Int, public: false, appTypes: ['mobile'] }, 'camera.ratio': { value: '4:3', type: SettingItemType.String, public: false, appTypes: ['mobile'] }, + 'spellChecker.enabled': { value: true, type: SettingItemType.Bool, public: false }, + 'spellChecker.language': { value: '', type: SettingItemType.String, public: false }, + windowContentZoomFactor: { value: 100, type: SettingItemType.Int, diff --git a/ReactNativeClient/lib/models/SmartFilter.js b/packages/lib/models/SmartFilter.js similarity index 79% rename from ReactNativeClient/lib/models/SmartFilter.js rename to packages/lib/models/SmartFilter.js index 6c555b4699..e04b724867 100644 --- a/ReactNativeClient/lib/models/SmartFilter.js +++ b/packages/lib/models/SmartFilter.js @@ -1,4 +1,4 @@ -const BaseModel = require('lib/BaseModel.js'); +const BaseModel = require('../BaseModel').default; class SmartFilter extends BaseModel { static tableName() { diff --git a/ReactNativeClient/lib/models/Tag.js b/packages/lib/models/Tag.js similarity index 96% rename from ReactNativeClient/lib/models/Tag.js rename to packages/lib/models/Tag.js index 56530b4894..d28ce89e12 100644 --- a/ReactNativeClient/lib/models/Tag.js +++ b/packages/lib/models/Tag.js @@ -1,8 +1,8 @@ -const BaseModel = require('lib/BaseModel.js'); -const BaseItem = require('lib/models/BaseItem.js'); -const NoteTag = require('lib/models/NoteTag.js'); -const Note = require('lib/models/Note.js'); -const { _ } = require('lib/locale'); +const BaseModel = require('../BaseModel').default; +const BaseItem = require('./BaseItem.js'); +const NoteTag = require('./NoteTag.js'); +const Note = require('./Note.js'); +const { _ } = require('../locale'); class Tag extends BaseItem { static tableName() { diff --git a/packages/lib/models/utils/modelFeed.ts b/packages/lib/models/utils/modelFeed.ts new file mode 100644 index 0000000000..4361282ec0 --- /dev/null +++ b/packages/lib/models/utils/modelFeed.ts @@ -0,0 +1,120 @@ +import paginationToSql from './paginationToSql'; +import { Pagination, PaginationOrder } from './types'; +const base64 = require('base-64'); + +interface Cursor { + lastRow: any, + pagination: Pagination, + fields: string[], +} + +export interface ModelFeedPage { + items: any[], + cursor?: string, +} + +function makeCursor(rows:any[], pagination:Pagination, fields:string[]):Cursor { + if (!rows.length) return null; + if (rows.length < pagination.limit) return null; + + const orderFields = pagination.order.map((o:PaginationOrder) => o.by); + + const lastRow:any = {}; + const fullRow = rows[rows.length - 1]; + for (const f of orderFields) { + const v = fullRow[f]; + lastRow[f] = typeof v === 'string' ? v.substr(0, 256) : v; + } + + return { + lastRow, + pagination, + fields, + }; +} + +function encodeCursor(cursor:Cursor):string { + return base64.encode(JSON.stringify(cursor)); +} + +function decodeCursor(cursor:string):Cursor { + if (!cursor) return null; + return JSON.parse(base64.decode(cursor)); +} + +// Note: this method might return more fields than was requested as it will +// also return fields that are necessary for pagination. +export default async function(db:any, tableName:string, pagination:Pagination, encodedCursor:string, whereSql:string = '', fields:string[] = null):Promise { + fields = fields ? fields.slice() : ['id']; + const cursor = decodeCursor(encodedCursor); + + const where = whereSql ? [whereSql] : []; + let sqlParams = []; + + if (cursor) { + pagination = cursor.pagination; + fields = cursor.fields; + + const paginationOrder = pagination.order[0].dir; + const orderFields = pagination.order.map((o:PaginationOrder) => o.by); + + // Use row-value syntax for WHERE clause: + // https://use-the-index-luke.com/sql/partial-results/fetch-next-page + const rowValueWhere = []; + rowValueWhere.push(`(${orderFields.join(', ')})`); + rowValueWhere.push(paginationOrder === 'DESC' ? '<' : '>'); + rowValueWhere.push(`(${orderFields.map((_f:any) => '?').join(', ')})`); + + where.push(rowValueWhere.join(' ')); + + sqlParams = orderFields.map((f:string) => cursor.lastRow[f]); + } else { + if (!pagination.order.length) throw new Error('Pagination order must be provided'); + if (pagination.order.length > 1) throw new Error('Only one pagination order field can be provided'); + + const paginationOrder = pagination.order[0].dir; + + if (!pagination.order.find((o:PaginationOrder) => o.by === 'id')) { + pagination = { + ...pagination, + order: pagination.order.concat([{ + by: 'id', + dir: paginationOrder, + caseInsensitive: false, + }]), + }; + } + } + + // Certain fields are necessary for pagination, such as ID or + // updated_time, however they are not necessarily included in the + // selected fields. However in this case we need all the "order by" + // fields to be in the selected fields as they are later used in the + // above row-value clause. + const orderFields = pagination.order.map((o:PaginationOrder) => o.by); + for (const f of orderFields) { + if (!fields.includes(f)) fields.push(f); + } + + const orderBySql = paginationToSql(pagination); + const fieldsSql = fields.length ? db.escapeFields(fields) : '*'; + + const sql = ` + SELECT ${fieldsSql} FROM \`${tableName}\` + ${where.length ? `WHERE ${where.join(' AND ')}` : ''} + ORDER BY ${orderBySql} + LIMIT ${pagination.limit} + `; + + // console.info('SQL', sql, sqlParams); + + const rows = await db.selectAll(sql, sqlParams); + + const newCursor = makeCursor(rows, pagination, fields); + + const output:ModelFeedPage = { items: rows }; + + if (newCursor) output.cursor = encodeCursor(newCursor); + + return output; +} diff --git a/packages/lib/models/utils/paginationToSql.ts b/packages/lib/models/utils/paginationToSql.ts new file mode 100644 index 0000000000..61a6c07a5e --- /dev/null +++ b/packages/lib/models/utils/paginationToSql.ts @@ -0,0 +1,15 @@ +import { Pagination } from './types'; + +export default function(pagination:Pagination):string { + const sql:string[] = []; + + for (let i = 0; i < pagination.order.length; i++) { + const o = pagination.order[i]; + let item = `\`${o.by}\``; + if (o.caseInsensitive === true) item += ' COLLATE NOCASE'; + item += ` ${o.dir}`; + sql.push(item); + } + + return sql.join(', '); +} diff --git a/packages/lib/models/utils/types.ts b/packages/lib/models/utils/types.ts new file mode 100644 index 0000000000..8728350f50 --- /dev/null +++ b/packages/lib/models/utils/types.ts @@ -0,0 +1,15 @@ +export enum PaginationOrderDir { + ASC = 'ASC', + DESC = 'DESC', +} + +export interface PaginationOrder { + by: string, + dir: PaginationOrderDir, + caseInsensitive: boolean, +} + +export interface Pagination { + limit: number, + order: PaginationOrder[], +} diff --git a/ReactNativeClient/lib/net-utils.js b/packages/lib/net-utils.js similarity index 95% rename from ReactNativeClient/lib/net-utils.js rename to packages/lib/net-utils.js index 7754ad2251..d36def19a2 100644 --- a/ReactNativeClient/lib/net-utils.js +++ b/packages/lib/net-utils.js @@ -1,4 +1,4 @@ -const shim = require('lib/shim').default; +const shim = require('./shim').default; const netUtils = {}; diff --git a/ReactNativeClient/lib/ntpDate.ts b/packages/lib/ntpDate.ts similarity index 92% rename from ReactNativeClient/lib/ntpDate.ts rename to packages/lib/ntpDate.ts index 489ee5d285..b2675ebde0 100644 --- a/ReactNativeClient/lib/ntpDate.ts +++ b/packages/lib/ntpDate.ts @@ -1,5 +1,5 @@ -const ntpClient = require('lib/vendor/ntp-client'); -const Logger = require('lib/Logger').default; +const ntpClient = require('./vendor/ntp-client'); +const Logger = require('./Logger').default; const Mutex = require('async-mutex').Mutex; let nextSyncTime = 0; diff --git a/ReactNativeClient/lib/onedrive-api-node-utils.js b/packages/lib/onedrive-api-node-utils.js similarity index 96% rename from ReactNativeClient/lib/onedrive-api-node-utils.js rename to packages/lib/onedrive-api-node-utils.js index b4b72f8d5c..c85f263fb3 100644 --- a/ReactNativeClient/lib/onedrive-api-node-utils.js +++ b/packages/lib/onedrive-api-node-utils.js @@ -1,6 +1,6 @@ -const { _ } = require('lib/locale'); -const { netUtils } = require('lib/net-utils.js'); -const shim = require('lib/shim').default; +const { _ } = require('./locale'); +const { netUtils } = require('./net-utils.js'); +const shim = require('./shim').default; const http = require('http'); const urlParser = require('url'); diff --git a/ReactNativeClient/lib/onedrive-api.js b/packages/lib/onedrive-api.js similarity index 98% rename from ReactNativeClient/lib/onedrive-api.js rename to packages/lib/onedrive-api.js index f9c8957572..83a88e3d31 100644 --- a/ReactNativeClient/lib/onedrive-api.js +++ b/packages/lib/onedrive-api.js @@ -1,9 +1,9 @@ -const shim = require('lib/shim').default; +const shim = require('./shim').default; const { stringify } = require('query-string'); -const { time } = require('lib/time-utils.js'); -const Logger = require('lib/Logger').default; -const { _ } = require('lib/locale'); -const urlUtils = require('lib/urlUtils.js'); +const time = require('./time').default; +const Logger = require('./Logger').default; +const { _ } = require('./locale'); +const urlUtils = require('./urlUtils.js'); class OneDriveApi { // `isPublic` is to tell OneDrive whether the application is a "public" one (Mobile and desktop diff --git a/packages/lib/package-lock.json b/packages/lib/package-lock.json new file mode 100644 index 0000000000..359464aba1 --- /dev/null +++ b/packages/lib/package-lock.json @@ -0,0 +1,2719 @@ +{ + "name": "@joplinapp/lib", + "version": "1.0.9", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/node": { + "version": "14.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", + "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==", + "dev": true + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + } + } + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escape-sequences": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz", + "integrity": "sha512-dzW9kHxH011uBsidTXd14JXgzye/YLb2LzeKZ4bsgl/Knwx8AtbSFkkGxagdNOoh0DlqHCmfiEjWKBaqjOanVw==", + "requires": { + "array-back": "^3.0.1" + }, + "dependencies": { + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" + } + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + } + } + }, + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "requires": { + "typical": "^2.6.1" + } + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "async-mutex": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.1.4.tgz", + "integrity": "sha512-zVWTmAnxxHaeB2B1te84oecI8zTDJ/8G49aVBblRX6be0oq6pAybNcUSxwfgVOmOjSCvN4aYZAqwtyNI8e1YGw==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "aws-sdk": { + "version": "2.783.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.783.0.tgz", + "integrity": "sha512-u3/ZvY/ag1hEkPpgBJxypWRGf8930prIDOWk221pgH0WhlRA9qp3IE8D0j/BKFei0giqlxbN/AB05RITp/XlwQ==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "dependencies": { + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=" + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "base64-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64-stream/-/base64-stream-1.0.0.tgz", + "integrity": "sha512-BQQZftaO48FcE1Kof9CmXMFaAdqkcNorgc8CxesZv9nMbbTF1EFyQe89UOuh//QMmdtfUDXyO8rgUalemL5ODA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "builtin-modules": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==" + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, + "chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "requires": { + "source-map": "~0.6.0" + } + }, + "cliss": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/cliss/-/cliss-0.0.2.tgz", + "integrity": "sha512-6rj9pgdukjT994Md13JCUAgTk91abAKrygL9sAvmHY4F6AKMOV8ccGaxhUUfcBuyg3sundWnn3JE0Mc9W6ZYqw==", + "requires": { + "command-line-usage": "^4.0.1", + "deepmerge": "^2.0.0", + "get-stdin": "^5.0.1", + "inspect-parameters-declaration": "0.0.9", + "object-to-arguments": "0.0.8", + "pipe-functions": "^1.3.0", + "strip-ansi": "^4.0.0", + "yargs-parser": "^7.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-line-usage": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz", + "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==", + "requires": { + "ansi-escape-sequences": "^4.0.0", + "array-back": "^2.0.0", + "table-layout": "^0.4.2", + "typical": "^2.6.1" + } + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "diacritics": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz", + "integrity": "sha1-PvqHMj67hj5mls67AILUj/PW96E=" + }, + "diff-match-patch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "es6-promise-pool": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/es6-promise-pool/-/es6-promise-pool-2.5.0.tgz", + "integrity": "sha1-FHxhKza0fxBQJ/nSv1SlmKmdnMs=" + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "file-type": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", + "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" + }, + "for-each-property": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/for-each-property/-/for-each-property-0.0.4.tgz", + "integrity": "sha1-z6hXrsFCLh0Sb/CHhPz2Jim8g/Y=", + "requires": { + "get-prototype-chain": "^1.0.1" + } + }, + "for-each-property-deep": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/for-each-property-deep/-/for-each-property-deep-0.0.3.tgz", + "integrity": "sha1-MTCaSvw4qcygbxsiP1PWSm0IP60=", + "requires": { + "for-each-property": "0.0.4" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "get-prototype-chain": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-prototype-chain/-/get-prototype-chain-1.0.1.tgz", + "integrity": "sha1-oXGhFeoeSQbG7ThDofABwYUQQW8=" + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==" + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + } + }, + "http-errors": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", + "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-data-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/image-data-uri/-/image-data-uri-2.0.1.tgz", + "integrity": "sha512-BZh721F2Q5TwBdwpiqrBrHEdj8daj8KuMZK/DOCyqQlz1CqFhhuZWbK5ZCUnAvFJr8LaKHTaWl9ja3/a3DC2Ew==", + "requires": { + "fs-extra": "^0.26.7", + "magicli": "0.0.8", + "mime-types": "^2.1.18", + "request": "^2.88.0" + }, + "dependencies": { + "fs-extra": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "^4.1.6" + } + } + } + }, + "image-type": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/image-type/-/image-type-3.1.0.tgz", + "integrity": "sha512-edYRXKQ3WD2yHXFGUbwoJVn5v7j1A6Z505uZUYIfzCwOOhPGLYSc3VOucF9fqbsaUbgb37DdjOU+WV4uo7ZooQ==", + "requires": { + "file-type": "^10.9.0" + } + }, + "immer": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/immer/-/immer-7.0.14.tgz", + "integrity": "sha512-BxCs6pJwhgSEUEOZjywW7OA8DXVzfHjkBelSEl0A+nEu0+zS4cFVdNOONvt55N4WOm8Pu4xqSPYxhm1Lv2iBBA==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inspect-function": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/inspect-function/-/inspect-function-0.2.2.tgz", + "integrity": "sha1-hdoMUli8TDMK4yg7Z0fgdZ2QpjU=", + "requires": { + "split-skip": "0.0.1", + "unpack-string": "0.0.2" + }, + "dependencies": { + "split-skip": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.1.tgz", + "integrity": "sha1-gK2ONumOV2RUzDtmfB3SXYZejwA=" + } + } + }, + "inspect-parameters-declaration": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/inspect-parameters-declaration/-/inspect-parameters-declaration-0.0.9.tgz", + "integrity": "sha512-c3jrKKA1rwwrsjdGMAo2hFWV0vNe3/RKHxpE/OBt41LP3ynOVI1qmgxpZYK5SQu3jtWCyaho8L7AZzCjJ4mEUw==", + "requires": { + "magicli": "0.0.5", + "split-skip": "0.0.2", + "stringify-parameters": "0.0.4", + "unpack-string": "0.0.2" + }, + "dependencies": { + "magicli": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.5.tgz", + "integrity": "sha1-zufQ+7THBRiqyxHsPrfiX/SaSSE=", + "requires": { + "commander": "^2.9.0", + "get-stdin": "^5.0.1", + "inspect-function": "^0.2.1", + "pipe-functions": "^1.2.0" + } + } + } + }, + "inspect-property": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/inspect-property/-/inspect-property-0.0.6.tgz", + "integrity": "sha512-LgjHkRl9W6bj2n+kWrAOgvCYPTYt+LanE4rtd/vKNq6yEb+SvVV7UTLzoSPpDX6/U1cAz7VfqPr+lPAIz7wHaQ==", + "requires": { + "for-each-property": "0.0.4", + "for-each-property-deep": "0.0.3", + "inspect-function": "^0.3.1" + }, + "dependencies": { + "inspect-function": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/inspect-function/-/inspect-function-0.3.4.tgz", + "integrity": "sha512-s0RsbJqK/sNZ+U1mykGoTickog3ea1A9Qk4mXniogOBu4PgkkZ56elScO7QC/r8D94lhGmJ2NyDI1ipOA/uq/g==", + "requires": { + "inspect-parameters-declaration": "0.0.8", + "magicli": "0.0.8", + "split-skip": "0.0.1", + "stringify-parameters": "0.0.4", + "unpack-string": "0.0.2" + } + }, + "inspect-parameters-declaration": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/inspect-parameters-declaration/-/inspect-parameters-declaration-0.0.8.tgz", + "integrity": "sha512-W4QzN1LgFmasKOM+NoLlDd2OAZM3enNZlVUOXoGQKmYBDFgxoPDOyebF55ALaf8avyM9TavNwibXxg347RrzCg==", + "requires": { + "magicli": "0.0.5", + "split-skip": "0.0.2", + "stringify-parameters": "0.0.4", + "unpack-string": "0.0.2" + }, + "dependencies": { + "inspect-function": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/inspect-function/-/inspect-function-0.2.2.tgz", + "integrity": "sha1-hdoMUli8TDMK4yg7Z0fgdZ2QpjU=", + "requires": { + "split-skip": "0.0.1", + "unpack-string": "0.0.2" + }, + "dependencies": { + "split-skip": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.1.tgz", + "integrity": "sha1-gK2ONumOV2RUzDtmfB3SXYZejwA=" + } + } + }, + "magicli": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.5.tgz", + "integrity": "sha1-zufQ+7THBRiqyxHsPrfiX/SaSSE=", + "requires": { + "commander": "^2.9.0", + "get-stdin": "^5.0.1", + "inspect-function": "^0.2.1", + "pipe-functions": "^1.2.0" + } + }, + "split-skip": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.2.tgz", + "integrity": "sha1-2J2Iu9L3Pka1FYqjcKVhIk6A1GE=" + } + } + }, + "split-skip": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.1.tgz", + "integrity": "sha1-gK2ONumOV2RUzDtmfB3SXYZejwA=" + } + } + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "is-absolute": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", + "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", + "requires": { + "is-relative": "^0.2.1", + "is-windows": "^0.2.0" + } + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-relative": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", + "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", + "requires": { + "is-unc-path": "^0.1.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-unc-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", + "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", + "requires": { + "unc-path-regex": "^0.1.0" + } + }, + "is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "is2": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/is2/-/is2-0.0.9.tgz", + "integrity": "sha1-EZVW0dFlGkG6EFr4AyZ8gLKZ9ik=", + "requires": { + "deep-is": "0.1.2" + }, + "dependencies": { + "deep-is": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.2.tgz", + "integrity": "sha1-nO1l6gvAsJ9CptecGxkD+dkTzBg=" + } + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "joplin-turndown": { + "version": "4.0.30", + "resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.30.tgz", + "integrity": "sha512-OrGdNTsjI6/cbx/es9Hl0YI3YTql4SopduFcYCnWTZgqT0SJqILnF2JQxSNnbPnkSDIIRdNOG4+iNzlY6bS1nw==", + "requires": { + "css": "^2.2.4", + "html-entities": "^1.2.1", + "jsdom": "^15.2.1" + } + }, + "joplin-turndown-plugin-gfm": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/joplin-turndown-plugin-gfm/-/joplin-turndown-plugin-gfm-1.0.12.tgz", + "integrity": "sha512-qL4+1iycQjZ1fs8zk3jSRk7cg3ROBUHk7GKtiLAQLFzLPKErnILUvz5DLszSQvz3s1sTjPbywLDISVUtBY6HaA==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsdom": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", + "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", + "requires": { + "abab": "^2.0.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", + "array-equal": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.1", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "levenshtein": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/levenshtein/-/levenshtein-1.0.5.tgz", + "integrity": "sha1-ORFzepy1baNF0Aj1V4LG8TiXm6M=" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "requires": { + "uc.micro": "^1.0.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash-es": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", + "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" + }, + "lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "magicli": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.8.tgz", + "integrity": "sha512-x/eBenweAHF+DsYy172sK4doRxZl0yrJnfxhLJiN7H6hPM3Ya0PfI6uBZshZ3ScFFSQD7HXgBqMdbnXKEZsO1g==", + "requires": { + "cliss": "0.0.2", + "find-up": "^2.1.0", + "for-each-property": "0.0.4", + "inspect-property": "0.0.6" + } + }, + "markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "requires": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" + } + } + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "md5-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-4.0.0.tgz", + "integrity": "sha512-UC0qFwyAjn4YdPpKaDNw6gNxRf7Mcx7jC1UGCY4boCzgvU2Aoc1mOGzTtrjjLKhM5ivsnhoKpQVxKPp+1j1qwg==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "multiparty": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.2.2.tgz", + "integrity": "sha512-NtZLjlvsjcoGrzojtwQwn/Tm90aWJ6XXtPppYF4WmOk/6ncdwMMKggFY2NlRRN9yiCEIVxpOfPWahVEG2HAG8Q==", + "requires": { + "http-errors": "~1.8.0", + "safe-buffer": "5.2.1", + "uid-safe": "2.1.5" + } + }, + "mustache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.0.1.tgz", + "integrity": "sha512-yL5VE97+OXn4+Er3THSmTdCFCtx5hHWzrolvH+JObZnUYwuaG7XV+Ch4fR2cIrcYI0tFHxS7iyFYl14bW8y2sA==" + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" + }, + "nanoid": { + "version": "3.1.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.16.tgz", + "integrity": "sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w==" + }, + "needle": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz", + "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "requires": { + "lodash.toarray": "^4.4.0" + } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node-notifier": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", + "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "node-persist": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-2.1.0.tgz", + "integrity": "sha1-5lK784haBNrWo1PXQXYXfIORRwc=", + "requires": { + "is-absolute": "^0.2.6", + "mkdirp": "~0.5.1", + "q": "~1.1.1" + } + }, + "node-pre-gyp": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-to-arguments": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/object-to-arguments/-/object-to-arguments-0.0.8.tgz", + "integrity": "sha512-BfWfuAwuhdH1bhMG5EG90WE/eckkBhBvnke8eSEkCDXoLE9Jk5JwYGTbCx1ehGwV48HvBkn62VukPBdlMUOY9w==", + "requires": { + "inspect-parameters-declaration": "0.0.10", + "magicli": "0.0.5", + "split-skip": "0.0.2", + "stringify-parameters": "0.0.4", + "unpack-string": "0.0.2" + }, + "dependencies": { + "inspect-parameters-declaration": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/inspect-parameters-declaration/-/inspect-parameters-declaration-0.0.10.tgz", + "integrity": "sha512-L8/Bvt9iDXQTZ63xY5/MAyvzz+FagR/qGh1kIXvUpsno3AAE0Z95d6QO51zrcMGaEGpwh/57idfMxTxbvRmytg==", + "requires": { + "magicli": "0.0.5", + "split-skip": "0.0.2", + "stringify-parameters": "0.0.4", + "unpack-string": "0.0.2" + } + }, + "magicli": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.5.tgz", + "integrity": "sha1-zufQ+7THBRiqyxHsPrfiX/SaSSE=", + "requires": { + "commander": "^2.9.0", + "get-stdin": "^5.0.1", + "inspect-function": "^0.2.1", + "pipe-functions": "^1.2.0" + } + } + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "requires": { + "no-case": "^2.2.0" + } + }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "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=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "pipe-functions": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pipe-functions/-/pipe-functions-1.3.0.tgz", + "integrity": "sha512-6Rtbp7criZRwedlvWbUYxqlqJoAlMvYHo2UcRWq79xZ54vZcaNHpVBOcWkX3ErT2aUA69tv+uiv4zKJbhD/Wgg==" + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "q": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/q/-/q-1.1.2.tgz", + "integrity": "sha1-Y1fikSBnAdmfGXq4TlforRlvKok=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "re-reselect": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/re-reselect/-/re-reselect-4.0.0.tgz", + "integrity": "sha512-wuygyq8TXUlSdVXv2kigXxQNOgdb9m7LbIjwfTNGSpaY1riLd5e+VeQjlQMyUtrk0oiyhi1AqIVynworl3qxHA==" + }, + "read-chunk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", + "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", + "requires": { + "pify": "^3.0.0", + "safe-buffer": "^5.1.1" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "reduce-flatten": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", + "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=" + }, + "redux": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", + "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "requires": { + "lodash": "^4.2.1", + "lodash-es": "^4.2.1", + "loose-envify": "^1.1.0", + "symbol-observable": "^1.0.3" + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "relative": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/relative/-/relative-3.0.2.tgz", + "integrity": "sha1-Dc2OxUpdNaPBXhBFA9ZTdbWlNn8=", + "requires": { + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + } + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "reselect": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz", + "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "requires": { + "xmlchars": "^2.1.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "split-skip": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.2.tgz", + "integrity": "sha1-2J2Iu9L3Pka1FYqjcKVhIk6A1GE=" + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, + "sqlite3": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz", + "integrity": "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==", + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.11.0" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string-padding": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-padding/-/string-padding-1.0.2.tgz", + "integrity": "sha1-OqrYVbPpc1xeQS3+chmMz5nH9I4=" + }, + "string-to-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-1.1.1.tgz", + "integrity": "sha512-QySF2+3Rwq0SdO3s7BAp4x+c3qsClpPQ6abAmb0DGViiSBAkT5kL6JT2iyzEVP+T1SmzHrQD1TwlP9QAHCc+Sw==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "stringify-parameters": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stringify-parameters/-/stringify-parameters-0.0.4.tgz", + "integrity": "sha512-H3L90ERn5UPtkpO8eugnKcLgpIVlvTyUTrcLGm607AV5JDH6z0GymtNLr3gjGlP6I6NB/mxNX9QpY6jEQGLPdQ==", + "requires": { + "magicli": "0.0.5", + "unpack-string": "0.0.2" + }, + "dependencies": { + "magicli": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.5.tgz", + "integrity": "sha1-zufQ+7THBRiqyxHsPrfiX/SaSSE=", + "requires": { + "commander": "^2.9.0", + "get-stdin": "^5.0.1", + "inspect-function": "^0.2.1", + "pipe-functions": "^1.2.0" + } + } + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "syswide-cas": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/syswide-cas/-/syswide-cas-5.3.0.tgz", + "integrity": "sha512-+RLgS6VInsX8rBpL+gy5qpa7phngecbK7NABelBZpqYpBTwOIK1y7CqHlXK5Vy/rA4erD9q/FyKzMjx2uX3zYg==" + }, + "table-layout": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz", + "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==", + "requires": { + "array-back": "^2.0.0", + "deep-extend": "~0.6.0", + "lodash.padend": "^4.6.1", + "typical": "^2.6.1", + "wordwrapjs": "^3.0.0" + } + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + } + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "requires": { + "minipass": "^2.9.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "tcp-port-used": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-0.1.2.tgz", + "integrity": "sha1-lFDodoyDtBb9TRpqlEnuzL9JbCk=", + "requires": { + "debug": "0.7.4", + "is2": "0.0.9", + "q": "0.9.7" + }, + "dependencies": { + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" + }, + "q": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/q/-/q-0.9.7.tgz", + "integrity": "sha1-TeLmyzspCIyeTLwDv51C+5bOL3U=" + } + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "typescript": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", + "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", + "dev": true + }, + "typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=" + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + } + } + }, + "uglifycss": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/uglifycss/-/uglifycss-0.0.29.tgz", + "integrity": "sha512-J2SQ2QLjiknNGbNdScaNZsXgmMGI0kYNrXaDlr4obnPW9ni1jljb1NeEVWAiTgZ8z+EBWP2ozfT9vpy03rjlMQ==" + }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unorm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", + "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==" + }, + "unpack-string": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/unpack-string/-/unpack-string-0.0.2.tgz", + "integrity": "sha1-MC7PCCOLATm9Q0pNf9Z83zPKJ10=" + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "uslug": { + "version": "git+https://github.com/laurent22/uslug.git#ba2834d79beb0435318709958b2f5e817d96674d", + "from": "git+https://github.com/laurent22/uslug.git#emoji-support", + "requires": { + "node-emoji": "^1.10.0", + "unorm": ">= 1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wordwrapjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", + "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", + "requires": { + "reduce-flatten": "^1.0.1", + "typical": "^2.6.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", + "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==" + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "dependencies": { + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + } + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "requires": { + "camelcase": "^4.1.0" + } + } + } +} diff --git a/packages/lib/package.json b/packages/lib/package.json new file mode 100644 index 0000000000..02fce4950f --- /dev/null +++ b/packages/lib/package.json @@ -0,0 +1,79 @@ +{ + "name": "@joplinapp/lib", + "version": "1.0.9", + "description": "> TODO: description", + "author": "Laurent Cozic ", + "homepage": "", + "license": "ISC", + "publishConfig": { + "access": "public" + }, + "scripts": { + "tsc": "node node_modules/typescript/bin/tsc --project tsconfig.json", + "watch": "node node_modules/typescript/bin/tsc --watch --project tsconfig.json" + }, + "devDependencies": { + "@types/node": "^14.14.6", + "typescript": "^4.0.5" + }, + "dependencies": { + "@joplinapp/fork-htmlparser2": "^4.1.8", + "@joplinapp/fork-sax": "^1.2.12", + "@joplinapp/renderer": "^1.0.17", + "async-mutex": "^0.1.3", + "aws-sdk": "^2.588.0", + "base-64": "^0.1.0", + "base64-stream": "^1.0.0", + "builtin-modules": "^3.1.0", + "chokidar": "^3.4.3", + "color": "3.1.2", + "diacritics": "^1.3.0", + "diff-match-patch": "^1.0.4", + "es6-promise-pool": "^2.5.0", + "file-uri-to-path": "^1.0.0", + "follow-redirects": "^1.2.4", + "form-data": "^2.1.4", + "fs-extra": "^5.0.0", + "html-entities": "^1.2.1", + "html-minifier": "^3.5.15", + "image-data-uri": "^2.0.0", + "image-type": "^3.0.0", + "immer": "^7.0.14", + "joplin-turndown": "^4.0.30", + "joplin-turndown-plugin-gfm": "^1.0.12", + "levenshtein": "^1.0.5", + "lodash": "^4.17.20", + "markdown-it": "^10.0.0", + "md5": "^2.2.1", + "md5-file": "^4.0.0", + "moment": "^2.29.1", + "multiparty": "^4.2.1", + "mustache": "^4.0.1", + "nanoid": "^3.1.12", + "node-fetch": "^1.7.1", + "node-notifier": "^8.0.0", + "node-persist": "^2.1.0", + "promise": "^7.1.1", + "query-string": "4.3.4", + "re-reselect": "^4.0.0", + "read-chunk": "^2.1.0", + "redux": "^3.7.2", + "relative": "^3.0.2", + "reselect": "^4.0.0", + "server-destroy": "^1.0.1", + "sprintf-js": "^1.1.2", + "sqlite3": "^4.1.1", + "string-padding": "^1.0.2", + "string-to-stream": "^1.1.0", + "syswide-cas": "^5.2.0", + "tar": "^4.4.10", + "tcp-port-used": "^0.1.2", + "uglifycss": "0.0.29", + "url-parse": "^1.4.7", + "uslug": "git+https://github.com/laurent22/uslug.git#emoji-support", + "uuid": "^3.0.1", + "valid-url": "^1.0.9", + "word-wrap": "^1.2.3", + "xml2js": "^0.4.19" + } +} diff --git a/ReactNativeClient/lib/parameters.js b/packages/lib/parameters.js similarity index 95% rename from ReactNativeClient/lib/parameters.js rename to packages/lib/parameters.js index d32250f23e..7f90b64dc0 100644 --- a/ReactNativeClient/lib/parameters.js +++ b/packages/lib/parameters.js @@ -1,4 +1,4 @@ -const Setting = require('lib/models/Setting').default; +const Setting = require('./models/Setting').default; const parameters_ = {}; diff --git a/ReactNativeClient/lib/parseUri.js b/packages/lib/parseUri.js similarity index 100% rename from ReactNativeClient/lib/parseUri.js rename to packages/lib/parseUri.js diff --git a/ReactNativeClient/lib/path-utils.ts b/packages/lib/path-utils.ts similarity index 99% rename from ReactNativeClient/lib/path-utils.ts rename to packages/lib/path-utils.ts index dc283454e8..30bc6f5afe 100644 --- a/ReactNativeClient/lib/path-utils.ts +++ b/packages/lib/path-utils.ts @@ -1,6 +1,6 @@ /* eslint no-useless-escape: 0*/ -const { _ } = require('lib/locale'); +const { _ } = require('./locale'); export function dirname(path:string) { if (!path) throw new Error('Path is empty'); diff --git a/ReactNativeClient/lib/promise-utils.js b/packages/lib/promise-utils.js similarity index 100% rename from ReactNativeClient/lib/promise-utils.js rename to packages/lib/promise-utils.js diff --git a/ReactNativeClient/lib/randomClipperPort.js b/packages/lib/randomClipperPort.js similarity index 100% rename from ReactNativeClient/lib/randomClipperPort.js rename to packages/lib/randomClipperPort.js diff --git a/ReactNativeClient/lib/react-logger.js b/packages/lib/react-logger.js similarity index 61% rename from ReactNativeClient/lib/react-logger.js rename to packages/lib/react-logger.js index 202b6026db..08e1c9e78b 100644 --- a/ReactNativeClient/lib/react-logger.js +++ b/packages/lib/react-logger.js @@ -1,4 +1,4 @@ -const Logger = require('lib/Logger').default; +const Logger = require('./Logger').default; class ReactLogger extends Logger {} diff --git a/ReactNativeClient/lib/reducer.ts b/packages/lib/reducer.ts similarity index 99% rename from ReactNativeClient/lib/reducer.ts rename to packages/lib/reducer.ts index b27f3ad1f3..b1ab8fadf1 100644 --- a/ReactNativeClient/lib/reducer.ts +++ b/packages/lib/reducer.ts @@ -1,10 +1,10 @@ import produce, { Draft } from 'immer'; -import pluginServiceReducer, { stateRootKey as pluginServiceStateRootKey, defaultState as pluginServiceDefaultState, State as PluginServiceState } from 'lib/services/plugins/reducer'; -const Note = require('lib/models/Note.js'); -const Folder = require('lib/models/Folder.js'); -const BaseModel = require('lib/BaseModel'); -const ArrayUtils = require('lib/ArrayUtils.js'); -const { ALL_NOTES_FILTER_ID } = require('lib/reserved-ids'); +import pluginServiceReducer, { stateRootKey as pluginServiceStateRootKey, defaultState as pluginServiceDefaultState, State as PluginServiceState } from './services/plugins/reducer'; +const Note = require('./models/Note.js'); +const Folder = require('./models/Folder.js'); +const BaseModel = require('./BaseModel').default; +const ArrayUtils = require('./ArrayUtils.js'); +const { ALL_NOTES_FILTER_ID } = require('./reserved-ids'); const { createSelectorCreator, defaultMemoize } = require('reselect'); const { createCachedSelector } = require('re-reselect'); diff --git a/ReactNativeClient/lib/registry.js b/packages/lib/registry.js similarity index 96% rename from ReactNativeClient/lib/registry.js rename to packages/lib/registry.js index 1f87402e70..c92f02bd06 100644 --- a/ReactNativeClient/lib/registry.js +++ b/packages/lib/registry.js @@ -1,7 +1,7 @@ -const Logger = require('lib/Logger').default; -const Setting = require('lib/models/Setting').default; -const shim = require('lib/shim').default; -const SyncTargetRegistry = require('lib/SyncTargetRegistry.js'); +const Logger = require('./Logger').default; +const Setting = require('./models/Setting').default; +const shim = require('./shim').default; +const SyncTargetRegistry = require('./SyncTargetRegistry.js'); const reg = {}; diff --git a/ReactNativeClient/lib/renderers/webviewLib.js b/packages/lib/renderers/webviewLib.js similarity index 100% rename from ReactNativeClient/lib/renderers/webviewLib.js rename to packages/lib/renderers/webviewLib.js diff --git a/ReactNativeClient/lib/reserved-ids.js b/packages/lib/reserved-ids.js similarity index 100% rename from ReactNativeClient/lib/reserved-ids.js rename to packages/lib/reserved-ids.js diff --git a/ReactNativeClient/lib/resourceUtils.js b/packages/lib/resourceUtils.js similarity index 100% rename from ReactNativeClient/lib/resourceUtils.js rename to packages/lib/resourceUtils.js diff --git a/packages/lib/rnInjectedJs/webviewLib.js b/packages/lib/rnInjectedJs/webviewLib.js new file mode 100644 index 0000000000..0042d7552d --- /dev/null +++ b/packages/lib/rnInjectedJs/webviewLib.js @@ -0,0 +1 @@ +module.exports = "const webviewLib = {};\n\nlet manualDownloadResourceElements = [];\n\nwebviewLib.onUnloadedResourceClick = function(event) {\n\tconst resourceId = event.currentTarget.getAttribute('data-resource-id');\n\twebviewLib.options_.postMessage(`markForDownload:${resourceId}`);\n};\n\nwebviewLib.setupResourceManualDownload = function() {\n\tfor (const element of manualDownloadResourceElements) {\n\t\telement.style.cursor = 'default';\n\t\telement.removeEventListener('click', webviewLib.onUnloadedResourceClick);\n\t}\n\n\tmanualDownloadResourceElements = [];\n\n\tconst elements = document.getElementsByClassName('resource-status-notDownloaded');\n\n\tfor (const element of elements) {\n\t\telement.style.cursor = 'pointer';\n\t\telement.addEventListener('click', webviewLib.onUnloadedResourceClick);\n\t\tmanualDownloadResourceElements.push(element);\n\t}\n};\n\nwebviewLib.handleInternalLink = function(event, anchorNode) {\n\tconst href = anchorNode.getAttribute('href');\n\tif (!href) return false;\n\n\tif (href.indexOf('#') === 0) {\n\t\tevent.preventDefault();\n\t\t// let old_hash = location.hash;\n\n\t\tlocation.hash = href;\n\n\t\t// HACK\n\t\t// For some reason anchors at the bottom cause the webview to move itself\n\t\t// so that the content is aligned with the top of the screen\n\t\t// This basically refreshes the scroll view so that is returns to a normal\n\t\t// position, the scroll positions stays correct though\n\t\t// Additionally an anchor could not be clicked twice because the location\n\t\t// would not change, this fixes that also\n\t\t//\n\t\t// Commented out to fix https://github.com/laurent22/joplin/issues/2141\n\t\t// We might need to fix a better fix to the previous bug.\n\t\t//\n\t\t// setTimeout(function() {\n\t\t// \tlocation.hash = old_hash;\n\t\t// }, 10);\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\nwebviewLib.getParentAnchorElement = function(element) {\n\tlet counter = 0;\n\twhile (true) {\n\t\tif (counter++ >= 10000) {\n\t\t\tconsole.warn('been looping for too long - exiting');\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!element) return null;\n\t\tif (element.nodeName.toUpperCase() === 'A') return element;\n\t\telement = element.parentElement;\n\t}\n};\n\nwebviewLib.cloneError = function(error) {\n\treturn {\n\t\tmessage: error.message,\n\t\tstack: error.stack,\n\t};\n};\n\nwebviewLib.logEnabledEventHandler = function(fn) {\n\treturn function(event) {\n\t\ttry {\n\t\t\treturn fn(event);\n\t\t} catch (error) {\n\t\t\twebviewLib.options_.postMessage(`error:${JSON.stringify(webviewLib.cloneError(error))}`);\n\t\t\tthrow error;\n\t\t}\n\t};\n};\n\nwebviewLib.initialize = function(options) {\n\twebviewLib.options_ = options;\n};\n\ndocument.addEventListener('click', function(event) {\n\tconst anchor = webviewLib.getParentAnchorElement(event.target);\n\tif (!anchor) return;\n\n\t// Prevent URLs added via tags from being opened within the application itself\n\t// otherwise it would open the whole website within the WebView.\n\n\t// Note that we already handle some links in html_inline.js, however not all of them\n\t// go through this plugin, in particular links coming from third-party packages such\n\t// as Katex or Mermaid.\n\tif (!anchor.hasAttribute('data-from-md')) {\n\t\tif (webviewLib.handleInternalLink(event, anchor)) return;\n\t\tevent.preventDefault();\n\t\tif (anchor.getAttribute('href')) webviewLib.options_.postMessage(anchor.getAttribute('href'));\n\t\treturn;\n\t}\n\n\t// If this is an internal link, jump to the anchor directly\n\tif (anchor.hasAttribute('data-from-md')) {\n\t\tif (webviewLib.handleInternalLink(event, anchor)) return;\n\t}\n});\n"; \ No newline at end of file diff --git a/ReactNativeClient/lib/services/AlarmService.ts b/packages/lib/services/AlarmService.ts similarity index 97% rename from ReactNativeClient/lib/services/AlarmService.ts rename to packages/lib/services/AlarmService.ts index 26055b4bf5..da0be23a1d 100644 --- a/ReactNativeClient/lib/services/AlarmService.ts +++ b/packages/lib/services/AlarmService.ts @@ -1,7 +1,7 @@ -import Logger from 'lib/Logger'; -import Alarm from 'lib/models/Alarm'; +import Logger from '../Logger'; +import Alarm from '../models/Alarm'; -const Note = require('lib/models/Note.js'); +const Note = require('../models/Note.js'); export default class AlarmService { diff --git a/ReactNativeClient/lib/services/AlarmServiceDriverNode.ts b/packages/lib/services/AlarmServiceDriverNode.ts similarity index 96% rename from ReactNativeClient/lib/services/AlarmServiceDriverNode.ts rename to packages/lib/services/AlarmServiceDriverNode.ts index 938e6bad75..d66959dab1 100644 --- a/ReactNativeClient/lib/services/AlarmServiceDriverNode.ts +++ b/packages/lib/services/AlarmServiceDriverNode.ts @@ -1,6 +1,6 @@ -import eventManager from 'lib/eventManager'; -import { Notification } from 'lib/models/Alarm'; -import shim from 'lib/shim'; +import eventManager from '../eventManager'; +import { Notification } from '../models/Alarm'; +import shim from '../shim'; const notifier = require('node-notifier'); const bridge = require('electron').remote.require('./bridge').default; diff --git a/ReactNativeClient/lib/services/BaseService.ts b/packages/lib/services/BaseService.ts similarity index 91% rename from ReactNativeClient/lib/services/BaseService.ts rename to packages/lib/services/BaseService.ts index 41cca22b93..6ffe911681 100644 --- a/ReactNativeClient/lib/services/BaseService.ts +++ b/packages/lib/services/BaseService.ts @@ -1,4 +1,4 @@ -import Logger from 'lib/Logger'; +import Logger from '../Logger'; export default class BaseService { diff --git a/ReactNativeClient/lib/services/CommandService.ts b/packages/lib/services/CommandService.ts similarity index 98% rename from ReactNativeClient/lib/services/CommandService.ts rename to packages/lib/services/CommandService.ts index 16e3944353..6bcfdff923 100644 --- a/ReactNativeClient/lib/services/CommandService.ts +++ b/packages/lib/services/CommandService.ts @@ -1,7 +1,7 @@ -import { State } from 'lib/reducer'; -import eventManager from 'lib/eventManager'; -import BaseService from 'lib/services/BaseService'; -import shim from 'lib/shim'; +import { State } from '../reducer'; +import eventManager from '../eventManager'; +import BaseService from './BaseService'; +import shim from '../shim'; import WhenClause from './WhenClause'; import stateToWhenClauseContext from './commands/stateToWhenClauseContext'; diff --git a/ReactNativeClient/lib/services/DecryptionWorker.js b/packages/lib/services/DecryptionWorker.js similarity index 96% rename from ReactNativeClient/lib/services/DecryptionWorker.js rename to packages/lib/services/DecryptionWorker.js index ad97f5c592..948738620e 100644 --- a/ReactNativeClient/lib/services/DecryptionWorker.js +++ b/packages/lib/services/DecryptionWorker.js @@ -1,11 +1,11 @@ -const BaseItem = require('lib/models/BaseItem'); -const BaseModel = require('lib/BaseModel'); -const MasterKey = require('lib/models/MasterKey'); -const Resource = require('lib/models/Resource'); -const ResourceService = require('lib/services/ResourceService'); -const Logger = require('lib/Logger').default; +const BaseItem = require('../models/BaseItem'); +const BaseModel = require('../BaseModel').default; +const MasterKey = require('../models/MasterKey'); +const Resource = require('../models/Resource'); +const ResourceService = require('./ResourceService'); +const Logger = require('../Logger').default; const EventEmitter = require('events'); -const shim = require('lib/shim').default; +const shim = require('../shim').default; class DecryptionWorker { constructor() { diff --git a/ReactNativeClient/lib/services/EncryptionService.js b/packages/lib/services/EncryptionService.js similarity index 98% rename from ReactNativeClient/lib/services/EncryptionService.js rename to packages/lib/services/EncryptionService.js index 3aaea13f3c..196cf8848e 100644 --- a/ReactNativeClient/lib/services/EncryptionService.js +++ b/packages/lib/services/EncryptionService.js @@ -1,10 +1,10 @@ -const { padLeft } = require('lib/string-utils.js'); -const Logger = require('lib/Logger').default; -const shim = require('lib/shim').default; -const Setting = require('lib/models/Setting').default; -const MasterKey = require('lib/models/MasterKey'); -const BaseItem = require('lib/models/BaseItem'); -const JoplinError = require('lib/JoplinError'); +const { padLeft } = require('../string-utils.js'); +const Logger = require('../Logger').default; +const shim = require('../shim').default; +const Setting = require('../models/Setting').default; +const MasterKey = require('../models/MasterKey'); +const BaseItem = require('../models/BaseItem'); +const JoplinError = require('../JoplinError'); function hexPad(s, length) { return padLeft(s, length, '0'); diff --git a/ReactNativeClient/lib/services/EncryptionServiceDriverNode.js b/packages/lib/services/EncryptionServiceDriverNode.js similarity index 100% rename from ReactNativeClient/lib/services/EncryptionServiceDriverNode.js rename to packages/lib/services/EncryptionServiceDriverNode.js diff --git a/ReactNativeClient/lib/services/ExternalEditWatcher.js b/packages/lib/services/ExternalEditWatcher.js similarity index 96% rename from ReactNativeClient/lib/services/ExternalEditWatcher.js rename to packages/lib/services/ExternalEditWatcher.js index fac4c0943a..c02dda2f24 100644 --- a/ReactNativeClient/lib/services/ExternalEditWatcher.js +++ b/packages/lib/services/ExternalEditWatcher.js @@ -1,14 +1,14 @@ -const Logger = require('lib/Logger').default; -const Note = require('lib/models/Note'); -const Setting = require('lib/models/Setting').default; -const shim = require('lib/shim').default; +const Logger = require('../Logger').default; +const Note = require('../models/Note'); +const Setting = require('../models/Setting').default; +const shim = require('../shim').default; const EventEmitter = require('events'); -const { splitCommandString } = require('lib/string-utils'); -const { fileExtension, basename } = require('lib/path-utils'); +const { splitCommandString } = require('../string-utils'); +const { fileExtension, basename } = require('../path-utils'); const spawn = require('child_process').spawn; const chokidar = require('chokidar'); const bridge = require('electron').remote.require('./bridge').default; -const { time } = require('lib/time-utils.js'); +const time = require('../time').default; const { ErrorNotFound } = require('./rest/errors'); class ExternalEditWatcher { diff --git a/ReactNativeClient/lib/services/ItemChangeUtils.js b/packages/lib/services/ItemChangeUtils.js similarity index 79% rename from ReactNativeClient/lib/services/ItemChangeUtils.js rename to packages/lib/services/ItemChangeUtils.js index e89f4ad328..3e044ba177 100644 --- a/ReactNativeClient/lib/services/ItemChangeUtils.js +++ b/packages/lib/services/ItemChangeUtils.js @@ -1,5 +1,5 @@ -const Setting = require('lib/models/Setting').default; -const ItemChange = require('lib/models/ItemChange'); +const Setting = require('../models/Setting').default; +const ItemChange = require('../models/ItemChange'); class ItemChangeUtils { static async deleteProcessedChanges() { diff --git a/ReactNativeClient/lib/services/KeymapService.ts b/packages/lib/services/KeymapService.ts similarity index 98% rename from ReactNativeClient/lib/services/KeymapService.ts rename to packages/lib/services/KeymapService.ts index 4b65dacdf1..de1ee29b8d 100644 --- a/ReactNativeClient/lib/services/KeymapService.ts +++ b/packages/lib/services/KeymapService.ts @@ -1,9 +1,8 @@ -import { KeyboardEvent } from 'react'; -import eventManager from 'lib/eventManager'; -import shim from 'lib/shim'; -import { _ } from 'lib/locale'; +import eventManager from '../eventManager'; +import shim from '../shim'; +import { _ } from '../locale'; -const BaseService = require('lib/services/BaseService').default; +const BaseService = require('./BaseService').default; const keysRegExp = /^([0-9A-Z)!@#$%^&*(:+<_>?~{|}";=,\-./`[\\\]']|F1*[1-9]|F10|F2[0-4]|Plus|Space|Tab|Backspace|Delete|Insert|Return|Enter|Up|Down|Left|Right|Home|End|PageUp|PageDown|Escape|Esc|VolumeUp|VolumeDown|VolumeMute|MediaNextTrack|MediaPreviousTrack|MediaStop|MediaPlayPause|PrintScreen)$/; const modifiersRegExp = { @@ -350,7 +349,7 @@ export default class KeymapService extends BaseService { if (!isValid) throw new Error(_('Accelerator "%s" is not valid.', accelerator)); } - public domToElectronAccelerator(event: KeyboardEvent) { + public domToElectronAccelerator(event:any) { const parts = []; const { key, ctrlKey, metaKey, altKey, shiftKey } = event; diff --git a/ReactNativeClient/lib/services/KvStore.js b/packages/lib/services/KvStore.js similarity index 97% rename from ReactNativeClient/lib/services/KvStore.js rename to packages/lib/services/KvStore.js index 45cdd38c73..af3d4aeff6 100644 --- a/ReactNativeClient/lib/services/KvStore.js +++ b/packages/lib/services/KvStore.js @@ -1,4 +1,4 @@ -const BaseService = require('lib/services/BaseService').default; +const BaseService = require('./BaseService').default; const Mutex = require('async-mutex').Mutex; class KvStore extends BaseService { diff --git a/ReactNativeClient/lib/services/MigrationService.js b/packages/lib/services/MigrationService.js similarity index 86% rename from ReactNativeClient/lib/services/MigrationService.js rename to packages/lib/services/MigrationService.js index dc65697357..6c3db29d1d 100644 --- a/ReactNativeClient/lib/services/MigrationService.js +++ b/packages/lib/services/MigrationService.js @@ -1,5 +1,5 @@ -const BaseService = require('lib/services/BaseService').default; -const Migration = require('lib/models/Migration'); +const BaseService = require('./BaseService').default; +const Migration = require('../models/Migration'); class MigrationService extends BaseService { constructor() { diff --git a/ReactNativeClient/lib/services/ModelCache.js b/packages/lib/services/ModelCache.js similarity index 93% rename from ReactNativeClient/lib/services/ModelCache.js rename to packages/lib/services/ModelCache.js index a0d6602c5a..75fbfe7820 100644 --- a/ReactNativeClient/lib/services/ModelCache.js +++ b/packages/lib/services/ModelCache.js @@ -1,4 +1,4 @@ -const BaseItem = require('lib/models/BaseItem'); +const BaseItem = require('../models/BaseItem'); class ModelCache { constructor() { diff --git a/ReactNativeClient/lib/services/NavService.js b/packages/lib/services/NavService.js similarity index 100% rename from ReactNativeClient/lib/services/NavService.js rename to packages/lib/services/NavService.js diff --git a/ReactNativeClient/lib/services/PluginManager.js b/packages/lib/services/PluginManager.js similarity index 97% rename from ReactNativeClient/lib/services/PluginManager.js rename to packages/lib/services/PluginManager.js index 661416ec4f..d6d45d0e80 100644 --- a/ReactNativeClient/lib/services/PluginManager.js +++ b/packages/lib/services/PluginManager.js @@ -1,4 +1,4 @@ -const Logger = require('lib/Logger').default; +const Logger = require('../Logger').default; class PluginManager { constructor() { diff --git a/ReactNativeClient/lib/services/ResourceEditWatcher/index.ts b/packages/lib/services/ResourceEditWatcher/index.ts similarity index 97% rename from ReactNativeClient/lib/services/ResourceEditWatcher/index.ts rename to packages/lib/services/ResourceEditWatcher/index.ts index 01550a8bf4..2a87e8a0ce 100644 --- a/ReactNativeClient/lib/services/ResourceEditWatcher/index.ts +++ b/packages/lib/services/ResourceEditWatcher/index.ts @@ -1,9 +1,9 @@ import AsyncActionQueue from '../../AsyncActionQueue'; -import shim from 'lib/shim'; -import { _ } from 'lib/locale'; -const Logger = require('lib/Logger').default; -const Setting = require('lib/models/Setting').default; -const Resource = require('lib/models/Resource'); +import shim from '../../shim'; +import { _ } from '../../locale'; +const Logger = require('../../Logger').default; +const Setting = require('../../models/Setting').default; +const Resource = require('../../models/Resource'); const EventEmitter = require('events'); const chokidar = require('chokidar'); const bridge = require('electron').remote.require('./bridge').default; diff --git a/ReactNativeClient/lib/services/ResourceEditWatcher/reducer.ts b/packages/lib/services/ResourceEditWatcher/reducer.ts similarity index 100% rename from ReactNativeClient/lib/services/ResourceEditWatcher/reducer.ts rename to packages/lib/services/ResourceEditWatcher/reducer.ts diff --git a/ReactNativeClient/lib/services/ResourceFetcher.js b/packages/lib/services/ResourceFetcher.js similarity index 95% rename from ReactNativeClient/lib/services/ResourceFetcher.js rename to packages/lib/services/ResourceFetcher.js index c38cea5e26..319d312d13 100644 --- a/ReactNativeClient/lib/services/ResourceFetcher.js +++ b/packages/lib/services/ResourceFetcher.js @@ -1,11 +1,11 @@ -const Resource = require('lib/models/Resource'); -const Setting = require('lib/models/Setting').default; -const BaseService = require('lib/services/BaseService').default; -const ResourceService = require('lib/services/ResourceService'); -const { Dirnames } = require('lib/services/synchronizer/utils/types'); -const Logger = require('lib/Logger').default; +const Resource = require('../models/Resource'); +const Setting = require('../models/Setting').default; +const BaseService = require('./BaseService').default; +const ResourceService = require('./ResourceService'); +const { Dirnames } = require('./synchronizer/utils/types'); +const Logger = require('../Logger').default; const EventEmitter = require('events'); -const shim = require('lib/shim').default; +const shim = require('../shim').default; class ResourceFetcher extends BaseService { constructor(fileApi = null) { diff --git a/ReactNativeClient/lib/services/ResourceService.js b/packages/lib/services/ResourceService.js similarity index 91% rename from ReactNativeClient/lib/services/ResourceService.js rename to packages/lib/services/ResourceService.js index 2def5cfcd0..f0f2a0807c 100644 --- a/ReactNativeClient/lib/services/ResourceService.js +++ b/packages/lib/services/ResourceService.js @@ -1,13 +1,13 @@ -const ItemChange = require('lib/models/ItemChange'); -const NoteResource = require('lib/models/NoteResource'); -const Note = require('lib/models/Note'); -const Resource = require('lib/models/Resource'); -const BaseModel = require('lib/BaseModel'); -const BaseService = require('lib/services/BaseService').default; -const SearchEngine = require('lib/services/searchengine/SearchEngine'); -const Setting = require('lib/models/Setting').default; -const shim = require('lib/shim').default; -const ItemChangeUtils = require('lib/services/ItemChangeUtils'); +const ItemChange = require('../models/ItemChange'); +const NoteResource = require('../models/NoteResource'); +const Note = require('../models/Note'); +const Resource = require('../models/Resource'); +const BaseModel = require('../BaseModel').default; +const BaseService = require('./BaseService').default; +const SearchEngine = require('./searchengine/SearchEngine'); +const Setting = require('../models/Setting').default; +const shim = require('../shim').default; +const ItemChangeUtils = require('./ItemChangeUtils'); const { sprintf } = require('sprintf-js'); class ResourceService extends BaseService { diff --git a/ReactNativeClient/lib/services/RevisionService.js b/packages/lib/services/RevisionService.js similarity index 94% rename from ReactNativeClient/lib/services/RevisionService.js rename to packages/lib/services/RevisionService.js index 15288f28f3..e2fcbb0e6e 100644 --- a/ReactNativeClient/lib/services/RevisionService.js +++ b/packages/lib/services/RevisionService.js @@ -1,15 +1,15 @@ -const ItemChange = require('lib/models/ItemChange'); -const Note = require('lib/models/Note'); -const Folder = require('lib/models/Folder'); -const Setting = require('lib/models/Setting').default; -const Revision = require('lib/models/Revision'); -const BaseModel = require('lib/BaseModel'); -const ItemChangeUtils = require('lib/services/ItemChangeUtils'); -const shim = require('lib/shim').default; -const BaseService = require('lib/services/BaseService').default; -const { _ } = require('lib/locale'); +const ItemChange = require('../models/ItemChange'); +const Note = require('../models/Note'); +const Folder = require('../models/Folder'); +const Setting = require('../models/Setting').default; +const Revision = require('../models/Revision'); +const BaseModel = require('../BaseModel').default; +const ItemChangeUtils = require('./ItemChangeUtils'); +const shim = require('../shim').default; +const BaseService = require('./BaseService').default; +const { _ } = require('../locale'); const { sprintf } = require('sprintf-js'); -const { wrapError } = require('lib/errorUtils'); +const { wrapError } = require('../errorUtils'); class RevisionService extends BaseService { constructor() { diff --git a/ReactNativeClient/lib/services/SettingUtils.ts b/packages/lib/services/SettingUtils.ts similarity index 92% rename from ReactNativeClient/lib/services/SettingUtils.ts rename to packages/lib/services/SettingUtils.ts index fda63ee448..094f53fe51 100644 --- a/ReactNativeClient/lib/services/SettingUtils.ts +++ b/packages/lib/services/SettingUtils.ts @@ -1,8 +1,8 @@ /* eslint-disable import/prefer-default-export */ import KeychainService from './keychain/KeychainService'; -const Setting = require('lib/models/Setting').default; -const uuid = require('lib/uuid').default; +const Setting = require('../models/Setting').default; +const uuid = require('../uuid').default; // This function takes care of initialising both the keychain service and settings. // diff --git a/ReactNativeClient/lib/services/UndoRedoService.ts b/packages/lib/services/UndoRedoService.ts similarity index 100% rename from ReactNativeClient/lib/services/UndoRedoService.ts rename to packages/lib/services/UndoRedoService.ts diff --git a/ReactNativeClient/lib/services/WhenClause.ts b/packages/lib/services/WhenClause.ts similarity index 100% rename from ReactNativeClient/lib/services/WhenClause.ts rename to packages/lib/services/WhenClause.ts diff --git a/ReactNativeClient/lib/services/commands/MenuUtils.ts b/packages/lib/services/commands/MenuUtils.ts similarity index 100% rename from ReactNativeClient/lib/services/commands/MenuUtils.ts rename to packages/lib/services/commands/MenuUtils.ts diff --git a/ReactNativeClient/lib/services/commands/ToolbarButtonUtils.ts b/packages/lib/services/commands/ToolbarButtonUtils.ts similarity index 95% rename from ReactNativeClient/lib/services/commands/ToolbarButtonUtils.ts rename to packages/lib/services/commands/ToolbarButtonUtils.ts index e8e8f306d8..675faa7663 100644 --- a/ReactNativeClient/lib/services/commands/ToolbarButtonUtils.ts +++ b/packages/lib/services/commands/ToolbarButtonUtils.ts @@ -1,5 +1,5 @@ -import CommandService from 'lib/services/CommandService'; -import { stateUtils } from 'lib/reducer'; +import CommandService from '../CommandService'; +import { stateUtils } from '../../reducer'; const separatorItem = { type: 'separator' }; diff --git a/ReactNativeClient/lib/services/commands/commandsToMarkdownTable.ts b/packages/lib/services/commands/commandsToMarkdownTable.ts similarity index 95% rename from ReactNativeClient/lib/services/commands/commandsToMarkdownTable.ts rename to packages/lib/services/commands/commandsToMarkdownTable.ts index dfa6a59e26..e85e3c497e 100644 --- a/ReactNativeClient/lib/services/commands/commandsToMarkdownTable.ts +++ b/packages/lib/services/commands/commandsToMarkdownTable.ts @@ -1,4 +1,4 @@ -import markdownUtils, { MarkdownTableHeader, MarkdownTableRow } from 'lib/markdownUtils'; +import markdownUtils, { MarkdownTableHeader, MarkdownTableRow } from '../../markdownUtils'; export default function commandsToMarkdownTable():string { const headers:MarkdownTableHeader[] = [ diff --git a/ReactNativeClient/lib/services/commands/propsHaveChanged.ts b/packages/lib/services/commands/propsHaveChanged.ts similarity index 100% rename from ReactNativeClient/lib/services/commands/propsHaveChanged.ts rename to packages/lib/services/commands/propsHaveChanged.ts diff --git a/ReactNativeClient/lib/services/commands/stateToWhenClauseContext.ts b/packages/lib/services/commands/stateToWhenClauseContext.ts similarity index 89% rename from ReactNativeClient/lib/services/commands/stateToWhenClauseContext.ts rename to packages/lib/services/commands/stateToWhenClauseContext.ts index eb205cfdde..f31099d840 100644 --- a/ReactNativeClient/lib/services/commands/stateToWhenClauseContext.ts +++ b/packages/lib/services/commands/stateToWhenClauseContext.ts @@ -1,8 +1,8 @@ -import { stateUtils } from 'lib/reducer'; +import { stateUtils } from '../../reducer'; -const BaseModel = require('lib/BaseModel'); -const Folder = require('lib/models/Folder'); -const MarkupToHtml = require('lib/joplin-renderer/MarkupToHtml').default; +const BaseModel = require('../../BaseModel').default; +const Folder = require('../../models/Folder'); +const MarkupToHtml = require('@joplinapp/renderer/MarkupToHtml').default; export default function stateToWhenClauseContext(state:any) { const noteId = state.selectedNoteIds.length === 1 ? state.selectedNoteIds[0] : null; diff --git a/ReactNativeClient/lib/services/contextkey/contextkey.ts b/packages/lib/services/contextkey/contextkey.ts similarity index 99% rename from ReactNativeClient/lib/services/contextkey/contextkey.ts rename to packages/lib/services/contextkey/contextkey.ts index b9f0a2ce0a..c5b3123bb7 100644 --- a/ReactNativeClient/lib/services/contextkey/contextkey.ts +++ b/packages/lib/services/contextkey/contextkey.ts @@ -22,7 +22,7 @@ // import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; // import { isMacintosh, isLinux, isWindows, isWeb } from 'vs/base/common/platform'; -import shim from 'lib/shim'; +import shim from '../../shim'; const isMacintosh = shim.isMac(); const isLinux = shim.isLinux(); diff --git a/ReactNativeClient/lib/services/debug/populateDatabase.ts b/packages/lib/services/debug/populateDatabase.ts similarity index 95% rename from ReactNativeClient/lib/services/debug/populateDatabase.ts rename to packages/lib/services/debug/populateDatabase.ts index aa3cb89482..f4c3ee1fa8 100644 --- a/ReactNativeClient/lib/services/debug/populateDatabase.ts +++ b/packages/lib/services/debug/populateDatabase.ts @@ -1,6 +1,6 @@ -const Folder = require('lib/models/Folder'); -const Note = require('lib/models/Note'); -const Tag = require('lib/models/Tag'); +const Folder = require('../../models/Folder'); +const Note = require('../../models/Note'); +const Tag = require('../../models/Tag'); function randomIndex(array:any[]):number { return Math.round(Math.random() * (array.length - 1)); diff --git a/ReactNativeClient/lib/services/interop/InteropService.ts b/packages/lib/services/interop/InteropService.ts similarity index 96% rename from ReactNativeClient/lib/services/interop/InteropService.ts rename to packages/lib/services/interop/InteropService.ts index e8dc613ec3..d950fb91b1 100644 --- a/ReactNativeClient/lib/services/interop/InteropService.ts +++ b/packages/lib/services/interop/InteropService.ts @@ -1,18 +1,18 @@ import { ModuleType, FileSystemItem, ImportModuleOutputFormat, Module, ImportOptions, ExportOptions, ImportExportResult, defaultImportExportModule } from './types'; import InteropService_Importer_Custom from './InteropService_Importer_Custom'; import InteropService_Exporter_Custom from './InteropService_Exporter_Custom'; -import shim from 'lib/shim'; -import { _ } from 'lib/locale'; -const BaseItem = require('lib/models/BaseItem.js'); -const BaseModel = require('lib/BaseModel.js'); -const Resource = require('lib/models/Resource.js'); -const Folder = require('lib/models/Folder.js'); -const NoteTag = require('lib/models/NoteTag.js'); -const Note = require('lib/models/Note.js'); -const ArrayUtils = require('lib/ArrayUtils'); +import shim from '../../shim'; +import { _ } from '../../locale'; +const BaseItem = require('../../models/BaseItem.js'); +const BaseModel = require('../../BaseModel').default; +const Resource = require('../../models/Resource.js'); +const Folder = require('../../models/Folder.js'); +const NoteTag = require('../../models/NoteTag.js'); +const Note = require('../../models/Note.js'); +const ArrayUtils = require('../../ArrayUtils'); const { sprintf } = require('sprintf-js'); -const { fileExtension } = require('lib/path-utils'); -const { toTitleCase } = require('lib/string-utils'); +const { fileExtension } = require('../../path-utils'); +const { toTitleCase } = require('../../string-utils'); const EventEmitter = require('events'); export default class InteropService { @@ -171,7 +171,7 @@ export default class InteropService { } else { className = `InteropService_Exporter_${toTitleCase(module.format)}`; } - return `lib/services/interop/${className}`; + return `./${className}`; } private newModuleFromCustomFactory(module:Module) { diff --git a/ReactNativeClient/lib/services/interop/InteropService_Exporter_Base.ts b/packages/lib/services/interop/InteropService_Exporter_Base.ts similarity index 94% rename from ReactNativeClient/lib/services/interop/InteropService_Exporter_Base.ts rename to packages/lib/services/interop/InteropService_Exporter_Base.ts index 857b85a5f2..e1c8346844 100644 --- a/ReactNativeClient/lib/services/interop/InteropService_Exporter_Base.ts +++ b/packages/lib/services/interop/InteropService_Exporter_Base.ts @@ -1,6 +1,6 @@ /* eslint @typescript-eslint/no-unused-vars: 0, no-unused-vars: ["error", { "argsIgnorePattern": ".*" }], */ -const Setting = require('lib/models/Setting').default; +const Setting = require('../../models/Setting').default; export default class InteropService_Exporter_Base { private context_:any = {}; diff --git a/ReactNativeClient/lib/services/interop/InteropService_Exporter_Custom.ts b/packages/lib/services/interop/InteropService_Exporter_Custom.ts similarity index 100% rename from ReactNativeClient/lib/services/interop/InteropService_Exporter_Custom.ts rename to packages/lib/services/interop/InteropService_Exporter_Custom.ts diff --git a/ReactNativeClient/lib/services/interop/InteropService_Exporter_Html.ts b/packages/lib/services/interop/InteropService_Exporter_Html.ts similarity index 86% rename from ReactNativeClient/lib/services/interop/InteropService_Exporter_Html.ts rename to packages/lib/services/interop/InteropService_Exporter_Html.ts index d4d173183f..5e45e85211 100644 --- a/ReactNativeClient/lib/services/interop/InteropService_Exporter_Html.ts +++ b/packages/lib/services/interop/InteropService_Exporter_Html.ts @@ -1,15 +1,15 @@ -const InteropService_Exporter_Base = require('lib/services/interop/InteropService_Exporter_Base').default; -const { basename, friendlySafeFilename, rtrimSlashes } = require('lib/path-utils'); -const BaseModel = require('lib/BaseModel'); -const Folder = require('lib/models/Folder'); -const Note = require('lib/models/Note'); -const Setting = require('lib/models/Setting').default; -const shim = require('lib/shim').default; -const { themeStyle } = require('lib/theme'); -const { dirname } = require('lib/path-utils'); -const { escapeHtml } = require('lib/string-utils.js'); -const markupLanguageUtils = require('lib/markupLanguageUtils').default; -const { assetsToHeaders } = require('lib/joplin-renderer'); +const InteropService_Exporter_Base = require('./InteropService_Exporter_Base').default; +const { basename, friendlySafeFilename, rtrimSlashes } = require('../../path-utils'); +const BaseModel = require('../../BaseModel').default; +const Folder = require('../../models/Folder'); +const Note = require('../../models/Note'); +const Setting = require('../../models/Setting').default; +const shim = require('../../shim').default; +const { themeStyle } = require('../../theme'); +const { dirname } = require('../../path-utils'); +const { escapeHtml } = require('../../string-utils.js'); +const markupLanguageUtils = require('../../markupLanguageUtils').default; +const { assetsToHeaders } = require('@joplinapp/renderer'); export default class InteropService_Exporter_Html extends InteropService_Exporter_Base { diff --git a/ReactNativeClient/lib/services/interop/InteropService_Exporter_Jex.ts b/packages/lib/services/interop/InteropService_Exporter_Jex.ts similarity index 79% rename from ReactNativeClient/lib/services/interop/InteropService_Exporter_Jex.ts rename to packages/lib/services/interop/InteropService_Exporter_Jex.ts index 6f13bcdb2a..bd3c28800c 100644 --- a/ReactNativeClient/lib/services/interop/InteropService_Exporter_Jex.ts +++ b/packages/lib/services/interop/InteropService_Exporter_Jex.ts @@ -1,8 +1,8 @@ -import { _ } from 'lib/locale'; -const InteropService_Exporter_Base = require('lib/services/interop/InteropService_Exporter_Base').default; -const InteropService_Exporter_Raw = require('lib/services/interop/InteropService_Exporter_Raw').default; +import { _ } from '../../locale'; +const InteropService_Exporter_Base = require('./InteropService_Exporter_Base').default; +const InteropService_Exporter_Raw = require('./InteropService_Exporter_Raw').default; const fs = require('fs-extra'); -const shim = require('lib/shim').default; +const shim = require('../../shim').default; export default class InteropService_Exporter_Jex extends InteropService_Exporter_Base { async init(destPath:string) { diff --git a/ReactNativeClient/lib/services/interop/InteropService_Exporter_Md.ts b/packages/lib/services/interop/InteropService_Exporter_Md.ts similarity index 91% rename from ReactNativeClient/lib/services/interop/InteropService_Exporter_Md.ts rename to packages/lib/services/interop/InteropService_Exporter_Md.ts index 5dc4c3a72f..6f3a6ed84a 100644 --- a/ReactNativeClient/lib/services/interop/InteropService_Exporter_Md.ts +++ b/packages/lib/services/interop/InteropService_Exporter_Md.ts @@ -1,10 +1,10 @@ -const InteropService_Exporter_Base = require('lib/services/interop/InteropService_Exporter_Base').default; -const { basename, dirname, friendlySafeFilename } = require('lib/path-utils'); -const BaseModel = require('lib/BaseModel'); -const Folder = require('lib/models/Folder'); -const Note = require('lib/models/Note'); -const shim = require('lib/shim').default; -const markdownUtils = require('lib/markdownUtils').default; +const InteropService_Exporter_Base = require('./InteropService_Exporter_Base').default; +const { basename, dirname, friendlySafeFilename } = require('../../path-utils'); +const BaseModel = require('../../BaseModel').default; +const Folder = require('../../models/Folder'); +const Note = require('../../models/Note'); +const shim = require('../../shim').default; +const markdownUtils = require('../../markdownUtils').default; export default class InteropService_Exporter_Md extends InteropService_Exporter_Base { async init(destDir:string) { diff --git a/ReactNativeClient/lib/services/interop/InteropService_Exporter_Raw.ts b/packages/lib/services/interop/InteropService_Exporter_Raw.ts similarity index 76% rename from ReactNativeClient/lib/services/interop/InteropService_Exporter_Raw.ts rename to packages/lib/services/interop/InteropService_Exporter_Raw.ts index 6ee96313f9..4e178172e3 100644 --- a/ReactNativeClient/lib/services/interop/InteropService_Exporter_Raw.ts +++ b/packages/lib/services/interop/InteropService_Exporter_Raw.ts @@ -1,7 +1,7 @@ -const InteropService_Exporter_Base = require('lib/services/interop/InteropService_Exporter_Base').default; -const BaseItem = require('lib/models/BaseItem.js'); -const { basename } = require('lib/path-utils'); -const shim = require('lib/shim').default; +const InteropService_Exporter_Base = require('./InteropService_Exporter_Base').default; +const BaseItem = require('../../models/BaseItem.js'); +const { basename } = require('../../path-utils'); +const shim = require('../../shim').default; export default class InteropService_Exporter_Raw extends InteropService_Exporter_Base { async init(destDir:string) { diff --git a/ReactNativeClient/lib/services/interop/InteropService_Importer_Base.ts b/packages/lib/services/interop/InteropService_Importer_Base.ts similarity index 93% rename from ReactNativeClient/lib/services/interop/InteropService_Importer_Base.ts rename to packages/lib/services/interop/InteropService_Importer_Base.ts index a93d608eae..6220e50c30 100644 --- a/ReactNativeClient/lib/services/interop/InteropService_Importer_Base.ts +++ b/packages/lib/services/interop/InteropService_Importer_Base.ts @@ -2,7 +2,7 @@ import { ImportExportResult } from './types'; -const Setting = require('lib/models/Setting').default; +const Setting = require('../../models/Setting').default; export default class InteropService_Importer_Base { private metadata_:any = null; diff --git a/ReactNativeClient/lib/services/interop/InteropService_Importer_Custom.ts b/packages/lib/services/interop/InteropService_Importer_Custom.ts similarity index 100% rename from ReactNativeClient/lib/services/interop/InteropService_Importer_Custom.ts rename to packages/lib/services/interop/InteropService_Importer_Custom.ts diff --git a/ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToHtml.ts b/packages/lib/services/interop/InteropService_Importer_EnexToHtml.ts similarity index 66% rename from ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToHtml.ts rename to packages/lib/services/interop/InteropService_Importer_EnexToHtml.ts index fb6abfa9d5..6d1ae75f74 100644 --- a/ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToHtml.ts +++ b/packages/lib/services/interop/InteropService_Importer_EnexToHtml.ts @@ -1,12 +1,12 @@ import { ImportExportResult } from './types'; -const InteropService_Importer_Base = require('lib/services/interop/InteropService_Importer_Base').default; -const Folder = require('lib/models/Folder.js'); -const { filename } = require('lib/path-utils'); +const InteropService_Importer_Base = require('./InteropService_Importer_Base').default; +const Folder = require('../../models/Folder.js'); +const { filename } = require('../../path-utils'); export default class InteropService_Importer_EnexToHtml extends InteropService_Importer_Base { async exec(result:ImportExportResult) { - const { importEnex } = require('lib/import-enex'); + const { importEnex } = require('../../import-enex'); let folder = this.options_.destinationFolder; diff --git a/ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToMd.ts b/packages/lib/services/interop/InteropService_Importer_EnexToMd.ts similarity index 65% rename from ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToMd.ts rename to packages/lib/services/interop/InteropService_Importer_EnexToMd.ts index 4200a6b058..e3f234115c 100644 --- a/ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToMd.ts +++ b/packages/lib/services/interop/InteropService_Importer_EnexToMd.ts @@ -1,12 +1,12 @@ import { ImportExportResult } from './types'; -const InteropService_Importer_Base = require('lib/services/interop/InteropService_Importer_Base').default; -const Folder = require('lib/models/Folder.js'); -const { filename } = require('lib/path-utils'); +const InteropService_Importer_Base = require('./InteropService_Importer_Base').default; +const Folder = require('../../models/Folder.js'); +const { filename } = require('../../path-utils'); export default class InteropService_Importer_EnexToMd extends InteropService_Importer_Base { async exec(result:ImportExportResult) { - const { importEnex } = require('lib/import-enex'); + const { importEnex } = require('../../import-enex'); let folder = this.options_.destinationFolder; diff --git a/ReactNativeClient/lib/services/interop/InteropService_Importer_Jex.ts b/packages/lib/services/interop/InteropService_Importer_Jex.ts similarity index 77% rename from ReactNativeClient/lib/services/interop/InteropService_Importer_Jex.ts rename to packages/lib/services/interop/InteropService_Importer_Jex.ts index 362959d4b3..d5374d97b1 100644 --- a/ReactNativeClient/lib/services/interop/InteropService_Importer_Jex.ts +++ b/packages/lib/services/interop/InteropService_Importer_Jex.ts @@ -1,8 +1,8 @@ import { ImportExportResult } from './types'; -const InteropService_Importer_Base = require('lib/services/interop/InteropService_Importer_Base').default; -const InteropService_Importer_Raw = require('lib/services/interop/InteropService_Importer_Raw').default; -const { filename } = require('lib/path-utils'); +const InteropService_Importer_Base = require('./InteropService_Importer_Base').default; +const InteropService_Importer_Raw = require('./InteropService_Importer_Raw').default; +const { filename } = require('../../path-utils'); const fs = require('fs-extra'); export default class InteropService_Importer_Jex extends InteropService_Importer_Base { diff --git a/ReactNativeClient/lib/services/interop/InteropService_Importer_Md.ts b/packages/lib/services/interop/InteropService_Importer_Md.ts similarity index 87% rename from ReactNativeClient/lib/services/interop/InteropService_Importer_Md.ts rename to packages/lib/services/interop/InteropService_Importer_Md.ts index 11409ce546..3024721afb 100644 --- a/ReactNativeClient/lib/services/interop/InteropService_Importer_Md.ts +++ b/packages/lib/services/interop/InteropService_Importer_Md.ts @@ -1,15 +1,15 @@ import { ImportExportResult } from './types'; -import { _ } from 'lib/locale'; +import { _ } from '../../locale'; -const InteropService_Importer_Base = require('lib/services/interop/InteropService_Importer_Base').default; -const Folder = require('lib/models/Folder.js'); -const Note = require('lib/models/Note.js'); -const { basename, filename, rtrimSlashes, fileExtension, dirname } = require('lib/path-utils'); -const shim = require('lib/shim').default; -const { extractImageUrls } = require('lib/markdownUtils').default; -const { unique } = require('lib/ArrayUtils'); -const { pregQuote } = require('lib/string-utils-common'); -const { MarkupToHtml } = require('lib/joplin-renderer'); +const InteropService_Importer_Base = require('./InteropService_Importer_Base').default; +const Folder = require('../../models/Folder.js'); +const Note = require('../../models/Note.js'); +const { basename, filename, rtrimSlashes, fileExtension, dirname } = require('../../path-utils'); +const shim = require('../../shim').default; +const { extractImageUrls } = require('../../markdownUtils').default; +const { unique } = require('../../ArrayUtils'); +const { pregQuote } = require('../../string-utils-common'); +const { MarkupToHtml } = require('@joplinapp/renderer'); export default class InteropService_Importer_Md extends InteropService_Importer_Base { async exec(result:ImportExportResult) { diff --git a/ReactNativeClient/lib/services/interop/InteropService_Importer_Raw.ts b/packages/lib/services/interop/InteropService_Importer_Raw.ts similarity index 90% rename from ReactNativeClient/lib/services/interop/InteropService_Importer_Raw.ts rename to packages/lib/services/interop/InteropService_Importer_Raw.ts index d6a3fe03aa..973f60fcd5 100644 --- a/ReactNativeClient/lib/services/interop/InteropService_Importer_Raw.ts +++ b/packages/lib/services/interop/InteropService_Importer_Raw.ts @@ -1,17 +1,17 @@ import { ImportExportResult } from './types'; -const InteropService_Importer_Base = require('lib/services/interop/InteropService_Importer_Base').default; -const BaseItem = require('lib/models/BaseItem.js'); -const BaseModel = require('lib/BaseModel.js'); -const Resource = require('lib/models/Resource.js'); -const Folder = require('lib/models/Folder.js'); -const NoteTag = require('lib/models/NoteTag.js'); -const Note = require('lib/models/Note.js'); -const Tag = require('lib/models/Tag.js'); +const InteropService_Importer_Base = require('./InteropService_Importer_Base').default; +const BaseItem = require('../../models/BaseItem.js'); +const BaseModel = require('../../BaseModel').default; +const Resource = require('../../models/Resource.js'); +const Folder = require('../../models/Folder.js'); +const NoteTag = require('../../models/NoteTag.js'); +const Note = require('../../models/Note.js'); +const Tag = require('../../models/Tag.js'); const { sprintf } = require('sprintf-js'); -const shim = require('lib/shim').default; -const { fileExtension } = require('lib/path-utils'); -const uuid = require('lib/uuid').default; +const shim = require('../../shim').default; +const { fileExtension } = require('../../path-utils'); +const uuid = require('../../uuid').default; export default class InteropService_Importer_Raw extends InteropService_Importer_Base { async exec(result:ImportExportResult) { diff --git a/ReactNativeClient/lib/services/interop/types.ts b/packages/lib/services/interop/types.ts similarity index 98% rename from ReactNativeClient/lib/services/interop/types.ts rename to packages/lib/services/interop/types.ts index 75c7326396..10e41a1bac 100644 --- a/ReactNativeClient/lib/services/interop/types.ts +++ b/packages/lib/services/interop/types.ts @@ -1,4 +1,4 @@ -import { _ } from 'lib/locale'; +import { _ } from '../../locale'; export interface CustomImportContext { sourcePath: string, diff --git a/ReactNativeClient/lib/services/keychain/KeychainService.ts b/packages/lib/services/keychain/KeychainService.ts similarity index 95% rename from ReactNativeClient/lib/services/keychain/KeychainService.ts rename to packages/lib/services/keychain/KeychainService.ts index 17bad98b0e..02a41ba12c 100644 --- a/ReactNativeClient/lib/services/keychain/KeychainService.ts +++ b/packages/lib/services/keychain/KeychainService.ts @@ -1,6 +1,6 @@ import KeychainServiceDriverBase from './KeychainServiceDriverBase'; -const Setting = require('lib/models/Setting').default; -const BaseService = require('lib/services/BaseService').default; +const Setting = require('../../models/Setting').default; +const BaseService = require('../BaseService').default; export default class KeychainService extends BaseService { diff --git a/ReactNativeClient/lib/services/keychain/KeychainServiceDriver.dummy.ts b/packages/lib/services/keychain/KeychainServiceDriver.dummy.ts similarity index 100% rename from ReactNativeClient/lib/services/keychain/KeychainServiceDriver.dummy.ts rename to packages/lib/services/keychain/KeychainServiceDriver.dummy.ts diff --git a/ReactNativeClient/lib/services/keychain/KeychainServiceDriver.mobile.ts b/packages/lib/services/keychain/KeychainServiceDriver.mobile.ts similarity index 100% rename from ReactNativeClient/lib/services/keychain/KeychainServiceDriver.mobile.ts rename to packages/lib/services/keychain/KeychainServiceDriver.mobile.ts diff --git a/packages/lib/services/keychain/KeychainServiceDriver.node.ts b/packages/lib/services/keychain/KeychainServiceDriver.node.ts new file mode 100644 index 0000000000..5b229bc216 --- /dev/null +++ b/packages/lib/services/keychain/KeychainServiceDriver.node.ts @@ -0,0 +1,22 @@ +import KeychainServiceDriverBase from './KeychainServiceDriverBase'; +import shim from '../../shim'; + +export default class KeychainServiceDriver extends KeychainServiceDriverBase { + + async setPassword(name:string, password:string):Promise { + if (!shim.keytar()) return false; + await shim.keytar().setPassword(`${this.appId}.${name}`, `${this.clientId}@joplin`, password); + return true; + } + + async password(name:string):Promise { + if (!shim.keytar()) return null; + return shim.keytar().getPassword(`${this.appId}.${name}`, `${this.clientId}@joplin`); + } + + async deletePassword(name:string):Promise { + if (!shim.keytar()) return; + await shim.keytar().deletePassword(`${this.appId}.${name}`, `${this.clientId}@joplin`); + } + +} diff --git a/ReactNativeClient/lib/services/keychain/KeychainServiceDriverBase.ts b/packages/lib/services/keychain/KeychainServiceDriverBase.ts similarity index 100% rename from ReactNativeClient/lib/services/keychain/KeychainServiceDriverBase.ts rename to packages/lib/services/keychain/KeychainServiceDriverBase.ts diff --git a/ReactNativeClient/lib/services/plugins/BasePluginRunner.ts b/packages/lib/services/plugins/BasePluginRunner.ts similarity index 100% rename from ReactNativeClient/lib/services/plugins/BasePluginRunner.ts rename to packages/lib/services/plugins/BasePluginRunner.ts diff --git a/ReactNativeClient/lib/services/plugins/MenuController.ts b/packages/lib/services/plugins/MenuController.ts similarity index 100% rename from ReactNativeClient/lib/services/plugins/MenuController.ts rename to packages/lib/services/plugins/MenuController.ts diff --git a/ReactNativeClient/lib/services/plugins/MenuItemController.ts b/packages/lib/services/plugins/MenuItemController.ts similarity index 100% rename from ReactNativeClient/lib/services/plugins/MenuItemController.ts rename to packages/lib/services/plugins/MenuItemController.ts diff --git a/ReactNativeClient/lib/services/plugins/Plugin.ts b/packages/lib/services/plugins/Plugin.ts similarity index 97% rename from ReactNativeClient/lib/services/plugins/Plugin.ts rename to packages/lib/services/plugins/Plugin.ts index f7cf32f67f..a297b6731f 100644 --- a/ReactNativeClient/lib/services/plugins/Plugin.ts +++ b/packages/lib/services/plugins/Plugin.ts @@ -1,9 +1,9 @@ import { PluginManifest } from './utils/types'; import ViewController from './ViewController'; -import shim from 'lib/shim'; +import shim from '../../shim'; import { ViewHandle } from './utils/createViewHandle'; import { ContentScriptType } from './api/types'; -import Logger from 'lib/Logger'; +import Logger from '../../Logger'; const EventEmitter = require('events'); interface ViewControllers { diff --git a/ReactNativeClient/lib/services/plugins/PluginService.ts b/packages/lib/services/plugins/PluginService.ts similarity index 93% rename from ReactNativeClient/lib/services/plugins/PluginService.ts rename to packages/lib/services/plugins/PluginService.ts index 226b55bd9d..60808c8ca7 100644 --- a/ReactNativeClient/lib/services/plugins/PluginService.ts +++ b/packages/lib/services/plugins/PluginService.ts @@ -1,10 +1,10 @@ -import Plugin from 'lib/services/plugins/Plugin'; -import manifestFromObject from 'lib/services/plugins/utils/manifestFromObject'; -import Global from 'lib/services/plugins/api/Global'; -import BasePluginRunner from 'lib/services/plugins/BasePluginRunner'; +import Plugin from './Plugin'; +import manifestFromObject from './utils/manifestFromObject'; +import Global from './api/Global'; +import BasePluginRunner from './BasePluginRunner'; import BaseService from '../BaseService'; -import shim from 'lib/shim'; -const { filename, dirname } = require('lib/path-utils'); +import shim from '../../shim'; +const { filename, dirname } = require('../../path-utils'); const uslug = require('uslug'); interface Plugins { diff --git a/ReactNativeClient/lib/services/plugins/ToolbarButtonController.ts b/packages/lib/services/plugins/ToolbarButtonController.ts similarity index 100% rename from ReactNativeClient/lib/services/plugins/ToolbarButtonController.ts rename to packages/lib/services/plugins/ToolbarButtonController.ts diff --git a/ReactNativeClient/lib/services/plugins/ViewController.ts b/packages/lib/services/plugins/ViewController.ts similarity index 100% rename from ReactNativeClient/lib/services/plugins/ViewController.ts rename to packages/lib/services/plugins/ViewController.ts diff --git a/ReactNativeClient/lib/services/plugins/WebviewController.ts b/packages/lib/services/plugins/WebviewController.ts similarity index 96% rename from ReactNativeClient/lib/services/plugins/WebviewController.ts rename to packages/lib/services/plugins/WebviewController.ts index ff9b2d11f8..d5936fa21f 100644 --- a/ReactNativeClient/lib/services/plugins/WebviewController.ts +++ b/packages/lib/services/plugins/WebviewController.ts @@ -1,7 +1,7 @@ import ViewController from './ViewController'; -import shim from 'lib/shim'; +import shim from '../../shim'; import { ButtonId, ButtonSpec } from './api/types'; -const { toSystemSlashes } = require('lib/path-utils'); +const { toSystemSlashes } = require('../../path-utils'); export enum ContainerType { Panel = 'panel', diff --git a/ReactNativeClient/lib/services/plugins/api/Global.ts b/packages/lib/services/plugins/api/Global.ts similarity index 98% rename from ReactNativeClient/lib/services/plugins/api/Global.ts rename to packages/lib/services/plugins/api/Global.ts index 267d7f67e0..6e899ce736 100644 --- a/ReactNativeClient/lib/services/plugins/api/Global.ts +++ b/packages/lib/services/plugins/api/Global.ts @@ -1,6 +1,6 @@ import Plugin from '../Plugin'; import Joplin from './Joplin'; -import Logger from 'lib/Logger'; +import Logger from '../../../Logger'; /** * @ignore diff --git a/ReactNativeClient/lib/services/plugins/api/Joplin.ts b/packages/lib/services/plugins/api/Joplin.ts similarity index 98% rename from ReactNativeClient/lib/services/plugins/api/Joplin.ts rename to packages/lib/services/plugins/api/Joplin.ts index 1156739b6a..a8006be133 100644 --- a/ReactNativeClient/lib/services/plugins/api/Joplin.ts +++ b/packages/lib/services/plugins/api/Joplin.ts @@ -7,7 +7,7 @@ import JoplinCommands from './JoplinCommands'; import JoplinViews from './JoplinViews'; import JoplinInterop from './JoplinInterop'; import JoplinSettings from './JoplinSettings'; -import Logger from 'lib/Logger'; +import Logger from '../../../Logger'; /** * This is the main entry point to the Joplin API. You can access various services using the provided accessors. diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinCommands.ts b/packages/lib/services/plugins/api/JoplinCommands.ts similarity index 91% rename from ReactNativeClient/lib/services/plugins/api/JoplinCommands.ts rename to packages/lib/services/plugins/api/JoplinCommands.ts index 8248014671..93d5c34cfa 100644 --- a/ReactNativeClient/lib/services/plugins/api/JoplinCommands.ts +++ b/packages/lib/services/plugins/api/JoplinCommands.ts @@ -1,4 +1,4 @@ -import CommandService, { CommandContext, CommandDeclaration, CommandRuntime } from 'lib/services/CommandService'; +import CommandService, { CommandContext, CommandDeclaration, CommandRuntime } from '../../CommandService'; import { Command } from './types'; /** @@ -7,7 +7,7 @@ import { Command } from './types'; * {@link JoplinViewsToolbarButtons | toolbar buttons} or * {@link JoplinViewsMenuItems | menu items}. * - * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command) + * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/register_command) * * ## Executing Joplin's internal commands * @@ -15,9 +15,9 @@ import { Command } from './types'; * now, are not well documented. You can find the list directly on GitHub * though at the following locations: * - * * [Main screen commands](https://github.com/laurent22/joplin/tree/dev/ElectronClient/gui/MainScreen/commands) - * * [Global commands](https://github.com/laurent22/joplin/tree/dev/ElectronClient/commands) - * * [Editor commands](https://github.com/laurent22/joplin/tree/dev/ElectronClient/gui/NoteEditor/commands/editorCommandDeclarations.ts) + * * [Main screen commands](https://github.com/laurent22/joplin/tree/dev/packages/app-desktop/gui/MainScreen/commands) + * * [Global commands](https://github.com/laurent22/joplin/tree/dev/packages/app-desktop/commands) + * * [Editor commands](https://github.com/laurent22/joplin/tree/dev/packages/app-desktop/gui/NoteEditor/commands/editorCommandDeclarations.ts) * * To view what arguments are supported, you can open any of these files * and look at the `execute()` command. diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinData.ts b/packages/lib/services/plugins/api/JoplinData.ts similarity index 97% rename from ReactNativeClient/lib/services/plugins/api/JoplinData.ts rename to packages/lib/services/plugins/api/JoplinData.ts index 517d80ad10..91f77cfa34 100644 --- a/ReactNativeClient/lib/services/plugins/api/JoplinData.ts +++ b/packages/lib/services/plugins/api/JoplinData.ts @@ -1,4 +1,4 @@ -import Api from 'lib/services/rest/Api'; +import Api from '../../rest/Api'; import { Path } from './types'; /** @@ -8,7 +8,7 @@ import { Path } from './types'; * * This is also what you would use to search notes, via the `search` endpoint. * - * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/simple) + * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/simple) * * In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls. * And each method takes these parameters: diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinFilters.ts b/packages/lib/services/plugins/api/JoplinFilters.ts similarity index 86% rename from ReactNativeClient/lib/services/plugins/api/JoplinFilters.ts rename to packages/lib/services/plugins/api/JoplinFilters.ts index fb094916ff..bda0a32c0d 100644 --- a/ReactNativeClient/lib/services/plugins/api/JoplinFilters.ts +++ b/packages/lib/services/plugins/api/JoplinFilters.ts @@ -1,4 +1,4 @@ -import eventManager from 'lib/eventManager'; +import eventManager from '../../../eventManager'; /** * @ignore diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinInterop.ts b/packages/lib/services/plugins/api/JoplinInterop.ts similarity index 87% rename from ReactNativeClient/lib/services/plugins/api/JoplinInterop.ts rename to packages/lib/services/plugins/api/JoplinInterop.ts index e694853e48..50c183f1ee 100644 --- a/ReactNativeClient/lib/services/plugins/api/JoplinInterop.ts +++ b/packages/lib/services/plugins/api/JoplinInterop.ts @@ -1,11 +1,11 @@ -import InteropService from 'lib/services/interop/InteropService'; -import { Module, ModuleType } from 'lib/services/interop/types'; +import InteropService from '../../interop/InteropService'; +import { Module, ModuleType } from '../../interop/types'; import { ExportModule, ImportModule } from './types'; /** * Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format. * - * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export) + * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/json_export) * * To implement an import or export module, you would simply define an object with various event handlers that are called * by the application during the import/export process. diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinPlugins.ts b/packages/lib/services/plugins/api/JoplinPlugins.ts similarity index 96% rename from ReactNativeClient/lib/services/plugins/api/JoplinPlugins.ts rename to packages/lib/services/plugins/api/JoplinPlugins.ts index 116fcdaf6f..0bf4e487bf 100644 --- a/ReactNativeClient/lib/services/plugins/api/JoplinPlugins.ts +++ b/packages/lib/services/plugins/api/JoplinPlugins.ts @@ -1,5 +1,5 @@ import Plugin from '../Plugin'; -import Logger from 'lib/Logger'; +import Logger from '../../../Logger'; import { ContentScriptType, Script } from './types'; /** @@ -57,7 +57,7 @@ export default class JoplinPlugins { * Note that registering a content script in itself will do nothing - it will only be loaded in specific cases by the relevant app modules * (eg. the Markdown renderer or the code editor). So it is not a way to inject and run arbitrary code in the app, which for safety and performance reasons is not supported. * - * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/content_script) + * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/content_script) * * @param type Defines how the script will be used. See the type definition for more information about each supported type. * @param id A unique ID for the content script. diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinSettings.ts b/packages/lib/services/plugins/api/JoplinSettings.ts similarity index 94% rename from ReactNativeClient/lib/services/plugins/api/JoplinSettings.ts rename to packages/lib/services/plugins/api/JoplinSettings.ts index f72fd21771..d543e7301e 100644 --- a/ReactNativeClient/lib/services/plugins/api/JoplinSettings.ts +++ b/packages/lib/services/plugins/api/JoplinSettings.ts @@ -1,4 +1,4 @@ -import Setting, { SettingItem as InternalSettingItem } from 'lib/models/Setting'; +import Setting, { SettingItem as InternalSettingItem } from '../../../models/Setting'; import Plugin from '../Plugin'; import { SettingItem, SettingSection } from './types'; @@ -9,7 +9,7 @@ import { SettingItem, SettingSection } from './types'; * * Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results * - * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/settings) + * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/settings) */ export default class JoplinSettings { private plugin_:Plugin = null; @@ -79,7 +79,7 @@ export default class JoplinSettings { * * The list of available settings is not documented yet, but can be found by looking at the source code: * - * https://github.com/laurent22/joplin/blob/3539a452a359162c461d2849829d2d42973eab50/ReactNativeClient/lib/models/Setting.ts#L142 + * https://github.com/laurent22/joplin/blob/3539a452a359162c461d2849829d2d42973eab50/packages/app-mobile/lib/models/Setting.ts#L142 */ async globalValue(key:string):Promise { return Setting.value(key); diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinUtils.js b/packages/lib/services/plugins/api/JoplinUtils.js similarity index 100% rename from ReactNativeClient/lib/services/plugins/api/JoplinUtils.js rename to packages/lib/services/plugins/api/JoplinUtils.js diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinViews.ts b/packages/lib/services/plugins/api/JoplinViews.ts similarity index 100% rename from ReactNativeClient/lib/services/plugins/api/JoplinViews.ts rename to packages/lib/services/plugins/api/JoplinViews.ts diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.ts b/packages/lib/services/plugins/api/JoplinViewsDialogs.ts similarity index 97% rename from ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.ts rename to packages/lib/services/plugins/api/JoplinViewsDialogs.ts index 873e7bcaa5..37551e97f2 100644 --- a/ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.ts +++ b/packages/lib/services/plugins/api/JoplinViewsDialogs.ts @@ -8,7 +8,7 @@ import { ButtonSpec, ViewHandle, ButtonId } from './types'; * Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was * clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons. * - * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/dialog) + * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/dialog) */ export default class JoplinViewsDialogs { diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.ts b/packages/lib/services/plugins/api/JoplinViewsMenuItems.ts similarity index 91% rename from ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.ts rename to packages/lib/services/plugins/api/JoplinViewsMenuItems.ts index cfe8c85062..f213d135ed 100644 --- a/ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.ts +++ b/packages/lib/services/plugins/api/JoplinViewsMenuItems.ts @@ -1,4 +1,4 @@ -import KeymapService from 'lib/services/KeymapService'; +import KeymapService from '../../KeymapService'; import { CreateMenuItemOptions, MenuItemLocation } from './types'; import MenuItemController from '../MenuItemController'; import Plugin from '../Plugin'; @@ -7,7 +7,7 @@ import createViewHandle from '../utils/createViewHandle'; /** * Allows creating and managing menu items. * - * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command) + * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/register_command) */ export default class JoplinViewsMenuItems { diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinViewsMenus.ts b/packages/lib/services/plugins/api/JoplinViewsMenus.ts similarity index 93% rename from ReactNativeClient/lib/services/plugins/api/JoplinViewsMenus.ts rename to packages/lib/services/plugins/api/JoplinViewsMenus.ts index 04ba930631..6c1df9ef51 100644 --- a/ReactNativeClient/lib/services/plugins/api/JoplinViewsMenus.ts +++ b/packages/lib/services/plugins/api/JoplinViewsMenus.ts @@ -1,4 +1,4 @@ -import KeymapService from 'lib/services/KeymapService'; +import KeymapService from '../../KeymapService'; import { MenuItem, MenuItemLocation } from './types'; import MenuController from '../MenuController'; import Plugin from '../Plugin'; @@ -7,7 +7,7 @@ import createViewHandle from '../utils/createViewHandle'; /** * Allows creating menus. * - * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/menu) + * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/menu) */ export default class JoplinViewsMenus { diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.ts b/packages/lib/services/plugins/api/JoplinViewsPanels.ts similarity index 97% rename from ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.ts rename to packages/lib/services/plugins/api/JoplinViewsPanels.ts index 355a0e30c3..2f69eb25ea 100644 --- a/ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.ts +++ b/packages/lib/services/plugins/api/JoplinViewsPanels.ts @@ -7,7 +7,7 @@ import { ViewHandle } from './types'; * Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example * it could be used to display a table of content for the active note, or display various metadata or graph. * - * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/toc) + * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/toc) */ export default class JoplinViewsPanels { diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.ts b/packages/lib/services/plugins/api/JoplinViewsToolbarButtons.ts similarity index 93% rename from ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.ts rename to packages/lib/services/plugins/api/JoplinViewsToolbarButtons.ts index c8d04fcb88..60e34b205e 100644 --- a/ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.ts +++ b/packages/lib/services/plugins/api/JoplinViewsToolbarButtons.ts @@ -6,7 +6,7 @@ import createViewHandle from '../utils/createViewHandle'; /** * Allows creating and managing toolbar buttons. * - * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command) + * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/register_command) */ export default class JoplinViewsToolbarButtons { diff --git a/ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.ts b/packages/lib/services/plugins/api/JoplinWorkspace.ts similarity index 92% rename from ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.ts rename to packages/lib/services/plugins/api/JoplinWorkspace.ts index 79a2e4e95f..2411d04f04 100644 --- a/ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.ts +++ b/packages/lib/services/plugins/api/JoplinWorkspace.ts @@ -1,15 +1,15 @@ -import eventManager from 'lib/eventManager'; +import eventManager from '../../../eventManager'; /** * @ignore */ -const Note = require('lib/models/Note'); +const Note = require('../../../models/Note'); /** * The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well * as various related events, such as when a new note is selected, or when the note content changes. * - * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins) + * [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins) */ export default class JoplinWorkspace { // TODO: unregister events when plugin is closed or disabled diff --git a/ReactNativeClient/lib/services/plugins/api/types.ts b/packages/lib/services/plugins/api/types.ts similarity index 95% rename from ReactNativeClient/lib/services/plugins/api/types.ts rename to packages/lib/services/plugins/api/types.ts index 33449f733c..82433620b9 100644 --- a/ReactNativeClient/lib/services/plugins/api/types.ts +++ b/packages/lib/services/plugins/api/types.ts @@ -40,7 +40,7 @@ export interface Command { * Or | \|\| | "noteIsTodo \|\| noteTodoCompleted" * And | && | "oneNoteSelected && !inConflictFolder" * - * Currently the supported context variables aren't documented, but you can [find the list here](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/services/commands/stateToWhenClauseContext.ts). + * Currently the supported context variables aren't documented, but you can [find the list here](https://github.com/laurent22/joplin/blob/dev/packages/app-mobile/lib/services/commands/stateToWhenClauseContext.ts). * * Note: Commands are enabled by default unless you use this property. */ @@ -62,7 +62,7 @@ export enum ImportModuleOutputFormat { } /** - * Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export) for an example. + * Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/json_export) for an example. * * In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported. * @@ -339,9 +339,9 @@ export enum ContentScriptType { * * - The `context` argument is currently unused but could be used later on to provide access to your own plugin so that the content script and plugin can communicate. * - * - The **required** `plugin` key is the actual Markdown-It plugin - check the [official doc](https://github.com/markdown-it/markdown-it) for more information. The `options` parameter is of type [RuleOptions](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml.ts), which contains a number of options, mostly useful for Joplin's internal code. + * - The **required** `plugin` key is the actual Markdown-It plugin - check the [official doc](https://github.com/markdown-it/markdown-it) for more information. The `options` parameter is of type [RuleOptions](https://github.com/laurent22/joplin/blob/dev/packages/app-mobile/lib/joplin-renderer/MdToHtml.ts), which contains a number of options, mostly useful for Joplin's internal code. * - * - Using the **optional** `assets` key you may specify assets such as JS or CSS that should be loaded in the rendered HTML document. Check for example the Joplin [Mermaid plugin](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.ts) to see how the data should be structured. + * - Using the **optional** `assets` key you may specify assets such as JS or CSS that should be loaded in the rendered HTML document. Check for example the Joplin [Mermaid plugin](https://github.com/laurent22/joplin/blob/dev/packages/app-mobile/lib/joplin-renderer/MdToHtml/rules/mermaid.ts) to see how the data should be structured. * * To include a regular Markdown-It plugin, that doesn't make use of any Joplin-specific features, you would simply create a file such as this: * diff --git a/ReactNativeClient/lib/services/plugins/reducer.ts b/packages/lib/services/plugins/reducer.ts similarity index 100% rename from ReactNativeClient/lib/services/plugins/reducer.ts rename to packages/lib/services/plugins/reducer.ts diff --git a/ReactNativeClient/lib/services/plugins/sandboxProxy.ts b/packages/lib/services/plugins/sandboxProxy.ts similarity index 100% rename from ReactNativeClient/lib/services/plugins/sandboxProxy.ts rename to packages/lib/services/plugins/sandboxProxy.ts diff --git a/ReactNativeClient/lib/services/plugins/utils/contentScriptsToRendererRules.ts b/packages/lib/services/plugins/utils/contentScriptsToRendererRules.ts similarity index 94% rename from ReactNativeClient/lib/services/plugins/utils/contentScriptsToRendererRules.ts rename to packages/lib/services/plugins/utils/contentScriptsToRendererRules.ts index 207a945b6b..d21095e8f0 100644 --- a/ReactNativeClient/lib/services/plugins/utils/contentScriptsToRendererRules.ts +++ b/packages/lib/services/plugins/utils/contentScriptsToRendererRules.ts @@ -1,5 +1,5 @@ import { PluginStates } from '../reducer'; -import { ExtraRendererRule } from 'lib/joplin-renderer/MdToHtml'; +import { ExtraRendererRule } from '@joplinapp/renderer/MdToHtml'; import { ContentScriptType } from '../api/types'; export default function contentScriptsToRendererRules(plugins:PluginStates):ExtraRendererRule[] { diff --git a/ReactNativeClient/lib/services/plugins/utils/createViewHandle.ts b/packages/lib/services/plugins/utils/createViewHandle.ts similarity index 85% rename from ReactNativeClient/lib/services/plugins/utils/createViewHandle.ts rename to packages/lib/services/plugins/utils/createViewHandle.ts index 69bf787d73..9a79c25a96 100644 --- a/ReactNativeClient/lib/services/plugins/utils/createViewHandle.ts +++ b/packages/lib/services/plugins/utils/createViewHandle.ts @@ -1,4 +1,4 @@ -import uuid from 'lib/uuid'; +import uuid from '../../../uuid'; import Plugin from '../Plugin'; export type ViewHandle = string; diff --git a/ReactNativeClient/lib/services/plugins/utils/executeSandboxCall.ts b/packages/lib/services/plugins/utils/executeSandboxCall.ts similarity index 100% rename from ReactNativeClient/lib/services/plugins/utils/executeSandboxCall.ts rename to packages/lib/services/plugins/utils/executeSandboxCall.ts diff --git a/ReactNativeClient/lib/services/plugins/utils/manifestFromObject.ts b/packages/lib/services/plugins/utils/manifestFromObject.ts similarity index 100% rename from ReactNativeClient/lib/services/plugins/utils/manifestFromObject.ts rename to packages/lib/services/plugins/utils/manifestFromObject.ts diff --git a/ReactNativeClient/lib/services/plugins/utils/mapEventHandlersToIds.ts b/packages/lib/services/plugins/utils/mapEventHandlersToIds.ts similarity index 100% rename from ReactNativeClient/lib/services/plugins/utils/mapEventHandlersToIds.ts rename to packages/lib/services/plugins/utils/mapEventHandlersToIds.ts diff --git a/ReactNativeClient/lib/services/plugins/utils/types.ts b/packages/lib/services/plugins/utils/types.ts similarity index 100% rename from ReactNativeClient/lib/services/plugins/utils/types.ts rename to packages/lib/services/plugins/utils/types.ts diff --git a/ReactNativeClient/lib/services/report.js b/packages/lib/services/report.js similarity index 93% rename from ReactNativeClient/lib/services/report.js rename to packages/lib/services/report.js index 8bb80b57d3..ecf872c631 100644 --- a/ReactNativeClient/lib/services/report.js +++ b/packages/lib/services/report.js @@ -1,14 +1,14 @@ -const { time } = require('lib/time-utils'); -const BaseItem = require('lib/models/BaseItem.js'); -const Alarm = require('lib/models/Alarm').default; -const Folder = require('lib/models/Folder.js'); -const Note = require('lib/models/Note.js'); -const BaseModel = require('lib/BaseModel.js'); -const DecryptionWorker = require('lib/services/DecryptionWorker'); -const ResourceFetcher = require('lib/services/ResourceFetcher'); -const Resource = require('lib/models/Resource'); -const { _ } = require('lib/locale'); -const { toTitleCase } = require('lib/string-utils.js'); +const time = require('../time').default; +const BaseItem = require('../models/BaseItem.js'); +const Alarm = require('../models/Alarm').default; +const Folder = require('../models/Folder.js'); +const Note = require('../models/Note.js'); +const BaseModel = require('../BaseModel').default; +const DecryptionWorker = require('./DecryptionWorker'); +const ResourceFetcher = require('./ResourceFetcher'); +const Resource = require('../models/Resource'); +const { _ } = require('../locale'); +const { toTitleCase } = require('../string-utils.js'); class ReportService { csvEscapeCell(cell) { diff --git a/packages/lib/services/rest/Api.ts b/packages/lib/services/rest/Api.ts new file mode 100644 index 0000000000..4dd42641be --- /dev/null +++ b/packages/lib/services/rest/Api.ts @@ -0,0 +1,197 @@ +import { PaginationOrderDir } from '../../models/utils/types'; +import { ErrorMethodNotAllowed, ErrorForbidden, ErrorBadRequest, ErrorNotFound } from './utils/errors'; + +import route_folders from './routes/folders'; +import route_notes from './routes/notes'; +import route_resources from './routes/resources'; +import route_tags from './routes/tags'; +import route_master_keys from './routes/master_keys'; +import route_search from './routes/search'; +import route_ping from './routes/ping'; + +const { ltrimSlashes } = require('../../path-utils'); +const md5 = require('md5'); + +export enum RequestMethod { + GET = 'GET', + POST = 'POST', + PUT = 'PUT', + DELETE = 'DELETE', +} + +interface RequestFile { + path: string, +} + +interface RequestQuery { + cursor?: string, + fields?: string[] | string, + token?: string, + nounce?: string, + + // Search engine query + query?: string, + type?: string, // Model type as a string (eg. "note", "folder") + + as_tree?: number, + + // Pagination + limit?: number, + order_dir?: PaginationOrderDir, + order_by?: string, +} + +export interface Request { + method: RequestMethod, + path: string, + query: RequestQuery, + body: any, + bodyJson_: any, + bodyJson: any, + files: RequestFile[], + params: any[], + action?: any, +} + +type RouteFunction = (request:Request, id:string, link:string) => Promise; + +interface ResourceNameToRoute { + [key:string]: RouteFunction; +} + +export default class Api { + + private token_:string | Function; + private knownNounces_:any = {}; + private actionApi_:any; + private resourceNameToRoute_:ResourceNameToRoute = {}; + + public constructor(token:string = null, actionApi:any = null) { + this.token_ = token; + this.actionApi_ = actionApi; + + this.resourceNameToRoute_ = { + ping: route_ping, + notes: route_notes, + folders: route_folders, + tags: route_tags, + resources: route_resources, + master_keys: route_master_keys, + search: route_search, + services: this.action_services.bind(this), + }; + } + + public get token() { + return typeof this.token_ === 'function' ? this.token_() : this.token_; + } + + private parsePath(path:string) { + path = ltrimSlashes(path); + if (!path) return { fn: null, params: [] }; + + const pathParts = path.split('/'); + const callSuffix = pathParts.splice(0, 1)[0]; + const fn = this.resourceNameToRoute_[callSuffix]; + + return { + fn: fn, + params: pathParts, + }; + } + + // Response can be any valid JSON object, so a string, and array or an object (key/value pairs). + public async route(method:RequestMethod, path:string, query:RequestQuery = null, body:any = null, files:RequestFile[] = null):Promise { + if (!files) files = []; + if (!query) query = {}; + + const parsedPath = this.parsePath(path); + if (!parsedPath.fn) throw new ErrorNotFound(); // Nothing at the root yet + + if (query && query.nounce) { + const requestMd5 = md5(JSON.stringify([method, path, body, query, files.length])); + if (this.knownNounces_[query.nounce] === requestMd5) { + throw new ErrorBadRequest('Duplicate Nounce'); + } + this.knownNounces_[query.nounce] = requestMd5; + } + + let id = null; + let link = null; + const params = parsedPath.params; + + if (params.length >= 1) { + id = params[0]; + params.splice(0, 1); + if (params.length >= 1) { + link = params[0]; + params.splice(0, 1); + } + } + + const request:Request = { + method, + path: ltrimSlashes(path), + query: query ? query : {}, + body, + bodyJson_: null, + bodyJson: function(disallowedProperties:string[] = null) { + if (!this.bodyJson_) this.bodyJson_ = JSON.parse(this.body); + + if (disallowedProperties) { + const filteredBody = Object.assign({}, this.bodyJson_); + for (let i = 0; i < disallowedProperties.length; i++) { + const n = disallowedProperties[i]; + delete filteredBody[n]; + } + return filteredBody; + } + + return this.bodyJson_; + }, + files, + params, + }; + + this.checkToken_(request); + + try { + return await parsedPath.fn(request, id, link); + } catch (error) { + if (!error.httpCode) error.httpCode = 500; + throw error; + } + } + + private checkToken_(request:Request) { + // For now, whitelist some calls to allow the web clipper to work + // without an extra auth step + const whiteList = [['GET', 'ping'], ['GET', 'tags'], ['GET', 'folders'], ['POST', 'notes']]; + + for (let i = 0; i < whiteList.length; i++) { + if (whiteList[i][0] === request.method && whiteList[i][1] === request.path) return; + } + + if (!this.token) return; + if (!request.query || !request.query.token) throw new ErrorForbidden('Missing "token" parameter'); + if (request.query.token !== this.token) throw new ErrorForbidden('Invalid "token" parameter'); + } + + private async execServiceActionFromRequest_(externalApi:any, request:Request) { + const action = externalApi[request.action]; + if (!action) throw new ErrorNotFound(`Invalid action: ${request.action}`); + const args = Object.assign({}, request); + delete args.action; + return action(args); + } + + private async action_services(request:Request, serviceName:string) { + if (request.method !== RequestMethod.POST) throw new ErrorMethodNotAllowed(); + if (!this.actionApi_) throw new ErrorNotFound('No action API has been setup!'); + if (!this.actionApi_[serviceName]) throw new ErrorNotFound(`No such service: ${serviceName}`); + + const externalApi = this.actionApi_[serviceName](); + return this.execServiceActionFromRequest_(externalApi, JSON.parse(request.body)); + } + +} diff --git a/packages/lib/services/rest/ApiResponse.ts b/packages/lib/services/rest/ApiResponse.ts new file mode 100644 index 0000000000..17e6eb40cb --- /dev/null +++ b/packages/lib/services/rest/ApiResponse.ts @@ -0,0 +1,8 @@ +export default class ApiResponse { + + public type:string; + public body:any; + public contentType:string; + public attachmentFilename:string; + +} diff --git a/ReactNativeClient/lib/services/rest/actionApi.desktop.ts b/packages/lib/services/rest/actionApi.desktop.ts similarity index 53% rename from ReactNativeClient/lib/services/rest/actionApi.desktop.ts rename to packages/lib/services/rest/actionApi.desktop.ts index 9223c0cc60..d5675d976b 100644 --- a/ReactNativeClient/lib/services/rest/actionApi.desktop.ts +++ b/packages/lib/services/rest/actionApi.desktop.ts @@ -1,5 +1,5 @@ -import ResourceEditWatcher from 'lib/services/ResourceEditWatcher/index'; -const ExternalEditWatcher = require('lib/services/ExternalEditWatcher'); +import ResourceEditWatcher from '../ResourceEditWatcher/index'; +const ExternalEditWatcher = require('../ExternalEditWatcher'); export default { diff --git a/packages/lib/services/rest/errors.js b/packages/lib/services/rest/errors.js new file mode 100644 index 0000000000..dfa555b029 --- /dev/null +++ b/packages/lib/services/rest/errors.js @@ -0,0 +1,37 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +exports.ErrorBadRequest = exports.ErrorForbidden = exports.ErrorNotFound = exports.ErrorMethodNotAllowed = void 0; +class ApiError extends Error { + constructor(message, httpCode = 400) { + super(message); + this.httpCode_ = httpCode; + } + get httpCode() { + return this.httpCode_; + } +} +class ErrorMethodNotAllowed extends ApiError { + constructor(message = 'Method Not Allowed') { + super(message, 405); + } +} +exports.ErrorMethodNotAllowed = ErrorMethodNotAllowed; +class ErrorNotFound extends ApiError { + constructor(message = 'Not Found') { + super(message, 404); + } +} +exports.ErrorNotFound = ErrorNotFound; +class ErrorForbidden extends ApiError { + constructor(message = 'Forbidden') { + super(message, 403); + } +} +exports.ErrorForbidden = ErrorForbidden; +class ErrorBadRequest extends ApiError { + constructor(message = 'Bad Request') { + super(message, 400); + } +} +exports.ErrorBadRequest = ErrorBadRequest; +// # sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sUUFBUyxTQUFRLEtBQUs7SUFHM0IsWUFBWSxPQUFjLEVBQUUsV0FBa0IsR0FBRztRQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3ZCLENBQUM7Q0FDRDtBQUVELE1BQWEscUJBQXNCLFNBQVEsUUFBUTtJQUNsRCxZQUFZLE9BQU8sR0FBRyxvQkFBb0I7UUFDekMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0NBQ0Q7QUFKRCxzREFJQztBQUNELE1BQWEsYUFBYyxTQUFRLFFBQVE7SUFDMUMsWUFBWSxPQUFPLEdBQUcsV0FBVztRQUNoQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7Q0FDRDtBQUpELHNDQUlDO0FBQ0QsTUFBYSxjQUFlLFNBQVEsUUFBUTtJQUMzQyxZQUFZLE9BQU8sR0FBRyxXQUFXO1FBQ2hDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztDQUNEO0FBSkQsd0NBSUM7QUFDRCxNQUFhLGVBQWdCLFNBQVEsUUFBUTtJQUM1QyxZQUFZLE9BQU8sR0FBRyxhQUFhO1FBQ2xDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztDQUNEO0FBSkQsMENBSUMifQ== diff --git a/packages/lib/services/rest/routes/folders.ts b/packages/lib/services/rest/routes/folders.ts new file mode 100644 index 0000000000..b246d18d4f --- /dev/null +++ b/packages/lib/services/rest/routes/folders.ts @@ -0,0 +1,32 @@ + +import { Request } from '../Api'; +import defaultAction from '../utils/defaultAction'; +import paginatedResults from '../utils/paginatedResults'; +import BaseModel from '../../../BaseModel'; +import requestFields from '../utils/requestFields'; +const Folder = require('../../../models/Folder'); +const { FoldersScreenUtils } = require('../../../folders-screen-utils.js'); +const { ErrorNotFound } = require('../errors'); + +export default async function(request:Request, id:string = null, link:string = null) { + if (request.method === 'GET' && !id) { + if (request.query.as_tree) { + const folders = await FoldersScreenUtils.allForDisplay({ fields: requestFields(request, BaseModel.TYPE_FOLDER) }); + const output = await Folder.allAsTree(folders); + return output; + } else { + return defaultAction(BaseModel.TYPE_FOLDER, request, id, link); + } + } + + if (request.method === 'GET' && id) { + if (link && link === 'notes') { + const folder = await Folder.load(id); + return paginatedResults(BaseModel.TYPE_NOTE, request, `parent_id = "${folder.id}"`); + } else if (link) { + throw new ErrorNotFound(); + } + } + + return defaultAction(BaseModel.TYPE_FOLDER, request, id, link); +} diff --git a/packages/lib/services/rest/routes/master_keys.ts b/packages/lib/services/rest/routes/master_keys.ts new file mode 100644 index 0000000000..3962727a31 --- /dev/null +++ b/packages/lib/services/rest/routes/master_keys.ts @@ -0,0 +1,7 @@ +import BaseModel from '../../../BaseModel'; +import { Request } from '../Api'; +import defaultAction from '../utils/defaultAction'; + +export default function(request:Request, id:string = null, link:string = null) { + return defaultAction(BaseModel.TYPE_MASTER_KEY, request, id, link); +} diff --git a/packages/lib/services/rest/routes/notes.ts b/packages/lib/services/rest/routes/notes.ts new file mode 100644 index 0000000000..7851bc74b1 --- /dev/null +++ b/packages/lib/services/rest/routes/notes.ts @@ -0,0 +1,405 @@ +import Setting from '../../../models/Setting'; +import shim from '../../../shim'; +import uuid from '../../../uuid'; +import readonlyProperties from '../utils/readonlyProperties'; +import defaultSaveOptions from '../utils/defaultSaveOptions'; +import defaultAction from '../utils/defaultAction'; +import BaseModel from '../../../BaseModel'; +import defaultLoadOptions from '../utils/defaultLoadOptions'; +import { RequestMethod, Request } from '../Api'; +import markdownUtils from '../../../markdownUtils'; + +const { reg } = require('../../../registry.js'); +const { Database } = require('../../../database.js'); +const Folder = require('../../../models/Folder'); +const Note = require('../../../models/Note'); +const Tag = require('../../../models/Tag'); +const Resource = require('../../../models/Resource'); +const htmlUtils = require('../../../htmlUtils'); +const markupLanguageUtils = require('../../../markupLanguageUtils').default; +const mimeUtils = require('../../../mime-utils.js').mime; +const md5 = require('md5'); +const HtmlToMd = require('../../../HtmlToMd'); +const urlUtils = require('../../../urlUtils.js'); +const ArrayUtils = require('../../../ArrayUtils.js'); +const { netUtils } = require('../../../net-utils'); +const { fileExtension, safeFileExtension, safeFilename, filename } = require('../../../path-utils'); +const uri2path = require('file-uri-to-path'); +const { MarkupToHtml } = require('@joplinapp/renderer'); +const { ErrorNotFound } = require('../errors'); + +let htmlToMdParser_:any = null; + +function htmlToMdParser() { + if (htmlToMdParser_) return htmlToMdParser_; + htmlToMdParser_ = new HtmlToMd(); + return htmlToMdParser_; +} + +async function requestNoteToNote(requestNote:any) { + const output:any = { + title: requestNote.title ? requestNote.title : '', + body: requestNote.body ? requestNote.body : '', + }; + + if (requestNote.id) output.id = requestNote.id; + + const baseUrl = requestNote.base_url ? requestNote.base_url : ''; + + if (requestNote.body_html) { + if (requestNote.convert_to === 'html') { + const style = await buildNoteStyleSheet(requestNote.stylesheets); + const minify = require('html-minifier').minify; + + const minifyOptions = { + // Remove all spaces and, especially, newlines from tag attributes, as that would + // break the rendering. + customAttrCollapse: /.*/, + // Need to remove all whitespaces because whitespace at a beginning of a line + // means a code block in Markdown. + collapseWhitespace: true, + minifyCSS: true, + maxLineLength: 300, + }; + + const uglifycss = require('uglifycss'); + const styleString = uglifycss.processString(style.join('\n'), { + // Need to set a max length because Ace Editor takes forever + // to display notes with long lines. + maxLineLen: 200, + }); + + const styleTag = style.length ? `` + '\n' : ''; + let minifiedHtml = ''; + try { + minifiedHtml = minify(requestNote.body_html, minifyOptions); + } catch (error) { + console.warn('Could not minify HTML - using non-minified HTML instead', error); + minifiedHtml = requestNote.body_html; + } + output.body = styleTag + minifiedHtml; + output.body = htmlUtils.prependBaseUrl(output.body, baseUrl); + output.markup_language = MarkupToHtml.MARKUP_LANGUAGE_HTML; + } else { + // Convert to Markdown + // Parsing will not work if the HTML is not wrapped in a top level tag, which is not guaranteed + // when getting the content from elsewhere. So here wrap it - it won't change anything to the final + // rendering but it makes sure everything will be parsed. + output.body = await htmlToMdParser().parse(`
${requestNote.body_html}
`, { + baseUrl: baseUrl, + anchorNames: requestNote.anchor_names ? requestNote.anchor_names : [], + }); + output.markup_language = MarkupToHtml.MARKUP_LANGUAGE_MARKDOWN; + } + } + + if (requestNote.parent_id) { + output.parent_id = requestNote.parent_id; + } else { + const folder = await Folder.defaultFolder(); + if (!folder) throw new Error('Cannot find folder for note'); + output.parent_id = folder.id; + } + + if ('source_url' in requestNote) output.source_url = requestNote.source_url; + if ('author' in requestNote) output.author = requestNote.author; + if ('user_updated_time' in requestNote) output.user_updated_time = Database.formatValue(Database.TYPE_INT, requestNote.user_updated_time); + if ('user_created_time' in requestNote) output.user_created_time = Database.formatValue(Database.TYPE_INT, requestNote.user_created_time); + if ('is_todo' in requestNote) output.is_todo = Database.formatValue(Database.TYPE_INT, requestNote.is_todo); + if ('markup_language' in requestNote) output.markup_language = Database.formatValue(Database.TYPE_INT, requestNote.markup_language); + if ('longitude' in requestNote) output.longitude = requestNote.longitude; + if ('latitude' in requestNote) output.latitude = requestNote.latitude; + if ('altitude' in requestNote) output.altitude = requestNote.altitude; + + if (!output.markup_language) output.markup_language = MarkupToHtml.MARKUP_LANGUAGE_MARKDOWN; + + return output; +} + +async function buildNoteStyleSheet(stylesheets:any[]) { + if (!stylesheets) return []; + + const output = []; + + for (const stylesheet of stylesheets) { + if (stylesheet.type === 'text') { + output.push(stylesheet.value); + } else if (stylesheet.type === 'url') { + try { + const tempPath = `${Setting.value('tempDir')}/${md5(`${Math.random()}_${Date.now()}`)}.css`; + await shim.fetchBlob(stylesheet.value, { path: tempPath, maxRetry: 1 }); + const text = await shim.fsDriver().readFile(tempPath); + output.push(text); + await shim.fsDriver().remove(tempPath); + } catch (error) { + reg.logger().warn(`Cannot download stylesheet at ${stylesheet.value}`, error); + } + } else { + throw new Error(`Invalid stylesheet type: ${stylesheet.type}`); + } + } + + return output; +} + +async function tryToGuessImageExtFromMimeType(response:any, imagePath:string) { + const mimeType = netUtils.mimeTypeFromHeaders(response.headers); + if (!mimeType) return imagePath; + + const newExt = mimeUtils.toFileExtension(mimeType); + if (!newExt) return imagePath; + + const newImagePath = `${imagePath}.${newExt}`; + await shim.fsDriver().move(imagePath, newImagePath); + return newImagePath; +} + +async function downloadImage(url:string /* , allowFileProtocolImages */) { + const tempDir = Setting.value('tempDir'); + + // The URL we get to download have been extracted from the Markdown document + url = markdownUtils.unescapeLinkUrl(url); + + const isDataUrl = url && url.toLowerCase().indexOf('data:') === 0; + + const name = isDataUrl ? md5(`${Math.random()}_${Date.now()}`) : filename(url); + let fileExt = isDataUrl ? mimeUtils.toFileExtension(mimeUtils.fromDataUrl(url)) : safeFileExtension(fileExtension(url).toLowerCase()); + if (!mimeUtils.fromFileExtension(fileExt)) fileExt = ''; // If the file extension is unknown - clear it. + if (fileExt) fileExt = `.${fileExt}`; + + // Append a UUID because simply checking if the file exists is not enough since + // multiple resources can be downloaded at the same time (race condition). + let imagePath = `${tempDir}/${safeFilename(name)}_${uuid.create()}${fileExt}`; + + try { + if (isDataUrl) { + await shim.imageFromDataUrl(url, imagePath); + } else if (urlUtils.urlProtocol(url).toLowerCase() === 'file:') { + // Can't think of any reason to disallow this at this point + // if (!allowFileProtocolImages) throw new Error('For security reasons, this URL with file:// protocol cannot be downloaded'); + const localPath = uri2path(url); + await shim.fsDriver().copy(localPath, imagePath); + } else { + const response = await shim.fetchBlob(url, { path: imagePath, maxRetry: 1 }); + + // If we could not find the file extension from the URL, try to get it + // now based on the Content-Type header. + if (!fileExt) imagePath = await tryToGuessImageExtFromMimeType(response, imagePath); + } + return imagePath; + } catch (error) { + reg.logger().warn(`Cannot download image at ${url}`, error); + return ''; + } +} + +async function downloadImages(urls:string[] /* , allowFileProtocolImages:boolean */) { + const PromisePool = require('es6-promise-pool'); + + const output:any = {}; + + const downloadOne = async (url:string) => { + const imagePath = await downloadImage(url); // , allowFileProtocolImages); + if (imagePath) output[url] = { path: imagePath, originalUrl: url }; + }; + + let urlIndex = 0; + const promiseProducer = () => { + if (urlIndex >= urls.length) return null; + + const url = urls[urlIndex++]; + return downloadOne(url); + }; + + const concurrency = 10; + const pool = new PromisePool(promiseProducer, concurrency); + await pool.start(); + + return output; +} + +async function createResourcesFromPaths(urls:string[]) { + for (const url in urls) { + if (!urls.hasOwnProperty(url)) continue; + const urlInfo:any = urls[url]; + try { + const resource = await shim.createResourceFromPath(urlInfo.path); + urlInfo.resource = resource; + } catch (error) { + reg.logger().warn(`Cannot create resource for ${url}`, error); + } + } + return urls; +} + +async function removeTempFiles(urls:string[]) { + for (const url in urls) { + if (!urls.hasOwnProperty(url)) continue; + const urlInfo:any = urls[url]; + try { + await shim.fsDriver().remove(urlInfo.path); + } catch (error) { + reg.logger().warn(`Cannot remove ${urlInfo.path}`, error); + } + } +} + +function replaceImageUrlsByResources(markupLanguage:number, md:string, urls:any, imageSizes:any) { + const imageSizesIndexes:any = {}; + + if (markupLanguage === MarkupToHtml.MARKUP_LANGUAGE_HTML) { + return htmlUtils.replaceImageUrls(md, (imageUrl:string) => { + const urlInfo:any = urls[imageUrl]; + if (!urlInfo || !urlInfo.resource) return imageUrl; + return Resource.internalUrl(urlInfo.resource); + }); + } else { + // eslint-disable-next-line no-useless-escape + return md.replace(/(!\[.*?\]\()([^\s\)]+)(.*?\))/g, (_match:any, before:string, imageUrl:string, after:string) => { + const urlInfo = urls[imageUrl]; + if (!urlInfo || !urlInfo.resource) return before + imageUrl + after; + if (!(urlInfo.originalUrl in imageSizesIndexes)) imageSizesIndexes[urlInfo.originalUrl] = 0; + + const resourceUrl = Resource.internalUrl(urlInfo.resource); + const imageSizesCollection = imageSizes[urlInfo.originalUrl]; + + if (!imageSizesCollection) { + // In some cases, we won't find the image size information for that particular URL. Normally + // it will only happen when using the "Clip simplified page" feature, which can modify the + // image URLs (for example it will select a smaller size resolution). In that case, it's + // fine to return the image as-is because it has already good dimensions. + return before + resourceUrl + after; + } + + const imageSize = imageSizesCollection[imageSizesIndexes[urlInfo.originalUrl]]; + imageSizesIndexes[urlInfo.originalUrl]++; + + if (imageSize && (imageSize.naturalWidth !== imageSize.width || imageSize.naturalHeight !== imageSize.height)) { + return ``; + } else { + return before + resourceUrl + after; + } + }); + } +} + +// Note must have been saved first +async function attachImageFromDataUrl(note:any, imageDataUrl:string, cropRect:any) { + const tempDir = Setting.value('tempDir'); + const mime = mimeUtils.fromDataUrl(imageDataUrl); + let ext = mimeUtils.toFileExtension(mime) || ''; + if (ext) ext = `.${ext}`; + const tempFilePath = `${tempDir}/${md5(`${Math.random()}_${Date.now()}`)}${ext}`; + const imageConvOptions:any = {}; + if (cropRect) imageConvOptions.cropRect = cropRect; + await shim.imageFromDataUrl(imageDataUrl, tempFilePath, imageConvOptions); + return await shim.attachFileToNote(note, tempFilePath); +} + +export default async function(request:Request, id:string = null, link:string = null) { + if (request.method === 'GET') { + if (link && link === 'tags') { + return { + items: await Tag.tagsByNoteId(id), + // TODO: paginate + }; + } else if (link && link === 'resources') { + const note = await Note.load(id); + if (!note) throw new ErrorNotFound(); + const resourceIds = await Note.linkedResourceIds(note.body); + const output = []; + const loadOptions = defaultLoadOptions(request, BaseModel.TYPE_NOTE); + for (const resourceId of resourceIds) { + output.push(await Resource.load(resourceId, loadOptions)); + } + return { items: output }; // TODO: paginate + } else if (link) { + throw new ErrorNotFound(); + } + + return defaultAction(BaseModel.TYPE_NOTE, request, id, link); + } + + if (request.method === RequestMethod.POST) { + const requestId = Date.now(); + const requestNote = JSON.parse(request.body); + + // const allowFileProtocolImages = urlUtils.urlProtocol(requestNote.base_url).toLowerCase() === 'file:'; + + const imageSizes = requestNote.image_sizes ? requestNote.image_sizes : {}; + + let note:any = await requestNoteToNote(requestNote); + + const imageUrls = ArrayUtils.unique(markupLanguageUtils.extractImageUrls(note.markup_language, note.body)); + + reg.logger().info(`Request (${requestId}): Downloading images: ${imageUrls.length}`); + + let result = await downloadImages(imageUrls); // , allowFileProtocolImages); + + reg.logger().info(`Request (${requestId}): Creating resources from paths: ${Object.getOwnPropertyNames(result).length}`); + + result = await createResourcesFromPaths(result); + await removeTempFiles(result); + note.body = replaceImageUrlsByResources(note.markup_language, note.body, result, imageSizes); + + reg.logger().info(`Request (${requestId}): Saving note...`); + + const saveOptions = defaultSaveOptions('POST', note.id); + saveOptions.autoTimestamp = false; // No auto-timestamp because user may have provided them + const timestamp = Date.now(); + note.updated_time = timestamp; + note.created_time = timestamp; + if (!('user_updated_time' in note)) note.user_updated_time = timestamp; + if (!('user_created_time' in note)) note.user_created_time = timestamp; + + note = await Note.save(note, saveOptions); + + if (requestNote.tags) { + const tagTitles = requestNote.tags.split(','); + await Tag.setNoteTagsByTitles(note.id, tagTitles); + } + + if (requestNote.image_data_url) { + note = await attachImageFromDataUrl(note, requestNote.image_data_url, requestNote.crop_rect); + } + + reg.logger().info(`Request (${requestId}): Created note ${note.id}`); + + return note; + } + + if (request.method === 'PUT') { + const note = await Note.load(id); + + if (!note) throw new ErrorNotFound(); + + const saveOptions = { + ...defaultSaveOptions('PUT', note.id), + autoTimestamp: false, // No auto-timestamp because user may have provided them + userSideValidation: true, + }; + + const timestamp = Date.now(); + + const newProps = request.bodyJson(readonlyProperties('PUT')); + if (!('user_updated_time' in newProps)) newProps.user_updated_time = timestamp; + + let newNote = { + ...note, + ...newProps, + updated_time: timestamp, + }; + + newNote = await Note.save(newNote, saveOptions); + + const requestNote = JSON.parse(request.body); + if (requestNote.tags || requestNote.tags === '') { + const tagTitles = requestNote.tags.split(','); + await Tag.setNoteTagsByTitles(id, tagTitles); + } + + return newNote; + } + + return defaultAction(BaseModel.TYPE_NOTE, request, id, link); +} diff --git a/packages/lib/services/rest/routes/ping.ts b/packages/lib/services/rest/routes/ping.ts new file mode 100644 index 0000000000..fec1a1c7d6 --- /dev/null +++ b/packages/lib/services/rest/routes/ping.ts @@ -0,0 +1,10 @@ +import { Request } from '../Api'; +import { ErrorMethodNotAllowed } from '../utils/errors'; + +export default async function(request:Request) { + if (request.method === 'GET') { + return 'JoplinClipperServer'; + } + + throw new ErrorMethodNotAllowed(); +} diff --git a/packages/lib/services/rest/routes/resources.ts b/packages/lib/services/rest/routes/resources.ts new file mode 100644 index 0000000000..0c1068e01a --- /dev/null +++ b/packages/lib/services/rest/routes/resources.ts @@ -0,0 +1,44 @@ +import BaseModel from '../../../BaseModel'; +import shim from '../../../shim'; +import { Request, RequestMethod } from '../Api'; +import defaultAction from '../utils/defaultAction'; +import { ErrorBadRequest, ErrorNotFound } from '../utils/errors'; +import readonlyProperties from '../utils/readonlyProperties'; +import ApiResponse from '../ApiResponse'; +const Resource = require('../../../models/Resource'); + +export default async function(request:Request, id:string = null, link:string = null) { + // fieldName: "data" + // headers: Object + // originalFilename: "test.jpg" + // path: "C:\Users\Laurent\AppData\Local\Temp\BW77wkpP23iIGUstd0kDuXXC.jpg" + // size: 164394 + + if (request.method === 'GET') { + if (link === 'file') { + const resource = await Resource.load(id); + if (!resource) throw new ErrorNotFound(); + + const filePath = Resource.fullPath(resource); + const buffer = await shim.fsDriver().readFile(filePath, 'Buffer'); + + const response = new ApiResponse(); + response.type = 'attachment'; + response.body = buffer; + response.contentType = resource.mime; + response.attachmentFilename = Resource.friendlyFilename(resource); + return response; + } + + if (link) throw new ErrorNotFound(); + } + + if (request.method === RequestMethod.POST) { + if (!request.files.length) throw new ErrorBadRequest('Resource cannot be created without a file'); + const filePath = request.files[0].path; + const defaultProps = request.bodyJson(readonlyProperties('POST')); + return shim.createResourceFromPath(filePath, defaultProps, { userSideValidation: true }); + } + + return defaultAction(BaseModel.TYPE_RESOURCE, request, id, link); +} diff --git a/packages/lib/services/rest/routes/search.ts b/packages/lib/services/rest/routes/search.ts new file mode 100644 index 0000000000..0e1e5bce76 --- /dev/null +++ b/packages/lib/services/rest/routes/search.ts @@ -0,0 +1,37 @@ +import BaseModel, { ModelType } from '../../../BaseModel'; +import { Request } from '../Api'; +import defaultLoadOptions from '../utils/defaultLoadOptions'; +import { ErrorBadRequest, ErrorMethodNotAllowed } from '../utils/errors'; +import requestFields from '../utils/requestFields'; +const BaseItem = require('../../../models/BaseItem'); +const SearchEngineUtils = require('../../searchengine/SearchEngineUtils'); + +export default async function(request:Request) { + if (request.method !== 'GET') throw new ErrorMethodNotAllowed(); + + const query = request.query.query; + if (!query) throw new ErrorBadRequest('Missing "query" parameter'); + + const modelType = request.query.type ? BaseModel.modelNameToType(request.query.type) : BaseModel.TYPE_NOTE; + + let results = []; + + if (modelType !== BaseItem.TYPE_NOTE) { + const ModelClass = BaseItem.getClassByItemType(modelType); + const options:any = {}; + const fields = requestFields(request, modelType); + if (fields.length) options.fields = fields; + const sqlQueryPart = query.replace(/\*/g, '%'); + options.where = 'title LIKE ?'; + options.whereParams = [sqlQueryPart]; + options.caseInsensitive = true; + results = await ModelClass.all(options); + } else { + results = await SearchEngineUtils.notesForQuery(query, defaultLoadOptions(request, ModelType.Note)); + } + + return { + items: results, + // TODO: implement cursor support + }; +} diff --git a/packages/lib/services/rest/routes/tags.ts b/packages/lib/services/rest/routes/tags.ts new file mode 100644 index 0000000000..cef32493b3 --- /dev/null +++ b/packages/lib/services/rest/routes/tags.ts @@ -0,0 +1,41 @@ +import defaultAction from '../utils/defaultAction'; +import BaseModel, { ModelType } from '../../../BaseModel'; +import defaultLoadOptions from '../utils/defaultLoadOptions'; +import { Request, RequestMethod } from '../Api'; +const Note = require('../../../models/Note'); +const Tag = require('../../../models/Tag'); +const { ErrorBadRequest, ErrorNotFound } = require('../errors'); + +export default async function(request:Request, id:string = null, link:string = null) { + if (link === 'notes') { + const tag = await Tag.load(id); + if (!tag) throw new ErrorNotFound(); + + if (request.method === RequestMethod.POST) { + const note = request.bodyJson(); + if (!note || !note.id) throw new ErrorBadRequest('Missing note ID'); + return await Tag.addNote(tag.id, note.id); + } + + if (request.method === 'DELETE') { + const noteId = request.params.length ? request.params[0] : null; + if (!noteId) throw new ErrorBadRequest('Missing note ID'); + await Tag.removeNote(tag.id, noteId); + return; + } + + if (request.method === 'GET') { + // Ideally we should get all this in one SQL query but for now that will do + const noteIds = await Tag.noteIds(tag.id); + const output = []; + for (let i = 0; i < noteIds.length; i++) { + const n = await Note.preview(noteIds[i], defaultLoadOptions(request, ModelType.Note)); + if (!n) continue; + output.push(n); + } + return { items: output }; // TODO: paginate + } + } + + return defaultAction(BaseModel.TYPE_TAG, request, id, link); +} diff --git a/packages/lib/services/rest/utils/defaultAction.ts b/packages/lib/services/rest/utils/defaultAction.ts new file mode 100644 index 0000000000..c5369afc45 --- /dev/null +++ b/packages/lib/services/rest/utils/defaultAction.ts @@ -0,0 +1,51 @@ +import { Request, RequestMethod } from '../Api'; +import defaultSaveOptions from './defaultSaveOptions'; +import { ErrorMethodNotAllowed, ErrorNotFound } from './errors'; +import paginatedResults from './paginatedResults'; +import readonlyProperties from './readonlyProperties'; +import requestFields from './requestFields'; +const BaseItem = require('../../../models/BaseItem'); + +export default async function(modelType:number, request:Request, id:string = null, link:string = null) { + if (link) throw new ErrorNotFound(); // Default action doesn't support links at all for now + + const ModelClass = BaseItem.getClassByItemType(modelType); + + const getOneModel = async (options:any = null) => { + const model = await ModelClass.load(id, options || {}); + if (!model) throw new ErrorNotFound(); + return model; + }; + + if (request.method === 'GET') { + if (id) { + return getOneModel({ + fields: requestFields(request, modelType), + }); + } else { + return paginatedResults(modelType, request); + } + } + + if (request.method === 'PUT' && id) { + const model = await getOneModel(); + const newModel = Object.assign({}, model, request.bodyJson(readonlyProperties('PUT'))); + return ModelClass.save(newModel, { userSideValidation: true }); + } + + if (request.method === 'DELETE' && id) { + const model = await getOneModel(); + await ModelClass.delete(model.id); + return; + } + + if (request.method === RequestMethod.POST) { + const props = readonlyProperties('POST'); + const idIdx = props.indexOf('id'); + if (idIdx >= 0) props.splice(idIdx, 1); + const model = request.bodyJson(props); + return ModelClass.save(model, defaultSaveOptions('POST', model.id)); + } + + throw new ErrorMethodNotAllowed(); +} diff --git a/packages/lib/services/rest/utils/defaultLoadOptions.ts b/packages/lib/services/rest/utils/defaultLoadOptions.ts new file mode 100644 index 0000000000..635cdd417c --- /dev/null +++ b/packages/lib/services/rest/utils/defaultLoadOptions.ts @@ -0,0 +1,9 @@ +import { Request } from '../Api'; +import requestFields from './requestFields'; + +export default function(request:Request, modelType:number) { + const options:any = {}; + const fields = requestFields(request, modelType); + if (fields.length) options.fields = fields; + return options; +} diff --git a/packages/lib/services/rest/utils/defaultSaveOptions.ts b/packages/lib/services/rest/utils/defaultSaveOptions.ts new file mode 100644 index 0000000000..24a3940362 --- /dev/null +++ b/packages/lib/services/rest/utils/defaultSaveOptions.ts @@ -0,0 +1,5 @@ +export default function(requestMethod:string, modelId:string = null) { + const options:any = { userSideValidation: true }; + if (requestMethod === 'POST' && modelId) options.isNew = true; + return options; +} diff --git a/ReactNativeClient/lib/services/rest/errors.ts b/packages/lib/services/rest/utils/errors.ts similarity index 100% rename from ReactNativeClient/lib/services/rest/errors.ts rename to packages/lib/services/rest/utils/errors.ts diff --git a/packages/lib/services/rest/utils/paginatedResults.ts b/packages/lib/services/rest/utils/paginatedResults.ts new file mode 100644 index 0000000000..949c1cae1e --- /dev/null +++ b/packages/lib/services/rest/utils/paginatedResults.ts @@ -0,0 +1,14 @@ +import modelFeed, { ModelFeedPage } from '../../../models/utils/modelFeed'; +import { Request } from '../Api'; +import requestFields from './requestFields'; +import BaseModel from '../../../BaseModel'; +import requestPaginationOptions from './requestPaginationOptions'; +const BaseItem = require('../../../models/BaseItem'); + +export default async function(modelType:number, request:Request, whereSql:string = ''):Promise { + const ModelClass = BaseItem.getClassByItemType(modelType); + const fields = requestFields(request, modelType); + const pagination = requestPaginationOptions(request); + const cursor = request.query.cursor; + return modelFeed(BaseModel.db(), ModelClass.tableName(), pagination, cursor, whereSql, fields); +} diff --git a/packages/lib/services/rest/utils/readonlyProperties.ts b/packages/lib/services/rest/utils/readonlyProperties.ts new file mode 100644 index 0000000000..8b5fd828e3 --- /dev/null +++ b/packages/lib/services/rest/utils/readonlyProperties.ts @@ -0,0 +1,5 @@ +export default function readonlyProperties(requestMethod:string) { + const output = ['created_time', 'updated_time', 'encryption_blob_encrypted', 'encryption_applied', 'encryption_cipher_text']; + if (requestMethod !== 'POST') output.splice(0, 0, 'id'); + return output; +} diff --git a/packages/lib/services/rest/utils/requestFields.ts b/packages/lib/services/rest/utils/requestFields.ts new file mode 100644 index 0000000000..00588c35fc --- /dev/null +++ b/packages/lib/services/rest/utils/requestFields.ts @@ -0,0 +1,23 @@ +import { Request } from '../Api'; +const BaseItem = require('../../../models/BaseItem'); + +function defaultFieldsByModelType(modelType:number):string[] { + const ModelClass = BaseItem.getClassByItemType(modelType); + const possibleFields = ['id', 'parent_id', 'title']; + const output = []; + for (const f of possibleFields) { + if (ModelClass.hasField(f)) output.push(f); + } + return output; +} + +export default function(request:Request, modelType:number) { + const query = request.query; + if (!query || !query.fields) return defaultFieldsByModelType(modelType); + if (Array.isArray(query.fields)) return query.fields.slice(); + const fields = query.fields + .split(',') + .map((f:string) => f.trim()) + .filter((f:string) => !!f); + return fields.length ? fields : defaultFieldsByModelType(modelType); +} diff --git a/packages/lib/services/rest/utils/requestPaginationOptions.ts b/packages/lib/services/rest/utils/requestPaginationOptions.ts new file mode 100644 index 0000000000..98857f5ffe --- /dev/null +++ b/packages/lib/services/rest/utils/requestPaginationOptions.ts @@ -0,0 +1,25 @@ +import { Pagination, PaginationOrder, PaginationOrderDir } from '../../../models/utils/types'; +import { Request } from '../Api'; +import { ErrorBadRequest } from './errors'; + +function requestPaginationOrder(request:Request):PaginationOrder[] { + const orderBy:string = request.query.order_by ? request.query.order_by : 'updated_time'; + const orderDir:PaginationOrderDir = request.query.order_dir ? request.query.order_dir : PaginationOrderDir.ASC; + + return [{ + by: orderBy, + dir: orderDir, + caseInsensitive: true, + }]; +} + +export default function(request:Request):Pagination { + const limit = request.query.limit ? request.query.limit : 100; + if (limit < 0 || limit > 100) throw new ErrorBadRequest(`Limit out of bond: ${limit}`); + const order:PaginationOrder[] = requestPaginationOrder(request); + + return { + limit, + order, + }; +} diff --git a/ReactNativeClient/lib/services/searchengine/SearchEngine.js b/packages/lib/services/searchengine/SearchEngine.js similarity index 98% rename from ReactNativeClient/lib/services/searchengine/SearchEngine.js rename to packages/lib/services/searchengine/SearchEngine.js index 547f95d893..42d819a206 100644 --- a/ReactNativeClient/lib/services/searchengine/SearchEngine.js +++ b/packages/lib/services/searchengine/SearchEngine.js @@ -1,15 +1,15 @@ -const Logger = require('lib/Logger').default; -const ItemChange = require('lib/models/ItemChange.js'); -const Setting = require('lib/models/Setting').default; -const Note = require('lib/models/Note.js'); -const BaseModel = require('lib/BaseModel.js'); -const ItemChangeUtils = require('lib/services/ItemChangeUtils'); -const { pregQuote, scriptType } = require('lib/string-utils.js'); +const Logger = require('../../Logger').default; +const ItemChange = require('../../models/ItemChange.js'); +const Setting = require('../../models/Setting').default; +const Note = require('../../models/Note.js'); +const BaseModel = require('../../BaseModel').default; +const ItemChangeUtils = require('../ItemChangeUtils'); +const { pregQuote, scriptType } = require('../../string-utils.js'); const removeDiacritics = require('diacritics').remove; const { sprintf } = require('sprintf-js'); const filterParser = require('./filterParser').default; const queryBuilder = require('./queryBuilder').default; -const shim = require('lib/shim').default; +const shim = require('../../shim').default; class SearchEngine { diff --git a/ReactNativeClient/lib/services/searchengine/SearchEngineUtils.js b/packages/lib/services/searchengine/SearchEngineUtils.js similarity index 94% rename from ReactNativeClient/lib/services/searchengine/SearchEngineUtils.js rename to packages/lib/services/searchengine/SearchEngineUtils.js index ac5db18101..6fe435fcba 100644 --- a/ReactNativeClient/lib/services/searchengine/SearchEngineUtils.js +++ b/packages/lib/services/searchengine/SearchEngineUtils.js @@ -1,5 +1,5 @@ -const SearchEngine = require('lib/services/searchengine/SearchEngine'); -const Note = require('lib/models/Note'); +const SearchEngine = require('./SearchEngine'); +const Note = require('../../models/Note'); class SearchEngineUtils { static async notesForQuery(query, options = null) { diff --git a/ReactNativeClient/lib/services/searchengine/filterParser.ts b/packages/lib/services/searchengine/filterParser.ts similarity index 100% rename from ReactNativeClient/lib/services/searchengine/filterParser.ts rename to packages/lib/services/searchengine/filterParser.ts diff --git a/ReactNativeClient/lib/services/searchengine/queryBuilder.ts b/packages/lib/services/searchengine/queryBuilder.ts similarity index 99% rename from ReactNativeClient/lib/services/searchengine/queryBuilder.ts rename to packages/lib/services/searchengine/queryBuilder.ts index a2a1138fd8..113ad17e4f 100644 --- a/ReactNativeClient/lib/services/searchengine/queryBuilder.ts +++ b/packages/lib/services/searchengine/queryBuilder.ts @@ -1,4 +1,4 @@ -const { time } = require('lib/time-utils.js'); +const time = require('../../time').default; interface Term { name: string diff --git a/packages/lib/services/spellChecker/SpellCheckerService.ts b/packages/lib/services/spellChecker/SpellCheckerService.ts new file mode 100644 index 0000000000..c1f543f681 --- /dev/null +++ b/packages/lib/services/spellChecker/SpellCheckerService.ts @@ -0,0 +1,157 @@ +import Setting from '../../models/Setting'; +import CommandService from '../CommandService'; +import SpellCheckerServiceDriverBase from './SpellCheckerServiceDriverBase'; +import { _, countryDisplayName } from '../../locale'; + +export default class SpellCheckerService { + + private driver_:SpellCheckerServiceDriverBase; + + private static instance_:SpellCheckerService; + + public static instance():SpellCheckerService { + if (this.instance_) return this.instance_; + this.instance_ = new SpellCheckerService(); + return this.instance_; + } + + public async initialize(driver:SpellCheckerServiceDriverBase) { + this.driver_ = driver; + this.setupDefaultLanguage(); + this.applyStateToDriver(); + } + + private get defaultLanguage():string { + return 'en-US'; + } + + public setupDefaultLanguage() { + if (!Setting.value('spellChecker.language')) { + const l = this.driver_.language; + this.setLanguage(l ? l : this.defaultLanguage); + } + } + + public get availableLanguages():string[] { + return this.driver_.availableLanguages; + } + + private applyStateToDriver() { + this.driver_.setLanguage(this.enabled ? this.language : ''); + } + + public setLanguage(language:string) { + Setting.setValue('spellChecker.language', language); + this.applyStateToDriver(); + } + + public get language():string { + return Setting.value('spellChecker.language'); + } + + public get enabled():boolean { + return Setting.value('spellChecker.enabled'); + } + + public toggleEnabled() { + Setting.toggle('spellChecker.enabled'); + this.applyStateToDriver(); + } + + private makeMenuItem(item:any):any { + return this.driver_.makeMenuItem(item); + } + + private async addToDictionary(language:string, word:string) { + this.driver_.addWordToSpellCheckerDictionary(language, word); + } + + public contextMenuItems(misspelledWord:string, dictionarySuggestions:string[]):T[] { + if (!misspelledWord) return []; + + const output = []; + + output.push(this.makeMenuItem({ type: 'separator' })); + + if (dictionarySuggestions.length) { + for (const suggestion of dictionarySuggestions) { + output.push(this.makeMenuItem({ + label: suggestion, + click: () => { + CommandService.instance().execute('replaceSelection', suggestion); + }, + })); + } + } else { + output.push(this.makeMenuItem({ + label: `(${_('No suggestions')})`, + enabled: false, + click: () => {}, + })); + } + + output.push(this.makeMenuItem({ type: 'separator' })); + + output.push(this.makeMenuItem({ + label: _('Add to dictionary'), + click: () => { + this.addToDictionary(this.language, misspelledWord); + }, + })); + + return output; + } + + private changeLanguageMenuItems(selectedLanguage:string, enabled:boolean) { + const languageMenuItems = []; + + for (const locale of this.driver_.availableLanguages) { + languageMenuItems.push({ + label: countryDisplayName(locale), + type: 'radio', + checked: locale === selectedLanguage, + enabled: enabled, + click: () => { + this.setLanguage(locale); + }, + }); + } + + languageMenuItems.sort((a:any, b:any) => { + return a.label < b.label ? -1 : +1; + }); + + return languageMenuItems.map((item:any) => this.makeMenuItem(item)); + } + + public spellCheckerConfigMenuItem(selectedLanguage:string, useSpellChecker:boolean) { + return this.makeMenuItem({ + label: _('Spell checker'), + submenu: [ + this.makeMenuItem({ + label: _('Use spell checker'), + type: 'checkbox', + checked: useSpellChecker, + click: () => { + this.toggleEnabled(); + }, + }), + this.makeMenuItem({ + type: 'separator', + }), + + // Can be removed once it does work + this.makeMenuItem({ + label: '⚠ Spell checker doesn\'t work in Markdown editor ⚠', + enabled: false, + }), + + this.makeMenuItem({ + type: 'separator', + }), + ...this.changeLanguageMenuItems(selectedLanguage, useSpellChecker), + ], + }); + } + +} diff --git a/packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.ts b/packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.ts new file mode 100644 index 0000000000..5eaa8cae52 --- /dev/null +++ b/packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.ts @@ -0,0 +1,23 @@ +export default class SpellCheckerServiceDriverBase { + + public get availableLanguages():string[] { + throw new Error('Not implemented'); + } + + public setLanguage(_v:string) { + throw new Error('Not implemented'); + } + + public get language():string { + throw new Error('Not implemented'); + } + + public makeMenuItem(_item:any):any { + throw new Error('Not implemented'); + } + + public addWordToSpellCheckerDictionary(_language:string, _word:string) { + throw new Error('Not implemented'); + } + +} diff --git a/ReactNativeClient/lib/services/synchronizer/LockHandler.ts b/packages/lib/services/synchronizer/LockHandler.ts similarity index 98% rename from ReactNativeClient/lib/services/synchronizer/LockHandler.ts rename to packages/lib/services/synchronizer/LockHandler.ts index 6b7520c41c..e8bfb535c9 100644 --- a/ReactNativeClient/lib/services/synchronizer/LockHandler.ts +++ b/packages/lib/services/synchronizer/LockHandler.ts @@ -1,9 +1,9 @@ import { Dirnames } from './utils/types'; -import shim from 'lib/shim'; +import shim from '../../shim'; -const JoplinError = require('lib/JoplinError'); -const { time } = require('lib/time-utils'); -const { fileExtension, filename } = require('lib/path-utils'); +const JoplinError = require('../../JoplinError'); +const time = require('../../time').default; +const { fileExtension, filename } = require('../../path-utils'); export enum LockType { None = '', diff --git a/ReactNativeClient/lib/services/synchronizer/MigrationHandler.ts b/packages/lib/services/synchronizer/MigrationHandler.ts similarity index 97% rename from ReactNativeClient/lib/services/synchronizer/MigrationHandler.ts rename to packages/lib/services/synchronizer/MigrationHandler.ts index aa847cbbce..c13303e89a 100644 --- a/ReactNativeClient/lib/services/synchronizer/MigrationHandler.ts +++ b/packages/lib/services/synchronizer/MigrationHandler.ts @@ -1,6 +1,6 @@ import LockHandler, { LockType } from './LockHandler'; import { Dirnames } from './utils/types'; -const BaseService = require('lib/services/BaseService').default; +const BaseService = require('../BaseService').default; // To add a new migration: // - Add the migration logic in ./migrations/VERSION_NUM.js @@ -13,9 +13,9 @@ const migrations = [ require('./migrations/2.js').default, ]; -const Setting = require('lib/models/Setting').default; +const Setting = require('../../models/Setting').default; const { sprintf } = require('sprintf-js'); -const JoplinError = require('lib/JoplinError'); +const JoplinError = require('../../JoplinError'); interface SyncTargetInfo { version: number, diff --git a/ReactNativeClient/lib/services/synchronizer/gui/useSyncTargetUpgrade.ts b/packages/lib/services/synchronizer/gui/useSyncTargetUpgrade.ts similarity index 79% rename from ReactNativeClient/lib/services/synchronizer/gui/useSyncTargetUpgrade.ts rename to packages/lib/services/synchronizer/gui/useSyncTargetUpgrade.ts index d6332ffed0..3d9310926b 100644 --- a/ReactNativeClient/lib/services/synchronizer/gui/useSyncTargetUpgrade.ts +++ b/packages/lib/services/synchronizer/gui/useSyncTargetUpgrade.ts @@ -1,7 +1,8 @@ -import { useEffect, useState } from 'react'; -import MigrationHandler from 'lib/services/synchronizer/MigrationHandler'; -const Setting = require('lib/models/Setting').default; -const { reg } = require('lib/registry'); +import shim from '../../../shim'; +import MigrationHandler from '../MigrationHandler'; +const { useEffect, useState } = shim.react(); +const Setting = require('../../../models/Setting').default; +const { reg } = require('../../../registry'); export interface SyncTargetUpgradeResult { done: boolean, @@ -9,7 +10,7 @@ export interface SyncTargetUpgradeResult { } export default function useSyncTargetUpgrade():SyncTargetUpgradeResult { - const [upgradeResult, setUpgradeResult] = useState({ + const [upgradeResult, setUpgradeResult] = useState({ done: false, error: null, }); diff --git a/ReactNativeClient/lib/services/synchronizer/migrations/1.ts b/packages/lib/services/synchronizer/migrations/1.ts similarity index 100% rename from ReactNativeClient/lib/services/synchronizer/migrations/1.ts rename to packages/lib/services/synchronizer/migrations/1.ts diff --git a/ReactNativeClient/lib/services/synchronizer/migrations/2.ts b/packages/lib/services/synchronizer/migrations/2.ts similarity index 100% rename from ReactNativeClient/lib/services/synchronizer/migrations/2.ts rename to packages/lib/services/synchronizer/migrations/2.ts diff --git a/ReactNativeClient/lib/services/synchronizer/utils/types.ts b/packages/lib/services/synchronizer/utils/types.ts similarity index 100% rename from ReactNativeClient/lib/services/synchronizer/utils/types.ts rename to packages/lib/services/synchronizer/utils/types.ts diff --git a/ReactNativeClient/lib/shim-init-node.js b/packages/lib/shim-init-node.js similarity index 94% rename from ReactNativeClient/lib/shim-init-node.js rename to packages/lib/shim-init-node.js index 7046d0be3c..a8059c792f 100644 --- a/ReactNativeClient/lib/shim-init-node.js +++ b/packages/lib/shim-init-node.js @@ -1,14 +1,14 @@ const fs = require('fs-extra'); -const shim = require('lib/shim').default; -const { GeolocationNode } = require('lib/geolocation-node.js'); -const { FileApiDriverLocal } = require('lib/file-api-driver-local.js'); -const { setLocale, defaultLocale, closestSupportedLocale } = require('lib/locale'); -const FsDriverNode = require('lib/fs-driver-node').default; -const mimeUtils = require('lib/mime-utils.js').mime; -const Note = require('lib/models/Note.js'); -const Resource = require('lib/models/Resource.js'); +const shim = require('./shim').default; +const { GeolocationNode } = require('./geolocation-node.js'); +const { FileApiDriverLocal } = require('./file-api-driver-local.js'); +const { setLocale, defaultLocale, closestSupportedLocale } = require('./locale'); +const FsDriverNode = require('./fs-driver-node').default; +const mimeUtils = require('./mime-utils.js').mime; +const Note = require('./models/Note.js'); +const Resource = require('./models/Resource.js'); const urlValidator = require('valid-url'); -const { _ } = require('lib/locale'); +const { _ } = require('./locale'); const http = require('http'); const https = require('https'); const toRelative = require('relative'); @@ -51,14 +51,16 @@ const gunzipFile = function(source, destination) { }); }; -function shimInit() { +function shimInit(sharp = null, keytar = null) { + keytar = (shim.isWindows() || shim.isMac()) && !shim.isPortable() ? keytar : null; + shim.fsDriver = () => { throw new Error('Not implemented'); }; shim.FileApiDriverLocal = FileApiDriverLocal; shim.Geolocation = GeolocationNode; shim.FormData = require('form-data'); - shim.sjclModule = require('lib/vendor/sjcl.js'); + shim.sjclModule = require('./vendor/sjcl.js'); shim.fsDriver = () => { if (!shim.fsDriver_) shim.fsDriver_ = new FsDriverNode(); @@ -151,8 +153,6 @@ function shimInit() { await shim.writeImageToFile(image, mime, targetPath); } else { // For the CLI tool - const sharp = require('sharp'); - const image = sharp(filePath); const md = await image.metadata(); @@ -189,8 +189,8 @@ function shimInit() { const readChunk = require('read-chunk'); const imageType = require('image-type'); - const uuid = require('lib/uuid').default; - const { basename, fileExtension, safeFileExtension } = require('lib/path-utils'); + const uuid = require('./uuid').default; + const { basename, fileExtension, safeFileExtension } = require('./path-utils'); if (!(await fs.pathExists(filePath))) throw new Error(_('Cannot access %s', filePath)); @@ -250,8 +250,8 @@ function shimInit() { }, options); const { basename } = require('path'); - const { escapeTitleText } = require('lib/markdownUtils').default; - const { toFileProtocolPath } = require('lib/path-utils'); + const { escapeTitleText } = require('./markdownUtils').default; + const { toFileProtocolPath } = require('./path-utils'); let resource = null; if (!options.createFileURL) { @@ -524,6 +524,9 @@ function shimInit() { return timers.clearInterval(id); }; + shim.keytar = () => { + return keytar; + }; } module.exports = { shimInit }; diff --git a/ReactNativeClient/lib/shim.ts b/packages/lib/shim.ts similarity index 87% rename from ReactNativeClient/lib/shim.ts rename to packages/lib/shim.ts index 494bac6ab3..1d35d5db53 100644 --- a/ReactNativeClient/lib/shim.ts +++ b/packages/lib/shim.ts @@ -1,4 +1,5 @@ let isTestingEnv_ = false; +let react_:any = null; const shim = { isNode: () => { @@ -120,7 +121,7 @@ const shim = { }, fetchWithRetry: async function(fetchFn:Function, options:any = null) { - const { time } = require('lib/time-utils.js'); + const time = require('./time').default; if (!options) options = {}; if (!options.timeout) options.timeout = 1000 * 120; // ms @@ -273,6 +274,40 @@ const shim = { clearInterval: (_id:any) => { throw new Error('Not implemented'); }, + + setReact: (react:any) => { + react_ = react; + }, + + react: () => { + if (!react_) throw new Error('Trying to access React before it has been set!!!'); + return react_; + }, + + platformSupportsKeyChain: () => { + // keytar throws an error when system keychain is not present; even + // when keytar itself is installed. try/catch to ensure system + // keychain is present and no error is thrown. + + // For now, keychain support is disabled on Linux because when + // keytar is loaded it seems to cause the following error when + // loading Sharp: + // + // Something went wrong installing the "sharp" module + // /lib/x86_64-linux-gnu/libz.so.1: version `ZLIB_1.2.9' not found + // (required by + // /home/travis/build/laurent22/joplin/packages/app-cli/node_modules/sharp/build/Release/../../vendor/lib/libpng16.so.16) + // + // See: https://travis-ci.org/github/laurent22/joplin/jobs/686222036 + // + // Also disabled in portable mode obviously. + + return (shim.isWindows() || shim.isMac()) && !shim.isPortable(); + }, + + keytar: ():any => { + throw new Error('Not implemented'); + }, }; export default shim; diff --git a/ReactNativeClient/lib/sql-extensions/spellfix.dll b/packages/lib/sql-extensions/spellfix.dll similarity index 100% rename from ReactNativeClient/lib/sql-extensions/spellfix.dll rename to packages/lib/sql-extensions/spellfix.dll diff --git a/ReactNativeClient/lib/string-utils-common.js b/packages/lib/string-utils-common.js similarity index 100% rename from ReactNativeClient/lib/string-utils-common.js rename to packages/lib/string-utils-common.js diff --git a/ReactNativeClient/lib/string-utils.js b/packages/lib/string-utils.js similarity index 100% rename from ReactNativeClient/lib/string-utils.js rename to packages/lib/string-utils.js diff --git a/ReactNativeClient/lib/theme.ts b/packages/lib/theme.ts similarity index 99% rename from ReactNativeClient/lib/theme.ts rename to packages/lib/theme.ts index 7a3c4f4893..ad262cdc41 100644 --- a/ReactNativeClient/lib/theme.ts +++ b/packages/lib/theme.ts @@ -8,7 +8,7 @@ import theme_solarizedDark from './themes/solarizedDark'; import theme_nord from './themes/nord'; import theme_aritimDark from './themes/aritimDark'; import theme_oledDark from './themes/oledDark'; -import Setting from 'lib/models/Setting'; +import Setting from './models/Setting'; const Color = require('color'); diff --git a/ReactNativeClient/lib/themes/aritimDark.ts b/packages/lib/themes/aritimDark.ts similarity index 100% rename from ReactNativeClient/lib/themes/aritimDark.ts rename to packages/lib/themes/aritimDark.ts diff --git a/ReactNativeClient/lib/themes/dark.ts b/packages/lib/themes/dark.ts similarity index 100% rename from ReactNativeClient/lib/themes/dark.ts rename to packages/lib/themes/dark.ts diff --git a/ReactNativeClient/lib/themes/dracula.ts b/packages/lib/themes/dracula.ts similarity index 100% rename from ReactNativeClient/lib/themes/dracula.ts rename to packages/lib/themes/dracula.ts diff --git a/ReactNativeClient/lib/themes/light.ts b/packages/lib/themes/light.ts similarity index 100% rename from ReactNativeClient/lib/themes/light.ts rename to packages/lib/themes/light.ts diff --git a/ReactNativeClient/lib/themes/nord.ts b/packages/lib/themes/nord.ts similarity index 100% rename from ReactNativeClient/lib/themes/nord.ts rename to packages/lib/themes/nord.ts diff --git a/ReactNativeClient/lib/themes/oledDark.ts b/packages/lib/themes/oledDark.ts similarity index 100% rename from ReactNativeClient/lib/themes/oledDark.ts rename to packages/lib/themes/oledDark.ts diff --git a/ReactNativeClient/lib/themes/solarizedDark.ts b/packages/lib/themes/solarizedDark.ts similarity index 100% rename from ReactNativeClient/lib/themes/solarizedDark.ts rename to packages/lib/themes/solarizedDark.ts diff --git a/ReactNativeClient/lib/themes/solarizedLight.ts b/packages/lib/themes/solarizedLight.ts similarity index 100% rename from ReactNativeClient/lib/themes/solarizedLight.ts rename to packages/lib/themes/solarizedLight.ts diff --git a/ReactNativeClient/lib/themes/type.ts b/packages/lib/themes/type.ts similarity index 100% rename from ReactNativeClient/lib/themes/type.ts rename to packages/lib/themes/type.ts diff --git a/ReactNativeClient/lib/time-utils.js b/packages/lib/time.ts similarity index 71% rename from ReactNativeClient/lib/time-utils.js rename to packages/lib/time.ts index 2219777593..f2c79847f8 100644 --- a/ReactNativeClient/lib/time-utils.js +++ b/packages/lib/time.ts @@ -1,18 +1,17 @@ +import shim from './shim'; const moment = require('moment'); -const shim = require('lib/shim').default; class Time { - constructor() { - this.dateFormat_ = 'DD/MM/YYYY'; - this.timeFormat_ = 'HH:mm'; - this.locale_ = 'en-us'; - } + + private dateFormat_:string = 'DD/MM/YYYY'; + private timeFormat_:string = 'HH:mm'; + private locale_:string = 'en-us'; locale() { return this.locale_; } - setLocale(v) { + setLocale(v:string) { moment.locale(v); this.locale_ = v; } @@ -21,7 +20,7 @@ class Time { return this.dateFormat_; } - setDateFormat(v) { + setDateFormat(v:string) { this.dateFormat_ = v; } @@ -29,7 +28,7 @@ class Time { return this.timeFormat_; } - setTimeFormat(v) { + setTimeFormat(v:string) { this.timeFormat_ = v; } @@ -37,7 +36,7 @@ class Time { return this.timeFormat() ? this.timeFormat().includes('HH') : true; } - formatDateToLocal(date, format = null) { + formatDateToLocal(date:Date, format:string = null) { return this.formatMsToLocal(date.getTime(), format); } @@ -53,15 +52,15 @@ class Time { return Date.now(); } - unixMsToObject(ms) { + unixMsToObject(ms:number) { return new Date(ms); } - unixMsToS(ms) { + unixMsToS(ms:number) { return Math.floor(ms / 1000); } - unixMsToIso(ms) { + unixMsToIso(ms:number) { return ( `${moment .unix(ms / 1000) @@ -70,7 +69,7 @@ class Time { ); } - unixMsToIsoSec(ms) { + unixMsToIsoSec(ms:number) { return ( `${moment .unix(ms / 1000) @@ -79,20 +78,20 @@ class Time { ); } - unixMsToLocalDateTime(ms) { + unixMsToLocalDateTime(ms:number) { return moment.unix(ms / 1000).format('DD/MM/YYYY HH:mm'); } - unixMsToLocalHms(ms) { + unixMsToLocalHms(ms:number) { return moment.unix(ms / 1000).format('HH:mm:ss'); } - formatMsToLocal(ms, format = null) { + formatMsToLocal(ms:number, format:string = null) { if (format === null) format = this.dateTimeFormat(); return moment(ms).format(format); } - formatLocalToMs(localDateTime, format = null) { + formatLocalToMs(localDateTime:any, format:string = null) { if (format === null) format = this.dateTimeFormat(); const m = moment(localDateTime, format); if (m.isValid()) return m.toDate().getTime(); @@ -100,7 +99,7 @@ class Time { } // Mostly used as a utility function for the DateTime Electron component - anythingToDateTime(o, defaultValue = null) { + anythingToDateTime(o:any, defaultValue:Date = null) { if (o && o.toDate) return o.toDate(); if (!o) return defaultValue; let m = moment(o, time.dateTimeFormat()); @@ -109,7 +108,7 @@ class Time { return m.isValid() ? m.toDate() : defaultValue; } - msleep(ms) { + msleep(ms:number) { return new Promise((resolve) => { shim.setTimeout(() => { resolve(); @@ -117,17 +116,17 @@ class Time { }); } - sleep(seconds) { + sleep(seconds:number) { return this.msleep(seconds * 1000); } - goBackInTime(startDate, n, period) { + goBackInTime(startDate:any, n:number, period:any) { // period is a string (eg. "day", "week", "month", "year" ), n is an integer return moment(startDate).startOf(period).subtract(n, period).format('x'); } - goForwardInTime(startDate, n, period) { + goForwardInTime(startDate:any, n:number, period:any) { return moment(startDate).startOf(period).add(n, period).format('x'); } @@ -135,4 +134,4 @@ class Time { const time = new Time(); -module.exports = { time }; +export default time; diff --git a/packages/lib/tsconfig.json b/packages/lib/tsconfig.json new file mode 100644 index 0000000000..fc873e9110 --- /dev/null +++ b/packages/lib/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "include": [ + "**/*.ts", + "**/*.tsx", + ], + "exclude": [ + "**/node_modules", + ], +} \ No newline at end of file diff --git a/ReactNativeClient/lib/urlUtils.js b/packages/lib/urlUtils.js similarity index 96% rename from ReactNativeClient/lib/urlUtils.js rename to packages/lib/urlUtils.js index 98e7496533..d509716aed 100644 --- a/ReactNativeClient/lib/urlUtils.js +++ b/packages/lib/urlUtils.js @@ -1,5 +1,5 @@ -const { rtrimSlashes } = require('lib/path-utils'); -const { urlDecode } = require('lib/string-utils'); +const { rtrimSlashes } = require('./path-utils'); +const { urlDecode } = require('./string-utils'); const urlUtils = {}; diff --git a/ReactNativeClient/lib/uuid.ts b/packages/lib/uuid.ts similarity index 100% rename from ReactNativeClient/lib/uuid.ts rename to packages/lib/uuid.ts diff --git a/ReactNativeClient/lib/joplin-renderer/vendor/fountain.min.js b/packages/lib/vendor/fountain.min.js similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/vendor/fountain.min.js rename to packages/lib/vendor/fountain.min.js diff --git a/ReactNativeClient/lib/vendor/ntp-client.js b/packages/lib/vendor/ntp-client.js similarity index 100% rename from ReactNativeClient/lib/vendor/ntp-client.js rename to packages/lib/vendor/ntp-client.js diff --git a/ReactNativeClient/lib/vendor/sjcl-rn.js b/packages/lib/vendor/sjcl-rn.js similarity index 100% rename from ReactNativeClient/lib/vendor/sjcl-rn.js rename to packages/lib/vendor/sjcl-rn.js diff --git a/ReactNativeClient/lib/vendor/sjcl.js b/packages/lib/vendor/sjcl.js similarity index 99% rename from ReactNativeClient/lib/vendor/sjcl.js rename to packages/lib/vendor/sjcl.js index f869e2ce05..75a123d396 100644 --- a/ReactNativeClient/lib/vendor/sjcl.js +++ b/packages/lib/vendor/sjcl.js @@ -1,7 +1,7 @@ // https://github.com/bitwiseshiftleft/sjcl // Commit: 4fc74ff92fd6b836cc596cc0ee940ef6cc8db7c6 // Create non-minified version using: -// uglifyjs -b -- core/sjcl.js core/aes.js core/bitArray.js core/codecString.js core/codecHex.js core/codecBase32.js core/codecBase64.js core/codecBytes.js core/codecZ85.js core/sha256.js core/sha512.js core/sha1.js core/ccm.js core/ctr.js core/cbc.js core/ocb2.js core/ocb2progressive.js core/gcm.js core/hmac.js core/pbkdf2.js core/scrypt.js core/random.js core/convenience.js core/bn.js core/ecc.js core/srp.js core/ccmArrayBuffer.js core/codecArrayBuffer.js core/ripemd160.js core/exports.js > /var/www/joplin/ReactNativeClient/lib/vendor/sjcl.js +// uglifyjs -b -- core/sjcl.js core/aes.js core/bitArray.js core/codecString.js core/codecHex.js core/codecBase32.js core/codecBase64.js core/codecBytes.js core/codecZ85.js core/sha256.js core/sha512.js core/sha1.js core/ccm.js core/ctr.js core/cbc.js core/ocb2.js core/ocb2progressive.js core/gcm.js core/hmac.js core/pbkdf2.js core/scrypt.js core/random.js core/convenience.js core/bn.js core/ecc.js core/srp.js core/ccmArrayBuffer.js core/codecArrayBuffer.js core/ripemd160.js core/exports.js > /var/www/joplin/packages/app-mobile/lib/vendor/sjcl.js "use strict";var sjcl={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return"CORRUPT: "+this.message};this.message=a},invalid:function(a){this.toString=function(){return"INVALID: "+this.message};this.message=a},bug:function(a){this.toString=function(){return"BUG: "+this.message};this.message=a},notReady:function(a){this.toString=function(){return"NOT READY: "+this.message};this.message=a}}}; sjcl.cipher.aes=function(a){this.s[0][0][0]||this.O();var b,c,d,e,f=this.s[0][4],g=this.s[1];b=a.length;var h=1;if(4!==b&&6!==b&&8!==b)throw new sjcl.exception.invalid("invalid aes key size");this.b=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(0===a%b||8===b&&4===a%b)c=f[c>>>24]<<24^f[c>>16&255]<<16^f[c>>8&255]<<8^f[c&255],0===a%b&&(c=c<<8^c>>>24^h<<24,h=h<<1^283*(h>>7));d[a]=d[a-b]^c}for(b=0;a;b++,a--)c=d[b&3?a:a-4],e[b]=4>=a||4>b?c:g[0][f[c>>>24]]^g[1][f[c>>16&255]]^g[2][f[c>>8&255]]^g[3][f[c& 255]]}; diff --git a/ReactNativeClient/lib/versionInfo.ts b/packages/lib/versionInfo.ts similarity index 87% rename from ReactNativeClient/lib/versionInfo.ts rename to packages/lib/versionInfo.ts index 6b19f95e24..2eb3613afa 100644 --- a/ReactNativeClient/lib/versionInfo.ts +++ b/packages/lib/versionInfo.ts @@ -1,6 +1,6 @@ -import { _ } from 'lib/locale'; -const Setting = require('lib/models/Setting').default; -const { reg } = require('lib/registry.js'); +import { _ } from './locale'; +const Setting = require('./models/Setting').default; +const { reg } = require('./registry.js'); export default function versionInfo(packageInfo:any) { const p = packageInfo; diff --git a/ReactNativeClient/lib/welcomeAssets.js b/packages/lib/welcomeAssets.js similarity index 100% rename from ReactNativeClient/lib/welcomeAssets.js rename to packages/lib/welcomeAssets.js diff --git a/ReactNativeClient/lib/joplin-renderer/.gitignore b/packages/renderer/.gitignore similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/.gitignore rename to packages/renderer/.gitignore diff --git a/ReactNativeClient/lib/joplin-renderer/HtmlToHtml.js b/packages/renderer/HtmlToHtml.js similarity index 89% rename from ReactNativeClient/lib/joplin-renderer/HtmlToHtml.js rename to packages/renderer/HtmlToHtml.js index c798fa826a..44aeb10a18 100644 --- a/ReactNativeClient/lib/joplin-renderer/HtmlToHtml.js +++ b/packages/renderer/HtmlToHtml.js @@ -1,9 +1,11 @@ const htmlUtils = require('./htmlUtils'); const utils = require('./utils'); -const noteStyle = require('./noteStyle').default; -const Setting = require('lib/models/Setting').default; -const { themeStyle } = require('lib/theme'); -const InMemoryCache = require('lib/InMemoryCache').default; +// const noteStyle = require('./noteStyle').default; + +// TODO: fix +// const Setting = require('@joplinapp/lib/models/Setting').default; +// const { themeStyle } = require('@joplinapp/lib/theme'); +const InMemoryCache = require('./InMemoryCache').default; const md5 = require('md5'); // Renderered notes can potentially be quite large (for example @@ -94,8 +96,9 @@ class HtmlToHtml { }; } - const lightTheme = themeStyle(Setting.THEME_LIGHT); - let cssStrings = noteStyle(lightTheme); + // const lightTheme = themeStyle(Setting.THEME_LIGHT); + // let cssStrings = noteStyle(lightTheme); + let cssStrings = []; if (options.splitted) { const splitted = this.splitHtml(html); diff --git a/packages/renderer/InMemoryCache.ts b/packages/renderer/InMemoryCache.ts new file mode 100644 index 0000000000..aa1c6fbbef --- /dev/null +++ b/packages/renderer/InMemoryCache.ts @@ -0,0 +1,84 @@ +// There are plenty of packages for in-memory caching but each have their +// own gotchas and often have extra complexity which makes it work in one +// platform but not in another (for example, the use of long timeouts would +// be fine in Node but not in React Native). +// +// So this class implements a simple in-memory cache with support for TTL. +// Checking for expired keys is a bit inefficient since it doesn't rely on +// timers, so it's checking every time a value is set or retrieved. But it +// should be fine in most cases, as long as the class is not used at a massive +// scale. + +interface Record { + value: any, + expiredTime: number, +} + +interface Records { + [key:string]: Record; +} + +interface ExpirableKeys { + [key:string]: boolean, +} + +export default class Cache { + + private maxRecords_:number; + private records_:Records = {}; + private expirableKeys_:ExpirableKeys = {}; + private recordKeyHistory_:string[] = []; + + constructor(maxRecords:number = 50) { + this.maxRecords_ = maxRecords; + } + + private checkExpiredRecords() { + const now = Date.now(); + + for (const key in this.expirableKeys_) { + if (!this.records_[key]) { + delete this.expirableKeys_[key]; + } else { + if (this.records_[key].expiredTime <= now) { + delete this.records_[key]; + delete this.expirableKeys_[key]; + } + } + } + + while (this.recordKeyHistory_.length > this.maxRecords_) { + const key = this.recordKeyHistory_[0]; + delete this.records_[key]; + delete this.expirableKeys_[key]; + this.recordKeyHistory_.splice(0, 1); + } + } + + public value(key:string, defaultValue:any = undefined):any { + this.checkExpiredRecords(); + if (key in this.records_) return this.records_[key].value; + + return defaultValue; + } + + public setValue(key:string, value:any, ttl:number = 0) { + this.checkExpiredRecords(); + + this.records_[key] = { + value: value, + expiredTime: ttl ? Date.now() + ttl : 0, + }; + + const idx = this.recordKeyHistory_.indexOf(key); + if (idx >= 0) this.recordKeyHistory_.splice(idx, 1); + this.recordKeyHistory_.push(key); + + if (ttl) { + this.expirableKeys_[key] = true; + } else { + delete this.expirableKeys_[key]; + } + } + +} diff --git a/ReactNativeClient/lib/joplin-renderer/MarkupToHtml.ts b/packages/renderer/MarkupToHtml.ts similarity index 98% rename from ReactNativeClient/lib/joplin-renderer/MarkupToHtml.ts rename to packages/renderer/MarkupToHtml.ts index d189ffb865..3cec7c7ecf 100644 --- a/ReactNativeClient/lib/joplin-renderer/MarkupToHtml.ts +++ b/packages/renderer/MarkupToHtml.ts @@ -1,6 +1,6 @@ const MdToHtml = require('./MdToHtml').default; const HtmlToHtml = require('./HtmlToHtml'); -const htmlUtils = require('lib/htmlUtils'); +const htmlUtils = require('./htmlUtils'); const MarkdownIt = require('markdown-it'); export enum MarkupLanguage { diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml.ts b/packages/renderer/MdToHtml.ts similarity index 98% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml.ts rename to packages/renderer/MdToHtml.ts index 591e019a27..0f203de651 100644 --- a/ReactNativeClient/lib/joplin-renderer/MdToHtml.ts +++ b/packages/renderer/MdToHtml.ts @@ -1,4 +1,4 @@ -import InMemoryCache from 'lib/InMemoryCache'; +import InMemoryCache from './InMemoryCache'; import noteStyle from './noteStyle'; import { fileExtension } from './pathUtils'; @@ -318,9 +318,14 @@ export default class MdToHtml { return output; } + // The string we are looking for is:

\n private removeMarkdownItWrappingParagraph_(html:string) { - //

\n if (html.length < 8) return html; + + // If there are multiple

tags, we keep them because it's multiple lines + // and removing the first and last tag will result in invalid HTML. + if ((html.match(/<\/p>/g) || []).length > 1) return html; + if (html.substr(0, 3) !== '

') return html; if (html.slice(-5) !== '

\n') return html; return html.substring(3, html.length - 5); @@ -376,7 +381,7 @@ export default class MdToHtml { const markdownIt = new MarkdownIt({ breaks: !this.pluginEnabled('softbreaks'), typographer: this.pluginEnabled('typographer'), - linkify: true, + // linkify: true, html: true, highlight: (str:string, lang:string) => { let outputCodeHtml = ''; diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.ts b/packages/renderer/MdToHtml/rules/checkbox.ts similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.ts rename to packages/renderer/MdToHtml/rules/checkbox.ts diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/code_inline.ts b/packages/renderer/MdToHtml/rules/code_inline.ts similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/code_inline.ts rename to packages/renderer/MdToHtml/rules/code_inline.ts diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fence.ts b/packages/renderer/MdToHtml/rules/fence.ts similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fence.ts rename to packages/renderer/MdToHtml/rules/fence.ts diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fountain.ts b/packages/renderer/MdToHtml/rules/fountain.ts similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fountain.ts rename to packages/renderer/MdToHtml/rules/fountain.ts diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/highlight_keywords.ts b/packages/renderer/MdToHtml/rules/highlight_keywords.ts similarity index 96% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/highlight_keywords.ts rename to packages/renderer/MdToHtml/rules/highlight_keywords.ts index 6a80d0ac49..fc5b1cd169 100644 --- a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/highlight_keywords.ts +++ b/packages/renderer/MdToHtml/rules/highlight_keywords.ts @@ -1,6 +1,6 @@ // This plugin is used only on mobile, to highlight search results. -import { RuleOptions } from 'lib/joplin-renderer/MdToHtml'; +import { RuleOptions } from '../../MdToHtml'; const stringUtils = require('../../stringUtils.js'); const md5 = require('md5'); diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/html_image.ts b/packages/renderer/MdToHtml/rules/html_image.ts similarity index 96% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/html_image.ts rename to packages/renderer/MdToHtml/rules/html_image.ts index 4bd86be0af..1e86db6009 100644 --- a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/html_image.ts +++ b/packages/renderer/MdToHtml/rules/html_image.ts @@ -1,4 +1,4 @@ -import { RuleOptions } from 'lib/joplin-renderer/MdToHtml'; +import { RuleOptions } from '../../MdToHtml'; const htmlUtils = require('../../htmlUtils.js'); const utils = require('../../utils'); diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/image.ts b/packages/renderer/MdToHtml/rules/image.ts similarity index 92% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/image.ts rename to packages/renderer/MdToHtml/rules/image.ts index 9a69b03c90..492f0fe185 100644 --- a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/image.ts +++ b/packages/renderer/MdToHtml/rules/image.ts @@ -1,6 +1,5 @@ -import { RuleOptions } from 'lib/joplin-renderer/MdToHtml'; +import { RuleOptions } from '../../MdToHtml'; -// const Resource = require('lib/models/Resource.js'); const utils = require('../../utils'); const htmlUtils = require('../../htmlUtils.js'); diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/katex.ts b/packages/renderer/MdToHtml/rules/katex.ts similarity index 99% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/katex.ts rename to packages/renderer/MdToHtml/rules/katex.ts index fecd132b58..e17c772e81 100644 --- a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/katex.ts +++ b/packages/renderer/MdToHtml/rules/katex.ts @@ -1,4 +1,4 @@ -import { RuleOptions } from 'lib/joplin-renderer/MdToHtml'; +import { RuleOptions } from '../../MdToHtml'; let katex = require('katex'); const md5 = require('md5'); diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/katex_mhchem.js b/packages/renderer/MdToHtml/rules/katex_mhchem.js similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/katex_mhchem.js rename to packages/renderer/MdToHtml/rules/katex_mhchem.js diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/link_open.ts b/packages/renderer/MdToHtml/rules/link_open.ts similarity index 82% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/link_open.ts rename to packages/renderer/MdToHtml/rules/link_open.ts index 5e77343222..0fc7c8e06b 100644 --- a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/link_open.ts +++ b/packages/renderer/MdToHtml/rules/link_open.ts @@ -1,4 +1,4 @@ -import { RuleOptions } from 'lib/joplin-renderer/MdToHtml'; +import { RuleOptions } from '../../MdToHtml'; const Entities = require('html-entities').AllHtmlEntities; const htmlentities = new Entities().encode; @@ -72,11 +72,24 @@ function plugin(markdownIt:any, ruleOptions:RuleOptions) { if (hrefAttr.indexOf('#') === 0 && href.indexOf('#') === 0) js = ''; // If it's an internal anchor, don't add any JS since the webview is going to handle navigating to the right place + const attrHtml = []; + attrHtml.push('data-from-md'); + if (resourceIdAttr) attrHtml.push(resourceIdAttr); + if (title) attrHtml.push(`title='${htmlentities(title)}'`); + if (mime) attrHtml.push(`type='${htmlentities(mime)}'`); + if (ruleOptions.plainResourceRendering || ruleOptions.linkRenderingType === 2) { - return `
`; + icon = ''; + attrHtml.push(`href='${htmlentities(href)}'`); + + // return ``; } else { - return `${icon}`; + attrHtml.push(`href='${hrefAttr}'`); + if (js) attrHtml.push(js); + // return `${icon}`; } + + return `${icon}`; }; } diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.ts b/packages/renderer/MdToHtml/rules/mermaid.ts similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.ts rename to packages/renderer/MdToHtml/rules/mermaid.ts diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid_render.js b/packages/renderer/MdToHtml/rules/mermaid_render.js similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid_render.js rename to packages/renderer/MdToHtml/rules/mermaid_render.js diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.ts b/packages/renderer/MdToHtml/rules/sanitize_html.ts similarity index 95% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.ts rename to packages/renderer/MdToHtml/rules/sanitize_html.ts index 4a1151632b..988a04b793 100644 --- a/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.ts +++ b/packages/renderer/MdToHtml/rules/sanitize_html.ts @@ -1,4 +1,4 @@ -import { RuleOptions } from 'lib/joplin-renderer/MdToHtml'; +import { RuleOptions } from '../../MdToHtml'; const md5 = require('md5'); const htmlUtils = require('../../htmlUtils'); diff --git a/ReactNativeClient/lib/joplin-renderer/MdToHtml/setupLinkify.js b/packages/renderer/MdToHtml/setupLinkify.js similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/MdToHtml/setupLinkify.js rename to packages/renderer/MdToHtml/setupLinkify.js diff --git a/ReactNativeClient/lib/joplin-renderer/README.md b/packages/renderer/README.md similarity index 91% rename from ReactNativeClient/lib/joplin-renderer/README.md rename to packages/renderer/README.md index 47ccf8a9f8..405a79e98e 100644 --- a/ReactNativeClient/lib/joplin-renderer/README.md +++ b/packages/renderer/README.md @@ -53,6 +53,10 @@ function loadPluginAssets(assets) { ## Development +# Updating a markdown-it plugin + +Whenever updating a Markdown-it plugin, such as Katex or Mermaid, make sure to run `npm run buildAssets`, which will compile the CSS and JS for use in the Joplin applications. + ### Adding asset files A plugin (or rule) can have any number of assets, such as CSS or font files, associated with it. To add an asset to a plugin, follow these steps: diff --git a/ReactNativeClient/lib/joplin-renderer/Tools/buildAssets.js b/packages/renderer/Tools/buildAssets.js similarity index 96% rename from ReactNativeClient/lib/joplin-renderer/Tools/buildAssets.js rename to packages/renderer/Tools/buildAssets.js index e46e2f139d..ce785f375c 100644 --- a/ReactNativeClient/lib/joplin-renderer/Tools/buildAssets.js +++ b/packages/renderer/Tools/buildAssets.js @@ -1,5 +1,11 @@ const fs = require('fs-extra'); -const { dirname } = require('../pathUtils'); + +function dirname(path) { + if (!path) throw new Error('Path is empty'); + const s = path.split(/\/|\\/); + s.pop(); + return s.join('/'); +} const rootDir = dirname(__dirname); const assetsDir = `${rootDir}/assets`; diff --git a/ReactNativeClient/lib/joplin-renderer/assets/highlight.js/atom-one-dark-reasonable.css b/packages/renderer/assets/highlight.js/atom-one-dark-reasonable.css similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/highlight.js/atom-one-dark-reasonable.css rename to packages/renderer/assets/highlight.js/atom-one-dark-reasonable.css diff --git a/ReactNativeClient/lib/joplin-renderer/assets/highlight.js/atom-one-light.css b/packages/renderer/assets/highlight.js/atom-one-light.css similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/highlight.js/atom-one-light.css rename to packages/renderer/assets/highlight.js/atom-one-light.css diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_AMS-Regular.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_AMS-Regular.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_AMS-Regular.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_AMS-Regular.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Caligraphic-Bold.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Caligraphic-Bold.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Caligraphic-Bold.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Caligraphic-Bold.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Caligraphic-Regular.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Caligraphic-Regular.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Caligraphic-Regular.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Caligraphic-Regular.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Fraktur-Bold.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Fraktur-Bold.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Fraktur-Bold.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Fraktur-Bold.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Fraktur-Regular.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Fraktur-Regular.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Fraktur-Regular.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Fraktur-Regular.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Main-Bold.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Main-Bold.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Main-Bold.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Main-Bold.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Main-BoldItalic.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Main-BoldItalic.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Main-BoldItalic.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Main-BoldItalic.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Main-Italic.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Main-Italic.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Main-Italic.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Main-Italic.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Main-Regular.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Main-Regular.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Main-Regular.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Main-Regular.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Math-BoldItalic.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Math-BoldItalic.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Math-BoldItalic.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Math-BoldItalic.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Math-Italic.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Math-Italic.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Math-Italic.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Math-Italic.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_SansSerif-Bold.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_SansSerif-Bold.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_SansSerif-Bold.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_SansSerif-Bold.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_SansSerif-Italic.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_SansSerif-Italic.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_SansSerif-Italic.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_SansSerif-Italic.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_SansSerif-Regular.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_SansSerif-Regular.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_SansSerif-Regular.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_SansSerif-Regular.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Script-Regular.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Script-Regular.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Script-Regular.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Script-Regular.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Size1-Regular.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Size1-Regular.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Size1-Regular.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Size1-Regular.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Size2-Regular.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Size2-Regular.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Size2-Regular.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Size2-Regular.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Size3-Regular.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Size3-Regular.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Size3-Regular.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Size3-Regular.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Size4-Regular.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Size4-Regular.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Size4-Regular.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Size4-Regular.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Typewriter-Regular.woff2 b/packages/renderer/assets/katex/fonts/KaTeX_Typewriter-Regular.woff2 similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/fonts/KaTeX_Typewriter-Regular.woff2 rename to packages/renderer/assets/katex/fonts/KaTeX_Typewriter-Regular.woff2 diff --git a/ReactNativeClient/lib/joplin-renderer/assets/katex/katex.css b/packages/renderer/assets/katex/katex.css similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/katex/katex.css rename to packages/renderer/assets/katex/katex.css diff --git a/ReactNativeClient/lib/joplin-renderer/assets/mermaid/mermaid.min.js b/packages/renderer/assets/mermaid/mermaid.min.js similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/mermaid/mermaid.min.js rename to packages/renderer/assets/mermaid/mermaid.min.js diff --git a/ReactNativeClient/lib/joplin-renderer/assets/mermaid/mermaid_render.js b/packages/renderer/assets/mermaid/mermaid_render.js similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assets/mermaid/mermaid_render.js rename to packages/renderer/assets/mermaid/mermaid_render.js diff --git a/ReactNativeClient/lib/joplin-renderer/assetsToHeaders.js b/packages/renderer/assetsToHeaders.js similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/assetsToHeaders.js rename to packages/renderer/assetsToHeaders.js diff --git a/ReactNativeClient/lib/joplin-renderer/defaultNoteStyle.js b/packages/renderer/defaultNoteStyle.js similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/defaultNoteStyle.js rename to packages/renderer/defaultNoteStyle.js diff --git a/ReactNativeClient/lib/joplin-renderer/htmlUtils.js b/packages/renderer/htmlUtils.js similarity index 84% rename from ReactNativeClient/lib/joplin-renderer/htmlUtils.js rename to packages/renderer/htmlUtils.js index a9581f70aa..08c2447014 100644 --- a/ReactNativeClient/lib/joplin-renderer/htmlUtils.js +++ b/packages/renderer/htmlUtils.js @@ -1,5 +1,6 @@ const Entities = require('html-entities').AllHtmlEntities; const htmlentities = new Entities().encode; +const htmlparser2 = require('@joplinapp/fork-htmlparser2'); // [\s\S] instead of . for multiline matching // https://stackoverflow.com/a/16119722/561309 @@ -69,6 +70,42 @@ class HtmlUtils { return selfClosingElements.includes(tagName.toLowerCase()); } + // TODO: copied from @joplinapp/lib + stripHtml(html) { + const output = []; + + const tagStack = []; + + const currentTag = () => { + if (!tagStack.length) return ''; + return tagStack[tagStack.length - 1]; + }; + + const disallowedTags = ['script', 'style', 'head', 'iframe', 'frameset', 'frame', 'object', 'base']; + + const parser = new htmlparser2.Parser({ + + onopentag: (name) => { + tagStack.push(name.toLowerCase()); + }, + + ontext: (decodedText) => { + if (disallowedTags.includes(currentTag())) return; + output.push(decodedText); + }, + + onclosetag: (name) => { + if (currentTag() === name.toLowerCase()) tagStack.pop(); + }, + + }, { decodeEntities: true }); + + parser.write(html); + parser.end(); + + return output.join('').replace(/\s+/g, ' '); + } + sanitizeHtml(html, options = null) { options = Object.assign({}, { // If true, adds a "jop-noMdConv" class to all the tags. @@ -76,8 +113,6 @@ class HtmlUtils { addNoMdConvClass: false, }, options); - const htmlparser2 = require('htmlparser2'); - const output = []; const tagStack = []; diff --git a/packages/renderer/index.ts b/packages/renderer/index.ts new file mode 100644 index 0000000000..0366919b8b --- /dev/null +++ b/packages/renderer/index.ts @@ -0,0 +1,16 @@ +import MarkupToHtml, { MarkupLanguage } from './MarkupToHtml'; +import MdToHtml from './MdToHtml'; +const HtmlToHtml = require('./HtmlToHtml'); +const setupLinkify = require('./MdToHtml/setupLinkify'); +const assetsToHeaders = require('./assetsToHeaders'); +const utils = require('./utils'); + +export { + MarkupToHtml, + MarkupLanguage, + MdToHtml, + HtmlToHtml, + setupLinkify, + assetsToHeaders, + utils, +}; diff --git a/packages/renderer/lib/renderer.js b/packages/renderer/lib/renderer.js new file mode 100644 index 0000000000..f309b8b559 --- /dev/null +++ b/packages/renderer/lib/renderer.js @@ -0,0 +1,7 @@ +'use strict'; + +module.exports = renderer; + +function renderer() { + // TODO +} diff --git a/ReactNativeClient/lib/joplin-renderer/noteStyle.ts b/packages/renderer/noteStyle.ts similarity index 98% rename from ReactNativeClient/lib/joplin-renderer/noteStyle.ts rename to packages/renderer/noteStyle.ts index 4041b37fb0..fbc5b2929b 100644 --- a/ReactNativeClient/lib/joplin-renderer/noteStyle.ts +++ b/packages/renderer/noteStyle.ts @@ -1,4 +1,11 @@ -const { formatCssSize } = require('lib/string-utils'); + +// TODO: copied from string-utils +function formatCssSize(v:any):string { + if (typeof v === 'string') { + if (v.includes('px') || v.includes('em') || v.includes('%')) return v; + } + return `${v}px`; +} export default function(theme:any) { theme = theme ? theme : {}; diff --git a/ReactNativeClient/lib/joplin-renderer/package-lock.json b/packages/renderer/package-lock.json similarity index 98% rename from ReactNativeClient/lib/joplin-renderer/package-lock.json rename to packages/renderer/package-lock.json index 7842a4da57..836bedc87c 100644 --- a/ReactNativeClient/lib/joplin-renderer/package-lock.json +++ b/packages/renderer/package-lock.json @@ -1,6 +1,6 @@ { - "name": "joplin-renderer", - "version": "1.0.8", + "name": "@joplinapp/renderer", + "version": "1.0.17", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -109,6 +109,12 @@ "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-3.1.0.tgz", "integrity": "sha512-GcIY79elgB+azP74j8vqkiXz8xLFfIzbQJdlwOPisgbKT00tviJQuEghOXSMVxJ00HoYJbGswr4kcllUc4xCcg==" }, + "@types/node": { + "version": "14.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", + "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==", + "dev": true + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -144,11 +150,6 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base-64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", - "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=" - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1050,6 +1051,12 @@ "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-1.1.1.tgz", "integrity": "sha512-ikUlS+/BcImLhNYyIgZcEmq4byc31QpC+46/6Jm5ECWkVFhf8SM2Fp/0pMVXPX6vk45SMCwrP4Taxucne8I0VA==" }, + "typescript": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", + "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", + "dev": true + }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", diff --git a/ReactNativeClient/lib/joplin-renderer/package.json b/packages/renderer/package.json similarity index 64% rename from ReactNativeClient/lib/joplin-renderer/package.json rename to packages/renderer/package.json index 5f53353931..ad8c0ca5da 100644 --- a/ReactNativeClient/lib/joplin-renderer/package.json +++ b/packages/renderer/package.json @@ -1,21 +1,28 @@ { - "name": "joplin-renderer", - "version": "1.0.8", + "name": "@joplinapp/renderer", + "version": "1.0.17", "description": "The Joplin note renderer, used the mobile and desktop application", - "repository": "https://github.com/laurent22/joplin/tree/dev/ReactNativeClient/lib/joplin-renderer", + "repository": "https://github.com/laurent22/joplin/tree/dev/packages/app-mobile/lib/joplin-renderer", "main": "index.js", + "types": "index.d.ts", + "publishConfig": { + "access": "public" + }, "scripts": { - "test": "jasmine --config=tests/support/jasmine.json", "buildAssets": "node Tools/buildAssets.js", - "postinstall": "npm run buildAssets" + "prepublishOnly": "npm run buildAssets", + "tsc": "node node_modules/typescript/bin/tsc --project tsconfig.json", + "watch": "node node_modules/typescript/bin/tsc --watch --project tsconfig.json" }, "author": "", "license": "MIT", "devDependencies": { - "jasmine": "^3.5.0" + "@types/node": "^14.14.6", + "jasmine": "^3.5.0", + "typescript": "^4.0.5" }, "dependencies": { - "base-64": "^0.1.0", + "@joplinapp/fork-htmlparser2": "^4.1.8", "font-awesome-filetypes": "^2.1.0", "fs-extra": "^8.1.0", "highlight.js": "^10.2.1", diff --git a/ReactNativeClient/lib/joplin-renderer/pathUtils.ts b/packages/renderer/pathUtils.ts similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/pathUtils.ts rename to packages/renderer/pathUtils.ts diff --git a/ReactNativeClient/lib/joplin-renderer/publish.sh b/packages/renderer/publish.sh similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/publish.sh rename to packages/renderer/publish.sh diff --git a/ReactNativeClient/lib/joplin-renderer/stringUtils.js b/packages/renderer/stringUtils.js similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/stringUtils.js rename to packages/renderer/stringUtils.js diff --git a/ReactNativeClient/lib/joplin-renderer/tests/support/jasmine.json b/packages/renderer/tests/support/jasmine.json similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/tests/support/jasmine.json rename to packages/renderer/tests/support/jasmine.json diff --git a/ReactNativeClient/lib/joplin-renderer/tests/test-utils.js b/packages/renderer/tests/test-utils.js similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/tests/test-utils.js rename to packages/renderer/tests/test-utils.js diff --git a/packages/renderer/tsconfig.json b/packages/renderer/tsconfig.json new file mode 100644 index 0000000000..1150751741 --- /dev/null +++ b/packages/renderer/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "include": [ + "**/*.ts", + "**/*.tsx", + ], + "exclude": [ + "**/node_modules", + ], +} \ No newline at end of file diff --git a/ReactNativeClient/lib/joplin-renderer/urlUtils.js b/packages/renderer/urlUtils.js similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/urlUtils.js rename to packages/renderer/urlUtils.js diff --git a/ReactNativeClient/lib/joplin-renderer/utils.js b/packages/renderer/utils.js similarity index 100% rename from ReactNativeClient/lib/joplin-renderer/utils.js rename to packages/renderer/utils.js diff --git a/ReactNativeClient/lib/vendor/fountain.min.js b/packages/renderer/vendor/fountain.min.js similarity index 100% rename from ReactNativeClient/lib/vendor/fountain.min.js rename to packages/renderer/vendor/fountain.min.js diff --git a/Tools/.gitignore b/packages/tools/.gitignore similarity index 100% rename from Tools/.gitignore rename to packages/tools/.gitignore diff --git a/Tools/PortableAppsLauncher/App/AppInfo/Launcher/JoplinPortable.ini b/packages/tools/PortableAppsLauncher/App/AppInfo/Launcher/JoplinPortable.ini similarity index 100% rename from Tools/PortableAppsLauncher/App/AppInfo/Launcher/JoplinPortable.ini rename to packages/tools/PortableAppsLauncher/App/AppInfo/Launcher/JoplinPortable.ini diff --git a/Tools/PortableAppsLauncher/App/AppInfo/Launcher/splash.jpg b/packages/tools/PortableAppsLauncher/App/AppInfo/Launcher/splash.jpg similarity index 100% rename from Tools/PortableAppsLauncher/App/AppInfo/Launcher/splash.jpg rename to packages/tools/PortableAppsLauncher/App/AppInfo/Launcher/splash.jpg diff --git a/Tools/PortableAppsLauncher/App/AppInfo/appicon.ico b/packages/tools/PortableAppsLauncher/App/AppInfo/appicon.ico similarity index 100% rename from Tools/PortableAppsLauncher/App/AppInfo/appicon.ico rename to packages/tools/PortableAppsLauncher/App/AppInfo/appicon.ico diff --git a/Tools/PortableAppsLauncher/App/AppInfo/appicon_128.png b/packages/tools/PortableAppsLauncher/App/AppInfo/appicon_128.png similarity index 100% rename from Tools/PortableAppsLauncher/App/AppInfo/appicon_128.png rename to packages/tools/PortableAppsLauncher/App/AppInfo/appicon_128.png diff --git a/Tools/PortableAppsLauncher/App/AppInfo/appicon_16.png b/packages/tools/PortableAppsLauncher/App/AppInfo/appicon_16.png similarity index 100% rename from Tools/PortableAppsLauncher/App/AppInfo/appicon_16.png rename to packages/tools/PortableAppsLauncher/App/AppInfo/appicon_16.png diff --git a/Tools/PortableAppsLauncher/App/AppInfo/appicon_32.png b/packages/tools/PortableAppsLauncher/App/AppInfo/appicon_32.png similarity index 100% rename from Tools/PortableAppsLauncher/App/AppInfo/appicon_32.png rename to packages/tools/PortableAppsLauncher/App/AppInfo/appicon_32.png diff --git a/Tools/PortableAppsLauncher/App/AppInfo/appicon_75.png b/packages/tools/PortableAppsLauncher/App/AppInfo/appicon_75.png similarity index 100% rename from Tools/PortableAppsLauncher/App/AppInfo/appicon_75.png rename to packages/tools/PortableAppsLauncher/App/AppInfo/appicon_75.png diff --git a/Tools/PortableAppsLauncher/App/AppInfo/appinfo.ini b/packages/tools/PortableAppsLauncher/App/AppInfo/appinfo.ini similarity index 100% rename from Tools/PortableAppsLauncher/App/AppInfo/appinfo.ini rename to packages/tools/PortableAppsLauncher/App/AppInfo/appinfo.ini diff --git a/Tools/PortableAppsLauncher/App/DefaultData/keepme b/packages/tools/PortableAppsLauncher/App/DefaultData/keepme similarity index 100% rename from Tools/PortableAppsLauncher/App/DefaultData/keepme rename to packages/tools/PortableAppsLauncher/App/DefaultData/keepme diff --git a/Tools/PortableAppsLauncher/App/Joplin/keepme b/packages/tools/PortableAppsLauncher/App/Joplin/keepme similarity index 100% rename from Tools/PortableAppsLauncher/App/Joplin/keepme rename to packages/tools/PortableAppsLauncher/App/Joplin/keepme diff --git a/Tools/PortableAppsLauncher/App/readme.txt b/packages/tools/PortableAppsLauncher/App/readme.txt similarity index 100% rename from Tools/PortableAppsLauncher/App/readme.txt rename to packages/tools/PortableAppsLauncher/App/readme.txt diff --git a/Tools/PortableAppsLauncher/JoplinPortable.exe b/packages/tools/PortableAppsLauncher/JoplinPortable.exe similarity index 100% rename from Tools/PortableAppsLauncher/JoplinPortable.exe rename to packages/tools/PortableAppsLauncher/JoplinPortable.exe diff --git a/Tools/PortableAppsLauncher/Other/Help/images/donation_button.png b/packages/tools/PortableAppsLauncher/Other/Help/images/donation_button.png similarity index 100% rename from Tools/PortableAppsLauncher/Other/Help/images/donation_button.png rename to packages/tools/PortableAppsLauncher/Other/Help/images/donation_button.png diff --git a/Tools/PortableAppsLauncher/Other/Help/images/favicon.ico b/packages/tools/PortableAppsLauncher/Other/Help/images/favicon.ico similarity index 100% rename from Tools/PortableAppsLauncher/Other/Help/images/favicon.ico rename to packages/tools/PortableAppsLauncher/Other/Help/images/favicon.ico diff --git a/Tools/PortableAppsLauncher/Other/Help/images/help_background_footer.png b/packages/tools/PortableAppsLauncher/Other/Help/images/help_background_footer.png similarity index 100% rename from Tools/PortableAppsLauncher/Other/Help/images/help_background_footer.png rename to packages/tools/PortableAppsLauncher/Other/Help/images/help_background_footer.png diff --git a/Tools/PortableAppsLauncher/Other/Help/images/help_background_header.png b/packages/tools/PortableAppsLauncher/Other/Help/images/help_background_header.png similarity index 100% rename from Tools/PortableAppsLauncher/Other/Help/images/help_background_header.png rename to packages/tools/PortableAppsLauncher/Other/Help/images/help_background_header.png diff --git a/Tools/PortableAppsLauncher/Other/Help/images/help_logo_top.png b/packages/tools/PortableAppsLauncher/Other/Help/images/help_logo_top.png similarity index 100% rename from Tools/PortableAppsLauncher/Other/Help/images/help_logo_top.png rename to packages/tools/PortableAppsLauncher/Other/Help/images/help_logo_top.png diff --git a/Tools/PortableAppsLauncher/Other/Source/AppNamePortable.ini b/packages/tools/PortableAppsLauncher/Other/Source/AppNamePortable.ini similarity index 100% rename from Tools/PortableAppsLauncher/Other/Source/AppNamePortable.ini rename to packages/tools/PortableAppsLauncher/Other/Source/AppNamePortable.ini diff --git a/Tools/PortableAppsLauncher/Other/Source/License.txt b/packages/tools/PortableAppsLauncher/Other/Source/License.txt similarity index 100% rename from Tools/PortableAppsLauncher/Other/Source/License.txt rename to packages/tools/PortableAppsLauncher/Other/Source/License.txt diff --git a/Tools/PortableAppsLauncher/Other/Source/Readme.txt b/packages/tools/PortableAppsLauncher/Other/Source/Readme.txt similarity index 100% rename from Tools/PortableAppsLauncher/Other/Source/Readme.txt rename to packages/tools/PortableAppsLauncher/Other/Source/Readme.txt diff --git a/Tools/PortableAppsLauncher/help.html b/packages/tools/PortableAppsLauncher/help.html similarity index 100% rename from Tools/PortableAppsLauncher/help.html rename to packages/tools/PortableAppsLauncher/help.html diff --git a/packages/tools/README.md b/packages/tools/README.md new file mode 100644 index 0000000000..246c8c1fdb --- /dev/null +++ b/packages/tools/README.md @@ -0,0 +1,3 @@ +# @joplinapp/tools + +Various Joplin-related tools and helpers to build the apps, the website, etc. \ No newline at end of file diff --git a/packages/tools/absolute-to-relative-paths.js b/packages/tools/absolute-to-relative-paths.js new file mode 100644 index 0000000000..1305fe41ae --- /dev/null +++ b/packages/tools/absolute-to-relative-paths.js @@ -0,0 +1,48 @@ +const glob = require('glob'); +const fs = require('fs-extra'); +const dirname = require('path').dirname; +const relative = require('relative'); + +const libDir = `${dirname(__dirname)}/lib`; + +// function getBasename(p) { +// const pieces = p.split('/'); +// pieces.pop(); +// return pieces.join('/'); +// } + +function toLinuxPath(p) { + return p.replace(/\\/g, '/'); +} + +function getRelativePath(from, to) { + let p = relative(from, to); + if (p.indexOf('.') !== 0) p = `./${p}`; + return toLinuxPath(p); +} + +async function main() { + const files = glob.sync(`${libDir}{/**/*.ts,/**/*.tsx,/**/*.js}`, { + ignore: [ + '**/node_modules/**', + '**/*.d.ts', + ], + }).map(f => f.substr(libDir.length + 1)); + + for (const file of files) { + const content = await fs.readFile(`${libDir}/${file}`, 'utf8'); + + const newContent = content.replace(/('|")(inner\/lib\/.*)('|")/g, (_matched, p1, p2, p3) => { + const absoluteRequirePath = p2.substr(10); + const relativePath = getRelativePath(file, absoluteRequirePath); + return p1 + relativePath + p3; + }); + + await fs.writeFile(`${libDir}/${file}`, newContent, 'utf8'); + } +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/Tools/build-all.sh b/packages/tools/build-all.sh similarity index 71% rename from Tools/build-all.sh rename to packages/tools/build-all.sh index d508957a13..2677c476dd 100755 --- a/Tools/build-all.sh +++ b/packages/tools/build-all.sh @@ -3,13 +3,13 @@ set -e ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -echo "---------------------------------------------------" -echo "Rebuild API doc..." -echo "---------------------------------------------------" -cd "$ROOT_DIR/../CliClient" -API_DOC="$(npm run --silent start -- apidoc)" -echo "$API_DOC" > "$ROOT_DIR/../readme/api/references/rest_api.md" -cd "$ROOT_DIR" +# echo "---------------------------------------------------" +# echo "Rebuild API doc..." +# echo "---------------------------------------------------" +# cd "$ROOT_DIR/../packages/app-cli" +# API_DOC="$(npm run --silent start -- apidoc)" +# echo "$API_DOC" > "$ROOT_DIR/../readme/api/references/rest_api.md" +# cd "$ROOT_DIR" echo "---------------------------------------------------" echo "$ROOT_DIR/update-readme-download.js..." @@ -26,10 +26,11 @@ echo "$ROOT_DIR/build-welcome.js..." echo "---------------------------------------------------" node "$ROOT_DIR/build-welcome.js" +cd "$ROOT_DIR/.." echo "---------------------------------------------------" -echo "$ROOT_DIR/build-website.js..." +echo "npm run buildWebsite..." echo "---------------------------------------------------" -node "$ROOT_DIR/build-website.js" +npm run buildWebsite echo "---------------------------------------------------" echo "Commit changes..." diff --git a/Tools/build-release-stats.js b/packages/tools/build-release-stats.js similarity index 96% rename from Tools/build-release-stats.js rename to packages/tools/build-release-stats.js index 10eeb8af3d..6ed00d7fa1 100644 --- a/Tools/build-release-stats.js +++ b/packages/tools/build-release-stats.js @@ -1,11 +1,9 @@ /* eslint-disable require-atomic-updates */ -require('app-module-path').addPath(`${__dirname}/../ReactNativeClient`); - const fetch = require('node-fetch'); const fs = require('fs-extra'); -const { dirname } = require('lib/path-utils'); -const markdownUtils = require('lib/markdownUtils').default; +const { dirname } = require('@joplinapp/lib/path-utils'); +const markdownUtils = require('@joplinapp/lib/markdownUtils').default; const rootDir = dirname(__dirname); diff --git a/Tools/build-translation.js b/packages/tools/build-translation.js similarity index 83% rename from Tools/build-translation.js rename to packages/tools/build-translation.js index 7e60e94936..d89cb229f0 100644 --- a/Tools/build-translation.js +++ b/packages/tools/build-translation.js @@ -5,22 +5,17 @@ // sudo apt install gettext // sudo apt install translate-toolkit -require('app-module-path').addPath(`${__dirname}/../ReactNativeClient`); +const rootDir = `${__dirname}/../..`; -const rootDir = `${__dirname}/..`; - -const { filename, fileExtension } = require(`${rootDir}/ReactNativeClient/lib/path-utils.js`); -const markdownUtils = require(`${rootDir}/ReactNativeClient/lib/markdownUtils`).default; +const markdownUtils = require('@joplinapp/lib/markdownUtils').default; const fs = require('fs-extra'); const gettextParser = require('gettext-parser'); -const cliDir = `${rootDir}/CliClient`; -const cliLocalesDir = `${cliDir}/locales`; -const rnDir = `${rootDir}/ReactNativeClient`; -const electronDir = `${rootDir}/ElectronClient`; +const localesDir = `${__dirname}/locales`; +const libDir = `${rootDir}/packages/lib`; -const { execCommand, isMac, insertContentIntoFile } = require('./tool-utils.js'); -const { countryDisplayName, countryCodeOnly } = require('lib/locale'); +const { execCommand, isMac, insertContentIntoFile, filename, fileExtension } = require('./tool-utils.js'); +const { countryDisplayName, countryCodeOnly } = require('@joplinapp/lib/locale'); function parsePoFile(filePath) { const content = fs.readFileSync(filePath); @@ -84,39 +79,36 @@ async function createPotFile(potFilePath) { const excludedDirs = [ './.git/*', './.github/*', + './**/node_modules/*', './Assets/*', - './CliClient/build/*', - './CliClient/locales-build/*', - './CliClient/locales/*', - './CliClient/node_modules/*', - './CliClient/tests-build/*', - './CliClient/tests/*', - './Clipper/*', './docs/*', - './ElectronClient/dist/*', - './ElectronClient/gui/style/*', - './ElectronClient/lib/*', - './ElectronClient/node_modules/*', - './ElectronClient/pluginAssets/*', - './ElectronClient/tools/*', - './ElectronClient/gui/note-viewer/pluginAssets/*', - './ReactNativeClient/lib/joplin-renderer/assets/*', - './Modules/*', + './Assets/TinyMCE/*', './node_modules/*', - './ReactNativeClient/lib/joplin-renderer/node_modules/*', + './packages/app-cli/build/*', + './packages/app-cli/locales-build/*', + './packages/app-cli/locales/*', + './packages/app-cli/tests-build/*', + './packages/app-cli/tests/*', + './packages/app-clipper/*', + './packages/app-desktop/dist/*', + './packages/app-desktop/gui/note-viewer/pluginAssets/*', + './packages/app-desktop/gui/style/*', + './packages/app-desktop/lib/*', + './packages/app-desktop/pluginAssets/*', + './packages/app-desktop/tools/*', + './packages/app-mobile/android/*', + './packages/app-mobile/ios/*', + './packages/app-mobile/pluginAssets/*', + './packages/app-mobile/tools/*', + './packages/renderer/assets/*', + './packages/tools/*', './patches/*', - './ReactNativeClient/android/*', - './ReactNativeClient/ios/*', - './ReactNativeClient/node_modules/*', - './ReactNativeClient/pluginAssets/*', - './ReactNativeClient/tools/*', './readme/*', - './Tools/*', ]; const findCommand = `find . -iname '*.js' -not -path '${excludedDirs.join('\' -not -path \'')}'`; - process.chdir(`${__dirname}/..`); + process.chdir(rootDir); const files = (await execCommand(findCommand)).split('\n'); const baseArgs = []; @@ -124,7 +116,7 @@ async function createPotFile(potFilePath) { baseArgs.push(`--output="${potFilePath}"`); baseArgs.push('--language=JavaScript'); baseArgs.push('--copyright-holder="Laurent Cozic"'); - baseArgs.push('--package-name=Joplin-CLI'); + baseArgs.push('--package-name=Joplin'); baseArgs.push('--package-version=1.0.0'); // baseArgs.push('--no-location'); baseArgs.push('--keyword=_n:1,2'); @@ -175,7 +167,7 @@ function buildIndex(locales, stats) { function availableLocales(defaultLocale) { const output = [defaultLocale]; - fs.readdirSync(cliLocalesDir).forEach((path) => { + fs.readdirSync(localesDir).forEach((path) => { if (fileExtension(path) !== 'po') return; const locale = filename(path); if (locale === defaultLocale) return; @@ -269,7 +261,7 @@ function flagImageUrl(locale) { } function poFileUrl(locale) { - return `https://github.com/laurent22/joplin/blob/dev/CliClient/locales/${locale}.po`; + return `https://github.com/laurent22/joplin/blob/dev/packages/app-cli/locales/${locale}.po`; } function translationStatusToMdTable(status) { @@ -296,8 +288,8 @@ async function updateReadmeWithStats(stats) { async function main() { const argv = require('yargs').argv; - const potFilePath = `${cliLocalesDir}/joplin.pot`; - const jsonLocalesDir = `${cliDir}/build/locales`; + const potFilePath = `${localesDir}/joplin.pot`; + const jsonLocalesDir = `${libDir}/locales`; const defaultLocale = 'en_GB'; const oldPotStatus = await translationStatus(false, potFilePath); @@ -317,7 +309,7 @@ async function main() { } } - await execCommand(`cp "${potFilePath}" ` + `"${cliLocalesDir}/${defaultLocale}.po"`); + await execCommand(`cp "${potFilePath}" ` + `"${localesDir}/${defaultLocale}.po"`); fs.mkdirpSync(jsonLocalesDir, 0o755); @@ -329,7 +321,7 @@ async function main() { console.info(`Building ${locale}...`); - const poFilePäth = `${cliLocalesDir}/${locale}.po`; + const poFilePäth = `${localesDir}/${locale}.po`; const jsonFilePath = `${jsonLocalesDir}/${locale}.json`; if (locale != defaultLocale) await mergePotToPo(potFilePath, poFilePäth); buildLocale(poFilePäth, jsonFilePath); @@ -344,15 +336,15 @@ async function main() { saveToFile(`${jsonLocalesDir}/index.js`, buildIndex(locales, stats)); - const destDirs = [ - `${rnDir}/locales`, - `${electronDir}/locales`, - `${cliDir}/locales-build`, - ]; + // const destDirs = [ + // `${libDir}/locales`, + // `${electronDir}/locales`, + // `${cliDir}/locales-build`, + // ]; - for (const destDir of destDirs) { - await execCommand(`rsync -a "${jsonLocalesDir}/" "${destDir}/"`); - } + // for (const destDir of destDirs) { + // await execCommand(`rsync -a "${jsonLocalesDir}/" "${destDir}/"`); + // } await updateReadmeWithStats(stats); } diff --git a/Tools/build-website.js b/packages/tools/build-website.js similarity index 99% rename from Tools/build-website.js rename to packages/tools/build-website.js index 66a3455df0..180f228eff 100644 --- a/Tools/build-website.js +++ b/packages/tools/build-website.js @@ -418,7 +418,7 @@ const scriptHtml = ` `; -const rootDir = dirname(__dirname); +const rootDir = dirname(dirname(__dirname)); function markdownToHtml(md, templateParams) { const MarkdownIt = require('markdown-it'); @@ -613,7 +613,7 @@ function makeHomePageMd() { async function main() { await fs.remove(`${rootDir}/docs`); - await fs.copy(`${rootDir}/Modules/WebsiteAssets`, `${rootDir}/docs`); + await fs.copy(`${rootDir}/Assets/WebsiteAssets`, `${rootDir}/docs`); renderMdToHtml(makeHomePageMd(), `${rootDir}/docs/index.html`, { sourceMarkdownFile: 'README.md' }); diff --git a/Tools/build-welcome.js b/packages/tools/build-welcome.js similarity index 92% rename from Tools/build-welcome.js rename to packages/tools/build-welcome.js index d49929d312..472e2f8e11 100644 --- a/Tools/build-welcome.js +++ b/packages/tools/build-welcome.js @@ -1,9 +1,7 @@ -require('app-module-path').addPath(`${__dirname}/../ReactNativeClient`); - const fs = require('fs-extra'); const dirname = require('path').dirname; -const { fileExtension, basename } = require('lib/path-utils'); -const markdownUtils = require('lib/markdownUtils').default; +const { fileExtension, basename } = require('@joplinapp/lib/path-utils'); +const markdownUtils = require('@joplinapp/lib/markdownUtils').default; const rootDir = dirname(__dirname); const welcomeDir = `${rootDir}/readme/welcome`; @@ -143,7 +141,7 @@ async function main() { const content = { notes: notes, folders: folders, tags: tags, timestamp: createdDate.getTime() }; const jsonContent = JSON.stringify(content, null, 4); const jsContent = `module.exports = ${jsonContent}`; - fs.writeFileSync(`${rootDir}/ReactNativeClient/lib/welcomeAssets.js`, jsContent, { encoding: 'utf8' }); + fs.writeFileSync(`${rootDir}/packages/app-mobile/lib/welcomeAssets.js`, jsContent, { encoding: 'utf8' }); } main().catch((error) => { diff --git a/Tools/fetchPatreonPosts.js b/packages/tools/fetchPatreonPosts.js similarity index 86% rename from Tools/fetchPatreonPosts.js rename to packages/tools/fetchPatreonPosts.js index 5b0901ede1..68334c9a74 100644 --- a/Tools/fetchPatreonPosts.js +++ b/packages/tools/fetchPatreonPosts.js @@ -1,20 +1,18 @@ // Fetch Patreon posts to Markdown so that we have them in a more versatile format // and to add them to the "News" notifications later on. -require('app-module-path').addPath(`${__dirname}/../ReactNativeClient`); - const fetch = require('node-fetch'); const fs = require('fs-extra'); const { patreonOauthToken } = require('./tool-utils'); -const HtmlToMd = require('lib/HtmlToMd'); -const { dirname, filename, basename } = require('lib/path-utils'); -const markdownUtils = require('lib/markdownUtils').default; -const mimeUtils = require('lib/mime-utils.js').mime; -const { netUtils } = require('lib/net-utils'); -const shim = require('lib/shim').default; +const HtmlToMd = require('@joplinapp/lib/HtmlToMd'); +const { dirname, filename, basename } = require('@joplinapp/lib/path-utils'); +const markdownUtils = require('@joplinapp/lib/markdownUtils').default; +const mimeUtils = require('@joplinapp/lib/mime-utils.js').mime; +const { netUtils } = require('@joplinapp/lib/net-utils'); +const shim = require('@joplinapp/lib/shim').default; const moment = require('moment'); -const { pregQuote } = require('lib/string-utils'); -const { shimInit } = require('lib/shim-init-node.js'); +const { pregQuote } = require('@joplinapp/lib/string-utils'); +const { shimInit } = require('@joplinapp/lib/shim-init-node.js'); shimInit(); diff --git a/Tools/generate-images.js b/packages/tools/generate-images.js similarity index 74% rename from Tools/generate-images.js rename to packages/tools/generate-images.js index 93f13ea3ba..4a5d48f1bd 100644 --- a/Tools/generate-images.js +++ b/packages/tools/generate-images.js @@ -1,10 +1,8 @@ -require('app-module-path').addPath(`${__dirname}/../ReactNativeClient`); - const dirname = require('path').dirname; const sharp = require('sharp'); const fs = require('fs-extra'); const { execCommand } = require('./tool-utils.js'); -const { fileExtension } = require('lib/path-utils'); +const { fileExtension } = require('@joplinapp/lib/path-utils'); const sources = [ { @@ -52,109 +50,109 @@ const operations = [ { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ios_marketing1024x1024.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ios_marketing1024x1024.png', width: 1024, height: 1024, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76.png', width: 76, height: 76, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76@2x.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76@2x.png', width: 152, height: 152, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20.png', width: 20, height: 20, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20@2x.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20@2x.png', width: 40, height: 40, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_pro_app83.5x83.5@2x.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_pro_app83.5x83.5@2x.png', width: 167, height: 167, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29.png', width: 29, height: 29, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29@2x.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29@2x.png', width: 58, height: 58, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40.png', width: 40, height: 40, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40@2x.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40@2x.png', width: 80, height: 80, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@2x.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@2x.png', width: 120, height: 120, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@3x.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@3x.png', width: 180, height: 180, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@2x.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@2x.png', width: 40, height: 40, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@3x.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@3x.png', width: 60, height: 60, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@2x.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@2x.png', width: 58, height: 58, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@3x.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@3x.png', width: 87, height: 87, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@2x.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@2x.png', width: 80, height: 80, }, { source: 1, - dest: 'ReactNativeClient/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@3x.png', + dest: 'packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@3x.png', width: 120, height: 120, }, @@ -267,7 +265,7 @@ const operations = [ { source: 6, - dest: 'ElectronClient/build-win/icons/Square150x150Logo.png', + dest: 'packages/app-desktop/build-win/icons/Square150x150Logo.png', width: 150, height: 150, iconWidth: 99, @@ -275,7 +273,7 @@ const operations = [ }, { source: 6, - dest: 'ElectronClient/build-win/icons/SmallTile.png', + dest: 'packages/app-desktop/build-win/icons/SmallTile.png', width: 70, height: 70, iconWidth: 46, diff --git a/Tools/git-changelog.js b/packages/tools/git-changelog.js similarity index 99% rename from Tools/git-changelog.js rename to packages/tools/git-changelog.js index 9e78a2ef93..beaddf671b 100644 --- a/Tools/git-changelog.js +++ b/packages/tools/git-changelog.js @@ -4,8 +4,6 @@ // (Desktop|Mobile|Android|iOS[CLI): (New|Improved|Fixed): Some message..... (#ISSUE) -require('app-module-path').addPath(`${__dirname}/../ReactNativeClient`); - const { execCommand, githubUsername } = require('./tool-utils.js'); // From https://stackoverflow.com/a/6234804/561309 diff --git a/Tools/gulp/tasks/compileExtensions.js b/packages/tools/gulp/tasks/compileExtensions.js similarity index 96% rename from Tools/gulp/tasks/compileExtensions.js rename to packages/tools/gulp/tasks/compileExtensions.js index d5e7a6663d..7a68faf683 100644 --- a/Tools/gulp/tasks/compileExtensions.js +++ b/packages/tools/gulp/tasks/compileExtensions.js @@ -11,7 +11,7 @@ async function getSourceCode(dest) { async function main() { const rootDir = utils.rootDir(); - const dest = `${rootDir}/ReactNativeClient/lib/sql-extensions`; + const dest = `${rootDir}/packages/app-mobile/lib/sql-extensions`; try { await fs.ensureDir(dest); diff --git a/packages/tools/gulp/tasks/copyLib.js b/packages/tools/gulp/tasks/copyLib.js new file mode 100644 index 0000000000..28151a41e4 --- /dev/null +++ b/packages/tools/gulp/tasks/copyLib.js @@ -0,0 +1,17 @@ +const utils = require('../utils'); + +const rootDir = utils.rootDir(); + +module.exports = { + src: `${rootDir}/packages/app-mobile/lib/**/*`, + fn: async function() { + const copyOptions = { + excluded: [ + `${rootDir}/packages/app-mobile/lib/joplin-renderer/node_modules`, + ], + }; + + await utils.copyDir(`${rootDir}/packages/app-mobile/lib`, `${rootDir}/packages/app-cli/build/lib`, copyOptions); + await utils.copyDir(`${rootDir}/packages/app-mobile/lib`, `${rootDir}/packages/app-desktop/lib`, copyOptions); + }, +}; diff --git a/Tools/gulp/tasks/deleteBuildDirs.js b/packages/tools/gulp/tasks/deleteBuildDirs.js similarity index 57% rename from Tools/gulp/tasks/deleteBuildDirs.js rename to packages/tools/gulp/tasks/deleteBuildDirs.js index 7ce7ea8f7e..087c9d9e99 100644 --- a/Tools/gulp/tasks/deleteBuildDirs.js +++ b/packages/tools/gulp/tasks/deleteBuildDirs.js @@ -5,7 +5,7 @@ const fs = require('fs-extra'); module.exports = { src: '', fn: async function() { - await fs.remove(`${rootDir}/CliClient/tests-build`); - await fs.remove(`${rootDir}/CliClient/build`); + await fs.remove(`${rootDir}/packages/app-cli/tests-build`); + await fs.remove(`${rootDir}/packages/app-cli/build`); }, }; diff --git a/Tools/gulp/tasks/tsc.js b/packages/tools/gulp/tasks/tsc.js similarity index 63% rename from Tools/gulp/tasks/tsc.js rename to packages/tools/gulp/tasks/tsc.js index 56a163763c..ef568c2d4c 100644 --- a/Tools/gulp/tasks/tsc.js +++ b/packages/tools/gulp/tasks/tsc.js @@ -5,12 +5,12 @@ process.chdir(rootDir); module.exports = { src: [ - 'ReactNativeClient/**/*.tsx', - 'ReactNativeClient/**/*.ts', - 'ElectronClient/**/*.tsx', - 'ElectronClient/**/*.ts', - 'CliClient/**/*.tsx', - 'CliClient/**/*.ts', + 'packages/app-mobile/**/*.tsx', + 'packages/app-mobile/**/*.ts', + 'packages/app-desktop/**/*.tsx', + 'packages/app-desktop/**/*.ts', + 'packages/app-cli/**/*.tsx', + 'packages/app-cli/**/*.ts', ], fn: async function() { const promise = execa('node', ['node_modules/typescript/bin/tsc', '--project', 'tsconfig.json'], { cwd: rootDir }); diff --git a/Tools/gulp/tasks/updateIgnoredTypeScriptBuild.js b/packages/tools/gulp/tasks/updateIgnoredTypeScriptBuild.js similarity index 53% rename from Tools/gulp/tasks/updateIgnoredTypeScriptBuild.js rename to packages/tools/gulp/tasks/updateIgnoredTypeScriptBuild.js index d62ac6a5f3..8dedcd8b0e 100644 --- a/Tools/gulp/tasks/updateIgnoredTypeScriptBuild.js +++ b/packages/tools/gulp/tasks/updateIgnoredTypeScriptBuild.js @@ -7,27 +7,42 @@ module.exports = { fn: async function() { const tsFiles = glob.sync(`${rootDir}{/**/*.ts,/**/*.tsx}`, { ignore: [ - '**/node_modules/**', '**/.git/**', - '**/ElectronClient/lib/**', - '**/CliClient/build/**', - '**/CliClient/tests-build/**', - '**/ElectronClient/dist/**', - '**/Modules/TinyMCE/JoplinLists/**', - '**/Modules/TinyMCE/IconPack/**', - '**/CliClient/tests/support/plugins/**', + '**/api-cli/build/**', + '**/api-cli/tests-build/**', + '**/api-cli/tests/support/plugins/**', + '**/app-desktop/dist/**', + '**/Assets/*', + '**/app-mobile/android/**', + '**/app-mobile/ios/**', + '**/node_modules/**', '**/plugin_types/**', - '**/ReactNativeClient/android/**', - '**/ReactNativeClient/ios/**', ], - }).map(f => f.substr(rootDir.length + 1)); + }) + .filter(f => !f.endsWith('.d.ts')) + .map(f => f.substr(rootDir.length + 1)); - const ignoredFiles = tsFiles.map(f => { + const ignoredJsFiles = tsFiles.map(f => { const s = f.split('.'); s.pop(); return `${s.join('.')}.js`; }); + const ignoredMapFiles = tsFiles.map(f => { + const s = f.split('.'); + s.pop(); + return `${s.join('.')}.js.map`; + }); + + const ignoredDefFiles = tsFiles.map(f => { + const s = f.split('.'); + s.pop(); + return `${s.join('.')}.d.ts`; + }); + + const ignoredFiles = ignoredJsFiles.concat(ignoredMapFiles).concat(ignoredDefFiles); + ignoredFiles.sort(); + const regex = /(# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD)[\s\S]*(# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD)/; const replacement = `$1\n${ignoredFiles.join('\n')}\n$2`; diff --git a/Tools/gulp/utils.js b/packages/tools/gulp/utils.js similarity index 91% rename from Tools/gulp/utils.js rename to packages/tools/gulp/utils.js index 8a8d6b4971..e78a0252a6 100644 --- a/Tools/gulp/utils.js +++ b/packages/tools/gulp/utils.js @@ -1,4 +1,5 @@ const fs = require('fs-extra'); +const execa = require('execa'); const utils = {}; @@ -14,6 +15,13 @@ utils.isMac = () => { return process && process.platform === 'darwin'; }; +utils.execCommandVerbose = function(commandName, args = []) { + console.info(`> ${commandName}`, args && args.length ? args : ''); + const promise = execa(commandName, args); + promise.stdout.pipe(process.stdout); + return promise; +}; + utils.execCommand = function(command) { const exec = require('child_process').exec; @@ -138,7 +146,7 @@ utils.copyFile = async function(src, dest) { }; utils.rootDir = function() { - return utils.dirname(utils.dirname(__dirname)); + return utils.dirname(utils.dirname(utils.dirname(__dirname))); }; utils.registerGulpTasks = function(gulp, tasks) { diff --git a/packages/tools/gulpfile.js b/packages/tools/gulpfile.js new file mode 100644 index 0000000000..cd76db59ed --- /dev/null +++ b/packages/tools/gulpfile.js @@ -0,0 +1,17 @@ +const gulp = require('gulp'); +const utils = require('./gulp/utils'); + +const tasks = { + // copyLib: require('./Tools/gulp/tasks/copyLib'), + // tsc: require('./Tools/gulp/tasks/tsc'), + updateIgnoredTypeScriptBuild: require('./gulp/tasks/updateIgnoredTypeScriptBuild'), + // deleteBuildDirs: require('./Tools/gulp/tasks/deleteBuildDirs'), +}; + +utils.registerGulpTasks(gulp, tasks); + +// gulp.task('build', gulp.series('copyLib', 'tsc', 'updateIgnoredTypeScriptBuild')); + +// // The clean task removes build directories and copy back the library. This is useful +// // when switching from one branch to another. +// gulp.task('clean', gulp.series('deleteBuildDirs', 'copyLib')); diff --git a/CliClient/locales/ar.po b/packages/tools/locales/ar.po similarity index 100% rename from CliClient/locales/ar.po rename to packages/tools/locales/ar.po diff --git a/CliClient/locales/bg_BG.po b/packages/tools/locales/bg_BG.po similarity index 100% rename from CliClient/locales/bg_BG.po rename to packages/tools/locales/bg_BG.po diff --git a/CliClient/locales/bs_BA.po b/packages/tools/locales/bs_BA.po similarity index 100% rename from CliClient/locales/bs_BA.po rename to packages/tools/locales/bs_BA.po diff --git a/CliClient/locales/ca.po b/packages/tools/locales/ca.po similarity index 100% rename from CliClient/locales/ca.po rename to packages/tools/locales/ca.po diff --git a/CliClient/locales/cs_CZ.po b/packages/tools/locales/cs_CZ.po similarity index 100% rename from CliClient/locales/cs_CZ.po rename to packages/tools/locales/cs_CZ.po diff --git a/CliClient/locales/da_DK.po b/packages/tools/locales/da_DK.po similarity index 100% rename from CliClient/locales/da_DK.po rename to packages/tools/locales/da_DK.po diff --git a/CliClient/locales/de_DE.po b/packages/tools/locales/de_DE.po similarity index 100% rename from CliClient/locales/de_DE.po rename to packages/tools/locales/de_DE.po diff --git a/CliClient/locales/el_GR.po b/packages/tools/locales/el_GR.po similarity index 100% rename from CliClient/locales/el_GR.po rename to packages/tools/locales/el_GR.po diff --git a/CliClient/locales/en_GB.po b/packages/tools/locales/en_GB.po similarity index 100% rename from CliClient/locales/en_GB.po rename to packages/tools/locales/en_GB.po diff --git a/CliClient/locales/en_US.po b/packages/tools/locales/en_US.po similarity index 100% rename from CliClient/locales/en_US.po rename to packages/tools/locales/en_US.po diff --git a/CliClient/locales/eo.po b/packages/tools/locales/eo.po similarity index 100% rename from CliClient/locales/eo.po rename to packages/tools/locales/eo.po diff --git a/CliClient/locales/es_ES.po b/packages/tools/locales/es_ES.po similarity index 100% rename from CliClient/locales/es_ES.po rename to packages/tools/locales/es_ES.po diff --git a/CliClient/locales/et_EE.po b/packages/tools/locales/et_EE.po similarity index 100% rename from CliClient/locales/et_EE.po rename to packages/tools/locales/et_EE.po diff --git a/CliClient/locales/eu.po b/packages/tools/locales/eu.po similarity index 100% rename from CliClient/locales/eu.po rename to packages/tools/locales/eu.po diff --git a/CliClient/locales/fa.po b/packages/tools/locales/fa.po similarity index 100% rename from CliClient/locales/fa.po rename to packages/tools/locales/fa.po diff --git a/CliClient/locales/fr_FR.po b/packages/tools/locales/fr_FR.po similarity index 100% rename from CliClient/locales/fr_FR.po rename to packages/tools/locales/fr_FR.po diff --git a/CliClient/locales/gl_ES.po b/packages/tools/locales/gl_ES.po similarity index 100% rename from CliClient/locales/gl_ES.po rename to packages/tools/locales/gl_ES.po diff --git a/CliClient/locales/hr_HR.po b/packages/tools/locales/hr_HR.po similarity index 100% rename from CliClient/locales/hr_HR.po rename to packages/tools/locales/hr_HR.po diff --git a/CliClient/locales/id_ID.po b/packages/tools/locales/id_ID.po similarity index 100% rename from CliClient/locales/id_ID.po rename to packages/tools/locales/id_ID.po diff --git a/CliClient/locales/it_IT.po b/packages/tools/locales/it_IT.po similarity index 100% rename from CliClient/locales/it_IT.po rename to packages/tools/locales/it_IT.po diff --git a/CliClient/locales/ja_JP.po b/packages/tools/locales/ja_JP.po similarity index 100% rename from CliClient/locales/ja_JP.po rename to packages/tools/locales/ja_JP.po diff --git a/CliClient/locales/joplin.pot b/packages/tools/locales/joplin.pot similarity index 100% rename from CliClient/locales/joplin.pot rename to packages/tools/locales/joplin.pot diff --git a/CliClient/locales/ko.po b/packages/tools/locales/ko.po similarity index 100% rename from CliClient/locales/ko.po rename to packages/tools/locales/ko.po diff --git a/CliClient/locales/nb_NO.po b/packages/tools/locales/nb_NO.po similarity index 100% rename from CliClient/locales/nb_NO.po rename to packages/tools/locales/nb_NO.po diff --git a/CliClient/locales/nl_BE.po b/packages/tools/locales/nl_BE.po similarity index 100% rename from CliClient/locales/nl_BE.po rename to packages/tools/locales/nl_BE.po diff --git a/CliClient/locales/nl_NL.po b/packages/tools/locales/nl_NL.po similarity index 100% rename from CliClient/locales/nl_NL.po rename to packages/tools/locales/nl_NL.po diff --git a/CliClient/locales/pl_PL.po b/packages/tools/locales/pl_PL.po similarity index 100% rename from CliClient/locales/pl_PL.po rename to packages/tools/locales/pl_PL.po diff --git a/CliClient/locales/pt_BR.po b/packages/tools/locales/pt_BR.po similarity index 100% rename from CliClient/locales/pt_BR.po rename to packages/tools/locales/pt_BR.po diff --git a/CliClient/locales/pt_PT.po b/packages/tools/locales/pt_PT.po similarity index 100% rename from CliClient/locales/pt_PT.po rename to packages/tools/locales/pt_PT.po diff --git a/CliClient/locales/ro.po b/packages/tools/locales/ro.po similarity index 100% rename from CliClient/locales/ro.po rename to packages/tools/locales/ro.po diff --git a/CliClient/locales/ru_RU.po b/packages/tools/locales/ru_RU.po similarity index 100% rename from CliClient/locales/ru_RU.po rename to packages/tools/locales/ru_RU.po diff --git a/CliClient/locales/sl_SI.po b/packages/tools/locales/sl_SI.po similarity index 100% rename from CliClient/locales/sl_SI.po rename to packages/tools/locales/sl_SI.po diff --git a/CliClient/locales/sr_RS.po b/packages/tools/locales/sr_RS.po similarity index 100% rename from CliClient/locales/sr_RS.po rename to packages/tools/locales/sr_RS.po diff --git a/CliClient/locales/sv.po b/packages/tools/locales/sv.po similarity index 100% rename from CliClient/locales/sv.po rename to packages/tools/locales/sv.po diff --git a/CliClient/locales/th_TH.po b/packages/tools/locales/th_TH.po similarity index 100% rename from CliClient/locales/th_TH.po rename to packages/tools/locales/th_TH.po diff --git a/CliClient/locales/tr_TR.po b/packages/tools/locales/tr_TR.po similarity index 100% rename from CliClient/locales/tr_TR.po rename to packages/tools/locales/tr_TR.po diff --git a/CliClient/locales/vi.po b/packages/tools/locales/vi.po similarity index 100% rename from CliClient/locales/vi.po rename to packages/tools/locales/vi.po diff --git a/CliClient/locales/zh_CN.po b/packages/tools/locales/zh_CN.po similarity index 100% rename from CliClient/locales/zh_CN.po rename to packages/tools/locales/zh_CN.po diff --git a/CliClient/locales/zh_TW.po b/packages/tools/locales/zh_TW.po similarity index 100% rename from CliClient/locales/zh_TW.po rename to packages/tools/locales/zh_TW.po diff --git a/packages/tools/package-lock.json b/packages/tools/package-lock.json new file mode 100644 index 0000000000..de93780396 --- /dev/null +++ b/packages/tools/package-lock.json @@ -0,0 +1,4218 @@ +{ + "name": "@joplinapp/tools", + "version": "1.0.9", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "@types/node": { + "version": "14.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", + "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==", + "dev": true + }, + "ajv": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", + "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dev": true, + "requires": { + "buffer-equal": "^1.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "dev": true, + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "dev": true, + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "dev": true, + "requires": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true + }, + "array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dev": true, + "requires": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "dev": true, + "requires": { + "async-done": "^1.2.2" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" + }, + "bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "dev": true, + "requires": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "buffer": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", + "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cliui": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.1.tgz", + "integrity": "sha512-rcvHOWyGyid6I1WjT/3NatKj2kDt9OdSHSXpyLXaMWFbKpGACNW8pRhhdPUq9MWUOdwn8Rz9AVETjF4105rZZQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "dev": true, + "requires": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "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=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-props": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", + "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "dev": true, + "requires": { + "each-props": "^1.3.0", + "is-plain-object": "^2.0.1" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "requires": { + "mimic-response": "^2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dev": true, + "requires": { + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + } + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escalade": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.0.tgz", + "integrity": "sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig==" + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", + "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", + "dev": true + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gettext-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.3.0.tgz", + "integrity": "sha512-iloxjcw+uTPnQ8DrGICWtqkHNgk3mAiDI77pLmXQCnhM+BxFQXstzTA4zj3EpIYMysRQnnNzHyHzBUEazz80Sw==", + "requires": { + "encoding": "^0.1.12", + "safe-buffer": "^5.1.1" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + } + }, + "glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "dev": true, + "requires": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "dev": true, + "requires": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", + "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "5.0.0-security.0" + } + }, + "yargs-parser": { + "version": "5.0.0-security.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", + "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.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" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-core-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", + "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "just-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", + "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "dev": true, + "requires": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, + "requires": { + "flush-write-stream": "^1.0.2" + } + }, + "liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dev": true, + "requires": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + } + }, + "linkify-it": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz", + "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=", + "requires": { + "uc.micro": "^1.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "markdown-it": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.1.tgz", + "integrity": "sha512-CzzqSSNkFRUf9vlWvhK1awpJreMRqdCrBvZ8DIoDWTOkESMIF741UPAhuAmbyWmdiFPA6WARNhnu2M6Nrhwa+A==", + "requires": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + } + }, + "matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "dev": true, + "requires": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "md5-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-4.0.0.tgz", + "integrity": "sha512-UC0qFwyAjn4YdPpKaDNw6gNxRf7Mcx7jC1UGCY4boCzgvU2Aoc1mOGzTtrjjLKhM5ivsnhoKpQVxKPp+1j1qwg==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "requires": { + "mime-db": "1.43.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", + "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", + "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "mkdirp-classic": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", + "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==" + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mustache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz", + "integrity": "sha1-QCj3d4sXcIpImTCm5SrDvKDaQdA=" + }, + "mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "dev": true + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node-abi": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.15.0.tgz", + "integrity": "sha512-FeLpTS0F39U7hHZU1srAK4Vx+5AHNVOTP+hxBNQknR/54laTHSFIJkDWDqiquY1LeLUgTfPN7sLPhMubx0PLAg==", + "requires": { + "semver": "^5.4.1" + } + }, + "node-addon-api": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", + "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==" + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "requires": { + "once": "^1.3.2" + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "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=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pct-encode": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pct-encode/-/pct-encode-1.0.2.tgz", + "integrity": "sha1-uZt7BE1r18OeSDmnqAEirXUVyqU=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prebuild-install": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz", + "integrity": "sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + } + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "psl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", + "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "relative": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/relative/-/relative-3.0.2.tgz", + "integrity": "sha1-Dc2OxUpdNaPBXhBFA9ZTdbWlNn8=", + "requires": { + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + } + }, + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true + }, + "replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resolve": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "dev": true, + "requires": { + "is-core-module": "^2.0.0", + "path-parse": "^1.0.6" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dev": true, + "requires": { + "value-or-function": "^3.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + }, + "semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "dev": true, + "requires": { + "sver-compat": "^1.5.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "sharp": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.2.tgz", + "integrity": "sha512-l1GN0kFNtJr3U9i9pt7a+vo2Ij0xv4tTKDIPx8W6G9WELhPwrMyZZJKAAQNBSI785XB4uZfS5Wpz8C9jWV4AFQ==", + "requires": { + "color": "^3.1.2", + "detect-libc": "^1.0.3", + "node-addon-api": "^2.0.0", + "npmlog": "^4.1.2", + "prebuild-install": "^5.3.3", + "semver": "^7.1.3", + "simple-get": "^3.1.0", + "tar": "^6.0.1", + "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "semver": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.2.1.tgz", + "integrity": "sha512-aHhm1pD02jXXkyIpq25qBZjr3CQgg8KST8uX0OWXch3xE6jw+1bfbWnCjzMwojsTquroUmKFHNzU6x26mEiRxw==" + } + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" + }, + "simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "dev": true, + "requires": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "tar": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.1.tgz", + "integrity": "sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q==", + "requires": { + "chownr": "^1.1.3", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.0", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "tar-fs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "tar-stream": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", + "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", + "requires": { + "bl": "^4.0.1", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dev": true, + "requires": { + "through2": "^2.0.3" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uc.micro": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.5.tgz", + "integrity": "sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==" + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + } + }, + "undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "requires": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "universalify": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", + "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "uri-template": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uri-template/-/uri-template-1.0.1.tgz", + "integrity": "sha1-FKklo35Nk/diVDKqEWsF5Qyuga0=", + "requires": { + "pct-encode": "~1.0.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dev": true, + "requires": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.1.tgz", + "integrity": "sha512-/jJ831jEs4vGDbYPQp4yGKDYPSCCEQ45uZWJHE1AoYBzqdZi8+LDWas0z4HrmJXmKdpFsTiowSHXdxyFhpmdMg==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-6+nLw8xa9uK1BOEOykaiYAJVh6/CjxWXK/q9b5FpRgNslt8s22F2xMBqVIKgCRjNgGvGPBy8Vog7WN7yh4amtA==", + "requires": { + "cliui": "^7.0.0", + "escalade": "^3.0.2", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.1", + "yargs-parser": "^20.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-2agPoRFPoIcFzOIp6656gcvsg2ohtscpw2OINr/q46+Sq41xz2OYLqx5HRHabmFU1OARIPAYH5uteICE7mn/5A==" + } + } +} diff --git a/Tools/package.json b/packages/tools/package.json similarity index 59% rename from Tools/package.json rename to packages/tools/package.json index 92a3acd21f..e5a2fc4177 100644 --- a/Tools/package.json +++ b/packages/tools/package.json @@ -1,29 +1,39 @@ { - "name": "tools", - "version": "1.0.0", + "name": "@joplinapp/tools", + "version": "1.0.9", "description": "Various tools for Joplin", "main": "index.js", "author": "Laurent Cozic", + "scripts": { + "updateIgnored": "gulp updateIgnoredTypeScriptBuild" + }, + "publishConfig": { + "access": "public" + }, "repository": { "type": "git", "url": "git+https://github.com/laurent22/joplin.git" }, "license": "MIT", "dependencies": { - "app-module-path": "^2.2.0", + "@joplinapp/lib": "^1.0.9", + "execa": "^4.1.0", "fs-extra": "^4.0.3", "gettext-parser": "^1.3.0", - "html-minifier": "^4.0.0", + "glob": "^7.1.6", "markdown-it": "^8.4.1", "md5-file": "^4.0.0", "moment": "^2.24.0", - "momentjs": "^2.0.0", "mustache": "^2.3.0", "node-fetch": "^1.7.3", + "relative": "^3.0.2", "request": "^2.88.0", "sharp": "^0.25.2", - "string-padding": "^1.0.2", "uri-template": "^1.0.1", "yargs": "^16.0.3" + }, + "devDependencies": { + "@types/node": "^14.14.6", + "gulp": "^4.0.2" } } diff --git a/Tools/release-android.js b/packages/tools/release-android.js similarity index 90% rename from Tools/release-android.js rename to packages/tools/release-android.js index f2e79807bd..00856935a7 100644 --- a/Tools/release-android.js +++ b/packages/tools/release-android.js @@ -5,7 +5,7 @@ const fetch = require('node-fetch'); const uriTemplate = require('uri-template'); const projectName = 'joplin-android'; -const rnDir = `${__dirname}/../ReactNativeClient`; +const rnDir = `${__dirname}/../packages/app-mobile`; const rootDir = path.dirname(__dirname); const releaseDir = `${rootDir}/_releases`; @@ -88,7 +88,7 @@ async function createRelease(name, tagName, version) { if (await fileExists('/mnt/c/Windows/System32/cmd.exe')) { // In recent versions (of Gradle? React Native?), running gradlew.bat from WSL throws the following error: - // Error: Command failed: /mnt/c/Windows/System32/cmd.exe /c "cd ReactNativeClient\android && gradlew.bat assembleRelease -PbuildDir=build" + // Error: Command failed: /mnt/c/Windows/System32/cmd.exe /c "cd packages\app-mobile\android && gradlew.bat assembleRelease -PbuildDir=build" // FAILURE: Build failed with an exception. @@ -99,18 +99,18 @@ async function createRelease(name, tagName, version) { // console.info('Run this command from DOS:'); // console.info(''); - // console.info(`cd "${wslToWinPath(rootDir)}\\ReactNativeClient\\android" && gradlew.bat ${apkBuildCmd}"`); + // console.info(`cd "${wslToWinPath(rootDir)}\\packages\\app-mobile\\android" && gradlew.bat ${apkBuildCmd}"`); // console.info(''); // await readline('Press Enter when done:'); // apkBuildCmd = ''; // Clear the command because we've already ran it // process.chdir(`${rnDir}/android`); - // apkBuildCmd = `/mnt/c/Windows/System32/cmd.exe /c "cd ReactNativeClient\\android && gradlew.bat ${apkBuildCmd}"`; + // apkBuildCmd = `/mnt/c/Windows/System32/cmd.exe /c "cd packages\\app-mobile\\android && gradlew.bat ${apkBuildCmd}"`; // restoreDir = rootDir; - // apkBuildCmd = `/mnt/c/Windows/System32/cmd.exe /c "cd ReactNativeClient\\android && gradlew.bat ${apkBuildCmd}"`; + // apkBuildCmd = `/mnt/c/Windows/System32/cmd.exe /c "cd packages\\app-mobile\\android && gradlew.bat ${apkBuildCmd}"`; - await execCommandWithPipes('/mnt/c/Windows/System32/cmd.exe', ['/c', `cd ReactNativeClient\\android && gradlew.bat ${apkBuildCmd}`]); + await execCommandWithPipes('/mnt/c/Windows/System32/cmd.exe', ['/c', `cd packages\\app-mobile\\android && gradlew.bat ${apkBuildCmd}`]); apkBuildCmd = ''; } else { process.chdir(`${rnDir}/android`); @@ -129,11 +129,11 @@ async function createRelease(name, tagName, version) { await fs.mkdirp(releaseDir); console.info(`Copying APK to ${apkFilePath}`); - await fs.copy('ReactNativeClient/android/app/build/outputs/apk/release/app-release.apk', apkFilePath); + await fs.copy('packages/app-mobile/android/app/build/outputs/apk/release/app-release.apk', apkFilePath); if (name === 'main') { console.info(`Copying APK to ${releaseDir}/joplin-latest.apk`); - await fs.copy('ReactNativeClient/android/app/build/outputs/apk/release/app-release.apk', `${releaseDir}/joplin-latest.apk`); + await fs.copy('packages/app-mobile/android/app/build/outputs/apk/release/app-release.apk', `${releaseDir}/joplin-latest.apk`); } for (const filename in originalContents) { diff --git a/Tools/release-cli.js b/packages/tools/release-cli.js similarity index 94% rename from Tools/release-cli.js rename to packages/tools/release-cli.js index 14f494b99b..450f7511fa 100644 --- a/Tools/release-cli.js +++ b/packages/tools/release-cli.js @@ -4,7 +4,7 @@ const fs = require('fs-extra'); const moment = require('moment'); const rootDir = path.dirname(__dirname); -const appDir = `${rootDir}/CliClient`; +const appDir = `${rootDir}/packages/app-cli`; const changelogPath = `${rootDir}/readme/changelog_cli.md`; async function insertChangelog(tag, changelog) { @@ -66,7 +66,7 @@ async function main() { await execCommand('npm publish'); - const changelog = await execCommand(`node ${rootDir}/Tools/git-changelog ${newTag}`); + const changelog = await execCommand(`node ${rootDir}/packages/tools/git-changelog ${newTag}`); const newChangelog = await insertChangelog(newTag, changelog); diff --git a/Tools/release-clipper.js b/packages/tools/release-clipper.js similarity index 99% rename from Tools/release-clipper.js rename to packages/tools/release-clipper.js index 724ada1711..b4d0ce380c 100644 --- a/Tools/release-clipper.js +++ b/packages/tools/release-clipper.js @@ -3,7 +3,7 @@ const { execCommand } = require('./tool-utils.js'); const md5File = require('md5-file/promise'); const glob = require('glob'); -const clipperDir = `${__dirname}/../Clipper`; +const clipperDir = `${__dirname}/../packages/app-clipper`; const tmpSourceDirName = 'Clipper-source'; async function copyDir(baseSourceDir, sourcePath, baseDestDir) { diff --git a/Tools/release-electron.js b/packages/tools/release-electron.js similarity index 95% rename from Tools/release-electron.js rename to packages/tools/release-electron.js index 941edc25a4..3b8f1e499f 100644 --- a/Tools/release-electron.js +++ b/packages/tools/release-electron.js @@ -2,7 +2,7 @@ const { execCommand, githubRelease } = require('./tool-utils.js'); const path = require('path'); const rootDir = path.dirname(__dirname); -const appDir = `${rootDir}/ElectronClient`; +const appDir = `${rootDir}/packages/app-desktop`; async function main() { const argv = require('yargs').argv; diff --git a/Tools/setupNewRelease.js b/packages/tools/setupNewRelease.js similarity index 83% rename from Tools/setupNewRelease.js rename to packages/tools/setupNewRelease.js index d535ba8464..d73fa22fed 100644 --- a/Tools/setupNewRelease.js +++ b/packages/tools/setupNewRelease.js @@ -69,11 +69,11 @@ async function main() { const majorMinorVersion = argv._[0]; - await updatePackageVersion(`${rootDir}/ElectronClient/package.json`, majorMinorVersion); - await updatePackageVersion(`${rootDir}/CliClient/package.json`, majorMinorVersion); - await updateGradleVersion(`${rootDir}/ReactNativeClient/android/app/build.gradle`, majorMinorVersion); - await updateCodeProjVersion(`${rootDir}/ReactNativeClient/ios/Joplin.xcodeproj/project.pbxproj`, iosVersionHack(majorMinorVersion)); - await updateClipperManifestVersion(`${rootDir}/Clipper/manifest.json`, majorMinorVersion); + await updatePackageVersion(`${rootDir}/packages/app-desktop/package.json`, majorMinorVersion); + await updatePackageVersion(`${rootDir}/packages/app-cli/package.json`, majorMinorVersion); + await updateGradleVersion(`${rootDir}/packages/app-mobile/android/app/build.gradle`, majorMinorVersion); + await updateCodeProjVersion(`${rootDir}/packages/app-mobile/ios/Joplin.xcodeproj/project.pbxproj`, iosVersionHack(majorMinorVersion)); + await updateClipperManifestVersion(`${rootDir}/packages/app-clipper/manifest.json`, majorMinorVersion); } main().catch((error) => { diff --git a/Tools/tool-utils.js b/packages/tools/tool-utils.js similarity index 88% rename from Tools/tool-utils.js rename to packages/tools/tool-utils.js index 93c88fdc5f..f38489bc6d 100644 --- a/Tools/tool-utils.js +++ b/packages/tools/tool-utils.js @@ -243,4 +243,35 @@ toolUtils.insertContentIntoFile = async function(filePath, markerOpen, markerClo await fs.writeFile(filePath, content); }; +toolUtils.dirname = (path) => { + if (!path) throw new Error('Path is empty'); + const s = path.split(/\/|\\/); + s.pop(); + return s.join('/'); +}; + +toolUtils.basename = (path) => { + if (!path) throw new Error('Path is empty'); + const s = path.split(/\/|\\/); + return s[s.length - 1]; +}; + +toolUtils.filename = (path, includeDir = false) => { + if (!path) throw new Error('Path is empty'); + const output = includeDir ? path : toolUtils.basename(path); + if (output.indexOf('.') < 0) return output; + + const splitted = output.split('.'); + splitted.pop(); + return splitted.join('.'); +}; + +toolUtils.fileExtension = (path) => { + if (!path) throw new Error('Path is empty'); + + const output = path.split('.'); + if (output.length <= 1) return ''; + return output[output.length - 1]; +}; + module.exports = toolUtils; diff --git a/Tools/update-homebrew.js b/packages/tools/update-homebrew.js similarity index 100% rename from Tools/update-homebrew.js rename to packages/tools/update-homebrew.js diff --git a/Tools/update-readme-contributors.js b/packages/tools/update-readme-contributors.js similarity index 96% rename from Tools/update-readme-contributors.js rename to packages/tools/update-readme-contributors.js index eb8441a3c4..d03d8900d7 100644 --- a/Tools/update-readme-contributors.js +++ b/packages/tools/update-readme-contributors.js @@ -1,5 +1,3 @@ -require('app-module-path').addPath(`${__dirname}/../ReactNativeClient`); - 'use strict'; const request = require('request'); diff --git a/Tools/update-readme-download.js b/packages/tools/update-readme-download.js similarity index 96% rename from Tools/update-readme-download.js rename to packages/tools/update-readme-download.js index 70de39bfb6..ce1a81ce93 100644 --- a/Tools/update-readme-download.js +++ b/packages/tools/update-readme-download.js @@ -1,11 +1,9 @@ -require('app-module-path').addPath(`${__dirname}/../ReactNativeClient`); - 'use strict'; const fs = require('fs-extra'); const request = require('request'); -const { fileExtension } = require('lib/path-utils'); +const { fileExtension } = require('@joplinapp/lib/path-utils'); const url = 'https://api.github.com/repos/laurent22/joplin/releases/latest'; const readmePath = `${__dirname}/../README.md`; diff --git a/Tools/validate-translation.js b/packages/tools/validate-translation.js similarity index 68% rename from Tools/validate-translation.js rename to packages/tools/validate-translation.js index 091b786ea9..082721318f 100644 --- a/Tools/validate-translation.js +++ b/packages/tools/validate-translation.js @@ -4,19 +4,17 @@ // // sudo apt install gettext -require('app-module-path').addPath(`${__dirname}/../ReactNativeClient`); - -const rootDir = `${__dirname}/..`; +const rootDir = `${__dirname}/../..`; const fs = require('fs-extra'); -const cliLocalesDir = `${rootDir}/CliClient/locales`; +const localesDir = `${rootDir}/packages/tools/locales`; const { execCommand } = require('./tool-utils.js'); async function main() { - const files = fs.readdirSync(cliLocalesDir); + const files = fs.readdirSync(localesDir); let hasErrors = false; for (const file of files) { if (!file.endsWith('.po')) continue; - const fullPath = `${cliLocalesDir}/${file}`; + const fullPath = `${localesDir}/${file}`; try { await execCommand(`msgfmt -v "${fullPath}"`); diff --git a/patches/node/README.md b/patches/node/README.md deleted file mode 100644 index 1e43d077b5..0000000000 --- a/patches/node/README.md +++ /dev/null @@ -1 +0,0 @@ -Patches that apply to the Node.js applications, i.e. the desktop and CLI apps. \ No newline at end of file diff --git a/patches/node/sax+1.2.4.patch b/patches/node/sax+1.2.4.patch deleted file mode 100644 index 2ea8282cfc..0000000000 --- a/patches/node/sax+1.2.4.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff --git a/node_modules/sax/lib/sax.js b/node_modules/sax/lib/sax.js -index 795d607..ccad5d8 100644 ---- a/node_modules/sax/lib/sax.js -+++ b/node_modules/sax/lib/sax.js -@@ -1040,6 +1040,13 @@ - parser.textNode += c - } - } -+ -+ // Sax is kind of buggy when handling large text node. It has a function to check that -+ // the buffer doesn't run out of space but it doesn't seem to call it for text node. -+ // The result is that parser.textNode reaches 1GB and then the app crashes. So here -+ // we call checkBufferLength to make sure the buffer is cleared and the "text" event -+ // emitted so that the caller can handle memory properly. -+ checkBufferLength(parser); - continue - - case S.SCRIPT: diff --git a/patches/shared/README.md b/patches/shared/README.md deleted file mode 100644 index b6d350c434..0000000000 --- a/patches/shared/README.md +++ /dev/null @@ -1 +0,0 @@ -Patches that apply to all apps, mobile, desktop and CLI. \ No newline at end of file diff --git a/patches/shared/htmlparser2+4.1.0.patch b/patches/shared/htmlparser2+4.1.0.patch deleted file mode 100644 index 87075ae846..0000000000 --- a/patches/shared/htmlparser2+4.1.0.patch +++ /dev/null @@ -1,47 +0,0 @@ -diff --git a/node_modules/htmlparser2/lib/Parser.js b/node_modules/htmlparser2/lib/Parser.js -index 44b4371..bcd7cc2 100644 ---- a/node_modules/htmlparser2/lib/Parser.js -+++ b/node_modules/htmlparser2/lib/Parser.js -@@ -212,6 +212,13 @@ var Parser = /** @class */ (function (_super) { - this._tagname = ""; - }; - Parser.prototype.onclosetag = function (name) { -+ // When this is true, the onclosetag event will always be emitted -+ // for closing tags (eg ) even if that tag was not previously -+ // open. This is needed because we reconstruct the HTML based on -+ // fragments that don't necessarily contain the opening tag. -+ // Without this patch, onopentagname would not be emitted, and -+ // so the closing tag would disappear from the output. -+ var alwaysClose = true; - this._updatePosition(1); - if (this._lowerCaseTagNames) { - name = name.toLowerCase(); -@@ -236,11 +243,15 @@ var Parser = /** @class */ (function (_super) { - else if (name === "p" && !this._options.xmlMode) { - this.onopentagname(name); - this._closeCurrentTag(); -+ } else if (!this._stack.length && alwaysClose) { -+ this._cbs.onclosetag(name); - } - } - else if (!this._options.xmlMode && (name === "br" || name === "p")) { - this.onopentagname(name); - this._closeCurrentTag(); -+ } else if (!this._stack.length && alwaysClose) { -+ this._cbs.onclosetag(name); - } - }; - Parser.prototype.onselfclosingtag = function () { -@@ -331,7 +342,11 @@ var Parser = /** @class */ (function (_super) { - }; - Parser.prototype.onend = function () { - if (this._cbs.onclosetag) { -- for (var i = this._stack.length; i > 0; this._cbs.onclosetag(this._stack[--i])) -+ // Prevent the parser from auto-closing tags. Since we deal with fragments that -+ // maybe contain the opening tag but not the closing one, we don't want that -+ // closing tag to be auto-added. -+ // -+ // for (var i = this._stack.length; i > 0; this._cbs.onclosetag(this._stack[--i])) - ; - } - if (this._cbs.onend) diff --git a/readme/api/references/rest_api.md b/readme/api/references/rest_api.md index cf6e67be93..34067b9e69 100644 --- a/readme/api/references/rest_api.md +++ b/readme/api/references/rest_api.md @@ -54,6 +54,50 @@ To get the IDs only of all the tags: curl http://localhost:41184/tags?fields=id +By default API results will contain the following fields: **id**, **parent_id**, **title** +# Pagination + +All API calls that return multiple results will be paginated. The actual results will be under the `items` key, and if there are more results, there will also be a `cursor` key, which allows you to fetch the next results. If the `cursor` key is not present, it means you have reached the end of the data set. + +You can specify how the results should be sorted using the `order_by` and `order_dir` query parameters, and you can specify the number of items to be returned using the `limit` parameter (the maximum being 100 items). + +The following call for example will initiate a request to fetch all the notes, 10 at a time, and sorted by "updated_time" ascending: + + curl http://localhost:41184/notes?order_by=updated_time&order_dir=ASC&limit=10 + +This will return a result like this + + { "items": [ /* 10 notes */ ], "cursor": "somecursor" } + +Then you will resume fetching the results using this query: + + curl http://localhost:41184/notes?cursor=somecursor + +Note that you only need to pass the cursor to the next request, as it will continue the fetching process using the same parameters you initially provided. + +Eventually you will get some results that do not contain a "cursor" paramater, at which point you will have retrieved all the results + +As an example the pseudo-code below could be used to fetch all the notes: + +```javascript + +async function fetchJson(url) { + return (await fetch(url)).json(); +} + +async function fetchAllNotes() { + let query = ''; + const url = 'http://localhost:41184/notes'; + + do { + const response = await fetchJson(url + query); + console.info('Printing notes:'); + console.info(response.items); + query = '?cursor' + response.cursor; + } while (response.cursor) +} +``` + # Error handling In case of an error, an HTTP status code >= 400 will be returned along with a JSON object that provides more info about the error. The JSON object is in the format `{ "error": "description of error" }`. @@ -99,6 +143,7 @@ resource_local_state | 12 revision | 13 migration | 14 smart_filter | 15 +command | 16 # Notes diff --git a/readme/api/tutorials/toc_plugin.md b/readme/api/tutorials/toc_plugin.md index 3ef8aea357..e696430a0a 100644 --- a/readme/api/tutorials/toc_plugin.md +++ b/readme/api/tutorials/toc_plugin.md @@ -334,6 +334,6 @@ joplin.plugins.register({ And that's it! If you run this code you should now have a fully functional TOC. The full source code is available there: -https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/toc/ +https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/toc/ Various improvements can be made such as improving the styling, making the header collapsible, etc. but that tutorial should provide the basic building blocks to do so. You might also want to check the [plugin API](https://joplinapp.org/api/references/plugin_api/classes/joplin.html) for further information or head to the [development forum](https://discourse.joplinapp.org/c/development/6) for support. diff --git a/readme/build_troubleshooting.md b/readme/build_troubleshooting.md index 26eaf1b0b7..2199138f6b 100644 --- a/readme/build_troubleshooting.md +++ b/readme/build_troubleshooting.md @@ -42,7 +42,7 @@ So everything should be done from a Windows Command prompt or Windows PowerShell ## iOS -If there is an error `/joplin/ReactNativeClient/ios/Pods/Target Support Files/Pods-Joplin/Pods-Joplin.debug.xcconfig: unable to open file (in target "Joplin" in project "Joplin") (in target 'Joplin' from project 'Joplin')` run the following commands: +If there is an error `/joplin/packages/app-mobile/ios/Pods/Target Support Files/Pods-Joplin/Pods-Joplin.debug.xcconfig: unable to open file (in target "Joplin" in project "Joplin") (in target 'Joplin' from project 'Joplin')` run the following commands: cd ios pod deintegrate diff --git a/readme/changelog_cli.md b/readme/changelog_cli.md index 97ef6f3c30..d02e3b7257 100644 --- a/readme/changelog_cli.md +++ b/readme/changelog_cli.md @@ -125,7 +125,7 @@ - Improved: Upgrade sqlite (#2248 by Devon Zuegel) - Improved: Extract note renderer to separate package (WIP) (#2206 by Laurent Cozic) - Improved: Better handling of resource download errors, and added resource info to sync status screen -- Improved: Update CliClient node dependency to 10+ (#2177 by [@joeltaylor](https://github.com/joeltaylor)) +- Improved: Update Node dependency to 10+ (#2177 by [@joeltaylor](https://github.com/joeltaylor)) - Improved: Allow exporting a note as HTML - Improved: Improved logging during sync to allow finding bugs more easily - Fixed: Handle WebDAV servers that do not return a last modified date (fixes mail.ru) (#2091) diff --git a/readme/spec/e2ee.md b/readme/spec/e2ee.md index 1d47fade03..b06386bf9a 100644 --- a/readme/spec/e2ee.md +++ b/readme/spec/e2ee.md @@ -32,7 +32,7 @@ Data | ("Length" bytes) (ASCII) ## Master Keys -The master keys are used to encrypt and decrypt data. They can be generated from the Encryption Service and are saved to the database. They are themselves encrypted via a user password using a [strong encryption method](https://github.com/laurent22/joplin/blob/fb6dee32ac035b00153106273135fb16be4b4fa5/ReactNativeClient/lib/services/EncryptionService.js#L263). +The master keys are used to encrypt and decrypt data. They can be generated from the Encryption Service and are saved to the database. They are themselves encrypted via a user password using a [strong encryption method](https://github.com/laurent22/joplin/blob/fb6dee32ac035b00153106273135fb16be4b4fa5/packages/app-mobile/lib/services/EncryptionService.js#L263). These encrypted master keys are transmitted with the sync data so that they can be available to each client. Each client will need to supply the user password to decrypt each key. diff --git a/tsconfig.dev.json b/tsconfig.dev.json deleted file mode 100644 index 1a5aed6acb..0000000000 --- a/tsconfig.dev.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "./tsconfig", - "compilerOptions": { - // There's currently a bug in Electron that makes it fail to load the source maps - // (it tries to load them from the root of the app even though they are in - // sub-folders). So to have source maps anyway in dev, we use inline source maps. - // https://github.com/electron/electron/issues/22996 - "sourceMap": false, - "inlineSourceMap": true - }, - "exclude": [ - "**/node_modules", - "ElectronClient/dist/**/*", - "CliClient/tests/support/**/*", - "CliClient/tests-build/support/**/*", - ], -} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index a379383164..c37fd0b892 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "module": "commonjs", "target": "es2015", - "lib": ["es2020.string", "dom", "dom.iterable"], + //"lib": ["es2015", "es2020.string", "dom", "dom.iterable"], "alwaysStrict": true, "forceConsistentCasingInFileNames": true, "listEmittedFiles": false, @@ -17,20 +17,13 @@ "jsx": "react", "skipLibCheck": true, "allowUmdGlobalAccess": true, - "baseUrl": ".", - "paths": { - "lib/*": ["./ReactNativeClient/lib/*"], - }, }, - "include": [ - "ReactNativeClient/**/*", - "ElectronClient/**/*", - "CliClient/**/*", - ], "exclude": [ "**/node_modules", - "ElectronClient/dist/**/*", - "CliClient/tests/support/**/*", - "CliClient/tests-build/support/**/*", + "packages/app-desktop/dist/**/*", + "packages/app-cli/tests/support/**/*", + "packages/app-cli/tests-build/**/*", + "packages/app-cli/build/**/*", + "Modules/**/*", ], } \ No newline at end of file