chore: import upstream snapshot with attribution
CI / build (push) Has been cancelled

This commit is contained in:
wehub-resource-sync
2026-07-13 13:09:51 +08:00
commit 0232b4e2bb
3528 changed files with 291404 additions and 0 deletions
@@ -0,0 +1,87 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { Container } from 'inversify';
import {
ASTFactory,
ScopeChain,
VariableContainerModule,
} from '@flowgram.ai/variable-core';
import { createPlaygroundContainer } from '@flowgram.ai/core';
import {
FreeLayoutScopeChain,
FixedLayoutScopeChain,
FlowNodeVariableData,
VariableChainConfig,
GlobalScope,
bindGlobalScope,
ScopeChainTransformService,
} from '../src';
import { EntityManager } from '@flowgram.ai/core';
import { VariableEngine } from '@flowgram.ai/variable-core';
import {
FlowDocument,
FlowDocumentContainerModule,
} from '@flowgram.ai/document';
import { WorkflowDocumentContainerModule } from '@flowgram.ai/free-layout-core';
export interface TestConfig extends VariableChainConfig {
enableGlobalScope?: boolean;
onInit?: (container: Container) => void;
runExtraTest?: (container: Container) => void
}
export function getContainer(layout: 'free' | 'fixed', config?: TestConfig): Container {
const { enableGlobalScope, onInit, runExtraTest, ...layoutConfig } = config || {};
const container = createPlaygroundContainer() as Container;
container.load(VariableContainerModule);
container.load(FlowDocumentContainerModule);
if (layout === 'free') {
container.load(WorkflowDocumentContainerModule);
// container.get(WorkflowLinesManager).registerContribution(WorkflowSimpleLineContribution);
//container.get(WorkflowLinesManager).switchLineType(WorkflowSimpleLineContribution.type);
}
if (layoutConfig) {
container.bind(VariableChainConfig).toConstantValue(layoutConfig);
}
if (layout === 'free') {
container.bind(ScopeChain).to(FreeLayoutScopeChain).inSingletonScope();
}
if (layout === 'fixed') {
container.bind(ScopeChain).to(FixedLayoutScopeChain).inSingletonScope();
}
container.bind(ScopeChainTransformService).toSelf().inSingletonScope();
bindGlobalScope(container.bind.bind(container))
const entityManager = container.get<EntityManager>(EntityManager);
const variableEngine = container.get<VariableEngine>(VariableEngine);
const document = container.get<FlowDocument>(FlowDocument);
if (enableGlobalScope) {
// when get global scope, it will auto create it if not exists
container.get(GlobalScope).setVar(ASTFactory.createVariableDeclaration({
key: 'GlobalScope',
type: ASTFactory.createString(),
}));
}
/**
* 扩展 FlowNodeVariableData
*/
entityManager.registerEntityData(
FlowNodeVariableData,
() => ({ variableEngine } as any),
);
document.registerNodeDatas(FlowNodeVariableData);
onInit?.(container);
return container;
}
@@ -0,0 +1,89 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { FlowDocumentJSON } from '@flowgram.ai/document';
export const fixLayout1: FlowDocumentJSON = {
nodes: [
{
type: 'start',
meta: {
isStart: true,
},
id: 'start',
},
{
type: 'getRecords',
id: 'getRecords_07e97c55832',
},
{
type: 'loop',
id: 'forEach_260a8f85ff2',
blocks: [
{
type: 'createRecord',
id: 'createRecord_8f85ff2c11d',
},
{
type: 'dynamicSplit',
id: 'exclusiveSplit_ff2c11d0fb4',
blocks: [
{
id: 'branch_f2c11d0fb42',
},
{
id: 'branch_2c11d0fb42c',
},
],
},
],
},
{
type: 'dynamicSplit',
id: 'exclusiveSplit_88dbf2c60ae',
meta: {
defaultExpanded: true,
},
blocks: [
{
id: 'branch_8dbf2c60aee',
blocks: [
{
type: 'dynamicSplit',
id: 'exclusiveSplit_a59afaadc9a',
blocks: [
{
id: 'branch_59afaadc9ac',
},
{
id: 'branch_9afaadc9acd',
blocks: [
{
type: 'deleteRecords',
id: 'deleteRecords_c32807e97c5',
},
]
},
],
},
]
},
{
id: 'branch_dbf2c60aee4',
blocks: [
{
type: 'updateRecords',
id: 'updateRecords_7ed2a172c32',
},
]
},
],
},
{
type: 'end',
id: 'end',
},
],
};
@@ -0,0 +1,154 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { WorkflowJSON } from "@flowgram.ai/free-layout-core";
export const freeLayout1: WorkflowJSON = {
"nodes": [
{
"id": "start_0",
"type": "start",
"meta": {
"position": {
"x": -264,
"y": -79
}
},
"data": {}
},
{
"id": "end_0",
"type": "end",
"meta": {
"position": {
"x": 1515,
"y": -191
}
},
"data": {}
},
{
"id": "base_1",
"type": "base",
"meta": {
"position": {
"x": 103.5,
"y": -122.5
}
}
},
{
"id": "base_2",
"type": "base",
"meta": {
"position": {
"x": 525.5,
"y": -250.5
}
}
},
{
"id": "loop_1",
"type": "loop",
"meta": {
"position": {
"x": 541.5,
"y": 42.5
},
"canvasPosition": {
"x": 1154.5,
"y": 206.5
}
},
"data": {
"target": {
"meta": {
"name": "循环输出_"
},
"type": "Boolean"
}
},
"blocks": [
{
"id": "base_in_loop_1",
"type": "base",
"meta": {
"position": {
"x": 40,
"y": 100
}
}
},
{
"id": "base_in_loop_2",
"type": "base",
"meta": {
"position": {
"x": 62,
"y": 299
}
}
},
{
"id": "base_in_loop_3",
"type": "base",
"meta": {
"position": {
"x": 457,
"y": 188
}
}
}
],
"edges": [
{
"sourceNodeID": "base_in_loop_1",
"targetNodeID": "base_in_loop_3"
},
{
"sourceNodeID": "base_in_loop_2",
"targetNodeID": "base_in_loop_3"
}
]
},
{
"id": "base_3",
"type": "base",
"meta": {
"position": {
"x": 1063.5,
"y": -52.987060546875
}
}
}
],
"edges": [
{
"sourceNodeID": "base_2",
"targetNodeID": "end_0"
},
{
"sourceNodeID": "base_3",
"targetNodeID": "end_0"
},
{
"sourceNodeID": "start_0",
"targetNodeID": "base_1"
},
{
"sourceNodeID": "base_1",
"targetNodeID": "base_2"
},
{
"sourceNodeID": "base_1",
"targetNodeID": "loop_1"
},
{
"sourceNodeID": "loop_1",
"targetNodeID": "base_3",
"sourcePortID": "loop-output"
}
]
}
@@ -0,0 +1,108 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { describe, expect, test } from 'vitest';
import { VariableEngine } from '@flowgram.ai/variable-core';
import { ASTKind } from '@flowgram.ai/variable-core';
import { FlowDocument, FlowDocumentJSON } from '@flowgram.ai/document';
import {
FlowNodeVariableData,
} from '../src';
import { TestConfig, getContainer } from './container'
export const runFixedLayoutTest = (testName:string, spec: FlowDocumentJSON, config?: TestConfig) => {
describe(testName, () => {
const container = getContainer('fixed', config);
const flowDocument = container.get(FlowDocument);
const variableEngine = container.get(VariableEngine);
variableEngine.onScopeChange(action => {
const { type, scope } = action;
// 作用域默认创建一个默认变量
if (type === 'add') {
scope.ast.set('/', {
kind: ASTKind.VariableDeclaration,
type: ASTKind.String,
key: String(scope.id),
});
}
});
// 创建一个测试作用域
variableEngine.createScope('testScope');
const traverseVariableDatas = () =>
flowDocument
.getAllNodes()
// TODO 包含 $ 的节点不注册 variableData
.filter(_node => !_node.id.startsWith('$'))
.map(_node => _node.getData(FlowNodeVariableData))
.filter(Boolean);
// 初始化所有节点的私有作用域
const initAllNodePrivate = () => {
traverseVariableDatas().forEach(_data => {
_data.initPrivate();
});
};
// 初始化所有节点的可用变量
const printAllNodeAvailableMapping = (_scopeType: 'public' | 'private' = 'public') =>
traverseVariableDatas().reduce((acm, _data) => {
const scope = _data[_scopeType]!;
acm.set(String(scope.id), scope.available.variableKeys);
return acm;
}, new Map<string, string[]>());
// 初始化所有节点的覆盖作用域
const printAllCovers = (_scopeType: 'public' | 'private' = 'public') =>
traverseVariableDatas().reduce((acm, _data) => {
const scope = _data[_scopeType]!;
acm.set(
String(scope.id),
scope.coverScopes.map(_scope => String(_scope.id)),
);
return acm;
}, new Map<string, string[]>());
flowDocument.fromJSON(spec);
test('test get Deps', () => {
expect(printAllNodeAvailableMapping()).toMatchSnapshot();
});
test('test get Covers', () => {
expect(printAllCovers()).toMatchSnapshot();
});
test('test get Deps After Init Private', () => {
initAllNodePrivate();
expect(printAllNodeAvailableMapping()).toMatchSnapshot();
});
test('test get private scope Deps', () => {
expect(printAllNodeAvailableMapping('private')).toMatchSnapshot();
});
test('test get Covers After Init Private', () => {
expect(printAllCovers()).toMatchSnapshot();
});
test('test get private scope Covers', () => {
expect(printAllCovers('private')).toMatchSnapshot();
});
test('test sort', () => {
expect(variableEngine.getAllScopes({ sort: true }).map(_scope => _scope.id)).toMatchSnapshot();
});
config?.runExtraTest?.(container);
});
}
@@ -0,0 +1,108 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { describe, expect, test } from 'vitest';
import { VariableEngine } from '@flowgram.ai/variable-core';
import { ASTKind } from '@flowgram.ai/variable-core';
import {
FlowNodeVariableData
} from '../src';
import { TestConfig, getContainer } from './container';
import { WorkflowDocument, WorkflowJSON } from '@flowgram.ai/free-layout-core';
export const runFreeLayoutTest = (testName: string, spec: WorkflowJSON, config?: TestConfig) => {
describe(testName, async () => {
const container = getContainer('free', config);
const flowDocument = container.get(WorkflowDocument);
const variableEngine = container.get(VariableEngine);
variableEngine.onScopeChange(action => {
const { type, scope } = action;
// 作用域默认创建一个默认变量
if (type === 'add') {
scope.ast.set('/', {
kind: ASTKind.VariableDeclaration,
type: ASTKind.String,
key: String(scope.id),
});
}
});
// 创建一个全局作用域
variableEngine.createScope('testScope');
const traverseVariableDatas = () =>
flowDocument
.getAllNodes()
// TODO 包含 $ 的节点不注册 variableData
.filter(_node => !_node.id.startsWith('$'))
.map(_node => _node.getData(FlowNodeVariableData))
.filter(Boolean);
// 初始化所有节点的私有作用域
const initAllNodePrivate = () => {
traverseVariableDatas().forEach(_data => {
_data.initPrivate();
});
};
// 初始化所有节点的可用变量
const printAllNodeAvailableMapping = (_scopeType: 'public' | 'private' = 'public') =>
traverseVariableDatas().reduce((acm, _data) => {
const scope = _data[_scopeType]!;
acm.set(String(scope.id), scope.available.variableKeys);
return acm;
}, new Map<string, string[]>());
// 初始化所有节点的覆盖作用域
const printAllCovers = (_scopeType: 'public' | 'private' = 'public') =>
traverseVariableDatas().reduce((acm, _data) => {
const scope = _data[_scopeType]!;
acm.set(
String(scope.id),
scope.coverScopes.map(_scope => String(_scope.id)),
);
return acm;
}, new Map<string, string[]>());
await flowDocument.fromJSON(spec);
test('test get Deps', () => {
expect(printAllNodeAvailableMapping()).toMatchSnapshot();
});
test('test get Covers', () => {
expect(printAllCovers()).toMatchSnapshot();
});
test('test get Deps After Init Private', () => {
initAllNodePrivate();
expect(printAllNodeAvailableMapping()).toMatchSnapshot();
});
test('test get private scope Deps', () => {
expect(printAllNodeAvailableMapping('private')).toMatchSnapshot();
});
test('test get Covers After Init Private', () => {
expect(printAllCovers()).toMatchSnapshot();
});
test('test get private scope Covers', () => {
expect(printAllCovers('private')).toMatchSnapshot();
});
test('test sort', () => {
expect(variableEngine.getAllScopes({ sort: true }).map(_scope => _scope.id)).toMatchSnapshot();
});
config?.runExtraTest?.(container);
});
}
@@ -0,0 +1,774 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Variable Fix Layout Enable Global Scope > test get Covers 1`] = `
Map {
"start" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"getRecords_07e97c55832" => [
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"forEach_260a8f85ff2" => [
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"createRecord_8f85ff2c11d" => [
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c",
],
"exclusiveSplit_ff2c11d0fb4" => [],
"branch_f2c11d0fb42" => [
"branch_2c11d0fb42c",
],
"branch_2c11d0fb42c" => [],
"exclusiveSplit_88dbf2c60ae" => [
"end",
],
"branch_8dbf2c60aee" => [
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
],
"exclusiveSplit_a59afaadc9a" => [],
"branch_59afaadc9ac" => [
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
],
"branch_9afaadc9acd" => [],
"deleteRecords_c32807e97c5" => [],
"branch_dbf2c60aee4" => [],
"updateRecords_7ed2a172c32" => [],
"end" => [],
}
`;
exports[`Variable Fix Layout Enable Global Scope > test get Covers After Init Private 1`] = `
Map {
"start" => [
"getRecords_07e97c55832",
"getRecords_07e97c55832_private",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"getRecords_07e97c55832" => [
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"forEach_260a8f85ff2" => [
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"createRecord_8f85ff2c11d" => [
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"exclusiveSplit_ff2c11d0fb4" => [],
"branch_f2c11d0fb42" => [
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"branch_2c11d0fb42c" => [],
"exclusiveSplit_88dbf2c60ae" => [
"end",
"end_private",
],
"branch_8dbf2c60aee" => [
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"exclusiveSplit_a59afaadc9a" => [],
"branch_59afaadc9ac" => [
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"branch_9afaadc9acd" => [],
"deleteRecords_c32807e97c5" => [],
"branch_dbf2c60aee4" => [],
"updateRecords_7ed2a172c32" => [],
"end" => [],
}
`;
exports[`Variable Fix Layout Enable Global Scope > test get Deps 1`] = `
Map {
"start" => [
"GlobalScope",
],
"getRecords_07e97c55832" => [
"GlobalScope",
"start",
],
"forEach_260a8f85ff2" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
],
"createRecord_8f85ff2c11d" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
],
"exclusiveSplit_ff2c11d0fb4" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
],
"branch_f2c11d0fb42" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
],
"branch_2c11d0fb42c" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
],
"exclusiveSplit_88dbf2c60ae" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
],
"branch_8dbf2c60aee" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
],
"exclusiveSplit_a59afaadc9a" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
],
"branch_59afaadc9ac" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
],
"branch_9afaadc9acd" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
],
"deleteRecords_c32807e97c5" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
],
"branch_dbf2c60aee4" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
],
"updateRecords_7ed2a172c32" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"branch_dbf2c60aee4",
],
"end" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
],
}
`;
exports[`Variable Fix Layout Enable Global Scope > test get Deps After Init Private 1`] = `
Map {
"start" => [
"GlobalScope",
"start_private",
],
"getRecords_07e97c55832" => [
"GlobalScope",
"start",
"getRecords_07e97c55832_private",
],
"forEach_260a8f85ff2" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2_private",
],
"createRecord_8f85ff2c11d" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d_private",
],
"exclusiveSplit_ff2c11d0fb4" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4_private",
],
"branch_f2c11d0fb42" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42_private",
],
"branch_2c11d0fb42c" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c_private",
],
"exclusiveSplit_88dbf2c60ae" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae_private",
],
"branch_8dbf2c60aee" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee_private",
],
"exclusiveSplit_a59afaadc9a" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a_private",
],
"branch_59afaadc9ac" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac_private",
],
"branch_9afaadc9acd" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_9afaadc9acd_private",
],
"deleteRecords_c32807e97c5" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5_private",
],
"branch_dbf2c60aee4" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_dbf2c60aee4_private",
],
"updateRecords_7ed2a172c32" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32_private",
],
"end" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"end_private",
],
}
`;
exports[`Variable Fix Layout Enable Global Scope > test get private scope Covers 1`] = `
Map {
"start_private" => [
"start",
],
"getRecords_07e97c55832_private" => [
"getRecords_07e97c55832",
],
"forEach_260a8f85ff2_private" => [
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"createRecord_8f85ff2c11d_private" => [
"createRecord_8f85ff2c11d",
],
"exclusiveSplit_ff2c11d0fb4_private" => [
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"branch_f2c11d0fb42_private" => [
"branch_f2c11d0fb42",
],
"branch_2c11d0fb42c_private" => [
"branch_2c11d0fb42c",
],
"exclusiveSplit_88dbf2c60ae_private" => [
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"branch_8dbf2c60aee_private" => [
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"exclusiveSplit_a59afaadc9a_private" => [
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"branch_59afaadc9ac_private" => [
"branch_59afaadc9ac",
],
"branch_9afaadc9acd_private" => [
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"deleteRecords_c32807e97c5_private" => [
"deleteRecords_c32807e97c5",
],
"branch_dbf2c60aee4_private" => [
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"updateRecords_7ed2a172c32_private" => [
"updateRecords_7ed2a172c32",
],
"end_private" => [
"end",
],
}
`;
exports[`Variable Fix Layout Enable Global Scope > test get private scope Deps 1`] = `
Map {
"start_private" => [
"GlobalScope",
],
"getRecords_07e97c55832_private" => [
"GlobalScope",
"start",
],
"forEach_260a8f85ff2_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
],
"createRecord_8f85ff2c11d_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
],
"exclusiveSplit_ff2c11d0fb4_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
],
"branch_f2c11d0fb42_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
],
"branch_2c11d0fb42c_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
],
"exclusiveSplit_88dbf2c60ae_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
],
"branch_8dbf2c60aee_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
],
"exclusiveSplit_a59afaadc9a_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
],
"branch_59afaadc9ac_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
],
"branch_9afaadc9acd_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
],
"deleteRecords_c32807e97c5_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
],
"branch_dbf2c60aee4_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
],
"updateRecords_7ed2a172c32_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
],
"end_private" => [
"GlobalScope",
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
],
}
`;
exports[`Variable Fix Layout Enable Global Scope > test sort 1`] = `
[
Symbol(GlobalScope),
"start_private",
"start",
"getRecords_07e97c55832",
"getRecords_07e97c55832_private",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
"testScope",
"$blockIcon$exclusiveSplit_ff2c11d0fb4",
"$inlineBlocks$exclusiveSplit_ff2c11d0fb4",
"$blockOrderIcon$branch_f2c11d0fb42",
"$blockOrderIcon$branch_2c11d0fb42c",
"$blockIcon$exclusiveSplit_88dbf2c60ae",
"$inlineBlocks$exclusiveSplit_88dbf2c60ae",
"$blockOrderIcon$branch_8dbf2c60aee",
"$blockIcon$exclusiveSplit_a59afaadc9a",
"$inlineBlocks$exclusiveSplit_a59afaadc9a",
"$blockOrderIcon$branch_59afaadc9ac",
"$blockOrderIcon$branch_9afaadc9acd",
"$blockOrderIcon$branch_dbf2c60aee4",
]
`;
@@ -0,0 +1,658 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Variable Fix Layout Filter Start End > test get Covers 1`] = `
Map {
"start" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
],
"getRecords_07e97c55832" => [
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
],
"forEach_260a8f85ff2" => [
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
],
"createRecord_8f85ff2c11d" => [
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c",
],
"exclusiveSplit_ff2c11d0fb4" => [],
"branch_f2c11d0fb42" => [
"branch_2c11d0fb42c",
],
"branch_2c11d0fb42c" => [],
"exclusiveSplit_88dbf2c60ae" => [],
"branch_8dbf2c60aee" => [
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
],
"exclusiveSplit_a59afaadc9a" => [],
"branch_59afaadc9ac" => [
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
],
"branch_9afaadc9acd" => [],
"deleteRecords_c32807e97c5" => [],
"branch_dbf2c60aee4" => [],
"updateRecords_7ed2a172c32" => [],
"end" => [],
}
`;
exports[`Variable Fix Layout Filter Start End > test get Covers After Init Private 1`] = `
Map {
"start" => [
"getRecords_07e97c55832",
"getRecords_07e97c55832_private",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"getRecords_07e97c55832" => [
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"forEach_260a8f85ff2" => [
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"createRecord_8f85ff2c11d" => [
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"exclusiveSplit_ff2c11d0fb4" => [],
"branch_f2c11d0fb42" => [
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"branch_2c11d0fb42c" => [],
"exclusiveSplit_88dbf2c60ae" => [],
"branch_8dbf2c60aee" => [
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"exclusiveSplit_a59afaadc9a" => [],
"branch_59afaadc9ac" => [
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"branch_9afaadc9acd" => [],
"deleteRecords_c32807e97c5" => [],
"branch_dbf2c60aee4" => [],
"updateRecords_7ed2a172c32" => [],
"end" => [],
}
`;
exports[`Variable Fix Layout Filter Start End > test get Deps 1`] = `
Map {
"start" => [],
"getRecords_07e97c55832" => [],
"forEach_260a8f85ff2" => [
"getRecords_07e97c55832",
],
"createRecord_8f85ff2c11d" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
],
"exclusiveSplit_ff2c11d0fb4" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
],
"branch_f2c11d0fb42" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
],
"branch_2c11d0fb42c" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
],
"exclusiveSplit_88dbf2c60ae" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
],
"branch_8dbf2c60aee" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
],
"exclusiveSplit_a59afaadc9a" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
],
"branch_59afaadc9ac" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
],
"branch_9afaadc9acd" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
],
"deleteRecords_c32807e97c5" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
],
"branch_dbf2c60aee4" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
],
"updateRecords_7ed2a172c32" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"branch_dbf2c60aee4",
],
"end" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
],
}
`;
exports[`Variable Fix Layout Filter Start End > test get Deps After Init Private 1`] = `
Map {
"start" => [],
"getRecords_07e97c55832" => [
"getRecords_07e97c55832_private",
],
"forEach_260a8f85ff2" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2_private",
],
"createRecord_8f85ff2c11d" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d_private",
],
"exclusiveSplit_ff2c11d0fb4" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4_private",
],
"branch_f2c11d0fb42" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42_private",
],
"branch_2c11d0fb42c" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c_private",
],
"exclusiveSplit_88dbf2c60ae" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae_private",
],
"branch_8dbf2c60aee" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee_private",
],
"exclusiveSplit_a59afaadc9a" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a_private",
],
"branch_59afaadc9ac" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac_private",
],
"branch_9afaadc9acd" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_9afaadc9acd_private",
],
"deleteRecords_c32807e97c5" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5_private",
],
"branch_dbf2c60aee4" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_dbf2c60aee4_private",
],
"updateRecords_7ed2a172c32" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32_private",
],
"end" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"end_private",
],
}
`;
exports[`Variable Fix Layout Filter Start End > test get private scope Covers 1`] = `
Map {
"start_private" => [
"start",
],
"getRecords_07e97c55832_private" => [
"getRecords_07e97c55832",
],
"forEach_260a8f85ff2_private" => [
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"createRecord_8f85ff2c11d_private" => [
"createRecord_8f85ff2c11d",
],
"exclusiveSplit_ff2c11d0fb4_private" => [
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"branch_f2c11d0fb42_private" => [
"branch_f2c11d0fb42",
],
"branch_2c11d0fb42c_private" => [
"branch_2c11d0fb42c",
],
"exclusiveSplit_88dbf2c60ae_private" => [
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"branch_8dbf2c60aee_private" => [
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"exclusiveSplit_a59afaadc9a_private" => [
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"branch_59afaadc9ac_private" => [
"branch_59afaadc9ac",
],
"branch_9afaadc9acd_private" => [
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"deleteRecords_c32807e97c5_private" => [
"deleteRecords_c32807e97c5",
],
"branch_dbf2c60aee4_private" => [
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"updateRecords_7ed2a172c32_private" => [
"updateRecords_7ed2a172c32",
],
"end_private" => [],
}
`;
exports[`Variable Fix Layout Filter Start End > test get private scope Deps 1`] = `
Map {
"start_private" => [],
"getRecords_07e97c55832_private" => [],
"forEach_260a8f85ff2_private" => [
"getRecords_07e97c55832",
],
"createRecord_8f85ff2c11d_private" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
],
"exclusiveSplit_ff2c11d0fb4_private" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
],
"branch_f2c11d0fb42_private" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
],
"branch_2c11d0fb42c_private" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
],
"exclusiveSplit_88dbf2c60ae_private" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
],
"branch_8dbf2c60aee_private" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
],
"exclusiveSplit_a59afaadc9a_private" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
],
"branch_59afaadc9ac_private" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
],
"branch_9afaadc9acd_private" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
],
"deleteRecords_c32807e97c5_private" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
],
"branch_dbf2c60aee4_private" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
],
"updateRecords_7ed2a172c32_private" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
],
"end_private" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
],
}
`;
exports[`Variable Fix Layout Filter Start End > test sort 1`] = `
[
"start",
"getRecords_07e97c55832",
"getRecords_07e97c55832_private",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"testScope",
"$blockIcon$exclusiveSplit_ff2c11d0fb4",
"$inlineBlocks$exclusiveSplit_ff2c11d0fb4",
"$blockOrderIcon$branch_f2c11d0fb42",
"$blockOrderIcon$branch_2c11d0fb42c",
"$blockIcon$exclusiveSplit_88dbf2c60ae",
"$inlineBlocks$exclusiveSplit_88dbf2c60ae",
"$blockOrderIcon$branch_8dbf2c60aee",
"$blockIcon$exclusiveSplit_a59afaadc9a",
"$inlineBlocks$exclusiveSplit_a59afaadc9a",
"$blockOrderIcon$branch_59afaadc9ac",
"$blockOrderIcon$branch_9afaadc9acd",
"$blockOrderIcon$branch_dbf2c60aee4",
"end",
"start_private",
"end_private",
]
`;
@@ -0,0 +1,134 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Variable Fix Layout Group > test get Covers 1`] = `
Map {
"start_0" => [
"node_0",
"node_1",
"end_0",
],
"node_0" => [
"node_1",
"end_0",
],
"node_1" => [
"end_0",
],
"end_0" => [],
}
`;
exports[`Variable Fix Layout Group > test get Covers After Init Private 1`] = `
Map {
"start_0" => [
"node_0",
"node_0_private",
"node_1",
"node_1_private",
"end_0",
"end_0_private",
],
"node_0" => [
"node_1",
"node_1_private",
"end_0",
"end_0_private",
],
"node_1" => [
"end_0",
"end_0_private",
],
"end_0" => [],
}
`;
exports[`Variable Fix Layout Group > test get Deps 1`] = `
Map {
"start_0" => [],
"node_0" => [
"start_0",
],
"node_1" => [
"start_0",
"node_0",
],
"end_0" => [
"start_0",
"node_0",
"node_1",
],
}
`;
exports[`Variable Fix Layout Group > test get Deps After Init Private 1`] = `
Map {
"start_0" => [
"start_0_private",
],
"node_0" => [
"start_0",
"node_0_private",
],
"node_1" => [
"start_0",
"node_0",
"node_1_private",
],
"end_0" => [
"start_0",
"node_0",
"node_1",
"end_0_private",
],
}
`;
exports[`Variable Fix Layout Group > test get private scope Covers 1`] = `
Map {
"start_0_private" => [
"start_0",
],
"node_0_private" => [
"node_0",
],
"node_1_private" => [
"node_1",
],
"end_0_private" => [
"end_0",
],
}
`;
exports[`Variable Fix Layout Group > test get private scope Deps 1`] = `
Map {
"start_0_private" => [],
"node_0_private" => [
"start_0",
],
"node_1_private" => [
"start_0",
"node_0",
],
"end_0_private" => [
"start_0",
"node_0",
"node_1",
],
}
`;
exports[`Variable Fix Layout Group > test sort 1`] = `
[
"start_0_private",
"start_0",
"node_0",
"node_0_private",
"node_1",
"node_1_private",
"end_0",
"end_0_private",
"testScope",
"$group_test$",
]
`;
@@ -0,0 +1,723 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Variable Fix Layout Without Config > test get Covers 1`] = `
Map {
"start" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"getRecords_07e97c55832" => [
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"forEach_260a8f85ff2" => [
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"createRecord_8f85ff2c11d" => [
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c",
],
"exclusiveSplit_ff2c11d0fb4" => [],
"branch_f2c11d0fb42" => [
"branch_2c11d0fb42c",
],
"branch_2c11d0fb42c" => [],
"exclusiveSplit_88dbf2c60ae" => [
"end",
],
"branch_8dbf2c60aee" => [
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
],
"exclusiveSplit_a59afaadc9a" => [],
"branch_59afaadc9ac" => [
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
],
"branch_9afaadc9acd" => [],
"deleteRecords_c32807e97c5" => [],
"branch_dbf2c60aee4" => [],
"updateRecords_7ed2a172c32" => [],
"end" => [],
}
`;
exports[`Variable Fix Layout Without Config > test get Covers After Init Private 1`] = `
Map {
"start" => [
"getRecords_07e97c55832",
"getRecords_07e97c55832_private",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"getRecords_07e97c55832" => [
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"forEach_260a8f85ff2" => [
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"createRecord_8f85ff2c11d" => [
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"exclusiveSplit_ff2c11d0fb4" => [],
"branch_f2c11d0fb42" => [
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"branch_2c11d0fb42c" => [],
"exclusiveSplit_88dbf2c60ae" => [
"end",
"end_private",
],
"branch_8dbf2c60aee" => [
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"exclusiveSplit_a59afaadc9a" => [],
"branch_59afaadc9ac" => [
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"branch_9afaadc9acd" => [],
"deleteRecords_c32807e97c5" => [],
"branch_dbf2c60aee4" => [],
"updateRecords_7ed2a172c32" => [],
"end" => [],
}
`;
exports[`Variable Fix Layout Without Config > test get Deps 1`] = `
Map {
"start" => [],
"getRecords_07e97c55832" => [
"start",
],
"forEach_260a8f85ff2" => [
"start",
"getRecords_07e97c55832",
],
"createRecord_8f85ff2c11d" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
],
"exclusiveSplit_ff2c11d0fb4" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
],
"branch_f2c11d0fb42" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
],
"branch_2c11d0fb42c" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
],
"exclusiveSplit_88dbf2c60ae" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
],
"branch_8dbf2c60aee" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
],
"exclusiveSplit_a59afaadc9a" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
],
"branch_59afaadc9ac" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
],
"branch_9afaadc9acd" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
],
"deleteRecords_c32807e97c5" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
],
"branch_dbf2c60aee4" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
],
"updateRecords_7ed2a172c32" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"branch_dbf2c60aee4",
],
"end" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
],
}
`;
exports[`Variable Fix Layout Without Config > test get Deps After Init Private 1`] = `
Map {
"start" => [
"start_private",
],
"getRecords_07e97c55832" => [
"start",
"getRecords_07e97c55832_private",
],
"forEach_260a8f85ff2" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2_private",
],
"createRecord_8f85ff2c11d" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d_private",
],
"exclusiveSplit_ff2c11d0fb4" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4_private",
],
"branch_f2c11d0fb42" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42_private",
],
"branch_2c11d0fb42c" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c_private",
],
"exclusiveSplit_88dbf2c60ae" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae_private",
],
"branch_8dbf2c60aee" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee_private",
],
"exclusiveSplit_a59afaadc9a" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a_private",
],
"branch_59afaadc9ac" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac_private",
],
"branch_9afaadc9acd" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_9afaadc9acd_private",
],
"deleteRecords_c32807e97c5" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5_private",
],
"branch_dbf2c60aee4" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_dbf2c60aee4_private",
],
"updateRecords_7ed2a172c32" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32_private",
],
"end" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"end_private",
],
}
`;
exports[`Variable Fix Layout Without Config > test get private scope Covers 1`] = `
Map {
"start_private" => [
"start",
],
"getRecords_07e97c55832_private" => [
"getRecords_07e97c55832",
],
"forEach_260a8f85ff2_private" => [
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"createRecord_8f85ff2c11d_private" => [
"createRecord_8f85ff2c11d",
],
"exclusiveSplit_ff2c11d0fb4_private" => [
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"branch_f2c11d0fb42_private" => [
"branch_f2c11d0fb42",
],
"branch_2c11d0fb42c_private" => [
"branch_2c11d0fb42c",
],
"exclusiveSplit_88dbf2c60ae_private" => [
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"branch_8dbf2c60aee_private" => [
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"exclusiveSplit_a59afaadc9a_private" => [
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"branch_59afaadc9ac_private" => [
"branch_59afaadc9ac",
],
"branch_9afaadc9acd_private" => [
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"deleteRecords_c32807e97c5_private" => [
"deleteRecords_c32807e97c5",
],
"branch_dbf2c60aee4_private" => [
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"updateRecords_7ed2a172c32_private" => [
"updateRecords_7ed2a172c32",
],
"end_private" => [
"end",
],
}
`;
exports[`Variable Fix Layout Without Config > test get private scope Deps 1`] = `
Map {
"start_private" => [],
"getRecords_07e97c55832_private" => [
"start",
],
"forEach_260a8f85ff2_private" => [
"start",
"getRecords_07e97c55832",
],
"createRecord_8f85ff2c11d_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
],
"exclusiveSplit_ff2c11d0fb4_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
],
"branch_f2c11d0fb42_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
],
"branch_2c11d0fb42c_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
],
"exclusiveSplit_88dbf2c60ae_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
],
"branch_8dbf2c60aee_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
],
"exclusiveSplit_a59afaadc9a_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
],
"branch_59afaadc9ac_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
],
"branch_9afaadc9acd_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
],
"deleteRecords_c32807e97c5_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
],
"branch_dbf2c60aee4_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
],
"updateRecords_7ed2a172c32_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
],
"end_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
],
}
`;
exports[`Variable Fix Layout Without Config > test sort 1`] = `
[
"start_private",
"start",
"getRecords_07e97c55832",
"getRecords_07e97c55832_private",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
"testScope",
"$blockIcon$exclusiveSplit_ff2c11d0fb4",
"$inlineBlocks$exclusiveSplit_ff2c11d0fb4",
"$blockOrderIcon$branch_f2c11d0fb42",
"$blockOrderIcon$branch_2c11d0fb42c",
"$blockIcon$exclusiveSplit_88dbf2c60ae",
"$inlineBlocks$exclusiveSplit_88dbf2c60ae",
"$blockOrderIcon$branch_8dbf2c60aee",
"$blockIcon$exclusiveSplit_a59afaadc9a",
"$inlineBlocks$exclusiveSplit_a59afaadc9a",
"$blockOrderIcon$branch_59afaadc9ac",
"$blockOrderIcon$branch_9afaadc9acd",
"$blockOrderIcon$branch_dbf2c60aee4",
]
`;
@@ -0,0 +1,109 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Variable Fixed Layout transform empty > test get Covers 1`] = `
Map {
"start_0" => [],
"end_0" => [],
"base_1" => [],
"base_2" => [],
"loop_1" => [],
"base_in_loop_1" => [],
"base_in_loop_2" => [],
"base_in_loop_3" => [],
"base_3" => [],
}
`;
exports[`Variable Fixed Layout transform empty > test get Covers After Init Private 1`] = `
Map {
"start_0" => [],
"end_0" => [],
"base_1" => [],
"base_2" => [],
"loop_1" => [],
"base_in_loop_1" => [],
"base_in_loop_2" => [],
"base_in_loop_3" => [],
"base_3" => [],
}
`;
exports[`Variable Fixed Layout transform empty > test get Deps 1`] = `
Map {
"start_0" => [],
"end_0" => [],
"base_1" => [],
"base_2" => [],
"loop_1" => [],
"base_in_loop_1" => [],
"base_in_loop_2" => [],
"base_in_loop_3" => [],
"base_3" => [],
}
`;
exports[`Variable Fixed Layout transform empty > test get Deps After Init Private 1`] = `
Map {
"start_0" => [],
"end_0" => [],
"base_1" => [],
"base_2" => [],
"loop_1" => [],
"base_in_loop_1" => [],
"base_in_loop_2" => [],
"base_in_loop_3" => [],
"base_3" => [],
}
`;
exports[`Variable Fixed Layout transform empty > test get private scope Covers 1`] = `
Map {
"start_0_private" => [],
"end_0_private" => [],
"base_1_private" => [],
"base_2_private" => [],
"loop_1_private" => [],
"base_in_loop_1_private" => [],
"base_in_loop_2_private" => [],
"base_in_loop_3_private" => [],
"base_3_private" => [],
}
`;
exports[`Variable Fixed Layout transform empty > test get private scope Deps 1`] = `
Map {
"start_0_private" => [],
"end_0_private" => [],
"base_1_private" => [],
"base_2_private" => [],
"loop_1_private" => [],
"base_in_loop_1_private" => [],
"base_in_loop_2_private" => [],
"base_in_loop_3_private" => [],
"base_3_private" => [],
}
`;
exports[`Variable Fixed Layout transform empty > test sort 1`] = `
[
"start_0",
"testScope",
"end_0",
"base_1",
"base_2",
"loop_1",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
"base_3",
"start_0_private",
"end_0_private",
"base_1_private",
"base_2_private",
"loop_1_private",
"base_in_loop_1_private",
"base_in_loop_2_private",
"base_in_loop_3_private",
"base_3_private",
]
`;
@@ -0,0 +1,841 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Variable Fix Layout > test get Covers 1`] = `
Map {
"start" => [
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"getRecords_07e97c55832" => [
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"forEach_260a8f85ff2" => [
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"createRecord_8f85ff2c11d" => [
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c",
],
"exclusiveSplit_ff2c11d0fb4" => [],
"branch_f2c11d0fb42" => [
"branch_2c11d0fb42c",
],
"branch_2c11d0fb42c" => [],
"exclusiveSplit_88dbf2c60ae" => [
"end",
],
"branch_8dbf2c60aee" => [
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"exclusiveSplit_a59afaadc9a" => [
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"branch_59afaadc9ac" => [
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"branch_9afaadc9acd" => [
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"deleteRecords_c32807e97c5" => [
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end",
],
"branch_dbf2c60aee4" => [
"end",
],
"updateRecords_7ed2a172c32" => [
"end",
],
"end" => [],
}
`;
exports[`Variable Fix Layout > test get Covers After Init Private 1`] = `
Map {
"start" => [
"getRecords_07e97c55832",
"getRecords_07e97c55832_private",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"getRecords_07e97c55832" => [
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"forEach_260a8f85ff2" => [
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"createRecord_8f85ff2c11d" => [
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"exclusiveSplit_ff2c11d0fb4" => [],
"branch_f2c11d0fb42" => [
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"branch_2c11d0fb42c" => [],
"exclusiveSplit_88dbf2c60ae" => [
"end",
"end_private",
],
"branch_8dbf2c60aee" => [
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"exclusiveSplit_a59afaadc9a" => [
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"branch_59afaadc9ac" => [
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"branch_9afaadc9acd" => [
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"deleteRecords_c32807e97c5" => [
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
],
"branch_dbf2c60aee4" => [
"end",
"end_private",
],
"updateRecords_7ed2a172c32" => [
"end",
"end_private",
],
"end" => [],
}
`;
exports[`Variable Fix Layout > test get Deps 1`] = `
Map {
"start" => [],
"getRecords_07e97c55832" => [
"start",
],
"forEach_260a8f85ff2" => [
"start",
"getRecords_07e97c55832",
],
"createRecord_8f85ff2c11d" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
],
"exclusiveSplit_ff2c11d0fb4" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
],
"branch_f2c11d0fb42" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
],
"branch_2c11d0fb42c" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42",
],
"exclusiveSplit_88dbf2c60ae" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
],
"branch_8dbf2c60aee" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
],
"exclusiveSplit_a59afaadc9a" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
],
"branch_59afaadc9ac" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
],
"branch_9afaadc9acd" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_59afaadc9ac",
],
"deleteRecords_c32807e97c5" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
],
"branch_dbf2c60aee4" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
],
"updateRecords_7ed2a172c32" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
],
"end" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
],
}
`;
exports[`Variable Fix Layout > test get Deps After Init Private 1`] = `
Map {
"start" => [
"start_private",
],
"getRecords_07e97c55832" => [
"start",
"getRecords_07e97c55832_private",
],
"forEach_260a8f85ff2" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2_private",
],
"createRecord_8f85ff2c11d" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d_private",
],
"exclusiveSplit_ff2c11d0fb4" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4_private",
],
"branch_f2c11d0fb42" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42_private",
],
"branch_2c11d0fb42c" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42",
"branch_2c11d0fb42c_private",
],
"exclusiveSplit_88dbf2c60ae" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae_private",
],
"branch_8dbf2c60aee" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee_private",
],
"exclusiveSplit_a59afaadc9a" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a_private",
],
"branch_59afaadc9ac" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac_private",
],
"branch_9afaadc9acd" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac",
"branch_9afaadc9acd_private",
],
"deleteRecords_c32807e97c5" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5_private",
],
"branch_dbf2c60aee4" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4_private",
],
"updateRecords_7ed2a172c32" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32_private",
],
"end" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"end_private",
],
}
`;
exports[`Variable Fix Layout > test get private scope Covers 1`] = `
Map {
"start_private" => [
"start",
],
"getRecords_07e97c55832_private" => [
"getRecords_07e97c55832",
],
"forEach_260a8f85ff2_private" => [
"forEach_260a8f85ff2",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"createRecord_8f85ff2c11d_private" => [
"createRecord_8f85ff2c11d",
],
"exclusiveSplit_ff2c11d0fb4_private" => [
"exclusiveSplit_ff2c11d0fb4",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
],
"branch_f2c11d0fb42_private" => [
"branch_f2c11d0fb42",
],
"branch_2c11d0fb42c_private" => [
"branch_2c11d0fb42c",
],
"exclusiveSplit_88dbf2c60ae_private" => [
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"branch_8dbf2c60aee_private" => [
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"exclusiveSplit_a59afaadc9a_private" => [
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"branch_59afaadc9ac_private" => [
"branch_59afaadc9ac",
],
"branch_9afaadc9acd_private" => [
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
],
"deleteRecords_c32807e97c5_private" => [
"deleteRecords_c32807e97c5",
],
"branch_dbf2c60aee4_private" => [
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
],
"updateRecords_7ed2a172c32_private" => [
"updateRecords_7ed2a172c32",
],
"end_private" => [
"end",
],
}
`;
exports[`Variable Fix Layout > test get private scope Deps 1`] = `
Map {
"start_private" => [],
"getRecords_07e97c55832_private" => [
"start",
],
"forEach_260a8f85ff2_private" => [
"start",
"getRecords_07e97c55832",
],
"createRecord_8f85ff2c11d_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
],
"exclusiveSplit_ff2c11d0fb4_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
],
"branch_f2c11d0fb42_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
],
"branch_2c11d0fb42c_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42",
],
"exclusiveSplit_88dbf2c60ae_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
],
"branch_8dbf2c60aee_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
],
"exclusiveSplit_a59afaadc9a_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
],
"branch_59afaadc9ac_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
],
"branch_9afaadc9acd_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac",
],
"deleteRecords_c32807e97c5_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
],
"branch_dbf2c60aee4_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
],
"updateRecords_7ed2a172c32_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
],
"end_private" => [
"start",
"getRecords_07e97c55832",
"forEach_260a8f85ff2",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae",
"branch_8dbf2c60aee",
"exclusiveSplit_a59afaadc9a",
"branch_59afaadc9ac",
"branch_9afaadc9acd",
"deleteRecords_c32807e97c5",
"branch_dbf2c60aee4",
"updateRecords_7ed2a172c32",
],
}
`;
exports[`Variable Fix Layout > test sort 1`] = `
[
"start_private",
"start",
"getRecords_07e97c55832",
"getRecords_07e97c55832_private",
"forEach_260a8f85ff2",
"forEach_260a8f85ff2_private",
"createRecord_8f85ff2c11d",
"createRecord_8f85ff2c11d_private",
"exclusiveSplit_ff2c11d0fb4",
"exclusiveSplit_ff2c11d0fb4_private",
"branch_f2c11d0fb42",
"branch_f2c11d0fb42_private",
"branch_2c11d0fb42c",
"branch_2c11d0fb42c_private",
"exclusiveSplit_88dbf2c60ae",
"exclusiveSplit_88dbf2c60ae_private",
"branch_8dbf2c60aee",
"branch_8dbf2c60aee_private",
"exclusiveSplit_a59afaadc9a",
"exclusiveSplit_a59afaadc9a_private",
"branch_59afaadc9ac",
"branch_59afaadc9ac_private",
"branch_9afaadc9acd",
"branch_9afaadc9acd_private",
"deleteRecords_c32807e97c5",
"deleteRecords_c32807e97c5_private",
"branch_dbf2c60aee4",
"branch_dbf2c60aee4_private",
"updateRecords_7ed2a172c32",
"updateRecords_7ed2a172c32_private",
"end",
"end_private",
"testScope",
"$blockIcon$exclusiveSplit_ff2c11d0fb4",
"$inlineBlocks$exclusiveSplit_ff2c11d0fb4",
"$blockOrderIcon$branch_f2c11d0fb42",
"$blockOrderIcon$branch_2c11d0fb42c",
"$blockIcon$exclusiveSplit_88dbf2c60ae",
"$inlineBlocks$exclusiveSplit_88dbf2c60ae",
"$blockOrderIcon$branch_8dbf2c60aee",
"$blockIcon$exclusiveSplit_a59afaadc9a",
"$inlineBlocks$exclusiveSplit_a59afaadc9a",
"$blockOrderIcon$branch_59afaadc9ac",
"$blockOrderIcon$branch_9afaadc9acd",
"$blockOrderIcon$branch_dbf2c60aee4",
]
`;
@@ -0,0 +1,343 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Variable Free Layout Enable Global Scope > test get Covers 1`] = `
Map {
"start_0" => [
"base_1",
"base_2",
"end_0",
"loop_1",
"base_3",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
],
"end_0" => [],
"base_1" => [
"base_2",
"end_0",
"loop_1",
"base_3",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
],
"base_2" => [
"end_0",
],
"loop_1" => [
"base_3",
"end_0",
],
"base_in_loop_1" => [
"base_in_loop_3",
],
"base_in_loop_2" => [
"base_in_loop_3",
],
"base_in_loop_3" => [],
"base_3" => [
"end_0",
],
}
`;
exports[`Variable Free Layout Enable Global Scope > test get Covers After Init Private 1`] = `
Map {
"start_0" => [
"base_1",
"base_1_private",
"base_2",
"base_2_private",
"end_0",
"end_0_private",
"loop_1",
"loop_1_private",
"base_3",
"base_3_private",
"base_in_loop_1",
"base_in_loop_1_private",
"base_in_loop_2",
"base_in_loop_2_private",
"base_in_loop_3",
"base_in_loop_3_private",
],
"end_0" => [],
"base_1" => [
"base_2",
"base_2_private",
"end_0",
"end_0_private",
"loop_1",
"loop_1_private",
"base_3",
"base_3_private",
"base_in_loop_1",
"base_in_loop_1_private",
"base_in_loop_2",
"base_in_loop_2_private",
"base_in_loop_3",
"base_in_loop_3_private",
],
"base_2" => [
"end_0",
"end_0_private",
],
"loop_1" => [
"base_3",
"base_3_private",
"end_0",
"end_0_private",
],
"base_in_loop_1" => [
"base_in_loop_3",
"base_in_loop_3_private",
],
"base_in_loop_2" => [
"base_in_loop_3",
"base_in_loop_3_private",
],
"base_in_loop_3" => [],
"base_3" => [
"end_0",
"end_0_private",
],
}
`;
exports[`Variable Free Layout Enable Global Scope > test get Deps 1`] = `
Map {
"start_0" => [
"GlobalScope",
],
"end_0" => [
"GlobalScope",
"start_0",
"loop_1",
"base_1",
"base_3",
"base_2",
],
"base_1" => [
"GlobalScope",
"start_0",
],
"base_2" => [
"GlobalScope",
"start_0",
"base_1",
],
"loop_1" => [
"GlobalScope",
"start_0",
"base_1",
],
"base_in_loop_1" => [
"GlobalScope",
"start_0",
"base_1",
],
"base_in_loop_2" => [
"GlobalScope",
"start_0",
"base_1",
],
"base_in_loop_3" => [
"GlobalScope",
"start_0",
"base_1",
"base_in_loop_2",
"base_in_loop_1",
],
"base_3" => [
"GlobalScope",
"start_0",
"base_1",
"loop_1",
],
}
`;
exports[`Variable Free Layout Enable Global Scope > test get Deps After Init Private 1`] = `
Map {
"start_0" => [
"GlobalScope",
"start_0_private",
],
"end_0" => [
"GlobalScope",
"start_0",
"loop_1",
"base_1",
"base_3",
"base_2",
"end_0_private",
],
"base_1" => [
"GlobalScope",
"start_0",
"base_1_private",
],
"base_2" => [
"GlobalScope",
"start_0",
"base_1",
"base_2_private",
],
"loop_1" => [
"GlobalScope",
"start_0",
"base_1",
"loop_1_private",
],
"base_in_loop_1" => [
"GlobalScope",
"start_0",
"base_1",
"loop_1_private",
"base_in_loop_1_private",
],
"base_in_loop_2" => [
"GlobalScope",
"start_0",
"base_1",
"loop_1_private",
"base_in_loop_2_private",
],
"base_in_loop_3" => [
"GlobalScope",
"start_0",
"base_1",
"loop_1_private",
"base_in_loop_2",
"base_in_loop_1",
"base_in_loop_3_private",
],
"base_3" => [
"GlobalScope",
"start_0",
"base_1",
"loop_1",
"base_3_private",
],
}
`;
exports[`Variable Free Layout Enable Global Scope > test get private scope Covers 1`] = `
Map {
"start_0_private" => [
"start_0",
],
"end_0_private" => [
"end_0",
],
"base_1_private" => [
"base_1",
],
"base_2_private" => [
"base_2",
],
"loop_1_private" => [
"base_in_loop_1",
"base_in_loop_1_private",
"base_in_loop_2",
"base_in_loop_2_private",
"base_in_loop_3",
"base_in_loop_3_private",
"loop_1",
],
"base_in_loop_1_private" => [
"base_in_loop_1",
],
"base_in_loop_2_private" => [
"base_in_loop_2",
],
"base_in_loop_3_private" => [
"base_in_loop_3",
],
"base_3_private" => [
"base_3",
],
}
`;
exports[`Variable Free Layout Enable Global Scope > test get private scope Deps 1`] = `
Map {
"start_0_private" => [
"GlobalScope",
],
"end_0_private" => [
"GlobalScope",
"start_0",
"loop_1",
"base_1",
"base_3",
"base_2",
],
"base_1_private" => [
"GlobalScope",
"start_0",
],
"base_2_private" => [
"GlobalScope",
"start_0",
"base_1",
],
"loop_1_private" => [
"GlobalScope",
"start_0",
"base_1",
],
"base_in_loop_1_private" => [
"GlobalScope",
"start_0",
"base_1",
"loop_1_private",
],
"base_in_loop_2_private" => [
"GlobalScope",
"start_0",
"base_1",
"loop_1_private",
],
"base_in_loop_3_private" => [
"GlobalScope",
"start_0",
"base_1",
"loop_1_private",
"base_in_loop_2",
"base_in_loop_1",
],
"base_3_private" => [
"GlobalScope",
"start_0",
"base_1",
"loop_1",
],
}
`;
exports[`Variable Free Layout Enable Global Scope > test sort 1`] = `
[
Symbol(GlobalScope),
"testScope",
"start_0",
"end_0",
"base_1",
"base_2",
"loop_1",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
"base_3",
"start_0_private",
"end_0_private",
"base_1_private",
"base_2_private",
"loop_1_private",
"base_in_loop_1_private",
"base_in_loop_2_private",
"base_in_loop_3_private",
"base_3_private",
]
`;
@@ -0,0 +1,351 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Variable Free Layout Is Node Children Private > test get Covers 1`] = `
Map {
"start_0" => [
"base_1",
"base_2",
"end_0",
"loop_1",
"base_3",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
],
"end_0" => [],
"base_1" => [
"base_2",
"end_0",
"loop_1",
"base_3",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
],
"base_2" => [
"end_0",
],
"loop_1" => [
"base_3",
"end_0",
],
"base_in_loop_1" => [
"base_in_loop_3",
"base_3",
"end_0",
],
"base_in_loop_2" => [
"base_in_loop_3",
"base_3",
"end_0",
],
"base_in_loop_3" => [
"base_3",
"end_0",
],
"base_3" => [
"end_0",
],
}
`;
exports[`Variable Free Layout Is Node Children Private > test get Covers After Init Private 1`] = `
Map {
"start_0" => [
"base_1",
"base_1_private",
"base_2",
"base_2_private",
"end_0",
"end_0_private",
"loop_1",
"loop_1_private",
"base_3",
"base_3_private",
"base_in_loop_1",
"base_in_loop_1_private",
"base_in_loop_2",
"base_in_loop_2_private",
"base_in_loop_3",
"base_in_loop_3_private",
],
"end_0" => [],
"base_1" => [
"base_2",
"base_2_private",
"end_0",
"end_0_private",
"loop_1",
"loop_1_private",
"base_3",
"base_3_private",
"base_in_loop_1",
"base_in_loop_1_private",
"base_in_loop_2",
"base_in_loop_2_private",
"base_in_loop_3",
"base_in_loop_3_private",
],
"base_2" => [
"end_0",
"end_0_private",
],
"loop_1" => [
"base_3",
"base_3_private",
"end_0",
"end_0_private",
],
"base_in_loop_1" => [
"base_in_loop_3",
"base_in_loop_3_private",
"base_3",
"base_3_private",
"end_0",
"end_0_private",
],
"base_in_loop_2" => [
"base_in_loop_3",
"base_in_loop_3_private",
"base_3",
"base_3_private",
"end_0",
"end_0_private",
],
"base_in_loop_3" => [
"base_3",
"base_3_private",
"end_0",
"end_0_private",
],
"base_3" => [
"end_0",
"end_0_private",
],
}
`;
exports[`Variable Free Layout Is Node Children Private > test get Deps 1`] = `
Map {
"start_0" => [],
"end_0" => [
"start_0",
"loop_1",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
"base_1",
"base_3",
"base_2",
],
"base_1" => [
"start_0",
],
"base_2" => [
"start_0",
"base_1",
],
"loop_1" => [
"start_0",
"base_1",
],
"base_in_loop_1" => [
"start_0",
"base_1",
],
"base_in_loop_2" => [
"start_0",
"base_1",
],
"base_in_loop_3" => [
"start_0",
"base_1",
"base_in_loop_2",
"base_in_loop_1",
],
"base_3" => [
"start_0",
"base_1",
"loop_1",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
],
}
`;
exports[`Variable Free Layout Is Node Children Private > test get Deps After Init Private 1`] = `
Map {
"start_0" => [
"start_0_private",
],
"end_0" => [
"start_0",
"loop_1",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
"base_1",
"base_3",
"base_2",
"end_0_private",
],
"base_1" => [
"start_0",
"base_1_private",
],
"base_2" => [
"start_0",
"base_1",
"base_2_private",
],
"loop_1" => [
"start_0",
"base_1",
"loop_1_private",
],
"base_in_loop_1" => [
"start_0",
"base_1",
"loop_1_private",
"base_in_loop_1_private",
],
"base_in_loop_2" => [
"start_0",
"base_1",
"loop_1_private",
"base_in_loop_2_private",
],
"base_in_loop_3" => [
"start_0",
"base_1",
"loop_1_private",
"base_in_loop_2",
"base_in_loop_1",
"base_in_loop_3_private",
],
"base_3" => [
"start_0",
"base_1",
"loop_1",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
"base_3_private",
],
}
`;
exports[`Variable Free Layout Is Node Children Private > test get private scope Covers 1`] = `
Map {
"start_0_private" => [
"start_0",
],
"end_0_private" => [
"end_0",
],
"base_1_private" => [
"base_1",
],
"base_2_private" => [
"base_2",
],
"loop_1_private" => [
"base_in_loop_1",
"base_in_loop_1_private",
"base_in_loop_2",
"base_in_loop_2_private",
"base_in_loop_3",
"base_in_loop_3_private",
"loop_1",
],
"base_in_loop_1_private" => [
"base_in_loop_1",
],
"base_in_loop_2_private" => [
"base_in_loop_2",
],
"base_in_loop_3_private" => [
"base_in_loop_3",
],
"base_3_private" => [
"base_3",
],
}
`;
exports[`Variable Free Layout Is Node Children Private > test get private scope Deps 1`] = `
Map {
"start_0_private" => [],
"end_0_private" => [
"start_0",
"loop_1",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
"base_1",
"base_3",
"base_2",
],
"base_1_private" => [
"start_0",
],
"base_2_private" => [
"start_0",
"base_1",
],
"loop_1_private" => [
"start_0",
"base_1",
],
"base_in_loop_1_private" => [
"start_0",
"base_1",
"loop_1_private",
],
"base_in_loop_2_private" => [
"start_0",
"base_1",
"loop_1_private",
],
"base_in_loop_3_private" => [
"start_0",
"base_1",
"loop_1_private",
"base_in_loop_2",
"base_in_loop_1",
],
"base_3_private" => [
"start_0",
"base_1",
"loop_1",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
],
}
`;
exports[`Variable Free Layout Is Node Children Private > test sort 1`] = `
[
"testScope",
"start_0",
"end_0",
"base_1",
"base_2",
"loop_1",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
"base_3",
"start_0_private",
"end_0_private",
"base_1_private",
"base_2_private",
"loop_1_private",
"base_in_loop_1_private",
"base_in_loop_2_private",
"base_in_loop_3_private",
"base_3_private",
]
`;
@@ -0,0 +1,109 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Variable Free Layout transform empty > test get Covers 1`] = `
Map {
"start_0" => [],
"end_0" => [],
"base_1" => [],
"base_2" => [],
"loop_1" => [],
"base_in_loop_1" => [],
"base_in_loop_2" => [],
"base_in_loop_3" => [],
"base_3" => [],
}
`;
exports[`Variable Free Layout transform empty > test get Covers After Init Private 1`] = `
Map {
"start_0" => [],
"end_0" => [],
"base_1" => [],
"base_2" => [],
"loop_1" => [],
"base_in_loop_1" => [],
"base_in_loop_2" => [],
"base_in_loop_3" => [],
"base_3" => [],
}
`;
exports[`Variable Free Layout transform empty > test get Deps 1`] = `
Map {
"start_0" => [],
"end_0" => [],
"base_1" => [],
"base_2" => [],
"loop_1" => [],
"base_in_loop_1" => [],
"base_in_loop_2" => [],
"base_in_loop_3" => [],
"base_3" => [],
}
`;
exports[`Variable Free Layout transform empty > test get Deps After Init Private 1`] = `
Map {
"start_0" => [],
"end_0" => [],
"base_1" => [],
"base_2" => [],
"loop_1" => [],
"base_in_loop_1" => [],
"base_in_loop_2" => [],
"base_in_loop_3" => [],
"base_3" => [],
}
`;
exports[`Variable Free Layout transform empty > test get private scope Covers 1`] = `
Map {
"start_0_private" => [],
"end_0_private" => [],
"base_1_private" => [],
"base_2_private" => [],
"loop_1_private" => [],
"base_in_loop_1_private" => [],
"base_in_loop_2_private" => [],
"base_in_loop_3_private" => [],
"base_3_private" => [],
}
`;
exports[`Variable Free Layout transform empty > test get private scope Deps 1`] = `
Map {
"start_0_private" => [],
"end_0_private" => [],
"base_1_private" => [],
"base_2_private" => [],
"loop_1_private" => [],
"base_in_loop_1_private" => [],
"base_in_loop_2_private" => [],
"base_in_loop_3_private" => [],
"base_3_private" => [],
}
`;
exports[`Variable Free Layout transform empty > test sort 1`] = `
[
"testScope",
"start_0",
"end_0",
"base_1",
"base_2",
"loop_1",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
"base_3",
"start_0_private",
"end_0_private",
"base_1_private",
"base_2_private",
"loop_1_private",
"base_in_loop_1_private",
"base_in_loop_2_private",
"base_in_loop_3_private",
"base_3_private",
]
`;
@@ -0,0 +1,313 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Variable Free Layout > test get Covers 1`] = `
Map {
"start_0" => [
"base_1",
"base_2",
"end_0",
"loop_1",
"base_3",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
],
"end_0" => [],
"base_1" => [
"base_2",
"end_0",
"loop_1",
"base_3",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
],
"base_2" => [
"end_0",
],
"loop_1" => [
"base_3",
"end_0",
],
"base_in_loop_1" => [
"base_in_loop_3",
],
"base_in_loop_2" => [
"base_in_loop_3",
],
"base_in_loop_3" => [],
"base_3" => [
"end_0",
],
}
`;
exports[`Variable Free Layout > test get Covers After Init Private 1`] = `
Map {
"start_0" => [
"base_1",
"base_1_private",
"base_2",
"base_2_private",
"end_0",
"end_0_private",
"loop_1",
"loop_1_private",
"base_3",
"base_3_private",
"base_in_loop_1",
"base_in_loop_1_private",
"base_in_loop_2",
"base_in_loop_2_private",
"base_in_loop_3",
"base_in_loop_3_private",
],
"end_0" => [],
"base_1" => [
"base_2",
"base_2_private",
"end_0",
"end_0_private",
"loop_1",
"loop_1_private",
"base_3",
"base_3_private",
"base_in_loop_1",
"base_in_loop_1_private",
"base_in_loop_2",
"base_in_loop_2_private",
"base_in_loop_3",
"base_in_loop_3_private",
],
"base_2" => [
"end_0",
"end_0_private",
],
"loop_1" => [
"base_3",
"base_3_private",
"end_0",
"end_0_private",
],
"base_in_loop_1" => [
"base_in_loop_3",
"base_in_loop_3_private",
],
"base_in_loop_2" => [
"base_in_loop_3",
"base_in_loop_3_private",
],
"base_in_loop_3" => [],
"base_3" => [
"end_0",
"end_0_private",
],
}
`;
exports[`Variable Free Layout > test get Deps 1`] = `
Map {
"start_0" => [],
"end_0" => [
"start_0",
"loop_1",
"base_1",
"base_3",
"base_2",
],
"base_1" => [
"start_0",
],
"base_2" => [
"start_0",
"base_1",
],
"loop_1" => [
"start_0",
"base_1",
],
"base_in_loop_1" => [
"start_0",
"base_1",
],
"base_in_loop_2" => [
"start_0",
"base_1",
],
"base_in_loop_3" => [
"start_0",
"base_1",
"base_in_loop_2",
"base_in_loop_1",
],
"base_3" => [
"start_0",
"base_1",
"loop_1",
],
}
`;
exports[`Variable Free Layout > test get Deps After Init Private 1`] = `
Map {
"start_0" => [
"start_0_private",
],
"end_0" => [
"start_0",
"loop_1",
"base_1",
"base_3",
"base_2",
"end_0_private",
],
"base_1" => [
"start_0",
"base_1_private",
],
"base_2" => [
"start_0",
"base_1",
"base_2_private",
],
"loop_1" => [
"start_0",
"base_1",
"loop_1_private",
],
"base_in_loop_1" => [
"start_0",
"base_1",
"loop_1_private",
"base_in_loop_1_private",
],
"base_in_loop_2" => [
"start_0",
"base_1",
"loop_1_private",
"base_in_loop_2_private",
],
"base_in_loop_3" => [
"start_0",
"base_1",
"loop_1_private",
"base_in_loop_2",
"base_in_loop_1",
"base_in_loop_3_private",
],
"base_3" => [
"start_0",
"base_1",
"loop_1",
"base_3_private",
],
}
`;
exports[`Variable Free Layout > test get private scope Covers 1`] = `
Map {
"start_0_private" => [
"start_0",
],
"end_0_private" => [
"end_0",
],
"base_1_private" => [
"base_1",
],
"base_2_private" => [
"base_2",
],
"loop_1_private" => [
"base_in_loop_1",
"base_in_loop_1_private",
"base_in_loop_2",
"base_in_loop_2_private",
"base_in_loop_3",
"base_in_loop_3_private",
"loop_1",
],
"base_in_loop_1_private" => [
"base_in_loop_1",
],
"base_in_loop_2_private" => [
"base_in_loop_2",
],
"base_in_loop_3_private" => [
"base_in_loop_3",
],
"base_3_private" => [
"base_3",
],
}
`;
exports[`Variable Free Layout > test get private scope Deps 1`] = `
Map {
"start_0_private" => [],
"end_0_private" => [
"start_0",
"loop_1",
"base_1",
"base_3",
"base_2",
],
"base_1_private" => [
"start_0",
],
"base_2_private" => [
"start_0",
"base_1",
],
"loop_1_private" => [
"start_0",
"base_1",
],
"base_in_loop_1_private" => [
"start_0",
"base_1",
"loop_1_private",
],
"base_in_loop_2_private" => [
"start_0",
"base_1",
"loop_1_private",
],
"base_in_loop_3_private" => [
"start_0",
"base_1",
"loop_1_private",
"base_in_loop_2",
"base_in_loop_1",
],
"base_3_private" => [
"start_0",
"base_1",
"loop_1",
],
}
`;
exports[`Variable Free Layout > test sort 1`] = `
[
"testScope",
"start_0",
"end_0",
"base_1",
"base_2",
"loop_1",
"base_in_loop_1",
"base_in_loop_2",
"base_in_loop_3",
"base_3",
"start_0_private",
"end_0_private",
"base_1_private",
"base_2_private",
"loop_1_private",
"base_in_loop_1_private",
"base_in_loop_2_private",
"base_in_loop_3_private",
"base_3_private",
]
`;
@@ -0,0 +1,11 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { runFixedLayoutTest } from '../__mocks__/run-fixed-layout-test';
import { fixLayout1 } from '../__mocks__/fixed-layout-specs';
runFixedLayoutTest('Variable Fix Layout Enable Global Scope', fixLayout1, {
enableGlobalScope: true,
});
@@ -0,0 +1,17 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { FlowNodeScope } from '../src/types';
import { runFixedLayoutTest } from '../__mocks__/run-fixed-layout-test';
import { fixLayout1 } from '../__mocks__/fixed-layout-specs';
const filterStart = (_scope: FlowNodeScope) => !['start'].includes(_scope.meta?.node?.id || '');
const filterEnd = (_scope: FlowNodeScope) => !['end'].includes(_scope.meta?.node?.id || '');
runFixedLayoutTest('Variable Fix Layout Filter Start End', fixLayout1, {
transformCovers: (scopes) => scopes.filter(filterEnd),
transformDeps: (scopes) => scopes.filter(filterStart),
});
@@ -0,0 +1,44 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { runFixedLayoutTest } from '../__mocks__/run-fixed-layout-test';
runFixedLayoutTest(
'Variable Fix Layout Group',
{
nodes: [
{
id: 'start_0',
type: 'start',
meta: {
isStart: true,
},
blocks: [],
},
{
id: '$group_test$',
type: 'block',
blocks: [
{
id: 'node_0',
type: 'noop',
blocks: [],
},
{
id: 'node_1',
type: 'noop',
blocks: [],
},
],
},
{
id: 'end_0',
type: 'end',
blocks: [],
},
],
},
{}
);
@@ -0,0 +1,9 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { runFixedLayoutTest } from '../__mocks__/run-fixed-layout-test';
import { fixLayout1 } from '../__mocks__/fixed-layout-specs';
runFixedLayoutTest('Variable Fix Layout Without Config', fixLayout1, {});
@@ -0,0 +1,39 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { test, expect } from 'vitest';
import { ScopeChainTransformService } from '../src';
import { runFixedLayoutTest } from '../__mocks__/run-fixed-layout-test';
import { freeLayout1 } from '../__mocks__/free-layout-specs';
runFixedLayoutTest('Variable Fixed Layout transform empty', freeLayout1, {
onInit(container) {
const transformService = container.get(ScopeChainTransformService);
transformService.registerTransformer('MOCK', {
transformCovers: (scopes) => scopes,
transformDeps: (scopes) => scopes,
});
// again transformer, prevent duplicated transformerId
transformService.registerTransformer('MOCK', {
transformCovers: () => [],
transformDeps: () => [],
});
transformService.registerTransformer('MOCK', {
transformCovers: () => [],
transformDeps: () => [],
});
},
runExtraTest: (container) => {
test('check has transformer', () => {
const transformService = container.get(ScopeChainTransformService);
expect(transformService.hasTransformer('MOCK')).to.be.true;
expect(transformService.hasTransformer('VARIABLE_LAYOUT_CONFIG')).to.be.false;
expect(transformService.hasTransformer('NOT_EXIST')).to.be.false;
});
},
});
@@ -0,0 +1,13 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { runFixedLayoutTest } from '../__mocks__/run-fixed-layout-test';
import { fixLayout1 } from '../__mocks__/fixed-layout-specs';
runFixedLayoutTest('Variable Fix Layout', fixLayout1, {
isNodeChildrenPrivate: (node) =>
// 只有循环是 private
node.flowNodeType === 'loop',
});
@@ -0,0 +1,11 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { runFreeLayoutTest } from '../__mocks__/run-free-layout-test';
import { freeLayout1 } from '../__mocks__/free-layout-specs';
runFreeLayoutTest('Variable Free Layout Enable Global Scope', freeLayout1, {
enableGlobalScope: true,
});
@@ -0,0 +1,13 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { runFreeLayoutTest } from '../__mocks__/run-free-layout-test';
import { freeLayout1 } from '../__mocks__/free-layout-specs';
runFreeLayoutTest('Variable Free Layout Is Node Children Private', freeLayout1, {
isNodeChildrenPrivate(node) {
return false;
},
});
@@ -0,0 +1,22 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { test, expect } from 'vitest';
import { ScopeChainTransformService } from '../src';
import { runFreeLayoutTest } from '../__mocks__/run-free-layout-test';
import { freeLayout1 } from '../__mocks__/free-layout-specs';
runFreeLayoutTest('Variable Free Layout transform empty', freeLayout1, {
// 模拟清空作用域
transformCovers: () => [],
transformDeps: () => [],
runExtraTest: (container) => {
test('check has transformer', () => {
const transformService = container.get(ScopeChainTransformService);
expect(transformService.hasTransformer('VARIABLE_LAYOUT_CONFIG')).to.be.true;
});
},
});
@@ -0,0 +1,9 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { runFreeLayoutTest } from '../__mocks__/run-free-layout-test';
import { freeLayout1 } from '../__mocks__/free-layout-specs';
runFreeLayoutTest('Variable Free Layout', freeLayout1, {});
@@ -0,0 +1,12 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
const { defineFlatConfig } = require('@flowgram.ai/eslint-config');
module.exports = defineFlatConfig({
preset: 'web',
packageRoot: __dirname,
ignorePatterns: ['**/tests__'],
});
@@ -0,0 +1,49 @@
{
"name": "@flowgram.ai/variable-layout",
"version": "0.1.8",
"homepage": "https://flowgram.ai/",
"repository": "https://github.com/bytedance/flowgram.ai",
"license": "MIT",
"exports": {
"types": "./dist/index.d.ts",
"import": "./dist/esm/index.js",
"require": "./dist/index.js"
},
"main": "./dist/index.js",
"module": "./dist/esm/index.js",
"types": "./dist/index.d.ts",
"files": [
"dist"
],
"scripts": {
"build": "npm run build:fast -- --dts-resolve",
"build:fast": "tsup src/index.ts --format cjs,esm --sourcemap --legacy-output",
"build:watch": "npm run build:fast -- --dts-resolve",
"clean": "rimraf dist",
"test": "vitest run",
"test:cov": "vitest run --coverage",
"ts-check": "tsc --noEmit",
"watch": "npm run build:fast -- --dts-resolve --watch --ignore-watch dist"
},
"dependencies": {
"@flowgram.ai/core": "workspace:*",
"@flowgram.ai/document": "workspace:*",
"@flowgram.ai/free-layout-core": "workspace:*",
"@flowgram.ai/variable-core": "workspace:*",
"inversify": "^6.0.1",
"reflect-metadata": "~0.2.2"
},
"devDependencies": {
"@flowgram.ai/eslint-config": "workspace:*",
"@flowgram.ai/ts-config": "workspace:*",
"@vitest/coverage-v8": "^3.2.4",
"eslint": "^9.0.0",
"tsup": "^8.0.1",
"typescript": "^5.8.3",
"vitest": "^3.2.4"
},
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
}
}
@@ -0,0 +1,341 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { inject, optional } from 'inversify';
import { Scope, ScopeChain } from '@flowgram.ai/variable-core';
import { FlowDocument, type FlowVirtualTree } from '@flowgram.ai/document';
import { FlowNodeEntity } from '@flowgram.ai/document';
import { VariableChainConfig } from '../variable-chain-config';
import { FlowNodeScope, FlowNodeScopeTypeEnum, ScopeChainNode } from '../types';
import { ScopeChainTransformService } from '../services/scope-chain-transform-service';
import { GlobalScope } from '../scopes/global-scope';
import { FlowNodeVariableData } from '../flow-node-variable-data';
/**
* Scope chain implementation based on `FlowVirtualTree`.
*/
export class FixedLayoutScopeChain extends ScopeChain {
// By adding { id: string }, custom virtual nodes can be flexibly added
tree: FlowVirtualTree<ScopeChainNode> | undefined;
@inject(ScopeChainTransformService)
protected transformService: ScopeChainTransformService;
constructor(
@inject(FlowDocument)
protected flowDocument: FlowDocument,
@optional()
@inject(VariableChainConfig)
protected configs?: VariableChainConfig
) {
super();
// Bind the tree in flowDocument
this.bindTree(flowDocument.originTree);
// When originTree changes, trigger changes in dependencies
this.toDispose.push(
// REFRACTOR: onTreeChange trigger timing needs to be refined
flowDocument.originTree.onTreeChange(() => {
this.refreshAllChange();
})
);
}
/**
* Binds the scope chain to a `FlowVirtualTree`.
* @param tree The `FlowVirtualTree` to bind to.
*/
bindTree(tree: FlowVirtualTree<ScopeChainNode>): void {
this.tree = tree;
}
/**
* Gets the dependency scopes for a given scope.
* @param scope The scope to get dependencies for.
* @returns An array of dependency scopes.
*/
getDeps(scope: FlowNodeScope): FlowNodeScope[] {
if (!this.tree) {
return this.transformService.transformDeps([], { scope });
}
const node = scope.meta.node;
if (!node) {
return this.transformService.transformDeps([], { scope });
}
const deps: FlowNodeScope[] = [];
let curr: ScopeChainNode | undefined = node;
while (curr) {
const { parent, pre } = this.tree.getInfo(curr);
const currData = this.getVariableData(curr);
// Contains child nodes and is not a private scope
if (curr === node) {
// public can depend on private
if (scope.meta.type === FlowNodeScopeTypeEnum.public && currData?.private) {
deps.unshift(currData.private);
}
} else if (this.hasChildren(curr) && !this.isNodeChildrenPrivate(curr)) {
// For nodes with child elements, include the child elements in the dependency scope
deps.unshift(
...this.getAllSortedChildScope(curr, {
ignoreNodeChildrenPrivate: true,
})
);
}
// The public of the node can be accessed
if (currData && curr !== node) {
deps.unshift(currData.public);
}
// Process the previous node
if (pre) {
curr = pre;
continue;
}
// Process the parent node
if (parent) {
let currParent: ScopeChainNode | undefined = parent;
let currParentPre: ScopeChainNode | undefined = this.tree.getPre(currParent);
while (currParent) {
// Both private and public of the parent node can be accessed by child nodes
const currParentData = this.getVariableData(currParent);
if (currParentData) {
deps.unshift(...currParentData.allScopes);
}
// If the current parent has a pre node, stop searching upwards
if (currParentPre) {
break;
}
currParent = this.tree.getParent(currParent);
currParentPre = currParent ? this.tree.getPre(currParent) : undefined;
}
curr = currParentPre;
continue;
}
// If there is no next and no parent, end the loop directly
curr = undefined;
}
// If scope is GlobalScope, add globalScope to deps
const globalScope = this.variableEngine.getScopeById(GlobalScope.ID);
if (globalScope) {
deps.unshift(globalScope);
}
return this.transformService.transformDeps(deps, { scope });
}
/**
* Gets the covering scopes for a given scope.
* @param scope The scope to get covering scopes for.
* @returns An array of covering scopes.
*/
getCovers(scope: FlowNodeScope): FlowNodeScope[] {
if (!this.tree) {
return this.transformService.transformCovers([], { scope });
}
// If scope is GlobalScope, return all scopes except GlobalScope
if (GlobalScope.is(scope)) {
const scopes = this.variableEngine
.getAllScopes({ sort: true })
.filter((_scope) => !GlobalScope.is(_scope));
return this.transformService.transformCovers(scopes, { scope });
}
const node = scope.meta.node;
if (!node) {
return this.transformService.transformCovers([], { scope });
}
const covers: FlowNodeScope[] = [];
// If it is a private scope, only child nodes can access it
if (scope.meta.type === FlowNodeScopeTypeEnum.private) {
covers.push(
...this.getAllSortedChildScope(node, {
addNodePrivateScope: true,
}).filter((_scope) => _scope !== scope)
);
return this.transformService.transformCovers(covers, { scope });
}
let curr: ScopeChainNode | undefined = node;
while (curr) {
const { next, parent } = this.tree.getInfo(curr);
const currData = this.getVariableData(curr);
// For nodes with child elements, include the child elements in the covering scope
if (curr !== node) {
if (this.hasChildren(curr)) {
covers.push(
...this.getAllSortedChildScope(curr, {
addNodePrivateScope: true,
})
);
} else if (currData) {
covers.push(...currData.allScopes);
}
}
// Process the next node
if (next) {
curr = next;
continue;
}
if (parent) {
let currParent: ScopeChainNode | undefined = parent;
let currParentNext: ScopeChainNode | undefined = this.tree.getNext(currParent);
while (currParent) {
// Private scopes cannot be accessed by subsequent nodes
if (this.isNodeChildrenPrivate(currParent)) {
return this.transformService.transformCovers(covers, { scope });
}
// If the current parent has a next node, stop searching upwards
if (currParentNext) {
break;
}
currParent = this.tree.getParent(currParent);
currParentNext = currParent ? this.tree.getNext(currParent) : undefined;
}
if (!currParentNext && currParent) {
break;
}
curr = currParentNext;
continue;
}
// next 和 parent 都没有,直接结束循环
curr = undefined;
}
return this.transformService.transformCovers(covers, { scope });
}
/**
* Sorts all scopes in the scope chain.
* @returns A sorted array of all scopes.
*/
sortAll(): Scope[] {
const startNode = this.flowDocument.getAllNodes().find((_node) => _node.isStart);
if (!startNode) {
return [];
}
const startVariableData = startNode.getData(FlowNodeVariableData);
const startPublicScope = startVariableData.public;
const deps = this.getDeps(startPublicScope);
const covers = this.getCovers(startPublicScope).filter(
(_scope) => !deps.includes(_scope) && _scope !== startPublicScope
);
return [...deps, startPublicScope, ...covers];
}
/**
* Gets the `FlowNodeVariableData` for a given `ScopeChainNode`.
* @param node The `ScopeChainNode` to get data for.
* @returns The `FlowNodeVariableData` or `undefined` if not found.
*/
private getVariableData(node: ScopeChainNode): FlowNodeVariableData | undefined {
if (node.flowNodeType === 'virtualNode') {
return;
}
// TODO Nodes containing $ do not register variableData
if (node.id.startsWith('$')) {
return;
}
return (node as FlowNodeEntity).getData(FlowNodeVariableData);
}
/**
* Checks if the children of a node are private.
* @param node The node to check.
* @returns `true` if the children are private, `false` otherwise.
*/
private isNodeChildrenPrivate(node?: ScopeChainNode): boolean {
if (this.configs?.isNodeChildrenPrivate) {
return node ? this.configs?.isNodeChildrenPrivate(node) : false;
}
const isSystemNode = node?.id.startsWith('$');
// Fallback: all nodes with children (node id does not start with $) are private scopes
return !isSystemNode && this.hasChildren(node);
}
/**
* Checks if a node has children.
* @param node The node to check.
* @returns `true` if the node has children, `false` otherwise.
*/
private hasChildren(node?: ScopeChainNode): boolean {
return Boolean(this.tree && node && this.tree.getChildren(node).length > 0);
}
/**
* Gets all sorted child scopes of a node.
* @param node The node to get child scopes for.
* @param options Options for getting child scopes.
* @returns An array of sorted child scopes.
*/
private getAllSortedChildScope(
node: ScopeChainNode,
{
ignoreNodeChildrenPrivate,
addNodePrivateScope,
}: { ignoreNodeChildrenPrivate?: boolean; addNodePrivateScope?: boolean } = {}
): FlowNodeScope[] {
const scopes: FlowNodeScope[] = [];
const variableData = this.getVariableData(node);
if (variableData) {
scopes.push(variableData.public);
}
// For private scopes, the variables of child nodes are not exposed externally
// (If the parent node has public variables, they are exposed externally)
if (ignoreNodeChildrenPrivate && this.isNodeChildrenPrivate(node)) {
return scopes;
}
if (addNodePrivateScope && variableData?.private) {
scopes.push(variableData.private);
}
const children = this.tree?.getChildren(node) || [];
scopes.push(
...children
.map((child) =>
this.getAllSortedChildScope(child, { ignoreNodeChildrenPrivate, addNodePrivateScope })
)
.flat()
);
return scopes;
}
}
@@ -0,0 +1,325 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { inject, optional, postConstruct } from 'inversify';
import { Scope, ScopeChain } from '@flowgram.ai/variable-core';
import { WorkflowNodeLinesData, WorkflowNodeMeta } from '@flowgram.ai/free-layout-core';
import {
FlowNodeEntity,
FlowDocument,
FlowVirtualTree,
FlowNodeBaseType,
} from '@flowgram.ai/document';
import { EntityManager } from '@flowgram.ai/core';
import { VariableChainConfig } from '../variable-chain-config';
import { FlowNodeScope, FlowNodeScopeTypeEnum } from '../types';
import { ScopeChainTransformService } from '../services/scope-chain-transform-service';
import { GlobalScope } from '../scopes/global-scope';
import { FlowNodeVariableData } from '../flow-node-variable-data';
/**
* Scope chain implementation for free layout.
*/
export class FreeLayoutScopeChain extends ScopeChain {
@inject(EntityManager) entityManager: EntityManager;
@inject(FlowDocument)
protected flowDocument: FlowDocument;
@optional()
@inject(VariableChainConfig)
protected configs?: VariableChainConfig;
@inject(ScopeChainTransformService)
protected transformService: ScopeChainTransformService;
/**
* The virtual tree of the flow document.
*/
get tree(): FlowVirtualTree<FlowNodeEntity> {
return this.flowDocument.originTree;
}
@postConstruct()
onInit() {
this.toDispose.pushAll([
// When the line changes, the scope chain will be updated
this.entityManager.onEntityDataChange(({ entityDataType }) => {
if (entityDataType === WorkflowNodeLinesData.type) {
this.refreshAllChange();
}
}),
// Refresh the scope when the tree changes
this.tree.onTreeChange(() => {
this.refreshAllChange();
}),
]);
}
/**
* Gets all input layer nodes for a given node in the same layer, sorted by distance.
* @param node The node to get input layer nodes for.
* @returns An array of input layer nodes.
*/
protected getAllInputLayerNodes(node: FlowNodeEntity): FlowNodeEntity[] {
const currParent = this.getNodeParent(node);
const result = new Set<FlowNodeEntity>();
// add by bfs
const queue: FlowNodeEntity[] = [node];
while (queue.length) {
const curr = queue.shift()!;
(curr.lines?.inputNodes || []).forEach((inputNode) => {
if (this.getNodeParent(inputNode) === currParent) {
if (result.has(inputNode)) {
return;
}
queue.push(inputNode);
result.add(inputNode);
}
});
}
return Array.from(result).reverse();
}
/**
* Gets all output layer nodes for a given node in the same layer.
* @param curr The node to get output layer nodes for.
* @returns An array of output layer nodes.
*/
protected getAllOutputLayerNodes(curr: FlowNodeEntity): FlowNodeEntity[] {
const currParent = this.getNodeParent(curr);
return (curr.lines?.allOutputNodes || []).filter(
(_node) => this.getNodeParent(_node) === currParent
);
}
/**
* Gets the dependency scopes for a given scope.
* @param scope The scope to get dependencies for.
* @returns An array of dependency scopes.
*/
getDeps(scope: FlowNodeScope): FlowNodeScope[] {
const { node } = scope.meta || {};
if (!node) {
return this.transformService.transformDeps([], { scope });
}
const deps: FlowNodeScope[] = [];
// 1. find dep nodes
let curr: FlowNodeEntity | undefined = node;
while (curr) {
// 2. private scope of parent node can be access
const currVarData: FlowNodeVariableData = curr.getData(FlowNodeVariableData);
if (currVarData?.private && scope !== currVarData.private) {
deps.unshift(currVarData.private);
}
// 3. all public scopes of inputNodes
const allInputNodes: FlowNodeEntity[] = this.getAllInputLayerNodes(curr);
deps.unshift(
...allInputNodes
.map((_node) => [
_node.getData(FlowNodeVariableData).public,
// 4. all public children of inputNodes
...this.getAllPublicChildScopes(_node),
])
.flat()
.filter(Boolean)
);
curr = this.getNodeParent(curr);
}
// If scope is GlobalScope, add globalScope to deps
const globalScope = this.variableEngine.getScopeById(GlobalScope.ID);
if (globalScope) {
deps.unshift(globalScope);
}
const uniqDeps = Array.from(new Set(deps));
return this.transformService.transformDeps(uniqDeps, { scope });
}
/**
* Gets the covering scopes for a given scope.
* @param scope The scope to get covering scopes for.
* @returns An array of covering scopes.
*/
getCovers(scope: FlowNodeScope): FlowNodeScope[] {
// If scope is GlobalScope, return all scopes except GlobalScope
if (GlobalScope.is(scope)) {
const scopes = this.variableEngine
.getAllScopes({ sort: true })
.filter((_scope) => !GlobalScope.is(_scope));
return this.transformService.transformCovers(scopes, { scope });
}
const { node } = scope.meta || {};
if (!node) {
return this.transformService.transformCovers([], { scope });
}
const isPrivate = scope.meta.type === FlowNodeScopeTypeEnum.private;
// 1. BFS to find all covered nodes
const queue: FlowNodeEntity[] = [];
if (isPrivate) {
// private can only cover its child nodes
queue.push(...this.getNodeChildren(node));
} else {
// Otherwise, cover all nodes of its output lines
queue.push(...(this.getAllOutputLayerNodes(node) || []));
// get all parents
let parent = this.getNodeParent(node);
while (parent) {
// if childNodes of parent is private to next nodes, break
if (this.isNodeChildrenPrivate(parent)) {
break;
}
queue.push(...this.getAllOutputLayerNodes(parent));
parent = this.getNodeParent(parent);
}
}
// 2. Get the public and private scopes of all covered nodes
const scopes: FlowNodeScope[] = [];
while (queue.length) {
const _node = queue.shift()!;
const variableData: FlowNodeVariableData = _node.getData(FlowNodeVariableData);
scopes.push(...variableData.allScopes);
const children = _node && this.getNodeChildren(_node);
if (children?.length) {
queue.push(...children);
}
}
// 3. If the current scope is private, the public scope of the current node can also be covered
const currentVariableData: FlowNodeVariableData = node.getData(FlowNodeVariableData);
if (isPrivate && currentVariableData.public) {
scopes.push(currentVariableData.public);
}
const uniqScopes = Array.from(new Set(scopes));
return this.transformService.transformCovers(uniqScopes, { scope });
}
/**
* Gets the children of a node.
* @param node The node to get children for.
* @returns An array of child nodes.
*/
getNodeChildren(node: FlowNodeEntity): FlowNodeEntity[] {
if (this.configs?.getNodeChildren) {
return this.configs.getNodeChildren?.(node);
}
const nodeMeta = node.getNodeMeta<WorkflowNodeMeta>();
const subCanvas = nodeMeta.subCanvas?.(node);
if (subCanvas) {
// The sub-canvas itself does not have children
if (subCanvas.isCanvas) {
return [];
} else {
return subCanvas.canvasNode.collapsedChildren;
}
}
// In some scenarios, the parent-child relationship is expressed through connections, so it needs to be configured at the upper level
return this.tree.getChildren(node);
}
/**
* Get All children of nodes
* @param node
* @returns
*/
getAllPublicChildScopes(node: FlowNodeEntity): Scope[] {
if (this.isNodeChildrenPrivate(node)) {
return [];
}
return this.getNodeChildren(node)
.map((_node) => [
_node.getData(FlowNodeVariableData).public,
...this.getAllPublicChildScopes(_node),
])
.flat();
}
/**
* Gets the parent of a node.
* @param node The node to get the parent for.
* @returns The parent node or `undefined` if not found.
*/
getNodeParent(node: FlowNodeEntity): FlowNodeEntity | undefined {
// In some scenarios, the parent-child relationship is expressed through connections, so it needs to be configured at the upper level
if (this.configs?.getNodeParent) {
return this.configs.getNodeParent(node);
}
let parent = node.document.originTree.getParent(node);
// If currentParent is Group, get the parent of parent
while (parent?.flowNodeType === FlowNodeBaseType.GROUP) {
parent = parent.parent;
}
if (!parent) {
return parent;
}
const nodeMeta = parent.getNodeMeta<WorkflowNodeMeta>();
const subCanvas = nodeMeta.subCanvas?.(parent);
if (subCanvas?.isCanvas) {
// Get real parent node by subCanvas Configuration
return subCanvas.parentNode;
}
return parent;
}
/**
* Checks if the children of a node are private and cannot be accessed by subsequent nodes.
* @param node The node to check.
* @returns `true` if the children are private, `false` otherwise.
*/
protected isNodeChildrenPrivate(node?: FlowNodeEntity): boolean {
if (this.configs?.isNodeChildrenPrivate) {
return node ? this.configs?.isNodeChildrenPrivate(node) : false;
}
const isSystemNode = node?.id.startsWith('$');
// Except system node and group node, everything else is private
return !isSystemNode && node?.flowNodeType !== FlowNodeBaseType.GROUP;
}
/**
* Sorts all scopes in the scope chain.
* @returns An empty array, as this method is not implemented.
*/
sortAll(): Scope[] {
// Not implemented yet
console.warn('FreeLayoutScopeChain.sortAll is not implemented');
return [];
}
}
@@ -0,0 +1,214 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { BaseVariableField, VariableEngine } from '@flowgram.ai/variable-core';
import { type ASTNode, ASTNodeJSON } from '@flowgram.ai/variable-core';
import { FlowNodeEntity } from '@flowgram.ai/document';
import { EntityData } from '@flowgram.ai/core';
import { FlowNodeScope, FlowNodeScopeMeta, FlowNodeScopeTypeEnum } from './types';
interface Options {
variableEngine: VariableEngine;
}
/**
* Manages variable data for a flow node, including public and private scopes.
*/
export class FlowNodeVariableData extends EntityData {
static type: string = 'FlowNodeVariableData';
declare entity: FlowNodeEntity;
readonly variableEngine: VariableEngine;
/**
* Private variables can be accessed by public ones, but not the other way around.
*/
protected _private?: FlowNodeScope;
protected _public: FlowNodeScope;
/**
* The private scope of the node.
*/
get private() {
return this._private;
}
/**
* The public scope of the node.
*/
get public() {
return this._public;
}
/**
* Sets a variable in the public AST (Abstract Syntax Tree) with the given key and JSON value.
*
* @param key - The key under which the variable will be stored.
* @param json - The JSON value to store.
* @returns The updated AST node.
*/
public setVar(key: string, json: ASTNodeJSON): ASTNode;
/**
* Sets a variable in the public AST (Abstract Syntax Tree) with the default key 'outputs'.
*
* @param json - The JSON value to store.
* @returns The updated AST node.
*/
public setVar(json: ASTNodeJSON): ASTNode;
public setVar(arg1: string | ASTNodeJSON, arg2?: ASTNodeJSON): ASTNode {
if (typeof arg1 === 'string' && arg2 !== undefined) {
return this.public.ast.set(arg1, arg2);
}
if (typeof arg1 === 'object' && arg2 === undefined) {
return this.public.ast.set('outputs', arg1);
}
throw new Error('Invalid arguments');
}
/**
* Retrieves a variable from the public AST (Abstract Syntax Tree) by key.
*
* @param key - The key of the variable to retrieve. Defaults to 'outputs'.
* @returns The value of the variable, or undefined if not found.
*/
public getVar(key: string = 'outputs') {
return this.public.ast.get(key);
}
/**
* Clears a variable from the public AST (Abstract Syntax Tree) by key.
*
* @param key - The key of the variable to clear. Defaults to 'outputs'.
* @returns The updated AST node.
*/
public clearVar(key: string = 'outputs') {
return this.public.ast.remove(key);
}
/**
* Sets a variable in the private AST (Abstract Syntax Tree) with the given key and JSON value.
*
* @param key - The key under which the variable will be stored.
* @param json - The JSON value to store.
* @returns The updated AST node.
*/
public setPrivateVar(key: string, json: ASTNodeJSON): ASTNode;
/**
* Sets a variable in the private AST (Abstract Syntax Tree) with the default key 'outputs'.
*
* @param json - The JSON value to store.
* @returns The updated AST node.
*/
public setPrivateVar(json: ASTNodeJSON): ASTNode;
public setPrivateVar(arg1: string | ASTNodeJSON, arg2?: ASTNodeJSON): ASTNode {
if (typeof arg1 === 'string' && arg2 !== undefined) {
return this.initPrivate().ast.set(arg1, arg2);
}
if (typeof arg1 === 'object' && arg2 === undefined) {
return this.initPrivate().ast.set('outputs', arg1);
}
throw new Error('Invalid arguments');
}
/**
* Retrieves a variable from the private AST (Abstract Syntax Tree) by key.
*
* @param key - The key of the variable to retrieve. Defaults to 'outputs'.
* @returns The value of the variable, or undefined if not found.
*/
public getPrivateVar(key: string = 'outputs') {
return this.private?.ast.get(key);
}
/**
* Clears a variable from the private AST (Abstract Syntax Tree) by key.
*
* @param key - The key of the variable to clear. Defaults to 'outputs'.
* @returns The updated AST node.
*/
public clearPrivateVar(key: string = 'outputs') {
return this.private?.ast.remove(key);
}
/**
* An array containing all scopes (public and private) of the node.
*/
get allScopes(): FlowNodeScope[] {
const res = [];
if (this._public) {
res.push(this._public);
}
if (this._private) {
res.push(this._private);
}
return res;
}
getDefaultData() {
return {};
}
constructor(entity: FlowNodeEntity, readonly opts: Options) {
super(entity);
const { variableEngine } = opts || {};
this.variableEngine = variableEngine;
this._public = this.variableEngine.createScope(this.entity.id, {
node: this.entity,
type: FlowNodeScopeTypeEnum.public,
} as FlowNodeScopeMeta);
this.toDispose.push(this._public);
}
/**
* Initializes and returns the private scope for the node.
* If the private scope already exists, it returns the existing one.
* @returns The private scope of the node.
*/
initPrivate(): FlowNodeScope {
if (!this._private) {
this._private = this.variableEngine.createScope(`${this.entity.id}_private`, {
node: this.entity,
type: FlowNodeScopeTypeEnum.private,
} as FlowNodeScopeMeta);
this.variableEngine.chain.refreshAllChange();
this.toDispose.push(this._private);
}
return this._private;
}
/**
* Find a variable field by key path in the public scope by scope chain.
* @param keyPath - The key path of the variable field.
* @returns The variable field, or undefined if not found.
*/
getByKeyPath(keyPath: string[]): BaseVariableField | undefined {
return this.public.available.getByKeyPath(keyPath);
}
/**
* Find a variable field by key path in the private scope by scope chain.
* @param keyPath - The key path of the variable field.
* @returns The variable field, or undefined if not found.
*/
getByKeyPathInPrivate(keyPath: string[]): BaseVariableField | undefined {
return this.private?.available.getByKeyPath(keyPath);
}
}
@@ -0,0 +1,17 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
export { FlowNodeVariableData } from './flow-node-variable-data';
export { FreeLayoutScopeChain } from './chains/free-layout-scope-chain';
export { VariableChainConfig } from './variable-chain-config';
export { FixedLayoutScopeChain } from './chains/fixed-layout-scope-chain';
export {
type FlowNodeScopeMeta,
type FlowNodeScope,
FlowNodeScopeTypeEnum as FlowNodeScopeType,
} from './types';
export { GlobalScope, bindGlobalScope } from './scopes/global-scope';
export { ScopeChainTransformService } from './services/scope-chain-transform-service';
export { getNodeScope, getNodePrivateScope } from './utils';
@@ -0,0 +1,45 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { injectable, interfaces } from 'inversify';
import { Scope, VariableEngine } from '@flowgram.ai/variable-core';
/**
* Global Scope stores all variables that are not scoped to any node.
*
* - Variables in Global Scope can be accessed by any node.
* - Any other scope's variables can not be accessed by Global Scope.
*/
@injectable()
export class GlobalScope extends Scope {
static readonly ID = Symbol('GlobalScope');
/**
* Check if the scope is Global Scope.
* @param scope
* @returns
*/
static is(scope: Scope) {
return scope.id === GlobalScope.ID;
}
}
export const bindGlobalScope = (bind: interfaces.Bind) => {
bind(GlobalScope).toDynamicValue((ctx) => {
const variableEngine = ctx.container.get(VariableEngine);
let scope = variableEngine.getScopeById(GlobalScope.ID) as GlobalScope;
if (!scope) {
scope = variableEngine.createScope(
GlobalScope.ID,
{},
{ ScopeConstructor: GlobalScope }
) as GlobalScope;
variableEngine.chain.refreshAllChange();
}
return scope;
});
};
@@ -0,0 +1,134 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { inject, injectable, optional } from 'inversify';
import { Scope, VariableEngine } from '@flowgram.ai/variable-core';
import { FlowDocument } from '@flowgram.ai/document';
import { lazyInject } from '@flowgram.ai/core';
import { VariableChainConfig } from '../variable-chain-config';
import { FlowNodeScope } from '../types';
/**
* Context for scope transformers.
*/
export interface TransformerContext {
/**
* The current scope
*/
scope: FlowNodeScope;
/**
* The flow document.
*/
document: FlowDocument;
/**
* The variable engine.
*/
variableEngine: VariableEngine;
}
/**
* A function that transforms an array of scopes.
* @param scopes The array of scopes to transform.
* @param ctx The transformer context.
* @returns The transformed array of scopes.
*/
export type IScopeTransformer = (scopes: Scope[], ctx: TransformerContext) => Scope[];
const passthrough: IScopeTransformer = (scopes, ctx) => scopes;
/**
* A service for transforming scope chains.
*/
@injectable()
export class ScopeChainTransformService {
protected transformerMap: Map<
string,
{ transformDeps: IScopeTransformer; transformCovers: IScopeTransformer }
> = new Map();
@lazyInject(FlowDocument) document: FlowDocument;
@lazyInject(VariableEngine) variableEngine: VariableEngine;
constructor(
@optional()
@inject(VariableChainConfig)
protected configs?: VariableChainConfig
) {
if (this.configs?.transformDeps || this.configs?.transformCovers) {
this.transformerMap.set('VARIABLE_LAYOUT_CONFIG', {
transformDeps: this.configs.transformDeps || passthrough,
transformCovers: this.configs.transformCovers || passthrough,
});
}
}
/**
* check if transformer registered
* @param transformerId used to identify transformer, prevent duplicated
* @returns
*/
hasTransformer(transformerId: string) {
return this.transformerMap.has(transformerId);
}
/**
* register new transform function
* @param transformerId used to identify transformer, prevent duplicated transformer
* @param transformer The transformer to register.
*/
registerTransformer(
transformerId: string,
transformer: {
transformDeps: IScopeTransformer;
transformCovers: IScopeTransformer;
}
) {
this.transformerMap.set(transformerId, transformer);
}
/**
* Transforms the dependency scopes.
* @param scopes The array of scopes to transform.
* @param param1 The context for the transformation.
* @returns The transformed array of scopes.
*/
transformDeps(scopes: Scope[], { scope }: { scope: Scope }): Scope[] {
return Array.from(this.transformerMap.values()).reduce((scopes, transformer) => {
if (!transformer.transformDeps) {
return scopes;
}
scopes = transformer.transformDeps(scopes, {
scope,
document: this.document,
variableEngine: this.variableEngine,
});
return scopes;
}, scopes);
}
/**
* Transforms the cover scopes.
* @param scopes The array of scopes to transform.
* @param param1 The context for the transformation.
* @returns The transformed array of scopes.
*/
transformCovers(scopes: Scope[], { scope }: { scope: Scope }): Scope[] {
return Array.from(this.transformerMap.values()).reduce((scopes, transformer) => {
if (!transformer.transformCovers) {
return scopes;
}
scopes = transformer.transformCovers(scopes, {
scope,
document: this.document,
variableEngine: this.variableEngine,
});
return scopes;
}, scopes);
}
}
@@ -0,0 +1,59 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { Scope } from '@flowgram.ai/variable-core';
import { FlowNodeEntity } from '@flowgram.ai/document';
/**
* Enum for flow node scope types.
*/
export enum FlowNodeScopeTypeEnum {
/**
* Public scope.
*/
public = 'public',
/**
* Private scope.
*/
private = 'private',
}
/**
* Metadata for a flow node scope.
*/
export interface FlowNodeScopeMeta {
/**
* The flow node entity associated with the scope.
*/
node?: FlowNodeEntity;
/**
* The type of the scope.
*/
type?: FlowNodeScopeTypeEnum;
}
/**
* Represents a virtual node in the scope chain.
*/
export interface ScopeVirtualNode {
/**
* The ID of the virtual node.
*/
id: string;
/**
* The type of the flow node.
*/
flowNodeType: 'virtualNode';
}
/**
* Represents a node in the scope chain, which can be either a flow node entity or a virtual node.
*/
export type ScopeChainNode = FlowNodeEntity | ScopeVirtualNode;
/**
* Represents a scope associated with a flow node.
*/
export interface FlowNodeScope extends Scope<FlowNodeScopeMeta> {}
@@ -0,0 +1,28 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { FlowNodeEntity } from '@flowgram.ai/document';
import { FlowNodeVariableData } from './flow-node-variable-data';
/**
* Use `node.scope` instead.
* @deprecated
* @param node The flow node entity.
* @returns The public scope of the node.
*/
export function getNodeScope(node: FlowNodeEntity) {
return node.getData(FlowNodeVariableData).public;
}
/**
* Use `node.privateScope` instead.
* @deprecated
* @param node The flow node entity.
* @returns The private scope of the node.
*/
export function getNodePrivateScope(node: FlowNodeEntity) {
return node.getData(FlowNodeVariableData).initPrivate();
}
@@ -0,0 +1,41 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import { FlowNodeEntity } from '@flowgram.ai/document';
import { type ScopeChainNode } from './types';
import { IScopeTransformer } from './services/scope-chain-transform-service';
/**
* Configuration for the variable chain.
*/
export interface VariableChainConfig {
/**
* The output variables of a node's children cannot be accessed by subsequent nodes.
*
* @param node
* @returns
*/
isNodeChildrenPrivate?: (node: ScopeChainNode) => boolean;
/**
* For fixed layout scenarios: there are a large number of useless nodes between parent and child (such as inlineBlocks, etc., which need to be configured to be skipped)
* For free canvas scenarios: in some scenarios, the parent-child relationship between nodes is expressed through connections or other interactive forms, which needs to be configurable
*/
getNodeChildren?: (node: FlowNodeEntity) => FlowNodeEntity[];
getNodeParent?: (node: FlowNodeEntity) => FlowNodeEntity | undefined;
/**
* Fine-tune the dependency scope.
*/
transformDeps?: IScopeTransformer;
/**
* Fine-tune the cover scope.
*/
transformCovers?: IScopeTransformer;
}
export const VariableChainConfig = Symbol('VariableChainConfig');
@@ -0,0 +1,7 @@
{
"extends": "@flowgram.ai/ts-config/tsconfig.flow.path.json",
"compilerOptions": {
},
"include": ["src", "__tests__"],
"exclude": ["node_modules"]
}
@@ -0,0 +1,31 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
const path = require('path');
import { defineConfig } from 'vitest/config';
export default defineConfig({
build: {
commonjsOptions: {
transformMixedEsModules: true,
},
},
test: {
globals: true,
mockReset: false,
environment: 'jsdom',
setupFiles: [path.resolve(__dirname, './vitest.setup.ts')],
include: ['**/?(*.){test,spec}.?(c|m)[jt]s?(x)'],
exclude: [
'**/__mocks__/**',
'**/node_modules/**',
'**/dist/**',
'**/lib/**', // lib 编译结果忽略掉
'**/cypress/**',
'**/.{idea,git,cache,output,temp}/**',
'**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*',
],
},
});
@@ -0,0 +1,6 @@
/**
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
* SPDX-License-Identifier: MIT
*/
import 'reflect-metadata';