@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 +41 -40
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +4 -4
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<
|
|
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:
|
|
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:
|
|
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})},
|
|
2
|
-
[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
|
|
2
|
-
[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.
|
|
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.
|
|
46
|
-
"@storybook/core-common": "7.0.0-alpha.
|
|
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": "
|
|
67
|
+
"gitHead": "55cd2ab63d1f897de59e2471d2f916f7d2c13546"
|
|
68
68
|
}
|