storybook-addon-playwright 5.1.1 → 5.1.2

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.
@@ -5,7 +5,7 @@ import 'ts-to-json';
5
5
  import '../../request-CyuY6GGO.mjs';
6
6
  import 'zod';
7
7
  import '@trpc/server';
8
- import 'http';
8
+ import 'node:http';
9
9
  import 'jest-image-snapshot';
10
10
  import '../../image-diff-Dg_Di4zv.mjs';
11
11
  import '../../get-screenshot-paths-BhXNedbs.mjs';
@@ -5,7 +5,7 @@ import 'ts-to-json';
5
5
  import '../../request-CyuY6GGO.js';
6
6
  import 'zod';
7
7
  import '@trpc/server';
8
- import 'http';
8
+ import 'node:http';
9
9
  import 'jest-image-snapshot';
10
10
  import '../../image-diff-BSb7XwJb.js';
11
11
  import '../../get-screenshot-paths-BhXNedbs.js';
@@ -126,11 +126,11 @@
126
126
  );
127
127
  })();
128
128
  `);}function A(e,t){let o=t?.stories;if(o&&Object.keys(o).forEach(r=>{Object.keys(o[r]||{}).length||delete o[r];}),t&&o&&Object.keys(o).length>0){let r={version:lt(),...t};jsonfile.writeFileSync(e.path,r,{EOL:`\r
