# Example Manifest: MJExplorer (Client-Side Angular)

This is an example of the manifest generated by `mj codegen manifest` when run against the **MJExplorer** Angular application.

- **Dependencies walked:** 1,179
- **Packages with @RegisterClass:** 17
- **Total classes discovered:** 720

The manifest uses **named imports** for every `@RegisterClass` decorated class and places them all in an exported `CLASS_REGISTRATIONS` array, creating a static code path that prevents tree-shaking from removing them.

Notice the client-specific packages: Angular components (`ng-artifacts`, `ng-ask-skip`, `ng-auth-services`, `ng-core-entity-forms`, `ng-dashboards`, `ng-explorer-core`, `ng-explorer-settings`, `ng-file-storage`, `ng-react`). Server-only packages like AI providers, encryption, and scheduling are absent.

> **Note:** The full manifest is ~1,557 lines. This example is truncated for readability — only a few representative packages are shown. No cross-package name collisions were detected in this app.

```typescript
/**
 * AUTO-GENERATED FILE - DO NOT EDIT
 * Generated by mj codegen manifest
 * App: mj_explorer
 * Dependency tree: 1179 packages walked, 17 contain @RegisterClass
 *
 * This file imports every @RegisterClass decorated class by name and places
 * them in an exported array, creating a static code path that prevents
 * tree-shaking from removing them.
 */

/* eslint-disable @typescript-eslint/no-unused-vars */

// @memberjunction/actions-base (2 classes)
import {
    MJActionEntityExtended,
    MJEntityActionEntityExtended,
} from '@memberjunction/actions-base';

// @memberjunction/ai-core-plus (7 classes)
import {
    AIAgentEntityExtended,
    AIAgentRunEntityExtended,
    AIAgentRunStepEntityExtended,
    AIModelEntityExtended,
    AIPromptCategoryEntityExtended,
    AIPromptEntityExtended,
    AIPromptRunEntityExtended,
} from '@memberjunction/ai-core-plus';

// @memberjunction/ai-engine-base (4 classes)
import {
    AICredentialBindingEntityExtended,
    PerHundredThousandTokensPriceUnitType,
    PerMillionTokensPriceUnitType,
    PerThousandTokensPriceUnitType,
} from '@memberjunction/ai-engine-base';

// @memberjunction/communication-types (1 classes)
import {
    MJCommunicationProviderEntityExtended,
} from '@memberjunction/communication-types';

// @memberjunction/core-entities (275 classes)
import {
    AIActionEntity,
    AIAgentActionEntity,
    // ... 271 more classes ...
    WorkspaceItemEntity,
} from '@memberjunction/core-entities';

// @memberjunction/entity-communications-base (1 classes)
import {
    MJEntityCommunicationMessageTypeEntityExtended,
} from '@memberjunction/entity-communications-base';

// @memberjunction/ng-artifacts (6 classes)
import {
    CodeArtifactViewerComponent,
    ComponentArtifactViewerComponent,
    HtmlArtifactViewerComponent,
    JsonArtifactViewerComponent,
    MarkdownArtifactViewerComponent,
    SvgArtifactViewerComponent,
} from '@memberjunction/ng-artifacts';

// @memberjunction/ng-ask-skip (1 classes)
import {
    SkipChatWrapperComponent,
} from '@memberjunction/ng-ask-skip';

// @memberjunction/ng-auth-services (3 classes)
import {
    MJAuth0Provider,
    MJMSALProvider,
    MJOktaProvider,
} from '@memberjunction/ng-auth-services';

// @memberjunction/ng-core-entity-forms (283 classes)
import {
    AIActionFormComponent,
    AIAgentActionFormComponent,
    // ... 279 more classes ...
    WorkspaceItemFormComponent,
} from '@memberjunction/ng-core-entity-forms';

// @memberjunction/ng-dashboard-viewer (8 classes)
import {
    ArtifactConfigPanelComponent,
    ArtifactPartComponent,
    QueryConfigPanelComponent,
    QueryPartComponent,
    ViewConfigPanelComponent,
    ViewPartComponent,
    WebURLConfigPanelComponent,
    WebURLPartComponent,
} from '@memberjunction/ng-dashboard-viewer';

// @memberjunction/ng-dashboards (50 classes)
import {
    APIKeysResourceComponent,
    ActionExplorerComponent,
    ActionsOverviewComponent,
    // ... 45 more classes ...
    TestingVersionResourceComponent,
} from '@memberjunction/ng-dashboards';

// @memberjunction/ng-explorer-core (12 classes)
import {
    ArtifactResource,
    BaseUserMenu,
    ChatCollectionsResource,
    ChatConversationsResource,
    ChatTasksResource,
    DashboardResource,
    EntityRecordResource,
    ListDetailResource,
    NotificationsResource,
    QueryResource,
    SearchResultsResource,
    UserViewResource,
} from '@memberjunction/ng-explorer-core';

// @memberjunction/ng-explorer-settings (6 classes)
import {
    ApplicationManagementComponent,
    EntityPermissionsComponent,
    RoleManagementComponent,
    SettingsComponent,
    SqlLoggingComponent,
    UserManagementComponent,
} from '@memberjunction/ng-explorer-settings';

// @memberjunction/ng-file-storage (1 classes)
import {
    FileBrowserResource,
} from '@memberjunction/ng-file-storage';

// @memberjunction/ng-react (1 classes)
import {
    RuntimeUtilities,
} from '@memberjunction/ng-react';

// mj_generatedentities (59 classes)
import {
    AccreditingBodyEntity,
    AdvocacyActionEntity,
    // ... 55 more classes ...
    SegmentEntity,
} from 'mj_generatedentities';

/**
 * Runtime references to every @RegisterClass decorated class.
 * This array creates a static code path the bundler cannot tree-shake.
 */
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const CLASS_REGISTRATIONS: any[] = [
    MJActionEntityExtended,
    MJEntityActionEntityExtended,
    AIAgentEntityExtended,
    AIAgentRunEntityExtended,
    // ... all 720 classes listed here ...
    FileBrowserResource,
    RuntimeUtilities,
    AccreditingBodyEntity,
    // ...
    SegmentEntity,
];

/** Marker constant indicating the manifest has been loaded. */
export const CLASS_REGISTRATIONS_MANIFEST_LOADED = true;

/** Total @RegisterClass decorated classes discovered in dependency tree */
export const CLASS_REGISTRATIONS_COUNT = 720;

/** Packages imported by this manifest */
export const CLASS_REGISTRATIONS_PACKAGES = [
    '@memberjunction/actions-base',
    '@memberjunction/ai-core-plus',
    '@memberjunction/ai-engine-base',
    '@memberjunction/communication-types',
    '@memberjunction/core-entities',
    '@memberjunction/entity-communications-base',
    '@memberjunction/ng-artifacts',
    '@memberjunction/ng-ask-skip',
    '@memberjunction/ng-auth-services',
    '@memberjunction/ng-core-entity-forms',
    '@memberjunction/ng-dashboard-viewer',
    '@memberjunction/ng-dashboards',
    '@memberjunction/ng-explorer-core',
    '@memberjunction/ng-explorer-settings',
    '@memberjunction/ng-file-storage',
    '@memberjunction/ng-react',
    'mj_generatedentities',
] as const;
```
