@svelte-vitals/core 0.41.1 → 0.42.0

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.
Files changed (3) hide show
  1. package/dist/index.d.ts +37 -23
  2. package/dist/index.js +188 -1329
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -35,36 +35,29 @@ var CHILD_NODE_KEYS = [
35
35
  "catch",
36
36
  "fallback"
37
37
  ];
38
+ var hasExpression = (nodes) => nodes.some((n) => n?.type === "ExpressionTag");
39
+ function joinText(nodes) {
40
+ return nodes.filter((n) => n?.type === "Text").map((n) => String(n.data ?? "")).join("");
41
+ }
38
42
  function valueFromNodes(nodes) {
39
43
  if (!Array.isArray(nodes)) return "absent";
40
- if (nodes.some((n) => n?.type === "ExpressionTag")) return "dynamic";
41
- const text = nodes.filter((n) => n?.type === "Text").map((n) => String(n.data ?? "")).join("");
42
- return text.trim().length > 0 ? "static" : "absent";
44
+ if (hasExpression(nodes)) return "dynamic";
45
+ return joinText(nodes).trim().length > 0 ? "static" : "absent";
43
46
  }
44
47
  function textFromNodes(nodes) {
45
- if (!Array.isArray(nodes) || nodes.some((n) => n?.type === "ExpressionTag")) return void 0;
46
- const text = nodes.filter((n) => n?.type === "Text").map((n) => String(n.data ?? "")).join("");
48
+ if (!Array.isArray(nodes) || hasExpression(nodes)) return void 0;
49
+ const text = joinText(nodes);
47
50
  return text.trim().length > 0 ? text : void 0;
48
51
  }
49
52
  function attrText(attributes, name) {
50
- const attr = findAttr(attributes, name);
51
- if (!attr) return void 0;
52
- const v = attr.value;
53
+ const v = findAttr(attributes, name)?.value;
53
54
  if (v === true) return "";
54
- if (Array.isArray(v)) {
55
- if (v.some((n) => n?.type === "ExpressionTag")) return void 0;
56
- return v.filter((n) => n?.type === "Text").map((n) => String(n.data ?? "")).join("");
57
- }
58
- return void 0;
55
+ if (!Array.isArray(v) || hasExpression(v)) return void 0;
56
+ return joinText(v);
59
57
  }
60
58
  function attrValue(attributes, name) {
61
59
  const attr = findAttr(attributes, name);
62
- if (!attr) return "absent";
63
- const v = attr.value;
64
- if (v === true) return "absent";
65
- if (Array.isArray(v)) return valueFromNodes(v);
66
- if (v && v.type === "ExpressionTag") return "dynamic";
67
- return "absent";
60
+ return attr ? attrValueOf(attr) : "absent";
68
61
  }
69
62
  function lineOf(source, offset) {
70
63
  if (typeof offset !== "number" || offset < 0) return 0;
@@ -86,9 +79,7 @@ function attrValueOf(attr) {
86
79
  }
87
80
  function attrTextOf(attr) {
88
81
  const v = attr?.value;
89
- if (!Array.isArray(v) || v.some((n) => n?.type === "ExpressionTag")) return void 0;
90
- const text = v.filter((n) => n?.type === "Text").map((n) => String(n.data ?? "")).join("");
91
- return text.trim().length > 0 ? text : void 0;
82
+ return Array.isArray(v) ? textFromNodes(v) : void 0;
92
83
  }
93
84
 
94
85
  // src/component-parse.ts
@@ -2749,56 +2740,56 @@ var seoHtmlLang = {
2749
2740
  }
2750
2741
  };
2751
2742
 
2743
+ // src/rules/detection.ts
2744
+ var PENALIZED = { presence: "none", value: "absent" };
2745
+ var PASS = { presence: "own", value: "static" };
2746
+
2752
2747
  // src/rules/perf/image-rule.ts
