@storybook/angular
Version:
Storybook for Angular: Develop, document, and test UI components in isolation
391 lines (384 loc) • 19 kB
JavaScript
import CJS_COMPAT_NODE_URL_10o00kmldo5e from 'node:url';
import CJS_COMPAT_NODE_PATH_10o00kmldo5e from 'node:path';
import CJS_COMPAT_NODE_MODULE_10o00kmldo5e from "node:module";
var __filename = CJS_COMPAT_NODE_URL_10o00kmldo5e.fileURLToPath(import.meta.url);
var __dirname = CJS_COMPAT_NODE_PATH_10o00kmldo5e.dirname(__filename);
var require = CJS_COMPAT_NODE_MODULE_10o00kmldo5e.createRequire(import.meta.url);
// ------------------------------------------------------------
// end of CJS compatibility banner, injected by Storybook's esbuild configuration
// ------------------------------------------------------------
import {
up
} from "../_node-chunks/chunk-CSGE7JTV.js";
// src/server/framework-preset-angular-cli.ts
import { logger } from "storybook/internal/node-logger";
import { AngularLegacyBuildOptionsError } from "storybook/internal/server-errors";
import { targetFromTargetString } from "@angular-devkit/architect";
import { logging } from "@angular-devkit/core";
import { getProjectRoot, resolvePackageDir } from "storybook/internal/common";
// ../../../node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs
var _lazyMatch = () => {
var __lib__ = (() => {
var m = Object.defineProperty, V = Object.getOwnPropertyDescriptor, G = Object.getOwnPropertyNames, T = Object.prototype.hasOwnProperty, q = (r, e) => {
for (var n in e) m(r, n, { get: e[n], enumerable: !0 });
}, H = (r, e, n, a) => {
if (e && typeof e == "object" || typeof e == "function") for (let t of G(e)) !T.call(r, t) && t !== n && m(r, t, { get: () => e[t], enumerable: !(a = V(e, t)) || a.enumerable });
return r;
}, J = (r) => H(m({}, "__esModule", { value: !0 }), r), w = {};
q(w, { default: () => re });
var A = (r) => Array.isArray(r), d = (r) => typeof r == "function", Q = (r) => r.length === 0, W = (r) => typeof r == "number", K = (r) => typeof r == "object" && r !== null, X = (r) => r instanceof RegExp, b = (r) => typeof r == "string", h = (r) => r === void 0, Y = (r) => {
let e = /* @__PURE__ */ new Map();
return (n) => {
let a = e.get(n);
if (a) return a;
let t = r(n);
return e.set(n, t), t;
};
}, rr = (r, e, n = {}) => {
let a = { cache: {}, input: r, index: 0, indexMax: 0, options: n, output: [] };
if (v(e)(a) && a.index === r.length) return a.output;
throw new Error(`Failed to parse at index ${a.indexMax}`);
}, i = (r, e) => A(r) ? er(r, e) : b(r) ? ar(r, e) : nr(r, e), er = (r, e) => {
let n = {};
for (let a of r) {
if (a.length !== 1) throw new Error(`Invalid character: "${a}"`);
let t = a.charCodeAt(0);
n[t] = !0;
}
return (a) => {
let t = a.index, o = a.input;
for (; a.index < o.length && o.charCodeAt(a.index) in n; ) a.index += 1;
let u = a.index;
if (u > t) {
if (!h(e) && !a.options.silent) {
let s = a.input.slice(t, u), c = d(e) ? e(s, o, String(t)) : e;
h(c) || a.output.push(c);
}
a.indexMax = Math.max(a.indexMax, a.index);
}
return !0;
};
}, nr = (r, e) => {
let n = r.source, a = r.flags.replace(/y|$/, "y"), t = new RegExp(n, a);
return g((o) => {
t.lastIndex = o.index;
let u = t.exec(o.input);
if (u) {
if (!h(e) && !o.options.silent) {
let s = d(e) ? e(...u, o.input, String(o.index)) : e;
h(s) || o.output.push(s);
}
return o.index += u[0].length, o.indexMax = Math.max(o.indexMax, o.index), !0;
} else return !1;
});
}, ar = (r, e) => (n) => {
if (n.input.startsWith(r, n.index)) {
if (!h(e) && !n.options.silent) {
let t = d(e) ? e(r, n.input, String(n.index)) : e;
h(t) || n.output.push(t);
}
return n.index += r.length, n.indexMax = Math.max(n.indexMax, n.index), !0;
} else return !1;
}, C = (r, e, n, a) => {
let t = v(r);
return g(_(M((o) => {
let u = 0;
for (; u < n; ) {
let s = o.index;
if (!t(o) || (u += 1, o.index === s)) break;
}
return u >= e;
})));
}, tr = (r, e) => C(r, 0, 1), f = (r, e) => C(r, 0, 1 / 0), x = (r, e) => {
let n = r.map(v);
return g(_(M((a) => {
for (let t = 0, o = n.length; t < o; t++) if (!n[t](a)) return !1;
return !0;
})));
}, l = (r, e) => {
let n = r.map(v);
return g(_((a) => {
for (let t = 0, o = n.length; t < o; t++) if (n[t](a)) return !0;
return !1;
}));
}, M = (r, e = !1) => {
let n = v(r);
return (a) => {
let t = a.index, o = a.output.length, u = n(a);
return (!u || e) && (a.index = t, a.output.length !== o && (a.output.length = o)), u;
};
}, _ = (r, e) => v(r), g = /* @__PURE__ */ (() => {
let r = 0;
return (e) => {
let n = v(e), a = r += 1;
return (t) => {
var o;
if (t.options.memoization === !1) return n(t);
let u = t.index, s = (o = t.cache)[a] || (o[a] = /* @__PURE__ */ new Map()), c = s.get(u);
if (c === !1) return !1;
if (W(c)) return t.index = c, !0;
if (c) return t.index = c.index, c.output?.length && t.output.push(...c.output), !0;
{
let Z = t.output.length;
if (n(t)) {
let D = t.index, U = t.output.length;
if (U > Z) {
let ee = t.output.slice(Z, U);
s.set(u, { index: D, output: ee });
} else s.set(u, D);
return !0;
} else return s.set(u, !1), !1;
}
};
};
})(), E = (r) => {
let e;
return (n) => (e || (e = v(r())), e(n));
}, v = Y((r) => {
if (d(r)) return Q(r) ? E(r) : r;
if (b(r) || X(r)) return i(r);
if (A(r)) return x(r);
if (K(r)) return l(Object.values(r));
throw new Error("Invalid rule");
}), P = "abcdefghijklmnopqrstuvwxyz", ir = (r) => {
let e = "";
for (; r > 0; ) {
let n = (r - 1) % 26;
e = P[n] + e, r = Math.floor((r - 1) / 26);
}
return e;
}, O = (r) => {
let e = 0;
for (let n = 0, a = r.length; n < a; n++) e = e * 26 + P.indexOf(r[n]) + 1;
return e;
}, S = (r, e) => {
if (e < r) return S(e, r);
let n = [];
for (; r <= e; ) n.push(r++);
return n;
}, or = (r, e, n) => S(r, e).map((a) => String(a).padStart(n, "0")), R = (r, e) => S(O(r), O(e)).map(ir), p = (r) => r, z = (r) => ur((e) => rr(e, r, { memoization: !1 }).join("")), ur = (r) => {
let e = {};
return (n) => e[n] ?? (e[n] = r(n));
}, sr = i(/^\*\*\/\*$/, ".*"), cr = i(/^\*\*\/(\*)?([ a-zA-Z0-9._-]+)$/, (r, e, n) => `.*${e ? "" : "(?:^|/)"}${n.replaceAll(".", "\\.")}`), lr = i(/^\*\*\/(\*)?([ a-zA-Z0-9._-]*)\{([ a-zA-Z0-9._-]+(?:,[ a-zA-Z0-9._-]+)*)\}$/, (r, e, n, a) => `.*${e ? "" : "(?:^|/)"}${n.replaceAll(".", "\\.")}(?:${a.replaceAll(",", "|").replaceAll(".", "\\.")})`), y = i(/\\./, p), pr = i(/[$.*+?^(){}[\]\|]/, (r) => `\\${r}`), vr = i(/./, p), hr = i(/^(?:!!)*!(.*)$/, (r, e) => `(?!^${L(e)}$).*?`), dr = i(/^(!!)+/, ""), fr = l([hr, dr]), xr = i(/\/(\*\*\/)+/, "(?:/.+/|/)"), gr = i(/^(\*\*\/)+/, "(?:^|.*/)"), mr = i(/\/(\*\*)$/, "(?:/.*|$)"), _r = i(/\*\*/, ".*"), j = l([xr, gr, mr, _r]), Sr = i(/\*\/(?!\*\*\/)/, "[^/]*/"), yr = i(/\*/, "[^/]*"), N = l([Sr, yr]), k = i("?", "[^/]"), $r = i("[", p), wr = i("]", p), Ar = i(/[!^]/, "^/"), br = i(/[a-z]-[a-z]|[0-9]-[0-9]/i, p), Cr = i(/[$.*+?^(){}[\|]/, (r) => `\\${r}`), Mr = i(/[^\]]/, p), Er = l([y, Cr, br, Mr]), B = x([$r, tr(Ar), f(Er), wr]), Pr = i("{", "(?:"), Or = i("}", ")"), Rr = i(/(\d+)\.\.(\d+)/, (r, e, n) => or(+e, +n, Math.min(e.length, n.length)).join("|")), zr = i(/([a-z]+)\.\.([a-z]+)/, (r, e, n) => R(e, n).join("|")), jr = i(/([A-Z]+)\.\.([A-Z]+)/, (r, e, n) => R(e.toLowerCase(), n.toLowerCase()).join("|").toUpperCase()), Nr = l([Rr, zr, jr]), I = x([Pr, Nr, Or]), kr = i("{", "(?:"), Br = i("}", ")"), Ir = i(",", "|"), Fr = i(/[$.*+?^(){[\]\|]/, (r) => `\\${r}`), Lr = i(/[^}]/, p), Zr = E(() => F), Dr = l([j, N, k, B, I, Zr, y, Fr, Ir, Lr]), F = x([kr, f(Dr), Br]), Ur = f(l([sr, cr, lr, fr, j, N, k, B, I, F, y, pr, vr])), Vr = Ur, Gr = z(Vr), L = Gr, Tr = i(/\\./, p), qr = i(/./, p), Hr = i(/\*\*\*+/, "*"), Jr = i(/([^/{[(!])\*\*/, (r, e) => `${e}*`), Qr = i(/(^|.)\*\*(?=[^*/)\]}])/, (r, e) => `${e}*`), Wr = f(l([Tr, Hr, Jr, Qr, qr])), Kr = Wr, Xr = z(Kr), Yr = Xr, $ = (r, e) => {
let n = Array.isArray(r) ? r : [r];
if (!n.length) return !1;
let a = n.map($.compile), t = n.every((s) => /(\/(?:\*\*)?|\[\/\])$/.test(s)), o = e.replace(/[\\\/]+/g, "/").replace(/\/$/, t ? "/" : "");
return a.some((s) => s.test(o));
};
$.compile = (r) => new RegExp(`^${L(Yr(r))}$`, "s");
var re = $;
return J(w);
})();
return __lib__.default || __lib__;
}, _match, zeptomatch = (path, pattern) => (_match || (_match = _lazyMatch(), _lazyMatch = null), _match(path, pattern)), _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
function normalizeWindowsPath(input = "") {
return input && input.replace(/\\/g, "/").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase());
}
var _UNC_REGEX = /^[/\\]{2}/, _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/, _DRIVE_LETTER_RE = /^[A-Za-z]:$/, _ROOT_FOLDER_RE = /^\/([A-Za-z]:)?$/, _EXTNAME_RE = /.(\.[^./]+|\.)$/, _PATH_ROOT_RE = /^[/\\]|^[a-zA-Z]:[/\\]/, sep = "/", normalize = function(path) {
if (path.length === 0)
return ".";
path = normalizeWindowsPath(path);
let isUNCPath = path.match(_UNC_REGEX), isPathAbsolute = isAbsolute(path), trailingSeparator = path[path.length - 1] === "/";
return path = normalizeString(path, !isPathAbsolute), path.length === 0 ? isPathAbsolute ? "/" : trailingSeparator ? "./" : "." : (trailingSeparator && (path += "/"), _DRIVE_LETTER_RE.test(path) && (path += "/"), isUNCPath ? isPathAbsolute ? `//${path}` : `//./${path}` : isPathAbsolute && !isAbsolute(path) ? `/${path}` : path);
}, join = function(...segments) {
let path = "";
for (let seg of segments)
if (seg)
if (path.length > 0) {
let pathTrailing = path[path.length - 1] === "/", segLeading = seg[0] === "/";
pathTrailing && segLeading ? path += seg.slice(1) : path += pathTrailing || segLeading ? seg : `/${seg}`;
} else
path += seg;
return normalize(path);
};
function cwd() {
return typeof process < "u" && typeof process.cwd == "function" ? process.cwd().replace(/\\/g, "/") : "/";
}
var resolve = function(...arguments_) {
arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));
let resolvedPath = "", resolvedAbsolute = !1;
for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {
let path = index >= 0 ? arguments_[index] : cwd();
!path || path.length === 0 || (resolvedPath = `${path}/${resolvedPath}`, resolvedAbsolute = isAbsolute(path));
}
return resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute), resolvedAbsolute && !isAbsolute(resolvedPath) ? `/${resolvedPath}` : resolvedPath.length > 0 ? resolvedPath : ".";
};
function normalizeString(path, allowAboveRoot) {
let res = "", lastSegmentLength = 0, lastSlash = -1, dots = 0, char = null;
for (let index = 0; index <= path.length; ++index) {
if (index < path.length)
char = path[index];
else {
if (char === "/")
break;
char = "/";
}
if (char === "/") {
if (!(lastSlash === index - 1 || dots === 1)) if (dots === 2) {
if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") {
if (res.length > 2) {
let lastSlashIndex = res.lastIndexOf("/");
lastSlashIndex === -1 ? (res = "", lastSegmentLength = 0) : (res = res.slice(0, lastSlashIndex), lastSegmentLength = res.length - 1 - res.lastIndexOf("/")), lastSlash = index, dots = 0;
continue;
} else if (res.length > 0) {
res = "", lastSegmentLength = 0, lastSlash = index, dots = 0;
continue;
}
}
allowAboveRoot && (res += res.length > 0 ? "/.." : "..", lastSegmentLength = 2);
} else
res.length > 0 ? res += `/${path.slice(lastSlash + 1, index)}` : res = path.slice(lastSlash + 1, index), lastSegmentLength = index - lastSlash - 1;
lastSlash = index, dots = 0;
} else char === "." && dots !== -1 ? ++dots : dots = -1;
}
return res;
}
var isAbsolute = function(p) {
return _IS_ABSOLUTE_RE.test(p);
}, toNamespacedPath = function(p) {
return normalizeWindowsPath(p);
}, extname = function(p) {
if (p === "..") return "";
let match = _EXTNAME_RE.exec(normalizeWindowsPath(p));
return match && match[1] || "";
}, relative = function(from, to) {
let _from = resolve(from).replace(_ROOT_FOLDER_RE, "$1").split("/"), _to = resolve(to).replace(_ROOT_FOLDER_RE, "$1").split("/");
if (_to[0][1] === ":" && _from[0][1] === ":" && _from[0] !== _to[0])
return _to.join("/");
let _fromCopy = [..._from];
for (let segment of _fromCopy) {
if (_to[0] !== segment)
break;
_from.shift(), _to.shift();
}
return [..._from.map(() => ".."), ..._to].join("/");
}, dirname = function(p) {
let segments = normalizeWindowsPath(p).replace(/\/$/, "").split("/").slice(0, -1);
return segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0]) && (segments[0] += "/"), segments.join("/") || (isAbsolute(p) ? "/" : ".");
}, format = function(p) {
let ext = p.ext ? p.ext.startsWith(".") ? p.ext : `.${p.ext}` : "", segments = [p.root, p.dir, p.base ?? (p.name ?? "") + ext].filter(
Boolean
);
return normalizeWindowsPath(
p.root ? resolve(...segments) : segments.join("/")
);
}, basename = function(p, extension) {
let segments = normalizeWindowsPath(p).split("/"), lastSegment = "";
for (let i = segments.length - 1; i >= 0; i--) {
let val = segments[i];
if (val) {
lastSegment = val;
break;
}
}
return extension && lastSegment.endsWith(extension) ? lastSegment.slice(0, -extension.length) : lastSegment;
}, parse = function(p) {
let root = _PATH_ROOT_RE.exec(p)?.[0]?.replace(/\\/g, "/") || "", base = basename(p), extension = extname(base);
return {
root,
dir: dirname(p),
base,
ext: extension,
name: base.slice(0, base.length - extension.length)
};
}, matchesGlob = (path, pattern) => zeptomatch(pattern, normalize(path)), _path = {
__proto__: null,
basename,
dirname,
extname,
format,
isAbsolute,
join,
matchesGlob,
normalize,
normalizeString,
parse,
relative,
resolve,
sep,
toNamespacedPath
};
// ../../../node_modules/pathe/dist/index.mjs
var delimiter = globalThis.process?.platform === "win32" ? ";" : ":", _platforms = { posix: void 0, win32: void 0 }, mix = (del = delimiter) => new Proxy(_path, {
get(_, prop) {
return prop === "delimiter" ? del : prop === "posix" ? posix : prop === "win32" ? win32 : _platforms[prop] || _path[prop];
}
}), posix = mix(":"), win32 = mix(";");
// src/server/framework-preset-angular-cli.ts
async function webpackFinal(baseConfig, options) {
if (!resolvePackageDir("@angular-devkit/build-angular"))
return logger.info('Using base config because "@angular-devkit/build-angular" is not installed'), baseConfig;
let { WebpackDefinePlugin, WebpackIgnorePlugin } = await import("@storybook/builder-webpack5"), { getWebpackConfig: getCustomWebpackConfig } = await import("../_node-chunks/angular-cli-webpack-52JST5TF.js");
checkForLegacyBuildOptions(options);
let builderContext = getBuilderContext(options), builderOptions = await getBuilderOptions(options, builderContext), webpackConfig = await getCustomWebpackConfig(baseConfig, {
builderOptions: {
watch: options.configType === "DEVELOPMENT",
...builderOptions
},
builderContext
});
webpackConfig.plugins = webpackConfig.plugins ?? [];
let miniCssPlugin = webpackConfig?.plugins?.find(
(plugin) => plugin?.constructor?.name === "MiniCssExtractPlugin"
);
miniCssPlugin && "options" in miniCssPlugin && (miniCssPlugin.options.filename = "[name].[contenthash].css", miniCssPlugin.options.chunkFilename = "[name].iframe.[contenthash].css"), webpackConfig.plugins.push(
new WebpackDefinePlugin({
STORYBOOK_ANGULAR_OPTIONS: JSON.stringify({
experimentalZoneless: builderOptions.experimentalZoneless
})
})
);
try {
resolvePackageDir("@angular/animations");
} catch {
webpackConfig.plugins.push(
new WebpackIgnorePlugin({
resourceRegExp: /@angular\/platform-browser\/animations$/
})
), webpackConfig.plugins.push(
new WebpackIgnorePlugin({
resourceRegExp: /@angular\/animations\/browser$/
})
);
}
return webpackConfig;
}
function getBuilderContext(options) {
return options.angularBuilderContext ?? {
target: { project: "noop-project", builder: "", options: {} },
workspaceRoot: process.cwd(),
getProjectMetadata: () => ({}),
getTargetOptions: () => ({}),
logger: new logging.Logger("Storybook")
};
}
function deepMerge(target, source) {
let result = { ...target };
for (let key in source)
source[key] !== void 0 && source[key] !== null && (typeof source[key] == "object" && !Array.isArray(source[key]) && typeof target[key] == "object" && !Array.isArray(target[key]) && target[key] !== null ? result[key] = deepMerge(target[key], source[key]) : result[key] = source[key]);
return result;
}
async function getBuilderOptions(options, builderContext) {
let browserTargetOptions = {};
if (options.angularBrowserTarget) {
let browserTarget = targetFromTargetString(options.angularBrowserTarget);
logger.info(
`Using angular browser target options from "${browserTarget.project}:${browserTarget.target}${browserTarget.configuration ? `:${browserTarget.configuration}` : ""}"`
), browserTargetOptions = await builderContext.getTargetOptions(browserTarget);
}
let explicitAngularBuilderOptions = await builderContext.getTargetOptions(
builderContext.target
), builderOptions = deepMerge(browserTargetOptions, explicitAngularBuilderOptions || {});
return builderOptions.tsConfig = options.tsConfig ?? up("tsconfig.json", { cwd: options.configDir, last: getProjectRoot() }) ?? browserTargetOptions.tsConfig, logger.info(
`Using angular project with "tsConfig:${relative(getProjectRoot(), builderOptions.tsConfig)}"`
), builderOptions.experimentalZoneless = options.angularBuilderOptions?.experimentalZoneless, builderOptions;
}
function checkForLegacyBuildOptions(options) {
if (options.angularBrowserTarget === void 0)
throw new AngularLegacyBuildOptionsError();
}
export {
deepMerge,
getBuilderOptions,
webpackFinal
};