@api3/commons 0.9.0 → 0.10.0

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.
Files changed (58) hide show
  1. package/README.md +10 -60
  2. package/dist/blockchain-utilities/derivation.d.ts.map +1 -1
  3. package/dist/blockchain-utilities/derivation.js +3 -3
  4. package/dist/blockchain-utilities/derivation.js.map +1 -1
  5. package/dist/blockchain-utilities/schema.js.map +1 -1
  6. package/dist/config-hash/index.js.map +1 -1
  7. package/dist/config-parsing/index.d.ts.map +1 -1
  8. package/dist/config-parsing/index.js +2 -2
  9. package/dist/config-parsing/index.js.map +1 -1
  10. package/dist/http/index.js +2 -2
  11. package/dist/http/index.js.map +1 -1
  12. package/dist/logger/async-storage.d.ts +0 -1
  13. package/dist/logger/async-storage.d.ts.map +1 -1
  14. package/dist/logger/index.d.ts.map +1 -1
  15. package/dist/logger/index.js +9 -1
  16. package/dist/logger/index.js.map +1 -1
  17. package/dist/node-index.d.ts.map +1 -1
  18. package/dist/node-index.js +0 -1
  19. package/dist/node-index.js.map +1 -1
  20. package/dist/processing/processing.d.ts.map +1 -1
  21. package/dist/processing/processing.js.map +1 -1
  22. package/dist/processing/unsafe-evaluate.d.ts.map +1 -1
  23. package/dist/processing/unsafe-evaluate.js +1 -3
  24. package/dist/processing/unsafe-evaluate.js.map +1 -1
  25. package/dist/processing/vm-timers.d.ts +0 -5
  26. package/dist/processing/vm-timers.d.ts.map +1 -1
  27. package/dist/processing/vm-timers.js.map +1 -1
  28. package/package.json +19 -36
  29. package/src/logger/index.test.ts +93 -83
  30. package/src/logger/index.ts +9 -1
  31. package/src/node-index.ts +0 -1
  32. package/src/processing/unsafe-evaluate.ts +0 -1
  33. package/dist/eslint/internal.d.ts +0 -15
  34. package/dist/eslint/internal.d.ts.map +0 -1
  35. package/dist/eslint/internal.js +0 -24
  36. package/dist/eslint/internal.js.map +0 -1
  37. package/dist/eslint/jest.d.ts +0 -29
  38. package/dist/eslint/jest.d.ts.map +0 -1
  39. package/dist/eslint/jest.js +0 -38
  40. package/dist/eslint/jest.js.map +0 -1
  41. package/dist/eslint/next-js.d.ts +0 -27
  42. package/dist/eslint/next-js.d.ts.map +0 -1
  43. package/dist/eslint/next-js.js +0 -33
  44. package/dist/eslint/next-js.js.map +0 -1
  45. package/dist/eslint/react.d.ts +0 -90
  46. package/dist/eslint/react.d.ts.map +0 -1
  47. package/dist/eslint/react.js +0 -85
  48. package/dist/eslint/react.js.map +0 -1
  49. package/dist/eslint/universal.d.ts +0 -173
  50. package/dist/eslint/universal.d.ts.map +0 -1
  51. package/dist/eslint/universal.js +0 -203
  52. package/dist/eslint/universal.js.map +0 -1
  53. package/src/eslint/README.md +0 -87
  54. package/src/eslint/internal.js +0 -24
  55. package/src/eslint/jest.js +0 -36
  56. package/src/eslint/next-js.js +0 -31
  57. package/src/eslint/react.js +0 -88
  58. package/src/eslint/universal.js +0 -209
@@ -16,114 +16,124 @@ const createTestLogger = (
16
16
  return { baseLogger, logger };
17
17
  };
18
18
 
