UNPKG

12.7 kBJavaScriptView Raw
1"use strict";
2/**
3 * @license
4 * Copyright Google LLC All Rights Reserved.
5 *
6 * Use of this source code is governed by an MIT-style license that can be
7 * found in the LICENSE file at https://angular.io/license
8 */
9Object.defineProperty(exports, "__esModule", { value: true });
10exports.scheduleByTarget = exports.scheduleByName = void 0;
11const rxjs_1 = require("rxjs");
12const api_1 = require("./api");
13const jobs_1 = require("./jobs");
14const progressSchema = require('./progress-schema.json');
15let _uniqueId = 0;
16async function scheduleByName(name, buildOptions, options) {
17 const childLoggerName = options.target ? `{${(0, api_1.targetStringFromTarget)(options.target)}}` : name;
18 const logger = options.logger.createChild(childLoggerName);
19 const job = options.scheduler.schedule(name, {});
20 let stateSubscription;
21 const workspaceRoot = await options.workspaceRoot;
22 const currentDirectory = await options.currentDirectory;
23 const description = await (0, rxjs_1.firstValueFrom)(job.description);
24 const info = description.info;
25 const id = ++_uniqueId;
26 const message = {
27 id,
28 currentDirectory,
29 workspaceRoot,
30 info: info,
31 options: buildOptions,
32 ...(options.target ? { target: options.target } : {}),
33 };
34 // Wait for the job to be ready.
35 if (job.state !== jobs_1.JobState.Started) {
36 stateSubscription = job.outboundBus.subscribe({
37 next: (event) => {
38 if (event.kind === jobs_1.JobOutboundMessageKind.Start) {
39 job.input.next(message);
40 }
41 },
42 error: () => { },
43 });
44 }
45 else {
46 job.input.next(message);
47 }
48 const logChannelSub = job.getChannel('log').subscribe({
49 next: (entry) => {
50 logger.next(entry);
51 },
52 error: () => { },
53 });
54 const outboundBusSub = job.outboundBus.subscribe({
55 error() { },
56 complete() {
57 outboundBusSub.unsubscribe();
58 logChannelSub.unsubscribe();
59 stateSubscription.unsubscribe();
60 },
61 });
62 const output = job.output.pipe((0, rxjs_1.map)((output) => ({
63 ...output,
64 ...(options.target ? { target: options.target } : 0),
65 info,
66 })), (0, rxjs_1.shareReplay)());
67 // Start the builder.
68 output.pipe((0, rxjs_1.first)()).subscribe({
69 error: () => { },
70 });
71 return {
72 id,
73 info,
74 // This is a getter so that it always returns the next output, and not the same one.
75 get result() {
76 return (0, rxjs_1.firstValueFrom)(output);
77 },
78 get lastOutput() {
79 return (0, rxjs_1.lastValueFrom)(output);
80 },
81 output,
82 progress: job
83 .getChannel('progress', progressSchema)
84 .pipe((0, rxjs_1.shareReplay)(1)),
85 stop() {
86 job.stop();
87 return job.outboundBus
88 .pipe((0, rxjs_1.ignoreElements)(), (0, rxjs_1.catchError)(() => rxjs_1.EMPTY))
89 .toPromise();
90 },
91 };
92}
93exports.scheduleByName = scheduleByName;
94async function scheduleByTarget(target, overrides, options) {
95 return scheduleByName(`{${(0, api_1.targetStringFromTarget)(target)}}`, overrides, {
96 ...options,
97 target,
98 logger: options.logger,
99 });
100}
101exports.scheduleByTarget = scheduleByTarget;
102//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUtYnktbmFtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2FyY2hpdGVjdC9zcmMvc2NoZWR1bGUtYnktbmFtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFHSCwrQkFVYztBQUNkLCtCQVFlO0FBQ2YsaUNBQXFFO0FBRXJFLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBRXpELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztBQUVYLEtBQUssVUFBVSxjQUFjLENBQ2xDLElBQVksRUFDWixZQUE2QixFQUM3QixPQU1DO0lBRUQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFBLDRCQUFzQixFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDOUYsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDM0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQWtDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRixJQUFJLGlCQUErQixDQUFDO0lBRXBDLE1BQU0sYUFBYSxHQUFHLE1BQU0sT0FBTyxDQUFDLGFBQWEsQ0FBQztJQUNsRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sT0FBTyxDQUFDLGdCQUFnQixDQUFDO0lBRXhELE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBQSxxQkFBYyxFQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsSUFBbUIsQ0FBQztJQUM3QyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQztJQUV2QixNQUFNLE9B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R0FBRyxFQUFFLENBQUMsWUFBSyxDQUFDLENBQ3hCO2lCQUNBLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQXZHRCx3Q0F1R0M7QUFFTSxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLE1BQWMsRUFDZCxTQUEwQixFQUMxQixPQUtDO0lBRUQsT0FBTyxjQUFjLENBQUMsSUFBSSxJQUFBLDRCQUFzQixFQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFO1FBQ3RFLEdBQUcsT0FBTztRQUNWLE1BQU07UUFDTixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQWZELDRDQWVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7IGpzb24sIGxvZ2dpbmcgfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQge1xuICBFTVBUWSxcbiAgU3Vic2NyaXB0aW9uLFxuICBjYXRjaEVycm9yLFxuICBmaXJzdCxcbiAgZmlyc3RWYWx1ZUZyb20sXG4gIGlnbm9yZUVsZW1lbnRzLFxuICBsYXN0VmFsdWVGcm9tLFxuICBtYXAsXG4gIHNoYXJlUmVwbGF5LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEJ1aWxkZXJJbmZvLFxuICBCdWlsZGVySW5wdXQsXG4gIEJ1aWxkZXJPdXRwdXQsXG4gIEJ1aWxkZXJQcm9ncmVzc1JlcG9ydCxcbiAgQnVpbGRlclJ1bixcbiAgVGFyZ2V0LFxuICB0YXJnZXRTdHJpbmdGcm9tVGFyZ2V0LFxufSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBKb2JPdXRib3VuZE1lc3NhZ2VLaW5kLCBKb2JTdGF0ZSwgU2NoZWR1bGVyIH0gZnJvbSAnLi9qb2JzJztcblxuY29uc3QgcHJvZ3Jlc3NTY2hlbWEgPSByZXF1aXJlKCcuL3Byb2dyZXNzLXNjaGVtYS5qc29uJyk7XG5cbmxldCBfdW5pcXVlSWQgPSAwO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2NoZWR1bGVCeU5hbWUoXG4gIG5hbWU6IHN0cmluZyxcbiAgYnVpbGRPcHRpb25zOiBqc29uLkpzb25PYmplY3QsXG4gIG9wdGlvbnM6IHtcbiAgICB0YXJnZXQ/OiBUYXJnZXQ7XG4gICAgc2NoZWR1bGVyOiBTY2hlZHVsZXI7XG4gICAgbG9nZ2VyOiBsb2dnaW5nLkxvZ2dlckFwaTtcbiAgICB3b3Jrc3BhY2VSb290OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gICAgY3VycmVudERpcmVjdG9yeTogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuICB9LFxuKTogUHJvbWlzZTxCdWlsZGVyUnVuPiB7XG4gIGNvbnN0IGNoaWxkTG9nZ2VyTmFtZSA9IG9wdGlvbnMudGFyZ2V0ID8gYHske3RhcmdldFN0cmluZ0Zyb21UYXJnZXQob3B0aW9ucy50YXJnZXQpfX1gIDogbmFtZTtcbiAgY29uc3QgbG9nZ2VyID0gb3B0aW9ucy5sb2dnZXIuY3JlYXRlQ2hpbGQoY2hpbGRMb2dnZXJOYW1lKTtcbiAgY29uc3Qgam9iID0gb3B0aW9ucy5zY2hlZHVsZXIuc2NoZWR1bGU8e30sIEJ1aWxkZXJJbnB1dCwgQnVpbGRlck91dHB1dD4obmFtZSwge30pO1xuICBsZXQgc3RhdGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdCB3b3Jrc3BhY2VSb290ID0gYXdhaXQgb3B0aW9ucy53b3Jrc3BhY2VSb290O1xuICBjb25zdCBjdXJyZW50RGlyZWN0b3J5ID0gYXdhaXQgb3B0aW9ucy5jdXJyZW50RGlyZWN0b3J5O1xuXG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oam9iLmRlc2NyaXB0aW9uKTtcbiAgY29uc3QgaW5mbyA9IGRlc2NyaXB0aW9uLmluZm8gYXMgQnVpbGRlckluZm87XG4gIGNvbnN0IGlkID0gKytfdW5pcXVlSWQ7XG5cbiAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICBpZCxcbiAgICBjdXJyZW50RGlyZWN0b3J5LFxuICAgIHdvcmtzcGFjZVJvb3QsXG4gICAgaW5mbzogaW5mbyxcbiAgICBvcHRpb25zOiBidWlsZE9wdGlvbnMsXG4gICAgLi4uKG9wdGlvbnMudGFyZ2V0ID8geyB0YXJnZXQ6IG9wdGlvbnMudGFyZ2V0IH0gOiB7fSksXG4gIH07XG5cbiAgLy8gV2FpdCBmb3IgdGhlIGpvYiB0byBiZSByZWFkeS5cbiAgaWYgKGpvYi5zdGF0ZSAhPT0gSm9iU3RhdGUuU3RhcnRlZCkge1xuICAgIHN0YXRlU3Vic2NyaXB0aW9uID0gam9iLm91dGJvdW5kQnVzLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09IEpvYk91dGJvdW5kTWVzc2FnZUtpbmQuU3RhcnQpIHtcbiAgICAgICAgICBqb2IuaW5wdXQubmV4dChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7fSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBqb2IuaW5wdXQubmV4dChtZXNzYWdlKTtcbiAgfVxuXG4gIGNvbnN0IGxvZ0NoYW5uZWxTdWIgPSBqb2IuZ2V0Q2hhbm5lbDxsb2dnaW5nLkxvZ0VudHJ5PignbG9nJykuc3Vic2NyaWJlKHtcbiAgICBuZXh0OiAoZW50cnkpID0+IHtcbiAgICAgIGxvZ2dlci5uZXh0KGVudHJ5KTtcbiAgICB9LFxuICAgIGVycm9yOiAoKSA9PiB7fSxcbiAgfSk7XG5cbiAgY29uc3Qgb3V0Ym91bmRCdXNTdWIgPSBqb2Iub3V0Ym91bmRCdXMuc3Vic2NyaWJlKHtcbiAgICBlcnJvcigpIHt9LFxuICAgIGNvbXBsZXRlKCkge1xuICAgICAgb3V0Ym91bmRCdXNTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIGxvZ0NoYW5uZWxTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IG91dHB1dCA9IGpvYi5vdXRwdXQucGlwZShcbiAgICBtYXAoXG4gICAgICAob3V0cHV0KSA9PlxuICAgICAgICAoe1xuICAgICAgICAgIC4uLm91dHB1dCxcbiAgICAgICAgICAuLi4ob3B0aW9ucy50YXJnZXQgPyB7IHRhcmdldDogb3B0aW9ucy50YXJnZXQgfSA6IDApLFxuICAgICAgICAgIGluZm8sXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBCdWlsZGVyT3V0cHV0KSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KCksXG4gICk7XG5cbiAgLy8gU3RhcnQgdGhlIGJ1aWxkZXIuXG4gIG91dHB1dC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSh7XG4gICAgZXJyb3I6ICgpID0+IHt9LFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIGluZm8sXG4gICAgLy8gVGhpcyBpcyBhIGdldHRlciBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBuZXh0IG91dHB1dCwgYW5kIG5vdCB0aGUgc2FtZSBvbmUuXG4gICAgZ2V0IHJlc3VsdCgpIHtcbiAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbShvdXRwdXQpO1xuICAgIH0sXG4gICAgZ2V0IGxhc3RPdXRwdXQoKSB7XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbShvdXRwdXQpO1xuICAgIH0sXG4gICAgb3V0cHV0LFxuICAgIHByb2dyZXNzOiBqb2JcbiAgICAgIC5nZXRDaGFubmVsPEJ1aWxkZXJQcm9ncmVzc1JlcG9ydD4oJ3Byb2dyZXNzJywgcHJvZ3Jlc3NTY2hlbWEpXG4gICAgICAucGlwZShzaGFyZVJlcGxheSgxKSksXG4gICAgc3RvcCgpIHtcbiAgICAgIGpvYi5zdG9wKCk7XG5cbiAgICAgIHJldHVybiBqb2Iub3V0Ym91bmRCdXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgaWdub3JlRWxlbWVudHMoKSxcbiAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IEVNUFRZKSxcbiAgICAgICAgKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNjaGVkdWxlQnlUYXJnZXQoXG4gIHRhcmdldDogVGFyZ2V0LFxuICBvdmVycmlkZXM6IGpzb24uSnNvbk9iamVjdCxcbiAgb3B0aW9uczoge1xuICAgIHNjaGVkdWxlcjogU2NoZWR1bGVyO1xuICAgIGxvZ2dlcjogbG9nZ2luZy5Mb2dnZXJBcGk7XG4gICAgd29ya3NwYWNlUm9vdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuICAgIGN1cnJlbnREaXJlY3Rvcnk6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgfSxcbik6IFByb21pc2U8QnVpbGRlclJ1bj4ge1xuICByZXR1cm4gc2NoZWR1bGVCeU5hbWUoYHske3RhcmdldFN0cmluZ0Zyb21UYXJnZXQodGFyZ2V0KX19YCwgb3ZlcnJpZGVzLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICB0YXJnZXQsXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlcixcbiAgfSk7XG59XG4iXX0=
\No newline at end of file