feat: Migrate packages from lodash to lodash-es (no-changelog) (#5538)

This commit is contained in:
Alex Grozav 2023-02-23 17:16:05 +02:00 committed by GitHub
parent e2d7c1804f
commit f0695827f5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
91 changed files with 737 additions and 182 deletions

View file

@ -56,11 +56,6 @@
"jquery": "^3.4.1",
"jsonpath": "^1.1.1",
"lodash-es": "^4.17.21",
"lodash.camelcase": "^4.3.0",
"lodash.debounce": "^4.0.8",
"lodash.get": "^4.4.2",
"lodash.orderby": "^4.6.0",
"lodash.set": "^4.3.2",
"luxon": "^3.1.0",
"monaco-editor": "^0.33.0",
"n8n-design-system": "workspace:*",

View file

@ -52,7 +52,7 @@ import { deepCopy, INodeProperties, INodePropertyOptions } from 'n8n-workflow';
import { nodeHelpers } from '@/mixins/nodeHelpers';
import { get } from 'lodash';
import { get } from 'lodash-es';
import mixins from 'vue-typed-mixins';
import { Component } from 'vue';

View file

@ -265,7 +265,7 @@ import {
IWorkflowShortResponse,
} from '@/Interface';
import type { ExecutionStatus, IDataObject } from 'n8n-workflow';
import { range as _range } from 'lodash';
import { range as _range } from 'lodash-es';
import mixins from 'vue-typed-mixins';
import { mapStores } from 'pinia';
import { useUIStore } from '@/stores/ui';

View file

@ -48,7 +48,7 @@ import { showMessage } from '@/mixins/showMessage';
import { v4 as uuid } from 'uuid';
import { Route } from 'vue-router';
import { executionHelpers } from '@/mixins/executionsHelpers';
import { range as _range } from 'lodash';
import { range as _range } from 'lodash-es';
import { debounceHelper } from '@/mixins/debounce';
import { getNodeViewTab, NO_NETWORK_ERROR_CODE } from '@/utils';
import { workflowHelpers } from '@/mixins/workflowHelpers';

View file

@ -124,7 +124,7 @@ import {
isINodePropertyCollectionList,
} from 'n8n-workflow';
import { get } from 'lodash';
import { get } from 'lodash-es';
export default Vue.extend({
name: 'FixedCollectionParameter',

View file

@ -90,7 +90,7 @@ import { deepCopy, INodeParameters, INodeProperties } from 'n8n-workflow';
import CollectionParameter from '@/components/CollectionParameter.vue';
import ParameterInputFull from '@/components/ParameterInputFull.vue';
import { get } from 'lodash';
import { get } from 'lodash-es';
export default Vue.extend({
name: 'MultipleParameter',

View file

@ -38,7 +38,7 @@
<script lang="ts">
import Vue, { PropType } from 'vue';
import { get } from 'lodash';
import { get } from 'lodash-es';
import { INodeTypeDescription } from 'n8n-workflow';
import PanelDragButton from './PanelDragButton.vue';

View file

@ -189,7 +189,7 @@ import TitledList from '@/components/TitledList.vue';
import mixins from 'vue-typed-mixins';
import { get } from 'lodash';
import { get } from 'lodash-es';
import { getStyleTokenValue, getTriggerNodeServiceName } from '@/utils';
import {
IExecutionsSummary,

View file

@ -95,7 +95,7 @@ import {
onUnmounted,
nextTick,
} from 'vue';
import camelcase from 'lodash.camelcase';
import { camelCase } from 'lodash-es';
import { externalHooks } from '@/mixins/externalHooks';
import { INodeTypeDescription } from 'n8n-workflow';
import ItemIterator from './ItemIterator.vue';
@ -184,7 +184,7 @@ const activeSubcategoryTitle = computed<string>(() => {
if (!activeSubcategory.value || !activeSubcategory.value.properties) return '';
const subcategory = (activeSubcategory.value.properties as ISubcategoryItemProps).subcategory;
const subcategoryName = camelcase(subcategory);
const subcategoryName = camelCase(subcategory);
const titleLocaleKey = `nodeCreator.subcategoryTitles.${subcategoryName}` as BaseTextKey;
const nameLocaleKey = `nodeCreator.subcategoryNames.${subcategoryName}` as BaseTextKey;

View file

@ -14,14 +14,14 @@
<script setup lang="ts">
import { ISubcategoryItemProps } from '@/Interface';
import camelcase from 'lodash.camelcase';
import { camelCase } from 'lodash-es';
import { computed } from 'vue';
export interface Props {
item: ISubcategoryItemProps;
}
const props = defineProps<Props>();
const subcategoryName = computed(() => camelcase(props.item.subcategory));
const subcategoryName = computed(() => camelCase(props.item.subcategory));
</script>
<style lang="scss" module>

View file

@ -188,7 +188,7 @@ import ParameterInputList from '@/components/ParameterInputList.vue';
import NodeCredentials from '@/components/NodeCredentials.vue';
import NodeSettingsTabs from '@/components/NodeSettingsTabs.vue';
import NodeWebhooks from '@/components/NodeWebhooks.vue';
import { get, set, unset } from 'lodash';
import { get, set, unset } from 'lodash-es';
import { externalHooks } from '@/mixins/externalHooks';
import { nodeHelpers } from '@/mixins/nodeHelpers';

View file

@ -319,7 +319,7 @@
<script lang="ts">
/* eslint-disable prefer-spread */
import { get } from 'lodash';
import { get } from 'lodash-es';
import { INodeUi, INodeUpdatePropertiesInformation } from '@/Interface';
import {

View file

@ -124,7 +124,7 @@ import { workflowHelpers } from '@/mixins/workflowHelpers';
import ParameterInputFull from '@/components/ParameterInputFull.vue';
import ImportParameter from '@/components/ImportParameter.vue';
import { get, set } from 'lodash';
import { get, set } from 'lodash-es';
import mixins from 'vue-typed-mixins';
import { Component, PropType } from 'vue';

View file

@ -172,7 +172,7 @@
</template>
<script lang="ts">
import { get, set, unset } from 'lodash';
import { get, set, unset } from 'lodash-es';
import { mapStores } from 'pinia';
import mixins from 'vue-typed-mixins';
import { useLogStreamingStore } from '../../stores/logStreamingStore';

View file

@ -3,7 +3,7 @@
* defined on the component which uses this mixin
*/
import Vue from 'vue';
import { debounce } from 'lodash';
import { debounce } from 'lodash-es';
export const copyPaste = Vue.extend({
data() {

View file

@ -1,4 +1,4 @@
import { debounce } from 'lodash';
import { debounce } from 'lodash-es';
import Vue from 'vue';
export const debounceHelper = Vue.extend({

View file

@ -34,7 +34,7 @@ import {
import { restApi } from '@/mixins/restApi';
import { get } from 'lodash';
import { get } from 'lodash-es';
import mixins from 'vue-typed-mixins';
import { isObjectLiteral } from '@/utils';

View file

@ -48,7 +48,7 @@ import { restApi } from '@/mixins/restApi';
import { nodeHelpers } from '@/mixins/nodeHelpers';
import { showMessage } from '@/mixins/showMessage';
import { isEqual } from 'lodash';
import { isEqual } from 'lodash-es';
import mixins from 'vue-typed-mixins';
import { v4 as uuid } from 'uuid';

View file

@ -12,7 +12,7 @@ import {
} from '@jsplumb/core';
import { AnchorPlacement, ConnectorOptions, Geometry, PaintAxis } from '@jsplumb/common';
import { BezierSegment } from '@jsplumb/connector-bezier';
import { isArray } from 'lodash';
import { isArray } from 'lodash-es';
import { deepCopy } from 'n8n-workflow';
export interface N8nConnectorOptions extends ConnectorOptions {}

View file

@ -1,4 +1,4 @@
import { startCase } from 'lodash';
import { startCase } from 'lodash-es';
import { defineStore } from 'pinia';
import {
INodePropertyCollection,

View file

@ -16,11 +16,6 @@ const ignoreChunks = [
'@fontsource/open-sans',
'normalize-wheel',
'stream-browserify',
'lodash.camelcase',
'lodash.debounce',
'lodash.get',
'lodash.orderby',
'lodash.set',
];
const isScopedPackageToIgnore = (str: string) => /@codemirror\//.test(str);
@ -44,11 +39,6 @@ function renderChunks() {
const publicPath = process.env.VUE_APP_PUBLIC_PATH || '/';
const lodashAliases = ['orderBy', 'camelCase', 'cloneDeep', 'isEqual', 'startCase'].map((name) => ({
find: new RegExp(`^lodash.${name}$`, 'i'),
replacement: require.resolve(`lodash-es/${name}`),
}));
const { NODE_ENV } = process.env;
export default mergeConfig(
@ -78,9 +68,12 @@ export default mergeConfig(
find: /^n8n-design-system\//,
replacement: resolve(__dirname, '..', 'design-system', 'src') + '/',
},
...lodashAliases,
...['orderBy', 'camelCase', 'cloneDeep', 'isEqual', 'startCase'].map((name) => ({
find: new RegExp(`^lodash.${name}$`, 'i'),
replacement: require.resolve(`lodash-es/${name}`),
})),
{
find: /^lodash.(.+)$/,
find: /^lodash\.(.+)$/,
replacement: 'lodash-es/$1',
},
{

View file

@ -4,7 +4,8 @@ import type { IDataObject, ILoadOptionsFunctions } from 'n8n-workflow';
import type { OptionsWithUri } from 'request';
import { flow, omit } from 'lodash';
import flow from 'lodash.flow';
import omit from 'lodash.omit';
import type {
AllFieldsUi,

View file

@ -7,7 +7,7 @@ import type {
INodePropertyOptions,
} from 'n8n-workflow';
import { get } from 'lodash';
import get from 'lodash.get';
/**
* Make an API request to Asana

View file

@ -12,7 +12,7 @@ import { jsonParse, NodeOperationError } from 'n8n-workflow';
import { awsApiRequestSOAP } from './GenericFunctions';
import { get } from 'lodash';
import get from 'lodash.get';
export class AwsSnsTrigger implements INodeType {
description: INodeTypeDescription = {

View file

@ -1,4 +1,4 @@
import { get } from 'lodash';
import get from 'lodash.get';
import type {
IExecuteFunctions,

View file

@ -1,4 +1,4 @@
import { get } from 'lodash';
import get from 'lodash.get';
import { parseString } from 'xml2js';

View file

@ -1,4 +1,4 @@
import { get } from 'lodash';
import get from 'lodash.get';
import { parseString } from 'xml2js';

View file

@ -1,4 +1,4 @@
import { get } from 'lodash';
import get from 'lodash.get';
import { parseString } from 'xml2js';

View file

@ -10,7 +10,7 @@ import type {
import type { IDataObject, IHttpRequestOptions } from 'n8n-workflow';
import { NodeApiError } from 'n8n-workflow';
import { get } from 'lodash';
import get from 'lodash.get';
export async function awsApiRequest(
this: IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions | IWebhookFunctions,

View file

@ -15,7 +15,7 @@ import type {
import type { ICredentialDataDecryptedObject, IDataObject } from 'n8n-workflow';
import { NodeApiError } from 'n8n-workflow';
import { get } from 'lodash';
import get from 'lodash.get';
function getEndpointForService(
service: string,

View file

@ -33,7 +33,8 @@ import type {
} from './descriptions/MemberDescription';
import { memberFields, memberOperations } from './descriptions/MemberDescription';
import { isEmpty, partialRight } from 'lodash';
import isEmpty from 'lodash.isempty';
import partialRight from 'lodash.partialright';
export class Bitwarden implements INodeType {
description: INodeTypeDescription = {

View file

@ -10,7 +10,7 @@ import type {
} from 'n8n-workflow';
import { NodeApiError } from 'n8n-workflow';
import { upperFirst } from 'lodash';
import upperFirst from 'lodash.upperfirst';
import { createHash } from 'crypto';

View file

@ -1,6 +1,12 @@
import type { IDataObject, INodeExecutionData } from 'n8n-workflow';
import { difference, get, intersection, isEmpty, omit, set, union } from 'lodash';
import difference from 'lodash.difference';
import get from 'lodash.get';
import intersection from 'lodash.intersection';
import isEmpty from 'lodash.isempty';
import omit from 'lodash.omit';
import set from 'lodash.set';
import union from 'lodash.union';
import { fuzzyCompare } from '../../utils/utilities';
type PairToMatch = {

View file

@ -13,7 +13,8 @@ import type {
import type { ICredentialDataDecryptedObject, IDataObject } from 'n8n-workflow';
import { NodeApiError } from 'n8n-workflow';
import { flow, omit } from 'lodash';
import flow from 'lodash.flow';
import omit from 'lodash.omit';
import type {
AddressFixedCollection,

View file

@ -18,7 +18,7 @@ import { responderFields, respondersOperations } from './ResponderDescription';
import { jobFields, jobOperations } from './JobDescription';
import { upperFirst } from 'lodash';
import upperFirst from 'lodash.upperfirst';
import type { IJob } from './AnalyzerInterface';

View file

@ -1,4 +1,4 @@
import { set } from 'lodash';
import set from 'lodash.set';
import type { IExecuteFunctions } from 'n8n-core';

View file

@ -2,7 +2,7 @@ import type { IExecuteFunctions, IHookFunctions, ILoadOptionsFunctions } from 'n
import type { IDataObject, IHttpRequestMethods, IHttpRequestOptions } from 'n8n-workflow';
import { get } from 'lodash';
import get from 'lodash.get';
export async function customerIoApiRequest(
this: IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions,

View file

@ -9,7 +9,7 @@ import type {
} from 'n8n-workflow';
import { deepCopy, NodeOperationError } from 'n8n-workflow';
import { set } from 'lodash';
import set from 'lodash.set';
import moment from 'moment-timezone';

View file

@ -1,4 +1,6 @@
import { flow, sortBy, uniqBy } from 'lodash';
import flow from 'lodash.flow';
import sortBy from 'lodash.sortby';
import uniqBy from 'lodash.uniqby';
export type DocumentProperties = {
customProperty: Array<{ field: string; value: string }>;

View file

@ -14,7 +14,7 @@ import { documentFields, documentOperations, indexFields, indexOperations } from
import type { DocumentGetAllOptions, FieldsUiValues } from './types';
import { omit } from 'lodash';
import omit from 'lodash.omit';
export class Elasticsearch implements INodeType {
description: INodeTypeDescription = {

View file

@ -22,7 +22,8 @@ import { connect as imapConnect, getParts } from 'imap-simple';
import type { Source as ParserSource } from 'mailparser';
import { simpleParser } from 'mailparser';
import _ from 'lodash';
import isEmpty from 'lodash.isempty';
import find from 'lodash.find';
export async function parseRawEmail(
this: ITriggerFunctions,
@ -241,7 +242,7 @@ export class EmailReadImapV1 implements INodeType {
if (credentials.secure) {
tlsOptions.servername = credentials.host as string;
}
if (!_.isEmpty(tlsOptions)) {
if (!isEmpty(tlsOptions)) {
config.imap.tlsOptions = tlsOptions;
}
const conn = imapConnect(config).then(async (entry) => {
@ -385,7 +386,7 @@ export class EmailReadImapV1 implements INodeType {
) {
staticData.lastMessageUid = message.attributes.uid;
}
const part = _.find(message.parts, { which: '' });
const part = find(message.parts, { which: '' });
if (part === undefined) {
throw new NodeOperationError(this.getNode(), 'Email part could not be parsed.');
@ -474,7 +475,7 @@ export class EmailReadImapV1 implements INodeType {
) {
staticData.lastMessageUid = message.attributes.uid;
}
const part = _.find(message.parts, { which: 'TEXT' });
const part = find(message.parts, { which: 'TEXT' });
if (part === undefined) {
throw new NodeOperationError(this.getNode(), 'Email part could not be parsed.');
@ -569,7 +570,7 @@ export class EmailReadImapV1 implements INodeType {
tlsOptions.servername = credentials.host as string;
}
if (!_.isEmpty(tlsOptions)) {
if (!isEmpty(tlsOptions)) {
config.imap.tlsOptions = tlsOptions;
}

View file

@ -21,7 +21,8 @@ import { connect as imapConnect, getParts } from 'imap-simple';
import type { Source as ParserSource } from 'mailparser';
import { simpleParser } from 'mailparser';
import _ from 'lodash';
import isEmpty from 'lodash.isempty';
import find from 'lodash.find';
import type { ICredentialsDataImap } from '../../../credentials/Imap.credentials';
import { isCredentialsDataImap } from '../../../credentials/Imap.credentials';
@ -240,7 +241,7 @@ export class EmailReadImapV2 implements INodeType {
if (credentials.secure) {
tlsOptions.servername = credentials.host;
}
if (!_.isEmpty(tlsOptions)) {
if (!isEmpty(tlsOptions)) {
config.imap.tlsOptions = tlsOptions;
}
const connection = await imapConnect(config);
@ -393,7 +394,7 @@ export class EmailReadImapV2 implements INodeType {
) {
staticData.lastMessageUid = message.attributes.uid;
}
const part = _.find(message.parts, { which: '' });
const part = find(message.parts, { which: '' });
if (part === undefined) {
throw new NodeOperationError(this.getNode(), 'Email part could not be parsed.');
@ -482,7 +483,7 @@ export class EmailReadImapV2 implements INodeType {
) {
staticData.lastMessageUid = message.attributes.uid;
}
const part = _.find(message.parts, { which: 'TEXT' });
const part = find(message.parts, { which: 'TEXT' });
if (part === undefined) {
throw new NodeOperationError(this.getNode(), 'Email part could not be parsed.');
@ -580,7 +581,7 @@ export class EmailReadImapV2 implements INodeType {
tlsOptions.servername = credentials.host;
}
if (!_.isEmpty(tlsOptions)) {
if (!isEmpty(tlsOptions)) {
config.imap.tlsOptions = tlsOptions;
}

View file

@ -14,7 +14,7 @@ import { campaignFields, campaignOperations } from './CampaignDescription';
import { contactListFields, contactListOperations } from './ContactListDescription';
import { isEmpty } from 'lodash';
import isEmpty from 'lodash.isempty';
export class Emelia implements INodeType {
description: INodeTypeDescription = {

View file

@ -12,7 +12,7 @@ import type {
import type { OptionsWithUri } from 'request';
import { omit } from 'lodash';
import omit from 'lodash.omit';
export async function freshserviceApiRequest(
this: IExecuteFunctions | IHookFunctions | ILoadOptionsFunctions,

View file

@ -12,7 +12,7 @@ import type {
ViewsResponse,
} from './types';
import { omit } from 'lodash';
import omit from 'lodash.omit';
export async function freshworksCrmApiRequest(
this: IExecuteFunctions | ILoadOptionsFunctions,

View file

@ -36,7 +36,8 @@ import {
loadWebinarSessions,
} from './GenericFunctions';
import { isEmpty, omit } from 'lodash';
import isEmpty from 'lodash.isempty';
import omit from 'lodash.omit';
import moment from 'moment-timezone';

View file

@ -19,7 +19,7 @@ import jwt from 'jsonwebtoken';
import { DateTime } from 'luxon';
import { isEmpty } from 'lodash';
import isEmpty from 'lodash.isempty';
export interface IEmail {
from?: string;

View file

@ -29,7 +29,7 @@ import { labelFields, labelOperations } from './LabelDescription';
import { draftFields, draftOperations } from './DraftDescription';
import { isEmpty } from 'lodash';
import isEmpty from 'lodash.isempty';
const versionDescription: INodeTypeDescription = {
displayName: 'Gmail',

View file

@ -3,7 +3,8 @@ import { apiRequest } from './v2/transport';
import type { SheetDataRow, SheetRangeData } from './v2/helpers/GoogleSheets.types';
import * as XLSX from 'xlsx';
import { isEqual, zip } from 'lodash';
import isEqual from 'lodash.isequal';
import zip from 'lodash.zip';
export const BINARY_MIME_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';

View file

@ -7,7 +7,7 @@ import { googleApiRequest } from './GenericFunctions';
import { utils as xlsxUtils } from 'xlsx';
import { get } from 'lodash';
import get from 'lodash.get';
export interface ISheetOptions {
scope: string[];

View file

@ -3,7 +3,7 @@ import { NodeOperationError } from 'n8n-workflow';
import type { IExecuteFunctions, ILoadOptionsFunctions } from 'n8n-core';
import { apiRequest } from '../transport';
import { utils as xlsxUtils } from 'xlsx';
import { get } from 'lodash';
import get from 'lodash.get';
import type {
ILookupValues,
ISheetUpdateData,

View file

@ -10,7 +10,7 @@ import type {
import type { IDataObject } from 'n8n-workflow';
import { NodeApiError } from 'n8n-workflow';
import { get } from 'lodash';
import get from 'lodash.get';
export async function helpscoutApiRequest(
this: IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions | IHookFunctions,

View file

@ -10,7 +10,7 @@ import type {
import type { IDataObject, JsonObject } from 'n8n-workflow';
import { NodeApiError, NodeOperationError } from 'n8n-workflow';
import { get } from 'lodash';
import get from 'lodash.get';
export const eventID: { [key: string]: string } = {
create_client: '1',

View file

@ -11,7 +11,16 @@ import type {
} from 'n8n-workflow';
import { NodeOperationError } from 'n8n-workflow';
import { get, isEmpty, isEqual, isObject, lt, merge, pick, reduce, set, unset } from 'lodash';
import get from 'lodash.get';
import isEmpty from 'lodash.isempty';
import isEqual from 'lodash.isequal';
import isObject from 'lodash.isobject';
import lt from 'lodash.lt';
import merge from 'lodash.merge';
import pick from 'lodash.pick';
import reduce from 'lodash.reduce';
import set from 'lodash.set';
import unset from 'lodash.unset';
const compareItems = (
obj: INodeExecutionData,

View file

@ -7,7 +7,7 @@ import type {
} from 'n8n-workflow';
import { NodeOperationError } from 'n8n-workflow';
import { get } from 'lodash';
import get from 'lodash.get';
type AggregationType =
| 'append'

View file

@ -1,4 +1,4 @@
import { mergeWith } from 'lodash';
import mergeWith from 'lodash.mergewith';
import type { IExecuteFunctions } from 'n8n-core';

View file

@ -9,7 +9,21 @@ import type {
IWebhookFunctions,
} from 'n8n-workflow';
import _ from 'lodash';
import set from 'lodash.set';
import concat from 'lodash.concat';
import split from 'lodash.split';
import every from 'lodash.every';
import toString from 'lodash.tostring';
import toNumber from 'lodash.tonumber';
import isString from 'lodash.isstring';
import compact from 'lodash.compact';
import first from 'lodash.first';
import last from 'lodash.last';
import clone from 'lodash.clone';
import some from 'lodash.some';
import isArray from 'lodash.isarray';
import trim from 'lodash.trim';
import escapeRegExp from 'lodash.escaperegexp';
export async function koBoToolboxApiRequest(
this: IExecuteFunctions | IWebhookFunctions | IHookFunctions | ILoadOptionsFunctions,
@ -21,7 +35,7 @@ export async function koBoToolboxApiRequest(
const returnAll = !!option.returnAll;
if (returnAll) {
// Override manual pagination options
_.set(option, 'qs.limit', 3000);
set(option, 'qs.limit', 3000);
// Don't pass this custom param to helpers.httpRequest
delete option.returnAll;
}
@ -49,7 +63,7 @@ export async function koBoToolboxApiRequest(
options,
);
// Append or set results
results = response.results ? _.concat(results || [], response.results) : response;
results = response.results ? concat(results || [], response.results) : response;
if (returnAll && response.next) {
options.url = response.next;
} else {
@ -76,30 +90,30 @@ export async function koBoToolboxRawRequest(
function parseGeoPoint(geoPoint: string): null | number[] {
// Check if it looks like a "lat lon z precision" flat string e.g. "-1.931161 30.079811 0 0" (lat, lon, elevation, precision)
// NOTE: we are discarding the elevation and precision values since they're not (well) supported in GeoJSON
const coordinates = _.split(geoPoint, ' ');
const coordinates = split(geoPoint, ' ');
if (
coordinates.length >= 2 &&
_.every(coordinates, (coord) => coord && /^-?\d+(?:\.\d+)?$/.test(_.toString(coord)))
every(coordinates, (coord) => coord && /^-?\d+(?:\.\d+)?$/.test(toString(coord)))
) {
// NOTE: GeoJSON uses lon, lat, while most common systems use lat, lon order!
return [_.toNumber(coordinates[1]), _.toNumber(coordinates[0])];
return [toNumber(coordinates[1]), toNumber(coordinates[0])];
}
return null;
}
export function parseStringList(value: string): string[] {
return _.split(_.toString(value), /[\s,]+/);
return split(toString(value), /[\s,]+/);
}
const matchWildcard = (value: string, pattern: string): boolean => {
const regex = new RegExp(`^${_.escapeRegExp(pattern).replace('\\*', '.*')}$`);
const regex = new RegExp(`^${escapeRegExp(pattern).replace('\\*', '.*')}$`);
return regex.test(value);
};
const formatValue = (value: any, format: string): any => {
if (_.isString(value)) {
if (isString(value)) {
// Sanitize value
value = _.toString(value);
value = toString(value);
// Parse geoPoints
const geoPoint = parseGeoPoint(value);
@ -114,11 +128,11 @@ const formatValue = (value: any, format: string): any => {
const points = value.split(';');
if (points.length >= 2 && /^[-\d\.\s;]+$/.test(value)) {
// Using the GeoJSON format as per https://geojson.org/
const coordinates = _.compact(points.map(parseGeoPoint));
const coordinates = compact(points.map(parseGeoPoint));
// Only return if all values are properly parsed
if (coordinates.length === points.length) {
// If the shape is closed, declare it as Polygon, otherwise as LineString
if (_.first(points) === _.last(points)) {
if (first(points) === last(points)) {
return {
type: 'Polygon',
coordinates: [coordinates],
@ -131,12 +145,12 @@ const formatValue = (value: any, format: string): any => {
// Parse numbers
if ('number' === format) {
return _.toNumber(value);
return toNumber(value);
}
// Split multi-select
if ('multiSelect' === format) {
return _.split(_.toString(value), ' ');
return split(toString(value), ' ');
}
}
@ -152,29 +166,29 @@ export function formatSubmission(
const response = {} as IDataObject;
for (const key of Object.keys(submission)) {
let value = _.clone(submission[key]);
let value = clone(submission[key]);
// Sanitize key names: split by group, trim _
const sanitizedKey = key
.split('/')
.map((k) => _.trim(k, ' _'))
.map((k) => trim(k, ' _'))
.join('.');
const leafKey = sanitizedKey.split('.').pop() || '';
let format = 'string';
if (_.some(numberMasks, (mask) => matchWildcard(leafKey, mask))) {
if (some(numberMasks, (mask) => matchWildcard(leafKey, mask))) {
format = 'number';
}
if (_.some(selectMasks, (mask) => matchWildcard(leafKey, mask))) {
if (some(selectMasks, (mask) => matchWildcard(leafKey, mask))) {
format = 'multiSelect';
}
value = formatValue(value, format);
_.set(response, sanitizedKey, value);
set(response, sanitizedKey, value);
}
// Reformat _geolocation
if (
_.isArray(response.geolocation) &&
isArray(response.geolocation) &&
response.geolocation.length === 2 &&
response.geolocation[0] &&
response.geolocation[1]
@ -210,7 +224,7 @@ export async function downloadAttachments(
for (const [index, attachment] of attachmentList.entries()) {
// look for the question name linked to this attachment
const fileName = attachment.filename;
const sanitizedFileName = _.toString(fileName).replace(/_[^_]+(?=\.\w+)/, ''); // strip suffix
const sanitizedFileName = toString(fileName).replace(/_[^_]+(?=\.\w+)/, ''); // strip suffix
let relatedQuestion = null;
if ('question' === options.binaryNamingScheme) {
@ -218,7 +232,7 @@ export async function downloadAttachments(
// The logic to map attachments to question is sometimes ambiguous:
// - If the attachment is linked to a question, the question's value is the same as the attachment's filename (with spaces replaced by underscores)
// - BUT sometimes the attachment's filename has an extra suffix, e.g. "My_Picture_0OdlaKJ.jpg", would map to the question "picture": "My Picture.jpg"
const sanitizedQuestionValue = _.toString(submission[question]).replace(/\s/g, '_'); // replace spaces with underscores
const sanitizedQuestionValue = toString(submission[question]).replace(/\s/g, '_'); // replace spaces with underscores
if (sanitizedFileName === sanitizedQuestionValue) {
relatedQuestion = question;
// Just use the first match...

View file

@ -23,7 +23,8 @@ import {
import { lemlistApiRequest, lemlistApiRequestAllItems } from './GenericFunctions';
import { isEmpty, omit } from 'lodash';
import isEmpty from 'lodash.isempty';
import omit from 'lodash.omit';
export class Lemlist implements INodeType {
description: INodeTypeDescription = {

View file

@ -2,7 +2,7 @@ import type { OptionsWithUri } from 'request';
import type { IExecuteFunctions, IHookFunctions, ILoadOptionsFunctions } from 'n8n-core';
import _ from 'lodash';
import map from 'lodash.map';
import { NodeApiError } from 'n8n-workflow';
export async function mandrillApiRequest(
@ -39,7 +39,7 @@ export function getToEmailArray(toEmail: string): any {
let toEmailArray;
if (toEmail.split(',').length > 0) {
const array = toEmail.split(',');
toEmailArray = _.map(array, (email) => {
toEmailArray = map(array, (email) => {
return {
email,
type: 'to',

View file

@ -20,7 +20,8 @@ import {
import moment from 'moment';
import _ from 'lodash';
import map from 'lodash.map';
import isEmpty from 'lodash.isempty';
interface Attachments {
type: string;
@ -792,9 +793,9 @@ export class Mandrill implements INodeType {
);
} else {
const headersUi = this.getNodeParameter('headersUi', i) as IDataObject;
if (!_.isEmpty(headersUi)) {
if (!isEmpty(headersUi)) {
// @ts-ignore
body.message.headers = _.map(headersUi.headersValues, (o) => {
body.message.headers = map(headersUi.headersValues, (o) => {
const aux: IDataObject = {};
// @ts-ignore
aux[o.name] = o.value;
@ -803,9 +804,9 @@ export class Mandrill implements INodeType {
}
const metadataUi = this.getNodeParameter('metadataUi', i) as IDataObject;
if (!_.isEmpty(metadataUi)) {
if (!isEmpty(metadataUi)) {
// @ts-ignore
body.message.metadata = _.map(metadataUi.metadataValues, (o: IDataObject) => {
body.message.metadata = map(metadataUi.metadataValues, (o: IDataObject) => {
const aux: IDataObject = {};
aux[o.name as string] = o.value;
return aux;
@ -813,9 +814,9 @@ export class Mandrill implements INodeType {
}
const mergeVarsUi = this.getNodeParameter('mergeVarsUi', i) as IDataObject;
if (!_.isEmpty(mergeVarsUi)) {
if (!isEmpty(mergeVarsUi)) {
// @ts-ignore
body.message.global_merge_vars = _.map(
body.message.global_merge_vars = map(
// @ts-ignore
mergeVarsUi.mergeVarsValues,
(o: IDataObject) => {
@ -830,13 +831,13 @@ export class Mandrill implements INodeType {
const attachmentsUi = this.getNodeParameter('attachmentsUi', i) as IDataObject;
let attachmentsBinary: Attachments[] = [],
attachmentsValues: Attachments[] = [];
if (!_.isEmpty(attachmentsUi)) {
if (!isEmpty(attachmentsUi)) {
if (
attachmentsUi.hasOwnProperty('attachmentsValues') &&
!_.isEmpty(attachmentsUi.attachmentsValues)
!isEmpty(attachmentsUi.attachmentsValues)
) {
// @ts-ignore
attachmentsValues = _.map(attachmentsUi.attachmentsValues, (o: IDataObject) => {
attachmentsValues = map(attachmentsUi.attachmentsValues, (o: IDataObject) => {
const aux: IDataObject = {};
// @ts-ignore
aux.name = o.name;
@ -848,11 +849,11 @@ export class Mandrill implements INodeType {
if (
attachmentsUi.hasOwnProperty('attachmentsBinary') &&
!_.isEmpty(attachmentsUi.attachmentsBinary) &&
!isEmpty(attachmentsUi.attachmentsBinary) &&
items[i].binary
) {
// @ts-ignore
attachmentsBinary = _.map(attachmentsUi.attachmentsBinary, (o: IDataObject) => {
attachmentsBinary = map(attachmentsUi.attachmentsBinary, (o: IDataObject) => {
if (items[i].binary!.hasOwnProperty(o.property as string)) {
const aux: IDataObject = {};
aux.name = items[i].binary![o.property as string].fileName || 'unknown';

View file

@ -13,7 +13,8 @@ import { Converter } from 'showdown';
import { NodeHtmlMarkdown } from 'node-html-markdown';
import { isEmpty, set } from 'lodash';
import isEmpty from 'lodash.isempty';
import set from 'lodash.set';
export class Markdown implements INodeType {
description: INodeTypeDescription = {

View file

@ -5,7 +5,6 @@ import { NodeApiError, NodeOperationError } from 'n8n-workflow';
import type { IExecuteFunctions, IExecuteSingleFunctions, ILoadOptionsFunctions } from 'n8n-core';
import _ from 'lodash';
import { v4 as uuid } from 'uuid';
export async function matrixApiRequest(

View file

@ -1,5 +1,5 @@
/* eslint-disable n8n-nodes-base/node-filename-against-convention */
import { get } from 'lodash';
import get from 'lodash.get';
import type { IExecuteFunctions } from 'n8n-core';

View file

@ -6,7 +6,11 @@ import type {
IPairedItemData,
} from 'n8n-workflow';
import { assign, assignWith, get, merge, mergeWith } from 'lodash';
import assign from 'lodash.assign';
import assignWith from 'lodash.assignwith';
import get from 'lodash.get';
import merge from 'lodash.merge';
import mergeWith from 'lodash.mergewith';
import { fuzzyCompare } from '../../../utils/utilities';
type PairToMatch = {

View file

@ -1,7 +1,7 @@
/* eslint-disable n8n-nodes-base/node-filename-against-convention */
import type { IExecuteFunctions } from 'n8n-core';
import { merge } from 'lodash';
import merge from 'lodash.merge';
import type {
IDataObject,

View file

@ -5,7 +5,7 @@ import type { IExecuteFunctions, ILoadOptionsFunctions } from 'n8n-core';
import type { IDataObject, IHookFunctions, IWebhookFunctions } from 'n8n-workflow';
import { NodeApiError } from 'n8n-workflow';
import { get } from 'lodash';
import get from 'lodash.get';
export async function mondayComApiRequest(
this: IExecuteFunctions | IWebhookFunctions | IHookFunctions | ILoadOptionsFunctions,

View file

@ -9,7 +9,8 @@ import type {
IMongoParametricCredentials,
} from './mongoDb.types';
import { get, set } from 'lodash';
import get from 'lodash.get';
import set from 'lodash.set';
/**
* Standard way of building the MongoDB connection string, unless overridden with a provided string

View file

@ -1,4 +1,6 @@
import { get, set, unset } from 'lodash';
import get from 'lodash.get';
import set from 'lodash.set';
import unset from 'lodash.unset';
import prettyBytes from 'pretty-bytes';
import type { IExecuteFunctions } from 'n8n-core';

View file

@ -12,7 +12,8 @@ import type { CustomField, GeneralAddress, Ref } from './descriptions/Shared.int
import { capitalCase } from 'change-case';
import { omit, pickBy } from 'lodash';
import omit from 'lodash.omit';
import pickBy from 'lodash.pickby';
import type { OptionsWithUri } from 'request';

View file

@ -48,7 +48,7 @@ import {
import { capitalCase } from 'change-case';
import { isEmpty } from 'lodash';
import isEmpty from 'lodash.isempty';
import type { QuickBooksOAuth2Credentials, TransactionFields } from './types';

View file

@ -9,7 +9,8 @@ import type {
} from 'n8n-workflow';
import { NodeOperationError } from 'n8n-workflow';
import { isEmpty, omit } from 'lodash';
import isEmpty from 'lodash.isempty';
import omit from 'lodash.omit';
import { raindropApiRequest } from './GenericFunctions';

View file

@ -12,7 +12,7 @@ import type {
} from 'n8n-workflow';
import { NodeOperationError } from 'n8n-workflow';
import { set } from 'lodash';
import set from 'lodash.set';
import redis from 'redis';
import util from 'util';

View file

@ -7,7 +7,9 @@ import type {
} from 'n8n-workflow';
import { deepCopy } from 'n8n-workflow';
import { get, set, unset } from 'lodash';
import get from 'lodash.get';
import set from 'lodash.set';
import unset from 'lodash.unset';
interface IRenameKey {
currentKey: string;

View file

@ -1,7 +1,7 @@
import type { Request } from 'aws4';
import { sign } from 'aws4';
import { get } from 'lodash';
import get from 'lodash.get';
import type { OptionsWithUri } from 'request';

View file

@ -19,8 +19,6 @@ import type {
IRowObject,
} from './Interfaces';
import _ from 'lodash';
const userBaseUri = (uri?: string) => {
if (uri === undefined) {
return uri;

View file

@ -7,7 +7,7 @@ import type {
} from 'n8n-workflow';
import { deepCopy } from 'n8n-workflow';
import { set } from 'lodash';
import set from 'lodash.set';
export class Set implements INodeType {
description: INodeTypeDescription = {

View file

@ -5,7 +5,7 @@ import type { IExecuteFunctions, IExecuteSingleFunctions, ILoadOptionsFunctions
import type { IDataObject, IOAuth2Options, JsonObject } from 'n8n-workflow';
import { NodeApiError, NodeOperationError } from 'n8n-workflow';
import _ from 'lodash';
import get from 'lodash.get';
export async function slackApiRequest(
this: IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions,
@ -99,7 +99,7 @@ export async function slackApiRequestAllItems(
}
do {
responseData = await slackApiRequest.call(this, method, endpoint, body, query);
query.cursor = _.get(responseData, 'response_metadata.next_cursor');
query.cursor = get(responseData, 'response_metadata.next_cursor');
query.page++;
returnData.push.apply(returnData, responseData[propertyName]);
} while (

View file

@ -4,7 +4,7 @@ import type { IDataObject, IOAuth2Options } from 'n8n-workflow';
import { NodeOperationError } from 'n8n-workflow';
import _ from 'lodash';
import get from 'lodash.get';
export async function slackApiRequest(
this: IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions,
@ -105,7 +105,7 @@ export async function slackApiRequestAllItems(
}
do {
responseData = await slackApiRequest.call(this, method, endpoint, body, query);
query.cursor = _.get(responseData, 'response_metadata.next_cursor');
query.cursor = get(responseData, 'response_metadata.next_cursor');
query.page++;
returnData.push.apply(
returnData,

View file

@ -5,7 +5,7 @@ import type { IExecuteFunctions, IHookFunctions } from 'n8n-core';
import type { IDataObject } from 'n8n-workflow';
import { NodeApiError } from 'n8n-workflow';
import { get } from 'lodash';
import get from 'lodash.get';
/**
* Make an API request to Spotify

View file

@ -10,7 +10,7 @@ import type {
} from 'n8n-workflow';
import { NodeOperationError } from 'n8n-workflow';
import { isEmpty } from 'lodash';
import isEmpty from 'lodash.isempty';
import {
adjustChargeFields,

View file

@ -1,6 +1,8 @@
import type { IExecuteFunctions, IHookFunctions } from 'n8n-core';
import { flow, isEmpty, omit } from 'lodash';
import flow from 'lodash.flow';
import isEmpty from 'lodash.isempty';
import omit from 'lodash.omit';
import type { IDataObject, ILoadOptionsFunctions, INodePropertyOptions } from 'n8n-workflow';

View file

@ -36,7 +36,7 @@ import {
theHiveApiRequest,
} from './GenericFunctions';
import { set } from 'lodash';
import set from 'lodash.set';
export class TheHive implements INodeType {
description: INodeTypeDescription = {

View file

@ -10,7 +10,7 @@ import type {
import type { IDataObject } from 'n8n-workflow';
import { NodeApiError } from 'n8n-workflow';
import { get } from 'lodash';
import get from 'lodash.get';
export async function travisciApiRequest(
this: IHookFunctions | IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions,

View file

@ -9,7 +9,7 @@ import type {
import type { IDataObject } from 'n8n-workflow';
import { get } from 'lodash';
import get from 'lodash.get';
export async function venafiApiRequest(
this: IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions | IPollFunctions,

View file

@ -5,7 +5,7 @@ import type { IExecuteFunctions, IExecuteSingleFunctions, ILoadOptionsFunctions
import type { IDataObject, IHookFunctions, JsonObject } from 'n8n-workflow';
import { NodeApiError } from 'n8n-workflow';
import { get } from 'lodash';
import get from 'lodash.get';
import * as nacl_factory from 'js-nacl';

View file

@ -33,7 +33,7 @@ import type {
} from './GenericFunctions';
import { wiseApiRequest } from './GenericFunctions';
import { omit } from 'lodash';
import omit from 'lodash.omit';
import moment from 'moment-timezone';

View file

@ -16,7 +16,7 @@ import { createHash } from 'crypto';
import { snakeCase } from 'change-case';
import { omit } from 'lodash';
import omit from 'lodash.omit';
export async function woocommerceApiRequest(
this:

View file

@ -5,7 +5,7 @@ import { NodeApiError, NodeOperationError } from 'n8n-workflow';
import type { OptionsWithUri } from 'request';
import { flow } from 'lodash';
import flow from 'lodash.flow';
import type { Zammad } from './types';

View file

@ -5,7 +5,8 @@ import type { IExecuteFunctions, IHookFunctions } from 'n8n-core';
import type { IDataObject, ILoadOptionsFunctions } from 'n8n-workflow';
import { NodeApiError, NodeOperationError } from 'n8n-workflow';
import { flow, sortBy } from 'lodash';
import flow from 'lodash.flow';
import sortBy from 'lodash.sortby';
import type {
AllFields,

View file

@ -739,7 +739,47 @@
"@types/gm": "^1.25.0",
"@types/imap-simple": "^4.2.0",
"@types/jsonwebtoken": "^9.0.1",
"@types/lodash.set": "^4.3.6",
"@types/lodash": "^4.14.191",
"@types/lodash.assign": "^4",
"@types/lodash.assignwith": "^4",
"@types/lodash.clone": "^4",
"@types/lodash.compact": "^3",
"@types/lodash.concat": "^4",
"@types/lodash.difference": "^4",
"@types/lodash.escaperegexp": "^4",
"@types/lodash.every": "^4",
"@types/lodash.find": "^4",
"@types/lodash.first": "^3",
"@types/lodash.flow": "^3",
"@types/lodash.get": "^4",
"@types/lodash.intersection": "^4",
"@types/lodash.isarray": "^4",
"@types/lodash.isempty": "^4",
"@types/lodash.isequal": "^4",
"@types/lodash.isobject": "^3",
"@types/lodash.isstring": "^4",
"@types/lodash.last": "^3",
"@types/lodash.lt": "^3",
"@types/lodash.map": "^4",
"@types/lodash.merge": "^4",
"@types/lodash.mergewith": "^4",
"@types/lodash.omit": "^4",
"@types/lodash.partialright": "^4",
"@types/lodash.pick": "^4",
"@types/lodash.pickby": "^4",
"@types/lodash.reduce": "^4",
"@types/lodash.set": "^4",
"@types/lodash.some": "^4",
"@types/lodash.sortby": "^4",
"@types/lodash.split": "^4",
"@types/lodash.tonumber": "^4",
"@types/lodash.tostring": "^4",
"@types/lodash.trim": "^4",
"@types/lodash.union": "^4",
"@types/lodash.uniqby": "^4",
"@types/lodash.unset": "^4",
"@types/lodash.upperfirst": "^4",
"@types/lodash.zip": "^4",
"@types/lossless-json": "^1.0.0",
"@types/mailparser": "^2.7.3",
"@types/mime-types": "^2.1.0",
@ -785,9 +825,46 @@
"js-nacl": "^1.4.0",
"jsonwebtoken": "^9.0.0",
"kafkajs": "^1.14.0",
"lodash.get": "^4.4.2",
"lodash.set": "^4.3.2",
"lodash.unset": "^4.5.2",
"lodash.assign": "^4",
"lodash.assignwith": "^4",
"lodash.clone": "^4",
"lodash.compact": "^3",
"lodash.concat": "^4",
"lodash.difference": "^4",
"lodash.escaperegexp": "^4",
"lodash.every": "^4",
"lodash.find": "^4",
"lodash.first": "^3",
"lodash.flow": "^3",
"lodash.get": "^4",
"lodash.intersection": "^4",
"lodash.isarray": "^4",
"lodash.isempty": "^4",
"lodash.isequal": "^4",
"lodash.isobject": "^3",
"lodash.isstring": "^4",
"lodash.last": "^3",
"lodash.lt": "^3",
"lodash.map": "^4",
"lodash.merge": "^4",
"lodash.mergewith": "^4",
"lodash.omit": "^4",
"lodash.partialright": "^4",
"lodash.pick": "^4",
"lodash.pickby": "^4",
"lodash.reduce": "^4",
"lodash.set": "^4",
"lodash.some": "^4",
"lodash.sortby": "^4",
"lodash.split": "^4",
"lodash.tonumber": "^4",
"lodash.tostring": "^4",
"lodash.trim": "^4",
"lodash.union": "^4",
"lodash.uniqby": "^4",
"lodash.unset": "^4",
"lodash.upperfirst": "^4",
"lodash.zip": "^4",
"lossless-json": "^1.0.4",
"luxon": "^3.1.0",
"mailparser": "^3.2.0",

View file

@ -594,11 +594,6 @@ importers:
jshint: ^2.9.7
jsonpath: ^1.1.1
lodash-es: ^4.17.21
lodash.camelcase: ^4.3.0
lodash.debounce: ^4.0.8
lodash.get: ^4.4.2
lodash.orderby: ^4.6.0
lodash.set: ^4.3.2
luxon: ^3.1.0
monaco-editor: ^0.33.0
n8n-design-system: workspace:*
@ -662,11 +657,6 @@ importers:
jquery: 3.6.1
jsonpath: 1.1.1
lodash-es: 4.17.21
lodash.camelcase: 4.3.0
lodash.debounce: 4.0.8
lodash.get: 4.4.2
lodash.orderby: 4.6.0
lodash.set: 4.3.2
luxon: 3.1.1
monaco-editor: 0.33.0
n8n-design-system: link:../design-system
@ -772,7 +762,47 @@ importers:
'@types/imap-simple': ^4.2.0
'@types/js-nacl': ^1.3.0
'@types/jsonwebtoken': ^9.0.1
'@types/lodash.set': ^4.3.6
'@types/lodash': ^4.14.191
'@types/lodash.assign': ^4
'@types/lodash.assignwith': ^4
'@types/lodash.clone': ^4
'@types/lodash.compact': ^3
'@types/lodash.concat': ^4
'@types/lodash.difference': ^4
'@types/lodash.escaperegexp': ^4
'@types/lodash.every': ^4
'@types/lodash.find': ^4
'@types/lodash.first': ^3
'@types/lodash.flow': ^3
'@types/lodash.get': ^4
'@types/lodash.intersection': ^4
'@types/lodash.isarray': ^4
'@types/lodash.isempty': ^4
'@types/lodash.isequal': ^4
'@types/lodash.isobject': ^3
'@types/lodash.isstring': ^4
'@types/lodash.last': ^3
'@types/lodash.lt': ^3
'@types/lodash.map': ^4
'@types/lodash.merge': ^4
'@types/lodash.mergewith': ^4
'@types/lodash.omit': ^4
'@types/lodash.partialright': ^4
'@types/lodash.pick': ^4
'@types/lodash.pickby': ^4
'@types/lodash.reduce': ^4
'@types/lodash.set': ^4
'@types/lodash.some': ^4
'@types/lodash.sortby': ^4
'@types/lodash.split': ^4
'@types/lodash.tonumber': ^4
'@types/lodash.tostring': ^4
'@types/lodash.trim': ^4
'@types/lodash.union': ^4
'@types/lodash.uniqby': ^4
'@types/lodash.unset': ^4
'@types/lodash.upperfirst': ^4
'@types/lodash.zip': ^4
'@types/lossless-json': ^1.0.0
'@types/mailparser': ^2.7.3
'@types/mime-types': ^2.1.0
@ -813,9 +843,46 @@ importers:
js-nacl: ^1.4.0
jsonwebtoken: 9.0.0
kafkajs: ^1.14.0
lodash.get: ^4.4.2
lodash.set: ^4.3.2
lodash.unset: ^4.5.2
lodash.assign: ^4
lodash.assignwith: ^4
lodash.clone: ^4
lodash.compact: ^3
lodash.concat: ^4
lodash.difference: ^4
lodash.escaperegexp: ^4
lodash.every: ^4
lodash.find: ^4
lodash.first: ^3
lodash.flow: ^3
lodash.get: ^4
lodash.intersection: ^4
lodash.isarray: ^4
lodash.isempty: ^4
lodash.isequal: ^4
lodash.isobject: ^3
lodash.isstring: ^4
lodash.last: ^3
lodash.lt: ^3
lodash.map: ^4
lodash.merge: ^4
lodash.mergewith: ^4
lodash.omit: ^4
lodash.partialright: ^4
lodash.pick: ^4
lodash.pickby: ^4
lodash.reduce: ^4
lodash.set: ^4
lodash.some: ^4
lodash.sortby: ^4
lodash.split: ^4
lodash.tonumber: ^4
lodash.tostring: ^4
lodash.trim: ^4
lodash.union: ^4
lodash.uniqby: ^4
lodash.unset: ^4
lodash.upperfirst: ^4
lodash.zip: ^4
lossless-json: ^1.0.4
luxon: ^3.1.0
mailparser: ^3.2.0
@ -873,9 +940,46 @@ importers:
js-nacl: 1.4.0
jsonwebtoken: 9.0.0
kafkajs: 1.16.0
lodash.assign: 4.2.0
lodash.assignwith: 4.2.0
lodash.clone: 4.5.0
lodash.compact: 3.0.1
lodash.concat: 4.5.0
lodash.difference: 4.5.0
lodash.escaperegexp: 4.1.2
lodash.every: 4.6.0
lodash.find: 4.6.0
lodash.first: 3.0.0
lodash.flow: 3.5.0
lodash.get: 4.4.2
lodash.intersection: 4.4.0
lodash.isarray: 4.0.0
lodash.isempty: 4.4.0
lodash.isequal: 4.5.0
lodash.isobject: 3.0.2
lodash.isstring: 4.0.1
lodash.last: 3.0.0
lodash.lt: 3.9.2
lodash.map: 4.6.0
lodash.merge: 4.6.2
lodash.mergewith: 4.6.2
lodash.omit: 4.5.0
lodash.partialright: 4.2.1
lodash.pick: 4.4.0
lodash.pickby: 4.6.0
lodash.reduce: 4.6.0
lodash.set: 4.3.2
lodash.some: 4.6.0
lodash.sortby: 4.7.0
lodash.split: 4.4.2
lodash.tonumber: 4.0.3
lodash.tostring: 4.1.4
lodash.trim: 4.5.1
lodash.union: 4.6.0
lodash.uniqby: 4.7.0
lodash.unset: 4.5.2
lodash.upperfirst: 4.3.1
lodash.zip: 4.2.0
lossless-json: 1.0.5
luxon: 3.1.1
mailparser: 3.5.0
@ -919,7 +1023,47 @@ importers:
'@types/gm': 1.25.0
'@types/imap-simple': 4.2.5
'@types/jsonwebtoken': 9.0.1
'@types/lodash': 4.14.191
'@types/lodash.assign': 4.2.7
'@types/lodash.assignwith': 4.2.7
'@types/lodash.clone': 4.5.7
'@types/lodash.compact': 3.0.7
'@types/lodash.concat': 4.5.7
'@types/lodash.difference': 4.5.7
'@types/lodash.escaperegexp': 4.1.7
'@types/lodash.every': 4.6.7
'@types/lodash.find': 4.6.7
'@types/lodash.first': 3.0.7
'@types/lodash.flow': 3.5.7
'@types/lodash.get': 4.4.7
'@types/lodash.intersection': 4.4.7
'@types/lodash.isarray': 4.0.7
'@types/lodash.isempty': 4.4.7
'@types/lodash.isequal': 4.5.6
'@types/lodash.isobject': 3.0.7
'@types/lodash.isstring': 4.0.7
'@types/lodash.last': 3.0.7
'@types/lodash.lt': 3.9.7
'@types/lodash.map': 4.6.13
'@types/lodash.merge': 4.6.7
'@types/lodash.mergewith': 4.6.7
'@types/lodash.omit': 4.5.7
'@types/lodash.partialright': 4.2.7
'@types/lodash.pick': 4.4.7
'@types/lodash.pickby': 4.6.7
'@types/lodash.reduce': 4.6.7
'@types/lodash.set': 4.3.7
'@types/lodash.some': 4.6.7
'@types/lodash.sortby': 4.7.7
'@types/lodash.split': 4.4.7
'@types/lodash.tonumber': 4.0.7
'@types/lodash.tostring': 4.1.7
'@types/lodash.trim': 4.5.7
'@types/lodash.union': 4.6.7
'@types/lodash.uniqby': 4.7.7
'@types/lodash.unset': 4.5.7
'@types/lodash.upperfirst': 4.3.7
'@types/lodash.zip': 4.2.7
'@types/lossless-json': 1.0.1
'@types/mailparser': 2.7.4
'@types/mime-types': 2.1.1
@ -2911,7 +3055,7 @@ packages:
debug: 4.3.4
espree: 9.4.0
globals: 13.17.0
ignore: 5.2.0
ignore: 5.2.4
import-fresh: 3.3.0
js-yaml: 4.1.0
minimatch: 3.1.2
@ -5531,34 +5675,124 @@ packages:
'@types/lodash': 4.14.186
dev: true
/@types/lodash.assign/4.2.7:
resolution: {integrity: sha512-FABtilcXqbXBj9jnSqgTbmr0Wy3lhDgMkGtNfcE+wipuKi2/fv7wB9rCeJfLi1H/qt1YxVAENtQkdKisYIwFKg==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.assignwith/4.2.7:
resolution: {integrity: sha512-7NbtlOcZFkjIS/vXkppYruo/RvSkTHj1BcumhCIxQSLCh50SmRIPqXrogRijwB3yy/3ULsiw9ZRn4ihw9oHHHg==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.camelcase/4.3.7:
resolution: {integrity: sha512-Nfi6jpo9vuEOSIJP+mpbTezKyEt75DQlbwjiDvs/JctWkbnHDoyQo5lWqdvgNiJmVUjcmkfvlrvSEgJYvurOKg==}
dependencies:
'@types/lodash': 4.14.186
dev: true
/@types/lodash.clone/4.5.7:
resolution: {integrity: sha512-jugWYM+xBUQCpWbn7p6BSbf8bRMHtJYnEIGZYngbStaU0aN4VFgAAkGgsc+MtHuepBOmjyUGiGv+dHnQQIGLZA==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.compact/3.0.7:
resolution: {integrity: sha512-yHP+S4QY9C/OLWc+Ei7A1rdwGcBgwFOaW20eZU8qA42dNRwUWnGltDAmKg5ICVGrgJKTokv0gsz1dsQl1gKA2w==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.concat/4.5.7:
resolution: {integrity: sha512-qgF1loqQByL+CW9UbSU1lTLOZmjnIdxQYn3EQsFpGaE/eZyIoOGdACM4jsG6WIAv8WZkto6QhvtAgl3v1wn3WQ==}
dependencies:
'@types/lodash': 4.14.191
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.difference/4.5.7:
resolution: {integrity: sha512-L7r80ymosy9HiqndKY9XfWeneRwOqAramdAL184pQhlS5PB+J3sKnpgUCBh7r9E6Rsdf4D4bty7t7HEC5Jny1Q==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.escaperegexp/4.1.7:
resolution: {integrity: sha512-2TfHizz0jsnyVkV4X1PMyk6KkibXTBHM43X+6BCR3KE6KgADdbirSF+oiEvPQl6mwuHXZjkxar9d4AFYORgfww==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.every/4.6.7:
resolution: {integrity: sha512-WmQWJILnkXbWny8/M5/IJEXFm5+MTCiBHbRLgYuxaEKD7KKAViys5qMJ7nvytF33ZMtLYXVFNYYI62BCr0UMtg==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.find/4.6.7:
resolution: {integrity: sha512-ESwK5k3nf9ufS+M2niH06/gjrREihHobyWQLs5c5+O93uar3N9s0rNx8bBfG9zLYVaPBJEsEIk06hm5ccstF5w==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.first/3.0.7:
resolution: {integrity: sha512-CYgaLK5ylAMDJN2k2hnKlAnNSqBnk4s97OABI/fXJXnWb+IDjgBJ8Y1qNgw8TTmk/Pz05OshDFhoNIf9ry9esA==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.flow/3.5.7:
resolution: {integrity: sha512-F3avAQHJPiewhugySHZ8CUgnYRiJwauOU5/PQdxWs8VU3WDbPnyea1XQ8rC8VT+08J43Ycz9fH1QD+isJukAxA==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.get/4.4.7:
resolution: {integrity: sha512-af34Mj+KdDeuzsJBxc/XeTtOx0SZHZNLd+hdrn+PcKGQs0EG2TJTzQAOTCZTgDJCArahlCzLWSy8c2w59JRz7Q==}
dependencies:
'@types/lodash': 4.14.186
'@types/lodash': 4.14.191
dev: true
/@types/lodash.intersection/4.4.7:
resolution: {integrity: sha512-7ukD2s54bmRNNpiH9ApEErO4H6mB8+WmXFr/6RpP3e/n7h3UFhEJC7QwLcoWAqOrYCIRFMAAwDf3ambSsW8c5Q==}
dependencies:
'@types/lodash': 4.14.186
'@types/lodash': 4.14.191
dev: true
/@types/lodash.isarray/4.0.7:
resolution: {integrity: sha512-j4LGkaWRU3siKODqnY9xffwoJgnpp4TYsfCxDhRSZwIbX4qD+TkH483r6+mqGkgqlnP08NhjQYhDXPLWgA2uxQ==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.isempty/4.4.7:
resolution: {integrity: sha512-YOzlpoIn9jrfHzjIukKnu9Le3tmi+0PhUdOt2rMpJW/4J6jX7s0HeBatXdh9QckLga8qt4EKBxVIEqtEq6pzLg==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.isequal/4.5.6:
resolution: {integrity: sha512-Ww4UGSe3DmtvLLJm2F16hDwEQSv7U0Rr8SujLUA2wHI2D2dm8kPu6Et+/y303LfjTIwSBKXB/YTUcAKpem/XEg==}
dependencies:
'@types/lodash': 4.14.186
'@types/lodash': 4.14.191
dev: true
/@types/lodash.isobject/3.0.7:
resolution: {integrity: sha512-nuC74gk3hEmpY4Jq5xIfQc9uoWg2ozVIqS7OwS9xPncFr+d6ULBDpBBOcSaJKm2euKANHBeRGNEaHMAddIzSfA==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.isstring/4.0.7:
resolution: {integrity: sha512-gt4q4n1Who4JxLeFR/kduS2Tia+biQk/zdbIkOfMvAldXHJdcC5SsvZREchkwa4CwKK+DqhIm3wfigFYzNKS8Q==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.iteratee/4.7.7:
@ -5567,22 +5801,64 @@ packages:
'@types/lodash': 4.14.186
dev: true
/@types/lodash.last/3.0.7:
resolution: {integrity: sha512-hh43wZke0moPkPAqi8WS5VSH+qb2O1Ln8pootwpWv3dTTa0htqFcdAxqfxGNf52XxDem6SDlaf0Ks/f95Qo3Vw==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.lt/3.9.7:
resolution: {integrity: sha512-PVkUcZFQL9PViFol5hz6JAI4jj5mtnCZo5J1mDN2GaLMmMP46sZRii2v3cvmWOvlSEV+LGvxpo+DVnWHLWAAqw==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.map/4.6.13:
resolution: {integrity: sha512-kppRBzlpuvQQsr7R2nv/DDDZds8fglRFNAK70WUOkOC18KOcuQ22oQF9Kgy5Z2v/eDNkBm0ltrT6FThSkuWwow==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.merge/4.6.7:
resolution: {integrity: sha512-OwxUJ9E50gw3LnAefSHJPHaBLGEKmQBQ7CZe/xflHkyy/wH2zVyEIAKReHvVrrn7zKdF58p16We9kMfh7v0RRQ==}
dependencies:
'@types/lodash': 4.14.186
'@types/lodash': 4.14.191
dev: true
/@types/lodash.mergewith/4.6.7:
resolution: {integrity: sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.omit/4.5.7:
resolution: {integrity: sha512-6q6cNg0tQ6oTWjSM+BcYMBhan54P/gLqBldG4AuXd3nKr0oeVekWNS4VrNEu3BhCSDXtGapi7zjhnna0s03KpA==}
dependencies:
'@types/lodash': 4.14.186
'@types/lodash': 4.14.191
dev: true
/@types/lodash.partialright/4.2.7:
resolution: {integrity: sha512-6RiMKczgdzVFbLXkZynaL+1FgNRQN1YhnKb3wxb04yaIuT+5QUaT+70xx60uOSaZwNd9fvPVVxhPQHL9MP3YHg==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.pick/4.4.7:
resolution: {integrity: sha512-HgdyKz7/1+oeoVzbpu1XiX/Bti9AUksHtOILH38T07aKvqoirzcdOsrO2+Yg3L51Hv/8m1MetvHZEUGeABiTiQ==}
dependencies:
'@types/lodash': 4.14.186
'@types/lodash': 4.14.191
dev: true
/@types/lodash.pickby/4.6.7:
resolution: {integrity: sha512-4ebXRusuLflfscbD0PUX4eVknDHD9Yf+uMtBIvA/hrnTqeAzbuHuDjvnYriLjUrI9YrhCPVKUf4wkRSXJQ6gig==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.reduce/4.6.7:
resolution: {integrity: sha512-HwJ3H45BNHhSLciBZSd8oAxrz0d+ko5mXVHIeanmu0WpFiwkMg+XAv1Pp4FUsdNW34S6J60+tJbH30aULOe5MA==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.remove/4.7.7:
@ -5594,13 +5870,49 @@ packages:
/@types/lodash.set/4.3.7:
resolution: {integrity: sha512-bS5Wkg/nrT82YUfkNYPSccFrNZRL+irl7Yt4iM6OTSQ0VZJED2oUIVm15NkNtUAQ8SRhCe+axqERUV6MJgkeEg==}
dependencies:
'@types/lodash': 4.14.186
'@types/lodash': 4.14.191
dev: true
/@types/lodash.some/4.6.7:
resolution: {integrity: sha512-RA8+uBPdrCNxuUFQUVQ0exAJ2iU1L4UyltrmhChbZXYsEewS2QRE7wIcp1sHsjUpwA+6++Yfk/lupGLYr6zbUg==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.sortby/4.7.7:
resolution: {integrity: sha512-J/4IS+jQopGBrrRetBXDCX0KnSeXJZ0rOTmGAxR9MWGV24YdHxX8IRi9LCGAU9GKWlBov9KRSfQpuup9PReqrw==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.split/4.4.7:
resolution: {integrity: sha512-4L/89eW9ZFOkJscM/u0nRwWaN5jHK/esQ71FHuVgePAtBD9YRdYS4cM1HRyIxN3xAoRRrw1Ohf2HQjSk0zwuqA==}
dependencies:
'@types/lodash': 4.14.186
'@types/lodash': 4.14.191
dev: true
/@types/lodash.tonumber/4.0.7:
resolution: {integrity: sha512-+hJ7A8gssoiVJVNM9x+9ljzeg/EsmI3FdrElUYSfqAHFvlt/2Oc8hBJdIS1lZDkVV0pNMABaDVmtygu2yZstGg==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.tostring/4.1.7:
resolution: {integrity: sha512-bcLdE0foFSalisXPfZj2ukqnD6b+pg/JJoeU3szUopQG6H5emLwzZhwXkCHhDv5q23JTQz0d0er4KVpN2USZoQ==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.trim/4.5.7:
resolution: {integrity: sha512-ZKqKyxHdZz/nnCWJoame6iMHuH3uPMik750o0K75tsLuZ6SJV+18Dca/u9RPDHYO6kVdbROWM/e/8DcZZjCcMw==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.union/4.6.7:
resolution: {integrity: sha512-6HXM6tsnHJzKgJE0gA/LhTGf/7AbjUk759WZ1MziVm+OBNAATHhdgj+a3KVE8g76GCLAnN4ZEQQG1EGgtBIABA==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.unionby/4.8.7:
@ -5618,13 +5930,25 @@ packages:
/@types/lodash.uniqby/4.7.7:
resolution: {integrity: sha512-sv2g6vkCIvEUsK5/Vq17haoZaisfj2EWW8mP7QWlnKi6dByoNmeuHDDXHR7sabuDqwO4gvU7ModIL22MmnOocg==}
dependencies:
'@types/lodash': 4.14.186
'@types/lodash': 4.14.191
dev: true
/@types/lodash.unset/4.5.7:
resolution: {integrity: sha512-/i371dATnLQ4tazwcX/n+rGk3M6RnMbA3lJKrKFjELicPExmZ1LcKtGfHBECuPS2TTl3yDuaFmWtmfACVuBBAQ==}
dependencies:
'@types/lodash': 4.14.186
'@types/lodash': 4.14.191
dev: true
/@types/lodash.upperfirst/4.3.7:
resolution: {integrity: sha512-CrBjoB4lO6h7tXNMBUl1eh/w0KdMosiEOXOoD5DMECsA/kDWo/WQfOt1KyGKVvgwK3I6cKAY6z8LymKiMazLFg==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash.zip/4.2.7:
resolution: {integrity: sha512-wRtK2bZ0HYXkJkeldrD35qOquGn5GOmp8+o886N18Aqw2DGFLP7JCTEb00j3xQZ+PCMTyfMS2OMbLUwah+bcyg==}
dependencies:
'@types/lodash': 4.14.191
dev: true
/@types/lodash/4.14.186:
@ -10396,7 +10720,7 @@ packages:
glob-parent: 6.0.2
globals: 13.17.0
grapheme-splitter: 1.0.4
ignore: 5.2.0
ignore: 5.2.4
import-fresh: 3.3.0
imurmurhash: 0.1.4
is-glob: 4.0.3
@ -14113,25 +14437,66 @@ packages:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
dev: false
/lodash.camelcase/4.3.0:
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
/lodash.assign/4.2.0:
resolution: {integrity: sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==}
dev: false
/lodash.assignwith/4.2.0:
resolution: {integrity: sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==}
dev: false
/lodash.clone/4.5.0:
resolution: {integrity: sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==}
dev: false
/lodash.clonedeep/4.5.0:
resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
dev: false
/lodash.compact/3.0.1:
resolution: {integrity: sha512-2ozeiPi+5eBXW1CLtzjk8XQFhQOEMwwfxblqeq6EGyTxZJ1bPATqilY0e6g2SLQpP4KuMeuioBhEnWz5Pr7ICQ==}
dev: false
/lodash.concat/4.5.0:
resolution: {integrity: sha512-US6b1Nqek3shg2qmv1IjTN5P7tPL1RKu77VpdGtVprxmnTI/HlsHGqI2Oa5Irznk0ZB5IXHwocMeMZK8vf4+CA==}
dev: false
/lodash.debounce/4.0.8:
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
dev: true
/lodash.defaults/4.2.0:
resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
dev: false
/lodash.difference/4.5.0:
resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==}
dev: false
/lodash.escaperegexp/4.1.2:
resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==}
dev: false
/lodash.every/4.6.0:
resolution: {integrity: sha512-isF82d+65/sNvQ3aaQAW7LLHnnTxSN/2fm4rhYyuufLzA4VtHz6y6S5vFwe6PQVr2xdqUOyxBbTNKDpnmeu50w==}
dev: false
/lodash.find/4.6.0:
resolution: {integrity: sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==}
dev: false
/lodash.first/3.0.0:
resolution: {integrity: sha512-FnBs6c5eWZY1P88K2+NHiLZjp+pBRbLbt9kDGBCtiY+tfRGhR7LmIxTphpspmRXxyQeJXM5LHoq62yVjcBjcCw==}
dev: false
/lodash.flatten/4.4.0:
resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==}
dev: false
/lodash.flow/3.5.0:
resolution: {integrity: sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==}
dev: false
/lodash.get/4.4.2:
resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
@ -14143,9 +14508,22 @@ packages:
resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
dev: false
/lodash.isarray/4.0.0:
resolution: {integrity: sha512-V8ViWvoNlXpCrB6Ewaj3ScRXUpmCvqp4tJUxa3dlovuJj/8lp3SND5Kw4v5OeuHgoyw4qJN+gl36qZqp6WYQ6g==}
deprecated: This package is deprecated. Use Array.isArray.
dev: false
/lodash.isempty/4.4.0:
resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==}
dev: false
/lodash.isequal/4.5.0:
resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
/lodash.isobject/3.0.2:
resolution: {integrity: sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==}
dev: false
/lodash.isstring/4.0.1:
resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==}
dev: false
@ -14154,6 +14532,18 @@ packages:
resolution: {integrity: sha512-yv3cSQZmfpbIKo4Yo45B1taEvxjNvcpF1CEOc0Y6dEyvhPIfEJE3twDwPgWTPQubcSgXyBwBKG6wpQvWMDOf6Q==}
dev: false
/lodash.last/3.0.0:
resolution: {integrity: sha512-14mq7rSkCxG4XMy9lF2FbIOqqgF0aH0NfPuQ3LPR3vIh0kHnUvIYP70dqa1Hf47zyXfQ8FzAg0MYOQeSuE1R7A==}
dev: false
/lodash.lt/3.9.2:
resolution: {integrity: sha512-WMyxj1+48IlnUWMYALOD6+o61apx5xdiXDtHBOp6QlkeZ19QpX7LiqHMXCnZWGd35QMZoZV/iJIhIhM01WPz3A==}
dev: false
/lodash.map/4.6.0:
resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==}
dev: false
/lodash.memoize/4.1.2:
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
dev: true
@ -14161,6 +14551,10 @@ packages:
/lodash.merge/4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
/lodash.mergewith/4.6.2:
resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
dev: false
/lodash.omit/4.5.0:
resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==}
dev: false
@ -14173,10 +14567,22 @@ packages:
resolution: {integrity: sha512-T0rZxKmghOOf5YPnn8EY5iLYeWCpZq8G41FfqoVHH5QDTAFaghJRmAdLiadEDq+ztgM2q5PjA+Z1fOwGrLgmtg==}
dev: false
/lodash.partialright/4.2.1:
resolution: {integrity: sha512-yebmPMQZH7i4El6SdJTW9rn8irWl8VTcsmiWqm/I4sY8/ZjbSo0Z512HL6soeAu3mh5rhx5uIIo6kYJOQXbCxw==}
dev: false
/lodash.pick/4.4.0:
resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==}
dev: false
/lodash.pickby/4.6.0:
resolution: {integrity: sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==}
dev: false
/lodash.reduce/4.6.0:
resolution: {integrity: sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==}
dev: false
/lodash.remove/4.7.0:
resolution: {integrity: sha512-GnwkSsEXGXirSxh3YI+jc/qvptE2DV8ZjA4liK0NT1MJ3mNDMFhX3bY+4Wr8onlNItYuPp7/4u19Fi55mvzkTw==}
dev: false
@ -14185,6 +14591,14 @@ packages:
resolution: {integrity: sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==}
dev: false
/lodash.some/4.6.0:
resolution: {integrity: sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==}
dev: false
/lodash.sortby/4.7.0:
resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
dev: false
/lodash.split/4.4.2:
resolution: {integrity: sha512-kn1IDX0aHfg0FsnPIyxCHTamZXt3YK3aExRH1LW8YhzP6+sCldTm8+E4aIg+nSmM6R4eqdWGrXWtfYI961bwIw==}
dev: false
@ -14193,6 +14607,22 @@ packages:
resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
dev: false
/lodash.tonumber/4.0.3:
resolution: {integrity: sha512-SY0SwuPOHRwKcCNTdsntPYb+Zddz5mDUIVFABzRMqmAiL41pMeyoQFGxYAw5zdc9NnH4pbJqiqqp5ckfxa+zSA==}
dev: false
/lodash.tostring/4.1.4:
resolution: {integrity: sha512-xWHJ0LY7cSz/C/4ghNNiYA1Ong0VLdzAzrjDHvOzN+eJHzDEHme2+k+w/9Pk8dtdwcASMUbxN1/mtj6mFI25Ng==}
dev: false
/lodash.trim/4.5.1:
resolution: {integrity: sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg==}
dev: false
/lodash.union/4.6.0:
resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==}
dev: false
/lodash.unionby/4.8.0:
resolution: {integrity: sha512-e60kn4GJIunNkw6v9MxRnUuLYI/Tyuanch7ozoCtk/1irJTYBj+qNTxr5B3qVflmJhwStJBv387Cb+9VOfABMg==}
dev: false
@ -14209,6 +14639,14 @@ packages:
resolution: {integrity: sha512-bwKX88k2JhCV9D1vtE8+naDKlLiGrSmf8zi/Y9ivFHwbmRfA8RxS/aVJ+sIht2XOwqoNr4xUPUkGZpc1sHFEKg==}
dev: false
/lodash.upperfirst/4.3.1:
resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==}
dev: false
/lodash.zip/4.2.0:
resolution: {integrity: sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==}
dev: false
/lodash.zipobject/4.1.3:
resolution: {integrity: sha512-A9SzX4hMKWS25MyalwcOnNoplyHbkNVsjidhTp8ru0Sj23wY9GWBKS8gAIGDSAqeWjIjvE4KBEl24XXAs+v4wQ==}
dev: false