@fedify/lint 2.5.0-dev.2541 → 2.5.0-dev.2568

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 CHANGED
@@ -82,6 +82,10 @@ federation code:
82
82
  - **`actor-id-required`**: Ensures all actors have an `id` property
83
83
  - **`actor-id-mismatch`**: Validates that actor IDs match the expected URI
84
84
  from `Context.getActorUri()`
85
+ - **`actor-preferred-username-required`**: Ensures actors expose a stable
86
+ `preferredUsername`
87
+ - **`actor-profile-url-required`**: Ensures actors include a `url` (or
88
+ `urls`) pointing to their human-readable profile page
85
89
  - **`actor-public-key-required`**: Ensures actors have public keys for
86
90
  HTTP Signatures
87
91
  - **`actor-assertion-method-required`**: Validates assertion methods for
package/deno.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fedify/lint",
3
- "version": "2.5.0-dev.2541+d39a2437",
3
+ "version": "2.5.0-dev.2568+889927c4",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": "./src/mod.ts",
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-yvQhmuwt.cjs");
27
+ const require_outbox_listener_delivery_required = require("./outbox-listener-delivery-required-DaY8FcID.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);
@@ -34,29 +34,30 @@ _typescript_eslint_parser = __toESM(_typescript_eslint_parser, 1);
34
34
  * Provides lint rules for validating Fedify federation code.
35
35
  */
36
36
  const rules = {
37
- [require_outbox_listener_delivery_required.RULE_IDS.actorIdMismatch]: require_outbox_listener_delivery_required.eslint$20,
38
- [require_outbox_listener_delivery_required.RULE_IDS.actorIdRequired]: require_outbox_listener_delivery_required.eslint$19,
39
- [require_outbox_listener_delivery_required.RULE_IDS.actorFollowingPropertyRequired]: require_outbox_listener_delivery_required.eslint$21,
40
- [require_outbox_listener_delivery_required.RULE_IDS.actorFollowingPropertyMismatch]: require_outbox_listener_delivery_required.eslint$22,
41
- [require_outbox_listener_delivery_required.RULE_IDS.actorFollowersPropertyRequired]: require_outbox_listener_delivery_required.eslint$23,
42
- [require_outbox_listener_delivery_required.RULE_IDS.actorFollowersPropertyMismatch]: require_outbox_listener_delivery_required.eslint$24,
43
- [require_outbox_listener_delivery_required.RULE_IDS.actorOutboxPropertyRequired]: require_outbox_listener_delivery_required.eslint$13,
44
- [require_outbox_listener_delivery_required.RULE_IDS.actorOutboxPropertyMismatch]: require_outbox_listener_delivery_required.eslint$14,
45
- [require_outbox_listener_delivery_required.RULE_IDS.actorLikedPropertyRequired]: require_outbox_listener_delivery_required.eslint$15,
46
- [require_outbox_listener_delivery_required.RULE_IDS.actorLikedPropertyMismatch]: require_outbox_listener_delivery_required.eslint$16,
47
- [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedPropertyRequired]: require_outbox_listener_delivery_required.eslint$27,
48
- [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedPropertyMismatch]: require_outbox_listener_delivery_required.eslint$28,
49
- [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedTagsPropertyRequired]: require_outbox_listener_delivery_required.eslint$25,
50
- [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedTagsPropertyMismatch]: require_outbox_listener_delivery_required.eslint$26,
51
- [require_outbox_listener_delivery_required.RULE_IDS.actorInboxPropertyRequired]: require_outbox_listener_delivery_required.eslint$17,
52
- [require_outbox_listener_delivery_required.RULE_IDS.actorInboxPropertyMismatch]: require_outbox_listener_delivery_required.eslint$18,
37
+ [require_outbox_listener_delivery_required.RULE_IDS.actorIdMismatch]: require_outbox_listener_delivery_required.eslint$21,
38
+ [require_outbox_listener_delivery_required.RULE_IDS.actorIdRequired]: require_outbox_listener_delivery_required.eslint$20,
39
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFollowingPropertyRequired]: require_outbox_listener_delivery_required.eslint$22,
40
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFollowingPropertyMismatch]: require_outbox_listener_delivery_required.eslint$23,
41
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFollowersPropertyRequired]: require_outbox_listener_delivery_required.eslint$24,
42
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFollowersPropertyMismatch]: require_outbox_listener_delivery_required.eslint$25,
43
+ [require_outbox_listener_delivery_required.RULE_IDS.actorOutboxPropertyRequired]: require_outbox_listener_delivery_required.eslint$14,
44
+ [require_outbox_listener_delivery_required.RULE_IDS.actorOutboxPropertyMismatch]: require_outbox_listener_delivery_required.eslint$15,
45
+ [require_outbox_listener_delivery_required.RULE_IDS.actorLikedPropertyRequired]: require_outbox_listener_delivery_required.eslint$16,
46
+ [require_outbox_listener_delivery_required.RULE_IDS.actorLikedPropertyMismatch]: require_outbox_listener_delivery_required.eslint$17,
47
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedPropertyRequired]: require_outbox_listener_delivery_required.eslint$28,
48
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedPropertyMismatch]: require_outbox_listener_delivery_required.eslint$29,
49
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedTagsPropertyRequired]: require_outbox_listener_delivery_required.eslint$26,
50
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedTagsPropertyMismatch]: require_outbox_listener_delivery_required.eslint$27,
51
+ [require_outbox_listener_delivery_required.RULE_IDS.actorInboxPropertyRequired]: require_outbox_listener_delivery_required.eslint$18,
52
+ [require_outbox_listener_delivery_required.RULE_IDS.actorInboxPropertyMismatch]: require_outbox_listener_delivery_required.eslint$19,
53
53
  [require_outbox_listener_delivery_required.RULE_IDS.actorSharedInboxPropertyRequired]: require_outbox_listener_delivery_required.eslint$9,
54
54
  [require_outbox_listener_delivery_required.RULE_IDS.actorSharedInboxPropertyMismatch]: require_outbox_listener_delivery_required.eslint$10,
55
55
  [require_outbox_listener_delivery_required.RULE_IDS.actorUploadMediaPropertyRequired]: require_outbox_listener_delivery_required.eslint$7,
56
56
  [require_outbox_listener_delivery_required.RULE_IDS.actorUploadMediaPropertyMismatch]: require_outbox_listener_delivery_required.eslint$8,
