necord 4.1.0 → 4.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
1
  export * from './necord-arguments-host';
2
2
  export * from './necord-execution-context';
3
+ export * from './necord-info-type.enum';
3
4
  export * from './necord-params.factory';
@@ -12,4 +12,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./necord-arguments-host"), exports);
14
14
  __exportStar(require("./necord-execution-context"), exports);
15
+ __exportStar(require("./necord-info-type.enum"), exports);
15
16
  __exportStar(require("./necord-params.factory"), exports);
@@ -4,10 +4,12 @@ import { NecordContextType } from './necord-execution-context';
4
4
  export interface INecordArgumentsHost extends ArgumentsHost {
5
5
  getContext<T = any>(): T;
6
6
  getOptions<T = any>(): T;
7
+ getInfo<T = any>(): T;
7
8
  }
8
9
  export declare class NecordArgumentsHost extends ExecutionContextHost implements INecordArgumentsHost {
9
10
  static create(context: ArgumentsHost): NecordArgumentsHost;
10
11
  getType<TContext extends string = NecordContextType>(): TContext;
11
12
  getContext<T = any>(): T;
12
13
  getOptions<T = any>(): T;
14
+ getInfo<T = any>(): T;
13
15
  }
@@ -18,5 +18,8 @@ class NecordArgumentsHost extends execution_context_host_1.ExecutionContextHost
18
18
  getOptions() {
19
19
  return this.getArgByIndex(1);
20
20
  }
21
+ getInfo() {
22
+ return this.getArgByIndex(2);
23
+ }
21
24
  }
22
25
  exports.NecordArgumentsHost = NecordArgumentsHost;
