diff --git a/import_map.json b/import_map.json index 5c9eafba..952ce3be 100644 --- a/import_map.json +++ b/import_map.json @@ -1,8 +1,6 @@ - { - "imports": { - "@codemirror/state": "https://esm.sh/@codemirror/state", - "@codemirror/language": "https://esm.sh/@codemirror/language" - } + "imports": { + "@codemirror/state": "https://esm.sh/@codemirror/state", + "@codemirror/language": "https://esm.sh/@codemirror/language" } - \ No newline at end of file +} diff --git a/mod.ts b/mod.ts index 91ea832b..53592a39 100644 --- a/mod.ts +++ b/mod.ts @@ -3,12 +3,29 @@ export { completionKeymap, } from "https://esm.sh/@codemirror/autocomplete@6.3.0?external=@codemirror/state"; +export * as YAML from "https://deno.land/std@0.158.0/encoding/yaml.ts"; +export * as path from "https://deno.land/std@0.158.0/path/mod.ts"; + +export { readAll } from "https://deno.land/std@0.158.0/streams/conversion.ts"; + +export { + encode as b64encode, + decode as b64decode, +} from "https://deno.land/std/encoding/base64.ts"; + export { defaultHighlightStyle, Language, + LanguageSupport, + LanguageDescription, syntaxHighlighting, syntaxTree, -} from "https://esm.sh/@codemirror/language@6.2.1?external=@codemirror/state"; + defineLanguageFacet, + languageDataProp, + foldNodeProp, + indentNodeProp, + ParseContext, +} from "@codemirror/language"; export { markdown } from "https://esm.sh/@codemirror/lang-markdown@6.0.1?external=@codemirror/state"; export { history, @@ -30,13 +47,22 @@ export type { MarkdownConfig, Table, TaskList, + MarkdownExtension, } from "https://esm.sh/@lezer/markdown"; -export type { SyntaxNode } from "https://esm.sh/@lezer/common"; - export { - searchKeymap, -} from "https://esm.sh/@codemirror/search?external=@codemirror/state"; + MarkdownParser, + parseCode, + parser as baseParser, + GFM, + Subscript, + Superscript, + Emoji, +} from "https://esm.sh/@lezer/markdown"; + +export type { SyntaxNode, Tree } from "https://esm.sh/@lezer/common"; + +export { searchKeymap } from "https://esm.sh/@codemirror/search?external=@codemirror/state"; export { drawSelection, @@ -50,6 +76,10 @@ export { } from "https://esm.sh/@codemirror/view@6.3.0?external=@codemirror/state"; export type { KeyBinding } from "https://esm.sh/@codemirror/view@6.3.0?external=@codemirror/state"; -// export * as react from "https://esm.sh/react@17"; +export { EditorSelection, EditorState, Text } from "@codemirror/state"; +export type { StateCommand, ChangeSpec } from "@codemirror/state"; -export { EditorSelection, EditorState } from "@codemirror/state"; +export { DB as SQLite3 } from "https://deno.land/x/sqlite/mod.ts"; + +// @deno-types="https://deno.land/x/dex@1.0.2/types/index.d.ts" +export { default as Dex } from "https://deno.land/x/dex@1.0.2/mod.ts"; diff --git a/out.log b/out.log new file mode 100644 index 00000000..af3e572a --- /dev/null +++ b/out.log @@ -0,0 +1,674 @@ +Args { + _: [ "packages/plugs/core/core.plug.yaml" ], + exclude: [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ], + dist: "/Users/zef/git/silverbullet/dist" +} +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for clearPageIndex + _out.tmp 1.2kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 8.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 7.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/page.ts 77b 6.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 62b 4.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 3.0% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.5% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for pageQueryProvider + _out.tmp 2.3kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 1.0kb 43.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/page.ts 212b 8.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 4.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/space.ts 53b 2.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 52b 2.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 0.8% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for parseIndexTextRepublish + _out.tmp 1.4kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/event.ts 199b 13.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 7.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 6.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/page.ts 81b 5.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/markdown.ts 57b 3.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.3% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for reindexCommand + _out.tmp 1.3kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 7.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/page.ts 104b 7.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 7.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/system.ts 70b 5.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 64b 4.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.8% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.4% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for reindexSpace + _out.tmp 1.8kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/page.ts 272b 15.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/event.ts 199b 10.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/space.ts 102b 5.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 5.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/markdown.ts 57b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 52b 2.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.1% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.0% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for deletePage + _out.tmp 1.4kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/page.ts 138b 9.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 7.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 102b 7.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 6.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/space.ts 51b 3.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.7% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.3% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for editorLoad + _out.tmp 747b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 14.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/editor.ts 56b 7.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 54b 7.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/clientStore.ts 50b 6.7% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 5.1% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for toggleReadOnlyMode + _out.tmp 836b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 12.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/clientStore.ts 104b 12.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/editor.ts 91b 10.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 54b 6.5% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 4.5% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for indexLinks + _out.tmp 2.6kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/data.ts 515b 19.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 435b 16.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/page.ts 429b 16.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 105b 4.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 4.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 3.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.4% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 0.7% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for linkQueryProvider + _out.tmp 2.2kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 1.0kb 45.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/page.ts 153b 6.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 4.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 52b 2.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.7% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 0.8% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for renamePage + _out.tmp 3.0kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/page.ts 1001b 33.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 392b 13.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 233b 7.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/space.ts 154b 5.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 3.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 3.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/markdown.ts 57b 1.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 52b 1.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.3% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 0.6% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for pageComplete + _out.tmp 1.4kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/page.ts 155b 11.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 7.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 7.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/space.ts 53b 3.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 47b 3.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.7% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.4% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for commandComplete + _out.tmp 849b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/command.ts 164b 19.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 12.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/system.ts 51b 6.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 47b 5.5% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 4.5% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for indexItems + _out.tmp 2.4kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/item.ts 497b 20.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/util.ts 469b 18.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 353b 14.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 4.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 3.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 53b 2.1% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.5% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for queryProvider + _out.tmp 2.2kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 1.0kb 45.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/item.ts 149b 6.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 4.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 52b 2.3% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.7% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for linkNavigate + _out.tmp 1.8kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/navigate.ts 643b 35.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 291b 16.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 167b 9.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/markdown.ts 57b 3.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/system.ts 55b 3.1% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.1% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for clickNavigate + _out.tmp 1.7kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/navigate.ts 671b 37.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 249b 13.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 167b 9.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/markdown.ts 57b 3.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/system.ts 55b 3.1% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.1% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for navigateCommand + _out.tmp 678b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 15.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 55b 8.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 5.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/navigate.ts 36b 5.3% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for indexTags + _out.tmp 2.1kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/util.ts 469b 21.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 353b 16.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/tags.ts 155b 7.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 4.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 4.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 53b 2.5% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.8% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for tagComplete + _out.tmp 1.3kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/tags.ts 162b 11.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 7.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 7.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 52b 3.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 47b 3.4% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.8% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for tagProvider + _out.tmp 2.2kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 1.0kb 45.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/tags.ts 176b 7.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 4.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 52b 2.3% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.7% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for indexAnchors + _out.tmp 1.6kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/util.ts 469b 28.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 353b 21.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/anchor.ts 206b 12.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 6.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 53b 3.2% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.3% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for anchorComplete + _out.tmp 1003b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/anchor.ts 270b 26.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 10.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 94b 9.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 52b 5.2% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 3.8% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for index + _out.tmp 2.0kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/util.ts 469b 23.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 311b 15.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 4.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/search.ts 64b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/fulltext.ts 53b 2.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.9% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 0.9% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for unindex + _out.tmp 1.2kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 8.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 8.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/fulltext.ts 50b 4.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/search.ts 31b 2.5% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.6% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for queryProvider + _out.tmp 2.5kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 1.0kb 40.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/search.ts 359b 14.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 4.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/fulltext.ts 58b 2.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/index.ts 52b 2.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.5% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 0.7% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for searchCommand + _out.tmp 1.3kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 7.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 104b 7.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 7.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/search.ts 91b 6.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.9% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.4% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for readPageSearch + _out.tmp 1.4kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/search.ts 229b 16.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 7.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 6.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/fulltext.ts 58b 4.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.7% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.3% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for getPageMetaSearch + _out.tmp 1.2kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 8.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 8.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/search.ts 60b 5.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 3.2% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.6% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for insertTemplateText + _out.tmp 1.9kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/template.ts 478b 24.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 185b 9.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 5.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/settings_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/dates.ts 51b 2.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.9% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for insertTemplateText + _out.tmp 1.9kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/template.ts 478b 24.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 185b 9.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 5.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/settings_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/dates.ts 51b 2.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.9% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for insertTemplateText + _out.tmp 1.9kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/template.ts 478b 24.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 185b 9.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 5.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/settings_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/dates.ts 51b 2.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.9% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for insertTemplateText + _out.tmp 1.9kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/template.ts 478b 24.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 185b 9.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 5.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/settings_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/dates.ts 51b 2.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.9% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for insertTemplateText + _out.tmp 1.9kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/template.ts 478b 24.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 185b 9.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 5.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/settings_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/dates.ts 51b 2.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.9% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for insertTemplateText + _out.tmp 1.9kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/template.ts 478b 24.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 185b 9.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 5.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/settings_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/dates.ts 51b 2.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.9% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for insertTemplateText + _out.tmp 1.9kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/template.ts 478b 24.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 185b 9.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 5.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/settings_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/dates.ts 51b 2.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.9% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for quickNoteCommand + _out.tmp 2.3kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 439b 18.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/settings_page.ts 262b 11.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/template.ts 179b 7.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 177b 7.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 4.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 4.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/markdown.ts 57b 2.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 55b 2.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/space.ts 49b 2.1% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.6% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for dailyNoteCommand + _out.tmp 3.0kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/template.ts 710b 23.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 439b 14.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/settings_page.ts 262b 8.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 177b 5.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/space.ts 155b 5.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 3.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 3.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/markdown.ts 57b 1.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 55b 1.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/dates.ts 51b 1.7% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.3% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for instantiateTemplateCommand + _out.tmp 4.1kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/template.ts 866b 20.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 569b 13.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/data.ts 515b 12.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 439b 10.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/settings_page.ts 262b 6.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 167b 4.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/space.ts 156b 3.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 2.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 2.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/markdown.ts 57b 1.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/dates.ts 51b 1.2% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 0.9% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for insertSnippet + _out.tmp 3.2kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/template.ts 774b 24.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 439b 13.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/settings_page.ts 262b 8.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 248b 7.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 177b 5.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 3.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/space.ts 102b 3.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 3.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/markdown.ts 57b 1.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/dates.ts 51b 1.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.2% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for insertTemplateText + _out.tmp 1.9kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/template.ts 478b 24.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 185b 9.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 5.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/settings_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/dates.ts 51b 2.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.9% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for insertTemplateText + _out.tmp 1.9kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/template.ts 478b 24.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 185b 9.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/query/engine.ts 97b 5.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/settings_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 61b 3.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/dates.ts 51b 2.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.9% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for quoteSelection + _out.tmp 959b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/text.ts 231b 24.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 141b 14.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 10.9% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 4.0% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for listifySelection + _out.tmp 892b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/text.ts 164b 18.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 141b 15.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 11.8% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 4.3% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for numberListifySelection + _out.tmp 915b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/text.ts 187b 20.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 141b 15.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 11.5% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 4.2% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for linkSelection + _out.tmp 972b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/text.ts 198b 20.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 187b 19.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 10.8% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 3.9% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for wrapSelection + _out.tmp 1.3kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/text.ts 495b 36.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 289b 21.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 7.7% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.8% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for wrapSelection + _out.tmp 1.3kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/text.ts 495b 36.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 289b 21.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 7.7% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.8% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for wrapSelection + _out.tmp 1.3kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/text.ts 495b 36.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 289b 21.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 7.7% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.8% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for updatePlugsCommand + _out.tmp 1.5kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/plugmanager.ts 172b 11.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/system.ts 113b 7.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 7.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 101b 6.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 61b 4.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.3% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for updatePlugs + _out.tmp 2.8kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/plugmanager.ts 681b 23.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 439b 15.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/space.ts 217b 7.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/event.ts 199b 7.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 177b 6.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 3.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/markdown.ts 57b 2.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/system.ts 43b 1.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.3% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 0.7% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for getPlugHTTPS + _out.tmp 1.3kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/plugmanager.ts 208b 15.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 8.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 61b 4.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.9% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.5% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for getPlugGithub + _out.tmp 1.4kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/plugmanager.ts 345b 23.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 7.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 61b 4.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.3% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for getPlugGithubRelease + _out.tmp 1.6kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/plugmanager.ts 584b 34.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 6.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/lib/yaml_page.ts 61b 3.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.3% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.1% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for parsePageCommand + _out.tmp 764b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 13.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/debug.ts 80b 10.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/markdown.ts 57b 7.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 40b 5.2% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 5.0% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for showLogsCommand + _out.tmp 2.1kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/debug.ts 1.3kb 64.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 5.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 60b 2.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/sandbox.ts 59b 2.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/sandbox.ts 53b 2.5% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 1.8% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for hideBhsCommand + _out.tmp 666b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 15.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 45b 6.8% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 5.7% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/debug.ts 34b 5.1% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for unfurlCommand + _out.tmp 1.7kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/link.ts 371b 21.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 265b 15.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/event.ts 199b 11.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 167b 9.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 6.1% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/system.ts 70b 4.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/markdown.ts 57b 3.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.2% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 1.1% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for unfurlExec + _out.tmp 919b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/event.ts 199b 21.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/link.ts 114b 12.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 11.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 4.1% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 2.1% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for titleUnfurlOptions + _out.tmp 675b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 15.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/link.ts 69b 10.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 5.6% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 2.8% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for titleUnfurl + _out.tmp 925b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/link.ts 319b 34.5% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 11.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 4.1% + └ deno:file:///Users/zef/git/silverbullet/packages/plugos-syscall/syscall.ts 19b 2.1% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for statsCommand + _out.tmp 983b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/stats.ts 239b 24.3% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 10.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/editor.ts 104b 10.6% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/space.ts 53b 5.4% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 3.9% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for readFileCloud + _out.tmp 1.5kb 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/cloud.ts 584b 38.2% + ├ deno:file:///Users/zef/git/silverbullet/packages/common/tree.ts 301b 19.7% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 6.9% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/markdown.ts 57b 3.7% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 2.5% + +External modules [ "https://esm.sh/handlebars", "https://deno.land/std@0.158.0/encoding/yaml.ts" ] +Bundle info for getFileMetaCloud + _out.tmp 682b 100.0% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugos-silverbullet-syscall/syscall.ts 105b 15.4% + ├ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/cloud.ts 95b 13.9% + └ deno:file:///Users/zef/git/silverbullet/packages/plugs/core/_in.ts 38b 5.6% + +Emitting bundle to /Users/zef/git/silverbullet/dist/core.plug.json diff --git a/packages/common/markdown/commands.ts b/packages/common/markdown/commands.ts index e07e274a..1f5f5c62 100644 --- a/packages/common/markdown/commands.ts +++ b/packages/common/markdown/commands.ts @@ -6,10 +6,10 @@ import { Text, EditorSelection, ChangeSpec, -} from "@codemirror/state"; -import { syntaxTree } from "@codemirror/language"; -import { SyntaxNode, Tree } from "@lezer/common"; -import { markdownLanguage } from "./markdown"; +} from "../../../mod.ts"; +import { syntaxTree } from "../../../mod.ts"; +import { SyntaxNode, Tree } from "../../../mod.ts"; +import { markdownLanguage } from "./markdown.ts"; function nodeStart(node: SyntaxNode, doc: Text) { return doc.sliceString(node.from, node.from + 50); diff --git a/packages/common/markdown/index.ts b/packages/common/markdown/index.ts index df23eced..b75ae9b3 100644 --- a/packages/common/markdown/index.ts +++ b/packages/common/markdown/index.ts @@ -2,21 +2,24 @@ // * Disable HTML tags import { Prec } from "@codemirror/state"; -import { KeyBinding, keymap } from "@codemirror/view"; +import { KeyBinding, keymap } from "../../../mod.ts"; import { Language, LanguageSupport, LanguageDescription, -} from "@codemirror/language"; -import { MarkdownExtension, MarkdownParser, parseCode } from "@lezer/markdown"; +} from "../../../mod.ts"; +import { MarkdownExtension, MarkdownParser, parseCode } from "../../../mod.ts"; // import { html } from "@codemirror/lang-html"; import { commonmarkLanguage, markdownLanguage, mkLang, getCodeParser, -} from "./markdown"; -import { insertNewlineContinueMarkup, deleteMarkupBackward } from "./commands"; +} from "./markdown.ts"; +import { + insertNewlineContinueMarkup, + deleteMarkupBackward, +} from "./commands.ts"; export { commonmarkLanguage, markdownLanguage, diff --git a/packages/common/markdown/markdown.ts b/packages/common/markdown/markdown.ts index 928d3077..81164fd9 100644 --- a/packages/common/markdown/markdown.ts +++ b/packages/common/markdown/markdown.ts @@ -6,15 +6,15 @@ import { indentNodeProp, LanguageDescription, ParseContext, -} from "@codemirror/language"; +} from "../../../mod.ts"; import { - parser as baseParser, + baseParser, MarkdownParser, GFM, Subscript, Superscript, Emoji, -} from "@lezer/markdown"; +} from "../../../mod.ts"; const data = defineLanguageFacet({ block: { open: "" } }); diff --git a/packages/common/spaces/disk_space_primitives.ts b/packages/common/spaces/disk_space_primitives.ts index ff141f9d..a2971ba7 100644 --- a/packages/common/spaces/disk_space_primitives.ts +++ b/packages/common/spaces/disk_space_primitives.ts @@ -1,24 +1,25 @@ -import { mkdir, readdir, readFile, stat, unlink, writeFile } from "fs/promises"; -import * as path from "path"; -import { FileMeta } from "../types"; -import { FileData, FileEncoding, SpacePrimitives } from "./space_primitives"; -import { Plug } from "@plugos/plugos/plug"; -import { realpathSync } from "fs"; -import mime from "mime-types"; +// import { mkdir, readdir, readFile, stat, unlink, writeFile } from "fs/promises"; +import { path } from "../../../mod.ts"; +import { b64encode, b64decode } from "../../../mod.ts"; +import { readAll } from "../../../mod.ts"; +import { FileMeta } from "../types.ts"; +import { FileData, FileEncoding, SpacePrimitives } from "./space_primitives.ts"; +import { Plug } from "../../plugos/plug.ts"; +import { mime } from "https://deno.land/x/mimetypes@v1.0.0/mod.ts"; function lookupContentType(path: string): string { - return mime.lookup(path) || "application/octet-stream"; + return mime.getType(path) || "application/octet-stream"; } export class DiskSpacePrimitives implements SpacePrimitives { rootPath: string; constructor(rootPath: string) { - this.rootPath = realpathSync(rootPath); + this.rootPath = Deno.realPathSync(rootPath); } safePath(p: string): string { - let realPath = path.resolve(p); + const realPath = path.resolve(p); if (!realPath.startsWith(this.rootPath)) { throw Error(`Path ${p} is not in the space`); } @@ -39,29 +40,37 @@ export class DiskSpacePrimitives implements SpacePrimitives { ): Promise<{ data: FileData; meta: FileMeta }> { const localPath = this.filenameToPath(name); try { - const s = await stat(localPath); + const s = await Deno.stat(localPath); let data: FileData | null = null; - let contentType = lookupContentType(name); + const contentType = lookupContentType(name); switch (encoding) { case "string": - data = await readFile(localPath, "utf8"); + data = await Deno.readTextFile(localPath); break; case "dataurl": - let fileBuffer = await readFile(localPath, { - encoding: "base64", - }); - data = `data:${contentType};base64,${fileBuffer}`; + { + const f = await Deno.open(localPath, { read: true }); + const buf = b64encode(await readAll(f)); + Deno.close(f.rid); + + data = `data:${contentType};base64,${buf}`; + } break; case "arraybuffer": - let arrayBuffer = await readFile(localPath); - data = arrayBuffer.buffer; + { + const f = await Deno.open(localPath, { read: true }); + const buf = await readAll(f); + Deno.close(f.rid); + + data = buf.buffer; + } break; } return { data, meta: { name: name, - lastModified: s.mtime.getTime(), + lastModified: s.mtime!.getTime(), perm: "rw", size: s.size, contentType: contentType, @@ -82,30 +91,31 @@ export class DiskSpacePrimitives implements SpacePrimitives { let localPath = this.filenameToPath(name); try { // Ensure parent folder exists - await mkdir(path.dirname(localPath), { recursive: true }); + await Deno.mkdir(path.dirname(localPath), { recursive: true }); // Actually write the file switch (encoding) { case "string": - await writeFile(localPath, data as string, "utf8"); + await Deno.writeTextFile(localPath, data as string); break; case "dataurl": - await writeFile(localPath, (data as string).split(",")[1], { - encoding: "base64", - }); + await Deno.writeFile( + localPath, + b64decode((data as string).split(",")[1]) + ); break; case "arraybuffer": - await writeFile(localPath, Buffer.from(data as ArrayBuffer)); + await Deno.writeFile(localPath, new Uint8Array(data as ArrayBuffer)); break; } // Fetch new metadata - const s = await stat(localPath); + const s = await Deno.stat(localPath); return { name: name, size: s.size, contentType: lookupContentType(name), - lastModified: s.mtime.getTime(), + lastModified: s.mtime!.getTime(), perm: "rw", }; } catch (e) { @@ -115,14 +125,14 @@ export class DiskSpacePrimitives implements SpacePrimitives { } async getFileMeta(name: string): Promise { - let localPath = this.filenameToPath(name); + const localPath = this.filenameToPath(name); try { - const s = await stat(localPath); + const s = await Deno.stat(localPath); return { name: name, size: s.size, contentType: lookupContentType(name), - lastModified: s.mtime.getTime(), + lastModified: s.mtime!.getTime(), perm: "rw", }; } catch (e) { @@ -132,30 +142,29 @@ export class DiskSpacePrimitives implements SpacePrimitives { } async deleteFile(name: string): Promise { - let localPath = this.filenameToPath(name); - await unlink(localPath); + const localPath = this.filenameToPath(name); + await Deno.remove(localPath); } async fetchFileList(): Promise { - let fileList: FileMeta[] = []; + const fileList: FileMeta[] = []; const walkPath = async (dir: string) => { - let files = await readdir(dir); - for (let file of files) { - if (file.startsWith(".")) { + for await (const file of Deno.readDir(dir)) { + if (file.name.startsWith(".")) { continue; } - const fullPath = path.join(dir, file); - let s = await stat(fullPath); - if (s.isDirectory()) { + const fullPath = path.join(dir, file.name); + let s = await Deno.stat(fullPath); + if (file.isDirectory) { await walkPath(fullPath); } else { - if (!file.startsWith(".")) { + if (!file.name.startsWith(".")) { fileList.push({ name: this.pathToFilename(fullPath), size: s.size, contentType: lookupContentType(fullPath), - lastModified: s.mtime.getTime(), + lastModified: s.mtime!.getTime(), perm: "rw", }); } diff --git a/packages/common/spaces/evented_space_primitives.ts b/packages/common/spaces/evented_space_primitives.ts index eb40b95d..74341be4 100644 --- a/packages/common/spaces/evented_space_primitives.ts +++ b/packages/common/spaces/evented_space_primitives.ts @@ -1,8 +1,8 @@ -import { EventHook } from "@plugos/plugos/hooks/event"; -import { Plug } from "@plugos/plugos/plug"; +import { EventHook } from "../../plugos/hooks/event.ts"; +import { Plug } from "../../plugos/plug.ts"; -import { FileMeta } from "../types"; -import { FileData, FileEncoding, SpacePrimitives } from "./space_primitives"; +import { FileMeta } from "../types.ts"; +import { FileData, FileEncoding, SpacePrimitives } from "./space_primitives.ts"; export class EventedSpacePrimitives implements SpacePrimitives { constructor(private wrapped: SpacePrimitives, private eventHook: EventHook) {} @@ -52,8 +52,11 @@ export class EventedSpacePrimitives implements SpacePrimitives { text = data as string; break; case "arraybuffer": - const decoder = new TextDecoder("utf-8"); - text = decoder.decode(data as ArrayBuffer); + { + const decoder = new TextDecoder("utf-8"); + text = decoder.decode(data as ArrayBuffer); + } + break; case "dataurl": throw Error("Data urls not supported in this context"); diff --git a/packages/common/spaces/http_space_primitives.ts b/packages/common/spaces/http_space_primitives.ts index 8e18f09f..732f1e98 100644 --- a/packages/common/spaces/http_space_primitives.ts +++ b/packages/common/spaces/http_space_primitives.ts @@ -1,6 +1,6 @@ -import { AttachmentMeta, FileMeta, PageMeta } from "../types"; -import { Plug } from "@plugos/plugos/plug"; -import { FileData, FileEncoding, SpacePrimitives } from "./space_primitives"; +import { AttachmentMeta, FileMeta, PageMeta } from "../types.ts"; +import { Plug } from "../../plugos/plug.ts"; +import { FileData, FileEncoding, SpacePrimitives } from "./space_primitives.ts"; export class HttpSpacePrimitives implements SpacePrimitives { fsUrl: string; @@ -51,12 +51,16 @@ export class HttpSpacePrimitives implements SpacePrimitives { let data: FileData | null = null; switch (encoding) { case "arraybuffer": - let abBlob = await res.blob(); - data = await abBlob.arrayBuffer(); + { + let abBlob = await res.blob(); + data = await abBlob.arrayBuffer(); + } break; case "dataurl": - let dUBlob = await res.blob(); - data = arrayBufferToDataUrl(await dUBlob.arrayBuffer()); + { + let dUBlob = await res.blob(); + data = arrayBufferToDataUrl(await dUBlob.arrayBuffer()); + } break; case "string": data = await res.text(); diff --git a/packages/common/spaces/space.ts b/packages/common/spaces/space.ts index 7ee73785..add6fc3d 100644 --- a/packages/common/spaces/space.ts +++ b/packages/common/spaces/space.ts @@ -1,9 +1,9 @@ -import { FileData, FileEncoding, SpacePrimitives } from "./space_primitives"; -import { AttachmentMeta, FileMeta, PageMeta } from "../types"; -import { EventEmitter } from "@plugos/plugos/event"; -import { Plug } from "@plugos/plugos/plug"; -import { plugPrefix } from "./constants"; -import { safeRun } from "../util"; +import { FileData, FileEncoding, SpacePrimitives } from "./space_primitives.ts"; +import { AttachmentMeta, FileMeta, PageMeta } from "../types.ts"; +import { EventEmitter } from "../../plugos/event.ts"; +import { Plug } from "../../plugos/plug.ts"; +import { plugPrefix } from "./constants.ts"; +import { safeRun } from "../util.ts"; const pageWatchInterval = 2000; diff --git a/packages/common/spaces/space_primitives.ts b/packages/common/spaces/space_primitives.ts index 4156a3a7..9f0e6750 100644 --- a/packages/common/spaces/space_primitives.ts +++ b/packages/common/spaces/space_primitives.ts @@ -1,5 +1,5 @@ -import { Plug } from "@plugos/plugos/plug"; -import { FileMeta } from "../types"; +import { Plug } from "../../plugos/plug.ts"; +import { FileMeta } from "../types.ts"; export type FileEncoding = "string" | "arraybuffer" | "dataurl"; export type FileData = ArrayBuffer | string; diff --git a/packages/common/syscalls/markdown.ts b/packages/common/syscalls/markdown.ts index 389a8575..68493a1e 100644 --- a/packages/common/syscalls/markdown.ts +++ b/packages/common/syscalls/markdown.ts @@ -1,11 +1,11 @@ -import { SysCallMapping } from "@plugos/plugos/system"; -import { parse } from "../parse_tree"; -import { Language } from "@codemirror/language"; -import type { ParseTree } from "../tree"; +import { SysCallMapping } from "../../plugos/system.ts"; +import { parse } from "../parse_tree.ts"; +import { Language } from "../../../mod.ts"; +import type { ParseTree } from "../tree.ts"; export function markdownSyscalls(lang: Language): SysCallMapping { return { - "markdown.parseMarkdown": (ctx, text: string): ParseTree => { + "markdown.parseMarkdown": (_ctx, text: string): ParseTree => { return parse(lang, text); }, }; diff --git a/packages/common/util.ts b/packages/common/util.ts index 6be4781f..9701d89e 100644 --- a/packages/common/util.ts +++ b/packages/common/util.ts @@ -1,4 +1,4 @@ -import YAML from "yaml"; +import { YAML } from "../../mod.ts"; export function safeRun(fn: () => Promise) { fn().catch((e) => { @@ -33,5 +33,7 @@ export function parseYamlSettings(settingsMarkdown: string): { return {}; } const yaml = match[1]; - return YAML.parse(yaml); + return YAML.parse(yaml) as { + [key: string]: any; + }; } diff --git a/packages/plugos-silverbullet-syscall/clientStore.ts b/packages/plugos-silverbullet-syscall/clientStore.ts index cce7076b..6b9f8e20 100644 --- a/packages/plugos-silverbullet-syscall/clientStore.ts +++ b/packages/plugos-silverbullet-syscall/clientStore.ts @@ -1,4 +1,4 @@ -import { syscall } from "./syscall"; +import { syscall } from "./syscall.ts"; export async function set(key: string, value: any): Promise { return syscall("clientStore.set", key, value); diff --git a/packages/plugos-silverbullet-syscall/editor.ts b/packages/plugos-silverbullet-syscall/editor.ts index 1f78460c..3e7016a9 100644 --- a/packages/plugos-silverbullet-syscall/editor.ts +++ b/packages/plugos-silverbullet-syscall/editor.ts @@ -1,5 +1,5 @@ -import { syscall } from "./syscall"; -import { FilterOption } from "../common/types"; +import { syscall } from "./syscall.ts"; +import { FilterOption } from "../common/types.ts"; export function getCurrentPage(): Promise { return syscall("editor.getCurrentPage"); diff --git a/packages/plugos-silverbullet-syscall/index.ts b/packages/plugos-silverbullet-syscall/index.ts index a5c13118..72c27442 100644 --- a/packages/plugos-silverbullet-syscall/index.ts +++ b/packages/plugos-silverbullet-syscall/index.ts @@ -1,5 +1,5 @@ -import type { Query } from "@plugos/plugos-syscall/store"; -import { syscall } from "./syscall"; +import type { Query } from "../plugos-syscall/store.ts"; +import { syscall } from "./syscall.ts"; export type KV = { key: string; diff --git a/packages/plugos-silverbullet-syscall/markdown.ts b/packages/plugos-silverbullet-syscall/markdown.ts index 62ac5f47..e879472f 100644 --- a/packages/plugos-silverbullet-syscall/markdown.ts +++ b/packages/plugos-silverbullet-syscall/markdown.ts @@ -1,6 +1,6 @@ -import { syscall } from "./syscall"; +import { syscall } from "./syscall.ts"; -import type { ParseTree } from "../common/tree"; +import type { ParseTree } from "../common/tree.ts"; export async function parseMarkdown(text: string): Promise { return syscall("markdown.parseMarkdown", text); diff --git a/packages/plugos-silverbullet-syscall/space.ts b/packages/plugos-silverbullet-syscall/space.ts index 4fc28ce1..a37983f1 100644 --- a/packages/plugos-silverbullet-syscall/space.ts +++ b/packages/plugos-silverbullet-syscall/space.ts @@ -1,5 +1,5 @@ -import { syscall } from "./syscall"; -import { AttachmentMeta, PageMeta } from "../common/types"; +import { syscall } from "./syscall.ts"; +import { AttachmentMeta, PageMeta } from "../common/types.ts"; export async function listPages(unfiltered = false): Promise { return syscall("space.listPages", unfiltered); diff --git a/packages/plugos-silverbullet-syscall/system.ts b/packages/plugos-silverbullet-syscall/system.ts index 79748eb5..c5dbf5c4 100644 --- a/packages/plugos-silverbullet-syscall/system.ts +++ b/packages/plugos-silverbullet-syscall/system.ts @@ -1,5 +1,5 @@ -import type { CommandDef } from "@silverbulletmd/web/hooks/command"; -import { syscall } from "./syscall"; +import type { CommandDef } from "../web/hooks/command.ts"; +import { syscall } from "./syscall.ts"; export async function invokeFunction( env: string, diff --git a/packages/plugos-syscall/event.ts b/packages/plugos-syscall/event.ts index 592e6288..6fce9857 100644 --- a/packages/plugos-syscall/event.ts +++ b/packages/plugos-syscall/event.ts @@ -1,4 +1,4 @@ -import { syscall } from "./syscall"; +import { syscall } from "./syscall.ts"; export async function dispatch( eventName: string, diff --git a/packages/plugos-syscall/fs.ts b/packages/plugos-syscall/fs.ts index 4c971cc6..600062ba 100644 --- a/packages/plugos-syscall/fs.ts +++ b/packages/plugos-syscall/fs.ts @@ -1,4 +1,4 @@ -import { syscall } from "./syscall"; +import { syscall } from "./syscall.ts"; export type FileMeta = { name: string; diff --git a/packages/plugos-syscall/fulltext.ts b/packages/plugos-syscall/fulltext.ts index f0bf9f17..292d168e 100644 --- a/packages/plugos-syscall/fulltext.ts +++ b/packages/plugos-syscall/fulltext.ts @@ -1,4 +1,4 @@ -import { syscall } from "./syscall"; +import { syscall } from "./syscall.ts"; export async function fullTextIndex(key: string, value: string) { return syscall("fulltext.index", key, value); diff --git a/packages/plugos-syscall/sandbox.ts b/packages/plugos-syscall/sandbox.ts index 8ce6dad2..07e9a4d4 100644 --- a/packages/plugos-syscall/sandbox.ts +++ b/packages/plugos-syscall/sandbox.ts @@ -1,4 +1,4 @@ -import type { LogEntry } from "@plugos/plugos/sandbox"; +import type { LogEntry } from "../plugos/sandbox.ts"; export async function getLogs(): Promise { return syscall("sandbox.getLogs"); diff --git a/packages/plugos-syscall/shell.ts b/packages/plugos-syscall/shell.ts index df9fd374..339dc7e1 100644 --- a/packages/plugos-syscall/shell.ts +++ b/packages/plugos-syscall/shell.ts @@ -1,4 +1,4 @@ -import { syscall } from "./syscall"; +import { syscall } from "./syscall.ts"; export async function run( cmd: string, diff --git a/packages/plugos-syscall/store.ts b/packages/plugos-syscall/store.ts index 3202b5f5..aa7b3c6f 100644 --- a/packages/plugos-syscall/store.ts +++ b/packages/plugos-syscall/store.ts @@ -1,4 +1,4 @@ -import { syscall } from "./syscall"; +import { syscall } from "./syscall.ts"; export type KV = { key: string; diff --git a/packages/plugos/bin/plugos-bundle.ts b/packages/plugos/bin/plugos-bundle.ts index d11dc6db..53164606 100755 --- a/packages/plugos/bin/plugos-bundle.ts +++ b/packages/plugos/bin/plugos-bundle.ts @@ -1,14 +1,11 @@ -#!/usr/bin/env node +#!/usr/bin/env deno -import { readFile, watch, writeFile } from "fs/promises"; -import path from "path"; +import { Manifest } from "../types.ts"; +import { YAML } from "../../../mod.ts"; +import { compile, esbuild, sandboxCompileModule } from "../compile.ts"; +import { path } from "../../../mod.ts"; -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; -import { Manifest } from "../types"; -import YAML from "yaml"; -import { mkdirSync } from "fs"; -import { compile, sandboxCompileModule } from "../compile"; +import * as flags from "https://deno.land/std@0.158.0/flags/mod.ts"; async function bundle( manifestPath: string, @@ -17,14 +14,15 @@ async function bundle( ) { const rootPath = path.dirname(manifestPath); const manifest = YAML.parse( - (await readFile(manifestPath)).toString() + await Deno.readTextFile(manifestPath) ) as Manifest; if (!manifest.name) { throw new Error(`Missing 'name' in ${manifestPath}`); } - let allModulesToExclude = excludeModules.slice(); + const allModulesToExclude = excludeModules.slice(); + for (let [name, moduleSpec] of Object.entries(manifest.dependencies || {})) { manifest.dependencies![name] = await sandboxCompileModule(moduleSpec); allModulesToExclude.push(name); @@ -42,7 +40,7 @@ async function bundle( jsFunctionName, debug, allModulesToExclude, - false + true ); delete def.path; } @@ -55,7 +53,7 @@ async function buildManifest( debug: boolean, excludeModules: string[] ) { - let generatedManifest = await bundle(manifestPath, debug, excludeModules); + const generatedManifest = await bundle(manifestPath, debug, excludeModules); const outFile = manifestPath.substring( 0, @@ -63,47 +61,30 @@ async function buildManifest( ) + ".json"; const outPath = path.join(distPath, path.basename(outFile)); console.log("Emitting bundle to", outPath); - await writeFile(outPath, JSON.stringify(generatedManifest, null, 2)); + await Deno.writeTextFile(outPath, JSON.stringify(generatedManifest, null, 2)); return { generatedManifest, outPath }; } -async function run() { - let args = yargs(hideBin(process.argv)) - .option("debug", { - type: "boolean", - }) - .option("watch", { - type: "boolean", - alias: "w", - }) - .option("dist", { - type: "string", - default: ".", - }) - .option("exclude", { - type: "array", - default: [], - }) - .parse(); - if (args._.length === 0) { - console.log( - "Usage: plugos-bundle [--debug] [--dist ] [--exclude package1 package2] -- ..." - ); - process.exit(1); - } +type BundleArgs = { + _: string[]; + dist?: string; + debug?: boolean; + exclude?: string[] | string; +}; - // console.log("Args", args); +export async function run(args: BundleArgs) { + console.log("Args", args); async function buildAll() { - mkdirSync(args.dist, { recursive: true }); + Deno.mkdirSync(args.dist!, { recursive: true }); for (const plugManifestPath of args._) { - let manifestPath = plugManifestPath as string; + const manifestPath = plugManifestPath as string; try { await buildManifest( manifestPath, - args.dist, + args.dist!, !!args.debug, - args.exclude + args.exclude as string[] ); } catch (e) { console.error(`Error building ${manifestPath}:`, e); @@ -112,28 +93,44 @@ async function run() { } await buildAll(); - if (args.watch) { - console.log("Watching for changes..."); - for await (const { eventType, filename } of watch(".", { - recursive: true, - })) { - if ( - filename.endsWith(".plug.yaml") || - filename.endsWith(".js") || - filename.endsWith(".css") || - filename.endsWith(".png") || - filename.endsWith(".jpg") || - filename.endsWith(".gif") || - (filename.endsWith(".ts") && !filename.endsWith("_in.ts")) - ) { - console.log("Change detected", eventType, filename); - await buildAll(); - } - } - } + // if (args.watch) { + // console.log("Watching for changes..."); + // for await (const event of Deno.watchFs(".", { + // recursive: true, + // })) { + // if ( + // event.filename.endsWith(".plug.yaml") || + // filename.endsWith(".js") || + // filename.endsWith(".css") || + // filename.endsWith(".png") || + // filename.endsWith(".jpg") || + // filename.endsWith(".gif") || + // (filename.endsWith(".ts") && !filename.endsWith("_in.ts")) + // ) { + // console.log("Change detected", eventType, filename); + // await buildAll(); + // } + // } + // } } -run().catch((e) => { - console.error(e); - process.exit(1); -}); +if (import.meta.main) { + let args: BundleArgs = flags.parse(Deno.args); + + if (args._.length === 0) { + console.log( + "Usage: plugos-bundle [--debug] [--dist ] [--exclude=package1,package2] ..." + ); + Deno.exit(1); + } + + if (!args.dist) { + args.dist = path.resolve("dist"); + } + + args.exclude = + typeof args.exclude === "string" ? args.exclude.split(",") : []; + + await run(args); + esbuild.stop(); +} diff --git a/packages/plugos/compile.ts b/packages/plugos/compile.ts index 16c14983..8841769b 100644 --- a/packages/plugos/compile.ts +++ b/packages/plugos/compile.ts @@ -1,16 +1,17 @@ -import esbuild from "esbuild"; -import { mkdir, readFile, rm, symlink, unlink, writeFile } from "fs/promises"; -import path from "path"; -import { tmpdir } from "os"; -import { nodeModulesDir } from "./environments/node_sandbox"; -import { promisify } from "util"; -import { execFile } from "child_process"; -const execFilePromise = promisify(execFile); +// import { esbuild } from "../../mod.ts"; +import * as esbuildWasm from "https://deno.land/x/esbuild@v0.14.54/wasm.js"; +import * as esbuildNative from "https://deno.land/x/esbuild@v0.14.54/mod.js"; + +export const esbuild: typeof esbuildWasm = + Deno.run === undefined ? esbuildWasm : esbuildNative; + +import { path } from "../../mod.ts"; +import { denoPlugin } from "../esbuild_deno_loader/mod.ts"; export async function compile( filePath: string, functionName: string | undefined = undefined, - debug: boolean = false, + debug = false, excludeModules: string[] = [], meta = false ): Promise { @@ -20,7 +21,7 @@ export async function compile( if (functionName) { // Generate a new file importing just this one function and exporting it inFile = path.resolve(path.dirname(filePath), "_in.ts"); - await writeFile( + await Deno.writeTextFile( inFile, `import {${functionName}} from "./${path.basename( filePath @@ -28,6 +29,8 @@ export async function compile( ); } + // console.log("External modules", excludeModules); + try { // TODO: Figure out how to make source maps work correctly with eval() code let result = await esbuild.build({ @@ -41,6 +44,12 @@ export async function compile( outfile: outFile, metafile: true, external: excludeModules, + treeShaking: true, + plugins: [ + denoPlugin({ + importMapURL: new URL("./../../import_map.json", import.meta.url), + }), + ], loader: { ".css": "text", ".md": "text", @@ -59,12 +68,12 @@ export async function compile( console.log("Bundle info for", functionName, text); } - let jsCode = (await readFile(outFile)).toString(); - await unlink(outFile); + let jsCode = await Deno.readTextFile(outFile); + await Deno.remove(outFile); return `(() => { ${jsCode} return mod;})()`; } finally { if (inFile !== filePath) { - await unlink(inFile); + await Deno.remove(inFile); } } } @@ -74,74 +83,61 @@ export async function compileModule( moduleName: string ): Promise { let inFile = path.resolve(cwd, "_in.ts"); - await writeFile(inFile, `export * from "${moduleName}";`); + await Deno.writeTextFile(inFile, `export * from "${moduleName}";`); let code = await compile(inFile); - await unlink(inFile); + await Deno.remove(inFile); return code; } -// TODO: Reconsider this later -const exposedModules = [ - "@silverbulletmd/plugos-silverbullet-syscall", - "@plugos/plugos-syscall", -]; +// export async function sandboxCompile( +// filename: string, +// code: string, +// functionName?: string, +// debug: boolean = false, +// installModules: string[] = [], +// globalModules: string[] = [] +// ): Promise { +// let tmpDir = `${tmpdir()}/plugos-${Math.random()}`; +// await mkdir(tmpDir, { recursive: true }); -export async function sandboxCompile( - filename: string, - code: string, - functionName?: string, - debug: boolean = false, - installModules: string[] = [], - globalModules: string[] = [] -): Promise { - let tmpDir = `${tmpdir()}/plugos-${Math.random()}`; - await mkdir(tmpDir, { recursive: true }); +// const srcNodeModules = `${nodeModulesDir}/node_modules`; +// const targetNodeModules = `${tmpDir}/node_modules`; - const srcNodeModules = `${nodeModulesDir}/node_modules`; - const targetNodeModules = `${tmpDir}/node_modules`; +// await mkdir(`${targetNodeModules}/@silverbulletmd`, { recursive: true }); +// await mkdir(`${targetNodeModules}/@plugos`, { recursive: true }); +// for (const exposedModule of exposedModules) { +// await symlink( +// `${srcNodeModules}/${exposedModule}`, +// `${targetNodeModules}/${exposedModule}`, +// "dir" +// ); +// } +// for (let moduleName of installModules) { +// await execFilePromise("npm", ["install", moduleName], { +// cwd: tmpDir, +// }); +// } - await mkdir(`${targetNodeModules}/@silverbulletmd`, { recursive: true }); - await mkdir(`${targetNodeModules}/@plugos`, { recursive: true }); - for (const exposedModule of exposedModules) { - await symlink( - `${srcNodeModules}/${exposedModule}`, - `${targetNodeModules}/${exposedModule}`, - "dir" - ); - } - for (let moduleName of installModules) { - await execFilePromise("npm", ["install", moduleName], { - cwd: tmpDir, - }); - } - - await writeFile(`${tmpDir}/${filename}`, code); - let jsCode = await compile( - `${tmpDir}/${filename}`, - functionName, - debug, - globalModules - ); - await rm(tmpDir, { recursive: true }); - return jsCode; -} +// await writeFile(`${tmpDir}/${filename}`, code); +// let jsCode = await compile( +// `${tmpDir}/${filename}`, +// functionName, +// debug, +// globalModules +// ); +// await rm(tmpDir, { recursive: true }); +// return jsCode; +// } export async function sandboxCompileModule( - moduleName: string, + moduleUrl: string, globalModules: string[] = [] ): Promise { - let [modulePart, path] = moduleName.split(":"); - let modulePieces = modulePart.split("@"); - let cleanModulesName = modulePieces - .slice(0, modulePieces.length - 1) - .join("@"); - return sandboxCompile( - "module.ts", - // `export * from "${cleanModulesName}${path ? path : ""}";`, - `module.exports = require("${cleanModulesName}${path ? path : ""}");`, - undefined, - true, - [modulePart], - globalModules + await Deno.writeTextFile( + "_mod.ts", + `module.exports = require("${moduleUrl}");` ); + let code = await compile("_mod.ts", undefined, false, globalModules); + await Deno.remove("_mod.ts"); + return code; } diff --git a/packages/plugos/environments/deno_sandbox.ts b/packages/plugos/environments/deno_sandbox.ts new file mode 100644 index 00000000..556c3984 --- /dev/null +++ b/packages/plugos/environments/deno_sandbox.ts @@ -0,0 +1,42 @@ +import { safeRun } from "../util.ts"; + +// @ts-ignore +// import workerCode from "bundle-text:./node_worker.ts"; +import { Sandbox } from "../sandbox.ts"; +import { WorkerLike } from "./worker.ts"; +import { Plug } from "../plug.ts"; + +class DenoWorkerWrapper implements WorkerLike { + private worker: Worker; + onMessage?: (message: any) => Promise; + ready: Promise; + + constructor(worker: Worker) { + this.worker = worker; + this.worker.addEventListener("message", (evt: any) => { + let data = evt.data; + if (!data) return; + safeRun(async () => { + await this.onMessage!(data); + }); + }); + this.ready = Promise.resolve(); + } + postMessage(message: any): void { + this.worker.postMessage(message); + } + + terminate() { + return this.worker.terminate(); + } +} + +export function createSandbox(plug: Plug) { + let worker = new Worker( + new URL("./sandbox_worker.ts", import.meta.url).href, + { + type: "module", + } + ); + return new Sandbox(plug, new DenoWorkerWrapper(worker)); +} diff --git a/packages/plugos/environments/iframe_sandbox.html b/packages/plugos/environments/iframe_sandbox.html deleted file mode 100644 index ca0b2fcb..00000000 --- a/packages/plugos/environments/iframe_sandbox.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/packages/plugos/environments/iframe_sandbox.ts b/packages/plugos/environments/iframe_sandbox.ts deleted file mode 100644 index 454c7d69..00000000 --- a/packages/plugos/environments/iframe_sandbox.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { safeRun } from "../util"; - -// @ts-ignore -import sandboxHtml from "bundle-text:./iframe_sandbox.html"; -import { Sandbox } from "../sandbox"; -import { WorkerLike } from "./worker"; -import { Plug } from "../plug"; - -class IFrameWrapper implements WorkerLike { - private iframe: HTMLIFrameElement; - onMessage?: (message: any) => Promise; - ready: Promise; - private messageListener: (evt: any) => void; - - constructor() { - const iframe = document.createElement("iframe", {}); - this.iframe = iframe; - iframe.style.display = "none"; - // Let's lock this down significantly - iframe.setAttribute("sandbox", "allow-scripts"); - iframe.srcdoc = sandboxHtml; - this.messageListener = (evt: any) => { - if (evt.source !== iframe.contentWindow) { - return; - } - let data = evt.data; - if (!data) return; - safeRun(async () => { - await this.onMessage!(data); - }); - }; - window.addEventListener("message", this.messageListener); - document.body.appendChild(iframe); - this.ready = new Promise((resolve) => { - iframe.onload = () => { - resolve(); - iframe.onload = null; - }; - }); - } - - postMessage(message: any): void { - this.iframe.contentWindow!.postMessage(message, "*"); - } - - terminate() { - console.log("Terminating iframe sandbox"); - window.removeEventListener("message", this.messageListener); - return this.iframe.remove(); - } -} - -export function createSandbox(plug: Plug) { - return new Sandbox(plug, new IFrameWrapper()); -} diff --git a/packages/plugos/environments/node_sandbox.ts b/packages/plugos/environments/node_sandbox.ts deleted file mode 100644 index fe5f2bf5..00000000 --- a/packages/plugos/environments/node_sandbox.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { Worker } from "worker_threads"; -import { safeRun } from "../util"; - -// @ts-ignore -import workerCode from "bundle-text:./node_worker.ts"; -import { Sandbox } from "../sandbox"; -import { WorkerLike } from "./worker"; -import { Plug } from "../plug"; -import path from "path"; -import fs from "fs"; - -class NodeWorkerWrapper implements WorkerLike { - onMessage?: (message: any) => Promise; - ready: Promise; - private worker: Worker; - - constructor(worker: Worker) { - this.worker = worker; - worker.on("message", (message: any) => { - safeRun(async () => { - await this.onMessage!(message); - }); - }); - this.ready = new Promise((resolve) => { - worker.once("online", resolve); - }); - } - - postMessage(message: any): void { - this.worker.postMessage(message); - } - - terminate(): void { - this.worker.terminate(); - } -} - -// Look for the node_modules directory, to be passed to the worker to find e.g. the vm2 module -export let nodeModulesDir = __dirname; - -while ( - !fs.existsSync(nodeModulesDir + "/node_modules/vm2") && - nodeModulesDir !== "/" -) { - nodeModulesDir = path.dirname(nodeModulesDir); -} - -export function createSandbox(plug: Plug) { - let worker = new Worker(workerCode, { - eval: true, - workerData: { - nodeModulesPath: path.join(nodeModulesDir, "node_modules"), - }, - }); - return new Sandbox(plug, new NodeWorkerWrapper(worker)); -} diff --git a/packages/plugos/environments/node_worker.ts b/packages/plugos/environments/node_worker.ts deleted file mode 100644 index 47f25dc0..00000000 --- a/packages/plugos/environments/node_worker.ts +++ /dev/null @@ -1,158 +0,0 @@ -import { ConsoleLogger } from "./custom_logger"; - -const { - parentPort, - workerData: { nodeModulesPath }, -} = require("worker_threads"); - -const { VM, VMScript } = require(`${nodeModulesPath}/vm2`); - -let loadedFunctions = new Map(); -let pendingRequests = new Map< - number, - { - resolve: (result: unknown) => void; - reject: (e: any) => void; - } ->(); - -let syscallReqId = 0; - -let consoleLogger = new ConsoleLogger((level, message) => { - parentPort.postMessage({ - type: "log", - level, - message, - }); -}, false); - -let loadedModules = new Map(); - -// HACK to make Mattermost client work... -loadedModules.set("form-data", require(`${nodeModulesPath}/form-data`)); - -let vm = new VM({ - sandbox: { - // Exposing some "safe" APIs - console: consoleLogger, - setTimeout, - clearTimeout, - setInterval, - URL, - clearInterval, - TextEncoder, - TextDecoder, - fetch: require(`${nodeModulesPath}/node-fetch`), - WebSocket: require(`${nodeModulesPath}/ws`), - // This is only going to be called for pre-bundled modules, we won't allow - // arbitrary requiring of modules - require: (moduleName: string): any => { - // console.log("Loading module", moduleName); - // if (preloadedModules.includes(moduleName)) { - // return require(`${nodeModulesPath}/${moduleName}`); - // } else - if (loadedModules.has(moduleName)) { - let mod = loadedModules.get(moduleName); - // console.log("And it has the value", mod); - return mod; - } else { - throw Error(`Cannot import arbitrary modules like ${moduleName}`); - } - }, - self: { - syscall: (name: string, ...args: any[]) => { - return new Promise((resolve, reject) => { - syscallReqId++; - pendingRequests.set(syscallReqId, { resolve, reject }); - parentPort.postMessage({ - type: "syscall", - id: syscallReqId, - name, - // TODO: Figure out why this is necessary (to avoide a CloneError) - args: JSON.parse(JSON.stringify(args)), - }); - }); - }, - }, - }, -}); - -function wrapScript(code: string) { - return `(${code})["default"]`; -} - -function safeRun(fn: any) { - fn().catch((e: any) => { - console.error(e); - }); -} - -parentPort.on("message", (data: any) => { - safeRun(async () => { - switch (data.type) { - case "load": - loadedFunctions.set(data.name, new VMScript(wrapScript(data.code))); - parentPort.postMessage({ - type: "inited", - name: data.name, - }); - break; - case "load-dependency": - // console.log("Asked to load dep", data.name); - try { - let r = vm.run(data.code); - // console.log("Loaded dependency", r); - loadedModules.set(data.name, r); - parentPort.postMessage({ - type: "dependency-inited", - name: data.name, - }); - } catch (e: any) { - console.error("Could not load dependency", e.message); - } - break; - case "invoke": - let fn = loadedFunctions.get(data.name); - if (!fn) { - throw new Error(`Function not loaded: ${data.name}`); - } - try { - let r = vm.run(fn); - let result = await Promise.resolve(r(...data.args)); - parentPort.postMessage({ - type: "result", - id: data.id, - // TOOD: Figure out if this is necessary, because it's expensive - result: result && JSON.parse(JSON.stringify(result)), - }); - } catch (e: any) { - // console.error("Error caught", e, "Stack", e.stack); - parentPort.postMessage({ - type: "result", - id: data.id, - error: e.message, - stack: e.stack, - }); - } - break; - case "syscall-response": - let syscallId = data.id; - const lookup = pendingRequests.get(syscallId); - if (!lookup) { - throw Error("Invalid request id"); - } - pendingRequests.delete(syscallId); - if (data.error) { - // console.log("Got rejection", data.error); - lookup.reject(new Error(data.error)); - } else { - lookup.resolve(data.result); - } - break; - } - }); -}); - -process.on("uncaughtException", (e) => { - console.error("Uncaught error", e); -}); diff --git a/packages/plugos/environments/sandbox_worker.ts b/packages/plugos/environments/sandbox_worker.ts index a8961c8c..4aa2dec0 100644 --- a/packages/plugos/environments/sandbox_worker.ts +++ b/packages/plugos/environments/sandbox_worker.ts @@ -1,6 +1,6 @@ -import { safeRun } from "../util"; -import { ConsoleLogger } from "./custom_logger"; -import { ControllerMessage, WorkerMessage } from "./worker"; +import { safeRun } from "../util.ts"; +import { ConsoleLogger } from "./custom_logger.ts"; +import { ControllerMessage, WorkerMessage } from "./worker.ts"; let loadedFunctions = new Map(); let pendingRequests = new Map< @@ -43,7 +43,7 @@ let loadedModules = new Map(); // @ts-ignore self.require = (moduleName: string): any => { - // console.log("Loading", moduleName, loadedModules.get(moduleName)); + console.log("Requiring", moduleName, loadedModules.get(moduleName)); return loadedModules.get(moduleName); }; @@ -61,66 +61,76 @@ self.addEventListener("message", (event: { data: WorkerMessage }) => { let data = event.data; switch (data.type) { case "load": - let fn2 = new Function(wrapScript(data.code!)); - loadedFunctions.set(data.name!, fn2()); - workerPostMessage({ - type: "inited", - name: data.name, - }); + { + let fn2 = new Function(wrapScript(data.code!)); + loadedFunctions.set(data.name!, fn2()); + workerPostMessage({ + type: "inited", + name: data.name, + }); + } + break; case "load-dependency": - // console.log("Received dep", data.name); - let fn3 = new Function(`return ${data.code!}`); - let v = fn3(); - loadedModules.set(data.name!, v); - // console.log("Dep val", v); - workerPostMessage({ - type: "dependency-inited", - name: data.name, - }); + { + console.log("Received dep", data.name); + let fn3 = new Function(`return ${data.code!}`); + let v = fn3(); + loadedModules.set(data.name!, v); + // console.log("Dep val", v); + workerPostMessage({ + type: "dependency-inited", + name: data.name, + }); + } break; case "invoke": - let fn = loadedFunctions.get(data.name!); - if (!fn) { - throw new Error(`Function not loaded: ${data.name}`); - } - try { - let result = await Promise.resolve(fn(...(data.args || []))); - workerPostMessage({ - type: "result", - id: data.id, - result: result, - } as ControllerMessage); - } catch (e: any) { - workerPostMessage({ - type: "result", - id: data.id, - error: e.message, - stack: e.stack, - }); - // console.error("Error invoking function", data.name, e.message); - // throw e; + { + let fn = loadedFunctions.get(data.name!); + if (!fn) { + throw new Error(`Function not loaded: ${data.name}`); + } + try { + let result = await Promise.resolve(fn(...(data.args || []))); + workerPostMessage({ + type: "result", + id: data.id, + result: result, + } as ControllerMessage); + } catch (e: any) { + workerPostMessage({ + type: "result", + id: data.id, + error: e.message, + stack: e.stack, + }); + // console.error("Error invoking function", data.name, e.message); + // throw e; + } } break; case "syscall-response": - let syscallId = data.id!; - const lookup = pendingRequests.get(syscallId); - if (!lookup) { - console.log( - "Current outstanding requests", - pendingRequests, - "looking up", - syscallId - ); - throw Error("Invalid request id"); - } - pendingRequests.delete(syscallId); - if (data.error) { - lookup.reject(new Error(data.error)); - } else { - lookup.resolve(data.result); + { + let syscallId = data.id!; + const lookup = pendingRequests.get(syscallId); + if (!lookup) { + console.log( + "Current outstanding requests", + pendingRequests, + "looking up", + syscallId + ); + throw Error("Invalid request id"); + } + pendingRequests.delete(syscallId); + if (data.error) { + lookup.reject(new Error(data.error)); + } else { + lookup.resolve(data.result); + } } + break; } }); diff --git a/packages/plugos/environments/webworker_sandbox.ts b/packages/plugos/environments/webworker_sandbox.ts index 307ae791..3f70b416 100644 --- a/packages/plugos/environments/webworker_sandbox.ts +++ b/packages/plugos/environments/webworker_sandbox.ts @@ -1,7 +1,7 @@ -import { safeRun } from "../util"; -import { Sandbox } from "../sandbox"; -import { WorkerLike } from "./worker"; -import { Plug } from "../plug"; +import { safeRun } from "../util.ts"; +import { Sandbox } from "../sandbox.ts"; +import { WorkerLike } from "./worker.ts"; +import type { Plug } from "../plug.ts"; class WebWorkerWrapper implements WorkerLike { private worker: Worker; diff --git a/packages/plugos/environments/worker.ts b/packages/plugos/environments/worker.ts index 1de6c2cd..d38a5458 100644 --- a/packages/plugos/environments/worker.ts +++ b/packages/plugos/environments/worker.ts @@ -1,4 +1,4 @@ -import type { LogLevel } from "./custom_logger"; +import type { LogLevel } from "./custom_logger.ts"; export type ControllerMessageType = | "inited" diff --git a/packages/plugos/event.ts b/packages/plugos/event.ts index 3eb9ca74..0d12a3a0 100644 --- a/packages/plugos/event.ts +++ b/packages/plugos/event.ts @@ -9,11 +9,11 @@ export abstract class EventEmitter { this.handlers = this.handlers.filter((h) => h !== handlers); } - emit(eventName: keyof HandlerT, ...args: any[]) { - for (let handler of this.handlers) { - let fn: any = handler[eventName]; + async emit(eventName: keyof HandlerT, ...args: any[]): Promise { + for (const handler of this.handlers) { + const fn: any = handler[eventName]; if (fn) { - fn(...args); + await Promise.resolve(fn(...args)); } } } diff --git a/packages/plugos/hooks/event.ts b/packages/plugos/hooks/event.ts index c362a8e4..0bd94e15 100644 --- a/packages/plugos/hooks/event.ts +++ b/packages/plugos/hooks/event.ts @@ -1,7 +1,6 @@ -import { Hook, Manifest } from "../types"; -import { System } from "../system"; -import { safeRun } from "../util"; -import { EventEmitter } from "events"; +import type { Hook, Manifest } from "../types.ts"; +import { System } from "../system.ts"; +import { safeRun } from "../util.ts"; // System events: // - plug:load (plugName: string) @@ -28,9 +27,7 @@ export class EventHook implements Hook { } let eventNames = new Set(); for (const plug of this.system.loadedPlugs.values()) { - for (const [name, functionDef] of Object.entries( - plug.manifest!.functions - )) { + for (const functionDef of Object.values(plug.manifest!.functions)) { if (functionDef.events) { for (let eventName of functionDef.events) { eventNames.add(eventName); diff --git a/packages/plugos/hooks/node_cron.ts b/packages/plugos/hooks/node_cron.ts index f08589ae..de12c39e 100644 --- a/packages/plugos/hooks/node_cron.ts +++ b/packages/plugos/hooks/node_cron.ts @@ -1,7 +1,7 @@ -import { Hook, Manifest } from "../types"; -import cron, { ScheduledTask } from "node-cron"; -import { safeRun } from "../util"; -import { System } from "../system"; +import { Hook, Manifest } from "../types.ts"; +import { Cron } from "https://cdn.jsdelivr.net/gh/hexagon/croner@4/src/croner.js"; +import { safeRun } from "../util.ts"; +import { System } from "../system.ts"; export type CronHookT = { cron?: string | string[]; @@ -9,7 +9,7 @@ export type CronHookT = { export class NodeCronHook implements Hook { apply(system: System): void { - let tasks: ScheduledTask[] = []; + let tasks: Cron[] = []; system.on({ plugLoaded: () => { reloadCrons(); @@ -37,9 +37,9 @@ export class NodeCronHook implements Hook { const crons = Array.isArray(functionDef.cron) ? functionDef.cron : [functionDef.cron]; - for (let cronDef of crons) { + for (const cronDef of crons) { tasks.push( - cron.schedule(cronDef, () => { + new Cron(cronDef, () => { console.log("Now acting on cron", cronDef); safeRun(async () => { try { @@ -57,7 +57,7 @@ export class NodeCronHook implements Hook { } validateManifest(manifest: Manifest): string[] { - let errors = []; + let errors: string[] = []; for (const [name, functionDef] of Object.entries(manifest.functions)) { if (!functionDef.cron) { continue; @@ -66,9 +66,9 @@ export class NodeCronHook implements Hook { ? functionDef.cron : [functionDef.cron]; for (let cronDef of crons) { - if (!cron.validate(cronDef)) { - errors.push(`Invalid cron expression ${cronDef}`); - } + // if (!cron.validate(cronDef)) { + // errors.push(`Invalid cron expression ${cronDef}`); + // } } } return errors; diff --git a/packages/plugos/plug.ts b/packages/plugos/plug.ts index fde12c78..df4fce47 100644 --- a/packages/plugos/plug.ts +++ b/packages/plugos/plug.ts @@ -1,6 +1,6 @@ -import { Manifest, RuntimeEnvironment } from "./types"; -import { Sandbox } from "./sandbox"; -import { System } from "./system"; +import { Manifest, RuntimeEnvironment } from "./types.ts"; +import { Sandbox } from "./sandbox.ts"; +import { System } from "./system.ts"; export class Plug { system: System; diff --git a/packages/plugos/plug_loader.ts b/packages/plugos/plug_loader.ts deleted file mode 100644 index b121ed20..00000000 --- a/packages/plugos/plug_loader.ts +++ /dev/null @@ -1,66 +0,0 @@ -import fs from "fs/promises"; -import watch from "node-watch"; -import path from "path"; -import { createSandbox } from "./environments/node_sandbox"; -import { System } from "./system"; -import { Manifest } from "./types"; - -export class DiskPlugLoader { - private system: System; - private plugPath: string; - - constructor(system: System, plugPath: string) { - this.system = system; - this.plugPath = plugPath; - } - - watcher() { - watch(this.plugPath, (eventType, localPath) => { - if (!localPath.endsWith(".plug.json")) { - return; - } - Promise.resolve() - .then(async () => { - try { - // let localPath = path.join(this.plugPath, filename); - console.log("Change detected for", localPath); - try { - await fs.stat(localPath); - } catch (e) { - // Likely removed - console.log("Plug removed, TODO: Unload"); - return; - } - const plugDef = await this.loadPlugFromFile(localPath); - } catch (e) { - console.log("Ignoring something FYI", e); - // ignore, error handled by loadPlug - } - }) - .catch(console.error); - }); - } - - private async loadPlugFromFile(localPath: string) { - const plug = await fs.readFile(localPath, "utf8"); - - try { - const plugDef: Manifest = JSON.parse(plug); - console.log("Now loading plug", plugDef.name); - await this.system.load(plugDef, createSandbox); - return plugDef; - } catch (e) { - console.error("Could not parse plugin file", e); - throw e; - } - } - - async loadPlugs() { - for (let filename of await fs.readdir(this.plugPath)) { - if (filename.endsWith(".plug.json")) { - let localPath = path.join(this.plugPath, filename); - await this.loadPlugFromFile(localPath); - } - } - } -} diff --git a/packages/plugos/runtime.test.ts b/packages/plugos/runtime.test.ts index f40b4378..7fa783af 100644 --- a/packages/plugos/runtime.test.ts +++ b/packages/plugos/runtime.test.ts @@ -1,9 +1,14 @@ -import { createSandbox } from "./environments/node_sandbox"; -import { expect, test } from "@jest/globals"; -import { System } from "./system"; +import { createSandbox } from "./environments/deno_sandbox.ts"; +import { System } from "./system.ts"; -test("Run a Node sandbox", async () => { - let system = new System("server"); +import { + assertEquals, + assert, +} from "https://deno.land/std@0.158.0/testing/asserts.ts"; +import { denoPlugin } from "../esbuild_deno_loader/mod.ts"; + +Deno.test("Run a deno sandbox", async () => { + const system = new System("server"); system.registerSyscalls([], { addNumbers: (ctx, a, b) => { return a + b; @@ -85,31 +90,83 @@ test("Run a Node sandbox", async () => { }, createSandbox ); - expect(await plug.invoke("addTen", [10])).toBe(20); + assertEquals(await plug.invoke("addTen", [10]), 20); for (let i = 0; i < 100; i++) { - expect(await plug.invoke("addNumbersSyscall", [10, i])).toBe(10 + i); + assertEquals(await plug.invoke("addNumbersSyscall", [10, i]), 10 + i); } try { await plug.invoke("errorOut", []); - expect(true).toBe(false); + assert(false); } catch (e: any) { - expect(e.message).toContain("BOOM"); + assert(e.message.indexOf("BOOM") !== -1); } try { await plug.invoke("errorOutSys", []); - expect(true).toBe(false); + assert(false); } catch (e: any) { - expect(e.message).toContain("#fail"); + assert(e.message.indexOf("#fail") !== -1); } try { await plug.invoke("restrictedTest", []); - expect(true).toBe(false); + assert(false); } catch (e: any) { - expect(e.message).toContain( - "Missing permission 'restricted' for syscall restrictedSyscall" + assert( + e.message.indexOf( + "Missing permission 'restricted' for syscall restrictedSyscall" + ) !== -1 ); } - expect(await plug.invoke("dangerousTest", [])).toBe("yay"); + assertEquals(await plug.invoke("dangerousTest", []), "yay"); await system.unloadAll(); }); + +import { run as bundleRun } from "./bin/plugos-bundle.ts"; +import { esbuild } from "./compile.ts"; +import { safeRun } from "./util.ts"; +const __dirname = new URL(".", import.meta.url).pathname; + +Deno.test("Preload dependencies", async () => { + const tmpDist = `${__dirname}tmp_dist`; + await bundleRun({ + _: [`${__dirname}../plugs/global.plug.yaml`], + debug: true, + dist: tmpDist, + exclude: [], + }); + const globalModules = JSON.parse( + Deno.readTextFileSync(`${tmpDist}/global.plug.json`) + ); + await bundleRun({ + _: [`${__dirname}test.plug.yaml`], + debug: true, + dist: tmpDist, + exclude: Object.keys(globalModules.dependencies), + }); + esbuild.stop(); + + const system = new System("server"); + system.on({ + plugLoaded: async (plug) => { + for (let [modName, code] of Object.entries(globalModules.dependencies)) { + await plug.sandbox.loadDependency(modName, code as string); + } + }, + }); + + // Load test module + console.log("Loading test module"); + const testPlug = await system.load( + JSON.parse(Deno.readTextFileSync(`${tmpDist}/test.plug.json`)), + createSandbox + ); + console.log("Running"); + + const result = await testPlug.invoke("boot", []); + + console.log("Result", result); + + await system.unloadAll(); + + Deno.removeSync(tmpDist, { recursive: true }); +}); diff --git a/packages/plugos/sandbox.ts b/packages/plugos/sandbox.ts index 59bdce5a..8b5ea754 100644 --- a/packages/plugos/sandbox.ts +++ b/packages/plugos/sandbox.ts @@ -1,10 +1,10 @@ -import type { LogLevel } from "./environments/custom_logger"; +import type { LogLevel } from "./environments/custom_logger.ts"; import { ControllerMessage, WorkerLike, WorkerMessage, -} from "./environments/worker"; -import { Plug } from "./plug"; +} from "./environments/worker.ts"; +import { Plug } from "./plug.ts"; export type SandboxFactory = (plug: Plug) => Sandbox; @@ -64,8 +64,8 @@ export class Sandbox { }); } - async loadDependency(name: string, code: string): Promise { - // console.log("Loading dependency", name); + loadDependency(name: string, code: string): Promise { + console.log("Loading dependency", name); this.worker.postMessage({ type: "load-dependency", name: name, diff --git a/packages/plugos/syscalls/event.ts b/packages/plugos/syscalls/event.ts index 5661df9e..8c9f88fb 100644 --- a/packages/plugos/syscalls/event.ts +++ b/packages/plugos/syscalls/event.ts @@ -1,12 +1,12 @@ -import { SysCallMapping } from "../system"; -import { EventHook } from "../hooks/event"; +import { SysCallMapping } from "../system.ts"; +import { EventHook } from "../hooks/event.ts"; export function eventSyscalls(eventHook: EventHook): SysCallMapping { return { - "event.dispatch": async (ctx, eventName: string, data: any) => { + "event.dispatch": (ctx, eventName: string, data: any) => { return eventHook.dispatchEvent(eventName, data); }, - "event.list": async () => { + "event.list": () => { return eventHook.listEvents(); }, }; diff --git a/packages/plugos/syscalls/fs.node.ts b/packages/plugos/syscalls/fs.deno.ts similarity index 91% rename from packages/plugos/syscalls/fs.node.ts rename to packages/plugos/syscalls/fs.deno.ts index 70ce432f..1ec1ec87 100644 --- a/packages/plugos/syscalls/fs.node.ts +++ b/packages/plugos/syscalls/fs.deno.ts @@ -1,13 +1,11 @@ -import { readdir, readFile, stat, writeFile, unlink, mkdir } from "fs/promises"; -import path from "path"; -import type { SysCallMapping } from "../system"; +import type { SysCallMapping } from "../system.ts"; export type FileMeta = { name: string; lastModified: number; }; -export default function fileSystemSyscalls(root: string = "/"): SysCallMapping { +export default function fileSystemSyscalls(root = "/"): SysCallMapping { function resolvedPath(p: string): string { p = path.resolve(root, p); if (!p.startsWith(root)) { diff --git a/packages/plugos/syscalls/store.dex_deno.test.ts b/packages/plugos/syscalls/store.dex_deno.test.ts new file mode 100644 index 00000000..108f1e71 --- /dev/null +++ b/packages/plugos/syscalls/store.dex_deno.test.ts @@ -0,0 +1,9 @@ +import { SQLite3 } from "../../../mod.ts"; +import { storeSyscalls } from "./store.dex_deno.ts"; + +Deno.test("store.dex", async () => { + const db = new SQLite3(":memory:"); + const syscalls = storeSyscalls(db, "test"); + const fakeCtx = {} as any; + await syscalls["store.put"](fakeCtx, "key", { value: "value" }); +}); diff --git a/packages/plugos/syscalls/store.dex_deno.ts b/packages/plugos/syscalls/store.dex_deno.ts new file mode 100644 index 00000000..f366e8fc --- /dev/null +++ b/packages/plugos/syscalls/store.dex_deno.ts @@ -0,0 +1,175 @@ +import type { QueryBuilder } from "https://deno.land/x/dex@1.0.2/types/index.d.ts"; +import { RowObject } from "https://deno.land/x/sqlite/mod.ts"; +import type { SQLite3 } from "../../../mod.ts"; + +import { Dex } from "../../../mod.ts"; +import { SysCallMapping } from "../system.ts"; + +export type Item = { + page: string; + key: string; + value: any; +}; + +export type KV = { + key: string; + value: any; +}; + +const dex = Dex({ client: "sqlite3" }); + +export function ensureTable(db: SQLite3, tableName: string) { + const result = db.query<[string]>( + `SELECT name FROM sqlite_master WHERE type='table' AND name=?`, + [tableName], + ); + if (result.length === 0) { + const createQuery = dex.schema.createTable(tableName, (table) => { + table.string("key"); + table.text("value"); + table.primary(["key"]); + }).toString(); + + db.query(createQuery); + + console.log(`Created table ${tableName}`); + } +} + +export type Query = { + filter?: Filter[]; + orderBy?: string; + orderDesc?: boolean; + limit?: number; + select?: string[]; +}; + +export type Filter = { + op: string; + prop: string; + value: any; +}; + +export function queryToKnex( + queryBuilder: QueryBuilder, + query: Query, +): QueryBuilder { + if (query.filter) { + for (const filter of query.filter) { + queryBuilder = queryBuilder.andWhereRaw( + `json_extract(value, '$.${filter.prop}') ${filter.op} ?`, + [filter.value], + ); + } + } + if (query.limit) { + queryBuilder = queryBuilder.limit(query.limit); + } + if (query.orderBy) { + queryBuilder = queryBuilder.orderByRaw( + `json_extract(value, '$.${query.orderBy}') ${ + query.orderDesc ? "desc" : "asc" + }`, + ); + } + return queryBuilder; +} + +function asyncQuery( + db: SQLite3, + query: QueryBuilder, +): Promise { + return Promise.resolve(db.queryEntries(query.toString())); +} + +function asyncExecute( + db: SQLite3, + query: QueryBuilder, +): Promise { + return Promise.resolve(db.execute(query.toString())); +} + +export function storeSyscalls( + db: SQLite3, + tableName: string, +): SysCallMapping { + const apiObj: SysCallMapping = { + "store.delete": async (_ctx, key: string) => { + await asyncExecute(db, dex(tableName).where({ key }).del()); + }, + "store.deletePrefix": async (_ctx, prefix: string) => { + await asyncExecute( + db, + dex(tableName).whereRaw(`"key" LIKE "${prefix}%"`).del(), + ); + }, + "store.deleteQuery": async (_ctx, query: Query) => { + await asyncExecute(db, queryToKnex(dex(tableName), query).del()); + }, + "store.deleteAll": async () => { + await asyncExecute(db, dex(tableName).del()); + }, + "store.set": async (_ctx, key: string, value: any) => { + await asyncExecute( + db, + dex(tableName).where({ key }).update("value", JSON.stringify(value)), + ); + if (db.changes === 0) { + await asyncExecute( + db, + dex(tableName).insert({ + key, + value: JSON.stringify(value), + }), + ); + } + }, + // TODO: Optimize + "store.batchSet": async (ctx, kvs: KV[]) => { + for (let { key, value } of kvs) { + await apiObj["store.set"](ctx, key, value); + } + }, + "store.batchDelete": async (ctx, keys: string[]) => { + for (let key of keys) { + await apiObj["store.delete"](ctx, key); + } + }, + "store.get": async (_ctx, key: string): Promise => { + const result = await asyncQuery( + db, + dex(tableName).where({ key }).select("value"), + ); + if (result.length) { + return JSON.parse(result[0].value); + } else { + return null; + } + }, + "store.queryPrefix": async (ctx, prefix: string) => { + return ( + await asyncQuery( + db, + dex(tableName) + .andWhereRaw(`"key" LIKE "${prefix}%"`) + .select("key", "value"), + ) + ).map(({ key, value }) => ({ + key, + value: JSON.parse(value), + })); + }, + "store.query": async (_ctx, query: Query) => { + return ( + await asyncQuery( + db, + queryToKnex(dex(tableName), query).select("key", "value"), + ) + ).map(({ key, value }: { key: string; value: string }) => ({ + key, + value: JSON.parse(value), + })); + }, + }; + return apiObj; +} diff --git a/packages/plugos/syscalls/store.dexie_browser.test.ts b/packages/plugos/syscalls/store.dexie_browser.test.ts deleted file mode 100644 index 94800772..00000000 --- a/packages/plugos/syscalls/store.dexie_browser.test.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { createSandbox } from "../environments/node_sandbox"; -import { expect, test } from "@jest/globals"; -import { System } from "../system"; -import { storeSyscalls } from "./store.dexie_browser"; - -// For testing in node.js -require("fake-indexeddb/auto"); - -test("Test store", async () => { - let system = new System("server"); - system.registerSyscalls([], storeSyscalls("test", "test")); - let plug = await system.load( - { - name: "test", - functions: { - test1: { - code: `(() => { - return { - default: async () => { - await self.syscall("store.set", "name", "Pete"); - return await self.syscall("store.get", "name"); - } - }; - })()`, - }, - test2: { - code: `(() => { - return { - default: async () => { - await self.syscall("store.set", "page1:bl:page2:10", {title: "Something", meta: 20}); - await self.syscall("store.batchSet", [ - {key: "page2:bl:page3", value: {title: "Something2", meta: 10}}, - {key: "page2:bl:page4", value: {title: "Something3", meta: 10}}, - ]); - return await self.syscall("store.queryPrefix", "page2:"); - } - }; - })()`, - }, - }, - }, - createSandbox - ); - expect(await plug.invoke("test1", [])).toBe("Pete"); - let queryResults = await plug.invoke("test2", []); - expect(queryResults.length).toBe(2); - expect(queryResults[0].value.meta).toBe(10); - await system.unloadAll(); -}); diff --git a/packages/plugos/system.ts b/packages/plugos/system.ts index 4b3ff28d..6d7b5278 100644 --- a/packages/plugos/system.ts +++ b/packages/plugos/system.ts @@ -1,7 +1,7 @@ -import { Hook, Manifest, RuntimeEnvironment } from "./types"; -import { EventEmitter } from "./event"; -import { SandboxFactory } from "./sandbox"; -import { Plug } from "./plug"; +import { Hook, Manifest, RuntimeEnvironment } from "./types.ts"; +import { EventEmitter } from "./event.ts"; +import { SandboxFactory } from "./sandbox.ts"; +import { Plug } from "./plug.ts"; export interface SysCallMapping { [key: string]: (ctx: SyscallContext, ...args: any) => Promise | any; @@ -10,8 +10,8 @@ export interface SysCallMapping { export type SystemJSON = Manifest[]; export type SystemEvents = { - plugLoaded: (plug: Plug) => void; - plugUnloaded: (name: string) => void; + plugLoaded: (plug: Plug) => void | Promise; + plugUnloaded: (name: string) => void | Promise; }; export type SyscallContext = { @@ -62,7 +62,7 @@ export class System extends EventEmitter> { } } - async syscallWithContext( + syscallWithContext( ctx: SyscallContext, name: string, args: any[] @@ -82,7 +82,7 @@ export class System extends EventEmitter> { return Promise.resolve(syscall.callback(ctx, ...args)); } - async localSyscall( + localSyscall( contextPlugName: string, syscallName: string, args: any[] @@ -116,7 +116,7 @@ export class System extends EventEmitter> { console.log("Loading", name); await plug.load(manifest); this.plugs.set(name, plug); - this.emit("plugLoaded", plug); + await this.emit("plugLoaded", plug); return plug; } diff --git a/packages/plugos/test.plug.yaml b/packages/plugos/test.plug.yaml new file mode 100644 index 00000000..db3c5dca --- /dev/null +++ b/packages/plugos/test.plug.yaml @@ -0,0 +1,4 @@ +name: test +functions: + boot: + path: "./test_func.test.ts:hello" diff --git a/packages/plugos/test_func.test.ts b/packages/plugos/test_func.test.ts new file mode 100644 index 00000000..e9869055 --- /dev/null +++ b/packages/plugos/test_func.test.ts @@ -0,0 +1,7 @@ +import * as YAML from "https://deno.land/std/encoding/yaml.ts"; + +export function hello() { + console.log(YAML.stringify({ hello: "world" })); + + return "hello"; +} diff --git a/packages/plugos/types.ts b/packages/plugos/types.ts index e498fe6e..31d9df8b 100644 --- a/packages/plugos/types.ts +++ b/packages/plugos/types.ts @@ -1,4 +1,4 @@ -import { System } from "./system"; +import { System } from "./system.ts"; export interface Manifest { name: string; diff --git a/packages/plugs/core/anchor.ts b/packages/plugs/core/anchor.ts index 6f0c977d..84f27989 100644 --- a/packages/plugs/core/anchor.ts +++ b/packages/plugs/core/anchor.ts @@ -1,15 +1,14 @@ -import { collectNodesOfType, traverseTree } from "@silverbulletmd/common/tree"; +import { collectNodesOfType } from "../../common/tree.ts"; import { batchSet, queryPrefix, -} from "@silverbulletmd/plugos-silverbullet-syscall"; +} from "../../plugos-silverbullet-syscall/index.ts"; import { getCurrentPage, matchBefore, -} from "@silverbulletmd/plugos-silverbullet-syscall/editor"; -import type { IndexTreeEvent } from "@silverbulletmd/web/app_event"; -import { applyQuery, QueryProviderEvent } from "../query/engine"; -import { removeQueries } from "../query/util"; +} from "../../plugos-silverbullet-syscall/editor.ts"; +import type { IndexTreeEvent } from "../../web/app_event.ts"; +import { removeQueries } from "../query/util.ts"; // Key space // a:pageName:anchorName => pos diff --git a/packages/plugs/core/cloud.ts b/packages/plugs/core/cloud.ts index bef8d080..9b66d5c8 100644 --- a/packages/plugs/core/cloud.ts +++ b/packages/plugs/core/cloud.ts @@ -1,13 +1,10 @@ import type { FileData, FileEncoding, -} from "@silverbulletmd/common/spaces/space_primitives"; -import { - renderToText, - replaceNodesMatching, -} from "@silverbulletmd/common/tree"; -import type { FileMeta } from "@silverbulletmd/common/types"; -import { parseMarkdown } from "@silverbulletmd/plugos-silverbullet-syscall/markdown"; +} from "../../common/spaces/space_primitives.ts"; +import { renderToText, replaceNodesMatching } from "../../common/tree.ts"; +import type { FileMeta } from "../../common/types.ts"; +import { parseMarkdown } from "../../plugos-silverbullet-syscall/markdown.ts"; const pagePrefix = "💭 "; diff --git a/packages/plugs/core/command.ts b/packages/plugs/core/command.ts index 486d8a67..681e2a95 100644 --- a/packages/plugs/core/command.ts +++ b/packages/plugs/core/command.ts @@ -1,7 +1,5 @@ -import { queryPrefix } from "@silverbulletmd/plugos-silverbullet-syscall"; -import { matchBefore } from "@silverbulletmd/plugos-silverbullet-syscall/editor"; -import { listCommands } from "@silverbulletmd/plugos-silverbullet-syscall/system"; -import { applyQuery, QueryProviderEvent } from "../query/engine"; +import { matchBefore } from "../../plugos-silverbullet-syscall/editor.ts"; +import { listCommands } from "../../plugos-silverbullet-syscall/system.ts"; export async function commandComplete() { let prefix = await matchBefore("\\{\\[[^\\]]*"); diff --git a/packages/plugs/core/debug.ts b/packages/plugs/core/debug.ts index 76df4e5f..cba07915 100644 --- a/packages/plugs/core/debug.ts +++ b/packages/plugs/core/debug.ts @@ -1,11 +1,11 @@ -import { getLogs } from "@plugos/plugos-syscall/sandbox"; +import { getLogs } from "../../plugos-syscall/sandbox.ts"; import { getText, hidePanel, showPanel, -} from "@silverbulletmd/plugos-silverbullet-syscall/editor"; -import { parseMarkdown } from "@silverbulletmd/plugos-silverbullet-syscall/markdown"; -import { getServerLogs } from "@silverbulletmd/plugos-silverbullet-syscall/sandbox"; +} from "../../plugos-silverbullet-syscall/editor.ts"; +import { parseMarkdown } from "../../plugos-silverbullet-syscall/markdown.ts"; +import { getServerLogs } from "../../plugos-silverbullet-syscall/sandbox.ts"; export async function parsePageCommand() { console.log( diff --git a/packages/plugs/core/editor.ts b/packages/plugs/core/editor.ts index 61da2d92..25e564a0 100644 --- a/packages/plugs/core/editor.ts +++ b/packages/plugs/core/editor.ts @@ -1,5 +1,5 @@ -import * as clientStore from "@silverbulletmd/plugos-silverbullet-syscall/clientStore"; -import { enableReadOnlyMode } from "@silverbulletmd/plugos-silverbullet-syscall/editor"; +import * as clientStore from "../../plugos-silverbullet-syscall/clientStore.ts"; +import { enableReadOnlyMode } from "../../plugos-silverbullet-syscall/editor.ts"; export async function editorLoad() { let readOnlyMode = await clientStore.get("readOnlyMode"); diff --git a/packages/plugs/core/item.ts b/packages/plugs/core/item.ts index 0f1ff2de..ae0bb894 100644 --- a/packages/plugs/core/item.ts +++ b/packages/plugs/core/item.ts @@ -1,18 +1,16 @@ -import type { IndexTreeEvent } from "@silverbulletmd/web/app_event"; +import type { IndexTreeEvent } from "../../web/app_event.ts"; import { batchSet, queryPrefix, -} from "@silverbulletmd/plugos-silverbullet-syscall/index"; +} from "../../plugos-silverbullet-syscall/index.ts"; import { - collectNodesMatching, collectNodesOfType, ParseTree, renderToText, - replaceNodesMatching, -} from "@silverbulletmd/common/tree"; -import { removeQueries } from "../query/util"; -import { applyQuery, QueryProviderEvent } from "../query/engine"; +} from "../../common/tree.ts"; +import { removeQueries } from "../query/util.ts"; +import { applyQuery, QueryProviderEvent } from "../query/engine.ts"; export type Item = { name: string; diff --git a/packages/plugs/core/link.ts b/packages/plugs/core/link.ts index 7c26d7d1..449291ff 100644 --- a/packages/plugs/core/link.ts +++ b/packages/plugs/core/link.ts @@ -1,14 +1,14 @@ -import { nodeAtPos } from "@silverbulletmd/common/tree"; +import { nodeAtPos } from "../../common/tree.ts"; import { filterBox, flashNotification, getCursor, getText, replaceRange, -} from "@silverbulletmd/plugos-silverbullet-syscall/editor"; -import { parseMarkdown } from "@silverbulletmd/plugos-silverbullet-syscall/markdown"; -import { dispatch as dispatchEvent } from "@plugos/plugos-syscall/event"; -import { invokeFunction } from "@silverbulletmd/plugos-silverbullet-syscall/system"; +} from "../../plugos-silverbullet-syscall/editor.ts"; +import { parseMarkdown } from "../../plugos-silverbullet-syscall/markdown.ts"; +import { dispatch as dispatchEvent } from "../../plugos-syscall/event.ts"; +import { invokeFunction } from "../../plugos-silverbullet-syscall/system.ts"; type UnfurlOption = { id: string; diff --git a/packages/plugs/core/navigate.ts b/packages/plugs/core/navigate.ts index 28c7ef79..88b11dac 100644 --- a/packages/plugs/core/navigate.ts +++ b/packages/plugs/core/navigate.ts @@ -1,4 +1,4 @@ -import type { ClickEvent } from "@silverbulletmd/web/app_event"; +import type { ClickEvent } from "../../web/app_event.ts"; import { flashNotification, getCurrentPage, @@ -6,10 +6,10 @@ import { getText, navigate as navigateTo, openUrl, -} from "@silverbulletmd/plugos-silverbullet-syscall/editor"; -import { parseMarkdown } from "@silverbulletmd/plugos-silverbullet-syscall/markdown"; -import { nodeAtPos, ParseTree } from "@silverbulletmd/common/tree"; -import { invokeCommand } from "@silverbulletmd/plugos-silverbullet-syscall/system"; +} from "../../plugos-silverbullet-syscall/editor.ts"; +import { parseMarkdown } from "../../plugos-silverbullet-syscall/markdown.ts"; +import { nodeAtPos, ParseTree } from "../../common/tree.ts"; +import { invokeCommand } from "../../plugos-silverbullet-syscall/system.ts"; // Checks if the URL contains a protocol, if so keeps it, otherwise assumes an attachment function patchUrl(url: string): string { diff --git a/packages/plugs/core/page.ts b/packages/plugs/core/page.ts index 4e13a576..93a0b990 100644 --- a/packages/plugs/core/page.ts +++ b/packages/plugs/core/page.ts @@ -1,13 +1,11 @@ -import type { IndexEvent, IndexTreeEvent } from "@silverbulletmd/web/app_event"; +import type { IndexEvent, IndexTreeEvent } from "../../web/app_event.ts"; import { batchSet, clearPageIndex as clearPageIndexSyscall, clearPageIndexForPage, queryPrefix, set, -} from "@silverbulletmd/plugos-silverbullet-syscall/index"; - -import { set as storeSet } from "@plugos/plugos-syscall/store"; +} from "../../plugos-silverbullet-syscall/index.ts"; import { flashNotification, @@ -17,26 +15,26 @@ import { matchBefore, navigate, prompt, -} from "@silverbulletmd/plugos-silverbullet-syscall/editor"; +} from "../../plugos-silverbullet-syscall/editor.ts"; -import { dispatch } from "@plugos/plugos-syscall/event"; +import { dispatch } from "../../plugos-syscall/event.ts"; import { deletePage as deletePageSyscall, listPages, readPage, writePage, -} from "@silverbulletmd/plugos-silverbullet-syscall/space"; -import { invokeFunction } from "@silverbulletmd/plugos-silverbullet-syscall/system"; -import { parseMarkdown } from "@silverbulletmd/plugos-silverbullet-syscall/markdown"; +} from "../../plugos-silverbullet-syscall/space.ts"; +import { invokeFunction } from "../../plugos-silverbullet-syscall/system.ts"; +import { parseMarkdown } from "../../plugos-silverbullet-syscall/markdown.ts"; import { addParentPointers, collectNodesMatching, ParseTree, renderToText, replaceNodesMatching, -} from "@silverbulletmd/common/tree"; -import { applyQuery, QueryProviderEvent } from "../query/engine"; -import { extractMeta } from "../query/data"; +} from "../../common/tree.ts"; +import { applyQuery, QueryProviderEvent } from "../query/engine.ts"; +import { extractMeta } from "../query/data.ts"; // Key space: // pl:toPage:pos => pageName diff --git a/packages/plugs/core/plugmanager.ts b/packages/plugs/core/plugmanager.ts index 8e3da1d7..2bcceb25 100644 --- a/packages/plugs/core/plugmanager.ts +++ b/packages/plugs/core/plugmanager.ts @@ -1,20 +1,20 @@ -import { dispatch } from "@plugos/plugos-syscall/event"; -import { Manifest } from "@silverbulletmd/common/manifest"; +import { dispatch } from "../../plugos-syscall/event.ts"; +import { Manifest } from "../../common/manifest.ts"; import { flashNotification, save, -} from "@silverbulletmd/plugos-silverbullet-syscall/editor"; +} from "../../plugos-silverbullet-syscall/editor.ts"; import { deleteAttachment, listPlugs, writeAttachment, -} from "@silverbulletmd/plugos-silverbullet-syscall/space"; +} from "../../plugos-silverbullet-syscall/space.ts"; import { invokeFunction, reloadPlugs, -} from "@silverbulletmd/plugos-silverbullet-syscall/system"; +} from "../../plugos-silverbullet-syscall/system.ts"; -import { readYamlPage } from "../lib/yaml_page"; +import { readYamlPage } from "../lib/yaml_page.ts"; export async function updatePlugsCommand() { await save(); diff --git a/packages/plugs/core/search.ts b/packages/plugs/core/search.ts index d71ba6cc..be5f7b74 100644 --- a/packages/plugs/core/search.ts +++ b/packages/plugs/core/search.ts @@ -2,17 +2,14 @@ import { fullTextDelete, fullTextIndex, fullTextSearch, -} from "@plugos/plugos-syscall/fulltext"; -import { renderToText } from "@silverbulletmd/common/tree"; -import { PageMeta } from "@silverbulletmd/common/types"; -import { queryPrefix } from "@silverbulletmd/plugos-silverbullet-syscall"; -import { - navigate, - prompt, -} from "@silverbulletmd/plugos-silverbullet-syscall/editor"; -import { IndexTreeEvent } from "@silverbulletmd/web/app_event"; -import { applyQuery, QueryProviderEvent } from "../query/engine"; -import { removeQueries } from "../query/util"; +} from "../../plugos-syscall/fulltext.ts"; +import { renderToText } from "../../common/tree.ts"; +import { PageMeta } from "../../common/types.ts"; +import { queryPrefix } from "../../plugos-silverbullet-syscall/index.ts"; +import { navigate, prompt } from "../../plugos-silverbullet-syscall/editor.ts"; +import { IndexTreeEvent } from "../../web/app_event.ts"; +import { applyQuery, QueryProviderEvent } from "../query/engine.ts"; +import { removeQueries } from "../query/util.ts"; const searchPrefix = "🔍 "; diff --git a/packages/plugs/core/stats.ts b/packages/plugs/core/stats.ts index 38410b6f..e0104851 100644 --- a/packages/plugs/core/stats.ts +++ b/packages/plugs/core/stats.ts @@ -1,8 +1,8 @@ import { flashNotification, getText, -} from "@silverbulletmd/plugos-silverbullet-syscall/editor"; -import { listPages } from "@silverbulletmd/plugos-silverbullet-syscall/space"; +} from "../../plugos-silverbullet-syscall/editor.ts"; +import { listPages } from "../../plugos-silverbullet-syscall/space.ts"; function countWords(str: string): number { const matches = str.match(/[\w\d\'-]+/gi); diff --git a/packages/plugs/core/tags.ts b/packages/plugs/core/tags.ts index 261dcc64..4f34b39f 100644 --- a/packages/plugs/core/tags.ts +++ b/packages/plugs/core/tags.ts @@ -1,12 +1,12 @@ -import { collectNodesOfType } from "@silverbulletmd/common/tree"; +import { collectNodesOfType } from "../../common/tree.ts"; import { batchSet, queryPrefix, -} from "@silverbulletmd/plugos-silverbullet-syscall"; -import { matchBefore } from "@silverbulletmd/plugos-silverbullet-syscall/editor"; -import type { IndexTreeEvent } from "@silverbulletmd/web/app_event"; -import { applyQuery, QueryProviderEvent } from "../query/engine"; -import { removeQueries } from "../query/util"; +} from "../../plugos-silverbullet-syscall/index.ts"; +import { matchBefore } from "../../plugos-silverbullet-syscall/editor.ts"; +import type { IndexTreeEvent } from "../../web/app_event.ts"; +import { applyQuery, QueryProviderEvent } from "../query/engine.ts"; +import { removeQueries } from "../query/util.ts"; // Key space // tag:TAG => true (for completion) diff --git a/packages/plugs/core/template.ts b/packages/plugs/core/template.ts index fcefa614..03f50b5b 100644 --- a/packages/plugs/core/template.ts +++ b/packages/plugs/core/template.ts @@ -3,7 +3,7 @@ import { readPage, writePage, getPageMeta, -} from "@silverbulletmd/plugos-silverbullet-syscall/space"; +} from "../../plugos-silverbullet-syscall/space.ts"; import { filterBox, getCurrentPage, @@ -12,12 +12,12 @@ import { moveCursor, navigate, prompt, -} from "@silverbulletmd/plugos-silverbullet-syscall/editor"; -import { parseMarkdown } from "@silverbulletmd/plugos-silverbullet-syscall/markdown"; -import { extractMeta } from "../query/data"; -import { renderToText } from "@silverbulletmd/common/tree"; -import { niceDate } from "./dates"; -import { readSettings } from "../lib/settings_page"; +} from "../../plugos-silverbullet-syscall/editor.ts"; +import { parseMarkdown } from "../../plugos-silverbullet-syscall/markdown.ts"; +import { extractMeta } from "../query/data.ts"; +import { renderToText } from "../../common/tree.ts"; +import { niceDate } from "./dates.ts"; +import { readSettings } from "../lib/settings_page.ts"; export async function instantiateTemplateCommand() { let allPages = await listPages(); diff --git a/packages/plugs/core/text.ts b/packages/plugs/core/text.ts index 2f72966a..8278057e 100644 --- a/packages/plugs/core/text.ts +++ b/packages/plugs/core/text.ts @@ -5,7 +5,7 @@ import { moveCursor, replaceRange, setSelection, -} from "@silverbulletmd/plugos-silverbullet-syscall/editor"; +} from "../../plugos-silverbullet-syscall/editor.ts"; export async function quoteSelection() { let text = await getText(); @@ -71,7 +71,7 @@ export async function linkSelection() { pos = linkedText.length - 1; } } - await replaceRange(selection.from, selection.to, linkedText) + await replaceRange(selection.from, selection.to, linkedText); await moveCursor(selection.from + pos); } diff --git a/packages/plugs/global.plug.yaml b/packages/plugs/global.plug.yaml index aa4f88d6..61258d82 100644 --- a/packages/plugs/global.plug.yaml +++ b/packages/plugs/global.plug.yaml @@ -1,5 +1,5 @@ name: global dependencies: - yaml: "yaml@2" - handlebars: "handlebars@4.7.7:/dist/handlebars" - "@lezer/lr": "@lezer/lr@1.0.0" + "https://esm.sh/handlebars": "https://esm.sh/handlebars" + "https://deno.land/std/encoding/yaml.ts": "https://deno.land/std/encoding/yaml.ts" + "https://esm.sh/@lezer/lr": "https://esm.sh/@lezer/lr" diff --git a/packages/plugs/lib/settings_page.ts b/packages/plugs/lib/settings_page.ts index 49c923f8..1bbae751 100644 --- a/packages/plugs/lib/settings_page.ts +++ b/packages/plugs/lib/settings_page.ts @@ -1,7 +1,8 @@ -import { readYamlPage } from "./yaml_page"; -import { notifyUser } from "./util"; -import YAML from "yaml"; -import { writePage } from "@silverbulletmd/plugos-silverbullet-syscall/space"; +import { readYamlPage } from "./yaml_page.ts"; +import { notifyUser } from "./util.ts"; +import * as YAML from "https://deno.land/std@0.158.0/encoding/yaml.ts"; + +import { writePage } from "../../plugos-silverbullet-syscall/space.ts"; /** * Convenience function to read a specific set of settings from the `SETTINGS` page as well as default values diff --git a/packages/plugs/lib/util.ts b/packages/plugs/lib/util.ts index af0a2ce0..edf837a2 100644 --- a/packages/plugs/lib/util.ts +++ b/packages/plugs/lib/util.ts @@ -1,4 +1,4 @@ -import { flashNotification } from "@silverbulletmd/plugos-silverbullet-syscall/editor"; +import { flashNotification } from "../../plugos-silverbullet-syscall/editor.ts"; export async function replaceAsync( str: string, @@ -16,7 +16,9 @@ export async function replaceAsync( } export function isServer() { - return typeof window === 'undefined' || typeof window.document === "undefined"; // if something defines window the same way as the browser, this will fail. + return ( + typeof window === "undefined" || typeof window.document === "undefined" + ); // if something defines window the same way as the browser, this will fail. } // this helps keep if's condition as positive @@ -24,11 +26,11 @@ export function isBrowser() { return !isServer(); } -export async function notifyUser(message: string, type?: "info"|"error") { +export async function notifyUser(message: string, type?: "info" | "error") { if (isBrowser()) { return flashNotification(message, type); } const log = type === "error" ? console.error : console.log; log(message); // we should end up sending the message to the user, users dont read logs. return; -} \ No newline at end of file +} diff --git a/packages/plugs/lib/yaml_page.ts b/packages/plugs/lib/yaml_page.ts index efa29472..541f8f72 100644 --- a/packages/plugs/lib/yaml_page.ts +++ b/packages/plugs/lib/yaml_page.ts @@ -1,10 +1,10 @@ -import { findNodeOfType, traverseTree } from "@silverbulletmd/common/tree"; -import { parseMarkdown } from "@silverbulletmd/plugos-silverbullet-syscall/markdown"; +import { findNodeOfType, traverseTree } from "../../common/tree.ts"; +import { parseMarkdown } from "../../plugos-silverbullet-syscall/markdown.ts"; import { readPage, writePage, -} from "@silverbulletmd/plugos-silverbullet-syscall/space"; -import YAML from "yaml"; +} from "../../plugos-silverbullet-syscall/space.ts"; +import * as YAML from "https://deno.land/std@0.158.0/encoding/yaml.ts"; export async function readYamlPage( pageName: string, diff --git a/packages/plugs/query/data.ts b/packages/plugs/query/data.ts index 10132990..4728f942 100644 --- a/packages/plugs/query/data.ts +++ b/packages/plugs/query/data.ts @@ -1,26 +1,21 @@ // Index key space: // data:page@pos -import type { IndexTreeEvent } from "@silverbulletmd/web/app_event"; +import type { IndexTreeEvent } from "../../web/app_event.ts"; import { batchSet, queryPrefix, -} from "@silverbulletmd/plugos-silverbullet-syscall"; +} from "../../plugos-silverbullet-syscall/index.ts"; import { addParentPointers, collectNodesOfType, findNodeOfType, ParseTree, replaceNodesMatching, -} from "@silverbulletmd/common/tree"; -import { - parse as parseYaml, - stringify as stringifyYaml, - parseAllDocuments, -} from "yaml"; -import type { QueryProviderEvent } from "./engine"; -import { applyQuery } from "./engine"; -import { removeQueries } from "./util"; +} from "../../common/tree.ts"; +import type { QueryProviderEvent } from "./engine.ts"; +import { applyQuery } from "./engine.ts"; +import { removeQueries } from "./util.ts"; export async function indexData({ name, tree }: IndexTreeEvent) { let dataObjects: { key: string; value: Object }[] = []; diff --git a/packages/plugs/query/engine.ts b/packages/plugs/query/engine.ts index 63de36bc..a7807894 100644 --- a/packages/plugs/query/engine.ts +++ b/packages/plugs/query/engine.ts @@ -1,10 +1,11 @@ -import { collectNodesOfType, ParseTree } from "@silverbulletmd/common/tree"; -import Handlebars from "handlebars"; -import YAML from "yaml"; +import { collectNodesOfType, ParseTree } from "../../common/tree.ts"; +// import Handlebars from "handlebars"; +import Handlebars from "https://esm.sh/handlebars"; +import * as YAML from "https://deno.land/std@0.158.0/encoding/yaml.ts"; -import { readPage } from "@silverbulletmd/plugos-silverbullet-syscall/space"; -import { niceDate } from "../core/dates"; -import { ParsedQuery } from "./parser"; +import { readPage } from "../../plugos-silverbullet-syscall/space.ts"; +import { niceDate } from "../core/dates.ts"; +import { ParsedQuery } from "./parser.ts"; export type QueryProviderEvent = { query: ParsedQuery; diff --git a/packages/plugs/query/materialized_queries.ts b/packages/plugs/query/materialized_queries.ts index ae026272..809a8979 100644 --- a/packages/plugs/query/materialized_queries.ts +++ b/packages/plugs/query/materialized_queries.ts @@ -3,7 +3,7 @@ import { reloadPage, save, } from "@silverbulletmd/plugos-silverbullet-syscall/editor"; -import Handlebars from "handlebars"; +import Handlebars from "https://esm.sh/handlebars"; import { readPage, diff --git a/packages/plugs/query/util.ts b/packages/plugs/query/util.ts index f1009025..e49cf2f6 100644 --- a/packages/plugs/query/util.ts +++ b/packages/plugs/query/util.ts @@ -3,7 +3,7 @@ import { collectNodesMatching, ParseTree, renderToText, -} from "@silverbulletmd/common/tree"; +} from "../../common/tree.ts"; export const queryRegex = /()(.+?)()/gs;