@flowgram-vue/variable-plugin 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
4
+ Copyright (c) 2026 Crayon
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
package/dist/index.cjs ADDED
@@ -0,0 +1,79 @@
1
+ 'use strict';
2
+
3
+ var variableLayout = require('@flowgram-vue/variable-layout');
4
+ var variableCore = require('@flowgram-vue/variable-core');
5
+ var document = require('@flowgram-vue/document');
6
+ var core = require('@flowgram-vue/core');
7
+
8
+ // src/create-variable-plugin.ts
9
+ var createVariablePlugin = core.definePluginCreator({
10
+ onBind({ bind }, opts) {
11
+ const { layout, layoutConfig, chainConfig } = opts;
12
+ bind(variableLayout.ScopeChainTransformService).toSelf().inSingletonScope();
13
+ if (layout === "free") {
14
+ bind(variableCore.ScopeChain).to(variableLayout.FreeLayoutScopeChain).inSingletonScope();
15
+ }
16
+ if (layout === "fixed") {
17
+ bind(variableCore.ScopeChain).to(variableLayout.FixedLayoutScopeChain).inSingletonScope();
18
+ }
19
+ if (chainConfig) {
20
+ bind(variableLayout.VariableChainConfig).toConstantValue(chainConfig || {});
21
+ } else if (layoutConfig) {
22
+ console.warn(`Layout Config deprecated, use chainConfig instead`);
23
+ bind(variableLayout.VariableChainConfig).toConstantValue(layoutConfig || {});
24
+ }
25
+ variableLayout.bindGlobalScope(bind);
26
+ },
27
+ onInit(ctx, opts) {
28
+ const { extendASTNodes } = opts || {};
29
+ const variableEngine = ctx.get(variableCore.VariableEngine);
30
+ const astRegisters = ctx.get(variableCore.ASTRegisters);
31
+ const entityManager = ctx.get(core.EntityManager);
32
+ const document$1 = ctx.get(document.FlowDocument);
33
+ (extendASTNodes || []).forEach((info) => {
34
+ if (Array.isArray(info)) {
35
+ const [extendASTNode, injector] = info;
36
+ astRegisters.registerAST(extendASTNode, injector ? () => injector(ctx) : void 0);
37
+ return;
38
+ }
39
+ astRegisters.registerAST(info);
40
+ });
41
+ entityManager.registerEntityData(variableLayout.FlowNodeVariableData, () => ({ variableEngine }));
42
+ document$1.registerNodeDatas(variableLayout.FlowNodeVariableData);
43
+ },
44
+ containerModules: [variableCore.VariableContainerModule]
45
+ });
46
+
47
+ Object.defineProperty(exports, "FlowNodeScopeType", {
48
+ enumerable: true,
49
+ get: function () { return variableLayout.FlowNodeScopeType; }
50
+ });
51
+ Object.defineProperty(exports, "FlowNodeVariableData", {
52
+ enumerable: true,
53
+ get: function () { return variableLayout.FlowNodeVariableData; }
54
+ });
55
+ Object.defineProperty(exports, "GlobalScope", {
56
+ enumerable: true,
57
+ get: function () { return variableLayout.GlobalScope; }
58
+ });
59
+ Object.defineProperty(exports, "ScopeChainTransformService", {
60
+ enumerable: true,
61
+ get: function () { return variableLayout.ScopeChainTransformService; }
62
+ });
63
+ Object.defineProperty(exports, "getNodePrivateScope", {
64
+ enumerable: true,
65
+ get: function () { return variableLayout.getNodePrivateScope; }
66
+ });
67
+ Object.defineProperty(exports, "getNodeScope", {
68
+ enumerable: true,
69
+ get: function () { return variableLayout.getNodeScope; }
70
+ });
71
+ exports.createVariablePlugin = createVariablePlugin;
72
+ Object.keys(variableCore).forEach(function (k) {
73
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
74
+ enumerable: true,
75
+ get: function () { return variableCore[k]; }
76
+ });
77
+ });
78
+ //# sourceMappingURL=index.cjs.map
79
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/create-variable-plugin.ts"],"names":["definePluginCreator","ScopeChainTransformService","ScopeChain","FreeLayoutScopeChain","FixedLayoutScopeChain","VariableChainConfig","bindGlobalScope","VariableEngine","ASTRegisters","EntityManager","document","FlowDocument","FlowNodeVariableData","VariableContainerModule"],"mappings":";;;;;;;;AAiDO,IAAM,uBAAuBA,wBAAA,CAA2C;AAAA,EAC7E,MAAA,CAAO,EAAE,IAAA,EAAK,EAAG,IAAA,EAAM;AACrB,IAAA,MAAM,EAAE,MAAA,EAAQ,YAAA,EAAc,WAAA,EAAY,GAAI,IAAA;AAE9C,IAAA,IAAA,CAAKC,yCAA0B,CAAA,CAAE,MAAA,EAAO,CAAE,gBAAA,EAAiB;AAE3D,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,IAAA,CAAKC,uBAAU,CAAA,CAAE,EAAA,CAAGC,mCAAoB,EAAE,gBAAA,EAAiB;AAAA,IAC7D;AACA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,IAAA,CAAKD,uBAAU,CAAA,CAAE,EAAA,CAAGE,oCAAqB,EAAE,gBAAA,EAAiB;AAAA,IAC9D;AACA,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,IAAA,CAAKC,kCAAmB,CAAA,CAAE,eAAA,CAAgB,WAAA,IAAe,EAAE,CAAA;AAAA,IAC7D,WAAW,YAAA,EAAc;AACvB,MAAA,OAAA,CAAQ,KAAK,CAAA,iDAAA,CAAmD,CAAA;AAChE,MAAA,IAAA,CAAKA,kCAAmB,CAAA,CAAE,eAAA,CAAgB,YAAA,IAAgB,EAAE,CAAA;AAAA,IAC9D;AAEA,IAAAC,8BAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA;AAAA,EACA,MAAA,CAAO,KAAK,IAAA,EAAM;AAChB,IAAA,MAAM,EAAE,cAAA,EAAe,GAAI,IAAA,IAAQ,EAAC;AAEpC,IAAA,MAAM,cAAA,GAAiB,GAAA,CAAI,GAAA,CAAoBC,2BAAc,CAAA;AAC7D,IAAA,MAAM,YAAA,GAAe,GAAA,CAAI,GAAA,CAAkBC,yBAAY,CAAA;AACvD,IAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,GAAA,CAAmBC,kBAAa,CAAA;AAC1D,IAAA,MAAMC,UAAA,GAAW,GAAA,CAAI,GAAA,CAAkBC,qBAAY,CAAA;AAKnD,IAAA,CAAC,cAAA,IAAkB,EAAC,EAAG,OAAA,CAAQ,CAAC,IAAA,KAAS;AACvC,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,QAAA,MAAM,CAAC,aAAA,EAAe,QAAQ,CAAA,GAAI,IAAA;AAElC,QAAA,YAAA,CAAa,YAAY,aAAA,EAAe,QAAA,GAAW,MAAM,QAAA,CAAS,GAAG,IAAI,MAAS,CAAA;AAElF,QAAA;AAAA,MACF;AAEA,MAAA,YAAA,CAAa,YAAY,IAAI,CAAA;AAAA,IAC/B,CAAC,CAAA;AAKD,IAAA,aAAA,CAAc,kBAAA,CAAmBC,mCAAA,EAAsB,OAAO,EAAE,gBAAe,CAAS,CAAA;AACxF,IAAAF,UAAA,CAAS,kBAAkBE,mCAAoB,CAAA;AAAA,EACjD,CAAA;AAAA,EACA,gBAAA,EAAkB,CAACC,oCAAuB;AAC5C,CAAC","file":"index.cjs","sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n FlowNodeVariableData,\n FreeLayoutScopeChain,\n FixedLayoutScopeChain,\n VariableChainConfig,\n bindGlobalScope,\n ScopeChainTransformService,\n} from '@flowgram-vue/variable-layout';\nimport {\n VariableContainerModule,\n ASTNodeRegistry,\n ASTRegisters,\n VariableEngine,\n ScopeChain,\n} from '@flowgram-vue/variable-core';\nimport { FlowDocument } from '@flowgram-vue/document';\nimport { PluginContext, definePluginCreator } from '@flowgram-vue/core';\nimport { EntityManager } from '@flowgram-vue/core';\n\n/**\n * @deprecated 请使用 @injectToAst(XXXService) declare xxxService: XXXService 实现外部依赖注入\n */\ntype Injector = (ctx: PluginContext) => Record<string, any>;\n\nexport interface VariablePluginOptions {\n enable?: boolean;\n /**\n * Custom Extends ASTNode\n */\n extendASTNodes?: (ASTNodeRegistry | [ASTNodeRegistry] | [ASTNodeRegistry, Injector])[];\n /**\n * Layout method\n */\n layout?: 'fixed' | 'free';\n /**\n * @deprecated use chainConfig instead\n */\n layoutConfig?: VariableChainConfig;\n /**\n * Configuration for scope chain\n */\n chainConfig?: VariableChainConfig;\n}\n\nexport const createVariablePlugin = definePluginCreator<VariablePluginOptions>({\n onBind({ bind }, opts) {\n const { layout, layoutConfig, chainConfig } = opts;\n\n bind(ScopeChainTransformService).toSelf().inSingletonScope();\n\n if (layout === 'free') {\n bind(ScopeChain).to(FreeLayoutScopeChain).inSingletonScope();\n }\n if (layout === 'fixed') {\n bind(ScopeChain).to(FixedLayoutScopeChain).inSingletonScope();\n }\n if (chainConfig) {\n bind(VariableChainConfig).toConstantValue(chainConfig || {});\n } else if (layoutConfig) {\n console.warn(`Layout Config deprecated, use chainConfig instead`);\n bind(VariableChainConfig).toConstantValue(layoutConfig || {});\n }\n\n bindGlobalScope(bind);\n },\n onInit(ctx, opts) {\n const { extendASTNodes } = opts || {};\n\n const variableEngine = ctx.get<VariableEngine>(VariableEngine);\n const astRegisters = ctx.get<ASTRegisters>(ASTRegisters);\n const entityManager = ctx.get<EntityManager>(EntityManager);\n const document = ctx.get<FlowDocument>(FlowDocument);\n\n /**\n * 注册扩展 AST 节点\n */\n (extendASTNodes || []).forEach((info) => {\n if (Array.isArray(info)) {\n const [extendASTNode, injector] = info;\n\n astRegisters.registerAST(extendASTNode, injector ? () => injector(ctx) : undefined);\n\n return;\n }\n\n astRegisters.registerAST(info);\n });\n\n /**\n * 扩展 FlowNodeVariableData\n */\n entityManager.registerEntityData(FlowNodeVariableData, () => ({ variableEngine } as any));\n document.registerNodeDatas(FlowNodeVariableData);\n },\n containerModules: [VariableContainerModule],\n});\n"]}
@@ -0,0 +1,33 @@
1
+ import * as _flowgram_vue_core from '@flowgram-vue/core';
2
+ import { PluginContext } from '@flowgram-vue/core';
3
+ import { VariableChainConfig } from '@flowgram-vue/variable-layout';
4
+ export { FlowNodeScope, FlowNodeScopeMeta, FlowNodeScopeType, FlowNodeVariableData, GlobalScope, ScopeChainTransformService, getNodePrivateScope, getNodeScope } from '@flowgram-vue/variable-layout';
5
+ import { ASTNodeRegistry } from '@flowgram-vue/variable-core';
6
+ export * from '@flowgram-vue/variable-core';
7
+
8
+ /**
9
+ * @deprecated 请使用 @injectToAst(XXXService) declare xxxService: XXXService 实现外部依赖注入
10
+ */
11
+ type Injector = (ctx: PluginContext) => Record<string, any>;
12
+ interface VariablePluginOptions {
13
+ enable?: boolean;
14
+ /**
15
+ * Custom Extends ASTNode
16
+ */
17
+ extendASTNodes?: (ASTNodeRegistry | [ASTNodeRegistry] | [ASTNodeRegistry, Injector])[];
18
+ /**
19
+ * Layout method
20
+ */
21
+ layout?: 'fixed' | 'free';
22
+ /**
23
+ * @deprecated use chainConfig instead
24
+ */
25
+ layoutConfig?: VariableChainConfig;
26
+ /**
27
+ * Configuration for scope chain
28
+ */
29
+ chainConfig?: VariableChainConfig;
30
+ }
31
+ declare const createVariablePlugin: _flowgram_vue_core.PluginCreator<VariablePluginOptions>;
32
+
33
+ export { type VariablePluginOptions, createVariablePlugin };
package/dist/index.js ADDED
@@ -0,0 +1,49 @@
1
+ import { FlowNodeVariableData, ScopeChainTransformService, FreeLayoutScopeChain, FixedLayoutScopeChain, VariableChainConfig, bindGlobalScope } from '@flowgram-vue/variable-layout';
2
+ export { FlowNodeScopeType, FlowNodeVariableData, GlobalScope, ScopeChainTransformService, getNodePrivateScope, getNodeScope } from '@flowgram-vue/variable-layout';
3
+ import { VariableContainerModule, VariableEngine, ASTRegisters, ScopeChain } from '@flowgram-vue/variable-core';
4
+ export * from '@flowgram-vue/variable-core';
5
+ import { FlowDocument } from '@flowgram-vue/document';
6
+ import { definePluginCreator, EntityManager } from '@flowgram-vue/core';
7
+
8
+ // src/create-variable-plugin.ts
9
+ var createVariablePlugin = definePluginCreator({
10
+ onBind({ bind }, opts) {
11
+ const { layout, layoutConfig, chainConfig } = opts;
12
+ bind(ScopeChainTransformService).toSelf().inSingletonScope();
13
+ if (layout === "free") {
14
+ bind(ScopeChain).to(FreeLayoutScopeChain).inSingletonScope();
15
+ }
16
+ if (layout === "fixed") {
17
+ bind(ScopeChain).to(FixedLayoutScopeChain).inSingletonScope();
18
+ }
19
+ if (chainConfig) {
20
+ bind(VariableChainConfig).toConstantValue(chainConfig || {});
21
+ } else if (layoutConfig) {
22
+ console.warn(`Layout Config deprecated, use chainConfig instead`);
23
+ bind(VariableChainConfig).toConstantValue(layoutConfig || {});
24
+ }
25
+ bindGlobalScope(bind);
26
+ },
27
+ onInit(ctx, opts) {
28
+ const { extendASTNodes } = opts || {};
29
+ const variableEngine = ctx.get(VariableEngine);
30
+ const astRegisters = ctx.get(ASTRegisters);
31
+ const entityManager = ctx.get(EntityManager);
32
+ const document = ctx.get(FlowDocument);
33
+ (extendASTNodes || []).forEach((info) => {
34
+ if (Array.isArray(info)) {
35
+ const [extendASTNode, injector] = info;
36
+ astRegisters.registerAST(extendASTNode, injector ? () => injector(ctx) : void 0);
37
+ return;
38
+ }
39
+ astRegisters.registerAST(info);
40
+ });
41
+ entityManager.registerEntityData(FlowNodeVariableData, () => ({ variableEngine }));
42
+ document.registerNodeDatas(FlowNodeVariableData);
43
+ },
44
+ containerModules: [VariableContainerModule]
45
+ });
46
+
47
+ export { createVariablePlugin };
48
+ //# sourceMappingURL=index.js.map
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/create-variable-plugin.ts"],"names":[],"mappings":";;;;;;;;AAiDO,IAAM,uBAAuB,mBAAA,CAA2C;AAAA,EAC7E,MAAA,CAAO,EAAE,IAAA,EAAK,EAAG,IAAA,EAAM;AACrB,IAAA,MAAM,EAAE,MAAA,EAAQ,YAAA,EAAc,WAAA,EAAY,GAAI,IAAA;AAE9C,IAAA,IAAA,CAAK,0BAA0B,CAAA,CAAE,MAAA,EAAO,CAAE,gBAAA,EAAiB;AAE3D,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,IAAA,CAAK,UAAU,CAAA,CAAE,EAAA,CAAG,oBAAoB,EAAE,gBAAA,EAAiB;AAAA,IAC7D;AACA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,IAAA,CAAK,UAAU,CAAA,CAAE,EAAA,CAAG,qBAAqB,EAAE,gBAAA,EAAiB;AAAA,IAC9D;AACA,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,IAAA,CAAK,mBAAmB,CAAA,CAAE,eAAA,CAAgB,WAAA,IAAe,EAAE,CAAA;AAAA,IAC7D,WAAW,YAAA,EAAc;AACvB,MAAA,OAAA,CAAQ,KAAK,CAAA,iDAAA,CAAmD,CAAA;AAChE,MAAA,IAAA,CAAK,mBAAmB,CAAA,CAAE,eAAA,CAAgB,YAAA,IAAgB,EAAE,CAAA;AAAA,IAC9D;AAEA,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA;AAAA,EACA,MAAA,CAAO,KAAK,IAAA,EAAM;AAChB,IAAA,MAAM,EAAE,cAAA,EAAe,GAAI,IAAA,IAAQ,EAAC;AAEpC,IAAA,MAAM,cAAA,GAAiB,GAAA,CAAI,GAAA,CAAoB,cAAc,CAAA;AAC7D,IAAA,MAAM,YAAA,GAAe,GAAA,CAAI,GAAA,CAAkB,YAAY,CAAA;AACvD,IAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,GAAA,CAAmB,aAAa,CAAA;AAC1D,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,GAAA,CAAkB,YAAY,CAAA;AAKnD,IAAA,CAAC,cAAA,IAAkB,EAAC,EAAG,OAAA,CAAQ,CAAC,IAAA,KAAS;AACvC,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,QAAA,MAAM,CAAC,aAAA,EAAe,QAAQ,CAAA,GAAI,IAAA;AAElC,QAAA,YAAA,CAAa,YAAY,aAAA,EAAe,QAAA,GAAW,MAAM,QAAA,CAAS,GAAG,IAAI,MAAS,CAAA;AAElF,QAAA;AAAA,MACF;AAEA,MAAA,YAAA,CAAa,YAAY,IAAI,CAAA;AAAA,IAC/B,CAAC,CAAA;AAKD,IAAA,aAAA,CAAc,kBAAA,CAAmB,oBAAA,EAAsB,OAAO,EAAE,gBAAe,CAAS,CAAA;AACxF,IAAA,QAAA,CAAS,kBAAkB,oBAAoB,CAAA;AAAA,EACjD,CAAA;AAAA,EACA,gBAAA,EAAkB,CAAC,uBAAuB;AAC5C,CAAC","file":"index.js","sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n FlowNodeVariableData,\n FreeLayoutScopeChain,\n FixedLayoutScopeChain,\n VariableChainConfig,\n bindGlobalScope,\n ScopeChainTransformService,\n} from '@flowgram-vue/variable-layout';\nimport {\n VariableContainerModule,\n ASTNodeRegistry,\n ASTRegisters,\n VariableEngine,\n ScopeChain,\n} from '@flowgram-vue/variable-core';\nimport { FlowDocument } from '@flowgram-vue/document';\nimport { PluginContext, definePluginCreator } from '@flowgram-vue/core';\nimport { EntityManager } from '@flowgram-vue/core';\n\n/**\n * @deprecated 请使用 @injectToAst(XXXService) declare xxxService: XXXService 实现外部依赖注入\n */\ntype Injector = (ctx: PluginContext) => Record<string, any>;\n\nexport interface VariablePluginOptions {\n enable?: boolean;\n /**\n * Custom Extends ASTNode\n */\n extendASTNodes?: (ASTNodeRegistry | [ASTNodeRegistry] | [ASTNodeRegistry, Injector])[];\n /**\n * Layout method\n */\n layout?: 'fixed' | 'free';\n /**\n * @deprecated use chainConfig instead\n */\n layoutConfig?: VariableChainConfig;\n /**\n * Configuration for scope chain\n */\n chainConfig?: VariableChainConfig;\n}\n\nexport const createVariablePlugin = definePluginCreator<VariablePluginOptions>({\n onBind({ bind }, opts) {\n const { layout, layoutConfig, chainConfig } = opts;\n\n bind(ScopeChainTransformService).toSelf().inSingletonScope();\n\n if (layout === 'free') {\n bind(ScopeChain).to(FreeLayoutScopeChain).inSingletonScope();\n }\n if (layout === 'fixed') {\n bind(ScopeChain).to(FixedLayoutScopeChain).inSingletonScope();\n }\n if (chainConfig) {\n bind(VariableChainConfig).toConstantValue(chainConfig || {});\n } else if (layoutConfig) {\n console.warn(`Layout Config deprecated, use chainConfig instead`);\n bind(VariableChainConfig).toConstantValue(layoutConfig || {});\n }\n\n bindGlobalScope(bind);\n },\n onInit(ctx, opts) {\n const { extendASTNodes } = opts || {};\n\n const variableEngine = ctx.get<VariableEngine>(VariableEngine);\n const astRegisters = ctx.get<ASTRegisters>(ASTRegisters);\n const entityManager = ctx.get<EntityManager>(EntityManager);\n const document = ctx.get<FlowDocument>(FlowDocument);\n\n /**\n * 注册扩展 AST 节点\n */\n (extendASTNodes || []).forEach((info) => {\n if (Array.isArray(info)) {\n const [extendASTNode, injector] = info;\n\n astRegisters.registerAST(extendASTNode, injector ? () => injector(ctx) : undefined);\n\n return;\n }\n\n astRegisters.registerAST(info);\n });\n\n /**\n * 扩展 FlowNodeVariableData\n */\n entityManager.registerEntityData(FlowNodeVariableData, () => ({ variableEngine } as any));\n document.registerNodeDatas(FlowNodeVariableData);\n },\n containerModules: [VariableContainerModule],\n});\n"]}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@flowgram-vue/variable-plugin",
3
+ "version": "0.2.0",
4
+ "homepage": "https://flowgram.ai/",
5
+ "repository": "https://github.com/Crayon-hua/flowgram-vue",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.cjs"
13
+ }
14
+ },
15
+ "main": "./dist/index.cjs",
16
+ "types": "./dist/index.d.ts",
17
+ "files": [
18
+ "src",
19
+ "dist"
20
+ ],
21
+ "dependencies": {
22
+ "inversify": "^6.0.1",
23
+ "reflect-metadata": "~0.2.2",
24
+ "@flowgram-vue/core": "0.2.0",
25
+ "@flowgram-vue/variable-core": "0.2.0",
26
+ "@flowgram-vue/document": "0.2.0",
27
+ "@flowgram-vue/variable-layout": "0.2.0"
28
+ },
29
+ "devDependencies": {
30
+ "@vitest/coverage-v8": "^3.2.4",
31
+ "eslint": "^9.0.0",
32
+ "tsup": "^8.0.1",
33
+ "typescript": "^5.8.3",
34
+ "vitest": "^3.2.4",
35
+ "@flowgram-vue/eslint-config": "0.2.0",
36
+ "@flowgram-vue/build-config": "0.2.0",
37
+ "@flowgram-vue/ts-config": "0.2.0"
38
+ },
39
+ "publishConfig": {
40
+ "access": "public",
41
+ "registry": "https://registry.npmjs.org/"
42
+ },
43
+ "scripts": {
44
+ "build": "flowgram-build",
45
+ "build:fast": "flowgram-build --fast",
46
+ "build:watch": "flowgram-build --watch",
47
+ "clean": "rimraf dist",
48
+ "test": "exit 0",
49
+ "test:cov": "exit 0",
50
+ "ts-check": "tsc --noEmit",
51
+ "watch": "npm run build:fast -- --dts-resolve --watch --ignore-watch dist"
52
+ },
53
+ "module": "./dist/index.js"
54
+ }
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ import {
7
+ FlowNodeVariableData,
8
+ FreeLayoutScopeChain,
9
+ FixedLayoutScopeChain,
10
+ VariableChainConfig,
11
+ bindGlobalScope,
12
+ ScopeChainTransformService,
13
+ } from '@flowgram-vue/variable-layout';
14
+ import {
15
+ VariableContainerModule,
16
+ ASTNodeRegistry,
17
+ ASTRegisters,
18
+ VariableEngine,
19
+ ScopeChain,
20
+ } from '@flowgram-vue/variable-core';
21
+ import { FlowDocument } from '@flowgram-vue/document';
22
+ import { PluginContext, definePluginCreator } from '@flowgram-vue/core';
23
+ import { EntityManager } from '@flowgram-vue/core';
24
+
25
+ /**
26
+ * @deprecated 请使用 @injectToAst(XXXService) declare xxxService: XXXService 实现外部依赖注入
27
+ */
28
+ type Injector = (ctx: PluginContext) => Record<string, any>;
29
+
30
+ export interface VariablePluginOptions {
31
+ enable?: boolean;
32
+ /**
33
+ * Custom Extends ASTNode
34
+ */
35
+ extendASTNodes?: (ASTNodeRegistry | [ASTNodeRegistry] | [ASTNodeRegistry, Injector])[];
36
+ /**
37
+ * Layout method
38
+ */
39
+ layout?: 'fixed' | 'free';
40
+ /**
41
+ * @deprecated use chainConfig instead
42
+ */
43
+ layoutConfig?: VariableChainConfig;
44
+ /**
45
+ * Configuration for scope chain
46
+ */
47
+ chainConfig?: VariableChainConfig;
48
+ }
49
+
50
+ export const createVariablePlugin = definePluginCreator<VariablePluginOptions>({
51
+ onBind({ bind }, opts) {
52
+ const { layout, layoutConfig, chainConfig } = opts;
53
+
54
+ bind(ScopeChainTransformService).toSelf().inSingletonScope();
55
+
56
+ if (layout === 'free') {
57
+ bind(ScopeChain).to(FreeLayoutScopeChain).inSingletonScope();
58
+ }
59
+ if (layout === 'fixed') {
60
+ bind(ScopeChain).to(FixedLayoutScopeChain).inSingletonScope();
61
+ }
62
+ if (chainConfig) {
63
+ bind(VariableChainConfig).toConstantValue(chainConfig || {});
64
+ } else if (layoutConfig) {
65
+ console.warn(`Layout Config deprecated, use chainConfig instead`);
66
+ bind(VariableChainConfig).toConstantValue(layoutConfig || {});
67
+ }
68
+
69
+ bindGlobalScope(bind);
70
+ },
71
+ onInit(ctx, opts) {
72
+ const { extendASTNodes } = opts || {};
73
+
74
+ const variableEngine = ctx.get<VariableEngine>(VariableEngine);
75
+ const astRegisters = ctx.get<ASTRegisters>(ASTRegisters);
76
+ const entityManager = ctx.get<EntityManager>(EntityManager);
77
+ const document = ctx.get<FlowDocument>(FlowDocument);
78
+
79
+ /**
80
+ * 注册扩展 AST 节点
81
+ */
82
+ (extendASTNodes || []).forEach((info) => {
83
+ if (Array.isArray(info)) {
84
+ const [extendASTNode, injector] = info;
85
+
86
+ astRegisters.registerAST(extendASTNode, injector ? () => injector(ctx) : undefined);
87
+
88
+ return;
89
+ }
90
+
91
+ astRegisters.registerAST(info);
92
+ });
93
+
94
+ /**
95
+ * 扩展 FlowNodeVariableData
96
+ */
97
+ entityManager.registerEntityData(FlowNodeVariableData, () => ({ variableEngine } as any));
98
+ document.registerNodeDatas(FlowNodeVariableData);
99
+ },
100
+ containerModules: [VariableContainerModule],
101
+ });
package/src/index.ts ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ export * from './create-variable-plugin';
7
+ export * from '@flowgram-vue/variable-core';
8
+ export {
9
+ FlowNodeVariableData,
10
+ GlobalScope,
11
+ ScopeChainTransformService,
12
+ getNodeScope,
13
+ getNodePrivateScope,
14
+ FlowNodeScopeType,
15
+ type FlowNodeScopeMeta,
16
+ type FlowNodeScope,
17
+ } from '@flowgram-vue/variable-layout';