@depup/angular-devkit__core 21.2.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.
- package/LICENSE +21 -0
- package/README.md +25 -0
- package/changes.json +5 -0
- package/index.d.ts +8 -0
- package/index.js +25 -0
- package/index.js.map +1 -0
- package/node/cli-logger.d.ts +15 -0
- package/node/cli-logger.js +58 -0
- package/node/cli-logger.js.map +1 -0
- package/node/host.d.ts +43 -0
- package/node/host.js +211 -0
- package/node/host.js.map +1 -0
- package/node/index.d.ts +9 -0
- package/node/index.js +26 -0
- package/node/index.js.map +1 -0
- package/node/testing/index.d.ts +20 -0
- package/node/testing/index.js +90 -0
- package/node/testing/index.js.map +1 -0
- package/package.json +76 -0
- package/src/exception.d.ts +25 -0
- package/src/exception.js +48 -0
- package/src/exception.js.map +1 -0
- package/src/index.d.ts +15 -0
- package/src/index.js +57 -0
- package/src/index.js.map +1 -0
- package/src/json/index.d.ts +10 -0
- package/src/json/index.js +50 -0
- package/src/json/index.js.map +1 -0
- package/src/json/schema/index.d.ts +15 -0
- package/src/json/schema/index.js +55 -0
- package/src/json/schema/index.js.map +1 -0
- package/src/json/schema/interface.d.ts +84 -0
- package/src/json/schema/interface.js +10 -0
- package/src/json/schema/interface.js.map +1 -0
- package/src/json/schema/pointer.d.ts +11 -0
- package/src/json/schema/pointer.js +39 -0
- package/src/json/schema/pointer.js.map +1 -0
- package/src/json/schema/registry.d.ts +79 -0
- package/src/json/schema/registry.js +565 -0
- package/src/json/schema/registry.js.map +1 -0
- package/src/json/schema/schema.d.ts +22 -0
- package/src/json/schema/schema.js +52 -0
- package/src/json/schema/schema.js.map +1 -0
- package/src/json/schema/transforms.d.ts +12 -0
- package/src/json/schema/transforms.js +101 -0
- package/src/json/schema/transforms.js.map +1 -0
- package/src/json/schema/utility.d.ts +9 -0
- package/src/json/schema/utility.js +88 -0
- package/src/json/schema/utility.js.map +1 -0
- package/src/json/schema/visitor.d.ts +34 -0
- package/src/json/schema/visitor.js +147 -0
- package/src/json/schema/visitor.js.map +1 -0
- package/src/json/utils.d.ts +15 -0
- package/src/json/utils.js +18 -0
- package/src/json/utils.js.map +1 -0
- package/src/logger/indent.d.ts +11 -0
- package/src/logger/indent.js +41 -0
- package/src/logger/indent.js.map +1 -0
- package/src/logger/index.d.ts +12 -0
- package/src/logger/index.js +29 -0
- package/src/logger/index.js.map +1 -0
- package/src/logger/level.d.ts +28 -0
- package/src/logger/level.js +51 -0
- package/src/logger/level.js.map +1 -0
- package/src/logger/logger.d.ts +55 -0
- package/src/logger/logger.js +123 -0
- package/src/logger/logger.js.map +1 -0
- package/src/logger/null-logger.d.ts +12 -0
- package/src/logger/null-logger.js +31 -0
- package/src/logger/null-logger.js.map +1 -0
- package/src/logger/transform-logger.d.ts +12 -0
- package/src/logger/transform-logger.js +19 -0
- package/src/logger/transform-logger.js.map +1 -0
- package/src/utils/index.d.ts +15 -0
- package/src/utils/index.js +56 -0
- package/src/utils/index.js.map +1 -0
- package/src/utils/lang.d.ts +11 -0
- package/src/utils/lang.js +21 -0
- package/src/utils/lang.js.map +1 -0
- package/src/utils/literals.d.ts +15 -0
- package/src/utils/literals.js +59 -0
- package/src/utils/literals.js.map +1 -0
- package/src/utils/object.d.ts +8 -0
- package/src/utils/object.js +37 -0
- package/src/utils/object.js.map +1 -0
- package/src/utils/partially-ordered-set.d.ts +38 -0
- package/src/utils/partially-ordered-set.js +145 -0
- package/src/utils/partially-ordered-set.js.map +1 -0
- package/src/utils/priority-queue.d.ts +19 -0
- package/src/utils/priority-queue.js +50 -0
- package/src/utils/priority-queue.js.map +1 -0
- package/src/utils/strings.d.ts +112 -0
- package/src/utils/strings.js +179 -0
- package/src/utils/strings.js.map +1 -0
- package/src/utils/template.d.ts +89 -0
- package/src/utils/template.js +260 -0
- package/src/utils/template.js.map +1 -0
- package/src/virtual-fs/host/alias.d.ts +60 -0
- package/src/virtual-fs/host/alias.js +84 -0
- package/src/virtual-fs/host/alias.js.map +1 -0
- package/src/virtual-fs/host/buffer.d.ts +10 -0
- package/src/virtual-fs/host/buffer.js +22 -0
- package/src/virtual-fs/host/buffer.js.map +1 -0
- package/src/virtual-fs/host/create.d.ts +21 -0
- package/src/virtual-fs/host/create.js +55 -0
- package/src/virtual-fs/host/create.js.map +1 -0
- package/src/virtual-fs/host/empty.d.ts +19 -0
- package/src/virtual-fs/host/empty.js +38 -0
- package/src/virtual-fs/host/empty.js.map +1 -0
- package/src/virtual-fs/host/index.d.ts +21 -0
- package/src/virtual-fs/host/index.js +61 -0
- package/src/virtual-fs/host/index.js.map +1 -0
- package/src/virtual-fs/host/interface.d.ts +53 -0
- package/src/virtual-fs/host/interface.js +18 -0
- package/src/virtual-fs/host/interface.js.map +1 -0
- package/src/virtual-fs/host/memory.d.ts +49 -0
- package/src/virtual-fs/host/memory.js +332 -0
- package/src/virtual-fs/host/memory.js.map +1 -0
- package/src/virtual-fs/host/pattern.d.ts +17 -0
- package/src/virtual-fs/host/pattern.js +35 -0
- package/src/virtual-fs/host/pattern.js.map +1 -0
- package/src/virtual-fs/host/record.d.ts +92 -0
- package/src/virtual-fs/host/record.js +315 -0
- package/src/virtual-fs/host/record.js.map +1 -0
- package/src/virtual-fs/host/resolver.d.ts +30 -0
- package/src/virtual-fs/host/resolver.js +57 -0
- package/src/virtual-fs/host/resolver.js.map +1 -0
- package/src/virtual-fs/host/safe.d.ts +25 -0
- package/src/virtual-fs/host/safe.js +46 -0
- package/src/virtual-fs/host/safe.js.map +1 -0
- package/src/virtual-fs/host/scoped.d.ts +15 -0
- package/src/virtual-fs/host/scoped.js +24 -0
- package/src/virtual-fs/host/scoped.js.map +1 -0
- package/src/virtual-fs/host/sync.d.ts +34 -0
- package/src/virtual-fs/host/sync.js +93 -0
- package/src/virtual-fs/host/sync.js.map +1 -0
- package/src/virtual-fs/host/test.d.ts +48 -0
- package/src/virtual-fs/host/test.js +119 -0
- package/src/virtual-fs/host/test.js.map +1 -0
- package/src/virtual-fs/index.d.ts +10 -0
- package/src/virtual-fs/index.js +50 -0
- package/src/virtual-fs/index.js.map +1 -0
- package/src/virtual-fs/path.d.ts +111 -0
- package/src/virtual-fs/path.js +286 -0
- package/src/virtual-fs/path.js.map +1 -0
- package/src/workspace/core.d.ts +61 -0
- package/src/workspace/core.js +133 -0
- package/src/workspace/core.js.map +1 -0
- package/src/workspace/definitions.d.ts +63 -0
- package/src/workspace/definitions.js +169 -0
- package/src/workspace/definitions.js.map +1 -0
- package/src/workspace/host.d.ts +15 -0
- package/src/workspace/host.js +43 -0
- package/src/workspace/host.js.map +1 -0
- package/src/workspace/index.d.ts +10 -0
- package/src/workspace/index.js +32 -0
- package/src/workspace/index.js.map +1 -0
- package/src/workspace/json/metadata.d.ts +40 -0
- package/src/workspace/json/metadata.js +60 -0
- package/src/workspace/json/metadata.js.map +1 -0
- package/src/workspace/json/reader.d.ts +14 -0
- package/src/workspace/json/reader.js +231 -0
- package/src/workspace/json/reader.js.map +1 -0
- package/src/workspace/json/utilities.d.ts +14 -0
- package/src/workspace/json/utilities.js +113 -0
- package/src/workspace/json/utilities.js.map +1 -0
- package/src/workspace/json/writer.d.ts +12 -0
- package/src/workspace/json/writer.js +145 -0
- package/src/workspace/json/writer.js.map +1 -0
|
@@ -0,0 +1,169 @@
|
|
|
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.TargetDefinitionCollection = exports.ProjectDefinitionCollection = void 0;
|
|
11
|
+
class DefinitionCollection {
|
|
12
|
+
_listener;
|
|
13
|
+
_map;
|
|
14
|
+
constructor(initial, _listener) {
|
|
15
|
+
this._listener = _listener;
|
|
16
|
+
this._map = new Map(initial && Object.entries(initial));
|
|
17
|
+
}
|
|
18
|
+
delete(key) {
|
|
19
|
+
const result = this._map.delete(key);
|
|
20
|
+
if (result) {
|
|
21
|
+
this._listener?.(key, undefined, this);
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
set(key, value) {
|
|
26
|
+
const updatedValue = value !== this.get(key);
|
|
27
|
+
if (updatedValue) {
|
|
28
|
+
this._map.set(key, value);
|
|
29
|
+
this._listener?.(key, value, this);
|
|
30
|
+
}
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
forEach(callbackfn, thisArg) {
|
|
34
|
+
this._map.forEach((value, key) => callbackfn(value, key, this), thisArg);
|
|
35
|
+
}
|
|
36
|
+
get(key) {
|
|
37
|
+
return this._map.get(key);
|
|
38
|
+
}
|
|
39
|
+
has(key) {
|
|
40
|
+
return this._map.has(key);
|
|
41
|
+
}
|
|
42
|
+
get size() {
|
|
43
|
+
return this._map.size;
|
|
44
|
+
}
|
|
45
|
+
[Symbol.iterator]() {
|
|
46
|
+
return this._map[Symbol.iterator]();
|
|
47
|
+
}
|
|
48
|
+
entries() {
|
|
49
|
+
return this._map.entries();
|
|
50
|
+
}
|
|
51
|
+
keys() {
|
|
52
|
+
return this._map.keys();
|
|
53
|
+
}
|
|
54
|
+
values() {
|
|
55
|
+
return this._map.values();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function isJsonValue(value) {
|
|
59
|
+
const visited = new Set();
|
|
60
|
+
switch (typeof value) {
|
|
61
|
+
case 'boolean':
|
|
62
|
+
case 'number':
|
|
63
|
+
case 'string':
|
|
64
|
+
return true;
|
|
65
|
+
case 'object':
|
|
66
|
+
if (value === null) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
visited.add(value);
|
|
70
|
+
for (const property of Object.values(value)) {
|
|
71
|
+
if (typeof value === 'object' && visited.has(property)) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (!isJsonValue(property)) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
default:
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
class ProjectDefinitionCollection extends DefinitionCollection {
|
|
84
|
+
constructor(initial, listener) {
|
|
85
|
+
super(initial, listener);
|
|
86
|
+
}
|
|
87
|
+
add(definition) {
|
|
88
|
+
if (this.has(definition.name)) {
|
|
89
|
+
throw new Error('Project name already exists.');
|
|
90
|
+
}
|
|
91
|
+
this._validateName(definition.name);
|
|
92
|
+
const project = {
|
|
93
|
+
root: definition.root,
|
|
94
|
+
prefix: definition.prefix,
|
|
95
|
+
sourceRoot: definition.sourceRoot,
|
|
96
|
+
targets: new TargetDefinitionCollection(),
|
|
97
|
+
extensions: {},
|
|
98
|
+
};
|
|
99
|
+
if (definition.targets) {
|
|
100
|
+
for (const [name, target] of Object.entries(definition.targets)) {
|
|
101
|
+
if (target) {
|
|
102
|
+
project.targets.set(name, target);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
for (const [name, value] of Object.entries(definition)) {
|
|
107
|
+
switch (name) {
|
|
108
|
+
case 'name':
|
|
109
|
+
case 'root':
|
|
110
|
+
case 'sourceRoot':
|
|
111
|
+
case 'prefix':
|
|
112
|
+
case 'targets':
|
|
113
|
+
break;
|
|
114
|
+
default:
|
|
115
|
+
if (isJsonValue(value)) {
|
|
116
|
+
project.extensions[name] = value;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
throw new TypeError(`"${name}" must be a JSON value.`);
|
|
120
|
+
}
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
super.set(definition.name, project);
|
|
125
|
+
return project;
|
|
126
|
+
}
|
|
127
|
+
set(name, value) {
|
|
128
|
+
this._validateName(name);
|
|
129
|
+
super.set(name, value);
|
|
130
|
+
return this;
|
|
131
|
+
}
|
|
132
|
+
_validateName(name) {
|
|
133
|
+
if (typeof name !== 'string' || !/^(?:@\w[\w.-]*\/)?\w[\w.-]*$/.test(name)) {
|
|
134
|
+
throw new Error('Project name must be a valid npm package name.');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.ProjectDefinitionCollection = ProjectDefinitionCollection;
|
|
139
|
+
class TargetDefinitionCollection extends DefinitionCollection {
|
|
140
|
+
constructor(initial, listener) {
|
|
141
|
+
super(initial, listener);
|
|
142
|
+
}
|
|
143
|
+
add(definition) {
|
|
144
|
+
if (this.has(definition.name)) {
|
|
145
|
+
throw new Error('Target name already exists.');
|
|
146
|
+
}
|
|
147
|
+
this._validateName(definition.name);
|
|
148
|
+
const target = {
|
|
149
|
+
builder: definition.builder,
|
|
150
|
+
options: definition.options,
|
|
151
|
+
configurations: definition.configurations,
|
|
152
|
+
defaultConfiguration: definition.defaultConfiguration,
|
|
153
|
+
};
|
|
154
|
+
super.set(definition.name, target);
|
|
155
|
+
return target;
|
|
156
|
+
}
|
|
157
|
+
set(name, value) {
|
|
158
|
+
this._validateName(name);
|
|
159
|
+
super.set(name, value);
|
|
160
|
+
return this;
|
|
161
|
+
}
|
|
162
|
+
_validateName(name) {
|
|
163
|
+
if (typeof name !== 'string') {
|
|
164
|
+
throw new TypeError('Target name must be a string.');
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.TargetDefinitionCollection = TargetDefinitionCollection;
|
|
169
|
+
//# sourceMappingURL=definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["definitions.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
|
+
import { virtualFs } from '../virtual-fs';
|
|
9
|
+
export interface WorkspaceHost {
|
|
10
|
+
readFile(path: string): Promise<string>;
|
|
11
|
+
writeFile(path: string, data: string): Promise<void>;
|
|
12
|
+
isDirectory(path: string): Promise<boolean>;
|
|
13
|
+
isFile(path: string): Promise<boolean>;
|
|
14
|
+
}
|
|
15
|
+
export declare function createWorkspaceHost(host: virtualFs.Host): WorkspaceHost;
|
|
@@ -0,0 +1,43 @@
|
|
|
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.createWorkspaceHost = createWorkspaceHost;
|
|
11
|
+
const rxjs_1 = require("rxjs");
|
|
12
|
+
const virtual_fs_1 = require("../virtual-fs");
|
|
13
|
+
function createWorkspaceHost(host) {
|
|
14
|
+
const workspaceHost = {
|
|
15
|
+
async readFile(path) {
|
|
16
|
+
const data = await (0, rxjs_1.lastValueFrom)(host.read((0, virtual_fs_1.normalize)(path)));
|
|
17
|
+
return virtual_fs_1.virtualFs.fileBufferToString(data);
|
|
18
|
+
},
|
|
19
|
+
async writeFile(path, data) {
|
|
20
|
+
return (0, rxjs_1.lastValueFrom)(host.write((0, virtual_fs_1.normalize)(path), virtual_fs_1.virtualFs.stringToFileBuffer(data)));
|
|
21
|
+
},
|
|
22
|
+
async isDirectory(path) {
|
|
23
|
+
try {
|
|
24
|
+
return await (0, rxjs_1.lastValueFrom)(host.isDirectory((0, virtual_fs_1.normalize)(path)));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// some hosts throw if path does not exist
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
async isFile(path) {
|
|
32
|
+
try {
|
|
33
|
+
return await (0, rxjs_1.lastValueFrom)(host.isFile((0, virtual_fs_1.normalize)(path)));
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// some hosts throw if path does not exist
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
return workspaceHost;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["host.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAgBH,kDA6BC;AA3CD,+BAAqC;AACrC,8CAAqD;AAarD,SAAgB,mBAAmB,CAAC,IAAoB;IACtD,MAAM,aAAa,GAAkB;QACnC,KAAK,CAAC,QAAQ,CAAC,IAAY;YACzB,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,IAAI,CAAC,IAAA,sBAAS,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE7D,OAAO,sBAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,IAAY;YACxC,OAAO,IAAA,oBAAa,EAAC,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAS,EAAC,IAAI,CAAC,EAAE,sBAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,IAAY;YAC5B,IAAI,CAAC;gBACH,OAAO,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,WAAW,CAAC,IAAA,sBAAS,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,0CAA0C;gBAC1C,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,IAAY;YACvB,IAAI,CAAC;gBACH,OAAO,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,IAAA,sBAAS,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC;YAAC,MAAM,CAAC;gBACP,0CAA0C;gBAC1C,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC;IAEF,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
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 * from './definitions';
|
|
9
|
+
export { type WorkspaceHost, createWorkspaceHost } from './host';
|
|
10
|
+
export { WorkspaceFormat, readWorkspace, writeWorkspace } from './core';
|
|
@@ -0,0 +1,32 @@
|
|
|
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
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
21
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.writeWorkspace = exports.readWorkspace = exports.WorkspaceFormat = exports.createWorkspaceHost = void 0;
|
|
25
|
+
__exportStar(require("./definitions"), exports);
|
|
26
|
+
var host_1 = require("./host");
|
|
27
|
+
Object.defineProperty(exports, "createWorkspaceHost", { enumerable: true, get: function () { return host_1.createWorkspaceHost; } });
|
|
28
|
+
var core_1 = require("./core");
|
|
29
|
+
Object.defineProperty(exports, "WorkspaceFormat", { enumerable: true, get: function () { return core_1.WorkspaceFormat; } });
|
|
30
|
+
Object.defineProperty(exports, "readWorkspace", { enumerable: true, get: function () { return core_1.readWorkspace; } });
|
|
31
|
+
Object.defineProperty(exports, "writeWorkspace", { enumerable: true, get: function () { return core_1.writeWorkspace; } });
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;AAEH,gDAA8B;AAC9B,+BAAiE;AAApC,2GAAA,mBAAmB,OAAA;AAChD,+BAAwE;AAA/D,uGAAA,eAAe,OAAA;AAAE,qGAAA,aAAa,OAAA;AAAE,sGAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
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 { JSONPath, Node } from 'jsonc-parser';
|
|
9
|
+
import { JsonValue } from '../../json';
|
|
10
|
+
import { ProjectDefinition, TargetDefinition, WorkspaceDefinition } from '../definitions';
|
|
11
|
+
export declare const JsonWorkspaceSymbol: unique symbol;
|
|
12
|
+
export interface JsonWorkspaceDefinition extends WorkspaceDefinition {
|
|
13
|
+
[JsonWorkspaceSymbol]: JsonWorkspaceMetadata;
|
|
14
|
+
}
|
|
15
|
+
interface ChangeValues {
|
|
16
|
+
json: JsonValue;
|
|
17
|
+
project: ProjectDefinition;
|
|
18
|
+
target: TargetDefinition;
|
|
19
|
+
projectcollection: Iterable<[string, ProjectDefinition]>;
|
|
20
|
+
targetcollection: Iterable<[string, TargetDefinition]>;
|
|
21
|
+
}
|
|
22
|
+
export interface JsonChange {
|
|
23
|
+
value?: unknown;
|
|
24
|
+
type?: keyof ChangeValues;
|
|
25
|
+
jsonPath: string[];
|
|
26
|
+
}
|
|
27
|
+
export declare class JsonWorkspaceMetadata {
|
|
28
|
+
readonly filePath: string;
|
|
29
|
+
private readonly ast;
|
|
30
|
+
readonly raw: string;
|
|
31
|
+
readonly changes: Map<string, JsonChange>;
|
|
32
|
+
hasLegacyTargetsName: boolean;
|
|
33
|
+
constructor(filePath: string, ast: Node, raw: string);
|
|
34
|
+
get hasChanges(): boolean;
|
|
35
|
+
get changeCount(): number;
|
|
36
|
+
getNodeValueFromAst(path: JSONPath): unknown;
|
|
37
|
+
findChangesForPath(path: string): JsonChange | undefined;
|
|
38
|
+
addChange<T extends keyof ChangeValues = keyof ChangeValues>(jsonPath: string[], value: ChangeValues[T] | undefined, type?: T): void;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
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.JsonWorkspaceMetadata = exports.JsonWorkspaceSymbol = void 0;
|
|
11
|
+
const jsonc_parser_1 = require("jsonc-parser");
|
|
12
|
+
exports.JsonWorkspaceSymbol = Symbol.for('@angular/core:workspace-json');
|
|
13
|
+
function escapeKey(key) {
|
|
14
|
+
return key.replace('~', '~0').replace('/', '~1');
|
|
15
|
+
}
|
|
16
|
+
class JsonWorkspaceMetadata {
|
|
17
|
+
filePath;
|
|
18
|
+
ast;
|
|
19
|
+
raw;
|
|
20
|
+
changes = new Map();
|
|
21
|
+
hasLegacyTargetsName = true;
|
|
22
|
+
constructor(filePath, ast, raw) {
|
|
23
|
+
this.filePath = filePath;
|
|
24
|
+
this.ast = ast;
|
|
25
|
+
this.raw = raw;
|
|
26
|
+
}
|
|
27
|
+
get hasChanges() {
|
|
28
|
+
return this.changes.size > 0;
|
|
29
|
+
}
|
|
30
|
+
get changeCount() {
|
|
31
|
+
return this.changes.size;
|
|
32
|
+
}
|
|
33
|
+
getNodeValueFromAst(path) {
|
|
34
|
+
const node = (0, jsonc_parser_1.findNodeAtLocation)(this.ast, path);
|
|
35
|
+
return node && (0, jsonc_parser_1.getNodeValue)(node);
|
|
36
|
+
}
|
|
37
|
+
findChangesForPath(path) {
|
|
38
|
+
return this.changes.get(path);
|
|
39
|
+
}
|
|
40
|
+
addChange(jsonPath, value, type) {
|
|
41
|
+
let currentPath = '';
|
|
42
|
+
for (let index = 0; index < jsonPath.length - 1; index++) {
|
|
43
|
+
currentPath = currentPath + '/' + escapeKey(jsonPath[index]);
|
|
44
|
+
if (this.changes.has(currentPath)) {
|
|
45
|
+
// Ignore changes on children as parent is updated.
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const pathKey = '/' + jsonPath.map((k) => escapeKey(k)).join('/');
|
|
50
|
+
for (const key of this.changes.keys()) {
|
|
51
|
+
if (key.startsWith(pathKey + '/')) {
|
|
52
|
+
// changes on the same or child paths are redundant.
|
|
53
|
+
this.changes.delete(key);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
this.changes.set(pathKey, { jsonPath, type, value });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.JsonWorkspaceMetadata = JsonWorkspaceMetadata;
|
|
60
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["metadata.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,+CAAgF;AAInE,QAAA,mBAAmB,GAAkB,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAoB7F,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,MAAa,qBAAqB;IAMrB;IACQ;IACR;IAPF,OAAO,GAA4B,IAAI,GAAG,EAAE,CAAC;IAEtD,oBAAoB,GAAG,IAAI,CAAC;IAE5B,YACW,QAAgB,EACR,GAAS,EACjB,GAAW;QAFX,aAAQ,GAAR,QAAQ,CAAQ;QACR,QAAG,GAAH,GAAG,CAAM;QACjB,QAAG,GAAH,GAAG,CAAQ;IACnB,CAAC;IAEJ,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,mBAAmB,CAAC,IAAc;QAChC,MAAM,IAAI,GAAG,IAAA,iCAAkB,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAEhD,OAAO,IAAI,IAAI,IAAA,2BAAY,EAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,kBAAkB,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,SAAS,CACP,QAAkB,EAClB,KAAkC,EAClC,IAAQ;QAER,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACzD,WAAW,GAAG,WAAW,GAAG,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClC,mDAAmD;gBACnD,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;gBAClC,oDAAoD;gBACpD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AArDD,sDAqDC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
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 { WorkspaceDefinition } from '../definitions';
|
|
9
|
+
import { WorkspaceHost } from '../host';
|
|
10
|
+
export interface JsonWorkspaceOptions {
|
|
11
|
+
allowedProjectExtensions?: string[];
|
|
12
|
+
allowedWorkspaceExtensions?: string[];
|
|
13
|
+
}
|
|
14
|
+
export declare function readJsonWorkspace(path: string, host: WorkspaceHost, options?: JsonWorkspaceOptions): Promise<WorkspaceDefinition>;
|
|
@@ -0,0 +1,231 @@
|
|
|
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.readJsonWorkspace = readJsonWorkspace;
|
|
11
|
+
const jsonc_parser_1 = require("jsonc-parser");
|
|
12
|
+
const utils_1 = require("../../json/utils");
|
|
13
|
+
const definitions_1 = require("../definitions");
|
|
14
|
+
const metadata_1 = require("./metadata");
|
|
15
|
+
const utilities_1 = require("./utilities");
|
|
16
|
+
const ANGULAR_WORKSPACE_EXTENSIONS = Object.freeze(['cli', 'newProjectRoot', 'schematics']);
|
|
17
|
+
const ANGULAR_PROJECT_EXTENSIONS = Object.freeze(['cli', 'schematics', 'projectType', 'i18n']);
|
|
18
|
+
async function readJsonWorkspace(path, host, options = {}) {
|
|
19
|
+
const raw = await host.readFile(path);
|
|
20
|
+
if (raw === undefined) {
|
|
21
|
+
throw new Error('Unable to read workspace file.');
|
|
22
|
+
}
|
|
23
|
+
const ast = (0, jsonc_parser_1.parseTree)(raw, undefined, { allowTrailingComma: true, disallowComments: false });
|
|
24
|
+
if (ast?.type !== 'object' || !ast.children) {
|
|
25
|
+
throw new Error('Invalid workspace file - expected JSON object.');
|
|
26
|
+
}
|
|
27
|
+
// Version check
|
|
28
|
+
const versionNode = (0, jsonc_parser_1.findNodeAtLocation)(ast, ['version']);
|
|
29
|
+
if (!versionNode) {
|
|
30
|
+
throw new Error('Unknown format - version specifier not found.');
|
|
31
|
+
}
|
|
32
|
+
const version = versionNode.value;
|
|
33
|
+
if (version !== 1) {
|
|
34
|
+
throw new Error(`Invalid format version detected - Expected:[ 1 ] Found: [ ${version} ]`);
|
|
35
|
+
}
|
|
36
|
+
const context = {
|
|
37
|
+
host,
|
|
38
|
+
metadata: new metadata_1.JsonWorkspaceMetadata(path, ast, raw),
|
|
39
|
+
trackChanges: true,
|
|
40
|
+
unprefixedWorkspaceExtensions: new Set([
|
|
41
|
+
...ANGULAR_WORKSPACE_EXTENSIONS,
|
|
42
|
+
...(options.allowedWorkspaceExtensions ?? []),
|
|
43
|
+
]),
|
|
44
|
+
unprefixedProjectExtensions: new Set([
|
|
45
|
+
...ANGULAR_PROJECT_EXTENSIONS,
|
|
46
|
+
...(options.allowedProjectExtensions ?? []),
|
|
47
|
+
]),
|
|
48
|
+
error(message, _node) {
|
|
49
|
+
// TODO: Diagnostic reporting support
|
|
50
|
+
throw new Error(message);
|
|
51
|
+
},
|
|
52
|
+
warn(message, _node) {
|
|
53
|
+
// TODO: Diagnostic reporting support
|
|
54
|
+
// eslint-disable-next-line no-console
|
|
55
|
+
console.warn(message);
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
const workspace = parseWorkspace(ast, context);
|
|
59
|
+
return workspace;
|
|
60
|
+
}
|
|
61
|
+
function parseWorkspace(workspaceNode, context) {
|
|
62
|
+
const jsonMetadata = context.metadata;
|
|
63
|
+
let projects;
|
|
64
|
+
let extensions;
|
|
65
|
+
if (!context.trackChanges) {
|
|
66
|
+
extensions = Object.create(null);
|
|
67
|
+
}
|
|
68
|
+
// TODO: `getNodeValue` - looks potentially expensive since it walks the whole tree and instantiates the full object structure each time.
|
|
69
|
+
// Might be something to look at moving forward to optimize.
|
|
70
|
+
const workspaceNodeValue = (0, jsonc_parser_1.getNodeValue)(workspaceNode);
|
|
71
|
+
for (const [name, value] of Object.entries(workspaceNodeValue)) {
|
|
72
|
+
if (name === '$schema' || name === 'version') {
|
|
73
|
+
// skip
|
|
74
|
+
}
|
|
75
|
+
else if (name === 'projects') {
|
|
76
|
+
const nodes = (0, jsonc_parser_1.findNodeAtLocation)(workspaceNode, ['projects']);
|
|
77
|
+
if (!(0, utils_1.isJsonObject)(value) || !nodes) {
|
|
78
|
+
context.error('Invalid "projects" field found; expected an object.', value);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
projects = parseProjectsObject(nodes, context);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
if (!context.unprefixedWorkspaceExtensions.has(name) && !/^[a-z]{1,3}-.*/.test(name)) {
|
|
85
|
+
context.warn(`Workspace extension with invalid name (${name}) found.`, name);
|
|
86
|
+
}
|
|
87
|
+
if (extensions) {
|
|
88
|
+
extensions[name] = value;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
let collectionListener;
|
|
93
|
+
if (context.trackChanges) {
|
|
94
|
+
collectionListener = (name, newValue) => {
|
|
95
|
+
jsonMetadata.addChange(['projects', name], newValue, 'project');
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const projectCollection = new definitions_1.ProjectDefinitionCollection(projects, collectionListener);
|
|
99
|
+
return {
|
|
100
|
+
[metadata_1.JsonWorkspaceSymbol]: jsonMetadata,
|
|
101
|
+
projects: projectCollection,
|
|
102
|
+
// If not tracking changes the `extensions` variable will contain the parsed
|
|
103
|
+
// values. Otherwise the extensions are tracked via a virtual AST object.
|
|
104
|
+
extensions: extensions ??
|
|
105
|
+
(0, utilities_1.createVirtualAstObject)(workspaceNodeValue, {
|
|
106
|
+
exclude: ['$schema', 'version', 'projects'],
|
|
107
|
+
listener(path, value) {
|
|
108
|
+
jsonMetadata.addChange(path, value);
|
|
109
|
+
},
|
|
110
|
+
}),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function parseProjectsObject(projectsNode, context) {
|
|
114
|
+
const projects = Object.create(null);
|
|
115
|
+
for (const [name, value] of Object.entries((0, jsonc_parser_1.getNodeValue)(projectsNode))) {
|
|
116
|
+
const nodes = (0, jsonc_parser_1.findNodeAtLocation)(projectsNode, [name]);
|
|
117
|
+
if (!(0, utils_1.isJsonObject)(value) || !nodes) {
|
|
118
|
+
context.warn('Skipping invalid project value; expected an object.', value);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
projects[name] = parseProject(name, nodes, context);
|
|
122
|
+
}
|
|
123
|
+
return projects;
|
|
124
|
+
}
|
|
125
|
+
function parseProject(projectName, projectNode, context) {
|
|
126
|
+
const jsonMetadata = context.metadata;
|
|
127
|
+
let targets;
|
|
128
|
+
let hasTargets = false;
|
|
129
|
+
let extensions;
|
|
130
|
+
let properties;
|
|
131
|
+
if (!context.trackChanges) {
|
|
132
|
+
// If not tracking changes, the parser will store the values directly in standard objects
|
|
133
|
+
extensions = Object.create(null);
|
|
134
|
+
properties = Object.create(null);
|
|
135
|
+
}
|
|
136
|
+
const projectNodeValue = (0, jsonc_parser_1.getNodeValue)(projectNode);
|
|
137
|
+
if (!('root' in projectNodeValue)) {
|
|
138
|
+
throw new Error(`Project "${projectName}" is missing a required property "root".`);
|
|
139
|
+
}
|
|
140
|
+
for (const [name, value] of Object.entries(projectNodeValue)) {
|
|
141
|
+
switch (name) {
|
|
142
|
+
case 'targets':
|
|
143
|
+
case 'architect': {
|
|
144
|
+
const nodes = (0, jsonc_parser_1.findNodeAtLocation)(projectNode, [name]);
|
|
145
|
+
if (!(0, utils_1.isJsonObject)(value) || !nodes) {
|
|
146
|
+
context.error(`Invalid "${name}" field found; expected an object.`, value);
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
hasTargets = true;
|
|
150
|
+
targets = parseTargetsObject(projectName, nodes, context);
|
|
151
|
+
jsonMetadata.hasLegacyTargetsName = name === 'architect';
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
case 'prefix':
|
|
155
|
+
case 'root':
|
|
156
|
+
case 'sourceRoot':
|
|
157
|
+
if (typeof value !== 'string') {
|
|
158
|
+
context.warn(`Project property "${name}" should be a string.`, value);
|
|
159
|
+
}
|
|
160
|
+
if (properties) {
|
|
161
|
+
properties[name] = value;
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
164
|
+
default:
|
|
165
|
+
if (!context.unprefixedProjectExtensions.has(name) && !/^[a-z]{1,3}-.*/.test(name)) {
|
|
166
|
+
context.warn(`Project '${projectName}' contains extension with invalid name (${name}).`, name);
|
|
167
|
+
}
|
|
168
|
+
if (extensions) {
|
|
169
|
+
extensions[name] = value;
|
|
170
|
+
}
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
let collectionListener;
|
|
175
|
+
if (context.trackChanges) {
|
|
176
|
+
collectionListener = (name, newValue, collection) => {
|
|
177
|
+
if (hasTargets) {
|
|
178
|
+
jsonMetadata.addChange(['projects', projectName, 'targets', name], newValue, 'target');
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
jsonMetadata.addChange(['projects', projectName, 'targets'], collection, 'targetcollection');
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
const base = {
|
|
186
|
+
targets: new definitions_1.TargetDefinitionCollection(targets, collectionListener),
|
|
187
|
+
// If not tracking changes the `extensions` variable will contain the parsed
|
|
188
|
+
// values. Otherwise the extensions are tracked via a virtual AST object.
|
|
189
|
+
extensions: extensions ??
|
|
190
|
+
(0, utilities_1.createVirtualAstObject)(projectNodeValue, {
|
|
191
|
+
exclude: ['architect', 'prefix', 'root', 'sourceRoot', 'targets'],
|
|
192
|
+
listener(path, value) {
|
|
193
|
+
jsonMetadata.addChange(['projects', projectName, ...path], value);
|
|
194
|
+
},
|
|
195
|
+
}),
|
|
196
|
+
};
|
|
197
|
+
const baseKeys = new Set(Object.keys(base));
|
|
198
|
+
const project = properties ??
|
|
199
|
+
(0, utilities_1.createVirtualAstObject)(projectNodeValue, {
|
|
200
|
+
include: ['prefix', 'root', 'sourceRoot', ...baseKeys],
|
|
201
|
+
listener(path, value) {
|
|
202
|
+
if (!baseKeys.has(path[0])) {
|
|
203
|
+
jsonMetadata.addChange(['projects', projectName, ...path], value);
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
return Object.assign(project, base);
|
|
208
|
+
}
|
|
209
|
+
function parseTargetsObject(projectName, targetsNode, context) {
|
|
210
|
+
const jsonMetadata = context.metadata;
|
|
211
|
+
const targets = Object.create(null);
|
|
212
|
+
for (const [name, value] of Object.entries((0, jsonc_parser_1.getNodeValue)(targetsNode))) {
|
|
213
|
+
if (!(0, utils_1.isJsonObject)(value)) {
|
|
214
|
+
context.warn('Skipping invalid target value; expected an object.', value);
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
if (context.trackChanges) {
|
|
218
|
+
targets[name] = (0, utilities_1.createVirtualAstObject)(value, {
|
|
219
|
+
include: ['builder', 'options', 'configurations', 'defaultConfiguration'],
|
|
220
|
+
listener(path, value) {
|
|
221
|
+
jsonMetadata.addChange(['projects', projectName, 'targets', name, ...path], value);
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
targets[name] = value;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return targets;
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.js","sourceRoot":"","sources":["reader.ts"],"names":[],"mappings":"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"}
|