@nocobase/app-plugin-foundation 0.1.0-beta.0 → 0.1.0-beta.2

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 (122) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +17 -3
  3. package/dist/client/api.d.ts +2 -0
  4. package/dist/client/api.d.ts.map +1 -1
  5. package/dist/client/api.js +9 -3
  6. package/dist/client/api.js.map +1 -1
  7. package/dist/client/business-modules.d.ts.map +1 -1
  8. package/dist/client/business-modules.js +6 -0
  9. package/dist/client/business-modules.js.map +1 -1
  10. package/dist/client/components/collections-browser.d.ts +7 -0
  11. package/dist/client/components/collections-browser.d.ts.map +1 -0
  12. package/dist/client/components/collections-browser.js +63 -0
  13. package/dist/client/components/collections-browser.js.map +1 -0
  14. package/dist/client/components/foundation-page.d.ts +2 -1
  15. package/dist/client/components/foundation-page.d.ts.map +1 -1
  16. package/dist/client/components/foundation-page.js +17 -7
  17. package/dist/client/components/foundation-page.js.map +1 -1
  18. package/dist/client/components/module-matrix.d.ts.map +1 -1
  19. package/dist/client/components/module-matrix.js +10 -7
  20. package/dist/client/components/module-matrix.js.map +1 -1
  21. package/dist/client/components/ui/dialog.d.ts +18 -0
  22. package/dist/client/components/ui/dialog.d.ts.map +1 -0
  23. package/dist/client/components/ui/dialog.js +37 -0
  24. package/dist/client/components/ui/dialog.js.map +1 -0
  25. package/dist/client/components/ui/input.d.ts +4 -0
  26. package/dist/client/components/ui/input.d.ts.map +1 -0
  27. package/dist/client/components/ui/input.js +8 -0
  28. package/dist/client/components/ui/input.js.map +1 -0
  29. package/dist/client/components/ui/tooltip.d.ts +8 -0
  30. package/dist/client/components/ui/tooltip.d.ts.map +1 -0
  31. package/dist/client/components/ui/tooltip.js +17 -0
  32. package/dist/client/components/ui/tooltip.js.map +1 -0
  33. package/dist/client/locales/de-DE.d.ts.map +1 -1
  34. package/dist/client/locales/de-DE.js +21 -2
  35. package/dist/client/locales/de-DE.js.map +1 -1
  36. package/dist/client/locales/en-US.d.ts +19 -0
  37. package/dist/client/locales/en-US.d.ts.map +1 -1
  38. package/dist/client/locales/en-US.js +21 -2
  39. package/dist/client/locales/en-US.js.map +1 -1
  40. package/dist/client/locales/es-ES.d.ts.map +1 -1
  41. package/dist/client/locales/es-ES.js +21 -2
  42. package/dist/client/locales/es-ES.js.map +1 -1
  43. package/dist/client/locales/fr-FR.d.ts.map +1 -1
  44. package/dist/client/locales/fr-FR.js +21 -2
  45. package/dist/client/locales/fr-FR.js.map +1 -1
  46. package/dist/client/locales/id-ID.d.ts.map +1 -1
  47. package/dist/client/locales/id-ID.js +21 -2
  48. package/dist/client/locales/id-ID.js.map +1 -1
  49. package/dist/client/locales/ja-JP.d.ts.map +1 -1
  50. package/dist/client/locales/ja-JP.js +21 -2
  51. package/dist/client/locales/ja-JP.js.map +1 -1
  52. package/dist/client/locales/pt-BR.d.ts.map +1 -1
  53. package/dist/client/locales/pt-BR.js +21 -2
  54. package/dist/client/locales/pt-BR.js.map +1 -1
  55. package/dist/client/locales/vi-VN.d.ts.map +1 -1
  56. package/dist/client/locales/vi-VN.js +21 -2
  57. package/dist/client/locales/vi-VN.js.map +1 -1
  58. package/dist/client/locales/zh-CN.d.ts.map +1 -1
  59. package/dist/client/locales/zh-CN.js +21 -2
  60. package/dist/client/locales/zh-CN.js.map +1 -1
  61. package/dist/client/locales/zh-TW.d.ts.map +1 -1
  62. package/dist/client/locales/zh-TW.js +21 -2
  63. package/dist/client/locales/zh-TW.js.map +1 -1
  64. package/dist/server/api-evidence.d.ts +13 -0
  65. package/dist/server/api-evidence.d.ts.map +1 -0
  66. package/dist/server/api-evidence.js +194 -0
  67. package/dist/server/api-evidence.js.map +1 -0
  68. package/dist/server/capabilities/data.d.ts +3 -1
  69. package/dist/server/capabilities/data.d.ts.map +1 -1
  70. package/dist/server/capabilities/data.js +47 -12
  71. package/dist/server/capabilities/data.js.map +1 -1
  72. package/dist/server/capabilities/intelligence.d.ts.map +1 -1
  73. package/dist/server/capabilities/intelligence.js +26 -18
  74. package/dist/server/capabilities/intelligence.js.map +1 -1
  75. package/dist/server/capabilities/types.d.ts +4 -1
  76. package/dist/server/capabilities/types.d.ts.map +1 -1
  77. package/dist/server/capabilities/types.js.map +1 -1
  78. package/dist/server/inventory.d.ts +9 -3
  79. package/dist/server/inventory.d.ts.map +1 -1
  80. package/dist/server/inventory.js +40 -14
  81. package/dist/server/inventory.js.map +1 -1
  82. package/dist/server/module-manifest.d.ts.map +1 -1
  83. package/dist/server/module-manifest.js +1 -0
  84. package/dist/server/module-manifest.js.map +1 -1
  85. package/dist/server/module-sources.d.ts.map +1 -1
  86. package/dist/server/module-sources.js +94 -147
  87. package/dist/server/module-sources.js.map +1 -1
  88. package/dist/server/read-queue.d.ts +10 -0
  89. package/dist/server/read-queue.d.ts.map +1 -0
  90. package/dist/server/read-queue.js +50 -0
  91. package/dist/server/read-queue.js.map +1 -0
  92. package/dist/server/request-evidence.d.ts +14 -0
  93. package/dist/server/request-evidence.d.ts.map +1 -0
  94. package/dist/server/request-evidence.js +179 -0
  95. package/dist/server/request-evidence.js.map +1 -0
  96. package/dist/server/routes/index.d.ts.map +1 -1
  97. package/dist/server/routes/index.js +28 -5
  98. package/dist/server/routes/index.js.map +1 -1
  99. package/dist/server/routes/schemas.d.ts +7 -1
  100. package/dist/server/routes/schemas.d.ts.map +1 -1
  101. package/dist/server/routes/schemas.js +22 -0
  102. package/dist/server/routes/schemas.js.map +1 -1
  103. package/dist/server/services/foundation.d.ts +8 -1
  104. package/dist/server/services/foundation.d.ts.map +1 -1
  105. package/dist/server/services/foundation.js +98 -8
  106. package/dist/server/services/foundation.js.map +1 -1
  107. package/dist/server/source-evidence.d.ts +9 -0
  108. package/dist/server/source-evidence.d.ts.map +1 -1
  109. package/dist/server/source-evidence.js +145 -1
  110. package/dist/server/source-evidence.js.map +1 -1
  111. package/dist/server/static-values.d.ts +18 -0
  112. package/dist/server/static-values.d.ts.map +1 -0
  113. package/dist/server/static-values.js +257 -0
  114. package/dist/server/static-values.js.map +1 -0
  115. package/dist/server/tokens.d.ts +7 -1
  116. package/dist/server/tokens.d.ts.map +1 -1
  117. package/dist/server/tokens.js.map +1 -1
  118. package/dist/shared/foundation.d.ts +13 -0
  119. package/dist/shared/foundation.d.ts.map +1 -1
  120. package/dist/shared/foundation.js.map +1 -1
  121. package/package.json +9 -9
  122. package/skills/nocobase-app-plugin-foundation/SKILL.md +17 -3
