@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 ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ process.env.CLI_CALL = 'true';
3
+ const cliTool = await import('./dist_ts/index.js');
4
+ cliTool.runCli();
@@ -0,0 +1,8 @@
1
+ /**
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
+ */
4
+ export declare const commitinfo: {
5
+ name: string;
6
+ version: string;
7
+ description: string;
8
+ };
@@ -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,5 @@
1
+ export declare class TsPublish {
2
+ constructor();
3
+ publish(monorepoDirArg: string): Promise<void>;
4
+ readDirectory(dirArg: string): Promise<string[]>;
5
+ }
@@ -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
@@ -0,0 +1,2 @@
1
+ export * from './classes.tspublish.js';
2
+ export declare const runCli: () => Promise<void>;
@@ -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,2 @@
1
+ import * as plugins from './plugins.js';
2
+ export declare const logger: plugins.smartlog.Smartlog;
@@ -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=
@@ -0,0 +1,3 @@
1
+ export declare const cwd: string;
2
+ export declare const packageDir: string;
3
+ export declare const nogitDir: string;
@@ -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
+ }
@@ -0,0 +1,3 @@
1
+ # Project Readme Hints
2
+
3
+ This is the initial readme hints file.
package/readme.md ADDED
@@ -0,0 +1,7 @@
1
+ # @git.zone/tspublish
2
+
3
+ publish multiple, concise and small packages from monorepos
4
+
5
+ ## How to create the docs
6
+
7
+ To create docs run gitzone aidoc.
@@ -0,0 +1,8 @@
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
+ }
@@ -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
@@ -0,0 +1,9 @@
1
+ import * as paths from './paths.js';
2
+ import { TsPublish } from './classes.tspublish.js';
3
+
4
+ export * from './classes.tspublish.js'
5
+
6
+ export const runCli = async () => {
7
+ const tspublish = new TsPublish();
8
+ await tspublish.publish(paths.cwd);
9
+ }
package/ts/logging.ts ADDED
@@ -0,0 +1,4 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as commitinfo from './00_commitinfo_data.js';
3
+
4
+ export const logger = plugins.smartlog.Smartlog.createForCommitinfo(commitinfo.commitinfo);
package/ts/paths.ts ADDED
@@ -0,0 +1,7 @@
1
+ import * as plugins from './plugins.js';
2
+
3
+ export const cwd = process.cwd();
4
+
5
+ export const packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '..');
6
+ export const nogitDir = plugins.path.join(packageDir, '.nogit');
7
+
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, };