Projection Profile Types Reference
Complete reference for the four projection profile types: database, search, schema, and none. Covers fields, behaviour differences, naming conventions, and type resolution for each profile.
Every projection carries a profileType that determines how entity names, property names, and abstract types are transformed in the target entity list. The profile type also controls which additional fields are available on target properties and which resolution rules apply during conflict detection.
Profile Type Summary
| Profile Type | Purpose | Naming Convention | Type Resolution | Additional Property Fields |
|---|---|---|---|---|
| database | Map model entities to database tables and columns for a specific vendor (SQL Server, PostgreSQL, MySQL, etc.) | Applied from the linked DatabaseProfile (e.g. snake_case, PascalCase) | Abstract types resolve to concrete database types via the profile's typeMappings array | Column type, parameter template, indexing hints, partitioning |
| search | Map model entities to search index fields for a specific search engine (Azure Cognitive Search, Elasticsearch, etc.) | Applied from the linked SearchProfile | Abstract types resolve to search field types via the profile's fieldMappings | Analyser, searchable, filterable, sortable, facetable, vector dimensions |
| schema | Define API response/request shapes, type libraries, and serialisation contracts | Applied from the linked SchemaProfile (typically camelCase) | Abstract types resolve to serialisation types (string, number, boolean, array, object) | Format hints, nullable, read-only, write-only, discriminator |
| document | Define the structure and flow for document projection output | No naming transformation applied | No type resolution - uses model abstract types directly | Document flow configuration, page layout |
| api | Define API contracts including REST, AsyncAPI, webhooks, MCP, gRPC, and GraphQL endpoints | Applied from the linked API profile | Abstract types resolve to serialisation types appropriate for the API style | API type (rest, async, webhook, mcp, grpc, graphql), endpoint definitions, operation metadata |
| ui | Design model-projected wireframe screens with data-bound controls | No naming transformation applied | No type resolution - uses projection target entity types | Screen type, layout hints, control type inference, field bindings, API annotations |
| none | Pure structural transformation with no profile-specific behaviour. Used for medallion layers, staging, and intermediate transformations | No naming transformation applied | No type resolution - uses model abstract types directly | None |
ProjectionProfileType Union
The TypeScript union type that defines all valid profile types.
export type ProjectionProfileType = 'database' | 'search' | 'schema' | 'document' | 'api' | 'ui' | 'none';
Profile Fields on ProjectionDocument
Two fields on the projection document control profile behaviour.
| Field | Type | Description |
|---|---|---|
| profileType | ProjectionProfileType | Declares which profile category this projection belongs to. Determines which additional fields appear in the property editor and which conflict rules apply. |
| profileId | string (UUID) | References a specific profile instance. For database projections this points to a DatabaseProfile; for search it points to a SearchProfile; for schema it points to a SchemaProfile. Unused when profileType is 'none'. |
Database Profile
When profileType is 'database', the projection links to a DatabaseProfile stored at .neoarc-project/profiles/{name}.neoarc-db-profile.json.
| Behaviour | Detail |
|---|---|
| Naming convention | Entity and property names are transformed according to the profile's namingConvention field (e.g. snake_case for PostgreSQL, PascalCase for SQL Server). |
| Type resolution | Each property's abstract type (string, integer, boolean, etc.) is resolved to the vendor-specific concrete type via the profile's typeMappings array. Parameter templates like NVARCHAR({maxLength}) are populated from property constraints. |
| Conflict detection | Type mismatches between source and target trigger resolution prompts. Constraint narrowing (maxLength, precision) is detected and flagged. |
| Supported vendors | microsoft-sql-server, postgresql, mysql, oracle, mongodb, sqlite, snowflake, mariadb, cockroachdb, azure-table-storage, azure-cosmos-db, amazon-dynamodb, apache-cassandra, plus any custom vendor name. |
| Abstract types | string, integer, float, decimal, boolean, date, datetime, uuid, json, text, binary, enum. |
Search Profile
When profileType is 'search', the projection links to a SearchProfile.
| Behaviour | Detail |
|---|---|
| Naming convention | Field names are transformed according to the profile's naming convention (typically camelCase for search APIs). |
| Type resolution | Abstract types resolve to search engine field types (Edm.String, Edm.Int32, keyword, text, etc.) via the profile's fieldMappings. |
| Additional property fields | Each target property gains search-specific attributes: searchable, filterable, sortable, facetable, analyser name, synonym map, vector dimensions, and scoring profile. |
| Index structure | The projection's entity/property structure maps directly to the search index schema. Properties marked as key become the document key field. |
Schema Profile
When profileType is 'schema', the projection defines API request/response shapes, type libraries, or serialisation contracts.
| Behaviour | Detail |
|---|---|
| Naming convention | Property names follow the profile's serialisation convention (typically camelCase for JSON APIs). |
| Type resolution | Abstract types resolve to serialisation primitives: string, number, integer, boolean, array, object. |
| Entity extends | Schema entities can extend other entities in the same projection, creating inheritance hierarchies for polymorphic API responses. |
| Consumer root selection | Schema projections serve as type libraries. Consumers (endpoints, integrations) select which entity is the root for a specific request/response. |
| Additional property fields | Format hints (date-time, email, uri), nullable, readOnly, writeOnly, discriminator field for polymorphism. |
None (Pure Transformation)
When profileType is 'none', the projection performs structural transformation without any profile-specific behaviour.
| Behaviour | Detail |
|---|---|
| Naming convention | No transformation. Property and entity names remain as set by the architect. |
| Type resolution | No resolution. Properties retain their abstract types from the source. |
| Use cases | Medallion architecture layers (Bronze, Silver, Gold), staging areas, intermediate denormalisation steps, data vault hubs/links/satellites, star schema fact/dimension tables. |
| Chaining | Commonly used as intermediate projections in a chain: Model to Bronze (none) to Silver (none) to Gold (database). |
Structure Modes
Orthogonal to profile type, every projection declares a structure mode that affects how entities relate to each other.
| Mode | Description | Root Entity | Typical Profile Types |
|---|---|---|---|
| flat | All entities are peers at the same level. Used for relational tables, search indices, and flat API schemas. | Not applicable | database, search, schema, none |
| nested | Entities form a tree with a single root. Child entities are nested inside the root. Used for document databases and hierarchical JSON responses. | Required (rootEntityId) | database (MongoDB, Cosmos DB), schema |
Profile Selection in the Editor
The profile type is set when creating a new projection or changed from the projection settings panel. Changing the profile type clears the profileId and resets all profile-specific property fields. Existing transformation mappings and entity structures are preserved.