Member Junction
    Preparing search index...
    • Executes the full install flow for an Open App.

      Every capability block is optional and additive: an app may extend MJ via a schema, metadata, packages, any combination, or be manifest-only. Each step below is gated on its block being present, so a manifest-only app simply records itself and finishes. The persisted MJ: Open Apps.ManifestJSON is the source of truth re-read by upgrade/remove.

      Steps (each no-ops when its block is absent):

      1. Fetch manifest from GitHub
      2. Validate manifest (Zod)
      3. Validate MJ version compatibility
      4. Resolve the FULL transitive dependency graph (fetch every dependency's manifest, detect cross-repo cycles, topologically sort) — skipped when this call is itself a pre-resolved member of a parent's graph
      5. Install dependencies in leaf-first order (each via _skipDependencyResolution)
      6. Check schema (no collision)
      7. Create schema
      8. Run migrations (Skyway - DDL + metadata DML)
      9. Record installation with 'Installing' status
      10. Update package.json files
      11. Run npm install
      12. Update server + client config (dynamicPackages.server/.client in mj.config.cjs; client imports are materialized into MJExplorer's manifest at its next prebuild)
      13. Update angular.json prebundle excludes (prevents Vite singleton duplication)
      14. Execute hooks (postInstall)
      15. Finalize status to 'Active'

      Parameters

      Returns Promise<AppOperationResult>