* better named dirs Signed-off-by: Jess Frazelle <github@jessfraz.com> * move some stuff around Signed-off-by: Jess Frazelle <github@jessfraz.com> * more logging Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * less logging Signed-off-by: Jess Frazelle <github@jessfraz.com> * add fs in Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * file reader Signed-off-by: Jess Frazelle <github@jessfraz.com> * workspace Signed-off-by: Jess Frazelle <github@jessfraz.com> * start of workspace folders Signed-off-by: Jess Frazelle <github@jessfraz.com> * start of workspace folders Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanup workspace folders Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanup logs Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com>
50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
import init, {
|
|
copilot_lsp_run,
|
|
InitOutput,
|
|
kcl_lsp_run,
|
|
ServerConfig,
|
|
} from 'wasm-lib/pkg/wasm_lib'
|
|
import { FromServer, IntoServer } from './codec'
|
|
import { fileSystemManager } from 'lang/std/fileSystemManager'
|
|
|
|
export default class Server {
|
|
readonly initOutput: InitOutput
|
|
readonly #intoServer: IntoServer
|
|
readonly #fromServer: FromServer
|
|
|
|
private constructor(
|
|
initOutput: InitOutput,
|
|
intoServer: IntoServer,
|
|
fromServer: FromServer
|
|
) {
|
|
this.initOutput = initOutput
|
|
this.#intoServer = intoServer
|
|
this.#fromServer = fromServer
|
|
}
|
|
|
|
static async initialize(
|
|
intoServer: IntoServer,
|
|
fromServer: FromServer
|
|
): Promise<Server> {
|
|
const initOutput = await init()
|
|
const server = new Server(initOutput, intoServer, fromServer)
|
|
return server
|
|
}
|
|
|
|
async start(type_: 'kcl' | 'copilot', token?: string): Promise<void> {
|
|
const config = new ServerConfig(
|
|
this.#intoServer,
|
|
this.#fromServer,
|
|
fileSystemManager
|
|
)
|
|
if (type_ === 'copilot') {
|
|
if (!token) {
|
|
throw new Error('auth token is required for copilot')
|
|
}
|
|
await copilot_lsp_run(config, token)
|
|
} else if (type_ === 'kcl') {
|
|
await kcl_lsp_run(config)
|
|
}
|
|
}
|
|
}
|