add: eslint

This commit is contained in:
liyulin 2023-03-12 15:58:45 +08:00
parent 7444e66653
commit 0c9f7ef30a
33 changed files with 857 additions and 348 deletions

3
.eslintignore Normal file
View File

@ -0,0 +1,3 @@
node_modules/
lib/
dist/

24
.eslintrc.js Normal file
View File

@ -0,0 +1,24 @@
module.exports = {
'env': {
'node': true,
'es2021': true
},
'extends': [
'eslint:recommended',
'plugin:vue/vue3-essential'
],
'overrides': [
],
'parserOptions': {
'ecmaVersion': 'latest',
'sourceType': 'module'
},
'plugins': [
'vue'
],
'rules': {
'semi': ['error','always'],
'no-multi-spaces': ['error', { ignoreEOLComments: false }],
'quotes': ['error', 'single']
}
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,8 +5,8 @@
<link rel="icon" type="image/svg+xml" href="/vue-office/examples/dist/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + Vue</title>
<script type="module" crossorigin src="/vue-office/examples/dist/assets/index-b1870083.js"></script>
<link rel="stylesheet" href="/vue-office/examples/dist/assets/index-171e346f.css">
<script type="module" crossorigin src="/vue-office/examples/dist/assets/index-3b4c4444.js"></script>
<link rel="stylesheet" href="/vue-office/examples/dist/assets/index-78ff3081.css">
</head>
<body>
<div id="app"></div>

View File

@ -1,13 +1,13 @@
<script setup>
import {ref, onMounted} from 'vue'
import DocxDemo from './components/DocxDemo.vue'
import ExcelDemo from './components/ExcelDemo.vue'
import PdfDemo from './components/PdfDemo.vue'
import {ref, onMounted} from 'vue';
import DocxDemo from './components/DocxDemo.vue';
import ExcelDemo from './components/ExcelDemo.vue';
import PdfDemo from './components/PdfDemo.vue';
const activeKey = ref('DOCX')
const activeKey = ref('DOCX');
onMounted(()=>{
})
});
</script>
<template>

View File

@ -1,13 +1,19 @@
<script setup>
import {defineProps} from 'vue'
import usePreview from '../hooks/usePreview.js'
import {defineProps, watch} from 'vue';
import usePreview from '../hooks/usePreview.js';
import useLoading from '../hooks/useLoading.js';
const props = defineProps({
accept: String,
placeholder: String,
defaultSrc: String
})
});
const {type, inputSrc, src, fileList, beforeUpload} = usePreview(props.defaultSrc)
const {type, inputSrc, src, fileList, beforeUpload} = usePreview(props.defaultSrc);
watch(src,()=>{
useLoading.showLoading();
},{
immediate: true
});
</script>

View File

@ -1,6 +1,14 @@
<script setup>
import VueOfficeDocx from '../../../packages/docx/index'
import PreviewWrapper from '../common/PreviewWrapper.vue'
import VueOfficeDocx from '../../../packages/docx/index';
import PreviewWrapper from '../common/PreviewWrapper.vue';
import useLoading from '../hooks/useLoading.js';
function onRendered(){
useLoading.hideLoading();
}
function onError(e){
console.log('出差',e);
useLoading.hideLoading();
}
</script>
<template>
@ -10,7 +18,12 @@ import PreviewWrapper from '../common/PreviewWrapper.vue'
default-src="https://501351981.github.io/vue-office/examples/dist/static/test-files/test.docx"
>
<template v-slot="slotProps">
<VueOfficeDocx :src="slotProps.src" style="flex: 1;height: 0"/>
<VueOfficeDocx
:src="slotProps.src"
style="flex: 1;height: 0"
@rendered="onRendered"
@error="onError"
/>
</template>
</PreviewWrapper>

View File

@ -1,10 +1,16 @@
<script setup>
import VueOfficeExcel from '../../../packages/excel/index'
import '../../../packages/excel/src/index.css'
import PreviewWrapper from '../common/PreviewWrapper.vue'
function onError(e){
console.log('出差',e)
import VueOfficeExcel from '../../../packages/excel/index';
import '../../../packages/excel/src/index.css';
import PreviewWrapper from '../common/PreviewWrapper.vue';
import useLoading from '../hooks/useLoading.js';
function onRendered(){
useLoading.hideLoading();
}
function onError(e){
console.log('出差',e);
useLoading.hideLoading();
}
</script>
<template>
@ -14,7 +20,13 @@ function onError(e){
default-src="https://501351981.github.io/vue-office/examples/dist/static/test-files/test.xlsx"
>
<template v-slot="slotProps">
<VueOfficeExcel :src="slotProps.src" style="flex: 1;height: 0" @error="onError"/>
<VueOfficeExcel
:src="slotProps.src"
style="flex: 1;height: 0"
v-loading="true"
@rendered="onRendered"
@error="onError"
/>
</template>
</PreviewWrapper>

View File

@ -1,6 +1,14 @@
<script setup>
import VueOfficePdf from '../../../packages/pdf/index'
import PreviewWrapper from '../common/PreviewWrapper.vue'
import VueOfficePdf from '../../../packages/pdf/index';
import PreviewWrapper from '../common/PreviewWrapper.vue';
import useLoading from '../hooks/useLoading.js';
function onRendered(){
useLoading.hideLoading();
}
function onError(e){
console.log('出差',e);
useLoading.hideLoading();
}
</script>
<template>
@ -10,7 +18,12 @@ import PreviewWrapper from '../common/PreviewWrapper.vue'
default-src="https://501351981.github.io/vue-office/examples/dist/static/test-files/test.pdf"
>
<template v-slot="slotProps">
<VueOfficePdf :src="slotProps.src" style="flex: 1;height: 0"/>
<VueOfficePdf
:src="slotProps.src"
style="flex: 1;height: 0"
@rendered="onRendered"
@error="onError"
/>
</template>
</PreviewWrapper>
</template>

View File

@ -0,0 +1,21 @@
import { message } from 'ant-design-vue';
import {ref} from 'vue';
let loading = ref(false);
let hide;
function showLoading(content){
hide = message.loading(content, 0);
loading.value = true;
}
function hideLoading(){
if(loading.value === true){
hide();
loading.value = false;
}
}
export default {
loading,
showLoading,
hideLoading
};

View File

@ -1,17 +1,17 @@
import {ref} from 'vue'
import {ref} from 'vue';
export default function (defaultSrc){
const type = ref('url')
const inputSrc = ref(defaultSrc)
const src = ref(defaultSrc)
const fileList = ref([])
const type = ref('url');
const inputSrc = ref(defaultSrc);
const src = ref(defaultSrc);
const fileList = ref([]);
function beforeUpload(file){
let reader = new FileReader();
reader.onload = (loadEvent) => {
let arrayBuffer = loadEvent.target.result;
src.value = arrayBuffer
src.value = arrayBuffer;
};
reader.readAsArrayBuffer(file);
return false
return false;
}
return {
@ -20,5 +20,5 @@ export default function (defaultSrc){
src,
fileList,
beforeUpload
}
};
}

View File

@ -1,5 +1,5 @@
import { createApp } from 'vue'
import './style.css'
import { createApp } from 'vue';
import './style.css';
import Antd from 'ant-design-vue';
import App from './App.vue';
import 'ant-design-vue/dist/antd.css';

View File

@ -15,6 +15,8 @@
"devDependencies": {
"@vitejs/plugin-vue": "^4.0.0",
"@vue/composition-api": "^1.7.1",
"eslint": "^8.36.0",
"eslint-plugin-vue": "^9.9.0",
"lerna": "^6.4.1",
"less": "^4.1.3",
"less-loader": "^11.1.0",

View File

@ -1,7 +1,7 @@
import VueOfficeDocx from './src/main.vue'
import VueOfficeDocx from './src/main.vue';
VueOfficeDocx.install = function (Vue) {
Vue.component(VueOfficeDocx.name, VueOfficeDocx)
}
Vue.component(VueOfficeDocx.name, VueOfficeDocx);
};
export default VueOfficeDocx
export default VueOfficeDocx;

View File

@ -1,6 +1,6 @@
<script>
import {defineComponent, ref, onMounted, watch} from 'vue-demi';
import docx from './docx'
import docx from './docx';
export default defineComponent({
name: 'VueOfficeDocx',
props: {
@ -12,43 +12,43 @@ export default defineComponent({
},
emits:['rendered', 'error'],
setup(props, { emit }){
const rootRef = ref(null)
const rootRef = ref(null);
function init(){
let container = rootRef.value
let container = rootRef.value;
docx.getData(props.src, props.requestOptions).then(res => {
docx.render(res, container).then(() => {
emit('rendered')
emit('rendered');
}).catch(e => {
docx.render('', container)
emit('error', e)
})
docx.render('', container);
emit('error', e);
});
}).catch(e => {
docx.render('', container)
emit('error', e)
})
docx.render('', container);
emit('error', e);
});
}
onMounted(()=>{
if(props.src){
init()
init();
}
})
});
watch(() => props.src, () =>{
if (props.src) {
init()
init();
} else {
docx.render('', rootRef.value).then(() => {
emit('rendered')
})
emit('rendered');
});
}
})
});
return {
rootRef
};
}
}
})
});
</script>
<template>

