@storybook/telemetry 6.5.0-beta.2
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/LICENSE +21 -0
- package/README.md +5 -0
- package/dist/cjs/anonymous-id.js +49 -0
- package/dist/cjs/get-monorepo-type.js +55 -0
- package/dist/cjs/index.js +130 -0
- package/dist/cjs/notify.js +72 -0
- package/dist/cjs/one-way-hash.js +21 -0
- package/dist/cjs/package-versions.js +95 -0
- package/dist/cjs/sanitize.js +57 -0
- package/dist/cjs/storybook-metadata.js +346 -0
- package/dist/cjs/telemetry.js +150 -0
- package/dist/cjs/types.js +5 -0
- package/dist/esm/anonymous-id.js +29 -0
- package/dist/esm/get-monorepo-type.js +34 -0
- package/dist/esm/index.js +94 -0
- package/dist/esm/notify.js +54 -0
- package/dist/esm/one-way-hash.js +11 -0
- package/dist/esm/package-versions.js +72 -0
- package/dist/esm/sanitize.js +42 -0
- package/dist/esm/storybook-metadata.js +304 -0
- package/dist/esm/telemetry.js +127 -0
- package/dist/esm/types.js +1 -0
- package/dist/modern/anonymous-id.js +27 -0
- package/dist/modern/get-monorepo-type.js +30 -0
- package/dist/modern/index.js +39 -0
- package/dist/modern/notify.js +22 -0
- package/dist/modern/one-way-hash.js +11 -0
- package/dist/modern/package-versions.js +21 -0
- package/dist/modern/sanitize.js +32 -0
- package/dist/modern/storybook-metadata.js +188 -0
- package/dist/modern/telemetry.js +66 -0
- package/dist/modern/types.js +1 -0
- package/dist/ts3.4/anonymous-id.d.ts +1 -0
- package/dist/ts3.4/get-monorepo-type.d.ts +9 -0
- package/dist/ts3.4/index.d.ts +3 -0
- package/dist/ts3.4/notify.d.ts +1 -0
- package/dist/ts3.4/one-way-hash.d.ts +2 -0
- package/dist/ts3.4/package-versions.d.ts +9 -0
- package/dist/ts3.4/sanitize.d.ts +8 -0
- package/dist/ts3.4/storybook-metadata.d.ts +8 -0
- package/dist/ts3.4/telemetry.d.ts +2 -0
- package/dist/ts3.4/types.d.ts +56 -0
- package/dist/ts3.9/anonymous-id.d.ts +1 -0
- package/dist/ts3.9/get-monorepo-type.d.ts +9 -0
- package/dist/ts3.9/index.d.ts +3 -0
- package/dist/ts3.9/notify.d.ts +1 -0
- package/dist/ts3.9/one-way-hash.d.ts +2 -0
- package/dist/ts3.9/package-versions.d.ts +9 -0
- package/dist/ts3.9/sanitize.d.ts +8 -0
- package/dist/ts3.9/storybook-metadata.d.ts +8 -0
- package/dist/ts3.9/telemetry.d.ts +2 -0
- package/dist/ts3.9/types.d.ts +56 -0
- package/package.json +61 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.array.slice.js");
|
|
4
|
+
|
|
5
|
+
require("core-js/modules/es.array.from.js");
|
|
6
|
+
|
|
7
|
+
require("core-js/modules/es.string.iterator.js");
|
|
8
|
+
|
|
9
|
+
require("core-js/modules/es.symbol.js");
|
|
10
|
+
|
|
11
|
+
require("core-js/modules/es.symbol.description.js");
|
|
12
|
+
|
|
13
|
+
require("core-js/modules/es.symbol.iterator.js");
|
|
14
|
+
|
|
15
|
+
require("core-js/modules/es.array.iterator.js");
|
|
16
|
+
|
|
17
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
18
|
+
|
|
19
|
+
Object.defineProperty(exports, "__esModule", {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
exports.metaFrameworks = exports.getStorybookMetadata = exports.computeStorybookMetadata = void 0;
|
|
23
|
+
|
|
24
|
+
require("core-js/modules/es.array.map.js");
|
|
25
|
+
|
|
26
|
+
require("core-js/modules/es.object.assign.js");
|
|
27
|
+
|
|
28
|
+
require("core-js/modules/es.array.find.js");
|
|
29
|
+
|
|
30
|
+
require("core-js/modules/es.object.to-string.js");
|
|
31
|
+
|
|
32
|
+
require("core-js/modules/es.object.keys.js");
|
|
33
|
+
|
|
34
|
+
require("core-js/modules/es.function.name.js");
|
|
35
|
+
|
|
36
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
37
|
+
|
|
38
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
39
|
+
|
|
40
|
+
require("core-js/modules/es.string.replace.js");
|
|
41
|
+
|
|
42
|
+
require("core-js/modules/es.array.filter.js");
|
|
43
|
+
|
|
44
|
+
require("core-js/modules/es.array.includes.js");
|
|
45
|
+
|
|
46
|
+
require("core-js/modules/es.string.includes.js");
|
|
47
|
+
|
|
48
|
+
require("core-js/modules/es.promise.js");
|
|
49
|
+
|
|
50
|
+
require("regenerator-runtime/runtime.js");
|
|
51
|
+
|
|
52
|
+
var _readPkgUp = _interopRequireDefault(require("read-pkg-up"));
|
|
53
|
+
|
|
54
|
+
var _detectPackageManager = require("detect-package-manager");
|
|
55
|
+
|
|
56
|
+
var _coreCommon = require("@storybook/core-common");
|
|
57
|
+
|
|
58
|
+
var _packageVersions = require("./package-versions");
|
|
59
|
+
|
|
60
|
+
var _getMonorepoType = require("./get-monorepo-type");
|
|
61
|
+
|
|
62
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
63
|
+
|
|
64
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
65
|
+
|
|
66
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
67
|
+
|
|
68
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
69
|
+
|
|
70
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
71
|
+
|
|
72
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
73
|
+
|
|
74
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
75
|
+
|
|
76
|
+
var cachedMetadata;
|
|
77
|
+
|
|
78
|
+
var getStorybookMetadata = /*#__PURE__*/function () {
|
|
79
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(_configDir) {
|
|
80
|
+
var _ref2;
|
|
81
|
+
|
|
82
|
+
var packageJson, configDir, mainConfig;
|
|
83
|
+
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
84
|
+
while (1) {
|
|
85
|
+
switch (_context.prev = _context.next) {
|
|
86
|
+
case 0:
|
|
87
|
+
if (!cachedMetadata) {
|
|
88
|
+
_context.next = 2;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return _context.abrupt("return", cachedMetadata);
|
|
93
|
+
|
|
94
|
+
case 2:
|
|
95
|
+
packageJson = _readPkgUp.default.sync({
|
|
96
|
+
cwd: process.cwd()
|
|
97
|
+
}).packageJson;
|
|
98
|
+
configDir = (_ref2 = _configDir || (0, _coreCommon.getStorybookConfiguration)(packageJson.scripts.storybook, '-c', '--config-dir')) !== null && _ref2 !== void 0 ? _ref2 : '.storybook';
|
|
99
|
+
mainConfig = (0, _coreCommon.loadMainConfig)({
|
|
100
|
+
configDir: configDir
|
|
101
|
+
});
|
|
102
|
+
_context.next = 7;
|
|
103
|
+
return computeStorybookMetadata({
|
|
104
|
+
mainConfig: mainConfig,
|
|
105
|
+
packageJson: packageJson
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
case 7:
|
|
109
|
+
cachedMetadata = _context.sent;
|
|
110
|
+
return _context.abrupt("return", cachedMetadata);
|
|
111
|
+
|
|
112
|
+
case 9:
|
|
113
|
+
case "end":
|
|
114
|
+
return _context.stop();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}, _callee);
|
|
118
|
+
}));
|
|
119
|
+
|
|
120
|
+
return function getStorybookMetadata(_x) {
|
|
121
|
+
return _ref.apply(this, arguments);
|
|
122
|
+
};
|
|
123
|
+
}();
|
|
124
|
+
|
|
125
|
+
exports.getStorybookMetadata = getStorybookMetadata;
|
|
126
|
+
var metaFrameworks = {
|
|
127
|
+
next: 'Next',
|
|
128
|
+
'react-scripts': 'CRA',
|
|
129
|
+
gatsby: 'Gatsby',
|
|
130
|
+
'@nuxtjs/storybook': 'nuxt',
|
|
131
|
+
'@nrwl/storybook': 'nx',
|
|
132
|
+
'@vue/cli-service': 'vue-cli',
|
|
133
|
+
'@sveltejs/kit': 'svelte-kit'
|
|
134
|
+
}; // @TODO: This should be removed in 7.0 as the framework.options field in main.js will replace this
|
|
135
|
+
|
|
136
|
+
exports.metaFrameworks = metaFrameworks;
|
|
137
|
+
|
|
138
|
+
var getFrameworkOptions = function getFrameworkOptions(mainConfig) {
|
|
139
|
+
var possibleOptions = ['angular', 'ember', 'html', 'preact', 'react', 'server', 'svelte', 'vue', 'vue3', 'webComponents'].map(function (opt) {
|
|
140
|
+
return "".concat(opt, "Options");
|
|
141
|
+
}); // eslint-disable-next-line no-restricted-syntax
|
|
142
|
+
|
|
143
|
+
var _iterator = _createForOfIteratorHelper(possibleOptions),
|
|
144
|
+
_step;
|
|
145
|
+
|
|
146
|
+
try {
|
|
147
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
148
|
+
var opt = _step.value;
|
|
149
|
+
|
|
150
|
+
if (opt in mainConfig) {
|
|
151
|
+
return mainConfig[opt];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
} catch (err) {
|
|
155
|
+
_iterator.e(err);
|
|
156
|
+
} finally {
|
|
157
|
+
_iterator.f();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return undefined;
|
|
161
|
+
}; // Analyze a combination of information from main.js and package.json
|
|
162
|
+
// to provide telemetry over a Storybook project
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
var computeStorybookMetadata = /*#__PURE__*/function () {
|
|
166
|
+
var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(_ref3) {
|
|
167
|
+
var _mainConfig$core;
|
|
168
|
+
|
|
169
|
+
var packageJson, mainConfig, metadata, allDependencies, metaFramework, _yield$getActualPacka, version, monorepoType, packageManagerType, packageManagerVerson, _builder$options, builder, addons, addonVersions, addonNames, storybookPackages, storybookPackageVersions, language, hasStorybookEslint, storybookInfo;
|
|
170
|
+
|
|
171
|
+
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
172
|
+
while (1) {
|
|
173
|
+
switch (_context2.prev = _context2.next) {
|
|
174
|
+
case 0:
|
|
175
|
+
packageJson = _ref3.packageJson, mainConfig = _ref3.mainConfig;
|
|
176
|
+
metadata = {
|
|
177
|
+
generatedAt: new Date().getTime(),
|
|
178
|
+
builder: {
|
|
179
|
+
name: 'webpack4'
|
|
180
|
+
},
|
|
181
|
+
hasCustomBabel: false,
|
|
182
|
+
hasCustomWebpack: false,
|
|
183
|
+
hasStaticDirs: false,
|
|
184
|
+
hasStorybookEslint: false,
|
|
185
|
+
refCount: 0
|
|
186
|
+
};
|
|
187
|
+
allDependencies = Object.assign({}, packageJson === null || packageJson === void 0 ? void 0 : packageJson.dependencies, packageJson === null || packageJson === void 0 ? void 0 : packageJson.devDependencies, packageJson === null || packageJson === void 0 ? void 0 : packageJson.peerDependencies);
|
|
188
|
+
metaFramework = Object.keys(allDependencies).find(function (dep) {
|
|
189
|
+
return !!metaFrameworks[dep];
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
if (!metaFramework) {
|
|
193
|
+
_context2.next = 10;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
_context2.next = 7;
|
|
198
|
+
return (0, _packageVersions.getActualPackageVersion)(metaFramework);
|
|
199
|
+
|
|
200
|
+
case 7:
|
|
201
|
+
_yield$getActualPacka = _context2.sent;
|
|
202
|
+
version = _yield$getActualPacka.version;
|
|
203
|
+
metadata.metaFramework = {
|
|
204
|
+
name: metaFrameworks[metaFramework],
|
|
205
|
+
packageName: metaFramework,
|
|
206
|
+
version: version
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
case 10:
|
|
210
|
+
monorepoType = (0, _getMonorepoType.getMonorepoType)();
|
|
211
|
+
|
|
212
|
+
if (monorepoType) {
|
|
213
|
+
metadata.monorepo = monorepoType;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
_context2.prev = 12;
|
|
217
|
+
_context2.next = 15;
|
|
218
|
+
return (0, _detectPackageManager.detect)({
|
|
219
|
+
cwd: (0, _coreCommon.getProjectRoot)()
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
case 15:
|
|
223
|
+
packageManagerType = _context2.sent;
|
|
224
|
+
_context2.next = 18;
|
|
225
|
+
return (0, _detectPackageManager.getNpmVersion)(packageManagerType);
|
|
226
|
+
|
|
227
|
+
case 18:
|
|
228
|
+
packageManagerVerson = _context2.sent;
|
|
229
|
+
metadata.packageManager = {
|
|
230
|
+
type: packageManagerType,
|
|
231
|
+
version: packageManagerVerson
|
|
232
|
+
}; // Better be safe than sorry, some codebases/paths might end up breaking with something like "spawn pnpm ENOENT"
|
|
233
|
+
// so we just set the package manager if the detection is successful
|
|
234
|
+
// eslint-disable-next-line no-empty
|
|
235
|
+
|
|
236
|
+
_context2.next = 24;
|
|
237
|
+
break;
|
|
238
|
+
|
|
239
|
+
case 22:
|
|
240
|
+
_context2.prev = 22;
|
|
241
|
+
_context2.t0 = _context2["catch"](12);
|
|
242
|
+
|
|
243
|
+
case 24:
|
|
244
|
+
metadata.hasCustomBabel = !!mainConfig.babel;
|
|
245
|
+
metadata.hasCustomWebpack = !!mainConfig.webpackFinal;
|
|
246
|
+
metadata.hasStaticDirs = !!mainConfig.staticDirs;
|
|
247
|
+
|
|
248
|
+
if (mainConfig.typescript) {
|
|
249
|
+
metadata.typescriptOptions = mainConfig.typescript;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
if ((_mainConfig$core = mainConfig.core) !== null && _mainConfig$core !== void 0 && _mainConfig$core.builder) {
|
|
253
|
+
builder = mainConfig.core.builder;
|
|
254
|
+
metadata.builder = {
|
|
255
|
+
name: typeof builder === 'string' ? builder : builder.name,
|
|
256
|
+
options: typeof builder === 'string' ? undefined : (_builder$options = builder === null || builder === void 0 ? void 0 : builder.options) !== null && _builder$options !== void 0 ? _builder$options : undefined
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
if (mainConfig.refs) {
|
|
261
|
+
metadata.refCount = Object.keys(mainConfig.refs).length;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
if (mainConfig.features) {
|
|
265
|
+
metadata.features = mainConfig.features;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
addons = {};
|
|
269
|
+
|
|
270
|
+
if (mainConfig.addons) {
|
|
271
|
+
mainConfig.addons.forEach(function (addon) {
|
|
272
|
+
var result;
|
|
273
|
+
var options;
|
|
274
|
+
|
|
275
|
+
if (typeof addon === 'string') {
|
|
276
|
+
result = addon.replace('/register', '');
|
|
277
|
+
} else {
|
|
278
|
+
options = addon.options;
|
|
279
|
+
result = addon.name;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
addons[result] = {
|
|
283
|
+
options: options,
|
|
284
|
+
version: undefined
|
|
285
|
+
};
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
_context2.next = 35;
|
|
290
|
+
return (0, _packageVersions.getActualPackageVersions)(addons);
|
|
291
|
+
|
|
292
|
+
case 35:
|
|
293
|
+
addonVersions = _context2.sent;
|
|
294
|
+
addonVersions.forEach(function (_ref5) {
|
|
295
|
+
var name = _ref5.name,
|
|
296
|
+
version = _ref5.version;
|
|
297
|
+
addons[name].version = version;
|
|
298
|
+
});
|
|
299
|
+
addonNames = Object.keys(addons); // all Storybook deps minus the addons
|
|
300
|
+
|
|
301
|
+
storybookPackages = Object.keys(allDependencies).filter(function (dep) {
|
|
302
|
+
return dep.includes('storybook') && !addonNames.includes(dep);
|
|
303
|
+
}).reduce(function (acc, dep) {
|
|
304
|
+
return Object.assign({}, acc, _defineProperty({}, dep, {
|
|
305
|
+
version: undefined
|
|
306
|
+
}));
|
|
307
|
+
}, {});
|
|
308
|
+
_context2.next = 41;
|
|
309
|
+
return (0, _packageVersions.getActualPackageVersions)(storybookPackages);
|
|
310
|
+
|
|
311
|
+
case 41:
|
|
312
|
+
storybookPackageVersions = _context2.sent;
|
|
313
|
+
storybookPackageVersions.forEach(function (_ref6) {
|
|
314
|
+
var name = _ref6.name,
|
|
315
|
+
version = _ref6.version;
|
|
316
|
+
storybookPackages[name].version = version;
|
|
317
|
+
});
|
|
318
|
+
language = allDependencies.typescript ? 'typescript' : 'javascript';
|
|
319
|
+
hasStorybookEslint = !!allDependencies['eslint-plugin-storybook'];
|
|
320
|
+
storybookInfo = (0, _coreCommon.getStorybookInfo)(packageJson);
|
|
321
|
+
return _context2.abrupt("return", Object.assign({}, metadata, {
|
|
322
|
+
storybookVersion: storybookInfo.version,
|
|
323
|
+
language: language,
|
|
324
|
+
storybookPackages: storybookPackages,
|
|
325
|
+
framework: {
|
|
326
|
+
name: storybookInfo.framework,
|
|
327
|
+
options: getFrameworkOptions(mainConfig)
|
|
328
|
+
},
|
|
329
|
+
addons: addons,
|
|
330
|
+
hasStorybookEslint: hasStorybookEslint
|
|
331
|
+
}));
|
|
332
|
+
|
|
333
|
+
case 47:
|
|
334
|
+
case "end":
|
|
335
|
+
return _context2.stop();
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}, _callee2, null, [[12, 22]]);
|
|
339
|
+
}));
|
|
340
|
+
|
|
341
|
+
return function computeStorybookMetadata(_x2) {
|
|
342
|
+
return _ref4.apply(this, arguments);
|
|
343
|
+
};
|
|
344
|
+
}();
|
|
345
|
+
|
|
346
|
+
exports.computeStorybookMetadata = computeStorybookMetadata;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.keys.js");
|
|
4
|
+
|
|
5
|
+
require("core-js/modules/es.symbol.js");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.sendTelemetry = sendTelemetry;
|
|
11
|
+
|
|
12
|
+
require("regenerator-runtime/runtime.js");
|
|
13
|
+
|
|
14
|
+
require("core-js/modules/es.object.to-string.js");
|
|
15
|
+
|
|
16
|
+
require("core-js/modules/es.promise.js");
|
|
17
|
+
|
|
18
|
+
require("core-js/modules/es.object.assign.js");
|
|
19
|
+
|
|
20
|
+
require("core-js/modules/es.array.iterator.js");
|
|
21
|
+
|
|
22
|
+
require("core-js/modules/es.string.iterator.js");
|
|
23
|
+
|
|
24
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
25
|
+
|
|
26
|
+
require("core-js/modules/es.array.filter.js");
|
|
27
|
+
|
|
28
|
+
var _isomorphicUnfetch = _interopRequireDefault(require("isomorphic-unfetch"));
|
|
29
|
+
|
|
30
|
+
var _fetchRetry = _interopRequireDefault(require("fetch-retry"));
|
|
31
|
+
|
|
32
|
+
var _nanoid = require("nanoid");
|
|
33
|
+
|
|
34
|
+
var _anonymousId = require("./anonymous-id");
|
|
35
|
+
|
|
36
|
+
var _excluded = ["payload", "metadata"];
|
|
37
|
+
|
|
38
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
39
|
+
|
|
40
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
41
|
+
|
|
42
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
43
|
+
|
|
44
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
45
|
+
|
|
46
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
47
|
+
|
|
48
|
+
var URL = 'https://storybook.js.org/event-log';
|
|
49
|
+
var fetch = (0, _fetchRetry.default)(_isomorphicUnfetch.default);
|
|
50
|
+
var tasks = []; // getStorybookMetadata -> packagejson + Main.js
|
|
51
|
+
// event specific data: sessionId, ip, etc..
|
|
52
|
+
// send telemetry
|
|
53
|
+
|
|
54
|
+
var sessionId = (0, _nanoid.nanoid)();
|
|
55
|
+
|
|
56
|
+
function sendTelemetry(_x) {
|
|
57
|
+
return _sendTelemetry.apply(this, arguments);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function _sendTelemetry() {
|
|
61
|
+
_sendTelemetry = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(data) {
|
|
62
|
+
var options,
|
|
63
|
+
payload,
|
|
64
|
+
metadata,
|
|
65
|
+
rest,
|
|
66
|
+
context,
|
|
67
|
+
eventId,
|
|
68
|
+
body,
|
|
69
|
+
request,
|
|
70
|
+
_args = arguments;
|
|
71
|
+
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
72
|
+
while (1) {
|
|
73
|
+
switch (_context.prev = _context.next) {
|
|
74
|
+
case 0:
|
|
75
|
+
options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {
|
|
76
|
+
retryDelay: 1000,
|
|
77
|
+
immediate: false
|
|
78
|
+
};
|
|
79
|
+
// We use this id so we can de-dupe events that arrive at the index multiple times due to the
|
|
80
|
+
// use of retries. There are situations in which the request "5xx"s (or times-out), but
|
|
81
|
+
// the server actually gets the request and stores it anyway.
|
|
82
|
+
// flatten the data before we send it
|
|
83
|
+
payload = data.payload, metadata = data.metadata, rest = _objectWithoutProperties(data, _excluded);
|
|
84
|
+
context = {
|
|
85
|
+
anonymousId: (0, _anonymousId.getAnonymousProjectId)(),
|
|
86
|
+
inCI: process.env.CI === 'true'
|
|
87
|
+
};
|
|
88
|
+
eventId = (0, _nanoid.nanoid)();
|
|
89
|
+
body = Object.assign({}, rest, {
|
|
90
|
+
eventId: eventId,
|
|
91
|
+
sessionId: sessionId,
|
|
92
|
+
metadata: metadata,
|
|
93
|
+
payload: payload,
|
|
94
|
+
context: context
|
|
95
|
+
});
|
|
96
|
+
_context.prev = 5;
|
|
97
|
+
request = fetch(URL, {
|
|
98
|
+
method: 'POST',
|
|
99
|
+
body: JSON.stringify(body),
|
|
100
|
+
headers: {
|
|
101
|
+
'Content-Type': 'application/json'
|
|
102
|
+
},
|
|
103
|
+
retries: 3,
|
|
104
|
+
retryOn: [503, 504],
|
|
105
|
+
retryDelay: function retryDelay(attempt) {
|
|
106
|
+
return Math.pow(2, attempt) * options.retryDelay;
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
tasks.push(request);
|
|
110
|
+
|
|
111
|
+
if (!options.immediate) {
|
|
112
|
+
_context.next = 13;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
_context.next = 11;
|
|
117
|
+
return Promise.all(tasks);
|
|
118
|
+
|
|
119
|
+
case 11:
|
|
120
|
+
_context.next = 15;
|
|
121
|
+
break;
|
|
122
|
+
|
|
123
|
+
case 13:
|
|
124
|
+
_context.next = 15;
|
|
125
|
+
return request;
|
|
126
|
+
|
|
127
|
+
case 15:
|
|
128
|
+
_context.next = 19;
|
|
129
|
+
break;
|
|
130
|
+
|
|
131
|
+
case 17:
|
|
132
|
+
_context.prev = 17;
|
|
133
|
+
_context.t0 = _context["catch"](5);
|
|
134
|
+
|
|
135
|
+
case 19:
|
|
136
|
+
_context.prev = 19;
|
|
137
|
+
tasks = tasks.filter(function (task) {
|
|
138
|
+
return task !== request;
|
|
139
|
+
});
|
|
140
|
+
return _context.finish(19);
|
|
141
|
+
|
|
142
|
+
case 22:
|
|
143
|
+
case "end":
|
|
144
|
+
return _context.stop();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}, _callee, null, [[5, 17, 19, 22]]);
|
|
148
|
+
}));
|
|
149
|
+
return _sendTelemetry.apply(this, arguments);
|
|
150
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import "core-js/modules/es.array.concat.js";
|
|
2
|
+
import "core-js/modules/es.string.trim.js";
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { execSync } from 'child_process';
|
|
5
|
+
import { getProjectRoot } from '@storybook/core-common';
|
|
6
|
+
import { oneWayHash } from './one-way-hash';
|
|
7
|
+
var anonymousProjectId;
|
|
8
|
+
export var getAnonymousProjectId = function getAnonymousProjectId() {
|
|
9
|
+
if (anonymousProjectId) {
|
|
10
|
+
return anonymousProjectId;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
var unhashedProjectId;
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
var projectRoot = getProjectRoot();
|
|
17
|
+
var projectRootPath = path.relative(projectRoot, process.cwd());
|
|
18
|
+
var originBuffer = execSync("git config --local --get remote.origin.url", {
|
|
19
|
+
timeout: 1000,
|
|
20
|
+
stdio: "pipe"
|
|
21
|
+
}); // we use a combination of remoteUrl and working directory
|
|
22
|
+
// to separate multiple storybooks from the same project (e.g. monorepo)
|
|
23
|
+
|
|
24
|
+
unhashedProjectId = "".concat(String(originBuffer).trim()).concat(projectRootPath); // eslint-disable-next-line no-empty
|
|
25
|
+
} catch (_) {}
|
|
26
|
+
|
|
27
|
+
anonymousProjectId = oneWayHash(unhashedProjectId);
|
|
28
|
+
return anonymousProjectId;
|
|
29
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import "core-js/modules/es.array.find.js";
|
|
2
|
+
import "core-js/modules/es.object.to-string.js";
|
|
3
|
+
import "core-js/modules/es.object.keys.js";
|
|
4
|
+
import "core-js/modules/es.array.join.js";
|
|
5
|
+
import fs from 'fs-extra';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { getProjectRoot } from '@storybook/core-common';
|
|
8
|
+
export var monorepoConfigs = {
|
|
9
|
+
Nx: 'nx.json',
|
|
10
|
+
Turborepo: 'turbo.json',
|
|
11
|
+
Lerna: 'lerna.json',
|
|
12
|
+
Rush: 'rush.json',
|
|
13
|
+
Lage: 'lage.config.json'
|
|
14
|
+
};
|
|
15
|
+
export var getMonorepoType = function getMonorepoType() {
|
|
16
|
+
var projectRootPath = getProjectRoot();
|
|
17
|
+
if (!projectRootPath) return undefined;
|
|
18
|
+
var monorepoType = Object.keys(monorepoConfigs).find(function (monorepo) {
|
|
19
|
+
var configFile = path.join(projectRootPath, monorepoConfigs[monorepo]);
|
|
20
|
+
return fs.existsSync(configFile);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
if (monorepoType) {
|
|
24
|
+
return monorepoType;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var packageJson = fs.readJsonSync(path.join(projectRootPath, 'package.json'));
|
|
28
|
+
|
|
29
|
+
if (packageJson !== null && packageJson !== void 0 && packageJson.workspaces) {
|
|
30
|
+
return 'Workspaces';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return undefined;
|
|
34
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import "core-js/modules/es.object.to-string.js";
|
|
2
|
+
import "core-js/modules/es.promise.js";
|
|
3
|
+
import "regenerator-runtime/runtime.js";
|
|
4
|
+
|
|
5
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
6
|
+
|
|
7
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
8
|
+
|
|
9
|
+
import { logger } from '@storybook/client-logger';
|
|
10
|
+
import { getStorybookMetadata } from './storybook-metadata';
|
|
11
|
+
import { sendTelemetry } from './telemetry';
|
|
12
|
+
import { notify } from './notify';
|
|
13
|
+
import { sanitizeError } from './sanitize';
|
|
14
|
+
export * from './storybook-metadata';
|
|
15
|
+
export var telemetry = /*#__PURE__*/function () {
|
|
16
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(eventType) {
|
|
17
|
+
var payload,
|
|
18
|
+
options,
|
|
19
|
+
telemetryData,
|
|
20
|
+
error,
|
|
21
|
+
_process$env,
|
|
22
|
+
_args = arguments;
|
|
23
|
+
|
|
24
|
+
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
25
|
+
while (1) {
|
|
26
|
+
switch (_context.prev = _context.next) {
|
|
27
|
+
case 0:
|
|
28
|
+
payload = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
|
|
29
|
+
options = _args.length > 2 ? _args[2] : undefined;
|
|
30
|
+
_context.next = 4;
|
|
31
|
+
return notify();
|
|
32
|
+
|
|
33
|
+
case 4:
|
|
34
|
+
telemetryData = {
|
|
35
|
+
eventType: eventType,
|
|
36
|
+
payload: payload
|
|
37
|
+
};
|
|
38
|
+
_context.prev = 5;
|
|
39
|
+
_context.next = 8;
|
|
40
|
+
return getStorybookMetadata(options.configDir);
|
|
41
|
+
|
|
42
|
+
case 8:
|
|
43
|
+
telemetryData.metadata = _context.sent;
|
|
44
|
+
_context.next = 14;
|
|
45
|
+
break;
|
|
46
|
+
|
|
47
|
+
case 11:
|
|
48
|
+
_context.prev = 11;
|
|
49
|
+
_context.t0 = _context["catch"](5);
|
|
50
|
+
if (!telemetryData.payload.error) telemetryData.payload.error = _context.t0;
|
|
51
|
+
|
|
52
|
+
case 14:
|
|
53
|
+
_context.prev = 14;
|
|
54
|
+
error = telemetryData.payload.error;
|
|
55
|
+
|
|
56
|
+
if (error) {
|
|
57
|
+
// make sure to anonymise possible paths from error messages
|
|
58
|
+
telemetryData.payload.error = sanitizeError(error);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (!(!telemetryData.payload.error || options.enableCrashReports)) {
|
|
62
|
+
_context.next = 25;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (!((_process$env = process.env) !== null && _process$env !== void 0 && _process$env.STORYBOOK_DEBUG_TELEMETRY)) {
|
|
67
|
+
_context.next = 23;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
logger.info('\n[telemetry]');
|
|
72
|
+
logger.info(JSON.stringify(telemetryData, null, 2));
|
|
73
|
+
_context.next = 25;
|
|
74
|
+
break;
|
|
75
|
+
|
|
76
|
+
case 23:
|
|
77
|
+
_context.next = 25;
|
|
78
|
+
return sendTelemetry(telemetryData, options);
|
|
79
|
+
|
|
80
|
+
case 25:
|
|
81
|
+
return _context.finish(14);
|
|
82
|
+
|
|
83
|
+
case 26:
|
|
84
|
+
case "end":
|
|
85
|
+
return _context.stop();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}, _callee, null, [[5, 11, 14, 26]]);
|
|
89
|
+
}));
|
|
90
|
+
|
|
91
|
+
return function telemetry(_x) {
|
|
92
|
+
return _ref.apply(this, arguments);
|
|
93
|
+
};
|
|
94
|
+
}();
|