refactored layout to be screens. work on jest tests.

This commit is contained in:
Jordan Hewitt 2025-02-01 05:45:10 -08:00
parent 5aa9c68a4b
commit 7f60c25393
12 changed files with 189 additions and 108 deletions

View File

@ -1,26 +0,0 @@
import { Tabs } from 'expo-router';
import React from 'react';
import { Platform } from 'react-native';
import { Colors } from '@/constants/Colors';
import { useColorScheme } from '@/hooks/useColorScheme';
export default function TabLayout() {
const colorScheme = useColorScheme();
return (
<Tabs
screenOptions={{
tabBarActiveTintColor: Colors[colorScheme ?? 'light'].tint,
headerShown: false,
tabBarStyle: Platform.select({
ios: {
// Use a transparent background on iOS to show the blur effect
position: 'absolute',
},
default: {},
}),
}}>
</Tabs>
);
}

View File

@ -1,45 +0,0 @@
import { LanguageSelection } from '@/components/LanguageSelection';
import { useState } from 'react';
import { Text } from 'react-native';
import { Image, StyleSheet, Platform } from 'react-native';
import { Conversation, Speaker } from '../lib/conversation';
import { language_matrix_entry, Translator } from '../i18n/api';
import ConversationThread from '@/components/ConversationThread';
export default function HomeScreen() {
const [language, setLanguage] = useState<language_matrix_entry | undefined>()
const [conversation, setConversation] = useState<Conversation|undefined>();
return (
conversation ? <ConversationThread conversation={conversation} /> :
<LanguageSelection onLanguageSelected={
(language) => {
setConversation(new Conversation(
new Translator("en", language.code),
{id: "host", language: "en"},
{id: "guest", language: language.code},
))
}
} />
);
}
const styles = StyleSheet.create({
titleContainer: {
flexDirection: 'row',
alignItems: 'center',
gap: 8,
},
stepContainer: {
gap: 8,
marginBottom: 8,
},
reactLogo: {
height: 178,
width: 290,
bottom: 0,
left: 0,
position: 'absolute',
},
});

View File

@ -30,10 +30,9 @@ export default function RootLayout() {
return (
<ThemeProvider value={colorScheme === 'dark' ? DarkTheme : DefaultTheme}>
<Stack>
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
<Stack.Screen name="(screens)" options={{ headerShown: false }} />
<Stack.Screen name="+not-found" />
</Stack>
<StatusBar style="auto" />
</ThemeProvider>
);
}

View File

@ -30,4 +30,6 @@ export async function getDb(migrationDirection : "up" | "down" = "up") {
});
}
}
return db;
}

View File