@@ -0,0 +1,257 @@
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
+ if (ts.isArrayBindingPattern(node.parent)) {
39
+ const index = node.parent.elements.indexOf(node);
40
+ return containers.flatMap((value) => ts.isArrayLiteralExpression(value) &&
41
+ !value.elements.some(ts.isSpreadElement) &&
42
+ value.elements[index] &&
43
+ !node.dotDotDotToken
44
+ ? next(value.elements[index])
45
+ : []);
46
+ }
47
+ const name = node.propertyName ?? node.name;
48
+ const found = ts.isIdentifier(name) || ts.isStringLiteralLike(name)
49
+ ? containers.flatMap((value) => this.property(value, name.text, seen))
50
+ : [];
51
+ const declared = (ts.isIdentifier(name) || ts.isStringLiteralLike(name)) &&
52
+ containers.some((value) => ts.isObjectLiteralExpression(value)
53
+ ? value.properties.some((entry) => entry.name &&
54
+ (ts.isIdentifier(entry.name) ||
55
+ ts.isStringLiteralLike(entry.name)) &&
56
+ entry.name.text === name.text)
57
+ : ts.isJsxAttributes(value) &&
58
+ value.properties.some((entry) => ts.isJsxAttribute(entry) &&
59
+ entry.name.getText() === name.text));
60
+ return found.length || declared
61
+ ? found
62
+ : node.initializer
63
+ ? next(node.initializer)
64
+ : [];
65
+ }
66
+ if (ts.isVariableDeclaration(node)) {
67
+ if (node.initializer)
68
+ return next(node.initializer);
69
+ const loop = node.parent.parent;
70
+ if (ts.isForOfStatement(loop))
71
+ return this.values(loop.expression, seen)
72
+ .flatMap((value) => ts.isArrayLiteralExpression(value)
73
+ ? value.elements.flatMap(next)
74
+ : [])
75
+ .slice(0, MAX_VALUES);
76
+ return [];
77
+ }
78
+ if (ts.isParenthesizedExpression(node) ||
79
+ ts.isAsExpression(node) ||
80
+ ts.isSatisfiesExpression(node) ||
81
+ ts.isNonNullExpression(node))
82
+ return next(node.expression);
83
+ if (ts.isConditionalExpression(node))
84
+ return this.atoms(node.condition, seen)
85
+ .flatMap((value) => next(value ? node.whenTrue : node.whenFalse))
86
+ .slice(0, MAX_VALUES);
87
+ if (ts.isPropertyAccessExpression(node))
88
+ return this.values(node.expression, seen)
89
+ .flatMap((value) => this.property(value, node.name.text, seen))
90
+ .slice(0, MAX_VALUES);
91
+ return [node];
92
+ }
93
+ hasSpread(node) {
94
+ return ts.isObjectLiteralExpression(node)
95
+ ? node.properties.some(ts.isSpreadAssignment)
96
+ : ts.isJsxAttributes(node) &&
97
+ node.properties.some(ts.isJsxSpreadAttribute);
98
+ }
99
+ property(node, name, seen) {
100
+ if (this.hasSpread(node))
101
+ return [];
102
+ if (ts.isObjectLiteralExpression(node)) {
103
+ const entry = node.properties.find((item) => item.name &&
104
+ (ts.isIdentifier(item.name) || ts.isStringLiteralLike(item.name)) &&
105
+ item.name.text === name);
106
+ const value = entry && ts.isPropertyAssignment(entry)
107
+ ? entry.initializer
108
+ : entry && ts.isShorthandPropertyAssignment(entry)
109
+ ? entry.name
110
+ : undefined;
111
+ return value ? this.values(value, seen) : [];
112
+ }
113
+ if (ts.isJsxAttributes(node)) {
114
+ const entry = node.properties.find((item) => ts.isJsxAttribute(item) && item.name.getText() === name);
115
+ if (entry && ts.isJsxAttribute(entry) && entry.initializer) {
116
+ const value = ts.isJsxExpression(entry.initializer)
117
+ ? entry.initializer.expression
118
+ : entry.initializer;
119
+ return value ? this.values(value, seen) : [];
120
+ }
121
+ }
122
+ return [];
123
+ }
124
+ atoms(node, seen = new Set()) {
125
+ return this.values(node, seen)
126
+ .flatMap((value) => {
127
+ if (ts.isStringLiteralLike(value))
128
+ return [value.text];
129
+ if (ts.isNumericLiteral(value))
130
+ return [Number(value.text)];
131
+ if (value.kind === ts.SyntaxKind.TrueKeyword)
132
+ return [true];
133
+ if (value.kind === ts.SyntaxKind.FalseKeyword)
134
+ return [false];
135
+ if (value.kind === ts.SyntaxKind.NullKeyword)
136
+ return [null];
137
+ if (ts.isTypeOfExpression(value))
138
+ return this.atoms(value.expression, new Set(seen).add(value)).map((item) => typeof item);
139
+ if (ts.isCallExpression(value))
140
+ return this.call(value, new Set(seen).add(value));
141
+ if (ts.isPrefixUnaryExpression(value) &&
142
+ value.operator === ts.SyntaxKind.ExclamationToken)
143
+ return this.atoms(value.operand, new Set(seen).add(value)).map((item) => !item);
144
+ if (!ts.isBinaryExpression(value))
145
+ return [];
146
+ const next = new Set(seen).add(value);
147
+ return this.atoms(value.left, next)
148
+ .flatMap((left) => this.atoms(value.right, next).flatMap((right) => {
149
+ switch (value.operatorToken.kind) {
150
+ case ts.SyntaxKind.EqualsEqualsEqualsToken:
151
+ return [left === right];
152
+ case ts.SyntaxKind.EqualsEqualsToken:
153
+ return left === null ||
154
+ right === null ||
155
+ typeof left === typeof right
156
+ ? [left === right]
157
+ : [];
158
+ case ts.SyntaxKind.ExclamationEqualsEqualsToken:
159
+ return [left !== right];
160
+ case ts.SyntaxKind.BarBarToken:
161
+ return [left || right];
162
+ case ts.SyntaxKind.AmpersandAmpersandToken:
163
+ return [left && right];
164
+ case ts.SyntaxKind.QuestionQuestionToken:
165
+ return [left ?? right];
166
+ case ts.SyntaxKind.PlusToken:
167
+ return typeof left === 'string' || typeof right === 'string'
168
+ ? [String(left) + String(right)]
169
+ : typeof left === 'number' && typeof right === 'number'
170
+ ? [left + right]
171
+ : [];
172
+ default:
173
+ return [];
174
+ }
175
+ }))
176
+ .slice(0, MAX_VALUES);
177
+ })
178
+ .slice(0, MAX_VALUES);
179
+ }
180
+ /** Interpret only literal inputs, local returns and decidable branches; never invoke application code. */
181
+ call(node, seen) {
182
+ if (seen.size >= MAX_VALUES)
183
+ return [];
184
+ if (ts.isIdentifier(node.expression) &&
185
+ node.expression.text === 'String' &&
186
+ !this.analysis.declarations(node.expression).length &&
187
+ node.arguments.length === 1)
188
+ return this.atoms(node.arguments[0], seen).map(String);
189
+ return this.analysis
190
+ .functions(node.expression)
191
+ .flatMap((fn) => {
192
+ if (!('body' in fn) || !fn.body)
193
+ return [];
194
+ const bindings = new Map(this.bindings);
195
+ fn.parameters.forEach((parameter, index) => {
196
+ const argument = node.arguments[index] ?? parameter.initializer;
197
+ bindings.set(parameter, argument ? [argument] : []);
198
+ });
199
+ const evaluator = new StaticValues(this.analysis, bindings);
200
+ const statement = (item) => {
201
+ if (ts.isReturnStatement(item))
202
+ return {
203
+ returned: true,
204
+ values: item.expression
205
+ ? evaluator.atoms(item.expression, seen)
206
+ : [],
207
+ };
208
+ if (ts.isBlock(item)) {
209
+ for (const child of item.statements) {
210
+ const result = statement(child);
211
+ if (result.returned)
212
+ return result;
213
+ }
214
+ return { returned: false, values: [] };
215
+ }
216
+ if (ts.isIfStatement(item)) {
217
+ const condition = [
218
+ ...new Set(evaluator.atoms(item.expression, seen).map(Boolean)),
219
+ ];
220
+ if (condition.length !== 1)
221
+ return { returned: true, values: [] };
222
+ return condition[0]
223
+ ? statement(item.thenStatement)
224
+ : item.elseStatement
225
+ ? statement(item.elseStatement)
226
+ : { returned: false, values: [] };
227
+ }
228
+ // Assignments, loops, throws and opaque statements are not a pure literal conversion.
229
+ return { returned: true, values: [] };
230
+ };
231
+ return ts.isArrowFunction(fn) && !ts.isBlock(fn.body)
232
+ ? evaluator.atoms(fn.body, seen)
233
+ : statement(fn.body).values;
234
+ })
235
+ .slice(0, MAX_VALUES);
236
+ }
237
+ strings(node, dynamic = false) {
238
+ return this.values(node)
239
+ .flatMap((value) => {
240
+ if (ts.isStringLiteralLike(value))
241
+ return [value.text];
242
+ if (!ts.isTemplateExpression(value))
243
+ return this.atoms(value).filter((item) => typeof item === 'string');
244
+ let paths = [value.head.text];
245
+ for (const span of value.templateSpans) {
246
+ const known = this.atoms(span.expression).map(String);
247
+ const parts = known.length ? known : dynamic ? [':dynamic'] : [];
248
+ paths = paths
249
+ .flatMap((prefix) => parts.map((part) => prefix + part + span.literal.text))
250
+ .slice(0, MAX_VALUES);
251
+ }
252
+ return paths;
253
+ })
254
+ .slice(0, MAX_VALUES);
255
+ }
256
+ }
257
+ //# 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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"}
@@ -1,12 +1,18 @@
1
1
  import { type ServiceToken } from '@nocobase/service-provider';
