diff --git a/.github/workflows/static-root-checks.yml b/.github/workflows/static-root-checks.yml index 79ae838a216..17f1ecd3c12 100644 --- a/.github/workflows/static-root-checks.yml +++ b/.github/workflows/static-root-checks.yml @@ -27,7 +27,6 @@ jobs: cache: 'yarn' - name: Clear annotations run: scripts/clear-annotations.sh - - name: Install node dependencies run: yarn - name: Check types @@ -36,7 +35,9 @@ jobs: run: yarn type:check-api - name: Lint run: yarn lint:js - - name: Finding circular dependencies + - name: Find unused code + run: yarn find-unused-code:js + - name: Find circular dependencies run: yarn circular_dependency_check - - name: Jest test:unit + - name: Run jest unit tests run: yarn test:unit diff --git a/package.json b/package.json index 0ffa9d3214d..e3ab0886270 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "format:ios": "find ios/ -iname *.h -o -iname *.m -o -iname *.mm -o -iname *.cpp | xargs clang-format -i --Werror", "format:android": "find android/src/ -iname *.h -o -iname *.cpp | xargs clang-format -i", "format:common": "find Common/ -iname *.h -o -iname *.cpp | xargs clang-format -i", + "find-unused-code:js": "yarn ts-prune --ignore \"index|.web.\" --error ", "type:check": "yarn tsc --noEmit && cd plugin && yarn type:check && cd ..", "type:check-api": "yarn tsc --noEmit --target es6 --module ESNext --jsx react-native --skipLibCheck true --allowSyntheticDefaultImports true --moduleResolution node --esModuleInterop true --strict true --forceConsistentCasingInFileNames true --resolveJsonModule true app/src/App.tsx", "prepare": "yarn plugin && bob build && husky install && yarn app", @@ -147,6 +148,7 @@ "react-native-web": "~0.18.12", "react-test-renderer": "17.0.2", "shelljs": "^0.8.5", + "ts-prune": "^0.10.3", "typescript": "^4.1.3" }, "lint-staged": { diff --git a/src/createAnimatedComponent.tsx b/src/createAnimatedComponent.tsx index 3885b8b3790..dc379d5706b 100644 --- a/src/createAnimatedComponent.tsx +++ b/src/createAnimatedComponent.tsx @@ -214,7 +214,7 @@ interface AnimatedProps extends Record { initial?: SharedValue; } -export type AnimatedComponentProps

> = P & { +type AnimatedComponentProps

> = P & { forwardedRef?: Ref; style?: NestedArray; animatedProps?: Partial>; @@ -247,7 +247,7 @@ interface ComponentRef extends Component { getAnimatableRef?: () => ComponentRef; } -export interface InitialComponentProps extends Record { +interface InitialComponentProps extends Record { ref?: Ref; collapsable?: boolean; } diff --git a/src/reanimated2/UpdateProps.ts b/src/reanimated2/UpdateProps.ts index f27788a4ac9..496f55ce9bc 100644 --- a/src/reanimated2/UpdateProps.ts +++ b/src/reanimated2/UpdateProps.ts @@ -10,7 +10,7 @@ import type { ViewRefSet } from './ViewDescriptorsSet'; import { runOnUIImmediately } from './threads'; // copied from react-native/Libraries/Components/View/ReactNativeStyleAttributes -export const colorProps = [ +const colorProps = [ 'backgroundColor', 'borderBottomColor', 'borderColor', @@ -29,7 +29,7 @@ export const colorProps = [ export const ColorProperties = makeShareable(colorProps); -export let updateProps: ( +let updateProps: ( viewDescriptor: SharedValue, updates: StyleProps | AnimatedStyle, maybeViewRef: ViewRefSet | undefined diff --git a/src/reanimated2/__mocks__/MutableValue.ts b/src/reanimated2/__mocks__/MutableValue.ts deleted file mode 100644 index 0ed05bf8d0e..00000000000 --- a/src/reanimated2/__mocks__/MutableValue.ts +++ /dev/null @@ -1,15 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck -export default class MutableValue { - constructor(value) { - this._value = value; - } - - get value() { - return this._value; - } - - set value(nextValue) { - this._value = nextValue; - } -} diff --git a/src/reanimated2/__mocks__/NativeReanimated.ts b/src/reanimated2/__mocks__/NativeReanimated.ts deleted file mode 100644 index e5f72a81be5..00000000000 --- a/src/reanimated2/__mocks__/NativeReanimated.ts +++ /dev/null @@ -1,19 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck -import MutableValue from './MutableValue'; - -const NOOP = () => { - // noop -}; - -export default { - installCoreFunctions: NOOP, - makeShareable: (worklet) => worklet, - makeMutable: (init) => new MutableValue(init), - makeRemote: NOOP, - startMapper: NOOP, - stopMapper: NOOP, - registerEventHandler: NOOP, - unregisterEventHandler: NOOP, - getViewProp: NOOP, -}; diff --git a/src/reanimated2/animation/decay.ts b/src/reanimated2/animation/decay.ts index 6241c4d511e..a941cc4dc3f 100644 --- a/src/reanimated2/animation/decay.ts +++ b/src/reanimated2/animation/decay.ts @@ -34,7 +34,7 @@ export interface DecayAnimation extends Animation { current: AnimatableValue; } -export interface InnerDecayAnimation +interface InnerDecayAnimation extends Omit, AnimationObject { current: number; diff --git a/src/reanimated2/animation/styleAnimation.ts b/src/reanimated2/animation/styleAnimation.ts index 9729521e0cd..cd85fd58fb6 100644 --- a/src/reanimated2/animation/styleAnimation.ts +++ b/src/reanimated2/animation/styleAnimation.ts @@ -15,7 +15,7 @@ import { processColor } from '../Colors'; // resolves path to value for nested objects // if path cannot be resolved returns undefined -export function resolvePath( +function resolvePath( obj: NestedObject, path: AnimatableValue[] | AnimatableValue ): NestedObjectValues | undefined { @@ -39,7 +39,7 @@ export function resolvePath( // set value at given path type Path = Array | string | number; -export function setPath( +function setPath( obj: NestedObject, path: Path, value: NestedObjectValues diff --git a/src/reanimated2/animation/timing.ts b/src/reanimated2/animation/timing.ts index c7b124d0274..878a3baa7c9 100644 --- a/src/reanimated2/animation/timing.ts +++ b/src/reanimated2/animation/timing.ts @@ -25,7 +25,7 @@ export interface TimingAnimation extends Animation { current: AnimatableValue; } -export interface InnerTimingAnimation +interface InnerTimingAnimation extends Omit { toValue: number; current: number; diff --git a/src/reanimated2/animation/transformationMatrix/matrixUtils.tsx b/src/reanimated2/animation/transformationMatrix/matrixUtils.tsx index 18bde1f9e5c..6dcab3c9019 100644 --- a/src/reanimated2/animation/transformationMatrix/matrixUtils.tsx +++ b/src/reanimated2/animation/transformationMatrix/matrixUtils.tsx @@ -11,7 +11,7 @@ export type AffineMatrix = FixedLengthArray, 4>; export type AffineMatrixFlat = FixedLengthArray; -export type TransformMatrixDecomposition = Record< +type TransformMatrixDecomposition = Record< 'translationMatrix' | 'scaleMatrix' | 'rotationMatrix' | 'skewMatrix', AffineMatrix >; diff --git a/src/reanimated2/animation/util.ts b/src/reanimated2/animation/util.ts index d189b331767..ceb75603203 100644 --- a/src/reanimated2/animation/util.ts +++ b/src/reanimated2/animation/util.ts @@ -1,8 +1,4 @@ -import type { - HigherOrderAnimation, - NextAnimation, - StyleLayoutAnimation, -} from './commonTypes'; +import type { HigherOrderAnimation, StyleLayoutAnimation } from './commonTypes'; import type { ParsedColorArray } from '../Colors'; import { isColor, @@ -11,9 +7,7 @@ import { toGammaSpace, toLinearSpace, } from '../Colors'; - import type { - AnimatedStyle, SharedValue, AnimatableValue, Animation, @@ -37,8 +31,6 @@ import { let IN_STYLE_UPDATER = false; -export type UserUpdater = () => AnimatedStyle; - export function initialUpdaterRun(updater: () => T): T { IN_STYLE_UPDATER = true; const result = updater(); @@ -449,19 +441,3 @@ export function cancelAnimation(sharedValue: SharedValue): void { // setting the current value cancels the animation if one is currently running sharedValue.value = sharedValue.value; // eslint-disable-line no-self-assign } - -// TODO it should work only if there was no animation before. -export function withStartValue( - startValue: AnimatableValue, - animation: NextAnimation -): Animation { - 'worklet'; - return defineAnimation(startValue, () => { - 'worklet'; - if (!_WORKLET && typeof animation === 'function') { - animation = animation(); - } - (animation as Animation).current = startValue; - return animation as Animation; - }); -} diff --git a/src/reanimated2/component/FlatList.tsx b/src/reanimated2/component/FlatList.tsx index 629e55a05c4..d923e275295 100644 --- a/src/reanimated2/component/FlatList.tsx +++ b/src/reanimated2/component/FlatList.tsx @@ -50,7 +50,7 @@ declare class ReanimatedFlatListClass extends Component< getNode(): FlatList; } -export interface ReanimatedFlatListProps extends FlatListProps { +interface ReanimatedFlatListProps extends FlatListProps { itemLayoutAnimation?: ILayoutAnimationBuilder; } diff --git a/src/reanimated2/helperTypes.ts b/src/reanimated2/helperTypes.ts index 16f7f6b0350..c1cbabb3494 100644 --- a/src/reanimated2/helperTypes.ts +++ b/src/reanimated2/helperTypes.ts @@ -132,6 +132,7 @@ export type AnimateProps

= NonStyleAnimatedProps

& animatedProps?: Partial>; }; +// ts-prune-ignore-next This will be used soon export type AnimatedProps

= AnimateProps

; export type AnimatedPropsAdapterFunction = ( diff --git a/src/reanimated2/hook/useAnimatedGestureHandler.ts b/src/reanimated2/hook/useAnimatedGestureHandler.ts index baba6107563..6048936950e 100644 --- a/src/reanimated2/hook/useAnimatedGestureHandler.ts +++ b/src/reanimated2/hook/useAnimatedGestureHandler.ts @@ -16,7 +16,7 @@ export interface GestureHandlers { onFinish?: Handler; } -export const EventType = { +const EventType = { UNDETERMINED: 0, FAILED: 1, BEGAN: 2, @@ -25,7 +25,7 @@ export const EventType = { END: 5, }; -export interface GestureHandlerNativeEvent { +interface GestureHandlerNativeEvent { handlerTag: number; numberOfPointers: number; state: (typeof EventType)[keyof typeof EventType]; diff --git a/src/reanimated2/hook/utils.ts b/src/reanimated2/hook/utils.ts index 40d8a896d03..4b03f602414 100644 --- a/src/reanimated2/hook/utils.ts +++ b/src/reanimated2/hook/utils.ts @@ -1,6 +1,5 @@ import type { MutableRefObject } from 'react'; import { useEffect, useRef } from 'react'; -import { processColor } from '../Colors'; import type { Context, NativeEvent, @@ -11,7 +10,6 @@ import type { import type { AnimatedStyle } from '../helperTypes'; import { makeRemote } from '../core'; import { isWeb, isJest } from '../PlatformChecker'; -import { colorProps } from '../UpdateProps'; import WorkletEventHandler from '../WorkletEventHandler'; import type { ContextWithDependencies, DependencyList } from './commonTypes'; import type { NativeSyntheticEvent } from 'react-native'; @@ -23,7 +21,7 @@ interface Handlers { [key: string]: Handler | undefined; } -export interface UseHandlerContext { +interface UseHandlerContext { context: TContext; doDependenciesDiffer: boolean; useWeb: boolean; @@ -104,7 +102,7 @@ export function buildWorkletsHash( } // builds dependencies array for gesture handlers -export function buildDependencies( +function buildDependencies( dependencies: DependencyList, handlers: Record ): Array { @@ -126,7 +124,7 @@ export function buildDependencies( } // this is supposed to work as useEffect comparison -export function areDependenciesEqual( +function areDependenciesEqual( nextDeps: DependencyList, prevDeps: DependencyList ): boolean { @@ -156,30 +154,6 @@ export function areDependenciesEqual( return areHookInputsEqual(nextDeps, prevDeps); } -export function hasColorProps(updates: AnimatedStyle): boolean { - const colorPropsSet = new Set(colorProps); - for (const key in updates) { - if (colorPropsSet.has(key)) { - return true; - } - } - return false; -} - -export function parseColors(updates: AnimatedStyle): void { - 'worklet'; - for (const key in updates) { - if (colorProps.indexOf(key) !== -1) { - // value could be an animation in which case processColor will recognize it and will return undefined - // -> in such a case we don't want to override style of that key - const processedColor = processColor(updates[key]); - if (processedColor !== undefined) { - updates[key] = processedColor; - } - } - } -} - export function isAnimated(prop: NestedObjectValues): boolean { 'worklet'; if (Array.isArray(prop)) { diff --git a/src/reanimated2/js-reanimated/Mapper.ts b/src/reanimated2/js-reanimated/Mapper.ts deleted file mode 100644 index 4e044d4aed5..00000000000 --- a/src/reanimated2/js-reanimated/Mapper.ts +++ /dev/null @@ -1,94 +0,0 @@ -import type { NestedObjectValues } from '../commonTypes'; -import { shouldBeUseWeb } from '../PlatformChecker'; -import type { JSReanimated } from './commonTypes'; -import MutableValue from './MutableValue'; - -export default class Mapper { - static MAPPER_ID = 1; - id: number; - inputs: MutableValue[]; - outputs: MutableValue[]; - mapper: () => void; - - dirty = true; - - constructor( - module: JSReanimated, - mapper: () => void, - inputs: NestedObjectValues>[] = [], - outputs: NestedObjectValues>[] = [] - ) { - this.id = Mapper.MAPPER_ID++; - this.inputs = this.extractMutablesFromArray(inputs); - this.outputs = this.extractMutablesFromArray(outputs); - this.mapper = mapper; - - const markDirty = () => { - this.dirty = true; - module.maybeRequestRender(); - }; - - this.inputs.forEach((input) => { - input.addListener(markDirty); - }); - } - - execute(): void { - this.dirty = false; - this.mapper(); - } - - extractMutablesFromArray( - array: NestedObjectValues> - ): MutableValue[] { - const res: MutableValue[] = []; - - function extractMutables(value: NestedObjectValues>) { - if (value == null) { - // return; - } else if (value instanceof MutableValue) { - res.push(value); - } else if (Array.isArray(value)) { - value.forEach((v) => extractMutables(v)); - } else if (isWebDomElement(value)) { - // do nothing on dom elements - // without this check, we get a "Maximum call size exceeded error" - } else if (typeof value === 'object') { - Object.keys(value).forEach((key) => { - extractMutables(value[key]); - }); - } - } - - extractMutables(array); - return res; - } -} - -function isWebDomElement(value: any) { - if (!shouldBeUseWeb()) { - return false; - } - - // https://stackoverflow.com/a/384380/7869175 - function isWebNode(o: any) { - return typeof Node === 'object' - ? o instanceof Node - : o && - typeof o === 'object' && - typeof o.nodeType === 'number' && - typeof o.nodeName === 'string'; - } - - function isWebElement(o: any) { - return typeof HTMLElement === 'object' - ? o instanceof HTMLElement // DOM2 - : o && - typeof o === 'object' && - o !== null && - o.nodeType === 1 && - typeof o.nodeName === 'string'; - } - - return isWebNode(value) || isWebElement(value); -} diff --git a/src/reanimated2/js-reanimated/MapperRegistry.ts b/src/reanimated2/js-reanimated/MapperRegistry.ts deleted file mode 100644 index c069a6b60f7..00000000000 --- a/src/reanimated2/js-reanimated/MapperRegistry.ts +++ /dev/null @@ -1,133 +0,0 @@ -import type { JSReanimated } from './commonTypes'; -import type Mapper from './Mapper'; - -export default class MapperRegistry { - sortedMappers: Mapper[] = []; - mappers: Map> = new Map(); - _module: JSReanimated; - - updatedSinceLastExecute = false; - - constructor(module: JSReanimated) { - this._module = module; - } - - startMapper(mapper: Mapper): number { - this.mappers.set(mapper.id, mapper); - this.updatedSinceLastExecute = true; - return mapper.id; - } - - stopMapper(id: number): void { - this.mappers.delete(id); - this.updatedSinceLastExecute = true; - } - - execute(): void { - if (this.updatedSinceLastExecute) { - this.updateOrder(); - this.updatedSinceLastExecute = false; - } - - for (let i = 0, len = this.sortedMappers.length; i < len; ++i) { - const mapper = this.sortedMappers[i]; - if (mapper.dirty) { - mapper.execute(); - } - } - } - - updateOrder(): void { - const nodes = [...this.mappers.values()].map((mapper) => new Node(mapper)); - - const mappersById: Record> = {}; - this.mappers.forEach((mapper) => { - mappersById[mapper.id] = mapper; - }); - - // create a graph from array of nodes - for (let i = 0, nodesLen = nodes.length; i < nodesLen; ++i) { - const node = nodes[i]; - if (node.mapper.outputs.length === 0) { - continue; - } - for (let j = 0; j < nodesLen; ++j) { - const restNode = nodes[j]; - if (i === j || restNode.mapper.inputs.length === 0) { - continue; - } - for ( - let outi = 0, outputsLen = node.mapper.outputs.length; - outi < outputsLen; - ++outi - ) { - for ( - let resti = 0, restLen = restNode.mapper.inputs.length; - resti < restLen; - ++resti - ) { - if ( - node.mapper.outputs[outi]._id === - restNode.mapper.inputs[resti]._id - ) { - node.children.push(restNode); - } - } - } - } - } - - const post: Record = {}; - let postCounter = 1; - const dfs = (node: Node) => { - const index = nodes.indexOf(node); - if (index === -1) { - // this node has already been handled - return; - } - ++postCounter; - nodes.splice(index, 1); - if (node.children.length === 0 && nodes.length > 0) { - post[node.mapper.id] = postCounter++; - dfs(nodes[0]); - return; - } - for (let i = 0, len = node.children.length; i < len; ++i) { - dfs(node.children[i]); - } - post[node.mapper.id] = postCounter++; - }; - - while (nodes.length) dfs(nodes[0]); - - const postArray = Object.keys(post).map((key) => { - const num = parseInt(key); - return [num, post[num]]; - }); - postArray.sort((a, b) => { - return b[1] - a[1]; - }); - - // clear sorted mappers - this.sortedMappers = []; - - for (let i = 0, len = postArray.length; i < len; ++i) { - const [id] = postArray[i]; - this.sortedMappers.push(mappersById[id]); - } - } - - get needRunOnRender(): boolean { - return this.updatedSinceLastExecute; - } -} - -class Node { - mapper: Mapper; - children: Node[]; - - constructor(mapper: Mapper, children = []) { - this.mapper = mapper; - this.children = children; - } -} diff --git a/src/reanimated2/js-reanimated/commonTypes.ts b/src/reanimated2/js-reanimated/commonTypes.ts index 54f3a88eaf6..c0e1e3ee3a0 100644 --- a/src/reanimated2/js-reanimated/commonTypes.ts +++ b/src/reanimated2/js-reanimated/commonTypes.ts @@ -1,7 +1,7 @@ import type { Timestamp, NestedObjectValues } from '../commonTypes'; import type MutableValue from './MutableValue'; -export interface Mapper { +interface Mapper { MAPPER_ID?: number; id: number; inputs: MutableValue[]; @@ -14,7 +14,7 @@ export interface Mapper { ): MutableValue[]; } -export interface MapperRegistry { +interface MapperRegistry { sortedMappers: Mapper[]; mappers: Map>; _module: JSReanimated; @@ -25,7 +25,7 @@ export interface MapperRegistry { updateOrder(): void; } -export interface JSReanimated { +interface JSReanimated { _valueSetter?: (value: T) => void; _renderRequested: boolean; _mapperRegistry: MapperRegistry; diff --git a/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts b/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts index cfd8d51f20f..0131e427e6b 100644 --- a/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +++ b/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts @@ -8,12 +8,12 @@ import type { KeyframeProps, } from './commonTypes'; import type { TransformProperty, StyleProps } from '../../commonTypes'; -export interface KeyframePoint { +interface KeyframePoint { duration: number; value: number | string; easing?: EasingFunction; } -export interface ParsedKeyframesDefinition { +interface ParsedKeyframesDefinition { initialValues: StyleProps; keyframes: Record; } diff --git a/src/reanimated2/mappers.ts b/src/reanimated2/mappers.ts index 64f90741331..a9a23837620 100644 --- a/src/reanimated2/mappers.ts +++ b/src/reanimated2/mappers.ts @@ -5,7 +5,7 @@ import { isSharedValue } from './utils'; const IS_JEST = isJest(); -export type Mapper = { +type Mapper = { id: number; dirty: boolean; worklet: () => void; @@ -13,7 +13,7 @@ export type Mapper = { outputs?: SharedValue[]; }; -export function createMapperRegistry() { +function createMapperRegistry() { 'worklet'; const mappers = new Map(); let sortedMappers: Mapper[] = []; diff --git a/src/reanimated2/mutables.ts b/src/reanimated2/mutables.ts index e6e86ed2970..6c4213d36dd 100644 --- a/src/reanimated2/mutables.ts +++ b/src/reanimated2/mutables.ts @@ -7,7 +7,6 @@ import { } from './shareables'; import { runOnUI } from './threads'; import { valueSetter } from './valueSetter'; -export { stopMapper } from './mappers'; export function makeUIMutable( initial: T, diff --git a/src/reanimated2/platform-specific/checkCppVersion.ts b/src/reanimated2/platform-specific/checkCppVersion.ts index 8606c9199ee..fe0a18092cc 100644 --- a/src/reanimated2/platform-specific/checkCppVersion.ts +++ b/src/reanimated2/platform-specific/checkCppVersion.ts @@ -15,6 +15,8 @@ export function checkCppVersion() { } } +// This is used only in test files, therefore it is reported by ts-prune (which is desired) +// ts-prune-ignore-next export function matchVersion(version1: string, version2: string) { if (version1.match(/^\d+\.\d+\.\d+$/) && version2.match(/^\d+\.\d+\.\d+$/)) { // x.y.z, compare only major and minor, skip patch diff --git a/src/reanimated2/valueSetter.ts b/src/reanimated2/valueSetter.ts index 384446b7881..7fc742b06e9 100644 --- a/src/reanimated2/valueSetter.ts +++ b/src/reanimated2/valueSetter.ts @@ -1,6 +1,5 @@ import type { AnimationObject, AnimatableValue } from './commonTypes'; import type { Descriptor } from './hook/commonTypes'; -export { stopMapper } from './mappers'; export function valueSetter(sv: any, value: any): void { 'worklet'; diff --git a/src/setAndForwardRef.ts b/src/setAndForwardRef.ts index 8c17ec9a8ce..8ba81672ad3 100644 --- a/src/setAndForwardRef.ts +++ b/src/setAndForwardRef.ts @@ -35,7 +35,7 @@ import type { MutableRefObject } from 'react'; * module.exports = MyViewWithRef; */ -export type ForwardedRef = () => MutableRefObject | ((ref: T) => void); +type ForwardedRef = () => MutableRefObject | ((ref: T) => void); function setAndForwardRef({ getForwardedRef, diff --git a/yarn.lock b/yarn.lock index a4f6eae0346..d022733a144 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1828,6 +1828,16 @@ dependencies: pretty-format "^26.0.1" +"@ts-morph/common@~0.12.3": + version "0.12.3" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.12.3.tgz#a96e250217cd30e480ab22ec6a0ebbe65fd784ff" + integrity sha512-4tUmeLyXJnJWvTFOKtcNJ1yh0a3SsTLi2MUoyj8iUNznFRN1ZquaNe7Oukqrnki2FzZkm0J9adCNLDZxUzvj+w== + dependencies: + fast-glob "^3.2.7" + minimatch "^3.0.4" + mkdirp "^1.0.4" + path-browserify "^1.0.1" + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.20.0": version "7.20.0" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" @@ -2791,6 +2801,11 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== +code-block-writer@^11.0.0: + version "11.0.3" + resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-11.0.3.tgz#9eec2993edfb79bfae845fbc093758c0a0b73b76" + integrity sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw== + code-tag@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-tag/-/code-tag-1.1.0.tgz#8dc979c2bd2e2ac44d5a799abd07953e39cadf3d" @@ -2850,6 +2865,11 @@ commander@^4.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -3760,6 +3780,17 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== +fast-glob@^3.2.7: + version "3.3.0" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" + integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-glob@^3.2.9: version "3.2.12" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" @@ -5227,7 +5258,7 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.1, json5@^2.2.1, json5@^2.2.2: +json5@^2.1.1, json5@^2.1.3, json5@^2.2.1, json5@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -5825,6 +5856,11 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.6" +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + module-definition@^3.3.1: version "3.4.0" resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-3.4.0.tgz#953a3861f65df5e43e80487df98bb35b70614c2b" @@ -6185,6 +6221,11 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -7390,6 +7431,31 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +"true-myth@^4.1.0": + version "4.1.1" + resolved "https://registry.yarnpkg.com/true-myth/-/true-myth-4.1.1.tgz#ff4ac9d5130276e34aa338757e2416ec19248ba2" + integrity sha512-rqy30BSpxPznbbTcAcci90oZ1YR4DqvKcNXNerG5gQBU2v4jk0cygheiul5J6ExIMrgDVuanv/MkGfqZbKrNNg== + +ts-morph@^13.0.1: + version "13.0.3" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-13.0.3.tgz#c0c51d1273ae2edb46d76f65161eb9d763444c1d" + integrity sha512-pSOfUMx8Ld/WUreoSzvMFQG5i9uEiWIsBYjpU9+TTASOeUa89j5HykomeqVULm1oqWtBdleI3KEFRLrlA3zGIw== + dependencies: + "@ts-morph/common" "~0.12.3" + code-block-writer "^11.0.0" + +ts-prune@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/ts-prune/-/ts-prune-0.10.3.tgz#b6c71a525543b38dcf947a7d3adfb7f9e8b91f38" + integrity sha512-iS47YTbdIcvN8Nh/1BFyziyUqmjXz7GVzWu02RaZXqb+e/3Qe1B7IQ4860krOeCGUeJmterAlaM2FRH0Ue0hjw== + dependencies: + commander "^6.2.1" + cosmiconfig "^7.0.1" + json5 "^2.1.3" + lodash "^4.17.21" + "true-myth" "^4.1.0" + ts-morph "^13.0.1" + tsconfig-paths@^3.10.1, tsconfig-paths@^3.14.1: version "3.14.2" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088"