View File

@ -1,8 +1,8 @@
import { defineConfig } from 'vite';
import { createVuePlugin } from 'vite-plugin-vue2'
import vue3 from '@vitejs/plugin-vue'
import * as compiler from '@vue/compiler-sfc'
import { isVue2 } from 'vue-demi'
import { createVuePlugin } from 'vite-plugin-vue2';
import vue3 from '@vitejs/plugin-vue';
import * as compiler from '@vue/compiler-sfc';
import { isVue2 } from 'vue-demi';
const { resolve } = require('path');
export default defineConfig({

View File

@ -1,7 +1,7 @@
import VueOfficeExcel from './src/main.vue'
import VueOfficeExcel from './src/main.vue';
VueOfficeExcel.install = function (Vue) {
Vue.component(VueOfficeExcel.name, VueOfficeExcel)
}
Vue.component(VueOfficeExcel.name, VueOfficeExcel);
};
export default VueOfficeExcel
export default VueOfficeExcel;

View File

@ -1,5 +1,5 @@
function HexToRgb (str) {
str = str.replace("#", "");
str = str.replace('#', '');
var hxs = str.match(/../g);
for (var i = 0; i < 3; i++) hxs[i] = parseInt(hxs[i], 16);
return hxs;
@ -7,8 +7,8 @@ function HexToRgb (str) {
function RgbToHex (a, b, c) {
var hexs = [a.toString(16), b.toString(16), c.toString(16)];
for (var i = 0; i < 3; i++) if (hexs[i].length == 1) hexs[i] = "0" + hexs[i];
return "#" + hexs.join("");
for (var i = 0; i < 3; i++) if (hexs[i].length == 1) hexs[i] = '0' + hexs[i];
return '#' + hexs.join('');
}

View File

@ -1,8 +1,8 @@
import * as Excel from 'exceljs/dist/exceljs'
import {getUrl} from "../../../utils/url";
import tinycolor from "tinycolor2";
import _, {cloneDeep} from "lodash";
import {getDarkColor, getLightColor} from "./color";
import * as Excel from 'exceljs/dist/exceljs';
import {getUrl} from '../../../utils/url';
import tinycolor from 'tinycolor2';
import _, {cloneDeep} from 'lodash';
import {getDarkColor, getLightColor} from './color';
const themeColor = [
'#FFFFFF',
@ -15,67 +15,67 @@ const themeColor = [
'#FFC000',
'#5B9BD5',
'#71AD47'
]
];
let defaultColWidth = 80
let defaultColWidth = 80;
export function getData(src, options={}) {
return fetchExcel(getUrl(src), options)
return fetchExcel(getUrl(src), options);
}
function fetchExcel(src, options) {
return fetch(src, options).then(res=>{
if(res.status !== 200){
return Promise.reject(res)
return Promise.reject(res);
}
return res.arrayBuffer()
})
return res.arrayBuffer();
});
}
export function readExcelData(buffer){
try {
const wb = new Excel.Workbook();
return wb.xlsx.load(buffer)
return wb.xlsx.load(buffer);
}catch (e){
console.warn(e)
return Promise.reject(e)
console.warn(e);
return Promise.reject(e);
}
}
function transferColumns(excelSheet, spreadSheet, options){
for(let i = 0;i < (excelSheet.columns || []).length; i++){
spreadSheet.cols[i.toString()] = {}
spreadSheet.cols[i.toString()] = {};
if(excelSheet.columns[i].width) {
spreadSheet.cols[i.toString()].width = excelSheet.columns[i].width * 6
spreadSheet.cols[i.toString()].width = excelSheet.columns[i].width * 6;
} else {
spreadSheet.cols[i.toString()].width = defaultColWidth
spreadSheet.cols[i.toString()].width = defaultColWidth;
}
}
spreadSheet.cols.len = Math.max(Object.keys(spreadSheet.cols).length, options.minColLength || 0)
spreadSheet.cols.len = Math.max(Object.keys(spreadSheet.cols).length, options.minColLength || 0);
}
function getCellText(cell){
if(typeof cell.value === 'number'){
return cell.value + ''
return cell.value + '';
}
let cellText = ''
let cellText = '';
if(cell.value && cell.value.result) {
// Excel 单元格有公式
cellText = cell.value.result
cellText = cell.value.result;
} else if(cell.value && cell.value.richText) {
// Excel 单元格是多行文本
for(let text in cell.value.richText) {
// 多行文本做累加
cellText += cell.value.richText[text].text
cellText += cell.value.richText[text].text;
}
} else {
// Excel 单元格无公式
cellText = cell.value
cellText = cell.value;
}
return cellText
return cellText;
}
function transferArgbColor(originColor){
if(typeof originColor === 'object'){
@ -92,154 +92,154 @@ function transferArgbColor(originColor){
color.g = parseInt(argb[3], 16);
color.b = parseInt(argb[4], 16);
color.a = parseInt(argb[1], 16) / 255;
return tinycolor(`rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`).toHexString()
return tinycolor(`rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`).toHexString();
} catch (e) {
console.warn(e)
console.warn(e);
}
}
function transferThemeColor(themeIndex, tint){
if(themeIndex > 9){
return '#C7C9CC'
return '#C7C9CC';
}
if(typeof tint === 'undefined'){
return themeColor[themeIndex]
return themeColor[themeIndex];
}else if(tint > 0){
return getLightColor(themeColor[themeIndex], tint)
return getLightColor(themeColor[themeIndex], tint);
}else{
return getDarkColor(themeColor[themeIndex],Math.abs(tint))
return getDarkColor(themeColor[themeIndex],Math.abs(tint));
}
}
function getStyle(cell){
cell.style = cloneDeep(cell.style)
let backGroundColor = null
cell.style = cloneDeep(cell.style);
let backGroundColor = null;
if(cell.style.fill && cell.style.fill.fgColor) {
// 8位字符颜色先转rgb再转16进制颜色
if(cell.style.fill.fgColor.argb){
backGroundColor = transferArgbColor(cell.style.fill.fgColor.argb)
backGroundColor = transferArgbColor(cell.style.fill.fgColor.argb);
}else if(cell.style.fill.fgColor.hasOwnProperty('theme')){
backGroundColor = transferThemeColor(cell.style.fill.fgColor.theme, cell.style.fill.fgColor.tint)
backGroundColor = transferThemeColor(cell.style.fill.fgColor.theme, cell.style.fill.fgColor.tint);
}else{
backGroundColor = '#C7C9CC'
backGroundColor = '#C7C9CC';
}
}
if(backGroundColor) {
cell.style.bgcolor = backGroundColor
cell.style.bgcolor = backGroundColor;
}
//*************************************************************************** */
//*********************字体存在背景色******************************
// 字体颜色
let fontColor = null
let fontColor = null;
if(cell.style.font && cell.style.font.color ) {
if(cell.style.font.color.argb){
fontColor = transferArgbColor(cell.style.font.color.argb)
fontColor = transferArgbColor(cell.style.font.color.argb);
}else if(cell.style.font.color.hasOwnProperty('theme')){
fontColor = transferThemeColor(cell.style.font.color.theme, cell.style.font.color.tint)
fontColor = transferThemeColor(cell.style.font.color.theme, cell.style.font.color.tint);
}else{
fontColor = '#000000'
fontColor = '#000000';
}
}
if(fontColor) {
cell.style.color = fontColor
cell.style.color = fontColor;
}
// exceljs 对齐的格式转成 x-date-spreedsheet 能识别的对齐格式
if(cell.style.alignment ) {
if(cell.style.alignment.horizontal){
cell.style.align = cell.style.alignment.horizontal
cell.style.align = cell.style.alignment.horizontal;
}
if(cell.style.alignment.vertical){
cell.style.valign = cell.style.alignment.vertical
cell.style.valign = cell.style.alignment.vertical;
}
}
if(cell.style.alignment && cell.style.alignment.wrapText) {
cell.style.textwrap = true
cell.style.textwrap = true;
}
if(cell.style.border){
let styleBorder = {}
let styleBorder = {};
Object.keys(cell.style.border).forEach(position =>{
let originBorder = cell.style.border[position]
let bordColor = '#000000'
let originBorder = cell.style.border[position];
let bordColor = '#000000';
if(typeof originBorder.color === 'string'){
bordColor = originBorder.color
bordColor = originBorder.color;
}else if(originBorder.color){
if(originBorder.color.argb){
bordColor = transferArgbColor(originBorder.color.argb)
bordColor = transferArgbColor(originBorder.color.argb);
}else if(originBorder.color.hasOwnProperty('theme')){
bordColor = transferThemeColor(originBorder.color.theme, originBorder.color.tint)
bordColor = transferThemeColor(originBorder.color.theme, originBorder.color.tint);
}
}
styleBorder[position] = [originBorder.style || 'thin', bordColor]
})
cell.style.border2 = {...cell.style.border}
cell.style.border = styleBorder
styleBorder[position] = [originBorder.style || 'thin', bordColor];
});
cell.style.border2 = {...cell.style.border};
cell.style.border = styleBorder;
}
return cell.style
return cell.style;
}
export function transferExcelToSpreadSheet(workbook, options){
let workbookData = []
let workbookData = [];
//console.log(workbook, 'workbook')
workbook.eachSheet((sheet) => {
//console.log(sheet,'sheet')
// 构造x-data-spreadsheet 的 sheet 数据源结构
let sheetData = { name: sheet.name,styles : [], rows: {},cols:{}, merges:[],media:[] }
let sheetData = { name: sheet.name,styles : [], rows: {},cols:{}, merges:[],media:[] };
// 收集合并单元格信息
let mergeAddressData = []
let mergeAddressData = [];
for(let mergeRange in sheet._merges) {
sheetData.merges.push(sheet._merges[mergeRange].shortRange)
let mergeAddress = {}
sheetData.merges.push(sheet._merges[mergeRange].shortRange);
let mergeAddress = {};
// 合并单元格起始地址
mergeAddress.startAddress = sheet._merges[mergeRange].tl
mergeAddress.startAddress = sheet._merges[mergeRange].tl;
// 合并单元格终止地址
mergeAddress.endAddress = sheet._merges[mergeRange].br
mergeAddress.endAddress = sheet._merges[mergeRange].br;
// Y轴方向跨度
mergeAddress.YRange = sheet._merges[mergeRange].model.bottom - sheet._merges[mergeRange].model.top
mergeAddress.YRange = sheet._merges[mergeRange].model.bottom - sheet._merges[mergeRange].model.top;
// X轴方向跨度
mergeAddress.XRange = sheet._merges[mergeRange].model.right - sheet._merges[mergeRange].model.left
mergeAddressData.push(mergeAddress)
mergeAddress.XRange = sheet._merges[mergeRange].model.right - sheet._merges[mergeRange].model.left;
mergeAddressData.push(mergeAddress);
}
transferColumns(sheet,sheetData, options);
// 遍历行
(sheet._rows || []).forEach((row,spreadSheetRowIndex) =>{
sheetData.rows[spreadSheetRowIndex] = { cells: {} }
sheetData.rows[spreadSheetRowIndex] = { cells: {} };
if(row.height){
sheetData.rows[spreadSheetRowIndex].height = row.height;
}
//includeEmpty = false 不包含空白单元格
(row._cells || []).forEach((cell, spreadSheetColIndex) =>{
sheetData.rows[spreadSheetRowIndex].cells[spreadSheetColIndex] = {}
sheetData.rows[spreadSheetRowIndex].cells[spreadSheetColIndex] = {};
let mergeAddress = _.find(mergeAddressData, function(o) { return o.startAddress == cell._address })
let mergeAddress = _.find(mergeAddressData, function(o) { return o.startAddress == cell._address; });
if(mergeAddress && cell.master.address != mergeAddress.startAddress) {
return
return;
}
if(mergeAddress){
sheetData.rows[spreadSheetRowIndex].cells[spreadSheetColIndex].merge = [mergeAddress.YRange, mergeAddress.XRange]
sheetData.rows[spreadSheetRowIndex].cells[spreadSheetColIndex].merge = [mergeAddress.YRange, mergeAddress.XRange];
}
sheetData.rows[spreadSheetRowIndex].cells[spreadSheetColIndex].text = getCellText(cell)
sheetData.styles.push(getStyle(cell))
sheetData.rows[spreadSheetRowIndex].cells[spreadSheetColIndex].style = sheetData.styles.length - 1
})
})
sheetData.rows[spreadSheetRowIndex].cells[spreadSheetColIndex].text = getCellText(cell);
sheetData.styles.push(getStyle(cell));
sheetData.rows[spreadSheetRowIndex].cells[spreadSheetColIndex].style = sheetData.styles.length - 1;
});
});
if(sheetData._media){
sheetData.media = sheetData._media
sheetData.media = sheetData._media;
}
workbookData.push(sheetData)
})
workbookData.push(sheetData);
});
//console.log(workbookData, 'workbookData')
return {
workbookData,
workbookSource: workbook,
medias: workbook.media || []
}
};
}

