@mnaoumov/typescript-dev-toolkit 3.6.3 → 3.7.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/docs-site/api-doc-text-utils.cjs +6 -2
- package/dist/lib/cjs/docs-site/docs-snippets.cjs +310 -0
- package/dist/lib/cjs/docs-site/docs-snippets.d.cts +136 -0
- package/dist/lib/cjs/docs-site/index.cjs +7 -1
- package/dist/lib/cjs/docs-site/index.d.cts +2 -0
- package/dist/lib/cjs/docs-site/outdated-references.cjs +118 -0
- package/dist/lib/cjs/docs-site/outdated-references.d.cts +72 -0
- package/dist/lib/esm/docs-site/api-doc-text-utils.mjs +6 -2
- package/dist/lib/esm/docs-site/docs-snippets.d.mts +136 -0
- package/dist/lib/esm/docs-site/docs-snippets.mjs +298 -0
- package/dist/lib/esm/docs-site/index.d.mts +2 -0
- package/dist/lib/esm/docs-site/index.mjs +5 -1
- package/dist/lib/esm/docs-site/outdated-references.d.mts +72 -0
- package/dist/lib/esm/docs-site/outdated-references.mjs +96 -0
- package/docs-site/docs-snippets/package.json +6 -0
- package/docs-site/outdated-references/package.json +6 -0
- package/package.json +2 -1
|
@@ -241,7 +241,11 @@ function slugifyOverloadKey(overloadKey) {
|
|
|
241
241
|
}
|
|
242
242
|
const OG_DESCRIPTION_MAX_LENGTH = 160;
|
|
243
243
|
function stripMarkdown(text) {
|
|
244
|
-
const plain = replaceRegExpMatches(
|
|
244
|
+
const plain = replaceRegExpMatches(
|
|
245
|
+
text,
|
|
246
|
+
/\{@link\s+(?<target>[^|}]+?)(?:\s*\|\s*(?<display>[^}]+?))?\s*\}/g,
|
|
247
|
+
(match) => (0, import_reg_exp.getOptionalNamedGroup)(match, "display") ?? (0, import_reg_exp.getMandatoryNamedGroup)(match, "target")
|
|
248
|
+
).replaceAll(/\[(?<text>[^\]]+)\]\([^)]+\)/g, "$<text>").replaceAll(/[`*_~]/g, "").replaceAll(/\s+/g, " ").trim();
|
|
245
249
|
if (plain.length <= OG_DESCRIPTION_MAX_LENGTH) {
|
|
246
250
|
return plain;
|
|
247
251
|
}
|
|
@@ -278,4 +282,4 @@ function escapeMdxProseChars(chunk) {
|
|
|
278
282
|
stripMarkdown,
|
|
279
283
|
truncateSignature
|
|
280
284
|
});
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10ZXh0LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUZXh0L21hcmtkb3duL2VzY2FwaW5nIHV0aWxpdGllcyBhbmQgaWRlbnRpZmllciBoZWxwZXJzIGZvciB0aGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLlxuICovXG5cbmltcG9ydCB7XG4gIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAsXG4gIGdldE9wdGlvbmFsTmFtZWRHcm91cFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWFya2Rvd25TZWdtZW50LFxuICBNZW1iZXJJbmZvLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbiB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7IHRvUm91dGVTZWdtZW50IH0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuaW50ZXJmYWNlIE9wZW5GZW5jZSB7XG4gIHJlYWRvbmx5IGNsb3NlUmU6IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbGFuZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gb3ZlcmxvYWQga2V5IGZvciBtZXRob2RzIHdpdGggZGlzdGluZ3Vpc2hpbmcgZmlyc3QgcGFyYW0gKGUuZy4gb24oJ2NoYW5nZWQnLC4uLikpXG4gKlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyBUaGUgb3ZlcmxvYWQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJsb2FkS2V5KG1ldGhvZDogTWVtYmVySW5mbyk6IHN0cmluZyB7XG4gIGlmIChFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0UGFyYW1ldGVyID0gbWV0aG9kLnBhcmFtZXRlcnNbMF07XG4gICAgaWYgKGZpcnN0UGFyYW1ldGVyPy50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgZmlyc3RQYXJhbWV0ZXI/LnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gZmlyc3RQYXJhbWV0ZXIudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKTtcbiAgICAgIHJldHVybiBgJHttZXRob2QubmFtZX0oJHtub3JtYWxpemVkVHlwZX0pYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGhvZC5uYW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvbGRlciBhIGZpbGUgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBhYm91dCB0byBiZSB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEVzY2FwZSB0ZXh0IGZvciB1c2UgaW5zaWRlIGEgSlMgc3RyaW5nIHdpdGhpbiBhIEpTWCBleHByZXNzaW9uOiB7Li4ue2tleTogXCIuLi5cIn19XG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSnNTdHJpbmcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2VBbGwoJ1wiJywgU3RyaW5nLnJhd2BcXFwiYCkucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgdXNlIGluc2lkZSBhIEpTWCBhdHRyaWJ1dGU6IGF0dHI9XCIuLi5cIiAoTURYIHVzZXMgSFRNTC1zdHlsZSBwYXJzaW5nKVxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUpzeEF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JykucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JykucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgYSBtYXJrZG93biB0YWJsZSBjZWxsLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ3wnLCBTdHJpbmcucmF3YFxcfGApLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIHNvIE1EWCBkb2VzIG5vdCByZWFkIHRoZW0gYXMgSlNYLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlQnJhY2tldHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnPCcsIFN0cmluZy5yYXdgXFw8YCkucmVwbGFjZUFsbCgnPicsIFN0cmluZy5yYXdgXFw+YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGN1cmx5IGJyYWNlcyBpbiBNRFggbWFya2Rvd24gY29udGVudCB0byBwcmV2ZW50IEpTWCBleHByZXNzaW9uIHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVNZHhCcmFjZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRleHQgZm9yIGEgZG91YmxlLXF1b3RlZCBZQU1MIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVlhbWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbn1cblxuY29uc3QgU0lHTkFUVVJFX01BWF9MRU5HVEggPSAxNjA7XG5jb25zdCBJTVBPUlRfUVVBTElGSUVSX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pW15cIiddK1xcazxRdW90ZT5cXClcXC4vZztcbmNvbnN0IElNUE9SVF9UWVBFX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pKD88UGF0aD5bXlwiJ10rKVxcazxRdW90ZT5cXClcXC4oPzxOYW1lPltBLVphLXpfJF1bXFx3JF0qKS9nO1xuXG4vKipcbiAqIEVzY2FwZSBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgKGA8YCwgYHtgLCBgfWApIGluIHByb3NlIHRleHQsIHdoaWxlIGxlYXZpbmcgaW5saW5lIGNvZGUgc3BhbnNcbiAqIChgYCBgY29kZWAgYGApIGFuZCBtYXJrZG93biBsaW5rcyAoYFt0ZXh0XSh1cmwpYCkgdW50b3VjaGVkLiBNRFggcGFyc2VzIGJhcmUgYDxgL2B7YCBpbiBwcm9zZSBhc1xuICogSlNYL2V4cHJlc3Npb25zLCBzbyB0aGV5IG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQgdG8gcmVuZGVyIGFzIGxpdGVyYWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBwcm9zZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBwcm9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keFByb3NlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHByb3RlY3RlZFBhdHRlcm4gPSAvYFteYF0qYHxcXFtbXlxcXV0qXFxdXFwoW14pXSpcXCkvZztcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHByb3RlY3RlZFBhdHRlcm4pKSB7XG4gICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICByZXN1bHQgKz0gZXNjYXBlTWR4UHJvc2VDaGFycyh0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICByZXN1bHQgKz0gbWF0Y2hbMF07XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0ICs9IGVzY2FwZU1keFByb3NlQ2hhcnModGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBzaW5nbGUgbmV3bGluZXMgd2l0aGluIHBhcmFncmFwaHMgdG8gc3BhY2VzLCBwcmVzZXJ2ZSBkb3VibGUgbmV3bGluZXMgYXMgcGFyYWdyYXBoIGJyZWFrcy5cbiAqIEZlbmNlZCBjb2RlIGJsb2NrcyAoYmFja3RpY2sgb3IgdGlsZGUgZmVuY2VzKSBhcmUgcHJlc2VydmVkIHZlcmJhdGltIOKAlCB0aGVpciBpbnRlcm5hbCBuZXdsaW5lcyBhcmUgTk9UIGZvbGRlZCxcbiAqIHNvIGVtYmVkZGVkIGNvZGUgc3Vydml2ZXMgdG8gYmUgcmUtZW1pdHRlZCBhcyBhIHJlYWwgY29kZSBmZW5jZSBkb3duc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudE1hcmtkb3duKHRleHQpO1xuICByZXR1cm4gc2VnbWVudHNcbiAgICAubWFwKChzZWcpID0+IHtcbiAgICAgIHJldHVybiBzZWcudHlwZSA9PT0gJ2NvZGUnXG4gICAgICAgID8gYFxcYFxcYFxcYCR7c2VnLmxhbmd9XFxuJHtzZWcudGV4dH1cXG5cXGBcXGBcXGBgXG4gICAgICAgIDogc2VnLnRleHRcbiAgICAgICAgICAuc3BsaXQoL1xcbnsyLH0vKVxuICAgICAgICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJlcGxhY2VBbGwoJ1xcbicsICcgJykpXG4gICAgICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICAgIH0pXG4gICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCdcXG5cXG4nKTtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSdzIG5hbWUgd2l0aCBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRob3V0IHRoZWlyIGNvbnN0cmFpbnRzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIG5hbWUgd2l0aCBpdHMgYmFyZSB0eXBlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgY29uc3QgYmFyZVBhcmFtcyA9IGluZm8udHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpKTtcbiAgcmV0dXJuIGAke25hbWV9PCR7YmFyZVBhcmFtcy5qb2luKCcsICcpfT5gO1xufVxuXG4vKipcbiAqIEVtaXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogVGhlIHN1YnBhdGggZXF1YWxzIHRoZSB0eXBlJ3MgbmFtZXNwYWNlIChpdHMgc291cmNlIHBhdGggcmVsYXRpdmUgdG8gYHNyY2ApLCBzbyBgc3JjL3N0cmluZy50c2Agb2ZcbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGlzIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nYC5cbiAqXG4gKiBJbnRlcmZhY2VzIC8gdHlwZSBhbGlhc2VzIC8gZW51bXMgYXJlIGltcG9ydGVkIHdpdGggYGltcG9ydCB0eXBlYDsgY2xhc3NlcyAvIGZ1bmN0aW9ucyAvXG4gKiB2YXJpYWJsZXMgd2l0aCBhIHZhbHVlIGBpbXBvcnRgLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBpbXBvcnQgc3RhdGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1wb3J0U3RhdGVtZW50KGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgaXNUeXBlT25seSA9IFsnZW51bScsICdpbnRlcmZhY2UnLCAndHlwZSddLmluY2x1ZGVzKGluZm8ua2luZCk7XG4gIGNvbnN0IGltcG9ydEtleXdvcmQgPSBpc1R5cGVPbmx5ID8gJ2ltcG9ydCB0eXBlJyA6ICdpbXBvcnQnO1xuICByZXR1cm4gYCR7aW1wb3J0S2V5d29yZH0geyAke2luZm8ubmFtZX0gfSBmcm9tICcke2dldEFwaURvY1NldHRpbmdzKCkucGFja2FnZU5hbWV9LyR7aW5mby5uYW1lc3BhY2V9JztgO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXIgYSBuYW1lc3BhY2UncyBwYWdlcyBhcmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIG1lbWJlciBuYW1lIGZvciB1c2UgaW4gYSBjYXNlLVBSRVNFUlZFRCBVUkwvcm91dGUgc2VnbWVudCAoZS5nLiBgc2hvd05vdGljZWApLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG1lbWJlcidzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgY2FzZS1wcmVzZXJ2ZWQgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlclJvdXRlU2VnbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1Z2lmeU1lbWJlck5hbWUobmFtZSk7XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBtZW1iZXIgbmFtZSBmb3IgdXNlIGFzIGFuIG9uLWRpc2sgRklMRU5BTUUgKGxvd2VyY2FzZWQsIGNvbGxpc2lvbi1zYWZlKS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBtZW1iZXIncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGxvd2VyY2FzZWQgZmlsZSBuYW1lIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b1JvdXRlU2VnbWVudChzbHVnaWZ5TWVtYmVyTmFtZShuYW1lKSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGEgY2FzZS1QUkVTRVJWRUQgVVJML3JvdXRlIHNlZ21lbnQ6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBvdmVybG9hZEtleSAtIFRoZSBvdmVybG9hZCBrZXksIGUuZy4gYG9uKCdjaGFuZ2VkJylgLlxuICogQHJldHVybnMgVGhlIGNhc2UtcHJlc2VydmVkIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybG9hZFJvdXRlU2VnbWVudChvdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNsdWdpZnlPdmVybG9hZEtleShvdmVybG9hZEtleSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGFuIG9uLWRpc2sgRklMRU5BTUU6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkIChsb3dlcmNhc2VkKS5cbiAqXG4gKiBAcGFyYW0gb3ZlcmxvYWRLZXkgLSBUaGUgb3ZlcmxvYWQga2V5LCBlLmcuIGBvbignY2hhbmdlZCcpYC5cbiAqIEByZXR1cm5zIFRoZSBsb3dlcmNhc2VkIGZpbGUgbmFtZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcmxvYWRTbHVnKG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9Sb3V0ZVNlZ21lbnQoc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5KSk7XG59XG5cbi8qKlxuICogUmVwbGFjZSBldmVyeSBtYXRjaCBvZiBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gd2l0aCB3aGF0IGEgcmVwbGFjZXIgYnVpbGRzIGZyb20gdGhlIG1hdGNoLiBUaGUgdHlwZWRcbiAqIGNvdW50ZXJwYXJ0IG9mIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgIHdpdGggYSBjYWxsYmFjaywgd2hvc2UgYXJndW1lbnRzIGFyZSB0eXBlZCBvbmx5IHBvc2l0aW9uYWxseS5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb247IGl0IG11c3QgY2FycnkgdGhlIGBnYCBmbGFnLlxuICogQHBhcmFtIHJlcGxhY2VyIC0gQnVpbGRzIHRoZSByZXBsYWNlbWVudCBvZiBvbmUgbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIGV2ZXJ5IG1hdGNoIHJlcGxhY2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dDogc3RyaW5nLCByZWdFeHA6IFJlZ0V4cCwgcmVwbGFjZXI6IChtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSkgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHJlZ0V4cCkpIHtcbiAgICByZXN1bHQgKz0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KSArIHJlcGxhY2VyKG1hdGNoKTtcbiAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgdGV4dC5zbGljZShsYXN0SW5kZXgpO1xufVxuXG4vKipcbiAqIFNwbGl0IG1hcmtkb3duIHRleHQgaW50byBhbiBvcmRlcmVkIGxpc3Qgb2YgcHJvc2UgYW5kIGZlbmNlZC1jb2RlIHNlZ21lbnRzLlxuICogQSBmZW5jZWQtY29kZSBzZWdtZW50IGlzIGRlbGltaXRlZCBieSBhIGxpbmUgb2YgMysgYmFja3RpY2tzIG9yIHRpbGRlczsgaXRzIGNvbnRlbnQgaXMgY2FwdHVyZWRcbiAqIHJhdyAobmV2ZXIgZXNjYXBlZCkgc28gaXQgY2FuIGJlIHJlLWVtaXR0ZWQgYXMgYSBsaXRlcmFsIE1EWCBjb2RlIGZlbmNlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgc2VnbWVudHMsIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VnbWVudE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IE1hcmtkb3duU2VnbWVudFtdIHtcbiAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgc2VnbWVudHM6IE1hcmtkb3duU2VnbWVudFtdID0gW107XG4gIGxldCBwcm9zZUJ1ZmZlcjogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGNvZGVMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IG9wZW5GZW5jZTogbnVsbCB8IE9wZW5GZW5jZSA9IG51bGw7XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmIChvcGVuRmVuY2UpIHtcbiAgICAgIGlmIChvcGVuRmVuY2UuY2xvc2VSZS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goeyBsYW5nOiBvcGVuRmVuY2UubGFuZywgdGV4dDogY29kZUxpbmVzLmpvaW4oJ1xcbicpLCB0eXBlOiAnY29kZScgfSk7XG4gICAgICAgIG9wZW5GZW5jZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5NYXRjaCA9IC9eXFxzKig/PGZlbmNlPig/PGZlbmNlQ2hhcj5bYH5dKVxcazxmZW5jZUNoYXI+ezIsfSkoPzxsYW5nPi4qKSQvLmV4ZWMobGluZSk7XG4gICAgaWYgKG9wZW5NYXRjaCkge1xuICAgICAgY29uc3QgZmVuY2VDaGFycyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2UnKTtcbiAgICAgIGNvbnN0IGZlbmNlQ2hhciA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2VDaGFyJyk7XG4gICAgICBmbHVzaFByb3NlKCk7XG4gICAgICBjb2RlTGluZXMgPSBbXTtcbiAgICAgIG9wZW5GZW5jZSA9IHtcbiAgICAgICAgY2xvc2VSZTogbmV3IFJlZ0V4cChgXlxcXFxzKlxcXFwke2ZlbmNlQ2hhcn17JHtTdHJpbmcoZmVuY2VDaGFycy5sZW5ndGgpfSx9XFxcXHMqJGApLFxuICAgICAgICBsYW5nOiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG9wZW5NYXRjaCwgJ2xhbmcnKS50cmltKClcbiAgICAgIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcHJvc2VCdWZmZXIucHVzaChsaW5lKTtcbiAgfVxuICAvLyBBbiB1bmNsb3NlZCBmZW5jZSBydW5zIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuXG4gIGlmIChvcGVuRmVuY2UpIHtcbiAgICBzZWdtZW50cy5wdXNoKHsgbGFuZzogb3BlbkZlbmNlLmxhbmcsIHRleHQ6IGNvZGVMaW5lcy5qb2luKCdcXG4nKSwgdHlwZTogJ2NvZGUnIH0pO1xuICB9XG4gIGZsdXNoUHJvc2UoKTtcbiAgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGZ1bmN0aW9uIGZsdXNoUHJvc2UoKTogdm9pZCB7XG4gICAgaWYgKHByb3NlQnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlZ21lbnRzLnB1c2goeyB0ZXh0OiBwcm9zZUJ1ZmZlci5qb2luKCdcXG4nKSwgdHlwZTogJ3Byb3NlJyB9KTtcbiAgICBwcm9zZUJ1ZmZlciA9IFtdO1xuICB9XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIGBpbXBvcnQoXCLigKZcIilgIHF1YWxpZmllcnMgdHMtbW9ycGggcHJpbnRzIGJlZm9yZSBhIHR5cGUgdGhhdCBpcyBub3QgaW4gc2NvcGUsIHJlY29yZGluZyBlYWNoIG9uZSdzXG4gKiBkZWNsYXJhdGlvbiBmaWxlIGZpcnN0LCBzaW5jZSBpdCBpcyB0aGUgb25lIHBsYWNlIGEgcHJpbnRlZCB0eXBlIG5hbWVzIHdoZXJlIGl0IHdhcyBkZWNsYXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgcHJpbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIHR5cGUgd2l0aG91dCBpdHMgaW1wb3J0IHF1YWxpZmllcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGlmeVR5cGUodHlwZVRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdHlwZVRleHQubWF0Y2hBbGwoSU1QT1JUX1RZUEVfUkVHX0VYUCkpIHtcbiAgICByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnTmFtZScpLCBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnUGF0aCcpKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlVGV4dC5yZXBsYWNlQWxsKElNUE9SVF9RVUFMSUZJRVJfUkVHX0VYUCwgJycpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIGNvZGUgc2lnbmF0dXJlIGZvciB0aGUgYHNpZ25hdHVyZTpgIGZyb250bWF0dGVyIC8gT0cgY2FyZDogY29sbGFwc2Ugd2hpdGVzcGFjZSB0b1xuICogc2luZ2xlIHNwYWNlcyBhbmQgdHJ1bmNhdGUgdG8gYSBjYXJkLWZyaWVuZGx5IGxlbmd0aCB3aXRoIGFuIGVsbGlwc2lzLlxuICpcbiAqIEBwYXJhbSBzaWduYXR1cmUgLSBUaGUgc2lnbmF0dXJlLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjb2xsYXBzZWQgPSBzaWduYXR1cmUucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgcmV0dXJuIGNvbGxhcHNlZC5sZW5ndGggPD0gU0lHTkFUVVJFX01BWF9MRU5HVEggPyBjb2xsYXBzZWQgOiBgJHtjb2xsYXBzZWQuc2xpY2UoMCwgU0lHTkFUVVJFX01BWF9MRU5HVEggLSAxKS50cmltRW5kKCl94oCmYDtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU1lbWJlck5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY2xlYW5lZCA9IG5hbWVcbiAgICAucmVwbGFjZUFsbCgvXltcIiddfFtcIiddJC9nLCAnJylcbiAgICAucmVwbGFjZUFsbCgvW15hLXpBLVowLTldL2csICctJylcbiAgICAucmVwbGFjZUFsbCgvLSsvZywgJy0nKVxuICAgIC5yZXBsYWNlQWxsKC9eLXwtJC9nLCAnJyk7XG4gIC8vIEEgbWVtYmVyIGxpdGVyYWxseSBuYW1lZCBgaW5kZXhgIHdvdWxkIHdyaXRlIGBpbmRleC5tZHhgLCBjb2xsaWRpbmcgd2l0aCB0aGUgdHlwZS1vdmVydmlld1xuICAvLyBgaW5kZXgubWR4YCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKG9uZSBzaWxlbnRseSBvdmVyd3JpdGVzIHRoZSBvdGhlciwgNDA0LWluZyB0aGUgbG9zZXIpLlxuICByZXR1cm4gY2xlYW5lZCA9PT0gJ2luZGV4JyA/ICdpbmRleC1tZW1iZXInIDogKGNsZWFuZWQgfHwgJ3VubmFtZWQnKTtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzbHVnID0gb3ZlcmxvYWRLZXlcbiAgICAucmVwbGFjZUFsbCgvW1wiJygpXS9nLCAnICcpXG4gICAgLnJlcGxhY2VBbGwoL1teYS16QS1aMC05XFxzXS9nLCAnJylcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2VBbGwoL1xccysvZywgJy0nKTtcbiAgLy8gQSBtZXRob2QgbmFtZWQgYGluZGV4YCB3b3VsZCB3cml0ZSBgaW5kZXgubWR4YCBvdmVyIHRoZSB0eXBlLW92ZXJ2aWV3IHBhZ2UsIGV4YWN0bHkgYXMgYSBwcm9wZXJ0eSB3b3VsZC5cbiAgcmV0dXJuIHNsdWcgPT09ICdpbmRleCcgPyAnaW5kZXgtbWVtYmVyJyA6IHNsdWc7XG59XG5cbmNvbnN0IE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggPSAxNjA7XG5cbi8qKlxuICogU3RyaXAgbWFya2Rvd24gZm9ybWF0dGluZyB0byBwbGFpbiB0ZXh0IGZvciB1c2UgaW4gbWV0YSBkZXNjcmlwdGlvbnNcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQsIGF0IG1vc3QgMTYwIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBsYWluID0gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dCwgL1xce0BsaW5rXFxzKyg/OltefH1dKz8pKD86XFxzKlxcfFxccyooPzxkaXNwbGF5PltefV0rPykpP1xcfS9nLCAobWF0Y2gpID0+IGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ2Rpc3BsYXknKSA/PyAnJylcbiAgICAucmVwbGFjZUFsbCgvXFxbKD88dGV4dD5bXlxcXV0rKVxcXVxcKFteKV0rXFwpL2csICckPHRleHQ+JylcbiAgICAucmVwbGFjZUFsbCgvW2AqX35dL2csICcnKVxuICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJylcbiAgICAudHJpbSgpO1xuXG4gIGlmIChwbGFpbi5sZW5ndGggPD0gT0dfREVTQ1JJUFRJT05fTUFYX0xFTkdUSCkge1xuICAgIHJldHVybiBwbGFpbjtcbiAgfVxuXG4gIC8vIEN1dCBiYWNrIHRvIGEgd29yZCBib3VuZGFyeTogYSByYXcgc2xpY2UgZW5kcyBkZXNjcmlwdGlvbnMgbWlkLXdvcmQgKGDigKYgdGhlIHN0cmluZyBtb2R1bGUgaXMgb2JgKS5cbiAgLy8gVGhhdCBmcmFnbWVudCBpcyB3aGF0IHJlYWRlcnMgc2VlIG9uIHRoZSBPRyBjYXJkIGFuZCBpbiBzZWFyY2ggcmVzdWx0cy5cbiAgY29uc3QgY2xpcHBlZCA9IHBsYWluLnNsaWNlKDAsIE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggLSAxKTtcbiAgY29uc3QgbGFzdFNwYWNlSW5kZXggPSBjbGlwcGVkLmxhc3RJbmRleE9mKCcgJyk7XG4gIGNvbnN0IHRydW5jYXRlZCA9IGxhc3RTcGFjZUluZGV4ID4gMCA/IGNsaXBwZWQuc2xpY2UoMCwgbGFzdFNwYWNlSW5kZXgpIDogY2xpcHBlZDtcbiAgcmV0dXJuIGAke3RydW5jYXRlZC5yZXBsYWNlKC9bLDs6Llxcc10rJC8sICcnKX3igKZgO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVNZHhQcm9zZUNoYXJzKGNodW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2h1bmsucmVwbGFjZUFsbCgvWzx7fV0vZywgKGNoYXIpID0+IGBcXFxcJHtjaGFyfWApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxxQkFHTztBQUNQLHNCQUFzQjtBQUN0Qix1QkFBd0I7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
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10ZXh0LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUZXh0L21hcmtkb3duL2VzY2FwaW5nIHV0aWxpdGllcyBhbmQgaWRlbnRpZmllciBoZWxwZXJzIGZvciB0aGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLlxuICovXG5cbmltcG9ydCB7XG4gIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAsXG4gIGdldE9wdGlvbmFsTmFtZWRHcm91cFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWFya2Rvd25TZWdtZW50LFxuICBNZW1iZXJJbmZvLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbiB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7IHRvUm91dGVTZWdtZW50IH0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuaW50ZXJmYWNlIE9wZW5GZW5jZSB7XG4gIHJlYWRvbmx5IGNsb3NlUmU6IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbGFuZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gb3ZlcmxvYWQga2V5IGZvciBtZXRob2RzIHdpdGggZGlzdGluZ3Vpc2hpbmcgZmlyc3QgcGFyYW0gKGUuZy4gb24oJ2NoYW5nZWQnLC4uLikpXG4gKlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyBUaGUgb3ZlcmxvYWQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJsb2FkS2V5KG1ldGhvZDogTWVtYmVySW5mbyk6IHN0cmluZyB7XG4gIGlmIChFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0UGFyYW1ldGVyID0gbWV0aG9kLnBhcmFtZXRlcnNbMF07XG4gICAgaWYgKGZpcnN0UGFyYW1ldGVyPy50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgZmlyc3RQYXJhbWV0ZXI/LnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gZmlyc3RQYXJhbWV0ZXIudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKTtcbiAgICAgIHJldHVybiBgJHttZXRob2QubmFtZX0oJHtub3JtYWxpemVkVHlwZX0pYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGhvZC5uYW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvbGRlciBhIGZpbGUgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBhYm91dCB0byBiZSB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEVzY2FwZSB0ZXh0IGZvciB1c2UgaW5zaWRlIGEgSlMgc3RyaW5nIHdpdGhpbiBhIEpTWCBleHByZXNzaW9uOiB7Li4ue2tleTogXCIuLi5cIn19XG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSnNTdHJpbmcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2VBbGwoJ1wiJywgU3RyaW5nLnJhd2BcXFwiYCkucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgdXNlIGluc2lkZSBhIEpTWCBhdHRyaWJ1dGU6IGF0dHI9XCIuLi5cIiAoTURYIHVzZXMgSFRNTC1zdHlsZSBwYXJzaW5nKVxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUpzeEF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JykucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JykucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgYSBtYXJrZG93biB0YWJsZSBjZWxsLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ3wnLCBTdHJpbmcucmF3YFxcfGApLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIHNvIE1EWCBkb2VzIG5vdCByZWFkIHRoZW0gYXMgSlNYLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlQnJhY2tldHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnPCcsIFN0cmluZy5yYXdgXFw8YCkucmVwbGFjZUFsbCgnPicsIFN0cmluZy5yYXdgXFw+YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGN1cmx5IGJyYWNlcyBpbiBNRFggbWFya2Rvd24gY29udGVudCB0byBwcmV2ZW50IEpTWCBleHByZXNzaW9uIHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVNZHhCcmFjZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRleHQgZm9yIGEgZG91YmxlLXF1b3RlZCBZQU1MIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVlhbWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbn1cblxuY29uc3QgU0lHTkFUVVJFX01BWF9MRU5HVEggPSAxNjA7XG5jb25zdCBJTVBPUlRfUVVBTElGSUVSX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pW15cIiddK1xcazxRdW90ZT5cXClcXC4vZztcbmNvbnN0IElNUE9SVF9UWVBFX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pKD88UGF0aD5bXlwiJ10rKVxcazxRdW90ZT5cXClcXC4oPzxOYW1lPltBLVphLXpfJF1bXFx3JF0qKS9nO1xuXG4vKipcbiAqIEVzY2FwZSBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgKGA8YCwgYHtgLCBgfWApIGluIHByb3NlIHRleHQsIHdoaWxlIGxlYXZpbmcgaW5saW5lIGNvZGUgc3BhbnNcbiAqIChgYCBgY29kZWAgYGApIGFuZCBtYXJrZG93biBsaW5rcyAoYFt0ZXh0XSh1cmwpYCkgdW50b3VjaGVkLiBNRFggcGFyc2VzIGJhcmUgYDxgL2B7YCBpbiBwcm9zZSBhc1xuICogSlNYL2V4cHJlc3Npb25zLCBzbyB0aGV5IG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQgdG8gcmVuZGVyIGFzIGxpdGVyYWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBwcm9zZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBwcm9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keFByb3NlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHByb3RlY3RlZFBhdHRlcm4gPSAvYFteYF0qYHxcXFtbXlxcXV0qXFxdXFwoW14pXSpcXCkvZztcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHByb3RlY3RlZFBhdHRlcm4pKSB7XG4gICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICByZXN1bHQgKz0gZXNjYXBlTWR4UHJvc2VDaGFycyh0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICByZXN1bHQgKz0gbWF0Y2hbMF07XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0ICs9IGVzY2FwZU1keFByb3NlQ2hhcnModGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBzaW5nbGUgbmV3bGluZXMgd2l0aGluIHBhcmFncmFwaHMgdG8gc3BhY2VzLCBwcmVzZXJ2ZSBkb3VibGUgbmV3bGluZXMgYXMgcGFyYWdyYXBoIGJyZWFrcy5cbiAqIEZlbmNlZCBjb2RlIGJsb2NrcyAoYmFja3RpY2sgb3IgdGlsZGUgZmVuY2VzKSBhcmUgcHJlc2VydmVkIHZlcmJhdGltIOKAlCB0aGVpciBpbnRlcm5hbCBuZXdsaW5lcyBhcmUgTk9UIGZvbGRlZCxcbiAqIHNvIGVtYmVkZGVkIGNvZGUgc3Vydml2ZXMgdG8gYmUgcmUtZW1pdHRlZCBhcyBhIHJlYWwgY29kZSBmZW5jZSBkb3duc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudE1hcmtkb3duKHRleHQpO1xuICByZXR1cm4gc2VnbWVudHNcbiAgICAubWFwKChzZWcpID0+IHtcbiAgICAgIHJldHVybiBzZWcudHlwZSA9PT0gJ2NvZGUnXG4gICAgICAgID8gYFxcYFxcYFxcYCR7c2VnLmxhbmd9XFxuJHtzZWcudGV4dH1cXG5cXGBcXGBcXGBgXG4gICAgICAgIDogc2VnLnRleHRcbiAgICAgICAgICAuc3BsaXQoL1xcbnsyLH0vKVxuICAgICAgICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJlcGxhY2VBbGwoJ1xcbicsICcgJykpXG4gICAgICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICAgIH0pXG4gICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCdcXG5cXG4nKTtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSdzIG5hbWUgd2l0aCBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRob3V0IHRoZWlyIGNvbnN0cmFpbnRzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIG5hbWUgd2l0aCBpdHMgYmFyZSB0eXBlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgY29uc3QgYmFyZVBhcmFtcyA9IGluZm8udHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpKTtcbiAgcmV0dXJuIGAke25hbWV9PCR7YmFyZVBhcmFtcy5qb2luKCcsICcpfT5gO1xufVxuXG4vKipcbiAqIEVtaXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogVGhlIHN1YnBhdGggZXF1YWxzIHRoZSB0eXBlJ3MgbmFtZXNwYWNlIChpdHMgc291cmNlIHBhdGggcmVsYXRpdmUgdG8gYHNyY2ApLCBzbyBgc3JjL3N0cmluZy50c2Agb2ZcbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGlzIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nYC5cbiAqXG4gKiBJbnRlcmZhY2VzIC8gdHlwZSBhbGlhc2VzIC8gZW51bXMgYXJlIGltcG9ydGVkIHdpdGggYGltcG9ydCB0eXBlYDsgY2xhc3NlcyAvIGZ1bmN0aW9ucyAvXG4gKiB2YXJpYWJsZXMgd2l0aCBhIHZhbHVlIGBpbXBvcnRgLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBpbXBvcnQgc3RhdGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1wb3J0U3RhdGVtZW50KGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgaXNUeXBlT25seSA9IFsnZW51bScsICdpbnRlcmZhY2UnLCAndHlwZSddLmluY2x1ZGVzKGluZm8ua2luZCk7XG4gIGNvbnN0IGltcG9ydEtleXdvcmQgPSBpc1R5cGVPbmx5ID8gJ2ltcG9ydCB0eXBlJyA6ICdpbXBvcnQnO1xuICByZXR1cm4gYCR7aW1wb3J0S2V5d29yZH0geyAke2luZm8ubmFtZX0gfSBmcm9tICcke2dldEFwaURvY1NldHRpbmdzKCkucGFja2FnZU5hbWV9LyR7aW5mby5uYW1lc3BhY2V9JztgO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXIgYSBuYW1lc3BhY2UncyBwYWdlcyBhcmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIG1lbWJlciBuYW1lIGZvciB1c2UgaW4gYSBjYXNlLVBSRVNFUlZFRCBVUkwvcm91dGUgc2VnbWVudCAoZS5nLiBgc2hvd05vdGljZWApLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG1lbWJlcidzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgY2FzZS1wcmVzZXJ2ZWQgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlclJvdXRlU2VnbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1Z2lmeU1lbWJlck5hbWUobmFtZSk7XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBtZW1iZXIgbmFtZSBmb3IgdXNlIGFzIGFuIG9uLWRpc2sgRklMRU5BTUUgKGxvd2VyY2FzZWQsIGNvbGxpc2lvbi1zYWZlKS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBtZW1iZXIncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGxvd2VyY2FzZWQgZmlsZSBuYW1lIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b1JvdXRlU2VnbWVudChzbHVnaWZ5TWVtYmVyTmFtZShuYW1lKSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGEgY2FzZS1QUkVTRVJWRUQgVVJML3JvdXRlIHNlZ21lbnQ6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBvdmVybG9hZEtleSAtIFRoZSBvdmVybG9hZCBrZXksIGUuZy4gYG9uKCdjaGFuZ2VkJylgLlxuICogQHJldHVybnMgVGhlIGNhc2UtcHJlc2VydmVkIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybG9hZFJvdXRlU2VnbWVudChvdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNsdWdpZnlPdmVybG9hZEtleShvdmVybG9hZEtleSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGFuIG9uLWRpc2sgRklMRU5BTUU6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkIChsb3dlcmNhc2VkKS5cbiAqXG4gKiBAcGFyYW0gb3ZlcmxvYWRLZXkgLSBUaGUgb3ZlcmxvYWQga2V5LCBlLmcuIGBvbignY2hhbmdlZCcpYC5cbiAqIEByZXR1cm5zIFRoZSBsb3dlcmNhc2VkIGZpbGUgbmFtZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcmxvYWRTbHVnKG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9Sb3V0ZVNlZ21lbnQoc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5KSk7XG59XG5cbi8qKlxuICogUmVwbGFjZSBldmVyeSBtYXRjaCBvZiBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gd2l0aCB3aGF0IGEgcmVwbGFjZXIgYnVpbGRzIGZyb20gdGhlIG1hdGNoLiBUaGUgdHlwZWRcbiAqIGNvdW50ZXJwYXJ0IG9mIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgIHdpdGggYSBjYWxsYmFjaywgd2hvc2UgYXJndW1lbnRzIGFyZSB0eXBlZCBvbmx5IHBvc2l0aW9uYWxseS5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb247IGl0IG11c3QgY2FycnkgdGhlIGBnYCBmbGFnLlxuICogQHBhcmFtIHJlcGxhY2VyIC0gQnVpbGRzIHRoZSByZXBsYWNlbWVudCBvZiBvbmUgbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIGV2ZXJ5IG1hdGNoIHJlcGxhY2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dDogc3RyaW5nLCByZWdFeHA6IFJlZ0V4cCwgcmVwbGFjZXI6IChtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSkgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHJlZ0V4cCkpIHtcbiAgICByZXN1bHQgKz0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KSArIHJlcGxhY2VyKG1hdGNoKTtcbiAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgdGV4dC5zbGljZShsYXN0SW5kZXgpO1xufVxuXG4vKipcbiAqIFNwbGl0IG1hcmtkb3duIHRleHQgaW50byBhbiBvcmRlcmVkIGxpc3Qgb2YgcHJvc2UgYW5kIGZlbmNlZC1jb2RlIHNlZ21lbnRzLlxuICogQSBmZW5jZWQtY29kZSBzZWdtZW50IGlzIGRlbGltaXRlZCBieSBhIGxpbmUgb2YgMysgYmFja3RpY2tzIG9yIHRpbGRlczsgaXRzIGNvbnRlbnQgaXMgY2FwdHVyZWRcbiAqIHJhdyAobmV2ZXIgZXNjYXBlZCkgc28gaXQgY2FuIGJlIHJlLWVtaXR0ZWQgYXMgYSBsaXRlcmFsIE1EWCBjb2RlIGZlbmNlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgc2VnbWVudHMsIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VnbWVudE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IE1hcmtkb3duU2VnbWVudFtdIHtcbiAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgc2VnbWVudHM6IE1hcmtkb3duU2VnbWVudFtdID0gW107XG4gIGxldCBwcm9zZUJ1ZmZlcjogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGNvZGVMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IG9wZW5GZW5jZTogbnVsbCB8IE9wZW5GZW5jZSA9IG51bGw7XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmIChvcGVuRmVuY2UpIHtcbiAgICAgIGlmIChvcGVuRmVuY2UuY2xvc2VSZS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goeyBsYW5nOiBvcGVuRmVuY2UubGFuZywgdGV4dDogY29kZUxpbmVzLmpvaW4oJ1xcbicpLCB0eXBlOiAnY29kZScgfSk7XG4gICAgICAgIG9wZW5GZW5jZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5NYXRjaCA9IC9eXFxzKig/PGZlbmNlPig/PGZlbmNlQ2hhcj5bYH5dKVxcazxmZW5jZUNoYXI+ezIsfSkoPzxsYW5nPi4qKSQvLmV4ZWMobGluZSk7XG4gICAgaWYgKG9wZW5NYXRjaCkge1xuICAgICAgY29uc3QgZmVuY2VDaGFycyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2UnKTtcbiAgICAgIGNvbnN0IGZlbmNlQ2hhciA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2VDaGFyJyk7XG4gICAgICBmbHVzaFByb3NlKCk7XG4gICAgICBjb2RlTGluZXMgPSBbXTtcbiAgICAgIG9wZW5GZW5jZSA9IHtcbiAgICAgICAgY2xvc2VSZTogbmV3IFJlZ0V4cChgXlxcXFxzKlxcXFwke2ZlbmNlQ2hhcn17JHtTdHJpbmcoZmVuY2VDaGFycy5sZW5ndGgpfSx9XFxcXHMqJGApLFxuICAgICAgICBsYW5nOiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG9wZW5NYXRjaCwgJ2xhbmcnKS50cmltKClcbiAgICAgIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcHJvc2VCdWZmZXIucHVzaChsaW5lKTtcbiAgfVxuICAvLyBBbiB1bmNsb3NlZCBmZW5jZSBydW5zIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuXG4gIGlmIChvcGVuRmVuY2UpIHtcbiAgICBzZWdtZW50cy5wdXNoKHsgbGFuZzogb3BlbkZlbmNlLmxhbmcsIHRleHQ6IGNvZGVMaW5lcy5qb2luKCdcXG4nKSwgdHlwZTogJ2NvZGUnIH0pO1xuICB9XG4gIGZsdXNoUHJvc2UoKTtcbiAgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGZ1bmN0aW9uIGZsdXNoUHJvc2UoKTogdm9pZCB7XG4gICAgaWYgKHByb3NlQnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlZ21lbnRzLnB1c2goeyB0ZXh0OiBwcm9zZUJ1ZmZlci5qb2luKCdcXG4nKSwgdHlwZTogJ3Byb3NlJyB9KTtcbiAgICBwcm9zZUJ1ZmZlciA9IFtdO1xuICB9XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIGBpbXBvcnQoXCLigKZcIilgIHF1YWxpZmllcnMgdHMtbW9ycGggcHJpbnRzIGJlZm9yZSBhIHR5cGUgdGhhdCBpcyBub3QgaW4gc2NvcGUsIHJlY29yZGluZyBlYWNoIG9uZSdzXG4gKiBkZWNsYXJhdGlvbiBmaWxlIGZpcnN0LCBzaW5jZSBpdCBpcyB0aGUgb25lIHBsYWNlIGEgcHJpbnRlZCB0eXBlIG5hbWVzIHdoZXJlIGl0IHdhcyBkZWNsYXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgcHJpbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIHR5cGUgd2l0aG91dCBpdHMgaW1wb3J0IHF1YWxpZmllcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGlmeVR5cGUodHlwZVRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdHlwZVRleHQubWF0Y2hBbGwoSU1QT1JUX1RZUEVfUkVHX0VYUCkpIHtcbiAgICByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnTmFtZScpLCBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnUGF0aCcpKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlVGV4dC5yZXBsYWNlQWxsKElNUE9SVF9RVUFMSUZJRVJfUkVHX0VYUCwgJycpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIGNvZGUgc2lnbmF0dXJlIGZvciB0aGUgYHNpZ25hdHVyZTpgIGZyb250bWF0dGVyIC8gT0cgY2FyZDogY29sbGFwc2Ugd2hpdGVzcGFjZSB0b1xuICogc2luZ2xlIHNwYWNlcyBhbmQgdHJ1bmNhdGUgdG8gYSBjYXJkLWZyaWVuZGx5IGxlbmd0aCB3aXRoIGFuIGVsbGlwc2lzLlxuICpcbiAqIEBwYXJhbSBzaWduYXR1cmUgLSBUaGUgc2lnbmF0dXJlLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjb2xsYXBzZWQgPSBzaWduYXR1cmUucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgcmV0dXJuIGNvbGxhcHNlZC5sZW5ndGggPD0gU0lHTkFUVVJFX01BWF9MRU5HVEggPyBjb2xsYXBzZWQgOiBgJHtjb2xsYXBzZWQuc2xpY2UoMCwgU0lHTkFUVVJFX01BWF9MRU5HVEggLSAxKS50cmltRW5kKCl94oCmYDtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU1lbWJlck5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY2xlYW5lZCA9IG5hbWVcbiAgICAucmVwbGFjZUFsbCgvXltcIiddfFtcIiddJC9nLCAnJylcbiAgICAucmVwbGFjZUFsbCgvW15hLXpBLVowLTldL2csICctJylcbiAgICAucmVwbGFjZUFsbCgvLSsvZywgJy0nKVxuICAgIC5yZXBsYWNlQWxsKC9eLXwtJC9nLCAnJyk7XG4gIC8vIEEgbWVtYmVyIGxpdGVyYWxseSBuYW1lZCBgaW5kZXhgIHdvdWxkIHdyaXRlIGBpbmRleC5tZHhgLCBjb2xsaWRpbmcgd2l0aCB0aGUgdHlwZS1vdmVydmlld1xuICAvLyBgaW5kZXgubWR4YCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKG9uZSBzaWxlbnRseSBvdmVyd3JpdGVzIHRoZSBvdGhlciwgNDA0LWluZyB0aGUgbG9zZXIpLlxuICByZXR1cm4gY2xlYW5lZCA9PT0gJ2luZGV4JyA/ICdpbmRleC1tZW1iZXInIDogKGNsZWFuZWQgfHwgJ3VubmFtZWQnKTtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzbHVnID0gb3ZlcmxvYWRLZXlcbiAgICAucmVwbGFjZUFsbCgvW1wiJygpXS9nLCAnICcpXG4gICAgLnJlcGxhY2VBbGwoL1teYS16QS1aMC05XFxzXS9nLCAnJylcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2VBbGwoL1xccysvZywgJy0nKTtcbiAgLy8gQSBtZXRob2QgbmFtZWQgYGluZGV4YCB3b3VsZCB3cml0ZSBgaW5kZXgubWR4YCBvdmVyIHRoZSB0eXBlLW92ZXJ2aWV3IHBhZ2UsIGV4YWN0bHkgYXMgYSBwcm9wZXJ0eSB3b3VsZC5cbiAgcmV0dXJuIHNsdWcgPT09ICdpbmRleCcgPyAnaW5kZXgtbWVtYmVyJyA6IHNsdWc7XG59XG5cbmNvbnN0IE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggPSAxNjA7XG5cbi8qKlxuICogU3RyaXAgbWFya2Rvd24gZm9ybWF0dGluZyB0byBwbGFpbiB0ZXh0IGZvciB1c2UgaW4gbWV0YSBkZXNjcmlwdGlvbnNcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQsIGF0IG1vc3QgMTYwIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEEgYmFyZSBge0BsaW5rIFRhcmdldH1gIHJlYWRzIGFzIGl0cyB0YXJnZXQsIGFzIGByZXNvbHZlTGlua3NgIHJlbmRlcnMgaXQ7IGRyb3BwaW5nIGl0IGxlYXZlcyBhIGhvbGUgaW4gdGhlIHNlbnRlbmNlLlxuICBjb25zdCBwbGFpbiA9IHJlcGxhY2VSZWdFeHBNYXRjaGVzKFxuICAgIHRleHQsXG4gICAgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXHMqXFx9L2csXG4gICAgKG1hdGNoKSA9PiBnZXRPcHRpb25hbE5hbWVkR3JvdXAobWF0Y2gsICdkaXNwbGF5JykgPz8gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpXG4gIClcbiAgICAucmVwbGFjZUFsbCgvXFxbKD88dGV4dD5bXlxcXV0rKVxcXVxcKFteKV0rXFwpL2csICckPHRleHQ+JylcbiAgICAucmVwbGFjZUFsbCgvW2AqX35dL2csICcnKVxuICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJylcbiAgICAudHJpbSgpO1xuXG4gIGlmIChwbGFpbi5sZW5ndGggPD0gT0dfREVTQ1JJUFRJT05fTUFYX0xFTkdUSCkge1xuICAgIHJldHVybiBwbGFpbjtcbiAgfVxuXG4gIC8vIEN1dCBiYWNrIHRvIGEgd29yZCBib3VuZGFyeTogYSByYXcgc2xpY2UgZW5kcyBkZXNjcmlwdGlvbnMgbWlkLXdvcmQgKGDigKYgdGhlIHN0cmluZyBtb2R1bGUgaXMgb2JgKS5cbiAgLy8gVGhhdCBmcmFnbWVudCBpcyB3aGF0IHJlYWRlcnMgc2VlIG9uIHRoZSBPRyBjYXJkIGFuZCBpbiBzZWFyY2ggcmVzdWx0cy5cbiAgY29uc3QgY2xpcHBlZCA9IHBsYWluLnNsaWNlKDAsIE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggLSAxKTtcbiAgY29uc3QgbGFzdFNwYWNlSW5kZXggPSBjbGlwcGVkLmxhc3RJbmRleE9mKCcgJyk7XG4gIGNvbnN0IHRydW5jYXRlZCA9IGxhc3RTcGFjZUluZGV4ID4gMCA/IGNsaXBwZWQuc2xpY2UoMCwgbGFzdFNwYWNlSW5kZXgpIDogY2xpcHBlZDtcbiAgcmV0dXJuIGAke3RydW5jYXRlZC5yZXBsYWNlKC9bLDs6Llxcc10rJC8sICcnKX3igKZgO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVNZHhQcm9zZUNoYXJzKGNodW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2h1bmsucmVwbGFjZUFsbCgvWzx7fV0vZywgKGNoYXIpID0+IGBcXFxcJHtjaGFyfWApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
@@ -0,0 +1,310 @@
|
|
|
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
|
+
"use strict";
|
|
40
|
+
var __defProp = Object.defineProperty;
|
|
41
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
42
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
43
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
44
|
+
var __export = (target, all) => {
|
|
45
|
+
for (var name in all)
|
|
46
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
47
|
+
};
|
|
48
|
+
var __copyProps = (to, from, except, desc) => {
|
|
49
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
50
|
+
for (let key of __getOwnPropNames(from))
|
|
51
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
52
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
53
|
+
}
|
|
54
|
+
return to;
|
|
55
|
+
};
|
|
56
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
57
|
+
var docs_snippets_exports = {};
|
|
58
|
+
__export(docs_snippets_exports, {
|
|
59
|
+
assertDocsSnippetsCompile: () => assertDocsSnippetsCompile,
|
|
60
|
+
extractDocsSnippets: () => extractDocsSnippets,
|
|
61
|
+
findDocsSnippetProblems: () => findDocsSnippetProblems,
|
|
62
|
+
formatDocsSnippetProblems: () => formatDocsSnippetProblems
|
|
63
|
+
});
|
|
64
|
+
module.exports = __toCommonJS(docs_snippets_exports);
|
|
65
|
+
var import_promises = require('node:fs/promises');
|
|
66
|
+
var import_node_path = require('node:path');
|
|
67
|
+
var import_typescript = require('typescript');
|
|
68
|
+
const CHECKED_LANGUAGES = /* @__PURE__ */ new Map([
|
|
69
|
+
["javascript", true],
|
|
70
|
+
["js", true],
|
|
71
|
+
["ts", false],
|
|
72
|
+
["typescript", false]
|
|
73
|
+
]);
|
|
74
|
+
const LINE_AFTER_FENCE_OFFSET = 2;
|
|
75
|
+
const MARKER_REG_EXP = /^<!--\s*snippet-check:\s*(?<kind>[a-z]+)\b(?<text>.*?)-->$/su;
|
|
76
|
+
const DIAGNOSTIC_DECLARED_BUT_VALUE_NEVER_READ = 6133;
|
|
77
|
+
const DIAGNOSTIC_ALL_IMPORTS_UNUSED = 6192;
|
|
78
|
+
const DIAGNOSTIC_DECLARED_BUT_NEVER_USED = 6196;
|
|
79
|
+
const DIAGNOSTIC_ALL_DESTRUCTURED_ELEMENTS_UNUSED = 6198;
|
|
80
|
+
const IGNORED_DIAGNOSTIC_CODES = /* @__PURE__ */ new Set([
|
|
81
|
+
DIAGNOSTIC_ALL_DESTRUCTURED_ELEMENTS_UNUSED,
|
|
82
|
+
DIAGNOSTIC_ALL_IMPORTS_UNUSED,
|
|
83
|
+
DIAGNOSTIC_DECLARED_BUT_NEVER_USED,
|
|
84
|
+
DIAGNOSTIC_DECLARED_BUT_VALUE_NEVER_READ
|
|
85
|
+
]);
|
|
86
|
+
const DIAGNOSTIC_VARIABLE_IMPLICITLY_ANY = 7005;
|
|
87
|
+
const DIAGNOSTIC_PARAMETER_IMPLICITLY_ANY = 7006;
|
|
88
|
+
const DIAGNOSTIC_MEMBER_IMPLICITLY_ANY = 7008;
|
|
89
|
+
const DIAGNOSTIC_BINDING_ELEMENT_IMPLICITLY_ANY = 7031;
|
|
90
|
+
const DIAGNOSTIC_VARIABLE_IMPLICITLY_ANY_IN_SOME_LOCATIONS = 7034;
|
|
91
|
+
const DIAGNOSTIC_ARROW_FUNCTION_CAPTURES_GLOBAL_THIS = 7041;
|
|
92
|
+
const DIAGNOSTIC_ELEMENT_IMPLICITLY_ANY = 7053;
|
|
93
|
+
const JAVASCRIPT_IGNORED_DIAGNOSTIC_CODES = /* @__PURE__ */ new Set([
|
|
94
|
+
DIAGNOSTIC_ARROW_FUNCTION_CAPTURES_GLOBAL_THIS,
|
|
95
|
+
DIAGNOSTIC_BINDING_ELEMENT_IMPLICITLY_ANY,
|
|
96
|
+
DIAGNOSTIC_ELEMENT_IMPLICITLY_ANY,
|
|
97
|
+
DIAGNOSTIC_MEMBER_IMPLICITLY_ANY,
|
|
98
|
+
DIAGNOSTIC_PARAMETER_IMPLICITLY_ANY,
|
|
99
|
+
DIAGNOSTIC_VARIABLE_IMPLICITLY_ANY,
|
|
100
|
+
DIAGNOSTIC_VARIABLE_IMPLICITLY_ANY_IN_SOME_LOCATIONS
|
|
101
|
+
]);
|
|
102
|
+
async function assertDocsSnippetsCompile(params) {
|
|
103
|
+
const problems = await findDocsSnippetProblems(params);
|
|
104
|
+
if (problems.length > 0) {
|
|
105
|
+
throw new Error(`${String(problems.length)} problem(s) in the documentation snippets:
|
|
106
|
+
${formatDocsSnippetProblems(problems)}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function extractDocsSnippets(markdown) {
|
|
110
|
+
const lines = markdown.split(/\r?\n/u);
|
|
111
|
+
const snippets = [];
|
|
112
|
+
let openFence = null;
|
|
113
|
+
let codeLines = [];
|
|
114
|
+
let pendingSkipReason = null;
|
|
115
|
+
let pendingContext = [];
|
|
116
|
+
for (const [index, line] of lines.entries()) {
|
|
117
|
+
if (openFence) {
|
|
118
|
+
const content = stripPrefix(line, openFence.prefix);
|
|
119
|
+
if (content.trimEnd() === openFence.fence) {
|
|
120
|
+
const isJavaScript = CHECKED_LANGUAGES.get(openFence.language);
|
|
121
|
+
if (isJavaScript !== void 0) {
|
|
122
|
+
snippets.push({
|
|
123
|
+
code: codeLines.join("\n"),
|
|
124
|
+
codeStartLine: openFence.startLine,
|
|
125
|
+
context: openFence.context.join("\n"),
|
|
126
|
+
isJavaScript,
|
|
127
|
+
language: openFence.language,
|
|
128
|
+
skipReason: openFence.skipReason
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
openFence = null;
|
|
132
|
+
codeLines = [];
|
|
133
|
+
} else {
|
|
134
|
+
codeLines.push(content);
|
|
135
|
+
}
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const fenceMatch = /^(?<prefix>(?:\s*>)*\s*)(?<fence>`{3,}|~{3,})(?<language>[\w-]*)/u.exec(line);
|
|
139
|
+
if (fenceMatch?.groups) {
|
|
140
|
+
openFence = {
|
|
141
|
+
context: pendingContext,
|
|
142
|
+
fence: fenceMatch.groups["fence"] ?? "",
|
|
143
|
+
language: (fenceMatch.groups["language"] ?? "").toLowerCase(),
|
|
144
|
+
prefix: fenceMatch.groups["prefix"] ?? "",
|
|
145
|
+
skipReason: pendingSkipReason,
|
|
146
|
+
startLine: index + LINE_AFTER_FENCE_OFFSET
|
|
147
|
+
};
|
|
148
|
+
pendingSkipReason = null;
|
|
149
|
+
pendingContext = [];
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
const text = line.replace(/^(?:\s*>)*\s*/u, "").trim();
|
|
153
|
+
const markerMatch = MARKER_REG_EXP.exec(text);
|
|
154
|
+
const kind = markerMatch?.groups?.["kind"];
|
|
155
|
+
const markerText = (markerMatch?.groups?.["text"] ?? "").trim();
|
|
156
|
+
if (kind === "skip") {
|
|
157
|
+
pendingSkipReason = markerText.replace(/^[-—:]\s*/u, "");
|
|
158
|
+
} else if (kind === "context") {
|
|
159
|
+
pendingContext.push(markerText);
|
|
160
|
+
} else if (text !== "") {
|
|
161
|
+
pendingSkipReason = null;
|
|
162
|
+
pendingContext = [];
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return snippets;
|
|
166
|
+
}
|
|
167
|
+
async function findDocsSnippetProblems(params) {
|
|
168
|
+
const rootDirectory = (0, import_node_path.resolve)(params.rootDirectory);
|
|
169
|
+
const docsDirectory = (0, import_node_path.join)(rootDirectory, params.docsDirectory ?? "docs/src/content/docs");
|
|
170
|
+
const problems = [];
|
|
171
|
+
const virtualFiles = /* @__PURE__ */ new Map();
|
|
172
|
+
const rootNames = [];
|
|
173
|
+
const snippetsDirectory = (0, import_node_path.join)(rootDirectory, "docs", "__snippets__");
|
|
174
|
+
function addVirtualFile(path, file) {
|
|
175
|
+
virtualFiles.set(normalizePath(path), file);
|
|
176
|
+
rootNames.push(path);
|
|
177
|
+
}
|
|
178
|
+
const prelude = params.prelude ?? "";
|
|
179
|
+
if (prelude !== "") {
|
|
180
|
+
addVirtualFile((0, import_node_path.join)(snippetsDirectory, "prelude.ts"), { code: prelude, codeStartLine: 1, contextLineCount: 0, filePath: "<prelude>" });
|
|
181
|
+
}
|
|
182
|
+
for (const guidePath of await listGuides(docsDirectory)) {
|
|
183
|
+
const filePath = toPosix((0, import_node_path.relative)(rootDirectory, guidePath));
|
|
184
|
+
const markdown = await (0, import_promises.readFile)(guidePath, "utf-8");
|
|
185
|
+
for (const snippet of extractDocsSnippets(markdown)) {
|
|
186
|
+
if (snippet.skipReason === "") {
|
|
187
|
+
problems.push({
|
|
188
|
+
filePath,
|
|
189
|
+
line: snippet.codeStartLine - 1,
|
|
190
|
+
message: "A `snippet-check: skip` marker must give its reason."
|
|
191
|
+
});
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
if (snippet.skipReason !== null) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const extension = snippet.isJavaScript ? "js" : "ts";
|
|
198
|
+
const baseName = `${toPosix((0, import_node_path.relative)(docsDirectory, guidePath)).replaceAll("/", "__")}.L${String(snippet.codeStartLine)}.${extension}`;
|
|
199
|
+
const context = snippet.context === "" ? "" : `${snippet.context}
|
|
200
|
+
`;
|
|
201
|
+
addVirtualFile((0, import_node_path.join)(snippetsDirectory, baseName), {
|
|
202
|
+
code: `${context}${snippet.code}
|
|
203
|
+
export {};
|
|
204
|
+
`,
|
|
205
|
+
codeStartLine: snippet.codeStartLine,
|
|
206
|
+
contextLineCount: context === "" ? 0 : context.split("\n").length - 1,
|
|
207
|
+
filePath
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
problems.push(...compileSnippets({ compilerOptions: params.compilerOptions ?? {}, rootDirectory, rootNames, virtualFiles }));
|
|
212
|
+
return problems;
|
|
213
|
+
}
|
|
214
|
+
function formatDocsSnippetProblems(problems) {
|
|
215
|
+
return problems.map((problem) => `${problem.filePath}:${String(problem.line)} - ${problem.message}`).join("\n");
|
|
216
|
+
}
|
|
217
|
+
function compileSnippets(params) {
|
|
218
|
+
const { rootDirectory, rootNames, virtualFiles } = params;
|
|
219
|
+
const configPath = (0, import_node_path.join)(rootDirectory, "tsconfig.json");
|
|
220
|
+
const parsed = (0, import_typescript.getParsedCommandLineOfConfigFile)(configPath, {}, {
|
|
221
|
+
...import_typescript.sys,
|
|
222
|
+
onUnRecoverableConfigFileDiagnostic(diagnostic) {
|
|
223
|
+
throw new Error((0, import_typescript.flattenDiagnosticMessageText)(diagnostic.messageText, "\n"));
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
if (!parsed) {
|
|
227
|
+
throw new Error(`Cannot read ${configPath}`);
|
|
228
|
+
}
|
|
229
|
+
const compilerOptions = {
|
|
230
|
+
...parsed.options,
|
|
231
|
+
...params.compilerOptions,
|
|
232
|
+
allowJs: true,
|
|
233
|
+
checkJs: true,
|
|
234
|
+
composite: false,
|
|
235
|
+
incremental: false,
|
|
236
|
+
noEmit: true,
|
|
237
|
+
noUnusedLocals: false,
|
|
238
|
+
noUnusedParameters: false
|
|
239
|
+
};
|
|
240
|
+
delete compilerOptions.tsBuildInfoFile;
|
|
241
|
+
const host = (0, import_typescript.createCompilerHost)(compilerOptions, true);
|
|
242
|
+
const originalGetSourceFile = host.getSourceFile.bind(host);
|
|
243
|
+
const originalFileExists = host.fileExists.bind(host);
|
|
244
|
+
const originalReadFile = host.readFile.bind(host);
|
|
245
|
+
host.fileExists = (fileName) => virtualFiles.has(normalizePath(fileName)) || originalFileExists(fileName);
|
|
246
|
+
host.readFile = (fileName) => virtualFiles.get(normalizePath(fileName))?.code ?? originalReadFile(fileName);
|
|
247
|
+
host.getSourceFile = (fileName, languageVersionOrOptions, onError, shouldCreateNewSourceFile) => {
|
|
248
|
+
const virtualFile = virtualFiles.get(normalizePath(fileName));
|
|
249
|
+
if (virtualFile) {
|
|
250
|
+
const scriptKind = fileName.endsWith(".js") ? import_typescript.ScriptKind.JS : import_typescript.ScriptKind.TS;
|
|
251
|
+
return (0, import_typescript.createSourceFile)(fileName, virtualFile.code, languageVersionOrOptions, true, scriptKind);
|
|
252
|
+
}
|
|
253
|
+
return originalGetSourceFile(fileName, languageVersionOrOptions, onError, shouldCreateNewSourceFile);
|
|
254
|
+
};
|
|
255
|
+
const program = (0, import_typescript.createProgram)({ host, options: compilerOptions, rootNames });
|
|
256
|
+
const problems = [];
|
|
257
|
+
for (const rootName of rootNames) {
|
|
258
|
+
const sourceFile = program.getSourceFile(rootName);
|
|
259
|
+
const virtualFile = virtualFiles.get(normalizePath(rootName));
|
|
260
|
+
if (!sourceFile || !virtualFile) {
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
const isJavaScript = rootName.endsWith(".js");
|
|
264
|
+
const diagnostics = [...program.getSyntacticDiagnostics(sourceFile), ...program.getSemanticDiagnostics(sourceFile)];
|
|
265
|
+
for (const diagnostic of diagnostics) {
|
|
266
|
+
if (IGNORED_DIAGNOSTIC_CODES.has(diagnostic.code) || isJavaScript && JAVASCRIPT_IGNORED_DIAGNOSTIC_CODES.has(diagnostic.code)) {
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
const fileLine = diagnostic.start === void 0 ? 0 : sourceFile.getLineAndCharacterOfPosition(diagnostic.start).line;
|
|
270
|
+
const snippetLine = Math.max(0, fileLine - virtualFile.contextLineCount);
|
|
271
|
+
problems.push({
|
|
272
|
+
filePath: virtualFile.filePath,
|
|
273
|
+
line: virtualFile.codeStartLine + snippetLine,
|
|
274
|
+
message: `TS${String(diagnostic.code)}: ${(0, import_typescript.flattenDiagnosticMessageText)(diagnostic.messageText, " ")}`
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return problems;
|
|
279
|
+
}
|
|
280
|
+
async function listGuides(directory) {
|
|
281
|
+
const guides = [];
|
|
282
|
+
for (const entry of await (0, import_promises.readdir)(directory, { withFileTypes: true })) {
|
|
283
|
+
const entryPath = (0, import_node_path.join)(directory, entry.name);
|
|
284
|
+
if (entry.isDirectory()) {
|
|
285
|
+
if (entry.name !== "api") {
|
|
286
|
+
guides.push(...await listGuides(entryPath));
|
|
287
|
+
}
|
|
288
|
+
} else if (/\.mdx?$/u.test(entry.name)) {
|
|
289
|
+
guides.push(entryPath);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return guides.sort();
|
|
293
|
+
}
|
|
294
|
+
function normalizePath(path) {
|
|
295
|
+
return toPosix((0, import_node_path.resolve)(path)).toLowerCase();
|
|
296
|
+
}
|
|
297
|
+
function stripPrefix(line, prefix) {
|
|
298
|
+
return line.startsWith(prefix) ? line.slice(prefix.length) : line.replace(/^(?:\s*>)*\s?/u, "");
|
|
299
|
+
}
|
|
300
|
+
function toPosix(path) {
|
|
301
|
+
return path.replaceAll("\\", "/");
|
|
302
|
+
}
|
|
303
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
304
|
+
0 && (module.exports = {
|
|
305
|
+
assertDocsSnippetsCompile,
|
|
306
|
+
extractDocsSnippets,
|
|
307
|
+
findDocsSnippetProblems,
|
|
308
|
+
formatDocsSnippetProblems
|
|
309
|
+
});
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvZG9jcy1zbmlwcGV0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0cmFjdHMgdGhlIGNvZGUgc25pcHBldHMgb2YgYSBwYWNrYWdlJ3MgZG9jdW1lbnRhdGlvbiBndWlkZXMgYW5kIHR5cGUtY2hlY2tzIHRoZW0gYWdhaW5zdCBpdHMgc291cmNlcy5cbiAqXG4gKiBBIGd1aWRlJ3Mgc25pcHBldCBpcyBjb2RlIGEgcmVhZGVyIGNvcGllcywgc28gYSByZW5hbWVkIG1lbWJlciBvciBhIHN0YWxlIGltcG9ydCBwYXRoIGluIGl0IGlzIGEgYnVnIHRoYXQgc2hpcHNcbiAqIHRvIHRoZSBzaXRlIHdpdGggZXZlcnkgY2hlY2sgZ3JlZW4uIEV2ZXJ5IGZlbmNlZCBgdHNgLCBgdHlwZXNjcmlwdGAsIGBqc2Agb3IgYGphdmFzY3JpcHRgIGJsb2NrIGluXG4gKiBgZG9jcy9zcmMvY29udGVudC9kb2NzYCBpcyBjb21waWxlZCBhcyBpdHMgb3duIG1vZHVsZSwgd2l0aCB0aGUgcHJvamVjdCdzIGB0c2NvbmZpZy5qc29uYCwgc28gYW4gaW1wb3J0IG9mIHRoZVxuICogcGFja2FnZSdzIG93biBuYW1lIHJlc29sdmVzIHdoZXJldmVyIHRoYXQgY29uZmlndXJhdGlvbiBzZW5kcyBpdCAoaXRzIGBwYXRoc2AsIG9yIHRoZSBgY29tcGlsZXJPcHRpb25zYCBwYXNzZWRcbiAqIGhlcmUpIGFuZCBhIHdyb25nIG5hbWUgZmFpbHMuIEEgYHRzYCAvIGB0eXBlc2NyaXB0YCBibG9jayBpcyBjb21waWxlZCBhcyBUeXBlU2NyaXB0OyBhIGBqc2AgLyBgamF2YXNjcmlwdGAgYmxvY2ssXG4gKiBvZnRlbiBhIGRldnRvb2xzLWNvbnNvbGUgcmVjaXBlLCBpcyBjb21waWxlZCBhcyBKYXZhU2NyaXB0IHdpdGggYGNoZWNrSnNgLCBzbyBhIHdyb25nIG1lbWJlciBvZiBhIHR5cGVkIG9iamVjdFxuICogc3RpbGwgZmFpbHMgd2hpbGUgYW4gdW50eXBlZCBsb29rdXAgZG9lcyBub3QuIFRoZSBnZW5lcmF0ZWQgQVBJIHJlZmVyZW5jZSAoYGRvY3Mvc3JjL2NvbnRlbnQvZG9jcy9hcGlgKSBpc1xuICogc2tpcHBlZDogaXQgaXMgcmVuZGVyZWQgZnJvbSB0aGUgVFNEb2MuXG4gKlxuICogVGhyZWUgdGhpbmdzIHNoYXBlIHdoYXQgYSBzbmlwcGV0IGlzIGNvbXBpbGVkIHdpdGgsIGVhY2ggYnV0IHRoZSBmaXJzdCB3cml0dGVuIGluIHRoZSBndWlkZSBhcyBhbiBIVE1MIGNvbW1lbnQsXG4gKiBpbnZpc2libGUgb24gdGhlIHNpdGUsIG9uIHRoZSBsaW5lcyByaWdodCBhYm92ZSB0aGUgZmVuY2U6XG4gKlxuICogLSBUaGUgbmFtZXMgZXZlcnkgZ3VpZGUgbWF5IHVzZSB3aXRob3V0IGRlY2xhcmluZyB0aGVtIGFyZSB0aGUgcGFja2FnZSdzIGBwcmVsdWRlYCwgY29tcGlsZWQgYXMgYSBtb2R1bGUgb2YgaXRzXG4gKiAgIG93biAoYSBgZGVjbGFyZSBnbG9iYWxgIGJsb2NrLCB3aXRoIHRoZSBpbXBvcnRzIGl0IG5lZWRzKS5cbiAqIC0gYDwhLS0gc25pcHBldC1jaGVjazogY29udGV4dCA8VHlwZVNjcmlwdD4gLS0+YCBwcmVwZW5kcyBkZWNsYXJhdGlvbnMgdG8gdGhhdCBvbmUgc25pcHBldCwgZm9yIHRoZSBuYW1lcyBpdHNcbiAqICAgcHJvc2UgaGFzIGFscmVhZHkgaW50cm9kdWNlZCAoYGRlY2xhcmUgY29uc3QgbGlua0VsOiBIVE1MQW5jaG9yRWxlbWVudDtgKS4gU2V2ZXJhbCBzdWNoIGxpbmVzIGFkZCB1cC5cbiAqIC0gYDwhLS0gc25pcHBldC1jaGVjazogc2tpcCA8cmVhc29uPiAtLT5gIGV4ZW1wdHMgYSBzbmlwcGV0IHRoYXQgaXMgZGVsaWJlcmF0ZWx5IG5vdCBjb21waWxhYmxlLCBzdWNoIGFzXG4gKiAgIHBzZXVkby1jb2RlLiBUaGUgcmVhc29uIGlzIHJlcXVpcmVkLCBzbyBhIHNraXAgaXMgYSBkZWNpc2lvbiBzb21lYm9keSB3cm90ZSBkb3duLCBuZXZlciBhIHNpbGVudCBob2xlLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcGlsZXJPcHRpb25zLFxuICBTb3VyY2VGaWxlXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge1xuICByZWFkZGlyLFxuICByZWFkRmlsZVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7XG4gIGpvaW4sXG4gIHJlbGF0aXZlLFxuICByZXNvbHZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge1xuICBjcmVhdGVDb21waWxlckhvc3QsXG4gIGNyZWF0ZVByb2dyYW0sXG4gIGNyZWF0ZVNvdXJjZUZpbGUsXG4gIGZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQsXG4gIGdldFBhcnNlZENvbW1hbmRMaW5lT2ZDb25maWdGaWxlLFxuICBTY3JpcHRLaW5kLFxuICBzeXNcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbi8qKlxuICogVGhlIGxhbmd1YWdlcyBvZiB0aGUgZmVuY2VkIGJsb2NrcyB0aGF0IGFyZSB0eXBlLWNoZWNrZWQsIGFuZCB3aGV0aGVyIGVhY2ggaXMgSmF2YVNjcmlwdC5cbiAqL1xuY29uc3QgQ0hFQ0tFRF9MQU5HVUFHRVM6IFJlYWRvbmx5TWFwPHN0cmluZywgYm9vbGVhbj4gPSBuZXcgTWFwKFtcbiAgWydqYXZhc2NyaXB0JywgdHJ1ZV0sXG4gIFsnanMnLCB0cnVlXSxcbiAgWyd0cycsIGZhbHNlXSxcbiAgWyd0eXBlc2NyaXB0JywgZmFsc2VdXG5dKTtcblxuLyoqXG4gKiBUaGUgb2Zmc2V0IGZyb20gYSBmZW5jZSBsaW5lJ3MgMC1iYXNlZCBpbmRleCB0byB0aGUgMS1iYXNlZCBsaW5lIG9mIHRoZSBjb2RlIGFmdGVyIGl0LlxuICovXG5jb25zdCBMSU5FX0FGVEVSX0ZFTkNFX09GRlNFVCA9IDI7XG5cbmNvbnN0IE1BUktFUl9SRUdfRVhQID0gL148IS0tXFxzKnNuaXBwZXQtY2hlY2s6XFxzKig/PGtpbmQ+W2Etel0rKVxcYig/PHRleHQ+Lio/KS0tPiQvc3U7XG5cbi8qKlxuICogRGlhZ25vc3RpY3MgYSBzbmlwcGV0IGlzIG5vdCBoZWxkIHRvOiBhbiBpbGx1c3RyYXRpb24gZGVjbGFyZXMgbmFtZXMgaXQgbmV2ZXIgcmVhZHMuXG4gKi9cbmNvbnN0IERJQUdOT1NUSUNfREVDTEFSRURfQlVUX1ZBTFVFX05FVkVSX1JFQUQgPSA2MTMzO1xuY29uc3QgRElBR05PU1RJQ19BTExfSU1QT1JUU19VTlVTRUQgPSA2MTkyO1xuY29uc3QgRElBR05PU1RJQ19ERUNMQVJFRF9CVVRfTkVWRVJfVVNFRCA9IDYxOTY7XG5jb25zdCBESUFHTk9TVElDX0FMTF9ERVNUUlVDVFVSRURfRUxFTUVOVFNfVU5VU0VEID0gNjE5ODtcbmNvbnN0IElHTk9SRURfRElBR05PU1RJQ19DT0RFUyA9IG5ldyBTZXQoW1xuICBESUFHTk9TVElDX0FMTF9ERVNUUlVDVFVSRURfRUxFTUVOVFNfVU5VU0VELFxuICBESUFHTk9TVElDX0FMTF9JTVBPUlRTX1VOVVNFRCxcbiAgRElBR05PU1RJQ19ERUNMQVJFRF9CVVRfTkVWRVJfVVNFRCxcbiAgRElBR05PU1RJQ19ERUNMQVJFRF9CVVRfVkFMVUVfTkVWRVJfUkVBRFxuXSk7XG5cbi8qKlxuICogVGhlIGltcGxpY2l0LWBhbnlgIGRpYWdub3N0aWNzLCB3aGljaCBhIEphdmFTY3JpcHQgc25pcHBldCBpcyBub3QgaGVsZCB0bzogYSBjb25zb2xlIHJlY2lwZSBoYXMgbm8gYW5ub3RhdGlvbnMgdG9cbiAqIGdpdmUsIGFuZCBhbiB1bnR5cGVkIGxvb2t1cCBzdWNoIGFzIGEgYFN5bWJvbC5mb3JgIHNsb3Qgb24gYGdsb2JhbFRoaXNgIGlzIHdoYXQgcGxhaW4gSmF2YVNjcmlwdCBkb2VzLlxuICovXG5jb25zdCBESUFHTk9TVElDX1ZBUklBQkxFX0lNUExJQ0lUTFlfQU5ZID0gNzAwNTtcbmNvbnN0IERJQUdOT1NUSUNfUEFSQU1FVEVSX0lNUExJQ0lUTFlfQU5ZID0gNzAwNjtcbmNvbnN0IERJQUdOT1NUSUNfTUVNQkVSX0lNUExJQ0lUTFlfQU5ZID0gNzAwODtcbmNvbnN0IERJQUdOT1NUSUNfQklORElOR19FTEVNRU5UX0lNUExJQ0lUTFlfQU5ZID0gNzAzMTtcbmNvbnN0IERJQUdOT1NUSUNfVkFSSUFCTEVfSU1QTElDSVRMWV9BTllfSU5fU09NRV9MT0NBVElPTlMgPSA3MDM0O1xuY29uc3QgRElBR05PU1RJQ19BUlJPV19GVU5DVElPTl9DQVBUVVJFU19HTE9CQUxfVEhJUyA9IDcwNDE7XG5jb25zdCBESUFHTk9TVElDX0VMRU1FTlRfSU1QTElDSVRMWV9BTlkgPSA3MDUzO1xuY29uc3QgSkFWQVNDUklQVF9JR05PUkVEX0RJQUdOT1NUSUNfQ09ERVMgPSBuZXcgU2V0KFtcbiAgRElBR05PU1RJQ19BUlJPV19GVU5DVElPTl9DQVBUVVJFU19HTE9CQUxfVEhJUyxcbiAgRElBR05PU1RJQ19CSU5ESU5HX0VMRU1FTlRfSU1QTElDSVRMWV9BTlksXG4gIERJQUdOT1NUSUNfRUxFTUVOVF9JTVBMSUNJVExZX0FOWSxcbiAgRElBR05PU1RJQ19NRU1CRVJfSU1QTElDSVRMWV9BTlksXG4gIERJQUdOT1NUSUNfUEFSQU1FVEVSX0lNUExJQ0lUTFlfQU5ZLFxuICBESUFHTk9TVElDX1ZBUklBQkxFX0lNUExJQ0lUTFlfQU5ZLFxuICBESUFHTk9TVElDX1ZBUklBQkxFX0lNUExJQ0lUTFlfQU5ZX0lOX1NPTUVfTE9DQVRJT05TXG5dKTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYXNzZXJ0RG9jc1NuaXBwZXRzQ29tcGlsZX06IHRoZSBzYW1lIGFzIHtAbGluayBmaW5kRG9jc1NuaXBwZXRQcm9ibGVtc30gdGFrZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEFzc2VydERvY3NTbmlwcGV0c0NvbXBpbGVQYXJhbXMgPSBGaW5kRG9jc1NuaXBwZXRQcm9ibGVtc1BhcmFtcztcblxuLyoqXG4gKiBPbmUgZmVuY2VkIGNvZGUgYmxvY2sgb2YgYSBndWlkZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NzU25pcHBldCB7XG4gIC8qKlxuICAgKiBUaGUgY29kZSwgd2l0aCBhbnkgYmxvY2txdW90ZSBvciBpbmRlbnRhdGlvbiBwcmVmaXggb2YgdGhlIGZlbmNlIHN0cmlwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgMS1iYXNlZCBsaW5lIG9mIHRoZSBndWlkZSBvbiB3aGljaCB0aGUgY29kZSBzdGFydHMgKHRoZSBsaW5lIGFmdGVyIHRoZSBvcGVuaW5nIGZlbmNlKS5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGVTdGFydExpbmU6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRlY2xhcmF0aW9ucyBvZiB0aGUgYHNuaXBwZXQtY2hlY2s6IGNvbnRleHRgIG1hcmtlcnMgYWJvdmUgdGhlIGZlbmNlLCBqb2luZWQgYnkgbmV3bGluZXMuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNuaXBwZXQgaXMgSmF2YVNjcmlwdCByYXRoZXIgdGhhbiBUeXBlU2NyaXB0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNKYXZhU2NyaXB0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIGZlbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlYXNvbiBnaXZlbiBieSBhIGBzbmlwcGV0LWNoZWNrOiBza2lwYCBtYXJrZXIsIG9yIGBudWxsYCB3aGVuIHRoZSBzbmlwcGV0IGlzIGNoZWNrZWQuXG4gICAqL1xuICByZWFkb25seSBza2lwUmVhc29uOiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcHJvYmxlbSBmb3VuZCBpbiBhIGd1aWRlJ3Mgc25pcHBldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NzU25pcHBldFByb2JsZW0ge1xuICAvKipcbiAgICogVGhlIGd1aWRlJ3MgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHBhY2thZ2Ugcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSAxLWJhc2VkIGxpbmUgb2YgdGhlIGd1aWRlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGluZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGF0IGlzIHdyb25nLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaW5kRG9jc1NuaXBwZXRQcm9ibGVtc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmluZERvY3NTbmlwcGV0UHJvYmxlbXNQYXJhbXMge1xuICAvKipcbiAgICogQ29tcGlsZXIgb3B0aW9ucyBsYWlkIG92ZXIgdGhlIG9uZXMgYHRzY29uZmlnLmpzb25gIGdpdmVzLCBmb3IgaW5zdGFuY2UgYHBhdGhzYCB0aGF0IHJlc29sdmUgdGhlIHBhY2thZ2UncyBvd25cbiAgICogbmFtZSBvbnRvIGl0cyBzb3VyY2VzIHdoZW4gaXRzIGB0c2NvbmZpZy5qc29uYCBoYXMgbm9uZS4gQSByZWxhdGl2ZSBwYXRoIGluIHRoZW0gaXMgbm90IHJlc29sdmVkLCBzbyBwYXNzXG4gICAqIGFic29sdXRlIG9uZXMuXG4gICAqL1xuICByZWFkb25seSBjb21waWxlck9wdGlvbnM/OiBDb21waWxlck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBndWlkZXMgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB7QGxpbmsgRmluZERvY3NTbmlwcGV0UHJvYmxlbXNQYXJhbXMucm9vdERpcmVjdG9yeX0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnZG9jcy9zcmMvY29udGVudC9kb2NzJ2BcbiAgICovXG4gIHJlYWRvbmx5IGRvY3NEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhbWJpZW50IGNvbnRleHQgZXZlcnkgc25pcHBldCBpcyBjb21waWxlZCB3aXRoOiB0aGUgbmFtZXMgYSBndWlkZSBtYXkgdXNlIHdpdGhvdXQgZGVjbGFyaW5nIHRoZW0sIHdyaXR0ZW4gYXNcbiAgICogYSBtb2R1bGUgKGBkZWNsYXJlIGdsb2JhbCB7IC4uLiB9YCwgd2l0aCB0aGUgaW1wb3J0cyBpdCBuZWVkcykuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2AsIG5vIHByZWx1ZGUuXG4gICAqL1xuICByZWFkb25seSBwcmVsdWRlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSByb290LCBob2xkaW5nIGB0c2NvbmZpZy5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3REaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENvbXBpbGVTbmlwcGV0c1BhcmFtcyB7XG4gIHJlYWRvbmx5IGNvbXBpbGVyT3B0aW9uczogQ29tcGlsZXJPcHRpb25zO1xuICByZWFkb25seSByb290RGlyZWN0b3J5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJvb3ROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IHZpcnR1YWxGaWxlczogUmVhZG9ubHlNYXA8c3RyaW5nLCBWaXJ0dWFsU25pcHBldEZpbGU+O1xufVxuXG5pbnRlcmZhY2UgT3BlbkZlbmNlIHtcbiAgcmVhZG9ubHkgY29udGV4dDogc3RyaW5nW107XG4gIHJlYWRvbmx5IGZlbmNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxhbmd1YWdlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWZpeDogc3RyaW5nO1xuICByZWFkb25seSBza2lwUmVhc29uOiBudWxsIHwgc3RyaW5nO1xuICByZWFkb25seSBzdGFydExpbmU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFZpcnR1YWxTbmlwcGV0RmlsZSB7XG4gIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcbiAgcmVhZG9ubHkgY29kZVN0YXJ0TGluZTogbnVtYmVyO1xuICByZWFkb25seSBjb250ZXh0TGluZUNvdW50OiBudW1iZXI7XG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHlwZS1jaGVja3MgZXZlcnkgc25pcHBldCBvZiB0aGUgZ3VpZGVzIGFuZCB0aHJvd3Mgd2hlbiBvbmUgZmFpbHMsIGZvciBhIGBkb2NzOmNoZWNrLXNuaXBwZXRzYCBzY3JpcHQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQXNzZXJ0RG9jc1NuaXBwZXRzQ29tcGlsZVBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGV2ZXJ5IHNuaXBwZXQgY29tcGlsZXMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gTGlzdGluZyBldmVyeSBwcm9ibGVtLCBvbmUgcGVyIGxpbmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3NlcnREb2NzU25pcHBldHNDb21waWxlKHBhcmFtczogQXNzZXJ0RG9jc1NuaXBwZXRzQ29tcGlsZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9ibGVtcyA9IGF3YWl0IGZpbmREb2NzU25pcHBldFByb2JsZW1zKHBhcmFtcyk7XG4gIGlmIChwcm9ibGVtcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke1N0cmluZyhwcm9ibGVtcy5sZW5ndGgpfSBwcm9ibGVtKHMpIGluIHRoZSBkb2N1bWVudGF0aW9uIHNuaXBwZXRzOlxcbiR7Zm9ybWF0RG9jc1NuaXBwZXRQcm9ibGVtcyhwcm9ibGVtcyl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgZmVuY2VkIGNvZGUgYmxvY2tzIG9mIHRoZSBjaGVja2VkIGxhbmd1YWdlcyBmcm9tIGEgbWFya2Rvd24gZG9jdW1lbnQuXG4gKlxuICogQSBmZW5jZSBpbnNpZGUgYSBibG9ja3F1b3RlIG9yIGEgbGlzdCBpdGVtIGlzIHJlY29nbml6ZWQgdG9vOiBpdHMgcHJlZml4IChgPiBgLCBpbmRlbnRhdGlvbikgaXMgc3RyaXBwZWQgZnJvbVxuICogZXZlcnkgbGluZSBvZiBpdHMgY29kZS5cbiAqXG4gKiBAcGFyYW0gbWFya2Rvd24gLSBUaGUgbWFya2Rvd24gZG9jdW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgc25pcHBldHMsIGluIGRvY3VtZW50IG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERvY3NTbmlwcGV0cyhtYXJrZG93bjogc3RyaW5nKTogRG9jc1NuaXBwZXRbXSB7XG4gIGNvbnN0IGxpbmVzID0gbWFya2Rvd24uc3BsaXQoL1xccj9cXG4vdSk7XG4gIGNvbnN0IHNuaXBwZXRzOiBEb2NzU25pcHBldFtdID0gW107XG4gIGxldCBvcGVuRmVuY2U6IG51bGwgfCBPcGVuRmVuY2UgPSBudWxsO1xuICBsZXQgY29kZUxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgcGVuZGluZ1NraXBSZWFzb246IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICBsZXQgcGVuZGluZ0NvbnRleHQ6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGxpbmVdIG9mIGxpbmVzLmVudHJpZXMoKSkge1xuICAgIGlmIChvcGVuRmVuY2UpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBzdHJpcFByZWZpeChsaW5lLCBvcGVuRmVuY2UucHJlZml4KTtcbiAgICAgIGlmIChjb250ZW50LnRyaW1FbmQoKSA9PT0gb3BlbkZlbmNlLmZlbmNlKSB7XG4gICAgICAgIGNvbnN0IGlzSmF2YVNjcmlwdCA9IENIRUNLRURfTEFOR1VBR0VTLmdldChvcGVuRmVuY2UubGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoaXNKYXZhU2NyaXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzbmlwcGV0cy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IGNvZGVMaW5lcy5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgIGNvZGVTdGFydExpbmU6IG9wZW5GZW5jZS5zdGFydExpbmUsXG4gICAgICAgICAgICBjb250ZXh0OiBvcGVuRmVuY2UuY29udGV4dC5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgIGlzSmF2YVNjcmlwdCxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBvcGVuRmVuY2UubGFuZ3VhZ2UsXG4gICAgICAgICAgICBza2lwUmVhc29uOiBvcGVuRmVuY2Uuc2tpcFJlYXNvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9wZW5GZW5jZSA9IG51bGw7XG4gICAgICAgIGNvZGVMaW5lcyA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29kZUxpbmVzLnB1c2goY29udGVudCk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmZW5jZU1hdGNoID0gL14oPzxwcmVmaXg+KD86XFxzKj4pKlxccyopKD88ZmVuY2U+YHszLH18fnszLH0pKD88bGFuZ3VhZ2U+W1xcdy1dKikvdS5leGVjKGxpbmUpO1xuICAgIGlmIChmZW5jZU1hdGNoPy5ncm91cHMpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFdmVyeSBncm91cCBvZiB0aGUgZmVuY2UgcGF0dGVybiB0YWtlcyBwYXJ0IGluIGEgbWF0Y2gsIHNvIHRoZSBmYWxsYmFja3MgbmV2ZXIgYXBwbHkuICovXG4gICAgICBvcGVuRmVuY2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHBlbmRpbmdDb250ZXh0LFxuICAgICAgICBmZW5jZTogZmVuY2VNYXRjaC5ncm91cHNbJ2ZlbmNlJ10gPz8gJycsXG4gICAgICAgIGxhbmd1YWdlOiAoZmVuY2VNYXRjaC5ncm91cHNbJ2xhbmd1YWdlJ10gPz8gJycpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHByZWZpeDogZmVuY2VNYXRjaC5ncm91cHNbJ3ByZWZpeCddID8/ICcnLFxuICAgICAgICBza2lwUmVhc29uOiBwZW5kaW5nU2tpcFJlYXNvbixcbiAgICAgICAgc3RhcnRMaW5lOiBpbmRleCArIExJTkVfQUZURVJfRkVOQ0VfT0ZGU0VUXG4gICAgICB9O1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIHBlbmRpbmdTa2lwUmVhc29uID0gbnVsbDtcbiAgICAgIHBlbmRpbmdDb250ZXh0ID0gW107XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0ID0gbGluZS5yZXBsYWNlKC9eKD86XFxzKj4pKlxccyovdSwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBtYXJrZXJNYXRjaCA9IE1BUktFUl9SRUdfRVhQLmV4ZWModGV4dCk7XG4gICAgY29uc3Qga2luZCA9IG1hcmtlck1hdGNoPy5ncm91cHM/Llsna2luZCddO1xuICAgIGNvbnN0IG1hcmtlclRleHQgPSAobWFya2VyTWF0Y2g/Lmdyb3Vwcz8uWyd0ZXh0J10gPz8gJycpLnRyaW0oKTtcbiAgICBpZiAoa2luZCA9PT0gJ3NraXAnKSB7XG4gICAgICBwZW5kaW5nU2tpcFJlYXNvbiA9IG1hcmtlclRleHQucmVwbGFjZSgvXlst4oCUOl1cXHMqL3UsICcnKTtcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT09ICdjb250ZXh0Jykge1xuICAgICAgcGVuZGluZ0NvbnRleHQucHVzaChtYXJrZXJUZXh0KTtcbiAgICB9IGVsc2UgaWYgKHRleHQgIT09ICcnKSB7XG4gICAgICBwZW5kaW5nU2tpcFJlYXNvbiA9IG51bGw7XG4gICAgICBwZW5kaW5nQ29udGV4dCA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzbmlwcGV0cztcbn1cblxuLyoqXG4gKiBUeXBlLWNoZWNrcyBldmVyeSBzbmlwcGV0IG9mIHRoZSBndWlkZXMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRmluZERvY3NTbmlwcGV0UHJvYmxlbXNQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIHByb2JsZW1zIGZvdW5kLCBlbXB0eSB3aGVuIGV2ZXJ5IHNuaXBwZXQgY29tcGlsZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kRG9jc1NuaXBwZXRQcm9ibGVtcyhwYXJhbXM6IEZpbmREb2NzU25pcHBldFByb2JsZW1zUGFyYW1zKTogUHJvbWlzZTxEb2NzU25pcHBldFByb2JsZW1bXT4ge1xuICBjb25zdCByb290RGlyZWN0b3J5ID0gcmVzb2x2ZShwYXJhbXMucm9vdERpcmVjdG9yeSk7XG4gIGNvbnN0IGRvY3NEaXJlY3RvcnkgPSBqb2luKHJvb3REaXJlY3RvcnksIHBhcmFtcy5kb2NzRGlyZWN0b3J5ID8/ICdkb2NzL3NyYy9jb250ZW50L2RvY3MnKTtcbiAgY29uc3QgcHJvYmxlbXM6IERvY3NTbmlwcGV0UHJvYmxlbVtdID0gW107XG4gIGNvbnN0IHZpcnR1YWxGaWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBWaXJ0dWFsU25pcHBldEZpbGU+KCk7XG4gIGNvbnN0IHJvb3ROYW1lczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc25pcHBldHNEaXJlY3RvcnkgPSBqb2luKHJvb3REaXJlY3RvcnksICdkb2NzJywgJ19fc25pcHBldHNfXycpO1xuXG4gIGZ1bmN0aW9uIGFkZFZpcnR1YWxGaWxlKHBhdGg6IHN0cmluZywgZmlsZTogVmlydHVhbFNuaXBwZXRGaWxlKTogdm9pZCB7XG4gICAgdmlydHVhbEZpbGVzLnNldChub3JtYWxpemVQYXRoKHBhdGgpLCBmaWxlKTtcbiAgICByb290TmFtZXMucHVzaChwYXRoKTtcbiAgfVxuXG4gIGNvbnN0IHByZWx1ZGUgPSBwYXJhbXMucHJlbHVkZSA/PyAnJztcbiAgaWYgKHByZWx1ZGUgIT09ICcnKSB7XG4gICAgYWRkVmlydHVhbEZpbGUoam9pbihzbmlwcGV0c0RpcmVjdG9yeSwgJ3ByZWx1ZGUudHMnKSwgeyBjb2RlOiBwcmVsdWRlLCBjb2RlU3RhcnRMaW5lOiAxLCBjb250ZXh0TGluZUNvdW50OiAwLCBmaWxlUGF0aDogJzxwcmVsdWRlPicgfSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGd1aWRlUGF0aCBvZiBhd2FpdCBsaXN0R3VpZGVzKGRvY3NEaXJlY3RvcnkpKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSB0b1Bvc2l4KHJlbGF0aXZlKHJvb3REaXJlY3RvcnksIGd1aWRlUGF0aCkpO1xuICAgIGNvbnN0IG1hcmtkb3duID0gYXdhaXQgcmVhZEZpbGUoZ3VpZGVQYXRoLCAndXRmLTgnKTtcbiAgICBmb3IgKGNvbnN0IHNuaXBwZXQgb2YgZXh0cmFjdERvY3NTbmlwcGV0cyhtYXJrZG93bikpIHtcbiAgICAgIGlmIChzbmlwcGV0LnNraXBSZWFzb24gPT09ICcnKSB7XG4gICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgIGZpbGVQYXRoLFxuICAgICAgICAgIGxpbmU6IHNuaXBwZXQuY29kZVN0YXJ0TGluZSAtIDEsXG4gICAgICAgICAgbWVzc2FnZTogJ0EgYHNuaXBwZXQtY2hlY2s6IHNraXBgIG1hcmtlciBtdXN0IGdpdmUgaXRzIHJlYXNvbi4nXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzbmlwcGV0LnNraXBSZWFzb24gIT09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBleHRlbnNpb24gPSBzbmlwcGV0LmlzSmF2YVNjcmlwdCA/ICdqcycgOiAndHMnO1xuICAgICAgY29uc3QgYmFzZU5hbWUgPSBgJHt0b1Bvc2l4KHJlbGF0aXZlKGRvY3NEaXJlY3RvcnksIGd1aWRlUGF0aCkpLnJlcGxhY2VBbGwoJy8nLCAnX18nKX0uTCR7U3RyaW5nKHNuaXBwZXQuY29kZVN0YXJ0TGluZSl9LiR7ZXh0ZW5zaW9ufWA7XG4gICAgICBjb25zdCBjb250ZXh0ID0gc25pcHBldC5jb250ZXh0ID09PSAnJyA/ICcnIDogYCR7c25pcHBldC5jb250ZXh0fVxcbmA7XG4gICAgICBhZGRWaXJ0dWFsRmlsZShqb2luKHNuaXBwZXRzRGlyZWN0b3J5LCBiYXNlTmFtZSksIHtcbiAgICAgICAgY29kZTogYCR7Y29udGV4dH0ke3NuaXBwZXQuY29kZX1cXG5leHBvcnQge307XFxuYCxcbiAgICAgICAgY29kZVN0YXJ0TGluZTogc25pcHBldC5jb2RlU3RhcnRMaW5lLFxuICAgICAgICBjb250ZXh0TGluZUNvdW50OiBjb250ZXh0ID09PSAnJyA/IDAgOiBjb250ZXh0LnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxLFxuICAgICAgICBmaWxlUGF0aFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvYmxlbXMucHVzaCguLi5jb21waWxlU25pcHBldHMoeyBjb21waWxlck9wdGlvbnM6IHBhcmFtcy5jb21waWxlck9wdGlvbnMgPz8ge30sIHJvb3REaXJlY3RvcnksIHJvb3ROYW1lcywgdmlydHVhbEZpbGVzIH0pKTtcbiAgcmV0dXJuIHByb2JsZW1zO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgcHJvYmxlbXMgb25lIHBlciBsaW5lLCBhcyBgcGF0aDpsaW5lIC0gbWVzc2FnZWAuXG4gKlxuICogQHBhcmFtIHByb2JsZW1zIC0gVGhlIHByb2JsZW1zLlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RG9jc1NuaXBwZXRQcm9ibGVtcyhwcm9ibGVtczogcmVhZG9ubHkgRG9jc1NuaXBwZXRQcm9ibGVtW10pOiBzdHJpbmcge1xuICByZXR1cm4gcHJvYmxlbXMubWFwKChwcm9ibGVtKSA9PiBgJHtwcm9ibGVtLmZpbGVQYXRofToke1N0cmluZyhwcm9ibGVtLmxpbmUpfSAtICR7cHJvYmxlbS5tZXNzYWdlfWApLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBjb21waWxlU25pcHBldHMocGFyYW1zOiBDb21waWxlU25pcHBldHNQYXJhbXMpOiBEb2NzU25pcHBldFByb2JsZW1bXSB7XG4gIGNvbnN0IHsgcm9vdERpcmVjdG9yeSwgcm9vdE5hbWVzLCB2aXJ0dWFsRmlsZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgY29uZmlnUGF0aCA9IGpvaW4ocm9vdERpcmVjdG9yeSwgJ3RzY29uZmlnLmpzb24nKTtcbiAgY29uc3QgcGFyc2VkID0gZ2V0UGFyc2VkQ29tbWFuZExpbmVPZkNvbmZpZ0ZpbGUoY29uZmlnUGF0aCwge30sIHtcbiAgICAuLi5zeXMsXG4gICAgb25VblJlY292ZXJhYmxlQ29uZmlnRmlsZURpYWdub3N0aWMoZGlhZ25vc3RpYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgJ1xcbicpKTtcbiAgICB9XG4gIH0pO1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQW4gdW5yZWFkYWJsZSBjb25maWd1cmF0aW9uIHRocm93cyBpbiB0aGUgaGFuZGxlciBhYm92ZSBiZWZvcmUgdGhpcyBjYW4gYmUgcmVhY2hlZC4gKi9cbiAgaWYgKCFwYXJzZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZWFkICR7Y29uZmlnUGF0aH1gKTtcbiAgfVxuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4gIGNvbnN0IGNvbXBpbGVyT3B0aW9uczogQ29tcGlsZXJPcHRpb25zID0ge1xuICAgIC4uLnBhcnNlZC5vcHRpb25zLFxuICAgIC4uLnBhcmFtcy5jb21waWxlck9wdGlvbnMsXG4gICAgYWxsb3dKczogdHJ1ZSxcbiAgICBjaGVja0pzOiB0cnVlLFxuICAgIGNvbXBvc2l0ZTogZmFsc2UsXG4gICAgaW5jcmVtZW50YWw6IGZhbHNlLFxuICAgIG5vRW1pdDogdHJ1ZSxcbiAgICBub1VudXNlZExvY2FsczogZmFsc2UsXG4gICAgbm9VbnVzZWRQYXJhbWV0ZXJzOiBmYWxzZVxuICB9O1xuICBkZWxldGUgY29tcGlsZXJPcHRpb25zLnRzQnVpbGRJbmZvRmlsZTtcblxuICBjb25zdCBob3N0ID0gY3JlYXRlQ29tcGlsZXJIb3N0KGNvbXBpbGVyT3B0aW9ucywgdHJ1ZSk7XG4gIGNvbnN0IG9yaWdpbmFsR2V0U291cmNlRmlsZSA9IGhvc3QuZ2V0U291cmNlRmlsZS5iaW5kKGhvc3QpO1xuICBjb25zdCBvcmlnaW5hbEZpbGVFeGlzdHMgPSBob3N0LmZpbGVFeGlzdHMuYmluZChob3N0KTtcbiAgY29uc3Qgb3JpZ2luYWxSZWFkRmlsZSA9IGhvc3QucmVhZEZpbGUuYmluZChob3N0KTtcbiAgaG9zdC5maWxlRXhpc3RzID0gKGZpbGVOYW1lKTogYm9vbGVhbiA9PiB2aXJ0dWFsRmlsZXMuaGFzKG5vcm1hbGl6ZVBhdGgoZmlsZU5hbWUpKSB8fCBvcmlnaW5hbEZpbGVFeGlzdHMoZmlsZU5hbWUpO1xuICBob3N0LnJlYWRGaWxlID0gKGZpbGVOYW1lKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHZpcnR1YWxGaWxlcy5nZXQobm9ybWFsaXplUGF0aChmaWxlTmFtZSkpPy5jb2RlID8/IG9yaWdpbmFsUmVhZEZpbGUoZmlsZU5hbWUpO1xuICBob3N0LmdldFNvdXJjZUZpbGUgPSAoZmlsZU5hbWUsIGxhbmd1YWdlVmVyc2lvbk9yT3B0aW9ucywgb25FcnJvciwgc2hvdWxkQ3JlYXRlTmV3U291cmNlRmlsZSk6IFNvdXJjZUZpbGUgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHZpcnR1YWxGaWxlID0gdmlydHVhbEZpbGVzLmdldChub3JtYWxpemVQYXRoKGZpbGVOYW1lKSk7XG4gICAgaWYgKHZpcnR1YWxGaWxlKSB7XG4gICAgICBjb25zdCBzY3JpcHRLaW5kID0gZmlsZU5hbWUuZW5kc1dpdGgoJy5qcycpID8gU2NyaXB0S2luZC5KUyA6IFNjcmlwdEtpbmQuVFM7XG4gICAgICByZXR1cm4gY3JlYXRlU291cmNlRmlsZShmaWxlTmFtZSwgdmlydHVhbEZpbGUuY29kZSwgbGFuZ3VhZ2VWZXJzaW9uT3JPcHRpb25zLCB0cnVlLCBzY3JpcHRLaW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdpbmFsR2V0U291cmNlRmlsZShmaWxlTmFtZSwgbGFuZ3VhZ2VWZXJzaW9uT3JPcHRpb25zLCBvbkVycm9yLCBzaG91bGRDcmVhdGVOZXdTb3VyY2VGaWxlKTtcbiAgfTtcblxuICBjb25zdCBwcm9ncmFtID0gY3JlYXRlUHJvZ3JhbSh7IGhvc3QsIG9wdGlvbnM6IGNvbXBpbGVyT3B0aW9ucywgcm9vdE5hbWVzIH0pO1xuICBjb25zdCBwcm9ibGVtczogRG9jc1NuaXBwZXRQcm9ibGVtW10gPSBbXTtcbiAgZm9yIChjb25zdCByb290TmFtZSBvZiByb290TmFtZXMpIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gcHJvZ3JhbS5nZXRTb3VyY2VGaWxlKHJvb3ROYW1lKTtcbiAgICBjb25zdCB2aXJ0dWFsRmlsZSA9IHZpcnR1YWxGaWxlcy5nZXQobm9ybWFsaXplUGF0aChyb290TmFtZSkpO1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFdmVyeSByb290IG5hbWUgaXMgYSB2aXJ0dWFsIGZpbGUgdGhlIHByb2dyYW0gd2FzIGJ1aWx0IGZyb20uICovXG4gICAgaWYgKCFzb3VyY2VGaWxlIHx8ICF2aXJ0dWFsRmlsZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgY29uc3QgaXNKYXZhU2NyaXB0ID0gcm9vdE5hbWUuZW5kc1dpdGgoJy5qcycpO1xuICAgIGNvbnN0IGRpYWdub3N0aWNzID0gWy4uLnByb2dyYW0uZ2V0U3ludGFjdGljRGlhZ25vc3RpY3Moc291cmNlRmlsZSksIC4uLnByb2dyYW0uZ2V0U2VtYW50aWNEaWFnbm9zdGljcyhzb3VyY2VGaWxlKV07XG4gICAgZm9yIChjb25zdCBkaWFnbm9zdGljIG9mIGRpYWdub3N0aWNzKSB7XG4gICAgICBpZiAoSUdOT1JFRF9ESUFHTk9TVElDX0NPREVTLmhhcyhkaWFnbm9zdGljLmNvZGUpIHx8IChpc0phdmFTY3JpcHQgJiYgSkFWQVNDUklQVF9JR05PUkVEX0RJQUdOT1NUSUNfQ09ERVMuaGFzKGRpYWdub3N0aWMuY29kZSkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLyogdjggaWdub3JlIG5leHQgLS0gQSBkaWFnbm9zdGljIG9mIG9uZSBzb3VyY2UgZmlsZSBhbHdheXMgY2FycmllcyBpdHMgcG9zaXRpb24uICovXG4gICAgICBjb25zdCBmaWxlTGluZSA9IGRpYWdub3N0aWMuc3RhcnQgPT09IHVuZGVmaW5lZCA/IDAgOiBzb3VyY2VGaWxlLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKGRpYWdub3N0aWMuc3RhcnQpLmxpbmU7XG4gICAgICBjb25zdCBzbmlwcGV0TGluZSA9IE1hdGgubWF4KDAsIGZpbGVMaW5lIC0gdmlydHVhbEZpbGUuY29udGV4dExpbmVDb3VudCk7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgZmlsZVBhdGg6IHZpcnR1YWxGaWxlLmZpbGVQYXRoLFxuICAgICAgICBsaW5lOiB2aXJ0dWFsRmlsZS5jb2RlU3RhcnRMaW5lICsgc25pcHBldExpbmUsXG4gICAgICAgIG1lc3NhZ2U6IGBUUyR7U3RyaW5nKGRpYWdub3N0aWMuY29kZSl9OiAke2ZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgJyAnKX1gXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByb2JsZW1zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0R3VpZGVzKGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBndWlkZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgYXdhaXQgcmVhZGRpcihkaXJlY3RvcnksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IGpvaW4oZGlyZWN0b3J5LCBlbnRyeS5uYW1lKTtcbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgaWYgKGVudHJ5Lm5hbWUgIT09ICdhcGknKSB7XG4gICAgICAgIGd1aWRlcy5wdXNoKC4uLmF3YWl0IGxpc3RHdWlkZXMoZW50cnlQYXRoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgvXFwubWR4PyQvdS50ZXN0KGVudHJ5Lm5hbWUpKSB7XG4gICAgICBndWlkZXMucHVzaChlbnRyeVBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZ3VpZGVzLnNvcnQoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9Qb3NpeChyZXNvbHZlKHBhdGgpKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpcFByZWZpeChsaW5lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxpbmUuc3RhcnRzV2l0aChwcmVmaXgpID8gbGluZS5zbGljZShwcmVmaXgubGVuZ3RoKSA6IGxpbmUucmVwbGFjZSgvXig/Olxccyo+KSpcXHM/L3UsICcnKTtcbn1cblxuZnVuY3Rpb24gdG9Qb3NpeChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBOEJBLHNCQUdPO0FBQ1AsdUJBSU87QUFDUCx3QkFRTztBQUtQLE1BQU0sb0JBQWtELG9CQUFJLElBQUk7QUFBQSxFQUM5RCxDQUFDLGNBQWMsSUFBSTtBQUFBLEVBQ25CLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDWCxDQUFDLE1BQU0sS0FBSztBQUFBLEVBQ1osQ0FBQyxjQUFjLEtBQUs7QUFDdEIsQ0FBQztBQUtELE1BQU0sMEJBQTBCO0FBRWhDLE1BQU0saUJBQWlCO0FBS3ZCLE1BQU0sMkNBQTJDO0FBQ2pELE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0scUNBQXFDO0FBQzNDLE1BQU0sOENBQThDO0FBQ3BELE1BQU0sMkJBQTJCLG9CQUFJLElBQUk7QUFBQSxFQUN2QztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLENBQUM7QUFNRCxNQUFNLHFDQUFxQztBQUMz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
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Extracts the code snippets of a package's documentation guides and type-checks them against its sources.
|
|
6
|
+
*
|
|
7
|
+
* A guide's snippet is code a reader copies, so a renamed member or a stale import path in it is a bug that ships
|
|
8
|
+
* to the site with every check green. Every fenced `ts`, `typescript`, `js` or `javascript` block in
|
|
9
|
+
* `docs/src/content/docs` is compiled as its own module, with the project's `tsconfig.json`, so an import of the
|
|
10
|
+
* package's own name resolves wherever that configuration sends it (its `paths`, or the `compilerOptions` passed
|
|
11
|
+
* here) and a wrong name fails. A `ts` / `typescript` block is compiled as TypeScript; a `js` / `javascript` block,
|
|
12
|
+
* often a devtools-console recipe, is compiled as JavaScript with `checkJs`, so a wrong member of a typed object
|
|
13
|
+
* still fails while an untyped lookup does not. The generated API reference (`docs/src/content/docs/api`) is
|
|
14
|
+
* skipped: it is rendered from the TSDoc.
|
|
15
|
+
*
|
|
16
|
+
* Three things shape what a snippet is compiled with, each but the first written in the guide as an HTML comment,
|
|
17
|
+
* invisible on the site, on the lines right above the fence:
|
|
18
|
+
*
|
|
19
|
+
* - The names every guide may use without declaring them are the package's `prelude`, compiled as a module of its
|
|
20
|
+
* own (a `declare global` block, with the imports it needs).
|
|
21
|
+
* - `<!-- snippet-check: context <TypeScript> -->` prepends declarations to that one snippet, for the names its
|
|
22
|
+
* prose has already introduced (`declare const linkEl: HTMLAnchorElement;`). Several such lines add up.
|
|
23
|
+
* - `<!-- snippet-check: skip <reason> -->` exempts a snippet that is deliberately not compilable, such as
|
|
24
|
+
* pseudo-code. The reason is required, so a skip is a decision somebody wrote down, never a silent hole.
|
|
25
|
+
*/
|
|
26
|
+
import type { CompilerOptions } from 'typescript' with { 'resolution-mode': 'import' };
|
|
27
|
+
/**
|
|
28
|
+
* Parameters for {@link assertDocsSnippetsCompile}: the same as {@link findDocsSnippetProblems} takes.
|
|
29
|
+
*/
|
|
30
|
+
export type AssertDocsSnippetsCompileParams = FindDocsSnippetProblemsParams;
|
|
31
|
+
/**
|
|
32
|
+
* One fenced code block of a guide.
|
|
33
|
+
*/
|
|
34
|
+
export interface DocsSnippet {
|
|
35
|
+
/**
|
|
36
|
+
* The code, with any blockquote or indentation prefix of the fence stripped.
|
|
37
|
+
*/
|
|
38
|
+
readonly code: string;
|
|
39
|
+
/**
|
|
40
|
+
* The 1-based line of the guide on which the code starts (the line after the opening fence).
|
|
41
|
+
*/
|
|
42
|
+
readonly codeStartLine: number;
|
|
43
|
+
/**
|
|
44
|
+
* The declarations of the `snippet-check: context` markers above the fence, joined by newlines.
|
|
45
|
+
*/
|
|
46
|
+
readonly context: string;
|
|
47
|
+
/**
|
|
48
|
+
* Whether the snippet is JavaScript rather than TypeScript.
|
|
49
|
+
*/
|
|
50
|
+
readonly isJavaScript: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* The language of the fence.
|
|
53
|
+
*/
|
|
54
|
+
readonly language: string;
|
|
55
|
+
/**
|
|
56
|
+
* The reason given by a `snippet-check: skip` marker, or `null` when the snippet is checked.
|
|
57
|
+
*/
|
|
58
|
+
readonly skipReason: null | string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A problem found in a guide's snippet.
|
|
62
|
+
*/
|
|
63
|
+
export interface DocsSnippetProblem {
|
|
64
|
+
/**
|
|
65
|
+
* The guide's path, relative to the package root.
|
|
66
|
+
*/
|
|
67
|
+
readonly filePath: string;
|
|
68
|
+
/**
|
|
69
|
+
* The 1-based line of the guide.
|
|
70
|
+
*/
|
|
71
|
+
readonly line: number;
|
|
72
|
+
/**
|
|
73
|
+
* What is wrong.
|
|
74
|
+
*/
|
|
75
|
+
readonly message: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Parameters for {@link findDocsSnippetProblems}.
|
|
79
|
+
*/
|
|
80
|
+
export interface FindDocsSnippetProblemsParams {
|
|
81
|
+
/**
|
|
82
|
+
* Compiler options laid over the ones `tsconfig.json` gives, for instance `paths` that resolve the package's own
|
|
83
|
+
* name onto its sources when its `tsconfig.json` has none. A relative path in them is not resolved, so pass
|
|
84
|
+
* absolute ones.
|
|
85
|
+
*/
|
|
86
|
+
readonly compilerOptions?: CompilerOptions;
|
|
87
|
+
/**
|
|
88
|
+
* The guides directory, relative to {@link FindDocsSnippetProblemsParams.rootDirectory}.
|
|
89
|
+
*
|
|
90
|
+
* @default `'docs/src/content/docs'`
|
|
91
|
+
*/
|
|
92
|
+
readonly docsDirectory?: string;
|
|
93
|
+
/**
|
|
94
|
+
* The ambient context every snippet is compiled with: the names a guide may use without declaring them, written as
|
|
95
|
+
* a module (`declare global { ... }`, with the imports it needs).
|
|
96
|
+
*
|
|
97
|
+
* @default `''`, no prelude.
|
|
98
|
+
*/
|
|
99
|
+
readonly prelude?: string;
|
|
100
|
+
/**
|
|
101
|
+
* The package root, holding `tsconfig.json`.
|
|
102
|
+
*/
|
|
103
|
+
readonly rootDirectory: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Type-checks every snippet of the guides and throws when one fails, for a `docs:check-snippets` script.
|
|
107
|
+
*
|
|
108
|
+
* @param params - The {@link AssertDocsSnippetsCompileParams}.
|
|
109
|
+
* @returns A promise that resolves when every snippet compiles.
|
|
110
|
+
* @throws {Error} Listing every problem, one per line.
|
|
111
|
+
*/
|
|
112
|
+
export declare function assertDocsSnippetsCompile(params: AssertDocsSnippetsCompileParams): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Extracts the fenced code blocks of the checked languages from a markdown document.
|
|
115
|
+
*
|
|
116
|
+
* A fence inside a blockquote or a list item is recognized too: its prefix (`> `, indentation) is stripped from
|
|
117
|
+
* every line of its code.
|
|
118
|
+
*
|
|
119
|
+
* @param markdown - The markdown document.
|
|
120
|
+
* @returns The snippets, in document order.
|
|
121
|
+
*/
|
|
122
|
+
export declare function extractDocsSnippets(markdown: string): DocsSnippet[];
|
|
123
|
+
/**
|
|
124
|
+
* Type-checks every snippet of the guides.
|
|
125
|
+
*
|
|
126
|
+
* @param params - The {@link FindDocsSnippetProblemsParams}.
|
|
127
|
+
* @returns The problems found, empty when every snippet compiles.
|
|
128
|
+
*/
|
|
129
|
+
export declare function findDocsSnippetProblems(params: FindDocsSnippetProblemsParams): Promise<DocsSnippetProblem[]>;
|
|
130
|
+
/**
|
|
131
|
+
* Formats problems one per line, as `path:line - message`.
|
|
132
|
+
*
|
|
133
|
+
* @param problems - The problems.
|
|
134
|
+
* @returns The formatted text.
|
|
135
|
+
*/
|
|
136
|
+
export declare function formatDocsSnippetProblems(problems: readonly DocsSnippetProblem[]): string;
|