@nocobase/plugin-flow-engine 3.0.0-alpha.6 → 3.0.0-alpha.8

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.
Files changed (51) hide show
  1. package/dist/externalVersion.js +9 -9
  2. package/dist/node_modules/@ant-design/icons-svg/package.json +1 -1
  3. package/dist/node_modules/acorn/package.json +1 -1
  4. package/dist/node_modules/acorn-jsx/package.json +1 -1
  5. package/dist/node_modules/acorn-walk/package.json +1 -1
  6. package/dist/node_modules/ses/package.json +1 -1
  7. package/dist/node_modules/zod/package.json +1 -1
  8. package/dist/server/flow-surfaces/builder.js +5 -0
  9. package/dist/server/flow-surfaces/catalog.js +27 -8
  10. package/dist/server/flow-surfaces/configure-options.js +17 -1
  11. package/dist/server/flow-surfaces/service-utils.d.ts +1 -0
  12. package/dist/server/flow-surfaces/service-utils.js +17 -0
  13. package/dist/server/flow-surfaces/service.js +9 -0
  14. package/dist/server/index.d.ts +2 -0
  15. package/dist/server/index.js +7 -0
  16. package/dist/server/plugin.d.ts +13 -0
  17. package/dist/server/plugin.js +90 -3
  18. package/dist/server/repository.d.ts +12 -0
  19. package/dist/server/repository.js +39 -2
  20. package/dist/server/template/context-keys.d.ts +14 -0
  21. package/dist/server/template/context-keys.js +86 -0
  22. package/dist/server/template/contexts.d.ts +5 -8
  23. package/dist/server/template/contexts.js +43 -51
  24. package/dist/server/template/resolver.d.ts +5 -13
  25. package/dist/server/template/resolver.js +188 -257
  26. package/dist/server/template/variable-expression.d.ts +72 -0
  27. package/dist/server/template/variable-expression.js +597 -0
  28. package/dist/server/variables/allow-list.d.ts +49 -0
  29. package/dist/server/variables/allow-list.js +492 -0
  30. package/dist/server/variables/form-item-record-slot-resolvers.d.ts +10 -0
  31. package/dist/server/variables/form-item-record-slot-resolvers.js +280 -0
  32. package/dist/server/variables/record-bindings.d.ts +42 -0
  33. package/dist/server/variables/record-bindings.js +196 -0
  34. package/dist/server/variables/record-projection.d.ts +10 -0
  35. package/dist/server/variables/record-projection.js +140 -0
  36. package/dist/server/variables/record-slot-policy.d.ts +23 -0
  37. package/dist/server/variables/record-slot-policy.js +100 -0
  38. package/dist/server/variables/record-slot-resolvers.d.ts +46 -0
  39. package/dist/server/variables/record-slot-resolvers.js +115 -0
  40. package/dist/server/variables/records.d.ts +49 -2
  41. package/dist/server/variables/records.js +309 -18
  42. package/dist/server/variables/registry.d.ts +33 -10
  43. package/dist/server/variables/registry.js +197 -362
  44. package/dist/server/variables/resolve.d.ts +20 -2
  45. package/dist/server/variables/resolve.js +85 -13
  46. package/dist/server/variables/runjs-variable-dependencies.d.ts +23 -0
  47. package/dist/server/variables/runjs-variable-dependencies.js +407 -0
  48. package/dist/server/variables/selects.js +6 -3
  49. package/dist/server/variables/utils.d.ts +3 -6
  50. package/dist/server/variables/utils.js +50 -111
  51. package/package.json +2 -2
@@ -8,16 +8,16 @@
8
8
  */
9
9
 
10
10
  module.exports = {
11
- "@nocobase/client": "3.0.0-alpha.6",
11
+ "@nocobase/client": "3.0.0-alpha.8",
12
12
  "lodash": "4.18.1",
13
- "@nocobase/database": "3.0.0-alpha.6",
14
- "@nocobase/data-source-manager": "3.0.0-alpha.6",
15
- "@nocobase/resourcer": "3.0.0-alpha.6",
16
- "@nocobase/utils": "3.0.0-alpha.6",
17
- "@nocobase/cache": "3.0.0-alpha.6",
18
- "@nocobase/server": "3.0.0-alpha.6",
19
- "@nocobase/actions": "3.0.0-alpha.6",
13
+ "@nocobase/database": "3.0.0-alpha.8",
14
+ "@nocobase/data-source-manager": "3.0.0-alpha.8",
15
+ "@nocobase/resourcer": "3.0.0-alpha.8",
16
+ "@nocobase/server": "3.0.0-alpha.8",
17
+ "@nocobase/utils": "3.0.0-alpha.8",
18
+ "@nocobase/cache": "3.0.0-alpha.8",
19
+ "@nocobase/actions": "3.0.0-alpha.8",
20
20
  "sequelize": "6.35.2",
21
21
  "@formily/json-schema": "2.3.7",
22
- "@nocobase/ai": "3.0.0-alpha.6"
22
+ "@nocobase/ai": "3.0.0-alpha.8"
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-03T08:00:18.832Z"}
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-10T06:31:30.087Z"}
@@ -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-03T08:00:19.852Z"}
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-10T06:31:31.082Z"}
@@ -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-03T08:00:20.324Z"}
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-10T06:31:31.550Z"}
@@ -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-03T08:00:20.439Z"}
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-10T06:31:31.683Z"}
@@ -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-03T08:00:19.400Z"}
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-10T06:31:30.633Z"}
@@ -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-03T08:00:21.587Z"}
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-10T06:31:33.007Z"}
@@ -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(ACTION_CONFIRM_OPTIONS, ACTION_ASSIGN_OPTIONS, ACTION_LINKAGE_OPTIONS);
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)) {
@@ -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';
@@ -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
  });
