Member Junction
    Preparing search index...
    • Removes this app's dynamicPackages entries whose PackageName is NOT in the supplied manifest — i.e. packages a NEW version of the app no longer ships.

      The Add* functions are add-only and idempotent, which is correct for install but leaves upgrade converging on the union of every version ever installed: a dropped startupExport package keeps its server entry, so the loader tries to import a package that may no longer build. Pair this with AddServerDynamicPackages / AddClientDynamicPackages on the upgrade path to make the config match the new manifest exactly.

      Surviving entries are left byte-identical rather than removed and re-added, so a disabled app's Enabled: false state is preserved. Server and client keep-sets are computed per array, so a server-only package is not pruned from server just because it is absent from client.

      Parameters

      • repoRoot: string

        Absolute path to the monorepo root

      • manifest: {
            $schema?: string;
            categories?: string[];
            code?: { sourceDirectory?: string; visibility?: "public" | "private" };
            color?: string;
            configuration?: { schema?: Record<string, unknown> };
            dependencies?:
                | {
                    [k: string]: { repository: string; subpath?: string; version: string };
                }
                | Record<
                    string,
                    string
                    | { repository?: string; subpath?: string; version?: string },
                >;
            description?: string;
            displayName?: string;
            hooks?: {
                postInstall?: string;
                postInstallModule?: string;
                postUpgrade?: string;
                postUpgradeModule?: string;
                preRemove?: string;
                preRemoveModule?: string;
            };
            icon?: string;
            license?: string;
            manifestVersion?: 1;
            metadata?: { directory?: string };
            migrations?: {
                directory?: string;
                engine?: "flyway" | "skyway";
                teardownDirectory?: string;
            };
            mjVersionRange?: string;
            name?: string;
            packages?: {
                client?: {
                    name?: string;
                    role?: | "bootstrap"
                    | "actions"
                    | "engine"
                    | "provider"
                    | "module"
                    | "components"
                    | "library";
                    startupExport?: string;
                }[];
                prefix?: string;
                registry?: string;
                server?: {
                    name?: string;
                    role?: | "bootstrap"
                    | "actions"
                    | "engine"
                    | "provider"
                    | "module"
                    | "components"
                    | "library";
                    startupExport?: string;
                }[];
                shared?: {
                    name?: string;
                    role?: | "bootstrap"
                    | "actions"
                    | "engine"
                    | "provider"
                    | "module"
                    | "components"
                    | "library";
                    startupExport?: string;
                }[];
            };
            publisher?: { email?: string; name?: string; url?: string };
            repository?: string;
            schema?: {
                createIfNotExists?: boolean;
                entityPackage?: string;
                name?: string;
            };
            tags?: string[];
            version?: string;
        }

        The NEW (target) manifest the config should converge on

      • OptionalserverPackagePath: string

      Returns ConfigOperationResult

      Operation result