@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.
@@ -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.4",
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
- "main": "dist/cjs/index.js",
24
- "module": "dist/esm/index.js",
25
- "types": "dist/types/index.d.ts",
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
- "prepare": "node ../../scripts/prepare.js"
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.4",
37
- "@storybook/core-common": "7.0.0-alpha.4",
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
- "gitHead": "006ed54452dd7c37a8cbe91a84f5312182f7ca00"
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.
@@ -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;
@@ -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;
@@ -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;
@@ -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
- }