@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.
@@ -51,10 +51,12 @@ __export(docs_site_exports, {
51
51
  "docs-site-assets": () => docs_site_assets,
52
52
  "docs-site-commands": () => docs_site_commands,
53
53
  "docs-site-config": () => docs_site_config,
54
+ "docs-snippets": () => docs_snippets,
54
55
  "link-check": () => link_check,
55
56
  "og-image": () => og_image,
56
57
  "og-image-page": () => og_image_page,
57
58
  "og-images": () => og_images,
59
+ "outdated-references": () => outdated_references,
58
60
  "repo-homepage": () => repo_homepage,
59
61
  "route-data": () => route_data,
60
62
  "satteri-github-alerts": () => satteri_github_alerts,
@@ -80,10 +82,12 @@ var docs_links = __toESM(((module) => module && module.__esModule && 'default' i
80
82
  var docs_site_assets = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./docs-site-assets.cjs')), 1);
81
83
  var docs_site_commands = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./docs-site-commands.cjs')), 1);
82
84
  var docs_site_config = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./docs-site-config.cjs')), 1);
85
+ var docs_snippets = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./docs-snippets.cjs')), 1);
83
86
  var link_check = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./link-check.cjs')), 1);
84
87
  var og_image_page = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./og-image-page.cjs')), 1);
85
88
  var og_image = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./og-image.cjs')), 1);
86
89
  var og_images = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./og-images.cjs')), 1);
90
+ var outdated_references = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./outdated-references.cjs')), 1);
87
91
  var repo_homepage = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./repo-homepage.cjs')), 1);
88
92
  var route_data = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./route-data.cjs')), 1);
89
93
  var satteri_github_alerts = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./satteri-github-alerts.cjs')), 1);
@@ -109,14 +113,16 @@ var unrendered_alerts = __toESM(((module) => module && module.__esModule && 'def
109
113
  "docs-site-assets": null,
110
114
  "docs-site-commands": null,
111
115
  "docs-site-config": null,
116
+ "docs-snippets": null,
112
117
  "link-check": null,
113
118
  "og-image": null,
114
119
  "og-image-page": null,
115
120
  "og-images": null,
121
+ "outdated-references": null,
116
122
  "repo-homepage": null,
117
123
  "route-data": null,
118
124
  "satteri-github-alerts": null,
119
125
  "satteri-relative-links": null,
120
126
  "unrendered-alerts": null
121
127
  });
122
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdhcGktZG9jLWNvbnN0YW50cycgZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5leHBvcnQgKiBhcyAnYXBpLWRvYy1kb2N1bWVudGVkLWZpbGVzJyBmcm9tICcuL2FwaS1kb2MtZG9jdW1lbnRlZC1maWxlcy50cyc7XG5leHBvcnQgKiBhcyAnYXBpLWRvYy1qc2RvYycgZnJvbSAnLi9hcGktZG9jLWpzZG9jLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jLWxpbmstcmVuZGVyaW5nJyBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuZXhwb3J0ICogYXMgJ2FwaS1kb2MtcGFja2FnZS1zaXRlcycgZnJvbSAnLi9hcGktZG9jLXBhY2thZ2Utc2l0ZXMudHMnO1xuZXhwb3J0ICogYXMgJ2FwaS1kb2MtcGFnZS1nZW5lcmF0aW9uJyBmcm9tICcuL2FwaS1kb2MtcGFnZS1nZW5lcmF0aW9uLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jLXJvdXRlLXNlZ21lbnRzJyBmcm9tICcuL2FwaS1kb2Mtcm91dGUtc2VnbWVudHMudHMnO1xuZXhwb3J0ICogYXMgJ2FwaS1kb2Mtc2V0dGluZ3MnIGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5leHBvcnQgKiBhcyAnYXBpLWRvYy1zb3VyY2UtcHJvY2Vzc2luZycgZnJvbSAnLi9hcGktZG9jLXNvdXJjZS1wcm9jZXNzaW5nLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jLXRleHQtdXRpbHMnIGZyb20gJy4vYXBpLWRvYy10ZXh0LXV0aWxzLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jLXR5cGUtbWVyZ2luZycgZnJvbSAnLi9hcGktZG9jLXR5cGUtbWVyZ2luZy50cyc7XG5leHBvcnQgKiBhcyAnYXBpLWRvYy10eXBlcycgZnJvbSAnLi9hcGktZG9jLXR5cGVzLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jcycgZnJvbSAnLi9hcGktZG9jcy50cyc7XG5leHBvcnQgKiBhcyAnYXN0cm8tY29uZmlnJyBmcm9tICcuL2FzdHJvLWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnZG9jcy1saW5rcycgZnJvbSAnLi9kb2NzLWxpbmtzLnRzJztcbmV4cG9ydCAqIGFzICdkb2NzLXNpdGUtYXNzZXRzJyBmcm9tICcuL2RvY3Mtc2l0ZS1hc3NldHMudHMnO1xuZXhwb3J0ICogYXMgJ2RvY3Mtc2l0ZS1jb21tYW5kcycgZnJvbSAnLi9kb2NzLXNpdGUtY29tbWFuZHMudHMnO1xuZXhwb3J0ICogYXMgJ2RvY3Mtc2l0ZS1jb25maWcnIGZyb20gJy4vZG9jcy1zaXRlLWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnbGluay1jaGVjaycgZnJvbSAnLi9saW5rLWNoZWNrLnRzJztcbmV4cG9ydCAqIGFzICdvZy1pbWFnZS1wYWdlJyBmcm9tICcuL29nLWltYWdlLXBhZ2UudHMnO1xuZXhwb3J0ICogYXMgJ29nLWltYWdlJyBmcm9tICcuL29nLWltYWdlLnRzJztcbmV4cG9ydCAqIGFzICdvZy1pbWFnZXMnIGZyb20gJy4vb2ctaW1hZ2VzLnRzJztcbmV4cG9ydCAqIGFzICdyZXBvLWhvbWVwYWdlJyBmcm9tICcuL3JlcG8taG9tZXBhZ2UudHMnO1xuZXhwb3J0ICogYXMgJ3JvdXRlLWRhdGEnIGZyb20gJy4vcm91dGUtZGF0YS50cyc7XG5leHBvcnQgKiBhcyAnc2F0dGVyaS1naXRodWItYWxlcnRzJyBmcm9tICcuL3NhdHRlcmktZ2l0aHViLWFsZXJ0cy50cyc7XG5leHBvcnQgKiBhcyAnc2F0dGVyaS1yZWxhdGl2ZS1saW5rcycgZnJvbSAnLi9zYXR0ZXJpLXJlbGF0aXZlLWxpbmtzLnRzJztcbmV4cG9ydCAqIGFzICd1bnJlbmRlcmVkLWFsZXJ0cycgZnJvbSAnLi91bnJlbmRlcmVkLWFsZXJ0cy50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUEsNkJBQUFBO0FBQUEsRUFBQSxrQ0FBQUM7QUFBQSxFQUFBLHVCQUFBQztBQUFBLEVBQUEsZ0NBQUFDO0FBQUEsRUFBQSwrQkFBQUM7QUFBQSxFQUFBLGlDQUFBQztBQUFBLEVBQUEsZ0NBQUFDO0FBQUEsRUFBQSwwQkFBQUM7QUFBQSxFQUFBLG1DQUFBQztBQUFBLEVBQUEsNEJBQUFDO0FBQUEsRUFBQSw4QkFBQUM7QUFBQSxFQUFBLHVCQUFBQztBQUFBLEVBQUEsa0JBQUFDO0FBQUEsRUFBQSxzQkFBQUM7QUFBQSxFQUFBLG9CQUFBQztBQUFBLEVBQUEsMEJBQUFDO0FBQUEsRUFBQSw0QkFBQUM7QUFBQSxFQUFBLDBCQUFBQztBQUFBLEVBQUEsb0JBQUFDO0FBQUEsRUFBQSxrQkFBQUM7QUFBQSxFQUFBLHVCQUFBQztBQUFBLEVBQUEsbUJBQUFDO0FBQUEsRUFBQSx1QkFBQUM7QUFBQSxFQUFBLG9CQUFBQztBQUFBLEVBQUEsK0JBQUFDO0FBQUEsRUFBQSxnQ0FBQUM7QUFBQSxFQUFBLDJCQUFBQztBQUFBO0FBQUE7QUFFQSxJQUFBMUIsb0JBQXFDO0FBQ3JDLElBQUFDLDJCQUE0QztBQUM1QyxJQUFBQyxnQkFBaUM7QUFDakMsSUFBQUMseUJBQTBDO0FBQzFDLElBQUFDLHdCQUF5QztBQUN6QyxJQUFBQywwQkFBMkM7QUFDM0MsSUFBQUMseUJBQTBDO0FBQzFDLElBQUFDLG1CQUFvQztBQUNwQyxJQUFBQyw0QkFBNkM7QUFDN0MsSUFBQUMscUJBQXNDO0FBQ3RDLElBQUFDLHVCQUF3QztBQUN4QyxJQUFBQyxnQkFBaUM7QUFDakMsSUFBQUMsV0FBNEI7QUFDNUIsSUFBQUMsZUFBZ0M7QUFDaEMsSUFBQUMsYUFBOEI7QUFDOUIsSUFBQUMsbUJBQW9DO0FBQ3BDLElBQUFDLHFCQUFzQztBQUN0QyxJQUFBQyxtQkFBb0M7QUFDcEMsSUFBQUMsYUFBOEI7QUFDOUIsSUFBQUUsZ0JBQWlDO0FBQ2pDLElBQUFELFdBQTRCO0FBQzVCLElBQUFFLFlBQTZCO0FBQzdCLElBQUFDLGdCQUFpQztBQUNqQyxJQUFBQyxhQUE4QjtBQUM5QixJQUFBQyx3QkFBeUM7QUFDekMsSUFBQUMseUJBQTBDO0FBQzFDLElBQUFDLG9CQUFxQzsiLAogICJuYW1lcyI6IFsiYXBpLWRvYy1jb25zdGFudHMiLCAiYXBpLWRvYy1kb2N1bWVudGVkLWZpbGVzIiwgImFwaS1kb2MtanNkb2MiLCAiYXBpLWRvYy1saW5rLXJlbmRlcmluZyIsICJhcGktZG9jLXBhY2thZ2Utc2l0ZXMiLCAiYXBpLWRvYy1wYWdlLWdlbmVyYXRpb24iLCAiYXBpLWRvYy1yb3V0ZS1zZWdtZW50cyIsICJhcGktZG9jLXNldHRpbmdzIiwgImFwaS1kb2Mtc291cmNlLXByb2Nlc3NpbmciLCAiYXBpLWRvYy10ZXh0LXV0aWxzIiwgImFwaS1kb2MtdHlwZS1tZXJnaW5nIiwgImFwaS1kb2MtdHlwZXMiLCAiYXBpLWRvY3MiLCAiYXN0cm8tY29uZmlnIiwgImRvY3MtbGlua3MiLCAiZG9jcy1zaXRlLWFzc2V0cyIsICJkb2NzLXNpdGUtY29tbWFuZHMiLCAiZG9jcy1zaXRlLWNvbmZpZyIsICJsaW5rLWNoZWNrIiwgIm9nLWltYWdlIiwgIm9nLWltYWdlLXBhZ2UiLCAib2ctaW1hZ2VzIiwgInJlcG8taG9tZXBhZ2UiLCAicm91dGUtZGF0YSIsICJzYXR0ZXJpLWdpdGh1Yi1hbGVydHMiLCAic2F0dGVyaS1yZWxhdGl2ZS1saW5rcyIsICJ1bnJlbmRlcmVkLWFsZXJ0cyJdCn0K
128
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdhcGktZG9jLWNvbnN0YW50cycgZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5leHBvcnQgKiBhcyAnYXBpLWRvYy1kb2N1bWVudGVkLWZpbGVzJyBmcm9tICcuL2FwaS1kb2MtZG9jdW1lbnRlZC1maWxlcy50cyc7XG5leHBvcnQgKiBhcyAnYXBpLWRvYy1qc2RvYycgZnJvbSAnLi9hcGktZG9jLWpzZG9jLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jLWxpbmstcmVuZGVyaW5nJyBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuZXhwb3J0ICogYXMgJ2FwaS1kb2MtcGFja2FnZS1zaXRlcycgZnJvbSAnLi9hcGktZG9jLXBhY2thZ2Utc2l0ZXMudHMnO1xuZXhwb3J0ICogYXMgJ2FwaS1kb2MtcGFnZS1nZW5lcmF0aW9uJyBmcm9tICcuL2FwaS1kb2MtcGFnZS1nZW5lcmF0aW9uLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jLXJvdXRlLXNlZ21lbnRzJyBmcm9tICcuL2FwaS1kb2Mtcm91dGUtc2VnbWVudHMudHMnO1xuZXhwb3J0ICogYXMgJ2FwaS1kb2Mtc2V0dGluZ3MnIGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5leHBvcnQgKiBhcyAnYXBpLWRvYy1zb3VyY2UtcHJvY2Vzc2luZycgZnJvbSAnLi9hcGktZG9jLXNvdXJjZS1wcm9jZXNzaW5nLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jLXRleHQtdXRpbHMnIGZyb20gJy4vYXBpLWRvYy10ZXh0LXV0aWxzLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jLXR5cGUtbWVyZ2luZycgZnJvbSAnLi9hcGktZG9jLXR5cGUtbWVyZ2luZy50cyc7XG5leHBvcnQgKiBhcyAnYXBpLWRvYy10eXBlcycgZnJvbSAnLi9hcGktZG9jLXR5cGVzLnRzJztcbmV4cG9ydCAqIGFzICdhcGktZG9jcycgZnJvbSAnLi9hcGktZG9jcy50cyc7XG5leHBvcnQgKiBhcyAnYXN0cm8tY29uZmlnJyBmcm9tICcuL2FzdHJvLWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnZG9jcy1saW5rcycgZnJvbSAnLi9kb2NzLWxpbmtzLnRzJztcbmV4cG9ydCAqIGFzICdkb2NzLXNpdGUtYXNzZXRzJyBmcm9tICcuL2RvY3Mtc2l0ZS1hc3NldHMudHMnO1xuZXhwb3J0ICogYXMgJ2RvY3Mtc2l0ZS1jb21tYW5kcycgZnJvbSAnLi9kb2NzLXNpdGUtY29tbWFuZHMudHMnO1xuZXhwb3J0ICogYXMgJ2RvY3Mtc2l0ZS1jb25maWcnIGZyb20gJy4vZG9jcy1zaXRlLWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnZG9jcy1zbmlwcGV0cycgZnJvbSAnLi9kb2NzLXNuaXBwZXRzLnRzJztcbmV4cG9ydCAqIGFzICdsaW5rLWNoZWNrJyBmcm9tICcuL2xpbmstY2hlY2sudHMnO1xuZXhwb3J0ICogYXMgJ29nLWltYWdlLXBhZ2UnIGZyb20gJy4vb2ctaW1hZ2UtcGFnZS50cyc7XG5leHBvcnQgKiBhcyAnb2ctaW1hZ2UnIGZyb20gJy4vb2ctaW1hZ2UudHMnO1xuZXhwb3J0ICogYXMgJ29nLWltYWdlcycgZnJvbSAnLi9vZy1pbWFnZXMudHMnO1xuZXhwb3J0ICogYXMgJ291dGRhdGVkLXJlZmVyZW5jZXMnIGZyb20gJy4vb3V0ZGF0ZWQtcmVmZXJlbmNlcy50cyc7XG5leHBvcnQgKiBhcyAncmVwby1ob21lcGFnZScgZnJvbSAnLi9yZXBvLWhvbWVwYWdlLnRzJztcbmV4cG9ydCAqIGFzICdyb3V0ZS1kYXRhJyBmcm9tICcuL3JvdXRlLWRhdGEudHMnO1xuZXhwb3J0ICogYXMgJ3NhdHRlcmktZ2l0aHViLWFsZXJ0cycgZnJvbSAnLi9zYXR0ZXJpLWdpdGh1Yi1hbGVydHMudHMnO1xuZXhwb3J0ICogYXMgJ3NhdHRlcmktcmVsYXRpdmUtbGlua3MnIGZyb20gJy4vc2F0dGVyaS1yZWxhdGl2ZS1saW5rcy50cyc7XG5leHBvcnQgKiBhcyAndW5yZW5kZXJlZC1hbGVydHMnIGZyb20gJy4vdW5yZW5kZXJlZC1hbGVydHMudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBLDZCQUFBQTtBQUFBLEVBQUEsa0NBQUFDO0FBQUEsRUFBQSx1QkFBQUM7QUFBQSxFQUFBLGdDQUFBQztBQUFBLEVBQUEsK0JBQUFDO0FBQUEsRUFBQSxpQ0FBQUM7QUFBQSxFQUFBLGdDQUFBQztBQUFBLEVBQUEsMEJBQUFDO0FBQUEsRUFBQSxtQ0FBQUM7QUFBQSxFQUFBLDRCQUFBQztBQUFBLEVBQUEsOEJBQUFDO0FBQUEsRUFBQSx1QkFBQUM7QUFBQSxFQUFBLGtCQUFBQztBQUFBLEVBQUEsc0JBQUFDO0FBQUEsRUFBQSxvQkFBQUM7QUFBQSxFQUFBLDBCQUFBQztBQUFBLEVBQUEsNEJBQUFDO0FBQUEsRUFBQSwwQkFBQUM7QUFBQSxFQUFBLHVCQUFBQztBQUFBLEVBQUEsb0JBQUFDO0FBQUEsRUFBQSxrQkFBQUM7QUFBQSxFQUFBLHVCQUFBQztBQUFBLEVBQUEsbUJBQUFDO0FBQUEsRUFBQSw2QkFBQUM7QUFBQSxFQUFBLHVCQUFBQztBQUFBLEVBQUEsb0JBQUFDO0FBQUEsRUFBQSwrQkFBQUM7QUFBQSxFQUFBLGdDQUFBQztBQUFBLEVBQUEsMkJBQUFDO0FBQUE7QUFBQTtBQUVBLElBQUE1QixvQkFBcUM7QUFDckMsSUFBQUMsMkJBQTRDO0FBQzVDLElBQUFDLGdCQUFpQztBQUNqQyxJQUFBQyx5QkFBMEM7QUFDMUMsSUFBQUMsd0JBQXlDO0FBQ3pDLElBQUFDLDBCQUEyQztBQUMzQyxJQUFBQyx5QkFBMEM7QUFDMUMsSUFBQUMsbUJBQW9DO0FBQ3BDLElBQUFDLDRCQUE2QztBQUM3QyxJQUFBQyxxQkFBc0M7QUFDdEMsSUFBQUMsdUJBQXdDO0FBQ3hDLElBQUFDLGdCQUFpQztBQUNqQyxJQUFBQyxXQUE0QjtBQUM1QixJQUFBQyxlQUFnQztBQUNoQyxJQUFBQyxhQUE4QjtBQUM5QixJQUFBQyxtQkFBb0M7QUFDcEMsSUFBQUMscUJBQXNDO0FBQ3RDLElBQUFDLG1CQUFvQztBQUNwQyxJQUFBQyxnQkFBaUM7QUFDakMsSUFBQUMsYUFBOEI7QUFDOUIsSUFBQUUsZ0JBQWlDO0FBQ2pDLElBQUFELFdBQTRCO0FBQzVCLElBQUFFLFlBQTZCO0FBQzdCLElBQUFDLHNCQUF1QztBQUN2QyxJQUFBQyxnQkFBaUM7QUFDakMsSUFBQUMsYUFBOEI7QUFDOUIsSUFBQUMsd0JBQXlDO0FBQ3pDLElBQUFDLHlCQUEwQztBQUMxQyxJQUFBQyxvQkFBcUM7IiwKICAibmFtZXMiOiBbImFwaS1kb2MtY29uc3RhbnRzIiwgImFwaS1kb2MtZG9jdW1lbnRlZC1maWxlcyIsICJhcGktZG9jLWpzZG9jIiwgImFwaS1kb2MtbGluay1yZW5kZXJpbmciLCAiYXBpLWRvYy1wYWNrYWdlLXNpdGVzIiwgImFwaS1kb2MtcGFnZS1nZW5lcmF0aW9uIiwgImFwaS1kb2Mtcm91dGUtc2VnbWVudHMiLCAiYXBpLWRvYy1zZXR0aW5ncyIsICJhcGktZG9jLXNvdXJjZS1wcm9jZXNzaW5nIiwgImFwaS1kb2MtdGV4dC11dGlscyIsICJhcGktZG9jLXR5cGUtbWVyZ2luZyIsICJhcGktZG9jLXR5cGVzIiwgImFwaS1kb2NzIiwgImFzdHJvLWNvbmZpZyIsICJkb2NzLWxpbmtzIiwgImRvY3Mtc2l0ZS1hc3NldHMiLCAiZG9jcy1zaXRlLWNvbW1hbmRzIiwgImRvY3Mtc2l0ZS1jb25maWciLCAiZG9jcy1zbmlwcGV0cyIsICJsaW5rLWNoZWNrIiwgIm9nLWltYWdlIiwgIm9nLWltYWdlLXBhZ2UiLCAib2ctaW1hZ2VzIiwgIm91dGRhdGVkLXJlZmVyZW5jZXMiLCAicmVwby1ob21lcGFnZSIsICJyb3V0ZS1kYXRhIiwgInNhdHRlcmktZ2l0aHViLWFsZXJ0cyIsICJzYXR0ZXJpLXJlbGF0aXZlLWxpbmtzIiwgInVucmVuZGVyZWQtYWxlcnRzIl0KfQo=
@@ -17,10 +17,12 @@ export * as 'docs-links' from './docs-links.cjs';
17
17
  export * as 'docs-site-assets' from './docs-site-assets.cjs';
18
18
  export * as 'docs-site-commands' from './docs-site-commands.cjs';
19
19
  export * as 'docs-site-config' from './docs-site-config.cjs';
20
+ export * as 'docs-snippets' from './docs-snippets.cjs';
20
21
  export * as 'link-check' from './link-check.cjs';
21
22
  export * as 'og-image-page' from './og-image-page.cjs';
22
23
  export * as 'og-image' from './og-image.cjs';
23
24
  export * as 'og-images' from './og-images.cjs';
25
+ export * as 'outdated-references' from './outdated-references.cjs';
24
26
  export * as 'repo-homepage' from './repo-homepage.cjs';
25
27
  export * as 'route-data' from './route-data.cjs';
26
28
  export * as 'satteri-github-alerts' from './satteri-github-alerts.cjs';
@@ -0,0 +1,118 @@
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
+ "use strict";
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __getOwnPropNames = Object.getOwnPropertyNames;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __export = (target, all) => {
12
+ for (var name in all)
13
+ __defProp(target, name, { get: all[name], enumerable: true });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from))
18
+ if (!__hasOwnProp.call(to, key) && key !== except)
19
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
+ }
21
+ return to;
22
+ };
23
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
+ var outdated_references_exports = {};
25
+ __export(outdated_references_exports, {
26
+ OUTDATED_REFERENCE_ALLOW_MARKER: () => OUTDATED_REFERENCE_ALLOW_MARKER,
27
+ assertNoOutdatedReferences: () => assertNoOutdatedReferences,
28
+ findOutdatedReferences: () => findOutdatedReferences,
29
+ findOutdatedReferencesInText: () => findOutdatedReferencesInText,
30
+ formatOutdatedReferences: () => formatOutdatedReferences
31
+ });
32
+ module.exports = __toCommonJS(outdated_references_exports);
33
+ var import_node_fs = require('node:fs');
34
+ var import_promises = require('node:fs/promises');
35
+ var import_node_path = require('node:path');
36
+ const OUTDATED_REFERENCE_ALLOW_MARKER = "outdated-reference-ok";
37
+ const OUTDATED_REFERENCE_PATTERNS = [
38
+ {
39
+ hint: "a module path or repository link of the retired `obsidian-dev-utils` package; name the `@mnaoumov/*` package that has it now",
40
+ regExp: /obsidian-dev-utils\//u
41
+ },
42
+ {
43
+ hint: "an import of the retired `obsidian-dev-utils` package; import the `@mnaoumov/*` package that has it now",
44
+ regExp: /from\s+['"]obsidian-dev-utils['"]/u
45
+ },
46
+ {
47
+ hint: "the legacy `__obsidianDevUtils` console recipe; use `getSharedAbortController()` or the `Symbol.for('@mnaoumov/typescript-lib/state')` slot",
48
+ regExp: /__obsidianDevUtils\.sharedAbortController/u
49
+ }
50
+ ];
51
+ async function assertNoOutdatedReferences(rootDirectory) {
52
+ const references = await findOutdatedReferences(rootDirectory);
53
+ if (references.length > 0) {
54
+ throw new Error(`${String(references.length)} outdated reference(s):
55
+ ${formatOutdatedReferences(references)}`);
56
+ }
57
+ }
58
+ async function findOutdatedReferences(rootDirectory) {
59
+ const readmePath = (0, import_node_path.join)(rootDirectory, "README.md");
60
+ const files = [
61
+ ...(0, import_node_fs.existsSync)(readmePath) ? [readmePath] : [],
62
+ ...await listFiles((0, import_node_path.join)(rootDirectory, "docs", "src", "content", "docs"), (name) => /\.mdx?$/u.test(name), ["api"]),
63
+ ...await listFiles((0, import_node_path.join)(rootDirectory, "src"), isScannedSource, []),
64
+ ...await listFiles((0, import_node_path.join)(rootDirectory, "scripts"), isScannedSource, [])
65
+ ];
66
+ const references = [];
67
+ for (const file of files) {
68
+ references.push(...findOutdatedReferencesInText((0, import_node_path.relative)(rootDirectory, file).replaceAll("\\", "/"), await (0, import_promises.readFile)(file, "utf-8")));
69
+ }
70
+ return references;
71
+ }
72
+ function findOutdatedReferencesInText(filePath, text) {
73
+ const references = [];
74
+ for (const [index, line] of text.split(/\r?\n/u).entries()) {
75
+ if (line.includes(OUTDATED_REFERENCE_ALLOW_MARKER)) {
76
+ continue;
77
+ }
78
+ for (const pattern of OUTDATED_REFERENCE_PATTERNS) {
79
+ if (pattern.regExp.test(line)) {
80
+ references.push({ filePath, hint: pattern.hint, line: index + 1, text: line.trim() });
81
+ break;
82
+ }
83
+ }
84
+ }
85
+ return references;
86
+ }
87
+ function formatOutdatedReferences(references) {
88
+ return references.map((reference) => `${reference.filePath}:${String(reference.line)} - ${reference.text} (${reference.hint})`).join("\n");
89
+ }
90
+ function isScannedSource(name) {
91
+ return name.endsWith(".ts") && !name.endsWith(".d.ts") && !name.endsWith(".test.ts") && name !== "__merged.ts";
92
+ }
93
+ async function listFiles(directory, isIncluded, excludedDirectories) {
94
+ const files = [];
95
+ if (!(0, import_node_fs.existsSync)(directory)) {
96
+ return files;
97
+ }
98
+ for (const entry of await (0, import_promises.readdir)(directory, { withFileTypes: true })) {
99
+ const entryPath = (0, import_node_path.join)(directory, entry.name);
100
+ if (entry.isDirectory()) {
101
+ if (!excludedDirectories.includes(entry.name)) {
102
+ files.push(...await listFiles(entryPath, isIncluded, excludedDirectories));
103
+ }
104
+ } else if (isIncluded(entry.name)) {
105
+ files.push(entryPath);
106
+ }
107
+ }
108
+ return files.sort();
109
+ }
110
+ // Annotate the CommonJS export names for ESM import in node:
111
+ 0 && (module.exports = {
112
+ OUTDATED_REFERENCE_ALLOW_MARKER,
113
+ assertNoOutdatedReferences,
114
+ findOutdatedReferences,
115
+ findOutdatedReferencesInText,
116
+ formatOutdatedReferences
117
+ });
118
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9vdXRkYXRlZC1yZWZlcmVuY2VzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRmluZHMgcmVmZXJlbmNlcyB0byB0aGUgcmV0aXJlZCBgb2JzaWRpYW4tZGV2LXV0aWxzYCBwYWNrYWdlIHRoYXQgcG9pbnQgYSByZWFkZXIgYXQgc29tZXRoaW5nIHRoYXQgbm8gbG9uZ2VyXG4gKiBleGlzdHM6IG9uZSBvZiBpdHMgbW9kdWxlIHBhdGhzLCBhIGxpbmsgaW50byBpdHMgcmVwb3NpdG9yeSwgb3IgdGhlIGxlZ2FjeSBjb25zb2xlIHJlY2lwZSBmb3IgdGhlIHNoYXJlZCBhYm9ydFxuICogY29udHJvbGxlci5cbiAqXG4gKiBUaGUgYmFyZSBuYW1lIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGlzIE5PVCBmbGFnZ2VkOiBgQG1uYW91bW92L29ic2lkaWFuLWxpYmAga2VlcHMgaXQgb24gcHVycG9zZSBhcyBhIHdpcmUgbmFtZSAoaXRzXG4gKiBkZWJ1ZyBuYW1lc3BhY2UsIENTUyBjbGFzcyBhbmQgZXZlbnQgcHJlZml4KSwgYW5kIGEgbWlncmF0aW9uIG5vdGUgbWF5IG5hbWUgdGhlIHBhY2thZ2UuIFdoYXQgaXMgZmxhZ2dlZCBpcyB0aGVcbiAqIG5hbWUgdXNlZCBhcyBhbiBBRERSRVNTLlxuICpcbiAqIFNjYW5uZWQsIHdoZXJlIHByZXNlbnQ6IGBSRUFETUUubWRgLCB0aGUgZ3VpZGVzIHVuZGVyIGBkb2NzL3NyYy9jb250ZW50L2RvY3NgIChub3QgdGhlIGdlbmVyYXRlZCBBUEkgcmVmZXJlbmNlLFxuICogd2hpY2ggaXMgcmVuZGVyZWQgZnJvbSB0aGUgVFNEb2MgdGhpcyBhbHNvIHNjYW5zKSwgYW5kIGV2ZXJ5IG5vbi10ZXN0IGAudHNgIGZpbGUgdW5kZXIgYHNyYy9gIGFuZCBgc2NyaXB0cy9gLlxuICogYENIQU5HRUxPRy5tZGAgaXMgaGlzdG9yeSBhbmQgaXMgbm90IHNjYW5uZWQuIEEgbGluZSB0aGF0IG5hbWVzIGFuIG9sZCBhZGRyZXNzIG9uIHB1cnBvc2UsIHN1Y2ggYXMgYSBtaWdyYXRpb25cbiAqIG5vdGUsIGNhcnJpZXMgYG91dGRhdGVkLXJlZmVyZW5jZS1va2Agb24gdGhhdCBsaW5lLlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIHJlYWRkaXIsXG4gIHJlYWRGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuLyoqXG4gKiBUaGUgbWFya2VyIHRoYXQgYWxsb3dzIGFuIG91dGRhdGVkIHJlZmVyZW5jZSBvbiBpdHMgbGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE9VVERBVEVEX1JFRkVSRU5DRV9BTExPV19NQVJLRVIgPSAnb3V0ZGF0ZWQtcmVmZXJlbmNlLW9rJztcblxuaW50ZXJmYWNlIE91dGRhdGVkUmVmZXJlbmNlUGF0dGVybiB7XG4gIHJlYWRvbmx5IGhpbnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnRXhwOiBSZWdFeHA7XG59XG5cbmNvbnN0IE9VVERBVEVEX1JFRkVSRU5DRV9QQVRURVJOUzogcmVhZG9ubHkgT3V0ZGF0ZWRSZWZlcmVuY2VQYXR0ZXJuW10gPSBbXG4gIHtcbiAgICBoaW50OiAnYSBtb2R1bGUgcGF0aCBvciByZXBvc2l0b3J5IGxpbmsgb2YgdGhlIHJldGlyZWQgYG9ic2lkaWFuLWRldi11dGlsc2AgcGFja2FnZTsgbmFtZSB0aGUgYEBtbmFvdW1vdi8qYCBwYWNrYWdlIHRoYXQgaGFzIGl0IG5vdycsXG4gICAgcmVnRXhwOiAvb2JzaWRpYW4tZGV2LXV0aWxzXFwvL3VcbiAgfSxcbiAge1xuICAgIGhpbnQ6ICdhbiBpbXBvcnQgb2YgdGhlIHJldGlyZWQgYG9ic2lkaWFuLWRldi11dGlsc2AgcGFja2FnZTsgaW1wb3J0IHRoZSBgQG1uYW91bW92LypgIHBhY2thZ2UgdGhhdCBoYXMgaXQgbm93JyxcbiAgICByZWdFeHA6IC9mcm9tXFxzK1snXCJdb2JzaWRpYW4tZGV2LXV0aWxzWydcIl0vdVxuICB9LFxuICB7XG4gICAgaGludDogJ3RoZSBsZWdhY3kgYF9fb2JzaWRpYW5EZXZVdGlsc2AgY29uc29sZSByZWNpcGU7IHVzZSBgZ2V0U2hhcmVkQWJvcnRDb250cm9sbGVyKClgIG9yIHRoZSBgU3ltYm9sLmZvcihcXCdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RhdGVcXCcpYCBzbG90JyxcbiAgICByZWdFeHA6IC9fX29ic2lkaWFuRGV2VXRpbHNcXC5zaGFyZWRBYm9ydENvbnRyb2xsZXIvdVxuICB9XG5dO1xuXG4vKipcbiAqIEFuIG91dGRhdGVkIHJlZmVyZW5jZSBmb3VuZCBpbiBhIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3V0ZGF0ZWRSZWZlcmVuY2Uge1xuICAvKipcbiAgICogVGhlIGZpbGUncyBwYXRoLCByZWxhdGl2ZSB0byB0aGUgcGFja2FnZSByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogV2hhdCB0byB3cml0ZSBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgaGludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgMS1iYXNlZCBsaW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgbGluZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbGluZSdzIHRleHQsIHRyaW1tZWQuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG91dGRhdGVkIHJlZmVyZW5jZXMgaW4gdGhlIHBhY2thZ2UgYW5kIHRocm93cyB3aGVuIHRoZXJlIGlzIG9uZSwgZm9yIGEgZ2F0ZSB0ZXN0IG9yIHNjcmlwdC5cbiAqXG4gKiBAcGFyYW0gcm9vdERpcmVjdG9yeSAtIFRoZSBwYWNrYWdlIHJvb3QuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZXJlIGlzIG5vbmUuXG4gKiBAdGhyb3dzIHtFcnJvcn0gTGlzdGluZyBldmVyeSByZWZlcmVuY2UsIG9uZSBwZXIgbGluZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2VydE5vT3V0ZGF0ZWRSZWZlcmVuY2VzKHJvb3REaXJlY3Rvcnk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZWZlcmVuY2VzID0gYXdhaXQgZmluZE91dGRhdGVkUmVmZXJlbmNlcyhyb290RGlyZWN0b3J5KTtcbiAgaWYgKHJlZmVyZW5jZXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtTdHJpbmcocmVmZXJlbmNlcy5sZW5ndGgpfSBvdXRkYXRlZCByZWZlcmVuY2Uocyk6XFxuJHtmb3JtYXRPdXRkYXRlZFJlZmVyZW5jZXMocmVmZXJlbmNlcyl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgb3V0ZGF0ZWQgcmVmZXJlbmNlcyBpbiB0aGUgcGFja2FnZS5cbiAqXG4gKiBAcGFyYW0gcm9vdERpcmVjdG9yeSAtIFRoZSBwYWNrYWdlIHJvb3QuXG4gKiBAcmV0dXJucyBUaGUgb3V0ZGF0ZWQgcmVmZXJlbmNlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRPdXRkYXRlZFJlZmVyZW5jZXMocm9vdERpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTxPdXRkYXRlZFJlZmVyZW5jZVtdPiB7XG4gIGNvbnN0IHJlYWRtZVBhdGggPSBqb2luKHJvb3REaXJlY3RvcnksICdSRUFETUUubWQnKTtcbiAgY29uc3QgZmlsZXMgPSBbXG4gICAgLi4uZXhpc3RzU3luYyhyZWFkbWVQYXRoKSA/IFtyZWFkbWVQYXRoXSA6IFtdLFxuICAgIC4uLmF3YWl0IGxpc3RGaWxlcyhqb2luKHJvb3REaXJlY3RvcnksICdkb2NzJywgJ3NyYycsICdjb250ZW50JywgJ2RvY3MnKSwgKG5hbWUpID0+IC9cXC5tZHg/JC91LnRlc3QobmFtZSksIFsnYXBpJ10pLFxuICAgIC4uLmF3YWl0IGxpc3RGaWxlcyhqb2luKHJvb3REaXJlY3RvcnksICdzcmMnKSwgaXNTY2FubmVkU291cmNlLCBbXSksXG4gICAgLi4uYXdhaXQgbGlzdEZpbGVzKGpvaW4ocm9vdERpcmVjdG9yeSwgJ3NjcmlwdHMnKSwgaXNTY2FubmVkU291cmNlLCBbXSlcbiAgXTtcbiAgY29uc3QgcmVmZXJlbmNlczogT3V0ZGF0ZWRSZWZlcmVuY2VbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICByZWZlcmVuY2VzLnB1c2goLi4uZmluZE91dGRhdGVkUmVmZXJlbmNlc0luVGV4dChyZWxhdGl2ZShyb290RGlyZWN0b3J5LCBmaWxlKS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKSwgYXdhaXQgcmVhZEZpbGUoZmlsZSwgJ3V0Zi04JykpKTtcbiAgfVxuICByZXR1cm4gcmVmZXJlbmNlcztcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgb3V0ZGF0ZWQgcmVmZXJlbmNlcyBpbiBvbmUgZmlsZSdzIHRleHQuXG4gKlxuICogQHBhcmFtIGZpbGVQYXRoIC0gVGhlIGZpbGUncyBwYXRoLCB1c2VkIGluIHRoZSByZXN1bHQuXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBmaWxlJ3MgdGV4dC5cbiAqIEByZXR1cm5zIFRoZSBvdXRkYXRlZCByZWZlcmVuY2VzLCBpbiBsaW5lIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE91dGRhdGVkUmVmZXJlbmNlc0luVGV4dChmaWxlUGF0aDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBPdXRkYXRlZFJlZmVyZW5jZVtdIHtcbiAgY29uc3QgcmVmZXJlbmNlczogT3V0ZGF0ZWRSZWZlcmVuY2VbXSA9IFtdO1xuICBmb3IgKGNvbnN0IFtpbmRleCwgbGluZV0gb2YgdGV4dC5zcGxpdCgvXFxyP1xcbi91KS5lbnRyaWVzKCkpIHtcbiAgICBpZiAobGluZS5pbmNsdWRlcyhPVVREQVRFRF9SRUZFUkVOQ0VfQUxMT1dfTUFSS0VSKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBPVVREQVRFRF9SRUZFUkVOQ0VfUEFUVEVSTlMpIHtcbiAgICAgIGlmIChwYXR0ZXJuLnJlZ0V4cC50ZXN0KGxpbmUpKSB7XG4gICAgICAgIHJlZmVyZW5jZXMucHVzaCh7IGZpbGVQYXRoLCBoaW50OiBwYXR0ZXJuLmhpbnQsIGxpbmU6IGluZGV4ICsgMSwgdGV4dDogbGluZS50cmltKCkgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVmZXJlbmNlcztcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHJlZmVyZW5jZXMgb25lIHBlciBsaW5lLCBhcyBgcGF0aDpsaW5lIC0gdGV4dCAoaGludClgLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIC0gVGhlIHJlZmVyZW5jZXMuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRPdXRkYXRlZFJlZmVyZW5jZXMocmVmZXJlbmNlczogcmVhZG9ubHkgT3V0ZGF0ZWRSZWZlcmVuY2VbXSk6IHN0cmluZyB7XG4gIHJldHVybiByZWZlcmVuY2VzLm1hcCgocmVmZXJlbmNlKSA9PiBgJHtyZWZlcmVuY2UuZmlsZVBhdGh9OiR7U3RyaW5nKHJlZmVyZW5jZS5saW5lKX0gLSAke3JlZmVyZW5jZS50ZXh0fSAoJHtyZWZlcmVuY2UuaGludH0pYCkuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGlzU2Nhbm5lZFNvdXJjZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIG5hbWUuZW5kc1dpdGgoJy50cycpICYmICFuYW1lLmVuZHNXaXRoKCcuZC50cycpICYmICFuYW1lLmVuZHNXaXRoKCcudGVzdC50cycpICYmIG5hbWUgIT09ICdfX21lcmdlZC50cyc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3RGaWxlcyhkaXJlY3Rvcnk6IHN0cmluZywgaXNJbmNsdWRlZDogKG5hbWU6IHN0cmluZykgPT4gYm9vbGVhbiwgZXhjbHVkZWREaXJlY3RvcmllczogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoIWV4aXN0c1N5bmMoZGlyZWN0b3J5KSkge1xuICAgIHJldHVybiBmaWxlcztcbiAgfVxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGF3YWl0IHJlYWRkaXIoZGlyZWN0b3J5LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSkpIHtcbiAgICBjb25zdCBlbnRyeVBhdGggPSBqb2luKGRpcmVjdG9yeSwgZW50cnkubmFtZSk7XG4gICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGlmICghZXhjbHVkZWREaXJlY3Rvcmllcy5pbmNsdWRlcyhlbnRyeS5uYW1lKSkge1xuICAgICAgICBmaWxlcy5wdXNoKC4uLmF3YWl0IGxpc3RGaWxlcyhlbnRyeVBhdGgsIGlzSW5jbHVkZWQsIGV4Y2x1ZGVkRGlyZWN0b3JpZXMpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzSW5jbHVkZWQoZW50cnkubmFtZSkpIHtcbiAgICAgIGZpbGVzLnB1c2goZW50cnlQYXRoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGVzLnNvcnQoKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaUJBLHFCQUEyQjtBQUMzQixzQkFHTztBQUNQLHVCQUdPO0FBS0EsTUFBTSxrQ0FBa0M7QUFPL0MsTUFBTSw4QkFBbUU7QUFBQSxFQUN2RTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRSxNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7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
@@ -0,0 +1,72 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Finds references to the retired `obsidian-dev-utils` package that point a reader at something that no longer
6
+ * exists: one of its module paths, a link into its repository, or the legacy console recipe for the shared abort
7
+ * controller.
8
+ *
9
+ * The bare name `obsidian-dev-utils` is NOT flagged: `@mnaoumov/obsidian-lib` keeps it on purpose as a wire name (its
10
+ * debug namespace, CSS class and event prefix), and a migration note may name the package. What is flagged is the
11
+ * name used as an ADDRESS.
12
+ *
13
+ * Scanned, where present: `README.md`, the guides under `docs/src/content/docs` (not the generated API reference,
14
+ * which is rendered from the TSDoc this also scans), and every non-test `.ts` file under `src/` and `scripts/`.
15
+ * `CHANGELOG.md` is history and is not scanned. A line that names an old address on purpose, such as a migration
16
+ * note, carries `outdated-reference-ok` on that line.
17
+ */
18
+ /**
19
+ * The marker that allows an outdated reference on its line.
20
+ */
21
+ export declare const OUTDATED_REFERENCE_ALLOW_MARKER = "outdated-reference-ok";
22
+ /**
23
+ * An outdated reference found in a file.
24
+ */
25
+ export interface OutdatedReference {
26
+ /**
27
+ * The file's path, relative to the package root.
28
+ */
29
+ readonly filePath: string;
30
+ /**
31
+ * What to write instead.
32
+ */
33
+ readonly hint: string;
34
+ /**
35
+ * The 1-based line.
36
+ */
37
+ readonly line: number;
38
+ /**
39
+ * The line's text, trimmed.
40
+ */
41
+ readonly text: string;
42
+ }
43
+ /**
44
+ * Finds the outdated references in the package and throws when there is one, for a gate test or script.
45
+ *
46
+ * @param rootDirectory - The package root.
47
+ * @returns A promise that resolves when there is none.
48
+ * @throws {Error} Listing every reference, one per line.
49
+ */
50
+ export declare function assertNoOutdatedReferences(rootDirectory: string): Promise<void>;
51
+ /**
52
+ * Finds the outdated references in the package.
53
+ *
54
+ * @param rootDirectory - The package root.
55
+ * @returns The outdated references.
56
+ */
57
+ export declare function findOutdatedReferences(rootDirectory: string): Promise<OutdatedReference[]>;
58
+ /**
59
+ * Finds the outdated references in one file's text.
60
+ *
61
+ * @param filePath - The file's path, used in the result.
62
+ * @param text - The file's text.
63
+ * @returns The outdated references, in line order.
64
+ */
65
+ export declare function findOutdatedReferencesInText(filePath: string, text: string): OutdatedReference[];
66
+ /**
67
+ * Formats references one per line, as `path:line - text (hint)`.
68
+ *
69
+ * @param references - The references.
70
+ * @returns The formatted text.
71
+ */
72
+ export declare function formatOutdatedReferences(references: readonly OutdatedReference[]): string;
@@ -200,7 +200,11 @@ function slugifyOverloadKey(overloadKey) {
200
200
  }
201
201
  const OG_DESCRIPTION_MAX_LENGTH = 160;
202
202
  function stripMarkdown(text) {
203
- const plain = replaceRegExpMatches(text, /\{@link\s+(?:[^|}]+?)(?:\s*\|\s*(?<display>[^}]+?))?\}/g, (match) => getOptionalNamedGroup(match, "display") ?? "").replaceAll(/\[(?<text>[^\]]+)\]\([^)]+\)/g, "$<text>").replaceAll(/[`*_~]/g, "").replaceAll(/\s+/g, " ").trim();
203
+ const plain = replaceRegExpMatches(
204
+ text,
205
+ /\{@link\s+(?<target>[^|}]+?)(?:\s*\|\s*(?<display>[^}]+?))?\s*\}/g,
206
+ (match) => getOptionalNamedGroup(match, "display") ?? getMandatoryNamedGroup(match, "target")
207
+ ).replaceAll(/\[(?<text>[^\]]+)\]\([^)]+\)/g, "$<text>").replaceAll(/[`*_~]/g, "").replaceAll(/\s+/g, " ").trim();
204
208
  if (plain.length <= OG_DESCRIPTION_MAX_LENGTH) {
205
209
  return plain;
206
210
  }
