@storybook/addon-docs
Version:
Storybook Docs: Document UI components automatically with stories and MDX
122 lines (116 loc) • 5.16 kB
JavaScript
import CJS_COMPAT_NODE_URL_savkcblj6nq from 'node:url';
import CJS_COMPAT_NODE_PATH_savkcblj6nq from 'node:path';
import CJS_COMPAT_NODE_MODULE_savkcblj6nq from "node:module";
var __filename = CJS_COMPAT_NODE_URL_savkcblj6nq.fileURLToPath(import.meta.url);
var __dirname = CJS_COMPAT_NODE_PATH_savkcblj6nq.dirname(__filename);
var require = CJS_COMPAT_NODE_MODULE_savkcblj6nq.createRequire(import.meta.url);
// ------------------------------------------------------------
// end of CJS compatibility banner, injected by Storybook's esbuild configuration
// ------------------------------------------------------------
import {
esm_default,
parse
} from "./chunk-TGQYUEFZ.js";
import {
visit
} from "./chunk-P3CEN6KC.js";
import "./chunk-ARZML2RB.js";
// ../../../node_modules/hast-util-is-element/lib/index.js
var convertElement = (
// Note: overloads in JSDoc can’t yet use different `@template`s.
/**
* @type {(
* (<Condition extends TestFunction>(test: Condition) => (element: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & Predicate<Condition, Element>) &
* (<Condition extends string>(test: Condition) => (element: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & {tagName: Condition}) &
* ((test?: null | undefined) => (element?: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element) &
* ((test?: Test) => Check)
* )}
*/
/**
* @param {Test | null | undefined} [test]
* @returns {Check}
*/
(function(test) {
if (test == null)
return element;
if (typeof test == "string")
return tagNameFactory(test);
if (typeof test == "object")
return anyFactory(test);
if (typeof test == "function")
return castFactory(test);
throw new Error("Expected function, string, or array as `test`");
})
);
function anyFactory(tests) {
let checks = [], index = -1;
for (; ++index < tests.length; )
checks[index] = convertElement(tests[index]);
return castFactory(any);
function any(...parameters) {
let index2 = -1;
for (; ++index2 < checks.length; )
if (checks[index2].apply(this, parameters)) return !0;
return !1;
}
}
function tagNameFactory(check) {
return castFactory(tagName);
function tagName(element2) {
return element2.tagName === check;
}
}
function castFactory(testFunction) {
return check;
function check(value, index, parent) {
return !!(looksLikeAnElement(value) && testFunction.call(
this,
value,
typeof index == "number" ? index : void 0,
parent || void 0
));
}
}
function element(element2) {
return !!(element2 && typeof element2 == "object" && "type" in element2 && element2.type === "element" && "tagName" in element2 && typeof element2.tagName == "string");
}
function looksLikeAnElement(value) {
return value !== null && typeof value == "object" && "type" in value && "tagName" in value;
}
// ../../../node_modules/is-absolute-url/index.js
var ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\d+\-.]*?:/, WINDOWS_PATH_REGEX = /^[a-zA-Z]:\\/;
function isAbsoluteUrl(url) {
if (typeof url != "string")
throw new TypeError(`Expected a \`string\`, got \`${typeof url}\``);
return WINDOWS_PATH_REGEX.test(url) ? !1 : ABSOLUTE_URL_REGEX.test(url);
}
// ../../../node_modules/rehype-external-links/lib/index.js
var defaultProtocols = ["http", "https"], defaultRel = ["nofollow"], emptyOptions = {};
function rehypeExternalLinks(options) {
let settings = options || emptyOptions, protocols = settings.protocols || defaultProtocols, is = convertElement(settings.test);
return function(tree) {
visit(tree, "element", function(node, index, parent) {
if (node.tagName === "a" && typeof node.properties.href == "string" && is(node, index, parent)) {
let url = node.properties.href;
if (isAbsoluteUrl(url) ? protocols.includes(url.slice(0, url.indexOf(":"))) : url.startsWith("//")) {
let contentRaw = createIfNeeded(settings.content, node), content = contentRaw && !Array.isArray(contentRaw) ? [contentRaw] : contentRaw, relRaw = createIfNeeded(settings.rel, node) || defaultRel, rel = typeof relRaw == "string" ? parse(relRaw) : relRaw, target = createIfNeeded(settings.target, node), properties = createIfNeeded(settings.properties, node);
if (properties && Object.assign(node.properties, esm_default(properties)), rel.length > 0 && (node.properties.rel = [...rel]), target && (node.properties.target = target), content) {
let properties2 = createIfNeeded(settings.contentProperties, node) || {};
node.children.push({
type: "element",
tagName: "span",
properties: esm_default(properties2),
children: esm_default(content)
});
}
}
}
});
};
}
function createIfNeeded(value, element2) {
return typeof value == "function" ? value(element2) : value;
}
export {
rehypeExternalLinks as default
};