feat(frontend): build speed & chunk structure optimization (#690)

* feat(frontend): build speed & chunk structure optimization

* fix: attempting to work around precommit inconsistent eslint config

* chore(pre-commit config): ignore mocharc for eslint

Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
This commit is contained in:
Kristaps Fabians Geikins
2022-04-13 10:21:24 +03:00
committed by GitHub
parent 728851700a
commit e8869e210c
32 changed files with 64760 additions and 56927 deletions
-1
View File
@@ -1 +0,0 @@
!.mocharc.js
+1 -1
View File
@@ -20,7 +20,7 @@ const config = {
'prefer-const': 'warn',
'object-shorthand': 'warn'
},
ignorePatterns: ['node_modules', 'dist', 'public']
ignorePatterns: ['node_modules', 'dist', 'public', 'events.json', '.mocharc.js']
}
module.exports = config
+4 -1
View File
@@ -23,4 +23,7 @@ packages/frontend/schema.graphql
packages/server/reports*
**/venv/**
**/start/
**/start/
# Profiler output
events.json
+1
View File
@@ -5,6 +5,7 @@ repos:
- id: eslint
types: [file]
files: \.[jt]s$|vue$ # *.js, *.ts and vue
exclude: 'mocharc.js$'
args:
- '--max-warnings=0'
additional_dependencies:
+3
View File
@@ -10,5 +10,8 @@ packages/viewer/example/speckleviewer.web.js
package-lock.json
yarn.lock
# Profiler output
events.json
# Prettier doesn't understand the syntax inside the Yaml files, because of the brackets
utils/helm/speckle-server/templates
+3
View File
@@ -13,6 +13,9 @@
"lerna": "^3.22.1",
"pre-commit": "^1.2.2",
"prettier": "^2.5.1"
},
"engines": {
"node": ">=14.0.0 <17.0.0"
}
},
"node_modules/@babel/code-frame": {
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "root",
"private": true,
"engines": {
"node": "^14.0.0"
"node": ">=14.0.0 <17.0.0"
},
"scripts": {
"lint": "eslint . --ext .js,.ts,.vue --max-warnings=0",
+2 -1
View File
@@ -1,4 +1,5 @@
module.exports = {
presets: ['@vue/cli-plugin-babel/preset'],
ignore: ['../viewer/dist', '../objectloader/dist']
ignore: ['../viewer/dist', '../objectloader/dist'],
plugins: ['lodash']
}
+36
View File
@@ -0,0 +1,36 @@
/**
* Dev builds use esbuild instead of babel for improved speed
* @param {import('@vue/cli-service/lib/PluginAPI')} api
**/
function plugin(api) {
const isProdBuild = process.env.NODE_ENV === 'production'
const isDevBuild = !isProdBuild
if (!isDevBuild) return
api.chainWebpack((config) => {
const target = 'es2019'
const jsRule = config.module.rule('js').test(/\.m?jsx?$/)
// Delete babel related loaders
jsRule.uses.delete('thread-loader').delete('babel-loader')
// Add caching config
jsRule
.use('cache-loader')
.loader(require.resolve('cache-loader'))
.options(
api.genCacheConfig('js-esbuild-loader', {
target,
esbuildLoaderVersion: require('esbuild-loader/package.json').version
})
)
// Add new esbuild loader
jsRule.use('esbuild-loader').loader('esbuild-loader').options({
target
})
})
}
module.exports = plugin
+42640 -38954
View File
File diff suppressed because it is too large Load Diff
+21 -6
View File
@@ -3,11 +3,14 @@
"version": "2.3.17-alpha.2889",
"private": true,
"scripts": {
"dev": "vue-cli-service serve",
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"build:setup": "vue-cli-service build",
"serve:setup": "vue-cli-service serve",
"dev": "vue-cli-service serve --mode development",
"serve": "ws -p 8080 -d dist -r '/embed(.*) -> /embedApp.html' '/([a-zA-Z0-9-_/]*)(\\?.*)? -> /app.html' ",
"build": "vue-cli-service build --mode production --silent",
"build:dev": "vue-cli-service build --mode development --silent",
"build:profile": "npm run build -- --profile",
"build:dev:profile": "npm run build:dev -- --profile",
"inspect": "vue-cli-service inspect --mode production",
"inspect:dev": "vue-cli-service inspect --mode development",
"lint": "eslint . --ext .js,.ts,.vue"
},
"engines": {
@@ -49,17 +52,29 @@
"@vue/cli-plugin-vuex": "~4.3.0",
"@vue/cli-service": "~4.3.0",
"babel-eslint": "^10.1.0",
"babel-plugin-lodash": "^3.3.4",
"duplicate-dependencies-webpack-plugin": "^1.0.2",
"esbuild-loader": "^2.18.0",
"eslint": "^8.11.0",
"eslint-config-prettier": "^8.5.0",
"eslint-loader": "^4.0.2",
"eslint-plugin-vue": "^8.5.0",
"graphql-tag": "^2.11.0",
"local-web-server": "^5.2.0",
"lodash-webpack-plugin": "^0.11.6",
"prettier": "^2.5.1",
"sass": "~1.32.6",
"sass-loader": "^8.0.0",
"speed-measure-webpack-plugin": "^1.5.0",
"vue-cli-plugin-apollo": "~0.21.3",
"vue-cli-plugin-vuetify": "^2.0.8",
"vue-template-compiler": "^2.6.12",
"vuetify-loader": "^1.6.0"
"vuetify-loader": "^1.6.0",
"webpack-bundle-analyzer": "^4.5.0"
},
"vuePlugins": {
"service": [
"./esbuildPlugin.js"
]
}
}
-4
View File
@@ -21,10 +21,6 @@
href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500&display=swap"
rel="stylesheet"
/>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"
/>
<style type="text/css">
body {
background-color: #333333;
+4 -1
View File
@@ -2,7 +2,10 @@ import Vue from 'vue'
import App from './EmbedApp.vue'
import vuetify from './embedVuetify'
import router from './embedRouter'
Vue.config.productionTip = false
// process.env.NODE_ENV is injected by Webpack
// eslint-disable-next-line no-undef
Vue.config.productionTip = process.env.NODE_ENV === 'development'
import VueMixpanel from 'vue-mixpanel'
Vue.use(VueMixpanel, {
+179
View File
@@ -0,0 +1,179 @@
/**
* Lightweight MD5 implementation.
* @see http://www.myersdaily.org/joseph/javascript/md5-text.html
*/
function md5cycle(x, k) {
let a = x[0],
b = x[1],
c = x[2],
d = x[3]
a = ff(a, b, c, d, k[0], 7, -680876936)
d = ff(d, a, b, c, k[1], 12, -389564586)
c = ff(c, d, a, b, k[2], 17, 606105819)
b = ff(b, c, d, a, k[3], 22, -1044525330)
a = ff(a, b, c, d, k[4], 7, -176418897)
d = ff(d, a, b, c, k[5], 12, 1200080426)
c = ff(c, d, a, b, k[6], 17, -1473231341)
b = ff(b, c, d, a, k[7], 22, -45705983)
a = ff(a, b, c, d, k[8], 7, 1770035416)
d = ff(d, a, b, c, k[9], 12, -1958414417)
c = ff(c, d, a, b, k[10], 17, -42063)
b = ff(b, c, d, a, k[11], 22, -1990404162)
a = ff(a, b, c, d, k[12], 7, 1804603682)
d = ff(d, a, b, c, k[13], 12, -40341101)
c = ff(c, d, a, b, k[14], 17, -1502002290)
b = ff(b, c, d, a, k[15], 22, 1236535329)
a = gg(a, b, c, d, k[1], 5, -165796510)
d = gg(d, a, b, c, k[6], 9, -1069501632)
c = gg(c, d, a, b, k[11], 14, 643717713)
b = gg(b, c, d, a, k[0], 20, -373897302)
a = gg(a, b, c, d, k[5], 5, -701558691)
d = gg(d, a, b, c, k[10], 9, 38016083)
c = gg(c, d, a, b, k[15], 14, -660478335)
b = gg(b, c, d, a, k[4], 20, -405537848)
a = gg(a, b, c, d, k[9], 5, 568446438)
d = gg(d, a, b, c, k[14], 9, -1019803690)
c = gg(c, d, a, b, k[3], 14, -187363961)
b = gg(b, c, d, a, k[8], 20, 1163531501)
a = gg(a, b, c, d, k[13], 5, -1444681467)
d = gg(d, a, b, c, k[2], 9, -51403784)
c = gg(c, d, a, b, k[7], 14, 1735328473)
b = gg(b, c, d, a, k[12], 20, -1926607734)
a = hh(a, b, c, d, k[5], 4, -378558)
d = hh(d, a, b, c, k[8], 11, -2022574463)
c = hh(c, d, a, b, k[11], 16, 1839030562)
b = hh(b, c, d, a, k[14], 23, -35309556)
a = hh(a, b, c, d, k[1], 4, -1530992060)
d = hh(d, a, b, c, k[4], 11, 1272893353)
c = hh(c, d, a, b, k[7], 16, -155497632)
b = hh(b, c, d, a, k[10], 23, -1094730640)
a = hh(a, b, c, d, k[13], 4, 681279174)
d = hh(d, a, b, c, k[0], 11, -358537222)
c = hh(c, d, a, b, k[3], 16, -722521979)
b = hh(b, c, d, a, k[6], 23, 76029189)
a = hh(a, b, c, d, k[9], 4, -640364487)
d = hh(d, a, b, c, k[12], 11, -421815835)
c = hh(c, d, a, b, k[15], 16, 530742520)
b = hh(b, c, d, a, k[2], 23, -995338651)
a = ii(a, b, c, d, k[0], 6, -198630844)
d = ii(d, a, b, c, k[7], 10, 1126891415)
c = ii(c, d, a, b, k[14], 15, -1416354905)
b = ii(b, c, d, a, k[5], 21, -57434055)
a = ii(a, b, c, d, k[12], 6, 1700485571)
d = ii(d, a, b, c, k[3], 10, -1894986606)
c = ii(c, d, a, b, k[10], 15, -1051523)
b = ii(b, c, d, a, k[1], 21, -2054922799)
a = ii(a, b, c, d, k[8], 6, 1873313359)
d = ii(d, a, b, c, k[15], 10, -30611744)
c = ii(c, d, a, b, k[6], 15, -1560198380)
b = ii(b, c, d, a, k[13], 21, 1309151649)
a = ii(a, b, c, d, k[4], 6, -145523070)
d = ii(d, a, b, c, k[11], 10, -1120210379)
c = ii(c, d, a, b, k[2], 15, 718787259)
b = ii(b, c, d, a, k[9], 21, -343485551)
x[0] = add32(a, x[0])
x[1] = add32(b, x[1])
x[2] = add32(c, x[2])
x[3] = add32(d, x[3])
}
function cmn(q, a, b, x, s, t) {
a = add32(add32(a, q), add32(x, t))
return add32((a << s) | (a >>> (32 - s)), b)
}
function ff(a, b, c, d, x, s, t) {
return cmn((b & c) | (~b & d), a, b, x, s, t)
}
function gg(a, b, c, d, x, s, t) {
return cmn((b & d) | (c & ~d), a, b, x, s, t)
}
function hh(a, b, c, d, x, s, t) {
return cmn(b ^ c ^ d, a, b, x, s, t)
}
function ii(a, b, c, d, x, s, t) {
return cmn(c ^ (b | ~d), a, b, x, s, t)
}
function md51(s) {
const n = s.length,
state = [1732584193, -271733879, -1732584194, 271733878]
let i
for (i = 64; i <= s.length; i += 64) {
md5cycle(state, md5blk(s.substring(i - 64, i)))
}
s = s.substring(i - 64)
const tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
for (i = 0; i < s.length; i++) tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3)
tail[i >> 2] |= 0x80 << (i % 4 << 3)
if (i > 55) {
md5cycle(state, tail)
for (i = 0; i < 16; i++) tail[i] = 0
}
tail[14] = n * 8
md5cycle(state, tail)
return state
}
function md5blk(s) {
/* I figured global was faster. */
const md5blks = []
let i
for (i = 0; i < 64; i += 4) {
md5blks[i >> 2] =
s.charCodeAt(i) +
(s.charCodeAt(i + 1) << 8) +
(s.charCodeAt(i + 2) << 16) +
(s.charCodeAt(i + 3) << 24)
}
return md5blks
}
const HEX_CHR = '0123456789abcdef'.split('')
function rhex(n) {
let s = '',
j = 0
for (; j < 4; j++)
s += HEX_CHR[(n >> (j * 8 + 4)) & 0x0f] + HEX_CHR[(n >> (j * 8)) & 0x0f]
return s
}
function hex(x) {
for (let i = 0; i < x.length; i++) x[i] = rhex(x[i])
return x.join('')
}
let add32 = (a, b) => {
return (a + b) & 0xffffffff
}
/**
* Generate an MD5 hash for an input string
* @param {string} s input string
* @returns {string} md5 hash
*/
function md5(s) {
return hex(md51(s))
}
if (md5('hello') !== '5d41402abc4b2a76b9719d911017c592') {
add32 = (x, y) => {
const lsw = (x & 0xffff) + (y & 0xffff),
msw = (x >> 16) + (y >> 16) + (lsw >> 16)
return (msw << 16) | (lsw & 0xffff)
}
}
export default md5
export { md5 }
@@ -0,0 +1,10 @@
/**
* Generate a random string of any length
* @param {number} length
* @returns
*/
export function randomString(length) {
return Math.round(Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))
.toString(36)
.slice(1)
}
+24 -14
View File
@@ -1,8 +1,11 @@
import Vue from 'vue'
// Event hub
Vue.prototype.$eventHub = new Vue()
import App from '@/main/App.vue'
import store from '@/main/store'
import { LocalStorageKeys } from '@/helpers/mainConstants'
import { createProvider } from '@/vue-apollo'
import {
@@ -13,7 +16,9 @@ import {
import router from '@/main/router/index'
import vuetify from '@/plugins/vuetify'
Vue.config.productionTip = false
// process.env.NODE_ENV is injected by Webpack
// eslint-disable-next-line no-undef
Vue.config.productionTip = process.env.NODE_ENV === 'development'
import PortalVue from 'portal-vue'
Vue.use(PortalVue)
@@ -44,18 +49,26 @@ Vue.use(VueMixpanel, {
}
})
// import UniqueId from 'vue-unique-id'
// Vue.use(UniqueId)
// Async HistogramSlider load
Vue.component('HistogramSlider', async () => {
await import(
/* webpackChunkName: "vue-histogram-slider" */ 'vue-histogram-slider/dist/histogram-slider.css'
)
const component = await import(
/* webpackChunkName: "vue-histogram-slider" */ 'vue-histogram-slider'
)
return component
})
import HistogramSlider from 'vue-histogram-slider'
import 'vue-histogram-slider/dist/histogram-slider.css'
// Async ApexChart load
Vue.component('ApexChart', async () => {
const VueApexCharts = await import(
/* webpackChunkName: "vue-apexcharts" */ 'vue-apexcharts'
)
Vue.use(VueApexCharts)
Vue.component(HistogramSlider.name, HistogramSlider)
import VueApexCharts from 'vue-apexcharts'
Vue.use(VueApexCharts)
Vue.component('ApexChart', VueApexCharts)
return VueApexCharts
})
import { formatNumber } from '@/plugins/formatNumber'
// Filter to turn any number into a nice string like '10k', '5.5m'
@@ -100,9 +113,6 @@ if (AuthToken) {
})
}
import store from '@/main/store'
import { LocalStorageKeys } from '@/helpers/mainConstants'
function initVue() {
new Vue({
router,
@@ -3,18 +3,16 @@
<v-card-text class="text-h3 text-sm-h4 text-md-h3 primary--text">
<span class="primary--text">
<b>
<a
class="text-decoration-none"
href="https://speckle.systems"
target="_blank"
<!-- display: inline -->
<a class="text-decoration-none" href="https://speckle.systems" target="_blank"
>Speckle</a
>
Speckle
</a>
</b>
</span>
<span class="font-weight-light">
, empowering your design and construction data.
</span>
<!-- display: inline -->
<span class="font-weight-light"
>, empowering your design and construction data.</span
>
</v-card-text>
<div>
<v-card-text class="text-h6 font-weight-regular">
@@ -163,7 +163,7 @@
</template>
<script>
import gql from 'graphql-tag'
import debounce from 'lodash.debounce'
import debounce from 'lodash/debounce'
export default {
components: {
@@ -95,7 +95,7 @@
<script>
import gql from 'graphql-tag'
import crs from 'crypto-random-string'
import { randomString } from '@/helpers/randomHelpers'
import objectQuery from '@/graphql/objectSingle.gql'
export default {
@@ -251,7 +251,7 @@ export default {
arr.push({
key,
valid: true,
id: crs({ length: 10 }),
id: randomString(10),
value: val,
globals: this.nestedGlobals(val),
type: 'object' //TODO: handle references
@@ -260,7 +260,7 @@ export default {
arr.push({
key,
valid: true,
id: crs({ length: 10 }),
id: randomString(10),
value: val,
globals: this.nestedGlobals(val),
type: 'object'
@@ -270,7 +270,7 @@ export default {
arr.push({
key,
valid: true,
id: crs({ length: 10 }),
id: randomString(10),
value: val,
type: 'field'
})
@@ -141,7 +141,7 @@
</template>
<script>
import draggable from 'vuedraggable'
import crs from 'crypto-random-string'
import { randomString } from '@/helpers/randomHelpers'
export default {
name: 'GlobalsEntry',
@@ -243,11 +243,11 @@ export default {
' ' +
bimNouns[Math.floor(Math.random() * bimNouns.length)]
const field = {
key: `placeholder ${crs({ length: 6 })}`,
key: `placeholder ${randomString(6)}`,
type: 'field',
value: randomPhrase,
valid: true,
id: crs({ length: 10 })
id: randomString(10)
}
this.$emit('add-prop', { field, path: this.path })
},
@@ -262,10 +262,10 @@ export default {
valid: entry.valid,
globals: [
{
key: `placeholder ${crs({ length: 6 })}`,
key: `placeholder ${randomString(6)}`,
type: 'field',
value: entry.value,
id: crs({ length: 10 }),
id: randomString(10),
valid: true
}
]
@@ -164,7 +164,7 @@
// TODO: Need to fix the viewer package build process to be able to properly reference THREE.js
/* global THREE */
import gql from 'graphql-tag'
import debounce from 'lodash.debounce'
import debounce from 'lodash/debounce'
import { getCamArray } from './viewerFrontendHelpers'
export default {
@@ -142,7 +142,7 @@
<script>
// TODO: Need to fix the viewer package build process to be able to properly reference THREE.js
/* global THREE */
import debounce from 'lodash.debounce'
import debounce from 'lodash/debounce'
import gql from 'graphql-tag'
export default {
@@ -91,7 +91,7 @@
/* global THREE */
import gql from 'graphql-tag'
import { v4 as uuid } from 'uuid'
import debounce from 'lodash.debounce'
import debounce from 'lodash/debounce'
export default {
name: 'ViewerBubbles',
@@ -103,8 +103,8 @@
<script>
import gql from 'graphql-tag'
import crs from 'crypto-random-string'
import AuthStrategies from '@/main/components/auth/AuthStrategies.vue'
import { randomString } from '@/helpers/randomHelpers'
import { isEmailValid } from '@/plugins/authHelpers'
export default {
@@ -187,7 +187,7 @@ export default {
else this.appId = appId
if (!challenge && this.appId === 'spklwebapp') {
this.challenge = crs({ length: 10 })
this.challenge = randomString(10)
localStorage.setItem('appChallenge', this.challenge)
} else if (challenge) {
this.challenge = challenge
@@ -185,7 +185,7 @@
<script>
import gql from 'graphql-tag'
import debounce from 'lodash/debounce'
import crs from 'crypto-random-string'
import { randomString } from '@/helpers/randomHelpers'
import AuthStrategies from '@/main/components/auth/AuthStrategies.vue'
import { isEmailValid } from '@/plugins/authHelpers'
@@ -284,7 +284,7 @@ export default {
else this.appId = appId
if (!challenge && this.appId === 'spklwebapp') {
this.challenge = crs({ length: 10 })
this.challenge = randomString({ length: 10 })
localStorage.setItem('appChallenge', this.challenge)
} else if (challenge) {
this.challenge = challenge
+2 -8
View File
@@ -1,6 +1,6 @@
import { MainUserDataQuery } from '@/graphql/user'
import { LocalStorageKeys } from '@/helpers/mainConstants'
import crypto from 'crypto'
import md5 from '@/helpers/md5'
const appId = 'spklwebapp'
const appSecret = 'spklwebapp'
@@ -41,13 +41,7 @@ export async function prefetchUserAndSetSuuid(apolloClient) {
if (data.user) {
// eslint-disable-next-line camelcase
const distinct_id =
'@' +
crypto
.createHash('md5')
.update(data.user.email.toLowerCase())
.digest('hex')
.toUpperCase()
const distinct_id = '@' + md5(data.user.email.toLowerCase()).toUpperCase()
localStorage.setItem('suuid', data.user.suuid)
localStorage.setItem('distinct_id', distinct_id)
+2 -6
View File
@@ -1,5 +1,5 @@
import Vue from 'vue'
import crypto from 'crypto'
import md5 from '@/helpers/md5'
let hasLocalStorage = typeof Storage !== 'undefined'
@@ -22,11 +22,7 @@ Vue.prototype.$mixpanelId = function () {
}
Vue.prototype.$mixpanelServerId = function () {
return crypto
.createHash('md5')
.update(window.location.hostname.toLowerCase())
.digest('hex')
.toUpperCase()
return md5(window.location.hostname.toLowerCase()).toUpperCase()
}
Vue.prototype.$loggedIn = function () {
+28 -5
View File
@@ -1,7 +1,28 @@
/* eslint-env node */
module.exports = {
configureWebpack: {
devtool: 'eval-source-map'
const webpack = require('webpack')
const SpeedMeasurePlugin = require('speed-measure-webpack-plugin')
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
const LodashModuleReplacementPlugin = require('lodash-webpack-plugin')
const { DuplicateReporterPlugin } = require('duplicate-dependencies-webpack-plugin')
const isProdBuild = process.env.NODE_ENV === 'production'
const shouldEnableProfiling = (process.argv || []).includes('--profile')
/** @type {import('@vue/cli-service').ProjectOptions} */
const config = {
chainWebpack: (config) => {
// Adding profiling plugins, if flag set
if (shouldEnableProfiling) {
config.plugin('webpack-profiling').use(webpack.debug.ProfilingPlugin)
config.plugin('speed-measure').use(SpeedMeasurePlugin)
config.plugin('bundle-analyzer').use(BundleAnalyzerPlugin)
}
config.plugin('duplicate-detection').use(DuplicateReporterPlugin)
config.plugin('lodash-optimization').use(LodashModuleReplacementPlugin)
// Setting source map according to build env
config.devtool(isProdBuild ? false : 'eval-source-map')
},
productionSourceMap: false,
pages: {
@@ -27,6 +48,8 @@ module.exports = {
{ from: /./, to: '/app.html' }
]
}
},
transpileDependencies: ['vuetify']
// progress: false // Disables progress bar in dev server build
}
}
module.exports = config
+335
View File
@@ -14,6 +14,7 @@
"regenerator-runtime": "^0.13.7"
},
"devDependencies": {
"@babel/cli": "7.15.7",
"@babel/preset-env": "^7.16.11",
"@rollup/plugin-babel": "^5.3.1",
"@rollup/plugin-commonjs": "^21.0.3",
@@ -42,6 +43,53 @@
"node": ">=6.0.0"
}
},
"node_modules/@babel/cli": {
"version": "7.15.7",
"resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.15.7.tgz",
"integrity": "sha512-YW5wOprO2LzMjoWZ5ZG6jfbY9JnkDxuHDwvnrThnuYtByorova/I0HNXJedrUfwuXFQfYOjcqDA4PU3qlZGZjg==",
"dev": true,
"dependencies": {
"commander": "^4.0.1",
"convert-source-map": "^1.1.0",
"fs-readdir-recursive": "^1.1.0",
"glob": "^7.0.0",
"make-dir": "^2.1.0",
"slash": "^2.0.0",
"source-map": "^0.5.0"
},
"bin": {
"babel": "bin/babel.js",
"babel-external-helpers": "bin/babel-external-helpers.js"
},
"engines": {
"node": ">=6.9.0"
},
"optionalDependencies": {
"@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3",
"chokidar": "^3.4.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/cli/node_modules/commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
"dev": true,
"engines": {
"node": ">= 6"
}
},
"node_modules/@babel/cli/node_modules/slash": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
"integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/@babel/code-frame": {
"version": "7.16.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
@@ -1708,6 +1756,13 @@
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
"node_modules/@nicolo-ribaudo/chokidar-2": {
"version": "2.1.8-no-fsevents.3",
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
"integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==",
"dev": true,
"optional": true
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -1941,6 +1996,20 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
"optional": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -2031,6 +2100,16 @@
"node": ">= 0.8"
}
},
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true,
"optional": true,
"engines": {
"node": ">=8"
}
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -2152,6 +2231,47 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"funding": [
{
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
],
"optional": true,
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/chokidar/node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"optional": true,
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/clean-stack": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
@@ -2671,6 +2791,12 @@
}
}
},
"node_modules/fs-readdir-recursive": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
"integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==",
"dev": true
},
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -2963,6 +3089,19 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"optional": true,
"dependencies": {
"binary-extensions": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/is-core-module": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
@@ -3149,6 +3288,28 @@
"sourcemap-codec": "^1.4.8"
}
},
"node_modules/make-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
"integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
"dev": true,
"dependencies": {
"pify": "^4.0.1",
"semver": "^5.6.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/make-dir/node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true,
"bin": {
"semver": "bin/semver"
}
},
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -3235,6 +3396,16 @@
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
"integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg=="
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"optional": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-inspect": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
@@ -3380,6 +3551,15 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/pify": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/portfinder": {
"version": "1.0.28",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
@@ -3480,6 +3660,19 @@
"safe-buffer": "^5.1.0"
}
},
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"optional": true,
"dependencies": {
"picomatch": "^2.2.1"
},
"engines": {
"node": ">=8.10.0"
}
},
"node_modules/regenerate": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
@@ -4060,6 +4253,37 @@
"@jridgewell/trace-mapping": "^0.3.0"
}
},
"@babel/cli": {
"version": "7.15.7",
"resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.15.7.tgz",
"integrity": "sha512-YW5wOprO2LzMjoWZ5ZG6jfbY9JnkDxuHDwvnrThnuYtByorova/I0HNXJedrUfwuXFQfYOjcqDA4PU3qlZGZjg==",
"dev": true,
"requires": {
"@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3",
"chokidar": "^3.4.0",
"commander": "^4.0.1",
"convert-source-map": "^1.1.0",
"fs-readdir-recursive": "^1.1.0",
"glob": "^7.0.0",
"make-dir": "^2.1.0",
"slash": "^2.0.0",
"source-map": "^0.5.0"
},
"dependencies": {
"commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
"dev": true
},
"slash": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
"integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
"dev": true
}
}
},
"@babel/code-frame": {
"version": "7.16.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
@@ -5230,6 +5454,13 @@
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
"@nicolo-ribaudo/chokidar-2": {
"version": "2.1.8-no-fsevents.3",
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
"integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==",
"dev": true,
"optional": true
},
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -5401,6 +5632,17 @@
"color-convert": "^2.0.1"
}
},
"anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
"optional": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
}
},
"argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -5476,6 +5718,13 @@
"safe-buffer": "5.1.2"
}
},
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true,
"optional": true
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -5550,6 +5799,35 @@
"supports-color": "^7.1.0"
}
},
"chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"optional": true,
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"fsevents": "~2.3.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"dependencies": {
"glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"optional": true,
"requires": {
"is-glob": "^4.0.1"
}
}
}
},
"clean-stack": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
@@ -5943,6 +6221,12 @@
"integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==",
"dev": true
},
"fs-readdir-recursive": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
"integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==",
"dev": true
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -6159,6 +6443,16 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"optional": true,
"requires": {
"binary-extensions": "^2.0.0"
}
},
"is-core-module": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
@@ -6306,6 +6600,24 @@
"sourcemap-codec": "^1.4.8"
}
},
"make-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
"integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
"dev": true,
"requires": {
"pify": "^4.0.1",
"semver": "^5.6.0"
},
"dependencies": {
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
}
}
},
"merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -6374,6 +6686,13 @@
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
"integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg=="
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"optional": true
},
"object-inspect": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
@@ -6480,6 +6799,12 @@
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true
},
"pify": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true
},
"portfinder": {
"version": "1.0.28",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
@@ -6544,6 +6869,16 @@
"safe-buffer": "^5.1.0"
}
},
"readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"optional": true,
"requires": {
"picomatch": "^2.2.1"
}
},
"regenerate": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+1 -1
View File
@@ -38,7 +38,7 @@
"webpack-dev-server": "^4.6.0"
},
"engines": {
"node": "^14.0.0"
"node": ">=14.0.0 <17.0.0"
}
},
"../objectloader": {
+1 -1
View File
@@ -11,7 +11,7 @@
"directory": "packages/preview-service"
},
"engines": {
"node": "^14.0.0"
"node": ">=14.0.0 <17.0.0"
},
"scripts": {
"dev": "DEBUG='preview-service:*' nodemon --trace-deprecation ./bin/www",
+21438 -17896
View File
File diff suppressed because it is too large Load Diff