Member Junction
    Preparing search index...
    PackagePlatform: "node" | "browser" | "both"

    Where a manifest package is allowed to RUN — the third axis of a packages entry, alongside which array it sits in (server/client/shared) and its role.

    shared answers "which tiers is this package FOR", not "can this package run there". An actions package is shared source — the server imports it and the app's own types reference it — but it cannot be loaded in a browser: a first-party *-actions package depends on @memberjunction/aiengine, directly or via @memberjunction/core-entities-server, and aiengine depends on @memberjunction/storage — the one package that declares @google-cloud/storage, which imports fs, child_process, stream and node:async_hooks. Before this axis existed, shared put all of that in the Angular bundle and the host Explorer could not build (#4428).

    CANONICAL. Two other sites deliberately keep their own copy of this rule rather than import it, because neither may take a dependency on this package:

    • packages/DynamicPackages/src/discover.ts (ships to the browser; one dependency by design)
    • packages/MJCLI/src/lib/dev-workspace/build.ts Change one, change all three. package-platform.test.ts holds the canonical case list; the two copies' specs mirror its cases by hand, because neither package can import this one.