@blumintinc/eslint-plugin-blumint 1.1.1 → 1.1.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/lib/index.js CHANGED
@@ -32,10 +32,11 @@ const require_https_error_1 = __importDefault(require("./rules/require-https-err
32
32
  const use_custom_router_1 = require("./rules/use-custom-router");
33
33
  const require_image_overlayed_1 = __importDefault(require("./rules/require-image-overlayed"));
34
34
  const require_usememo_object_literals_1 = require("./rules/require-usememo-object-literals");
35
+ const enforce_safe_stringify_1 = require("./rules/enforce-safe-stringify");
35
36
  module.exports = {
36
37
  meta: {
37
38
  name: '@blumintinc/eslint-plugin-blumint',
38
- version: '1.1.1',
39
+ version: '1.1.2',
39
40
  },
40
41
  parseOptions: {
41
42
  ecmaVersion: 2020,
@@ -73,6 +74,7 @@ module.exports = {
73
74
  '@blumintinc/blumint/use-custom-router': 'error',
74
75
  '@blumintinc/blumint/require-image-overlayed': 'error',
75
76
  '@blumintinc/blumint/require-usememo-object-literals': 'error',
77
+ '@blumintinc/blumint/enforce-safe-stringify': 'error',
76
78
  },
77
79
  },
78
80
  },
@@ -106,6 +108,7 @@ module.exports = {
106
108
  'use-custom-router': use_custom_router_1.useCustomRouter,
107
109
  'require-image-overlayed': require_image_overlayed_1.default,
108
110
  'require-usememo-object-literals': require_usememo_object_literals_1.requireUseMemoObjectLiterals,
111
+ 'enforce-safe-stringify': enforce_safe_stringify_1.enforceStableStringify,
109
112
  },
110
113
  };
111
114
  //# sourceMappingURL=index.js.map
@@ -22,8 +22,10 @@ exports.enforceCallableTypes = (0, createRule_1.createRule)({
22
22
  defaultOptions: [],
23
23
  create(context) {
24
24
  const filename = context.getFilename();
25
- // Only apply to .f.ts files in the callable directory
26
- if (!filename.endsWith('.f.ts') || !filename.includes('/callable/')) {
25
+ // Only apply to .f.ts files in the callable directory, but ignore scripts directory
26
+ if (!filename.endsWith('.f.ts') ||
27
+ !filename.includes('/callable/') ||
28
+ filename.includes('/callable/scripts/')) {
27
29
  return {};
28
30
  }
29
31
  let hasParamsExport = false;
@@ -0,0 +1,2 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+ export declare const enforceStableStringify: TSESLint.RuleModule<"useStableStringify", [], TSESLint.RuleListener>;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.enforceStableStringify = void 0;
4
+ const utils_1 = require("@typescript-eslint/utils");
5
+ const createRule_1 = require("../utils/createRule");
6
+ exports.enforceStableStringify = (0, createRule_1.createRule)({
7
+ name: 'enforce-safe-stringify',
8
+ meta: {
9
+ type: 'problem',
10
+ docs: {
11
+ description: 'Enforce using safe-stable-stringify instead of JSON.stringify',
12
+ recommended: 'error',
13
+ },
14
+ fixable: 'code',
15
+ schema: [],
16
+ messages: {
17
+ useStableStringify: 'Use safe-stable-stringify instead of JSON.stringify for safer serialization',
18
+ },
19
+ },
20
+ defaultOptions: [],
21
+ create(context) {
22
+ let hasStringifyImport = false;
23
+ return {
24
+ ImportDeclaration(node) {
25
+ if (node.source.value === 'safe-stable-stringify' &&
26
+ node.specifiers.some((specifier) => specifier.type === utils_1.AST_NODE_TYPES.ImportDefaultSpecifier &&
27
+ specifier.local.name === 'stringify')) {
28
+ hasStringifyImport = true;
29
+ }
30
+ },
31
+ MemberExpression(node) {
32
+ if (node.object.type === utils_1.AST_NODE_TYPES.Identifier &&
33
+ node.object.name === 'JSON' &&
34
+ node.property.type === utils_1.AST_NODE_TYPES.Identifier &&
35
+ node.property.name === 'stringify') {
36
+ context.report({
37
+ node,
38
+ messageId: 'useStableStringify',
39
+ fix(fixer) {
40
+ const fixes = [];
41
+ // Add import if not present
42
+ if (!hasStringifyImport) {
43
+ const program = context.getSourceCode().ast;
44
+ const firstImport = program.body.find((node) => node.type === utils_1.AST_NODE_TYPES.ImportDeclaration);
45
+ const importStatement = "import stringify from 'safe-stable-stringify';\n";
46
+ if (firstImport) {
47
+ fixes.push(fixer.insertTextBefore(firstImport, importStatement));
48
+ }
49
+ else {
50
+ fixes.push(fixer.insertTextBefore(program.body[0], importStatement));
51
+ }
52
+ hasStringifyImport = true;
53
+ }
54
+ // Replace JSON.stringify with stringify
55
+ fixes.push(fixer.replaceText(node, 'stringify'));
56
+ return fixes;
57
+ },
58
+ });
59
+ }
60
+ },
61
+ };
62
+ },
63
+ });
64
+ //# sourceMappingURL=enforce-safe-stringify.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blumintinc/eslint-plugin-blumint",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Custom eslint rules for use within BluMint",
5
5
  "author": {
6
6
  "name": "Brodie McGuire",