@servicetitan/startup 22.2.0 → 22.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.
@@ -6,6 +6,7 @@ export * from './prepare-package';
6
6
  export * from './start';
7
7
  export * from './tests';
8
8
  export * from './styles-check';
9
+ export * from './mfe-publish';
9
10
  export interface Command {
10
11
  execute(): Promise<void>;
11
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAE/B,MAAM,WAAW,OAAO;IACpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAE9B,MAAM,WAAW,OAAO;IACpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B"}
@@ -22,4 +22,5 @@ __exportStar(require("./prepare-package"), exports);
22
22
  __exportStar(require("./start"), exports);
23
23
  __exportStar(require("./tests"), exports);
24
24
  __exportStar(require("./styles-check"), exports);
25
+ __exportStar(require("./mfe-publish"), exports);
25
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,mDAAiC;AACjC,yCAAuB;AACvB,yCAAuB;AACvB,oDAAkC;AAClC,0CAAwB;AACxB,0CAAwB;AACxB,iDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,mDAAiC;AACjC,yCAAuB;AACvB,yCAAuB;AACvB,oDAAkC;AAClC,0CAAwB;AACxB,0CAAwB;AACxB,iDAA+B;AAC/B,gDAA8B"}
@@ -0,0 +1,36 @@
1
+ import { Command } from '.';
2
+ interface ArgsPackagePublish {
3
+ build?: string;
4
+ dry?: boolean;
5
+ force?: boolean;
6
+ branch?: string;
7
+ tag?: string | false;
8
+ noTag?: string;
9
+ }
10
+ interface ArgsPackageClean {
11
+ count?: number;
12
+ }
13
+ interface Args extends ArgsPackagePublish, ArgsPackageClean {
14
+ clean?: boolean;
15
+ scope?: string | string[];
16
+ }
17
+ export declare class MFEPublish implements Command {
18
+ private args;
19
+ constructor(args: Args);
20
+ execute(): Promise<void>;
21
+ }
22
+ export declare class MFEPackagePublish implements Command {
23
+ private args;
24
+ constructor(args: ArgsPackagePublish);
25
+ execute(): Promise<void>;
26
+ private getPublishData;
27
+ }
28
+ export declare class MFEPackageClean implements Command {
29
+ private args;
30
+ constructor(args: ArgsPackageClean);
31
+ execute(): Promise<void>;
32
+ private getCleanData;
33
+ private getBranchedVersions;
34
+ }
35
+ export {};
36
+ //# sourceMappingURL=mfe-publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mfe-publish.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mfe-publish.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC;AAE5B,UAAU,kBAAkB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,gBAAgB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,IAAK,SAAQ,kBAAkB,EAAE,gBAAgB;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC7B;AAED,qBAAa,UAAW,YAAW,OAAO;IAC1B,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI;IAGxB,OAAO;CAmChB;AAED,qBAAa,iBAAkB,YAAW,OAAO;IACjC,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,kBAAkB;IAGtC,OAAO;IAsDb,OAAO,CAAC,cAAc;CA4CzB;AAED,qBAAa,eAAgB,YAAW,OAAO;IAC/B,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,gBAAgB;IAGpC,OAAO;IA+Cb,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,mBAAmB;CAqD9B"}
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.MFEPackageClean = exports.MFEPackagePublish = exports.MFEPublish = void 0;
22
+ const exec = require('@lerna/exec');
23
+ const path = require('path');
24
+ const utils_1 = require("../../utils");
25
+ const cli_git_1 = require("../utils/cli-git");
26
+ const cli_npm_1 = require("../utils/cli-npm");
27
+ class MFEPublish {
28
+ constructor(args) {
29
+ Object.defineProperty(this, "args", {
30
+ enumerable: true,
31
+ configurable: true,
32
+ writable: true,
33
+ value: args
34
+ });
35
+ }
36
+ execute() {
37
+ var _a;
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ let packages = (_a = (0, utils_1.splitPackagesByType)((0, utils_1.getPackages)())[utils_1.PackageType.Webpack]) !== null && _a !== void 0 ? _a : [];
40
+ packages = packages.filter(p => {
41
+ var _a;
42
+ const packageJson = (0, utils_1.readJson)(path.join(p.location, 'package.json'));
43
+ return ((_a = packageJson === null || packageJson === void 0 ? void 0 : packageJson.cli) === null || _a === void 0 ? void 0 : _a['web-component']) === true;
44
+ });
45
+ if (this.args.scope) {
46
+ packages = packages.filter(p => Array.isArray(this.args.scope)
47
+ ? this.args.scope.includes(p.name)
48
+ : this.args.scope === p.name);
49
+ }
50
+ if (!packages.length) {
51
+ throw new Error('no packages found for publication');
52
+ }
53
+ yield exec({
54
+ 'cmd': `startup mfe-package-${this.args.clean ? 'clean' : 'publish'}`,
55
+ 'scope': packages.map(({ name }) => name),
56
+ 'stream': true,
57
+ '--': [
58
+ ...[this.args.build ? `--build ${this.args.build}` : undefined],
59
+ ...[this.args.branch ? `--branch ${this.args.branch}` : undefined],
60
+ ...[this.args.tag ? `--tag ${this.args.tag}` : undefined],
61
+ ...[this.args.tag === false ? `--no-tag` : undefined],
62
+ ...[this.args.dry ? '--dry' : undefined],
63
+ ...[this.args.force ? '--force' : undefined],
64
+ ...[this.args.count ? `--count ${this.args.count}` : undefined],
65
+ ].filter(item => item),
66
+ });
67
+ });
68
+ }
69
+ }
70
+ __decorate([
71
+ utils_1.logErrors,
72
+ __metadata("design:type", Function),
73
+ __metadata("design:paramtypes", []),
74
+ __metadata("design:returntype", Promise)
75
+ ], MFEPublish.prototype, "execute", null);
76
+ exports.MFEPublish = MFEPublish;
77
+ class MFEPackagePublish {
78
+ constructor(args) {
79
+ Object.defineProperty(this, "args", {
80
+ enumerable: true,
81
+ configurable: true,
82
+ writable: true,
83
+ value: args
84
+ });
85
+ }
86
+ execute() {
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ if (!(0, utils_1.isWebComponent)()) {
89
+ throw new Error('only web-components can be published');
90
+ }
91
+ const data = this.getPublishData();
92
+ const packageJson = (0, utils_1.readJson)('package.json');
93
+ const packageName = packageJson.name;
94
+ if (!data.version) {
95
+ utils_1.log.info(`no build version found - skip publishing`);
96
+ return;
97
+ }
98
+ if (!data.isBranchConfigured && !data.force) {
99
+ utils_1.log.info(`branch is not configured for publishing, use --force flag to publish if needed`);
100
+ return;
101
+ }
102
+ const versions = (0, cli_npm_1.npmGetPackageVersions)(data.registry, packageName);
103
+ if (versions.includes(data.version)) {
104
+ utils_1.log.info(`version ${data.version} of ${packageName} is already published, skipping publish`);
105
+ return;
106
+ }
107
+ yield (0, cli_npm_1.npmPackageSet)('version', data.version);
108
+ yield (0, cli_npm_1.npmPackageSet)('publishConfig.registry', data.registry);
109
+ if (!packageJson.files) {
110
+ yield (0, cli_npm_1.npmPackageSet)('files[0]', 'dist');
111
+ yield (0, cli_npm_1.npmPackageSet)('files[1]', 'package.json');
112
+ }
113
+ if (data.dry) {
114
+ yield (0, cli_npm_1.npmPublishDry)();
115
+ }
116
+ else {
117
+ yield (0, cli_npm_1.npmPublish)(data.tag);
118
+ }
119
+ utils_1.log.info(`packages ${packageJson.name} is published ${data.dry ? '(dry) ' : ''}with version ${data.version}`);
120
+ });
121
+ }
122
+ getPublishData() {
123
+ var _a, _b;
124
+ const cli = this.args;
125
+ const branch = (_a = cli.branch) !== null && _a !== void 0 ? _a : (0, cli_git_1.gitGetBranch)();
126
+ const branchConfig = getBranchConfigs()[branch];
127
+ let buildVersion = cli.build;
128
+ if (!buildVersion) {
129
+ buildVersion = `${branch}.${(0, cli_git_1.gitGetCommitHash)()}`;
130
+ }
131
+ if (!buildVersion) {
132
+ throw new Error('build version is not set');
133
+ }
134
+ let tag;
135
+ if (cli.tag === false) {
136
+ tag = '';
137
+ }
138
+ else if (cli.tag) {
139
+ tag = cli.tag;
140
+ }
141
+ else {
142
+ tag = (_b = branchConfig === null || branchConfig === void 0 ? void 0 : branchConfig.tag) !== null && _b !== void 0 ? _b : '';
143
+ }
144
+ const registry = 'https://verdaccio.servicetitan.com';
145
+ return {
146
+ tag,
147
+ version: '0.0.0-' + buildVersion,
148
+ buildVersion,
149
+ registry,
150
+ dry: !!cli.dry,
151
+ force: !!cli.force,
152
+ isBranchConfigured: !!branchConfig,
153
+ };
154
+ }
155
+ }
156
+ __decorate([
157
+ utils_1.logErrors,
158
+ __metadata("design:type", Function),
159
+ __metadata("design:paramtypes", []),
160
+ __metadata("design:returntype", Promise)
161
+ ], MFEPackagePublish.prototype, "execute", null);
162
+ exports.MFEPackagePublish = MFEPackagePublish;
163
+ class MFEPackageClean {
164
+ constructor(args) {
165
+ Object.defineProperty(this, "args", {
166
+ enumerable: true,
167
+ configurable: true,
168
+ writable: true,
169
+ value: args
170
+ });
171
+ }
172
+ execute() {
173
+ return __awaiter(this, void 0, void 0, function* () {
174
+ if (!(0, utils_1.isWebComponent)()) {
175
+ throw new Error('only web-components can be cleaned');
176
+ }
177
+ const data = this.getCleanData();
178
+ const packageJson = (0, utils_1.readJson)('package.json');
179
+ const packageName = packageJson.name;
180
+ const branchedVersions = this.getBranchedVersions(packageName, data.registry);
181
+ utils_1.log.info(`branched versions (${data.count}):`, JSON.stringify(branchedVersions, undefined, 4));
182
+ const branchedVersionsToClean = {};
183
+ for (const branch of Object.keys(branchedVersions)) {
184
+ // limit branches for now
185
+ if (!branchedVersions[branch] || !data.branches.includes(branch)) {
186
+ continue;
187
+ }
188
+ branchedVersions[branch].sort(([, adt], [, bdt]) => (adt > bdt ? -1 : 1));
189
+ branchedVersionsToClean[branch] = branchedVersions[branch].slice(data.count);
190
+ }
191
+ utils_1.log.info('found versions for unpublish:', JSON.stringify(branchedVersionsToClean, undefined, 4));
192
+ const unVersions = Object.keys(branchedVersionsToClean).reduce((out, br) => [...out, ...branchedVersionsToClean[br].map(([v]) => v)], []);
193
+ for (const version of unVersions) {
194
+ try {
195
+ // eslint-disable-next-line no-await-in-loop
196
+ yield (0, cli_npm_1.npmUnpublish)(data.registry, packageName, version);
197
+ }
198
+ catch (_a) {
199
+ utils_1.log.error(`error while removing ${packageName} version ${version}`);
200
+ }
201
+ }
202
+ });
203
+ }
204
+ getCleanData() {
205
+ let count = this.args.count;
206
+ if (!count) {
207
+ count = 5;
208
+ }
209
+ const registry = 'https://verdaccio.servicetitan.com';
210
+ return { count, registry, branches: Object.keys(getBranchConfigs()) };
211
+ }
212
+ getBranchedVersions(packageName, registry) {
213
+ const versions = (0, cli_npm_1.npmGetPackageVersionDates)(registry, packageName);
214
+ const branchedVersions = {};
215
+ const unknownVersions = [];
216
+ const addVersion = (branch, version, dt) => {
217
+ if (!branchedVersions[branch]) {
218
+ branchedVersions[branch] = [];
219
+ }
220
+ branchedVersions[branch].push([version, dt]);
221
+ };
222
+ for (const [version, dt] of versions) {
223
+ if (!version.startsWith('0.0.0-')) {
224
+ continue;
225
+ }
226
+ const buildVersion = version.replace('0.0.0-', '');
227
+ if (/^(\d+)\.(\d+)\.(\d+)$/.test(buildVersion)) {
228
+ // master version generated by nerdbank versioning
229
+ addVersion('master', version, dt);
230
+ continue;
231
+ }
232
+ const match1 = buildVersion.match(/^(\d+)\.(\d+)\.(\d+)-([\dA-Za-z\-]+).([\dA-Za-z]+)$/);
233
+ if (match1 === null || match1 === void 0 ? void 0 : match1.length) {
234
+ // branch version generated by nerdbank versioning
235
+ addVersion(match1[4], version, dt);
236
+ continue;
237
+ }
238
+ const match2 = buildVersion.match(/^([\dA-Za-z\-]+).([\dA-Za-z]+)$/);
239
+ if (match2 === null || match2 === void 0 ? void 0 : match2.length) {
240
+ // branch version generated by mfe-publisher versioning
241
+ addVersion(match2[1], version, dt);
242
+ continue;
243
+ }
244
+ unknownVersions.push(version);
245
+ }
246
+ if (unknownVersions.length) {
247
+ utils_1.log.info('unknown versions:', unknownVersions.join());
248
+ }
249
+ return branchedVersions;
250
+ }
251
+ }
252
+ __decorate([
253
+ utils_1.logErrors,
254
+ __metadata("design:type", Function),
255
+ __metadata("design:paramtypes", []),
256
+ __metadata("design:returntype", Promise)
257
+ ], MFEPackageClean.prototype, "execute", null);
258
+ exports.MFEPackageClean = MFEPackageClean;
259
+ const getBranchConfigs = () => {
260
+ // ToDo: add ability to configure it in a package.json
261
+ return {
262
+ develop: { tag: 'dev' },
263
+ dev: { tag: 'dev' },
264
+ next: { tag: 'next' },
265
+ master: { tag: 'prod' },
266
+ };
267
+ };
268
+ //# sourceMappingURL=mfe-publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mfe-publish.js","sourceRoot":"","sources":["../../../src/cli/commands/mfe-publish.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -21,6 +21,12 @@ function getCommand(name) {
21
21
  return commands_1.Tests;
