Skip to content

Documentation / @warp-drive/legacy / model/migration-support / DelegatingSchemaService

Class: DelegatingSchemaService

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:524

The SchemaService provides the ability to query for information about the structure of any resource type.

Applications can provide any implementation of the SchemaService they please so long as it conforms to this interface.

The design of the service means that schema information could be lazily populated, derived-on-demand, or progressively enhanced during the course of an application's runtime. The primary requirement is merely that any information the service needs to correctly respond to an inquest is available by the time it is asked.

The @ember-data/model package provides an implementation of this service which makes use of your model classes as the source of information to respond to queries about resource schema. While this is useful, this may not be ideal for your application. For instance, Schema information could be sideloaded or pre-flighted for API calls, resulting in no need to bundle and ship potentially large and expensive JSON or large Javascript based Models to pull information from.

To register a custom schema implementation, implement the store's createSchemaService hook to return an instance of your service.

ts
import Store from '@ember-data/store';
import CustomSchemas from './custom-schemas';

export default class extends Store {
  createSchemaService() {
    return new CustomSchemas();
  }
}

At runtime, both the Store and the CacheCapabilitiesManager provide access to this service via the schema property.

ts
export default class extends Component {
 @service store;

 get fields() {
   return this.store
     .schema
     .fields(this.args.dataType);
 }
}

Implements

Methods

attributesDefinitionFor()?

ts
optional attributesDefinitionFor(resource): AttributesSchema;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:525

DEPRECATED - use fields instead

Returns definitions for all properties of the specified resource that are considered "attributes". Generally these are properties that are not related to book-keeping state on the client and do not represent a linkage to another resource.

The return value should be a dictionary of key:value pairs where the key is the attribute or property's name and value is an object with at least the property name which should also match key.

Optionally, this object may also specify type, which should be a string reference to a transform, and options which should be dictionary in which any key:value pairs are permissable.

For instance, when using @ember-data/model, the following attribute definition:

ts
class extends Model {
  @attr('string', { defaultValue: 'hello' }) greeting;
  @attr('date') birthday;
  @attr firstName;
}

Would be returned as:

js
{
  greeting: { name: 'greeting', type: 'string', options: { defaultValue: 'hello' } },
  birthday: { name: 'birthday', type: 'date' },
  firstName: { name: 'firstName' }
}

Parameters

resource

ResourceKey | { type: string; }

Returns

AttributesSchema

Deprecated


CAUTION_MEGA_DANGER_ZONE_arrayExtensions()

ts
CAUTION_MEGA_DANGER_ZONE_arrayExtensions(field): 
  | null
| Map<string | symbol, ExtensionDef>;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:615

Retrieve the extension map for an array field

Parameters

field

ExtensibleField

Returns

| null | Map<string | symbol, ExtensionDef>


CAUTION_MEGA_DANGER_ZONE_objectExtensions()

ts
CAUTION_MEGA_DANGER_ZONE_objectExtensions(field, resolvedType): 
  | null
| Map<string | symbol, ExtensionDef>;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:608

Retrieve the extension map for an object field

Parameters

field

ExtensibleField

resolvedType

null | string

Returns

| null | Map<string | symbol, ExtensionDef>


CAUTION_MEGA_DANGER_ZONE_registerExtension()

ts
CAUTION_MEGA_DANGER_ZONE_registerExtension(extension): void;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:598

Register an extension for either objects or arrays

Parameters

extension

CAUTION_MEGA_DANGER_ZONE_Extension

Returns

void


CAUTION_MEGA_DANGER_ZONE_resourceExtensions()

ts
CAUTION_MEGA_DANGER_ZONE_resourceExtensions(resource): 
  | null
| Map<string | symbol, ExtensionDef>;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:602

Retrieve the extension map for a resource

Parameters

resource

ResourceKey | { type: string; }

Returns

| null | Map<string | symbol, ExtensionDef>


derivation()

ts
derivation(field): Derivation;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:573

Returns the derivation registered with the name provided by field.type. Validates that the field is a valid DerivedField.

Parameters

field

DerivedField | { type: string; }

Returns

Derivation


doesTypeExist()?

ts
optional doesTypeExist(type): boolean;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:527

DEPRECATED - use hasResource instead

Queries whether the SchemaService recognizes type as a resource type

Parameters

type

string

Returns

boolean

Deprecated


fields()

ts
fields(resource): Map<string, FieldSchema>;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:561

Queries for the fields of a given resource type or resource identity.

Should error if the resource type is not recognized.

Parameters

resource

ResourceKey | { type: string; }

Returns

Map<string, FieldSchema>


hashFn()

ts
hashFn(field): HashFn;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:570

Returns the hash function registered with the name provided by field.type. Validates that the field is a valid HashField.

Parameters

field

HashField | { type: string; }

Returns

HashFn


hasResource()

ts
hasResource(resource): boolean;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:546

Queries whether the SchemaService recognizes type as a resource type

Parameters

resource

ResourceKey | { type: string; }

Returns

boolean


