From 6e0f7c3d53efed53d9debbe04300dc1b27f7de7c Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Mon, 30 Aug 2021 14:41:40 +0200 Subject: [PATCH] Implement register-package and export some packages Exported packages are: * anki/packages * anki/shortcuts * anki/bridgecommand --- ts/editor/index.ts | 1 + ts/lib/bridgecommand.ts | 6 +++++ ts/lib/register-package.ts | 52 ++++++++++++++++++++++++++++++++++++++ ts/lib/shortcuts.ts | 6 +++++ 4 files changed, 65 insertions(+) create mode 100644 ts/lib/register-package.ts diff --git a/ts/editor/index.ts b/ts/editor/index.ts index 0e269d76b..09ec6d01f 100644 --- a/ts/editor/index.ts +++ b/ts/editor/index.ts @@ -7,6 +7,7 @@ */ import "sveltelib/export-runtime"; +import "lib/register-package"; import { filterHTML } from "html-filter"; import { updateActiveButtons } from "./toolbar"; diff --git a/ts/lib/bridgecommand.ts b/ts/lib/bridgecommand.ts index 927e7dd03..0966120bf 100644 --- a/ts/lib/bridgecommand.ts +++ b/ts/lib/bridgecommand.ts @@ -1,6 +1,8 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +import { registerPackage } from "./register-package"; + declare global { interface Window { bridgeCommand(command: string, callback?: (value: T) => void): void; @@ -15,3 +17,7 @@ export function bridgeLink(command: string, label: string): string { export function bridgeCommand(command: string, callback?: (value: T) => void): void { window.bridgeCommand(command, callback); } + +registerPackage("anki/bridgecommand", { + bridgeCommand, +}); diff --git a/ts/lib/register-package.ts b/ts/lib/register-package.ts new file mode 100644 index 000000000..d4f926000 --- /dev/null +++ b/ts/lib/register-package.ts @@ -0,0 +1,52 @@ +// Copyright: Ankitects Pty Ltd and contributors +// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html + +import { runtimeLibraries } from "./runtime-require"; + +export function registerPackage( + name: string, + entries: Record, + deprecation?: Record +): void { + const pack = deprecation + ? new Proxy(entries, { + get: (target, name: string) => { + if (name in deprecation) { + console.log(`anki: ${name} is deprecated: ${deprecation[name]}`); + } + + return target[name]; + }, + }) + : entries; + + runtimeLibraries[name] = pack; +} + +function listPackages(): string[] { + return Object.keys(runtimeLibraries); +} + +function hasPackages(...names: string[]): boolean { + const libraries = listPackages(); + return names.reduce( + (accu: boolean, name: string) => accu && libraries.includes(name), + true + ); +} + +function immediatelyDeprecated() { + return false; +} + +registerPackage( + "anki/packages", + { + listPackages, + hasPackages, + immediatelyDeprecated, + }, + { + [immediatelyDeprecated.name]: "Do not use this function", + } +); diff --git a/ts/lib/shortcuts.ts b/ts/lib/shortcuts.ts index c6afa9e09..0c62ebda1 100644 --- a/ts/lib/shortcuts.ts +++ b/ts/lib/shortcuts.ts @@ -3,6 +3,7 @@ import * as tr from "./i18n"; import { isApplePlatform } from "./platform"; +import { registerPackage } from "./register-package"; export type Modifier = "Control" | "Alt" | "Shift" | "Meta"; @@ -183,3 +184,8 @@ export function registerShortcut( document.addEventListener("keydown", handler); return (): void => document.removeEventListener("keydown", handler); } + +registerPackage("anki/shortcuts", { + registerShortcut, + getPlatformString, +});