22
22
  case 'styles-check':
23
23
  return commands_1.StylesCheck;
24
+ case 'mfe-publish':
25
+ return commands_1.MFEPublish;
26
+ case 'mfe-package-publish':
27
+ return commands_1.MFEPackagePublish;
28
+ case 'mfe-package-clean':
29
+ return commands_1.MFEPackageClean;
24
30
  default:
25
31
  utils_1.log.error(`${name}: command not found!`);
26
32
  process.exit(127);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AAAA,iCAAwC;AAExC,oCAA+B;AAC/B,yCAUoB;AAMpB,SAAS,UAAU,CAAC,IAAY;IAC5B,QAAQ,IAAI,EAAE;QACV,KAAK,MAAM;YACP,OAAO,eAAI,CAAC;QAEhB,KAAK,iBAAiB;YAClB,OAAO,yBAAc,CAAC;QAE1B,KAAK,OAAO;YACR,OAAO,gBAAK,CAAC;QAEjB,KAAK,OAAO;YACR,OAAO,gBAAK,CAAC;QAEjB,KAAK,gBAAgB;YACjB,OAAO,wBAAa,CAAC;QAEzB,KAAK,MAAM;YACP,OAAO,eAAI,CAAC;QAEhB,KAAK,MAAM;YACP,OAAO,gBAAK,CAAC;QAEjB,KAAK,cAAc;YACf,OAAO,sBAAW,CAAC;QAEvB;YACI,WAAG,CAAC,KAAK,CAAC,GAAG,IAAI,sBAAsB,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACzB;AACL,CAAC;AAED,MAAM,QAAQ,GAAG,YAAiB,CAAC;AAEnC,gEAAgE;AAChE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,iCAAM,QAAQ,KAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAG;KAC9E,OAAO,EAAE;KACT,KAAK,CAAC,GAAG,EAAE;IACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AAAA,iCAAwC;AAExC,oCAA+B;AAC/B,yCAaoB;AAMpB,SAAS,UAAU,CAAC,IAAY;IAC5B,QAAQ,IAAI,EAAE;QACV,KAAK,MAAM;YACP,OAAO,eAAI,CAAC;QAEhB,KAAK,iBAAiB;YAClB,OAAO,yBAAc,CAAC;QAE1B,KAAK,OAAO;YACR,OAAO,gBAAK,CAAC;QAEjB,KAAK,OAAO;YACR,OAAO,gBAAK,CAAC;QAEjB,KAAK,gBAAgB;YACjB,OAAO,wBAAa,CAAC;QAEzB,KAAK,MAAM;YACP,OAAO,eAAI,CAAC;QAEhB,KAAK,MAAM;YACP,OAAO,gBAAK,CAAC;QAEjB,KAAK,cAAc;YACf,OAAO,sBAAW,CAAC;QAEvB,KAAK,aAAa;YACd,OAAO,qBAAU,CAAC;QAEtB,KAAK,qBAAqB;YACtB,OAAO,4BAAiB,CAAC;QAE7B,KAAK,mBAAmB;YACpB,OAAO,0BAAe,CAAC;QAE3B;YACI,WAAG,CAAC,KAAK,CAAC,GAAG,IAAI,sBAAsB,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACzB;AACL,CAAC;AAED,MAAM,QAAQ,GAAG,YAAiB,CAAC;AAEnC,gEAAgE;AAChE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,iCAAM,QAAQ,KAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAG;KAC9E,OAAO,EAAE;KACT,KAAK,CAAC,GAAG,EAAE;IACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const gitGetBranch: () => string;
