@forge/lint 5.15.2-next.5 → 5.16.0-next.6

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @forge/lint
2
2
 
3
+ ## 5.16.0-next.6
4
+
5
+ ### Minor Changes
6
+
7
+ - 7ef2435: Add lint rule to warn about deprecation of storage module in @forge/api package.
8
+
3
9
  ## 5.15.2-next.5
4
10
 
5
11
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/lint/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAkB,MAAM,oBAAoB,CAAC;AAcxG,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,WAAY,UAAU,eAAe,UAAU,EAAE,4BAAuB,IA+CrG,CAAC;AAEF,eAAO,MAAM,YAAY,gBAAiB,UAAU,EAAE,KAAG,YAQxD,CAAC;AAEF,eAAO,MAAM,eAAe,aAChB,MAAM,UACR,eAAe,oBACN,OAAO,GAAG,QAAQ,CAAC,aAAa,KAChD,QAAQ,SAAS,CAOnB,CAAC;AAEF,eAAO,MAAM,IAAI,gBACF,MAAM,EAAE,YACX,QAAQ,eACL,MAAM,UACX,UAAU,kBACF,cAAc,6BAjBpB,MAAM,UACR,eAAe,oBACN,OAAO,GAAG,QAAQ,CAAC,aAAa,KAChD,QAAQ,SAAS,CAAC,YAgBV,eAAe,EAAE,KAazB,QAAQ,UAAU,EAAE,CAyCtB,CAAC;AAwBF,eAAO,MAAM,QAAQ,WACX,UAAU,kBACF,cAAc,WACtB,eAAe,KACtB,QAAQ,UAAU,EAAE,CAGtB,CAAC"}
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/lint/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAkB,MAAM,oBAAoB,CAAC;AAexG,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,WAAY,UAAU,eAAe,UAAU,EAAE,4BAAuB,IA+CrG,CAAC;AAEF,eAAO,MAAM,YAAY,gBAAiB,UAAU,EAAE,KAAG,YAQxD,CAAC;AAEF,eAAO,MAAM,eAAe,aAChB,MAAM,UACR,eAAe,oBACN,OAAO,GAAG,QAAQ,CAAC,aAAa,KAChD,QAAQ,SAAS,CAOnB,CAAC;AAEF,eAAO,MAAM,IAAI,gBACF,MAAM,EAAE,YACX,QAAQ,eACL,MAAM,UACX,UAAU,kBACF,cAAc,6BAjBpB,MAAM,UACR,eAAe,oBACN,OAAO,GAAG,QAAQ,CAAC,aAAa,KAChD,QAAQ,SAAS,CAAC,YAgBV,eAAe,EAAE,KAczB,QAAQ,UAAU,EAAE,CAyCtB,CAAC;AAwBF,eAAO,MAAM,QAAQ,WACX,UAAU,kBACF,cAAc,WACtB,eAAe,KACtB,QAAQ,UAAU,EAAE,CAGtB,CAAC"}
package/out/lint/lint.js CHANGED
@@ -19,6 +19,7 @@ const storage_module_linter_1 = require("./linters/storage-module-linter/storage
19
19
  const frame_component_linter_1 = require("./linters/frame-component-linter/frame-component-linter");
20
20
  const deprecated_egress_permissions_manifest_linter_1 = require("./linters/manifest-linter/deprecated-egress-permissions-manifest-linter");
21
21
  const llm_module_linter_1 = require("./linters/llm-module-linter/llm-module-linter");
22
+ const deprecated_api_module_linter_1 = require("./linters/deprecated-api-module-linter/deprecated-api-module-linter");
22
23
  const reportLintResults = (logger, lintResults, showSummary = true) => {
23
24
  let numErrors = 0, numWarnings = 0;
24
25
  let noProblemsFound = true;
@@ -91,6 +92,7 @@ const lint = async (filesToLint, manifest, environment, logger, statsigService,
91
92
  new storage_module_linter_1.StorageModulesLinter(environment, manifest, logger),
92
93
  new frame_component_linter_1.FrameComponentLinter(environment, manifest, logger),
93
94
  new llm_module_linter_1.LlmModuleLinter(environment, manifest, logger),
95
+ new deprecated_api_module_linter_1.DeprecatedApiModuleLinter(environment, manifest, logger),
94
96
  new deprecated_egress_permissions_manifest_linter_1.DeprecatedEgressPermissionsManifestLinter(logger, statsigService)
95
97
  ]) => {
96
98
  const { include, exclude } = await (0, cli_shared_1.listTSConfigIncludeExclude)(new cli_shared_1.FileSystemReader());
@@ -0,0 +1,9 @@
1
+ import { LintCriteriaMatch } from '../../linter-interface';
2
+ export declare const FORGE_API_PACKAGE = "@forge/api";
3
+ export declare const DEPRECATED_STORAGE_EXPORT_NAME = "storage";
4
+ export declare type DeprecatedApiStorageMatch = LintCriteriaMatch;
5
+ export interface DeprecatedApiStorageMatches {
6
+ [key: string]: DeprecatedApiStorageMatch[];
7
+ deprecatedApiStorage: DeprecatedApiStorageMatch[];
8
+ }
9
+ //# sourceMappingURL=deprecated-api-module-interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deprecated-api-module-interface.d.ts","sourceRoot":"","sources":["../../../../src/lint/linters/deprecated-api-module-linter/deprecated-api-module-interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,eAAO,MAAM,8BAA8B,YAAY,CAAC;AAExD,oBAAY,yBAAyB,GAAG,iBAAiB,CAAC;AAE1D,MAAM,WAAW,2BAA2B;IAC1C,CAAC,GAAG,EAAE,MAAM,GAAG,yBAAyB,EAAE,CAAC;IAC3C,oBAAoB,EAAE,yBAAyB,EAAE,CAAC;CACnD"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEPRECATED_STORAGE_EXPORT_NAME = exports.FORGE_API_PACKAGE = void 0;
4
+ exports.FORGE_API_PACKAGE = '@forge/api';
5
+ exports.DEPRECATED_STORAGE_EXPORT_NAME = 'storage';
@@ -0,0 +1,12 @@
1
+ import { ManifestSchema as Manifest } from '@forge/manifest';
2
+ import BaseLinter from '../../base-linter';
3
+ import { LintLogger } from '../../linter-interface';
4
+ import { DeprecatedApiStorageMatch, DeprecatedApiStorageMatches } from './deprecated-api-module-interface';
5
+ export declare class DeprecatedApiModuleLinter extends BaseLinter<DeprecatedApiStorageMatch, DeprecatedApiStorageMatches, DeprecatedApiStorageMatch[]> {
6
+ private manifest;
7
+ constructor(environment: string, manifest: Manifest, logger: LintLogger);
8
+ protected addLintCriteriaMatch(match: DeprecatedApiStorageMatch, filepath: string): void;
9
+ bootstrap(): Promise<void>;
10
+ protected setupMatchesMap(filePath: string): void;
11
+ }
12
+ //# sourceMappingURL=deprecated-api-module-linter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deprecated-api-module-linter.d.ts","sourceRoot":"","sources":["../../../../src/lint/linters/deprecated-api-module-linter/deprecated-api-module-linter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAE3G,qBAAa,yBAA0B,SAAQ,UAAU,CACvD,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EAAE,CAC5B;IAGG,OAAO,CAAC,QAAQ;gBADhB,WAAW,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAC1B,MAAM,EAAE,UAAU;IAKpB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK3E,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAOvC,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAMlD"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeprecatedApiModuleLinter = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const base_linter_1 = tslib_1.__importDefault(require("../../base-linter"));
6
+ const deprecated_api_module_visitor_1 = require("./deprecated-api-module-visitor");
7
+ const deprecated_api_module_verifier_1 = require("./deprecated-api-module-verifier");
8
+ class DeprecatedApiModuleLinter extends base_linter_1.default {
9
+ manifest;
10
+ constructor(environment, manifest, logger) {
11
+ super(environment, logger);
12
+ this.manifest = manifest;
13
+ }
14
+ addLintCriteriaMatch(match, filepath) {
15
+ const criteriaMatches = this.matches.get(filepath);
16
+ criteriaMatches?.deprecatedApiStorage.push(match);
17
+ }
18
+ async bootstrap() {
19
+ this.nodeVisitors = [new deprecated_api_module_visitor_1.DeprecatedApiModuleVisitor()];
20
+ this.verifiers = {
21
+ deprecatedApiStorage: new deprecated_api_module_verifier_1.DeprecatedApiModuleVerifier(this.environment, this.manifest)
22
+ };
23
+ }
24
+ setupMatchesMap(filePath) {
25
+ this.matches.set(filePath, {
26
+ deprecatedApiStorage: []
27
+ });
28
+ this.nodeVisitors = [new deprecated_api_module_visitor_1.DeprecatedApiModuleVisitor()];
29
+ }
30
+ }
31
+ exports.DeprecatedApiModuleLinter = DeprecatedApiModuleLinter;
@@ -0,0 +1,8 @@
1
+ import { BaseLintIssueVerifier, LintIssueVerifier } from '../verifier-interface';
2
+ import { LintClass, LintResultRule } from '../../linter-interface';
3
+ import { DeprecatedApiStorageMatch } from './deprecated-api-module-interface';
4
+ export declare class DeprecatedApiModuleVerifier extends BaseLintIssueVerifier implements LintIssueVerifier<DeprecatedApiStorageMatch[]> {
5
+ protected getLintClass(): LintClass;
6
+ process(matches: DeprecatedApiStorageMatch[]): Promise<LintResultRule[]>;
7
+ }
8
+ //# sourceMappingURL=deprecated-api-module-verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deprecated-api-module-verifier.d.ts","sourceRoot":"","sources":["../../../../src/lint/linters/deprecated-api-module-linter/deprecated-api-module-verifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,qBAAa,2BACX,SAAQ,qBACR,YAAW,iBAAiB,CAAC,yBAAyB,EAAE,CAAC;IAEzD,SAAS,CAAC,YAAY,IAAI,SAAS;IAItB,OAAO,CAAC,OAAO,EAAE,yBAAyB,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAQtF"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeprecatedApiModuleVerifier = void 0;
4
+ const verifier_interface_1 = require("../verifier-interface");
5
+ const linter_interface_1 = require("../../linter-interface");
6
+ const text_1 = require("../../text");
7
+ class DeprecatedApiModuleVerifier extends verifier_interface_1.BaseLintIssueVerifier {
8
+ getLintClass() {
9
+ return linter_interface_1.LintClass.Warning;
10
+ }
11
+ async process(matches) {
12
+ return matches.map((match) => ({
13
+ class: this.getLintClass(),
14
+ message: text_1.messages.verifiers.deprecatedApiStorage.message(),
15
+ reference: text_1.messages.verifiers.deprecatedApiStorage.reference,
16
+ ...match
17
+ }));
18
+ }
19
+ }
20
+ exports.DeprecatedApiModuleVerifier = DeprecatedApiModuleVerifier;
@@ -0,0 +1,11 @@
1
+ import { TSESTree } from '@typescript-eslint/typescript-estree';
2
+ import { NodeVisitor } from '../node-visitor-interface';
3
+ import { DeprecatedApiStorageMatch } from './deprecated-api-module-interface';
4
+ export declare class DeprecatedApiModuleVisitor implements NodeVisitor<DeprecatedApiStorageMatch> {
5
+ private namespaceNames;
6
+ visit(node: TSESTree.Node, _parent: TSESTree.Node | undefined, onMatchCallback: (match: DeprecatedApiStorageMatch) => void): void;
7
+ private visitImportDeclaration;
8
+ private visitMemberExpression;
9
+ private visitVariableDeclarator;
10
+ }
11
+ //# sourceMappingURL=deprecated-api-module-visitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deprecated-api-module-visitor.d.ts","sourceRoot":"","sources":["../../../../src/lint/linters/deprecated-api-module-linter/deprecated-api-module-visitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAGL,yBAAyB,EAC1B,MAAM,mCAAmC,CAAC;AAE3C,qBAAa,0BAA2B,YAAW,WAAW,CAAC,yBAAyB,CAAC;IACvF,OAAO,CAAC,cAAc,CAA0B;IAEzC,KAAK,CACV,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,OAAO,EAAE,QAAQ,CAAC,IAAI,GAAG,SAAS,EAClC,eAAe,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,GAC1D,IAAI;IAgBP,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,qBAAqB;IA0B7B,OAAO,CAAC,uBAAuB;CA+BhC"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeprecatedApiModuleVisitor = void 0;
4
+ const typescript_estree_1 = require("@typescript-eslint/typescript-estree");
5
+ const deprecated_api_module_interface_1 = require("./deprecated-api-module-interface");
6
+ class DeprecatedApiModuleVisitor {
7
+ namespaceNames = new Set();
8
+ visit(node, _parent, onMatchCallback) {
9
+ if (node.type === typescript_estree_1.AST_NODE_TYPES.ImportDeclaration && node.source.value === deprecated_api_module_interface_1.FORGE_API_PACKAGE) {
10
+ this.visitImportDeclaration(node, onMatchCallback);
11
+ return;
12
+ }
13
+ if (node.type === typescript_estree_1.AST_NODE_TYPES.MemberExpression) {
14
+ this.visitMemberExpression(node, onMatchCallback);
15
+ return;
16
+ }
17
+ if (node.type === typescript_estree_1.AST_NODE_TYPES.VariableDeclarator) {
18
+ this.visitVariableDeclarator(node, onMatchCallback);
19
+ }
20
+ }
21
+ visitImportDeclaration(node, onMatchCallback) {
22
+ for (const specifier of node.specifiers) {
23
+ if (specifier.type === typescript_estree_1.AST_NODE_TYPES.ImportSpecifier &&
24
+ specifier.imported.type === typescript_estree_1.AST_NODE_TYPES.Identifier &&
25
+ specifier.imported.name === deprecated_api_module_interface_1.DEPRECATED_STORAGE_EXPORT_NAME &&
26
+ specifier.local.loc) {
27
+ onMatchCallback({
28
+ line: specifier.local.loc.start.line,
29
+ column: specifier.local.loc.start.column
30
+ });
31
+ }
32
+ if (specifier.type === typescript_estree_1.AST_NODE_TYPES.ImportNamespaceSpecifier) {
33
+ this.namespaceNames.add(specifier.local.name);
34
+ }
35
+ }
36
+ }
37
+ visitMemberExpression(node, onMatchCallback) {
38
+ if (node.object.type !== typescript_estree_1.AST_NODE_TYPES.Identifier || !this.namespaceNames.has(node.object.name)) {
39
+ return;
40
+ }
41
+ const isStorageDotAccess = !node.computed &&
42
+ node.property.type === typescript_estree_1.AST_NODE_TYPES.Identifier &&
43
+ node.property.name === deprecated_api_module_interface_1.DEPRECATED_STORAGE_EXPORT_NAME;
44
+ const isStorageBracketAccess = node.computed &&
45
+ node.property.type === typescript_estree_1.AST_NODE_TYPES.Literal &&
46
+ node.property.value === deprecated_api_module_interface_1.DEPRECATED_STORAGE_EXPORT_NAME;
47
+ if ((isStorageDotAccess || isStorageBracketAccess) && node.property.loc) {
48
+ onMatchCallback({
49
+ line: node.property.loc.start.line,
50
+ column: node.property.loc.start.column
51
+ });
52
+ }
53
+ }
54
+ visitVariableDeclarator(node, onMatchCallback) {
55
+ if (node.init?.type !== typescript_estree_1.AST_NODE_TYPES.Identifier || !this.namespaceNames.has(node.init.name)) {
56
+ return;
57
+ }
58
+ if (node.id.type === typescript_estree_1.AST_NODE_TYPES.Identifier) {
59
+ this.namespaceNames.add(node.id.name);
60
+ return;
61
+ }
62
+ if (node.id.type === typescript_estree_1.AST_NODE_TYPES.ObjectPattern) {
63
+ for (const prop of node.id.properties) {
64
+ if (prop.type === typescript_estree_1.AST_NODE_TYPES.Property &&
65
+ prop.key.type === typescript_estree_1.AST_NODE_TYPES.Identifier &&
66
+ prop.key.name === deprecated_api_module_interface_1.DEPRECATED_STORAGE_EXPORT_NAME &&
67
+ prop.key.loc) {
68
+ onMatchCallback({
69
+ line: prop.key.loc.start.line,
70
+ column: prop.key.loc.start.column
71
+ });
72
+ }
73
+ }
74
+ }
75
+ }
76
+ }
77
+ exports.DeprecatedApiModuleVisitor = DeprecatedApiModuleVisitor;
@@ -63,6 +63,10 @@ export declare const messages: {
63
63
  message: (scope: string, product: string) => string;
64
64
  reference: string;
65
65
  };
66
+ deprecatedApiStorage: {
67
+ message: () => string;
68
+ reference: string;
69
+ };
66
70
  };
67
71
  };