@@ -6,16 +6,29 @@
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
+ contractRd?: string | number;
20
+ contextParams?: Record<string, unknown>;
21
+ rd?: string | number;
22
+ template: JSONValue;
23
+ }): Promise<any>;
24
+ isLegacyVariableTemplateSafe(template: JSONValue): boolean;
15
25
  load(): Promise<void>;
16
26
  install(): Promise<void>;
17
27
  afterEnable(): Promise<void>;
18
28
  afterDisable(): Promise<void>;
19
29
  remove(): Promise<void>;
30
+ private disposeRecordSlotResolvers;
31
+ private registerRecordSlotResolvers;
32
+ private ensureRecordSlotResolvers;
20
33
  }
21
34
  export default PluginFlowEngineServer;
@@ -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,16 @@ 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
+ }
83
+ isLegacyVariableTemplateSafe(template) {
84
+ return (0, import_resolve.isLegacyVariableTemplateSafe)(template);
85
+ }
74
86
  async load() {
75
87
  await super.load();
88
+ this.registerRecordSlotResolvers();
76
89
  (0, import_flow_surfaces.registerFlowSurfacesResource)(this);
77
90
  this.app.auditManager.registerAction("flowSql:save");
78
91
  this.app.auditManager.registerAction("flowModels:save");
@@ -86,12 +99,56 @@ class PluginFlowEngineServer extends import_server.default {
86
99
  actions: {
87
100
  // 解析 JSON 模板中的 ctx 变量
88
101
  resolve: async (ctx, next) => {
89
- var _a, _b;
102
+ var _a, _b, _c;
103
+ this.ensureRecordSlotResolvers(ctx.app);
90
104
  const raw = ((_b = (_a = ctx.action) == null ? void 0 : _a.params) == null ? void 0 : _b.values) ?? {};
91
105
  const values = typeof (raw == null ? void 0 : raw.values) !== "undefined" ? raw.values : raw;
92
106
  if (Array.isArray(values == null ? void 0 : values.batch)) {
93
107
  const batchItems = values.batch;
94
- const results = await (0, import_resolve.resolveVariablesBatch)(ctx, batchItems);
108
+ const authorizedItems = [];
109
+ const passthroughResults = [];
110
+ for (const [index, item] of batchItems.entries()) {
111
+ const template2 = (item == null ? void 0 : item.template) ?? {};
112
+ const authorization2 = await (0, import_allow_list.authorizeVariablesResolve)(ctx, {
113
+ contractRd: item == null ? void 0 : item.contractRd,
114
+ contextParams: (item == null ? void 0 : item.contextParams) || {},
115
+ rd: item == null ? void 0 : item.rd,
116
+ template: template2
117
+ });
118
+ if (authorization2.allowed) {
119
+ const authorizedItem = {
120
+ analysis: authorization2.analysis,
121
+ bindingPlan: authorization2.bindingPlan,
122
+ id: item == null ? void 0 : item.id,
123
+ index,
124
+ policy: authorization2.policy,
125
+ template: template2
126
+ };
127
+ authorizedItems.push(authorizedItem);
128
+ } else {
129
+ passthroughResults[index] = { id: item == null ? void 0 : item.id, data: template2 };
130
+ }
131
+ }
132
+ const resolvedItems = await (0, import_resolve.resolveAnalyzedVariablesBatch)(
133
+ ctx,
134
+ authorizedItems.map((item) => ({
135
+ analysis: item.analysis,
136
+ bindingPlan: item.bindingPlan,
137
+ id: item.index,
138
+ template: item.template,
139
+ policy: item.policy
140
+ }))
141
+ );
142
+ for (const item of resolvedItems) {
143
+ const index = Number(item.id);
144
+ passthroughResults[index] = {
145
+ id: (_c = batchItems[index]) == null ? void 0 : _c.id,
146
+ data: item.data
147
+ };
148
+ }
149
+ const results = passthroughResults.filter(
150
+ (item) => !!item
151
+ );
95
152
  ctx.body = { results };
96
153
  await next();
97
154
  return;
@@ -104,7 +161,18 @@ class PluginFlowEngineServer extends import_server.default {
104
161
  }
105
162
  const template = values.template;
106
163
  const contextParams = (values == null ? void 0 : values.contextParams) || {};
107
- ctx.body = await (0, import_resolve.resolveVariablesTemplate)(ctx, template, contextParams);
164
+ const authorization = await (0, import_allow_list.authorizeVariablesResolve)(ctx, {
165
+ contractRd: values == null ? void 0 : values.contractRd,
166
+ contextParams,
167
+ rd: values == null ? void 0 : values.rd,
168
+ template
169
+ });
170
+ ctx.body = authorization.allowed ? await (0, import_resolve.resolveAnalyzedVariablesTemplate)(
171
+ ctx,
172
+ authorization.analysis,
173
+ authorization.policy,
174
+ authorization.bindingPlan
175
+ ) : template;
108
176
  await next();
109
177
  }
110
178
  }
@@ -162,10 +230,29 @@ class PluginFlowEngineServer extends import_server.default {
162
230
  async install() {
163
231
  }
164
232
  async afterEnable() {
233
+ this.registerRecordSlotResolvers();
165
234
  }
166
235
  async afterDisable() {
236
+ this.disposeRecordSlotResolvers();
167
237
  }
168
238
  async remove() {
239
+ this.disposeRecordSlotResolvers();
240
+ }
241
+ disposeRecordSlotResolvers() {
242
+ this.recordSlotResolverDisposers.forEach((dispose) => dispose());
243
+ this.recordSlotResolverDisposers = [];
244
+ }
245
+ registerRecordSlotResolvers() {
246
+ this.disposeRecordSlotResolvers();
247
+ this.ensureRecordSlotResolvers(this.app);
248
+ }
249
+ ensureRecordSlotResolvers(app) {
250
+ const registry = (0, import_record_slot_resolvers.getRecordSlotResolverRegistry)(app);
251
+ for (const resolver of [...(0, import_record_slot_policy.createBuiltInRecordSlotResolvers)(), ...(0, import_form_item_record_slot_resolvers.createFormItemRecordSlotResolvers)()]) {
252
+ if (!registry.has(resolver.owner, resolver.id)) {
253
+ this.recordSlotResolverDisposers.push(registry.register(resolver));
254
+ }
255
+ }
169
256
  }
170
257
  }
171
258
  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,11 @@ 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>;
143
+ private findModelUidByParentId;
144
+ findModelNodeSnapshotByParentId(parentUid: string, options?: Transactionable & {
145
+ subKey?: string;
146
+ }): Promise<FlowModelNodeSnapshot | null>;
135
147
  findModelByParentId(parentUid: string, options?: GetJsonSchemaOptions & {
136
148
  subKey?: string;
137
149
  }): Promise<any>;
@@ -1411,7 +1411,36 @@ 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 findModelByParentId(parentUid, options) {
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
+ }
1443
+ async findModelUidByParentId(parentUid, options) {
1415
1444
  const r = this.database.getRepository("flowModelTreePath");
1416
1445
  const treePaths = await r.model.findAll({
1417
1446
  where: {
@@ -1433,10 +1462,18 @@ WHERE TreeTable.depth = 1 AND TreeTable.ancestor = :ancestor and TreeTable.sort
1433
1462
  transaction: options == null ? void 0 : options.transaction
1434
1463
  });
1435
1464
  if (treePath == null ? void 0 : treePath["descendant"]) {
1436
- return this.findModelById(treePath["descendant"], options);
1465
+ return treePath["descendant"];
1437
1466
  }
1438
1467
  return null;
1439
1468
  }
1469
+ async findModelNodeSnapshotByParentId(parentUid, options) {
1470
+ const uid2 = await this.findModelUidByParentId(parentUid, options);
1471
+ return uid2 ? this.findModelNodeSnapshotById(uid2, options) : null;
1472
+ }
1473
+ async findModelByParentId(parentUid, options) {
1474
+ const uid2 = await this.findModelUidByParentId(parentUid, options);
1475
+ return uid2 ? this.findModelById(uid2, options) : null;
1476
+ }
1440
1477
  async attach(uid2, attachOptions, options) {
1441
1478
  const { transaction: transaction2 } = options || {};
1442
1479
  const modelUid = String(uid2 || "").trim();
@@ -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;