2
+ export declare const gitGetCommitHash: () => string;
3
+ //# sourceMappingURL=cli-git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-git.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/cli-git.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,QAAO,MAE/B,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,MAEnC,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gitGetCommitHash = exports.gitGetBranch = void 0;
4
+ const cli_os_1 = require("./cli-os");
5
+ const gitGetBranch = () => {
6
+ return (0, cli_os_1.runCommandOutput)('git rev-parse --abbrev-ref HEAD').trim();
7
+ };
8
+ exports.gitGetBranch = gitGetBranch;
9
+ const gitGetCommitHash = () => {
10
+ return (0, cli_os_1.runCommandOutput)('git rev-parse --short HEAD').trim();
11
+ };
12
+ exports.gitGetCommitHash = gitGetCommitHash;
13
+ //# sourceMappingURL=cli-git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-git.js","sourceRoot":"","sources":["../../../src/cli/utils/cli-git.ts"],"names":[],"mappings":";;;AAAA,qCAA4C;AAErC,MAAM,YAAY,GAAG,GAAW,EAAE;IACrC,OAAO,IAAA,yBAAgB,EAAC,iCAAiC,CAAC,CAAC,IAAI,EAAE,CAAC;AACtE,CAAC,CAAC;AAFW,QAAA,YAAY,gBAEvB;AAEK,MAAM,gBAAgB,GAAG,GAAW,EAAE;IACzC,OAAO,IAAA,yBAAgB,EAAC,4BAA4B,CAAC,CAAC,IAAI,EAAE,CAAC;AACjE,CAAC,CAAC;AAFW,QAAA,gBAAgB,oBAE3B"}
@@ -0,0 +1,7 @@
1
+ export declare const npmGetPackageVersions: (registry: string, packageName: string) => string[];
2
+ export declare const npmGetPackageVersionDates: (registry: string, packageName: string) => [string, Date][];
3
+ export declare const npmUnpublish: (registry: string, packageName: string, packageVersion: string) => Promise<void>;
4
+ export declare const npmPublishDry: () => Promise<void>;
5
+ export declare const npmPublish: (tag?: string) => Promise<void>;
6
+ export declare const npmPackageSet: (key: string, value: string) => Promise<void>;
7
+ //# sourceMappingURL=cli-npm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-npm.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/cli-npm.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,aAAc,MAAM,eAAe,MAAM,KAAG,MAAM,EAWnF,CAAC;AAEF,eAAO,MAAM,yBAAyB,aACxB,MAAM,eACH,MAAM,KACpB,CAAC,MAAM,EAAE,IAAI,CAAC,EAchB,CAAC;AAEF,eAAO,MAAM,YAAY,aACX,MAAM,eACH,MAAM,kBACH,MAAM,kBAKzB,CAAC;AAEF,eAAO,MAAM,aAAa,qBAEzB,CAAC;AAEF,eAAO,MAAM,UAAU,SAAgB,MAAM,kBAE5C,CAAC;AAEF,eAAO,MAAM,aAAa,QAAe,MAAM,SAAS,MAAM,kBAE7D,CAAC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.npmPackageSet = exports.npmPublish = exports.npmPublishDry = exports.npmUnpublish = exports.npmGetPackageVersionDates = exports.npmGetPackageVersions = void 0;
13
+ const cli_os_1 = require("./cli-os");
14
+ const npmGetPackageVersions = (registry, packageName) => {
15
+ try {
16
+ const v = (0, cli_os_1.runCommandOutput)(`npm show ${packageName} versions --registry ${registry} --json`, { timeout: 10000 });
17
+ return JSON.parse(v);
18
+ }
19
+ catch (_a) {
20
+ return [];
21
+ }
22
+ };
23
+ exports.npmGetPackageVersions = npmGetPackageVersions;
24
+ const npmGetPackageVersionDates = (registry, packageName) => {
25
+ try {
26
+ const v = (0, cli_os_1.runCommandOutput)(`npm view ${packageName} time --registry ${registry} --json`, {
27
+ timeout: 10000,
28
+ });
29
+ const map = JSON.parse(v);
30
+ return Object.keys(map).reduce((out, version) => [...out, [version, new Date(map[version])]], []);
31
+ }
32
+ catch (_a) {
33
+ return [];
34
+ }
35
+ };
36
+ exports.npmGetPackageVersionDates = npmGetPackageVersionDates;
37
+ const npmUnpublish = (registry, packageName, packageVersion) => __awaiter(void 0, void 0, void 0, function* () {
38
+ yield (0, cli_os_1.runCommand)(`npm unpublish ${packageName}@${packageVersion} --registry ${registry}`, {
39
+ timeout: 10000,
40
+ });
41
+ });
42
+ exports.npmUnpublish = npmUnpublish;
43
+ const npmPublishDry = () => __awaiter(void 0, void 0, void 0, function* () {
44
+ yield (0, cli_os_1.runCommand)('npm publish --dry-run');
45
+ });
46
+ exports.npmPublishDry = npmPublishDry;
47
+ const npmPublish = (tag) => __awaiter(void 0, void 0, void 0, function* () {
48
+ yield (0, cli_os_1.runCommand)(['npm publish', !!tag && `--tag ${tag}`]);
49
+ });
50
+ exports.npmPublish = npmPublish;
51
+ const npmPackageSet = (key, value) => __awaiter(void 0, void 0, void 0, function* () {
52
+ yield (0, cli_os_1.runCommand)(`npm pkg set ${key}=${value}`);
53
+ });
54
+ exports.npmPackageSet = npmPackageSet;
55
+ //# sourceMappingURL=cli-npm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-npm.js","sourceRoot":"","sources":["../../../src/cli/utils/cli-npm.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAwD;AAEjD,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAE,WAAmB,EAAY,EAAE;IACrF,IAAI;QACA,MAAM,CAAC,GAAG,IAAA,yBAAgB,EACtB,YAAY,WAAW,wBAAwB,QAAQ,SAAS,EAChE,EAAE,OAAO,EAAE,KAAK,EAAE,CACrB,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACxB;IAAC,WAAM;QACJ,OAAO,EAAE,CAAC;KACb;AACL,CAAC,CAAC;AAXW,QAAA,qBAAqB,yBAWhC;AAEK,MAAM,yBAAyB,GAAG,CACrC,QAAgB,EAChB,WAAmB,EACH,EAAE;IAClB,IAAI;QACA,MAAM,CAAC,GAAG,IAAA,yBAAgB,EAAC,YAAY,WAAW,oBAAoB,QAAQ,SAAS,EAAE;YACrF,OAAO,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE1B,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAC1B,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAC7D,EAAE,CACL,CAAC;KACL;IAAC,WAAM;QACJ,OAAO,EAAE,CAAC;KACb;AACL,CAAC,CAAC;AAjBW,QAAA,yBAAyB,6BAiBpC;AAEK,MAAM,YAAY,GAAG,CACxB,QAAgB,EAChB,WAAmB,EACnB,cAAsB,EACxB,EAAE;IACA,MAAM,IAAA,mBAAU,EAAC,iBAAiB,WAAW,IAAI,cAAc,eAAe,QAAQ,EAAE,EAAE;QACtF,OAAO,EAAE,KAAK;KACjB,CAAC,CAAC;AACP,CAAC,CAAA,CAAC;AARW,QAAA,YAAY,gBAQvB;AAEK,MAAM,aAAa,GAAG,GAAS,EAAE;IACpC,MAAM,IAAA,mBAAU,EAAC,uBAAuB,CAAC,CAAC;AAC9C,CAAC,CAAA,CAAC;AAFW,QAAA,aAAa,iBAExB;AAEK,MAAM,UAAU,GAAG,CAAO,GAAY,EAAE,EAAE;IAC7C,MAAM,IAAA,mBAAU,EAAC,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,IAAI,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAA,CAAC;AAFW,QAAA,UAAU,cAErB;AAEK,MAAM,aAAa,GAAG,CAAO,GAAW,EAAE,KAAa,EAAE,EAAE;IAC9D,MAAM,IAAA,mBAAU,EAAC,eAAe,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;AACpD,CAAC,CAAA,CAAC;AAFW,QAAA,aAAa,iBAExB"}
@@ -0,0 +1,4 @@
1
+ import { ExecSyncOptionsWithBufferEncoding, SpawnOptionsWithoutStdio } from 'child_process';
2
+ export declare const runCommand: (command: string | (string | false)[], opts?: SpawnOptionsWithoutStdio) => Promise<void>;
3
+ export declare const runCommandOutput: (command: string | (string | false)[], options?: ExecSyncOptionsWithBufferEncoding) => string;
4
+ //# sourceMappingURL=cli-os.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-os.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/cli-os.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,iCAAiC,EAEjC,wBAAwB,EAC3B,MAAM,eAAe,CAAC;AAGvB,eAAO,MAAM,UAAU,YACV,MAAM,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,SAC7B,wBAAwB,KAChC,QAAQ,IAAI,CAoCd,CAAC;AAEF,eAAO,MAAM,gBAAgB,YAChB,MAAM,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,YAC1B,iCAAiC,KAC5C,MAuBF,CAAC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runCommandOutput = exports.runCommand = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const utils_1 = require("../../utils");
6
+ const runCommand = (command, opts) => {
7
+ return new Promise((resolve, reject) => {
8
+ const commandArray = Array.isArray(command)
9
+ ? command
10
+ .filter(c => !!c)
11
+ .map(c => c.toString())
12
+ .join(' ')
13
+ .split(' ')
14
+ : command.split(' ');
15
+ const fullCommand = commandArray.join(' ');
16
+ const commandName = commandArray.shift();
17
+ if (!commandName) {
18
+ reject();
19
+ return;
20
+ }
21
+ utils_1.log.info(`run command ${fullCommand}`);
22
+ const proc = (0, child_process_1.spawn)(commandName, commandArray, opts);
23
+ proc.stdout.pipe(process.stdout);
24
+ proc.stderr.pipe(process.stderr);
25
+ proc.on('exit', function (code) {
26
+ utils_1.log.info(`command finished with code ${code}`, fullCommand);
27
+ if (code) {
28
+ reject();
29
+ }
30
+ else {
31
+ resolve();
32
+ }
33
+ });
34
+ });
35
+ };
36
+ exports.runCommand = runCommand;
37
+ const runCommandOutput = (command, options) => {
38
+ const commandArray = Array.isArray(command)
39
+ ? command
40
+ .filter(c => !!c)
41
+ .map(c => c.toString())
42
+ .join(' ')
43
+ .split(' ')
44
+ : command.split(' ');
45
+ const fullCommand = commandArray.join(' ');
46
+ const commandName = commandArray.shift();
47
+ if (!commandName) {
48
+ throw new Error();
49
+ }
50
+ utils_1.log.info(`run command ${fullCommand}`);
51
+ const result = (0, child_process_1.execSync)(fullCommand, options).toString();
52
+ utils_1.log.info('command finished', result);
53
+ return result;
54
+ };
55
+ exports.runCommandOutput = runCommandOutput;
56
+ //# sourceMappingURL=cli-os.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-os.js","sourceRoot":"","sources":["../../../src/cli/utils/cli-os.ts"],"names":[],"mappings":";;;AAAA,iDAKuB;AACvB,uCAAkC;AAE3B,MAAM,UAAU,GAAG,CACtB,OAAoC,EACpC,IAA+B,EAClB,EAAE;IACf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,YAAY,GAAa,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACjD,CAAC,CAAC,OAAO;iBACF,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;iBACtB,IAAI,CAAC,GAAG,CAAC;iBACT,KAAK,CAAC,GAAG,CAAC;YACjB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE3C,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;QAEzC,IAAI,CAAC,WAAW,EAAE;YACd,MAAM,EAAE,CAAC;YAET,OAAO;SACV;QAED,WAAG,CAAC,IAAI,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC;QAEvC,MAAM,IAAI,GAAG,IAAA,qBAAK,EAAC,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEjC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,IAAS;YAC/B,WAAG,CAAC,IAAI,CAAC,8BAA8B,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;YAE5D,IAAI,IAAI,EAAE;gBACN,MAAM,EAAE,CAAC;aACZ;iBAAM;gBACH,OAAO,EAAE,CAAC;aACb;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAvCW,QAAA,UAAU,cAuCrB;AAEK,MAAM,gBAAgB,GAAG,CAC5B,OAAoC,EACpC,OAA2C,EACrC,EAAE;IACR,MAAM,YAAY,GAAa,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QACjD,CAAC,CAAC,OAAO;aACF,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAChB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;aACtB,IAAI,CAAC,GAAG,CAAC;aACT,KAAK,CAAC,GAAG,CAAC;QACjB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE3C,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;IAEzC,IAAI,CAAC,WAAW,EAAE;QACd,MAAM,IAAI,KAAK,EAAE,CAAC;KACrB;IAED,WAAG,CAAC,IAAI,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IAEzD,WAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IAErC,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AA1BW,QAAA,gBAAgB,oBA0B3B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/startup",
3
- "version": "22.2.0",
3
+ "version": "22.2.1",
4
4
  "description": "",
