import Model from '@ember-data/model'; import EmberArray from '@ember/array'; import ComputedProperty from '@ember/object/computed'; import Fragment from 'ember-data-model-fragments/fragment'; import FragmentRegistry from 'ember-data-model-fragments/types/registries/fragment'; // eslint-disable-next-line ember/use-ember-data-rfc-395-imports import TransformRegistry from 'ember-data/types/registries/transform'; interface FragmentArray extends EmberArray { addFragment(fragment: T): T; removeFragment(fragment: T): T; createFragment(attributes?: Partial): T; } interface FragmentOptions { polymorphic?: boolean; typeKey?: string | ((data: FragmentRegistry[K], owner: Model) => string); defaultValue?: Partial | (() => Partial); } type TransformType = ReturnType< TransformRegistry[K]['deserialize'] >; export function fragment( type: K, options?: FragmentOptions, ): ComputedProperty; export function fragmentArray( type: K, options?: FragmentOptions, ): ComputedProperty>; export function array(): ComputedProperty; export function fragmentOwner(): ComputedProperty;