-
-
Notifications
You must be signed in to change notification settings - Fork 174
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrate to Vue 3 with Vite #230
Labels
enhancement
New feature or request
Comments
undergroundwires
added a commit
that referenced
this issue
Aug 6, 2023
- Migrate `StatefulVue`: - Introduce `UseCollectionState` that replaces its behavior and acts as a shared state store. - Add more encapsulated, granular functions based on read or write access to state in CollectionState. - Some linting rules get activates due to new code-base compability to modern parses, fix linting errors. - Rename Dialog to ModalDialog as after refactoring, eslintvue/no-reserved-component-names does not allow name Dialog. - To comply with `vue/multi-word-component-names`, rename: - `Code` -> `CodeInstruction` - `Handle` -> `SliderHandle` - `Documentable` -> `DocumentableNode` - `Node` -> `NodeContent` - `INode` -> `INodeContent` - `Responsive` -> `SizeObserver` - Remove `vue-property-decorator` and `vue-class-component` dependencies. - Refactor `watch` with computed properties when possible for cleaner code. - Introduce `UseApplication` to reduce repeated code in new components that use `computed` more heavily than before. - Change TypeScript target to `es2017` to allow top level async calls for getting application context/state/instance to simplify the code by removing async calls. However, mocha (unit and integration) tests do not run with top level awaits, so a workaround is used.
undergroundwires
added a commit
that referenced
this issue
Aug 7, 2023
- Migrate `StatefulVue`: - Introduce `UseCollectionState` that replaces its behavior and acts as a shared state store. - Add more encapsulated, granular functions based on read or write access to state in CollectionState. - Some linting rules get activates due to new code-base compability to modern parses, fix linting errors. - Rename Dialog to ModalDialog as after refactoring, eslintvue/no-reserved-component-names does not allow name Dialog. - To comply with `vue/multi-word-component-names`, rename: - `Code` -> `CodeInstruction` - `Handle` -> `SliderHandle` - `Documentable` -> `DocumentableNode` - `Node` -> `NodeContent` - `INode` -> `INodeContent` - `Responsive` -> `SizeObserver` - Remove `vue-property-decorator` and `vue-class-component` dependencies. - Refactor `watch` with computed properties when possible for cleaner code. - Introduce `UseApplication` to reduce repeated code in new components that use `computed` more heavily than before. - Change TypeScript target to `es2017` to allow top level async calls for getting application context/state/instance to simplify the code by removing async calls. However, mocha (unit and integration) tests do not run with top level awaits, so a workaround is used.
undergroundwires
added a commit
that referenced
this issue
Aug 11, 2023
Introduce a brand new lightweight and efficient modal component. It is designed to be visually similar to the previous one to not introduce a change in feel of the application in a patch release, but behind the scenes it features: - Enhanced application speed and reduced bundle size. - New flexbox-driven layout, eliminating JS calculations. - Composition API ready for Vue 3.0 #230. Other changes: - Adopt idiomatic Vue via `v-modal` binding. - Add unit tests for both the modal and dialog. - Remove `vue-js-modal` dependency in favor of the new implementation. - Adjust modal shadow color to better match theme. - Add `@vue/test-utils` for unit testing.
undergroundwires
added a commit
that referenced
this issue
Aug 12, 2023
This commit introduces a new Vue component to handle tooltips. It acts as a wrapper for the `v-tooltip`. It enhances the maintainability, readability and portability of tooltips by enabling the direct inclusion of inline HTML in the tooltip components. It solves issues such as absence of linting or editor support and cumbersome string concatenation. It also provides an abstraction layer that simplifies the switching between different tooltip implementations, which would allow a smooth migration to Vue 3 (see #230).
undergroundwires
added a commit
that referenced
this issue
Aug 22, 2023
As part of transition to Vue 3.0 and Vite (#230), this commit facilitates the shift towards building rest of the application using Vite. By doing so, it eliminates reliance on outdated Electron building system that offered limited control, blocking desktop builds (#233). Changes include: - Introduce Vite with Vue 2.0 plugin for test execution. - Remove `mocha`, `chai` and other related dependencies. - Adjust test to Vitest syntax. - Revise and update `tests.md` to document the changes. - Add `@modyfi/vite-plugin-yaml` plugin to be able to use yaml file depended logic on test files, replacing previous webpack behavior. - Fix failing tests that are revealed by Vitest due to unhandled errors and lack of assertments. - Remove the test that depends on Vue CLI populating `process.env`.
undergroundwires
added a commit
that referenced
this issue
Aug 22, 2023
As part of transition to Vue 3.0 and Vite (#230), this commit facilitates the shift towards building rest of the application using Vite. By doing so, it eliminates reliance on outdated Electron building system that offered limited control, blocking desktop builds (#233). Changes include: - Introduce Vite with Vue 2.0 plugin for test execution. - Remove `mocha`, `chai` and other related dependencies. - Adjust test to Vitest syntax. - Revise and update `tests.md` to document the changes. - Add `@modyfi/vite-plugin-yaml` plugin to be able to use yaml file depended logic on test files, replacing previous webpack behavior. - Fix failing tests that are revealed by Vitest due to unhandled errors and lack of assertments. - Remove the test that depends on Vue CLI populating `process.env`.
undergroundwires
added a commit
that referenced
this issue
Aug 22, 2023
As part of transition to Vue 3.0 and Vite (#230), this commit facilitates the shift towards building rest of the application using Vite. By doing so, it eliminates reliance on outdated Electron building system that offered limited control, blocking desktop builds (#233). Changes include: - Introduce Vite with Vue 2.0 plugin for test execution. - Remove `mocha`, `chai` and other related dependencies. - Adjust test to Vitest syntax. - Revise and update `tests.md` to document the changes. - Add `@modyfi/vite-plugin-yaml` plugin to be able to use yaml file depended logic on test files, replacing previous webpack behavior. - Fix failing tests that are revealed by Vitest due to unhandled errors and lack of assertments. - Remove the test that depends on Vue CLI populating `process.env`. - Use `jsdom` for unit test environment, adding it to dependency to `package.json` as project now depends on it and it was not specified even though `package-lock.json` included it.
undergroundwires
added a commit
that referenced
this issue
Aug 23, 2023
The Vue ESLint plugin is not compatible with Vite and isn't provided in Vite's default template. By removing it, the codebase progresses toward the migration to Vue 3.0 and Vite (#230). Changes: - Directly execute `eslint` in the `npm run lint:eslint` command. - Fix previously undetected linting issues that weren't covered by Vue CLI's default configuration. - Updated various configuration files, reflecting the removal and lint fixes. - Remove unused `eslint-plugin-import` dependency that is already imported by `@vue/eslint-config-airbnb-with-typescript`. In `.eslintrc.cjs`: - Add `es2022` as environment in to simplify setting parser options and align with Vite starter configuration. - Remove useless tests override. - Move tests override in root `.eslintrc.cjs` to `tests/` for clarity, better organization, scalability and separation of concerns.
undergroundwires
added a commit
that referenced
this issue
Aug 23, 2023
This commit changes the web application's build, transpilation and minification process from Vue CLI to Vite. This shift paves the way for a full migration to Vite as the primary build tool (#230). Configuration changes: - `.vscode/extensions.json`: Update recommended plugins, replacing unmaintained ones with official recommendations. - Legacy browser support: - Use `@vitejs/plugin-legacy` to transpile for older browsers. - Remove `core-js` dependency and `babel.config.cjs` configuration as they're now handled by the legacy plugin. - Delete `@babel/preset-typescript` and `@babel/preset-typescript` dependencies as legacy plugin handles babel dependencies by default. - Add `terser` dependency that's used by the legacy plugin for minification, as per Vite's official documentation. - `tsconfig.json`: - Remove obsolete `webpack-env` types. - Add `"resolveJsonModule": true` to be able to read JSON files in right way. - Use correct casing as configuration values. - Simplify `lib` to align with Vite and Vue starter configuration. - Add `"skipLibCheck": true` as `npm run build` now runs `tsc` which fails on inconsistent typings inside `node_modules` due to npm's weak dependency resoultion. - PostCSS: - Add `autoprefixer` as dependency, no longer installed by Vue CLI. - Epxlicitly added `postcss` as dependency to anticipate potential peer dependency changes. - Remove related `@vue/cli` dependencies. - Remove `sass-loader` as Vite has native CSS preprocessing support. - Run integration tests with `jsdom` environment so `window` object can be used. Client-side changes: - Abstract build tool specific environment variable population. Environment variables were previously populated by Vue CLI and now by Vite but not having an abstraction caused issues. This abstraction solves build errors and allows easier future migrations and testing. - Change Vue CLI-specific `~@` aliases to `@` to be able to compile with Vite. - Update types in LiquorTree to satisfy `tsc`. - Remove Vue CLI-specific workaround from `src/presentation/main.ts`. Restructuring: - Move `public/` to `presentation/` to align with the layered structure, which was not possible with Vue CLI. - Move `index.html` to web root instead of having it inside `public/` to align with official recommended structure. - Move logic shared by both integration and unit tests to `tests/shared`. - Move logo creation script to `scripts/` and its npm command to include `build` to align with rest of the structure.
undergroundwires
added a commit
that referenced
this issue
Aug 23, 2023
This commit changes the web application's build, transpilation and minification process from Vue CLI to Vite. This shift paves the way for a full migration to Vite as the primary build tool (#230). Configuration changes: - `.vscode/extensions.json`: Update recommended plugins, replacing unmaintained ones with official recommendations. - Legacy browser support: - Use `@vitejs/plugin-legacy` to transpile for older browsers. - Remove `core-js` dependency and `babel.config.cjs` configuration as they're now handled by the legacy plugin. - Delete `@babel/preset-typescript` and `@babel/preset-typescript` dependencies as legacy plugin handles babel dependencies by default. - Add `terser` dependency that's used by the legacy plugin for minification, as per Vite's official documentation. - `tsconfig.json`: - Remove obsolete `webpack-env` types. - Add `"resolveJsonModule": true` to be able to read JSON files in right way. - Use correct casing as configuration values. - Simplify `lib` to align with Vite and Vue starter configuration. - Add `"skipLibCheck": true` as `npm run build` now runs `tsc` which fails on inconsistent typings inside `node_modules` due to npm's weak dependency resoultion. - PostCSS: - Add `autoprefixer` as dependency, no longer installed by Vue CLI. - Epxlicitly added `postcss` as dependency to anticipate potential peer dependency changes. - Remove related `@vue/cli` dependencies. - Remove `sass-loader` as Vite has native CSS preprocessing support. - Run integration tests with `jsdom` environment so `window` object can be used. Client-side changes: - Abstract build tool specific environment variable population. Environment variables were previously populated by Vue CLI and now by Vite but not having an abstraction caused issues. This abstraction solves build errors and allows easier future migrations and testing. - Change Vue CLI-specific `~@` aliases to `@` to be able to compile with Vite. - Update types in LiquorTree to satisfy `tsc`. - Remove Vue CLI-specific workaround from `src/presentation/main.ts`. Restructuring: - Move `public/` to `presentation/` to align with the layered structure, which was not possible with Vue CLI. - Move `index.html` to web root instead of having it inside `public/` to align with official recommended structure. - Move logic shared by both integration and unit tests to `tests/shared`. - Move logo creation script to `scripts/` and its npm command to include `build` to align with rest of the structure.
undergroundwires
added a commit
that referenced
this issue
Aug 24, 2023
This commit progresses the migration from Vue CLI to Vite (#230). TypeScript migration: - Convert JavaScript Cypress tests and configurations to TypeScript. - Introduce `tsconfig.json` for Cypress, following official recommendation. Test execution: - Use Cypress CLI to run the tests. - Rename Cypress commands to reflect official naming conventions. - Start Vue server prior to Cypress execution, using `start-server-and-test` package based on official documentation. - Remove dependency on Vue CLI plugin ((`@vue/cli-plugin-e2e-cypress`). Configuration standardization (based on Cypress docs): - Delete unused `plugins/` directory. - Move test (spec) files to to the root directory. - Add official ESLint plugin (`eslint-plugin-cypress`). Changes for importing `vite.config.ts` into `cypress.config.ts`: - Add TypeScript import assertations to files importing JSON files. - Use ESM friendly way instead of `__dirname` to solve `ReferenceError: __dirname is not defined in ES module scrope`. Other changes: - Simplify comments in placeholder files. - Create Cypress specific `.gitignore` for enhanced maintainability, clarity and scalability. - Remove redundant `vue.config.cjs`.
undergroundwires
added a commit
that referenced
this issue
Aug 24, 2023
- Switch from deprecated Vue CLI plugin to `electron-vite` (see nklayman/vue-cli-plugin-electron-builder#1982) - Update main/preload scripts to use `index.cjs` filenames to support `"type": "module"`, resolving crash issue (#233). This crash was related to Electron not supporting ESM (see electron/asar#249, electron/electron#21457). - This commit completes migration to Vite from Vue CLI (#230). Structure changes: - Introduce separate folders for Electron's main and preload processes. - Move TypeHelpers to `src/` to mark tit as accessible by the rest of the code. Config changes: - Make `vite.config.ts` reusable by Electron configuration. - On electron-builder, use `--publish` flag instead of `-p` for clarity. Tests: - Add log for preload script loading verification. - Implement runtime environment sanity checks. - Enhance logging in `check-desktop-runtime-errors`.
undergroundwires
added a commit
that referenced
this issue
Sep 9, 2023
Key highlights: - Written from scratch to cater specifically to privacy.sexy's needs and requirements. - The visual look mimics the previous component with minimal changes, but its internal code is completely rewritten. - Lays groundwork for future functionalities like the "expand all" button a flat view mode as discussed in #158. - Facilitates the transition to Vue 3 by omitting the Vue 2.0 dependent `liquour-tree` as part of #230. Improvements and features: - Caching for quicker node queries. - Gradual rendering of nodes that introduces a noticable boost in performance, particularly during search/filtering. - `TreeView` solely governs the check states of branch nodes. Changes: - Keyboard interactions now alter the background color to highlight the focused item. Previously, it was changing the color of the text. - Better state management with clear separation of concerns: - `TreeView` exclusively manages indeterminate states. - `TreeView` solely governs the check states of branch nodes. - Introduce transaction pattern to update state in batches to minimize amount of events handled. - Improve keyboard focus, style background instead of foreground. Use hover/touch color on keyboard focus. - `SelectableTree` has been removed. Instead, `TreeView` is now directly integrated with `ScriptsTree`. - `ScriptsTree` has been refactored to incorporate hooks for clearer code and separation of duties. - Adopt Vue-idiomatic bindings instead of keeping a reference of the tree component. - Simplify and change filter event management. - Abandon global styles in favor of class-scoped styles. - Use global mixins with descriptive names to clarify indended functionality.
undergroundwires
added a commit
that referenced
this issue
Sep 18, 2023
- Introduce a new UI component for tooltips. - Fix tooltip arrow misalignment issues in code download/execution instructions dialogs. Reasons for dropping `v-tooltip` dependency: - Lack of support for Vue 3.0, which blocks migration to Vue 3.0 (see #230). - Inability to render HTML content that's required for privacy.sexy. - Inefficient, adding an extra 162.48 KB to the production bundle for web distribution (tested using `npm run build -- --mode production`). Advantages of adopting `floating-ui` (Floating UI): - Compatibility across multiple Vue versions including 2.0, 2.7, and 3.0. - Reduced boilerplate resulting in cleaner, more maintainable code. - Efficient position recalculations without reinventing the wheel.
undergroundwires
added a commit
that referenced
this issue
Oct 11, 2023
- Introduce `AppIcon.vue`, offering improved performance over the previous `fort-awesome` dependency. This implementation reduces bundle size by 67.31KB (tested for web using `npm run build -- --mode prod`). - Migrate Font Awesome 5 icons to Font Awesome 6. This commit facilitates migration to Vue 3.0 (#230) and ensures no Vue component remains tightly bound to a specific Vue version, enhancing code portability. Font Awesome license is not included because Font Awesome revokes its right: > "Attribution is no longer required as of Font Awesome 3.0" > > Sources: > > - https://fontawesome.com/v4/license/ (archived: https://web.archive.org/web/20231003213441/https://fontawesome.com/v4/license/, https://archive.ph/Yy9j5) > - https://github.com/FortAwesome/Font-Awesome/wiki (archived: https://web.archive.org/web/20231003214646/https://github.com/FortAwesome/Font-Awesome/wiki, https://archive.ph/C6sXv) This commit removes following third-party production dependencies: - `@fortawesome/vue-fontawesome` - `@fortawesome/free-solid-svg-icons` - `@fortawesome/free-regular-svg-icons` - `@fortawesome/free-brands-svg-icons` - `@fortawesome/fontawesome-svg-core`
undergroundwires
added a commit
that referenced
this issue
Nov 1, 2023
- Migrate from "Vue 2.X" to "Vue 3.X" - Migrate from "Vue Test Utils v1" to "Vue Test Utils v2" Changes in detail: - Change `inserted` to `mounted`. - Change `::v-deep` to `:deep`. - Change to Vue 3.0 `v-modal` syntax. - Remove old Vue 2.0 transition name, keep the ones for Vue 3.0. - Use new global mounting API `createApp`. - Change `destroy` to `unmount`. - Bootstrapping: - Move `provide`s for global dependencies to a bootsrapper from `App.vue`. - Remove `productionTip` setting (not in Vue 3). - Change `IVueBootstrapper` for simplicity and Vue 3 compatible API. - Add missing tests. - Remove `.text` access on `VNode` as it's now internal API of Vue. - Import `CSSProperties` from `vue` instead of `jsx` package. - Shims: - Remove unused `shims-tsx.d.ts`. - Remove `shims-vue.d.ts` that's missing in quickstart template. - Unit tests: - Remove old typing workaround for mounting components. - Rename `propsData` to `props`. - Remove unneeded `any` cast workarounds. - Move stubs and `provide`s under `global` object. Other changes: - Add `dmg-license` dependency explicitly due to failing electron builds on macOS (electron-userland/electron-builder#6520, electron-userland/electron-builder#6489). This was a side-effect of updating dependencies for this commit.
Completed and released in 0.12.6 🚀 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Vue 2.0 has become obsolete and its continued use, along with its ecosystem (Vue CLI and associated plugins), has begun to pose dependency challenges. Vue 2 support is slated to conclude on December 31st, 2023.
Vue 3.0: Vue CLI is now in maintenance mode and Vite is the recommended tools. Official documentation points to Vue CLI -> Vite Migration Guide from VueSchool.io.
It is now of high importance to modernize our application to Vue 3.0 for seamless maintenance and future modifications. This migration is a task involves several steps and will demand major refactorings in the codebase.
TODO
liquor-tree
, which is based on Vue 2.0, enabling [Feature] Tree view > Expand All || See differences between Standard and Strict #158.v-tooltip
, which is also based on Vue 2.0.@fortawesome
, which is also based on Vue 2.0.vue-js-modal
, which is also based on Vue 2.0.@vue/composition-api
plugin allows doing this while using Vue 2.0).@vue/compat
.vue-cli-plugin-electron-builder
, which is no longer maintained, with a more reliable alternative such as Electron Forge, vite-electron-builder, orelectron-vite
(seems to support ESM), orvite-plugin-electron
andvite-plugin-electron-renderer
.The text was updated successfully, but these errors were encountered: