@git.zone/tspublish 1.15.0 → 2.0.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/.smartconfig.json +1 -1
- package/dist_ts/00_commitinfo_data.js +3 -3
- package/dist_ts/classes.tspublish.d.ts +2 -5
- package/dist_ts/classes.tspublish.js +3 -41
- package/dist_ts/index.d.ts +2 -1
- package/dist_ts/index.js +10 -9
- package/dist_ts/paths.d.ts +0 -2
- package/dist_ts/paths.js +1 -4
- package/dist_ts/plugins.d.ts +1 -11
- package/dist_ts/plugins.js +2 -12
- package/package.json +4 -14
- package/readme.md +17 -21
- package/ts/00_commitinfo_data.ts +2 -2
- package/ts/classes.tspublish.ts +2 -43
- package/ts/index.ts +10 -7
- package/ts/paths.ts +0 -8
- package/ts/plugins.ts +1 -11
- package/dist_ts/classes.giteaassets.d.ts +0 -32
- package/dist_ts/classes.giteaassets.js +0 -81
- package/dist_ts/classes.publishmodule.d.ts +0 -40
- package/dist_ts/classes.publishmodule.js +0 -232
- package/dist_ts/logging.d.ts +0 -15
- package/dist_ts/logging.js +0 -87
- package/ts/classes.giteaassets.ts +0 -108
- package/ts/classes.publishmodule.ts +0 -300
- package/ts/logging.ts +0 -104
|
@@ -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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
|
package/dist_ts/logging.d.ts
DELETED
|
@@ -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;
|
package/dist_ts/logging.js
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import * as plugins from './plugins.js';
|
|
2
|
-
import * as commitinfo from './00_commitinfo_data.js';
|
|
3
|
-
export const logger = plugins.smartlog.Smartlog.createForCommitinfo(commitinfo.commitinfo);
|
|
4
|
-
logger.enableConsole();
|
|
5
|
-
// Color-coded log level indicators
|
|
6
|
-
const logIcons = {
|
|
7
|
-
info: plugins.consolecolor.coloredString('ℹ', 'cyan'),
|
|
8
|
-
success: plugins.consolecolor.coloredString('✓', 'green'),
|
|
9
|
-
warn: plugins.consolecolor.coloredString('⚠', 'orange'),
|
|
10
|
-
error: plugins.consolecolor.coloredString('✖', 'red'),
|
|
11
|
-
start: plugins.consolecolor.coloredString('▶', 'blue'),
|
|
12
|
-
done: plugins.consolecolor.coloredString('✔', 'green'),
|
|
13
|
-
package: plugins.consolecolor.coloredString('📦', 'blue'),
|
|
14
|
-
build: plugins.consolecolor.coloredString('🔨', 'cyan'),
|
|
15
|
-
publish: plugins.consolecolor.coloredString('🚀', 'green'),
|
|
16
|
-
};
|
|
17
|
-
// Helper function for info messages with color
|
|
18
|
-
export const logInfo = (message, data) => {
|
|
19
|
-
const coloredMessage = `${logIcons.info} ${plugins.consolecolor.coloredString(message, 'cyan')}`;
|
|
20
|
-
logger.log('info', coloredMessage, data);
|
|
21
|
-
};
|
|
22
|
-
// Helper function for success messages
|
|
23
|
-
export const logSuccess = (message, data) => {
|
|
24
|
-
const coloredMessage = `${logIcons.success} ${plugins.consolecolor.coloredString(message, 'green')}`;
|
|
25
|
-
logger.log('ok', coloredMessage, data);
|
|
26
|
-
};
|
|
27
|
-
// Helper function for warning messages
|
|
28
|
-
export const logWarn = (message, data) => {
|
|
29
|
-
const coloredMessage = `${logIcons.warn} ${plugins.consolecolor.coloredString(message, 'orange')}`;
|
|
30
|
-
logger.log('warn', coloredMessage, data);
|
|
31
|
-
};
|
|
32
|
-
// Helper function for error messages
|
|
33
|
-
export const logError = (message, data) => {
|
|
34
|
-
const coloredMessage = `${logIcons.error} ${plugins.consolecolor.coloredString(message, 'red')}`;
|
|
35
|
-
logger.log('error', coloredMessage, data);
|
|
36
|
-
};
|
|
37
|
-
// Helper function for start of operations
|
|
38
|
-
export const logStart = (operation) => {
|
|
39
|
-
const coloredMessage = `${logIcons.start} ${plugins.consolecolor.coloredString(`Starting ${operation}...`, 'blue')}`;
|
|
40
|
-
logger.log('info', coloredMessage);
|
|
41
|
-
};
|
|
42
|
-
// Helper function for completion of operations
|
|
43
|
-
export const logDone = (operation) => {
|
|
44
|
-
const coloredMessage = `${logIcons.done} ${plugins.consolecolor.coloredString(`Completed ${operation}`, 'green')}`;
|
|
45
|
-
logger.log('ok', coloredMessage);
|
|
46
|
-
};
|
|
47
|
-
// Helper function for package-related messages
|
|
48
|
-
export const logPackage = (message, packageName) => {
|
|
49
|
-
const coloredMessage = `${logIcons.package} ${message}: ${plugins.consolecolor.coloredString(packageName, 'blue', 'white')}`;
|
|
50
|
-
logger.log('info', coloredMessage);
|
|
51
|
-
};
|
|
52
|
-
// Helper function for build-related messages
|
|
53
|
-
export const logBuild = (message) => {
|
|
54
|
-
const coloredMessage = `${logIcons.build} ${plugins.consolecolor.coloredString(message, 'cyan')}`;
|
|
55
|
-
logger.log('info', coloredMessage);
|
|
56
|
-
};
|
|
57
|
-
// Helper function for publish-related messages
|
|
58
|
-
export const logPublish = (message) => {
|
|
59
|
-
const coloredMessage = `${logIcons.publish} ${plugins.consolecolor.coloredString(message, 'green')}`;
|
|
60
|
-
logger.log('info', coloredMessage);
|
|
61
|
-
};
|
|
62
|
-
// Create a visual separator for different phases
|
|
63
|
-
export const logSeparator = () => {
|
|
64
|
-
const separator = plugins.consolecolor.coloredString('━'.repeat(60), 'cyan');
|
|
65
|
-
console.log(separator);
|
|
66
|
-
};
|
|
67
|
-
// Create a header for major sections
|
|
68
|
-
export const logHeader = (title) => {
|
|
69
|
-
logSeparator();
|
|
70
|
-
const header = plugins.consolecolor.coloredString(` ${title.toUpperCase()} `, 'white', 'blue');
|
|
71
|
-
console.log(header);
|
|
72
|
-
logSeparator();
|
|
73
|
-
};
|
|
74
|
-
// Helper for indicating ongoing operations
|
|
75
|
-
export const logOngoing = (text) => {
|
|
76
|
-
const spinnerIcon = plugins.consolecolor.coloredString('⟳', 'cyan');
|
|
77
|
-
const coloredMessage = `${spinnerIcon} ${plugins.consolecolor.coloredString(text, 'cyan')}`;
|
|
78
|
-
logger.log('info', coloredMessage);
|
|
79
|
-
};
|
|
80
|
-
// Progress indicator helper
|
|
81
|
-
export const logProgress = (current, total, item) => {
|
|
82
|
-
const percentage = Math.round((current / total) * 100);
|
|
83
|
-
const progressBar = '█'.repeat(Math.floor(percentage / 5)) + '░'.repeat(20 - Math.floor(percentage / 5));
|
|
84
|
-
const coloredProgress = plugins.consolecolor.coloredString(`[${progressBar}] ${percentage}% - ${item}`, percentage === 100 ? 'green' : 'blue');
|
|
85
|
-
logger.log('info', coloredProgress);
|
|
86
|
-
};
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2xvZ2dpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzNGLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUV2QixtQ0FBbUM7QUFDbkMsTUFBTSxRQUFRLEdBQUc7SUFDZixJQUFJLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQztJQUNyRCxPQUFPLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQztJQUN6RCxJQUFJLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztJQUN2RCxLQUFLLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztJQUNyRCxLQUFLLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQztJQUN0RCxJQUFJLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQztJQUN0RCxPQUFPLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUN6RCxLQUFLLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUN2RCxPQUFPLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FB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
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import * as plugins from './plugins.js';
|
|
2
|
-
|
|
3
|
-
interface IRepoFile {
|
|
4
|
-
name: string;
|
|
5
|
-
path: string;
|
|
6
|
-
type: 'file' | 'dir';
|
|
7
|
-
download_url: string | null;
|
|
8
|
-
base64Content: string | null;
|
|
9
|
-
encoding: string | null;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
interface IGiteaAssetsOptions {
|
|
13
|
-
giteaBaseUrl: string; // Base URL of your Gitea instance
|
|
14
|
-
token?: string; // Optional token for private repositories
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export class GiteaAssets {
|
|
18
|
-
private baseUrl: string;
|
|
19
|
-
private headers: {[key: string]: string} = {};
|
|
20
|
-
|
|
21
|
-
constructor(options: IGiteaAssetsOptions) {
|
|
22
|
-
this.baseUrl = options.giteaBaseUrl
|
|
23
|
-
if (this.baseUrl.endsWith('/')) {
|
|
24
|
-
this.baseUrl = this.baseUrl.slice(0, -1);
|
|
25
|
-
}
|
|
26
|
-
this.baseUrl += '/api/v1';
|
|
27
|
-
this.headers = options.token
|
|
28
|
-
? { ...this.headers, 'Authorization': `token ${options.token}` }
|
|
29
|
-
: this.headers;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Get all files in a directory of a repository
|
|
34
|
-
* @param owner - Repository owner
|
|
35
|
-
* @param repo - Repository name
|
|
36
|
-
* @param directory - Directory path ('' for root)
|
|
37
|
-
* @param branch - Branch name (optional)
|
|
38
|
-
* @returns A list of files in the directory
|
|
39
|
-
*/
|
|
40
|
-
async getFiles(
|
|
41
|
-
owner: string,
|
|
42
|
-
repo: string,
|
|
43
|
-
directory: string,
|
|
44
|
-
branch?: string
|
|
45
|
-
): Promise<IRepoFile[]> {
|
|
46
|
-
try {
|
|
47
|
-
const requestBuilder = plugins.smartrequest.SmartRequest.create()
|
|
48
|
-
.url(this.baseUrl + `/repos/${owner}/${repo}/contents/${directory}`)
|
|
49
|
-
.headers(this.headers);
|
|
50
|
-
|
|
51
|
-
if (branch) {
|
|
52
|
-
requestBuilder.query({ ref: branch });
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const response = await requestBuilder.get();
|
|
56
|
-
let responseBody = await response.json();
|
|
57
|
-
|
|
58
|
-
if (!Array.isArray(responseBody) && typeof responseBody === 'object') {
|
|
59
|
-
responseBody = [responseBody];
|
|
60
|
-
} else if (Array.isArray(responseBody)) {
|
|
61
|
-
for (const entry of responseBody) {
|
|
62
|
-
if (entry.type === 'dir') {
|
|
63
|
-
continue;
|
|
64
|
-
} else if (entry.type === 'file') {
|
|
65
|
-
const requestBuilder2 = plugins.smartrequest.SmartRequest.create()
|
|
66
|
-
.url(this.baseUrl + `/repos/${owner}/${repo}/contents/${entry.path}`)
|
|
67
|
-
.headers(this.headers);
|
|
68
|
-
|
|
69
|
-
if (branch) {
|
|
70
|
-
requestBuilder2.query({ ref: branch });
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const response2 = await requestBuilder2.get();
|
|
74
|
-
const response2Body = await response2.json();
|
|
75
|
-
entry.encoding = response2Body.encoding;
|
|
76
|
-
entry.content = response2Body.content;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// lets map to the IRepoFile interface
|
|
82
|
-
responseBody = responseBody.map((entry: any) => {
|
|
83
|
-
return {
|
|
84
|
-
name: entry.name,
|
|
85
|
-
path: entry.path,
|
|
86
|
-
type: entry.type,
|
|
87
|
-
download_url: entry.download_url,
|
|
88
|
-
base64Content: entry.content,
|
|
89
|
-
encoding: entry.encoding,
|
|
90
|
-
};
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
return responseBody;
|
|
94
|
-
} catch (error) {
|
|
95
|
-
console.error('Error fetching repository files:', error);
|
|
96
|
-
throw error;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* gets the current cli entry file from the code.foss.global/git.zone/cli repository
|
|
102
|
-
* @returns
|
|
103
|
-
*/
|
|
104
|
-
public async getBinCliEntryFile() {
|
|
105
|
-
const files = await this.getFiles('git.zone', 'cli', 'assets/templates/cli/cli.js');
|
|
106
|
-
return files[0];
|
|
107
|
-
}
|
|
108
|
-
}
|