@@ -236,4 +240,4 @@ export {
236
240
  stripMarkdown,
237
241
  truncateSignature
238
242
  };
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10ZXh0LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUZXh0L21hcmtkb3duL2VzY2FwaW5nIHV0aWxpdGllcyBhbmQgaWRlbnRpZmllciBoZWxwZXJzIGZvciB0aGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLlxuICovXG5cbmltcG9ydCB7XG4gIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAsXG4gIGdldE9wdGlvbmFsTmFtZWRHcm91cFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWFya2Rvd25TZWdtZW50LFxuICBNZW1iZXJJbmZvLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbiB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7IHRvUm91dGVTZWdtZW50IH0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuaW50ZXJmYWNlIE9wZW5GZW5jZSB7XG4gIHJlYWRvbmx5IGNsb3NlUmU6IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbGFuZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gb3ZlcmxvYWQga2V5IGZvciBtZXRob2RzIHdpdGggZGlzdGluZ3Vpc2hpbmcgZmlyc3QgcGFyYW0gKGUuZy4gb24oJ2NoYW5nZWQnLC4uLikpXG4gKlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyBUaGUgb3ZlcmxvYWQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJsb2FkS2V5KG1ldGhvZDogTWVtYmVySW5mbyk6IHN0cmluZyB7XG4gIGlmIChFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0UGFyYW1ldGVyID0gbWV0aG9kLnBhcmFtZXRlcnNbMF07XG4gICAgaWYgKGZpcnN0UGFyYW1ldGVyPy50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgZmlyc3RQYXJhbWV0ZXI/LnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gZmlyc3RQYXJhbWV0ZXIudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKTtcbiAgICAgIHJldHVybiBgJHttZXRob2QubmFtZX0oJHtub3JtYWxpemVkVHlwZX0pYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGhvZC5uYW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvbGRlciBhIGZpbGUgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBhYm91dCB0byBiZSB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEVzY2FwZSB0ZXh0IGZvciB1c2UgaW5zaWRlIGEgSlMgc3RyaW5nIHdpdGhpbiBhIEpTWCBleHByZXNzaW9uOiB7Li4ue2tleTogXCIuLi5cIn19XG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSnNTdHJpbmcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2VBbGwoJ1wiJywgU3RyaW5nLnJhd2BcXFwiYCkucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgdXNlIGluc2lkZSBhIEpTWCBhdHRyaWJ1dGU6IGF0dHI9XCIuLi5cIiAoTURYIHVzZXMgSFRNTC1zdHlsZSBwYXJzaW5nKVxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUpzeEF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JykucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JykucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgYSBtYXJrZG93biB0YWJsZSBjZWxsLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ3wnLCBTdHJpbmcucmF3YFxcfGApLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIHNvIE1EWCBkb2VzIG5vdCByZWFkIHRoZW0gYXMgSlNYLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlQnJhY2tldHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnPCcsIFN0cmluZy5yYXdgXFw8YCkucmVwbGFjZUFsbCgnPicsIFN0cmluZy5yYXdgXFw+YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGN1cmx5IGJyYWNlcyBpbiBNRFggbWFya2Rvd24gY29udGVudCB0byBwcmV2ZW50IEpTWCBleHByZXNzaW9uIHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVNZHhCcmFjZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRleHQgZm9yIGEgZG91YmxlLXF1b3RlZCBZQU1MIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVlhbWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbn1cblxuY29uc3QgU0lHTkFUVVJFX01BWF9MRU5HVEggPSAxNjA7XG5jb25zdCBJTVBPUlRfUVVBTElGSUVSX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pW15cIiddK1xcazxRdW90ZT5cXClcXC4vZztcbmNvbnN0IElNUE9SVF9UWVBFX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pKD88UGF0aD5bXlwiJ10rKVxcazxRdW90ZT5cXClcXC4oPzxOYW1lPltBLVphLXpfJF1bXFx3JF0qKS9nO1xuXG4vKipcbiAqIEVzY2FwZSBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgKGA8YCwgYHtgLCBgfWApIGluIHByb3NlIHRleHQsIHdoaWxlIGxlYXZpbmcgaW5saW5lIGNvZGUgc3BhbnNcbiAqIChgYCBgY29kZWAgYGApIGFuZCBtYXJrZG93biBsaW5rcyAoYFt0ZXh0XSh1cmwpYCkgdW50b3VjaGVkLiBNRFggcGFyc2VzIGJhcmUgYDxgL2B7YCBpbiBwcm9zZSBhc1xuICogSlNYL2V4cHJlc3Npb25zLCBzbyB0aGV5IG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQgdG8gcmVuZGVyIGFzIGxpdGVyYWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBwcm9zZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBwcm9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keFByb3NlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHByb3RlY3RlZFBhdHRlcm4gPSAvYFteYF0qYHxcXFtbXlxcXV0qXFxdXFwoW14pXSpcXCkvZztcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHByb3RlY3RlZFBhdHRlcm4pKSB7XG4gICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICByZXN1bHQgKz0gZXNjYXBlTWR4UHJvc2VDaGFycyh0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICByZXN1bHQgKz0gbWF0Y2hbMF07XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0ICs9IGVzY2FwZU1keFByb3NlQ2hhcnModGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBzaW5nbGUgbmV3bGluZXMgd2l0aGluIHBhcmFncmFwaHMgdG8gc3BhY2VzLCBwcmVzZXJ2ZSBkb3VibGUgbmV3bGluZXMgYXMgcGFyYWdyYXBoIGJyZWFrcy5cbiAqIEZlbmNlZCBjb2RlIGJsb2NrcyAoYmFja3RpY2sgb3IgdGlsZGUgZmVuY2VzKSBhcmUgcHJlc2VydmVkIHZlcmJhdGltIOKAlCB0aGVpciBpbnRlcm5hbCBuZXdsaW5lcyBhcmUgTk9UIGZvbGRlZCxcbiAqIHNvIGVtYmVkZGVkIGNvZGUgc3Vydml2ZXMgdG8gYmUgcmUtZW1pdHRlZCBhcyBhIHJlYWwgY29kZSBmZW5jZSBkb3duc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudE1hcmtkb3duKHRleHQpO1xuICByZXR1cm4gc2VnbWVudHNcbiAgICAubWFwKChzZWcpID0+IHtcbiAgICAgIHJldHVybiBzZWcudHlwZSA9PT0gJ2NvZGUnXG4gICAgICAgID8gYFxcYFxcYFxcYCR7c2VnLmxhbmd9XFxuJHtzZWcudGV4dH1cXG5cXGBcXGBcXGBgXG4gICAgICAgIDogc2VnLnRleHRcbiAgICAgICAgICAuc3BsaXQoL1xcbnsyLH0vKVxuICAgICAgICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJlcGxhY2VBbGwoJ1xcbicsICcgJykpXG4gICAgICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICAgIH0pXG4gICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCdcXG5cXG4nKTtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSdzIG5hbWUgd2l0aCBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRob3V0IHRoZWlyIGNvbnN0cmFpbnRzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIG5hbWUgd2l0aCBpdHMgYmFyZSB0eXBlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgY29uc3QgYmFyZVBhcmFtcyA9IGluZm8udHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpKTtcbiAgcmV0dXJuIGAke25hbWV9PCR7YmFyZVBhcmFtcy5qb2luKCcsICcpfT5gO1xufVxuXG4vKipcbiAqIEVtaXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogVGhlIHN1YnBhdGggZXF1YWxzIHRoZSB0eXBlJ3MgbmFtZXNwYWNlIChpdHMgc291cmNlIHBhdGggcmVsYXRpdmUgdG8gYHNyY2ApLCBzbyBgc3JjL3N0cmluZy50c2Agb2ZcbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGlzIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nYC5cbiAqXG4gKiBJbnRlcmZhY2VzIC8gdHlwZSBhbGlhc2VzIC8gZW51bXMgYXJlIGltcG9ydGVkIHdpdGggYGltcG9ydCB0eXBlYDsgY2xhc3NlcyAvIGZ1bmN0aW9ucyAvXG4gKiB2YXJpYWJsZXMgd2l0aCBhIHZhbHVlIGBpbXBvcnRgLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBpbXBvcnQgc3RhdGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1wb3J0U3RhdGVtZW50KGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgaXNUeXBlT25seSA9IFsnZW51bScsICdpbnRlcmZhY2UnLCAndHlwZSddLmluY2x1ZGVzKGluZm8ua2luZCk7XG4gIGNvbnN0IGltcG9ydEtleXdvcmQgPSBpc1R5cGVPbmx5ID8gJ2ltcG9ydCB0eXBlJyA6ICdpbXBvcnQnO1xuICByZXR1cm4gYCR7aW1wb3J0S2V5d29yZH0geyAke2luZm8ubmFtZX0gfSBmcm9tICcke2dldEFwaURvY1NldHRpbmdzKCkucGFja2FnZU5hbWV9LyR7aW5mby5uYW1lc3BhY2V9JztgO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXIgYSBuYW1lc3BhY2UncyBwYWdlcyBhcmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIG1lbWJlciBuYW1lIGZvciB1c2UgaW4gYSBjYXNlLVBSRVNFUlZFRCBVUkwvcm91dGUgc2VnbWVudCAoZS5nLiBgc2hvd05vdGljZWApLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG1lbWJlcidzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgY2FzZS1wcmVzZXJ2ZWQgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlclJvdXRlU2VnbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1Z2lmeU1lbWJlck5hbWUobmFtZSk7XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBtZW1iZXIgbmFtZSBmb3IgdXNlIGFzIGFuIG9uLWRpc2sgRklMRU5BTUUgKGxvd2VyY2FzZWQsIGNvbGxpc2lvbi1zYWZlKS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBtZW1iZXIncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGxvd2VyY2FzZWQgZmlsZSBuYW1lIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b1JvdXRlU2VnbWVudChzbHVnaWZ5TWVtYmVyTmFtZShuYW1lKSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGEgY2FzZS1QUkVTRVJWRUQgVVJML3JvdXRlIHNlZ21lbnQ6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBvdmVybG9hZEtleSAtIFRoZSBvdmVybG9hZCBrZXksIGUuZy4gYG9uKCdjaGFuZ2VkJylgLlxuICogQHJldHVybnMgVGhlIGNhc2UtcHJlc2VydmVkIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybG9hZFJvdXRlU2VnbWVudChvdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNsdWdpZnlPdmVybG9hZEtleShvdmVybG9hZEtleSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGFuIG9uLWRpc2sgRklMRU5BTUU6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkIChsb3dlcmNhc2VkKS5cbiAqXG4gKiBAcGFyYW0gb3ZlcmxvYWRLZXkgLSBUaGUgb3ZlcmxvYWQga2V5LCBlLmcuIGBvbignY2hhbmdlZCcpYC5cbiAqIEByZXR1cm5zIFRoZSBsb3dlcmNhc2VkIGZpbGUgbmFtZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcmxvYWRTbHVnKG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9Sb3V0ZVNlZ21lbnQoc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5KSk7XG59XG5cbi8qKlxuICogUmVwbGFjZSBldmVyeSBtYXRjaCBvZiBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gd2l0aCB3aGF0IGEgcmVwbGFjZXIgYnVpbGRzIGZyb20gdGhlIG1hdGNoLiBUaGUgdHlwZWRcbiAqIGNvdW50ZXJwYXJ0IG9mIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgIHdpdGggYSBjYWxsYmFjaywgd2hvc2UgYXJndW1lbnRzIGFyZSB0eXBlZCBvbmx5IHBvc2l0aW9uYWxseS5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb247IGl0IG11c3QgY2FycnkgdGhlIGBnYCBmbGFnLlxuICogQHBhcmFtIHJlcGxhY2VyIC0gQnVpbGRzIHRoZSByZXBsYWNlbWVudCBvZiBvbmUgbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIGV2ZXJ5IG1hdGNoIHJlcGxhY2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dDogc3RyaW5nLCByZWdFeHA6IFJlZ0V4cCwgcmVwbGFjZXI6IChtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSkgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHJlZ0V4cCkpIHtcbiAgICByZXN1bHQgKz0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KSArIHJlcGxhY2VyKG1hdGNoKTtcbiAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgdGV4dC5zbGljZShsYXN0SW5kZXgpO1xufVxuXG4vKipcbiAqIFNwbGl0IG1hcmtkb3duIHRleHQgaW50byBhbiBvcmRlcmVkIGxpc3Qgb2YgcHJvc2UgYW5kIGZlbmNlZC1jb2RlIHNlZ21lbnRzLlxuICogQSBmZW5jZWQtY29kZSBzZWdtZW50IGlzIGRlbGltaXRlZCBieSBhIGxpbmUgb2YgMysgYmFja3RpY2tzIG9yIHRpbGRlczsgaXRzIGNvbnRlbnQgaXMgY2FwdHVyZWRcbiAqIHJhdyAobmV2ZXIgZXNjYXBlZCkgc28gaXQgY2FuIGJlIHJlLWVtaXR0ZWQgYXMgYSBsaXRlcmFsIE1EWCBjb2RlIGZlbmNlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgc2VnbWVudHMsIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VnbWVudE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IE1hcmtkb3duU2VnbWVudFtdIHtcbiAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgc2VnbWVudHM6IE1hcmtkb3duU2VnbWVudFtdID0gW107XG4gIGxldCBwcm9zZUJ1ZmZlcjogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGNvZGVMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IG9wZW5GZW5jZTogbnVsbCB8IE9wZW5GZW5jZSA9IG51bGw7XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmIChvcGVuRmVuY2UpIHtcbiAgICAgIGlmIChvcGVuRmVuY2UuY2xvc2VSZS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goeyBsYW5nOiBvcGVuRmVuY2UubGFuZywgdGV4dDogY29kZUxpbmVzLmpvaW4oJ1xcbicpLCB0eXBlOiAnY29kZScgfSk7XG4gICAgICAgIG9wZW5GZW5jZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5NYXRjaCA9IC9eXFxzKig/PGZlbmNlPig/PGZlbmNlQ2hhcj5bYH5dKVxcazxmZW5jZUNoYXI+ezIsfSkoPzxsYW5nPi4qKSQvLmV4ZWMobGluZSk7XG4gICAgaWYgKG9wZW5NYXRjaCkge1xuICAgICAgY29uc3QgZmVuY2VDaGFycyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2UnKTtcbiAgICAgIGNvbnN0IGZlbmNlQ2hhciA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2VDaGFyJyk7XG4gICAgICBmbHVzaFByb3NlKCk7XG4gICAgICBjb2RlTGluZXMgPSBbXTtcbiAgICAgIG9wZW5GZW5jZSA9IHtcbiAgICAgICAgY2xvc2VSZTogbmV3IFJlZ0V4cChgXlxcXFxzKlxcXFwke2ZlbmNlQ2hhcn17JHtTdHJpbmcoZmVuY2VDaGFycy5sZW5ndGgpfSx9XFxcXHMqJGApLFxuICAgICAgICBsYW5nOiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG9wZW5NYXRjaCwgJ2xhbmcnKS50cmltKClcbiAgICAgIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcHJvc2VCdWZmZXIucHVzaChsaW5lKTtcbiAgfVxuICAvLyBBbiB1bmNsb3NlZCBmZW5jZSBydW5zIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuXG4gIGlmIChvcGVuRmVuY2UpIHtcbiAgICBzZWdtZW50cy5wdXNoKHsgbGFuZzogb3BlbkZlbmNlLmxhbmcsIHRleHQ6IGNvZGVMaW5lcy5qb2luKCdcXG4nKSwgdHlwZTogJ2NvZGUnIH0pO1xuICB9XG4gIGZsdXNoUHJvc2UoKTtcbiAgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGZ1bmN0aW9uIGZsdXNoUHJvc2UoKTogdm9pZCB7XG4gICAgaWYgKHByb3NlQnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlZ21lbnRzLnB1c2goeyB0ZXh0OiBwcm9zZUJ1ZmZlci5qb2luKCdcXG4nKSwgdHlwZTogJ3Byb3NlJyB9KTtcbiAgICBwcm9zZUJ1ZmZlciA9IFtdO1xuICB9XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIGBpbXBvcnQoXCLigKZcIilgIHF1YWxpZmllcnMgdHMtbW9ycGggcHJpbnRzIGJlZm9yZSBhIHR5cGUgdGhhdCBpcyBub3QgaW4gc2NvcGUsIHJlY29yZGluZyBlYWNoIG9uZSdzXG4gKiBkZWNsYXJhdGlvbiBmaWxlIGZpcnN0LCBzaW5jZSBpdCBpcyB0aGUgb25lIHBsYWNlIGEgcHJpbnRlZCB0eXBlIG5hbWVzIHdoZXJlIGl0IHdhcyBkZWNsYXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgcHJpbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIHR5cGUgd2l0aG91dCBpdHMgaW1wb3J0IHF1YWxpZmllcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGlmeVR5cGUodHlwZVRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdHlwZVRleHQubWF0Y2hBbGwoSU1QT1JUX1RZUEVfUkVHX0VYUCkpIHtcbiAgICByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnTmFtZScpLCBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnUGF0aCcpKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlVGV4dC5yZXBsYWNlQWxsKElNUE9SVF9RVUFMSUZJRVJfUkVHX0VYUCwgJycpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIGNvZGUgc2lnbmF0dXJlIGZvciB0aGUgYHNpZ25hdHVyZTpgIGZyb250bWF0dGVyIC8gT0cgY2FyZDogY29sbGFwc2Ugd2hpdGVzcGFjZSB0b1xuICogc2luZ2xlIHNwYWNlcyBhbmQgdHJ1bmNhdGUgdG8gYSBjYXJkLWZyaWVuZGx5IGxlbmd0aCB3aXRoIGFuIGVsbGlwc2lzLlxuICpcbiAqIEBwYXJhbSBzaWduYXR1cmUgLSBUaGUgc2lnbmF0dXJlLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjb2xsYXBzZWQgPSBzaWduYXR1cmUucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgcmV0dXJuIGNvbGxhcHNlZC5sZW5ndGggPD0gU0lHTkFUVVJFX01BWF9MRU5HVEggPyBjb2xsYXBzZWQgOiBgJHtjb2xsYXBzZWQuc2xpY2UoMCwgU0lHTkFUVVJFX01BWF9MRU5HVEggLSAxKS50cmltRW5kKCl94oCmYDtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU1lbWJlck5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY2xlYW5lZCA9IG5hbWVcbiAgICAucmVwbGFjZUFsbCgvXltcIiddfFtcIiddJC9nLCAnJylcbiAgICAucmVwbGFjZUFsbCgvW15hLXpBLVowLTldL2csICctJylcbiAgICAucmVwbGFjZUFsbCgvLSsvZywgJy0nKVxuICAgIC5yZXBsYWNlQWxsKC9eLXwtJC9nLCAnJyk7XG4gIC8vIEEgbWVtYmVyIGxpdGVyYWxseSBuYW1lZCBgaW5kZXhgIHdvdWxkIHdyaXRlIGBpbmRleC5tZHhgLCBjb2xsaWRpbmcgd2l0aCB0aGUgdHlwZS1vdmVydmlld1xuICAvLyBgaW5kZXgubWR4YCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKG9uZSBzaWxlbnRseSBvdmVyd3JpdGVzIHRoZSBvdGhlciwgNDA0LWluZyB0aGUgbG9zZXIpLlxuICByZXR1cm4gY2xlYW5lZCA9PT0gJ2luZGV4JyA/ICdpbmRleC1tZW1iZXInIDogKGNsZWFuZWQgfHwgJ3VubmFtZWQnKTtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzbHVnID0gb3ZlcmxvYWRLZXlcbiAgICAucmVwbGFjZUFsbCgvW1wiJygpXS9nLCAnICcpXG4gICAgLnJlcGxhY2VBbGwoL1teYS16QS1aMC05XFxzXS9nLCAnJylcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2VBbGwoL1xccysvZywgJy0nKTtcbiAgLy8gQSBtZXRob2QgbmFtZWQgYGluZGV4YCB3b3VsZCB3cml0ZSBgaW5kZXgubWR4YCBvdmVyIHRoZSB0eXBlLW92ZXJ2aWV3IHBhZ2UsIGV4YWN0bHkgYXMgYSBwcm9wZXJ0eSB3b3VsZC5cbiAgcmV0dXJuIHNsdWcgPT09ICdpbmRleCcgPyAnaW5kZXgtbWVtYmVyJyA6IHNsdWc7XG59XG5cbmNvbnN0IE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggPSAxNjA7XG5cbi8qKlxuICogU3RyaXAgbWFya2Rvd24gZm9ybWF0dGluZyB0byBwbGFpbiB0ZXh0IGZvciB1c2UgaW4gbWV0YSBkZXNjcmlwdGlvbnNcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQsIGF0IG1vc3QgMTYwIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBsYWluID0gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dCwgL1xce0BsaW5rXFxzKyg/OltefH1dKz8pKD86XFxzKlxcfFxccyooPzxkaXNwbGF5PltefV0rPykpP1xcfS9nLCAobWF0Y2gpID0+IGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ2Rpc3BsYXknKSA/PyAnJylcbiAgICAucmVwbGFjZUFsbCgvXFxbKD88dGV4dD5bXlxcXV0rKVxcXVxcKFteKV0rXFwpL2csICckPHRleHQ+JylcbiAgICAucmVwbGFjZUFsbCgvW2AqX35dL2csICcnKVxuICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJylcbiAgICAudHJpbSgpO1xuXG4gIGlmIChwbGFpbi5sZW5ndGggPD0gT0dfREVTQ1JJUFRJT05fTUFYX0xFTkdUSCkge1xuICAgIHJldHVybiBwbGFpbjtcbiAgfVxuXG4gIC8vIEN1dCBiYWNrIHRvIGEgd29yZCBib3VuZGFyeTogYSByYXcgc2xpY2UgZW5kcyBkZXNjcmlwdGlvbnMgbWlkLXdvcmQgKGDigKYgdGhlIHN0cmluZyBtb2R1bGUgaXMgb2JgKS5cbiAgLy8gVGhhdCBmcmFnbWVudCBpcyB3aGF0IHJlYWRlcnMgc2VlIG9uIHRoZSBPRyBjYXJkIGFuZCBpbiBzZWFyY2ggcmVzdWx0cy5cbiAgY29uc3QgY2xpcHBlZCA9IHBsYWluLnNsaWNlKDAsIE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggLSAxKTtcbiAgY29uc3QgbGFzdFNwYWNlSW5kZXggPSBjbGlwcGVkLmxhc3RJbmRleE9mKCcgJyk7XG4gIGNvbnN0IHRydW5jYXRlZCA9IGxhc3RTcGFjZUluZGV4ID4gMCA/IGNsaXBwZWQuc2xpY2UoMCwgbGFzdFNwYWNlSW5kZXgpIDogY2xpcHBlZDtcbiAgcmV0dXJuIGAke3RydW5jYXRlZC5yZXBsYWNlKC9bLDs6Llxcc10rJC8sICcnKX3igKZgO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVNZHhQcm9zZUNoYXJzKGNodW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2h1bmsucmVwbGFjZUFsbCgvWzx7fV0vZywgKGNoYXIpID0+IGBcXFxcJHtjaGFyfWApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxhQUFhO0FBQ3RCLFNBQVMsZUFBZTtBQVF4QixTQUFTLHFCQUFxQjtBQUM5QixTQUFTLGtDQUFrQztBQUMzQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHlCQUF5QjtBQWEzQixTQUFTLG1CQUFtQixRQUE0QjtBQUM3RCxNQUFJLGNBQWMsSUFBSSxP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
243
+ //# 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,136 @@
1
+ /// <reference path="../library-references.d.mts" />
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';
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;