diff --git a/package.json b/package.json index c1cf9d3c29..a50f6623fd 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,7 @@ "overrides": { "@types/node": "^16.18.12", "browserslist": "^4.21.4", + "chokidar": "3.5.2", "ejs": "^3.1.8", "fork-ts-checker-webpack-plugin": "^6.0.4", "jsonwebtoken": "9.0.0", diff --git a/packages/cli/.npmignore b/packages/cli/.npmignore new file mode 100644 index 0000000000..e0c1232042 --- /dev/null +++ b/packages/cli/.npmignore @@ -0,0 +1 @@ +dist/ReloadNodesAndCredentials.* diff --git a/packages/cli/package.json b/packages/cli/package.json index f159277ed7..028bee3f60 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -75,6 +75,7 @@ "@types/jsonwebtoken": "^9.0.1", "@types/localtunnel": "^1.9.0", "@types/lodash.get": "^4.4.6", + "@types/lodash.debounce": "^4.0.7", "@types/lodash.intersection": "^4.4.7", "@types/lodash.iteratee": "^4.7.7", "@types/lodash.merge": "^4.6.6", @@ -99,7 +100,9 @@ "@types/uuid": "^8.3.2", "@types/validator": "^13.7.0", "@types/yamljs": "^0.2.31", + "chokidar": "^3.5.2", "concurrently": "^5.1.0", + "lodash.debounce": "^4.0.8", "mock-jwks": "^1.0.9", "nodemon": "^2.0.2", "run-script-os": "^1.0.7", @@ -190,7 +193,6 @@ "sse-channel": "^4.0.0", "swagger-ui-express": "^4.3.0", "syslog-client": "^1.1.1", - "tslib": "1.14.1", "typeorm": "0.3.11", "uuid": "^8.3.2", "validator": "13.7.0", diff --git a/packages/cli/src/Interfaces.ts b/packages/cli/src/Interfaces.ts index 3044528ec5..86150c1acd 100644 --- a/packages/cli/src/Interfaces.ts +++ b/packages/cli/src/Interfaces.ts @@ -615,7 +615,8 @@ export type IPushData = | PushDataConsoleMessage | PushDataReloadNodeType | PushDataRemoveNodeType - | PushDataTestWebhook; + | PushDataTestWebhook + | PushDataNodeDescriptionUpdated; type PushDataExecutionFinished = { data: IPushDataExecutionFinished; @@ -657,6 +658,11 @@ type PushDataTestWebhook = { type: 'testWebhookDeleted' | 'testWebhookReceived'; }; +type PushDataNodeDescriptionUpdated = { + data: undefined; + type: 'nodeDescriptionUpdated'; +}; + export interface IPushDataExecutionFinished { data: IRun; executionId: string; diff --git a/packages/cli/src/NodeTypes.ts b/packages/cli/src/NodeTypes.ts index 232d978e22..070831d3a3 100644 --- a/packages/cli/src/NodeTypes.ts +++ b/packages/cli/src/NodeTypes.ts @@ -10,15 +10,11 @@ import type { import { NodeHelpers } from 'n8n-workflow'; import { RESPONSE_ERROR_MESSAGES } from './constants'; -class NodeTypesClass implements INodeTypes { +export class NodeTypesClass implements INodeTypes { constructor(private nodesAndCredentials: INodesAndCredentials) { // Some nodeTypes need to get special parameters applied like the // polling nodes the polling times - // eslint-disable-next-line no-restricted-syntax - for (const nodeTypeData of Object.values(this.loadedNodes)) { - const nodeType = NodeHelpers.getVersionedNodeType(nodeTypeData.type); - NodeHelpers.applySpecialNodeParameters(nodeType); - } + this.applySpecialNodeParameters(); } /** @@ -47,6 +43,13 @@ class NodeTypesClass implements INodeTypes { return NodeHelpers.getVersionedNodeType(this.getNode(nodeType).type, version); } + applySpecialNodeParameters() { + for (const nodeTypeData of Object.values(this.loadedNodes)) { + const nodeType = NodeHelpers.getVersionedNodeType(nodeTypeData.type); + NodeHelpers.applySpecialNodeParameters(nodeType); + } + } + private getNode(type: string): LoadedClass { const loadedNodes = this.loadedNodes; if (type in loadedNodes) { diff --git a/packages/cli/src/ReloadNodesAndCredentials.ts b/packages/cli/src/ReloadNodesAndCredentials.ts new file mode 100644 index 0000000000..1be112037c --- /dev/null +++ b/packages/cli/src/ReloadNodesAndCredentials.ts @@ -0,0 +1,41 @@ +import path from 'path'; +import { realpath } from 'fs/promises'; + +import type { LoadNodesAndCredentialsClass } from '@/LoadNodesAndCredentials'; +import type { NodeTypesClass } from '@/NodeTypes'; +import type { Push } from '@/Push'; + +export const reloadNodesAndCredentials = async ( + loadNodesAndCredentials: LoadNodesAndCredentialsClass, + nodeTypes: NodeTypesClass, + push: Push, +) => { + // eslint-disable-next-line import/no-extraneous-dependencies + const { default: debounce } = await import('lodash.debounce'); + // eslint-disable-next-line import/no-extraneous-dependencies + const { watch } = await import('chokidar'); + + Object.entries(loadNodesAndCredentials.loaders).forEach(async ([dir, loader]) => { + const realModulePath = path.join(await realpath(dir), path.sep); + const reloader = debounce(async () => { + const modulesToUnload = Object.keys(require.cache).filter((filePath) => + filePath.startsWith(realModulePath), + ); + modulesToUnload.forEach((filePath) => { + delete require.cache[filePath]; + }); + + loader.reset(); + await loader.loadAll(); + await loadNodesAndCredentials.postProcessLoaders(); + await loadNodesAndCredentials.generateTypesForFrontend(); + nodeTypes.applySpecialNodeParameters(); + push.send('nodeDescriptionUpdated', undefined); + }, 100); + + const toWatch = loader.isLazyLoaded + ? ['**/nodes.json', '**/credentials.json'] + : ['**/*.js', '**/*.json']; + watch(toWatch, { cwd: realModulePath }).on('change', reloader); + }); +}; diff --git a/packages/cli/src/Server.ts b/packages/cli/src/Server.ts index 9f4eca54c4..e166ce6a6e 100644 --- a/packages/cli/src/Server.ts +++ b/packages/cli/src/Server.ts @@ -81,6 +81,7 @@ import { AUTH_COOKIE_NAME, EDITOR_UI_DIST_DIR, GENERATED_STATIC_DIR, + inDevelopment, N8N_VERSION, NODES_BASE_DIR, RESPONSE_ERROR_MESSAGES, @@ -138,10 +139,11 @@ import { } from '@/CredentialsHelper'; import { CredentialsOverwrites } from '@/CredentialsOverwrites'; import { CredentialTypes } from '@/CredentialTypes'; -import { NodeTypes } from '@/NodeTypes'; -import * as Push from '@/Push'; import { LoadNodesAndCredentials } from '@/LoadNodesAndCredentials'; import type { LoadNodesAndCredentialsClass } from '@/LoadNodesAndCredentials'; +import type { NodeTypesClass } from '@/NodeTypes'; +import { NodeTypes } from '@/NodeTypes'; +import * as Push from '@/Push'; import * as ResponseHelper from '@/ResponseHelper'; import type { WaitTrackerClass } from '@/WaitTracker'; import { WaitTracker } from '@/WaitTracker'; @@ -177,10 +179,12 @@ class Server extends AbstractServer { loadNodesAndCredentials: LoadNodesAndCredentialsClass; - nodeTypes: INodeTypes; + nodeTypes: NodeTypesClass; credentialTypes: ICredentialTypes; + push: Push.Push; + constructor() { super(); @@ -198,6 +202,8 @@ class Server extends AbstractServer { this.app.use('/e2e', require('./api/e2e.api').e2eController); } + this.push = Push.getInstance(); + const urlBaseWebhook = WebhookHelpers.getWebhookBaseUrl(); const telemetrySettings: ITelemetrySettings = { enabled: config.getEnv('diagnostics.enabled'), @@ -429,7 +435,6 @@ class Server extends AbstractServer { this.app.use(cookieParser()); // Get push connections - const push = Push.getInstance(); this.app.use(`/${this.restEndpoint}/push`, corsMiddleware, async (req, res, next) => { const { sessionId } = req.query; if (sessionId === undefined) { @@ -447,7 +452,7 @@ class Server extends AbstractServer { } } - push.add(sessionId as string, req, res); + this.push.add(sessionId as string, req, res); }); // Make sure that Vue history mode works properly @@ -1370,6 +1375,11 @@ export async function start(): Promise { // Set up event handling initEvents(); + if (inDevelopment && process.env.N8N_DEV_RELOAD === 'true') { + const { reloadNodesAndCredentials } = await import('@/ReloadNodesAndCredentials'); + await reloadNodesAndCredentials(app.loadNodesAndCredentials, app.nodeTypes, app.push); + } + void Db.collections.Workflow.findOne({ select: ['createdAt'], order: { createdAt: 'ASC' }, diff --git a/packages/core/src/DirectoryLoader.ts b/packages/core/src/DirectoryLoader.ts index 6b150dab4f..66ba6c832b 100644 --- a/packages/core/src/DirectoryLoader.ts +++ b/packages/core/src/DirectoryLoader.ts @@ -32,15 +32,17 @@ export type Types = { }; export abstract class DirectoryLoader { - readonly loadedNodes: INodeTypeNameVersion[] = []; + isLazyLoaded = false; - readonly nodeTypes: INodeTypeData = {}; + loadedNodes: INodeTypeNameVersion[] = []; - readonly credentialTypes: ICredentialTypeData = {}; + nodeTypes: INodeTypeData = {}; - readonly known: KnownNodesAndCredentials = { nodes: {}, credentials: {} }; + credentialTypes: ICredentialTypeData = {}; - readonly types: Types = { nodes: [], credentials: [] }; + known: KnownNodesAndCredentials = { nodes: {}, credentials: {} }; + + types: Types = { nodes: [], credentials: [] }; constructor( protected readonly directory: string, @@ -49,8 +51,17 @@ export abstract class DirectoryLoader { ) {} abstract packageName: string; + abstract loadAll(): Promise; + reset() { + this.loadedNodes = []; + this.nodeTypes = {}; + this.credentialTypes = {}; + this.known = { nodes: {}, credentials: {} }; + this.types = { nodes: [], credentials: [] }; + } + protected resolvePath(file: string) { return path.resolve(this.directory, file); } @@ -371,6 +382,8 @@ export class LazyPackageDirectoryLoader extends PackageDirectoryLoader { nodes: this.types.nodes?.length ?? 0, }); + this.isLazyLoaded = true; + return; // We can load nodes and credentials lazily now } catch { Logger.debug("Can't enable lazy-loading"); diff --git a/packages/editor-ui/src/mixins/pushConnection.ts b/packages/editor-ui/src/mixins/pushConnection.ts index 14971d104c..1a08f10154 100644 --- a/packages/editor-ui/src/mixins/pushConnection.ts +++ b/packages/editor-ui/src/mixins/pushConnection.ts @@ -490,6 +490,9 @@ export const pushConnection = mixins( this.credentialsStore.fetchCredentialTypes(false).then(() => { this.nodeTypesStore.removeNodeTypes(nodesToBeRemoved); }); + } else if (receivedData.type === 'nodeDescriptionUpdated') { + this.nodeTypesStore.getNodeTypes(); + this.credentialsStore.fetchCredentialTypes(true); } return true; }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 69ca8293f9..177475a28e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,7 @@ onlyBuiltDependencies: overrides: '@types/node': ^16.18.12 browserslist: ^4.21.4 + chokidar: 3.5.2 ejs: ^3.1.8 fork-ts-checker-webpack-plugin: ^6.0.4 jsonwebtoken: 9.0.0 @@ -122,6 +123,7 @@ importers: '@types/json-diff': ^0.5.1 '@types/jsonwebtoken': ^9.0.1 '@types/localtunnel': ^1.9.0 + '@types/lodash.debounce': ^4.0.7 '@types/lodash.get': ^4.4.6 '@types/lodash.intersection': ^4.4.7 '@types/lodash.iteratee': ^4.7.7 @@ -155,6 +157,7 @@ importers: bull: ^4.10.2 callsites: ^3.1.0 change-case: ^4.1.1 + chokidar: 3.5.2 class-validator: ^0.14.0 client-oauth2: ^4.2.5 compression: ^1.7.4 @@ -182,6 +185,7 @@ importers: jwks-rsa: ^3.0.1 ldapts: ^4.2.2 localtunnel: ^2.0.0 + lodash.debounce: ^4.0.8 lodash.get: ^4.4.2 lodash.intersection: ^4.4.0 lodash.iteratee: ^4.7.0 @@ -229,7 +233,6 @@ importers: ts-node: ^9.1.1 tsc-alias: ^1.7.0 tsconfig-paths: ^3.14.1 - tslib: 1.14.1 typeorm: 0.3.11 uuid: ^8.3.2 validator: 13.7.0 @@ -259,7 +262,7 @@ importers: cookie-parser: 1.4.6 crypto-js: 4.1.1 csrf: 3.1.0 - curlconverter: 3.21.0 + curlconverter: 3.21.0_chokidar@3.5.2 dotenv: 8.6.0 express: 4.18.2 express-async-errors: 3.1.1_express@4.18.2 @@ -318,7 +321,6 @@ importers: sse-channel: 4.0.0 swagger-ui-express: 4.5.0_express@4.18.2 syslog-client: 1.1.1 - tslib: 1.14.1 typeorm: 0.3.11_a77gzgdqnod3rkvxniiwirlqsi uuid: 8.3.2 validator: 13.7.0 @@ -338,6 +340,7 @@ importers: '@types/json-diff': 0.5.2 '@types/jsonwebtoken': 9.0.1 '@types/localtunnel': 1.9.0 + '@types/lodash.debounce': 4.0.7 '@types/lodash.get': 4.4.7 '@types/lodash.intersection': 4.4.7 '@types/lodash.iteratee': 4.7.7 @@ -363,7 +366,9 @@ importers: '@types/uuid': 8.3.4 '@types/validator': 13.7.7 '@types/yamljs': 0.2.31 + chokidar: 3.5.2 concurrently: 5.3.0 + lodash.debounce: 4.0.8 mock-jwks: 1.0.9_nock@13.2.9 nodemon: 2.0.20 run-script-os: 1.1.6 @@ -2866,7 +2871,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 - dev: true /@babel/standalone/7.20.12: resolution: {integrity: sha512-hK/X+m1il3w1tYS4H8LDaGCEdiT47SVqEXY8RiEAgou26BystipSU8ZL6EvBR6t5l7lTv0ilBiChXWblKJ5iUA==} @@ -4032,7 +4036,7 @@ packages: debug: 4.3.4 globby: 11.1.0 is-wsl: 2.2.0 - tslib: 2.4.0 + tslib: 2.4.1 transitivePeerDependencies: - supports-color dev: true @@ -6200,6 +6204,12 @@ packages: '@types/lodash': 4.14.186 dev: true + /@types/lodash.debounce/4.0.7: + resolution: {integrity: sha512-X1T4wMZ+gT000M2/91SYj0d/7JfeNZ9PeeOldSNoE/lunLeQXKvkmIumI29IaKMotU/ln/McOIvgzZcQ/3TrSA==} + dependencies: + '@types/lodash': 4.14.191 + dev: true + /@types/lodash.get/4.4.7: resolution: {integrity: sha512-af34Mj+KdDeuzsJBxc/XeTtOx0SZHZNLd+hdrn+PcKGQs0EG2TJTzQAOTCZTgDJCArahlCzLWSy8c2w59JRz7Q==} dependencies: @@ -6286,10 +6296,10 @@ packages: /@types/lodash/4.14.186: resolution: {integrity: sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==} + dev: true /@types/lodash/4.14.191: resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} - dev: true /@types/lossless-json/1.0.1: resolution: {integrity: sha512-zPE8kmpeL5/6L5gtTQHSOkAW/OSYYNTDRt6/2oEgLO1Zd3Rj5WVDoMloTtLJxQJhZGLGbL4pktKSh3NbzdaWdw==} @@ -6882,7 +6892,7 @@ packages: vite: ^3.0.0 || ^4.0.0 vue: ^2.7.0-0 dependencies: - vite: 4.0.4_sass@1.55.0+terser@5.16.1 + vite: 4.0.4_sass@1.57.1 vue: 2.7.14 dev: true @@ -7632,20 +7642,12 @@ packages: - supports-color dev: true - /anymatch/3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - /anymatch/3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true /app-root-dir/1.0.2: resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} @@ -8006,10 +8008,6 @@ packages: stream-exhaust: 1.0.2 dev: true - /async-each/1.0.3: - resolution: {integrity: sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==} - dev: true - /async-settle/1.0.0: resolution: {integrity: sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==} engines: {node: '>= 0.10'} @@ -8102,7 +8100,7 @@ packages: /axios-retry/3.3.1: resolution: {integrity: sha512-RohAUQTDxBSWLFEnoIG/6bvmy8l3TfpkclgStjl5MDCMBDgapAWCmr1r/9harQfWC8bzLC8job6UcL1A1Yc+/Q==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.20.7 is-retry-allowed: 2.2.0 dev: false @@ -8413,11 +8411,6 @@ packages: resolution: {integrity: sha512-uw4ra6Cv483Op/ebM0GBKKfxZlSmn6NgFRby5L3yGTlunLj53KQgndDlqy2WVFOwgvurocApYkSud0aO+mvrpQ==} dev: false - /binary-extensions/1.13.1: - resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==} - engines: {node: '>=0.10.0'} - dev: true - /binary-extensions/2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -8426,13 +8419,6 @@ packages: resolution: {integrity: sha512-rA2CrUl1+6yKrn+XgLs8Hdy18OER1UW146nM+ixzhQXDY+Bd3ySkyIJGwF2a4I45JwbvF1mDL/nWkqBwpOcdBA==} dev: false - /bindings/1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - dependencies: - file-uri-to-path: 1.0.0 - dev: true - optional: true - /bintrees/1.0.2: resolution: {integrity: sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==} dev: false @@ -9075,45 +9061,9 @@ packages: parse5-htmlparser2-tree-adapter: 6.0.1 dev: false - /chokidar/2.1.8: - resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} - deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies - dependencies: - anymatch: 2.0.0 - async-each: 1.0.3 - braces: 2.3.2 - glob-parent: 3.1.0 - inherits: 2.0.4 - is-binary-path: 1.0.1 - is-glob: 4.0.3 - normalize-path: 3.0.0 - path-is-absolute: 1.0.1 - readdirp: 2.2.1 - upath: 1.2.0 - optionalDependencies: - fsevents: 1.2.13 - transitivePeerDependencies: - - supports-color - dev: true - /chokidar/3.5.2: resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==} engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - dev: false - - /chokidar/3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -9124,7 +9074,6 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.2 - dev: true /chownr/1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -10229,14 +10178,14 @@ packages: /csstype/3.1.1: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} - /curlconverter/3.21.0: + /curlconverter/3.21.0_chokidar@3.5.2: resolution: {integrity: sha512-DXCnp1A/Xa69FujksUfdvWQFAnIn/C+4Wuv8t+UVdZkF/lY5bzj98GGKOGme7V/ckSHDLxE29Xp76sJ5Cpsp5A==} hasBin: true dependencies: '@curlconverter/yargs': 0.0.2 cookie: 0.4.2 jsesc: 3.0.2 - nunjucks: 3.2.3 + nunjucks: 3.2.3_chokidar@3.5.2 query-string: 7.1.1 string.prototype.startswith: 1.0.0 yamljs: 0.3.0 @@ -12092,11 +12041,6 @@ packages: token-types: 4.2.1 dev: false - /file-uri-to-path/1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - dev: true - optional: true - /file-uri-to-path/2.0.0: resolution: {integrity: sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==} engines: {node: '>= 6'} @@ -12105,7 +12049,7 @@ packages: /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: - minimatch: 5.1.0 + minimatch: 5.1.5 dev: false /fill-range/4.0.0: @@ -12347,7 +12291,7 @@ packages: '@babel/code-frame': 7.18.6 '@types/json-schema': 7.0.11 chalk: 4.1.2 - chokidar: 3.5.3 + chokidar: 3.5.2 cosmiconfig: 6.0.0 deepmerge: 4.2.2 fs-extra: 9.1.0 @@ -12516,17 +12460,6 @@ packages: /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /fsevents/1.2.13: - resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} - engines: {node: '>= 4.0'} - os: [darwin] - deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2. - dependencies: - bindings: 1.5.0 - nan: 2.17.0 - dev: true - optional: true - /fsevents/2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -12766,7 +12699,7 @@ packages: dependencies: anymatch: 2.0.0 async-done: 1.3.2 - chokidar: 2.1.8 + chokidar: 3.5.2 is-negated-glob: 1.0.0 just-debounce: 1.1.0 normalize-path: 3.0.0 @@ -13730,13 +13663,6 @@ packages: dependencies: has-bigints: 1.0.2 - /is-binary-path/1.0.1: - resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==} - engines: {node: '>=0.10.0'} - dependencies: - binary-extensions: 1.13.1 - dev: true - /is-binary-path/2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -14508,7 +14434,7 @@ packages: '@jest/types': 29.3.1 '@types/graceful-fs': 4.1.5 '@types/node': 16.18.12 - anymatch: 3.1.2 + anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 jest-regex-util: 29.2.0 @@ -16154,19 +16080,11 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimatch/5.1.0: - resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: false - /minimatch/5.1.5: resolution: {integrity: sha512-CI8wwdrll4ehjPAqs8TL8lBPyNnpZlQI02Wn8C1weNz/QbUbjh3OMxgMKSnvqfKFdLlks3EzHB9tO0BqGc3phQ==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - dev: true /minimist/1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} @@ -16495,6 +16413,7 @@ packages: /nan/2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} + dev: false optional: true /nanoclone/0.2.1: @@ -16773,7 +16692,7 @@ packages: engines: {node: '>=8.10.0'} hasBin: true dependencies: - chokidar: 3.5.3 + chokidar: 3.5.2 debug: 3.2.7_supports-color@5.5.0 ignore-by-default: 1.0.1 minimatch: 3.1.2 @@ -16904,7 +16823,7 @@ packages: engines: {node: '>=0.10.0'} dev: true - /nunjucks/3.2.3: + /nunjucks/3.2.3_chokidar@3.5.2: resolution: {integrity: sha512-psb6xjLj47+fE76JdZwskvwG4MYsQKXUtMsPh6U0YMvmyjRtKRFcxnlXGWglNybtNTNVmGdp94K62/+NjF5FDQ==} engines: {node: '>= 6.9.0'} hasBin: true @@ -16916,6 +16835,7 @@ packages: dependencies: a-sync-waterfall: 1.0.1 asap: 2.0.6 + chokidar: 3.5.2 commander: 5.1.0 dev: false @@ -18726,17 +18646,6 @@ packages: readable-stream: 3.6.0 dev: false - /readdirp/2.2.1: - resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} - engines: {node: '>=0.10'} - dependencies: - graceful-fs: 4.2.10 - micromatch: 3.1.10 - readable-stream: 2.3.7 - transitivePeerDependencies: - - supports-color - dev: true - /readdirp/3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -18849,7 +18758,6 @@ packages: /regenerator-runtime/0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: true /regenerator-runtime/0.13.9: resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} @@ -19425,7 +19333,7 @@ packages: engines: {node: '>=12.0.0'} hasBin: true dependencies: - chokidar: 3.5.3 + chokidar: 3.5.2 immutable: 4.1.0 source-map-js: 1.0.2 dev: true @@ -19435,7 +19343,7 @@ packages: engines: {node: '>=12.0.0'} hasBin: true dependencies: - chokidar: 3.5.3 + chokidar: 3.5.2 immutable: 4.2.2 source-map-js: 1.0.2 dev: true @@ -21257,7 +21165,7 @@ packages: resolution: {integrity: sha512-P4+0i+OB0hX17Ca+U6EJ4WZZ+OSupqW32VJ34N7g7+Ch+bwSx1AqYOvDdIVYEKymBh3dfG0t1qxbxPlBbtB1lQ==} hasBin: true dependencies: - chokidar: 3.5.3 + chokidar: 3.5.2 commander: 9.4.1 globby: 11.1.0 mylas: 2.1.13 @@ -21774,11 +21682,6 @@ packages: engines: {node: '>=8'} dev: true - /upath/1.2.0: - resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} - engines: {node: '>=4'} - dev: true - /update-browserslist-db/1.0.10_browserslist@4.21.4: resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true @@ -21793,12 +21696,12 @@ packages: /upper-case-first/2.0.2: resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} dependencies: - tslib: 2.4.0 + tslib: 2.4.1 /upper-case/2.0.2: resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} dependencies: - tslib: 2.4.0 + tslib: 2.4.1 dev: false /uri-js/4.4.1: @@ -22767,9 +22670,7 @@ packages: /watchpack-chokidar2/2.0.1: resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==} dependencies: - chokidar: 2.1.8 - transitivePeerDependencies: - - supports-color + chokidar: 3.5.2 dev: true optional: true @@ -22779,10 +22680,8 @@ packages: graceful-fs: 4.2.10 neo-async: 2.6.2 optionalDependencies: - chokidar: 3.5.3 + chokidar: 3.5.2 watchpack-chokidar2: 2.0.1 - transitivePeerDependencies: - - supports-color dev: true /watchpack/2.4.0: @@ -23472,7 +23371,7 @@ packages: engines: {node: '>=10'} dependencies: '@babel/runtime': 7.19.4 - '@types/lodash': 4.14.186 + '@types/lodash': 4.14.191 lodash: 4.17.21 lodash-es: 4.17.21 nanoclone: 0.2.1