diff --git a/apps/docs/package.json b/apps/docs/package.json index 81119fa2..6fa88e71 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -23,10 +23,11 @@ "packageManager": "pnpm@8.4.0", "dependencies": { "@ant-design/icons": "^5.4.0", - "@difizen/libro-core": "^0.3.4", - "@difizen/libro-jupyter": "^0.3.4", - "@difizen/libro-lab": "^0.3.4", - "@difizen/libro-terminal": "^0.3.4", + "@difizen/libro": "latest", + "@difizen/libro-core": "latest", + "@difizen/libro-jupyter": "latest", + "@difizen/libro-lab": "latest", + "@difizen/libro-terminal": "latest", "@difizen/mana-app": "latest", "@difizen/mana-l10n": "latest", "@difizen/mana-react": "latest", diff --git a/apps/docs/src/lab/app.ts b/apps/docs/src/lab/app.ts index 8ea325f9..ba5a1e07 100644 --- a/apps/docs/src/lab/app.ts +++ b/apps/docs/src/lab/app.ts @@ -1,4 +1,4 @@ -import { ServerConnection, ServerManager } from '@difizen/libro-lab'; +import { ServerConnection, ServerManager } from '@difizen/libro'; import { ApplicationContribution, inject, singleton } from '@difizen/mana-app'; @singleton({ contrib: ApplicationContribution }) diff --git a/apps/docs/src/lab/index.tsx b/apps/docs/src/lab/index.tsx index 655c41eb..892ce629 100644 --- a/apps/docs/src/lab/index.tsx +++ b/apps/docs/src/lab/index.tsx @@ -1,4 +1,4 @@ -import { LibroLabModule } from '@difizen/libro-lab'; +import { LibroLabModule } from '@difizen/libro'; import { ManaAppPreset, ManaComponents, ManaModule } from '@difizen/mana-app'; import { LibroApp } from './app.js'; diff --git a/apps/docs/src/output/app.ts b/apps/docs/src/output/app.ts index ac208144..99b19f4c 100644 --- a/apps/docs/src/output/app.ts +++ b/apps/docs/src/output/app.ts @@ -1,4 +1,4 @@ -import { LibroService } from '@difizen/libro-core'; +import { LibroService } from '@difizen/libro'; import { RootSlotId } from '@difizen/mana-app'; import { ApplicationContribution, SlotViewManager } from '@difizen/mana-app'; import { inject, singleton } from '@difizen/mana-app'; diff --git a/apps/docs/src/output/content.ts b/apps/docs/src/output/content.ts index 3133c79d..a72662a2 100644 --- a/apps/docs/src/output/content.ts +++ b/apps/docs/src/output/content.ts @@ -1,5 +1,5 @@ -import type { INotebookContent } from '@difizen/libro-jupyter'; -import { ContentContribution } from '@difizen/libro-jupyter'; +import type { INotebookContent } from '@difizen/libro'; +import { ContentContribution } from '@difizen/libro'; import { singleton } from '@difizen/mana-app'; import content from './OutputExamples.ipynb.json'; diff --git a/apps/docs/src/output/index.tsx b/apps/docs/src/output/index.tsx index 79389905..8403e5f4 100644 --- a/apps/docs/src/output/index.tsx +++ b/apps/docs/src/output/index.tsx @@ -1,4 +1,4 @@ -import { LibroJupyterModule } from '@difizen/libro-jupyter'; +import { LibroJupyterModule } from '@difizen/libro'; import { ManaAppPreset, ManaComponents, ManaModule } from '@difizen/mana-app'; import { LibroApp } from './app.js'; diff --git a/apps/docs/src/terminal/app.ts b/apps/docs/src/terminal/app.ts index e0d27d45..a7f834de 100644 --- a/apps/docs/src/terminal/app.ts +++ b/apps/docs/src/terminal/app.ts @@ -1,4 +1,4 @@ -import { ServerConnection, ServerManager } from '@difizen/libro-jupyter'; +import { ServerConnection, ServerManager } from '@difizen/libro'; import { ConfigurationService } from '@difizen/mana-app'; import { SlotViewManager } from '@difizen/mana-app'; import { ApplicationContribution, ViewManager } from '@difizen/mana-app'; diff --git a/apps/docs/src/workbench/app.ts b/apps/docs/src/workbench/app.ts index 06c9206b..694ad47c 100644 --- a/apps/docs/src/workbench/app.ts +++ b/apps/docs/src/workbench/app.ts @@ -2,7 +2,7 @@ import { ServerConnection, LibroJupyterConfiguration, ServerManager, -} from '@difizen/libro-jupyter'; +} from '@difizen/libro'; import type { FileTreeView } from '@difizen/mana-app'; import { ConfigurationService } from '@difizen/mana-app'; import { FileTreeViewFactory, SlotViewManager } from '@difizen/mana-app'; diff --git a/apps/docs/src/workbench/index.tsx b/apps/docs/src/workbench/index.tsx index e1e8c323..8551510d 100644 --- a/apps/docs/src/workbench/index.tsx +++ b/apps/docs/src/workbench/index.tsx @@ -1,4 +1,4 @@ -import { LibroJupyterModule } from '@difizen/libro-jupyter'; +import { LibroJupyterModule } from '@difizen/libro'; import { ManaAppPreset, ManaComponents, @@ -7,7 +7,6 @@ import { RootSlotId, CardTabView, FileTreeView, - createViewPreference, } from '@difizen/mana-app'; import { LibroApp } from './app.js'; diff --git a/packages/libro-ai-native/src/ai-inline-completions/inline-completion-provider.ts b/packages/libro-ai-native/src/ai-inline-completions/inline-completion-provider.ts index cd6bf0b3..9e3ab12d 100644 --- a/packages/libro-ai-native/src/ai-inline-completions/inline-completion-provider.ts +++ b/packages/libro-ai-native/src/ai-inline-completions/inline-completion-provider.ts @@ -1,12 +1,12 @@ import type { InlineCompletionProvider, - CancellationToken, + EditorCancellationToken, IIntelligentCompletionsResult, ICompletionContext, } from '@difizen/libro-code-editor'; import { singleton } from '@difizen/mana-app'; -import { CompletionRequest } from './inline-completion-request.js'; +import { AiCompletionRequest } from './inline-completion-request.js'; import { raceCancellation, sleep } from './utils.js'; // 缓存最近一次的补全结果 @@ -21,11 +21,11 @@ const inlineCompletionCache: { }; class ReqStack { - queue: CompletionRequest[]; + queue: AiCompletionRequest[]; constructor() { this.queue = []; } - addReq(reqRequest: CompletionRequest) { + addReq(reqRequest: AiCompletionRequest) { this.queue.push(reqRequest); } runReq() { @@ -66,12 +66,12 @@ export class AICompletionProvider implements InlineCompletionProvider { async provideInlineCompletionItems( context: ICompletionContext, - token: CancellationToken, + token: EditorCancellationToken, ) { this.cancelRequest(); // 放入队列 - const requestImp = new CompletionRequest(context, token); + const requestImp = new AiCompletionRequest(context, token); this.reqStack.addReq(requestImp); await raceCancellation(sleep(this.inlineComletionsDebounceTime), token); diff --git a/packages/libro-ai-native/src/ai-inline-completions/inline-completion-request.ts b/packages/libro-ai-native/src/ai-inline-completions/inline-completion-request.ts index 89cc08f2..f4c0cea5 100644 --- a/packages/libro-ai-native/src/ai-inline-completions/inline-completion-request.ts +++ b/packages/libro-ai-native/src/ai-inline-completions/inline-completion-request.ts @@ -2,7 +2,7 @@ import type { IAICompletionOption, ICompletionContext, IIntelligentCompletionsResult, - CancellationToken, + EditorCancellationToken, } from '@difizen/libro-code-editor'; import { transient } from '@difizen/mana-app'; import { v4 } from 'uuid'; @@ -10,13 +10,13 @@ import { v4 } from 'uuid'; import { generateInstructionsPrompt } from './Prompt/instruction.js'; @transient() -export class CompletionRequest { +export class AiCompletionRequest { isCancelFlag: boolean; id: string; constructor( public context: ICompletionContext, - public token: CancellationToken, + public token: EditorCancellationToken, ) { this.isCancelFlag = false; this.id = v4(); @@ -25,7 +25,7 @@ export class CompletionRequest { // 拼接上下文信息 protected constructRequestContext( context: ICompletionContext, - token: CancellationToken, + token: EditorCancellationToken, ): IAICompletionOption { // const prompt = lineBasedPromptProcessor.processPrefix(context.prefix); // const suffix = lineBasedPromptProcessor.processSuffix(context.suffix); diff --git a/packages/libro-ai-native/src/ai-inline-completions/module.ts b/packages/libro-ai-native/src/ai-inline-completions/module.ts index b11027af..79240242 100644 --- a/packages/libro-ai-native/src/ai-inline-completions/module.ts +++ b/packages/libro-ai-native/src/ai-inline-completions/module.ts @@ -3,8 +3,8 @@ import { ManaModule } from '@difizen/mana-app'; import { AICompletionContribution } from './inline-completion-contribution.js'; import { AICompletionProvider } from './inline-completion-provider.js'; -import { CompletionRequest } from './inline-completion-request.js'; +import { AiCompletionRequest } from './inline-completion-request.js'; export const LibroAICompletionModule = ManaModule.create() - .register(CompletionRequest, AICompletionProvider, AICompletionContribution) + .register(AiCompletionRequest, AICompletionProvider, AICompletionContribution) .dependOn(CodeEditorModule); diff --git a/packages/libro-ai-native/src/ai-inline-completions/utils.ts b/packages/libro-ai-native/src/ai-inline-completions/utils.ts index 5d3ab395..cabc9c56 100644 --- a/packages/libro-ai-native/src/ai-inline-completions/utils.ts +++ b/packages/libro-ai-native/src/ai-inline-completions/utils.ts @@ -1,4 +1,4 @@ -import type { CancellationToken } from '@difizen/libro-code-editor'; +import type { EditorCancellationToken } from '@difizen/libro-code-editor'; import { lineBasedCompletionModelConfigs } from './contant.js'; @@ -39,16 +39,16 @@ export function sleep(time: number) { export function raceCancellation( promise: Promise, - token: CancellationToken, + token: EditorCancellationToken, ): Promise; export function raceCancellation( promise: Promise, - token: CancellationToken, + token: EditorCancellationToken, defaultValue: T, ): Promise; export function raceCancellation( promise: Promise, - token: CancellationToken, + token: EditorCancellationToken, defaultValue?: T, ): Promise { return Promise.race([ diff --git a/packages/libro-code-editor/src/code-editor-inline-completions/inline-completions-protocol.ts b/packages/libro-code-editor/src/code-editor-inline-completions/inline-completions-protocol.ts index a4a55c5c..8eb34db7 100644 --- a/packages/libro-code-editor/src/code-editor-inline-completions/inline-completions-protocol.ts +++ b/packages/libro-code-editor/src/code-editor-inline-completions/inline-completions-protocol.ts @@ -137,7 +137,7 @@ export interface InlineCompletionProvider { provideInlineCompletionItems: ProvideInlineCompletionsFunction; } -export interface CancellationToken { +export interface EditorCancellationToken { /** * A flag signalling is cancellation has been requested. */ @@ -169,5 +169,5 @@ export interface InlineCompletionImplement { export type ProvideInlineCompletionsFunction = ( context: ICompletionContext, - token: CancellationToken, + token: EditorCancellationToken, ) => Promise; diff --git a/packages/libro-codemirror/src/auto-complete/README.md b/packages/libro-codemirror/src/auto-complete/README.md index a919b1ee..d340a8bd 100644 --- a/packages/libro-codemirror/src/auto-complete/README.md +++ b/packages/libro-codemirror/src/auto-complete/README.md @@ -16,7 +16,7 @@ ### Sources -@CompletionContext +@CodemirrorCompletionContext @CompletionResult diff --git a/packages/libro-codemirror/src/auto-complete/completion.ts b/packages/libro-codemirror/src/auto-complete/completion.ts index 3130cb5e..842f5b8a 100644 --- a/packages/libro-codemirror/src/auto-complete/completion.ts +++ b/packages/libro-codemirror/src/auto-complete/completion.ts @@ -49,7 +49,7 @@ export interface Completion { } /// An instance of this is passed to completion source functions. -export class CompletionContext { +export class CodemirrorCompletionContext { /// @internal abortListeners: (() => void)[] | null = []; @@ -105,7 +105,7 @@ export class CompletionContext { /// Allows you to register abort handlers, which will be called when /// the query is - /// [aborted](#autocomplete.CompletionContext.aborted). + /// [aborted](#autocomplete.CodemirrorCompletionContext.aborted). addEventListener(type: 'abort', listener: () => void) { if (type === 'abort' && this.abortListeners) { this.abortListeners.push(listener); @@ -144,7 +144,7 @@ export function completeFromList( const [validFor, match] = options.every((o) => /^\w+$/.test(o.label)) ? [/\w*$/, /\w+$/] : prefixMatch(options); - return (context: CompletionContext) => { + return (context: CodemirrorCompletionContext) => { const token = context.matchBefore(match); return token || context.explicit ? { from: token ? token.from : context.pos, options, validFor } @@ -158,7 +158,7 @@ export function ifIn( nodes: readonly string[], source: CompletionSource, ): CompletionSource { - return (context: CompletionContext) => { + return (context: CodemirrorCompletionContext) => { for ( let pos: SyntaxNode | null = syntaxTree(context.state).resolveInner( context.pos, @@ -181,7 +181,7 @@ export function ifNotIn( nodes: readonly string[], source: CompletionSource, ): CompletionSource { - return (context: CompletionContext) => { + return (context: CodemirrorCompletionContext) => { for ( let pos: SyntaxNode | null = syntaxTree(context.state).resolveInner( context.pos, @@ -203,7 +203,7 @@ export function ifNotIn( /// synchronously or as a promise. Returning null indicates no /// completions are available. export type CompletionSource = ( - context: CompletionContext, + context: CodemirrorCompletionContext, ) => CompletionResult | null | Promise; /// Interface for objects returned by completion sources. @@ -250,7 +250,7 @@ export interface CompletionResult { current: CompletionResult, from: number, to: number, - context: CompletionContext, + context: CodemirrorCompletionContext, ) => CompletionResult | null; } diff --git a/packages/libro-codemirror/src/auto-complete/state.ts b/packages/libro-codemirror/src/auto-complete/state.ts index 12ad4508..ace31bd1 100644 --- a/packages/libro-codemirror/src/auto-complete/state.ts +++ b/packages/libro-codemirror/src/auto-complete/state.ts @@ -10,7 +10,7 @@ import { cur, asSource, ensureAnchor, - CompletionContext, + CodemirrorCompletionContext, } from './completion.js'; import type { CompletionConfig } from './config.js'; import { completionConfig } from './config.js'; @@ -389,7 +389,7 @@ export class ActiveResult extends ActiveSource { this.result, from, to, - new CompletionContext(tr.state, pos, explicitPos >= 0), + new CodemirrorCompletionContext(tr.state, pos, explicitPos >= 0), )) ) { return new ActiveResult( diff --git a/packages/libro-codemirror/src/auto-complete/view.ts b/packages/libro-codemirror/src/auto-complete/view.ts index 0f69c19c..1367a4ce 100644 --- a/packages/libro-codemirror/src/auto-complete/view.ts +++ b/packages/libro-codemirror/src/auto-complete/view.ts @@ -9,7 +9,7 @@ import type { import { ViewPlugin, logException, getTooltip } from '@codemirror/view'; import type { CompletionResult } from './completion.js'; -import { cur, CompletionContext, applyCompletion } from './completion.js'; +import { cur, CodemirrorCompletionContext, applyCompletion } from './completion.js'; import { completionConfig } from './config.js'; import { completionState, @@ -113,7 +113,7 @@ class RunningQuery { constructor( readonly active: ActiveSource, - readonly context: CompletionContext, + readonly context: CodemirrorCompletionContext, ) {} } @@ -216,7 +216,11 @@ export const completionPlugin = ViewPlugin.fromClass( startQuery(active: ActiveSource) { const { state } = this.view, pos = cur(state); - const context = new CompletionContext(state, pos, active.explicitPos === pos); + const context = new CodemirrorCompletionContext( + state, + pos, + active.explicitPos === pos, + ); const pending = new RunningQuery(active, context); this.running.push(pending); Promise.resolve(active.source(context)) diff --git a/packages/libro-codemirror/src/config.ts b/packages/libro-codemirror/src/config.ts index cc6b7373..8876292a 100644 --- a/packages/libro-codemirror/src/config.ts +++ b/packages/libro-codemirror/src/config.ts @@ -44,7 +44,7 @@ import { FoldIcon, UnFoldIcon } from './libro-icon.js'; import { lspPythonCompletion } from './lsp/completion.js'; import { formatKeymap } from './lsp/format.js'; import { lspLint, lspTooltip } from './lsp/index.js'; -import { ensure } from './mode.js'; +import { codemirrorEnsure } from './mode.js'; import { getTheme, defaultTheme } from './theme.js'; import { tabTooltip, tooltipKeymap } from './tooltip.js'; @@ -632,7 +632,7 @@ export class EditorConfiguration { const themeOverload = this.updateThemeOverload(config); extensions.push(this._themeOverloader.of(themeOverload), insertExt, keymapExt); - ensure(config?.mimetype ?? 'text/x-python') + codemirrorEnsure(config?.mimetype ?? 'text/x-python') .then((spec) => { if (spec) { extensions.push(this.get('language')?.of(spec.support!)); diff --git a/packages/libro-codemirror/src/editor.ts b/packages/libro-codemirror/src/editor.ts index 7ab63332..32852579 100644 --- a/packages/libro-codemirror/src/editor.ts +++ b/packages/libro-codemirror/src/editor.ts @@ -47,7 +47,7 @@ import { v4 } from 'uuid'; import type { CodeMirrorConfig } from './config.js'; import { EditorConfiguration } from './config.js'; import { stateFactory } from './factory.js'; -import { ensure } from './mode.js'; +import { codemirrorEnsure } from './mode.js'; import { monitorPlugin } from './monitor.js'; /** @@ -922,7 +922,7 @@ export class CodeMirrorEditor implements IEditor { protected _onMimeTypeChanged(): void { const mime = this._model.mimeType; // TODO: should we provide a hook for when the mode is done being set? - void ensure(mime).then((spec) => { + void codemirrorEnsure(mime).then((spec) => { if (spec) { this._editorConfig.reconfigureExtension( this._editor, diff --git a/packages/libro-codemirror/src/lsp/completion.ts b/packages/libro-codemirror/src/lsp/completion.ts index aacf07b2..82d86360 100644 --- a/packages/libro-codemirror/src/lsp/completion.ts +++ b/packages/libro-codemirror/src/lsp/completion.ts @@ -1,5 +1,6 @@ import { pythonLanguage } from '@codemirror/lang-python'; -import { CompletionItemKind, CompletionTriggerKind } from '@difizen/libro-lsp'; +import { LspCompletionTriggerKind } from '@difizen/libro-lsp'; +import { LspCompletionItemKind } from '@difizen/libro-lsp'; import type { Completion, CompletionSource } from '../auto-complete/index.js'; @@ -11,8 +12,8 @@ export type CompletionItemDetailReolve = ( ) => Node | null | Promise; const CompletionItemKindMap = Object.fromEntries( - Object.entries(CompletionItemKind).map(([key, value]) => [value, key]), -) as Record; + Object.entries(LspCompletionItemKind).map(([key, value]) => [value, key]), +) as Record; function toSet(chars: Set) { let preamble = ''; @@ -86,7 +87,7 @@ export const lspPythonCompletion: CMLSPExtension = ({ lspProvider }) => { uri: doc.documentInfo.uri, }, context: { - triggerKind: CompletionTriggerKind.Invoked, + triggerKind: LspCompletionTriggerKind.Invoked, }, }); diff --git a/packages/libro-codemirror/src/lsp/lint.ts b/packages/libro-codemirror/src/lsp/lint.ts index e913d36e..b70fc4f2 100644 --- a/packages/libro-codemirror/src/lsp/lint.ts +++ b/packages/libro-codemirror/src/lsp/lint.ts @@ -2,7 +2,7 @@ import type { Diagnostic } from '@codemirror/lint'; import { setDiagnostics } from '@codemirror/lint'; import type { PluginValue, EditorView } from '@codemirror/view'; import { ViewPlugin } from '@codemirror/view'; -import { DiagnosticSeverity } from '@difizen/libro-lsp'; +import { LspDiagnosticSeverity } from '@difizen/libro-lsp'; import type { CMLSPExtension, LSPExtensionOptions } from './protocol.js'; import { posToOffset } from './util.js'; @@ -28,59 +28,61 @@ class LintPlugin implements PluginValue { lspConnection.serverNotifications['textDocument/publishDiagnostics'].event( (e) => { const diagnostics = e.diagnostics - .map(({ range, message, severity = DiagnosticSeverity.Information }) => { - const currentEditor = virtualDocument.getEditorAtVirtualLine({ - line: range.start.line, - ch: range.start.character, - isVirtual: true, - }); - - // the diagnostic range must be in current editor - if (editor !== currentEditor) { - return; - } + .map( + ({ range, message, severity = LspDiagnosticSeverity.Information }) => { + const currentEditor = virtualDocument.getEditorAtVirtualLine({ + line: range.start.line, + ch: range.start.character, + isVirtual: true, + }); - const editorStart = virtualDocument.transformVirtualToEditor({ - line: range.start.line, - ch: range.start.character, - isVirtual: true, - }); + // the diagnostic range must be in current editor + if (editor !== currentEditor) { + return; + } - let offset: number | undefined; - if (editorStart) { - offset = posToOffset(this.view.state.doc, { - line: editorStart.line, - character: editorStart.ch, - })!; - } + const editorStart = virtualDocument.transformVirtualToEditor({ + line: range.start.line, + ch: range.start.character, + isVirtual: true, + }); - const editorEnd = virtualDocument.transformVirtualToEditor({ - line: range.end.line, - ch: range.end.character, - isVirtual: true, - }); + let offset: number | undefined; + if (editorStart) { + offset = posToOffset(this.view.state.doc, { + line: editorStart.line, + character: editorStart.ch, + })!; + } - let end: number | undefined; - if (editorEnd) { - end = posToOffset(this.view.state.doc, { - line: editorEnd.line, - character: editorEnd.ch, + const editorEnd = virtualDocument.transformVirtualToEditor({ + line: range.end.line, + ch: range.end.character, + isVirtual: true, }); - } - return { - from: offset, - to: end, - severity: ( - { - [DiagnosticSeverity.Error]: 'error', - [DiagnosticSeverity.Warning]: 'warning', - [DiagnosticSeverity.Information]: 'info', - [DiagnosticSeverity.Hint]: 'info', - } as const - )[severity], - message, - } as Diagnostic; - }) + + let end: number | undefined; + if (editorEnd) { + end = posToOffset(this.view.state.doc, { + line: editorEnd.line, + character: editorEnd.ch, + }); + } + return { + from: offset, + to: end, + severity: ( + { + [LspDiagnosticSeverity.Error]: 'error', + [LspDiagnosticSeverity.Warning]: 'warning', + [LspDiagnosticSeverity.Information]: 'info', + [LspDiagnosticSeverity.Hint]: 'info', + } as const + )[severity], + message, + } as Diagnostic; + }, + ) .filter(isDiagnostic) .sort((a, b) => { switch (true) { diff --git a/packages/libro-codemirror/src/mode.ts b/packages/libro-codemirror/src/mode.ts index 52ace555..6abf0f7f 100644 --- a/packages/libro-codemirror/src/mode.ts +++ b/packages/libro-codemirror/src/mode.ts @@ -200,12 +200,12 @@ export function findBest(mode: string | ISpec, fallback = true): ISpec | null { /** * Ensure a codemirror mode is available by name or Codemirror spec. * - * @param mode - The mode to ensure. If it is a string, uses [findBest] + * @param mode - The mode to codemirrorEnsure. If it is a string, uses [findBest] * to get the appropriate spec. * * @returns A promise that resolves when the mode is available. */ -export async function ensure(mode: string | ISpec): Promise { +export async function codemirrorEnsure(mode: string | ISpec): Promise { const spec = findBest(mode); if (spec) { spec.support = await spec.load!(); diff --git a/packages/libro-jupyter/src/components/icons.tsx b/packages/libro-jupyter/src/components/icons.tsx index 499ce4c7..6422402e 100644 --- a/packages/libro-jupyter/src/components/icons.tsx +++ b/packages/libro-jupyter/src/components/icons.tsx @@ -87,7 +87,7 @@ export const WarningIcon: React.FC = () => ( ); -export const Location: React.FC = () => ( +export const LocationIcon: React.FC = () => ( { try { const data = await response.json(); if (data.message) { - return new ResponseError(response, data.message); + return new JupyterResponseError(response, data.message); } - return new ResponseError(response); + return new JupyterJupyterResponseError(response); } catch (e) { console.warn(e); return new ResponseError(response); diff --git a/packages/libro-lab/src/index.ts b/packages/libro-lab/src/index.ts index 0265eff8..9409a2ed 100644 --- a/packages/libro-lab/src/index.ts +++ b/packages/libro-lab/src/index.ts @@ -1,4 +1,3 @@ -export * from '@difizen/libro-jupyter'; export * from './module.js'; export * from './lab-app.js'; export * from './github-link/index.js'; diff --git a/packages/libro-lsp/src/adapters/adapter.ts b/packages/libro-lsp/src/adapters/adapter.ts index 1a65f742..f5fb3161 100644 --- a/packages/libro-lsp/src/adapters/adapter.ts +++ b/packages/libro-lsp/src/adapters/adapter.ts @@ -7,7 +7,7 @@ import type { Disposable, Event, View } from '@difizen/mana-app'; import type {} from '@difizen/mana-app'; import mergeWith from 'lodash.mergewith'; -import type { ClientCapabilities, LanguageIdentifier } from '../lsp.js'; +import type { LspClientCapabilities, LanguageIdentifier } from '../lsp.js'; import type { IVirtualPosition } from '../positioning.js'; import type { Document, @@ -544,7 +544,7 @@ export abstract class WidgetLSPAdapter implements Dispos protected async _connect(virtualDocument: VirtualDocument) { const language = virtualDocument.language; - let capabilities: ClientCapabilities = { + let capabilities: LspClientCapabilities = { textDocument: { synchronization: { dynamicRegistration: true, diff --git a/packages/libro-lsp/src/connection-manager.ts b/packages/libro-lsp/src/connection-manager.ts index c7f2d0fe..9d56b500 100644 --- a/packages/libro-lsp/src/connection-manager.ts +++ b/packages/libro-lsp/src/connection-manager.ts @@ -17,7 +17,7 @@ import type * as protocol from 'vscode-languageserver-protocol'; import type { WidgetLSPAdapter } from './adapters/adapter.js'; import type { LSPConnection } from './connection.js'; import { LSPConnectionFactory } from './connection.js'; -import type { ClientCapabilities } from './lsp.js'; +import type { LspClientCapabilities } from './lsp.js'; import type { AskServersToSendTraceNotifications } from './plugin.js'; import type { Document, @@ -84,7 +84,7 @@ export class DocumentConnectionManager implements ILSPDocumentConnectionManager languageServerId: TLanguageServerId, uris: IURIs, onCreate: (connection: LSPConnection) => void, - capabilities: ClientCapabilities, + capabilities: LspClientCapabilities, ): Promise { let connection = this._connections.get(languageServerId); if (!connection) { diff --git a/packages/libro-lsp/src/feature.ts b/packages/libro-lsp/src/feature.ts index 66b265a8..ae97be14 100644 --- a/packages/libro-lsp/src/feature.ts +++ b/packages/libro-lsp/src/feature.ts @@ -6,7 +6,7 @@ import { Emitter } from '@difizen/mana-app'; import { singleton } from '@difizen/mana-app'; import mergeWith from 'lodash.mergewith'; -import type { ClientCapabilities } from './lsp.js'; +import type { LspClientCapabilities } from './lsp.js'; import type { IFeature } from './tokens.js'; import { ILSPFeatureManager } from './tokens.js'; @@ -45,8 +45,8 @@ export class FeatureManager implements ILSPFeatureManager { /** * Get the capabilities of all clients. */ - clientCapabilities(): ClientCapabilities { - let capabilities: ClientCapabilities = {}; + clientCapabilities(): LspClientCapabilities { + let capabilities: LspClientCapabilities = {}; for (const feature of this.features) { if (!feature.capabilities) { continue; diff --git a/packages/libro-lsp/src/lsp.ts b/packages/libro-lsp/src/lsp.ts index 98389934..f2d9a290 100644 --- a/packages/libro-lsp/src/lsp.ts +++ b/packages/libro-lsp/src/lsp.ts @@ -3,25 +3,25 @@ import type * as lsp from 'vscode-languageserver-protocol'; -export type ClientCapabilities = lsp.ClientCapabilities; +export type LspClientCapabilities = lsp.ClientCapabilities; -export enum DiagnosticSeverity { +export enum LspDiagnosticSeverity { Error = 1, Warning = 2, Information = 3, Hint = 4, } -export enum DiagnosticTag { +export enum LspDiagnosticTag { Unnecessary = 1, Deprecated = 2, } -export enum CompletionItemTag { +export enum LspCompletionItemTag { Deprecated = 1, } -export enum CompletionItemKind { +export enum LspCompletionItemKind { Text = 1, Method = 2, Function = 3, @@ -49,13 +49,13 @@ export enum CompletionItemKind { TypeParameter = 25, } -export enum DocumentHighlightKind { +export enum LspDocumentHighlightKind { Text = 1, Read = 2, Write = 3, } -export enum CompletionTriggerKind { +export enum LspCompletionTriggerKind { Invoked = 1, TriggerCharacter = 2, TriggerForIncompleteCompletions = 3, @@ -66,10 +66,10 @@ export enum AdditionalCompletionTriggerKinds { } export type ExtendedCompletionTriggerKind = - | CompletionTriggerKind + | LspCompletionTriggerKind | AdditionalCompletionTriggerKinds; -export type CompletionItemKindStrings = keyof typeof CompletionItemKind; +export type CompletionItemKindStrings = keyof typeof LspCompletionItemKind; export type RecommendedLanguageIdentifier = keyof typeof Languages; diff --git a/packages/libro-lsp/src/positioning.ts b/packages/libro-lsp/src/positioning.ts index 1d0c1dd8..f2750fed 100644 --- a/packages/libro-lsp/src/positioning.ts +++ b/packages/libro-lsp/src/positioning.ts @@ -11,7 +11,7 @@ import type * as lsp from 'vscode-languageserver-protocol'; * TODO: Migrate to offset-only mode once `CodeEditor.IPosition` * is migrated. */ -export interface Position { +export interface LspPosition { /** * Line number */ @@ -26,15 +26,15 @@ export interface Position { /** * is_* attributes are there only to enforce strict interface type checking */ -export interface ISourcePosition extends Position { +export interface ISourcePosition extends LspPosition { isSource: true; } -export interface IEditorPosition extends Position { +export interface IEditorPosition extends LspPosition { isEditor: true; } -export interface IVirtualPosition extends Position { +export interface IVirtualPosition extends LspPosition { isVirtual: true; } @@ -43,10 +43,10 @@ export interface IRootPosition extends ISourcePosition { } /** - * Compare two `Position` variable. + * Compare two `LspPosition` variable. * */ -export function isEqual(self: Position, other: Position): boolean { +export function isEqual(self: LspPosition, other: LspPosition): boolean { return other && self.line === other.line && self.ch === other.ch; } diff --git a/packages/libro-lsp/src/tokens.ts b/packages/libro-lsp/src/tokens.ts index fb56b315..7ca0f431 100644 --- a/packages/libro-lsp/src/tokens.ts +++ b/packages/libro-lsp/src/tokens.ts @@ -16,7 +16,7 @@ import type { IForeignCodeExtractor } from './extractors/types.js'; import type { AnyCompletion, AnyLocation, - ClientCapabilities, + LspClientCapabilities, LanguageIdentifier, } from './lsp.js'; import type { LanguageServer1 as LSPLanguageServerSettings } from './plugin.js'; @@ -328,7 +328,7 @@ export interface ISocketConnectionOptions { /** * LSP capabilities describing currently supported features */ - capabilities: ClientCapabilities; + capabilities: LspClientCapabilities; /** * Is the file format is supported by LSP? @@ -489,7 +489,7 @@ export interface IFeature { /** * LSP capabilities implemented by the feature. */ - capabilities?: ClientCapabilities; + capabilities?: LspClientCapabilities; } export const ILSPFeatureManager = Symbol('ILSPFeatureManager'); @@ -519,7 +519,7 @@ export interface ILSPFeatureManager { /** * Get capabilities of all registered features */ - clientCapabilities(): ClientCapabilities; + clientCapabilities(): LspClientCapabilities; } export const ILSPCodeExtractorsManager = Symbol('ILSPCodeExtractorsManager'); @@ -552,7 +552,7 @@ export interface ILSPOptions extends ILspOptions { /** * Client capabilities implemented by the client. */ - capabilities: ClientCapabilities; + capabilities: LspClientCapabilities; /** * Language server id. diff --git a/packages/libro-lsp/src/virtual/document.ts b/packages/libro-lsp/src/virtual/document.ts index 3314f2d0..69716d13 100644 --- a/packages/libro-lsp/src/virtual/document.ts +++ b/packages/libro-lsp/src/virtual/document.ts @@ -17,7 +17,7 @@ import type { IRootPosition, ISourcePosition, IVirtualPosition, - Position, + LspPosition, } from '../positioning.js'; import type { Document, ILSPCodeExtractorsManager } from '../tokens.js'; import { ILSPDocumentConnectionManager } from '../tokens.js'; @@ -268,7 +268,7 @@ export class VirtualDocument implements Disposable { /** * Convert from code editor position into code mirror position. */ - static ceToCm(position: CodeEditorPosition): Position { + static ceToCm(position: CodeEditorPosition): LspPosition { return { line: position.line, ch: position.column }; } @@ -556,7 +556,7 @@ export class VirtualDocument implements Disposable { } const shift = this._editorToSourceLine.get(editor)!; return { - ...(position as Position), + ...(position as LspPosition), line: position.line + shift, } as IRootPosition; } diff --git a/packages/libro-toc/src/toc-protocol.ts b/packages/libro-toc/src/toc-protocol.ts index 85e81835..e4a27958 100644 --- a/packages/libro-toc/src/toc-protocol.ts +++ b/packages/libro-toc/src/toc-protocol.ts @@ -39,7 +39,7 @@ export interface TOCOptions { /** * Default table of content configuration */ -export const defaultConfig: TOCOptions = { +export const defaultTocConfig: TOCOptions = { baseNumbering: 1, maximalDepth: 4, numberingH1: true, diff --git a/packages/libro/.eslintrc.mjs b/packages/libro/.eslintrc.mjs new file mode 100644 index 00000000..ffd7daa9 --- /dev/null +++ b/packages/libro/.eslintrc.mjs @@ -0,0 +1,3 @@ +module.exports = { + extends: require.resolve('../../.eslintrc.js'), +}; diff --git a/packages/libro/.fatherrc.ts b/packages/libro/.fatherrc.ts new file mode 100644 index 00000000..d7186780 --- /dev/null +++ b/packages/libro/.fatherrc.ts @@ -0,0 +1,15 @@ +export default { + platform: 'browser', + esm: { + output: 'es', + }, + extraBabelPlugins: [ + ['@babel/plugin-proposal-decorators', { legacy: true }], + ['@babel/plugin-transform-flow-strip-types'], + ['@babel/plugin-transform-class-properties', { loose: true }], + ['@babel/plugin-transform-private-methods', { loose: true }], + ['@babel/plugin-transform-private-property-in-object', { loose: true }], + ['babel-plugin-parameter-decorator'], + ], + extraBabelPresets: [['@babel/preset-typescript', { onlyRemoveTypeImports: true }]], +}; diff --git a/packages/libro/CHANGELOG.md b/packages/libro/CHANGELOG.md new file mode 100644 index 00000000..e69de29b diff --git a/packages/libro/README.md b/packages/libro/README.md new file mode 100644 index 00000000..cde5031d --- /dev/null +++ b/packages/libro/README.md @@ -0,0 +1 @@ +# libro diff --git a/packages/libro/babel.config.json b/packages/libro/babel.config.json new file mode 100644 index 00000000..51a623c5 --- /dev/null +++ b/packages/libro/babel.config.json @@ -0,0 +1,11 @@ +{ + "presets": ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"], + "plugins": [ + ["@babel/plugin-proposal-decorators", { "legacy": true }], + "@babel/plugin-transform-flow-strip-types", + ["@babel/plugin-transform-private-methods", { "loose": true }], + ["@babel/plugin-transform-private-property-in-object", { "loose": true }], + ["@babel/plugin-transform-class-properties", { "loose": true }], + "babel-plugin-parameter-decorator" + ] +} diff --git a/packages/libro/jest.config.mjs b/packages/libro/jest.config.mjs new file mode 100644 index 00000000..dd07ec10 --- /dev/null +++ b/packages/libro/jest.config.mjs @@ -0,0 +1,3 @@ +import configs from '../../jest.config.mjs'; + +export default { ...configs }; diff --git a/packages/libro/package.json b/packages/libro/package.json new file mode 100644 index 00000000..3fafc9fe --- /dev/null +++ b/packages/libro/package.json @@ -0,0 +1,96 @@ +{ + "name": "@difizen/libro", + "version": "0.3.4", + "description": "", + "keywords": [ + "libro", + "notebook" + ], + "repository": "git@github.com:difizen/libro.git", + "license": "MIT", + "type": "module", + "exports": { + ".": { + "typings": "./es/index.d.ts", + "default": "./es/index.js" + }, + "./mock": { + "typings": "./es/mock/index.d.ts", + "default": "./es/mock/index.js" + }, + "./es/mock": { + "typings": "./es/mock/index.d.ts", + "default": "./es/mock/index.js" + }, + "./package.json": "./package.json" + }, + "main": "es/index.js", + "module": "es/index.js", + "typings": "es/index.d.ts", + "files": [ + "es", + "src" + ], + "scripts": { + "setup": "father build", + "build": "father build", + "test": ": Note: lint task is delegated to test:* scripts", + "test:vitest": "vitest run", + "test:jest": "jest", + "coverage": ": Note: lint task is delegated to coverage:* scripts", + "coverage:vitest": "vitest run --coverage", + "coverage:jest": "jest --coverage", + "lint": ": Note: lint task is delegated to lint:* scripts", + "lint:eslint": "eslint src", + "typecheck:tsc": "tsc --noEmit" + }, + "dependencies": { + "@ant-design/icons": "^5.1.0", + "@difizen/libro-jupyter": "^0.3.4", + "@difizen/libro-lab": "^0.3.4", + "@difizen/libro-shared-model": "^0.3.4", + "@difizen/libro-virtualized": "^0.3.4", + "@difizen/libro-code-cell": "^0.3.4", + "@difizen/libro-code-editor": "^0.3.4", + "@difizen/libro-codemirror": "^0.3.4", + "@difizen/libro-cofine-editor": "^0.3.4", + "@difizen/libro-cofine-editor-contribution": "^0.3.4", + "@difizen/libro-cofine-textmate": "^0.3.4", + "@difizen/libro-common": "^0.3.4", + "@difizen/libro-core": "^0.3.4", + "@difizen/libro-prompt-cell": "^0.3.4", + "@difizen/libro-sql-cell": "^0.3.4", + "@difizen/libro-terminal": "^0.3.4", + "@difizen/libro-toc": "^0.3.4", + "@difizen/libro-app": "^0.3.4", + "@difizen/libro-cofine-editor-core": "^0.3.4", + "@difizen/libro-widget": "^0.3.4", + "@difizen/libro-ai-native": "^0.3.4", + "@difizen/libro-kernel": "^0.3.4", + "@difizen/libro-l10n": "^0.3.4", + "@difizen/libro-language-client": "^0.3.4", + "@difizen/libro-lsp": "^0.3.4", + "@difizen/libro-markdown": "^0.3.4", + "@difizen/libro-markdown-cell": "^0.3.4", + "@difizen/libro-output": "^0.3.4", + "@difizen/libro-raw-cell": "^0.3.4", + "@difizen/libro-rendermime": "^0.3.4", + "@difizen/libro-search": "^0.3.4", + "@difizen/libro-search-code-cell": "^0.3.4", + "@difizen/mana-app": "latest", + "@difizen/mana-l10n": "latest", + "@difizen/mana-common": "latest", + "@difizen/mana-react": "latest", + "classnames": "^2.3.2", + "uuid": "^9.0.0", + "viewerjs": "^1.11.6" + }, + "peerDependencies": { + "antd": "^5.8.6", + "react": ">=16" + }, + "devDependencies": { + "@types/react": "^18.2.25", + "@types/uuid": "^9.0.2" + } +} diff --git a/packages/libro/src/index.spec.ts b/packages/libro/src/index.spec.ts new file mode 100644 index 00000000..870769b1 --- /dev/null +++ b/packages/libro/src/index.spec.ts @@ -0,0 +1,9 @@ +import assert from 'assert'; + +import 'reflect-metadata'; + +describe('libro', () => { + it('#import', () => { + assert(true); + }); +}); diff --git a/packages/libro/src/index.ts b/packages/libro/src/index.ts new file mode 100644 index 00000000..897c4afc --- /dev/null +++ b/packages/libro/src/index.ts @@ -0,0 +1,16 @@ +export * from '@difizen/libro-shared-model'; +export * from '@difizen/libro-prompt-cell'; +export * from '@difizen/libro-sql-cell'; +export * from '@difizen/libro-terminal'; +export * from '@difizen/libro-toc'; +export * from '@difizen/libro-virtualized'; +export * from '@difizen/libro-widget'; +export * from '@difizen/libro-jupyter'; +export * from '@difizen/libro-lab'; +export * from '@difizen/libro-app'; +export * from '@difizen/libro-ai-native'; +export * from '@difizen/libro-cofine-editor-contribution'; +export * from '@difizen/libro-cofine-editor-core'; +export * from '@difizen/libro-cofine-textmate'; +export * from '@difizen/libro-language-client'; +export * from '@difizen/libro-markdown'; diff --git a/packages/libro/tsconfig.json b/packages/libro/tsconfig.json new file mode 100644 index 00000000..b3ecc8d9 --- /dev/null +++ b/packages/libro/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "es", + "declarationDir": "es", + "resolveJsonModule": true + }, + "types": ["jest"], + "exclude": ["node_modules"], + "include": ["src"] +}