@astral/pack 1.1.0 → 1.2.0
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.
- package/README.md +25 -0
- package/bin.js +8 -2
- package/cli/enums.d.ts +3 -1
- package/cli/enums.js +2 -0
- package/cli/parseArgs/parseArgs.js +15 -2
- package/cli/types.d.ts +6 -0
- package/commands/build/build.js +4 -15
- package/commands/index.d.ts +1 -0
- package/commands/index.js +1 -0
- package/commands/semanticRelease/defaultConfig.js +1 -5
- package/commands/telegram/index.d.ts +2 -0
- package/commands/telegram/index.js +2 -0
- package/commands/telegram/sendTelegramFailRelease/index.d.ts +1 -0
- package/commands/telegram/sendTelegramFailRelease/index.js +1 -0
- package/commands/telegram/sendTelegramFailRelease/sendTelegramFailRelease.d.ts +9 -0
- package/commands/telegram/sendTelegramFailRelease/sendTelegramFailRelease.js +10 -0
- package/commands/telegram/sendTelegramSuccessRelease/index.d.ts +1 -0
- package/commands/telegram/sendTelegramSuccessRelease/index.js +1 -0
- package/commands/telegram/sendTelegramSuccessRelease/sendTelegramSuccessRelease.d.ts +8 -0
- package/commands/telegram/sendTelegramSuccessRelease/sendTelegramSuccessRelease.js +15 -0
- package/config/ConfigService/ConfigService.d.ts +1 -0
- package/config/ConfigService/ConfigService.js +1 -0
- package/node/bin.js +7 -1
- package/node/cli/enums.d.ts +3 -1
- package/node/cli/enums.js +2 -0
- package/node/cli/parseArgs/parseArgs.js +15 -2
- package/node/cli/types.d.ts +6 -0
- package/node/commands/build/build.js +3 -17
- package/node/commands/index.d.ts +1 -0
- package/node/commands/index.js +1 -0
- package/node/commands/semanticRelease/defaultConfig.js +1 -5
- package/node/commands/telegram/index.d.ts +2 -0
- package/node/commands/telegram/index.js +18 -0
- package/node/commands/telegram/sendTelegramFailRelease/index.d.ts +1 -0
- package/node/commands/telegram/sendTelegramFailRelease/index.js +17 -0
- package/node/commands/telegram/sendTelegramFailRelease/sendTelegramFailRelease.d.ts +9 -0
- package/node/commands/telegram/sendTelegramFailRelease/sendTelegramFailRelease.js +14 -0
- package/node/commands/telegram/sendTelegramSuccessRelease/index.d.ts +1 -0
- package/node/commands/telegram/sendTelegramSuccessRelease/index.js +17 -0
- package/node/commands/telegram/sendTelegramSuccessRelease/sendTelegramSuccessRelease.d.ts +8 -0
- package/node/commands/telegram/sendTelegramSuccessRelease/sendTelegramSuccessRelease.js +19 -0
- package/node/config/ConfigService/ConfigService.d.ts +1 -0
- package/node/config/ConfigService/ConfigService.js +1 -0
- package/node/services/SemanticRelease/SemanticRelease.d.ts +10 -0
- package/node/services/SemanticRelease/SemanticRelease.js +33 -0
- package/node/services/SemanticRelease/index.d.ts +1 -0
- package/node/services/SemanticRelease/index.js +17 -0
- package/node/services/Telegram/Telegram.d.ts +14 -0
- package/node/services/Telegram/Telegram.js +44 -0
- package/node/services/Telegram/index.d.ts +1 -0
- package/node/services/Telegram/index.js +17 -0
- package/node/services/index.d.ts +2 -0
- package/node/services/index.js +2 -0
- package/package.json +1 -1
- package/services/SemanticRelease/SemanticRelease.d.ts +10 -0
- package/services/SemanticRelease/SemanticRelease.js +25 -0
- package/services/SemanticRelease/index.d.ts +1 -0
- package/services/SemanticRelease/index.js +1 -0
- package/services/Telegram/Telegram.d.ts +14 -0
- package/services/Telegram/Telegram.js +39 -0
- package/services/Telegram/index.d.ts +1 -0
- package/services/Telegram/index.js +1 -0
- package/services/index.d.ts +2 -0
- package/services/index.js +2 -0
package/README.md
CHANGED
|
@@ -121,3 +121,28 @@ module.exports = defineConfig({
|
|
|
121
121
|
```
|
|
122
122
|
|
|
123
123
|
Результирующий package.json не будет содержать `engines`.
|
|
124
|
+
|
|
125
|
+
## Отправка уведомлений в telegram
|
|
126
|
+
|
|
127
|
+
Отправляет в telegram уведомление об успешном релизе пакета:
|
|
128
|
+
```shell
|
|
129
|
+
pack send-telegram-success-release --telegram-bot-token=$TELEGRAM_ASTRAL_UI_BOT_TOKEN --telegram-chat-id=$TELEGRAM_RELEASES_CHANNEL_ID
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Пример сообщения:
|
|
133
|
+
```
|
|
134
|
+
🚀 Опубликован @astral/pack версии: 1.0.0
|
|
135
|
+
|
|
136
|
+
👀 Changelog:https://git.astralnalog.ru/frontend.shared/pack/-/releases/v1.0.0
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Отправляет в telegram уведомление об ошибке релиза пакета:
|
|
140
|
+
```shell
|
|
141
|
+
pack send-telegram-fail-release --telegram-bot-token=$TELEGRAM_ASTRAL_UI_BOT_TOKEN --telegram-chat-id=$TELEGRAM_RELEASES_CHANNEL_ID --telegram-ci-job-id=$CI_JOB_ID
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Пример сообщения:
|
|
145
|
+
```
|
|
146
|
+
‼️Ошибка релиза @astral/pack
|
|
147
|
+
https://git.astralnalog.ru/frontend.shared/pack/-/jobs/1239368
|
|
148
|
+
```
|
package/bin.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { build, checkPackageVersion, createRelease } from './commands';
|
|
2
|
+
import { build, checkPackageVersion, createRelease, sendTelegramFailRelease, sendTelegramSuccessRelease, } from './commands';
|
|
3
3
|
import { ConfigService } from './config';
|
|
4
4
|
import { CLICommand, parseArgs } from './cli';
|
|
5
5
|
const start = async () => {
|
|
6
|
-
const { command, packageVersion } = parseArgs();
|
|
6
|
+
const { command, packageVersion, telegram } = parseArgs();
|
|
7
7
|
let configService;
|
|
8
8
|
try {
|
|
9
9
|
configService = new ConfigService();
|
|
@@ -22,6 +22,12 @@ const start = async () => {
|
|
|
22
22
|
case CLICommand.CreateRelease:
|
|
23
23
|
await createRelease(configService);
|
|
24
24
|
break;
|
|
25
|
+
case CLICommand.SendTelegramSuccessRelease:
|
|
26
|
+
await sendTelegramSuccessRelease(telegram, configService);
|
|
27
|
+
break;
|
|
28
|
+
case CLICommand.SendTelegramFailRelease:
|
|
29
|
+
await sendTelegramFailRelease(telegram, configService);
|
|
30
|
+
break;
|
|
25
31
|
}
|
|
26
32
|
};
|
|
27
33
|
start();
|
package/cli/enums.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export declare enum CLICommand {
|
|
2
2
|
Build = "build",
|
|
3
3
|
CheckPackageVersion = "check-package-version",
|
|
4
|
-
CreateRelease = "create-release"
|
|
4
|
+
CreateRelease = "create-release",
|
|
5
|
+
SendTelegramSuccessRelease = "send-telegram-success-release",
|
|
6
|
+
SendTelegramFailRelease = "send-telegram-fail-release"
|
|
5
7
|
}
|
package/cli/enums.js
CHANGED
|
@@ -3,4 +3,6 @@ export var CLICommand;
|
|
|
3
3
|
CLICommand["Build"] = "build";
|
|
4
4
|
CLICommand["CheckPackageVersion"] = "check-package-version";
|
|
5
5
|
CLICommand["CreateRelease"] = "create-release";
|
|
6
|
+
CLICommand["SendTelegramSuccessRelease"] = "send-telegram-success-release";
|
|
7
|
+
CLICommand["SendTelegramFailRelease"] = "send-telegram-fail-release";
|
|
6
8
|
})(CLICommand || (CLICommand = {}));
|
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
import { CLICommand } from '../enums';
|
|
2
|
+
const getArgValue = (arg) => arg.split('=')[1];
|
|
2
3
|
export const parseArgs = () => process.argv.reduce((result, arg) => {
|
|
3
4
|
if (Object.values(CLICommand).includes(arg)) {
|
|
4
5
|
result.command = arg;
|
|
5
6
|
}
|
|
6
7
|
if (arg.includes('--packageVersion')) {
|
|
7
|
-
result.packageVersion = arg
|
|
8
|
+
result.packageVersion = getArgValue(arg);
|
|
9
|
+
}
|
|
10
|
+
if (arg.includes('--telegram-chat-id')) {
|
|
11
|
+
result.telegram.chatId = getArgValue(arg);
|
|
12
|
+
}
|
|
13
|
+
if (arg.includes('--telegram-bot-token')) {
|
|
14
|
+
result.telegram.botToken = getArgValue(arg);
|
|
15
|
+
}
|
|
16
|
+
if (arg.includes('--telegram-package-name')) {
|
|
17
|
+
result.telegram.packageName = getArgValue(arg);
|
|
18
|
+
}
|
|
19
|
+
if (arg.includes('--telegram-ci-job-id')) {
|
|
20
|
+
result.telegram.ciJobId = getArgValue(arg);
|
|
8
21
|
}
|
|
9
22
|
return result;
|
|
10
|
-
}, { command: CLICommand.Build });
|
|
23
|
+
}, { command: CLICommand.Build, telegram: {} });
|
package/cli/types.d.ts
CHANGED
package/commands/build/build.js
CHANGED
|
@@ -1,29 +1,18 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
1
|
import { compileJs } from '../compileJs';
|
|
4
2
|
import { generatePackageJson } from '../generatePackageJson';
|
|
5
3
|
import { compileTs } from '../compileTs';
|
|
6
|
-
import { logger } from '../../services';
|
|
4
|
+
import { createSemanticRelease, logger } from '../../services';
|
|
7
5
|
import { rmDist } from '../rmDist';
|
|
8
6
|
import { copyStatic } from '../copyStatic';
|
|
9
7
|
import { copyDoc } from '../copyDoc';
|
|
10
8
|
export const build = async (params, config) => {
|
|
11
|
-
const { packPrivateDirPath, semanticRelease, projectPath } = config;
|
|
12
9
|
let newPackageVersion = '';
|
|
13
|
-
const versionsFilePath = path.join(packPrivateDirPath, semanticRelease.versionsFileName);
|
|
14
10
|
if (params.packageVersion) {
|
|
15
11
|
newPackageVersion = params.packageVersion;
|
|
16
12
|
}
|
|
17
13
|
else {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const { currentVersion, nextVersion } = require(`${packPrivateDirPath}/${semanticRelease.versionsFileName}`);
|
|
21
|
-
newPackageVersion = nextVersion;
|
|
22
|
-
logger.info('Версия пакета взята из файла', versionsFilePath, {
|
|
23
|
-
currentVersion,
|
|
24
|
-
nextVersion,
|
|
25
|
-
});
|
|
26
|
-
}
|
|
14
|
+
const semanticRelease = createSemanticRelease(config);
|
|
15
|
+
newPackageVersion = semanticRelease.parseVersions().nextVersion;
|
|
27
16
|
}
|
|
28
17
|
if (!newPackageVersion) {
|
|
29
18
|
const errorMessage = 'Не указана версия пакета для сборки';
|
|
@@ -35,7 +24,7 @@ export const build = async (params, config) => {
|
|
|
35
24
|
if (config.copyStaticFiles) {
|
|
36
25
|
await copyStatic(config.copyStaticFiles, config);
|
|
37
26
|
}
|
|
38
|
-
const originPackageJson =
|
|
27
|
+
const originPackageJson = config.parseOriginPackageJson();
|
|
39
28
|
const { lang } = config;
|
|
40
29
|
if (lang === 'js') {
|
|
41
30
|
await compileJs({ originPackageJson }, config);
|
package/commands/index.d.ts
CHANGED
package/commands/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sendTelegramFailRelease';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sendTelegramFailRelease';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ConfigService } from '../../../config';
|
|
2
|
+
type Params = {
|
|
3
|
+
chatId?: string;
|
|
4
|
+
botToken?: string;
|
|
5
|
+
packageName?: string;
|
|
6
|
+
ciJobId?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const sendTelegramFailRelease: ({ chatId, botToken, packageName, ciJobId }: Params, config: ConfigService) => Promise<void>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createTelegram } from '../../../services';
|
|
2
|
+
export const sendTelegramFailRelease = async ({ chatId, botToken, packageName, ciJobId }, config) => {
|
|
3
|
+
if (!ciJobId) {
|
|
4
|
+
throw new Error('Не указан ciJobId');
|
|
5
|
+
}
|
|
6
|
+
const { repositoryUrl } = config.semanticRelease;
|
|
7
|
+
const telegram = createTelegram({ chatId, botToken });
|
|
8
|
+
const { name } = config.parseOriginPackageJson();
|
|
9
|
+
await telegram.sendMessage(`‼️ Ошибка релиза ${packageName || name}:\n ${repositoryUrl}/-/jobs/${ciJobId}`);
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sendTelegramSuccessRelease';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sendTelegramSuccessRelease';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ConfigService } from '../../../config';
|
|
2
|
+
type Params = {
|
|
3
|
+
chatId?: string;
|
|
4
|
+
botToken?: string;
|
|
5
|
+
packageName?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const sendTelegramSuccessRelease: ({ chatId, packageName, botToken }: Params, config: ConfigService) => Promise<void>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createSemanticRelease, createTelegram, logger, } from '../../../services';
|
|
2
|
+
export const sendTelegramSuccessRelease = async ({ chatId, packageName, botToken }, config) => {
|
|
3
|
+
const { semanticRelease: semanticReleaseConfig } = config;
|
|
4
|
+
const { repositoryUrl } = semanticReleaseConfig;
|
|
5
|
+
if (!chatId || !botToken) {
|
|
6
|
+
const errorMessage = 'Не указан chatId или botToken для Telegram';
|
|
7
|
+
logger.error(errorMessage);
|
|
8
|
+
throw Error(errorMessage);
|
|
9
|
+
}
|
|
10
|
+
const semanticRelease = createSemanticRelease(config);
|
|
11
|
+
const newPackageVersion = semanticRelease.parseVersions().nextVersion;
|
|
12
|
+
const telegram = createTelegram({ chatId, botToken });
|
|
13
|
+
const { name } = config.parseOriginPackageJson();
|
|
14
|
+
await telegram.sendMessage(`🚀 Опубликован ${packageName || name} версии:${newPackageVersion}\n\n👀 Changelog:${repositoryUrl}/-/releases/v${newPackageVersion}`);
|
|
15
|
+
};
|
|
@@ -23,6 +23,7 @@ export declare class ConfigService {
|
|
|
23
23
|
};
|
|
24
24
|
get packageExports(): import("../types").PackageExports | undefined;
|
|
25
25
|
get omitPackageJsonProps(): string[] | undefined;
|
|
26
|
+
parseOriginPackageJson: () => Record<string, unknown>;
|
|
26
27
|
private parseConfig;
|
|
27
28
|
private checkLanguage;
|
|
28
29
|
}
|
|
@@ -54,6 +54,7 @@ export class ConfigService {
|
|
|
54
54
|
get omitPackageJsonProps() {
|
|
55
55
|
return this.config.omitPackageJsonProps;
|
|
56
56
|
}
|
|
57
|
+
parseOriginPackageJson = () => JSON.parse(fs.readFileSync(path.join(this.projectPath, 'package.json'), 'utf8'));
|
|
57
58
|
parseConfig = () => {
|
|
58
59
|
const configPath = path.join(this.projectPath, this.configName);
|
|
59
60
|
if (!fs.existsSync(configPath)) {
|
package/node/bin.js
CHANGED
|
@@ -5,7 +5,7 @@ const commands_1 = require("./commands");
|
|
|
5
5
|
const config_1 = require("./config");
|
|
6
6
|
const cli_1 = require("./cli");
|
|
7
7
|
const start = async () => {
|
|
8
|
-
const { command, packageVersion } = (0, cli_1.parseArgs)();
|
|
8
|
+
const { command, packageVersion, telegram } = (0, cli_1.parseArgs)();
|
|
9
9
|
let configService;
|
|
10
10
|
try {
|
|
11
11
|
configService = new config_1.ConfigService();
|
|
@@ -24,6 +24,12 @@ const start = async () => {
|
|
|
24
24
|
case cli_1.CLICommand.CreateRelease:
|
|
25
25
|
await (0, commands_1.createRelease)(configService);
|
|
26
26
|
break;
|
|
27
|
+
case cli_1.CLICommand.SendTelegramSuccessRelease:
|
|
28
|
+
await (0, commands_1.sendTelegramSuccessRelease)(telegram, configService);
|
|
29
|
+
break;
|
|
30
|
+
case cli_1.CLICommand.SendTelegramFailRelease:
|
|
31
|
+
await (0, commands_1.sendTelegramFailRelease)(telegram, configService);
|
|
32
|
+
break;
|
|
27
33
|
}
|
|
28
34
|
};
|
|
29
35
|
start();
|
package/node/cli/enums.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export declare enum CLICommand {
|
|
2
2
|
Build = "build",
|
|
3
3
|
CheckPackageVersion = "check-package-version",
|
|
4
|
-
CreateRelease = "create-release"
|
|
4
|
+
CreateRelease = "create-release",
|
|
5
|
+
SendTelegramSuccessRelease = "send-telegram-success-release",
|
|
6
|
+
SendTelegramFailRelease = "send-telegram-fail-release"
|
|
5
7
|
}
|
package/node/cli/enums.js
CHANGED
|
@@ -6,4 +6,6 @@ var CLICommand;
|
|
|
6
6
|
CLICommand["Build"] = "build";
|
|
7
7
|
CLICommand["CheckPackageVersion"] = "check-package-version";
|
|
8
8
|
CLICommand["CreateRelease"] = "create-release";
|
|
9
|
+
CLICommand["SendTelegramSuccessRelease"] = "send-telegram-success-release";
|
|
10
|
+
CLICommand["SendTelegramFailRelease"] = "send-telegram-fail-release";
|
|
9
11
|
})(CLICommand || (exports.CLICommand = CLICommand = {}));
|
|
@@ -2,13 +2,26 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseArgs = void 0;
|
|
4
4
|
const enums_1 = require("../enums");
|
|
5
|
+
const getArgValue = (arg) => arg.split('=')[1];
|
|
5
6
|
const parseArgs = () => process.argv.reduce((result, arg) => {
|
|
6
7
|
if (Object.values(enums_1.CLICommand).includes(arg)) {
|
|
7
8
|
result.command = arg;
|
|
8
9
|
}
|
|
9
10
|
if (arg.includes('--packageVersion')) {
|
|
10
|
-
result.packageVersion = arg
|
|
11
|
+
result.packageVersion = getArgValue(arg);
|
|
12
|
+
}
|
|
13
|
+
if (arg.includes('--telegram-chat-id')) {
|
|
14
|
+
result.telegram.chatId = getArgValue(arg);
|
|
15
|
+
}
|
|
16
|
+
if (arg.includes('--telegram-bot-token')) {
|
|
17
|
+
result.telegram.botToken = getArgValue(arg);
|
|
18
|
+
}
|
|
19
|
+
if (arg.includes('--telegram-package-name')) {
|
|
20
|
+
result.telegram.packageName = getArgValue(arg);
|
|
21
|
+
}
|
|
22
|
+
if (arg.includes('--telegram-ci-job-id')) {
|
|
23
|
+
result.telegram.ciJobId = getArgValue(arg);
|
|
11
24
|
}
|
|
12
25
|
return result;
|
|
13
|
-
}, { command: enums_1.CLICommand.Build });
|
|
26
|
+
}, { command: enums_1.CLICommand.Build, telegram: {} });
|
|
14
27
|
exports.parseArgs = parseArgs;
|
package/node/cli/types.d.ts
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.build = void 0;
|
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
4
|
const compileJs_1 = require("../compileJs");
|
|
10
5
|
const generatePackageJson_1 = require("../generatePackageJson");
|
|
11
6
|
const compileTs_1 = require("../compileTs");
|
|
@@ -14,22 +9,13 @@ const rmDist_1 = require("../rmDist");
|
|
|
14
9
|
const copyStatic_1 = require("../copyStatic");
|
|
15
10
|
const copyDoc_1 = require("../copyDoc");
|
|
16
11
|
const build = async (params, config) => {
|
|
17
|
-
const { packPrivateDirPath, semanticRelease, projectPath } = config;
|
|
18
12
|
let newPackageVersion = '';
|
|
19
|
-
const versionsFilePath = path_1.default.join(packPrivateDirPath, semanticRelease.versionsFileName);
|
|
20
13
|
if (params.packageVersion) {
|
|
21
14
|
newPackageVersion = params.packageVersion;
|
|
22
15
|
}
|
|
23
16
|
else {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const { currentVersion, nextVersion } = require(`${packPrivateDirPath}/${semanticRelease.versionsFileName}`);
|
|
27
|
-
newPackageVersion = nextVersion;
|
|
28
|
-
services_1.logger.info('Версия пакета взята из файла', versionsFilePath, {
|
|
29
|
-
currentVersion,
|
|
30
|
-
nextVersion,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
17
|
+
const semanticRelease = (0, services_1.createSemanticRelease)(config);
|
|
18
|
+
newPackageVersion = semanticRelease.parseVersions().nextVersion;
|
|
33
19
|
}
|
|
34
20
|
if (!newPackageVersion) {
|
|
35
21
|
const errorMessage = 'Не указана версия пакета для сборки';
|
|
@@ -41,7 +27,7 @@ const build = async (params, config) => {
|
|
|
41
27
|
if (config.copyStaticFiles) {
|
|
42
28
|
await (0, copyStatic_1.copyStatic)(config.copyStaticFiles, config);
|
|
43
29
|
}
|
|
44
|
-
const originPackageJson =
|
|
30
|
+
const originPackageJson = config.parseOriginPackageJson();
|
|
45
31
|
const { lang } = config;
|
|
46
32
|
if (lang === 'js') {
|
|
47
33
|
await (0, compileJs_1.compileJs)({ originPackageJson }, config);
|
package/node/commands/index.d.ts
CHANGED
package/node/commands/index.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getDefaultConfig = exports.commitAnalyzerPlugin = exports.defaultBranches = void 0;
|
|
4
|
-
exports.defaultBranches = [
|
|
5
|
-
'main',
|
|
6
|
-
'feat/build',
|
|
7
|
-
{ name: 'rc', prerelease: true },
|
|
8
|
-
];
|
|
4
|
+
exports.defaultBranches = ['main', { name: 'rc', prerelease: true }];
|
|
9
5
|
exports.commitAnalyzerPlugin = [
|
|
10
6
|
'@semantic-release/commit-analyzer',
|
|
11
7
|
{
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./sendTelegramFailRelease"), exports);
|
|
18
|
+
__exportStar(require("./sendTelegramSuccessRelease"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sendTelegramFailRelease';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./sendTelegramFailRelease"), exports);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ConfigService } from '../../../config';
|
|
2
|
+
type Params = {
|
|
3
|
+
chatId?: string;
|
|
4
|
+
botToken?: string;
|
|
5
|
+
packageName?: string;
|
|
6
|
+
ciJobId?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const sendTelegramFailRelease: ({ chatId, botToken, packageName, ciJobId }: Params, config: ConfigService) => Promise<void>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendTelegramFailRelease = void 0;
|
|
4
|
+
const services_1 = require("../../../services");
|
|
5
|
+
const sendTelegramFailRelease = async ({ chatId, botToken, packageName, ciJobId }, config) => {
|
|
6
|
+
if (!ciJobId) {
|
|
7
|
+
throw new Error('Не указан ciJobId');
|
|
8
|
+
}
|
|
9
|
+
const { repositoryUrl } = config.semanticRelease;
|
|
10
|
+
const telegram = (0, services_1.createTelegram)({ chatId, botToken });
|
|
11
|
+
const { name } = config.parseOriginPackageJson();
|
|
12
|
+
await telegram.sendMessage(`‼️ Ошибка релиза ${packageName || name}:\n ${repositoryUrl}/-/jobs/${ciJobId}`);
|
|
13
|
+
};
|
|
14
|
+
exports.sendTelegramFailRelease = sendTelegramFailRelease;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sendTelegramSuccessRelease';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./sendTelegramSuccessRelease"), exports);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ConfigService } from '../../../config';
|
|
2
|
+
type Params = {
|
|
3
|
+
chatId?: string;
|
|
4
|
+
botToken?: string;
|
|
5
|
+
packageName?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const sendTelegramSuccessRelease: ({ chatId, packageName, botToken }: Params, config: ConfigService) => Promise<void>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendTelegramSuccessRelease = void 0;
|
|
4
|
+
const services_1 = require("../../../services");
|
|
5
|
+
const sendTelegramSuccessRelease = async ({ chatId, packageName, botToken }, config) => {
|
|
6
|
+
const { semanticRelease: semanticReleaseConfig } = config;
|
|
7
|
+
const { repositoryUrl } = semanticReleaseConfig;
|
|
8
|
+
if (!chatId || !botToken) {
|
|
9
|
+
const errorMessage = 'Не указан chatId или botToken для Telegram';
|
|
10
|
+
services_1.logger.error(errorMessage);
|
|
11
|
+
throw Error(errorMessage);
|
|
12
|
+
}
|
|
13
|
+
const semanticRelease = (0, services_1.createSemanticRelease)(config);
|
|
14
|
+
const newPackageVersion = semanticRelease.parseVersions().nextVersion;
|
|
15
|
+
const telegram = (0, services_1.createTelegram)({ chatId, botToken });
|
|
16
|
+
const { name } = config.parseOriginPackageJson();
|
|
17
|
+
await telegram.sendMessage(`🚀 Опубликован ${packageName || name} версии:${newPackageVersion}\n\n👀 Changelog:${repositoryUrl}/-/releases/v${newPackageVersion}`);
|
|
18
|
+
};
|
|
19
|
+
exports.sendTelegramSuccessRelease = sendTelegramSuccessRelease;
|
|
@@ -23,6 +23,7 @@ export declare class ConfigService {
|
|
|
23
23
|
};
|
|
24
24
|
get packageExports(): import("../types").PackageExports | undefined;
|
|
25
25
|
get omitPackageJsonProps(): string[] | undefined;
|
|
26
|
+
parseOriginPackageJson: () => Record<string, unknown>;
|
|
26
27
|
private parseConfig;
|
|
27
28
|
private checkLanguage;
|
|
28
29
|
}
|
|
@@ -93,6 +93,7 @@ class ConfigService {
|
|
|
93
93
|
get omitPackageJsonProps() {
|
|
94
94
|
return this.config.omitPackageJsonProps;
|
|
95
95
|
}
|
|
96
|
+
parseOriginPackageJson = () => JSON.parse(fs_1.default.readFileSync(path_1.default.join(this.projectPath, 'package.json'), 'utf8'));
|
|
96
97
|
parseConfig = () => {
|
|
97
98
|
const configPath = path_1.default.join(this.projectPath, this.configName);
|
|
98
99
|
if (!fs_1.default.existsSync(configPath)) {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ConfigService } from '../../config';
|
|
2
|
+
export declare class SemanticRelease {
|
|
3
|
+
private readonly _config;
|
|
4
|
+
constructor(_config: ConfigService);
|
|
5
|
+
parseVersions: () => {
|
|
6
|
+
currentVersion: any;
|
|
7
|
+
nextVersion: any;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare const createSemanticRelease: (config: ConfigService) => SemanticRelease;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createSemanticRelease = exports.SemanticRelease = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const Logger_1 = require("../Logger");
|
|
10
|
+
class SemanticRelease {
|
|
11
|
+
_config;
|
|
12
|
+
constructor(_config) {
|
|
13
|
+
this._config = _config;
|
|
14
|
+
}
|
|
15
|
+
parseVersions = () => {
|
|
16
|
+
const { packPrivateDirPath, semanticRelease } = this._config;
|
|
17
|
+
const versionsFilePath = path_1.default.join(packPrivateDirPath, semanticRelease.versionsFileName);
|
|
18
|
+
if (!fs_1.default.existsSync(versionsFilePath)) {
|
|
19
|
+
throw Error('Файл с версиями не найден');
|
|
20
|
+
}
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
22
|
+
const { currentVersion, nextVersion } = require(`${packPrivateDirPath}/${semanticRelease.versionsFileName}`);
|
|
23
|
+
const versions = {
|
|
24
|
+
currentVersion,
|
|
25
|
+
nextVersion,
|
|
26
|
+
};
|
|
27
|
+
Logger_1.logger.info('Версия пакета взята из файла', versionsFilePath, versions);
|
|
28
|
+
return versions;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
exports.SemanticRelease = SemanticRelease;
|
|
32
|
+
const createSemanticRelease = (config) => new SemanticRelease(config);
|
|
33
|
+
exports.createSemanticRelease = createSemanticRelease;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SemanticRelease';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./SemanticRelease"), exports);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Logger } from '../Logger';
|
|
2
|
+
type Params = {
|
|
3
|
+
chatId?: string;
|
|
4
|
+
botToken?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare class Telegram {
|
|
7
|
+
private readonly _logger;
|
|
8
|
+
private readonly timeout;
|
|
9
|
+
private readonly _params;
|
|
10
|
+
constructor(params: Params, _logger: Logger);
|
|
11
|
+
sendMessage: (text: string) => Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export declare const createTelegram: (params: Params) => Telegram;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTelegram = exports.Telegram = void 0;
|
|
4
|
+
const node_url_1 = require("node:url");
|
|
5
|
+
const Logger_1 = require("../Logger");
|
|
6
|
+
class Telegram {
|
|
7
|
+
_logger;
|
|
8
|
+
// 10 секунд
|
|
9
|
+
timeout = 10_000;
|
|
10
|
+
_params;
|
|
11
|
+
constructor(params, _logger) {
|
|
12
|
+
this._logger = _logger;
|
|
13
|
+
if (!params.chatId || !params.botToken) {
|
|
14
|
+
const errorMessage = 'Не указан chatId или botToken для Telegram';
|
|
15
|
+
Logger_1.logger.error(errorMessage);
|
|
16
|
+
throw Error(errorMessage);
|
|
17
|
+
}
|
|
18
|
+
this._params = params;
|
|
19
|
+
}
|
|
20
|
+
sendMessage = async (text) => {
|
|
21
|
+
const data = new node_url_1.URLSearchParams({
|
|
22
|
+
chat_id: this._params.chatId,
|
|
23
|
+
disable_web_page_preview: '1',
|
|
24
|
+
text,
|
|
25
|
+
});
|
|
26
|
+
try {
|
|
27
|
+
const controller = new AbortController();
|
|
28
|
+
const controllerTimeout = setTimeout(() => controller.abort(), this.timeout);
|
|
29
|
+
const res = await fetch(`https://api.telegram.org/bot${this._params.botToken}/sendMessage`, { method: 'POST', body: data, signal: controller.signal });
|
|
30
|
+
clearTimeout(controllerTimeout);
|
|
31
|
+
if (!res.ok) {
|
|
32
|
+
throw new Error(res.statusText);
|
|
33
|
+
}
|
|
34
|
+
this._logger.success('Сообщение успешно отправлено в Telegram');
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
this._logger.error('Ошибка отправки сообщения в Telegram', err);
|
|
38
|
+
throw err;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
exports.Telegram = Telegram;
|
|
43
|
+
const createTelegram = (params) => new Telegram(params, Logger_1.logger);
|
|
44
|
+
exports.createTelegram = createTelegram;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Telegram';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./Telegram"), exports);
|
package/node/services/index.d.ts
CHANGED
package/node/services/index.js
CHANGED
|
@@ -15,3 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./Logger"), exports);
|
|
18
|
+
__exportStar(require("./Telegram"), exports);
|
|
19
|
+
__exportStar(require("./SemanticRelease"), exports);
|
package/package.json
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ConfigService } from '../../config';
|
|
2
|
+
export declare class SemanticRelease {
|
|
3
|
+
private readonly _config;
|
|
4
|
+
constructor(_config: ConfigService);
|
|
5
|
+
parseVersions: () => {
|
|
6
|
+
currentVersion: any;
|
|
7
|
+
nextVersion: any;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare const createSemanticRelease: (config: ConfigService) => SemanticRelease;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import { logger } from '../Logger';
|
|
4
|
+
export class SemanticRelease {
|
|
5
|
+
_config;
|
|
6
|
+
constructor(_config) {
|
|
7
|
+
this._config = _config;
|
|
8
|
+
}
|
|
9
|
+
parseVersions = () => {
|
|
10
|
+
const { packPrivateDirPath, semanticRelease } = this._config;
|
|
11
|
+
const versionsFilePath = path.join(packPrivateDirPath, semanticRelease.versionsFileName);
|
|
12
|
+
if (!fs.existsSync(versionsFilePath)) {
|
|
13
|
+
throw Error('Файл с версиями не найден');
|
|
14
|
+
}
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
16
|
+
const { currentVersion, nextVersion } = require(`${packPrivateDirPath}/${semanticRelease.versionsFileName}`);
|
|
17
|
+
const versions = {
|
|
18
|
+
currentVersion,
|
|
19
|
+
nextVersion,
|
|
20
|
+
};
|
|
21
|
+
logger.info('Версия пакета взята из файла', versionsFilePath, versions);
|
|
22
|
+
return versions;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export const createSemanticRelease = (config) => new SemanticRelease(config);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SemanticRelease';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SemanticRelease';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Logger } from '../Logger';
|
|
2
|
+
type Params = {
|
|
3
|
+
chatId?: string;
|
|
4
|
+
botToken?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare class Telegram {
|
|
7
|
+
private readonly _logger;
|
|
8
|
+
private readonly timeout;
|
|
9
|
+
private readonly _params;
|
|
10
|
+
constructor(params: Params, _logger: Logger);
|
|
11
|
+
sendMessage: (text: string) => Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export declare const createTelegram: (params: Params) => Telegram;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { URLSearchParams } from 'node:url';
|
|
2
|
+
import { logger } from '../Logger';
|
|
3
|
+
export class Telegram {
|
|
4
|
+
_logger;
|
|
5
|
+
// 10 секунд
|
|
6
|
+
timeout = 10_000;
|
|
7
|
+
_params;
|
|
8
|
+
constructor(params, _logger) {
|
|
9
|
+
this._logger = _logger;
|
|
10
|
+
if (!params.chatId || !params.botToken) {
|
|
11
|
+
const errorMessage = 'Не указан chatId или botToken для Telegram';
|
|
12
|
+
logger.error(errorMessage);
|
|
13
|
+
throw Error(errorMessage);
|
|
14
|
+
}
|
|
15
|
+
this._params = params;
|
|
16
|
+
}
|
|
17
|
+
sendMessage = async (text) => {
|
|
18
|
+
const data = new URLSearchParams({
|
|
19
|
+
chat_id: this._params.chatId,
|
|
20
|
+
disable_web_page_preview: '1',
|
|
21
|
+
text,
|
|
22
|
+
});
|
|
23
|
+
try {
|
|
24
|
+
const controller = new AbortController();
|
|
25
|
+
const controllerTimeout = setTimeout(() => controller.abort(), this.timeout);
|
|
26
|
+
const res = await fetch(`https://api.telegram.org/bot${this._params.botToken}/sendMessage`, { method: 'POST', body: data, signal: controller.signal });
|
|
27
|
+
clearTimeout(controllerTimeout);
|
|
28
|
+
if (!res.ok) {
|
|
29
|
+
throw new Error(res.statusText);
|
|
30
|
+
}
|
|
31
|
+
this._logger.success('Сообщение успешно отправлено в Telegram');
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
this._logger.error('Ошибка отправки сообщения в Telegram', err);
|
|
35
|
+
throw err;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export const createTelegram = (params) => new Telegram(params, logger);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Telegram';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Telegram';
|
package/services/index.d.ts
CHANGED
package/services/index.js
CHANGED