Skip to content

Commit 4cd990c

Browse files
author
Loïc Mangeonjean
committed
feat: return the loading promise when registering an extension
1 parent 247c460 commit 4cd990c

File tree

6 files changed

+44
-4
lines changed

6 files changed

+44
-4
lines changed

package-lock.json

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

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
"jschardet": "^3.0.0",
7676
"package-json": "^8.1.1",
7777
"param-case": "^3.0.4",
78+
"pascal-case": "^3.1.2",
7879
"patch-package": "^8.0.0",
7980
"recast": "^0.23.4",
8081
"rollup": "^3.29.1",

rollup/rollup.default-extensions.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import nodeResolve from '@rollup/plugin-node-resolve'
22
import * as rollup from 'rollup'
33
import { importMetaAssets } from '@web/rollup-plugin-import-meta-assets'
44
import { PackageJson } from 'type-fest'
5+
import { pascalCase } from 'pascal-case'
56
import * as fs from 'fs'
67
import * as fsPromise from 'fs/promises'
78
import * as path from 'path'
@@ -121,6 +122,7 @@ export default rollup.defineConfig([
121122
description: `Default VSCode extension designed to be used with ${pkg.name}`,
122123
main: entrypoint,
123124
module: entrypoint,
125+
types: 'index.d.ts',
124126
dependencies: {
125127
vscode: `npm:${pkg.name}@^${pkg.version}`,
126128
...Object.fromEntries(Object.entries(pkg.dependencies).filter(([key]) => dependencies.has(key)))
@@ -133,6 +135,13 @@ export default rollup.defineConfig([
133135
source: JSON.stringify(packageJson, null, 2),
134136
type: 'asset'
135137
})
138+
139+
this.emitFile({
140+
fileName: 'index.d.ts',
141+
needsCodeReference: false,
142+
source: 'declare const whenReady: () => Promise<void>\nexport { whenReady }',
143+
type: 'asset'
144+
})
136145
}
137146
})
138147
]
@@ -165,7 +174,10 @@ export default rollup.defineConfig([
165174
},
166175
load () {
167176
return `
168-
${extensions.map(name => `import '@codingame/monaco-vscode-${name}-default-extension'`).join('\n')}
177+
${extensions.map(name => `import { whenReady as whenReady${pascalCase(name)} } from '@codingame/monaco-vscode-${name}-default-extension'`).join('\n')}
178+
const whenReady = Promise.all(
179+
${extensions.map(name => ` whenReady${pascalCase(name)}()`).join(',\n')}
180+
)
169181
`
170182
}
171183
},
@@ -179,6 +191,7 @@ ${extensions.map(name => `import '@codingame/monaco-vscode-${name}-default-exten
179191
description: `Meta package including default VSCode extensions designed to be used with ${pkg.name}`,
180192
main: entrypoint,
181193
module: entrypoint,
194+
types: 'index.d.ts',
182195
dependencies: Object.fromEntries(Array.from(dependencies).map(name => [
183196
name,
184197
pkg.version
@@ -191,6 +204,13 @@ ${extensions.map(name => `import '@codingame/monaco-vscode-${name}-default-exten
191204
source: JSON.stringify(packageJson, null, 2),
192205
type: 'asset'
193206
})
207+
208+
this.emitFile({
209+
fileName: 'index.d.ts',
210+
needsCodeReference: false,
211+
source: 'declare const whenReady: () => Promise<void>\nexport { whenReady }',
212+
type: 'asset'
213+
})
194214
}
195215
})]
196216
}))])

src/extensions.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ interface RegisterRemoteExtensionParams extends RegisterExtensionParams {
3636
interface RegisterExtensionResult {
3737
id: string
3838
dispose (): Promise<void>
39+
whenReady(): Promise<void>
3940
}
4041

4142
interface RegisterRemoteExtensionResult extends RegisterExtensionResult {
@@ -126,6 +127,9 @@ export function registerExtension (manifest: IExtensionManifest, extHostKind?: E
126127

127128
let api: RegisterExtensionResult = {
128129
id,
130+
async whenReady () {
131+
await addExtensionPromise
132+
},
129133
async dispose () {
130134
const extension = await addExtensionPromise
131135
await deltaExtensions([], [extension])

src/rollup-extension-directory-plugin.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export default function plugin ({
7777
import manifest from '${manifestPath}'
7878
import { registerExtension } from 'vscode/extensions'
7979
80-
const { registerFileUrl } = registerExtension(manifest)
80+
const { registerFileUrl, whenReady } = registerExtension(manifest)
8181
${resources.map(resource => {
8282
const lines: string[] = [
8383
generateFileRegistrationInstruction(resource.path, path.resolve(id, resource.realPath ?? resource.path), resource.mimeType)
@@ -88,7 +88,9 @@ ${resources.map(resource => {
8888
8989
return lines.join('\n')
9090
}).join('\n')}
91-
`
91+
92+
export { whenReady }
93+
`
9294
} catch (err) {
9395
console.error(err, (err as Error).stack)
9496
throw err

src/rollup-vsix-plugin.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,12 @@ import { registerExtension } from 'vscode/extensions'
129129
130130
const manifest = ${JSON.stringify(transformManifest(packageJson))}
131131
132-
const { registerFileUrl } = registerExtension(manifest)
132+
const { registerFileUrl, whenReady } = registerExtension(manifest)
133133
134134
${pathMapping.map(({ pathInExtension, url, mimeType }) => (`
135135
registerFileUrl('${pathInExtension}', ${url}${mimeType != null ? `, '${mimeType}'` : ''})`)).join('\n')}
136+
137+
export { whenReady }
136138
`
137139
}
138140
}

0 commit comments

Comments
 (0)