diff --git a/.editorconfig b/.editorconfig index b9583094..50dbfd02 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,7 +8,7 @@ trim_trailing_whitespace = true end_of_line = lf insert_final_newline = true -[*.{jade,pug,md}] +[*.{pug,md}] trim_trailing_whitespace = false [Makefile] diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 0c6886ca..00000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v12.16.3 diff --git a/client/client-app.js b/client/client-app.js index c70db6dd..6d4c4340 100644 --- a/client/client-app.js +++ b/client/client-app.js @@ -47,7 +47,7 @@ store.commit('user/REFRESH_AUTH') // Initialize Apollo Client (GraphQL) // ==================================== -const graphQLEndpoint = window.location.protocol + '//' + window.location.host + '/graphql' +const graphQLEndpoint = window.location.protocol + '//' + window.location.host + '/_graphql' const graphQLLink = ApolloLink.from([ new ErrorLink(({ graphQLErrors, networkError }) => { diff --git a/client/client-setup.js b/client/client-setup.js deleted file mode 100644 index 2eb68371..00000000 --- a/client/client-setup.js +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable import/first */ -import Vue from 'vue' -import Vuetify from 'vuetify/lib' -import boot from './modules/boot' -/* eslint-enable import/first */ - -window.WIKI = null -window.boot = boot - -Vue.use(Vuetify) - -Vue.component('setup', () => import(/* webpackMode: "eager" */ './components/setup.vue')) - -let bootstrap = () => { - window.WIKI = new Vue({ - el: '#root', - vuetify: new Vuetify() - }) -} - -window.boot.onDOMReady(bootstrap) diff --git a/client/components/login.vue b/client/components/login.vue index f74a4744..e7875ccf 100644 --- a/client/components/login.vue +++ b/client/components/login.vue @@ -662,26 +662,34 @@ export default { apollo: { strategies: { query: gql` - { - authentication { - activeStrategies(enabledOnly: true) { + query loginFetchSiteStrategies( + $siteId: UUID + ) { + authStrategies( + siteId: $siteId + enabledOnly: true + ) { + key + strategy { key - strategy { - key - logo - color - icon - useForm - usernameType - } - displayName - order - selfRegistration + logo + color + icon + useForm + usernameType } + displayName + order + selfRegistration } } `, - update: (data) => _.sortBy(data.authentication.activeStrategies, ['order']), + variables () { + return { + siteId: siteConfig.id + } + }, + update: (data) => _.sortBy(data.authStrategies, ['order']), watchLoading (isLoading) { this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'login-strategies-refresh') } diff --git a/client/index-legacy.js b/client/index-legacy.js deleted file mode 100644 index ac2f6f51..00000000 --- a/client/index-legacy.js +++ /dev/null @@ -1,4 +0,0 @@ -require('./scss/legacy.scss') -require('./scss/fonts/default.scss') - -window.WIKI = null diff --git a/client/index-setup.js b/client/index-setup.js deleted file mode 100644 index 4d398de0..00000000 --- a/client/index-setup.js +++ /dev/null @@ -1,11 +0,0 @@ -require('core-js/stable') -require('regenerator-runtime/runtime') - -/* eslint-disable no-unused-expressions */ - -require('./scss/app.scss') -import(/* webpackChunkName: "mdi" */ '@mdi/font/css/materialdesignicons.css') - -require('./helpers/compatibility.js') - -require('./client-setup.js') diff --git a/dev/index.js b/dev/index.js index f3b719db..9f565e80 100644 --- a/dev/index.js +++ b/dev/index.js @@ -60,7 +60,7 @@ const init = { }, async reload() { console.warn(chalk.yellow('--- Gracefully stopping server...')) - await global.WIKI.kernel.shutdown() + await global.WIKI.kernel.shutdown(true) console.warn(chalk.yellow('--- Purging node modules cache...')) diff --git a/dev/templates/master.pug b/dev/templates/base.pug similarity index 99% rename from dev/templates/master.pug rename to dev/templates/base.pug index 478d2725..fa90ce42 100644 --- a/dev/templates/master.pug +++ b/dev/templates/base.pug @@ -29,6 +29,7 @@ html(lang=siteConfig.lang) //- Site Properties script. + var siteId = "!{siteId}" var siteConfig = !{JSON.stringify(siteConfig)} var siteLangs = !{JSON.stringify(langs)} diff --git a/dev/templates/setup.pug b/dev/templates/setup.pug deleted file mode 100644 index e264901e..00000000 --- a/dev/templates/setup.pug +++ /dev/null @@ -1,48 +0,0 @@ -doctype html -html - head - meta(http-equiv='X-UA-Compatible', content='IE=edge') - meta(charset='UTF-8') - meta(name='viewport', content='user-scalable=yes, width=device-width, initial-scale=1, maximum-scale=5') - meta(name='theme-color', content='#1976d2') - meta(name='msapplication-TileColor', content='#1976d2') - meta(name='msapplication-TileImage', content='/_assets/favicons/mstile-150x150.png') - title Wiki.js Setup - - //- Favicon - link(rel='apple-touch-icon', sizes='180x180', href='/_assets/favicons/apple-touch-icon.png') - link(rel='icon', type='image/png', sizes='192x192', href='/_assets/favicons/android-chrome-192x192.png') - link(rel='icon', type='image/png', sizes='32x32', href='/_assets/favicons/favicon-32x32.png') - link(rel='icon', type='image/png', sizes='16x16', href='/_assets/favicons/favicon-16x16.png') - link(rel='mask-icon', href='/_assets/favicons/safari-pinned-tab.svg', color='#1976d2') - link(rel='manifest', href='/_assets/manifest.json') - - //- Site Lang - script. - var siteConfig = !{JSON.stringify({ title: config.title })} - - //- Dev Mode Warning - if devMode - script. - siteConfig.devMode = true - - //- CSS - <% for (var index in htmlWebpackPlugin.files.css) { %> - link( - type='text/css' - rel='stylesheet' - href='<%= htmlWebpackPlugin.files.css[index] %>' - ) - <% } %> - - //- JS - <% for (var index in htmlWebpackPlugin.files.js) { %> - script( - type='text/javascript' - src='<%= htmlWebpackPlugin.files.js[index] %>' - ) - <% } %> - - body - #root - setup(telemetry-id=telemetryClientID, wiki-version=packageObj.version) diff --git a/dev/webpack/webpack.dev.js b/dev/webpack/webpack.dev.js index ed570944..a15e1d44 100644 --- a/dev/webpack/webpack.dev.js +++ b/dev/webpack/webpack.dev.js @@ -24,9 +24,7 @@ fs.emptyDirSync(path.join(process.cwd(), 'assets-legacy')) module.exports = { mode: 'development', entry: { - app: ['./client/index-app.js', 'webpack-hot-middleware/client'], - legacy: ['./client/index-legacy.js', 'webpack-hot-middleware/client'], - setup: ['./client/index-setup.js', 'webpack-hot-middleware/client'] + app: ['./client/index-app.js', 'webpack-hot-middleware/client'] }, output: { path: path.join(process.cwd(), 'assets-legacy'), @@ -197,25 +195,10 @@ module.exports = { ] }), new HtmlWebpackPlugin({ - template: 'dev/templates/master.pug', - filename: '../server/views/master.pug', + template: 'dev/templates/base.pug', + filename: '../server/views/base.pug', hash: false, - inject: false, - excludeChunks: ['setup', 'legacy'] - }), - new HtmlWebpackPlugin({ - template: 'dev/templates/legacy.pug', - filename: '../server/views/legacy/master.pug', - hash: false, - inject: false, - excludeChunks: ['setup', 'app'] - }), - new HtmlWebpackPlugin({ - template: 'dev/templates/setup.pug', - filename: '../server/views/setup.pug', - hash: false, - inject: false, - excludeChunks: ['app', 'legacy'] + inject: false }), new HtmlWebpackPugPlugin(), new WebpackBarPlugin({ diff --git a/dev/webpack/webpack.prod.js b/dev/webpack/webpack.prod.js index f7bc315b..58d6c788 100644 --- a/dev/webpack/webpack.prod.js +++ b/dev/webpack/webpack.prod.js @@ -29,9 +29,7 @@ fs.emptyDirSync(path.join(process.cwd(), 'assets-legacy')) module.exports = { mode: 'production', entry: { - app: './client/index-app.js', - legacy: './client/index-legacy.js', - setup: './client/index-setup.js' + app: './client/index-app.js' }, output: { path: path.join(process.cwd(), 'assets-legacy'), @@ -208,25 +206,10 @@ module.exports = { chunkFilename: 'css/[name].[chunkhash].css' }), new HtmlWebpackPlugin({ - template: 'dev/templates/master.pug', - filename: '../server/views/master.pug', + template: 'dev/templates/base.pug', + filename: '../server/views/base.pug', hash: false, - inject: false, - excludeChunks: ['setup', 'legacy'] - }), - new HtmlWebpackPlugin({ - template: 'dev/templates/legacy.pug', - filename: '../server/views/legacy/master.pug', - hash: false, - inject: false, - excludeChunks: ['setup', 'app'] - }), - new HtmlWebpackPlugin({ - template: 'dev/templates/setup.pug', - filename: '../server/views/setup.pug', - hash: false, - inject: false, - excludeChunks: ['app', 'legacy'] + inject: false }), new HtmlWebpackPugPlugin(), new ScriptExtHtmlWebpackPlugin({ diff --git a/package.json b/package.json index 9bb75bfb..e7d75086 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "scripts": { "start": "node server", "dev": "nodemon server", - "legacy:dev": "node dev", + "legacy:dev": "NODE_OPTIONS=--openssl-legacy-provider node dev", "legacy:build": "NODE_OPTIONS=--openssl-legacy-provider webpack --profile --config dev/webpack/webpack.prod.js", "test": "eslint --format codeframe --ext .js,.vue . && pug-lint server/views && jest", "cypress:open": "cypress open" diff --git a/server/core/kernel.js b/server/core/kernel.js index f2a067b9..cf6903dd 100644 --- a/server/core/kernel.js +++ b/server/core/kernel.js @@ -24,14 +24,13 @@ module.exports = { process.exit(1) } - this.bootMaster() + this.bootWeb() }, /** - * Pre-Master Boot Sequence + * Pre-Web Boot Sequence */ - async preBootMaster() { + async preBootWeb() { try { - await this.initTelemetry() WIKI.sideloader = await require('./sideloader').init() WIKI.cache = require('./cache').init() WIKI.scheduler = require('./scheduler').init() @@ -48,22 +47,22 @@ module.exports = { } }, /** - * Boot Master Process + * Boot Web Process */ - async bootMaster() { + async bootWeb() { try { - await this.preBootMaster() - await require('../master')() - this.postBootMaster() + await this.preBootWeb() + await require('../web')() + this.postBootWeb() } catch (err) { WIKI.logger.error(err) process.exit(1) } }, /** - * Post-Master Boot Sequence + * Post-Web Boot Sequence */ - async postBootMaster() { + async postBootWeb() { await WIKI.models.analytics.refreshProvidersFromDisk() await WIKI.models.authentication.refreshStrategiesFromDisk() await WIKI.models.commentProviders.refreshProvidersFromDisk() @@ -74,30 +73,16 @@ module.exports = { await WIKI.auth.activateStrategies() await WIKI.models.commentProviders.initProvider() + await WIKI.models.sites.reloadCache() await WIKI.models.storage.initTargets() // WIKI.scheduler.start() await WIKI.models.subscribeToNotifications() }, - /** - * Init Telemetry - */ - async initTelemetry() { - require('./telemetry').init() - - process.on('unhandledRejection', (err) => { - WIKI.logger.warn(err) - WIKI.telemetry.sendError(err) - }) - process.on('uncaughtException', (err) => { - WIKI.logger.warn(err) - WIKI.telemetry.sendError(err) - }) - }, /** * Graceful shutdown */ - async shutdown () { + async shutdown (devMode = false) { if (WIKI.servers) { await WIKI.servers.stopServers() } @@ -113,6 +98,8 @@ module.exports = { if (WIKI.asar) { await WIKI.asar.unload() } - process.exit(0) + if (!devMode) { + process.exit(0) + } } } diff --git a/server/core/system.js b/server/core/system.js index c90d436e..2429c802 100644 --- a/server/core/system.js +++ b/server/core/system.js @@ -11,7 +11,7 @@ module.exports = { minimumVersionRequired: '3.0.0-beta.0', minimumNodeRequired: '18.0.0' }, - init() { + init () { // Clear content cache fs.emptyDir(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'cache')) diff --git a/server/core/telemetry.js b/server/core/telemetry.js deleted file mode 100644 index 5453d693..00000000 --- a/server/core/telemetry.js +++ /dev/null @@ -1,144 +0,0 @@ -const _ = require('lodash') -const { createApolloFetch } = require('apollo-fetch') -const { v4: uuid } = require('uuid') -const os = require('os') -const fs = require('fs-extra') - -/* global WIKI */ - -module.exports = { - enabled: false, - init() { - WIKI.telemetry = this - - if (_.get(WIKI.config, 'telemetry.isEnabled', false) === true && WIKI.config.offline !== true) { - this.enabled = true - this.sendInstanceEvent('STARTUP') - } - }, - sendError(err) { - // TODO - }, - sendEvent(eventCategory, eventAction, eventLabel) { - // TODO - }, - async sendInstanceEvent(eventType) { - if (WIKI.devMode || !this.enabled) { return } - - try { - const apollo = createApolloFetch({ - uri: WIKI.config.graphEndpoint - }) - - // Platform detection - let platform = 'LINUX' - let isDockerized = false - let osname = `${os.type()} ${os.release()}` - switch (os.platform()) { - case 'win32': - platform = 'WINDOWS' - break - case 'darwin': - platform = 'MACOS' - break - default: - platform = 'LINUX' - isDockerized = await fs.pathExists('/.dockerenv') - if (isDockerized) { - osname = 'Docker' - } - break - } - - // DB Version detection - let dbVersion = 'Unknown' - switch (WIKI.config.db.type) { - case 'mariadb': - case 'mysql': - const resultMYSQL = await WIKI.models.knex.raw('SELECT VERSION() as version;') - dbVersion = _.get(resultMYSQL, '[0][0].version', 'Unknown') - break - case 'mssql': - const resultMSSQL = await WIKI.models.knex.raw('SELECT @@VERSION as version;') - dbVersion = _.get(resultMSSQL, '[0].version', 'Unknown') - break - case 'postgres': - dbVersion = _.get(WIKI.models, 'knex.client.version', 'Unknown') - break - case 'sqlite': - dbVersion = _.get(WIKI.models, 'knex.client.driver.VERSION', 'Unknown') - break - } - - let arch = os.arch().toUpperCase() - if (['ARM', 'ARM64', 'X32', 'X64'].indexOf(arch) < 0) { - arch = 'OTHER' - } - - // Send Event - const respStrings = await apollo({ - query: `mutation ( - $version: String! - $platform: TelemetryPlatform! - $os: String! - $architecture: TelemetryArchitecture! - $dbType: TelemetryDBType! - $dbVersion: String! - $nodeVersion: String! - $cpuCores: Int! - $ramMBytes: Int!, - $clientId: String!, - $event: TelemetryInstanceEvent! - ) { - telemetry { - instance( - version: $version - platform: $platform - os: $os - architecture: $architecture - dbType: $dbType - dbVersion: $dbVersion - nodeVersion: $nodeVersion - cpuCores: $cpuCores - ramMBytes: $ramMBytes - clientId: $clientId - event: $event - ) { - responseResult { - succeeded - errorCode - slug - message - } - } - } - }`, - variables: { - version: WIKI.version, - platform, - os: osname, - architecture: arch, - dbType: WIKI.config.db.type.toUpperCase(), - dbVersion, - nodeVersion: process.version.substr(1), - cpuCores: os.cpus().length, - ramMBytes: Math.round(os.totalmem() / 1024 / 1024), - clientId: WIKI.config.telemetry.clientId, - event: eventType - } - }) - const telemetryResponse = _.get(respStrings, 'data.telemetry.instance.responseResult', { succeeded: false, message: 'Unexpected Error' }) - if (!telemetryResponse.succeeded) { - WIKI.logger.warn('Failed to send instance telemetry: ' + telemetryResponse.message) - } else { - WIKI.logger.info('Telemetry is active: [ OK ]') - } - } catch (err) { - WIKI.logger.warn(err) - } - }, - generateClientId() { - _.set(WIKI.config, 'telemetry.clientId', uuid()) - return WIKI.config.telemetry.clientId - } -} diff --git a/server/graph/resolvers/storage.js b/server/graph/resolvers/storage.js index 1f659835..ec5f4d08 100644 --- a/server/graph/resolvers/storage.js +++ b/server/graph/resolvers/storage.js @@ -32,6 +32,7 @@ module.exports = { // }), ['title', 'key']) return _.sortBy(WIKI.storage.defs.map(md => { const dbTarget = dbTargets.find(tg => tg.module === md.key) + console.info(md.actions) return { id: dbTarget?.id ?? uuid(), isEnabled: dbTarget?.isEnabled ?? false, @@ -62,12 +63,12 @@ module.exports = { setup: { handler: md?.setup?.handler, state: dbTarget?.state?.setup ?? 'notconfigured', - values: md.setup?.handler - ? _.transform(md.setup.defaultValues, + values: md.setup?.handler ? + _.transform(md.setup.defaultValues, (r, v, k) => { r[k] = dbTarget?.config?.[k] ?? v - }, {}) - : {} + }, {}) : + {} }, config: _.transform(md.props, (r, v, k) => { const cfValue = dbTarget?.config?.[k] ?? v.default diff --git a/server/graph/schemas/authentication.graphql b/server/graph/schemas/authentication.graphql index 8834899f..d32a0853 100644 --- a/server/graph/schemas/authentication.graphql +++ b/server/graph/schemas/authentication.graphql @@ -8,6 +8,7 @@ extend type Query { apiState: Boolean authStrategies( + siteId: UUID enabledOnly: Boolean ): [AuthenticationStrategy] } diff --git a/server/index.js b/server/index.js index 8588963c..96af8921 100644 --- a/server/index.js +++ b/server/index.js @@ -22,6 +22,8 @@ let WIKI = { Error: require('./helpers/error'), configSvc: require('./core/config'), kernel: require('./core/kernel'), + sites: {}, + sitesMappings: {}, startedAt: DateTime.utc(), storage: { defs: [], diff --git a/server/models/sites.js b/server/models/sites.js index 329c3a5f..b0c5b5a9 100644 --- a/server/models/sites.js +++ b/server/models/sites.js @@ -28,6 +28,28 @@ module.exports = class Site extends Model { return ['config'] } + static async getSiteByHostname ({ hostname, forceReload = false }) { + if (forceReload) { + await WIKI.models.sites.reloadCache() + } + const siteId = WIKI.sitesMappings[hostname] || WIKI.sitesMappings['*'] + if (siteId) { + return WIKI.sites[siteId] + } + return null + } + + static async reloadCache () { + WIKI.logger.info('Reloading site configurations...') + const sites = await WIKI.models.sites.query().orderBy('id') + WIKI.sites = _.keyBy(sites, 'id') + WIKI.sitesMappings = {} + for (const site of sites) { + WIKI.sitesMappings[site.hostname] = site.id + } + WIKI.logger.info(`Loaded ${sites.length} site configurations [ OK ]`) + } + static async createSite (hostname, config) { const newSite = await WIKI.models.sites.query().insertAndFetch({ hostname, diff --git a/server/setup.js b/server/setup.js deleted file mode 100644 index 6d87a29f..00000000 --- a/server/setup.js +++ /dev/null @@ -1,450 +0,0 @@ -const path = require('path') -const { v4: uuid } = require('uuid') -const bodyParser = require('body-parser') -const compression = require('compression') -const express = require('express') -const favicon = require('serve-favicon') -const http = require('http') -const Promise = require('bluebird') -const fs = require('fs-extra') -const _ = require('lodash') -const crypto = Promise.promisifyAll(require('crypto')) -const pem2jwk = require('pem-jwk').pem2jwk -const semver = require('semver') - -/* global WIKI */ - -module.exports = () => { - WIKI.config.site = { - path: '', - title: 'Wiki.js' - } - - WIKI.system = require('./core/system') - - // ---------------------------------------- - // Define Express App - // ---------------------------------------- - - let app = express() - app.use(compression()) - - // ---------------------------------------- - // Public Assets - // ---------------------------------------- - - app.use(favicon(path.join(WIKI.ROOTPATH, 'assets', 'favicon.ico'))) - app.use('/_assets', express.static(path.join(WIKI.ROOTPATH, 'assets'))) - - // ---------------------------------------- - // View Engine Setup - // ---------------------------------------- - - app.set('views', path.join(WIKI.SERVERPATH, 'views')) - app.set('view engine', 'pug') - - app.use(bodyParser.json()) - app.use(bodyParser.urlencoded({ extended: false })) - - app.locals.config = WIKI.config - app.locals.data = WIKI.data - app.locals._ = require('lodash') - app.locals.devMode = WIKI.devMode - - // ---------------------------------------- - // HMR (Dev Mode Only) - // ---------------------------------------- - - if (global.DEV) { - app.use(global.WP_DEV.devMiddleware) - app.use(global.WP_DEV.hotMiddleware) - } - - // ---------------------------------------- - // Controllers - // ---------------------------------------- - - app.get('*', async (req, res) => { - let packageObj = await fs.readJson(path.join(WIKI.ROOTPATH, 'package.json')) - res.render('setup', { packageObj }) - }) - - /** - * Finalize - */ - app.post('/finalize', async (req, res) => { - try { - // Set config - _.set(WIKI.config, 'auth', { - audience: 'urn:wiki.js', - tokenExpiration: '30m', - tokenRenewal: '14d' - }) - _.set(WIKI.config, 'company', '') - _.set(WIKI.config, 'features', { - featurePageRatings: true, - featurePageComments: true, - featurePersonalWikis: true - }) - _.set(WIKI.config, 'graphEndpoint', 'https://graph.requarks.io') - _.set(WIKI.config, 'host', req.body.siteUrl) - _.set(WIKI.config, 'lang', { - code: 'en', - autoUpdate: true, - namespacing: false, - namespaces: [] - }) - _.set(WIKI.config, 'logo', { - hasLogo: false, - logoIsSquare: false - }) - _.set(WIKI.config, 'mail', { - senderName: '', - senderEmail: '', - host: '', - port: 465, - secure: true, - verifySSL: true, - user: '', - pass: '', - useDKIM: false, - dkimDomainName: '', - dkimKeySelector: '', - dkimPrivateKey: '' - }) - _.set(WIKI.config, 'seo', { - description: '', - robots: ['index', 'follow'], - analyticsService: '', - analyticsId: '' - }) - _.set(WIKI.config, 'sessionSecret', (await crypto.randomBytesAsync(32)).toString('hex')) - _.set(WIKI.config, 'telemetry', { - isEnabled: req.body.telemetry === true, - clientId: uuid() - }) - _.set(WIKI.config, 'theming', { - theme: 'default', - darkMode: false, - iconset: 'mdi', - injectCSS: '', - injectHead: '', - injectBody: '' - }) - _.set(WIKI.config, 'title', 'Wiki.js') - - // Init Telemetry - WIKI.kernel.initTelemetry() - // WIKI.telemetry.sendEvent('setup', 'install-start') - - // Basic checks - if (!semver.satisfies(process.version, '>=10.12')) { - throw new Error('Node.js 10.12.x or later required!') - } - - // Create directory structure - WIKI.logger.info('Creating data directories...') - await fs.ensureDir(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath)) - await fs.emptyDir(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'cache')) - await fs.ensureDir(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'uploads')) - - // Generate certificates - WIKI.logger.info('Generating certificates...') - const certs = crypto.generateKeyPairSync('rsa', { - modulusLength: 2048, - publicKeyEncoding: { - type: 'pkcs1', - format: 'pem' - }, - privateKeyEncoding: { - type: 'pkcs1', - format: 'pem', - cipher: 'aes-256-cbc', - passphrase: WIKI.config.sessionSecret - } - }) - - _.set(WIKI.config, 'certs', { - jwk: pem2jwk(certs.publicKey), - public: certs.publicKey, - private: certs.privateKey - }) - - // Save config to DB - WIKI.logger.info('Persisting config to DB...') - await WIKI.configSvc.saveToDb([ - 'auth', - 'certs', - 'company', - 'features', - 'graphEndpoint', - 'host', - 'lang', - 'logo', - 'mail', - 'seo', - 'sessionSecret', - 'telemetry', - 'theming', - 'uploads', - 'title' - ], false) - - // Truncate tables (reset from previous failed install) - await WIKI.models.locales.query().where('code', '!=', 'x').del() - await WIKI.models.navigation.query().truncate() - switch (WIKI.config.db.type) { - case 'postgres': - await WIKI.models.knex.raw('TRUNCATE groups, users CASCADE') - break - case 'mysql': - case 'mariadb': - await WIKI.models.groups.query().where('id', '>', 0).del() - await WIKI.models.users.query().where('id', '>', 0).del() - await WIKI.models.knex.raw('ALTER TABLE `groups` AUTO_INCREMENT = 1') - await WIKI.models.knex.raw('ALTER TABLE `users` AUTO_INCREMENT = 1') - break - case 'mssql': - await WIKI.models.groups.query().del() - await WIKI.models.users.query().del() - await WIKI.models.knex.raw(` - IF EXISTS (SELECT * FROM sys.identity_columns WHERE OBJECT_NAME(OBJECT_ID) = 'groups' AND last_value IS NOT NULL) - DBCC CHECKIDENT ([groups], RESEED, 0) - `) - await WIKI.models.knex.raw(` - IF EXISTS (SELECT * FROM sys.identity_columns WHERE OBJECT_NAME(OBJECT_ID) = 'users' AND last_value IS NOT NULL) - DBCC CHECKIDENT ([users], RESEED, 0) - `) - break - case 'sqlite': - await WIKI.models.groups.query().truncate() - await WIKI.models.users.query().truncate() - break - } - - // Create default locale - WIKI.logger.info('Installing default locale...') - await WIKI.models.locales.query().insert({ - code: 'en', - strings: {}, - isRTL: false, - name: 'English', - nativeName: 'English' - }) - - // Create default groups - - WIKI.logger.info('Creating default groups...') - const adminGroup = await WIKI.models.groups.query().insert({ - name: 'Administrators', - permissions: JSON.stringify(['manage:system']), - pageRules: JSON.stringify([]), - isSystem: true - }) - const guestGroup = await WIKI.models.groups.query().insert({ - name: 'Guests', - permissions: JSON.stringify(['read:pages', 'read:assets', 'read:comments']), - pageRules: JSON.stringify([ - { id: 'guest', roles: ['read:pages', 'read:assets', 'read:comments'], match: 'START', deny: false, path: '', locales: [] } - ]), - isSystem: true - }) - if (adminGroup.id !== 1 || guestGroup.id !== 2) { - throw new Error('Incorrect groups auto-increment configuration! Should start at 0 and increment by 1. Contact your database administrator.') - } - - // Load local authentication strategy - await WIKI.models.authentication.query().insert({ - key: 'local', - config: {}, - selfRegistration: false, - isEnabled: true, - domainWhitelist: {v: []}, - autoEnrollGroups: {v: []}, - order: 0, - strategyKey: 'local', - displayName: 'Local' - }) - - // Load editors + enable default - await WIKI.models.editors.refreshEditorsFromDisk() - await WIKI.models.editors.query().patch({ isEnabled: true }).where('key', 'markdown') - - // Load loggers - await WIKI.models.loggers.refreshLoggersFromDisk() - - // Load renderers - await WIKI.models.renderers.refreshRenderersFromDisk() - - // Load search engines + enable default - await WIKI.models.searchEngines.refreshSearchEnginesFromDisk() - await WIKI.models.searchEngines.query().patch({ isEnabled: true }).where('key', 'db') - - // WIKI.telemetry.sendEvent('setup', 'install-loadedmodules') - - // Load storage targets - await WIKI.models.storage.refreshTargetsFromDisk() - - // Create root administrator - WIKI.logger.info('Creating root administrator...') - const adminUser = await WIKI.models.users.query().insert({ - email: req.body.adminEmail.toLowerCase(), - provider: 'local', - password: req.body.adminPassword, - name: 'Administrator', - locale: 'en', - defaultEditor: 'markdown', - tfaIsActive: false, - isActive: true, - isVerified: true - }) - await adminUser.$relatedQuery('groups').relate(adminGroup.id) - - // Create Guest account - WIKI.logger.info('Creating guest account...') - const guestUser = await WIKI.models.users.query().insert({ - provider: 'local', - email: 'guest@example.com', - name: 'Guest', - password: '', - locale: 'en', - defaultEditor: 'markdown', - tfaIsActive: false, - isSystem: true, - isActive: true, - isVerified: true - }) - await guestUser.$relatedQuery('groups').relate(guestGroup.id) - if (adminUser.id !== 1 || guestUser.id !== 2) { - throw new Error('Incorrect users auto-increment configuration! Should start at 0 and increment by 1. Contact your database administrator.') - } - - // Create site nav - - WIKI.logger.info('Creating default site navigation') - await WIKI.models.navigation.query().insert({ - key: 'site', - config: [ - { - locale: 'en', - items: [ - { - id: uuid(), - icon: 'mdi-home', - kind: 'link', - label: 'Home', - target: '/', - targetType: 'home', - visibilityMode: 'all', - visibilityGroups: null - } - ] - } - ] - }) - - WIKI.logger.info('Setup is complete!') - // WIKI.telemetry.sendEvent('setup', 'install-completed') - res.json({ - ok: true, - redirectPath: '/', - redirectPort: WIKI.config.port - }).end() - - if (WIKI.config.telemetry.isEnabled) { - await WIKI.telemetry.sendInstanceEvent('INSTALL') - } - - WIKI.config.setup = false - - WIKI.logger.info('Stopping Setup...') - WIKI.server.destroy(() => { - WIKI.logger.info('Setup stopped. Starting Wiki.js...') - _.delay(() => { - WIKI.kernel.bootMaster() - }, 1000) - }) - } catch (err) { - try { - await WIKI.models.knex('settings').truncate() - } catch (err) {} - WIKI.telemetry.sendError(err) - res.json({ ok: false, error: err.message }) - } - }) - - // ---------------------------------------- - // Error handling - // ---------------------------------------- - - app.use(function (req, res, next) { - const err = new Error('Not Found') - err.status = 404 - next(err) - }) - - app.use(function (err, req, res, next) { - res.status(err.status || 500) - res.send({ - message: err.message, - error: WIKI.IS_DEBUG ? err : {} - }) - WIKI.logger.error(err.message) - WIKI.telemetry.sendError(err) - }) - - // ---------------------------------------- - // Start HTTP server - // ---------------------------------------- - - WIKI.logger.info(`Starting HTTP server on port ${WIKI.config.port}...`) - - app.set('port', WIKI.config.port) - - WIKI.logger.info(`HTTP Server on port: [ ${WIKI.config.port} ]`) - WIKI.server = http.createServer(app) - WIKI.server.listen(WIKI.config.port, WIKI.config.bindIP) - - var openConnections = [] - - WIKI.server.on('connection', (conn) => { - let key = conn.remoteAddress + ':' + conn.remotePort - openConnections[key] = conn - conn.on('close', () => { - openConnections.splice(key, 1) - }) - }) - - WIKI.server.destroy = (cb) => { - WIKI.server.close(cb) - for (let key in openConnections) { - openConnections[key].destroy() - } - } - - WIKI.server.on('error', (error) => { - if (error.syscall !== 'listen') { - throw error - } - - switch (error.code) { - case 'EACCES': - WIKI.logger.error('Listening on port ' + WIKI.config.port + ' requires elevated privileges!') - return process.exit(1) - case 'EADDRINUSE': - WIKI.logger.error('Port ' + WIKI.config.port + ' is already in use!') - return process.exit(1) - default: - throw error - } - }) - - WIKI.server.on('listening', () => { - WIKI.logger.info('HTTP Server: [ RUNNING ]') - WIKI.logger.info('πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»πŸ”»') - WIKI.logger.info('') - WIKI.logger.info(`Browse to http://YOUR-SERVER-IP:${WIKI.config.port}/ to complete setup!`) - WIKI.logger.info('') - WIKI.logger.info('πŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”ΊπŸ”Ί') - }) -} diff --git a/server/themes/default/theme.yml b/server/themes/default/theme.yml deleted file mode 100644 index 42a9e274..00000000 --- a/server/themes/default/theme.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Default -author: requarks.io -site: https://wiki.requarks.io/ -version: 1.0.0 -requirements: - minimum: '>= 2.0.0' - maximum: '< 3.0.0' -props: - accentColor: - type: String - title: Accent Color - hint: Color used in the sidebar navigation and other elements. - order: 1 - default: blue darken-2 - control: color-material - tocPosition: - type: String - title: Table of Contents Position - hint: Select whether the table of contents is shown on the left, right or not at all. - order: 2 - default: left - enum: - - left - - right - - hidden diff --git a/server/themes/default/thumbnail.png b/server/themes/default/thumbnail.png deleted file mode 100644 index 489e3f83..00000000 Binary files a/server/themes/default/thumbnail.png and /dev/null differ diff --git a/server/views/admin.pug b/server/views/admin.pug index 3434fdf3..487740cd 100644 --- a/server/views/admin.pug +++ b/server/views/admin.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block body #root diff --git a/dev/templates/legacy.pug b/server/views/base.pug similarity index 80% rename from dev/templates/legacy.pug rename to server/views/base.pug index 14f9d489..b5d2dd8c 100644 --- a/dev/templates/legacy.pug +++ b/server/views/base.pug @@ -1,5 +1,5 @@ doctype html -html +html(lang=siteConfig.lang) head meta(http-equiv='X-UA-Compatible', content='IE=edge') meta(charset='UTF-8') @@ -21,12 +21,23 @@ html //- Favicon link(rel='apple-touch-icon', sizes='180x180', href='/_assets/favicons/apple-touch-icon.png') - link(rel='icon', type='image/png', sizes='192x192', href='/_assets/favicons/android-icon-192x192.png') + link(rel='icon', type='image/png', sizes='192x192', href='/_assets/favicons/android-chrome-192x192.png') link(rel='icon', type='image/png', sizes='32x32', href='/_assets/favicons/favicon-32x32.png') link(rel='icon', type='image/png', sizes='16x16', href='/_assets/favicons/favicon-16x16.png') link(rel='mask-icon', href='/_assets/favicons/safari-pinned-tab.svg', color='#1976d2') link(rel='manifest', href='/_assets/manifest.json') + //- Site Properties + script. + var siteId = "!{siteId}" + var siteConfig = !{JSON.stringify(siteConfig)} + var siteLangs = !{JSON.stringify(langs)} + + //- Dev Mode Warning + if devMode + script. + siteConfig.devMode = true + //- Icon Set if config.theming.iconset === 'fa' link( @@ -42,26 +53,24 @@ html ) //- CSS - <% for (var index in htmlWebpackPlugin.files.css) { %> - link( - type='text/css' - rel='stylesheet' - href='<%= htmlWebpackPlugin.files.css[index] %>' - ) - <% } %> - - script( - crossorigin='anonymous' - src='https://polyfill.io/v3/polyfill.min.js?features=EventSource' - ) + //- JS - <% for (var index in htmlWebpackPlugin.files.js) { %> + + + script( + type='text/javascript' + src='/_assets-legacy/js/runtime.js' + ) + + + script( type='text/javascript' - src='<%= htmlWebpackPlugin.files.js[index] %>' + src='/_assets-legacy/js/app.js' ) - <% } %> + + != analyticsCode.head diff --git a/server/views/editor.pug b/server/views/editor.pug index 0f0b64c0..b395cbec 100644 --- a/server/views/editor.pug +++ b/server/views/editor.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block head if injectCode.css diff --git a/server/views/error.pug b/server/views/error.pug index acc8e280..27d45321 100644 --- a/server/views/error.pug +++ b/server/views/error.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block body #root.is-fullscreen diff --git a/server/views/history.pug b/server/views/history.pug index 5adb9c57..02384329 100644 --- a/server/views/history.pug +++ b/server/views/history.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block head diff --git a/server/views/legacy/login.pug b/server/views/legacy/login.pug deleted file mode 100644 index cd519561..00000000 --- a/server/views/legacy/login.pug +++ /dev/null @@ -1,23 +0,0 @@ -extends master.pug - -block body - #root - .login-deprecated!= t('outdatedBrowserWarning', { modernBrowser: '' + t('modernBrowser') + '', interpolation: { escapeValue: false } }) - .login - .login-dialog - if err - .login-error= err.message - form(method='post', action='/login') - h1= config.title - select(name='strategy') - each str in formStrategies - option(value=str.key, selected)= str.title - input(type='text', name='user', placeholder=t('auth:fields.emailUser')) - input(type='password', name='pass', placeholder=t('auth:fields.password')) - button(type='submit')= t('auth:actions.login') - if socialStrategies.length - .login-social - h2= t('auth:orLoginUsingStrategy') - each str in socialStrategies - a.login-social-icon(href='/login/' + str.key, class=str.color) - != str.icon diff --git a/server/views/legacy/page.pug b/server/views/legacy/page.pug deleted file mode 100644 index 48e8ad5e..00000000 --- a/server/views/legacy/page.pug +++ /dev/null @@ -1,60 +0,0 @@ -extends master.pug - -block head - if injectCode.css - style(type='text/css')!= injectCode.css - if injectCode.head - != injectCode.head - -block body - #root - .header - span.header-title= siteConfig.title - span.header-deprecated!= t('outdatedBrowserWarning', { modernBrowser: '' + t('modernBrowser') + '', interpolation: { escapeValue: false } }) - span.header-login - if !isAuthenticated - a(href='/login', title='Login') - i.mdi.mdi-account-circle - else - a(href='/logout', title='Logout') - i.mdi.mdi-logout - .main - .sidebar - each navItem in sidebar - if navItem.k === 'link' - a.sidebar-link(href=navItem.t) - i.mdi(class=navItem.c) - span= navItem.l - else if navItem.k === 'divider' - .sidebar-divider - else if navItem.k === 'header' - .sidebar-title= navItem.l - .main-container - .page-header - .page-header-left - h1= page.title - h2= page.description - //- .page-header-right - //- .page-header-right-title Last edited by - //- .page-header-right-author= page.authorName - //- .page-header-right-updated= page.updatedAt - .page-contents.v-content - .contents - div!= page.render - if page.toc.length - .toc - .toc-title= t('page.toc') - each tocItem, tocIdx in page.toc - a.toc-tile(href=tocItem.anchor) - i.mdi.mdi-chevron-right - span= tocItem.title - if tocIdx < page.toc.length - 1 || tocItem.children.length - .toc-divider - each tocSubItem in tocItem.children - a.toc-tile.inset(href=tocSubItem.anchor) - i.mdi.mdi-chevron-right - span= tocSubItem.title - if tocIdx < page.toc.length - 1 - .toc-divider.inset - if injectCode.body - != injectCode.body diff --git a/server/views/login.pug b/server/views/login.pug index c0408cd9..80cc7395 100644 --- a/server/views/login.pug +++ b/server/views/login.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block body #root.is-fullscreen diff --git a/server/views/new.pug b/server/views/new.pug index 79080d20..f1487b34 100644 --- a/server/views/new.pug +++ b/server/views/new.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block body #root.is-fullscreen diff --git a/server/views/notfound.pug b/server/views/notfound.pug index d0d5d66e..f678c4dd 100644 --- a/server/views/notfound.pug +++ b/server/views/notfound.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block body #root.is-fullscreen diff --git a/server/views/page.pug b/server/views/page.pug index cc19fbae..4cfd3eba 100644 --- a/server/views/page.pug +++ b/server/views/page.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block head if injectCode.css diff --git a/server/views/profile.pug b/server/views/profile.pug index 084ae408..f0dd2560 100644 --- a/server/views/profile.pug +++ b/server/views/profile.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block body #root diff --git a/server/views/register.pug b/server/views/register.pug index 952885f8..a02e2c2e 100644 --- a/server/views/register.pug +++ b/server/views/register.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block body #root.is-fullscreen diff --git a/server/views/source.pug b/server/views/source.pug index c3cb1e95..59e9e6aa 100644 --- a/server/views/source.pug +++ b/server/views/source.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block head diff --git a/server/views/tags.pug b/server/views/tags.pug index 6443f0b4..f2f49f8d 100644 --- a/server/views/tags.pug +++ b/server/views/tags.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block body #root diff --git a/server/views/unauthorized.pug b/server/views/unauthorized.pug index 3a36ec69..02e5138e 100644 --- a/server/views/unauthorized.pug +++ b/server/views/unauthorized.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block body #root.is-fullscreen diff --git a/server/views/welcome.pug b/server/views/welcome.pug index 3be66e23..56b7693d 100644 --- a/server/views/welcome.pug +++ b/server/views/welcome.pug @@ -1,4 +1,4 @@ -extends master.pug +extends base.pug block body #root.is-fullscreen diff --git a/server/master.js b/server/web.js similarity index 91% rename from server/master.js rename to server/web.js index 7c6fd342..ba88ef9d 100644 --- a/server/master.js +++ b/server/web.js @@ -149,15 +149,20 @@ module.exports = async () => { // ---------------------------------------- app.use(async (req, res, next) => { + const currentSite = await WIKI.models.sites.getSiteByHostname({ hostname: req.hostname }) + if (!currentSite) { + return res.status(404).send('Site Not Found') + } + res.locals.siteConfig = { - title: WIKI.config.title, - theme: WIKI.config.theming.theme, - darkMode: WIKI.config.theming.darkMode, - lang: WIKI.config.lang.code, - rtl: WIKI.config.lang.rtl, - company: WIKI.config.company, - contentLicense: WIKI.config.contentLicense, - logoUrl: WIKI.config.logoUrl + id: currentSite.id, + title: currentSite.config.title, + darkMode: currentSite.config.theme.dark, + lang: currentSite.config.locale, + rtl: false, // TODO: handle RTL + company: currentSite.config.company, + contentLicense: currentSite.config.contentLicense, + logoUrl: currentSite.config.logoUrl } res.locals.langs = await WIKI.models.locales.getNavLocales({ cache: true }) res.locals.analyticsCode = await WIKI.models.analytics.getCode({ cache: true }) diff --git a/ux/.eslintrc.js b/ux/.eslintrc.js index 037260f2..e6f432a8 100644 --- a/ux/.eslintrc.js +++ b/ux/.eslintrc.js @@ -68,6 +68,7 @@ module.exports = { 'prefer-promise-reject-errors': 'off', 'no-unused-vars': 'off', + 'vue/multi-word-component-names': 'off', // allow debugger during development only 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' diff --git a/ux/index.html b/ux/index.html index ac7a142b..684144bb 100644 --- a/ux/index.html +++ b/ux/index.html @@ -8,6 +8,9 @@ Wiki.js + + + diff --git a/ux/src/router/routes.js b/ux/src/router/routes.js index 6598d5d4..c1e94be4 100644 --- a/ux/src/router/routes.js +++ b/ux/src/router/routes.js @@ -8,13 +8,13 @@ const routes = [ // { path: 'n/:editor?', component: () => import('../pages/Index.vue') } // ] // }, - // { - // path: '/login', - // component: () => import('../layouts/AuthLayout.vue'), - // children: [ - // { path: '', component: () => import('../pages/Login.vue') } - // ] - // }, + { + path: '/login', + component: () => import('../layouts/AuthLayout.vue'), + children: [ + { path: '', component: () => import('../pages/Login.vue') } + ] + }, // { // path: '/p', // component: () => import('../layouts/ProfileLayout.vue'), diff --git a/ux/src/stores/admin.js b/ux/src/stores/admin.js index 606d854b..e692f738 100644 --- a/ux/src/stores/admin.js +++ b/ux/src/stores/admin.js @@ -1,6 +1,6 @@ import { defineStore } from 'pinia' import gql from 'graphql-tag' -import cloneDeep from 'lodash/cloneDeep' +import { cloneDeep } from 'lodash-es' /* global APOLLO_CLIENT */ diff --git a/ux/src/stores/site.js b/ux/src/stores/site.js index 03fc733a..a631f236 100644 --- a/ux/src/stores/site.js +++ b/ux/src/stores/site.js @@ -1,6 +1,6 @@ import { defineStore } from 'pinia' import gql from 'graphql-tag' -import clone from 'lodash/clone' +import { clone } from 'lodash-es' export const useSiteStore = defineStore('site', { state: () => ({ diff --git a/ux/yarn.lock b/ux/yarn.lock index c4b1f9b4..bef90c4a 100644 --- a/ux/yarn.lock +++ b/ux/yarn.lock @@ -5,9 +5,9 @@ __metadata: version: 6 cacheKey: 8 -"@apollo/client@npm:3.6.8": - version: 3.6.8 - resolution: "@apollo/client@npm:3.6.8" +"@apollo/client@npm:3.6.9": + version: 3.6.9 + resolution: "@apollo/client@npm:3.6.9" dependencies: "@graphql-typed-document-node/core": ^3.1.1 "@wry/context": ^0.6.0 @@ -33,7 +33,7 @@ __metadata: optional: true subscriptions-transport-ws: optional: true - checksum: c29dd3f68952cf17229b72d39188e0d93ea672ae1e1615f90b1d95ba7553c6a03bc16dede7c13b23c60e9863d7ff183f56d62b233a761127000f544a490f63f7 + checksum: a3c037ef3465cb5d736d8495c9c2dcb9741e39d9c102f147b479af1923c5913f710981a311d1098b9969ebe87769b749c22274decb5977ad0619032e7ac2cf26 languageName: node linkType: hard @@ -130,7 +130,19 @@ __metadata: languageName: node linkType: hard -"@codemirror/commands@npm:6.0.0, @codemirror/commands@npm:6.x, @codemirror/commands@npm:^6.0.0": +"@codemirror/commands@npm:6.0.1": + version: 6.0.1 + resolution: "@codemirror/commands@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + checksum: 7b3b73596c13d256b267aa7e2a0dd1fb297426918e9e42135faa4280cc220ff66b0d4743cd6214b6ed2111eccf3c125d1f197fc8585c48c45b386210d53673dd + languageName: node + linkType: hard + +"@codemirror/commands@npm:6.x, @codemirror/commands@npm:^6.0.0": version: 6.0.0 resolution: "@codemirror/commands@npm:6.0.0" dependencies: @@ -225,7 +237,22 @@ __metadata: languageName: node linkType: hard -"@codemirror/lang-html@npm:6.0.0, @codemirror/lang-html@npm:^6.0.0": +"@codemirror/lang-html@npm:6.1.0": + version: 6.1.0 + resolution: "@codemirror/lang-html@npm:6.1.0" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/lang-css": ^6.0.0 + "@codemirror/lang-javascript": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/html": ^1.0.0 + checksum: 7a526c9b626d034d6b340d1dfe44061e5e3af87c875709a69de830ed102ce32b71ed733ba0ff02b78388371497907970e163ec84f0ae90a58a807122a17348e0 + languageName: node + linkType: hard + +"@codemirror/lang-html@npm:^6.0.0": version: 6.0.0 resolution: "@codemirror/lang-html@npm:6.0.0" dependencies: @@ -240,7 +267,22 @@ __metadata: languageName: node linkType: hard -"@codemirror/lang-javascript@npm:6.0.0, @codemirror/lang-javascript@npm:^6.0.0": +"@codemirror/lang-javascript@npm:6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-javascript@npm:6.0.1" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/lint": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/javascript": ^1.0.0 + checksum: 630573877ec3f2fdaedf3c7bf3bf9a8a7645f76bde52ad2d4c51cb1e173b49ccda5d7944f98521ff5f723ec12ae196c03a9f044fe91e50a5bf615d3b867966cf + languageName: node + linkType: hard + +"@codemirror/lang-javascript@npm:^6.0.0": version: 6.0.0 resolution: "@codemirror/lang-javascript@npm:6.0.0" dependencies: @@ -424,7 +466,18 @@ __metadata: languageName: node linkType: hard -"@codemirror/view@npm:6.0.1, @codemirror/view@npm:6.x, @codemirror/view@npm:^6.0.0": +"@codemirror/view@npm:6.0.2": + version: 6.0.2 + resolution: "@codemirror/view@npm:6.0.2" + dependencies: + "@codemirror/state": ^6.0.0 + style-mod: ^4.0.0 + w3c-keyname: ^2.2.4 + checksum: a9dbc2b97cb1aa8d88bd0cdcc9560660c89ecff93fd86b6ecdda920a6bd22b0e1ccf72c010ac743d7daf4185a03c78bafecd9860e336585bbcca0b93dde55566 + languageName: node + linkType: hard + +"@codemirror/view@npm:6.x, @codemirror/view@npm:^6.0.0": version: 6.0.1 resolution: "@codemirror/view@npm:6.0.1" dependencies: @@ -830,9 +883,9 @@ __metadata: languageName: node linkType: hard -"@quasar/app-vite@npm:1.0.2": - version: 1.0.2 - resolution: "@quasar/app-vite@npm:1.0.2" +"@quasar/app-vite@npm:1.0.4": + version: 1.0.4 + resolution: "@quasar/app-vite@npm:1.0.4" dependencies: "@quasar/fastclick": 1.1.5 "@quasar/vite-plugin": ^1.0.9 @@ -848,7 +901,7 @@ __metadata: cross-spawn: ^7.0.3 dot-prop: 6.0.1 elementtree: 0.1.7 - esbuild: 0.14.29 + esbuild: 0.14.47 express: ^4.17.3 fast-glob: 3.2.11 fs-extra: ^10.0.1 @@ -868,7 +921,7 @@ __metadata: semver: ^7.3.5 serialize-javascript: ^6.0.0 table: ^6.8.0 - vite: 2.9.1 + vite: 2.9.13 webpack-merge: ^5.8.0 peerDependencies: electron-builder: ^22.0.0 @@ -895,14 +948,14 @@ __metadata: optional: true bin: quasar: bin/quasar - checksum: b6fac0061299605f9c77a0ab683298e476c4b606bdafe87ca3db871e88a65017e8079703df0300191b4f7a9b5b067cde7935913041ac546c98b1dc0309d3fec9 + checksum: 531e1a640602f71947caa10595076c10a1ff2b80b676c641f088399245b66cd2851d8c365fc7cdeda71bf214b33fa14600fdfb22cf40d37be7ab7a7622052744 languageName: node linkType: hard -"@quasar/extras@npm:1.14.0": - version: 1.14.0 - resolution: "@quasar/extras@npm:1.14.0" - checksum: 60eacf3995172a11c59af6266461f665219488e33e85ab99fb293365fdd95e3dda5427a5ab548b7a5058ee0e3f5d4a6045ad8feeb99e1b0ad9b37f1cbd8d2100 +"@quasar/extras@npm:1.14.2": + version: 1.14.2 + resolution: "@quasar/extras@npm:1.14.2" + checksum: 600305d8fb641eca6990ef1527ce544c35835a4af088b58263851b70df444d6890e134dc01cb7da3f256ec8b5ae369ce2d5c29ddadff2452fff6e080e0411905 languageName: node linkType: hard @@ -1896,6 +1949,15 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + "ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" @@ -2043,24 +2105,6 @@ __metadata: languageName: node linkType: hard -"autoprefixer@npm:10.4.7": - version: 10.4.7 - resolution: "autoprefixer@npm:10.4.7" - dependencies: - browserslist: ^4.20.3 - caniuse-lite: ^1.0.30001335 - fraction.js: ^4.2.0 - normalize-range: ^0.1.2 - picocolors: ^1.0.0 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.1.0 - bin: - autoprefixer: bin/autoprefixer - checksum: 0e55d0d19806c672ec0c79cc23c27cf77e90edf2600670735266ba33ec5294458f404baaa2f7cd4cfe359cf7a97b3c86f01886bdbdc129a4f2f76ca5977a91af - languageName: node - linkType: hard - "babel-walk@npm:3.0.0-canary-5": version: 3.0.0-canary-5 resolution: "babel-walk@npm:3.0.0-canary-5" @@ -2155,25 +2199,21 @@ __metadata: languageName: node linkType: hard -"browser-fs-access@npm:0.29.6": - version: 0.29.6 - resolution: "browser-fs-access@npm:0.29.6" - checksum: 9ee904e3a62cd92b60de1aa3121b5d46c2700e1ee09e14d27681563c9772181c6d219a4f80865856b707a3e68b09bd0c20821f06490096311fa1a0b91d2d53a8 +"browser-fs-access@npm:0.30.2": + version: 0.30.2 + resolution: "browser-fs-access@npm:0.30.2" + checksum: 4fa53ebe2e5ea5fb2df39f2ce78ae67cf3b0710877f123d57d8a9f7be171e27b8c8413079fe023612aa05d27549c38ff68a94f694750fd766cf9ecd80067d822 languageName: node linkType: hard -"browserslist@npm:^4.20.3": - version: 4.20.3 - resolution: "browserslist@npm:4.20.3" +"browserlist@npm:latest": + version: 1.0.1 + resolution: "browserlist@npm:1.0.1" dependencies: - caniuse-lite: ^1.0.30001332 - electron-to-chromium: ^1.4.118 - escalade: ^3.1.1 - node-releases: ^2.0.3 - picocolors: ^1.0.0 + chalk: ^2.4.1 bin: - browserslist: cli.js - checksum: 1e4b719ac2ca0fe235218a606e8b8ef16b8809e0973b924158c39fbc435a0b0fe43437ea52dd6ef5ad2efcb83fcb07431244e472270177814217f7c563651f7d + browserlist: ./cli.js + checksum: db4dc273b59637f4e716676978d2c8a2431fb021860ec8ea9552eebe24bff67e955630d42c3995a9b03c1606819b18fb032ab943103b54b830933ec4d695e516 languageName: node linkType: hard @@ -2270,17 +2310,14 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001332": - version: 1.0.30001334 - resolution: "caniuse-lite@npm:1.0.30001334" - checksum: 1a1c783942d53ca37dc3dbdd7c4a6f7994996d0bfd178d4f4cdd714c6b09d9d9f48a3a2452e009e8203aba4b7a2da43f3d9d88060668a46fc237dbe0d39358a3 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001335": - version: 1.0.30001341 - resolution: "caniuse-lite@npm:1.0.30001341" - checksum: 7262b093fb0bf49dbc5328418f5ce4e3dbb0b13e39c015f986ba1807634c123ac214efc94df7d095a336f57f86852b4b63ee61838f18dcc3a4a35f87b390c8f5 +"chalk@npm:^2.4.1": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 languageName: node linkType: hard @@ -2422,9 +2459,9 @@ __metadata: languageName: node linkType: hard -"codemirror@npm:6.0.0": - version: 6.0.0 - resolution: "codemirror@npm:6.0.0" +"codemirror@npm:6.0.1": + version: 6.0.1 + resolution: "codemirror@npm:6.0.1" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -2433,7 +2470,16 @@ __metadata: "@codemirror/search": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 - checksum: 42fb2b5ac5d4b8616a733de5efd7913764c1d13dcc27f732af5ed5e98f657a53ab5549437b53d73ed89d004423141ee65612a5e54c451538ef6d75afed4cd3e2 + checksum: 1a78f7077ac5801bdbff162aa0c61bf2b974603c7e9a477198c3ce50c789af674a061d7c293c58b73807eda345c2b5228c38ad2aabb9319d552d5486f785cbef + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 languageName: node linkType: hard @@ -2446,6 +2492,13 @@ __metadata: languageName: node linkType: hard +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + "color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" @@ -2789,13 +2842,6 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.118": - version: 1.4.137 - resolution: "electron-to-chromium@npm:1.4.137" - checksum: 639d7b94906efafcf363519c3698eecc44be46755a6a5cdc9088954329978866cc93fbd57e08b97290599b68d5226243d21de9fa50be416b8a5d3fa8fd42c3a0 - languageName: node - linkType: hard - "elementtree@npm:0.1.7": version: 0.1.7 resolution: "elementtree@npm:0.1.7" @@ -2890,13 +2936,6 @@ __metadata: languageName: node linkType: hard -"esbuild-android-64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-android-64@npm:0.14.29" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - "esbuild-android-64@npm:0.14.34": version: 0.14.34 resolution: "esbuild-android-64@npm:0.14.34" @@ -2904,10 +2943,10 @@ __metadata: languageName: node linkType: hard -"esbuild-android-arm64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-android-arm64@npm:0.14.29" - conditions: os=android & cpu=arm64 +"esbuild-android-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-android-64@npm:0.14.47" + conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -2918,10 +2957,10 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-darwin-64@npm:0.14.29" - conditions: os=darwin & cpu=x64 +"esbuild-android-arm64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-android-arm64@npm:0.14.47" + conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -2932,10 +2971,10 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-arm64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-darwin-arm64@npm:0.14.29" - conditions: os=darwin & cpu=arm64 +"esbuild-darwin-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-darwin-64@npm:0.14.47" + conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -2946,10 +2985,10 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-freebsd-64@npm:0.14.29" - conditions: os=freebsd & cpu=x64 +"esbuild-darwin-arm64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-darwin-arm64@npm:0.14.47" + conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -2960,10 +2999,10 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-arm64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-freebsd-arm64@npm:0.14.29" - conditions: os=freebsd & cpu=arm64 +"esbuild-freebsd-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-freebsd-64@npm:0.14.47" + conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -2974,10 +3013,10 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-32@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-linux-32@npm:0.14.29" - conditions: os=linux & cpu=ia32 +"esbuild-freebsd-arm64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-freebsd-arm64@npm:0.14.47" + conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -2988,10 +3027,10 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-linux-64@npm:0.14.29" - conditions: os=linux & cpu=x64 +"esbuild-linux-32@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-32@npm:0.14.47" + conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -3002,10 +3041,10 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-linux-arm64@npm:0.14.29" - conditions: os=linux & cpu=arm64 +"esbuild-linux-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-64@npm:0.14.47" + conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -3016,10 +3055,10 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-linux-arm@npm:0.14.29" - conditions: os=linux & cpu=arm +"esbuild-linux-arm64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-arm64@npm:0.14.47" + conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -3030,10 +3069,10 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-mips64le@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-linux-mips64le@npm:0.14.29" - conditions: os=linux & cpu=mips64el +"esbuild-linux-arm@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-arm@npm:0.14.47" + conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -3044,10 +3083,10 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-ppc64le@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-linux-ppc64le@npm:0.14.29" - conditions: os=linux & cpu=ppc64 +"esbuild-linux-mips64le@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-mips64le@npm:0.14.47" + conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -3058,10 +3097,10 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-riscv64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-linux-riscv64@npm:0.14.29" - conditions: os=linux & cpu=riscv64 +"esbuild-linux-ppc64le@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-ppc64le@npm:0.14.47" + conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -3072,10 +3111,10 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-s390x@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-linux-s390x@npm:0.14.29" - conditions: os=linux & cpu=s390x +"esbuild-linux-riscv64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-riscv64@npm:0.14.47" + conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -3086,10 +3125,10 @@ __metadata: languageName: node linkType: hard -"esbuild-netbsd-64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-netbsd-64@npm:0.14.29" - conditions: os=netbsd & cpu=x64 +"esbuild-linux-s390x@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-s390x@npm:0.14.47" + conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -3100,10 +3139,10 @@ __metadata: languageName: node linkType: hard -"esbuild-openbsd-64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-openbsd-64@npm:0.14.29" - conditions: os=openbsd & cpu=x64 +"esbuild-netbsd-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-netbsd-64@npm:0.14.47" + conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -3114,10 +3153,10 @@ __metadata: languageName: node linkType: hard -"esbuild-sunos-64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-sunos-64@npm:0.14.29" - conditions: os=sunos & cpu=x64 +"esbuild-openbsd-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-openbsd-64@npm:0.14.47" + conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -3128,10 +3167,10 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-32@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-windows-32@npm:0.14.29" - conditions: os=win32 & cpu=ia32 +"esbuild-sunos-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-sunos-64@npm:0.14.47" + conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -3142,10 +3181,10 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-windows-64@npm:0.14.29" - conditions: os=win32 & cpu=x64 +"esbuild-windows-32@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-windows-32@npm:0.14.47" + conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -3156,10 +3195,10 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-arm64@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild-windows-arm64@npm:0.14.29" - conditions: os=win32 & cpu=arm64 +"esbuild-windows-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-windows-64@npm:0.14.47" + conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3170,30 +3209,37 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:0.14.29": - version: 0.14.29 - resolution: "esbuild@npm:0.14.29" - dependencies: - esbuild-android-64: 0.14.29 - esbuild-android-arm64: 0.14.29 - esbuild-darwin-64: 0.14.29 - esbuild-darwin-arm64: 0.14.29 - esbuild-freebsd-64: 0.14.29 - esbuild-freebsd-arm64: 0.14.29 - esbuild-linux-32: 0.14.29 - esbuild-linux-64: 0.14.29 - esbuild-linux-arm: 0.14.29 - esbuild-linux-arm64: 0.14.29 - esbuild-linux-mips64le: 0.14.29 - esbuild-linux-ppc64le: 0.14.29 - esbuild-linux-riscv64: 0.14.29 - esbuild-linux-s390x: 0.14.29 - esbuild-netbsd-64: 0.14.29 - esbuild-openbsd-64: 0.14.29 - esbuild-sunos-64: 0.14.29 - esbuild-windows-32: 0.14.29 - esbuild-windows-64: 0.14.29 - esbuild-windows-arm64: 0.14.29 +"esbuild-windows-arm64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-windows-arm64@npm:0.14.47" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"esbuild@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild@npm:0.14.47" + dependencies: + esbuild-android-64: 0.14.47 + esbuild-android-arm64: 0.14.47 + esbuild-darwin-64: 0.14.47 + esbuild-darwin-arm64: 0.14.47 + esbuild-freebsd-64: 0.14.47 + esbuild-freebsd-arm64: 0.14.47 + esbuild-linux-32: 0.14.47 + esbuild-linux-64: 0.14.47 + esbuild-linux-arm: 0.14.47 + esbuild-linux-arm64: 0.14.47 + esbuild-linux-mips64le: 0.14.47 + esbuild-linux-ppc64le: 0.14.47 + esbuild-linux-riscv64: 0.14.47 + esbuild-linux-s390x: 0.14.47 + esbuild-netbsd-64: 0.14.47 + esbuild-openbsd-64: 0.14.47 + esbuild-sunos-64: 0.14.47 + esbuild-windows-32: 0.14.47 + esbuild-windows-64: 0.14.47 + esbuild-windows-arm64: 0.14.47 dependenciesMeta: esbuild-android-64: optional: true @@ -3237,7 +3283,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 3066b9f5bc33b56c22fa1b14f6fd6b7cee292858b042d5f9051c87e57472a134045e653526612ea75fa4dfed3ed767b80c35165b819b4f29d92bf2e69c5fe37d + checksum: 77a8bff8c3fe52dc9d2823448843b0f53c9a9f3701e3637a54e396270c9ca04cc46a4b08ef86cbaa8d202854e02c790f61683bfa75ebff540b1e24414f536e91 languageName: node linkType: hard @@ -3502,9 +3548,9 @@ __metadata: languageName: node linkType: hard -"eslint@npm:8.18.0": - version: 8.18.0 - resolution: "eslint@npm:8.18.0" +"eslint@npm:8.19.0": + version: 8.19.0 + resolution: "eslint@npm:8.19.0" dependencies: "@eslint/eslintrc": ^1.3.0 "@humanwhocodes/config-array": ^0.9.2 @@ -3543,7 +3589,7 @@ __metadata: v8-compile-cache: ^2.0.3 bin: eslint: bin/eslint.js - checksum: d9b4b7488a9cee97608343cbb5ac652d3f316436f95ef0800cd9497c1c6f877b655a3275817989c02f1ff0d5dfd1959c5092af9251c7e3fcf60659da37752a10 + checksum: 0bc9df1a3a09dcd5a781ec728f280aa8af3ab19c2d1f14e2668b5ee5b8b1fb0e72dde5c3acf738e7f4281685fb24ec149b6154255470b06cf41de76350bca7a4 languageName: node linkType: hard @@ -3748,10 +3794,10 @@ __metadata: languageName: node linkType: hard -"filesize@npm:9.0.9": - version: 9.0.9 - resolution: "filesize@npm:9.0.9" - checksum: 2901b5eb3abd9d553ca52fafcebb159c60d7c11489d58703feb8850afd3dba7f619cfce61450bab52b846c12f9c4f3cb7be591985eada5af3eea82b04a23faf9 +"filesize@npm:9.0.11": + version: 9.0.11 + resolution: "filesize@npm:9.0.11" + checksum: 7e8a9f9a4089e3ee29de64c241b50db8db4008351ace959873cb950bac0c2e1e09f4b45f42eaed8acd589a895dde978ed199e7a9982902fa06ca0be48e5ea92d languageName: node linkType: hard @@ -3819,13 +3865,6 @@ __metadata: languageName: node linkType: hard -"fraction.js@npm:^4.2.0": - version: 4.2.0 - resolution: "fraction.js@npm:4.2.0" - checksum: 8c76a6e21dedea87109d6171a0ac77afa14205794a565d71cb10d2925f629a3922da61bf45ea52dbc30bce4d8636dc0a27213a88cbd600eab047d82f9a3a94c5 - languageName: node - linkType: hard - "fresh@npm:0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" @@ -4040,6 +4079,13 @@ __metadata: languageName: node linkType: hard +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + "has-flag@npm:^4.0.0": version: 4.0.0 resolution: "has-flag@npm:4.0.0" @@ -4791,7 +4837,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.21, lodash@npm:^4.17.10, lodash@npm:^4.17.20, lodash@npm:^4.17.21": +"lodash@npm:^4.17.10, lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -5117,12 +5163,12 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.3": - version: 3.3.3 - resolution: "nanoid@npm:3.3.3" +"nanoid@npm:^3.3.4": + version: 3.3.4 + resolution: "nanoid@npm:3.3.4" bin: nanoid: bin/nanoid.cjs - checksum: ada019402a07464a694553c61d2dca8a4353645a7d92f2830f0d487fedff403678a0bee5323a46522752b2eab95a0bc3da98b6cccaa7c0c55cd9975130e6d6f0 + checksum: 2fddd6dee994b7676f008d3ffa4ab16035a754f4bb586c61df5a22cf8c8c94017aadd360368f47d653829e0569a92b129979152ff97af23a558331e47e37cd9c languageName: node linkType: hard @@ -5169,13 +5215,6 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.3": - version: 2.0.4 - resolution: "node-releases@npm:2.0.4" - checksum: b32d6c2032c7b169ae3938b416fc50f123f5bd577d54a79b2ae201febf27b22846b01c803dd35ac8689afe840f8ba4e5f7154723db629b80f359836b6707b92f - languageName: node - linkType: hard - "nopt@npm:^5.0.0": version: 5.0.0 resolution: "nopt@npm:5.0.0" @@ -5194,13 +5233,6 @@ __metadata: languageName: node linkType: hard -"normalize-range@npm:^0.1.2": - version: 0.1.2 - resolution: "normalize-range@npm:0.1.2" - checksum: 9b2f14f093593f367a7a0834267c24f3cb3e887a2d9809c77d8a7e5fd08738bcd15af46f0ab01cc3a3d660386f015816b5c922cea8bf2ee79777f40874063184 - languageName: node - linkType: hard - "npmlog@npm:^6.0.0": version: 6.0.2 resolution: "npmlog@npm:6.0.2" @@ -5515,32 +5547,25 @@ __metadata: languageName: node linkType: hard -"postcss-value-parser@npm:^4.2.0": - version: 4.2.0 - resolution: "postcss-value-parser@npm:4.2.0" - checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f - languageName: node - linkType: hard - -"postcss@npm:*": - version: 8.4.13 - resolution: "postcss@npm:8.4.13" +"postcss@npm:^8.1.10, postcss@npm:^8.4.12, postcss@npm:^8.4.4": + version: 8.4.12 + resolution: "postcss@npm:8.4.12" dependencies: - nanoid: ^3.3.3 + nanoid: ^3.3.1 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 514fb3552805a5d039a2d6b4df3e73f657001716ca93c0d57e6067b0473abdea70276d80afc96005c9aaff82ed5d98062bd97724d3f47ca400fba0b5e9e436ed + checksum: 248e3d0f9bbb8efaafcfda7f91627a29bdc9a19f456896886330beb28c5abea0e14c7901b35191928602e2eccbed496b1e94097d27a0b2a980854cd00c7a835f languageName: node linkType: hard -"postcss@npm:^8.1.10, postcss@npm:^8.4.12, postcss@npm:^8.4.4": - version: 8.4.12 - resolution: "postcss@npm:8.4.12" +"postcss@npm:^8.4.13": + version: 8.4.14 + resolution: "postcss@npm:8.4.14" dependencies: - nanoid: ^3.3.1 + nanoid: ^3.3.4 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 248e3d0f9bbb8efaafcfda7f91627a29bdc9a19f456896886330beb28c5abea0e14c7901b35191928602e2eccbed496b1e94097d27a0b2a980854cd00c7a835f + checksum: fe58766ff32e4becf65a7d57678995cfd239df6deed2fe0557f038b47c94e4132e7e5f68b5aa820c13adfec32e523b693efaeb65798efb995ce49ccd83953816 languageName: node linkType: hard @@ -5870,10 +5895,10 @@ __metadata: languageName: node linkType: hard -"quasar@npm:2.7.3": - version: 2.7.3 - resolution: "quasar@npm:2.7.3" - checksum: 42ae066c7a7e477731e3063bfa6b097bc89a670dac4781dd3e72d3c16e0db61a909f09eea21ef342592953fd6167f80a4c9add20722d4df0229616d3a86f5810 +"quasar@npm:2.7.4": + version: 2.7.4 + resolution: "quasar@npm:2.7.4" + checksum: f527377c1f789f013a37aa9db023aa5c1680ed31c13eb05baa07f13c74ee2ddf97e5d1dac996cce4ecb9b8e5b4fd3101d115b458f10dede1776b7fc0c7adf7bf languageName: node linkType: hard @@ -6487,6 +6512,15 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + "supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" @@ -6783,30 +6817,30 @@ __metadata: version: 0.0.0-use.local resolution: "ux@workspace:." dependencies: - "@apollo/client": 3.6.8 + "@apollo/client": 3.6.9 "@codemirror/autocomplete": 6.0.2 "@codemirror/basic-setup": 0.20.0 "@codemirror/closebrackets": 0.19.2 - "@codemirror/commands": 6.0.0 + "@codemirror/commands": 6.0.1 "@codemirror/comment": 0.19.1 "@codemirror/fold": 0.19.4 "@codemirror/gutter": 0.19.9 "@codemirror/highlight": 0.19.8 "@codemirror/history": 0.19.2 "@codemirror/lang-css": 6.0.0 - "@codemirror/lang-html": 6.0.0 - "@codemirror/lang-javascript": 6.0.0 + "@codemirror/lang-html": 6.1.0 + "@codemirror/lang-javascript": 6.0.1 "@codemirror/lang-json": 6.0.0 "@codemirror/lang-markdown": 6.0.0 "@codemirror/matchbrackets": 0.19.4 "@codemirror/search": 6.0.0 "@codemirror/state": 6.0.1 "@codemirror/tooltip": 0.19.16 - "@codemirror/view": 6.0.1 + "@codemirror/view": 6.0.2 "@intlify/vite-plugin-vue-i18n": 3.4.0 "@lezer/common": 1.0.0 - "@quasar/app-vite": 1.0.2 - "@quasar/extras": 1.14.0 + "@quasar/app-vite": 1.0.4 + "@quasar/extras": 1.14.2 "@tiptap/core": 2.0.0-beta.176 "@tiptap/extension-code-block": 2.0.0-beta.37 "@tiptap/extension-code-block-lowlight": 2.0.0-beta.68 @@ -6834,31 +6868,30 @@ __metadata: "@types/lodash": 4.14.182 "@vue/apollo-option": 4.0.0-alpha.17 apollo-upload-client: 17.0.0 - autoprefixer: 10.4.7 - browser-fs-access: 0.29.6 + browser-fs-access: 0.30.2 + browserlist: latest clipboard: 2.0.11 - codemirror: 6.0.0 - eslint: 8.18.0 + codemirror: 6.0.1 + eslint: 8.19.0 eslint-config-standard: 17.0.0 eslint-plugin-import: 2.26.0 eslint-plugin-n: 15.2.3 eslint-plugin-promise: 6.0.0 eslint-plugin-vue: 9.1.1 - filesize: 9.0.9 + filesize: 9.0.11 filesize-parser: 1.5.0 graphql: 16.5.0 graphql-tag: 2.12.6 js-cookie: 3.0.1 jwt-decode: 3.1.2 - lodash: 4.17.21 lodash-es: 4.17.21 luxon: 2.4.0 pinia: 2.0.14 pug: 3.0.2 - quasar: 2.7.3 + quasar: 2.7.4 tippy.js: 6.3.7 uuid: 8.3.2 - v-network-graph: 0.5.19 + v-network-graph: 0.6.3 vue: 3.2.37 vue-codemirror: 6.0.0 vue-i18n: 9.1.10 @@ -6868,16 +6901,16 @@ __metadata: languageName: unknown linkType: soft -"v-network-graph@npm:0.5.19": - version: 0.5.19 - resolution: "v-network-graph@npm:0.5.19" +"v-network-graph@npm:0.6.3": + version: 0.6.3 + resolution: "v-network-graph@npm:0.6.3" dependencies: "@dash14/svg-pan-zoom": ^3.6.8 mitt: ^3.0.0 peerDependencies: d3-force: ^3.0.0 vue: ^3.2.31 - checksum: 98be123d78cd68454bd2d64a13678031c8b7cdea8610698d4211bf5b56e740df5fc367a75c23e823417385e08609c9b48785e4116aff2046208344f636a3f5a1 + checksum: cecae746aaf6fd0f480b0a251b4d50dab89a16e88420c7ffd2de0fe5c5fb32a72cb19f94c3b6a19a4e83110fa0a136635c148b5231988c29e807dadb877f691a languageName: node linkType: hard @@ -6924,13 +6957,13 @@ __metadata: languageName: node linkType: hard -"vite@npm:2.9.1": - version: 2.9.1 - resolution: "vite@npm:2.9.1" +"vite@npm:2.9.13": + version: 2.9.13 + resolution: "vite@npm:2.9.13" dependencies: esbuild: ^0.14.27 fsevents: ~2.3.2 - postcss: ^8.4.12 + postcss: ^8.4.13 resolve: ^1.22.0 rollup: ^2.59.0 peerDependencies: @@ -6949,7 +6982,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 0f0ac9337fa5c17faa4a59831a2df17475563b23a6162e86b2b60b19835ca1277f3249ea7a6608880354b39caf05779e9bad1e3b1f5b27010deced224aae47ea + checksum: a5e501b920a448c352e9b3836019dea56c523535f8e8540160708c2e164d84da6655ae39abbba1e2888092f5c6cd03dd06279852422359b51be601914645f49f languageName: node linkType: hard