feat: login screen UI + server code cleanup

pull/5698/head
Nicolas Giard 2 years ago
parent 1a720c918c
commit d9dbd0f62f
No known key found for this signature in database
GPG Key ID: 85061B8F9D55B7C8

@ -8,7 +8,7 @@ trim_trailing_whitespace = true
end_of_line = lf end_of_line = lf
insert_final_newline = true insert_final_newline = true
[*.{jade,pug,md}] [*.{pug,md}]
trim_trailing_whitespace = false trim_trailing_whitespace = false
[Makefile] [Makefile]

@ -1 +0,0 @@
v12.16.3

@ -47,7 +47,7 @@ store.commit('user/REFRESH_AUTH')
// Initialize Apollo Client (GraphQL) // 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([ const graphQLLink = ApolloLink.from([
new ErrorLink(({ graphQLErrors, networkError }) => { new ErrorLink(({ graphQLErrors, networkError }) => {

@ -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)

@ -662,26 +662,34 @@ export default {
apollo: { apollo: {
strategies: { strategies: {
query: gql` query: gql`
{ query loginFetchSiteStrategies(
authentication { $siteId: UUID
activeStrategies(enabledOnly: true) { ) {
authStrategies(
siteId: $siteId
enabledOnly: true
) {
key
strategy {
key key
strategy { logo
key color
logo icon
color useForm
icon usernameType
useForm
usernameType
}
displayName
order
selfRegistration
} }
displayName
order
selfRegistration
} }
} }
`, `,
update: (data) => _.sortBy(data.authentication.activeStrategies, ['order']), variables () {
return {
siteId: siteConfig.id
}
},
update: (data) => _.sortBy(data.authStrategies, ['order']),
watchLoading (isLoading) { watchLoading (isLoading) {
this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'login-strategies-refresh') this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'login-strategies-refresh')
} }

@ -1,4 +0,0 @@
require('./scss/legacy.scss')
require('./scss/fonts/default.scss')
window.WIKI = 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')

@ -60,7 +60,7 @@ const init = {
}, },
async reload() { async reload() {
console.warn(chalk.yellow('--- Gracefully stopping server...')) 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...')) console.warn(chalk.yellow('--- Purging node modules cache...'))

@ -29,6 +29,7 @@ html(lang=siteConfig.lang)
//- Site Properties //- Site Properties
script. script.
var siteId = "!{siteId}"
var siteConfig = !{JSON.stringify(siteConfig)} var siteConfig = !{JSON.stringify(siteConfig)}
var siteLangs = !{JSON.stringify(langs)} var siteLangs = !{JSON.stringify(langs)}

@ -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)

@ -24,9 +24,7 @@ fs.emptyDirSync(path.join(process.cwd(), 'assets-legacy'))
module.exports = { module.exports = {
mode: 'development', mode: 'development',
entry: { entry: {
app: ['./client/index-app.js', 'webpack-hot-middleware/client'], 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']
}, },
output: { output: {
path: path.join(process.cwd(), 'assets-legacy'), path: path.join(process.cwd(), 'assets-legacy'),
@ -197,25 +195,10 @@ module.exports = {
] ]
}), }),
new HtmlWebpackPlugin({ new HtmlWebpackPlugin({
template: 'dev/templates/master.pug', template: 'dev/templates/base.pug',
filename: '../server/views/master.pug', filename: '../server/views/base.pug',
hash: false, hash: false,
inject: 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']
}), }),
new HtmlWebpackPugPlugin(), new HtmlWebpackPugPlugin(),
new WebpackBarPlugin({ new WebpackBarPlugin({

@ -29,9 +29,7 @@ fs.emptyDirSync(path.join(process.cwd(), 'assets-legacy'))
module.exports = { module.exports = {
mode: 'production', mode: 'production',
entry: { entry: {
app: './client/index-app.js', app: './client/index-app.js'
legacy: './client/index-legacy.js',
setup: './client/index-setup.js'
}, },
output: { output: {
path: path.join(process.cwd(), 'assets-legacy'), path: path.join(process.cwd(), 'assets-legacy'),
@ -208,25 +206,10 @@ module.exports = {
chunkFilename: 'css/[name].[chunkhash].css' chunkFilename: 'css/[name].[chunkhash].css'
}), }),
new HtmlWebpackPlugin({ new HtmlWebpackPlugin({
template: 'dev/templates/master.pug', template: 'dev/templates/base.pug',
filename: '../server/views/master.pug', filename: '../server/views/base.pug',
hash: false, hash: false,
inject: 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']
}), }),
new HtmlWebpackPugPlugin(), new HtmlWebpackPugPlugin(),
new ScriptExtHtmlWebpackPlugin({ new ScriptExtHtmlWebpackPlugin({

@ -8,7 +8,7 @@
"scripts": { "scripts": {
"start": "node server", "start": "node server",
"dev": "nodemon 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", "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", "test": "eslint --format codeframe --ext .js,.vue . && pug-lint server/views && jest",
"cypress:open": "cypress open" "cypress:open": "cypress open"

@ -24,14 +24,13 @@ module.exports = {
process.exit(1) process.exit(1)
} }
this.bootMaster() this.bootWeb()
}, },
/** /**
* Pre-Master Boot Sequence * Pre-Web Boot Sequence
*/ */
async preBootMaster() { async preBootWeb() {
try { try {
await this.initTelemetry()
WIKI.sideloader = await require('./sideloader').init() WIKI.sideloader = await require('./sideloader').init()
WIKI.cache = require('./cache').init() WIKI.cache = require('./cache').init()
WIKI.scheduler = require('./scheduler').init() WIKI.scheduler = require('./scheduler').init()
@ -48,22 +47,22 @@ module.exports = {
} }
}, },
/** /**
* Boot Master Process * Boot Web Process
*/ */
async bootMaster() { async bootWeb() {
try { try {
await this.preBootMaster() await this.preBootWeb()
await require('../master')() await require('../web')()
this.postBootMaster() this.postBootWeb()
} catch (err) { } catch (err) {
WIKI.logger.error(err) WIKI.logger.error(err)
process.exit(1) process.exit(1)
} }
}, },
/** /**
* Post-Master Boot Sequence * Post-Web Boot Sequence
*/ */
async postBootMaster() { async postBootWeb() {
await WIKI.models.analytics.refreshProvidersFromDisk() await WIKI.models.analytics.refreshProvidersFromDisk()
await WIKI.models.authentication.refreshStrategiesFromDisk() await WIKI.models.authentication.refreshStrategiesFromDisk()
await WIKI.models.commentProviders.refreshProvidersFromDisk() await WIKI.models.commentProviders.refreshProvidersFromDisk()
@ -74,30 +73,16 @@ module.exports = {
await WIKI.auth.activateStrategies() await WIKI.auth.activateStrategies()
await WIKI.models.commentProviders.initProvider() await WIKI.models.commentProviders.initProvider()
await WIKI.models.sites.reloadCache()
await WIKI.models.storage.initTargets() await WIKI.models.storage.initTargets()
// WIKI.scheduler.start() // WIKI.scheduler.start()
await WIKI.models.subscribeToNotifications() 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 * Graceful shutdown
*/ */
async shutdown () { async shutdown (devMode = false) {
if (WIKI.servers) { if (WIKI.servers) {
await WIKI.servers.stopServers() await WIKI.servers.stopServers()
} }
@ -113,6 +98,8 @@ module.exports = {
if (WIKI.asar) { if (WIKI.asar) {
await WIKI.asar.unload() await WIKI.asar.unload()
} }
process.exit(0) if (!devMode) {
process.exit(0)
}
} }
} }

@ -11,7 +11,7 @@ module.exports = {
minimumVersionRequired: '3.0.0-beta.0', minimumVersionRequired: '3.0.0-beta.0',
minimumNodeRequired: '18.0.0' minimumNodeRequired: '18.0.0'
}, },
init() { init () {
// Clear content cache // Clear content cache
fs.emptyDir(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'cache')) fs.emptyDir(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'cache'))

@ -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
}
}

@ -32,6 +32,7 @@ module.exports = {
// }), ['title', 'key']) // }), ['title', 'key'])
return _.sortBy(WIKI.storage.defs.map(md => { return _.sortBy(WIKI.storage.defs.map(md => {
const dbTarget = dbTargets.find(tg => tg.module === md.key) const dbTarget = dbTargets.find(tg => tg.module === md.key)
console.info(md.actions)
return { return {
id: dbTarget?.id ?? uuid(), id: dbTarget?.id ?? uuid(),
isEnabled: dbTarget?.isEnabled ?? false, isEnabled: dbTarget?.isEnabled ?? false,
@ -62,12 +63,12 @@ module.exports = {
setup: { setup: {
handler: md?.setup?.handler, handler: md?.setup?.handler,
state: dbTarget?.state?.setup ?? 'notconfigured', state: dbTarget?.state?.setup ?? 'notconfigured',
values: md.setup?.handler values: md.setup?.handler ?
? _.transform(md.setup.defaultValues, _.transform(md.setup.defaultValues,
(r, v, k) => { (r, v, k) => {
r[k] = dbTarget?.config?.[k] ?? v r[k] = dbTarget?.config?.[k] ?? v
}, {}) }, {}) :
: {} {}
}, },
config: _.transform(md.props, (r, v, k) => { config: _.transform(md.props, (r, v, k) => {
const cfValue = dbTarget?.config?.[k] ?? v.default const cfValue = dbTarget?.config?.[k] ?? v.default

@ -8,6 +8,7 @@ extend type Query {
apiState: Boolean apiState: Boolean
authStrategies( authStrategies(
siteId: UUID
enabledOnly: Boolean enabledOnly: Boolean
): [AuthenticationStrategy] ): [AuthenticationStrategy]
} }

@ -22,6 +22,8 @@ let WIKI = {
Error: require('./helpers/error'), Error: require('./helpers/error'),
configSvc: require('./core/config'), configSvc: require('./core/config'),
kernel: require('./core/kernel'), kernel: require('./core/kernel'),
sites: {},
sitesMappings: {},
startedAt: DateTime.utc(), startedAt: DateTime.utc(),
storage: { storage: {
defs: [], defs: [],

@ -28,6 +28,28 @@ module.exports = class Site extends Model {
return ['config'] 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) { static async createSite (hostname, config) {
const newSite = await WIKI.models.sites.query().insertAndFetch({ const newSite = await WIKI.models.sites.query().insertAndFetch({
hostname, hostname,

@ -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('🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺')
})
}

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block body block body
#root #root

@ -1,5 +1,5 @@
doctype html doctype html
html html(lang=siteConfig.lang)
head head
meta(http-equiv='X-UA-Compatible', content='IE=edge') meta(http-equiv='X-UA-Compatible', content='IE=edge')
meta(charset='UTF-8') meta(charset='UTF-8')
@ -21,12 +21,23 @@ html
//- Favicon //- Favicon
link(rel='apple-touch-icon', sizes='180x180', href='/_assets/favicons/apple-touch-icon.png') 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='32x32', href='/_assets/favicons/favicon-32x32.png')
link(rel='icon', type='image/png', sizes='16x16', href='/_assets/favicons/favicon-16x16.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='mask-icon', href='/_assets/favicons/safari-pinned-tab.svg', color='#1976d2')
link(rel='manifest', href='/_assets/manifest.json') 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 //- Icon Set
if config.theming.iconset === 'fa' if config.theming.iconset === 'fa'
link( link(
@ -42,26 +53,24 @@ html
) )
//- CSS //- 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 //- JS
<% for (var index in htmlWebpackPlugin.files.js) { %>
script(
type='text/javascript'
src='/_assets-legacy/js/runtime.js'
)
script( script(
type='text/javascript' type='text/javascript'
src='<%= htmlWebpackPlugin.files.js[index] %>' src='/_assets-legacy/js/app.js'
) )
<% } %>
!= analyticsCode.head != analyticsCode.head

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block head block head
if injectCode.css if injectCode.css

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block body block body
#root.is-fullscreen #root.is-fullscreen

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block head block head

@ -1,23 +0,0 @@
extends master.pug
block body
#root
.login-deprecated!= t('outdatedBrowserWarning', { modernBrowser: '<a href="https://bestvpn.org/outdatedbrowser/en" rel="nofollow">' + t('modernBrowser') + '</a>', 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

@ -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: '<a href="https://bestvpn.org/outdatedbrowser/en" rel="nofollow">' + t('modernBrowser') + '</a>', 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

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block body block body
#root.is-fullscreen #root.is-fullscreen

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block body block body
#root.is-fullscreen #root.is-fullscreen

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block body block body
#root.is-fullscreen #root.is-fullscreen

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block head block head
if injectCode.css if injectCode.css

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block body block body
#root #root

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block body block body
#root.is-fullscreen #root.is-fullscreen

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block head block head

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block body block body
#root #root

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block body block body
#root.is-fullscreen #root.is-fullscreen

@ -1,4 +1,4 @@
extends master.pug extends base.pug
block body block body
#root.is-fullscreen #root.is-fullscreen

@ -149,15 +149,20 @@ module.exports = async () => {
// ---------------------------------------- // ----------------------------------------
app.use(async (req, res, next) => { 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 = { res.locals.siteConfig = {
title: WIKI.config.title, id: currentSite.id,
theme: WIKI.config.theming.theme, title: currentSite.config.title,
darkMode: WIKI.config.theming.darkMode, darkMode: currentSite.config.theme.dark,
lang: WIKI.config.lang.code, lang: currentSite.config.locale,
rtl: WIKI.config.lang.rtl, rtl: false, // TODO: handle RTL
company: WIKI.config.company, company: currentSite.config.company,
contentLicense: WIKI.config.contentLicense, contentLicense: currentSite.config.contentLicense,
logoUrl: WIKI.config.logoUrl logoUrl: currentSite.config.logoUrl
} }
res.locals.langs = await WIKI.models.locales.getNavLocales({ cache: true }) res.locals.langs = await WIKI.models.locales.getNavLocales({ cache: true })
res.locals.analyticsCode = await WIKI.models.analytics.getCode({ cache: true }) res.locals.analyticsCode = await WIKI.models.analytics.getCode({ cache: true })

@ -68,6 +68,7 @@ module.exports = {
'prefer-promise-reject-errors': 'off', 'prefer-promise-reject-errors': 'off',
'no-unused-vars': 'off', 'no-unused-vars': 'off',
'vue/multi-word-component-names': 'off',
// allow debugger during development only // allow debugger during development only
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'

@ -8,6 +8,9 @@
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width"> <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<title>Wiki.js</title> <title>Wiki.js</title>
<!--preload-links--> <!--preload-links-->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Rubik:wght@300..900&display=swap" rel="stylesheet">
<style type="text/css"> <style type="text/css">
@keyframes initspinner { @keyframes initspinner {
to { transform: rotate(360deg); } to { transform: rotate(360deg); }

@ -11,28 +11,28 @@
"lint": "eslint --ext .js,.vue ./" "lint": "eslint --ext .js,.vue ./"
}, },
"dependencies": { "dependencies": {
"@apollo/client": "3.6.8", "@apollo/client": "3.6.9",
"@codemirror/autocomplete": "6.0.2", "@codemirror/autocomplete": "6.0.2",
"@codemirror/basic-setup": "0.20.0", "@codemirror/basic-setup": "0.20.0",
"@codemirror/closebrackets": "0.19.2", "@codemirror/closebrackets": "0.19.2",
"@codemirror/commands": "6.0.0", "@codemirror/commands": "6.0.1",
"@codemirror/comment": "0.19.1", "@codemirror/comment": "0.19.1",
"@codemirror/fold": "0.19.4", "@codemirror/fold": "0.19.4",
"@codemirror/gutter": "0.19.9", "@codemirror/gutter": "0.19.9",
"@codemirror/highlight": "0.19.8", "@codemirror/highlight": "0.19.8",
"@codemirror/history": "0.19.2", "@codemirror/history": "0.19.2",
"@codemirror/lang-css": "6.0.0", "@codemirror/lang-css": "6.0.0",
"@codemirror/lang-html": "6.0.0", "@codemirror/lang-html": "6.1.0",
"@codemirror/lang-javascript": "6.0.0", "@codemirror/lang-javascript": "6.0.1",
"@codemirror/lang-json": "6.0.0", "@codemirror/lang-json": "6.0.0",
"@codemirror/lang-markdown": "6.0.0", "@codemirror/lang-markdown": "6.0.0",
"@codemirror/matchbrackets": "0.19.4", "@codemirror/matchbrackets": "0.19.4",
"@codemirror/search": "6.0.0", "@codemirror/search": "6.0.0",
"@codemirror/state": "6.0.1", "@codemirror/state": "6.0.1",
"@codemirror/tooltip": "0.19.16", "@codemirror/tooltip": "0.19.16",
"@codemirror/view": "6.0.1", "@codemirror/view": "6.0.2",
"@lezer/common": "1.0.0", "@lezer/common": "1.0.0",
"@quasar/extras": "1.14.0", "@quasar/extras": "1.14.2",
"@tiptap/core": "2.0.0-beta.176", "@tiptap/core": "2.0.0-beta.176",
"@tiptap/extension-code-block": "2.0.0-beta.37", "@tiptap/extension-code-block": "2.0.0-beta.37",
"@tiptap/extension-code-block-lowlight": "2.0.0-beta.68", "@tiptap/extension-code-block-lowlight": "2.0.0-beta.68",
@ -59,24 +59,23 @@
"@tiptap/vue-3": "2.0.0-beta.91", "@tiptap/vue-3": "2.0.0-beta.91",
"@vue/apollo-option": "4.0.0-alpha.17", "@vue/apollo-option": "4.0.0-alpha.17",
"apollo-upload-client": "17.0.0", "apollo-upload-client": "17.0.0",
"browser-fs-access": "0.29.6", "browser-fs-access": "0.30.2",
"clipboard": "2.0.11", "clipboard": "2.0.11",
"codemirror": "6.0.0", "codemirror": "6.0.1",
"filesize": "9.0.9", "filesize": "9.0.11",
"filesize-parser": "1.5.0", "filesize-parser": "1.5.0",
"graphql": "16.5.0", "graphql": "16.5.0",
"graphql-tag": "2.12.6", "graphql-tag": "2.12.6",
"js-cookie": "3.0.1", "js-cookie": "3.0.1",
"jwt-decode": "3.1.2", "jwt-decode": "3.1.2",
"lodash": "4.17.21",
"lodash-es": "4.17.21", "lodash-es": "4.17.21",
"luxon": "2.4.0", "luxon": "2.4.0",
"pinia": "2.0.14", "pinia": "2.0.14",
"pug": "3.0.2", "pug": "3.0.2",
"quasar": "2.7.3", "quasar": "2.7.4",
"tippy.js": "6.3.7", "tippy.js": "6.3.7",
"uuid": "8.3.2", "uuid": "8.3.2",
"v-network-graph": "0.5.19", "v-network-graph": "0.6.3",
"vue": "3.2.37", "vue": "3.2.37",
"vue-codemirror": "6.0.0", "vue-codemirror": "6.0.0",
"vue-i18n": "9.1.10", "vue-i18n": "9.1.10",
@ -86,10 +85,10 @@
}, },
"devDependencies": { "devDependencies": {
"@intlify/vite-plugin-vue-i18n": "3.4.0", "@intlify/vite-plugin-vue-i18n": "3.4.0",
"@quasar/app-vite": "1.0.2", "@quasar/app-vite": "1.0.4",
"@types/lodash": "4.14.182", "@types/lodash": "4.14.182",
"autoprefixer": "10.4.7", "browserlist": "latest",
"eslint": "8.18.0", "eslint": "8.19.0",
"eslint-config-standard": "17.0.0", "eslint-config-standard": "17.0.0",
"eslint-plugin-import": "2.26.0", "eslint-plugin-import": "2.26.0",
"eslint-plugin-n": "15.2.3", "eslint-plugin-n": "15.2.3",

@ -63,7 +63,7 @@ module.exports = configure(function (/* ctx */) {
vueRouterMode: 'history', // available values: 'hash', 'history' vueRouterMode: 'history', // available values: 'hash', 'history'
// vueRouterBase, // vueRouterBase,
// vueDevtools, // vueDevtools,
vueOptionsAPI: true, // vueOptionsAPI: true,
rebuildCache: true, // rebuilds Vite/linter/etc cache on startup rebuildCache: true, // rebuilds Vite/linter/etc cache on startup

@ -1,18 +1,33 @@
<template> <template lang="pug">
<router-view /> router-view
</template> </template>
<script> <script setup>
import { defineComponent, nextTick, onMounted } from 'vue' import { nextTick, onMounted } from 'vue'
import { useSiteStore } from 'src/stores/site'
export default defineComponent({
name: 'App', /* global siteConfig */
setup () {
onMounted(() => { // STORES
nextTick(() => {
document.querySelector('.init-loading').remove() const siteStore = useSiteStore()
})
}) // INIT SITE STORE
}
if (typeof siteConfig !== 'undefined') {
siteStore.$patch({
id: siteConfig.id,
title: siteConfig.title
})
} else {
siteStore.loadSite(window.location.hostname)
}
// MOUNTED
onMounted(async () => {
nextTick(() => {
document.querySelector('.init-loading').remove()
})
}) })
</script> </script>

@ -494,9 +494,8 @@ q-layout(view='hHh lpR fFf', container)
<script setup> <script setup>
import gql from 'graphql-tag' import gql from 'graphql-tag'
import { DateTime } from 'luxon' import { DateTime } from 'luxon'
import cloneDeep from 'lodash/cloneDeep'
import some from 'lodash/some'
import { v4 as uuid } from 'uuid' import { v4 as uuid } from 'uuid'
import { cloneDeep, some } from 'lodash-es'
import { fileOpen } from 'browser-fs-access' import { fileOpen } from 'browser-fs-access'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'

@ -119,7 +119,7 @@ q-card.icon-picker(flat, style='width: 400px;')
</template> </template>
<script> <script>
import find from 'lodash/find' import { find } from 'lodash-es'
export default { export default {
props: { props: {

@ -161,8 +161,7 @@ q-card.page-datatmpl-dialog(style='width: 1100px; max-width: 1100px;')
<script> <script>
import { get, sync } from 'vuex-pathify' import { get, sync } from 'vuex-pathify'
import { v4 as uuid } from 'uuid' import { v4 as uuid } from 'uuid'
import cloneDeep from 'lodash/cloneDeep' import { cloneDeep, sortBy } from 'lodash-es'
import sortBy from 'lodash/sortBy'
import draggable from 'vuedraggable' import draggable from 'vuedraggable'
export default { export default {

@ -114,8 +114,7 @@ q-card.page-relation-dialog(style='width: 500px;')
<script> <script>
import { v4 as uuid } from 'uuid' import { v4 as uuid } from 'uuid'
import find from 'lodash/find' import { cloneDeep, find } from 'lodash-es'
import cloneDeep from 'lodash/cloneDeep'
import IconPickerDialog from './IconPickerDialog.vue' import IconPickerDialog from './IconPickerDialog.vue'

@ -30,7 +30,7 @@ q-dialog(ref='dialogRef', @hide='onDialogHide')
<script setup> <script setup>
import gql from 'graphql-tag' import gql from 'graphql-tag'
import cloneDeep from 'lodash/cloneDeep' import { cloneDeep } from 'lodash-es'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { useDialogPluginComponent, useQuasar } from 'quasar' import { useDialogPluginComponent, useQuasar } from 'quasar'
import { reactive, ref } from 'vue' import { reactive, ref } from 'vue'

@ -69,7 +69,7 @@ q-dialog(ref='dialogRef', @hide='onDialogHide')
<script setup> <script setup>
import gql from 'graphql-tag' import gql from 'graphql-tag'
import sampleSize from 'lodash/sampleSize' import { sampleSize } from 'lodash-es'
import zxcvbn from 'zxcvbn' import zxcvbn from 'zxcvbn'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'

@ -161,9 +161,8 @@ q-dialog(ref='dialogRef', @hide='onDialogHide')
<script setup> <script setup>
import gql from 'graphql-tag' import gql from 'graphql-tag'
import sampleSize from 'lodash/sampleSize' import { cloneDeep, sampleSize } from 'lodash-es'
import zxcvbn from 'zxcvbn' import zxcvbn from 'zxcvbn'
import cloneDeep from 'lodash/cloneDeep'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { useDialogPluginComponent, useQuasar } from 'quasar' import { useDialogPluginComponent, useQuasar } from 'quasar'
import { computed, onMounted, reactive, ref } from 'vue' import { computed, onMounted, reactive, ref } from 'vue'

@ -488,12 +488,7 @@ q-layout(view='hHh lpR fFf', container)
<script setup> <script setup>
import gql from 'graphql-tag' import gql from 'graphql-tag'
import cloneDeep from 'lodash/cloneDeep' import { cloneDeep, find, findKey, map, some } from 'lodash-es'
import some from 'lodash/some'
import find from 'lodash/find'
import findKey from 'lodash/findKey'
import _get from 'lodash/get'
import map from 'lodash/map'
import { DateTime } from 'luxon' import { DateTime } from 'luxon'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'

@ -194,7 +194,7 @@ q-dialog(ref='dialogRef', @hide='onDialogHide')
<script setup> <script setup>
import gql from 'graphql-tag' import gql from 'graphql-tag'
import cloneDeep from 'lodash/cloneDeep' import { cloneDeep } from 'lodash-es'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { useDialogPluginComponent, useQuasar } from 'quasar' import { useDialogPluginComponent, useQuasar } from 'quasar'
import { computed, onMounted, reactive, ref } from 'vue' import { computed, onMounted, reactive, ref } from 'vue'

@ -33,7 +33,7 @@ body::-webkit-scrollbar-thumb {
} }
.font-poppins { .font-poppins {
font-family: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-family: $font-poppins;
} }
@font-face { @font-face {
@ -117,7 +117,7 @@ body::-webkit-scrollbar-thumb {
// BUTTONS // BUTTONS
// ------------------------------------------------------------------ // ------------------------------------------------------------------
body.desktop .acrylic-btn { #app .acrylic-btn {
.q-focus-helper { .q-focus-helper {
background-color: currentColor; background-color: currentColor;
opacity: .1; opacity: .1;

@ -30,3 +30,7 @@ $dark-6: #070a0d;
$dark-5: #0d1117; $dark-5: #0d1117;
$dark-4: #161b22; $dark-4: #161b22;
$dark-3: #1e232a; $dark-3: #1e232a;
// -- FONTS --
$font-poppins: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;

@ -300,7 +300,7 @@
"admin.login.logoutRedirect": "Logout Redirect", "admin.login.logoutRedirect": "Logout Redirect",
"admin.login.logoutRedirectHint": "Optionally redirect the user to a specific page when he/she logouts. This can be overridden at the group level.", "admin.login.logoutRedirectHint": "Optionally redirect the user to a specific page when he/she logouts. This can be overridden at the group level.",
"admin.login.providers": "Login Providers", "admin.login.providers": "Login Providers",
"admin.login.providersVisbleWarning": "Note that you can always temporarily show all hidden providers by adding ?all to the url. This is useful to login as local admin while hiding it from normal users.", "admin.login.providersVisbleWarning": "Note that you can always temporarily show all hidden providers by adding ?all=1 to the url. This is useful to login as local admin while hiding it from normal users.",
"admin.login.subtitle": "Configure the login user experience of your wiki site", "admin.login.subtitle": "Configure the login user experience of your wiki site",
"admin.login.title": "Login", "admin.login.title": "Login",
"admin.login.welcomeRedirect": "First-time Login Redirect", "admin.login.welcomeRedirect": "First-time Login Redirect",
@ -671,7 +671,7 @@
"admin.theme.bodyHtmlInjectionHint": "HTML code to be injected just before the closing body tag.", "admin.theme.bodyHtmlInjectionHint": "HTML code to be injected just before the closing body tag.",
"admin.theme.codeInjection": "Code Injection", "admin.theme.codeInjection": "Code Injection",
"admin.theme.cssOverride": "CSS Override", "admin.theme.cssOverride": "CSS Override",
"admin.theme.cssOverrideHint": "CSS code to inject after system default CSS. Consider using custom themes if you have a large amount of css code. Injecting too much CSS code will result in poor page load performance! CSS will automatically be minified.", "admin.theme.cssOverrideHint": "CSS code to inject after system default CSS. Injecting too much CSS code can result in poor page load performance! CSS will automatically be minified.",
"admin.theme.cssOverrideWarning": "{caution} When adding styles for page content, you must scope them to the {cssClass} class. Omitting this could break the layout of the editor!", "admin.theme.cssOverrideWarning": "{caution} When adding styles for page content, you must scope them to the {cssClass} class. Omitting this could break the layout of the editor!",
"admin.theme.cssOverrideWarningCaution": "CAUTION:", "admin.theme.cssOverrideWarningCaution": "CAUTION:",
"admin.theme.darkMode": "Dark Mode", "admin.theme.darkMode": "Dark Mode",

@ -79,7 +79,7 @@ q-layout.admin(view='hHh Lpr lff')
q-item-section(avatar) q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-comments.svg') q-icon(name='img:/_assets/icons/fluent-comments.svg')
q-item-section {{ t('admin.comments.title') }} q-item-section {{ t('admin.comments.title') }}
q-item(:to='`/_admin/` + adminStore.currentSiteId + `/editors`', v-ripple, active-class='bg-primary text-white') q-item(:to='`/_admin/` + adminStore.currentSiteId + `/editors`', v-ripple, active-class='bg-primary text-white', disabled)
q-item-section(avatar) q-item-section(avatar)
q-icon(name='img:/_assets/icons/fluent-cashbook.svg') q-icon(name='img:/_assets/icons/fluent-cashbook.svg')
q-item-section {{ t('admin.editors.title') }} q-item-section {{ t('admin.editors.title') }}

@ -4,45 +4,78 @@ q-layout(view='hHh lpr lff')
router-view router-view
</template> </template>
<script> <script setup>
export default {
name: 'AuthLayout',
data () {
return {
bgUrl: '_assets/bg/login-v3.jpg'
// bgUrl: 'https://docs.requarks.io/_assets/img/splash/1.jpg'
}
}
}
</script> </script>
<style lang="scss"> <style lang="scss">
.auth { .auth {
background-color: #FFF; background-color: #FFF;
background-size: cover;
background-position: center center;
height: 100vh;
display: flex; display: flex;
justify-content: center; font-family: 'Rubik', sans-serif;
align-items: center;
@at-root .body--dark & {
&-box { background-color: $dark-6;
background-color: rgba(255,255,255,.25); }
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px); &-content {
padding: 32px; flex: 1 0 100%;
border-radius: 8px; width: 100%;
width: 500px; max-width: 500px;
max-width: 95vw; padding: 3rem 4rem;
display: flex;
@at-root .no-backdropfilter & { flex-direction: column;
background-color: rgba(255,255,255,.95); justify-content: center;
align-items: stretch;
@media (max-width: $breakpoint-xs-max) {
padding: 1rem 2rem;
max-width: 100vw;
}
}
&-logo {
img {
height: 72px;
}
}
&-site-title {
font-size: 1.875rem;
line-height: 2.25rem;
font-weight: 700;
margin: 0;
color: $blue-grey-9;
@at-root .body--dark & {
color: $blue-grey-1;
} }
}
&-strategies {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(45%, 1fr));
gap: 10px;
}
&-bg {
flex: 1;
flex-basis: 0;
position: relative;
height: 100vh;
overflow: hidden;
@media (max-width: $breakpoint-md-max) { img {
margin-left: 0; position: relative;
width: 100%; width: 100%;
height: 100%;
object-fit: cover;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: 0;
padding: 0;
} }
} }
} }

@ -32,23 +32,30 @@ q-page.admin-navigation
) )
q-separator(inset) q-separator(inset)
.row.q-pa-md.q-col-gutter-md .row.q-pa-md.q-col-gutter-md
.col-6 .col-auto
//- v-container(fluid, grid-list-lg) q-card.q-mt-sm {{t('admin.navigation.mode')}}
//- v-layout(row wrap)
//- v-flex(xs12) q-card.bg-dark.q-mt-sm
//- .admin-header q-list(
//- img.animated.fadeInUp(src='/_assets/svg/icon-triangle-arrow.svg', alt='Navigation', style='width: 80px;') style='min-width: 350px;'
//- .admin-header-title padding
//- .headline.primary--text.animated.fadeInLeft {{$t('navigation.title')}} dark
//- .subtitle-1.grey--text.animated.fadeInLeft.wait-p4s {{$t('navigation.subtitle')}} )
//- v-spacer q-item
//- v-btn.animated.fadeInDown.wait-p3s(icon, outlined, color='grey', href='https://docs.requarks.io/navigation', target='_blank') q-item-section
//- v-icon mdi-help-circle q-select(
//- v-btn.mx-3.animated.fadeInDown.wait-p2s.mr-3(icon, outlined, color='grey', @click='refresh') dark
//- v-icon mdi-refresh outlined
//- v-btn.animated.fadeInDown(color='success', depressed, @click='save', large) option-value='value'
//- v-icon(left) mdi-check option-label='text'
//- span {{$t('common.actions.apply')}} emit-value
map-options
dense
options-dense
:label='t(`admin.navigation.mode`)'
:aria-label='t(`admin.navigation.mode`)'
)
//- v-container.pa-0.mt-3(fluid, grid-list-lg) //- v-container.pa-0.mt-3(fluid, grid-list-lg)
//- v-row(dense) //- v-row(dense)
//- v-col(cols='3') //- v-col(cols='3')

@ -165,14 +165,7 @@ q-page.admin-mail
</template> </template>
<script> <script>
import cloneDeep from 'lodash/cloneDeep' import { cloneDeep, concat, filter, find, findIndex, reduce, reverse, sortBy } from 'lodash-es'
import concat from 'lodash/concat'
import filter from 'lodash/filter'
import find from 'lodash/find'
import findIndex from 'lodash/findIndex'
import reduce from 'lodash/reduce'
import reverse from 'lodash/reverse'
import sortBy from 'lodash/sortBy'
import { DepGraph } from 'dependency-graph' import { DepGraph } from 'dependency-graph'
import gql from 'graphql-tag' import gql from 'graphql-tag'

File diff suppressed because it is too large Load Diff

@ -8,13 +8,13 @@ const routes = [
// { path: 'n/:editor?', component: () => import('../pages/Index.vue') } // { path: 'n/:editor?', component: () => import('../pages/Index.vue') }
// ] // ]
// }, // },
// { {
// path: '/login', path: '/login',
// component: () => import('../layouts/AuthLayout.vue'), component: () => import('../layouts/AuthLayout.vue'),
// children: [ children: [
// { path: '', component: () => import('../pages/Login.vue') } { path: '', component: () => import('../pages/Login.vue') }
// ] ]
// }, },
// { // {
// path: '/p', // path: '/p',
// component: () => import('../layouts/ProfileLayout.vue'), // component: () => import('../layouts/ProfileLayout.vue'),

@ -1,6 +1,6 @@
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
import gql from 'graphql-tag' import gql from 'graphql-tag'
import cloneDeep from 'lodash/cloneDeep' import { cloneDeep } from 'lodash-es'
/* global APOLLO_CLIENT */ /* global APOLLO_CLIENT */

@ -1,6 +1,6 @@
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
import gql from 'graphql-tag' import gql from 'graphql-tag'
import clone from 'lodash/clone' import { clone } from 'lodash-es'
export const useSiteStore = defineStore('site', { export const useSiteStore = defineStore('site', {
state: () => ({ state: () => ({

@ -5,9 +5,9 @@ __metadata:
version: 6 version: 6
cacheKey: 8 cacheKey: 8
"@apollo/client@npm:3.6.8": "@apollo/client@npm:3.6.9":
version: 3.6.8 version: 3.6.9
resolution: "@apollo/client@npm:3.6.8" resolution: "@apollo/client@npm:3.6.9"
dependencies: dependencies:
"@graphql-typed-document-node/core": ^3.1.1 "@graphql-typed-document-node/core": ^3.1.1
"@wry/context": ^0.6.0 "@wry/context": ^0.6.0
@ -33,7 +33,7 @@ __metadata:
optional: true optional: true
subscriptions-transport-ws: subscriptions-transport-ws:
optional: true optional: true
checksum: c29dd3f68952cf17229b72d39188e0d93ea672ae1e1615f90b1d95ba7553c6a03bc16dede7c13b23c60e9863d7ff183f56d62b233a761127000f544a490f63f7 checksum: a3c037ef3465cb5d736d8495c9c2dcb9741e39d9c102f147b479af1923c5913f710981a311d1098b9969ebe87769b749c22274decb5977ad0619032e7ac2cf26
languageName: node languageName: node
linkType: hard linkType: hard
@ -130,7 +130,19 @@ __metadata:
languageName: node languageName: node
linkType: hard 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 version: 6.0.0
resolution: "@codemirror/commands@npm:6.0.0" resolution: "@codemirror/commands@npm:6.0.0"
dependencies: dependencies:
@ -225,7 +237,22 @@ __metadata:
languageName: node languageName: node
linkType: hard 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 version: 6.0.0
resolution: "@codemirror/lang-html@npm:6.0.0" resolution: "@codemirror/lang-html@npm:6.0.0"
dependencies: dependencies:
@ -240,7 +267,22 @@ __metadata:
languageName: node languageName: node
linkType: hard 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 version: 6.0.0
resolution: "@codemirror/lang-javascript@npm:6.0.0" resolution: "@codemirror/lang-javascript@npm:6.0.0"
dependencies: dependencies:
@ -424,7 +466,18 @@ __metadata:
languageName: node languageName: node
linkType: hard 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 version: 6.0.1
resolution: "@codemirror/view@npm:6.0.1" resolution: "@codemirror/view@npm:6.0.1"
dependencies: dependencies:
@ -830,9 +883,9 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@quasar/app-vite@npm:1.0.2": "@quasar/app-vite@npm:1.0.4":
version: 1.0.2 version: 1.0.4
resolution: "@quasar/app-vite@npm:1.0.2" resolution: "@quasar/app-vite@npm:1.0.4"
dependencies: dependencies:
"@quasar/fastclick": 1.1.5 "@quasar/fastclick": 1.1.5
"@quasar/vite-plugin": ^1.0.9 "@quasar/vite-plugin": ^1.0.9
@ -848,7 +901,7 @@ __metadata:
cross-spawn: ^7.0.3 cross-spawn: ^7.0.3
dot-prop: 6.0.1 dot-prop: 6.0.1
elementtree: 0.1.7 elementtree: 0.1.7
esbuild: 0.14.29 esbuild: 0.14.47
express: ^4.17.3 express: ^4.17.3
fast-glob: 3.2.11 fast-glob: 3.2.11
fs-extra: ^10.0.1 fs-extra: ^10.0.1
@ -868,7 +921,7 @@ __metadata:
semver: ^7.3.5 semver: ^7.3.5
serialize-javascript: ^6.0.0 serialize-javascript: ^6.0.0
table: ^6.8.0 table: ^6.8.0
vite: 2.9.1 vite: 2.9.13
webpack-merge: ^5.8.0 webpack-merge: ^5.8.0
peerDependencies: peerDependencies:
electron-builder: ^22.0.0 electron-builder: ^22.0.0
@ -895,14 +948,14 @@ __metadata:
optional: true optional: true
bin: bin:
quasar: bin/quasar quasar: bin/quasar
checksum: b6fac0061299605f9c77a0ab683298e476c4b606bdafe87ca3db871e88a65017e8079703df0300191b4f7a9b5b067cde7935913041ac546c98b1dc0309d3fec9 checksum: 531e1a640602f71947caa10595076c10a1ff2b80b676c641f088399245b66cd2851d8c365fc7cdeda71bf214b33fa14600fdfb22cf40d37be7ab7a7622052744
languageName: node languageName: node
linkType: hard linkType: hard
"@quasar/extras@npm:1.14.0": "@quasar/extras@npm:1.14.2":
version: 1.14.0 version: 1.14.2
resolution: "@quasar/extras@npm:1.14.0" resolution: "@quasar/extras@npm:1.14.2"
checksum: 60eacf3995172a11c59af6266461f665219488e33e85ab99fb293365fdd95e3dda5427a5ab548b7a5058ee0e3f5d4a6045ad8feeb99e1b0ad9b37f1cbd8d2100 checksum: 600305d8fb641eca6990ef1527ce544c35835a4af088b58263851b70df444d6890e134dc01cb7da3f256ec8b5ae369ce2d5c29ddadff2452fff6e080e0411905
languageName: node languageName: node
linkType: hard linkType: hard
@ -1896,6 +1949,15 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0":
version: 4.3.0 version: 4.3.0
resolution: "ansi-styles@npm:4.3.0" resolution: "ansi-styles@npm:4.3.0"
@ -2043,24 +2105,6 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "babel-walk@npm:3.0.0-canary-5":
version: 3.0.0-canary-5 version: 3.0.0-canary-5
resolution: "babel-walk@npm:3.0.0-canary-5" resolution: "babel-walk@npm:3.0.0-canary-5"
@ -2155,25 +2199,21 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"browser-fs-access@npm:0.29.6": "browser-fs-access@npm:0.30.2":
version: 0.29.6 version: 0.30.2
resolution: "browser-fs-access@npm:0.29.6" resolution: "browser-fs-access@npm:0.30.2"
checksum: 9ee904e3a62cd92b60de1aa3121b5d46c2700e1ee09e14d27681563c9772181c6d219a4f80865856b707a3e68b09bd0c20821f06490096311fa1a0b91d2d53a8 checksum: 4fa53ebe2e5ea5fb2df39f2ce78ae67cf3b0710877f123d57d8a9f7be171e27b8c8413079fe023612aa05d27549c38ff68a94f694750fd766cf9ecd80067d822
languageName: node languageName: node
linkType: hard linkType: hard
"browserslist@npm:^4.20.3": "browserlist@npm:latest":
version: 4.20.3 version: 1.0.1
resolution: "browserslist@npm:4.20.3" resolution: "browserlist@npm:1.0.1"
dependencies: dependencies:
caniuse-lite: ^1.0.30001332 chalk: ^2.4.1
electron-to-chromium: ^1.4.118
escalade: ^3.1.1
node-releases: ^2.0.3
picocolors: ^1.0.0
bin: bin:
browserslist: cli.js browserlist: ./cli.js
checksum: 1e4b719ac2ca0fe235218a606e8b8ef16b8809e0973b924158c39fbc435a0b0fe43437ea52dd6ef5ad2efcb83fcb07431244e472270177814217f7c563651f7d checksum: db4dc273b59637f4e716676978d2c8a2431fb021860ec8ea9552eebe24bff67e955630d42c3995a9b03c1606819b18fb032ab943103b54b830933ec4d695e516
languageName: node languageName: node
linkType: hard linkType: hard
@ -2270,17 +2310,14 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"caniuse-lite@npm:^1.0.30001332": "chalk@npm:^2.4.1":
version: 1.0.30001334 version: 2.4.2
resolution: "caniuse-lite@npm:1.0.30001334" resolution: "chalk@npm:2.4.2"
checksum: 1a1c783942d53ca37dc3dbdd7c4a6f7994996d0bfd178d4f4cdd714c6b09d9d9f48a3a2452e009e8203aba4b7a2da43f3d9d88060668a46fc237dbe0d39358a3 dependencies:
languageName: node ansi-styles: ^3.2.1
linkType: hard escape-string-regexp: ^1.0.5
supports-color: ^5.3.0
"caniuse-lite@npm:^1.0.30001335": checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2
version: 1.0.30001341
resolution: "caniuse-lite@npm:1.0.30001341"
checksum: 7262b093fb0bf49dbc5328418f5ce4e3dbb0b13e39c015f986ba1807634c123ac214efc94df7d095a336f57f86852b4b63ee61838f18dcc3a4a35f87b390c8f5
languageName: node languageName: node
linkType: hard linkType: hard
@ -2422,9 +2459,9 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"codemirror@npm:6.0.0": "codemirror@npm:6.0.1":
version: 6.0.0 version: 6.0.1
resolution: "codemirror@npm:6.0.0" resolution: "codemirror@npm:6.0.1"
dependencies: dependencies:
"@codemirror/autocomplete": ^6.0.0 "@codemirror/autocomplete": ^6.0.0
"@codemirror/commands": ^6.0.0 "@codemirror/commands": ^6.0.0
@ -2433,7 +2470,16 @@ __metadata:
"@codemirror/search": ^6.0.0 "@codemirror/search": ^6.0.0
"@codemirror/state": ^6.0.0 "@codemirror/state": ^6.0.0
"@codemirror/view": ^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 languageName: node
linkType: hard linkType: hard
@ -2446,6 +2492,13 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "color-name@npm:~1.1.4":
version: 1.1.4 version: 1.1.4
resolution: "color-name@npm:1.1.4" resolution: "color-name@npm:1.1.4"
@ -2789,13 +2842,6 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "elementtree@npm:0.1.7":
version: 0.1.7 version: 0.1.7
resolution: "elementtree@npm:0.1.7" resolution: "elementtree@npm:0.1.7"
@ -2890,13 +2936,6 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "esbuild-android-64@npm:0.14.34":
version: 0.14.34 version: 0.14.34
resolution: "esbuild-android-64@npm:0.14.34" resolution: "esbuild-android-64@npm:0.14.34"
@ -2904,10 +2943,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-android-arm64@npm:0.14.29": "esbuild-android-64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-android-arm64@npm:0.14.29" resolution: "esbuild-android-64@npm:0.14.47"
conditions: os=android & cpu=arm64 conditions: os=android & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
@ -2918,10 +2957,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-darwin-64@npm:0.14.29": "esbuild-android-arm64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-darwin-64@npm:0.14.29" resolution: "esbuild-android-arm64@npm:0.14.47"
conditions: os=darwin & cpu=x64 conditions: os=android & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
@ -2932,10 +2971,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-darwin-arm64@npm:0.14.29": "esbuild-darwin-64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-darwin-arm64@npm:0.14.29" resolution: "esbuild-darwin-64@npm:0.14.47"
conditions: os=darwin & cpu=arm64 conditions: os=darwin & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
@ -2946,10 +2985,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-freebsd-64@npm:0.14.29": "esbuild-darwin-arm64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-freebsd-64@npm:0.14.29" resolution: "esbuild-darwin-arm64@npm:0.14.47"
conditions: os=freebsd & cpu=x64 conditions: os=darwin & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
@ -2960,10 +2999,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-freebsd-arm64@npm:0.14.29": "esbuild-freebsd-64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-freebsd-arm64@npm:0.14.29" resolution: "esbuild-freebsd-64@npm:0.14.47"
conditions: os=freebsd & cpu=arm64 conditions: os=freebsd & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
@ -2974,10 +3013,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-linux-32@npm:0.14.29": "esbuild-freebsd-arm64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-linux-32@npm:0.14.29" resolution: "esbuild-freebsd-arm64@npm:0.14.47"
conditions: os=linux & cpu=ia32 conditions: os=freebsd & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
@ -2988,10 +3027,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-linux-64@npm:0.14.29": "esbuild-linux-32@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-linux-64@npm:0.14.29" resolution: "esbuild-linux-32@npm:0.14.47"
conditions: os=linux & cpu=x64 conditions: os=linux & cpu=ia32
languageName: node languageName: node
linkType: hard linkType: hard
@ -3002,10 +3041,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-linux-arm64@npm:0.14.29": "esbuild-linux-64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-linux-arm64@npm:0.14.29" resolution: "esbuild-linux-64@npm:0.14.47"
conditions: os=linux & cpu=arm64 conditions: os=linux & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
@ -3016,10 +3055,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-linux-arm@npm:0.14.29": "esbuild-linux-arm64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-linux-arm@npm:0.14.29" resolution: "esbuild-linux-arm64@npm:0.14.47"
conditions: os=linux & cpu=arm conditions: os=linux & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
@ -3030,10 +3069,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-linux-mips64le@npm:0.14.29": "esbuild-linux-arm@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-linux-mips64le@npm:0.14.29" resolution: "esbuild-linux-arm@npm:0.14.47"
conditions: os=linux & cpu=mips64el conditions: os=linux & cpu=arm
languageName: node languageName: node
linkType: hard linkType: hard
@ -3044,10 +3083,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-linux-ppc64le@npm:0.14.29": "esbuild-linux-mips64le@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-linux-ppc64le@npm:0.14.29" resolution: "esbuild-linux-mips64le@npm:0.14.47"
conditions: os=linux & cpu=ppc64 conditions: os=linux & cpu=mips64el
languageName: node languageName: node
linkType: hard linkType: hard
@ -3058,10 +3097,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-linux-riscv64@npm:0.14.29": "esbuild-linux-ppc64le@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-linux-riscv64@npm:0.14.29" resolution: "esbuild-linux-ppc64le@npm:0.14.47"
conditions: os=linux & cpu=riscv64 conditions: os=linux & cpu=ppc64
languageName: node languageName: node
linkType: hard linkType: hard
@ -3072,10 +3111,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-linux-s390x@npm:0.14.29": "esbuild-linux-riscv64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-linux-s390x@npm:0.14.29" resolution: "esbuild-linux-riscv64@npm:0.14.47"
conditions: os=linux & cpu=s390x conditions: os=linux & cpu=riscv64
languageName: node languageName: node
linkType: hard linkType: hard
@ -3086,10 +3125,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-netbsd-64@npm:0.14.29": "esbuild-linux-s390x@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-netbsd-64@npm:0.14.29" resolution: "esbuild-linux-s390x@npm:0.14.47"
conditions: os=netbsd & cpu=x64 conditions: os=linux & cpu=s390x
languageName: node languageName: node
linkType: hard linkType: hard
@ -3100,10 +3139,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-openbsd-64@npm:0.14.29": "esbuild-netbsd-64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-openbsd-64@npm:0.14.29" resolution: "esbuild-netbsd-64@npm:0.14.47"
conditions: os=openbsd & cpu=x64 conditions: os=netbsd & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
@ -3114,10 +3153,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-sunos-64@npm:0.14.29": "esbuild-openbsd-64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-sunos-64@npm:0.14.29" resolution: "esbuild-openbsd-64@npm:0.14.47"
conditions: os=sunos & cpu=x64 conditions: os=openbsd & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
@ -3128,10 +3167,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-windows-32@npm:0.14.29": "esbuild-sunos-64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-windows-32@npm:0.14.29" resolution: "esbuild-sunos-64@npm:0.14.47"
conditions: os=win32 & cpu=ia32 conditions: os=sunos & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
@ -3142,10 +3181,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-windows-64@npm:0.14.29": "esbuild-windows-32@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-windows-64@npm:0.14.29" resolution: "esbuild-windows-32@npm:0.14.47"
conditions: os=win32 & cpu=x64 conditions: os=win32 & cpu=ia32
languageName: node languageName: node
linkType: hard linkType: hard
@ -3156,10 +3195,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild-windows-arm64@npm:0.14.29": "esbuild-windows-64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild-windows-arm64@npm:0.14.29" resolution: "esbuild-windows-64@npm:0.14.47"
conditions: os=win32 & cpu=arm64 conditions: os=win32 & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
@ -3170,30 +3209,37 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild@npm:0.14.29": "esbuild-windows-arm64@npm:0.14.47":
version: 0.14.29 version: 0.14.47
resolution: "esbuild@npm:0.14.29" resolution: "esbuild-windows-arm64@npm:0.14.47"
dependencies: conditions: os=win32 & cpu=arm64
esbuild-android-64: 0.14.29 languageName: node
esbuild-android-arm64: 0.14.29 linkType: hard
esbuild-darwin-64: 0.14.29
esbuild-darwin-arm64: 0.14.29 "esbuild@npm:0.14.47":
esbuild-freebsd-64: 0.14.29 version: 0.14.47
esbuild-freebsd-arm64: 0.14.29 resolution: "esbuild@npm:0.14.47"
esbuild-linux-32: 0.14.29 dependencies:
esbuild-linux-64: 0.14.29 esbuild-android-64: 0.14.47
esbuild-linux-arm: 0.14.29 esbuild-android-arm64: 0.14.47
esbuild-linux-arm64: 0.14.29 esbuild-darwin-64: 0.14.47
esbuild-linux-mips64le: 0.14.29 esbuild-darwin-arm64: 0.14.47
esbuild-linux-ppc64le: 0.14.29 esbuild-freebsd-64: 0.14.47
esbuild-linux-riscv64: 0.14.29 esbuild-freebsd-arm64: 0.14.47
esbuild-linux-s390x: 0.14.29 esbuild-linux-32: 0.14.47
esbuild-netbsd-64: 0.14.29 esbuild-linux-64: 0.14.47
esbuild-openbsd-64: 0.14.29 esbuild-linux-arm: 0.14.47
esbuild-sunos-64: 0.14.29 esbuild-linux-arm64: 0.14.47
esbuild-windows-32: 0.14.29 esbuild-linux-mips64le: 0.14.47
esbuild-windows-64: 0.14.29 esbuild-linux-ppc64le: 0.14.47
esbuild-windows-arm64: 0.14.29 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: dependenciesMeta:
esbuild-android-64: esbuild-android-64:
optional: true optional: true
@ -3237,7 +3283,7 @@ __metadata:
optional: true optional: true
bin: bin:
esbuild: bin/esbuild esbuild: bin/esbuild
checksum: 3066b9f5bc33b56c22fa1b14f6fd6b7cee292858b042d5f9051c87e57472a134045e653526612ea75fa4dfed3ed767b80c35165b819b4f29d92bf2e69c5fe37d checksum: 77a8bff8c3fe52dc9d2823448843b0f53c9a9f3701e3637a54e396270c9ca04cc46a4b08ef86cbaa8d202854e02c790f61683bfa75ebff540b1e24414f536e91
languageName: node languageName: node
linkType: hard linkType: hard
@ -3502,9 +3548,9 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"eslint@npm:8.18.0": "eslint@npm:8.19.0":
version: 8.18.0 version: 8.19.0
resolution: "eslint@npm:8.18.0" resolution: "eslint@npm:8.19.0"
dependencies: dependencies:
"@eslint/eslintrc": ^1.3.0 "@eslint/eslintrc": ^1.3.0
"@humanwhocodes/config-array": ^0.9.2 "@humanwhocodes/config-array": ^0.9.2
@ -3543,7 +3589,7 @@ __metadata:
v8-compile-cache: ^2.0.3 v8-compile-cache: ^2.0.3
bin: bin:
eslint: bin/eslint.js eslint: bin/eslint.js
checksum: d9b4b7488a9cee97608343cbb5ac652d3f316436f95ef0800cd9497c1c6f877b655a3275817989c02f1ff0d5dfd1959c5092af9251c7e3fcf60659da37752a10 checksum: 0bc9df1a3a09dcd5a781ec728f280aa8af3ab19c2d1f14e2668b5ee5b8b1fb0e72dde5c3acf738e7f4281685fb24ec149b6154255470b06cf41de76350bca7a4
languageName: node languageName: node
linkType: hard linkType: hard
@ -3748,10 +3794,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"filesize@npm:9.0.9": "filesize@npm:9.0.11":
version: 9.0.9 version: 9.0.11
resolution: "filesize@npm:9.0.9" resolution: "filesize@npm:9.0.11"
checksum: 2901b5eb3abd9d553ca52fafcebb159c60d7c11489d58703feb8850afd3dba7f619cfce61450bab52b846c12f9c4f3cb7be591985eada5af3eea82b04a23faf9 checksum: 7e8a9f9a4089e3ee29de64c241b50db8db4008351ace959873cb950bac0c2e1e09f4b45f42eaed8acd589a895dde978ed199e7a9982902fa06ca0be48e5ea92d
languageName: node languageName: node
linkType: hard linkType: hard
@ -3819,13 +3865,6 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "fresh@npm:0.5.2":
version: 0.5.2 version: 0.5.2
resolution: "fresh@npm:0.5.2" resolution: "fresh@npm:0.5.2"
@ -4040,6 +4079,13 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "has-flag@npm:^4.0.0":
version: 4.0.0 version: 4.0.0
resolution: "has-flag@npm:4.0.0" resolution: "has-flag@npm:4.0.0"
@ -4791,7 +4837,7 @@ __metadata:
languageName: node languageName: node
linkType: hard 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 version: 4.17.21
resolution: "lodash@npm:4.17.21" resolution: "lodash@npm:4.17.21"
checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7
@ -5117,12 +5163,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"nanoid@npm:^3.3.3": "nanoid@npm:^3.3.4":
version: 3.3.3 version: 3.3.4
resolution: "nanoid@npm:3.3.3" resolution: "nanoid@npm:3.3.4"
bin: bin:
nanoid: bin/nanoid.cjs nanoid: bin/nanoid.cjs
checksum: ada019402a07464a694553c61d2dca8a4353645a7d92f2830f0d487fedff403678a0bee5323a46522752b2eab95a0bc3da98b6cccaa7c0c55cd9975130e6d6f0 checksum: 2fddd6dee994b7676f008d3ffa4ab16035a754f4bb586c61df5a22cf8c8c94017aadd360368f47d653829e0569a92b129979152ff97af23a558331e47e37cd9c
languageName: node languageName: node
linkType: hard linkType: hard
@ -5169,13 +5215,6 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "nopt@npm:^5.0.0":
version: 5.0.0 version: 5.0.0
resolution: "nopt@npm:5.0.0" resolution: "nopt@npm:5.0.0"
@ -5194,13 +5233,6 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "npmlog@npm:^6.0.0":
version: 6.0.2 version: 6.0.2
resolution: "npmlog@npm:6.0.2" resolution: "npmlog@npm:6.0.2"
@ -5515,32 +5547,25 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"postcss-value-parser@npm:^4.2.0": "postcss@npm:^8.1.10, postcss@npm:^8.4.12, postcss@npm:^8.4.4":
version: 4.2.0 version: 8.4.12
resolution: "postcss-value-parser@npm:4.2.0" resolution: "postcss@npm:8.4.12"
checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f
languageName: node
linkType: hard
"postcss@npm:*":
version: 8.4.13
resolution: "postcss@npm:8.4.13"
dependencies: dependencies:
nanoid: ^3.3.3 nanoid: ^3.3.1
picocolors: ^1.0.0 picocolors: ^1.0.0
source-map-js: ^1.0.2 source-map-js: ^1.0.2
checksum: 514fb3552805a5d039a2d6b4df3e73f657001716ca93c0d57e6067b0473abdea70276d80afc96005c9aaff82ed5d98062bd97724d3f47ca400fba0b5e9e436ed checksum: 248e3d0f9bbb8efaafcfda7f91627a29bdc9a19f456896886330beb28c5abea0e14c7901b35191928602e2eccbed496b1e94097d27a0b2a980854cd00c7a835f
languageName: node languageName: node
linkType: hard linkType: hard
"postcss@npm:^8.1.10, postcss@npm:^8.4.12, postcss@npm:^8.4.4": "postcss@npm:^8.4.13":
version: 8.4.12 version: 8.4.14
resolution: "postcss@npm:8.4.12" resolution: "postcss@npm:8.4.14"
dependencies: dependencies:
nanoid: ^3.3.1 nanoid: ^3.3.4
picocolors: ^1.0.0 picocolors: ^1.0.0
source-map-js: ^1.0.2 source-map-js: ^1.0.2
checksum: 248e3d0f9bbb8efaafcfda7f91627a29bdc9a19f456896886330beb28c5abea0e14c7901b35191928602e2eccbed496b1e94097d27a0b2a980854cd00c7a835f checksum: fe58766ff32e4becf65a7d57678995cfd239df6deed2fe0557f038b47c94e4132e7e5f68b5aa820c13adfec32e523b693efaeb65798efb995ce49ccd83953816
languageName: node languageName: node
linkType: hard linkType: hard
@ -5870,10 +5895,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"quasar@npm:2.7.3": "quasar@npm:2.7.4":
version: 2.7.3 version: 2.7.4
resolution: "quasar@npm:2.7.3" resolution: "quasar@npm:2.7.4"
checksum: 42ae066c7a7e477731e3063bfa6b097bc89a670dac4781dd3e72d3c16e0db61a909f09eea21ef342592953fd6167f80a4c9add20722d4df0229616d3a86f5810 checksum: f527377c1f789f013a37aa9db023aa5c1680ed31c13eb05baa07f13c74ee2ddf97e5d1dac996cce4ecb9b8e5b4fd3101d115b458f10dede1776b7fc0c7adf7bf
languageName: node languageName: node
linkType: hard linkType: hard
@ -6487,6 +6512,15 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "supports-color@npm:^7.1.0":
version: 7.2.0 version: 7.2.0
resolution: "supports-color@npm:7.2.0" resolution: "supports-color@npm:7.2.0"
@ -6783,30 +6817,30 @@ __metadata:
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "ux@workspace:." resolution: "ux@workspace:."
dependencies: dependencies:
"@apollo/client": 3.6.8 "@apollo/client": 3.6.9
"@codemirror/autocomplete": 6.0.2 "@codemirror/autocomplete": 6.0.2
"@codemirror/basic-setup": 0.20.0 "@codemirror/basic-setup": 0.20.0
"@codemirror/closebrackets": 0.19.2 "@codemirror/closebrackets": 0.19.2
"@codemirror/commands": 6.0.0 "@codemirror/commands": 6.0.1
"@codemirror/comment": 0.19.1 "@codemirror/comment": 0.19.1
"@codemirror/fold": 0.19.4 "@codemirror/fold": 0.19.4
"@codemirror/gutter": 0.19.9 "@codemirror/gutter": 0.19.9
"@codemirror/highlight": 0.19.8 "@codemirror/highlight": 0.19.8
"@codemirror/history": 0.19.2 "@codemirror/history": 0.19.2
"@codemirror/lang-css": 6.0.0 "@codemirror/lang-css": 6.0.0
"@codemirror/lang-html": 6.0.0 "@codemirror/lang-html": 6.1.0
"@codemirror/lang-javascript": 6.0.0 "@codemirror/lang-javascript": 6.0.1
"@codemirror/lang-json": 6.0.0 "@codemirror/lang-json": 6.0.0
"@codemirror/lang-markdown": 6.0.0 "@codemirror/lang-markdown": 6.0.0
"@codemirror/matchbrackets": 0.19.4 "@codemirror/matchbrackets": 0.19.4
"@codemirror/search": 6.0.0 "@codemirror/search": 6.0.0
"@codemirror/state": 6.0.1 "@codemirror/state": 6.0.1
"@codemirror/tooltip": 0.19.16 "@codemirror/tooltip": 0.19.16
"@codemirror/view": 6.0.1 "@codemirror/view": 6.0.2
"@intlify/vite-plugin-vue-i18n": 3.4.0 "@intlify/vite-plugin-vue-i18n": 3.4.0
"@lezer/common": 1.0.0 "@lezer/common": 1.0.0
"@quasar/app-vite": 1.0.2 "@quasar/app-vite": 1.0.4
"@quasar/extras": 1.14.0 "@quasar/extras": 1.14.2
"@tiptap/core": 2.0.0-beta.176 "@tiptap/core": 2.0.0-beta.176
"@tiptap/extension-code-block": 2.0.0-beta.37 "@tiptap/extension-code-block": 2.0.0-beta.37
"@tiptap/extension-code-block-lowlight": 2.0.0-beta.68 "@tiptap/extension-code-block-lowlight": 2.0.0-beta.68
@ -6834,31 +6868,30 @@ __metadata:
"@types/lodash": 4.14.182 "@types/lodash": 4.14.182
"@vue/apollo-option": 4.0.0-alpha.17 "@vue/apollo-option": 4.0.0-alpha.17
apollo-upload-client: 17.0.0 apollo-upload-client: 17.0.0
autoprefixer: 10.4.7 browser-fs-access: 0.30.2
browser-fs-access: 0.29.6 browserlist: latest
clipboard: 2.0.11 clipboard: 2.0.11
codemirror: 6.0.0 codemirror: 6.0.1
eslint: 8.18.0 eslint: 8.19.0
eslint-config-standard: 17.0.0 eslint-config-standard: 17.0.0
eslint-plugin-import: 2.26.0 eslint-plugin-import: 2.26.0
eslint-plugin-n: 15.2.3 eslint-plugin-n: 15.2.3
eslint-plugin-promise: 6.0.0 eslint-plugin-promise: 6.0.0
eslint-plugin-vue: 9.1.1 eslint-plugin-vue: 9.1.1
filesize: 9.0.9 filesize: 9.0.11
filesize-parser: 1.5.0 filesize-parser: 1.5.0
graphql: 16.5.0 graphql: 16.5.0
graphql-tag: 2.12.6 graphql-tag: 2.12.6
js-cookie: 3.0.1 js-cookie: 3.0.1
jwt-decode: 3.1.2 jwt-decode: 3.1.2
lodash: 4.17.21
lodash-es: 4.17.21 lodash-es: 4.17.21
luxon: 2.4.0 luxon: 2.4.0
pinia: 2.0.14 pinia: 2.0.14
pug: 3.0.2 pug: 3.0.2
quasar: 2.7.3 quasar: 2.7.4
tippy.js: 6.3.7 tippy.js: 6.3.7
uuid: 8.3.2 uuid: 8.3.2
v-network-graph: 0.5.19 v-network-graph: 0.6.3
vue: 3.2.37 vue: 3.2.37
vue-codemirror: 6.0.0 vue-codemirror: 6.0.0
vue-i18n: 9.1.10 vue-i18n: 9.1.10
@ -6868,16 +6901,16 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"v-network-graph@npm:0.5.19": "v-network-graph@npm:0.6.3":
version: 0.5.19 version: 0.6.3
resolution: "v-network-graph@npm:0.5.19" resolution: "v-network-graph@npm:0.6.3"
dependencies: dependencies:
"@dash14/svg-pan-zoom": ^3.6.8 "@dash14/svg-pan-zoom": ^3.6.8
mitt: ^3.0.0 mitt: ^3.0.0
peerDependencies: peerDependencies:
d3-force: ^3.0.0 d3-force: ^3.0.0
vue: ^3.2.31 vue: ^3.2.31
checksum: 98be123d78cd68454bd2d64a13678031c8b7cdea8610698d4211bf5b56e740df5fc367a75c23e823417385e08609c9b48785e4116aff2046208344f636a3f5a1 checksum: cecae746aaf6fd0f480b0a251b4d50dab89a16e88420c7ffd2de0fe5c5fb32a72cb19f94c3b6a19a4e83110fa0a136635c148b5231988c29e807dadb877f691a
languageName: node languageName: node
linkType: hard linkType: hard
@ -6924,13 +6957,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"vite@npm:2.9.1": "vite@npm:2.9.13":
version: 2.9.1 version: 2.9.13
resolution: "vite@npm:2.9.1" resolution: "vite@npm:2.9.13"
dependencies: dependencies:
esbuild: ^0.14.27 esbuild: ^0.14.27
fsevents: ~2.3.2 fsevents: ~2.3.2
postcss: ^8.4.12 postcss: ^8.4.13
resolve: ^1.22.0 resolve: ^1.22.0
rollup: ^2.59.0 rollup: ^2.59.0
peerDependencies: peerDependencies:
@ -6949,7 +6982,7 @@ __metadata:
optional: true optional: true
bin: bin:
vite: bin/vite.js vite: bin/vite.js
checksum: 0f0ac9337fa5c17faa4a59831a2df17475563b23a6162e86b2b60b19835ca1277f3249ea7a6608880354b39caf05779e9bad1e3b1f5b27010deced224aae47ea checksum: a5e501b920a448c352e9b3836019dea56c523535f8e8540160708c2e164d84da6655ae39abbba1e2888092f5c6cd03dd06279852422359b51be601914645f49f
languageName: node languageName: node
linkType: hard linkType: hard

Loading…
Cancel
Save