@nx/devkit 0.0.0-pr-22179-271588f
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/LICENSE +22 -0
- package/README.md +68 -0
- package/index.d.ts +14 -0
- package/index.js +18 -0
- package/migrations.json +18 -0
- package/ngcli-adapter.d.ts +4 -0
- package/ngcli-adapter.js +11 -0
- package/nx.d.ts +1 -0
- package/nx.js +19 -0
- package/package.json +50 -0
- package/public-api.d.ts +78 -0
- package/public-api.js +100 -0
- package/src/executors/parse-target-string.d.ts +44 -0
- package/src/executors/parse-target-string.js +55 -0
- package/src/executors/read-target-options.d.ts +8 -0
- package/src/executors/read-target-options.js +38 -0
- package/src/generators/add-build-target-defaults.d.ts +2 -0
- package/src/generators/add-build-target-defaults.js +18 -0
- package/src/generators/artifact-name-and-directory-utils.d.ts +48 -0
- package/src/generators/artifact-name-and-directory-utils.js +239 -0
- package/src/generators/executor-options-utils.d.ts +21 -0
- package/src/generators/executor-options-utils.js +49 -0
- package/src/generators/format-files.d.ts +6 -0
- package/src/generators/format-files.js +91 -0
- package/src/generators/generate-files.d.ts +26 -0
- package/src/generators/generate-files.js +91 -0
- package/src/generators/project-name-and-root-utils.d.ts +47 -0
- package/src/generators/project-name-and-root-utils.js +298 -0
- package/src/generators/run-tasks-in-serial.d.ts +7 -0
- package/src/generators/run-tasks-in-serial.js +16 -0
- package/src/generators/to-js.d.ts +11 -0
- package/src/generators/to-js.js +24 -0
- package/src/generators/typescript/insert-import.d.ts +1 -0
- package/src/generators/typescript/insert-import.js +5 -0
- package/src/generators/typescript/insert-statement.d.ts +1 -0
- package/src/generators/typescript/insert-statement.js +5 -0
- package/src/generators/update-ts-configs-to-js.d.ts +4 -0
- package/src/generators/update-ts-configs-to-js.js +49 -0
- package/src/generators/visit-not-ignored-files.d.ts +5 -0
- package/src/generators/visit-not-ignored-files.js +41 -0
- package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.d.ts +2 -0
- package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js +9 -0
- package/src/migrations/update-16-9-0/migrate-mf-util-usage.d.ts +4 -0
- package/src/migrations/update-16-9-0/migrate-mf-util-usage.js +201 -0
- package/src/tasks/install-packages-task.d.ts +10 -0
- package/src/tasks/install-packages-task.js +41 -0
- package/src/utils/async-iterable/combine-async-iterables.d.ts +3 -0
- package/src/utils/async-iterable/combine-async-iterables.js +58 -0
- package/src/utils/async-iterable/create-async-iterable.d.ts +6 -0
- package/src/utils/async-iterable/create-async-iterable.js +58 -0
- package/src/utils/async-iterable/index.d.ts +4 -0
- package/src/utils/async-iterable/index.js +7 -0
- package/src/utils/async-iterable/map-async-iteratable.d.ts +1 -0
- package/src/utils/async-iterable/map-async-iteratable.js +18 -0
- package/src/utils/async-iterable/tap-async-iteratable.d.ts +1 -0
- package/src/utils/async-iterable/tap-async-iteratable.js +11 -0
- package/src/utils/binary-extensions.d.ts +1 -0
- package/src/utils/binary-extensions.js +275 -0
- package/src/utils/calculate-hash-for-create-nodes.d.ts +2 -0
- package/src/utils/calculate-hash-for-create-nodes.js +16 -0
- package/src/utils/config-utils.d.ts +4 -0
- package/src/utils/config-utils.js +75 -0
- package/src/utils/convert-nx-executor.d.ts +7 -0
- package/src/utils/convert-nx-executor.js +89 -0
- package/src/utils/get-named-inputs.d.ts +8 -0
- package/src/utils/get-named-inputs.js +26 -0
- package/src/utils/get-workspace-layout.d.ts +24 -0
- package/src/utils/get-workspace-layout.js +52 -0
- package/src/utils/invoke-nx-generator.d.ts +6 -0
- package/src/utils/invoke-nx-generator.js +172 -0
- package/src/utils/log-show-project-command.d.ts +1 -0
- package/src/utils/log-show-project-command.js +14 -0
- package/src/utils/move-dir.d.ts +5 -0
- package/src/utils/move-dir.js +28 -0
- package/src/utils/names.d.ts +18 -0
- package/src/utils/names.js +63 -0
- package/src/utils/offset-from-root.d.ts +13 -0
- package/src/utils/offset-from-root.js +29 -0
- package/src/utils/package-json.d.ts +78 -0
- package/src/utils/package-json.js +375 -0
- package/src/utils/replace-package.d.ts +2 -0
- package/src/utils/replace-package.js +125 -0
- package/src/utils/replace-project-configuration-with-plugin.d.ts +3 -0
- package/src/utils/replace-project-configuration-with-plugin.js +136 -0
- package/src/utils/rxjs-for-await.d.ts +109 -0
- package/src/utils/rxjs-for-await.js +363 -0
- package/src/utils/semver.d.ts +1 -0
- package/src/utils/semver.js +18 -0
- package/src/utils/string-change.d.ts +62 -0
- package/src/utils/string-change.js +109 -0
- package/src/utils/string-utils.d.ts +95 -0
- package/src/utils/string-utils.js +147 -0
- package/src/utils/update-package-scripts.d.ts +3 -0
- package/src/utils/update-package-scripts.js +175 -0
- package/src/utils/versions.d.ts +1 -0
- package/src/utils/versions.js +4 -0
- package/testing.d.ts +1 -0
- package/testing.js +5 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { Observable } from 'rxjs';
|
|
2
|
+
export declare class Deferred<T> {
|
|
3
|
+
resolve: (value: T | PromiseLike<T>) => void;
|
|
4
|
+
reject: (reason?: any) => void;
|
|
5
|
+
promise: Promise<T>;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Will subscribe to the `source` observable provided,
|
|
9
|
+
*
|
|
10
|
+
* Allowing a `for await..of` loop to iterate over every
|
|
11
|
+
* value that the source emits.
|
|
12
|
+
*
|
|
13
|
+
* **WARNING**: If the async loop is slower than the observable
|
|
14
|
+
* producing values, the values will build up in a buffer
|
|
15
|
+
* and you could experience an out of memory error.
|
|
16
|
+
*
|
|
17
|
+
* This is a lossless subscription method. No value
|
|
18
|
+
* will be missed or duplicated.
|
|
19
|
+
*
|
|
20
|
+
* Example usage:
|
|
21
|
+
*
|
|
22
|
+
* ```ts
|
|
23
|
+
* async function test() {
|
|
24
|
+
* const source$ = getSomeObservable();
|
|
25
|
+
*
|
|
26
|
+
* for await(const value of eachValueFrom(source$)) {
|
|
27
|
+
* console.log(value);
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @param source the Observable source to await values from
|
|
33
|
+
*/
|
|
34
|
+
export declare function eachValueFrom<T>(source: Observable<T>): AsyncIterableIterator<T>;
|
|
35
|
+
/**
|
|
36
|
+
* Will subscribe to the `source` observable provided
|
|
37
|
+
* and build the emitted values up in a buffer. Allowing
|
|
38
|
+
* `for await..of` loops to iterate and get the buffer
|
|
39
|
+
* on each loop.
|
|
40
|
+
*
|
|
41
|
+
* This is a lossless subscription method. No value
|
|
42
|
+
* will be missed or duplicated.
|
|
43
|
+
*
|
|
44
|
+
* Example usage:
|
|
45
|
+
*
|
|
46
|
+
* ```ts
|
|
47
|
+
* async function test() {
|
|
48
|
+
* const source$ = getSomeObservable();
|
|
49
|
+
*
|
|
50
|
+
* for await(const buffer of bufferedValuesFrom(source$)) {
|
|
51
|
+
* for (const value of buffer) {
|
|
52
|
+
* console.log(value);
|
|
53
|
+
* }
|
|
54
|
+
* }
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* @param source the Observable source to await values from
|
|
59
|
+
*/
|
|
60
|
+
export declare function bufferedValuesFrom<T>(source: Observable<T>): AsyncGenerator<T[]>;
|
|
61
|
+
/**
|
|
62
|
+
* Will subscribe to the provided `source` observable,
|
|
63
|
+
* allowing `for await..of` loops to iterate and get the
|
|
64
|
+
* most recent value that was emitted. Will not iterate out
|
|
65
|
+
* the same emission twice.
|
|
66
|
+
*
|
|
67
|
+
* This is a lossy subscription method. Do not use if
|
|
68
|
+
* every value is important.
|
|
69
|
+
*
|
|
70
|
+
* Example usage:
|
|
71
|
+
*
|
|
72
|
+
* ```ts
|
|
73
|
+
* async function test() {
|
|
74
|
+
* const source$ = getSomeObservable();
|
|
75
|
+
*
|
|
76
|
+
* for await(const value of latestValueFrom(source$)) {
|
|
77
|
+
* console.log(value);
|
|
78
|
+
* }
|
|
79
|
+
* }
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* @param source the Observable source to await values from
|
|
83
|
+
*/
|
|
84
|
+
export declare function latestValueFrom<T>(source: Observable<T>): AsyncGenerator<T>;
|
|
85
|
+
/**
|
|
86
|
+
* Subscribes to the provided `source` observable and allows
|
|
87
|
+
* `for await..of` loops to iterate over it, such that
|
|
88
|
+
* all values are dropped until the iteration occurs, then
|
|
89
|
+
* the very next value that arrives is provided to the
|
|
90
|
+
* `for await` loop.
|
|
91
|
+
*
|
|
92
|
+
* This is a lossy subscription method. Do not use if
|
|
93
|
+
* every value is important.
|
|
94
|
+
*
|
|
95
|
+
* Example usage:
|
|
96
|
+
*
|
|
97
|
+
* ```ts
|
|
98
|
+
* async function test() {
|
|
99
|
+
* const source$ = getSomeObservable();
|
|
100
|
+
*
|
|
101
|
+
* for await(const value of nextValueFrom(source$)) {
|
|
102
|
+
* console.log(value);
|
|
103
|
+
* }
|
|
104
|
+
* }
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @param source the Observable source to await values from
|
|
108
|
+
*/
|
|
109
|
+
export declare function nextValueFrom<T>(source: Observable<T>): AsyncGenerator<T, void, void>;
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Remove this if https://github.com/benlesh/rxjs-for-await/issues/15 is addressed
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.nextValueFrom = exports.latestValueFrom = exports.bufferedValuesFrom = exports.eachValueFrom = exports.Deferred = void 0;
|
|
5
|
+
class Deferred {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.resolve = null;
|
|
8
|
+
this.reject = null;
|
|
9
|
+
this.promise = new Promise((a, b) => {
|
|
10
|
+
this.resolve = a;
|
|
11
|
+
this.reject = b;
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.Deferred = Deferred;
|
|
16
|
+
const RESOLVED = Promise.resolve();
|
|
17
|
+
/**
|
|
18
|
+
* Will subscribe to the `source` observable provided,
|
|
19
|
+
*
|
|
20
|
+
* Allowing a `for await..of` loop to iterate over every
|
|
21
|
+
* value that the source emits.
|
|
22
|
+
*
|
|
23
|
+
* **WARNING**: If the async loop is slower than the observable
|
|
24
|
+
* producing values, the values will build up in a buffer
|
|
25
|
+
* and you could experience an out of memory error.
|
|
26
|
+
*
|
|
27
|
+
* This is a lossless subscription method. No value
|
|
28
|
+
* will be missed or duplicated.
|
|
29
|
+
*
|
|
30
|
+
* Example usage:
|
|
31
|
+
*
|
|
32
|
+
* ```ts
|
|
33
|
+
* async function test() {
|
|
34
|
+
* const source$ = getSomeObservable();
|
|
35
|
+
*
|
|
36
|
+
* for await(const value of eachValueFrom(source$)) {
|
|
37
|
+
* console.log(value);
|
|
38
|
+
* }
|
|
39
|
+
* }
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @param source the Observable source to await values from
|
|
43
|
+
*/
|
|
44
|
+
async function* eachValueFrom(source) {
|
|
45
|
+
const deferreds = [];
|
|
46
|
+
const values = [];
|
|
47
|
+
let hasError = false;
|
|
48
|
+
let error = null;
|
|
49
|
+
let completed = false;
|
|
50
|
+
const subs = source.subscribe({
|
|
51
|
+
next: (value) => {
|
|
52
|
+
if (deferreds.length > 0) {
|
|
53
|
+
deferreds.shift().resolve({ value, done: false });
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
values.push(value);
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
error: (err) => {
|
|
60
|
+
hasError = true;
|
|
61
|
+
error = err;
|
|
62
|
+
while (deferreds.length > 0) {
|
|
63
|
+
deferreds.shift().reject(err);
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
complete: () => {
|
|
67
|
+
completed = true;
|
|
68
|
+
while (deferreds.length > 0) {
|
|
69
|
+
deferreds.shift().resolve({ value: undefined, done: true });
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
try {
|
|
74
|
+
while (true) {
|
|
75
|
+
if (values.length > 0) {
|
|
76
|
+
yield values.shift();
|
|
77
|
+
}
|
|
78
|
+
else if (completed) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
else if (hasError) {
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const d = new Deferred();
|
|
86
|
+
deferreds.push(d);
|
|
87
|
+
const result = await d.promise;
|
|
88
|
+
if (result.done) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
yield result.value;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
throw err;
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
subs.unsubscribe();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.eachValueFrom = eachValueFrom;
|
|
105
|
+
/**
|
|
106
|
+
* Will subscribe to the `source` observable provided
|
|
107
|
+
* and build the emitted values up in a buffer. Allowing
|
|
108
|
+
* `for await..of` loops to iterate and get the buffer
|
|
109
|
+
* on each loop.
|
|
110
|
+
*
|
|
111
|
+
* This is a lossless subscription method. No value
|
|
112
|
+
* will be missed or duplicated.
|
|
113
|
+
*
|
|
114
|
+
* Example usage:
|
|
115
|
+
*
|
|
116
|
+
* ```ts
|
|
117
|
+
* async function test() {
|
|
118
|
+
* const source$ = getSomeObservable();
|
|
119
|
+
*
|
|
120
|
+
* for await(const buffer of bufferedValuesFrom(source$)) {
|
|
121
|
+
* for (const value of buffer) {
|
|
122
|
+
* console.log(value);
|
|
123
|
+
* }
|
|
124
|
+
* }
|
|
125
|
+
* }
|
|
126
|
+
* ```
|
|
127
|
+
*
|
|
128
|
+
* @param source the Observable source to await values from
|
|
129
|
+
*/
|
|
130
|
+
async function* bufferedValuesFrom(source) {
|
|
131
|
+
let deferred = null;
|
|
132
|
+
const buffer = [];
|
|
133
|
+
let hasError = false;
|
|
134
|
+
let error = null;
|
|
135
|
+
let completed = false;
|
|
136
|
+
const subs = source.subscribe({
|
|
137
|
+
next: (value) => {
|
|
138
|
+
if (deferred) {
|
|
139
|
+
deferred.resolve(RESOLVED.then(() => {
|
|
140
|
+
const bufferCopy = buffer.slice();
|
|
141
|
+
buffer.length = 0;
|
|
142
|
+
return { value: bufferCopy, done: false };
|
|
143
|
+
}));
|
|
144
|
+
deferred = null;
|
|
145
|
+
}
|
|
146
|
+
buffer.push(value);
|
|
147
|
+
},
|
|
148
|
+
error: (err) => {
|
|
149
|
+
hasError = true;
|
|
150
|
+
error = err;
|
|
151
|
+
if (deferred) {
|
|
152
|
+
deferred.reject(err);
|
|
153
|
+
deferred = null;
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
complete: () => {
|
|
157
|
+
completed = true;
|
|
158
|
+
if (deferred) {
|
|
159
|
+
deferred.resolve({ value: undefined, done: true });
|
|
160
|
+
deferred = null;
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
try {
|
|
165
|
+
while (true) {
|
|
166
|
+
if (buffer.length > 0) {
|
|
167
|
+
const bufferCopy = buffer.slice();
|
|
168
|
+
buffer.length = 0;
|
|
169
|
+
yield bufferCopy;
|
|
170
|
+
}
|
|
171
|
+
else if (completed) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
else if (hasError) {
|
|
175
|
+
throw error;
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
deferred = new Deferred();
|
|
179
|
+
const result = await deferred.promise;
|
|
180
|
+
if (result.done) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
yield result.value;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
throw err;
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
subs.unsubscribe();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
exports.bufferedValuesFrom = bufferedValuesFrom;
|
|
197
|
+
/**
|
|
198
|
+
* Will subscribe to the provided `source` observable,
|
|
199
|
+
* allowing `for await..of` loops to iterate and get the
|
|
200
|
+
* most recent value that was emitted. Will not iterate out
|
|
201
|
+
* the same emission twice.
|
|
202
|
+
*
|
|
203
|
+
* This is a lossy subscription method. Do not use if
|
|
204
|
+
* every value is important.
|
|
205
|
+
*
|
|
206
|
+
* Example usage:
|
|
207
|
+
*
|
|
208
|
+
* ```ts
|
|
209
|
+
* async function test() {
|
|
210
|
+
* const source$ = getSomeObservable();
|
|
211
|
+
*
|
|
212
|
+
* for await(const value of latestValueFrom(source$)) {
|
|
213
|
+
* console.log(value);
|
|
214
|
+
* }
|
|
215
|
+
* }
|
|
216
|
+
* ```
|
|
217
|
+
*
|
|
218
|
+
* @param source the Observable source to await values from
|
|
219
|
+
*/
|
|
220
|
+
async function* latestValueFrom(source) {
|
|
221
|
+
let deferred = undefined;
|
|
222
|
+
let latestValue;
|
|
223
|
+
let hasLatestValue = false;
|
|
224
|
+
let hasError = false;
|
|
225
|
+
let error = null;
|
|
226
|
+
let completed = false;
|
|
227
|
+
const subs = source.subscribe({
|
|
228
|
+
next: (value) => {
|
|
229
|
+
hasLatestValue = true;
|
|
230
|
+
latestValue = value;
|
|
231
|
+
if (deferred) {
|
|
232
|
+
deferred.resolve(RESOLVED.then(() => {
|
|
233
|
+
hasLatestValue = false;
|
|
234
|
+
return { value: latestValue, done: false };
|
|
235
|
+
}));
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
error: (err) => {
|
|
239
|
+
hasError = true;
|
|
240
|
+
error = err;
|
|
241
|
+
if (deferred) {
|
|
242
|
+
deferred.reject(err);
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
complete: () => {
|
|
246
|
+
completed = true;
|
|
247
|
+
if (deferred) {
|
|
248
|
+
hasLatestValue = false;
|
|
249
|
+
deferred.resolve({ value: undefined, done: true });
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
});
|
|
253
|
+
try {
|
|
254
|
+
while (true) {
|
|
255
|
+
if (hasLatestValue) {
|
|
256
|
+
await RESOLVED;
|
|
257
|
+
const value = latestValue;
|
|
258
|
+
hasLatestValue = false;
|
|
259
|
+
yield value;
|
|
260
|
+
}
|
|
261
|
+
else if (completed) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
else if (hasError) {
|
|
265
|
+
throw error;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
deferred = new Deferred();
|
|
269
|
+
const result = await deferred.promise;
|
|
270
|
+
if (result.done) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
yield result.value;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
throw err;
|
|
281
|
+
}
|
|
282
|
+
finally {
|
|
283
|
+
subs.unsubscribe();
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
exports.latestValueFrom = latestValueFrom;
|
|
287
|
+
/**
|
|
288
|
+
* Subscribes to the provided `source` observable and allows
|
|
289
|
+
* `for await..of` loops to iterate over it, such that
|
|
290
|
+
* all values are dropped until the iteration occurs, then
|
|
291
|
+
* the very next value that arrives is provided to the
|
|
292
|
+
* `for await` loop.
|
|
293
|
+
*
|
|
294
|
+
* This is a lossy subscription method. Do not use if
|
|
295
|
+
* every value is important.
|
|
296
|
+
*
|
|
297
|
+
* Example usage:
|
|
298
|
+
*
|
|
299
|
+
* ```ts
|
|
300
|
+
* async function test() {
|
|
301
|
+
* const source$ = getSomeObservable();
|
|
302
|
+
*
|
|
303
|
+
* for await(const value of nextValueFrom(source$)) {
|
|
304
|
+
* console.log(value);
|
|
305
|
+
* }
|
|
306
|
+
* }
|
|
307
|
+
* ```
|
|
308
|
+
*
|
|
309
|
+
* @param source the Observable source to await values from
|
|
310
|
+
*/
|
|
311
|
+
async function* nextValueFrom(source) {
|
|
312
|
+
let deferred = undefined;
|
|
313
|
+
let hasError = false;
|
|
314
|
+
let error = null;
|
|
315
|
+
let completed = false;
|
|
316
|
+
const subs = source.subscribe({
|
|
317
|
+
next: (value) => {
|
|
318
|
+
if (deferred) {
|
|
319
|
+
deferred.resolve({ value, done: false });
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
error: (err) => {
|
|
323
|
+
hasError = true;
|
|
324
|
+
error = err;
|
|
325
|
+
if (deferred) {
|
|
326
|
+
deferred.reject(err);
|
|
327
|
+
}
|
|
328
|
+
},
|
|
329
|
+
complete: () => {
|
|
330
|
+
completed = true;
|
|
331
|
+
if (deferred) {
|
|
332
|
+
deferred.resolve({ value: undefined, done: true });
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
});
|
|
336
|
+
try {
|
|
337
|
+
while (true) {
|
|
338
|
+
if (completed) {
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
else if (hasError) {
|
|
342
|
+
throw error;
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
deferred = new Deferred();
|
|
346
|
+
const result = await deferred.promise;
|
|
347
|
+
if (result.done) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
yield result.value;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
catch (err) {
|
|
357
|
+
throw err;
|
|
358
|
+
}
|
|
359
|
+
finally {
|
|
360
|
+
subs.unsubscribe();
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
exports.nextValueFrom = nextValueFrom;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function checkAndCleanWithSemver(pkgName: string, version: string): string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkAndCleanWithSemver = void 0;
|
|
4
|
+
const semver_1 = require("semver");
|
|
5
|
+
function checkAndCleanWithSemver(pkgName, version) {
|
|
6
|
+
let newVersion = version;
|
|
7
|
+
if ((0, semver_1.valid)(newVersion)) {
|
|
8
|
+
return newVersion;
|
|
9
|
+
}
|
|
10
|
+
if (version.startsWith('~') || version.startsWith('^')) {
|
|
11
|
+
newVersion = version.substring(1);
|
|
12
|
+
}
|
|
13
|
+
if (!(0, semver_1.valid)(newVersion)) {
|
|
14
|
+
throw new Error(`The package.json lists a version of ${pkgName} that Nx is unable to validate - (${version})`);
|
|
15
|
+
}
|
|
16
|
+
return newVersion;
|
|
17
|
+
}
|
|
18
|
+
exports.checkAndCleanWithSemver = checkAndCleanWithSemver;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export declare enum ChangeType {
|
|
2
|
+
Delete = "Delete",
|
|
3
|
+
Insert = "Insert"
|
|
4
|
+
}
|
|
5
|
+
export interface StringDeletion {
|
|
6
|
+
type: ChangeType.Delete;
|
|
7
|
+
/**
|
|
8
|
+
* Place in the original text to start deleting characters
|
|
9
|
+
*/
|
|
10
|
+
start: number;
|
|
11
|
+
/**
|
|
12
|
+
* Number of characters to delete
|
|
13
|
+
*/
|
|
14
|
+
length: number;
|
|
15
|
+
}
|
|
16
|
+
export interface StringInsertion {
|
|
17
|
+
type: ChangeType.Insert;
|
|
18
|
+
/**
|
|
19
|
+
* Text to insert into the original text
|
|
20
|
+
*/
|
|
21
|
+
text: string;
|
|
22
|
+
/**
|
|
23
|
+
* Place in the original text to insert new text
|
|
24
|
+
*/
|
|
25
|
+
index: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A change to be made to a string
|
|
29
|
+
*/
|
|
30
|
+
export type StringChange = StringInsertion | StringDeletion;
|
|
31
|
+
/**
|
|
32
|
+
* Applies a list of changes to a string's original value.
|
|
33
|
+
*
|
|
34
|
+
* This is useful when working with ASTs.
|
|
35
|
+
*
|
|
36
|
+
* For Example, to rename a property in a method's options:
|
|
37
|
+
*
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const code = `bootstrap({
|
|
40
|
+
* target: document.querySelector('#app')
|
|
41
|
+
* })`;
|
|
42
|
+
*
|
|
43
|
+
* const indexOfPropertyName = 13; // Usually determined by analyzing an AST.
|
|
44
|
+
* const updatedCode = applyChangesToString(code, [
|
|
45
|
+
* {
|
|
46
|
+
* type: ChangeType.Insert,
|
|
47
|
+
* index: indexOfPropertyName,
|
|
48
|
+
* text: 'element'
|
|
49
|
+
* },
|
|
50
|
+
* {
|
|
51
|
+
* type: ChangeType.Delete,
|
|
52
|
+
* start: indexOfPropertyName,
|
|
53
|
+
* length: 6
|
|
54
|
+
* },
|
|
55
|
+
* ]);
|
|
56
|
+
*
|
|
57
|
+
* bootstrap({
|
|
58
|
+
* element: document.querySelector('#app')
|
|
59
|
+
* });
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function applyChangesToString(text: string, changes: StringChange[]): string;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyChangesToString = exports.ChangeType = void 0;
|
|
4
|
+
var ChangeType;
|
|
5
|
+
(function (ChangeType) {
|
|
6
|
+
ChangeType["Delete"] = "Delete";
|
|
7
|
+
ChangeType["Insert"] = "Insert";
|
|
8
|
+
})(ChangeType || (exports.ChangeType = ChangeType = {}));
|
|
9
|
+
/**
|
|
10
|
+
* Applies a list of changes to a string's original value.
|
|
11
|
+
*
|
|
12
|
+
* This is useful when working with ASTs.
|
|
13
|
+
*
|
|
14
|
+
* For Example, to rename a property in a method's options:
|
|
15
|
+
*
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const code = `bootstrap({
|
|
18
|
+
* target: document.querySelector('#app')
|
|
19
|
+
* })`;
|
|
20
|
+
*
|
|
21
|
+
* const indexOfPropertyName = 13; // Usually determined by analyzing an AST.
|
|
22
|
+
* const updatedCode = applyChangesToString(code, [
|
|
23
|
+
* {
|
|
24
|
+
* type: ChangeType.Insert,
|
|
25
|
+
* index: indexOfPropertyName,
|
|
26
|
+
* text: 'element'
|
|
27
|
+
* },
|
|
28
|
+
* {
|
|
29
|
+
* type: ChangeType.Delete,
|
|
30
|
+
* start: indexOfPropertyName,
|
|
31
|
+
* length: 6
|
|
32
|
+
* },
|
|
33
|
+
* ]);
|
|
34
|
+
*
|
|
35
|
+
* bootstrap({
|
|
36
|
+
* element: document.querySelector('#app')
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
function applyChangesToString(text, changes) {
|
|
41
|
+
assertChangesValid(changes);
|
|
42
|
+
const sortedChanges = changes.sort((a, b) => {
|
|
43
|
+
const diff = getChangeIndex(a) - getChangeIndex(b);
|
|
44
|
+
if (diff === 0) {
|
|
45
|
+
if (a.type === b.type) {
|
|
46
|
+
return 0;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// When at the same place, Insert before Delete
|
|
50
|
+
return isStringInsertion(a) ? -1 : 1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return diff;
|
|
54
|
+
});
|
|
55
|
+
let offset = 0;
|
|
56
|
+
for (const change of sortedChanges) {
|
|
57
|
+
const index = getChangeIndex(change) + offset;
|
|
58
|
+
if (isStringInsertion(change)) {
|
|
59
|
+
text = text.slice(0, index) + change.text + text.slice(index);
|
|
60
|
+
offset += change.text.length;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
text = text.slice(0, index) + text.slice(index + change.length);
|
|
64
|
+
offset -= change.length;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return text;
|
|
68
|
+
}
|
|
69
|
+
exports.applyChangesToString = applyChangesToString;
|
|
70
|
+
function assertChangesValid(changes) {
|
|
71
|
+
for (const change of changes) {
|
|
72
|
+
if (isStringInsertion(change)) {
|
|
73
|
+
if (!Number.isInteger(change.index)) {
|
|
74
|
+
throw new TypeError(`${change.index} must be an integer.`);
|
|
75
|
+
}
|
|
76
|
+
if (change.index < 0) {
|
|
77
|
+
throw new Error(`${change.index} must be a positive integer.`);
|
|
78
|
+
}
|
|
79
|
+
if (typeof change.text !== 'string') {
|
|
80
|
+
throw new Error(`${change.text} must be a string.`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
if (!Number.isInteger(change.start)) {
|
|
85
|
+
throw new TypeError(`${change.start} must be an integer.`);
|
|
86
|
+
}
|
|
87
|
+
if (change.start < 0) {
|
|
88
|
+
throw new Error(`${change.start} must be a positive integer.`);
|
|
89
|
+
}
|
|
90
|
+
if (!Number.isInteger(change.length)) {
|
|
91
|
+
throw new TypeError(`${change.length} must be an integer.`);
|
|
92
|
+
}
|
|
93
|
+
if (change.length < 0) {
|
|
94
|
+
throw new Error(`${change.length} must be a positive integer.`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function getChangeIndex(change) {
|
|
100
|
+
if (isStringInsertion(change)) {
|
|
101
|
+
return change.index;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
return change.start;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function isStringInsertion(change) {
|
|
108
|
+
return change.type === ChangeType.Insert;
|
|
109
|
+
}
|