@nocobase/plugin-flow-engine 2.1.35 → 2.1.37

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 (44) 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/index.d.ts +2 -0
  9. package/dist/server/index.js +7 -0
  10. package/dist/server/plugin.d.ts +12 -0
  11. package/dist/server/plugin.js +88 -3
  12. package/dist/server/repository.d.ts +8 -0
  13. package/dist/server/repository.js +29 -0
  14. package/dist/server/template/context-keys.d.ts +14 -0
  15. package/dist/server/template/context-keys.js +86 -0
  16. package/dist/server/template/contexts.d.ts +5 -8
  17. package/dist/server/template/contexts.js +43 -51
  18. package/dist/server/template/resolver.d.ts +5 -13
  19. package/dist/server/template/resolver.js +188 -257
  20. package/dist/server/template/variable-expression.d.ts +72 -0
  21. package/dist/server/template/variable-expression.js +597 -0
  22. package/dist/server/variables/allow-list.d.ts +48 -0
  23. package/dist/server/variables/allow-list.js +374 -0
  24. package/dist/server/variables/form-item-record-slot-resolvers.d.ts +10 -0
  25. package/dist/server/variables/form-item-record-slot-resolvers.js +280 -0
  26. package/dist/server/variables/record-bindings.d.ts +42 -0
  27. package/dist/server/variables/record-bindings.js +196 -0
  28. package/dist/server/variables/record-projection.d.ts +10 -0
  29. package/dist/server/variables/record-projection.js +140 -0
  30. package/dist/server/variables/record-slot-policy.d.ts +23 -0
  31. package/dist/server/variables/record-slot-policy.js +100 -0
  32. package/dist/server/variables/record-slot-resolvers.d.ts +46 -0
  33. package/dist/server/variables/record-slot-resolvers.js +115 -0
  34. package/dist/server/variables/records.d.ts +47 -1
  35. package/dist/server/variables/records.js +279 -5
  36. package/dist/server/variables/registry.d.ts +33 -10
  37. package/dist/server/variables/registry.js +197 -362
  38. package/dist/server/variables/resolve.d.ts +19 -2
  39. package/dist/server/variables/resolve.js +85 -13
  40. package/dist/server/variables/runjs-variable-dependencies.d.ts +21 -0
  41. package/dist/server/variables/runjs-variable-dependencies.js +405 -0
  42. package/dist/server/variables/utils.d.ts +3 -6
  43. package/dist/server/variables/utils.js +50 -111
  44. package/package.json +2 -2
@@ -8,16 +8,16 @@
8
8
  */
9
9
 
10
10
  module.exports = {
11
- "@nocobase/client": "2.1.35",
11
+ "@nocobase/client": "2.1.37",
12
12
  "lodash": "4.18.1",
13
- "@nocobase/database": "2.1.35",
14
- "@nocobase/data-source-manager": "2.1.35",
15
- "@nocobase/resourcer": "2.1.35",
16
- "@nocobase/utils": "2.1.35",
17
- "@nocobase/cache": "2.1.35",
18
- "@nocobase/server": "2.1.35",
19
- "@nocobase/actions": "2.1.35",
13
+ "@nocobase/database": "2.1.37",
14
+ "@nocobase/data-source-manager": "2.1.37",
15
+ "@nocobase/resourcer": "2.1.37",
16
+ "@nocobase/server": "2.1.37",
17
+ "@nocobase/utils": "2.1.37",
18
+ "@nocobase/cache": "2.1.37",
19
+ "@nocobase/actions": "2.1.37",
20
20
  "sequelize": "6.35.2",
21
21
  "@formily/json-schema": "2.3.7",
22
- "@nocobase/ai": "2.1.35"
22
+ "@nocobase/ai": "2.1.37"
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-05T07:46:02.807Z"}
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-08T09:01:23.313Z"}
@@ -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-05T07:46:03.708Z"}
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-08T09:01:24.416Z"}
@@ -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-05T07:46:04.135Z"}
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-08T09:01:24.849Z"}
@@ -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-05T07:46:04.248Z"}
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-08T09:01:24.961Z"}
@@ -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-05T07:46:03.317Z"}
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-08T09:01:23.977Z"}
@@ -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-05T07:46:05.359Z"}
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-08T09:01:26.088Z"}
@@ -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,28 @@
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>;
23
+ isLegacyVariableTemplateSafe(template: JSONValue): boolean;
15
24
  load(): Promise<void>;
16
25
  install(): Promise<void>;
17
26
  afterEnable(): Promise<void>;
18
27
  afterDisable(): Promise<void>;
19
28
  remove(): Promise<void>;
29
+ private disposeRecordSlotResolvers;
30
+ private registerRecordSlotResolvers;
31
+ private ensureRecordSlotResolvers;
20
32
  }
