[FIX] Katex is not respecting the 'Katex_Enabled' setting (#26542)

pull/26598/head
Filipe Marins 4 years ago committed by GitHub
parent 0b8ebaeba8
commit aa02a99d1f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      apps/meteor/app/settings/server/functions/settings.mocks.ts
  2. 86
      apps/meteor/client/views/room/MessageList/hooks/useParsedMessage.spec.tsx
  3. 13
      apps/meteor/client/views/room/MessageList/hooks/useParsedMessage.ts
  4. 5
      apps/meteor/package.json
  5. 10
      apps/meteor/server/hooks/messages/markdownParser.ts
  6. 18
      apps/meteor/tests/unit/app/apps/server/messages.tests.js
  7. 2
      apps/meteor/tests/unit/app/federation-v2/server/unit/application/RoomServiceReceiver.spec.ts
  8. 22
      apps/meteor/tests/unit/app/federation-v2/server/unit/infrastructure/queue/InMemoryQueue.spec.ts
  9. 9
      apps/meteor/tests/unit/app/lib/server.mocks.js
  10. 19
      apps/meteor/tests/unit/app/lib/server.tests.js
  11. 67
      apps/meteor/tests/unit/app/markdown/client.mocks.js
  12. 6
      apps/meteor/tests/unit/app/markdown/client.tests.js
  13. 15
      apps/meteor/tests/unit/app/meteor-accounts-saml/server.tests.ts
  14. 7
      apps/meteor/tests/unit/app/ui-utils/server.mocks.js
  15. 10
      apps/meteor/tests/unit/app/ui-utils/server.tests.js
  16. 17
      apps/meteor/tests/unit/app/utils/lib/getURL.tests.js
  17. 138
      yarn.lock

@ -1,4 +1,3 @@
import mock from 'mock-require';
import type { ISetting } from '@rocket.chat/core-typings';
import type { ICachedSettings } from '../CachedSettings';
@ -70,5 +69,3 @@ class SettingsClass {
}
export const Settings = new SettingsClass();
mock('@rocket.chat/models', { Settings });

@ -0,0 +1,86 @@
import { renderHook } from '@testing-library/react-hooks';
import { expect } from 'chai';
import proxyquire from 'proxyquire';
import sinon from 'sinon';
const date = new Date('2021-10-27T00:00:00.000Z');
const baseMessage = {
ts: date,
u: {
_id: 'userId',
name: 'userName',
username: 'userName',
},
msg: 'message',
rid: 'roomId',
_id: 'messageId',
_updatedAt: date,
urls: [],
};
const baseStubs = {
'./useAutotranslateLanguage': {
useAutotranslateLanguage: (): boolean => false,
},
'@rocket.chat/ui-contexts': {
useSetting: (): boolean => false,
},
};
describe('useParsedMessage', () => {
it('should call the parse function with message and parse options parameters if all settings is false', () => {
const messageParser = sinon.spy();
const { useParsedMessage } = proxyquire.noCallThru().load('./useParsedMessage', {
...baseStubs,
'@rocket.chat/message-parser': {
parse: messageParser,
},
});
renderHook(() => useParsedMessage(baseMessage));
expect(messageParser.calledOnceWith(baseMessage.msg, { colors: false, emoticons: true })).to.be.true;
});
it('should call the parse function with katex in options parameters if Katex_Enabled is true', () => {
const messageParser = sinon.spy();
const { useParsedMessage } = proxyquire.noCallThru().load('./useParsedMessage', {
...baseStubs,
'@rocket.chat/ui-contexts': {
useSetting: (setting: string): boolean => setting === 'Katex_Enabled',
},
'@rocket.chat/message-parser': {
parse: messageParser,
},
});
renderHook(() => useParsedMessage(baseMessage));
expect(
messageParser.calledOnceWith(baseMessage.msg, {
colors: false,
emoticons: true,
katex: { dollarSyntax: false, parenthesisSyntax: false },
}),
).to.be.true;
});
it('should call the parse function without katex in options parameters if Katex_Enabled is false', () => {
const messageParser = sinon.spy();
const { useParsedMessage } = proxyquire.noCallThru().load('./useParsedMessage', {
...baseStubs,
'@rocket.chat/ui-contexts': {
useSetting: (setting: string): boolean => setting !== 'Katex_Enabled',
},
'@rocket.chat/message-parser': {
parse: messageParser,
},
});
renderHook(() => useParsedMessage(baseMessage));
expect(
messageParser.calledOnceWith(baseMessage.msg, {
colors: true,
emoticons: true,
}),
).to.be.true;
});
});

@ -8,6 +8,7 @@ import { useAutotranslateLanguage } from './useAutotranslateLanguage';
export function useParsedMessage(message: IMessage & Partial<ITranslatedMessage>): Root {
const colors = useSetting('HexColorPreview_Enabled') as boolean;
const katexEnabled = useSetting('Katex_Enabled') as boolean;
const katexDollarSyntax = useSetting('Katex_Dollar_Syntax') as boolean;
const katexParenthesisSyntax = useSetting('Katex_Parenthesis_Syntax') as boolean;
const autoTranslateLanguage = useAutotranslateLanguage(message.rid);
@ -19,10 +20,12 @@ export function useParsedMessage(message: IMessage & Partial<ITranslatedMessage>
const parseOptions = {
colors,
emoticons: true,
katex: {
dollarSyntax: katexDollarSyntax,
parenthesisSyntax: katexParenthesisSyntax,
},
...(katexEnabled && {
katex: {
dollarSyntax: katexDollarSyntax,
parenthesisSyntax: katexParenthesisSyntax,
},
}),
};
if (translated && autoTranslateLanguage && translations) {
@ -37,5 +40,5 @@ export function useParsedMessage(message: IMessage & Partial<ITranslatedMessage>
}
return parse(msg, parseOptions);
}, [colors, katexDollarSyntax, katexParenthesisSyntax, autoTranslateLanguage, md, msg, translated, translations]);
}, [colors, katexEnabled, katexDollarSyntax, katexParenthesisSyntax, autoTranslateLanguage, md, msg, translated, translations]);
}