View File

@ -1,8 +1,8 @@
<script>
import {defineComponent, ref, onMounted, watch} from 'vue-demi';
import Spreadsheet from "x-data-spreadsheet";
import Spreadsheet from 'x-data-spreadsheet';
import {getData, readExcelData, transferExcelToSpreadSheet} from './excel';
import {renderImage, clearCache} from "./media";
import {renderImage, clearCache} from './media';
export default defineComponent({
name: 'VueOfficeExcel',
@ -30,7 +30,7 @@ export default defineComponent({
let sheetIndex = 1;
let ctx = null;
let xs = null;
let offset = null
let offset = null;
function renderExcel(buffer) {
readExcelData(buffer).then(workbook => {
@ -40,9 +40,9 @@ export default defineComponent({
const {workbookData, medias, workbookSource} = transferExcelToSpreadSheet(workbook, props.options);
mediasSource = medias;
workbookDataSource = workbookSource;
offset = null
sheetIndex = 1
clearCache()
offset = null;
sheetIndex = 1;
clearCache();
xs.loadData(workbookData);
renderImage(ctx, mediasSource, workbookDataSource._worksheets[sheetIndex], offset);
emit('rendered');
@ -50,11 +50,11 @@ export default defineComponent({
}).catch(e => {
console.warn(e);
mediasSource = []
mediasSource = [];
workbookDataSource = {
_worksheets:[]
}
clearCache()
};
clearCache();
xs.loadData({});
emit('error', e);
});
@ -80,29 +80,29 @@ export default defineComponent({
}
}).loadData({});
let swapFunc = xs.bottombar.swapFunc
let swapFunc = xs.bottombar.swapFunc;
xs.bottombar.swapFunc = function (index) {
swapFunc.call(xs.bottombar, index)
sheetIndex = index + 1
swapFunc.call(xs.bottombar, index);
sheetIndex = index + 1;
setTimeout(()=>{
xs.reRender()
xs.reRender();
renderImage(ctx, mediasSource, workbookDataSource._worksheets[sheetIndex], offset);
})
});
};
let clear = xs.sheet.editor.clear
let clear = xs.sheet.editor.clear;
xs.sheet.editor.clear = function (...args){
clear.apply(xs.sheet.editor, args)
clear.apply(xs.sheet.editor, args);
setTimeout(()=>{
renderImage(ctx, mediasSource, workbookDataSource._worksheets[sheetIndex], offset);
})
}
let setOffset = xs.sheet.editor.setOffset
});
};
let setOffset = xs.sheet.editor.setOffset;
xs.sheet.editor.setOffset = function (...args){
setOffset.apply(xs.sheet.editor, args)
offset = args[0]
setOffset.apply(xs.sheet.editor, args);
offset = args[0];
renderImage(ctx, mediasSource, workbookDataSource._worksheets[sheetIndex], offset);
}
};
const canvas = rootRef.value.querySelector('canvas');
ctx = canvas.getContext('2d');
if (props.src) {

View File

@ -1,67 +1,67 @@
let cache = []
let cache = [];
export function renderImage(ctx, medias, sheet, offset){
// console.log('medias', medias)
// console.log('sheet', sheet)
// console.log('offset', offset)
if(sheet && sheet._media.length){
sheet._media.forEach(media => {
let {imageId, range, type} = media
if(type === "image"){
let position = calcPosition(sheet,range,offset)
drawImage(ctx,imageId, medias[imageId], position)
let {imageId, range, type} = media;
if(type === 'image'){
let position = calcPosition(sheet,range,offset);
drawImage(ctx,imageId, medias[imageId], position);
}
})
});
}
}
let clipWidth = 60 //左侧序号列宽
let clipHeight = 25 //顶部序号行高
let defaultColWidth = 80
let defaultRowHeight = 24
let devicePixelRatio = window.devicePixelRatio
let clipWidth = 60; //左侧序号列宽
let clipHeight = 25; //顶部序号行高
let defaultColWidth = 80;
let defaultRowHeight = 24;
let devicePixelRatio = window.devicePixelRatio;
function calcPosition(sheet, range, offset){
let {tl={}, br={}} = range
let {nativeCol, nativeColOff, nativeRow, nativeRowOff} = tl
let {tl={}, br={}} = range;
let {nativeCol, nativeColOff, nativeRow, nativeRowOff} = tl;
let basicX = clipWidth
let basicY = clipHeight
let basicX = clipWidth;
let basicY = clipHeight;
for(let i=0; i < nativeCol; i++){
basicX += sheet?._columns?.[i]?.width*6 || defaultColWidth
basicX += sheet?._columns?.[i]?.width*6 || defaultColWidth;
}
for(let i=0; i < nativeRow; i++){
basicY += sheet?._rows?.[i]?.height || defaultRowHeight
basicY += sheet?._rows?.[i]?.height || defaultRowHeight;
}
let x = basicX + nativeColOff/12700
let y = basicY + nativeRowOff/12700
let x = basicX + nativeColOff/12700;
let y = basicY + nativeRowOff/12700;
let {
nativeCol: nativeColEnd,
nativeColOff: nativeColOffEnd,
nativeRow: nativeRowEnd,
nativeRowOff: nativeRowOffEnd
} = br
let width
} = br;
let width;
if(nativeCol === nativeColEnd){
width = (nativeColOffEnd - nativeColOff) / 12700
width = (nativeColOffEnd - nativeColOff) / 12700;
}else {
width = (sheet?._columns?.[nativeCol]?.width*6 || defaultColWidth) - nativeColOff/12700
width = (sheet?._columns?.[nativeCol]?.width*6 || defaultColWidth) - nativeColOff/12700;
for(let i = nativeCol+1; i < nativeColEnd; i++){
width += sheet?._columns?.[i]?.width*6 || defaultColWidth
width += sheet?._columns?.[i]?.width*6 || defaultColWidth;
}
width += nativeColOffEnd / 12700
width += nativeColOffEnd / 12700;
}
let height
let height;
if(nativeRow === nativeRowEnd){
height = (nativeRowOffEnd - nativeRowOff) / 12700
height = (nativeRowOffEnd - nativeRowOff) / 12700;
}else {
height = (sheet?._rows?.[nativeRow]?.height || defaultRowHeight) - nativeRowOff/12700
height = (sheet?._rows?.[nativeRow]?.height || defaultRowHeight) - nativeRowOff/12700;
for(let i = nativeRow+1; i < nativeRowEnd; i++){
height += sheet?._rows?.[i]?.height || defaultRowHeight
height += sheet?._rows?.[i]?.height || defaultRowHeight;
}
height += nativeRowOffEnd / 12700
height += nativeRowOffEnd / 12700;
}
return {
@ -69,49 +69,49 @@ function calcPosition(sheet, range, offset){
y: (y - (offset?.scroll?.y || 0)) * devicePixelRatio,
width: width * devicePixelRatio,
height: height * devicePixelRatio
}
};
}
export function clearCache(){
cache = []
cache = [];
}
function drawImage(ctx,index, data, position){
getImage(index, data).then(image=>{
let sx = 0
let sy = 0
let sWidth = image.width
let sHeight = image.height
let dx = position.x
let dy = position.y
let dWidth = position.width
let dHeight = position.height
let scaleX = dWidth / sWidth
let scaleY = dHeight / sHeight
let sx = 0;
let sy = 0;
let sWidth = image.width;
let sHeight = image.height;
let dx = position.x;
let dy = position.y;
let dWidth = position.width;
let dHeight = position.height;
let scaleX = dWidth / sWidth;
let scaleY = dHeight / sHeight;
if(dx < clipWidth * devicePixelRatio){
let diff = clipWidth * devicePixelRatio - dx
dx = clipWidth * devicePixelRatio
dWidth -= diff
sWidth -= diff/scaleX
sx += diff/scaleX
let diff = clipWidth * devicePixelRatio - dx;
dx = clipWidth * devicePixelRatio;
dWidth -= diff;
sWidth -= diff/scaleX;
sx += diff/scaleX;
}
if(dy < clipHeight * devicePixelRatio){
let diff = clipHeight * devicePixelRatio - dy
dy = clipHeight * devicePixelRatio
dHeight -= diff
sHeight -= diff/scaleY
sy += diff/scaleY
let diff = clipHeight * devicePixelRatio - dy;
dy = clipHeight * devicePixelRatio;
dHeight -= diff;
sHeight -= diff/scaleY;
sy += diff/scaleY;
}
// console.log('=>', sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
}).catch(e=>{
})
});
}
function getImage(index, data){
return new Promise(((resolve, reject) => {
if(cache[index]){
return resolve(cache[index])
return resolve(cache[index]);
}
const {buffer, extension} = data.buffer;
let blob = new Blob([buffer], { type: 'image/' + extension});
@ -119,12 +119,12 @@ function getImage(index, data){
let image = new Image();
image.src = url;
image.onload = function (){
resolve(image)
cache[index] = image
}
resolve(image);
cache[index] = image;
};
image.onerror = function (e){
reject(e)
}
}))
reject(e);
};
}));
}