hasTrait()

ts
hasTrait(type): boolean;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:549

Queries whether the SchemaService recognizes type as a resource trait

Parameters

type

string

Returns

boolean


isDelegated()

ts
isDelegated(resource): boolean;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:538

Parameters

resource

ResourceKey | { type: string; }

Returns

boolean


registerDerivation()

ts
registerDerivation<R, T, FM>(derivation): void;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:591

Enables registration of a derivation.

The derivation can later be retrieved by the name attached to it's [Type] property.

Type Parameters

R

R

T

T

FM

FM extends | null | ObjectValue

Parameters

derivation

Derivation<R, T, FM>

Returns

void


registerHashFn()

ts
registerHashFn(hashFn): void;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:594

Enables registration of a hashing function

The hashing function can later be retrieved by the name attached to it's [Type] property.

Parameters

hashFn

HashFn

Returns

void


registerResource()

ts
registerResource(schema): void;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:585

Enables registration of a single Schema representing either a resource in PolarisMode or LegacyMode or an ObjectSchema representing an embedded structure in other schemas.

This can be useful for either pre-loading schema information or for registering schema information delivered by API calls or other sources just-in-time.

Parameters

schema

ResourceSchema | ObjectSchema

Returns

void


registerResources()

ts
registerResources(schemas): void;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:582

Enables registration of multiple Schemas at once.

This can be useful for either pre-loading schema information or for registering schema information delivered by API calls or other sources just-in-time.

Parameters

schemas

( | ResourceSchema | ObjectSchema)[]

Returns

void


registerTransformation()

ts
registerTransformation(transform): void;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:588

Enables registration of a transformation.

The transformation can later be retrieved by the name attached to it's [Type] property.

Parameters

transform

Transformation

Returns

void


relationshipsDefinitionFor()?

ts
optional relationshipsDefinitionFor(resource): RelationshipsSchema;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:526

DEPRECATED - use fields instead

Returns definitions for all properties of the specified resource that are considered "relationships". Generally these are properties that represent a linkage to another resource.

The return value should be a dictionary of key:value pairs where the key is the relationship or property's name and value is an object with at least the following properties:

  • name which should also match the key used in the dictionary.

  • kind which should be either belongsTo or hasMany

  • type which should be the related resource's string "type"

  • options which should be a dictionary allowing any key but with at least the below keys present.

  • options.async a boolean representing whether data for this relationship is typically loaded on-demand.

  • options.inverse a string or null representing the field name / key of the corresponding relationship on the inverse resource.

Additionally the following options properties are optional. See Polymorphic Relationships

  • options.polymorphic a boolean representing whether multiple resource types can be used to satisfy this relationship.
  • options.as a string representing the abstract type that the concrete side of a relationship must specify when fulfilling a polymorphic inverse.

For example, the following Model using @ember-data/model would generate this relationships definition by default:

js
class User extends Model {
  @belongsTo('user', { async: false, inverse: null }) bestFriend;
  @hasMany('user', { async: true, inverse: 'friends' }) friends;
  @hasMany('pet', { async: false, polymorphic: true, inverse: 'owner' }) pets;
}

Which would be returned as

js
{
  bestFriend: {
    name: 'bestFriend',
    kind: 'belongsTo',
    type: 'user',
    options: {
      async: false,
      inverse: null
    }
  },
  friends: {
    name: 'friends',
    kind: 'hasMany',
    type: 'user',
    options: {
      async: true,
      inverse: 'friends'
    }
  },
  pets: {
    name: 'pets',
    kind: 'hasMany',
    type: 'pet',
    options: {
      async: false,
      polymorphic: true,
      inverse: 'owner'
    }
  },
}

Parameters

resource

ResourceKey | { type: string; }

Returns

RelationshipsSchema

Deprecated


resource()

ts
resource(resource): 
  | ResourceSchema
  | ObjectSchema;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:576

Returns the schema for the provided resource type.

Parameters

resource

ResourceKey | { type: string; }

Returns

| ResourceSchema | ObjectSchema


resourceHasTrait()

ts
resourceHasTrait(resource, trait): boolean;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:555

Queries whether the given resource has the given trait

Parameters

resource

ResourceKey | { type: string; }

trait

string

Returns

boolean


resourceTypes()

ts
resourceTypes(): readonly string[];

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:542

Returns all known resource types

Returns

readonly string[]


transformation()

ts
transformation(field): Transformation;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:567

Returns the transformation registered with the name provided by field.type. Validates that the field is a valid transformable.

Parameters

field

GenericField | ObjectField | ArrayField | { type: string; }

Returns

Transformation

Properties

_preferred

ts
_preferred: SchemaService;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:530


_secondary

ts
_secondary: SchemaService;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:531

Constructors

Constructor

ts
new DelegatingSchemaService(store, schema): DelegatingSchemaService;

Defined in: warp-drive-packages/legacy/src/model/migration-support.ts:533

Parameters

store

Store

schema

SchemaService

Returns

DelegatingSchemaService

Released under the MIT License.