57
57
  [require_outbox_listener_delivery_required.RULE_IDS.actorPublicKeyRequired]: require_outbox_listener_delivery_required.eslint$11,
58
- [require_outbox_listener_delivery_required.RULE_IDS.actorAssertionMethodRequired]: require_outbox_listener_delivery_required.eslint$29,
59
- [require_outbox_listener_delivery_required.RULE_IDS.actorPreferredUsernameRequired]: require_outbox_listener_delivery_required.eslint$12,
58
+ [require_outbox_listener_delivery_required.RULE_IDS.actorAssertionMethodRequired]: require_outbox_listener_delivery_required.eslint$30,
59
+ [require_outbox_listener_delivery_required.RULE_IDS.actorPreferredUsernameRequired]: require_outbox_listener_delivery_required.eslint$13,
60
+ [require_outbox_listener_delivery_required.RULE_IDS.actorProfileUrlRequired]: require_outbox_listener_delivery_required.eslint$12,
60
61
  [require_outbox_listener_delivery_required.RULE_IDS.collectionFilteringNotImplemented]: require_outbox_listener_delivery_required.eslint$6,
61
62
  [require_outbox_listener_delivery_required.RULE_IDS.outboxListenerDeliveryRequired]: require_outbox_listener_delivery_required.eslint,
62
63
  [require_outbox_listener_delivery_required.RULE_IDS.outboxListenerDeliveryNotAwaited]: require_outbox_listener_delivery_required.eslint$1,
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { A as eslint$21, C as eslint$3, D as eslint$13, E as eslint$12, M as name, N as version, O as eslint$10, S as eslint$2, T as eslint$5, _ as eslint$9, a as eslint$28, b as eslint$1, c as eslint$18, d as eslint$17, f as eslint$20, g as eslint$8, h as eslint$7, i as eslint$27, j as RULE_IDS, k as eslint$11, l as eslint$19, m as eslint$6, n as eslint$25, o as eslint$29, p as eslint$22, r as eslint$26, s as eslint$23, t as eslint$24, u as eslint$16, v as eslint$14, w as eslint$4, x as eslint, y as eslint$15 } from "./outbox-listener-delivery-required-wzZRR9jI.js";
1
+ import { A as eslint$11, C as eslint$2, D as eslint$12, E as eslint$5, M as RULE_IDS, N as name, O as eslint$13, P as version, S as eslint, T as eslint$4, _ as eslint$8, a as eslint$29, b as eslint$15, c as eslint$18, d as eslint$17, f as eslint$20, g as eslint$7, h as eslint$6, i as eslint$28, j as eslint$21, k as eslint$10, l as eslint$19, m as eslint$22, n as eslint$26, o as eslint$30, p as eslint$23, r as eslint$27, s as eslint$24, t as eslint$25, u as eslint$16, v as eslint$9, w as eslint$3, x as eslint$1, y as eslint$14 } from "./outbox-listener-delivery-required-CwhiEW-i.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
@@ -30,13 +30,14 @@ const rules = {
30
30
  [RULE_IDS.actorPublicKeyRequired]: eslint$20,
31
31
  [RULE_IDS.actorAssertionMethodRequired]: eslint$21,
32
32
  [RULE_IDS.actorPreferredUsernameRequired]: eslint$22,
33
- [RULE_IDS.collectionFilteringNotImplemented]: eslint$23,
34
- [RULE_IDS.outboxListenerDeliveryRequired]: eslint$24,
35
- [RULE_IDS.outboxListenerDeliveryNotAwaited]: eslint$25,
36
- [RULE_IDS.mediaUploaderObjectUriRequired]: eslint$26,
37
- [RULE_IDS.mediaUploaderAuthorizationRequired]: eslint$27,
38
- [RULE_IDS.denoKvStoreDeprecated]: eslint$28,
39
- [RULE_IDS.denoKvMessageQueueDeprecated]: eslint$29
33
+ [RULE_IDS.actorProfileUrlRequired]: eslint$23,
34
+ [RULE_IDS.collectionFilteringNotImplemented]: eslint$24,
35
+ [RULE_IDS.outboxListenerDeliveryRequired]: eslint$25,
36
+ [RULE_IDS.outboxListenerDeliveryNotAwaited]: eslint$26,
37
+ [RULE_IDS.mediaUploaderObjectUriRequired]: eslint$27,
38
+ [RULE_IDS.mediaUploaderAuthorizationRequired]: eslint$28,
39
+ [RULE_IDS.denoKvStoreDeprecated]: eslint$29,
40
+ [RULE_IDS.denoKvMessageQueueDeprecated]: eslint$30
40
41
  };
41
42
  const recommendedRuleIds = [RULE_IDS.actorIdMismatch, RULE_IDS.actorIdRequired];
42
43
  /**
@@ -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.5.0-dev.2541+d39a2437";
4
+ var version = "2.5.0-dev.2568+889927c4";
5
5
  //#endregion
6
6
  //#region src/lib/const.ts
7
7
  /**
@@ -118,6 +118,16 @@ const properties = {
118
118
  setter: "setActorDispatcher",
119
119
  requiresIdentifier: false,
120
120
  pluralName: "preferredUsernames"
121
+ },
122
+ url: {
123
+ name: "url",
124
+ path: ["url"],
125
+ setter: "setActorDispatcher",
126
+ requiresIdentifier: false,
127
+ pluralName: "urls",
128
+ reason: "remote fediverse software uses it as the link to the actor's profile page",
129
+ recommendation: "Set `url` (or the plural `urls` initializer) to the actor's human-readable profile URL.",
130
+ requireNonEmptyValue: true
121
131
  }
122
132
  };
123
133
  /**
@@ -137,6 +147,7 @@ const RULE_IDS = {
137
147
  actorPublicKeyRequired: "actor-public-key-required",
138
148
  actorAssertionMethodRequired: "actor-assertion-method-required",
139
149
  actorPreferredUsernameRequired: "actor-preferred-username-required",
150
+ actorProfileUrlRequired: "actor-profile-url-required",
140
151
  actorIdMismatch: "actor-id-mismatch",
141
152
  actorFollowingPropertyMismatch: "actor-following-property-mismatch",
142
153
  actorFollowersPropertyMismatch: "actor-followers-property-mismatch",
@@ -163,15 +174,17 @@ const RULE_IDS = {
163
174
  *
164
175
  * @param name - The property name (e.g., "id", "inbox", "following")
165
176
  */
