@memberjunction/open-app-engine 0.0.1 → 5.2.0
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/dist/dependency/dependency-resolver.d.ts +23 -0
- package/dist/dependency/dependency-resolver.d.ts.map +1 -0
- package/dist/dependency/dependency-resolver.js +63 -0
- package/dist/dependency/dependency-resolver.js.map +1 -0
- package/dist/dependency/version-checker.d.ts +8 -0
- package/dist/dependency/version-checker.d.ts.map +1 -0
- package/dist/dependency/version-checker.js +65 -0
- package/dist/dependency/version-checker.js.map +1 -0
- package/dist/github/github-client.d.ts +29 -0
- package/dist/github/github-client.d.ts.map +1 -0
- package/dist/github/github-client.js +127 -0
- package/dist/github/github-client.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/install/client-bootstrap-gen.d.ts +8 -0
- package/dist/install/client-bootstrap-gen.d.ts.map +1 -0
- package/dist/install/client-bootstrap-gen.js +35 -0
- package/dist/install/client-bootstrap-gen.js.map +1 -0
- package/dist/install/config-manager.d.ts +15 -0
- package/dist/install/config-manager.d.ts.map +1 -0
- package/dist/install/config-manager.js +114 -0
- package/dist/install/config-manager.js.map +1 -0
- package/dist/install/history-recorder.d.ts +25 -0
- package/dist/install/history-recorder.d.ts.map +1 -0
- package/dist/install/history-recorder.js +184 -0
- package/dist/install/history-recorder.js.map +1 -0
- package/dist/install/install-orchestrator.d.ts +20 -0
- package/dist/install/install-orchestrator.d.ts.map +1 -0
- package/dist/install/install-orchestrator.js +634 -0
- package/dist/install/install-orchestrator.js.map +1 -0
- package/dist/install/migration-runner.d.ts +23 -0
- package/dist/install/migration-runner.d.ts.map +1 -0
- package/dist/install/migration-runner.js +66 -0
- package/dist/install/migration-runner.js.map +1 -0
- package/dist/install/package-manager.d.ts +19 -0
- package/dist/install/package-manager.d.ts.map +1 -0
- package/dist/install/package-manager.js +89 -0
- package/dist/install/package-manager.js.map +1 -0
- package/dist/install/schema-manager.d.ts +11 -0
- package/dist/install/schema-manager.d.ts.map +1 -0
- package/dist/install/schema-manager.js +125 -0
- package/dist/install/schema-manager.js.map +1 -0
- package/dist/manifest/manifest-loader.d.ts +10 -0
- package/dist/manifest/manifest-loader.d.ts.map +1 -0
- package/dist/manifest/manifest-loader.js +30 -0
- package/dist/manifest/manifest-loader.js.map +1 -0
- package/dist/manifest/manifest-schema.d.ts +351 -0
- package/dist/manifest/manifest-schema.d.ts.map +1 -0
- package/dist/manifest/manifest-schema.js +80 -0
- package/dist/manifest/manifest-schema.js.map +1 -0
- package/dist/types/open-app-types.d.ts +66 -0
- package/dist/types/open-app-types.d.ts.map +1 -0
- package/dist/types/open-app-types.js +2 -0
- package/dist/types/open-app-types.js.map +1 -0
- package/package.json +34 -7
- package/README.md +0 -45
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ResolvedDependency } from '../types/open-app-types.js';
|
|
2
|
+
export type DependencyValue = string | {
|
|
3
|
+
version: string;
|
|
4
|
+
repository: string;
|
|
5
|
+
};
|
|
6
|
+
export interface DependencyNode {
|
|
7
|
+
AppName: string;
|
|
8
|
+
Repository: string;
|
|
9
|
+
Dependencies: Record<string, DependencyValue>;
|
|
10
|
+
}
|
|
11
|
+
export interface DependencyResolutionResult {
|
|
12
|
+
Success: boolean;
|
|
13
|
+
InstallOrder?: ResolvedDependency[];
|
|
14
|
+
ErrorMessage?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface InstalledAppMap {
|
|
17
|
+
[appName: string]: {
|
|
18
|
+
Version: string;
|
|
19
|
+
Repository: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export declare function ResolveDependencies(rootNode: DependencyNode, installedApps: InstalledAppMap): DependencyResolutionResult;
|
|
23
|
+
//# sourceMappingURL=dependency-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-resolver.d.ts","sourceRoot":"","sources":["../../src/dependency/dependency-resolver.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAMrE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAK/E,MAAM,WAAW,cAAc;IAE3B,OAAO,EAAE,MAAM,CAAC;IAEhB,UAAU,EAAE,MAAM,CAAC;IAEnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACjD;AAKD,MAAM,WAAW,0BAA0B;IAEvC,OAAO,EAAE,OAAO,CAAC;IAEjB,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,MAAM,WAAW,eAAe;IAC5B,CAAC,OAAO,EAAE,MAAM,GAAG;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;CACL;AAaD,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,cAAc,EACxB,aAAa,EAAE,eAAe,GAC/B,0BAA0B,CAY5B"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { CheckDependencyVersionCompatibility } from './version-checker.js';
|
|
2
|
+
export function ResolveDependencies(rootNode, installedApps) {
|
|
3
|
+
const visited = new Set();
|
|
4
|
+
const inStack = new Set();
|
|
5
|
+
const order = [];
|
|
6
|
+
const cycleError = VisitNode(rootNode.AppName, rootNode.Dependencies, visited, inStack, order, installedApps);
|
|
7
|
+
if (cycleError) {
|
|
8
|
+
return { Success: false, ErrorMessage: cycleError };
|
|
9
|
+
}
|
|
10
|
+
return { Success: true, InstallOrder: order };
|
|
11
|
+
}
|
|
12
|
+
function ParseDependencyValue(value) {
|
|
13
|
+
if (typeof value === 'string') {
|
|
14
|
+
return { versionRange: value };
|
|
15
|
+
}
|
|
16
|
+
return { versionRange: value.version, repository: value.repository };
|
|
17
|
+
}
|
|
18
|
+
function VisitNode(appName, dependencies, visited, inStack, order, installedApps) {
|
|
19
|
+
if (visited.has(appName)) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
if (inStack.has(appName)) {
|
|
23
|
+
const chain = [...inStack, appName].join(' -> ');
|
|
24
|
+
return `Circular dependency detected: ${chain}`;
|
|
25
|
+
}
|
|
26
|
+
inStack.add(appName);
|
|
27
|
+
for (const [depName, depValue] of Object.entries(dependencies)) {
|
|
28
|
+
const depError = VisitDependency(depName, depValue, visited, inStack, order, installedApps);
|
|
29
|
+
if (depError) {
|
|
30
|
+
return depError;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
inStack.delete(appName);
|
|
34
|
+
visited.add(appName);
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
function VisitDependency(depName, depValue, visited, inStack, order, installedApps) {
|
|
38
|
+
const { versionRange, repository: manifestRepo } = ParseDependencyValue(depValue);
|
|
39
|
+
const installed = installedApps[depName];
|
|
40
|
+
const alreadyInstalled = installed !== undefined;
|
|
41
|
+
if (alreadyInstalled && installed.Version) {
|
|
42
|
+
const compatCheck = CheckDependencyVersionCompatibility(installed.Version, versionRange);
|
|
43
|
+
if (!compatCheck.Compatible) {
|
|
44
|
+
return `Dependency '${depName}' is installed (v${installed.Version}) but does not satisfy required range '${versionRange}': ${compatCheck.Message}`;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const resolved = {
|
|
48
|
+
AppName: depName,
|
|
49
|
+
VersionRange: versionRange,
|
|
50
|
+
Repository: installed?.Repository ?? manifestRepo ?? '',
|
|
51
|
+
AlreadyInstalled: alreadyInstalled,
|
|
52
|
+
InstalledVersion: installed?.Version
|
|
53
|
+
};
|
|
54
|
+
const depError = VisitNode(depName, {}, visited, inStack, order, installedApps);
|
|
55
|
+
if (depError) {
|
|
56
|
+
return depError;
|
|
57
|
+
}
|
|
58
|
+
if (!order.some(entry => entry.AppName === depName)) {
|
|
59
|
+
order.push(resolved);
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=dependency-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../src/dependency/dependency-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface VersionCheckResult {
|
|
2
|
+
Compatible: boolean;
|
|
3
|
+
Message?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function CheckMJVersionCompatibility(mjVersion: string, requiredRange: string): VersionCheckResult;
|
|
6
|
+
export declare function CheckDependencyVersionCompatibility(installedVersion: string, requiredRange: string): VersionCheckResult;
|
|
7
|
+
export declare function IsValidUpgrade(currentVersion: string, targetVersion: string): VersionCheckResult;
|
|
8
|
+
//# sourceMappingURL=version-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-checker.d.ts","sourceRoot":"","sources":["../../src/dependency/version-checker.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,kBAAkB;IAE/B,UAAU,EAAE,OAAO,CAAC;IAEpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,kBAAkB,CAuBxG;AASD,wBAAgB,mCAAmC,CAC/C,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,GACtB,kBAAkB,CAuBpB;AAUD,wBAAgB,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,kBAAkB,CAuBhG"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import semver from 'semver';
|
|
2
|
+
export function CheckMJVersionCompatibility(mjVersion, requiredRange) {
|
|
3
|
+
if (!semver.valid(mjVersion)) {
|
|
4
|
+
return {
|
|
5
|
+
Compatible: false,
|
|
6
|
+
Message: `Invalid MJ version: '${mjVersion}' is not a valid semver string`
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
if (!semver.validRange(requiredRange)) {
|
|
10
|
+
return {
|
|
11
|
+
Compatible: false,
|
|
12
|
+
Message: `Invalid version range in manifest: '${requiredRange}' is not a valid semver range`
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
if (semver.satisfies(mjVersion, requiredRange)) {
|
|
16
|
+
return { Compatible: true };
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
Compatible: false,
|
|
20
|
+
Message: `MJ version ${mjVersion} does not satisfy the required range '${requiredRange}'`
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function CheckDependencyVersionCompatibility(installedVersion, requiredRange) {
|
|
24
|
+
if (!semver.valid(installedVersion)) {
|
|
25
|
+
return {
|
|
26
|
+
Compatible: false,
|
|
27
|
+
Message: `Invalid installed version: '${installedVersion}' is not a valid semver string`
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if (!semver.validRange(requiredRange)) {
|
|
31
|
+
return {
|
|
32
|
+
Compatible: false,
|
|
33
|
+
Message: `Invalid dependency range: '${requiredRange}' is not a valid semver range`
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (semver.satisfies(installedVersion, requiredRange)) {
|
|
37
|
+
return { Compatible: true };
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
Compatible: false,
|
|
41
|
+
Message: `Installed version ${installedVersion} does not satisfy required range '${requiredRange}'`
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function IsValidUpgrade(currentVersion, targetVersion) {
|
|
45
|
+
if (!semver.valid(currentVersion) || !semver.valid(targetVersion)) {
|
|
46
|
+
return {
|
|
47
|
+
Compatible: false,
|
|
48
|
+
Message: `Invalid version(s): current='${currentVersion}', target='${targetVersion}'`
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
if (semver.gt(targetVersion, currentVersion)) {
|
|
52
|
+
return { Compatible: true };
|
|
53
|
+
}
|
|
54
|
+
if (semver.eq(targetVersion, currentVersion)) {
|
|
55
|
+
return {
|
|
56
|
+
Compatible: false,
|
|
57
|
+
Message: `Target version ${targetVersion} is the same as the installed version`
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
Compatible: false,
|
|
62
|
+
Message: `Target version ${targetVersion} is older than installed version ${currentVersion}`
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=version-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-checker.js","sourceRoot":"","sources":["../../src/dependency/version-checker.ts"],"names":[],"mappings":"AAOA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAmB5B,MAAM,UAAU,2BAA2B,CAAC,SAAiB,EAAE,aAAqB;IAChF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO;YACH,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,wBAAwB,SAAS,gCAAgC;SAC7E,CAAC;IACN,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,OAAO;YACH,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,uCAAuC,aAAa,+BAA+B;SAC/F,CAAC;IACN,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,OAAO;QACH,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,cAAc,SAAS,yCAAyC,aAAa,GAAG;KAC5F,CAAC;AACN,CAAC;AASD,MAAM,UAAU,mCAAmC,CAC/C,gBAAwB,EACxB,aAAqB;IAErB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,OAAO;YACH,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,+BAA+B,gBAAgB,gCAAgC;SAC3F,CAAC;IACN,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,OAAO;YACH,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,8BAA8B,aAAa,+BAA+B;SACtF,CAAC;IACN,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,aAAa,CAAC,EAAE,CAAC;QACpD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,OAAO;QACH,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,qBAAqB,gBAAgB,qCAAqC,aAAa,GAAG;KACtG,CAAC;AACN,CAAC;AAUD,MAAM,UAAU,cAAc,CAAC,cAAsB,EAAE,aAAqB;IACxE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QAChE,OAAO;YACH,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,gCAAgC,cAAc,cAAc,aAAa,GAAG;SACxF,CAAC;IACN,CAAC;IAED,IAAI,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,CAAC;QAC3C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,CAAC;QAC3C,OAAO;YACH,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,kBAAkB,aAAa,uCAAuC;SAClF,CAAC;IACN,CAAC;IAED,OAAO;QACH,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,kBAAkB,aAAa,oCAAoC,cAAc,EAAE;KAC/F,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface GitHubClientOptions {
|
|
2
|
+
Token?: string;
|
|
3
|
+
}
|
|
4
|
+
export interface GitHubRelease {
|
|
5
|
+
TagName: string;
|
|
6
|
+
PreRelease: boolean;
|
|
7
|
+
Draft: boolean;
|
|
8
|
+
CreatedAt: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ManifestFetchResult {
|
|
11
|
+
Success: boolean;
|
|
12
|
+
ManifestJSON?: string;
|
|
13
|
+
ErrorMessage?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface MigrationDownloadResult {
|
|
16
|
+
Success: boolean;
|
|
17
|
+
LocalPath?: string;
|
|
18
|
+
Files?: string[];
|
|
19
|
+
ErrorMessage?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function ParseGitHubUrl(repoUrl: string): {
|
|
22
|
+
Owner: string;
|
|
23
|
+
Repo: string;
|
|
24
|
+
} | null;
|
|
25
|
+
export declare function FetchManifestFromGitHub(repoUrl: string, version: string | undefined, options: GitHubClientOptions): Promise<ManifestFetchResult>;
|
|
26
|
+
export declare function ListGitHubReleases(repoUrl: string, options: GitHubClientOptions): Promise<GitHubRelease[]>;
|
|
27
|
+
export declare function DownloadMigrations(repoUrl: string, version: string | undefined, migrationsPath: string, localDir: string, options: GitHubClientOptions): Promise<MigrationDownloadResult>;
|
|
28
|
+
export declare function GetLatestVersion(repoUrl: string, options: GitHubClientOptions): Promise<string | null>;
|
|
29
|
+
//# sourceMappingURL=github-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-client.d.ts","sourceRoot":"","sources":["../../src/github/github-client.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,mBAAmB;IAEhC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,MAAM,WAAW,aAAa;IAE1B,OAAO,EAAE,MAAM,CAAC;IAEhB,UAAU,EAAE,OAAO,CAAC;IAEpB,KAAK,EAAE,OAAO,CAAC;IAEf,SAAS,EAAE,MAAM,CAAC;CACrB;AAKD,MAAM,WAAW,mBAAmB;IAEhC,OAAO,EAAE,OAAO,CAAC;IAEjB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,MAAM,WAAW,uBAAuB;IAEpC,OAAO,EAAE,OAAO,CAAC;IAEjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAQD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMtF;AAwBD,wBAAsB,uBAAuB,CACzC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,mBAAmB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAiC9B;AASD,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,GAC7B,OAAO,CAAC,aAAa,EAAE,CAAC,CAkC1B;AAYD,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CA2DlC;AASD,wBAAsB,gBAAgB,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,GAC7B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
export function ParseGitHubUrl(repoUrl) {
|
|
4
|
+
const match = repoUrl.match(/github\.com\/([^/]+)\/([^/]+?)(?:\.git)?$/);
|
|
5
|
+
if (!match) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
return { Owner: match[1], Repo: match[2] };
|
|
9
|
+
}
|
|
10
|
+
function BuildHeaders(token) {
|
|
11
|
+
const headers = {
|
|
12
|
+
'Accept': 'application/vnd.github.v3+json',
|
|
13
|
+
'User-Agent': 'open-app-engine'
|
|
14
|
+
};
|
|
15
|
+
if (token) {
|
|
16
|
+
headers['Authorization'] = `Bearer ${token}`;
|
|
17
|
+
}
|
|
18
|
+
return headers;
|
|
19
|
+
}
|
|
20
|
+
export async function FetchManifestFromGitHub(repoUrl, version, options) {
|
|
21
|
+
const parsed = ParseGitHubUrl(repoUrl);
|
|
22
|
+
if (!parsed) {
|
|
23
|
+
return { Success: false, ErrorMessage: `Invalid GitHub URL: ${repoUrl}` };
|
|
24
|
+
}
|
|
25
|
+
const ref = version ? `v${version.replace(/^v/, '')}` : 'HEAD';
|
|
26
|
+
const apiUrl = `https://api.github.com/repos/${parsed.Owner}/${parsed.Repo}/contents/mj-app.json?ref=${ref}`;
|
|
27
|
+
try {
|
|
28
|
+
const response = await fetch(apiUrl, {
|
|
29
|
+
headers: BuildHeaders(options.Token)
|
|
30
|
+
});
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
if (response.status === 404) {
|
|
33
|
+
return { Success: false, ErrorMessage: `mj-app.json not found in ${parsed.Owner}/${parsed.Repo} at ref ${ref}` };
|
|
34
|
+
}
|
|
35
|
+
return { Success: false, ErrorMessage: `GitHub API error: ${response.status} ${response.statusText}` };
|
|
36
|
+
}
|
|
37
|
+
const data = await response.json();
|
|
38
|
+
if (!data.content || data.encoding !== 'base64') {
|
|
39
|
+
return { Success: false, ErrorMessage: 'Unexpected response format from GitHub API' };
|
|
40
|
+
}
|
|
41
|
+
const decoded = Buffer.from(data.content, 'base64').toString('utf-8');
|
|
42
|
+
return { Success: true, ManifestJSON: decoded };
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
46
|
+
return { Success: false, ErrorMessage: `Failed to fetch manifest: ${message}` };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export async function ListGitHubReleases(repoUrl, options) {
|
|
50
|
+
const parsed = ParseGitHubUrl(repoUrl);
|
|
51
|
+
if (!parsed) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
const apiUrl = `https://api.github.com/repos/${parsed.Owner}/${parsed.Repo}/releases`;
|
|
55
|
+
try {
|
|
56
|
+
const response = await fetch(apiUrl, {
|
|
57
|
+
headers: BuildHeaders(options.Token)
|
|
58
|
+
});
|
|
59
|
+
if (!response.ok) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
const releases = await response.json();
|
|
63
|
+
return releases.map(r => ({
|
|
64
|
+
TagName: r.tag_name,
|
|
65
|
+
PreRelease: r.prerelease,
|
|
66
|
+
Draft: r.draft,
|
|
67
|
+
CreatedAt: r.created_at
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export async function DownloadMigrations(repoUrl, version, migrationsPath, localDir, options) {
|
|
75
|
+
const parsed = ParseGitHubUrl(repoUrl);
|
|
76
|
+
if (!parsed) {
|
|
77
|
+
return { Success: false, ErrorMessage: `Invalid GitHub URL: ${repoUrl}` };
|
|
78
|
+
}
|
|
79
|
+
const ref = version ? `v${version.replace(/^v/, '')}` : 'HEAD';
|
|
80
|
+
const cleanPath = migrationsPath.replace(/^\/|\/$/g, '');
|
|
81
|
+
const apiUrl = `https://api.github.com/repos/${parsed.Owner}/${parsed.Repo}/contents/${cleanPath}?ref=${ref}`;
|
|
82
|
+
try {
|
|
83
|
+
const response = await fetch(apiUrl, {
|
|
84
|
+
headers: BuildHeaders(options.Token)
|
|
85
|
+
});
|
|
86
|
+
if (!response.ok) {
|
|
87
|
+
return { Success: false, ErrorMessage: `Failed to list migrations: ${response.status} ${response.statusText}` };
|
|
88
|
+
}
|
|
89
|
+
const items = await response.json();
|
|
90
|
+
const sqlFiles = items.filter(item => item.type === 'file' && item.name.endsWith('.sql'));
|
|
91
|
+
if (sqlFiles.length === 0) {
|
|
92
|
+
return { Success: true, LocalPath: localDir, Files: [] };
|
|
93
|
+
}
|
|
94
|
+
if (!existsSync(localDir)) {
|
|
95
|
+
mkdirSync(localDir, { recursive: true });
|
|
96
|
+
}
|
|
97
|
+
const downloadedFiles = [];
|
|
98
|
+
for (const file of sqlFiles) {
|
|
99
|
+
if (!file.download_url) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const fileResponse = await fetch(file.download_url, {
|
|
103
|
+
headers: BuildHeaders(options.Token)
|
|
104
|
+
});
|
|
105
|
+
if (fileResponse.ok) {
|
|
106
|
+
const content = await fileResponse.text();
|
|
107
|
+
const localPath = join(localDir, file.name);
|
|
108
|
+
writeFileSync(localPath, content, 'utf-8');
|
|
109
|
+
downloadedFiles.push(file.name);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return { Success: true, LocalPath: localDir, Files: downloadedFiles };
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
116
|
+
return { Success: false, ErrorMessage: `Failed to download migrations: ${message}` };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export async function GetLatestVersion(repoUrl, options) {
|
|
120
|
+
const releases = await ListGitHubReleases(repoUrl, options);
|
|
121
|
+
const stable = releases.find(r => !r.PreRelease && !r.Draft);
|
|
122
|
+
if (!stable) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
return stable.TagName.replace(/^v/, '');
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=github-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-client.js","sourceRoot":"","sources":["../../src/github/github-client.ts"],"names":[],"mappings":"AAMA,OAAO,EAAgB,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAwDjC,MAAM,UAAU,cAAc,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACzE,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,CAAC;AAKD,SAAS,YAAY,CAAC,KAAc;IAChC,MAAM,OAAO,GAA2B;QACpC,QAAQ,EAAE,gCAAgC;QAC1C,YAAY,EAAE,iBAAiB;KAClC,CAAC;IACF,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CACzC,OAAe,EACf,OAA2B,EAC3B,OAA4B;IAE5B,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,uBAAuB,OAAO,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/D,MAAM,MAAM,GAAG,gCAAgC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,6BAA6B,GAAG,EAAE,CAAC;IAE7G,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;YACjC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;SACvC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC1B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,4BAA4B,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;YACrH,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,qBAAqB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;QAC3G,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6C,CAAC;QAC9E,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,4CAA4C,EAAE,CAAC;QAC1F,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACtE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,KAAc,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,6BAA6B,OAAO,EAAE,EAAE,CAAC;IACpF,CAAC;AACL,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,OAAe,EACf,OAA4B;IAE5B,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,gCAAgC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC;IAEtF,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;YACjC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;SACvC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAKlC,CAAC;QAEH,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,OAAO,EAAE,CAAC,CAAC,QAAQ;YACnB,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,SAAS,EAAE,CAAC,CAAC,UAAU;SAC1B,CAAC,CAAC,CAAC;IACR,CAAC;IACD,MAAM,CAAC;QACH,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,OAAe,EACf,OAA2B,EAC3B,cAAsB,EACtB,QAAgB,EAChB,OAA4B;IAE5B,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,uBAAuB,OAAO,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/D,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,gCAAgC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,aAAa,SAAS,QAAQ,GAAG,EAAE,CAAC;IAE9G,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;YACjC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;SACvC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,8BAA8B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;QACpH,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAI/B,CAAC;QAEH,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1F,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,eAAe,GAAa,EAAE,CAAC;QAErC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACrB,SAAS;YACb,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE;gBAChD,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;aACvC,CAAC,CAAC;YAEH,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;gBAClB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;gBAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC3C,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAC1E,CAAC;IACD,OAAO,KAAc,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,kCAAkC,OAAO,EAAE,EAAE,CAAC;IACzF,CAAC;AACL,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,OAAe,EACf,OAA4B;IAE5B,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export { mjAppManifestSchema } from './manifest/manifest-schema.js';
|
|
2
|
+
export type { MJAppManifest, ManifestPackageEntry, PackageRole } from './manifest/manifest-schema.js';
|
|
3
|
+
export { LoadManifestFromFile, ParseAndValidateManifest, ValidateManifestObject } from './manifest/manifest-loader.js';
|
|
4
|
+
export type { ManifestLoadResult } from './manifest/manifest-loader.js';
|
|
5
|
+
export type { AppStatus, InstallAction, ErrorPhase, DependencyStatus, AppInstallCallbacks, InstallOptions, UpgradeOptions, RemoveOptions, AppOperationResult, InstalledAppInfo, ResolvedDependency } from './types/open-app-types.js';
|
|
6
|
+
export { ResolveDependencies } from './dependency/dependency-resolver.js';
|
|
7
|
+
export type { DependencyNode, DependencyValue, DependencyResolutionResult, InstalledAppMap } from './dependency/dependency-resolver.js';
|
|
8
|
+
export { CheckMJVersionCompatibility, CheckDependencyVersionCompatibility, IsValidUpgrade } from './dependency/version-checker.js';
|
|
9
|
+
export type { VersionCheckResult } from './dependency/version-checker.js';
|
|
10
|
+
export { FetchManifestFromGitHub, ListGitHubReleases, DownloadMigrations, GetLatestVersion, ParseGitHubUrl } from './github/github-client.js';
|
|
11
|
+
export type { GitHubClientOptions, GitHubRelease, ManifestFetchResult, MigrationDownloadResult } from './github/github-client.js';
|
|
12
|
+
export { CreateAppSchema, DropAppSchema, SchemaExists, ValidateSchemaName, EscapeSqlString } from './install/schema-manager.js';
|
|
13
|
+
export type { SchemaOperationResult } from './install/schema-manager.js';
|
|
14
|
+
export { RunAppMigrations } from './install/migration-runner.js';
|
|
15
|
+
export type { MigrationRunOptions, MigrationRunResult, FlywayDatabaseConfig, SkywayDatabaseConfig } from './install/migration-runner.js';
|
|
16
|
+
export { AddAppPackages, RemoveAppPackages, RunNpmInstall } from './install/package-manager.js';
|
|
17
|
+
export type { PackageManagerOptions, PackageOperationResult } from './install/package-manager.js';
|
|
18
|
+
export { AddServerDynamicPackages, RemoveServerDynamicPackages, ToggleServerDynamicPackages } from './install/config-manager.js';
|
|
19
|
+
export type { DynamicPackageEntry, ConfigOperationResult } from './install/config-manager.js';
|
|
20
|
+
export { RegenerateClientBootstrap } from './install/client-bootstrap-gen.js';
|
|
21
|
+
export type { ClientBootstrapEntry } from './install/client-bootstrap-gen.js';
|
|
22
|
+
export { RecordAppInstallation, UpdateAppRecord, SetAppStatus, RecordInstallHistoryEntry, RecordAppDependencies, DeleteAppDependencies, FindInstalledApp, ListInstalledApps, FindDependentApps } from './install/history-recorder.js';
|
|
23
|
+
export { InstallApp, UpgradeApp, RemoveApp, DisableApp, EnableApp } from './install/install-orchestrator.js';
|
|
24
|
+
export type { OrchestratorContext } from './install/install-orchestrator.js';
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACtG,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvH,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGxE,YAAY,EACR,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EACrB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,YAAY,EACR,cAAc,EACd,eAAe,EACf,0BAA0B,EAC1B,eAAe,EAClB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACH,2BAA2B,EAC3B,mCAAmC,EACnC,cAAc,EACjB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAG1E,OAAO,EACH,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACjB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACR,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EAC1B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAChI,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAEzI,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAChG,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAElG,OAAO,EACH,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC9B,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAE9F,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,YAAY,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,OAAO,EACH,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACpB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACH,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,SAAS,EACZ,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { mjAppManifestSchema } from './manifest/manifest-schema.js';
|
|
2
|
+
export { LoadManifestFromFile, ParseAndValidateManifest, ValidateManifestObject } from './manifest/manifest-loader.js';
|
|
3
|
+
export { ResolveDependencies } from './dependency/dependency-resolver.js';
|
|
4
|
+
export { CheckMJVersionCompatibility, CheckDependencyVersionCompatibility, IsValidUpgrade } from './dependency/version-checker.js';
|
|
5
|
+
export { FetchManifestFromGitHub, ListGitHubReleases, DownloadMigrations, GetLatestVersion, ParseGitHubUrl } from './github/github-client.js';
|
|
6
|
+
export { CreateAppSchema, DropAppSchema, SchemaExists, ValidateSchemaName, EscapeSqlString } from './install/schema-manager.js';
|
|
7
|
+
export { RunAppMigrations } from './install/migration-runner.js';
|
|
8
|
+
export { AddAppPackages, RemoveAppPackages, RunNpmInstall } from './install/package-manager.js';
|
|
9
|
+
export { AddServerDynamicPackages, RemoveServerDynamicPackages, ToggleServerDynamicPackages } from './install/config-manager.js';
|
|
10
|
+
export { RegenerateClientBootstrap } from './install/client-bootstrap-gen.js';
|
|
11
|
+
export { RecordAppInstallation, UpdateAppRecord, SetAppStatus, RecordInstallHistoryEntry, RecordAppDependencies, DeleteAppDependencies, FindInstalledApp, ListInstalledApps, FindDependentApps } from './install/history-recorder.js';
|
|
12
|
+
export { InstallApp, UpgradeApp, RemoveApp, DisableApp, EnableApp } from './install/install-orchestrator.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAmBvH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAO1E,OAAO,EACH,2BAA2B,EAC3B,mCAAmC,EACnC,cAAc,EACjB,MAAM,iCAAiC,CAAC;AAIzC,OAAO,EACH,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACjB,MAAM,2BAA2B,CAAC;AASnC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGhI,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGhG,OAAO,EACH,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC9B,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAG9E,OAAO,EACH,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACpB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACH,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,SAAS,EACZ,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface ClientBootstrapEntry {
|
|
2
|
+
AppName: string;
|
|
3
|
+
Version: string;
|
|
4
|
+
PackageName: string;
|
|
5
|
+
Enabled: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function RegenerateClientBootstrap(repoRoot: string, entries: ClientBootstrapEntry[]): void;
|
|
8
|
+
//# sourceMappingURL=client-bootstrap-gen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-bootstrap-gen.d.ts","sourceRoot":"","sources":["../../src/install/client-bootstrap-gen.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,oBAAoB;IAEjC,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW,EAAE,MAAM,CAAC;IAEpB,OAAO,EAAE,OAAO,CAAC;CACpB;AAYD,wBAAgB,yBAAyB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,EAAE,GAChC,IAAI,CAQN"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { writeFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
export function RegenerateClientBootstrap(repoRoot, entries) {
|
|
4
|
+
const filePath = resolve(repoRoot, 'packages/MJExplorer/src/app/generated/open-app-bootstrap.generated.ts');
|
|
5
|
+
const content = BuildBootstrapFileContent(entries);
|
|
6
|
+
writeFileSync(filePath, content, 'utf-8');
|
|
7
|
+
}
|
|
8
|
+
function BuildBootstrapFileContent(entries) {
|
|
9
|
+
const header = BuildFileHeader();
|
|
10
|
+
if (entries.length === 0) {
|
|
11
|
+
return header + '\n// No Open Apps installed\n';
|
|
12
|
+
}
|
|
13
|
+
const importLines = entries.map(entry => BuildImportLine(entry)).join('\n');
|
|
14
|
+
return header + '\n' + importLines + '\n';
|
|
15
|
+
}
|
|
16
|
+
function BuildFileHeader() {
|
|
17
|
+
return `/**
|
|
18
|
+
* Open App Bootstrap - AUTO-GENERATED by \`mj app install\` / \`mj app remove\`
|
|
19
|
+
* DO NOT EDIT - this file is overwritten on every app install/upgrade/remove
|
|
20
|
+
*
|
|
21
|
+
* Each import below loads an Open App's client bootstrap package, which triggers
|
|
22
|
+
* @RegisterClass decorators and makes the app's components available to MJ's class factory.
|
|
23
|
+
*
|
|
24
|
+
* Generated: ${new Date().toISOString()}
|
|
25
|
+
*/
|
|
26
|
+
`;
|
|
27
|
+
}
|
|
28
|
+
function BuildImportLine(entry) {
|
|
29
|
+
const comment = `// ${entry.AppName} (v${entry.Version})`;
|
|
30
|
+
if (entry.Enabled) {
|
|
31
|
+
return `${comment}\nimport '${entry.PackageName}';\n`;
|
|
32
|
+
}
|
|
33
|
+
return `${comment} [DISABLED]\n// import '${entry.PackageName}';\n`;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=client-bootstrap-gen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-bootstrap-gen.js","sourceRoot":"","sources":["../../src/install/client-bootstrap-gen.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,MAAM,UAAU,yBAAyB,CACrC,QAAgB,EAChB,OAA+B;IAE/B,MAAM,QAAQ,GAAG,OAAO,CACpB,QAAQ,EACR,uEAAuE,CAC1E,CAAC;IAEF,MAAM,OAAO,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACnD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAKD,SAAS,yBAAyB,CAAC,OAA+B;IAC9D,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IAEjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,GAAG,+BAA+B,CAAC;IACpD,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,OAAO,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC;AAC9C,CAAC;AAKD,SAAS,eAAe;IACpB,OAAO;;;;;;;gBAOK,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;CAEvC,CAAC;AACF,CAAC;AAKD,SAAS,eAAe,CAAC,KAA2B;IAChD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,OAAO,GAAG,CAAC;IAE1D,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,GAAG,OAAO,aAAa,KAAK,CAAC,WAAW,MAAM,CAAC;IAC1D,CAAC;IAED,OAAO,GAAG,OAAO,2BAA2B,KAAK,CAAC,WAAW,MAAM,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MJAppManifest } from '../manifest/manifest-schema.js';
|
|
2
|
+
export interface DynamicPackageEntry {
|
|
3
|
+
PackageName: string;
|
|
4
|
+
StartupExport: string;
|
|
5
|
+
AppName: string;
|
|
6
|
+
Enabled: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface ConfigOperationResult {
|
|
9
|
+
Success: boolean;
|
|
10
|
+
ErrorMessage?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function AddServerDynamicPackages(repoRoot: string, manifest: MJAppManifest): ConfigOperationResult;
|
|
13
|
+
export declare function RemoveServerDynamicPackages(repoRoot: string, appName: string): ConfigOperationResult;
|
|
14
|
+
export declare function ToggleServerDynamicPackages(repoRoot: string, appName: string, enabled: boolean): ConfigOperationResult;
|
|
15
|
+
//# sourceMappingURL=config-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/install/config-manager.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAKpE,MAAM,WAAW,mBAAmB;IAEhC,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa,EAAE,MAAM,CAAC;IAEtB,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,EAAE,OAAO,CAAC;CACpB;AAKD,MAAM,WAAW,qBAAqB;IAElC,OAAO,EAAE,OAAO,CAAC;IAEjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AASD,wBAAgB,wBAAwB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,aAAa,GACxB,qBAAqB,CAuBvB;AASD,wBAAgB,2BAA2B,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAChB,qBAAqB,CAavB;AAUD,wBAAgB,2BAA2B,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,GACjB,qBAAqB,CAavB"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
export function AddServerDynamicPackages(repoRoot, manifest) {
|
|
4
|
+
const configPath = resolve(repoRoot, 'mj.config.cjs');
|
|
5
|
+
const serverPackages = GetServerPackagesFromManifest(manifest);
|
|
6
|
+
if (serverPackages.length === 0) {
|
|
7
|
+
return { Success: true };
|
|
8
|
+
}
|
|
9
|
+
try {
|
|
10
|
+
let content = readFileSync(configPath, 'utf-8');
|
|
11
|
+
content = EnsureDynamicPackagesSection(content);
|
|
12
|
+
for (const entry of serverPackages) {
|
|
13
|
+
content = AddEntryToServerArray(content, entry);
|
|
14
|
+
}
|
|
15
|
+
writeFileSync(configPath, content, 'utf-8');
|
|
16
|
+
return { Success: true };
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
20
|
+
return { Success: false, ErrorMessage: `Failed to update config: ${message}` };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function RemoveServerDynamicPackages(repoRoot, appName) {
|
|
24
|
+
const configPath = resolve(repoRoot, 'mj.config.cjs');
|
|
25
|
+
try {
|
|
26
|
+
let content = readFileSync(configPath, 'utf-8');
|
|
27
|
+
content = RemoveEntriesForApp(content, appName);
|
|
28
|
+
writeFileSync(configPath, content, 'utf-8');
|
|
29
|
+
return { Success: true };
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
33
|
+
return { Success: false, ErrorMessage: `Failed to update config: ${message}` };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function ToggleServerDynamicPackages(repoRoot, appName, enabled) {
|
|
37
|
+
const configPath = resolve(repoRoot, 'mj.config.cjs');
|
|
38
|
+
try {
|
|
39
|
+
let content = readFileSync(configPath, 'utf-8');
|
|
40
|
+
content = ToggleEntriesForApp(content, appName, enabled);
|
|
41
|
+
writeFileSync(configPath, content, 'utf-8');
|
|
42
|
+
return { Success: true };
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
46
|
+
return { Success: false, ErrorMessage: `Failed to update config: ${message}` };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function GetServerPackagesFromManifest(manifest) {
|
|
50
|
+
const entries = [];
|
|
51
|
+
const serverPkgs = manifest.packages?.server ?? [];
|
|
52
|
+
const sharedPkgs = manifest.packages?.shared ?? [];
|
|
53
|
+
for (const pkg of [...serverPkgs, ...sharedPkgs]) {
|
|
54
|
+
if (pkg.startupExport) {
|
|
55
|
+
entries.push({
|
|
56
|
+
PackageName: pkg.name,
|
|
57
|
+
StartupExport: pkg.startupExport,
|
|
58
|
+
AppName: manifest.name,
|
|
59
|
+
Enabled: true
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return entries;
|
|
64
|
+
}
|
|
65
|
+
function EnsureDynamicPackagesSection(content) {
|
|
66
|
+
if (content.includes('dynamicPackages')) {
|
|
67
|
+
return content;
|
|
68
|
+
}
|
|
69
|
+
const insertionPoint = content.lastIndexOf('};');
|
|
70
|
+
if (insertionPoint === -1) {
|
|
71
|
+
return content;
|
|
72
|
+
}
|
|
73
|
+
const section = `\n dynamicPackages: {\n server: []\n },\n`;
|
|
74
|
+
return content.slice(0, insertionPoint) + section + content.slice(insertionPoint);
|
|
75
|
+
}
|
|
76
|
+
function AddEntryToServerArray(content, entry) {
|
|
77
|
+
const serverArrayMatch = content.match(/server:\s*\[/);
|
|
78
|
+
if (!serverArrayMatch || serverArrayMatch.index === undefined) {
|
|
79
|
+
return content;
|
|
80
|
+
}
|
|
81
|
+
const entryStr = `\n {\n PackageName: '${entry.PackageName}',\n StartupExport: '${entry.StartupExport}',\n AppName: '${entry.AppName}',\n Enabled: ${entry.Enabled}\n },`;
|
|
82
|
+
const arrayStart = serverArrayMatch.index + serverArrayMatch[0].length;
|
|
83
|
+
const closingBracket = FindMatchingBracket(content, arrayStart - 1);
|
|
84
|
+
if (closingBracket === -1) {
|
|
85
|
+
return content;
|
|
86
|
+
}
|
|
87
|
+
return content.slice(0, closingBracket) + entryStr + '\n ' + content.slice(closingBracket);
|
|
88
|
+
}
|
|
89
|
+
function RemoveEntriesForApp(content, appName) {
|
|
90
|
+
const pattern = new RegExp(`\\s*\\{[^{}]*AppName:\\s*'${EscapeRegex(appName)}'[^{}]*\\},?`, 'g');
|
|
91
|
+
return content.replace(pattern, '');
|
|
92
|
+
}
|
|
93
|
+
function ToggleEntriesForApp(content, appName, enabled) {
|
|
94
|
+
const pattern = new RegExp(`(AppName:\\s*'${EscapeRegex(appName)}'[^{}]*Enabled:\\s*)(?:true|false)`, 'g');
|
|
95
|
+
return content.replace(pattern, `$1${enabled}`);
|
|
96
|
+
}
|
|
97
|
+
function FindMatchingBracket(content, openPos) {
|
|
98
|
+
const openChar = content[openPos];
|
|
99
|
+
const closeChar = openChar === '[' ? ']' : '}';
|
|
100
|
+
let depth = 1;
|
|
101
|
+
let pos = openPos + 1;
|
|
102
|
+
while (pos < content.length && depth > 0) {
|
|
103
|
+
if (content[pos] === openChar)
|
|
104
|
+
depth++;
|
|
105
|
+
if (content[pos] === closeChar)
|
|
106
|
+
depth--;
|
|
107
|
+
pos++;
|
|
108
|
+
}
|
|
109
|
+
return depth === 0 ? pos - 1 : -1;
|
|
110
|
+
}
|
|
111
|
+
function EscapeRegex(str) {
|
|
112
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=config-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/install/config-manager.ts"],"names":[],"mappings":"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"}
|