diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 62e5e8e..2e7dda7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -55,7 +55,7 @@ jobs: runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v4 - - run: git tag ${{ github.event.inputs.tag }} + - run: git tag v${{ env.VENDOR_VERSION }} - name: setup node uses: actions/setup-node@v4 with: @@ -85,16 +85,18 @@ jobs: - name: Rust cache uses: swatinem/rust-cache@v2 with: - workspaces: './src-tauri -> target' + workspaces: 'apps/desktop/src-tauri -> target' - name: install frontend dependencies - run: npm install + run: npm ci + working-directory: apps/desktop - uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} with: + projectPath: apps/desktop releaseId: ${{ env.RELEASE_ID }} releaseDraft: true prerelease: true diff --git a/.github/workflows/rust-tests.yml b/.github/workflows/rust-tests.yml new file mode 100644 index 0000000..c918811 --- /dev/null +++ b/.github/workflows/rust-tests.yml @@ -0,0 +1,45 @@ +name: "Rust Tests" + +on: + pull_request: + types: [opened, synchronize, reopened] + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + cargo-test: + runs-on: ubuntu-24.04 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Rust stable + uses: dtolnay/rust-toolchain@stable + + - name: Install Linux dependencies + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install -y \ + libgtk-3-dev \ + libwebkit2gtk-4.1-dev \ + libappindicator3-dev \ + librsvg2-dev \ + patchelf + + - name: Stub Nuxt dist output + run: | + mkdir -p dist + test -f dist/index.html || echo 'stub' > dist/index.html + working-directory: apps/desktop + + - name: Cache Rust builds + uses: swatinem/rust-cache@v2 + with: + workspaces: 'apps/desktop/src-tauri -> target' + + - name: Run cargo test + run: cargo test --manifest-path apps/desktop/src-tauri/Cargo.toml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 467d9a8..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: 'Test build on PR' -on: - pull_request: - types: [opened, synchronize, reopened] - -# Cancel in progress workflows on pull_requests. -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - test-tauri: - strategy: - fail-fast: false - matrix: - include: - - platform: 'macos-latest' # for Arm based macs (M1 and above). - args: '--target aarch64-apple-darwin' - - platform: 'macos-latest' # for Intel based macs. - args: '--target x86_64-apple-darwin' - - platform: 'ubuntu-22.04' - args: '' - - platform: 'windows-latest' - args: '' - - runs-on: ${{ matrix.platform }} - steps: - - uses: actions/checkout@v4 - - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: lts/* - - - name: install Rust stable - uses: dtolnay/rust-toolchain@stable - with: - # Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds. - targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }} - - - name: install dependencies (ubuntu only) - if: matrix.platform == 'ubuntu-22.04' # This must match the platform value defined above. - run: | - sudo apt-get update - sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf - - - name: Rust cache - uses: swatinem/rust-cache@v2 - with: - workspaces: './src-tauri -> target' - - - name: Install frontend dependencies - run: npm install - - - uses: tauri-apps/tauri-action@v0 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} - with: - args: ${{ matrix.args }} diff --git a/.github/workflows/ui-tests.yml b/.github/workflows/ui-tests.yml new file mode 100644 index 0000000..b591137 --- /dev/null +++ b/.github/workflows/ui-tests.yml @@ -0,0 +1,37 @@ +name: UI Tests + +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + vitest: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 'lts/*' + cache: 'npm' + cache-dependency-path: apps/desktop/package-lock.json + + - name: Install dependencies + run: npm install + working-directory: apps/desktop + + - name: Prepare Nuxt artifacts + run: npx nuxi prepare + working-directory: apps/desktop + + - name: Run unit tests + run: npm run test:unit + working-directory: apps/desktop diff --git a/.gitignore b/.gitignore index 8ad76c8..7046e79 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,9 @@ dist-ssr *.local .next +# Build Folders/files +/target + # Editor directories and files .vscode/* !.vscode/extensions.json @@ -35,4 +38,4 @@ dist-ssr # Local env files .env .env.* -!.env.example \ No newline at end of file +!.env.example diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..1e8bd6e --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,362 @@ +# AGENTS.md — Working in this Repo (Tauri v2 + Nuxt/Vue) + +> Purpose: give AI coding agents (Agent) everything needed to design, code, test, and validate features in a cross‑platform desktop app built with **Tauri v2** (Rust) and **Nuxt/Vue** (TypeScript). Keep responses concise, deterministic, and *actionable*. + +--- + +## 1) Architecture & Tech Stack + +* **Frontend**: Nuxt 4 (Vue 3, ` diff --git a/src/components/UpdateBanner.vue b/apps/desktop/src/components/UpdateBanner.vue similarity index 100% rename from src/components/UpdateBanner.vue rename to apps/desktop/src/components/UpdateBanner.vue diff --git a/src/composables/useApiKeys.ts b/apps/desktop/src/composables/useApiKeys.ts similarity index 100% rename from src/composables/useApiKeys.ts rename to apps/desktop/src/composables/useApiKeys.ts diff --git a/src/composables/useAutoStart.ts b/apps/desktop/src/composables/useAutoStart.ts similarity index 100% rename from src/composables/useAutoStart.ts rename to apps/desktop/src/composables/useAutoStart.ts diff --git a/src/composables/useFileUpload.ts b/apps/desktop/src/composables/useFileUpload.ts similarity index 98% rename from src/composables/useFileUpload.ts rename to apps/desktop/src/composables/useFileUpload.ts index 7086c97..a63f7ad 100644 --- a/src/composables/useFileUpload.ts +++ b/apps/desktop/src/composables/useFileUpload.ts @@ -5,10 +5,10 @@ import localizedFormat from 'dayjs/plugin/localizedFormat' import dayjs from 'dayjs'; import { LAST_STARTED_DATE, LAST_UPDATED, PROGRAM_FOLDER } from '../constants'; import { getStorageItem, saveStorageItem } from '../utils/storage'; -import { invoke } from '@tauri-apps/api/core'; import { join } from '@tauri-apps/api/path'; import { error, info } from '@tauri-apps/plugin-log'; import { platform } from '@tauri-apps/plugin-os'; +import { submitAddonData } from './useThingApi'; export const useInternalFileUpload = () => { dayjs.extend(relativeTime) @@ -160,7 +160,7 @@ export const useInternalFileUpload = () => { info(`Uploading file: ${file} at file path: ${file}`); try { - const message = await invoke('submit_addon_data', { filePath: file }); + const message = await submitAddonData(file); info(`Uploaded file: ${file}`); info(`API response from ${file}: ${message}`); } catch (result) { diff --git a/src/composables/useNotifications.ts b/apps/desktop/src/composables/useNotifications.ts similarity index 100% rename from src/composables/useNotifications.ts rename to apps/desktop/src/composables/useNotifications.ts diff --git a/src/composables/useProgramFolder.ts b/apps/desktop/src/composables/useProgramFolder.ts similarity index 91% rename from src/composables/useProgramFolder.ts rename to apps/desktop/src/composables/useProgramFolder.ts index a12d82c..130ad12 100644 --- a/src/composables/useProgramFolder.ts +++ b/apps/desktop/src/composables/useProgramFolder.ts @@ -1,4 +1,4 @@ -import { BaseDirectory, exists, readDir } from '@tauri-apps/plugin-fs'; +import { BaseDirectory, exists } from '@tauri-apps/plugin-fs'; import { type } from '@tauri-apps/plugin-os'; import { PROGRAM_FOLDER } from '../constants'; import * as path from '@tauri-apps/api/path'; @@ -30,7 +30,7 @@ export const useProgramFolder = () => { } const getDefaultPath = async () => { - const homeDir = path.homeDir(); + const homeDir = await path.homeDir(); switch(type()) { case 'macos': const macFolderExists = await exists(defaultMacFolder, { baseDir: BaseDirectory.Home }); @@ -47,15 +47,15 @@ export const useProgramFolder = () => { for (const relPath of defaultLinuxFolders) { if (await exists(relPath, { baseDir: BaseDirectory.Home })) { // Build the absolute path the rest of the app expects - return `${homeDir}/${relPath}`; + return await path.join(homeDir, relPath); } } break; default: - return await homeDir; + return homeDir; } - return await homeDir; + return homeDir; } const programFolder = computed({ diff --git a/apps/desktop/src/composables/useThingApi.ts b/apps/desktop/src/composables/useThingApi.ts new file mode 100644 index 0000000..b997aa7 --- /dev/null +++ b/apps/desktop/src/composables/useThingApi.ts @@ -0,0 +1,5 @@ +import { invoke } from '@tauri-apps/api/core' + +export async function submitAddonData(filePath: string): Promise { + return await invoke('submit_addon_data', { filePath }) +} diff --git a/src/composables/useUpdater.ts b/apps/desktop/src/composables/useUpdater.ts similarity index 85% rename from src/composables/useUpdater.ts rename to apps/desktop/src/composables/useUpdater.ts index 5aa7f72..d7c1615 100644 --- a/src/composables/useUpdater.ts +++ b/apps/desktop/src/composables/useUpdater.ts @@ -1,5 +1,5 @@ import { ref, onMounted } from 'vue' -import { emit, listen } from '@tauri-apps/api/event' +import { listen } from '@tauri-apps/api/event' import { check } from '@tauri-apps/plugin-updater' import { relaunch } from '@tauri-apps/plugin-process' @@ -17,14 +17,14 @@ export default function useUpdater() { switch (event.event) { case 'Started': contentLength = event.data.contentLength; - console.log(`started downloading ${event.data.contentLength} bytes`); + console.log(`Started downloading ${event.data.contentLength} bytes`); break; case 'Progress': downloaded += event.data.chunkLength; - console.log(`downloaded ${downloaded} from ${contentLength}`); + console.log(`Downloaded ${downloaded} from ${contentLength}`); break; case 'Finished': - console.log('download finished'); + console.log('Download finished'); break; } }); diff --git a/src/constants.ts b/apps/desktop/src/constants.ts similarity index 100% rename from src/constants.ts rename to apps/desktop/src/constants.ts diff --git a/src/layouts/default.vue b/apps/desktop/src/layouts/default.vue similarity index 100% rename from src/layouts/default.vue rename to apps/desktop/src/layouts/default.vue diff --git a/apps/desktop/src/pages/__debug.vue b/apps/desktop/src/pages/__debug.vue new file mode 100644 index 0000000..ed05bf6 --- /dev/null +++ b/apps/desktop/src/pages/__debug.vue @@ -0,0 +1,285 @@ + + + diff --git a/src/pages/index.vue b/apps/desktop/src/pages/index.vue similarity index 100% rename from src/pages/index.vue rename to apps/desktop/src/pages/index.vue diff --git a/src/pages/settings.vue b/apps/desktop/src/pages/settings.vue similarity index 100% rename from src/pages/settings.vue rename to apps/desktop/src/pages/settings.vue diff --git a/src/public/img/warcraft-legion.jpg b/apps/desktop/src/public/img/warcraft-legion.jpg similarity index 100% rename from src/public/img/warcraft-legion.jpg rename to apps/desktop/src/public/img/warcraft-legion.jpg diff --git a/src/utils/storage.ts b/apps/desktop/src/utils/storage.ts similarity index 100% rename from src/utils/storage.ts rename to apps/desktop/src/utils/storage.ts diff --git a/tailwind.config.js b/apps/desktop/tailwind.config.js similarity index 100% rename from tailwind.config.js rename to apps/desktop/tailwind.config.js diff --git a/apps/desktop/tests/mocks/tauri.ts b/apps/desktop/tests/mocks/tauri.ts new file mode 100644 index 0000000..5b69f62 --- /dev/null +++ b/apps/desktop/tests/mocks/tauri.ts @@ -0,0 +1,12 @@ +import { vi } from 'vitest' + +export const invoke = vi.fn() +export const getVersion = vi.fn().mockResolvedValue('0.0.0') + +vi.mock('@tauri-apps/api/core', () => ({ + invoke, +})) + +vi.mock('@tauri-apps/api/app', () => ({ + getVersion, +})) diff --git a/apps/desktop/tests/rust/commands/mod.rs b/apps/desktop/tests/rust/commands/mod.rs new file mode 100644 index 0000000..d357917 --- /dev/null +++ b/apps/desktop/tests/rust/commands/mod.rs @@ -0,0 +1 @@ +pub mod submit_addon_data; diff --git a/apps/desktop/tests/rust/commands/submit_addon_data.rs b/apps/desktop/tests/rust/commands/submit_addon_data.rs new file mode 100644 index 0000000..ce6172e --- /dev/null +++ b/apps/desktop/tests/rust/commands/submit_addon_data.rs @@ -0,0 +1,60 @@ +use crate::commands::submit_addon_data::submit_addon_data_internal; +use httpmock::prelude::*; +use serde_json::json; + +#[tokio::test] +async fn submits_payload_and_returns_success_message() { + let server = MockServer::start_async().await; + let client = reqwest::Client::new(); + let api_key = "abc123"; + let lua_file = "some lua"; + + let mock = server + .mock_async(|when, then| { + when.method(POST) + .path("/upload/") + .header("user-agent", "WoWthing Sync - Tauri") + .json_body_obj(&json!({ + "apiKey": api_key, + "luaFile": lua_file, + })); + then.status(200).body("{\"message\":\"ok\"}"); + }) + .await; + + let result = submit_addon_data_internal( + &client, + &format!("{}/upload/", server.base_url()), + api_key, + lua_file, + ) + .await + .unwrap(); + + assert!(result.contains("Sync completed")); + mock.assert_async().await; +} + +#[tokio::test] +async fn returns_error_on_unsuccessful_response() { + let server = MockServer::start_async().await; + let client = reqwest::Client::new(); + + server + .mock_async(|when, then| { + when.method(POST).path("/upload/"); + then.status(500).body("server error"); + }) + .await; + + let err = submit_addon_data_internal( + &client, + &format!("{}/upload/", server.base_url()), + "abc123", + "contents", + ) + .await + .unwrap_err(); + + assert!(err.contains("unexpected")); +} diff --git a/apps/desktop/tests/setup.ts b/apps/desktop/tests/setup.ts new file mode 100644 index 0000000..0948c2c --- /dev/null +++ b/apps/desktop/tests/setup.ts @@ -0,0 +1,7 @@ +import { afterEach, vi } from 'vitest' + +import './mocks/tauri' + +afterEach(() => { + vi.clearAllMocks() +}) diff --git a/apps/desktop/tests/unit/components/AppFooter.test.ts b/apps/desktop/tests/unit/components/AppFooter.test.ts new file mode 100644 index 0000000..f7f9597 --- /dev/null +++ b/apps/desktop/tests/unit/components/AppFooter.test.ts @@ -0,0 +1,19 @@ +import { flushPromises, mount } from '@vue/test-utils' +import { vi } from 'vitest' + +import AppFooter from '@/components/AppFooter.vue' +import { getVersion } from '@tauri-apps/api/app' + +describe('AppFooter', () => { + it('renders the version returned by Tauri', async () => { + vi.mocked(getVersion).mockResolvedValue('2.3.4') + + const wrapper = mount({ + components: { AppFooter }, + template: '', + }) + await flushPromises() + + expect(wrapper.text()).toContain('Version 2.3.4') + }) +}) diff --git a/apps/desktop/tests/unit/useThingApi.test.ts b/apps/desktop/tests/unit/useThingApi.test.ts new file mode 100644 index 0000000..7adfa14 --- /dev/null +++ b/apps/desktop/tests/unit/useThingApi.test.ts @@ -0,0 +1,15 @@ +import { vi } from 'vitest' + +import { submitAddonData } from '@/composables/useThingApi' +import { invoke } from '@tauri-apps/api/core' + +describe('submitAddonData', () => { + it('delegates to tauri invoke with the expected payload', async () => { + vi.mocked(invoke).mockResolvedValue('ok') + + const result = await submitAddonData('/tmp/foo.lua') + + expect(invoke).toHaveBeenCalledWith('submit_addon_data', { filePath: '/tmp/foo.lua' }) + expect(result).toBe('ok') + }) +}) diff --git a/apps/desktop/tests/unit/useUpdater.test.ts b/apps/desktop/tests/unit/useUpdater.test.ts new file mode 100644 index 0000000..55d91d1 --- /dev/null +++ b/apps/desktop/tests/unit/useUpdater.test.ts @@ -0,0 +1,118 @@ +import { defineComponent, nextTick } from 'vue' +import { flushPromises, mount } from '@vue/test-utils' +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' + +import useUpdater from '@/composables/useUpdater' + +const { mockEmit, mockListen, mockCheck, mockRelaunch } = vi.hoisted(() => ({ + mockEmit: vi.fn(), + mockListen: vi.fn(), + mockCheck: vi.fn(), + mockRelaunch: vi.fn(), +})) + +vi.mock('@tauri-apps/api/event', () => ({ + emit: mockEmit, + listen: mockListen, +})) + +vi.mock('@tauri-apps/plugin-updater', () => ({ + check: mockCheck, +})) + +vi.mock('@tauri-apps/plugin-process', () => ({ + relaunch: mockRelaunch, +})) + +describe('useUpdater', () => { + let registeredListener: ((payload: unknown) => void) | undefined + + const mountComposable = async () => { + const component = defineComponent({ + name: 'TestUpdaterConsumer', + setup() { + return useUpdater() + }, + template: '
', + }) + + const wrapper = mount(component) + await flushPromises() + return wrapper + } + + beforeEach(() => { + vi.useFakeTimers() + + registeredListener = undefined + + mockEmit.mockReset() + mockCheck.mockReset() + mockListen.mockReset() + mockRelaunch.mockReset() + + mockListen.mockImplementation((_event, handler) => { + registeredListener = handler + return Promise.resolve(vi.fn()) + }) + + mockRelaunch.mockResolvedValue(undefined) + }) + + afterEach(() => { + vi.clearAllTimers() + vi.useRealTimers() + }) + + it('marks updateNeeded when check resolves with an update on mount', async () => { + mockCheck.mockResolvedValueOnce({ downloadAndInstall: vi.fn() }) + + const wrapper = await mountComposable() + + expect(mockCheck).toHaveBeenCalledTimes(1) + expect(wrapper.vm.updateNeeded).toBe(true) + + wrapper.unmount() + }) + + it('downloads the update and relaunches the app when handleUpdate is invoked', async () => { + mockCheck.mockResolvedValueOnce(null) + + const downloadAndInstall = vi.fn().mockImplementation(async (progressHandler?: (payload: any) => void) => { + if (progressHandler) { + progressHandler({ event: 'Started', data: { contentLength: 100 } }) + progressHandler({ event: 'Progress', data: { chunkLength: 50 } }) + progressHandler({ event: 'Finished', data: {} }) + } + }) + + mockCheck.mockResolvedValueOnce({ downloadAndInstall }) + + const wrapper = await mountComposable() + + expect(wrapper.vm.updateNeeded).toBe(false) + + await wrapper.vm.handleUpdate() + + expect(downloadAndInstall).toHaveBeenCalledTimes(1) + expect(mockRelaunch).toHaveBeenCalledTimes(1) + + wrapper.unmount() + }) + + it('flags updateNeeded when the tauri update event fires', async () => { + mockCheck.mockResolvedValueOnce(null) + + const wrapper = await mountComposable() + + expect(mockListen).toHaveBeenCalledWith('tauri://update-available', expect.any(Function)) + expect(wrapper.vm.updateNeeded).toBe(false) + + registeredListener?.({}) + await nextTick() + + expect(wrapper.vm.updateNeeded).toBe(true) + + wrapper.unmount() + }) +}) diff --git a/apps/desktop/tsconfig.json b/apps/desktop/tsconfig.json new file mode 100644 index 0000000..1624c96 --- /dev/null +++ b/apps/desktop/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "./.nuxt/tsconfig.json", + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "strict": false, + "types": [ + "vitest/globals" + ] + }, + "include": [ + ".nuxt/nuxt.d.ts", + "env.d.ts", + "**/*" + ] +} diff --git a/apps/desktop/vitest.config.ts b/apps/desktop/vitest.config.ts new file mode 100644 index 0000000..5a317a5 --- /dev/null +++ b/apps/desktop/vitest.config.ts @@ -0,0 +1,22 @@ +import { fileURLToPath, URL } from 'node:url' + +import vue from '@vitejs/plugin-vue' +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + '~': fileURLToPath(new URL('./src', import.meta.url)), + }, + }, + test: { + environment: 'jsdom', + globals: true, + setupFiles: ['./tests/setup.ts'], + coverage: { + reporter: ['text', 'html'], + }, + }, +}) diff --git a/server/tsconfig.json b/server/tsconfig.json deleted file mode 100644 index b9ed69c..0000000 --- a/server/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../.nuxt/tsconfig.server.json" -} diff --git a/src-tauri/src/thing_api.rs b/src-tauri/src/thing_api.rs deleted file mode 100644 index 0f22c12..0000000 --- a/src-tauri/src/thing_api.rs +++ /dev/null @@ -1,39 +0,0 @@ -use std::collections::HashMap; -use tauri_plugin_store::StoreExt; - -/// Sends a POST request to the WoWthing API with the provided form data and returns the response. -/// -/// ## Arguments -/// -/// * `form_data` - The form data to be sent in the request body. -/// -/// ## Returns -/// -/// The response from the WoWthing API. -#[tauri::command] -pub async fn submit_addon_data(app: tauri::AppHandle, file_path: &str) -> Result { - let store = app.store_builder(".settings.dat").build().unwrap(); - let api_key = store.get("api-key").expect("No API key found in settings."); - let contents = &std::fs::read_to_string(file_path).map_err(|e| e.to_string())?; - - let mut form_data = HashMap::new(); - form_data.insert("apiKey", api_key.as_str().unwrap()); - form_data.insert("luaFile", &contents); - - let client = reqwest::Client::new(); - let response = client - .post("https://wowthing.org/api/upload/") - .json(&form_data) - .header("User-Agent", "WoWthing Sync - Tauri") - .send() - .await - .unwrap(); - - match response.status() { - reqwest::StatusCode::OK => match response.text().await { - Ok(text) => Ok(format!("Sync completed: {:?}", text)), - Err(_) => Err(format!("There was an issue reading the response.")), - }, - other => Err(format!("Uh oh! Something unexpected happened: {:?}", other)), - } -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 1953908..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "./.nuxt/tsconfig.json", - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "strict": false - }, - "include": [ - ".nuxt/nuxt.d.ts", - "env.d.ts", - "**/*" - ] -}