@antelopejs/dms 0.9.0 → 0.9.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 (95) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/data/module-store/catalog.json +71 -0
  3. package/dist/config.d.ts +7 -0
  4. package/dist/config.js +8 -0
  5. package/dist/config.js.map +1 -1
  6. package/dist/implementations/dms/frontend-modules.d.ts +2 -0
  7. package/dist/implementations/dms/frontend-modules.js +29 -1
  8. package/dist/implementations/dms/frontend-modules.js.map +1 -1
  9. package/dist/implementations/dms/frontend-ready.d.ts +8 -0
  10. package/dist/implementations/dms/frontend-ready.js +34 -0
  11. package/dist/implementations/dms/frontend-ready.js.map +1 -0
  12. package/dist/implementations/dms/manifest.d.ts +1 -0
  13. package/dist/implementations/dms/manifest.js.map +1 -1
  14. package/dist/implementations/dms/page.d.ts +2 -0
  15. package/dist/implementations/dms/page.js +16 -0
  16. package/dist/implementations/dms/page.js.map +1 -1
  17. package/dist/implementations/dms-auth/index.js +1 -1
  18. package/dist/implementations/dms-auth/index.js.map +1 -1
  19. package/dist/routes/index.d.ts +1 -0
  20. package/dist/routes/index.js +1 -0
  21. package/dist/routes/index.js.map +1 -1
  22. package/dist/routes/store.d.ts +21 -0
  23. package/dist/routes/store.js +130 -0
  24. package/dist/routes/store.js.map +1 -0
  25. package/dist/store/activity.d.ts +2 -0
  26. package/dist/store/activity.js +12 -0
  27. package/dist/store/activity.js.map +1 -0
  28. package/dist/store/cache.d.ts +8 -0
  29. package/dist/store/cache.js +29 -0
  30. package/dist/store/cache.js.map +1 -0
  31. package/dist/store/catalog.d.ts +4 -0
  32. package/dist/store/catalog.js +69 -0
  33. package/dist/store/catalog.js.map +1 -0
  34. package/dist/store/compatibility.d.ts +3 -0
  35. package/dist/store/compatibility.js +45 -0
  36. package/dist/store/compatibility.js.map +1 -0
  37. package/dist/store/declarations.d.ts +18 -0
  38. package/dist/store/declarations.js +116 -0
  39. package/dist/store/declarations.js.map +1 -0
  40. package/dist/store/frontend-compatibility.d.ts +18 -0
  41. package/dist/store/frontend-compatibility.js +93 -0
  42. package/dist/store/frontend-compatibility.js.map +1 -0
  43. package/dist/store/interfaces.d.ts +6 -0
  44. package/dist/store/interfaces.js +126 -0
  45. package/dist/store/interfaces.js.map +1 -0
  46. package/dist/store/listing.d.ts +2 -0
  47. package/dist/store/listing.js +180 -0
  48. package/dist/store/listing.js.map +1 -0
  49. package/dist/store/operations.d.ts +8 -0
  50. package/dist/store/operations.js +254 -0
  51. package/dist/store/operations.js.map +1 -0
  52. package/dist/store/registry.d.ts +4 -0
  53. package/dist/store/registry.js +61 -0
  54. package/dist/store/registry.js.map +1 -0
  55. package/dist/store/requirements.d.ts +14 -0
  56. package/dist/store/requirements.js +81 -0
  57. package/dist/store/requirements.js.map +1 -0
  58. package/dist/store/runtime.d.ts +11 -0
  59. package/dist/store/runtime.js +78 -0
  60. package/dist/store/runtime.js.map +1 -0
  61. package/dist/store/tarball.d.ts +2 -0
  62. package/dist/store/tarball.js +80 -0
  63. package/dist/store/tarball.js.map +1 -0
  64. package/dist/store/types.d.ts +98 -0
  65. package/dist/store/types.js +3 -0
  66. package/dist/store/types.js.map +1 -0
  67. package/dist/test/unit/interfaces/dms/page-extension-ownership.test.js +1 -1
  68. package/dist/test/unit/interfaces/dms/page-extension-ownership.test.js.map +1 -1
  69. package/dist/test/unit/store/store.test.d.ts +1 -0
  70. package/dist/test/unit/store/store.test.js +127 -0
  71. package/dist/test/unit/store/store.test.js.map +1 -0
  72. package/dist/test/unit/utils/user-activity.test.js +4 -12
  73. package/dist/test/unit/utils/user-activity.test.js.map +1 -1
  74. package/dist/utils/user-activity.d.ts +1 -1
  75. package/dist/utils/user-activity.js +6 -3
  76. package/dist/utils/user-activity.js.map +1 -1
  77. package/dist/validation/store.schema.d.ts +39 -0
  78. package/dist/validation/store.schema.js +27 -0
  79. package/dist/validation/store.schema.js.map +1 -0
  80. package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleStoreDependencyPicker.vue +136 -0
  81. package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleStoreRequirements.vue +98 -0
  82. package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleStoreTile.vue +247 -29
  83. package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleTile.vue +19 -2
  84. package/frontend-vue/layers/dms-layout/app/build/utils/module-store-catalog.ts +186 -120
  85. package/frontend-vue/layers/dms-layout/app/build/utils/module-store-install.ts +146 -0
  86. package/frontend-vue/layers/dms-layout/app/composables/page/useModuleStore.ts +109 -0
  87. package/frontend-vue/layers/dms-layout/app/custom-pages/modules.vue +335 -34
  88. package/frontend-vue/layers/dms-layout/app/types/module-store.ts +134 -0
  89. package/frontend-vue/layers/dms-layout/i18n/locales/layout-en-GB.json +107 -9
  90. package/frontend-vue/layers/dms-layout/i18n/locales/layout-fr-FR.json +107 -9
  91. package/frontend-vue/package.json +3 -3
  92. package/frontend-vue/pnpm-lock.yaml +16 -22
  93. package/frontend-vue/tests/module-store-catalog.test.ts +270 -51
  94. package/frontend-vue/tests/top-list-card-period-badge-ssr.test.ts +212 -0
  95. package/package.json +5 -5
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildStoreListing = buildStoreListing;
4
+ const runtime_1 = require("@antelopejs/interface-core/runtime");
5
+ const semver_1 = require("semver");
6
+ const config_1 = require("../config");
7
+ const frontend_modules_1 = require("../implementations/dms/frontend-modules");
8
+ const frontend_ready_1 = require("../implementations/dms/frontend-ready");
9
+ const catalog_1 = require("./catalog");
10
+ const compatibility_1 = require("./compatibility");
11
+ const declarations_1 = require("./declarations");
12
+ const frontend_compatibility_1 = require("./frontend-compatibility");
13
+ const interfaces_1 = require("./interfaces");
14
+ const operations_1 = require("./operations");
15
+ const registry_1 = require("./registry");
16
+ const runtime_2 = require("./runtime");
17
+ const CATALOG_I18N_PREFIX = "$modules.store.catalog";
18
+ function runtimeModule(sources) {
19
+ const key = sources.declaration?.key;
20
+ return key === undefined ? undefined : sources.runtime.get(key);
21
+ }
22
+ function resolveState(sources) {
23
+ const { id } = sources.catalogEntry;
24
+ if ((0, operations_1.currentOperation)()?.moduleId === id)
25
+ return "busy";
26
+ if ((0, operations_1.storeError)(id))
27
+ return "error";
28
+ const { declaration } = sources;
29
+ if (!declaration)
30
+ return "available";
31
+ const live = (0, runtime_2.isLive)(runtimeModule(sources));
32
+ if (!declaration.disabled)
33
+ return live ? "active" : "pending";
34
+ return live ? "pending" : "disabled";
35
+ }
36
+ function resolveFrontend(sources) {
37
+ const { id } = sources.catalogEntry;
38
+ const module = runtimeModule(sources);
39
+ const live = (0, runtime_2.isLive)(module) && module !== undefined;
40
+ const layers = live
41
+ ? (0, frontend_modules_1.frontendModuleNamesUnder)(module.localPath)
42
+ : (0, operations_1.removedLayerNames)(id);
43
+ if (layers.length === 0)
44
+ return "none";
45
+ const served = sources.acknowledgement?.modules;
46
+ if (!served)
47
+ return "unknown";
48
+ const isSynced = live
49
+ ? layers.every((name) => served.has(name))
50
+ : layers.every((name) => !served.has(name));
51
+ return isSynced ? "synced" : "pending";
52
+ }
53
+ function isRangeBehind(latest, range) {
54
+ if (!latest || !range || !(0, semver_1.valid)(latest))
55
+ return false;
56
+ const declared = (0, semver_1.validRange)(range);
57
+ return declared !== null && !(0, semver_1.satisfies)(latest, declared);
58
+ }
59
+ function pendingRelease(sources) {
60
+ const { release, declaration } = sources;
61
+ if (!release)
62
+ return undefined;
63
+ if (!declaration)
64
+ return release;
65
+ return isRangeBehind(release.version, declaration.range)
66
+ ? release
67
+ : undefined;
68
+ }
69
+ async function checkFrontend(sources, release, platform) {
70
+ const range = await (0, frontend_compatibility_1.releaseFrontendRange)(sources.catalogEntry.package, release.version, platform.projectPath);
71
+ if (!range)
72
+ return {};
73
+ const requirement = platform.frontend
74
+ ? await (0, frontend_compatibility_1.frontendRequirement)({
75
+ range,
76
+ running: platform.frontend.version,
77
+ projectPath: platform.projectPath,
78
+ replacedFolder: runtimeModule(sources)?.localPath,
79
+ })
80
+ : undefined;
81
+ return { frontendRange: range, frontendRequirement: requirement };
82
+ }
83
+ async function stalledOn(sources, platform) {
84
+ const { declaration, release } = sources;
85
+ if (!declaration || declaration.disabled || !release)
86
+ return [];
87
+ if ((0, runtime_2.isLive)(runtimeModule(sources)))
88
+ return [];
89
+ return (0, interfaces_1.findMissingInterfaces)(release, platform.implemented, platform.projectPath);
90
+ }
91
+ async function inspectRequirements(sources, platform) {
92
+ const module = runtimeModule(sources);
93
+ const dependents = module && (0, runtime_2.isLive)(module) ? await (0, interfaces_1.findDependents)(module, platform.live) : [];
94
+ const release = pendingRelease(sources);
95
+ if (!release) {
96
+ return {
97
+ missingInterfaces: await stalledOn(sources, platform),
98
+ dependents,
99
+ };
100
+ }
101
+ const [frontend, missingInterfaces] = await Promise.all([
102
+ checkFrontend(sources, release, platform),
103
+ (0, interfaces_1.findMissingInterfaces)(release, platform.implemented, platform.projectPath),
104
+ ]);
105
+ return { ...frontend, missingInterfaces, dependents };
106
+ }
107
+ function buildEntry(sources, requirements) {
108
+ const { catalogEntry, release, declaration } = sources;
109
+ const { id } = catalogEntry;
110
+ const compatible = !release || (0, compatibility_1.isCompatible)(release, sources.interfaceVersion);
111
+ const operation = (0, operations_1.currentOperation)();
112
+ return {
113
+ ...catalogEntry,
114
+ title: `${CATALOG_I18N_PREFIX}.${id}.title`,
115
+ description: `${CATALOG_I18N_PREFIX}.${id}.description`,
116
+ state: resolveState(sources),
117
+ installedVersion: runtimeModule(sources)?.version ?? declaration?.range,
118
+ declaredRange: declaration?.range,
119
+ latestVersion: release?.version,
120
+ updateAvailable: isRangeBehind(release?.version, declaration?.range),
121
+ compatible,
122
+ requiredInterfaceRange: compatible ? undefined : release?.interfaceRange,
123
+ error: (0, operations_1.storeError)(id),
124
+ operation: operation?.moduleId === id ? { ...operation } : undefined,
125
+ frontend: resolveFrontend(sources),
126
+ ...requirements,
127
+ };
128
+ }
129
+ async function readPlatformState(projectPath, runtime) {
130
+ const live = [...runtime.values()].filter((module) => (0, runtime_2.isLive)(module));
131
+ return {
132
+ projectPath,
133
+ live,
134
+ implemented: await (0, interfaces_1.implementedInterfaces)(live),
135
+ frontend: (0, frontend_compatibility_1.runningFrontend)(projectPath),
136
+ };
137
+ }
138
+ async function readDeclarationsSafely(catalog) {
139
+ try {
140
+ return { declarations: await (0, declarations_1.listCatalogDeclarations)(catalog) };
141
+ }
142
+ catch (error) {
143
+ return {
144
+ declarations: new Map(),
145
+ error: error instanceof Error ? error.message : String(error),
146
+ };
147
+ }
148
+ }
149
+ async function buildStoreListing() {
150
+ const { projectPath, dev } = await (0, runtime_1.GetRuntimeInfo)();
151
+ const catalog = await (0, catalog_1.loadStoreCatalog)();
152
+ const [read, runtime, releases] = await Promise.all([
153
+ readDeclarationsSafely(catalog),
154
+ (0, runtime_2.listRuntimeModules)(),
155
+ Promise.all(catalog.map((entry) => (0, registry_1.latestRelease)(entry.package, projectPath))),
156
+ ]);
157
+ const interfaceVersion = (0, compatibility_1.installedInterfaceVersion)();
158
+ const acknowledgement = (0, frontend_ready_1.getFrontendAcknowledgement)();
159
+ const platform = await readPlatformState(projectPath, runtime);
160
+ const sources = catalog.map((catalogEntry, index) => ({
161
+ catalogEntry,
162
+ declaration: read.declarations.get(catalogEntry.id),
163
+ runtime,
164
+ release: releases[index],
165
+ interfaceVersion,
166
+ acknowledgement,
167
+ }));
168
+ const requirements = await Promise.all(sources.map((entry) => inspectRequirements(entry, platform)));
169
+ return {
170
+ enabled: (0, config_1.isStoreEditable)(dev) && !read.error,
171
+ modules: sources.map((entry, index) => buildEntry(entry, requirements[index])),
172
+ busy: (0, operations_1.currentOperation)() !== undefined,
173
+ interfaceVersion,
174
+ dev,
175
+ configError: read.error,
176
+ frontendVersion: platform.frontend?.version,
177
+ frontendVersionSource: platform.frontend?.source,
178
+ };
179
+ }
180
+ //# sourceMappingURL=listing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listing.js","sourceRoot":"","sources":["../../src/store/listing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { StoreDependencyChoice, StoreOperation, StoreOperationKind } from "./types";
2
+ export interface StoreOperationOptions {
3
+ dependencies?: StoreDependencyChoice[];
4
+ }
5
+ export declare function currentOperation(): StoreOperation | undefined;
6
+ export declare function storeError(id: string): string | undefined;
7
+ export declare function removedLayerNames(id: string): string[];
8
+ export declare function startStoreOperation(kind: StoreOperationKind, id: string, options?: StoreOperationOptions): Promise<void>;
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.currentOperation = currentOperation;
4
+ exports.storeError = storeError;
5
+ exports.removedLayerNames = removedLayerNames;
6
+ exports.startStoreOperation = startStoreOperation;
7
+ const interface_api_util_1 = require("@antelopejs/interface-api-util");
8
+ const logging_1 = require("@antelopejs/interface-core/logging");
9
+ const runtime_1 = require("@antelopejs/interface-core/runtime");
10
+ const config_1 = require("../config");
11
+ const frontend_modules_1 = require("../implementations/dms/frontend-modules");
12
+ const activity_1 = require("./activity");
13
+ const catalog_1 = require("./catalog");
14
+ const compatibility_1 = require("./compatibility");
15
+ const declarations_1 = require("./declarations");
16
+ const requirements_1 = require("./requirements");
17
+ const registry_1 = require("./registry");
18
+ const runtime_2 = require("./runtime");
19
+ const HTTP_FORBIDDEN = 403;
20
+ const HTTP_NOT_FOUND = 404;
21
+ const HTTP_CONFLICT = 409;
22
+ let current;
23
+ let queue = Promise.resolve();
24
+ const errors = new Map();
25
+ const removedLayers = new Map();
26
+ function currentOperation() {
27
+ return current;
28
+ }
29
+ function storeError(id) {
30
+ return errors.get(id);
31
+ }
32
+ function removedLayerNames(id) {
33
+ return removedLayers.get(id) ?? [];
34
+ }
35
+ function setCurrent(operation) {
36
+ current = operation;
37
+ (0, activity_1.setStoreOperationRunning)(operation !== undefined);
38
+ }
39
+ function setStep(step) {
40
+ if (current)
41
+ current.step = step;
42
+ }
43
+ function describeError(error) {
44
+ if (error instanceof AggregateError && error.errors.length > 0) {
45
+ return error.errors.map(describeError).join("; ");
46
+ }
47
+ return error instanceof Error ? error.message : String(error);
48
+ }
49
+ async function load(context, range, config) {
50
+ setStep("load");
51
+ await (0, runtime_2.loadStoreModule)(context.key, {
52
+ package: context.catalogEntry.package,
53
+ range,
54
+ config,
55
+ });
56
+ removedLayers.delete(context.id);
57
+ }
58
+ async function unload(context) {
59
+ setStep("unload");
60
+ const module = await (0, runtime_2.describeRuntimeModule)(context.key);
61
+ if (!module || !(0, runtime_2.isLive)(module))
62
+ return;
63
+ await (0, runtime_2.unloadStoreModule)(context.key);
64
+ const removed = (0, frontend_modules_1.removeFrontendModulesUnder)(module.localPath);
65
+ if (removed.length > 0)
66
+ removedLayers.set(context.id, removed);
67
+ }
68
+ async function writeEntry(context, write) {
69
+ setStep("save");
70
+ context.written = true;
71
+ await write();
72
+ }
73
+ async function resolveTargetRelease(context) {
74
+ setStep("resolve");
75
+ const { package: packageName } = context.catalogEntry;
76
+ const release = await (0, registry_1.latestRelease)(packageName, context.projectPath, true);
77
+ if (!release) {
78
+ throw new Error(`The npm registry has no release of ${packageName} this platform can read`);
79
+ }
80
+ const interfaceVersion = (0, compatibility_1.installedInterfaceVersion)();
81
+ if (!(0, compatibility_1.isCompatible)(release, interfaceVersion)) {
82
+ throw new Error(`${packageName}@${release.version} needs ${registry_1.INTERFACE_PACKAGE} ${release.interfaceRange}, this platform runs ${interfaceVersion}`);
83
+ }
84
+ if (current)
85
+ current.targetVersion = release.version;
86
+ await (0, requirements_1.assertFrontendSupports)(context, release);
87
+ return release;
88
+ }
89
+ async function installDependencies(context, release) {
90
+ const label = `${context.catalogEntry.package}@${release.version}`;
91
+ const picked = await (0, requirements_1.pickDependencies)(context, release, label);
92
+ if (picked.size === 0)
93
+ return;
94
+ setStep("dependencies");
95
+ for (const [interfacePackage, choice] of picked) {
96
+ await (0, requirements_1.installDependency)(context, interfacePackage, choice);
97
+ }
98
+ }
99
+ function sourceFor(context, range) {
100
+ return (0, declarations_1.packageDeclarationSource)(context.catalogEntry.package, range);
101
+ }
102
+ async function runInstall(context) {
103
+ const release = await resolveTargetRelease(context);
104
+ await installDependencies(context, release);
105
+ const range = (0, requirements_1.caretRange)(release);
106
+ await load(context, range);
107
+ await writeEntry(context, () => (0, declarations_1.saveDeclaration)(context.key, {
108
+ source: sourceFor(context, range),
109
+ optional: true,
110
+ }));
111
+ }
112
+ async function runUpdate(context) {
113
+ const declaration = requireDeclaration(context);
114
+ const release = await resolveTargetRelease(context);
115
+ await (0, requirements_1.pickDependencies)(context, release, `${context.catalogEntry.package}@${release.version}`);
116
+ const range = (0, requirements_1.caretRange)(release);
117
+ await unload(context);
118
+ if (!declaration.disabled)
119
+ await load(context, range, declaration.config);
120
+ await writeEntry(context, () => (0, declarations_1.saveDeclaration)(context.key, { source: sourceFor(context, range) }));
121
+ }
122
+ async function runEnable(context) {
123
+ const declaration = requireDeclaration(context);
124
+ await load(context, declaration.range, declaration.config);
125
+ await writeEntry(context, () => (0, declarations_1.saveDeclaration)(context.key, { disabled: undefined }));
126
+ }
127
+ async function runDisable(context) {
128
+ await unload(context);
129
+ await writeEntry(context, () => (0, declarations_1.saveDeclaration)(context.key, { disabled: true }));
130
+ }
131
+ async function runUninstall(context) {
132
+ await unload(context);
133
+ await writeEntry(context, () => (0, declarations_1.removeDeclaration)(context.key));
134
+ }
135
+ async function runApply(context) {
136
+ const declaration = requireDeclaration(context);
137
+ const live = (0, runtime_2.isLive)(await (0, runtime_2.describeRuntimeModule)(context.key));
138
+ if (!declaration.disabled && !live) {
139
+ await load(context, declaration.range, declaration.config);
140
+ }
141
+ if (declaration.disabled && live)
142
+ await unload(context);
143
+ }
144
+ function requireDeclaration(context) {
145
+ if (!context.declaration) {
146
+ throw new Error(`${context.catalogEntry.package} is not in antelope.config.ts`);
147
+ }
148
+ return context.declaration;
149
+ }
150
+ const RUNNERS = {
151
+ install: runInstall,
152
+ update: runUpdate,
153
+ enable: runEnable,
154
+ disable: runDisable,
155
+ uninstall: runUninstall,
156
+ apply: runApply,
157
+ };
158
+ const PRECONDITIONS = {
159
+ install: (entry) => entry === undefined,
160
+ update: (entry) => entry !== undefined,
161
+ enable: (entry) => entry?.disabled === true,
162
+ disable: (entry) => entry?.disabled === false,
163
+ uninstall: (entry) => entry !== undefined,
164
+ apply: (entry) => entry !== undefined,
165
+ };
166
+ async function restoreDeclaration(context) {
167
+ const previous = context.declaration;
168
+ if (!previous) {
169
+ await (0, declarations_1.removeDeclaration)(context.key);
170
+ return;
171
+ }
172
+ await (0, declarations_1.saveDeclaration)(context.key, {
173
+ source: sourceFor(context, previous.range),
174
+ disabled: previous.disabled ? true : undefined,
175
+ });
176
+ }
177
+ async function rollback(context) {
178
+ await rollbackModule(context);
179
+ for (const key of [...context.installedDependencies].reverse()) {
180
+ await (0, runtime_2.unloadStoreModule)(key);
181
+ if (await (0, declarations_1.hasDeclaration)(key))
182
+ await (0, declarations_1.removeDeclaration)(key);
183
+ }
184
+ }
185
+ async function rollbackModule(context) {
186
+ if (context.written)
187
+ await restoreDeclaration(context);
188
+ const previous = context.declaration;
189
+ const live = (0, runtime_2.isLive)(await (0, runtime_2.describeRuntimeModule)(context.key));
190
+ if (!previous && live)
191
+ await (0, runtime_2.unloadStoreModule)(context.key);
192
+ if (previous && !previous.disabled && !live) {
193
+ await (0, runtime_2.loadStoreModule)(context.key, {
194
+ package: context.catalogEntry.package,
195
+ range: previous.range,
196
+ config: previous.config,
197
+ });
198
+ }
199
+ }
200
+ async function execute(kind, context) {
201
+ try {
202
+ await RUNNERS[kind](context);
203
+ errors.delete(context.id);
204
+ }
205
+ catch (error) {
206
+ const message = describeError(error);
207
+ logging_1.Logging.Error(`[DMS] Module store: ${kind} ${context.id} failed`, error);
208
+ errors.set(context.id, message);
209
+ await rollback(context).catch((rollbackError) => logging_1.Logging.Error(`[DMS] Module store: rolling back ${context.id} failed`, rollbackError));
210
+ }
211
+ }
212
+ const TAKES_DOWN = new Set(["disable", "uninstall"]);
213
+ async function prepareContext(kind, id, options) {
214
+ const catalogEntry = await (0, catalog_1.findCatalogEntry)(id);
215
+ (0, interface_api_util_1.assert)(catalogEntry, HTTP_NOT_FOUND, "error.store_module_unknown");
216
+ const { projectPath } = await (0, runtime_1.GetRuntimeInfo)();
217
+ const declaration = (await (0, declarations_1.listCatalogDeclarations)([catalogEntry])).get(id);
218
+ (0, interface_api_util_1.assert)(PRECONDITIONS[kind](declaration), HTTP_CONFLICT, "error.store_invalid_state");
219
+ const context = {
220
+ id,
221
+ catalogEntry,
222
+ projectPath,
223
+ key: declaration?.key ?? catalogEntry.package,
224
+ declaration,
225
+ written: false,
226
+ dependencies: options.dependencies ?? [],
227
+ installedDependencies: [],
228
+ };
229
+ if (TAKES_DOWN.has(kind))
230
+ await (0, requirements_1.assertNoDependents)(context);
231
+ return context;
232
+ }
233
+ function enqueue(work) {
234
+ const run = queue.then(work);
235
+ queue = run.catch(() => undefined);
236
+ return run;
237
+ }
238
+ async function startStoreOperation(kind, id, options = {}) {
239
+ const { dev } = await (0, runtime_1.GetRuntimeInfo)();
240
+ (0, interface_api_util_1.assert)((0, config_1.isStoreEditable)(dev), HTTP_FORBIDDEN, "error.store_disabled");
241
+ (0, interface_api_util_1.assert)(!current, HTTP_CONFLICT, "error.store_busy");
242
+ setCurrent({ moduleId: id, kind, step: "resolve", startedAt: Date.now() });
243
+ try {
244
+ const context = await prepareContext(kind, id, options);
245
+ void enqueue(() => execute(kind, context).finally(() => {
246
+ setCurrent(undefined);
247
+ })).catch((error) => logging_1.Logging.Error(`[DMS] Module store: ${kind} ${id} failed`, error));
248
+ }
249
+ catch (error) {
250
+ setCurrent(undefined);
251
+ throw error;
252
+ }
253
+ }
254
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/store/operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { PackageRelease } from "./types";
2
+ export declare const INTERFACE_PACKAGE = "@antelopejs/interface-dms";
3
+ export declare function npmView(spec: string, fields: readonly string[], projectPath: string): Promise<unknown>;
4
+ export declare function latestRelease(packageName: string, projectPath: string, force?: boolean): Promise<PackageRelease | undefined>;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INTERFACE_PACKAGE = void 0;
4
+ exports.npmView = npmView;
5
+ exports.latestRelease = latestRelease;
6
+ const node_child_process_1 = require("node:child_process");
7
+ const node_util_1 = require("node:util");
8
+ const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
9
+ const RELEASE_TTL_MS = 60 * 60 * 1000;
10
+ const FAILED_RELEASE_TTL_MS = 5 * 60 * 1000;
11
+ const NPM_VIEW_TIMEOUT_MS = 30_000;
12
+ const LATEST_TAG = "latest";
13
+ exports.INTERFACE_PACKAGE = "@antelopejs/interface-dms";
14
+ const releases = new Map();
15
+ const pending = new Map();
16
+ async function npmView(spec, fields, projectPath) {
17
+ try {
18
+ const { stdout } = await execFileAsync("npm", ["view", spec, ...fields, "--json"], { cwd: projectPath, timeout: NPM_VIEW_TIMEOUT_MS });
19
+ return stdout.trim() ? JSON.parse(stdout) : undefined;
20
+ }
21
+ catch {
22
+ return undefined;
23
+ }
24
+ }
25
+ async function viewLatest(packageName, projectPath) {
26
+ const view = (await npmView(`${packageName}@${LATEST_TAG}`, ["version", "dependencies", "antelopeJs"], projectPath));
27
+ if (!view?.version)
28
+ return undefined;
29
+ return {
30
+ version: view.version,
31
+ interfaceRange: view.dependencies?.[exports.INTERFACE_PACKAGE],
32
+ dependencies: view.dependencies ?? {},
33
+ implements: Array.isArray(view.antelopeJs?.implements)
34
+ ? view.antelopeJs.implements.map(String)
35
+ : [],
36
+ };
37
+ }
38
+ function isFresh(cached) {
39
+ if (!cached)
40
+ return false;
41
+ const ttl = cached.release ? RELEASE_TTL_MS : FAILED_RELEASE_TTL_MS;
42
+ return Date.now() - cached.fetchedAt < ttl;
43
+ }
44
+ function latestRelease(packageName, projectPath, force = false) {
45
+ const cached = releases.get(packageName);
46
+ if (!force && isFresh(cached)) {
47
+ return Promise.resolve(cached?.release);
48
+ }
49
+ const inFlight = pending.get(packageName);
50
+ if (inFlight)
51
+ return inFlight;
52
+ const lookup = viewLatest(packageName, projectPath)
53
+ .then((release) => {
54
+ releases.set(packageName, { fetchedAt: Date.now(), release });
55
+ return release;
56
+ })
57
+ .finally(() => pending.delete(packageName));
58
+ pending.set(packageName, lookup);
59
+ return lookup;
60
+ }
61
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/store/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { PackageRelease, RuntimeModule, StoreCatalogEntry, StoreDependencyChoice } from "./types";
2
+ export interface RequirementContext {
3
+ catalogEntry: StoreCatalogEntry;
4
+ projectPath: string;
5
+ key: string;
6
+ dependencies: StoreDependencyChoice[];
7
+ installedDependencies: string[];
8
+ }
9
+ export declare function caretRange(release: PackageRelease): string;
10
+ export declare function assertFrontendSupports(context: RequirementContext, release: PackageRelease): Promise<void>;
11
+ export declare function runningModules(): Promise<RuntimeModule[]>;
12
+ export declare function pickDependencies(context: RequirementContext, release: PackageRelease, label: string): Promise<Map<string, StoreDependencyChoice>>;
13
+ export declare function installDependency(context: RequirementContext, interfacePackage: string, choice: StoreDependencyChoice): Promise<void>;
14
+ export declare function assertNoDependents(context: RequirementContext): Promise<void>;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.caretRange = caretRange;
4
+ exports.assertFrontendSupports = assertFrontendSupports;
5
+ exports.runningModules = runningModules;
6
+ exports.pickDependencies = pickDependencies;
7
+ exports.installDependency = installDependency;
8
+ exports.assertNoDependents = assertNoDependents;
9
+ const interface_api_util_1 = require("@antelopejs/interface-api-util");
10
+ const declarations_1 = require("./declarations");
11
+ const frontend_compatibility_1 = require("./frontend-compatibility");
12
+ const interfaces_1 = require("./interfaces");
13
+ const registry_1 = require("./registry");
14
+ const runtime_1 = require("./runtime");
15
+ const HTTP_CONFLICT = 409;
16
+ const RANGE_PREFIX = "^";
17
+ function caretRange(release) {
18
+ return `${RANGE_PREFIX}${release.version}`;
19
+ }
20
+ async function assertFrontendSupports(context, release) {
21
+ const { package: packageName } = context.catalogEntry;
22
+ const range = await (0, frontend_compatibility_1.releaseFrontendRange)(packageName, release.version, context.projectPath);
23
+ const running = (0, frontend_compatibility_1.runningFrontend)(context.projectPath);
24
+ if (!range || !running || (0, frontend_compatibility_1.supportsFrontend)(range, running.version))
25
+ return;
26
+ throw new Error(`${packageName}@${release.version} supports ${frontend_compatibility_1.FRONTEND_PACKAGE} ${range}, this project runs ${running.version}`);
27
+ }
28
+ async function runningModules() {
29
+ return [...(await (0, runtime_1.listRuntimeModules)()).values()].filter((module) => (0, runtime_1.isLive)(module));
30
+ }
31
+ async function pickDependencies(context, release, label) {
32
+ const implemented = await (0, interfaces_1.implementedInterfaces)(await runningModules());
33
+ const missing = await (0, interfaces_1.findMissingInterfaces)(release, implemented, context.projectPath);
34
+ const picked = new Map();
35
+ const unpicked = [];
36
+ for (const { interfacePackage } of missing) {
37
+ const choice = context.dependencies.find((dependency) => dependency.interfacePackage === interfacePackage);
38
+ if (choice)
39
+ picked.set(interfacePackage, choice);
40
+ else
41
+ unpicked.push(interfacePackage);
42
+ }
43
+ if (unpicked.length > 0) {
44
+ throw new Error(`${label} needs ${unpicked.join(", ")}, which no running module implements`);
45
+ }
46
+ return picked;
47
+ }
48
+ async function installDependency(context, interfacePackage, choice) {
49
+ const key = choice.package;
50
+ if (await (0, declarations_1.hasDeclaration)(key)) {
51
+ throw new Error(`${key} is already in antelope.config.ts but does not run: start it from there`);
52
+ }
53
+ const release = await (0, registry_1.latestRelease)(key, context.projectPath, true);
54
+ if (!release) {
55
+ throw new Error(`The npm registry has no release of ${key}`);
56
+ }
57
+ const range = caretRange(release);
58
+ context.installedDependencies.push(key);
59
+ await (0, runtime_1.loadStoreModule)(key, { package: key, range, config: choice.config });
60
+ await assertImplements(key, interfacePackage);
61
+ await (0, declarations_1.saveDeclaration)(key, {
62
+ source: (0, declarations_1.packageDeclarationSource)(key, range),
63
+ config: choice.config ?? {},
64
+ optional: true,
65
+ });
66
+ }
67
+ async function assertImplements(key, interfacePackage) {
68
+ const module = await (0, runtime_1.describeRuntimeModule)(key);
69
+ const implemented = module ? await (0, interfaces_1.implementedBy)(module.localPath) : [];
70
+ if (!implemented.includes(interfacePackage)) {
71
+ throw new Error(`${key} does not implement ${interfacePackage}`);
72
+ }
73
+ }
74
+ async function assertNoDependents(context) {
75
+ const module = await (0, runtime_1.describeRuntimeModule)(context.key);
76
+ if (!module || !(0, runtime_1.isLive)(module))
77
+ return;
78
+ const dependents = await (0, interfaces_1.findDependents)(module, await runningModules());
79
+ (0, interface_api_util_1.assert)(dependents.length === 0, HTTP_CONFLICT, "error.store_module_required");
80
+ }
81
+ //# sourceMappingURL=requirements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/store/requirements.ts"],"names":[],"mappings":"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"}