refactor: move type utils into a single file (#8462)
This commit is contained in:
parent
98d501bde6
commit
50c0a803e3
5 changed files with 27 additions and 16 deletions
8
packages/astro/client.d.ts
vendored
8
packages/astro/client.d.ts
vendored
|
@ -57,17 +57,15 @@ declare module 'astro:assets' {
|
||||||
Image: typeof import('./components/Image.astro').default;
|
Image: typeof import('./components/Image.astro').default;
|
||||||
};
|
};
|
||||||
|
|
||||||
type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };
|
type ImgAttributes = import('./dist/type-utils.js').WithRequired<
|
||||||
type Simplify<T> = { [KeyType in keyof T]: T[KeyType] } & {};
|
|
||||||
type ImgAttributes = WithRequired<
|
|
||||||
Omit<import('./types').HTMLAttributes<'img'>, 'src' | 'width' | 'height'>,
|
Omit<import('./types').HTMLAttributes<'img'>, 'src' | 'width' | 'height'>,
|
||||||
'alt'
|
'alt'
|
||||||
>;
|
>;
|
||||||
|
|
||||||
export type LocalImageProps = Simplify<
|
export type LocalImageProps = import('./dist/type-utils.js').Simplify<
|
||||||
import('./dist/assets/types.js').LocalImageProps<ImgAttributes>
|
import('./dist/assets/types.js').LocalImageProps<ImgAttributes>
|
||||||
>;
|
>;
|
||||||
export type RemoteImageProps = Simplify<
|
export type RemoteImageProps = import('./dist/type-utils.js').Simplify<
|
||||||
import('./dist/assets/types.js').RemoteImageProps<ImgAttributes>
|
import('./dist/assets/types.js').RemoteImageProps<ImgAttributes>
|
||||||
>;
|
>;
|
||||||
export const { getImage, getConfiguredImageService, imageConfig, Image }: AstroAssets;
|
export const { getImage, getConfiguredImageService, imageConfig, Image }: AstroAssets;
|
||||||
|
|
|
@ -22,6 +22,7 @@ import type { AstroCookies } from '../core/cookies';
|
||||||
import type { ResponseWithEncoding } from '../core/endpoint/index.js';
|
import type { ResponseWithEncoding } from '../core/endpoint/index.js';
|
||||||
import type { AstroIntegrationLogger, Logger, LoggerLevel } from '../core/logger/core';
|
import type { AstroIntegrationLogger, Logger, LoggerLevel } from '../core/logger/core';
|
||||||
import type { AstroComponentFactory, AstroComponentInstance } from '../runtime/server';
|
import type { AstroComponentFactory, AstroComponentInstance } from '../runtime/server';
|
||||||
|
import type { OmitIndexSignature, Simplify } from '../type-utils';
|
||||||
import type { SUPPORTED_MARKDOWN_FILE_EXTENSIONS } from './../core/constants.js';
|
import type { SUPPORTED_MARKDOWN_FILE_EXTENSIONS } from './../core/constants.js';
|
||||||
|
|
||||||
export { type AstroIntegrationLogger };
|
export { type AstroIntegrationLogger };
|
||||||
|
@ -1725,14 +1726,6 @@ export interface Page<T = any> {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
type OmitIndexSignature<ObjectType> = {
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
||||||
[KeyType in keyof ObjectType as {} extends Record<KeyType, unknown>
|
|
||||||
? never
|
|
||||||
: KeyType]: ObjectType[KeyType];
|
|
||||||
};
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
||||||
type Simplify<T> = { [KeyType in keyof T]: T[KeyType] } & {};
|
|
||||||
export type PaginateFunction = <
|
export type PaginateFunction = <
|
||||||
PaginateData,
|
PaginateData,
|
||||||
AdditionalPaginateProps extends Props,
|
AdditionalPaginateProps extends Props,
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
/* eslint-disable @typescript-eslint/ban-types */
|
/* eslint-disable @typescript-eslint/ban-types */
|
||||||
|
import type { WithRequired } from '../type-utils.js';
|
||||||
import type { VALID_INPUT_FORMATS, VALID_OUTPUT_FORMATS } from './consts.js';
|
import type { VALID_INPUT_FORMATS, VALID_OUTPUT_FORMATS } from './consts.js';
|
||||||
import type { ImageService } from './services/service.js';
|
import type { ImageService } from './services/service.js';
|
||||||
|
|
||||||
|
@ -50,7 +51,6 @@ export interface GetImageResult {
|
||||||
attributes: Record<string, any>;
|
attributes: Record<string, any>;
|
||||||
}
|
}
|
||||||
|
|
||||||
type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };
|
|
||||||
type ImageSharedProps<T> = T & {
|
type ImageSharedProps<T> = T & {
|
||||||
/**
|
/**
|
||||||
* Width of the image, the value of this property will be used to assign the `width` property on the final `img` element.
|
* Width of the image, the value of this property will be used to assign the `width` property on the final `img` element.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import type { AstroComponentMetadata } from '../../@types/astro';
|
import type { AstroComponentMetadata } from '../../@types/astro';
|
||||||
|
import type { ValueOf } from '../../type-utils';
|
||||||
type ValueOf<T> = T[keyof T];
|
|
||||||
|
|
||||||
const PROP_TYPE = {
|
const PROP_TYPE = {
|
||||||
Value: 0,
|
Value: 0,
|
||||||
|
|
21
packages/astro/src/type-utils.ts
Normal file
21
packages/astro/src/type-utils.ts
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
/* eslint-disable @typescript-eslint/ban-types */
|
||||||
|
// Q: Why is this not in @types?
|
||||||
|
// A: `@types` is for types that are part of the public API. This is just a bunch of utilities we use throughout the codebase. (Mostly by Erika)
|
||||||
|
|
||||||
|
// Merge all the intersection of a type into one type. This is useful for making tooltips better in the editor for complex types
|
||||||
|
// Ex: The Image component props are a merge of all the properties that can be on an `img` tag and our props, in the editor
|
||||||
|
// this results in a very opaque type that just says `ImgAttributes & ImageComponentProps`. With this, all the props shows.
|
||||||
|
export type Simplify<T> = { [KeyType in keyof T]: T[KeyType] } & {};
|
||||||
|
|
||||||
|
// Mark certain properties of a type as required. Think of it like "This type, with those specific properties required"
|
||||||
|
export type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };
|
||||||
|
|
||||||
|
// Name is pretty self descriptive, but it removes the index signature of an object
|
||||||
|
export type OmitIndexSignature<ObjectType> = {
|
||||||
|
[KeyType in keyof ObjectType as {} extends Record<KeyType, unknown>
|
||||||
|
? never
|
||||||
|
: KeyType]: ObjectType[KeyType];
|
||||||
|
};
|
||||||
|
|
||||||
|
// Similar to `keyof`, gets the type of all the values of an object
|
||||||
|
export type ValueOf<T> = T[keyof T];
|
Loading…
Reference in a new issue