@storybook/telemetry 7.0.0-beta.8 → 7.0.0-rc.0
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 +27 -20
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +8 -6
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
|
-
|
|
722
|
+
type Tag = string;
|
|
722
723
|
interface Parameters {
|
|
723
724
|
[name: string]: any;
|
|
724
725
|
}
|
|
@@ -874,20 +875,18 @@ 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
|
|
888
|
-
cache
|
|
885
|
+
ignorePreview?: boolean;
|
|
886
|
+
cache?: FileSystemCache;
|
|
889
887
|
configDir: string;
|
|
890
|
-
docsMode
|
|
888
|
+
docsMode?: boolean;
|
|
889
|
+
env?: (envs: Record<string, string>) => Record<string, string>;
|
|
891
890
|
features?: StorybookConfig['features'];
|
|
892
891
|
versionCheck?: VersionCheck;
|
|
893
892
|
releaseNotesData?: ReleaseNotesData;
|
|
@@ -932,19 +931,16 @@ type CoreCommon_StorybookRefs = Record<string, {
|
|
|
932
931
|
disable: boolean;
|
|
933
932
|
}>;
|
|
934
933
|
type DocsOptions = {
|
|
935
|
-
/**
|
|
936
|
-
* Should we generate docs entries at all under any circumstances? (i.e. can they be rendered)
|
|
937
|
-
*/
|
|
938
|
-
enabled?: boolean;
|
|
939
934
|
/**
|
|
940
935
|
* What should we call the generated docs entries?
|
|
941
936
|
*/
|
|
942
937
|
defaultName?: string;
|
|
943
938
|
/**
|
|
944
|
-
* Should we generate a docs entry per CSF file
|
|
945
|
-
* Set to '
|
|
939
|
+
* Should we generate a docs entry per CSF file?
|
|
940
|
+
* Set to 'tag' (the default) to generate an entry for every CSF file with the
|
|
941
|
+
* 'autodocs' tag.
|
|
946
942
|
*/
|
|
947
|
-
|
|
943
|
+
autodocs?: boolean | 'tag';
|
|
948
944
|
/**
|
|
949
945
|
* Only show doc entries in the side bar (usually set with the `--docs` CLI flag)
|
|
950
946
|
*/
|
|
@@ -984,13 +980,14 @@ interface StorybookConfig {
|
|
|
984
980
|
*/
|
|
985
981
|
storyStoreV7?: boolean;
|
|
986
982
|
/**
|
|
987
|
-
*
|
|
983
|
+
* Do not throw errors if using `.mdx` files in SSv7
|
|
984
|
+
* (for internal use in sandboxes)
|
|
988
985
|
*/
|
|
989
|
-
|
|
986
|
+
storyStoreV7MdxErrors?: boolean;
|
|
990
987
|
/**
|
|
991
|
-
* Enable
|
|
988
|
+
* Enable a set of planned breaking changes for SB7.0
|
|
992
989
|
*/
|
|
993
|
-
|
|
990
|
+
breakingChangesV7?: boolean;
|
|
994
991
|
/**
|
|
995
992
|
* Filter args with a "target" on the type from the render function (EXPERIMENTAL)
|
|
996
993
|
*/
|
|
@@ -1000,6 +997,14 @@ interface StorybookConfig {
|
|
|
1000
997
|
* Will be removed in 7.0.
|
|
1001
998
|
*/
|
|
1002
999
|
warnOnLegacyHierarchySeparator?: boolean;
|
|
1000
|
+
/**
|
|
1001
|
+
* Use legacy MDX1, to help smooth migration to 7.0
|
|
1002
|
+
*/
|
|
1003
|
+
legacyMdx1?: boolean;
|
|
1004
|
+
/**
|
|
1005
|
+
* Apply decorators from preview.js before decorators from addons or frameworks
|
|
1006
|
+
*/
|
|
1007
|
+
legacyDecoratorFileOrder?: boolean;
|
|
1003
1008
|
};
|
|
1004
1009
|
/**
|
|
1005
1010
|
* Tells Storybook where to find stories.
|
|
@@ -1008,7 +1013,7 @@ interface StorybookConfig {
|
|
|
1008
1013
|
*/
|
|
1009
1014
|
stories: StoriesEntry[];
|
|
1010
1015
|
/**
|
|
1011
|
-
* Framework, e.g. '@storybook/react', required in v7
|
|
1016
|
+
* Framework, e.g. '@storybook/react-vite', required in v7
|
|
1012
1017
|
*/
|
|
1013
1018
|
framework?: Preset;
|
|
1014
1019
|
/**
|
|
@@ -1119,6 +1124,8 @@ interface TelemetryData {
|
|
|
1119
1124
|
metadata?: StorybookMetadata;
|
|
1120
1125
|
}
|
|
1121
1126
|
|
|
1127
|
+
declare const oneWayHash: (payload: BinaryLike) => string;
|
|
1128
|
+
|
|
1122
1129
|
declare const metaFrameworks: Record<string, string>;
|
|
1123
1130
|
declare const sanitizeAddonName: (name: string) => string;
|
|
1124
1131
|
declare const computeStorybookMetadata: ({ packageJson, mainConfig, }: {
|
|
@@ -1139,4 +1146,4 @@ declare const getPrecedingUpgrade: (events?: any) => Promise<UpgradeSummary | un
|
|
|
1139
1146
|
|
|
1140
1147
|
declare const telemetry: (eventType: EventType, payload?: Payload, options?: Partial<Options>) => Promise<void>;
|
|
1141
1148
|
|
|
1142
|
-
export { Dependency, EventType, Options, Payload, StorybookAddon, StorybookMetadata, TelemetryData, computeStorybookMetadata, getPrecedingUpgrade, getStorybookCoreVersion, getStorybookMetadata, metaFrameworks, sanitizeAddonName, telemetry };
|
|
1149
|
+
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]`),
|
|
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_node_fetch=__toESM(require("node-fetch")),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_node_fetch.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),isTTY:process.stdout.isTTY},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"node-fetch";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),isTTY:process.stdout.isTTY},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-
|
|
3
|
+
"version": "7.0.0-rc.0",
|
|
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,14 +43,15 @@
|
|
|
42
43
|
"prep": "../../../scripts/prepare/bundle.ts"
|
|
43
44
|
},
|
|
44
45
|
"dependencies": {
|
|
45
|
-
"@storybook/client-logger": "7.0.0-
|
|
46
|
-
"@storybook/core-common": "7.0.0-
|
|
46
|
+
"@storybook/client-logger": "7.0.0-rc.0",
|
|
47
|
+
"@storybook/core-common": "7.0.0-rc.0",
|
|
48
|
+
"@types/node-fetch": "^2.5.7",
|
|
47
49
|
"chalk": "^4.1.0",
|
|
48
50
|
"detect-package-manager": "^2.0.1",
|
|
49
51
|
"fetch-retry": "^5.0.2",
|
|
50
|
-
"fs-extra": "^
|
|
51
|
-
"isomorphic-unfetch": "^3.1.0",
|
|
52
|
+
"fs-extra": "^11.1.0",
|
|
52
53
|
"nanoid": "^3.3.1",
|
|
54
|
+
"node-fetch": "^2.6.7",
|
|
53
55
|
"read-pkg-up": "^7.0.1"
|
|
54
56
|
},
|
|
55
57
|
"devDependencies": {
|
|
@@ -64,5 +66,5 @@
|
|
|
64
66
|
],
|
|
65
67
|
"platform": "node"
|
|
66
68
|
},
|
|
67
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "6d1bcb2579203a3075467a2ba83738d854545053"
|
|
68
70
|
}
|