diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx
deleted file mode 100644
index 8914efa..0000000
--- a/app/(tabs)/_layout.tsx
+++ /dev/null
@@ -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 (
-
-
- );
-}
diff --git a/app/(tabs)/index.tsx b/app/(tabs)/index.tsx
deleted file mode 100644
index bdd0588..0000000
--- a/app/(tabs)/index.tsx
+++ /dev/null
@@ -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()
- const [conversation, setConversation] = useState();
-
- return (
- conversation ? :
- {
- 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',
- },
-});
diff --git a/app/(tabs)/settings.tsx b/app/(tabs)/settings.tsx
deleted file mode 100644
index e69de29..0000000
diff --git a/app/_layout.tsx b/app/_layout.tsx
index db74578..f367734 100644
--- a/app/_layout.tsx
+++ b/app/_layout.tsx
@@ -30,10 +30,9 @@ export default function RootLayout() {
return (
-
+
-
);
}
diff --git a/app/lib/db.ts b/app/lib/db.ts
index 8617a17..a7ff5b3 100644
--- a/app/lib/db.ts
+++ b/app/lib/db.ts
@@ -30,4 +30,6 @@ export async function getDb(migrationDirection : "up" | "down" = "up") {
});
}
}
+
+ return db;
}
\ No newline at end of file
diff --git a/components/ConversationThread.tsx b/components/ConversationThread.tsx
index cbae772..aec52b1 100644
--- a/components/ConversationThread.tsx
+++ b/components/ConversationThread.tsx
@@ -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 = ({ conversation }) => {
- const [messages, setMessages] = useState(conversation.messages);
+const ConversationThread = ({ language, navigation }: { language: language_matrix_entry, navigation: NavigationProp }) => {
+ const [messages, setMessages] = useState([]);
+
+ 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);
diff --git a/components/LanguageSelection.tsx b/components/LanguageSelection.tsx
index 00e6ac2..ea07d4f 100644
--- a/components/LanguageSelection.tsx
+++ b/components/LanguageSelection.tsx
@@ -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
translator?: Translator
- onLanguageSelected?: (language: language_matrix_entry) => any,
}) {
const [languages, setLanguages] = useState();
const [languagesLoaded, setLanguagesLoaded] = useState(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 (
-
+
);
}
diff --git a/components/Settings.tsx b/components/Settings.tsx
index 4a2bfcd..a392a90 100644
--- a/components/Settings.tsx
+++ b/components/Settings.tsx
@@ -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(() => {
diff --git a/jest.config.ts b/jest.config.ts
index 3568955..dad1456 100644
--- a/jest.config.ts
+++ b/jest.config.ts
@@ -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("", "$1")
+const jestConfig = {
+ // preset: 'jest-expo',
+ preset: 'ts-jest',
+ transform: {
+ '^.+\\.(ts|tsx)$': 'babel-jest',
},
+ moduleNameMapper: {
+ '@': ""
+ },
+ transformIgnorePatterns: [
+ 'node_modules/(?!' +
+ [
+ '@cspotcode',
+ 'node-fetch',
+ 'fetch-blob',
+ 'data-uri-to-buffer',
+ 'jest-runtime',
+ 'formdata-polyfill'
+ ].join('|') +
+ ')',
+],
}
export default jestConfig
\ No newline at end of file
diff --git a/package.json b/package.json
index 30e0f31..9901b85 100644
--- a/package.json
+++ b/package.json
@@ -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
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c848569..ad655ca 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -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
diff --git a/tsconfig.json b/tsconfig.json
index 909e901..0186189 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -6,7 +6,7 @@
"@/*": [
"./*"
]
- }
+ },
},
"include": [
"**/*.ts",