@fedify/lint 2.4.0-dev.2190 → 2.4.0-dev.2200
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/README.md +6 -0
- package/deno.json +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/{outbox-listener-delivery-required-CUn9pnIN.js → outbox-listener-delivery-required-BqLlqa_d.js} +20 -3
- package/dist/{outbox-listener-delivery-required-DYdl7PTJ.cjs → outbox-listener-delivery-required-C_hP9Cqy.cjs} +20 -3
- package/dist/oxlint.cjs +1 -1
- package/dist/oxlint.js +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -132,6 +132,12 @@ federation code:
|
|
|
132
132
|
- **`actor-upload-media-property-mismatch`**: Validates endpoints.uploadMedia
|
|
133
133
|
URI from `getMediaUploaderUri`
|
|
134
134
|
|
|
135
|
+
The mismatch rules for actor `id`, `inbox`, `outbox`, `followers`, `following`,
|
|
136
|
+
`liked`, `featured`, and `featuredTags` also accept the corresponding
|
|
137
|
+
`getPortable*Uri()` method. They accept an inline
|
|
138
|
+
`toCompatibleEf61Id(ctx.getPortable*Uri(identifier, did), gateway)` call for
|
|
139
|
+
gateway-compatible IDs.
|
|
140
|
+
|
|
135
141
|
### Other rules
|
|
136
142
|
|
|
137
143
|
- **`collection-filtering-not-implemented`**: Warns about missing collection
|
package/deno.json
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -24,7 +24,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
24
24
|
enumerable: true
|
|
25
25
|
}) : target, mod));
|
|
26
26
|
//#endregion
|
|
27
|
-
const require_outbox_listener_delivery_required = require("./outbox-listener-delivery-required-
|
|
27
|
+
const require_outbox_listener_delivery_required = require("./outbox-listener-delivery-required-C_hP9Cqy.cjs");
|
|
28
28
|
let _fxts_core = require("@fxts/core");
|
|
29
29
|
let _typescript_eslint_parser = require("@typescript-eslint/parser");
|
|
30
30
|
_typescript_eslint_parser = __toESM(_typescript_eslint_parser, 1);
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as name, C as eslint$5, D as eslint$11, E as eslint$10, O as eslint$21, S as eslint$4, T as eslint$13, _ as eslint$15, a as eslint$23, b as eslint$2, c as eslint$16, d as eslint$22, f as eslint$6, g as eslint$14, h as eslint$9, i as eslint$27, j as version, k as RULE_IDS, l as eslint$17, m as eslint$8, n as eslint$25, o as eslint$18, p as eslint$7, r as eslint$26, s as eslint$19, t as eslint$24, u as eslint$20, v as eslint$1, w as eslint$12, x as eslint$3, y as eslint } from "./outbox-listener-delivery-required-
|
|
1
|
+
import { A as name, C as eslint$5, D as eslint$11, E as eslint$10, O as eslint$21, S as eslint$4, T as eslint$13, _ as eslint$15, a as eslint$23, b as eslint$2, c as eslint$16, d as eslint$22, f as eslint$6, g as eslint$14, h as eslint$9, i as eslint$27, j as version, k as RULE_IDS, l as eslint$17, m as eslint$8, n as eslint$25, o as eslint$18, p as eslint$7, r as eslint$26, s as eslint$19, t as eslint$24, u as eslint$20, v as eslint$1, w as eslint$12, x as eslint$3, y as eslint } from "./outbox-listener-delivery-required-BqLlqa_d.js";
|
|
2
2
|
import { fromEntries, keys, map, pipe } from "@fxts/core";
|
|
3
3
|
import parser from "@typescript-eslint/parser";
|
|
4
4
|
//#region src/index.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { always, every, head, isEmpty, isObject, negate, pipe, pipeLazy, prop, some, toArray, unless, when } from "@fxts/core";
|
|
2
2
|
//#region deno.json
|
|
3
3
|
var name = "@fedify/lint";
|
|
4
|
-
var version = "2.4.0-dev.
|
|
4
|
+
var version = "2.4.0-dev.2200+e588a43c";
|
|
5
5
|
//#endregion
|
|
6
6
|
//#region src/lib/const.ts
|
|
7
7
|
/**
|
|
@@ -14,6 +14,7 @@ const properties = {
|
|
|
14
14
|
name: "id",
|
|
15
15
|
path: ["id"],
|
|
16
16
|
getter: "getActorUri",
|
|
17
|
+
portableGetter: "getPortableActorUri",
|
|
17
18
|
setter: "setActorDispatcher",
|
|
18
19
|
requiresIdentifier: true
|
|
19
20
|
},
|
|
@@ -21,6 +22,7 @@ const properties = {
|
|
|
21
22
|
name: "following",
|
|
22
23
|
path: ["following"],
|
|
23
24
|
getter: "getFollowingUri",
|
|
25
|
+
portableGetter: "getPortableFollowingUri",
|
|
24
26
|
setter: "setFollowingDispatcher",
|
|
25
27
|
requiresIdentifier: true
|
|
26
28
|
},
|
|
@@ -28,6 +30,7 @@ const properties = {
|
|
|
28
30
|
name: "followers",
|
|
29
31
|
path: ["followers"],
|
|
30
32
|
getter: "getFollowersUri",
|
|
33
|
+
portableGetter: "getPortableFollowersUri",
|
|
31
34
|
setter: "setFollowersDispatcher",
|
|
32
35
|
requiresIdentifier: true
|
|
33
36
|
},
|
|
@@ -35,6 +38,7 @@ const properties = {
|
|
|
35
38
|
name: "outbox",
|
|
36
39
|
path: ["outbox"],
|
|
37
40
|
getter: "getOutboxUri",
|
|
41
|
+
portableGetter: "getPortableOutboxUri",
|
|
38
42
|
setter: "setOutboxDispatcher",
|
|
39
43
|
requiresIdentifier: true
|
|
40
44
|
},
|
|
@@ -42,6 +46,7 @@ const properties = {
|
|
|
42
46
|
name: "inbox",
|
|
43
47
|
path: ["inbox"],
|
|
44
48
|
getter: "getInboxUri",
|
|
49
|
+
portableGetter: "getPortableInboxUri",
|
|
45
50
|
setter: "setInboxListeners",
|
|
46
51
|
requiresIdentifier: true
|
|
47
52
|
},
|
|
@@ -49,6 +54,7 @@ const properties = {
|
|
|
49
54
|
name: "liked",
|
|
50
55
|
path: ["liked"],
|
|
51
56
|
getter: "getLikedUri",
|
|
57
|
+
portableGetter: "getPortableLikedUri",
|
|
52
58
|
setter: "setLikedDispatcher",
|
|
53
59
|
requiresIdentifier: true
|
|
54
60
|
},
|
|
@@ -56,6 +62,7 @@ const properties = {
|
|
|
56
62
|
name: "featured",
|
|
57
63
|
path: ["featured"],
|
|
58
64
|
getter: "getFeaturedUri",
|
|
65
|
+
portableGetter: "getPortableFeaturedUri",
|
|
59
66
|
setter: "setFeaturedDispatcher",
|
|
60
67
|
requiresIdentifier: true
|
|
61
68
|
},
|
|
@@ -63,6 +70,7 @@ const properties = {
|
|
|
63
70
|
name: "featuredTags",
|
|
64
71
|
path: ["featuredTags"],
|
|
65
72
|
getter: "getFeaturedTagsUri",
|
|
73
|
+
portableGetter: "getPortableFeaturedTagsUri",
|
|
66
74
|
setter: "setFeaturedTagsDispatcher",
|
|
67
75
|
requiresIdentifier: true
|
|
68
76
|
},
|
|
@@ -470,11 +478,17 @@ const isIdentifierWithName = (name) => (node) => allOf(isNodeType("Identifier"),
|
|
|
470
478
|
/**
|
|
471
479
|
* Checks if a node is a CallExpression calling the expected context method.
|
|
472
480
|
*/
|
|
473
|
-
const isExpectedMethodCall = ({ ctxName, idName, methodName, requiresIdentifier }) => (node) => {
|
|
481
|
+
const isExpectedMethodCall = ({ ctxName, idName, methodName, requiresIdentifier }, identifierFirst = false) => (node) => {
|
|
474
482
|
if (!isNodeType("CallExpression")(node) || !hasMemberExpressionCallee(node) || !isIdentifierWithName(ctxName)(node.callee.object) || !isIdentifierWithName(methodName)(node.callee.property)) return false;
|
|
475
483
|
if (!requiresIdentifier) return isEmpty(node.arguments);
|
|
484
|
+
if (identifierFirst) return node.arguments.length > 0 && isIdentifierWithName(idName)(node.arguments[0]);
|
|
476
485
|
return allOf(negate(isEmpty), some(isIdentifierWithName(idName)))(node.arguments);
|
|
477
486
|
};
|
|
487
|
+
/** Accepts an inline compatible ID built from the matching portable URI. */
|
|
488
|
+
const isCompatiblePortableMethodCall = (context, portableGetter) => (node) => isNodeType("CallExpression")(node) && isIdentifierWithName("toCompatibleEf61Id")(node.callee) && node.arguments.length > 0 && isExpectedMethodCall({
|
|
489
|
+
...context,
|
|
490
|
+
methodName: portableGetter
|
|
491
|
+
}, true)(node.arguments[0]);
|
|
478
492
|
/**
|
|
479
493
|
* Extracts parameter names from a function.
|
|
480
494
|
*/
|
|
@@ -503,7 +517,10 @@ function createMismatchRule(config, describe) {
|
|
|
503
517
|
requiresIdentifier: config.requiresIdentifier
|
|
504
518
|
};
|
|
505
519
|
if (!createPropertySearcher(createPropertyChecker(Boolean)(config.path))(dispatcherArg.body)) return;
|
|
506
|
-
if (!createPropertySearcher(createPropertyChecker(isExpectedMethodCall(methodCallContext))
|
|
520
|
+
if (!createPropertySearcher(createPropertyChecker((value) => isExpectedMethodCall(methodCallContext)(value) || config.portableGetter != null && (isExpectedMethodCall({
|
|
521
|
+
...methodCallContext,
|
|
522
|
+
methodName: config.portableGetter
|
|
523
|
+
}, true)(value) || isCompatiblePortableMethodCall(methodCallContext, config.portableGetter)(value)))(config.path))(dispatcherArg.body)) context.report({
|
|
507
524
|
node: dispatcherArg,
|
|
508
525
|
...describe(methodCallContext)
|
|
509
526
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
let _fxts_core = require("@fxts/core");
|
|
2
2
|
//#region deno.json
|
|
3
3
|
var name = "@fedify/lint";
|
|
4
|
-
var version = "2.4.0-dev.
|
|
4
|
+
var version = "2.4.0-dev.2200+e588a43c";
|
|
5
5
|
//#endregion
|
|
6
6
|
//#region src/lib/const.ts
|
|
7
7
|
/**
|
|
@@ -14,6 +14,7 @@ const properties = {
|
|
|
14
14
|
name: "id",
|
|
15
15
|
path: ["id"],
|
|
16
16
|
getter: "getActorUri",
|
|
17
|
+
portableGetter: "getPortableActorUri",
|
|
17
18
|
setter: "setActorDispatcher",
|
|
18
19
|
requiresIdentifier: true
|
|
19
20
|
},
|
|
@@ -21,6 +22,7 @@ const properties = {
|
|
|
21
22
|
name: "following",
|
|
22
23
|
path: ["following"],
|
|
23
24
|
getter: "getFollowingUri",
|
|
25
|
+
portableGetter: "getPortableFollowingUri",
|
|
24
26
|
setter: "setFollowingDispatcher",
|
|
25
27
|
requiresIdentifier: true
|
|
26
28
|
},
|
|
@@ -28,6 +30,7 @@ const properties = {
|
|
|
28
30
|
name: "followers",
|
|
29
31
|
path: ["followers"],
|
|
30
32
|
getter: "getFollowersUri",
|
|
33
|
+
portableGetter: "getPortableFollowersUri",
|
|
31
34
|
setter: "setFollowersDispatcher",
|
|
32
35
|
requiresIdentifier: true
|
|
33
36
|
},
|
|
@@ -35,6 +38,7 @@ const properties = {
|
|
|
35
38
|
name: "outbox",
|
|
36
39
|
path: ["outbox"],
|
|
37
40
|
getter: "getOutboxUri",
|
|
41
|
+
portableGetter: "getPortableOutboxUri",
|
|
38
42
|
setter: "setOutboxDispatcher",
|
|
39
43
|
requiresIdentifier: true
|
|
40
44
|
},
|
|
@@ -42,6 +46,7 @@ const properties = {
|
|
|
42
46
|
name: "inbox",
|
|
43
47
|
path: ["inbox"],
|
|
44
48
|
getter: "getInboxUri",
|
|
49
|
+
portableGetter: "getPortableInboxUri",
|
|
45
50
|
setter: "setInboxListeners",
|
|
46
51
|
requiresIdentifier: true
|
|
47
52
|
},
|
|
@@ -49,6 +54,7 @@ const properties = {
|
|
|
49
54
|
name: "liked",
|
|
50
55
|
path: ["liked"],
|
|
51
56
|
getter: "getLikedUri",
|
|
57
|
+
portableGetter: "getPortableLikedUri",
|
|
52
58
|
setter: "setLikedDispatcher",
|
|
53
59
|
requiresIdentifier: true
|
|
54
60
|
},
|
|
@@ -56,6 +62,7 @@ const properties = {
|
|
|
56
62
|
name: "featured",
|
|
57
63
|
path: ["featured"],
|
|
58
64
|
getter: "getFeaturedUri",
|
|
65
|
+
portableGetter: "getPortableFeaturedUri",
|
|
59
66
|
setter: "setFeaturedDispatcher",
|
|
60
67
|
requiresIdentifier: true
|
|
61
68
|
},
|
|
@@ -63,6 +70,7 @@ const properties = {
|
|
|
63
70
|
name: "featuredTags",
|
|
64
71
|
path: ["featuredTags"],
|
|
65
72
|
getter: "getFeaturedTagsUri",
|
|
73
|
+
portableGetter: "getPortableFeaturedTagsUri",
|
|
66
74
|
setter: "setFeaturedTagsDispatcher",
|
|
67
75
|
requiresIdentifier: true
|
|
68
76
|
},
|
|
@@ -470,11 +478,17 @@ const isIdentifierWithName = (name) => (node) => allOf(isNodeType("Identifier"),
|
|
|
470
478
|
/**
|
|
471
479
|
* Checks if a node is a CallExpression calling the expected context method.
|
|
472
480
|
*/
|
|
473
|
-
const isExpectedMethodCall = ({ ctxName, idName, methodName, requiresIdentifier }) => (node) => {
|
|
481
|
+
const isExpectedMethodCall = ({ ctxName, idName, methodName, requiresIdentifier }, identifierFirst = false) => (node) => {
|
|
474
482
|
if (!isNodeType("CallExpression")(node) || !hasMemberExpressionCallee(node) || !isIdentifierWithName(ctxName)(node.callee.object) || !isIdentifierWithName(methodName)(node.callee.property)) return false;
|
|
475
483
|
if (!requiresIdentifier) return (0, _fxts_core.isEmpty)(node.arguments);
|
|
484
|
+
if (identifierFirst) return node.arguments.length > 0 && isIdentifierWithName(idName)(node.arguments[0]);
|
|
476
485
|
return allOf((0, _fxts_core.negate)(_fxts_core.isEmpty), (0, _fxts_core.some)(isIdentifierWithName(idName)))(node.arguments);
|
|
477
486
|
};
|
|
487
|
+
/** Accepts an inline compatible ID built from the matching portable URI. */
|
|
488
|
+
const isCompatiblePortableMethodCall = (context, portableGetter) => (node) => isNodeType("CallExpression")(node) && isIdentifierWithName("toCompatibleEf61Id")(node.callee) && node.arguments.length > 0 && isExpectedMethodCall({
|
|
489
|
+
...context,
|
|
490
|
+
methodName: portableGetter
|
|
491
|
+
}, true)(node.arguments[0]);
|
|
478
492
|
/**
|
|
479
493
|
* Extracts parameter names from a function.
|
|
480
494
|
*/
|
|
@@ -503,7 +517,10 @@ function createMismatchRule(config, describe) {
|
|
|
503
517
|
requiresIdentifier: config.requiresIdentifier
|
|
504
518
|
};
|
|
505
519
|
if (!createPropertySearcher(createPropertyChecker(Boolean)(config.path))(dispatcherArg.body)) return;
|
|
506
|
-
if (!createPropertySearcher(createPropertyChecker(isExpectedMethodCall(methodCallContext))
|
|
520
|
+
if (!createPropertySearcher(createPropertyChecker((value) => isExpectedMethodCall(methodCallContext)(value) || config.portableGetter != null && (isExpectedMethodCall({
|
|
521
|
+
...methodCallContext,
|
|
522
|
+
methodName: config.portableGetter
|
|
523
|
+
}, true)(value) || isCompatiblePortableMethodCall(methodCallContext, config.portableGetter)(value)))(config.path))(dispatcherArg.body)) context.report({
|
|
507
524
|
node: dispatcherArg,
|
|
508
525
|
...describe(methodCallContext)
|
|
509
526
|
});
|
package/dist/oxlint.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_outbox_listener_delivery_required = require("./outbox-listener-delivery-required-
|
|
1
|
+
const require_outbox_listener_delivery_required = require("./outbox-listener-delivery-required-C_hP9Cqy.cjs");
|
|
2
2
|
//#region src/oxlint.ts
|
|
3
3
|
const rules = {
|
|
4
4
|
[require_outbox_listener_delivery_required.RULE_IDS.actorIdMismatch]: require_outbox_listener_delivery_required.eslint$18,
|
package/dist/oxlint.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as name, C as eslint$5, D as eslint$11, E as eslint$10, O as eslint$21, S as eslint$4, T as eslint$13, _ as eslint$15, a as eslint$23, b as eslint$2, c as eslint$16, d as eslint$22, f as eslint$6, g as eslint$14, h as eslint$9, i as eslint$27, j as version, k as RULE_IDS, l as eslint$17, m as eslint$8, n as eslint$25, o as eslint$18, p as eslint$7, r as eslint$26, s as eslint$19, t as eslint$24, u as eslint$20, v as eslint$1, w as eslint$12, x as eslint$3, y as eslint } from "./outbox-listener-delivery-required-
|
|
1
|
+
import { A as name, C as eslint$5, D as eslint$11, E as eslint$10, O as eslint$21, S as eslint$4, T as eslint$13, _ as eslint$15, a as eslint$23, b as eslint$2, c as eslint$16, d as eslint$22, f as eslint$6, g as eslint$14, h as eslint$9, i as eslint$27, j as version, k as RULE_IDS, l as eslint$17, m as eslint$8, n as eslint$25, o as eslint$18, p as eslint$7, r as eslint$26, s as eslint$19, t as eslint$24, u as eslint$20, v as eslint$1, w as eslint$12, x as eslint$3, y as eslint } from "./outbox-listener-delivery-required-BqLlqa_d.js";
|
|
2
2
|
//#region src/oxlint.ts
|
|
3
3
|
const rules = {
|
|
4
4
|
[RULE_IDS.actorIdMismatch]: eslint,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fedify/lint",
|
|
3
|
-
"version": "2.4.0-dev.
|
|
3
|
+
"version": "2.4.0-dev.2200+e588a43c",
|
|
4
4
|
"description": "Fedify linting rules and plugins",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Fedify",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
],
|
|
52
52
|
"peerDependencies": {
|
|
53
53
|
"eslint": ">=9.0.0",
|
|
54
|
-
"@fedify/fedify": "^2.4.0-dev.
|
|
54
|
+
"@fedify/fedify": "^2.4.0-dev.2200+e588a43c"
|
|
55
55
|
},
|
|
56
56
|
"peerDependenciesMeta": {
|
|
57
57
|
"eslint": {
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"tsdown": "^0.22.0",
|
|
72
72
|
"typescript": "^6.0.0",
|
|
73
73
|
"@fedify/fixture": "2.0.0",
|
|
74
|
-
"@fedify/vocab": "2.4.0-dev.
|
|
74
|
+
"@fedify/vocab": "2.4.0-dev.2200+e588a43c"
|
|
75
75
|
},
|
|
76
76
|
"scripts": {
|
|
77
77
|
"build:self": "tsdown",
|