@astral/pack 1.1.0 → 1.2.1

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.
Files changed (64) hide show
  1. package/README.md +25 -0
  2. package/bin.js +8 -2
  3. package/cli/enums.d.ts +3 -1
  4. package/cli/enums.js +2 -0
  5. package/cli/parseArgs/parseArgs.js +15 -2
  6. package/cli/types.d.ts +6 -0
  7. package/commands/build/build.js +4 -15
  8. package/commands/index.d.ts +1 -0
  9. package/commands/index.js +1 -0
  10. package/commands/semanticRelease/defaultConfig.js +1 -5
  11. package/commands/telegram/index.d.ts +2 -0
  12. package/commands/telegram/index.js +2 -0
  13. package/commands/telegram/sendTelegramFailRelease/index.d.ts +1 -0
  14. package/commands/telegram/sendTelegramFailRelease/index.js +1 -0
  15. package/commands/telegram/sendTelegramFailRelease/sendTelegramFailRelease.d.ts +9 -0
  16. package/commands/telegram/sendTelegramFailRelease/sendTelegramFailRelease.js +10 -0
  17. package/commands/telegram/sendTelegramSuccessRelease/index.d.ts +1 -0
  18. package/commands/telegram/sendTelegramSuccessRelease/index.js +1 -0
  19. package/commands/telegram/sendTelegramSuccessRelease/sendTelegramSuccessRelease.d.ts +8 -0
  20. package/commands/telegram/sendTelegramSuccessRelease/sendTelegramSuccessRelease.js +15 -0
  21. package/config/ConfigService/ConfigService.d.ts +1 -0
  22. package/config/ConfigService/ConfigService.js +1 -0
  23. package/node/bin.js +7 -1
  24. package/node/cli/enums.d.ts +3 -1
  25. package/node/cli/enums.js +2 -0
  26. package/node/cli/parseArgs/parseArgs.js +15 -2
  27. package/node/cli/types.d.ts +6 -0
  28. package/node/commands/build/build.js +3 -17
  29. package/node/commands/index.d.ts +1 -0
  30. package/node/commands/index.js +1 -0
  31. package/node/commands/semanticRelease/defaultConfig.js +1 -5
  32. package/node/commands/telegram/index.d.ts +2 -0
  33. package/node/commands/telegram/index.js +18 -0
  34. package/node/commands/telegram/sendTelegramFailRelease/index.d.ts +1 -0
  35. package/node/commands/telegram/sendTelegramFailRelease/index.js +17 -0
  36. package/node/commands/telegram/sendTelegramFailRelease/sendTelegramFailRelease.d.ts +9 -0
  37. package/node/commands/telegram/sendTelegramFailRelease/sendTelegramFailRelease.js +14 -0
  38. package/node/commands/telegram/sendTelegramSuccessRelease/index.d.ts +1 -0
  39. package/node/commands/telegram/sendTelegramSuccessRelease/index.js +17 -0
  40. package/node/commands/telegram/sendTelegramSuccessRelease/sendTelegramSuccessRelease.d.ts +8 -0
  41. package/node/commands/telegram/sendTelegramSuccessRelease/sendTelegramSuccessRelease.js +19 -0
  42. package/node/config/ConfigService/ConfigService.d.ts +1 -0
  43. package/node/config/ConfigService/ConfigService.js +1 -0
  44. package/node/services/SemanticRelease/SemanticRelease.d.ts +10 -0
  45. package/node/services/SemanticRelease/SemanticRelease.js +33 -0
  46. package/node/services/SemanticRelease/index.d.ts +1 -0
  47. package/node/services/SemanticRelease/index.js +17 -0
  48. package/node/services/Telegram/Telegram.d.ts +14 -0
  49. package/node/services/Telegram/Telegram.js +44 -0
  50. package/node/services/Telegram/index.d.ts +1 -0
  51. package/node/services/Telegram/index.js +17 -0
  52. package/node/services/index.d.ts +2 -0
  53. package/node/services/index.js +2 -0
  54. package/package.json +2 -2
  55. package/services/SemanticRelease/SemanticRelease.d.ts +10 -0
  56. package/services/SemanticRelease/SemanticRelease.js +25 -0
  57. package/services/SemanticRelease/index.d.ts +1 -0
  58. package/services/SemanticRelease/index.js +1 -0
  59. package/services/Telegram/Telegram.d.ts +14 -0
  60. package/services/Telegram/Telegram.js +39 -0
  61. package/services/Telegram/index.d.ts +1 -0
  62. package/services/Telegram/index.js +1 -0
  63. package/services/index.d.ts +2 -0
  64. 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.split('=')[1];
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
@@ -2,4 +2,10 @@ import { CLICommand } from './enums';
2
2
  export type CLIArgs = {
3
3
  command: CLICommand;
4
4
  packageVersion?: string;
5
+ telegram: {
6
+ chatId?: string;
7
+ botToken?: string;
8
+ packageName?: string;
9
+ ciJobId?: string;
10
+ };
5
11
  };