View File

@ -1,8 +1,8 @@
import { defineConfig } from 'vite';
import { createVuePlugin } from 'vite-plugin-vue2'
import vue3 from '@vitejs/plugin-vue'
import * as compiler from '@vue/compiler-sfc'
import { isVue2 } from 'vue-demi'
import { createVuePlugin } from 'vite-plugin-vue2';
import vue3 from '@vitejs/plugin-vue';
import * as compiler from '@vue/compiler-sfc';
import { isVue2 } from 'vue-demi';
const { resolve } = require('path');
export default defineConfig({

View File

@ -1,7 +1,7 @@
import VueOfficePdf from './src/main.vue'
import VueOfficePdf from './src/main.vue';
VueOfficePdf.install = function (Vue) {
Vue.component(VueOfficePdf.name, VueOfficePdf)
}
Vue.component(VueOfficePdf.name, VueOfficePdf);
};
export default VueOfficePdf
export default VueOfficePdf;

View File

@ -1,8 +1,8 @@
<script>
import { defineComponent,ref, onMounted, watch } from 'vue-demi'
import {worker} from './worker'
import {pdfjsLib} from './pdf'
import {getUrl, loadScript} from "../../../utils/url";
import { defineComponent,ref, onMounted, watch } from 'vue-demi';
import {worker} from './worker';
import {pdfjsLib} from './pdf';
import {getUrl, loadScript} from '../../../utils/url';
const pdfJsLibSrc = `data:text/javascript;base64,${pdfjsLib}`;
const PdfJsWorkerSrc = `data:text/javascript;base64,${worker}`;
@ -22,27 +22,27 @@ export default defineComponent({
},
emits:['rendered', 'error'],
setup(props, { emit }){
let pdfDocument = null
const rootRef = ref([])
const numPages = ref(0)
let pdfDocument = null;
const rootRef = ref([]);
const numPages = ref(0);
function installPdfScript() {
return loadScript(pdfJsLibSrc).then(() => {
window.pdfjsLib.GlobalWorkerOptions.workerSrc = PdfJsWorkerSrc
window.pdfjsLib.GlobalWorkerOptions.workerSrc = PdfJsWorkerSrc;
});
}
function checkPdfLib() {
if (window.pdfjsLib) {
return Promise.resolve()
return Promise.resolve();
}
return installPdfScript()
return installPdfScript();
}
function init() {
if (!props.src) {
numPages.value = 0
return
numPages.value = 0;
return;
}
const loadingTask = window.pdfjsLib.getDocument({
url: getUrl(props.src),
@ -53,10 +53,10 @@ export default defineComponent({
loadingTask.promise.then((pdf) => {
pdfDocument = pdf;
numPages.value = pdfDocument.numPages;
renderPage(1)
renderPage(1);
}).catch((e) => {
emit('error', e)
})
emit('error', e);
});
}
function renderPage(num) {
@ -67,11 +67,11 @@ export default defineComponent({
canvas.width = viewport.width;
canvas.height = viewport.height;
if(viewport.width > document.documentElement.clientWidth){
canvas.style.width = '100%'
canvas.style.width = '100%';
}else{
canvas.style.width = Math.floor(viewport.width) + 'px';
}
const ctx = canvas.getContext("2d");
const ctx = canvas.getContext('2d');
const renderTask = pdfPage.render({
canvasContext: ctx,
viewport,
@ -80,32 +80,32 @@ export default defineComponent({
if (numPages.value > num) {
renderPage(num + 1);
} else {
emit('rendered')
emit('rendered');
}
}).catch((e) => {
emit('error', e)
emit('error', e);
});
}).catch((e) => {
emit('error', e)
emit('error', e);
});
}
onMounted(()=>{
if (props.src) {
checkPdfLib().then(init)
checkPdfLib().then(init);
}
})
});
watch(() => props.src, ()=>{
checkPdfLib().then(init)
})
checkPdfLib().then(init);
});
return {
rootRef,
numPages
};
}
}
})
});
</script>
<template>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,9 +1,8 @@
import { defineConfig } from 'vite';
import { createVuePlugin } from 'vite-plugin-vue2'
import vue3 from '@vitejs/plugin-vue'
import * as compiler from '@vue/compiler-sfc'
import { isVue2 } from 'vue-demi'
import packageJson from './package.json'
import { createVuePlugin } from 'vite-plugin-vue2';
import vue3 from '@vitejs/plugin-vue';
import * as compiler from '@vue/compiler-sfc';
import { isVue2 } from 'vue-demi';
const { resolve } = require('path');
export default defineConfig({

422
pnpm-lock.yaml generated
View File

@ -4,6 +4,8 @@ specifiers:
'@vitejs/plugin-vue': ^4.0.0
'@vue/composition-api': ^1.7.1
docx-preview: ^0.1.14
eslint: ^8.36.0
eslint-plugin-vue: ^9.9.0
exceljs: ^4.3.0
lerna: ^6.4.1
less: ^4.1.3
@ -32,6 +34,8 @@ dependencies:
devDependencies:
'@vitejs/plugin-vue': 4.0.0_vite@4.1.4
'@vue/composition-api': 1.7.1
eslint: 8.36.0
eslint-plugin-vue: 9.9.0_eslint@8.36.0
lerna: 6.5.1
less: 4.1.3
less-loader: 11.1.0_less@4.1.3
@ -710,6 +714,43 @@ packages:
dev: true
optional: true
/@eslint-community/eslint-utils/4.2.0_eslint@8.36.0:
resolution: {integrity: sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies:
eslint: 8.36.0
eslint-visitor-keys: 3.3.0
dev: true
/@eslint-community/regexpp/4.4.0:
resolution: {integrity: sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
dev: true
/@eslint/eslintrc/2.0.1:
resolution: {integrity: sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
ajv: 6.12.6
debug: 4.3.4
espree: 9.5.0
globals: 13.20.0
ignore: 5.2.4
import-fresh: 3.3.0
js-yaml: 4.1.0
minimatch: 3.1.2
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
dev: true
/@eslint/js/8.36.0:
resolution: {integrity: sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/@fast-csv/format/4.3.5:
resolution: {integrity: sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==}
dependencies:
@ -737,6 +778,26 @@ packages:
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
dev: true
/@humanwhocodes/config-array/0.11.8:
resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
engines: {node: '>=10.10.0'}
dependencies:
'@humanwhocodes/object-schema': 1.2.1
debug: 4.3.4
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
dev: true
/@humanwhocodes/module-importer/1.0.1:
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
engines: {node: '>=12.22'}
dev: true
/@humanwhocodes/object-schema/1.2.1:
resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
dev: true
/@hutson/parse-repository-url/3.0.2:
resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==}
engines: {node: '>=6.9.0'}
@ -1587,6 +1648,20 @@ packages:
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
dev: true
/acorn-jsx/5.3.2_acorn@8.8.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
acorn: 8.8.2
dev: true
/acorn/8.8.2:
resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
/add-stream/1.0.0:
resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==}
dev: true
@ -1619,6 +1694,15 @@ packages:
indent-string: 4.0.0
dev: true
/ajv/6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
dependencies:
fast-deep-equal: 3.1.3
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
dev: true
/ansi-colors/4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
@ -1835,6 +1919,10 @@ packages:
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
dev: true
/boolbase/1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
dev: true
/brace-expansion/1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
@ -2721,6 +2809,10 @@ packages:
resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==}
dev: true
/deep-is/0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
dev: true
/deepmerge/4.3.0:
resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==}
engines: {node: '>=0.10.0'}
@ -2774,6 +2866,13 @@ packages:
path-type: 4.0.0
dev: true
/doctrine/3.0.0:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
engines: {node: '>=6.0.0'}
dependencies:
esutils: 2.0.3
dev: true
/docx-preview/0.1.15:
resolution: {integrity: sha512-qeYNwA+HF0e+GLxH/yltGdaBVQHoQrscfCwR2p7fRGCMjPBohdd36L7xDi1wdErS3ZnV/uh4kx5+tXOXgzq/dQ==}
dependencies:
@ -2911,6 +3010,115 @@ packages:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
/escape-string-regexp/4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
dev: true
/eslint-plugin-vue/9.9.0_eslint@8.36.0:
resolution: {integrity: sha512-YbubS7eK0J7DCf0U2LxvVP7LMfs6rC6UltihIgval3azO3gyDwEGVgsCMe1TmDiEkl6GdMKfRpaME6QxIYtzDQ==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
dependencies:
eslint: 8.36.0
eslint-utils: 3.0.0_eslint@8.36.0
natural-compare: 1.4.0
nth-check: 2.1.1
postcss-selector-parser: 6.0.11
semver: 7.3.8
vue-eslint-parser: 9.1.0_eslint@8.36.0
xml-name-validator: 4.0.0
transitivePeerDependencies:
- supports-color
dev: true
/eslint-scope/7.1.1:
resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
dev: true
/eslint-utils/3.0.0_eslint@8.36.0:
resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
peerDependencies:
eslint: '>=5'
dependencies:
eslint: 8.36.0
eslint-visitor-keys: 2.1.0
dev: true
/eslint-visitor-keys/2.1.0:
resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
engines: {node: '>=10'}
dev: true
/eslint-visitor-keys/3.3.0:
resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/eslint/8.36.0:
resolution: {integrity: sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
'@eslint-community/eslint-utils': 4.2.0_eslint@8.36.0
'@eslint-community/regexpp': 4.4.0
'@eslint/eslintrc': 2.0.1
'@eslint/js': 8.36.0
'@humanwhocodes/config-array': 0.11.8
'@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.3
debug: 4.3.4
doctrine: 3.0.0
escape-string-regexp: 4.0.0
eslint-scope: 7.1.1
eslint-visitor-keys: 3.3.0
espree: 9.5.0
esquery: 1.4.2
esutils: 2.0.3
fast-deep-equal: 3.1.3
file-entry-cache: 6.0.1
find-up: 5.0.0
glob-parent: 6.0.2
globals: 13.20.0
grapheme-splitter: 1.0.4
ignore: 5.2.4
import-fresh: 3.3.0
imurmurhash: 0.1.4
is-glob: 4.0.3
is-path-inside: 3.0.3
js-sdsl: 4.3.0
js-yaml: 4.1.0
json-stable-stringify-without-jsonify: 1.0.1
levn: 0.4.1
lodash.merge: 4.6.2
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.1
strip-ansi: 6.0.1
strip-json-comments: 3.1.1
text-table: 0.2.0
transitivePeerDependencies:
- supports-color
dev: true
/espree/9.5.0:
resolution: {integrity: sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
acorn: 8.8.2
acorn-jsx: 5.3.2_acorn@8.8.2
eslint-visitor-keys: 3.3.0
dev: true
/esprima/4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
@ -2924,6 +3132,13 @@ packages:
estraverse: 5.3.0
dev: true
/esrecurse/4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
dependencies:
estraverse: 5.3.0
dev: true
/estraverse/5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
@ -2933,6 +3148,11 @@ packages:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
dev: true
/esutils/2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
dev: true
/eventemitter3/4.0.7:
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
dev: true
@ -2993,6 +3213,10 @@ packages:
'@fast-csv/parse': 4.3.6
dev: false
/fast-deep-equal/3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
dev: true
/fast-glob/3.2.12:
resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
engines: {node: '>=8.6.0'}
@ -3015,6 +3239,14 @@ packages:
micromatch: 4.0.5
dev: true
/fast-json-stable-stringify/2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
dev: true
/fast-levenshtein/2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
dev: true
/fastq/1.15.0:
resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
dependencies:
@ -3035,6 +3267,13 @@ packages:
escape-string-regexp: 1.0.5
dev: true
/file-entry-cache/6.0.1:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
engines: {node: ^10.12.0 || >=12.0.0}
dependencies:
flat-cache: 3.0.4
dev: true
/filelist/1.0.4:
resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
dependencies:
@ -3063,11 +3302,31 @@ packages:
path-exists: 4.0.0
dev: true
/find-up/5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
dependencies:
locate-path: 6.0.0
path-exists: 4.0.0
dev: true
/flat-cache/3.0.4:
resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
engines: {node: ^10.12.0 || >=12.0.0}
dependencies:
flatted: 3.2.7
rimraf: 3.0.2
dev: true
/flat/5.0.2:
resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
hasBin: true
dev: true
/flatted/3.2.7:
resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
dev: true
/follow-redirects/1.15.2:
resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
engines: {node: '>=4.0'}
@ -3250,6 +3509,13 @@ packages:
is-glob: 4.0.3
dev: true
/glob-parent/6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
dependencies:
is-glob: 4.0.3
dev: true
/glob/7.1.4:
resolution: {integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==}
dependencies:
@ -3287,6 +3553,13 @@ packages:
engines: {node: '>=4'}
dev: true
/globals/13.20.0:
resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
engines: {node: '>=8'}
dependencies:
type-fest: 0.20.2
dev: true
/globby/11.1.0:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
engines: {node: '>=10'}
@ -3302,6 +3575,10 @@ packages:
/graceful-fs/4.2.10:
resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
/grapheme-splitter/1.0.4:
resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
dev: true
/handlebars/4.7.7:
resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==}
engines: {node: '>=0.4.7'}
@ -3630,6 +3907,11 @@ packages:
engines: {node: '>=8'}
dev: true
/is-path-inside/3.0.3:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
dev: true
/is-plain-obj/1.1.0:
resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
engines: {node: '>=0.10.0'}
@ -3709,6 +3991,10 @@ packages:
minimatch: 3.0.5
dev: true
/js-sdsl/4.3.0:
resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==}
dev: true
/js-tokens/4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
dev: true
@ -3742,6 +4028,14 @@ packages:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
dev: true
/json-schema-traverse/0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
dev: true
/json-stable-stringify-without-jsonify/1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
dev: true
/json-stringify-nice/1.1.4:
resolution: {integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==}
dev: true
@ -3928,6 +4222,14 @@ packages:
- supports-color
dev: true
/levn/0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
dependencies:
prelude-ls: 1.2.1
type-check: 0.4.0
dev: true
/libnpmaccess/6.0.3:
resolution: {integrity: sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
@ -4009,6 +4311,13 @@ packages:
p-locate: 4.1.0
dev: true
/locate-path/6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
dependencies:
p-locate: 5.0.0
dev: true
/lodash.defaults/4.2.0:
resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
dev: false
@ -4061,6 +4370,10 @@ packages:
resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
dev: true
/lodash.merge/4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
dev: true
/lodash.union/4.6.0:
resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==}
dev: false
@ -4397,6 +4710,10 @@ packages:
hasBin: true
dev: true
/natural-compare/1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
dev: true
/needle/3.2.0:
resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==}
engines: {node: '>= 4.4.x'}
@ -4617,6 +4934,12 @@ packages:
set-blocking: 2.0.0
dev: true
/nth-check/2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
dependencies:
boolbase: 1.0.0
dev: true
/nx/15.7.2:
resolution: {integrity: sha512-VRb+CZCji3G4ikdMAGoh6TeU9Q6n5atRwqRSFhUX63er8zhlMvWHLskPMZC4q/81edo/E7RhbmEVUD5MB0JoeA==}
hasBin: true
@ -4737,6 +5060,18 @@ packages:
pinkie-promise: 2.0.1
dev: false
/optionator/0.9.1:
resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
engines: {node: '>= 0.8.0'}
dependencies:
deep-is: 0.1.4
fast-levenshtein: 2.0.6
levn: 0.4.1
prelude-ls: 1.2.1
type-check: 0.4.0
word-wrap: 1.2.3
dev: true
/ora/5.4.1:
resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
engines: {node: '>=10'}
@ -4775,6 +5110,13 @@ packages:
p-try: 2.2.0
dev: true
/p-limit/3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
dependencies:
yocto-queue: 0.1.0
dev: true
/p-locate/2.0.0:
resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==}
engines: {node: '>=4'}
@ -4789,6 +5131,13 @@ packages:
p-limit: 2.3.0
dev: true
/p-locate/5.0.0:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
dependencies:
p-limit: 3.1.0
dev: true
/p-map-series/2.1.0:
resolution: {integrity: sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==}
engines: {node: '>=8'}
@ -5041,6 +5390,11 @@ packages:
source-map-js: 1.0.2
dev: true
/prelude-ls/1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
dev: true
/prettier/2.8.4:
resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==}
engines: {node: '>=10.13.0'}
@ -5107,6 +5461,11 @@ packages:
resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
dev: true
/punycode/2.3.0:
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
engines: {node: '>=6'}
dev: true
/q/1.5.1:
resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
@ -5604,6 +5963,11 @@ packages:
min-indent: 1.0.1
dev: true
/strip-json-comments/3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
dev: true
/strong-log-transformer/2.1.0:
resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==}
engines: {node: '>=4'}
@ -5674,6 +6038,10 @@ packages:
engines: {node: '>=0.10'}
dev: true
/text-table/0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
dev: true
/through/2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
@ -5749,11 +6117,23 @@ packages:
resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
dev: true
/type-check/0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
dependencies:
prelude-ls: 1.2.1
dev: true
/type-fest/0.18.1:
resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==}
engines: {node: '>=10'}
dev: true
/type-fest/0.20.2:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'}
dev: true
/type-fest/0.21.3:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
@ -5846,6 +6226,12 @@ packages:
picocolors: 1.0.0
dev: true
/uri-js/4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies:
punycode: 2.3.0
dev: true
/util-deprecate/1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@ -5978,7 +6364,6 @@ packages:
- underscore
- vash
- velocityjs
- vue
- walrus
- whiskers
dev: true
@ -6032,6 +6417,24 @@ packages:
'@vue/composition-api': 1.7.1
dev: false
/vue-eslint-parser/9.1.0_eslint@8.36.0:
resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '>=6.0.0'
dependencies:
debug: 4.3.4
eslint: 8.36.0
eslint-scope: 7.1.1
eslint-visitor-keys: 3.3.0
espree: 9.5.0
esquery: 1.4.2
lodash: 4.17.21
semver: 7.3.8
transitivePeerDependencies:
- supports-color
dev: true
/vue-template-babel-compiler/1.2.0_ev5jzj74xu2fombjvobqpq452a:
resolution: {integrity: sha512-CScBSX1/wCdmmZ/Lvj/63p2CCVTS0FMj0F69VRBo73CuJrjvPAPGmeNJ7D/cwt/VS2PduowRWbO8N4Zh4Z3b0g==}
engines: {node: '>=12.0.0'}
@ -6078,8 +6481,6 @@ packages:
'@vue/runtime-dom': 3.2.45
'@vue/server-renderer': 3.2.45
'@vue/shared': 3.2.45
transitivePeerDependencies:
- vue
dev: true
/walk-up-path/1.0.0:
@ -6117,6 +6518,11 @@ packages:
string-width: 4.2.3
dev: true
/word-wrap/1.2.3:
resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
engines: {node: '>=0.10.0'}
dev: true
/wordwrap/1.0.0:
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
dev: true
@ -6178,6 +6584,11 @@ packages:
opencollective-postinstall: 2.0.3
dev: false
/xml-name-validator/4.0.0:
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
engines: {node: '>=12'}
dev: true
/xmlchars/2.2.0:
resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
dev: false
@ -6245,6 +6656,11 @@ packages:
yargs-parser: 21.1.1
dev: true
/yocto-queue/0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
dev: true
/zip-stream/4.1.0:
resolution: {integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==}
engines: {node: '>= 10'}

