@storybook/telemetry 7.0.0-beta.5 → 7.0.0-beta.50

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
@@ -2,6 +2,7 @@ import { FileSystemCache } from 'file-system-cache';
2
2
  import { TransformOptions } from '@babel/core';
3
3
  import { Server } from 'http';
4
4
  import { PM } from 'detect-package-manager';
5
+ import { BinaryLike } from 'crypto';
5
6
 
6
7
  /**
7
8
  Matches any [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive).
@@ -718,7 +719,7 @@ PackageJson$1.NonStandardEntryPoints &
718
719
  PackageJson$1.TypeScriptConfiguration &
719
720
  PackageJson$1.YarnConfiguration &
720
721
  PackageJson$1.JSPMConfiguration;
721
- declare type Tag = string;
722
+ type Tag = string;
722
723
  interface Parameters {
723
724
  [name: string]: any;
724
725
  }
@@ -874,20 +875,17 @@ interface CLIOptions {
874
875
  quiet?: boolean;
875
876
  versionUpdates?: boolean;
876
877
  releaseNotes?: boolean;
877
- dll?: boolean;
878
878
  docs?: boolean;
879
- docsDll?: boolean;
880
- uiDll?: boolean;
881
879
  debugWebpack?: boolean;
882
880
  webpackStatsJson?: string | boolean;
883
881
  outputDir?: string;
884
882
  }
885
883
  interface BuilderOptions {
886
884
  configType?: 'DEVELOPMENT' | 'PRODUCTION';
887
- ignorePreview: boolean;
888
- cache: FileSystemCache;
885
+ ignorePreview?: boolean;
886
+ cache?: FileSystemCache;
889
887
  configDir: string;
890
- docsMode: boolean;
888
+ docsMode?: boolean;
891
889
  features?: StorybookConfig['features'];
892
890
  versionCheck?: VersionCheck;
893
891
  releaseNotesData?: ReleaseNotesData;
@@ -933,18 +931,19 @@ type CoreCommon_StorybookRefs = Record<string, {
933
931
  }>;
934
932
  type DocsOptions = {
935
933
  /**
936
- * Should we generate docs entries at all under any circumstances? (i.e. can they be rendered)
934
+ * Should we disable generate docs entries at all under any circumstances? (i.e. can they be rendered)
937
935
  */
938
- enabled?: boolean;
936
+ disable?: boolean;
939
937
  /**
940
938
  * What should we call the generated docs entries?
941
939
  */
942
940
  defaultName?: string;
943
941
  /**
944
- * Should we generate a docs entry per CSF file with the `docsPage` tag?
945
- * Set to 'automatic' to generate an entry irrespective of tag.
942
+ * Should we generate a docs entry per CSF file?
943
+ * Set to 'tag' (the default) to generate an entry for every CSF file with the
944
+ * 'autodocs' tag.
946
945
  */
947
- docsPage?: boolean | 'automatic';
946
+ autodocs?: boolean | 'tag';
948
947
  /**
949
948
  * Only show doc entries in the side bar (usually set with the `--docs` CLI flag)
950
949
  */
