npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@judo/model-api

v0.1.1

Published

TypeScript interfaces mirroring the ECore meta-model for JUDO UI Runtime

Readme

@judo/model-api

TypeScript interfaces mirroring the ECore meta-model for JUDO UI Runtime

Purpose

Foundational type system for the entire JUDO UI React framework. Defines all TypeScript interfaces, enums, service symbols, and type aliases that mirror the ECore XML meta-model (meta-model/ui.ecore). This is a pure types + symbols package — no runtime logic, no React hooks, no context providers.

Architecture Layer

Layer 1 (Foundation) — depended upon by every other package in the monorepo.

Dependencies

  • react (peer, optional) — only for ComponentType / ReactElement in extensibility types
  • typescript (dev) — build-time only

File Structure

src/
├── index.ts                # Barrel re-export
├── enums.ts                # All enums (layout, UI, data) as `const` objects
├── extensibility.ts        # Extensibility types (customization configs, component props)
├── services.ts             # Service symbols, service interfaces, hook factory types
├── data/
│   ├── index.ts
│   ├── elements.ts         # Core data model interfaces (ClassType, RelationType, etc.)
│   └── types.ts            # Concrete DataType variants (StringType, NumericType, etc.)
├── structural/
│   ├── index.ts
│   ├── actions.ts          # All ActionDefinition interfaces (~37 action types)
│   └── application.ts      # Application, PageDefinition, NavigationItem, Action, Theme, Auth
└── visual/
    ├── index.ts
    ├── base.ts             # ModelElement, NamedElement, LabeledElement
    ├── layout.ts           # VisualElement, Container, Flex, PageContainer, Size, etc.
    ├── buttons.ts          # ButtonGroup, Button
    ├── display.ts          # Text, Label, Formatted, IconImage
    ├── inputs.ts           # All input field interfaces (14 input types + Option, InputValueConstraint)
    ├── link.ts             # Link (autocomplete/relation field)
    ├── table.ts            # Table, Column, Filter
    └── tabs.ts             # TabController, Tab

Exports Summary

Enums (27)

All enums use as const objects with companion types for tree-shaking (no TypeScript enum keyword).

| Enum | Values | | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | Axis | HORIZONTAL, VERTICAL | | Fit | NONE, LOOSE, TIGHT | | Stretch | NONE, HORIZONTAL, VERTICAL, BOTH | | MainAxisAlignment | CENTER, END, SPACEAROUND, SPACEBETWEEN, SPACEEVENLY, START | | CrossAxisAlignment | BASELINE, CENTER, END, START, STRETCH | | MainAxisSize | MIN, MAX | | Alignment | 9-point grid (TOP_LEFTBOTTOM_RIGHT) | | DialogSize | XS, SM, MD, LG, XL | | PageContainerType | TABLE, FORM, VIEW | | ButtonStyle | contained, text, outlined | | ConfirmationType | NONE, CONDITIONAL, MANDATORY | | Sort | NONE, ASC, DESC | | FilterOperationType | EQUAL, NOT_EQUAL, IS_EMPTY, IS_NOT_EMPTY, LESS, LESS_OR_EQUAL, GREATER, GREATER_OR_EQUAL, LIKE | | CheckboxSelection | AUTO, ENABLED, DISABLED | | TableRepresentation | TABLE, TAG, CARD | | MenuLayout | VERTICAL, HORIZONTAL | | TabOrientation | HORIZONTAL, VERTICAL | | DurationUnit | NANOSECONDYEAR (10 values) | | Placement | TOP, BOTTOM, START, END, DEFAULT | | TitleFrom | LABEL, ATTRIBUTE | | ClaimType | UNDEFINED, EMAIL, USERNAME | | RelationKind | ASSOCIATION, COMPOSITION, AGGREGATION, STATIC | | MemberType | STORED, DERIVED, MAPPED, TRANSIENT, ACCESS | | RelationBehaviourType | LIST, CREATE, SET, UNSET, ADD, REMOVE, RANGE, VALIDATE_CREATE, TEMPLATE, UPDATE, VALIDATE_UPDATE, DELETE, REFRESH, EXPORT | | ClassBehaviourType | REFRESH, UPDATE, VALIDATE_UPDATE, DELETE, TEMPLATE | | OperationTypeEnum | MAPPED, STATIC | | OperationTargetBehaviourType | REFRESH, UPDATE, DELETE, VALIDATE_INPUT |

