feat: telemetry (#3279)
* feat: telemetry * fix: build * chore: update * refactor: improve api * fix: test * fix: version * fix: build * feat: support for adding views * fix: typo * fix: version * chore: update * chore(env): `true` -> `on` * fix: metric version
This commit is contained in:
parent
66ee3f6864
commit
0dbc01c330
@ -3,6 +3,7 @@ import { parseDatabaseOptions } from './database';
|
|||||||
import logger from './logger';
|
import logger from './logger';
|
||||||
import plugins from './plugins';
|
import plugins from './plugins';
|
||||||
import resourcer from './resourcer';
|
import resourcer from './resourcer';
|
||||||
|
import { telemetry } from './telemetry';
|
||||||
|
|
||||||
export async function getConfig() {
|
export async function getConfig() {
|
||||||
return {
|
return {
|
||||||
@ -11,6 +12,7 @@ export async function getConfig() {
|
|||||||
plugins,
|
plugins,
|
||||||
cacheManager,
|
cacheManager,
|
||||||
logger,
|
logger,
|
||||||
|
telemetry,
|
||||||
perfHooks: process.env.ENABLE_PERF_HOOKS ? true : false,
|
perfHooks: process.env.ENABLE_PERF_HOOKS ? true : false,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
11
packages/core/app/src/config/telemetry.ts
Normal file
11
packages/core/app/src/config/telemetry.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import { AppTelemetryOptions } from '@nocobase/server';
|
||||||
|
|
||||||
|
export const telemetry: AppTelemetryOptions = {
|
||||||
|
enabled: process.env.TELEMETRY_ENABLED === 'on',
|
||||||
|
metric: {
|
||||||
|
readerName: process.env.TELEMETRY_METRIC_READER,
|
||||||
|
},
|
||||||
|
trace: {
|
||||||
|
processorName: process.env.TELEMETRY_TRACE_PROCESSOR,
|
||||||
|
},
|
||||||
|
};
|
@ -20,6 +20,7 @@
|
|||||||
"@nocobase/resourcer": "0.18.0-alpha.8",
|
"@nocobase/resourcer": "0.18.0-alpha.8",
|
||||||
"@nocobase/sdk": "0.18.0-alpha.8",
|
"@nocobase/sdk": "0.18.0-alpha.8",
|
||||||
"@nocobase/utils": "0.18.0-alpha.8",
|
"@nocobase/utils": "0.18.0-alpha.8",
|
||||||
|
"@nocobase/telemetry": "0.18.0-alpha.8",
|
||||||
"@types/decompress": "4.2.4",
|
"@types/decompress": "4.2.4",
|
||||||
"@types/ini": "^1.3.31",
|
"@types/ini": "^1.3.31",
|
||||||
"@types/koa-send": "^4.1.3",
|
"@types/koa-send": "^4.1.3",
|
||||||
|
@ -42,6 +42,7 @@ import { ApplicationVersion } from './helpers/application-version';
|
|||||||
import { Locale } from './locale';
|
import { Locale } from './locale';
|
||||||
import { Plugin } from './plugin';
|
import { Plugin } from './plugin';
|
||||||
import { InstallOptions, PluginManager } from './plugin-manager';
|
import { InstallOptions, PluginManager } from './plugin-manager';
|
||||||
|
import { TelemetryOptions, Telemetry } from '@nocobase/telemetry';
|
||||||
|
|
||||||
import packageJson from '../package.json';
|
import packageJson from '../package.json';
|
||||||
|
|
||||||
@ -57,6 +58,10 @@ export interface AppLoggerOptions {
|
|||||||
system: SystemLoggerOptions;
|
system: SystemLoggerOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface AppTelemetryOptions extends TelemetryOptions {
|
||||||
|
enabled?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export interface ApplicationOptions {
|
export interface ApplicationOptions {
|
||||||
database?: IDatabaseOptions | Database;
|
database?: IDatabaseOptions | Database;
|
||||||
cacheManager?: CacheManagerOptions;
|
cacheManager?: CacheManagerOptions;
|
||||||
@ -73,6 +78,7 @@ export interface ApplicationOptions {
|
|||||||
name?: string;
|
name?: string;
|
||||||
authManager?: AuthManagerOptions;
|
authManager?: AuthManagerOptions;
|
||||||
perfHooks?: boolean;
|
perfHooks?: boolean;
|
||||||
|
telemetry?: AppTelemetryOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface DefaultState extends KoaDefaultState {
|
export interface DefaultState extends KoaDefaultState {
|
||||||
@ -249,6 +255,12 @@ export class Application<StateT = DefaultState, ContextT = DefaultContext> exten
|
|||||||
return this._locales;
|
return this._locales;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected _telemetry: Telemetry;
|
||||||
|
|
||||||
|
get telemetry() {
|
||||||
|
return this._telemetry;
|
||||||
|
}
|
||||||
|
|
||||||
protected _version: ApplicationVersion;
|
protected _version: ApplicationVersion;
|
||||||
|
|
||||||
get version() {
|
get version() {
|
||||||
@ -352,14 +364,20 @@ export class Application<StateT = DefaultState, ContextT = DefaultContext> exten
|
|||||||
if (options?.reload) {
|
if (options?.reload) {
|
||||||
this.setMaintainingMessage('app reload');
|
this.setMaintainingMessage('app reload');
|
||||||
this.log.info(`app.reload()`, { method: 'load' });
|
this.log.info(`app.reload()`, { method: 'load' });
|
||||||
|
|
||||||
|
if (this.cacheManager) {
|
||||||
|
await this.cacheManager.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.telemetry.started) {
|
||||||
|
await this.telemetry.shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
const oldDb = this._db;
|
const oldDb = this._db;
|
||||||
this.init();
|
this.init();
|
||||||
if (!oldDb.closed()) {
|
if (!oldDb.closed()) {
|
||||||
await oldDb.close();
|
await oldDb.close();
|
||||||
}
|
}
|
||||||
if (this._cacheManager) {
|
|
||||||
await this._cacheManager.close();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this._cacheManager = await createCacheManager(this, this.options.cacheManager);
|
this._cacheManager = await createCacheManager(this, this.options.cacheManager);
|
||||||
@ -372,6 +390,14 @@ export class Application<StateT = DefaultState, ContextT = DefaultContext> exten
|
|||||||
this.setMaintainingMessage('emit beforeLoad');
|
this.setMaintainingMessage('emit beforeLoad');
|
||||||
await this.emitAsync('beforeLoad', this, options);
|
await this.emitAsync('beforeLoad', this, options);
|
||||||
|
|
||||||
|
// Telemetry is initialized after beforeLoad hook
|
||||||
|
// since some configuration may be registered in beforeLoad hook
|
||||||
|
this.telemetry.init();
|
||||||
|
if (this.options.telemetry?.enabled) {
|
||||||
|
// Start collecting telemetry data if enabled
|
||||||
|
this.telemetry.start();
|
||||||
|
}
|
||||||
|
|
||||||
await this.pm.load(options);
|
await this.pm.load(options);
|
||||||
|
|
||||||
this.setMaintainingMessage('emit afterLoad');
|
this.setMaintainingMessage('emit afterLoad');
|
||||||
@ -588,8 +614,12 @@ export class Application<StateT = DefaultState, ContextT = DefaultContext> exten
|
|||||||
this.log.error(e.message, { method: 'stop', err: e.stack });
|
this.log.error(e.message, { method: 'stop', err: e.stack });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._cacheManager) {
|
if (this.cacheManager) {
|
||||||
await this._cacheManager.close();
|
await this.cacheManager.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.telemetry.started) {
|
||||||
|
await this.telemetry.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.emitAsync('afterStop', this, options);
|
await this.emitAsync('afterStop', this, options);
|
||||||
@ -750,6 +780,12 @@ export class Application<StateT = DefaultState, ContextT = DefaultContext> exten
|
|||||||
plugins: plugins || [],
|
plugins: plugins || [],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this._telemetry = new Telemetry({
|
||||||
|
serviceName: `nocobase-${this.name}`,
|
||||||
|
version: this.getVersion(),
|
||||||
|
...options.telemetry,
|
||||||
|
});
|
||||||
|
|
||||||
this._authManager = new AuthManager({
|
this._authManager = new AuthManager({
|
||||||
authKey: 'X-Authenticator',
|
authKey: 'X-Authenticator',
|
||||||
default: 'basic',
|
default: 'basic',
|
||||||
|
2
packages/core/telemetry/.npmignore
Normal file
2
packages/core/telemetry/.npmignore
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/node_modules
|
||||||
|
/src
|
201
packages/core/telemetry/LICENSE
Normal file
201
packages/core/telemetry/LICENSE
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
23
packages/core/telemetry/package.json
Normal file
23
packages/core/telemetry/package.json
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"name": "@nocobase/telemetry",
|
||||||
|
"version": "0.18.0-alpha.8",
|
||||||
|
"description": "nocobase telemetry library",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"main": "./lib/index.js",
|
||||||
|
"types": "./lib/index.d.ts",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/nocobase/nocobase.git",
|
||||||
|
"directory": "packages/telemetry"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@nocobase/utils": "0.18.0-alpha.8",
|
||||||
|
"@opentelemetry/api": "^1.7.0",
|
||||||
|
"@opentelemetry/instrumentation": "^0.46.0",
|
||||||
|
"@opentelemetry/resources": "^1.19.0",
|
||||||
|
"@opentelemetry/sdk-metrics": "^1.19.0",
|
||||||
|
"@opentelemetry/sdk-trace-base": "^1.19.0",
|
||||||
|
"@opentelemetry/sdk-trace-node": "^1.19.0",
|
||||||
|
"@opentelemetry/semantic-conventions": "^1.19.0"
|
||||||
|
}
|
||||||
|
}
|
1
packages/core/telemetry/src/index.ts
Normal file
1
packages/core/telemetry/src/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export * from './telemetry';
|
77
packages/core/telemetry/src/metric.ts
Normal file
77
packages/core/telemetry/src/metric.ts
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
import { Registry } from '@nocobase/utils';
|
||||||
|
import {
|
||||||
|
MetricReader,
|
||||||
|
PeriodicExportingMetricReader,
|
||||||
|
ConsoleMetricExporter,
|
||||||
|
MeterProvider,
|
||||||
|
View,
|
||||||
|
} from '@opentelemetry/sdk-metrics';
|
||||||
|
import { Resource } from '@opentelemetry/resources';
|
||||||
|
import opentelemetry from '@opentelemetry/api';
|
||||||
|
|
||||||
|
export type MetricOptions = {
|
||||||
|
meterName?: string;
|
||||||
|
version?: string;
|
||||||
|
readerName?: string | string[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type GetMetricReader = () => MetricReader;
|
||||||
|
|
||||||
|
export class Metric {
|
||||||
|
meterName: string;
|
||||||
|
version: string;
|
||||||
|
readerName: string | string[];
|
||||||
|
readers = new Registry<GetMetricReader>();
|
||||||
|
provider: MeterProvider;
|
||||||
|
views: View[] = [];
|
||||||
|
|
||||||
|
constructor(options?: MetricOptions) {
|
||||||
|
const { meterName, readerName, version } = options || {};
|
||||||
|
this.readerName = readerName || 'console';
|
||||||
|
this.meterName = meterName || 'nocobase-meter';
|
||||||
|
this.version = version || '';
|
||||||
|
this.registerReader(
|
||||||
|
'console',
|
||||||
|
() =>
|
||||||
|
new PeriodicExportingMetricReader({
|
||||||
|
exporter: new ConsoleMetricExporter(),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
init(resource: Resource) {
|
||||||
|
this.provider = new MeterProvider({ resource, views: this.views });
|
||||||
|
opentelemetry.metrics.setGlobalMeterProvider(this.provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
registerReader(name: string, reader: GetMetricReader) {
|
||||||
|
this.readers.register(name, reader);
|
||||||
|
}
|
||||||
|
|
||||||
|
getReader(name: string) {
|
||||||
|
return this.readers.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
addView(...view: View[]) {
|
||||||
|
this.views.push(...view);
|
||||||
|
}
|
||||||
|
|
||||||
|
getMeter(name?: string, version?: string) {
|
||||||
|
return this.provider.getMeter(name || this.meterName, version || this.version);
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
let readerName = this.readerName;
|
||||||
|
if (typeof readerName === 'string') {
|
||||||
|
readerName = readerName.split(',');
|
||||||
|
}
|
||||||
|
readerName.forEach((name) => {
|
||||||
|
const reader = this.getReader(name)();
|
||||||
|
this.provider.addMetricReader(reader);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
shutdown() {
|
||||||
|
return this.provider.shutdown();
|
||||||
|
}
|
||||||
|
}
|
62
packages/core/telemetry/src/telemetry.ts
Normal file
62
packages/core/telemetry/src/telemetry.ts
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
||||||
|
import { Resource } from '@opentelemetry/resources';
|
||||||
|
import { InstrumentationOption, registerInstrumentations } from '@opentelemetry/instrumentation';
|
||||||
|
import { Metric, MetricOptions } from './metric';
|
||||||
|
import { Trace, TraceOptions } from './trace';
|
||||||
|
|
||||||
|
export interface TelemetryOptions {
|
||||||
|
serviceName?: string;
|
||||||
|
version?: string;
|
||||||
|
trace?: TraceOptions;
|
||||||
|
metric?: MetricOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Telemetry {
|
||||||
|
serviceName: string;
|
||||||
|
version: string;
|
||||||
|
instrumentations: InstrumentationOption[] = [];
|
||||||
|
trace: Trace;
|
||||||
|
metric: Metric;
|
||||||
|
started = false;
|
||||||
|
|
||||||
|
constructor(options?: TelemetryOptions) {
|
||||||
|
const { trace, metric, serviceName, version } = options || {};
|
||||||
|
this.trace = new Trace({ tracerName: `${serviceName}-trace`, version, ...trace });
|
||||||
|
this.metric = new Metric({ meterName: `${serviceName}-meter`, version, ...metric });
|
||||||
|
this.serviceName = serviceName || 'nocobase';
|
||||||
|
this.version = version || '';
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
registerInstrumentations({
|
||||||
|
instrumentations: this.instrumentations,
|
||||||
|
});
|
||||||
|
|
||||||
|
const resource = Resource.default().merge(
|
||||||
|
new Resource({
|
||||||
|
[SemanticResourceAttributes.SERVICE_NAME]: this.serviceName,
|
||||||
|
[SemanticResourceAttributes.SERVICE_VERSION]: this.version,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
this.trace.init(resource);
|
||||||
|
this.metric.init(resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
if (!this.started) {
|
||||||
|
this.trace.start();
|
||||||
|
this.metric.start();
|
||||||
|
}
|
||||||
|
this.started = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
async shutdown() {
|
||||||
|
await Promise.all([this.trace.shutdown(), this.metric.shutdown()]);
|
||||||
|
this.started = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
addInstrumentation(...instrumentation: InstrumentationOption[]) {
|
||||||
|
this.instrumentations.push(...instrumentation);
|
||||||
|
}
|
||||||
|
}
|
62
packages/core/telemetry/src/trace.ts
Normal file
62
packages/core/telemetry/src/trace.ts
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
import { Registry } from '@nocobase/utils';
|
||||||
|
import { BatchSpanProcessor, ConsoleSpanExporter, SpanProcessor } from '@opentelemetry/sdk-trace-base';
|
||||||
|
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
|
||||||
|
import { Resource } from '@opentelemetry/resources';
|
||||||
|
|
||||||
|
export type TraceOptions = {
|
||||||
|
tracerName?: string;
|
||||||
|
version?: string;
|
||||||
|
processorName?: string | string[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type GetSpanProcessor = () => SpanProcessor;
|
||||||
|
|
||||||
|
export class Trace {
|
||||||
|
processorName: string | string[];
|
||||||
|
processors = new Registry<GetSpanProcessor>();
|
||||||
|
tracerName: string;
|
||||||
|
version: string;
|
||||||
|
provider: NodeTracerProvider;
|
||||||
|
|
||||||
|
constructor(options?: TraceOptions) {
|
||||||
|
const { processorName, tracerName, version } = options || {};
|
||||||
|
this.processorName = processorName || 'console';
|
||||||
|
this.tracerName = tracerName || 'nocobase-trace';
|
||||||
|
this.version = version || '';
|
||||||
|
this.registerProcessor('console', () => new BatchSpanProcessor(new ConsoleSpanExporter()));
|
||||||
|
}
|
||||||
|
|
||||||
|
init(resource: Resource) {
|
||||||
|
this.provider = new NodeTracerProvider({
|
||||||
|
resource,
|
||||||
|
});
|
||||||
|
this.provider.register();
|
||||||
|
}
|
||||||
|
|
||||||
|
registerProcessor(name: string, processor: GetSpanProcessor) {
|
||||||
|
this.processors.register(name, processor);
|
||||||
|
}
|
||||||
|
|
||||||
|
getProcessor(name: string) {
|
||||||
|
return this.processors.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
getTracer(name?: string, version?: string) {
|
||||||
|
return this.provider.getTracer(name || this.tracerName, version || this.version);
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
let processorName = this.processorName;
|
||||||
|
if (typeof processorName === 'string') {
|
||||||
|
processorName = processorName.split(',');
|
||||||
|
}
|
||||||
|
processorName.forEach((name) => {
|
||||||
|
const processor = this.getProcessor(name)();
|
||||||
|
this.provider.addSpanProcessor(processor);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
shutdown() {
|
||||||
|
return this.provider.shutdown();
|
||||||
|
}
|
||||||
|
}
|
@ -23,10 +23,16 @@ function tsConfigPathsToAlias() {
|
|||||||
}
|
}
|
||||||
return acc;
|
return acc;
|
||||||
}, []);
|
}, []);
|
||||||
alias.unshift({
|
alias.unshift(
|
||||||
|
{
|
||||||
find: '@nocobase/utils/plugin-symlink',
|
find: '@nocobase/utils/plugin-symlink',
|
||||||
replacement: 'node_modules/@nocobase/utils/plugin-symlink.js',
|
replacement: 'node_modules/@nocobase/utils/plugin-symlink.js',
|
||||||
});
|
},
|
||||||
|
{
|
||||||
|
find: '@opentelemetry/resources',
|
||||||
|
replacement: 'node_modules/@opentelemetry/resources/build/src/index.js',
|
||||||
|
},
|
||||||
|
);
|
||||||
return [
|
return [
|
||||||
{ find: /^~antd\/(.*)/, replacement: 'antd/$1' },
|
{ find: /^~antd\/(.*)/, replacement: 'antd/$1' },
|
||||||
...alias.map((item) => {
|
...alias.map((item) => {
|
||||||
|
233
yarn.lock
233
yarn.lock
@ -4454,6 +4454,100 @@
|
|||||||
"@opencensus/core" "^0.0.8"
|
"@opencensus/core" "^0.0.8"
|
||||||
uuid "^3.2.1"
|
uuid "^3.2.1"
|
||||||
|
|
||||||
|
"@opentelemetry/api@^1.7.0":
|
||||||
|
version "1.7.0"
|
||||||
|
resolved "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz#b139c81999c23e3c8d3c0a7234480e945920fc40"
|
||||||
|
integrity sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==
|
||||||
|
|
||||||
|
"@opentelemetry/context-async-hooks@1.19.0":
|
||||||
|
version "1.19.0"
|
||||||
|
resolved "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.19.0.tgz#86406105280d428f99afccd65b092ad4a3540347"
|
||||||
|
integrity sha512-0i1ECOc9daKK3rjUgDDXf0GDD5XfCou5lXnt2DALIc2qKoruPPcesobNKE54laSVUWnC3jX26RzuOa31g0V32A==
|
||||||
|
|
||||||
|
"@opentelemetry/core@1.19.0":
|
||||||
|
version "1.19.0"
|
||||||
|
resolved "https://registry.npmjs.org/@opentelemetry/core/-/core-1.19.0.tgz#6563bb65465bf232d8435553b9a122d9351c0fbb"
|
||||||
|
integrity sha512-w42AukJh3TP8R0IZZOVJVM/kMWu8g+lm4LzT70WtuKqhwq7KVhcDzZZuZinWZa6TtQCl7Smt2wolEYzpHabOgw==
|
||||||
|
dependencies:
|
||||||
|
"@opentelemetry/semantic-conventions" "1.19.0"
|
||||||
|
|
||||||
|
"@opentelemetry/exporter-prometheus@^0.46.0":
|
||||||
|
version "0.46.0"
|
||||||
|
resolved "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.46.0.tgz#c411a1e8a5266f9f3ddc44a088a538c3c1ee4830"
|
||||||
|
integrity sha512-AXcoCHG31K2PLGizlJJWcfQqZsGfUZkT7ik6C8VJu7U2Cenk0Xhvd3rO+vVNSSjP1+LHkP4MQtqEXpIZttw5cw==
|
||||||
|
dependencies:
|
||||||
|
"@opentelemetry/core" "1.19.0"
|
||||||
|
"@opentelemetry/resources" "1.19.0"
|
||||||
|
"@opentelemetry/sdk-metrics" "1.19.0"
|
||||||
|
|
||||||
|
"@opentelemetry/instrumentation@^0.46.0":
|
||||||
|
version "0.46.0"
|
||||||
|
resolved "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.46.0.tgz#a8a252306f82e2eace489312798592a14eb9830e"
|
||||||
|
integrity sha512-a9TijXZZbk0vI5TGLZl+0kxyFfrXHhX6Svtz7Pp2/VBlCSKrazuULEyoJQrOknJyFWNMEmbbJgOciHCCpQcisw==
|
||||||
|
dependencies:
|
||||||
|
"@types/shimmer" "^1.0.2"
|
||||||
|
import-in-the-middle "1.7.1"
|
||||||
|
require-in-the-middle "^7.1.1"
|
||||||
|
semver "^7.5.2"
|
||||||
|
shimmer "^1.2.1"
|
||||||
|
|
||||||
|
"@opentelemetry/propagator-b3@1.19.0":
|
||||||
|
version "1.19.0"
|
||||||
|
resolved "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.19.0.tgz#9fbf15922aca1e09a599272ba7edb766732f848f"
|
||||||
|
integrity sha512-v7y5IBOKBm0vP3yf0DHzlw4L2gL6tZ0KeeMTaxfO5IuomMffDbrGWcvYFp0Dt4LdZctTSK523rVLBB9FBHBciQ==
|
||||||
|
dependencies:
|
||||||
|
"@opentelemetry/core" "1.19.0"
|
||||||
|
|
||||||
|
"@opentelemetry/propagator-jaeger@1.19.0":
|
||||||
|
version "1.19.0"
|
||||||
|
resolved "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.19.0.tgz#e30913b4ba75b734c7269602902d5a205c802624"
|
||||||
|
integrity sha512-dedkOoTzKg+nYoLWCMp0Im+wo+XkTRW6aXhi8VQRtMW/9SNJGOllCJSu8llToLxMDF0+6zu7OCrKkevAof2tew==
|
||||||
|
dependencies:
|
||||||
|
"@opentelemetry/core" "1.19.0"
|
||||||
|
|
||||||
|
"@opentelemetry/resources@1.19.0", "@opentelemetry/resources@^1.19.0":
|
||||||
|
version "1.19.0"
|
||||||
|
resolved "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.19.0.tgz#2df9e0e8623cd390569243e2c9c15d7cce063c2f"
|
||||||
|
integrity sha512-RgxvKuuMOf7nctOeOvpDjt2BpZvZGr9Y0vf7eGtY5XYZPkh2p7e2qub1S2IArdBMf9kEbz0SfycqCviOu9isqg==
|
||||||
|
dependencies:
|
||||||
|
"@opentelemetry/core" "1.19.0"
|
||||||
|
"@opentelemetry/semantic-conventions" "1.19.0"
|
||||||
|
|
||||||
|
"@opentelemetry/sdk-metrics@1.19.0", "@opentelemetry/sdk-metrics@^1.19.0":
|
||||||
|
version "1.19.0"
|
||||||
|
resolved "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.19.0.tgz#fe8029af29402563eb8dba75a85fc02006ea92c4"
|
||||||
|
integrity sha512-FiMii40zr0Fmys4F1i8gmuCvbinBnBsDeGBr4FQemOf0iPCLytYQm5AZJ/nn4xSc71IgKBQwTFQRAGJI7JvZ4Q==
|
||||||
|
dependencies:
|
||||||
|
"@opentelemetry/core" "1.19.0"
|
||||||
|
"@opentelemetry/resources" "1.19.0"
|
||||||
|
lodash.merge "^4.6.2"
|
||||||
|
|
||||||
|
"@opentelemetry/sdk-trace-base@1.19.0", "@opentelemetry/sdk-trace-base@^1.19.0":
|
||||||
|
version "1.19.0"
|
||||||
|
resolved "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.19.0.tgz#87e629e7080945d955d53c2c12352915f5797cd3"
|
||||||
|
integrity sha512-+IRvUm+huJn2KqfFW3yW/cjvRwJ8Q7FzYHoUNx5Fr0Lws0LxjMJG1uVB8HDpLwm7mg5XXH2M5MF+0jj5cM8BpQ==
|
||||||
|
dependencies:
|
||||||
|
"@opentelemetry/core" "1.19.0"
|
||||||
|
"@opentelemetry/resources" "1.19.0"
|
||||||
|
"@opentelemetry/semantic-conventions" "1.19.0"
|
||||||
|
|
||||||
|
"@opentelemetry/sdk-trace-node@^1.19.0":
|
||||||
|
version "1.19.0"
|
||||||
|
resolved "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.19.0.tgz#9dc6306d9f935a7cf132fce162e7bda28d0ecca5"
|
||||||
|
integrity sha512-TCiEq/cUjM15RFqBRwWomTVbOqzndWL4ILa7ZCu0zbjU1/XY6AgHkgrgAc7vGP6TjRqH4Xryuglol8tcIfbBUQ==
|
||||||
|
dependencies:
|
||||||
|
"@opentelemetry/context-async-hooks" "1.19.0"
|
||||||
|
"@opentelemetry/core" "1.19.0"
|
||||||
|
"@opentelemetry/propagator-b3" "1.19.0"
|
||||||
|
"@opentelemetry/propagator-jaeger" "1.19.0"
|
||||||
|
"@opentelemetry/sdk-trace-base" "1.19.0"
|
||||||
|
semver "^7.5.2"
|
||||||
|
|
||||||
|
"@opentelemetry/semantic-conventions@1.19.0", "@opentelemetry/semantic-conventions@^1.19.0":
|
||||||
|
version "1.19.0"
|
||||||
|
resolved "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.19.0.tgz#0c17f80b45de1c8778dfdf17acb1e9d4c4aa4ba8"
|
||||||
|
integrity sha512-14jRpC8f5c0gPSwoZ7SbEJni1PqI+AhAE8m1bMz6v+RPM4OlP1PT2UHBJj5Qh/ALLPjhVU/aZUK3YyjTUqqQVg==
|
||||||
|
|
||||||
"@pkgr/utils@^2.3.1", "@pkgr/utils@^2.4.2":
|
"@pkgr/utils@^2.3.1", "@pkgr/utils@^2.4.2":
|
||||||
version "2.4.2"
|
version "2.4.2"
|
||||||
resolved "https://registry.npmmirror.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc"
|
resolved "https://registry.npmmirror.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc"
|
||||||
@ -4748,6 +4842,11 @@
|
|||||||
resolved "https://registry.npmmirror.com/@remix-run/router/-/router-1.14.0.tgz#9bc39a5a3a71b81bdb310eba6def5bc3966695b7"
|
resolved "https://registry.npmmirror.com/@remix-run/router/-/router-1.14.0.tgz#9bc39a5a3a71b81bdb310eba6def5bc3966695b7"
|
||||||
integrity sha512-WOHih+ClN7N8oHk9N4JUiMxQJmRVaOxcg8w7F/oHUXzJt920ekASLI/7cYX8XkntDWRhLZtsk6LbGrkgOAvi5A==
|
integrity sha512-WOHih+ClN7N8oHk9N4JUiMxQJmRVaOxcg8w7F/oHUXzJt920ekASLI/7cYX8XkntDWRhLZtsk6LbGrkgOAvi5A==
|
||||||
|
|
||||||
|
"@remix-run/router@1.14.1":
|
||||||
|
version "1.14.1"
|
||||||
|
resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.14.1.tgz#6d2dd03d52e604279c38911afc1079d58c50a755"
|
||||||
|
integrity sha512-Qg4DMQsfPNAs88rb2xkdk03N3bjK4jgX5fR24eHCTR9q6PrhZQZ4UJBPzCHJkIpTRN1UKxx2DzjZmnC+7Lj0Ow==
|
||||||
|
|
||||||
"@restart/hooks@^0.4.7":
|
"@restart/hooks@^0.4.7":
|
||||||
version "0.4.15"
|
version "0.4.15"
|
||||||
resolved "https://registry.npmmirror.com/@restart/hooks/-/hooks-0.4.15.tgz#70990085c9b79d1f3e140db824b29218bdc2b5bb"
|
resolved "https://registry.npmmirror.com/@restart/hooks/-/hooks-0.4.15.tgz#70990085c9b79d1f3e140db824b29218bdc2b5bb"
|
||||||
@ -6304,6 +6403,15 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@types/express" "*"
|
"@types/express" "*"
|
||||||
|
|
||||||
|
"@types/pg@^8.10.9":
|
||||||
|
version "8.10.9"
|
||||||
|
resolved "https://registry.npmjs.org/@types/pg/-/pg-8.10.9.tgz#d20bb948c6268c5bd847e2bf968f1194c5a2355a"
|
||||||
|
integrity sha512-UksbANNE/f8w0wOMxVKKIrLCbEMV+oM1uKejmwXr39olg4xqcfBDbXxObJAt6XxHbDa4XTKOlUEcEltXDX+XLQ==
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
pg-protocol "*"
|
||||||
|
pg-types "^4.0.1"
|
||||||
|
|
||||||
"@types/picomatch@*":
|
"@types/picomatch@*":
|
||||||
version "2.3.3"
|
version "2.3.3"
|
||||||
resolved "https://registry.npmmirror.com/@types/picomatch/-/picomatch-2.3.3.tgz#be60498568c19e989e43fb39aa84be1ed3655e92"
|
resolved "https://registry.npmmirror.com/@types/picomatch/-/picomatch-2.3.3.tgz#be60498568c19e989e43fb39aa84be1ed3655e92"
|
||||||
@ -6426,6 +6534,11 @@
|
|||||||
"@types/mime" "*"
|
"@types/mime" "*"
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/shimmer@^1.0.2":
|
||||||
|
version "1.0.5"
|
||||||
|
resolved "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.5.tgz#491d8984d4510e550bfeb02d518791d7f59d2b88"
|
||||||
|
integrity sha512-9Hp0ObzwwO57DpLFF0InUjUm/II8GmKAvzbefxQTihCb7KI6yc9yzf0nLc4mVdby5N4DRCgQM2wCup9KTieeww==
|
||||||
|
|
||||||
"@types/streamx@*":
|
"@types/streamx@*":
|
||||||
version "2.9.5"
|
version "2.9.5"
|
||||||
resolved "https://registry.npmmirror.com/@types/streamx/-/streamx-2.9.5.tgz#2a4a28d73e521c6799e06e7faa4dabc2139c5733"
|
resolved "https://registry.npmmirror.com/@types/streamx/-/streamx-2.9.5.tgz#2a4a28d73e521c6799e06e7faa4dabc2139c5733"
|
||||||
@ -7221,6 +7334,11 @@ acorn-globals@^6.0.0:
|
|||||||
acorn "^7.1.1"
|
acorn "^7.1.1"
|
||||||
acorn-walk "^7.1.1"
|
acorn-walk "^7.1.1"
|
||||||
|
|
||||||
|
acorn-import-assertions@^1.9.0:
|
||||||
|
version "1.9.0"
|
||||||
|
resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac"
|
||||||
|
integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==
|
||||||
|
|
||||||
acorn-jsx@^5.3.2:
|
acorn-jsx@^5.3.2:
|
||||||
version "5.3.2"
|
version "5.3.2"
|
||||||
resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
|
resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
|
||||||
@ -8439,7 +8557,7 @@ bessel@^1.0.2:
|
|||||||
resolved "https://registry.npmmirror.com/bessel/-/bessel-1.0.2.tgz#828812291e0b62e94959cdea43fac186e8a7202d"
|
resolved "https://registry.npmmirror.com/bessel/-/bessel-1.0.2.tgz#828812291e0b62e94959cdea43fac186e8a7202d"
|
||||||
integrity sha512-Al3nHGQGqDYqqinXhQzmwmcRToe/3WyBv4N8aZc5Pef8xw2neZlR9VPi84Sa23JtgWcucu18HxVZrnI0fn2etw==
|
integrity sha512-Al3nHGQGqDYqqinXhQzmwmcRToe/3WyBv4N8aZc5Pef8xw2neZlR9VPi84Sa23JtgWcucu18HxVZrnI0fn2etw==
|
||||||
|
|
||||||
big-integer@^1.6.44:
|
big-integer@^1.6.44, big-integer@^1.6.48:
|
||||||
version "1.6.52"
|
version "1.6.52"
|
||||||
resolved "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85"
|
resolved "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85"
|
||||||
integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==
|
integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==
|
||||||
@ -9284,6 +9402,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
|
|||||||
inherits "^2.0.1"
|
inherits "^2.0.1"
|
||||||
safe-buffer "^5.0.1"
|
safe-buffer "^5.0.1"
|
||||||
|
|
||||||
|
cjs-module-lexer@^1.2.2:
|
||||||
|
version "1.2.3"
|
||||||
|
resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107"
|
||||||
|
integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==
|
||||||
|
|
||||||
class-utils@^0.3.5:
|
class-utils@^0.3.5:
|
||||||
version "0.3.6"
|
version "0.3.6"
|
||||||
resolved "https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
|
resolved "https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
|
||||||
@ -14808,6 +14931,16 @@ import-fresh@^3.0.0, import-fresh@^3.2.1:
|
|||||||
parent-module "^1.0.0"
|
parent-module "^1.0.0"
|
||||||
resolve-from "^4.0.0"
|
resolve-from "^4.0.0"
|
||||||
|
|
||||||
|
import-in-the-middle@1.7.1:
|
||||||
|
version "1.7.1"
|
||||||
|
resolved "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.7.1.tgz#3e111ff79c639d0bde459bd7ba29dd9fdf357364"
|
||||||
|
integrity sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==
|
||||||
|
dependencies:
|
||||||
|
acorn "^8.8.2"
|
||||||
|
acorn-import-assertions "^1.9.0"
|
||||||
|
cjs-module-lexer "^1.2.2"
|
||||||
|
module-details-from-path "^1.0.3"
|
||||||
|
|
||||||
import-lazy@^2.1.0:
|
import-lazy@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
|
resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
|
||||||
@ -15782,6 +15915,11 @@ jest-worker@^29.7.0:
|
|||||||
merge-stream "^2.0.0"
|
merge-stream "^2.0.0"
|
||||||
supports-color "^8.0.0"
|
supports-color "^8.0.0"
|
||||||
|
|
||||||
|
jmespath@^0.16.0:
|
||||||
|
version "0.16.0"
|
||||||
|
resolved "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076"
|
||||||
|
integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==
|
||||||
|
|
||||||
jose@^4.15.1:
|
jose@^4.15.1:
|
||||||
version "4.15.4"
|
version "4.15.4"
|
||||||
resolved "https://registry.npmmirror.com/jose/-/jose-4.15.4.tgz#02a9a763803e3872cf55f29ecef0dfdcc218cc03"
|
resolved "https://registry.npmmirror.com/jose/-/jose-4.15.4.tgz#02a9a763803e3872cf55f29ecef0dfdcc218cc03"
|
||||||
@ -15971,6 +16109,11 @@ json5@^2.1.2, json5@^2.2.2, json5@^2.2.3:
|
|||||||
resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
|
resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
|
||||||
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
|
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
|
||||||
|
|
||||||
|
jsonata@^2.0.3:
|
||||||
|
version "2.0.3"
|
||||||
|
resolved "https://registry.npmjs.org/jsonata/-/jsonata-2.0.3.tgz#f8971c2891cb1d6ebfeecbfe657ecc38c1b843a5"
|
||||||
|
integrity sha512-Up2H81MUtjqI/dWwWX7p4+bUMfMrQJVMN/jW6clFMTiYP528fBOBNtRu944QhKTs3+IsVWbgMeUTny5fw2VMUA==
|
||||||
|
|
||||||
jsonc-parser@^3.2.0:
|
jsonc-parser@^3.2.0:
|
||||||
version "3.2.0"
|
version "3.2.0"
|
||||||
resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
|
resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
|
||||||
@ -16004,6 +16147,11 @@ jsonparse@^1.2.0, jsonparse@^1.3.1:
|
|||||||
resolved "https://registry.npmmirror.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
|
resolved "https://registry.npmmirror.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
|
||||||
integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
|
integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
|
||||||
|
|
||||||
|
jsonpath-plus@^7.2.0:
|
||||||
|
version "7.2.0"
|
||||||
|
resolved "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.2.0.tgz#7ad94e147b3ed42f7939c315d2b9ce490c5a3899"
|
||||||
|
integrity sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA==
|
||||||
|
|
||||||
jsonwebtoken@^8.5.1:
|
jsonwebtoken@^8.5.1:
|
||||||
version "8.5.1"
|
version "8.5.1"
|
||||||
resolved "https://registry.npmmirror.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
|
resolved "https://registry.npmmirror.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
|
||||||
@ -18445,6 +18593,13 @@ node-releases@^2.0.14:
|
|||||||
resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
|
resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
|
||||||
integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
|
integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
|
||||||
|
|
||||||
|
node-sql-parser@^4.11.0:
|
||||||
|
version "4.17.0"
|
||||||
|
resolved "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-4.17.0.tgz#00d31b9943edd93f5a33cd2db2691df41a1e2225"
|
||||||
|
integrity sha512-3IhovpmUBpcETnoKK/KBdkz2mz53kVG5E1dnqz1QuYvtzdxYZW5xaGGEvW9u6Yyy2ivwR3eUZrn9inmEVef02w==
|
||||||
|
dependencies:
|
||||||
|
big-integer "^1.6.48"
|
||||||
|
|
||||||
node-xlsx@^0.16.1:
|
node-xlsx@^0.16.1:
|
||||||
version "0.16.2"
|
version "0.16.2"
|
||||||
resolved "https://registry.npmmirror.com/node-xlsx/-/node-xlsx-0.16.2.tgz#40f580187eae0e032cac96e958e97cb6ceca09f6"
|
resolved "https://registry.npmmirror.com/node-xlsx/-/node-xlsx-0.16.2.tgz#40f580187eae0e032cac96e958e97cb6ceca09f6"
|
||||||
@ -18737,7 +18892,7 @@ number-is-nan@^1.0.0:
|
|||||||
|
|
||||||
nwsapi@2.2.7, nwsapi@^2.2.0:
|
nwsapi@2.2.7, nwsapi@^2.2.0:
|
||||||
version "2.2.7"
|
version "2.2.7"
|
||||||
resolved "https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30"
|
resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30"
|
||||||
integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==
|
integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==
|
||||||
|
|
||||||
oauth-sign@~0.9.0:
|
oauth-sign@~0.9.0:
|
||||||
@ -18913,7 +19068,7 @@ object.values@^1.1.6, object.values@^1.1.7:
|
|||||||
define-properties "^1.2.0"
|
define-properties "^1.2.0"
|
||||||
es-abstract "^1.22.1"
|
es-abstract "^1.22.1"
|
||||||
|
|
||||||
obuf@^1.0.0, obuf@^1.1.2:
|
obuf@^1.0.0, obuf@^1.1.2, obuf@~1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
|
resolved "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
|
||||||
integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
|
integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
|
||||||
@ -19742,12 +19897,17 @@ pg-int8@1.0.1:
|
|||||||
resolved "https://registry.npmmirror.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
|
resolved "https://registry.npmmirror.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
|
||||||
integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
|
integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
|
||||||
|
|
||||||
|
pg-numeric@1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.npmjs.org/pg-numeric/-/pg-numeric-1.0.2.tgz#816d9a44026086ae8ae74839acd6a09b0636aa3a"
|
||||||
|
integrity sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==
|
||||||
|
|
||||||
pg-pool@^3.6.1:
|
pg-pool@^3.6.1:
|
||||||
version "3.6.1"
|
version "3.6.1"
|
||||||
resolved "https://registry.npmmirror.com/pg-pool/-/pg-pool-3.6.1.tgz#5a902eda79a8d7e3c928b77abf776b3cb7d351f7"
|
resolved "https://registry.npmmirror.com/pg-pool/-/pg-pool-3.6.1.tgz#5a902eda79a8d7e3c928b77abf776b3cb7d351f7"
|
||||||
integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==
|
integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==
|
||||||
|
|
||||||
pg-protocol@^1.6.0:
|
pg-protocol@*, pg-protocol@^1.6.0:
|
||||||
version "1.6.0"
|
version "1.6.0"
|
||||||
resolved "https://registry.npmmirror.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833"
|
resolved "https://registry.npmmirror.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833"
|
||||||
integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==
|
integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==
|
||||||
@ -19763,7 +19923,20 @@ pg-types@^2.1.0:
|
|||||||
postgres-date "~1.0.4"
|
postgres-date "~1.0.4"
|
||||||
postgres-interval "^1.1.0"
|
postgres-interval "^1.1.0"
|
||||||
|
|
||||||
pg@^8.7.3:
|
pg-types@^4.0.1:
|
||||||
|
version "4.0.1"
|
||||||
|
resolved "https://registry.npmjs.org/pg-types/-/pg-types-4.0.1.tgz#31857e89d00a6c66b06a14e907c3deec03889542"
|
||||||
|
integrity sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g==
|
||||||
|
dependencies:
|
||||||
|
pg-int8 "1.0.1"
|
||||||
|
pg-numeric "1.0.2"
|
||||||
|
postgres-array "~3.0.1"
|
||||||
|
postgres-bytea "~3.0.0"
|
||||||
|
postgres-date "~2.0.1"
|
||||||
|
postgres-interval "^3.0.0"
|
||||||
|
postgres-range "^1.1.1"
|
||||||
|
|
||||||
|
pg@^8.11.3, pg@^8.7.3:
|
||||||
version "8.11.3"
|
version "8.11.3"
|
||||||
resolved "https://registry.npmmirror.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb"
|
resolved "https://registry.npmmirror.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb"
|
||||||
integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==
|
integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==
|
||||||
@ -20361,16 +20534,33 @@ postgres-array@~2.0.0:
|
|||||||
resolved "https://registry.npmmirror.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e"
|
resolved "https://registry.npmmirror.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e"
|
||||||
integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==
|
integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==
|
||||||
|
|
||||||
|
postgres-array@~3.0.1:
|
||||||
|
version "3.0.2"
|
||||||
|
resolved "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz#68d6182cb0f7f152a7e60dc6a6889ed74b0a5f98"
|
||||||
|
integrity sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==
|
||||||
|
|
||||||
postgres-bytea@~1.0.0:
|
postgres-bytea@~1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.npmmirror.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35"
|
resolved "https://registry.npmmirror.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35"
|
||||||
integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==
|
integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==
|
||||||
|
|
||||||
|
postgres-bytea@~3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz#9048dc461ac7ba70a6a42d109221619ecd1cb089"
|
||||||
|
integrity sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==
|
||||||
|
dependencies:
|
||||||
|
obuf "~1.1.2"
|
||||||
|
|
||||||
postgres-date@~1.0.4:
|
postgres-date@~1.0.4:
|
||||||
version "1.0.7"
|
version "1.0.7"
|
||||||
resolved "https://registry.npmmirror.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8"
|
resolved "https://registry.npmmirror.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8"
|
||||||
integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==
|
integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==
|
||||||
|
|
||||||
|
postgres-date@~2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.npmjs.org/postgres-date/-/postgres-date-2.0.1.tgz#638b62e5c33764c292d37b08f5257ecb09231457"
|
||||||
|
integrity sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw==
|
||||||
|
|
||||||
postgres-interval@^1.1.0:
|
postgres-interval@^1.1.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.npmmirror.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695"
|
resolved "https://registry.npmmirror.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695"
|
||||||
@ -20378,6 +20568,16 @@ postgres-interval@^1.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
xtend "^4.0.0"
|
xtend "^4.0.0"
|
||||||
|
|
||||||
|
postgres-interval@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz#baf7a8b3ebab19b7f38f07566c7aab0962f0c86a"
|
||||||
|
integrity sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==
|
||||||
|
|
||||||
|
postgres-range@^1.1.1:
|
||||||
|
version "1.1.3"
|
||||||
|
resolved "https://registry.npmjs.org/postgres-range/-/postgres-range-1.1.3.tgz#9ccd7b01ca2789eb3c2e0888b3184225fa859f76"
|
||||||
|
integrity sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g==
|
||||||
|
|
||||||
prelude-ls@^1.2.1:
|
prelude-ls@^1.2.1:
|
||||||
version "1.2.1"
|
version "1.2.1"
|
||||||
resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
||||||
@ -21494,11 +21694,11 @@ react-router-dom@6.3.0, react-router-dom@6.x, react-router-dom@^6.11.2:
|
|||||||
react-router "6.21.0"
|
react-router "6.21.0"
|
||||||
|
|
||||||
react-router@6.21.0, react-router@6.3.0, react-router@^6.11.2:
|
react-router@6.21.0, react-router@6.3.0, react-router@^6.11.2:
|
||||||
version "6.21.0"
|
version "6.21.1"
|
||||||
resolved "https://registry.npmmirror.com/react-router/-/react-router-6.21.0.tgz#6fe3e59877aca3dccceec1801d26991ddf42d12b"
|
resolved "https://registry.npmjs.org/react-router/-/react-router-6.21.1.tgz#8db7ee8d7cfc36513c9a66b44e0897208c33be34"
|
||||||
integrity sha512-hGZ0HXbwz3zw52pLZV3j3+ec+m/PQ9cTpBvqjFQmy2XVUWGn5MD+31oXHb6dVTxYzmAeaiUBYjkoNz66n3RGCg==
|
integrity sha512-W0l13YlMTm1YrpVIOpjCADJqEUpz1vm+CMo47RuFX4Ftegwm6KOYsL5G3eiE52jnJpKvzm6uB/vTKTPKM8dmkA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@remix-run/router" "1.14.0"
|
"@remix-run/router" "1.14.1"
|
||||||
|
|
||||||
react-side-effect@^2.1.0:
|
react-side-effect@^2.1.0:
|
||||||
version "2.1.2"
|
version "2.1.2"
|
||||||
@ -22113,6 +22313,15 @@ require-in-the-middle@^5.0.0:
|
|||||||
module-details-from-path "^1.0.3"
|
module-details-from-path "^1.0.3"
|
||||||
resolve "^1.22.1"
|
resolve "^1.22.1"
|
||||||
|
|
||||||
|
require-in-the-middle@^7.1.1:
|
||||||
|
version "7.2.0"
|
||||||
|
resolved "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.2.0.tgz#b539de8f00955444dc8aed95e17c69b0a4f10fcf"
|
||||||
|
integrity sha512-3TLx5TGyAY6AOqLBoXmHkNql0HIf2RGbuMgCDT2WO/uGVAPJs6h7Kl+bN6TIZGd9bWhWPwnDnTHGtW8Iu77sdw==
|
||||||
|
dependencies:
|
||||||
|
debug "^4.1.1"
|
||||||
|
module-details-from-path "^1.0.3"
|
||||||
|
resolve "^1.22.1"
|
||||||
|
|
||||||
require-main-filename@^1.0.1:
|
require-main-filename@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
|
resolved "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
|
||||||
@ -22598,7 +22807,7 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1:
|
|||||||
resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
||||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||||
|
|
||||||
semver@^7.1.1, semver@^7.1.3, semver@^7.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.4, semver@~7.5.0, semver@~7.5.4:
|
semver@^7.1.1, semver@^7.1.3, semver@^7.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.2, semver@^7.5.4, semver@~7.5.0, semver@~7.5.4:
|
||||||
version "7.5.4"
|
version "7.5.4"
|
||||||
resolved "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
|
resolved "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
|
||||||
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
|
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
|
||||||
@ -22615,7 +22824,7 @@ sequelize-pool@^7.1.0:
|
|||||||
resolved "https://registry.npmmirror.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz#210b391af4002762f823188fd6ecfc7413020768"
|
resolved "https://registry.npmmirror.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz#210b391af4002762f823188fd6ecfc7413020768"
|
||||||
integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==
|
integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==
|
||||||
|
|
||||||
sequelize@^6.26.0:
|
sequelize@^6.26.0, sequelize@^6.35.0:
|
||||||
version "6.35.2"
|
version "6.35.2"
|
||||||
resolved "https://registry.npmmirror.com/sequelize/-/sequelize-6.35.2.tgz#9276d24055a9a07bd6812c89ab402659f5853e70"
|
resolved "https://registry.npmmirror.com/sequelize/-/sequelize-6.35.2.tgz#9276d24055a9a07bd6812c89ab402659f5853e70"
|
||||||
integrity sha512-EdzLaw2kK4/aOnWQ7ed/qh3B6/g+1DvmeXr66RwbcqSm/+QRS9X0LDI5INBibsy4eNJHWIRPo3+QK0zL+IPBHg==
|
integrity sha512-EdzLaw2kK4/aOnWQ7ed/qh3B6/g+1DvmeXr66RwbcqSm/+QRS9X0LDI5INBibsy4eNJHWIRPo3+QK0zL+IPBHg==
|
||||||
@ -22778,7 +22987,7 @@ shell-quote@^1.7.3:
|
|||||||
resolved "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
|
resolved "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
|
||||||
integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
|
integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
|
||||||
|
|
||||||
shimmer@^1.1.0, shimmer@^1.2.0:
|
shimmer@^1.1.0, shimmer@^1.2.0, shimmer@^1.2.1:
|
||||||
version "1.2.1"
|
version "1.2.1"
|
||||||
resolved "https://registry.npmmirror.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337"
|
resolved "https://registry.npmmirror.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337"
|
||||||
integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==
|
integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==
|
||||||
|
Loading…
Reference in New Issue
Block a user