UNPKG

chromatic

Version:

Automate visual testing across browsers. Gather UI feedback. Versioned documentation.

15 lines (12 loc) • 9.62 kB
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e3cf6176-5e09-5665-9fa9-d3b6f5bd7e37")}catch(e){}}(); const e=require(`./chunk-gGpyby2o.cjs`),t=require(`./meow-CbdXCBsh.cjs`),n=require(`./getStorybookProjectRoot-DlbLndZv.cjs`),r=require(`./getFileHashes-D6WuRXoP.cjs`),i=require(`./log-ECzXUtHc.cjs`),a=require(`./readStatsFile-4CPsbHL1.cjs`);let o=require(`fs`),s=require(`path`);s=e.a(s);let c=require(`module`);function l(e,t,n){return u([...t].map(t=>[t,e.get(t)??``]),n)}function u(e,t){return t(d(e))}function d(e){return[...e].map(e=>f(e)).sort().join(``)}function f([e,t]){return JSON.stringify([e,t])}function p(e,t,n=new Set){let r=[t];for(;r.length>0;){let t=r.pop();t===void 0||n.has(t)||(n.add(t),r.push(...e.get(t)?.dependencies??[]))}return n}function m(e){let t=[e.nameForCondition??e.name,...(e.modules??[]).map(e=>e.nameForCondition??e.name)];return[...new Set(t.filter(Boolean).map(e=>y(e)))]}function h(e,t){return m(e).map(e=>b(e,t.projectRoot,t.statsRoot))}function g(e,t){return(e.reasons??[]).map(e=>e.moduleName).filter(e=>typeof e==`string`).map(e=>b(e,t.projectRoot,t.statsRoot))}function _(e,t){return h(e,t)[0]}const ee=/(?:^|[\\/])node_modules(?:[\\/]|$)/;function v(e){return ee.test(e)}function y(e){return e.replace(/ \+ \d+ modules?$/,``)}function b(e,t,r=t){return e.includes(`virtual:`)?e:x(n.n(t,S(e,r)))}function x(e){return e.startsWith(`../`)?e:`./${e}`}function S(e,t){let n=y(e);return s.default.isAbsolute(n)?n:s.default.resolve(t,n)}async function C(e){let t=e.projectFiles.listTree(e.configDir),n=e.staticDirs.flatMap(t=>e.projectFiles.listTree(t)),r=new Set(n);return{storybookConfigFiles:await T(t.filter(e=>!r.has(e)),e.projectRoot,e.projectFiles),staticFiles:await T(n,e.projectRoot,e.projectFiles)}}function w(e,t){let n=[[`storybookConfigFiles`,e.storybookConfigFiles],[`staticFiles`,e.staticFiles]];return new Map(n.filter(([,e])=>e.size>0).map(([e,n])=>[e,u([...n],t)]))}async function T(e,t,n){let r=await n.hashAll(e);return new Map(e.map(e=>[b(e,t),r[e]]).sort(([e],[t])=>e.localeCompare(t)))}const E=new Set([`./generated-stories-entry.js`,`./generated-stories-entry.cjs`,`./storybook-stories.js`,`/virtual:/@storybook/builder-vite/storybook-stories.js`,`virtual:@storybook/builder-vite/storybook-stories.js`,`./node_modules/.cache/storybook/default/dev-server/storybook-stories.js`,`./node_modules/.cache/storybook-rsbuild-builder/storybook-stories.js`]),D=new Set([`./storybook-config-entry.js`,`./node_modules/.cache/storybook-rsbuild-builder/storybook-config-entry.js`,`./node_modules/.cache/storybook/storybook-rsbuild-builder/storybook-config-entry.js`]),te=/^external "/,O=/ lazy |\|lazy\|/;function k(e,t){let n=A(e,t),{storyImporters:r,contextsExcludingNodeModules:i}=M(e,n),a=new Set;for(let e of n){if(!e.onDisk)continue;let t=e.importers.filter(e=>r.has(e));j(e.filePath,t,i)&&a.add(e.filePath)}return a}function A(e,t){let{onDiskFiles:n}=e,r=[];for(let i of t.modules){if(te.test(i.name))continue;let t=_(i,e);if(!t)continue;let a=g(i,e);r.push({rawName:i.name,filePath:t,onDisk:n.has(t),importers:a})}return r}function j(e,t,n){return t.length===0?!1:v(e)?!t.every(e=>n.has(e)):!0}function M(e,t){let{projectRoot:n,statsRoot:r}=e,i=e=>b(e,n,r),a=new Set([...E,...D].map(e=>i(e))),o=new Set([...E].map(e=>i(e))),s=new Set;for(let e of t)e.onDisk||e.importers.some(e=>a.has(e))&&(o.add(e.filePath),N(e.rawName)&&P(e.rawName)&&s.add(e.filePath));return{storyImporters:o,contextsExcludingNodeModules:s}}function N(e){return O.test(e)}function P(e){return!v(e.split(O)[0])}async function F(e,t){let{projectRoot:n,statsRoot:r=n,projectFiles:i}=t,a={projectRoot:n,statsRoot:r},o=await z(e,n,r,i),s=k({...a,onDiskFiles:o},e),c=new Map;for(let t of e.modules){let e=h(t,a);if(e.length===0)continue;let[n,...r]=e,i=g(t,a);I(c,n,r,o);for(let e of i)L(c,e,o).dependencies.add(n)}return{files:c,hashes:o,storyFiles:s}}function I(e,t,n,r){let i=L(e,t,r);for(let t of n)i.dependencies.add(t),L(e,t,r)}function L(e,t,n){let r=e.get(t);return r||(r={hash:n.get(t)??``,dependencies:new Set},e.set(t,r)),r}function R(e,t,n){if(e.includes(`virtual:`))return;let r=S(e,t);return n.isFile(r)?r:void 0}async function z(e,t,n,r){let i=new Set;for(let t of e.modules){for(let e of m(t))i.add(e);for(let e of t.reasons??[])e.moduleName&&i.add(e.moduleName)}let a=new Map;for(let e of i){let i=R(e,n,r);i&&a.set(b(e,t,n),i)}let o=await r.hashAll([...a.values()]),s=new Map;for(let[e,t]of a){let n=o[t];n&&s.set(e,n)}return s}function B(e,t){let{dir:n,base:i}=s.default.posix.parse(e);return n===t&&r.i.test(i)}function V(e,t,n,r,i){let a=new Map,o=new Set,s=!1;for(let n of e.keys())!t.has(n)||!B(n,r)||(s=!0,p(e,n,o));s&&a.set(`preview`,l(t,o,i));let c=[...t.keys()].filter(e=>!n.has(e)&&!o.has(e));return c.length>0&&a.set(`storybookGlobals`,l(t,c,i)),{storybookConfigHashes:a,attribution:{storyReachable:new Set([...n].filter(e=>t.has(e))),previewSubtree:new Set([...o].filter(e=>t.has(e))),storybookGlobals:new Set(c)}}}const H=[`storybook`,`@storybook/core`];function U(e,t){for(let n of H){let r=t.packageVersion(e,n);if(r)return r}throw Error(`Could not resolve a Storybook version from ${e}: none of ${H.join(`, `)} could be resolved with a version.`)}async function W(e,t){let{files:n,hashes:i,storyFiles:a}=await F(e,t),{h64ToString:o}=await r.n(),s=new Map,c=new Set;for(let e of a){let t=p(n,e);s.set(e,l(i,t,o));for(let e of t)c.add(e)}let{storybookConfigHashes:u,attribution:f}=V(n,i,c,b(t.configDir,t.projectRoot),o);u.set(`storybookVersion`,U(t.projectRoot,t.projectFiles));let m=await C(t);for(let[e,t]of w(m,o))u.set(e,t);return{storybookHash:o(d(s)+d(u)),storybookConfigHashes:u,storyFileHashes:s,attribution:f,outOfGraphFiles:m,files:n}}function G(e){return{storybookHash:e.storybookHash,storybookConfigHashes:q(Object.fromEntries(e.storybookConfigHashes)),storybookConfigFiles:q(Object.fromEntries(e.outOfGraphFiles.storybookConfigFiles)),staticFiles:q(Object.fromEntries(e.outOfGraphFiles.staticFiles)),storyFiles:q(Object.fromEntries(e.storyFileHashes)),attribution:q(Object.fromEntries(Object.entries(e.attribution).map(([e,t])=>[e,[...t].sort(J)]))),files:q(K(e.files))}}function K(e){let t={};for(let[n,r]of e)r.hash!==``&&(t[n]={hash:r.hash,dependencies:[...r.dependencies].filter(t=>e.get(t)?.hash).sort(J)});return t}function q(e){return Object.fromEntries(Object.entries(e).sort(([e],[t])=>J(e,t)))}function J(e,t){return e.localeCompare(t)}function Y(){return{isFile:e=>(0,o.statSync)(e,{throwIfNoEntry:!1})?.isFile()??!1,isDirectory:e=>(0,o.statSync)(e,{throwIfNoEntry:!1})?.isDirectory()??!1,packageVersion:X,hashAll:Z,listTree:e=>Q(e),writeFile:(e,t)=>(0,o.writeFileSync)(e,t)}}function X(e,t){let n=(0,c.createRequire)(s.default.join(e,`package.json`));try{let e=n.resolve(`${t}/package.json`),{version:r}=JSON.parse((0,o.readFileSync)(e,`utf8`));return r}catch{return}}async function Z(e,t){if(e.length===0)return{};try{return await r.t({files:e,concurrency:t})}catch(t){throw Error(`Could not hash ${ne(t,e)}: ${t.message}`)}}function ne(e,t){return e?.path?String(e.path):`one of the ${t.length} files hashed`}function Q(e,t=new Set){let n;try{n=(0,o.realpathSync)(e)}catch{return[]}if(t.has(n))return[];t.add(n);try{let n;try{n=(0,o.readdirSync)(e,{withFileTypes:!0})}catch{return[]}return n.flatMap(n=>{let r=s.default.join(e,n.name);if(n.isDirectory())return Q(r,t);if(n.isFile())return[r];try{let e=(0,o.statSync)(r);return e.isDirectory()?Q(r,t):e.isFile()?[r]:[]}catch{return[]}})}finally{t.delete(n)}}var re=e.a(t.t());const{STORYBOOK_BASE_DIR:$}=process.env;async function ie(e){let t=(0,re.default)(` Usage $ chromatic turbosnap-manifest [-s|--stats-file] [-b|--storybook-base-dir] [-c|--config-dir] [--static-dir] Options --stats-file, -s <filepath> Path to preview-stats.json, relative to the Storybook project root. (default: 'storybook-static/preview-stats.json') --storybook-base-dir, -b <dirname> Relative path from repository root to Storybook project root. Alternatively, set STORYBOOK_BASE_DIR. Use when your Storybook is located in a subdirectory of your repository. (default: the current directory) --config-dir, -c <dirname> Storybook config directory, relative to the Storybook project root. (default: '.storybook') --static-dir <dirnames> Comma-separated static directories, relative to the Storybook project root. (default: none) `,{argv:e,description:`Build the TurboSnap v2 manifest from a stats file`,flags:{statsFile:{type:`string`,alias:`s`,default:`storybook-static/preview-stats.json`},storybookBaseDir:{type:`string`,alias:`b`,...$&&{default:$}},configDir:{type:`string`,alias:`c`,default:`.storybook`},staticDir:{type:`string`}}}),r=i.t({},{logPrefix:``,logLevel:`error`});try{let e=n.t({storybookBaseDir:t.flags.storybookBaseDir,gitRootPath:await n.C({log:r})}),i=s.default.resolve(e,t.flags.statsFile);if(!(0,o.existsSync)(i))return r.error(`No stats file at ${i}\n`),r.error(t.help),process.exit(1);let c=await W(await a.t(i),{projectRoot:e,configDir:s.default.resolve(e,t.flags.configDir),staticDirs:(t.flags.staticDir?.split(`,`)??[]).map(t=>s.default.resolve(e,t)),projectFiles:Y()});process.stdout.write(JSON.stringify(G(c),void 0,2))}catch(e){r.error(`Error: ${e.message}`),process.exit(1)}}exports.main=ie; //# sourceMappingURL=turbosnapManifest-CxpSs_je.cjs.map //# debugId=e3cf6176-5e09-5665-9fa9-d3b6f5bd7e37