Visual Interfaces

| Interface | Description | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | | ModelElement | Base for all model elements with eContainer parent navigation | | NamedElement | Adds name, optional sourceId, annotations | | LabeledElement | Mixin for elements with labels and icons | | VisualElement | Core base for ALL UI components — every visual widget extends this | | Container | Base container with children array | | Flex | Flex layout container (@type: "Flex") | | PageContainer | Top-level page container (@type: "PageContainer") | | Spacer | Empty space for layout | | Divider | Visual divider/separator | | Size | Size specification (width/height) | | SizeConstraint | Min/max size constraints | | Frame | Card/panel frame styling | | Icon | Icon definition with iconName | | Align | Alignment specification | | ButtonGroup / Button | Button grouping and individual buttons | | Text / Label / Formatted / IconImage | Display elements | | TextInput / NumericInput / DateInput / DateTimeInput / TimeInput | Input fields | | TextArea / Checkbox / Switch / EnumerationCombo / EnumerationRadio | More input types | | EnumerationToggleButtonbar / TrinaryLogicCombo / BinaryTypeInput / PasswordInput | Specialized inputs | | Input / InputValueConstraint / Option | Input base types | | Table / Column / Filter | Data table elements | | Link | Autocomplete/relation field | | TabController / Tab | Tabbed layout | | InputElement | Union of all 14 input types |

Data Interfaces

| Interface | Description | | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | | DataElement | Abstract base for all data elements | | DataType | Abstract base for data type variants | | ClassType | Transfer object type with attributes, relations, operations | | RelationType | Reference to another class | | AttributeType | Scalar attribute on a class | | OperationType | Callable method/operation | | OperationParameterType | Operation input/output parameter | | ApplicationType | Application type reference | | AccessBasedNavigation | Post-call navigation for operation results | | Annotation | Model element annotation | | MimeType | MIME type definition | | StringType / NumericType / BooleanType / DateType / TimestampType / TimeType / PasswordType / EnumerationType / BinaryType | Data type variants | | EnumerationMember | Member of an enumeration type | | AnyDataType | Union of all 9 data type variants |

Structural Interfaces

| Interface | Description | | ----------------------------------------- | ------------------------------------------------------------------------- | | Application | Root application model — contains everything | | PageDefinition | Page definition binding container + actions | | Action | Action binding between pages | | NavigationController / NavigationItem | Navigation menu | | Theme | Model-level theme colors | | Authentication / Claim | OIDC authentication configuration | | ActionDefinition | Abstract base for all action definitions | | Confirmation | Confirmation dialog configuration | | 37 concrete *ActionDefinition types | Navigation, CRUD, relation, operation, form, selector, autocomplete, etc. | | AnyActionDefinition | Discriminated union of all action definition types |

Service Symbols (13)

| Symbol | Purpose | | ---------------------------- | ---------------------------------------- | | MODEL_LOADER_SERVICE | DI key for model loading service | | MODEL_REGISTRY_SERVICE | DI key for model registry service | | NAVIGATION_BADGE_SERVICE | DI key for navigation badge service | | THEME_SERVICE | DI key for theme service | | ACTION_HANDLER_FACTORY | DI key for action handler hook factories | | COMPONENT_OVERRIDE | DI key for component overrides | | COMPONENT_OVERRIDE_SERVICE | DI key for component override service | | NOTIFICATION_SERVICE | DI key for notification service | | DIALOG_SERVICE | DI key for dialog service | | UNSAVED_CHANGES_GUARD | DI key for unsaved changes guard | | SESSION_TIMEOUT_GUARD | DI key for session timeout guard | | LOADING_SERVICE | DI key for loading indicator service | | I18N_SERVICE | DI key for internationalization service |