@ -1,18 +1,30 @@
import React, { useState, useEffect } from 'react';
import { View } from 'react-native';
import { Conversation } from '@/app/lib/conversation';
import { Conversation, Message } from '@/app/lib/conversation';
import MessageBubble from '@/components/ui/MessageBubble';
import { NavigationProp, ParamListBase } from '@react-navigation/native';
import { language_matrix_entry, Translator } from '@/app/i18n/api';
import { getDb } from '@/app/lib/db';
interface ConversationThreadProps {
conversation: Conversation;
}
const ConversationThread: React.FC<ConversationThreadProps> = ({ conversation }) => {
const [messages, setMessages] = useState<Message[]>(conversation.messages);
const ConversationThread = ({ language, navigation }: { language: language_matrix_entry, navigation: NavigationProp<ParamListBase> }) => {
const [messages, setMessages] = useState<Message[]>([]);
useEffect(async () => {
const db = await getDb();
const curs = await db.executeSql("SELECT host_language FROM settings LIMIT 1");
})
const translator = new Translator()
const conversation = new Conversation()
useEffect(() => {
const updateMessages = () => {
setMessages([...conversation.messages]);
setMessages([...conversation]);
};
conversation.on('messageAdded', updateMessages);

View File

@ -6,17 +6,22 @@ import { LANG_FLAGS } from "@/app/i18n/lang";
import { ScrollView, StyleSheet, Text, View } from "react-native";
import { SafeAreaProvider, SafeAreaView } from "react-native-safe-area-context";
import { Conversation, Speaker } from "@/app/lib/conversation";
import { NavigationProp, ParamListBase } from "@react-navigation/native";
export function LanguageSelection(props: {
navigation: NavigationProp<ParamListBase>
translator?: Translator
onLanguageSelected?: (language: language_matrix_entry) => any,
}) {
const [languages, setLanguages] = useState<language_matrix | undefined>();
const [languagesLoaded, setLanguagesLoaded] = useState<boolean>(false);
const translator = props.translator || new CachedTranslator("en")
function onLangSelected(language: language_matrix_entry) {
props.navigation.navigate("Conversation", { language, })
}
useEffect(() => {
const fetchData = async () => {
@ -41,7 +46,7 @@ export function LanguageSelection(props: {
([lang, lang_entry]) => {
return (
<View style={styles.column}>
<ISpeakButton language={lang_entry} key={lang_entry.code} onLangSelected={props.onLanguageSelected && props.onLanguageSelected(lang_entry)} />
<ISpeakButton language={lang_entry} key={lang_entry.code} onLangSelected={onLangSelected} />
</View>
);
}

View File

@ -47,27 +47,23 @@ export default function Settings() {
// This is the configuration schema
const settings: SettingsElement[] = [
{
label: "LibreTranslate server",
type: "string",
get: confGet.bind(null, "@ltServer", "http://localhost:5000"),
set: confSet.bind(null, "@ltServer"),
},
{
label: "Host Language",
type: "enum",
// You can override the way the value is displayed
values: ["en", "es", "fr"],
display: (v) => {
display: (v : string) => {
return longLang(v);
},
get: confGet.bind(null, "@hostLanguage", ""),
set: confSet.bind(null, "@hostLanguage"),
},
// Choose from a list, uses the standard phone navigation screens
{
label: "Intelligence",
title: "Select Intelligence",
type: "enum",
values: Object.keys(intelligence),
display: (v: string) => intelligence[v],
get: confGet.bind(null, "@int", "M"),
set: confSet.bind(null, "@int"),
},
];
useEffect(() => {

View File

@ -1,19 +1,27 @@
// jest.config.ts
import { resolve } from "path"
import { createJsWithBabelPreset, JestConfigWithTsJest } from 'ts-jest'
const jsWithBabelPreset = createJsWithBabelPreset({
tsconfig: 'tsconfig.spec.json',
babelConfig: true,
})
const jestConfig: JestConfigWithTsJest = {
preset: 'react-native',
transform: jsWithBabelPreset.transform,
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
moduleNameMapper: {
'^@/(.*)$': resolve("<rootDir>", "$1")
const jestConfig = {
// preset: 'jest-expo',
preset: 'ts-jest',
transform: {
'^.+\\.(ts|tsx)$': 'babel-jest',
},
moduleNameMapper: {
'@': "<rootDir>"
},
transformIgnorePatterns: [
'node_modules/(?!' +
[
'@cspotcode',
'node-fetch',
'fetch-blob',
'data-uri-to-buffer',
'jest-runtime',
'formdata-polyfill'
].join('|') +
')',
],
}
export default jestConfig

View File

@ -11,15 +11,14 @@
"test": "jest --watchAll",
"lint": "expo lint"
},
"jest": {
"preset": "jest-expo"
},
"dependencies": {
"@babel/runtime": "^7.26.7",
"@expo/vector-icons": "^14.0.2",
"@mmomtchev/react-native-settings": "^1.1.0",
"@react-native-async-storage/async-storage": "^2.1.0",
"@react-navigation/bottom-tabs": "^7.2.0",
"@react-navigation/native": "^7.0.14",
"@react-navigation/native-stack": "^7.2.0",
"expo": "~52.0.28",
"expo-blur": "~14.0.3",
"expo-constants": "~17.0.5",
@ -47,16 +46,19 @@
},
"devDependencies": {
"@babel/core": "^7.25.2",
"@babel/preset-typescript": "^7.26.0",
"@jest/globals": "^29.7.0",
"@types/jest": "^29.5.12",
"@types/react": "~18.3.12",
"@types/react-native-sqlite-storage": "^6.0.5",
"@types/react-test-renderer": "^18.3.0",
"babel-jest": "^29.7.0",
"babel-plugin-module-resolver": "^5.0.2",
"jest": "^29.2.1",
"jest-expo": "~52.0.3",
"metro-react-native-babel-preset": "^0.77.0",
"react-test-renderer": "18.3.1",
"ts-jest": "^29.2.5",
"typescript": "^5.3.3"
},
"private": true

132
pnpm-lock.yaml generated
View File

@ -14,6 +14,9 @@ importers:
'@expo/vector-icons':
specifier: ^14.0.2
version: 14.0.4
'@mmomtchev/react-native-settings':
specifier: ^1.1.0
version: 1.1.0(fpjfgwfpctz5vwjeruiofjqgra)
'@react-native-async-storage/async-storage':
specifier: ^2.1.0
version: 2.1.0(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1))
@ -23,6 +26,9 @@ importers:
'@react-navigation/native':
specifier: ^7.0.14
version: 7.0.14(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)
'@react-navigation/native-stack':
specifier: ^7.2.0
version: 7.2.0(@react-navigation/native@7.0.14(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)
expo:
specifier: ~52.0.28
version: 52.0.28(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@expo/metro-runtime@4.0.1(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)
@ -99,6 +105,9 @@ importers:
'@babel/core':
specifier: ^7.25.2
version: 7.26.7
'@babel/preset-typescript':
specifier: ^7.26.0
version: 7.26.0(@babel/core@7.26.7)
'@jest/globals':
specifier: ^29.7.0
version: 29.7.0
@ -114,6 +123,9 @@ importers:
'@types/react-test-renderer':
specifier: ^18.3.0
version: 18.3.1
babel-jest:
specifier: ^29.7.0
version: 29.7.0(@babel/core@7.26.7)
babel-plugin-module-resolver:
specifier: ^5.0.2
version: 5.0.2
@ -129,6 +141,9 @@ importers:
react-test-renderer:
specifier: 18.3.1
version: 18.3.1(react@18.3.1)
ts-jest:
specifier: ^29.2.5
version: 29.2.5(@babel/core@7.26.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.7))(jest@29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3)
typescript:
specifier: ^5.3.3
version: 5.7.3
@ -1089,6 +1104,15 @@ packages:
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
'@mmomtchev/react-native-settings@1.1.0':
resolution: {integrity: sha512-FbnXbt0XIEtU8MQ2drd2mqUHoM3kGaKHRX7v/dMxs3vzYrcCIoyobx/uIERHPLmkcIZQtmRdPV9Pw1DfJHS2zw==}
peerDependencies:
'@react-navigation/native': '>=6.0.0'
'@react-navigation/native-stack': '>=6.6.0'
'@types/react': '>=17.0.0'
react: '>=17.0.0'
react-native: '>=0.68.0'
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@ -1594,6 +1618,9 @@ packages:
async-limiter@1.0.1:
resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==}
async@3.2.6:
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
@ -1719,6 +1746,10 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
bs-logger@0.2.6:
resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
engines: {node: '>= 6'}
bser@2.1.1:
resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
@ -2127,6 +2158,11 @@ packages:
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
ejs@3.1.10:
resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
engines: {node: '>=0.10.0'}
hasBin: true
electron-to-chromium@1.5.88:
resolution: {integrity: sha512-K3C2qf1o+bGzbilTDCTBhTQcMS9KW60yTAaTeeXsfvQuTDDwlokLam/AdqlqcSy9u4UainDgsHV23ksXAOgamw==}
@ -2428,6 +2464,9 @@ packages:
fetch-retry@4.1.1:
resolution: {integrity: sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==}
filelist@1.0.4:
resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
@ -2859,6 +2898,11 @@ packages:
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
jake@10.9.2:
resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==}
engines: {node: '>=10'}
hasBin: true
jest-changed-files@29.7.0:
resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@ -3189,6 +3233,9 @@ packages:
lodash.debounce@4.0.8:
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
lodash.memoize@4.1.2:
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
lodash.throttle@4.1.1:
resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
@ -3351,6 +3398,10 @@ packages:
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
minimatch@5.1.6:
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
engines: {node: '>=10'}
minimatch@8.0.4:
resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==}
engines: {node: '>=16 || 14 >=14.17'}
@ -4398,6 +4449,30 @@ packages:
ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
ts-jest@29.2.5:
resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==}
engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@babel/core': '>=7.0.0-beta.0 <8'
'@jest/transform': ^29.0.0
'@jest/types': ^29.0.0
babel-jest: ^29.0.0
esbuild: '*'
jest: ^29.0.0
typescript: '>=4.3 <6'
peerDependenciesMeta:
'@babel/core':
optional: true
'@jest/transform':
optional: true
'@jest/types':
optional: true
babel-jest:
optional: true
esbuild:
optional: true
ts-node@10.9.2:
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
hasBin: true
@ -6214,6 +6289,14 @@ snapshots:
'@jridgewell/sourcemap-codec': 1.5.0
optional: true
'@mmomtchev/react-native-settings@1.1.0(fpjfgwfpctz5vwjeruiofjqgra)':
dependencies:
'@react-navigation/native': 7.0.14(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)
'@react-navigation/native-stack': 7.2.0(@react-navigation/native@7.0.14(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)
'@types/react': 18.3.18
react: 18.3.1
react-native: 0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.0(@babel/core@7.26.7))(@types/react@18.3.18)(react@18.3.1)
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@ -6852,6 +6935,8 @@ snapshots:
async-limiter@1.0.1: {}
async@3.2.6: {}
asynckit@0.4.0: {}
at-least-node@1.0.0: {}
@ -7029,6 +7114,10 @@ snapshots:
node-releases: 2.0.19
update-browserslist-db: 1.1.2(browserslist@4.24.4)
bs-logger@0.2.6:
dependencies:
fast-json-stable-stringify: 2.1.0
bser@2.1.1:
dependencies:
node-int64: 0.4.0
@ -7422,6 +7511,10 @@ snapshots:
ee-first@1.1.1: {}
ejs@3.1.10:
dependencies:
jake: 10.9.2
electron-to-chromium@1.5.88: {}
emittery@0.13.1: {}
@ -7762,6 +7855,10 @@ snapshots:
fetch-retry@4.1.1: {}
filelist@1.0.4:
dependencies:
minimatch: 5.1.6
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
@ -8204,6 +8301,13 @@ snapshots:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
jake@10.9.2:
dependencies:
async: 3.2.6
chalk: 4.1.2
filelist: 1.0.4
minimatch: 3.1.2
jest-changed-files@29.7.0:
dependencies:
execa: 5.1.1
@ -8762,6 +8866,8 @@ snapshots:
lodash.debounce@4.0.8: {}
lodash.memoize@4.1.2: {}
lodash.throttle@4.1.1: {}
lodash@4.17.21: {}
@ -8789,8 +8895,7 @@ snapshots:
dependencies:
semver: 7.7.0
make-error@1.3.6:
optional: true
make-error@1.3.6: {}
makeerror@1.0.12:
dependencies:
@ -9068,6 +9173,10 @@ snapshots:
dependencies:
brace-expansion: 1.1.11
minimatch@5.1.6:
dependencies:
brace-expansion: 2.0.1
minimatch@8.0.4:
dependencies:
brace-expansion: 2.0.1
@ -10136,6 +10245,25 @@ snapshots:
ts-interface-checker@0.1.13: {}
ts-jest@29.2.5(@babel/core@7.26.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.7))(jest@29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3):
dependencies:
bs-logger: 0.2.6
ejs: 3.1.10
fast-json-stable-stringify: 2.1.0
jest: 29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3))
jest-util: 29.7.0
json5: 2.2.3
lodash.memoize: 4.1.2
make-error: 1.3.6
semver: 7.7.0
typescript: 5.7.3
yargs-parser: 21.1.1
optionalDependencies:
'@babel/core': 7.26.7
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
babel-jest: 29.7.0(@babel/core@7.26.7)
ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3):
dependencies:
'@cspotcode/source-map-support': 0.8.1

View File

@ -6,7 +6,7 @@
"@/*": [
"./*"
]
}
},
},
"include": [
"**/*.ts",