21
33
  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,55 @@ 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
+ contextParams: (item == null ? void 0 : item.contextParams) || {},
114
+ rd: item == null ? void 0 : item.rd,
115
+ template: template2
116
+ });
117
+ if (authorization2.allowed) {
118
+ const authorizedItem = {
119
+ analysis: authorization2.analysis,
120
+ bindingPlan: authorization2.bindingPlan,
121
+ id: item == null ? void 0 : item.id,
122
+ index,
123
+ policy: authorization2.policy,
124
+ template: template2
125
+ };
126
+ authorizedItems.push(authorizedItem);
127
+ } else {
128
+ passthroughResults[index] = { id: item == null ? void 0 : item.id, data: template2 };
129
+ }
130
+ }
131
+ const resolvedItems = await (0, import_resolve.resolveAnalyzedVariablesBatch)(
132
+ ctx,
133
+ authorizedItems.map((item) => ({
134
+ analysis: item.analysis,
135
+ bindingPlan: item.bindingPlan,
136
+ id: item.index,
137
+ template: item.template,
138
+ policy: item.policy
139
+ }))
140
+ );
141
+ for (const item of resolvedItems) {
142
+ const index = Number(item.id);
143
+ passthroughResults[index] = {
144
+ id: (_c = batchItems[index]) == null ? void 0 : _c.id,
145
+ data: item.data
146
+ };
147
+ }
148
+ const results = passthroughResults.filter(
149
+ (item) => !!item
150
+ );
95
151
  ctx.body = { results };
96
152
  await next();
97
153
  return;
@@ -104,7 +160,17 @@ class PluginFlowEngineServer extends import_server.default {
104
160
  }
105
161
  const template = values.template;
106
162
  const contextParams = (values == null ? void 0 : values.contextParams) || {};
107
- ctx.body = await (0, import_resolve.resolveVariablesTemplate)(ctx, template, contextParams);
163
+ const authorization = await (0, import_allow_list.authorizeVariablesResolve)(ctx, {
164
+ contextParams,
165
+ rd: values == null ? void 0 : values.rd,
166
+ template
167
+ });
168
+ ctx.body = authorization.allowed ? await (0, import_resolve.resolveAnalyzedVariablesTemplate)(
169
+ ctx,
170
+ authorization.analysis,
171
+ authorization.policy,
172
+ authorization.bindingPlan
173
+ ) : template;
108
174
  await next();
109
175
  }
110
176
  }
@@ -162,10 +228,29 @@ class PluginFlowEngineServer extends import_server.default {
162
228
  async install() {
163
229
  }
164
230
  async afterEnable() {
231
+ this.registerRecordSlotResolvers();
165
232
  }
166
233
  async afterDisable() {
234
+ this.disposeRecordSlotResolvers();
167
235
  }
168
236
  async remove() {
237
+ this.disposeRecordSlotResolvers();
238
+ }
239
+ disposeRecordSlotResolvers() {
240
+ this.recordSlotResolverDisposers.forEach((dispose) => dispose());
241
+ this.recordSlotResolverDisposers = [];
242
+ }
243
+ registerRecordSlotResolvers() {
244
+ this.disposeRecordSlotResolvers();
245
+ this.ensureRecordSlotResolvers(this.app);
246
+ }
247
+ ensureRecordSlotResolvers(app) {
248
+ const registry = (0, import_record_slot_resolvers.getRecordSlotResolverRegistry)(app);
249
+ for (const resolver of [...(0, import_record_slot_policy.createBuiltInRecordSlotResolvers)(), ...(0, import_form_item_record_slot_resolvers.createFormItemRecordSlotResolvers)()]) {
250
+ if (!registry.has(resolver.owner, resolver.id)) {
251
+ this.recordSlotResolverDisposers.push(registry.register(resolver));
252
+ }
253
+ }
169
254
  }
170
255
  }
171
256
  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;