2
- import type { FoundationOverview } from '../shared/foundation.js';
2
+ import type { FoundationOverview, FoundationCollectionPage } from '../shared/foundation.js';
3
3
  export interface FoundationOverviewOptions {
4
4
  /** Collects again instead of answering a result younger than the cache lifetime. */
5
5
  readonly refresh?: boolean;
6
+ /** Explicitly calculate exact business row counts. Ordinary refreshes retain the last known count. */
7
+ readonly countRecords?: boolean;
6
8
  }
7
9
  /** What the application uses of NocoBase Core, collected by this plugin alone. Read-only. */
8
10
  export interface FoundationService {
9
11
  overview(options?: FoundationOverviewOptions): Promise<FoundationOverview>;
12
+ collections(options: {
13
+ readonly offset: number;
14
+ readonly search: string;
15
+ }): Promise<FoundationCollectionPage | undefined>;
10
16
  }
11
17
  export declare const foundationServiceToken: ServiceToken<FoundationService>;
12
18
  //# sourceMappingURL=tokens.d.ts.map
@@ -1 +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,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,WAAW,yBAAyB;IACxC,oFAAoF;IACpF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,6FAA6F;AAC7F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC5E;AAED,eAAO,MAAM,sBAAsB,EAAE,YAAY,CAAC,iBAAiB,CAGhE,CAAC"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../server/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAEnB,MAAM,4BAA4B,CAAC;AAcpC,MAAM,CAAC,MAAM,sBAAsB,GACjC,kBAAkB,CAChB,yCAAyC,CAC1C,CAAC"}
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"}
@@ -79,16 +79,28 @@ export interface FoundationOverview {
79
79
  readonly moduleSources?: FoundationModuleSources;
80
80
  /** When this result was collected, RFC 3339. A cached result keeps its original time. */
81
81
  readonly checkedAt: string;
82
+ /** The independent collection time of the last successful, explicitly requested business row count. */
83
+ readonly recordCountCheckedAt?: string;
82
84
  readonly durationMs: number;
83
85
  /** The database connection the statistics read: always the default one. */
84
86
  readonly connection: string;
85
87
  }
