Skip to content

Commit fa82451

Browse files
committed
Only load theme once
1 parent bb84fce commit fa82451

File tree

5 files changed

+44
-60
lines changed

5 files changed

+44
-60
lines changed

.changeset/great-donkeys-wash.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@code-hike/lighter": patch
3+
---
4+
5+
Better theme cache

lib/dist/index.cjs.js

Lines changed: 14 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/dist/index.esm.mjs

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -628,33 +628,29 @@ function loadTheme(theme) {
628628
});
629629
});
630630
}
631-
// TODO map names to promises, to avoid loading the same theme twice
632631
var themeCache = new Map();
633632
function loadThemeByName(name) {
633+
if (!ALL_NAMES.includes(name)) {
634+
return Promise.resolve(undefined);
635+
}
636+
if (!themeCache.has(name)) {
637+
themeCache.set(name, reallyLoadThemeByName(name));
638+
}
639+
return themeCache.get(name);
640+
}
641+
function reallyLoadThemeByName(name) {
634642
return __awaiter(this, void 0, void 0, function () {
635-
var rawTheme;
636643
return __generator(this, function (_a) {
637644
switch (_a.label) {
638645
case 0:
639-
if (!ALL_NAMES.includes(name)) {
640-
return [2 /*return*/, Promise.resolve(undefined)];
641-
}
642-
if (themeCache.has(name)) {
643-
return [2 /*return*/, themeCache.get(name)];
644-
}
645-
_a.label = 1;
646-
case 1:
647-
_a.trys.push([1, 3, , 5]);
646+
_a.trys.push([0, 2, , 4]);
648647
return [4 /*yield*/, readJSON("themes", name + ".json")];
648+
case 1: return [2 /*return*/, _a.sent()];
649649
case 2:
650-
rawTheme = _a.sent();
651-
themeCache.set(name, rawTheme);
652-
return [2 /*return*/, rawTheme];
653-
case 3:
654650
_a.sent();
655651
return [4 /*yield*/, fetchJSON("theme?name=".concat(name))];
656-
case 4: return [2 /*return*/, _a.sent()];
657-
case 5: return [2 /*return*/];
652+
case 3: return [2 /*return*/, _a.sent()];
653+
case 4: return [2 /*return*/];
658654
}
659655
});
660656
});
@@ -2478,15 +2474,10 @@ function loadGrammarByScope(scope) {
24782474
}
24792475
function loadGrammarFromFile(path) {
24802476
return __awaiter(this, void 0, void 0, function () {
2481-
var grammar;
24822477
return __generator(this, function (_a) {
24832478
switch (_a.label) {
24842479
case 0: return [4 /*yield*/, readJSON("grammars", path)];
2485-
case 1:
2486-
grammar = _a.sent();
2487-
// grammar.names = [language.id, ...(language.aliases || [])];
2488-
// grammar.embeddedLangs = language.embeddedLangs || [];
2489-
return [2 /*return*/, grammar];
2480+
case 1: return [2 /*return*/, (_a.sent())];
24902481
}
24912482
});
24922483
});

lib/src/grammars.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,5 @@ export async function loadGrammarByScope(
6363
}
6464

6565
export async function loadGrammarFromFile(path: string) {
66-
const grammar = await readJSON("grammars", path);
67-
// grammar.names = [language.id, ...(language.aliases || [])];
68-
// grammar.embeddedLangs = language.embeddedLangs || [];
69-
return grammar as IRawGrammar;
66+
return (await readJSON("grammars", path)) as IRawGrammar;
7067
}

lib/src/theme.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,22 @@ export async function loadTheme(theme: Theme) {
88
return toFinalTheme(rawTheme);
99
}
1010

11-
// TODO map names to promises, to avoid loading the same theme twice
12-
const themeCache = new Map<StringTheme, RawTheme>();
13-
async function loadThemeByName(
14-
name: StringTheme
15-
): Promise<RawTheme | undefined> {
11+
const themeCache = new Map<StringTheme, Promise<RawTheme>>();
12+
function loadThemeByName(name: StringTheme): Promise<RawTheme | undefined> {
1613
if (!ALL_NAMES.includes(name)) {
1714
return Promise.resolve(undefined);
1815
}
1916

20-
if (themeCache.has(name)) {
21-
return themeCache.get(name)!;
17+
if (!themeCache.has(name)) {
18+
themeCache.set(name, reallyLoadThemeByName(name));
2219
}
20+
21+
return themeCache.get(name)!;
22+
}
23+
24+
async function reallyLoadThemeByName(name: StringTheme): Promise<RawTheme> {
2325
try {
24-
const rawTheme = await readJSON("themes", name + ".json");
25-
themeCache.set(name, rawTheme);
26-
return rawTheme;
26+
return await readJSON("themes", name + ".json");
2727
} catch (e) {
2828
return await fetchJSON(`theme?name=${name}`);
2929
}

0 commit comments

Comments
 (0)