upd: remove lucksheet

This commit is contained in:
purocean
2022-05-10 22:12:52 +08:00
parent 252af2677c
commit 64abd17a12
7 changed files with 25 additions and 545 deletions
-2
View File
@@ -108,8 +108,6 @@
"juice": "^8.0.0",
"katex": "^0.15.3",
"lodash-es": "^4.17.21",
"luckyexcel": "^1.0.1",
"luckysheet": "^2.1.13",
"markdown-it": "^12.3.2",
"markdown-it-abbr": "^1.0.4",
"markdown-it-attributes": "^0.0.8",
+25 -429
View File
@@ -1,311 +1,34 @@
import { defineComponent, h, ref, watch } from 'vue'
import { h } from 'vue'
import Markdown from 'markdown-it'
import { Plugin } from '@fe/context'
import { getLogger } from '@fe/utils'
import type { Doc } from '@fe/types'
import { useModal } from '@fe/support/ui/modal'
import { useToast } from '@fe/support/ui/toast'
import { dirname, join } from '@fe/utils/path'
import { isElectron, openWindow } from '@fe/support/env'
import store from '@fe/support/store'
import * as api from '@fe/support/api'
import { refreshTree } from '@fe/services/tree'
import { buildSrc, IFrame } from '@fe/support/embed'
import { getCurrentLanguage, t, useI18n } from '@fe/services/i18n'
import { DOM_ATTR_NAME, FLAG_DEMO } from '@fe/support/args'
import Mask from '@fe/components/Mask.vue'
const logger = getLogger('plugin-markdown-luckysheet')
const fileExt = '.luckysheet'
function buildSrcdoc (repo: string, path: string, full: boolean) {
if (!path.endsWith('.luckysheet')) {
return 'Error: support luckysheet file only'
}
const lang = getCurrentLanguage() === 'zh-CN' ? 'zh' : 'en'
const options = { container: 'lucky-sheet', lang, plugins: ['chart'], showtoolbarConfig: { print: false } }
let onload = ''
if (full) {
onload = `
const btn = document.createElement('button');
btn.style = 'border-radius: 4px;border: 0; background: #d3d4d5; cursor: pointer; margin-left: 10px; color: #24292f; padding: 4px 8px;';
btn.innerText = '${t('save')}'
btn.onclick = save
document.querySelector('.luckysheet_info_detail .sheet-name').after(btn)
document.querySelector('.luckysheet_info_detail .luckysheet_info_detail_update').innerText = '${path}'
setStatus('${t('file-status.loaded')}')
${isElectron
? `
let closeWindow = false
const remote = window.nodeRequire && window.nodeRequire('@electron/remote')
window.onbeforeunload = evt => {
if (saved() || closeWindow) return null
if (!remote) {
return true
}
evt.returnValue = true
setTimeout(() => {
let result = remote.dialog.showMessageBoxSync({
type: 'question',
cancelId: 1,
message: '${t('quit-check-dialog.desc')}',
buttons: ['${t('quit-check-dialog.buttons.discard')}', '${t('quit-check-dialog.buttons.cancel')}']
})
if (result === 0) {
closeWindow = true
remote.getCurrentWindow().close()
}
})
}` : 'window.onbeforeunload = () => saved() ? null : true'
}
window.addEventListener('keydown', e => {
const isMacOS = /macintosh|mac os x/i.test(navigator.userAgent)
const ctrl = isMacOS ? e.metaKey : e.ctrlKey
if (ctrl && e.code === 'KeyS') {
save()
e.stopPropagation()
e.preventDefault()
}
})
`
Object.assign(options, {})
} else {
Object.assign(options, {
showtoolbar: false,
showinfobar: false,
allowEdit: false,
showsheetbarConfig: {
add: false,
menu: false,
sheet: true
},
sheetRightClickConfig: {
delete: false,
copy: false,
rename: false,
color: false,
hide: false,
move: false,
},
})
}
return `
<link rel="stylesheet" href="/embed/plugins/css/pluginsCss.css" />
<link rel="stylesheet" href="/embed/plugins/plugins.css" />
<link rel="stylesheet" href="/embed/css/luckysheet.css" />
<link rel="stylesheet" href="/embed/assets/iconfont/iconfont.css" />
<link rel="stylesheet" href="/embed/expendPlugins/chart/chartmix.css" />
<style>
html, body {
height: 100%;
padding: 0;
margin: 0;
}
.luckysheet_info_detail_back ,
.luckysheet_info_detail .sheet-name {
display: none;
}
.luckysheet_info_detail .luckysheet_info_detail_update {
font-size: 18px;
color: #222;
}
</style>
<div id="lucky-sheet" style="height: 100%"></div>
<script src="/embed/plugins/js/plugin.js"></script>
<script src="/embed/luckysheet.umd.js"></script>
<script>
window.getStatus = () => document.querySelector('.luckysheet_info_detail .luckysheet_info_detail_save').innerText
window.setStatus = str => document.querySelector('.luckysheet_info_detail .luckysheet_info_detail_save').innerText = str
window.saved = () => getStatus().startsWith('${t('lucky-sheet.saved-at')}') || getStatus() === '${t('file-status.loaded')}'
async function readFile (repo, path) {
try {
if (embedCtx.args.FLAG_DEMO) {
repo = 'help'
}
const { hash, content } = await embedCtx.api.readFile({ repo, path })
window.hash = hash
return content
} catch (error) {
document.getElementById('lucky-sheet').innerHTML = error.message
}
}
async function writeFile (repo, path, content) {
try {
return await embedCtx.api.writeFile({ repo, path, contentHash: window.hash }, content)
} catch (error) {
repo !== '__help__' && alert(error.message)
throw error
}
}
function workbookCreateAfter () {
${onload}
}
const path = '${path}'
const repo = '${repo}'
async function save () {
try {
setStatus('${t('file-status.saving')}...')
await writeFile(repo, path, JSON.stringify(window.luckysheet.getAllSheets()))
setStatus('${t('lucky-sheet.saved-at')}: ' + (new Date()).toLocaleString())
await readFile(repo, path)
} catch (error) {
setStatus('${t('file-status.save-failed')}: ' + error.message)
}
}
async function init () {
const options = ${JSON.stringify(options)}
options.hook = {
workbookCreateAfter,
updated () {
setStatus('${t('file-status.unsaved')}')
}
}
const content = await readFile(repo, path)
options.data = JSON.parse(content)
window.luckysheet.create(options)
}
window.addEventListener('load', init)
</script>
`
}
const LuckyComponent = defineComponent({
name: 'lucky-sheet',
props: {
repo: String,
path: String
},
setup (props) {
logger.debug('setup', props)
useI18n()
const srcdoc = ref('')
const refIFrame = ref<any>()
const refFullIFrame = ref<any>()
const fullScreen = ref(false)
const update = () => {
srcdoc.value = buildSrcdoc(props.repo!, props.path!, false)
}
const reload = () => {
refIFrame.value.reload()
}
const open = () => {
fullScreen.value = true
}
const close = async () => {
try {
refFullIFrame.value.close()
fullScreen.value = false
} catch {
if (await useModal().confirm({ title: t('quit-check-dialog.title'), content: t('quit-check-dialog.desc') })) {
fullScreen.value = false
}
}
}
watch(props, update, { immediate: true })
if (FLAG_DEMO) {
watch([refFullIFrame, refIFrame], () => {
if (refIFrame.value) {
refIFrame.value.reload = () => {
useToast().show('warning', t('demo-tips'))
}
}
document.querySelectorAll('iframe.lucky-sheet').forEach(x => {
(x as any).contentWindow.fetch = window.fetch
})
})
}
const button = (text: string, onClick: any) => h('button', {
class: 'small',
onClick
}, text)
const topOffset = isElectron ? '30px' : '0px'
const buildIFrame = (full: boolean) => h(IFrame, {
ref: full ? refFullIFrame : refIFrame,
html: buildSrcdoc(props.repo!, props.path!, full),
debounce: 1000,
iframeProps: {
class: 'lucky-sheet',
style: 'background: #fff; margin: 0;display:block;height: ' + (full ? `calc(100vh - ${topOffset})` : '500px'),
width: '100%'
}
})
return () => [
fullScreen.value && h(Mask, {
show: true,
maskCloseable: false,
escCloseable: false,
style: { paddingTop: topOffset }
}, [
h(
'div',
{
class: 'skip-print',
style: 'position: absolute; right: 10px; margin-top: 15px; z-index: 1;'
},
button(t('close'), close),
),
buildIFrame(true),
]),
h('div', { class: 'lucky-sheet-wrapper reduce-brightness', style: 'position: relative' }, [
h(
'div',
{ class: 'lucky-sheet-action skip-print' },
[
button(t('reload'), reload),
button(t('edit'), open),
button(t('open-in-new-window'), () => {
const html = buildSrcdoc(props.repo!, props.path!, true)
openWindow(buildSrc(html, t('lucky-sheet.edit-sheet'), false), '_blank', { alwaysOnTop: false })
}),
]
),
buildIFrame(false)
])
]
}
})
import { DOM_ATTR_NAME } from '@fe/support/args'
import { getInitialized, getLoadStatus } from '@fe/others/extension'
import { t } from '@fe/services/i18n'
const MarkdownItPlugin = (md: Markdown) => {
const extensionId = '@yank-note/extension-luckysheet'
const checkExtensionLoaded = () => !!getLoadStatus(extensionId).version
const render = () => {
if (!getInitialized()) {
return null
}
return h('p', h(
'a',
{ href: `javascript:ctx.showExtensionManager('${extensionId}')` },
h('i', t('install-extension-tips', 'Luckyseet'))
))
}
const linkTemp = md.renderer.rules.link_open!.bind(md.renderer.rules)
md.renderer.rules.link_open = (tokens, idx, options, env, slf) => {
if (checkExtensionLoaded()) {
return linkTemp(tokens, idx, options, env, slf)
}
const token = tokens[idx]
if (token.attrGet('link-type') !== 'luckysheet') {
@@ -322,99 +45,12 @@ const MarkdownItPlugin = (md: Markdown) => {
return linkTemp(tokens, idx, options, env, slf)
}
const path = join(dirname(currentFile.path), url)
const nextToken = tokens[idx + 1]
if (nextToken && nextToken.type === 'text') {
nextToken.content = ''
}
return h(LuckyComponent, { repo: currentFile.repo, path }) as any
}
}
async function createLuckysheet (node: Doc) {
const currentPath = node.path
let filename = await useModal().input({
title: t('lucky-sheet.create-dialog-title'),
hint: t('document.create-dialog.hint'),
content: t('document.current-path', currentPath),
value: 'new-sheet' + fileExt,
select: true
})
if (!filename) {
return
}
if (!filename.endsWith(fileExt)) {
filename = filename.replace(/\/$/, '') + fileExt
}
const path = join(currentPath, filename)
if (!path) {
throw new Error('Need Path')
}
const file: Doc = { repo: node.repo, path: path, type: 'file', name: '', contentHash: 'new' }
if (typeof file.content !== 'string') {
file.content = JSON.stringify([{
name: 'Sheet1',
color: '',
status: 1,
order: 0,
data: Array(20).fill(Array(14).fill(null)),
config: {
merge: {},
rowlen: {},
rowhidden: {}
},
index: 0,
jfgird_select_save: [],
luckysheet_select_save: [{
row: [0, 0],
column: [0, 0],
row_focus: 0,
column_focus: 0,
left: 0,
width: 73,
top: 0,
height: 19,
left_move: 0,
width_move: 73,
top_move: 0,
height_move: 19
}],
visibledatarow: [],
visibledatacolumn: [],
ch_width: 4560,
rh_height: 1760,
luckysheet_selection_range: [],
zoomRatio: 1,
scrollLeft: 0,
scrollTop: 0,
calcChain: [],
filter_select: null,
filter: null,
luckysheet_conditionformat_save: [],
luckysheet_alternateformat_save: [],
dataVerification: {},
hyperlink: {},
celldata: []
}])
}
try {
await api.writeFile(file, file.content)
const srcdoc = buildSrcdoc(file.repo, file.path, true)
openWindow(buildSrc(srcdoc, t('lucky-sheet.edit-sheet'), false), '_blank', { alwaysOnTop: false })
refreshTree()
} catch (error: any) {
useToast().show('warning', error.message)
console.error(error)
return render() as any
}
}
@@ -422,45 +58,5 @@ export default {
name: 'markdown-luckysheet',
register: ctx => {
ctx.markdown.registerPlugin(MarkdownItPlugin)
ctx.theme.addStyles(`
.markdown-view .markdown-body .lucky-sheet-wrapper .lucky-sheet-action {
position: absolute;
right: 10px;
top: 3px;
z-index: 1;
opacity: 0;
transition: opacity .2s;
}
.markdown-view .markdown-body .lucky-sheet-wrapper:hover .lucky-sheet-action {
opacity: 1;
}
`)
ctx.registerHook('TREE_NODE_SELECT', async ({ node }) => {
if (node.path.toLowerCase().endsWith(fileExt)) {
const srcdoc = buildSrcdoc(node.repo, node.path, true)
openWindow(buildSrc(srcdoc, t('lucky-sheet.edit-sheet'), false), '_blank', { alwaysOnTop: false })
return true
}
return false
})
ctx.tree.tapContextMenus((items, node) => {
if (node.type === 'dir') {
items.push(
{ type: 'separator' },
{
id: 'create-luckysheet',
type: 'normal',
label: t('lucky-sheet.create-dialog-title'),
onClick: () => createLuckysheet(node)
}
)
}
})
}
} as Plugin
-1
View File
@@ -19,7 +19,6 @@ declare module 'monaco-editor/esm/vs/basic-languages/markdown/markdown.js'
declare module 'monaco-editor/esm/vs/editor/contrib/folding/indentRangeProvider.js'
declare module 'filenamify/browser'
declare module 'katex'
declare module 'luckyexcel'
declare module 'xterm-theme'
declare module 'parse-author'
declare module 'js-untar'
-5
View File
@@ -433,11 +433,6 @@ const data = {
'delete-col': 'Delete Column',
},
},
'lucky-sheet': {
'saved-at': 'Saved at',
'edit-sheet': 'Edit Sheet',
'create-dialog-title': 'Create Luckysheet File',
},
'markdown-link': {
'convert-to-titled-link': 'Convert to Titled Link',
},
-5
View File
@@ -434,11 +434,6 @@ const data: BaseLanguage = {
'delete-col': '删除列',
},
},
'lucky-sheet': {
'saved-at': '保存于',
'edit-sheet': '编辑表格',
'create-dialog-title': '创建 Luckysheet 文件',
},
'markdown-link': {
'convert-to-titled-link': '转换为带标题的链接',
},
-20
View File
@@ -13,26 +13,6 @@ if (!fs.existsSync(vsDist)) {
)
}
// copy lucky-sheet
// must use embed dir
const luckySheetDist = path.resolve(__dirname, 'src/renderer/public/embed')
if (!fs.existsSync(path.join(luckySheetDist, 'luckysheet.umd.js'))) {
fs.copySync(
path.resolve(__dirname, 'node_modules/luckysheet/dist'),
luckySheetDist,
{
filter: src => {
if (src.includes('demoData') || src.includes('esm.js') || src.includes('index.html')) {
return false
}
return true
}
}
)
}
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue(), vueJsx()],
-83
View File
@@ -516,13 +516,6 @@
"@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-syntax-typescript" "^7.16.7"
"@babel/runtime@^7.12.1":
version "7.14.6"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d"
integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/template@^7.0.0", "@babel/template@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155"
@@ -3616,11 +3609,6 @@ dayjs@^1.10.5:
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.5.tgz#5600df4548fc2453b3f163ebb2abbe965ccfb986"
integrity sha512-BUFis41ikLz+65iH6LHQCDm4YPMj5r1YFLdupPIyM4SGcXMmtiLQ7U37i+hGS8urIuqe7I/ou3IS1jVc4nbN4g==
dayjs@^1.9.6:
version "1.10.6"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.6.tgz#288b2aa82f2d8418a6c9d4df5898c0737ad02a63"
integrity sha512-AztC/IOW4L1Q41A86phW5Thhcrco3xuAA+YX/BLpLWWjRcTj5TOt/QImBLmCKlrF7u7k47arTnOyL6GnbG8Hvw==
debounce-fn@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-3.0.1.tgz#034afe8b904d985d1ec1aa589cd15f388741d680"
@@ -4875,11 +4863,6 @@ flat-cache@^3.0.4:
flatted "^3.1.0"
rimraf "^3.0.2"
flatpickr@^4.6.6:
version "4.6.9"
resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.9.tgz#9a13383e8a6814bda5d232eae3fcdccb97dc1499"
integrity sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==
flatted@^3.1.0:
version "3.2.4"
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2"
@@ -5454,11 +5437,6 @@ ignore@^5.1.1, ignore@^5.1.4:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
immediate@~3.0.5:
version "3.0.6"
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
import-fresh@^3.0.0, import-fresh@^3.2.1:
version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
@@ -6303,11 +6281,6 @@ jest@^27.4.5:
import-local "^3.0.2"
jest-cli "^27.4.5"
jquery@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02"
integrity sha1-LInWiJterFIqfuoywUUhVZxsvwI=
js-stringify@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db"
@@ -6505,16 +6478,6 @@ jstransformer@1.0.0:
is-promise "^2.0.0"
promise "^7.0.1"
jszip@^3.5.0:
version "3.7.1"
resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.7.1.tgz#bd63401221c15625a1228c556ca8a68da6fda3d9"
integrity sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==
dependencies:
lie "~3.3.0"
pako "~1.0.2"
readable-stream "~2.3.6"
set-immediate-shim "~1.0.1"
juice@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/juice/-/juice-8.0.0.tgz#ac77d3372373409b06a875aee425b9d381f645fe"
@@ -6670,13 +6633,6 @@ levn@~0.3.0:
prelude-ls "~1.1.2"
type-check "~0.3.2"
lie@~3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a"
integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==
dependencies:
immediate "~3.0.5"
lines-and-columns@^1.1.6:
version "1.1.6"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
@@ -6828,25 +6784,6 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
luckyexcel@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/luckyexcel/-/luckyexcel-1.0.1.tgz#55791f28bb5393e9dff8ba77c11f9c05f9ceb5ae"
integrity sha512-hvbJmCXNp/vST/huA6sieDn32Ib8bd80L9aIu5ZGxniJvZle7VlpHZrl6weLGaEnX99+t7cPAoYGqrqbfZp/AQ==
dependencies:
jszip "^3.5.0"
luckysheet@^2.1.13:
version "2.1.13"
resolved "https://registry.yarnpkg.com/luckysheet/-/luckysheet-2.1.13.tgz#685d5fc790efddb12d8562294d5f4e41c5ba032d"
integrity sha512-ZotItRKh3fxEtYz0GrZxkf97jeQSGsJpFNAu1I0NMDQ6rVrHAWKeggFak5pClGQ3DP62Gi8kd+8rzOpyY/UNZw==
dependencies:
"@babel/runtime" "^7.12.1"
dayjs "^1.9.6"
flatpickr "^4.6.6"
jquery "^2.2.4"
numeral "^2.0.6"
pako "^1.0.11"
lunr@^2.3.9:
version "2.3.9"
resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1"
@@ -7253,11 +7190,6 @@ nth-check@^2.0.1:
dependencies:
boolbase "^1.0.0"
numeral@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/numeral/-/numeral-2.0.6.tgz#4ad080936d443c2561aed9f2197efffe25f4e506"
integrity sha1-StCAk21EPCVhrtnyGX7//iX05QY=
nwsapi@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
@@ -7433,11 +7365,6 @@ package-json@^6.3.0:
registry-url "^5.0.0"
semver "^6.2.0"
pako@^1.0.11, pako@~1.0.2:
version "1.0.11"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
pako@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d"
@@ -7975,11 +7902,6 @@ redent@^3.0.0:
indent-string "^4.0.0"
strip-indent "^3.0.0"
regenerator-runtime@^0.13.4:
version "0.13.7"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
regexpp@^3.0.0, regexpp@^3.1.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
@@ -8219,11 +8141,6 @@ set-blocking@^2.0.0:
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
set-immediate-shim@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
setprototypeof@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"