mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2024-09-20 07:16:17 +08:00
chore: remove config from shared-types (@fehmer) (#5681)
* chore: remove config from shared-types (@fehmer) * fix * remove shared-types/user * build before test * fix * add madge to contracts
This commit is contained in:
parent
1164f4a114
commit
6b9f4a0f18
|
@ -10,8 +10,11 @@ import { ObjectId } from "mongodb";
|
|||
import * as LeaderboardDal from "../../dal/leaderboards";
|
||||
import MonkeyError from "../../utils/error";
|
||||
import isNumber from "lodash/isNumber";
|
||||
import { Mode } from "@monkeytype/shared-types/config";
|
||||
import { PersonalBest, PersonalBests } from "@monkeytype/shared-types/user";
|
||||
import {
|
||||
Mode,
|
||||
PersonalBest,
|
||||
PersonalBests,
|
||||
} from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
type GenerateDataOptions = {
|
||||
firstTestTimestamp: Date;
|
||||
|
|
|
@ -28,7 +28,7 @@ import * as AuthUtil from "../../utils/auth";
|
|||
import * as Dates from "date-fns";
|
||||
import { UTCDateMini } from "@date-fns/utc";
|
||||
import * as BlocklistDal from "../../dal/blocklist";
|
||||
import { Mode, Mode2 } from "@monkeytype/shared-types/config";
|
||||
import { Mode, Mode2 } from "@monkeytype/contracts/schemas/shared";
|
||||
import {
|
||||
AllTimeLbs,
|
||||
CountByYearAndDay,
|
||||
|
|
|
@ -9,7 +9,7 @@ import MonkeyError from "../utils/error";
|
|||
import * as db from "../init/db";
|
||||
import { DBResult as SharedDBResult } from "@monkeytype/shared-types";
|
||||
import { getUser, getTags } from "./user";
|
||||
import { Mode } from "@monkeytype/shared-types/config";
|
||||
import { Mode } from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
type DBResult = MonkeyTypes.WithObjectId<SharedDBResult<Mode>>;
|
||||
|
||||
|
|
|
@ -28,8 +28,11 @@ import {
|
|||
UserQuoteRatings,
|
||||
UserStreak,
|
||||
} from "@monkeytype/shared-types";
|
||||
import { Mode, Mode2 } from "@monkeytype/shared-types/config";
|
||||
import { PersonalBest } from "@monkeytype/shared-types/user";
|
||||
import {
|
||||
Mode,
|
||||
Mode2,
|
||||
PersonalBest,
|
||||
} from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
const SECONDS_PER_HOUR = 3600;
|
||||
|
||||
|
|
7
backend/src/types/types.d.ts
vendored
7
backend/src/types/types.d.ts
vendored
|
@ -65,7 +65,10 @@ declare namespace MonkeyTypes {
|
|||
type LbPersonalBests = {
|
||||
time: Record<
|
||||
number,
|
||||
Record<string, import("@monkeytype/shared-types/user").PersonalBest>
|
||||
Record<
|
||||
string,
|
||||
import("@monkeytype/contracts/schemas/shared").PersonalBest
|
||||
>
|
||||
>;
|
||||
};
|
||||
|
||||
|
@ -123,7 +126,7 @@ declare namespace MonkeyTypes {
|
|||
|
||||
type DBResult = MonkeyTypes.WithObjectId<
|
||||
import("@monkeytype/shared-types").DBResult<
|
||||
import("@monkeytype/shared-types/config").Mode
|
||||
import("@monkeytype/contracts/schemas/shared").Mode
|
||||
>
|
||||
>;
|
||||
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
import _ from "lodash";
|
||||
import FunboxList from "../constants/funbox-list";
|
||||
import { PersonalBest, PersonalBests } from "@monkeytype/shared-types/user";
|
||||
import { DBResult } from "@monkeytype/shared-types";
|
||||
import { Mode, Mode2 } from "@monkeytype/shared-types/config";
|
||||
import {
|
||||
Mode,
|
||||
Mode2,
|
||||
PersonalBest,
|
||||
PersonalBests,
|
||||
} from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
type CheckAndUpdatePbResult = {
|
||||
isPb: boolean;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { Result } from "@monkeytype/shared-types";
|
||||
import { Mode } from "@monkeytype/shared-types/config";
|
||||
import { Mode } from "@monkeytype/contracts/schemas/shared";
|
||||
import "dotenv/config";
|
||||
import { Counter, Histogram, Gauge } from "prom-client";
|
||||
import { TsRestRequestWithCtx } from "../middlewares/auth";
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { CompletedEvent, DBResult } from "@monkeytype/shared-types";
|
||||
import { Mode } from "@monkeytype/shared-types/config";
|
||||
import { Mode } from "@monkeytype/contracts/schemas/shared";
|
||||
import { ObjectId } from "mongodb";
|
||||
|
||||
type Result = MonkeyTypes.WithObjectId<DBResult<Mode>>;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { DBResult, Result } from "@monkeytype/shared-types";
|
||||
import { Mode } from "@monkeytype/shared-types/config";
|
||||
import { Mode } from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
const BASE_PATH = "/results";
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ import {
|
|||
UserProfileDetails,
|
||||
UserTag,
|
||||
} from "@monkeytype/shared-types";
|
||||
import { Mode, Mode2 } from "@monkeytype/shared-types/config";
|
||||
import { Mode, Mode2 } from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
const BASE_PATH = "/users";
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ import { isDevEnvironment, reloadAfter } from "./utils/misc";
|
|||
import * as ConfigSchemas from "@monkeytype/contracts/schemas/configs";
|
||||
import { Config } from "@monkeytype/contracts/schemas/configs";
|
||||
import { roundTo1 } from "./utils/numbers";
|
||||
import { Mode, ModeSchema } from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
export let localStorageConfig: Config;
|
||||
|
||||
|
@ -107,8 +108,8 @@ export function setPunctuation(punc: boolean, nosave?: boolean): boolean {
|
|||
return true;
|
||||
}
|
||||
|
||||
export function setMode(mode: ConfigSchemas.Mode, nosave?: boolean): boolean {
|
||||
if (!isConfigValueValid("mode", mode, ConfigSchemas.ModeSchema)) {
|
||||
export function setMode(mode: Mode, nosave?: boolean): boolean {
|
||||
if (!isConfigValueValid("mode", mode, ModeSchema)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,8 +17,8 @@ import {
|
|||
import {
|
||||
Config as ConfigType,
|
||||
Difficulty,
|
||||
Mode,
|
||||
} from "@monkeytype/shared-types/config";
|
||||
} from "@monkeytype/contracts/schemas/configs";
|
||||
import { Mode } from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
let challengeLoading = false;
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ import { capsState } from "../test/caps-warning";
|
|||
import * as Notifications from "../elements/notifications";
|
||||
|
||||
import type { Howl } from "howler";
|
||||
import { PlaySoundOnClick } from "@monkeytype/shared-types/config";
|
||||
import { PlaySoundOnClick } from "@monkeytype/contracts/schemas/configs";
|
||||
|
||||
async function gethowler(): Promise<typeof import("howler")> {
|
||||
return await import("howler");
|
||||
|
|
|
@ -14,14 +14,15 @@ import {
|
|||
ModifiableTestActivityCalendar,
|
||||
} from "./elements/test-activity-calendar";
|
||||
import * as Loader from "./elements/loader";
|
||||
import { PersonalBest, PersonalBests } from "@monkeytype/shared-types/user";
|
||||
|
||||
import { Badge, DBResult, Result } from "@monkeytype/shared-types";
|
||||
import { Config, Difficulty } from "@monkeytype/contracts/schemas/configs";
|
||||
import {
|
||||
Config,
|
||||
Difficulty,
|
||||
Mode,
|
||||
Mode2,
|
||||
} from "@monkeytype/shared-types/config";
|
||||
PersonalBest,
|
||||
PersonalBests,
|
||||
} from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
let dbSnapshot: MonkeyTypes.Snapshot | undefined;
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import Config from "../../config";
|
||||
import { format as dateFormat } from "date-fns/format";
|
||||
import Format from "../../utils/format";
|
||||
import { PersonalBests } from "@monkeytype/shared-types/user";
|
||||
import { Mode2 } from "@monkeytype/shared-types/config";
|
||||
import { Mode2, PersonalBests } from "@monkeytype/contracts/schemas/shared";
|
||||
import { StringNumber } from "@monkeytype/contracts/schemas/util";
|
||||
|
||||
function clearTables(isProfile: boolean): void {
|
||||
|
|
|
@ -9,7 +9,7 @@ import * as Loader from "../loader";
|
|||
// @ts-expect-error TODO: update slim-select
|
||||
import SlimSelect from "slim-select";
|
||||
import { ResultFilters } from "@monkeytype/shared-types";
|
||||
import { QuoteLength } from "@monkeytype/shared-types/config";
|
||||
import { QuoteLength } from "@monkeytype/contracts/schemas/configs";
|
||||
|
||||
type Option = {
|
||||
id: string;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { CustomBackgroundFilter } from "@monkeytype/shared-types/config";
|
||||
import { CustomBackgroundFilter } from "@monkeytype/contracts/schemas/configs";
|
||||
import * as UpdateConfig from "../config";
|
||||
import * as ConfigEvent from "../observables/config-event";
|
||||
import { debounce } from "throttle-debounce";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { ConfigValue } from "@monkeytype/shared-types/config";
|
||||
import { ConfigValue } from "@monkeytype/contracts/schemas/configs";
|
||||
import Config from "../../config";
|
||||
import * as Notifications from "../notifications";
|
||||
// @ts-expect-error TODO: update slim-select
|
||||
|
|
|
@ -7,7 +7,7 @@ import * as ConnectionState from "../states/connection";
|
|||
import { areUnsortedArraysEqual } from "../utils/arrays";
|
||||
import * as TestResult from "../test/result";
|
||||
import AnimatedModal from "../utils/animated-modal";
|
||||
import { Mode } from "@monkeytype/shared-types/config";
|
||||
import { Mode } from "@monkeytype/contracts/schemas/shared";
|
||||
import { Result } from "@monkeytype/shared-types";
|
||||
|
||||
type State = {
|
||||
|
|
|
@ -6,7 +6,8 @@ import * as CustomTestDurationPopup from "./custom-test-duration";
|
|||
import * as QuoteSearchModal from "./quote-search";
|
||||
import * as CustomTextPopup from "./custom-text";
|
||||
import AnimatedModal from "../utils/animated-modal";
|
||||
import { Mode, QuoteLength } from "@monkeytype/shared-types/config";
|
||||
import { QuoteLength } from "@monkeytype/contracts/schemas/configs";
|
||||
import { Mode } from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
function update(): void {
|
||||
const el = $("#mobileTestConfigModal");
|
||||
|
|
|
@ -4,8 +4,11 @@ import { getLanguageDisplayString } from "../utils/strings";
|
|||
import Config from "../config";
|
||||
import Format from "../utils/format";
|
||||
import AnimatedModal from "../utils/animated-modal";
|
||||
import { PersonalBest } from "@monkeytype/shared-types/user";
|
||||
import { Mode, Mode2 } from "@monkeytype/shared-types/config";
|
||||
import {
|
||||
Mode,
|
||||
Mode2,
|
||||
PersonalBest,
|
||||
} from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
type PBWithMode2 = {
|
||||
mode2: Mode2<Mode>;
|
||||
|
|
|
@ -22,7 +22,7 @@ import * as TestState from "../test/test-state";
|
|||
import AnimatedModal, { ShowOptions } from "../utils/animated-modal";
|
||||
import * as TestLogic from "../test/test-logic";
|
||||
import { createErrorMessage } from "../utils/misc";
|
||||
import { QuoteLength } from "@monkeytype/shared-types/config";
|
||||
import { QuoteLength } from "@monkeytype/contracts/schemas/configs";
|
||||
|
||||
const searchServiceCache: Record<string, SearchService<MonkeyTypes.Quote>> = {};
|
||||
|
||||
|
|
|
@ -4,7 +4,8 @@ import { getMode2 } from "../utils/misc";
|
|||
import * as CustomText from "../test/custom-text";
|
||||
import { compressToURI } from "lz-ts";
|
||||
import AnimatedModal, { ShowOptions } from "../utils/animated-modal";
|
||||
import { Difficulty, Mode, Mode2 } from "@monkeytype/shared-types/config";
|
||||
import { Difficulty } from "@monkeytype/contracts/schemas/configs";
|
||||
import { Mode, Mode2 } from "@monkeytype/contracts/schemas/shared";
|
||||
import { CustomTextData } from "@monkeytype/shared-types";
|
||||
|
||||
function getCheckboxValue(checkbox: string): boolean {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Config, ConfigValue } from "@monkeytype/shared-types/config";
|
||||
import { Config, ConfigValue } from "@monkeytype/contracts/schemas/configs";
|
||||
|
||||
type SubscribeFunction = (
|
||||
key: string,
|
||||
|
|
|
@ -28,8 +28,12 @@ import * as ResultBatches from "../elements/result-batches";
|
|||
import Format from "../utils/format";
|
||||
import * as TestActivity from "../elements/test-activity";
|
||||
import { ChartData, Result } from "@monkeytype/shared-types";
|
||||
import { Mode, Mode2, Mode2Custom } from "@monkeytype/shared-types/config";
|
||||
import { PersonalBests } from "@monkeytype/shared-types/user";
|
||||
import {
|
||||
Mode,
|
||||
Mode2,
|
||||
Mode2Custom,
|
||||
PersonalBests,
|
||||
} from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
let filterDebug = false;
|
||||
//toggle filterdebug
|
||||
|
|
|
@ -7,7 +7,7 @@ import { checkIfGetParameterExists } from "../utils/misc";
|
|||
import * as UserReportModal from "../modals/user-report";
|
||||
import * as Skeleton from "../utils/skeleton";
|
||||
import { UserProfile } from "@monkeytype/shared-types";
|
||||
import { PersonalBests } from "@monkeytype/shared-types/user";
|
||||
import { PersonalBests } from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
function reset(): void {
|
||||
$(".page.pageProfile .preloader").removeClass("hidden");
|
||||
|
|
|
@ -23,7 +23,7 @@ import SlimSelect from "slim-select";
|
|||
|
||||
import * as Skeleton from "../utils/skeleton";
|
||||
import * as CustomBackgroundFilter from "../elements/custom-background-filter";
|
||||
import { ConfigValue } from "@monkeytype/shared-types/config";
|
||||
import { ConfigValue } from "@monkeytype/contracts/schemas/configs";
|
||||
|
||||
type SettingsGroups<T extends ConfigValue> = Record<string, SettingsGroup<T>>;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { ConfigValue } from "@monkeytype/shared-types/config";
|
||||
import { ConfigValue } from "@monkeytype/contracts/schemas/configs";
|
||||
|
||||
type SetFunction<T> = (param: T, nosave?: boolean) => boolean;
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ import * as FunboxList from "./funbox-list";
|
|||
import * as Notifications from "../../elements/notifications";
|
||||
import * as Arrays from "../../utils/arrays";
|
||||
import * as Strings from "../../utils/strings";
|
||||
import { Config, ConfigValue } from "@monkeytype/shared-types/config";
|
||||
import { Config, ConfigValue } from "@monkeytype/contracts/schemas/configs";
|
||||
|
||||
export function checkFunboxForcedConfigs(
|
||||
key: string,
|
||||
|
|
|
@ -26,7 +26,8 @@ import {
|
|||
import { Wordset } from "../wordset";
|
||||
import * as LayoutfluidFunboxTimer from "./layoutfluid-funbox-timer";
|
||||
import * as DDR from "../../utils/ddr";
|
||||
import { HighlightMode, Mode } from "@monkeytype/shared-types/config";
|
||||
import { HighlightMode } from "@monkeytype/contracts/schemas/configs";
|
||||
import { Mode } from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
const prefixSize = 2;
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ import * as Numbers from "../utils/numbers";
|
|||
import * as JSONData from "../utils/json-data";
|
||||
import * as TestState from "./test-state";
|
||||
import * as ConfigEvent from "../observables/config-event";
|
||||
import { Mode2 } from "@monkeytype/shared-types/config";
|
||||
import { Mode2 } from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
type Settings = {
|
||||
wpm: number;
|
||||
|
|
|
@ -5,7 +5,7 @@ import * as CustomText from "./custom-text";
|
|||
import * as TestInput from "./test-input";
|
||||
import * as ConfigEvent from "../observables/config-event";
|
||||
import { setCustomTextName } from "../states/custom-text-name";
|
||||
import { Mode } from "@monkeytype/shared-types/config";
|
||||
import { Mode } from "@monkeytype/contracts/schemas/shared";
|
||||
import { CustomTextData } from "@monkeytype/shared-types";
|
||||
|
||||
type Before = {
|
||||
|
|
|
@ -37,7 +37,7 @@ import confetti from "canvas-confetti";
|
|||
import type { AnnotationOptions } from "chartjs-plugin-annotation";
|
||||
import Ape from "../ape";
|
||||
import { Result } from "@monkeytype/shared-types";
|
||||
import { Mode } from "@monkeytype/shared-types/config";
|
||||
import { Mode } from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
let result: Result<Mode>;
|
||||
let maxChartVal: number;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import {
|
||||
ConfigValue,
|
||||
Mode,
|
||||
QuoteLength,
|
||||
} from "@monkeytype/shared-types/config";
|
||||
} from "@monkeytype/contracts/schemas/configs";
|
||||
import { Mode } from "@monkeytype/contracts/schemas/shared";
|
||||
import Config from "../config";
|
||||
import * as ConfigEvent from "../observables/config-event";
|
||||
import * as ActivePage from "../states/active-page";
|
||||
|
|
|
@ -62,8 +62,8 @@ import {
|
|||
CompletedEvent,
|
||||
CustomTextDataWithTextLen,
|
||||
} from "@monkeytype/shared-types";
|
||||
import { Mode, QuoteLength } from "@monkeytype/shared-types/config";
|
||||
|
||||
import { QuoteLength } from "@monkeytype/contracts/schemas/configs";
|
||||
import { Mode } from "@monkeytype/contracts/schemas/shared";
|
||||
let failReason = "";
|
||||
const koInputVisual = document.getElementById("koInputVisual") as HTMLElement;
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ import * as FunboxList from "./funbox/funbox-list";
|
|||
import * as TestState from "./test-state";
|
||||
import * as Numbers from "../utils/numbers";
|
||||
import { IncompleteTest, Result } from "@monkeytype/shared-types";
|
||||
import { Mode } from "@monkeytype/shared-types/config";
|
||||
import { Mode } from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
type CharCount = {
|
||||
spaces: number;
|
||||
|
|
|
@ -28,7 +28,10 @@ import * as ActivePage from "../states/active-page";
|
|||
import Format from "../utils/format";
|
||||
import * as Loader from "../elements/loader";
|
||||
import { getHtmlByUserFlags } from "../controllers/user-flag-controller";
|
||||
import { TimerColor, TimerOpacity } from "@monkeytype/shared-types/config";
|
||||
import {
|
||||
TimerColor,
|
||||
TimerOpacity,
|
||||
} from "@monkeytype/contracts/schemas/configs";
|
||||
|
||||
async function gethtml2canvas(): Promise<typeof import("html2canvas").default> {
|
||||
return (await import("html2canvas")).default;
|
||||
|
|
18
frontend/src/ts/types/types.d.ts
vendored
18
frontend/src/ts/types/types.d.ts
vendored
|
@ -1,3 +1,5 @@
|
|||
type ConfigValue = import("@monkeytype/contracts/schemas/configs").ConfigValue;
|
||||
|
||||
declare namespace MonkeyTypes {
|
||||
type PageName =
|
||||
| "loading"
|
||||
|
@ -45,7 +47,7 @@ declare namespace MonkeyTypes {
|
|||
type QuoteModes = "short" | "medium" | "long" | "thicc";
|
||||
|
||||
type CustomLayoutFluidSpaces =
|
||||
| import("@monkeytype/shared-types/config").CustomLayoutFluid
|
||||
| import("@monkeytype/contracts/schemas/configs").CustomLayoutFluid
|
||||
| `${string} ${string} ${string}`;
|
||||
|
||||
type HistoryChartData = {
|
||||
|
@ -158,7 +160,7 @@ declare namespace MonkeyTypes {
|
|||
|
||||
type FunboxForcedConfig = Record<
|
||||
string,
|
||||
import("@monkeytype/shared-types/config").ConfigValue[]
|
||||
import("@monkeytype/contracts/schemas/configs").ConfigValue[]
|
||||
>;
|
||||
|
||||
type FunboxMetadata = {
|
||||
|
@ -174,7 +176,7 @@ declare namespace MonkeyTypes {
|
|||
|
||||
type PresetConfig = {
|
||||
tags: string[];
|
||||
} & import("@monkeytype/shared-types/config").Config;
|
||||
} & import("@monkeytype/contracts/schemas/configs").Config;
|
||||
|
||||
type SnapshotPreset =
|
||||
import("@monkeytype/contracts/schemas/presets").Preset & {
|
||||
|
@ -192,7 +194,7 @@ declare namespace MonkeyTypes {
|
|||
|
||||
type ConfigChanges = {
|
||||
tags?: string[];
|
||||
} & Partial<import("@monkeytype/shared-types/config").Config>;
|
||||
} & Partial<import("@monkeytype/contracts/schemas/configs").Config>;
|
||||
|
||||
type LeaderboardMemory = {
|
||||
time: {
|
||||
|
@ -237,11 +239,11 @@ declare namespace MonkeyTypes {
|
|||
filterPresets: import("@monkeytype/shared-types").ResultFilters[];
|
||||
isPremium: boolean;
|
||||
streakHourOffset?: number;
|
||||
config: import("@monkeytype/shared-types/config").Config;
|
||||
config: import("@monkeytype/contracts/schemas/configs").Config;
|
||||
tags: UserTag[];
|
||||
presets: SnapshotPreset[];
|
||||
results?: import("@monkeytype/shared-types").Result<
|
||||
import("@monkeytype/shared-types/config").Mode
|
||||
import("@monkeytype/contracts/schemas/shared").Mode
|
||||
>[];
|
||||
xp: number;
|
||||
testActivity?: ModifiableTestActivityCalendar;
|
||||
|
@ -329,7 +331,7 @@ declare namespace MonkeyTypes {
|
|||
customStyle?: string;
|
||||
opensModal?: boolean;
|
||||
defaultValue?: () => string;
|
||||
configKey?: keyof import("@monkeytype/shared-types/config").Config;
|
||||
configKey?: keyof import("@monkeytype/contracts/schemas/configs").Config;
|
||||
configValue?: string | number | boolean | number[];
|
||||
configValueMode?: "include";
|
||||
exec?: (options: CommandExecOptions) => void;
|
||||
|
@ -342,7 +344,7 @@ declare namespace MonkeyTypes {
|
|||
|
||||
type CommandsSubgroup = {
|
||||
title: string;
|
||||
configKey?: keyof import("@monkeytype/shared-types/config").Config;
|
||||
configKey?: keyof import("@monkeytype/contracts/schemas/configs").Config;
|
||||
list: Command[];
|
||||
beforeList?: () => void;
|
||||
};
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
import { Config, ConfigValue } from "@monkeytype/shared-types/config";
|
||||
import {
|
||||
Config,
|
||||
ConfigValue,
|
||||
PartialConfig,
|
||||
} from "@monkeytype/contracts/schemas/configs";
|
||||
import DefaultConfig from "../constants/default-config";
|
||||
import { typedKeys } from "./misc";
|
||||
import { PartialConfig } from "@monkeytype/contracts/schemas/configs";
|
||||
|
||||
export function mergeWithDefaultConfig(config: PartialConfig): Config {
|
||||
const mergedConfig = {} as Config;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { get as getTypingSpeedUnit } from "../utils/typing-speed-units";
|
||||
import * as Numbers from "../utils/numbers";
|
||||
import { Config as ConfigType } from "@monkeytype/shared-types/config";
|
||||
import { Config as ConfigType } from "@monkeytype/contracts/schemas/configs";
|
||||
import Config from "../config";
|
||||
|
||||
export type FormatOptions = {
|
||||
|
|
|
@ -3,8 +3,12 @@ import { envConfig } from "../constants/env-config";
|
|||
import { lastElementFromArray } from "./arrays";
|
||||
import * as JSONData from "./json-data";
|
||||
import { CustomTextData, Result } from "@monkeytype/shared-types";
|
||||
import { PersonalBests } from "@monkeytype/shared-types/user";
|
||||
import { Config, Mode, Mode2 } from "@monkeytype/shared-types/config";
|
||||
import { Config } from "@monkeytype/contracts/schemas/configs";
|
||||
import {
|
||||
Mode,
|
||||
Mode2,
|
||||
PersonalBests,
|
||||
} from "@monkeytype/contracts/schemas/shared";
|
||||
|
||||
export function kogasa(cov: number): number {
|
||||
return (
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { TypingSpeedUnit } from "@monkeytype/shared-types/config";
|
||||
import { TypingSpeedUnit } from "@monkeytype/contracts/schemas/configs";
|
||||
|
||||
class Unit implements MonkeyTypes.TypingSpeedUnitSettings {
|
||||
unit: TypingSpeedUnit;
|
||||
|
|
|
@ -12,7 +12,8 @@ import * as Loader from "../elements/loader";
|
|||
import * as AccountButton from "../elements/account-button";
|
||||
import { restart as restartTest } from "../test/test-logic";
|
||||
import * as ChallengeController from "../controllers/challenge-controller";
|
||||
import { Difficulty, Mode, Mode2 } from "@monkeytype/shared-types/config";
|
||||
import { Mode, Mode2 } from "@monkeytype/contracts/schemas/shared";
|
||||
import { Difficulty } from "@monkeytype/contracts/schemas/configs";
|
||||
import { CustomTextData } from "@monkeytype/shared-types";
|
||||
|
||||
export async function linkDiscord(hashOverride: string): Promise<void> {
|
||||
|
|
1
package-lock.json
generated
1
package-lock.json
generated
|
@ -30054,6 +30054,7 @@
|
|||
"chokidar": "3.6.0",
|
||||
"esbuild": "0.23.0",
|
||||
"eslint": "8.57.0",
|
||||
"madge": "6.1.0",
|
||||
"rimraf": "5.0.9",
|
||||
"typescript": "5.5.3"
|
||||
}
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "rimraf ./dist && node esbuild.config.js --watch",
|
||||
"build": "rimraf ./dist && node esbuild.config.js",
|
||||
"build": "rimraf ./dist && npm run madge && node esbuild.config.js",
|
||||
"madge": " madge --circular --extensions ts ./src",
|
||||
"ts-check": "tsc --noEmit",
|
||||
"lint": "eslint \"./**/*.ts\""
|
||||
},
|
||||
|
@ -17,6 +18,7 @@
|
|||
"chokidar": "3.6.0",
|
||||
"esbuild": "0.23.0",
|
||||
"eslint": "8.57.0",
|
||||
"madge": "6.1.0",
|
||||
"rimraf": "5.0.9",
|
||||
"typescript": "5.5.3"
|
||||
},
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { z } from "zod";
|
||||
import { token } from "./util";
|
||||
import * as Shared from "./shared";
|
||||
|
||||
export const SmoothCaretSchema = z.enum(["off", "slow", "medium", "fast"]);
|
||||
export type SmoothCaret = z.infer<typeof SmoothCaretSchema>;
|
||||
|
@ -205,19 +206,8 @@ export type ShowAverage = z.infer<typeof ShowAverageSchema>;
|
|||
export const ColorHexValueSchema = z.string().regex(/^#([\da-f]{3}){1,2}$/i);
|
||||
export type ColorHexValue = z.infer<typeof ColorHexValueSchema>;
|
||||
|
||||
export const DifficultySchema = z.enum(["normal", "expert", "master"]);
|
||||
export type Difficulty = z.infer<typeof DifficultySchema>;
|
||||
|
||||
export const NumberModeSchema = z.enum(["time", "words", "quote"]);
|
||||
export const CustomModeSchema = z.enum(["custom"]);
|
||||
export const ZenModeSchema = z.enum(["zen"]);
|
||||
|
||||
export const ModeSchema = z.union([
|
||||
NumberModeSchema,
|
||||
CustomModeSchema,
|
||||
ZenModeSchema,
|
||||
]);
|
||||
export type Mode = z.infer<typeof ModeSchema>;
|
||||
export const DifficultySchema = Shared.DifficultySchema;
|
||||
export type Difficulty = Shared.Difficulty;
|
||||
|
||||
export const CustomThemeColorsSchema = z.tuple([
|
||||
ColorHexValueSchema,
|
||||
|
@ -315,7 +305,7 @@ export const ConfigSchema = z
|
|||
numbers: z.boolean(),
|
||||
words: WordCountSchema,
|
||||
time: TimeConfigSchema,
|
||||
mode: ModeSchema,
|
||||
mode: Shared.ModeSchema,
|
||||
quoteLength: QuoteLengthConfigSchema,
|
||||
language: LanguageSchema,
|
||||
fontSize: FontSizeSchema,
|
||||
|
@ -392,3 +382,5 @@ export type Config = z.infer<typeof ConfigSchema>;
|
|||
|
||||
export const PartialConfigSchema = ConfigSchema.partial();
|
||||
export type PartialConfig = z.infer<typeof PartialConfigSchema>;
|
||||
|
||||
export type ConfigValue = Config[keyof Config];
|
||||
|
|
42
packages/contracts/src/schemas/shared.ts
Normal file
42
packages/contracts/src/schemas/shared.ts
Normal file
|
@ -0,0 +1,42 @@
|
|||
import { z } from "zod";
|
||||
import { StringNumberSchema } from "./util";
|
||||
|
||||
//used by config and shared
|
||||
export const DifficultySchema = z.enum(["normal", "expert", "master"]);
|
||||
export type Difficulty = z.infer<typeof DifficultySchema>;
|
||||
|
||||
//used by user and config
|
||||
export const PersonalBestSchema = z.object({
|
||||
acc: z.number().nonnegative().max(100),
|
||||
consistency: z.number().nonnegative().max(100),
|
||||
difficulty: DifficultySchema,
|
||||
lazyMode: z.boolean().optional(),
|
||||
language: z
|
||||
.string()
|
||||
.max(100)
|
||||
.regex(/[\w+]+/),
|
||||
punctuation: z.boolean().optional(),
|
||||
numbers: z.boolean().optional(),
|
||||
raw: z.number().nonnegative(),
|
||||
wpm: z.number().nonnegative(),
|
||||
timestamp: z.number().nonnegative(),
|
||||
});
|
||||
export type PersonalBest = z.infer<typeof PersonalBestSchema>;
|
||||
|
||||
//used by user and config
|
||||
export const PersonalBestsSchema = z.object({
|
||||
time: z.record(StringNumberSchema, z.array(PersonalBestSchema)),
|
||||
words: z.record(StringNumberSchema, z.array(PersonalBestSchema)),
|
||||
quote: z.record(StringNumberSchema, z.array(PersonalBestSchema)),
|
||||
custom: z.record(z.literal("custom"), z.array(PersonalBestSchema)),
|
||||
zen: z.record(z.literal("zen"), z.array(PersonalBestSchema)),
|
||||
});
|
||||
export type PersonalBests = z.infer<typeof PersonalBestsSchema>;
|
||||
|
||||
//used by user and config
|
||||
export const ModeSchema = PersonalBestsSchema.keyof();
|
||||
export type Mode = z.infer<typeof ModeSchema>;
|
||||
export type Mode2<M extends Mode> = M extends M
|
||||
? keyof PersonalBests[M]
|
||||
: never;
|
||||
export type Mode2Custom<M extends Mode> = Mode2<M> | "custom";
|
|
@ -1,29 +1 @@
|
|||
import { z } from "zod";
|
||||
import { DifficultySchema } from "./configs";
|
||||
import { StringNumberSchema } from "./util";
|
||||
|
||||
export const PersonalBestSchema = z.object({
|
||||
acc: z.number().nonnegative().max(100),
|
||||
consistency: z.number().nonnegative().max(100),
|
||||
difficulty: DifficultySchema,
|
||||
lazyMode: z.boolean().optional(),
|
||||
language: z
|
||||
.string()
|
||||
.max(100)
|
||||
.regex(/[\w+]+/),
|
||||
punctuation: z.boolean().optional(),
|
||||
numbers: z.boolean().optional(),
|
||||
raw: z.number().nonnegative(),
|
||||
wpm: z.number().nonnegative(),
|
||||
timestamp: z.number().nonnegative(),
|
||||
});
|
||||
export type PersonalBest = z.infer<typeof PersonalBestSchema>;
|
||||
|
||||
export const PersonalBestsSchema = z.object({
|
||||
time: z.record(StringNumberSchema, z.array(PersonalBestSchema)),
|
||||
words: z.record(StringNumberSchema, z.array(PersonalBestSchema)),
|
||||
quote: z.record(StringNumberSchema, z.array(PersonalBestSchema)),
|
||||
custom: z.record(z.literal("custom"), z.array(PersonalBestSchema)),
|
||||
zen: z.record(z.literal("zen"), z.array(PersonalBestSchema)),
|
||||
});
|
||||
export type PersonalBests = z.infer<typeof PersonalBestsSchema>;
|
||||
//tbd
|
||||
|
|
|
@ -1,84 +0,0 @@
|
|||
import { PersonalBests } from "@monkeytype/contracts/schemas/users";
|
||||
|
||||
export type SmoothCaret =
|
||||
import("@monkeytype/contracts/schemas/configs").SmoothCaret;
|
||||
export type QuickRestart =
|
||||
import("@monkeytype/contracts/schemas/configs").QuickRestart;
|
||||
export type QuoteLength =
|
||||
import("@monkeytype/contracts/schemas/configs").QuoteLength;
|
||||
export type CaretStyle =
|
||||
import("@monkeytype/contracts/schemas/configs").CaretStyle;
|
||||
export type Difficulty =
|
||||
import("@monkeytype/contracts/schemas/configs").Difficulty;
|
||||
export type Mode = import("@monkeytype/contracts/schemas/configs").Mode;
|
||||
export type Mode2<M extends Mode> = M extends M
|
||||
? keyof PersonalBests[M]
|
||||
: never;
|
||||
export type Mode2Custom<M extends Mode> = Mode2<M> | "custom";
|
||||
export type ConfidenceMode =
|
||||
import("@monkeytype/contracts/schemas/configs").ConfidenceMode;
|
||||
export type IndicateTypos =
|
||||
import("@monkeytype/contracts/schemas/configs").IndicateTypos;
|
||||
export type TimerStyle =
|
||||
import("@monkeytype/contracts/schemas/configs").TimerStyle;
|
||||
export type LiveSpeedAccBurstStyle =
|
||||
import("@monkeytype/contracts/schemas/configs").LiveSpeedAccBurstStyle;
|
||||
export type RandomTheme =
|
||||
import("@monkeytype/contracts/schemas/configs").RandomTheme;
|
||||
export type TimerColor =
|
||||
import("@monkeytype/contracts/schemas/configs").TimerColor;
|
||||
export type TimerOpacity =
|
||||
import("@monkeytype/contracts/schemas/configs").TimerOpacity;
|
||||
export type StopOnError =
|
||||
import("@monkeytype/contracts/schemas/configs").StopOnError;
|
||||
export type KeymapMode =
|
||||
import("@monkeytype/contracts/schemas/configs").KeymapMode;
|
||||
export type KeymapStyle =
|
||||
import("@monkeytype/contracts/schemas/configs").KeymapStyle;
|
||||
export type KeymapLegendStyle =
|
||||
import("@monkeytype/contracts/schemas/configs").KeymapLegendStyle;
|
||||
export type KeymapShowTopRow =
|
||||
import("@monkeytype/contracts/schemas/configs").KeymapShowTopRow;
|
||||
export type SingleListCommandLine =
|
||||
import("@monkeytype/contracts/schemas/configs").SingleListCommandLine;
|
||||
export type PlaySoundOnClick =
|
||||
import("@monkeytype/contracts/schemas/configs").PlaySoundOnClick;
|
||||
export type PlaySoundOnError =
|
||||
import("@monkeytype/contracts/schemas/configs").PlaySoundOnError;
|
||||
export type SoundVolume =
|
||||
import("@monkeytype/contracts/schemas/configs").SoundVolume;
|
||||
export type PaceCaret =
|
||||
import("@monkeytype/contracts/schemas/configs").PaceCaret;
|
||||
export type AccountChart =
|
||||
import("@monkeytype/contracts/schemas/configs").AccountChart;
|
||||
export type MinimumWordsPerMinute =
|
||||
import("@monkeytype/contracts/schemas/configs").MinimumWordsPerMinute;
|
||||
export type HighlightMode =
|
||||
import("@monkeytype/contracts/schemas/configs").HighlightMode;
|
||||
export type TypingSpeedUnit =
|
||||
import("@monkeytype/contracts/schemas/configs").TypingSpeedUnit;
|
||||
export type Ads = import("@monkeytype/contracts/schemas/configs").Ads;
|
||||
export type MinimumAccuracy =
|
||||
import("@monkeytype/contracts/schemas/configs").MinimumAccuracy;
|
||||
export type RepeatQuotes =
|
||||
import("@monkeytype/contracts/schemas/configs").RepeatQuotes;
|
||||
export type OppositeShiftMode =
|
||||
import("@monkeytype/contracts/schemas/configs").OppositeShiftMode;
|
||||
export type CustomBackgroundSize =
|
||||
import("@monkeytype/contracts/schemas/configs").CustomBackgroundSize;
|
||||
export type CustomBackgroundFilter =
|
||||
import("@monkeytype/contracts/schemas/configs").CustomBackgroundFilter;
|
||||
export type CustomLayoutFluid =
|
||||
import("@monkeytype/contracts/schemas/configs").CustomLayoutFluid;
|
||||
export type MonkeyPowerLevel =
|
||||
import("@monkeytype/contracts/schemas/configs").MonkeyPowerLevel;
|
||||
export type MinimumBurst =
|
||||
import("@monkeytype/contracts/schemas/configs").MinimumBurst;
|
||||
export type ShowAverage =
|
||||
import("@monkeytype/contracts/schemas/configs").ShowAverage;
|
||||
export type TapeMode = import("@monkeytype/contracts/schemas/configs").TapeMode;
|
||||
export type CustomThemeColors =
|
||||
import("@monkeytype/contracts/schemas/configs").CustomThemeColors;
|
||||
|
||||
export type Config = import("@monkeytype/contracts/schemas/configs").Config;
|
||||
export type ConfigValue = Config[keyof Config];
|
|
@ -1,6 +1,10 @@
|
|||
import { Difficulty, Mode } from "@monkeytype/contracts/schemas/configs";
|
||||
import { Mode2 } from "./config";
|
||||
import { PersonalBest, PersonalBests } from "./user";
|
||||
type Difficulty = import("@monkeytype/contracts/schemas/configs").Difficulty;
|
||||
type Mode = import("@monkeytype/contracts/schemas/shared").Mode;
|
||||
type Mode2<M extends Mode> =
|
||||
import("@monkeytype/contracts/schemas/shared").Mode2<M>;
|
||||
type PersonalBest = import("@monkeytype/contracts/schemas/shared").PersonalBest;
|
||||
type PersonalBests =
|
||||
import("@monkeytype/contracts/schemas/shared").PersonalBests;
|
||||
|
||||
export type ValidModeRule = {
|
||||
language: string;
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
export type PersonalBest =
|
||||
import("@monkeytype/contracts/schemas/users").PersonalBest;
|
||||
|
||||
export type PersonalBests =
|
||||
import("@monkeytype/contracts/schemas/users").PersonalBests;
|
|
@ -16,6 +16,7 @@
|
|||
"outputs": ["dist/**", "build/**"]
|
||||
},
|
||||
"test": {
|
||||
"dependsOn": ["^build"],
|
||||
"cache": false
|
||||
},
|
||||
"dev": {
|
||||
|
|
Loading…
Reference in a new issue