@git.zone/tspublish 1.1.0 → 1.2.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.
- package/cli.js +0 -0
- package/dist_ts/00_commitinfo_data.js +3 -3
- package/dist_ts/classes.publishmodule.d.ts +2 -0
- package/dist_ts/classes.publishmodule.js +22 -4
- package/dist_ts/classes.tspublish.js +4 -1
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/npmextra.json +14 -2
- package/package.json +19 -3
- package/readme.md +186 -2
- package/ts/00_commitinfo_data.ts +2 -2
- package/ts/classes.publishmodule.ts +25 -5
- package/ts/classes.tspublish.ts +3 -0
- package/ts/plugins.ts +2 -1
package/cli.js
CHANGED
|
File without changes
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tspublish',
|
|
6
|
-
version: '1.1
|
|
7
|
-
description: 'publish multiple, concise and small packages from monorepos'
|
|
6
|
+
version: '1.2.1',
|
|
7
|
+
description: 'A tool to publish multiple, concise, and small packages from monorepos, specifically for TypeScript projects within a git environment.'
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHdJQUF3STtDQUN0SixDQUFBIn0=
|
|
@@ -12,13 +12,19 @@ export class PublishModule {
|
|
|
12
12
|
throw new Error('subFolder must start with "ts"');
|
|
13
13
|
}
|
|
14
14
|
const jsonData = plugins.smartfile.fs.toObjectSync(plugins.path.join(this.options.packageSubFolderFullPath, 'tspublish.json'));
|
|
15
|
-
|
|
15
|
+
const monoRepoPackageJson = JSON.parse(plugins.smartfile.fs.toStringSync(plugins.path.join(this.options.monoRepoDir, 'package.json')));
|
|
16
16
|
this.options.dependencies = {
|
|
17
17
|
...this.options.dependencies,
|
|
18
|
-
...
|
|
18
|
+
...(() => {
|
|
19
|
+
const resultDependencies = {};
|
|
20
|
+
for (const dependency of jsonData.dependencies) {
|
|
21
|
+
resultDependencies[dependency] = monoRepoPackageJson.dependencies[dependency];
|
|
22
|
+
}
|
|
23
|
+
return resultDependencies;
|
|
24
|
+
})()
|
|
19
25
|
};
|
|
20
26
|
this.options.name = this.options.name || jsonData.name;
|
|
21
|
-
this.options.version =
|
|
27
|
+
this.options.version = monoRepoPackageJson.version;
|
|
22
28
|
// now that we have a name and version, lets check if there is already a package under the same name and version.
|
|
23
29
|
const smartnpmInstance = new plugins.smartnpm.NpmRegistry({}); // TODO: pass in options
|
|
24
30
|
const packageInfo = await smartnpmInstance.getPackageInfo(this.options.name);
|
|
@@ -66,5 +72,17 @@ export class PublishModule {
|
|
|
66
72
|
// ts folder
|
|
67
73
|
await plugins.smartfile.fs.copy(this.options.packageSubFolderFullPath, plugins.path.join(this.options.publishModDirFullPath, this.options.packageSubFolder));
|
|
68
74
|
}
|
|
75
|
+
async build() {
|
|
76
|
+
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
77
|
+
executor: 'bash',
|
|
78
|
+
});
|
|
79
|
+
await smartshellInstance.exec(`cd ${this.options.publishModDirFullPath} && pnpm run build`);
|
|
80
|
+
}
|
|
81
|
+
async publish() {
|
|
82
|
+
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
83
|
+
executor: 'bash',
|
|
84
|
+
});
|
|
85
|
+
await smartshellInstance.exec(`cd ${this.options.publishModDirFullPath} && pnpm publish`);
|
|
86
|
+
}
|
|
69
87
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wdWJsaXNobW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5wdWJsaXNobW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFZdEMsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBWSxPQUE4QjtRQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDZixJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUN2RCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDOUIsQ0FBQztRQUVGLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FDaEQsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUMzRSxDQUFDO1FBQ0YsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUNwQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FDL0YsQ0FBQTtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHO1lBQzFCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZO1lBQzVCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1AsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7Z0JBQzlCLEtBQUssTUFBTSxVQUFVLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUMvQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hGLENBQUM7Z0JBQ0QsT0FBTyxrQkFBa0IsQ0FBQztZQUM1QixDQUFDLENBQUMsRUFBRTtTQUNMLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQztRQUVuRCxpSEFBaUg7UUFDakgsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsd0JBQXdCO1FBQ3ZGLE1BQU0sV0FBVyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0UsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RSxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELE1BQU0sSUFBSSxLQUFLLENBQ2IsV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksZ0NBQWdDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQ25GLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMseUJBQXlCLENBQUMsSUFBWTtRQUNqRCxNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7UUFDdkYsTUFBTSxXQUFXLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLFlBQVksQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCO1FBQzVCLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7WUFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUM3QixXQUFXLEVBQUUsRUFBRTtZQUNmLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEVBQUU7b0JBQ0gsTUFBTSxFQUFFLGtEQUFrRDtpQkFDM0Q7YUFDRjtZQUNELE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsc0NBQXNDO2FBQzlDO1lBQ0QsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTtZQUN2QyxlQUFlLEVBQUU7Z0JBQ2YsbUJBQW1CLEVBQUUsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsbUJBQW1CLENBQUM7YUFDL0U7U0FDRixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxzQkFBc0I7UUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQ3hCLGdCQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQ2hELENBQUM7UUFFRixlQUFlO1FBQ2YsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sV0FBVyxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUM5RCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLGNBQWMsQ0FBQyxFQUNyRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUM5QixNQUFNLENBQ1AsQ0FBQztRQUVGLFlBQVk7UUFDWixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7SUFDOUosQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUMzRCxRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUE7UUFDRixNQUFNLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLG9CQUFvQixDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUMzRCxRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUE7UUFDRixNQUFNLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLGtCQUFrQixDQUFDLENBQUM7SUFDNUYsQ0FBQztDQUNGIn0=
|
|
@@ -11,6 +11,9 @@ export class TsPublish {
|
|
|
11
11
|
packageSubFolder: publishModule,
|
|
12
12
|
});
|
|
13
13
|
await publishModuleInstance.init();
|
|
14
|
+
await publishModuleInstance.createPublishModuleDir();
|
|
15
|
+
await publishModuleInstance.build();
|
|
16
|
+
await publishModuleInstance.publish();
|
|
14
17
|
}
|
|
15
18
|
}
|
|
16
19
|
async readDirectory(dirArg) {
|
|
@@ -32,4 +35,4 @@ export class TsPublish {
|
|
|
32
35
|
return publishModules;
|
|
33
36
|
}
|
|
34
37
|
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50c3B1Ymxpc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnRzcHVibGlzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxNQUFNLE9BQU8sU0FBUztJQUNwQixnQkFBZSxDQUFDO0lBRVQsS0FBSyxDQUFDLE9BQU8sQ0FBRSxjQUFzQjtRQUMxQyxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEUsS0FBSyxNQUFNLGFBQWEsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUMzQyxNQUFNLHFCQUFxQixHQUFHLElBQUksYUFBYSxDQUFDO2dCQUM5QyxXQUFXLEVBQUUsY0FBYztnQkFDM0IsZ0JBQWdCLEVBQUUsYUFBYTthQUNoQyxDQUFDLENBQUM7WUFDSCxNQUFNLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25DLE1BQU0scUJBQXFCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNyRCxNQUFNLHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BDLE1BQU0scUJBQXFCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFFLE1BQWM7UUFDeEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0QsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO1FBQ3BDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsU0FBUztZQUNYLENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDekUsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDcEIsU0FBUztZQUNYLENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSx5QkFBeUIsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUN0RCxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLGNBQWMsQ0FBQyxNQUFNLGtCQUFrQixDQUFDLENBQUM7UUFDbkUsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztDQUNGIn0=
|
package/dist_ts/plugins.d.ts
CHANGED
|
@@ -5,4 +5,5 @@ import * as smartcli from '@push.rocks/smartcli';
|
|
|
5
5
|
import * as smartlog from '@push.rocks/smartlog';
|
|
6
6
|
import * as smartnpm from '@push.rocks/smartnpm';
|
|
7
7
|
import * as smartpath from '@push.rocks/smartpath';
|
|
8
|
-
|
|
8
|
+
import * as smartshell from '@push.rocks/smartshell';
|
|
9
|
+
export { smartfile, smartcli, smartlog, smartnpm, smartpath, smartshell };
|
package/dist_ts/plugins.js
CHANGED
|
@@ -7,5 +7,6 @@ import * as smartcli from '@push.rocks/smartcli';
|
|
|
7
7
|
import * as smartlog from '@push.rocks/smartlog';
|
|
8
8
|
import * as smartnpm from '@push.rocks/smartnpm';
|
|
9
9
|
import * as smartpath from '@push.rocks/smartpath';
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
import * as smartshell from '@push.rocks/smartshell';
|
|
11
|
+
export { smartfile, smartcli, smartlog, smartnpm, smartpath, smartshell };
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFDTCxJQUFJLEdBQ0wsQ0FBQTtBQUVELG9CQUFvQjtBQUNwQixPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssUUFBUSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyJ9
|
package/npmextra.json
CHANGED
|
@@ -5,10 +5,22 @@
|
|
|
5
5
|
"githost": "code.foss.global",
|
|
6
6
|
"gitscope": "git.zone",
|
|
7
7
|
"gitrepo": "tspublish",
|
|
8
|
-
"description": "publish multiple, concise and small packages from monorepos",
|
|
8
|
+
"description": "A tool to publish multiple, concise, and small packages from monorepos, specifically for TypeScript projects within a git environment.",
|
|
9
9
|
"npmPackagename": "@git.zone/tspublish",
|
|
10
10
|
"license": "MIT",
|
|
11
|
-
"projectDomain": "git.zone"
|
|
11
|
+
"projectDomain": "git.zone",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"typescript",
|
|
14
|
+
"monorepo",
|
|
15
|
+
"package",
|
|
16
|
+
"publish",
|
|
17
|
+
"npm",
|
|
18
|
+
"automation",
|
|
19
|
+
"git",
|
|
20
|
+
"modularity",
|
|
21
|
+
"module-management",
|
|
22
|
+
"developer-tools"
|
|
23
|
+
]
|
|
12
24
|
}
|
|
13
25
|
},
|
|
14
26
|
"npmci": {
|
package/package.json
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/tspublish",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "publish multiple, concise and small packages from monorepos",
|
|
5
|
+
"description": "A tool to publish multiple, concise, and small packages from monorepos, specifically for TypeScript projects within a git environment.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
7
7
|
"typings": "dist_ts/index.d.ts",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"author": "Task Venture Capital GmbH",
|
|
10
10
|
"license": "MIT",
|
|
11
|
+
"bin": {
|
|
12
|
+
"tspublish": "cli.js"
|
|
13
|
+
},
|
|
11
14
|
"devDependencies": {
|
|
12
15
|
"@git.zone/tsbuild": "^2.1.25",
|
|
13
16
|
"@git.zone/tsbundle": "^2.0.5",
|
|
@@ -44,8 +47,21 @@
|
|
|
44
47
|
"@push.rocks/smartfile": "^11.0.21",
|
|
45
48
|
"@push.rocks/smartlog": "^3.0.7",
|
|
46
49
|
"@push.rocks/smartnpm": "^2.0.4",
|
|
47
|
-
"@push.rocks/smartpath": "^5.0.18"
|
|
50
|
+
"@push.rocks/smartpath": "^5.0.18",
|
|
51
|
+
"@push.rocks/smartshell": "^3.0.6"
|
|
48
52
|
},
|
|
53
|
+
"keywords": [
|
|
54
|
+
"typescript",
|
|
55
|
+
"monorepo",
|
|
56
|
+
"package",
|
|
57
|
+
"publish",
|
|
58
|
+
"npm",
|
|
59
|
+
"automation",
|
|
60
|
+
"git",
|
|
61
|
+
"modularity",
|
|
62
|
+
"module-management",
|
|
63
|
+
"developer-tools"
|
|
64
|
+
],
|
|
49
65
|
"scripts": {
|
|
50
66
|
"test": "(tstest test/ --web)",
|
|
51
67
|
"build": "(tsbuild --web --allowimplicitany)",
|
package/readme.md
CHANGED
|
@@ -2,6 +2,190 @@
|
|
|
2
2
|
|
|
3
3
|
publish multiple, concise and small packages from monorepos
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Install
|
|
6
6
|
|
|
7
|
-
To
|
|
7
|
+
To install `@git.zone/tspublish`, you can use npm. To use the latest stable version, run:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @git.zone/tspublish
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Alternatively, if you are using yarn, the equivalent command would be:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
yarn add @git.zone/tspublish
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
These commands will add `@git.zone/tspublish` as a dependency in your `package.json` file and install the package into your `node_modules` directory.
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
`@git.zone/tspublish` is designed to manage the publishing of multiple, small-scale packages within monorepos. The following sections will guide you through its usage, from setting up your environment to effectively publishing packages.
|
|
24
|
+
|
|
25
|
+
### Getting Started with TypeScript and Module Setup
|
|
26
|
+
|
|
27
|
+
`@git.zone/tspublish` works with monorepos that are organized using TypeScript. The package structure should follow a convention where each submodule intended for publishing is located in a directory prefixed with `ts`, for example, `tsModuleName`. Each submodule directory should contain a `tspublish.json` file to correctly configure the package to be published separately. This file is critical for the `tspublish` process to identify valid package directories and should also include necessary metadata for the package.
|
|
28
|
+
|
|
29
|
+
Your monorepo structure might resemble:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
my-monorepo/
|
|
33
|
+
├── ts-package1/
|
|
34
|
+
│ ├── src/
|
|
35
|
+
│ ├── tspublish.json
|
|
36
|
+
├── ts-package2/
|
|
37
|
+
│ ├── src/
|
|
38
|
+
│ ├── tspublish.json
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Configuring `tspublish.json`
|
|
42
|
+
|
|
43
|
+
Each submodule must include a `tspublish.json` within its directory. This JSON file should include essential details for your publishable package, including its dependencies. Here's a basic example of what `tspublish.json` could look like:
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"name": "@myorg/ts-package1",
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"some-dependency": "^1.0.0"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Running the CLI
|
|
55
|
+
|
|
56
|
+
`@git.zone/tspublish` includes a CLI that simplifies the publishing process. Begin by importing the CLI runner in a script within your project:
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
import { runCli } from '@git.zone/tspublish';
|
|
60
|
+
|
|
61
|
+
runCli();
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
This function call orchestrates the publishing operation. It reads each directory prefixed with `ts`, looks for a `tspublish.json`, and creates an individual package based on the gathered data.
|
|
65
|
+
|
|
66
|
+
### Core Features
|
|
67
|
+
|
|
68
|
+
#### Publishing Modules
|
|
69
|
+
|
|
70
|
+
The core functionality provided by `@git.zone/tspublish` involves processing directories to check for valid submodules that are ready to be published. This occurs via the `publish` method in `TsPublish` class. This method does the following:
|
|
71
|
+
|
|
72
|
+
- **Reads all directories** within the specified monorepo path.
|
|
73
|
+
- **Identifies directories** that start with `ts` and validates the presence of `tspublish.json`.
|
|
74
|
+
- **Logs** information about found packages for user awareness and debugging.
|
|
75
|
+
- **Checks for collisions** with existing versions on the npm registry to prevent overriding published versions.
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
import { TsPublish } from '@git.zone/tspublish';
|
|
79
|
+
|
|
80
|
+
const tspublish = new TsPublish();
|
|
81
|
+
await tspublish.publish('/path/to/your/monorepo');
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
#### Package Initialization
|
|
85
|
+
|
|
86
|
+
Once valid submodules are identified, the `init` method in the `PublishModule` class initializes the publish module. This includes:
|
|
87
|
+
|
|
88
|
+
- Parsing `tspublish.json` for metadata.
|
|
89
|
+
- Constructing full paths for necessary operations.
|
|
90
|
+
- Verifying package existence to avoid duplication.
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
import { PublishModule } from '@git.zone/tspublish';
|
|
94
|
+
|
|
95
|
+
const publishModule = new PublishModule({
|
|
96
|
+
monoRepoDir: '/path/to/monorepo',
|
|
97
|
+
packageSubFolder: 'ts-package1',
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
await publishModule.init();
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### Creating `package.json`
|
|
104
|
+
|
|
105
|
+
Part of the publishing process involves automatically creating a `package.json` tailored to each submodule. This dynamically generated JSON will incorporate dependencies from `tspublish.json` and associate them with the latest version of `tsbuild` from the registry:
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
await publishModule.createPackageJson();
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
This creates a structured `package.json` which includes scripts to build your TypeScript files before publishing.
|
|
112
|
+
|
|
113
|
+
#### Constructing Publish-ready Directory
|
|
114
|
+
|
|
115
|
+
After all configurations are verified and the `package.json` is created, the submodule is ready to be published. This step involves setting up a `dist_publish_` directory specific to each module:
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
await publishModule.createPublishModuleDir();
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
The above method ensures that each module's source files are copied and prepared under a dedicated directory meant for packaging and distribution.
|
|
122
|
+
|
|
123
|
+
### Logging and Debugging
|
|
124
|
+
|
|
125
|
+
The package includes a structured logging mechanism using `smartlog` which provides insights into the publishing process, helping in runtime debugging and status tracking of operations:
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
import { logger } from '@git.zone/tspublish/logging';
|
|
129
|
+
|
|
130
|
+
logger.log('info', 'Publishing process initialized');
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
This powerful logging helps in tracking the status of each step and understanding potential issues during the operations.
|
|
134
|
+
|
|
135
|
+
### Testing with tapbundle
|
|
136
|
+
|
|
137
|
+
To ensure that your publishing workflow is functioning correctly, you can utilize the test suite set up with `tapbundle`. This library facilitates behavior-driven testing for your monorepo. Below is a basic test setup to verify the import and initial function accessibility of `@git.zone/tspublish`:
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
import { expect, tap } from '@push.rocks/tapbundle';
|
|
141
|
+
import * as tspublish from '@git.zone/tspublish';
|
|
142
|
+
|
|
143
|
+
tap.test('Should run the CLI without errors', async () => {
|
|
144
|
+
await tspublish.runCli();
|
|
145
|
+
expect(tspublish).toBeTruthy();
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
tap.start();
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Comprehensive usage example
|
|
152
|
+
|
|
153
|
+
Let's combine all the steps into a complete example where you prepare a monorepo, configure each module, and execute the publishing workflow.
|
|
154
|
+
|
|
155
|
+
Suppose you have a project structure as follows:
|
|
156
|
+
|
|
157
|
+
```plaintext
|
|
158
|
+
my-monorepo/
|
|
159
|
+
├── ts-package1/
|
|
160
|
+
│ ├── src/
|
|
161
|
+
│ ├── tspublish.json
|
|
162
|
+
├── ts-package2/
|
|
163
|
+
│ ├── src/
|
|
164
|
+
│ ├── tspublish.json
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Follow these steps:
|
|
168
|
+
|
|
169
|
+
1. Ensure each package has `tspublish.json` properly configured with necessary metadata.
|
|
170
|
+
2. Create a CLI script such as `publish.js`:
|
|
171
|
+
|
|
172
|
+
```typescript
|
|
173
|
+
import { runCli } from '@git.zone/tspublish';
|
|
174
|
+
|
|
175
|
+
runCli().then(() => {
|
|
176
|
+
console.log('Publishing completed successfully');
|
|
177
|
+
}).catch((error) => {
|
|
178
|
+
console.error('Error during publishing:', error);
|
|
179
|
+
});
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
3. Execute your CLI script:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
node publish.js
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Your script will call `runCli`, which will traverse each `ts-package`, verify their publish readiness, and handle individual publishing processes.
|
|
189
|
+
|
|
190
|
+
By following these comprehensive guidelines and utilizing the structured approach provided by `@git.zone/tspublish`, you can efficiently manage and publish multiple sub-packages from within a monorepo, facilitating organized, modular package management in projects of any scale.
|
|
191
|
+
undefined
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tspublish',
|
|
6
|
-
version: '1.1
|
|
7
|
-
description: 'publish multiple, concise and small packages from monorepos'
|
|
6
|
+
version: '1.2.1',
|
|
7
|
+
description: 'A tool to publish multiple, concise, and small packages from monorepos, specifically for TypeScript projects within a git environment.'
|
|
8
8
|
}
|
|
@@ -31,15 +31,21 @@ export class PublishModule {
|
|
|
31
31
|
const jsonData = plugins.smartfile.fs.toObjectSync(
|
|
32
32
|
plugins.path.join(this.options.packageSubFolderFullPath, 'tspublish.json')
|
|
33
33
|
);
|
|
34
|
-
|
|
34
|
+
const monoRepoPackageJson = JSON.parse(
|
|
35
|
+
plugins.smartfile.fs.toStringSync(plugins.path.join(this.options.monoRepoDir, 'package.json'))
|
|
36
|
+
)
|
|
35
37
|
this.options.dependencies = {
|
|
36
38
|
...this.options.dependencies,
|
|
37
|
-
...
|
|
39
|
+
...(() => {
|
|
40
|
+
const resultDependencies = {};
|
|
41
|
+
for (const dependency of jsonData.dependencies) {
|
|
42
|
+
resultDependencies[dependency] = monoRepoPackageJson.dependencies[dependency];
|
|
43
|
+
}
|
|
44
|
+
return resultDependencies;
|
|
45
|
+
})()
|
|
38
46
|
};
|
|
39
47
|
this.options.name = this.options.name || jsonData.name;
|
|
40
|
-
this.options.version =
|
|
41
|
-
plugins.path.join(this.options.monoRepoDir, 'package.json')
|
|
42
|
-
).version;
|
|
48
|
+
this.options.version = monoRepoPackageJson.version;
|
|
43
49
|
|
|
44
50
|
// now that we have a name and version, lets check if there is already a package under the same name and version.
|
|
45
51
|
const smartnpmInstance = new plugins.smartnpm.NpmRegistry({}); // TODO: pass in options
|
|
@@ -102,4 +108,18 @@ export class PublishModule {
|
|
|
102
108
|
// ts folder
|
|
103
109
|
await plugins.smartfile.fs.copy(this.options.packageSubFolderFullPath, plugins.path.join(this.options.publishModDirFullPath, this.options.packageSubFolder))
|
|
104
110
|
}
|
|
111
|
+
|
|
112
|
+
public async build() {
|
|
113
|
+
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
114
|
+
executor: 'bash',
|
|
115
|
+
})
|
|
116
|
+
await smartshellInstance.exec(`cd ${this.options.publishModDirFullPath} && pnpm run build`);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
public async publish() {
|
|
120
|
+
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
121
|
+
executor: 'bash',
|
|
122
|
+
})
|
|
123
|
+
await smartshellInstance.exec(`cd ${this.options.publishModDirFullPath} && pnpm publish`);
|
|
124
|
+
}
|
|
105
125
|
}
|
package/ts/classes.tspublish.ts
CHANGED
|
@@ -14,6 +14,9 @@ export class TsPublish {
|
|
|
14
14
|
packageSubFolder: publishModule,
|
|
15
15
|
});
|
|
16
16
|
await publishModuleInstance.init();
|
|
17
|
+
await publishModuleInstance.createPublishModuleDir();
|
|
18
|
+
await publishModuleInstance.build();
|
|
19
|
+
await publishModuleInstance.publish();
|
|
17
20
|
}
|
|
18
21
|
}
|
|
19
22
|
|
package/ts/plugins.ts
CHANGED
|
@@ -10,5 +10,6 @@ import * as smartcli from '@push.rocks/smartcli';
|
|
|
10
10
|
import * as smartlog from '@push.rocks/smartlog';
|
|
11
11
|
import * as smartnpm from '@push.rocks/smartnpm';
|
|
12
12
|
import * as smartpath from '@push.rocks/smartpath';
|
|
13
|
+
import * as smartshell from '@push.rocks/smartshell';
|
|
13
14
|
|
|
14
|
-
export { smartfile, smartcli, smartlog, smartnpm, smartpath, };
|
|
15
|
+
export { smartfile, smartcli, smartlog, smartnpm, smartpath, smartshell };
|