@build-script/package-tools 0.0.26 → 0.0.28

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 (65) hide show
  1. package/bins/load.devel.js +15 -0
  2. package/{load.js → bins/load.js} +1 -1
  3. package/lib/commands/detect-package-change.d.ts.map +1 -1
  4. package/lib/commands/detect-package-change.js +1 -1
  5. package/lib/commands/detect-package-change.js.map +1 -1
  6. package/lib/commands/monorepo-publish.d.ts.map +1 -1
  7. package/lib/commands/monorepo-publish.js +31 -15
  8. package/lib/commands/monorepo-publish.js.map +1 -1
  9. package/lib/commands/run-if-version-mismatch.d.ts.map +1 -1
  10. package/lib/commands/run-if-version-mismatch.js +1 -1
  11. package/lib/commands/run-if-version-mismatch.js.map +1 -1
  12. package/lib/common/cache/native.npm.d.ts +4 -1
  13. package/lib/common/cache/native.npm.d.ts.map +1 -1
  14. package/lib/common/cache/native.npm.js +13 -10
  15. package/lib/common/cache/native.npm.js.map +1 -1
  16. package/lib/common/git/git.d.ts +3 -1
  17. package/lib/common/git/git.d.ts.map +1 -1
  18. package/lib/common/git/git.js +12 -10
  19. package/lib/common/git/git.js.map +1 -1
  20. package/lib/common/package-manager/driver.abstract.d.ts +3 -1
  21. package/lib/common/package-manager/driver.abstract.d.ts.map +1 -1
  22. package/lib/common/package-manager/driver.abstract.js +16 -14
  23. package/lib/common/package-manager/driver.abstract.js.map +1 -1
  24. package/lib/common/package-manager/package-manager.d.ts +2 -1
  25. package/lib/common/package-manager/package-manager.d.ts.map +1 -1
  26. package/lib/common/package-manager/package-manager.js +4 -3
  27. package/lib/common/package-manager/package-manager.js.map +1 -1
  28. package/lib/common/package-manager/proxy.d.ts +3 -2
  29. package/lib/common/package-manager/proxy.d.ts.map +1 -1
  30. package/lib/common/package-manager/proxy.js +6 -6
  31. package/lib/common/package-manager/proxy.js.map +1 -1
  32. package/lib/common/shared-jobs/detect-change-job.d.ts.map +1 -1
  33. package/lib/common/shared-jobs/detect-change-job.js +12 -13
  34. package/lib/common/shared-jobs/detect-change-job.js.map +1 -1
  35. package/lib/common/taball/decompress.d.ts +2 -1
  36. package/lib/common/taball/decompress.d.ts.map +1 -1
  37. package/lib/common/taball/decompress.js +2 -2
  38. package/lib/common/taball/decompress.js.map +1 -1
  39. package/lib/common/taball/file-download.d.ts +8 -1
  40. package/lib/common/taball/file-download.d.ts.map +1 -1
  41. package/lib/common/taball/file-download.js +107 -97
  42. package/lib/common/taball/file-download.js.map +1 -1
  43. package/lib/common/temp-work-folder.d.ts +3 -1
  44. package/lib/common/temp-work-folder.d.ts.map +1 -1
  45. package/lib/common/temp-work-folder.js +9 -7
  46. package/lib/common/temp-work-folder.js.map +1 -1
  47. package/lib/common/version.generated.d.ts +1 -1
  48. package/lib/common/version.generated.js +1 -1
  49. package/package.json +16 -17
  50. package/src/commands/detect-package-change.ts +1 -2
  51. package/src/commands/monorepo-publish.ts +33 -15
  52. package/src/commands/run-if-version-mismatch.ts +1 -2
  53. package/src/common/cache/native.npm.ts +13 -10
  54. package/src/common/git/git.ts +13 -10
  55. package/src/common/package-manager/driver.abstract.ts +14 -13
  56. package/src/common/package-manager/package-manager.ts +10 -4
  57. package/src/common/package-manager/proxy.ts +6 -6
  58. package/src/common/shared-jobs/detect-change-job.ts +13 -13
  59. package/src/common/taball/decompress.ts +2 -2
  60. package/src/common/taball/file-download.ts +113 -105
  61. package/src/common/temp-work-folder.ts +7 -6
  62. package/src/common/version.generated.ts +1 -1
  63. package/src/tsconfig.json +0 -1
  64. package/src/command-file-map.generator.ts +0 -10
  65. package/src/common/version.generator.ts +0 -19
