Even though the service worker will proactively cache them in the browser, the browser will not have to load them, parse them, interpret them unless these languages are actually used. Less JS to load, less waiting.
269 lines
8.4 KiB
TypeScript
269 lines
8.4 KiB
TypeScript
import { yaml as yamlLanguage } from "@codemirror/legacy-modes/mode/yaml";
|
|
import { type Language, StreamLanguage } from "@codemirror/language";
|
|
import { luaLanguage } from "./space_lua/parse.ts";
|
|
|
|
const yamlStreamLanguage = StreamLanguage.define(yamlLanguage);
|
|
|
|
const eagerLanguages: Record<string, Language> = {
|
|
meta: yamlStreamLanguage,
|
|
yaml: yamlStreamLanguage,
|
|
include: yamlStreamLanguage,
|
|
"space-config": yamlStreamLanguage,
|
|
data: yamlStreamLanguage,
|
|
toc: yamlStreamLanguage,
|
|
"space-lua": luaLanguage,
|
|
lua: luaLanguage,
|
|
};
|
|
|
|
// Each entry is a lazy loader. import() is cached by the JS runtime,
|
|
// so aliases sharing a module (e.g. c/cpp/java from clike) don't re-fetch.
|
|
export const lazyLanguages: Record<string, () => Promise<Language>> = {
|
|
javascript: async () =>
|
|
(await import("@codemirror/lang-javascript")).javascriptLanguage,
|
|
"space-script": async () =>
|
|
(await import("@codemirror/lang-javascript")).javascriptLanguage,
|
|
js: async () =>
|
|
(await import("@codemirror/lang-javascript")).javascriptLanguage,
|
|
typescript: async () =>
|
|
(await import("@codemirror/lang-javascript")).typescriptLanguage,
|
|
ts: async () =>
|
|
(await import("@codemirror/lang-javascript")).typescriptLanguage,
|
|
json: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/javascript")).json,
|
|
),
|
|
sql: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/sql")).standardSQL,
|
|
),
|
|
postgresql: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/sql")).pgSQL,
|
|
),
|
|
pgsql: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/sql")).pgSQL,
|
|
),
|
|
postgres: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/sql")).pgSQL,
|
|
),
|
|
css: async () => (await import("@codemirror/lang-css")).cssLanguage,
|
|
"space-style": async () =>
|
|
(await import("@codemirror/lang-css")).cssLanguage,
|
|
html: async () => (await import("@codemirror/lang-html")).htmlLanguage,
|
|
nix: async () =>
|
|
(await import("@replit/codemirror-lang-nix")).nixLanguage,
|
|
python: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/python")).python,
|
|
),
|
|
py: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/python")).python,
|
|
),
|
|
rust: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/rust")).rust,
|
|
),
|
|
rs: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/rust")).rust,
|
|
),
|
|
r: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/r")).r,
|
|
),
|
|
shell: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/shell")).shell,
|
|
),
|
|
sh: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/shell")).shell,
|
|
),
|
|
bash: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/shell")).shell,
|
|
),
|
|
zsh: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/shell")).shell,
|
|
),
|
|
fish: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/shell")).shell,
|
|
),
|
|
go: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/go")).go,
|
|
),
|
|
golang: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/go")).go,
|
|
),
|
|
xml: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/xml")).xml,
|
|
),
|
|
swift: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/swift")).swift,
|
|
),
|
|
toml: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/toml")).toml,
|
|
),
|
|
protobuf: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/protobuf")).protobuf,
|
|
),
|
|
proto: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/protobuf")).protobuf,
|
|
),
|
|
diff: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/diff")).diff,
|
|
),
|
|
powershell: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/powershell")).powerShell,
|
|
),
|
|
perl: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/perl")).perl,
|
|
),
|
|
ruby: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/ruby")).ruby,
|
|
),
|
|
tcl: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/tcl")).tcl,
|
|
),
|
|
verilog: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/verilog")).verilog,
|
|
),
|
|
vhdl: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/vhdl")).vhdl,
|
|
),
|
|
dockerfile: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/dockerfile")).dockerFile,
|
|
),
|
|
cmake: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/cmake")).cmake,
|
|
),
|
|
erlang: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/erlang")).erlang,
|
|
),
|
|
c: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).c,
|
|
),
|
|
cpp: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).cpp,
|
|
),
|
|
"c++": async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).cpp,
|
|
),
|
|
cxx: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).cpp,
|
|
),
|
|
java: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).java,
|
|
),
|
|
csharp: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).csharp,
|
|
),
|
|
cs: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).csharp,
|
|
),
|
|
"c#": async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).csharp,
|
|
),
|
|
scala: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).scala,
|
|
),
|
|
kotlin: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).kotlin,
|
|
),
|
|
objc: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).objectiveC,
|
|
),
|
|
"objective-c": async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).objectiveC,
|
|
),
|
|
objectivec: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).objectiveC,
|
|
),
|
|
objcpp: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).objectiveCpp,
|
|
),
|
|
"objective-cpp": async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).objectiveCpp,
|
|
),
|
|
objectivecpp: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).objectiveCpp,
|
|
),
|
|
"objective-c++": async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).objectiveCpp,
|
|
),
|
|
"objectivec++": async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).objectiveCpp,
|
|
),
|
|
dart: async () =>
|
|
StreamLanguage.define(
|
|
(await import("@codemirror/legacy-modes/mode/clike")).dart,
|
|
),
|
|
};
|
|
|
|
const cache: Record<string, Language> = {};
|
|
|
|
export function languageFor(name: string): Language | null {
|
|
return eagerLanguages[name] ?? cache[name] ??
|
|
(name.startsWith("#") ? yamlStreamLanguage : null);
|
|
}
|
|
|
|
export async function loadLanguageFor(
|
|
name: string,
|
|
): Promise<Language | null> {
|
|
const eager = eagerLanguages[name];
|
|
if (eager) return eager;
|
|
if (name.startsWith("#")) return yamlStreamLanguage;
|
|
if (cache[name]) return cache[name];
|
|
const loader = lazyLanguages[name];
|
|
if (!loader) return null;
|
|
cache[name] = await loader();
|
|
return cache[name];
|
|
}
|
|
|
|
export const allLanguageNames = [
|
|
...new Set([
|
|
...Object.keys(eagerLanguages),
|
|
...Object.keys(lazyLanguages),
|
|
]),
|
|
];
|