@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.
- package/CHANGELOG.md +46 -0
- package/README.md +96 -2
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +16 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/module-manifest.d.ts +9 -0
- package/dist/cli/module-manifest.d.ts.map +1 -0
- package/dist/cli/module-manifest.js +12 -0
- package/dist/cli/module-manifest.js.map +1 -0
- package/dist/client/api.d.ts +19 -0
- package/dist/client/api.d.ts.map +1 -0
- package/dist/client/api.js +57 -0
- package/dist/client/api.js.map +1 -0
- package/dist/client/business-modules.d.ts +5 -0
- package/dist/client/business-modules.d.ts.map +1 -0
- package/dist/client/business-modules.js +87 -0
- package/dist/client/business-modules.js.map +1 -0
- package/dist/client/components/capability-icons.d.ts +4 -0
- package/dist/client/components/capability-icons.d.ts.map +1 -0
- package/dist/client/components/capability-icons.js +17 -0
- package/dist/client/components/capability-icons.js.map +1 -0
- package/dist/client/components/collections-browser.d.ts +7 -0
- package/dist/client/components/collections-browser.d.ts.map +1 -0
- package/dist/client/components/collections-browser.js +63 -0
- package/dist/client/components/collections-browser.js.map +1 -0
- package/dist/client/components/format.d.ts +7 -0
- package/dist/client/components/format.d.ts.map +1 -0
- package/dist/client/components/format.js +42 -0
- package/dist/client/components/format.js.map +1 -0
- package/dist/client/components/foundation-page.d.ts +16 -0
- package/dist/client/components/foundation-page.d.ts.map +1 -0
- package/dist/client/components/foundation-page.js +217 -0
- package/dist/client/components/foundation-page.js.map +1 -0
- package/dist/client/components/foundation-translation.d.ts +12 -0
- package/dist/client/components/foundation-translation.d.ts.map +1 -0
- package/dist/client/components/foundation-translation.js +19 -0
- package/dist/client/components/foundation-translation.js.map +1 -0
- package/dist/client/components/module-matrix.d.ts +9 -0
- package/dist/client/components/module-matrix.d.ts.map +1 -0
- package/dist/client/components/module-matrix.js +59 -0
- package/dist/client/components/module-matrix.js.map +1 -0
- package/dist/client/components/ui/button.d.ts +8 -0
- package/dist/client/components/ui/button.d.ts.map +1 -0
- package/dist/client/components/ui/button.js +35 -0
- package/dist/client/components/ui/button.js.map +1 -0
- package/dist/client/components/ui/collapsible.d.ts +7 -0
- package/dist/client/components/ui/collapsible.d.ts.map +1 -0
- package/dist/client/components/ui/collapsible.js +13 -0
- package/dist/client/components/ui/collapsible.js.map +1 -0
- package/dist/client/components/ui/dialog.d.ts +18 -0
- package/dist/client/components/ui/dialog.d.ts.map +1 -0
- package/dist/client/components/ui/dialog.js +37 -0
- package/dist/client/components/ui/dialog.js.map +1 -0
- package/dist/client/components/ui/input.d.ts +4 -0
- package/dist/client/components/ui/input.d.ts.map +1 -0
- package/dist/client/components/ui/input.js +8 -0
- package/dist/client/components/ui/input.js.map +1 -0
- package/dist/client/components/ui/table.d.ts +11 -0
- package/dist/client/components/ui/table.d.ts.map +1 -0
- package/dist/client/components/ui/table.js +28 -0
- package/dist/client/components/ui/table.js.map +1 -0
- package/dist/client/components/ui/tooltip.d.ts +8 -0
- package/dist/client/components/ui/tooltip.d.ts.map +1 -0
- package/dist/client/components/ui/tooltip.js +17 -0
- package/dist/client/components/ui/tooltip.js.map +1 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +7 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/locales/de-DE.d.ts +4 -0
- package/dist/client/locales/de-DE.d.ts.map +1 -0
- package/dist/client/locales/de-DE.js +334 -0
- package/dist/client/locales/de-DE.js.map +1 -0
- package/dist/client/locales/en-US.d.ts +336 -0
- package/dist/client/locales/en-US.d.ts.map +1 -0
- package/dist/client/locales/en-US.js +334 -0
- package/dist/client/locales/en-US.js.map +1 -0
- package/dist/client/locales/es-ES.d.ts +4 -0
- package/dist/client/locales/es-ES.d.ts.map +1 -0
- package/dist/client/locales/es-ES.js +335 -0
- package/dist/client/locales/es-ES.js.map +1 -0
- package/dist/client/locales/fr-FR.d.ts +4 -0
- package/dist/client/locales/fr-FR.d.ts.map +1 -0
- package/dist/client/locales/fr-FR.js +335 -0
- package/dist/client/locales/fr-FR.js.map +1 -0
- package/dist/client/locales/id-ID.d.ts +4 -0
- package/dist/client/locales/id-ID.d.ts.map +1 -0
- package/dist/client/locales/id-ID.js +334 -0
- package/dist/client/locales/id-ID.js.map +1 -0
- package/dist/client/locales/index.d.ts +4 -0
- package/dist/client/locales/index.d.ts.map +1 -0
- package/dist/client/locales/index.js +14 -0
- package/dist/client/locales/index.js.map +1 -0
- package/dist/client/locales/ja-JP.d.ts +4 -0
- package/dist/client/locales/ja-JP.d.ts.map +1 -0
- package/dist/client/locales/ja-JP.js +334 -0
- package/dist/client/locales/ja-JP.js.map +1 -0
- package/dist/client/locales/pt-BR.d.ts +4 -0
- package/dist/client/locales/pt-BR.d.ts.map +1 -0
- package/dist/client/locales/pt-BR.js +335 -0
- package/dist/client/locales/pt-BR.js.map +1 -0
- package/dist/client/locales/vi-VN.d.ts +4 -0
- package/dist/client/locales/vi-VN.d.ts.map +1 -0
- package/dist/client/locales/vi-VN.js +334 -0
- package/dist/client/locales/vi-VN.js.map +1 -0
- package/dist/client/locales/zh-CN.d.ts +4 -0
- package/dist/client/locales/zh-CN.d.ts.map +1 -0
- package/dist/client/locales/zh-CN.js +334 -0
- package/dist/client/locales/zh-CN.js.map +1 -0
- package/dist/client/locales/zh-TW.d.ts +4 -0
- package/dist/client/locales/zh-TW.d.ts.map +1 -0
- package/dist/client/locales/zh-TW.js +334 -0
- package/dist/client/locales/zh-TW.js.map +1 -0
- package/dist/client/navigation.d.ts +8 -0
- package/dist/client/navigation.d.ts.map +1 -0
- package/dist/client/navigation.js +21 -0
- package/dist/client/navigation.js.map +1 -0
- package/dist/client/plugin.d.ts +11 -0
- package/dist/client/plugin.d.ts.map +1 -0
- package/dist/client/plugin.js +10 -0
- package/dist/client/plugin.js.map +1 -0
- package/dist/client/provider-inventory.d.ts +6 -0
- package/dist/client/provider-inventory.d.ts.map +1 -0
- package/dist/client/provider-inventory.js +49 -0
- package/dist/client/provider-inventory.js.map +1 -0
- package/dist/client/routes.d.ts +18 -0
- package/dist/client/routes.d.ts.map +1 -0
- package/dist/client/routes.js +41 -0
- package/dist/client/routes.js.map +1 -0
- package/dist/package.d.ts +2 -0
- package/dist/package.d.ts.map +1 -0
- package/dist/package.js +2 -0
- package/dist/package.js.map +1 -0
- package/dist/server/api-evidence.d.ts +13 -0
- package/dist/server/api-evidence.d.ts.map +1 -0
- package/dist/server/api-evidence.js +178 -0
- package/dist/server/api-evidence.js.map +1 -0
- package/dist/server/capabilities/data.d.ts +9 -0
- package/dist/server/capabilities/data.d.ts.map +1 -0
- package/dist/server/capabilities/data.js +143 -0
- package/dist/server/capabilities/data.js.map +1 -0
- package/dist/server/capabilities/index.d.ts +5 -0
- package/dist/server/capabilities/index.d.ts.map +1 -0
- package/dist/server/capabilities/index.js +24 -0
- package/dist/server/capabilities/index.js.map +1 -0
- package/dist/server/capabilities/intelligence.d.ts +4 -0
- package/dist/server/capabilities/intelligence.d.ts.map +1 -0
- package/dist/server/capabilities/intelligence.js +105 -0
- package/dist/server/capabilities/intelligence.js.map +1 -0
- package/dist/server/capabilities/messaging.d.ts +4 -0
- package/dist/server/capabilities/messaging.d.ts.map +1 -0
- package/dist/server/capabilities/messaging.js +108 -0
- package/dist/server/capabilities/messaging.js.map +1 -0
- package/dist/server/capabilities/people.d.ts +4 -0
- package/dist/server/capabilities/people.d.ts.map +1 -0
- package/dist/server/capabilities/people.js +151 -0
- package/dist/server/capabilities/people.js.map +1 -0
- package/dist/server/capabilities/platform.d.ts +10 -0
- package/dist/server/capabilities/platform.d.ts.map +1 -0
- package/dist/server/capabilities/platform.js +143 -0
- package/dist/server/capabilities/platform.js.map +1 -0
- package/dist/server/capabilities/processes.d.ts +3 -0
- package/dist/server/capabilities/processes.d.ts.map +1 -0
- package/dist/server/capabilities/processes.js +86 -0
- package/dist/server/capabilities/processes.js.map +1 -0
- package/dist/server/capabilities/types.d.ts +41 -0
- package/dist/server/capabilities/types.d.ts.map +1 -0
- package/dist/server/capabilities/types.js +23 -0
- package/dist/server/capabilities/types.js.map +1 -0
- package/dist/server/catalog.d.ts +3 -0
- package/dist/server/catalog.d.ts.map +1 -0
- package/dist/server/catalog.js +44 -0
- package/dist/server/catalog.js.map +1 -0
- package/dist/server/index.d.ts +6 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +5 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/inventory.d.ts +54 -0
- package/dist/server/inventory.d.ts.map +1 -0
- package/dist/server/inventory.js +184 -0
- package/dist/server/inventory.js.map +1 -0
- package/dist/server/module-manifest.d.ts +10 -0
- package/dist/server/module-manifest.d.ts.map +1 -0
- package/dist/server/module-manifest.js +66 -0
- package/dist/server/module-manifest.js.map +1 -0
- package/dist/server/module-sources.d.ts +5 -0
- package/dist/server/module-sources.d.ts.map +1 -0
- package/dist/server/module-sources.js +482 -0
- package/dist/server/module-sources.js.map +1 -0
- package/dist/server/packages.d.ts +18 -0
- package/dist/server/packages.d.ts.map +1 -0
- package/dist/server/packages.js +62 -0
- package/dist/server/packages.js.map +1 -0
- package/dist/server/plugin.d.ts +4 -0
- package/dist/server/plugin.d.ts.map +1 -0
- package/dist/server/plugin.js +12 -0
- package/dist/server/plugin.js.map +1 -0
- package/dist/server/provider-inventory.d.ts +13 -0
- package/dist/server/provider-inventory.d.ts.map +1 -0
- package/dist/server/provider-inventory.js +180 -0
- package/dist/server/provider-inventory.js.map +1 -0
- package/dist/server/providers/foundation.d.ts +7 -0
- package/dist/server/providers/foundation.d.ts.map +1 -0
- package/dist/server/providers/foundation.js +24 -0
- package/dist/server/providers/foundation.js.map +1 -0
- package/dist/server/providers/index.d.ts +4 -0
- package/dist/server/providers/index.d.ts.map +1 -0
- package/dist/server/providers/index.js +6 -0
- package/dist/server/providers/index.js.map +1 -0
- package/dist/server/read-queue.d.ts +10 -0
- package/dist/server/read-queue.d.ts.map +1 -0
- package/dist/server/read-queue.js +50 -0
- package/dist/server/read-queue.js.map +1 -0
- package/dist/server/request-evidence.d.ts +14 -0
- package/dist/server/request-evidence.d.ts.map +1 -0
- package/dist/server/request-evidence.js +141 -0
- package/dist/server/request-evidence.js.map +1 -0
- package/dist/server/routes/index.d.ts +6 -0
- package/dist/server/routes/index.d.ts.map +1 -0
- package/dist/server/routes/index.js +77 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/schemas.d.ts +13 -0
- package/dist/server/routes/schemas.d.ts.map +1 -0
- package/dist/server/routes/schemas.js +160 -0
- package/dist/server/routes/schemas.js.map +1 -0
- package/dist/server/services/foundation.d.ts +44 -0
- package/dist/server/services/foundation.d.ts.map +1 -0
- package/dist/server/services/foundation.js +265 -0
- package/dist/server/services/foundation.js.map +1 -0
- package/dist/server/source-evidence.d.ts +26 -0
- package/dist/server/source-evidence.d.ts.map +1 -0
- package/dist/server/source-evidence.js +271 -0
- package/dist/server/source-evidence.js.map +1 -0
- package/dist/server/static-values.d.ts +16 -0
- package/dist/server/static-values.d.ts.map +1 -0
- package/dist/server/static-values.js +181 -0
- package/dist/server/static-values.js.map +1 -0
- package/dist/server/tokens.d.ts +18 -0
- package/dist/server/tokens.d.ts.map +1 -0
- package/dist/server/tokens.js +3 -0
- package/dist/server/tokens.js.map +1 -0
- package/dist/shared/available-capabilities.d.ts +6 -0
- package/dist/shared/available-capabilities.d.ts.map +1 -0
- package/dist/shared/available-capabilities.js +66 -0
- package/dist/shared/available-capabilities.js.map +1 -0
- package/dist/shared/foundation.d.ts +155 -0
- package/dist/shared/foundation.d.ts.map +1 -0
- package/dist/shared/foundation.js +39 -0
- package/dist/shared/foundation.js.map +1 -0
- package/package.json +106 -3
- 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 @@
|
|
|
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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"}
|