129
- `,spaces:2});}else try{N__namespace.unlinkSync(e.path);}catch{}}function x(e,t,o=false){if(e){if(!e.stories){if(!o)return;e.stories={};}if(!(!o&&!e.stories[t]))return e.stories[t]||(e.stories[t]={}),e.stories[t]}}function ht(e,t){let o=x(e,t);return o&&e.stories&&!Object.keys(o).length&&delete e.stories[t],e}function we(e,t,o){let r=`${t}Id`,i=e[t];if(!o||!i)return e;let s=false,n=e.stories||{},a=Object.keys(n);for(let p=0;p<a.length;p++){let l=n[a[p]];if(l.screenshots&&l.screenshots.find(d=>d[r]===o)){s=true;break}}return !s&&i[o]&&delete i[o],Object.keys(i).length||delete e[t],e}function K(e,t,o){if(!o||!e[t])return;let r=Object.keys(e[t]);for(let i=0;i<r.length;i++){let s=r[i],n=e[t][s];if(ut__default.default(n,o))return s}}function ft(e,t,o){let r=K(e,"browserOptions",o.browserOptions),i=K(e,"screenshotOptions",o.screenshotOptions),s=j(o),n=a=>a.actionSets&&a.actionSets.length>0?a.actionSets.map(l=>{let{id:d,...f}=l;return f}):void 0;for(let a=0;a<t.length;a++){let p=t[a];if(p.browserOptionsId===r&&p.screenshotOptionsId===i&&p.browserType===o.browserType&&ut__default.default(n(p),n(o))&&ut__default.default(j(p),s))return p}}function re(e,t){if(!e||!e.length)return;let o=t?.regenerateIds===true;return e.map(r=>({...r,actions:r.actions.map(i=>({...i,id:o?nanoid.nanoid(12):i.id||nanoid.nanoid(12)})),id:o?nanoid.nanoid(12):r.id||nanoid.nanoid(12)}))}function ie(e,t){e.browserOptions&&t.browserOptionsId&&(t.browserOptions=e.browserOptions[t.browserOptionsId]),e.screenshotOptions&&t.screenshotOptionsId&&(t.screenshotOptions=e.screenshotOptions[t.screenshotOptionsId]);}async function se(e){let t=g(e.filePath),o=await w(t.path,e.storyId);if(!o)return;let r=x(o,e.storyId);if(!r||!r.screenshots)return;let i=r.screenshots.find(s=>s.id===e.screenshotId);return i&&(ie(o,i),{...i,actionSets:re(i.actionSets)})}async function yt(e){let t=g(e);return await w(t.path,"*")}var Bo=["waitForSelector","waitForTimeout","takeScreenshot","takeScreenshotAll","takeScreenshotOptions"];function ne(e){return !Bo.includes(e.name)}async function gt(e,t){if(t){let o=["Shift","Meta","Control","Alt"];for(let r=0;r<t.length;r++){let i=t[r];for(let s=0;s<i.actions.length;s++){let n=i.actions[s];n.name==="keyboard.down"&&n.args&&n.args.key&&o.includes(n.args.key)&&await e.keyboard.up(n.args.key);}}}}function Se(e,t,o){if(!o||!Object.keys(o).length)return;e[t]||(e[t]={});let r=K(e,t,o);if(r)return r;let i=nanoid.nanoid(12);return e[t][i]=o,i}function bt(e,t,o){let r=e[t+1];return o&&e.length>1&&e.length>t+1&&r&&ne(r)}async function wt(e){let t=g(e.filePath),o=await w(t.path,e.storyId),r=x(o,e.storyId,false);!r||!r.actionSets||(r.actionSets=Ho__default.default(r.actionSets,e.oldIndex,e.newIndex),await A(t,o));}async function St(e){let t=g(e.filePath),o=await w(t.path,e.storyId);if(!o)return;if(!e.actionSetId)throw new Error("Action set id has not been provided!");let r=x(o,e.storyId);!r||!r.actionSets||(r.actionSets=r.actionSets.filter(i=>i.id!==e.actionSetId),r.actionSets.length===0&&delete r.actionSets,o=ht(o,e.storyId),await A(t,o));}async function xt(e){let t=g(e.filePath),o=await w(t.path,e.storyId),r=x(o,e.storyId);return r?r.actionSets?r.actionSets.map(i=>(i.actions.forEach(s=>{s.id=nanoid.nanoid();}),i)):[]:[]}async function vt(e){let t=g(e.filePath),o=await w(t.path,e.storyId),r=x(o,e.storyId,true);if(!r)return;r.actionSets||(r.actionSets=[]),r.actionSets=r.actionSets.filter(s=>s.id!==e.actionSet.id);let i={...e.actionSet,actions:e.actionSet.actions.map(s=>{let{id:n,...a}=s;return a})};r.actionSets.push(i),await A(t,o);}var xe=server.initTRPC.context().create(),{router:O}=xe,u=xe.procedure,{createCallerFactory:kn}=xe;var It=O({changeActionSetIndex:u.input(Oe).mutation(async({input:e})=>wt(e)),deleteActionSet:u.input(De).mutation(async({input:e})=>St(e)),getActionSet:u.input(Te).mutation(async({input:e})=>xt(e)),saveActionSet:u.input(Ae).mutation(async({input:e})=>vt(e))});var M=".storybook/playwright-favourite-actions.json";async function kt(e){e.id=nanoid.nanoid(15);let t=N__namespace.existsSync(M)?jsonfile.readFileSync(M):{actionSets:[]};t.actionSets.push(e),jsonfile.writeFileSync(M,t,{EOL:`\r
129
+ `,spaces:2});}else try{N__namespace.unlinkSync(e.path);}catch{}}function x(e,t,o=false){if(e){if(!e.stories){if(!o)return;e.stories={};}if(!(!o&&!e.stories[t]))return e.stories[t]||(e.stories[t]={}),e.stories[t]}}function ht(e,t){let o=x(e,t);return o&&e.stories&&!Object.keys(o).length&&delete e.stories[t],e}function we(e,t,o){let r=`${t}Id`,i=e[t];if(!o||!i)return e;let s=false,n=e.stories||{},a=Object.keys(n);for(let p=0;p<a.length;p++){let l=n[a[p]];if(l.screenshots&&l.screenshots.find(d=>d[r]===o)){s=true;break}}return !s&&i[o]&&delete i[o],Object.keys(i).length||delete e[t],e}function K(e,t,o){if(!o||!e[t])return;let r=Object.keys(e[t]);for(let i=0;i<r.length;i++){let s=r[i],n=e[t][s];if(ut__default.default(n,o))return s}}function ft(e,t,o){let r=K(e,"browserOptions",o.browserOptions),i=K(e,"screenshotOptions",o.screenshotOptions),s=j(o),n=a=>a.actionSets&&a.actionSets.length>0?a.actionSets.map(l=>{let{id:d,...f}=l;return f}):void 0;for(let a=0;a<t.length;a++){let p=t[a];if(p.browserOptionsId===r&&p.screenshotOptionsId===i&&p.browserType===o.browserType&&ut__default.default(n(p),n(o))&&ut__default.default(j(p),s))return p}}function re(e,t){if(!e||!e.length)return;let o=t?.regenerateIds===true;return e.map(r=>({...r,actions:r.actions.map(i=>({...i,id:o?nanoid.nanoid(12):i.id||nanoid.nanoid(12)})),id:o?nanoid.nanoid(12):r.id||nanoid.nanoid(12)}))}function ie(e,t){e.browserOptions&&t.browserOptionsId&&(t.browserOptions=e.browserOptions[t.browserOptionsId]),e.screenshotOptions&&t.screenshotOptionsId&&(t.screenshotOptions=e.screenshotOptions[t.screenshotOptionsId]);}async function se(e){let t=g(e.filePath),o=await w(t.path,e.storyId);if(!o)return;let r=x(o,e.storyId);if(!r||!r.screenshots)return;let i=r.screenshots.find(s=>s.id===e.screenshotId);return i&&(ie(o,i),{...i,actionSets:re(i.actionSets)})}async function yt(e){let t=g(e);return await w(t.path,"*")}var Bo=["waitForSelector","waitForTimeout","takeScreenshot","takeScreenshotAll","takeScreenshotOptions"];function ne(e){return !Bo.includes(e.name)}async function gt(e,t){if(t){let o=["Shift","Meta","Control","Alt"];for(let r=0;r<t.length;r++){let i=t[r];for(let s=0;s<i.actions.length;s++){let n=i.actions[s];n.name==="keyboard.down"&&n.args&&n.args.key&&o.includes(n.args.key)&&await e.keyboard.up(n.args.key);}}}}function Se(e,t,o){if(!o||!Object.keys(o).length)return;e[t]||(e[t]={});let r=K(e,t,o);if(r)return r;let i=nanoid.nanoid(12);return e[t][i]=o,i}function bt(e,t,o){let r=e[t+1];return o&&e.length>1&&e.length>t+1&&r&&ne(r)}async function wt(e){let t=g(e.filePath),o=await w(t.path,e.storyId),r=x(o,e.storyId,false);!r||!r.actionSets||(r.actionSets=Ho__default.default(r.actionSets,e.oldIndex,e.newIndex),await A(t,o));}async function St(e){let t=g(e.filePath),o=await w(t.path,e.storyId);if(!o)return;if(!e.actionSetId)throw new Error("Action set id has not been provided!");let r=x(o,e.storyId);!r||!r.actionSets||(r.actionSets=r.actionSets.filter(i=>i.id!==e.actionSetId),r.actionSets.length===0&&delete r.actionSets,o=ht(o,e.storyId),await A(t,o));}async function xt(e){let t=g(e.filePath),o=await w(t.path,e.storyId),r=x(o,e.storyId);return r?r.actionSets?r.actionSets.map(i=>(i.actions.forEach(s=>{s.id=nanoid.nanoid();}),i)):[]:[]}async function vt(e){let t=g(e.filePath),o=await w(t.path,e.storyId),r=x(o,e.storyId,true);if(!r)return;r.actionSets||(r.actionSets=[]),r.actionSets=r.actionSets.filter(s=>s.id!==e.actionSet.id);let i={...e.actionSet,actions:e.actionSet.actions.map(s=>{let{id:n,...a}=s;return a})};r.actionSets.push(i),await A(t,o);}var xe=server.initTRPC.context().create(),{router:O}=xe,u=xe.procedure,{createCallerFactory:Tn}=xe;var It=O({changeActionSetIndex:u.input(Oe).mutation(async({input:e})=>wt(e)),deleteActionSet:u.input(De).mutation(async({input:e})=>St(e)),getActionSet:u.input(Te).mutation(async({input:e})=>xt(e)),saveActionSet:u.input(Ae).mutation(async({input:e})=>vt(e))});var M=".storybook/playwright-favourite-actions.json";async function kt(e){e.id=nanoid.nanoid(15);let t=N__namespace.existsSync(M)?jsonfile.readFileSync(M):{actionSets:[]};t.actionSets.push(e),jsonfile.writeFileSync(M,t,{EOL:`\r
130
130
  `,spaces:2});}async function ae(){return new Promise((e,t)=>{if(!N__namespace.existsSync(M)){e([]);return}jsonfile.readFile(M,(o,r)=>{if(o){t(o);return}e(r?.actionSets??[]);});})}async function Dt(e){let o={actionSets:(await ae()).filter(r=>r.id!==e.actionSetId)};jsonfile.writeFileSync(M,o,{EOL:`\r