@ -79,6 +79,7 @@
"@storybook/react": "~6.5.9",
"@storybook/testing-library": "0.0.13",
"@testing-library/react": "~12.1.5",
"@testing-library/react-hooks": "^8.0.1",
"@testing-library/user-event": "~13.5.0",
"@types/adm-zip": "^0.5.0",
"@types/bad-words": "^3.0.1",
@ -114,7 +115,6 @@
"@types/meteor": "2.7.1",
"@types/mkdirp": "^1.0.2",
"@types/mocha": "^8.2.3",
"@types/mock-require": "^2.0.1",
"@types/moment-timezone": "^0.5.30",
"@types/node": "^14.18.21",
"@types/node-rsa": "^1.1.1",
@ -122,6 +122,7 @@
"@types/parseurl": "^1.3.1",
"@types/photoswipe": "^4.1.2",
"@types/prometheus-gc-stats": "^0.6.2",
"@types/proxyquire": "^1.3.28",
"@types/psl": "^1.1.0",
"@types/react": "~17.0.47",
"@types/react-dom": "~17.0.17",
@ -161,7 +162,6 @@
"i18next": "^20.6.1",
"jsdom-global": "^3.0.2",
"mocha": "^9.2.2",
"mock-require": "^3.0.3",
"nyc": "^15.1.0",
"outdent": "~0.8.0",
"pino-pretty": "^7.6.1",
@ -173,6 +173,7 @@
"postcss-nested": "^5.0.6",
"postcss-url": "^10.1.3",
"prettier": "2.7.1",
"proxyquire": "^2.1.3",
"rewire": "^6.0.0",
"sinon": "^14.0.0",
"source-map": "^0.7.4",