166
- const actorPropertyRequired = ({ setter, path, getter, requiresIdentifier = true }) => {
177
+ const actorPropertyRequired = ({ setter, path, getter, requiresIdentifier = true, reason, recommendation: recommendationOverride }) => {
167
178
  const propertyPath = path.join(".");
168
- return `When \`${setter}\` is configured, the \`${propertyPath}\` property is recommended. ${getter == null ? `Set the \`${propertyPath}\` property directly on the actor object.` : `Use \`${getExpectedCall({
179
+ const defaultRecommendation = getter == null ? `Set the \`${propertyPath}\` property directly on the actor object.` : `Use \`${getExpectedCall({
169
180
  ctxName: "Context",
170
181
  methodName: getter,
171
182
  idName: "identifier",
172
183
  path: path.join("."),
173
184
  requiresIdentifier
174
- })}\` for the \`${propertyPath}\` property URI.`}`;
185
+ })}\` for the \`${propertyPath}\` property URI.`;
186
+ const recommendation = recommendationOverride ?? defaultRecommendation;
187
+ return `When \`${setter}\` is configured, the \`${propertyPath}\` property is recommended${reason == null ? "" : ` because ${reason}`}. ${recommendation}`;
175
188
  };
176
189
  /**
177
190
  * Generates error message for *-mismatch rules.
@@ -249,12 +262,20 @@ const isSetActorDispatcherCall = (node) => allOf(hasMemberExpressionCallee, hasI
249
262
  const hasMinParams = (min) => (fn) => fn.params.length >= min;
250
263
  //#endregion
251
264
  //#region src/lib/property-checker.ts
265
+ const getKeyName = (node) => {
266
+ const key = node.key;
267
+ if (key.type === "Identifier" && !node.computed) return key.name;
268
+ if (key.type === "Literal" && typeof key.value === "string") return key.value;
269
+ return null;
270
+ };
252
271
  /**
253
- * Checks if a node has a key with a specific name.
272
+ * Checks if a node has a key with a specific name, whether the key is written
273
+ * as an identifier (`url`) or as a string literal (`"url"` or `["url"]`).
274
+ * Computed identifier keys stay dynamic and are not matched.
254
275
  */
255
- const hasKeyName = (propertyName) => (node) => pipe(node, prop("key"), allOf(isNodeType("Identifier"), pipeLazy(prop("name"), eq(propertyName))));
276
+ const hasKeyName = (propertyName) => (node) => getKeyName(node) === propertyName;
256
277
  /**
257
- * Checks if a node is a Property with an Identifier key of a specific name.
278
+ * Checks if a node is a Property with a specific key name.
258
279
  */
259
280
  const isPropertyWithName = (propertyName) => (node) => allOf(isNodeType("Property"), hasKeyName(propertyName))(node);
260
281
  /**
@@ -300,10 +321,26 @@ const unwrapTypeScriptExpression = (node) => {
300
321
  }
301
322
  };
302
323
  const isNullLiteral = (node) => node.type === "Literal" && node.value === null;
324
+ const isUndefinedExpression = (node) => node.type === "Identifier" && node.name === "undefined" || node.type === "UnaryExpression" && node.operator === "void";
303
325
  const isTombstoneExpression = (node) => node.type === "NewExpression" && node.callee.type === "Identifier" && node.callee.name === "Tombstone";
326
+ /**
327
+ * Checks whether a property initializer visibly carries a value.
328
+ *
329
+ * A `null` literal, `undefined`, `void`, or an empty array literal means
330
+ * there is no value for rules that require a profile URL, even though the
331
+ * property key is present. TypeScript wrappers such as `as`, `satisfies`,
332
+ * and non-null assertions are unwrapped first.
333
+ */
334
+ const isNonEmptyInitializer = (node) => {
335
+ const value = node.type === "AssignmentPattern" ? node.right : node;
336
+ const expression = unwrapTypeScriptExpression(value);
337
+ if (isNullLiteral(expression) || isUndefinedExpression(expression)) return false;
338
+ if (expression.type === "ArrayExpression") return expression.elements.length > 0;
339
+ return true;
340
+ };
304
341
  const checkBranchWith = (propertyChecker) => (branch) => {
305
342
  const expression = unwrapTypeScriptExpression(branch);
306
- if (isNullLiteral(expression) || isTombstoneExpression(expression)) return true;
343
+ if (isNullLiteral(expression) || isUndefinedExpression(expression) || isTombstoneExpression(expression)) return true;
307
344
  return pipe(expression, cases(isNodeType("ConditionalExpression"), checkConditionalExpression(propertyChecker), pipeLazy(extractObjectExpression, cases(isObject, checkObjectExpression(propertyChecker), always(false)))));
308
345
  };
309
346
  /**
@@ -319,7 +356,10 @@ const extractObjectExpression = cases(isNodeType("NewExpression"), extractFirstO
319
356
  * @param propertyChecker The predicate function to check properties
320
357
  * @returns A function that checks the ReturnStatement
321
358
  */
