@decohere/forge 0.0.1-dev.10 → 0.0.1-dev.101
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/README.md +118 -0
- package/commonjs/src/actions/build.action.js +8 -2
- package/commonjs/src/actions/clean.action.js +2 -4
- package/commonjs/src/actions/commit.action.js +0 -2
- package/commonjs/src/actions/copy.action.js +37 -7
- package/commonjs/src/actions/dependency-report.action.js +0 -2
- package/commonjs/src/actions/dependency-sync.action.js +0 -2
- package/commonjs/src/actions/docker.action.js +209 -0
- package/commonjs/src/actions/index.js +5 -2
- package/commonjs/src/actions/link.action.js +154 -0
- package/commonjs/src/actions/package.action.js +229 -0
- package/commonjs/src/actions/publish.action.js +0 -2
- package/commonjs/src/actions/sync-lock-file.action.js +0 -2
- package/commonjs/src/actions/tag.action.js +2 -5
- package/commonjs/src/actions/typecheck.action.js +67 -0
- package/commonjs/src/actions/unlink.action.js +74 -0
- package/commonjs/src/actions/version.action.js +1 -5
- package/commonjs/src/actions/watch.action.js +1 -2
- package/commonjs/src/commands/build.command.js +0 -2
- package/commonjs/src/commands/dependency.command.js +0 -2
- package/commonjs/src/commands/docker.command.js +26 -0
- package/commonjs/src/commands/forge.command.js +0 -2
- package/commonjs/src/commands/index.js +4 -2
- package/commonjs/src/commands/link.command.js +87 -0
- package/commonjs/src/commands/package.command.js +36 -0
- package/commonjs/src/commands/publish.command.js +0 -2
- package/commonjs/src/commands/tag.command.js +0 -2
- package/commonjs/src/commands/typecheck.command.js +24 -0
- package/commonjs/src/commands/version.command.js +0 -2
- package/commonjs/src/const.js +0 -2
- package/commonjs/src/create-workspace.js +40 -0
- package/commonjs/src/errors.js +0 -2
- package/commonjs/src/extensions/project.extensions.js +0 -2
- package/commonjs/src/factories/swc-config.factory.js +17 -6
- package/commonjs/src/forge.module.js +20 -21
- package/commonjs/src/index.js +7 -2
- package/commonjs/src/mixins/caches-outputs.mixin.js +7 -7
- package/commonjs/src/mixins/incremental-transform.mixin.js +0 -2
- package/commonjs/src/packaging/dependency-pinner.service.js +118 -0
- package/commonjs/src/packaging/deployable.js +44 -0
- package/commonjs/src/packaging/import-graph.service.js +137 -0
- package/commonjs/src/packaging/release-exports.js +88 -0
- package/commonjs/src/services/dependency-resolver.service.js +0 -2
- package/commonjs/src/services/file-writer.service.js +0 -2
- package/commonjs/src/services/swc-transpiler.js +28 -9
- package/commonjs/src/services/ts-program-host.js +2 -4
- package/commonjs/src/services/type-emission-program.js +23 -8
- package/commonjs/src/services/type-emitter.js +33 -5
- package/commonjs/src/types/build-target.type.js +0 -2
- package/commonjs/src/types/configuration.type.js +0 -2
- package/commonjs/src/types/dependency.types.js +0 -2
- package/commonjs/src/types/swc-config.type.js +0 -2
- package/commonjs/src/types/transform-response.model.js +1 -2
- package/commonjs/src/types/transformer.type.js +0 -2
- package/commonjs/src/types/workspace-config.type.js +0 -2
- package/commonjs/src/vitest/forge-build.plugin.js +2 -3
- package/commonjs/src/vitest/index.js +0 -2
- package/commonjs/src/workspace.config.js +33 -3
- package/es6/src/actions/build.action.js +8 -4
- package/es6/src/actions/clean.action.js +2 -5
- package/es6/src/actions/commit.action.js +0 -3
- package/es6/src/actions/copy.action.js +37 -8
- package/es6/src/actions/dependency-report.action.js +0 -4
- package/es6/src/actions/dependency-sync.action.js +0 -4
- package/es6/src/actions/docker.action.js +194 -0
- package/es6/src/actions/index.js +5 -2
- package/es6/src/actions/link.action.js +128 -0
- package/es6/src/actions/package.action.js +214 -0
- package/es6/src/actions/publish.action.js +0 -3
- package/es6/src/actions/sync-lock-file.action.js +0 -2
- package/es6/src/actions/tag.action.js +2 -6
- package/es6/src/actions/typecheck.action.js +52 -0
- package/es6/src/actions/unlink.action.js +59 -0
- package/es6/src/actions/version.action.js +1 -6
- package/es6/src/actions/watch.action.js +1 -3
- package/es6/src/commands/build.command.js +0 -2
- package/es6/src/commands/dependency.command.js +0 -2
- package/es6/src/commands/docker.command.js +16 -0
- package/es6/src/commands/forge.command.js +0 -2
- package/es6/src/commands/index.js +4 -2
- package/es6/src/commands/link.command.js +64 -0
- package/es6/src/commands/package.command.js +26 -0
- package/es6/src/commands/publish.command.js +0 -2
- package/es6/src/commands/tag.command.js +0 -2
- package/es6/src/commands/typecheck.command.js +14 -0
- package/es6/src/commands/version.command.js +0 -2
- package/es6/src/const.js +0 -2
- package/es6/src/create-workspace.js +28 -0
- package/es6/src/errors.js +0 -2
- package/es6/src/extensions/project.extensions.js +0 -2
- package/es6/src/factories/swc-config.factory.js +17 -6
- package/es6/src/forge.module.js +20 -21
- package/es6/src/index.js +2 -3
- package/es6/src/mixins/caches-outputs.mixin.js +7 -7
- package/es6/src/mixins/incremental-transform.mixin.js +0 -2
- package/es6/src/packaging/dependency-pinner.service.js +103 -0
- package/es6/src/packaging/deployable.js +21 -0
- package/es6/src/packaging/import-graph.service.js +122 -0
- package/es6/src/packaging/release-exports.js +78 -0
- package/es6/src/services/dependency-resolver.service.js +0 -2
- package/es6/src/services/file-writer.service.js +0 -2
- package/es6/src/services/swc-transpiler.js +28 -9
- package/es6/src/services/ts-program-host.js +2 -4
- package/es6/src/services/type-emission-program.js +23 -8
- package/es6/src/services/type-emitter.js +30 -5
- package/es6/src/types/build-target.type.js +0 -2
- package/es6/src/types/configuration.type.js +0 -2
- package/es6/src/types/dependency.types.js +0 -2
- package/es6/src/types/swc-config.type.js +0 -2
- package/es6/src/types/transform-response.model.js +1 -2
- package/es6/src/types/transformer.type.js +0 -2
- package/es6/src/types/workspace-config.type.js +0 -2
- package/es6/src/vitest/forge-build.plugin.js +2 -3
- package/es6/src/vitest/index.js +0 -2
- package/es6/src/workspace.config.js +34 -3
- package/package.json +5 -5
- package/types/src/actions/build.action.d.ts +1 -0
- package/types/src/actions/copy.action.d.ts +10 -0
- package/types/src/actions/docker.action.d.ts +38 -0
- package/types/src/actions/index.d.ts +5 -0
- package/types/src/actions/link.action.d.ts +25 -0
- package/types/src/actions/package.action.d.ts +38 -0
- package/types/src/actions/typecheck.action.d.ts +14 -0
- package/types/src/actions/unlink.action.d.ts +9 -0
- package/types/src/commands/docker.command.d.ts +6 -0
- package/types/src/commands/index.d.ts +4 -0
- package/types/src/commands/link.command.d.ts +28 -0
- package/types/src/commands/package.command.d.ts +11 -0
- package/types/src/commands/typecheck.command.d.ts +6 -0
- package/types/src/create-workspace.d.ts +7 -0
- package/types/src/factories/swc-config.factory.d.ts +1 -0
- package/types/src/forge.module.d.ts +10 -0
- package/types/src/index.d.ts +2 -1
- package/types/src/packaging/dependency-pinner.service.d.ts +20 -0
- package/types/src/packaging/deployable.d.ts +17 -0
- package/types/src/packaging/import-graph.service.d.ts +33 -0
- package/types/src/packaging/release-exports.d.ts +18 -0
- package/types/src/services/swc-transpiler.d.ts +6 -2
- package/types/src/services/ts-program-host.d.ts +1 -1
- package/types/src/services/type-emission-program.d.ts +6 -1
- package/types/src/services/type-emitter.d.ts +14 -0
- package/types/src/types/configuration.type.d.ts +5 -0
- package/types/src/types/swc-config.type.d.ts +7 -1
- package/types/src/types/transform-response.model.d.ts +2 -0
- package/types/src/workspace.config.d.ts +6 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "DependencyPinner", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return DependencyPinner;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
12
|
+
const _decorators = require("@decohere/crucible/decorators");
|
|
13
|
+
const _io = require("@decohere/nexus/io");
|
|
14
|
+
const _errors = require("../errors.js");
|
|
15
|
+
function _interop_require_default(obj) {
|
|
16
|
+
return obj && obj.__esModule ? obj : {
|
|
17
|
+
default: obj
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
21
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
22
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
23
|
+
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;
|
|
24
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
25
|
+
}
|
|
26
|
+
class DependencyPinner {
|
|
27
|
+
async pin(imported, shipped, projects, workspaceRoot) {
|
|
28
|
+
const scopes = [
|
|
29
|
+
...shipped.map((project)=>({
|
|
30
|
+
name: project.name,
|
|
31
|
+
dir: project.projectRoot,
|
|
32
|
+
pkg: project.pkg
|
|
33
|
+
})),
|
|
34
|
+
{
|
|
35
|
+
name: "the workspace root",
|
|
36
|
+
dir: workspaceRoot.dir,
|
|
37
|
+
pkg: workspaceRoot.pkg
|
|
38
|
+
}
|
|
39
|
+
];
|
|
40
|
+
const declaredBy = new Map();
|
|
41
|
+
for (const scope of scopes){
|
|
42
|
+
for (const name of Object.keys(scope.pkg.dependencies ?? {})){
|
|
43
|
+
if (projects.has(name)) {
|
|
44
|
+
continue; // a workspace library, copied from its build, never installed
|
|
45
|
+
}
|
|
46
|
+
declaredBy.set(name, [
|
|
47
|
+
...declaredBy.get(name) ?? [],
|
|
48
|
+
scope
|
|
49
|
+
]);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
this.assertImportsAreShipped(imported, declaredBy, scopes);
|
|
53
|
+
const pinned = {};
|
|
54
|
+
for (const name of [
|
|
55
|
+
...declaredBy.keys()
|
|
56
|
+
].sort()){
|
|
57
|
+
pinned[name] = await this.installedVersion(name, declaredBy.get(name) ?? [], workspaceRoot.dir);
|
|
58
|
+
}
|
|
59
|
+
return pinned;
|
|
60
|
+
}
|
|
61
|
+
assertImportsAreShipped(imported, declaredBy, scopes) {
|
|
62
|
+
for (const name of [
|
|
63
|
+
...imported.keys()
|
|
64
|
+
].sort()){
|
|
65
|
+
if (declaredBy.has(name)) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const importers = [
|
|
69
|
+
...imported.get(name) ?? []
|
|
70
|
+
].sort().join(", ");
|
|
71
|
+
const devOnly = scopes.find((scope)=>scope.pkg.devDependencies?.[name] != null);
|
|
72
|
+
if (devOnly != null) {
|
|
73
|
+
throw new _errors.ForgeError(`${name} is imported at run time by ${importers}, but it is only a devDependency ` + `(of ${devOnly.name}). Move it to "dependencies".`);
|
|
74
|
+
}
|
|
75
|
+
throw new _errors.ForgeError(`${name} is imported at run time by ${importers}, but is not in "dependencies" of the ` + "deployable, any library it uses, or the workspace root package.json. Add it there.");
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async installedVersion(name, declarers, workspaceRootDir) {
|
|
79
|
+
const versions = new Map();
|
|
80
|
+
for (const scope of declarers){
|
|
81
|
+
const version = await findInstalledVersion(name, scope.dir) ?? await findInstalledVersion(name, workspaceRootDir);
|
|
82
|
+
if (version == null) {
|
|
83
|
+
throw new _errors.ForgeError(`${name} is declared by ${scope.name} but is not installed. ` + "Run the package manager install first.");
|
|
84
|
+
}
|
|
85
|
+
versions.set(scope.name, version);
|
|
86
|
+
}
|
|
87
|
+
const distinct = new Set(versions.values());
|
|
88
|
+
if (distinct.size > 1) {
|
|
89
|
+
const detail = [
|
|
90
|
+
...versions
|
|
91
|
+
].map(([owner, version])=>`${owner}: ${version}`).join(", ");
|
|
92
|
+
throw new _errors.ForgeError(`${name} is installed at different versions for the packages that declare it (${detail}). ` + "One packaged app can only ship one version; align them.");
|
|
93
|
+
}
|
|
94
|
+
const [version] = distinct;
|
|
95
|
+
if (version == null) {
|
|
96
|
+
throw new _errors.ForgeError(`${name} is not installed. Run the package manager install first.`);
|
|
97
|
+
}
|
|
98
|
+
return version;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
DependencyPinner = _ts_decorate([
|
|
102
|
+
(0, _decorators.injectable)()
|
|
103
|
+
], DependencyPinner);
|
|
104
|
+
/** Looks for `node_modules/<name>` in `fromDir` and each folder above it, as Node does. */ async function findInstalledVersion(name, fromDir) {
|
|
105
|
+
let dir = _nodepath.default.resolve(fromDir);
|
|
106
|
+
for(;;){
|
|
107
|
+
const manifest = _nodepath.default.join(dir, "node_modules", name, "package.json");
|
|
108
|
+
if (await _io.io.fileExists(manifest)) {
|
|
109
|
+
const { version } = await _io.io.readJsonFile(manifest);
|
|
110
|
+
return version;
|
|
111
|
+
}
|
|
112
|
+
const parent = _nodepath.default.dirname(dir);
|
|
113
|
+
if (parent === dir) {
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
dir = parent;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get PACKAGE_DIR () {
|
|
13
|
+
return PACKAGE_DIR;
|
|
14
|
+
},
|
|
15
|
+
get deployable () {
|
|
16
|
+
return deployable;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
20
|
+
const _io = require("@decohere/nexus/io");
|
|
21
|
+
function _interop_require_default(obj) {
|
|
22
|
+
return obj && obj.__esModule ? obj : {
|
|
23
|
+
default: obj
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const PACKAGE_DIR = ".package";
|
|
27
|
+
/**
|
|
28
|
+
* A deployable is a project with a Dockerfile: `docker.dockerfile` from `.decohere.js`,
|
|
29
|
+
* or `Dockerfile` in the project folder. `forge docker` and `forge package` share this
|
|
30
|
+
* rule so they always agree on which projects are deployables.
|
|
31
|
+
*/ function dockerfileName(project) {
|
|
32
|
+
return project.dockerConfig?.dockerfile ?? "Dockerfile";
|
|
33
|
+
}
|
|
34
|
+
function dockerfilePath(project) {
|
|
35
|
+
return _nodepath.default.join(project.projectRoot, dockerfileName(project));
|
|
36
|
+
}
|
|
37
|
+
async function isDeployable(project) {
|
|
38
|
+
return await _io.io.fileExists(dockerfilePath(project));
|
|
39
|
+
}
|
|
40
|
+
const deployable = {
|
|
41
|
+
dockerfileName,
|
|
42
|
+
dockerfilePath,
|
|
43
|
+
isDeployable
|
|
44
|
+
};
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "ImportGraph", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return ImportGraph;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
12
|
+
const _decorators = require("@decohere/crucible/decorators");
|
|
13
|
+
const _io = require("@decohere/nexus/io");
|
|
14
|
+
const _scribe = require("@decohere/scribe");
|
|
15
|
+
const _parseimports = require("parse-imports");
|
|
16
|
+
const _const = require("../const.js");
|
|
17
|
+
const _errors = require("../errors.js");
|
|
18
|
+
const _releaseexports = require("./release-exports.js");
|
|
19
|
+
function _interop_require_default(obj) {
|
|
20
|
+
return obj && obj.__esModule ? obj : {
|
|
21
|
+
default: obj
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
25
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
26
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
27
|
+
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;
|
|
28
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
29
|
+
}
|
|
30
|
+
const CODE_FILE = /\.(?:js|mjs|cjs)$/;
|
|
31
|
+
class ImportGraph {
|
|
32
|
+
#logger = _scribe.scribe.logger(ImportGraph.name);
|
|
33
|
+
async walk(entry, projects) {
|
|
34
|
+
const reached = {
|
|
35
|
+
workspace: new Set([
|
|
36
|
+
entry.name
|
|
37
|
+
]),
|
|
38
|
+
thirdParty: new Map()
|
|
39
|
+
};
|
|
40
|
+
const exportsByProject = new Map();
|
|
41
|
+
const seen = new Set();
|
|
42
|
+
const queue = [
|
|
43
|
+
{
|
|
44
|
+
file: _nodepath.default.join(entry.releaseDir, "es6", _releaseexports.releaseExports.toJs(entry.pkg.main ?? "src/index.ts")),
|
|
45
|
+
owner: entry
|
|
46
|
+
}
|
|
47
|
+
];
|
|
48
|
+
while(queue.length > 0){
|
|
49
|
+
const { file, owner } = queue.pop();
|
|
50
|
+
if (seen.has(file)) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
seen.add(file);
|
|
54
|
+
for (const specifier of (await this.importsOf(file, owner))){
|
|
55
|
+
if (specifier.startsWith(".")) {
|
|
56
|
+
queue.push({
|
|
57
|
+
file: await this.resolveRelative(file, specifier, owner),
|
|
58
|
+
owner
|
|
59
|
+
});
|
|
60
|
+
} else if (!isBuiltin(specifier)) {
|
|
61
|
+
this.follow(specifier, owner, projects, exportsByProject, reached, queue);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return reached;
|
|
66
|
+
}
|
|
67
|
+
follow(specifier, importer, projects, exportsByProject, reached, queue) {
|
|
68
|
+
const name = packageName(specifier);
|
|
69
|
+
const project = projects.get(name);
|
|
70
|
+
if (project == null) {
|
|
71
|
+
const owners = reached.thirdParty.get(name) ?? new Set();
|
|
72
|
+
owners.add(importer.name);
|
|
73
|
+
reached.thirdParty.set(name, owners);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
reached.workspace.add(name);
|
|
77
|
+
let exports1 = exportsByProject.get(name);
|
|
78
|
+
if (exports1 == null) {
|
|
79
|
+
exports1 = _releaseexports.releaseExports.build(project.pkg);
|
|
80
|
+
exportsByProject.set(name, exports1);
|
|
81
|
+
}
|
|
82
|
+
const subpath = specifier.slice(name.length);
|
|
83
|
+
const target = _releaseexports.releaseExports.resolve(exports1, subpath);
|
|
84
|
+
if (target == null) {
|
|
85
|
+
throw new _errors.ForgeError(`${importer.name} imports "${specifier}", but ${name} does not export "${subpath === "" ? "." : `.${subpath}`}".`);
|
|
86
|
+
}
|
|
87
|
+
queue.push({
|
|
88
|
+
file: _nodepath.default.join(project.releaseDir, target),
|
|
89
|
+
owner: project
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
async importsOf(file, owner) {
|
|
93
|
+
if (!await _io.io.fileExists(file)) {
|
|
94
|
+
throw new _errors.ForgeError(`${file} is imported by ${owner.name} but was not built. ` + "Run `forge build --configuration release` first.");
|
|
95
|
+
}
|
|
96
|
+
if (!CODE_FILE.test(file)) {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
const code = await _io.io.readFile(file);
|
|
100
|
+
const specifiers = [];
|
|
101
|
+
try {
|
|
102
|
+
for (const entry of (await (0, _parseimports.parseImports)(code))){
|
|
103
|
+
if (entry.moduleSpecifier.value != null) {
|
|
104
|
+
specifiers.push(entry.moduleSpecifier.value);
|
|
105
|
+
} else if (entry.isDynamicImport) {
|
|
106
|
+
this.#logger.warn(`${file}: dynamic import of ${entry.moduleSpecifier.code} cannot be followed; ` + "whatever it loads is not packaged");
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
} catch (reason) {
|
|
110
|
+
throw new _errors.ForgeError(`Could not read the imports of ${file}: ${reason instanceof Error ? reason.message : String(reason)}`);
|
|
111
|
+
}
|
|
112
|
+
return specifiers;
|
|
113
|
+
}
|
|
114
|
+
/** Compiled output keeps explicit `.js` paths; tolerate extensionless and folder imports. */ async resolveRelative(importer, specifier, owner) {
|
|
115
|
+
const base = _nodepath.default.resolve(_nodepath.default.dirname(importer), specifier);
|
|
116
|
+
for (const candidate of [
|
|
117
|
+
base,
|
|
118
|
+
`${base}.js`,
|
|
119
|
+
_nodepath.default.join(base, "index.js")
|
|
120
|
+
]){
|
|
121
|
+
if (await _io.io.fileExists(candidate)) {
|
|
122
|
+
return candidate;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
throw new _errors.ForgeError(`${importer} (${owner.name}) imports "${specifier}", which was not built. ` + "Run `forge build --configuration release` first.");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
ImportGraph = _ts_decorate([
|
|
129
|
+
(0, _decorators.injectable)()
|
|
130
|
+
], ImportGraph);
|
|
131
|
+
/** `@scope/pkg/deep/path` becomes `@scope/pkg`; `pkg/deep` becomes `pkg`. */ function packageName(specifier) {
|
|
132
|
+
const parts = specifier.split("/");
|
|
133
|
+
return specifier.startsWith("@") ? parts.slice(0, 2).join("/") : parts[0] ?? specifier;
|
|
134
|
+
}
|
|
135
|
+
function isBuiltin(specifier) {
|
|
136
|
+
return specifier.startsWith("node:") || _const.BUILT_IN_MODULES.includes(specifier) || _const.BUILT_IN_MODULES.includes(packageName(specifier));
|
|
137
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "releaseExports", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return releaseExports;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const ES6_PREFIX = "./es6/";
|
|
12
|
+
/** Condition names that can point at runnable ESM, most specific first. `types` never does. */ const RUNTIME_CONDITIONS = [
|
|
13
|
+
"import",
|
|
14
|
+
"node",
|
|
15
|
+
"default"
|
|
16
|
+
];
|
|
17
|
+
/** `src/main.ts` becomes `src/main.js`, with any leading `./` dropped. */ function toJs(filePath) {
|
|
18
|
+
return filePath.replace(/^\.\//, "").replace(/\.ts$/, ".js").replace(/\.mts$/, ".mjs");
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The `exports` a library needs once only its `es6/` output is shipped: the library's own
|
|
22
|
+
* map (or its `main`) with every path pointed at `./es6/...js`.
|
|
23
|
+
*/ function build(pkg) {
|
|
24
|
+
const result = {};
|
|
25
|
+
for (const [subpath, target] of Object.entries(subpathMap(pkg.exports))){
|
|
26
|
+
const file = runtimeFile(target);
|
|
27
|
+
if (file != null) {
|
|
28
|
+
result[subpath] = file.startsWith(ES6_PREFIX) ? file : `${ES6_PREFIX}${toJs(file)}`;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (Object.keys(result).length === 0) {
|
|
32
|
+
result["."] = `${ES6_PREFIX}${toJs(pkg.main ?? "src/index.ts")}`;
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
/** The file one subpath (`""` for the package root, `/testing`) points at, or undefined. */ function resolve(exports1, subpath) {
|
|
37
|
+
const key = subpath === "" ? "." : `.${subpath}`;
|
|
38
|
+
const exact = exports1[key];
|
|
39
|
+
if (exact != null) {
|
|
40
|
+
return exact;
|
|
41
|
+
}
|
|
42
|
+
for (const [pattern, target] of Object.entries(exports1)){
|
|
43
|
+
const star = pattern.indexOf("*");
|
|
44
|
+
if (star < 0) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const prefix = pattern.slice(0, star);
|
|
48
|
+
const suffix = pattern.slice(star + 1);
|
|
49
|
+
if (key.startsWith(prefix) && key.endsWith(suffix) && key.length >= pattern.length - 1) {
|
|
50
|
+
return target.replaceAll("*", key.slice(prefix.length, key.length - suffix.length));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
/** A bare path or a conditions object means "the root"; otherwise keys are subpaths. */ function subpathMap(exports1) {
|
|
56
|
+
if (exports1 == null) {
|
|
57
|
+
return {};
|
|
58
|
+
}
|
|
59
|
+
if (typeof exports1 === "string") {
|
|
60
|
+
return {
|
|
61
|
+
".": exports1
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const keys = Object.keys(exports1);
|
|
65
|
+
return keys.length > 0 && keys.every((key)=>key.startsWith(".")) ? exports1 : {
|
|
66
|
+
".": exports1
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function runtimeFile(target) {
|
|
70
|
+
if (typeof target === "string") {
|
|
71
|
+
return target;
|
|
72
|
+
}
|
|
73
|
+
if (target == null) {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
for (const condition of RUNTIME_CONDITIONS){
|
|
77
|
+
const file = runtimeFile(target[condition]);
|
|
78
|
+
if (file != null) {
|
|
79
|
+
return file;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
const releaseExports = {
|
|
85
|
+
build,
|
|
86
|
+
resolve,
|
|
87
|
+
toJs
|
|
88
|
+
};
|
|
@@ -168,5 +168,3 @@ class DependencyResolver {
|
|
|
168
168
|
DependencyResolver = _ts_decorate([
|
|
169
169
|
(0, _decorators.injectable)()
|
|
170
170
|
], DependencyResolver);
|
|
171
|
-
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9zZXJ2aWNlcy9kZXBlbmRlbmN5LXJlc29sdmVyLnNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiwgUHJvamVjdCwgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgeyB0eXBlIEZpbGVFeCwgaW8gfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2lvXCI7XG5pbXBvcnQgeyBwYXJzZUltcG9ydHMgfSBmcm9tIFwicGFyc2UtaW1wb3J0c1wiO1xuaW1wb3J0IHsgQlVJTFRfSU5fTU9EVUxFUyB9IGZyb20gXCIuLi9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRm9yZ2VFcnJvciB9IGZyb20gXCIuLi9lcnJvcnMuanNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGVwZW5kZW5jeVdhcm5pbmcsXG5cdERyaWZ0RW50cnksXG5cdFBhY2thZ2UsXG5cdFJlc29sdmVkRGVwZW5kZW5jeSxcbn0gZnJvbSBcIi4uL3R5cGVzL2RlcGVuZGVuY3kudHlwZXMuanNcIjtcblxuZXhwb3J0IHR5cGUgUHJvamVjdERlcGVuZGVuY2llcyA9IHtcblx0cHJvamVjdDogUHJvamVjdDtcblx0dXBkYXRlZFBhY2thZ2U6IFBhY2thZ2VKc29uO1xuXHR3YXJuaW5nczogRGVwZW5kZW5jeVdhcm5pbmdbXTtcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZXBlbmRlbmN5UmVzb2x2ZXIge1xuXHRwdWJsaWMgY29tcHV0ZURyaWZ0KGN1cnJlbnQ6IFBhY2thZ2VKc29uLCBjb21wdXRlZDogUGFja2FnZUpzb24pOiBEcmlmdEVudHJ5IHwgbnVsbCB7XG5cdFx0Y29uc3Qgc29ydEtleXMgPSAob2JqOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PlxuXHRcdFx0T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG9iaikuc29ydCgpKTtcblxuXHRcdGNvbnN0IGN1cnJlbnREZXBzID0gc29ydEtleXMoY3VycmVudC5kZXBlbmRlbmNpZXMgPz8ge30pO1xuXHRcdGNvbnN0IGNvbXB1dGVkRGVwcyA9IHNvcnRLZXlzKGNvbXB1dGVkLmRlcGVuZGVuY2llcyA/PyB7fSk7XG5cdFx0Y29uc3QgY3VycmVudERldkRlcHMgPSBzb3J0S2V5cyhjdXJyZW50LmRldkRlcGVuZGVuY2llcyA/PyB7fSk7XG5cdFx0Y29uc3QgY29tcHV0ZWREZXZEZXBzID0gc29ydEtleXMoY29tcHV0ZWQuZGV2RGVwZW5kZW5jaWVzID8/IHt9KTtcblxuXHRcdGNvbnN0IGhhc0RyaWZ0ID1cblx0XHRcdEpTT04uc3RyaW5naWZ5KGN1cnJlbnREZXBzKSAhPT0gSlNPTi5zdHJpbmdpZnkoY29tcHV0ZWREZXBzKSB8fFxuXHRcdFx0SlNPTi5zdHJpbmdpZnkoY3VycmVudERldkRlcHMpICE9PSBKU09OLnN0cmluZ2lmeShjb21wdXRlZERldkRlcHMpO1xuXG5cdFx0aWYgKCFoYXNEcmlmdCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG9yaWdpbmFsOiB7IGRlcGVuZGVuY2llczogY3VycmVudERlcHMsIGRldkRlcGVuZGVuY2llczogY3VycmVudERldkRlcHMgfSxcblx0XHRcdHVwZGF0ZWQ6IHsgZGVwZW5kZW5jaWVzOiBjb21wdXRlZERlcHMsIGRldkRlcGVuZGVuY2llczogY29tcHV0ZWREZXZEZXBzIH0sXG5cdFx0fTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRXb3Jrc3BhY2VQYWNrYWdlcyhcblx0XHR3b3Jrc3BhY2U6IFdvcmtzcGFjZSxcblx0XHRwcm9qZWN0czogcmVhZG9ubHkgUHJvamVjdFtdLFxuXHQpOiBQcm9taXNlPE1hcDxzdHJpbmcsIFBhY2thZ2U+PiB7XG5cdFx0Y29uc3QgcGFja2FnZUpzb24gPSBhd2FpdCB3b3Jrc3BhY2UuZ2V0UGFja2FnZUpzb24oKS5jYXRjaCgoKSA9PiB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBSb290IHBhY2thZ2UuanNvbiBub3QgZm91bmQgYXQgXCIke3dvcmtzcGFjZS5wYWNrYWdlSnNvbkRpcmVjdG9yeX0vcGFja2FnZS5qc29uXCIuIGAgK1xuXHRcdFx0XHRcdGBFbnN1cmUgdGhlIHdvcmtzcGFjZSByb290IGhhcyBhIHBhY2thZ2UuanNvbiB3aXRoIGRlcGVuZGVuY2llcyBsaXN0ZWQuYCxcblx0XHRcdCk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBpbnRlcm5hbHMgPSBuZXcgTWFwKFxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdHByb2plY3RzLm1hcChhc3luYyAocHJvaik6IFByb21pc2U8W3N0cmluZywgUGFja2FnZV0+ID0+IHtcblx0XHRcdFx0XHRjb25zdCBwYWNrYWdlSnNvbiA9IGF3YWl0IHByb2ouZ2V0UGFja2FnZUpzb24oKTtcblx0XHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdFx0cGFja2FnZUpzb24ubmFtZSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bmFtZTogcGFja2FnZUpzb24ubmFtZSxcblx0XHRcdFx0XHRcdFx0dmVyc2lvbjogcGFja2FnZUpzb24udmVyc2lvbixcblx0XHRcdFx0XHRcdFx0aXNJbnRlcm5hbDogdHJ1ZSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XTtcblx0XHRcdFx0fSksXG5cdFx0XHQpLFxuXHRcdCk7XG5cblx0XHRjb25zdCBwYWNrYWdlcyA9IE9iamVjdC5lbnRyaWVzKHBhY2thZ2VKc29uLmRlcGVuZGVuY2llcylcblx0XHRcdC5maWx0ZXIoKFtrZXldKSA9PiAhaW50ZXJuYWxzLmhhcyhrZXkpKVxuXHRcdFx0Lm1hcDxbc3RyaW5nLCBQYWNrYWdlXT4oKFtrZXksIHZhbF0pID0+IFtrZXksIHsgbmFtZToga2V5LCB2ZXJzaW9uOiB2YWwgfV0pO1xuXG5cdFx0Y29uc3QgZGV2UGFja2FnZXMgPSBPYmplY3QuZW50cmllcyhwYWNrYWdlSnNvbi5kZXZEZXBlbmRlbmNpZXMpXG5cdFx0XHQuZmlsdGVyKChba2V5XSkgPT4gIWludGVybmFscy5oYXMoa2V5KSlcblx0XHRcdC5tYXA8W3N0cmluZywgUGFja2FnZV0+KChba2V5LCB2YWxdKSA9PiBba2V5LCB7IG5hbWU6IGtleSwgdmVyc2lvbjogdmFsLCBpc0RldjogdHJ1ZSB9XSk7XG5cblx0XHRyZXR1cm4gbmV3IE1hcChbLi4ucGFja2FnZXMsIC4uLmRldlBhY2thZ2VzLCAuLi5pbnRlcm5hbHNdKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBjb21wdXRlUHJvamVjdERlcGVuZGVuY2llcyhcblx0XHRwcm9qZWN0OiBQcm9qZWN0LFxuXHRcdHdvcmtzcGFjZVBhY2thZ2VzOiBNYXA8c3RyaW5nLCBQYWNrYWdlPixcblx0KTogUHJvbWlzZTxQcm9qZWN0RGVwZW5kZW5jaWVzPiB7XG5cdFx0Y29uc3QgeyBkZXBlbmRlbmNpZXMsIGRldkRlcGVuZGVuY2llcywgd2FybmluZ3MgfSA9IGF3YWl0IHRoaXMuZ2V0RGVwZW5kZW5jaWVzKFxuXHRcdFx0cHJvamVjdCxcblx0XHRcdHdvcmtzcGFjZVBhY2thZ2VzLFxuXHRcdCk7XG5cblx0XHRjb25zdCBwa2cgPSBhd2FpdCBwcm9qZWN0LmdldFBhY2thZ2VKc29uKCk7XG5cdFx0Y29uc3QgdXBkYXRlZFBhY2thZ2UgPSBwa2dcblx0XHRcdC53aXRoRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcylcblx0XHRcdC53aXRoRGV2RGVwZW5kZW5jaWVzKGRldkRlcGVuZGVuY2llcyk7XG5cblx0XHRyZXR1cm4geyBwcm9qZWN0LCB1cGRhdGVkUGFja2FnZSwgd2FybmluZ3MgfTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZ2V0RGVwZW5kZW5jaWVzKHByb2plY3Q6IFByb2plY3QsIHdvcmtzcGFjZVBhY2thZ2VzOiBNYXA8c3RyaW5nLCBQYWNrYWdlPikge1xuXHRcdGNvbnN0IGZpbGVzID0gYXdhaXQgcHJvamVjdC5nZXRBbGxGaWxlcygpO1xuXHRcdGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChmaWxlcy5tYXAoKGZpbGUpID0+IHRoaXMuZ2V0RmlsZUltcG9ydHMoZmlsZSkpKTtcblx0XHRjb25zdCBpbXBvcnRzID0gcmVzdWx0cy5mbGF0TWFwKChyKSA9PiByLmltcG9ydHMpO1xuXHRcdGNvbnN0IHdhcm5pbmdzID0gcmVzdWx0cy5mbGF0TWFwKChyKSA9PiByLndhcm5pbmdzKTtcblxuXHRcdGNvbnN0IGFsbERlcGVuZGVuY2llcyA9IFsuLi5uZXcgU2V0KGltcG9ydHMpXVxuXHRcdFx0Lm1hcCgoZmlsZUltcG9ydCkgPT4gdGhpcy5nZXREZXBlbmRlbmN5RnJvbShmaWxlSW1wb3J0LCB3b3Jrc3BhY2VQYWNrYWdlcykpXG5cdFx0XHQuZmlsdGVyKChkZXApID0+IGRlcCAhPSBudWxsKTtcblxuXHRcdGNvbnN0IG1pc3NpbmcgPSBhbGxEZXBlbmRlbmNpZXMuZmlsdGVyKFxuXHRcdFx0KGRlcCk6IGRlcCBpcyBSZXNvbHZlZERlcGVuZGVuY3kgJiB7IG1pc3Npbmc6IHRydWUgfSA9PiBkZXAubWlzc2luZyxcblx0XHQpO1xuXG5cdFx0aWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbmFtZXMgPSBtaXNzaW5nLm1hcCgoZGVwKSA9PiBkZXAubmFtZSkuam9pbihcIiwgXCIpO1xuXHRcdFx0dGhyb3cgbmV3IEZvcmdlRXJyb3IoYE1pc3NpbmcgcGFja2FnZXMgaW4gcHJvamVjdCBcIiR7cHJvamVjdC5uYW1lfVwiOiAke25hbWVzfWApO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc29sdmVkID0gYWxsRGVwZW5kZW5jaWVzLmZpbHRlcihcblx0XHRcdChkZXApOiBkZXAgaXMgUmVzb2x2ZWREZXBlbmRlbmN5ICYgeyBtaXNzaW5nOiBmYWxzZSB9ID0+ICFkZXAubWlzc2luZyxcblx0XHQpO1xuXG5cdFx0Y29uc3QgZGVwZW5kZW5jaWVzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRcdFx0cmVzb2x2ZWRcblx0XHRcdFx0LmZpbHRlcigoZGVwKSA9PiAhZGVwLmlzRGV2KVxuXHRcdFx0XHQubWFwPFtzdHJpbmcsIHN0cmluZ10+KChkZXApID0+IFtkZXAubmFtZSwgZGVwLnZlcnNpb25dKSxcblx0XHQpO1xuXG5cdFx0Y29uc3QgZGV2RGVwZW5kZW5jaWVzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRcdFx0cmVzb2x2ZWRcblx0XHRcdFx0LmZpbHRlcigoZGVwKSA9PiBkZXAuaXNEZXYpXG5cdFx0XHRcdC5tYXA8W3N0cmluZywgc3RyaW5nXT4oKGRlcCkgPT4gW2RlcC5uYW1lLCBkZXAudmVyc2lvbl0pLFxuXHRcdCk7XG5cblx0XHRyZXR1cm4geyBkZXBlbmRlbmNpZXMsIGRldkRlcGVuZGVuY2llcywgd2FybmluZ3MgfTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0RGVwZW5kZW5jeUZyb20oXG5cdFx0aW1wb3J0TmFtZTogc3RyaW5nLFxuXHRcdHdvcmtzcGFjZVBhY2thZ2VzOiBNYXA8c3RyaW5nLCBQYWNrYWdlPixcblx0KTogUmVzb2x2ZWREZXBlbmRlbmN5IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoaW1wb3J0TmFtZS5zdGFydHNXaXRoKFwiLlwiKSB8fCBpbXBvcnROYW1lLnN0YXJ0c1dpdGgoXCJub2RlOlwiKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhY2thZ2VOYW1lTWF0Y2ggPSBpbXBvcnROYW1lLm1hdGNoKC9eKD86KEBbXi9dK1xcL1teL10rKXwoW14vXSspKS8pO1xuXHRcdGNvbnN0IHBhY2thZ2VOYW1lID0gcGFja2FnZU5hbWVNYXRjaD8uWzBdO1xuXG5cdFx0aWYgKHBhY2thZ2VOYW1lID09IG51bGwgfHwgQlVJTFRfSU5fTU9EVUxFUy5pbmNsdWRlcyhwYWNrYWdlTmFtZSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwYWNrZyA9IHdvcmtzcGFjZVBhY2thZ2VzLmdldChwYWNrYWdlTmFtZSk7XG5cblx0XHRpZiAocGFja2cgPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bmFtZTogcGFja2FnZU5hbWUsXG5cdFx0XHRcdHZlcnNpb246IHVuZGVmaW5lZCxcblx0XHRcdFx0aW50ZXJuYWw6IHVuZGVmaW5lZCxcblx0XHRcdFx0bWlzc2luZzogdHJ1ZSxcblx0XHRcdFx0aXNEZXY6IGZhbHNlLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZTogcGFja2FnZU5hbWUsXG5cdFx0XHR2ZXJzaW9uOiBwYWNrZy52ZXJzaW9uID8/IFwiXCIsXG5cdFx0XHRpbnRlcm5hbDogcGFja2cuaXNJbnRlcm5hbCA/PyBmYWxzZSxcblx0XHRcdG1pc3Npbmc6IGZhbHNlLFxuXHRcdFx0aXNEZXY6IHBhY2tnLmlzRGV2ID8/IGZhbHNlLFxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGdldEZpbGVJbXBvcnRzKFxuXHRcdGZpbGU6IEZpbGVFeCxcblx0KTogUHJvbWlzZTx7IGltcG9ydHM6IHN0cmluZ1tdOyB3YXJuaW5nczogRGVwZW5kZW5jeVdhcm5pbmdbXSB9PiB7XG5cdFx0Y29uc3QgY29udGVudHMgPSBhd2FpdCBpby5yZWFkRmlsZShmaWxlLmZ1bGxQYXRoKTtcblx0XHRjb25zdCBwYXJzZWQgPSBBcnJheS5mcm9tKGF3YWl0IHBhcnNlSW1wb3J0cyhjb250ZW50cykpO1xuXG5cdFx0Y29uc3QgaW1wb3J0czogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCB3YXJuaW5nczogRGVwZW5kZW5jeVdhcm5pbmdbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpbXB0IG9mIHBhcnNlZCkge1xuXHRcdFx0aWYgKGltcHQubW9kdWxlU3BlY2lmaWVyLnZhbHVlICE9IG51bGwpIHtcblx0XHRcdFx0aW1wb3J0cy5wdXNoKGltcHQubW9kdWxlU3BlY2lmaWVyLnZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoaW1wdC5pc0R5bmFtaWNJbXBvcnQpIHtcblx0XHRcdFx0Y29uc3QgbGluZSA9IGNvbnRlbnRzLnN1YnN0cmluZygwLCBpbXB0LnN0YXJ0SW5kZXgpLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcblx0XHRcdFx0d2FybmluZ3MucHVzaCh7XG5cdFx0XHRcdFx0ZmlsZTogZmlsZS5mdWxsUGF0aCxcblx0XHRcdFx0XHRsaW5lLFxuXHRcdFx0XHRcdG1lc3NhZ2U6IGBEeW5hbWljIGltcG9ydCB3aXRoIG5vbi1saXRlcmFsIHNwZWNpZmllciBcXGAke2ltcHQubW9kdWxlU3BlY2lmaWVyLmNvZGV9XFxgIGNhbm5vdCBiZSBzdGF0aWNhbGx5IHJlc29sdmVkYCxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgaW1wb3J0cywgd2FybmluZ3MgfTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkRlcGVuZGVuY3lSZXNvbHZlciIsImNvbXB1dGVEcmlmdCIsImN1cnJlbnQiLCJjb21wdXRlZCIsInNvcnRLZXlzIiwib2JqIiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwic29ydCIsImN1cnJlbnREZXBzIiwiZGVwZW5kZW5jaWVzIiwiY29tcHV0ZWREZXBzIiwiY3VycmVudERldkRlcHMiLCJkZXZEZXBlbmRlbmNpZXMiLCJjb21wdXRlZERldkRlcHMiLCJoYXNEcmlmdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJvcmlnaW5hbCIsInVwZGF0ZWQiLCJnZXRXb3Jrc3BhY2VQYWNrYWdlcyIsIndvcmtzcGFjZSIsInByb2plY3RzIiwicGFja2FnZUpzb24iLCJnZXRQYWNrYWdlSnNvbiIsImNhdGNoIiwiRXJyb3IiLCJwYWNrYWdlSnNvbkRpcmVjdG9yeSIsImludGVybmFscyIsIk1hcCIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJwcm9qIiwibmFtZSIsInZlcnNpb24iLCJpc0ludGVybmFsIiwicGFja2FnZXMiLCJmaWx0ZXIiLCJrZXkiLCJoYXMiLCJ2YWwiLCJkZXZQYWNrYWdlcyIsImlzRGV2IiwiY29tcHV0ZVByb2plY3REZXBlbmRlbmNpZXMiLCJwcm9qZWN0Iiwid29ya3NwYWNlUGFja2FnZXMiLCJ3YXJuaW5ncyIsImdldERlcGVuZGVuY2llcyIsInBrZyIsInVwZGF0ZWRQYWNrYWdlIiwid2l0aERlcGVuZGVuY2llcyIsIndpdGhEZXZEZXBlbmRlbmNpZXMiLCJmaWxlcyIsImdldEFsbEZpbGVzIiwicmVzdWx0cyIsImZpbGUiLCJnZXRGaWxlSW1wb3J0cyIsImltcG9ydHMiLCJmbGF0TWFwIiwiciIsImFsbERlcGVuZGVuY2llcyIsIlNldCIsImZpbGVJbXBvcnQiLCJnZXREZXBlbmRlbmN5RnJvbSIsImRlcCIsIm1pc3NpbmciLCJsZW5ndGgiLCJuYW1lcyIsImpvaW4iLCJGb3JnZUVycm9yIiwicmVzb2x2ZWQiLCJpbXBvcnROYW1lIiwic3RhcnRzV2l0aCIsInBhY2thZ2VOYW1lTWF0Y2giLCJtYXRjaCIsInBhY2thZ2VOYW1lIiwiQlVJTFRfSU5fTU9EVUxFUyIsImluY2x1ZGVzIiwicGFja2ciLCJnZXQiLCJ1bmRlZmluZWQiLCJpbnRlcm5hbCIsImNvbnRlbnRzIiwiaW8iLCJyZWFkRmlsZSIsImZ1bGxQYXRoIiwicGFyc2VkIiwiQXJyYXkiLCJmcm9tIiwicGFyc2VJbXBvcnRzIiwiaW1wdCIsIm1vZHVsZVNwZWNpZmllciIsInZhbHVlIiwicHVzaCIsImlzRHluYW1pY0ltcG9ydCIsImxpbmUiLCJzdWJzdHJpbmciLCJzdGFydEluZGV4Iiwic3BsaXQiLCJtZXNzYWdlIiwiY29kZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFvQmFBOzs7ZUFBQUE7Ozs0QkFwQmM7b0JBRUs7OEJBQ0g7dUJBQ0k7d0JBQ047Ozs7Ozs7QUFlcEIsTUFBTUE7SUFDTEMsYUFBYUMsT0FBb0IsRUFBRUMsUUFBcUIsRUFBcUI7UUFDbkYsTUFBTUMsV0FBVyxDQUFDQyxNQUNqQkMsT0FBT0MsV0FBVyxDQUFDRCxP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
|
|
@@ -228,5 +228,3 @@ FileWriterService = _ts_decorate([
|
|
|
228
228
|
_diagnostics.Trace,
|
|
229
229
|
(0, _decorators.injectable)()
|
|
230
230
|
], FileWriterService);
|
|
231
|
-
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9zZXJ2aWNlcy9maWxlLXdyaXRlci5zZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgeyBUcmFjZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvZGlhZ25vc3RpY3NcIjtcbmltcG9ydCB7IGlvIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pb1wiO1xuaW1wb3J0IFwiLi4vZXh0ZW5zaW9ucy9wcm9qZWN0LmV4dGVuc2lvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRUYXJnZXQgfSBmcm9tIFwiLi4vdHlwZXMvYnVpbGQtdGFyZ2V0LnR5cGUuanNcIjtcbmltcG9ydCB0eXBlIHsgVHJhbnNmb3JtUmVzcG9uc2UgfSBmcm9tIFwiLi4vdHlwZXMvdHJhbnNmb3JtLXJlc3BvbnNlLm1vZGVsLmpzXCI7XG5cbmNvbnN0IERFRkFVTFRfV1JJVEVfQ09OQ1VSUkVOQ1kgPSAxNjtcblxuQFRyYWNlXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmlsZVdyaXRlclNlcnZpY2Uge1xuXHQjYXJ0aWZhY3RCeVBhdGggPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXHQjd2FybXVwU2lnbmF0dXJlID0gXCJcIjtcblx0I3dhcm11cFByb21pc2U6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG5cdCNpbml0aWFsaXplZCA9IGZhbHNlO1xuXHQjcGVuZGluZ1dyaXRlczogVHJhbnNmb3JtUmVzcG9uc2VbXSA9IFtdO1xuXHQjYWN0aXZlV29ya2VycyA9IDA7XG5cdCNkcmFpblJlc29sdmVyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcblx0I2Vuc3VyZWREaXJzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdCNlbnN1cmVEaXJQcm9taXNlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuXHQjd29ya2VyRXJyb3I6IHVua25vd247XG5cblx0cHVibGljIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuI2luaXRpYWxpemVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuI2luaXRpYWxpemVkID0gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyB3YXJtdXAocHJvamVjdHM6IFByb2plY3RbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG91dHB1dERpcnMgPSB0aGlzLmdldE91dHB1dERpcnMocHJvamVjdHMpO1xuXHRcdGNvbnN0IHNpZ25hdHVyZSA9IG91dHB1dERpcnMuam9pbihcInxcIik7XG5cdFx0aWYgKHNpZ25hdHVyZSA9PT0gdGhpcy4jd2FybXVwU2lnbmF0dXJlICYmIHRoaXMuI3dhcm11cFByb21pc2UgIT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuI3dhcm11cFByb21pc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy4jd2FybXVwU2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuXHRcdHRoaXMuI2Vuc3VyZWREaXJzLmNsZWFyKCk7XG5cdFx0dGhpcy4jZW5zdXJlRGlyUHJvbWlzZXMuY2xlYXIoKTtcblx0XHR0aGlzLiN3b3JrZXJFcnJvciA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLiN3YXJtdXBQcm9taXNlID0gdGhpcy5sb2FkRXhpc3RpbmdBcnRpZmFjdHMob3V0cHV0RGlycyk7XG5cdFx0cmV0dXJuIHRoaXMuI3dhcm11cFByb21pc2U7XG5cdH1cblxuXHRwdWJsaWMgZW5xdWV1ZU91dHB1dChyZXNwb25zZTogVHJhbnNmb3JtUmVzcG9uc2UpOiB2b2lkIHtcblx0XHRpZiAodGhpcy4jd29ya2VyRXJyb3IgIT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAocmVzcG9uc2Uub3V0Y29tZSAhPT0gXCJzdWNjZXNzXCIgfHwgcmVzcG9uc2Uub3V0cHV0UGF0aCA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuI3BlbmRpbmdXcml0ZXMucHVzaChyZXNwb25zZSk7XG5cdFx0dGhpcy5zdGFydFdvcmtlcnMoKTtcblx0fVxuXG5cdHB1YmxpYyBlbnF1ZXVlT3V0cHV0cyhyZXNwb25zZXM6IFRyYW5zZm9ybVJlc3BvbnNlW10pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuXHRcdFx0dGhpcy5lbnF1ZXVlT3V0cHV0KHJlc3BvbnNlKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuI3dhcm11cFByb21pc2UgIT0gbnVsbCkge1xuXHRcdFx0YXdhaXQgdGhpcy4jd2FybXVwUHJvbWlzZTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuI3BlbmRpbmdXcml0ZXMubGVuZ3RoID09PSAwICYmIHRoaXMuI2FjdGl2ZVdvcmtlcnMgPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0YXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdHRoaXMuI2RyYWluUmVzb2x2ZXJzLnB1c2gocmVzb2x2ZSk7XG5cdFx0fSk7XG5cdFx0aWYgKHRoaXMuI3dvcmtlckVycm9yICE9IG51bGwpIHtcblx0XHRcdHRocm93IHRoaXMuI3dvcmtlckVycm9yO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0T3V0cHV0RGlycyhwcm9qZWN0czogUHJvamVjdFtdKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGRpcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRmb3IgKGNvbnN0IHByb2plY3Qgb2YgcHJvamVjdHMpIHtcblx0XHRcdGZvciAoY29uc3QgdGFyZ2V0IG9mIHByb2plY3QuZ2V0Rm9yZ2VDb25maWd1cmF0aW9uKCkudGFyZ2V0cykge1xuXHRcdFx0XHRkaXJzLmFkZChwcm9qZWN0LmdldE91dERpcih0YXJnZXQgYXMgQnVpbGRUYXJnZXQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIFsuLi5kaXJzXS5zb3J0KCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGxvYWRFeGlzdGluZ0FydGlmYWN0cyhvdXRwdXREaXJzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuI2FydGlmYWN0QnlQYXRoLmNsZWFyKCk7XG5cblx0XHRjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGRpciBvZiBvdXRwdXREaXJzKSB7XG5cdFx0XHRmaWxlcy5wdXNoKC4uLihhd2FpdCB0aGlzLmNvbGxlY3RGaWxlcyhkaXIpKSk7XG5cdFx0fVxuXG5cdFx0YXdhaXQgdGhpcy53aXRoQ29uY3VycmVuY3koZmlsZXMsIHRoaXMuZ2V0V3JpdGVDb25jdXJyZW5jeSgpLCBhc3luYyAoZmlsZVBhdGgpID0+IHtcblx0XHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgXCJ1dGY4XCIpO1xuXHRcdFx0dGhpcy4jYXJ0aWZhY3RCeVBhdGguc2V0KGZpbGVQYXRoLCBjb250ZW50KTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgY29sbGVjdEZpbGVzKHJvb3REaXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIocm9vdERpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXHRcdFx0Y29uc3QgZmlsZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcblx0XHRcdFx0Y29uc3QgZnVsbFBhdGggPSBgJHtyb290RGlyfS8ke2VudHJ5Lm5hbWV9YDtcblx0XHRcdFx0aWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcblx0XHRcdFx0XHRmaWxlcy5wdXNoKC4uLihhd2FpdCB0aGlzLmNvbGxlY3RGaWxlcyhmdWxsUGF0aCkpKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbnRyeS5pc0ZpbGUoKSkge1xuXHRcdFx0XHRcdGZpbGVzLnB1c2goZnVsbFBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmlsZXM7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRXcml0ZUNvbmN1cnJlbmN5KCk6IG51bWJlciB7XG5cdFx0Y29uc3QgcmVxdWVzdGVkID0gTnVtYmVyKHByb2Nlc3MuZW52LkZPUkdFX1dSSVRFX0NPTkNVUlJFTkNZKTtcblx0XHRpZiAoTnVtYmVyLmlzRmluaXRlKHJlcXVlc3RlZCkgJiYgcmVxdWVzdGVkID4gMCkge1xuXHRcdFx0cmV0dXJuIE1hdGguZmxvb3IocmVxdWVzdGVkKTtcblx0XHR9XG5cdFx0cmV0dXJuIERFRkFVTFRfV1JJVEVfQ09OQ1VSUkVOQ1k7XG5cdH1cblxuXHRwcml2YXRlIHN0YXJ0V29ya2VycygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy4jd29ya2VyRXJyb3IgIT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBtYXhXb3JrZXJzID0gdGhpcy5nZXRXcml0ZUNvbmN1cnJlbmN5KCk7XG5cdFx0d2hpbGUgKHRoaXMuI2FjdGl2ZVdvcmtlcnMgPCBtYXhXb3JrZXJzICYmIHRoaXMuI3BlbmRpbmdXcml0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy4jYWN0aXZlV29ya2VycyArPSAxO1xuXHRcdFx0dm9pZCB0aGlzLnJ1bldvcmtlcigpLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLiNhY3RpdmVXb3JrZXJzIC09IDE7XG5cdFx0XHRcdGlmICh0aGlzLiNwZW5kaW5nV3JpdGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR0aGlzLnN0YXJ0V29ya2VycygpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuI2FjdGl2ZVdvcmtlcnMgPT09IDApIHtcblx0XHRcdFx0XHR0aGlzLnJlc29sdmVEcmFpbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIHJ1bldvcmtlcigpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB0aGlzLiNwZW5kaW5nV3JpdGVzLnNoaWZ0KCk7XG5cdFx0XHRpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICh0aGlzLiN3YXJtdXBQcm9taXNlICE9IG51bGwpIHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLiN3YXJtdXBQcm9taXNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgb3V0cHV0UGF0aCA9IHJlc3BvbnNlLm91dHB1dFBhdGg7XG5cdFx0XHRcdGlmIChvdXRwdXRQYXRoID09IG51bGwpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IG91dHB1dERpciA9IHJlc3BvbnNlLm91dHB1dERpcjtcblx0XHRcdFx0aWYgKG91dHB1dERpciAhPSBudWxsKSB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5lbnN1cmVEaXJlY3Rvcnkob3V0cHV0RGlyKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGV4aXN0aW5nID0gdGhpcy4jYXJ0aWZhY3RCeVBhdGguZ2V0KG91dHB1dFBhdGgpO1xuXHRcdFx0XHRpZiAoZXhpc3RpbmcgPT09IHJlc3BvbnNlLmNvZGUpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGF3YWl0IGlvLndyaXRlRmlsZShvdXRwdXRQYXRoLCByZXNwb25zZS5jb2RlKTtcblx0XHRcdFx0dGhpcy4jYXJ0aWZhY3RCeVBhdGguc2V0KG91dHB1dFBhdGgsIHJlc3BvbnNlLmNvZGUpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0dGhpcy4jd29ya2VyRXJyb3IgPSBlcnJvcjtcblx0XHRcdFx0dGhpcy4jcGVuZGluZ1dyaXRlcyA9IFtdO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBlbnN1cmVEaXJlY3RvcnkoZGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy4jZW5zdXJlZERpcnMuaGFzKGRpcikpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLiNlbnN1cmVEaXJQcm9taXNlcy5nZXQoZGlyKTtcblx0XHRpZiAoZXhpc3RpbmcgIT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHRcdH1cblx0XHRjb25zdCBta2RpclByb21pc2UgPSBmcy5ta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xuXHRcdFx0dGhpcy4jZW5zdXJlZERpcnMuYWRkKGRpcik7XG5cdFx0XHR0aGlzLiNlbnN1cmVEaXJQcm9taXNlcy5kZWxldGUoZGlyKTtcblx0XHR9KTtcblx0XHR0aGlzLiNlbnN1cmVEaXJQcm9taXNlcy5zZXQoZGlyLCBta2RpclByb21pc2UpO1xuXHRcdHJldHVybiBta2RpclByb21pc2U7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVEcmFpbigpOiB2b2lkIHtcblx0XHRpZiAodGhpcy4jcGVuZGluZ1dyaXRlcy5sZW5ndGggPiAwIHx8IHRoaXMuI2FjdGl2ZVdvcmtlcnMgPiAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgcmVzb2x2ZSBvZiB0aGlzLiNkcmFpblJlc29sdmVycykge1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH1cblx0XHR0aGlzLiNkcmFpblJlc29sdmVycyA9IFtdO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyB3aXRoQ29uY3VycmVuY3k8VD4oXG5cdFx0aXRlbXM6IFRbXSxcblx0XHRjb25jdXJyZW5jeTogbnVtYmVyLFxuXHRcdHdvcmtlcjogKGl0ZW06IFQpID0+IFByb21pc2U8dm9pZD4sXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBjdXJzb3IgPSAwO1xuXHRcdGNvbnN0IHdvcmtlckNvdW50ID0gTWF0aC5taW4oY29uY3VycmVuY3ksIGl0ZW1zLmxlbmd0aCk7XG5cdFx0Y29uc3Qgd29ya2VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHdvcmtlckNvdW50IH0sICgpID0+XG5cdFx0XHQoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4ID0gY3Vyc29yO1xuXHRcdFx0XHRcdGN1cnNvciArPSAxO1xuXHRcdFx0XHRcdGlmIChpbmRleCA+PSBpdGVtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YXdhaXQgd29ya2VyKGl0ZW1zW2luZGV4XSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pKCksXG5cdFx0KTtcblx0XHRhd2FpdCBQcm9taXNlLmFsbCh3b3JrZXJzKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkZpbGVXcml0ZXJTZXJ2aWNlIiwiREVGQVVMVF9XUklURV9DT05DVVJSRU5DWSIsIk1hcCIsIlNldCIsImluaXRpYWxpemUiLCJ3YXJtdXAiLCJwcm9qZWN0cyIsIm91dHB1dERpcnMiLCJnZXRPdXRwdXREaXJzIiwic2lnbmF0dXJlIiwiam9pbiIsImNsZWFyIiwidW5kZWZpbmVkIiwibG9hZEV4aXN0aW5nQXJ0aWZhY3RzIiwiZW5xdWV1ZU91dHB1dCIsInJlc3BvbnNlIiwib3V0Y29tZSIsIm91dHB1dFBhdGgiLCJwdXNoIiwic3RhcnRXb3JrZXJzIiwiZW5xdWV1ZU91dHB1dHMiLCJyZXNwb25zZXMiLCJmbHVzaCIsImxlbmd0aCIsIlByb21pc2UiLCJyZXNvbHZlIiwiZGlycyIsInByb2plY3QiLCJ0YXJnZXQiLCJnZXRGb3JnZUNvbmZpZ3VyYXRpb24iLCJ0YXJnZXRzIiwiYWRkIiwiZ2V0T3V0RGlyIiwic29ydCIsImZpbGVzIiwiZGlyIiwiY29sbGVjdEZpbGVzIiwid2l0aENvbmN1cnJlbmN5IiwiZ2V0V3JpdGVDb25jdXJyZW5jeSIsImZpbGVQYXRoIiwiY29udGVudCIsImZzIiwicmVhZEZpbGUiLCJzZXQiLCJyb290RGlyIiwiZW50cmllcyIsInJlYWRkaXIiLCJ3aXRoRmlsZVR5cGVzIiwiZW50cnkiLCJmdWxsUGF0aCIsIm5hbWUiLCJpc0RpcmVjdG9yeSIsImlzRmlsZSIsInJlcXVlc3RlZCIsIk51bWJlciIsInByb2Nlc3MiLCJlbnYiLCJGT1JHRV9XUklURV9DT05DVVJSRU5DWSIsImlzRmluaXRlIiwiTWF0aCIsImZsb29yIiwibWF4V29ya2VycyIsInJ1bldvcmtlciIsImZpbmFsbHkiLCJyZXNvbHZlRHJhaW4iLCJzaGlmdCIsIm91dHB1dERpciIsImVuc3VyZURpcmVjdG9yeSIsImV4aXN0aW5nIiwiZ2V0IiwiY29kZSIsImlvIiwid3JpdGVGaWxlIiwiZXJyb3IiLCJoYXMiLCJta2RpclByb21pc2UiLCJta2RpciIsInJlY3Vyc2l2ZSIsInRoZW4iLCJkZWxldGUiLCJpdGVtcyIsImNvbmN1cnJlbmN5Iiwid29ya2VyIiwiY3Vyc29yIiwid29ya2VyQ291bnQiLCJtaW4iLCJ3b3JrZXJzIiwiQXJyYXkiLCJmcm9tIiwiaW5kZXgiLCJhbGwiXSwibWFwcGluZ3MiOiI7Ozs7K0JBYWFBOzs7ZUFBQUE7OztpRUFiRTs0QkFDWTs2QkFFTDtvQkFDSDtRQUNaOzs7Ozs7Ozs7Ozs7QUFJUCxNQUFNQyw0QkFBNEI7QUFJM0IsTUFBTUQ7SUFDWixDQUFBLGNBQWUsR0FB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
|
|
@@ -41,12 +41,23 @@ class SwcTranspiler extends (0, _extensibility.mixwith)(_cachesoutputsmixin.Cach
|
|
|
41
41
|
_buildtargettype.BuildTargets.commonjs
|
|
42
42
|
];
|
|
43
43
|
#swcConfigFactory = new _swcconfigfactory.SwcConfigFactory();
|
|
44
|
+
#workspace;
|
|
45
|
+
watch(workspace) {
|
|
46
|
+
this.#workspace = workspace;
|
|
47
|
+
super.watch(workspace);
|
|
48
|
+
}
|
|
49
|
+
withAliasContext(options = {}) {
|
|
50
|
+
return {
|
|
51
|
+
...options,
|
|
52
|
+
workspace: options.workspace ?? this.#workspace
|
|
53
|
+
};
|
|
54
|
+
}
|
|
44
55
|
async transformProject(projectArrayLike, fileFilter, onOutput) {
|
|
45
56
|
const projects = Array.isArray(projectArrayLike) ? projectArrayLike : [
|
|
46
57
|
projectArrayLike
|
|
47
58
|
];
|
|
48
59
|
const responses = await Promise.all(projects.map(async (project)=>{
|
|
49
|
-
const { targets, aliasPaths } = project.getForgeConfiguration();
|
|
60
|
+
const { targets, aliasPaths, sourceMaps } = project.getForgeConfiguration();
|
|
50
61
|
const transpileTargets = targets.filter((bt)=>bt !== _buildtargettype.BuildTargets.types);
|
|
51
62
|
if (transpileTargets.length === 0) {
|
|
52
63
|
return [];
|
|
@@ -58,7 +69,10 @@ class SwcTranspiler extends (0, _extensibility.mixwith)(_cachesoutputsmixin.Cach
|
|
|
58
69
|
return this.transformTarget(sourceFiles, target, {
|
|
59
70
|
tsConfig,
|
|
60
71
|
userConfig,
|
|
61
|
-
aliasPaths
|
|
72
|
+
aliasPaths,
|
|
73
|
+
sourceMaps,
|
|
74
|
+
workspace: this.#workspace,
|
|
75
|
+
projects
|
|
62
76
|
}, project, onOutput);
|
|
63
77
|
}));
|
|
64
78
|
return responses.flat();
|
|
@@ -79,7 +93,7 @@ class SwcTranspiler extends (0, _extensibility.mixwith)(_cachesoutputsmixin.Cach
|
|
|
79
93
|
* Reads the file with `fs.readFileSync` and transpiles via `swc.transformSync`.
|
|
80
94
|
* Intended for callers that cannot await (e.g. Node.js `registerHooks` load hook).
|
|
81
95
|
*/ transformFileSync(file, buildTarget, options = {}) {
|
|
82
|
-
const baseConfig = this.#swcConfigFactory.createBaseConfig(buildTarget, options);
|
|
96
|
+
const baseConfig = this.#swcConfigFactory.createBaseConfig(buildTarget, this.withAliasContext(options));
|
|
83
97
|
const swcOptions = this.#swcConfigFactory.createFileConfig(file, baseConfig);
|
|
84
98
|
let content;
|
|
85
99
|
try {
|
|
@@ -111,6 +125,7 @@ class SwcTranspiler extends (0, _extensibility.mixwith)(_cachesoutputsmixin.Cach
|
|
|
111
125
|
return _transformresponsemodel.TransformResponse.Success({
|
|
112
126
|
file,
|
|
113
127
|
code: transformed.code,
|
|
128
|
+
sourceContent: content,
|
|
114
129
|
target: buildTarget,
|
|
115
130
|
fileName,
|
|
116
131
|
config: swcOptions
|
|
@@ -126,7 +141,7 @@ class SwcTranspiler extends (0, _extensibility.mixwith)(_cachesoutputsmixin.Cach
|
|
|
126
141
|
}
|
|
127
142
|
}
|
|
128
143
|
async transformTarget(files, buildTarget, options, project, onOutput) {
|
|
129
|
-
const baseConfig = this.#swcConfigFactory.createBaseConfig(buildTarget, options
|
|
144
|
+
const baseConfig = this.#swcConfigFactory.createBaseConfig(buildTarget, this.withAliasContext(options));
|
|
130
145
|
return await Promise.all(files.map((file)=>{
|
|
131
146
|
const swcOptions = this.#swcConfigFactory.createFileConfig(file, baseConfig);
|
|
132
147
|
return this.runTransform(file, buildTarget, swcOptions, project, onOutput);
|
|
@@ -158,6 +173,7 @@ class SwcTranspiler extends (0, _extensibility.mixwith)(_cachesoutputsmixin.Cach
|
|
|
158
173
|
const success = _transformresponsemodel.TransformResponse.Success({
|
|
159
174
|
file,
|
|
160
175
|
code: transformed.code,
|
|
176
|
+
sourceContent: content,
|
|
161
177
|
target,
|
|
162
178
|
fileName,
|
|
163
179
|
outputDir,
|
|
@@ -189,14 +205,19 @@ class SwcTranspiler extends (0, _extensibility.mixwith)(_cachesoutputsmixin.Cach
|
|
|
189
205
|
if (!project.isSourceFile(file)) {
|
|
190
206
|
return [];
|
|
191
207
|
}
|
|
208
|
+
const freshContent = await file.getContent();
|
|
209
|
+
const cached = this.outputCache.get(file.fullPath);
|
|
210
|
+
if (cached != null && cached[0]?.sourceContent === freshContent) {
|
|
211
|
+
return [];
|
|
212
|
+
}
|
|
192
213
|
this.invalidateContentCache(file);
|
|
193
214
|
return this.transformProject(project, ()=>Promise.resolve([
|
|
194
215
|
file
|
|
195
216
|
]));
|
|
196
217
|
}
|
|
197
218
|
invalidateContentCache(_file) {}
|
|
198
|
-
getFileContent(file) {
|
|
199
|
-
return file.getContent();
|
|
219
|
+
async getFileContent(file) {
|
|
220
|
+
return await file.getContent();
|
|
200
221
|
}
|
|
201
222
|
}
|
|
202
223
|
_ts_decorate([
|
|
@@ -219,10 +240,8 @@ _ts_decorate([
|
|
|
219
240
|
_ts_metadata("design:paramtypes", [
|
|
220
241
|
typeof FileEx === "undefined" ? Object : FileEx
|
|
221
242
|
]),
|
|
222
|
-
_ts_metadata("design:returntype",
|
|
243
|
+
_ts_metadata("design:returntype", Promise)
|
|
223
244
|
], SwcTranspiler.prototype, "getFileContent", null);
|
|
224
245
|
SwcTranspiler = _ts_decorate([
|
|
225
246
|
_diagnostics.Trace
|
|
226
247
|
], SwcTranspiler);
|
|
227
|
-
|
|
228
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9zZXJ2aWNlcy9zd2MtdHJhbnNwaWxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuaW1wb3J0IHsgY2FjaGUsIGludmFsaWRhdGVDYWNoZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2FjaGluZ1wiO1xuaW1wb3J0IHsgVHJhY2UgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2RpYWdub3N0aWNzXCI7XG5pbXBvcnQgeyBtaXh3aXRoIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgdHlwZSB7IEZpbGVFeCB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW9cIjtcbmltcG9ydCB7IGlvIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pb1wiO1xuaW1wb3J0IHsgdHlwZSBPcHRpb25zLCB0cmFuc2Zvcm0sIHRyYW5zZm9ybVN5bmMgfSBmcm9tIFwiQHN3Yy9jb3JlXCI7XG5pbXBvcnQge1xuXHR0eXBlIEJ1aWxkVGFyZ2V0LFxuXHRCdWlsZFRhcmdldHMsXG5cdHR5cGUgVHJhbnNwaWxlVGFyZ2V0LFxufSBmcm9tIFwiLi4vdHlwZXMvYnVpbGQtdGFyZ2V0LnR5cGUuanNcIjtcbmltcG9ydCBcIi4uL2V4dGVuc2lvbnMvcHJvamVjdC5leHRlbnNpb25zLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFByb2plY3RGaWxlRXZlbnQsIFRzY29uZmlnIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgeyBTd2NDb25maWdGYWN0b3J5IH0gZnJvbSBcIi4uL2ZhY3Rvcmllcy9zd2MtY29uZmlnLmZhY3RvcnkuanNcIjtcbmltcG9ydCB7IENhY2hlc091dHB1dHMgfSBmcm9tIFwiLi4vbWl4aW5zL2NhY2hlcy1vdXRwdXRzLm1peGluLmpzXCI7XG5pbXBvcnQgeyBJbmNyZW1lbnRhbFRyYW5zZm9ybSB9IGZyb20gXCIuLi9taXhpbnMvaW5jcmVtZW50YWwtdHJhbnNmb3JtLm1peGluLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN3Y0NvbmZpZyB9IGZyb20gXCIuLi90eXBlcy9zd2MtY29uZmlnLnR5cGUuanNcIjtcbmltcG9ydCB7IFRyYW5zZm9ybVJlc3BvbnNlIH0gZnJvbSBcIi4uL3R5cGVzL3RyYW5zZm9ybS1yZXNwb25zZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2Zvcm1lciB9IGZyb20gXCIuLi90eXBlcy90cmFuc2Zvcm1lci50eXBlLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFRyYW5zcGlsZU9wdGlvbnMgPSB7XG5cdGFsaWFzUGF0aHM/OiBib29sZWFuO1xuXHR0c0NvbmZpZz86IFRzY29uZmlnO1xuXHR1c2VyQ29uZmlnPzogU3djQ29uZmlnO1xufTtcblxuQFRyYWNlXG5leHBvcnQgY2xhc3MgU3djVHJhbnNwaWxlclxuXHRleHRlbmRzIG1peHdpdGgoQ2FjaGVzT3V0cHV0cywgSW5jcmVtZW50YWxUcmFuc2Zvcm0pXG5cdGltcGxlbWVudHMgVHJhbnNmb3JtZXJcbntcblx0cHVibGljIGJ1aWxkVGFyZ2V0czogQnVpbGRUYXJnZXRbXSA9IFtCdWlsZFRhcmdldHMuZXM2LCBCdWlsZFRhcmdldHMuY29tbW9uanNdO1xuXHQjc3djQ29uZmlnRmFjdG9yeSA9IG5ldyBTd2NDb25maWdGYWN0b3J5KCk7XG5cblx0cHVibGljIGFzeW5jIHRyYW5zZm9ybVByb2plY3QoXG5cdFx0cHJvamVjdEFycmF5TGlrZTogUHJvamVjdCB8IFByb2plY3RbXSxcblx0XHRmaWxlRmlsdGVyPzogKHByb2plY3Q6IFByb2plY3QpID0+IFByb21pc2U8RmlsZUV4W10+LFxuXHRcdG9uT3V0cHV0PzogKHJlc3BvbnNlOiBUcmFuc2Zvcm1SZXNwb25zZSkgPT4gdm9pZCxcblx0KTogUHJvbWlzZTxUcmFuc2Zvcm1SZXNwb25zZVtdPiB7XG5cdFx0Y29uc3QgcHJvamVjdHMgPSBBcnJheS5pc0FycmF5KHByb2plY3RBcnJheUxpa2UpID8gcHJvamVjdEFycmF5TGlrZSA6IFtwcm9qZWN0QXJyYXlMaWtlXTtcblx0XHRjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdHByb2plY3RzLm1hcChhc3luYyAocHJvamVjdCkgPT4ge1xuXHRcdFx0XHRjb25zdCB7IHRhcmdldHMsIGFsaWFzUGF0aHMgfSA9IHByb2plY3QuZ2V0Rm9yZ2VDb25maWd1cmF0aW9uKCk7XG5cdFx0XHRcdGNvbnN0IHRyYW5zcGlsZVRhcmdldHMgPSB0YXJnZXRzLmZpbHRlcigoYnQpID0+IGJ0ICE9PSBCdWlsZFRhcmdldHMudHlwZXMpO1xuXHRcdFx0XHRpZiAodHJhbnNwaWxlVGFyZ2V0cy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBzb3VyY2VGaWxlcyA9IGF3YWl0IChmaWxlRmlsdGVyPy4ocHJvamVjdCkgPz8gcHJvamVjdC5nZXRBbGxGaWxlcygpKTtcblx0XHRcdFx0Y29uc3QgdHNDb25maWcgPSBhd2FpdCBwcm9qZWN0LmdldFRzQ29uZmlnKCk7XG5cdFx0XHRcdGNvbnN0IHVzZXJDb25maWcgPSBhd2FpdCBwcm9qZWN0LmdldFN3Y0NvbmZpZygpO1xuXHRcdFx0XHRjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0XHR0cmFuc3BpbGVUYXJnZXRzLm1hcCgodGFyZ2V0KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1UYXJnZXQoXG5cdFx0XHRcdFx0XHRcdHNvdXJjZUZpbGVzLFxuXHRcdFx0XHRcdFx0XHR0YXJnZXQsXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0c0NvbmZpZyxcblx0XHRcdFx0XHRcdFx0XHR1c2VyQ29uZmlnLFxuXHRcdFx0XHRcdFx0XHRcdGFsaWFzUGF0aHMsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHByb2plY3QsXG5cdFx0XHRcdFx0XHRcdG9uT3V0cHV0LFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlcy5mbGF0KCk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXG5cdFx0Y29uc3QgZmxhdCA9IHJlc3BvbnNlcy5mbGF0KCk7XG5cdFx0dGhpcy5jYWNoZU91dHB1dHMoZmxhdCk7XG5cdFx0cmV0dXJuIGZsYXQ7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgdHJhbnNmb3JtRmlsZShcblx0XHRmaWxlQXJyYXlMaWtlOiBGaWxlRXhbXSB8IEZpbGVFeCxcblx0XHRidWlsZFRhcmdldDogVHJhbnNwaWxlVGFyZ2V0LFxuXHRcdG9wdGlvbnM6IFRyYW5zcGlsZU9wdGlvbnMgPSB7fSxcblx0KSB7XG5cdFx0Y29uc3QgZmlsZXMgPSBBcnJheS5pc0FycmF5KGZpbGVBcnJheUxpa2UpID8gZmlsZUFycmF5TGlrZSA6IFtmaWxlQXJyYXlMaWtlXTtcblx0XHRjb25zdCByZXNwb25zZXMgPSB0aGlzLnRyYW5zZm9ybVRhcmdldChmaWxlcywgYnVpbGRUYXJnZXQsIG9wdGlvbnMpO1xuXHRcdHJldHVybiByZXNwb25zZXM7XG5cdH1cblxuXHQvKipcblx0ICogU3luY2hyb25vdXMsIHNpbmdsZS1maWxlIHZhcmlhbnQgb2YgYHRyYW5zZm9ybUZpbGVgLlxuXHQgKiBSZWFkcyB0aGUgZmlsZSB3aXRoIGBmcy5yZWFkRmlsZVN5bmNgIGFuZCB0cmFuc3BpbGVzIHZpYSBgc3djLnRyYW5zZm9ybVN5bmNgLlxuXHQgKiBJbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0IGNhbm5vdCBhd2FpdCAoZS5nLiBOb2RlLmpzIGByZWdpc3Rlckhvb2tzYCBsb2FkIGhvb2spLlxuXHQgKi9cblx0cHVibGljIHRyYW5zZm9ybUZpbGVTeW5jKFxuXHRcdGZpbGU6IEZpbGVFeCxcblx0XHRidWlsZFRhcmdldDogVHJhbnNwaWxlVGFyZ2V0LFxuXHRcdG9wdGlvbnM6IFRyYW5zcGlsZU9wdGlvbnMgPSB7fSxcblx0KTogVHJhbnNmb3JtUmVzcG9uc2Uge1xuXHRcdGNvbnN0IGJhc2VDb25maWcgPSB0aGlzLiNzd2NDb25maWdGYWN0b3J5LmNyZWF0ZUJhc2VDb25maWcoYnVpbGRUYXJnZXQsIG9wdGlvbnMpO1xuXHRcdGNvbnN0IHN3Y09wdGlvbnMgPSB0aGlzLiNzd2NDb25maWdGYWN0b3J5LmNyZWF0ZUZpbGVDb25maWcoZmlsZSwgYmFzZUNvbmZpZyk7XG5cblx0XHRsZXQgY29udGVudDogc3RyaW5nO1xuXHRcdHRyeSB7XG5cdFx0XHRjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUuZnVsbFBhdGgsIFwidXRmOFwiKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0cmV0dXJuIFRyYW5zZm9ybVJlc3BvbnNlLkVycm9yKHtcblx0XHRcdFx0ZmlsZSxcblx0XHRcdFx0bWVzc2FnZXM6IFtTdHJpbmcoZXJyb3IpXSxcblx0XHRcdFx0Y29uZmlnOiBzd2NPcHRpb25zLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRlbnQgPT09IFwiXCIpIHtcblx0XHRcdHJldHVybiBUcmFuc2Zvcm1SZXNwb25zZS5Ta2lwcGVkKHtcblx0XHRcdFx0ZmlsZSxcblx0XHRcdFx0bWVzc2FnZXM6IFwiRmlsZSBpcyBlbXB0eVwiLFxuXHRcdFx0XHRjb25maWc6IHN3Y09wdGlvbnMsXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1TeW5jKGNvbnRlbnQsIHN3Y09wdGlvbnMpO1xuXHRcdFx0aWYgKHRyYW5zZm9ybWVkID09IG51bGwpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic3djLnRyYW5zZm9ybVN5bmMgcmV0dXJuZWQgbm8gcmVzdWx0XCIpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZmlsZVBhdGggPSBmaWxlLnJlbGF0aXZlUGF0aDtcblx0XHRcdGNvbnN0IGV4dE5hbWUgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xuXHRcdFx0Y29uc3QgZmlsZU5hbWUgPSBmaWxlUGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXh0TmFtZX0kYCksIFwiLmpzXCIpO1xuXHRcdFx0cmV0dXJuIFRyYW5zZm9ybVJlc3BvbnNlLlN1Y2Nlc3Moe1xuXHRcdFx0XHRmaWxlLFxuXHRcdFx0XHRjb2RlOiB0cmFuc2Zvcm1lZC5jb2RlLFxuXHRcdFx0XHR0YXJnZXQ6IGJ1aWxkVGFyZ2V0LFxuXHRcdFx0XHRmaWxlTmFtZSxcblx0XHRcdFx0Y29uZmlnOiBzd2NPcHRpb25zLFxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHJldHVybiBUcmFuc2Zvcm1SZXNwb25zZS5FcnJvcih7XG5cdFx0XHRcdGZpbGUsXG5cdFx0XHRcdG1lc3NhZ2VzOiBbU3RyaW5nKGVycm9yKV0sXG5cdFx0XHRcdGNvbmZpZzogc3djT3B0aW9ucyxcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgdHJhbnNmb3JtVGFyZ2V0KFxuXHRcdGZpbGVzOiBGaWxlRXhbXSxcblx0XHRidWlsZFRhcmdldDogVHJhbnNwaWxlVGFyZ2V0LFxuXHRcdG9wdGlvbnM/OiBUcmFuc3BpbGVPcHRpb25zLFxuXHRcdHByb2plY3Q/OiBQcm9qZWN0LFxuXHRcdG9uT3V0cHV0PzogKHJlc3BvbnNlOiBUcmFuc2Zvcm1SZXNwb25zZSkgPT4gdm9pZCxcblx0KSB7XG5cdFx0Y29uc3QgYmFzZUNvbmZpZyA9IHRoaXMuI3N3Y0NvbmZpZ0ZhY3RvcnkuY3JlYXRlQmFzZUNvbmZpZyhidWlsZFRhcmdldCwgb3B0aW9ucyA/PyB7fSk7XG5cdFx0cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0ZmlsZXMubWFwKChmaWxlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHN3Y09wdGlvbnMgPSB0aGlzLiNzd2NDb25maWdGYWN0b3J5LmNyZWF0ZUZpbGVDb25maWcoZmlsZSwgYmFzZUNvbmZpZyk7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJ1blRyYW5zZm9ybShmaWxlLCBidWlsZFRhcmdldCwgc3djT3B0aW9ucywgcHJvamVjdCwgb25PdXRwdXQpO1xuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgcnVuVHJhbnNmb3JtKFxuXHRcdGZpbGU6IEZpbGVFeCxcblx0XHR0YXJnZXQ6IEJ1aWxkVGFyZ2V0LFxuXHRcdHN3Y09wdGlvbnM6IE9wdGlvbnMsXG5cdFx0cHJvamVjdD86IFByb2plY3QsXG5cdFx0b25PdXRwdXQ/OiAocmVzcG9uc2U6IFRyYW5zZm9ybVJlc3BvbnNlKSA9PiB2b2lkLFxuXHQpOiBQcm9taXNlPFRyYW5zZm9ybVJlc3BvbnNlPiB7XG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMuZ2V0RmlsZUNvbnRlbnQoZmlsZSk7XG5cdFx0aWYgKGNvbnRlbnQgPT09IFwiXCIpIHtcblx0XHRcdGNvbnN0IHNraXBwZWQgPSBUcmFuc2Zvcm1SZXNwb25zZS5Ta2lwcGVkKHtcblx0XHRcdFx0ZmlsZSxcblx0XHRcdFx0bWVzc2FnZXM6IFwiRmlsZSBpcyBlbXB0eVwiLFxuXHRcdFx0XHRjb25maWc6IHN3Y09wdGlvbnMsXG5cdFx0XHRcdHByb2plY3QsXG5cdFx0XHR9KTtcblx0XHRcdG9uT3V0cHV0Py4oc2tpcHBlZCk7XG5cdFx0XHRyZXR1cm4gc2tpcHBlZDtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZmlsZVBhdGggPSBmaWxlLnJlbGF0aXZlUGF0aDtcblx0XHRcdGNvbnN0IGV4dE5hbWUgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xuXHRcdFx0Y29uc3QgZmlsZU5hbWUgPSBmaWxlUGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXh0TmFtZX0kYCksIFwiLmpzXCIpO1xuXHRcdFx0Y29uc3Qgb3V0QmFzZURpciA9IHByb2plY3Q/LmdldE91dERpcih0YXJnZXQpO1xuXHRcdFx0Y29uc3Qgb3V0cHV0UGF0aCA9IG91dEJhc2VEaXIgPyBwYXRoLmpvaW4ob3V0QmFzZURpciwgZmlsZU5hbWUpIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3Qgb3V0cHV0RGlyID0gb3V0cHV0UGF0aCA/IHBhdGguZGlybmFtZShvdXRwdXRQYXRoKSA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IHRyYW5zZm9ybWVkID0gYXdhaXQgdHJhbnNmb3JtKGNvbnRlbnQsIHN3Y09wdGlvbnMpO1xuXHRcdFx0aWYgKHRyYW5zZm9ybWVkID09IG51bGwpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic3djLnRyYW5zZm9ybSByZXR1cm5lZCBubyByZXN1bHRcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHN1Y2Nlc3MgPSBUcmFuc2Zvcm1SZXNwb25zZS5TdWNjZXNzKHtcblx0XHRcdFx0ZmlsZSxcblx0XHRcdFx0Y29kZTogdHJhbnNmb3JtZWQuY29kZSxcblx0XHRcdFx0dGFyZ2V0LFxuXHRcdFx0XHRmaWxlTmFtZSxcblx0XHRcdFx0b3V0cHV0RGlyLFxuXHRcdFx0XHRvdXRwdXRQYXRoLFxuXHRcdFx0XHRjb25maWc6IHN3Y09wdGlvbnMsXG5cdFx0XHRcdHByb2plY3QsXG5cdFx0XHR9KTtcblx0XHRcdG9uT3V0cHV0Py4oc3VjY2Vzcyk7XG5cdFx0XHRyZXR1cm4gc3VjY2Vzcztcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc3QgZmFpbHVyZSA9IFRyYW5zZm9ybVJlc3BvbnNlLkVycm9yKHtcblx0XHRcdFx0ZmlsZSxcblx0XHRcdFx0bWVzc2FnZXM6IFtTdHJpbmcoZXJyb3IpXSxcblx0XHRcdFx0Y29uZmlnOiBzd2NPcHRpb25zLFxuXHRcdFx0XHRwcm9qZWN0LFxuXHRcdFx0fSk7XG5cdFx0XHRvbk91dHB1dD8uKGZhaWx1cmUpO1xuXHRcdFx0cmV0dXJuIGZhaWx1cmU7XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIGFzeW5jIG9uSW5jcmVtZW50YWxGaWxlRXZlbnQoZXZ0OiBQcm9qZWN0RmlsZUV2ZW50KTogUHJvbWlzZTxUcmFuc2Zvcm1SZXNwb25zZVtdPiB7XG5cdFx0Y29uc3QgeyBmaWxlLCBwcm9qZWN0IH0gPSBldnQ7XG5cdFx0aWYgKGV2dC5ldmVudE5hbWUgPT09IGlvLldhdGNoRXZlbnRzLnVubGluaykge1xuXHRcdFx0dGhpcy5kZWxldGVDYWNoZWRPdXRwdXRzKGZpbGUuZnVsbFBhdGgpO1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRpZiAoIXByb2plY3QuaXNTb3VyY2VGaWxlKGZpbGUpKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdHRoaXMuaW52YWxpZGF0ZUNvbnRlbnRDYWNoZShmaWxlKTtcblx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1Qcm9qZWN0KHByb2plY3QsICgpID0+IFByb21pc2UucmVzb2x2ZShbZmlsZV0pKTtcblx0fVxuXG5cdEBpbnZhbGlkYXRlQ2FjaGUoU3djVHJhbnNwaWxlci5wcm90b3R5cGUuZ2V0RmlsZUNvbnRlbnQsIHtcblx0XHRuYW1lOiBcIkZJTEVfQ09OVEVOVFwiLFxuXHRcdGtleUZuOiAoLi4uYXJncykgPT4gKGFyZ3NbMF0gYXMgRmlsZUV4KS5mdWxsUGF0aCxcblx0fSlcblx0cHVibGljIGludmFsaWRhdGVDb250ZW50Q2FjaGUoX2ZpbGU6IEZpbGVFeCk6IHZvaWQge31cblxuXHRAY2FjaGUoeyBuYW1lOiBcIkZJTEVfQ09OVEVOVFwiLCBrZXlGbjogKC4uLmFyZ3MpID0+IChhcmdzWzBdIGFzIEZpbGVFeCkuZnVsbFBhdGggfSlcblx0cHJpdmF0ZSBnZXRGaWxlQ29udGVudChmaWxlOiBGaWxlRXgpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBmaWxlLmdldENvbnRlbnQoKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlN3Y1RyYW5zcGlsZXIiLCJtaXh3aXRoIiwiQ2FjaGVzT3V0cHV0cyIsIkluY3JlbWVudGFsVHJhbnNmb3JtIiwiYnVpbGRUYXJnZXRzIiwiQnVpbGRUYXJnZXRzIiwiZXM2IiwiY29tbW9uanMiLCJTd2NDb25maWdGYWN0b3J5IiwidHJhbnNmb3JtUHJvamVjdCIsInByb2plY3RBcnJheUxpa2UiLCJmaWxlRmlsdGVyIiwib25PdXRwdXQiLCJwcm9qZWN0cyIsIkFycmF5IiwiaXNBcnJheSIsInJlc3BvbnNlcyIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJwcm9qZWN0IiwidGFyZ2V0cyIsImFsaWFzUGF0aHMiLCJnZXRGb3JnZUNvbmZpZ3VyYXRpb24iLCJ0cmFuc3BpbGVUYXJnZXRzIiwiZmlsdGVyIiwiYnQiLCJ0eXBlcyIsImxlbmd0aCIsInNvdXJjZUZpbGVzIiwiZ2V0QWxsRmlsZXMiLCJ0c0NvbmZpZyIsImdldFRzQ29uZmlnIiwidXNlckNvbmZpZyIsImdldFN3Y0NvbmZpZyIsInRhcmdldCIsInRyYW5zZm9ybVRhcmdldCIsImZsYXQiLCJjYWNoZU91dHB1dHMiLCJ0cmFuc2Zvcm1GaWxlIiwiZmlsZUFycmF5TGlrZSIsImJ1aWxkVGFyZ2V0Iiwib3B0aW9ucyIsImZpbGVzIiwidHJhbnNmb3JtRmlsZVN5bmMiLCJmaWxlIiwiYmFzZUNvbmZpZyIsImNyZWF0ZUJhc2VDb25maWciLCJzd2NPcHRpb25zIiwiY3JlYXRlRmlsZUNvbmZpZyIsImNvbnRlbnQiLCJmcyIsInJlYWRGaWxlU3luYyIsImZ1bGxQYXRoIiwiZXJyb3IiLCJUcmFuc2Zvcm1SZXNwb25zZSIsIkVycm9yIiwibWVzc2FnZXMiLCJTdHJpbmciLCJjb25maWciLCJTa2lwcGVkIiwidHJhbnNmb3JtZWQiLCJ0cmFuc2Zvcm1TeW5jIiwiZmlsZVBhdGgiLCJyZWxhdGl2ZVBhdGgiLCJleHROYW1lIiwicGF0aCIsImV4dG5hbWUiLCJmaWxlTmFtZSIsInJlcGxhY2UiLCJSZWdFeHAiLCJTdWNjZXNzIiwiY29kZSIsInJ1blRyYW5zZm9ybSIsImdldEZpbGVDb250ZW50Iiwic2tpcHBlZCIsIm91dEJhc2VEaXIiLCJnZXRPdXREaXIiLCJvdXRwdXRQYXRoIiwiam9pbiIsInVuZGVmaW5lZCIsIm91dHB1dERpciIsImRpcm5hbWUiLCJ0cmFuc2Zvcm0iLCJzdWNjZXNzIiwiZmFpbHVyZSIsIm9uSW5jcmVtZW50YWxGaWxlRXZlbnQiLCJldnQiLCJldmVudE5hbWUiLCJpbyIsIldhdGNoRXZlbnRzIiwidW5saW5rIiwiZGVsZXRlQ2FjaGVkT3V0cHV0cyIsImlzU291cmNlRmlsZSIsImludmFsaWRhdGVDb250ZW50Q2FjaGUiLCJyZXNvbHZlIiwiX2ZpbGUiLCJnZXRDb250ZW50IiwicHJvdG90eXBlIiwibmFtZSIsImtleUZuIiwiYXJncyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkE4QmFBOzs7ZUFBQUE7OzsrREE5QkU7aUVBQ0U7eUJBRXNCOzZCQUNqQjsrQkFDRTtvQkFFTDtzQkFDb0M7aUNBS2hEO1FBQ0E7a0NBRTBCO29DQUNIOzJDQUNPO3dDQUVIOzs7Ozs7Ozs7Ozs7Ozs7QUFVM0IsTUFBTUEsc0JBQ0pDLElBQUFBLHNCQUFPLEVBQUNDLGlDQUFhLEVBQUVDLCtDQUFvQjtJQUc1Q0MsZUFBOEI7UUFBQ0MsNkJBQVksQ0FBQ0MsR0FBRztRQUFFRCw2QkFBWSxDQUFDRSxRQUFRO0tBQUMsQ0FBQztJQUMvRSxDQUFBLGdCQUFpQixHQUFHLElBQUlDLGtDQUFnQixHQUFHO0lBRTNDLE1BQWFDLGlCQUNaQyxnQkFBcUMsRUFDckNDLFVBQW9ELEVBQ3BEQyxRQUFnRCxFQUNqQjtRQUMvQixNQUFNQyxXQUFXQyxNQUFNQyxPQUFPLENBQUNMLG9CQUFvQkEsbUJBQW1CO1lBQUNBO1NBQWlCO1FBQ3hGLE1BQU1NLFlBQVksTUFBTUMsUUFBUUMsR0FBRyxDQUNsQ0wsU0FBU00sR0FBRyxDQUFDLE9BQU9DO1lBQ25CLE1BQU0sRUFBRUMsT0FBTyxFQUFFQyxVQUFVLEVBQUUsR0FBR0YsUUFBUUcscUJBQXFCO1lBQzdELE1BQU1DLG1CQUFtQkgsUUFBUUksTUFB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
|
|
@@ -57,13 +57,13 @@ class TsProgramHost {
|
|
|
57
57
|
host.getDirectories = (directoryName)=>this.getDirectories(directoryName);
|
|
58
58
|
return host;
|
|
59
59
|
}
|
|
60
|
-
createProgram(files, compilerOptions, host, oldProgram) {
|
|
60
|
+
createProgram(files, compilerOptions, host, oldProgram, requiredOptions = _typeemitter.REQUIRED_TYPE_EMITTER_OPTIONS) {
|
|
61
61
|
const filePaths = files.map((f)=>f.fullPath);
|
|
62
62
|
this.#invalidated.clear();
|
|
63
63
|
return (0, _typescript.createProgram)(filePaths, {
|
|
64
64
|
..._typeemitter.DEFAULT_TYPE_EMITTER_OPTIONS,
|
|
65
65
|
...compilerOptions,
|
|
66
|
-
...
|
|
66
|
+
...requiredOptions
|
|
67
67
|
}, host, oldProgram);
|
|
68
68
|
}
|
|
69
69
|
readFileFromDisk(fileName) {
|
|
@@ -131,5 +131,3 @@ _ts_decorate([
|
|
|
131
131
|
TsProgramHost = _ts_decorate([
|
|
132
132
|
_diagnostics.Trace
|
|
133
133
|
], TsProgramHost);
|
|
134
|
-
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZvcmdlL3NyYy9zZXJ2aWNlcy90cy1wcm9ncmFtLWhvc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBjYWNoZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2FjaGluZ1wiO1xuaW1wb3J0IHsgVHJhY2UgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2RpYWdub3N0aWNzXCI7XG5pbXBvcnQgdHlwZSB7IEZpbGVFeCB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW9cIjtcbmltcG9ydCB0eXBlIHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyBjcmVhdGVDb21waWxlckhvc3QsIGNyZWF0ZVByb2dyYW0gfSBmcm9tIFwidHlwZXNjcmlwdFwiO1xuaW1wb3J0IHtcblx0REVGQVVMVF9UWVBFX0VNSVRURVJfT1BUSU9OUyxcblx0UkVRVUlSRURfVFlQRV9FTUlUVEVSX09QVElPTlMsXG59IGZyb20gXCIuLi9zZXJ2aWNlcy90eXBlLWVtaXR0ZXIuanNcIjtcblxuLyoqXG4gKiBXcmFwcyBhIFR5cGVTY3JpcHQgQ29tcGlsZXJIb3N0IHdpdGggY2FjaGVkIGZpbGUtc3lzdGVtIGNhbGxzIHNvIHRoYXRcbiAqIHJlcGVhdGVkIHJlYWRzIGR1cmluZyBhIHNpbmdsZSBidWlsZCBkbyBub3QgaGl0IHRoZSBkaXNrIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFNlcGFyYXRpbmcgdGhpcyBmcm9tIFR5cGVFbWl0dGVyIGtlZXBzIHRoZSB0cmFuc2Zvcm1lciBsb2dpYyByZWFkYWJsZSBhbmRcbiAqIGxldHMgdGhlIGNhY2hpbmcvcHJvZ3JhbS1jcmVhdGlvbiBjb25jZXJucyBsaXZlIGluIG9uZSBmb2N1c2VkIHBsYWNlLlxuICovXG5AVHJhY2VcbmV4cG9ydCBjbGFzcyBUc1Byb2dyYW1Ib3N0IHtcblx0I2ludmFsaWRhdGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cblx0cHVibGljIGludmFsaWRhdGVTb3VyY2VGaWxlKGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLiNpbnZhbGlkYXRlZC5hZGQoZmlsZU5hbWUpO1xuXHR9XG5cblx0cHVibGljIGhhc0ludmFsaWRhdGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLiNpbnZhbGlkYXRlZC5zaXplID4gMDtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIGEgc3RhYmxlIHN0cmluZyBrZXkgZm9yIGEgc2V0IG9mIGNvbXBpbGVyIG9wdGlvbnMgdGhhdCBhZmZlY3QgaG9zdCBiZWhhdmlvdXIuICovXG5cdHB1YmxpYyBob3N0S2V5KG9wdHM6IHRzLkNvbXBpbGVyT3B0aW9ucyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdHRhcmdldDogb3B0cy50YXJnZXQsXG5cdFx0XHRsaWI6IG9wdHMubGliLFxuXHRcdFx0dHlwZVJvb3RzOiBvcHRzLnR5cGVSb290cyxcblx0XHRcdHR5cGVzOiBvcHRzLnR5cGVzLFxuXHRcdFx0bW9kdWxlUmVzb2x1dGlvbjogb3B0cy5tb2R1bGVSZXNvbHV0aW9uLFxuXHRcdFx0YmFzZVVybDogb3B0cy5iYXNlVXJsLFxuXHRcdFx0cGF0aHM6IG9wdHMucGF0aHMsXG5cdFx0XHRtb2R1bGU6IG9wdHMubW9kdWxlLFxuXHRcdFx0cm9vdERpcjogb3B0cy5yb290RGlyLFxuXHRcdFx0cm9vdERpcnM6IG9wdHMucm9vdERpcnMsXG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlSG9zdChjb21waWxlck9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyk6IHRzLkNvbXBpbGVySG9zdCB7XG5cdFx0Y29uc3QgaG9zdCA9IGNyZWF0ZUNvbXBpbGVySG9zdChjb21waWxlck9wdGlvbnMpO1xuXHRcdGhvc3QuZmlsZUV4aXN0cyA9IChmaWxlTmFtZSkgPT4gdGhpcy5maWxlRXhpc3RzT25EaXNrKGZpbGVOYW1lKTtcblx0XHRob3N0LnJlYWRGaWxlID0gKGZpbGVOYW1lKSA9PiB0aGlzLnJlYWRGaWxlRnJvbURpc2soZmlsZU5hbWUpO1xuXHRcdGhvc3QuZGlyZWN0b3J5RXhpc3RzID0gKGRpcmVjdG9yeU5hbWUpID0+IHRoaXMuZGlyZWN0b3J5RXhpc3RzKGRpcmVjdG9yeU5hbWUpO1xuXHRcdGhvc3QuZ2V0RGlyZWN0b3JpZXMgPSAoZGlyZWN0b3J5TmFtZSkgPT4gdGhpcy5nZXREaXJlY3RvcmllcyhkaXJlY3RvcnlOYW1lKTtcblx0XHRyZXR1cm4gaG9zdDtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVQcm9ncmFtKFxuXHRcdGZpbGVzOiBGaWxlRXhbXSxcblx0XHRjb21waWxlck9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyxcblx0XHRob3N0OiB0cy5Db21waWxlckhvc3QsXG5cdFx0b2xkUHJvZ3JhbT86IHRzLlByb2dyYW0sXG5cdCk6IHRzLlByb2dyYW0ge1xuXHRcdGNvbnN0IGZpbGVQYXRocyA9IGZpbGVzLm1hcCgoZikgPT4gZi5mdWxsUGF0aCk7XG5cdFx0dGhpcy4jaW52YWxpZGF0ZWQuY2xlYXIoKTtcblx0XHRyZXR1cm4gY3JlYXRlUHJvZ3JhbShcblx0XHRcdGZpbGVQYXRocyxcblx0XHRcdHtcblx0XHRcdFx0Li4uREVGQVVMVF9UWVBFX0VNSVRURVJfT1BUSU9OUyxcblx0XHRcdFx0Li4uY29tcGlsZXJPcHRpb25zLFxuXHRcdFx0XHQuLi5SRVFVSVJFRF9UWVBFX0VNSVRURVJfT1BUSU9OUyxcblx0XHRcdH0sXG5cdFx0XHRob3N0LFxuXHRcdFx0b2xkUHJvZ3JhbSxcblx0XHQpO1xuXHR9XG5cblx0QGNhY2hlKHsgbmFtZTogXCJGSUxFX0NPTlRFTlRcIiwga2V5Rm46ICguLi5hcmdzKSA9PiBhcmdzWzBdIGFzIHN0cmluZyB9KVxuXHRwdWJsaWMgcmVhZEZpbGVGcm9tRGlzayhmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGZzLnJlYWRGaWxlU3luYyhmaWxlTmFtZSwgXCJ1dGY4XCIpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRAY2FjaGUoKVxuXHRwdWJsaWMgZmlsZUV4aXN0c09uRGlzayhmaWxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZzLmV4aXN0c1N5bmMoZmlsZU5hbWUpO1xuXHR9XG5cblx0QGNhY2hlKClcblx0cHVibGljIGRpcmVjdG9yeUV4aXN0cyhkaXJlY3RvcnlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGZzLnN0YXRTeW5jKGRpcmVjdG9yeU5hbWUpLmlzRGlyZWN0b3J5KCk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0QGNhY2hlKClcblx0cHVibGljIGdldERpcmVjdG9yaWVzKGRpcmVjdG9yeU5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGZzXG5cdFx0XHRcdC5yZWFkZGlyU3luYyhkaXJlY3RvcnlOYW1lLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSlcblx0XHRcdFx0LmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlzRGlyZWN0b3J5KCkpXG5cdFx0XHRcdC5tYXAoKGVudHJ5KSA9PiBlbnRyeS5uYW1lKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJUc1Byb2dyYW1Ib3N0IiwiU2V0IiwiaW52YWxpZGF0ZVNvdXJjZUZpbGUiLCJmaWxlTmFtZSIsImFkZCIsImhhc0ludmFsaWRhdGVkIiwic2l6ZSIsImhvc3RLZXkiLCJvcHRzIiwiSlNPTiIsInN0cmluZ2lmeSIsInRhcmdldCIsImxpYiIsInR5cGVSb290cyIsInR5cGVzIiwibW9kdWxlUmVzb2x1dGlvbiIsImJhc2VVcmwiLCJwYXRocyIsIm1vZHVsZSIsInJvb3REaXIiLCJyb290RGlycyIsImNyZWF0ZUhvc3QiLCJjb21waWxlck9wdGlvbnMiLCJob3N0IiwiY3JlYXRlQ29tcGlsZXJIb3N0IiwiZmlsZUV4aXN0cyIsImZpbGVFeGlzdHNPbkRpc2siLCJyZWFkRmlsZSIsInJlYWRGaWxlRnJvbURpc2siLCJkaXJlY3RvcnlFeGlzdHMiLCJkaXJlY3RvcnlOYW1lIiwiZ2V0RGlyZWN0b3JpZXMiLCJjcmVhdGVQcm9ncmFtIiwiZmlsZXMiLCJvbGRQcm9ncmFtIiwiZmlsZVBhdGhzIiwibWFwIiwiZiIsImZ1bGxQYXRoIiwiY2xlYXIiLCJERUZBVUxUX1RZUEVfRU1JVFRFUl9PUFRJT05TIiwiUkVRVUlSRURfVFlQRV9FTUlUVEVSX09QVElPTlMiLCJmcyIsInJlYWRGaWxlU3luYyIsInVuZGVmaW5lZCIsImV4aXN0c1N5bmMiLCJzdGF0U3luYyIsImlzRGlyZWN0b3J5IiwicmVhZGRpclN5bmMiLCJ3aXRoRmlsZVR5cGVzIiwiZmlsdGVyIiwiZW50cnkiLCJuYW1lIiwia2V5Rm4iLCJhcmdzIl0sIm1hcHBpbmdzIjoiOzs7OytCQW1CYUE7OztlQUFBQTs7OytEQW5CRTt5QkFDTzs2QkFDQTs0QkFHNEI7NkJBSTNDOzs7Ozs7Ozs7Ozs7Ozs7QUFVQSxNQUFNQTtJQUNaLENBQUEsV0FBWSxHQUFHLElBQUlDLE1BQWM7SUFFMUJDLHFCQUFxQkMsUUFBZ0IsRUFBUTtRQUNuRCxJQUFJLENBQUMsQ0FBQSxXQUFZLENBQUNDLEdBQUcsQ0FBQ0Q7SUFDdkI7SUFFT0UsaUJBQTBCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLENBQUEsV0FBWSxDQUFDQyxJQUFJLEdBQUc7SUFDakM7SUFFQSwwRkFBMEYsR0FDMUYsQUFBT0MsUUFBUUMsSUFBd0IsRUFBVTtRQUNoRCxPQUFPQyxLQUFLQyxTQUFTLENBQUM7WUFDckJDLFFBQVFILEtBQUtHLE1BQU07WUFDbkJDLEtBQUtKLEtBQUtJLEdBQUc7WUFDYkMsV0FBV0wsS0FBS0ssU0FBUztZQUN6QkMsT0FBT04sS0FBS00sS0FBSztZQUNqQkMsa0JBQWtCUCxLQUFLTyxnQkFBZ0I7WUFDdkNDLFNBQVNSLEtBQUtRLE9BQU87WUFDckJDLE9BQU9ULEtBQUtTLEtBQUs7WUFDakJDLFFBQVFWLEtBQUtVLE1BQU07WUFDbkJDLFNBQVNYLEtBQUtXLE9BQU87WUFDckJDLFVBQVVaLEtBQUtZLFFBQVE7UUFDeEI7SUFDRDtJQUVPQyxXQUFXQyxlQUFtQyxFQUFtQjtRQUN2RSxNQUFNQyxPQUFPQyxJQUFBQSw4QkFBa0IsRUFBQ0Y7UUFDaENDLEtBQUtFLFVBQVUsR0FBRyxDQUFDdEIsV0FBYSxJQUFJLENBQUN1QixnQkFBZ0IsQ0FBQ3ZCO1FBQ3REb0IsS0FBS0ksUUFBUSxHQUFHLENBQUN4QixXQUFhLElBQUksQ0FBQ3lCLGdCQUFnQixDQUFDekI7UUFDcERvQixLQUFLTSxlQUFlLEdBQUcsQ0FBQ0MsZ0JBQWtCLElBQUksQ0FBQ0QsZUFBZSxDQUFDQztRQUMvRFAsS0FBS1EsY0FBYyxHQUFHLENBQUNELGdCQUFrQixJQUFJLENBQUNDLGNBQWMsQ0FBQ0Q7UUFDN0QsT0FBT1A7SUFDUjtJQUVPUyxjQUNOQyxLQUFlLEVBQ2ZYLGVBQW1DLEVBQ25DQyxJQUFxQixFQUNyQlcsVUFBdUIsRUFDVjtRQUNiLE1BQU1DLFlBQVlGLE1BQU1HLEdBQUcsQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxRQUFRO1FBQzdDLElBQUksQ0FBQyxDQUFBLFdBQVksQ0FBQ0MsS0FBSztRQUN2QixPQUFPUCxJQUFBQSx5QkFBYSxFQUNuQkcsV0FDQTtZQUNDLEdBQUdLLHlDQUE0QjtZQUMvQixHQUFHbEIsZUFBZTtZQUNsQixHQUFHbUIsMENBQTZCO1FBQ2pDLEdBQ0FsQixNQUNBVztJQUVGO0lBR09OLGlCQUFpQnpCLFFBQWdCLEVBQXNCO1FBQzdELElBQUk7WUFDSCxPQUFPdUMsZUFBRSxDQUFDQyxZQUFZLENBQUN4QyxVQUFVO1FBQ2xDLEVBQUUsT0FBTTtZQUNQLE9BQU95QztRQUNSO0lBQ0Q7SUFHT2xCLGlCQUFpQnZCLFFBQWdCLEVBQVc7UUFDbEQsT0FBT3VDLGVBQUUsQ0FBQ0csVUFBVSxDQUFDMUM7SUFDdEI7SUFHTzBCLGdCQUFnQkMsYUFBcUIsRUFBVztRQUN0RCxJQUFJO1lBQ0gsT0FBT1ksZUFBRSxDQUFDSSxRQUFRLENBQUNoQixlQUFlaUIsV0FBVztRQUM5QyxFQUFFLE9BQU07WUFDUCxPQUFPO1FBQ1I7SUFDRDtJQUdPaEIsZUFBZUQsYUFBcUIsRUFBWTtRQUN0RCxJQUFJO1lBQ0gsT0FBT1ksZUFBRSxDQUNQTSxXQUFXLENBQUNsQixlQUFlO2dCQUFFbUIsZUFBZTtZQUFLLEdBQ2pEQyxNQUFNLENBQUMsQ0FBQ0MsUUFBVUEsTUFBTUosV0FBVyxJQUNuQ1gsR0FBRyxDQUFDLENBQUNlLFFBQVVBLE1BQU1DLElBQUk7UUFDNUIsRUFBRSxPQUFNO1lBQ1AsT0FBTyxFQUFFO1FBQ1Y7SUFDRDtBQUNEOzs7UUFsQ1VBLE1BQU07UUFBZ0JDLE9BQU8sQ0FBQyxHQUFHQyxPQUFTQSxJQUFJLENBQUMsRUFBRSJ9
|