@shuvi/service 1.0.7 → 1.0.8

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,35 @@
1
+ declare type EventBuildOptimized = {
2
+ durationInSeconds: number;
3
+ totalPageCount: number;
4
+ hasTestPages: boolean;
5
+ hasStatic404: boolean;
6
+ middlewareCount: number;
7
+ totalLoaderCount: number;
8
+ useTypeScript: boolean;
9
+ };
10
+ export declare function eventBuildOptimize(routePaths: string[], event: Omit<EventBuildOptimized, 'totalPageCount' | 'hasTestPages'>): {
11
+ eventName: string;
12
+ payload: EventBuildOptimized;
13
+ };
14
+ declare type EventPackageDetected = {
15
+ eventName: string;
16
+ payload: {
17
+ packageName: string;
18
+ packageVersion: string;
19
+ };
20
+ };
21
+ export declare function eventPackageDetected(dir: string): Promise<Array<EventPackageDetected>>;
22
+ export declare const EVENT_BUILD_FEATURE_USAGE = "SHUVI_BUILD_FEATURE_USAGE";
23
+ export declare type Feature = 'shuvi/lightningCss' | 'shuvi/webpack-dll' | 'swcPlugins' | 'swcModularizeImports' | 'swcRemoveConsole' | 'swcReactRemoveProperties' | 'swcJsxImportSource' | 'swcStyledComponents' | 'swcEmotion' | 'swcExperimentalDecorators' | 'swcEmitDecoratorMetadata';
24
+ export declare type EventBuildFeatureUsage = {
25
+ featureName: Feature;
26
+ invocationCount: number;
27
+ };
28
+ export declare function eventBuildFeatureUsage({ compiler, experimental }: {
29
+ compiler: Record<string, any> | undefined;
30
+ experimental: Record<string, any> | undefined;
31
+ }): Array<{
32
+ eventName: string;
33
+ payload: EventBuildFeatureUsage;
34
+ }>;
35
+ export {};
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.eventBuildFeatureUsage = exports.EVENT_BUILD_FEATURE_USAGE = exports.eventPackageDetected = exports.eventBuildOptimize = void 0;
16
+ const find_up_1 = __importDefault(require("find-up"));
17
+ const REGEXP_DIRECTORY_TESTS = /[\\/]__(tests|mocks)__[\\/]/i;
18
+ const REGEXP_FILE_TEST = /\.(?:spec|test)\.[^.]+$/i;
19
+ const EVENT_BUILD_OPTIMIZED = 'SHUVI_BUILD_OPTIMIZED';
20
+ function eventBuildOptimize(routePaths, event) {
21
+ return {
22
+ eventName: EVENT_BUILD_OPTIMIZED,
23
+ payload: Object.assign(Object.assign({}, event), { totalPageCount: routePaths.filter(path => /page\..*/i.test(path)).length, hasTestPages: routePaths.some(path => REGEXP_DIRECTORY_TESTS.test(path) || REGEXP_FILE_TEST.test(path)) })
24
+ };
25
+ }
26
+ exports.eventBuildOptimize = eventBuildOptimize;
27
+ const EVENT_PACKAGE_DETECTED = 'SHUVI_PACKAGE_DETECTED';
28
+ function eventPackageDetected(dir) {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ try {
31
+ const packageJsonPath = yield (0, find_up_1.default)('package.json', { cwd: dir });
32
+ if (!packageJsonPath) {
33
+ return [];
34
+ }
35
+ const { dependencies = {}, devDependencies = {} } = require(packageJsonPath);
36
+ const deps = Object.assign(Object.assign({}, devDependencies), dependencies);
37
+ return Object.keys(deps).reduce((events, plugin) => {
38
+ const version = deps[plugin];
39
+ // Don't add deps without a version set
40
+ if (!version) {
41
+ return events;
42
+ }
43
+ events.push({
44
+ eventName: EVENT_PACKAGE_DETECTED,
45
+ payload: {
46
+ packageName: plugin,
47
+ packageVersion: version
48
+ }
49
+ });
50
+ return events;
51
+ }, []);
52
+ }
53
+ catch (_) {
54
+ return [];
55
+ }
56
+ });
57
+ }
58
+ exports.eventPackageDetected = eventPackageDetected;
59
+ exports.EVENT_BUILD_FEATURE_USAGE = 'SHUVI_BUILD_FEATURE_USAGE';
60
+ const BUILD_FEATURES = [
61
+ 'shuvi/lightningCss',
62
+ 'shuvi/webpack-dll',
63
+ 'swcPlugins',
64
+ 'swcModularizeImports',
65
+ 'swcRemoveConsole',
66
+ 'swcReactRemoveProperties',
67
+ 'swcJsxImportSource',
68
+ 'swcStyledComponents',
69
+ 'swcEmotion',
70
+ 'swcExperimentalDecorators',
71
+ 'swcEmitDecoratorMetadata'
72
+ ];
73
+ function eventBuildFeatureUsage({ compiler, experimental }) {
74
+ var _a;
75
+ const buildFeaturesMap = new Map([
76
+ ['shuvi/lightningCss', !!(experimental === null || experimental === void 0 ? void 0 : experimental.lightningCss)],
77
+ ['shuvi/webpack-dll', !!(experimental === null || experimental === void 0 ? void 0 : experimental.preBundle)],
78
+ ['swcPlugins', !!((_a = experimental === null || experimental === void 0 ? void 0 : experimental.swcPlugins) === null || _a === void 0 ? void 0 : _a.length)],
79
+ ['swcModularizeImports', !!(experimental === null || experimental === void 0 ? void 0 : experimental.modularizeImports)],
80
+ ['swcRemoveConsole', !!(compiler === null || compiler === void 0 ? void 0 : compiler.removeConsole)],
81
+ ['swcReactRemoveProperties', !!(compiler === null || compiler === void 0 ? void 0 : compiler.reactRemoveProperties)],
82
+ ['swcJsxImportSource', !!(compiler === null || compiler === void 0 ? void 0 : compiler.jsxImportSource)],
83
+ ['swcStyledComponents', !!(compiler === null || compiler === void 0 ? void 0 : compiler.styledComponents)],
84
+ ['swcEmotion', !!(compiler === null || compiler === void 0 ? void 0 : compiler.emotion)],
85
+ ['swcExperimentalDecorators', !!(compiler === null || compiler === void 0 ? void 0 : compiler.experimentalDecorators)],
86
+ ['swcEmitDecoratorMetadata', !!(compiler === null || compiler === void 0 ? void 0 : compiler.emitDecoratorMetadata)]
87
+ ].filter(Boolean));
88
+ return BUILD_FEATURES.map(featureName => {
89
+ return {
90
+ eventName: exports.EVENT_BUILD_FEATURE_USAGE,
91
+ payload: {
92
+ featureName,
93
+ invocationCount: buildFeaturesMap.get(featureName) ? 1 : 0
94
+ }
95
+ };
96
+ });
97
+ }
98
+ exports.eventBuildFeatureUsage = eventBuildFeatureUsage;
@@ -0,0 +1 @@
1
+ export * from './build';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./build"), exports);
@@ -39,10 +39,11 @@ exports.analysis = void 0;
39
39
  const path = __importStar(require("path"));
