diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml index 89585cb6..f71cc46d 100644 --- a/.github/workflows/node.yml +++ b/.github/workflows/node.yml @@ -72,7 +72,7 @@ jobs: npm ci npm run build --if-present - - name: Check webpack build changes + - name: Check build changes run: | bash -c "[[ ! \"`git status --porcelain `\" ]] || (echo 'Please recompile and commit the assets, see the section \"Show changes on failure\" for details' && exit 1)" diff --git a/.nextcloudignore b/.nextcloudignore index 88c92359..0993bf50 100644 --- a/.nextcloudignore +++ b/.nextcloudignore @@ -32,5 +32,6 @@ /renovate.json /stylelint.config.js /webpack.config.js +/vite.config.ts /webpack.js tests diff --git a/makefile b/makefile index a3d9bf28..ea432962 100644 --- a/makefile +++ b/makefile @@ -81,6 +81,7 @@ appstore: clean --exclude=/src \ --exclude=translationfiles \ --exclude=webpack.* \ + --exclude=/vite.* \ --exclude=stylelint.config.js \ --exclude=.eslintrc.js \ --exclude=.github \ diff --git a/src/assistant.js b/src/assistant.js index 33b94d3d..06cba6a5 100644 --- a/src/assistant.js +++ b/src/assistant.js @@ -1,10 +1,6 @@ import { TASK_STATUS_STRING } from './constants.js' -// import { linkTo } from '@nextcloud/router' -// import { getRequestToken } from '@nextcloud/auth' import { showError } from '@nextcloud/dialogs' -// __webpack_nonce__ = btoa(getRequestToken()) // eslint-disable-line -// __webpack_public_path__ = linkTo('assistant', 'js/') // eslint-disable-line window.assistantPollTimerId = null // TODO add param to lock on specific task type @@ -50,8 +46,8 @@ export async function openAssistantForm({ isInsideViewer = undefined, closeOnResult = false, actionButtons = undefined, customId = '', identifier = '', }) { - const { default: Vue } = await import(/* webpackChunkName: "vue-lazy" */'vue') - const { default: AssistantTextProcessingModal } = await import(/* webpackChunkName: "assistant-modal-lazy" */'./components/AssistantTextProcessingModal.vue') + const { default: Vue } = await import('vue') + const { default: AssistantTextProcessingModal } = await import('./components/AssistantTextProcessingModal.vue') Vue.mixin({ methods: { t, n } }) // fallback to the last used one @@ -197,22 +193,22 @@ export async function cancelTaskPolling() { export async function getTask(taskId) { window.assistantAbortController = new AbortController() - const { default: axios } = await import(/* webpackChunkName: "axios-lazy" */'@nextcloud/axios') - const { generateOcsUrl } = await import(/* webpackChunkName: "router-gen-lazy" */'@nextcloud/router') + const { default: axios } = await import('@nextcloud/axios') + const { generateOcsUrl } = await import('@nextcloud/router') const url = generateOcsUrl('taskprocessing/task/{taskId}', { taskId }) return axios.get(url, { signal: window.assistantAbortController.signal }) } export async function setNotifyReady(taskId) { - const { default: axios } = await import(/* webpackChunkName: "axios-lazy" */'@nextcloud/axios') - const { generateOcsUrl } = await import(/* webpackChunkName: "router-gen-lazy" */'@nextcloud/router') + const { default: axios } = await import('@nextcloud/axios') + const { generateOcsUrl } = await import('@nextcloud/router') const url = generateOcsUrl('/apps/assistant/api/v1/task/{taskId}/notify', { taskId }) return axios.post(url, {}) } export async function cancelTask(taskId) { - const { default: axios } = await import(/* webpackChunkName: "axios-lazy" */'@nextcloud/axios') - const { generateOcsUrl } = await import(/* webpackChunkName: "router-gen-lazy" */'@nextcloud/router') + const { default: axios } = await import('@nextcloud/axios') + const { generateOcsUrl } = await import('@nextcloud/router') const url = generateOcsUrl('taskprocessing/task/{taskId}', { taskId }) return axios.delete(url, {}) } @@ -228,8 +224,8 @@ export async function cancelTask(taskId) { */ export async function scheduleTask(appId, customId, taskType, inputs) { window.assistantAbortController = new AbortController() - const { default: axios } = await import(/* webpackChunkName: "axios-lazy" */'@nextcloud/axios') - const { generateOcsUrl } = await import(/* webpackChunkName: "router-gen-lazy" */'@nextcloud/router') + const { default: axios } = await import('@nextcloud/axios') + const { generateOcsUrl } = await import('@nextcloud/router') saveLastSelectedTaskType(taskType) const url = generateOcsUrl('taskprocessing/schedule') const params = { @@ -242,8 +238,8 @@ export async function scheduleTask(appId, customId, taskType, inputs) { } async function saveLastSelectedTaskType(taskType) { - const { default: axios } = await import(/* webpackChunkName: "axios-lazy" */'@nextcloud/axios') - const { generateUrl } = await import(/* webpackChunkName: "router-gen-lazy" */'@nextcloud/router') + const { default: axios } = await import('@nextcloud/axios') + const { generateUrl } = await import('@nextcloud/router') const req = { values: { @@ -255,8 +251,8 @@ async function saveLastSelectedTaskType(taskType) { } async function getLastSelectedTaskType() { - const { default: axios } = await import(/* webpackChunkName: "axios-lazy" */'@nextcloud/axios') - const { generateUrl } = await import(/* webpackChunkName: "router-gen-lazy" */'@nextcloud/router') + const { default: axios } = await import('@nextcloud/axios') + const { generateUrl } = await import('@nextcloud/router') const req = { params: { @@ -316,10 +312,10 @@ async function showAssistantTaskResult(taskId) { * @return {Promise} */ export async function openAssistantTask(task, { isInsideViewer = undefined, actionButtons = undefined } = {}) { - const { default: Vue } = await import(/* webpackChunkName: "vue-lazy" */'vue') + const { default: Vue } = await import('vue') Vue.mixin({ methods: { t, n } }) - const { showError } = await import(/* webpackChunkName: "dialogs-lazy" */'@nextcloud/dialogs') - const { default: AssistantTextProcessingModal } = await import(/* webpackChunkName: "assistant-modal-lazy" */'./components/AssistantTextProcessingModal.vue') + const { showError } = await import('@nextcloud/dialogs') + const { default: AssistantTextProcessingModal } = await import('./components/AssistantTextProcessingModal.vue') const modalId = 'assistantTextProcessingModal' const modalElement = document.createElement('div') @@ -432,8 +428,8 @@ export async function addAssistantMenuEntry() { menuEntry.id = 'assistant' headerRight.prepend(menuEntry) - const { default: Vue } = await import(/* webpackChunkName: "vue-lazy" */'vue') - const { default: AssistantHeaderMenuEntry } = await import(/* webpackChunkName: "assistant-header-lazy" */'./components/AssistantHeaderMenuEntry.vue') + const { default: Vue } = await import('vue') + const { default: AssistantHeaderMenuEntry } = await import('./components/AssistantHeaderMenuEntry.vue') Vue.mixin({ methods: { t, n } }) const View = Vue.extend(AssistantHeaderMenuEntry) diff --git a/src/imageGenerationReference.js b/src/imageGenerationReference.js index 40ec91b2..cb852095 100644 --- a/src/imageGenerationReference.js +++ b/src/imageGenerationReference.js @@ -3,16 +3,10 @@ import { registerCustomPickerElement, NcCustomPickerRenderResult } from '@nextcloud/vue/dist/Components/NcRichText.js' -// import { linkTo } from '@nextcloud/router' -// import { getRequestToken } from '@nextcloud/auth' - -// __webpack_nonce__ = btoa(getRequestToken()) // eslint-disable-line -// __webpack_public_path__ = linkTo('assistant', 'js/') // eslint-disable-line - registerCustomPickerElement('assistant_image_generation', async (el, { providerId, accessible }) => { - const { default: Vue } = await import(/* webpackChunkName: "vue-lazy" */'vue') + const { default: Vue } = await import('vue') Vue.mixin({ methods: { t, n } }) - const { default: ImageResultCustomPickerElement } = await import(/* webpackChunkName: "reference-picker-lazy" */'./views/ImageResultCustomPickerElement.vue') + const { default: ImageResultCustomPickerElement } = await import('./views/ImageResultCustomPickerElement.vue') const Element = Vue.extend(ImageResultCustomPickerElement) const vueElement = new Element({ diff --git a/src/speechToTextReference.js b/src/speechToTextReference.js index 0cda4a80..9ee6667f 100644 --- a/src/speechToTextReference.js +++ b/src/speechToTextReference.js @@ -22,16 +22,11 @@ */ import { registerCustomPickerElement, NcCustomPickerRenderResult } from '@nextcloud/vue/dist/Components/NcRichText.js' -// import { linkTo } from '@nextcloud/router' -// import { getRequestToken } from '@nextcloud/auth' - -// __webpack_nonce__ = btoa(getRequestToken()) // eslint-disable-line -// __webpack_public_path__ = linkTo('assistant', 'js/') // eslint-disable-line registerCustomPickerElement('assistant_speech_to_text', async (el, { providerId, accessible }) => { - const { default: Vue } = await import(/* webpackChunkName: "vue-lazy" */'vue') + const { default: Vue } = await import('vue') Vue.mixin({ methods: { t, n } }) - const { default: TextResultCustomPickerElement } = await import(/* webpackChunkName: "reference-picker-lazy" */'./views/TextResultCustomPickerElement.vue') + const { default: TextResultCustomPickerElement } = await import('./views/TextResultCustomPickerElement.vue') const Element = Vue.extend(TextResultCustomPickerElement) const vueElement = new Element({ propsData: { diff --git a/src/textGenerationReference.js b/src/textGenerationReference.js index 6b23a6eb..28175080 100644 --- a/src/textGenerationReference.js +++ b/src/textGenerationReference.js @@ -3,16 +3,10 @@ import { registerCustomPickerElement, NcCustomPickerRenderResult } from '@nextcloud/vue/dist/Components/NcRichText.js' -// import { linkTo } from '@nextcloud/router' -// import { getRequestToken } from '@nextcloud/auth' - -// __webpack_nonce__ = btoa(getRequestToken()) // eslint-disable-line -// __webpack_public_path__ = linkTo('assistant', 'js/') // eslint-disable-line - registerCustomPickerElement('assistant_text', async (el, { providerId, accessible }) => { - const { default: Vue } = await import(/* webpackChunkName: "vue-lazy" */'vue') + const { default: Vue } = await import('vue') Vue.mixin({ methods: { t, n } }) - const { default: TextResultCustomPickerElement } = await import(/* webpackChunkName: "reference-picker-lazy" */'./views/TextResultCustomPickerElement.vue') + const { default: TextResultCustomPickerElement } = await import('./views/TextResultCustomPickerElement.vue') const Element = Vue.extend(TextResultCustomPickerElement) const vueElement = new Element({ propsData: { diff --git a/webpack.js b/webpack.js deleted file mode 100644 index 9523d716..00000000 --- a/webpack.js +++ /dev/null @@ -1,46 +0,0 @@ -const path = require('path') -const webpackConfig = require('@nextcloud/webpack-vue-config') -const ESLintPlugin = require('eslint-webpack-plugin') -const StyleLintPlugin = require('stylelint-webpack-plugin') - -const buildMode = process.env.NODE_ENV -const isDev = buildMode === 'development' -webpackConfig.devtool = isDev ? 'cheap-source-map' : 'source-map' -// webpackConfig.bail = false - -webpackConfig.stats = { - colors: true, - modules: false, -} - -const appId = 'assistant' -webpackConfig.entry = { - imageGenerationReference: { import: path.join(__dirname, 'src', 'imageGenerationReference.js'), filename: appId + '-imageGenerationReference.js' }, - textGenerationReference: { import: path.join(__dirname, 'src', 'textGenerationReference.js'), filename: appId + '-textGenerationReference.js' }, - speechToTextReference: { import: path.join(__dirname, 'src', 'speechToTextReference.js'), filename: appId + '-speechToTextReference.js' }, - personalSettings: { import: path.join(__dirname, 'src', 'personalSettings.js'), filename: appId + '-personalSettings.js' }, - adminSettings: { import: path.join(__dirname, 'src', 'adminSettings.js'), filename: appId + '-adminSettings.js' }, - main: { import: path.join(__dirname, 'src', 'main.js'), filename: appId + '-main.js' }, - assistantPage: { import: path.join(__dirname, 'src', 'assistantPage.js'), filename: appId + '-assistantPage.js' }, -} - -webpackConfig.plugins.push( - new ESLintPlugin({ - extensions: ['js', 'vue'], - files: 'src', - failOnError: !isDev, - }), -) -webpackConfig.plugins.push( - new StyleLintPlugin({ - files: 'src/**/*.{css,scss,vue}', - failOnError: !isDev, - }), -) - -webpackConfig.module.rules.push({ - test: /\.svg$/i, - type: 'asset/source', -}) - -module.exports = webpackConfig