@nocobase/app-plugin-foundation 0.0.0-stage → 0.1.0-beta.1

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 (252) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +96 -2
  3. package/dist/cli/index.d.ts +4 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +16 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/cli/module-manifest.d.ts +9 -0
  8. package/dist/cli/module-manifest.d.ts.map +1 -0
  9. package/dist/cli/module-manifest.js +12 -0
  10. package/dist/cli/module-manifest.js.map +1 -0
  11. package/dist/client/api.d.ts +19 -0
  12. package/dist/client/api.d.ts.map +1 -0
  13. package/dist/client/api.js +57 -0
  14. package/dist/client/api.js.map +1 -0
  15. package/dist/client/business-modules.d.ts +5 -0
  16. package/dist/client/business-modules.d.ts.map +1 -0
  17. package/dist/client/business-modules.js +87 -0
  18. package/dist/client/business-modules.js.map +1 -0
  19. package/dist/client/components/capability-icons.d.ts +4 -0
  20. package/dist/client/components/capability-icons.d.ts.map +1 -0
  21. package/dist/client/components/capability-icons.js +17 -0
  22. package/dist/client/components/capability-icons.js.map +1 -0
  23. package/dist/client/components/collections-browser.d.ts +7 -0
  24. package/dist/client/components/collections-browser.d.ts.map +1 -0
  25. package/dist/client/components/collections-browser.js +63 -0
  26. package/dist/client/components/collections-browser.js.map +1 -0
  27. package/dist/client/components/format.d.ts +7 -0
  28. package/dist/client/components/format.d.ts.map +1 -0
  29. package/dist/client/components/format.js +42 -0
  30. package/dist/client/components/format.js.map +1 -0
  31. package/dist/client/components/foundation-page.d.ts +16 -0
  32. package/dist/client/components/foundation-page.d.ts.map +1 -0
  33. package/dist/client/components/foundation-page.js +217 -0
  34. package/dist/client/components/foundation-page.js.map +1 -0
  35. package/dist/client/components/foundation-translation.d.ts +12 -0
  36. package/dist/client/components/foundation-translation.d.ts.map +1 -0
  37. package/dist/client/components/foundation-translation.js +19 -0
  38. package/dist/client/components/foundation-translation.js.map +1 -0
  39. package/dist/client/components/module-matrix.d.ts +9 -0
  40. package/dist/client/components/module-matrix.d.ts.map +1 -0
  41. package/dist/client/components/module-matrix.js +59 -0
  42. package/dist/client/components/module-matrix.js.map +1 -0
  43. package/dist/client/components/ui/button.d.ts +8 -0
  44. package/dist/client/components/ui/button.d.ts.map +1 -0
  45. package/dist/client/components/ui/button.js +35 -0
  46. package/dist/client/components/ui/button.js.map +1 -0
  47. package/dist/client/components/ui/collapsible.d.ts +7 -0
  48. package/dist/client/components/ui/collapsible.d.ts.map +1 -0
  49. package/dist/client/components/ui/collapsible.js +13 -0
  50. package/dist/client/components/ui/collapsible.js.map +1 -0
  51. package/dist/client/components/ui/dialog.d.ts +18 -0
  52. package/dist/client/components/ui/dialog.d.ts.map +1 -0
  53. package/dist/client/components/ui/dialog.js +37 -0
  54. package/dist/client/components/ui/dialog.js.map +1 -0
  55. package/dist/client/components/ui/input.d.ts +4 -0
  56. package/dist/client/components/ui/input.d.ts.map +1 -0
  57. package/dist/client/components/ui/input.js +8 -0
  58. package/dist/client/components/ui/input.js.map +1 -0
  59. package/dist/client/components/ui/table.d.ts +11 -0
  60. package/dist/client/components/ui/table.d.ts.map +1 -0
  61. package/dist/client/components/ui/table.js +28 -0
  62. package/dist/client/components/ui/table.js.map +1 -0
  63. package/dist/client/components/ui/tooltip.d.ts +8 -0
  64. package/dist/client/components/ui/tooltip.d.ts.map +1 -0
  65. package/dist/client/components/ui/tooltip.js +17 -0
  66. package/dist/client/components/ui/tooltip.js.map +1 -0
  67. package/dist/client/index.d.ts +6 -0
  68. package/dist/client/index.d.ts.map +1 -0
  69. package/dist/client/index.js +7 -0
  70. package/dist/client/index.js.map +1 -0
  71. package/dist/client/locales/de-DE.d.ts +4 -0
  72. package/dist/client/locales/de-DE.d.ts.map +1 -0
  73. package/dist/client/locales/de-DE.js +334 -0
  74. package/dist/client/locales/de-DE.js.map +1 -0
  75. package/dist/client/locales/en-US.d.ts +336 -0
  76. package/dist/client/locales/en-US.d.ts.map +1 -0
  77. package/dist/client/locales/en-US.js +334 -0
  78. package/dist/client/locales/en-US.js.map +1 -0
  79. package/dist/client/locales/es-ES.d.ts +4 -0
  80. package/dist/client/locales/es-ES.d.ts.map +1 -0
  81. package/dist/client/locales/es-ES.js +335 -0
  82. package/dist/client/locales/es-ES.js.map +1 -0
  83. package/dist/client/locales/fr-FR.d.ts +4 -0
  84. package/dist/client/locales/fr-FR.d.ts.map +1 -0
  85. package/dist/client/locales/fr-FR.js +335 -0
  86. package/dist/client/locales/fr-FR.js.map +1 -0
  87. package/dist/client/locales/id-ID.d.ts +4 -0
  88. package/dist/client/locales/id-ID.d.ts.map +1 -0
  89. package/dist/client/locales/id-ID.js +334 -0
  90. package/dist/client/locales/id-ID.js.map +1 -0
  91. package/dist/client/locales/index.d.ts +4 -0
  92. package/dist/client/locales/index.d.ts.map +1 -0
  93. package/dist/client/locales/index.js +14 -0
  94. package/dist/client/locales/index.js.map +1 -0
  95. package/dist/client/locales/ja-JP.d.ts +4 -0
  96. package/dist/client/locales/ja-JP.d.ts.map +1 -0
  97. package/dist/client/locales/ja-JP.js +334 -0
  98. package/dist/client/locales/ja-JP.js.map +1 -0
  99. package/dist/client/locales/pt-BR.d.ts +4 -0
  100. package/dist/client/locales/pt-BR.d.ts.map +1 -0
  101. package/dist/client/locales/pt-BR.js +335 -0
  102. package/dist/client/locales/pt-BR.js.map +1 -0
  103. package/dist/client/locales/vi-VN.d.ts +4 -0
  104. package/dist/client/locales/vi-VN.d.ts.map +1 -0
  105. package/dist/client/locales/vi-VN.js +334 -0
  106. package/dist/client/locales/vi-VN.js.map +1 -0
  107. package/dist/client/locales/zh-CN.d.ts +4 -0
  108. package/dist/client/locales/zh-CN.d.ts.map +1 -0
  109. package/dist/client/locales/zh-CN.js +334 -0
  110. package/dist/client/locales/zh-CN.js.map +1 -0
  111. package/dist/client/locales/zh-TW.d.ts +4 -0
  112. package/dist/client/locales/zh-TW.d.ts.map +1 -0
  113. package/dist/client/locales/zh-TW.js +334 -0
  114. package/dist/client/locales/zh-TW.js.map +1 -0
  115. package/dist/client/navigation.d.ts +8 -0
  116. package/dist/client/navigation.d.ts.map +1 -0
  117. package/dist/client/navigation.js +21 -0
  118. package/dist/client/navigation.js.map +1 -0
  119. package/dist/client/plugin.d.ts +11 -0
  120. package/dist/client/plugin.d.ts.map +1 -0
  121. package/dist/client/plugin.js +10 -0
  122. package/dist/client/plugin.js.map +1 -0
  123. package/dist/client/provider-inventory.d.ts +6 -0
  124. package/dist/client/provider-inventory.d.ts.map +1 -0
  125. package/dist/client/provider-inventory.js +49 -0
  126. package/dist/client/provider-inventory.js.map +1 -0
  127. package/dist/client/routes.d.ts +18 -0
  128. package/dist/client/routes.d.ts.map +1 -0
  129. package/dist/client/routes.js +41 -0
  130. package/dist/client/routes.js.map +1 -0
  131. package/dist/package.d.ts +2 -0
  132. package/dist/package.d.ts.map +1 -0
  133. package/dist/package.js +2 -0
  134. package/dist/package.js.map +1 -0
  135. package/dist/server/api-evidence.d.ts +13 -0
  136. package/dist/server/api-evidence.d.ts.map +1 -0
  137. package/dist/server/api-evidence.js +178 -0
  138. package/dist/server/api-evidence.js.map +1 -0
  139. package/dist/server/capabilities/data.d.ts +9 -0
  140. package/dist/server/capabilities/data.d.ts.map +1 -0
  141. package/dist/server/capabilities/data.js +143 -0
  142. package/dist/server/capabilities/data.js.map +1 -0
  143. package/dist/server/capabilities/index.d.ts +5 -0
  144. package/dist/server/capabilities/index.d.ts.map +1 -0
  145. package/dist/server/capabilities/index.js +24 -0
  146. package/dist/server/capabilities/index.js.map +1 -0
  147. package/dist/server/capabilities/intelligence.d.ts +4 -0
  148. package/dist/server/capabilities/intelligence.d.ts.map +1 -0
  149. package/dist/server/capabilities/intelligence.js +105 -0
  150. package/dist/server/capabilities/intelligence.js.map +1 -0
  151. package/dist/server/capabilities/messaging.d.ts +4 -0
  152. package/dist/server/capabilities/messaging.d.ts.map +1 -0
  153. package/dist/server/capabilities/messaging.js +108 -0
  154. package/dist/server/capabilities/messaging.js.map +1 -0
  155. package/dist/server/capabilities/people.d.ts +4 -0
  156. package/dist/server/capabilities/people.d.ts.map +1 -0
  157. package/dist/server/capabilities/people.js +151 -0
  158. package/dist/server/capabilities/people.js.map +1 -0
  159. package/dist/server/capabilities/platform.d.ts +10 -0
  160. package/dist/server/capabilities/platform.d.ts.map +1 -0
  161. package/dist/server/capabilities/platform.js +143 -0
  162. package/dist/server/capabilities/platform.js.map +1 -0
  163. package/dist/server/capabilities/processes.d.ts +3 -0
  164. package/dist/server/capabilities/processes.d.ts.map +1 -0
  165. package/dist/server/capabilities/processes.js +86 -0
  166. package/dist/server/capabilities/processes.js.map +1 -0
  167. package/dist/server/capabilities/types.d.ts +41 -0
  168. package/dist/server/capabilities/types.d.ts.map +1 -0
  169. package/dist/server/capabilities/types.js +23 -0
  170. package/dist/server/capabilities/types.js.map +1 -0
  171. package/dist/server/catalog.d.ts +3 -0
  172. package/dist/server/catalog.d.ts.map +1 -0
  173. package/dist/server/catalog.js +44 -0
  174. package/dist/server/catalog.js.map +1 -0
  175. package/dist/server/index.d.ts +6 -0
  176. package/dist/server/index.d.ts.map +1 -0
  177. package/dist/server/index.js +5 -0
  178. package/dist/server/index.js.map +1 -0
  179. package/dist/server/inventory.d.ts +54 -0
  180. package/dist/server/inventory.d.ts.map +1 -0
  181. package/dist/server/inventory.js +184 -0
  182. package/dist/server/inventory.js.map +1 -0
  183. package/dist/server/module-manifest.d.ts +10 -0
  184. package/dist/server/module-manifest.d.ts.map +1 -0
  185. package/dist/server/module-manifest.js +66 -0
  186. package/dist/server/module-manifest.js.map +1 -0
  187. package/dist/server/module-sources.d.ts +5 -0
  188. package/dist/server/module-sources.d.ts.map +1 -0
  189. package/dist/server/module-sources.js +482 -0
  190. package/dist/server/module-sources.js.map +1 -0
  191. package/dist/server/packages.d.ts +18 -0
  192. package/dist/server/packages.d.ts.map +1 -0
  193. package/dist/server/packages.js +62 -0
  194. package/dist/server/packages.js.map +1 -0
  195. package/dist/server/plugin.d.ts +4 -0
  196. package/dist/server/plugin.d.ts.map +1 -0
  197. package/dist/server/plugin.js +12 -0
  198. package/dist/server/plugin.js.map +1 -0
  199. package/dist/server/provider-inventory.d.ts +13 -0
  200. package/dist/server/provider-inventory.d.ts.map +1 -0
  201. package/dist/server/provider-inventory.js +180 -0
  202. package/dist/server/provider-inventory.js.map +1 -0
  203. package/dist/server/providers/foundation.d.ts +7 -0
  204. package/dist/server/providers/foundation.d.ts.map +1 -0
  205. package/dist/server/providers/foundation.js +24 -0
  206. package/dist/server/providers/foundation.js.map +1 -0
  207. package/dist/server/providers/index.d.ts +4 -0
  208. package/dist/server/providers/index.d.ts.map +1 -0
  209. package/dist/server/providers/index.js +6 -0
  210. package/dist/server/providers/index.js.map +1 -0
  211. package/dist/server/read-queue.d.ts +10 -0
  212. package/dist/server/read-queue.d.ts.map +1 -0
  213. package/dist/server/read-queue.js +50 -0
  214. package/dist/server/read-queue.js.map +1 -0
  215. package/dist/server/request-evidence.d.ts +14 -0
  216. package/dist/server/request-evidence.d.ts.map +1 -0
  217. package/dist/server/request-evidence.js +141 -0
  218. package/dist/server/request-evidence.js.map +1 -0
  219. package/dist/server/routes/index.d.ts +6 -0
  220. package/dist/server/routes/index.d.ts.map +1 -0
  221. package/dist/server/routes/index.js +77 -0
  222. package/dist/server/routes/index.js.map +1 -0
  223. package/dist/server/routes/schemas.d.ts +13 -0
  224. package/dist/server/routes/schemas.d.ts.map +1 -0
  225. package/dist/server/routes/schemas.js +160 -0
  226. package/dist/server/routes/schemas.js.map +1 -0
  227. package/dist/server/services/foundation.d.ts +44 -0
  228. package/dist/server/services/foundation.d.ts.map +1 -0
  229. package/dist/server/services/foundation.js +265 -0
  230. package/dist/server/services/foundation.js.map +1 -0
  231. package/dist/server/source-evidence.d.ts +26 -0
  232. package/dist/server/source-evidence.d.ts.map +1 -0
  233. package/dist/server/source-evidence.js +271 -0
  234. package/dist/server/source-evidence.js.map +1 -0
  235. package/dist/server/static-values.d.ts +16 -0
  236. package/dist/server/static-values.d.ts.map +1 -0
  237. package/dist/server/static-values.js +181 -0
  238. package/dist/server/static-values.js.map +1 -0
  239. package/dist/server/tokens.d.ts +18 -0
  240. package/dist/server/tokens.d.ts.map +1 -0
  241. package/dist/server/tokens.js +3 -0
  242. package/dist/server/tokens.js.map +1 -0
  243. package/dist/shared/available-capabilities.d.ts +6 -0
  244. package/dist/shared/available-capabilities.d.ts.map +1 -0
  245. package/dist/shared/available-capabilities.js +66 -0
  246. package/dist/shared/available-capabilities.js.map +1 -0
  247. package/dist/shared/foundation.d.ts +155 -0
  248. package/dist/shared/foundation.d.ts.map +1 -0
  249. package/dist/shared/foundation.js +39 -0
  250. package/dist/shared/foundation.js.map +1 -0
  251. package/package.json +106 -3
  252. package/skills/nocobase-app-plugin-foundation/SKILL.md +78 -0