@@ -0,0 +1,7 @@
1
+ export declare enum NecordInfoType {
2
+ LISTENER = 0,
3
+ SLASH_COMMANDS = 1,
4
+ CONTEXT_MENU = 2,
5
+ MESSAGE_COMPONENT = 3,
6
+ TEXT_COMMAND = 4
7
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NecordInfoType = void 0;
4
+ var NecordInfoType;
5
+ (function (NecordInfoType) {
6
+ NecordInfoType[NecordInfoType["LISTENER"] = 0] = "LISTENER";
7
+ NecordInfoType[NecordInfoType["SLASH_COMMANDS"] = 1] = "SLASH_COMMANDS";
8
+ NecordInfoType[NecordInfoType["CONTEXT_MENU"] = 2] = "CONTEXT_MENU";
9
+ NecordInfoType[NecordInfoType["MESSAGE_COMPONENT"] = 3] = "MESSAGE_COMPONENT";
10
+ NecordInfoType[NecordInfoType["TEXT_COMMAND"] = 4] = "TEXT_COMMAND";
11
+ })(NecordInfoType = exports.NecordInfoType || (exports.NecordInfoType = {}));
@@ -2,7 +2,8 @@ import { ParamData } from '@nestjs/common';
2
2
  import { ParamsFactory } from '@nestjs/core/helpers/external-context-creator';
3
3
  export declare enum NecordParamType {
4
4
  CONTEXT = 0,
5
- OPTIONS = 1
5
+ OPTIONS = 1,
6
+ INFO = 2
6
7
  }
7
8
  export declare class NecordParamsFactory implements ParamsFactory {
8
9
  exchangeKeyForValue(type: number, data: ParamData, args: unknown): any;
@@ -5,6 +5,7 @@ var NecordParamType;
5
5
  (function (NecordParamType) {
6
6
  NecordParamType[NecordParamType["CONTEXT"] = 0] = "CONTEXT";
7
7
  NecordParamType[NecordParamType["OPTIONS"] = 1] = "OPTIONS";
8
+ NecordParamType[NecordParamType["INFO"] = 2] = "INFO";
8
9
  })(NecordParamType = exports.NecordParamType || (exports.NecordParamType = {}));
9
10
  class NecordParamsFactory {
10
11
  exchangeKeyForValue(type, data, args) {
@@ -14,7 +15,9 @@ class NecordParamsFactory {
14
15
  case NecordParamType.CONTEXT:
15
16
  return args[0];
16
17
  case NecordParamType.OPTIONS:
17
- return data ? args[1][data] : args[1];
18
+ return data && args[1] ? args[1][data] : args[1];
19
+ case NecordParamType.INFO:
20
+ return args[2];
18
21
  default:
19
22
  return null;
20
23
  }
@@ -1,3 +1,3 @@
1
1
  import { Type } from '@nestjs/common';
2
2
  import { TransformOptions } from '../interfaces';
3
- export declare const Autocomplete: (autocomplete: Type<TransformOptions>) => MethodDecorator;
3
+ export declare const Autocomplete: (...autocompletes: Type<TransformOptions>[]) => MethodDecorator;
@@ -3,5 +3,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Autocomplete = void 0;
4
4
  const common_1 = require("@nestjs/common");
5
5
  const necord_constants_1 = require("../necord.constants");
6
- const Autocomplete = (autocomplete) => (0, common_1.SetMetadata)(necord_constants_1.AUTOCOMPLETE_METADATA, autocomplete);
6
+ const Autocomplete = (...autocompletes) => (0, common_1.SetMetadata)(necord_constants_1.AUTOCOMPLETE_METADATA, autocompletes);
7
7
  exports.Autocomplete = Autocomplete;
@@ -1,3 +1,2 @@
1
- import { ApplicationCommandPermissionData, Snowflake } from 'discord.js';
1
+ import { Snowflake } from 'discord.js';
2
2
  export declare const Guilds: (guildIds: Snowflake[]) => ClassDecorator & MethodDecorator;
3
- export declare const Permissions: (permissions: ApplicationCommandPermissionData[]) => ClassDecorator & MethodDecorator;
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Permissions = exports.Guilds = void 0;
3
+ exports.Guilds = void 0;
4
4
  const common_1 = require("@nestjs/common");
5
5
  const necord_constants_1 = require("../necord.constants");
6
6
  const Guilds = (guildIds) => (0, common_1.SetMetadata)(necord_constants_1.GUILDS_METADATA, guildIds);
7
7
  exports.Guilds = Guilds;
8
- const Permissions = (permissions) => (0, common_1.SetMetadata)(necord_constants_1.PERMISSIONS_METADATA, permissions);
9
- exports.Permissions = Permissions;
@@ -5,3 +5,4 @@ export * from './guilds.decorator';
5
5
  export * from './listeners.decorator';
6
6
  export * from './options.decorator';
7
7
  export * from './params.decorator';
8
+ export * from './permissions.decorator';
@@ -17,3 +17,4 @@ __exportStar(require("./guilds.decorator"), exports);
17
17
  __exportStar(require("./listeners.decorator"), exports);
18
18
  __exportStar(require("./options.decorator"), exports);
19
19
  __exportStar(require("./params.decorator"), exports);
20
+ __exportStar(require("./permissions.decorator"), exports);
@@ -1,4 +1,5 @@
1
1
  export declare const Context: (...pipes: (import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
2
2
  export declare const Options: (data?: any, ...pipes: (import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
3
+ export declare const Info: (data?: any, ...pipes: (import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
3
4
  export declare const Ctx: (...pipes: (import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
4
5
  export declare const Opts: (data?: any, ...pipes: (import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Opts = exports.Ctx = exports.Options = exports.Context = void 0;
3
+ exports.Opts = exports.Ctx = exports.Info = exports.Options = exports.Context = void 0;
4
4
  const context_1 = require("../context");
5
5
  const necord_constants_1 = require("../necord.constants");
6
6
  const params_util_1 = require("./params.util");
@@ -12,5 +12,6 @@ exports.Options = (0, params_util_1.createNecordPipesParamDecorator)(context_1.N
12
12
  Reflect.defineMetadata(necord_constants_1.OPTIONS_METADATA, options, target[propertyKey]);
13
13
  }
14
14
  ]);
15
+ exports.Info = (0, params_util_1.createNecordPipesParamDecorator)(context_1.NecordParamType.INFO);
15
16
  exports.Ctx = exports.Context;
16
17
  exports.Opts = exports.Options;
@@ -0,0 +1,6 @@
1
+ import { ApplicationCommandPermissionData } from 'discord.js';
2
+ export declare const Permissions: (...permissions: TypedPermissions<unknown>) => ClassDecorator & MethodDecorator;
3
+ export declare const UserPermissions: (...permissions: TypedPermissions<string>) => ClassDecorator & MethodDecorator;
4
+ export declare const RolePermissions: (...permissions: TypedPermissions<string>) => ClassDecorator & MethodDecorator;
5
+ declare type TypedPermissions<T> = Omit<ApplicationCommandPermissionData, T extends string ? 'type' : never>[];
6
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RolePermissions = exports.UserPermissions = exports.Permissions = void 0;
4
+ const necord_constants_1 = require("../necord.constants");
5
+ exports.Permissions = createNecordPermissionsDecorator();
6
+ exports.UserPermissions = createNecordPermissionsDecorator('USER');
7
+ exports.RolePermissions = createNecordPermissionsDecorator('ROLE');
8
+ function createNecordPermissionsDecorator(type) {
9
+ return (...permissions) => (target, propertyKey) => {
10
+ var _a, _b;
11
+ const metadataTarget = (_a = target[propertyKey]) !== null && _a !== void 0 ? _a : target;
12
+ const existing = (_b = Reflect.getMetadata(necord_constants_1.PERMISSIONS_METADATA, metadataTarget)) !== null && _b !== void 0 ? _b : [];
13
+ Reflect.defineMetadata(necord_constants_1.PERMISSIONS_METADATA, existing
14
+ .concat(permissions)
15
+ .map(permission => { var _a; return (Object.assign(Object.assign({}, permission), { type: (_a = permission.type) !== null && _a !== void 0 ? _a : type })); }), metadataTarget);
16
+ };
17
+ }
@@ -1,5 +1,9 @@
1
- import { ClientEvents, DMChannel, Guild, GuildFeatures, GuildMember, Message, NonThreadGuildBasedChannel, PartialMessage, PermissionOverwriteManager, Permissions, PremiumTier, PresenceStatus, Role, ThreadChannel, User, UserFlags, VoiceBasedChannel, VoiceChannel } from 'discord.js';
1
+ import { ClientEvents, CommandInteraction, DMChannel, Guild, GuildFeatures, GuildMember, Message, MessageContextMenuInteraction, NonThreadGuildBasedChannel, PartialMessage, PermissionOverwriteManager, Permissions, PremiumTier, PresenceStatus, Role, ThreadChannel, User, UserContextMenuInteraction, UserFlags, VoiceBasedChannel, VoiceChannel } from 'discord.js';
2
2
  export interface NecordEvents extends ClientEvents {
3
+ textCommand: [Message];
4
+ slashCommand: [CommandInteraction];
5
+ messageContextCommand: [MessageContextMenuInteraction];
6
+ userContextCommand: [UserContextMenuInteraction];
3
7
  guildChannelPermissionsUpdate: [
4
8
  channel: DMChannel | NonThreadGuildBasedChannel,
5
9
  oldPermissions: PermissionOverwriteManager,
@@ -48,6 +48,10 @@ let NecordExplorer = class NecordExplorer {
48
48
  {
49
49
  key: necord_constants_1.GUILDS_METADATA,
50
50
  fn: (key, targets) => this.reflector.getAllAndOverride(key, targets)
51
+ },
52
+ {
53
+ key: necord_constants_1.PERMISSIONS_METADATA,
54
+ fn: (key, targets) => this.reflector.getAllAndMerge(key, targets)
51
55
  }
52
56
  ];
53
57
  for (const command of this.filterProperties(wrapper, metadataKey, optionalKeys)) {
@@ -61,7 +65,7 @@ let NecordExplorer = class NecordExplorer {
61
65
  : subCommands.push(command);
62
66
  }
63
67
  if (commandGroup) {
64
- commandGroup.metadata = this.extractOptionalMetadata([necord_constants_1.GUILDS_METADATA], wrapper.instance);
68
+ commandGroup.metadata = this.extractOptionalMetadata([necord_constants_1.GUILDS_METADATA, necord_constants_1.PERMISSIONS_METADATA], wrapper.instance);
65
69
  commandGroup.options = [...subGroups.values(), ...subCommands];
66
70
  }
67
71
  return commands.concat(commandGroup);
@@ -28,7 +28,7 @@ const decorators_1 = require("./decorators");
28
28
  const necord_registry_1 = require("./necord-registry");
29
29
  const necord_constants_1 = require("./necord.constants");
30
30
  const core_1 = require("@nestjs/core");
31
- const constants_1 = require("@nestjs/core/injector/constants");
31
+ const context_1 = require("./context");
32
32
  let NecordInteractionUpdate = NecordInteractionUpdate_1 = class NecordInteractionUpdate {
33
33
  constructor(registry, options) {
34
34
  this.registry = registry;
@@ -41,16 +41,41 @@ let NecordInteractionUpdate = NecordInteractionUpdate_1 = class NecordInteractio
41
41
  if (client.application.partial) {
42
42
  yield client.application.fetch();
43
43
  }
44
- const commands = new Map([[undefined, []]]);
44
+ const clientCommands = client.application.commands;
45
+ const commandsByGuildMap = new Map([[undefined, []]]);
45
46
  for (const command of this.registry.getApplicationCommands()) {
46
47
  const guilds = (_a = command.metadata[necord_constants_1.GUILDS_METADATA]) !== null && _a !== void 0 ? _a : [].concat(this.options.development);
47
48
  for (const guild of guilds) {
48
- const cmds = (_b = commands.get(guild)) !== null && _b !== void 0 ? _b : [];
49
- commands.set(guild, cmds.concat(command));
49
+ const visitedCommands = (_b = commandsByGuildMap.get(guild)) !== null && _b !== void 0 ? _b : [];
50
+ commandsByGuildMap.set(guild, visitedCommands.concat(command));
50
51
  }
51
52
  }
52
53
  this.logger.log(`Started refreshing application commands.`);
53
- yield Promise.all([...commands.entries()].map(([key, cmds]) => client.application.commands.set(cmds, key)));
54
+ for (const [guild, commands] of commandsByGuildMap.entries()) {
55
+ const registeredCommands = yield clientCommands.set(commands, guild);
56
+ const fullPermissions = commands.map(command => {
57
+ var _a;
58
+ const applicationCommand = registeredCommands.find(x => x.name === command.name);
59
+ return {
60
+ id: applicationCommand.id,
61
+ permissions: (_a = command.metadata[necord_constants_1.PERMISSIONS_METADATA]) !== null && _a !== void 0 ? _a : []
62
+ };
63
+ });
64
+ if (guild) {
65
+ yield clientCommands.permissions.set({
66
+ guild,
67
+ fullPermissions
68
+ });
69
+ continue;
70
+ }
71
+ for (const perm of fullPermissions) {
72
+ yield clientCommands.permissions.set({
73
+ guild,
74
+ command: perm.id,
75
+ permissions: perm.permissions
76
+ });
77
+ }
78
+ }
54
79
  this.logger.log(`Successfully reloaded application commands.`);
55
80
  });
56
81
  }
@@ -59,7 +84,7 @@ let NecordInteractionUpdate = NecordInteractionUpdate_1 = class NecordInteractio
59
84
  return __awaiter(this, void 0, void 0, function* () {
60
85
  if (interaction.isMessageComponent()) {
61
86
  return (_a = this.registry
62
- .getMessageComponent(interaction.componentType, interaction.customId)) === null || _a === void 0 ? void 0 : _a.metadata.execute([interaction], interaction.isSelectMenu() ? interaction.values : undefined);
87
+ .getMessageComponent(interaction.componentType, interaction.customId)) === null || _a === void 0 ? void 0 : _a.metadata.execute([interaction], interaction.isSelectMenu() ? interaction.values : undefined, { type: context_1.NecordInfoType.MESSAGE_COMPONENT });
63
88
  }
64
89
  if (interaction.isContextMenu()) {
65
90
  const options = interaction.isUserContextMenu()
@@ -69,7 +94,9 @@ let NecordInteractionUpdate = NecordInteractionUpdate_1 = class NecordInteractio
69
94
  }
70
95
  : { message: interaction.options.getMessage('message', false) };
71
96
  return (_b = this.registry
72
- .getContextMenu(interaction.targetType, interaction.commandName)) === null || _b === void 0 ? void 0 : _b.metadata.execute([interaction], options);
97
+ .getContextMenu(interaction.targetType, interaction.commandName)) === null || _b === void 0 ? void 0 : _b.metadata.execute([interaction], options, {
98
+ type: context_1.NecordInfoType.CONTEXT_MENU
99
+ });
73
100
  }
74
101
  if (interaction.isCommand() || interaction.isAutocomplete()) {
75
102
  const rootCommand = interaction.commandName;
@@ -79,18 +106,32 @@ let NecordInteractionUpdate = NecordInteractionUpdate_1 = class NecordInteractio
79
106
  if (!command)
80
107
  return;
81
108
  if (interaction.isCommand()) {
82
- return command === null || command === void 0 ? void 0 : command.metadata.execute([interaction], this.transformOptions(command, interaction));
109
+ return command.metadata.execute([interaction], this.transformOptions(command, interaction), { type: context_1.NecordInfoType.SLASH_COMMANDS });
83
110
  }
84
111
  const module = command.metadata.host;
85
- const autocompleteMetadata = command.metadata[necord_constants_1.AUTOCOMPLETE_METADATA];
112
+ const instances = command.metadata[necord_constants_1.AUTOCOMPLETE_METADATA];
86
113
  const { instance: moduleRef } = module.getProviderByKey(core_1.ModuleRef);
87
- if (!module || !autocompleteMetadata || !moduleRef)
114
+ if (!module || !instances || !moduleRef)
88
115
  return;
89
- const autocomplete = yield moduleRef
90
- .resolve(autocompleteMetadata, constants_1.STATIC_CONTEXT, { strict: true })
91
- .catch(() => moduleRef.create(autocompleteMetadata));
92
- const options = yield (autocomplete === null || autocomplete === void 0 ? void 0 : autocomplete.transformOptions(interaction, interaction.options.getFocused(true)));
93
- return interaction.respond(options !== null && options !== void 0 ? options : []);
116
+ const getAutocomplete = (instance) => __awaiter(this, void 0, void 0, function* () {
117
+ const provider = module.getProviderByKey(instance);
118
+ if (provider) {
119
+ return provider.instance;
120
+ }
121
+ module.addProvider({
122
+ provide: instance,
123
+ useValue: yield moduleRef.create(instance)
124
+ });
125
+ return getAutocomplete(instance);
126
+ });
127
+ for (const instance of instances) {
128
+ const autocomplete = yield getAutocomplete(instance);
129
+ const options = yield (autocomplete === null || autocomplete === void 0 ? void 0 : autocomplete.transformOptions(interaction, interaction.options.getFocused(true)));
130
+ if (!options || !Array.isArray(options))
131
+ continue;
132
+ return interaction.respond(options);
133
+ }
134
+ return interaction.respond([]);
94
135
  }
95
136
  });
96
137
  }
@@ -13,6 +13,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.NecordRegistry = void 0;
14
14
  const discord_js_1 = require("discord.js");
15
15
  const common_1 = require("@nestjs/common");
16
+ const context_1 = require("./context");
16
17
  let NecordRegistry = NecordRegistry_1 = class NecordRegistry {
17
18
  constructor(client) {
18
19
  this.client = client;
@@ -23,7 +24,7 @@ let NecordRegistry = NecordRegistry_1 = class NecordRegistry {
23
24
  }
24
25
  registerListeners(listeners) {
25
26
  listeners.forEach(listener => {
26
- this.client[listener.type](listener.event, (...args) => listener.metadata.execute(args));
27
+ this.client[listener.type](listener.event, (...args) => listener.metadata.execute(args, null, { type: context_1.NecordInfoType.LISTENER }));
27
28
  });
28
29
  }
29
30
  addTextCommands(textCommands) {
@@ -27,6 +27,7 @@ const decorators_1 = require("./decorators");
27
27
  const discord_js_1 = require("discord.js");
28
28
  const necord_constants_1 = require("./necord.constants");
29
29
  const necord_registry_1 = require("./necord-registry");
30
+ const context_1 = require("./context");
30
31
  let NecordUpdate = class NecordUpdate {
31
32
  constructor(options, client, registry) {
32
33
  var _a;
@@ -38,7 +39,7 @@ let NecordUpdate = class NecordUpdate {
38
39
  onMessageCreate([message]) {
39
40
  var _a, _b;
40
41
  return __awaiter(this, void 0, void 0, function* () {
41
- if (!message || !((_a = message.content) === null || _a === void 0 ? void 0 : _a.length))
42
+ if (!message || !((_a = message.content) === null || _a === void 0 ? void 0 : _a.length) || message.webhookId || message.author.bot)
42
43
  return;
43
44
  const content = message.content.toLowerCase();
44
45
  const prefix = typeof this.prefix !== 'function' ? this.prefix : yield this.prefix(message);
@@ -48,7 +49,8 @@ let NecordUpdate = class NecordUpdate {
48
49
  const cmd = args.shift();
49
50
  if (!cmd)
50
51
  return;
51
- return (_b = this.registry.getTextCommand(cmd)) === null || _b === void 0 ? void 0 : _b.metadata.execute([message], args);
52
+ return (_b = this.registry
53
+ .getTextCommand(cmd)) === null || _b === void 0 ? void 0 : _b.metadata.execute([message], args, { type: context_1.NecordInfoType.TEXT_COMMAND });
52
54
  });
53
55
  }
54
56
  emit(event, ...args) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "necord",
3
3
  "description": "A module for creating Discord bots using NestJS, based on Discord.js.",
4
- "version": "4.1.0",
4
+ "version": "4.2.2",
5
5
  "scripts": {
6
6
  "build": "rimraf -rf dist && tsc -p tsconfig.json",
7
7
  "prepublish:npm": "npm run build",
@@ -31,7 +31,7 @@
31
31
  "bot framework"
32
32
  ],
33
33
  "license": "MIT",
34
- "homepage": "https://github.com/SocketSomeone/necord/wiki",
34
+ "homepage": "https://necord.org",
35
35
  "repository": {
36
36
  "type": "git",
37
37
  "url": "https://github.com/SocketSomeone/necord"
@@ -50,7 +50,7 @@
50
50
  "@favware/npm-deprecate": "1.0.4",
51
51
  "@nestjs/common": "8.2.6",
52
52
  "@nestjs/core": "8.2.6",
53
- "@types/node": "17.0.10",
53
+ "@types/node": "17.0.13",
54
54
  "@typescript-eslint/eslint-plugin": "4.33.0",
55
55
  "@typescript-eslint/parser": "4.33.0",
56
56
  "discord.js": "13.6.0",
@@ -60,10 +60,10 @@
60
60
  "husky": "7.0.4",
61
61
  "prettier": "2.5.1",
62
62
  "reflect-metadata": "0.1.13",
63
- "release-it": "14.12.3",
63
+ "release-it": "14.12.4",
64
64
  "rimraf": "3.0.2",
65
65
  "rxjs": "7.5.2",
66
- "ts-node": "^10.4.0",
66
+ "ts-node": "10.4.0",
67
67
  "typescript": "4.5.5"
68
68
  },
69
69
  "peerDependencies": {