@@ -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
- if (fs.existsSync(versionsFilePath)) {
19
- // eslint-disable-next-line @typescript-eslint/no-var-requires
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 = JSON.parse(fs.readFileSync(path.join(projectPath, 'package.json'), 'utf8'));
27
+ const originPackageJson = config.parseOriginPackageJson();
39
28
  const { lang } = config;
40
29
  if (lang === 'js') {
41
30
  await compileJs({ originPackageJson }, config);
@@ -5,3 +5,4 @@ export * from './compileJs';
5
5
  export * from './build';
6
6
  export * from './semanticRelease';
7
7
  export * from './copyDoc';
8
+ export * from './telegram';
package/commands/index.js CHANGED
@@ -5,3 +5,4 @@ export * from './compileJs';
5
5
  export * from './build';
6
6
  export * from './semanticRelease';
7
7
  export * from './copyDoc';
8
+ export * from './telegram';
@@ -1,8 +1,4 @@
1
- export const defaultBranches = [
2
- 'main',
3
- 'feat/build',
4
- { name: 'rc', prerelease: true },
5
- ];
1
+ export const defaultBranches = ['main', { name: 'rc', prerelease: true }];
6
2
  export const commitAnalyzerPlugin = [
7
3
  '@semantic-release/commit-analyzer',
8
4
  {
@@ -0,0 +1,2 @@
1
+ export * from './sendTelegramFailRelease';
2
+ export * from './sendTelegramSuccessRelease';
@@ -0,0 +1,2 @@
1
+ export * from './sendTelegramFailRelease';
2
+ export * from './sendTelegramSuccessRelease';
@@ -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();
@@ -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.split('=')[1];
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;
@@ -2,4 +2,10 @@ import { CLICommand } from './enums';
2
2
  export type CLIArgs = {
3
3
  command: CLICommand;
4
4
  packageVersion?: string;
5
+ telegram: {
6
+ chatId?: string;
7
+ botToken?: string;
8
+ packageName?: string;
9
+ ciJobId?: string;
10
+ };
5
11
  };
@@ -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
- if (fs_1.default.existsSync(versionsFilePath)) {
25
- // eslint-disable-next-line @typescript-eslint/no-var-requires
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 = JSON.parse(fs_1.default.readFileSync(path_1.default.join(projectPath, 'package.json'), 'utf8'));
30
+ const originPackageJson = config.parseOriginPackageJson();
45
31
  const { lang } = config;
46
32
  if (lang === 'js') {
47
33
  await (0, compileJs_1.compileJs)({ originPackageJson }, config);
@@ -5,3 +5,4 @@ export * from './compileJs';
5
5
  export * from './build';
6
6
  export * from './semanticRelease';
7
7
  export * from './copyDoc';
8
+ export * from './telegram';
@@ -21,3 +21,4 @@ __exportStar(require("./compileJs"), exports);
21
21
  __exportStar(require("./build"), exports);
22
22
  __exportStar(require("./semanticRelease"), exports);
23
23
  __exportStar(require("./copyDoc"), exports);
24
+ __exportStar(require("./telegram"), exports);
@@ -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,2 @@
1
+ export * from './sendTelegramFailRelease';
2
+ export * from './sendTelegramSuccessRelease';
@@ -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);
@@ -1 +1,3 @@
1
1
  export * from './Logger';
2
+ export * from './Telegram';
3
+ export * from './SemanticRelease';
@@ -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
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@astral/pack",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
4
4
  "bin": {
5
- "pack": "bin.js"
5
+ "pack": "node/bin.js"
6
6
  },
7
7
  "engines": {
8
8
  "node": ">=22"
@@ -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';
@@ -1 +1,3 @@
1
1
  export * from './Logger';
2
+ export * from './Telegram';
3
+ export * from './SemanticRelease';
package/services/index.js CHANGED
@@ -1 +1,3 @@
1
1
  export * from './Logger';
2
+ export * from './Telegram';
3
+ export * from './SemanticRelease';