@@ -0,0 +1,271 @@
1
+ import ts from 'typescript';
2
+ /** Package-local value reachability. The host never loads dependencies, libraries or application code. */
3
+ export class SourceEvidence {
4
+ resolutions;
5
+ checker;
6
+ sources;
7
+ services = new Map();
8
+ constructor(sources, resolutions) {
9
+ this.resolutions = resolutions;
10
+ this.sources = new Map(sources.map((source) => [source.file, source]));
11
+ const options = {
12
+ noLib: true,
13
+ noResolve: false,
14
+ allowJs: true,
15
+ target: ts.ScriptTarget.Latest,
16
+ module: ts.ModuleKind.ESNext,
17
+ jsx: ts.JsxEmit.Preserve,
18
+ };
19
+ const host = ts.createCompilerHost(options);
20
+ host.getSourceFile = (file) => this.sources.get(file)?.ast;
21
+ host.readFile = () => undefined;
22
+ host.fileExists = (file) => this.sources.has(file);
23
+ host.resolveModuleNames = (names, from) => names.map((name) => {
24
+ const file = resolutions.get(`${from}\0${name}`);
25
+ return file ? { resolvedFileName: file } : undefined;
26
+ });
27
+ this.checker = ts
28
+ .createProgram([...this.sources.keys()], options, host)
29
+ .getTypeChecker();
30
+ }
31
+ /** Only declarations reachable from the provider entry establish service registrations. */
32
+ registerServices(entries) {
33
+ const calls = new Set();
34
+ const visit = (node) => {
35
+ if (calls.has(node))
36
+ return;
37
+ calls.add(node);
38
+ if (ts.isCallExpression(node) &&
39
+ ts.isPropertyAccessExpression(node.expression) &&
40
+ ['singleton', 'instance'].includes(node.expression.name.text)) {
41
+ const [token, factory] = node.arguments;
42
+ const declaration = token && this.declarations(token)[0];
43
+ if (declaration && factory)
44
+ this.services.set(declaration, [
45
+ ...(this.services.get(declaration) ?? []),
46
+ factory,
47
+ ]);
48
+ }
49
+ ts.forEachChild(node, visit);
50
+ };
51
+ for (const entry of entries)
52
+ for (const nodes of this.collect(entry).nodes.values()) {
53
+ for (const node of nodes) {
54
+ if (ts.isCallExpression(node))
55
+ visit(node);
56
+ if (ts.isClassDeclaration(node) || ts.isClassExpression(node)) {
57
+ for (const member of node.members)
58
+ if (ts.isMethodDeclaration(member) &&
59
+ ['register', 'boot'].includes(member.name.getText()))
60
+ visit(member);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ collect(file, roots) {
66
+ const references = new Set();
67
+ const nodes = new Map();
68
+ const visited = new Set();
69
+ const symbols = new Set();
70
+ let complete = true;
71
+ const exported = (target, name) => {
72
+ const ast = this.sources.get(target)?.ast;
73
+ const symbol = ast && this.checker.getSymbolAtLocation(ast);
74
+ const value = symbol &&
75
+ this.checker
76
+ .getExportsOfModule(symbol)
77
+ .find((item) => item.name === name);
78
+ if (!value) {
79
+ complete = false;
80
+ return;
81
+ }
82
+ follow(value);
83
+ };
84
+ const imported = (declaration, name) => {
85
+ let statement = declaration;
86
+ while (statement &&
87
+ !ts.isImportDeclaration(statement) &&
88
+ !ts.isExportDeclaration(statement))
89
+ statement = statement.parent;
90
+ if (!statement ||
91
+ !statement.moduleSpecifier ||
92
+ !ts.isStringLiteralLike(statement.moduleSpecifier))
93
+ return false;
94
+ const specifier = statement.moduleSpecifier.text;
95
+ const target = this.resolutions.get(`${statement.getSourceFile().fileName}\0${specifier}`);
96
+ if (!target) {
97
+ if (/^[.#/]/.test(specifier))
98
+ complete = false;
99
+ else
100
+ references.add(specifier);
101
+ }
102
+ else if (name)
103
+ exported(target, name);
104
+ else
105
+ complete = false;
106
+ return true;
107
+ };
108
+ const follow = (symbol) => {
109
+ if (symbols.has(symbol))
110
+ return;
111
+ symbols.add(symbol);
112
+ for (const declaration of symbol.declarations ?? []) {
113
+ if (ts.isImportSpecifier(declaration) ||
114
+ ts.isExportSpecifier(declaration)) {
115
+ if (declaration.isTypeOnly)
116
+ continue;
117
+ if (imported(declaration, declaration.propertyName?.text ?? declaration.name.text))
118
+ continue;
119
+ if (symbol.flags & ts.SymbolFlags.Alias)
120
+ follow(this.checker.getAliasedSymbol(symbol));
121
+ }
122
+ else if (ts.isImportClause(declaration)) {
123
+ if (!declaration.isTypeOnly)
124
+ imported(declaration, 'default');
125
+ }
126
+ else if (ts.isNamespaceImport(declaration)) {
127
+ imported(declaration);
128
+ }
129
+ else if (this.sources.has(declaration.getSourceFile().fileName)) {
130
+ visit(declaration);
131
+ }
132
+ }
133
+ };
134
+ const visit = (node) => {
135
+ if (visited.has(node) || ts.isTypeNode(node))
136
+ return;
137
+ visited.add(node);
138
+ const sourceFile = node.getSourceFile();
139
+ const selected = nodes.get(sourceFile.fileName) ?? new Set();
140
+ selected.add(node);
141
+ nodes.set(sourceFile.fileName, selected);
142
+ if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node))
143
+ return;
144
+ if (ts.isVariableDeclaration(node) ||
145
+ ts.isParameter(node) ||
146
+ ts.isPropertyDeclaration(node)) {
147
+ if (node.initializer)
148
+ visit(node.initializer);
149
+ return;
150
+ }
151
+ if (ts.isClassDeclaration(node) || ts.isClassExpression(node)) {
152
+ // Referring to a class does not mean all its methods are used.
153
+ for (const member of node.members)
154
+ if (ts.isConstructorDeclaration(member) ||
155
+ ts.isPropertyDeclaration(member))
156
+ visit(member);
157
+ return;
158
+ }
159
+ if (ts.isPropertyAccessExpression(node) &&
160
+ ts.isIdentifier(node.expression)) {
161
+ for (const root of this.serviceMethod(node.expression, node.name.text))
162
+ visit(root);
163
+ const receiver = this.checker.getSymbolAtLocation(node.expression);
164
+ const namespace = receiver?.declarations?.find(ts.isNamespaceImport);
165
+ if (namespace) {
166
+ imported(namespace, node.name.text);
167
+ return;
168
+ }
169
+ }
170
+ if (ts.isIdentifier(node)) {
171
+ const symbol = this.symbol(node);
172
+ if (symbol)
173
+ follow(symbol);
174
+ }
175
+ if (ts.isCallExpression(node) &&
176
+ node.expression.kind === ts.SyntaxKind.ImportKeyword) {
177
+ const argument = node.arguments[0];
178
+ if (argument && ts.isStringLiteralLike(argument)) {
179
+ const target = this.resolutions.get(`${sourceFile.fileName}\0${argument.text}`);
180
+ if (target)
181
+ exported(target, 'default');
182
+ else if (/^[.#/]/.test(argument.text))
183
+ complete = false;
184
+ else
185
+ references.add(argument.text);
186
+ }
187
+ else
188
+ complete = false;
189
+ }
190
+ ts.forEachChild(node, (child) => {
191
+ // A nested helper declaration is not a call. Follow it only when a value reference reaches it.
192
+ if (!ts.isFunctionDeclaration(child))
193
+ visit(child);
194
+ });
195
+ };
196
+ if (roots)
197
+ roots.forEach(visit);
198
+ else
199
+ exported(file, 'default');
200
+ return { references, nodes, complete };
201
+ }
202
+ symbol(node) {
203
+ if (node.parent &&
204
+ ts.isShorthandPropertyAssignment(node.parent) &&
205
+ node.parent.name === node)
206
+ return this.checker.getShorthandAssignmentValueSymbol(node.parent);
207
+ return this.checker.getSymbolAtLocation(node);
208
+ }
209
+ declarations(node) {
210
+ let symbol = this.symbol(node);
211
+ if (symbol && symbol.flags & ts.SymbolFlags.Alias)
212
+ symbol = this.checker.getAliasedSymbol(symbol);
213
+ return symbol?.declarations ?? [];
214
+ }
215
+ /** Resolve local value aliases and re-exports without executing a module. */
216
+ values(node, seen = new Set()) {
217
+ if (seen.has(node))
218
+ return [];
219
+ seen.add(node);
220
+ if (ts.isIdentifier(node))
221
+ return this.declarations(node).flatMap((item) => this.values(item, seen));
222
+ if (ts.isVariableDeclaration(node))
223
+ return node.initializer ? this.values(node.initializer, seen) : [];
224
+ if (ts.isExportAssignment(node))
225
+ return this.values(node.expression, seen);
226
+ if (ts.isParenthesizedExpression(node) ||
227
+ ts.isAsExpression(node) ||
228
+ ts.isSatisfiesExpression(node))
229
+ return this.values(node.expression, seen);
230
+ return [node];
231
+ }
232
+ serviceMethod(receiver, method) {
233
+ const roots = [];
234
+ for (const value of this.values(receiver)) {
235
+ if (!ts.isCallExpression(value) ||
236
+ !ts.isPropertyAccessExpression(value.expression) ||
237
+ value.expression.name.text !== 'resolve')
238
+ continue;
239
+ const token = value.arguments[0];
240
+ const declaration = token && this.declarations(token)[0];
241
+ const factories = declaration
242
+ ? (this.services.get(declaration) ?? [])
243
+ : [];
244
+ // Competing registrations cannot establish which implementation this runtime selected.
245
+ if (factories.length !== 1)
246
+ continue;
247
+ for (const factory of factories) {
248
+ const find = (node) => {
249
+ if (ts.isNewExpression(node)) {
250
+ for (const candidate of this.values(node.expression)) {
251
+ if (!ts.isClassDeclaration(candidate) &&
252
+ !ts.isClassExpression(candidate))
253
+ continue;
254
+ roots.push(node);
255
+ roots.push(candidate);
256
+ for (const member of candidate.members)
257
+ if (ts.isMethodDeclaration(member) &&
258
+ member.name &&
259
+ member.name.getText() === method)
260
+ roots.push(member);
261
+ }
262
+ }
263
+ ts.forEachChild(node, find);
264
+ };
265
+ this.values(factory).forEach(find);
266
+ }
267
+ }
268
+ return roots;
269
+ }
270
+ }
271
+ //# sourceMappingURL=source-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-evidence.js","sourceRoot":"","sources":["../../server/source-evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import ts from 'typescript';
2
+ import type { SourceEvidence } from './source-evidence.js';
3
+ type Bindings = ReadonlyMap<ts.Declaration, readonly ts.Node[]>;
4
+ /** A bounded literal evaluator. Calls, getters, spreads and unknown conditions are never executed or guessed. */
5
+ export declare class StaticValues {
6
+ private readonly analysis;
7
+ private readonly bindings;
8
+ constructor(analysis: SourceEvidence, bindings?: Bindings);
9
+ values(node: ts.Node, seen?: Set<ts.Node>): readonly ts.Node[];
10
+ private hasSpread;
11
+ private property;
12
+ private atoms;
13
+ strings(node: ts.Node, dynamic?: boolean): string[];
14
+ }
15
+ export {};
16
+ //# sourceMappingURL=static-values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-values.d.ts","sourceRoot":"","sources":["../../server/static-values.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,KAAK,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAGhE,iHAAiH;AACjH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,QAAQ,EAAE,cAAc,EACxB,QAAQ,GAAE,QAAoB;IAG1C,MAAM,CACX,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,IAAI,GAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAa,GAC7B,SAAS,EAAE,CAAC,IAAI,EAAE;IA0FrB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,QAAQ;IAmChB,OAAO,CAAC,KAAK;IA+CN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,UAAQ,GAAG,MAAM,EAAE;CAsBzD"}
@@ -0,0 +1,181 @@
1
+ import ts from 'typescript';
2
+ const MAX_VALUES = 32;
3
+ /** A bounded literal evaluator. Calls, getters, spreads and unknown conditions are never executed or guessed. */
4
+ export class StaticValues {
5
+ analysis;
6
+ bindings;
7
+ constructor(analysis, bindings = new Map()) {
8
+ this.analysis = analysis;
9
+ this.bindings = bindings;
10
+ }
11
+ values(node, seen = new Set()) {
12
+ if (seen.has(node) || seen.size >= MAX_VALUES)
13
+ return [];
14
+ seen = new Set(seen).add(node);
15
+ const next = (value) => this.values(value, seen);
16
+ if (ts.isIdentifier(node))
17
+ return this.analysis
18
+ .declarations(node)
19
+ .flatMap(next)
20
+ .slice(0, MAX_VALUES);
21
+ if (ts.isParameter(node))
22
+ return (this.bindings.get(node) ?? (node.initializer ? [node.initializer] : []))
23
+ .flatMap(next)
24
+ .slice(0, MAX_VALUES);
25
+ if (ts.isBindingElement(node)) {
26
+ const owner = node.parent.parent;
27
+ const containers = ts.isParameter(owner)
28
+ ? this.values(owner, seen)
29
+ : ts.isVariableDeclaration(owner) && owner.initializer
30
+ ? this.values(owner.initializer, seen)
31
+ : [];
32
+ if (ts.isParameter(owner) &&
33
+ this.bindings.has(owner) &&
34
+ !containers.length)
35
+ return [];
36
+ if (containers.some((value) => this.hasSpread(value)))
37
+ return [];
38
+ const name = node.propertyName ?? node.name;
39
+ const found = ts.isIdentifier(name) || ts.isStringLiteralLike(name)
40
+ ? containers.flatMap((value) => this.property(value, name.text, seen))
41
+ : [];
42
+ const declared = (ts.isIdentifier(name) || ts.isStringLiteralLike(name)) &&
43
+ containers.some((value) => ts.isObjectLiteralExpression(value)
44
+ ? value.properties.some((entry) => entry.name &&
45
+ (ts.isIdentifier(entry.name) ||
46
+ ts.isStringLiteralLike(entry.name)) &&
47
+ entry.name.text === name.text)
48
+ : ts.isJsxAttributes(value) &&
49
+ value.properties.some((entry) => ts.isJsxAttribute(entry) &&
50
+ entry.name.getText() === name.text));
51
+ return found.length || declared
52
+ ? found
53
+ : node.initializer
54
+ ? next(node.initializer)
55
+ : [];
56
+ }
57
+ if (ts.isVariableDeclaration(node)) {
58
+ if (node.initializer)
59
+ return next(node.initializer);
60
+ const loop = node.parent.parent;
61
+ if (ts.isForOfStatement(loop))
62
+ return this.values(loop.expression, seen)
63
+ .flatMap((value) => ts.isArrayLiteralExpression(value)
64
+ ? value.elements.flatMap(next)
65
+ : [])
66
+ .slice(0, MAX_VALUES);
67
+ return [];
68
+ }
69
+ if (ts.isParenthesizedExpression(node) ||
70
+ ts.isAsExpression(node) ||
71
+ ts.isSatisfiesExpression(node) ||
72
+ ts.isNonNullExpression(node))
73
+ return next(node.expression);
74
+ if (ts.isConditionalExpression(node))
75
+ return this.atoms(node.condition, seen)
76
+ .flatMap((value) => next(value ? node.whenTrue : node.whenFalse))
77
+ .slice(0, MAX_VALUES);
78
+ if (ts.isPropertyAccessExpression(node))
79
+ return this.values(node.expression, seen)
80
+ .flatMap((value) => this.property(value, node.name.text, seen))
81
+ .slice(0, MAX_VALUES);
82
+ return [node];
83
+ }
84
+ hasSpread(node) {
85
+ return ts.isObjectLiteralExpression(node)
86
+ ? node.properties.some(ts.isSpreadAssignment)
87
+ : ts.isJsxAttributes(node) &&
88
+ node.properties.some(ts.isJsxSpreadAttribute);
89
+ }
90
+ property(node, name, seen) {
91
+ if (this.hasSpread(node))
92
+ return [];
93
+ if (ts.isObjectLiteralExpression(node)) {
94
+ const entry = node.properties.find((item) => item.name &&
95
+ (ts.isIdentifier(item.name) || ts.isStringLiteralLike(item.name)) &&
96
+ item.name.text === name);
97
+ const value = entry && ts.isPropertyAssignment(entry)
98
+ ? entry.initializer
99
+ : entry && ts.isShorthandPropertyAssignment(entry)
100
+ ? entry.name
101
+ : undefined;
102
+ return value ? this.values(value, seen) : [];
103
+ }
104
+ if (ts.isJsxAttributes(node)) {
105
+ const entry = node.properties.find((item) => ts.isJsxAttribute(item) && item.name.getText() === name);
106
+ if (entry && ts.isJsxAttribute(entry) && entry.initializer) {
107
+ const value = ts.isJsxExpression(entry.initializer)
108
+ ? entry.initializer.expression
109
+ : entry.initializer;
110
+ return value ? this.values(value, seen) : [];
111
+ }
112
+ }
113
+ return [];
114
+ }
115
+ atoms(node, seen = new Set()) {
116
+ return this.values(node, seen)
117
+ .flatMap((value) => {
118
+ if (ts.isStringLiteralLike(value))
119
+ return [value.text];
120
+ if (ts.isNumericLiteral(value))
121
+ return [Number(value.text)];
122
+ if (value.kind === ts.SyntaxKind.TrueKeyword)
123
+ return [true];
124
+ if (value.kind === ts.SyntaxKind.FalseKeyword)
125
+ return [false];
126
+ if (value.kind === ts.SyntaxKind.NullKeyword)
127
+ return [null];
128
+ if (ts.isPrefixUnaryExpression(value) &&
129
+ value.operator === ts.SyntaxKind.ExclamationToken)
130
+ return this.atoms(value.operand, new Set(seen).add(value)).map((item) => !item);
131
+ if (!ts.isBinaryExpression(value))
132
+ return [];
133
+ const next = new Set(seen).add(value);
134
+ return this.atoms(value.left, next)
135
+ .flatMap((left) => this.atoms(value.right, next).flatMap((right) => {
136
+ switch (value.operatorToken.kind) {
137
+ case ts.SyntaxKind.EqualsEqualsEqualsToken:
138
+ return [left === right];
139
+ case ts.SyntaxKind.ExclamationEqualsEqualsToken:
140
+ return [left !== right];
141
+ case ts.SyntaxKind.BarBarToken:
142
+ return [left || right];
143
+ case ts.SyntaxKind.AmpersandAmpersandToken:
144
+ return [left && right];
145
+ case ts.SyntaxKind.QuestionQuestionToken:
146
+ return [left ?? right];
147
+ case ts.SyntaxKind.PlusToken:
148
+ return typeof left === 'string' || typeof right === 'string'
149
+ ? [String(left) + String(right)]
150
+ : typeof left === 'number' && typeof right === 'number'
151
+ ? [left + right]
152
+ : [];
153
+ default:
154
+ return [];
155
+ }
156
+ }))
157
+ .slice(0, MAX_VALUES);
158
+ })
159
+ .slice(0, MAX_VALUES);
160
+ }
161
+ strings(node, dynamic = false) {
162
+ return this.values(node)
163
+ .flatMap((value) => {
164
+ if (ts.isStringLiteralLike(value))
165
+ return [value.text];
166
+ if (!ts.isTemplateExpression(value))
167
+ return this.atoms(value).filter((item) => typeof item === 'string');
168
+ let paths = [value.head.text];
169
+ for (const span of value.templateSpans) {
170
+ const known = this.atoms(span.expression).map(String);
171
+ const parts = known.length ? known : dynamic ? [':dynamic'] : [];
172
+ paths = paths
173
+ .flatMap((prefix) => parts.map((part) => prefix + part + span.literal.text))
174
+ .slice(0, MAX_VALUES);
175
+ }
176
+ return paths;
177
+ })
178
+ .slice(0, MAX_VALUES);
179
+ }
180
+ }
181
+ //# sourceMappingURL=static-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-values.js","sourceRoot":"","sources":["../../server/static-values.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type ServiceToken } from '@nocobase/service-provider';
2
+ import type { FoundationOverview, FoundationCollectionPage } from '../shared/foundation.js';
3
+ export interface FoundationOverviewOptions {
4
+ /** Collects again instead of answering a result younger than the cache lifetime. */
5
+ readonly refresh?: boolean;
6
+ /** Explicitly calculate exact business row counts. Ordinary refreshes retain the last known count. */
7
+ readonly countRecords?: boolean;
8
+ }
9
+ /** What the application uses of NocoBase Core, collected by this plugin alone. Read-only. */
10
+ export interface FoundationService {
11
+ overview(options?: FoundationOverviewOptions): Promise<FoundationOverview>;
12
+ collections(options: {
13
+ readonly offset: number;
14
+ readonly search: string;
15
+ }): Promise<FoundationCollectionPage | undefined>;
16
+ }
17
+ export declare const foundationServiceToken: ServiceToken<FoundationService>;
18
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../server/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,yBAAyB;IACxC,oFAAoF;IACpF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,sGAAsG;IACtG,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,6FAA6F;AAC7F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC3E,WAAW,CAAC,OAAO,EAAE;QACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC,CAAC;CACnD;AAED,eAAO,MAAM,sBAAsB,EAAE,YAAY,CAAC,iBAAiB,CAGhE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { createServiceToken, } from '@nocobase/service-provider';
2
+ export const foundationServiceToken = createServiceToken('@nocobase/app-plugin-foundation/service');
3
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../server/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAEnB,MAAM,4BAA4B,CAAC;AAuBpC,MAAM,CAAC,MAAM,sBAAsB,GACjC,kBAAkB,CAChB,yCAAyC,CAC1C,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { FoundationCapability, FoundationOverview, FoundationProviderInventory } from './foundation.js';
2
+ /** Show recognized installed capabilities as well as current runtime capabilities; installation never proves use. */
3
+ export declare function availableCapabilities(observations: readonly FoundationCapability[], inventory: FoundationProviderInventory): readonly FoundationCapability[];
4
+ /** Client-only registrations are added to the same model without changing server usage evidence. */
5
+ export declare function withAvailableCapabilities(overview: FoundationOverview, inventory: FoundationProviderInventory): FoundationOverview;
6
+ //# sourceMappingURL=available-capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"available-capabilities.d.ts","sourceRoot":"","sources":["../../shared/available-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AASzB,qHAAqH;AACrH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,SAAS,oBAAoB,EAAE,EAC7C,SAAS,EAAE,2BAA2B,GACrC,SAAS,oBAAoB,EAAE,CA2DjC;AAED,oGAAoG;AACpG,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,EAAE,2BAA2B,GACrC,kBAAkB,CASpB"}
@@ -0,0 +1,66 @@
1
+ const CORE_RUNTIME = new Set([
2
+ 'dataModeling',
3
+ 'interface',
4
+ 'operations',
5
+ 'workflows',
6
+ ]);
7
+ /** Show recognized installed capabilities as well as current runtime capabilities; installation never proves use. */
8
+ export function availableCapabilities(observations, inventory) {
9
+ const known = observations.flatMap((capability) => {
10
+ const providers = inventory.entries.filter((entry) => entry.categories.includes(capability.key));
11
+ const registered = providers.some((entry) => entry.registration === 'observed' &&
12
+ (!inventory.serverRegistrationsComplete ||
13
+ capability.key === 'interface' ||
14
+ entry.evidence.some((source) => source !== 'manifest' && source !== 'clientContribution')));
15
+ if (registered)
16
+ return [capability];
17
+ if (CORE_RUNTIME.has(capability.key) && capability.status !== 'unused')
18
+ return [capability];
19
+ // Older runtimes expose only partial registration evidence; preserve capabilities whose use the collector proved.
20
+ if (!inventory.serverRegistrationsComplete &&
21
+ (capability.status === 'active' || capability.status === 'needsSetup'))
22
+ return [capability];
23
+ if (!providers.some((entry) => entry.installed))
24
+ return [];
25
+ // Keep installed-only capabilities visible, but stale tables and a manifest cannot establish current use.
26
+ // Preserve unreadable observations as unknown rather than turning collection failures into an unused state.
27
+ if (capability.status === null)
28
+ return [capability];
29
+ return [
30
+ {
31
+ ...capability,
32
+ status: 'unused',
33
+ reason: 'installedNotUsed',
34
+ facts: [],
35
+ parts: [],
36
+ },
37
+ ];
38
+ });
39
+ const extensions = inventory.entries
40
+ .filter((entry) => entry.kind === 'plugin' &&
41
+ entry.registration === 'observed' &&
42
+ entry.categories.length === 0)
43
+ .map((entry) => ({
44
+ key: `extension:${entry.name}`,
45
+ title: entry.displayName ?? entry.name,
46
+ ...(entry.description ? { description: entry.description } : {}),
47
+ status: null,
48
+ reason: 'unrecognizedExtension',
49
+ facts: [{ code: 'registeredExtension' }],
50
+ metrics: [],
51
+ parts: [],
52
+ packages: [{ name: entry.name, version: entry.version }],
53
+ completeness: 'complete',
54
+ issues: [],
55
+ }));
56
+ return [...known, ...extensions];
57
+ }
58
+ /** Client-only registrations are added to the same model without changing server usage evidence. */
59
+ export function withAvailableCapabilities(overview, inventory) {
60
+ return {
61
+ ...overview,
62
+ inventory,
63
+ availableCapabilities: availableCapabilities(overview.capabilities, inventory),
64
+ };
65
+ }
66
+ //# sourceMappingURL=available-capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"available-capabilities.js","sourceRoot":"","sources":["../../shared/available-capabilities.ts"],"names":[],"mappings":"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"}