Skip to content

Commit 0731a48

Browse files
committed
Package chores, fix deps in hooks
1 parent d1b120c commit 0731a48

15 files changed

+1694
-555
lines changed

.eslintrc.cjs

+116
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
// eslint-disable-next-line no-undef
2+
module.exports = {
3+
root: true,
4+
env: {
5+
browser: true,
6+
es2021: true,
7+
},
8+
ignorePatterns: ["node_modules", "dist", "coverage"],
9+
extends: [
10+
"eslint:recommended",
11+
"plugin:import/recommended",
12+
"plugin:import/typescript",
13+
"plugin:react/recommended",
14+
"plugin:react/jsx-runtime",
15+
"plugin:react-hooks/recommended",
16+
"plugin:@typescript-eslint/recommended",
17+
"plugin:@typescript-eslint/eslint-recommended",
18+
"plugin:@typescript-eslint/recommended-requiring-type-checking",
19+
"plugin:prettier/recommended",
20+
"plugin:jsx-a11y/strict",
21+
],
22+
parser: "@typescript-eslint/parser",
23+
parserOptions: {
24+
extraFileExtensions: [".json"],
25+
ecmaVersion: 12,
26+
sourceType: "module",
27+
tsconfigRootDir: __dirname, // eslint-disable-line no-undef
28+
project: "./tsconfig.json",
29+
ecmaFeatures: {
30+
jsx: true,
31+
},
32+
},
33+
overrides: [
34+
{
35+
files: ["**/*.jsx", "**/*.js", "**/*.ts", "**/*.tsx"],
36+
},
37+
],
38+
plugins: [
39+
"simple-import-sort",
40+
"import",
41+
"json-format",
42+
"prettier",
43+
"@typescript-eslint",
44+
"unused-imports",
45+
],
46+
rules: {
47+
radix: 0,
48+
"no-new": 0,
49+
"no-void": 0,
50+
"no-shadow": 0,
51+
"no-bitwise": 0,
52+
"no-unused-vars": 0,
53+
"react/prop-types": 0,
54+
"prettier/prettier": ["error"],
55+
"linebreak-style": ["error", "unix"],
56+
"no-prototype-builtins": 0,
57+
"prefer-rest-params": 0,
58+
"no-mixed-spaces-and-tabs": 0,
59+
"react/jsx-uses-vars": 2,
60+
"import/no-cycle": "error",
61+
"react/jsx-uses-react": "error",
62+
"unused-imports/no-unused-imports": "error",
63+
"@typescript-eslint/unbound-method": 0,
64+
"@typescript-eslint/no-unsafe-argument": 0,
65+
"@typescript-eslint/no-unsafe-return": 0,
66+
"@typescript-eslint/no-non-null-assertion": 0,
67+
"@typescript-eslint/no-empty-function": 0,
68+
"@typescript-eslint/ban-ts-comment": 0,
69+
"@typescript-eslint/no-var-requires": 0,
70+
"eslint-comments/no-unlimited-disable": 0,
71+
"@typescript-eslint/explicit-module-boundary-types": 0,
72+
"@typescript-eslint/no-explicit-any": 0,
73+
"@typescript-eslint/no-unsafe-call": 0,
74+
"simple-import-sort/imports": [
75+
"error",
76+
{
77+
groups: [["^node:", "^[a-z]", "^@?\\w", "^", "^\\.", "^\\u0000"]],
78+
},
79+
],
80+
"@typescript-eslint/no-unused-vars": [
81+
"error",
82+
{
83+
args: "all",
84+
varsIgnorePattern: "^_",
85+
destructuredArrayIgnorePattern: "^_",
86+
argsIgnorePattern: "^_",
87+
},
88+
],
89+
"@typescript-eslint/no-shadow": 0,
90+
"@typescript-eslint/no-unnecessary-type-constraint": 0,
91+
"@typescript-eslint/no-unsafe-assignment": 0,
92+
"@typescript-eslint/restrict-plus-operands": 2,
93+
"@typescript-eslint/consistent-type-imports": "error",
94+
"@typescript-eslint/no-unsafe-member-access": 0,
95+
"@typescript-eslint/require-await": "error",
96+
"@typescript-eslint/no-misused-promises": "error",
97+
"@typescript-eslint/no-floating-promises": [
98+
"error",
99+
{ ignoreVoid: true, ignoreIIFE: true },
100+
],
101+
},
102+
settings: {
103+
"import/parsers": {
104+
"@typescript-eslint/parser": [".ts", ".json"],
105+
},
106+
"import/resolver": {
107+
typescript: {
108+
alwaysTryTypes: true,
109+
project: "./tsconfig.json",
110+
},
111+
},
112+
react: {
113+
version: "detect",
114+
},
115+
},
116+
};