40
40
  const fs = __importStar(require("fs"));
41
41
  const logger_1 = __importDefault(require("@shuvi/utils/lib/logger"));
42
- const events_1 = require("@shuvi/telemetry/lib/events");
42
+ const events_1 = require("./events");
43
43
  const recursiveReaddir_1 = require("@shuvi/utils/lib/recursiveReaddir");
44
44
  const typescript_1 = require("../bundler/typescript");
45
45
  const analysis = ({ context, telemetry }) => __awaiter(void 0, void 0, void 0, function* () {
46
+ var _a, _b;
46
47
  if (!telemetry || !context) {
47
48
  return;
48
49
  }
@@ -67,6 +68,12 @@ const analysis = ({ context, telemetry }) => __awaiter(void 0, void 0, void 0, f
67
68
  .filter(loader => loader.startsWith('import')).length;
68
69
  const { useTypeScript } = (0, typescript_1.getJavaScriptInfo)();
69
70
  const analysisEnd = process.hrtime(analysisBegin);
71
+ const packageDetectedEvents = yield (0, events_1.eventPackageDetected)(context.paths.rootDir);
72
+ telemetry.record(packageDetectedEvents);
73
+ telemetry.record((0, events_1.eventBuildFeatureUsage)({
74
+ compiler: (_a = context.config) === null || _a === void 0 ? void 0 : _a.compiler,
75
+ experimental: (_b = context.config) === null || _b === void 0 ? void 0 : _b.experimental
76
+ }));
70
77
  telemetry.record((0, events_1.eventBuildOptimize)(routePaths, {
71
78
  durationInSeconds: analysisEnd[0],
72
79
  hasStatic404,
package/lib/core/api.d.ts CHANGED
@@ -22,6 +22,7 @@ interface ServerConfigs {
22
22
  }
23
23
  export interface Telemetry {
24
24
  record(events: TelemetryEvent | TelemetryEvent[]): Promise<RecordObject>;
25
+ flush(): Promise<void>;
25
26
  }
26
27
  declare class Api {
27
28
  private _inited;
package/lib/core/api.js CHANGED
@@ -102,6 +102,12 @@ class Api {
102
102
  });
103
103
  }
104
104
  return this._telemetryImpl.record(events);
105
+ },
106
+ flush: () => {
107
+ if (!this._telemetryImpl) {
108
+ return Promise.resolve();
109
+ }
110
+ return this._telemetryImpl.flush();
105
111
  }
106
112
  };
107
113
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shuvi/service",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/shuvijs/shuvi.git",
@@ -29,14 +29,14 @@
29
29
  "@babel/generator": "7.14.5",
30
30
  "@babel/parser": "7.14.7",
31
31
  "@babel/traverse": "7.14.7",
32
- "@shuvi/hook": "1.0.7",
33
- "@shuvi/router": "1.0.7",
34
- "@shuvi/runtime": "1.0.7",
35
- "@shuvi/shared": "1.0.7",
36
- "@shuvi/toolpack": "1.0.7",
37
- "@shuvi/utils": "1.0.7",
38
- "@shuvi/error-overlay": "1.0.7",
39
- "@shuvi/telemetry": "1.0.7",
32
+ "@shuvi/hook": "1.0.8",
33
+ "@shuvi/router": "1.0.8",
34
+ "@shuvi/runtime": "1.0.8",
35
+ "@shuvi/shared": "1.0.8",
36
+ "@shuvi/toolpack": "1.0.8",
37
+ "@shuvi/utils": "1.0.8",
38
+ "@shuvi/error-overlay": "1.0.8",
39
+ "@shuvi/telemetry": "1.0.8",
40
40
  "commander": "5.1.0",
41
41
  "comment-json": "4.2.2",
42
42
  "cross-spawn": "7.0.3",
@@ -48,7 +48,8 @@
48
48
  "send": "0.17.1",
49
49
  "ws": "8.2.3",
50
50
  "dotenv": "16.0.3",
51
- "dotenv-expand": "9.0.0"
51
+ "dotenv-expand": "9.0.0",
52
+ "find-up": "4.1.0"
52
53
  },
53
54
  "devDependencies": {
54
55
  "@babel/types": "7.12.11",