19
- describe('log context', () => {
20
- it('works with sync functions', () => {
21
- const { baseLogger, logger } = createTestLogger();
22
-
23
- logger.runWithContext({ requestId: 'parent' }, () => {
24
- logger.debug('parent start');
25
- logger.runWithContext({ requestId: 'child' }, () => {
26
- logger.debug('child');
27
- });
19
+ test('works with sync functions', () => {
20
+ const { baseLogger, logger } = createTestLogger();
28
21
 
29
- logger.debug('parent end');
22
+ logger.runWithContext({ requestId: 'parent' }, () => {
23
+ logger.debug('parent start');
24
+ logger.runWithContext({ requestId: 'child' }, () => {
25
+ logger.debug('child');
30
26
  });
31
27
 
32
- expect(baseLogger.debug).toHaveBeenCalledWith('parent start', { ctx: { requestId: 'parent' } });
33
- expect(baseLogger.debug).toHaveBeenCalledWith('child', { ctx: { requestId: 'child' } });
34
- expect(baseLogger.debug).toHaveBeenCalledWith('parent end', { ctx: { requestId: 'parent' } });
28
+ logger.debug('parent end');
35
29
  });
36
30
 
37
- it('works with async functions', async () => {
38
- const { baseLogger, logger } = createTestLogger();
31
+ expect(baseLogger.debug).toHaveBeenCalledWith('parent start', { ctx: { requestId: 'parent' } });
32
+ expect(baseLogger.debug).toHaveBeenCalledWith('child', { ctx: { requestId: 'child' } });
33
+ expect(baseLogger.debug).toHaveBeenCalledWith('parent end', { ctx: { requestId: 'parent' } });
34
+ });
39
35
 
40
- await logger.runWithContext({ requestId: 'parent' }, async () => {
41
- logger.debug('parent start');
42
- await logger.runWithContext({ requestId: 'child' }, async () => {
43
- await new Promise((resolve) => setTimeout(resolve, 50));
44
- logger.debug('child');
45
- });
36
+ test('works with async functions', async () => {
37
+ const { baseLogger, logger } = createTestLogger();
46
38
 
47
- logger.debug('parent end');
39
+ await logger.runWithContext({ requestId: 'parent' }, async () => {
40
+ logger.debug('parent start');
41
+ await logger.runWithContext({ requestId: 'child' }, async () => {
42
+ await new Promise((resolve) => setTimeout(resolve, 50));
43
+ logger.debug('child');
48
44
  });
49
45
 
50
- expect(baseLogger.debug).toHaveBeenCalledTimes(3);
51
- expect(baseLogger.debug).toHaveBeenCalledWith('parent start', { ctx: { requestId: 'parent' } });
52
- expect(baseLogger.debug).toHaveBeenCalledWith('child', { ctx: { requestId: 'child' } });
53
- expect(baseLogger.debug).toHaveBeenCalledWith('parent end', { ctx: { requestId: 'parent' } });
46
+ logger.debug('parent end');
54
47
  });
55
48
 
56
- it('works with deeply nested functions', async () => {
57
- const { baseLogger, logger } = createTestLogger();
49
+ expect(baseLogger.debug).toHaveBeenCalledTimes(3);
50
+ expect(baseLogger.debug).toHaveBeenCalledWith('parent start', { ctx: { requestId: 'parent' } });
51
+ expect(baseLogger.debug).toHaveBeenCalledWith('child', { ctx: { requestId: 'child' } });
52
+ expect(baseLogger.debug).toHaveBeenCalledWith('parent end', { ctx: { requestId: 'parent' } });
53
+ });
58
54
 
59
- await logger.runWithContext({ parent: true }, async () => {
60
- logger.debug('parent start');
55
+ test('works with deeply nested functions', async () => {
56
+ const { baseLogger, logger } = createTestLogger();
61
57
 
62
- await logger.runWithContext({ A: true }, async () => {
63
- logger.debug('A start');
58
+ await logger.runWithContext({ parent: true }, async () => {
59
+ logger.debug('parent start');
64
60
 
65
- await logger.runWithContext({ B: true }, async () => {
66
- setTimeout(() => logger.debug('C'), 25);
67
- setTimeout(() => logger.debug('D'), 50);
68
- setTimeout(() => logger.debug('E'), 75);
61
+ await logger.runWithContext({ A: true }, async () => {
62
+ logger.debug('A start');
69
63
 
70
- await new Promise((resolve) => setTimeout(resolve, 100));
71
- logger.debug('B end');
72
- });
64
+ await logger.runWithContext({ B: true }, async () => {
65
+ setTimeout(() => logger.debug('C'), 25);
66
+ setTimeout(() => logger.debug('D'), 50);
67
+ setTimeout(() => logger.debug('E'), 75);
73
68
 
74
- logger.debug('A end');
69
+ await new Promise((resolve) => setTimeout(resolve, 100));
70
+ logger.debug('B end');
75
71
  });
76
72
 
77
- logger.debug('parent end');
73
+ logger.debug('A end');
78
74
  });
79
75
 
80
- expect(baseLogger.debug).toHaveBeenCalledTimes(8);
81
- expect(baseLogger.debug).toHaveBeenCalledWith('parent start', { ctx: { parent: true } });
82
- expect(baseLogger.debug).toHaveBeenCalledWith('A start', { ctx: { parent: true, A: true } });
83
- expect(baseLogger.debug).toHaveBeenCalledWith('C', { ctx: { parent: true, A: true, B: true } });
84
- expect(baseLogger.debug).toHaveBeenCalledWith('D', { ctx: { parent: true, A: true, B: true } });
85
- expect(baseLogger.debug).toHaveBeenCalledWith('E', { ctx: { parent: true, A: true, B: true } });
86
- expect(baseLogger.debug).toHaveBeenCalledWith('B end', { ctx: { parent: true, A: true, B: true } });
87
- expect(baseLogger.debug).toHaveBeenCalledWith('A end', { ctx: { parent: true, A: true } });
88
- expect(baseLogger.debug).toHaveBeenCalledWith('parent end', { ctx: { parent: true } });
76
+ logger.debug('parent end');
89
77
  });
90
78
 
91
- it('throws if the sync callback function throws', () => {
92
- const { logger } = createTestLogger();
79
+ expect(baseLogger.debug).toHaveBeenCalledTimes(8);
80
+ expect(baseLogger.debug).toHaveBeenCalledWith('parent start', { ctx: { parent: true } });
81
+ expect(baseLogger.debug).toHaveBeenCalledWith('A start', { ctx: { parent: true, A: true } });
82
+ expect(baseLogger.debug).toHaveBeenCalledWith('C', { ctx: { parent: true, A: true, B: true } });
83
+ expect(baseLogger.debug).toHaveBeenCalledWith('D', { ctx: { parent: true, A: true, B: true } });
84
+ expect(baseLogger.debug).toHaveBeenCalledWith('E', { ctx: { parent: true, A: true, B: true } });
85
+ expect(baseLogger.debug).toHaveBeenCalledWith('B end', { ctx: { parent: true, A: true, B: true } });
86
+ expect(baseLogger.debug).toHaveBeenCalledWith('A end', { ctx: { parent: true, A: true } });
87
+ expect(baseLogger.debug).toHaveBeenCalledWith('parent end', { ctx: { parent: true } });
88
+ });
93
89
 
94
- expect(() =>
95
- logger.runWithContext({}, () => {
96
- throw new Error('some-error');
97
- })
98
- ).toThrow('some-error');
99
- });
90
+ test('throws if the sync callback function throws', () => {
91
+ const { logger } = createTestLogger();
100
92
 
101
- it('returns rejected promise if the async callback function rejects', async () => {
102
- const { logger } = createTestLogger();
93
+ expect(() =>
94
+ logger.runWithContext({}, () => {
95
+ throw new Error('some-error');
96
+ })
97
+ ).toThrow('some-error');
98
+ });
103
99
 
104
- await expect(async () =>
105
- // eslint-disable-next-line @typescript-eslint/require-await
106
- logger.runWithContext({}, async () => {
107
- throw new Error('some-error');
108
- })
109
- ).rejects.toThrow('some-error');
110
- });
100
+ test('returns rejected promise if the async callback function rejects', async () => {
101
+ const { logger } = createTestLogger();
111
102
 
112
- it('can log using all variants of logger.error', () => {
113
- const { baseLogger, logger } = createTestLogger();
114
-
115
- logger.error('only message');
116
- logger.error('message and context', { requestId: 'parent' });
117
- logger.error('message and error', new Error('some-error'));
118
- logger.error('message, error and context', new Error('some-error'), { requestId: 'parent' });
119
-
120
- expect(baseLogger.error).toHaveBeenNthCalledWith(1, 'only message', undefined);
121
- expect(baseLogger.error).toHaveBeenNthCalledWith(2, 'message and context', { ctx: { requestId: 'parent' } });
122
- expect(baseLogger.error).toHaveBeenNthCalledWith(3, 'message and error', new Error('some-error'), undefined);
123
- expect(baseLogger.error).toHaveBeenNthCalledWith(4, 'message, error and context', new Error('some-error'), {
124
- ctx: {
125
- requestId: 'parent',
126
- },
127
- });
103
+ await expect(async () =>
104
+ logger.runWithContext({}, async () => {
105
+ throw new Error('some-error');
106
+ })
107
+ ).rejects.toThrow('some-error');
108
+ });
109
+
110
+ test('can log using all variants of logger.error', () => {
111
+ const { baseLogger, logger } = createTestLogger();
112
+
113
+ logger.error('only message');
114
+ logger.error('message and context', { requestId: 'parent' });
115
+ logger.error('message and error', new Error('some-error'));
116
+ logger.error('message, error and context', new Error('some-error'), { requestId: 'parent' });
117
+
118
+ expect(baseLogger.error).toHaveBeenNthCalledWith(1, 'only message', undefined);
119
+ expect(baseLogger.error).toHaveBeenNthCalledWith(2, 'message and context', { ctx: { requestId: 'parent' } });
120
+ expect(baseLogger.error).toHaveBeenNthCalledWith(3, 'message and error', new Error('some-error'), undefined);
121
+ expect(baseLogger.error).toHaveBeenNthCalledWith(4, 'message, error and context', new Error('some-error'), {
122
+ ctx: {
123
+ requestId: 'parent',
124
+ },
128
125
  });
129
126
  });
127
+
128
+ test('logs an error when passed as context to non error level', () => {
129
+ const { baseLogger, logger } = createTestLogger();
130
+ const e = new Error('some-error');
131
+
132
+ logger.debug('debug message', e);
133
+ logger.info('info message', e);
134
+ logger.warn('warn message', e);
135
+
136
+ expect(baseLogger.debug).toHaveBeenCalledWith('debug message', { ctx: { error: 'some-error', name: 'Error' } });
137
+ expect(baseLogger.info).toHaveBeenCalledWith('info message', { ctx: { error: 'some-error', name: 'Error' } });
138
+ expect(baseLogger.warn).toHaveBeenCalledWith('warn message', { ctx: { error: 'some-error', name: 'Error' } });
139
+ });
@@ -1,3 +1,4 @@
1
+ import isError from 'lodash/isError';
1
2
  import winston from 'winston';
2
3
  import { consoleFormat } from 'winston-console-format';
3
4
 
@@ -87,10 +88,17 @@ export interface Logger {
87
88
  child: (options: { name: string }) => Logger;
88
89
  }
89
90
 
91
+ const parseLocalContext = (localContext: LogContext | undefined) => {
92
+ // Sometimes an error passed as a context, but when JS error has no own enumerable properties, so when it is spread
93
+ // (using ...) we get an empty object and lose all the context.
94
+ if (isError(localContext)) return { error: localContext.message, name: localContext.name };
95
+ return localContext;
96
+ };
97
+
90
98
  const createFullContext = (localContext: LogContext | undefined) => {
91
99
  const globalContext = getAsyncLocalStorage().getStore();
92
100
  if (!globalContext && !localContext) return;
93
- const fullContext = { ...globalContext, ...localContext };
101
+ const fullContext = { ...globalContext, ...parseLocalContext(localContext) };
94
102
 
95
103
  // If the context contains a `name` or `message` field, it will override the `name` and `message` fields of the log
96
104
  // entry. To avoid this, we return the context as a separate field.
package/src/node-index.ts CHANGED
@@ -1,4 +1,3 @@
1
- // NOTE: Not exporting ESLint rules because they need to be imported in a special way inside .eslintrc.js config.
2
1
  export * from './universal-index';
3
2
  export * from './logger';
4
3
  export * from './processing';
@@ -117,7 +117,6 @@ export const unsafeEvaluateV2 = async (code: string, payload: unknown, timeout:
117
117
  const timers = createTimers();
118
118
 
119
119
  const goEvaluate = await go<Promise<any>, GoWrappedError>(
120
- // eslint-disable-next-line @typescript-eslint/require-await
121
120
  async () =>
122
121
  vm.runInNewContext(
123
122
  `
@@ -1,15 +0,0 @@
1
- export namespace universalRestrictedImportsConfig {
2
- let patterns: {
3
- group: string[];
4
- message: string;
5
- }[];
6
- }
7
- export const universalImportOrderConfig: {
8
- groups: string[];
9
- 'newlines-between': string;
10
- alphabetize: {
11
- order: string;
12
- caseInsensitive: boolean;
13
- };
14
- };
15
- //# sourceMappingURL=internal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/eslint/internal.js"],"names":[],"mappings":";;;;;;AAUA;;;;;;;EAQE"}
@@ -1,24 +0,0 @@
1
- "use strict";
2
- const universalRestrictedImportsConfig = {
3
- patterns: [
4
- {
5
- group: ['date-fns/*'],
6
- // The date-fns library is tree-shakeable and it's more convenient to use named imports.
7
- message: "Please use named imports from 'date-fns'.",
8
- },
9
- ],
10
- };
11
- const universalImportOrderConfig = {
12
- // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
13
- groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
14
- 'newlines-between': 'always',
15
- alphabetize: {
16
- order: 'asc',
17
- caseInsensitive: true,
18
- },
19
- };
20
- module.exports = {
21
- universalRestrictedImportsConfig,
22
- universalImportOrderConfig,
23
- };
24
- //# sourceMappingURL=internal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/eslint/internal.js"],"names":[],"mappings":";AAAA,MAAM,gCAAgC,GAAG;IACvC,QAAQ,EAAE;QACR;YACE,KAAK,EAAE,CAAC,YAAY,CAAC;YACrB,wFAAwF;YACxF,OAAO,EAAE,2CAA2C;SACrD;KACF;CACF,CAAC;AAEF,MAAM,0BAA0B,GAAG;IACjC,oFAAoF;IACpF,MAAM,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC;IACzE,kBAAkB,EAAE,QAAQ;IAC5B,WAAW,EAAE;QACX,KAAK,EAAE,KAAK;QACZ,eAAe,EAAE,IAAI;KACtB;CACF,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG;IACf,gCAAgC;IAChC,0BAA0B;CAC3B,CAAC"}
@@ -1,29 +0,0 @@
1
- export let parser: string;
2
- export namespace parserOptions {
3
- let ecmaVersion: number;
4
- let sourceType: string;
5
- }
6
- export namespace env {
7
- let node: boolean;
8
- let browser: boolean;
9
- }
10
- export let overrides: {
11
- files: string[];
12
- env: {
13
- jest: boolean;
14
- };
15
- plugins: string[];
16
- extends: string[];
17
- rules: {
18
- 'jest/prefer-expect-assertions': string;
19
- 'jest/prefer-each': string;
20
- 'jest/require-top-level-describe': string;
21
- 'jest/max-expects': string;
22
- 'jest/valid-title': string;
23
- 'jest/no-hooks': (string | {
24
- allow: string[];
25
- })[];
26
- 'prefer-lowercase-title': string;
27
- };
28
- }[];
29
- //# sourceMappingURL=jest.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jest.d.ts","sourceRoot":"","sources":["../../src/eslint/jest.js"],"names":[],"mappings":""}
@@ -1,38 +0,0 @@
1
- "use strict";
2
- module.exports = {
3
- parser: '@typescript-eslint/parser',
4
- parserOptions: {
5
- ecmaVersion: 2022,
6
- sourceType: 'module', // Enable the use of ES6 import/export syntax.
7
- },
8
- env: {
9
- node: true,
10
- browser: true,
11
- },
12
- // Configuration for specific files is done under 'overrides'.
13
- overrides: [
14
- {
15
- files: ['**/*.test.ts', '**/*.test.tsx', '**/*.test.js', '**/*.test.jsx'],
16
- env: {
17
- jest: true,
18
- },
19
- plugins: ['jest'],
20
- extends: ['plugin:jest/all', 'plugin:jest-formatting/recommended'],
21
- rules: {
22
- 'jest/prefer-expect-assertions': 'off',
23
- 'jest/prefer-each': 'off',
24
- 'jest/require-top-level-describe': 'off',
25
- 'jest/max-expects': 'off',
26
- 'jest/valid-title': 'off',
27
- 'jest/no-hooks': [
28
- 'error',
29
- {
30
- allow: ['afterEach', 'afterAll'],
31
- },
32
- ],
33
- 'prefer-lowercase-title': 'off', // Sometimes we want to start the test with a capital letter and some words are all uppercase (e.g. AWS).
34
- },
35
- },
36
- ],
37
- };
38
- //# sourceMappingURL=jest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jest.js","sourceRoot":"","sources":["../../src/eslint/jest.js"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,GAAG;IACf,MAAM,EAAE,2BAA2B;IACnC,aAAa,EAAE;QACb,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,QAAQ,EAAE,8CAA8C;KACrE;IACD,GAAG,EAAE;QACH,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;KACd;IACD,8DAA8D;IAC9D,SAAS,EAAE;QACT;YACE,KAAK,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,CAAC;YACzE,GAAG,EAAE;gBACH,IAAI,EAAE,IAAI;aACX;YACD,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,OAAO,EAAE,CAAC,iBAAiB,EAAE,oCAAoC,CAAC;YAClE,KAAK,EAAE;gBACL,+BAA+B,EAAE,KAAK;gBACtC,kBAAkB,EAAE,KAAK;gBACzB,iCAAiC,EAAE,KAAK;gBACxC,kBAAkB,EAAE,KAAK;gBACzB,kBAAkB,EAAE,KAAK;gBACzB,eAAe,EAAE;oBACf,OAAO;oBACP;wBACE,KAAK,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;qBACjC;iBACF;gBACD,wBAAwB,EAAE,KAAK,EAAE,yGAAyG;aAC3I;SACF;KACF;CACF,CAAC"}
@@ -1,27 +0,0 @@
1
- export declare let parser: string;
2
- export declare namespace parserOptions {
3
- let ecmaVersion: number;
4
- namespace ecmaFeatures {
5
- let jsx: boolean;
6
- }
7
- let sourceType: string;
8
- }
9
- export declare namespace settings {
10
- namespace react {
11
- let version: string;
12
- }
13
- }
14
- export declare namespace env {
15
- let node: boolean;
16
- let browser: boolean;
17
- }
18
- declare let _extends: string[];
19
- export { _extends as extends };
20
- export declare let overrides: {
21
- files: string[];
22
- rules: {
23
- 'import/no-default-export': string;
24
- 'import/prefer-default-export': string;
25
- };
26
- }[];
27
- //# sourceMappingURL=next-js.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"next-js.d.ts","sourceRoot":"","sources":["../../src/eslint/next-js.js"],"names":[],"mappings":""}
@@ -1,33 +0,0 @@
1
- "use strict";
2
- module.exports = {
3
- parser: '@typescript-eslint/parser',
4
- parserOptions: {
5
- ecmaVersion: 2022,
6
- ecmaFeatures: {
7
- jsx: true, // Support JSX syntax.
8
- },
9
- sourceType: 'module', // Enable ES6 import/export syntax.
10
- },
11
- settings: {
12
- react: {
13
- version: 'detect',
14
- },
15
- },
16
- env: {
17
- node: true,
18
- browser: true,
19
- },
20
- extends: [
21
- 'next/core-web-vitals', // Enforce Next.js performance best practices. See: https://nextjs.org/docs/basic-features/eslint.
22
- ],
23
- overrides: [
24
- {
25
- files: ['pages/**/*'],
26
- rules: {
27
- 'import/no-default-export': 'off',
28
- 'import/prefer-default-export': 'error', // Next.js expects default exports in the pages directory.
29
- },
30
- },
31
- ],
32
- };
33
- //# sourceMappingURL=next-js.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"next-js.js","sourceRoot":"","sources":["../../src/eslint/next-js.js"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,GAAG;IACf,MAAM,EAAE,2BAA2B;IACnC,aAAa,EAAE;QACb,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE;YACZ,GAAG,EAAE,IAAI,EAAE,sBAAsB;SAClC;QACD,UAAU,EAAE,QAAQ,EAAE,mCAAmC;KAC1D;IACD,QAAQ,EAAE;QACR,KAAK,EAAE;YACL,OAAO,EAAE,QAAQ;SAClB;KACF;IACD,GAAG,EAAE;QACH,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;KACd;IACD,OAAO,EAAE;QACP,sBAAsB,EAAE,kGAAkG;KAC3H;IACD,SAAS,EAAE;QACT;YACE,KAAK,EAAE,CAAC,YAAY,CAAC;YACrB,KAAK,EAAE;gBACL,0BAA0B,EAAE,KAAK;gBACjC,8BAA8B,EAAE,OAAO,EAAE,0DAA0D;aACpG;SACF;KACF;CACF,CAAC"}
@@ -1,90 +0,0 @@
1
- export declare let parser: string;
2
- export declare namespace parserOptions {
3
- let ecmaVersion: number;
4
- namespace ecmaFeatures {
5
- let jsx: boolean;
6
- }
7
- let sourceType: string;
8
- }
9
- export declare namespace settings {
10
- namespace react {
11
- let version: string;
12
- }
13
- }
14
- export declare namespace env {
15
- let node: boolean;
16
- let browser: boolean;
17
- }
18
- declare let _extends: string[];
19
- export { _extends as extends };
20
- export declare let plugins: string[];
21
- export declare let rules: {
22
- 'import/order': (string | ({
23
- groups: string[];
24
- 'newlines-between': string;
25
- alphabetize: {
26
- order: string;
27
- caseInsensitive: boolean;
28
- };
29
- } & {
30
- pathGroups: {
31
- pattern: string;
32
- group: string;
33
- position: string;
34
- }[];
35
- }))[];
36
- 'react/destructuring-assignment': (string | {
37
- destructureInSignature: string;
38
- })[];
39
- 'react/forbid-component-props': (string | {
40
- forbid: never[];
41
- })[];
42
- 'react/forbid-dom-props': (string | {
43
- forbid: never[];
44
- })[];
45
- 'react/jsx-curly-brace-presence': (string | {
46
- props: string;
47
- children: string;
48
- propElementValues: string;
49
- })[];
50
- 'react/jsx-curly-newline': string;
51
- 'react/jsx-filename-extension': string;
52
- 'react/jsx-handler-names': string;
53
- 'react/jsx-indent': string;
54
- 'react/jsx-indent-props': string;
55
- 'react/jsx-max-depth': string;
56
- 'react/jsx-max-props-per-line': string;
57
- 'react/jsx-newline': string;
58
- 'react/jsx-no-bind': string;
59
- 'react/jsx-no-leaked-render': string;
60
- 'react/jsx-no-literals': string;
61
- 'react/jsx-one-expression-per-line': string;
62
- 'react/jsx-props-no-spreading': string;
63
- 'react/jsx-sort-props': string;
64
- 'react/no-multi-comp': string;
65
- 'react/no-unescaped-entities': string;
66
- 'react/no-unused-prop-types': string;
67
- 'react/prefer-read-only-props': string;
68
- 'react/prop-types': string;
69
- 'react/react-in-jsx-scope': string;
70
- 'react/require-default-props': string;
71
- 'react/self-closing-comp': (string | {
72
- component: boolean;
73
- html: boolean;
74
- })[];
75
- 'react/void-dom-elements-no-children': string;
76
- '@typescript-eslint/no-restricted-imports': (string | ({
77
- patterns: {
78
- group: string[];
79
- message: string;
80
- }[];
81
- } & {
82
- paths: {
83
- name: string;
84
- importNames: string[];
85
- message: string;
86
- }[];
87
- }))[];
88
- 'lodash/import-scope': string[];
89
- };
90
- //# sourceMappingURL=react.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/eslint/react.js"],"names":[],"mappings":""}
@@ -1,85 +0,0 @@
1
- "use strict";
2
- // eslint-disable-next-line @typescript-eslint/no-var-requires, lodash/import-scope
3
- const { merge } = require('lodash');
4
- // eslint-disable-next-line @typescript-eslint/no-var-requires
5
- const { universalRestrictedImportsConfig, universalImportOrderConfig } = require('./internal');
6
- module.exports = {
7
- parser: '@typescript-eslint/parser',
8
- parserOptions: {
9
- ecmaVersion: 2022,
10
- ecmaFeatures: {
11
- jsx: true, // Support JSX syntax.
12
- },
13
- sourceType: 'module', // Enable ES6 import/export syntax.
14
- },
15
- settings: {
16
- react: {
17
- version: 'detect', // Automatically detect the version of React.
18
- },
19
- },
20
- env: {
21
- node: true,
22
- browser: true,
23
- },
24
- extends: ['plugin:react/all', 'plugin:react-hooks/recommended'],
25
- plugins: ['react', '@typescript-eslint', 'import', 'lodash'],
26
- rules: {
27
- 'import/order': [
28
- 'error',
29
- merge({}, universalImportOrderConfig, {
30
- // Prioritize react imports.
31
- pathGroups: [
32
- {
33
- pattern: 'react',
34
- group: 'builtin',
35
- position: 'before',
36
- },
37
- ],
38
- }),
39
- ],
40
- /* Overrides for "react" plugin */
41
- 'react/destructuring-assignment': ['error', 'always', { destructureInSignature: 'ignore' }],
42
- 'react/forbid-component-props': ['error', { forbid: [] }],
43
- 'react/forbid-dom-props': ['error', { forbid: [] }],
44
- 'react/jsx-curly-brace-presence': ['error', { props: 'never', children: 'never', propElementValues: 'always' }],
45
- 'react/jsx-curly-newline': 'off',
46
- 'react/jsx-filename-extension': 'off',
47
- 'react/jsx-handler-names': 'off',
48
- 'react/jsx-indent': 'off',
49
- 'react/jsx-indent-props': 'off',
50
- 'react/jsx-max-depth': 'off',
51
- 'react/jsx-max-props-per-line': 'off',
52
- 'react/jsx-newline': 'off',
53
- 'react/jsx-no-bind': 'off',
54
- 'react/jsx-no-leaked-render': 'off',
55
- 'react/jsx-no-literals': 'off',
56
- 'react/jsx-one-expression-per-line': 'off',
57
- 'react/jsx-props-no-spreading': 'off',
58
- 'react/jsx-sort-props': 'off',
59
- 'react/no-multi-comp': 'off',
60
- 'react/no-unescaped-entities': 'off',
61
- 'react/no-unused-prop-types': 'off',
62
- 'react/prefer-read-only-props': 'off',
63
- 'react/prop-types': 'off',
64
- 'react/react-in-jsx-scope': 'off',
65
- 'react/require-default-props': 'off',
66
- 'react/self-closing-comp': ['error', { component: true, html: true }],
67
- 'react/void-dom-elements-no-children': 'error',
68
- /* Overrides for "@typescript-eslint" plugin */
69
- '@typescript-eslint/no-restricted-imports': [
70
- 'error',
71
- merge({}, universalRestrictedImportsConfig, {
72
- paths: [
73
- {
74
- name: 'react',
75
- importNames: ['default'],
76
- message: 'Starting from React version 17, there is no need to globally import React. Use named imports for specific React APIs.',
77
- },
78
- ],
79
- }),
80
- ],
81
- /* Overrides for "lodash" plugin */
82
- 'lodash/import-scope': ['error', 'method'],
83
- },
84
- };
85
- //# sourceMappingURL=react.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/eslint/react.js"],"names":[],"mappings":";AAAA,mFAAmF;AACnF,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEpC,8DAA8D;AAC9D,MAAM,EAAE,gCAAgC,EAAE,0BAA0B,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAE/F,MAAM,CAAC,OAAO,GAAG;IACf,MAAM,EAAE,2BAA2B;IACnC,aAAa,EAAE;QACb,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE;YACZ,GAAG,EAAE,IAAI,EAAE,sBAAsB;SAClC;QACD,UAAU,EAAE,QAAQ,EAAE,mCAAmC;KAC1D;IACD,QAAQ,EAAE;QACR,KAAK,EAAE;YACL,OAAO,EAAE,QAAQ,EAAE,6CAA6C;SACjE;KACF;IACD,GAAG,EAAE;QACH,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;KACd;IACD,OAAO,EAAE,CAAC,kBAAkB,EAAE,gCAAgC,CAAC;IAC/D,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC5D,KAAK,EAAE;QACL,cAAc,EAAE;YACd,OAAO;YACP,KAAK,CAAC,EAAE,EAAE,0BAA0B,EAAE;gBACpC,4BAA4B;gBAC5B,UAAU,EAAE;oBACV;wBACE,OAAO,EAAE,OAAO;wBAChB,KAAK,EAAE,SAAS;wBAChB,QAAQ,EAAE,QAAQ;qBACnB;iBACF;aACF,CAAC;SACH;QACD,kCAAkC;QAClC,gCAAgC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,sBAAsB,EAAE,QAAQ,EAAE,CAAC;QAC3F,8BAA8B,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACzD,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACnD,gCAAgC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC;QAC/G,yBAAyB,EAAE,KAAK;QAChC,8BAA8B,EAAE,KAAK;QACrC,yBAAyB,EAAE,KAAK;QAChC,kBAAkB,EAAE,KAAK;QACzB,wBAAwB,EAAE,KAAK;QAC/B,qBAAqB,EAAE,KAAK;QAC5B,8BAA8B,EAAE,KAAK;QACrC,mBAAmB,EAAE,KAAK;QAC1B,mBAAmB,EAAE,KAAK;QAC1B,4BAA4B,EAAE,KAAK;QACnC,uBAAuB,EAAE,KAAK;QAC9B,mCAAmC,EAAE,KAAK;QAC1C,8BAA8B,EAAE,KAAK;QACrC,sBAAsB,EAAE,KAAK;QAC7B,qBAAqB,EAAE,KAAK;QAC5B,6BAA6B,EAAE,KAAK;QACpC,4BAA4B,EAAE,KAAK;QACnC,8BAA8B,EAAE,KAAK;QACrC,kBAAkB,EAAE,KAAK;QACzB,0BAA0B,EAAE,KAAK;QACjC,6BAA6B,EAAE,KAAK;QACpC,yBAAyB,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACrE,qCAAqC,EAAE,OAAO;QAE9C,+CAA+C;QAC/C,0CAA0C,EAAE;YAC1C,OAAO;YACP,KAAK,CAAC,EAAE,EAAE,gCAAgC,EAAE;gBAC1C,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,OAAO;wBACb,WAAW,EAAE,CAAC,SAAS,CAAC;wBACxB,OAAO,EACL,uHAAuH;qBAC1H;iBACF;aACF,CAAC;SACH;QAED,mCAAmC;QACnC,qBAAqB,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;KAC3C;CACF,CAAC"}