5
5
  "homepage": "https://docs.st.dev/docs/frontend/startup",
6
6
  "repository": {
@@ -37,8 +37,8 @@
37
37
  "@jest/core": "~27.5.1",
38
38
  "@jest/types": "~27.5.1",
39
39
  "@lerna/exec": "~5.6.2",
40
- "@servicetitan/eslint-config": "22.2.0",
41
- "@servicetitan/stylelint-config": "22.2.0",
40
+ "@servicetitan/eslint-config": "22.2.1",
41
+ "@servicetitan/stylelint-config": "22.2.1",
42
42
  "@types/jest": "~27.4.0",
43
43
  "chalk": "~4.1.2",
44
44
  "chokidar": "~3.5.3",
@@ -46,7 +46,7 @@
46
46
  "css-loader": "~6.7.2",
47
47
  "deepmerge": "~4.2.2",
48
48
  "esbuild-loader": "~2.20.0",
49
- "eslint": "~8.28.0",
49
+ "eslint": "~8.29.0",
50
50
  "execa": "~5.1.1",
51
51
  "fork-ts-checker-webpack-plugin": "~7.2.13",
52
52
  "glob": "~7.2.0",
@@ -64,7 +64,7 @@
64
64
  "moment-locales-webpack-plugin": "~1.2.0",
65
65
  "portfinder": "~1.0.28",
66
66
  "prettier": "~2.7.1",
67
- "sass": "~1.56.1",
67
+ "sass": "~1.56.2",
68
68
  "sass-loader": "~12.6.0",
69
69
  "source-map-loader": "~3.0.1",
70
70
  "style-loader": "~3.3.1",
@@ -81,7 +81,7 @@
81
81
  "webpack-dev-server": "~3.11.2",
82
82
  "webpack-filter-warnings-plugin": "~1.2.1",
83
83
  "webpack-merge": "~5.8.0",
84
- "webpack-virtual-modules": "~0.4.6",
84
+ "webpack-virtual-modules": "~0.5.0",
85
85
  "worker-loader": "~3.0.8",
86
86
  "xhr-mock": "~2.5.1",
87
87
  "yargs": "~17.6.2"
@@ -92,5 +92,5 @@
92
92
  "cli": {
93
93
  "webpack": false
94
94
  },
95
- "gitHead": "cbb2dd04f51e14f207ade193ba2a167d6f220f61"
95
+ "gitHead": "e6385a40fd3deb32a0083f5252c74e26172ae227"
96
96
  }
