mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
5.6 KiB
138 lines
5.6 KiB
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.dev/license
|
|
*/
|
|
/**
|
|
* @fileoverview This file is the single source of truth for all "TODO" notes
|
|
* generated by the Jasmine to Vitest schematic.
|
|
*
|
|
* It defines the `TODO_NOTES` constant, which contains the message and optional
|
|
* documentation URL for each category of manual migration task.
|
|
*
|
|
* The file also exports advanced mapped types (`TodoCategory`, `TodoContextMap`)
|
|
* that are inferred directly from the `TODO_NOTES` object. This creates a
|
|
* maintainable, type-safe system that ensures consistency across all
|
|
* transformers and prevents runtime errors.
|
|
*/
|
|
/**
|
|
* The central configuration for all "TODO" notes. Each key represents a unique
|
|
* `TodoCategory`.
|
|
*
|
|
* Each entry is an object with:
|
|
* - `message`: A string or a function that returns a string. If it's a function,
|
|
* it receives a `context` object to generate a dynamic message.
|
|
* - `url`: An optional documentation URL that will be appended to the message.
|
|
*/
|
|
export declare const TODO_NOTES: {
|
|
readonly pending: {
|
|
readonly message: "The pending() function was converted to a skipped test (`it.skip`).";
|
|
readonly url: "https://vitest.dev/api/vi.html#it-skip";
|
|
};
|
|
readonly toHaveSpyInteractions: {
|
|
readonly message: string;
|
|
};
|
|
readonly toThrowMatching: {
|
|
readonly message: (context: {
|
|
name: string;
|
|
}) => string;
|
|
readonly url: "https://vitest.dev/api/expect.html#tothrowerror";
|
|
};
|
|
readonly toBePending: {
|
|
readonly message: string;
|
|
};
|
|
readonly 'unsupported-expect-async-matcher': {
|
|
readonly message: (context: {
|
|
name: string;
|
|
}) => string;
|
|
};
|
|
readonly 'arrayWithExactContents-dynamic-variable': {
|
|
readonly message: "Cannot transform jasmine.arrayWithExactContents with a dynamic variable. Please migrate this manually.";
|
|
};
|
|
readonly 'arrayWithExactContents-check': {
|
|
readonly message: "Verify this matches strict array content (multiset equality). Vitest's arrayContaining is a subset check.";
|
|
};
|
|
readonly 'expect-nothing': {
|
|
readonly message: "expect().nothing() has been removed because it is redundant in Vitest. Tests without assertions pass by default.";
|
|
};
|
|
readonly 'unsupported-global-function': {
|
|
readonly message: (context: {
|
|
name: string;
|
|
}) => string;
|
|
};
|
|
readonly addMatchers: {
|
|
readonly message: "jasmine.addMatchers is not supported. Please manually migrate to expect.extend().";
|
|
readonly url: "https://vitest.dev/api/expect.html#expect-extend";
|
|
};
|
|
readonly addCustomEqualityTester: {
|
|
readonly message: "jasmine.addCustomEqualityTester is not supported. Please manually migrate to expect.addEqualityTesters().";
|
|
readonly url: "https://vitest.dev/api/expect.html#expect-addequalitytesters";
|
|
};
|
|
readonly mapContaining: {
|
|
readonly message: string;
|
|
};
|
|
readonly setContaining: {
|
|
readonly message: string;
|
|
};
|
|
readonly 'unknown-jasmine-property': {
|
|
readonly message: (context: {
|
|
name: string;
|
|
}) => string;
|
|
};
|
|
readonly spyOnAllFunctions: {
|
|
readonly message: string;
|
|
readonly url: "https://vitest.dev/api/vi.html#vi-spyon";
|
|
};
|
|
readonly 'createSpyObj-single-argument': {
|
|
readonly message: "jasmine.createSpyObj called with a single argument is not supported for transformation.";
|
|
readonly url: "https://vitest.dev/api/vi.html#vi-fn";
|
|
};
|
|
readonly 'createSpyObj-dynamic-variable': {
|
|
readonly message: "Cannot transform jasmine.createSpyObj with a dynamic variable. Please migrate this manually.";
|
|
readonly url: "https://vitest.dev/api/vi.html#vi-fn";
|
|
};
|
|
readonly 'createSpyObj-dynamic-property-map': {
|
|
readonly message: "Cannot transform jasmine.createSpyObj with a dynamic property map. Please migrate this manually.";
|
|
readonly url: "https://vitest.dev/api/vi.html#vi-fn";
|
|
};
|
|
readonly 'unsupported-spy-strategy': {
|
|
readonly message: (context: {
|
|
name: string;
|
|
}) => string;
|
|
readonly url: "https://vitest.dev/api/mocked.html#mock";
|
|
};
|
|
readonly 'mostRecent-without-args': {
|
|
readonly message: string;
|
|
readonly url: "https://vitest.dev/api/mocked.html#mock-lastcall";
|
|
};
|
|
readonly 'unhandled-done-usage': {
|
|
readonly message: "The 'done' callback was used in an unhandled way. Please migrate manually.";
|
|
};
|
|
};
|
|
/**
|
|
* A union type of all possible "TODO" categories.
|
|
* It is derived from the keys of the `TODO_NOTES` object to ensure that only
|
|
* valid categories can be used throughout the transformers.
|
|
*/
|
|
export type TodoCategory = keyof typeof TODO_NOTES;
|
|
/**
|
|
* A mapped type that creates a map from a `TodoCategory` to the type of the
|
|
* context object that its message function expects. This provides strong type
|
|
* safety for calls to `addTodoComment`.
|
|
*
|
|
* It works by checking if the `message` property for a given category is a
|
|
* function. If it is, it uses `infer` to extract the type of the first
|
|
* parameter (`P`). If it's not a function, it resolves to `never`.
|
|
*
|
|
* @example
|
|
* // `Context` will be `{ name: string }`
|
|
* type Context = TodoContextMap['unknown-jasmine-property'];
|
|
*
|
|
* // `Context` will be `never`
|
|
* type Context = TodoContextMap['pending'];
|
|
*/
|
|
export type TodoContextMap = {
|
|
[K in TodoCategory]: (typeof TODO_NOTES)[K]['message'] extends (context: infer P) => string ? P : never;
|
|
};
|
|
|