322
- const checkReturnStatement = (propertyChecker) => (node) => pipe(node, prop("argument"), cases(isObject, checkBranchWith(propertyChecker), always(false)));
359
+ const checkReturnStatement = (propertyChecker) => (node) => {
360
+ if (node.argument == null) return true;
361
+ return checkBranchWith(propertyChecker)(node.argument);
362
+ };
323
363
  /**
324
364
  * Creates a function that recursively checks for a property in an AST node.
325
365
  * @param propertyChecker The predicate function to check properties
@@ -435,8 +475,9 @@ function createRequiredRule(config, description) {
435
475
  const federationTracker = trackFederationVariables();
436
476
  const dispatcherTracker = createDispatcherTracker(config.setter, federationTracker);
437
477
  const actorDispatchers = [];
438
- const propertyChecker = createPropertyChecker(Boolean)(config.path);
439
- const pluralPropertyChecker = config.pluralName == null ? null : createPropertyChecker(Boolean)([...config.path.slice(0, -1), config.pluralName]);
478
+ const valueChecker = config.requireNonEmptyValue ? isNonEmptyInitializer : Boolean;
479
+ const propertyChecker = createPropertyChecker(valueChecker)(config.path);
480
+ const pluralPropertyChecker = config.pluralName == null ? null : createPropertyChecker(valueChecker)([...config.path.slice(0, -1), config.pluralName]);
440
481
  const propertySearcher = createPropertySearcher(pluralPropertyChecker == null ? propertyChecker : (node) => propertyChecker(node) || pluralPropertyChecker(node));
441
482
  return {
442
483
  VariableDeclarator: federationTracker.VariableDeclarator,
@@ -481,7 +522,7 @@ function createRequiredRuleEslint(config) {
481
522
  };
482
523
  }
483
524
  createRequiredRuleDeno(properties.assertionMethod);
484
- const eslint$29 = createRequiredRuleEslint(properties.assertionMethod);
525
+ const eslint$30 = createRequiredRuleEslint(properties.assertionMethod);
485
526
  //#endregion
486
527
  //#region src/lib/mismatch.ts
487
528
  const isIdentifierWithName = (name) => (node) => allOf(isNodeType("Identifier"), isNodeName(name))(node);
@@ -560,39 +601,41 @@ const createMismatchRuleEslint = (config) => ({
560
601
  }))
561
602
  });
562
603
  createMismatchRuleDeno(properties.featured);
563
- const eslint$28 = createMismatchRuleEslint(properties.featured);
604
+ const eslint$29 = createMismatchRuleEslint(properties.featured);
564
605
  createRequiredRuleDeno(properties.featured);
565
- const eslint$27 = createRequiredRuleEslint(properties.featured);
606
+ const eslint$28 = createRequiredRuleEslint(properties.featured);
566
607
  createMismatchRuleDeno(properties.featuredTags);
567
- const eslint$26 = createMismatchRuleEslint(properties.featuredTags);
608
+ const eslint$27 = createMismatchRuleEslint(properties.featuredTags);
568
609
  createRequiredRuleDeno(properties.featuredTags);
569
- const eslint$25 = createRequiredRuleEslint(properties.featuredTags);
610
+ const eslint$26 = createRequiredRuleEslint(properties.featuredTags);
570
611
  createMismatchRuleDeno(properties.followers);
571
- const eslint$24 = createMismatchRuleEslint(properties.followers);
612
+ const eslint$25 = createMismatchRuleEslint(properties.followers);
572
613
  createRequiredRuleDeno(properties.followers);
573
- const eslint$23 = createRequiredRuleEslint(properties.followers);
614
+ const eslint$24 = createRequiredRuleEslint(properties.followers);
574
615
  createMismatchRuleDeno(properties.following);
575
- const eslint$22 = createMismatchRuleEslint(properties.following);
616
+ const eslint$23 = createMismatchRuleEslint(properties.following);
576
617
  createRequiredRuleDeno(properties.following);
577
- const eslint$21 = createRequiredRuleEslint(properties.following);
618
+ const eslint$22 = createRequiredRuleEslint(properties.following);
578
619
  createMismatchRuleDeno(properties.id);
579
- const eslint$20 = createMismatchRuleEslint(properties.id);
620
+ const eslint$21 = createMismatchRuleEslint(properties.id);
580
621
  createRequiredRuleDeno(properties.id);
581
- const eslint$19 = createRequiredRuleEslint(properties.id);
622
+ const eslint$20 = createRequiredRuleEslint(properties.id);
582
623
  createMismatchRuleDeno(properties.inbox);
583
- const eslint$18 = createMismatchRuleEslint(properties.inbox);
624
+ const eslint$19 = createMismatchRuleEslint(properties.inbox);
584
625
  createRequiredRuleDeno(properties.inbox);
585
- const eslint$17 = createRequiredRuleEslint(properties.inbox);
626
+ const eslint$18 = createRequiredRuleEslint(properties.inbox);
586
627
  createMismatchRuleDeno(properties.liked);
587
- const eslint$16 = createMismatchRuleEslint(properties.liked);
628
+ const eslint$17 = createMismatchRuleEslint(properties.liked);
588
629
  createRequiredRuleDeno(properties.liked);
589
- const eslint$15 = createRequiredRuleEslint(properties.liked);
630
+ const eslint$16 = createRequiredRuleEslint(properties.liked);
590
631
  createMismatchRuleDeno(properties.outbox);
591
- const eslint$14 = createMismatchRuleEslint(properties.outbox);
632
+ const eslint$15 = createMismatchRuleEslint(properties.outbox);
592
633
  createRequiredRuleDeno(properties.outbox);
593
- const eslint$13 = createRequiredRuleEslint(properties.outbox);
634
+ const eslint$14 = createRequiredRuleEslint(properties.outbox);
594
635
  createRequiredRuleDeno(properties.preferredUsername);
595
- const eslint$12 = createRequiredRuleEslint(properties.preferredUsername);
636
+ const eslint$13 = createRequiredRuleEslint(properties.preferredUsername);
637
+ createRequiredRuleDeno(properties.url);
638
+ const eslint$12 = createRequiredRuleEslint(properties.url);
596
639
  createRequiredRuleDeno(properties.publicKey);
597
640
  const eslint$11 = createRequiredRuleEslint(properties.publicKey);
598
641
  createMismatchRuleDeno(properties.sharedInbox);
@@ -2625,4 +2668,4 @@ const eslint = {
2625
2668
  })
2626
2669
  };
2627
2670
  //#endregion
2628
- export { eslint$29 as A, eslint$22 as C, eslint$26 as D, eslint$25 as E, name as M, version as N, eslint$27 as O, eslint$21 as S, eslint$24 as T, eslint$16 as _, eslint$4 as a, eslint$19 as b, eslint$7 as c, eslint$10 as d, eslint$11 as f, eslint$15 as g, eslint$14 as h, eslint$3 as i, RULE_IDS as j, eslint$28 as k, eslint$8 as l, eslint$13 as m, eslint$1 as n, eslint$5 as o, eslint$12 as p, eslint$2 as r, eslint$6 as s, eslint as t, eslint$9 as u, eslint$17 as v, eslint$23 as w, eslint$20 as x, eslint$18 as y };
2671
+ export { eslint$29 as A, eslint$22 as C, eslint$26 as D, eslint$25 as E, RULE_IDS as M, name as N, eslint$27 as O, version as P, eslint$21 as S, eslint$24 as T, eslint$16 as _, eslint$4 as a, eslint$19 as b, eslint$7 as c, eslint$10 as d, eslint$11 as f, eslint$15 as g, eslint$14 as h, eslint$3 as i, eslint$30 as j, eslint$28 as k, eslint$8 as l, eslint$13 as m, eslint$1 as n, eslint$5 as o, eslint$12 as p, eslint$2 as r, eslint$6 as s, eslint as t, eslint$9 as u, eslint$17 as v, eslint$23 as w, eslint$20 as x, eslint$18 as y };
@@ -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.5.0-dev.2541+d39a2437";
4
+ var version = "2.5.0-dev.2568+889927c4";
5
5
  //#endregion
6
6
  //#region src/lib/const.ts
7
7
  /**
@@ -118,6 +118,16 @@ const properties = {
118
118
  setter: "setActorDispatcher",
119
119
  requiresIdentifier: false,
120
120
  pluralName: "preferredUsernames"
121
+ },
122
+ url: {
123
+ name: "url",
124
+ path: ["url"],
125
+ setter: "setActorDispatcher",
126
+ requiresIdentifier: false,
127
+ pluralName: "urls",
128
+ reason: "remote fediverse software uses it as the link to the actor's profile page",
129
+ recommendation: "Set `url` (or the plural `urls` initializer) to the actor's human-readable profile URL.",
130
+ requireNonEmptyValue: true
121
131
  }
122
132
  };
123
133
  /**
@@ -137,6 +147,7 @@ const RULE_IDS = {
137
147
  actorPublicKeyRequired: "actor-public-key-required",
138
148
  actorAssertionMethodRequired: "actor-assertion-method-required",
139
149
  actorPreferredUsernameRequired: "actor-preferred-username-required",
150
+ actorProfileUrlRequired: "actor-profile-url-required",
140
151
  actorIdMismatch: "actor-id-mismatch",
141
152
  actorFollowingPropertyMismatch: "actor-following-property-mismatch",
142
153
  actorFollowersPropertyMismatch: "actor-followers-property-mismatch",
@@ -163,15 +174,17 @@ const RULE_IDS = {
163
174
  *
164
175
  * @param name - The property name (e.g., "id", "inbox", "following")
165
176
  */