131
131
  `,spaces:2});}var At=O({addFavouriteAction:u.input(Ee).mutation(async({input:e})=>kt(e)),deleteFavouriteAction:u.input(Fe).mutation(async({input:e})=>Dt(e)),getFavouriteActions:u.query(async()=>ae())});async function Ft(e){let t=await yt(e.filePath);if(!t)throw new Error("Unable to load screenshot config file data.");let o=g(e.filePath),r=pe__default.default(e.previousNamedExport),i=e.id.split("--")[1],s=i?pe__default.default(i):"",n="",a="",p=[],l=false,d=t.stories||{};if(t.stories||(t.stories=d),Object.keys(d).forEach(f=>{let y=d[f],m=f.split("--"),I=m[1]||"";n||(n=m[0]),a=e.parent;let h=r&&I===r;!l&&h&&(l=true),p=[...p,...(y.screenshots||[]).map(P=>({browser:P.browserType,newStoryId:h?s:void 0,screenshotTitle:P.title,storyId:I,storyTitle:n}))],m[0]=e.parent,h&&(m[1]=s);let S=m.join("--"),b=d[S];S!==f&&(delete d[f],delete d[S],d[S]=b?Go__default.default(y,b):y);},{}),r&&!l)throw new Error("Unable to locate old stories, make sure the previous named function name entered currently.");if(n&&a){n=pe__default.default(n),a=pe__default.default(a);for(let f=0;f<p.length;f++){let y=p[f],m=ge(y),I=ge({...y,storyId:y.newStoryId?y.newStoryId:y.storyId,storyTitle:a}),h=R__namespace.default.join(o.screenShotsDir,m);N__namespace.default.existsSync(h)&&N__namespace.default.renameSync(h,R__namespace.default.join(o.screenShotsDir,I));}}await A(o,t);}var qt=O({fixScreenshotFileName:u.input(qe).mutation(async({input:e})=>Ft(e))});var jt={acceptDownloads:{type:"boolean",description:"Whether to automatically download all the attachments. Defaults to `false` where all the downloads are canceled."},baseURL:{type:"string",description:"When using [page.goto(url[, options])](https://playwright.dev/docs/api/class-page#page-goto), [page.route(url, handler[, options])](https://playwright.dev/docs/api/class-page#page-route), [page.waitForURL(url[, options])](https://playwright.dev/docs/api/class-page#page-wait-for-url), [page.waitForRequest(urlOrPredicate[, options])](https://playwright.dev/docs/api/class-page#page-wait-for-request), or [page.waitForResponse(urlOrPredicate[, options])](https://playwright.dev/docs/api/class-page#page-wait-for-response) it takes the base URL in consideration by using the [`URL()`](https://developer.mozilla.org/en-US/docs/Web/API/URL/URL) constructor for building the corresponding URL. Examples:\n- baseURL: `http://localhost:3000` and navigating to `/bar.html` results in `http://localhost:3000/bar.html`\n- baseURL: `http://localhost:3000/foo/` and navigating to `./bar.html` results in `http://localhost:3000/foo/bar.html`"},bypassCSP:{type:"boolean",description:"Toggles bypassing page's Content-Security-Policy."},colorScheme:{type:"string",enum:["light","dark","no-preference"],description:"Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults to `'light'`."},deviceScaleFactor:{type:"number",description:"Specify device scale factor (can be thought of as dpr). Defaults to `1`."},forcedColors:{type:"string",enum:["active","none"],description:"Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults to `'none'`.\n\n> NOTE: It's not supported in WebKit, see [here](https://bugs.webkit.org/show_bug.cgi?id=225281) in their issue tracker."},geolocation:{type:"object",properties:{latitude:{type:"number",description:"Latitude between -90 and 90."},longitude:{type:"number",description:"Longitude between -180 and 180."},accuracy:{type:"number",description:"Non-negative accuracy value. Defaults to `0`."}},required:["latitude","longitude"],additionalProperties:false},hasTouch:{type:"boolean",description:"Specifies if viewport supports touch events. Defaults to false."},httpCredentials:{type:"object",properties:{username:{type:"string"},password:{type:"string"}},required:["username","password"],additionalProperties:false,description:"Credentials for [HTTP authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication)."},ignoreHTTPSErrors:{type:"boolean",description:"Whether to ignore HTTPS errors when sending network requests. Defaults to `false`."},isMobile:{type:"boolean",description:"Whether the `meta viewport` tag is taken into account and touch events are enabled. Defaults to `false`. Not supported in Firefox."},javaScriptEnabled:{type:"boolean",description:"Whether or not to enable JavaScript in the context. Defaults to `true`."},locale:{type:"string",description:"Specify user locale, for example `en-GB`, `de-DE`, etc. Locale will affect `navigator.language` value, `Accept-Language` request header value as well as number and date formatting rules."},offline:{type:"boolean",description:"Whether to emulate network being offline. Defaults to `false`."},permissions:{type:"array",items:{type:"string"},description:"A list of permissions to grant to all pages in this context. See [browserContext.grantPermissions(permissions[, options])](https://playwright.dev/docs/api/class-browsercontext#browser-context-grant-permissions) for more details."},proxy:{type:"object",properties:{server:{type:"string",description:"Proxy to be used for all requests. HTTP and SOCKS proxies are supported, for example `http://myproxy.com:3128` or `socks5://myproxy.com:3128`. Short form `myproxy.com:3128` is considered an HTTP proxy."},bypass:{type:"string",description:'Optional comma-separated domains to bypass proxy, for example `".com, chromium.org, .domain.com"`.'},username:{type:"string",description:"Optional username to use if HTTP proxy requires authentication."},password:{type:"string",description:"Optional password to use if HTTP proxy requires authentication."}},required:["server"],additionalProperties:false,description:"Network proxy settings to use with this context.\n\n> NOTE: For Chromium on Windows the browser needs to be launched with the global proxy for this option to work. If all contexts override the proxy, global proxy will be never used and can be any string, for example `launch({ proxy: { server: 'http://per-context' } })`."},recordHar:{type:"object",properties:{omitContent:{type:"boolean",description:"Optional setting to control whether to omit request content from the HAR. Defaults to `false`."},path:{type:"string",description:"Path on the filesystem to write the HAR file to."}},required:["path"],additionalProperties:false,description:"Enables [HAR](http://www.softwareishard.com/blog/har-12-spec) recording for all pages into `recordHar.path` file. If not specified, the HAR is not recorded. Make sure to await [browserContext.close()](https://playwright.dev/docs/api/class-browsercontext#browser-context-close) for the HAR to be saved."},recordVideo:{type:"object",properties:{dir:{type:"string",description:"Path to the directory to put videos into."},size:{type:"object",properties:{width:{type:"number",description:"Video frame width."},height:{type:"number",description:"Video frame height."}},required:["width","height"],additionalProperties:false,description:"Optional dimensions of the recorded videos. If not specified the size will be equal to `viewport` scaled down to fit into 800x800. If `viewport` is not configured explicitly the video size defaults to 800x450. Actual picture of each page will be scaled down if necessary to fit the specified size."}},required:["dir"],additionalProperties:false,description:"Enables video recording for all pages into `recordVideo.dir` directory. If not specified videos are not recorded. Make sure to await [browserContext.close()](https://playwright.dev/docs/api/class-browsercontext#browser-context-close) for videos to be saved."},reducedMotion:{type:"string",enum:["reduce","no-preference"],description:"Emulates `'prefers-reduced-motion'` media feature, supported values are `'reduce'`, `'no-preference'`. See [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults to `'no-preference'`."},screen:{type:"object",properties:{width:{type:"number",description:"page width in pixels."},height:{type:"number",description:"page height in pixels."}},required:["width","height"],additionalProperties:false,description:"Emulates consistent window screen size available inside web page via `window.screen`. Is only used when the `viewport` is set."},storageState:{anyOf:[{type:"string"},{type:"object",properties:{cookies:{type:"array",items:{type:"object",properties:{name:{type:"string"},value:{type:"string"},domain:{type:"string",description:"domain and path are required"},path:{type:"string",description:"domain and path are required"},expires:{type:"number",description:"Unix time in seconds."},httpOnly:{type:"boolean"},secure:{type:"boolean"},sameSite:{type:"string",enum:["Strict","Lax","None"],description:"sameSite flag"}},required:["name","value","domain","path","expires","httpOnly","secure","sameSite"],additionalProperties:false},description:"cookies to set for context"},origins:{type:"array",items:{type:"object",properties:{origin:{type:"string"},localStorage:{type:"array",items:{type:"object",additionalProperties:false}}},required:["origin","localStorage"],additionalProperties:false},description:"localStorage to set for context"}},required:["cookies","origins"],additionalProperties:false}],description:"Populates context with given storage state. This option can be used to initialize context with logged-in information obtained via [browserContext.storageState([options])](https://playwright.dev/docs/api/class-browsercontext#browser-context-storage-state). Either a path to the file with saved storage, or an object with the following fields:"},strictSelectors:{type:"boolean",description:"It specified, enables strict selectors mode for this context. In the strict selectors mode all operations on selectors that imply single target DOM element will throw when more than one element matches the selector. See [Locator] to learn more about the strict mode."},timezoneId:{type:"string",description:"Changes the timezone of the context. See [ICU's metaZones.txt](https://cs.chromium.org/chromium/src/third_party/icu/source/data/misc/metaZones.txt?rcl=faee8bc70570192d82d2978a71e2a615788597d1) for a list of supported timezone IDs."},userAgent:{type:"string",description:"Specific user agent to use in this context."},videoSize:{type:"object",properties:{width:{type:"number",description:"Video frame width."},height:{type:"number",description:"Video frame height."}},required:["width","height"],additionalProperties:false,description:"**DEPRECATED** Use `recordVideo` instead.",deprecated:true},videosPath:{type:"string",description:"**DEPRECATED** Use `recordVideo` instead.",deprecated:true},viewport:{type:"object",properties:{width:{type:"number",description:"page width in pixels."},height:{type:"number",description:"page height in pixels."}},required:["width","height"],additionalProperties:false,description:"Emulates consistent viewport for each page. Defaults to an 1280x720 viewport. `null` disables the default viewport."},cursor:{type:"boolean"}};var Ct={type:{type:"string",enum:["png","jpeg"],description:"Specify screenshot type, defaults to `png`."},quality:{type:"number",description:"The quality of the image, between 0-100. Not applicable to `png` images."},fullPage:{type:"boolean",description:"When true, takes a screenshot of the full scrollable page, instead of the currently visibvle viewport. Defaults to `false`."},clip:{type:"object",properties:{x:{type:"number",description:"x-coordinate of top-left corner of clip area"},y:{type:"number",description:"y-coordinate of top-left corner of clip area"},width:{type:"number",description:"width of clipping area"},height:{type:"number",description:"height of clipping area"}},required:["x","y","width","height"],additionalProperties:false,description:"An object which specifies clipping of the resulting image. Should have the following fields:"},omitBackground:{type:"boolean",description:"Hides default white background and allows capturing screenshots with transparency. Not applicable to `jpeg` images. Defaults to `false`."},timeout:{type:"number",description:"Maximum time in milliseconds, defaults to 30 seconds, pass `0` to disable timeout. The default value can be changed by using the browserContext.setDefaultTimeout(timeout) or page.setDefaultTimeout(timeout) methods."}};function Rt(e){if(e==="browser-options")return jt;if(e==="screenshot-options")return Ct}var Wt=O({getActionsSchema:u.query(()=>te()),getSchema:u.input(q.z.object({schemaName:q.z.string()})).mutation(({input:e})=>Rt(e.schemaName))});async function zt(e){let t=g(e.filePath),o=await w(t.path,e.storyId),r=x(o,e.storyId,false);if(!r||!r.screenshots)return;let i=Ho__default.default(r.screenshots,e.oldIndex,e.newIndex);r.screenshots=i.map((s,n)=>(s.index=n,s)),await A(t,o);}function B(e){let t=g(e.filePath),o=pe__default.default(`${R__namespace.default.basename(e.storyId)}--${e.title}--${e.browserType}`),r=R__namespace.default.join(t.screenShotsDir,"__diff_output__"),i=R__namespace.default.join(t.screenShotsDir,`${o}-snap.png`);return {diffDir:r,filePath:i,screenshotIdentifier:o,screenshotsDir:t.screenShotsDir}}async function _(e){let t=g(e.filePath),o=await w(t.path,e.storyId,false);if(!o)return;let r=x(o,e.storyId);if(!r||!r.screenshots||!r.screenshots.length)return [];let i=r.screenshots.find(n=>n.id===e.screenshotId);if(!i)return r.screenshots;let s=B({browserType:i.browserType,filePath:e.filePath,storyId:e.storyId,title:i.title});return N__namespace.existsSync(s.filePath)&&N__namespace.unlinkSync(s.filePath),r.screenshots=r.screenshots.filter(n=>n.id!==e.screenshotId),r.screenshots.length||delete r.screenshots,we(o,"browserOptions",i.browserOptionsId),we(o,"screenshotOptions",i.screenshotOptionsId),await A(t,o),r.screenshots||[]}async function le(e){let t=g(e.filePath),o=await w(t.path,e.storyId),r=x(o,e.storyId);if(!(!r||!r.screenshots||!r.screenshots.length))return r.screenshots.map(i=>(o&&ie(o,i),i))}async function Lt(e){let t=await le(e);if(!(!t||!t.length))for(let o=0;o<t.length;o++){let r=t[o];r&&await _({filePath:e.filePath,screenshotId:r.id,storyId:e.storyId});}}async function Ut(e){let{getScreenshotTitle:t}=v();if(!t)throw new Error("getScreenshotTitle is not configured.");return t({...e})}function Bt(){return typeof v().getScreenshotTitle=="function"}async function _t(e,t={}){let{blur:o,timeout:r}=t;await this.fill(e,""),o&&await this.$eval(e,i=>i.blur()),r&&await this.waitForTimeout(r);}async function H(e,t){await e.waitForSelector(t);let o=await e.$(t);if(!o)throw new Error("Unable to find selector!");let r=await o.boundingBox();if(!r)throw new Error("Unable to get boundingBox!");return r}function F(e,t,o){return !o||!o[t]?e:o[t]}async function Ht(e,t,o,r){let{steps:i=1,skipMouseUp:s}=r||{},n=await H(this,e),a=F(n.width/2,"x",o),p=F(n.height/2,"y",o),l=F(0,"x",t),d=F(0,"y",t);await this.mouse.move(n.x+a,n.y+p,{steps:i}),await this.mouse.down(),await this.mouse.move(l,d,{steps:i}),s||await this.mouse.up();}async function E(e,t,o,r,i,s,n){await e.$eval(o,(a,p)=>{let l=a.getBoundingClientRect(),{client:d={},page:f={},screen:y={},type:m,options:I}=p,h=new Touch({clientX:d.x,clientY:d.y,identifier:Date.now(),pageX:f.x||(d.x!==void 0?l.left+d.x:void 0),pageY:f.y||(d.y!==void 0?l.top+d.y:void 0),screenX:y.x,screenY:y.y,target:a}),S=new TouchEvent(m,{bubbles:true,cancelable:true,...I,changedTouches:[h],targetTouches:[h],touches:[h]});return a.dispatchEvent(S)},{client:s,options:n,page:r,screen:i,type:t});}async function Nt(e,t,o,r,i,s,n,a){await E(this,"touchstart",e,t,s,r,a),await E(this,"touchmove",e,o,n,i,a),await E(this,"touchend",e,o,n,i,a);}function $t(e){let t=e;return t.dragDropSelector=Ht,t.scrollSelector=Zt,t.mouseDownOnSelector=Vt,t.mouseMoveToSelector=Yt,t.setSelectorSize=Gt,t.clearInput=_t,t.selectorMouseWheel=Xt,t.touchCancel=Qt,t.touchMove=eo,t.touchEnd=Jt,t.touchStart=to,t.touchFromTo=Nt,t.mouseFromTo=Kt,t}async function Vt(e,t,o){let{steps:r=1}=o||{},i=await H(this,e),s=F(i.width/2,"x",t),n=F(i.height/2,"y",t);await this.mouse.move(i.x+s,i.y+n,{steps:r}),await this.mouse.down();}async function Kt(e,t,o){let{skipMouseUp:r,steps:i=1}=o||{};if(e.x===void 0||e.y===void 0||t.x===void 0||t.y===void 0)throw new Error("mouseFromTo requires from/to coordinates (x and y).");await this.mouse.move(e.x,e.y,{steps:i}),await this.mouse.down(),await this.mouse.move(t.x,t.y,{steps:i}),r||await this.mouse.up();}async function Yt(e,t,o){let{steps:r=1}=o||{},i=await H(this,e),s=F(i.width/2,"x",t),n=F(i.height/2,"y",t);await this.mouse.move(i.x+s,i.y+n,{steps:r});}async function Zt(e,t){return await this.waitForSelector(e),await this.$eval(e,(r,i)=>{i.top&&(r.scrollTop=i.top),i.left&&(r.scrollLeft=i.left);},t)}async function Xt(e,t){return await this.waitForSelector(e),await this.$eval(e,(r,i)=>{let s=new WheelEvent("wheel",i);r.dispatchEvent(s);},t)}async function Gt(e,t,o){await this.$eval(e,(r,i)=>{i.width!==void 0&&(r.style.width=i.width),i.height!==void 0&&(r.style.height=i.height);},{height:o,width:t});}async function Qt(e,t,o,r,i){await E(this,"touchcancel",e,t,o,r,i);}async function Jt(e,t,o,r,i){await E(this,"touchend",e,t,o,r,i);}async function eo(e,t,o,r,i){await E(this,"touchmove",e,t,o,r,i);}async function to(e,t,o,r,i){await E(this,"touchstart",e,t,o,r,i);}async function Y(e,t,o,r){let i={...t,requestId:t.requestId||""};return o.beforeScreenshot&&await o.beforeScreenshot(e,i,i),r?r.screenshot(t.screenshotOptions):e.screenshot(t.screenshotOptions)}async function de(e,t){let o={...e,requestId:e.requestId||""},r=v(),{screenshotOptions:i={}}=r,s=e.browserOptions,n=await r.getPage(o.browserType,s,o);if(!n)throw new Error("Make sure to return an instance of a page from getPage.");$t(n);let a=j(e),p=Je(r.storybookEndpoint,e.storyId,e.props,a);r.afterUrlConstruction&&(p=r.afterUrlConstruction(p,o)),await n.goto(p,r.pageGotoOptions),r.afterNavigation&&await r.afterNavigation(n,o),s&&s.cursor&&await dt(n);let l=[],d,f;if(e.actionSets){let I=e.actionSets.reduce((b,P)=>(b=[...b,...P.actions],b),[]);f=I.slice(-1)[0];let h=I.find(b=>b.name==="takeScreenshotAll");d=I.find(b=>b.name==="takeScreenshotOptions");let S=I.filter(b=>!["takeScreenshotAll","takeScreenshotOptions"].includes(b.name));h&&S.filter(b=>ne(b)).length>0&&l.push({buffer:await Y(n,e,r),options:h.args});for(let b=0;b<S.length;b++){let P=S[b];if(P.name==="takeElementScreenshot"){if(P&&P.args&&P.args.selector){let W=await n.$(P.args.selector);l.push({buffer:await Y(n,e,r,W||void 0),options:P.args});}continue}if(P.name==="takeScreenshot"){l.push({buffer:await Y(n,e,r),options:P.args});continue}await pt(n,P),bt(S,b,!!h)&&l.push({buffer:await Y(n,e,r),options:h?.args||{}});}}let y=f&&(f.name==="takeElementScreenshot"||f.name==="takeScreenshot"),m;if(y||(m=await Y(n,e,r)),r.releaseModifierKey&&await gt(n,e.actionSets||[]),r.afterScreenshot&&await r.afterScreenshot(n,o),l.length){let I=e&&e.screenshotOptions&&e.screenshotOptions.type?e.screenshotOptions.type:"png",h=d&&d.args?d.args:{};if(h={mergeType:h.mergeType?h.mergeType:i.mergeType||"stitch",overlayOptions:{...i.overlayOptions,...h.overlayOptions},stitchOptions:{...i.stitchOptions,...h.stitchOptions}},h.mergeType==="stitch"){let S=l.map(b=>b.buffer);m&&S.push(m),m=await(await or__default.default(S,{...h.stitchOptions})).toFormat(I).toBuffer();}else {let S=m||l[0]?.buffer;if(!S)throw new Error("Unable to create screenshot image buffer.");let P=(m===void 0&&l.length===1?l:l.filter((W,mo)=>!(m===void 0&&mo===0))).map(W=>({blend:"multiply",input:W.buffer,...h.overlayOptions,...W.options?W.options.stitchOptions:{}}));m=await rr__default.default(S).composite(P).toFormat(I).toBuffer();}}if(!m)throw new Error("Unable to create screenshot image buffer.");return {base64:t?m.toString("base64"):void 0,browserName:e.browserType,buffer:m}}async function $(e,t,o){return new Promise((r,i)=>{try{let s=B(e),n=v(),a=n.imageDiffOptions??{},p=R__namespace.default.resolve(process.cwd(),"__stories__",e.storyId,"__diff_output__");N__namespace.existsSync(p)||N__namespace.mkdirSync(p,{recursive:!0});let l=diffSnapshot.runDiffImageToSnapshot({blur:0,diffDir:p,diffDirection:n.diffDirection?n.diffDirection:"horizontal",failureThreshold:0,failureThresholdType:"pixel",receivedImageBuffer:t,snapshotIdentifier:s.screenshotIdentifier,snapshotsDir:s.screenshotsDir,updatePassedSnapshot:!1,updateSnapshot:!1,...a,...o});l.pass||N__namespace.rmdirSync(p,{recursive:!0}),l.added&&l.pass===!1&&delete l.pass,l.diffDirection=n.diffDirection,a.allowSizeMismatch&&(l.diffSize=!1),r(l);}catch(s){i(s);}})}async function oo(e){let t=g(e.filePath),o=await w(t.path,e.storyId);if(!o)throw new Error("Unable to load story data.");let r=x(o,e.storyId,true);if(!r)throw new Error("Story not found");if(e.updateScreenshot&&(r.screenshots=await _({filePath:e.filePath,screenshotId:e.updateScreenshot.id,storyId:e.storyId})),r.screenshots||(r.screenshots=[]),!e.base64)throw new Error("Unable to save screenshot without image data.");let i=r.screenshots.find(p=>p.id===e.id);if(!i){let p=r.screenshots.find(d=>d.title===e.title&&d.browserType===e.browserType);if(p)throw new Error(`Found screenshot with the same title, title must be unique.