@ -16,10 +16,12 @@ if (process.env.DISABLE_MESSAGE_PARSER !== 'true') {
message.md = parse(message.msg, {
colors: settings.get('HexColorPreview_Enabled'),
emoticons: true,
katex: {
dollarSyntax: settings.get('Katex_Dollar_Syntax'),
parenthesisSyntax: settings.get('Katex_Parenthesis_Syntax'),
},
...(settings.get('Katex_Enabled') && {
katex: {
dollarSyntax: settings.get('Katex_Dollar_Syntax'),
parenthesisSyntax: settings.get('Katex_Parenthesis_Syntax'),
},
}),
});
} catch (e) {
SystemLogger.error(e); // errors logged while the parser is at experimental stage

@ -1,5 +1,5 @@
import mock from 'mock-require';
import { expect } from 'chai';
import proxyquire from 'proxyquire';
import { AppServerOrchestratorMock } from './mocks/orchestrator.mock';
import { appMessageMock, appMessageInvalidRoomMock } from './mocks/data/messages.data';
@ -7,13 +7,19 @@ import { MessagesMock } from './mocks/models/Messages.mock';
import { RoomsMock } from './mocks/models/Rooms.mock';
import { UsersMock } from './mocks/models/Users.mock';
mock('../../../../../app/models/server', './mocks/models');
mock('meteor/random', {
id: () => 1,
const { AppMessagesConverter } = proxyquire.noCallThru().load('../../../../../app/apps/server/converters/messages', {
'../../../models/server': {
Messages: new MessagesMock(),
Rooms: new RoomsMock(),
Users: new UsersMock(),
},
'meteor/random': {
Random: {
id: () => 1,
},
},
});
const { AppMessagesConverter } = require('../../../../../app/apps/server/converters/messages');
describe('The AppMessagesConverter instance', function () {
let messagesConverter;
let messagesMock;

@ -2,8 +2,6 @@ import { expect } from 'chai';
import sinon from 'sinon';
import { RoomType } from '@rocket.chat/apps-engine/definition/rooms';
import '../../../../lib/server.mocks';
import { FederationRoomServiceReceiver } from '../../../../../../../app/federation-v2/server/application/RoomServiceReceiver';
import { FederatedUser } from '../../../../../../../app/federation-v2/server/domain/FederatedUser';
import { FederatedRoom } from '../../../../../../../app/federation-v2/server/domain/FederatedRoom';

@ -1,16 +1,18 @@
import { expect, spy } from 'chai';
import mock from 'mock-require';
import proxyquire from 'proxyquire';
import type fastq from 'fastq';
import { InMemoryQueue } from '../../../../../../../../app/federation-v2/server/infrastructure/queue/InMemoryQueue';
mock('fastq', {
promise<C, T = any, R = any>(this: C, handler: fastq.asyncWorker<C, T, R>): Pick<fastq.queueAsPromised<T, R>, 'push'> {
return {
push: (task) => handler.call(this, task),
};
},
});
const { InMemoryQueue } = proxyquire
.noCallThru()
.load('../../../../../../../../app/federation-v2/server/infrastructure/queue/InMemoryQueue', {
fastq: {
promise<C, T = any, R = any>(this: C, handler: fastq.asyncWorker<C, T, R>): Pick<fastq.queueAsPromised<T, R>, 'push'> {
return {
push: (task) => handler.call(this, task),
};
},
},
});
describe('Federation - Infrastructure - Queue - InMemoryQueue', () => {
const queue = new InMemoryQueue();

@ -1,9 +0,0 @@
import mock from 'mock-require';
mock('meteor/meteor', {
Meteor: {
absoluteUrl() {
return 'http://localhost:3000/';
},
},
});

@ -1,7 +1,20 @@
import { expect } from 'chai';
import './server.mocks.js';
import PasswordPolicyClass from '../../../../app/lib/server/lib/PasswordPolicyClass';
import proxyquire from 'proxyquire';
const { default: PasswordPolicyClass } = proxyquire.noCallThru().load('../../../../app/lib/server/lib/PasswordPolicyClass', {
'meteor/meteor': {
Meteor: {
absoluteUrl() {
return 'http://localhost:3000/';
},
},
},
'meteor/random': {
Random: {
id: () => 1,
},
},
});
describe('PasswordPolicyClass', () => {
describe('Default options', () => {

@ -1,61 +1,30 @@
import mock from 'mock-require';
import proxyquire from 'proxyquire';
import _ from 'underscore';
import s from 'underscore.string';
_.mixin(s.exports());
mock('meteor/meteor', {
Meteor: {
absoluteUrl() {
return 'http://localhost:3000/';
const mocks = {
'meteor/meteor': {
'Meteor': {
absoluteUrl() {
return 'http://localhost:3000/';
},
},
'@global': true,
},
});
mock('meteor/blaze', {
Blaze: {},
});
mock('../../../../app/settings', {
settings: {
get(setting) {
switch (setting) {
case 'DeepLink_Url':
return 'https://go.rocket.chat';
case 'Markdown_SupportSchemesForLink':
return 'http,https';
case 'Markdown_Parser':
return 'original';
case 'Markdown_Headers':
// case 'Markdown_Marked_GFM':
// case 'Markdown_Marked_Tables':
// case 'Markdown_Marked_Breaks':
// case 'Markdown_Marked_Pedantic':
// case 'Markdown_Marked_SmartLists':
// case 'Markdown_Marked_Smartypants':
return true;
default:
throw new Error(`Missing setting mock ${setting}`);
}
'meteor/random': {
'Random': {
id() {
return Math.random().toString().replace('0.', 'A');
},
},
'@global': true,
},
});
};
mock('../../callbacks', {
callbacks: {
add() {},
priority: {
HIGH: 1,
},
},
});
mock('meteor/random', {
Random: {
id() {
return Math.random().toString().replace('0.', 'A');
},
},
});
export const { Markdown } = proxyquire.noCallThru().load('../../../../app/markdown/lib/markdown', mocks);
export const { original } = proxyquire.noCallThru().load('../../../../app/markdown/lib/parser/original/original', mocks);
export const { filtered } = proxyquire.noCallThru().load('../../../../app/markdown/lib/parser/filtered/filtered', mocks);
global.s = s;

@ -1,11 +1,7 @@
import './client.mocks.js';
import { expect } from 'chai';
import { escapeHTML } from '@rocket.chat/string-helpers';
import { original } from '../../../../app/markdown/lib/parser/original/original';
import { filtered } from '../../../../app/markdown/lib/parser/filtered/filtered';
import { Markdown } from '../../../../app/markdown/lib/markdown';
import { Markdown, original, filtered } from './client.mocks.js';
const wrapper = (text, tag) => `<span class="copyonly">${tag}</span>${text}<span class="copyonly">${tag}</span>`;
const boldWrapper = (text) => wrapper(`<strong>${text}</strong>`, '*');

@ -1,9 +1,9 @@
import { expect } from 'chai';
import proxyquire from 'proxyquire';
import { AuthorizeRequest } from '../../../../app/meteor-accounts-saml/server/lib/generators/AuthorizeRequest';
import { LogoutRequest } from '../../../../app/meteor-accounts-saml/server/lib/generators/LogoutRequest';
import { LogoutResponse } from '../../../../app/meteor-accounts-saml/server/lib/generators/LogoutResponse';
import { ServiceProviderMetadata } from '../../../../app/meteor-accounts-saml/server/lib/generators/ServiceProviderMetadata';
import { LogoutRequestParser } from '../../../../app/meteor-accounts-saml/server/lib/parsers/LogoutRequest';
import { LogoutResponseParser } from '../../../../app/meteor-accounts-saml/server/lib/parsers/LogoutResponse';
import { ResponseParser } from '../../../../app/meteor-accounts-saml/server/lib/parsers/Response';
@ -35,7 +35,18 @@ import {
privateKey,
} from './data';
import { isTruthy } from '../../../../lib/isTruthy';
import '../lib/server.mocks';
const { ServiceProviderMetadata } = proxyquire
.noCallThru()
.load('../../../../app/meteor-accounts-saml/server/lib/generators/ServiceProviderMetadata', {
'meteor/meteor': {
Meteor: {
absoluteUrl() {
return 'http://localhost:3000/';
},
},
},
});
describe('SAML', () => {
describe('[AuthorizeRequest]', () => {

@ -1,7 +0,0 @@
import mock from 'mock-require';
mock('/app/emoji', {
emoji: {
list: {},
},
});

@ -1,7 +1,13 @@
import proxyquire from 'proxyquire';
import { expect } from 'chai';
import './server.mocks.js';
import { messageProperties } from '../../../../app/ui-utils/lib/MessageProperties';
const { messageProperties } = proxyquire.noCallThru().load('../../../../app/ui-utils/lib/MessageProperties', {
'../../emoji': {
emoji: {
list: {},
},
},
});
const messages = {
'Sample Message': 14,

@ -1,7 +1,22 @@
import { expect } from 'chai';
import proxyquire from 'proxyquire';
import s from 'underscore.string';
import { _getURL } from '../../../../../app/utils/lib/getURL';
const { _getURL } = proxyquire.noCallThru().load('../../../../../app/utils/lib/getURL', {
'meteor/meteor': {
'Meteor': {
absoluteUrl() {
return 'http://localhost:3000/';
},
},
'@global': true,
},
'../../settings': {
settings: {
get: () => 'https://go.rocket.chat',
},
},
});
const testPaths = (o, _processPath) => {
let processPath = _processPath;

@ -4288,6 +4288,7 @@ __metadata:
"@storybook/testing-library": 0.0.13
"@tanstack/react-query": ^4.0.10
"@testing-library/react": ~12.1.5
"@testing-library/react-hooks": ^8.0.1
"@testing-library/user-event": ~13.5.0
"@types/adm-zip": ^0.5.0
"@types/bad-words": ^3.0.1
@ -4327,7 +4328,6 @@ __metadata:
"@types/meteor": 2.7.1
"@types/mkdirp": ^1.0.2
"@types/mocha": ^8.2.3
"@types/mock-require": ^2.0.1
"@types/moment-timezone": ^0.5.30
"@types/node": ^14.18.21
"@types/node-rsa": ^1.1.1
@ -4337,6 +4337,7 @@ __metadata:
"@types/photoswipe": ^4.1.2
"@types/prometheus-gc-stats": ^0.6.2
"@types/proxy-from-env": ^1.0.1
"@types/proxyquire": ^1.3.28
"@types/psl": ^1.1.0
"@types/react": ~17.0.47
"@types/react-dom": ~17.0.17
@ -4457,7 +4458,6 @@ __metadata:
mime-type: ^4.0.0
mkdirp: ^1.0.4
mocha: ^9.2.2
mock-require: ^3.0.3
moleculer: ^0.14.21
moment: ^2.29.3
moment-timezone: ^0.5.34
@ -4489,6 +4489,7 @@ __metadata:
prom-client: ^14.0.1
prometheus-gc-stats: ^0.6.3
proxy-from-env: ^1.1.0
proxyquire: ^2.1.3
psl: ^1.8.0
query-string: ^7.1.1
queue-fifo: ^0.2.6
@ -6190,6 +6191,28 @@ __metadata:
languageName: node
linkType: hard
"@testing-library/react-hooks@npm:^8.0.1":
version: 8.0.1
resolution: "@testing-library/react-hooks@npm:8.0.1"
dependencies:
"@babel/runtime": ^7.12.5
react-error-boundary: ^3.1.0
peerDependencies:
"@types/react": ^16.9.0 || ^17.0.0
react: ^16.9.0 || ^17.0.0
react-dom: ^16.9.0 || ^17.0.0
react-test-renderer: ^16.9.0 || ^17.0.0
peerDependenciesMeta:
"@types/react":
optional: true
react-dom:
optional: true
react-test-renderer:
optional: true
checksum: 7fe44352e920deb5cb1876f80d64e48615232072c9d5382f1e0284b3aab46bb1c659a040b774c45cdf084a5257b8fe463f7e08695ad8480d8a15635d4d3d1f6d
languageName: node
linkType: hard
"@testing-library/react@npm:~12.1.5":
version: 12.1.5
resolution: "@testing-library/react@npm:12.1.5"
@ -6889,15 +6912,6 @@ __metadata:
languageName: node
linkType: hard
"@types/mock-require@npm:^2.0.1":
version: 2.0.1
resolution: "@types/mock-require@npm:2.0.1"
dependencies:
"@types/node": "*"
checksum: 8749a4b3fcb9f3d6ebaeff442f00997ca59c4806bc00fea648a1fd06b1ea8510a6900b8e47070561ddf15ce98abc80dfe24ff21a307c2b0d1a6845bd865f708b
languageName: node
linkType: hard
"@types/moment-timezone@npm:^0.5.30":
version: 0.5.30
resolution: "@types/moment-timezone@npm:0.5.30"
@ -7075,6 +7089,13 @@ __metadata:
languageName: node
linkType: hard
"@types/proxyquire@npm:^1.3.28":
version: 1.3.28
resolution: "@types/proxyquire@npm:1.3.28"
checksum: 9f0267b4516c2686a2e99a6d4dbd2ed660133180aad775a4000f3e103d8b2fe6b1bfe5b36003edf7adfb02542aed6c2fa6049fc217daea73ebced2942a762f27
languageName: node
linkType: hard
"@types/psl@npm:^1.1.0":
version: 1.1.0
resolution: "@types/psl@npm:1.1.0"
@ -15172,6 +15193,16 @@ __metadata:
languageName: node
linkType: hard
"fill-keys@npm:^1.0.2":
version: 1.0.2
resolution: "fill-keys@npm:1.0.2"
dependencies:
is-object: ~1.0.1
merge-descriptors: ~1.0.0
checksum: 6ac5ff60ff08f2f44d19e919c9ca579f4efaaa8c88232b4aab5a5b5522aeb8ec91501956e780cb2b44574fe4a4a337e9b43187829267d0b66a6bfedbafae893f
languageName: node
linkType: hard
"fill-range@npm:^4.0.0":
version: 4.0.0
resolution: "fill-range@npm:4.0.0"
@ -15906,13 +15937,6 @@ __metadata:
languageName: node
linkType: hard
"get-caller-file@npm:^1.0.2":
version: 1.0.3
resolution: "get-caller-file@npm:1.0.3"
checksum: 2b90a7f848896abcebcdc0acc627a435bcf05b9cd280599bc980ebfcdc222416c3df12c24c4845f69adc4346728e8966f70b758f9369f3534182791dfbc25c05
languageName: node
linkType: hard
"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5":
version: 2.0.5
resolution: "get-caller-file@npm:2.0.5"
@ -18238,6 +18262,15 @@ __metadata:
languageName: node
linkType: hard
"is-core-module@npm:^2.9.0":
version: 2.10.0
resolution: "is-core-module@npm:2.10.0"
dependencies:
has: ^1.0.3
checksum: 0f3f77811f430af3256fa7bbc806f9639534b140f8ee69476f632c3e1eb4e28a38be0b9d1b8ecf596179c841b53576129279df95e7051d694dac4ceb6f967593
languageName: node
linkType: hard
"is-cwebp-readable@npm:^2.0.1":
version: 2.0.1
resolution: "is-cwebp-readable@npm:2.0.1"
@ -18560,7 +18593,7 @@ __metadata:
languageName: node
linkType: hard
"is-object@npm:^1.0.1":
"is-object@npm:^1.0.1, is-object@npm:~1.0.1":
version: 1.0.2
resolution: "is-object@npm:1.0.2"
checksum: 971219c4b1985b9751f65e4c8296d3104f0457b0e8a70849e848a4a2208bc47317d73b3b85d4a369619cb2df8284dc22584cb2695a7d99aca5e8d0aa64fc075a
@ -21413,7 +21446,7 @@ __metadata:
languageName: node
linkType: hard
"merge-descriptors@npm:1.0.1":
"merge-descriptors@npm:1.0.1, merge-descriptors@npm:~1.0.0":
version: 1.0.1
resolution: "merge-descriptors@npm:1.0.1"
checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26
@ -21976,16 +22009,6 @@ __metadata:
languageName: node
linkType: hard
"mock-require@npm:^3.0.3":
version: 3.0.3
resolution: "mock-require@npm:3.0.3"
dependencies:
get-caller-file: ^1.0.2
normalize-path: ^2.1.1
checksum: 6355c0bd9d7acb5247155142928b0154ace2913264b42d9a611a85d469ed11048f405efe432ffc627a57efb87ec359589a7419bf680b4fd248612311deb031bd
languageName: node
linkType: hard
"module-details-from-path@npm:^1.0.3":
version: 1.0.3
resolution: "module-details-from-path@npm:1.0.3"
@ -21993,6 +22016,13 @@ __metadata:
languageName: node
linkType: hard
"module-not-found-error@npm:^1.0.1":
version: 1.0.1
resolution: "module-not-found-error@npm:1.0.1"
checksum: ebd65339d4d5980dd55cd32dbf112ec02b8e33f30866312b94caeee4783322259f18cf2270e9d2e600df3bd1876c35612b87f5c2525c21885fb1f83e85a9b9b0
languageName: node
linkType: hard
"moleculer@npm:^0.14.21":
version: 0.14.21
resolution: "moleculer@npm:0.14.21"
@ -25622,6 +25652,17 @@ __metadata:
languageName: node
linkType: hard
"proxyquire@npm:^2.1.3":
version: 2.1.3
resolution: "proxyquire@npm:2.1.3"
dependencies:
fill-keys: ^1.0.2
module-not-found-error: ^1.0.1
resolve: ^1.11.1
checksum: a320f1a04d65aeb41625bfd6bbf848492523b730b07926b6c1ed48f9342f2a30c4a4c0b399e07391e76691b65f604773327767c33a8578e5e4ab19299ba46a02
languageName: node
linkType: hard
"prr@npm:~1.0.1":
version: 1.0.1
resolution: "prr@npm:1.0.1"
@ -26163,6 +26204,17 @@ __metadata:
languageName: node
linkType: hard
"react-error-boundary@npm:^3.1.0":
version: 3.1.4
resolution: "react-error-boundary@npm:3.1.4"
dependencies:
"@babel/runtime": ^7.12.5
peerDependencies:
react: ">=16.13.1"
checksum: f36270a5d775a25c8920f854c0d91649ceea417b15b5bc51e270a959b0476647bb79abb4da3be7dd9a4597b029214e8fe43ea914a7f16fa7543c91f784977f1b
languageName: node
linkType: hard
"react-hook-form@npm:^7.30.0":
version: 7.30.0
resolution: "react-hook-form@npm:7.30.0"
@ -27090,6 +27142,19 @@ __metadata:
languageName: node
linkType: hard
"resolve@npm:^1.11.1":
version: 1.22.1
resolution: "resolve@npm:1.22.1"
dependencies:
is-core-module: ^2.9.0
path-parse: ^1.0.7
supports-preserve-symlinks-flag: ^1.0.0
bin:
resolve: bin/resolve
checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e
languageName: node
linkType: hard
"resolve@npm:^2.0.0-next.3":
version: 2.0.0-next.3
resolution: "resolve@npm:2.0.0-next.3"
@ -27113,6 +27178,19 @@ __metadata:
languageName: node
linkType: hard
"resolve@patch:resolve@^1.11.1#~builtin<compat/resolve>":
version: 1.22.1
resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin<compat/resolve>::version=1.22.1&hash=07638b"
dependencies:
is-core-module: ^2.9.0
path-parse: ^1.0.7
supports-preserve-symlinks-flag: ^1.0.0
bin:
resolve: bin/resolve
checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b
languageName: node
linkType: hard
"resolve@patch:resolve@^2.0.0-next.3#~builtin<compat/resolve>":
version: 2.0.0-next.3
resolution: "resolve@patch:resolve@npm%3A2.0.0-next.3#~builtin<compat/resolve>::version=2.0.0-next.3&hash=07638b"

Loading…
Cancel
Save