Service Interfaces

Key service interfaces: ModelLoaderService, ModelRegistryService, NavigationBadgeService, ThemeService, ComponentOverrideService — all expose subscribe/getSnapshot for React's useSyncExternalStore.

Supporting types: RegistrySnapshot, BadgeInfo, ThemeConfig, ActionHandlerHook, ActionHandlerFn, ActionHandlerContext, ActionHandlerFactoryProperties, BuiltInActionHandlerFactoryProperties, OverrideComponent, ComponentOverride, ComponentOverrideProperties.

Extensibility Types

| Interface / Type | Description | | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | CustomComponentProps | Props passed to every custom component implementation (element, page, onDispatch) | | CustomComponent | A custom component implementation type | | ElementTypeMap | Maps @type discriminator strings to TypeScript interfaces | | ElementTypeName | Union of all valid @type discriminator strings | | ComponentInterceptor | Type-safe interceptor for a specific element type | | AnyComponentInterceptor | Loose interceptor for runtime use | | ComponentInterceptors | Map of element type → interceptor functions | | ActionLifecycleContext | Context for action lifecycle hooks (action, page, transfer, callDefault, etc.) | | ActionLifecycle | Standard lifecycle methods: before, execute, after, onError | | PageActionOverrides | Map of action sourceId → partial ActionLifecycle | | VisualPropertySet | Set of overridable visual properties (hidden, disabled, required, label, readOnly, className, custom) | | VisualPropertyOverrides | Map of element sourceId → partial VisualPropertySet | | VisualPropertiesHook | Hook returning visual property overrides | | SubThemeHook | Function producing scoped MUI ThemeOptions for a named sub-theme | | PageCustomization | Per-page customization bundle (actions, visualProperties, typeaheadProviders, tableRowHighlighting, enumOptionFilter, dateValidationProps, columnCustomizers, itemContainerConfigs) | | CustomizationsConfig | Top-level config (pages, components, componentInterceptors, subThemeProviders, redirectHandler, customRoutes, menuCustomizer, footerText, heroComponent, settingsPage, guestComponent) | | TableRowHighlightConfig | Row highlighting rule (name, label, backgroundColor, color, condition) | | EnumOptionFilterFn | Filter function for enum input options | | DateValidationProps | Dynamic date validation constraints (minDate, maxDate, disableFuture, disablePast) | | DateValidationFn | Function returning date validation constraints from transfer data | | ColumnCustomizerFn | Function receiving GridColDef + Column to customize DataGrid columns | | ItemComponentProps | Props for custom item components (row, columns, onRowClick, onDelete) | | ItemToolbarProps | Props for custom item toolbar (element, totalCount) | | ItemContainerConfig | Config for CARD/TAG representations (layout, ItemElement, ToolbarElement) | | GuestPageProps | Props for custom guest page (application, signIn) | | HeroComponentProps | Props for custom hero component (principal, actorName, signOut, etc.) |

Key Patterns

  • EMF/ECore mirroring: Every interface maps to a named ECore class via @type discriminator
  • Simplified @type values: Visual and action types use "Flex", "Table", "BackActionDefinition" (no ui: prefix); data types use "data:ClassType", "data:StringType" (keep data: prefix)
  • as const objects: All enums use as const objects + companion types for tree-shaking (no TypeScript enum)
  • Resolved references: Interfaces use resolved object references (not string $ref pointers)
  • EMF defaults: Properties with ECore defaults are optional — parser fills them in
  • eContainer parent navigation: Set during parsing for upward tree traversal
  • Symbol-based DI: All 13 service symbols use Symbol.for() for cross-package service discovery
  • subscribe/getSnapshot contract: Services implement the React 18 useSyncExternalStore protocol
  • Three-layer separation: Data layer → Structural layer → Visual layer (deliberately decoupled)