@git.zone/tspublish 1.15.0 → 2.0.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.
@@ -88,6 +88,9 @@ export class PackagePreparer {
88
88
  const entries = (await plugins.fs.readdir(input)).sort();
89
89
  for (const entry of entries) {
90
90
  if (entry === 'tspublish.json' && validateImports) continue;
91
+ // A folder's own tsconfig.json configures TsBuild in the repository: the compiled folder already
92
+ // carries its settings, and its `extends` leads to the repository's tsconfig.json, which no package contains.
93
+ if (entry === 'tsconfig.json' && module.folders.includes(source)) continue;
91
94
  await this.copyTree(root, `${source}/${entry}`, output, `${destination}/${entry}`, module, validateImports);
92
95
  }
93
96
  } else if (stat.isFile()) {
@@ -1,52 +1,11 @@
1
- import { logInfo, logWarn, logHeader, logPackage, logProgress, logSeparator } from './logging.js';
2
1
  import * as plugins from './plugins.js';
3
2
  import * as interfaces from './interfaces/index.js';
4
3
 
5
- import { PublishModule } from './classes.publishmodule.js';
6
- import { GiteaAssets } from './classes.giteaassets.js';
7
- import { createPackagePlan, orderPublishModules } from './functions.packageplan.js';
4
+ import { createPackagePlan, orderPublishModules, parseJsonObject } from './functions.packageplan.js';
8
5
  import { PackagePreparer } from './classes.packagepreparer.js';
9
6
 
7
+ /** Plans and prepares packages; a release coordinator such as `gitzone release` publishes them. */
10
8
  export class TsPublish {
11
- public giteaAssetsInstance: GiteaAssets;
12
-
13
- constructor() {
14
- this.giteaAssetsInstance = new GiteaAssets({
15
- giteaBaseUrl: 'https://code.foss.global',
16
- });
17
- }
18
-
19
- public async publish(monorepoDirArg: string) {
20
- logHeader('TSPublish - Module Publisher');
21
- const publishModules = await this.getModuleSubDirs(monorepoDirArg);
22
- const plan = await createPackagePlan(monorepoDirArg, publishModules);
23
- if (!plan.modules.length) throw new Error('No named tspublish modules were found.');
24
- logInfo(`Found ${Object.keys(publishModules).length} publish modules`);
25
- logSeparator();
26
- for (const publishModule of Object.keys(publishModules)) {
27
- logPackage('Module found', `${publishModule} → ${publishModules[publishModule].name}`);
28
- }
29
- for (const publishModule of Object.keys(publishModules)) {
30
- // lets check wether there is a name
31
- if (!publishModules[publishModule].name) {
32
- logWarn(`No name found in tspublish.json for ${publishModule}. Skipping...`);
33
- continue;
34
- }
35
- const publishModuleInstance = new PublishModule(this, {
36
- monoRepoDir: monorepoDirArg,
37
- packageSubFolder: publishModule,
38
- modulePlan: plan.modules.find((module) => module.folder === publishModule),
39
- });
40
- const moduleCount = Object.keys(publishModules).indexOf(publishModule) + 1;
41
- const totalCount = Object.keys(publishModules).length;
42
- logProgress(moduleCount, totalCount, publishModules[publishModule].name || publishModule);
43
- await publishModuleInstance.init();
44
- await publishModuleInstance.createPublishModuleDir();
45
- await publishModuleInstance.build();
46
- await publishModuleInstance.publish();
47
- }
48
- }
49
-
50
9
  /** Read-only package discovery, dependency ordering and manifest validation. */
51
10
  public async plan(directory: string): Promise<interfaces.ITsPublishPlan> {
52
11
  return createPackagePlan(directory, await this.getModuleSubDirs(directory));
@@ -60,7 +19,7 @@ export class TsPublish {
60
19
 
61
20
  /**
62
21
  * Discovers every `ts*` descriptor, named or order-only, in dependency order. Build tools and
63
- * release coordinators call it as a library, so it stays silent; only `publish()` reports progress.
22
+ * release coordinators call it as a library, so it stays silent.
64
23
  */
65
24
  public async getModuleSubDirs(dirArg: string) {
66
25
  // List all directories
@@ -82,7 +41,8 @@ export class TsPublish {
82
41
  }
83
42
 
84
43
  const tspublishContent = await plugins.smartfs.file(tspublishJsonPath).encoding('utf8').read();
85
- publishModules[subDirName] = JSON.parse(tspublishContent as string);
44
+ // Planning validates the fields.
45
+ publishModules[subDirName] = parseJsonObject(tspublishJsonPath, tspublishContent as string) as interfaces.ITsPublishJson;
86
46
  }
87
47
 
88
48
  return orderPublishModules(publishModules);
@@ -12,6 +12,20 @@ export const assertPackagePath = (value: string): void => {
12
12
  }
13
13
  };
14
14
 
15
+ /** Parses a JSON file that must hold an object; errors name the file, in the words TsBuild uses. */
16
+ export const parseJsonObject = (filePath: string, content: string): object => {
17
+ let parsed: unknown;
18
+ try {
19
+ parsed = JSON.parse(content);
20
+ } catch (error) {
21
+ throw new Error(`Invalid JSON in ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
22
+ }
23
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
24
+ throw new Error(`Invalid ${filePath}: expected a JSON object.`);
25
+ }
26
+ return parsed;
27
+ };
28
+
15
29
  const record = (value: unknown, label: string): Record<string, unknown> => {
16
30
  if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error(`Invalid ${label}.`);
17
31
  return value as Record<string, unknown>;
@@ -101,7 +115,8 @@ export const createPackagePlan = async (
101
115
  directory: string,
102
116
  discovered: Record<string, ITsPublishJson>,
103
117
  ): Promise<ITsPublishPlan> => {
104
- const root = record(JSON.parse(await plugins.fs.readFile(plugins.path.join(directory, 'package.json'), 'utf8')), 'root manifest');
118
+ const manifestPath = plugins.path.join(directory, 'package.json');
119
+ const root = parseJsonObject(manifestPath, await plugins.fs.readFile(manifestPath, 'utf8')) as Record<string, unknown>;
105
120
  if (typeof root.version !== 'string' || !/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(root.version)) {
106
121
  throw new Error('The repository requires a concrete package version.');
107
122
  }
package/ts/index.ts CHANGED
@@ -1,21 +1,24 @@
1
1
  import * as paths from './paths.js';
2
2
  import { TsPublish } from './classes.tspublish.js';
3
- import { logStart } from './logging.js';
4
3
 
5
4
  export * from './classes.tspublish.js';
6
5
  export type * from './interfaces/index.js';
7
6
 
8
- export const runCli = async () => {
9
- logStart('tspublish');
7
+ const usage = `Usage: tspublish plan
8
+ tspublish prepare <new-output-directory>
9
+
10
+ tspublish plans and prepares packages; it does not publish them.
11
+ Publish tspublish modules with \`gitzone release\` (@git.zone/cli 7.0 or later).`;
12
+
13
+ /** Stdout carries only the JSON result, so a release coordinator can parse it. */
14
+ export const runCli = async (args: string[] = process.argv.slice(2)): Promise<void> => {
10
15
  const tspublish = new TsPublish();
11
- const args = process.argv.slice(2);
12
16
  if (args[0] === 'plan' && args.length === 1) {
13
17
  console.log(JSON.stringify(await tspublish.plan(paths.cwd), null, 2));
14
18
  } else if (args[0] === 'prepare' && args.length === 2) {
15
19
  console.log(JSON.stringify(await tspublish.prepare(paths.cwd, args[1]), null, 2));
16
- } else if (args.length === 0) {
17
- await tspublish.publish(paths.cwd);
18
20
  } else {
19
- throw new Error('Usage: tspublish [plan | prepare <new-output-directory>]');
21
+ console.error(usage);
22
+ process.exitCode = 1;
20
23
  }
21
24
  };
package/ts/paths.ts CHANGED
@@ -1,9 +1 @@
1
- import * as plugins from './plugins.js';
2
-
3
1
  export const cwd = process.cwd();
4
-
5
- export const packageDir = plugins.path.join(
6
- plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url),
7
- '..',
8
- );
9
- export const nogitDir = plugins.path.join(packageDir, '.nogit');
package/ts/plugins.ts CHANGED
@@ -6,19 +6,9 @@ import * as typescript from 'typescript';
6
6
  export { path, fs, isBuiltin, typescript };
7
7
 
8
8
  // @push.rocks scope
9
- import * as consolecolor from '@push.rocks/consolecolor';
10
- import * as smartconfig from '@push.rocks/smartconfig';
11
- import * as smartfile from '@push.rocks/smartfile';
12
9
  import { SmartFs, SmartFsProviderNode } from '@push.rocks/smartfs';
13
- import * as smartcli from '@push.rocks/smartcli';
14
- import * as smartdelay from '@push.rocks/smartdelay';
15
- import * as smartlog from '@push.rocks/smartlog';
16
- import * as smartnpm from '@push.rocks/smartnpm';
17
- import * as smartpath from '@push.rocks/smartpath';
18
- import * as smartrequest from '@push.rocks/smartrequest';
19
- import * as smartshell from '@push.rocks/smartshell';
20
10
 
21
11
  // Create a pre-configured SmartFs instance for Node.js filesystem operations
22
12
  const smartfs = new SmartFs(new SmartFsProviderNode());
23
13
 
24
- export { consolecolor, smartconfig, smartfile, smartfs, smartcli, smartdelay, smartlog, smartnpm, smartpath, smartrequest, smartshell };
14
+ export { smartfs };
@@ -1,32 +0,0 @@
1
- interface IRepoFile {
2
- name: string;
3
- path: string;
4
- type: 'file' | 'dir';
5
- download_url: string | null;
6
- base64Content: string | null;
7
- encoding: string | null;
8
- }
9
- interface IGiteaAssetsOptions {
10
- giteaBaseUrl: string;
11
- token?: string;
12
- }
13
- export declare class GiteaAssets {
14
- private baseUrl;
15
- private headers;
16
- constructor(options: IGiteaAssetsOptions);
17
- /**
18
- * Get all files in a directory of a repository
19
- * @param owner - Repository owner
20
- * @param repo - Repository name
21
- * @param directory - Directory path ('' for root)
22
- * @param branch - Branch name (optional)
23
- * @returns A list of files in the directory
24
- */
25
- getFiles(owner: string, repo: string, directory: string, branch?: string): Promise<IRepoFile[]>;
26
- /**
27
- * gets the current cli entry file from the code.foss.global/git.zone/cli repository
28
- * @returns
29
- */
30
- getBinCliEntryFile(): Promise<IRepoFile>;
31
- }
32
- export {};
@@ -1,81 +0,0 @@
1
- import * as plugins from './plugins.js';
2
- export class GiteaAssets {
3
- constructor(options) {
4
- this.headers = {};
5
- this.baseUrl = options.giteaBaseUrl;
6
- if (this.baseUrl.endsWith('/')) {
7
- this.baseUrl = this.baseUrl.slice(0, -1);
8
- }
9
- this.baseUrl += '/api/v1';
10
- this.headers = options.token
11
- ? { ...this.headers, 'Authorization': `token ${options.token}` }
12
- : this.headers;
13
- }
14
- /**
15
- * Get all files in a directory of a repository
16
- * @param owner - Repository owner
17
- * @param repo - Repository name
18
- * @param directory - Directory path ('' for root)
19
- * @param branch - Branch name (optional)
20
- * @returns A list of files in the directory
21
- */
22
- async getFiles(owner, repo, directory, branch) {
23
- try {
24
- const requestBuilder = plugins.smartrequest.SmartRequest.create()
25
- .url(this.baseUrl + `/repos/${owner}/${repo}/contents/${directory}`)
26
- .headers(this.headers);
27
- if (branch) {
28
- requestBuilder.query({ ref: branch });
29
- }
30
- const response = await requestBuilder.get();
31
- let responseBody = await response.json();
32
- if (!Array.isArray(responseBody) && typeof responseBody === 'object') {
33
- responseBody = [responseBody];
34
- }
35
- else if (Array.isArray(responseBody)) {
36
- for (const entry of responseBody) {
37
- if (entry.type === 'dir') {
38
- continue;
39
- }
40
- else if (entry.type === 'file') {
41
- const requestBuilder2 = plugins.smartrequest.SmartRequest.create()
42
- .url(this.baseUrl + `/repos/${owner}/${repo}/contents/${entry.path}`)
43
- .headers(this.headers);
44
- if (branch) {
45
- requestBuilder2.query({ ref: branch });
46
- }
47
- const response2 = await requestBuilder2.get();
48
- const response2Body = await response2.json();
49
- entry.encoding = response2Body.encoding;
50
- entry.content = response2Body.content;
51
- }
52
- }
53
- }
54
- // lets map to the IRepoFile interface
55
- responseBody = responseBody.map((entry) => {
56
- return {
57
- name: entry.name,
58
- path: entry.path,
59
- type: entry.type,
60
- download_url: entry.download_url,
61
- base64Content: entry.content,
62
- encoding: entry.encoding,
63
- };
64
- });
65
- return responseBody;
66
- }
67
- catch (error) {
68
- console.error('Error fetching repository files:', error);
69
- throw error;
70
- }
71
- }
72
- /**
73
- * gets the current cli entry file from the code.foss.global/git.zone/cli repository
74
- * @returns
75
- */
76
- async getBinCliEntryFile() {
77
- const files = await this.getFiles('git.zone', 'cli', 'assets/templates/cli/cli.js');
78
- return files[0];
79
- }
80
- }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5naXRlYWFzc2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuZ2l0ZWFhc3NldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFnQnhDLE1BQU0sT0FBTyxXQUFXO0lBSXRCLFlBQVksT0FBNEI7UUFGaEMsWUFBTyxHQUE0QixFQUFFLENBQUM7UUFHNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFBO1FBQ25DLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLO1lBQ3hCLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDaEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUNaLEtBQWEsRUFDYixJQUFZLEVBQ1osU0FBaUIsRUFDakIsTUFBZTtRQUVmLElBQUksQ0FBQztZQUNILE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtpQkFDOUQsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxLQUFLLElBQUksSUFBSSxhQUFhLFNBQVMsRUFBRSxDQUFDO2lCQUNuRSxPQUFPLENBQUMsSUFBSSxDQUFDLE9B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
@@ -1,40 +0,0 @@
1
- import { type ITsPublishJson, type ITsPublishModulePlan } from './interfaces/index.js';
2
- import type { TsPublish } from './classes.tspublish.js';
3
- export interface IPublishModuleOptions {
4
- monoRepoDir: string;
5
- packageSubFolder: string;
6
- packageSubFolderFullPath?: string;
7
- tsPublishJson?: ITsPublishJson;
8
- publishModDirFullPath?: string;
9
- name?: string;
10
- version?: string;
11
- dependencies?: {
12
- [key: string]: string;
13
- };
14
- modulePlan?: ITsPublishModulePlan;
15
- }
16
- export interface IResolvedRegistry {
17
- url: string;
18
- accessLevel: string;
19
- }
20
- export declare class PublishModule {
21
- tsPublishRef: TsPublish;
22
- options: IPublishModuleOptions;
23
- constructor(tsPublishRef: TsPublish, options: IPublishModuleOptions);
24
- init(): Promise<void>;
25
- getLatestVersionOfPackage(name: string): Promise<string>;
26
- createTsconfigJson(): Promise<string>;
27
- createPackageJson(): Promise<string>;
28
- createPublishModuleDir(): Promise<void>;
29
- build(): Promise<void>;
30
- createBinCliSetup(): Promise<void>;
31
- /**
32
- * Resolves the registries to publish to based on tspublish.json configuration.
33
- * Supports:
34
- * - "useBase": Use only registries from smartconfig.json
35
- * - "extendBase": Use base registries + additions, with exclusions via "-" prefix
36
- * - Explicit registries: Direct registry URLs in format "url:accessLevel"
37
- */
38
- private resolveRegistries;
39
- publish(): Promise<void>;
40
- }
@@ -1,232 +0,0 @@
1
- import * as plugins from './plugins.js';
2
- import * as paths from './paths.js';
3
- import { logger, logInfo, logSuccess, logWarn, logError, logBuild, logPublish, logOngoing, logStart, logDone } from './logging.js';
4
- import {} from './interfaces/index.js';
5
- export class PublishModule {
6
- constructor(tsPublishRef, options) {
7
- this.tsPublishRef = tsPublishRef;
8
- this.options = options;
9
- }
10
- async init() {
11
- this.options.packageSubFolderFullPath = plugins.path.join(this.options.monoRepoDir, this.options.packageSubFolder);
12
- // check requirements
13
- if (!this.options.packageSubFolder.startsWith('ts')) {
14
- throw new Error('subFolder must start with "ts"');
15
- }
16
- const tspublishJsonPath = plugins.path.join(this.options.packageSubFolderFullPath, 'tspublish.json');
17
- const tspublishJsonContent = await plugins.smartfs.file(tspublishJsonPath).encoding('utf8').read();
18
- this.options.tsPublishJson = JSON.parse(tspublishJsonContent);
19
- // the package.json of the parent mono repo
20
- const packageJsonPath = plugins.path.join(this.options.monoRepoDir, 'package.json');
21
- const packageJsonContent = await plugins.smartfs.file(packageJsonPath).encoding('utf8').read();
22
- const monoRepoPackageJson = JSON.parse(packageJsonContent);
23
- this.options.modulePlan ??= (await this.tsPublishRef.plan(this.options.monoRepoDir)).modules
24
- .find((module) => module.folder === this.options.packageSubFolder);
25
- if (!this.options.modulePlan)
26
- throw new Error('Missing publish module plan.');
27
- this.options.dependencies = this.options.modulePlan.manifest.dependencies;
28
- this.options.name = this.options.name || this.options.tsPublishJson.name;
29
- this.options.version = monoRepoPackageJson.version;
30
- // now that we have a name and version, lets check if there is already a package under the same name and version.
31
- const smartnpmInstance = new plugins.smartnpm.NpmRegistry({}); // TODO: pass in options
32
- let packageInfo;
33
- try {
34
- packageInfo = await smartnpmInstance.getPackageInfo(this.options.name);
35
- }
36
- catch (error) {
37
- logWarn(`Package ${this.options.name} does not yet seem to exist. Proceeding in 10 seconds...`);
38
- await plugins.smartdelay.delayFor(10000);
39
- }
40
- if (packageInfo) {
41
- const availableVersions = packageInfo.allVersions.map((versionArg) => versionArg.version);
42
- logInfo(`Available versions for ${this.options.name}: ${availableVersions.join(', ')}`);
43
- if (availableVersions.includes(this.options.version)) {
44
- logError(`Package ${this.options.name} already exists with version ${this.options.version}`);
45
- throw new Error(`Package ${this.options.name} already exists with version ${this.options.version}.`);
46
- }
47
- }
48
- }
49
- async getLatestVersionOfPackage(name) {
50
- const smartnpmInstance = new plugins.smartnpm.NpmRegistry({}); // TODO: pass in options
51
- const packageInfo = await smartnpmInstance.getPackageInfo(name);
52
- if (!packageInfo) {
53
- throw new Error(`package ${name} not found`);
54
- }
55
- return packageInfo.allVersions[0].version;
56
- }
57
- async createTsconfigJson() {
58
- const tsconfigPath = plugins.path.join(paths.cwd, 'tsconfig.json');
59
- let originalTsConfig = null;
60
- if (await plugins.smartfs.file(tsconfigPath).exists()) {
61
- const tsconfigContent = await plugins.smartfs.file(tsconfigPath).encoding('utf8').read();
62
- originalTsConfig = JSON.parse(tsconfigContent);
63
- }
64
- if (originalTsConfig?.compilerOptions?.paths) {
65
- for (const path of Object.keys(originalTsConfig.compilerOptions.paths)) {
66
- originalTsConfig.compilerOptions.paths[path][0] = `.${originalTsConfig.compilerOptions.paths[path][0]}`;
67
- }
68
- }
69
- const tsconfigJson = {
70
- compilerOptions: {
71
- experimentalDecorators: true,
72
- useDefineForClassFields: false,
73
- target: 'ES2022',
74
- module: 'NodeNext',
75
- moduleResolution: 'NodeNext',
76
- esModuleInterop: true,
77
- verbatimModuleSyntax: true,
78
- paths: originalTsConfig?.compilerOptions?.paths,
79
- },
80
- exclude: ['dist_*/**/*.d.ts'],
81
- };
82
- return JSON.stringify(tsconfigJson, null, 2);
83
- }
84
- async createPackageJson() {
85
- if (!this.options.modulePlan)
86
- throw new Error('Publish module must be initialized first.');
87
- const rootManifest = JSON.parse(await plugins.fs.readFile(plugins.path.join(this.options.monoRepoDir, 'package.json'), 'utf8'));
88
- const buildVersion = rootManifest.devDependencies?.['@git.zone/tsbuild'] ?? rootManifest.dependencies?.['@git.zone/tsbuild'];
89
- if (typeof buildVersion !== 'string' || !buildVersion)
90
- throw new Error('Publishing requires a declared @git.zone/tsbuild version.');
91
- const packageJson = {
92
- ...this.options.modulePlan.manifest,
93
- scripts: {
94
- build: 'tsbuild tsfolders',
95
- },
96
- devDependencies: {
97
- '@git.zone/tsbuild': buildVersion,
98
- },
99
- };
100
- return JSON.stringify(packageJson, null, 2);
101
- }
102
- async createPublishModuleDir() {
103
- logOngoing(`Creating publish directory for ${this.options.name}`);
104
- this.options.publishModDirFullPath = plugins.path.join(this.options.monoRepoDir, `dist_publish_${this.options.packageSubFolder}`);
105
- // Ensure empty directory
106
- const publishDir = plugins.smartfs.directory(this.options.publishModDirFullPath);
107
- if (await publishDir.exists()) {
108
- await publishDir.recursive().delete();
109
- }
110
- await publishDir.recursive().create();
111
- // package.json
112
- const packageJsonPath = plugins.path.join(this.options.publishModDirFullPath, 'package.json');
113
- await plugins.smartfs.file(packageJsonPath).encoding('utf8').write(await this.createPackageJson());
114
- // tsconfig.json
115
- const tsconfigJsonPath = plugins.path.join(this.options.publishModDirFullPath, 'tsconfig.json');
116
- await plugins.smartfs.file(tsconfigJsonPath).encoding('utf8').write(await this.createTsconfigJson());
117
- // ts subfolder, the folder that contains the source code and is being transpiled
118
- for (const folder of this.options.modulePlan.folders) {
119
- await plugins.smartfs.directory(plugins.path.join(this.options.monoRepoDir, folder)).recursive()
120
- .copy(plugins.path.join(this.options.publishModDirFullPath, folder));
121
- }
122
- for (const path of this.options.modulePlan.include) {
123
- await plugins.fs.cp(plugins.path.join(this.options.monoRepoDir, path), plugins.path.join(this.options.publishModDirFullPath, path), { recursive: true });
124
- }
125
- // readme
126
- const readmeSrc = plugins.path.join(this.options.packageSubFolderFullPath, 'readme.md');
127
- const readmeDest = plugins.path.join(this.options.publishModDirFullPath, 'readme.md');
128
- await plugins.smartfs.file(readmeSrc).copy(readmeDest);
129
- // license
130
- const licenseSrc = plugins.path.join(this.options.monoRepoDir, this.options.modulePlan.licenseFile);
131
- const licenseDest = plugins.path.join(this.options.publishModDirFullPath, this.options.modulePlan.licenseFile);
132
- await plugins.smartfs.file(licenseSrc).copy(licenseDest);
133
- // cli stuff
134
- await this.createBinCliSetup();
135
- }
136
- async build() {
137
- logBuild(`Building ${this.options.name}...`);
138
- const smartshellInstance = new plugins.smartshell.Smartshell({
139
- executor: 'bash',
140
- });
141
- await smartshellInstance.exec(`cd ${this.options.publishModDirFullPath} && pnpm run build`);
142
- logSuccess(`Build completed for ${this.options.name}`);
143
- }
144
- async createBinCliSetup() {
145
- const binSetupApplies = !!this.options.tsPublishJson?.bin &&
146
- Array.isArray(this.options.tsPublishJson.bin) &&
147
- this.options.tsPublishJson.bin.length > 0;
148
- if (!binSetupApplies)
149
- return;
150
- const indexPath = `./dist_${this.options.packageSubFolder}/index.js`;
151
- const fileContent = `#!/usr/bin/env node\nprocess.env.CLI_CALL = 'true';\nconst cliTool = await import(${JSON.stringify(indexPath)});\nawait cliTool.runCli();\n`;
152
- const cliJsPath = plugins.path.join(this.options.publishModDirFullPath, 'cli.js');
153
- await plugins.smartfs.file(cliJsPath).encoding('utf8').write(fileContent);
154
- }
155
- /**
156
- * Resolves the registries to publish to based on tspublish.json configuration.
157
- * Supports:
158
- * - "useBase": Use only registries from smartconfig.json
159
- * - "extendBase": Use base registries + additions, with exclusions via "-" prefix
160
- * - Explicit registries: Direct registry URLs in format "url:accessLevel"
161
- */
162
- async resolveRegistries() {
163
- const rawRegistries = this.options.tsPublishJson?.registries || [];
164
- // Empty → skip publishing
165
- if (rawRegistries.length === 0) {
166
- return [];
167
- }
168
- const hasUseBase = rawRegistries.includes('useBase');
169
- const hasExtendBase = rawRegistries.includes('extendBase');
170
- let baseRegistries = [];
171
- let baseAccessLevel = 'public';
172
- // Load base registries from smartconfig.json if needed
173
- if (hasUseBase || hasExtendBase) {
174
- const smartconfigInstance = new plugins.smartconfig.Smartconfig(this.options.monoRepoDir);
175
- const gitzoneConfig = smartconfigInstance.dataFor('@git.zone/cli', {});
176
- baseRegistries = gitzoneConfig?.release?.targets?.npm?.registries ?? gitzoneConfig?.release?.registries ?? [];
177
- baseAccessLevel = gitzoneConfig?.release?.targets?.npm?.accessLevel ?? gitzoneConfig?.release?.accessLevel ?? 'public';
178
- if (baseRegistries.length === 0) {
179
- throw new Error(`useBase/extendBase specified in tspublish.json but no registries configured in smartconfig.json at @git.zone/cli.release.registries`);
180
- }
181
- }
182
- // useBase: Only base registries
183
- if (hasUseBase) {
184
- return baseRegistries.map((url) => ({ url, accessLevel: baseAccessLevel }));
185
- }
186
- // extendBase: Base registries + additions - exclusions
187
- if (hasExtendBase) {
188
- const exclusions = rawRegistries
189
- .filter((r) => r.startsWith('-'))
190
- .map((r) => r.slice(1)); // remove '-' prefix
191
- const additions = rawRegistries.filter((r) => r !== 'extendBase' && !r.startsWith('-'));
192
- // Filter out excluded base registries
193
- const result = baseRegistries
194
- .filter((url) => !exclusions.includes(url))
195
- .map((url) => ({ url, accessLevel: baseAccessLevel }));
196
- // Add explicit registries
197
- for (const addition of additions) {
198
- const parts = addition.split(':');
199
- const url = parts[0];
200
- const access = parts[1] || 'public';
201
- result.push({ url, accessLevel: access });
202
- }
203
- return result;
204
- }
205
- // Explicit registries only (original behavior)
206
- return rawRegistries.map((r) => {
207
- const parts = r.split(':');
208
- const url = parts[0];
209
- const access = parts[1] || 'public';
210
- return { url, accessLevel: access };
211
- });
212
- }
213
- async publish() {
214
- const registries = await this.resolveRegistries();
215
- // Handle empty registries
216
- if (registries.length === 0) {
217
- logWarn(`No registries configured for ${this.options.name}. Skipping publish.`);
218
- return;
219
- }
220
- logPublish(`Publishing ${this.options.name} v${this.options.version} to ${registries.length} registry(ies)...`);
221
- const smartshellInstance = new plugins.smartshell.Smartshell({
222
- executor: 'bash',
223
- });
224
- for (const registry of registries) {
225
- const registryUrl = registry.url.startsWith('https://') ? registry.url : `https://${registry.url}`;
226
- logOngoing(`Publishing to ${registryUrl}...`);
227
- await smartshellInstance.exec(`cd ${this.options.publishModDirFullPath} && pnpm publish ${registry.accessLevel === 'public' ? '--access public' : ''} --no-git-checks --registry ${registryUrl}`);
228
- }
229
- logSuccess(`Successfully published ${this.options.name} v${this.options.version}!`);
230
- }
231
- }
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wdWJsaXNobW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5wdWJsaXNobW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkksT0FBTyxFQUFrRCxNQUFNLHVCQUF1QixDQUFDO0FBb0J2RixNQUFNLE9BQU8sYUFBYTtJQUd4QixZQUFZLFlBQXVCLEVBQUUsT0FBOEI7UUFDakUsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJO1FBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDdkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQzlCLENBQUM7UUFFRixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FB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
@@ -1,15 +0,0 @@
1
- import * as plugins from './plugins.js';
2
- export declare const logger: plugins.smartlog.Smartlog;
3
- export declare const logInfo: (message: string, data?: any) => void;
4
- export declare const logSuccess: (message: string, data?: any) => void;
5
- export declare const logWarn: (message: string, data?: any) => void;
6
- export declare const logError: (message: string, data?: any) => void;
7
- export declare const logStart: (operation: string) => void;
8
- export declare const logDone: (operation: string) => void;
9
- export declare const logPackage: (message: string, packageName: string) => void;
10
- export declare const logBuild: (message: string) => void;
11
- export declare const logPublish: (message: string) => void;
12
- export declare const logSeparator: () => void;
13
- export declare const logHeader: (title: string) => void;
14
- export declare const logOngoing: (text: string) => void;
15
- export declare const logProgress: (current: number, total: number, item: string) => void;