@medusajs/eslint-plugin 2.21.0 → 2.21.1-preview-20260917150924
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/dist/rules/link-create-keys-modules-enum/rule.d.ts.map +1 -1
- package/dist/rules/link-create-keys-modules-enum/rule.js +15 -4
- package/dist/rules/link-create-keys-modules-enum/rule.js.map +1 -1
- package/dist/rules/link-uses-linkable-properties/rule.d.ts.map +1 -1
- package/dist/rules/link-uses-linkable-properties/rule.js +7 -54
- package/dist/rules/link-uses-linkable-properties/rule.js.map +1 -1
- package/dist/rules/read-only-link-requires-field/rule.d.ts.map +1 -1
- package/dist/rules/read-only-link-requires-field/rule.js +4 -27
- package/dist/rules/read-only-link-requires-field/rule.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/util/link.d.ts +65 -0
- package/dist/util/link.d.ts.map +1 -0
- package/dist/util/link.js +197 -0
- package/dist/util/link.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/rules/link-create-keys-modules-enum/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/rules/link-create-keys-modules-enum/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAuClE,eAAO,MAAM,IAAI;;CA+Kf,CAAA;AAEF,eAAe,IAAI,CAAA"}
|
|
@@ -4,6 +4,7 @@ exports.rule = void 0;
|
|
|
4
4
|
const utils_1 = require("@typescript-eslint/utils");
|
|
5
5
|
const create_rule_1 = require("../../create-rule");
|
|
6
6
|
const constants_1 = require("../../constants");
|
|
7
|
+
const link_1 = require("../../util/link");
|
|
7
8
|
const LINK_METHODS = new Set(["create", "dismiss", "delete", "restore"]);
|
|
8
9
|
const REMOTE_LINK_STEPS = new Set([
|
|
9
10
|
"createRemoteLinkStep",
|
|
@@ -41,12 +42,16 @@ exports.rule = (0, create_rule_1.createRule)({
|
|
|
41
42
|
create(context) {
|
|
42
43
|
const modulesLocalNames = new Set();
|
|
43
44
|
const stepLocalNames = new Set();
|
|
45
|
+
const linkLocalNames = new Set();
|
|
44
46
|
let frameworkUtilsImportNode = null;
|
|
45
47
|
function isLinkMethodCall(callee) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
callee.property.type
|
|
49
|
-
LINK_METHODS.has(callee.property.name))
|
|
48
|
+
if (callee.type !== utils_1.AST_NODE_TYPES.MemberExpression ||
|
|
49
|
+
callee.computed ||
|
|
50
|
+
callee.property.type !== utils_1.AST_NODE_TYPES.Identifier ||
|
|
51
|
+
!LINK_METHODS.has(callee.property.name)) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
return (0, link_1.isLinkReceiver)(callee.object, linkLocalNames);
|
|
50
55
|
}
|
|
51
56
|
function isStepCall(callee) {
|
|
52
57
|
return (callee.type === utils_1.AST_NODE_TYPES.Identifier &&
|
|
@@ -148,6 +153,12 @@ exports.rule = (0, create_rule_1.createRule)({
|
|
|
148
153
|
}
|
|
149
154
|
}
|
|
150
155
|
},
|
|
156
|
+
VariableDeclarator(node) {
|
|
157
|
+
(0, link_1.trackLinkBinding)(node, linkLocalNames);
|
|
158
|
+
},
|
|
159
|
+
PropertyDefinition(node) {
|
|
160
|
+
(0, link_1.trackLinkBinding)(node, linkLocalNames);
|
|
161
|
+
},
|
|
151
162
|
CallExpression(node) {
|
|
152
163
|
if (isLinkMethodCall(node.callee) || isStepCall(node.callee)) {
|
|
153
164
|
const arg = node.arguments[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.js","sourceRoot":"","sources":["../../../src/rules/link-create-keys-modules-enum/rule.ts"],"names":[],"mappings":";;;AACA,oDAAyD;AACzD,mDAA8C;AAC9C,+CAIwB;
|
|
1
|
+
{"version":3,"file":"rule.js","sourceRoot":"","sources":["../../../src/rules/link-create-keys-modules-enum/rule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/rules/link-uses-linkable-properties/rule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/rules/link-uses-linkable-properties/rule.ts"],"names":[],"mappings":"AA4FA,eAAO,MAAM,IAAI;;CA4Cf,CAAA;AAEF,eAAe,IAAI,CAAA"}
|
|
@@ -2,37 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.rule = void 0;
|
|
4
4
|
const create_rule_1 = require("../../create-rule");
|
|
5
|
-
const
|
|
6
|
-
const DEFINE_LINK = "defineLink";
|
|
7
|
-
function isLinkableMemberChain(node) {
|
|
8
|
-
// Match `<X>.linkable.<y>` (any depth on `<X>`, e.g. `ProductModule.linkable.product`
|
|
9
|
-
// or `foo.bar.linkable.product`). The outer node is a MemberExpression whose
|
|
10
|
-
// `object` is itself a non-computed MemberExpression with `property.name === "linkable"`.
|
|
11
|
-
if (node.type !== "MemberExpression" || node.computed) {
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
const object = node.object;
|
|
15
|
-
if (object.type !== "MemberExpression" || object.computed) {
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
if (object.property.type !== "Identifier" ||
|
|
19
|
-
object.property.name !== "linkable") {
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
5
|
+
const link_1 = require("../../util/link");
|
|
24
6
|
function isLinkableMemberChainOrId(node) {
|
|
25
7
|
// Match `<X>.linkable.<y>` or `<X>.linkable.<y>.id`. The `.id` form is used
|
|
26
8
|
// when linking to a data model by its id (e.g. linking to draft orders via
|
|
27
9
|
// `OrderModule.linkable.order.id`).
|
|
28
|
-
if (isLinkableMemberChain(node)) {
|
|
10
|
+
if ((0, link_1.isLinkableMemberChain)(node)) {
|
|
29
11
|
return true;
|
|
30
12
|
}
|
|
31
13
|
if (node.type === "MemberExpression" &&
|
|
32
14
|
!node.computed &&
|
|
33
15
|
node.property.type === "Identifier" &&
|
|
34
16
|
node.property.name === "id" &&
|
|
35
|
-
isLinkableMemberChain(node.object)) {
|
|
17
|
+
(0, link_1.isLinkableMemberChain)(node.object)) {
|
|
36
18
|
return true;
|
|
37
19
|
}
|
|
38
20
|
return false;
|
|
@@ -53,31 +35,15 @@ function hasOwnPropertyNamed(node, name) {
|
|
|
53
35
|
}
|
|
54
36
|
return false;
|
|
55
37
|
}
|
|
56
|
-
function hasLinkableInChain(node) {
|
|
57
|
-
// Walks any MemberExpression chain (e.g. `BlogModule.linkable.post.id`) and
|
|
58
|
-
// returns true if any segment is a non-computed `.linkable` access. Used to
|
|
59
|
-
// recognize spread arguments of the inverse read-only link form
|
|
60
|
-
// (`...BlogModule.linkable.post.id`).
|
|
61
|
-
let current = node;
|
|
62
|
-
while (current && current.type === "MemberExpression") {
|
|
63
|
-
if (!current.computed &&
|
|
64
|
-
current.property.type === "Identifier" &&
|
|
65
|
-
current.property.name === "linkable") {
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
current = current.object;
|
|
69
|
-
}
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
38
|
function isValidLinkParticipant(node) {
|
|
73
|
-
if (isLinkableMemberChain(node)) {
|
|
39
|
+
if ((0, link_1.isLinkableMemberChain)(node)) {
|
|
74
40
|
return true;
|
|
75
41
|
}
|
|
76
42
|
if (node.type === "ObjectExpression") {
|
|
77
43
|
for (const prop of node.properties) {
|
|
78
44
|
if (prop.type === "SpreadElement") {
|
|
79
45
|
// Inverse read-only links spread `<X>.linkable.<y>.id` (or similar).
|
|
80
|
-
if (hasLinkableInChain(prop.argument)) {
|
|
46
|
+
if ((0, link_1.hasLinkableInChain)(prop.argument)) {
|
|
81
47
|
return true;
|
|
82
48
|
}
|
|
83
49
|
continue;
|
|
@@ -123,23 +89,10 @@ exports.rule = (0, create_rule_1.createRule)({
|
|
|
123
89
|
const defineLinkLocalNames = new Set();
|
|
124
90
|
return {
|
|
125
91
|
ImportDeclaration(node) {
|
|
126
|
-
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
for (const specifier of node.specifiers) {
|
|
130
|
-
if (specifier.type === "ImportSpecifier" &&
|
|
131
|
-
specifier.imported.type === "Identifier" &&
|
|
132
|
-
specifier.imported.name === DEFINE_LINK) {
|
|
133
|
-
defineLinkLocalNames.add(specifier.local.name);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
92
|
+
(0, link_1.trackDefineLinkImports)(node, defineLinkLocalNames);
|
|
136
93
|
},
|
|
137
94
|
CallExpression(node) {
|
|
138
|
-
if (
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
if (node.callee.type !== "Identifier" ||
|
|
142
|
-
!defineLinkLocalNames.has(node.callee.name)) {
|
|
95
|
+
if (!(0, link_1.isDefineLinkCall)(node, defineLinkLocalNames)) {
|
|
143
96
|
return;
|
|
144
97
|
}
|
|
145
98
|
// `defineLink(arg1, arg2, options?)` — only the first two args are
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.js","sourceRoot":"","sources":["../../../src/rules/link-uses-linkable-properties/rule.ts"],"names":[],"mappings":";;;AACA,mDAA8C;AAC9C
|
|
1
|
+
{"version":3,"file":"rule.js","sourceRoot":"","sources":["../../../src/rules/link-uses-linkable-properties/rule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/rules/read-only-link-requires-field/rule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/rules/read-only-link-requires-field/rule.ts"],"names":[],"mappings":"AASA,KAAK,UAAU,GAAG,cAAc,GAAG,mBAAmB,CAAA;AAkCtD,eAAO,MAAM,IAAI;;CA2Df,CAAA;AAEF,eAAe,IAAI,CAAA"}
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.rule = void 0;
|
|
4
4
|
const create_rule_1 = require("../../create-rule");
|
|
5
|
-
const constants_1 = require("../../constants");
|
|
6
5
|
const ast_1 = require("../../util/ast");
|
|
7
|
-
const
|
|
6
|
+
const link_1 = require("../../util/link");
|
|
8
7
|
function isReadOnlyTrue(options) {
|
|
9
8
|
if (options.type !== "ObjectExpression") {
|
|
10
9
|
return false;
|
|
@@ -24,16 +23,7 @@ function isLinkableIdSpread(node) {
|
|
|
24
23
|
if (node.property.type !== "Identifier" || node.property.name !== "id") {
|
|
25
24
|
return false;
|
|
26
25
|
}
|
|
27
|
-
|
|
28
|
-
while (current.type === "MemberExpression") {
|
|
29
|
-
if (!current.computed &&
|
|
30
|
-
current.property.type === "Identifier" &&
|
|
31
|
-
current.property.name === "linkable") {
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
current = current.object;
|
|
35
|
-
}
|
|
36
|
-
return false;
|
|
26
|
+
return (0, link_1.hasLinkableInChain)(node.object);
|
|
37
27
|
}
|
|
38
28
|
function hasInverseLinkableSpread(obj) {
|
|
39
29
|
for (const prop of obj.properties) {
|
|
@@ -61,23 +51,10 @@ exports.rule = (0, create_rule_1.createRule)({
|
|
|
61
51
|
const defineLinkLocalNames = new Set();
|
|
62
52
|
return {
|
|
63
53
|
ImportDeclaration(node) {
|
|
64
|
-
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
for (const specifier of node.specifiers) {
|
|
68
|
-
if (specifier.type === "ImportSpecifier" &&
|
|
69
|
-
specifier.imported.type === "Identifier" &&
|
|
70
|
-
specifier.imported.name === DEFINE_LINK) {
|
|
71
|
-
defineLinkLocalNames.add(specifier.local.name);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
54
|
+
(0, link_1.trackDefineLinkImports)(node, defineLinkLocalNames);
|
|
74
55
|
},
|
|
75
56
|
CallExpression(node) {
|
|
76
|
-
if (
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
if (node.callee.type !== "Identifier" ||
|
|
80
|
-
!defineLinkLocalNames.has(node.callee.name)) {
|
|
57
|
+
if (!(0, link_1.isDefineLinkCall)(node, defineLinkLocalNames)) {
|
|
81
58
|
return;
|
|
82
59
|
}
|
|
83
60
|
const [arg1, arg2, options] = node.arguments;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.js","sourceRoot":"","sources":["../../../src/rules/read-only-link-requires-field/rule.ts"],"names":[],"mappings":";;;AACA,mDAA8C;AAC9C
|
|
1
|
+
{"version":3,"file":"rule.js","sourceRoot":"","sources":["../../../src/rules/read-only-link-requires-field/rule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/constants.ts","../src/create-rule.ts","../src/index.ts","../src/configs/modules.ts","../src/configs/recommended.ts","../src/configs/shared.ts","../src/configs/strict.ts","../src/rules/index.ts","../src/rules/admin-component-must-be-arrow-function/index.ts","../src/rules/admin-component-must-be-arrow-function/rule.ts","../src/rules/admin-env-vars-import-meta/index.ts","../src/rules/admin-env-vars-import-meta/rule.ts","../src/rules/admin-no-medusa-utils-import/index.ts","../src/rules/admin-no-medusa-utils-import/rule.ts","../src/rules/allow-fields-must-be-global-middleware/index.ts","../src/rules/allow-fields-must-be-global-middleware/rule.ts","../src/rules/authenticate-flag-name-and-type/index.ts","../src/rules/authenticate-flag-name-and-type/rule.ts","../src/rules/data-model-table-name-snake-case/index.ts","../src/rules/data-model-table-name-snake-case/rule.ts","../src/rules/import-from-framework-not-internal/index.ts","../src/rules/import-from-framework-not-internal/rule.ts","../src/rules/link-create-keys-modules-enum/index.ts","../src/rules/link-create-keys-modules-enum/rule.ts","../src/rules/link-no-cross-module-relationship/index.ts","../src/rules/link-no-cross-module-relationship/rule.ts","../src/rules/link-uses-linkable-properties/index.ts","../src/rules/link-uses-linkable-properties/rule.ts","../src/rules/loader-must-be-exported-in-module-definition/index.ts","../src/rules/loader-must-be-exported-in-module-definition/rule.ts","../src/rules/medusa-context-on-context-param/index.ts","../src/rules/medusa-context-on-context-param/rule.ts","../src/rules/middleware-must-call-next/index.ts","../src/rules/middleware-must-call-next/rule.ts","../src/rules/middlewares-file-location-and-name/index.ts","../src/rules/middlewares-file-location-and-name/rule.ts","../src/rules/module-name-snake-case/index.ts","../src/rules/module-name-snake-case/rule.ts","../src/rules/no-async-workflow-constructor/index.ts","../src/rules/no-async-workflow-constructor/rule.ts","../src/rules/no-conditional-expressions-in-workflow/index.ts","../src/rules/no-conditional-expressions-in-workflow/rule.ts","../src/rules/no-config-on-dynamic-ui-route/index.ts","../src/rules/no-config-on-dynamic-ui-route/rule.ts","../src/rules/no-console-log-in-workflow/index.ts","../src/rules/no-console-log-in-workflow/rule.ts","../src/rules/no-deprecated-remote-query-config/index.ts","../src/rules/no-deprecated-remote-query-config/rule.ts","../src/rules/no-direct-variable-mutation-in-workflow/index.ts","../src/rules/no-direct-variable-mutation-in-workflow/rule.ts","../src/rules/no-duplicate-step-id-in-workflow/index.ts","../src/rules/no-duplicate-step-id-in-workflow/rule.ts","../src/rules/no-if-in-workflow-constructor/index.ts","../src/rules/no-if-in-workflow-constructor/rule.ts","../src/rules/no-loops-in-workflow/index.ts","../src/rules/no-loops-in-workflow/rule.ts","../src/rules/no-mikroorm-direct-import/index.ts","../src/rules/no-mikroorm-direct-import/rule.ts","../src/rules/no-nested-when-in-workflow/index.ts","../src/rules/no-nested-when-in-workflow/rule.ts","../src/rules/no-new-date-in-workflow/index.ts","../src/rules/no-new-date-in-workflow/rule.ts","../src/rules/no-non-serializable-step-return/index.ts","../src/rules/no-non-serializable-step-return/rule.ts","../src/rules/no-reserved-default-properties-in-model/index.ts","../src/rules/no-reserved-default-properties-in-model/rule.ts","../src/rules/no-service-mutations-in-api-route/index.ts","../src/rules/no-service-mutations-in-api-route/rule.ts","../src/rules/no-spread-in-workflow/index.ts","../src/rules/no-spread-in-workflow/rule.ts","../src/rules/no-throw-in-transform/index.ts","../src/rules/no-throw-in-transform/rule.ts","../src/rules/no-throw-in-workflow-constructor/index.ts","../src/rules/no-throw-in-workflow-constructor/rule.ts","../src/rules/no-trailing-slash-in-route-matcher/index.ts","../src/rules/no-trailing-slash-in-route-matcher/rule.ts","../src/rules/no-try-catch-in-workflow/index.ts","../src/rules/no-try-catch-in-workflow/rule.ts","../src/rules/no-wildcard-with-specific-fields/index.ts","../src/rules/no-wildcard-with-specific-fields/rule.ts","../src/rules/no-workflow-call-without-container/index.ts","../src/rules/no-workflow-call-without-container/rule.ts","../src/rules/prefer-allow-fields-middleware/index.ts","../src/rules/prefer-allow-fields-middleware/rule.ts","../src/rules/prefer-container-registration-keys/index.ts","../src/rules/prefer-container-registration-keys/rule.ts","../src/rules/prefer-link-over-remote-link/index.ts","../src/rules/prefer-link-over-remote-link/rule.ts","../src/rules/prefer-modules-enum/index.ts","../src/rules/prefer-modules-enum/rule.ts","../src/rules/prefer-workflow-event-over-module-event/index.ts","../src/rules/prefer-workflow-event-over-module-event/rule.ts","../src/rules/prices-in-major-units/index.ts","../src/rules/prices-in-major-units/rule.ts","../src/rules/primary-key-required/index.ts","../src/rules/primary-key-required/rule.ts","../src/rules/read-only-link-requires-field/index.ts","../src/rules/read-only-link-requires-field/rule.ts","../src/rules/route-dynamic-folder-syntax/index.ts","../src/rules/route-dynamic-folder-syntax/rule.ts","../src/rules/route-file-naming/index.ts","../src/rules/route-file-naming/rule.ts","../src/rules/route-handler-exports-uppercase/index.ts","../src/rules/route-handler-exports-uppercase/rule.ts","../src/rules/route-params-must-be-defined/index.ts","../src/rules/route-params-must-be-defined/rule.ts","../src/rules/scheduled-job-config-required/index.ts","../src/rules/scheduled-job-config-required/rule.ts","../src/rules/scheduled-job-default-export-async/index.ts","../src/rules/scheduled-job-default-export-async/rule.ts","../src/rules/scheduled-job-default-export-required/index.ts","../src/rules/scheduled-job-default-export-required/rule.ts","../src/rules/scheduled-job-name-unique/index.ts","../src/rules/scheduled-job-name-unique/rule.ts","../src/rules/scheduled-job-schedule-valid-cron/index.ts","../src/rules/scheduled-job-schedule-valid-cron/rule.ts","../src/rules/service-constructor-must-call-super/index.ts","../src/rules/service-constructor-must-call-super/rule.ts","../src/rules/service-methods-must-be-async/index.ts","../src/rules/service-methods-must-be-async/rule.ts","../src/rules/step-id-kebab-case/index.ts","../src/rules/step-id-kebab-case/rule.ts","../src/rules/step-must-return-step-response/index.ts","../src/rules/step-must-return-step-response/rule.ts","../src/rules/subscriber-config-export-required/index.ts","../src/rules/subscriber-config-export-required/rule.ts","../src/rules/subscriber-default-export-must-be-async/index.ts","../src/rules/subscriber-default-export-must-be-async/rule.ts","../src/rules/subscriber-default-export-required/index.ts","../src/rules/subscriber-default-export-required/rule.ts","../src/rules/ui-route-config-via-define-route-config/index.ts","../src/rules/ui-route-config-via-define-route-config/rule.ts","../src/rules/ui-route-file-name-page-tsx/index.ts","../src/rules/ui-route-file-name-page-tsx/rule.ts","../src/rules/ui-route-must-have-default-export/index.ts","../src/rules/ui-route-must-have-default-export/rule.ts","../src/rules/use-inject-manager-on-public-methods/index.ts","../src/rules/use-inject-manager-on-public-methods/rule.ts","../src/rules/use-medusa-error-not-generic-error/index.ts","../src/rules/use-medusa-error-not-generic-error/rule.ts","../src/rules/use-validated-body-or-query/index.ts","../src/rules/use-validated-body-or-query/rule.ts","../src/rules/when-block-must-have-name/index.ts","../src/rules/when-block-must-have-name/rule.ts","../src/rules/widget-must-export-config/index.ts","../src/rules/widget-must-export-config/rule.ts","../src/rules/widget-must-have-default-export/index.ts","../src/rules/widget-must-have-default-export/rule.ts","../src/rules/widget-zone-must-be-string-literal/index.ts","../src/rules/widget-zone-must-be-string-literal/rule.ts","../src/rules/workflow-id-matches-export-or-filename/index.ts","../src/rules/workflow-id-matches-export-or-filename/rule.ts","../src/rules/workflow-must-return-workflow-response/index.ts","../src/rules/workflow-must-return-workflow-response/rule.ts","../src/rules/zod-import-source/index.ts","../src/rules/zod-import-source/rule.ts","../src/util/admin-scope.ts","../src/util/api-route.ts","../src/util/ast.ts","../src/util/container.ts","../src/util/filename.ts","../src/util/middlewares.ts","../src/util/service-scope.ts","../src/util/strings.ts","../src/util/workflow-scope.ts"],"version":"5.9.3"}
|
|
1
|
+
{"root":["../src/constants.ts","../src/create-rule.ts","../src/index.ts","../src/configs/modules.ts","../src/configs/recommended.ts","../src/configs/shared.ts","../src/configs/strict.ts","../src/rules/index.ts","../src/rules/admin-component-must-be-arrow-function/index.ts","../src/rules/admin-component-must-be-arrow-function/rule.ts","../src/rules/admin-env-vars-import-meta/index.ts","../src/rules/admin-env-vars-import-meta/rule.ts","../src/rules/admin-no-medusa-utils-import/index.ts","../src/rules/admin-no-medusa-utils-import/rule.ts","../src/rules/allow-fields-must-be-global-middleware/index.ts","../src/rules/allow-fields-must-be-global-middleware/rule.ts","../src/rules/authenticate-flag-name-and-type/index.ts","../src/rules/authenticate-flag-name-and-type/rule.ts","../src/rules/data-model-table-name-snake-case/index.ts","../src/rules/data-model-table-name-snake-case/rule.ts","../src/rules/import-from-framework-not-internal/index.ts","../src/rules/import-from-framework-not-internal/rule.ts","../src/rules/link-create-keys-modules-enum/index.ts","../src/rules/link-create-keys-modules-enum/rule.ts","../src/rules/link-no-cross-module-relationship/index.ts","../src/rules/link-no-cross-module-relationship/rule.ts","../src/rules/link-uses-linkable-properties/index.ts","../src/rules/link-uses-linkable-properties/rule.ts","../src/rules/loader-must-be-exported-in-module-definition/index.ts","../src/rules/loader-must-be-exported-in-module-definition/rule.ts","../src/rules/medusa-context-on-context-param/index.ts","../src/rules/medusa-context-on-context-param/rule.ts","../src/rules/middleware-must-call-next/index.ts","../src/rules/middleware-must-call-next/rule.ts","../src/rules/middlewares-file-location-and-name/index.ts","../src/rules/middlewares-file-location-and-name/rule.ts","../src/rules/module-name-snake-case/index.ts","../src/rules/module-name-snake-case/rule.ts","../src/rules/no-async-workflow-constructor/index.ts","../src/rules/no-async-workflow-constructor/rule.ts","../src/rules/no-conditional-expressions-in-workflow/index.ts","../src/rules/no-conditional-expressions-in-workflow/rule.ts","../src/rules/no-config-on-dynamic-ui-route/index.ts","../src/rules/no-config-on-dynamic-ui-route/rule.ts","../src/rules/no-console-log-in-workflow/index.ts","../src/rules/no-console-log-in-workflow/rule.ts","../src/rules/no-deprecated-remote-query-config/index.ts","../src/rules/no-deprecated-remote-query-config/rule.ts","../src/rules/no-direct-variable-mutation-in-workflow/index.ts","../src/rules/no-direct-variable-mutation-in-workflow/rule.ts","../src/rules/no-duplicate-step-id-in-workflow/index.ts","../src/rules/no-duplicate-step-id-in-workflow/rule.ts","../src/rules/no-if-in-workflow-constructor/index.ts","../src/rules/no-if-in-workflow-constructor/rule.ts","../src/rules/no-loops-in-workflow/index.ts","../src/rules/no-loops-in-workflow/rule.ts","../src/rules/no-mikroorm-direct-import/index.ts","../src/rules/no-mikroorm-direct-import/rule.ts","../src/rules/no-nested-when-in-workflow/index.ts","../src/rules/no-nested-when-in-workflow/rule.ts","../src/rules/no-new-date-in-workflow/index.ts","../src/rules/no-new-date-in-workflow/rule.ts","../src/rules/no-non-serializable-step-return/index.ts","../src/rules/no-non-serializable-step-return/rule.ts","../src/rules/no-reserved-default-properties-in-model/index.ts","../src/rules/no-reserved-default-properties-in-model/rule.ts","../src/rules/no-service-mutations-in-api-route/index.ts","../src/rules/no-service-mutations-in-api-route/rule.ts","../src/rules/no-spread-in-workflow/index.ts","../src/rules/no-spread-in-workflow/rule.ts","../src/rules/no-throw-in-transform/index.ts","../src/rules/no-throw-in-transform/rule.ts","../src/rules/no-throw-in-workflow-constructor/index.ts","../src/rules/no-throw-in-workflow-constructor/rule.ts","../src/rules/no-trailing-slash-in-route-matcher/index.ts","../src/rules/no-trailing-slash-in-route-matcher/rule.ts","../src/rules/no-try-catch-in-workflow/index.ts","../src/rules/no-try-catch-in-workflow/rule.ts","../src/rules/no-wildcard-with-specific-fields/index.ts","../src/rules/no-wildcard-with-specific-fields/rule.ts","../src/rules/no-workflow-call-without-container/index.ts","../src/rules/no-workflow-call-without-container/rule.ts","../src/rules/prefer-allow-fields-middleware/index.ts","../src/rules/prefer-allow-fields-middleware/rule.ts","../src/rules/prefer-container-registration-keys/index.ts","../src/rules/prefer-container-registration-keys/rule.ts","../src/rules/prefer-link-over-remote-link/index.ts","../src/rules/prefer-link-over-remote-link/rule.ts","../src/rules/prefer-modules-enum/index.ts","../src/rules/prefer-modules-enum/rule.ts","../src/rules/prefer-workflow-event-over-module-event/index.ts","../src/rules/prefer-workflow-event-over-module-event/rule.ts","../src/rules/prices-in-major-units/index.ts","../src/rules/prices-in-major-units/rule.ts","../src/rules/primary-key-required/index.ts","../src/rules/primary-key-required/rule.ts","../src/rules/read-only-link-requires-field/index.ts","../src/rules/read-only-link-requires-field/rule.ts","../src/rules/route-dynamic-folder-syntax/index.ts","../src/rules/route-dynamic-folder-syntax/rule.ts","../src/rules/route-file-naming/index.ts","../src/rules/route-file-naming/rule.ts","../src/rules/route-handler-exports-uppercase/index.ts","../src/rules/route-handler-exports-uppercase/rule.ts","../src/rules/route-params-must-be-defined/index.ts","../src/rules/route-params-must-be-defined/rule.ts","../src/rules/scheduled-job-config-required/index.ts","../src/rules/scheduled-job-config-required/rule.ts","../src/rules/scheduled-job-default-export-async/index.ts","../src/rules/scheduled-job-default-export-async/rule.ts","../src/rules/scheduled-job-default-export-required/index.ts","../src/rules/scheduled-job-default-export-required/rule.ts","../src/rules/scheduled-job-name-unique/index.ts","../src/rules/scheduled-job-name-unique/rule.ts","../src/rules/scheduled-job-schedule-valid-cron/index.ts","../src/rules/scheduled-job-schedule-valid-cron/rule.ts","../src/rules/service-constructor-must-call-super/index.ts","../src/rules/service-constructor-must-call-super/rule.ts","../src/rules/service-methods-must-be-async/index.ts","../src/rules/service-methods-must-be-async/rule.ts","../src/rules/step-id-kebab-case/index.ts","../src/rules/step-id-kebab-case/rule.ts","../src/rules/step-must-return-step-response/index.ts","../src/rules/step-must-return-step-response/rule.ts","../src/rules/subscriber-config-export-required/index.ts","../src/rules/subscriber-config-export-required/rule.ts","../src/rules/subscriber-default-export-must-be-async/index.ts","../src/rules/subscriber-default-export-must-be-async/rule.ts","../src/rules/subscriber-default-export-required/index.ts","../src/rules/subscriber-default-export-required/rule.ts","../src/rules/ui-route-config-via-define-route-config/index.ts","../src/rules/ui-route-config-via-define-route-config/rule.ts","../src/rules/ui-route-file-name-page-tsx/index.ts","../src/rules/ui-route-file-name-page-tsx/rule.ts","../src/rules/ui-route-must-have-default-export/index.ts","../src/rules/ui-route-must-have-default-export/rule.ts","../src/rules/use-inject-manager-on-public-methods/index.ts","../src/rules/use-inject-manager-on-public-methods/rule.ts","../src/rules/use-medusa-error-not-generic-error/index.ts","../src/rules/use-medusa-error-not-generic-error/rule.ts","../src/rules/use-validated-body-or-query/index.ts","../src/rules/use-validated-body-or-query/rule.ts","../src/rules/when-block-must-have-name/index.ts","../src/rules/when-block-must-have-name/rule.ts","../src/rules/widget-must-export-config/index.ts","../src/rules/widget-must-export-config/rule.ts","../src/rules/widget-must-have-default-export/index.ts","../src/rules/widget-must-have-default-export/rule.ts","../src/rules/widget-zone-must-be-string-literal/index.ts","../src/rules/widget-zone-must-be-string-literal/rule.ts","../src/rules/workflow-id-matches-export-or-filename/index.ts","../src/rules/workflow-id-matches-export-or-filename/rule.ts","../src/rules/workflow-must-return-workflow-response/index.ts","../src/rules/workflow-must-return-workflow-response/rule.ts","../src/rules/zod-import-source/index.ts","../src/rules/zod-import-source/rule.ts","../src/util/admin-scope.ts","../src/util/api-route.ts","../src/util/ast.ts","../src/util/container.ts","../src/util/filename.ts","../src/util/link.ts","../src/util/middlewares.ts","../src/util/service-scope.ts","../src/util/strings.ts","../src/util/workflow-scope.ts"],"version":"5.9.3"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { TSESTree } from "@typescript-eslint/utils";
|
|
2
|
+
export declare const DEFINE_LINK = "defineLink";
|
|
3
|
+
/**
|
|
4
|
+
* Receiver names that identify Medusa's Link service, normalized by
|
|
5
|
+
* {@link normalizeReceiverName} so casing and separators don't matter
|
|
6
|
+
* (`remoteLink`, `remote_link`, and `link_` all collapse into this set).
|
|
7
|
+
*/
|
|
8
|
+
export declare const LINK_RECEIVER_NAMES: ReadonlySet<string>;
|
|
9
|
+
/** Type names that identify a binding as Medusa's Link service. */
|
|
10
|
+
export declare const LINK_TYPE_NAMES: ReadonlySet<string>;
|
|
11
|
+
/**
|
|
12
|
+
* `ContainerRegistrationKeys` / `Modules` members that resolve the Link
|
|
13
|
+
* service. `REMOTE_LINK` is the deprecated pre-v2.2.0 key.
|
|
14
|
+
*/
|
|
15
|
+
export declare const LINK_RESOLVE_KEYS: ReadonlySet<string>;
|
|
16
|
+
/** String registration keys that resolve the Link service. */
|
|
17
|
+
export declare const LINK_RESOLVE_STRINGS: ReadonlySet<string>;
|
|
18
|
+
/** Lowercases and strips separators so `remote_link` and `remoteLink` match. */
|
|
19
|
+
export declare function normalizeReceiverName(name: string): string;
|
|
20
|
+
/** True when a type annotation names one of {@link LINK_TYPE_NAMES}. */
|
|
21
|
+
export declare function isLinkTypeAnnotation(annotation: TSESTree.TSTypeAnnotation | undefined): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* True when `node` is a container resolution that yields the Link service —
|
|
24
|
+
* `container.resolve(ContainerRegistrationKeys.LINK)`, `resolve(Modules.LINK)`,
|
|
25
|
+
* `resolve<Link>(...)`, or `resolve("link_modules")`. Unwraps `await`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function isLinkResolveCall(node: TSESTree.Node | null | undefined): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Records the local name of a `VariableDeclarator` or `PropertyDefinition`
|
|
30
|
+
* that holds the Link service, recognized either by its type annotation or by
|
|
31
|
+
* a container resolution initializer.
|
|
32
|
+
*
|
|
33
|
+
* Call from the matching visitors; pair with {@link isLinkReceiver}.
|
|
34
|
+
*/
|
|
35
|
+
export declare function trackLinkBinding(node: TSESTree.VariableDeclarator | TSESTree.PropertyDefinition, localNames: Set<string>): void;
|
|
36
|
+
/** The name a call's receiver is known by, e.g. `link`, `this.link_`. */
|
|
37
|
+
export declare function getReceiverName(object: TSESTree.Node): string | null;
|
|
38
|
+
/**
|
|
39
|
+
* True when `object` is recognizable as Medusa's Link service — either a name
|
|
40
|
+
* tracked by {@link trackLinkBinding} or one of {@link LINK_RECEIVER_NAMES}.
|
|
41
|
+
*
|
|
42
|
+
* Without this gate a rule matching link method names would also match
|
|
43
|
+
* identically-named methods on unrelated third-party SDKs.
|
|
44
|
+
*/
|
|
45
|
+
export declare function isLinkReceiver(object: TSESTree.Node, localNames: ReadonlySet<string>): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Records local names bound to `defineLink` from `@medusajs/framework/utils`
|
|
48
|
+
* (honors `import { defineLink as dl }`).
|
|
49
|
+
*
|
|
50
|
+
* Call from an `ImportDeclaration` visitor.
|
|
51
|
+
*/
|
|
52
|
+
export declare function trackDefineLinkImports(node: TSESTree.ImportDeclaration, localNames: Set<string>): void;
|
|
53
|
+
/** True when `node` calls a tracked `defineLink` binding. */
|
|
54
|
+
export declare function isDefineLinkCall(node: TSESTree.CallExpression, localNames: ReadonlySet<string>): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Matches `<X>.linkable.<y>` at any depth on `<X>`, e.g.
|
|
57
|
+
* `ProductModule.linkable.product` or `foo.bar.linkable.product`.
|
|
58
|
+
*/
|
|
59
|
+
export declare function isLinkableMemberChain(node: TSESTree.Node): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Walks a member chain (e.g. `BlogModule.linkable.post.id`) and returns true
|
|
62
|
+
* when any segment is a non-computed `.linkable` access.
|
|
63
|
+
*/
|
|
64
|
+
export declare function hasLinkableInChain(node: TSESTree.Node): boolean;
|
|
65
|
+
//# sourceMappingURL=link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/util/link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAKxD,eAAO,MAAM,WAAW,eAAe,CAAA;AAEvC;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAOlD,CAAA;AAEF,mEAAmE;AACnE,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAO9C,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAIhD,CAAA;AAEF,8DAA8D;AAC9D,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAInD,CAAA;AAEF,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wEAAwE;AACxE,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,QAAQ,CAAC,gBAAgB,GAAG,SAAS,GAChD,OAAO,CAOT;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,GAAG,SAAS,GACrC,OAAO,CAkCT;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,EAC/D,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,IAAI,CAuBN;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,IAAI,CAYpE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,QAAQ,CAAC,IAAI,EACrB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,OAAO,CAST;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,QAAQ,CAAC,iBAAiB,EAChC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,IAAI,CAEN;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,CAAC,cAAc,EAC7B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,OAAO,CAMT;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,OAAO,CAYlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,OAAO,CAa/D"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LINK_RESOLVE_STRINGS = exports.LINK_RESOLVE_KEYS = exports.LINK_TYPE_NAMES = exports.LINK_RECEIVER_NAMES = exports.DEFINE_LINK = void 0;
|
|
4
|
+
exports.normalizeReceiverName = normalizeReceiverName;
|
|
5
|
+
exports.isLinkTypeAnnotation = isLinkTypeAnnotation;
|
|
6
|
+
exports.isLinkResolveCall = isLinkResolveCall;
|
|
7
|
+
exports.trackLinkBinding = trackLinkBinding;
|
|
8
|
+
exports.getReceiverName = getReceiverName;
|
|
9
|
+
exports.isLinkReceiver = isLinkReceiver;
|
|
10
|
+
exports.trackDefineLinkImports = trackDefineLinkImports;
|
|
11
|
+
exports.isDefineLinkCall = isDefineLinkCall;
|
|
12
|
+
exports.isLinkableMemberChain = isLinkableMemberChain;
|
|
13
|
+
exports.hasLinkableInChain = hasLinkableInChain;
|
|
14
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
15
|
+
const container_1 = require("./container");
|
|
16
|
+
const service_scope_1 = require("./service-scope");
|
|
17
|
+
exports.DEFINE_LINK = "defineLink";
|
|
18
|
+
/**
|
|
19
|
+
* Receiver names that identify Medusa's Link service, normalized by
|
|
20
|
+
* {@link normalizeReceiverName} so casing and separators don't matter
|
|
21
|
+
* (`remoteLink`, `remote_link`, and `link_` all collapse into this set).
|
|
22
|
+
*/
|
|
23
|
+
exports.LINK_RECEIVER_NAMES = new Set([
|
|
24
|
+
"link",
|
|
25
|
+
"links",
|
|
26
|
+
"remotelink",
|
|
27
|
+
"remotelinks",
|
|
28
|
+
"linkmodule",
|
|
29
|
+
"linkmodules",
|
|
30
|
+
]);
|
|
31
|
+
/** Type names that identify a binding as Medusa's Link service. */
|
|
32
|
+
exports.LINK_TYPE_NAMES = new Set([
|
|
33
|
+
"Link",
|
|
34
|
+
"ILink",
|
|
35
|
+
"ILinkModule",
|
|
36
|
+
"ILinkModuleService",
|
|
37
|
+
"RemoteLink",
|
|
38
|
+
"IRemoteLink",
|
|
39
|
+
]);
|
|
40
|
+
/**
|
|
41
|
+
* `ContainerRegistrationKeys` / `Modules` members that resolve the Link
|
|
42
|
+
* service. `REMOTE_LINK` is the deprecated pre-v2.2.0 key.
|
|
43
|
+
*/
|
|
44
|
+
exports.LINK_RESOLVE_KEYS = new Set([
|
|
45
|
+
"LINK",
|
|
46
|
+
"LINK_MODULES",
|
|
47
|
+
"REMOTE_LINK",
|
|
48
|
+
]);
|
|
49
|
+
/** String registration keys that resolve the Link service. */
|
|
50
|
+
exports.LINK_RESOLVE_STRINGS = new Set([
|
|
51
|
+
"link",
|
|
52
|
+
"link_modules",
|
|
53
|
+
"remoteLink",
|
|
54
|
+
]);
|
|
55
|
+
/** Lowercases and strips separators so `remote_link` and `remoteLink` match. */
|
|
56
|
+
function normalizeReceiverName(name) {
|
|
57
|
+
return name.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
58
|
+
}
|
|
59
|
+
/** True when a type annotation names one of {@link LINK_TYPE_NAMES}. */
|
|
60
|
+
function isLinkTypeAnnotation(annotation) {
|
|
61
|
+
const typeNode = annotation?.typeAnnotation;
|
|
62
|
+
return (typeNode?.type === utils_1.AST_NODE_TYPES.TSTypeReference &&
|
|
63
|
+
typeNode.typeName.type === utils_1.AST_NODE_TYPES.Identifier &&
|
|
64
|
+
exports.LINK_TYPE_NAMES.has(typeNode.typeName.name));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* True when `node` is a container resolution that yields the Link service —
|
|
68
|
+
* `container.resolve(ContainerRegistrationKeys.LINK)`, `resolve(Modules.LINK)`,
|
|
69
|
+
* `resolve<Link>(...)`, or `resolve("link_modules")`. Unwraps `await`.
|
|
70
|
+
*/
|
|
71
|
+
function isLinkResolveCall(node) {
|
|
72
|
+
let expression = node;
|
|
73
|
+
while (expression?.type === utils_1.AST_NODE_TYPES.AwaitExpression) {
|
|
74
|
+
expression = expression.argument;
|
|
75
|
+
}
|
|
76
|
+
if (expression?.type !== utils_1.AST_NODE_TYPES.CallExpression ||
|
|
77
|
+
!(0, container_1.isResolveCallee)(expression.callee)) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
const typeArgument = expression.typeArguments?.params[0];
|
|
81
|
+
if (typeArgument?.type === utils_1.AST_NODE_TYPES.TSTypeReference &&
|
|
82
|
+
typeArgument.typeName.type === utils_1.AST_NODE_TYPES.Identifier &&
|
|
83
|
+
exports.LINK_TYPE_NAMES.has(typeArgument.typeName.name)) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
const key = expression.arguments[0];
|
|
87
|
+
if (!key) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
if (key.type === utils_1.AST_NODE_TYPES.Literal && typeof key.value === "string") {
|
|
91
|
+
return exports.LINK_RESOLVE_STRINGS.has(key.value);
|
|
92
|
+
}
|
|
93
|
+
return (key.type === utils_1.AST_NODE_TYPES.MemberExpression &&
|
|
94
|
+
!key.computed &&
|
|
95
|
+
key.property.type === utils_1.AST_NODE_TYPES.Identifier &&
|
|
96
|
+
exports.LINK_RESOLVE_KEYS.has(key.property.name));
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Records the local name of a `VariableDeclarator` or `PropertyDefinition`
|
|
100
|
+
* that holds the Link service, recognized either by its type annotation or by
|
|
101
|
+
* a container resolution initializer.
|
|
102
|
+
*
|
|
103
|
+
* Call from the matching visitors; pair with {@link isLinkReceiver}.
|
|
104
|
+
*/
|
|
105
|
+
function trackLinkBinding(node, localNames) {
|
|
106
|
+
if (node.type === utils_1.AST_NODE_TYPES.VariableDeclarator) {
|
|
107
|
+
if (node.id.type !== utils_1.AST_NODE_TYPES.Identifier) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (isLinkTypeAnnotation(node.id.typeAnnotation) ||
|
|
111
|
+
isLinkResolveCall(node.init)) {
|
|
112
|
+
localNames.add(node.id.name);
|
|
113
|
+
}
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (node.computed || node.key.type !== utils_1.AST_NODE_TYPES.Identifier) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (isLinkTypeAnnotation(node.typeAnnotation) ||
|
|
120
|
+
isLinkResolveCall(node.value)) {
|
|
121
|
+
localNames.add(node.key.name);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/** The name a call's receiver is known by, e.g. `link`, `this.link_`. */
|
|
125
|
+
function getReceiverName(object) {
|
|
126
|
+
if (object.type === utils_1.AST_NODE_TYPES.Identifier) {
|
|
127
|
+
return object.name;
|
|
128
|
+
}
|
|
129
|
+
if (object.type === utils_1.AST_NODE_TYPES.MemberExpression &&
|
|
130
|
+
!object.computed &&
|
|
131
|
+
object.property.type === utils_1.AST_NODE_TYPES.Identifier) {
|
|
132
|
+
return object.property.name;
|
|
133
|
+
}
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* True when `object` is recognizable as Medusa's Link service — either a name
|
|
138
|
+
* tracked by {@link trackLinkBinding} or one of {@link LINK_RECEIVER_NAMES}.
|
|
139
|
+
*
|
|
140
|
+
* Without this gate a rule matching link method names would also match
|
|
141
|
+
* identically-named methods on unrelated third-party SDKs.
|
|
142
|
+
*/
|
|
143
|
+
function isLinkReceiver(object, localNames) {
|
|
144
|
+
const receiver = getReceiverName(object);
|
|
145
|
+
if (!receiver) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
return (localNames.has(receiver) ||
|
|
149
|
+
exports.LINK_RECEIVER_NAMES.has(normalizeReceiverName(receiver)));
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Records local names bound to `defineLink` from `@medusajs/framework/utils`
|
|
153
|
+
* (honors `import { defineLink as dl }`).
|
|
154
|
+
*
|
|
155
|
+
* Call from an `ImportDeclaration` visitor.
|
|
156
|
+
*/
|
|
157
|
+
function trackDefineLinkImports(node, localNames) {
|
|
158
|
+
(0, service_scope_1.trackFrameworkUtilsImports)(node, { [exports.DEFINE_LINK]: localNames });
|
|
159
|
+
}
|
|
160
|
+
/** True when `node` calls a tracked `defineLink` binding. */
|
|
161
|
+
function isDefineLinkCall(node, localNames) {
|
|
162
|
+
return (localNames.size > 0 &&
|
|
163
|
+
node.callee.type === utils_1.AST_NODE_TYPES.Identifier &&
|
|
164
|
+
localNames.has(node.callee.name));
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Matches `<X>.linkable.<y>` at any depth on `<X>`, e.g.
|
|
168
|
+
* `ProductModule.linkable.product` or `foo.bar.linkable.product`.
|
|
169
|
+
*/
|
|
170
|
+
function isLinkableMemberChain(node) {
|
|
171
|
+
if (node.type !== utils_1.AST_NODE_TYPES.MemberExpression || node.computed) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
const object = node.object;
|
|
175
|
+
if (object.type !== utils_1.AST_NODE_TYPES.MemberExpression || object.computed) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
return (object.property.type === utils_1.AST_NODE_TYPES.Identifier &&
|
|
179
|
+
object.property.name === "linkable");
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Walks a member chain (e.g. `BlogModule.linkable.post.id`) and returns true
|
|
183
|
+
* when any segment is a non-computed `.linkable` access.
|
|
184
|
+
*/
|
|
185
|
+
function hasLinkableInChain(node) {
|
|
186
|
+
let current = node;
|
|
187
|
+
while (current && current.type === utils_1.AST_NODE_TYPES.MemberExpression) {
|
|
188
|
+
if (!current.computed &&
|
|
189
|
+
current.property.type === utils_1.AST_NODE_TYPES.Identifier &&
|
|
190
|
+
current.property.name === "linkable") {
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
current = current.object;
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/util/link.ts"],"names":[],"mappings":";;;AAiDA,sDAEC;AAGD,oDASC;AAOD,8CAoCC;AASD,4CA0BC;AAGD,0CAYC;AASD,wCAYC;AAQD,wDAKC;AAGD,4CASC;AAMD,sDAYC;AAMD,gDAaC;AA9OD,oDAAyD;AACzD,2CAA6C;AAC7C,mDAA4D;AAE/C,QAAA,WAAW,GAAG,YAAY,CAAA;AAEvC;;;;GAIG;AACU,QAAA,mBAAmB,GAAwB,IAAI,GAAG,CAAC;IAC9D,MAAM;IACN,OAAO;IACP,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,aAAa;CACd,CAAC,CAAA;AAEF,mEAAmE;AACtD,QAAA,eAAe,GAAwB,IAAI,GAAG,CAAC;IAC1D,MAAM;IACN,OAAO;IACP,aAAa;IACb,oBAAoB;IACpB,YAAY;IACZ,aAAa;CACd,CAAC,CAAA;AAEF;;;GAGG;AACU,QAAA,iBAAiB,GAAwB,IAAI,GAAG,CAAC;IAC5D,MAAM;IACN,cAAc;IACd,aAAa;CACd,CAAC,CAAA;AAEF,8DAA8D;AACjD,QAAA,oBAAoB,GAAwB,IAAI,GAAG,CAAC;IAC/D,MAAM;IACN,cAAc;IACd,YAAY;CACb,CAAC,CAAA;AAEF,gFAAgF;AAChF,SAAgB,qBAAqB,CAAC,IAAY;IAChD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;AACrD,CAAC;AAED,wEAAwE;AACxE,SAAgB,oBAAoB,CAClC,UAAiD;IAEjD,MAAM,QAAQ,GAAG,UAAU,EAAE,cAAc,CAAA;IAC3C,OAAO,CACL,QAAQ,EAAE,IAAI,KAAK,sBAAc,CAAC,eAAe;QACjD,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU;QACpD,uBAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC5C,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAC/B,IAAsC;IAEtC,IAAI,UAAU,GAAG,IAAI,CAAA;IACrB,OAAO,UAAU,EAAE,IAAI,KAAK,sBAAc,CAAC,eAAe,EAAE,CAAC;QAC3D,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAA;IAClC,CAAC;IACD,IACE,UAAU,EAAE,IAAI,KAAK,sBAAc,CAAC,cAAc;QAClD,CAAC,IAAA,2BAAe,EAAC,UAAU,CAAC,MAAM,CAAC,EACnC,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IACxD,IACE,YAAY,EAAE,IAAI,KAAK,sBAAc,CAAC,eAAe;QACrD,YAAY,CAAC,QAAQ,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU;QACxD,uBAAe,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC/C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACnC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,sBAAc,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzE,OAAO,4BAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,CACL,GAAG,CAAC,IAAI,KAAK,sBAAc,CAAC,gBAAgB;QAC5C,CAAC,GAAG,CAAC,QAAQ;QACb,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU;QAC/C,yBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CACzC,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC9B,IAA+D,EAC/D,UAAuB;IAEvB,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAc,CAAC,kBAAkB,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU,EAAE,CAAC;YAC/C,OAAM;QACR,CAAC;QACD,IACE,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;YAC5C,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAC5B,CAAC;YACD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;QAC9B,CAAC;QACD,OAAM;IACR,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU,EAAE,CAAC;QACjE,OAAM;IACR,CAAC;IACD,IACE,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC;QACzC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAC7B,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,SAAgB,eAAe,CAAC,MAAqB;IACnD,IAAI,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC,IAAI,CAAA;IACpB,CAAC;IACD,IACE,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,gBAAgB;QAC/C,CAAC,MAAM,CAAC,QAAQ;QAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU,EAClD,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA;IAC7B,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,cAAc,CAC5B,MAAqB,EACrB,UAA+B;IAE/B,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,CACL,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;QACxB,2BAAmB,CAAC,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CACzD,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,sBAAsB,CACpC,IAAgC,EAChC,UAAuB;IAEvB,IAAA,0CAA0B,EAAC,IAAI,EAAE,EAAE,CAAC,mBAAW,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;AACjE,CAAC;AAED,6DAA6D;AAC7D,SAAgB,gBAAgB,CAC9B,IAA6B,EAC7B,UAA+B;IAE/B,OAAO,CACL,UAAU,CAAC,IAAI,GAAG,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU;QAC9C,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CACjC,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,IAAmB;IACvD,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAc,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,gBAAgB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACvE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,CACL,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU;QAClD,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,CACpC,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,IAAmB;IACpD,IAAI,OAAO,GAA8B,IAAI,CAAA;IAC7C,OAAO,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,sBAAc,CAAC,gBAAgB,EAAE,CAAC;QACnE,IACE,CAAC,OAAO,CAAC,QAAQ;YACjB,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU;YACnD,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,EACpC,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;IAC1B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@medusajs/eslint-plugin",
|
|
3
|
-
"version": "2.21.
|
|
3
|
+
"version": "2.21.1-preview-20260917150924",
|
|
4
4
|
"description": "Official ESLint plugin for Medusa projects. Enforces Medusa's framework conventions across API routes, modules, workflows, subscribers, jobs, admin extensions, and module links.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|