@storybook/telemetry 7.0.0-alpha.4 → 7.0.0-alpha.40
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 +72 -0
- package/dist/index.js +2 -0
- package/dist/index.mjs +2 -0
- package/package.json +26 -10
- package/LICENSE +0 -21
- package/dist/cjs/anonymous-id.js +0 -46
- package/dist/cjs/get-monorepo-type.js +0 -52
- package/dist/cjs/index.js +0 -68
- package/dist/cjs/notify.js +0 -37
- package/dist/cjs/one-way-hash.js +0 -21
- package/dist/cjs/package-versions.js +0 -36
- package/dist/cjs/sanitize.js +0 -41
- package/dist/cjs/storybook-metadata.js +0 -209
- package/dist/cjs/telemetry.js +0 -80
- package/dist/cjs/types.js +0 -5
- package/dist/esm/anonymous-id.js +0 -28
- package/dist/esm/get-monorepo-type.js +0 -35
- package/dist/esm/index.js +0 -37
- package/dist/esm/notify.js +0 -22
- package/dist/esm/one-way-hash.js +0 -11
- package/dist/esm/package-versions.js +0 -21
- package/dist/esm/sanitize.js +0 -32
- package/dist/esm/storybook-metadata.js +0 -184
- package/dist/esm/telemetry.js +0 -66
- package/dist/esm/types.js +0 -1
- package/dist/types/anonymous-id.d.ts +0 -1
- package/dist/types/get-monorepo-type.d.ts +0 -9
- package/dist/types/index.d.ts +0 -3
- package/dist/types/notify.d.ts +0 -1
- package/dist/types/one-way-hash.d.ts +0 -2
- package/dist/types/package-versions.d.ts +0 -9
- package/dist/types/sanitize.d.ts +0 -8
- package/dist/types/storybook-metadata.d.ts +0 -8
- package/dist/types/telemetry.d.ts +0 -2
- package/dist/types/types.d.ts +0 -56
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { TypescriptOptions, StorybookConfig, PackageJson } from '@storybook/core-common';
|
|
2
|
+
import { PM } from 'detect-package-manager';
|
|
3
|
+
|
|
4
|
+
declare const monorepoConfigs: {
|
|
5
|
+
readonly Nx: "nx.json";
|
|
6
|
+
readonly Turborepo: "turbo.json";
|
|
7
|
+
readonly Lerna: "lerna.json";
|
|
8
|
+
readonly Rush: "rush.json";
|
|
9
|
+
readonly Lage: "lage.config.json";
|
|
10
|
+
};
|
|
11
|
+
declare type MonorepoType = keyof typeof monorepoConfigs | 'Workspaces' | undefined;
|
|
12
|
+
|
|
13
|
+
declare type EventType = 'start' | 'build' | 'upgrade' | 'init' | 'error-build' | 'error-dev' | 'error-metadata';
|
|
14
|
+
interface Dependency {
|
|
15
|
+
version: string | undefined;
|
|
16
|
+
}
|
|
17
|
+
interface StorybookAddon extends Dependency {
|
|
18
|
+
options: any;
|
|
19
|
+
}
|
|
20
|
+
declare type StorybookMetadata = {
|
|
21
|
+
storybookVersion: string;
|
|
22
|
+
generatedAt?: number;
|
|
23
|
+
language: 'typescript' | 'javascript';
|
|
24
|
+
framework: {
|
|
25
|
+
name: string;
|
|
26
|
+
options?: any;
|
|
27
|
+
};
|
|
28
|
+
builder?: {
|
|
29
|
+
name: string;
|
|
30
|
+
options?: Record<string, any>;
|
|
31
|
+
};
|
|
32
|
+
monorepo?: MonorepoType;
|
|
33
|
+
packageManager?: {
|
|
34
|
+
type: PM;
|
|
35
|
+
version: string;
|
|
36
|
+
};
|
|
37
|
+
typescriptOptions?: Partial<TypescriptOptions>;
|
|
38
|
+
addons?: Record<string, StorybookAddon>;
|
|
39
|
+
storybookPackages?: Record<string, Dependency>;
|
|
40
|
+
metaFramework?: {
|
|
41
|
+
name: string;
|
|
42
|
+
packageName: string;
|
|
43
|
+
version: string;
|
|
44
|
+
};
|
|
45
|
+
hasStorybookEslint?: boolean;
|
|
46
|
+
hasStaticDirs?: boolean;
|
|
47
|
+
hasCustomWebpack?: boolean;
|
|
48
|
+
hasCustomBabel?: boolean;
|
|
49
|
+
features?: StorybookConfig['features'];
|
|
50
|
+
refCount?: number;
|
|
51
|
+
};
|
|
52
|
+
interface Payload {
|
|
53
|
+
[key: string]: any;
|
|
54
|
+
}
|
|
55
|
+
interface Options {
|
|
56
|
+
retryDelay: number;
|
|
57
|
+
immediate: boolean;
|
|
58
|
+
configDir?: string;
|
|
59
|
+
enableCrashReports?: boolean;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
declare const metaFrameworks: Record<string, string>;
|
|
63
|
+
declare const sanitizeAddonName: (name: string) => string;
|
|
64
|
+
declare const computeStorybookMetadata: ({ packageJson, mainConfig, }: {
|
|
65
|
+
packageJson: PackageJson;
|
|
66
|
+
mainConfig: StorybookConfig & Record<string, any>;
|
|
67
|
+
}) => Promise<StorybookMetadata>;
|
|
68
|
+
declare const getStorybookMetadata: (_configDir?: string | undefined) => Promise<StorybookMetadata>;
|
|
69
|
+
|
|
70
|
+
declare const telemetry: (eventType: EventType, payload?: Payload, options?: Partial<Options>) => Promise<void>;
|
|
71
|
+
|
|
72
|
+
export { computeStorybookMetadata, getStorybookMetadata, metaFrameworks, sanitizeAddonName, telemetry };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var ae=Object.create;var d=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var ce=Object.getOwnPropertyNames;var ye=Object.getPrototypeOf,pe=Object.prototype.hasOwnProperty;var me=(e,t)=>{for(var o in t)d(e,o,{get:t[o],enumerable:!0})},B=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ce(t))!pe.call(e,s)&&s!==o&&d(e,s,{get:()=>t[s],enumerable:!(n=ie(t,s))||n.enumerable});return e};var p=(e,t,o)=>(o=e!=null?ae(ye(e)):{},B(t||!e||!e.__esModule?d(o,"default",{value:e,enumerable:!0}):o,e)),le=e=>B(d({},"__esModule",{value:!0}),e);var be={};me(be,{computeStorybookMetadata:()=>U,getStorybookMetadata:()=>D,metaFrameworks:()=>O,sanitizeAddonName:()=>T,telemetry:()=>ke});module.exports=le(be);var M=require("@storybook/client-logger");var z=p(require("read-pkg-up")),b=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(S))},S=async e=>{try{let t=require(F.default.join(e,"package.json"));return{name:e,version:t.version}}catch{return{name:e,version:null}}};var u=p(require("fs-extra")),g=p(require("path")),C=require("@storybook/core-common"),L={Nx:"nx.json",Turborepo:"turbo.json",Lerna:"lerna.json",Rush:"rush.json",Lage:"lage.config.json"},W=()=>{let e=(0,C.getProjectRoot)();if(!e)return;let o=Object.keys(L).find(s=>{let a=g.default.join(e,L[s]);return u.default.existsSync(a)});if(o)return o;if(!u.default.existsSync(g.default.join(e,"package.json")))return;let n=u.default.readJsonSync(g.default.join(e,"package.json"));if(n!=null&&n.workspaces)return"Workspaces"};var x=require("path");function Y(e){return e.replace(/[-[/{}()*+?.\\^$|]/g,"\\$&")}function v(e,t=x.sep){if(!e)return e;let o=process.cwd().split(t);for(;o.length>1;){let n=o.join(t),s=new RegExp(Y(n),"g");e=e.replace(s,"$SNIP");let a=o.join(t+t),c=new RegExp(Y(a),"g");e=e.replace(c,"$SNIP"),o.pop()}return e}function _(e,t=x.sep){e=JSON.parse(JSON.stringify(e,Object.getOwnPropertyNames(e)));let o=v(JSON.stringify(e),t);return JSON.parse(o)}var O={next:"Next","react-scripts":"CRA",gatsby:"Gatsby","@nuxtjs/storybook":"nuxt","@nrwl/storybook":"nx","@vue/cli-service":"vue-cli","@sveltejs/kit":"svelte-kit"},fe=e=>{let t=["angular","ember","html","preact","react","server","svelte","vue","vue3","webComponents"].map(o=>`${o}Options`);for(let o of t)if(o in e)return e[o]},T=e=>v(e).replace(/\/dist\/.*/,"").replace(/\.[mc]?[tj]?s[x]?$/,"").replace(/\/register$/,"").replace(/\/manager$/,"").replace(/\/preset$/,""),U=async({packageJson:e,mainConfig:t})=>{var A,$;let o={generatedAt:new Date().getTime(),builder:{name:"webpack5"},hasCustomBabel:!1,hasCustomWebpack:!1,hasStaticDirs:!1,hasStorybookEslint:!1,refCount:0},n={...e==null?void 0:e.dependencies,...e==null?void 0:e.devDependencies,...e==null?void 0:e.peerDependencies},s=Object.keys(n).find(r=>!!O[r]);if(s){let{version:r}=await S(s);o.metaFramework={name:O[s],packageName:s,version:r}}let a=W();a&&(o.monorepo=a);try{let r=await(0,b.detect)({cwd:(0,m.getProjectRoot)()}),i=await(0,b.getNpmVersion)(r);o.packageManager={type:r,version:i}}catch{}if(o.hasCustomBabel=!!t.babel,o.hasCustomWebpack=!!t.webpackFinal,o.hasStaticDirs=!!t.staticDirs,t.typescript&&(o.typescriptOptions=t.typescript),(A=t.core)!=null&&A.builder){let{builder:r}=t.core;o.builder={name:typeof r=="string"?r:r.name,options:typeof r=="string"?void 0:(r==null?void 0:r.options)??void 0}}t.refs&&(o.refCount=Object.keys(t.refs).length),t.features&&(o.features=t.features);let c={};t.addons&&t.addons.forEach(r=>{let i,V;typeof r=="string"?i=T(r):(V=r.options,i=T(r.name)),c[i]={options:V,version:void 0}}),(await j(c)).forEach(({name:r,version:i})=>{c[r].version=i});let l=Object.keys(c),y=Object.keys(n).filter(r=>r.includes("storybook")&&!l.includes(r)).reduce((r,i)=>({...r,[i]:{version:void 0}}),{});(await j(y)).forEach(({name:r,version:i})=>{y[r].version=i});let re=n.typescript?"typescript":"javascript",ne=!!n["eslint-plugin-storybook"],w=(0,m.getStorybookInfo)(e),se=(($=y[w.frameworkPackage])==null?void 0:$.version)||w.version;return{...o,storybookVersion:se,language:re,storybookPackages:y,framework:{name:w.framework,options:fe(t)},addons:c,hasStorybookEslint:ne}},k,D=async e=>{var s;if(k)return k;let{packageJson:t={}}=z.default.sync({cwd:process.cwd(),normalize:!1})||{},o=(e||(0,m.getStorybookConfiguration)(((s=t==null?void 0:t.scripts)==null?void 0:s.storybook)||"","-c","--config-dir"))??".storybook",n=(0,m.loadMainConfig)({configDir:o});return k=await U({mainConfig:n,packageJson:t}),k};var Z=p(require("isomorphic-unfetch")),J=p(require("fetch-retry")),E=require("nanoid");var G=p(require("path")),K=require("child_process"),Q=require("@storybook/core-common");var H=require("crypto"),q=e=>{let t=(0,H.createHash)("sha256");return t.update("storybook-telemetry-salt"),t.update(e),t.digest("hex")};var h,X=()=>{if(h)return h;let e;try{let t=(0,Q.getProjectRoot)(),o=G.default.relative(t,process.cwd()),n=(0,K.execSync)("git config --local --get remote.origin.url",{timeout:1e3,stdio:"pipe"});e=`${String(n).trim()}${o}`,h=q(e)}catch{}return h};var de="https://storybook.js.org/event-log",ue=(0,J.default)(Z.default),P=[],ge=(0,E.nanoid)();async function ee(e,t={retryDelay:1e3,immediate:!1}){let{payload:o,metadata:n,...s}=e,a={anonymousId:X(),inCI:process.env.CI==="true"},c=(0,E.nanoid)(),I={...s,eventId:c,sessionId:ge,metadata:n,payload:o,context:a},l;try{l=ue(de,{method:"POST",body:JSON.stringify(I),headers:{"Content-Type":"application/json"},retries:3,retryOn:[503,504],retryDelay:y=>2**y*(typeof(t==null?void 0:t.retryDelay)=="number"&&!Number.isNaN(t==null?void 0:t.retryDelay)?t.retryDelay:1e3)}),P.push(l),t.immediate?await Promise.all(P):await l}catch{}finally{P=P.filter(y=>y!==l)}}var R=p(require("chalk")),N=require("@storybook/core-common"),te="telemetry-notification-date",f=console,oe=async()=>{await N.cache.get(te,null)||(N.cache.set(te,Date.now()),f.log(),f.log(`${R.default.magenta.bold("attention")} => Storybook now collects completely anonymous telemetry regarding usage.`),f.log("This information is used to shape Storybook's roadmap and prioritize features."),f.log("You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:"),f.log(R.default.cyan("https://storybook.js.org/telemetry")),f.log())};var ke=async(e,t={},o={})=>{var s;await oe();let n={eventType:e,payload:t};try{n.metadata=await D(o==null?void 0:o.configDir)}catch(a){n.payload.error||(n.payload.error=a)}finally{let{error:a}=n.payload;a&&(n.payload.error=_(a)),(!n.payload.error||(o==null?void 0:o.enableCrashReports))&&((s=process.env)!=null&&s.STORYBOOK_TELEMETRY_DEBUG?(M.logger.info(`
|
|
2
|
+
[telemetry]`),M.logger.info(JSON.stringify(n,null,2))):await ee(n,o))}};0&&(module.exports={computeStorybookMetadata,getStorybookMetadata,metaFrameworks,sanitizeAddonName,telemetry});
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var x=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(o,t)=>(typeof require!="undefined"?require:o)[t]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var i={};import{logger as C}from"@storybook/client-logger";import q from"read-pkg-up";import{detect as G,getNpmVersion as K}from"detect-package-manager";import{loadMainConfig as Q,getStorybookInfo as X,getStorybookConfiguration as Z,getProjectRoot as ee}from"@storybook/core-common";import U from"path";var k=async e=>{let o=Object.keys(e);return Promise.all(o.map(b))},b=async e=>{try{let o=x(U.join(e,"package.json"));return{name:e,version:o.version}}catch{return{name:e,version:null}}};import h from"fs-extra";import P from"path";import{getProjectRoot as H}from"@storybook/core-common";var v={Nx:"nx.json",Turborepo:"turbo.json",Lerna:"lerna.json",Rush:"rush.json",Lage:"lage.config.json"},O=()=>{let e=H();if(!e)return;let t=Object.keys(v).find(s=>{let y=P.join(e,v[s]);return h.existsSync(y)});if(t)return t;if(!h.existsSync(P.join(e,"package.json")))return;if(h.readJsonSync(P.join(e,"package.json"))?.workspaces)return"Workspaces"};import{sep as D}from"path";function T(e){return e.replace(/[-[/{}()*+?.\\^$|]/g,"\\$&")}function w(e,o=D){if(!e)return e;let t=process.cwd().split(o);for(;t.length>1;){let n=t.join(o),s=new RegExp(T(n),"g");e=e.replace(s,"$SNIP");let y=t.join(o+o),c=new RegExp(T(y),"g");e=e.replace(c,"$SNIP"),t.pop()}return e}function E(e,o=D){e=JSON.parse(JSON.stringify(e,Object.getOwnPropertyNames(e)));let t=w(JSON.stringify(e),o);return JSON.parse(t)}var R={next:"Next","react-scripts":"CRA",gatsby:"Gatsby","@nuxtjs/storybook":"nuxt","@nrwl/storybook":"nx","@vue/cli-service":"vue-cli","@sveltejs/kit":"svelte-kit"},oe=e=>{let o=["angular","ember","html","preact","react","server","svelte","vue","vue3","webComponents"].map(t=>`${t}Options`);for(let t of o)if(t in e)return e[t]},N=e=>w(e).replace(/\/dist\/.*/,"").replace(/\.[mc]?[tj]?s[x]?$/,"").replace(/\/register$/,"").replace(/\/manager$/,"").replace(/\/preset$/,""),te=async({packageJson:e,mainConfig:o})=>{let t={generatedAt:new Date().getTime(),builder:{name:"webpack5"},hasCustomBabel:!1,hasCustomWebpack:!1,hasStaticDirs:!1,hasStorybookEslint:!1,refCount:0},n={...e?.dependencies,...e?.devDependencies,...e?.peerDependencies},s=Object.keys(n).find(r=>!!R[r]);if(s){let{version:r}=await b(s);t.metaFramework={name:R[s],packageName:s,version:r}}let y=O();y&&(t.monorepo=y);try{let r=await G({cwd:ee()}),a=await K(r);t.packageManager={type:r,version:a}}catch{}if(t.hasCustomBabel=!!o.babel,t.hasCustomWebpack=!!o.webpackFinal,t.hasStaticDirs=!!o.staticDirs,o.typescript&&(t.typescriptOptions=o.typescript),o.core?.builder){let{builder:r}=o.core;t.builder={name:typeof r=="string"?r:r.name,options:typeof r=="string"?void 0:r?.options??void 0}}o.refs&&(t.refCount=Object.keys(o.refs).length),o.features&&(t.features=o.features);let c={};o.addons&&o.addons.forEach(r=>{let a,S;typeof r=="string"?a=N(r):(S=r.options,a=N(r.name)),c[a]={options:S,version:void 0}}),(await k(c)).forEach(({name:r,version:a})=>{c[r].version=a});let m=Object.keys(c),p=Object.keys(n).filter(r=>r.includes("storybook")&&!m.includes(r)).reduce((r,a)=>({...r,[a]:{version:void 0}}),{});(await k(p)).forEach(({name:r,version:a})=>{p[r].version=a});let W=n.typescript?"typescript":"javascript",Y=!!n["eslint-plugin-storybook"],u=X(e),_=p[u.frameworkPackage]?.version||u.version;return{...t,storybookVersion:_,language:W,storybookPackages:p,framework:{name:u.framework,options:oe(o)},addons:c,hasStorybookEslint:Y}},f,M=async e=>{if(f)return f;let{packageJson:o={}}=q.sync({cwd:process.cwd(),normalize:!1})||{},t=(e||Z(o?.scripts?.storybook||"","-c","--config-dir"))??".storybook",n=Q({configDir:t});return f=await te({mainConfig:n,packageJson:o}),f};import ie from"isomorphic-unfetch";import ce from"fetch-retry";import{nanoid as J}from"nanoid";import ne from"path";import{execSync as se}from"child_process";import{getProjectRoot as ae}from"@storybook/core-common";import{createHash as re}from"crypto";var I=e=>{let o=re("sha256");return o.update("storybook-telemetry-salt"),o.update(e),o.digest("hex")};var g,A=()=>{if(g)return g;let e;try{let o=ae(),t=ne.relative(o,process.cwd()),n=se("git config --local --get remote.origin.url",{timeout:1e3,stdio:"pipe"});e=`${String(n).trim()}${t}`,g=I(e)}catch{}return g};var pe="https://storybook.js.org/event-log",ye=ce(ie),d=[],me=J();async function $(e,o={retryDelay:1e3,immediate:!1}){let{payload:t,metadata:n,...s}=e,y={anonymousId:A(),inCI:i.CI==="true"},c=J(),j={...s,eventId:c,sessionId:me,metadata:n,payload:t,context:y},m;try{m=ye(pe,{method:"POST",body:JSON.stringify(j),headers:{"Content-Type":"application/json"},retries:3,retryOn:[503,504],retryDelay:p=>2**p*(typeof o?.retryDelay=="number"&&!Number.isNaN(o?.retryDelay)?o.retryDelay:1e3)}),d.push(m),o.immediate?await Promise.all(d):await m}catch{}finally{d=d.filter(p=>p!==m)}}import V from"chalk";import{cache as B}from"@storybook/core-common";var F="telemetry-notification-date",l=console,L=async()=>{await B.get(F,null)||(B.set(F,Date.now()),l.log(),l.log(`${V.magenta.bold("attention")} => Storybook now collects completely anonymous telemetry regarding usage.`),l.log("This information is used to shape Storybook's roadmap and prioritize features."),l.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:"),l.log(V.cyan("https://storybook.js.org/telemetry")),l.log())};var Qe=async(e,o={},t={})=>{await L();let n={eventType:e,payload:o};try{n.metadata=await M(t?.configDir)}catch(s){n.payload.error||(n.payload.error=s)}finally{let{error:s}=n.payload;s&&(n.payload.error=E(s)),(!n.payload.error||t?.enableCrashReports)&&(i?.STORYBOOK_TELEMETRY_DEBUG?(C.info(`
|
|
2
|
+
[telemetry]`),C.info(JSON.stringify(n,null,2))):await $(n,t))}};export{te as computeStorybookMetadata,M as getStorybookMetadata,R as metaFrameworks,N as sanitizeAddonName,Qe as 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.40",
|
|
4
4
|
"description": "Telemetry logging for crash reports and usage statistics",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"storybook"
|
|
@@ -20,9 +20,17 @@
|
|
|
20
20
|
},
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"sideEffects": false,
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"require": "./dist/index.js",
|
|
26
|
+
"import": "./dist/index.mjs",
|
|
27
|
+
"types": "./dist/index.d.ts"
|
|
28
|
+
},
|
|
29
|
+
"./package.json": "./package.json"
|
|
30
|
+
},
|
|
31
|
+
"main": "dist/index.js",
|
|
32
|
+
"module": "dist/index.mjs",
|
|
33
|
+
"types": "dist/index.d.ts",
|
|
26
34
|
"files": [
|
|
27
35
|
"dist/**/*",
|
|
28
36
|
"README.md",
|
|
@@ -30,23 +38,31 @@
|
|
|
30
38
|
"*.d.ts"
|
|
31
39
|
],
|
|
32
40
|
"scripts": {
|
|
33
|
-
"
|
|
41
|
+
"check": "../../../scripts/node_modules/.bin/tsc --noEmit",
|
|
42
|
+
"prep": "../../../scripts/prepare/bundle.ts"
|
|
34
43
|
},
|
|
35
44
|
"dependencies": {
|
|
36
|
-
"@storybook/client-logger": "7.0.0-alpha.
|
|
37
|
-
"@storybook/core-common": "7.0.0-alpha.
|
|
45
|
+
"@storybook/client-logger": "7.0.0-alpha.40",
|
|
46
|
+
"@storybook/core-common": "7.0.0-alpha.40",
|
|
38
47
|
"chalk": "^4.1.0",
|
|
39
|
-
"core-js": "^3.8.2",
|
|
40
48
|
"detect-package-manager": "^2.0.1",
|
|
41
49
|
"fetch-retry": "^5.0.2",
|
|
42
50
|
"fs-extra": "^9.0.1",
|
|
43
|
-
"global": "^4.4.0",
|
|
44
51
|
"isomorphic-unfetch": "^3.1.0",
|
|
45
52
|
"nanoid": "^3.3.1",
|
|
46
53
|
"read-pkg-up": "^7.0.1"
|
|
47
54
|
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"typescript": "~4.6.3"
|
|
57
|
+
},
|
|
48
58
|
"publishConfig": {
|
|
49
59
|
"access": "public"
|
|
50
60
|
},
|
|
51
|
-
"
|
|
61
|
+
"bundler": {
|
|
62
|
+
"entries": [
|
|
63
|
+
"./src/index.ts"
|
|
64
|
+
],
|
|
65
|
+
"platform": "node"
|
|
66
|
+
},
|
|
67
|
+
"gitHead": "8f6d8629f1ad7e776c39e2c7621f4a0d538aa93c"
|
|
52
68
|
}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
The MIT License (MIT)
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2017 Kadira Inc. <hello@kadira.io>
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in
|
|
13
|
-
all copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
-
THE SOFTWARE.
|
package/dist/cjs/anonymous-id.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getAnonymousProjectId = void 0;
|
|
7
|
-
|
|
8
|
-
var _path = _interopRequireDefault(require("path"));
|
|
9
|
-
|
|
10
|
-
var _child_process = require("child_process");
|
|
11
|
-
|
|
12
|
-
var _coreCommon = require("@storybook/core-common");
|
|
13
|
-
|
|
14
|
-
var _oneWayHash = require("./one-way-hash");
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
18
|
-
let anonymousProjectId;
|
|
19
|
-
|
|
20
|
-
const getAnonymousProjectId = () => {
|
|
21
|
-
if (anonymousProjectId) {
|
|
22
|
-
return anonymousProjectId;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
let unhashedProjectId;
|
|
26
|
-
|
|
27
|
-
try {
|
|
28
|
-
const projectRoot = (0, _coreCommon.getProjectRoot)();
|
|
29
|
-
|
|
30
|
-
const projectRootPath = _path.default.relative(projectRoot, process.cwd());
|
|
31
|
-
|
|
32
|
-
const originBuffer = (0, _child_process.execSync)(`git config --local --get remote.origin.url`, {
|
|
33
|
-
timeout: 1000,
|
|
34
|
-
stdio: `pipe`
|
|
35
|
-
}); // we use a combination of remoteUrl and working directory
|
|
36
|
-
// to separate multiple storybooks from the same project (e.g. monorepo)
|
|
37
|
-
|
|
38
|
-
unhashedProjectId = `${String(originBuffer).trim()}${projectRootPath}`;
|
|
39
|
-
anonymousProjectId = (0, _oneWayHash.oneWayHash)(unhashedProjectId);
|
|
40
|
-
} catch (_) {//
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return anonymousProjectId;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
exports.getAnonymousProjectId = getAnonymousProjectId;
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.monorepoConfigs = exports.getMonorepoType = void 0;
|
|
7
|
-
|
|
8
|
-
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
9
|
-
|
|
10
|
-
var _path = _interopRequireDefault(require("path"));
|
|
11
|
-
|
|
12
|
-
var _coreCommon = require("@storybook/core-common");
|
|
13
|
-
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
|
-
const monorepoConfigs = {
|
|
17
|
-
Nx: 'nx.json',
|
|
18
|
-
Turborepo: 'turbo.json',
|
|
19
|
-
Lerna: 'lerna.json',
|
|
20
|
-
Rush: 'rush.json',
|
|
21
|
-
Lage: 'lage.config.json'
|
|
22
|
-
};
|
|
23
|
-
exports.monorepoConfigs = monorepoConfigs;
|
|
24
|
-
|
|
25
|
-
const getMonorepoType = () => {
|
|
26
|
-
const projectRootPath = (0, _coreCommon.getProjectRoot)();
|
|
27
|
-
if (!projectRootPath) return undefined;
|
|
28
|
-
const keys = Object.keys(monorepoConfigs);
|
|
29
|
-
const monorepoType = keys.find(monorepo => {
|
|
30
|
-
const configFile = _path.default.join(projectRootPath, monorepoConfigs[monorepo]);
|
|
31
|
-
|
|
32
|
-
return _fsExtra.default.existsSync(configFile);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
if (monorepoType) {
|
|
36
|
-
return monorepoType;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (!_fsExtra.default.existsSync(_path.default.join(projectRootPath, 'package.json'))) {
|
|
40
|
-
return undefined;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const packageJson = _fsExtra.default.readJsonSync(_path.default.join(projectRootPath, 'package.json'));
|
|
44
|
-
|
|
45
|
-
if (packageJson !== null && packageJson !== void 0 && packageJson.workspaces) {
|
|
46
|
-
return 'Workspaces';
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return undefined;
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
exports.getMonorepoType = getMonorepoType;
|
package/dist/cjs/index.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
var _exportNames = {
|
|
7
|
-
telemetry: true
|
|
8
|
-
};
|
|
9
|
-
exports.telemetry = void 0;
|
|
10
|
-
|
|
11
|
-
var _clientLogger = require("@storybook/client-logger");
|
|
12
|
-
|
|
13
|
-
var _storybookMetadata = require("./storybook-metadata");
|
|
14
|
-
|
|
15
|
-
Object.keys(_storybookMetadata).forEach(function (key) {
|
|
16
|
-
if (key === "default" || key === "__esModule") return;
|
|
17
|
-
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
18
|
-
if (key in exports && exports[key] === _storybookMetadata[key]) return;
|
|
19
|
-
Object.defineProperty(exports, key, {
|
|
20
|
-
enumerable: true,
|
|
21
|
-
get: function () {
|
|
22
|
-
return _storybookMetadata[key];
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
var _telemetry = require("./telemetry");
|
|
28
|
-
|
|
29
|
-
var _notify = require("./notify");
|
|
30
|
-
|
|
31
|
-
var _sanitize = require("./sanitize");
|
|
32
|
-
|
|
33
|
-
const telemetry = async (eventType, payload = {}, options = {}) => {
|
|
34
|
-
await (0, _notify.notify)();
|
|
35
|
-
const telemetryData = {
|
|
36
|
-
eventType,
|
|
37
|
-
payload
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
try {
|
|
41
|
-
telemetryData.metadata = await (0, _storybookMetadata.getStorybookMetadata)(options === null || options === void 0 ? void 0 : options.configDir);
|
|
42
|
-
} catch (error) {
|
|
43
|
-
if (!telemetryData.payload.error) telemetryData.payload.error = error;
|
|
44
|
-
} finally {
|
|
45
|
-
const {
|
|
46
|
-
error
|
|
47
|
-
} = telemetryData.payload;
|
|
48
|
-
|
|
49
|
-
if (error) {
|
|
50
|
-
// make sure to anonymise possible paths from error messages
|
|
51
|
-
telemetryData.payload.error = (0, _sanitize.sanitizeError)(error);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
if (!telemetryData.payload.error || options !== null && options !== void 0 && options.enableCrashReports) {
|
|
55
|
-
var _process$env;
|
|
56
|
-
|
|
57
|
-
if ((_process$env = process.env) !== null && _process$env !== void 0 && _process$env.STORYBOOK_DEBUG_TELEMETRY) {
|
|
58
|
-
_clientLogger.logger.info('\n[telemetry]');
|
|
59
|
-
|
|
60
|
-
_clientLogger.logger.info(JSON.stringify(telemetryData, null, 2));
|
|
61
|
-
} else {
|
|
62
|
-
await (0, _telemetry.sendTelemetry)(telemetryData, options);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
exports.telemetry = telemetry;
|
package/dist/cjs/notify.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.notify = void 0;
|
|
7
|
-
|
|
8
|
-
var _chalk = _interopRequireDefault(require("chalk"));
|
|
9
|
-
|
|
10
|
-
var _coreCommon = require("@storybook/core-common");
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
const TELEMETRY_KEY_NOTIFY_DATE = 'telemetry-notification-date';
|
|
15
|
-
const logger = console;
|
|
16
|
-
|
|
17
|
-
const notify = async () => {
|
|
18
|
-
const telemetryNotifyDate = await _coreCommon.cache.get(TELEMETRY_KEY_NOTIFY_DATE, null); // The end-user has already been notified about our telemetry integration. We
|
|
19
|
-
// don't need to constantly annoy them about it.
|
|
20
|
-
// We will re-inform users about the telemetry if significant changes are
|
|
21
|
-
// ever made.
|
|
22
|
-
|
|
23
|
-
if (telemetryNotifyDate) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
_coreCommon.cache.set(TELEMETRY_KEY_NOTIFY_DATE, Date.now());
|
|
28
|
-
|
|
29
|
-
logger.log();
|
|
30
|
-
logger.log(`${_chalk.default.magenta.bold('attention')} => Storybook now collects completely anonymous telemetry regarding usage.`);
|
|
31
|
-
logger.log(`This information is used to shape Storybook's roadmap and prioritize features.`);
|
|
32
|
-
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:`);
|
|
33
|
-
logger.log(_chalk.default.cyan('https://storybook.js.org/telemetry'));
|
|
34
|
-
logger.log();
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
exports.notify = notify;
|
package/dist/cjs/one-way-hash.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.oneWayHash = void 0;
|
|
7
|
-
|
|
8
|
-
var _crypto = require("crypto");
|
|
9
|
-
|
|
10
|
-
const oneWayHash = payload => {
|
|
11
|
-
const hash = (0, _crypto.createHash)('sha256'); // Always prepend the payload value with salt. This ensures the hash is truly
|
|
12
|
-
// one-way.
|
|
13
|
-
|
|
14
|
-
hash.update('storybook-telemetry-salt'); // Update is an append operation, not a replacement. The salt from the prior
|
|
15
|
-
// update is still present!
|
|
16
|
-
|
|
17
|
-
hash.update(payload);
|
|
18
|
-
return hash.digest('hex');
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
exports.oneWayHash = oneWayHash;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getActualPackageVersions = exports.getActualPackageVersion = void 0;
|
|
7
|
-
|
|
8
|
-
var _path = _interopRequireDefault(require("path"));
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
|
-
const getActualPackageVersions = async packages => {
|
|
13
|
-
const packageNames = Object.keys(packages);
|
|
14
|
-
return Promise.all(packageNames.map(getActualPackageVersion));
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
exports.getActualPackageVersions = getActualPackageVersions;
|
|
18
|
-
|
|
19
|
-
const getActualPackageVersion = async packageName => {
|
|
20
|
-
try {
|
|
21
|
-
// eslint-disable-next-line import/no-dynamic-require,global-require
|
|
22
|
-
const packageJson = require(_path.default.join(packageName, 'package.json'));
|
|
23
|
-
|
|
24
|
-
return {
|
|
25
|
-
name: packageName,
|
|
26
|
-
version: packageJson.version
|
|
27
|
-
};
|
|
28
|
-
} catch (err) {
|
|
29
|
-
return {
|
|
30
|
-
name: packageName,
|
|
31
|
-
version: null
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
exports.getActualPackageVersion = getActualPackageVersion;
|
package/dist/cjs/sanitize.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.cleanPaths = cleanPaths;
|
|
7
|
-
exports.sanitizeError = sanitizeError;
|
|
8
|
-
|
|
9
|
-
var _path = require("path");
|
|
10
|
-
|
|
11
|
-
/* eslint-disable no-param-reassign */
|
|
12
|
-
// Removes all user paths
|
|
13
|
-
function regexpEscape(str) {
|
|
14
|
-
return str.replace(/[-[/{}()*+?.\\^$|]/g, `\\$&`);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function cleanPaths(str, separator = _path.sep) {
|
|
18
|
-
if (!str) return str;
|
|
19
|
-
const stack = process.cwd().split(separator);
|
|
20
|
-
|
|
21
|
-
while (stack.length > 1) {
|
|
22
|
-
const currentPath = stack.join(separator);
|
|
23
|
-
const currentRegex = new RegExp(regexpEscape(currentPath), `g`);
|
|
24
|
-
str = str.replace(currentRegex, `$SNIP`);
|
|
25
|
-
const currentPath2 = stack.join(separator + separator);
|
|
26
|
-
const currentRegex2 = new RegExp(regexpEscape(currentPath2), `g`);
|
|
27
|
-
str = str.replace(currentRegex2, `$SNIP`);
|
|
28
|
-
stack.pop();
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return str;
|
|
32
|
-
} // Takes an Error and returns a sanitized JSON String
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
function sanitizeError(error, pathSeparator = _path.sep) {
|
|
36
|
-
// Hack because Node
|
|
37
|
-
error = JSON.parse(JSON.stringify(error, Object.getOwnPropertyNames(error))); // Removes all user paths
|
|
38
|
-
|
|
39
|
-
const errorString = cleanPaths(JSON.stringify(error), pathSeparator);
|
|
40
|
-
return JSON.parse(errorString);
|
|
41
|
-
}
|