@@ -1,5 +1,5 @@
1
+ import { logger as defaultLogger, type IMyLogger } from '@idlebox/cli';
1
2
  import { escapeRegExp } from '@idlebox/common';
2
- import { logger } from '@idlebox/cli';
3
3
  import { getEnvironment } from '@idlebox/node';
4
4
  import type { IPackageManager } from './package-manager.js';
5
5
 
@@ -13,7 +13,7 @@ function makeRe(str: string) {
13
13
  return new RegExp(`^${reTxt}$`, 'i');
14
14
  }
15
15
 
16
- export function getProxyValue(url: string) {
16
+ export function getProxyValue(url: string, logger: IMyLogger = defaultLogger): string {
17
17
  const proxyValue = process.env.http_proxy;
18
18
  if (!proxyValue) {
19
19
  return '';
@@ -65,21 +65,21 @@ export function getProxyValue(url: string) {
65
65
  export async function reconfigureProxyWithNpmrc(pm: IPackageManager) {
66
66
  if (proxy_override_by_env) return;
67
67
 
68
- logger.debug('通过npm设置代理服务器:');
68
+ pm.logger.debug('通过npm设置代理服务器:');
69
69
  const p = await pm.getConfig('proxy');
70
70
  const np = await pm.getConfig('noproxy');
71
71
 
72
72
  if (p) {
73
- logger.debug(` * proxy server = ${p}`);
73
+ pm.logger.debug(` * proxy server = ${p}`);
74
74
  }
75
75
  if (np) {
76
- logger.debug(` * no_proxy = ${np}`);
76
+ pm.logger.debug(` * no_proxy = ${np}`);
77
77
  }
78
78
 
79
79
  applyEnv(p || '', np || '');
80
80
  }
81
81
 
82
- export function configureProxyFromEnvironment() {
82
+ export function configureProxyFromEnvironment(logger: IMyLogger = defaultLogger) {
83
83
  // bootstrap({
84
84
  // environmentVariableNamespace: '',
85
85
  // forceGlobalAgent: true,
@@ -1,4 +1,3 @@
1
- import { logger } from '@idlebox/cli';
2
1
  import { PathEnvironment } from '@idlebox/node';
3
2
  import { resolve } from 'node:path';
4
3
  import { gt } from 'semver';
@@ -21,7 +20,8 @@ interface IDetectOptions {
21
20
 
22
21
  export async function executeChangeDetect(pm: IPackageManager, options: IDetectOptions = {}): Promise<IResult> {
23
22
  const packageJson = await pm.loadPackageJson();
24
- logger.debug('修改检测 | 包名: %s', packageJson.name);
23
+
24
+ pm.logger.debug('修改检测 | 包名: %s', packageJson.name);
25
25
  if (!packageJson.name) {
26
26
  throw new Error(`${pm.projectPath}/package.json 中缺少 name 字段`);
27
27
  }
@@ -38,16 +38,16 @@ export async function executeChangeDetect(pm: IPackageManager, options: IDetectO
38
38
  }
39
39
 
40
40
  if (packageJson.private && !options.forcePrivate) {
41
- logger.debug('检测到私有包,禁止运行');
41
+ pm.logger.debug('检测到私有包,禁止运行');
42
42
  return { changedFiles: [], hasChange: false };
43
43
  }
44
44
 
45
45
  const remotePackage = await cache.fetchVersion(packageJson.name, distTagInput);
46
- logger.debug(' -> npm 远程版本 = %s', remotePackage?.version);
47
- logger.debug(' -> package.json 本地版本 = %s', packageJson.version);
46
+ pm.logger.debug(' -> npm 远程版本 = %s', remotePackage?.version);
47
+ pm.logger.debug(' -> package.json 本地版本 = %s', packageJson.version);
48
48
 
49
49
  if (!remotePackage || gt(packageJson.version, remotePackage.version)) {
50
- logger.debug('本地版本 (%s) 已经大于远程版本 (%s),无需进一步检测', packageJson.version, remotePackage?.version);
50
+ pm.logger.debug('本地版本 (%s) 已经大于远程版本 (%s),无需进一步检测', packageJson.version, remotePackage?.version);
51
51
  return {
52
52
  changedFiles: ['package.json'],
53
53
  hasChange: false,
@@ -55,33 +55,33 @@ export async function executeChangeDetect(pm: IPackageManager, options: IDetectO
55
55
  packageJsonDiff: `短路检测: "version" 本地为 ${packageJson.version}, 远程版本为 ${remotePackage?.version}`,
56
56
  };
57
57
  }
58
- logger.debug('本地版本 (%s) 小于或等于远程版本 (%s),尝试检测更改...', packageJson.version, remotePackage.version);
58
+ pm.logger.debug('本地版本 (%s) 小于或等于远程版本 (%s),尝试检测更改...', packageJson.version, remotePackage.version);
59
59
 
60
60
  const tarball = await cache.downloadTarball(packageJson.name, distTagInput);
61
61
 
62
- const tempFolder = new TempWorkingFolder(pm.workspace, 'package-change-detect');
62
+ const tempFolder = new TempWorkingFolder(pm.workspace, 'package-change-detect', pm.logger);
63
63
  const workingRoot = tempFolder.resolve('working');
64
64
  await workingRoot.unpack(tarball);
65
65
  await makePackageJsonOrderConsistence(workingRoot.path);
66
66
 
67
- const gitrepo = new GitWorkingTree(workingRoot.path);
67
+ const gitrepo = new GitWorkingTree(workingRoot.path, pm.logger);
68
68
  await gitrepo.init();
69
69
 
70
70
  const pack = await pm.pack(tempFolder.joinpath('local-pack.tgz'));
71
- logger.verbose(' --> %s', pack);
71
+ pm.logger.verbose(' --> %s', pack);
72
72
 
73
73
  await workingRoot.unpack(pack);
74
- logger.verbose(' unpacked successfully');
74
+ pm.logger.verbose(' unpacked successfully');
75
75
 
76
76
  await makePackageJsonOrderConsistence(workingRoot.path);
77
77
 
78
78
  const changedFiles = await gitrepo.commitChanges();
79
- logger.verbose` changed files: list<${changedFiles}>`;
79
+ pm.logger.verbose` changed files: list<${changedFiles}>`;
80
80
 
81
81
  let packageJsonDiff = '';
82
82
  if (changedFiles.includes('package.json')) {
83
83
  packageJsonDiff = await gitrepo.fileDiff('package.json');
84
- logger.debug(` - package.json 文件的修改:\n${packageJsonDiff}`);
84
+ pm.logger.debug(` - package.json 文件的修改:\n${packageJsonDiff}`);
85
85
  }
86
86
 
87
87
  return { changedFiles, hasChange: changedFiles.length > 0, remoteVersion: remotePackage.version, packageJsonDiff };
@@ -1,11 +1,11 @@
1
+ import { logger as defaultLogger, type IMyLogger } from '@idlebox/cli';
1
2
  import { convertCatchedError } from '@idlebox/common';
2
- import { logger } from '@idlebox/cli';
3
3
  import { existsSync, unlinkSync } from 'node:fs';
4
4
  import tgz from 'targz';
5
5
 
6
6
  const packageFolder = /^package\//;
7
7
 
8
- export async function decompressPack(src: string, dest: string) {
8
+ export async function decompressPack(src: string, dest: string, logger: IMyLogger = defaultLogger) {
9
9
  logger.debug(`解压文件: ${src}\n\u3000\u3000目录: ${dest}`);
10
10
  await new Promise<void>((resolve, reject) => {
11
11
  if (!existsSync(src)) {
@@ -1,4 +1,4 @@
1
- import { logger } from '@idlebox/cli';
1
+ import { logger as defaultLogger, type IMyLogger } from '@idlebox/cli';
2
2
  import { sleep } from '@idlebox/common';
3
3
  import { exists, streamPromise } from '@idlebox/node';
4
4
  import { createWriteStream } from 'node:fs';
@@ -14,33 +14,124 @@ interface IMetaInfo {
14
14
  url: string;
15
15
  }
16
16
 
17
- export async function downloadFileCached(url: string, file: string) {
18
- const metadata = `${file}.meta.json`;
19
- logger.debug`下载文件:\n 地址: long<${url}>\n 保存到: long<${file}>`;
20
- let meta: IMetaInfo | undefined;
21
- if ((await exists(metadata)) && (await exists(file))) {
22
- try {
23
- meta = JSON.parse(await readFile(metadata, 'utf-8'));
24
- } catch {}
25
-
26
- if (meta?.url === url) {
27
- logger.debug(' -> 已经下载');
28
- return file;
17
+ export class FileDownloader {
18
+ constructor(public readonly logger: IMyLogger = defaultLogger) {}
19
+
20
+ public async download(url: string, file: string) {
21
+ const metadata = `${file}.meta.json`;
22
+ this.logger.debug`下载文件:\n 地址: long<${url}>\n 保存到: long<${file}>`;
23
+ let meta: IMetaInfo | undefined;
24
+ if ((await exists(metadata)) && (await exists(file))) {
25
+ try {
26
+ meta = JSON.parse(await readFile(metadata, 'utf-8'));
27
+ } catch {}
28
+
29
+ if (meta?.url === url) {
30
+ this.logger.debug(' -> 已经下载');
31
+ return file;
32
+ }
29
33
  }
34
+ const response = await this.http_stream(url);
35
+
36
+ await mkdir(dirname(file), { recursive: true });
37
+ const writeOut = createWriteStream(`${file}.downloading`);
38
+ await streamPromise(response.stream.pipe(writeOut));
39
+
40
+ meta = { headers: response.headers, url };
41
+ await writeFile(metadata, JSON.stringify(meta), 'utf-8');
42
+
43
+ await rename(`${file}.downloading`, file);
44
+ this.logger.debug(' -> 下载完成');
45
+
46
+ return file;
30
47
  }
31
- const response = await http_stream(url);
32
48
 
33
- await mkdir(dirname(file), { recursive: true });
34
- const writeOut = createWriteStream(`${file}.downloading`);
35
- await streamPromise(response.stream.pipe(writeOut));
49
+ private async http_stream(url: string, headers?: OutgoingHttpHeaders): Promise<INormalizedResponse> {
50
+ let try_remain = 3;
51
+ let redirect_cnt = 0;
52
+ while (try_remain-- > 0) {
53
+ try {
54
+ return await this.send_request(url, headers || {});
55
+ } catch (e: unknown) {
56
+ if (RedirectError.is(e)) {
57
+ redirect_cnt++;
58
+ if (redirect_cnt > 8) {
59
+ throw new HttpError(url, 0, '重定向次数过多');
60
+ }
61
+
62
+ this.logger.debug(`[http] 重定向到 ${e.location}`);
63
+ url = e.location;
64
+ try_remain++;
65
+ continue;
66
+ }
67
+
68
+ this.logger.error('获取 %s 失败 [剩余尝试次数 %s]', url, try_remain);
69
+ if (try_remain === 0) throw e;
36
70
 
37
- meta = { headers: response.headers, url };
38
- await writeFile(metadata, JSON.stringify(meta), 'utf-8');
71
+ await sleep(2000);
72
+ }
73
+ }
74
+ throw new Error('不可能的错误');
75
+ }
39
76
 
40
- await rename(`${file}.downloading`, file);
41
- logger.debug(' -> 下载完成');
77
+ private send_request(url: string, headers: OutgoingHttpHeaders): Promise<any> {
78
+ headers['Accept-Encoding'] = 'br,gzip,deflate';
79
+ return new Promise<any>((resolve, reject) => {
80
+ this.logger.debug(`[http] 请求 ${url}`);
81
+
82
+ const request = get(url, { headers }, (response) => {
83
+ this.logger.debug(`[http] 响应 ${response.statusCode} [encoding: ${response.headers['content-encoding']}][${response.headers['content-length']} bytes]`);
84
+ if (response.statusCode === 200) {
85
+ const bytes = Number.parseInt(response.headers['content-length'] ?? '--', 10);
86
+
87
+ if (bytes > 5 * 1024 * 1024 && process.stderr.isTTY) {
88
+ let downloaded = 0;
89
+ response.on('data', (bs) => {
90
+ downloaded += bs.length;
91
+ process.stderr.write(`\x1B[2mdownload: ${downloaded} of ${bytes} bytes (${Math.round((downloaded / bytes) * 100)}%)\x1B[0m\r`);
92
+ });
93
+ response.on('end', () => {
94
+ process.stderr.write('\x1B[K');
95
+ });
96
+ }
97
+
98
+ let stream: Readable;
99
+ switch (response.headers['content-encoding']) {
100
+ case 'br':
101
+ stream = response.pipe(createBrotliDecompress());
102
+ break;
103
+ // Or, just use zlib.createUnzip() to handle both of the following cases:
104
+ case 'gzip':
105
+ stream = response.pipe(createGunzip());
106
+ break;
107
+ case 'deflate':
108
+ stream = response.pipe(createInflate());
109
+ break;
110
+ default:
111
+ stream = response;
112
+ break;
113
+ }
114
+ resolve(Object.assign(response, { stream }));
115
+ } else if (
116
+ (response.statusCode === 302 ||
117
+ response.statusCode === 301 ||
118
+ response.statusCode === 303 ||
119
+ response.statusCode === 307 ||
120
+ response.statusCode === 308) &&
121
+ response.headers.location
122
+ ) {
123
+ reject(new RedirectError(url, response.headers.location, response.statusCode));
124
+ } else {
125
+ reject(new HttpError(url, response.statusCode as number, response.statusMessage as string));
126
+ }
127
+ });
42
128
 
43
- return file;
129
+ request.on('error', (err) => {
130
+ reject(err);
131
+ });
132
+ request.end();
133
+ });
134
+ }
44
135
  }
45
136
 
46
137
  class RedirectError extends Error {
@@ -73,86 +164,3 @@ export class HttpError extends Error {
73
164
 
74
165
  type IStream = { stream: Readable };
75
166
  export type INormalizedResponse = Omit<IncomingMessage, keyof Readable> & IStream;
76
-
77
- async function http_stream(url: string, headers?: OutgoingHttpHeaders): Promise<INormalizedResponse> {
78
- let try_remain = 3;
79
- let redirect_cnt = 0;
80
- while (try_remain-- > 0) {
81
- try {
82
- return await send_request(url, headers || {});
83
- } catch (e: unknown) {
84
- if (RedirectError.is(e)) {
85
- redirect_cnt++;
86
- if (redirect_cnt > 8) {
87
- throw new HttpError(url, 0, '重定向次数过多');
88
- }
89
-
90
- logger.debug(`[http] 重定向到 ${e.location}`);
91
- url = e.location;
92
- try_remain++;
93
- continue;
94
- }
95
-
96
- logger.error('获取 %s 失败 [剩余尝试次数 %s]', url, try_remain);
97
- if (try_remain === 0) throw e;
98
-
99
- await sleep(2000);
100
- }
101
- }
102
- throw new Error('不可能的错误');
103
- }
104
-
105
- function send_request(url: string, headers: OutgoingHttpHeaders): Promise<any> {
106
- headers['Accept-Encoding'] = 'br,gzip,deflate';
107
- return new Promise<any>((resolve, reject) => {
108
- logger.debug(`[http] 请求 ${url}`);
109
-
110
- const request = get(url, { headers }, (response) => {
111
- logger.debug(`[http] 响应 ${response.statusCode} [encoding: ${response.headers['content-encoding']}][${response.headers['content-length']} bytes]`);
112
- if (response.statusCode === 200) {
113
- const bytes = Number.parseInt(response.headers['content-length'] ?? '--', 10);
114
-
115
- if (bytes > 5 * 1024 * 1024 && process.stderr.isTTY) {
116
- let downloaded = 0;
117
- response.on('data', (bs) => {
118
- downloaded += bs.length;
119
- process.stderr.write(`\x1B[2mdownload: ${downloaded} of ${bytes} bytes (${Math.round((downloaded / bytes) * 100)}%)\x1B[0m\r`);
120
- });
121
- response.on('end', () => {
122
- process.stderr.write('\x1B[K');
123
- });
124
- }
125
-
126
- let stream: Readable;
127
- switch (response.headers['content-encoding']) {
128
- case 'br':
129
- stream = response.pipe(createBrotliDecompress());
130
- break;
131
- // Or, just use zlib.createUnzip() to handle both of the following cases:
132
- case 'gzip':
133
- stream = response.pipe(createGunzip());
134
- break;
135
- case 'deflate':
136
- stream = response.pipe(createInflate());
137
- break;
138
- default:
139
- stream = response;
140
- break;
141
- }
142
- resolve(Object.assign(response, { stream }));
143
- } else if (
144
- (response.statusCode === 302 || response.statusCode === 301 || response.statusCode === 303 || response.statusCode === 307 || response.statusCode === 308) &&
145
- response.headers.location
146
- ) {
147
- reject(new RedirectError(url, response.headers.location, response.statusCode));
148
- } else {
149
- reject(new HttpError(url, response.statusCode as number, response.statusMessage as string));
150
- }
151
- });
152
-
153
- request.on('error', (err) => {
154
- reject(err);
155
- });
156
- request.end();
157
- });
158
- }
@@ -1,7 +1,7 @@
1
1
  import type { WorkspaceBase } from '@build-script/monorepo-lib';
2
+ import { logger as defaultLogger, type IMyLogger } from '@idlebox/cli';
2
3
  import { registerGlobalLifecycle } from '@idlebox/common';
3
4
  import { writeJsonFile } from '@idlebox/json-edit';
4
- import { logger } from '@idlebox/cli';
5
5
  import { emptyDir } from '@idlebox/node';
6
6
  import { randomBytes } from 'node:crypto';
7
7
  import { rmSync } from 'node:fs';
@@ -17,6 +17,7 @@ export class TempWorkingFolder {
17
17
  constructor(
18
18
  private readonly workspace: WorkspaceBase,
19
19
  name: string,
20
+ public readonly logger: IMyLogger = defaultLogger,
20
21
  __internal_isChild = false,
21
22
  ) {
22
23
  if (!__internal_isChild) {
@@ -27,7 +28,7 @@ export class TempWorkingFolder {
27
28
  }
28
29
 
29
30
  resolve(p0: string, ...paths: string[]) {
30
- return new TempWorkingFolder(this.workspace, this.joinpath(p0, ...paths), true);
31
+ return new TempWorkingFolder(this.workspace, this.joinpath(p0, ...paths), this.logger, true);
31
32
  }
32
33
 
33
34
  joinpath(p0: string, ...paths: string[]) {
@@ -39,7 +40,7 @@ export class TempWorkingFolder {
39
40
  }
40
41
 
41
42
  async mkdir() {
42
- logger.debug('临时工作目录: %s', this.path);
43
+ this.logger.debug`临时工作目录: long<${this.path}>`;
43
44
  await mkdir(this.path, { recursive: true });
44
45
  this._exists = true;
45
46
  }
@@ -66,15 +67,15 @@ export class TempWorkingFolder {
66
67
  }
67
68
 
68
69
  unpack(tarball: string, dest = '.') {
69
- return decompressPack(tarball, resolve(this.path, dest));
70
+ return decompressPack(tarball, resolve(this.path, dest), this.logger);
70
71
  }
71
72
 
72
73
  dispose() {
73
74
  if (!isDebugMode) {
74
- logger.debug(' * 删除临时目录: %s', this.path);
75
+ this.logger.debug` * 删除临时目录: long<${this.path}>`;
75
76
  rmSync(this.path, { force: true, recursive: true });
76
77
  } else {
77
- logger.debug(' * 由于是调试模式,不删除临时文件夹: %s', this.path);
78
+ this.logger.debug` * 由于是调试模式,不删除临时文件夹: long<${this.path}>`;
78
79
  }
79
80
  }
80
81
  }
@@ -13,7 +13,7 @@
13
13
  ******************************************************************************/
14
14
 
15
15
 
16
- export const self_package_version = "0.0.26";
16
+ export const self_package_version = "0.0.28";
17
17
  export const self_package_name = "@build-script/package-tools";
18
18
  export const self_package_repository = "https://github.com/GongT/baobao";
19
19
 
package/src/tsconfig.json CHANGED
@@ -4,7 +4,6 @@
4
4
  "typeRoots": ["../node_modules/@types", "../node_modules"],
5
5
  "outDir": "../lib",
6
6
  "rootDir": "./",
7
- "types": ["node"],
8
7
  "noEmitOnError": false
9
8
  },
10
9
  "exclude": ["**/*.generator.ts"]
@@ -1,10 +0,0 @@
1
- import type { GenerateContext } from '@build-script/codegen';
2
- import { makeIndexFile } from '@idlebox/cli/builder';
3
-
4
- export async function generate(ctx: GenerateContext) {
5
- ctx.watchFiles(`${__dirname}/commands/*.ts`);
6
- ctx.watchFiles(`${__dirname}/commands`);
7
-
8
- const content = await makeIndexFile(__dirname, ['commands/*.ts']);
9
- ctx.file('commands.ts').append(content);
10
- }
@@ -1,19 +0,0 @@
1
- import type { FileBuilder, IOutputShim } from '@build-script/codegen';
2
- import { execa } from 'execa';
3
- import * as fs from 'node:fs';
4
- import * as path from 'node:path';
5
-
6
- export async function generate(_builder: FileBuilder, logger: IOutputShim) {
7
- const pkgFile = path.resolve(__dirname, '../../package.json');
8
- const pkg = JSON.parse(fs.readFileSync(pkgFile, 'utf-8'));
9
-
10
- logger.log(`package info = ${pkg.name} @ ${pkg.version}`);
11
-
12
- const { stdout } = await execa('git', ['remote', 'get-url', 'origin']);
13
- const repository = stdout.trim().replace(/\.git$/, '');
14
-
15
- return `export const self_package_version = "${pkg.version}";
16
- export const self_package_name = "${pkg.name}";
17
- export const self_package_repository = "${repository}";
18
- `;
19
- }