Line data Source code
1 : import * as core from '@ankoh/dashql-core';
2 :
3 : import { CONNECTOR_INFOS, ConnectorType } from '../../connections/connector_info.js';
4 : import { createEmptyScriptData, replaceScriptSessionText, type SessionScripts } from '../scripts/session_scripts.js';
5 : import { createEmptyMetadata, createScriptRef } from '../scripts/script_types.js';
6 :
7 : /// A session of analyzed scripts on one connection, the declarations of every script are in the catalog
8 1 : export function analyzedTestSession(dql: core.DashQL, entries: Array<[string, string]>): SessionScripts {
9 1 : const catalog = dql.createCatalog();
10 1 : const connection = { connectionId: 'main', connectorInfo: CONNECTOR_INFOS[ConnectorType.HYPER], catalog };
11 1 : const scripts: SessionScripts['scripts'] = {};
12 1 : const scriptRefs: SessionScripts['scriptRefs'] = {};
13 1 : for (const [fileName, text] of entries) {
14 1 : const [scriptKey, script] = createEmptyScriptData(dql, connection, fileName);
15 1 : replaceScriptSessionText(script.scriptSession, text);
16 1 : scripts[scriptKey] = script;
17 1 : scriptRefs[fileName] = createScriptRef(scriptKey, fileName);
18 1 : }
19 1 : for (const script of Object.values(scripts)) {
20 1 : script.scriptSession.analyze();
21 1 : script.scriptSession.loadIntoCatalog();
22 1 : }
23 1 : for (const script of Object.values(scripts)) {
24 1 : script.editorUpdate = script.scriptSession.analyze();
25 : }
26 1 : return {
27 1 : instance: dql,
28 1 : sessionId: crypto.randomUUID(),
29 1 : name: 'Dataflow',
30 1 : pendingConnection: null,
31 1 : sessionMetadata: createEmptyMetadata(),
32 1 : scripts,
33 1 : scriptRefs,
34 1 : scriptOrder: entries.map(([fileName]) => fileName),
35 1 : scriptFocus: { fileName: entries[0]?.[0] ?? '' },
36 1 : semanticUserFocus: null,
37 1 : };
38 1 : }
39 :
40 : /// A session with one more script, analyzed with the catalog of the other scripts
41 1 : export function withTestScript(session: SessionScripts, fileName: string, text: string): SessionScripts {
42 1 : const connection = Object.values(session.scripts)[0].connection;
43 1 : const [scriptKey, script] = createEmptyScriptData(session.instance, connection, fileName);
44 1 : replaceScriptSessionText(script.scriptSession, text);
45 1 : script.editorUpdate = script.scriptSession.analyze();
46 1 : return {
47 1 : ...session,
48 1 : scripts: { ...session.scripts, [scriptKey]: script },
49 1 : scriptRefs: { ...session.scriptRefs, [fileName]: createScriptRef(scriptKey, fileName) },
50 1 : scriptOrder: [...session.scriptOrder, fileName],
51 1 : };
52 1 : }
|