@mnaoumov/typescript-dev-toolkit 3.9.0 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/commitlint-config.cjs +4 -1
- package/dist/lib/cjs/commitlint-config.d.cts +2 -2
- package/dist/lib/cjs/commitlint-lint-md-header.cjs +78 -0
- package/dist/lib/cjs/commitlint-lint-md-header.d.cts +40 -0
- package/dist/lib/cjs/docs-site/api-doc-page-generation.cjs +8 -2
- package/dist/lib/cjs/docs-site/api-doc-settings.cjs +1 -1
- package/dist/lib/cjs/docs-site/api-doc-settings.d.cts +5 -0
- package/dist/lib/cjs/docs-site/docs-site-config.cjs +3 -1
- package/dist/lib/cjs/docs-site/docs-site-config.d.cts +8 -0
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/test-runners/index.cjs +7 -1
- package/dist/lib/cjs/test-runners/index.d.cts +2 -0
- package/dist/lib/cjs/test-runners/stryker-config.cjs +102 -0
- package/dist/lib/cjs/test-runners/stryker-config.d.cts +60 -0
- package/dist/lib/cjs/test-runners/stryker.cjs +105 -0
- package/dist/lib/cjs/test-runners/stryker.d.cts +30 -0
- package/dist/lib/cjs/version.cjs +50 -29
- package/dist/lib/esm/commitlint-config.d.mts +2 -2
- package/dist/lib/esm/commitlint-config.mjs +7 -1
- package/dist/lib/esm/commitlint-lint-md-header.d.mts +40 -0
- package/dist/lib/esm/commitlint-lint-md-header.mjs +52 -0
- package/dist/lib/esm/docs-site/api-doc-page-generation.mjs +8 -2
- package/dist/lib/esm/docs-site/api-doc-settings.d.mts +5 -0
- package/dist/lib/esm/docs-site/api-doc-settings.mjs +1 -1
- package/dist/lib/esm/docs-site/docs-site-config.d.mts +8 -0
- package/dist/lib/esm/docs-site/docs-site-config.mjs +3 -1
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/test-runners/index.d.mts +2 -0
- package/dist/lib/esm/test-runners/index.mjs +5 -1
- package/dist/lib/esm/test-runners/stryker-config.d.mts +60 -0
- package/dist/lib/esm/test-runners/stryker-config.mjs +63 -0
- package/dist/lib/esm/test-runners/stryker.d.mts +30 -0
- package/dist/lib/esm/test-runners/stryker.mjs +84 -0
- package/dist/lib/esm/version.mjs +50 -29
- package/package.json +12 -1
- package/test-runners/stryker/package.json +6 -0
- package/test-runners/stryker-config/package.json +6 -0
|
@@ -41,6 +41,7 @@ import { join } from "node:path";
|
|
|
41
41
|
import { DEFAULT_PACKAGE_SITES } from "./api-doc-package-sites.mjs";
|
|
42
42
|
function resolveDocsSiteConfig(config) {
|
|
43
43
|
const {
|
|
44
|
+
apiIndexIntro,
|
|
44
45
|
docsDirectory = "docs",
|
|
45
46
|
excludedDirectories = [],
|
|
46
47
|
externalTypeLinks = /* @__PURE__ */ new Map(),
|
|
@@ -70,6 +71,7 @@ function resolveDocsSiteConfig(config) {
|
|
|
70
71
|
const basePath = `/${repo}`;
|
|
71
72
|
return {
|
|
72
73
|
apiDocSettings: {
|
|
74
|
+
apiIndexIntro,
|
|
73
75
|
basePath,
|
|
74
76
|
excludedDirectories,
|
|
75
77
|
externalTypeLinks,
|
|
@@ -108,4 +110,4 @@ function resolveDocsSiteConfig(config) {
|
|
|
108
110
|
export {
|
|
109
111
|
resolveDocsSiteConfig
|
|
110
112
|
};
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvZG9jcy1zaXRlLWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIG9uZSBkZXNjcmlwdGlvbiBvZiBhIGRvY3VtZW50YXRpb24gc2l0ZSB0aGF0IGl0cyBBc3RybyBjb25maWcgYW5kIGl0cyBidWlsZCBjb21tYW5kcyBzaGFyZTogd2hpY2ggcmVwb3NpdG9yeVxuICogaXQgZG9jdW1lbnRzLCB3aGVyZSBpdHMgc291cmNlcyBhbmQgcGFnZXMgbGl2ZSwgYW5kIHdoaWNoIG90aGVyIHNpdGVzIGl0IGxpbmtzIHRvLlxuICovXG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQXBpRG9jU2V0dGluZ3MsXG4gIEltcG9ydFN0YXRlbWVudFByb3ZpZGVyLFxuICBNZW1iZXJSb3V0ZVNlZ21lbnRQcm92aWRlclxufSBmcm9tICcuL2FwaS1kb2Mtc2V0dGluZ3MudHMnO1xuaW1wb3J0IHR5cGUgeyBSZXBvSG9tZXBhZ2VNb2RlIH0gZnJvbSAnLi9yZXBvLWhvbWVwYWdlLnRzJztcblxuaW1wb3J0IHsgREVGQVVMVF9QQUNLQUdFX1NJVEVTIH0gZnJvbSAnLi9hcGktZG9jLXBhY2thZ2Utc2l0ZXMudHMnO1xuXG4vKipcbiAqIERlc2NyaWJlcyBhIGRvY3VtZW50YXRpb24gc2l0ZS4gRXZlcnkgcGF0aCBpcyByZWxhdGl2ZSB0byB7QGxpbmsgRG9jc1NpdGVDb25maWcucm9vdERpcmVjdG9yeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9jc1NpdGVDb25maWcge1xuICAvKipcbiAgICogVGhlIGZvbGRlciBob2xkaW5nIHRoZSBzaXRlOiBpdHMgYHNyY2AgKHBhZ2VzLCBgY29udGVudC5jb25maWcudHNgKSwgYHB1YmxpY2AgYW5kIGJ1aWxkIG91dHB1dCBgZGlzdGAuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdkb2NzJ1xuICAgKi9cbiAgcmVhZG9ubHkgZG9jc0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogRm9sZGVyIG5hbWVzIHVuZGVyIHtAbGluayBzb3VyY2VEaXJlY3Rvcnl9IHdob3NlIHN1YnRyZWUgdGhlIEFQSSByZWZlcmVuY2Ugc2tpcHMsIGluIGFkZGl0aW9uIHRvIGBAdHlwZXNgLFxuICAgKiBgc3R5bGVzYCBhbmQgYHRlc3QtaGVscGVyc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlZERpcmVjdG9yaWVzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFR5cGUgbmFtZXMgbWFwcGVkIHRvIHRoZSBVUkwgdGhlaXIgcmVmZXJlbmNlcyBsaW5rIHRvLCBmb3IgdHlwZXMgbm8gZG9jdW1lbnRlZCBwYWNrYWdlIGRlY2xhcmVzLiBUaGUgbGF5ZXJcbiAgICogZG9jdW1lbnRpbmcgYW4gZWNvc3lzdGVtJ3MgcGFja2FnZXMgZmlsbHMgaXQgd2l0aCB0aGF0IGVjb3N5c3RlbSdzIHJlZmVyZW5jZXMuXG4gICAqL1xuICByZWFkb25seSBleHRlcm5hbFR5cGVMaW5rcz86IFJlYWRvbmx5TWFwPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogTmFtZXMgdGhlIEFQSSByZWZlcmVuY2UgbmV2ZXIgbGlua3MgYXMgdHlwZXMsIGluIGFkZGl0aW9uIHRvIHRoZSBidWlsdC1pbiBnZW5lcmljIHBhcmFtZXRlciBuYW1lcyBhbmQgZXZlcnlcbiAgICogdHlwZSBwYXJhbWV0ZXIgYSBkb2N1bWVudGVkIHR5cGUgZGVjbGFyZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBnZW5lcmljVHlwZVBhcmFtZXRlcnM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB1bmRlciBgPGRvY3M+L3NyYy9jb250ZW50L2RvY3NgIHRoZSBndWlkZXMgc2lkZWJhciBncm91cCBpcyBnZW5lcmF0ZWQgZnJvbS5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2d1aWRlcydcbiAgICovXG4gIHJlYWRvbmx5IGd1aWRlc0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGRzIGVhY2ggZXhwb3J0J3MgaW1wb3J0IHN0YXRlbWVudCwgZm9yIGEgcGFja2FnZSB3aG9zZSBleHBvcnRzIGFyZSBub3QgaW1wb3J0ZWQgZnJvbVxuICAgKiBgPHBhY2thZ2U+Lzxtb2R1bGUgcGF0aD5gLCBlLmcuIG9uZSBwdWJsaXNoaW5nIGJhcnJlbCBlbnRyeSBwb2ludHMuIFJldHVybmluZyBgdW5kZWZpbmVkYCBzaG93cyBubyBzdGF0ZW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBzdGF0ZW1lbnQgaW1wb3J0aW5nIHRoZSBleHBvcnQgZnJvbSBgPHBhY2thZ2U+Lzxtb2R1bGUgcGF0aD5gXG4gICAqL1xuICByZWFkb25seSBpbXBvcnRTdGF0ZW1lbnQ/OiBJbXBvcnRTdGF0ZW1lbnRQcm92aWRlcjtcblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBjYXNlLXByZXNlcnZlZCByb3V0ZSBzZWdtZW50IG9mIGEgbWVtYmVyJ3MgcGFnZSBmcm9tIGEgcHJvcGVydHkncyBuYW1lIG9yIGEgbWV0aG9kJ3Mgb3ZlcmxvYWQga2V5LFxuICAgKiBvdmVycmlkaW5nIHRoZSBnZW5lcmF0b3IncyBvd24gc2x1ZyB3aGVyZSBpdCByZXR1cm5zIGEgc3RyaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgbmFtZSBhcyBhIFVSTCBzZWdtZW50LCBpdHMgdHJhaWxpbmcgdW5kZXJzY29yZXMga2VwdFxuICAgKi9cbiAgcmVhZG9ubHkgbWVtYmVyUm91dGVTZWdtZW50PzogTWVtYmVyUm91dGVTZWdtZW50UHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgYWNjb3VudCB0aGUgcmVwb3NpdG9yeSBiZWxvbmdzIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnbW5hb3Vtb3YnXG4gICAqL1xuICByZWFkb25seSBvd25lcj86IHN0cmluZztcblxuICAvKipcbiAgICogUGFja2FnZSBuYW1lcyBtYXBwZWQgdG8gdGhlIHJvb3QgVVJMIG9mIHRoZWlyIGRvY3VtZW50YXRpb24gc2l0ZSwgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLiBBIHR5cGUgZGVjbGFyZWQgaW4gb25lXG4gICAqIG9mIHRoZW0gbGlua3MgdG8gaXRzIHBhZ2UgdGhlcmUuIFRoZSBkb2N1bWVudGVkIHBhY2thZ2UgaXRzZWxmIGlzIG5ldmVyIGxpbmtlZCB0aGlzIHdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9QQUNLQUdFX1NJVEVTXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlU2l0ZXM/OiBSZWFkb25seU1hcDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlJ3Mgb25lIHB1YmxpYyBlbnRyeSBwb2ludCwgZS5nLiBgc3JjL2luZGV4LnRzYCwgZm9yIGEgcGFja2FnZSB0aGF0IHB1Ymxpc2hlcyBpdHMgQVBJIGZyb20gYSBiYXJyZWxcbiAgICogcmF0aGVyIHRoYW4gb25lIGltcG9ydCBzdWJwYXRoIHBlciBtb2R1bGUuIFNldCwgdGhlIEFQSSByZWZlcmVuY2UgZG9jdW1lbnRzIG9ubHkgdGhlIGV4cG9ydHMgdGhhdCBiYXJyZWxcbiAgICogcmUtZXhwb3J0cyAoYGV4cG9ydCAuLi4gZnJvbWApLCB7QGxpbmsgZXhjbHVkZWREaXJlY3Rvcmllc30gZG9lcyBub3QgYXBwbHksIGFuZCBldmVyeSBpbXBvcnQgc3RhdGVtZW50IGltcG9ydHNcbiAgICogZnJvbSB0aGUgcGFja2FnZSByb290LlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQ6IGV2ZXJ5IG1vZHVsZSB1bmRlciB7QGxpbmsgc291cmNlRGlyZWN0b3J5fSBpcyBkb2N1bWVudGVkIGFzIGl0cyBvd24gaW1wb3J0IHN1YnBhdGhcbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FwaUVudHJ5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSdzIG5hbWUuIFRoZSBzaXRlIGlzIHNlcnZlZCB1bmRlciBpdDogYDxzaXRlT3JpZ2luPi88cmVwbz4vYC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcblxuICAvKipcbiAgICogV2hhdCBgYnVpbGREb2NzU2l0ZWAgZG9lcywgYWZ0ZXIgdGhlIGJ1aWxkLCBhYm91dCB0aGUgcmVwb3NpdG9yeSdzIEdpdEh1YiBob21lcGFnZTogY29tcGFyZSBpdCB3aXRoIHRoZSBzaXRlJ3NcbiAgICogVVJMIGFuZCByZXBvcnQgYSBtaXNtYXRjaCAoYGNoZWNrYCksIG9yIGFsc28gc2V0IGl0IChgc2V0YCkuIEl0IHJlYWRzIGFuZCB3cml0ZXMgdGhyb3VnaCB0aGUgYGdoYCBDTEksIGFuZFxuICAgKiBvbmx5IGV2ZXIgd2FybnMuIEEgd29ya2Zsb3cncyBgR0lUSFVCX1RPS0VOYCBjYW4gcmVhZCB0aGUgaG9tZXBhZ2UgYnV0IG5vdCBzZXQgaXQsIHNvIGluIENJIGBzZXRgIHJlcG9ydHMgdG9vLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnb2ZmJ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVwb0hvbWVwYWdlPzogUmVwb0hvbWVwYWdlTW9kZTtcblxuICAvKipcbiAgICogVGhlIHJlcG9zaXRvcnkgcm9vdCwgaG9sZGluZyBgcGFja2FnZS5qc29uYCwgYHRzY29uZmlnLmpzb25gIGFuZCBgbm9kZV9tb2R1bGVzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdERpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9yaWdpbiBldmVyeSBzaXRlIG9mIHRoZSBhY2NvdW50IGlzIHNlcnZlZCBmcm9tLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnaHR0cHM6Ly9tbmFvdW1vdi5kZXYnXG4gICAqL1xuICByZWFkb25seSBzaXRlT3JpZ2luPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdob3NlIG1vZHVsZXMgdGhlIEFQSSByZWZlcmVuY2UgZG9jdW1lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnc3JjJ1xuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSdzIHRpdGxlLCBzaG93biBpbiBpdHMgaGVhZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiB7QGxpbmsgRG9jc1NpdGVDb25maWd9IHdpdGggZXZlcnkgZGVmYXVsdCBhcHBsaWVkLCBldmVyeSBwYXRoIGFic29sdXRlLCBhbmQgdGhlIHZhbHVlcyBkZXJpdmVkIGZyb20gdGhlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZERvY3NTaXRlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IncyBzZXR0aW5ncyBmb3IgdGhlIHNpdGUuXG4gICAqL1xuICByZWFkb25seSBhcGlEb2NTZXR0aW5nczogQXBpRG9jU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIHBhdGgsIGUuZy4gYC90eXBlc2NyaXB0LWxpYmAuXG4gICAqL1xuICByZWFkb25seSBiYXNlUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9jdW1lbnRhdGlvbiBjb250ZW50IHJvb3QsIGA8ZG9jcz4vc3JjL2NvbnRlbnQvZG9jc2AuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50RG9jc0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYnVpbGQgb3V0cHV0IGZvbGRlciwgYDxkb2NzPi9kaXN0YC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3REaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpdGUgZm9sZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jc0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSdzIHNvdXJjZSBmb2xkZXIsIGA8ZG9jcz4vc3JjYC5cbiAgICovXG4gIHJlYWRvbmx5IGRvY3NTb3VyY2VEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBhIHBhZ2UncyBlZGl0IGxpbmsgc3RhcnRzIHdpdGg6IHRoZSByZXBvc2l0b3J5J3MgYGVkaXQvbWFpbi9gIHRyZWUuXG4gICAqL1xuICByZWFkb25seSBlZGl0TGlua0Jhc2VVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpdGUncyBTVkcgbG9nbywgYDxkb2NzPi9wdWJsaWMvZmF2aWNvbi5zdmdgLlxuICAgKi9cbiAgcmVhZG9ubHkgZmF2aWNvblBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlcG9zaXRvcnkncyBHaXRIdWIgVVJMLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgRG9jc1NpdGVDb25maWcuZ3VpZGVzRGlyZWN0b3J5fS5cbiAgICovXG4gIHJlYWRvbmx5IGd1aWRlc0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHRoZSBPcGVuIEdyYXBoIGNhcmRzIGFyZSB3cml0dGVuIHRvLCBgPGRvY3M+L3B1YmxpYy9vZ2AuXG4gICAqL1xuICByZWFkb25seSBvZ091dHB1dERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLm93bmVyfS5cbiAgICovXG4gIHJlYWRvbmx5IG93bmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudGVkIHBhY2thZ2UncyBuYW1lLCByZWFkIGZyb20gdGhlIHJvb3QgYHBhY2thZ2UuanNvbmAuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9jdW1lbnRlZCBwYWNrYWdlJ3MgdmVyc2lvbiwgcmVhZCBmcm9tIHRoZSByb290IGBwYWNrYWdlLmpzb25gLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpdGUncyBzdGF0aWMgZm9sZGVyLCBgPGRvY3M+L3B1YmxpY2AuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5yZXBvfS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5yZXBvSG9tZXBhZ2V9LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb0hvbWVwYWdlOiBSZXBvSG9tZXBhZ2VNb2RlO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLnJvb3REaXJlY3Rvcnl9LlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgVVJMIHRoZSBzaXRlIGlzIHNlcnZlZCBmcm9tLCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guXG4gICAqL1xuICByZWFkb25seSBzaXRlQmFzZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLnNpdGVPcmlnaW59LlxuICAgKi9cbiAgcmVhZG9ubHkgc2l0ZU9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLnNvdXJjZURpcmVjdG9yeX0uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy50aXRsZX0uXG4gICAqL1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGFja2FnZUpzb25GaWVsZHMge1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGRlZmF1bHRzIHRvIGEgc2l0ZSdzIG9wdGlvbnMgYW5kIGRlcml2ZXMgZXZlcnkgcGF0aCBhbmQgVVJMIGZyb20gdGhlbS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIHNpdGUncyBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGNvbmZpZ3VyYXRpb24uXG4gKiBAdGhyb3dzIElmIHRoZSByb290IGBwYWNrYWdlLmpzb25gIGhhcyBubyBgbmFtZWAgb3IgYHZlcnNpb25gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZURvY3NTaXRlQ29uZmlnKGNvbmZpZzogRG9jc1NpdGVDb25maWcpOiBSZXNvbHZlZERvY3NTaXRlQ29uZmlnIHtcbiAgY29uc3Qge1xuICAgIGRvY3NEaXJlY3RvcnkgPSAnZG9jcycsXG4gICAgZXhjbHVkZWREaXJlY3RvcmllcyA9IFtdLFxuICAgIGV4dGVybmFsVHlwZUxpbmtzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSxcbiAgICBnZW5lcmljVHlwZVBhcmFtZXRlcnMgPSBbXSxcbiAgICBndWlkZXNEaXJlY3RvcnkgPSAnZ3VpZGVzJyxcbiAgICBpbXBvcnRTdGF0ZW1lbnQsXG4gICAgbWVtYmVyUm91dGVTZWdtZW50LFxuICAgIG93bmVyID0gJ21uYW91bW92JyxcbiAgICBwYWNrYWdlU2l0ZXMgPSBERUZBVUxUX1BBQ0tBR0VfU0lURVMsXG4gICAgcHVibGljQXBpRW50cnksXG4gICAgcmVwbyxcbiAgICByZXBvSG9tZXBhZ2UgPSAnb2ZmJyxcbiAgICByb290RGlyZWN0b3J5ID0gcHJvY2Vzcy5jd2QoKSxcbiAgICBzaXRlT3JpZ2luID0gJ2h0dHBzOi8vbW5hb3Vtb3YuZGV2JyxcbiAgICBzb3VyY2VEaXJlY3RvcnkgPSAnc3JjJyxcbiAgICB0aXRsZVxuICB9ID0gY29uZmlnO1xuXG4gIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoam9pbihyb290RGlyZWN0b3J5LCAncGFja2FnZS5qc29uJyksICd1dGYtOCcpKSBhcyBQYWNrYWdlSnNvbkZpZWxkcztcbiAgaWYgKHBhY2thZ2VKc29uLm5hbWUgPT09IHVuZGVmaW5lZCB8fCBwYWNrYWdlSnNvbi52ZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7am9pbihyb290RGlyZWN0b3J5LCAncGFja2FnZS5qc29uJyl9IGhhcyBubyBuYW1lIG9yIG5vIHZlcnNpb24uYCk7XG4gIH1cblxuICBjb25zdCBhYnNvbHV0ZURvY3NEaXJlY3RvcnkgPSBqb2luKHJvb3REaXJlY3RvcnksIGRvY3NEaXJlY3RvcnkpO1xuICBjb25zdCBkb2NzU291cmNlRGlyZWN0b3J5ID0gam9pbihhYnNvbHV0ZURvY3NEaXJlY3RvcnksICdzcmMnKTtcbiAgY29uc3QgY29udGVudERvY3NEaXJlY3RvcnkgPSBqb2luKGRvY3NTb3VyY2VEaXJlY3RvcnksICdjb250ZW50JywgJ2RvY3MnKTtcbiAgY29uc3QgcHVibGljRGlyZWN0b3J5ID0gam9pbihhYnNvbHV0ZURvY3NEaXJlY3RvcnksICdwdWJsaWMnKTtcbiAgY29uc3QgZ2l0aHViVXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke293bmVyfS8ke3JlcG99YDtcblxuICBjb25zdCBiYXNlUGF0aCA9IGAvJHtyZXBvfWA7XG4gIHJldHVybiB7XG4gICAgYXBpRG9jU2V0dGluZ3M6IHtcbiAgICAgIGJhc2VQYXRoLFxuICAgICAgZXhjbHVkZWREaXJlY3RvcmllcyxcbiAgICAgIGV4dGVybmFsVHlwZUxpbmtzLFxuICAgICAgZ2VuZXJpY1R5cGVQYXJhbWV0ZXJzLFxuICAgICAgaW1wb3J0U3RhdGVtZW50LFxuICAgICAgbWVtYmVyUm91dGVTZWdtZW50LFxuICAgICAgb3V0cHV0RGlyZWN0b3J5OiBqb2luKGNvbnRlbnREb2NzRGlyZWN0b3J5LCAnYXBpJyksXG4gICAgICBwYWNrYWdlTmFtZTogcGFja2FnZUpzb24ubmFtZSxcbiAgICAgIHBhY2thZ2VTaXRlcyxcbiAgICAgIHB1YmxpY0FwaUVudHJ5OiBwdWJsaWNBcGlFbnRyeSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogam9pbihyb290RGlyZWN0b3J5LCBwdWJsaWNBcGlFbnRyeSksXG4gICAgICBzaWRlYmFyRmlsZTogam9pbihkb2NzU291cmNlRGlyZWN0b3J5LCAnZ2VuZXJhdGVkLXNpZGViYXIuanNvbicpXG4gICAgfSxcbiAgICBiYXNlUGF0aCxcbiAgICBjb250ZW50RG9jc0RpcmVjdG9yeSxcbiAgICBkaXN0RGlyZWN0b3J5OiBqb2luKGFic29sdXRlRG9jc0RpcmVjdG9yeSwgJ2Rpc3QnKSxcbiAgICBkb2NzRGlyZWN0b3J5OiBhYnNvbHV0ZURvY3NEaXJlY3RvcnksXG4gICAgZG9jc1NvdXJjZURpcmVjdG9yeSxcbiAgICBlZGl0TGlua0Jhc2VVcmw6IGAke2dpdGh1YlVybH0vZWRpdC9tYWluL2AsXG4gICAgZmF2aWNvblBhdGg6IGpvaW4ocHVibGljRGlyZWN0b3J5LCAnZmF2aWNvbi5zdmcnKSxcbiAgICBnaXRodWJVcmwsXG4gICAgZ3VpZGVzRGlyZWN0b3J5LFxuICAgIG9nT3V0cHV0RGlyZWN0b3J5OiBqb2luKHB1YmxpY0RpcmVjdG9yeSwgJ29nJyksXG4gICAgb3duZXIsXG4gICAgcGFja2FnZU5hbWU6IHBhY2thZ2VKc29uLm5hbWUsXG4gICAgcGFja2FnZVZlcnNpb246IHBhY2thZ2VKc29uLnZlcnNpb24sXG4gICAgcHVibGljRGlyZWN0b3J5LFxuICAgIHJlcG8sXG4gICAgcmVwb0hvbWVwYWdlLFxuICAgIHJvb3REaXJlY3RvcnksXG4gICAgc2l0ZUJhc2VVcmw6IGAke3NpdGVPcmlnaW59LyR7cmVwb30vYCxcbiAgICBzaXRlT3JpZ2luLFxuICAgIHNvdXJjZURpcmVjdG9yeTogam9pbihyb290RGlyZWN0b3J5LCBzb3VyY2VEaXJlY3RvcnkpLFxuICAgIHRpdGxlXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0EsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxZQUFZO0FBU3JCLFNBQVMsNkJBQTZCO0FBMlAvQixTQUFTLHNCQUFzQixRQUFnRDtBQUNwRixRQUFNO0FBQUEsSUFDSixnQkFBZ0I7QUFBQSxJQUNoQixzQkFBc0IsQ0FBQztBQUFBLElBQ3ZCLG9CQUFvQixvQkFBSSxJQUFvQjtBQUFBLElBQzVDLHdCQUF3QixDQUFDO0FBQUEsSUFDekIsa0JBQWtCO0FBQUEsSUFDbEI7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsSUFDUixlQUFlO0FBQUEsSUFDZjtBQUFBLElBQ0E7QUFBQSxJQUNBLGVBQWU7QUFBQSxJQUNmLGdCQUFnQixRQUFRLElBQUk7QUFBQSxJQUM1QixhQUFhO0FBQUEsSUFDYixrQkFBa0I7QUFBQSxJQUNsQjtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sY0FBYyxLQUFLLE1BQU0sYUFBYSxLQUFLLGVBQWUsY0FBYyxHQUFHLE9BQU8sQ0FBQztBQUN6RixNQUFJLFlBQVksU0FBUyxVQUFhLFlBQVksWUFBWSxRQUFXO0FBQ3ZFLFVBQU0sSUFBSSxNQUFNLEdBQUcsS0FBSyxlQUFlLGNBQWMsQ0FBQyw2QkFBNkI7QUFBQSxFQUNyRjtBQUVBLFFBQU0sd0JBQXdCLEtBQUssZUFBZSxhQUFhO0FBQy9ELFFBQU0sc0JBQXNCLEtBQUssdUJBQXVCLEtBQUs7QUFDN0QsUUFBTSx1QkFBdUIsS0FBSyxxQkFBcUIsV0FBVyxNQUFNO0FBQ3hFLFFBQU0sa0JBQWtCLEtBQUssdUJBQXVCLFFBQVE7QUFDNUQsUUFBTSxZQUFZLHNCQUFzQixLQUFLLElBQUksSUFBSTtBQUVyRCxRQUFNLFdBQVcsSUFBSSxJQUFJO0FBQ3pCLFNBQU87QUFBQSxJQUNMLGdCQUFnQjtBQUFBLE1BQ2Q7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsaUJBQWlCLEtBQUssc0JBQXNCLEtBQUs7QUFBQSxNQUNqRCxhQUFhLFlBQVk7QUFBQSxNQUN6QjtBQUFBLE1BQ0EsZ0JBQWdCLG1CQUFtQixTQUFZLFNBQVksS0FBSyxlQUFlLGNBQWM7QUFBQSxNQUM3RixhQUFhLEtBQUsscUJBQXFCLHdCQUF3QjtBQUFBLElBQ2pFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGVBQWUsS0FBSyx1QkFBdUIsTUFBTTtBQUFBLElBQ2pELGVBQWU7QUFBQSxJQUNmO0FBQUEsSUFDQSxpQkFBaUIsR0FBRyxTQUFTO0FBQUEsSUFDN0IsYUFBYSxLQUFLLGlCQUFpQixhQUFhO0FBQUEsSUFDaEQ7QUFBQSxJQUNBO0FBQUEsSUFDQSxtQkFBbUIsS0FBSyxpQkFBaUIsSUFBSTtBQUFBLElBQzdDO0FBQUEsSUFDQSxhQUFhLFlBQVk7QUFBQSxJQUN6QixnQkFBZ0IsWUFBWTtBQUFBLElBQzVCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxhQUFhLEdBQUcsVUFBVSxJQUFJLElBQUk7QUFBQSxJQUNsQztBQUFBLElBQ0EsaUJBQWlCLEtBQUssZUFBZSxlQUFlO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvZG9jcy1zaXRlLWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIG9uZSBkZXNjcmlwdGlvbiBvZiBhIGRvY3VtZW50YXRpb24gc2l0ZSB0aGF0IGl0cyBBc3RybyBjb25maWcgYW5kIGl0cyBidWlsZCBjb21tYW5kcyBzaGFyZTogd2hpY2ggcmVwb3NpdG9yeVxuICogaXQgZG9jdW1lbnRzLCB3aGVyZSBpdHMgc291cmNlcyBhbmQgcGFnZXMgbGl2ZSwgYW5kIHdoaWNoIG90aGVyIHNpdGVzIGl0IGxpbmtzIHRvLlxuICovXG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQXBpRG9jU2V0dGluZ3MsXG4gIEltcG9ydFN0YXRlbWVudFByb3ZpZGVyLFxuICBNZW1iZXJSb3V0ZVNlZ21lbnRQcm92aWRlclxufSBmcm9tICcuL2FwaS1kb2Mtc2V0dGluZ3MudHMnO1xuaW1wb3J0IHR5cGUgeyBSZXBvSG9tZXBhZ2VNb2RlIH0gZnJvbSAnLi9yZXBvLWhvbWVwYWdlLnRzJztcblxuaW1wb3J0IHsgREVGQVVMVF9QQUNLQUdFX1NJVEVTIH0gZnJvbSAnLi9hcGktZG9jLXBhY2thZ2Utc2l0ZXMudHMnO1xuXG4vKipcbiAqIERlc2NyaWJlcyBhIGRvY3VtZW50YXRpb24gc2l0ZS4gRXZlcnkgcGF0aCBpcyByZWxhdGl2ZSB0byB7QGxpbmsgRG9jc1NpdGVDb25maWcucm9vdERpcmVjdG9yeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9jc1NpdGVDb25maWcge1xuICAvKipcbiAgICogVGhlIHJvb3QgQVBJIHBhZ2UncyBpbnRybywgYXMgTWFya2Rvd24sIGZvciBhIHBhY2thZ2Ugd2hvc2UgYXJyYW5nZW1lbnQgdGhlIGdlbmVyYXRlZCBpbnRybyBjYW5ub3QgZXhwbGFpbjtcbiAgICogc3RyaXBwZWQgb2YgaXRzIE1hcmtkb3duLCBpdCBpcyBhbHNvIHRoZSBwYWdlJ3MgYGRlc2NyaXB0aW9uYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYSBnZW5lcmF0ZWQgaW50cm8gbmFtaW5nIHRoZSBwYWNrYWdlIGFuZCwgdW5sZXNzIHtAbGluayBpbXBvcnRTdGF0ZW1lbnR9IGlzIHNldCwgd2hlcmUgaXRzIGV4cG9ydHMgYXJlXG4gICAqIGltcG9ydGVkIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IGFwaUluZGV4SW50cm8/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgaG9sZGluZyB0aGUgc2l0ZTogaXRzIGBzcmNgIChwYWdlcywgYGNvbnRlbnQuY29uZmlnLnRzYCksIGBwdWJsaWNgIGFuZCBidWlsZCBvdXRwdXQgYGRpc3RgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnZG9jcydcbiAgICovXG4gIHJlYWRvbmx5IGRvY3NEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZvbGRlciBuYW1lcyB1bmRlciB7QGxpbmsgc291cmNlRGlyZWN0b3J5fSB3aG9zZSBzdWJ0cmVlIHRoZSBBUEkgcmVmZXJlbmNlIHNraXBzLCBpbiBhZGRpdGlvbiB0byBgQHR5cGVzYCxcbiAgICogYHN0eWxlc2AgYW5kIGB0ZXN0LWhlbHBlcnNgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZWREaXJlY3Rvcmllcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUeXBlIG5hbWVzIG1hcHBlZCB0byB0aGUgVVJMIHRoZWlyIHJlZmVyZW5jZXMgbGluayB0bywgZm9yIHR5cGVzIG5vIGRvY3VtZW50ZWQgcGFja2FnZSBkZWNsYXJlcy4gVGhlIGxheWVyXG4gICAqIGRvY3VtZW50aW5nIGFuIGVjb3N5c3RlbSdzIHBhY2thZ2VzIGZpbGxzIGl0IHdpdGggdGhhdCBlY29zeXN0ZW0ncyByZWZlcmVuY2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZXJuYWxUeXBlTGlua3M/OiBSZWFkb25seU1hcDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBBUEkgcmVmZXJlbmNlIG5ldmVyIGxpbmtzIGFzIHR5cGVzLCBpbiBhZGRpdGlvbiB0byB0aGUgYnVpbHQtaW4gZ2VuZXJpYyBwYXJhbWV0ZXIgbmFtZXMgYW5kIGV2ZXJ5XG4gICAqIHR5cGUgcGFyYW1ldGVyIGEgZG9jdW1lbnRlZCB0eXBlIGRlY2xhcmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgZ2VuZXJpY1R5cGVQYXJhbWV0ZXJzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgdW5kZXIgYDxkb2NzPi9zcmMvY29udGVudC9kb2NzYCB0aGUgZ3VpZGVzIHNpZGViYXIgZ3JvdXAgaXMgZ2VuZXJhdGVkIGZyb20uXG4gICAqXG4gICAqIEBkZWZhdWx0ICdndWlkZXMnXG4gICAqL1xuICByZWFkb25seSBndWlkZXNEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBlYWNoIGV4cG9ydCdzIGltcG9ydCBzdGF0ZW1lbnQsIGZvciBhIHBhY2thZ2Ugd2hvc2UgZXhwb3J0cyBhcmUgbm90IGltcG9ydGVkIGZyb21cbiAgICogYDxwYWNrYWdlPi88bW9kdWxlIHBhdGg+YCwgZS5nLiBvbmUgcHVibGlzaGluZyBiYXJyZWwgZW50cnkgcG9pbnRzLiBSZXR1cm5pbmcgYHVuZGVmaW5lZGAgc2hvd3Mgbm8gc3RhdGVtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgc3RhdGVtZW50IGltcG9ydGluZyB0aGUgZXhwb3J0IGZyb20gYDxwYWNrYWdlPi88bW9kdWxlIHBhdGg+YFxuICAgKi9cbiAgcmVhZG9ubHkgaW1wb3J0U3RhdGVtZW50PzogSW1wb3J0U3RhdGVtZW50UHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgY2FzZS1wcmVzZXJ2ZWQgcm91dGUgc2VnbWVudCBvZiBhIG1lbWJlcidzIHBhZ2UgZnJvbSBhIHByb3BlcnR5J3MgbmFtZSBvciBhIG1ldGhvZCdzIG92ZXJsb2FkIGtleSxcbiAgICogb3ZlcnJpZGluZyB0aGUgZ2VuZXJhdG9yJ3Mgb3duIHNsdWcgd2hlcmUgaXQgcmV0dXJucyBhIHN0cmluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIG5hbWUgYXMgYSBVUkwgc2VnbWVudCwgaXRzIHRyYWlsaW5nIHVuZGVyc2NvcmVzIGtlcHRcbiAgICovXG4gIHJlYWRvbmx5IG1lbWJlclJvdXRlU2VnbWVudD86IE1lbWJlclJvdXRlU2VnbWVudFByb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIGFjY291bnQgdGhlIHJlcG9zaXRvcnkgYmVsb25ncyB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgJ21uYW91bW92J1xuICAgKi9cbiAgcmVhZG9ubHkgb3duZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhY2thZ2UgbmFtZXMgbWFwcGVkIHRvIHRoZSByb290IFVSTCBvZiB0aGVpciBkb2N1bWVudGF0aW9uIHNpdGUsIHdpdGggYSB0cmFpbGluZyBzbGFzaC4gQSB0eXBlIGRlY2xhcmVkIGluIG9uZVxuICAgKiBvZiB0aGVtIGxpbmtzIHRvIGl0cyBwYWdlIHRoZXJlLiBUaGUgZG9jdW1lbnRlZCBwYWNrYWdlIGl0c2VsZiBpcyBuZXZlciBsaW5rZWQgdGhpcyB3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IERFRkFVTFRfUEFDS0FHRV9TSVRFU1xuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZVNpdGVzPzogUmVhZG9ubHlNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSdzIG9uZSBwdWJsaWMgZW50cnkgcG9pbnQsIGUuZy4gYHNyYy9pbmRleC50c2AsIGZvciBhIHBhY2thZ2UgdGhhdCBwdWJsaXNoZXMgaXRzIEFQSSBmcm9tIGEgYmFycmVsXG4gICAqIHJhdGhlciB0aGFuIG9uZSBpbXBvcnQgc3VicGF0aCBwZXIgbW9kdWxlLiBTZXQsIHRoZSBBUEkgcmVmZXJlbmNlIGRvY3VtZW50cyBvbmx5IHRoZSBleHBvcnRzIHRoYXQgYmFycmVsXG4gICAqIHJlLWV4cG9ydHMgKGBleHBvcnQgLi4uIGZyb21gKSwge0BsaW5rIGV4Y2x1ZGVkRGlyZWN0b3JpZXN9IGRvZXMgbm90IGFwcGx5LCBhbmQgZXZlcnkgaW1wb3J0IHN0YXRlbWVudCBpbXBvcnRzXG4gICAqIGZyb20gdGhlIHBhY2thZ2Ugcm9vdC5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkOiBldmVyeSBtb2R1bGUgdW5kZXIge0BsaW5rIHNvdXJjZURpcmVjdG9yeX0gaXMgZG9jdW1lbnRlZCBhcyBpdHMgb3duIGltcG9ydCBzdWJwYXRoXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBcGlFbnRyeT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlcG9zaXRvcnkncyBuYW1lLiBUaGUgc2l0ZSBpcyBzZXJ2ZWQgdW5kZXIgaXQ6IGA8c2l0ZU9yaWdpbj4vPHJlcG8+L2AuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgYGJ1aWxkRG9jc1NpdGVgIGRvZXMsIGFmdGVyIHRoZSBidWlsZCwgYWJvdXQgdGhlIHJlcG9zaXRvcnkncyBHaXRIdWIgaG9tZXBhZ2U6IGNvbXBhcmUgaXQgd2l0aCB0aGUgc2l0ZSdzXG4gICAqIFVSTCBhbmQgcmVwb3J0IGEgbWlzbWF0Y2ggKGBjaGVja2ApLCBvciBhbHNvIHNldCBpdCAoYHNldGApLiBJdCByZWFkcyBhbmQgd3JpdGVzIHRocm91Z2ggdGhlIGBnaGAgQ0xJLCBhbmRcbiAgICogb25seSBldmVyIHdhcm5zLiBBIHdvcmtmbG93J3MgYEdJVEhVQl9UT0tFTmAgY2FuIHJlYWQgdGhlIGhvbWVwYWdlIGJ1dCBub3Qgc2V0IGl0LCBzbyBpbiBDSSBgc2V0YCByZXBvcnRzIHRvby5cbiAgICpcbiAgICogQGRlZmF1bHQgJ29mZidcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9Ib21lcGFnZT86IFJlcG9Ib21lcGFnZU1vZGU7XG5cbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IHJvb3QsIGhvbGRpbmcgYHBhY2thZ2UuanNvbmAsIGB0c2NvbmZpZy5qc29uYCBhbmQgYG5vZGVfbW9kdWxlc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICovXG4gIHJlYWRvbmx5IHJvb3REaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW4gZXZlcnkgc2l0ZSBvZiB0aGUgYWNjb3VudCBpcyBzZXJ2ZWQgZnJvbS5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2h0dHBzOi8vbW5hb3Vtb3YuZGV2J1xuICAgKi9cbiAgcmVhZG9ubHkgc2l0ZU9yaWdpbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB3aG9zZSBtb2R1bGVzIHRoZSBBUEkgcmVmZXJlbmNlIGRvY3VtZW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgJ3NyYydcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZURpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpdGUncyB0aXRsZSwgc2hvd24gaW4gaXRzIGhlYWRlci5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICoge0BsaW5rIERvY3NTaXRlQ29uZmlnfSB3aXRoIGV2ZXJ5IGRlZmF1bHQgYXBwbGllZCwgZXZlcnkgcGF0aCBhYnNvbHV0ZSwgYW5kIHRoZSB2YWx1ZXMgZGVyaXZlZCBmcm9tIHRoZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWREb2NzU2l0ZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yJ3Mgc2V0dGluZ3MgZm9yIHRoZSBzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpRG9jU2V0dGluZ3M6IEFwaURvY1NldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBwYXRoLCBlLmcuIGAvdHlwZXNjcmlwdC1saWJgLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRvY3VtZW50YXRpb24gY29udGVudCByb290LCBgPGRvY3M+L3NyYy9jb250ZW50L2RvY3NgLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudERvY3NEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJ1aWxkIG91dHB1dCBmb2xkZXIsIGA8ZG9jcz4vZGlzdGAuXG4gICAqL1xuICByZWFkb25seSBkaXN0RGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXRlIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGRvY3NEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpdGUncyBzb3VyY2UgZm9sZGVyLCBgPGRvY3M+L3NyY2AuXG4gICAqL1xuICByZWFkb25seSBkb2NzU291cmNlRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgYSBwYWdlJ3MgZWRpdCBsaW5rIHN0YXJ0cyB3aXRoOiB0aGUgcmVwb3NpdG9yeSdzIGBlZGl0L21haW4vYCB0cmVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdExpbmtCYXNlVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXRlJ3MgU1ZHIGxvZ28sIGA8ZG9jcz4vcHVibGljL2Zhdmljb24uc3ZnYC5cbiAgICovXG4gIHJlYWRvbmx5IGZhdmljb25QYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5J3MgR2l0SHViIFVSTC5cbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YlVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLmd1aWRlc0RpcmVjdG9yeX0uXG4gICAqL1xuICByZWFkb25seSBndWlkZXNEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB0aGUgT3BlbiBHcmFwaCBjYXJkcyBhcmUgd3JpdHRlbiB0bywgYDxkb2NzPi9wdWJsaWMvb2dgLlxuICAgKi9cbiAgcmVhZG9ubHkgb2dPdXRwdXREaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5vd25lcn0uXG4gICAqL1xuICByZWFkb25seSBvd25lcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9jdW1lbnRlZCBwYWNrYWdlJ3MgbmFtZSwgcmVhZCBmcm9tIHRoZSByb290IGBwYWNrYWdlLmpzb25gLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRvY3VtZW50ZWQgcGFja2FnZSdzIHZlcnNpb24sIHJlYWQgZnJvbSB0aGUgcm9vdCBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXRlJ3Mgc3RhdGljIGZvbGRlciwgYDxkb2NzPi9wdWJsaWNgLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgRG9jc1NpdGVDb25maWcucmVwb30uXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgRG9jc1NpdGVDb25maWcucmVwb0hvbWVwYWdlfS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG9Ib21lcGFnZTogUmVwb0hvbWVwYWdlTW9kZTtcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5yb290RGlyZWN0b3J5fS5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3REaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFic29sdXRlIFVSTCB0aGUgc2l0ZSBpcyBzZXJ2ZWQgZnJvbSwgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2l0ZUJhc2VVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5zaXRlT3JpZ2lufS5cbiAgICovXG4gIHJlYWRvbmx5IHNpdGVPcmlnaW46IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5zb3VyY2VEaXJlY3Rvcnl9LlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgRG9jc1NpdGVDb25maWcudGl0bGV9LlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBhY2thZ2VKc29uRmllbGRzIHtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBkZWZhdWx0cyB0byBhIHNpdGUncyBvcHRpb25zIGFuZCBkZXJpdmVzIGV2ZXJ5IHBhdGggYW5kIFVSTCBmcm9tIHRoZW0uXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIFRoZSBzaXRlJ3MgY29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBjb25maWd1cmF0aW9uLlxuICogQHRocm93cyBJZiB0aGUgcm9vdCBgcGFja2FnZS5qc29uYCBoYXMgbm8gYG5hbWVgIG9yIGB2ZXJzaW9uYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVEb2NzU2l0ZUNvbmZpZyhjb25maWc6IERvY3NTaXRlQ29uZmlnKTogUmVzb2x2ZWREb2NzU2l0ZUNvbmZpZyB7XG4gIGNvbnN0IHtcbiAgICBhcGlJbmRleEludHJvLFxuICAgIGRvY3NEaXJlY3RvcnkgPSAnZG9jcycsXG4gICAgZXhjbHVkZWREaXJlY3RvcmllcyA9IFtdLFxuICAgIGV4dGVybmFsVHlwZUxpbmtzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSxcbiAgICBnZW5lcmljVHlwZVBhcmFtZXRlcnMgPSBbXSxcbiAgICBndWlkZXNEaXJlY3RvcnkgPSAnZ3VpZGVzJyxcbiAgICBpbXBvcnRTdGF0ZW1lbnQsXG4gICAgbWVtYmVyUm91dGVTZWdtZW50LFxuICAgIG93bmVyID0gJ21uYW91bW92JyxcbiAgICBwYWNrYWdlU2l0ZXMgPSBERUZBVUxUX1BBQ0tBR0VfU0lURVMsXG4gICAgcHVibGljQXBpRW50cnksXG4gICAgcmVwbyxcbiAgICByZXBvSG9tZXBhZ2UgPSAnb2ZmJyxcbiAgICByb290RGlyZWN0b3J5ID0gcHJvY2Vzcy5jd2QoKSxcbiAgICBzaXRlT3JpZ2luID0gJ2h0dHBzOi8vbW5hb3Vtb3YuZGV2JyxcbiAgICBzb3VyY2VEaXJlY3RvcnkgPSAnc3JjJyxcbiAgICB0aXRsZVxuICB9ID0gY29uZmlnO1xuXG4gIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoam9pbihyb290RGlyZWN0b3J5LCAncGFja2FnZS5qc29uJyksICd1dGYtOCcpKSBhcyBQYWNrYWdlSnNvbkZpZWxkcztcbiAgaWYgKHBhY2thZ2VKc29uLm5hbWUgPT09IHVuZGVmaW5lZCB8fCBwYWNrYWdlSnNvbi52ZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7am9pbihyb290RGlyZWN0b3J5LCAncGFja2FnZS5qc29uJyl9IGhhcyBubyBuYW1lIG9yIG5vIHZlcnNpb24uYCk7XG4gIH1cblxuICBjb25zdCBhYnNvbHV0ZURvY3NEaXJlY3RvcnkgPSBqb2luKHJvb3REaXJlY3RvcnksIGRvY3NEaXJlY3RvcnkpO1xuICBjb25zdCBkb2NzU291cmNlRGlyZWN0b3J5ID0gam9pbihhYnNvbHV0ZURvY3NEaXJlY3RvcnksICdzcmMnKTtcbiAgY29uc3QgY29udGVudERvY3NEaXJlY3RvcnkgPSBqb2luKGRvY3NTb3VyY2VEaXJlY3RvcnksICdjb250ZW50JywgJ2RvY3MnKTtcbiAgY29uc3QgcHVibGljRGlyZWN0b3J5ID0gam9pbihhYnNvbHV0ZURvY3NEaXJlY3RvcnksICdwdWJsaWMnKTtcbiAgY29uc3QgZ2l0aHViVXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke293bmVyfS8ke3JlcG99YDtcblxuICBjb25zdCBiYXNlUGF0aCA9IGAvJHtyZXBvfWA7XG4gIHJldHVybiB7XG4gICAgYXBpRG9jU2V0dGluZ3M6IHtcbiAgICAgIGFwaUluZGV4SW50cm8sXG4gICAgICBiYXNlUGF0aCxcbiAgICAgIGV4Y2x1ZGVkRGlyZWN0b3JpZXMsXG4gICAgICBleHRlcm5hbFR5cGVMaW5rcyxcbiAgICAgIGdlbmVyaWNUeXBlUGFyYW1ldGVycyxcbiAgICAgIGltcG9ydFN0YXRlbWVudCxcbiAgICAgIG1lbWJlclJvdXRlU2VnbWVudCxcbiAgICAgIG91dHB1dERpcmVjdG9yeTogam9pbihjb250ZW50RG9jc0RpcmVjdG9yeSwgJ2FwaScpLFxuICAgICAgcGFja2FnZU5hbWU6IHBhY2thZ2VKc29uLm5hbWUsXG4gICAgICBwYWNrYWdlU2l0ZXMsXG4gICAgICBwdWJsaWNBcGlFbnRyeTogcHVibGljQXBpRW50cnkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGpvaW4ocm9vdERpcmVjdG9yeSwgcHVibGljQXBpRW50cnkpLFxuICAgICAgc2lkZWJhckZpbGU6IGpvaW4oZG9jc1NvdXJjZURpcmVjdG9yeSwgJ2dlbmVyYXRlZC1zaWRlYmFyLmpzb24nKVxuICAgIH0sXG4gICAgYmFzZVBhdGgsXG4gICAgY29udGVudERvY3NEaXJlY3RvcnksXG4gICAgZGlzdERpcmVjdG9yeTogam9pbihhYnNvbHV0ZURvY3NEaXJlY3RvcnksICdkaXN0JyksXG4gICAgZG9jc0RpcmVjdG9yeTogYWJzb2x1dGVEb2NzRGlyZWN0b3J5LFxuICAgIGRvY3NTb3VyY2VEaXJlY3RvcnksXG4gICAgZWRpdExpbmtCYXNlVXJsOiBgJHtnaXRodWJVcmx9L2VkaXQvbWFpbi9gLFxuICAgIGZhdmljb25QYXRoOiBqb2luKHB1YmxpY0RpcmVjdG9yeSwgJ2Zhdmljb24uc3ZnJyksXG4gICAgZ2l0aHViVXJsLFxuICAgIGd1aWRlc0RpcmVjdG9yeSxcbiAgICBvZ091dHB1dERpcmVjdG9yeTogam9pbihwdWJsaWNEaXJlY3RvcnksICdvZycpLFxuICAgIG93bmVyLFxuICAgIHBhY2thZ2VOYW1lOiBwYWNrYWdlSnNvbi5uYW1lLFxuICAgIHBhY2thZ2VWZXJzaW9uOiBwYWNrYWdlSnNvbi52ZXJzaW9uLFxuICAgIHB1YmxpY0RpcmVjdG9yeSxcbiAgICByZXBvLFxuICAgIHJlcG9Ib21lcGFnZSxcbiAgICByb290RGlyZWN0b3J5LFxuICAgIHNpdGVCYXNlVXJsOiBgJHtzaXRlT3JpZ2lufS8ke3JlcG99L2AsXG4gICAgc2l0ZU9yaWdpbixcbiAgICBzb3VyY2VEaXJlY3Rvcnk6IGpvaW4ocm9vdERpcmVjdG9yeSwgc291cmNlRGlyZWN0b3J5KSxcbiAgICB0aXRsZVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsWUFBWTtBQVNyQixTQUFTLDZCQUE2QjtBQW9RL0IsU0FBUyxzQkFBc0IsUUFBZ0Q7QUFDcEYsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBLGdCQUFnQjtBQUFBLElBQ2hCLHNCQUFzQixDQUFDO0FBQUEsSUFDdkIsb0JBQW9CLG9CQUFJLElBQW9CO0FBQUEsSUFDNUMsd0JBQXdCLENBQUM7QUFBQSxJQUN6QixrQkFBa0I7QUFBQSxJQUNsQjtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxJQUNSLGVBQWU7QUFBQSxJQUNmO0FBQUEsSUFDQTtBQUFBLElBQ0EsZUFBZTtBQUFBLElBQ2YsZ0JBQWdCLFFBQVEsSUFBSTtBQUFBLElBQzVCLGFBQWE7QUFBQSxJQUNiLGtCQUFrQjtBQUFBLElBQ2xCO0FBQUEsRUFDRixJQUFJO0FBRUosUUFBTSxjQUFjLEtBQUssTUFBTSxhQUFhLEtBQUssZUFBZSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBQ3pGLE1BQUksWUFBWSxTQUFTLFVBQWEsWUFBWSxZQUFZLFFBQVc7QUFDdkUsVUFBTSxJQUFJLE1BQU0sR0FBRyxLQUFLLGVBQWUsY0FBYyxDQUFDLDZCQUE2QjtBQUFBLEVBQ3JGO0FBRUEsUUFBTSx3QkFBd0IsS0FBSyxlQUFlLGFBQWE7QUFDL0QsUUFBTSxzQkFBc0IsS0FBSyx1QkFBdUIsS0FBSztBQUM3RCxRQUFNLHVCQUF1QixLQUFLLHFCQUFxQixXQUFXLE1BQU07QUFDeEUsUUFBTSxrQkFBa0IsS0FBSyx1QkFBdUIsUUFBUTtBQUM1RCxRQUFNLFlBQVksc0JBQXNCLEtBQUssSUFBSSxJQUFJO0FBRXJELFFBQU0sV0FBVyxJQUFJLElBQUk7QUFDekIsU0FBTztBQUFBLElBQ0wsZ0JBQWdCO0FBQUEsTUFDZDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsaUJBQWlCLEtBQUssc0JBQXNCLEtBQUs7QUFBQSxNQUNqRCxhQUFhLFlBQVk7QUFBQSxNQUN6QjtBQUFBLE1BQ0EsZ0JBQWdCLG1CQUFtQixTQUFZLFNBQVksS0FBSyxlQUFlLGNBQWM7QUFBQSxNQUM3RixhQUFhLEtBQUsscUJBQXFCLHdCQUF3QjtBQUFBLElBQ2pFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGVBQWUsS0FBSyx1QkFBdUIsTUFBTTtBQUFBLElBQ2pELGVBQWU7QUFBQSxJQUNmO0FBQUEsSUFDQSxpQkFBaUIsR0FBRyxTQUFTO0FBQUEsSUFDN0IsYUFBYSxLQUFLLGlCQUFpQixhQUFhO0FBQUEsSUFDaEQ7QUFBQSxJQUNBO0FBQUEsSUFDQSxtQkFBbUIsS0FBSyxpQkFBaUIsSUFBSTtBQUFBLElBQzdDO0FBQUEsSUFDQSxhQUFhLFlBQVk7QUFBQSxJQUN6QixnQkFBZ0IsWUFBWTtBQUFBLElBQzVCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxhQUFhLEdBQUcsVUFBVSxJQUFJLElBQUk7QUFBQSxJQUNsQztBQUFBLElBQ0EsaUJBQWlCLEtBQUssZUFBZSxlQUFlO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|
package/dist/lib/esm/index.d.mts
CHANGED
|
@@ -10,6 +10,7 @@ export * as 'cli-utils' from './cli-utils.mjs';
|
|
|
10
10
|
export * as 'code-generator' from './code-generator.mjs';
|
|
11
11
|
export * as 'commitlint-config' from './commitlint-config.mjs';
|
|
12
12
|
export * as 'commitlint-forbidden-patterns' from './commitlint-forbidden-patterns.mjs';
|
|
13
|
+
export * as 'commitlint-lint-md-header' from './commitlint-lint-md-header.mjs';
|
|
13
14
|
export * as 'commitlint-spellcheck-header' from './commitlint-spellcheck-header.mjs';
|
|
14
15
|
export * as 'docs-site' from './docs-site/index.mjs';
|
|
15
16
|
export * as 'env-toggle' from './env-toggle.mjs';
|
package/dist/lib/esm/index.mjs
CHANGED
|
@@ -10,6 +10,7 @@ import * as cli_utils from "./cli-utils.mjs";
|
|
|
10
10
|
import * as code_generator from "./code-generator.mjs";
|
|
11
11
|
import * as commitlint_config from "./commitlint-config.mjs";
|
|
12
12
|
import * as commitlint_forbidden_patterns from "./commitlint-forbidden-patterns.mjs";
|
|
13
|
+
import * as commitlint_lint_md_header from "./commitlint-lint-md-header.mjs";
|
|
13
14
|
import * as commitlint_spellcheck_header from "./commitlint-spellcheck-header.mjs";
|
|
14
15
|
import * as docs_site from "./docs-site/index.mjs";
|
|
15
16
|
import * as env_toggle from "./env-toggle.mjs";
|
|
@@ -46,6 +47,7 @@ export {
|
|
|
46
47
|
code_generator as "code-generator",
|
|
47
48
|
commitlint_config as "commitlint-config",
|
|
48
49
|
commitlint_forbidden_patterns as "commitlint-forbidden-patterns",
|
|
50
|
+
commitlint_lint_md_header as "commitlint-lint-md-header",
|
|
49
51
|
commitlint_spellcheck_header as "commitlint-spellcheck-header",
|
|
50
52
|
docs_site as "docs-site",
|
|
51
53
|
env_toggle as "env-toggle",
|
|
@@ -75,4 +77,4 @@ export {
|
|
|
75
77
|
validate_dependencies as "validate-dependencies",
|
|
76
78
|
version
|
|
77
79
|
};
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2J1aWxkJyBmcm9tICcuL2J1aWxkLnRzJztcbmV4cG9ydCAqIGFzICdidW5kbGVycycgZnJvbSAnLi9idW5kbGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnY2hlY2stcHJvamVjdC10eXBlcycgZnJvbSAnLi9jaGVjay1wcm9qZWN0LXR5cGVzLnRzJztcbmV4cG9ydCAqIGFzICdjbGktdXRpbHMnIGZyb20gJy4vY2xpLXV0aWxzLnRzJztcbmV4cG9ydCAqIGFzICdjb2RlLWdlbmVyYXRvcicgZnJvbSAnLi9jb2RlLWdlbmVyYXRvci50cyc7XG5leHBvcnQgKiBhcyAnY29tbWl0bGludC1jb25maWcnIGZyb20gJy4vY29tbWl0bGludC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zJyBmcm9tICcuL2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zLnRzJztcbmV4cG9ydCAqIGFzICdjb21taXRsaW50LWxpbnQtbWQtaGVhZGVyJyBmcm9tICcuL2NvbW1pdGxpbnQtbGludC1tZC1oZWFkZXIudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXInIGZyb20gJy4vY29tbWl0bGludC1zcGVsbGNoZWNrLWhlYWRlci50cyc7XG5leHBvcnQgKiBhcyAnZG9jcy1zaXRlJyBmcm9tICcuL2RvY3Mtc2l0ZS9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnZW52LXRvZ2dsZScgZnJvbSAnLi9lbnYtdG9nZ2xlLnRzJztcbmV4cG9ydCAqIGFzICdleGVjJyBmcm9tICcuL2V4ZWMudHMnO1xuZXhwb3J0ICogYXMgJ2ZvcmJpZGRlbi1wYXR0ZXJucycgZnJvbSAnLi9mb3JiaWRkZW4tcGF0dGVybnMudHMnO1xuZXhwb3J0ICogYXMgJ2Zvcm1hdHRlcnMnIGZyb20gJy4vZm9ybWF0dGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnZnMnIGZyb20gJy4vZnMudHMnO1xuZXhwb3J0ICogYXMgJ2dhdGUnIGZyb20gJy4vZ2F0ZS50cyc7XG5leHBvcnQgKiBhcyAnZ2l0JyBmcm9tICcuL2dpdC50cyc7XG5leHBvcnQgKiBhcyAnanNvbicgZnJvbSAnLi9qc29uLnRzJztcbmV4cG9ydCAqIGFzICdsaWJyYXJ5LWJ1aWxkJyBmcm9tICcuL2xpYnJhcnktYnVpbGQudHMnO1xuZXhwb3J0ICogYXMgJ2xpbnRlcnMnIGZyb20gJy4vbGludGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnbmFuby1zdGFnZWQtY29uZmlnJyBmcm9tICcuL25hbm8tc3RhZ2VkLWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnbnBtLXB1Ymxpc2gnIGZyb20gJy4vbnBtLXB1Ymxpc2gudHMnO1xuZXhwb3J0ICogYXMgJ25wbS1ydW4nIGZyb20gJy4vbnBtLXJ1bi50cyc7XG5leHBvcnQgKiBhcyAnbnBtJyBmcm9tICcuL25wbS50cyc7XG5leHBvcnQgKiBhcyAncGFja2FnZS1sb2NrLWludGVncml0eScgZnJvbSAnLi9wYWNrYWdlLWxvY2staW50ZWdyaXR5LnRzJztcbmV4cG9ydCAqIGFzICdwYWNrYWdlLW1hbmFnZXInIGZyb20gJy4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmV4cG9ydCAqIGFzICdyZWxlYXNlZC1pc3N1ZXMnIGZyb20gJy4vcmVsZWFzZWQtaXNzdWVzLnRzJztcbmV4cG9ydCAqIGFzICdyZXBvLXBhdGhzJyBmcm9tICcuL3JlcG8tcGF0aHMudHMnO1xuZXhwb3J0ICogYXMgJ3Jvb3QnIGZyb20gJy4vcm9vdC50cyc7XG5leHBvcnQgKiBhcyAnc2hhcmVkLWNvbmZpZy1maWxlcycgZnJvbSAnLi9zaGFyZWQtY29uZmlnLWZpbGVzLnRzJztcbmV4cG9ydCAqIGFzICd0ZXN0LXJ1bm5lcnMnIGZyb20gJy4vdGVzdC1ydW5uZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICd1cHN0cmVhbS1zeW5jLWNsaScgZnJvbSAnLi91cHN0cmVhbS1zeW5jLWNsaS50cyc7XG5leHBvcnQgKiBhcyAndXBzdHJlYW0tc3luYycgZnJvbSAnLi91cHN0cmVhbS1zeW5jLnRzJztcbmV4cG9ydCAqIGFzICd2YWxpZGF0ZS1kZWNsYXJhdGlvbnMnIGZyb20gJy4vdmFsaWRhdGUtZGVjbGFyYXRpb25zLnRzJztcbmV4cG9ydCAqIGFzICd2YWxpZGF0ZS1kZXBlbmRlbmNpZXMnIGZyb20gJy4vdmFsaWRhdGUtZGVwZW5kZW5jaWVzLnRzJztcbmV4cG9ydCAqIGFzICd2ZXJzaW9uJyBmcm9tICcuL3ZlcnNpb24udHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFFQSxZQUFZLFdBQWE7QUFDekIsWUFBWSxjQUFnQjtBQUM1QixZQUFZQSx5QkFBMkI7QUFDdkMsWUFBWUMsZUFBaUI7QUFDN0IsWUFBWUMsb0JBQXNCO0FBQ2xDLFlBQVlDLHVCQUF5QjtBQUNyQyxZQUFZQyxtQ0FBcUM7QUFDakQsWUFBWUMsK0JBQWlDO0FBQzdDLFlBQVlDLGtDQUFvQztBQUNoRCxZQUFZQyxlQUFpQjtBQUM3QixZQUFZQyxnQkFBa0I7QUFDOUIsWUFBWSxVQUFZO0FBQ3hCLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZLGdCQUFrQjtBQUM5QixZQUFZLFFBQVU7QUFDdEIsWUFBWSxVQUFZO0FBQ3hCLFlBQVksU0FBVztBQUN2QixZQUFZLFVBQVk7QUFDeEIsWUFBWUMsbUJBQXFCO0FBQ2pDLFlBQVksYUFBZTtBQUMzQixZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWUMsaUJBQW1CO0FBQy9CLFlBQVlDLGFBQWU7QUFDM0IsWUFBWSxTQUFXO0FBQ3ZCLFlBQVlDLDRCQUE4QjtBQUMxQyxZQUFZQyxxQkFBdUI7QUFDbkMsWUFBWUMscUJBQXVCO0FBQ25DLFlBQVlDLGdCQUFrQjtBQUM5QixZQUFZLFVBQVk7QUFDeEIsWUFBWUMseUJBQTJCO0FBQ3ZDLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZQyx1QkFBeUI7QUFDckMsWUFBWUMsbUJBQXFCO0FBQ2pDLFlBQVlDLDJCQUE2QjtBQUN6QyxZQUFZQywyQkFBNkI7QUFDekMsWUFBWSxhQUFlOyIsCiAgIm5hbWVzIjogWyJjaGVjay1wcm9qZWN0LXR5cGVzIiwgImNsaS11dGlscyIsICJjb2RlLWdlbmVyYXRvciIsICJjb21taXRsaW50LWNvbmZpZyIsICJjb21taXRsaW50LWZvcmJpZGRlbi1wYXR0ZXJucyIsICJjb21taXRsaW50LWxpbnQtbWQtaGVhZGVyIiwgImNvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXIiLCAiZG9jcy1zaXRlIiwgImVudi10b2dnbGUiLCAiZm9yYmlkZGVuLXBhdHRlcm5zIiwgImxpYnJhcnktYnVpbGQiLCAibmFuby1zdGFnZWQtY29uZmlnIiwgIm5wbS1wdWJsaXNoIiwgIm5wbS1ydW4iLCAicGFja2FnZS1sb2NrLWludGVncml0eSIsICJwYWNrYWdlLW1hbmFnZXIiLCAicmVsZWFzZWQtaXNzdWVzIiwgInJlcG8tcGF0aHMiLCAic2hhcmVkLWNvbmZpZy1maWxlcyIsICJ0ZXN0LXJ1bm5lcnMiLCAidXBzdHJlYW0tc3luYy1jbGkiLCAidXBzdHJlYW0tc3luYyIsICJ2YWxpZGF0ZS1kZWNsYXJhdGlvbnMiLCAidmFsaWRhdGUtZGVwZW5kZW5jaWVzIl0KfQo=
|
|
@@ -2,5 +2,7 @@
|
|
|
2
2
|
export * as 'auto' from './auto.mjs';
|
|
3
3
|
export * as 'jest-config' from './jest-config.mjs';
|
|
4
4
|
export * as 'jest' from './jest.mjs';
|
|
5
|
+
export * as 'stryker-config' from './stryker-config.mjs';
|
|
6
|
+
export * as 'stryker' from './stryker.mjs';
|
|
5
7
|
export * as 'vitest-config' from './vitest-config.mjs';
|
|
6
8
|
export * as 'vitest' from './vitest.mjs';
|
|
@@ -6,13 +6,17 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
6
6
|
import * as auto from "./auto.mjs";
|
|
7
7
|
import * as jest_config from "./jest-config.mjs";
|
|
8
8
|
import * as jest from "./jest.mjs";
|
|
9
|
+
import * as stryker_config from "./stryker-config.mjs";
|
|
10
|
+
import * as stryker from "./stryker.mjs";
|
|
9
11
|
import * as vitest_config from "./vitest-config.mjs";
|
|
10
12
|
import * as vitest from "./vitest.mjs";
|
|
11
13
|
export {
|
|
12
14
|
auto,
|
|
13
15
|
jest,
|
|
14
16
|
jest_config as "jest-config",
|
|
17
|
+
stryker,
|
|
18
|
+
stryker_config as "stryker-config",
|
|
15
19
|
vitest,
|
|
16
20
|
vitest_config as "vitest-config"
|
|
17
21
|
};
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdhdXRvJyBmcm9tICcuL2F1dG8udHMnO1xuZXhwb3J0ICogYXMgJ2plc3QtY29uZmlnJyBmcm9tICcuL2plc3QtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdqZXN0JyBmcm9tICcuL2plc3QudHMnO1xuZXhwb3J0ICogYXMgJ3N0cnlrZXItY29uZmlnJyBmcm9tICcuL3N0cnlrZXItY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdzdHJ5a2VyJyBmcm9tICcuL3N0cnlrZXIudHMnO1xuZXhwb3J0ICogYXMgJ3ZpdGVzdC1jb25maWcnIGZyb20gJy4vdml0ZXN0LWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAndml0ZXN0JyBmcm9tICcuL3ZpdGVzdC50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUVBLFlBQVksVUFBWTtBQUN4QixZQUFZQSxpQkFBbUI7QUFDL0IsWUFBWSxVQUFZO0FBQ3hCLFlBQVlDLG9CQUFzQjtBQUNsQyxZQUFZLGFBQWU7QUFDM0IsWUFBWUMsbUJBQXFCO0FBQ2pDLFlBQVksWUFBYzsiLAogICJuYW1lcyI6IFsiamVzdC1jb25maWciLCAic3RyeWtlci1jb25maWciLCAidml0ZXN0LWNvbmZpZyJdCn0K
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* The shared Stryker configuration for an on-demand mutation run ({@link defineStrykerConfig}), and the test list the
|
|
6
|
+
* mutation run's vitest configuration reads ({@link getStrykerTestInclude}).
|
|
7
|
+
*
|
|
8
|
+
* The module imports nothing but `node:process` and holds no TypeScript syntax Node cannot strip, so a repository
|
|
9
|
+
* that cannot install this package (this one) loads it straight from its `stryker.config.mjs`.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* The environment variable `testMutation` hands the scoped run's test files in, comma-separated.
|
|
13
|
+
*/
|
|
14
|
+
export declare const STRYKER_TEST_FILES_ENV_VARIABLE = "STRYKER_TEST_FILES";
|
|
15
|
+
/**
|
|
16
|
+
* The vitest configuration file the mutation run reads, beside the project's own `vitest.config.*`.
|
|
17
|
+
*/
|
|
18
|
+
export declare const STRYKER_VITEST_CONFIG_FILE_NAME = "vitest.stryker.config.ts";
|
|
19
|
+
/**
|
|
20
|
+
* The files mutated by a run that names none: every source file but the tests, the declarations, the generated
|
|
21
|
+
* barrels and the test helpers.
|
|
22
|
+
*/
|
|
23
|
+
export declare const DEFAULT_STRYKER_MUTATE: readonly string[];
|
|
24
|
+
/**
|
|
25
|
+
* The folders Stryker never reads. A documentation site's `docs/` alone held 18,000 files in the pilot: copying it
|
|
26
|
+
* took 5 minutes, and then the main process died of a 4 GB heap OOM.
|
|
27
|
+
*/
|
|
28
|
+
export declare const DEFAULT_STRYKER_IGNORE_PATTERNS: readonly string[];
|
|
29
|
+
/**
|
|
30
|
+
* A Stryker configuration object, as a `stryker.config.mjs` exports it.
|
|
31
|
+
*
|
|
32
|
+
* Kept loose rather than typed by `@stryker-mutator/api`, so a consumer that never runs Stryker never needs its
|
|
33
|
+
* types.
|
|
34
|
+
*/
|
|
35
|
+
export type StrykerConfig = Record<string, unknown>;
|
|
36
|
+
/**
|
|
37
|
+
* Defines the Stryker configuration of an on-demand mutation run.
|
|
38
|
+
*
|
|
39
|
+
* The defaults encode what the pilot measured:
|
|
40
|
+
*
|
|
41
|
+
* - `inPlace: true`, because Stryker's sandbox copy breaks module resolution through a symlinked `node_modules`. In
|
|
42
|
+
* place, Stryker mutates the tree itself and puts back the WHOLE tree as it was when the run started, so the run
|
|
43
|
+
* needs a committed tree and nobody may edit it while the run is going.
|
|
44
|
+
* - `vitest.related: false`, because `vitest.related` found no tests at all; the scoped run names its test files
|
|
45
|
+
* through {@link getStrykerTestInclude} instead.
|
|
46
|
+
* - `ignorePatterns`, see {@link DEFAULT_STRYKER_IGNORE_PATTERNS}.
|
|
47
|
+
*
|
|
48
|
+
* @param overrides - Keys that replace the defaults. The merge is shallow: an override of `vitest` replaces the
|
|
49
|
+
* whole `vitest` object.
|
|
50
|
+
* @returns The configuration to export from `stryker.config.mjs`.
|
|
51
|
+
*/
|
|
52
|
+
export declare function defineStrykerConfig(overrides?: StrykerConfig): StrykerConfig;
|
|
53
|
+
/**
|
|
54
|
+
* Picks the test files of the mutation run's vitest configuration: the ones `testMutation` named for a scoped run, or
|
|
55
|
+
* the given defaults for a full one.
|
|
56
|
+
*
|
|
57
|
+
* @param defaultInclude - The `include` globs of a full run.
|
|
58
|
+
* @returns The `include` list.
|
|
59
|
+
*/
|
|
60
|
+
export declare function getStrykerTestInclude(defaultInclude: readonly string[]): string[];
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import process from "node:process";
|
|
7
|
+
const DEFAULT_CONCURRENCY = 4;
|
|
8
|
+
const DEFAULT_TIMEOUT_IN_MILLISECONDS = 1e4;
|
|
9
|
+
const STRYKER_TEST_FILES_ENV_VARIABLE = "STRYKER_TEST_FILES";
|
|
10
|
+
const STRYKER_VITEST_CONFIG_FILE_NAME = "vitest.stryker.config.ts";
|
|
11
|
+
const DEFAULT_STRYKER_MUTATE = [
|
|
12
|
+
"src/**/*.ts",
|
|
13
|
+
"!src/**/*.test.ts",
|
|
14
|
+
"!src/**/*.d.ts",
|
|
15
|
+
"!src/**/index.ts",
|
|
16
|
+
"!src/__merged.ts",
|
|
17
|
+
"!src/test-helpers/**",
|
|
18
|
+
"!src/**/@types/**"
|
|
19
|
+
];
|
|
20
|
+
const DEFAULT_STRYKER_IGNORE_PATTERNS = [
|
|
21
|
+
"/.astro",
|
|
22
|
+
"/.claude",
|
|
23
|
+
"/.codex",
|
|
24
|
+
"/coverage",
|
|
25
|
+
"/dist",
|
|
26
|
+
"/docs",
|
|
27
|
+
"/reports"
|
|
28
|
+
];
|
|
29
|
+
function defineStrykerConfig(overrides = {}) {
|
|
30
|
+
return {
|
|
31
|
+
checkers: [],
|
|
32
|
+
concurrency: DEFAULT_CONCURRENCY,
|
|
33
|
+
coverageAnalysis: "perTest",
|
|
34
|
+
htmlReporter: { fileName: "reports/mutation/mutation.html" },
|
|
35
|
+
ignorePatterns: [...DEFAULT_STRYKER_IGNORE_PATTERNS],
|
|
36
|
+
inPlace: true,
|
|
37
|
+
jsonReporter: { fileName: "reports/mutation/mutation.json" },
|
|
38
|
+
mutate: [...DEFAULT_STRYKER_MUTATE],
|
|
39
|
+
reporters: ["clear-text", "progress-append-only", "json", "html"],
|
|
40
|
+
// eslint-disable-next-line unicorn/name-replacements -- `tempDirName` is a Stryker option.
|
|
41
|
+
tempDirName: ".stryker-tmp",
|
|
42
|
+
testRunner: "vitest",
|
|
43
|
+
timeoutMS: DEFAULT_TIMEOUT_IN_MILLISECONDS,
|
|
44
|
+
vitest: {
|
|
45
|
+
configFile: STRYKER_VITEST_CONFIG_FILE_NAME,
|
|
46
|
+
related: false
|
|
47
|
+
},
|
|
48
|
+
...overrides
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function getStrykerTestInclude(defaultInclude) {
|
|
52
|
+
const testFiles = process.env[STRYKER_TEST_FILES_ENV_VARIABLE];
|
|
53
|
+
return testFiles ? testFiles.split(",") : [...defaultInclude];
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
DEFAULT_STRYKER_IGNORE_PATTERNS,
|
|
57
|
+
DEFAULT_STRYKER_MUTATE,
|
|
58
|
+
STRYKER_TEST_FILES_ENV_VARIABLE,
|
|
59
|
+
STRYKER_VITEST_CONFIG_FILE_NAME,
|
|
60
|
+
defineStrykerConfig,
|
|
61
|
+
getStrykerTestInclude
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9zdHJ5a2VyLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBzaGFyZWQgU3RyeWtlciBjb25maWd1cmF0aW9uIGZvciBhbiBvbi1kZW1hbmQgbXV0YXRpb24gcnVuICh7QGxpbmsgZGVmaW5lU3RyeWtlckNvbmZpZ30pLCBhbmQgdGhlIHRlc3QgbGlzdCB0aGVcbiAqIG11dGF0aW9uIHJ1bidzIHZpdGVzdCBjb25maWd1cmF0aW9uIHJlYWRzICh7QGxpbmsgZ2V0U3RyeWtlclRlc3RJbmNsdWRlfSkuXG4gKlxuICogVGhlIG1vZHVsZSBpbXBvcnRzIG5vdGhpbmcgYnV0IGBub2RlOnByb2Nlc3NgIGFuZCBob2xkcyBubyBUeXBlU2NyaXB0IHN5bnRheCBOb2RlIGNhbm5vdCBzdHJpcCwgc28gYSByZXBvc2l0b3J5XG4gKiB0aGF0IGNhbm5vdCBpbnN0YWxsIHRoaXMgcGFja2FnZSAodGhpcyBvbmUpIGxvYWRzIGl0IHN0cmFpZ2h0IGZyb20gaXRzIGBzdHJ5a2VyLmNvbmZpZy5tanNgLlxuICovXG5cbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmNvbnN0IERFRkFVTFRfQ09OQ1VSUkVOQ1kgPSA0O1xuY29uc3QgREVGQVVMVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEwXzAwMDtcblxuLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYHRlc3RNdXRhdGlvbmAgaGFuZHMgdGhlIHNjb3BlZCBydW4ncyB0ZXN0IGZpbGVzIGluLCBjb21tYS1zZXBhcmF0ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBTVFJZS0VSX1RFU1RfRklMRVNfRU5WX1ZBUklBQkxFID0gJ1NUUllLRVJfVEVTVF9GSUxFUyc7XG5cbi8qKlxuICogVGhlIHZpdGVzdCBjb25maWd1cmF0aW9uIGZpbGUgdGhlIG11dGF0aW9uIHJ1biByZWFkcywgYmVzaWRlIHRoZSBwcm9qZWN0J3Mgb3duIGB2aXRlc3QuY29uZmlnLipgLlxuICovXG5leHBvcnQgY29uc3QgU1RSWUtFUl9WSVRFU1RfQ09ORklHX0ZJTEVfTkFNRSA9ICd2aXRlc3Quc3RyeWtlci5jb25maWcudHMnO1xuXG4vKipcbiAqIFRoZSBmaWxlcyBtdXRhdGVkIGJ5IGEgcnVuIHRoYXQgbmFtZXMgbm9uZTogZXZlcnkgc291cmNlIGZpbGUgYnV0IHRoZSB0ZXN0cywgdGhlIGRlY2xhcmF0aW9ucywgdGhlIGdlbmVyYXRlZFxuICogYmFycmVscyBhbmQgdGhlIHRlc3QgaGVscGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RSWUtFUl9NVVRBVEU6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnc3JjLyoqLyoudHMnLFxuICAnIXNyYy8qKi8qLnRlc3QudHMnLFxuICAnIXNyYy8qKi8qLmQudHMnLFxuICAnIXNyYy8qKi9pbmRleC50cycsXG4gICchc3JjL19fbWVyZ2VkLnRzJyxcbiAgJyFzcmMvdGVzdC1oZWxwZXJzLyoqJyxcbiAgJyFzcmMvKiovQHR5cGVzLyoqJ1xuXTtcblxuLyoqXG4gKiBUaGUgZm9sZGVycyBTdHJ5a2VyIG5ldmVyIHJlYWRzLiBBIGRvY3VtZW50YXRpb24gc2l0ZSdzIGBkb2NzL2AgYWxvbmUgaGVsZCAxOCwwMDAgZmlsZXMgaW4gdGhlIHBpbG90OiBjb3B5aW5nIGl0XG4gKiB0b29rIDUgbWludXRlcywgYW5kIHRoZW4gdGhlIG1haW4gcHJvY2VzcyBkaWVkIG9mIGEgNCBHQiBoZWFwIE9PTS5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RSWUtFUl9JR05PUkVfUEFUVEVSTlM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnLy5hc3RybycsXG4gICcvLmNsYXVkZScsXG4gICcvLmNvZGV4JyxcbiAgJy9jb3ZlcmFnZScsXG4gICcvZGlzdCcsXG4gICcvZG9jcycsXG4gICcvcmVwb3J0cydcbl07XG5cbi8qKlxuICogQSBTdHJ5a2VyIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBhcyBhIGBzdHJ5a2VyLmNvbmZpZy5tanNgIGV4cG9ydHMgaXQuXG4gKlxuICogS2VwdCBsb29zZSByYXRoZXIgdGhhbiB0eXBlZCBieSBgQHN0cnlrZXItbXV0YXRvci9hcGlgLCBzbyBhIGNvbnN1bWVyIHRoYXQgbmV2ZXIgcnVucyBTdHJ5a2VyIG5ldmVyIG5lZWRzIGl0c1xuICogdHlwZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFN0cnlrZXJDb25maWcgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBTdHJ5a2VyIGNvbmZpZ3VyYXRpb24gb2YgYW4gb24tZGVtYW5kIG11dGF0aW9uIHJ1bi5cbiAqXG4gKiBUaGUgZGVmYXVsdHMgZW5jb2RlIHdoYXQgdGhlIHBpbG90IG1lYXN1cmVkOlxuICpcbiAqIC0gYGluUGxhY2U6IHRydWVgLCBiZWNhdXNlIFN0cnlrZXIncyBzYW5kYm94IGNvcHkgYnJlYWtzIG1vZHVsZSByZXNvbHV0aW9uIHRocm91Z2ggYSBzeW1saW5rZWQgYG5vZGVfbW9kdWxlc2AuIEluXG4gKiAgIHBsYWNlLCBTdHJ5a2VyIG11dGF0ZXMgdGhlIHRyZWUgaXRzZWxmIGFuZCBwdXRzIGJhY2sgdGhlIFdIT0xFIHRyZWUgYXMgaXQgd2FzIHdoZW4gdGhlIHJ1biBzdGFydGVkLCBzbyB0aGUgcnVuXG4gKiAgIG5lZWRzIGEgY29tbWl0dGVkIHRyZWUgYW5kIG5vYm9keSBtYXkgZWRpdCBpdCB3aGlsZSB0aGUgcnVuIGlzIGdvaW5nLlxuICogLSBgdml0ZXN0LnJlbGF0ZWQ6IGZhbHNlYCwgYmVjYXVzZSBgdml0ZXN0LnJlbGF0ZWRgIGZvdW5kIG5vIHRlc3RzIGF0IGFsbDsgdGhlIHNjb3BlZCBydW4gbmFtZXMgaXRzIHRlc3QgZmlsZXNcbiAqICAgdGhyb3VnaCB7QGxpbmsgZ2V0U3RyeWtlclRlc3RJbmNsdWRlfSBpbnN0ZWFkLlxuICogLSBgaWdub3JlUGF0dGVybnNgLCBzZWUge0BsaW5rIERFRkFVTFRfU1RSWUtFUl9JR05PUkVfUEFUVEVSTlN9LlxuICpcbiAqIEBwYXJhbSBvdmVycmlkZXMgLSBLZXlzIHRoYXQgcmVwbGFjZSB0aGUgZGVmYXVsdHMuIFRoZSBtZXJnZSBpcyBzaGFsbG93OiBhbiBvdmVycmlkZSBvZiBgdml0ZXN0YCByZXBsYWNlcyB0aGVcbiAqICAgd2hvbGUgYHZpdGVzdGAgb2JqZWN0LlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24gdG8gZXhwb3J0IGZyb20gYHN0cnlrZXIuY29uZmlnLm1qc2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTdHJ5a2VyQ29uZmlnKG92ZXJyaWRlczogU3RyeWtlckNvbmZpZyA9IHt9KTogU3RyeWtlckNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgY2hlY2tlcnM6IFtdLFxuICAgIGNvbmN1cnJlbmN5OiBERUZBVUxUX0NPTkNVUlJFTkNZLFxuICAgIGNvdmVyYWdlQW5hbHlzaXM6ICdwZXJUZXN0JyxcbiAgICBodG1sUmVwb3J0ZXI6IHsgZmlsZU5hbWU6ICdyZXBvcnRzL211dGF0aW9uL211dGF0aW9uLmh0bWwnIH0sXG4gICAgaWdub3JlUGF0dGVybnM6IFsuLi5ERUZBVUxUX1NUUllLRVJfSUdOT1JFX1BBVFRFUk5TXSxcbiAgICBpblBsYWNlOiB0cnVlLFxuICAgIGpzb25SZXBvcnRlcjogeyBmaWxlTmFtZTogJ3JlcG9ydHMvbXV0YXRpb24vbXV0YXRpb24uanNvbicgfSxcbiAgICBtdXRhdGU6IFsuLi5ERUZBVUxUX1NUUllLRVJfTVVUQVRFXSxcbiAgICByZXBvcnRlcnM6IFsnY2xlYXItdGV4dCcsICdwcm9ncmVzcy1hcHBlbmQtb25seScsICdqc29uJywgJ2h0bWwnXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgdGVtcERpck5hbWVgIGlzIGEgU3RyeWtlciBvcHRpb24uXG4gICAgdGVtcERpck5hbWU6ICcuc3RyeWtlci10bXAnLFxuICAgIHRlc3RSdW5uZXI6ICd2aXRlc3QnLFxuICAgIHRpbWVvdXRNUzogREVGQVVMVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICB2aXRlc3Q6IHtcbiAgICAgIGNvbmZpZ0ZpbGU6IFNUUllLRVJfVklURVNUX0NPTkZJR19GSUxFX05BTUUsXG4gICAgICByZWxhdGVkOiBmYWxzZVxuICAgIH0sXG4gICAgLi4ub3ZlcnJpZGVzXG4gIH07XG59XG5cbi8qKlxuICogUGlja3MgdGhlIHRlc3QgZmlsZXMgb2YgdGhlIG11dGF0aW9uIHJ1bidzIHZpdGVzdCBjb25maWd1cmF0aW9uOiB0aGUgb25lcyBgdGVzdE11dGF0aW9uYCBuYW1lZCBmb3IgYSBzY29wZWQgcnVuLCBvclxuICogdGhlIGdpdmVuIGRlZmF1bHRzIGZvciBhIGZ1bGwgb25lLlxuICpcbiAqIEBwYXJhbSBkZWZhdWx0SW5jbHVkZSAtIFRoZSBgaW5jbHVkZWAgZ2xvYnMgb2YgYSBmdWxsIHJ1bi5cbiAqIEByZXR1cm5zIFRoZSBgaW5jbHVkZWAgbGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0cnlrZXJUZXN0SW5jbHVkZShkZWZhdWx0SW5jbHVkZTogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHRlc3RGaWxlcyA9IHByb2Nlc3MuZW52W1NUUllLRVJfVEVTVF9GSUxFU19FTlZfVkFSSUFCTEVdO1xuICByZXR1cm4gdGVzdEZpbGVzID8gdGVzdEZpbGVzLnNwbGl0KCcsJykgOiBbLi4uZGVmYXVsdEluY2x1ZGVdO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFVQSxPQUFPLGFBQWE7QUFFcEIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxrQ0FBa0M7QUFLakMsTUFBTSxrQ0FBa0M7QUFLeEMsTUFBTSxrQ0FBa0M7QUFNeEMsTUFBTSx5QkFBNEM7QUFBQSxFQUN2RDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGO0FBTU8sTUFBTSxrQ0FBcUQ7QUFBQSxFQUNoRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGO0FBMEJPLFNBQVMsb0JBQW9CLFlBQTJCLENBQUMsR0FBa0I7QUFDaEYsU0FBTztBQUFBLElBQ0wsVUFBVSxDQUFDO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixrQkFBa0I7QUFBQSxJQUNsQixjQUFjLEVBQUUsVUFBVSxpQ0FBaUM7QUFBQSxJQUMzRCxnQkFBZ0IsQ0FBQyxHQUFHLCtCQUErQjtBQUFBLElBQ25ELFNBQVM7QUFBQSxJQUNULGNBQWMsRUFBRSxVQUFVLGlDQUFpQztBQUFBLElBQzNELFFBQVEsQ0FBQyxHQUFHLHNCQUFzQjtBQUFBLElBQ2xDLFdBQVcsQ0FBQyxjQUFjLHdCQUF3QixRQUFRLE1BQU07QUFBQTtBQUFBLElBRWhFLGFBQWE7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxNQUNOLFlBQVk7QUFBQSxNQUNaLFNBQVM7QUFBQSxJQUNYO0FBQUEsSUFDQSxHQUFHO0FBQUEsRUFDTDtBQUNGO0FBU08sU0FBUyxzQkFBc0IsZ0JBQTZDO0FBQ2pGLFFBQU0sWUFBWSxRQUFRLElBQUksK0JBQStCO0FBQzdELFNBQU8sWUFBWSxVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxjQUFjO0FBQzlEOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Runs Stryker mutation testing on demand: over named modules and their sibling tests, or incrementally over the
|
|
6
|
+
* whole project. Never part of a gate: a full run takes about an hour.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Options for {@link testMutation}.
|
|
10
|
+
*/
|
|
11
|
+
export interface TestMutationOptions {
|
|
12
|
+
/**
|
|
13
|
+
* The modules to mutate, as paths from the project root. Each needs a sibling `*.test.ts`, and only those tests run.
|
|
14
|
+
* With none, every file the configuration's `mutate` globs name is mutated, incrementally.
|
|
15
|
+
*
|
|
16
|
+
* @default `[]`
|
|
17
|
+
*/
|
|
18
|
+
readonly modulePaths?: readonly string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Runs Stryker mutation testing.
|
|
22
|
+
*
|
|
23
|
+
* The run mutates the tree in place and, when it ends, puts back the whole tree as it was when it started, so it
|
|
24
|
+
* refuses to start on a tree with uncommitted changes, and nothing may be edited while it runs.
|
|
25
|
+
*
|
|
26
|
+
* @param options - The {@link TestMutationOptions}.
|
|
27
|
+
* @returns A {@link Promise} that resolves when Stryker exits.
|
|
28
|
+
* @throws If the tree has uncommitted changes, a path is not a `.ts` module, or a module has no sibling test.
|
|
29
|
+
*/
|
|
30
|
+
export declare function testMutation(options?: TestMutationOptions): Promise<void>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return '/';
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: 'android'
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const existingProcess = globalThis.process;
|
|
17
|
+
|
|
18
|
+
if (!existingProcess) {
|
|
19
|
+
globalThis.process = browserProcess;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (existingProcess.versions?.node) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const existingProcessRecord = existingProcess;
|
|
28
|
+
|
|
29
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
30
|
+
existingProcessRecord[key] ??= value;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
existingProcessRecord['browser'] = true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
ensureBrowserProcess();
|
|
37
|
+
})();
|
|
38
|
+
|
|
39
|
+
import { toPosixPath } from "@mnaoumov/typescript-lib/path";
|
|
40
|
+
import { existsSync } from "node:fs";
|
|
41
|
+
import { resolveToolCommand } from "../package-manager.mjs";
|
|
42
|
+
import {
|
|
43
|
+
execFromRoot,
|
|
44
|
+
resolvePathFromRootSafe
|
|
45
|
+
} from "../root.mjs";
|
|
46
|
+
import { STRYKER_TEST_FILES_ENV_VARIABLE } from "./stryker-config.mjs";
|
|
47
|
+
const TS_EXTENSION_REG_EXP = /\.ts$/;
|
|
48
|
+
async function testMutation(options = {}) {
|
|
49
|
+
const modulePaths = (options.modulePaths ?? []).map((modulePath) => toPosixPath(modulePath));
|
|
50
|
+
const testFiles = getSiblingTestFiles(modulePaths);
|
|
51
|
+
const status = await execFromRoot("git status --porcelain --untracked-files=all", { isQuiet: true });
|
|
52
|
+
if (status) {
|
|
53
|
+
throw new Error(
|
|
54
|
+
`Mutation testing needs a committed tree: Stryker mutates it in place and puts the whole tree back as it was when the run started, so an uncommitted change would be lost.
|
|
55
|
+
${status}`
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
const runArguments = modulePaths.length > 0 ? ["--mutate", modulePaths.join(",")] : ["--incremental"];
|
|
59
|
+
const env = modulePaths.length > 0 ? { [STRYKER_TEST_FILES_ENV_VARIABLE]: testFiles.join(",") } : {};
|
|
60
|
+
await execFromRoot([...resolveToolCommand({ tool: "stryker" }), "run", ...runArguments], { env, isInteractive: true });
|
|
61
|
+
}
|
|
62
|
+
function getSiblingTestFiles(modulePaths) {
|
|
63
|
+
const problems = [];
|
|
64
|
+
const testFiles = modulePaths.map((modulePath) => {
|
|
65
|
+
if (!modulePath.endsWith(".ts") || modulePath.endsWith(".d.ts") || modulePath.endsWith(".test.ts")) {
|
|
66
|
+
problems.push(`${modulePath}: not a .ts module`);
|
|
67
|
+
return modulePath;
|
|
68
|
+
}
|
|
69
|
+
const testFile = modulePath.replace(TS_EXTENSION_REG_EXP, ".test.ts");
|
|
70
|
+
if (!existsSync(resolvePathFromRootSafe({ path: testFile }))) {
|
|
71
|
+
problems.push(`${modulePath}: no sibling test ${testFile}`);
|
|
72
|
+
}
|
|
73
|
+
return testFile;
|
|
74
|
+
});
|
|
75
|
+
if (problems.length > 0) {
|
|
76
|
+
throw new Error(`Cannot scope the mutation run:
|
|
77
|
+
${problems.join("\n")}`);
|
|
78
|
+
}
|
|
79
|
+
return testFiles;
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
testMutation
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90ZXN0LXJ1bm5lcnMvc3RyeWtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogUnVucyBTdHJ5a2VyIG11dGF0aW9uIHRlc3Rpbmcgb24gZGVtYW5kOiBvdmVyIG5hbWVkIG1vZHVsZXMgYW5kIHRoZWlyIHNpYmxpbmcgdGVzdHMsIG9yIGluY3JlbWVudGFsbHkgb3ZlciB0aGVcbiAqIHdob2xlIHByb2plY3QuIE5ldmVyIHBhcnQgb2YgYSBnYXRlOiBhIGZ1bGwgcnVuIHRha2VzIGFib3V0IGFuIGhvdXIuXG4gKi9cblxuaW1wb3J0IHsgdG9Qb3NpeFBhdGggfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCB7IHJlc29sdmVUb29sQ29tbWFuZCB9IGZyb20gJy4uL3BhY2thZ2UtbWFuYWdlci50cyc7XG5pbXBvcnQge1xuICBleGVjRnJvbVJvb3QsXG4gIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlXG59IGZyb20gJy4uL3Jvb3QudHMnO1xuaW1wb3J0IHsgU1RSWUtFUl9URVNUX0ZJTEVTX0VOVl9WQVJJQUJMRSB9IGZyb20gJy4vc3RyeWtlci1jb25maWcudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB0ZXN0TXV0YXRpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RNdXRhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG1vZHVsZXMgdG8gbXV0YXRlLCBhcyBwYXRocyBmcm9tIHRoZSBwcm9qZWN0IHJvb3QuIEVhY2ggbmVlZHMgYSBzaWJsaW5nIGAqLnRlc3QudHNgLCBhbmQgb25seSB0aG9zZSB0ZXN0cyBydW4uXG4gICAqIFdpdGggbm9uZSwgZXZlcnkgZmlsZSB0aGUgY29uZmlndXJhdGlvbidzIGBtdXRhdGVgIGdsb2JzIG5hbWUgaXMgbXV0YXRlZCwgaW5jcmVtZW50YWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFtdYFxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlUGF0aHM/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuY29uc3QgVFNfRVhURU5TSU9OX1JFR19FWFAgPSAvXFwudHMkLztcblxuLyoqXG4gKiBSdW5zIFN0cnlrZXIgbXV0YXRpb24gdGVzdGluZy5cbiAqXG4gKiBUaGUgcnVuIG11dGF0ZXMgdGhlIHRyZWUgaW4gcGxhY2UgYW5kLCB3aGVuIGl0IGVuZHMsIHB1dHMgYmFjayB0aGUgd2hvbGUgdHJlZSBhcyBpdCB3YXMgd2hlbiBpdCBzdGFydGVkLCBzbyBpdFxuICogcmVmdXNlcyB0byBzdGFydCBvbiBhIHRyZWUgd2l0aCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBhbmQgbm90aGluZyBtYXkgYmUgZWRpdGVkIHdoaWxlIGl0IHJ1bnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFRlc3RNdXRhdGlvbk9wdGlvbnN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIFN0cnlrZXIgZXhpdHMuXG4gKiBAdGhyb3dzIElmIHRoZSB0cmVlIGhhcyB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBhIHBhdGggaXMgbm90IGEgYC50c2AgbW9kdWxlLCBvciBhIG1vZHVsZSBoYXMgbm8gc2libGluZyB0ZXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdE11dGF0aW9uKG9wdGlvbnM6IFRlc3RNdXRhdGlvbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBtb2R1bGVQYXRocyA9IChvcHRpb25zLm1vZHVsZVBhdGhzID8/IFtdKS5tYXAoKG1vZHVsZVBhdGgpID0+IHRvUG9zaXhQYXRoKG1vZHVsZVBhdGgpKTtcbiAgY29uc3QgdGVzdEZpbGVzID0gZ2V0U2libGluZ1Rlc3RGaWxlcyhtb2R1bGVQYXRocyk7XG5cbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgZXhlY0Zyb21Sb290KCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0tdW50cmFja2VkLWZpbGVzPWFsbCcsIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgaWYgKHN0YXR1cykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNdXRhdGlvbiB0ZXN0aW5nIG5lZWRzIGEgY29tbWl0dGVkIHRyZWU6IFN0cnlrZXIgbXV0YXRlcyBpdCBpbiBwbGFjZSBhbmQgcHV0cyB0aGUgd2hvbGUgdHJlZSBiYWNrIGFzIGl0IHdhcyB3aGVuIHRoZSBydW4gc3RhcnRlZCwgc28gYW4gdW5jb21taXR0ZWQgY2hhbmdlIHdvdWxkIGJlIGxvc3QuXFxuJHtzdGF0dXN9YFxuICAgICk7XG4gIH1cblxuICBjb25zdCBydW5Bcmd1bWVudHMgPSBtb2R1bGVQYXRocy5sZW5ndGggPiAwID8gWyctLW11dGF0ZScsIG1vZHVsZVBhdGhzLmpvaW4oJywnKV0gOiBbJy0taW5jcmVtZW50YWwnXTtcbiAgY29uc3QgZW52ID0gbW9kdWxlUGF0aHMubGVuZ3RoID4gMCA/IHsgW1NUUllLRVJfVEVTVF9GSUxFU19FTlZfVkFSSUFCTEVdOiB0ZXN0RmlsZXMuam9pbignLCcpIH0gOiB7fTtcblxuICBhd2FpdCBleGVjRnJvbVJvb3QoWy4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6ICdzdHJ5a2VyJyB9KSwgJ3J1bicsIC4uLnJ1bkFyZ3VtZW50c10sIHsgZW52LCBpc0ludGVyYWN0aXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIERlcml2ZXMgZWFjaCBtb2R1bGUncyBzaWJsaW5nIHRlc3QgZmlsZS5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlUGF0aHMgLSBUaGUgbW9kdWxlcywgYXMgUE9TSVggcGF0aHMgZnJvbSB0aGUgcHJvamVjdCByb290LlxuICogQHJldHVybnMgVGhlIHRlc3QgZmlsZXMsIGluIHRoZSBzYW1lIG9yZGVyLlxuICogQHRocm93cyBJZiBhIHBhdGggaXMgbm90IGEgYC50c2AgbW9kdWxlLCBvciBpdHMgc2libGluZyB0ZXN0IGRvZXMgbm90IGV4aXN0LlxuICovXG5mdW5jdGlvbiBnZXRTaWJsaW5nVGVzdEZpbGVzKG1vZHVsZVBhdGhzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcHJvYmxlbXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHRlc3RGaWxlcyA9IG1vZHVsZVBhdGhzLm1hcCgobW9kdWxlUGF0aCkgPT4ge1xuICAgIGlmICghbW9kdWxlUGF0aC5lbmRzV2l0aCgnLnRzJykgfHwgbW9kdWxlUGF0aC5lbmRzV2l0aCgnLmQudHMnKSB8fCBtb2R1bGVQYXRoLmVuZHNXaXRoKCcudGVzdC50cycpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKGAke21vZHVsZVBhdGh9OiBub3QgYSAudHMgbW9kdWxlYCk7XG4gICAgICByZXR1cm4gbW9kdWxlUGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXN0RmlsZSA9IG1vZHVsZVBhdGgucmVwbGFjZShUU19FWFRFTlNJT05fUkVHX0VYUCwgJy50ZXN0LnRzJyk7XG4gICAgaWYgKCFleGlzdHNTeW5jKHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogdGVzdEZpbGUgfSkpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKGAke21vZHVsZVBhdGh9OiBubyBzaWJsaW5nIHRlc3QgJHt0ZXN0RmlsZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVzdEZpbGU7XG4gIH0pO1xuXG4gIGlmIChwcm9ibGVtcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2NvcGUgdGhlIG11dGF0aW9uIHJ1bjpcXG4ke3Byb2JsZW1zLmpvaW4oJ1xcbicpfWApO1xuICB9XG5cbiAgcmV0dXJuIHRlc3RGaWxlcztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLGtCQUFrQjtBQUUzQixTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsdUNBQXVDO0FBZWhELE1BQU0sdUJBQXVCO0FBWTdCLGVBQXNCLGFBQWEsVUFBK0IsQ0FBQyxHQUFrQjtBQUNuRixRQUFNLGVBQWUsUUFBUSxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxZQUFZLFVBQVUsQ0FBQztBQUMzRixRQUFNLFlBQVksb0JBQW9CLFdBQVc7QUFFakQsUUFBTSxTQUFTLE1BQU0sYUFBYSxnREFBZ0QsRUFBRSxTQUFTLEtBQUssQ0FBQztBQUNuRyxNQUFJLFFBQVE7QUFDVixVQUFNLElBQUk7QUFBQSxNQUNSO0FBQUEsRUFBOEssTUFBTTtBQUFBLElBQ3RMO0FBQUEsRUFDRjtBQUVBLFFBQU0sZUFBZSxZQUFZLFNBQVMsSUFBSSxDQUFDLFlBQVksWUFBWSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZTtBQUNwRyxRQUFNLE1BQU0sWUFBWSxTQUFTLElBQUksRUFBRSxDQUFDLCtCQUErQixHQUFHLFVBQVUsS0FBSyxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBRW5HLFFBQU0sYUFBYSxDQUFDLEdBQUcsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUMsR0FBRyxPQUFPLEdBQUcsWUFBWSxHQUFHLEVBQUUsS0FBSyxlQUFlLEtBQUssQ0FBQztBQUN2SDtBQVNBLFNBQVMsb0JBQW9CLGFBQTBDO0FBQ3JFLFFBQU0sV0FBcUIsQ0FBQztBQUM1QixRQUFNLFlBQVksWUFBWSxJQUFJLENBQUMsZUFBZTtBQUNoRCxRQUFJLENBQUMsV0FBVyxTQUFTLEtBQUssS0FBSyxXQUFXLFNBQVMsT0FBTyxLQUFLLFdBQVcsU0FBUyxVQUFVLEdBQUc7QUFDbEcsZUFBUyxLQUFLLEdBQUcsVUFBVSxvQkFBb0I7QUFDL0MsYUFBTztBQUFBLElBQ1Q7QUFFQSxVQUFNLFdBQVcsV0FBVyxRQUFRLHNCQUFzQixVQUFVO0FBQ3BFLFFBQUksQ0FBQyxXQUFXLHdCQUF3QixFQUFFLE1BQU0sU0FBUyxDQUFDLENBQUMsR0FBRztBQUM1RCxlQUFTLEtBQUssR0FBRyxVQUFVLHFCQUFxQixRQUFRLEVBQUU7QUFBQSxJQUM1RDtBQUVBLFdBQU87QUFBQSxFQUNULENBQUM7QUFFRCxNQUFJLFNBQVMsU0FBUyxHQUFHO0FBQ3ZCLFVBQU0sSUFBSSxNQUFNO0FBQUEsRUFBbUMsU0FBUyxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQUEsRUFDMUU7QUFFQSxTQUFPO0FBQ1Q7IiwibmFtZXMiOltdfQ==
|