@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,482 @@
1
+ import { readFile, realpath, stat } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import ts from 'typescript';
4
+ import { SourceEvidence } from './source-evidence.js';
5
+ import { readModuleManifest } from './module-manifest.js';
6
+ import { apiDependencies as analyzeApiDependencies } from './api-evidence.js';
7
+ import { pageRequests } from './request-evidence.js';
8
+ import { StaticValues } from './static-values.js';
9
+ const MAX_FILES = 400;
10
+ const MAX_BYTES = 512_000;
11
+ const SOURCE_SUFFIXES = ['.ts', '.tsx', '.js', '.jsx', '.mjs'];
12
+ /** Reads static declarations and value imports only. Never imports an application module or invokes a loader. */
13
+ export async function collectModuleSources(rootDir, runtime = []) {
14
+ const routes = [];
15
+ let complete = true;
16
+ const roots = new Map([['', rootDir]]);
17
+ let overridden = new Set();
18
+ for (const entry of runtime)
19
+ if (entry.rootDir)
20
+ roots.set(entry.name, entry.rootDir);
21
+ for (const [name, directory] of roots) {
22
+ if (!directory || name === '@nocobase/app-plugin-foundation')
23
+ continue;
24
+ try {
25
+ const graph = await SourceGraph.create(directory);
26
+ if (!name)
27
+ overridden = await graph.overrides();
28
+ const packageName = name || graph.packageName;
29
+ if (!packageName) {
30
+ complete = false;
31
+ continue;
32
+ }
33
+ const entry = await graph.entry();
34
+ if (!entry) {
35
+ const built = !name
36
+ ? await readModuleManifest(directory, packageName)
37
+ : undefined;
38
+ if (built) {
39
+ routes.push(...built.routes);
40
+ complete &&= built.complete;
41
+ }
42
+ else
43
+ complete = false;
44
+ continue;
45
+ }
46
+ const declarationFiles = await graph.walk(entry, false);
47
+ await graph.prepare(entry);
48
+ const endpoints = await graph.apiDependencies();
49
+ for (const source of declarationFiles.sources) {
50
+ const declarations = graph.routeDeclarations(source.ast);
51
+ for (const declaration of declarations) {
52
+ if (overridden.has(`${packageName}:${declaration.name}`)) {
53
+ routes.push({
54
+ packageName,
55
+ routeName: declaration.name,
56
+ providers: [],
57
+ complete: false,
58
+ });
59
+ continue;
60
+ }
61
+ const imports = graph.loaderImports(declaration.loader, declaration.bindings);
62
+ const providers = new Set();
63
+ const apiProviders = new Set();
64
+ const collections = new Set();
65
+ let routeComplete = declarationFiles.complete && imports.length > 0;
66
+ for (const { from, specifier } of imports) {
67
+ const target = await graph.local(from, specifier);
68
+ if (!target) {
69
+ if (!isLocal(specifier))
70
+ addProvider(providers, specifier);
71
+ else
72
+ routeComplete = false;
73
+ continue;
74
+ }
75
+ const page = graph.evidence(target);
76
+ for (const provider of page.providers)
77
+ providers.add(provider);
78
+ for (const request of graph.requests(page.sources)) {
79
+ for (const endpoint of endpoints) {
80
+ if (request.method === endpoint.method &&
81
+ sameApiPath(request.path, endpoint.path)) {
82
+ for (const provider of endpoint.providers)
83
+ apiProviders.add(provider);
84
+ for (const collection of endpoint.collections ?? [])
85
+ collections.add(collection);
86
+ }
87
+ }
88
+ }
89
+ routeComplete &&= page.complete;
90
+ }
91
+ routes.push({
92
+ packageName,
93
+ routeName: declaration.name,
94
+ providers: [...providers].sort(),
95
+ ...(apiProviders.size
96
+ ? { apiProviders: [...apiProviders].sort() }
97
+ : {}),
98
+ ...(collections.size
99
+ ? { collections: [...collections].sort() }
100
+ : {}),
101
+ complete: routeComplete,
102
+ });
103
+ }
104
+ }
105
+ complete &&= declarationFiles.complete;
106
+ }
107
+ catch {
108
+ complete = false;
109
+ }
110
+ }
111
+ return { routes, complete };
112
+ }
113
+ /** A bounded package-local graph; symlinks, aliases and relative paths cannot escape the owning package. */
114
+ class SourceGraph {
115
+ root;
116
+ packageName;
117
+ aliases;
118
+ files = new Map();
119
+ analysis;
120
+ constructor(root, packageName, aliases) {
121
+ this.root = root;
122
+ this.packageName = packageName;
123
+ this.aliases = aliases;
124
+ }
125
+ static async create(root) {
126
+ const directory = await realpath(root);
127
+ const manifest = JSON.parse(await readFile(path.join(directory, 'package.json'), 'utf8'));
128
+ const record = isRecord(manifest) ? manifest : {};
129
+ return new SourceGraph(directory, typeof record.name === 'string' ? record.name : '', isRecord(record.imports) ? record.imports : {});
130
+ }
131
+ async resolve(base) {
132
+ if (!inside(this.root, path.resolve(base)))
133
+ return undefined;
134
+ const extension = path.extname(base);
135
+ const stem = SOURCE_SUFFIXES.includes(extension)
136
+ ? base.slice(0, -extension.length)
137
+ : base;
138
+ for (const candidate of [
139
+ ...SOURCE_SUFFIXES.map((suffix) => stem + suffix),
140
+ base,
141
+ ...SOURCE_SUFFIXES.map((suffix) => path.join(base, 'index' + suffix)),
142
+ ]) {
143
+ try {
144
+ const file = await realpath(candidate);
145
+ if (!SOURCE_SUFFIXES.includes(path.extname(file)) ||
146
+ !inside(this.root, file) ||
147
+ path
148
+ .relative(this.root, file)
149
+ .split(path.sep)
150
+ .includes('node_modules'))
151
+ continue;
152
+ if ((await stat(file)).isFile())
153
+ return file;
154
+ }
155
+ catch {
156
+ /* Missing alternatives are expected when resolving compiled .js references to .tsx sources. */
157
+ }
158
+ }
159
+ return undefined;
160
+ }
161
+ async entry() {
162
+ return ((await this.resolve(path.join(this.root, 'client/routes.js'))) ??
163
+ (await this.resolve(path.join(this.root, 'dist/client/routes.js'))));
164
+ }
165
+ async prepare(entry) {
166
+ await this.walk(entry, true);
167
+ const server = (await this.resolve(path.join(this.root, 'server/routes/index.js'))) ??
168
+ (await this.resolve(path.join(this.root, 'server/routes.js')));
169
+ if (server)
170
+ await this.walk(server, false);
171
+ const providerEntries = [];
172
+ for (const name of [
173
+ 'server/providers/index.js',
174
+ 'server/providers.js',
175
+ 'server/service-provider.js',
176
+ ]) {
177
+ const provider = await this.resolve(path.join(this.root, name));
178
+ if (provider) {
179
+ providerEntries.push(provider);
180
+ await this.walk(provider, false);
181
+ }
182
+ }
183
+ const resolutions = new Map();
184
+ for (const source of this.files.values()) {
185
+ if (!source)
186
+ continue;
187
+ for (const specifier of [
188
+ ...source.imports,
189
+ ...dynamicImports(source.ast),
190
+ ]) {
191
+ const target = await this.local(source.file, specifier);
192
+ if (target)
193
+ resolutions.set(`${source.file}\0${specifier}`, target);
194
+ }
195
+ }
196
+ this.analysis = new SourceEvidence([...this.files.values()].filter((source) => Boolean(source)), resolutions);
197
+ this.analysis.registerServices(providerEntries);
198
+ }
199
+ evidence(file, roots) {
200
+ const slice = this.analysis?.collect(file, roots);
201
+ const providers = new Set();
202
+ for (const reference of slice?.references ?? [])
203
+ addProvider(providers, reference);
204
+ return {
205
+ providers,
206
+ complete: slice?.complete ?? false,
207
+ sources: [...(slice?.nodes ?? [])].flatMap(([name, nodes]) => {
208
+ const source = this.files.get(name);
209
+ return source ? [{ ...source, nodes }] : [];
210
+ }),
211
+ };
212
+ }
213
+ requests(sources) {
214
+ return this.analysis ? pageRequests(sources, this.analysis) : [];
215
+ }
216
+ routeDeclarations(ast) {
217
+ if (!this.analysis)
218
+ return [];
219
+ const analysis = this.analysis;
220
+ const declarations = [];
221
+ let visits = 0;
222
+ const visit = (node, bindings) => {
223
+ if (++visits > 100_000)
224
+ return;
225
+ const literals = new StaticValues(analysis, bindings);
226
+ if (ts.isCallExpression(node) &&
227
+ ts.isPropertyAccessExpression(node.expression) &&
228
+ node.expression.name.text === 'map') {
229
+ const arrays = literals
230
+ .values(node.expression.expression)
231
+ .filter(ts.isArrayLiteralExpression);
232
+ const callback = node.arguments[0];
233
+ if (arrays.length === 1 &&
234
+ arrays[0].elements.length <= 32 &&
235
+ !arrays[0].elements.some(ts.isSpreadElement) &&
236
+ callback &&
237
+ (ts.isArrowFunction(callback) || ts.isFunctionExpression(callback)) &&
238
+ callback.parameters[0]) {
239
+ for (const element of arrays[0].elements) {
240
+ const context = new Map(bindings);
241
+ context.set(callback.parameters[0], [element]);
242
+ visit(callback.body, context);
243
+ }
244
+ return;
245
+ }
246
+ }
247
+ if (ts.isObjectLiteralExpression(node)) {
248
+ const name = property(node, 'name');
249
+ const loader = property(node, 'componentLoader');
250
+ if (name && loader)
251
+ for (const routeName of literals.strings(name))
252
+ declarations.push({ name: routeName, loader, bindings });
253
+ }
254
+ ts.forEachChild(node, (child) => visit(child, bindings));
255
+ };
256
+ visit(ast, new Map());
257
+ return declarations;
258
+ }
259
+ loaderImports(node, bindings) {
260
+ const literals = this.analysis && new StaticValues(this.analysis, bindings);
261
+ return (this.analysis?.values(node) ?? [node]).flatMap((value) => {
262
+ const body = ts.isArrowFunction(value) && !ts.isBlock(value.body)
263
+ ? value.body
264
+ : value;
265
+ return (literals?.values(body) ?? [body]).flatMap((selected) => importsIn(selected).map((specifier) => ({
266
+ from: selected.getSourceFile().fileName,
267
+ specifier,
268
+ })));
269
+ });
270
+ }
271
+ async overrides() {
272
+ const ids = new Set();
273
+ const entry = await this.resolve(path.join(this.root, 'client/route-overrides.js'));
274
+ if (!entry)
275
+ return ids;
276
+ const graph = await this.walk(entry, false);
277
+ for (const source of graph.sources) {
278
+ const visit = (node) => {
279
+ if (ts.isObjectLiteralExpression(node)) {
280
+ const id = property(node, 'routeId');
281
+ if (id && ts.isStringLiteralLike(id))
282
+ ids.add(id.text);
283
+ }
284
+ ts.forEachChild(node, visit);
285
+ };
286
+ visit(source.ast);
287
+ }
288
+ return ids;
289
+ }
290
+ async apiDependencies() {
291
+ const entry = (await this.resolve(path.join(this.root, 'server/routes/index.js'))) ??
292
+ (await this.resolve(path.join(this.root, 'server/routes.js')));
293
+ const source = entry && this.files.get(entry);
294
+ if (!source || !this.analysis)
295
+ return [];
296
+ const graph = this.evidence(source.file);
297
+ return analyzeApiDependencies(source.ast, graph.sources, this.analysis, (file, nodes) => [...this.evidence(file, nodes).providers].sort());
298
+ }
299
+ async local(from, specifier) {
300
+ if (specifier.startsWith('.'))
301
+ return this.resolve(path.resolve(path.dirname(from), specifier));
302
+ if (!specifier.startsWith('#'))
303
+ return undefined;
304
+ for (const [alias, value] of Object.entries(this.aliases).sort(([a], [b]) => b.length - a.length)) {
305
+ const star = alias.indexOf('*');
306
+ const matches = star < 0
307
+ ? alias === specifier
308
+ : specifier.startsWith(alias.slice(0, star)) &&
309
+ specifier.endsWith(alias.slice(star + 1));
310
+ if (!matches)
311
+ continue;
312
+ const replacement = star < 0
313
+ ? ''
314
+ : specifier.slice(star, specifier.length - (alias.length - star - 1));
315
+ for (const target of targets(value)) {
316
+ if (!target.startsWith('./'))
317
+ continue;
318
+ const resolved = await this.resolve(path.resolve(this.root, target.replace('*', replacement)));
319
+ if (resolved)
320
+ return resolved;
321
+ }
322
+ }
323
+ return undefined;
324
+ }
325
+ async walk(entry, includePages) {
326
+ const pending = [entry];
327
+ const visited = new Set();
328
+ const sources = [];
329
+ const providers = new Set();
330
+ let complete = true;
331
+ while (pending.length) {
332
+ const file = pending.shift();
333
+ if (!file || visited.has(file))
334
+ continue;
335
+ visited.add(file);
336
+ const source = await this.read(file);
337
+ if (!source) {
338
+ complete = false;
339
+ continue;
340
+ }
341
+ sources.push(source);
342
+ for (const specifier of source.imports) {
343
+ if (!isLocal(specifier)) {
344
+ addProvider(providers, specifier);
345
+ continue;
346
+ }
347
+ const target = await this.local(file, specifier);
348
+ if (!target) {
349
+ complete = false;
350
+ continue;
351
+ }
352
+ pending.push(target);
353
+ }
354
+ if (includePages) {
355
+ for (const specifier of dynamicImports(source.ast)) {
356
+ const target = await this.local(file, specifier);
357
+ if (target)
358
+ pending.push(target);
359
+ else if (isLocal(specifier))
360
+ complete = false;
361
+ else
362
+ addProvider(providers, specifier);
363
+ }
364
+ }
365
+ }
366
+ return { sources, providers, complete };
367
+ }
368
+ async read(file) {
369
+ if (this.files.has(file))
370
+ return this.files.get(file);
371
+ if (this.files.size >= MAX_FILES)
372
+ return undefined;
373
+ this.files.set(file, undefined);
374
+ try {
375
+ if ((await stat(file)).size > MAX_BYTES)
376
+ return undefined;
377
+ const ast = ts.createSourceFile(file, await readFile(file, 'utf8'), ts.ScriptTarget.Latest, true);
378
+ const source = { file, ast, imports: staticImports(ast) };
379
+ this.files.set(file, source);
380
+ return source;
381
+ }
382
+ catch {
383
+ return undefined;
384
+ }
385
+ }
386
+ }
387
+ function property(object, name) {
388
+ const entry = object.properties.find((item) => item.name &&
389
+ (ts.isIdentifier(item.name) || ts.isStringLiteralLike(item.name)) &&
390
+ item.name.text === name);
391
+ return entry && ts.isPropertyAssignment(entry)
392
+ ? entry.initializer
393
+ : undefined;
394
+ }
395
+ function staticImports(node) {
396
+ return node.statements.flatMap((statement) => {
397
+ if (ts.isImportDeclaration(statement) &&
398
+ ts.isStringLiteralLike(statement.moduleSpecifier)) {
399
+ const clause = statement.importClause;
400
+ if (clause?.isTypeOnly)
401
+ return [];
402
+ if (clause?.namedBindings &&
403
+ ts.isNamedImports(clause.namedBindings) &&
404
+ !clause.name &&
405
+ clause.namedBindings.elements.length > 0 &&
406
+ clause.namedBindings.elements.every((element) => element.isTypeOnly))
407
+ return [];
408
+ return [statement.moduleSpecifier.text];
409
+ }
410
+ if (ts.isExportDeclaration(statement) &&
411
+ !statement.isTypeOnly &&
412
+ statement.moduleSpecifier &&
413
+ ts.isStringLiteralLike(statement.moduleSpecifier)) {
414
+ if (statement.exportClause &&
415
+ ts.isNamedExports(statement.exportClause) &&
416
+ statement.exportClause.elements.length > 0 &&
417
+ statement.exportClause.elements.every((element) => element.isTypeOnly))
418
+ return [];
419
+ return [statement.moduleSpecifier.text];
420
+ }
421
+ return [];
422
+ });
423
+ }
424
+ function dynamicImports(node) {
425
+ return importsIn(node);
426
+ }
427
+ function sameApiPath(request, endpoint) {
428
+ const segments = (value) => value.split('?')[0].split('/').filter(Boolean);
429
+ const left = segments(request), right = segments(endpoint);
430
+ return (left.length === right.length &&
431
+ left.every((part, index) => right[index]?.startsWith(':') ? part.length > 0 : part === right[index]));
432
+ }
433
+ function importsIn(node) {
434
+ const found = [];
435
+ const visit = (child) => {
436
+ if (ts.isCallExpression(child) &&
437
+ child.expression.kind === ts.SyntaxKind.ImportKeyword &&
438
+ child.arguments[0] &&
439
+ ts.isStringLiteralLike(child.arguments[0]))
440
+ found.push(child.arguments[0].text);
441
+ ts.forEachChild(child, visit);
442
+ };
443
+ visit(node);
444
+ return found;
445
+ }
446
+ function packageOf(specifier) {
447
+ return specifier
448
+ .split('/')
449
+ .slice(0, specifier.startsWith('@') ? 2 : 1)
450
+ .join('/');
451
+ }
452
+ function addProvider(providers, specifier) {
453
+ const name = packageOf(specifier);
454
+ // The server SDK also provides routing and configuration. Those generic imports do not establish use of jobs,
455
+ // queues, secrets or caching merely because the SDK as a whole provides operational facilities.
456
+ if (name === '@nocobase/app-server' &&
457
+ !/^@nocobase\/app-server\/(?:jobs|queue|secrets|caching)(?:\/|$)/.test(specifier))
458
+ return;
459
+ providers.add(name);
460
+ }
461
+ function isLocal(specifier) {
462
+ return (specifier.startsWith('.') ||
463
+ specifier.startsWith('#') ||
464
+ specifier.startsWith('/'));
465
+ }
466
+ function inside(root, file) {
467
+ const relative = path.relative(root, file);
468
+ return (relative !== '..' &&
469
+ !relative.startsWith(`..${path.sep}`) &&
470
+ !path.isAbsolute(relative));
471
+ }
472
+ function isRecord(value) {
473
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
474
+ }
475
+ function targets(value) {
476
+ if (typeof value === 'string')
477
+ return [value];
478
+ if (!isRecord(value))
479
+ return [];
480
+ return [value.development, value.import, value.default].flatMap((item) => targets(item));
481
+ }
482
+ //# sourceMappingURL=module-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-sources.js","sourceRoot":"","sources":["../../server/module-sources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Reads the manifests of the packages the application resolves, the way Node resolves a bare specifier from the
3
+ * application's root: `node_modules/<name>` in that directory and in each one above it. Reading from the application
4
+ * rather than from this plugin or the process's working directory reports what the application actually runs, which
5
+ * is also what a deployment that starts elsewhere has installed.
6
+ */
7
+ export declare class InstalledPackages {
8
+ private readonly rootDir;
9
+ private readonly manifests;
10
+ constructor(rootDir: string);
11
+ /** The installed version of a package, or `undefined` when the application does not resolve it. */
12
+ version(name: string): Promise<string | undefined>;
13
+ /** The application's own package name, from its `package.json`. */
14
+ applicationName(): Promise<string | undefined>;
15
+ private manifest;
16
+ private find;
17
+ }
18
+ //# sourceMappingURL=packages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packages.d.ts","sourceRoot":"","sources":["../../server/packages.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,qBAAa,iBAAiB;IAMT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAGtB;gBAEgC,OAAO,EAAE,MAAM;IAEnD,mGAAmG;IACtF,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI/D,mEAAmE;IACtD,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAO3D,OAAO,CAAC,QAAQ;YAYF,IAAI;CAgBnB"}
@@ -0,0 +1,62 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ /**
4
+ * Reads the manifests of the packages the application resolves, the way Node resolves a bare specifier from the
5
+ * application's root: `node_modules/<name>` in that directory and in each one above it. Reading from the application
6
+ * rather than from this plugin or the process's working directory reports what the application actually runs, which
7
+ * is also what a deployment that starts elsewhere has installed.
8
+ */
9
+ export class InstalledPackages {
10
+ rootDir;
11
+ manifests = new Map();
12
+ constructor(rootDir) {
13
+ this.rootDir = rootDir;
14
+ }
15
+ /** The installed version of a package, or `undefined` when the application does not resolve it. */
16
+ async version(name) {
17
+ return (await this.manifest(name))?.version;
18
+ }
19
+ /** The application's own package name, from its `package.json`. */
20
+ async applicationName() {
21
+ const manifest = await readManifest(path.join(this.rootDir, 'package.json'));
22
+ return manifest?.name;
23
+ }
24
+ manifest(name) {
25
+ // Installed versions do not change while the process runs, so each is read once.
26
+ let pending = this.manifests.get(name);
27
+ if (!pending) {
28
+ pending = this.find(name);
29
+ this.manifests.set(name, pending);
30
+ }
31
+ return pending;
32
+ }
33
+ async find(name) {
34
+ let directory = this.rootDir;
35
+ for (;;) {
36
+ const manifest = await readManifest(path.join(directory, 'node_modules', name, 'package.json'));
37
+ if (manifest?.name === name && manifest.version) {
38
+ return { name, version: manifest.version };
39
+ }
40
+ const parent = path.dirname(directory);
41
+ if (parent === directory)
42
+ return undefined;
43
+ directory = parent;
44
+ }
45
+ }
46
+ }
47
+ async function readManifest(file) {
48
+ try {
49
+ const manifest = JSON.parse(await readFile(file, 'utf8'));
50
+ if (typeof manifest !== 'object' || manifest === null)
51
+ return undefined;
52
+ const { name, version } = manifest;
53
+ return {
54
+ ...(typeof name === 'string' ? { name } : {}),
55
+ ...(typeof version === 'string' ? { version } : {}),
56
+ };
57
+ }
58
+ catch {
59
+ return undefined;
60
+ }
61
+ }
62
+ //# sourceMappingURL=packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packages.js","sourceRoot":"","sources":["../../server/packages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IAMQ;IALnB,SAAS,GAAG,IAAI,GAAG,EAGjC,CAAC;IAEJ,YAAoC,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEvD,mGAAmG;IAC5F,KAAK,CAAC,OAAO,CAAC,IAAY;QAC/B,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC;IAC9C,CAAC;IAED,mEAAmE;IAC5D,KAAK,CAAC,eAAe;QAC1B,MAAM,QAAQ,GAAG,MAAM,YAAY,CACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CACxC,CAAC;QACF,OAAO,QAAQ,EAAE,IAAI,CAAC;IACxB,CAAC;IAEO,QAAQ,CACd,IAAY;QAEZ,iFAAiF;QACjF,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,IAAI,CAChB,IAAY;QAEZ,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,SAAS,CAAC;YACR,MAAM,QAAQ,GAAG,MAAM,YAAY,CACjC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,CAAC,CAC3D,CAAC;YACF,IAAI,QAAQ,EAAE,IAAI,KAAK,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAChD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC7C,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC3C,SAAS,GAAG,MAAM,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAED,KAAK,UAAU,YAAY,CACzB,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY,CAAC;QACrE,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QACxE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,QAAmC,CAAC;QAC9D,OAAO;YACL,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type AppServerPlugin } from '@nocobase/app-server/plugins';
2
+ declare const foundationPlugin: AppServerPlugin;
3
+ export default foundationPlugin;
4
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../server/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAC;AAKtC,QAAA,MAAM,gBAAgB,EAAE,eAKtB,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import path from 'node:path';
2
+ import { defineServerPlugin, } from '@nocobase/app-server/plugins';
3
+ import serviceProviders from './providers/index.js';
4
+ import routes from './routes/index.js';
5
+ const foundationPlugin = defineServerPlugin({
6
+ baseDir: path.resolve(import.meta.dirname, '..'),
7
+ packageName: '@nocobase/app-plugin-foundation',
8
+ serviceProviders,
9
+ routes,
10
+ });
11
+ export default foundationPlugin;
12
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../server/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,kBAAkB,GAEnB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,gBAAgB,MAAM,sBAAsB,CAAC;AACpD,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,MAAM,gBAAgB,GAAoB,kBAAkB,CAAC;IAC3D,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;IAChD,WAAW,EAAE,iCAAiC;IAC9C,gBAAgB;IAChB,MAAM;CACP,CAAC,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { AppPluginApplication } from '@nocobase/app-server/plugins';
2
+ import type { FoundationProviderInventory } from '../shared/foundation.js';
3
+ export interface RuntimeProviderEvidence {
4
+ readonly name: string;
5
+ readonly version?: string;
6
+ readonly rootDir?: string;
7
+ readonly evidence: 'databaseContribution' | 'apiContribution' | 'foundationRuntime' | 'serverRegistration';
8
+ }
9
+ /** Reads public host contributions, without importing application code or accessing private runtime fields. */
10
+ export declare function runtimeProviderEvidence(app: AppPluginApplication): readonly RuntimeProviderEvidence[];
11
+ /** A deliberately bounded scan of direct application dependencies plus known providers and runtime owners. */
12
+ export declare function collectProviderInventory(rootDir: string, runtime?: readonly RuntimeProviderEvidence[], serverRegistrationsComplete?: boolean): Promise<FoundationProviderInventory>;
13
+ //# sourceMappingURL=provider-inventory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-inventory.d.ts","sourceRoot":"","sources":["../../server/provider-inventory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGzE,OAAO,KAAK,EAGV,2BAA2B,EAC5B,MAAM,yBAAyB,CAAC;AAoCjC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EACb,sBAAsB,GACtB,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,CAAC;CAC1B;AAED,+GAA+G;AAC/G,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,oBAAoB,GACxB,SAAS,uBAAuB,EAAE,CAkCpC;AAaD,8GAA8G;AAC9G,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,SAAS,uBAAuB,EAAO,EAChD,2BAA2B,UAAQ,GAClC,OAAO,CAAC,2BAA2B,CAAC,CAqEtC"}