@git.zone/tspublish 1.1.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/cli.js +4 -0
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/classes.publishmodule.d.ts +19 -0
- package/dist_ts/classes.publishmodule.js +70 -0
- package/dist_ts/classes.tspublish.d.ts +5 -0
- package/dist_ts/classes.tspublish.js +35 -0
- package/dist_ts/index.d.ts +2 -0
- package/dist_ts/index.js +8 -0
- package/dist_ts/logging.d.ts +2 -0
- package/dist_ts/logging.js +4 -0
- package/dist_ts/paths.d.ts +3 -0
- package/dist_ts/paths.js +5 -0
- package/dist_ts/plugins.d.ts +8 -0
- package/dist_ts/plugins.js +11 -0
- package/npmextra.json +18 -0
- package/package.json +54 -0
- package/readme.hints.md +3 -0
- package/readme.md +7 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/classes.publishmodule.ts +105 -0
- package/ts/classes.tspublish.ts +38 -0
- package/ts/index.ts +9 -0
- package/ts/logging.ts +4 -0
- package/ts/paths.ts +7 -0
- package/ts/plugins.ts +14 -0
package/cli.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* autocreated commitinfo by @push.rocks/commitinfo
|
|
3
|
+
*/
|
|
4
|
+
export const commitinfo = {
|
|
5
|
+
name: '@git.zone/tspublish',
|
|
6
|
+
version: '1.1.0',
|
|
7
|
+
description: 'publish multiple, concise and small packages from monorepos'
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDZEQUE2RDtDQUMzRSxDQUFBIn0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface IPublishModuleOptions {
|
|
2
|
+
monoRepoDir: string;
|
|
3
|
+
packageSubFolder: string;
|
|
4
|
+
packageSubFolderFullPath?: string;
|
|
5
|
+
publishModDirFullPath?: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
version?: string;
|
|
8
|
+
dependencies?: {
|
|
9
|
+
[key: string]: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare class PublishModule {
|
|
13
|
+
options: IPublishModuleOptions;
|
|
14
|
+
constructor(options: IPublishModuleOptions);
|
|
15
|
+
init(): Promise<void>;
|
|
16
|
+
getLatestVersionOfPackage(name: string): Promise<string>;
|
|
17
|
+
createPackageJson(): Promise<string>;
|
|
18
|
+
createPublishModuleDir(): Promise<void>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import * as paths from './paths.js';
|
|
3
|
+
import { logger } from './logging.js';
|
|
4
|
+
export class PublishModule {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.options = options;
|
|
7
|
+
}
|
|
8
|
+
async init() {
|
|
9
|
+
this.options.packageSubFolderFullPath = plugins.path.join(this.options.monoRepoDir, this.options.packageSubFolder);
|
|
10
|
+
// check requirements
|
|
11
|
+
if (!this.options.packageSubFolder.startsWith('ts')) {
|
|
12
|
+
throw new Error('subFolder must start with "ts"');
|
|
13
|
+
}
|
|
14
|
+
const jsonData = plugins.smartfile.fs.toObjectSync(plugins.path.join(this.options.packageSubFolderFullPath, 'tspublish.json'));
|
|
15
|
+
this.options.dependencies = this.options.dependencies || {};
|
|
16
|
+
this.options.dependencies = {
|
|
17
|
+
...this.options.dependencies,
|
|
18
|
+
...jsonData.dependencies,
|
|
19
|
+
};
|
|
20
|
+
this.options.name = this.options.name || jsonData.name;
|
|
21
|
+
this.options.version = plugins.smartfile.fs.toObjectSync(plugins.path.join(this.options.monoRepoDir, 'package.json')).version;
|
|
22
|
+
// now that we have a name and version, lets check if there is already a package under the same name and version.
|
|
23
|
+
const smartnpmInstance = new plugins.smartnpm.NpmRegistry({}); // TODO: pass in options
|
|
24
|
+
const packageInfo = await smartnpmInstance.getPackageInfo(this.options.name);
|
|
25
|
+
if (packageInfo) {
|
|
26
|
+
const availableVersions = packageInfo.allVersions.map((versionArg) => versionArg.version);
|
|
27
|
+
logger.log('info', `available versions are: ${availableVersions.toString()}`);
|
|
28
|
+
if (availableVersions.includes(this.options.version)) {
|
|
29
|
+
throw new Error(`package ${this.options.name} already exists with version ${this.options.version}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async getLatestVersionOfPackage(name) {
|
|
34
|
+
const smartnpmInstance = new plugins.smartnpm.NpmRegistry({}); // TODO: pass in options
|
|
35
|
+
const packageInfo = await smartnpmInstance.getPackageInfo(name);
|
|
36
|
+
if (!packageInfo) {
|
|
37
|
+
throw new Error(`package ${name} not found`);
|
|
38
|
+
}
|
|
39
|
+
return packageInfo.allVersions[0].version;
|
|
40
|
+
}
|
|
41
|
+
async createPackageJson() {
|
|
42
|
+
const packageJson = {
|
|
43
|
+
name: this.options.name,
|
|
44
|
+
version: this.options.version,
|
|
45
|
+
description: '',
|
|
46
|
+
exports: {
|
|
47
|
+
'.': {
|
|
48
|
+
import: './dist_${this.options.packageSubFolder}/index.js',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
scripts: {
|
|
52
|
+
build: 'tsbuild tsfolders --allowimplicitany',
|
|
53
|
+
},
|
|
54
|
+
dependencies: this.options.dependencies,
|
|
55
|
+
devDependencies: {
|
|
56
|
+
'@git.zone/tsbuild': await this.getLatestVersionOfPackage('@git.zone/tsbuild'),
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
return JSON.stringify(packageJson, null, 2);
|
|
60
|
+
}
|
|
61
|
+
async createPublishModuleDir() {
|
|
62
|
+
this.options.publishModDirFullPath = plugins.path.join(this.options.monoRepoDir, `dist_publish_${this.options.packageSubFolder}`);
|
|
63
|
+
// package.json
|
|
64
|
+
await plugins.smartfile.fs.ensureEmptyDir(this.options.publishModDirFullPath);
|
|
65
|
+
const packageJson = await plugins.smartfile.SmartFile.fromString(plugins.path.join(this.options.publishModDirFullPath, 'package.json'), await this.createPackageJson(), 'utf8');
|
|
66
|
+
// ts folder
|
|
67
|
+
await plugins.smartfile.fs.copy(this.options.packageSubFolderFullPath, plugins.path.join(this.options.publishModDirFullPath, this.options.packageSubFolder));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wdWJsaXNobW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5wdWJsaXNobW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFZdEMsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBWSxPQUE4QjtRQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDZixJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUN2RCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDOUIsQ0FBQztRQUVGLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FDaEQsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUMzRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQzVELElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHO1lBQzFCLEdBQUcsSUFB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
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { logger } from './logging.js';
|
|
2
|
+
import * as plugins from './plugins.js';
|
|
3
|
+
import { PublishModule } from './classes.publishmodule.js';
|
|
4
|
+
export class TsPublish {
|
|
5
|
+
constructor() { }
|
|
6
|
+
async publish(monorepoDirArg) {
|
|
7
|
+
const publishModules = await this.readDirectory(monorepoDirArg);
|
|
8
|
+
for (const publishModule of publishModules) {
|
|
9
|
+
const publishModuleInstance = new PublishModule({
|
|
10
|
+
monoRepoDir: monorepoDirArg,
|
|
11
|
+
packageSubFolder: publishModule,
|
|
12
|
+
});
|
|
13
|
+
await publishModuleInstance.init();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
async readDirectory(dirArg) {
|
|
17
|
+
const subDirs = await plugins.smartfile.fs.listFolders(dirArg);
|
|
18
|
+
const publishModules = [];
|
|
19
|
+
for (const subDir of subDirs) {
|
|
20
|
+
if (!subDir.startsWith('ts')) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const fileTree = await plugins.smartfile.fs.listFileTree(subDir, '**/*');
|
|
24
|
+
const hasPublishJson = fileTree.includes('tspublish.json');
|
|
25
|
+
if (!hasPublishJson) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
logger.log('info', `found publish module: ${subDir}`);
|
|
29
|
+
publishModules.push(subDir);
|
|
30
|
+
}
|
|
31
|
+
logger.log('ok', `found ${publishModules.length} publish modules`);
|
|
32
|
+
return publishModules;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50c3B1Ymxpc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnRzcHVibGlzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxNQUFNLE9BQU8sU0FBUztJQUNwQixnQkFBZSxDQUFDO0lBRVQsS0FBSyxDQUFDLE9BQU8sQ0FBRSxjQUFzQjtRQUMxQyxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEUsS0FBSyxNQUFNLGFBQWEsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUMzQyxNQUFNLHFCQUFxQixHQUFHLElBQUksYUFBYSxDQUFDO2dCQUM5QyxXQUFXLEVBQUUsY0FBYztnQkFDM0IsZ0JBQWdCLEVBQUUsYUFBYTthQUNoQyxDQUFDLENBQUM7WUFDSCxNQUFNLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWEsQ0FBRSxNQUFjO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELE1BQU0sY0FBYyxHQUFhLEVBQUUsQ0FBQztRQUNwQyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLFNBQVM7WUFDWCxDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3BCLFNBQVM7WUFDWCxDQUFDO1lBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUseUJBQXlCLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDdEQsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxjQUFjLENBQUMsTUFBTSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiJ9
|
package/dist_ts/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as paths from './paths.js';
|
|
2
|
+
import { TsPublish } from './classes.tspublish.js';
|
|
3
|
+
export * from './classes.tspublish.js';
|
|
4
|
+
export const runCli = async () => {
|
|
5
|
+
const tspublish = new TsPublish();
|
|
6
|
+
await tspublish.publish(paths.cwd);
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkQsY0FBYyx3QkFBd0IsQ0FBQTtBQUV0QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDL0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1,4 @@
|
|
|
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
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2xvZ2dpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDIn0=
|
package/dist_ts/paths.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
export const cwd = process.cwd();
|
|
3
|
+
export const packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '..');
|
|
4
|
+
export const nogitDir = plugins.path.join(packageDir, '.nogit');
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRWpDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25ILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
export { path, };
|
|
3
|
+
import * as smartfile from '@push.rocks/smartfile';
|
|
4
|
+
import * as smartcli from '@push.rocks/smartcli';
|
|
5
|
+
import * as smartlog from '@push.rocks/smartlog';
|
|
6
|
+
import * as smartnpm from '@push.rocks/smartnpm';
|
|
7
|
+
import * as smartpath from '@push.rocks/smartpath';
|
|
8
|
+
export { smartfile, smartcli, smartlog, smartnpm, smartpath, };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// node native scope
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
export { path, };
|
|
4
|
+
// @push.rocks scope
|
|
5
|
+
import * as smartfile from '@push.rocks/smartfile';
|
|
6
|
+
import * as smartcli from '@push.rocks/smartcli';
|
|
7
|
+
import * as smartlog from '@push.rocks/smartlog';
|
|
8
|
+
import * as smartnpm from '@push.rocks/smartnpm';
|
|
9
|
+
import * as smartpath from '@push.rocks/smartpath';
|
|
10
|
+
export { smartfile, smartcli, smartlog, smartnpm, smartpath, };
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFDTCxJQUFJLEdBQ0wsQ0FBQTtBQUVELG9CQUFvQjtBQUNwQixPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssUUFBUSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEdBQUcsQ0FBQyJ9
|
package/npmextra.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"gitzone": {
|
|
3
|
+
"projectType": "npm",
|
|
4
|
+
"module": {
|
|
5
|
+
"githost": "code.foss.global",
|
|
6
|
+
"gitscope": "git.zone",
|
|
7
|
+
"gitrepo": "tspublish",
|
|
8
|
+
"description": "publish multiple, concise and small packages from monorepos",
|
|
9
|
+
"npmPackagename": "@git.zone/tspublish",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"projectDomain": "git.zone"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"npmci": {
|
|
15
|
+
"npmGlobalTools": [],
|
|
16
|
+
"npmAccessLevel": "public"
|
|
17
|
+
}
|
|
18
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@git.zone/tspublish",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "publish multiple, concise and small packages from monorepos",
|
|
6
|
+
"main": "dist_ts/index.js",
|
|
7
|
+
"typings": "dist_ts/index.d.ts",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"author": "Task Venture Capital GmbH",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"devDependencies": {
|
|
12
|
+
"@git.zone/tsbuild": "^2.1.25",
|
|
13
|
+
"@git.zone/tsbundle": "^2.0.5",
|
|
14
|
+
"@git.zone/tsrun": "^1.2.46",
|
|
15
|
+
"@git.zone/tstest": "^1.0.44",
|
|
16
|
+
"@push.rocks/tapbundle": "^5.0.15",
|
|
17
|
+
"@types/node": "^22.7.6"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://code.foss.global/git.zone/tspublish.git"
|
|
22
|
+
},
|
|
23
|
+
"bugs": {
|
|
24
|
+
"url": "https://code.foss.global/git.zone/tspublish/issues"
|
|
25
|
+
},
|
|
26
|
+
"homepage": "https://code.foss.global/git.zone/tspublish#readme",
|
|
27
|
+
"browserslist": [
|
|
28
|
+
"last 1 chrome versions"
|
|
29
|
+
],
|
|
30
|
+
"files": [
|
|
31
|
+
"ts/**/*",
|
|
32
|
+
"ts_web/**/*",
|
|
33
|
+
"dist/**/*",
|
|
34
|
+
"dist_*/**/*",
|
|
35
|
+
"dist_ts/**/*",
|
|
36
|
+
"dist_ts_web/**/*",
|
|
37
|
+
"assets/**/*",
|
|
38
|
+
"cli.js",
|
|
39
|
+
"npmextra.json",
|
|
40
|
+
"readme.md"
|
|
41
|
+
],
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@push.rocks/smartcli": "^4.0.11",
|
|
44
|
+
"@push.rocks/smartfile": "^11.0.21",
|
|
45
|
+
"@push.rocks/smartlog": "^3.0.7",
|
|
46
|
+
"@push.rocks/smartnpm": "^2.0.4",
|
|
47
|
+
"@push.rocks/smartpath": "^5.0.18"
|
|
48
|
+
},
|
|
49
|
+
"scripts": {
|
|
50
|
+
"test": "(tstest test/ --web)",
|
|
51
|
+
"build": "(tsbuild --web --allowimplicitany)",
|
|
52
|
+
"buildDocs": "(tsdoc)"
|
|
53
|
+
}
|
|
54
|
+
}
|
package/readme.hints.md
ADDED
package/readme.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import * as paths from './paths.js';
|
|
3
|
+
import { logger } from './logging.js';
|
|
4
|
+
|
|
5
|
+
export interface IPublishModuleOptions {
|
|
6
|
+
monoRepoDir: string;
|
|
7
|
+
packageSubFolder: string;
|
|
8
|
+
packageSubFolderFullPath?: string;
|
|
9
|
+
publishModDirFullPath?: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
version?: string;
|
|
12
|
+
dependencies?: { [key: string]: string };
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export class PublishModule {
|
|
16
|
+
public options: IPublishModuleOptions;
|
|
17
|
+
constructor(options: IPublishModuleOptions) {
|
|
18
|
+
this.options = options;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public async init() {
|
|
22
|
+
this.options.packageSubFolderFullPath = plugins.path.join(
|
|
23
|
+
this.options.monoRepoDir,
|
|
24
|
+
this.options.packageSubFolder
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
// check requirements
|
|
28
|
+
if (!this.options.packageSubFolder.startsWith('ts')) {
|
|
29
|
+
throw new Error('subFolder must start with "ts"');
|
|
30
|
+
}
|
|
31
|
+
const jsonData = plugins.smartfile.fs.toObjectSync(
|
|
32
|
+
plugins.path.join(this.options.packageSubFolderFullPath, 'tspublish.json')
|
|
33
|
+
);
|
|
34
|
+
this.options.dependencies = this.options.dependencies || {};
|
|
35
|
+
this.options.dependencies = {
|
|
36
|
+
...this.options.dependencies,
|
|
37
|
+
...jsonData.dependencies,
|
|
38
|
+
};
|
|
39
|
+
this.options.name = this.options.name || jsonData.name;
|
|
40
|
+
this.options.version = plugins.smartfile.fs.toObjectSync(
|
|
41
|
+
plugins.path.join(this.options.monoRepoDir, 'package.json')
|
|
42
|
+
).version;
|
|
43
|
+
|
|
44
|
+
// now that we have a name and version, lets check if there is already a package under the same name and version.
|
|
45
|
+
const smartnpmInstance = new plugins.smartnpm.NpmRegistry({}); // TODO: pass in options
|
|
46
|
+
const packageInfo = await smartnpmInstance.getPackageInfo(this.options.name);
|
|
47
|
+
if (packageInfo) {
|
|
48
|
+
const availableVersions = packageInfo.allVersions.map((versionArg) => versionArg.version);
|
|
49
|
+
logger.log('info', `available versions are: ${availableVersions.toString()}`);
|
|
50
|
+
if (availableVersions.includes(this.options.version)) {
|
|
51
|
+
throw new Error(
|
|
52
|
+
`package ${this.options.name} already exists with version ${this.options.version}`
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public async getLatestVersionOfPackage(name: string) {
|
|
59
|
+
const smartnpmInstance = new plugins.smartnpm.NpmRegistry({}); // TODO: pass in options
|
|
60
|
+
const packageInfo = await smartnpmInstance.getPackageInfo(name);
|
|
61
|
+
if (!packageInfo) {
|
|
62
|
+
throw new Error(`package ${name} not found`);
|
|
63
|
+
}
|
|
64
|
+
return packageInfo.allVersions[0].version;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
public async createPackageJson() {
|
|
68
|
+
const packageJson = {
|
|
69
|
+
name: this.options.name,
|
|
70
|
+
version: this.options.version,
|
|
71
|
+
description: '',
|
|
72
|
+
exports: {
|
|
73
|
+
'.': {
|
|
74
|
+
import: './dist_${this.options.packageSubFolder}/index.js',
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
scripts: {
|
|
78
|
+
build: 'tsbuild tsfolders --allowimplicitany',
|
|
79
|
+
},
|
|
80
|
+
dependencies: this.options.dependencies,
|
|
81
|
+
devDependencies: {
|
|
82
|
+
'@git.zone/tsbuild': await this.getLatestVersionOfPackage('@git.zone/tsbuild'),
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
return JSON.stringify(packageJson, null, 2);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public async createPublishModuleDir() {
|
|
89
|
+
this.options.publishModDirFullPath = plugins.path.join(
|
|
90
|
+
this.options.monoRepoDir,
|
|
91
|
+
`dist_publish_${this.options.packageSubFolder}`
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
// package.json
|
|
95
|
+
await plugins.smartfile.fs.ensureEmptyDir(this.options.publishModDirFullPath);
|
|
96
|
+
const packageJson = await plugins.smartfile.SmartFile.fromString(
|
|
97
|
+
plugins.path.join(this.options.publishModDirFullPath, 'package.json'),
|
|
98
|
+
await this.createPackageJson(),
|
|
99
|
+
'utf8'
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
// ts folder
|
|
103
|
+
await plugins.smartfile.fs.copy(this.options.packageSubFolderFullPath, plugins.path.join(this.options.publishModDirFullPath, this.options.packageSubFolder))
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { logger } from './logging.js';
|
|
2
|
+
import * as plugins from './plugins.js';
|
|
3
|
+
|
|
4
|
+
import { PublishModule } from './classes.publishmodule.js';
|
|
5
|
+
|
|
6
|
+
export class TsPublish {
|
|
7
|
+
constructor() {}
|
|
8
|
+
|
|
9
|
+
public async publish (monorepoDirArg: string) {
|
|
10
|
+
const publishModules = await this.readDirectory(monorepoDirArg);
|
|
11
|
+
for (const publishModule of publishModules) {
|
|
12
|
+
const publishModuleInstance = new PublishModule({
|
|
13
|
+
monoRepoDir: monorepoDirArg,
|
|
14
|
+
packageSubFolder: publishModule,
|
|
15
|
+
});
|
|
16
|
+
await publishModuleInstance.init();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public async readDirectory (dirArg: string) {
|
|
21
|
+
const subDirs = await plugins.smartfile.fs.listFolders(dirArg);
|
|
22
|
+
const publishModules: string[] = [];
|
|
23
|
+
for (const subDir of subDirs) {
|
|
24
|
+
if (!subDir.startsWith('ts')) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const fileTree = await plugins.smartfile.fs.listFileTree(subDir, '**/*');
|
|
28
|
+
const hasPublishJson = fileTree.includes('tspublish.json');
|
|
29
|
+
if (!hasPublishJson) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
logger.log('info', `found publish module: ${subDir}`);
|
|
33
|
+
publishModules.push(subDir);
|
|
34
|
+
}
|
|
35
|
+
logger.log('ok', `found ${publishModules.length} publish modules`);
|
|
36
|
+
return publishModules;
|
|
37
|
+
}
|
|
38
|
+
}
|
package/ts/index.ts
ADDED
package/ts/logging.ts
ADDED
package/ts/paths.ts
ADDED
package/ts/plugins.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// node native scope
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
export {
|
|
4
|
+
path,
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
// @push.rocks scope
|
|
8
|
+
import * as smartfile from '@push.rocks/smartfile';
|
|
9
|
+
import * as smartcli from '@push.rocks/smartcli';
|
|
10
|
+
import * as smartlog from '@push.rocks/smartlog';
|
|
11
|
+
import * as smartnpm from '@push.rocks/smartnpm';
|
|
12
|
+
import * as smartpath from '@push.rocks/smartpath';
|
|
13
|
+
|
|
14
|
+
export { smartfile, smartcli, smartlog, smartnpm, smartpath, };
|