@@ -6,6 +6,7 @@ export * from './prepare-package';
6
6
  export * from './start';
7
7
  export * from './tests';
8
8
  export * from './styles-check';
9
+ export * from './mfe-publish';
9
10
 
10
11
  export interface Command {
11
12
  execute(): Promise<void>;
@@ -0,0 +1,317 @@
1
+ const exec = require('@lerna/exec');
2
+ const path = require('path');
3
+
4
+ import {
5
+ getPackages,
6
+ logErrors,
7
+ PackageType,
8
+ readJson,
9
+ splitPackagesByType,
10
+ isWebComponent,
11
+ log,
12
+ } from '../../utils';
13
+ import { gitGetBranch, gitGetCommitHash } from '../utils/cli-git';
14
+ import {
15
+ npmGetPackageVersionDates,
16
+ npmGetPackageVersions,
17
+ npmPackageSet,
18
+ npmPublish,
19
+ npmPublishDry,
20
+ npmUnpublish,
21
+ } from '../utils/cli-npm';
22
+ import { Command } from '.';
23
+
24
+ interface ArgsPackagePublish {
25
+ build?: string;
26
+ dry?: boolean;
27
+ force?: boolean;
28
+ branch?: string;
29
+ tag?: string | false;
30
+ noTag?: string;
31
+ }
32
+
33
+ interface ArgsPackageClean {
34
+ count?: number;
35
+ }
36
+
37
+ interface Args extends ArgsPackagePublish, ArgsPackageClean {
38
+ clean?: boolean;
39
+ scope?: string | string[];
40
+ }
41
+
42
+ export class MFEPublish implements Command {
43
+ constructor(private args: Args) {}
44
+
45
+ @logErrors
46
+ async execute() {
47
+ let packages = splitPackagesByType(getPackages())[PackageType.Webpack] ?? [];
48
+ packages = packages.filter(p => {
49
+ const packageJson = readJson(path.join(p.location, 'package.json'));
50
+
51
+ return packageJson?.cli?.['web-component'] === true;
52
+ });
53
+
54
+ if (this.args.scope) {
55
+ packages = packages.filter(p =>
56
+ Array.isArray(this.args.scope)
57
+ ? this.args.scope.includes(p.name)
58
+ : this.args.scope === p.name
59
+ );
60
+ }
61
+
62
+ if (!packages.length) {
63
+ throw new Error('no packages found for publication');
64
+ }
65
+
66
+ await exec({
67
+ 'cmd': `startup mfe-package-${this.args.clean ? 'clean' : 'publish'}`,
68
+ 'scope': packages.map(({ name }) => name),
69
+ 'stream': true,
70
+ '--': [
71
+ ...[this.args.build ? `--build ${this.args.build}` : undefined],
72
+ ...[this.args.branch ? `--branch ${this.args.branch}` : undefined],
73
+ ...[this.args.tag ? `--tag ${this.args.tag}` : undefined],
74
+ ...[this.args.tag === false ? `--no-tag` : undefined],
75
+ ...[this.args.dry ? '--dry' : undefined],
76
+ ...[this.args.force ? '--force' : undefined],
77
+ ...[this.args.count ? `--count ${this.args.count}` : undefined],
78
+ ].filter(item => item),
79
+ });
80
+ }
81
+ }
82
+
83
+ export class MFEPackagePublish implements Command {
84
+ constructor(private args: ArgsPackagePublish) {}
85
+
86
+ @logErrors
87
+ async execute() {
88
+ if (!isWebComponent()) {
89
+ throw new Error('only web-components can be published');
90
+ }
91
+
92
+ const data = this.getPublishData();
93
+ const packageJson = readJson('package.json');
94
+ const packageName = packageJson.name;
95
+
96
+ if (!data.version) {
97
+ log.info(`no build version found - skip publishing`);
98
+
99
+ return;
100
+ }
101
+
102
+ if (!data.isBranchConfigured && !data.force) {
103
+ log.info(
104
+ `branch is not configured for publishing, use --force flag to publish if needed`
105
+ );
106
+
107
+ return;
108
+ }
109
+
110
+ const versions = npmGetPackageVersions(data.registry, packageName);
111
+
112
+ if (versions.includes(data.version)) {
113
+ log.info(
114
+ `version ${data.version} of ${packageName} is already published, skipping publish`
115
+ );
116
+
117
+ return;
118
+ }
119
+
120
+ await npmPackageSet('version', data.version);
121
+ await npmPackageSet('publishConfig.registry', data.registry);
122
+
123
+ if (!packageJson.files) {
124
+ await npmPackageSet('files[0]', 'dist');
125
+ await npmPackageSet('files[1]', 'package.json');
126
+ }
127
+
128
+ if (data.dry) {
129
+ await npmPublishDry();
130
+ } else {
131
+ await npmPublish(data.tag);
132
+ }
133
+
134
+ log.info(
135
+ `packages ${packageJson.name} is published ${data.dry ? '(dry) ' : ''}with version ${
136
+ data.version
137
+ }`
138
+ );
139
+ }
140
+
141
+ private getPublishData(): {
142
+ version: string;
143
+ buildVersion: string;
144
+ tag?: string;
145
+ registry: string;
146
+ dry: boolean;
147
+ force: boolean;
148
+ isBranchConfigured: boolean;
149
+ } {
150
+ const cli = this.args;
151
+ const branch = cli.branch ?? gitGetBranch();
152
+ const branchConfig = getBranchConfigs()[branch];
153
+ let buildVersion = cli.build;
154
+
155
+ if (!buildVersion) {
156
+ buildVersion = `${branch}.${gitGetCommitHash()}`;
157
+ }
158
+
159
+ if (!buildVersion) {
160
+ throw new Error('build version is not set');
161
+ }
162
+
163
+ let tag: string;
164
+
165
+ if (cli.tag === false) {
166
+ tag = '';
167
+ } else if (cli.tag) {
168
+ tag = cli.tag;
169
+ } else {
170
+ tag = branchConfig?.tag ?? '';
171
+ }
172
+
173
+ const registry = 'https://verdaccio.servicetitan.com';
174
+
175
+ return {
176
+ tag,
177
+ version: '0.0.0-' + buildVersion,
178
+ buildVersion,
179
+ registry,
180
+ dry: !!cli.dry,
181
+ force: !!cli.force,
182
+ isBranchConfigured: !!branchConfig,
183
+ };
184
+ }
185
+ }
186
+
187
+ export class MFEPackageClean implements Command {
188
+ constructor(private args: ArgsPackageClean) {}
189
+
190
+ @logErrors
191
+ async execute() {
192
+ if (!isWebComponent()) {
193
+ throw new Error('only web-components can be cleaned');
194
+ }
195
+
196
+ const data = this.getCleanData();
197
+ const packageJson = readJson('package.json');
198
+ const packageName = packageJson.name;
199
+ const branchedVersions = this.getBranchedVersions(packageName, data.registry);
200
+
201
+ log.info(
202
+ `branched versions (${data.count}):`,
203
+ JSON.stringify(branchedVersions, undefined, 4)
204
+ );
205
+
206
+ const branchedVersionsToClean: Record<string, [string, Date][]> = {};
207
+
208
+ for (const branch of Object.keys(branchedVersions)) {
209
+ // limit branches for now
210
+ if (!branchedVersions[branch] || !data.branches.includes(branch)) {
211
+ continue;
212
+ }
213
+
214
+ branchedVersions[branch].sort(([, adt], [, bdt]) => (adt > bdt ? -1 : 1));
215
+ branchedVersionsToClean[branch] = branchedVersions[branch].slice(data.count);
216
+ }
217
+
218
+ log.info(
219
+ 'found versions for unpublish:',
220
+ JSON.stringify(branchedVersionsToClean, undefined, 4)
221
+ );
222
+
223
+ const unVersions = Object.keys(branchedVersionsToClean).reduce(
224
+ (out, br) => [...out, ...branchedVersionsToClean[br].map(([v]) => v)],
225
+ []
226
+ );
227
+
228
+ for (const version of unVersions) {
229
+ try {
230
+ // eslint-disable-next-line no-await-in-loop
231
+ await npmUnpublish(data.registry, packageName, version);
232
+ } catch {
233
+ log.error(`error while removing ${packageName} version ${version}`);
234
+ }
235
+ }
236
+ }
237
+
238
+ private getCleanData(): {
239
+ count: number;
240
+ registry: string;
241
+ branches: string[];
242
+ } {
243
+ let count = this.args.count;
244
+
245
+ if (!count) {
246
+ count = 5;
247
+ }
248
+
249
+ const registry = 'https://verdaccio.servicetitan.com';
250
+
251
+ return { count, registry, branches: Object.keys(getBranchConfigs()) };
252
+ }
253
+
254
+ private getBranchedVersions(packageName: string, registry: string) {
255
+ const versions = npmGetPackageVersionDates(registry, packageName);
256
+ const branchedVersions: Record<string, [string, Date][]> = {};
257
+ const unknownVersions: string[] = [];
258
+
259
+ const addVersion = (branch: string, version: string, dt: Date) => {
260
+ if (!branchedVersions[branch]) {
261
+ branchedVersions[branch] = [];
262
+ }
263
+
264
+ branchedVersions[branch].push([version, dt]);
265
+ };
266
+
267
+ for (const [version, dt] of versions) {
268
+ if (!version.startsWith('0.0.0-')) {
269
+ continue;
270
+ }
271
+
272
+ const buildVersion = version.replace('0.0.0-', '');
273
+
274
+ if (/^(\d+)\.(\d+)\.(\d+)$/.test(buildVersion)) {
275
+ // master version generated by nerdbank versioning
276
+ addVersion('master', version, dt);
277
+ continue;
278
+ }
279
+
280
+ const match1 = buildVersion.match(
281
+ /^(\d+)\.(\d+)\.(\d+)-([\dA-Za-z\-]+).([\dA-Za-z]+)$/
282
+ );
283
+
284
+ if (match1?.length) {
285
+ // branch version generated by nerdbank versioning
286
+ addVersion(match1[4], version, dt);
287
+ continue;
288
+ }
289
+
290
+ const match2 = buildVersion.match(/^([\dA-Za-z\-]+).([\dA-Za-z]+)$/);
291
+
292
+ if (match2?.length) {
293
+ // branch version generated by mfe-publisher versioning
294
+ addVersion(match2[1], version, dt);
295
+ continue;
296
+ }
297
+
298
+ unknownVersions.push(version);
299
+ }
300
+
301
+ if (unknownVersions.length) {
302
+ log.info('unknown versions:', unknownVersions.join());
303
+ }
304
+
305
+ return branchedVersions;
306
+ }
307
+ }
308
+
309
+ const getBranchConfigs = (): Record<string, { tag?: string }> => {
310
+ // ToDo: add ability to configure it in a package.json
311
+ return {
312
+ develop: { tag: 'dev' },
313
+ dev: { tag: 'dev' },
314
+ next: { tag: 'next' },
315
+ master: { tag: 'prod' },
316
+ };
317
+ };
package/src/cli/index.ts CHANGED
@@ -11,6 +11,9 @@ import {
11
11
  Lint,
12
12
  Tests,
13
13
  StylesCheck,
14
+ MFEPackageClean,
15
+ MFEPackagePublish,
16
+ MFEPublish,
14
17
  } from './commands';
15
18
 
16
19
  interface Newable<T> {
@@ -43,6 +46,15 @@ function getCommand(name: string): Newable<Command> {
43
46
  case 'styles-check':
44
47
  return StylesCheck;
45
48
 
49
+ case 'mfe-publish':
50
+ return MFEPublish;
51
+
52
+ case 'mfe-package-publish':
53
+ return MFEPackagePublish;
54
+
55
+ case 'mfe-package-clean':
56
+ return MFEPackageClean;
57
+
46
58
  default:
47
59
  log.error(`${name}: command not found!`);
48
60
  process.exit(127);
@@ -0,0 +1,9 @@
1
+ import { runCommandOutput } from './cli-os';
2
+
3
+ export const gitGetBranch = (): string => {
4
+ return runCommandOutput('git rev-parse --abbrev-ref HEAD').trim();
5
+ };
6
+
7
+ export const gitGetCommitHash = (): string => {
8
+ return runCommandOutput('git rev-parse --short HEAD').trim();
9
+ };
@@ -0,0 +1,55 @@
1
+ import { runCommand, runCommandOutput } from './cli-os';
2
+
3
+ export const npmGetPackageVersions = (registry: string, packageName: string): string[] => {
4
+ try {
5
+ const v = runCommandOutput(
6
+ `npm show ${packageName} versions --registry ${registry} --json`,
7
+ { timeout: 10000 }
8
+ );
9
+
10
+ return JSON.parse(v);
11
+ } catch {
12
+ return [];
13
+ }
14
+ };
15
+
16
+ export const npmGetPackageVersionDates = (
17
+ registry: string,
18
+ packageName: string
19
+ ): [string, Date][] => {
20
+ try {
21
+ const v = runCommandOutput(`npm view ${packageName} time --registry ${registry} --json`, {
22
+ timeout: 10000,
23
+ });
24
+ const map = JSON.parse(v);
25
+
26
+ return Object.keys(map).reduce(
27
+ (out, version) => [...out, [version, new Date(map[version])]],
28
+ []
29
+ );
30
+ } catch {
31
+ return [];
32
+ }
33
+ };
34
+
35
+ export const npmUnpublish = async (
36
+ registry: string,
37
+ packageName: string,
38
+ packageVersion: string
39
+ ) => {
40
+ await runCommand(`npm unpublish ${packageName}@${packageVersion} --registry ${registry}`, {
41
+ timeout: 10000,
42
+ });
43
+ };
44
+
45
+ export const npmPublishDry = async () => {
46
+ await runCommand('npm publish --dry-run');
47
+ };
48
+
49
+ export const npmPublish = async (tag?: string) => {
50
+ await runCommand(['npm publish', !!tag && `--tag ${tag}`]);
51
+ };
52
+
53
+ export const npmPackageSet = async (key: string, value: string) => {
54
+ await runCommand(`npm pkg set ${key}=${value}`);
55
+ };
@@ -0,0 +1,76 @@
1
+ import {
2
+ execSync,
3
+ ExecSyncOptionsWithBufferEncoding,
4
+ spawn,
5
+ SpawnOptionsWithoutStdio,
6
+ } from 'child_process';
7
+ import { log } from '../../utils';
8
+
9
+ export const runCommand = (
10
+ command: string | (string | false)[],
11
+ opts?: SpawnOptionsWithoutStdio
12
+ ): Promise<void> => {
13
+ return new Promise((resolve, reject) => {
14
+ const commandArray: string[] = Array.isArray(command)
15
+ ? command
16
+ .filter(c => !!c)
17
+ .map(c => c.toString())
18
+ .join(' ')
19
+ .split(' ')
20
+ : command.split(' ');
21
+ const fullCommand = commandArray.join(' ');
22
+
23
+ const commandName = commandArray.shift();
24
+
25
+ if (!commandName) {
26
+ reject();
27
+
28
+ return;
29
+ }
30
+
31
+ log.info(`run command ${fullCommand}`);
32
+
33
+ const proc = spawn(commandName, commandArray, opts);
34
+
35
+ proc.stdout.pipe(process.stdout);
36
+ proc.stderr.pipe(process.stderr);
37
+
38
+ proc.on('exit', function (code: any) {
39
+ log.info(`command finished with code ${code}`, fullCommand);
40
+
41
+ if (code) {
42
+ reject();
43
+ } else {
44
+ resolve();
45
+ }
46
+ });
47
+ });
48
+ };
49
+
50
+ export const runCommandOutput = (
51
+ command: string | (string | false)[],
52
+ options?: ExecSyncOptionsWithBufferEncoding
53
+ ): string => {
54
+ const commandArray: string[] = Array.isArray(command)
55
+ ? command
56
+ .filter(c => !!c)
57
+ .map(c => c.toString())
58
+ .join(' ')
59
+ .split(' ')
60
+ : command.split(' ');
61
+ const fullCommand = commandArray.join(' ');
62
+
63
+ const commandName = commandArray.shift();
64
+
65
+ if (!commandName) {
66
+ throw new Error();
67
+ }
68
+
69
+ log.info(`run command ${fullCommand}`);
70
+
71
+ const result = execSync(fullCommand, options).toString();
72
+
73
+ log.info('command finished', result);
74
+
75
+ return result;
76
+ };