Skip to content

Commit c3c2bd3

Browse files
authored
feat(node): Register ESM patching hooks in init for supported Node.js versions (#11933)
1 parent 4cc5301 commit c3c2bd3

File tree

10 files changed

+140
-48
lines changed

10 files changed

+140
-48
lines changed

.size-limit.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ module.exports = [
206206
'zlib',
207207
'net',
208208
'tls',
209+
'module',
209210
],
210211
gzip: true,
211212
limit: '180 KB',

dev-packages/node-integration-tests/suites/esm/warn-esm/test.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,34 @@ afterAll(() => {
55
});
66

77
const esmWarning =
8-
'[Sentry] You are using the Sentry SDK with an ESM build. This version of the SDK is not compatible with ESM. Please either build your application with CommonJS, or use v7 of the SDK.';
8+
'[Sentry] You are using Node.js in ESM mode ("import syntax"). The Sentry Node.js SDK is not compatible with ESM in Node.js versions before 18.19.0 or before 20.6.0. Please either build your application with CommonJS ("require() syntax"), or use version 7.x of the Sentry Node.js SDK.';
9+
10+
test("warns if using ESM on Node.js versions that don't support `register()`", async () => {
11+
const nodeMajorVersion = Number(process.versions.node.split('.')[0]);
12+
if (nodeMajorVersion >= 18) {
13+
return;
14+
}
915

10-
test('warns if using ESM', async () => {
1116
const runner = createRunner(__dirname, 'server.mjs').ignore('session', 'sessions', 'event').start();
1217

1318
await runner.makeRequest('get', '/test/success');
1419

1520
expect(runner.getLogs()).toContain(esmWarning);
1621
});
1722

23+
test('does not warn if using ESM on Node.js versions that support `register()`', async () => {
24+
const nodeMajorVersion = Number(process.versions.node.split('.')[0]);
25+
if (nodeMajorVersion < 18) {
26+
return;
27+
}
28+
29+
const runner = createRunner(__dirname, 'server.mjs').ignore('session', 'sessions', 'event').start();
30+
31+
await runner.makeRequest('get', '/test/success');
32+
33+
expect(runner.getLogs()).not.toContain(esmWarning);
34+
});
35+
1836
test('does not warn if using CJS', async () => {
1937
const runner = createRunner(__dirname, 'server.js').ignore('session', 'sessions', 'event').start();
2038

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
import { register } from 'module';
2+
23
register('@opentelemetry/instrumentation/hook.mjs', import.meta.url);
4+
5+
globalThis._sentryEsmLoaderHookRegistered = true;

dev-packages/rollup-utils/npmHelpers.mjs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// @ts-check
2+
13
/**
24
* Rollup config docs: https://rollupjs.org/guide/en/#big-list-of-options
35
*/
@@ -14,6 +16,7 @@ import {
1416
makeCleanupPlugin,
1517
makeDebugBuildStatementReplacePlugin,
1618
makeExtractPolyfillsPlugin,
19+
makeImportMetaUrlReplacePlugin,
1720
makeNodeResolvePlugin,
1821
makeRrwebBuildPlugin,
1922
makeSetSDKSourcePlugin,
@@ -39,6 +42,7 @@ export function makeBaseNPMConfig(options = {}) {
3942
const nodeResolvePlugin = makeNodeResolvePlugin();
4043
const sucrasePlugin = makeSucrasePlugin({ disableESTransforms: !addPolyfills, ...sucrase });
4144
const debugBuildStatementReplacePlugin = makeDebugBuildStatementReplacePlugin();
45+
const importMetaUrlReplacePlugin = makeImportMetaUrlReplacePlugin();
4246
const cleanupPlugin = makeCleanupPlugin();
4347
const extractPolyfillsPlugin = makeExtractPolyfillsPlugin();
4448
const setSdkSourcePlugin = makeSetSDKSourcePlugin('npm');
@@ -105,6 +109,7 @@ export function makeBaseNPMConfig(options = {}) {
105109
setSdkSourcePlugin,
106110
sucrasePlugin,
107111
debugBuildStatementReplacePlugin,
112+
importMetaUrlReplacePlugin,
108113
rrwebBuildPlugin,
109114
cleanupPlugin,
110115
],

dev-packages/rollup-utils/plugins/npmPlugins.mjs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,19 @@ export function makeDebugBuildStatementReplacePlugin() {
117117
});
118118
}
119119

120+
/**
121+
* Because jest doesn't like `import.meta` statements but we still need it in the code base we instead use a magic
122+
* string that we replace with import.meta.url in the build.
123+
*/
124+
export function makeImportMetaUrlReplacePlugin() {
125+
return replace({
126+
preventAssignment: false,
127+
values: {
128+
__IMPORT_META_URL_REPLACEMENT__: 'import.meta.url',
129+
},
130+
});
131+
}
132+
120133
/**
121134
* Creates a plugin to replace build flags of rrweb with either a constant (if passed true/false) or with a safe statement that:
122135
* a) evaluates to `true`

packages/nextjs/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
"access": "public"
6666
},
6767
"dependencies": {
68-
"@opentelemetry/instrumentation-http": "0.51.0",
68+
"@opentelemetry/instrumentation-http": "0.51.1",
6969
"@rollup/plugin-commonjs": "24.0.0",
7070
"@sentry/core": "8.0.0-rc.1",
7171
"@sentry/node": "8.0.0-rc.1",

packages/node/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
"@opentelemetry/instrumentation-fastify": "0.35.0",
6464
"@opentelemetry/instrumentation-graphql": "0.39.0",
6565
"@opentelemetry/instrumentation-hapi": "0.38.0",
66-
"@opentelemetry/instrumentation-http": "0.51.0",
66+
"@opentelemetry/instrumentation-http": "0.51.1",
6767
"@opentelemetry/instrumentation-ioredis": "0.40.0",
6868
"@opentelemetry/instrumentation-koa": "0.39.0",
6969
"@opentelemetry/instrumentation-mongodb": "0.39.0",

packages/node/src/sdk/init.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
import { openTelemetrySetupCheck, setOpenTelemetryContextAsyncContextStrategy } from '@sentry/opentelemetry';
1515
import type { Client, Integration, Options } from '@sentry/types';
1616
import {
17+
GLOBAL_OBJ,
1718
consoleSandbox,
1819
dropUndefinedKeys,
1920
logger,
@@ -25,6 +26,7 @@ import { consoleIntegration } from '../integrations/console';
2526
import { nodeContextIntegration } from '../integrations/context';
2627
import { contextLinesIntegration } from '../integrations/contextlines';
2728

29+
import moduleModule from 'module';
2830
import { httpIntegration } from '../integrations/http';
2931
import { localVariablesIntegration } from '../integrations/local-variables';
3032
import { modulesIntegration } from '../integrations/modules';
@@ -71,6 +73,8 @@ export function getDefaultIntegrations(options: Options): Integration[] {
7173
];
7274
}
7375

76+
declare const __IMPORT_META_URL_REPLACEMENT__: string;
77+
7478
/**
7579
* Initialize Sentry for Node.
7680
*/
@@ -90,13 +94,27 @@ export function init(options: NodeOptions | undefined = {}): void {
9094
}
9195

9296
if (!isCjs()) {
93-
// We want to make sure users see this warning
94-
consoleSandbox(() => {
95-
// eslint-disable-next-line no-console
96-
console.warn(
97-
'[Sentry] You are using the Sentry SDK with an ESM build. This version of the SDK is not compatible with ESM. Please either build your application with CommonJS, or use v7 of the SDK.',
98-
);
99-
});
97+
const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(Number);
98+
99+
// Register hook was added in v20.6.0 and v18.19.0
100+
if (nodeMajor >= 22 || (nodeMajor === 20 && nodeMinor >= 6) || (nodeMajor === 18 && nodeMinor >= 19)) {
101+
// We need to work around using import.meta.url directly because jest complains about it.
102+
const importMetaUrl =
103+
typeof __IMPORT_META_URL_REPLACEMENT__ !== 'undefined' ? __IMPORT_META_URL_REPLACEMENT__ : undefined;
104+
105+
if (!GLOBAL_OBJ._sentryEsmLoaderHookRegistered && importMetaUrl) {
106+
// @ts-expect-error register is available in these versions
107+
moduleModule.register('@opentelemetry/instrumentation/hook.mjs', importMetaUrl);
108+
GLOBAL_OBJ._sentryEsmLoaderHookRegistered = true;
109+
}
110+
} else {
111+
consoleSandbox(() => {
112+
// eslint-disable-next-line no-console
113+
console.warn(
114+
'[Sentry] You are using Node.js in ESM mode ("import syntax"). The Sentry Node.js SDK is not compatible with ESM in Node.js versions before 18.19.0 or before 20.6.0. Please either build your application with CommonJS ("require() syntax"), or use version 7.x of the Sentry Node.js SDK.',
115+
);
116+
});
117+
}
100118
}
101119

102120
setOpenTelemetryContextAsyncContextStrategy();

packages/utils/src/worldwide.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export interface InternalGlobal {
6666
* Keys are `error.stack` strings, values are the metadata.
6767
*/
6868
_sentryModuleMetadata?: Record<string, any>;
69+
_sentryEsmLoaderHookRegistered?: boolean;
6970
}
7071

7172
/** Get's the global object for the current JavaScript runtime */

yarn.lock

Lines changed: 70 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6162,12 +6162,12 @@
61626162
dependencies:
61636163
"@opentelemetry/semantic-conventions" "1.23.0"
61646164

6165-
"@opentelemetry/core@1.24.0":
6166-
version "1.24.0"
6167-
resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.24.0.tgz#5568b6c1328a6b9c94a77f9b2c7f872b852bba40"
6168-
integrity sha512-FP2oN7mVPqcdxJDTTnKExj4mi91EH+DNuArKfHTjPuJWe2K1JfMIVXNfahw1h3onJxQnxS8K0stKkogX05s+Aw==
6165+
"@opentelemetry/core@1.24.1", "@opentelemetry/core@^1.24.1":
6166+
version "1.24.1"
6167+
resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.24.1.tgz#35ab9d2ac9ca938e0ffbdfa40c49c169ac8ba80d"
6168+
integrity sha512-wMSGfsdmibI88K9wB498zXY04yThPexo8jvwNNlm542HZB7XrrMRBbAyKJqG8qDRJwIBdBrPMi4V9ZPW/sqrcg==
61696169
dependencies:
6170-
"@opentelemetry/semantic-conventions" "1.24.0"
6170+
"@opentelemetry/semantic-conventions" "1.24.1"
61716171

61726172
"@opentelemetry/core@^0.12.0":
61736173
version "0.12.0"
@@ -6178,13 +6178,6 @@
61786178
"@opentelemetry/context-base" "^0.12.0"
61796179
semver "^7.1.3"
61806180

6181-
"@opentelemetry/core@^1.24.1":
6182-
version "1.24.1"
6183-
resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.24.1.tgz#35ab9d2ac9ca938e0ffbdfa40c49c169ac8ba80d"
6184-
integrity sha512-wMSGfsdmibI88K9wB498zXY04yThPexo8jvwNNlm542HZB7XrrMRBbAyKJqG8qDRJwIBdBrPMi4V9ZPW/sqrcg==
6185-
dependencies:
6186-
"@opentelemetry/semantic-conventions" "1.24.1"
6187-
61886181
"@opentelemetry/instrumentation-aws-lambda@0.40.0":
61896182
version "0.40.0"
61906183
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.40.0.tgz#5a54025a1eccb4f2f33115a006a6f8a7c6be4ad8"
@@ -6250,14 +6243,14 @@
62506243
"@opentelemetry/instrumentation" "^0.51.0"
62516244
"@opentelemetry/semantic-conventions" "^1.0.0"
62526245

6253-
"@opentelemetry/instrumentation-http@0.51.0":
6254-
version "0.51.0"
6255-
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.51.0.tgz#f23fb24e2eed551859a14486893fe68ba6449de2"
6256-
integrity sha512-6VsGPBnU6iVKWhVBnuRpwrmiHfxt8EYrqfnH2glfsMpsn4xy+O6U0yGlggPLhoYeOVafV3h70EEk5MU0tpsbiw==
6246+
"@opentelemetry/instrumentation-http@0.51.1":
6247+
version "0.51.1"
6248+
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.51.1.tgz#c450f01af42e44cfd1302a527dc391f09e8364c0"
6249+
integrity sha512-6b3nZnFFEz/3xZ6w8bVxctPUWIPWiXuPQ725530JgxnN1cvYFd8CJ75PrHZNjynmzSSnqBkN3ef4R9N+RpMh8Q==
62576250
dependencies:
6258-
"@opentelemetry/core" "1.24.0"
6259-
"@opentelemetry/instrumentation" "0.51.0"
6260-
"@opentelemetry/semantic-conventions" "1.24.0"
6251+
"@opentelemetry/core" "1.24.1"
6252+
"@opentelemetry/instrumentation" "0.51.1"
6253+
"@opentelemetry/semantic-conventions" "1.24.1"
62616254
semver "^7.5.2"
62626255

62636256
"@opentelemetry/instrumentation-ioredis@0.40.0":
@@ -6347,14 +6340,14 @@
63476340
semver "^7.5.2"
63486341
shimmer "^1.2.1"
63496342

6350-
"@opentelemetry/instrumentation@0.51.0", "@opentelemetry/instrumentation@^0.51.0":
6351-
version "0.51.0"
6352-
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.51.0.tgz#93dbe96c87da539081d0ccd07475cfc0b0c61233"
6353-
integrity sha512-Eg/+Od5bEvzpvZQGhvMyKIkrzB9S7jW+6z9LHEI2VXhl/GrqQ3oBqlzJt4tA6pGtxRmqQWKWGM1wAbwDdW/gUA==
6343+
"@opentelemetry/instrumentation@0.51.1", "@opentelemetry/instrumentation@^0.51.1":
6344+
version "0.51.1"
6345+
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.51.1.tgz#46fb2291150ec6923e50b2f094b9407bc726ca9b"
6346+
integrity sha512-JIrvhpgqY6437QIqToyozrUG1h5UhwHkaGK/WAX+fkrpyPtc+RO5FkRtUd9BH0MibabHHvqsnBGKfKVijbmp8w==
63546347
dependencies:
6355-
"@opentelemetry/api-logs" "0.51.0"
6348+
"@opentelemetry/api-logs" "0.51.1"
63566349
"@types/shimmer" "^1.0.2"
6357-
import-in-the-middle "1.7.1"
6350+
import-in-the-middle "1.7.4"
63586351
require-in-the-middle "^7.1.1"
63596352
semver "^7.5.2"
63606353
shimmer "^1.2.1"
@@ -6381,14 +6374,14 @@
63816374
semver "^7.5.2"
63826375
shimmer "^1.2.1"
63836376

6384-
"@opentelemetry/instrumentation@^0.51.1":
6385-
version "0.51.1"
6386-
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.51.1.tgz#46fb2291150ec6923e50b2f094b9407bc726ca9b"
6387-
integrity sha512-JIrvhpgqY6437QIqToyozrUG1h5UhwHkaGK/WAX+fkrpyPtc+RO5FkRtUd9BH0MibabHHvqsnBGKfKVijbmp8w==
6377+
"@opentelemetry/instrumentation@^0.51.0":
6378+
version "0.51.0"
6379+
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.51.0.tgz#93dbe96c87da539081d0ccd07475cfc0b0c61233"
6380+
integrity sha512-Eg/+Od5bEvzpvZQGhvMyKIkrzB9S7jW+6z9LHEI2VXhl/GrqQ3oBqlzJt4tA6pGtxRmqQWKWGM1wAbwDdW/gUA==
63886381
dependencies:
6389-
"@opentelemetry/api-logs" "0.51.1"
6382+
"@opentelemetry/api-logs" "0.51.0"
63906383
"@types/shimmer" "^1.0.2"
6391-
import-in-the-middle "1.7.4"
6384+
import-in-the-middle "1.7.1"
63926385
require-in-the-middle "^7.1.1"
63936386
semver "^7.5.2"
63946387
shimmer "^1.2.1"
@@ -6449,11 +6442,6 @@
64496442
resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.23.0.tgz#627f2721b960fe586b7f72a07912cb7699f06eef"
64506443
integrity sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg==
64516444

6452-
"@opentelemetry/semantic-conventions@1.24.0":
6453-
version "1.24.0"
6454-
resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.24.0.tgz#f074db930a7feb4d64103a9a576c5fbad046fcac"
6455-
integrity sha512-yL0jI6Ltuz8R+Opj7jClGrul6pOoYrdfVmzQS4SITXRPH7I5IRZbrwe/6/v8v4WYMa6MYZG480S1+uc/IGfqsA==
6456-
64576445
"@opentelemetry/semantic-conventions@1.24.1":
64586446
version "1.24.1"
64596447
resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.24.1.tgz#d4bcebda1cb5146d47a2a53daaa7922f8e084dfb"
@@ -8579,6 +8567,11 @@
85798567
resolved "https://registry.yarnpkg.com/@types/node-abi/-/node-abi-3.0.3.tgz#a8334d75fe45ccd4cdb2a6c1ae82540a7a76828c"
85808568
integrity sha512-5oos6sivyXcDEuVC5oX3+wLwfgrGZu4NIOn826PGAjPCHsqp2zSPTGU7H1Tv+GZBOiDUY3nBXY1MdaofSEt4fw==
85818569

8570+
"@types/node-cron@^3.0.11":
8571+
version "3.0.11"
8572+
resolved "https://registry.yarnpkg.com/@types/node-cron/-/node-cron-3.0.11.tgz#70b7131f65038ae63cfe841354c8aba363632344"
8573+
integrity sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg==
8574+
85828575
"@types/node-fetch@^2.6.0":
85838576
version "2.6.2"
85848577
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da"
@@ -8594,6 +8587,13 @@
85948587
dependencies:
85958588
"@types/node" "*"
85968589

8590+
"@types/node-schedule@^2.1.7":
8591+
version "2.1.7"
8592+
resolved "https://registry.yarnpkg.com/@types/node-schedule/-/node-schedule-2.1.7.tgz#79a1e61adc7bbf8d8eaabcef307e07d76cb40d82"
8593+
integrity sha512-G7Z3R9H7r3TowoH6D2pkzUHPhcJrDF4Jz1JOQ80AX0K2DWTHoN9VC94XzFAPNMdbW9TBzMZ3LjpFi7RYdbxtXA==
8594+
dependencies:
8595+
"@types/node" "*"
8596+
85978597
"@types/node@*", "@types/node@>=10.0.0", "@types/node@>=12.12.47", "@types/node@>=13.7.0":
85988598
version "17.0.38"
85998599
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.38.tgz#f8bb07c371ccb1903f3752872c89f44006132947"
@@ -13361,6 +13361,13 @@ critters@0.0.16:
1336113361
postcss "^8.3.7"
1336213362
pretty-bytes "^5.3.0"
1336313363

13364+
cron-parser@^4.2.0:
13365+
version "4.9.0"
13366+
resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.9.0.tgz#0340694af3e46a0894978c6f52a6dbb5c0f11ad5"
13367+
integrity sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==
13368+
dependencies:
13369+
luxon "^3.2.1"
13370+
1336413371
cron@^3.1.6:
1336513372
version "3.1.6"
1336613373
resolved "https://registry.yarnpkg.com/cron/-/cron-3.1.6.tgz#e7e1798a468e017c8d31459ecd7c2d088f97346c"
@@ -21117,6 +21124,11 @@ loglevel@^1.6.8:
2111721124
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114"
2111821125
integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==
2111921126

21127+
long-timeout@0.1.1:
21128+
version "0.1.1"
21129+
resolved "https://registry.yarnpkg.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514"
21130+
integrity sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==
21131+
2112021132
long@^4.0.0:
2112121133
version "4.0.0"
2112221134
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
@@ -21219,7 +21231,7 @@ lunr@^2.3.8:
2121921231
resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1"
2122021232
integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==
2122121233

21222-
luxon@~3.4.0:
21234+
luxon@^3.2.1, luxon@~3.4.0:
2122321235
version "3.4.4"
2122421236
resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af"
2122521237
integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==
@@ -22952,6 +22964,13 @@ node-addon-api@^6.1.0:
2295222964
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76"
2295322965
integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==
2295422966

22967+
node-cron@^3.0.3:
22968+
version "3.0.3"
22969+
resolved "https://registry.yarnpkg.com/node-cron/-/node-cron-3.0.3.tgz#c4bc7173dd96d96c50bdb51122c64415458caff2"
22970+
integrity sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==
22971+
dependencies:
22972+
uuid "8.3.2"
22973+
2295522974
node-fetch@2.6.7, node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7:
2295622975
version "2.6.7"
2295722976
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
@@ -23086,6 +23105,15 @@ node-releases@^2.0.6:
2308623105
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
2308723106
integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
2308823107

23108+
node-schedule@^2.1.1:
23109+
version "2.1.1"
23110+
resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-2.1.1.tgz#6958b2c5af8834954f69bb0a7a97c62b97185de3"
23111+
integrity sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==
23112+
dependencies:
23113+
cron-parser "^4.2.0"
23114+
long-timeout "0.1.1"
23115+
sorted-array-functions "^1.3.0"
23116+
2308923117
node-source-walk@^4.0.0, node-source-walk@^4.2.0:
2309023118
version "4.2.0"
2309123119
resolved "https://registry.yarnpkg.com/node-source-walk/-/node-source-walk-4.2.0.tgz#c2efe731ea8ba9c03c562aa0a9d984e54f27bc2c"
@@ -27604,6 +27632,11 @@ sort-package-json@^1.57.0:
2760427632
is-plain-obj "2.1.0"
2760527633
sort-object-keys "^1.1.3"
2760627634

27635+
sorted-array-functions@^1.3.0:
27636+
version "1.3.0"
27637+
resolved "https://registry.yarnpkg.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz#8605695563294dffb2c9796d602bd8459f7a0dd5"
27638+
integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==
27639+
2760727640
source-list-map@^2.0.0:
2760827641
version "2.0.1"
2760927642
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"

0 commit comments

Comments
 (0)