@nocobase/plugin-flow-engine 3.0.0-alpha.6 → 3.0.0-alpha.7
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/dist/externalVersion.js +9 -9
- package/dist/node_modules/@ant-design/icons-svg/package.json +1 -1
- package/dist/node_modules/acorn/package.json +1 -1
- package/dist/node_modules/acorn-jsx/package.json +1 -1
- package/dist/node_modules/acorn-walk/package.json +1 -1
- package/dist/node_modules/ses/package.json +1 -1
- package/dist/node_modules/zod/package.json +1 -1
- package/dist/server/flow-surfaces/builder.js +5 -0
- package/dist/server/flow-surfaces/catalog.js +27 -8
- package/dist/server/flow-surfaces/configure-options.js +17 -1
- package/dist/server/flow-surfaces/service-utils.d.ts +1 -0
- package/dist/server/flow-surfaces/service-utils.js +17 -0
- package/dist/server/flow-surfaces/service.js +9 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.js +7 -0
- package/dist/server/plugin.d.ts +11 -0
- package/dist/server/plugin.js +85 -3
- package/dist/server/repository.d.ts +8 -0
- package/dist/server/repository.js +29 -0
- package/dist/server/template/context-keys.d.ts +14 -0
- package/dist/server/template/context-keys.js +86 -0
- package/dist/server/template/contexts.d.ts +5 -8
- package/dist/server/template/contexts.js +43 -51
- package/dist/server/template/resolver.d.ts +5 -13
- package/dist/server/template/resolver.js +188 -257
- package/dist/server/template/variable-expression.d.ts +72 -0
- package/dist/server/template/variable-expression.js +597 -0
- package/dist/server/variables/allow-list.d.ts +48 -0
- package/dist/server/variables/allow-list.js +374 -0
- package/dist/server/variables/form-item-record-slot-resolvers.d.ts +10 -0
- package/dist/server/variables/form-item-record-slot-resolvers.js +280 -0
- package/dist/server/variables/record-bindings.d.ts +42 -0
- package/dist/server/variables/record-bindings.js +196 -0
- package/dist/server/variables/record-projection.d.ts +10 -0
- package/dist/server/variables/record-projection.js +140 -0
- package/dist/server/variables/record-slot-policy.d.ts +23 -0
- package/dist/server/variables/record-slot-policy.js +100 -0
- package/dist/server/variables/record-slot-resolvers.d.ts +46 -0
- package/dist/server/variables/record-slot-resolvers.js +115 -0
- package/dist/server/variables/records.d.ts +47 -1
- package/dist/server/variables/records.js +279 -5
- package/dist/server/variables/registry.d.ts +33 -10
- package/dist/server/variables/registry.js +197 -362
- package/dist/server/variables/resolve.d.ts +18 -2
- package/dist/server/variables/resolve.js +79 -13
- package/dist/server/variables/runjs-variable-dependencies.d.ts +21 -0
- package/dist/server/variables/runjs-variable-dependencies.js +313 -0
- package/dist/server/variables/utils.d.ts +3 -6
- package/dist/server/variables/utils.js +50 -111
- package/package.json +2 -2
package/dist/externalVersion.js
CHANGED
|
@@ -8,16 +8,16 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
module.exports = {
|
|
11
|
-
"@nocobase/client": "3.0.0-alpha.
|
|
11
|
+
"@nocobase/client": "3.0.0-alpha.7",
|
|
12
12
|
"lodash": "4.18.1",
|
|
13
|
-
"@nocobase/database": "3.0.0-alpha.
|
|
14
|
-
"@nocobase/data-source-manager": "3.0.0-alpha.
|
|
15
|
-
"@nocobase/resourcer": "3.0.0-alpha.
|
|
16
|
-
"@nocobase/
|
|
17
|
-
"@nocobase/
|
|
18
|
-
"@nocobase/
|
|
19
|
-
"@nocobase/actions": "3.0.0-alpha.
|
|
13
|
+
"@nocobase/database": "3.0.0-alpha.7",
|
|
14
|
+
"@nocobase/data-source-manager": "3.0.0-alpha.7",
|
|
15
|
+
"@nocobase/resourcer": "3.0.0-alpha.7",
|
|
16
|
+
"@nocobase/server": "3.0.0-alpha.7",
|
|
17
|
+
"@nocobase/utils": "3.0.0-alpha.7",
|
|
18
|
+
"@nocobase/cache": "3.0.0-alpha.7",
|
|
19
|
+
"@nocobase/actions": "3.0.0-alpha.7",
|
|
20
20
|
"sequelize": "6.35.2",
|
|
21
21
|
"@formily/json-schema": "2.3.7",
|
|
22
|
-
"@nocobase/ai": "3.0.0-alpha.
|
|
22
|
+
"@nocobase/ai": "3.0.0-alpha.7"
|
|
23
23
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@ant-design/icons-svg","version":"4.3.1","sideEffects":false,"description":"Abstract nodes for ant design icons.","contributors":["HeskeyBaozi <hezhiyu233@foxmail.com>"],"homepage":"https://github.com/ant-design/ant-design-icons/","license":"MIT","main":"lib/index.js","module":"es/index.js","files":["lib","es","inline-svg","inline-namespaced-svg"],"repository":{"type":"git","url":"git+https://github.com/ant-design/ant-design-icons.git"},"scripts":{"g":"npm run generate","generate":"cross-env NODE_ENV=production gulp --require ts-node/register/transpile-only","type-check":"tsc --noEmit","build:es":"tsc --project tsconfig.build.json --module esnext --outDir es","build:lib":"tsc --project tsconfig.build.json --module commonjs --outDir lib","build":"cross-env NODE_ENV=production && npm run build:es && npm run build:lib","test":"cross-env NODE_ENV=test && npm run test:unit","test:unit":"jest","prepublishOnly":"npm run test && npm run g && npm run build && npm run type-check && npm run digest","digest":"node scripts/digest.js"},"bugs":{"url":"https://github.com/ant-design/ant-design-icons/issues"},"devDependencies":{"@babel/core":"^7.8.6","@babel/preset-env":"^7.8.6","@babel/preset-typescript":"^7.8.3","@rgrove/parse-xml":"^2.0.2","@types/gulp":"^4.0.6","@types/gulp-concat":"^0.0.32","@types/gulp-rename":"^0.0.33","@types/jest":"^25.1.3","@types/lodash.camelcase":"^4.3.6","@types/lodash.template":"^4.4.6","@types/lodash.upperfirst":"^4.3.6","@types/node":"^13.9.3","@types/ramda":"^0.26.43","@types/rgrove__parse-xml":"^1.1.0","@types/svgo":"^1.3.1","@types/through2":"^2.0.34","@typescript-eslint/eslint-plugin":"^2.21.0","@typescript-eslint/parser":"^2.21.0","babel-jest":"^25.1.0","cross-env":"^7.0.0","del":"^5.1.0","eslint":"^7.16.0","globby":"^11.0.0","gulp":"^4.0.2","gulp-clone":"^2.0.1","gulp-concat":"^2.6.1","gulp-header":"^2.0.9","gulp-rename":"^2.0.0","jest":"^25.1.0","lodash.camelcase":"^4.3.0","lodash.template":"^4.5.0","lodash.upperfirst":"^4.3.1","ramda":"^0.27.0","svgo":"^1.3.2","through2":"^3.0.1","ts-node":"^8.6.2","typescript":"^4.0.0","vinyl":"^2.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_lastModified":"2026-08-
|
|
1
|
+
{"name":"@ant-design/icons-svg","version":"4.3.1","sideEffects":false,"description":"Abstract nodes for ant design icons.","contributors":["HeskeyBaozi <hezhiyu233@foxmail.com>"],"homepage":"https://github.com/ant-design/ant-design-icons/","license":"MIT","main":"lib/index.js","module":"es/index.js","files":["lib","es","inline-svg","inline-namespaced-svg"],"repository":{"type":"git","url":"git+https://github.com/ant-design/ant-design-icons.git"},"scripts":{"g":"npm run generate","generate":"cross-env NODE_ENV=production gulp --require ts-node/register/transpile-only","type-check":"tsc --noEmit","build:es":"tsc --project tsconfig.build.json --module esnext --outDir es","build:lib":"tsc --project tsconfig.build.json --module commonjs --outDir lib","build":"cross-env NODE_ENV=production && npm run build:es && npm run build:lib","test":"cross-env NODE_ENV=test && npm run test:unit","test:unit":"jest","prepublishOnly":"npm run test && npm run g && npm run build && npm run type-check && npm run digest","digest":"node scripts/digest.js"},"bugs":{"url":"https://github.com/ant-design/ant-design-icons/issues"},"devDependencies":{"@babel/core":"^7.8.6","@babel/preset-env":"^7.8.6","@babel/preset-typescript":"^7.8.3","@rgrove/parse-xml":"^2.0.2","@types/gulp":"^4.0.6","@types/gulp-concat":"^0.0.32","@types/gulp-rename":"^0.0.33","@types/jest":"^25.1.3","@types/lodash.camelcase":"^4.3.6","@types/lodash.template":"^4.4.6","@types/lodash.upperfirst":"^4.3.6","@types/node":"^13.9.3","@types/ramda":"^0.26.43","@types/rgrove__parse-xml":"^1.1.0","@types/svgo":"^1.3.1","@types/through2":"^2.0.34","@typescript-eslint/eslint-plugin":"^2.21.0","@typescript-eslint/parser":"^2.21.0","babel-jest":"^25.1.0","cross-env":"^7.0.0","del":"^5.1.0","eslint":"^7.16.0","globby":"^11.0.0","gulp":"^4.0.2","gulp-clone":"^2.0.1","gulp-concat":"^2.6.1","gulp-header":"^2.0.9","gulp-rename":"^2.0.0","jest":"^25.1.0","lodash.camelcase":"^4.3.0","lodash.template":"^4.5.0","lodash.upperfirst":"^4.3.1","ramda":"^0.27.0","svgo":"^1.3.2","through2":"^3.0.1","ts-node":"^8.6.2","typescript":"^4.0.0","vinyl":"^2.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_lastModified":"2026-08-05T22:30:56.655Z"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"acorn","description":"ECMAScript parser","homepage":"https://github.com/acornjs/acorn","main":"dist/acorn.js","types":"dist/acorn.d.ts","module":"dist/acorn.mjs","exports":{".":[{"import":"./dist/acorn.mjs","require":"./dist/acorn.js","default":"./dist/acorn.js"},"./dist/acorn.js"],"./package.json":"./package.json"},"version":"8.11.2","engines":{"node":">=0.4.0"},"maintainers":[{"name":"Marijn Haverbeke","email":"marijnh@gmail.com","web":"https://marijnhaverbeke.nl"},{"name":"Ingvar Stepanyan","email":"me@rreverser.com","web":"https://rreverser.com/"},{"name":"Adrian Heine","web":"http://adrianheine.de"}],"repository":{"type":"git","url":"https://github.com/acornjs/acorn.git"},"license":"MIT","scripts":{"prepare":"cd ..; npm run build:main"},"bin":{"acorn":"./bin/acorn"},"_lastModified":"2026-08-
|
|
1
|
+
{"name":"acorn","description":"ECMAScript parser","homepage":"https://github.com/acornjs/acorn","main":"dist/acorn.js","types":"dist/acorn.d.ts","module":"dist/acorn.mjs","exports":{".":[{"import":"./dist/acorn.mjs","require":"./dist/acorn.js","default":"./dist/acorn.js"},"./dist/acorn.js"],"./package.json":"./package.json"},"version":"8.11.2","engines":{"node":">=0.4.0"},"maintainers":[{"name":"Marijn Haverbeke","email":"marijnh@gmail.com","web":"https://marijnhaverbeke.nl"},{"name":"Ingvar Stepanyan","email":"me@rreverser.com","web":"https://rreverser.com/"},{"name":"Adrian Heine","web":"http://adrianheine.de"}],"repository":{"type":"git","url":"https://github.com/acornjs/acorn.git"},"license":"MIT","scripts":{"prepare":"cd ..; npm run build:main"},"bin":{"acorn":"./bin/acorn"},"_lastModified":"2026-08-05T22:30:57.737Z"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"acorn-jsx","description":"Modern, fast React.js JSX parser","homepage":"https://github.com/acornjs/acorn-jsx","version":"5.3.2","maintainers":[{"name":"Ingvar Stepanyan","email":"me@rreverser.com","web":"http://rreverser.com/"}],"repository":{"type":"git","url":"https://github.com/acornjs/acorn-jsx"},"license":"MIT","scripts":{"test":"node test/run.js"},"peerDependencies":{"acorn":"^6.0.0 || ^7.0.0 || ^8.0.0"},"devDependencies":{"acorn":"^8.0.1"},"_lastModified":"2026-08-
|
|
1
|
+
{"name":"acorn-jsx","description":"Modern, fast React.js JSX parser","homepage":"https://github.com/acornjs/acorn-jsx","version":"5.3.2","maintainers":[{"name":"Ingvar Stepanyan","email":"me@rreverser.com","web":"http://rreverser.com/"}],"repository":{"type":"git","url":"https://github.com/acornjs/acorn-jsx"},"license":"MIT","scripts":{"test":"node test/run.js"},"peerDependencies":{"acorn":"^6.0.0 || ^7.0.0 || ^8.0.0"},"devDependencies":{"acorn":"^8.0.1"},"_lastModified":"2026-08-05T22:30:58.198Z"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"acorn-walk","description":"ECMAScript (ESTree) AST walker","homepage":"https://github.com/acornjs/acorn","main":"dist/walk.js","types":"dist/walk.d.ts","module":"dist/walk.mjs","exports":{".":[{"import":"./dist/walk.mjs","require":"./dist/walk.js","default":"./dist/walk.js"},"./dist/walk.js"],"./package.json":"./package.json"},"version":"8.3.4","engines":{"node":">=0.4.0"},"dependencies":{"acorn":"^8.11.0"},"maintainers":[{"name":"Marijn Haverbeke","email":"marijnh@gmail.com","web":"https://marijnhaverbeke.nl"},{"name":"Ingvar Stepanyan","email":"me@rreverser.com","web":"https://rreverser.com/"},{"name":"Adrian Heine","web":"http://adrianheine.de"}],"repository":{"type":"git","url":"https://github.com/acornjs/acorn.git"},"scripts":{"prepare":"cd ..; npm run build:walk"},"license":"MIT","_lastModified":"2026-08-
|
|
1
|
+
{"name":"acorn-walk","description":"ECMAScript (ESTree) AST walker","homepage":"https://github.com/acornjs/acorn","main":"dist/walk.js","types":"dist/walk.d.ts","module":"dist/walk.mjs","exports":{".":[{"import":"./dist/walk.mjs","require":"./dist/walk.js","default":"./dist/walk.js"},"./dist/walk.js"],"./package.json":"./package.json"},"version":"8.3.4","engines":{"node":">=0.4.0"},"dependencies":{"acorn":"^8.11.0"},"maintainers":[{"name":"Marijn Haverbeke","email":"marijnh@gmail.com","web":"https://marijnhaverbeke.nl"},{"name":"Ingvar Stepanyan","email":"me@rreverser.com","web":"https://rreverser.com/"},{"name":"Adrian Heine","web":"http://adrianheine.de"}],"repository":{"type":"git","url":"https://github.com/acornjs/acorn.git"},"scripts":{"prepare":"cd ..; npm run build:walk"},"license":"MIT","_lastModified":"2026-08-05T22:30:58.312Z"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"ses","version":"1.14.0","description":"Hardened JavaScript for Fearless Cooperation","keywords":["lockdown","harden","Compartment","assert","security","confinement","isolation","object capabilities","ocaps","secure execution","third-party code","prototype pollution","supply-chain attack","plugin"],"author":"Agoric","license":"Apache-2.0","homepage":"https://github.com/Agoric/SES-shim/tree/master/packages/ses#readme","repository":{"type":"git","url":"git+https://github.com/endojs/endo.git","directory":"packages/ses"},"bugs":{"url":"https://github.com/endojs/endo/issues"},"type":"module","main":"./dist/ses.cjs","module":"./index.js","unpkg":"./dist/ses.umd.js","types":"./types.d.ts","exports":{".":{"import":{"types":"./types.d.ts","xs":"./src-xs/index.js","default":"./index.js"},"require":{"types":"./dist/types.d.cts","default":"./dist/ses.cjs"}},"./lockdown":{"import":{"types":"./types.d.ts","default":"./index.js"},"require":{"types":"./dist/types.d.cts","default":"./dist/ses.cjs"}},"./hermes":{"require":{"types":"./dist/types.d.cts","default":"./dist/ses-hermes.cjs"}},"./tools.js":"./tools.js","./assert-shim.js":"./assert-shim.js","./lockdown-shim.js":{"xs":"./src-xs/lockdown-shim.js","default":"./lockdown-shim.js"},"./compartment-shim.js":{"xs":"./src-xs/compartment-shim.js","default":"./compartment-shim.js"},"./console-shim.js":"./console-shim.js","./package.json":"./package.json"},"scripts":{"build:vanilla":"node scripts/bundle.js","build:hermes":"node scripts/bundle.js hermes","build":"yarn build:vanilla && yarn build:hermes","clean":"rm -rf dist","cover":"c8 ava","demo":"python3 -m http.server","lint":"yarn lint:types && yarn lint:eslint","lint-fix":"eslint --fix .","lint:eslint":"eslint .","lint:types":"tsc","prepare":"npm run clean && npm run build","qt":"ava","test":"tsd && ava","test:hermes":"./scripts/hermes-test.sh","test:xs":"xst dist/ses.umd.js test/_lockdown-safe.js && node scripts/generate-test-xs.js && xst tmp/test-xs.js && rm -rf tmp","postpack":"git clean -fX \"*.d.ts*\" \"*.d.cts*\" \"*.d.mts*\" \"*.tsbuildinfo\""},"dependencies":{"@endo/cache-map":"^1.1.0","@endo/env-options":"^1.1.11","@endo/immutable-arraybuffer":"^1.1.2"},"devDependencies":{"@babel/generator":"^7.26.3","@babel/parser":"~7.26.2","@babel/traverse":"~7.25.9","@babel/types":"~7.26.0","@endo/compartment-mapper":"^1.6.3","@endo/module-source":"^1.3.3","@endo/test262-runner":"^0.1.48","@types/babel__traverse":"^7.20.5","ava":"^6.1.3","babel-eslint":"^10.1.0","c8":"^7.14.0","core-js":"^3.31.0","eslint":"^8.57.1","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^9.1.0","eslint-plugin-eslint-comments":"^3.2.0","eslint-plugin-import":"^2.31.0","hermes-engine-cli":"^0.12.0","prettier":"^3.5.3","terser":"^5.16.6","tsd":"^0.31.2","typescript":"~5.8.3"},"files":["./*.d.ts","./*.js","./*.map","LICENSE*","SECURITY*","dist","lib","src","tools"],"publishConfig":{"access":"public"},"eslintConfig":{"extends":["plugin:@endo/ses"]},"ava":{"files":["test/**/*.test.*"],"timeout":"2m"},"typeCoverage":{"atLeast":81.17},"gitHead":"9815aea9541f241389d2135c6097a7442bdffa17","_lastModified":"2026-08-
|
|
1
|
+
{"name":"ses","version":"1.14.0","description":"Hardened JavaScript for Fearless Cooperation","keywords":["lockdown","harden","Compartment","assert","security","confinement","isolation","object capabilities","ocaps","secure execution","third-party code","prototype pollution","supply-chain attack","plugin"],"author":"Agoric","license":"Apache-2.0","homepage":"https://github.com/Agoric/SES-shim/tree/master/packages/ses#readme","repository":{"type":"git","url":"git+https://github.com/endojs/endo.git","directory":"packages/ses"},"bugs":{"url":"https://github.com/endojs/endo/issues"},"type":"module","main":"./dist/ses.cjs","module":"./index.js","unpkg":"./dist/ses.umd.js","types":"./types.d.ts","exports":{".":{"import":{"types":"./types.d.ts","xs":"./src-xs/index.js","default":"./index.js"},"require":{"types":"./dist/types.d.cts","default":"./dist/ses.cjs"}},"./lockdown":{"import":{"types":"./types.d.ts","default":"./index.js"},"require":{"types":"./dist/types.d.cts","default":"./dist/ses.cjs"}},"./hermes":{"require":{"types":"./dist/types.d.cts","default":"./dist/ses-hermes.cjs"}},"./tools.js":"./tools.js","./assert-shim.js":"./assert-shim.js","./lockdown-shim.js":{"xs":"./src-xs/lockdown-shim.js","default":"./lockdown-shim.js"},"./compartment-shim.js":{"xs":"./src-xs/compartment-shim.js","default":"./compartment-shim.js"},"./console-shim.js":"./console-shim.js","./package.json":"./package.json"},"scripts":{"build:vanilla":"node scripts/bundle.js","build:hermes":"node scripts/bundle.js hermes","build":"yarn build:vanilla && yarn build:hermes","clean":"rm -rf dist","cover":"c8 ava","demo":"python3 -m http.server","lint":"yarn lint:types && yarn lint:eslint","lint-fix":"eslint --fix .","lint:eslint":"eslint .","lint:types":"tsc","prepare":"npm run clean && npm run build","qt":"ava","test":"tsd && ava","test:hermes":"./scripts/hermes-test.sh","test:xs":"xst dist/ses.umd.js test/_lockdown-safe.js && node scripts/generate-test-xs.js && xst tmp/test-xs.js && rm -rf tmp","postpack":"git clean -fX \"*.d.ts*\" \"*.d.cts*\" \"*.d.mts*\" \"*.tsbuildinfo\""},"dependencies":{"@endo/cache-map":"^1.1.0","@endo/env-options":"^1.1.11","@endo/immutable-arraybuffer":"^1.1.2"},"devDependencies":{"@babel/generator":"^7.26.3","@babel/parser":"~7.26.2","@babel/traverse":"~7.25.9","@babel/types":"~7.26.0","@endo/compartment-mapper":"^1.6.3","@endo/module-source":"^1.3.3","@endo/test262-runner":"^0.1.48","@types/babel__traverse":"^7.20.5","ava":"^6.1.3","babel-eslint":"^10.1.0","c8":"^7.14.0","core-js":"^3.31.0","eslint":"^8.57.1","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^9.1.0","eslint-plugin-eslint-comments":"^3.2.0","eslint-plugin-import":"^2.31.0","hermes-engine-cli":"^0.12.0","prettier":"^3.5.3","terser":"^5.16.6","tsd":"^0.31.2","typescript":"~5.8.3"},"files":["./*.d.ts","./*.js","./*.map","LICENSE*","SECURITY*","dist","lib","src","tools"],"publishConfig":{"access":"public"},"eslintConfig":{"extends":["plugin:@endo/ses"]},"ava":{"files":["test/**/*.test.*"],"timeout":"2m"},"typeCoverage":{"atLeast":81.17},"gitHead":"9815aea9541f241389d2135c6097a7442bdffa17","_lastModified":"2026-08-05T22:30:57.301Z"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"zod","version":"4.3.5","type":"module","license":"MIT","author":"Colin McDonnell <zod@colinhacks.com>","description":"TypeScript-first schema declaration and validation library with static type inference","homepage":"https://zod.dev","llms":"https://zod.dev/llms.txt","llmsFull":"https://zod.dev/llms-full.txt","mcpServer":"https://mcp.inkeep.com/zod/mcp","funding":"https://github.com/sponsors/colinhacks","sideEffects":false,"files":["src","**/*.js","**/*.mjs","**/*.cjs","**/*.d.ts","**/*.d.mts","**/*.d.cts","**/package.json"],"keywords":["typescript","schema","validation","type","inference"],"main":"./index.cjs","types":"./index.d.cts","module":"./index.js","zshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./mini":"./src/mini/index.ts","./locales":"./src/locales/index.ts","./v3":"./src/v3/index.ts","./v4":"./src/v4/index.ts","./v4-mini":"./src/v4-mini/index.ts","./v4/mini":"./src/v4/mini/index.ts","./v4/core":"./src/v4/core/index.ts","./v4/locales":"./src/v4/locales/index.ts","./v4/locales/*":"./src/v4/locales/*"},"conditions":{"@zod/source":"src"}},"exports":{"./package.json":"./package.json",".":{"@zod/source":"./src/index.ts","types":"./index.d.cts","import":"./index.js","require":"./index.cjs"},"./mini":{"@zod/source":"./src/mini/index.ts","types":"./mini/index.d.cts","import":"./mini/index.js","require":"./mini/index.cjs"},"./locales":{"@zod/source":"./src/locales/index.ts","types":"./locales/index.d.cts","import":"./locales/index.js","require":"./locales/index.cjs"},"./v3":{"@zod/source":"./src/v3/index.ts","types":"./v3/index.d.cts","import":"./v3/index.js","require":"./v3/index.cjs"},"./v4":{"@zod/source":"./src/v4/index.ts","types":"./v4/index.d.cts","import":"./v4/index.js","require":"./v4/index.cjs"},"./v4-mini":{"@zod/source":"./src/v4-mini/index.ts","types":"./v4-mini/index.d.cts","import":"./v4-mini/index.js","require":"./v4-mini/index.cjs"},"./v4/mini":{"@zod/source":"./src/v4/mini/index.ts","types":"./v4/mini/index.d.cts","import":"./v4/mini/index.js","require":"./v4/mini/index.cjs"},"./v4/core":{"@zod/source":"./src/v4/core/index.ts","types":"./v4/core/index.d.cts","import":"./v4/core/index.js","require":"./v4/core/index.cjs"},"./v4/locales":{"@zod/source":"./src/v4/locales/index.ts","types":"./v4/locales/index.d.cts","import":"./v4/locales/index.js","require":"./v4/locales/index.cjs"},"./v4/locales/*":{"@zod/source":"./src/v4/locales/*","types":"./v4/locales/*","import":"./v4/locales/*","require":"./v4/locales/*"}},"repository":{"type":"git","url":"git+https://github.com/colinhacks/zod.git"},"bugs":{"url":"https://github.com/colinhacks/zod/issues"},"support":{"backing":{"npm-funding":true}},"scripts":{"clean":"git clean -xdf . -e node_modules","build":"zshy --project tsconfig.build.json","postbuild":"tsx ../../scripts/write-stub-package-jsons.ts && pnpm biome check --write .","test:watch":"pnpm vitest","test":"pnpm vitest run","prepublishOnly":"tsx ../../scripts/check-versions.ts"},"_lastModified":"2026-08-
|
|
1
|
+
{"name":"zod","version":"4.3.5","type":"module","license":"MIT","author":"Colin McDonnell <zod@colinhacks.com>","description":"TypeScript-first schema declaration and validation library with static type inference","homepage":"https://zod.dev","llms":"https://zod.dev/llms.txt","llmsFull":"https://zod.dev/llms-full.txt","mcpServer":"https://mcp.inkeep.com/zod/mcp","funding":"https://github.com/sponsors/colinhacks","sideEffects":false,"files":["src","**/*.js","**/*.mjs","**/*.cjs","**/*.d.ts","**/*.d.mts","**/*.d.cts","**/package.json"],"keywords":["typescript","schema","validation","type","inference"],"main":"./index.cjs","types":"./index.d.cts","module":"./index.js","zshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./mini":"./src/mini/index.ts","./locales":"./src/locales/index.ts","./v3":"./src/v3/index.ts","./v4":"./src/v4/index.ts","./v4-mini":"./src/v4-mini/index.ts","./v4/mini":"./src/v4/mini/index.ts","./v4/core":"./src/v4/core/index.ts","./v4/locales":"./src/v4/locales/index.ts","./v4/locales/*":"./src/v4/locales/*"},"conditions":{"@zod/source":"src"}},"exports":{"./package.json":"./package.json",".":{"@zod/source":"./src/index.ts","types":"./index.d.cts","import":"./index.js","require":"./index.cjs"},"./mini":{"@zod/source":"./src/mini/index.ts","types":"./mini/index.d.cts","import":"./mini/index.js","require":"./mini/index.cjs"},"./locales":{"@zod/source":"./src/locales/index.ts","types":"./locales/index.d.cts","import":"./locales/index.js","require":"./locales/index.cjs"},"./v3":{"@zod/source":"./src/v3/index.ts","types":"./v3/index.d.cts","import":"./v3/index.js","require":"./v3/index.cjs"},"./v4":{"@zod/source":"./src/v4/index.ts","types":"./v4/index.d.cts","import":"./v4/index.js","require":"./v4/index.cjs"},"./v4-mini":{"@zod/source":"./src/v4-mini/index.ts","types":"./v4-mini/index.d.cts","import":"./v4-mini/index.js","require":"./v4-mini/index.cjs"},"./v4/mini":{"@zod/source":"./src/v4/mini/index.ts","types":"./v4/mini/index.d.cts","import":"./v4/mini/index.js","require":"./v4/mini/index.cjs"},"./v4/core":{"@zod/source":"./src/v4/core/index.ts","types":"./v4/core/index.d.cts","import":"./v4/core/index.js","require":"./v4/core/index.cjs"},"./v4/locales":{"@zod/source":"./src/v4/locales/index.ts","types":"./v4/locales/index.d.cts","import":"./v4/locales/index.js","require":"./v4/locales/index.cjs"},"./v4/locales/*":{"@zod/source":"./src/v4/locales/*","types":"./v4/locales/*","import":"./v4/locales/*","require":"./v4/locales/*"}},"repository":{"type":"git","url":"git+https://github.com/colinhacks/zod.git"},"bugs":{"url":"https://github.com/colinhacks/zod/issues"},"support":{"backing":{"npm-funding":true}},"scripts":{"clean":"git clean -xdf . -e node_modules","build":"zshy --project tsconfig.build.json","postbuild":"tsx ../../scripts/write-stub-package-jsons.ts && pnpm biome check --write .","test:watch":"pnpm vitest","test":"pnpm vitest run","prepublishOnly":"tsx ../../scripts/check-versions.ts"},"_lastModified":"2026-08-05T22:30:59.486Z"}
|
|
@@ -898,6 +898,11 @@ function buildActionDefaults(options) {
|
|
|
898
898
|
},
|
|
899
899
|
assignFieldValues: {
|
|
900
900
|
assignedValues: {}
|
|
901
|
+
},
|
|
902
|
+
afterSuccess: {
|
|
903
|
+
successMessage: '{{t("Saved successfully")}}',
|
|
904
|
+
manualClose: false,
|
|
905
|
+
actionAfterSuccess: "stay"
|
|
901
906
|
}
|
|
902
907
|
};
|
|
903
908
|
stepParams.apply = {
|
|
@@ -172,6 +172,21 @@ const OPEN_VIEW_PATH_SCHEMAS = {
|
|
|
172
172
|
"openView.tryTemplate": BOOLEAN_SCHEMA
|
|
173
173
|
};
|
|
174
174
|
const CONFIRM_ALLOWED_PATHS = ["confirm.enable", "confirm.title", "confirm.content"];
|
|
175
|
+
const AFTER_SUCCESS_ALLOWED_PATHS = [
|
|
176
|
+
"afterSuccess.successMessage",
|
|
177
|
+
"afterSuccess.manualClose",
|
|
178
|
+
"afterSuccess.actionAfterSuccess",
|
|
179
|
+
"afterSuccess.redirectTo"
|
|
180
|
+
];
|
|
181
|
+
const AFTER_SUCCESS_PATH_SCHEMAS = {
|
|
182
|
+
"afterSuccess.successMessage": STRING_SCHEMA,
|
|
183
|
+
"afterSuccess.manualClose": BOOLEAN_SCHEMA,
|
|
184
|
+
"afterSuccess.actionAfterSuccess": {
|
|
185
|
+
type: "string",
|
|
186
|
+
enum: ["stay", "previous", "redirect"]
|
|
187
|
+
},
|
|
188
|
+
"afterSuccess.redirectTo": STRING_SCHEMA
|
|
189
|
+
};
|
|
175
190
|
const TABLE_COLUMN_BASE_ALLOWED_PATHS = ["title.title"];
|
|
176
191
|
const TABLE_FIELD_COLUMN_ALLOWED_PATHS = [...TABLE_COLUMN_BASE_ALLOWED_PATHS, "fieldNames.label"];
|
|
177
192
|
const FILTER_FORM_ITEM_ALLOWED_PATHS = [
|
|
@@ -1974,7 +1989,7 @@ const UPDATE_RECORD_ACTION_CONTRACT = createContract({
|
|
|
1974
1989
|
stepKeys: ["general", "linkageRules"]
|
|
1975
1990
|
},
|
|
1976
1991
|
assignSettings: {
|
|
1977
|
-
stepKeys: ["confirm", "assignFieldValues"]
|
|
1992
|
+
stepKeys: ["confirm", "assignFieldValues", "afterSuccess"]
|
|
1978
1993
|
},
|
|
1979
1994
|
apply: {
|
|
1980
1995
|
stepKeys: ["apply"]
|
|
@@ -1992,16 +2007,18 @@ UPDATE_RECORD_ACTION_CONTRACT.domains.stepParams = groupedDomain({
|
|
|
1992
2007
|
"confirm.title",
|
|
1993
2008
|
"confirm.content",
|
|
1994
2009
|
"assignFieldValues.assignedValues",
|
|
1995
|
-
"assignFieldValues.assignedValues.*"
|
|
2010
|
+
"assignFieldValues.assignedValues.*",
|
|
2011
|
+
...AFTER_SUCCESS_ALLOWED_PATHS
|
|
1996
2012
|
],
|
|
1997
2013
|
clearable: true,
|
|
1998
2014
|
mergeStrategy: "deep",
|
|
1999
|
-
eventBindingSteps: ["confirm", "assignFieldValues"],
|
|
2015
|
+
eventBindingSteps: ["confirm", "assignFieldValues", "afterSuccess"],
|
|
2000
2016
|
pathSchemas: {
|
|
2001
2017
|
"confirm.enable": BOOLEAN_SCHEMA,
|
|
2002
2018
|
"confirm.title": STRING_SCHEMA,
|
|
2003
2019
|
"confirm.content": STRING_SCHEMA,
|
|
2004
|
-
"assignFieldValues.assignedValues": OBJECT_SCHEMA
|
|
2020
|
+
"assignFieldValues.assignedValues": OBJECT_SCHEMA,
|
|
2021
|
+
...AFTER_SUCCESS_PATH_SCHEMAS
|
|
2005
2022
|
}
|
|
2006
2023
|
},
|
|
2007
2024
|
apply: {
|
|
@@ -2126,7 +2143,7 @@ const BULK_UPDATE_ACTION_CONTRACT = createContract({
|
|
|
2126
2143
|
stepKeys: ["general", "linkageRules"]
|
|
2127
2144
|
},
|
|
2128
2145
|
assignSettings: {
|
|
2129
|
-
stepKeys: ["confirm", "updateMode", "assignFieldValues"]
|
|
2146
|
+
stepKeys: ["confirm", "updateMode", "assignFieldValues", "afterSuccess"]
|
|
2130
2147
|
},
|
|
2131
2148
|
apply: {
|
|
2132
2149
|
stepKeys: ["apply"]
|
|
@@ -2142,17 +2159,19 @@ BULK_UPDATE_ACTION_CONTRACT.domains.stepParams = groupedDomain({
|
|
|
2142
2159
|
"confirm.content",
|
|
2143
2160
|
"updateMode.value",
|
|
2144
2161
|
"assignFieldValues.assignedValues",
|
|
2145
|
-
"assignFieldValues.assignedValues.*"
|
|
2162
|
+
"assignFieldValues.assignedValues.*",
|
|
2163
|
+
...AFTER_SUCCESS_ALLOWED_PATHS
|
|
2146
2164
|
],
|
|
2147
2165
|
clearable: true,
|
|
2148
2166
|
mergeStrategy: "deep",
|
|
2149
|
-
eventBindingSteps: ["confirm", "updateMode", "assignFieldValues"],
|
|
2167
|
+
eventBindingSteps: ["confirm", "updateMode", "assignFieldValues", "afterSuccess"],
|
|
2150
2168
|
pathSchemas: {
|
|
2151
2169
|
"confirm.enable": BOOLEAN_SCHEMA,
|
|
2152
2170
|
"confirm.title": STRING_SCHEMA,
|
|
2153
2171
|
"confirm.content": STRING_SCHEMA,
|
|
2154
2172
|
"updateMode.value": STRING_SCHEMA,
|
|
2155
|
-
"assignFieldValues.assignedValues": OBJECT_SCHEMA
|
|
2173
|
+
"assignFieldValues.assignedValues": OBJECT_SCHEMA,
|
|
2174
|
+
...AFTER_SUCCESS_PATH_SCHEMAS
|
|
2156
2175
|
}
|
|
2157
2176
|
},
|
|
2158
2177
|
apply: {
|
|
@@ -578,6 +578,16 @@ const ACTION_ASSIGN_OPTIONS = {
|
|
|
578
578
|
assignValues: objectOption("Bulk or single-record assigned values", { example: { status: "published" } }),
|
|
579
579
|
updateMode: stringOption("Update mode", { example: "overwrite" })
|
|
580
580
|
};
|
|
581
|
+
const ACTION_AFTER_SUCCESS_OPTIONS = {
|
|
582
|
+
afterSuccess: objectOption("Action after a successful update", {
|
|
583
|
+
example: {
|
|
584
|
+
successMessage: "Saved successfully",
|
|
585
|
+
manualClose: false,
|
|
586
|
+
actionAfterSuccess: "stay",
|
|
587
|
+
redirectTo: "/admin/example"
|
|
588
|
+
}
|
|
589
|
+
})
|
|
590
|
+
};
|
|
581
591
|
const ACTION_TRIGGER_WORKFLOWS_OPTIONS = {
|
|
582
592
|
triggerWorkflows: arrayOption("Workflow bindings for submit/update actions", {
|
|
583
593
|
example: [{ workflowKey: "workflow-key", context: "department" }]
|
|
@@ -748,11 +758,17 @@ function getActionConfigureOptionsByUse(use) {
|
|
|
748
758
|
return merged(
|
|
749
759
|
ACTION_CONFIRM_OPTIONS,
|
|
750
760
|
ACTION_ASSIGN_OPTIONS,
|
|
761
|
+
ACTION_AFTER_SUCCESS_OPTIONS,
|
|
751
762
|
ACTION_TRIGGER_WORKFLOWS_OPTIONS,
|
|
752
763
|
ACTION_LINKAGE_OPTIONS
|
|
753
764
|
);
|
|
754
765
|
case "BulkUpdateActionModel":
|
|
755
|
-
return merged(
|
|
766
|
+
return merged(
|
|
767
|
+
ACTION_CONFIRM_OPTIONS,
|
|
768
|
+
ACTION_ASSIGN_OPTIONS,
|
|
769
|
+
ACTION_AFTER_SUCCESS_OPTIONS,
|
|
770
|
+
ACTION_LINKAGE_OPTIONS
|
|
771
|
+
);
|
|
756
772
|
case "BulkEditActionModel":
|
|
757
773
|
return merged(ACTION_EDIT_MODE_OPTIONS, ACTION_LINKAGE_OPTIONS);
|
|
758
774
|
case "DuplicateActionModel":
|
|
@@ -98,6 +98,7 @@ export declare function joinRequiredFieldPaths(paths: string[]): string;
|
|
|
98
98
|
export declare function normalizeSimpleLayoutValue(layout: any): any;
|
|
99
99
|
export declare function normalizeGridCardColumns(columns: any): _.Dictionary<any>;
|
|
100
100
|
export declare function normalizeSimpleConfirm(confirm: any): _.Dictionary<any>;
|
|
101
|
+
export declare function normalizeAfterSuccess(afterSuccess: unknown): _.Dictionary<any>;
|
|
101
102
|
export declare function assertSupportedSimpleChanges(context: string, changes: Record<string, any>, allowedKeys: string[]): void;
|
|
102
103
|
export declare function hasLegacyLocatorFields(input: any, options?: {
|
|
103
104
|
allowRootUid?: boolean;
|
|
@@ -59,6 +59,7 @@ __export(service_utils_exports, {
|
|
|
59
59
|
isFieldNodeUse: () => isFieldNodeUse,
|
|
60
60
|
isMissingRequiredResourceInitValue: () => isMissingRequiredResourceInitValue,
|
|
61
61
|
joinRequiredFieldPaths: () => joinRequiredFieldPaths,
|
|
62
|
+
normalizeAfterSuccess: () => normalizeAfterSuccess,
|
|
62
63
|
normalizeBlockTitleDescription: () => normalizeBlockTitleDescription,
|
|
63
64
|
normalizeBlockTitleDescriptionValue: () => normalizeBlockTitleDescriptionValue,
|
|
64
65
|
normalizeChartCardHeightModeForWrite: () => normalizeChartCardHeightModeForWrite,
|
|
@@ -598,6 +599,21 @@ function normalizeSimpleConfirm(confirm) {
|
|
|
598
599
|
}
|
|
599
600
|
(0, import_errors.throwBadRequest)("flowSurfaces configure confirm must be a boolean or object");
|
|
600
601
|
}
|
|
602
|
+
function normalizeAfterSuccess(afterSuccess) {
|
|
603
|
+
if (!import_lodash.default.isPlainObject(afterSuccess)) {
|
|
604
|
+
(0, import_errors.throwBadRequest)("flowSurfaces configure afterSuccess must be an object");
|
|
605
|
+
}
|
|
606
|
+
const input = afterSuccess;
|
|
607
|
+
if (input.actionAfterSuccess !== void 0 && !["stay", "previous", "redirect"].includes(String(input.actionAfterSuccess))) {
|
|
608
|
+
(0, import_errors.throwBadRequest)("flowSurfaces configure afterSuccess.actionAfterSuccess must be stay, previous, or redirect");
|
|
609
|
+
}
|
|
610
|
+
return buildDefinedPayload({
|
|
611
|
+
successMessage: input.successMessage,
|
|
612
|
+
manualClose: input.manualClose,
|
|
613
|
+
actionAfterSuccess: input.actionAfterSuccess,
|
|
614
|
+
redirectTo: input.redirectTo
|
|
615
|
+
});
|
|
616
|
+
}
|
|
601
617
|
function assertSupportedSimpleChanges(context, changes, allowedKeys) {
|
|
602
618
|
const unknownKeys = Object.keys(changes).filter((key) => !allowedKeys.includes(key));
|
|
603
619
|
if (!unknownKeys.length) {
|
|
@@ -881,6 +897,7 @@ function getFieldBindingDefaultProps(containerUse, fieldUse, field) {
|
|
|
881
897
|
isFieldNodeUse,
|
|
882
898
|
isMissingRequiredResourceInitValue,
|
|
883
899
|
joinRequiredFieldPaths,
|
|
900
|
+
normalizeAfterSuccess,
|
|
884
901
|
normalizeBlockTitleDescription,
|
|
885
902
|
normalizeBlockTitleDescriptionValue,
|
|
886
903
|
normalizeChartCardHeightModeForWrite,
|
|
@@ -19872,6 +19872,15 @@ ${AI_EMPLOYEE_CURRENT_RECORD_PROMPT_VARIABLE}` : AI_EMPLOYEE_CURRENT_RECORD_PROM
|
|
|
19872
19872
|
(0, import_errors.throwBadRequest)(`flowSurfaces configure action '${use}' does not support confirm`);
|
|
19873
19873
|
}
|
|
19874
19874
|
}
|
|
19875
|
+
if ((0, import_service_utils.hasOwnDefined)(changes, "afterSuccess")) {
|
|
19876
|
+
if (!UPDATE_ASSIGN_ACTION_USES.has(use)) {
|
|
19877
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces configure action '${use}' does not support afterSuccess`);
|
|
19878
|
+
}
|
|
19879
|
+
stepParams.assignSettings = {
|
|
19880
|
+
...stepParams.assignSettings || {},
|
|
19881
|
+
afterSuccess: (0, import_service_utils.normalizeAfterSuccess)(changes.afterSuccess)
|
|
19882
|
+
};
|
|
19883
|
+
}
|
|
19875
19884
|
if ((0, import_service_utils.hasOwnDefined)(changes, "assignValues")) {
|
|
19876
19885
|
const assignValues = this.normalizeActionAssignValues("configure", changes.assignValues);
|
|
19877
19886
|
if (APPROVAL_ASSIGN_ACTION_USES.has(use)) {
|
package/dist/server/index.d.ts
CHANGED
|
@@ -9,3 +9,5 @@
|
|
|
9
9
|
export { default } from './plugin';
|
|
10
10
|
export { FlowModelRepository } from './repository';
|
|
11
11
|
export { resolveVariablesBatch, resolveVariablesTemplate } from './variables/resolve';
|
|
12
|
+
export { createNestedRecordSlotResolver, getRecordSlotResolverRegistry, RecordSlotResolverRegistry, } from './variables/record-slot-resolvers';
|
|
13
|
+
export type { RecordSlotResolved, RecordSlotResolverInput, RecordSlotResolverRegistration, RecordSlotResolverResult, } from './variables/record-slot-resolvers';
|
package/dist/server/index.js
CHANGED
|
@@ -37,7 +37,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
37
37
|
var server_exports = {};
|
|
38
38
|
__export(server_exports, {
|
|
39
39
|
FlowModelRepository: () => import_repository.FlowModelRepository,
|
|
40
|
+
RecordSlotResolverRegistry: () => import_record_slot_resolvers.RecordSlotResolverRegistry,
|
|
41
|
+
createNestedRecordSlotResolver: () => import_record_slot_resolvers.createNestedRecordSlotResolver,
|
|
40
42
|
default: () => import_plugin.default,
|
|
43
|
+
getRecordSlotResolverRegistry: () => import_record_slot_resolvers.getRecordSlotResolverRegistry,
|
|
41
44
|
resolveVariablesBatch: () => import_resolve.resolveVariablesBatch,
|
|
42
45
|
resolveVariablesTemplate: () => import_resolve.resolveVariablesTemplate
|
|
43
46
|
});
|
|
@@ -45,9 +48,13 @@ module.exports = __toCommonJS(server_exports);
|
|
|
45
48
|
var import_plugin = __toESM(require("./plugin"));
|
|
46
49
|
var import_repository = require("./repository");
|
|
47
50
|
var import_resolve = require("./variables/resolve");
|
|
51
|
+
var import_record_slot_resolvers = require("./variables/record-slot-resolvers");
|
|
48
52
|
// Annotate the CommonJS export names for ESM import in node:
|
|
49
53
|
0 && (module.exports = {
|
|
50
54
|
FlowModelRepository,
|
|
55
|
+
RecordSlotResolverRegistry,
|
|
56
|
+
createNestedRecordSlotResolver,
|
|
57
|
+
getRecordSlotResolverRegistry,
|
|
51
58
|
resolveVariablesBatch,
|
|
52
59
|
resolveVariablesTemplate
|
|
53
60
|
});
|
package/dist/server/plugin.d.ts
CHANGED
|
@@ -6,16 +6,27 @@
|
|
|
6
6
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
|
+
import type { ResourcerContext } from '@nocobase/resourcer';
|
|
9
10
|
import PluginUISchemaStorageServer from './server';
|
|
11
|
+
import { JSONValue } from './template/resolver';
|
|
10
12
|
export declare class PluginFlowEngineServer extends PluginUISchemaStorageServer {
|
|
13
|
+
private recordSlotResolverDisposers;
|
|
11
14
|
afterAdd(): Promise<void>;
|
|
12
15
|
beforeLoad(): Promise<void>;
|
|
13
16
|
getDatabaseByDataSourceKey(dataSourceKey?: string): import("@nocobase/database").default;
|
|
14
17
|
runSQLByDataSourceKey(dataSourceKey: string | undefined, sql: string, options?: Record<string, unknown>): Promise<any>;
|
|
18
|
+
resolveFlowModelVariablesTemplate(ctx: ResourcerContext, options: {
|
|
19
|
+
contextParams?: Record<string, unknown>;
|
|
20
|
+
rd?: string | number;
|
|
21
|
+
template: JSONValue;
|
|
22
|
+
}): Promise<any>;
|
|
15
23
|
load(): Promise<void>;
|
|
16
24
|
install(): Promise<void>;
|
|
17
25
|
afterEnable(): Promise<void>;
|
|
18
26
|
afterDisable(): Promise<void>;
|
|
19
27
|
remove(): Promise<void>;
|
|
28
|
+
private disposeRecordSlotResolvers;
|
|
29
|
+
private registerRecordSlotResolvers;
|
|
30
|
+
private ensureRecordSlotResolvers;
|
|
20
31
|
}
|
|
21
32
|
export default PluginFlowEngineServer;
|
package/dist/server/plugin.js
CHANGED
|
@@ -43,8 +43,13 @@ module.exports = __toCommonJS(plugin_exports);
|
|
|
43
43
|
var import_utils = require("@nocobase/utils");
|
|
44
44
|
var import_flow_surfaces = require("./flow-surfaces");
|
|
45
45
|
var import_server = __toESM(require("./server"));
|
|
46
|
+
var import_allow_list = require("./variables/allow-list");
|
|
47
|
+
var import_form_item_record_slot_resolvers = require("./variables/form-item-record-slot-resolvers");
|
|
48
|
+
var import_record_slot_policy = require("./variables/record-slot-policy");
|
|
49
|
+
var import_record_slot_resolvers = require("./variables/record-slot-resolvers");
|
|
46
50
|
var import_resolve = require("./variables/resolve");
|
|
47
51
|
class PluginFlowEngineServer extends import_server.default {
|
|
52
|
+
recordSlotResolverDisposers = [];
|
|
48
53
|
async afterAdd() {
|
|
49
54
|
}
|
|
50
55
|
async beforeLoad() {
|
|
@@ -71,8 +76,13 @@ class PluginFlowEngineServer extends import_server.default {
|
|
|
71
76
|
}
|
|
72
77
|
return await cm.db.runSQL(sql, options);
|
|
73
78
|
}
|
|
79
|
+
async resolveFlowModelVariablesTemplate(ctx, options) {
|
|
80
|
+
this.ensureRecordSlotResolvers(ctx.app);
|
|
81
|
+
return await (0, import_resolve.resolveFlowModelVariablesTemplate)(ctx, options);
|
|
82
|
+
}
|
|
74
83
|
async load() {
|
|
75
84
|
await super.load();
|
|
85
|
+
this.registerRecordSlotResolvers();
|
|
76
86
|
(0, import_flow_surfaces.registerFlowSurfacesResource)(this);
|
|
77
87
|
this.app.auditManager.registerAction("flowSql:save");
|
|
78
88
|
this.app.auditManager.registerAction("flowModels:save");
|
|
@@ -86,12 +96,55 @@ class PluginFlowEngineServer extends import_server.default {
|
|
|
86
96
|
actions: {
|
|
87
97
|
// 解析 JSON 模板中的 ctx 变量
|
|
88
98
|
resolve: async (ctx, next) => {
|
|
89
|
-
var _a, _b;
|
|
99
|
+
var _a, _b, _c;
|
|
100
|
+
this.ensureRecordSlotResolvers(ctx.app);
|
|
90
101
|
const raw = ((_b = (_a = ctx.action) == null ? void 0 : _a.params) == null ? void 0 : _b.values) ?? {};
|
|
91
102
|
const values = typeof (raw == null ? void 0 : raw.values) !== "undefined" ? raw.values : raw;
|
|
92
103
|
if (Array.isArray(values == null ? void 0 : values.batch)) {
|
|
93
104
|
const batchItems = values.batch;
|
|
94
|
-
const
|
|
105
|
+
const authorizedItems = [];
|
|
106
|
+
const passthroughResults = [];
|
|
107
|
+
for (const [index, item] of batchItems.entries()) {
|
|
108
|
+
const template2 = (item == null ? void 0 : item.template) ?? {};
|
|
109
|
+
const authorization2 = await (0, import_allow_list.authorizeVariablesResolve)(ctx, {
|
|
110
|
+
contextParams: (item == null ? void 0 : item.contextParams) || {},
|
|
111
|
+
rd: item == null ? void 0 : item.rd,
|
|
112
|
+
template: template2
|
|
113
|
+
});
|
|
114
|
+
if (authorization2.allowed) {
|
|
115
|
+
const authorizedItem = {
|
|
116
|
+
analysis: authorization2.analysis,
|
|
117
|
+
bindingPlan: authorization2.bindingPlan,
|
|
118
|
+
id: item == null ? void 0 : item.id,
|
|
119
|
+
index,
|
|
120
|
+
policy: authorization2.policy,
|
|
121
|
+
template: template2
|
|
122
|
+
};
|
|
123
|
+
authorizedItems.push(authorizedItem);
|
|
124
|
+
} else {
|
|
125
|
+
passthroughResults[index] = { id: item == null ? void 0 : item.id, data: template2 };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const resolvedItems = await (0, import_resolve.resolveAnalyzedVariablesBatch)(
|
|
129
|
+
ctx,
|
|
130
|
+
authorizedItems.map((item) => ({
|
|
131
|
+
analysis: item.analysis,
|
|
132
|
+
bindingPlan: item.bindingPlan,
|
|
133
|
+
id: item.index,
|
|
134
|
+
template: item.template,
|
|
135
|
+
policy: item.policy
|
|
136
|
+
}))
|
|
137
|
+
);
|
|
138
|
+
for (const item of resolvedItems) {
|
|
139
|
+
const index = Number(item.id);
|
|
140
|
+
passthroughResults[index] = {
|
|
141
|
+
id: (_c = batchItems[index]) == null ? void 0 : _c.id,
|
|
142
|
+
data: item.data
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const results = passthroughResults.filter(
|
|
146
|
+
(item) => !!item
|
|
147
|
+
);
|
|
95
148
|
ctx.body = { results };
|
|
96
149
|
await next();
|
|
97
150
|
return;
|
|
@@ -104,7 +157,17 @@ class PluginFlowEngineServer extends import_server.default {
|
|
|
104
157
|
}
|
|
105
158
|
const template = values.template;
|
|
106
159
|
const contextParams = (values == null ? void 0 : values.contextParams) || {};
|
|
107
|
-
|
|
160
|
+
const authorization = await (0, import_allow_list.authorizeVariablesResolve)(ctx, {
|
|
161
|
+
contextParams,
|
|
162
|
+
rd: values == null ? void 0 : values.rd,
|
|
163
|
+
template
|
|
164
|
+
});
|
|
165
|
+
ctx.body = authorization.allowed ? await (0, import_resolve.resolveAnalyzedVariablesTemplate)(
|
|
166
|
+
ctx,
|
|
167
|
+
authorization.analysis,
|
|
168
|
+
authorization.policy,
|
|
169
|
+
authorization.bindingPlan
|
|
170
|
+
) : template;
|
|
108
171
|
await next();
|
|
109
172
|
}
|
|
110
173
|
}
|
|
@@ -162,10 +225,29 @@ class PluginFlowEngineServer extends import_server.default {
|
|
|
162
225
|
async install() {
|
|
163
226
|
}
|
|
164
227
|
async afterEnable() {
|
|
228
|
+
this.registerRecordSlotResolvers();
|
|
165
229
|
}
|
|
166
230
|
async afterDisable() {
|
|
231
|
+
this.disposeRecordSlotResolvers();
|
|
167
232
|
}
|
|
168
233
|
async remove() {
|
|
234
|
+
this.disposeRecordSlotResolvers();
|
|
235
|
+
}
|
|
236
|
+
disposeRecordSlotResolvers() {
|
|
237
|
+
this.recordSlotResolverDisposers.forEach((dispose) => dispose());
|
|
238
|
+
this.recordSlotResolverDisposers = [];
|
|
239
|
+
}
|
|
240
|
+
registerRecordSlotResolvers() {
|
|
241
|
+
this.disposeRecordSlotResolvers();
|
|
242
|
+
this.ensureRecordSlotResolvers(this.app);
|
|
243
|
+
}
|
|
244
|
+
ensureRecordSlotResolvers(app) {
|
|
245
|
+
const registry = (0, import_record_slot_resolvers.getRecordSlotResolverRegistry)(app);
|
|
246
|
+
for (const resolver of [...(0, import_record_slot_policy.createBuiltInRecordSlotResolvers)(), ...(0, import_form_item_record_slot_resolvers.createFormItemRecordSlotResolvers)()]) {
|
|
247
|
+
if (!registry.has(resolver.owner, resolver.id)) {
|
|
248
|
+
this.recordSlotResolverDisposers.push(registry.register(resolver));
|
|
249
|
+
}
|
|
250
|
+
}
|
|
169
251
|
}
|
|
170
252
|
}
|
|
171
253
|
var plugin_default = PluginFlowEngineServer;
|
|
@@ -18,6 +18,13 @@ export interface GetPropertiesOptions {
|
|
|
18
18
|
readFromCache?: boolean;
|
|
19
19
|
transaction?: Transaction;
|
|
20
20
|
}
|
|
21
|
+
export interface FlowModelNodeSnapshot {
|
|
22
|
+
uid: string;
|
|
23
|
+
options: Record<string, unknown>;
|
|
24
|
+
parentId: string | null;
|
|
25
|
+
subKey: string | null;
|
|
26
|
+
async: boolean;
|
|
27
|
+
}
|
|
21
28
|
export type FlowModelAttachPosition = 'first' | 'last' | TargetPosition;
|
|
22
29
|
export interface FlowModelAttachOptions {
|
|
23
30
|
parentId: string;
|
|
@@ -132,6 +139,7 @@ export declare class FlowModelRepository extends Repository {
|
|
|
132
139
|
updateSingleNode(node: SchemaNode, options?: Transactionable): Promise<boolean>;
|
|
133
140
|
upsertModel(model: any, options?: Transactionable): Promise<string>;
|
|
134
141
|
findModelById(uid: string, options?: GetJsonSchemaOptions): Promise<any>;
|
|
142
|
+
findModelNodeSnapshotById(uid: string, options?: Transactionable): Promise<FlowModelNodeSnapshot | null>;
|
|
135
143
|
findModelByParentId(parentUid: string, options?: GetJsonSchemaOptions & {
|
|
136
144
|
subKey?: string;
|
|
137
145
|
}): Promise<any>;
|
|
@@ -1411,6 +1411,35 @@ WHERE TreeTable.depth = 1 AND TreeTable.ancestor = :ancestor and TreeTable.sort
|
|
|
1411
1411
|
const nodes = await this.findNodesById(uid2, options);
|
|
1412
1412
|
return _FlowModelRepository.nodesToModel(nodes, uid2);
|
|
1413
1413
|
}
|
|
1414
|
+
async findModelNodeSnapshotById(uid2, options) {
|
|
1415
|
+
const transaction2 = options == null ? void 0 : options.transaction;
|
|
1416
|
+
const model = await this.model.findByPk(uid2, { transaction: transaction2 });
|
|
1417
|
+
if (!model) {
|
|
1418
|
+
return null;
|
|
1419
|
+
}
|
|
1420
|
+
const paths = await this.database.getRepository("flowModelTreePath").find({
|
|
1421
|
+
filter: {
|
|
1422
|
+
descendant: uid2,
|
|
1423
|
+
depth: { $in: [0, 1] }
|
|
1424
|
+
},
|
|
1425
|
+
transaction: transaction2
|
|
1426
|
+
});
|
|
1427
|
+
const nodePath = paths.find((path) => path.get("depth") === 0);
|
|
1428
|
+
if (!nodePath) {
|
|
1429
|
+
return null;
|
|
1430
|
+
}
|
|
1431
|
+
const parentPath = paths.find((path) => path.get("depth") === 1);
|
|
1432
|
+
const nodeOptions = import_lodash.default.cloneDeep(
|
|
1433
|
+
import_lodash.default.omit(_FlowModelRepository.optionsToJson(model.get("options") || {}), "subModels")
|
|
1434
|
+
);
|
|
1435
|
+
return {
|
|
1436
|
+
uid: uid2,
|
|
1437
|
+
options: nodeOptions,
|
|
1438
|
+
parentId: parentPath ? parentPath.get("ancestor") : null,
|
|
1439
|
+
subKey: nodePath.get("type") || null,
|
|
1440
|
+
async: !!nodePath.get("async")
|
|
1441
|
+
};
|
|
1442
|
+
}
|
|
1414
1443
|
async findModelByParentId(parentUid, options) {
|
|
1415
1444
|
const r = this.database.getRepository("flowModelTreePath");
|
|
1416
1445
|
const treePaths = await r.model.findAll({
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
export declare const GLOBAL_CONTEXT_KEYS: readonly ["now", "timestamp", "env"];
|
|
10
|
+
export declare const HTTP_REQUEST_CONTEXT_KEYS: readonly ["user", "roleName", "locale", "ip", "headers", "query", "params"];
|
|
11
|
+
export declare const SERVER_CONTEXT_PROTOTYPE_KEYS: readonly ["__proto__", "prototype", "constructor", "then", "__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"];
|
|
12
|
+
export declare const SERVER_CONTEXT_INTERNAL_KEYS: readonly ["_props", "_cache", "_delegates", "_proxy", "_getOwn", "defineProperty", "delegate", "clearDelegates", "getSandboxKeys", "getSandboxValue", "createProxy"];
|
|
13
|
+
export declare const PROTECTED_SERVER_CONTEXT_KEYS: readonly ["now", "timestamp", "env", "user", "roleName", "locale", "ip", "headers", "query", "params", "__proto__", "prototype", "constructor", "then", "__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf", "_props", "_cache", "_delegates", "_proxy", "_getOwn", "defineProperty", "delegate", "clearDelegates", "getSandboxKeys", "getSandboxValue", "createProxy"];
|
|
14
|
+
export declare function isProtectedServerContextKey(key: string): boolean;
|