From 94f22e70bac16dbb49d01303679d90de7c763895 Mon Sep 17 00:00:00 2001 From: Sasha Sorokin <10401817+Brawaru@users.noreply.github.com> Date: Sun, 8 Oct 2023 19:37:47 +0200 Subject: [PATCH] Enable TypeScript support This commit enables TypeScript support in Omorphia. It reconfigures Vite, adds two new TSConfig files as a replacement for the old JSConfig, adds TypeScript linting to ESLint configuration. Why? ==== TypeScript has became a standard in modern web development. In makes JavaScript a more type-safe language, makes code more maintaible and boosts effeciency by empowering development tools. What's included in this commit? =============================== TypeScript config files ----------------------- Old and plain JSConfig has been replaced with two TSConfigs: one designed for the code, and the other for the Vite configuration file. JavaScript support is still enabled, therefore TypeScript files can import JavaScript files as well, and vice versa. However, it is recommended that all the new files will be written in TypeScript, and old files are slowly converted over to TypeScript, so this option can be disabled in the future, making this a safe TypeScript only project. UMD output is replaced with CJS ------------------------------- UMD is an old format that tries to stay compatible with both the Node.js CJS, as well as Require.js. However, nowadays almost everyone is using a transpiler where this format won't be beneficial. To avoid it being a breaking change, it has been replaced with CJS. But in the future it's worth considering removing CJS output as well and making Omorphia an ESM module only, as it's designed only to be consumed by the Modrinth project, and all of these projects are already ESM-first. Minification is disabled ------------------------ Because this is a library, the responsibility of minifying its code lies solely on the consumer. Just like with CJS, all of the supported consumers of this library are already performing minification, so minifying this library beforehand is rather wasteful and harmful, as it negatively impacts debugging experience. More dependencies are now externalised -------------------------------------- Disabling UMD output allows more easily externalise dependencies based on the package.json file, making it way more approachable. Vue is now a peer dependency ---------------------------- Because this is a component library, Vue is not a direct dependency of this project. Instead, this library relies on consumer having a Vue as its dependency. `lib` is no longer included in package -------------------------------------- `lib` folder contains sources for the imports, but it's outside of export map and cannot be imported by the consumers. It is now excluded from the package to reduce the package size and installation time. Typings ------- Consumers of this library should also be able to benefit from the type safety. To achieve this, there's now a Vite plugin that generates type declarations that represent the project structure. To lesser the incompatibility with the consumers, some of the files were changed to import `index.js` from folders rather than folders themselves. While both will work for building, not doing this requires consumer to opt in to bundler module dependency, whereas if `index.js` is imported, the consumer can use both the normal ESM / Node16 module resolution, as well as the bundler module resolution. ESLint configuration changes ---------------------------- ESLint has been reconfigured to support TypeScript, and include rules recommended by the TypeScript ESLint package. In the future it would be good to review the rules and override rules for TypeScript files to disable rules that would conflict with ones from TypeScript ESLint. Entry file is now a TypeScript file ----------------------------------- To test the changes and begin the slow conversion, the entry point file is now a proper TypeScript file. SVG imports use `?component` parameter -------------------------------------- All components are now imported with `?component` URL parameter so that they have a proper file. By default, Vite imports all files like .svg as strings containing path to the file. Unfortunately, `vite-svg-loader` overrides this behaviour without overriding the Vite import type declaration, leading to incorrect types. However, it does expose a new parameter `?component`, which is properly typed and does the same thing you'd expect - export a Vue component, so most of the SVG imports have been converted to use this parameter. --- .eslintrc.json | 17 +- .npmrc | 1 + jsconfig.json | 9 - lib/components/index.js | 200 +++++------ lib/helpers/index.js | 6 +- lib/index.js | 15 - lib/index.ts | 16 + lib/vite-env.d.ts | 2 + package.json | 20 +- pnpm-lock.yaml | 582 ++++++++++++++++++++++++++++++- tsconfig.json | 26 ++ tsconfig.node.json | 10 + vite.config.js => vite.config.ts | 16 +- 13 files changed, 775 insertions(+), 145 deletions(-) delete mode 100644 jsconfig.json delete mode 100644 lib/index.js create mode 100644 lib/index.ts create mode 100644 lib/vite-env.d.ts create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json rename vite.config.js => vite.config.ts (74%) diff --git a/.eslintrc.json b/.eslintrc.json index be858c772..acbe35c2a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,4 +1,5 @@ { + "root": true, "env": { "browser": true, "es2021": true, @@ -6,15 +7,27 @@ }, "extends": [ "eslint:recommended", + "plugin:@typescript-eslint/recommended", "plugin:vue/vue3-recommended", "plugin:prettier/recommended", "prettier" ], "parserOptions": { + "parser": { + "js": "espree", + "jsx": "espree", + "cjs": "espree", + "mjs": "espree", + "ts": "@typescript-eslint/parser" + }, "ecmaVersion": "latest", - "sourceType": "module" + "sourceType": "module", + "extraFileExtensions": [".vue"], + "ecmaFeatures": { + "jsx": true + } }, - "plugins": ["vue"], + "plugins": ["@typescript-eslint", "vue"], "rules": { "no-console": "off", "vue/no-v-html": "off", diff --git a/.npmrc b/.npmrc index 34717ad78..fe10d3115 100644 --- a/.npmrc +++ b/.npmrc @@ -1,2 +1,3 @@ fetch-retry-mintimeout=20000 fetch-retry-maxtimeout=120000 +auto-install-peers=true diff --git a/jsconfig.json b/jsconfig.json deleted file mode 100644 index 686295e60..000000000 --- a/jsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - } - }, - "exclude": ["node_modules", "dist"] -} diff --git a/lib/components/index.js b/lib/components/index.js index 67f1a74c1..31c3916e0 100644 --- a/lib/components/index.js +++ b/lib/components/index.js @@ -36,105 +36,105 @@ export { default as NavItem } from './nav/NavItem.vue' export { default as NavRow } from './nav/NavRow.vue' export { default as NavStack } from './nav/NavStack.vue' -export { default as AlignLeftIcon } from '@/assets/icons/align-left.svg' -export { default as ArchiveIcon } from '@/assets/icons/archive.svg' -export { default as AsteriskIcon } from '@/assets/icons/asterisk.svg' -export { default as BellIcon } from '@/assets/icons/bell.svg' -export { default as BellRingIcon } from '@/assets/icons/bell-ring.svg' -export { default as BookIcon } from '@/assets/icons/book.svg' -export { default as BoxIcon } from '@/assets/icons/box.svg' -export { default as CalendarIcon } from '@/assets/icons/calendar.svg' -export { default as ChartIcon } from '@/assets/icons/chart.svg' -export { default as CheckIcon } from '@/assets/icons/check.svg' -export { default as CheckCircleIcon } from '@/assets/icons/check-circle.svg' -export { default as ChevronLeftIcon } from '@/assets/icons/chevron-left.svg' -export { default as ChevronRightIcon } from '@/assets/icons/chevron-right.svg' -export { default as ClearIcon } from '@/assets/icons/clear.svg' -export { default as ClientIcon } from '@/assets/icons/client.svg' -export { default as ClipboardCopyIcon } from '@/assets/icons/clipboard-copy.svg' -export { default as CodeIcon } from '@/assets/icons/code.svg' -export { default as CoinsIcon } from '@/assets/icons/coins.svg' -export { default as ContractIcon } from '@/assets/icons/contract.svg' -export { default as CopyrightIcon } from '@/assets/icons/copyright.svg' -export { default as CurrencyIcon } from '@/assets/icons/currency.svg' -export { default as DashboardIcon } from '@/assets/icons/dashboard.svg' -export { default as DownloadIcon } from '@/assets/icons/download.svg' -export { default as DropdownIcon } from '@/assets/icons/dropdown.svg' -export { default as EditIcon } from '@/assets/icons/edit.svg' -export { default as ExitIcon } from '@/assets/icons/x.svg' -export { default as ExpandIcon } from '@/assets/icons/expand.svg' -export { default as ExternalIcon } from '@/assets/icons/external.svg' -export { default as EyeIcon } from '@/assets/icons/eye.svg' -export { default as EyeOffIcon } from '@/assets/icons/eye-off.svg' -export { default as FileIcon } from '@/assets/icons/file.svg' -export { default as FileTextIcon } from '@/assets/icons/file-text.svg' -export { default as FilterIcon } from '@/assets/icons/filter.svg' -export { default as FolderOpenIcon } from '@/assets/icons/folder-open.svg' -export { default as FolderSearchIcon } from '@/assets/icons/folder-search.svg' -export { default as GapIcon } from '@/assets/icons/gap.svg' -export { default as GitHubIcon } from '@/assets/icons/github.svg' -export { default as GlobeIcon } from '@/assets/icons/globe.svg' -export { default as GridIcon } from '@/assets/icons/grid.svg' -export { default as HamburgerIcon } from '@/assets/icons/hamburger.svg' -export { default as HammerIcon } from '@/assets/icons/hammer.svg' -export { default as HashIcon } from '@/assets/icons/hash.svg' -export { default as HeartIcon } from '@/assets/icons/heart.svg' -export { default as HeartHandshakeIcon } from '@/assets/icons/heart-handshake.svg' -export { default as HistoryIcon } from '@/assets/icons/history.svg' -export { default as HomeIcon } from '@/assets/icons/home.svg' -export { default as ImageIcon } from '@/assets/icons/image.svg' -export { default as InfoIcon } from '@/assets/icons/info.svg' -export { default as IssuesIcon } from '@/assets/icons/issues.svg' -export { default as LeftArrowIcon } from '@/assets/icons/left-arrow.svg' -export { default as LibraryIcon } from '@/assets/icons/library.svg' -export { default as LightBulbIcon } from '@/assets/icons/light-bulb.svg' -export { default as LinkIcon } from '@/assets/icons/link.svg' -export { default as ListIcon } from '@/assets/icons/list.svg' -export { default as LockIcon } from '@/assets/icons/lock.svg' -export { default as LogInIcon } from '@/assets/icons/log-in.svg' -export { default as LogOutIcon } from '@/assets/icons/log-out.svg' -export { default as MoonIcon } from '@/assets/icons/moon.svg' -export { default as OmorphiaIcon } from '@/assets/icons/omorphia.svg' -export { default as PaintBrushIcon } from '@/assets/icons/paintbrush.svg' -export { default as PlayIcon } from '@/assets/icons/play.svg' -export { default as PlusIcon } from '@/assets/icons/plus.svg' -export { default as ReportIcon } from '@/assets/icons/report.svg' -export { default as RightArrowIcon } from '@/assets/icons/right-arrow.svg' -export { default as SaveIcon } from '@/assets/icons/save.svg' -export { default as ScaleIcon } from '@/assets/icons/scale.svg' -export { default as SearchIcon } from '@/assets/icons/search.svg' -export { default as SendIcon } from '@/assets/icons/send.svg' -export { default as ServerIcon } from '@/assets/icons/server.svg' -export { default as SettingsIcon } from '@/assets/icons/settings.svg' -export { default as ShieldIcon } from '@/assets/icons/shield.svg' -export { default as SlashIcon } from '@/assets/icons/slash.svg' -export { default as StarIcon } from '@/assets/icons/star.svg' -export { default as StopCircleIcon } from '@/assets/icons/stop-circle.svg' -export { default as SunIcon } from '@/assets/icons/sun.svg' -export { default as SunriseIcon } from '@/assets/icons/sunrise.svg' -export { default as TagIcon } from '@/assets/icons/tag.svg' -export { default as TagsIcon } from '@/assets/icons/tags.svg' -export { default as TerminalSquareIcon } from '@/assets/icons/terminal-square.svg' -export { default as TransferIcon } from '@/assets/icons/transfer.svg' -export { default as TrashIcon } from '@/assets/icons/trash.svg' -export { default as UndoIcon } from '@/assets/icons/undo.svg' -export { default as UnknownIcon } from '@/assets/icons/unknown.svg' -export { default as UnknownDonationIcon } from '@/assets/icons/unknown-donation.svg' -export { default as UpdatedIcon } from '@/assets/icons/updated.svg' -export { default as UploadIcon } from '@/assets/icons/upload.svg' -export { default as UserIcon } from '@/assets/icons/user.svg' -export { default as UserPlusIcon } from '@/assets/icons/user-plus.svg' -export { default as UserXIcon } from '@/assets/icons/user-x.svg' -export { default as UsersIcon } from '@/assets/icons/users.svg' -export { default as VersionIcon } from '@/assets/icons/version.svg' -export { default as WikiIcon } from '@/assets/icons/wiki.svg' -export { default as XIcon } from '@/assets/icons/x.svg' -export { default as XCircleIcon } from '@/assets/icons/x-circle.svg' -export { default as MailIcon } from '@/assets/icons/mail.svg' -export { default as ShareIcon } from '@/assets/icons/share.svg' +export { default as AlignLeftIcon } from '@/assets/icons/align-left.svg?component' +export { default as ArchiveIcon } from '@/assets/icons/archive.svg?component' +export { default as AsteriskIcon } from '@/assets/icons/asterisk.svg?component' +export { default as BellIcon } from '@/assets/icons/bell.svg?component' +export { default as BellRingIcon } from '@/assets/icons/bell-ring.svg?component' +export { default as BookIcon } from '@/assets/icons/book.svg?component' +export { default as BoxIcon } from '@/assets/icons/box.svg?component' +export { default as CalendarIcon } from '@/assets/icons/calendar.svg?component' +export { default as ChartIcon } from '@/assets/icons/chart.svg?component' +export { default as CheckIcon } from '@/assets/icons/check.svg?component' +export { default as CheckCircleIcon } from '@/assets/icons/check-circle.svg?component' +export { default as ChevronLeftIcon } from '@/assets/icons/chevron-left.svg?component' +export { default as ChevronRightIcon } from '@/assets/icons/chevron-right.svg?component' +export { default as ClearIcon } from '@/assets/icons/clear.svg?component' +export { default as ClientIcon } from '@/assets/icons/client.svg?component' +export { default as ClipboardCopyIcon } from '@/assets/icons/clipboard-copy.svg?component' +export { default as CodeIcon } from '@/assets/icons/code.svg?component' +export { default as CoinsIcon } from '@/assets/icons/coins.svg?component' +export { default as ContractIcon } from '@/assets/icons/contract.svg?component' +export { default as CopyrightIcon } from '@/assets/icons/copyright.svg?component' +export { default as CurrencyIcon } from '@/assets/icons/currency.svg?component' +export { default as DashboardIcon } from '@/assets/icons/dashboard.svg?component' +export { default as DownloadIcon } from '@/assets/icons/download.svg?component' +export { default as DropdownIcon } from '@/assets/icons/dropdown.svg?component' +export { default as EditIcon } from '@/assets/icons/edit.svg?component' +export { default as ExitIcon } from '@/assets/icons/x.svg?component' +export { default as ExpandIcon } from '@/assets/icons/expand.svg?component' +export { default as ExternalIcon } from '@/assets/icons/external.svg?component' +export { default as EyeIcon } from '@/assets/icons/eye.svg?component' +export { default as EyeOffIcon } from '@/assets/icons/eye-off.svg?component' +export { default as FileIcon } from '@/assets/icons/file.svg?component' +export { default as FileTextIcon } from '@/assets/icons/file-text.svg?component' +export { default as FilterIcon } from '@/assets/icons/filter.svg?component' +export { default as FolderOpenIcon } from '@/assets/icons/folder-open.svg?component' +export { default as FolderSearchIcon } from '@/assets/icons/folder-search.svg?component' +export { default as GapIcon } from '@/assets/icons/gap.svg?component' +export { default as GitHubIcon } from '@/assets/icons/github.svg?component' +export { default as GlobeIcon } from '@/assets/icons/globe.svg?component' +export { default as GridIcon } from '@/assets/icons/grid.svg?component' +export { default as HamburgerIcon } from '@/assets/icons/hamburger.svg?component' +export { default as HammerIcon } from '@/assets/icons/hammer.svg?component' +export { default as HashIcon } from '@/assets/icons/hash.svg?component' +export { default as HeartIcon } from '@/assets/icons/heart.svg?component' +export { default as HeartHandshakeIcon } from '@/assets/icons/heart-handshake.svg?component' +export { default as HistoryIcon } from '@/assets/icons/history.svg?component' +export { default as HomeIcon } from '@/assets/icons/home.svg?component' +export { default as ImageIcon } from '@/assets/icons/image.svg?component' +export { default as InfoIcon } from '@/assets/icons/info.svg?component' +export { default as IssuesIcon } from '@/assets/icons/issues.svg?component' +export { default as LeftArrowIcon } from '@/assets/icons/left-arrow.svg?component' +export { default as LibraryIcon } from '@/assets/icons/library.svg?component' +export { default as LightBulbIcon } from '@/assets/icons/light-bulb.svg?component' +export { default as LinkIcon } from '@/assets/icons/link.svg?component' +export { default as ListIcon } from '@/assets/icons/list.svg?component' +export { default as LockIcon } from '@/assets/icons/lock.svg?component' +export { default as LogInIcon } from '@/assets/icons/log-in.svg?component' +export { default as LogOutIcon } from '@/assets/icons/log-out.svg?component' +export { default as MoonIcon } from '@/assets/icons/moon.svg?component' +export { default as OmorphiaIcon } from '@/assets/icons/omorphia.svg?component' +export { default as PaintBrushIcon } from '@/assets/icons/paintbrush.svg?component' +export { default as PlayIcon } from '@/assets/icons/play.svg?component' +export { default as PlusIcon } from '@/assets/icons/plus.svg?component' +export { default as ReportIcon } from '@/assets/icons/report.svg?component' +export { default as RightArrowIcon } from '@/assets/icons/right-arrow.svg?component' +export { default as SaveIcon } from '@/assets/icons/save.svg?component' +export { default as ScaleIcon } from '@/assets/icons/scale.svg?component' +export { default as SearchIcon } from '@/assets/icons/search.svg?component' +export { default as SendIcon } from '@/assets/icons/send.svg?component' +export { default as ServerIcon } from '@/assets/icons/server.svg?component' +export { default as SettingsIcon } from '@/assets/icons/settings.svg?component' +export { default as ShieldIcon } from '@/assets/icons/shield.svg?component' +export { default as SlashIcon } from '@/assets/icons/slash.svg?component' +export { default as StarIcon } from '@/assets/icons/star.svg?component' +export { default as StopCircleIcon } from '@/assets/icons/stop-circle.svg?component' +export { default as SunIcon } from '@/assets/icons/sun.svg?component' +export { default as SunriseIcon } from '@/assets/icons/sunrise.svg?component' +export { default as TagIcon } from '@/assets/icons/tag.svg?component' +export { default as TagsIcon } from '@/assets/icons/tags.svg?component' +export { default as TerminalSquareIcon } from '@/assets/icons/terminal-square.svg?component' +export { default as TransferIcon } from '@/assets/icons/transfer.svg?component' +export { default as TrashIcon } from '@/assets/icons/trash.svg?component' +export { default as UndoIcon } from '@/assets/icons/undo.svg?component' +export { default as UnknownIcon } from '@/assets/icons/unknown.svg?component' +export { default as UnknownDonationIcon } from '@/assets/icons/unknown-donation.svg?component' +export { default as UpdatedIcon } from '@/assets/icons/updated.svg?component' +export { default as UploadIcon } from '@/assets/icons/upload.svg?component' +export { default as UserIcon } from '@/assets/icons/user.svg?component' +export { default as UserPlusIcon } from '@/assets/icons/user-plus.svg?component' +export { default as UserXIcon } from '@/assets/icons/user-x.svg?component' +export { default as UsersIcon } from '@/assets/icons/users.svg?component' +export { default as VersionIcon } from '@/assets/icons/version.svg?component' +export { default as WikiIcon } from '@/assets/icons/wiki.svg?component' +export { default as XIcon } from '@/assets/icons/x.svg?component' +export { default as XCircleIcon } from '@/assets/icons/x-circle.svg?component' +export { default as MailIcon } from '@/assets/icons/mail.svg?component' +export { default as ShareIcon } from '@/assets/icons/share.svg?component' -export { default as MastodonIcon } from '@/assets/external/mastodon.svg' -export { default as RedditIcon } from '@/assets/external/reddit.svg' -export { default as TwitterIcon } from '@/assets/external/twitter.svg' +export { default as MastodonIcon } from '@/assets/external/mastodon.svg?component' +export { default as RedditIcon } from '@/assets/external/reddit.svg?component' +export { default as TwitterIcon } from '@/assets/external/twitter.svg?component' -export { default as ModrinthIcon } from '@/assets/branding/logo.svg' +export { default as ModrinthIcon } from '@/assets/branding/logo.svg?component' diff --git a/lib/helpers/index.js b/lib/helpers/index.js index 0e4b90e76..1ecc93168 100644 --- a/lib/helpers/index.js +++ b/lib/helpers/index.js @@ -1,3 +1,3 @@ -export * from './highlight' -export * from './parse' -export * from './utils' +export * from './highlight.js' +export * from './parse.js' +export * from './utils.js' diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 52cf8c3a2..000000000 --- a/lib/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as components from './components' -import FloatingVue from 'floating-vue' - -function install(app) { - for (const key in components) { - app.component(key, components[key]) - } - app.use(FloatingVue) -} - -export default { install } -export * from './components' -export * from './helpers' - -import './assets/omorphia.scss' diff --git a/lib/index.ts b/lib/index.ts new file mode 100644 index 000000000..450660b8a --- /dev/null +++ b/lib/index.ts @@ -0,0 +1,16 @@ +import * as components from './components/index.js' +import FloatingVue from 'floating-vue' +import { Plugin } from 'vue' + +const plugin: Plugin = (app) => { + for (const key in components) { + app.component(key, components[key as keyof typeof components]) + } + app.use(FloatingVue) +} + +export default plugin +export * from './components/index.js' +export * from './helpers/index.js' + +import './assets/omorphia.scss' diff --git a/lib/vite-env.d.ts b/lib/vite-env.d.ts new file mode 100644 index 000000000..8cee15171 --- /dev/null +++ b/lib/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/package.json b/package.json index bd790694d..fcb830a3a 100644 --- a/package.json +++ b/package.json @@ -3,20 +3,20 @@ "type": "module", "version": "0.4.40", "files": [ - "dist", - "lib" + "dist" ], "main": "./dist/omorphia.umd.cjs", "module": "./dist/omorphia.js", "exports": { ".": { + "types": "./dist/index.d.ts", "import": "./dist/omorphia.js", - "require": "./dist/omorphia.umd.cjs" + "require": "./dist/omorphia.cjs" }, "./dist/style.css": "./dist/style.css" }, "scripts": { - "build": "vite build", + "build": "vue-tsc && vite build", "lint:js": "eslint --ext .js,.vue,.ts,.jsx,.tsx,.html,.vue .", "lint": "pnpm run lint:js && prettier --check .", "fix": "eslint --fix --ext .js,.vue,.ts,.jsx,.tsx,.html,.vue . && prettier --write .", @@ -31,13 +31,14 @@ "highlight.js": "^11.8.0", "markdown-it": "^13.0.1", "qrcode.vue": "^3.4.0", - "vue": "^3.3.4", "vue-chartjs": "^5.2.0", "vue-router": "^4.2.1", "vue-select": "^4.0.0-beta.6", "xss": "^1.0.14" }, "devDependencies": { + "@typescript-eslint/eslint-plugin": "^6.7.4", + "@typescript-eslint/parser": "^6.7.4", "@vitejs/plugin-vue": "^4.2.3", "eslint": "^8.41.0", "eslint-config-prettier": "^8.8.0", @@ -46,12 +47,19 @@ "postcss": "^8.4.24", "postcss-prefix-selector": "^1.16.0", "prettier": "^2.8.8", + "rollup-plugin-node-externals": "^6.1.2", "sass": "^1.62.1", "sass-loader": "^13.3.1", + "typescript": "^5.2.2", "vite": "^4.3.9", + "vite-plugin-dts": "^3.6.0", "vite-plugin-eslint": "^1.8.1", "vite-svg-loader": "^4.0.0", - "vitepress": "^1.0.0-beta.1" + "vitepress": "^1.0.0-beta.1", + "vue-tsc": "^1.8.16" + }, + "peerDependencies": { + "vue": "^3.3.4" }, "packageManager": "pnpm@8.5.1" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0d92d0767..0db35ca51 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,6 +36,12 @@ dependencies: version: 1.0.14 devDependencies: + '@typescript-eslint/eslint-plugin': + specifier: ^6.7.4 + version: 6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.41.0)(typescript@5.2.2) + '@typescript-eslint/parser': + specifier: ^6.7.4 + version: 6.7.4(eslint@8.41.0)(typescript@5.2.2) '@vitejs/plugin-vue': specifier: ^4.2.3 version: 4.2.3(vite@4.3.9)(vue@3.3.4) @@ -60,15 +66,24 @@ devDependencies: prettier: specifier: ^2.8.8 version: 2.8.8 + rollup-plugin-node-externals: + specifier: ^6.1.2 + version: 6.1.2(rollup@3.23.0) sass: specifier: ^1.62.1 version: 1.62.1 sass-loader: specifier: ^13.3.1 version: 13.3.1(sass@1.62.1)(webpack@5.84.1) + typescript: + specifier: ^5.2.2 + version: 5.2.2 vite: specifier: ^4.3.9 version: 4.3.9(sass@1.62.1) + vite-plugin-dts: + specifier: ^3.6.0 + version: 3.6.0(rollup@3.23.0)(typescript@5.2.2)(vite@4.3.9) vite-plugin-eslint: specifier: ^1.8.1 version: 1.8.1(eslint@8.41.0)(vite@4.3.9) @@ -78,6 +93,9 @@ devDependencies: vitepress: specifier: ^1.0.0-beta.1 version: 1.0.0-beta.1(@algolia/client-search@4.17.1)(sass@1.62.1) + vue-tsc: + specifier: ^1.8.16 + version: 1.8.16(typescript@5.2.2) packages: @@ -562,6 +580,49 @@ packages: resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==} dev: false + /@microsoft/api-extractor-model@7.28.2: + resolution: {integrity: sha512-vkojrM2fo3q4n4oPh4uUZdjJ2DxQ2+RnDQL/xhTWSRUNPF6P4QyrvY357HBxbnltKcYu+nNNolVqc6TIGQ73Ig==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.61.0 + transitivePeerDependencies: + - '@types/node' + dev: true + + /@microsoft/api-extractor@7.38.0: + resolution: {integrity: sha512-e1LhZYnfw+JEebuY2bzhw0imDCl1nwjSThTrQqBXl40hrVo6xm3j/1EpUr89QyzgjqmAwek2ZkIVZbrhaR+cqg==} + hasBin: true + dependencies: + '@microsoft/api-extractor-model': 7.28.2 + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.61.0 + '@rushstack/rig-package': 0.5.1 + '@rushstack/ts-command-line': 4.16.1 + colors: 1.2.5 + lodash: 4.17.21 + resolve: 1.22.6 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.0.4 + transitivePeerDependencies: + - '@types/node' + dev: true + + /@microsoft/tsdoc-config@0.16.2: + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + dev: true + + /@microsoft/tsdoc@0.14.2: + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + dev: true + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -591,11 +652,63 @@ packages: picomatch: 2.3.1 dev: true + /@rollup/pluginutils@5.0.5(rollup@3.23.0): + resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.1 + estree-walker: 2.0.2 + picomatch: 2.3.1 + rollup: 3.23.0 + dev: true + + /@rushstack/node-core-library@3.61.0: + resolution: {integrity: sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + colors: 1.2.5 + fs-extra: 7.0.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.6 + semver: 7.5.4 + z-schema: 5.0.5 + dev: true + + /@rushstack/rig-package@0.5.1: + resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==} + dependencies: + resolve: 1.22.6 + strip-json-comments: 3.1.1 + dev: true + + /@rushstack/ts-command-line@4.16.1: + resolution: {integrity: sha512-+OCsD553GYVLEmz12yiFjMOzuPeCiZ3f8wTiFHL30ZVXexTyPmgjwXEhg2K2P0a2lVf+8YBy7WtPoflB2Fp8/A==} + dependencies: + '@types/argparse': 1.0.38 + argparse: 1.0.10 + colors: 1.2.5 + string-argv: 0.3.2 + dev: true + /@trysound/sax@0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} dev: true + /@types/argparse@1.0.38: + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + dev: true + /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: @@ -622,10 +735,145 @@ packages: resolution: {integrity: sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==} dev: true + /@types/semver@7.5.3: + resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} + dev: true + /@types/web-bluetooth@0.0.17: resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==} dev: true + /@typescript-eslint/eslint-plugin@6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.41.0)(typescript@5.2.2): + resolution: {integrity: sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.5.1 + '@typescript-eslint/parser': 6.7.4(eslint@8.41.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/type-utils': 6.7.4(eslint@8.41.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.4(eslint@8.41.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.4 + debug: 4.3.4 + eslint: 8.41.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.7.4(eslint@8.41.0)(typescript@5.2.2): + resolution: {integrity: sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.4 + debug: 4.3.4 + eslint: 8.41.0 + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@6.7.4: + resolution: {integrity: sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/visitor-keys': 6.7.4 + dev: true + + /@typescript-eslint/type-utils@6.7.4(eslint@8.41.0)(typescript@5.2.2): + resolution: {integrity: sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.4(eslint@8.41.0)(typescript@5.2.2) + debug: 4.3.4 + eslint: 8.41.0 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@6.7.4: + resolution: {integrity: sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@6.7.4(typescript@5.2.2): + resolution: {integrity: sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/visitor-keys': 6.7.4 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@6.7.4(eslint@8.41.0)(typescript@5.2.2): + resolution: {integrity: sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.3 + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) + eslint: 8.41.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@6.7.4: + resolution: {integrity: sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.7.4 + eslint-visitor-keys: 3.4.1 + dev: true + /@vitejs/plugin-vue@4.2.3(vite@4.3.9)(vue@3.3.4): resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -637,6 +885,24 @@ packages: vue: 3.3.4 dev: true + /@volar/language-core@1.10.3: + resolution: {integrity: sha512-7Qgwu9bWUHN+cLrOkCbIVBkL+RVPREhvY07wY89dGxi4mY9mQCsUVRRp64F61lX7Nc27meMnvy0sWlzY0x6oQQ==} + dependencies: + '@volar/source-map': 1.10.3 + dev: true + + /@volar/source-map@1.10.3: + resolution: {integrity: sha512-QE9nwK3xsdBQGongHnC9SCR0itx7xUKQFsUDn5HbZY3pHpyXxdY1hSBG0eh9mE+aTKoM4KlqMvrb+19Tv9vS1Q==} + dependencies: + muggle-string: 0.3.1 + dev: true + + /@volar/typescript@1.10.3: + resolution: {integrity: sha512-n0ar6xGYpRoSvgGMetm/JXP0QAXx+NOUvxCaWCfCjiFivQRSLJeydYDijhoGBUl5KSKosqq9In5L3e/m2TqTcQ==} + dependencies: + '@volar/language-core': 1.10.3 + dev: true + /@vue/compiler-core@3.3.4: resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} dependencies: @@ -674,6 +940,25 @@ packages: /@vue/devtools-api@6.5.0: resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} + /@vue/language-core@1.8.16(typescript@5.2.2): + resolution: {integrity: sha512-IAONyjgR3XImwgrtyQ7CCJlSXTlLesXG6/LpPjOBaXFiwknmGf1yDAXGa9fVH0lRplcnvOA7HNDI92OwWBi9qg==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@volar/language-core': 1.10.3 + '@volar/source-map': 1.10.3 + '@vue/compiler-dom': 3.3.4 + '@vue/reactivity': 3.3.4 + '@vue/shared': 3.3.4 + minimatch: 9.0.3 + muggle-string: 0.3.1 + typescript: 5.2.2 + vue-template-compiler: 2.7.14 + dev: true + /@vue/reactivity-transform@3.3.4: resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} dependencies: @@ -713,6 +998,15 @@ packages: /@vue/shared@3.3.4: resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} + /@vue/typescript@1.8.16(typescript@5.2.2): + resolution: {integrity: sha512-ywbY4bS4YJw8gYyPpOhwyutqzl0lqkYI7l3waZkOcQG4ZYgiu6KyHZc3aagEbH8saFQTQxi5+I3ATUN5KwfvNw==} + dependencies: + '@volar/typescript': 1.10.3 + '@vue/language-core': 1.8.16(typescript@5.2.2) + transitivePeerDependencies: + - typescript + dev: true + /@vueuse/core@10.1.2(vue@3.3.4): resolution: {integrity: sha512-roNn8WuerI56A5uiTyF/TEYX0Y+VKlhZAF94unUfdhbDUI+NfwQMn4FUnUscIRUhv3344qvAghopU4bzLPNFlA==} dependencies: @@ -984,9 +1278,20 @@ packages: picomatch: 2.3.1 dev: true + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -1011,6 +1316,12 @@ packages: concat-map: 0.0.1 dev: true + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -1088,6 +1399,11 @@ packages: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true + /colors@1.2.5: + resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} + engines: {node: '>=0.1.90'} + dev: true + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -1096,6 +1412,13 @@ packages: engines: {node: '>= 10'} dev: true + /commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + requiresBuild: true + dev: true + optional: true + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true @@ -1164,6 +1487,10 @@ packages: resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} dev: false + /de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + dev: true + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -1180,6 +1507,13 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -1447,6 +1781,17 @@ packages: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true @@ -1511,6 +1856,15 @@ packages: tabbable: 6.1.2 dev: true + /fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -1559,6 +1913,18 @@ packages: type-fest: 0.20.2 dev: true + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true @@ -1572,6 +1938,16 @@ packages: engines: {node: '>=8'} dev: true + /has@1.0.4: + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} + engines: {node: '>= 0.4.0'} + dev: true + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + /highlight.js@11.8.0: resolution: {integrity: sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==} engines: {node: '>=12.0.0'} @@ -1594,6 +1970,11 @@ packages: resolve-from: 4.0.0 dev: true + /import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + dev: true + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -1617,6 +1998,12 @@ packages: binary-extensions: 2.2.0 dev: true + /is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + dependencies: + has: 1.0.4 + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1652,6 +2039,10 @@ packages: supports-color: 8.1.1 dev: true + /jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + dev: true + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -1675,11 +2066,21 @@ packages: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: true + /jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + /klona@2.0.6: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} dev: true + /kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + dev: true + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -1706,6 +2107,14 @@ packages: p-locate: 5.0.0 dev: true + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: true + + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: true + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true @@ -1758,6 +2167,19 @@ packages: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -1776,6 +2198,13 @@ packages: brace-expansion: 1.1.11 dev: true + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minisearch@6.1.0: resolution: {integrity: sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==} dev: true @@ -1784,6 +2213,10 @@ packages: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true + /muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + dev: true + /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1866,6 +2299,15 @@ packages: engines: {node: '>=8'} dev: true + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -1955,6 +2397,22 @@ packages: engines: {node: '>=4'} dev: true + /resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + dev: true + + /resolve@1.22.6: + resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -1967,6 +2425,15 @@ packages: glob: 7.2.3 dev: true + /rollup-plugin-node-externals@6.1.2(rollup@3.23.0): + resolution: {integrity: sha512-2TWan0u0/zHcgPrKpIPgKSY8OMqwDAYD380I0hxx7iUQw8mrN34DWwG9sQUMEo5Yy4xd6/5QEAySYgiKN9fdBQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + rollup: ^3.0.0 || ^4.0.0 + dependencies: + rollup: 3.23.0 + dev: true + /rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} @@ -2045,6 +2512,14 @@ packages: lru-cache: 6.0.0 dev: true + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + /serialize-javascript@6.0.1: resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: @@ -2072,6 +2547,11 @@ packages: vscode-textmate: 8.0.0 dev: true + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -2088,6 +2568,15 @@ packages: engines: {node: '>=0.10.0'} dev: true + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + dev: true + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2114,6 +2603,11 @@ packages: has-flag: 4.0.0 dev: true + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + /svgo@3.0.2: resolution: {integrity: sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==} engines: {node: '>=14.0.0'} @@ -2186,6 +2680,15 @@ packages: is-number: 7.0.0 dev: true + /ts-api-utils@1.0.3(typescript@5.2.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.2.2 + dev: true + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -2198,10 +2701,27 @@ packages: engines: {node: '>=10'} dev: true + /typescript@5.0.4: + resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} + engines: {node: '>=12.20'} + hasBin: true + dev: true + + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + /uc.micro@1.0.6: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} dev: false + /universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true + /update-browserslist-db@1.0.11(browserslist@4.21.6): resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true @@ -2223,6 +2743,35 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true + /validator@13.11.0: + resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} + engines: {node: '>= 0.10'} + dev: true + + /vite-plugin-dts@3.6.0(rollup@3.23.0)(typescript@5.2.2)(vite@4.3.9): + resolution: {integrity: sha512-doxhDRFJCZD2sGjIp4V800nm8Y19GvmwckjG5vYPuiqJ7OBjc9NlW1Vp9Gkyh2aXlUs1jTDRH/lxWfcsPLOQHg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + typescript: '*' + vite: '*' + peerDependenciesMeta: + vite: + optional: true + dependencies: + '@microsoft/api-extractor': 7.38.0 + '@rollup/pluginutils': 5.0.5(rollup@3.23.0) + '@vue/language-core': 1.8.16(typescript@5.2.2) + debug: 4.3.4 + kolorist: 1.8.0 + typescript: 5.2.2 + vite: 4.3.9(sass@1.62.1) + vue-tsc: 1.8.16(typescript@5.2.2) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + dev: true + /vite-plugin-eslint@1.8.1(eslint@8.41.0)(vite@4.3.9): resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==} peerDependencies: @@ -2364,7 +2913,7 @@ packages: espree: 9.5.2 esquery: 1.5.0 lodash: 4.17.21 - semver: 7.5.1 + semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true @@ -2394,6 +2943,25 @@ packages: vue: 3.3.4 dev: false + /vue-template-compiler@2.7.14: + resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==} + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + dev: true + + /vue-tsc@1.8.16(typescript@5.2.2): + resolution: {integrity: sha512-PT2xOJNl2qkmmp8eHf4qapfzvcRTQLxQQhQAzY7sMjv0JKsud9vo+aotklh/VzM9ZfaSo1UlDGZy6zSSRc+8wA==} + hasBin: true + peerDependencies: + typescript: '*' + dependencies: + '@vue/language-core': 1.8.16(typescript@5.2.2) + '@vue/typescript': 1.8.16(typescript@5.2.2) + semver: 7.5.4 + typescript: 5.2.2 + dev: true + /vue@3.3.4: resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} dependencies: @@ -2495,3 +3063,15 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + + /z-schema@5.0.5: + resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + validator: 13.11.0 + optionalDependencies: + commander: 9.5.0 + dev: true diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..517d8284e --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "ES2022", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + "allowJs": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["lib/**/*.js", "lib/**/*.ts", "lib/**/*.d.ts", "lib/**/*.tsx", "lib/**/*.vue"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 000000000..42872c59f --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.js b/vite.config.ts similarity index 74% rename from vite.config.js rename to vite.config.ts index 52e06c2f4..8359a1abb 100644 --- a/vite.config.js +++ b/vite.config.ts @@ -3,24 +3,21 @@ import { defineConfig } from 'vite' import svgLoader from 'vite-svg-loader' import eslintPlugin from 'vite-plugin-eslint' import vue from '@vitejs/plugin-vue' +import dts from 'vite-plugin-dts' +import nodeExternals from 'rollup-plugin-node-externals' export default defineConfig({ build: { + minify: false, lib: { - entry: resolve(__dirname, 'lib/index.js'), + entry: resolve(__dirname, 'lib/index.ts'), name: 'Omorphia', fileName: 'omorphia', - }, - rollupOptions: { - external: ['vue'], - output: { - globals: { - vue: 'Vue', - }, - }, + formats: ['es', 'cjs'], }, }, plugins: [ + { enforce: 'pre', ...nodeExternals() }, vue(), svgLoader({ svgoConfig: { @@ -37,6 +34,7 @@ export default defineConfig({ }, }), eslintPlugin(), + dts(), ], resolve: { alias: {