@@ -987,10 +986,6 @@ interface StorybookConfig {
987
986
  * Enable a set of planned breaking changes for SB7.0
988
987
  */
989
988
  breakingChangesV7?: boolean;
990
- /**
991
- * Enable the step debugger functionality in Addon-interactions.
992
- */
993
- interactionsDebugger?: boolean;
994
989
  /**
995
990
  * Filter args with a "target" on the type from the render function (EXPERIMENTAL)
996
991
  */
@@ -1000,6 +995,10 @@ interface StorybookConfig {
1000
995
  * Will be removed in 7.0.
1001
996
  */
1002
997
  warnOnLegacyHierarchySeparator?: boolean;
998
+ /**
999
+ * Use legacy MDX1, to help smooth migration to 7.0
1000
+ */
1001
+ legacyMdx1?: boolean;
1003
1002
  };
1004
1003
  /**
1005
1004
  * Tells Storybook where to find stories.
@@ -1119,6 +1118,8 @@ interface TelemetryData {
1119
1118
  metadata?: StorybookMetadata;
1120
1119
  }
1121
1120
 
1121
+ declare const oneWayHash: (payload: BinaryLike) => string;
1122
+
1122
1123
  declare const metaFrameworks: Record<string, string>;
1123
1124
  declare const sanitizeAddonName: (name: string) => string;
1124
1125
  declare const computeStorybookMetadata: ({ packageJson, mainConfig, }: {
@@ -1139,4 +1140,4 @@ declare const getPrecedingUpgrade: (events?: any) => Promise<UpgradeSummary | un
1139
1140
 
1140
1141
  declare const telemetry: (eventType: EventType, payload?: Payload, options?: Partial<Options>) => Promise<void>;
1141
1142
 
1142
- export { Dependency, EventType, Options, Payload, StorybookAddon, StorybookMetadata, TelemetryData, computeStorybookMetadata, getPrecedingUpgrade, getStorybookCoreVersion, getStorybookMetadata, metaFrameworks, sanitizeAddonName, telemetry };
1143
+ export { Dependency, EventType, Options, Payload, StorybookAddon, StorybookMetadata, TelemetryData, computeStorybookMetadata, getPrecedingUpgrade, getStorybookCoreVersion, getStorybookMetadata, metaFrameworks, oneWayHash, sanitizeAddonName, telemetry };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var he=Object.create;var k=Object.defineProperty;var be=Object.getOwnPropertyDescriptor;var ve=Object.getOwnPropertyNames;var we=Object.getPrototypeOf,Pe=Object.prototype.hasOwnProperty;var Se=(t,e)=>{for(var r in e)k(t,r,{get:e[r],enumerable:!0})},L=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ve(e))!Pe.call(t,n)&&n!==r&&k(t,n,{get:()=>e[n],enumerable:!(o=be(e,n))||o.enumerable});return t};var m=(t,e,r)=>(r=t!=null?he(we(t)):{},L(e||!t||!t.__esModule?k(r,"default",{value:t,enumerable:!0}):r,t)),xe=t=>L(k({},"__esModule",{value:!0}),t);var Ae={};Se(Ae,{computeStorybookMetadata:()=>ee,getPrecedingUpgrade:()=>pe,getStorybookCoreVersion:()=>z,getStorybookMetadata:()=>N,metaFrameworks:()=>I,sanitizeAddonName:()=>M,telemetry:()=>Ce});module.exports=xe(Ae);var B=require("@storybook/client-logger");var Z=m(require("read-pkg-up")),S=require("detect-package-manager"),y=require("@storybook/core-common");var _=require("fs-extra"),Y=m(require("path")),j=async t=>{let e=Object.keys(t);return Promise.all(e.map(h))},h=async t=>{try{let e=await D(t);return{name:t,version:e.version}}catch{return{name:t,version:null}}},D=async t=>{let e=require.resolve(Y.default.join(t,"package.json"),{paths:[process.cwd()]});return await(0,_.readJson)(e)},z=async()=>{var e;return(e=(await Promise.all(["@storybook/core-common","@storybook/core-server"].map(h))).find(r=>r.version))==null?void 0:e.version};var b=m(require("fs-extra")),v=m(require("path")),G=require("@storybook/core-common"),H={Nx:"nx.json",Turborepo:"turbo.json",Lerna:"lerna.json",Rush:"rush.json",Lage:"lage.config.json"},K=()=>{let t=(0,G.getProjectRoot)();if(!t)return;let r=Object.keys(H).find(n=>{let s=v.default.join(t,H[n]);return b.default.existsSync(s)});if(r)return r;if(!b.default.existsSync(v.default.join(t,"package.json")))return;let o=b.default.readJsonSync(v.default.join(t,"package.json"));if(o!=null&&o.workspaces)return"Workspaces"};var O=require("path");function q(t){return t.replace(/[-[/{}()*+?.\\^$|]/g,"\\$&")}function R(t,e=O.sep){if(!t)return t;let r=process.cwd().split(e);for(;r.length>1;){let o=r.join(e),n=new RegExp(q(o),"g");t=t.replace(n,"$SNIP");let s=r.join(e+e),f=new RegExp(q(s),"g");t=t.replace(f,"$SNIP"),r.pop()}return t}function w(t,e=O.sep){t=JSON.parse(JSON.stringify(t,Object.getOwnPropertyNames(t)));let r=R(JSON.stringify(t),e);return JSON.parse(r)}var Te=["html","react","svelte","vue3","preact","server","vue","web-components","angular","ember"],Ee=["builder-webpack5","builder-vite"];function J(t,e){let{name:r="",version:o,dependencies:n,devDependencies:s,peerDependencies:f}=t,c={[r]:o,...n,...s,...f};return e.map(p=>`@storybook/${p}`).find(p=>c[p])}async function Q(t){let{framework:e}=t;if(!e)return{};let r=typeof e=="string"?{name:e}:e,o=await D(r.name),n=J(o,Ee),s=J(o,Te);return{framework:r,builder:n,renderer:s}}function X(t){var r,o,n;let e=((r=t.dependencies)==null?void 0:r.chromatic)||((o=t.devDependencies)==null?void 0:o.chromatic)||((n=t.peerDependencies)==null?void 0:n.chromatic);return e||(t.scripts&&Object.values(t.scripts).find(s=>s==null?void 0:s.match(/chromatic/))?"latest":void 0)}var I={next:"Next","react-scripts":"CRA",gatsby:"Gatsby","@nuxtjs/storybook":"nuxt","@nrwl/storybook":"nx","@vue/cli-service":"vue-cli","@sveltejs/kit":"sveltekit"},M=t=>R(t).replace(/\/dist\/.*/,"").replace(/\.[mc]?[tj]?s[x]?$/,"").replace(/\/register$/,"").replace(/\/manager$/,"").replace(/\/preset$/,""),ee=async({packageJson:t,mainConfig:e})=>{var $;let r={generatedAt:new Date().getTime(),hasCustomBabel:!1,hasCustomWebpack:!1,hasStaticDirs:!1,hasStorybookEslint:!1,refCount:0},o={...t==null?void 0:t.dependencies,...t==null?void 0:t.devDependencies,...t==null?void 0:t.peerDependencies},n=Object.keys(o).find(a=>!!I[a]);if(n){let{version:a}=await h(n);r.metaFramework={name:I[n],packageName:n,version:a}}let s=K();s&&(r.monorepo=s);try{let a=await(0,S.detect)({cwd:(0,y.getProjectRoot)()}),i=await(0,S.getNpmVersion)(a);r.packageManager={type:a,version:i}}catch{}r.hasCustomBabel=!!e.babel,r.hasCustomWebpack=!!e.webpackFinal,r.hasStaticDirs=!!e.staticDirs,e.typescript&&(r.typescriptOptions=e.typescript);let f=await Q(e);e.refs&&(r.refCount=Object.keys(e.refs).length),e.features&&(r.features=e.features);let c={};e.addons&&e.addons.forEach(a=>{let i,F;typeof a=="string"?i=M(a):(F=a.options,i=M(a.name)),c[i]={options:F,version:void 0}});let p=X(t);p&&(c.chromatic={version:void 0,versionSpecifier:p,options:void 0}),(await j(c)).forEach(({name:a,version:i})=>{c[a].version=i});let l=Object.keys(c),g=Object.keys(o).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 ue=o.typescript?"typescript":"javascript",ge=!!o["eslint-plugin-storybook"],W=(0,y.getStorybookInfo)(t),ke=($=g[W.frameworkPackage])==null?void 0:$.version;return{...r,...f,storybookVersion:ke,storybookVersionSpecifier:W.version,language:ue,storybookPackages:g,addons:c,hasStorybookEslint:ge}},P,N=async t=>{var n;if(P)return P;let{packageJson:e={}}=Z.default.sync({cwd:process.cwd(),normalize:!1})||{},r=(t||(0,y.getStorybookConfiguration)(((n=e==null?void 0:e.scripts)==null?void 0:n.storybook)||"","-c","--config-dir"))??".storybook",o=(0,y.loadMainConfig)({configDir:r});return P=await ee({mainConfig:o,packageJson:e}),P};var me=m(require("isomorphic-unfetch")),ye=m(require("fetch-retry")),C=require("nanoid");var oe=m(require("path")),ne=require("child_process"),se=require("@storybook/core-common");var te=require("crypto"),re=t=>{let e=(0,te.createHash)("sha256");return e.update("storybook-telemetry-salt"),e.update(t),e.digest("hex")};function je(t){return t.replace(/#.*$/,"").replace(/^.*@/,"").replace(/^.*\/\//,"").replace(":","/")}var x,ae=()=>{if(x)return x;let t;try{let e=(0,se.getProjectRoot)(),r=oe.default.relative(e,process.cwd()),o=(0,ne.execSync)("git config --local --get remote.origin.url",{timeout:1e3,stdio:"pipe"});t=`${je(String(o))}${r}`,x=re(t)}catch{}return x};var T=require("@storybook/core-common"),V=Promise.resolve(),De=async(t,e)=>{let r=await T.cache.get("lastEvents")||{};r[t]={body:e,timestamp:Date.now()},await T.cache.set("lastEvents",r)},ce=async(t,e)=>(await V,V=De(t,e),V);var Oe=t=>{let{body:e,timestamp:r}=t;return{timestamp:r,eventType:e==null?void 0:e.eventType,eventId:e==null?void 0:e.eventId,sessionId:e==null?void 0:e.sessionId}},Re=["init","upgrade"],Ie=["build","dev","error"],ie=(t,e)=>{let r=e.map(o=>t==null?void 0:t[o]).filter(Boolean).sort((o,n)=>n.timestamp-o.timestamp);return r.length>0?r[0]:void 0},pe=async(t=void 0)=>{let e=t||await T.cache.get("lastEvents")||{},r=ie(e,Re),o=ie(e,Ie);if(!!r)return!(o!=null&&o.timestamp)||r.timestamp>o.timestamp?Oe(r):void 0};var Me=process.env.STORYBOOK_TELEMETRY_URL||"https://storybook.js.org/event-log",Ne=(0,ye.default)(me.default),E=[],Ve=(0,C.nanoid)();async function fe(t,e={retryDelay:1e3,immediate:!1}){let{eventType:r,payload:o,metadata:n,...s}=t,f=e.stripMetadata?{}:{anonymousId:ae(),inCI:Boolean(process.env.CI)},c=(0,C.nanoid)(),p={...s,eventType:r,eventId:c,sessionId:Ve,metadata:n,payload:o,context:f},u;try{u=Ne(Me,{method:"POST",body:JSON.stringify(p),headers:{"Content-Type":"application/json"},retries:3,retryOn:[503,504],retryDelay:l=>2**l*(typeof(e==null?void 0:e.retryDelay)=="number"&&!Number.isNaN(e==null?void 0:e.retryDelay)?e.retryDelay:1e3)}),E.push(u),e.immediate?await Promise.all(E):await u,await ce(r,p)}catch{}finally{E=E.filter(l=>l!==u)}}var A=m(require("chalk")),U=require("@storybook/core-common"),le="telemetry-notification-date",d=console,de=async()=>{await U.cache.get(le,null)||(U.cache.set(le,Date.now()),d.log(),d.log(`${A.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(A.default.cyan("https://storybook.js.org/telemetry")),d.log())};var Ce=async(t,e={},r={})=>{var n;t!=="boot"&&await de();let o={eventType:t,payload:e};try{r!=null&&r.stripMetadata||(o.metadata=await N(r==null?void 0:r.configDir))}catch(s){o.payload.metadataErrorMessage=w(s).message,r!=null&&r.enableCrashReports&&(o.payload.metadataError=w(s))}finally{let{error:s}=o.payload;s&&(o.payload.error=w(s)),(!o.payload.error||(r==null?void 0:r.enableCrashReports))&&((n=process.env)!=null&&n.STORYBOOK_TELEMETRY_DEBUG&&(B.logger.info(`
2
- [telemetry]`),B.logger.info(JSON.stringify(o,null,2))),await fe(o,r))}};0&&(module.exports={computeStorybookMetadata,getPrecedingUpgrade,getStorybookCoreVersion,getStorybookMetadata,metaFrameworks,sanitizeAddonName,telemetry});
1
+ "use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var src_exports={};__export(src_exports,{computeStorybookMetadata:()=>computeStorybookMetadata,getPrecedingUpgrade:()=>getPrecedingUpgrade,getStorybookCoreVersion:()=>getStorybookCoreVersion,getStorybookMetadata:()=>getStorybookMetadata,metaFrameworks:()=>metaFrameworks,oneWayHash:()=>oneWayHash,sanitizeAddonName:()=>sanitizeAddonName,telemetry:()=>telemetry});module.exports=__toCommonJS(src_exports);var import_client_logger=require("@storybook/client-logger");var import_read_pkg_up=__toESM(require("read-pkg-up")),import_detect_package_manager=require("detect-package-manager"),import_core_common2=require("@storybook/core-common");var fs=__toESM(require("fs-extra")),import_path=__toESM(require("path")),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=>{let resolvedPackageJson=require.resolve(import_path.default.join(packageName,"package.json"),{paths:[process.cwd()]});return await fs.readJson(resolvedPackageJson)},getStorybookCoreVersion=async()=>{var _a;return(_a=(await Promise.all(["@storybook/core-common","@storybook/core-server"].map(getActualPackageVersion))).find(v=>v.version))==null?void 0:_a.version};var import_fs_extra=__toESM(require("fs-extra")),import_path2=__toESM(require("path")),import_core_common=require("@storybook/core-common"),monorepoConfigs={Nx:"nx.json",Turborepo:"turbo.json",Lerna:"lerna.json",Rush:"rush.json",Lage:"lage.config.json"},getMonorepoType=()=>{let projectRootPath=(0,import_core_common.getProjectRoot)();if(!projectRootPath)return;let monorepoType=Object.keys(monorepoConfigs).find(monorepo=>{let configFile=import_path2.default.join(projectRootPath,monorepoConfigs[monorepo]);return import_fs_extra.default.existsSync(configFile)});if(monorepoType)return monorepoType;if(!import_fs_extra.default.existsSync(import_path2.default.join(projectRootPath,"package.json")))return;let packageJson=import_fs_extra.default.readJsonSync(import_path2.default.join(projectRootPath,"package.json"));if(packageJson!=null&&packageJson.workspaces)return"Workspaces"};var import_path3=require("path");function regexpEscape(str){return str.replace(/[-[/{}()*+?.\\^$|]/g,"\\$&")}function cleanPaths(str,separator=import_path3.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=import_path3.sep){try{error=JSON.parse(JSON.stringify(error,Object.getOwnPropertyNames(error)));let errorString=cleanPaths(JSON.stringify(error),pathSeparator);return JSON.parse(errorString)}catch(err){return`Sanitization error: ${err==null?void 0:err.message}`}}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}}function getChromaticVersionSpecifier(packageJson){var _a,_b,_c;let dependency=((_a=packageJson.dependencies)==null?void 0:_a.chromatic)||((_b=packageJson.devDependencies)==null?void 0:_b.chromatic)||((_c=packageJson.peerDependencies)==null?void 0:_c.chromatic);return dependency||(packageJson.scripts&&Object.values(packageJson.scripts).find(s=>s==null?void 0:s.match(/chromatic/))?"latest":void 0)}var metaFrameworks={next:"Next","react-scripts":"CRA",gatsby:"Gatsby","@nuxtjs/storybook":"nuxt","@nrwl/storybook":"nx","@vue/cli-service":"vue-cli","@sveltejs/kit":"sveltekit"},sanitizeAddonName=name=>cleanPaths(name).replace(/\/dist\/.*/,"").replace(/\.[mc]?[tj]?s[x]?$/,"").replace(/\/register$/,"").replace(/\/manager$/,"").replace(/\/preset$/,""),computeStorybookMetadata=async({packageJson,mainConfig})=>{var _a;let metadata={generatedAt:new Date().getTime(),hasCustomBabel:!1,hasCustomWebpack:!1,hasStaticDirs:!1,hasStorybookEslint:!1,refCount:0},allDependencies={...packageJson==null?void 0:packageJson.dependencies,...packageJson==null?void 0:packageJson.devDependencies,...packageJson==null?void 0: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(0,import_detect_package_manager.detect)({cwd:(0,import_core_common2.getProjectRoot)()}),packageManagerVerson=await(0,import_detect_package_manager.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}});let chromaticVersionSpecifier=getChromaticVersionSpecifier(packageJson);chromaticVersionSpecifier&&(addons.chromatic={version:void 0,versionSpecifier:chromaticVersionSpecifier,options: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=(0,import_core_common2.getStorybookInfo)(packageJson),storybookVersion=(_a=storybookPackages[storybookInfo.frameworkPackage])==null?void 0:_a.version;return{...metadata,...frameworkInfo,storybookVersion,storybookVersionSpecifier:storybookInfo.version,language,storybookPackages,addons,hasStorybookEslint}},cachedMetadata,getStorybookMetadata=async _configDir=>{var _a;if(cachedMetadata)return cachedMetadata;let{packageJson={}}=import_read_pkg_up.default.sync({cwd:process.cwd(),normalize:!1})||{},configDir=(_configDir||(0,import_core_common2.getStorybookConfiguration)(((_a=packageJson==null?void 0:packageJson.scripts)==null?void 0:_a.storybook)||"","-c","--config-dir"))??".storybook",mainConfig=await(0,import_core_common2.loadMainConfig)({configDir});return cachedMetadata=await computeStorybookMetadata({mainConfig,packageJson}),cachedMetadata};var import_isomorphic_unfetch=__toESM(require("isomorphic-unfetch")),import_fetch_retry=__toESM(require("fetch-retry")),import_nanoid=require("nanoid");var import_path4=__toESM(require("path")),import_child_process=require("child_process"),import_core_common3=require("@storybook/core-common");var import_crypto=require("crypto"),oneWayHash=payload=>{let hash=(0,import_crypto.createHash)("sha256");return hash.update("storybook-telemetry-salt"),hash.update(payload),hash.digest("hex")};function normalizeGitUrl(rawUrl){return rawUrl.trim().replace(/#.*$/,"").replace(/^.*@/,"").replace(/^.*\/\//,"").replace(":","/")}var anonymousProjectId,getAnonymousProjectId=()=>{if(anonymousProjectId)return anonymousProjectId;let unhashedProjectId;try{let projectRoot=(0,import_core_common3.getProjectRoot)(),projectRootPath=import_path4.default.relative(projectRoot,process.cwd()),originBuffer=(0,import_child_process.execSync)("git config --local --get remote.origin.url",{timeout:1e3,stdio:"pipe"});unhashedProjectId=`${normalizeGitUrl(String(originBuffer))}${projectRootPath}`,anonymousProjectId=oneWayHash(unhashedProjectId)}catch{}return anonymousProjectId};var import_core_common4=require("@storybook/core-common"),operation=Promise.resolve(),setHelper=async(eventType,body)=>{let lastEvents=await import_core_common4.cache.get("lastEvents")||{};lastEvents[eventType]={body,timestamp:Date.now()},await import_core_common4.cache.set("lastEvents",lastEvents)},set=async(eventType,body)=>(await operation,operation=setHelper(eventType,body),operation);var upgradeFields=event=>{let{body,timestamp}=event;return{timestamp,eventType:body==null?void 0:body.eventType,eventId:body==null?void 0:body.eventId,sessionId:body==null?void 0:body.sessionId}},UPGRADE_EVENTS=["init","upgrade"],RUN_EVENTS=["build","dev","error"],lastEvent=(lastEvents,eventTypes)=>{let descendingEvents=eventTypes.map(eventType=>lastEvents==null?void 0:lastEvents[eventType]).filter(Boolean).sort((a,b)=>b.timestamp-a.timestamp);return descendingEvents.length>0?descendingEvents[0]:void 0},getPrecedingUpgrade=async(events=void 0)=>{let lastEvents=events||await import_core_common4.cache.get("lastEvents")||{},lastUpgradeEvent=lastEvent(lastEvents,UPGRADE_EVENTS),lastRunEvent=lastEvent(lastEvents,RUN_EVENTS);if(lastUpgradeEvent)return!(lastRunEvent!=null&&lastRunEvent.timestamp)||lastUpgradeEvent.timestamp>lastRunEvent.timestamp?upgradeFields(lastUpgradeEvent):void 0};var URL=process.env.STORYBOOK_TELEMETRY_URL||"https://storybook.js.org/event-log",fetch=(0,import_fetch_retry.default)(import_isomorphic_unfetch.default),tasks=[],sessionId=(0,import_nanoid.nanoid)();async function sendTelemetry(data,options={retryDelay:1e3,immediate:!1}){let{eventType,payload,metadata,...rest}=data,context=options.stripMetadata?{}:{anonymousId:getAnonymousProjectId(),inCI:Boolean(process.env.CI)},eventId=(0,import_nanoid.nanoid)(),body={...rest,eventType,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==null?void 0:options.retryDelay)=="number"&&!Number.isNaN(options==null?void 0:options.retryDelay)?options.retryDelay:1e3)}),tasks.push(request),options.immediate?await Promise.all(tasks):await request,await set(eventType,body)}catch{}finally{tasks=tasks.filter(task=>task!==request)}}var import_chalk=__toESM(require("chalk")),import_core_common5=require("@storybook/core-common"),TELEMETRY_KEY_NOTIFY_DATE="telemetry-notification-date",logger=console,notify=async()=>{await import_core_common5.cache.get(TELEMETRY_KEY_NOTIFY_DATE,null)||(import_core_common5.cache.set(TELEMETRY_KEY_NOTIFY_DATE,Date.now()),logger.log(),logger.log(`${import_chalk.default.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(import_chalk.default.cyan("https://storybook.js.org/telemetry")),logger.log())};var telemetry=async(eventType,payload={},options={})=>{var _a;eventType!=="boot"&&await notify();let telemetryData={eventType,payload};try{options!=null&&options.stripMetadata||(telemetryData.metadata=await getStorybookMetadata(options==null?void 0:options.configDir))}catch(error){telemetryData.payload.metadataErrorMessage=sanitizeError(error).message,options!=null&&options.enableCrashReports&&(telemetryData.payload.metadataError=sanitizeError(error))}finally{let{error}=telemetryData.payload;error&&(telemetryData.payload.error=sanitizeError(error)),(!telemetryData.payload.error||options!=null&&options.enableCrashReports)&&((_a=process.env)!=null&&_a.STORYBOOK_TELEMETRY_DEBUG&&(import_client_logger.logger.info(`
2
+ [telemetry]`),import_client_logger.logger.info(JSON.stringify(telemetryData,null,2))),await sendTelemetry(telemetryData,options))}};0&&(module.exports={computeStorybookMetadata,getPrecedingUpgrade,getStorybookCoreVersion,getStorybookMetadata,metaFrameworks,oneWayHash,sanitizeAddonName,telemetry});
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var __require=(x=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x,{get:(a,b)=>(typeof require<"u"?require:a)[b]}):x)(function(x){if(typeof require<"u")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{readJson}from"fs-extra";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=>{let resolvedPackageJson=__require.resolve(path.join(packageName,"package.json"),{paths:[process.cwd()]});return await readJson(resolvedPackageJson)},getStorybookCoreVersion=async()=>(await Promise.all(["@storybook/core-common","@storybook/core-server"].map(getActualPackageVersion))).find(v=>v.version)?.version;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}}function getChromaticVersionSpecifier(packageJson){let dependency=packageJson.dependencies?.chromatic||packageJson.devDependencies?.chromatic||packageJson.peerDependencies?.chromatic;return dependency||(packageJson.scripts&&Object.values(packageJson.scripts).find(s=>s?.match(/chromatic/))?"latest":void 0)}var metaFrameworks={next:"Next","react-scripts":"CRA",gatsby:"Gatsby","@nuxtjs/storybook":"nuxt","@nrwl/storybook":"nx","@vue/cli-service":"vue-cli","@sveltejs/kit":"sveltekit"},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}});let chromaticVersionSpecifier=getChromaticVersionSpecifier(packageJson);chromaticVersionSpecifier&&(addons.chromatic={version:void 0,versionSpecifier:chromaticVersionSpecifier,options: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;return{...metadata,...frameworkInfo,storybookVersion,storybookVersionSpecifier:storybookInfo.version,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")};function normalizeGitUrl(rawUrl){return rawUrl.replace(/#.*$/,"").replace(/^.*@/,"").replace(/^.*\/\//,"").replace(":","/")}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=`${normalizeGitUrl(String(originBuffer))}${projectRootPath}`,anonymousProjectId=oneWayHash(unhashedProjectId)}catch{}return anonymousProjectId};import{cache}from"@storybook/core-common";var operation=Promise.resolve(),setHelper=async(eventType,body)=>{let lastEvents=await cache.get("lastEvents")||{};lastEvents[eventType]={body,timestamp:Date.now()},await cache.set("lastEvents",lastEvents)},set=async(eventType,body)=>(await operation,operation=setHelper(eventType,body),operation);var upgradeFields=event=>{let{body,timestamp}=event;return{timestamp,eventType:body?.eventType,eventId:body?.eventId,sessionId:body?.sessionId}},UPGRADE_EVENTS=["init","upgrade"],RUN_EVENTS=["build","dev","error"],lastEvent=(lastEvents,eventTypes)=>{let descendingEvents=eventTypes.map(eventType=>lastEvents?.[eventType]).filter(Boolean).sort((a,b)=>b.timestamp-a.timestamp);return descendingEvents.length>0?descendingEvents[0]:void 0},getPrecedingUpgrade=async(events=void 0)=>{let lastEvents=events||await cache.get("lastEvents")||{},lastUpgradeEvent=lastEvent(lastEvents,UPGRADE_EVENTS),lastRunEvent=lastEvent(lastEvents,RUN_EVENTS);if(!!lastUpgradeEvent)return!lastRunEvent?.timestamp||lastUpgradeEvent.timestamp>lastRunEvent.timestamp?upgradeFields(lastUpgradeEvent):void 0};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{eventType,payload,metadata,...rest}=data,context=options.stripMetadata?{}:{anonymousId:getAnonymousProjectId(),inCI:Boolean(process.env.CI)},eventId=nanoid(),body={...rest,eventType,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,await set(eventType,body)}catch{}finally{tasks=tasks.filter(task=>task!==request)}}import chalk from"chalk";import{cache as cache2}from"@storybook/core-common";var TELEMETRY_KEY_NOTIFY_DATE="telemetry-notification-date",logger=console,notify=async()=>{await cache2.get(TELEMETRY_KEY_NOTIFY_DATE,null)||(cache2.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,getPrecedingUpgrade,getStorybookCoreVersion,getStorybookMetadata,metaFrameworks,sanitizeAddonName,telemetry};
1
+ var __require=(x=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x,{get:(a,b)=>(typeof require<"u"?require:a)[b]}):x)(function(x){if(typeof require<"u")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*as fs from"fs-extra";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=>{let resolvedPackageJson=__require.resolve(path.join(packageName,"package.json"),{paths:[process.cwd()]});return await fs.readJson(resolvedPackageJson)},getStorybookCoreVersion=async()=>(await Promise.all(["@storybook/core-common","@storybook/core-server"].map(getActualPackageVersion))).find(v=>v.version)?.version;import fs2 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 fs2.existsSync(configFile)});if(monorepoType)return monorepoType;if(!fs2.existsSync(path2.join(projectRootPath,"package.json")))return;if(fs2.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){try{error=JSON.parse(JSON.stringify(error,Object.getOwnPropertyNames(error)));let errorString=cleanPaths(JSON.stringify(error),pathSeparator);return JSON.parse(errorString)}catch(err){return`Sanitization error: ${err?.message}`}}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}}function getChromaticVersionSpecifier(packageJson){let dependency=packageJson.dependencies?.chromatic||packageJson.devDependencies?.chromatic||packageJson.peerDependencies?.chromatic;return dependency||(packageJson.scripts&&Object.values(packageJson.scripts).find(s=>s?.match(/chromatic/))?"latest":void 0)}var metaFrameworks={next:"Next","react-scripts":"CRA",gatsby:"Gatsby","@nuxtjs/storybook":"nuxt","@nrwl/storybook":"nx","@vue/cli-service":"vue-cli","@sveltejs/kit":"sveltekit"},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}});let chromaticVersionSpecifier=getChromaticVersionSpecifier(packageJson);chromaticVersionSpecifier&&(addons.chromatic={version:void 0,versionSpecifier:chromaticVersionSpecifier,options: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;return{...metadata,...frameworkInfo,storybookVersion,storybookVersionSpecifier:storybookInfo.version,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=await 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")};function normalizeGitUrl(rawUrl){return rawUrl.trim().replace(/#.*$/,"").replace(/^.*@/,"").replace(/^.*\/\//,"").replace(":","/")}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=`${normalizeGitUrl(String(originBuffer))}${projectRootPath}`,anonymousProjectId=oneWayHash(unhashedProjectId)}catch{}return anonymousProjectId};import{cache}from"@storybook/core-common";var operation=Promise.resolve(),setHelper=async(eventType,body)=>{let lastEvents=await cache.get("lastEvents")||{};lastEvents[eventType]={body,timestamp:Date.now()},await cache.set("lastEvents",lastEvents)},set=async(eventType,body)=>(await operation,operation=setHelper(eventType,body),operation);var upgradeFields=event=>{let{body,timestamp}=event;return{timestamp,eventType:body?.eventType,eventId:body?.eventId,sessionId:body?.sessionId}},UPGRADE_EVENTS=["init","upgrade"],RUN_EVENTS=["build","dev","error"],lastEvent=(lastEvents,eventTypes)=>{let descendingEvents=eventTypes.map(eventType=>lastEvents?.[eventType]).filter(Boolean).sort((a,b)=>b.timestamp-a.timestamp);return descendingEvents.length>0?descendingEvents[0]:void 0},getPrecedingUpgrade=async(events=void 0)=>{let lastEvents=events||await cache.get("lastEvents")||{},lastUpgradeEvent=lastEvent(lastEvents,UPGRADE_EVENTS),lastRunEvent=lastEvent(lastEvents,RUN_EVENTS);if(lastUpgradeEvent)return!lastRunEvent?.timestamp||lastUpgradeEvent.timestamp>lastRunEvent.timestamp?upgradeFields(lastUpgradeEvent):void 0};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{eventType,payload,metadata,...rest}=data,context=options.stripMetadata?{}:{anonymousId:getAnonymousProjectId(),inCI:Boolean(process.env.CI)},eventId=nanoid(),body={...rest,eventType,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,await set(eventType,body)}catch{}finally{tasks=tasks.filter(task=>task!==request)}}import chalk from"chalk";import{cache as cache2}from"@storybook/core-common";var TELEMETRY_KEY_NOTIFY_DATE="telemetry-notification-date",logger=console,notify=async()=>{await cache2.get(TELEMETRY_KEY_NOTIFY_DATE,null)||(cache2.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,getPrecedingUpgrade,getStorybookCoreVersion,getStorybookMetadata,metaFrameworks,oneWayHash,sanitizeAddonName,telemetry};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/telemetry",
3
- "version": "7.0.0-beta.5",
3
+ "version": "7.0.0-beta.50",
4
4
  "description": "Telemetry logging for crash reports and usage statistics",
5
5
  "keywords": [
6
6
  "storybook"
@@ -22,6 +22,7 @@
22
22
  "sideEffects": false,
23
23
  "exports": {
24
24
  ".": {
25
+ "node": "./dist/index.js",
25
26
  "require": "./dist/index.js",
26
27
  "import": "./dist/index.mjs",
27
28
  "types": "./dist/index.d.ts"
@@ -42,12 +43,12 @@
42
43
  "prep": "../../../scripts/prepare/bundle.ts"
43
44
  },
44
45
  "dependencies": {
45
- "@storybook/client-logger": "7.0.0-beta.5",
46
- "@storybook/core-common": "7.0.0-beta.5",
46
+ "@storybook/client-logger": "7.0.0-beta.50",
47
+ "@storybook/core-common": "7.0.0-beta.50",
47
48
  "chalk": "^4.1.0",
48
49
  "detect-package-manager": "^2.0.1",
49
50
  "fetch-retry": "^5.0.2",
50
- "fs-extra": "^9.0.1",
51
+ "fs-extra": "^11.1.0",
51
52
  "isomorphic-unfetch": "^3.1.0",
52
53
  "nanoid": "^3.3.1",
53
54
  "read-pkg-up": "^7.0.1"
@@ -64,5 +65,5 @@
64
65
  ],
65
66
  "platform": "node"
66
67
  },
67
- "gitHead": "8a44bd60808941735aac4a5e9505e8f658131b3e"
68
+ "gitHead": "ecbe308bda919d3cc60188dbb17dc4511f6b7a0e"
68
69
  }