@@ -0,0 +1,86 @@
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
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var context_keys_exports = {};
28
+ __export(context_keys_exports, {
29
+ GLOBAL_CONTEXT_KEYS: () => GLOBAL_CONTEXT_KEYS,
30
+ HTTP_REQUEST_CONTEXT_KEYS: () => HTTP_REQUEST_CONTEXT_KEYS,
31
+ PROTECTED_SERVER_CONTEXT_KEYS: () => PROTECTED_SERVER_CONTEXT_KEYS,
32
+ SERVER_CONTEXT_INTERNAL_KEYS: () => SERVER_CONTEXT_INTERNAL_KEYS,
33
+ SERVER_CONTEXT_PROTOTYPE_KEYS: () => SERVER_CONTEXT_PROTOTYPE_KEYS,
34
+ isProtectedServerContextKey: () => isProtectedServerContextKey
35
+ });
36
+ module.exports = __toCommonJS(context_keys_exports);
37
+ const GLOBAL_CONTEXT_KEYS = ["now", "timestamp", "env"];
38
+ const HTTP_REQUEST_CONTEXT_KEYS = ["user", "roleName", "locale", "ip", "headers", "query", "params"];
39
+ const SERVER_CONTEXT_PROTOTYPE_KEYS = [
40
+ "__proto__",
41
+ "prototype",
42
+ "constructor",
43
+ "then",
44
+ "__defineGetter__",
45
+ "__defineSetter__",
46
+ "__lookupGetter__",
47
+ "__lookupSetter__",
48
+ "hasOwnProperty",
49
+ "isPrototypeOf",
50
+ "propertyIsEnumerable",
51
+ "toLocaleString",
52
+ "toString",
53
+ "valueOf"
54
+ ];
55
+ const SERVER_CONTEXT_INTERNAL_KEYS = [
56
+ "_props",
57
+ "_cache",
58
+ "_delegates",
59
+ "_proxy",
60
+ "_getOwn",
61
+ "defineProperty",
62
+ "delegate",
63
+ "clearDelegates",
64
+ "getSandboxKeys",
65
+ "getSandboxValue",
66
+ "createProxy"
67
+ ];
68
+ const PROTECTED_SERVER_CONTEXT_KEYS = [
69
+ ...GLOBAL_CONTEXT_KEYS,
70
+ ...HTTP_REQUEST_CONTEXT_KEYS,
71
+ ...SERVER_CONTEXT_PROTOTYPE_KEYS,
72
+ ...SERVER_CONTEXT_INTERNAL_KEYS
73
+ ];
74
+ const protectedServerContextKeys = new Set(PROTECTED_SERVER_CONTEXT_KEYS);
75
+ function isProtectedServerContextKey(key) {
76
+ return protectedServerContextKeys.has(key);
77
+ }
78
+ // Annotate the CommonJS export names for ESM import in node:
79
+ 0 && (module.exports = {
80
+ GLOBAL_CONTEXT_KEYS,
81
+ HTTP_REQUEST_CONTEXT_KEYS,
82
+ PROTECTED_SERVER_CONTEXT_KEYS,
83
+ SERVER_CONTEXT_INTERNAL_KEYS,
84
+ SERVER_CONTEXT_PROTOTYPE_KEYS,
85
+ isProtectedServerContextKey
86
+ });
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import { ResourcerContext } from '@nocobase/resourcer';
10
10
  type Getter<T = any> = (ctx: ServerBaseContext) => T | Promise<T>;
11
+ export declare const SERVER_CONTEXT_PROVIDER_TOKEN: unique symbol;
11
12
  export interface PropertyOptions {
12
13
  /** 固定值,优先级高于 get */
13
14
  value?: any;
@@ -21,13 +22,11 @@ export interface PropertyOptions {
21
22
  /**
22
23
  * 服务器端上下文基础类。
23
24
  * - 支持以 defineProperty 定义惰性/常量属性,并可选择缓存
24
- * - 支持以 defineMethod 定义方法
25
- * - 支持 delegate 机制,属性与方法可回退到被委托的上游上下文
26
- * - 通过 Proxy 实现按需求值与 this 绑定
25
+ * - 支持 delegate 机制,属性可回退到被委托的上游上下文
26
+ * - 通过 Proxy 实现按需求值
27
27
  */
28
28
  export declare class ServerBaseContext {
29
29
  protected _props: Record<string, PropertyOptions>;
30
- protected _methods: Record<string, (...args: any[]) => any>;
31
30
  protected _cache: Record<string, any>;
32
31
  protected _delegates: ServerBaseContext[];
33
32
  protected _proxy?: ServerBaseContext;
@@ -40,12 +39,10 @@ export declare class ServerBaseContext {
40
39
  * - get:惰性 getter(默认带缓存)
41
40
  * - once:已存在时忽略重复定义
42
41
  */
43
- defineProperty(key: string, options: PropertyOptions): void;
44
- /** 定义一个方法(不可枚举、不可写),访问时会自动绑定到对应实例 */
45
- defineMethod(name: string, fn: (...args: any[]) => any): void;
42
+ defineProperty(key: string, options: PropertyOptions, providerToken?: typeof SERVER_CONTEXT_PROVIDER_TOKEN): void;
46
43
  /**
47
44
  * 委托到另一个 ServerBaseContext:
48
- * - 访问属性/方法找不到时,会回退到被委托者进行解析
45
+ * - 访问属性找不到时,会回退到被委托者进行解析
49
46
  */
50
47
  delegate(ctx: ServerBaseContext): void;
51
48
  /** 清空所有委托 */