@depup/angular-devkit__architect 0.2102.2-depup.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.
Files changed (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +25 -0
  3. package/bin/architect.d.ts +9 -0
  4. package/bin/architect.js +252 -0
  5. package/bin/architect.js.map +1 -0
  6. package/bin/cli.js +10 -0
  7. package/builders/all-of.d.ts +11 -0
  8. package/builders/all-of.js +49 -0
  9. package/builders/all-of.js.map +1 -0
  10. package/builders/builders.json +25 -0
  11. package/builders/concat.d.ts +11 -0
  12. package/builders/concat.js +46 -0
  13. package/builders/concat.js.map +1 -0
  14. package/builders/false.d.ts +10 -0
  15. package/builders/false.js +16 -0
  16. package/builders/false.js.map +1 -0
  17. package/builders/noop-schema.json +4 -0
  18. package/builders/operator-schema.d.ts +22 -0
  19. package/builders/operator-schema.js +5 -0
  20. package/builders/operator-schema.js.map +1 -0
  21. package/builders/operator-schema.json +41 -0
  22. package/builders/true.d.ts +10 -0
  23. package/builders/true.js +13 -0
  24. package/builders/true.js.map +1 -0
  25. package/changes.json +5 -0
  26. package/index.d.ts +8 -0
  27. package/index.js +25 -0
  28. package/index.js.map +1 -0
  29. package/node/index.d.ts +10 -0
  30. package/node/index.js +50 -0
  31. package/node/index.js.map +1 -0
  32. package/node/jobs/job-registry.d.ts +20 -0
  33. package/node/jobs/job-registry.js +60 -0
  34. package/node/jobs/job-registry.js.map +1 -0
  35. package/node/node-modules-architect-host.d.ts +41 -0
  36. package/node/node-modules-architect-host.js +242 -0
  37. package/node/node-modules-architect-host.js.map +1 -0
  38. package/package.json +51 -0
  39. package/src/api.d.ts +269 -0
  40. package/src/api.js +98 -0
  41. package/src/api.js.map +1 -0
  42. package/src/architect.d.ts +25 -0
  43. package/src/architect.js +268 -0
  44. package/src/architect.js.map +1 -0
  45. package/src/builders-schema.d.ts +33 -0
  46. package/src/builders-schema.js +5 -0
  47. package/src/builders-schema.js.map +1 -0
  48. package/src/builders-schema.json +70 -0
  49. package/src/create-builder.d.ts +12 -0
  50. package/src/create-builder.js +184 -0
  51. package/src/create-builder.js.map +1 -0
  52. package/src/index.d.ts +12 -0
  53. package/src/index.js +54 -0
  54. package/src/index.js.map +1 -0
  55. package/src/input-schema.d.ts +19 -0
  56. package/src/input-schema.js +5 -0
  57. package/src/input-schema.js.map +1 -0
  58. package/src/input-schema.json +39 -0
  59. package/src/internal.d.ts +68 -0
  60. package/src/internal.js +27 -0
  61. package/src/internal.js.map +1 -0
  62. package/src/jobs/api.d.ts +332 -0
  63. package/src/jobs/api.js +74 -0
  64. package/src/jobs/api.js.map +1 -0
  65. package/src/jobs/create-job-handler.d.ts +47 -0
  66. package/src/jobs/create-job-handler.js +146 -0
  67. package/src/jobs/create-job-handler.js.map +1 -0
  68. package/src/jobs/dispatcher.d.ts +31 -0
  69. package/src/jobs/dispatcher.js +50 -0
  70. package/src/jobs/dispatcher.js.map +1 -0
  71. package/src/jobs/exception.d.ts +15 -0
  72. package/src/jobs/exception.js +24 -0
  73. package/src/jobs/exception.js.map +1 -0
  74. package/src/jobs/fallback-registry.d.ts +19 -0
  75. package/src/jobs/fallback-registry.js +28 -0
  76. package/src/jobs/fallback-registry.js.map +1 -0
  77. package/src/jobs/index.d.ts +16 -0
  78. package/src/jobs/index.js +56 -0
  79. package/src/jobs/index.js.map +1 -0
  80. package/src/jobs/simple-registry.d.ts +44 -0
  81. package/src/jobs/simple-registry.js +76 -0
  82. package/src/jobs/simple-registry.js.map +1 -0
  83. package/src/jobs/simple-scheduler.d.ts +77 -0
  84. package/src/jobs/simple-scheduler.js +395 -0
  85. package/src/jobs/simple-scheduler.js.map +1 -0
  86. package/src/jobs/strategy.d.ts +26 -0
  87. package/src/jobs/strategy.js +94 -0
  88. package/src/jobs/strategy.js.map +1 -0
  89. package/src/jobs/types.d.ts +15 -0
  90. package/src/jobs/types.js +10 -0
  91. package/src/jobs/types.js.map +1 -0
  92. package/src/options.d.ts +12 -0
  93. package/src/options.js +30 -0
  94. package/src/options.js.map +1 -0
  95. package/src/output-schema.d.ts +15 -0
  96. package/src/output-schema.js +5 -0
  97. package/src/output-schema.js.map +1 -0
  98. package/src/output-schema.json +33 -0
  99. package/src/progress-schema.d.ts +21 -0
  100. package/src/progress-schema.js +13 -0
  101. package/src/progress-schema.js.map +1 -0
  102. package/src/progress-schema.json +83 -0
  103. package/src/schedule-by-name.d.ts +23 -0
  104. package/src/schedule-by-name.js +101 -0
  105. package/src/schedule-by-name.js.map +1 -0
  106. package/src/targets-schema.json +39 -0
  107. package/testing/index.d.ts +9 -0
  108. package/testing/index.js +26 -0
  109. package/testing/index.js.map +1 -0
  110. package/testing/test-project-host.d.ts +32 -0
  111. package/testing/test-project-host.js +110 -0
  112. package/testing/test-project-host.js.map +1 -0
  113. package/testing/testing-architect-host.d.ts +42 -0
  114. package/testing/testing-architect-host.js +135 -0
  115. package/testing/testing-architect-host.js.map +1 -0
@@ -0,0 +1,395 @@
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.dev/license
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.SimpleScheduler = exports.JobOutputSchemaValidationError = exports.JobInboundMessageSchemaValidationError = exports.JobArgumentSchemaValidationError = void 0;
11
+ const core_1 = require("@angular-devkit/core");
12
+ const rxjs_1 = require("rxjs");
13
+ const api_1 = require("./api");
14
+ const exception_1 = require("./exception");
15
+ class JobArgumentSchemaValidationError extends core_1.schema.SchemaValidationException {
16
+ constructor(errors) {
17
+ super(errors, 'Job Argument failed to validate. Errors: ');
18
+ }
19
+ }
20
+ exports.JobArgumentSchemaValidationError = JobArgumentSchemaValidationError;
21
+ class JobInboundMessageSchemaValidationError extends core_1.schema.SchemaValidationException {
22
+ constructor(errors) {
23
+ super(errors, 'Job Inbound Message failed to validate. Errors: ');
24
+ }
25
+ }
26
+ exports.JobInboundMessageSchemaValidationError = JobInboundMessageSchemaValidationError;
27
+ class JobOutputSchemaValidationError extends core_1.schema.SchemaValidationException {
28
+ constructor(errors) {
29
+ super(errors, 'Job Output failed to validate. Errors: ');
30
+ }
31
+ }
32
+ exports.JobOutputSchemaValidationError = JobOutputSchemaValidationError;
33
+ function _jobShare() {
34
+ // This is the same code as a `shareReplay()` operator, but uses a dumber Subject rather than a
35
+ // ReplaySubject.
36
+ return (source) => {
37
+ let refCount = 0;
38
+ let subject;
39
+ let hasError = false;
40
+ let isComplete = false;
41
+ let subscription;
42
+ return new rxjs_1.Observable((subscriber) => {
43
+ let innerSub;
44
+ refCount++;
45
+ if (!subject) {
46
+ subject = new rxjs_1.Subject();
47
+ innerSub = subject.subscribe(subscriber);
48
+ subscription = source.subscribe({
49
+ next(value) {
50
+ subject.next(value);
51
+ },
52
+ error(err) {
53
+ hasError = true;
54
+ subject.error(err);
55
+ },
56
+ complete() {
57
+ isComplete = true;
58
+ subject.complete();
59
+ },
60
+ });
61
+ }
62
+ else {
63
+ innerSub = subject.subscribe(subscriber);
64
+ }
65
+ return () => {
66
+ refCount--;
67
+ innerSub.unsubscribe();
68
+ if (subscription && refCount === 0 && (isComplete || hasError)) {
69
+ subscription.unsubscribe();
70
+ }
71
+ };
72
+ });
73
+ };
74
+ }
75
+ /**
76
+ * Simple scheduler. Should be the base of all registries and schedulers.
77
+ */
78
+ class SimpleScheduler {
79
+ _jobRegistry;
80
+ _schemaRegistry;
81
+ _internalJobDescriptionMap = new Map();
82
+ _queue = [];
83
+ _pauseCounter = 0;
84
+ constructor(_jobRegistry, _schemaRegistry = new core_1.schema.CoreSchemaRegistry()) {
85
+ this._jobRegistry = _jobRegistry;
86
+ this._schemaRegistry = _schemaRegistry;
87
+ }
88
+ _getInternalDescription(name) {
89
+ const maybeHandler = this._internalJobDescriptionMap.get(name);
90
+ if (maybeHandler !== undefined) {
91
+ return (0, rxjs_1.of)(maybeHandler);
92
+ }
93
+ const handler = this._jobRegistry.get(name);
94
+ return handler.pipe((0, rxjs_1.switchMap)((handler) => {
95
+ if (handler === null) {
96
+ return (0, rxjs_1.of)(null);
97
+ }
98
+ const description = {
99
+ // Make a copy of it to be sure it's proper JSON.
100
+ ...JSON.parse(JSON.stringify(handler.jobDescription)),
101
+ name: handler.jobDescription.name || name,
102
+ argument: handler.jobDescription.argument || true,
103
+ input: handler.jobDescription.input || true,
104
+ output: handler.jobDescription.output || true,
105
+ channels: handler.jobDescription.channels || {},
106
+ };
107
+ const noopValidator = noopSchemaValidator();
108
+ const handlerWithExtra = Object.assign(handler.bind(undefined), {
109
+ jobDescription: description,
110
+ argumentV: description.argument === true
111
+ ? noopValidator
112
+ : this._schemaRegistry.compile(description.argument),
113
+ inputV: description.input === true
114
+ ? noopValidator
115
+ : this._schemaRegistry.compile(description.input),
116
+ outputV: description.output === true
117
+ ? noopValidator
118
+ : this._schemaRegistry.compile(description.output),
119
+ });
120
+ this._internalJobDescriptionMap.set(name, handlerWithExtra);
121
+ return (0, rxjs_1.of)(handlerWithExtra);
122
+ }));
123
+ }
124
+ /**
125
+ * Get a job description for a named job.
126
+ *
127
+ * @param name The name of the job.
128
+ * @returns A description, or null if the job is not registered.
129
+ */
130
+ getDescription(name) {
131
+ return (0, rxjs_1.concat)(this._getInternalDescription(name).pipe((0, rxjs_1.map)((x) => x && x.jobDescription)), (0, rxjs_1.of)(null)).pipe((0, rxjs_1.first)());
132
+ }
133
+ /**
134
+ * Returns true if the job name has been registered.
135
+ * @param name The name of the job.
136
+ * @returns True if the job exists, false otherwise.
137
+ */
138
+ has(name) {
139
+ return this.getDescription(name).pipe((0, rxjs_1.map)((x) => x !== null));
140
+ }
141
+ /**
142
+ * Pause the scheduler, temporary queueing _new_ jobs. Returns a resume function that should be
143
+ * used to resume execution. If multiple `pause()` were called, all their resume functions must
144
+ * be called before the Scheduler actually starts new jobs. Additional calls to the same resume
145
+ * function will have no effect.
146
+ *
147
+ * Jobs already running are NOT paused. This is pausing the scheduler only.
148
+ */
149
+ pause() {
150
+ let called = false;
151
+ this._pauseCounter++;
152
+ return () => {
153
+ if (!called) {
154
+ called = true;
155
+ if (--this._pauseCounter == 0) {
156
+ // Resume the queue.
157
+ const q = this._queue;
158
+ this._queue = [];
159
+ q.forEach((fn) => fn());
160
+ }
161
+ }
162
+ };
163
+ }
164
+ /**
165
+ * Schedule a job to be run, using its name.
166
+ * @param name The name of job to be run.
167
+ * @param argument The argument to send to the job when starting it.
168
+ * @param options Scheduling options.
169
+ * @returns The Job being run.
170
+ */
171
+ schedule(name, argument, options) {
172
+ if (this._pauseCounter > 0) {
173
+ const waitable = new rxjs_1.Subject();
174
+ this._queue.push(() => waitable.complete());
175
+ return this._scheduleJob(name, argument, options || {}, waitable);
176
+ }
177
+ return this._scheduleJob(name, argument, options || {}, rxjs_1.EMPTY);
178
+ }
179
+ /**
180
+ * Filter messages.
181
+ * @private
182
+ */
183
+ _filterJobOutboundMessages(message, state) {
184
+ switch (message.kind) {
185
+ case api_1.JobOutboundMessageKind.OnReady:
186
+ return state == api_1.JobState.Queued;
187
+ case api_1.JobOutboundMessageKind.Start:
188
+ return state == api_1.JobState.Ready;
189
+ case api_1.JobOutboundMessageKind.End:
190
+ return state == api_1.JobState.Started || state == api_1.JobState.Ready;
191
+ }
192
+ return true;
193
+ }
194
+ /**
195
+ * Return a new state. This is just to simplify the reading of the _createJob method.
196
+ * @private
197
+ */
198
+ _updateState(message, state) {
199
+ switch (message.kind) {
200
+ case api_1.JobOutboundMessageKind.OnReady:
201
+ return api_1.JobState.Ready;
202
+ case api_1.JobOutboundMessageKind.Start:
203
+ return api_1.JobState.Started;
204
+ case api_1.JobOutboundMessageKind.End:
205
+ return api_1.JobState.Ended;
206
+ }
207
+ return state;
208
+ }
209
+ /**
210
+ * Create the job.
211
+ * @private
212
+ */
213
+ // eslint-disable-next-line max-lines-per-function
214
+ _createJob(name, argument, handler, inboundBus, outboundBus) {
215
+ const schemaRegistry = this._schemaRegistry;
216
+ const channelsSubject = new Map();
217
+ const channels = new Map();
218
+ let state = api_1.JobState.Queued;
219
+ let pingId = 0;
220
+ // Create the input channel by having a filter.
221
+ const input = new rxjs_1.Subject();
222
+ input
223
+ .pipe((0, rxjs_1.concatMap)((message) => handler.pipe((0, rxjs_1.switchMap)(async (handler) => {
224
+ if (handler === null) {
225
+ throw new exception_1.JobDoesNotExistException(name);
226
+ }
227
+ const validator = await handler.inputV;
228
+ return validator(message);
229
+ }))), (0, rxjs_1.filter)((result) => result.success), (0, rxjs_1.map)((result) => result.data))
230
+ .subscribe((value) => inboundBus.next({ kind: api_1.JobInboundMessageKind.Input, value }));
231
+ outboundBus = (0, rxjs_1.concat)(outboundBus,
232
+ // Add an End message at completion. This will be filtered out if the job actually send an
233
+ // End.
234
+ handler.pipe((0, rxjs_1.switchMap)((handler) => {
235
+ if (handler) {
236
+ return (0, rxjs_1.of)({
237
+ kind: api_1.JobOutboundMessageKind.End,
238
+ description: handler.jobDescription,
239
+ });
240
+ }
241
+ else {
242
+ return rxjs_1.EMPTY;
243
+ }
244
+ }))).pipe((0, rxjs_1.filter)((message) => this._filterJobOutboundMessages(message, state)),
245
+ // Update internal logic and Job<> members.
246
+ (0, rxjs_1.tap)((message) => {
247
+ // Update the state.
248
+ state = this._updateState(message, state);
249
+ switch (message.kind) {
250
+ case api_1.JobOutboundMessageKind.ChannelCreate: {
251
+ const maybeSubject = channelsSubject.get(message.name);
252
+ // If it doesn't exist or it's closed on the other end.
253
+ if (!maybeSubject) {
254
+ const s = new rxjs_1.Subject();
255
+ channelsSubject.set(message.name, s);
256
+ channels.set(message.name, s.asObservable());
257
+ }
258
+ break;
259
+ }
260
+ case api_1.JobOutboundMessageKind.ChannelMessage: {
261
+ const maybeSubject = channelsSubject.get(message.name);
262
+ if (maybeSubject) {
263
+ maybeSubject.next(message.message);
264
+ }
265
+ break;
266
+ }
267
+ case api_1.JobOutboundMessageKind.ChannelComplete: {
268
+ const maybeSubject = channelsSubject.get(message.name);
269
+ if (maybeSubject) {
270
+ maybeSubject.complete();
271
+ channelsSubject.delete(message.name);
272
+ }
273
+ break;
274
+ }
275
+ case api_1.JobOutboundMessageKind.ChannelError: {
276
+ const maybeSubject = channelsSubject.get(message.name);
277
+ if (maybeSubject) {
278
+ maybeSubject.error(message.error);
279
+ channelsSubject.delete(message.name);
280
+ }
281
+ break;
282
+ }
283
+ }
284
+ }, () => {
285
+ state = api_1.JobState.Errored;
286
+ }),
287
+ // Do output validation (might include default values so this might have side
288
+ // effects). We keep all messages in order.
289
+ (0, rxjs_1.concatMap)((message) => {
290
+ if (message.kind !== api_1.JobOutboundMessageKind.Output) {
291
+ return (0, rxjs_1.of)(message);
292
+ }
293
+ return handler.pipe((0, rxjs_1.switchMap)(async (handler) => {
294
+ if (handler === null) {
295
+ throw new exception_1.JobDoesNotExistException(name);
296
+ }
297
+ const validate = await handler.outputV;
298
+ const output = await validate(message.value);
299
+ if (!output.success) {
300
+ throw new JobOutputSchemaValidationError(output.errors);
301
+ }
302
+ return {
303
+ ...message,
304
+ output: output.data,
305
+ };
306
+ }));
307
+ }), _jobShare());
308
+ const output = outboundBus.pipe((0, rxjs_1.filter)((x) => x.kind == api_1.JobOutboundMessageKind.Output), (0, rxjs_1.map)((x) => x.value), (0, rxjs_1.shareReplay)(1));
309
+ // Return the Job.
310
+ return {
311
+ get state() {
312
+ return state;
313
+ },
314
+ argument,
315
+ description: handler.pipe((0, rxjs_1.switchMap)((handler) => {
316
+ if (handler === null) {
317
+ throw new exception_1.JobDoesNotExistException(name);
318
+ }
319
+ else {
320
+ return (0, rxjs_1.of)(handler.jobDescription);
321
+ }
322
+ })),
323
+ output,
324
+ getChannel(name, schema = true) {
325
+ let maybeObservable = channels.get(name);
326
+ if (!maybeObservable) {
327
+ const s = new rxjs_1.Subject();
328
+ channelsSubject.set(name, s);
329
+ channels.set(name, s.asObservable());
330
+ maybeObservable = s.asObservable();
331
+ }
332
+ return maybeObservable.pipe(
333
+ // Keep the order of messages.
334
+ (0, rxjs_1.concatMap)((message) => {
335
+ return (0, rxjs_1.from)(schemaRegistry.compile(schema)).pipe((0, rxjs_1.switchMap)((validate) => validate(message)), (0, rxjs_1.filter)((x) => x.success), (0, rxjs_1.map)((x) => x.data));
336
+ }));
337
+ },
338
+ ping() {
339
+ const id = pingId++;
340
+ inboundBus.next({ kind: api_1.JobInboundMessageKind.Ping, id });
341
+ return outboundBus.pipe((0, rxjs_1.filter)((x) => x.kind === api_1.JobOutboundMessageKind.Pong && x.id == id), (0, rxjs_1.first)(), (0, rxjs_1.ignoreElements)());
342
+ },
343
+ stop() {
344
+ inboundBus.next({ kind: api_1.JobInboundMessageKind.Stop });
345
+ },
346
+ input,
347
+ inboundBus,
348
+ outboundBus,
349
+ };
350
+ }
351
+ _scheduleJob(name, argument, options, waitable) {
352
+ // Get handler first, since this can error out if there's no handler for the job name.
353
+ const handler = this._getInternalDescription(name);
354
+ const optionsDeps = (options && options.dependencies) || [];
355
+ const dependencies = Array.isArray(optionsDeps) ? optionsDeps : [optionsDeps];
356
+ const inboundBus = new rxjs_1.Subject();
357
+ const outboundBus = (0, rxjs_1.concat)(
358
+ // Wait for dependencies, make sure to not report messages from dependencies. Subscribe to
359
+ // all dependencies at the same time so they run concurrently.
360
+ (0, rxjs_1.merge)(...dependencies.map((x) => x.outboundBus)).pipe((0, rxjs_1.ignoreElements)()),
361
+ // Wait for pause() to clear (if necessary).
362
+ waitable, (0, rxjs_1.from)(handler).pipe((0, rxjs_1.switchMap)((handler) => new rxjs_1.Observable((subscriber) => {
363
+ if (!handler) {
364
+ throw new exception_1.JobDoesNotExistException(name);
365
+ }
366
+ // Validate the argument.
367
+ return (0, rxjs_1.from)(handler.argumentV)
368
+ .pipe((0, rxjs_1.switchMap)((validate) => validate(argument)), (0, rxjs_1.switchMap)((output) => {
369
+ if (!output.success) {
370
+ throw new JobArgumentSchemaValidationError(output.errors);
371
+ }
372
+ const argument = output.data;
373
+ const description = handler.jobDescription;
374
+ subscriber.next({ kind: api_1.JobOutboundMessageKind.OnReady, description });
375
+ const context = {
376
+ description,
377
+ dependencies: [...dependencies],
378
+ inboundBus: inboundBus.asObservable(),
379
+ scheduler: this,
380
+ };
381
+ return handler(argument, context);
382
+ }))
383
+ .subscribe(subscriber);
384
+ }))));
385
+ return this._createJob(name, argument, handler, inboundBus, outboundBus);
386
+ }
387
+ }
388
+ exports.SimpleScheduler = SimpleScheduler;
389
+ async function noopSchemaValidator() {
390
+ return async (data) => ({
391
+ data,
392
+ success: true,
393
+ });
394
+ }
395
+ //# sourceMappingURL=simple-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-scheduler.js","sourceRoot":"","sources":["simple-scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.dev/license
7
+ */
8
+ import { JsonValue } from '@angular-devkit/core';
9
+ import { JobDescription, JobHandler } from './api';
10
+ export type JobStrategy<A extends JsonValue = JsonValue, I extends JsonValue = JsonValue, O extends JsonValue = JsonValue> = (handler: JobHandler<A, I, O>, options?: Partial<Readonly<JobDescription>>) => JobHandler<A, I, O>;
11
+ /**
12
+ * Creates a JobStrategy that serializes every call. This strategy can be mixed between jobs.
13
+ */
14
+ export declare function serialize<A extends JsonValue = JsonValue, I extends JsonValue = JsonValue, O extends JsonValue = JsonValue>(): JobStrategy<A, I, O>;
15
+ /**
16
+ * Creates a JobStrategy that will always reuse a running job, and restart it if the job ended.
17
+ * @param replayMessages Replay ALL messages if a job is reused, otherwise just hook up where it
18
+ * is.
19
+ */
20
+ export declare function reuse<A extends JsonValue = JsonValue, I extends JsonValue = JsonValue, O extends JsonValue = JsonValue>(replayMessages?: boolean): JobStrategy<A, I, O>;
21
+ /**
22
+ * Creates a JobStrategy that will reuse a running job if the argument matches.
23
+ * @param replayMessages Replay ALL messages if a job is reused, otherwise just hook up where it
24
+ * is.
25
+ */
26
+ export declare function memoize<A extends JsonValue = JsonValue, I extends JsonValue = JsonValue, O extends JsonValue = JsonValue>(replayMessages?: boolean): JobStrategy<A, I, O>;
@@ -0,0 +1,94 @@
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.dev/license
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.serialize = serialize;
11
+ exports.reuse = reuse;
12
+ exports.memoize = memoize;
13
+ const core_1 = require("@angular-devkit/core");
14
+ const rxjs_1 = require("rxjs");
15
+ const api_1 = require("./api");
16
+ /**
17
+ * Creates a JobStrategy that serializes every call. This strategy can be mixed between jobs.
18
+ */
19
+ function serialize() {
20
+ let latest = (0, rxjs_1.of)();
21
+ return (handler, options) => {
22
+ const newHandler = (argument, context) => {
23
+ const previous = latest;
24
+ latest = (0, rxjs_1.concat)(previous.pipe((0, rxjs_1.ignoreElements)()), new rxjs_1.Observable((o) => handler(argument, context).subscribe(o))).pipe((0, rxjs_1.shareReplay)(0));
25
+ return latest;
26
+ };
27
+ return Object.assign(newHandler, {
28
+ jobDescription: Object.assign({}, handler.jobDescription, options),
29
+ });
30
+ };
31
+ }
32
+ /**
33
+ * Creates a JobStrategy that will always reuse a running job, and restart it if the job ended.
34
+ * @param replayMessages Replay ALL messages if a job is reused, otherwise just hook up where it
35
+ * is.
36
+ */
37
+ function reuse(replayMessages = false) {
38
+ let inboundBus = new rxjs_1.Subject();
39
+ let run = null;
40
+ let state = null;
41
+ return (handler, options) => {
42
+ const newHandler = (argument, context) => {
43
+ // Forward inputs.
44
+ const subscription = context.inboundBus.subscribe(inboundBus);
45
+ if (run) {
46
+ return (0, rxjs_1.concat)(
47
+ // Update state.
48
+ (0, rxjs_1.of)(state), run).pipe((0, rxjs_1.finalize)(() => subscription.unsubscribe()));
49
+ }
50
+ run = handler(argument, { ...context, inboundBus: inboundBus.asObservable() }).pipe((0, rxjs_1.tap)((message) => {
51
+ if (message.kind == api_1.JobOutboundMessageKind.Start ||
52
+ message.kind == api_1.JobOutboundMessageKind.OnReady ||
53
+ message.kind == api_1.JobOutboundMessageKind.End) {
54
+ state = message;
55
+ }
56
+ }, undefined, () => {
57
+ subscription.unsubscribe();
58
+ inboundBus = new rxjs_1.Subject();
59
+ run = null;
60
+ }), replayMessages ? (0, rxjs_1.shareReplay)() : (0, rxjs_1.share)());
61
+ return run;
62
+ };
63
+ return Object.assign(newHandler, handler, options || {});
64
+ };
65
+ }
66
+ /**
67
+ * Creates a JobStrategy that will reuse a running job if the argument matches.
68
+ * @param replayMessages Replay ALL messages if a job is reused, otherwise just hook up where it
69
+ * is.
70
+ */
71
+ function memoize(replayMessages = false) {
72
+ const runs = new Map();
73
+ return (handler, options) => {
74
+ const newHandler = (argument, context) => {
75
+ const argumentJson = JSON.stringify((0, core_1.isJsonObject)(argument)
76
+ ? Object.keys(argument)
77
+ .sort()
78
+ .reduce((result, key) => {
79
+ result[key] = argument[key];
80
+ return result;
81
+ }, {})
82
+ : argument);
83
+ const maybeJob = runs.get(argumentJson);
84
+ if (maybeJob) {
85
+ return maybeJob;
86
+ }
87
+ const run = handler(argument, context).pipe(replayMessages ? (0, rxjs_1.shareReplay)() : (0, rxjs_1.share)());
88
+ runs.set(argumentJson, run);
89
+ return run;
90
+ };
91
+ return Object.assign(newHandler, handler, options || {});
92
+ };
93
+ }
94
+ //# sourceMappingURL=strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.dev/license
7
+ */
8
+ export type DeepReadonly<T> = T extends (infer R)[] ? DeepReadonlyArray<R> : T extends Function ? T : T extends object ? DeepReadonlyObject<T> : T;
9
+ export type DeepReadonlyArray<T> = Array<DeepReadonly<T>>;
10
+ export type DeepReadonlyObject<T> = {
11
+ readonly [P in keyof T]: DeepReadonly<T[P]>;
12
+ };
13
+ export type Readwrite<T> = {
14
+ -readonly [P in keyof T]: T[P];
15
+ };
@@ -0,0 +1,10 @@
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.dev/license
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.dev/license
7
+ */
8
+ import { json } from '@angular-devkit/core';
9
+ import { BuilderInput } from './api';
10
+ type OverrideOptions = BuilderInput['options'];
11
+ export declare function mergeOptions(baseOptions: json.JsonObject, overrideOptions: OverrideOptions): json.JsonObject;
12
+ export {};
package/src/options.js ADDED
@@ -0,0 +1,30 @@
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.dev/license
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.mergeOptions = mergeOptions;
11
+ const core_1 = require("@angular-devkit/core");
12
+ function mergeOptions(baseOptions, overrideOptions) {
13
+ if (!overrideOptions) {
14
+ return { ...baseOptions };
15
+ }
16
+ const options = {
17
+ ...baseOptions,
18
+ ...overrideOptions,
19
+ };
20
+ // For object-object overrides, we merge one layer deep.
21
+ for (const key of Object.keys(overrideOptions)) {
22
+ const override = overrideOptions[key];
23
+ const base = baseOptions[key];
24
+ if (core_1.json.isJsonObject(base) && core_1.json.isJsonObject(override)) {
25
+ options[key] = { ...base, ...override };
26
+ }
27
+ }
28
+ return options;
29
+ }
30
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["options.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAQH,oCAwBC;AA9BD,+CAA4C;AAM5C,SAAgB,YAAY,CAC1B,WAA4B,EAC5B,eAAgC;IAEhC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,OAAO,GAAG;QACd,GAAG,WAAW;QACd,GAAG,eAAe;KACnB,CAAC;IAEF,wDAAwD;IACxD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAE9B,IAAI,WAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,WAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,15 @@
1
+ export type Schema = {
2
+ error?: string;
3
+ info?: {
4
+ [key: string]: any;
5
+ };
6
+ success: boolean;
7
+ target?: Target;
8
+ [property: string]: any;
9
+ };
10
+ export type Target = {
11
+ configuration?: string;
12
+ project?: string;
13
+ target?: string;
14
+ [property: string]: any;
15
+ };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ // THIS FILE IS AUTOMATICALLY GENERATED. TO UPDATE THIS FILE YOU NEED TO CHANGE THE
3
+ // CORRESPONDING JSON SCHEMA FILE, THEN RUN devkit-admin build (or bazel build ...).
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ //# sourceMappingURL=output-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-schema.js","sourceRoot":"","sources":["output-schema.ts"],"names":[],"mappings":";AACA,mFAAmF;AACnF,oFAAoF"}