132
132
  Title: ${p.title}
133
133
  Browser: ${e.browserType}`);let l=ft(o,r.screenshots,e);if(l)throw new Error(`Found screenshot with the same setting, Screenshot settings must be unique for each screenshot.
134
134
  Title: ${l.title}
135
- Browser: ${l.browserType}`)}let s=await $(e,Buffer.from(e.base64,"base64")),n=j(e),a=!e.args&&e.props&&Object.keys(e.props).length>0?e.props:void 0;if(s.added&&s.pass===false&&delete s.pass,i)s.oldScreenShotTitle=i.title;else {let p=e.updateScreenshot?e.updateScreenshot.index:r.screenshots.length;r.screenshots.push({actionSets:re(e.actionSets,{regenerateIds:true}),args:n,browserOptionsId:Se(o,"browserOptions",e.browserOptions),browserType:e.browserType,id:e.id,index:p,props:a,screenshotOptionsId:Se(o,"screenshotOptions",e.screenshotOptions),title:e.title}),s.index=p,await A(t,o);}return s}async function me(e){let t=e.requestId||"",{requestType:o="story-screenshot"}=e,r=v(),i=await se(e);if(!i)throw new Error("Unable to find screenshot data.");let s={},n;try{if(n=await de({actionSets:i.actionSets,args:j(i),browserOptions:i.browserOptions,browserType:i.browserType,props:i.props,requestId:e.requestId,requestType:o,screenshotOptions:i.screenshotOptions,storyId:e.storyId},!0),r.compareScreenshot!==void 0){let a=B({...e,browserType:i.browserType,title:i.title});if(!N__namespace.default.existsSync(a.filePath))throw new Error(`Unable to find the file for '${a.screenshotIdentifier}' screenshot in '${a.screenshotsDir}' directory!`);let p={...a,get base64(){return N__namespace.default.readFileSync(a.filePath,{encoding:"base64"})},get buffer(){return N__namespace.default.readFileSync(a.filePath)}},l=await r.compareScreenshot({...e,requestId:t,...i,baseImage:p,screenshot:n});if(l!==!1){let{diffImageString:d,...f}=l;s={imgSrcString:d,...f,newScreenshot:p.base64};}}Object.keys(s).length===0&&(s=await $({browserType:i.browserType,filePath:e.filePath,storyId:e.storyId,title:i.title},n.buffer)),s.added&&s.pass===!1&&delete s.pass,s.newScreenshot=n.base64;}catch(a){s.pass=false,s.error=typeof a=="string"?a:a.message;}return s.screenshotId=e.screenshotId,s.storyId=e.storyId,s.screenshotData=i,s.filePath=e.filePath,s}async function ro(e){return await nr__default.default(["**/*.playwright.json","!node_modules/**"])}async function he(e){let t=g(e.filePath),o=await w(t.path,e.storyId);e.requestType=e.requestType||"story";let r={...e,requestId:e.requestId||""},i=v(),s=x(o,e.storyId);if(!s||!s.screenshots)throw new Error("Unable to find story screenshots");let n=[];i.beforeStoryImageDiff&&await i.beforeStoryImageDiff(r);for(let a=0;a<s.screenshots.length;a++){let p=s.screenshots[a],l=await me({filePath:e.filePath,requestId:r.requestId,requestType:e.requestType,screenshotId:p.id,storyId:e.storyId});n.push(l);}return i.afterStoryImageDiff&&await i.afterStoryImageDiff(n,r),n}async function io(e){let{filePath:t,onComplete:o,storyId:r,requestType:i}=e,s=v(),n=await ct(t),a=(n.storyData[0]?.storyId??r??"").split("--")[0],p=ar__default.default(s.concurrencyLimit?.story??1);s.beforeFileImageDiff&&await s.beforeFileImageDiff({...e,storyId:a});let l=n.storyData.reduce((y,m)=>(i==="story"&&r&&m.storyId!==r||m.data.screenshots&&m.data.screenshots.length&&y.push(p(async()=>he({filePath:t,requestId:e.requestId,requestType:e.requestType?e.requestType:r?"story":"file",storyId:m.storyId}))),y),[]),f=(await Promise.all(l)).reduce((y,m)=>{let I=m.map(h=>{if(h.added&&h.pass===false){let S={...h};return delete S.pass,S}return h});return [...y,...I]},[]);return s.afterFileImageDiff&&await s.afterFileImageDiff(f,{...e,storyId:a}),o&&await o(f),f}async function so(e){let t={...e,requestId:e.requestId||""},{requestType:o}=e,r=await ro(),i=v(),s=ar__default.default(i.concurrencyLimit?.file??1);i.beforeAllImageDiff&&await i.beforeAllImageDiff(t);let n=r.reduce((l,d)=>(o!=="all"&&e.filePath&&!tt(d,e.filePath)||l.push(s(async()=>io({disableEvans:true,filePath:d,requestId:e.requestId??"",requestType:o,storyId:e.storyId}))),l),[]),p=(await Promise.all(n)).reduce((l,d)=>{let f=d.map(y=>{if(y.added&&y.pass===false){let m={...y};return delete m.pass,m}return y});return [...l,...f]},[]);return i.afterAllImageDiff&&await i.afterAllImageDiff(p,t),p}async function no(e){let t=await se(e);if(!t)throw new Error("Unable to find screenshot data.");if(!e.base64)throw new Error("Unable to update screenshot without image data.");let o=await $({browserType:t.browserType,filePath:e.filePath,storyId:e.storyId,title:t.title},Buffer.from(e.base64,"base64"),{updatePassedSnapshot:true,updateSnapshot:true}),r=o.added&&o.pass===false?(()=>{let i={...o};return delete i.pass,i})():o;return r.screenshotId=e.screenshotId,r.storyId=e.storyId,r}var ao=O({changeScreenshotIndex:u.input(ze).mutation(async({input:e})=>zt(e)),deleteScreenshot:u.input(Le).mutation(async({input:e})=>_(e)),deleteStoryScreenshots:u.input(Ue).mutation(async({input:e})=>Lt(e)),generateScreenshotTitle:u.input(Ze).mutation(async({input:e})=>Ut(e)),getStoryScreenshots:u.input(Z).mutation(async({input:e})=>le(e)),hasScreenshotTitleGenerator:u.query(()=>Bt()),saveScreenshot:u.input(Be).output(He).mutation(async({input:e})=>oo(e)),takeScreenshot:u.input(Ne).mutation(async({input:e})=>de(e,true)),testScreenshot:u.input($e).output(Q).mutation(async({input:e})=>me(e)),testScreenshots:u.input(Ke).output(Q.array()).mutation(async({input:e})=>so(e)),testStoryScreenshots:u.input(Ve).output(Q.array()).mutation(async({input:e})=>he(e)),updateScreenshot:u.input(Ye).mutation(async({input:e})=>no(e))});function po(){return v().theme??null}var co=O({getThemeData:u.query(()=>po())});var lo=O({actionSet:It,favouriteActions:At,fixTitle:qt,schema:Wt,screenshot:ao,theme:co});var yl=lo;module.exports=yl;//# sourceMappingURL=routes.js.map
135
+ Browser: ${l.browserType}`)}let s=await $(e,Buffer.from(e.base64,"base64")),n=j(e),a=!e.args&&e.props&&Object.keys(e.props).length>0?e.props:void 0;if(s.added&&s.pass===false&&delete s.pass,i)s.oldScreenShotTitle=i.title;else {let p=e.updateScreenshot?e.updateScreenshot.index:r.screenshots.length;r.screenshots.push({actionSets:re(e.actionSets,{regenerateIds:true}),args:n,browserOptionsId:Se(o,"browserOptions",e.browserOptions),browserType:e.browserType,id:e.id,index:p,props:a,screenshotOptionsId:Se(o,"screenshotOptions",e.screenshotOptions),title:e.title}),s.index=p,await A(t,o);}return s}async function me(e){let t=e.requestId||"",{requestType:o="story-screenshot"}=e,r=v(),i=await se(e);if(!i)throw new Error("Unable to find screenshot data.");let s={},n;try{if(n=await de({actionSets:i.actionSets,args:j(i),browserOptions:i.browserOptions,browserType:i.browserType,props:i.props,requestId:e.requestId,requestType:o,screenshotOptions:i.screenshotOptions,storyId:e.storyId},!0),r.compareScreenshot!==void 0){let a=B({...e,browserType:i.browserType,title:i.title});if(!N__namespace.default.existsSync(a.filePath))throw new Error(`Unable to find the file for '${a.screenshotIdentifier}' screenshot in '${a.screenshotsDir}' directory!`);let p={...a,get base64(){return N__namespace.default.readFileSync(a.filePath,{encoding:"base64"})},get buffer(){return N__namespace.default.readFileSync(a.filePath)}},l=await r.compareScreenshot({...e,requestId:t,...i,baseImage:p,screenshot:n});if(l!==!1){let{diffImageString:d,...f}=l;s={imgSrcString:d,...f,newScreenshot:p.base64};}}Object.keys(s).length===0&&(s=await $({browserType:i.browserType,filePath:e.filePath,storyId:e.storyId,title:i.title},n.buffer)),s.added&&s.pass===!1&&delete s.pass,s.newScreenshot=n.base64;}catch(a){s.pass=false,s.error=typeof a=="string"?a:a.message;}return s.screenshotId=e.screenshotId,s.storyId=e.storyId,s.screenshotData=i,s.filePath=e.filePath,s}async function ro(e){return await nr__default.default(["**/*.playwright.json","!node_modules/**"])}async function he(e){let t=g(e.filePath),o=await w(t.path,e.storyId);e.requestType=e.requestType||"story";let r={...e,requestId:e.requestId||""},i=v(),s=x(o,e.storyId);if(!s||!s.screenshots)throw new Error("Unable to find story screenshots");let n=[];i.beforeStoryImageDiff&&await i.beforeStoryImageDiff(r);for(let a=0;a<s.screenshots.length;a++){let p=s.screenshots[a],l=await me({filePath:e.filePath,requestId:r.requestId,requestType:e.requestType,screenshotId:p.id,storyId:e.storyId});n.push(l);}return i.afterStoryImageDiff&&await i.afterStoryImageDiff(n,r),n}async function io(e){let{filePath:t,onComplete:o,storyId:r,requestType:i}=e,s=v(),n=await ct(t),a=(n.storyData[0]?.storyId??r??"").split("--")[0],p=ar__default.default(s.concurrencyLimit?.story??1);s.beforeFileImageDiff&&await s.beforeFileImageDiff({...e,storyId:a});let l=n.storyData.reduce((y,m)=>(i==="story"&&r&&m.storyId!==r||m.data.screenshots&&m.data.screenshots.length&&y.push(p(async()=>he({filePath:t,requestId:e.requestId,requestType:e.requestType?e.requestType:r?"story":"file",storyId:m.storyId}))),y),[]),f=(await Promise.all(l)).reduce((y,m)=>{let I=m.map(h=>{if(h.added&&h.pass===false){let S={...h};return delete S.pass,S}return h});return [...y,...I]},[]);return s.afterFileImageDiff&&await s.afterFileImageDiff(f,{...e,storyId:a}),o&&await o(f),f}async function so(e){let t={...e,requestId:e.requestId||""},{requestType:o}=e,r=await ro(),i=v(),s=ar__default.default(i.concurrencyLimit?.file??1);i.beforeAllImageDiff&&await i.beforeAllImageDiff(t);let n=r.reduce((l,d)=>(o!=="all"&&e.filePath&&!tt(d,e.filePath)||l.push(s(async()=>io({disableEvans:true,filePath:d,requestId:e.requestId??"",requestType:o,storyId:e.storyId}))),l),[]),p=(await Promise.all(n)).reduce((l,d)=>{let f=d.map(y=>{if(y.added&&y.pass===false){let m={...y};return delete m.pass,m}return y});return [...l,...f]},[]);return i.afterAllImageDiff&&await i.afterAllImageDiff(p,t),p}async function no(e){let t=await se(e);if(!t)throw new Error("Unable to find screenshot data.");if(!e.base64)throw new Error("Unable to update screenshot without image data.");let o=await $({browserType:t.browserType,filePath:e.filePath,storyId:e.storyId,title:t.title},Buffer.from(e.base64,"base64"),{updatePassedSnapshot:true,updateSnapshot:true}),r=o.added&&o.pass===false?(()=>{let i={...o};return delete i.pass,i})():o;return r.screenshotId=e.screenshotId,r.storyId=e.storyId,r}var ao=O({changeScreenshotIndex:u.input(ze).mutation(async({input:e})=>zt(e)),deleteScreenshot:u.input(Le).mutation(async({input:e})=>_(e)),deleteStoryScreenshots:u.input(Ue).mutation(async({input:e})=>Lt(e)),generateScreenshotTitle:u.input(Ze).mutation(async({input:e})=>Ut(e)),getStoryScreenshots:u.input(Z).mutation(async({input:e})=>le(e)),hasScreenshotTitleGenerator:u.query(()=>Bt()),saveScreenshot:u.input(Be).output(He).mutation(async({input:e})=>oo(e)),takeScreenshot:u.input(Ne).mutation(async({input:e})=>de(e,true)),testScreenshot:u.input($e).output(Q).mutation(async({input:e})=>me(e)),testScreenshots:u.input(Ke).output(Q.array()).mutation(async({input:e})=>so(e)),testStoryScreenshots:u.input(Ve).output(Q.array()).mutation(async({input:e})=>he(e)),updateScreenshot:u.input(Ye).mutation(async({input:e})=>no(e))});function po(){return v().theme??null}var co=O({getThemeData:u.query(()=>po())});var lo=O({actionSet:It,favouriteActions:At,fixTitle:qt,schema:Wt,screenshot:ao,theme:co});var xl=lo;module.exports=xl;//# sourceMappingURL=routes.js.map
136
136
  //# sourceMappingURL=routes.js.map