@medusajs/types
Version:
Medusa Types definition
264 lines • 10.1 kB
TypeScript
/**
* Prettify complex types to a flat object structure
*/
export type Prettify<T> = {
[K in keyof T]: T[K];
} & {};
/**
* Utility type used to remove some optional attributes (coming from K) from a type T
*/
export type WithRequiredProperty<T, K extends keyof T> = T & {
[Property in K]-?: T[Property];
};
/**
* @ignore
*/
export type PartialPick<T, K extends keyof T> = {
[P in K]?: T[P];
};
/**
* Representing a table in the database.
*/
export interface BaseEntity {
/**
* The ID of an entity's record.
*/
id: string;
/**
* The date an entity's record was created.
*/
created_at: Date;
/**
* The date an entity's record was updated.
*/
updated_at: Date;
}
/**
* Representing a deletable entity.
*/
export interface SoftDeletableEntity extends BaseEntity {
/**
* The date an entity's record was deleted.
*/
deleted_at: Date | null;
}
/**
* Temporary type fixing to allow any level of orders until we get to properly clean all the types
*/
export type FindConfigOrder = {
[Key: string]: "ASC" | "DESC" | (string & {}) | FindConfigOrder;
};
/**
* @interface
*
* An object that is used to configure how an entity is retrieved from the database. It accepts as a typed parameter an `Entity` class,
* which provides correct typing of field names in its properties.
*/
export interface FindConfig<Entity> {
/**
* An array of strings, each being attribute names of the entity to retrieve in the result.
*/
select?: (keyof Entity | (string & {}))[];
/**
* A number indicating the number of records to skip before retrieving the results.
*/
skip?: number | null | undefined;
/**
* A number indicating the number of records to return in the result.
*/
take?: number | null | undefined;
/**
* An array of strings, each being relation names of the entity to retrieve in the result.
*
* You can only retrieve data models defined in the same module. To retrieve linked data models
* from other modules, use [Query](https://docs.medusajs.com/learn/fundamentals/module-links/query) instead.
*/
relations?: string[];
/**
* An object used to specify how to sort the returned records. Its keys are the names of attributes of the entity, and a key's value can either be `ASC`
* to sort retrieved records in an ascending order, or `DESC` to sort retrieved records in a descending order.
*/
order?: FindConfigOrder;
/**
* A boolean indicating whether deleted records should also be retrieved as part of the result. This only works if the entity extends the
* `SoftDeletableEntity` class.
*/
withDeleted?: boolean;
/**
* Enable ORM specific defined filters
*/
filters?: Record<string, any>;
/**
* Enable ORM specific defined options
*/
options?: Record<string, any>;
}
/**
* @ignore
*/
export type TotalField = "shipping_total" | "discount_total" | "tax_total" | "refunded_total" | "total" | "subtotal" | "refundable_amount" | "gift_card_total" | "gift_card_tax_total";
/**
* @interface
*
* Fields that can be passed in the query parameters of a request.
*/
export type RequestQueryFields = {
/**
* Comma-separated fields that should be included in the returned data.
* if a field is prefixed with `+` it will be added to the default fields, using `-` will remove it from the default fields.
* without prefix it will replace the entire default fields.
*/
fields?: string;
/**
* The number of items to skip when retrieving a list.
*/
offset?: number;
/**
* Limit the number of items returned in the list.
*/
limit?: number;
/**
* The field to sort the data by. By default, the sort order is ascending. To change the order to descending, prefix the field name with `-`.
*/
order?: string;
/**
* Whether to include deleted records in the result.
*/
with_deleted?: boolean;
};
/**
* Requests that don't accept any query parameters can use this type.
*/
export interface EmptyQueryParams {
}
export interface RepositoryTransformOptions {
}
/**
* Fields used to apply flexible filters on dates.
*/
export interface DateComparisonOperator {
/**
* The filtered date must be less than this value.
*/
lt?: Date;
/**
* The filtered date must be greater than this value.
*/
gt?: Date;
/**
* The filtered date must be greater than or equal to this value.
*/
gte?: Date;
/**
* The filtered date must be less than or equal to this value.
*/
lte?: Date;
}
/**
* Fields used to apply flexible filters on strings.
*/
export interface StringComparisonOperator {
/**
* The filtered string must be less than this value.
*/
lt?: string;
/**
* The filtered string must be greater than this value.
*/
gt?: string;
/**
* The filtered string must be greater than or equal to this value.
*/
gte?: string;
/**
* The filtered string must be less than or equal to this value.
*/
lte?: string;
/**
* The filtered string must contain this value.
*/
contains?: string;
/**
* The filtered string must start with this value.
*/
starts_with?: string;
/**
* The filtered string must end with this value.
*/
ends_with?: string;
}
/**
* Fields used to apply flexible filters on numbers.
*/
export interface NumericalComparisonOperator {
/**
* The filtered number must be less than this value.
*/
lt?: number;
/**
* The filtered number must be greater than this value.
*/
gt?: number;
/**
* The filtered number must be greater than or equal to this value.
*/
gte?: number;
/**
* The filtered number must be less than or equal to this value.
*/
lte?: number;
}
/**
* The keywords that does not have a plural form
*/
type UncountableRules = "adulthood" | "advice" | "agenda" | "aid" | "aircraft" | "alcohol" | "ammo" | "analytics" | "anime" | "athletics" | "audio" | "bison" | "blood" | "bream" | "buffalo" | "butter" | "carp" | "cash" | "chassis" | "chess" | "clothing" | "cod" | "commerce" | "cooperation" | "corps" | "debris" | "diabetes" | "digestion" | "elk" | "energy" | "equipment" | "excretion" | "expertise" | "firmware" | "flounder" | "fun" | "gallows" | "garbage" | "graffiti" | "hardware" | "headquarters" | "health" | "herpes" | "highjinks" | "homework" | "housework" | "information" | "jeans" | "justice" | "kudos" | "labour" | "literature" | "machinery" | "mackerel" | "mail" | "media" | "mews" | "moose" | "music" | "mud" | "manga" | "news" | "only" | "personnel" | "pike" | "plankton" | "pliers" | "police" | "pollution" | "premises" | "rain" | "research" | "rice" | "salmon" | "scissors" | "series" | "sewage" | "shambles" | "shrimp" | "software" | "staff" | "swine" | "tennis" | "traffic" | "transportation" | "trout" | "tuna" | "wealth" | "welfare" | "whiting" | "wildebeest" | "wildlife" | "you" | "deer" | "sheep" | "info";
type PluralizationSpecialRules = {
person: "people";
child: "children";
man: "men";
criterion: "criteria";
tooth: "teeth";
foot: "feet";
};
/**
* @ignore
*/
export type Pluralize<Singular extends string> = Lowercase<Singular> extends keyof PluralizationSpecialRules ? PluralizationSpecialRules[Lowercase<Singular>] : Lowercase<Singular> extends UncountableRules ? Singular : Singular extends `${string}ss` ? `${Singular}es` : Singular extends `${infer R}sis` ? `${R}ses` : Singular extends `${infer R}is` ? `${R}ises` : Singular extends `${string}s` ? `${Singular}` : Singular extends `${infer R}ay` ? `${R}ays` : Singular extends `${infer R}ey` ? `${R}eys` : Singular extends `${infer R}iy` ? `${R}iys` : Singular extends `${infer R}oy` ? `${R}oys` : Singular extends `${infer R}uy` ? `${R}uys` : Singular extends `${infer R}y` ? `${R}ies` : Singular extends `${string}es` ? `${Singular}` : Singular extends `${string}sh` | `${string}ch` | `${string}x` | `${string}z` | `${string}o` ? `${Singular}es` : Singular extends `${infer R}fe` ? `${R}ves` : Singular extends `${infer R}ex` | `${infer R}ix` ? `${R}ices` : Singular extends `${infer R}eau` ? `${R}eaux` : Singular extends `${infer R}ieu` ? `${R}ieux` : `${Singular}s`;
export type SnakeCase<S extends string> = S extends `${infer T}${infer U}${infer V}` ? U extends Uppercase<U> ? `${Lowercase<T>}_${SnakeCase<`${Lowercase<U>}${V}`>}` : `${T}${SnakeCase<`${U}${V}`>}` : S;
export type KebabCase<S extends string> = S extends `${infer T}${infer U}${infer V}` ? U extends Uppercase<U> ? `${Lowercase<T>}-${KebabCase<`${Lowercase<U>}${V}`>}` : `${T}${KebabCase<`${U}${V}`>}` : S;
export type MetadataType = Record<string, unknown> | null;
export type RawRounding = {
value: string;
precision: number;
};
/**
* @ignore
*/
export type QueryConfig<TEntity> = {
/**
* Default fields and relations to return.
* use `*` or `.*` to select all fields from a relations (e.g '*products' or 'products.*' will select all products properties)
*/
defaults?: (keyof TEntity | string)[];
/**
* Fields and relations that are allowed to be requested.
* Symbol such as `*`, `+` and `-` should be removed as they dont make sense for
* the authorization search.
*/
allowed?: string[];
defaultLimit?: number;
/**
* If the route that will use that configuration is supposed to return a list of entities. This
* will change the configuration that will be created on req.listConfig and req.queryConfig (among
* other things it will include pagination and sorting)
*/
isList?: boolean;
};
export type TransformObjectMethodToAsync<T extends object> = {
[K in keyof T]: T[K] extends (...args: infer A) => infer R ? (...args: A) => Promise<Awaited<R>> : T[K] extends object ? TransformObjectMethodToAsync<T[K]> : T[K];
};
export type QueryContextType = Record<string, any> & {
__type?: "QueryContext";
};
export {};
//# sourceMappingURL=common.d.ts.map