.eslintrc.js

-71
This file was deleted.

.prettierrc.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module.exports = {
2+
tabWidth: 2,
3+
printWidth: 80,
4+
arrowParens: 'avoid',
5+
bracketSameLine: true,
6+
bracketSpacing: true,
7+
singleQuote: false,
8+
trailingComma: 'all',
9+
};

ci/commands/Lint.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { Linter } from "../linting/Linter";
2+
3+
(async () => {
4+
await Linter.run();
5+
})().catch(console.log);

ci/commands/Test.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { Jest } from "../testing/Jest";
2+
3+
(async () => {
4+
await Jest.run();
5+
})().catch(console.log);

ci/linting/Linter.ts

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { ChildProcess } from "@figliolia/child-process";
2+
3+
export class Linter extends ChildProcess {
4+
public static async run() {
5+
await this.typeCheck();
6+
await this.runEslint();
7+
}
8+
9+
private static typeCheck() {
10+
return this.wrapCommand("yarn tsc --noemit");
11+
}
12+
13+
private static runEslint() {
14+
return this.wrapCommand("yarn eslint ./ --fix");
15+
}
16+
}

ci/testing/Jest.ts

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import path from "path";
2+
import { ChildProcess } from "@figliolia/child-process";
3+
4+
export class Jest {
5+
public static run() {
6+
return this.runTests().handler;
7+
}
8+
9+
private static runTests() {
10+
const args = process.argv.slice(2);
11+
return new ChildProcess("jest" + args.join(" "), {
12+
stdio: "inherit",
13+
cwd: path.resolve(),
14+
});
15+
}
16+
}

package.json