2753
- function imageRule(opts) {
2754
- const docsUrl12 = docsUrlFor(opts.id);
2755
- const category = opts.category ?? "performance";
2748
+ function routeItemRule(spec) {
2749
+ const docsUrl12 = docsUrlFor(spec.id);
2756
2750
  return {
2757
- id: opts.id,
2758
- title: opts.title,
2759
- category,
2760
- severity: opts.severity,
2751
+ id: spec.id,
2752
+ title: spec.title,
2753
+ category: spec.category,
2754
+ severity: spec.severity,
2761
2755
  scope: "route",
2762
- rationale: opts.rationale,
2763
- ...opts.fix ? { fix: opts.fix } : {},
2756
+ rationale: spec.rationale,
2757
+ ...spec.fix ? { fix: spec.fix } : {},
2764
2758
  async check(ctx) {
2765
2759
  const out = [];
2766
- for (const route of ctx.images ?? []) {
2767
- if (route.images.length === 0) continue;
2768
- const bad = route.images.filter((img) => !opts.ok(img));
2760
+ for (const g of spec.groups(ctx)) {
2761
+ if (g.items.length === 0) continue;
2762
+ const bad = g.items.filter((item) => !spec.ok(item));
2769
2763
  if (bad.length === 0) {
2770
2764
  out.push({
2771
- id: opts.id,
2772
- category,
2773
- severity: opts.severity,
2774
- detection: { presence: "own", value: "static" },
2775
- route: route.route,
2776
- // No single route-level file exists here (unlike ResolvedHead.file) — the
2777
- // route's first image stands in as its attributed file (design
2778
- // 2026-08-08-pass-result-location-design.md; this uncaught inline PASS literal
2779
- // was missed by the design spike's grep and added to its blast-radius table
2780
- // afterward, maintainer ruling, same date). `route.images.length === 0` already
2781
- // continued above, so `[0]` is always defined here.
2782
- location: route.images[0].file,
2783
- message: opts.label,
2784
- recommendation: opts.recommendation,
2765
+ id: spec.id,
2766
+ category: spec.category,
2767
+ severity: spec.severity,
2768
+ detection: PASS,
2769
+ route: g.route,
2770
+ location: g.passLocation,
2771
+ message: spec.label,
2772
+ recommendation: spec.recommendation,
2785
2773
  docsUrl: docsUrl12
2786
2774
  });
2787
2775
  continue;
2788
2776
  }
2789
- for (const img of bad) {
2777
+ for (const item of bad) {
2778
+ const line = spec.line?.(item);
2790
2779
  out.push({
2791
- id: opts.id,
2792
- category,
2793
- severity: opts.severity,
2794
- detection: { presence: "none", value: "absent" },
2795
- route: route.route,
2796
- location: img.file,
2797
- ...img.line > 0 ? { line: img.line } : {},
2798
- message: `Missing ${opts.label}`,
2799
- recommendation: opts.recommendation,
2780
+ id: spec.id,
2781
+ category: spec.category,
2782
+ severity: spec.severity,
2783
+ detection: PENALIZED,
2784
+ route: g.route,
2785
+ location: spec.location(item, g.passLocation),
2786
+ ...line !== void 0 && line > 0 ? { line } : {},
2787
+ message: `Missing ${spec.label}`,
2788
+ recommendation: spec.recommendation,
2800
2789
  docsUrl: docsUrl12,
2801
- ...opts.fix ? { fix: { ...opts.fix } } : {}
2790
+ // Copy per finding: spec.fix is a rule-level template shared across all
2791
+ // results this rule emits; a fresh object keeps findings independent.
2792
+ ...spec.fix ? { fix: { ...spec.fix } } : {}
2802
2793
  });
2803
2794
  }
2804
2795
  }
@@ -2806,6 +2797,18 @@ function imageRule(opts) {
2806
2797
  }
2807
2798
  };
2808
2799
  }
2800
+ function imageRule(opts) {
2801
+ return routeItemRule({
2802
+ ...opts,
2803
+ category: opts.category ?? "performance",
2804
+ // No single route-level file exists here (unlike ResolvedHead.file) — the route's
2805
+ // first image stands in as its attributed file; empty routes are filtered first,
2806
+ // so `[0]` is always defined.
2807
+ groups: (ctx) => (ctx.images ?? []).filter((r) => r.images.length > 0).map((r) => ({ route: r.route, items: r.images, passLocation: r.images[0].file })),
2808
+ location: (img) => img.file,
2809
+ line: (img) => img.line
2810
+ });
2811
+ }
2809
2812
 
2810
2813
  // src/rules/perf/image-dimensions.ts
2811
2814
  var performanceImageDimensions = imageRule({
@@ -2857,62 +2860,19 @@ var performanceResponsiveImage = imageRule({
2857
2860
 
2858
2861
  // src/rules/perf/link-rule.ts
2859
2862
  function linkRule(opts) {
2860
- const docsUrl12 = docsUrlFor(opts.id);
2861
- return {
2862
- id: opts.id,
2863
- title: opts.title,
2863
+ return routeItemRule({
2864
+ ...opts,
2864
2865
  category: "performance",
2865
- severity: opts.severity,
2866
- scope: "route",
2867
- rationale: opts.rationale,
2868
- ...opts.fix ? { fix: opts.fix } : {},
2869
- async check(ctx) {
2870
- const out = [];
2871
- for (const head of ctx.heads) {
2872
- const links = head.tags.filter((t) => t.kind === "link" && opts.relevant(t));
2873
- if (links.length === 0) continue;
2874
- const bad = links.filter((t) => !opts.ok(t));
2875
- if (bad.length === 0) {
2876
- out.push({
2877
- id: opts.id,
2878
- category: "performance",
2879
- severity: opts.severity,
2880
- detection: { presence: "own", value: "static" },
2881
- route: head.route,
2882
- // The route's own attributed file (design 2026-08-08-pass-result-location-design.md)
2883
- // — this uncaught inline PASS literal was missed by the design spike's grep and
2884
- // added to its blast-radius table afterward (maintainer ruling, same date). No
2885
- // single per-tag location applies here (many links can back one pass), so the
2886
- // route's own head file is the uniform attribution; per-tag penalized locations
2887
- // above remain per-tag.
2888
- location: head.file,
2889
- message: opts.label,
2890
- recommendation: opts.recommendation,
2891
- docsUrl: docsUrl12
2892
- });
2893
- continue;
2894
- }
2895
- for (const tag of bad) {
2896
- out.push({
2897
- id: opts.id,
2898
- category: "performance",
2899
- severity: opts.severity,
2900
- detection: { presence: "none", value: "absent" },
2901
- route: head.route,
2902
- // Point at the file the link actually came from (a layout in static
2903
- // mode); fall back to the route's representative file when the tag
2904
- // carries no file (rendered mode).
2905
- location: tag.file ?? head.file,
2906
- message: `Missing ${opts.label}`,
2907
- recommendation: opts.recommendation,
2908
- docsUrl: docsUrl12,
2909
- ...opts.fix ? { fix: { ...opts.fix } } : {}
2910
- });
2911
- }
2912
- }
2913
- return out;
2914
- }
2915
- };
2866
+ // The route's own head file is the PASS attribution (many links can back one pass).
2867
+ groups: (ctx) => ctx.heads.map((head) => ({
2868
+ route: head.route,
2869
+ items: head.tags.filter((t) => t.kind === "link" && opts.relevant(t)),
2870
+ passLocation: head.file
2871
+ })),
2872
+ // Point at the file the link actually came from (a layout in static mode); fall back
2873
+ // to the route's representative file when the tag carries no file (rendered mode).
2874
+ location: (tag, passLocation) => tag.file ?? passLocation
2875
+ });
2916
2876
  }
2917
2877
 
2918
2878
  // src/rules/perf/preload-missing-as.ts
@@ -3083,6 +3043,9 @@ function withFailedRulesOff(config, failedRuleIds) {
3083
3043
  }
3084
3044
  };
3085
3045
  }
3046
+ function formatFailedRuleWarning(f) {
3047
+ return `rule ${f.id} failed and was skipped: ${f.message.split("\n")[0]}`;
3048
+ }
3086
3049
  function applyRuleSeverities(results, config) {
3087
3050
  return results.map((result) => {
3088
3051
  const severity = settingSeverity(config.rules[result.id]);
@@ -3483,10 +3446,6 @@ var seoSitemapInRobots = {
3483
3446
  }
3484
3447
  };
3485
3448
 
3486
- // src/rules/seo/detection.ts
3487
- var PENALIZED = { presence: "none", value: "absent" };
3488
- var PASS = { presence: "own", value: "static" };
3489
-
3490
3449
  // src/rules/seo/jsonld-engine.ts
3491
3450
  function parseJsonLd(raw) {
3492
3451
  let data;
@@ -3700,1042 +3659,11 @@ function jsonldRule(opts) {
3700
3659
  }
3701
3660
 
3702
3661
  // src/rules/seo/schema-vocabulary.generated.ts
3703
- var SCHEMA_ORG_TYPES = /* @__PURE__ */ new Set([
3704
- "3DModel",
3705
- "AMRadioChannel",
3706
- "APIReference",
3707
- "AboutPage",
3708
- "AcceptAction",
3709
- "Accommodation",
3710
- "AccountingService",
3711
- "AchieveAction",
3712
- "Action",
3713
- "ActionAccessSpecification",
3714
- "ActionStatusType",
3715
- "ActivateAction",
3716
- "AddAction",
3717
- "AdministrativeArea",
3718
- "AdultEntertainment",
3719
- "AdultOrientedEnumeration",
3720
- "AdvertiserContentArticle",
3721
- "AggregateOffer",
3722
- "AggregateRating",
3723
- "AgreeAction",
3724
- "Airline",
3725
- "Airport",
3726
- "AlignmentObject",
3727
- "AllocateAction",
3728
- "AmpStory",
3729
- "AmusementPark",
3730
- "AnalysisNewsArticle",
3731
- "AnatomicalStructure",
3732
- "AnatomicalSystem",
3733
- "AnimalShelter",
3734
- "Answer",
3735
- "Apartment",
3736
- "ApartmentComplex",
3737
- "AppendAction",
3738
- "ApplyAction",
3739
- "ApprovedIndication",
3740
- "Aquarium",
3741
- "ArchiveComponent",
3742
- "ArchiveOrganization",
3743
- "ArriveAction",
3744
- "ArtGallery",
3745
- "Artery",
3746
- "Article",
3747
- "AskAction",
3748
- "AskPublicNewsArticle",
3749
- "AssessAction",
3750
- "AssignAction",
3751
- "Atlas",
3752
- "Attorney",
3753
- "Audience",
3754
- "AudioObject",
3755
- "AudioObjectSnapshot",
3756
- "Audiobook",
3757
- "AuthenticateAction",
3758
- "AuthorizeAction",
3759
- "AutoBodyShop",
3760
- "AutoDealer",
3761
- "AutoPartsStore",
3762
- "AutoRental",
3763
- "AutoRepair",
3764
- "AutoWash",
3765
- "AutomatedTeller",
3766
- "AutomotiveBusiness",
3767
- "BackgroundNewsArticle",
3768
- "Bakery",
3769
- "BankAccount",
3770
- "BankOrCreditUnion",
3771
- "BarOrPub",
3772
- "Barcode",
3773
- "Beach",
3774
- "BeautySalon",
3775
- "BedAndBreakfast",
3776
- "BedDetails",
3777
- "BedType",
3778
- "BefriendAction",
3779
- "BikeStore",
3780
- "BioChemEntity",
3781
- "Blog",
3782
- "BlogPosting",
3783
- "BloodTest",
3784
- "BoardingPolicyType",
3785
- "BoatReservation",
3786
- "BoatTerminal",
3787
- "BoatTrip",
3788
- "BodyMeasurementTypeEnumeration",
3789
- "BodyOfWater",
3790
- "Bone",
3791
- "Book",
3792
- "BookFormatType",
3793
- "BookSeries",
3794
- "BookStore",
3795
- "BookmarkAction",
3796
- "Boolean",
3797
- "BorrowAction",
3798
- "BowlingAlley",
3799
- "BrainStructure",
3800
- "Brand",
3801
- "BreadcrumbList",
3802
- "Brewery",
3803
- "Bridge",
3804
- "BroadcastChannel",
3805
- "BroadcastEvent",
3806
- "BroadcastFrequencySpecification",
3807
- "BroadcastService",
3808
- "BrokerageAccount",
3809
- "BuddhistTemple",
3810
- "BusOrCoach",
3811
- "BusReservation",
3812
- "BusStation",
3813
- "BusStop",
3814
- "BusTrip",
3815
- "BusinessAudience",
3816
- "BusinessEntityType",
3817
- "BusinessEvent",
3818
- "BusinessFunction",
3819
- "BuyAction",
3820
- "CDCPMDRecord",
3821
- "CableOrSatelliteService",
3822
- "CafeOrCoffeeShop",
3823
- "Campground",
3824
- "CampingPitch",
3825
- "Canal",
3826
- "CancelAction",
3827
- "Car",
3828
- "CarUsageType",
3829
- "Casino",
3830
- "CategoryCode",
3831
- "CategoryCodeSet",
3832
- "CatholicChurch",
3833
- "Cemetery",
3834
- "Certification",
3835
- "CertificationStatusEnumeration",
3836
- "Chapter",
3837
- "CheckAction",
3838
- "CheckInAction",
3839
- "CheckOutAction",
3840
- "CheckoutPage",
3841
- "ChemicalSubstance",
3842
- "ChildCare",
3843
- "ChildrensEvent",
3844
- "ChooseAction",
3845
- "Church",
3846
- "City",
3847
- "CityHall",
3848
- "CivicStructure",
3849
- "Claim",
3850
- "ClaimReview",
3851
- "Class",
3852
- "Clip",
3853
- "ClothingStore",
3854
- "Code",
3855
- "Collection",
3856
- "CollectionPage",
3857
- "CollegeOrUniversity",
3858
- "ComedyClub",
3859
- "ComedyEvent",
3860
- "ComicCoverArt",
3861
- "ComicIssue",
3862
- "ComicSeries",
3863
- "ComicStory",
3864
- "Comment",
3865
- "CommentAction",
3866
- "CommunicateAction",
3867
- "CommunityHealth",
3868
- "CompleteDataFeed",
3869
- "CompoundPriceSpecification",
3870
- "ComputerLanguage",
3871
- "ComputerStore",
3872
- "ConferenceEvent",
3873
- "ConfirmAction",
3874
- "Consortium",
3875
- "ConstraintNode",
3876
- "ConsumeAction",
3877
- "ContactPage",
3878
- "ContactPoint",
3879
- "ContactPointOption",
3880
- "Continent",
3881
- "ControlAction",
3882
- "ConvenienceStore",
3883
- "Conversation",
3884
- "CookAction",
3885
- "Cooperative",
3886
- "Corporation",
3887
- "CorrectionComment",
3888
- "Country",
3889
- "Course",
3890
- "CourseInstance",
3891
- "Courthouse",
3892
- "CoverArt",
3893
- "CovidTestingFacility",
3894
- "CreateAction",
3895
- "CreativeWork",
3896
- "CreativeWorkSeason",
3897
- "CreativeWorkSeries",
3898
- "Credential",
3899
- "CreditCard",
3900
- "Crematorium",
3901
- "CriticReview",
3902
- "CssSelectorType",
3903
- "CurrencyConversionService",
3904
- "DDxElement",
3905
- "DENonprofitType",
3906
- "DanceEvent",
3907
- "DanceGroup",
3908
- "DataCatalog",
3909
- "DataDownload",
3910
- "DataFeed",
3911
- "DataFeedItem",
3912
- "DataType",
3913
- "Dataset",
3914
- "Date",
3915
- "DateTime",
3916
- "DatedMoneySpecification",
3917
- "DayOfWeek",
3918
- "DaySpa",
3919
- "DeactivateAction",
3920
- "DefenceEstablishment",
3921
- "DefinedRegion",
3922
- "DefinedTerm",
3923
- "DefinedTermSet",
3924
- "DeleteAction",
3925
- "DeliveryChargeSpecification",
3926
- "DeliveryEvent",
3927
- "DeliveryMethod",
3928
- "DeliveryTimeSettings",
3929
- "Demand",
3930
- "Dentist",
3931
- "DepartAction",
3932
- "DepartmentStore",
3933
- "DepositAccount",
3934
- "Dermatology",
3935
- "DiagnosticLab",
3936
- "DiagnosticProcedure",
3937
- "Diet",
3938
- "DietNutrition",
3939
- "DietarySupplement",
3940
- "DigitalDocument",
3941
- "DigitalDocumentPermission",
3942
- "DigitalDocumentPermissionType",
3943
- "DigitalPlatformEnumeration",
3944
- "DisagreeAction",
3945
- "DiscoverAction",
3946
- "DiscussionForumPosting",
3947
- "DislikeAction",
3948
- "Distance",
3949
- "Distillery",
3950
- "DonateAction",
3951
- "DoseSchedule",
3952
- "DownloadAction",
3953
- "DrawAction",
3954
- "Drawing",
3955
- "DrinkAction",
3956
- "DriveWheelConfigurationValue",
3957
- "Drug",
3958
- "DrugClass",
3959
- "DrugCost",
3960
- "DrugCostCategory",
3961
- "DrugLegalStatus",
3962
- "DrugPregnancyCategory",
3963
- "DrugPrescriptionStatus",
3964
- "DrugStrength",
3965
- "DryCleaningOrLaundry",
3966
- "Duration",
3967
- "EUEnergyEfficiencyEnumeration",
3968
- "EatAction",
3969
- "EducationEvent",
3970
- "EducationalAudience",
3971
- "EducationalOccupationalCredential",
3972
- "EducationalOccupationalProgram",
3973
- "EducationalOrganization",
3974
- "Electrician",
3975
- "ElectronicsStore",
3976
- "ElementarySchool",
3977
- "EmailMessage",
3978
- "Embassy",
3979
- "Emergency",
3980
- "EmergencyService",
3981
- "EmployeeRole",
3982
- "EmployerAggregateRating",
3983
- "EmployerReview",
3984
- "EmploymentAgency",
3985
- "EndorseAction",
3986
- "EndorsementRating",
3987
- "Energy",
3988
- "EnergyConsumptionDetails",
3989
- "EnergyEfficiencyEnumeration",
3990
- "EnergyStarEnergyEfficiencyEnumeration",
3991
- "EngineSpecification",
3992
- "EntertainmentBusiness",
3993
- "EntryPoint",
3994
- "Enumeration",
3995
- "Episode",
3996
- "Error",
3997
- "Event",
3998
- "EventAttendanceModeEnumeration",
3999
- "EventReservation",
4000
- "EventSeries",
4001
- "EventStatusType",
4002
- "EventVenue",
4003
- "ExchangeRateSpecification",
4004
- "ExerciseAction",
4005
- "ExerciseGym",
4006
- "ExercisePlan",
4007
- "ExhibitionEvent",
4008
- "FAQPage",
4009
- "FMRadioChannel",
4010
- "FastFoodRestaurant",
4011
- "Festival",
4012
- "FilmAction",
4013
- "FinancialIncentive",
4014
- "FinancialProduct",
4015
- "FinancialService",
4016
- "FindAction",
4017
- "FireStation",
4018
- "Flight",
4019
- "FlightReservation",
4020
- "Float",
4021
- "FloorPlan",
4022
- "Florist",
4023
- "FollowAction",
4024
- "FoodEstablishment",
4025
- "FoodEstablishmentReservation",
4026
- "FoodEvent",
4027
- "FoodService",
4028
- "FulfillmentTypeEnumeration",
4029
- "FundingAgency",
4030
- "FundingScheme",
4031
- "FurnitureStore",
4032
- "Game",
4033
- "GameAvailabilityEnumeration",
4034
- "GamePlayMode",
4035
- "GameServer",
4036
- "GameServerStatus",
4037
- "GardenStore",
4038
- "GasStation",
4039
- "GatedResidenceCommunity",
4040
- "GenderType",
4041
- "Gene",
4042
- "GeneralContractor",
4043
- "GeoCircle",
4044
- "GeoCoordinates",
4045
- "GeoShape",
4046
- "GeospatialGeometry",
4047
- "Geriatric",
4048
- "GiveAction",
4049
- "GolfCourse",
4050
- "GovernmentBenefitsType",
4051
- "GovernmentBuilding",
4052
- "GovernmentOffice",
4053
- "GovernmentOrganization",
4054
- "GovernmentPermit",
4055
- "GovernmentService",
4056
- "Grant",
4057
- "GroceryStore",
4058
- "Guide",
4059
- "Gynecologic",
4060
- "HVACBusiness",
4061
- "Hackathon",
4062
- "HairSalon",
4063
- "HardwareStore",
4064
- "HealthAndBeautyBusiness",
4065
- "HealthAspectEnumeration",
4066
- "HealthClub",
4067
- "HealthInsurancePlan",
4068
- "HealthPlanCostSharingSpecification",
4069
- "HealthPlanFormulary",
4070
- "HealthPlanNetwork",
4071
- "HealthTopicContent",
4072
- "HighSchool",
4073
- "HinduTemple",
4074
- "HobbyShop",
4075
- "HomeAndConstructionBusiness",
4076
- "HomeGoodsStore",
4077
- "Hospital",
4078
- "Hostel",
4079
- "Hotel",
4080
- "HotelRoom",
4081
- "House",
4082
- "HousePainter",
4083
- "HowTo",
4084
- "HowToDirection",
4085
- "HowToItem",
4086
- "HowToSection",
4087
- "HowToStep",
4088
- "HowToSupply",
4089
- "HowToTip",
4090
- "HowToTool",
4091
- "HyperToc",
4092
- "HyperTocEntry",
4093
- "IPTCDigitalSourceEnumeration",
4094
- "ITNonprofitType",
4095
- "IceCreamShop",
4096
- "IgnoreAction",
4097
- "ImageGallery",
4098
- "ImageObject",
4099
- "ImageObjectSnapshot",
4100
- "ImagingTest",
4101
- "IncentiveQualifiedExpenseType",
4102
- "IncentiveStatus",
4103
- "IncentiveType",
4104
- "IndividualPhysician",
4105
- "IndividualProduct",
4106
- "InfectiousAgentClass",
4107
- "InfectiousDisease",
4108
- "InformAction",
4109
- "InsertAction",
4110
- "InstallAction",
4111
- "InstantaneousEvent",
4112
- "InsuranceAgency",
4113
- "Intangible",
4114
- "Integer",
4115
- "InteractAction",
4116
- "InteractionCounter",
4117
- "InternetCafe",
4118
- "InvestmentFund",
4119
- "InvestmentOrDeposit",
4120
- "InviteAction",
4121
- "Invoice",
4122
- "ItemAvailability",
4123
- "ItemList",
4124
- "ItemListOrderType",
4125
- "ItemPage",
4126
- "JewelryStore",
4127
- "JobPosting",
4128
- "JoinAction",
4129
- "Joint",
4130
- "LakeBodyOfWater",
4131
- "Landform",
4132
- "LandmarksOrHistoricalBuildings",
4133
- "Language",
4134
- "LearningResource",
4135
- "LeaveAction",
4136
- "LegalForceStatus",
4137
- "LegalService",
4138
- "LegalValueLevel",
4139
- "Legislation",
4140
- "LegislationObject",
4141
- "LegislativeBuilding",
4142
- "LendAction",
4143
- "Library",
4144
- "LibrarySystem",
4145
- "LifestyleModification",
4146
- "Ligament",
4147
- "LikeAction",
4148
- "LinkRole",
4149
- "LiquorStore",
4150
- "ListItem",
4151
- "ListenAction",
4152
- "LiteraryEvent",
4153
- "LiveBlogPosting",
4154
- "LoanOrCredit",
4155
- "LocalBusiness",
4156
- "LocationFeatureSpecification",
4157
- "Locksmith",
4158
- "LodgingBusiness",
4159
- "LodgingReservation",
4160
- "LoginAction",
4161
- "LoseAction",
4162
- "LymphaticVessel",
4163
- "Manuscript",
4164
- "Map",
4165
- "MapCategoryType",
4166
- "MarryAction",
4167
- "Mass",
4168
- "MathSolver",
4169
- "MaximumDoseSchedule",
4170
- "MeasurementMethodEnum",
4171
- "MeasurementTypeEnumeration",
4172
- "MediaEnumeration",
4173
- "MediaGallery",
4174
- "MediaManipulationRatingEnumeration",
4175
- "MediaObject",
4176
- "MediaReview",
4177
- "MediaReviewItem",
4178
- "MediaSubscription",
4179
- "MedicalAudience",
4180
- "MedicalAudienceType",
4181
- "MedicalBusiness",
4182
- "MedicalCause",
4183
- "MedicalClinic",
4184
- "MedicalCode",
4185
- "MedicalCondition",
4186
- "MedicalConditionStage",
4187
- "MedicalContraindication",
4188
- "MedicalDevice",
4189
- "MedicalDevicePurpose",
4190
- "MedicalEntity",
4191
- "MedicalEnumeration",
4192
- "MedicalEvidenceLevel",
4193
- "MedicalGuideline",
4194
- "MedicalGuidelineContraindication",
4195
- "MedicalGuidelineRecommendation",
4196
- "MedicalImagingTechnique",
4197
- "MedicalIndication",
4198
- "MedicalIntangible",
4199
- "MedicalObservationalStudy",
4200
- "MedicalObservationalStudyDesign",
4201
- "MedicalOrganization",
4202
- "MedicalProcedure",
4203
- "MedicalProcedureType",
4204
- "MedicalRiskCalculator",
4205
- "MedicalRiskEstimator",
4206
- "MedicalRiskFactor",
4207
- "MedicalRiskScore",
4208
- "MedicalScholarlyArticle",
4209
- "MedicalSign",
4210
- "MedicalSignOrSymptom",
4211
- "MedicalSpecialty",
4212
- "MedicalStudy",
4213
- "MedicalStudyStatus",
4214
- "MedicalSymptom",
4215
- "MedicalTest",
4216
- "MedicalTestPanel",
4217
- "MedicalTherapy",
4218
- "MedicalTrial",
4219
- "MedicalTrialDesign",
4220
- "MedicalWebPage",
4221
- "MedicineSystem",
4222
- "MeetingRoom",
4223
- "MemberProgram",
4224
- "MemberProgramTier",
4225
- "MensClothingStore",
4226
- "Menu",
4227
- "MenuItem",
4228
- "MenuSection",
4229
- "MerchantReturnEnumeration",
4230
- "MerchantReturnPolicy",
4231
- "MerchantReturnPolicySeasonalOverride",
4232
- "Message",
4233
- "MiddleSchool",
4234
- "Midwifery",
4235
- "MobileApplication",
4236
- "MobilePhoneStore",
4237
- "MolecularEntity",
4238
- "MonetaryAmount",
4239
- "MonetaryAmountDistribution",
4240
- "MonetaryGrant",
4241
- "MoneyTransfer",
4242
- "MortgageLoan",
4243
- "Mosque",
4244
- "Motel",
4245
- "Motorcycle",
4246
- "MotorcycleDealer",
4247
- "MotorcycleRepair",
4248
- "MotorizedBicycle",
4249
- "Mountain",
4250
- "MoveAction",
4251
- "Movie",
4252
- "MovieClip",
4253
- "MovieRentalStore",
4254
- "MovieSeries",
4255
- "MovieTheater",
4256
- "MovingCompany",
4257
- "Muscle",
4258
- "Museum",
4259
- "MusicAlbum",
4260
- "MusicAlbumProductionType",
4261
- "MusicAlbumReleaseType",
4262
- "MusicComposition",
4263
- "MusicEvent",
4264
- "MusicGroup",
4265
- "MusicPlaylist",
4266
- "MusicRecording",
4267
- "MusicRelease",
4268
- "MusicReleaseFormatType",
4269
- "MusicStore",
4270
- "MusicVenue",
4271
- "MusicVideoObject",
4272
- "NGO",
4273
- "NLNonprofitType",
4274
- "NailSalon",
4275
- "Nerve",
4276
- "NewsArticle",
4277
- "NewsMediaOrganization",
4278
- "Newspaper",
4279
- "NightClub",
4280
- "NonprofitType",
4281
- "Notary",
4282
- "NoteDigitalDocument",
4283
- "Number",
4284
- "Nursing",
4285
- "NutritionInformation",
4286
- "Observation",
4287
- "Obstetric",
4288
- "Occupation",
4289
- "OccupationalExperienceRequirements",
4290
- "OccupationalTherapy",
4291
- "OceanBodyOfWater",
4292
- "Offer",
4293
- "OfferCatalog",
4294
- "OfferForLease",
4295
- "OfferForPurchase",
4296
- "OfferItemCondition",
4297
- "OfferShippingDetails",
4298
- "OfficeEquipmentStore",
4299
- "OnDemandEvent",
4300
- "Oncologic",
4301
- "OnlineBusiness",
4302
- "OnlineMarketplace",
4303
- "OnlineStore",
4304
- "OpeningHoursSpecification",
4305
- "OperatingSystem",
4306
- "OpinionNewsArticle",
4307
- "Optician",
4308
- "Optometric",
4309
- "Order",
4310
- "OrderAction",
4311
- "OrderItem",
4312
- "OrderStatus",
4313
- "Organization",
4314
- "OrganizationRole",
4315
- "OrganizeAction",
4316
- "Otolaryngologic",
4317
- "OutletStore",
4318
- "OwnershipInfo",
4319
- "PaintAction",
4320
- "Painting",
4321
- "PalliativeProcedure",
4322
- "ParcelDelivery",
4323
- "ParentAudience",
4324
- "Park",
4325
- "ParkingFacility",
4326
- "PathologyTest",
4327
- "Patient",
4328
- "PawnShop",
4329
- "PayAction",
4330
- "PaymentCard",
4331
- "PaymentChargeSpecification",
4332
- "PaymentMethod",
4333
- "PaymentMethodType",
4334
- "PaymentService",
4335
- "PaymentStatusType",
4336
- "Pediatric",
4337
- "PeopleAudience",
4338
- "PerformAction",
4339
- "PerformanceRole",
4340
- "PerformingArtsEvent",
4341
- "PerformingArtsTheater",
4342
- "PerformingGroup",
4343
- "Periodical",
4344
- "Permit",
4345
- "Person",
4346
- "PetStore",
4347
- "Pharmacy",
4348
- "Photograph",
4349
- "PhotographAction",
4350
- "PhysicalActivity",
4351
- "PhysicalActivityCategory",
4352
- "PhysicalExam",
4353
- "PhysicalTherapy",
4354
- "Physician",
4355
- "PhysiciansOffice",
4356
- "Physiotherapy",
4357
- "Place",
4358
- "PlaceOfWorship",
4359
- "PlanAction",
4360
- "PlasticSurgery",
4361
- "Play",
4362
- "PlayAction",
4363
- "PlayGameAction",
4364
- "Playground",
4365
- "Plumber",
4366
- "PodcastEpisode",
4367
- "PodcastSeason",
4368
- "PodcastSeries",
4369
- "Podiatric",
4370
- "PoliceStation",
4371
- "PoliticalParty",
4372
- "Pond",
4373
- "PostOffice",
4374
- "PostalAddress",
4375
- "PostalCodeRangeSpecification",
4376
- "Poster",
4377
- "PreOrderAction",
4378
- "PrependAction",
4379
- "Preschool",
4380
- "PresentationDigitalDocument",
4381
- "PreventionIndication",
4382
- "PriceComponentTypeEnumeration",
4383
- "PriceSpecification",
4384
- "PriceTypeEnumeration",
4385
- "PrimaryCare",
4386
- "Product",
4387
- "ProductCollection",
4388
- "ProductGroup",
4389
- "ProductModel",
4390
- "ProductReturnEnumeration",
4391
- "ProductReturnPolicy",
4392
- "ProfessionalService",
4393
- "ProfilePage",
4394
- "ProgramMembership",
4395
- "Project",
4396
- "PronounceableText",
4397
- "Property",
4398
- "PropertyValue",
4399
- "PropertyValueSpecification",
4400
- "Protein",
4401
- "Psychiatric",
4402
- "PsychologicalTreatment",
4403
- "PublicHealth",
4404
- "PublicSwimmingPool",
4405
- "PublicToilet",
4406
- "PublicationEvent",
4407
- "PublicationIssue",
4408
- "PublicationVolume",
4409
- "PurchaseType",
4410
- "QAPage",
4411
- "QualitativeValue",
4412
- "QuantitativeValue",
4413
- "QuantitativeValueDistribution",
4414
- "Quantity",
4415
- "Question",
4416
- "Quiz",
4417
- "Quotation",
4418
- "QuoteAction",
4419
- "RVPark",
4420
- "RadiationTherapy",
4421
- "RadioBroadcastService",
4422
- "RadioChannel",
4423
- "RadioClip",
4424
- "RadioEpisode",
4425
- "RadioSeason",
4426
- "RadioSeries",
4427
- "RadioStation",
4428
- "Rating",
4429
- "ReactAction",
4430
- "ReadAction",
4431
- "RealEstateAgent",
4432
- "RealEstateListing",
4433
- "ReceiveAction",
4434
- "Recipe",
4435
- "Recommendation",
4436
- "RecommendedDoseSchedule",
4437
- "RecyclingCenter",
4438
- "RefundTypeEnumeration",
4439
- "RegisterAction",
4440
- "RejectAction",
4441
- "RentAction",
4442
- "RentalCarReservation",
4443
- "RepaymentSpecification",
4444
- "ReplaceAction",
4445
- "ReplyAction",
4446
- "Report",
4447
- "ReportageNewsArticle",
4448
- "ReportedDoseSchedule",
4449
- "ResearchOrganization",
4450
- "ResearchProject",
4451
- "Researcher",
4452
- "Reservation",
4453
- "ReservationPackage",
4454
- "ReservationStatusType",
4455
- "ReserveAction",
4456
- "Reservoir",
4457
- "ResetPasswordAction",
4458
- "Residence",
4459
- "Resort",
4460
- "RespiratoryTherapy",
4461
- "Restaurant",
4462
- "RestrictedDiet",
4463
- "ResumeAction",
4464
- "ReturnAction",
4465
- "ReturnFeesEnumeration",
4466
- "ReturnLabelSourceEnumeration",
4467
- "ReturnMethodEnumeration",
4468
- "Review",
4469
- "ReviewAction",
4470
- "ReviewNewsArticle",
4471
- "RiverBodyOfWater",
4472
- "Role",
4473
- "RoofingContractor",
4474
- "Room",
4475
- "RsvpAction",
4476
- "RsvpResponseType",
4477
- "RuntimePlatform",
4478
- "SaleEvent",
4479
- "SatiricalArticle",
4480
- "Schedule",
4481
- "ScheduleAction",
4482
- "ScholarlyArticle",
4483
- "School",
4484
- "SchoolDistrict",
4485
- "ScreeningEvent",
4486
- "Sculpture",
4487
- "SeaBodyOfWater",
4488
- "SearchAction",
4489
- "SearchRescueOrganization",
4490
- "SearchResultsPage",
4491
- "Season",
4492
- "Seat",
4493
- "SeekToAction",
4494
- "SelfStorage",
4495
- "SellAction",
4496
- "SendAction",
4497
- "SequentialArt",
4498
- "Series",
4499
- "Service",
4500
- "ServiceChannel",
4501
- "ServicePeriod",
4502
- "ShareAction",
4503
- "SheetMusic",
4504
- "ShippingConditions",
4505
- "ShippingDeliveryTime",
4506
- "ShippingRateSettings",
4507
- "ShippingService",
4508
- "ShoeStore",
4509
- "ShoppingCenter",
4510
- "ShortStory",
4511
- "SingleFamilyResidence",
4512
- "SiteNavigationElement",
4513
- "SizeGroupEnumeration",
4514
- "SizeSpecification",
4515
- "SizeSystemEnumeration",
4516
- "SkiResort",
4517
- "SocialEvent",
4518
- "SocialMediaPosting",
4519
- "SoftwareApplication",
4520
- "SoftwareSourceCode",
4521
- "SolveMathAction",
4522
- "SomeProducts",
4523
- "SpeakableSpecification",
4524
- "SpecialAnnouncement",
4525
- "Specialty",
4526
- "SportingGoodsStore",
4527
- "SportsActivityLocation",
4528
- "SportsClub",
4529
- "SportsEvent",
4530
- "SportsOrganization",
4531
- "SportsTeam",
4532
- "SpreadsheetDigitalDocument",
4533
- "StadiumOrArena",
4534
- "State",
4535
- "Statement",
4536
- "StatisticalPopulation",
4537
- "StatisticalVariable",
4538
- "StatusEnumeration",
4539
- "SteeringPositionValue",
4540
- "Store",
4541
- "StructuredValue",
4542
- "StupidType",
4543
- "SubscribeAction",
4544
- "Substance",
4545
- "SubwayStation",
4546
- "Suite",
4547
- "SuperficialAnatomy",
4548
- "SurgicalProcedure",
4549
- "SuspendAction",
4550
- "Syllabus",
4551
- "Synagogue",
4552
- "TVClip",
4553
- "TVEpisode",
4554
- "TVSeason",
4555
- "TVSeries",
4556
- "Table",
4557
- "TakeAction",
4558
- "TattooParlor",
4559
- "Taxi",
4560
- "TaxiReservation",
4561
- "TaxiService",
4562
- "TaxiStand",
4563
- "Taxon",
4564
- "TechArticle",
4565
- "TelevisionChannel",
4566
- "TelevisionStation",
4567
- "TennisComplex",
4568
- "Text",
4569
- "TextDigitalDocument",
4570
- "TextObject",
4571
- "TheaterEvent",
4572
- "TheaterGroup",
4573
- "TherapeuticProcedure",
4574
- "Thesis",
4575
- "Thing",
4576
- "Ticket",
4577
- "TieAction",
4578
- "TierBenefitEnumeration",
4579
- "Time",
4580
- "TipAction",
4581
- "TireShop",
4582
- "TouristAttraction",
4583
- "TouristDestination",
4584
- "TouristInformationCenter",
4585
- "TouristTrip",
4586
- "ToyStore",
4587
- "TrackAction",
4588
- "TradeAction",
4589
- "TrainReservation",
4590
- "TrainStation",
4591
- "TrainTrip",
4592
- "TransferAction",
4593
- "TravelAction",
4594
- "TravelAgency",
4595
- "TreatmentIndication",
4596
- "Trip",
4597
- "TypeAndQuantityNode",
4598
- "UKNonprofitType",
4599
- "URL",
4600
- "USNonprofitType",
4601
- "UnRegisterAction",
4602
- "UnitPriceSpecification",
4603
- "UpdateAction",
4604
- "UseAction",
4605
- "UserBlocks",
4606
- "UserCheckins",
4607
- "UserComments",
4608
- "UserDownloads",
4609
- "UserInteraction",
4610
- "UserLikes",
4611
- "UserPageVisits",
4612
- "UserPlays",
4613
- "UserPlusOnes",
4614
- "UserReview",
4615
- "UserTweets",
4616
- "VacationRental",
4617
- "Vehicle",
4618
- "Vein",
4619
- "Vessel",
4620
- "VeterinaryCare",
4621
- "VideoGallery",
4622
- "VideoGame",
4623
- "VideoGameClip",
4624
- "VideoGameSeries",
4625
- "VideoObject",
4626
- "VideoObjectSnapshot",
4627
- "ViewAction",
4628
- "VirtualLocation",
4629
- "VisualArtsEvent",
4630
- "VisualArtwork",
4631
- "VitalSign",
4632
- "Volcano",
4633
- "VoteAction",
4634
- "WPAdBlock",
4635
- "WPFooter",
4636
- "WPHeader",
4637
- "WPSideBar",
4638
- "WantAction",
4639
- "WarrantyPromise",
4640
- "WarrantyScope",
4641
- "WatchAction",
4642
- "Waterfall",
4643
- "WearAction",
4644
- "WearableMeasurementTypeEnumeration",
4645
- "WearableSizeGroupEnumeration",
4646
- "WearableSizeSystemEnumeration",
4647
- "WebAPI",
4648
- "WebApplication",
4649
- "WebContent",
4650
- "WebPage",
4651
- "WebPageElement",
4652
- "WebSite",
4653
- "WholesaleStore",
4654
- "WinAction",
4655
- "Winery",
4656
- "WorkBasedProgram",
4657
- "WorkersUnion",
4658
- "WriteAction",
4659
- "XPathType",
4660
- "Zoo",
4661
- "iflastandards_info_ns_lrm_lrmoo_F31_Performance",
4662
- "purl_bioontology_org_ontology_SNOMEDCT_105590001",
4663
- "purl_bioontology_org_ontology_SNOMEDCT_116154003",
4664
- "purl_bioontology_org_ontology_SNOMEDCT_277132007",
4665
- "purl_bioontology_org_ontology_SNOMEDCT_387713003",
4666
- "purl_bioontology_org_ontology_SNOMEDCT_410942007",
4667
- "purl_bioontology_org_ontology_SNOMEDCT_50731006",
4668
- "purl_bioontology_org_ontology_SNOMEDCT_51114001",
4669
- "purl_bioontology_org_ontology_SNOMEDCT_63653004",
4670
- "purl_org_dc_dcmitype_Dataset",
4671
- "purl_org_dc_dcmitype_Event",
4672
- "purl_org_dc_dcmitype_Image",
4673
- "purl_org_dc_dcmitype_Text",
4674
- "purl_org_ontology_bibo_Issue",
4675
- "purl_org_ontology_bibo_Periodical",
4676
- "rdfs_org_ns_void_Dataset",
4677
- "ref_gs1_org_voc_CertificationDetails",
4678
- "ref_gs1_org_voc_ContactPoint",
4679
- "ref_gs1_org_voc_Country",
4680
- "ref_gs1_org_voc_Organization",
4681
- "ref_gs1_org_voc_PostalAddress",
4682
- "sarif_info_Result",
4683
- "spec_edmcouncil_org_fibo_ontology_BE_Corporations_Corporations_Corporation",
4684
- "spec_edmcouncil_org_fibo_ontology_BE_LegalEntities_CorporateBodies_CooperativeSociety",
4685
- "spec_edmcouncil_org_fibo_ontology_BE_NotForProfitOrganizations_NotForProfitOrganizations_NonGovernmentalOrganization",
4686
- "spec_edmcouncil_org_fibo_ontology_FBC_ProductsAndServices_FinancialProductsAndServices_BankAccount",
4687
- "spec_edmcouncil_org_fibo_ontology_FBC_ProductsAndServices_FinancialProductsAndServices_PaymentMechanism",
4688
- "spec_edmcouncil_org_fibo_ontology_FND_Agreements_Contracts_MutualContractualAgreement",
4689
- "spec_edmcouncil_org_fibo_ontology_FND_Arrangements_Documents_Certificate",
4690
- "spec_edmcouncil_org_fibo_ontology_FND_Arrangements_Documents_Document",
4691
- "spec_edmcouncil_org_fibo_ontology_FND_Arrangements_Documents_LegalDocument",
4692
- "spec_edmcouncil_org_fibo_ontology_FND_DatesAndTimes_Occurrences_Occurrence",
4693
- "spec_edmcouncil_org_fibo_ontology_FND_Organizations_Organizations_ContactPoint",
4694
- "spec_edmcouncil_org_fibo_ontology_FND_Organizations_Organizations_Organization",
4695
- "spec_edmcouncil_org_fibo_ontology_FND_Places_Addresses_PostalAddress",
4696
- "spec_edmcouncil_org_fibo_ontology_FND_Places_Locations_Municipality",
4697
- "spec_edmcouncil_org_fibo_ontology_FND_ProductsAndServices_ProductsAndServices_Offer",
4698
- "spec_edmcouncil_org_fibo_ontology_FND_ProductsAndServices_ProductsAndServices_Price",
4699
- "spec_edmcouncil_org_fibo_ontology_FND_ProductsAndServices_ProductsAndServices_Product",
4700
- "spec_edmcouncil_org_fibo_ontology_PAY_PaymentServices_PaymentServices_PaymentService",
4701
- "unece_org_vocab_AmountType",
4702
- "unece_org_vocab_BrandName",
4703
- "unece_org_vocab_Country",
4704
- "unece_org_vocab_ElectronicDocument",
4705
- "unece_org_vocab_FinancialCard",
4706
- "unece_org_vocab_GeographicalCoordinate",
4707
- "unece_org_vocab_Invoice",
4708
- "unece_org_vocab_LineTradeAgreement",
4709
- "unece_org_vocab_Offer",
4710
- "unece_org_vocab_Order",
4711
- "unece_org_vocab_PaymentMeans",
4712
- "unece_org_vocab_RequestForQuotation",
4713
- "unece_org_vocab_SpecifiedCertificate",
4714
- "unece_org_vocab_SpecifiedTradeProduct",
4715
- "unece_org_vocab_TradeAddress",
4716
- "unece_org_vocab_TradeProduct",
4717
- "unece_org_vocab_TransportMethod",
4718
- "www_omg_org_spec_Commons_Classifiers_Classifier",
4719
- "www_omg_org_spec_Commons_Collections_Collection",
4720
- "www_omg_org_spec_Commons_DatesAndTimes_Date",
4721
- "www_omg_org_spec_Commons_DatesAndTimes_DateTime",
4722
- "www_omg_org_spec_Commons_DatesAndTimes_Duration",
4723
- "www_omg_org_spec_Commons_GeopoliticalEntities_GeopoliticalEntity",
4724
- "www_omg_org_spec_Commons_GeopoliticalEntities_Subdivision",
4725
- "www_omg_org_spec_Commons_Locations_Address",
4726
- "www_omg_org_spec_Commons_Locations_GeographicCoordinate",
4727
- "www_omg_org_spec_Commons_Locations_Location",
4728
- "www_omg_org_spec_LCC_Countries_CountryRepresentation_Continent",
4729
- "www_omg_org_spec_LCC_Countries_CountryRepresentation_Country",
4730
- "www_w3_org_2006_vcard_ns_VCard",
4731
- "www_w3_org_ns_dcat_Catalog",
4732
- "www_w3_org_ns_dcat_Dataset",
4733
- "www_w3_org_ns_dcat_Distribution",
4734
- "www_w3_org_ns_hydra_core_Error",
4735
- "www_w3_org_ns_prov_InstantaneousEvent",
4736
- "www_w3_org_ns_prov_atTime",
4737
- "xmlns_com_foaf_0_1_Person"
4738
- ]);
3662
+ var SCHEMA_ORG_TYPES = new Set(
3663
+ "3DModel AMRadioChannel APIReference AboutPage AcceptAction Accommodation AccountingService AchieveAction Action ActionAccessSpecification ActionStatusType ActivateAction AddAction AdministrativeArea AdultEntertainment AdultOrientedEnumeration AdvertiserContentArticle AggregateOffer AggregateRating AgreeAction Airline Airport AlignmentObject AllocateAction AmpStory AmusementPark AnalysisNewsArticle AnatomicalStructure AnatomicalSystem AnimalShelter Answer Apartment ApartmentComplex AppendAction ApplyAction ApprovedIndication Aquarium ArchiveComponent ArchiveOrganization ArriveAction ArtGallery Artery Article AskAction AskPublicNewsArticle AssessAction AssignAction Atlas Attorney Audience AudioObject AudioObjectSnapshot Audiobook AuthenticateAction AuthorizeAction AutoBodyShop AutoDealer AutoPartsStore AutoRental AutoRepair AutoWash AutomatedTeller AutomotiveBusiness BackgroundNewsArticle Bakery BankAccount BankOrCreditUnion BarOrPub Barcode Beach BeautySalon BedAndBreakfast BedDetails BedType BefriendAction BikeStore BioChemEntity Blog BlogPosting BloodTest BoardingPolicyType BoatReservation BoatTerminal BoatTrip BodyMeasurementTypeEnumeration BodyOfWater Bone Book BookFormatType BookSeries BookStore BookmarkAction Boolean BorrowAction BowlingAlley BrainStructure Brand BreadcrumbList Brewery Bridge BroadcastChannel BroadcastEvent BroadcastFrequencySpecification BroadcastService BrokerageAccount BuddhistTemple BusOrCoach BusReservation BusStation BusStop BusTrip BusinessAudience BusinessEntityType BusinessEvent BusinessFunction BuyAction CDCPMDRecord CableOrSatelliteService CafeOrCoffeeShop Campground CampingPitch Canal CancelAction Car CarUsageType Casino CategoryCode CategoryCodeSet CatholicChurch Cemetery Certification CertificationStatusEnumeration Chapter CheckAction CheckInAction CheckOutAction CheckoutPage ChemicalSubstance ChildCare ChildrensEvent ChooseAction Church City CityHall CivicStructure Claim ClaimReview Class Clip ClothingStore Code Collection CollectionPage CollegeOrUniversity ComedyClub ComedyEvent ComicCoverArt ComicIssue ComicSeries ComicStory Comment CommentAction CommunicateAction CommunityHealth CompleteDataFeed CompoundPriceSpecification ComputerLanguage ComputerStore ConferenceEvent ConfirmAction Consortium ConstraintNode ConsumeAction ContactPage ContactPoint ContactPointOption Continent ControlAction ConvenienceStore Conversation CookAction Cooperative Corporation CorrectionComment Country Course CourseInstance Courthouse CoverArt CovidTestingFacility CreateAction CreativeWork CreativeWorkSeason CreativeWorkSeries Credential CreditCard Crematorium CriticReview CssSelectorType CurrencyConversionService DDxElement DENonprofitType DanceEvent DanceGroup DataCatalog DataDownload DataFeed DataFeedItem DataType Dataset Date DateTime DatedMoneySpecification DayOfWeek DaySpa DeactivateAction DefenceEstablishment DefinedRegion DefinedTerm DefinedTermSet DeleteAction DeliveryChargeSpecification DeliveryEvent DeliveryMethod DeliveryTimeSettings Demand Dentist DepartAction DepartmentStore DepositAccount Dermatology DiagnosticLab DiagnosticProcedure Diet DietNutrition DietarySupplement DigitalDocument DigitalDocumentPermission DigitalDocumentPermissionType DigitalPlatformEnumeration DisagreeAction DiscoverAction DiscussionForumPosting DislikeAction Distance Distillery DonateAction DoseSchedule DownloadAction DrawAction Drawing DrinkAction DriveWheelConfigurationValue Drug DrugClass DrugCost DrugCostCategory DrugLegalStatus DrugPregnancyCategory DrugPrescriptionStatus DrugStrength DryCleaningOrLaundry Duration EUEnergyEfficiencyEnumeration EatAction EducationEvent EducationalAudience EducationalOccupationalCredential EducationalOccupationalProgram EducationalOrganization Electrician ElectronicsStore ElementarySchool EmailMessage Embassy Emergency EmergencyService EmployeeRole EmployerAggregateRating EmployerReview EmploymentAgency EndorseAction EndorsementRating Energy EnergyConsumptionDetails EnergyEfficiencyEnumeration EnergyStarEnergyEfficiencyEnumeration EngineSpecification EntertainmentBusiness EntryPoint Enumeration Episode Error Event EventAttendanceModeEnumeration EventReservation EventSeries EventStatusType EventVenue ExchangeRateSpecification ExerciseAction ExerciseGym ExercisePlan ExhibitionEvent FAQPage FMRadioChannel FastFoodRestaurant Festival FilmAction FinancialIncentive FinancialProduct FinancialService FindAction FireStation Flight FlightReservation Float FloorPlan Florist FollowAction FoodEstablishment FoodEstablishmentReservation FoodEvent FoodService FulfillmentTypeEnumeration FundingAgency FundingScheme FurnitureStore Game GameAvailabilityEnumeration GamePlayMode GameServer GameServerStatus GardenStore GasStation GatedResidenceCommunity GenderType Gene GeneralContractor GeoCircle GeoCoordinates GeoShape GeospatialGeometry Geriatric GiveAction GolfCourse GovernmentBenefitsType GovernmentBuilding GovernmentOffice GovernmentOrganization GovernmentPermit GovernmentService Grant GroceryStore Guide Gynecologic HVACBusiness Hackathon HairSalon HardwareStore HealthAndBeautyBusiness HealthAspectEnumeration HealthClub HealthInsurancePlan HealthPlanCostSharingSpecification HealthPlanFormulary HealthPlanNetwork HealthTopicContent HighSchool HinduTemple HobbyShop HomeAndConstructionBusiness HomeGoodsStore Hospital Hostel Hotel HotelRoom House HousePainter HowTo HowToDirection HowToItem HowToSection HowToStep HowToSupply HowToTip HowToTool HyperToc HyperTocEntry IPTCDigitalSourceEnumeration ITNonprofitType IceCreamShop IgnoreAction ImageGallery ImageObject ImageObjectSnapshot ImagingTest IncentiveQualifiedExpenseType IncentiveStatus IncentiveType IndividualPhysician IndividualProduct InfectiousAgentClass InfectiousDisease InformAction InsertAction InstallAction InstantaneousEvent InsuranceAgency Intangible Integer InteractAction InteractionCounter InternetCafe InvestmentFund InvestmentOrDeposit InviteAction Invoice ItemAvailability ItemList ItemListOrderType ItemPage JewelryStore JobPosting JoinAction Joint LakeBodyOfWater Landform LandmarksOrHistoricalBuildings Language LearningResource LeaveAction LegalForceStatus LegalService LegalValueLevel Legislation LegislationObject LegislativeBuilding LendAction Library LibrarySystem LifestyleModification Ligament LikeAction LinkRole LiquorStore ListItem ListenAction LiteraryEvent LiveBlogPosting LoanOrCredit LocalBusiness LocationFeatureSpecification Locksmith LodgingBusiness LodgingReservation LoginAction LoseAction LymphaticVessel Manuscript Map MapCategoryType MarryAction Mass MathSolver MaximumDoseSchedule MeasurementMethodEnum MeasurementTypeEnumeration MediaEnumeration MediaGallery MediaManipulationRatingEnumeration MediaObject MediaReview MediaReviewItem MediaSubscription MedicalAudience MedicalAudienceType MedicalBusiness MedicalCause MedicalClinic MedicalCode MedicalCondition MedicalConditionStage MedicalContraindication MedicalDevice MedicalDevicePurpose MedicalEntity MedicalEnumeration MedicalEvidenceLevel MedicalGuideline MedicalGuidelineContraindication MedicalGuidelineRecommendation MedicalImagingTechnique MedicalIndication MedicalIntangible MedicalObservationalStudy MedicalObservationalStudyDesign MedicalOrganization MedicalProcedure MedicalProcedureType MedicalRiskCalculator MedicalRiskEstimator MedicalRiskFactor MedicalRiskScore MedicalScholarlyArticle MedicalSign MedicalSignOrSymptom MedicalSpecialty MedicalStudy MedicalStudyStatus MedicalSymptom MedicalTest MedicalTestPanel MedicalTherapy MedicalTrial MedicalTrialDesign MedicalWebPage MedicineSystem MeetingRoom MemberProgram MemberProgramTier MensClothingStore Menu MenuItem MenuSection MerchantReturnEnumeration MerchantReturnPolicy MerchantReturnPolicySeasonalOverride Message MiddleSchool Midwifery MobileApplication MobilePhoneStore MolecularEntity MonetaryAmount MonetaryAmountDistribution MonetaryGrant MoneyTransfer MortgageLoan Mosque Motel Motorcycle MotorcycleDealer MotorcycleRepair MotorizedBicycle Mountain MoveAction Movie MovieClip MovieRentalStore MovieSeries MovieTheater MovingCompany Muscle Museum MusicAlbum MusicAlbumProductionType MusicAlbumReleaseType MusicComposition MusicEvent MusicGroup MusicPlaylist MusicRecording MusicRelease MusicReleaseFormatType MusicStore MusicVenue MusicVideoObject NGO NLNonprofitType NailSalon Nerve NewsArticle NewsMediaOrganization Newspaper NightClub NonprofitType Notary NoteDigitalDocument Number Nursing NutritionInformation Observation Obstetric Occupation OccupationalExperienceRequirements OccupationalTherapy OceanBodyOfWater Offer OfferCatalog OfferForLease OfferForPurchase OfferItemCondition OfferShippingDetails OfficeEquipmentStore OnDemandEvent Oncologic OnlineBusiness OnlineMarketplace OnlineStore OpeningHoursSpecification OperatingSystem OpinionNewsArticle Optician Optometric Order OrderAction OrderItem OrderStatus Organization OrganizationRole OrganizeAction Otolaryngologic OutletStore OwnershipInfo PaintAction Painting PalliativeProcedure ParcelDelivery ParentAudience Park ParkingFacility PathologyTest Patient PawnShop PayAction PaymentCard PaymentChargeSpecification PaymentMethod PaymentMethodType PaymentService PaymentStatusType Pediatric PeopleAudience PerformAction PerformanceRole PerformingArtsEvent PerformingArtsTheater PerformingGroup Periodical Permit Person PetStore Pharmacy Photograph PhotographAction PhysicalActivity PhysicalActivityCategory PhysicalExam PhysicalTherapy Physician PhysiciansOffice Physiotherapy Place PlaceOfWorship PlanAction PlasticSurgery Play PlayAction PlayGameAction Playground Plumber PodcastEpisode PodcastSeason PodcastSeries Podiatric PoliceStation PoliticalParty Pond PostOffice PostalAddress PostalCodeRangeSpecification Poster PreOrderAction PrependAction Preschool PresentationDigitalDocument PreventionIndication PriceComponentTypeEnumeration PriceSpecification PriceTypeEnumeration PrimaryCare Product ProductCollection ProductGroup ProductModel ProductReturnEnumeration ProductReturnPolicy ProfessionalService ProfilePage ProgramMembership Project PronounceableText Property PropertyValue PropertyValueSpecification Protein Psychiatric PsychologicalTreatment PublicHealth PublicSwimmingPool PublicToilet PublicationEvent PublicationIssue PublicationVolume PurchaseType QAPage QualitativeValue QuantitativeValue QuantitativeValueDistribution Quantity Question Quiz Quotation QuoteAction RVPark RadiationTherapy RadioBroadcastService RadioChannel RadioClip RadioEpisode RadioSeason RadioSeries RadioStation Rating ReactAction ReadAction RealEstateAgent RealEstateListing ReceiveAction Recipe Recommendation RecommendedDoseSchedule RecyclingCenter RefundTypeEnumeration RegisterAction RejectAction RentAction RentalCarReservation RepaymentSpecification ReplaceAction ReplyAction Report ReportageNewsArticle ReportedDoseSchedule ResearchOrganization ResearchProject Researcher Reservation ReservationPackage ReservationStatusType ReserveAction Reservoir ResetPasswordAction Residence Resort RespiratoryTherapy Restaurant RestrictedDiet ResumeAction ReturnAction ReturnFeesEnumeration ReturnLabelSourceEnumeration ReturnMethodEnumeration Review ReviewAction ReviewNewsArticle RiverBodyOfWater Role RoofingContractor Room RsvpAction RsvpResponseType RuntimePlatform SaleEvent SatiricalArticle Schedule ScheduleAction ScholarlyArticle School SchoolDistrict ScreeningEvent Sculpture SeaBodyOfWater SearchAction SearchRescueOrganization SearchResultsPage Season Seat SeekToAction SelfStorage SellAction SendAction SequentialArt Series Service ServiceChannel ServicePeriod ShareAction SheetMusic ShippingConditions ShippingDeliveryTime ShippingRateSettings ShippingService ShoeStore ShoppingCenter ShortStory SingleFamilyResidence SiteNavigationElement SizeGroupEnumeration SizeSpecification SizeSystemEnumeration SkiResort SocialEvent SocialMediaPosting SoftwareApplication SoftwareSourceCode SolveMathAction SomeProducts SpeakableSpecification SpecialAnnouncement Specialty SportingGoodsStore SportsActivityLocation SportsClub SportsEvent SportsOrganization SportsTeam SpreadsheetDigitalDocument StadiumOrArena State Statement StatisticalPopulation StatisticalVariable StatusEnumeration SteeringPositionValue Store StructuredValue StupidType SubscribeAction Substance SubwayStation Suite SuperficialAnatomy SurgicalProcedure SuspendAction Syllabus Synagogue TVClip TVEpisode TVSeason TVSeries Table TakeAction TattooParlor Taxi TaxiReservation TaxiService TaxiStand Taxon TechArticle TelevisionChannel TelevisionStation TennisComplex Text TextDigitalDocument TextObject TheaterEvent TheaterGroup TherapeuticProcedure Thesis Thing Ticket TieAction TierBenefitEnumeration Time TipAction TireShop TouristAttraction TouristDestination TouristInformationCenter TouristTrip ToyStore TrackAction TradeAction TrainReservation TrainStation TrainTrip TransferAction TravelAction TravelAgency TreatmentIndication Trip TypeAndQuantityNode UKNonprofitType URL USNonprofitType UnRegisterAction UnitPriceSpecification UpdateAction UseAction UserBlocks UserCheckins UserComments UserDownloads UserInteraction UserLikes UserPageVisits UserPlays UserPlusOnes UserReview UserTweets VacationRental Vehicle Vein Vessel VeterinaryCare VideoGallery VideoGame VideoGameClip VideoGameSeries VideoObject VideoObjectSnapshot ViewAction VirtualLocation VisualArtsEvent VisualArtwork VitalSign Volcano VoteAction WPAdBlock WPFooter WPHeader WPSideBar WantAction WarrantyPromise WarrantyScope WatchAction Waterfall WearAction WearableMeasurementTypeEnumeration WearableSizeGroupEnumeration WearableSizeSystemEnumeration WebAPI WebApplication WebContent WebPage WebPageElement WebSite WholesaleStore WinAction Winery WorkBasedProgram WorkersUnion WriteAction XPathType Zoo iflastandards_info_ns_lrm_lrmoo_F31_Performance purl_bioontology_org_ontology_SNOMEDCT_105590001 purl_bioontology_org_ontology_SNOMEDCT_116154003 purl_bioontology_org_ontology_SNOMEDCT_277132007 purl_bioontology_org_ontology_SNOMEDCT_387713003 purl_bioontology_org_ontology_SNOMEDCT_410942007 purl_bioontology_org_ontology_SNOMEDCT_50731006 purl_bioontology_org_ontology_SNOMEDCT_51114001 purl_bioontology_org_ontology_SNOMEDCT_63653004 purl_org_dc_dcmitype_Dataset purl_org_dc_dcmitype_Event purl_org_dc_dcmitype_Image purl_org_dc_dcmitype_Text purl_org_ontology_bibo_Issue purl_org_ontology_bibo_Periodical rdfs_org_ns_void_Dataset ref_gs1_org_voc_CertificationDetails ref_gs1_org_voc_ContactPoint ref_gs1_org_voc_Country ref_gs1_org_voc_Organization ref_gs1_org_voc_PostalAddress sarif_info_Result spec_edmcouncil_org_fibo_ontology_BE_Corporations_Corporations_Corporation spec_edmcouncil_org_fibo_ontology_BE_LegalEntities_CorporateBodies_CooperativeSociety spec_edmcouncil_org_fibo_ontology_BE_NotForProfitOrganizations_NotForProfitOrganizations_NonGovernmentalOrganization spec_edmcouncil_org_fibo_ontology_FBC_ProductsAndServices_FinancialProductsAndServices_BankAccount spec_edmcouncil_org_fibo_ontology_FBC_ProductsAndServices_FinancialProductsAndServices_PaymentMechanism spec_edmcouncil_org_fibo_ontology_FND_Agreements_Contracts_MutualContractualAgreement spec_edmcouncil_org_fibo_ontology_FND_Arrangements_Documents_Certificate spec_edmcouncil_org_fibo_ontology_FND_Arrangements_Documents_Document spec_edmcouncil_org_fibo_ontology_FND_Arrangements_Documents_LegalDocument spec_edmcouncil_org_fibo_ontology_FND_DatesAndTimes_Occurrences_Occurrence spec_edmcouncil_org_fibo_ontology_FND_Organizations_Organizations_ContactPoint spec_edmcouncil_org_fibo_ontology_FND_Organizations_Organizations_Organization spec_edmcouncil_org_fibo_ontology_FND_Places_Addresses_PostalAddress spec_edmcouncil_org_fibo_ontology_FND_Places_Locations_Municipality spec_edmcouncil_org_fibo_ontology_FND_ProductsAndServices_ProductsAndServices_Offer spec_edmcouncil_org_fibo_ontology_FND_ProductsAndServices_ProductsAndServices_Price spec_edmcouncil_org_fibo_ontology_FND_ProductsAndServices_ProductsAndServices_Product spec_edmcouncil_org_fibo_ontology_PAY_PaymentServices_PaymentServices_PaymentService unece_org_vocab_AmountType unece_org_vocab_BrandName unece_org_vocab_Country unece_org_vocab_ElectronicDocument unece_org_vocab_FinancialCard unece_org_vocab_GeographicalCoordinate unece_org_vocab_Invoice unece_org_vocab_LineTradeAgreement unece_org_vocab_Offer unece_org_vocab_Order unece_org_vocab_PaymentMeans unece_org_vocab_RequestForQuotation unece_org_vocab_SpecifiedCertificate unece_org_vocab_SpecifiedTradeProduct unece_org_vocab_TradeAddress unece_org_vocab_TradeProduct unece_org_vocab_TransportMethod www_omg_org_spec_Commons_Classifiers_Classifier www_omg_org_spec_Commons_Collections_Collection www_omg_org_spec_Commons_DatesAndTimes_Date www_omg_org_spec_Commons_DatesAndTimes_DateTime www_omg_org_spec_Commons_DatesAndTimes_Duration www_omg_org_spec_Commons_GeopoliticalEntities_GeopoliticalEntity www_omg_org_spec_Commons_GeopoliticalEntities_Subdivision www_omg_org_spec_Commons_Locations_Address www_omg_org_spec_Commons_Locations_GeographicCoordinate www_omg_org_spec_Commons_Locations_Location www_omg_org_spec_LCC_Countries_CountryRepresentation_Continent www_omg_org_spec_LCC_Countries_CountryRepresentation_Country www_w3_org_2006_vcard_ns_VCard www_w3_org_ns_dcat_Catalog www_w3_org_ns_dcat_Dataset www_w3_org_ns_dcat_Distribution www_w3_org_ns_hydra_core_Error www_w3_org_ns_prov_InstantaneousEvent www_w3_org_ns_prov_atTime xmlns_com_foaf_0_1_Person".split(
3664
+ " "
3665
+ )
3666
+ );
4739
3667
 
4740
3668
  // src/rules/seo/json-ld-validity.ts
4741
3669
  var SCHEMA_ORG_CONTEXT_RE = /^https?:\/\/schema\.org\/?$/;
@@ -5355,57 +4283,56 @@ var seoHeadingLevelSkip = {
5355
4283
  }
5356
4284
  };
5357
4285
 
5358
- // src/rules/kit-module-rule.ts
5359
- var PENALIZED2 = { presence: "none", value: "absent" };
5360
- var PASS2 = { presence: "own", value: "static" };
5361
- function isSuppressed(m, ruleId, line) {
5362
- return (m.suppressions ?? []).some((s) => s.line === line && (!s.ruleIds || s.ruleIds.includes(ruleId)));
4286
+ // src/rules/component-rule.ts
4287
+ function isSuppressed(suppressions, ruleId, line) {
4288
+ return (suppressions ?? []).some((s) => s.line === line && (!s.ruleIds || s.ruleIds.includes(ruleId)));
5363
4289
  }
5364
- function kitModuleRule(opts) {
5365
- const docsUrl12 = docsUrlFor(opts.id);
5366
- const severity = opts.severity ?? "warning";
4290
+ function fileRule(spec) {
4291
+ const docsUrl12 = docsUrlFor(spec.id);
5367
4292
  return {
5368
- id: opts.id,
5369
- title: opts.title,
5370
- category: opts.category,
5371
- severity,
4293
+ id: spec.id,
4294
+ title: spec.title,
4295
+ category: spec.category,
4296
+ severity: spec.severity,
5372
4297
  scope: "component",
5373
- rationale: opts.rationale,
5374
- ...opts.fix ? { fix: opts.fix } : {},
4298
+ rationale: spec.rationale,
4299
+ ...spec.fix ? { fix: spec.fix } : {},
4300
+ ...spec.options ? { options: spec.options } : {},
5375
4301
  async check(ctx) {
5376
4302
  const out = [];
5377
- for (const m of ctx.kitModules ?? []) {
5378
- if (!opts.applies(m, ctx)) continue;
5379
- const bad = opts.bad(m, ctx).filter((b) => !(b.line > 0 && isSuppressed(m, opts.id, b.line)));
4303
+ const compiled = compileOverrides(ctx.config);
4304
+ for (const f of spec.facts(ctx) ?? []) {
4305
+ const o = resolveRuleOptions(spec.id, spec.options, ctx.config, { route: f.file, file: f.file }, compiled);
4306
+ if (!spec.applies(f, o, ctx)) continue;
4307
+ const recommendation10 = typeof spec.recommendation === "function" ? spec.recommendation(o) : spec.recommendation;
4308
+ const bad = spec.bad(f, o, ctx).filter((b) => !(b.line > 0 && isSuppressed(f.suppressions, spec.id, b.line)));
5380
4309
  if (bad.length === 0) {
5381
4310
  out.push({
5382
- id: opts.id,
5383
- category: opts.category,
5384
- severity,
5385
- detection: PASS2,
5386
- route: m.file,
5387
- // Uniform PASS-result attribution (design 2026-08-08-pass-result-location-design.md):
5388
- // same location a penalized result for this file would carry.
5389
- location: m.file,
5390
- message: opts.label,
5391
- recommendation: opts.recommendation,
4311
+ id: spec.id,
4312
+ category: spec.category,
4313
+ severity: spec.severity,
4314
+ detection: PASS,
4315
+ route: f.file,
4316
+ location: f.file,
4317
+ message: spec.label,
4318
+ recommendation: recommendation10,
5392
4319
  docsUrl: docsUrl12
5393
4320
  });
5394
4321
  continue;
5395
4322
  }
5396
4323
  for (const b of bad) {
5397
4324
  out.push({
5398
- id: opts.id,
5399
- category: opts.category,
5400
- severity,
5401
- detection: PENALIZED2,
5402
- route: m.file,
5403
- location: m.file,
4325
+ id: spec.id,
4326
+ category: spec.category,
4327
+ severity: spec.severity,
4328
+ detection: PENALIZED,
4329
+ route: f.file,
4330
+ location: f.file,
5404
4331
  ...b.line > 0 ? { line: b.line } : {},
5405
4332
  message: b.message,
5406
- recommendation: opts.recommendation,
4333
+ recommendation: recommendation10,
5407
4334
  docsUrl: docsUrl12,
5408
- ...opts.fix ? { fix: { ...opts.fix } } : {}
4335
+ ...spec.fix ? { fix: { ...spec.fix } } : {}
5409
4336
  });
5410
4337
  }
5411
4338
  }
@@ -5413,6 +4340,24 @@ function kitModuleRule(opts) {
5413
4340
  }
5414
4341
  };
5415
4342
  }
4343
+ function componentRule(opts) {
4344
+ return fileRule({
4345
+ ...opts,
4346
+ severity: opts.severity ?? "warning",
4347
+ facts: (ctx) => ctx.components
4348
+ });
4349
+ }
4350
+
4351
+ // src/rules/kit-module-rule.ts
4352
+ function kitModuleRule(opts) {
4353
+ return fileRule({
4354
+ ...opts,
4355
+ severity: opts.severity ?? "warning",
4356
+ facts: (ctx) => ctx.kitModules,
4357
+ applies: (m, _o, ctx) => opts.applies(m, ctx),
4358
+ bad: (m, _o, ctx) => opts.bad(m, ctx)
4359
+ });
4360
+ }
5416
4361
 
5417
4362
  // src/rules/seo/ssr-disabled.ts
5418
4363
  var ROOT_LAYOUT_RE = /^src\/routes\/\+layout(\.server)?\.(ts|js)$/;
@@ -5433,69 +4378,6 @@ var seoSsrDisabled = kitModuleRule({
5433
4378
  ]
5434
4379
  });
5435
4380
 
5436
- // src/rules/component-rule.ts
5437
- var PENALIZED3 = { presence: "none", value: "absent" };
5438
- var PASS3 = { presence: "own", value: "static" };
5439
- function isSuppressed2(c, ruleId, line) {
5440
- return (c.suppressions ?? []).some((s) => s.line === line && (!s.ruleIds || s.ruleIds.includes(ruleId)));
5441
- }
5442
- function componentRule(opts) {
5443
- const docsUrl12 = docsUrlFor(opts.id);
5444
- const severity = opts.severity ?? "warning";
5445
- return {
5446
- id: opts.id,
5447
- title: opts.title,
5448
- category: opts.category,
5449
- severity,
5450
- scope: "component",
5451
- rationale: opts.rationale,
5452
- ...opts.fix ? { fix: opts.fix } : {},
5453
- ...opts.options ? { options: opts.options } : {},
5454
- async check(ctx) {
5455
- const out = [];
5456
- const compiled = compileOverrides(ctx.config);
5457
- for (const c of ctx.components ?? []) {
5458
- const o = resolveRuleOptions(opts.id, opts.options, ctx.config, { route: c.file, file: c.file }, compiled);
5459
- const recommendation10 = typeof opts.recommendation === "function" ? opts.recommendation(o) : opts.recommendation;
5460
- if (!opts.applies(c, o, ctx)) continue;
5461
- const bad = opts.bad(c, o, ctx).filter((b) => !(b.line > 0 && isSuppressed2(c, opts.id, b.line)));
5462
- if (bad.length === 0) {
5463
- out.push({
5464
- id: opts.id,
5465
- category: opts.category,
5466
- severity,
5467
- detection: PASS3,
5468
- route: c.file,
5469
- // Uniform PASS-result attribution (design 2026-08-08-pass-result-location-design.md):
5470
- // same location a penalized result for this file would carry.
5471
- location: c.file,
5472
- message: opts.label,
5473
- recommendation: recommendation10,
5474
- docsUrl: docsUrl12
5475
- });
5476
- continue;
5477
- }
5478
- for (const b of bad) {
5479
- out.push({
5480
- id: opts.id,
5481
- category: opts.category,
5482
- severity,
5483
- detection: PENALIZED3,
5484
- route: c.file,
5485
- location: c.file,
5486
- ...b.line > 0 ? { line: b.line } : {},
5487
- message: b.message,
5488
- recommendation: recommendation10,
5489
- docsUrl: docsUrl12,
5490
- ...opts.fix ? { fix: { ...opts.fix } } : {}
5491
- });
5492
- }
5493
- }
5494
- return out;
5495
- }
5496
- };
5497
- }
5498
-
5499
4381
  // src/rules/correctness/each-key.ts
5500
4382
  var correctnessEachKey = componentRule({
5501
4383
  id: "correctness/each-key",
@@ -5659,8 +4541,6 @@ var correctnessOrphanEffect = componentRule({
5659
4541
  });
5660
4542
 
5661
4543
  // src/rules/correctness/orphan-lifecycle.ts
5662
- var PENALIZED4 = { presence: "none", value: "absent" };
5663
- var PASS4 = { presence: "own", value: "static" };
5664
4544
  var ID = "correctness/orphan-lifecycle";
5665
4545
  var DOCS_URL = docsUrlFor(ID);
5666
4546
  var LABEL = "Lifecycle-call context";
@@ -5674,17 +4554,14 @@ function kitLifecycleMessage(name, kind, inHandler) {
5674
4554
  }
5675
4555
  return inHandler ? `${name}() is called in a load/handler \u2014 it runs on every request, outside component initialisation, and throws lifecycle_outside_component at runtime` : `${name}() runs outside component initialisation (module evaluation or the init hook) \u2014 it throws lifecycle_outside_component at runtime`;
5676
4556
  }
5677
- function isSuppressed3(suppressions, line) {
5678
- return (suppressions ?? []).some((s) => s.line === line && (!s.ruleIds || s.ruleIds.includes(ID)));
5679
- }
5680
4557
  function emitFile(out, file, issues, suppressions) {
5681
- const bad = issues.filter((b) => !(b.line > 0 && isSuppressed3(suppressions, b.line)));
4558
+ const bad = issues.filter((b) => !(b.line > 0 && isSuppressed(suppressions, ID, b.line)));
5682
4559
  if (bad.length === 0) {
5683
4560
  out.push({
5684
4561
  id: ID,
5685
4562
  category: "correctness",
5686
4563
  severity: "critical",
5687
- detection: PASS4,
4564
+ detection: PASS,
5688
4565
  route: file,
5689
4566
  // Uniform PASS-result attribution (design 2026-08-08-pass-result-location-design.md):
5690
4567
  // same location a penalized result for this file would carry.
@@ -5700,7 +4577,7 @@ function emitFile(out, file, issues, suppressions) {
5700
4577
  id: ID,
5701
4578
  category: "correctness",
5702
4579
  severity: "critical",
5703
- detection: PENALIZED4,
4580
+ detection: PENALIZED,
5704
4581
  route: file,
5705
4582
  location: file,
5706
4583
  ...b.line > 0 ? { line: b.line } : {},
@@ -5750,8 +4627,6 @@ var correctnessOrphanLifecycle = {
5750
4627
  };
5751
4628
 
5752
4629
  // src/rules/correctness/base-path-navigation.ts
5753
- var PENALIZED5 = { presence: "none", value: "absent" };
5754
- var PASS5 = { presence: "own", value: "static" };
5755
4630
  var ID2 = "correctness/base-path-navigation";
5756
4631
  var DOCS_URL2 = docsUrlFor(ID2);
5757
4632
  var LABEL2 = "Base-path-aware navigation";
@@ -5768,17 +4643,14 @@ function messageFor2(link) {
5768
4643
  }
5769
4644
  return `redirect(\u2026, '${link.path}') is root-relative \u2014 the Location header points outside this project's kit.paths.base and 404s in production. Use resolve('${link.path}') from '$app/paths'.`;
5770
4645
  }
5771
- function isSuppressed4(suppressions, line) {
5772
- return (suppressions ?? []).some((s) => s.line === line && (!s.ruleIds || s.ruleIds.includes(ID2)));
5773
- }
5774
4646
  function emitFile2(out, file, links, suppressions) {
5775
- const bad = links.filter((l) => !(l.line > 0 && isSuppressed4(suppressions, l.line)));
4647
+ const bad = links.filter((l) => !(l.line > 0 && isSuppressed(suppressions, ID2, l.line)));
5776
4648
  if (bad.length === 0) {
5777
4649
  out.push({
5778
4650
  id: ID2,
5779
4651
  category: "correctness",
5780
4652
  severity: "warning",
5781
- detection: PASS5,
4653
+ detection: PASS,
5782
4654
  route: file,
5783
4655
  // Uniform PASS-result attribution (design 2026-08-08-pass-result-location-design.md):
5784
4656
  // same location a penalized result for this file would carry.
@@ -5794,7 +4666,7 @@ function emitFile2(out, file, links, suppressions) {
5794
4666
  id: ID2,
5795
4667
  category: "correctness",
5796
4668
  severity: "warning",
5797
- detection: PENALIZED5,
4669
+ detection: PENALIZED,
5798
4670
  route: file,
5799
4671
  location: file,
5800
4672
  ...l.line > 0 ? { line: l.line } : {},
@@ -5831,24 +4703,19 @@ var correctnessBasePathNavigation = {
5831
4703
  };
5832
4704
 
5833
4705
  // src/rules/correctness/server-browser-global.ts
5834
- var PENALIZED6 = { presence: "none", value: "absent" };
5835
- var PASS6 = { presence: "own", value: "static" };
5836
4706
  var ID3 = "correctness/server-browser-global";
5837
4707
  var DOCS_URL3 = docsUrlFor(ID3);
5838
4708
  var LABEL3 = "Server-safe module code";
5839
4709
  var RECOMMENDATION3 = "Move browser-only code into onMount or $effect (they never run on the server), or guard it with browser from $app/environment (or a typeof check).";
5840
4710
  var moduleMessage = (name) => `${name} is accessed at module scope \u2014 it does not exist on the server, so importing this file crashes SSR with "${name} is not defined"`;
5841
- function isSuppressed5(suppressions, line) {
5842
- return (suppressions ?? []).some((s) => s.line === line && (!s.ruleIds || s.ruleIds.includes(ID3)));
5843
- }
5844
4711
  function emitFile3(out, file, issues, suppressions) {
5845
- const bad = issues.filter((b) => !(b.line > 0 && isSuppressed5(suppressions, b.line)));
4712
+ const bad = issues.filter((b) => !(b.line > 0 && isSuppressed(suppressions, ID3, b.line)));
5846
4713
  if (bad.length === 0) {
5847
4714
  out.push({
5848
4715
  id: ID3,
5849
4716
  category: "correctness",
5850
4717
  severity: "critical",
5851
- detection: PASS6,
4718
+ detection: PASS,
5852
4719
  route: file,
5853
4720
  // Uniform PASS-result attribution (design 2026-08-08-pass-result-location-design.md):
5854
4721
  // same location a penalized result for this file would carry.
@@ -5864,7 +4731,7 @@ function emitFile3(out, file, issues, suppressions) {
5864
4731
  id: ID3,
5865
4732
  category: "correctness",
5866
4733
  severity: "critical",
5867
- detection: PENALIZED6,
4734
+ detection: PENALIZED,
5868
4735
  route: file,
5869
4736
  location: file,
5870
4737
  ...b.line > 0 ? { line: b.line } : {},
@@ -6122,7 +4989,7 @@ var architecturePrivateScopeImport = {
6122
4989
  }
6123
4990
  if (!sawScopedImport) continue;
6124
4991
  const visible = violations.filter(
6125
- (v) => !(v.line > 0 && isSuppressed2(c, "architecture/private-scope-import", v.line))
4992
+ (v) => !(v.line > 0 && isSuppressed(c.suppressions, "architecture/private-scope-import", v.line))
6126
4993
  );
6127
4994
  if (visible.length === 0) {
6128
4995
  out.push({
@@ -7092,7 +5959,7 @@ var performanceNamespaceImport = componentRule({
7092
5959
  });
7093
5960
 
7094
5961
  // src/rules/perf/minify-disabled.ts
7095
- var PENALIZED7 = { presence: "none", value: "absent" };
5962
+ var PENALIZED2 = { presence: "none", value: "absent" };
7096
5963
  var MINIFY_DISABLED_FIX = {
7097
5964
  description: "Remove the minify: false override from vite.config (Vite minifies by default), or scope it to non-production builds.",
7098
5965
  snippet: "export default defineConfig({\n build: {\n // minify: false \u2014 removed; Vite minifies production builds by default\n }\n});",
@@ -7116,7 +5983,7 @@ var performanceMinifyDisabled = {
7116
5983
  id: "performance/minify-disabled",
7117
5984
  category: "performance",
7118
5985
  severity: "warning",
7119
- detection: PENALIZED7,
5986
+ detection: PENALIZED2,
7120
5987
  ...hit.file !== void 0 ? { location: hit.file } : {},
7121
5988
  ...hit.line !== void 0 ? { line: hit.line } : {},
7122
5989
  message: "JS/CSS minification is disabled (build.minify: false) \u2014 production bundles ship unminified and several times larger." + provenance,
@@ -7474,14 +6341,7 @@ var SEVERITY_TITLE = {
7474
6341
  warning: "Warnings",
7475
6342
  info: "Info"
7476
6343
  };
7477
- var CATEGORY_LABEL = {
7478
- seo: "SEO",
7479
- performance: "Performance",
7480
- correctness: "Correctness",
7481
- security: "Security",
7482
- architecture: "Architecture"
7483
- };
7484
- var CATEGORY_ORDER = ["seo", "performance", "correctness", "security", "architecture"];
6344
+ var categoryLabel = (c) => c === "seo" ? "SEO" : c.charAt(0).toUpperCase() + c.slice(1);
7485
6345
  var MAX_RULE_GROUPS_PER_BUCKET = 5;
7486
6346
  function groupByRule(results) {
7487
6347
  const groups = /* @__PURE__ */ new Map();
@@ -7536,7 +6396,7 @@ function formatConsoleReport(results, config, options = {}) {
7536
6396
  const p = options.palette ?? noColorPalette;
7537
6397
  const summary = summarize(results, config);
7538
6398
  const { health, categories: byCat } = computeHealth(results, config);
7539
- const present3 = CATEGORY_ORDER.filter((c) => byCat[c] !== void 0);
6399
+ const present3 = CATEGORIES.filter((c) => byCat[c] !== void 0);
7540
6400
  const lines = [];
7541
6401
  if (!options.omitHeader) {
7542
6402
  lines.push(
@@ -7546,7 +6406,7 @@ function formatConsoleReport(results, config, options = {}) {
7546
6406
  );
7547
6407
  }
7548
6408
  for (const c of present3) {
7549
- lines.push(scoreLine(p, CATEGORY_LABEL[c] ?? c, byCat[c]));
6409
+ lines.push(scoreLine(p, categoryLabel(c), byCat[c]));
7550
6410
  }
7551
6411
  lines.push("");
7552
6412
  const SEVERITY_COLOR = {
@@ -7675,8 +6535,25 @@ function formatJsonReport(results, config, meta, ruleIds, examined) {
7675
6535
  return JSON.stringify(buildJsonReport(results, config, meta, ruleIds, examined), null, 2);
7676
6536
  }
7677
6537
 
7678
- // src/reporter/agent.ts
6538
+ // src/reporter/shared.ts
7679
6539
  var SEVERITY_RANK = { critical: 0, warning: 1, info: 2 };
6540
+ function severityToSarifLevel(sev) {
6541
+ return sev === "critical" ? "error" : sev === "warning" ? "warning" : "note";
6542
+ }
6543
+ function severityToGithubLevel(sev) {
6544
+ return sev === "critical" ? "error" : sev === "warning" ? "warning" : "notice";
6545
+ }
6546
+ function messageText(result) {
6547
+ return result.recommendation ? `${result.message} ${result.recommendation}` : result.message;
6548
+ }
6549
+ var RULE_META = new Map(
6550
+ allRules.map((r) => [r.id, { title: r.title, severity: r.severity, docsUrl: docsUrlFor(r.id) }])
6551
+ );
6552
+ function ruleMetaById(id) {
6553
+ return RULE_META.get(id);
6554
+ }
6555
+
6556
+ // src/reporter/agent.ts
7680
6557
  function formatAgentReport(results, config) {
7681
6558
  const failing = results.filter((r) => classify(r, config) === "fail");
7682
6559
  const { health } = computeHealth(results, config);
@@ -7719,23 +6596,6 @@ function formatAgentReport(results, config) {
7719
6596
  return lines.join("\n").replace(/\n+$/, "\n");
7720
6597
  }
7721
6598
 
7722
- // src/reporter/shared.ts
7723
- function severityToSarifLevel(sev) {
7724
- return sev === "critical" ? "error" : sev === "warning" ? "warning" : "note";
7725
- }
7726
- function severityToGithubLevel(sev) {
7727
- return sev === "critical" ? "error" : sev === "warning" ? "warning" : "notice";
7728
- }
7729
- function messageText(result) {
7730
- return result.recommendation ? `${result.message} ${result.recommendation}` : result.message;
7731
- }
7732
- var RULE_META = new Map(
7733
- allRules.map((r) => [r.id, { title: r.title, severity: r.severity, docsUrl: docsUrlFor(r.id) }])
7734
- );
7735
- function ruleMetaById(id) {
7736
- return RULE_META.get(id);
7737
- }
7738
-
7739
6599
  // src/reporter/sarif.ts
7740
6600
  function formatSarifReport(results, config, meta) {
7741
6601
  const penalized = results.filter((r) => isPenalized(r.detection, config.treatDynamicAs));
@@ -7822,7 +6682,6 @@ function formatGithubReport(results, config) {
7822
6682
  // src/reporter/markdown.ts
7823
6683
  var MAX_FINDINGS = 50;
7824
6684
  var SEVERITY_EMOJI = { critical: "\u{1F534}", warning: "\u{1F7E1}", info: "\u{1F535}" };
7825
- var SEVERITY_RANK2 = { critical: 0, warning: 1, info: 2 };
7826
6685
  function escapeCell(s) {
7827
6686
  return mdEscape(s).replace(/(\\*)\|/g, (_, bs) => bs + bs + "\\|");
7828
6687
  }
@@ -7853,7 +6712,7 @@ function flattenFindings(report) {
7853
6712
  message: messageWithRecommendation(issue)
7854
6713
  });
7855
6714
  }
7856
- return findings.map((f, index) => ({ f, index })).sort((a, b) => SEVERITY_RANK2[a.f.severity] - SEVERITY_RANK2[b.f.severity] || a.index - b.index).map(({ f }) => f);
6715
+ return findings.map((f, index) => ({ f, index })).sort((a, b) => SEVERITY_RANK[a.f.severity] - SEVERITY_RANK[b.f.severity] || a.index - b.index).map(({ f }) => f);
7857
6716
  }
7858
6717
  function categoryRows(categories) {
7859
6718
  const names = Object.keys(categories).sort();
@@ -7903,6 +6762,24 @@ function formatMarkdownReport(results, config, meta) {
7903
6762
  }
7904
6763
 
7905
6764
  // src/reporter/app-shell.ts
6765
+ var BAND_COLOR = {
6766
+ good: "#2FA968",
6767
+ warn: "#E8A317",
6768
+ poor: "#E5484D"
6769
+ };
6770
+ function scoreBand(score) {
6771
+ return score >= 90 ? "good" : score >= 50 ? "warn" : "poor";
6772
+ }
6773
+ function escapeHtml(s) {
6774
+ return s.replace(
6775
+ /[&<>"']/g,
6776
+ (c) => c === "&" ? "&amp;" : c === "<" ? "&lt;" : c === ">" ? "&gt;" : c === '"' ? "&quot;" : "&#39;"
6777
+ );
6778
+ }
6779
+ function safeHref(url) {
6780
+ const normalized = url.replace(/\s/g, "").toLowerCase();
6781
+ return /^https?:\/\//.test(normalized) ? url : null;
6782
+ }
7906
6783
  function embedJson(value) {
7907
6784
  return JSON.stringify(value).replace(/</g, "\\u003c").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
7908
6785
  }
@@ -8575,26 +7452,6 @@ function buildHtmlDocument(report, meta) {
8575
7452
  function formatHtmlReport(results, config, meta) {
8576
7453
  return buildHtmlDocument(buildJsonReport(results, config, meta), meta);
8577
7454
  }
8578
-
8579
- // src/reporter/html.ts
8580
- var BAND_COLOR = {
8581
- good: "#2FA968",
8582
- warn: "#E8A317",
8583
- poor: "#E5484D"
8584
- };
8585
- function scoreBand(score) {
8586
- return score >= 90 ? "good" : score >= 50 ? "warn" : "poor";
8587
- }
8588
- function escapeHtml(s) {
8589
- return s.replace(
8590
- /[&<>"']/g,
8591
- (c) => c === "&" ? "&amp;" : c === "<" ? "&lt;" : c === ">" ? "&gt;" : c === '"' ? "&quot;" : "&#39;"
8592
- );
8593
- }
8594
- function safeHref(url) {
8595
- const normalized = url.replace(/\s/g, "").toLowerCase();
8596
- return /^https?:\/\//.test(normalized) ? url : null;
8597
- }
8598
7455
  export {
8599
7456
  APP_SCRIPT,
8600
7457
  APP_STYLE,
@@ -8660,6 +7517,7 @@ export {
8660
7517
  findMinifyDisabled,
8661
7518
  formatAgentReport,
8662
7519
  formatConsoleReport,
7520
+ formatFailedRuleWarning,
8663
7521
  formatGithubReport,
8664
7522
  formatHtmlReport,
8665
7523
  formatJsonReport,
@@ -8745,6 +7603,7 @@ export {
8745
7603
  settingSeverity,
8746
7604
  shouldSkipRangeCheck,
8747
7605
  summarize,
7606
+ terminalSafe,
8748
7607
  textFromNodes,
8749
7608
  validateRuleOptions,
8750
7609
  validateRuleSetting,