68
72
  //# sourceMappingURL=messages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/lint/text/messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;2BAGA,MAAM;;;;2BAKN,MAAM;2BAER,MAAM;;;;2BAKJ,MAAM;;;;iCAKA,MAAM;;;;iCAKN,MAAM;;;;8BAKT,MAAM,OAAO,MAAM;;;;+BAKlB,MAAM,UAAU,MAAM,QAAQ,MAAM,GAAG,SAAS,SAAS,MAAM;;;;6BAKjE,MAAM;;;;+BAIJ,MAAM,QAAQ,MAAM,SAAS,MAAM;;;;8BAKpC,MAAM;;;;8BAIN,MAAM;;;;8BAIN,MAAM;;;;;;;;;oCASF,MAAM;;;;;6BAOX,MAAM,WAAW,MAAM;;;;CAK7C,CAAC"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/lint/text/messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;2BAGA,MAAM;;;;2BAKN,MAAM;2BAER,MAAM;;;;2BAKJ,MAAM;;;;iCAKA,MAAM;;;;iCAKN,MAAM;;;;8BAKT,MAAM,OAAO,MAAM;;;;+BAKlB,MAAM,UAAU,MAAM,QAAQ,MAAM,GAAG,SAAS,SAAS,MAAM;;;;6BAKjE,MAAM;;;;+BAIJ,MAAM,QAAQ,MAAM,SAAS,MAAM;;;;8BAKpC,MAAM;;;;8BAIN,MAAM;;;;8BAIN,MAAM;;;;;;;;;oCASF,MAAM;;;;;6BAOX,MAAM,WAAW,MAAM;;;;;;;;CAU7C,CAAC"}
@@ -67,6 +67,10 @@ exports.messages = {
67
67
  notification: {
68
68
  message: (scope, product) => `Missing permission ${scope} required for NotificationApi. Only add this if you are building a ${product} app`,
69
69
  reference: 'permission-scope-required'
70
+ },
71
+ deprecatedApiStorage: {
72
+ message: () => `The \"storage\" export from \"@forge/api\" is deprecated. Use the \"@forge/kvs\" package instead.`,
73
+ reference: 'deprecated-api-storage'
70
74
  }
71
75
  }
72
76
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/lint",
3
- "version": "5.15.2-next.5",
3
+ "version": "5.16.0-next.6",
4
4
  "description": "Linting for forge apps",
5
5
  "main": "out/index.js",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "devDependencies": {
13
13
  "@atlassian/xen-test-util": "^4.2.0",
14
- "@forge/api": "^7.0.3-next.1",
14
+ "@forge/api": "^7.1.0-next.3",
15
15
  "@types/array.prototype.flatmap": "^1.2.6",
16
16
  "@types/cross-spawn": "^6.0.6",
17
17
  "@types/eslint": "8.56.12",