+27-20
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@figliolia/react-metrics",
3-
"version": "1.0.5",
3+
"version": "1.0.6",
44
"description": "React bindings for @figliolia/metrics",
55
"exports": {
66
".": {
@@ -17,9 +17,9 @@
1717
"src/*"
1818
],
1919
"scripts": {
20-
"test": "jest",
21-
"build": "npx ts-packager -e src",
22-
"lint": "tsc --noemit && eslint ./src --fix"
20+
"build": "ts-packager -e src",
21+
"lint": "tsx ci/commands/Lint.ts",
22+
"test": "tsx ci/commands/Test.ts"
2323
},
2424
"homepage": "https://github.com/alexfigliolia/react-metrics#readme",
2525
"repository": {
@@ -45,34 +45,41 @@
4545
"author": "Alex Figliolia",
4646
"license": "MIT",
4747
"dependencies": {
48-
"@figliolia/metrics": "^1.0.5"
48+
"@figliolia/metrics": "^1.1.1",
49+
"react": "^18.3.1"
50+
},
51+
"peerDependencies": {
52+
"@figliolia/metrics": "^1.1.1",
53+
"react": "^18.3.1"
4954
},
5055
"devDependencies": {
51-
"@figliolia/ts-packager": "^1.0.3",
52-
"@types/node": "^16.7.13",
53-
"@types/react": "^18.2.9",
56+
"@figliolia/child-process": "^1.0.1",
57+
"@figliolia/ts-packager": "^1.0.9",
58+
"@types/node": "^20.11.19",
59+
"@types/react": "^18.3.3",
5460
"@typescript-eslint/eslint-plugin": "^5.59.1",
5561
"@typescript-eslint/parser": "^5.59.1",
62+
"copyfiles": "^2.4.1",
5663
"eslint": "^8.39.0",
5764
"eslint-config-airbnb": "^19.0.4",
5865
"eslint-config-airbnb-typescript": "^17.0.0",
5966
"eslint-config-prettier": "^8.8.0",
60-
"eslint-import-resolver-typescript": "^3.5.5",
67+
"eslint-import-resolver-typescript": "^3.6.1",
6168
"eslint-plugin-import": "^2.27.5",
62-
"eslint-plugin-prettier": "^4.2.1",
63-
"eslint-plugin-react": "^7.32.2",
69+
"eslint-plugin-json-format": "^2.0.1",
70+
"eslint-plugin-jsx-a11y": "^6.8.0",
71+
"eslint-plugin-prettier": "^5.1.3",
72+
"eslint-plugin-react": "^7.33.2",
6473
"eslint-plugin-react-hooks": "^4.6.0",
6574
"eslint-plugin-simple-import-sort": "^10.0.0",
66-
"eslint-plugin-unused-imports": "^2.0.0",
67-
"prettier": "^2.8.8",
68-
"ts-node": "^10.9.1",
69-
"tsc-alias": "^1.8.6",
70-
"typescript": "^4.4.2"
71-
},
72-
"peerDependencies": {
73-
"react": "^18.2.0"
75+
"eslint-plugin-unused-imports": "2",
76+
"prettier": "^3.2.4",
77+
"tsc-alias": "^1.8.8",
78+
"tsconfig-paths": "^4.2.0",
79+
"tsx": "^4.7.1",
80+
"typescript": "^5.4.5"
7481
},
7582
"publishConfig": {
7683
"access": "public"
7784
}
78-
}
85+
}

src/MetricSubscription.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import { useMetricSubscription } from "./useMetricSubscription";
3838
* ```
3939
*/
4040
export const MetricSubscription = <T extends Metric<any, any>>(
41-
configuration: IMetricSubscription<T>
41+
configuration: IMetricSubscription<T>,
4242
) => {
4343
useMetricSubscription(configuration);
4444
return null;

src/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { Metric } from "@figliolia/metrics";
22

33
export interface IMetricSubscription<
4-
T extends Metric<any, any> = Metric<any, any>
4+
T extends Metric<any, any> = Metric<any, any>,
55
> {
66
metric: T;
77
event: keyof T["events"];

src/useMetricSubscription.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import type { Metric } from "@figliolia/metrics";
21
import { useEffect } from "react";
3-
import type { IMetricSubscription } from "types";
2+
import type { Metric } from "@figliolia/metrics";
3+
import type { IMetricSubscription } from "./types";
44

55
/**
66
* Use Metric Subscription
@@ -44,5 +44,5 @@ export const useMetricSubscription = <T extends Metric<any, any>>({
4444
return () => {
4545
metric.off(event, ID);
4646
};
47-
}, []);
47+
}, [metric, callback, event]);
4848
};

src/useStartMetric.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import type { Metric } from "@figliolia/metrics";
21
import { useEffect } from "react";
2+
import type { Metric } from "@figliolia/metrics";
33

44
/**
55
* Use Start Metric
@@ -41,5 +41,5 @@ import { useEffect } from "react";
4141
export const useStartMetric = <T extends Metric<any, any>>(metric: T) => {
4242
useEffect(() => {
4343
metric.start();
44-
}, []);
44+
}, [metric]);
4545
};

src/useStopMetric.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import type { Metric } from "@figliolia/metrics";
21
import { useEffect } from "react";
2+
import type { Metric } from "@figliolia/metrics";
33

44
/**
55
* Use Metric Stop
@@ -30,5 +30,5 @@ import { useEffect } from "react";
3030
export const useStopMetric = <T extends Metric<any, any>>(metric: T) => {
3131
useEffect(() => {
3232
metric.stop();
33-
}, []);
33+
}, [metric]);
3434
};

0 commit comments

Comments
 (0)