Merge branch 'next' into develop

This commit is contained in:
Zeke Zhang 2025-04-23 16:08:37 +08:00
commit 6b51026941
55 changed files with 599 additions and 303 deletions

View File

@ -61,7 +61,9 @@ jobs:
node-version: ${{ matrix.node_version }}
cache: 'yarn'
- name: Install project dependencies
run: yarn install
run: |
yarn install
yarn add sqlite3 --no-save -W
- name: Test with Sqlite
run: yarn test --server --single-thread=false
env:

View File

@ -63,7 +63,9 @@ jobs:
${{ runner.os }}-yarn-
- name: Install project dependencies
run: yarn --prefer-offline
run: |
yarn --prefer-offline
yarn add sqlite3 --no-save -W
- name: Test with Sqlite
run: yarn test --server --single-thread=false

View File

@ -5,6 +5,43 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [v1.6.22](https://github.com/nocobase/nocobase/compare/v1.6.21...v1.6.22) - 2025-04-22
### 🚀 Improvements
- **[create-nocobase-app]** Upgrade dependencies and remove SQLite support ([#6708](https://github.com/nocobase/nocobase/pull/6708)) by @chenos
- **[File manager]** Expose utils API ([#6705](https://github.com/nocobase/nocobase/pull/6705)) by @mytharcher
- **[Workflow]** Add date types to variable types set ([#6717](https://github.com/nocobase/nocobase/pull/6717)) by @mytharcher
### 🐛 Bug Fixes
- **[client]**
- The problem of mobile top navigation bar icons being difficult to delete ([#6734](https://github.com/nocobase/nocobase/pull/6734)) by @zhangzhonghe
- After connecting through a foreign key, clicking to trigger filtering results in empty filter conditions ([#6634](https://github.com/nocobase/nocobase/pull/6634)) by @zhangzhonghe
- picker switching issue in date field of filter button ([#6695](https://github.com/nocobase/nocobase/pull/6695)) by @katherinehhh
- The issue of the collapse button in the left menu being obscured by the workflow pop-up window ([#6733](https://github.com/nocobase/nocobase/pull/6733)) by @zhangzhonghe
- missing action option constraints when reopening linkage rules ([#6723](https://github.com/nocobase/nocobase/pull/6723)) by @katherinehhh
- export button shown without export permission ([#6689](https://github.com/nocobase/nocobase/pull/6689)) by @katherinehhh
- Required fields hidden by linkage rules should not affect form submission ([#6709](https://github.com/nocobase/nocobase/pull/6709)) by @zhangzhonghe
- **[server]** appVersion incorrectly generated by create-migration ([#6740](https://github.com/nocobase/nocobase/pull/6740)) by @chenos
- **[build]** Fix error thrown in tar command ([#6722](https://github.com/nocobase/nocobase/pull/6722)) by @mytharcher
- **[Workflow]** Fix error thrown when execute schedule event in subflow ([#6721](https://github.com/nocobase/nocobase/pull/6721)) by @mytharcher
- **[Workflow: Custom action event]** Support to execute in multiple records mode by @mytharcher
- **[File storage: S3(Pro)]** Add multer make logic for server-side upload by @mytharcher
## [v1.6.21](https://github.com/nocobase/nocobase/compare/v1.6.20...v1.6.21) - 2025-04-17
### 🚀 Improvements

View File

@ -5,6 +5,43 @@
格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
并且本项目遵循 [语义化版本](https://semver.org/spec/v2.0.0.html)。
## [v1.6.22](https://github.com/nocobase/nocobase/compare/v1.6.21...v1.6.22) - 2025-04-22
### 🚀 优化
- **[create-nocobase-app]** 更新依赖,移除 SQLite 支持 ([#6708](https://github.com/nocobase/nocobase/pull/6708)) by @chenos
- **[文件管理器]** 暴露公共包 API ([#6705](https://github.com/nocobase/nocobase/pull/6705)) by @mytharcher
- **[工作流]** 为变量的类型集合增加日期相关类型 ([#6717](https://github.com/nocobase/nocobase/pull/6717)) by @mytharcher
### 🐛 修复
- **[client]**
- 移动端顶部的导航栏图标很难被删除的问题 ([#6734](https://github.com/nocobase/nocobase/pull/6734)) by @zhangzhonghe
- 通过外键连接后,点击触发筛选,筛选条件为空 ([#6634](https://github.com/nocobase/nocobase/pull/6634)) by @zhangzhonghe
- 筛选按钮中日期字段切换picker 异常 ([#6695](https://github.com/nocobase/nocobase/pull/6695)) by @katherinehhh
- 左侧菜单的收起按钮会被绑定工作流弹窗遮挡的问题 ([#6733](https://github.com/nocobase/nocobase/pull/6733)) by @zhangzhonghe
- 重新打开联动规则时缺少操作选项约束 ([#6723](https://github.com/nocobase/nocobase/pull/6723)) by @katherinehhh
- 未设置导出权限时仍显示导出按钮 ([#6689](https://github.com/nocobase/nocobase/pull/6689)) by @katherinehhh
- 被联动规则隐藏的必填字段,不应该影响表单的提交 ([#6709](https://github.com/nocobase/nocobase/pull/6709)) by @zhangzhonghe
- **[server]** create-migration 命令生成的 appVersion 不准确 ([#6740](https://github.com/nocobase/nocobase/pull/6740)) by @chenos
- **[build]** 修复 tar 命令报错的问题 ([#6722](https://github.com/nocobase/nocobase/pull/6722)) by @mytharcher
- **[工作流]** 修复子流程执行定时任务报错的问题 ([#6721](https://github.com/nocobase/nocobase/pull/6721)) by @mytharcher
- **[工作流:自定义操作事件]** 支持多行记录模式的手动执行 by @mytharcher
- **[文件存储S3 (Pro)]** 增加 multer 逻辑用于服务端上传 by @mytharcher
## [v1.6.21](https://github.com/nocobase/nocobase/compare/v1.6.20...v1.6.21) - 2025-04-17
### 🚀 优化

View File

@ -8,7 +8,11 @@ RUN cd /app \
&& yarn config set network-timeout 600000 -g \
&& npx -y create-nocobase-app@${CNA_VERSION} my-nocobase-app --skip-dev-dependencies -a -e APP_ENV=production \
&& cd /app/my-nocobase-app \
&& yarn install --production
&& yarn install --production \
&& rm -rf yarn.lock \
&& find node_modules -type f -name "yarn.lock" -delete \
&& find node_modules -type f -name "bower.json" -delete \
&& find node_modules -type f -name "composer.json" -delete
RUN cd /app \
&& rm -rf nocobase.tar.gz \

View File

@ -83,6 +83,7 @@
"ghooks": "^2.0.4",
"lint-staged": "^13.2.3",
"patch-package": "^8.0.0",
"pm2": "^6.0.5",
"pretty-format": "^24.0.0",
"pretty-quick": "^3.1.0",
"react": "^18.0.0",

View File

@ -11,8 +11,8 @@
"@nocobase/database": "1.7.0-alpha.11",
"@nocobase/resourcer": "1.7.0-alpha.11",
"@nocobase/utils": "1.7.0-alpha.11",
"@types/jsonwebtoken": "^8.5.8",
"jsonwebtoken": "^8.5.1"
"@types/jsonwebtoken": "^9.0.9",
"jsonwebtoken": "^9.0.2"
},
"repository": {
"type": "git",

View File

@ -13,6 +13,7 @@
"@umijs/utils": "3.5.20",
"chalk": "^4.1.1",
"commander": "^9.2.0",
"deepmerge": "^4.3.1",
"dotenv": "^16.0.0",
"execa": "^5.1.1",
"fast-glob": "^3.3.1",

View File

@ -8,7 +8,7 @@
*/
const _ = require('lodash');
const { Command } = require('commander');
const { generatePlugins, run, postCheck, nodeCheck, promptForTs, isPortReachable } = require('../util');
const { generatePlugins, run, postCheck, nodeCheck, promptForTs, isPortReachable, checkDBDialect } = require('../util');
const { getPortPromise } = require('portfinder');
const chokidar = require('chokidar');
const { uid } = require('@formily/shared');
@ -36,6 +36,7 @@ module.exports = (cli) => {
.option('-i, --inspect [port]')
.allowUnknownOption()
.action(async (opts) => {
checkDBDialect();
let subprocess;
const runDevClient = () => {
console.log('starting client', 1 * clientPort);

View File

@ -8,7 +8,7 @@
*/
const { Command } = require('commander');
const { run, isPortReachable } = require('../util');
const { run, isPortReachable, checkDBDialect } = require('../util');
const { execSync } = require('node:child_process');
const axios = require('axios');
const { pTest } = require('./p-test');
@ -165,6 +165,7 @@ const filterArgv = () => {
*/
module.exports = (cli) => {
const e2e = cli.command('e2e').hook('preAction', () => {
checkDBDialect();
if (process.env.APP_BASE_URL) {
process.env.APP_BASE_URL = process.env.APP_BASE_URL.replace('localhost', '127.0.0.1');
console.log('APP_BASE_URL:', process.env.APP_BASE_URL);

View File

@ -8,7 +8,7 @@
*/
const { Command } = require('commander');
const { run, isDev, isProd, promptForTs, downloadPro } = require('../util');
const { run, isDev, isProd, promptForTs, downloadPro, checkDBDialect } = require('../util');
/**
*
@ -21,6 +21,7 @@ module.exports = (cli) => {
.option('-h, --help')
.option('--ts-node-dev')
.action(async (options) => {
checkDBDialect();
const cmd = process.argv.slice(2)?.[0];
if (cmd === 'install') {
await downloadPro();

View File

@ -8,7 +8,7 @@
*/
const _ = require('lodash');
const { Command } = require('commander');
const { run, postCheck, downloadPro, promptForTs } = require('../util');
const { run, postCheck, downloadPro, promptForTs, checkDBDialect } = require('../util');
const { existsSync, rmSync } = require('fs');
const { resolve, isAbsolute } = require('path');
const chalk = require('chalk');
@ -48,8 +48,10 @@ module.exports = (cli) => {
.option('-i, --instances [instances]')
.option('--db-sync')
.option('--quickstart')
.option('--launch-mode [launchMode]')
.allowUnknownOption()
.action(async (opts) => {
checkDBDialect();
if (opts.quickstart) {
await downloadPro();
}
@ -118,17 +120,27 @@ module.exports = (cli) => {
]);
process.exit();
} else {
run(
'pm2-runtime',
[
'start',
...instancesArgs,
`${APP_PACKAGE_ROOT}/lib/index.js`,
NODE_ARGS ? `--node-args="${NODE_ARGS}"` : undefined,
'--',
...process.argv.slice(2),
].filter(Boolean),
);
const launchMode = opts.launchMode || process.env.APP_LAUNCH_MODE || 'pm2';
if (launchMode === 'pm2') {
run(
'pm2-runtime',
[
'start',
...instancesArgs,
`${APP_PACKAGE_ROOT}/lib/index.js`,
NODE_ARGS ? `--node-args="${NODE_ARGS}"` : undefined,
'--',
...process.argv.slice(2),
].filter(Boolean),
);
} else {
run(
'node',
[`${APP_PACKAGE_ROOT}/lib/index.js`, ...(NODE_ARGS || '').split(' '), ...process.argv.slice(2)].filter(
Boolean,
),
);
}
}
});
};

View File

@ -7,7 +7,7 @@
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
const { run } = require('../util');
const { run, checkDBDialect } = require('../util');
const fg = require('fast-glob');
const coreClientPackages = ['packages/core/client', 'packages/core/sdk'];
@ -30,6 +30,7 @@ const getPackagesDir = (isClient) => {
module.exports = (cli) => {
cli.command('test-coverage:server').action(async () => {
checkDBDialect();
const packageRoots = getPackagesDir(false);
for (const dir of packageRoots) {
try {
@ -41,6 +42,7 @@ module.exports = (cli) => {
});
cli.command('test-coverage:client').action(async () => {
checkDBDialect();
const packageRoots = getPackagesDir(true);
for (const dir of packageRoots) {
try {

View File

@ -8,7 +8,7 @@
*/
const { Command } = require('commander');
const { run } = require('../util');
const { run, checkDBDialect } = require('../util');
const path = require('path');
/**
@ -29,6 +29,7 @@ function addTestCommand(name, cli) {
.arguments('[paths...]')
.allowUnknownOption()
.action(async (paths, opts) => {
checkDBDialect();
if (name === 'test:server') {
process.env.TEST_ENV = 'server-side';
} else if (name === 'test:client') {

View File

@ -10,8 +10,19 @@
const chalk = require('chalk');
const { Command } = require('commander');
const { resolve } = require('path');
const { run, promptForTs, runAppCommand, hasCorePackages, downloadPro, hasTsNode } = require('../util');
const { run, promptForTs, runAppCommand, hasCorePackages, downloadPro, hasTsNode, checkDBDialect } = require('../util');
const { existsSync, rmSync } = require('fs');
const { readJSON, writeJSON } = require('fs-extra');
const deepmerge = require('deepmerge');
async function updatePackage() {
const sourcePath = resolve(__dirname, '../../templates/create-app-package.json');
const descPath = resolve(process.cwd(), 'package.json');
const sourceJson = await readJSON(sourcePath, 'utf8');
const descJson = await readJSON(descPath, 'utf8');
const json = deepmerge(descJson, sourceJson);
await writeJSON(descPath, json, { spaces: 2, encoding: 'utf8' });
}
/**
*
@ -26,6 +37,7 @@ module.exports = (cli) => {
.option('--next')
.option('-S|--skip-code-update')
.action(async (options) => {
checkDBDialect();
if (hasTsNode()) promptForTs();
if (hasCorePackages()) {
// await run('yarn', ['install']);
@ -69,6 +81,7 @@ module.exports = (cli) => {
return;
}
await run('yarn', ['add', `@nocobase/cli@${distTag}`, `@nocobase/devtools@${distTag}`, '-W']);
await updatePackage();
await run('yarn', ['install']);
await downloadPro();
await runAppCommand('upgrade');

View File

@ -360,7 +360,7 @@ exports.initEnv = function initEnv() {
API_BASE_PATH: '/api/',
API_CLIENT_STORAGE_PREFIX: 'NOCOBASE_',
API_CLIENT_STORAGE_TYPE: 'localStorage',
DB_DIALECT: 'sqlite',
// DB_DIALECT: 'sqlite',
DB_STORAGE: 'storage/db/nocobase.sqlite',
// DB_TIMEZONE: '+00:00',
DB_UNDERSCORED: parseEnv('DB_UNDERSCORED'),
@ -472,6 +472,12 @@ exports.initEnv = function initEnv() {
}
};
exports.checkDBDialect = function () {
if (!process.env.DB_DIALECT) {
throw new Error('DB_DIALECT is required.');
}
};
exports.generatePlugins = function () {
try {
require.resolve('@nocobase/devtools/umiConfig');

View File

@ -0,0 +1,39 @@
{
"private": true,
"workspaces": ["packages/*/*", "packages/*/*/*"],
"engines": {
"node": ">=18"
},
"scripts": {
"nocobase": "nocobase",
"pm": "nocobase pm",
"pm2": "nocobase pm2",
"dev": "nocobase dev",
"start": "nocobase start",
"clean": "nocobase clean",
"build": "nocobase build",
"test": "nocobase test",
"e2e": "nocobase e2e",
"tar": "nocobase tar",
"postinstall": "nocobase postinstall",
"lint": "eslint ."
},
"resolutions": {
"cytoscape": "3.28.0",
"@types/react": "18.3.18",
"@types/react-dom": "^18.0.0",
"react-router-dom": "6.28.1",
"react-router": "6.28.1",
"async": "^3.2.6",
"antd": "5.12.8",
"rollup": "4.24.0",
"semver": "^7.7.1"
},
"dependencies": {
"pm2": "^6.0.5",
"mysql2": "^3.14.0",
"mariadb": "^3.4.1",
"pg": "^8.14.1",
"pg-hstore": "^2.3.4"
}
}

View File

@ -167,7 +167,7 @@ export function getOperators() {
const dateA = parseDate(a);
const dateB = parseDate(b);
if (!dateA || !dateB) {
throw new Error('Invalid date format');
return false;
}
return dateA < dateB;
},
@ -651,10 +651,11 @@ function parseYear(dateStr) {
}
function parseDate(targetDateStr) {
let dateStr = Array.isArray(targetDateStr) ? targetDateStr[1] : targetDateStr;
if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z$/.test(dateStr)) {
// ISO 8601 格式YYYY-MM-DDTHH:mm:ss.sssZ
return new Date(dateStr); // 直接解析为 Date 对象
let dateStr = Array.isArray(targetDateStr) ? targetDateStr[1] ?? targetDateStr[0] : targetDateStr;
if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(dateStr)) {
return new Date(dateStr);
} else if (/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(dateStr)) {
return new Date(dateStr.replace(' ', 'T'));
} else if (/^\d{4}-\d{2}-\d{2}$/.test(dateStr)) {
// YYYY-MM-DD 格式
return parseFullDate(dateStr);
@ -668,5 +669,6 @@ function parseDate(targetDateStr) {
// YYYY 格式
return parseYear(dateStr);
}
return null; // Invalid format
return null;
}

View File

@ -7,7 +7,7 @@
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import React, { useState, useContext } from 'react';
import React, { useState, useContext, useEffect } from 'react';
import { RecordPickerProvider, RecordPickerContext } from '../../../schema-component/antd/record-picker';
import {
SchemaComponentOptions,
@ -41,9 +41,16 @@ const useTableSelectorProps = () => {
export const AssociateActionProvider = (props) => {
const [selectedRows, setSelectedRows] = useState([]);
const collection = useCollection();
const { resource, service, block, __parent } = useBlockRequestContext();
const { resource, block, __parent } = useBlockRequestContext();
const actionCtx = useActionContext();
const { isMobile } = useOpenModeContext() || {};
const [associationData, setAssociationData] = useState([]);
useEffect(() => {
resource?.list?.().then((res) => {
setAssociationData(res.data?.data || []);
});
}, [resource]);
const pickerProps = {
size: 'small',
onChange: props?.onChange,
@ -73,8 +80,8 @@ export const AssociateActionProvider = (props) => {
};
const getFilter = () => {
const targetKey = collection?.filterTargetKey || 'id';
if (service.data?.data) {
const list = service.data?.data.map((option) => option[targetKey]).filter(Boolean);
if (associationData) {
const list = associationData.map((option) => option[targetKey]).filter(Boolean);
const filter = list.length ? { $and: [{ [`${targetKey}.$ne`]: list }] } : {};
return filter;
}

View File

@ -175,7 +175,7 @@ export const Action: ComposedAction = withDynamicSchemaProps(
className={className}
type={props.type}
Designer={Designer}
onClick={onClick}
onClick={handleClick}
confirm={confirm}
confirmTitle={confirmTitle}
popover={popover}

View File

@ -7,7 +7,7 @@
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import { dayjs, getPickerFormat, Handlebars } from '@nocobase/utils/client';
import { dayjs, getPickerFormat, Handlebars, getFormatFromDateStr } from '@nocobase/utils/client';
import _, { every, findIndex, some } from 'lodash';
import { replaceVariableValue } from '../../../block-provider/hooks';
import { VariableOption, VariablesContextType } from '../../../variables/types';

View File

@ -352,11 +352,6 @@ const InternalSchemaToolbar: FC<SchemaToolbarProps> = React.memo((props) => {
}
}
// const style = window.getComputedStyle(parentElement);
// if (style.position === 'static') {
// parentElement.style.position = 'relative';
// }
el.addEventListener('mouseenter', show);
el.addEventListener('mouseleave', hide);
return () => {

View File

@ -131,7 +131,7 @@ export const ValueDynamicComponent = (props: ValueDynamicComponentProps) => {
<span style={{ marginLeft: '.25em' }} className={'ant-formily-item-extra'}>
{t('Syntax references')}:
</span>
<a href="https://formulajs.info/functions/" target="_blank" rel="noreferrer">
<a href="https://docs.nocobase.com/handbook/calculation-engines/formula" target="_blank" rel="noreferrer">
Formula.js
</a>
</div>

View File

@ -48,6 +48,7 @@ import {
SchemaSettingsItemType,
SchemaToolbarVisibleContext,
VariablesContext,
getZIndex,
useCollection,
useCollectionManager,
useZIndexContext,
@ -697,7 +698,7 @@ export const SchemaSettingsActionModalItem: FC<SchemaSettingsActionModalItemProp
const upLevelActiveFields = useFormActiveFields();
const parentZIndex = useZIndexContext();
const zIndex = parentZIndex + 10;
const zIndex = getZIndex('modal', parentZIndex + 10, 0);
const form = useMemo(
() =>

View File

@ -21,7 +21,7 @@ cli
.option('--quickstart', 'quickstart app creation')
.option('--skip-dev-dependencies')
.option('-a, --all-db-dialect', 'install all database dialect dependencies')
.option('-d, --db-dialect <dbDialect>', 'database dialect, current support sqlite/mysql/postgres', 'sqlite')
.option('-d, --db-dialect <dbDialect>', 'database dialect, current support mysql/postgres', 'postgres')
.option('-e, --env <env>', 'environment variables write into .env file', concat, [])
.description('create a new application')
.action(async (name, options) => {

View File

@ -61,7 +61,7 @@ class AppGenerator extends Generator {
checkDialect() {
const dialect = this.args.dbDialect;
const supportDialects = ['mysql', 'mariadb', 'sqlite', 'postgres'];
const supportDialects = ['mysql', 'mariadb', 'postgres'];
if (!supportDialects.includes(dialect)) {
console.log(
`dialect ${chalk.red(dialect)} is not supported, currently supported dialects are ${chalk.green(
@ -76,27 +76,15 @@ class AppGenerator extends Generator {
const env = this.env;
const envs = [];
const dependencies = [];
const { dbDialect, allDbDialect } = this.args;
const { dbDialect } = this.args;
if (allDbDialect) {
dependencies.push(`"mysql2": "^3.11.0"`);
dependencies.push(`"mariadb": "^2.5.6"`);
dependencies.push(`"pg": "^8.7.3"`);
dependencies.push(`"pg-hstore": "^2.3.4"`);
dependencies.push(`"sqlite3": "^5.0.8"`);
}
dependencies.push(`"mysql2": "^3.14.0"`);
dependencies.push(`"mariadb": "^3.4.1"`);
dependencies.push(`"pg": "^8.14.1"`);
dependencies.push(`"pg-hstore": "^2.3.4"`);
switch (dbDialect) {
case 'sqlite':
if (!allDbDialect) {
dependencies.push(`"sqlite3": "^5.0.8"`);
}
envs.push(`DB_STORAGE=${env.DB_STORAGE || 'storage/db/nocobase.sqlite'}`);
break;
case 'mysql':
if (!allDbDialect) {
dependencies.push(`"mysql2": "^3.11.0"`);
}
envs.push(`DB_HOST=${env.DB_HOST || 'localhost'}`);
envs.push(`DB_PORT=${env.DB_PORT || 3306}`);
envs.push(`DB_DATABASE=${env.DB_DATABASE || ''}`);
@ -104,9 +92,6 @@ class AppGenerator extends Generator {
envs.push(`DB_PASSWORD=${env.DB_PASSWORD || ''}`);
break;
case 'mariadb':
if (!allDbDialect) {
dependencies.push(`"mariadb": "^2.5.6"`);
}
envs.push(`DB_HOST=${env.DB_HOST || 'localhost'}`);
envs.push(`DB_PORT=${env.DB_PORT || 3306}`);
envs.push(`DB_DATABASE=${env.DB_DATABASE || ''}`);
@ -115,10 +100,6 @@ class AppGenerator extends Generator {
break;
case 'kingbase':
case 'postgres':
if (!allDbDialect) {
dependencies.push(`"pg": "^8.7.3"`);
dependencies.push(`"pg-hstore": "^2.3.4"`);
}
envs.push(`DB_HOST=${env.DB_HOST || 'localhost'}`);
envs.push(`DB_PORT=${env.DB_PORT || 5432}`);
envs.push(`DB_DATABASE=${env.DB_DATABASE || ''}`);
@ -184,21 +165,27 @@ class AppGenerator extends Generator {
console.log(`Creating a new NocoBase application at ${chalk.green(name)}`);
console.log('Creating files');
const context = this.getContext();
this.copyDirectory({
context: this.getContext(),
context,
path: join(__dirname, '../templates/app'),
target: this.cwd,
});
this.checkDbEnv();
const json = {
name: context.name,
...(await fs.readJSON(join(this.cwd, 'package.json'), 'utf8')),
};
const skipDevDependencies = this.args.skipDevDependencies;
if (skipDevDependencies) {
const json = await fs.readJSON(join(this.cwd, 'package.json'), 'utf8');
delete json['devDependencies'];
await fs.writeJSON(join(this.cwd, 'package.json'), json, { encoding: 'utf8', spaces: 2 });
json['dependencies']['@nocobase/cli'] = context.version;
if (!this.args.skipDevDependencies) {
json['devDependencies'] = json['devDependencies'] || {};
json['devDependencies']['@nocobase/devtools'] = context.version;
}
await fs.writeJSON(join(this.cwd, 'package.json'), json, { encoding: 'utf8', spaces: 2 });
console.log('');
console.log(chalk.green(`$ cd ${name}`));
console.log(chalk.green(`$ yarn install`));

View File

@ -1,5 +1,4 @@
{
"name": "{{{name}}}",
"private": true,
"workspaces": [
"packages/*/*",
@ -29,14 +28,15 @@
"react-router-dom": "6.28.1",
"react-router": "6.28.1",
"antd": "5.24.2",
"async": "3.2.6",
"rollup": "4.24.0"
"async": "^3.2.6",
"rollup": "4.24.0",
"semver": "^7.7.1"
},
"dependencies": {
"@nocobase/cli": "{{{version}}}",
{{{dependencies}}}
},
"devDependencies": {
"@nocobase/devtools": "{{{version}}}"
"pm2": "^6.0.5",
"mysql2": "^3.14.0",
"mariadb": "^3.4.1",
"pg": "^8.14.1",
"pg-hstore": "^2.3.4"
}
}

View File

@ -12,7 +12,7 @@
"@nocobase/resourcer": "1.7.0-alpha.11",
"@nocobase/utils": "1.7.0-alpha.11",
"@types/jsonwebtoken": "^8.5.8",
"jsonwebtoken": "^8.5.1"
"jsonwebtoken": "^9.0.2"
},
"repository": {
"type": "git",

View File

@ -10,7 +10,7 @@
"deepmerge": "^4.2.2",
"koa-compose": "^4.1.0",
"lodash": "^4.17.21",
"path-to-regexp": "6.2.2",
"path-to-regexp": "^6.3.0",
"qs": "^6.9.4"
},
"repository": {

View File

@ -367,7 +367,7 @@ export class ResourceManager {
: params.resourceName;
ctx.action.params.filterByTk = params.resourceIndex;
const query = parseQuery(ctx.request.querystring);
if (pathToRegexp('/resourcer/{:associatedName.}?:resourceName{\\::actionName}').test(ctx.request.path)) {
if (pathToRegexp('/resourcer/:rest(.*)').test(ctx.request.path)) {
ctx.action.mergeParams({
...query,
...params,

View File

@ -67,17 +67,25 @@ export function parseRequest(request: ParseRequest, options: ParseOptions = {}):
...(options.accessors || {}),
};
const keys = [];
const regexp = pathToRegexp('/resourcer/{:associatedName.}?:resourceName{\\::actionName}', keys);
const regexp = pathToRegexp('/resourcer/:rest(.*)', keys);
const reqPath = decodeURI(request.path);
const matches = regexp.exec(reqPath);
if (matches) {
const params = {};
keys.forEach((obj, index) => {
if (matches[index + 1] === undefined) {
return;
const [resource, action] = matches[1].split(':');
const [res1, res2] = resource.split('.');
if (res1) {
if (res2) {
params['associatedName'] = res1;
params['resourceName'] = res2;
} else {
params['resourceName'] = res1;
}
params[obj.name] = matches[index + 1];
});
}
if (action) {
params['actionName'] = action;
}
return params;
}
const defaults = {

View File

@ -8,8 +8,8 @@
"@formily/json-schema": "2.x",
"@hapi/topo": "^6.0.0",
"@koa/cors": "^5.0.0",
"@koa/multer": "^3.0.2",
"@koa/router": "^9.4.0",
"@koa/multer": "^3.1.0",
"@koa/router": "^13.1.0",
"@nocobase/acl": "1.7.0-alpha.11",
"@nocobase/actions": "1.7.0-alpha.11",
"@nocobase/auth": "1.7.0-alpha.11",
@ -26,7 +26,7 @@
"@types/decompress": "4.2.7",
"@types/ini": "^1.3.31",
"@types/koa-send": "^4.1.3",
"@types/multer": "^1.4.5",
"@types/multer": "^1.4.12",
"async-mutex": "^0.5.0",
"axios": "^1.7.0",
"chalk": "^4.1.1",
@ -45,7 +45,7 @@
"koa-send": "^5.0.1",
"koa-static": "^5.0.0",
"lodash": "^4.17.21",
"multer": "^1.4.2",
"multer": "^1.4.5-lts.2",
"nanoid": "^3.3.11",
"semver": "^7.7.1",
"serve-handler": "^6.1.6",

View File

@ -29,14 +29,13 @@ export default (app: Application) => {
'migrations',
`${dayjs().format('YYYYMMDDHHmmss')}-${name}.ts`,
);
const version = app.getVersion();
// 匹配主版本号、次版本号、小版本号和后缀的正则表达式
const version = app.getPackageVersion();
const regex = /(\d+)\.(\d+)\.(\d+)(-[\w.]+)?/;
const nextVersion = version.replace(regex, (match, major, minor, patch, suffix) => {
// 将小版本号转换为整数并加1
const newPatch = parseInt(patch) + 1;
// 返回新的版本号
return `${major}.${minor}.${newPatch}${suffix || ''}`;
if (version.includes('beta') || version.includes('alpha')) {
return `${major}.${minor}.${patch}`;
}
return `${major}.${1 + 1 * minor}.0`;
});
const from = pkg === '@nocobase/server' ? `../migration` : '@nocobase/server';
const data = `import { Migration } from '${from}';

View File

@ -15,7 +15,7 @@ const deps: Record<string, string> = {
'@formily': '2.x',
'@formily/antd-v5': '1.x',
jsonwebtoken: '8.x',
jsonwebtoken: '9.x',
'cache-manager': '5.x',
sequelize: '6.x',
umzug: '3.x',
@ -26,7 +26,7 @@ const deps: Record<string, string> = {
'winston-daily-rotate-file': '4.x',
koa: '2.x',
'@koa/cors': '5.x',
'@koa/router': '9.x',
'@koa/router': '13.x',
multer: '1.x',
'@koa/multer': '3.x',
'koa-bodyparser': '4.x',

View File

@ -69,7 +69,6 @@
"mysql2": "^3.11.0",
"pg": "^8.7.3",
"pg-hstore": "^2.3.4",
"sqlite3": "^5.0.8",
"supertest": "^6.1.6",
"vite": "^5.0.0",
"vitest": "^1.5.0",

View File

@ -7,13 +7,13 @@
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import http from 'http';
import url from 'url';
import pg from 'pg';
import dotenv from 'dotenv';
import path from 'path';
import mysql from 'mysql2/promise';
import http from 'http';
import mariadb from 'mariadb';
import mysql from 'mysql2/promise';
import path from 'path';
import pg from 'pg';
import url from 'url';
dotenv.config({ path: path.resolve(process.cwd(), '.env.test') });

View File

@ -13,7 +13,7 @@
"flat-to-nested": "^1.1.1",
"graphlib": "^2.1.8",
"handlebars": "^4.7.8",
"multer": "^1.4.5-lts.1",
"multer": "^1.4.5-lts.2",
"object-path": "^0.11.8"
},
"gitHead": "d0b4efe4be55f8c79a98a331d99d9f8cf99021a1"

View File

@ -236,3 +236,13 @@ export const getDateTimeFormat = (picker, format, showTime, timeFormat) => {
}
return format;
};
export function getFormatFromDateStr(dateStr: string): string | null {
if (/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(dateStr)) return 'YYYY-MM-DD HH:mm:ss';
if (/^\d{4}-\d{2}-\d{2}$/.test(dateStr)) return 'YYYY-MM-DD';
if (/^\d{4}-\d{2}$/.test(dateStr)) return 'YYYY-MM';
if (/^\d{4}$/.test(dateStr)) return 'YYYY';
if (/^\d{4}Q[1-4]$/.test(dateStr)) return 'YYYY[Q]Q';
if (/^\d{4}-\d{2}-\d{2}T/.test(dateStr)) return 'YYYY-MM-DDTHH:mm:ss.SSSZ';
return null;
}

View File

@ -13,8 +13,8 @@
"Users & permissions"
],
"devDependencies": {
"@types/jsonwebtoken": "^8.5.8",
"jsonwebtoken": "^8.5.1",
"@types/jsonwebtoken": "^9.0.9",
"jsonwebtoken": "^9.0.2",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},

View File

@ -55,6 +55,7 @@ test.describe('direct duplicate & copy into the form and continue to fill in', (
await page.getByRole('menuitem', { name: 'oneToMany' }).click();
await page.getByRole('menuitem', { name: 'manyToOne', exact: true }).click();
await page.getByRole('menuitem', { name: 'manyToMany' }).click();
await page.mouse.move(300, 0);
await page.getByLabel('schema-initializer-ActionBar-createForm:configureActions-general').click();
await page.getByRole('menuitem', { name: 'Submit' }).click();
await page.getByLabel('drawer-Action.Container-general-Duplicate-mask').click();

View File

@ -15,7 +15,7 @@
"@formily/core": "2.x",
"@formily/react": "2.x",
"@formily/shared": "2.x",
"@koa/multer": "^3.0.2",
"@koa/multer": "^3.1.0",
"@types/node-xlsx": "^0.15.1",
"antd": "5.x",
"async-mutex": "^0.5.0",

View File

@ -0,0 +1,182 @@
/**
* This file is part of the NocoBase (R) project.
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
* Authors: NocoBase Team.
*
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import { SchemaSettingsItem, useAPIClient, useDesignable, useFormBlockProps } from '@nocobase/client';
import { useFieldSchema, useForm, useField } from '@formily/react';
import { App } from 'antd';
import React from 'react';
import _ from 'lodash';
import { Schema } from '@formily/json-schema';
import { useT } from '../locale';
import { uid } from '@nocobase/utils/client';
const findInsertPosition = (parentSchema, uid) => {
const postion = {
insertPosition: 'beforeBegin',
insertTarget: null,
};
const properties = Object.values(parentSchema.properties || {}).sort((a, b) => {
return (a as any)['x-index'] - (b as any)['x-index'];
});
for (let i = 0; i < properties.length; i++) {
const property = properties[i];
if ((property as any)['x-uid'] === uid) {
postion.insertPosition = 'beforeBegin';
if (i === properties.length - 1) {
postion.insertPosition = 'beforeEnd';
postion.insertTarget = parentSchema['x-uid'];
} else {
postion.insertPosition = 'beforeBegin';
postion.insertTarget = (properties[i + 1] as any)['x-uid'];
}
}
}
return postion;
};
const findParentRootTemplateSchema = (fieldSchema) => {
if (!fieldSchema) {
return null;
}
if (fieldSchema['x-template-root-uid']) {
return fieldSchema;
} else {
return findParentRootTemplateSchema(fieldSchema.parent);
}
};
// Create a copy of the schema with all template associations removed
const convertToNormalBlockSchema = (schema) => {
const newSchema = _.cloneDeep(schema);
// Remove template associations from the schema
const removeTemplateAssociations = (s) => {
// Remove template-specific properties
delete s['x-template-uid'];
delete s['x-template-root-uid'];
delete s['x-template-version'];
delete s['x-block-template-key'];
delete s['x-template-root-ref'];
delete s['x-template-title'];
delete s['x-virtual'];
if (s['x-toolbar-props']?.toolbarClassName?.includes('nb-in-template')) {
s['x-toolbar-props'].toolbarClassName = s['x-toolbar-props'].toolbarClassName.replace('nb-in-template', '');
}
if (s['x-uid']) {
s['x-uid'] = uid();
}
// Process nested properties
if (s.properties) {
for (const key in s.properties) {
if (!s.properties[key]['x-template-root-uid']) {
removeTemplateAssociations(s.properties[key]);
}
}
}
};
removeTemplateAssociations(newSchema);
return newSchema;
};
export const ConvertToNormalBlockSetting = () => {
const { refresh } = useDesignable();
const t = useT();
const api = useAPIClient();
const form = useForm();
const field = useField();
const { form: blockForm } = useFormBlockProps();
const fieldSchema = useFieldSchema();
const { modal, message } = App.useApp();
const blockTemplatesResource = api.resource('blockTemplates');
const confirm = {
okText: t('Yes'),
cancelText: t('No'),
};
return (
<SchemaSettingsItem
title={t('Convert to normal block')}
onClick={() => {
modal.confirm({
title: t('Convert to normal block'),
content: t('Are you sure you want to convert this template block to a normal block?'),
...confirm,
async onOk() {
const newSchema = convertToNormalBlockSchema(fieldSchema.toJSON());
const position = findInsertPosition(fieldSchema.parent, fieldSchema['x-uid']);
// TODO: Remove old schema, and links
// Remove old schema
await api.request({
url: `/uiSchemas:remove/${fieldSchema['x-uid']}`,
});
// Insert new schema
const schema = new Schema(newSchema);
await api.request({
url: `/uiSchemas:insertAdjacent/${position.insertTarget}?position=${position.insertPosition}`,
method: 'post',
data: {
schema,
},
});
// Update the UI to show the new schema
fieldSchema.toJSON = () => {
const ret = schema.toJSON();
return ret;
};
refresh({ refreshParentSchema: true });
// Update component properties
field['componentProps'] = {
...field['componentProps'],
key: uid(),
};
if (field.parent?.['componentProps']) {
field.parent['componentProps'] = {
...field.parent['componentProps'],
key: uid(),
};
}
// Update decorator properties
field['decoratorProps'] = {
...field['decoratorProps'],
key: uid(),
};
if (field.parent?.['decoratorProps']) {
field.parent['decoratorProps'] = {
...field.parent['decoratorProps'],
key: uid(),
};
}
// Reset forms
form.reset();
blockForm?.reset();
form.clearFormGraph('*', false);
blockForm?.clearFormGraph('*', false);
message.success(t('Converted successfully'), 0.2);
},
});
}}
>
{t('Convert to normal block')}
</SchemaSettingsItem>
);
};

View File

@ -74,7 +74,7 @@ export const SaveAsTemplateSetting = () => {
key: {
type: 'string',
'x-decorator': 'FormItem',
title: t('Key'),
title: t('Name'),
'x-component': 'Input',
'x-validator': 'uid',
required: true,
@ -298,6 +298,10 @@ function getTemplateSchemaFromPage(schema: ISchema) {
}
_.set(t, `properties.['${key}']`, {});
traverseSchema(s.properties[key], t.properties[key]);
// array's key will be set to number when render, so we need to set the name to the key
if (s.type === 'array' && t['properties']?.[key]?.name) {
_.set(t, `properties.['${key}'].name`, key);
}
}
}
};

View File

@ -22,8 +22,9 @@ export const useIsPageBlock = () => {
const isPage = location.pathname.startsWith('/admin/') || location.pathname.startsWith('/page/');
const notInPopup = !location.pathname.includes('/popups/');
const notInSetting = !location.pathname.startsWith('/admin/settings/');
const notInWorkflow = !location.pathname.startsWith('/admin/workflow/workflows/');
const notInBlockTemplate = !location.pathname.startsWith('/block-templates/');
return isPage && notInPopup && notInSetting && notInBlockTemplate;
return isPage && notInPopup && notInSetting && notInWorkflow && notInBlockTemplate;
}, [location.pathname, fieldSchema]);
return isPageBlock;

View File

@ -28,6 +28,8 @@ import {
import { BlockTemplateMenusProvider } from './components/BlockTemplateMenusProvider';
import { disabledDeleteSettingItem } from './settings/disabledDeleteSetting';
import { saveAsTemplateSetting } from './settings/saveAsTemplateSetting';
import { convertToNormalBlockSettingItem } from './settings/convertToNormalBlockSetting';
export class PluginBlockTemplateClient extends Plugin {
templateInfos = new Map();
templateschemacache = {};
@ -158,9 +160,10 @@ export class PluginBlockTemplateClient extends Plugin {
deleteItemIndex !== -1 &&
!schemaSetting.items.find((item) => item.name === 'template-revertSettingItem')
) {
schemaSetting.items.splice(deleteItemIndex, 0, revertSettingItem);
schemaSetting.items.splice(deleteItemIndex, 0, revertSettingItem, convertToNormalBlockSettingItem);
} else {
schemaSetting.add('template-revertSettingItem', revertSettingItem);
schemaSetting.add('template-convertToNormalBlockSettingItem', convertToNormalBlockSettingItem);
}
schemaSetting.add('template-disabledDeleteItem', disabledDeleteSettingItem);
}

View File

@ -0,0 +1,23 @@
/**
* This file is part of the NocoBase (R) project.
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
* Authors: NocoBase Team.
*
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import { useFieldSchema } from '@formily/react';
import { ConvertToNormalBlockSetting } from '../components/ConvertToNormalBlockSetting';
import { tStr } from '../locale';
import { useIsInTemplate } from '../hooks/useIsInTemplate';
export const convertToNormalBlockSettingItem = {
name: 'template-convertToNormalBlockSettingItem',
title: tStr('Convert to normal block'),
Component: ConvertToNormalBlockSetting,
useVisible: () => {
const fieldSchema = useFieldSchema();
return fieldSchema?.['x-template-root-uid'];
},
};

View File

@ -12,7 +12,9 @@
"Mobile": "Mobile",
"Current": "Current record",
"Revert to template": "Revert to template",
"Convert to normal block": "Convert to normal block",
"Are you sure you want to revert all changes from the template?": "Are you sure you want to revert all changes from the template?",
"Are you sure you want to convert this template block to a normal block?": "Are you sure you want to convert this template block to a normal block?",
"Templates": "Templates",
"Block templates": "Block templates",
"Submit": "Submit",
@ -22,6 +24,7 @@
"Saved successfully": "Saved successfully",
"Block template": "Block template",
"Reset successfully": "Reset successfully",
"Converted successfully": "Converted successfully",
"Delete successfully": "Delete successfully",
"Template block settings": "Template block settings",
"Filter": "Filter",

View File

@ -12,7 +12,9 @@
"Mobile": "移动端",
"Current": "当前记录",
"Revert to template": "恢复到模板",
"Convert to normal block": "转换成普通区块",
"Are you sure you want to revert all changes from the template?": "您确定要恢复所有对模板的更改吗?",
"Are you sure you want to convert this template block to a normal block?": "您确定要将此模板区块转换为普通区块吗?",
"Templates": "模板",
"Block templates": "区块模板",
"Submit": "提交",
@ -22,6 +24,7 @@
"Saved successfully": "保存成功",
"Block template": "区块模板",
"Reset successfully": "重置成功",
"Converted successfully": "转换成功",
"Delete successfully": "删除成功",
"Template block settings": "模板区块设置",
"Filter": "筛选",

View File

@ -15,15 +15,15 @@
"@formily/core": "2.x",
"@formily/react": "2.x",
"@formily/shared": "2.x",
"@koa/multer": "^3.0.0",
"@types/koa-multer": "^1.0.1",
"@koa/multer": "^3.1.0",
"@types/koa-multer": "^1.0.4",
"@types/multer": "^1.4.5",
"antd": "5.x",
"cos-nodejs-sdk-v5": "^2.11.14",
"koa-static": "^5.0.0",
"mime-match": "^1.0.2",
"mkdirp": "~0.5.4",
"multer": "^1.4.2",
"multer": "^1.4.5-lts.2",
"multer-aliyun-oss": "2.1.3",
"multer-cos": "^1.0.3",
"multer-s3": "^3.0.1",

View File

@ -140,8 +140,8 @@ const MobileDateTimePicker = connect(
}}
precision={showTime && picker === 'date' ? getPrecision(timeFormat) : picker === 'date' ? 'day' : picker}
renderLabel={labelRenderer}
min={minDate || rest.min || new Date(1000, 0, 1)}
max={maxDate || rest.max || new Date(9999, 11, 31)}
min={minDate || rest.min || new Date(1950, 0, 1)}
max={maxDate || rest.max || new Date(2050, 11, 31)}
onConfirm={(val) => {
handleConfirm(val);
}}

View File

@ -29,6 +29,10 @@ export const useStyles = genStyleHook('nb-mobile-navigation-bar-action', (token)
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
'& > span': {
position: 'relative',
},
},
'.nb-navigation-bar-action-title': {
fontSize: 17,

View File

@ -199,7 +199,7 @@ export default {
value: 'formula.js',
label: 'Formula.js',
tooltip: '{{t("Formula.js supports most Microsoft Excel formula functions.")}}',
link: 'https://formulajs.info/functions/',
link: 'https://docs.nocobase.com/handbook/calculation-engines/formula',
},
],
default: 'formula.js',

View File

@ -10,8 +10,8 @@
"homepage": "https://docs.nocobase.com/handbook/users",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/users",
"devDependencies": {
"@types/jsonwebtoken": "^8.5.8",
"jsonwebtoken": "^8.5.1"
"@types/jsonwebtoken": "^9.0.9",
"jsonwebtoken": "^9.0.2"
},
"peerDependencies": {
"@nocobase/actions": "1.x",

View File

@ -882,7 +882,7 @@ export const builtinExpression = {
value: 'formula.js',
label: 'Formula.js',
tooltip: '{{t("Formula.js supports most Microsoft Excel formula functions.")}}',
link: 'https://formulajs.info/functions/',
link: 'https://docs.nocobase.com/handbook/calculation-engines/formula',
},
],
default: 'formula.js',

254
yarn.lock
View File

@ -5273,7 +5273,7 @@
dependencies:
vary "^1.1.2"
"@koa/multer@^3.0.0", "@koa/multer@^3.0.2":
"@koa/multer@^3.0.2":
version "3.0.2"
resolved "https://registry.npmmirror.com/@koa/multer/-/multer-3.0.2.tgz#04ed1af502de5793a6052daf6c256e94ef13e3a4"
integrity sha512-Q6WfPpE06mJWyZD1fzxM6zWywaoo+zocAn2YA9QYz4RsecoASr1h/kSzG0c5seDpFVKCMZM9raEfuM7XfqbRLw==
@ -5296,11 +5296,20 @@
resolved "https://registry.npmmirror.com/@koa/router/-/router-9.4.0.tgz#734b64c0ae566eb5af752df71e4143edc4748e48"
integrity sha512-dOOXgzqaDoHu5qqMEPLKEgLz5CeIA7q8+1W62mCvFVCOqeC71UoTGJ4u1xUSOpIl2J1x2pqrNULkFteUeZW3/A==
dependencies:
debug "^4.1.1"
http-errors "^1.7.3"
debug "^4.3.4"
http-errors "^2.0.0"
koa-compose "^4.1.0"
methods "^1.1.2"
path-to-regexp "^6.1.0"
path-to-regexp "^6.3.0"
"@koa/router@^13.1.0":
version "13.1.0"
resolved "https://registry.npmmirror.com/@koa/router/-/router-13.1.0.tgz#43f4c554444ea4f4a148a5735a9525c6d16fd1b5"
integrity sha512-mNVu1nvkpSd8Q8gMebGbCkDWJ51ODetrFvLKYusej+V0ByD4btqHYnPIzTBLXnQMVUlm/oxVwqmWBY3zQfZilw==
dependencies:
http-errors "^2.0.0"
koa-compose "^4.1.0"
path-to-regexp "^6.3.0"
"@langchain/core@^0.3.39":
version "0.3.42"
@ -6164,20 +6173,23 @@
resolved "https://registry.npmmirror.com/@makotot/ghostui/-/ghostui-2.0.0.tgz#ae035d405a9ed5100436158e953ed9480f1c09a7"
integrity sha512-LD6OeMv+yGjpYZNjh34yDTCIE1NegqOtJq5gm4wX6op3QL7K5psTVzMjkWzseBoYj0XOD4g+UJVIZTprfoOPGg==
"@mapbox/node-pre-gyp@^1.0.0":
version "1.0.11"
resolved "https://registry.npmmirror.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa"
integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==
"@marijn/find-cluster-break@^1.0.0":
version "1.0.2"
resolved "https://registry.npmmirror.com/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz#775374306116d51c0c500b8c4face0f9a04752d8"
integrity sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==
"@microsoft/microsoft-graph-client@^3.0.7":
version "3.0.7"
resolved "https://registry.npmmirror.com/@microsoft/microsoft-graph-client/-/microsoft-graph-client-3.0.7.tgz#535507df2db40bd7ed24a670dc68c87c628177a4"
integrity sha512-/AazAV/F+HK4LIywF9C+NYHcJo038zEnWkteilcxC1FM/uK/4NVGDKGrxx7nNq1ybspAroRKT4I1FHfxQzxkUw==
dependencies:
detect-libc "^2.0.0"
https-proxy-agent "^5.0.0"
make-dir "^3.1.0"
node-fetch "^2.6.7"
nopt "^5.0.0"
npmlog "^5.0.1"
rimraf "^3.0.2"
semver "^7.3.5"
tar "^6.1.11"
"@babel/runtime" "^7.12.5"
tslib "^2.2.0"
"@microsoft/microsoft-graph-types@^2.40.0":
version "2.40.0"
resolved "https://registry.npmmirror.com/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.40.0.tgz#65f51600ab45ace97d7b1368c47f9e0f835fddca"
integrity sha512-1fcPVrB/NkbNcGNfCy+Cgnvwxt6/sbIEEFgZHFBJ670zYLegENYJF8qMo7x3LqBjWX2/Eneq5BVVRCLTmlJN+g==
"@marijn/find-cluster-break@^1.0.0":
version "1.0.2"
@ -6264,6 +6276,23 @@
xml2js "^0.5.0"
xmlbuilder "^15.1.1"
"@node-saml/node-saml@^4.0.2":
version "4.0.5"
resolved "https://registry.npmmirror.com/@node-saml/node-saml/-/node-saml-4.0.5.tgz#039e387095b54639b06df62b1b4a6d8941c6d907"
integrity sha512-J5DglElbY1tjOuaR1NPtjOXkXY5bpUhDoKVoeucYN98A3w4fwgjIOPqIGcb6cQsqFq2zZ6vTCeKn5C/hvefSaw==
dependencies:
"@types/debug" "^4.1.7"
"@types/passport" "^1.0.11"
"@types/xml-crypto" "^1.4.2"
"@types/xml-encryption" "^1.2.1"
"@types/xml2js" "^0.4.11"
"@xmldom/xmldom" "^0.8.6"
debug "^4.3.4"
xml-crypto "^3.0.1"
xml-encryption "^3.0.2"
xml2js "^0.5.0"
xmlbuilder "^15.1.1"
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@ -8911,11 +8940,12 @@
dependencies:
"@types/node" "*"
"@types/jsonwebtoken@^8.5.8":
version "8.5.9"
resolved "https://registry.npmmirror.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz#2c064ecb0b3128d837d2764aa0b117b0ff6e4586"
integrity sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==
"@types/jsonwebtoken@^9.0.9":
version "9.0.9"
resolved "https://registry.npmmirror.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz#a4c3a446c0ebaaf467a58398382616f416345fb3"
integrity sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==
dependencies:
"@types/ms" "*"
"@types/node" "*"
"@types/keygrip@*":
@ -8937,7 +8967,7 @@
dependencies:
"@types/koa" "*"
"@types/koa-multer@^1.0.1":
"@types/koa-multer@^1.0.4":
version "1.0.4"
resolved "https://registry.npmmirror.com/@types/koa-multer/-/koa-multer-1.0.4.tgz#5576cb7aea56926e4d48faaa7b510b87bdfcb3db"
integrity sha512-Aty7k5W/bVgvCtyc7iwzjP1QXp1CPsQE3klmIEVBphK2bthjJjUpgkvFNChckA8DPxaatzFmnotWZnXLAAnLog==
@ -9080,7 +9110,7 @@
resolved "https://registry.npmmirror.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433"
integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==
"@types/multer@^1.4.5":
"@types/multer@^1.4.12", "@types/multer@^1.4.5":
version "1.4.12"
resolved "https://registry.npmmirror.com/@types/multer/-/multer-1.4.12.tgz#da67bd0c809f3a63fe097c458c0d4af1fea50ab7"
integrity sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg==
@ -10801,7 +10831,7 @@ aproba@^1.0.3, aproba@^1.1.1:
resolved "https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0:
aproba@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
@ -10886,22 +10916,6 @@ archy@^1.0.0:
resolved "https://registry.npmmirror.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==
are-we-there-yet@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c"
integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==
dependencies:
delegates "^1.0.0"
readable-stream "^3.6.0"
are-we-there-yet@^3.0.0:
version "3.0.1"
resolved "https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd"
integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==
dependencies:
delegates "^1.0.0"
readable-stream "^3.6.0"
are-we-there-yet@~1.1.2:
version "1.1.7"
resolved "https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146"
@ -12104,14 +12118,6 @@ bundle-require@^5.0.0:
dependencies:
load-tsconfig "^0.2.3"
busboy@^0.2.11:
version "0.2.14"
resolved "https://registry.npmmirror.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453"
integrity sha512-InWFDomvlkEj+xWLBfU3AvnbVYqeTWmQopiW0tWWEy5yehYm2YkGEc59sUmw/4ty5Zj/b0WHGs1LgecuBSBGrg==
dependencies:
dicer "0.2.5"
readable-stream "1.1.x"
busboy@^1.0.0:
version "1.6.0"
resolved "https://registry.npmmirror.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
@ -13098,7 +13104,7 @@ color-string@^1.5.5, color-string@^1.6.0:
color-name "^1.0.0"
simple-swizzle "^0.2.2"
color-support@^1.1.2, color-support@^1.1.3:
color-support@^1.1.3:
version "1.1.3"
resolved "https://registry.npmmirror.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
@ -13403,7 +13409,7 @@ console-browserify@^1.1.0:
resolved "https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0:
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
@ -15051,11 +15057,6 @@ detect-libc@^1.0.3:
resolved "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==
detect-libc@^2.0.0:
version "2.0.2"
resolved "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d"
integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==
detect-newline@^4.0.0:
version "4.0.1"
resolved "https://registry.npmmirror.com/detect-newline/-/detect-newline-4.0.1.tgz#fcefdb5713e1fb8cb2839b8b6ee22e6716ab8f23"
@ -15079,14 +15080,6 @@ dezalgo@^1.0.0, dezalgo@^1.0.4:
asap "^2.0.0"
wrappy "1"
dicer@0.2.5:
version "0.2.5"
resolved "https://registry.npmmirror.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f"
integrity sha512-FDvbtnq7dzlPz0wyYlOExifDEZcu8h+rErEXgfxqmLfRfC/kJidEFh4+effJRO3P0xmfqyPbSMG0LveNRfTKVg==
dependencies:
readable-stream "1.1.x"
streamsearch "0.1.2"
diff-match-patch@^1.0.5:
version "1.0.5"
resolved "https://registry.npmmirror.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37"
@ -17680,35 +17673,6 @@ functions-have-names@^1.2.3:
resolved "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
gauge@^3.0.0:
version "3.0.2"
resolved "https://registry.npmmirror.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395"
integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==
dependencies:
aproba "^1.0.3 || ^2.0.0"
color-support "^1.1.2"
console-control-strings "^1.0.0"
has-unicode "^2.0.1"
object-assign "^4.1.1"
signal-exit "^3.0.0"
string-width "^4.2.3"
strip-ansi "^6.0.1"
wide-align "^1.1.2"
gauge@^4.0.3:
version "4.0.4"
resolved "https://registry.npmmirror.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==
dependencies:
aproba "^1.0.3 || ^2.0.0"
color-support "^1.1.3"
console-control-strings "^1.1.0"
has-unicode "^2.0.1"
signal-exit "^3.0.7"
string-width "^4.2.3"
strip-ansi "^6.0.1"
wide-align "^1.1.5"
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.npmmirror.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
@ -20792,7 +20756,7 @@ jsonwebtoken@^8.5.1:
lodash.isstring "^4.0.1"
lodash.once "^4.0.0"
ms "^2.1.1"
semver "^5.6.0"
semver "^7.5.4"
jsonwebtoken@^9.0.0:
version "9.0.2"
@ -21917,7 +21881,7 @@ make-fetch-happen@^8.0.9:
socks-proxy-agent "^5.0.0"
ssri "^8.0.0"
make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0:
make-fetch-happen@^9.0.1:
version "9.1.0"
resolved "https://registry.npmmirror.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968"
integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==
@ -23192,24 +23156,10 @@ multer-s3@^3.0.1:
html-comment-regex "^1.1.2"
run-parallel "^1.1.6"
multer@^1.4.2:
version "1.4.4"
resolved "https://registry.npmmirror.com/multer/-/multer-1.4.4.tgz#e2bc6cac0df57a8832b858d7418ccaa8ebaf7d8c"
integrity sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==
dependencies:
append-field "^1.0.0"
busboy "^0.2.11"
concat-stream "^1.5.2"
mkdirp "^0.5.4"
object-assign "^4.1.1"
on-finished "^2.3.0"
type-is "^1.6.4"
xtend "^4.0.0"
multer@^1.4.5-lts.1:
version "1.4.5-lts.1"
resolved "https://registry.npmmirror.com/multer/-/multer-1.4.5-lts.1.tgz#803e24ad1984f58edffbc79f56e305aec5cfd1ac"
integrity sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==
multer@^1.4.5-lts.2:
version "1.4.5-lts.2"
resolved "https://registry.npmmirror.com/multer/-/multer-1.4.5-lts.2.tgz#340af065d8685dda846ec9e3d7655fcd50afba2d"
integrity sha512-VzGiVigcG9zUAoCNU+xShztrlr1auZOlurXynNvO9GiWD1/mTBbUljOKY+qMeazBqXgRnjzeEgJI/wyjJUHg9A==
dependencies:
append-field "^1.0.0"
busboy "^1.0.0"
@ -23423,11 +23373,6 @@ node-abort-controller@^3.0.1:
resolved "https://registry.npmmirror.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548"
integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==
node-addon-api@^4.2.0:
version "4.3.0"
resolved "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==
node-domexception@1.0.0, node-domexception@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
@ -23458,21 +23403,21 @@ node-fetch@^3.2.0:
fetch-blob "^3.1.4"
formdata-polyfill "^4.0.10"
node-gyp@8.x:
version "8.4.1"
resolved "https://registry.npmmirror.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937"
integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==
node-gyp@^10.2.0:
version "10.3.1"
resolved "https://registry.npmmirror.com/node-gyp/-/node-gyp-10.3.1.tgz#1dd1a1a1c6c5c59da1a76aea06a062786b2c8a1a"
integrity sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==
dependencies:
env-paths "^2.2.0"
glob "^7.1.4"
exponential-backoff "^3.1.1"
glob "^10.3.10"
graceful-fs "^4.2.6"
make-fetch-happen "^9.1.0"
nopt "^5.0.0"
npmlog "^6.0.0"
rimraf "^3.0.2"
make-fetch-happen "^13.0.0"
nopt "^7.0.0"
proc-log "^4.1.0"
semver "^7.3.5"
tar "^6.1.2"
which "^2.0.2"
tar "^6.2.1"
which "^4.0.0"
node-gyp@^10.2.0:
version "10.3.1"
@ -23829,26 +23774,6 @@ npmlog@^4.1.2:
gauge "~2.7.3"
set-blocking "~2.0.0"
npmlog@^5.0.1:
version "5.0.1"
resolved "https://registry.npmmirror.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0"
integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==
dependencies:
are-we-there-yet "^2.0.0"
console-control-strings "^1.1.0"
gauge "^3.0.0"
set-blocking "^2.0.0"
npmlog@^6.0.0:
version "6.0.2"
resolved "https://registry.npmmirror.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
dependencies:
are-we-there-yet "^3.0.0"
console-control-strings "^1.1.0"
gauge "^4.0.3"
set-blocking "^2.0.0"
nprogress@^0.2.0:
version "0.2.0"
resolved "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1"
@ -24914,20 +24839,15 @@ path-to-regexp@3.3.0:
resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b"
integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==
path-to-regexp@6.2.2:
version "6.2.2"
resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.2.2.tgz#324377a83e5049cbecadc5554d6a63a9a4866b36"
integrity sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==
path-to-regexp@8.2.0:
version "8.2.0"
resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz#73990cc29e57a3ff2a0d914095156df5db79e8b4"
integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==
path-to-regexp@^6.1.0:
version "6.2.1"
resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5"
integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==
path-to-regexp@^6.3.0:
version "6.3.0"
resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4"
integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==
path-to-regexp@^6.3.0:
version "6.3.0"
@ -29366,17 +29286,6 @@ sprintf-js@~1.0.2:
resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
sqlite3@^5.0.8:
version "5.1.6"
resolved "https://registry.npmmirror.com/sqlite3/-/sqlite3-5.1.6.tgz#1d4fbc90fe4fbd51e952e0a90fd8f6c2b9098e97"
integrity sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==
dependencies:
"@mapbox/node-pre-gyp" "^1.0.0"
node-addon-api "^4.2.0"
tar "^6.1.11"
optionalDependencies:
node-gyp "8.x"
sqlstring@^2.3.2:
version "2.3.3"
resolved "https://registry.npmmirror.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c"
@ -29553,11 +29462,6 @@ stream-wormhole@^1.0.4:
resolved "https://registry.npmmirror.com/stream-wormhole/-/stream-wormhole-1.1.0.tgz#300aff46ced553cfec642a05251885417693c33d"
integrity sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==
streamsearch@0.1.2:
version "0.1.2"
resolved "https://registry.npmmirror.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a"
integrity sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==
streamsearch@^1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
@ -30240,7 +30144,7 @@ tar@^4.4.12:
safe-buffer "^5.2.1"
yallist "^3.1.1"
tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2:
tar@^6.0.2, tar@^6.1.0, tar@^6.1.11:
version "6.2.0"
resolved "https://registry.npmmirror.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73"
integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==
@ -32311,7 +32215,7 @@ why-is-node-running@^2.2.2:
siginfo "^2.0.0"
stackback "0.0.2"
wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5:
wide-align@^1.1.0:
version "1.1.5"
resolved "https://registry.npmmirror.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==