@decohere/forge 0.0.1-dev.10
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/commonjs/src/actions/build.action.js +108 -0
- package/commonjs/src/actions/clean.action.js +55 -0
- package/commonjs/src/actions/commit.action.js +87 -0
- package/commonjs/src/actions/copy.action.js +83 -0
- package/commonjs/src/actions/dependency-report.action.js +142 -0
- package/commonjs/src/actions/dependency-sync.action.js +100 -0
- package/commonjs/src/actions/index.js +30 -0
- package/commonjs/src/actions/publish.action.js +156 -0
- package/commonjs/src/actions/sync-lock-file.action.js +43 -0
- package/commonjs/src/actions/tag.action.js +76 -0
- package/commonjs/src/actions/version.action.js +209 -0
- package/commonjs/src/actions/watch.action.js +50 -0
- package/commonjs/src/commands/build.command.js +49 -0
- package/commonjs/src/commands/dependency.command.js +88 -0
- package/commonjs/src/commands/forge.command.js +24 -0
- package/commonjs/src/commands/index.js +25 -0
- package/commonjs/src/commands/publish.command.js +32 -0
- package/commonjs/src/commands/tag.command.js +28 -0
- package/commonjs/src/commands/version.command.js +36 -0
- package/commonjs/src/const.js +81 -0
- package/commonjs/src/errors.js +39 -0
- package/commonjs/src/extensions/project.extensions.js +94 -0
- package/commonjs/src/factories/swc-config.factory.js +98 -0
- package/commonjs/src/forge.module.js +109 -0
- package/commonjs/src/index.js +43 -0
- package/commonjs/src/mixins/caches-outputs.mixin.js +42 -0
- package/commonjs/src/mixins/incremental-transform.mixin.js +36 -0
- package/commonjs/src/services/dependency-resolver.service.js +172 -0
- package/commonjs/src/services/file-writer.service.js +232 -0
- package/commonjs/src/services/swc-transpiler.js +228 -0
- package/commonjs/src/services/ts-program-host.js +135 -0
- package/commonjs/src/services/type-emission-program.js +160 -0
- package/commonjs/src/services/type-emitter.js +141 -0
- package/commonjs/src/types/build-target.type.js +17 -0
- package/commonjs/src/types/configuration.type.js +6 -0
- package/commonjs/src/types/dependency.types.js +6 -0
- package/commonjs/src/types/swc-config.type.js +17 -0
- package/commonjs/src/types/transform-response.model.js +64 -0
- package/commonjs/src/types/transformer.type.js +13 -0
- package/commonjs/src/types/workspace-config.type.js +6 -0
- package/commonjs/src/vitest/forge-build.plugin.js +129 -0
- package/commonjs/src/vitest/index.js +13 -0
- package/commonjs/src/workspace.config.js +63 -0
- package/es6/src/actions/build.action.js +100 -0
- package/es6/src/actions/clean.action.js +46 -0
- package/es6/src/actions/commit.action.js +73 -0
- package/es6/src/actions/copy.action.js +69 -0
- package/es6/src/actions/dependency-report.action.js +134 -0
- package/es6/src/actions/dependency-sync.action.js +92 -0
- package/es6/src/actions/index.js +13 -0
- package/es6/src/actions/publish.action.js +147 -0
- package/es6/src/actions/sync-lock-file.action.js +33 -0
- package/es6/src/actions/tag.action.js +67 -0
- package/es6/src/actions/version.action.js +189 -0
- package/es6/src/actions/watch.action.js +41 -0
- package/es6/src/commands/build.command.js +34 -0
- package/es6/src/commands/dependency.command.js +78 -0
- package/es6/src/commands/forge.command.js +14 -0
- package/es6/src/commands/index.js +8 -0
- package/es6/src/commands/publish.command.js +22 -0
- package/es6/src/commands/tag.command.js +18 -0
- package/es6/src/commands/version.command.js +26 -0
- package/es6/src/const.js +60 -0
- package/es6/src/errors.js +18 -0
- package/es6/src/extensions/project.extensions.js +79 -0
- package/es6/src/factories/swc-config.factory.js +83 -0
- package/es6/src/forge.module.js +58 -0
- package/es6/src/index.js +7 -0
- package/es6/src/mixins/caches-outputs.mixin.js +32 -0
- package/es6/src/mixins/incremental-transform.mixin.js +26 -0
- package/es6/src/services/dependency-resolver.service.js +162 -0
- package/es6/src/services/file-writer.service.js +217 -0
- package/es6/src/services/swc-transpiler.js +213 -0
- package/es6/src/services/ts-program-host.js +120 -0
- package/es6/src/services/type-emission-program.js +145 -0
- package/es6/src/services/type-emitter.js +134 -0
- package/es6/src/types/build-target.type.js +7 -0
- package/es6/src/types/configuration.type.js +3 -0
- package/es6/src/types/dependency.types.js +3 -0
- package/es6/src/types/swc-config.type.js +7 -0
- package/es6/src/types/transform-response.model.js +46 -0
- package/es6/src/types/transformer.type.js +3 -0
- package/es6/src/types/workspace-config.type.js +3 -0
- package/es6/src/vitest/forge-build.plugin.js +114 -0
- package/es6/src/vitest/index.js +3 -0
- package/es6/src/workspace.config.js +39 -0
- package/package.json +43 -0
- package/types/src/actions/build.action.d.ts +22 -0
- package/types/src/actions/clean.action.d.ts +13 -0
- package/types/src/actions/commit.action.d.ts +17 -0
- package/types/src/actions/copy.action.d.ts +14 -0
- package/types/src/actions/dependency-report.action.d.ts +36 -0
- package/types/src/actions/dependency-sync.action.d.ts +17 -0
- package/types/src/actions/index.d.ts +11 -0
- package/types/src/actions/publish.action.d.ts +34 -0
- package/types/src/actions/sync-lock-file.action.d.ts +10 -0
- package/types/src/actions/tag.action.d.ts +19 -0
- package/types/src/actions/version.action.d.ts +35 -0
- package/types/src/actions/watch.action.d.ts +14 -0
- package/types/src/commands/build.command.d.ts +16 -0
- package/types/src/commands/dependency.command.d.ts +5 -0
- package/types/src/commands/forge.command.d.ts +6 -0
- package/types/src/commands/index.d.ts +6 -0
- package/types/src/commands/publish.command.d.ts +6 -0
- package/types/src/commands/tag.command.d.ts +6 -0
- package/types/src/commands/version.command.d.ts +12 -0
- package/types/src/const.d.ts +3 -0
- package/types/src/errors.d.ts +4 -0
- package/types/src/extensions/project.extensions.d.ts +17 -0
- package/types/src/factories/swc-config.factory.d.ts +24 -0
- package/types/src/forge.module.d.ts +31 -0
- package/types/src/index.d.ts +9 -0
- package/types/src/mixins/caches-outputs.mixin.d.ts +7 -0
- package/types/src/mixins/incremental-transform.mixin.d.ts +13 -0
- package/types/src/services/dependency-resolver.service.d.ts +15 -0
- package/types/src/services/file-writer.service.d.ts +20 -0
- package/types/src/services/swc-transpiler.d.ts +34 -0
- package/types/src/services/ts-program-host.d.ts +22 -0
- package/types/src/services/type-emission-program.d.ts +22 -0
- package/types/src/services/type-emitter.d.ts +43 -0
- package/types/src/types/build-target.type.d.ts +7 -0
- package/types/src/types/configuration.type.d.ts +6 -0
- package/types/src/types/dependency.types.d.ts +39 -0
- package/types/src/types/swc-config.type.d.ts +9 -0
- package/types/src/types/transform-response.model.d.ts +54 -0
- package/types/src/types/transformer.type.d.ts +37 -0
- package/types/src/types/workspace-config.type.d.ts +13 -0
- package/types/src/vitest/forge-build.plugin.d.ts +18 -0
- package/types/src/vitest/index.d.ts +2 -0
- package/types/src/workspace.config.d.ts +6 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "SwcTranspiler", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return SwcTranspiler;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _nodefs = /*#__PURE__*/ _interop_require_default(require("node:fs"));
|
|
12
|
+
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
13
|
+
const _caching = require("@decohere/nexus/caching");
|
|
14
|
+
const _diagnostics = require("@decohere/nexus/diagnostics");
|
|
15
|
+
const _extensibility = require("@decohere/nexus/extensibility");
|
|
16
|
+
const _io = require("@decohere/nexus/io");
|
|
17
|
+
const _core = require("@swc/core");
|
|
18
|
+
const _buildtargettype = require("../types/build-target.type.js");
|
|
19
|
+
require("../extensions/project.extensions.js");
|
|
20
|
+
const _swcconfigfactory = require("../factories/swc-config.factory.js");
|
|
21
|
+
const _cachesoutputsmixin = require("../mixins/caches-outputs.mixin.js");
|
|
22
|
+
const _incrementaltransformmixin = require("../mixins/incremental-transform.mixin.js");
|
|
23
|
+
const _transformresponsemodel = require("../types/transform-response.model.js");
|
|
24
|
+
function _interop_require_default(obj) {
|
|
25
|
+
return obj && obj.__esModule ? obj : {
|
|
26
|
+
default: obj
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
30
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
31
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
32
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
33
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
34
|
+
}
|
|
35
|
+
function _ts_metadata(k, v) {
|
|
36
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
37
|
+
}
|
|
38
|
+
class SwcTranspiler extends (0, _extensibility.mixwith)(_cachesoutputsmixin.CachesOutputs, _incrementaltransformmixin.IncrementalTransform) {
|
|
39
|
+
buildTargets = [
|
|
40
|
+
_buildtargettype.BuildTargets.es6,
|
|
41
|
+
_buildtargettype.BuildTargets.commonjs
|
|
42
|
+
];
|
|
43
|
+
#swcConfigFactory = new _swcconfigfactory.SwcConfigFactory();
|
|
44
|
+
async transformProject(projectArrayLike, fileFilter, onOutput) {
|
|
45
|
+
const projects = Array.isArray(projectArrayLike) ? projectArrayLike : [
|
|
46
|
+
projectArrayLike
|
|
47
|
+
];
|
|
48
|
+
const responses = await Promise.all(projects.map(async (project)=>{
|
|
49
|
+
const { targets, aliasPaths } = project.getForgeConfiguration();
|
|
50
|
+
const transpileTargets = targets.filter((bt)=>bt !== _buildtargettype.BuildTargets.types);
|
|
51
|
+
if (transpileTargets.length === 0) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
const sourceFiles = await (fileFilter?.(project) ?? project.getAllFiles());
|
|
55
|
+
const tsConfig = await project.getTsConfig();
|
|
56
|
+
const userConfig = await project.getSwcConfig();
|
|
57
|
+
const responses = await Promise.all(transpileTargets.map((target)=>{
|
|
58
|
+
return this.transformTarget(sourceFiles, target, {
|
|
59
|
+
tsConfig,
|
|
60
|
+
userConfig,
|
|
61
|
+
aliasPaths
|
|
62
|
+
}, project, onOutput);
|
|
63
|
+
}));
|
|
64
|
+
return responses.flat();
|
|
65
|
+
}));
|
|
66
|
+
const flat = responses.flat();
|
|
67
|
+
this.cacheOutputs(flat);
|
|
68
|
+
return flat;
|
|
69
|
+
}
|
|
70
|
+
async transformFile(fileArrayLike, buildTarget, options = {}) {
|
|
71
|
+
const files = Array.isArray(fileArrayLike) ? fileArrayLike : [
|
|
72
|
+
fileArrayLike
|
|
73
|
+
];
|
|
74
|
+
const responses = this.transformTarget(files, buildTarget, options);
|
|
75
|
+
return responses;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Synchronous, single-file variant of `transformFile`.
|
|
79
|
+
* Reads the file with `fs.readFileSync` and transpiles via `swc.transformSync`.
|
|
80
|
+
* Intended for callers that cannot await (e.g. Node.js `registerHooks` load hook).
|
|
81
|
+
*/ transformFileSync(file, buildTarget, options = {}) {
|
|
82
|
+
const baseConfig = this.#swcConfigFactory.createBaseConfig(buildTarget, options);
|
|
83
|
+
const swcOptions = this.#swcConfigFactory.createFileConfig(file, baseConfig);
|
|
84
|
+
let content;
|
|
85
|
+
try {
|
|
86
|
+
content = _nodefs.default.readFileSync(file.fullPath, "utf8");
|
|
87
|
+
} catch (error) {
|
|
88
|
+
return _transformresponsemodel.TransformResponse.Error({
|
|
89
|
+
file,
|
|
90
|
+
messages: [
|
|
91
|
+
String(error)
|
|
92
|
+
],
|
|
93
|
+
config: swcOptions
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
if (content === "") {
|
|
97
|
+
return _transformresponsemodel.TransformResponse.Skipped({
|
|
98
|
+
file,
|
|
99
|
+
messages: "File is empty",
|
|
100
|
+
config: swcOptions
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
const transformed = (0, _core.transformSync)(content, swcOptions);
|
|
105
|
+
if (transformed == null) {
|
|
106
|
+
throw new Error("swc.transformSync returned no result");
|
|
107
|
+
}
|
|
108
|
+
const filePath = file.relativePath;
|
|
109
|
+
const extName = _nodepath.default.extname(filePath);
|
|
110
|
+
const fileName = filePath.replace(new RegExp(`${extName}$`), ".js");
|
|
111
|
+
return _transformresponsemodel.TransformResponse.Success({
|
|
112
|
+
file,
|
|
113
|
+
code: transformed.code,
|
|
114
|
+
target: buildTarget,
|
|
115
|
+
fileName,
|
|
116
|
+
config: swcOptions
|
|
117
|
+
});
|
|
118
|
+
} catch (error) {
|
|
119
|
+
return _transformresponsemodel.TransformResponse.Error({
|
|
120
|
+
file,
|
|
121
|
+
messages: [
|
|
122
|
+
String(error)
|
|
123
|
+
],
|
|
124
|
+
config: swcOptions
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async transformTarget(files, buildTarget, options, project, onOutput) {
|
|
129
|
+
const baseConfig = this.#swcConfigFactory.createBaseConfig(buildTarget, options ?? {});
|
|
130
|
+
return await Promise.all(files.map((file)=>{
|
|
131
|
+
const swcOptions = this.#swcConfigFactory.createFileConfig(file, baseConfig);
|
|
132
|
+
return this.runTransform(file, buildTarget, swcOptions, project, onOutput);
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
async runTransform(file, target, swcOptions, project, onOutput) {
|
|
136
|
+
const content = await this.getFileContent(file);
|
|
137
|
+
if (content === "") {
|
|
138
|
+
const skipped = _transformresponsemodel.TransformResponse.Skipped({
|
|
139
|
+
file,
|
|
140
|
+
messages: "File is empty",
|
|
141
|
+
config: swcOptions,
|
|
142
|
+
project
|
|
143
|
+
});
|
|
144
|
+
onOutput?.(skipped);
|
|
145
|
+
return skipped;
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const filePath = file.relativePath;
|
|
149
|
+
const extName = _nodepath.default.extname(filePath);
|
|
150
|
+
const fileName = filePath.replace(new RegExp(`${extName}$`), ".js");
|
|
151
|
+
const outBaseDir = project?.getOutDir(target);
|
|
152
|
+
const outputPath = outBaseDir ? _nodepath.default.join(outBaseDir, fileName) : undefined;
|
|
153
|
+
const outputDir = outputPath ? _nodepath.default.dirname(outputPath) : undefined;
|
|
154
|
+
const transformed = await (0, _core.transform)(content, swcOptions);
|
|
155
|
+
if (transformed == null) {
|
|
156
|
+
throw new Error("swc.transform returned no result");
|
|
157
|
+
}
|
|
158
|
+
const success = _transformresponsemodel.TransformResponse.Success({
|
|
159
|
+
file,
|
|
160
|
+
code: transformed.code,
|
|
161
|
+
target,
|
|
162
|
+
fileName,
|
|
163
|
+
outputDir,
|
|
164
|
+
outputPath,
|
|
165
|
+
config: swcOptions,
|
|
166
|
+
project
|
|
167
|
+
});
|
|
168
|
+
onOutput?.(success);
|
|
169
|
+
return success;
|
|
170
|
+
} catch (error) {
|
|
171
|
+
const failure = _transformresponsemodel.TransformResponse.Error({
|
|
172
|
+
file,
|
|
173
|
+
messages: [
|
|
174
|
+
String(error)
|
|
175
|
+
],
|
|
176
|
+
config: swcOptions,
|
|
177
|
+
project
|
|
178
|
+
});
|
|
179
|
+
onOutput?.(failure);
|
|
180
|
+
return failure;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
async onIncrementalFileEvent(evt) {
|
|
184
|
+
const { file, project } = evt;
|
|
185
|
+
if (evt.eventName === _io.io.WatchEvents.unlink) {
|
|
186
|
+
this.deleteCachedOutputs(file.fullPath);
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
if (!project.isSourceFile(file)) {
|
|
190
|
+
return [];
|
|
191
|
+
}
|
|
192
|
+
this.invalidateContentCache(file);
|
|
193
|
+
return this.transformProject(project, ()=>Promise.resolve([
|
|
194
|
+
file
|
|
195
|
+
]));
|
|
196
|
+
}
|
|
197
|
+
invalidateContentCache(_file) {}
|
|
198
|
+
getFileContent(file) {
|
|
199
|
+
return file.getContent();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
_ts_decorate([
|
|
203
|
+
(0, _caching.invalidateCache)(SwcTranspiler.prototype.getFileContent, {
|
|
204
|
+
name: "FILE_CONTENT",
|
|
205
|
+
keyFn: (...args)=>args[0].fullPath
|
|
206
|
+
}),
|
|
207
|
+
_ts_metadata("design:type", Function),
|
|
208
|
+
_ts_metadata("design:paramtypes", [
|
|
209
|
+
typeof FileEx === "undefined" ? Object : FileEx
|
|
210
|
+
]),
|
|
211
|
+
_ts_metadata("design:returntype", void 0)
|
|
212
|
+
], SwcTranspiler.prototype, "invalidateContentCache", null);
|
|
213
|
+
_ts_decorate([
|
|
214
|
+
(0, _caching.cache)({
|
|
215
|
+
name: "FILE_CONTENT",
|
|
216
|
+
keyFn: (...args)=>args[0].fullPath
|
|
217
|
+
}),
|
|
218
|
+
_ts_metadata("design:type", Function),
|
|
219
|
+
_ts_metadata("design:paramtypes", [
|
|
220
|
+
typeof FileEx === "undefined" ? Object : FileEx
|
|
221
|
+
]),
|
|
222
|
+
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
|
|
223
|
+
], SwcTranspiler.prototype, "getFileContent", null);
|
|
224
|
+
SwcTranspiler = _ts_decorate([
|
|
225
|
+
_diagnostics.Trace
|
|
226
|
+
], SwcTranspiler);
|
|
227
|
+
|
|
228
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9zZXJ2aWNlcy9zd2MtdHJhbnNwaWxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuaW1wb3J0IHsgY2FjaGUsIGludmFsaWRhdGVDYWNoZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2FjaGluZ1wiO1xuaW1wb3J0IHsgVHJhY2UgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2RpYWdub3N0aWNzXCI7XG5pbXBvcnQgeyBtaXh3aXRoIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgdHlwZSB7IEZpbGVFeCB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW9cIjtcbmltcG9ydCB7IGlvIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pb1wiO1xuaW1wb3J0IHsgdHlwZSBPcHRpb25zLCB0cmFuc2Zvcm0sIHRyYW5zZm9ybVN5bmMgfSBmcm9tIFwiQHN3Yy9jb3JlXCI7XG5pbXBvcnQge1xuXHR0eXBlIEJ1aWxkVGFyZ2V0LFxuXHRCdWlsZFRhcmdldHMsXG5cdHR5cGUgVHJhbnNwaWxlVGFyZ2V0LFxufSBmcm9tIFwiLi4vdHlwZXMvYnVpbGQtdGFyZ2V0LnR5cGUuanNcIjtcbmltcG9ydCBcIi4uL2V4dGVuc2lvbnMvcHJvamVjdC5leHRlbnNpb25zLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFByb2plY3RGaWxlRXZlbnQsIFRzY29uZmlnIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgeyBTd2NDb25maWdGYWN0b3J5IH0gZnJvbSBcIi4uL2ZhY3Rvcmllcy9zd2MtY29uZmlnLmZhY3RvcnkuanNcIjtcbmltcG9ydCB7IENhY2hlc091dHB1dHMgfSBmcm9tIFwiLi4vbWl4aW5zL2NhY2hlcy1vdXRwdXRzLm1peGluLmpzXCI7XG5pbXBvcnQgeyBJbmNyZW1lbnRhbFRyYW5zZm9ybSB9IGZyb20gXCIuLi9taXhpbnMvaW5jcmVtZW50YWwtdHJhbnNmb3JtLm1peGluLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN3Y0NvbmZpZyB9IGZyb20gXCIuLi90eXBlcy9zd2MtY29uZmlnLnR5cGUuanNcIjtcbmltcG9ydCB7IFRyYW5zZm9ybVJlc3BvbnNlIH0gZnJvbSBcIi4uL3R5cGVzL3RyYW5zZm9ybS1yZXNwb25zZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2Zvcm1lciB9IGZyb20gXCIuLi90eXBlcy90cmFuc2Zvcm1lci50eXBlLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFRyYW5zcGlsZU9wdGlvbnMgPSB7XG5cdGFsaWFzUGF0aHM/OiBib29sZWFuO1xuXHR0c0NvbmZpZz86IFRzY29uZmlnO1xuXHR1c2VyQ29uZmlnPzogU3djQ29uZmlnO1xufTtcblxuQFRyYWNlXG5leHBvcnQgY2xhc3MgU3djVHJhbnNwaWxlclxuXHRleHRlbmRzIG1peHdpdGgoQ2FjaGVzT3V0cHV0cywgSW5jcmVtZW50YWxUcmFuc2Zvcm0pXG5cdGltcGxlbWVudHMgVHJhbnNmb3JtZXJcbntcblx0cHVibGljIGJ1aWxkVGFyZ2V0czogQnVpbGRUYXJnZXRbXSA9IFtCdWlsZFRhcmdldHMuZXM2LCBCdWlsZFRhcmdldHMuY29tbW9uanNdO1xuXHQjc3djQ29uZmlnRmFjdG9yeSA9IG5ldyBTd2NDb25maWdGYWN0b3J5KCk7XG5cblx0cHVibGljIGFzeW5jIHRyYW5zZm9ybVByb2plY3QoXG5cdFx0cHJvamVjdEFycmF5TGlrZTogUHJvamVjdCB8IFByb2plY3RbXSxcblx0XHRmaWxlRmlsdGVyPzogKHByb2plY3Q6IFByb2plY3QpID0+IFByb21pc2U8RmlsZUV4W10+LFxuXHRcdG9uT3V0cHV0PzogKHJlc3BvbnNlOiBUcmFuc2Zvcm1SZXNwb25zZSkgPT4gdm9pZCxcblx0KTogUHJvbWlzZTxUcmFuc2Zvcm1SZXNwb25zZVtdPiB7XG5cdFx0Y29uc3QgcHJvamVjdHMgPSBBcnJheS5pc0FycmF5KHByb2plY3RBcnJheUxpa2UpID8gcHJvamVjdEFycmF5TGlrZSA6IFtwcm9qZWN0QXJyYXlMaWtlXTtcblx0XHRjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdHByb2plY3RzLm1hcChhc3luYyAocHJvamVjdCkgPT4ge1xuXHRcdFx0XHRjb25zdCB7IHRhcmdldHMsIGFsaWFzUGF0aHMgfSA9IHByb2plY3QuZ2V0Rm9yZ2VDb25maWd1cmF0aW9uKCk7XG5cdFx0XHRcdGNvbnN0IHRyYW5zcGlsZVRhcmdldHMgPSB0YXJnZXRzLmZpbHRlcigoYnQpID0+IGJ0ICE9PSBCdWlsZFRhcmdldHMudHlwZXMpO1xuXHRcdFx0XHRpZiAodHJhbnNwaWxlVGFyZ2V0cy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBzb3VyY2VGaWxlcyA9IGF3YWl0IChmaWxlRmlsdGVyPy4ocHJvamVjdCkgPz8gcHJvamVjdC5nZXRBbGxGaWxlcygpKTtcblx0XHRcdFx0Y29uc3QgdHNDb25maWcgPSBhd2FpdCBwcm9qZWN0LmdldFRzQ29uZmlnKCk7XG5cdFx0XHRcdGNvbnN0IHVzZXJDb25maWcgPSBhd2FpdCBwcm9qZWN0LmdldFN3Y0NvbmZpZygpO1xuXHRcdFx0XHRjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0XHR0cmFuc3BpbGVUYXJnZXRzLm1hcCgodGFyZ2V0KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1UYXJnZXQoXG5cdFx0XHRcdFx0XHRcdHNvdXJjZUZpbGVzLFxuXHRcdFx0XHRcdFx0XHR0YXJnZXQsXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0c0NvbmZpZyxcblx0XHRcdFx0XHRcdFx0XHR1c2VyQ29uZmlnLFxuXHRcdFx0XHRcdFx0XHRcdGFsaWFzUGF0aHMsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHByb2plY3QsXG5cdFx0XHRcdFx0XHRcdG9uT3V0cHV0LFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlcy5mbGF0KCk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXG5cdFx0Y29uc3QgZmxhdCA9IHJlc3BvbnNlcy5mbGF0KCk7XG5cdFx0dGhpcy5jYWNoZU91dHB1dHMoZmxhdCk7XG5cdFx0cmV0dXJuIGZsYXQ7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgdHJhbnNmb3JtRmlsZShcblx0XHRmaWxlQXJyYXlMaWtlOiBGaWxlRXhbXSB8IEZpbGVFeCxcblx0XHRidWlsZFRhcmdldDogVHJhbnNwaWxlVGFyZ2V0LFxuXHRcdG9wdGlvbnM6IFRyYW5zcGlsZU9wdGlvbnMgPSB7fSxcblx0KSB7XG5cdFx0Y29uc3QgZmlsZXMgPSBBcnJheS5pc0FycmF5KGZpbGVBcnJheUxpa2UpID8gZmlsZUFycmF5TGlrZSA6IFtmaWxlQXJyYXlMaWtlXTtcblx0XHRjb25zdCByZXNwb25zZXMgPSB0aGlzLnRyYW5zZm9ybVRhcmdldChmaWxlcywgYnVpbGRUYXJnZXQsIG9wdGlvbnMpO1xuXHRcdHJldHVybiByZXNwb25zZXM7XG5cdH1cblxuXHQvKipcblx0ICogU3luY2hyb25vdXMsIHNpbmdsZS1maWxlIHZhcmlhbnQgb2YgYHRyYW5zZm9ybUZpbGVgLlxuXHQgKiBSZWFkcyB0aGUgZmlsZSB3aXRoIGBmcy5yZWFkRmlsZVN5bmNgIGFuZCB0cmFuc3BpbGVzIHZpYSBgc3djLnRyYW5zZm9ybVN5bmNgLlxuXHQgKiBJbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0IGNhbm5vdCBhd2FpdCAoZS5nLiBOb2RlLmpzIGByZWdpc3Rlckhvb2tzYCBsb2FkIGhvb2spLlxuXHQgKi9cblx0cHVibGljIHRyYW5zZm9ybUZpbGVTeW5jKFxuXHRcdGZpbGU6IEZpbGVFeCxcblx0XHRidWlsZFRhcmdldDogVHJhbnNwaWxlVGFyZ2V0LFxuXHRcdG9wdGlvbnM6IFRyYW5zcGlsZU9wdGlvbnMgPSB7fSxcblx0KTogVHJhbnNmb3JtUmVzcG9uc2Uge1xuXHRcdGNvbnN0IGJhc2VDb25maWcgPSB0aGlzLiNzd2NDb25maWdGYWN0b3J5LmNyZWF0ZUJhc2VDb25maWcoYnVpbGRUYXJnZXQsIG9wdGlvbnMpO1xuXHRcdGNvbnN0IHN3Y09wdGlvbnMgPSB0aGlzLiNzd2NDb25maWdGYWN0b3J5LmNyZWF0ZUZpbGVDb25maWcoZmlsZSwgYmFzZUNvbmZpZyk7XG5cblx0XHRsZXQgY29udGVudDogc3RyaW5nO1xuXHRcdHRyeSB7XG5cdFx0XHRjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUuZnVsbFBhdGgsIFwidXRmOFwiKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0cmV0dXJuIFRyYW5zZm9ybVJlc3BvbnNlLkVycm9yKHtcblx0XHRcdFx0ZmlsZSxcblx0XHRcdFx0bWVzc2FnZXM6IFtTdHJpbmcoZXJyb3IpXSxcblx0XHRcdFx0Y29uZmlnOiBzd2NPcHRpb25zLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRlbnQgPT09IFwiXCIpIHtcblx0XHRcdHJldHVybiBUcmFuc2Zvcm1SZXNwb25zZS5Ta2lwcGVkKHtcblx0XHRcdFx0ZmlsZSxcblx0XHRcdFx0bWVzc2FnZXM6IFwiRmlsZSBpcyBlbXB0eVwiLFxuXHRcdFx0XHRjb25maWc6IHN3Y09wdGlvbnMsXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1TeW5jKGNvbnRlbnQsIHN3Y09wdGlvbnMpO1xuXHRcdFx0aWYgKHRyYW5zZm9ybWVkID09IG51bGwpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic3djLnRyYW5zZm9ybVN5bmMgcmV0dXJuZWQgbm8gcmVzdWx0XCIpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZmlsZVBhdGggPSBmaWxlLnJlbGF0aXZlUGF0aDtcblx0XHRcdGNvbnN0IGV4dE5hbWUgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xuXHRcdFx0Y29uc3QgZmlsZU5hbWUgPSBmaWxlUGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXh0TmFtZX0kYCksIFwiLmpzXCIpO1xuXHRcdFx0cmV0dXJuIFRyYW5zZm9ybVJlc3BvbnNlLlN1Y2Nlc3Moe1xuXHRcdFx0XHRmaWxlLFxuXHRcdFx0XHRjb2RlOiB0cmFuc2Zvcm1lZC5jb2RlLFxuXHRcdFx0XHR0YXJnZXQ6IGJ1aWxkVGFyZ2V0LFxuXHRcdFx0XHRmaWxlTmFtZSxcblx0XHRcdFx0Y29uZmlnOiBzd2NPcHRpb25zLFxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHJldHVybiBUcmFuc2Zvcm1SZXNwb25zZS5FcnJvcih7XG5cdFx0XHRcdGZpbGUsXG5cdFx0XHRcdG1lc3NhZ2VzOiBbU3RyaW5nKGVycm9yKV0sXG5cdFx0XHRcdGNvbmZpZzogc3djT3B0aW9ucyxcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgdHJhbnNmb3JtVGFyZ2V0KFxuXHRcdGZpbGVzOiBGaWxlRXhbXSxcblx0XHRidWlsZFRhcmdldDogVHJhbnNwaWxlVGFyZ2V0LFxuXHRcdG9wdGlvbnM/OiBUcmFuc3BpbGVPcHRpb25zLFxuXHRcdHByb2plY3Q/OiBQcm9qZWN0LFxuXHRcdG9uT3V0cHV0PzogKHJlc3BvbnNlOiBUcmFuc2Zvcm1SZXNwb25zZSkgPT4gdm9pZCxcblx0KSB7XG5cdFx0Y29uc3QgYmFzZUNvbmZpZyA9IHRoaXMuI3N3Y0NvbmZpZ0ZhY3RvcnkuY3JlYXRlQmFzZUNvbmZpZyhidWlsZFRhcmdldCwgb3B0aW9ucyA/PyB7fSk7XG5cdFx0cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0ZmlsZXMubWFwKChmaWxlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHN3Y09wdGlvbnMgPSB0aGlzLiNzd2NDb25maWdGYWN0b3J5LmNyZWF0ZUZpbGVDb25maWcoZmlsZSwgYmFzZUNvbmZpZyk7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJ1blRyYW5zZm9ybShmaWxlLCBidWlsZFRhcmdldCwgc3djT3B0aW9ucywgcHJvamVjdCwgb25PdXRwdXQpO1xuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgcnVuVHJhbnNmb3JtKFxuXHRcdGZpbGU6IEZpbGVFeCxcblx0XHR0YXJnZXQ6IEJ1aWxkVGFyZ2V0LFxuXHRcdHN3Y09wdGlvbnM6IE9wdGlvbnMsXG5cdFx0cHJvamVjdD86IFByb2plY3QsXG5cdFx0b25PdXRwdXQ/OiAocmVzcG9uc2U6IFRyYW5zZm9ybVJlc3BvbnNlKSA9PiB2b2lkLFxuXHQpOiBQcm9taXNlPFRyYW5zZm9ybVJlc3BvbnNlPiB7XG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMuZ2V0RmlsZUNvbnRlbnQoZmlsZSk7XG5cdFx0aWYgKGNvbnRlbnQgPT09IFwiXCIpIHtcblx0XHRcdGNvbnN0IHNraXBwZWQgPSBUcmFuc2Zvcm1SZXNwb25zZS5Ta2lwcGVkKHtcblx0XHRcdFx0ZmlsZSxcblx0XHRcdFx0bWVzc2FnZXM6IFwiRmlsZSBpcyBlbXB0eVwiLFxuXHRcdFx0XHRjb25maWc6IHN3Y09wdGlvbnMsXG5cdFx0XHRcdHByb2plY3QsXG5cdFx0XHR9KTtcblx0XHRcdG9uT3V0cHV0Py4oc2tpcHBlZCk7XG5cdFx0XHRyZXR1cm4gc2tpcHBlZDtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZmlsZVBhdGggPSBmaWxlLnJlbGF0aXZlUGF0aDtcblx0XHRcdGNvbnN0IGV4dE5hbWUgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xuXHRcdFx0Y29uc3QgZmlsZU5hbWUgPSBmaWxlUGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXh0TmFtZX0kYCksIFwiLmpzXCIpO1xuXHRcdFx0Y29uc3Qgb3V0QmFzZURpciA9IHByb2plY3Q/LmdldE91dERpcih0YXJnZXQpO1xuXHRcdFx0Y29uc3Qgb3V0cHV0UGF0aCA9IG91dEJhc2VEaXIgPyBwYXRoLmpvaW4ob3V0QmFzZURpciwgZmlsZU5hbWUpIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3Qgb3V0cHV0RGlyID0gb3V0cHV0UGF0aCA/IHBhdGguZGlybmFtZShvdXRwdXRQYXRoKSA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IHRyYW5zZm9ybWVkID0gYXdhaXQgdHJhbnNmb3JtKGNvbnRlbnQsIHN3Y09wdGlvbnMpO1xuXHRcdFx0aWYgKHRyYW5zZm9ybWVkID09IG51bGwpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic3djLnRyYW5zZm9ybSByZXR1cm5lZCBubyByZXN1bHRcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHN1Y2Nlc3MgPSBUcmFuc2Zvcm1SZXNwb25zZS5TdWNjZXNzKHtcblx0XHRcdFx0ZmlsZSxcblx0XHRcdFx0Y29kZTogdHJhbnNmb3JtZWQuY29kZSxcblx0XHRcdFx0dGFyZ2V0LFxuXHRcdFx0XHRmaWxlTmFtZSxcblx0XHRcdFx0b3V0cHV0RGlyLFxuXHRcdFx0XHRvdXRwdXRQYXRoLFxuXHRcdFx0XHRjb25maWc6IHN3Y09wdGlvbnMsXG5cdFx0XHRcdHByb2plY3QsXG5cdFx0XHR9KTtcblx0XHRcdG9uT3V0cHV0Py4oc3VjY2Vzcyk7XG5cdFx0XHRyZXR1cm4gc3VjY2Vzcztcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc3QgZmFpbHVyZSA9IFRyYW5zZm9ybVJlc3BvbnNlLkVycm9yKHtcblx0XHRcdFx0ZmlsZSxcblx0XHRcdFx0bWVzc2FnZXM6IFtTdHJpbmcoZXJyb3IpXSxcblx0XHRcdFx0Y29uZmlnOiBzd2NPcHRpb25zLFxuXHRcdFx0XHRwcm9qZWN0LFxuXHRcdFx0fSk7XG5cdFx0XHRvbk91dHB1dD8uKGZhaWx1cmUpO1xuXHRcdFx0cmV0dXJuIGZhaWx1cmU7XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIGFzeW5jIG9uSW5jcmVtZW50YWxGaWxlRXZlbnQoZXZ0OiBQcm9qZWN0RmlsZUV2ZW50KTogUHJvbWlzZTxUcmFuc2Zvcm1SZXNwb25zZVtdPiB7XG5cdFx0Y29uc3QgeyBmaWxlLCBwcm9qZWN0IH0gPSBldnQ7XG5cdFx0aWYgKGV2dC5ldmVudE5hbWUgPT09IGlvLldhdGNoRXZlbnRzLnVubGluaykge1xuXHRcdFx0dGhpcy5kZWxldGVDYWNoZWRPdXRwdXRzKGZpbGUuZnVsbFBhdGgpO1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRpZiAoIXByb2plY3QuaXNTb3VyY2VGaWxlKGZpbGUpKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdHRoaXMuaW52YWxpZGF0ZUNvbnRlbnRDYWNoZShmaWxlKTtcblx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1Qcm9qZWN0KHByb2plY3QsICgpID0+IFByb21pc2UucmVzb2x2ZShbZmlsZV0pKTtcblx0fVxuXG5cdEBpbnZhbGlkYXRlQ2FjaGUoU3djVHJhbnNwaWxlci5wcm90b3R5cGUuZ2V0RmlsZUNvbnRlbnQsIHtcblx0XHRuYW1lOiBcIkZJTEVfQ09OVEVOVFwiLFxuXHRcdGtleUZuOiAoLi4uYXJncykgPT4gKGFyZ3NbMF0gYXMgRmlsZUV4KS5mdWxsUGF0aCxcblx0fSlcblx0cHVibGljIGludmFsaWRhdGVDb250ZW50Q2FjaGUoX2ZpbGU6IEZpbGVFeCk6IHZvaWQge31cblxuXHRAY2FjaGUoeyBuYW1lOiBcIkZJTEVfQ09OVEVOVFwiLCBrZXlGbjogKC4uLmFyZ3MpID0+IChhcmdzWzBdIGFzIEZpbGVFeCkuZnVsbFBhdGggfSlcblx0cHJpdmF0ZSBnZXRGaWxlQ29udGVudChmaWxlOiBGaWxlRXgpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBmaWxlLmdldENvbnRlbnQoKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlN3Y1RyYW5zcGlsZXIiLCJtaXh3aXRoIiwiQ2FjaGVzT3V0cHV0cyIsIkluY3JlbWVudGFsVHJhbnNmb3JtIiwiYnVpbGRUYXJnZXRzIiwiQnVpbGRUYXJnZXRzIiwiZXM2IiwiY29tbW9uanMiLCJTd2NDb25maWdGYWN0b3J5IiwidHJhbnNmb3JtUHJvamVjdCIsInByb2plY3RBcnJheUxpa2UiLCJmaWxlRmlsdGVyIiwib25PdXRwdXQiLCJwcm9qZWN0cyIsIkFycmF5IiwiaXNBcnJheSIsInJlc3BvbnNlcyIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJwcm9qZWN0IiwidGFyZ2V0cyIsImFsaWFzUGF0aHMiLCJnZXRGb3JnZUNvbmZpZ3VyYXRpb24iLCJ0cmFuc3BpbGVUYXJnZXRzIiwiZmlsdGVyIiwiYnQiLCJ0eXBlcyIsImxlbmd0aCIsInNvdXJjZUZpbGVzIiwiZ2V0QWxsRmlsZXMiLCJ0c0NvbmZpZyIsImdldFRzQ29uZmlnIiwidXNlckNvbmZpZyIsImdldFN3Y0NvbmZpZyIsInRhcmdldCIsInRyYW5zZm9ybVRhcmdldCIsImZsYXQiLCJjYWNoZU91dHB1dHMiLCJ0cmFuc2Zvcm1GaWxlIiwiZmlsZUFycmF5TGlrZSIsImJ1aWxkVGFyZ2V0Iiwib3B0aW9ucyIsImZpbGVzIiwidHJhbnNmb3JtRmlsZVN5bmMiLCJmaWxlIiwiYmFzZUNvbmZpZyIsImNyZWF0ZUJhc2VDb25maWciLCJzd2NPcHRpb25zIiwiY3JlYXRlRmlsZUNvbmZpZyIsImNvbnRlbnQiLCJmcyIsInJlYWRGaWxlU3luYyIsImZ1bGxQYXRoIiwiZXJyb3IiLCJUcmFuc2Zvcm1SZXNwb25zZSIsIkVycm9yIiwibWVzc2FnZXMiLCJTdHJpbmciLCJjb25maWciLCJTa2lwcGVkIiwidHJhbnNmb3JtZWQiLCJ0cmFuc2Zvcm1TeW5jIiwiZmlsZVBhdGgiLCJyZWxhdGl2ZVBhdGgiLCJleHROYW1lIiwicGF0aCIsImV4dG5hbWUiLCJmaWxlTmFtZSIsInJlcGxhY2UiLCJSZWdFeHAiLCJTdWNjZXNzIiwiY29kZSIsInJ1blRyYW5zZm9ybSIsImdldEZpbGVDb250ZW50Iiwic2tpcHBlZCIsIm91dEJhc2VEaXIiLCJnZXRPdXREaXIiLCJvdXRwdXRQYXRoIiwiam9pbiIsInVuZGVmaW5lZCIsIm91dHB1dERpciIsImRpcm5hbWUiLCJ0cmFuc2Zvcm0iLCJzdWNjZXNzIiwiZmFpbHVyZSIsIm9uSW5jcmVtZW50YWxGaWxlRXZlbnQiLCJldnQiLCJldmVudE5hbWUiLCJpbyIsIldhdGNoRXZlbnRzIiwidW5saW5rIiwiZGVsZXRlQ2FjaGVkT3V0cHV0cyIsImlzU291cmNlRmlsZSIsImludmFsaWRhdGVDb250ZW50Q2FjaGUiLCJyZXNvbHZlIiwiX2ZpbGUiLCJnZXRDb250ZW50IiwicHJvdG90eXBlIiwibmFtZSIsImtleUZuIiwiYXJncyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkE4QmFBOzs7ZUFBQUE7OzsrREE5QkU7aUVBQ0U7eUJBRXNCOzZCQUNqQjsrQkFDRTtvQkFFTDtzQkFDb0M7aUNBS2hEO1FBQ0E7a0NBRTBCO29DQUNIOzJDQUNPO3dDQUVIOzs7Ozs7Ozs7Ozs7Ozs7QUFVM0IsTUFBTUEsc0JBQ0pDLElBQUFBLHNCQUFPLEVBQUNDLGlDQUFhLEVBQUVDLCtDQUFvQjtJQUc1Q0MsZUFBOEI7UUFBQ0MsNkJBQVksQ0FBQ0MsR0FBRztRQUFFRCw2QkFBWSxDQUFDRSxRQUFRO0tBQUMsQ0FBQztJQUMvRSxDQUFBLGdCQUFpQixHQUFHLElBQUlDLGtDQUFnQixHQUFHO0lBRTNDLE1BQWFDLGlCQUNaQyxnQkFBcUMsRUFDckNDLFVBQW9ELEVBQ3BEQyxRQUFnRCxFQUNqQjtRQUMvQixNQUFNQyxXQUFXQyxNQUFNQyxPQUFPLENBQUNMLG9CQUFvQkEsbUJBQW1CO1lBQUNBO1NBQWlCO1FBQ3hGLE1BQU1NLFlBQVksTUFBTUMsUUFBUUMsR0FBRyxDQUNsQ0wsU0FBU00sR0FBRyxDQUFDLE9BQU9DO1lBQ25CLE1BQU0sRUFBRUMsT0FBTyxFQUFFQyxVQUFVLEVBQUUsR0FBR0YsUUFBUUcscUJBQXFCO1lBQzdELE1BQU1DLG1CQUFtQkgsUUFBUUksTUFBTSxDQUFDLENBQUNDLEtBQU9BLE9BQU9yQiw2QkFBWSxDQUFDc0IsS0FBSztZQUN6RSxJQUFJSCxpQkFBaUJJLE1BQU0sS0FBSyxHQUFHO2dCQUNsQyxPQUFPLEVBQUU7WUFDVjtZQUVBLE1BQU1DLGNBQWMsTUFBT2xCLENBQUFBLGFBQWFTLFlBQVlBLFFBQVFVLFdBQVcsRUFBQztZQUN4RSxNQUFNQyxXQUFXLE1BQU1YLFFBQVFZLFdBQVc7WUFDMUMsTUFBTUMsYUFBYSxNQUFNYixRQUFRYyxZQUFZO1lBQzdDLE1BQU1sQixZQUFZLE1BQU1DLFFBQVFDLEdBQUcsQ0FDbENNLGlCQUFpQkwsR0FBRyxDQUFDLENBQUNnQjtnQkFDckIsT0FBTyxJQUFJLENBQUNDLGVBQWUsQ0FDMUJQLGFBQ0FNLFFBQ0E7b0JBQ0NKO29CQUNBRTtvQkFDQVg7Z0JBQ0QsR0FDQUYsU0FDQVI7WUFFRjtZQUVELE9BQU9JLFVBQVVxQixJQUFJO1FBQ3RCO1FBR0QsTUFBTUEsT0FBT3JCLFVBQVVxQixJQUFJO1FBQzNCLElBQUksQ0FBQ0MsWUFBWSxDQUFDRDtRQUNsQixPQUFPQTtJQUNSO0lBRUEsTUFBYUUsY0FDWkMsYUFBZ0MsRUFDaENDLFdBQTRCLEVBQzVCQyxVQUE0QixDQUFDLENBQUMsRUFDN0I7UUFDRCxNQUFNQyxRQUFRN0IsTUFBTUMsT0FBTyxDQUFDeUIsaUJBQWlCQSxnQkFBZ0I7WUFBQ0E7U0FBYztRQUM1RSxNQUFNeEIsWUFBWSxJQUFJLENBQUNvQixlQUFlLENBQUNPLE9BQU9GLGFBQWFDO1FBQzNELE9BQU8xQjtJQUNSO0lBRUE7Ozs7RUFJQyxHQUNELEFBQU80QixrQkFDTkMsSUFBWSxFQUNaSixXQUE0QixFQUM1QkMsVUFBNEIsQ0FBQyxDQUFDLEVBQ1Y7UUFDcEIsTUFBTUksYUFBYSxJQUFJLENBQUMsQ0FBQSxnQkFBaUIsQ0FBQ0MsZ0JBQWdCLENBQUNOLGFBQWFDO1FBQ3hFLE1BQU1NLGFBQWEsSUFBSSxDQUFDLENBQUEsZ0JBQWlCLENBQUNDLGdCQUFnQixDQUFDSixNQUFNQztRQUVqRSxJQUFJSTtRQUNKLElBQUk7WUFDSEEsVUFBVUMsZUFBRSxDQUFDQyxZQUFZLENBQUNQLEtBQUtRLFFBQVEsRUFBRTtRQUMxQyxFQUFFLE9BQU9DLE9BQU87WUFDZixPQUFPQyx5Q0FBaUIsQ0FBQ0MsS0FBSyxDQUFDO2dCQUM5Qlg7Z0JBQ0FZLFVBQVU7b0JBQUNDLE9BQU9KO2lCQUFPO2dCQUN6QkssUUFBUVg7WUFDVDtRQUNEO1FBRUEsSUFBSUUsWUFBWSxJQUFJO1lBQ25CLE9BQU9LLHlDQUFpQixDQUFDSyxPQUFPLENBQUM7Z0JBQ2hDZjtnQkFDQVksVUFBVTtnQkFDVkUsUUFBUVg7WUFDVDtRQUNEO1FBRUEsSUFBSTtZQUNILE1BQU1hLGNBQWNDLElBQUFBLG1CQUFhLEVBQUNaLFNBQVNGO1lBQzNDLElBQUlhLGVBQWUsTUFBTTtnQkFDeEIsTUFBTSxJQUFJTCxNQUFNO1lBQ2pCO1lBQ0EsTUFBTU8sV0FBV2xCLEtBQUttQixZQUFZO1lBQ2xDLE1BQU1DLFVBQVVDLGlCQUFJLENBQUNDLE9BQU8sQ0FBQ0o7WUFDN0IsTUFBTUssV0FBV0wsU0FBU00sT0FBTyxDQUFDLElBQUlDLE9BQU8sR0FBR0wsUUFBUSxDQUFDLENBQUMsR0FBRztZQUM3RCxPQUFPVix5Q0FBaUIsQ0FBQ2dCLE9BQU8sQ0FBQztnQkFDaEMxQjtnQkFDQTJCLE1BQU1YLFlBQVlXLElBQUk7Z0JBQ3RCckMsUUFBUU07Z0JBQ1IyQjtnQkFDQVQsUUFBUVg7WUFDVDtRQUNELEVBQUUsT0FBT00sT0FBTztZQUNmLE9BQU9DLHlDQUFpQixDQUFDQyxLQUFLLENBQUM7Z0JBQzlCWDtnQkFDQVksVUFBVTtvQkFBQ0MsT0FBT0o7aUJBQU87Z0JBQ3pCSyxRQUFRWDtZQUNUO1FBQ0Q7SUFDRDtJQUVBLE1BQWNaLGdCQUNiTyxLQUFlLEVBQ2ZGLFdBQTRCLEVBQzVCQyxPQUEwQixFQUMxQnRCLE9BQWlCLEVBQ2pCUixRQUFnRCxFQUMvQztRQUNELE1BQU1rQyxhQUFhLElBQUksQ0FBQyxDQUFBLGdCQUFpQixDQUFDQyxnQkFBZ0IsQ0FBQ04sYUFBYUMsV0FBVyxDQUFDO1FBQ3BGLE9BQU8sTUFBTXpCLFFBQVFDLEdBQUcsQ0FDdkJ5QixNQUFNeEIsR0FBRyxDQUFDLENBQUMwQjtZQUNWLE1BQU1HLGFBQWEsSUFBSSxDQUFDLENBQUEsZ0JBQWlCLENBQUNDLGdCQUFnQixDQUFDSixNQUFNQztZQUNqRSxPQUFPLElBQUksQ0FBQzJCLFlBQVksQ0FBQzVCLE1BQU1KLGFBQWFPLFlBQVk1QixTQUFTUjtRQUNsRTtJQUVGO0lBRUEsTUFBYzZELGFBQ2I1QixJQUFZLEVBQ1pWLE1BQW1CLEVBQ25CYSxVQUFtQixFQUNuQjVCLE9BQWlCLEVBQ2pCUixRQUFnRCxFQUNuQjtRQUM3QixNQUFNc0MsVUFBVSxNQUFNLElBQUksQ0FBQ3dCLGNBQWMsQ0FBQzdCO1FBQzFDLElBQUlLLFlBQVksSUFBSTtZQUNuQixNQUFNeUIsVUFBVXBCLHlDQUFpQixDQUFDSyxPQUFPLENBQUM7Z0JBQ3pDZjtnQkFDQVksVUFBVTtnQkFDVkUsUUFBUVg7Z0JBQ1I1QjtZQUNEO1lBQ0FSLFdBQVcrRDtZQUNYLE9BQU9BO1FBQ1I7UUFFQSxJQUFJO1lBQ0gsTUFBTVosV0FBV2xCLEtBQUttQixZQUFZO1lBQ2xDLE1BQU1DLFVBQVVDLGlCQUFJLENBQUNDLE9BQU8sQ0FBQ0o7WUFDN0IsTUFBTUssV0FBV0wsU0FBU00sT0FBTyxDQUFDLElBQUlDLE9BQU8sR0FBR0wsUUFBUSxDQUFDLENBQUMsR0FBRztZQUM3RCxNQUFNVyxhQUFheEQsU0FBU3lELFVBQVUxQztZQUN0QyxNQUFNMkMsYUFBYUYsYUFBYVYsaUJBQUksQ0FBQ2EsSUFBSSxDQUFDSCxZQUFZUixZQUFZWTtZQUNsRSxNQUFNQyxZQUFZSCxhQUFhWixpQkFBSSxDQUFDZ0IsT0FBTyxDQUFDSixjQUFjRTtZQUMxRCxNQUFNbkIsY0FBYyxNQUFNc0IsSUFBQUEsZUFBUyxFQUFDakMsU0FBU0Y7WUFDN0MsSUFBSWEsZUFBZSxNQUFNO2dCQUN4QixNQUFNLElBQUlMLE1BQU07WUFDakI7WUFFQSxNQUFNNEIsVUFBVTdCLHlDQUFpQixDQUFDZ0IsT0FBTyxDQUFDO2dCQUN6QzFCO2dCQUNBMkIsTUFBTVgsWUFBWVcsSUFBSTtnQkFDdEJyQztnQkFDQWlDO2dCQUNBYTtnQkFDQUg7Z0JBQ0FuQixRQUFRWDtnQkFDUjVCO1lBQ0Q7WUFDQVIsV0FBV3dFO1lBQ1gsT0FBT0E7UUFDUixFQUFFLE9BQU85QixPQUFPO1lBQ2YsTUFBTStCLFVBQVU5Qix5Q0FBaUIsQ0FBQ0MsS0FBSyxDQUFDO2dCQUN2Q1g7Z0JBQ0FZLFVBQVU7b0JBQUNDLE9BQU9KO2lCQUFPO2dCQUN6QkssUUFBUVg7Z0JBQ1I1QjtZQUNEO1lBQ0FSLFdBQVd5RTtZQUNYLE9BQU9BO1FBQ1I7SUFDRDtJQUVBLE1BQWdCQyx1QkFBdUJDLEdBQXFCLEVBQWdDO1FBQzNGLE1BQU0sRUFBRTFDLElBQUksRUFBRXpCLE9BQU8sRUFBRSxHQUFHbUU7UUFDMUIsSUFBSUEsSUFBSUMsU0FBUyxLQUFLQyxNQUFFLENBQUNDLFdBQVcsQ0FBQ0MsTUFBTSxFQUFFO1lBQzVDLElBQUksQ0FBQ0MsbUJBQW1CLENBQUMvQyxLQUFLUSxRQUFRO1lBQ3RDLE9BQU8sRUFBRTtRQUNWO1FBQ0EsSUFBSSxDQUFDakMsUUFBUXlFLFlBQVksQ0FBQ2hELE9BQU87WUFDaEMsT0FBTyxFQUFFO1FBQ1Y7UUFDQSxJQUFJLENBQUNpRCxzQkFBc0IsQ0FBQ2pEO1FBQzVCLE9BQU8sSUFBSSxDQUFDcEMsZ0JBQWdCLENBQUNXLFNBQVMsSUFBTUgsUUFBUThFLE9BQU8sQ0FBQztnQkFBQ2xEO2FBQUs7SUFDbkU7SUFNT2lELHVCQUF1QkUsS0FBYSxFQUFRLENBQUM7SUFHNUN0QixlQUFlN0IsSUFBWSxFQUFtQjtRQUNyRCxPQUFPQSxLQUFLb0QsVUFBVTtJQUN2QjtBQUNEOztnREFWZ0NDLFVBQVV4QjtRQUN4Q3lCLE1BQU07UUFDTkMsT0FBTyxDQUFDLEdBQUdDLE9BQVMsQUFBQ0EsSUFBSSxDQUFDLEVBQUUsQ0FBWWhELFFBQVE7Ozs7OzsyQ0FFSDs7OztRQUVyQzhDLE1BQU07UUFBZ0JDLE9BQU8sQ0FBQyxHQUFHQyxPQUFTLEFBQUNBLElBQUksQ0FBQyxFQUFFLENBQVloRCxRQUFRIn0=
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "TsProgramHost", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return TsProgramHost;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _nodefs = /*#__PURE__*/ _interop_require_default(require("node:fs"));
|
|
12
|
+
const _caching = require("@decohere/nexus/caching");
|
|
13
|
+
const _diagnostics = require("@decohere/nexus/diagnostics");
|
|
14
|
+
const _typescript = require("typescript");
|
|
15
|
+
const _typeemitter = require("./type-emitter.js");
|
|
16
|
+
function _interop_require_default(obj) {
|
|
17
|
+
return obj && obj.__esModule ? obj : {
|
|
18
|
+
default: obj
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
22
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
23
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
24
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
25
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
26
|
+
}
|
|
27
|
+
function _ts_metadata(k, v) {
|
|
28
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
29
|
+
}
|
|
30
|
+
class TsProgramHost {
|
|
31
|
+
#invalidated = new Set();
|
|
32
|
+
invalidateSourceFile(fileName) {
|
|
33
|
+
this.#invalidated.add(fileName);
|
|
34
|
+
}
|
|
35
|
+
hasInvalidated() {
|
|
36
|
+
return this.#invalidated.size > 0;
|
|
37
|
+
}
|
|
38
|
+
/** Returns a stable string key for a set of compiler options that affect host behaviour. */ hostKey(opts) {
|
|
39
|
+
return JSON.stringify({
|
|
40
|
+
target: opts.target,
|
|
41
|
+
lib: opts.lib,
|
|
42
|
+
typeRoots: opts.typeRoots,
|
|
43
|
+
types: opts.types,
|
|
44
|
+
moduleResolution: opts.moduleResolution,
|
|
45
|
+
baseUrl: opts.baseUrl,
|
|
46
|
+
paths: opts.paths,
|
|
47
|
+
module: opts.module,
|
|
48
|
+
rootDir: opts.rootDir,
|
|
49
|
+
rootDirs: opts.rootDirs
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
createHost(compilerOptions) {
|
|
53
|
+
const host = (0, _typescript.createCompilerHost)(compilerOptions);
|
|
54
|
+
host.fileExists = (fileName)=>this.fileExistsOnDisk(fileName);
|
|
55
|
+
host.readFile = (fileName)=>this.readFileFromDisk(fileName);
|
|
56
|
+
host.directoryExists = (directoryName)=>this.directoryExists(directoryName);
|
|
57
|
+
host.getDirectories = (directoryName)=>this.getDirectories(directoryName);
|
|
58
|
+
return host;
|
|
59
|
+
}
|
|
60
|
+
createProgram(files, compilerOptions, host, oldProgram) {
|
|
61
|
+
const filePaths = files.map((f)=>f.fullPath);
|
|
62
|
+
this.#invalidated.clear();
|
|
63
|
+
return (0, _typescript.createProgram)(filePaths, {
|
|
64
|
+
..._typeemitter.DEFAULT_TYPE_EMITTER_OPTIONS,
|
|
65
|
+
...compilerOptions,
|
|
66
|
+
..._typeemitter.REQUIRED_TYPE_EMITTER_OPTIONS
|
|
67
|
+
}, host, oldProgram);
|
|
68
|
+
}
|
|
69
|
+
readFileFromDisk(fileName) {
|
|
70
|
+
try {
|
|
71
|
+
return _nodefs.default.readFileSync(fileName, "utf8");
|
|
72
|
+
} catch {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
fileExistsOnDisk(fileName) {
|
|
77
|
+
return _nodefs.default.existsSync(fileName);
|
|
78
|
+
}
|
|
79
|
+
directoryExists(directoryName) {
|
|
80
|
+
try {
|
|
81
|
+
return _nodefs.default.statSync(directoryName).isDirectory();
|
|
82
|
+
} catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
getDirectories(directoryName) {
|
|
87
|
+
try {
|
|
88
|
+
return _nodefs.default.readdirSync(directoryName, {
|
|
89
|
+
withFileTypes: true
|
|
90
|
+
}).filter((entry)=>entry.isDirectory()).map((entry)=>entry.name);
|
|
91
|
+
} catch {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
_ts_decorate([
|
|
97
|
+
(0, _caching.cache)({
|
|
98
|
+
name: "FILE_CONTENT",
|
|
99
|
+
keyFn: (...args)=>args[0]
|
|
100
|
+
}),
|
|
101
|
+
_ts_metadata("design:type", Function),
|
|
102
|
+
_ts_metadata("design:paramtypes", [
|
|
103
|
+
String
|
|
104
|
+
]),
|
|
105
|
+
_ts_metadata("design:returntype", Object)
|
|
106
|
+
], TsProgramHost.prototype, "readFileFromDisk", null);
|
|
107
|
+
_ts_decorate([
|
|
108
|
+
(0, _caching.cache)(),
|
|
109
|
+
_ts_metadata("design:type", Function),
|
|
110
|
+
_ts_metadata("design:paramtypes", [
|
|
111
|
+
String
|
|
112
|
+
]),
|
|
113
|
+
_ts_metadata("design:returntype", Boolean)
|
|
114
|
+
], TsProgramHost.prototype, "fileExistsOnDisk", null);
|
|
115
|
+
_ts_decorate([
|
|
116
|
+
(0, _caching.cache)(),
|
|
117
|
+
_ts_metadata("design:type", Function),
|
|
118
|
+
_ts_metadata("design:paramtypes", [
|
|
119
|
+
String
|
|
120
|
+
]),
|
|
121
|
+
_ts_metadata("design:returntype", Boolean)
|
|
122
|
+
], TsProgramHost.prototype, "directoryExists", null);
|
|
123
|
+
_ts_decorate([
|
|
124
|
+
(0, _caching.cache)(),
|
|
125
|
+
_ts_metadata("design:type", Function),
|
|
126
|
+
_ts_metadata("design:paramtypes", [
|
|
127
|
+
String
|
|
128
|
+
]),
|
|
129
|
+
_ts_metadata("design:returntype", Array)
|
|
130
|
+
], TsProgramHost.prototype, "getDirectories", null);
|
|
131
|
+
TsProgramHost = _ts_decorate([
|
|
132
|
+
_diagnostics.Trace
|
|
133
|
+
], TsProgramHost);
|
|
134
|
+
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9zZXJ2aWNlcy90cy1wcm9ncmFtLWhvc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBjYWNoZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2FjaGluZ1wiO1xuaW1wb3J0IHsgVHJhY2UgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2RpYWdub3N0aWNzXCI7XG5pbXBvcnQgdHlwZSB7IEZpbGVFeCB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW9cIjtcbmltcG9ydCB0eXBlIHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyBjcmVhdGVDb21waWxlckhvc3QsIGNyZWF0ZVByb2dyYW0gfSBmcm9tIFwidHlwZXNjcmlwdFwiO1xuaW1wb3J0IHtcblx0REVGQVVMVF9UWVBFX0VNSVRURVJfT1BUSU9OUyxcblx0UkVRVUlSRURfVFlQRV9FTUlUVEVSX09QVElPTlMsXG59IGZyb20gXCIuLi9zZXJ2aWNlcy90eXBlLWVtaXR0ZXIuanNcIjtcblxuLyoqXG4gKiBXcmFwcyBhIFR5cGVTY3JpcHQgQ29tcGlsZXJIb3N0IHdpdGggY2FjaGVkIGZpbGUtc3lzdGVtIGNhbGxzIHNvIHRoYXRcbiAqIHJlcGVhdGVkIHJlYWRzIGR1cmluZyBhIHNpbmdsZSBidWlsZCBkbyBub3QgaGl0IHRoZSBkaXNrIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFNlcGFyYXRpbmcgdGhpcyBmcm9tIFR5cGVFbWl0dGVyIGtlZXBzIHRoZSB0cmFuc2Zvcm1lciBsb2dpYyByZWFkYWJsZSBhbmRcbiAqIGxldHMgdGhlIGNhY2hpbmcvcHJvZ3JhbS1jcmVhdGlvbiBjb25jZXJucyBsaXZlIGluIG9uZSBmb2N1c2VkIHBsYWNlLlxuICovXG5AVHJhY2VcbmV4cG9ydCBjbGFzcyBUc1Byb2dyYW1Ib3N0IHtcblx0I2ludmFsaWRhdGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cblx0cHVibGljIGludmFsaWRhdGVTb3VyY2VGaWxlKGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLiNpbnZhbGlkYXRlZC5hZGQoZmlsZU5hbWUpO1xuXHR9XG5cblx0cHVibGljIGhhc0ludmFsaWRhdGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLiNpbnZhbGlkYXRlZC5zaXplID4gMDtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIGEgc3RhYmxlIHN0cmluZyBrZXkgZm9yIGEgc2V0IG9mIGNvbXBpbGVyIG9wdGlvbnMgdGhhdCBhZmZlY3QgaG9zdCBiZWhhdmlvdXIuICovXG5cdHB1YmxpYyBob3N0S2V5KG9wdHM6IHRzLkNvbXBpbGVyT3B0aW9ucyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdHRhcmdldDogb3B0cy50YXJnZXQsXG5cdFx0XHRsaWI6IG9wdHMubGliLFxuXHRcdFx0dHlwZVJvb3RzOiBvcHRzLnR5cGVSb290cyxcblx0XHRcdHR5cGVzOiBvcHRzLnR5cGVzLFxuXHRcdFx0bW9kdWxlUmVzb2x1dGlvbjogb3B0cy5tb2R1bGVSZXNvbHV0aW9uLFxuXHRcdFx0YmFzZVVybDogb3B0cy5iYXNlVXJsLFxuXHRcdFx0cGF0aHM6IG9wdHMucGF0aHMsXG5cdFx0XHRtb2R1bGU6IG9wdHMubW9kdWxlLFxuXHRcdFx0cm9vdERpcjogb3B0cy5yb290RGlyLFxuXHRcdFx0cm9vdERpcnM6IG9wdHMucm9vdERpcnMsXG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlSG9zdChjb21waWxlck9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyk6IHRzLkNvbXBpbGVySG9zdCB7XG5cdFx0Y29uc3QgaG9zdCA9IGNyZWF0ZUNvbXBpbGVySG9zdChjb21waWxlck9wdGlvbnMpO1xuXHRcdGhvc3QuZmlsZUV4aXN0cyA9IChmaWxlTmFtZSkgPT4gdGhpcy5maWxlRXhpc3RzT25EaXNrKGZpbGVOYW1lKTtcblx0XHRob3N0LnJlYWRGaWxlID0gKGZpbGVOYW1lKSA9PiB0aGlzLnJlYWRGaWxlRnJvbURpc2soZmlsZU5hbWUpO1xuXHRcdGhvc3QuZGlyZWN0b3J5RXhpc3RzID0gKGRpcmVjdG9yeU5hbWUpID0+IHRoaXMuZGlyZWN0b3J5RXhpc3RzKGRpcmVjdG9yeU5hbWUpO1xuXHRcdGhvc3QuZ2V0RGlyZWN0b3JpZXMgPSAoZGlyZWN0b3J5TmFtZSkgPT4gdGhpcy5nZXREaXJlY3RvcmllcyhkaXJlY3RvcnlOYW1lKTtcblx0XHRyZXR1cm4gaG9zdDtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVQcm9ncmFtKFxuXHRcdGZpbGVzOiBGaWxlRXhbXSxcblx0XHRjb21waWxlck9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyxcblx0XHRob3N0OiB0cy5Db21waWxlckhvc3QsXG5cdFx0b2xkUHJvZ3JhbT86IHRzLlByb2dyYW0sXG5cdCk6IHRzLlByb2dyYW0ge1xuXHRcdGNvbnN0IGZpbGVQYXRocyA9IGZpbGVzLm1hcCgoZikgPT4gZi5mdWxsUGF0aCk7XG5cdFx0dGhpcy4jaW52YWxpZGF0ZWQuY2xlYXIoKTtcblx0XHRyZXR1cm4gY3JlYXRlUHJvZ3JhbShcblx0XHRcdGZpbGVQYXRocyxcblx0XHRcdHtcblx0XHRcdFx0Li4uREVGQVVMVF9UWVBFX0VNSVRURVJfT1BUSU9OUyxcblx0XHRcdFx0Li4uY29tcGlsZXJPcHRpb25zLFxuXHRcdFx0XHQuLi5SRVFVSVJFRF9UWVBFX0VNSVRURVJfT1BUSU9OUyxcblx0XHRcdH0sXG5cdFx0XHRob3N0LFxuXHRcdFx0b2xkUHJvZ3JhbSxcblx0XHQpO1xuXHR9XG5cblx0QGNhY2hlKHsgbmFtZTogXCJGSUxFX0NPTlRFTlRcIiwga2V5Rm46ICguLi5hcmdzKSA9PiBhcmdzWzBdIGFzIHN0cmluZyB9KVxuXHRwdWJsaWMgcmVhZEZpbGVGcm9tRGlzayhmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGZzLnJlYWRGaWxlU3luYyhmaWxlTmFtZSwgXCJ1dGY4XCIpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRAY2FjaGUoKVxuXHRwdWJsaWMgZmlsZUV4aXN0c09uRGlzayhmaWxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZzLmV4aXN0c1N5bmMoZmlsZU5hbWUpO1xuXHR9XG5cblx0QGNhY2hlKClcblx0cHVibGljIGRpcmVjdG9yeUV4aXN0cyhkaXJlY3RvcnlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGZzLnN0YXRTeW5jKGRpcmVjdG9yeU5hbWUpLmlzRGlyZWN0b3J5KCk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0QGNhY2hlKClcblx0cHVibGljIGdldERpcmVjdG9yaWVzKGRpcmVjdG9yeU5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGZzXG5cdFx0XHRcdC5yZWFkZGlyU3luYyhkaXJlY3RvcnlOYW1lLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSlcblx0XHRcdFx0LmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlzRGlyZWN0b3J5KCkpXG5cdFx0XHRcdC5tYXAoKGVudHJ5KSA9PiBlbnRyeS5uYW1lKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJUc1Byb2dyYW1Ib3N0IiwiU2V0IiwiaW52YWxpZGF0ZVNvdXJjZUZpbGUiLCJmaWxlTmFtZSIsImFkZCIsImhhc0ludmFsaWRhdGVkIiwic2l6ZSIsImhvc3RLZXkiLCJvcHRzIiwiSlNPTiIsInN0cmluZ2lmeSIsInRhcmdldCIsImxpYiIsInR5cGVSb290cyIsInR5cGVzIiwibW9kdWxlUmVzb2x1dGlvbiIsImJhc2VVcmwiLCJwYXRocyIsIm1vZHVsZSIsInJvb3REaXIiLCJyb290RGlycyIsImNyZWF0ZUhvc3QiLCJjb21waWxlck9wdGlvbnMiLCJob3N0IiwiY3JlYXRlQ29tcGlsZXJIb3N0IiwiZmlsZUV4aXN0cyIsImZpbGVFeGlzdHNPbkRpc2siLCJyZWFkRmlsZSIsInJlYWRGaWxlRnJvbURpc2siLCJkaXJlY3RvcnlFeGlzdHMiLCJkaXJlY3RvcnlOYW1lIiwiZ2V0RGlyZWN0b3JpZXMiLCJjcmVhdGVQcm9ncmFtIiwiZmlsZXMiLCJvbGRQcm9ncmFtIiwiZmlsZVBhdGhzIiwibWFwIiwiZiIsImZ1bGxQYXRoIiwiY2xlYXIiLCJERUZBVUxUX1RZUEVfRU1JVFRFUl9PUFRJT05TIiwiUkVRVUlSRURfVFlQRV9FTUlUVEVSX09QVElPTlMiLCJmcyIsInJlYWRGaWxlU3luYyIsInVuZGVmaW5lZCIsImV4aXN0c1N5bmMiLCJzdGF0U3luYyIsImlzRGlyZWN0b3J5IiwicmVhZGRpclN5bmMiLCJ3aXRoRmlsZVR5cGVzIiwiZmlsdGVyIiwiZW50cnkiLCJuYW1lIiwia2V5Rm4iLCJhcmdzIl0sIm1hcHBpbmdzIjoiOzs7OytCQW1CYUE7OztlQUFBQTs7OytEQW5CRTt5QkFDTzs2QkFDQTs0QkFHNEI7NkJBSTNDOzs7Ozs7Ozs7Ozs7Ozs7QUFVQSxNQUFNQTtJQUNaLENBQUEsV0FBWSxHQUFHLElBQUlDLE1BQWM7SUFFMUJDLHFCQUFxQkMsUUFBZ0IsRUFBUTtRQUNuRCxJQUFJLENBQUMsQ0FBQSxXQUFZLENBQUNDLEdBQUcsQ0FBQ0Q7SUFDdkI7SUFFT0UsaUJBQTBCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLENBQUEsV0FBWSxDQUFDQyxJQUFJLEdBQUc7SUFDakM7SUFFQSwwRkFBMEYsR0FDMUYsQUFBT0MsUUFBUUMsSUFBd0IsRUFBVTtRQUNoRCxPQUFPQyxLQUFLQyxTQUFTLENBQUM7WUFDckJDLFFBQVFILEtBQUtHLE1BQU07WUFDbkJDLEtBQUtKLEtBQUtJLEdBQUc7WUFDYkMsV0FBV0wsS0FBS0ssU0FBUztZQUN6QkMsT0FBT04sS0FBS00sS0FBSztZQUNqQkMsa0JBQWtCUCxLQUFLTyxnQkFBZ0I7WUFDdkNDLFNBQVNSLEtBQUtRLE9BQU87WUFDckJDLE9BQU9ULEtBQUtTLEtBQUs7WUFDakJDLFFBQVFWLEtBQUtVLE1BQU07WUFDbkJDLFNBQVNYLEtBQUtXLE9BQU87WUFDckJDLFVBQVVaLEtBQUtZLFFBQVE7UUFDeEI7SUFDRDtJQUVPQyxXQUFXQyxlQUFtQyxFQUFtQjtRQUN2RSxNQUFNQyxPQUFPQyxJQUFBQSw4QkFBa0IsRUFBQ0Y7UUFDaENDLEtBQUtFLFVBQVUsR0FBRyxDQUFDdEIsV0FBYSxJQUFJLENBQUN1QixnQkFBZ0IsQ0FBQ3ZCO1FBQ3REb0IsS0FBS0ksUUFBUSxHQUFHLENBQUN4QixXQUFhLElBQUksQ0FBQ3lCLGdCQUFnQixDQUFDekI7UUFDcERvQixLQUFLTSxlQUFlLEdBQUcsQ0FBQ0MsZ0JBQWtCLElBQUksQ0FBQ0QsZUFBZSxDQUFDQztRQUMvRFAsS0FBS1EsY0FBYyxHQUFHLENBQUNELGdCQUFrQixJQUFJLENBQUNDLGNBQWMsQ0FBQ0Q7UUFDN0QsT0FBT1A7SUFDUjtJQUVPUyxjQUNOQyxLQUFlLEVBQ2ZYLGVBQW1DLEVBQ25DQyxJQUFxQixFQUNyQlcsVUFBdUIsRUFDVjtRQUNiLE1BQU1DLFlBQVlGLE1BQU1HLEdBQUcsQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxRQUFRO1FBQzdDLElBQUksQ0FBQyxDQUFBLFdBQVksQ0FBQ0MsS0FBSztRQUN2QixPQUFPUCxJQUFBQSx5QkFBYSxFQUNuQkcsV0FDQTtZQUNDLEdBQUdLLHlDQUE0QjtZQUMvQixHQUFHbEIsZUFBZTtZQUNsQixHQUFHbUIsMENBQTZCO1FBQ2pDLEdBQ0FsQixNQUNBVztJQUVGO0lBR09OLGlCQUFpQnpCLFFBQWdCLEVBQXNCO1FBQzdELElBQUk7WUFDSCxPQUFPdUMsZUFBRSxDQUFDQyxZQUFZLENBQUN4QyxVQUFVO1FBQ2xDLEVBQUUsT0FBTTtZQUNQLE9BQU95QztRQUNSO0lBQ0Q7SUFHT2xCLGlCQUFpQnZCLFFBQWdCLEVBQVc7UUFDbEQsT0FBT3VDLGVBQUUsQ0FBQ0csVUFBVSxDQUFDMUM7SUFDdEI7SUFHTzBCLGdCQUFnQkMsYUFBcUIsRUFBVztRQUN0RCxJQUFJO1lBQ0gsT0FBT1ksZUFBRSxDQUFDSSxRQUFRLENBQUNoQixlQUFlaUIsV0FBVztRQUM5QyxFQUFFLE9BQU07WUFDUCxPQUFPO1FBQ1I7SUFDRDtJQUdPaEIsZUFBZUQsYUFBcUIsRUFBWTtRQUN0RCxJQUFJO1lBQ0gsT0FBT1ksZUFBRSxDQUNQTSxXQUFXLENBQUNsQixlQUFlO2dCQUFFbUIsZUFBZTtZQUFLLEdBQ2pEQyxNQUFNLENBQUMsQ0FBQ0MsUUFBVUEsTUFBTUosV0FBVyxJQUNuQ1gsR0FBRyxDQUFDLENBQUNlLFFBQVVBLE1BQU1DLElBQUk7UUFDNUIsRUFBRSxPQUFNO1lBQ1AsT0FBTyxFQUFFO1FBQ1Y7SUFDRDtBQUNEOzs7UUFsQ1VBLE1BQU07UUFBZ0JDLE9BQU8sQ0FBQyxHQUFHQyxPQUFTQSxJQUFJLENBQUMsRUFBRSJ9
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "TypeEmissionProgram", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return TypeEmissionProgram;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
12
|
+
const _diagnostics = require("@decohere/nexus/diagnostics");
|
|
13
|
+
const _transformresponsemodel = require("../types/transform-response.model.js");
|
|
14
|
+
function _interop_require_default(obj) {
|
|
15
|
+
return obj && obj.__esModule ? obj : {
|
|
16
|
+
default: obj
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
20
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
21
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
22
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
23
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
24
|
+
}
|
|
25
|
+
function _ts_metadata(k, v) {
|
|
26
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
27
|
+
}
|
|
28
|
+
class TypeEmissionProgram {
|
|
29
|
+
#program;
|
|
30
|
+
#group;
|
|
31
|
+
#targetsByDtsPath;
|
|
32
|
+
#targetsByEmittedPath;
|
|
33
|
+
#host;
|
|
34
|
+
#compilerHost;
|
|
35
|
+
#allFiles;
|
|
36
|
+
#compilerOptions;
|
|
37
|
+
constructor(group, hostFactory){
|
|
38
|
+
this.#group = group;
|
|
39
|
+
const targets = this.buildTargetMaps(group);
|
|
40
|
+
this.#targetsByDtsPath = targets.byDtsPath;
|
|
41
|
+
this.#targetsByEmittedPath = targets.byEmittedPath;
|
|
42
|
+
this.#host = hostFactory;
|
|
43
|
+
this.#compilerOptions = group[0].tsconfig.compilerOptions;
|
|
44
|
+
this.#allFiles = group.flatMap(({ files })=>files);
|
|
45
|
+
this.#compilerHost = hostFactory.createHost(this.#compilerOptions);
|
|
46
|
+
this.#program = hostFactory.createProgram(this.#allFiles, this.#compilerOptions, this.#compilerHost);
|
|
47
|
+
}
|
|
48
|
+
toEmissionTarget(groupProject, file, outBaseDir) {
|
|
49
|
+
const extName = _nodepath.default.extname(file.relativePath);
|
|
50
|
+
const dtsRelative = file.relativePath.replace(new RegExp(`${extName}$`), ".d.ts");
|
|
51
|
+
const outputPath = _nodepath.default.join(outBaseDir, dtsRelative);
|
|
52
|
+
return {
|
|
53
|
+
file,
|
|
54
|
+
tsconfig: groupProject.tsconfig,
|
|
55
|
+
project: groupProject.project,
|
|
56
|
+
outputPath,
|
|
57
|
+
outputDir: _nodepath.default.dirname(outputPath),
|
|
58
|
+
dtsRelative
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
emittedKey(file) {
|
|
62
|
+
return file.fullPath.replace(/\.[^.]+$/, ".d.ts");
|
|
63
|
+
}
|
|
64
|
+
buildTargetMaps(group) {
|
|
65
|
+
const byDtsPath = new Map();
|
|
66
|
+
const byEmittedPath = new Map();
|
|
67
|
+
for (const groupProject of group){
|
|
68
|
+
const outBaseDir = groupProject.project.getOutDir("types");
|
|
69
|
+
for (const file of groupProject.files){
|
|
70
|
+
const target = this.toEmissionTarget(groupProject, file, outBaseDir);
|
|
71
|
+
byDtsPath.set(target.dtsRelative, target);
|
|
72
|
+
byEmittedPath.set(this.emittedKey(file), target);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
byDtsPath,
|
|
77
|
+
byEmittedPath
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
addFile(file, project) {
|
|
81
|
+
const groupProject = this.#group.find((g)=>g.project === project);
|
|
82
|
+
if (groupProject == null) return;
|
|
83
|
+
groupProject.files.push(file);
|
|
84
|
+
this.#allFiles.push(file);
|
|
85
|
+
const outBaseDir = groupProject.project.getOutDir("types");
|
|
86
|
+
const target = this.toEmissionTarget(groupProject, file, outBaseDir);
|
|
87
|
+
this.#targetsByDtsPath.set(target.dtsRelative, target);
|
|
88
|
+
this.#targetsByEmittedPath.set(this.emittedKey(file), target);
|
|
89
|
+
this.#host.invalidateSourceFile(file.fullPath);
|
|
90
|
+
}
|
|
91
|
+
async emit(fileFilter, onOutput) {
|
|
92
|
+
if (this.#host.hasInvalidated()) {
|
|
93
|
+
this.#program = this.#host.createProgram(this.#allFiles, this.#compilerOptions, this.#compilerHost, this.#program);
|
|
94
|
+
}
|
|
95
|
+
if (fileFilter == null) {
|
|
96
|
+
return this.emitAll(onOutput);
|
|
97
|
+
}
|
|
98
|
+
return this.emitFiltered(fileFilter, onOutput);
|
|
99
|
+
}
|
|
100
|
+
emitAll(onOutput) {
|
|
101
|
+
const responses = [];
|
|
102
|
+
this.#program.emit(undefined, (emittedPath, content)=>{
|
|
103
|
+
if (!emittedPath.endsWith(".d.ts")) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const response = this.toTransformResponse(emittedPath, content);
|
|
107
|
+
responses.push(response);
|
|
108
|
+
onOutput?.(response);
|
|
109
|
+
});
|
|
110
|
+
return responses;
|
|
111
|
+
}
|
|
112
|
+
async emitFiltered(fileFilter, onOutput) {
|
|
113
|
+
const files = await Promise.all(this.#group.map(({ project })=>fileFilter(project)));
|
|
114
|
+
const sourceFiles = files.flat().map((file)=>this.#program.getSourceFile(file.fullPath)).filter((sf)=>sf != null);
|
|
115
|
+
const responses = [];
|
|
116
|
+
for (const sourceFile of sourceFiles){
|
|
117
|
+
this.#program.emit(sourceFile, (emittedPath, content)=>{
|
|
118
|
+
if (!emittedPath.endsWith(".d.ts")) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const response = this.toTransformResponse(emittedPath, content);
|
|
122
|
+
responses.push(response);
|
|
123
|
+
onOutput?.(response);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return responses;
|
|
127
|
+
}
|
|
128
|
+
toTransformResponse(emittedPath, content) {
|
|
129
|
+
const target = this.#targetsByEmittedPath.get(emittedPath);
|
|
130
|
+
if (target == null) {
|
|
131
|
+
throw new Error(`No matching emission target for: ${emittedPath}`);
|
|
132
|
+
}
|
|
133
|
+
return this.toTransformResponseFromTarget(target, content);
|
|
134
|
+
}
|
|
135
|
+
toTransformResponseFromTarget(target, content) {
|
|
136
|
+
const { file, tsconfig, project, outputPath, outputDir, dtsRelative } = target;
|
|
137
|
+
return _transformresponsemodel.TransformResponse.from({
|
|
138
|
+
file,
|
|
139
|
+
config: tsconfig,
|
|
140
|
+
outcome: "success",
|
|
141
|
+
fileName: dtsRelative,
|
|
142
|
+
code: content,
|
|
143
|
+
target: "types",
|
|
144
|
+
messages: [],
|
|
145
|
+
project,
|
|
146
|
+
outputDir,
|
|
147
|
+
outputPath
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
TypeEmissionProgram = _ts_decorate([
|
|
152
|
+
_diagnostics.Trace,
|
|
153
|
+
_ts_metadata("design:type", Function),
|
|
154
|
+
_ts_metadata("design:paramtypes", [
|
|
155
|
+
Array,
|
|
156
|
+
typeof TsProgramHost === "undefined" ? Object : TsProgramHost
|
|
157
|
+
])
|
|
158
|
+
], TypeEmissionProgram);
|
|
159
|
+
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9zZXJ2aWNlcy90eXBlLWVtaXNzaW9uLXByb2dyYW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0LCBUc2NvbmZpZyB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuaW1wb3J0IHsgVHJhY2UgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2RpYWdub3N0aWNzXCI7XG5pbXBvcnQgdHlwZSB7IEZpbGVFeCB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW9cIjtcbmltcG9ydCB0eXBlIHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5pbXBvcnQgdHlwZSB7IFRzUHJvZ3JhbUhvc3QgfSBmcm9tIFwiLi4vc2VydmljZXMvdHMtcHJvZ3JhbS1ob3N0LmpzXCI7XG5pbXBvcnQgeyBUcmFuc2Zvcm1SZXNwb25zZSB9IGZyb20gXCIuLi90eXBlcy90cmFuc2Zvcm0tcmVzcG9uc2UubW9kZWwuanNcIjtcblxuZXhwb3J0IHR5cGUgVHlwZVByb2dyYW1Qcm9qZWN0ID0ge1xuXHRwcm9qZWN0OiBQcm9qZWN0O1xuXHRmaWxlczogRmlsZUV4W107XG5cdHRzY29uZmlnOiBUc2NvbmZpZztcbn07XG5cbnR5cGUgRW1pc3Npb25UYXJnZXQgPSB7XG5cdGZpbGU6IEZpbGVFeDtcblx0dHNjb25maWc6IFRzY29uZmlnO1xuXHRwcm9qZWN0OiBQcm9qZWN0O1xuXHRvdXRwdXRQYXRoOiBzdHJpbmc7XG5cdG91dHB1dERpcjogc3RyaW5nO1xuXHRkdHNSZWxhdGl2ZTogc3RyaW5nO1xufTtcblxuQFRyYWNlXG5leHBvcnQgY2xhc3MgVHlwZUVtaXNzaW9uUHJvZ3JhbSB7XG5cdCNwcm9ncmFtOiB0cy5Qcm9ncmFtO1xuXHQjZ3JvdXA6IFR5cGVQcm9ncmFtUHJvamVjdFtdO1xuXHQjdGFyZ2V0c0J5RHRzUGF0aDogTWFwPHN0cmluZywgRW1pc3Npb25UYXJnZXQ+O1xuXHQjdGFyZ2V0c0J5RW1pdHRlZFBhdGg6IE1hcDxzdHJpbmcsIEVtaXNzaW9uVGFyZ2V0Pjtcblx0I2hvc3Q6IFRzUHJvZ3JhbUhvc3Q7XG5cdCNjb21waWxlckhvc3Q6IHRzLkNvbXBpbGVySG9zdDtcblx0I2FsbEZpbGVzOiBGaWxlRXhbXTtcblx0I2NvbXBpbGVyT3B0aW9uczogdHMuQ29tcGlsZXJPcHRpb25zO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihncm91cDogVHlwZVByb2dyYW1Qcm9qZWN0W10sIGhvc3RGYWN0b3J5OiBUc1Byb2dyYW1Ib3N0KSB7XG5cdFx0dGhpcy4jZ3JvdXAgPSBncm91cDtcblx0XHRjb25zdCB0YXJnZXRzID0gdGhpcy5idWlsZFRhcmdldE1hcHMoZ3JvdXApO1xuXHRcdHRoaXMuI3RhcmdldHNCeUR0c1BhdGggPSB0YXJnZXRzLmJ5RHRzUGF0aDtcblx0XHR0aGlzLiN0YXJnZXRzQnlFbWl0dGVkUGF0aCA9IHRhcmdldHMuYnlFbWl0dGVkUGF0aDtcblx0XHR0aGlzLiNob3N0ID0gaG9zdEZhY3Rvcnk7XG5cdFx0dGhpcy4jY29tcGlsZXJPcHRpb25zID0gZ3JvdXBbMF0udHNjb25maWcuY29tcGlsZXJPcHRpb25zO1xuXHRcdHRoaXMuI2FsbEZpbGVzID0gZ3JvdXAuZmxhdE1hcCgoeyBmaWxlcyB9KSA9PiBmaWxlcyk7XG5cdFx0dGhpcy4jY29tcGlsZXJIb3N0ID0gaG9zdEZhY3RvcnkuY3JlYXRlSG9zdCh0aGlzLiNjb21waWxlck9wdGlvbnMpO1xuXHRcdHRoaXMuI3Byb2dyYW0gPSBob3N0RmFjdG9yeS5jcmVhdGVQcm9ncmFtKFxuXHRcdFx0dGhpcy4jYWxsRmlsZXMsXG5cdFx0XHR0aGlzLiNjb21waWxlck9wdGlvbnMsXG5cdFx0XHR0aGlzLiNjb21waWxlckhvc3QsXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgdG9FbWlzc2lvblRhcmdldChcblx0XHRncm91cFByb2plY3Q6IFR5cGVQcm9ncmFtUHJvamVjdCxcblx0XHRmaWxlOiBGaWxlRXgsXG5cdFx0b3V0QmFzZURpcjogc3RyaW5nLFxuXHQpOiBFbWlzc2lvblRhcmdldCB7XG5cdFx0Y29uc3QgZXh0TmFtZSA9IHBhdGguZXh0bmFtZShmaWxlLnJlbGF0aXZlUGF0aCk7XG5cdFx0Y29uc3QgZHRzUmVsYXRpdmUgPSBmaWxlLnJlbGF0aXZlUGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXh0TmFtZX0kYCksIFwiLmQudHNcIik7XG5cdFx0Y29uc3Qgb3V0cHV0UGF0aCA9IHBhdGguam9pbihvdXRCYXNlRGlyLCBkdHNSZWxhdGl2ZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGZpbGUsXG5cdFx0XHR0c2NvbmZpZzogZ3JvdXBQcm9qZWN0LnRzY29uZmlnLFxuXHRcdFx0cHJvamVjdDogZ3JvdXBQcm9qZWN0LnByb2plY3QsXG5cdFx0XHRvdXRwdXRQYXRoLFxuXHRcdFx0b3V0cHV0RGlyOiBwYXRoLmRpcm5hbWUob3V0cHV0UGF0aCksXG5cdFx0XHRkdHNSZWxhdGl2ZSxcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBlbWl0dGVkS2V5KGZpbGU6IEZpbGVFeCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGZpbGUuZnVsbFBhdGgucmVwbGFjZSgvXFwuW14uXSskLywgXCIuZC50c1wiKTtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRUYXJnZXRNYXBzKGdyb3VwOiBUeXBlUHJvZ3JhbVByb2plY3RbXSk6IHtcblx0XHRieUR0c1BhdGg6IE1hcDxzdHJpbmcsIEVtaXNzaW9uVGFyZ2V0Pjtcblx0XHRieUVtaXR0ZWRQYXRoOiBNYXA8c3RyaW5nLCBFbWlzc2lvblRhcmdldD47XG5cdH0ge1xuXHRcdGNvbnN0IGJ5RHRzUGF0aCA9IG5ldyBNYXA8c3RyaW5nLCBFbWlzc2lvblRhcmdldD4oKTtcblx0XHRjb25zdCBieUVtaXR0ZWRQYXRoID0gbmV3IE1hcDxzdHJpbmcsIEVtaXNzaW9uVGFyZ2V0PigpO1xuXG5cdFx0Zm9yIChjb25zdCBncm91cFByb2plY3Qgb2YgZ3JvdXApIHtcblx0XHRcdGNvbnN0IG91dEJhc2VEaXIgPSBncm91cFByb2plY3QucHJvamVjdC5nZXRPdXREaXIoXCJ0eXBlc1wiKTtcblx0XHRcdGZvciAoY29uc3QgZmlsZSBvZiBncm91cFByb2plY3QuZmlsZXMpIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0ID0gdGhpcy50b0VtaXNzaW9uVGFyZ2V0KGdyb3VwUHJvamVjdCwgZmlsZSwgb3V0QmFzZURpcik7XG5cdFx0XHRcdGJ5RHRzUGF0aC5zZXQodGFyZ2V0LmR0c1JlbGF0aXZlLCB0YXJnZXQpO1xuXHRcdFx0XHRieUVtaXR0ZWRQYXRoLnNldCh0aGlzLmVtaXR0ZWRLZXkoZmlsZSksIHRhcmdldCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgYnlEdHNQYXRoLCBieUVtaXR0ZWRQYXRoIH07XG5cdH1cblxuXHRwdWJsaWMgYWRkRmlsZShmaWxlOiBGaWxlRXgsIHByb2plY3Q6IFByb2plY3QpOiB2b2lkIHtcblx0XHRjb25zdCBncm91cFByb2plY3QgPSB0aGlzLiNncm91cC5maW5kKChnKSA9PiBnLnByb2plY3QgPT09IHByb2plY3QpO1xuXHRcdGlmIChncm91cFByb2plY3QgPT0gbnVsbCkgcmV0dXJuO1xuXG5cdFx0Z3JvdXBQcm9qZWN0LmZpbGVzLnB1c2goZmlsZSk7XG5cdFx0dGhpcy4jYWxsRmlsZXMucHVzaChmaWxlKTtcblxuXHRcdGNvbnN0IG91dEJhc2VEaXIgPSBncm91cFByb2plY3QucHJvamVjdC5nZXRPdXREaXIoXCJ0eXBlc1wiKTtcblx0XHRjb25zdCB0YXJnZXQgPSB0aGlzLnRvRW1pc3Npb25UYXJnZXQoZ3JvdXBQcm9qZWN0LCBmaWxlLCBvdXRCYXNlRGlyKTtcblx0XHR0aGlzLiN0YXJnZXRzQnlEdHNQYXRoLnNldCh0YXJnZXQuZHRzUmVsYXRpdmUsIHRhcmdldCk7XG5cdFx0dGhpcy4jdGFyZ2V0c0J5RW1pdHRlZFBhdGguc2V0KHRoaXMuZW1pdHRlZEtleShmaWxlKSwgdGFyZ2V0KTtcblx0XHR0aGlzLiNob3N0LmludmFsaWRhdGVTb3VyY2VGaWxlKGZpbGUuZnVsbFBhdGgpO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIGVtaXQoXG5cdFx0ZmlsZUZpbHRlcj86IChwcm9qZWN0OiBQcm9qZWN0KSA9PiBQcm9taXNlPEZpbGVFeFtdPixcblx0XHRvbk91dHB1dD86IChyZXNwb25zZTogVHJhbnNmb3JtUmVzcG9uc2UpID0+IHZvaWQsXG5cdCk6IFByb21pc2U8VHJhbnNmb3JtUmVzcG9uc2VbXT4ge1xuXHRcdGlmICh0aGlzLiNob3N0Lmhhc0ludmFsaWRhdGVkKCkpIHtcblx0XHRcdHRoaXMuI3Byb2dyYW0gPSB0aGlzLiNob3N0LmNyZWF0ZVByb2dyYW0oXG5cdFx0XHRcdHRoaXMuI2FsbEZpbGVzLFxuXHRcdFx0XHR0aGlzLiNjb21waWxlck9wdGlvbnMsXG5cdFx0XHRcdHRoaXMuI2NvbXBpbGVySG9zdCxcblx0XHRcdFx0dGhpcy4jcHJvZ3JhbSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmIChmaWxlRmlsdGVyID09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLmVtaXRBbGwob25PdXRwdXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lbWl0RmlsdGVyZWQoZmlsZUZpbHRlciwgb25PdXRwdXQpO1xuXHR9XG5cblx0cHJpdmF0ZSBlbWl0QWxsKG9uT3V0cHV0PzogKHJlc3BvbnNlOiBUcmFuc2Zvcm1SZXNwb25zZSkgPT4gdm9pZCk6IFRyYW5zZm9ybVJlc3BvbnNlW10ge1xuXHRcdGNvbnN0IHJlc3BvbnNlczogVHJhbnNmb3JtUmVzcG9uc2VbXSA9IFtdO1xuXHRcdHRoaXMuI3Byb2dyYW0uZW1pdCh1bmRlZmluZWQsIChlbWl0dGVkUGF0aCwgY29udGVudCkgPT4ge1xuXHRcdFx0aWYgKCFlbWl0dGVkUGF0aC5lbmRzV2l0aChcIi5kLnRzXCIpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gdGhpcy50b1RyYW5zZm9ybVJlc3BvbnNlKGVtaXR0ZWRQYXRoLCBjb250ZW50KTtcblx0XHRcdHJlc3BvbnNlcy5wdXNoKHJlc3BvbnNlKTtcblx0XHRcdG9uT3V0cHV0Py4ocmVzcG9uc2UpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXNwb25zZXM7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGVtaXRGaWx0ZXJlZChcblx0XHRmaWxlRmlsdGVyOiAocHJvamVjdDogUHJvamVjdCkgPT4gUHJvbWlzZTxGaWxlRXhbXT4sXG5cdFx0b25PdXRwdXQ/OiAocmVzcG9uc2U6IFRyYW5zZm9ybVJlc3BvbnNlKSA9PiB2b2lkLFxuXHQpOiBQcm9taXNlPFRyYW5zZm9ybVJlc3BvbnNlW10+IHtcblx0XHRjb25zdCBmaWxlcyA9IGF3YWl0IFByb21pc2UuYWxsKHRoaXMuI2dyb3VwLm1hcCgoeyBwcm9qZWN0IH0pID0+IGZpbGVGaWx0ZXIocHJvamVjdCkpKTtcblx0XHRjb25zdCBzb3VyY2VGaWxlcyA9IGZpbGVzXG5cdFx0XHQuZmxhdCgpXG5cdFx0XHQubWFwKChmaWxlKSA9PiB0aGlzLiNwcm9ncmFtLmdldFNvdXJjZUZpbGUoZmlsZS5mdWxsUGF0aCkpXG5cdFx0XHQuZmlsdGVyKChzZik6IHNmIGlzIHRzLlNvdXJjZUZpbGUgPT4gc2YgIT0gbnVsbCk7XG5cblx0XHRjb25zdCByZXNwb25zZXM6IFRyYW5zZm9ybVJlc3BvbnNlW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBzb3VyY2VGaWxlcykge1xuXHRcdFx0dGhpcy4jcHJvZ3JhbS5lbWl0KHNvdXJjZUZpbGUsIChlbWl0dGVkUGF0aCwgY29udGVudCkgPT4ge1xuXHRcdFx0XHRpZiAoIWVtaXR0ZWRQYXRoLmVuZHNXaXRoKFwiLmQudHNcIikpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB0aGlzLnRvVHJhbnNmb3JtUmVzcG9uc2UoZW1pdHRlZFBhdGgsIGNvbnRlbnQpO1xuXHRcdFx0XHRyZXNwb25zZXMucHVzaChyZXNwb25zZSk7XG5cdFx0XHRcdG9uT3V0cHV0Py4ocmVzcG9uc2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3BvbnNlcztcblx0fVxuXG5cdHByaXZhdGUgdG9UcmFuc2Zvcm1SZXNwb25zZShlbWl0dGVkUGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpOiBUcmFuc2Zvcm1SZXNwb25zZSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gdGhpcy4jdGFyZ2V0c0J5RW1pdHRlZFBhdGguZ2V0KGVtaXR0ZWRQYXRoKTtcblx0XHRpZiAodGFyZ2V0ID09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgTm8gbWF0Y2hpbmcgZW1pc3Npb24gdGFyZ2V0IGZvcjogJHtlbWl0dGVkUGF0aH1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudG9UcmFuc2Zvcm1SZXNwb25zZUZyb21UYXJnZXQodGFyZ2V0LCBjb250ZW50KTtcblx0fVxuXG5cdHByaXZhdGUgdG9UcmFuc2Zvcm1SZXNwb25zZUZyb21UYXJnZXQoXG5cdFx0dGFyZ2V0OiBFbWlzc2lvblRhcmdldCxcblx0XHRjb250ZW50OiBzdHJpbmcsXG5cdCk6IFRyYW5zZm9ybVJlc3BvbnNlIHtcblx0XHRjb25zdCB7IGZpbGUsIHRzY29uZmlnLCBwcm9qZWN0LCBvdXRwdXRQYXRoLCBvdXRwdXREaXIsIGR0c1JlbGF0aXZlIH0gPSB0YXJnZXQ7XG5cdFx0cmV0dXJuIFRyYW5zZm9ybVJlc3BvbnNlLmZyb20oe1xuXHRcdFx0ZmlsZSxcblx0XHRcdGNvbmZpZzogdHNjb25maWcsXG5cdFx0XHRvdXRjb21lOiBcInN1Y2Nlc3NcIixcblx0XHRcdGZpbGVOYW1lOiBkdHNSZWxhdGl2ZSxcblx0XHRcdGNvZGU6IGNvbnRlbnQsXG5cdFx0XHR0YXJnZXQ6IFwidHlwZXNcIixcblx0XHRcdG1lc3NhZ2VzOiBbXSxcblx0XHRcdHByb2plY3QsXG5cdFx0XHRvdXRwdXREaXIsXG5cdFx0XHRvdXRwdXRQYXRoLFxuXHRcdH0pO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiVHlwZUVtaXNzaW9uUHJvZ3JhbSIsImdyb3VwIiwiaG9zdEZhY3RvcnkiLCJ0YXJnZXRzIiwiYnVpbGRUYXJnZXRNYXBzIiwiYnlEdHNQYXRoIiwiYnlFbWl0dGVkUGF0aCIsInRzY29uZmlnIiwiY29tcGlsZXJPcHRpb25zIiwiZmxhdE1hcCIsImZpbGVzIiwiY3JlYXRlSG9zdCIsImNyZWF0ZVByb2dyYW0iLCJ0b0VtaXNzaW9uVGFyZ2V0IiwiZ3JvdXBQcm9qZWN0IiwiZmlsZSIsIm91dEJhc2VEaXIiLCJleHROYW1lIiwicGF0aCIsImV4dG5hbWUiLCJyZWxhdGl2ZVBhdGgiLCJkdHNSZWxhdGl2ZSIsInJlcGxhY2UiLCJSZWdFeHAiLCJvdXRwdXRQYXRoIiwiam9pbiIsInByb2plY3QiLCJvdXRwdXREaXIiLCJkaXJuYW1lIiwiZW1pdHRlZEtleSIsImZ1bGxQYXRoIiwiTWFwIiwiZ2V0T3V0RGlyIiwidGFyZ2V0Iiwic2V0IiwiYWRkRmlsZSIsImZpbmQiLCJnIiwicHVzaCIsImludmFsaWRhdGVTb3VyY2VGaWxlIiwiZW1pdCIsImZpbGVGaWx0ZXIiLCJvbk91dHB1dCIsImhhc0ludmFsaWRhdGVkIiwiZW1pdEFsbCIsImVtaXRGaWx0ZXJlZCIsInJlc3BvbnNlcyIsInVuZGVmaW5lZCIsImVtaXR0ZWRQYXRoIiwiY29udGVudCIsImVuZHNXaXRoIiwicmVzcG9uc2UiLCJ0b1RyYW5zZm9ybVJlc3BvbnNlIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsInNvdXJjZUZpbGVzIiwiZmxhdCIsImdldFNvdXJjZUZpbGUiLCJmaWx0ZXIiLCJzZiIsInNvdXJjZUZpbGUiLCJnZXQiLCJFcnJvciIsInRvVHJhbnNmb3JtUmVzcG9uc2VGcm9tVGFyZ2V0IiwiVHJhbnNmb3JtUmVzcG9uc2UiLCJmcm9tIiwiY29uZmlnIiwib3V0Y29tZSIsImZpbGVOYW1lIiwiY29kZSIsIm1lc3NhZ2VzIl0sIm1hcHBpbmdzIjoiOzs7OytCQXdCYUE7OztlQUFBQTs7O2lFQXhCSTs2QkFFSzt3Q0FJWTs7Ozs7Ozs7Ozs7Ozs7O0FBa0IzQixNQUFNQTtJQUNaLENBQUEsT0FBUSxDQUFhO0lBQ3JCLENBQUEsS0FBTSxDQUF1QjtJQUM3QixDQUFBLGdCQUFpQixDQUE4QjtJQUMvQyxDQUFBLG9CQUFxQixDQUE4QjtJQUNuRCxDQUFBLElBQUssQ0FBZ0I7SUFDckIsQ0FBQSxZQUFhLENBQWtCO0lBQy9CLENBQUEsUUFBUyxDQUFXO0lBQ3BCLENBQUEsZUFBZ0IsQ0FBcUI7SUFFckMsWUFBbUJDLEtBQTJCLEVBQUVDLFdBQTBCLENBQUU7UUFDM0UsSUFBSSxDQUFDLENBQUEsS0FBTSxHQUFHRDtRQUNkLE1BQU1FLFVBQVUsSUFBSSxDQUFDQyxlQUFlLENBQUNIO1FBQ3JDLElBQUksQ0FBQyxDQUFBLGdCQUFpQixHQUFHRSxRQUFRRSxTQUFTO1FBQzFDLElBQUksQ0FBQyxDQUFBLG9CQUFxQixHQUFHRixRQUFRRyxhQUFhO1FBQ2xELElBQUksQ0FBQyxDQUFBLElBQUssR0FBR0o7UUFDYixJQUFJLENBQUMsQ0FBQSxlQUFnQixHQUFHRCxLQUFLLENBQUMsRUFBRSxDQUFDTSxRQUFRLENBQUNDLGVBQWU7UUFDekQsSUFBSSxDQUFDLENBQUEsUUFBUyxHQUFHUCxNQUFNUSxPQUFPLENBQUMsQ0FBQyxFQUFFQyxLQUFLLEVBQUUsR0FBS0E7UUFDOUMsSUFBSSxDQUFDLENBQUEsWUFBYSxHQUFHUixZQUFZUyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUEsZUFBZ0I7UUFDakUsSUFBSSxDQUFDLENBQUEsT0FBUSxHQUFHVCxZQUFZVSxhQUFhLENBQ3hDLElBQUksQ0FBQyxDQUFBLFFBQVMsRUFDZCxJQUFJLENBQUMsQ0FBQSxlQUFnQixFQUNyQixJQUFJLENBQUMsQ0FBQSxZQUFhO0lBRXBCO0lBRVFDLGlCQUNQQyxZQUFnQyxFQUNoQ0MsSUFBWSxFQUNaQyxVQUFrQixFQUNEO1FBQ2pCLE1BQU1DLFVBQVVDLGlCQUFJLENBQUNDLE9BQU8sQ0FBQ0osS0FBS0ssWUFBWTtRQUM5QyxNQUFNQyxjQUFjTixLQUFLSyxZQUFZLENBQUNFLE9BQU8sQ0FBQyxJQUFJQyxPQUFPLEdBQUdOLFFBQVEsQ0FBQyxDQUFDLEdBQUc7UUFDekUsTUFBTU8sYUFBYU4saUJBQUksQ0FBQ08sSUFBSSxDQUFDVCxZQUFZSztRQUN6QyxPQUFPO1lBQ05OO1lBQ0FSLFVBQVVPLGFBQWFQLFFBQVE7WUFDL0JtQixTQUFTWixhQUFhWSxPQUFPO1lBQzdCRjtZQUNBRyxXQUFXVCxpQkFBSSxDQUFDVSxPQUFPLENBQUNKO1lBQ3hCSDtRQUNEO0lBQ0Q7SUFFUVEsV0FBV2QsSUFBWSxFQUFVO1FBQ3hDLE9BQU9BLEtBQUtlLFFBQVEsQ0FBQ1IsT0FBTyxDQUFDLFlBQVk7SUFDMUM7SUFFUWxCLGdCQUFnQkgsS0FBMkIsRUFHakQ7UUFDRCxNQUFNSSxZQUFZLElBQUkwQjtRQUN0QixNQUFNekIsZ0JBQWdCLElBQUl5QjtRQUUxQixLQUFLLE1BQU1qQixnQkFBZ0JiLE1BQU87WUFDakMsTUFBTWUsYUFBYUYsYUFBYVksT0FBTyxDQUFDTSxTQUFTLENBQUM7WUFDbEQsS0FBSyxNQUFNakIsUUFBUUQsYUFBYUosS0FBSyxDQUFFO2dCQUN0QyxNQUFNdUIsU0FBUyxJQUFJLENBQUNwQixnQkFBZ0IsQ0FBQ0MsY0FBY0MsTUFBTUM7Z0JBQ3pEWCxVQUFVNkIsR0FBRyxDQUFDRCxPQUFPWixXQUFXLEVBQUVZO2dCQUNsQzNCLGNBQWM0QixHQUFHLENBQUMsSUFBSSxDQUFDTCxVQUFVLENBQUNkLE9BQU9rQjtZQUMxQztRQUNEO1FBRUEsT0FBTztZQUFFNUI7WUFBV0M7UUFBYztJQUNuQztJQUVPNkIsUUFBUXBCLElBQVksRUFBRVcsT0FBZ0IsRUFBUTtRQUNwRCxNQUFNWixlQUFlLElBQUksQ0FBQyxDQUFBLEtBQU0sQ0FBQ3NCLElBQUksQ0FBQyxDQUFDQyxJQUFNQSxFQUFFWCxPQUFPLEtBQUtBO1FBQzNELElBQUlaLGdCQUFnQixNQUFNO1FBRTFCQSxhQUFhSixLQUFLLENBQUM0QixJQUFJLENBQUN2QjtRQUN4QixJQUFJLENBQUMsQ0FBQSxRQUFTLENBQUN1QixJQUFJLENBQUN2QjtRQUVwQixNQUFNQyxhQUFhRixhQUFhWSxPQUFPLENBQUNNLFNBQVMsQ0FBQztRQUNsRCxNQUFNQyxTQUFTLElBQUksQ0FBQ3BCLGdCQUFnQixDQUFDQyxjQUFjQyxNQUFNQztRQUN6RCxJQUFJLENBQUMsQ0FBQSxnQkFBaUIsQ0FBQ2tCLEdBQUcsQ0FBQ0QsT0FBT1osV0FBVyxFQUFFWTtRQUMvQyxJQUFJLENBQUMsQ0FBQSxvQkFBcUIsQ0FBQ0MsR0FBRyxDQUFDLElBQUksQ0FBQ0wsVUFBVSxDQUFDZCxPQUFPa0I7UUFDdEQsSUFBSSxDQUFDLENBQUEsSUFBSyxDQUFDTSxvQkFBb0IsQ0FBQ3hCLEtBQUtlLFFBQVE7SUFDOUM7SUFFQSxNQUFhVSxLQUNaQyxVQUFvRCxFQUNwREMsUUFBZ0QsRUFDakI7UUFDL0IsSUFBSSxJQUFJLENBQUMsQ0FBQSxJQUFLLENBQUNDLGNBQWMsSUFBSTtZQUNoQyxJQUFJLENBQUMsQ0FBQSxPQUFRLEdBQUcsSUFBSSxDQUFDLENBQUEsSUFBSyxDQUFDL0IsYUFBYSxDQUN2QyxJQUFJLENBQUMsQ0FBQSxRQUFTLEVBQ2QsSUFBSSxDQUFDLENBQUEsZUFBZ0IsRUFDckIsSUFBSSxDQUFDLENBQUEsWUFBYSxFQUNsQixJQUFJLENBQUMsQ0FBQSxPQUFRO1FBRWY7UUFDQSxJQUFJNkIsY0FBYyxNQUFNO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDRyxPQUFPLENBQUNGO1FBQ3JCO1FBQ0EsT0FBTyxJQUFJLENBQUNHLFlBQVksQ0FBQ0osWUFBWUM7SUFDdEM7SUFFUUUsUUFBUUYsUUFBZ0QsRUFBdUI7UUFDdEYsTUFBTUksWUFBaUMsRUFBRTtRQUN6QyxJQUFJLENBQUMsQ0FBQSxPQUFRLENBQUNOLElBQUksQ0FBQ08sV0FBVyxDQUFDQyxhQUFhQztZQUMzQyxJQUFJLENBQUNELFlBQVlFLFFBQVEsQ0FBQyxVQUFVO2dCQUNuQztZQUNEO1lBQ0EsTUFBTUMsV0FBVyxJQUFJLENBQUNDLG1CQUFtQixDQUFDSixhQUFhQztZQUN2REgsVUFBVVIsSUFBSSxDQUFDYTtZQUNmVCxXQUFXUztRQUNaO1FBQ0EsT0FBT0w7SUFDUjtJQUVBLE1BQWNELGFBQ2JKLFVBQW1ELEVBQ25EQyxRQUFnRCxFQUNqQjtRQUMvQixNQUFNaEMsUUFBUSxNQUFNMkMsUUFBUUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBLEtBQU0sQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRTdCLE9BQU8sRUFBRSxHQUFLZSxXQUFXZjtRQUM1RSxNQUFNOEIsY0FBYzlDLE1BQ2xCK0MsSUFBSSxHQUNKRixHQUFHLENBQUMsQ0FBQ3hDLE9BQVMsSUFBSSxDQUFDLENBQUEsT0FBUSxDQUFDMkMsYUFBYSxDQUFDM0MsS0FBS2UsUUFBUSxHQUN2RDZCLE1BQU0sQ0FBQyxDQUFDQyxLQUE0QkEsTUFBTTtRQUU1QyxNQUFNZCxZQUFpQyxFQUFFO1FBRXpDLEtBQUssTUFBTWUsY0FBY0wsWUFBYTtZQUNyQyxJQUFJLENBQUMsQ0FBQSxPQUFRLENBQUNoQixJQUFJLENBQUNxQixZQUFZLENBQUNiLGFBQWFDO2dCQUM1QyxJQUFJLENBQUNELFlBQVlFLFFBQVEsQ0FBQyxVQUFVO29CQUNuQztnQkFDRDtnQkFDQSxNQUFNQyxXQUFXLElBQUksQ0FBQ0MsbUJBQW1CLENBQUNKLGFBQWFDO2dCQUN2REgsVUFBVVIsSUFBSSxDQUFDYTtnQkFDZlQsV0FBV1M7WUFDWjtRQUNEO1FBRUEsT0FBT0w7SUFDUjtJQUVRTSxvQkFBb0JKLFdBQW1CLEVBQUVDLE9BQWUsRUFBcUI7UUFDcEYsTUFBTWhCLFNBQVMsSUFBSSxDQUFDLENBQUEsb0JBQXFCLENBQUM2QixHQUFHLENBQUNkO1FBQzlDLElBQUlmLFVBQVUsTUFBTTtZQUNuQixNQUFNLElBQUk4QixNQUFNLENBQUMsaUNBQWlDLEVBQUVmLGFBQWE7UUFDbEU7UUFDQSxPQUFPLElBQUksQ0FBQ2dCLDZCQUE2QixDQUFDL0IsUUFBUWdCO0lBQ25EO0lBRVFlLDhCQUNQL0IsTUFBc0IsRUFDdEJnQixPQUFlLEVBQ0s7UUFDcEIsTUFBTSxFQUFFbEMsSUFBSSxFQUFFUixRQUFRLEVBQUVtQixPQUFPLEVBQUVGLFVBQVUsRUFBRUcsU0FBUyxFQUFFTixXQUFXLEVBQUUsR0FBR1k7UUFDeEUsT0FBT2dDLHlDQUFpQixDQUFDQyxJQUFJLENBQUM7WUFDN0JuRDtZQUNBb0QsUUFBUTVEO1lBQ1I2RCxTQUFTO1lBQ1RDLFVBQVVoRDtZQUNWaUQsTUFBTXJCO1lBQ05oQixRQUFRO1lBQ1JzQyxVQUFVLEVBQUU7WUFDWjdDO1lBQ0FDO1lBQ0FIO1FBQ0Q7SUFDRDtBQUNEIn0=
|