mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Load hunspell.wasm
from the CDN (#20856)
GitOrigin-RevId: 0fcbc2102e280222ab4b9279f02c820a3b904496
This commit is contained in:
parent
50c74c3168
commit
a1ea50ded3
3 changed files with 35 additions and 11 deletions
|
@ -30,6 +30,7 @@ type Message =
|
|||
}
|
||||
|
||||
export class HunspellManager {
|
||||
baseAssetPath: string
|
||||
dictionariesRoot: string
|
||||
hunspellWorker!: Worker
|
||||
abortController: AbortController | undefined
|
||||
|
@ -42,16 +43,13 @@ export class HunspellManager {
|
|||
private readonly language: string,
|
||||
private readonly learnedWords: string[]
|
||||
) {
|
||||
const baseAssetPath = new URL(
|
||||
this.baseAssetPath = new URL(
|
||||
getMeta('ol-baseAssetPath'),
|
||||
window.location.href
|
||||
)
|
||||
|
||||
this.dictionariesRoot = new URL(
|
||||
getMeta('ol-dictionariesRoot'),
|
||||
baseAssetPath
|
||||
).toString()
|
||||
|
||||
this.dictionariesRoot = getMeta('ol-dictionariesRoot')
|
||||
|
||||
createWorker(() => {
|
||||
this.hunspellWorker = new Worker(
|
||||
new URL('./hunspell.worker.ts', import.meta.url),
|
||||
|
@ -97,6 +95,7 @@ export class HunspellManager {
|
|||
type: 'init',
|
||||
lang: this.language,
|
||||
learnedWords: this.learnedWords, // TODO: add words
|
||||
baseAssetPath: this.baseAssetPath,
|
||||
dictionariesRoot: this.dictionariesRoot,
|
||||
})
|
||||
for (const message of this.pendingMessages) {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import Hunspell from './wasm/hunspell'
|
||||
import hunspellWasmPath from './wasm/hunspell.wasm'
|
||||
|
||||
type SpellChecker = {
|
||||
spell(words: string[]): { index: number }[]
|
||||
|
@ -11,13 +12,23 @@ type SpellChecker = {
|
|||
const createSpellChecker = async ({
|
||||
lang,
|
||||
learnedWords,
|
||||
baseAssetPath,
|
||||
dictionariesRoot,
|
||||
}: {
|
||||
lang: string
|
||||
learnedWords: string[]
|
||||
baseAssetPath: string
|
||||
dictionariesRoot: string
|
||||
}) => {
|
||||
const hunspell = await Hunspell()
|
||||
const fileLocations: Record<string, string> = {
|
||||
'hunspell.wasm': new URL(hunspellWasmPath, baseAssetPath).toString(),
|
||||
}
|
||||
|
||||
const hunspell = await Hunspell({
|
||||
locateFile(file: string) {
|
||||
return fileLocations[file]
|
||||
},
|
||||
})
|
||||
|
||||
const {
|
||||
cwrap,
|
||||
|
@ -51,11 +62,13 @@ const createSpellChecker = async ({
|
|||
|
||||
FS.mkdir('/dictionaries')
|
||||
|
||||
const dictionariesRootURL = new URL(dictionariesRoot, baseAssetPath)
|
||||
|
||||
const [dic, aff] = await Promise.all([
|
||||
fetch(new URL(`./${lang}.dic`, dictionariesRoot)).then(response =>
|
||||
fetch(new URL(`./${lang}.dic`, dictionariesRootURL)).then(response =>
|
||||
response.blob()
|
||||
),
|
||||
fetch(new URL(`./${lang}.aff`, dictionariesRoot)).then(response =>
|
||||
fetch(new URL(`./${lang}.aff`, dictionariesRootURL)).then(response =>
|
||||
response.blob()
|
||||
),
|
||||
])
|
||||
|
|
16
services/web/types/assets.d.ts
vendored
16
services/web/types/assets.d.ts
vendored
|
@ -1,2 +1,14 @@
|
|||
declare module '*.svg'
|
||||
declare module '*.png'
|
||||
declare module '*.svg' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
|
||||
declare module '*.png' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
|
||||
declare module '*.wasm' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue