@storybook/telemetry 7.0.0-alpha.53 → 7.0.0-alpha.55

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.
package/dist/index.d.ts CHANGED
@@ -723,6 +723,44 @@ interface Parameters {
723
723
  [name: string]: any;
724
724
  }
725
725
 
726
+ interface StoriesSpecifier {
727
+ /**
728
+ * When auto-titling, what to prefix all generated titles with (default: '')
729
+ */
730
+ titlePrefix?: string;
731
+ /**
732
+ * Where to start looking for story files
733
+ */
734
+ directory: string;
735
+ /**
736
+ * What does the filename of a story file look like?
737
+ * (a glob, relative to directory, no leading `./`)
738
+ * If unset, we use `** / *.@(mdx|stories.@(mdx|tsx|ts|jsx|js))` (no spaces)
739
+ */
740
+ files?: string;
741
+ }
742
+ type StoriesEntry = string | StoriesSpecifier;
743
+ interface IndexerOptions {
744
+ makeTitle: (userTitle?: string) => string;
745
+ }
746
+ interface IndexedStory {
747
+ id: string;
748
+ name: string;
749
+ tags?: Tag[];
750
+ parameters?: Parameters;
751
+ }
752
+ interface IndexedCSFFile {
753
+ meta: {
754
+ title?: string;
755
+ tags?: Tag[];
756
+ };
757
+ stories: IndexedStory[];
758
+ }
759
+ interface StoryIndexer {
760
+ test: RegExp;
761
+ indexer: (fileName: string, options: IndexerOptions) => Promise<IndexedCSFFile>;
762
+ }
763
+
726
764
  interface Options$1 {
727
765
  allowRegExp: boolean;
728
766
  allowFunction: boolean;
@@ -780,7 +818,7 @@ interface Presets {
780
818
  apply(extension: 'framework', config?: {}, args?: any): Promise<Preset>;
781
819
  apply(extension: 'babel', config?: {}, args?: any): Promise<TransformOptions>;
782
820
  apply(extension: 'entries', config?: [], args?: any): Promise<unknown>;
783
- apply(extension: 'stories', config?: [], args?: any): Promise<CoreCommon_StoriesEntry[]>;
821
+ apply(extension: 'stories', config?: [], args?: any): Promise<StoriesEntry[]>;
784
822
  apply(extension: 'managerEntries', config: [], args?: any): Promise<string[]>;
785
823
  apply(extension: 'refs', config?: [], args?: any): Promise<unknown>;
786
824
  apply(extension: 'core', config?: {}, args?: any): Promise<CoreConfig>;
@@ -861,26 +899,6 @@ interface StorybookConfigOptions {
861
899
  presetsList?: LoadedPreset[];
862
900
  }
863
901
  type Options$2 = LoadOptions & StorybookConfigOptions & CLIOptions & BuilderOptions;
864
- interface CoreCommon_IndexerOptions {
865
- makeTitle: (userTitle?: string) => string;
866
- }
867
- interface CoreCommon_IndexedStory {
868
- id: string;
869
- name: string;
870
- tags?: Tag[];
871
- parameters?: Parameters;
872
- }
873
- interface CoreCommon_StoryIndex {
874
- meta: {
875
- title?: string;
876
- tags?: Tag[];
877
- };
878
- stories: CoreCommon_IndexedStory[];
879
- }
880
- interface CoreCommon_StoryIndexer {
881
- test: RegExp;
882
- indexer: (fileName: string, options: CoreCommon_IndexerOptions) => Promise<CoreCommon_StoryIndex>;
883
- }
884
902
  /**
885
903
  * Options for TypeScript usage within Storybook.
886
904
  */
@@ -898,23 +916,6 @@ interface TypescriptOptions {
898
916
  */
899
917
  skipBabel: boolean;
900
918
  }
901
- interface CoreCommon_StoriesSpecifier {
902
- /**
903
- * When auto-titling, what to prefix all generated titles with (default: '')
904
- */
905
- titlePrefix?: string;
906
- /**
907
- * Where to start looking for story files
908
- */
909
- directory: string;
910
- /**
911
- * What does the filename of a story file look like?
912
- * (a glob, relative to directory, no leading `./`)
913
- * If unset, we use `** / *.stories.@(mdx|tsx|ts|jsx|js)` (no spaces)
914
- */
915
- files?: string;
916
- }
917
- type CoreCommon_StoriesEntry = string | CoreCommon_StoriesSpecifier;
918
919
  type Preset = string | {
919
920
  name: string;
920
921
  options?: any;
@@ -1013,7 +1014,7 @@ interface StorybookConfig {
1013
1014
  *
1014
1015
  * @example `['./src/*.stories.@(j|t)sx?']`
1015
1016
  */
1016
- stories: CoreCommon_StoriesEntry[];
1017
+ stories: StoriesEntry[];
1017
1018
  /**
1018
1019
  * Framework, e.g. '@storybook/react', required in v7
1019
1020
  */
@@ -1047,7 +1048,7 @@ interface StorybookConfig {
1047
1048
  /**
1048
1049
  * Process CSF files for the story index.
1049
1050
  */
1050
- storyIndexers?: (indexers: CoreCommon_StoryIndexer[], options: Options$2) => CoreCommon_StoryIndexer[];
1051
+ storyIndexers?: (indexers: StoryIndexer[], options: Options$2) => StoryIndexer[];
1051
1052
  /**
1052
1053
  * Docs related features in index generation
1053
1054
  */
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var ye=Object.create;var u=Object.defineProperty;var pe=Object.getOwnPropertyDescriptor;var me=Object.getOwnPropertyNames;var fe=Object.getPrototypeOf,le=Object.prototype.hasOwnProperty;var de=(e,t)=>{for(var o in t)u(e,o,{get:t[o],enumerable:!0})},F=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of me(t))!le.call(e,n)&&n!==o&&u(e,n,{get:()=>t[n],enumerable:!(r=pe(t,n))||r.enumerable});return e};var p=(e,t,o)=>(o=e!=null?ye(fe(e)):{},F(t||!e||!e.__esModule?u(o,"default",{value:e,enumerable:!0}):o,e)),ge=e=>F(u({},"__esModule",{value:!0}),e);var xe={};de(xe,{computeStorybookMetadata:()=>q,getStorybookMetadata:()=>M,metaFrameworks:()=>O,sanitizeAddonName:()=>R,telemetry:()=>Pe});module.exports=ge(xe);var C=require("@storybook/client-logger");var J=p(require("read-pkg-up")),P=require("detect-package-manager"),m=require("@storybook/core-common");var L=p(require("path")),j=async e=>{let t=Object.keys(e);return Promise.all(t.map(v))},v=async e=>{try{let t=await D(e);return{name:e,version:t.version}}catch{return{name:e,version:null}}},D=async e=>require(L.default.join(e,"package.json"));var k=p(require("fs-extra")),b=p(require("path")),Y=require("@storybook/core-common"),W={Nx:"nx.json",Turborepo:"turbo.json",Lerna:"lerna.json",Rush:"rush.json",Lage:"lage.config.json"},_=()=>{let e=(0,Y.getProjectRoot)();if(!e)return;let o=Object.keys(W).find(n=>{let s=b.default.join(e,W[n]);return k.default.existsSync(s)});if(o)return o;if(!k.default.existsSync(b.default.join(e,"package.json")))return;let r=k.default.readJsonSync(b.default.join(e,"package.json"));if(r!=null&&r.workspaces)return"Workspaces"};var T=require("path");function z(e){return e.replace(/[-[/{}()*+?.\\^$|]/g,"\\$&")}function E(e,t=T.sep){if(!e)return e;let o=process.cwd().split(t);for(;o.length>1;){let r=o.join(t),n=new RegExp(z(r),"g");e=e.replace(n,"$SNIP");let s=o.join(t+t),f=new RegExp(z(s),"g");e=e.replace(f,"$SNIP"),o.pop()}return e}function h(e,t=T.sep){e=JSON.parse(JSON.stringify(e,Object.getOwnPropertyNames(e)));let o=E(JSON.stringify(e),t);return JSON.parse(o)}var ue=["html","react","svelte","vue3","preact","server","vue","web-components","angular","ember"],ke=["builder-webpack5","builder-vite"];function U(e,t){let{name:o="",version:r,dependencies:n,devDependencies:s,peerDependencies:f}=e,c={[o]:r,...n,...s,...f};return t.map(y=>`@storybook/${y}`).find(y=>c[y])}async function H(e){let{framework:t}=e;if(!t)return{};let o=typeof t=="string"?{name:t}:t,r=await D(o.name),n=U(r,ke),s=U(r,ue);return{framework:o,builder:n,renderer:s}}var O={next:"Next","react-scripts":"CRA",gatsby:"Gatsby","@nuxtjs/storybook":"nuxt","@nrwl/storybook":"nx","@vue/cli-service":"vue-cli","@sveltejs/kit":"svelte-kit"},R=e=>E(e).replace(/\/dist\/.*/,"").replace(/\.[mc]?[tj]?s[x]?$/,"").replace(/\/register$/,"").replace(/\/manager$/,"").replace(/\/preset$/,""),q=async({packageJson:e,mainConfig:t})=>{var B;let o={generatedAt:new Date().getTime(),hasCustomBabel:!1,hasCustomWebpack:!1,hasStaticDirs:!1,hasStorybookEslint:!1,refCount:0},r={...e==null?void 0:e.dependencies,...e==null?void 0:e.devDependencies,...e==null?void 0:e.peerDependencies},n=Object.keys(r).find(a=>!!O[a]);if(n){let{version:a}=await v(n);o.metaFramework={name:O[n],packageName:n,version:a}}let s=_();s&&(o.monorepo=s);try{let a=await(0,P.detect)({cwd:(0,m.getProjectRoot)()}),i=await(0,P.getNpmVersion)(a);o.packageManager={type:a,version:i}}catch{}o.hasCustomBabel=!!t.babel,o.hasCustomWebpack=!!t.webpackFinal,o.hasStaticDirs=!!t.staticDirs,t.typescript&&(o.typescriptOptions=t.typescript);let f=await H(t);t.refs&&(o.refCount=Object.keys(t.refs).length),t.features&&(o.features=t.features);let c={};t.addons&&t.addons.forEach(a=>{let i,V;typeof a=="string"?i=R(a):(V=a.options,i=R(a.name)),c[i]={options:V,version:void 0}}),(await j(c)).forEach(({name:a,version:i})=>{c[a].version=i});let l=Object.keys(c),g=Object.keys(r).filter(a=>a.includes("storybook")&&!l.includes(a)).reduce((a,i)=>({...a,[i]:{version:void 0}}),{});(await j(g)).forEach(({name:a,version:i})=>{g[a].version=i});let se=r.typescript?"typescript":"javascript",ie=!!r["eslint-plugin-storybook"],$=(0,m.getStorybookInfo)(e),ce=((B=g[$.frameworkPackage])==null?void 0:B.version)||$.version;return{...o,...f,storybookVersion:ce,language:se,storybookPackages:g,addons:c,hasStorybookEslint:ie}},w,M=async e=>{var n;if(w)return w;let{packageJson:t={}}=J.default.sync({cwd:process.cwd(),normalize:!1})||{},o=(e||(0,m.getStorybookConfiguration)(((n=t==null?void 0:t.scripts)==null?void 0:n.storybook)||"","-c","--config-dir"))??".storybook",r=(0,m.loadMainConfig)({configDir:o});return w=await q({mainConfig:r,packageJson:t}),w};var te=p(require("isomorphic-unfetch")),oe=p(require("fetch-retry")),N=require("nanoid");var Q=p(require("path")),X=require("child_process"),Z=require("@storybook/core-common");var G=require("crypto"),K=e=>{let t=(0,G.createHash)("sha256");return t.update("storybook-telemetry-salt"),t.update(e),t.digest("hex")};var x,ee=()=>{if(x)return x;let e;try{let t=(0,Z.getProjectRoot)(),o=Q.default.relative(t,process.cwd()),r=(0,X.execSync)("git config --local --get remote.origin.url",{timeout:1e3,stdio:"pipe"});e=`${String(r).trim()}${o}`,x=K(e)}catch{}return x};var be="https://storybook.js.org/event-log",he=(0,oe.default)(te.default),S=[],we=(0,N.nanoid)();async function re(e,t={retryDelay:1e3,immediate:!1}){let{payload:o,metadata:r,...n}=e,s=t.stripMetadata?{}:{anonymousId:ee(),inCI:Boolean(process.env.CI)},f=(0,N.nanoid)(),c={...n,eventId:f,sessionId:we,metadata:r,payload:o,context:s},y;try{y=he(be,{method:"POST",body:JSON.stringify(c),headers:{"Content-Type":"application/json"},retries:3,retryOn:[503,504],retryDelay:l=>2**l*(typeof(t==null?void 0:t.retryDelay)=="number"&&!Number.isNaN(t==null?void 0:t.retryDelay)?t.retryDelay:1e3)}),S.push(y),t.immediate?await Promise.all(S):await y}catch{}finally{S=S.filter(l=>l!==y)}}var I=p(require("chalk")),A=require("@storybook/core-common"),ne="telemetry-notification-date",d=console,ae=async()=>{await A.cache.get(ne,null)||(A.cache.set(ne,Date.now()),d.log(),d.log(`${I.default.magenta.bold("attention")} => Storybook now collects completely anonymous telemetry regarding usage.`),d.log("This information is used to shape Storybook's roadmap and prioritize features."),d.log("You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:"),d.log(I.default.cyan("https://storybook.js.org/telemetry")),d.log())};var Pe=async(e,t={},o={})=>{var n;e!=="boot"&&await ae();let r={eventType:e,payload:t};try{o!=null&&o.stripMetadata||(r.metadata=await M(o==null?void 0:o.configDir))}catch(s){r.payload.metadataErrorMessage=h(s).message,o!=null&&o.enableCrashReports&&(r.payload.metadataError=h(s))}finally{let{error:s}=r.payload;s&&(r.payload.error=h(s)),(!r.payload.error||(o==null?void 0:o.enableCrashReports))&&((n=process.env)!=null&&n.STORYBOOK_TELEMETRY_DEBUG&&(C.logger.info(`
2
- [telemetry]`),C.logger.info(JSON.stringify(r,null,2))),await re(r,o))}};0&&(module.exports={computeStorybookMetadata,getStorybookMetadata,metaFrameworks,sanitizeAddonName,telemetry});
1
+ "use strict";var ye=Object.create;var u=Object.defineProperty;var pe=Object.getOwnPropertyDescriptor;var me=Object.getOwnPropertyNames;var fe=Object.getPrototypeOf,le=Object.prototype.hasOwnProperty;var de=(e,t)=>{for(var o in t)u(e,o,{get:t[o],enumerable:!0})},L=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of me(t))!le.call(e,n)&&n!==o&&u(e,n,{get:()=>t[n],enumerable:!(r=pe(t,n))||r.enumerable});return e};var p=(e,t,o)=>(o=e!=null?ye(fe(e)):{},L(t||!e||!e.__esModule?u(o,"default",{value:e,enumerable:!0}):o,e)),ge=e=>L(u({},"__esModule",{value:!0}),e);var Se={};de(Se,{computeStorybookMetadata:()=>K,getStorybookMetadata:()=>M,metaFrameworks:()=>O,sanitizeAddonName:()=>R,telemetry:()=>Pe});module.exports=ge(Se);var B=require("@storybook/client-logger");var J=p(require("read-pkg-up")),P=require("detect-package-manager"),m=require("@storybook/core-common");var F=p(require("path")),j=async e=>{let t=Object.keys(e);return Promise.all(t.map(v))},v=async e=>{try{let t=await D(e);return{name:e,version:t.version}}catch{return{name:e,version:null}}},D=async e=>require(F.default.join(e,"package.json"));var k=p(require("fs-extra")),b=p(require("path")),_=require("@storybook/core-common"),Y={Nx:"nx.json",Turborepo:"turbo.json",Lerna:"lerna.json",Rush:"rush.json",Lage:"lage.config.json"},W=()=>{let e=(0,_.getProjectRoot)();if(!e)return;let o=Object.keys(Y).find(n=>{let s=b.default.join(e,Y[n]);return k.default.existsSync(s)});if(o)return o;if(!k.default.existsSync(b.default.join(e,"package.json")))return;let r=k.default.readJsonSync(b.default.join(e,"package.json"));if(r!=null&&r.workspaces)return"Workspaces"};var T=require("path");function z(e){return e.replace(/[-[/{}()*+?.\\^$|]/g,"\\$&")}function E(e,t=T.sep){if(!e)return e;let o=process.cwd().split(t);for(;o.length>1;){let r=o.join(t),n=new RegExp(z(r),"g");e=e.replace(n,"$SNIP");let s=o.join(t+t),f=new RegExp(z(s),"g");e=e.replace(f,"$SNIP"),o.pop()}return e}function h(e,t=T.sep){e=JSON.parse(JSON.stringify(e,Object.getOwnPropertyNames(e)));let o=E(JSON.stringify(e),t);return JSON.parse(o)}var ue=["html","react","svelte","vue3","preact","server","vue","web-components","angular","ember"],ke=["builder-webpack5","builder-vite"];function U(e,t){let{name:o="",version:r,dependencies:n,devDependencies:s,peerDependencies:f}=e,c={[o]:r,...n,...s,...f};return t.map(y=>`@storybook/${y}`).find(y=>c[y])}async function H(e){let{framework:t}=e;if(!t)return{};let o=typeof t=="string"?{name:t}:t,r=await D(o.name),n=U(r,ke),s=U(r,ue);return{framework:o,builder:n,renderer:s}}var O={next:"Next","react-scripts":"CRA",gatsby:"Gatsby","@nuxtjs/storybook":"nuxt","@nrwl/storybook":"nx","@vue/cli-service":"vue-cli","@sveltejs/kit":"svelte-kit"},R=e=>E(e).replace(/\/dist\/.*/,"").replace(/\.[mc]?[tj]?s[x]?$/,"").replace(/\/register$/,"").replace(/\/manager$/,"").replace(/\/preset$/,""),K=async({packageJson:e,mainConfig:t})=>{var $;let o={generatedAt:new Date().getTime(),hasCustomBabel:!1,hasCustomWebpack:!1,hasStaticDirs:!1,hasStorybookEslint:!1,refCount:0},r={...e==null?void 0:e.dependencies,...e==null?void 0:e.devDependencies,...e==null?void 0:e.peerDependencies},n=Object.keys(r).find(a=>!!O[a]);if(n){let{version:a}=await v(n);o.metaFramework={name:O[n],packageName:n,version:a}}let s=W();s&&(o.monorepo=s);try{let a=await(0,P.detect)({cwd:(0,m.getProjectRoot)()}),i=await(0,P.getNpmVersion)(a);o.packageManager={type:a,version:i}}catch{}o.hasCustomBabel=!!t.babel,o.hasCustomWebpack=!!t.webpackFinal,o.hasStaticDirs=!!t.staticDirs,t.typescript&&(o.typescriptOptions=t.typescript);let f=await H(t);t.refs&&(o.refCount=Object.keys(t.refs).length),t.features&&(o.features=t.features);let c={};t.addons&&t.addons.forEach(a=>{let i,V;typeof a=="string"?i=R(a):(V=a.options,i=R(a.name)),c[i]={options:V,version:void 0}}),(await j(c)).forEach(({name:a,version:i})=>{c[a].version=i});let l=Object.keys(c),g=Object.keys(r).filter(a=>a.includes("storybook")&&!l.includes(a)).reduce((a,i)=>({...a,[i]:{version:void 0}}),{});(await j(g)).forEach(({name:a,version:i})=>{g[a].version=i});let se=r.typescript?"typescript":"javascript",ie=!!r["eslint-plugin-storybook"],C=(0,m.getStorybookInfo)(e),ce=(($=g[C.frameworkPackage])==null?void 0:$.version)||C.version;return{...o,...f,storybookVersion:ce,language:se,storybookPackages:g,addons:c,hasStorybookEslint:ie}},w,M=async e=>{var n;if(w)return w;let{packageJson:t={}}=J.default.sync({cwd:process.cwd(),normalize:!1})||{},o=(e||(0,m.getStorybookConfiguration)(((n=t==null?void 0:t.scripts)==null?void 0:n.storybook)||"","-c","--config-dir"))??".storybook",r=(0,m.loadMainConfig)({configDir:o});return w=await K({mainConfig:r,packageJson:t}),w};var te=p(require("isomorphic-unfetch")),oe=p(require("fetch-retry")),N=require("nanoid");var Q=p(require("path")),X=require("child_process"),Z=require("@storybook/core-common");var q=require("crypto"),G=e=>{let t=(0,q.createHash)("sha256");return t.update("storybook-telemetry-salt"),t.update(e),t.digest("hex")};var S,ee=()=>{if(S)return S;let e;try{let t=(0,Z.getProjectRoot)(),o=Q.default.relative(t,process.cwd()),r=(0,X.execSync)("git config --local --get remote.origin.url",{timeout:1e3,stdio:"pipe"});e=`${String(r).trim()}${o}`,S=G(e)}catch{}return S};var be=process.env.STORYBOOK_TELEMETRY_URL||"https://storybook.js.org/event-log",he=(0,oe.default)(te.default),x=[],we=(0,N.nanoid)();async function re(e,t={retryDelay:1e3,immediate:!1}){let{payload:o,metadata:r,...n}=e,s=t.stripMetadata?{}:{anonymousId:ee(),inCI:Boolean(process.env.CI)},f=(0,N.nanoid)(),c={...n,eventId:f,sessionId:we,metadata:r,payload:o,context:s},y;try{y=he(be,{method:"POST",body:JSON.stringify(c),headers:{"Content-Type":"application/json"},retries:3,retryOn:[503,504],retryDelay:l=>2**l*(typeof(t==null?void 0:t.retryDelay)=="number"&&!Number.isNaN(t==null?void 0:t.retryDelay)?t.retryDelay:1e3)}),x.push(y),t.immediate?await Promise.all(x):await y}catch{}finally{x=x.filter(l=>l!==y)}}var I=p(require("chalk")),A=require("@storybook/core-common"),ne="telemetry-notification-date",d=console,ae=async()=>{await A.cache.get(ne,null)||(A.cache.set(ne,Date.now()),d.log(),d.log(`${I.default.magenta.bold("attention")} => Storybook now collects completely anonymous telemetry regarding usage.`),d.log("This information is used to shape Storybook's roadmap and prioritize features."),d.log("You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:"),d.log(I.default.cyan("https://storybook.js.org/telemetry")),d.log())};var Pe=async(e,t={},o={})=>{var n;e!=="boot"&&await ae();let r={eventType:e,payload:t};try{o!=null&&o.stripMetadata||(r.metadata=await M(o==null?void 0:o.configDir))}catch(s){r.payload.metadataErrorMessage=h(s).message,o!=null&&o.enableCrashReports&&(r.payload.metadataError=h(s))}finally{let{error:s}=r.payload;s&&(r.payload.error=h(s)),(!r.payload.error||(o==null?void 0:o.enableCrashReports))&&((n=process.env)!=null&&n.STORYBOOK_TELEMETRY_DEBUG&&(B.logger.info(`
2
+ [telemetry]`),B.logger.info(JSON.stringify(r,null,2))),await re(r,o))}};0&&(module.exports={computeStorybookMetadata,getStorybookMetadata,metaFrameworks,sanitizeAddonName,telemetry});
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var D=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,o)=>(typeof require!="undefined"?require:t)[o]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});import{logger as _}from"@storybook/client-logger";import X from"read-pkg-up";import{detect as Z,getNpmVersion as ee}from"detect-package-manager";import{loadMainConfig as te,getStorybookInfo as oe,getStorybookConfiguration as re,getProjectRoot as ne}from"@storybook/core-common";import q from"path";var b=async e=>{let t=Object.keys(e);return Promise.all(t.map(h))},h=async e=>{try{let t=await w(e);return{name:e,version:t.version}}catch{return{name:e,version:null}}},w=async e=>D(q.join(e,"package.json"));import P from"fs-extra";import x from"path";import{getProjectRoot as G}from"@storybook/core-common";var T={Nx:"nx.json",Turborepo:"turbo.json",Lerna:"lerna.json",Rush:"rush.json",Lage:"lage.config.json"},E=()=>{let e=G();if(!e)return;let o=Object.keys(T).find(a=>{let s=x.join(e,T[a]);return P.existsSync(s)});if(o)return o;if(!P.existsSync(x.join(e,"package.json")))return;if(P.readJsonSync(x.join(e,"package.json"))?.workspaces)return"Workspaces"};import{sep as R}from"path";function O(e){return e.replace(/[-[/{}()*+?.\\^$|]/g,"\\$&")}function S(e,t=R){if(!e)return e;let o=process.cwd().split(t);for(;o.length>1;){let r=o.join(t),a=new RegExp(O(r),"g");e=e.replace(a,"$SNIP");let s=o.join(t+t),y=new RegExp(O(s),"g");e=e.replace(y,"$SNIP"),o.pop()}return e}function g(e,t=R){e=JSON.parse(JSON.stringify(e,Object.getOwnPropertyNames(e)));let o=S(JSON.stringify(e),t);return JSON.parse(o)}var K=["html","react","svelte","vue3","preact","server","vue","web-components","angular","ember"],Q=["builder-webpack5","builder-vite"];function M(e,t){let{name:o="",version:r,dependencies:a,devDependencies:s,peerDependencies:y}=e,c={[o]:r,...a,...s,...y};return t.map(p=>`@storybook/${p}`).find(p=>c[p])}async function N(e){let{framework:t}=e;if(!t)return{};let o=typeof t=="string"?{name:t}:t,r=await w(o.name),a=M(r,Q),s=M(r,K);return{framework:o,builder:a,renderer:s}}var J={next:"Next","react-scripts":"CRA",gatsby:"Gatsby","@nuxtjs/storybook":"nuxt","@nrwl/storybook":"nx","@vue/cli-service":"vue-cli","@sveltejs/kit":"svelte-kit"},I=e=>S(e).replace(/\/dist\/.*/,"").replace(/\.[mc]?[tj]?s[x]?$/,"").replace(/\/register$/,"").replace(/\/manager$/,"").replace(/\/preset$/,""),ae=async({packageJson:e,mainConfig:t})=>{let o={generatedAt:new Date().getTime(),hasCustomBabel:!1,hasCustomWebpack:!1,hasStaticDirs:!1,hasStorybookEslint:!1,refCount:0},r={...e?.dependencies,...e?.devDependencies,...e?.peerDependencies},a=Object.keys(r).find(n=>!!J[n]);if(a){let{version:n}=await h(a);o.metaFramework={name:J[a],packageName:a,version:n}}let s=E();s&&(o.monorepo=s);try{let n=await Z({cwd:ne()}),i=await ee(n);o.packageManager={type:n,version:i}}catch{}o.hasCustomBabel=!!t.babel,o.hasCustomWebpack=!!t.webpackFinal,o.hasStaticDirs=!!t.staticDirs,t.typescript&&(o.typescriptOptions=t.typescript);let y=await N(t);t.refs&&(o.refCount=Object.keys(t.refs).length),t.features&&(o.features=t.features);let c={};t.addons&&t.addons.forEach(n=>{let i,v;typeof n=="string"?i=I(n):(v=n.options,i=I(n.name)),c[i]={options:v,version:void 0}}),(await b(c)).forEach(({name:n,version:i})=>{c[n].version=i});let m=Object.keys(c),l=Object.keys(r).filter(n=>n.includes("storybook")&&!m.includes(n)).reduce((n,i)=>({...n,[i]:{version:void 0}}),{});(await b(l)).forEach(({name:n,version:i})=>{l[n].version=i});let z=r.typescript?"typescript":"javascript",U=!!r["eslint-plugin-storybook"],j=oe(e),H=l[j.frameworkPackage]?.version||j.version;return{...o,...y,storybookVersion:H,language:z,storybookPackages:l,addons:c,hasStorybookEslint:U}},d,A=async e=>{if(d)return d;let{packageJson:t={}}=X.sync({cwd:process.cwd(),normalize:!1})||{},o=(e||re(t?.scripts?.storybook||"","-c","--config-dir"))??".storybook",r=te({configDir:o});return d=await ae({mainConfig:r,packageJson:t}),d};import ye from"isomorphic-unfetch";import me from"fetch-retry";import{nanoid as B}from"nanoid";import ie from"path";import{execSync as ce}from"child_process";import{getProjectRoot as pe}from"@storybook/core-common";import{createHash as se}from"crypto";var C=e=>{let t=se("sha256");return t.update("storybook-telemetry-salt"),t.update(e),t.digest("hex")};var u,$=()=>{if(u)return u;let e;try{let t=pe(),o=ie.relative(t,process.cwd()),r=ce("git config --local --get remote.origin.url",{timeout:1e3,stdio:"pipe"});e=`${String(r).trim()}${o}`,u=C(e)}catch{}return u};var fe="https://storybook.js.org/event-log",le=me(ye),k=[],ge=B();async function V(e,t={retryDelay:1e3,immediate:!1}){let{payload:o,metadata:r,...a}=e,s=t.stripMetadata?{}:{anonymousId:$(),inCI:Boolean(process.env.CI)},y=B(),c={...a,eventId:y,sessionId:ge,metadata:r,payload:o,context:s},p;try{p=le(fe,{method:"POST",body:JSON.stringify(c),headers:{"Content-Type":"application/json"},retries:3,retryOn:[503,504],retryDelay:m=>2**m*(typeof t?.retryDelay=="number"&&!Number.isNaN(t?.retryDelay)?t.retryDelay:1e3)}),k.push(p),t.immediate?await Promise.all(k):await p}catch{}finally{k=k.filter(m=>m!==p)}}import F from"chalk";import{cache as L}from"@storybook/core-common";var W="telemetry-notification-date",f=console,Y=async()=>{await L.get(W,null)||(L.set(W,Date.now()),f.log(),f.log(`${F.magenta.bold("attention")} => Storybook now collects completely anonymous telemetry regarding usage.`),f.log("This information is used to shape Storybook's roadmap and prioritize features."),f.log("You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:"),f.log(F.cyan("https://storybook.js.org/telemetry")),f.log())};var tt=async(e,t={},o={})=>{e!=="boot"&&await Y();let r={eventType:e,payload:t};try{o?.stripMetadata||(r.metadata=await A(o?.configDir))}catch(a){r.payload.metadataErrorMessage=g(a).message,o?.enableCrashReports&&(r.payload.metadataError=g(a))}finally{let{error:a}=r.payload;a&&(r.payload.error=g(a)),(!r.payload.error||o?.enableCrashReports)&&(process.env?.STORYBOOK_TELEMETRY_DEBUG&&(_.info(`
2
- [telemetry]`),_.info(JSON.stringify(r,null,2))),await V(r,o))}};export{ae as computeStorybookMetadata,A as getStorybookMetadata,J as metaFrameworks,I as sanitizeAddonName,tt as telemetry};
1
+ var __require=(x=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(x,{get:(a,b)=>(typeof require!="undefined"?require:a)[b]}):x)(function(x){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+x+'" is not supported')});import{logger as logger2}from"@storybook/client-logger";import readPkgUp from"read-pkg-up";import{detect,getNpmVersion}from"detect-package-manager";import{loadMainConfig,getStorybookInfo,getStorybookConfiguration,getProjectRoot as getProjectRoot2}from"@storybook/core-common";import path from"path";var getActualPackageVersions=async packages=>{let packageNames=Object.keys(packages);return Promise.all(packageNames.map(getActualPackageVersion))},getActualPackageVersion=async packageName=>{try{let packageJson=await getActualPackageJson(packageName);return{name:packageName,version:packageJson.version}}catch{return{name:packageName,version:null}}},getActualPackageJson=async packageName=>__require(path.join(packageName,"package.json"));import fs from"fs-extra";import path2 from"path";import{getProjectRoot}from"@storybook/core-common";var monorepoConfigs={Nx:"nx.json",Turborepo:"turbo.json",Lerna:"lerna.json",Rush:"rush.json",Lage:"lage.config.json"},getMonorepoType=()=>{let projectRootPath=getProjectRoot();if(!projectRootPath)return;let monorepoType=Object.keys(monorepoConfigs).find(monorepo=>{let configFile=path2.join(projectRootPath,monorepoConfigs[monorepo]);return fs.existsSync(configFile)});if(monorepoType)return monorepoType;if(!fs.existsSync(path2.join(projectRootPath,"package.json")))return;if(fs.readJsonSync(path2.join(projectRootPath,"package.json"))?.workspaces)return"Workspaces"};import{sep}from"path";function regexpEscape(str){return str.replace(/[-[/{}()*+?.\\^$|]/g,"\\$&")}function cleanPaths(str,separator=sep){if(!str)return str;let stack=process.cwd().split(separator);for(;stack.length>1;){let currentPath=stack.join(separator),currentRegex=new RegExp(regexpEscape(currentPath),"g");str=str.replace(currentRegex,"$SNIP");let currentPath2=stack.join(separator+separator),currentRegex2=new RegExp(regexpEscape(currentPath2),"g");str=str.replace(currentRegex2,"$SNIP"),stack.pop()}return str}function sanitizeError(error,pathSeparator=sep){error=JSON.parse(JSON.stringify(error,Object.getOwnPropertyNames(error)));let errorString=cleanPaths(JSON.stringify(error),pathSeparator);return JSON.parse(errorString)}var knownRenderers=["html","react","svelte","vue3","preact","server","vue","web-components","angular","ember"],knownBuilders=["builder-webpack5","builder-vite"];function findMatchingPackage(packageJson,suffixes){let{name="",version,dependencies,devDependencies,peerDependencies}=packageJson,allDependencies={[name]:version,...dependencies,...devDependencies,...peerDependencies};return suffixes.map(suffix=>`@storybook/${suffix}`).find(pkg=>allDependencies[pkg])}async function getFrameworkInfo(mainConfig){let{framework:frameworkInput}=mainConfig;if(!frameworkInput)return{};let framework=typeof frameworkInput=="string"?{name:frameworkInput}:frameworkInput,frameworkPackageJson=await getActualPackageJson(framework.name),builder=findMatchingPackage(frameworkPackageJson,knownBuilders),renderer=findMatchingPackage(frameworkPackageJson,knownRenderers);return{framework,builder,renderer}}var metaFrameworks={next:"Next","react-scripts":"CRA",gatsby:"Gatsby","@nuxtjs/storybook":"nuxt","@nrwl/storybook":"nx","@vue/cli-service":"vue-cli","@sveltejs/kit":"svelte-kit"},sanitizeAddonName=name=>cleanPaths(name).replace(/\/dist\/.*/,"").replace(/\.[mc]?[tj]?s[x]?$/,"").replace(/\/register$/,"").replace(/\/manager$/,"").replace(/\/preset$/,""),computeStorybookMetadata=async({packageJson,mainConfig})=>{let metadata={generatedAt:new Date().getTime(),hasCustomBabel:!1,hasCustomWebpack:!1,hasStaticDirs:!1,hasStorybookEslint:!1,refCount:0},allDependencies={...packageJson?.dependencies,...packageJson?.devDependencies,...packageJson?.peerDependencies},metaFramework=Object.keys(allDependencies).find(dep=>!!metaFrameworks[dep]);if(metaFramework){let{version}=await getActualPackageVersion(metaFramework);metadata.metaFramework={name:metaFrameworks[metaFramework],packageName:metaFramework,version}}let monorepoType=getMonorepoType();monorepoType&&(metadata.monorepo=monorepoType);try{let packageManagerType=await detect({cwd:getProjectRoot2()}),packageManagerVerson=await getNpmVersion(packageManagerType);metadata.packageManager={type:packageManagerType,version:packageManagerVerson}}catch{}metadata.hasCustomBabel=!!mainConfig.babel,metadata.hasCustomWebpack=!!mainConfig.webpackFinal,metadata.hasStaticDirs=!!mainConfig.staticDirs,mainConfig.typescript&&(metadata.typescriptOptions=mainConfig.typescript);let frameworkInfo=await getFrameworkInfo(mainConfig);mainConfig.refs&&(metadata.refCount=Object.keys(mainConfig.refs).length),mainConfig.features&&(metadata.features=mainConfig.features);let addons={};mainConfig.addons&&mainConfig.addons.forEach(addon=>{let addonName,options;typeof addon=="string"?addonName=sanitizeAddonName(addon):(options=addon.options,addonName=sanitizeAddonName(addon.name)),addons[addonName]={options,version:void 0}}),(await getActualPackageVersions(addons)).forEach(({name,version})=>{addons[name].version=version});let addonNames=Object.keys(addons),storybookPackages=Object.keys(allDependencies).filter(dep=>dep.includes("storybook")&&!addonNames.includes(dep)).reduce((acc,dep)=>({...acc,[dep]:{version:void 0}}),{});(await getActualPackageVersions(storybookPackages)).forEach(({name,version})=>{storybookPackages[name].version=version});let language=allDependencies.typescript?"typescript":"javascript",hasStorybookEslint=!!allDependencies["eslint-plugin-storybook"],storybookInfo=getStorybookInfo(packageJson),storybookVersion=storybookPackages[storybookInfo.frameworkPackage]?.version||storybookInfo.version;return{...metadata,...frameworkInfo,storybookVersion,language,storybookPackages,addons,hasStorybookEslint}},cachedMetadata,getStorybookMetadata=async _configDir=>{if(cachedMetadata)return cachedMetadata;let{packageJson={}}=readPkgUp.sync({cwd:process.cwd(),normalize:!1})||{},configDir=(_configDir||getStorybookConfiguration(packageJson?.scripts?.storybook||"","-c","--config-dir"))??".storybook",mainConfig=loadMainConfig({configDir});return cachedMetadata=await computeStorybookMetadata({mainConfig,packageJson}),cachedMetadata};import originalFetch from"isomorphic-unfetch";import retry from"fetch-retry";import{nanoid}from"nanoid";import path3 from"path";import{execSync}from"child_process";import{getProjectRoot as getProjectRoot3}from"@storybook/core-common";import{createHash}from"crypto";var oneWayHash=payload=>{let hash=createHash("sha256");return hash.update("storybook-telemetry-salt"),hash.update(payload),hash.digest("hex")};var anonymousProjectId,getAnonymousProjectId=()=>{if(anonymousProjectId)return anonymousProjectId;let unhashedProjectId;try{let projectRoot=getProjectRoot3(),projectRootPath=path3.relative(projectRoot,process.cwd()),originBuffer=execSync("git config --local --get remote.origin.url",{timeout:1e3,stdio:"pipe"});unhashedProjectId=`${String(originBuffer).trim()}${projectRootPath}`,anonymousProjectId=oneWayHash(unhashedProjectId)}catch{}return anonymousProjectId};var URL=process.env.STORYBOOK_TELEMETRY_URL||"https://storybook.js.org/event-log",fetch=retry(originalFetch),tasks=[],sessionId=nanoid();async function sendTelemetry(data,options={retryDelay:1e3,immediate:!1}){let{payload,metadata,...rest}=data,context=options.stripMetadata?{}:{anonymousId:getAnonymousProjectId(),inCI:Boolean(process.env.CI)},eventId=nanoid(),body={...rest,eventId,sessionId,metadata,payload,context},request;try{request=fetch(URL,{method:"POST",body:JSON.stringify(body),headers:{"Content-Type":"application/json"},retries:3,retryOn:[503,504],retryDelay:attempt=>2**attempt*(typeof options?.retryDelay=="number"&&!Number.isNaN(options?.retryDelay)?options.retryDelay:1e3)}),tasks.push(request),options.immediate?await Promise.all(tasks):await request}catch{}finally{tasks=tasks.filter(task=>task!==request)}}import chalk from"chalk";import{cache}from"@storybook/core-common";var TELEMETRY_KEY_NOTIFY_DATE="telemetry-notification-date",logger=console,notify=async()=>{await cache.get(TELEMETRY_KEY_NOTIFY_DATE,null)||(cache.set(TELEMETRY_KEY_NOTIFY_DATE,Date.now()),logger.log(),logger.log(`${chalk.magenta.bold("attention")} => Storybook now collects completely anonymous telemetry regarding usage.`),logger.log("This information is used to shape Storybook's roadmap and prioritize features."),logger.log("You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:"),logger.log(chalk.cyan("https://storybook.js.org/telemetry")),logger.log())};var telemetry=async(eventType,payload={},options={})=>{eventType!=="boot"&&await notify();let telemetryData={eventType,payload};try{options?.stripMetadata||(telemetryData.metadata=await getStorybookMetadata(options?.configDir))}catch(error){telemetryData.payload.metadataErrorMessage=sanitizeError(error).message,options?.enableCrashReports&&(telemetryData.payload.metadataError=sanitizeError(error))}finally{let{error}=telemetryData.payload;error&&(telemetryData.payload.error=sanitizeError(error)),(!telemetryData.payload.error||options?.enableCrashReports)&&(process.env?.STORYBOOK_TELEMETRY_DEBUG&&(logger2.info(`
2
+ [telemetry]`),logger2.info(JSON.stringify(telemetryData,null,2))),await sendTelemetry(telemetryData,options))}};export{computeStorybookMetadata,getStorybookMetadata,metaFrameworks,sanitizeAddonName,telemetry};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/telemetry",
3
- "version": "7.0.0-alpha.53",
3
+ "version": "7.0.0-alpha.55",
4
4
  "description": "Telemetry logging for crash reports and usage statistics",
5
5
  "keywords": [
6
6
  "storybook"
@@ -42,8 +42,8 @@
42
42
  "prep": "../../../scripts/prepare/bundle.ts"
43
43
  },
44
44
  "dependencies": {
45
- "@storybook/client-logger": "7.0.0-alpha.53",
46
- "@storybook/core-common": "7.0.0-alpha.53",
45
+ "@storybook/client-logger": "7.0.0-alpha.55",
46
+ "@storybook/core-common": "7.0.0-alpha.55",
47
47
  "chalk": "^4.1.0",
48
48
  "detect-package-manager": "^2.0.1",
49
49
  "fetch-retry": "^5.0.2",
@@ -64,5 +64,5 @@
64
64
  ],
65
65
  "platform": "node"
66
66
  },
67
- "gitHead": "fd1cf81615a5ddac3369e7bb567a1a43081fdc23"
67
+ "gitHead": "55cd2ab63d1f897de59e2471d2f916f7d2c13546"
68
68
  }