Documentation / @ember-data/store / types / SchemaService
Interface: SchemaService
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:62
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.
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.
export default class extends Component {
@service store;
get fields() {
return this.store
.schema
.fields(this.args.dataType);
}
}
Methods
attributesDefinitionFor()?
optional attributesDefinitionFor(identifier): AttributesSchema;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:256
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:
class extends Model {
@attr('string', { defaultValue: 'hello' }) greeting;
@attr('date') birthday;
@attr firstName;
}
Would be returned as:
{
greeting: { name: 'greeting', type: 'string', options: { defaultValue: 'hello' } },
birthday: { name: 'birthday', type: 'date' },
firstName: { name: 'firstName' }
}
Parameters
identifier
ObjectWithStringTypeProperty
| RecordIdentifier
Returns
AttributesSchema
Deprecated
cacheFields()?
optional cacheFields(resource): Map<string,
| LegacyAttributeField
| LegacyBelongsToField
| LegacyHasManyField
| LinksModeBelongsToField
| LinksModeHasManyField
| GenericField
| ObjectField
| SchemaObjectField
| ArrayField
| SchemaArrayField
| ResourceField
| CollectionField>;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:105
Queries for the fields of a given resource type or resource identity.
Should error if the resource type is not recognized.
Parameters
resource
StableRecordIdentifier
| ObjectWithStringTypeProperty
Returns
Map
<string
, | LegacyAttributeField
| LegacyBelongsToField
| LegacyHasManyField
| LinksModeBelongsToField
| LinksModeHasManyField
| GenericField
| ObjectField
| SchemaObjectField
| ArrayField
| SchemaArrayField
| ResourceField
| CollectionField
>
CAUTION_MEGA_DANGER_ZONE_arrayExtensions()?
optional CAUTION_MEGA_DANGER_ZONE_arrayExtensions(field):
| null
| Map<string | symbol, ExtensionDef>;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:367
Retrieve the extension map for an array field
Parameters
field
ExtensibleField
Returns
| null
| Map
<string
| symbol
, ExtensionDef
>
CAUTION_MEGA_DANGER_ZONE_hasExtension()?
optional CAUTION_MEGA_DANGER_ZONE_hasExtension(ext): boolean;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:373
Check if a specific extension has been registered previously
Parameters
ext
kind
"object"
| "array"
name
string
Returns
boolean
CAUTION_MEGA_DANGER_ZONE_objectExtensions()?
optional CAUTION_MEGA_DANGER_ZONE_objectExtensions(field, resolvedType):
| null
| Map<string | symbol, ExtensionDef>;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:361
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()?
optional CAUTION_MEGA_DANGER_ZONE_registerExtension(extension): void;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:347
Register an extension for either objects or arrays
Parameters
extension
CAUTION_MEGA_DANGER_ZONE_Extension
Returns
void
CAUTION_MEGA_DANGER_ZONE_resourceExtensions()?
optional CAUTION_MEGA_DANGER_ZONE_resourceExtensions(resource):
| null
| Map<string | symbol, ExtensionDef>;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:353
Retrieve the extension map for a resource
Parameters
resource
StableRecordIdentifier
| { type
: string
; }
Returns
| null
| Map
<string
| symbol
, ExtensionDef
>
derivation()
derivation(field): Derivation;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:126
Returns the derivation registered with the name provided by field.type
. Validates that the field is a valid DerivedField.
Parameters
field
ObjectWithStringTypeProperty
| DerivedField
Returns
doesTypeExist()?
optional doesTypeExist(type): boolean;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:71
DEPRECATED - use hasResource
instead
Queries whether the SchemaService recognizes type
as a resource type
Parameters
type
string
Returns
boolean
Deprecated
fields()
fields(resource): Map<string, FieldSchema>;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:97
Queries for the fields of a given resource type or resource identity.
Should error if the resource type is not recognized.
Parameters
resource
StableRecordIdentifier
| ObjectWithStringTypeProperty
Returns
Map
<string
, FieldSchema
>
hashFn()
hashFn(field): HashFn;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:119
Returns the hash function registered with the name provided by field.type
. Validates that the field is a valid HashField.
Parameters
field
ObjectWithStringTypeProperty
| HashField
Returns
hasResource()
hasResource(resource): boolean;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:77
Queries whether the SchemaService recognizes type
as a resource type
Parameters
resource
StableRecordIdentifier
| ObjectWithStringTypeProperty
Returns
boolean
hasTrait()
hasTrait(type): boolean;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:83
Queries whether the SchemaService recognizes type
as a resource trait
Parameters
type
string
Returns
boolean
registerDerivation()
registerDerivation<R, T, FM>(derivation): void;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:172
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()
registerHashFn(hashFn): void;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:185
Enables registration of a hashing function
The hashing function can later be retrieved by the name attached to it's [Type]
property.
Parameters
hashFn
Returns
void
registerResource()
registerResource(schema): void;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:154
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
Returns
void
registerResources()
registerResources(schemas): void;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:142
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
Schema
[]
Returns
void
registerTrait()?
optional registerTrait(trait): void;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:214
Registers a Trait for use by resource schemas.
Traits are re-usable collections of fields that can be composed to build up a resource schema. Often they represent polymorphic behaviors a resource should exhibit.
When we finalize a resource, we walk its traits and apply their fields to the resource's fields. All specified traits must be registered by this time or an error will be thrown.
Traits are applied left-to-right, with traits of traits being applied in the same way. Thus for the most part, application of traits is a post-order graph traversal problem.
A trait is only ever processed once. If multiple traits (A, B, C) have the same trait (D) as a dependency, D will be included only once when first encountered by A.
If a cycle exists such that trait A has trait B which has Trait A, trait A will be applied after trait B in production. In development a cycle error will be thrown.
Fields are finalized on a "last wins principle". Thus traits appearing higher in the tree and further to the right of a traits array take precedence, with the resource's fields always being applied last and winning out.
Parameters
trait
Returns
void
registerTransformation()
registerTransformation(transform): void;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:163
Enables registration of a transformation.
The transformation can later be retrieved by the name attached to it's [Type]
property.
Parameters
transform
Returns
void
relationshipsDefinitionFor()?
optional relationshipsDefinitionFor(identifier): RelationshipsSchema;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:335
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 thekey
used in the dictionary.kind
which should be eitherbelongsTo
orhasMany
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:
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
{
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
identifier
ObjectWithStringTypeProperty
| RecordIdentifier
Returns
RelationshipsSchema
Deprecated
resource()
resource(resource): Schema;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:132
Returns the schema for the provided resource type.
Parameters
resource
StableRecordIdentifier
| ObjectWithStringTypeProperty
Returns
resourceHasTrait()
resourceHasTrait(resource, trait): boolean;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:89
Queries whether the given resource has the given trait
Parameters
resource
StableRecordIdentifier
| ObjectWithStringTypeProperty
trait
string
Returns
boolean
resourceTypes()
resourceTypes(): readonly string[];
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:341
Returns all known resource types
Returns
readonly string
[]
transformation()
transformation(field): Transformation;
Defined in: warp-drive-packages/core/declarations/store/-types/q/schema-service.d.ts:112
Returns the transformation registered with the name provided by field.type
. Validates that the field is a valid transformable.
Parameters
field
ObjectWithStringTypeProperty
| GenericField
| ObjectField
| ArrayField