166
- const actorPropertyRequired = ({ setter, path, getter, requiresIdentifier = true }) => {
177
+ const actorPropertyRequired = ({ setter, path, getter, requiresIdentifier = true, reason, recommendation: recommendationOverride }) => {
167
178
  const propertyPath = path.join(".");
168
- return `When \`${setter}\` is configured, the \`${propertyPath}\` property is recommended. ${getter == null ? `Set the \`${propertyPath}\` property directly on the actor object.` : `Use \`${getExpectedCall({
179
+ const defaultRecommendation = getter == null ? `Set the \`${propertyPath}\` property directly on the actor object.` : `Use \`${getExpectedCall({
169
180
  ctxName: "Context",
170
181
  methodName: getter,
171
182
  idName: "identifier",
172
183
  path: path.join("."),
173
184
  requiresIdentifier
174
- })}\` for the \`${propertyPath}\` property URI.`}`;
185
+ })}\` for the \`${propertyPath}\` property URI.`;
186
+ const recommendation = recommendationOverride ?? defaultRecommendation;
187
+ return `When \`${setter}\` is configured, the \`${propertyPath}\` property is recommended${reason == null ? "" : ` because ${reason}`}. ${recommendation}`;
175
188
  };
176
189
  /**
177
190
  * Generates error message for *-mismatch rules.
@@ -249,12 +262,20 @@ const isSetActorDispatcherCall = (node) => allOf(hasMemberExpressionCallee, hasI
249
262
  const hasMinParams = (min) => (fn) => fn.params.length >= min;
250
263
  //#endregion
251
264
  //#region src/lib/property-checker.ts
265
+ const getKeyName = (node) => {
266
+ const key = node.key;
267
+ if (key.type === "Identifier" && !node.computed) return key.name;
268
+ if (key.type === "Literal" && typeof key.value === "string") return key.value;
269
+ return null;
270
+ };
252
271
  /**
253
- * Checks if a node has a key with a specific name.
272
+ * Checks if a node has a key with a specific name, whether the key is written
273
+ * as an identifier (`url`) or as a string literal (`"url"` or `["url"]`).
274
+ * Computed identifier keys stay dynamic and are not matched.
254
275
  */
255
- const hasKeyName = (propertyName) => (node) => (0, _fxts_core.pipe)(node, (0, _fxts_core.prop)("key"), allOf(isNodeType("Identifier"), (0, _fxts_core.pipeLazy)((0, _fxts_core.prop)("name"), eq(propertyName))));
276
+ const hasKeyName = (propertyName) => (node) => getKeyName(node) === propertyName;
256
277
  /**
257
- * Checks if a node is a Property with an Identifier key of a specific name.
278
+ * Checks if a node is a Property with a specific key name.
258
279
  */
259
280
  const isPropertyWithName = (propertyName) => (node) => allOf(isNodeType("Property"), hasKeyName(propertyName))(node);
260
281
  /**
@@ -300,10 +321,26 @@ const unwrapTypeScriptExpression = (node) => {
300
321
  }
301
322
  };
302
323
  const isNullLiteral = (node) => node.type === "Literal" && node.value === null;
324
+ const isUndefinedExpression = (node) => node.type === "Identifier" && node.name === "undefined" || node.type === "UnaryExpression" && node.operator === "void";
303
325
  const isTombstoneExpression = (node) => node.type === "NewExpression" && node.callee.type === "Identifier" && node.callee.name === "Tombstone";
326
+ /**
327
+ * Checks whether a property initializer visibly carries a value.
328
+ *
329
+ * A `null` literal, `undefined`, `void`, or an empty array literal means
330
+ * there is no value for rules that require a profile URL, even though the
331
+ * property key is present. TypeScript wrappers such as `as`, `satisfies`,
332
+ * and non-null assertions are unwrapped first.
333
+ */
334
+ const isNonEmptyInitializer = (node) => {
335
+ const value = node.type === "AssignmentPattern" ? node.right : node;
336
+ const expression = unwrapTypeScriptExpression(value);
337
+ if (isNullLiteral(expression) || isUndefinedExpression(expression)) return false;
338
+ if (expression.type === "ArrayExpression") return expression.elements.length > 0;
339
+ return true;
340
+ };
304
341
  const checkBranchWith = (propertyChecker) => (branch) => {
305
342
  const expression = unwrapTypeScriptExpression(branch);
306
- if (isNullLiteral(expression) || isTombstoneExpression(expression)) return true;
343
+ if (isNullLiteral(expression) || isUndefinedExpression(expression) || isTombstoneExpression(expression)) return true;
307
344
  return (0, _fxts_core.pipe)(expression, cases(isNodeType("ConditionalExpression"), checkConditionalExpression(propertyChecker), (0, _fxts_core.pipeLazy)(extractObjectExpression, cases(_fxts_core.isObject, checkObjectExpression(propertyChecker), (0, _fxts_core.always)(false)))));
308
345
  };