88
+ /** One bounded, on-demand page of application-owned Collections. */
89
+ export interface FoundationCollectionPage {
90
+ readonly items: readonly {
91
+ readonly name: string;
92
+ readonly title?: string;
93
+ readonly kind: string;
94
+ }[];
95
+ readonly total: number;
96
+ }
86
97
  export interface FoundationModuleSource {
87
98
  readonly packageName: string;
88
99
  readonly routeName: string;
89
100
  /** Value imports reachable from the page; type-only imports and installed-only packages are excluded. */
90
101
  readonly providers: readonly string[];
91
102
  readonly apiProviders?: readonly string[];
103
+ readonly collections?: readonly string[];
92
104
  readonly complete: boolean;
93
105
  }
94
106
  export interface FoundationModuleSources {
@@ -99,6 +111,7 @@ export interface FoundationModuleLink {
99
111
  readonly capability: FoundationCapabilityKey;
100
112
  readonly evidence: readonly ('page' | 'authentication' | 'authorization' | 'provider' | 'source' | 'apiSource')[];
101
113
  readonly providers: readonly string[];
114
+ readonly collections?: readonly string[];
102
115
  }
103
116
  export interface FoundationBusinessModule {
104
117
  readonly id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"foundation.d.ts","sourceRoot":"","sources":["../../shared/foundation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"foundation.d.ts","sourceRoot":"","sources":["../../shared/foundation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"foundation.js","sourceRoot":"","sources":["../../shared/foundation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yHAAyH;AACzH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,cAAc;IACd,OAAO;IACP,uBAAuB;IACvB,aAAa;IACb,WAAW;IACX,UAAU;IACV,WAAW;IACX,MAAM;IACN,eAAe;IACf,cAAc;IACd,WAAW;IACX,OAAO;IACP,YAAY;CACJ,CAAC;AAaX,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC9D,QAAQ;IACR,YAAY;IACZ,QAAQ;CACT,CAAC;AAsJF,uFAAuF;AACvF,MAAM,CAAC,MAAM,qBAAqB,GAG5B;IACJ,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE;IACzD,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,EAAE,UAAU,EAAE;IAC3D,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC/C,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE;IAClD,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,oBAAoB,EAAE;IAC7D,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE;CACnD,CAAC;AAEF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEjD,kDAAkD;AAClD,MAAM,CAAC,MAAM,yBAAyB,GAAG,iCAAiC,CAAC"}
1
+ {"version":3,"file":"foundation.js","sourceRoot":"","sources":["../../shared/foundation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yHAAyH;AACzH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,cAAc;IACd,OAAO;IACP,uBAAuB;IACvB,aAAa;IACb,WAAW;IACX,UAAU;IACV,WAAW;IACX,MAAM;IACN,eAAe;IACf,cAAc;IACd,WAAW;IACX,OAAO;IACP,YAAY;CACJ,CAAC;AAaX,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC9D,QAAQ;IACR,YAAY;IACZ,QAAQ;CACT,CAAC;AAoKF,uFAAuF;AACvF,MAAM,CAAC,MAAM,qBAAqB,GAG5B;IACJ,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE;IACzD,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,EAAE,UAAU,EAAE;IAC3D,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC/C,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE;IAClD,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,oBAAoB,EAAE;IAC7D,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE;CACnD,CAAC;AAEF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEjD,kDAAkD;AAClD,MAAM,CAAC,MAAM,yBAAyB,GAAG,iCAAiC,CAAC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@nocobase/app-plugin-foundation",
3
3
  "displayName": "App Foundation",
4
4
  "description": "Shows which NocoBase Core capabilities an application uses, with live evidence, for its unrestricted administrators.",
5
- "version": "0.1.0-beta.0",
5
+ "version": "0.1.0-beta.2",
6
6
  "type": "module",
7
7
  "prettier": "@nocobase/dev-config/prettier",
8
8
  "engines": {
@@ -63,12 +63,12 @@
63
63
  "cn": "^0.4.0",
64
64
  "lucide-react": "^0.487.0",
65
65
  "react": "^19.0.0",
66
- "@nocobase/app-cli": "^1.0.0-beta.26",
67
- "@nocobase/app-client": "^4.0.0-beta.1",
68
- "@nocobase/app-plugin-authentication": "^2.0.0-beta.12",
69
- "@nocobase/app-plugin-authorization": "^1.0.0-beta.30",
70
- "@nocobase/app-server": "^3.0.0-beta.1",
71
- "@nocobase/db": "^1.0.0-beta.21",
66
+ "@nocobase/app-cli": "^1.0.0-beta.27",
67
+ "@nocobase/app-client": "^4.0.0-beta.2",
68
+ "@nocobase/app-plugin-authentication": "^2.0.0-beta.13",
69
+ "@nocobase/app-plugin-authorization": "^1.0.0-beta.31",
70
+ "@nocobase/app-server": "^3.0.0-beta.3",
71
+ "@nocobase/db": "^1.0.0-beta.22",
72
72
  "@nocobase/i18n": "^2.0.0-beta.1",
73
73
  "@nocobase/service-provider": "^0.0.2-beta.2"
74
74
  },
@@ -89,8 +89,8 @@
89
89
  "vitest": "^4.1.10",
90
90
  "@nocobase/app-plugin-api-keys": "1.0.0-beta.18",
91
91
  "@nocobase/app-plugin-mail": "1.0.0-beta.16",
92
- "@nocobase/app-plugin-notification": "1.0.0-beta.29",
93
- "@nocobase/app-plugin-notification-in-app": "1.0.0-beta.27",
92
+ "@nocobase/app-plugin-notification": "2.0.0-beta.0",
93
+ "@nocobase/app-plugin-notification-in-app": "2.0.0-beta.0",
94
94
  "@nocobase/app-plugin-scheduler": "1.0.0-beta.19",
95
95
  "@nocobase/app-testing": "0.1.0-beta.6",
96
96
  "@nocobase/dev-config": "0.1.0-beta.24"
@@ -14,8 +14,9 @@ Do not use it to grant the page to a role: it admits only unrestricted access by
14
14
 
15
15
  ## Public surfaces
16
16
 
17
- - Server plugin: `@nocobase/app-plugin-foundation/server` (default export). Exports `foundationServiceToken`, whose `overview({ refresh? })` answers the same result as the route.
18
- - Server route: `GET /api/foundation/overview`, optional `refresh=true`. Requires a session or API key of an identity with unrestricted access; anyone else gets `403` with reason `FOUNDATION_FORBIDDEN`.
17
+ - Server plugin: `@nocobase/app-plugin-foundation/server` (default export). Exports `foundationServiceToken`, whose `overview({ refresh?, countRecords? })` answers the same result as the route.
18
+ - Server route: `GET /api/foundation/overview`, optional `refresh=true` or explicit `countRecords=true`. Ordinary loads and refreshes do not count every business table. Requires a session or API key of an identity with unrestricted access; anyone else gets `403` with reason `FOUNDATION_FORBIDDEN`.
19
+ - Collection list: `GET /api/foundation/collections?offset=0&search=orders`, the same unrestricted access boundary, at most 50 entries in `{ data, meta: { total } }`. Search covers the full owned catalog, not just the displayed page.
19
20
  - Client plugin: `@nocobase/app-plugin-foundation/client` (default export). `foundation()` adds the page at `/foundation` with a menu entry; options `path`, `navigation: false`, `routes: false` and `settingsGroup: true`. The default template uses `settingsGroup: true` so a bare application already has a localized settings group containing only the protected Foundation page.
20
21
  - Page component: `FoundationPage` from `@nocobase/app-plugin-foundation/client/pages`, for an application that routes it itself (`foundation({ routes: false })`). Declare such a route with `authz: 'unrestricted'`.
21
22
 
@@ -35,6 +36,7 @@ The authentication and authorization plugins are registered, as in the default t
35
36
  - In use means wired in: a persisted lifecycle, an enabled schedule, a connected mailbox, a configured notification channel, an API key that has been used. Zero uses still count as in use.
36
37
  - Needs setup names what is missing in its reason, such as `noChannel` or `noDrive`.
37
38
  - Undetermined means the evidence could not be read this time, never that it is unused; the details list what could not be read.
39
+ - AI and agents are in use with an enabled model service or a registered Runner. Native OnlineAgent and model gateway calls do not require an `agAgents` record. Stored Agent definitions and historical usage alone do not prove current configuration. If neither execution path is confirmed and a required read failed, leave the status undetermined. Preserve another confirmed active path when optional statistics fail; never turn a failed read into zero or a missing-configuration claim.
38
40
  - Business record ownership uses `server/catalog.ts`. If an unclassified runtime extension makes ownership uncertain, business counts are withheld; add a supported ownership adapter rather than interpreting them as zero.
39
41
 
40
42
  ## Verification
@@ -57,12 +59,24 @@ The host records immutable explicit Server and Client plugin registrations, incl
57
59
 
58
60
  Modules follow current registered navigation, with descendant pages grouped under their top-level menu module and translated by their owning namespace. No business-module names or capability relationships are configured in the application. The matrix and module tags use the same dynamic capabilities as the band. Hover or focus a module to highlight its associations; select a checkmark to see evidence and the capability's existing “Without the foundation” explanation.
59
61
 
60
- The plugin combines page, authentication and authorization declarations, provider ownership and readable static page dependencies. Follow only referenced values from the selected page export; unused imports, unrelated shared-file exports and uncalled class methods are excluded. A statically matched literal API-client request can additionally establish dependencies on the matching root-mounted endpoint handlers and their referenced values, never every dependency in the router file. A multi-category provider identity alone does not establish all its categories. Opaque dependency injection and generic request wrappers stay unassociated. These references describe integration, not per-module runtime activity; do not turn them into execution counts. The server parses bounded package-local sources without importing application modules, running component loaders or exposing source paths. Deployed or custom layouts without readable declarations keep their runtime navigation and access evidence. Overrides, computed routing and opaque backend services may remain unassociated. Blank cells mean not identified, not unused. Keep all matrix logic in this plugin; no other plugin reports or application-specific mapping is required.
62
+ The plugin combines page, authentication and authorization declarations, provider ownership and readable static page dependencies. Follow only referenced values from the selected page export; unused imports, unrelated shared-file exports and uncalled class methods are excluded. A statically matched literal API-client request can additionally establish dependencies on the matching root-mounted endpoint handlers and their referenced values, never every dependency in the router file. A multi-category provider identity alone does not establish all its categories. Selected local request helpers can preserve literal path/method arguments. Nested Hono prefixes and base paths, explicitly exposed Repository API actions, and unambiguous local singleton/instance bindings to a service constructor and selected method are recognized. Opaque factories and competing service bindings stay unassociated. These references describe integration, not per-module runtime activity; do not turn them into execution counts. The server parses bounded package-local sources without importing application modules, running component loaders or exposing source paths. Deployed or custom layouts without readable declarations keep their runtime navigation and access evidence. Overrides, computed routing and opaque backend services may remain unassociated. Blank cells mean not identified, not unused. Keep all matrix logic in this plugin; no other plugin reports or application-specific mapping is required.
61
63
 
62
64
  Capability details include their associated business modules. API dependency associations require both the statically recognized HTTP method and path; an omitted method follows the API client's `GET` default. A refresh failure is shown while retaining the last successful result and its collection time. A `401` or `403` hides the cached overview. Do not describe cached data as freshly collected or type-only references as runtime integration.
63
65
 
66
+ ### Existing application analysis
67
+
68
+ For existing applications, the source analyzer also recognizes `useService(apiClientToken)`, React `useCallback` request wrappers, literal tuple-generated routes, decidable local literal conversions and Hono registration helpers. Request path and method bindings stay paired per call. After updating the Foundation plugin, rebuild the application to regenerate `dist/server/foundation-modules.json`; merely refreshing an old deployment cannot repair associations missing from its build artifact. Do not hand-edit that artifact or add a per-application capability map.
69
+
64
70
  ## Sidebar grouping
65
71
 
66
72
  The host can call `groupFoundationNavigation(items)` from `@nocobase/app-plugin-foundation/client` in its existing `client/lib/navigation-transform.ts` hook, after permission filtering. The helper places an already-visible Foundation entry last in the existing `settings` navigation group, avoiding a separate sidebar group gap. Pass the host’s group name as the second argument when different. It preserves route identity, `/foundation`, authorization and other navigation metadata, never creates a hidden entry and leaves Foundation standalone if no settings group exists. The App needs only the hook call; grouping logic stays in this plugin and does not change Core or the sidebar renderer.
67
73
 
68
74
  When business settings are added, preserve the template navigation transform: it merges the initial Foundation settings group into the application settings group without changing the page URL or access boundary. Do not remove the initial Foundation entry when keeping unused business administration unregistered.
75
+
76
+ ## Large catalogs and count freshness
77
+
78
+ Only five Collection names appear in the overview. The page loads the full-list browser only when opened, with search and 50 entries per page. Exact business row totals are explicit, bounded operations; the page retains the last successful count and shows its original `recordCountCheckedAt`. A normal Refresh does not recount rows, and a process restart clears this in-memory count. Database reads share four service-wide slots; a timed-out scan stops scheduling work, while driver queries already in progress retain their slots until they settle. Known table totals survive a scan timeout; unavailable counts are not zero. Hover or focus a matrix column icon to read its localized capability name.
79
+
80
+ Literal JSX props, destructured defaults, loader aliases and finite literal array-generated routes/endpoints are statically recognized. Unknown factories and computed values remain unassociated; application code is never executed.
81
+
82
+ Collection evidence uses at most five compact name tags and the total count on the overview. The full catalog opens in a temporary dialog with a bounded scrolling body and fixed pagination controls; opening it does not expand the capability card. Search is debounced by 250 ms and waits for IME composition to finish; Enter applies it immediately. Collection titles and logical names are listed without opening a schema inspector. Closing returns focus to its trigger. Loading, empty search, recoverable failure and denied-access states remain inside the dialog.