View File

@ -1,15 +1,15 @@
const { switchVersion, loadModule } = require('./utils')
const Vue = loadModule('vue')
const { switchVersion, loadModule } = require('./utils');
const Vue = loadModule('vue');
if (!Vue || typeof Vue.version !== 'string') {
console.warn(
'[vue-office] Vue is not found. Please run "npm install vue" to install.'
)
);
} else if (Vue.version.startsWith('2.')) {
switchVersion(2)
switchVersion(2);
} else if (Vue.version.startsWith('3.')) {
switchVersion(3)
switchVersion(3);
} else {
console.warn(
`[vue-office] Vue version v${Vue.version} is not supported.`
)
);
}

View File

@ -1,14 +1,14 @@
const { switchVersion } = require('./utils')
const { switchVersion } = require('./utils');
const version = process.argv[2]
const version = process.argv[2];
if (version == '2') {
switchVersion(2)
switchVersion(2);
} else if (version == '3') {
switchVersion(3)
switchVersion(3);
} else {
console.warn(
`[vue-office] expecting version "2" or "3" but got "${version}"`
)
process.exit(1)
);
process.exit(1);
}

View File

@ -1,31 +1,31 @@
const fs = require('fs')
const path = require('path')
const dir = path.resolve(__dirname, '../')
const fs = require('fs');
const path = require('path');
const dir = path.resolve(__dirname, '../');
function loadModule(name) {
try {
return require(name)
return require(name);
} catch (e) {
return undefined
return undefined;
}
}
function copy(name, version) {
const src = path.join(dir, `v${version}`, name)
const dest = path.join(dir, name)
const src = path.join(dir, `v${version}`, name);
const dest = path.join(dir, name);
if(!fs.existsSync(src)){
return
return;
}
let content = fs.readFileSync(src, 'utf-8')
let content = fs.readFileSync(src, 'utf-8');
try {
fs.unlinkSync(dest)
fs.unlinkSync(dest);
} catch (error) {}
fs.writeFileSync(dest, content, 'utf-8')
fs.writeFileSync(dest, content, 'utf-8');
}
function switchVersion(version) {
copy('index.js', version)
copy('index.css', version)
copy('index.js', version);
copy('index.css', version);
}
module.exports.loadModule = loadModule
module.exports.switchVersion = switchVersion
module.exports.loadModule = loadModule;
module.exports.switchVersion = switchVersion;