309
346
  /**
@@ -319,7 +356,10 @@ const extractObjectExpression = cases(isNodeType("NewExpression"), extractFirstO
319
356
  * @param propertyChecker The predicate function to check properties
320
357
  * @returns A function that checks the ReturnStatement
321
358
  */
322
- const checkReturnStatement = (propertyChecker) => (node) => (0, _fxts_core.pipe)(node, (0, _fxts_core.prop)("argument"), cases(_fxts_core.isObject, checkBranchWith(propertyChecker), (0, _fxts_core.always)(false)));
359
+ const checkReturnStatement = (propertyChecker) => (node) => {
360
+ if (node.argument == null) return true;
361
+ return checkBranchWith(propertyChecker)(node.argument);
362
+ };
323
363
  /**
324
364
  * Creates a function that recursively checks for a property in an AST node.
325
365
  * @param propertyChecker The predicate function to check properties
@@ -435,8 +475,9 @@ function createRequiredRule(config, description) {
435
475
  const federationTracker = trackFederationVariables();
436
476
  const dispatcherTracker = createDispatcherTracker(config.setter, federationTracker);
437
477
  const actorDispatchers = [];
438
- const propertyChecker = createPropertyChecker(Boolean)(config.path);
439
- const pluralPropertyChecker = config.pluralName == null ? null : createPropertyChecker(Boolean)([...config.path.slice(0, -1), config.pluralName]);
478
+ const valueChecker = config.requireNonEmptyValue ? isNonEmptyInitializer : Boolean;
479
+ const propertyChecker = createPropertyChecker(valueChecker)(config.path);
480
+ const pluralPropertyChecker = config.pluralName == null ? null : createPropertyChecker(valueChecker)([...config.path.slice(0, -1), config.pluralName]);
440
481
  const propertySearcher = createPropertySearcher(pluralPropertyChecker == null ? propertyChecker : (node) => propertyChecker(node) || pluralPropertyChecker(node));
441
482
  return {
442
483
  VariableDeclarator: federationTracker.VariableDeclarator,
@@ -481,7 +522,7 @@ function createRequiredRuleEslint(config) {
481
522
  };
482
523
  }
483
524
  createRequiredRuleDeno(properties.assertionMethod);
484
- const eslint$29 = createRequiredRuleEslint(properties.assertionMethod);
525
+ const eslint$30 = createRequiredRuleEslint(properties.assertionMethod);
485
526
  //#endregion
486
527
  //#region src/lib/mismatch.ts
487
528
  const isIdentifierWithName = (name) => (node) => allOf(isNodeType("Identifier"), isNodeName(name))(node);
@@ -560,39 +601,41 @@ const createMismatchRuleEslint = (config) => ({
560
601
  }))
561
602
  });
562
603
  createMismatchRuleDeno(properties.featured);
563
- const eslint$28 = createMismatchRuleEslint(properties.featured);
604
+ const eslint$29 = createMismatchRuleEslint(properties.featured);
564
605
  createRequiredRuleDeno(properties.featured);
565
- const eslint$27 = createRequiredRuleEslint(properties.featured);
606
+ const eslint$28 = createRequiredRuleEslint(properties.featured);
566
607
  createMismatchRuleDeno(properties.featuredTags);
567
- const eslint$26 = createMismatchRuleEslint(properties.featuredTags);
608
+ const eslint$27 = createMismatchRuleEslint(properties.featuredTags);
568
609
  createRequiredRuleDeno(properties.featuredTags);
569
- const eslint$25 = createRequiredRuleEslint(properties.featuredTags);
610
+ const eslint$26 = createRequiredRuleEslint(properties.featuredTags);
570
611
  createMismatchRuleDeno(properties.followers);
571
- const eslint$24 = createMismatchRuleEslint(properties.followers);
612
+ const eslint$25 = createMismatchRuleEslint(properties.followers);
572
613
  createRequiredRuleDeno(properties.followers);
573
- const eslint$23 = createRequiredRuleEslint(properties.followers);
614
+ const eslint$24 = createRequiredRuleEslint(properties.followers);
574
615
  createMismatchRuleDeno(properties.following);
575
- const eslint$22 = createMismatchRuleEslint(properties.following);
616
+ const eslint$23 = createMismatchRuleEslint(properties.following);
576
617
  createRequiredRuleDeno(properties.following);
577
- const eslint$21 = createRequiredRuleEslint(properties.following);
618
+ const eslint$22 = createRequiredRuleEslint(properties.following);
578
619
  createMismatchRuleDeno(properties.id);
579
- const eslint$20 = createMismatchRuleEslint(properties.id);
620
+ const eslint$21 = createMismatchRuleEslint(properties.id);
580
621
  createRequiredRuleDeno(properties.id);
581
- const eslint$19 = createRequiredRuleEslint(properties.id);
622
+ const eslint$20 = createRequiredRuleEslint(properties.id);
582
623
  createMismatchRuleDeno(properties.inbox);
583
- const eslint$18 = createMismatchRuleEslint(properties.inbox);
624
+ const eslint$19 = createMismatchRuleEslint(properties.inbox);
584
625
  createRequiredRuleDeno(properties.inbox);
585
- const eslint$17 = createRequiredRuleEslint(properties.inbox);
626
+ const eslint$18 = createRequiredRuleEslint(properties.inbox);
586
627
  createMismatchRuleDeno(properties.liked);
587
- const eslint$16 = createMismatchRuleEslint(properties.liked);
628
+ const eslint$17 = createMismatchRuleEslint(properties.liked);
588
629
  createRequiredRuleDeno(properties.liked);
589
- const eslint$15 = createRequiredRuleEslint(properties.liked);
630
+ const eslint$16 = createRequiredRuleEslint(properties.liked);
590
631
  createMismatchRuleDeno(properties.outbox);
591
- const eslint$14 = createMismatchRuleEslint(properties.outbox);
632
+ const eslint$15 = createMismatchRuleEslint(properties.outbox);
592
633
  createRequiredRuleDeno(properties.outbox);
593
- const eslint$13 = createRequiredRuleEslint(properties.outbox);
634
+ const eslint$14 = createRequiredRuleEslint(properties.outbox);
594
635
  createRequiredRuleDeno(properties.preferredUsername);
595
- const eslint$12 = createRequiredRuleEslint(properties.preferredUsername);
636
+ const eslint$13 = createRequiredRuleEslint(properties.preferredUsername);
637
+ createRequiredRuleDeno(properties.url);
638
+ const eslint$12 = createRequiredRuleEslint(properties.url);
596
639
  createRequiredRuleDeno(properties.publicKey);
597
640
  const eslint$11 = createRequiredRuleEslint(properties.publicKey);
598
641
  createMismatchRuleDeno(properties.sharedInbox);
@@ -2775,6 +2818,12 @@ Object.defineProperty(exports, "eslint$3", {
2775
2818
  return eslint$3;
2776
2819
  }
2777
2820
  });
2821
+ Object.defineProperty(exports, "eslint$30", {
2822
+ enumerable: true,
2823
+ get: function() {
2824
+ return eslint$30;
2825
+ }
2826
+ });
2778
2827
  Object.defineProperty(exports, "eslint$4", {
2779
2828
  enumerable: true,
2780
2829
  get: function() {
package/dist/oxlint.cjs CHANGED
@@ -1,29 +1,30 @@
1
- const require_outbox_listener_delivery_required = require("./outbox-listener-delivery-required-yvQhmuwt.cjs");
1
+ const require_outbox_listener_delivery_required = require("./outbox-listener-delivery-required-DaY8FcID.cjs");
2
2
  //#region src/oxlint.ts
3
3
  const rules = {
4
- [require_outbox_listener_delivery_required.RULE_IDS.actorIdMismatch]: require_outbox_listener_delivery_required.eslint$20,
5
- [require_outbox_listener_delivery_required.RULE_IDS.actorIdRequired]: require_outbox_listener_delivery_required.eslint$19,
6
- [require_outbox_listener_delivery_required.RULE_IDS.actorFollowingPropertyRequired]: require_outbox_listener_delivery_required.eslint$21,
7
- [require_outbox_listener_delivery_required.RULE_IDS.actorFollowingPropertyMismatch]: require_outbox_listener_delivery_required.eslint$22,
8
- [require_outbox_listener_delivery_required.RULE_IDS.actorFollowersPropertyRequired]: require_outbox_listener_delivery_required.eslint$23,
9
- [require_outbox_listener_delivery_required.RULE_IDS.actorFollowersPropertyMismatch]: require_outbox_listener_delivery_required.eslint$24,
10
- [require_outbox_listener_delivery_required.RULE_IDS.actorOutboxPropertyRequired]: require_outbox_listener_delivery_required.eslint$13,
11
- [require_outbox_listener_delivery_required.RULE_IDS.actorOutboxPropertyMismatch]: require_outbox_listener_delivery_required.eslint$14,
12
- [require_outbox_listener_delivery_required.RULE_IDS.actorLikedPropertyRequired]: require_outbox_listener_delivery_required.eslint$15,
13
- [require_outbox_listener_delivery_required.RULE_IDS.actorLikedPropertyMismatch]: require_outbox_listener_delivery_required.eslint$16,
14
- [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedPropertyRequired]: require_outbox_listener_delivery_required.eslint$27,
15
- [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedPropertyMismatch]: require_outbox_listener_delivery_required.eslint$28,
16
- [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedTagsPropertyRequired]: require_outbox_listener_delivery_required.eslint$25,
17
- [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedTagsPropertyMismatch]: require_outbox_listener_delivery_required.eslint$26,
18
- [require_outbox_listener_delivery_required.RULE_IDS.actorInboxPropertyRequired]: require_outbox_listener_delivery_required.eslint$17,
19
- [require_outbox_listener_delivery_required.RULE_IDS.actorInboxPropertyMismatch]: require_outbox_listener_delivery_required.eslint$18,
4
+ [require_outbox_listener_delivery_required.RULE_IDS.actorIdMismatch]: require_outbox_listener_delivery_required.eslint$21,
5
+ [require_outbox_listener_delivery_required.RULE_IDS.actorIdRequired]: require_outbox_listener_delivery_required.eslint$20,
6
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFollowingPropertyRequired]: require_outbox_listener_delivery_required.eslint$22,
7
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFollowingPropertyMismatch]: require_outbox_listener_delivery_required.eslint$23,
8
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFollowersPropertyRequired]: require_outbox_listener_delivery_required.eslint$24,
9
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFollowersPropertyMismatch]: require_outbox_listener_delivery_required.eslint$25,
10
+ [require_outbox_listener_delivery_required.RULE_IDS.actorOutboxPropertyRequired]: require_outbox_listener_delivery_required.eslint$14,
11
+ [require_outbox_listener_delivery_required.RULE_IDS.actorOutboxPropertyMismatch]: require_outbox_listener_delivery_required.eslint$15,
12
+ [require_outbox_listener_delivery_required.RULE_IDS.actorLikedPropertyRequired]: require_outbox_listener_delivery_required.eslint$16,
13
+ [require_outbox_listener_delivery_required.RULE_IDS.actorLikedPropertyMismatch]: require_outbox_listener_delivery_required.eslint$17,
14
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedPropertyRequired]: require_outbox_listener_delivery_required.eslint$28,
15
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedPropertyMismatch]: require_outbox_listener_delivery_required.eslint$29,
16
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedTagsPropertyRequired]: require_outbox_listener_delivery_required.eslint$26,
17
+ [require_outbox_listener_delivery_required.RULE_IDS.actorFeaturedTagsPropertyMismatch]: require_outbox_listener_delivery_required.eslint$27,
18
+ [require_outbox_listener_delivery_required.RULE_IDS.actorInboxPropertyRequired]: require_outbox_listener_delivery_required.eslint$18,
19
+ [require_outbox_listener_delivery_required.RULE_IDS.actorInboxPropertyMismatch]: require_outbox_listener_delivery_required.eslint$19,
20
20
  [require_outbox_listener_delivery_required.RULE_IDS.actorSharedInboxPropertyRequired]: require_outbox_listener_delivery_required.eslint$9,
21
21
  [require_outbox_listener_delivery_required.RULE_IDS.actorSharedInboxPropertyMismatch]: require_outbox_listener_delivery_required.eslint$10,
22
22
  [require_outbox_listener_delivery_required.RULE_IDS.actorUploadMediaPropertyRequired]: require_outbox_listener_delivery_required.eslint$7,
23
23
  [require_outbox_listener_delivery_required.RULE_IDS.actorUploadMediaPropertyMismatch]: require_outbox_listener_delivery_required.eslint$8,
24
24
  [require_outbox_listener_delivery_required.RULE_IDS.actorPublicKeyRequired]: require_outbox_listener_delivery_required.eslint$11,
25
- [require_outbox_listener_delivery_required.RULE_IDS.actorAssertionMethodRequired]: require_outbox_listener_delivery_required.eslint$29,
26
- [require_outbox_listener_delivery_required.RULE_IDS.actorPreferredUsernameRequired]: require_outbox_listener_delivery_required.eslint$12,
25
+ [require_outbox_listener_delivery_required.RULE_IDS.actorAssertionMethodRequired]: require_outbox_listener_delivery_required.eslint$30,
26
+ [require_outbox_listener_delivery_required.RULE_IDS.actorPreferredUsernameRequired]: require_outbox_listener_delivery_required.eslint$13,
27
+ [require_outbox_listener_delivery_required.RULE_IDS.actorProfileUrlRequired]: require_outbox_listener_delivery_required.eslint$12,
27
28
  [require_outbox_listener_delivery_required.RULE_IDS.collectionFilteringNotImplemented]: require_outbox_listener_delivery_required.eslint$6,
28
29
  [require_outbox_listener_delivery_required.RULE_IDS.outboxListenerDeliveryRequired]: require_outbox_listener_delivery_required.eslint,
29
30
  [require_outbox_listener_delivery_required.RULE_IDS.outboxListenerDeliveryNotAwaited]: require_outbox_listener_delivery_required.eslint$1,
package/dist/oxlint.js CHANGED
@@ -1,4 +1,4 @@
1
- import { A as eslint$21, C as eslint$3, D as eslint$13, E as eslint$12, M as name, N as version, O as eslint$10, S as eslint$2, T as eslint$5, _ as eslint$9, a as eslint$28, b as eslint$1, c as eslint$18, d as eslint$17, f as eslint$20, g as eslint$8, h as eslint$7, i as eslint$27, j as RULE_IDS, k as eslint$11, l as eslint$19, m as eslint$6, n as eslint$25, o as eslint$29, p as eslint$22, r as eslint$26, s as eslint$23, t as eslint$24, u as eslint$16, v as eslint$14, w as eslint$4, x as eslint, y as eslint$15 } from "./outbox-listener-delivery-required-wzZRR9jI.js";
1
+ import { A as eslint$11, C as eslint$2, D as eslint$12, E as eslint$5, M as RULE_IDS, N as name, O as eslint$13, P as version, S as eslint, T as eslint$4, _ as eslint$8, a as eslint$29, b as eslint$15, c as eslint$18, d as eslint$17, f as eslint$20, g as eslint$7, h as eslint$6, i as eslint$28, j as eslint$21, k as eslint$10, l as eslint$19, m as eslint$22, n as eslint$26, o as eslint$30, p as eslint$23, r as eslint$27, s as eslint$24, t as eslint$25, u as eslint$16, v as eslint$9, w as eslint$3, x as eslint$1, y as eslint$14 } from "./outbox-listener-delivery-required-CwhiEW-i.js";
2
2
  //#region src/oxlint.ts
3
3
  const rules = {
4
4
  [RULE_IDS.actorIdMismatch]: eslint,
@@ -24,13 +24,14 @@ const rules = {
24
24
  [RULE_IDS.actorPublicKeyRequired]: eslint$20,
25
25
  [RULE_IDS.actorAssertionMethodRequired]: eslint$21,
26
26
  [RULE_IDS.actorPreferredUsernameRequired]: eslint$22,
27
- [RULE_IDS.collectionFilteringNotImplemented]: eslint$23,
28
- [RULE_IDS.outboxListenerDeliveryRequired]: eslint$24,
29
- [RULE_IDS.outboxListenerDeliveryNotAwaited]: eslint$25,
30
- [RULE_IDS.mediaUploaderObjectUriRequired]: eslint$26,
31
- [RULE_IDS.mediaUploaderAuthorizationRequired]: eslint$27,
32
- [RULE_IDS.denoKvStoreDeprecated]: eslint$28,
33
- [RULE_IDS.denoKvMessageQueueDeprecated]: eslint$29
27
+ [RULE_IDS.actorProfileUrlRequired]: eslint$23,
28
+ [RULE_IDS.collectionFilteringNotImplemented]: eslint$24,
29
+ [RULE_IDS.outboxListenerDeliveryRequired]: eslint$25,
30
+ [RULE_IDS.outboxListenerDeliveryNotAwaited]: eslint$26,
31
+ [RULE_IDS.mediaUploaderObjectUriRequired]: eslint$27,
32
+ [RULE_IDS.mediaUploaderAuthorizationRequired]: eslint$28,
33
+ [RULE_IDS.denoKvStoreDeprecated]: eslint$29,
34
+ [RULE_IDS.denoKvMessageQueueDeprecated]: eslint$30
34
35
  };
35
36
  const plugin = {
36
37
  meta: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fedify/lint",
3
- "version": "2.5.0-dev.2541+d39a2437",
3
+ "version": "2.5.0-dev.2568+889927c4",
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.5.0-dev.2541+d39a2437"
54
+ "@fedify/fedify": "^2.5.0-dev.2568+889927c4"
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.5.0-dev.2541+d39a2437"
74
+ "@fedify/vocab": "2.5.0-dev.2568+889927c4"
75
75
  },
76
76
  "scripts": {
77
77
  "build:self": "tsdown",