@svelte-vitals/core 0.41.0 → 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.
- package/dist/index.d.ts +76 -24
- package/dist/index.js +280 -1352
- 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
|
|
41
|
-
|
|
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
|
|
46
|
-
const text = nodes
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
@@ -2464,9 +2455,21 @@ function isPenalized(detection, treatDynamicAs) {
|
|
|
2464
2455
|
async function runRules(rules, ctx) {
|
|
2465
2456
|
const examined = {};
|
|
2466
2457
|
const perRule = await Promise.all(
|
|
2467
|
-
rules.map((rule) =>
|
|
2458
|
+
rules.map(async (rule) => {
|
|
2459
|
+
try {
|
|
2460
|
+
return await rule.check({ ...ctx, recordExamined: (counts) => void (examined[rule.id] = counts) });
|
|
2461
|
+
} catch (err) {
|
|
2462
|
+
return { id: rule.id, message: err instanceof Error ? err.message : String(err) };
|
|
2463
|
+
}
|
|
2464
|
+
})
|
|
2468
2465
|
);
|
|
2469
|
-
|
|
2466
|
+
const results = [];
|
|
2467
|
+
const failedRules = [];
|
|
2468
|
+
for (const outcome of perRule) {
|
|
2469
|
+
if (Array.isArray(outcome)) results.push(...outcome);
|
|
2470
|
+
else failedRules.push(outcome);
|
|
2471
|
+
}
|
|
2472
|
+
return { results, examined, failedRules };
|
|
2470
2473
|
}
|
|
2471
2474
|
|
|
2472
2475
|
// src/rules/seo/title-presence.ts
|
|
@@ -2737,56 +2740,56 @@ var seoHtmlLang = {
|
|
|
2737
2740
|
}
|
|
2738
2741
|
};
|
|
2739
2742
|
|
|
2743
|
+
// src/rules/detection.ts
|
|
2744
|
+
var PENALIZED = { presence: "none", value: "absent" };
|
|
2745
|
+
var PASS = { presence: "own", value: "static" };
|
|
2746
|
+
|
|
2740
2747
|
// src/rules/perf/image-rule.ts
|
|
2741
|
-
function
|
|
2742
|
-
const docsUrl12 = docsUrlFor(
|
|
2743
|
-
const category = opts.category ?? "performance";
|
|
2748
|
+
function routeItemRule(spec) {
|
|
2749
|
+
const docsUrl12 = docsUrlFor(spec.id);
|
|
2744
2750
|
return {
|
|
2745
|
-
id:
|
|
2746
|
-
title:
|
|
2747
|
-
category,
|
|
2748
|
-
severity:
|
|
2751
|
+
id: spec.id,
|
|
2752
|
+
title: spec.title,
|
|
2753
|
+
category: spec.category,
|
|
2754
|
+
severity: spec.severity,
|
|
2749
2755
|
scope: "route",
|
|
2750
|
-
rationale:
|
|
2751
|
-
...
|
|
2756
|
+
rationale: spec.rationale,
|
|
2757
|
+
...spec.fix ? { fix: spec.fix } : {},
|
|
2752
2758
|
async check(ctx) {
|
|
2753
2759
|
const out = [];
|
|
2754
|
-
for (const
|
|
2755
|
-
if (
|
|
2756
|
-
const bad =
|
|
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));
|
|
2757
2763
|
if (bad.length === 0) {
|
|
2758
2764
|
out.push({
|
|
2759
|
-
id:
|
|
2760
|
-
category,
|
|
2761
|
-
severity:
|
|
2762
|
-
detection:
|
|
2763
|
-
route:
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
2767
|
-
// was missed by the design spike's grep and added to its blast-radius table
|
|
2768
|
-
// afterward, maintainer ruling, same date). `route.images.length === 0` already
|
|
2769
|
-
// continued above, so `[0]` is always defined here.
|
|
2770
|
-
location: route.images[0].file,
|
|
2771
|
-
message: opts.label,
|
|
2772
|
-
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,
|
|
2773
2773
|
docsUrl: docsUrl12
|
|
2774
2774
|
});
|
|
2775
2775
|
continue;
|
|
2776
2776
|
}
|
|
2777
|
-
for (const
|
|
2777
|
+
for (const item of bad) {
|
|
2778
|
+
const line = spec.line?.(item);
|
|
2778
2779
|
out.push({
|
|
2779
|
-
id:
|
|
2780
|
-
category,
|
|
2781
|
-
severity:
|
|
2782
|
-
detection:
|
|
2783
|
-
route:
|
|
2784
|
-
location:
|
|
2785
|
-
...
|
|
2786
|
-
message: `Missing ${
|
|
2787
|
-
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,
|
|
2788
2789
|
docsUrl: docsUrl12,
|
|
2789
|
-
|
|
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 } } : {}
|
|
2790
2793
|
});
|
|
2791
2794
|
}
|
|
2792
2795
|
}
|
|
@@ -2794,6 +2797,18 @@ function imageRule(opts) {
|
|
|
2794
2797
|
}
|
|
2795
2798
|
};
|
|
2796
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
|
+
}
|
|
2797
2812
|
|
|
2798
2813
|
// src/rules/perf/image-dimensions.ts
|
|
2799
2814
|
var performanceImageDimensions = imageRule({
|
|
@@ -2845,62 +2860,19 @@ var performanceResponsiveImage = imageRule({
|
|
|
2845
2860
|
|
|
2846
2861
|
// src/rules/perf/link-rule.ts
|
|
2847
2862
|
function linkRule(opts) {
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
id: opts.id,
|
|
2851
|
-
title: opts.title,
|
|
2863
|
+
return routeItemRule({
|
|
2864
|
+
...opts,
|
|
2852
2865
|
category: "performance",
|
|
2853
|
-
|
|
2854
|
-
|
|
2855
|
-
|
|
2856
|
-
|
|
2857
|
-
|
|
2858
|
-
|
|
2859
|
-
|
|
2860
|
-
|
|
2861
|
-
|
|
2862
|
-
|
|
2863
|
-
if (bad.length === 0) {
|
|
2864
|
-
out.push({
|
|
2865
|
-
id: opts.id,
|
|
2866
|
-
category: "performance",
|
|
2867
|
-
severity: opts.severity,
|
|
2868
|
-
detection: { presence: "own", value: "static" },
|
|
2869
|
-
route: head.route,
|
|
2870
|
-
// The route's own attributed file (design 2026-08-08-pass-result-location-design.md)
|
|
2871
|
-
// — this uncaught inline PASS literal was missed by the design spike's grep and
|
|
2872
|
-
// added to its blast-radius table afterward (maintainer ruling, same date). No
|
|
2873
|
-
// single per-tag location applies here (many links can back one pass), so the
|
|
2874
|
-
// route's own head file is the uniform attribution; per-tag penalized locations
|
|
2875
|
-
// above remain per-tag.
|
|
2876
|
-
location: head.file,
|
|
2877
|
-
message: opts.label,
|
|
2878
|
-
recommendation: opts.recommendation,
|
|
2879
|
-
docsUrl: docsUrl12
|
|
2880
|
-
});
|
|
2881
|
-
continue;
|
|
2882
|
-
}
|
|
2883
|
-
for (const tag of bad) {
|
|
2884
|
-
out.push({
|
|
2885
|
-
id: opts.id,
|
|
2886
|
-
category: "performance",
|
|
2887
|
-
severity: opts.severity,
|
|
2888
|
-
detection: { presence: "none", value: "absent" },
|
|
2889
|
-
route: head.route,
|
|
2890
|
-
// Point at the file the link actually came from (a layout in static
|
|
2891
|
-
// mode); fall back to the route's representative file when the tag
|
|
2892
|
-
// carries no file (rendered mode).
|
|
2893
|
-
location: tag.file ?? head.file,
|
|
2894
|
-
message: `Missing ${opts.label}`,
|
|
2895
|
-
recommendation: opts.recommendation,
|
|
2896
|
-
docsUrl: docsUrl12,
|
|
2897
|
-
...opts.fix ? { fix: { ...opts.fix } } : {}
|
|
2898
|
-
});
|
|
2899
|
-
}
|
|
2900
|
-
}
|
|
2901
|
-
return out;
|
|
2902
|
-
}
|
|
2903
|
-
};
|
|
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
|
+
});
|
|
2904
2876
|
}
|
|
2905
2877
|
|
|
2906
2878
|
// src/rules/perf/preload-missing-as.ts
|
|
@@ -3061,6 +3033,19 @@ function settingOptions(setting) {
|
|
|
3061
3033
|
function selectRules(rules, config) {
|
|
3062
3034
|
return rules.filter((rule) => settingSeverity(config.rules[rule.id]) !== "off");
|
|
3063
3035
|
}
|
|
3036
|
+
function withFailedRulesOff(config, failedRuleIds) {
|
|
3037
|
+
if (failedRuleIds.length === 0) return config;
|
|
3038
|
+
return {
|
|
3039
|
+
...config,
|
|
3040
|
+
rules: {
|
|
3041
|
+
...config.rules,
|
|
3042
|
+
...Object.fromEntries(failedRuleIds.map((id) => [id, "off"]))
|
|
3043
|
+
}
|
|
3044
|
+
};
|
|
3045
|
+
}
|
|
3046
|
+
function formatFailedRuleWarning(f) {
|
|
3047
|
+
return `rule ${f.id} failed and was skipped: ${f.message.split("\n")[0]}`;
|
|
3048
|
+
}
|
|
3064
3049
|
function applyRuleSeverities(results, config) {
|
|
3065
3050
|
return results.map((result) => {
|
|
3066
3051
|
const severity = settingSeverity(config.rules[result.id]);
|
|
@@ -3461,10 +3446,6 @@ var seoSitemapInRobots = {
|
|
|
3461
3446
|
}
|
|
3462
3447
|
};
|
|
3463
3448
|
|
|
3464
|
-
// src/rules/seo/detection.ts
|
|
3465
|
-
var PENALIZED = { presence: "none", value: "absent" };
|
|
3466
|
-
var PASS = { presence: "own", value: "static" };
|
|
3467
|
-
|
|
3468
3449
|
// src/rules/seo/jsonld-engine.ts
|
|
3469
3450
|
function parseJsonLd(raw) {
|
|
3470
3451
|
let data;
|
|
@@ -3678,1048 +3659,50 @@ function jsonldRule(opts) {
|
|
|
3678
3659
|
}
|
|
3679
3660
|
|
|
3680
3661
|
// src/rules/seo/schema-vocabulary.generated.ts
|
|
3681
|
-
var SCHEMA_ORG_TYPES =
|
|
3682
|
-
"3DModel",
|
|
3683
|
-
|
|
3684
|
-
|
|
3685
|
-
|
|
3686
|
-
"AcceptAction",
|
|
3687
|
-
"Accommodation",
|
|
3688
|
-
"AccountingService",
|
|
3689
|
-
"AchieveAction",
|
|
3690
|
-
"Action",
|
|
3691
|
-
"ActionAccessSpecification",
|
|
3692
|
-
"ActionStatusType",
|
|
3693
|
-
"ActivateAction",
|
|
3694
|
-
"AddAction",
|
|
3695
|
-
"AdministrativeArea",
|
|
3696
|
-
"AdultEntertainment",
|
|
3697
|
-
"AdultOrientedEnumeration",
|
|
3698
|
-
"AdvertiserContentArticle",
|
|
3699
|
-
"AggregateOffer",
|
|
3700
|
-
"AggregateRating",
|
|
3701
|
-
"AgreeAction",
|
|
3702
|
-
"Airline",
|
|
3703
|
-
"Airport",
|
|
3704
|
-
"AlignmentObject",
|
|
3705
|
-
"AllocateAction",
|
|
3706
|
-
"AmpStory",
|
|
3707
|
-
"AmusementPark",
|
|
3708
|
-
"AnalysisNewsArticle",
|
|
3709
|
-
"AnatomicalStructure",
|
|
3710
|
-
"AnatomicalSystem",
|
|
3711
|
-
"AnimalShelter",
|
|
3712
|
-
"Answer",
|
|
3713
|
-
"Apartment",
|
|
3714
|
-
"ApartmentComplex",
|
|
3715
|
-
"AppendAction",
|
|
3716
|
-
"ApplyAction",
|
|
3717
|
-
"ApprovedIndication",
|
|
3718
|
-
"Aquarium",
|
|
3719
|
-
"ArchiveComponent",
|
|
3720
|
-
"ArchiveOrganization",
|
|
3721
|
-
"ArriveAction",
|
|
3722
|
-
"ArtGallery",
|
|
3723
|
-
"Artery",
|
|
3724
|
-
"Article",
|
|
3725
|
-
"AskAction",
|
|
3726
|
-
"AskPublicNewsArticle",
|
|
3727
|
-
"AssessAction",
|
|
3728
|
-
"AssignAction",
|
|
3729
|
-
"Atlas",
|
|
3730
|
-
"Attorney",
|
|
3731
|
-
"Audience",
|
|
3732
|
-
"AudioObject",
|
|
3733
|
-
"AudioObjectSnapshot",
|
|
3734
|
-
"Audiobook",
|
|
3735
|
-
"AuthenticateAction",
|
|
3736
|
-
"AuthorizeAction",
|
|
3737
|
-
"AutoBodyShop",
|
|
3738
|
-
"AutoDealer",
|
|
3739
|
-
"AutoPartsStore",
|
|
3740
|
-
"AutoRental",
|
|
3741
|
-
"AutoRepair",
|
|
3742
|
-
"AutoWash",
|
|
3743
|
-
"AutomatedTeller",
|
|
3744
|
-
"AutomotiveBusiness",
|
|
3745
|
-
"BackgroundNewsArticle",
|
|
3746
|
-
"Bakery",
|
|
3747
|
-
"BankAccount",
|
|
3748
|
-
"BankOrCreditUnion",
|
|
3749
|
-
"BarOrPub",
|
|
3750
|
-
"Barcode",
|
|
3751
|
-
"Beach",
|
|
3752
|
-
"BeautySalon",
|
|
3753
|
-
"BedAndBreakfast",
|
|
3754
|
-
"BedDetails",
|
|
3755
|
-
"BedType",
|
|
3756
|
-
"BefriendAction",
|
|
3757
|
-
"BikeStore",
|
|
3758
|
-
"BioChemEntity",
|
|
3759
|
-
"Blog",
|
|
3760
|
-
"BlogPosting",
|
|
3761
|
-
"BloodTest",
|
|
3762
|
-
"BoardingPolicyType",
|
|
3763
|
-
"BoatReservation",
|
|
3764
|
-
"BoatTerminal",
|
|
3765
|
-
"BoatTrip",
|
|
3766
|
-
"BodyMeasurementTypeEnumeration",
|
|
3767
|
-
"BodyOfWater",
|
|
3768
|
-
"Bone",
|
|
3769
|
-
"Book",
|
|
3770
|
-
"BookFormatType",
|
|
3771
|
-
"BookSeries",
|
|
3772
|
-
"BookStore",
|
|
3773
|
-
"BookmarkAction",
|
|
3774
|
-
"Boolean",
|
|
3775
|
-
"BorrowAction",
|
|
3776
|
-
"BowlingAlley",
|
|
3777
|
-
"BrainStructure",
|
|
3778
|
-
"Brand",
|
|
3779
|
-
"BreadcrumbList",
|
|
3780
|
-
"Brewery",
|
|
3781
|
-
"Bridge",
|
|
3782
|
-
"BroadcastChannel",
|
|
3783
|
-
"BroadcastEvent",
|
|
3784
|
-
"BroadcastFrequencySpecification",
|
|
3785
|
-
"BroadcastService",
|
|
3786
|
-
"BrokerageAccount",
|
|
3787
|
-
"BuddhistTemple",
|
|
3788
|
-
"BusOrCoach",
|
|
3789
|
-
"BusReservation",
|
|
3790
|
-
"BusStation",
|
|
3791
|
-
"BusStop",
|
|
3792
|
-
"BusTrip",
|
|
3793
|
-
"BusinessAudience",
|
|
3794
|
-
"BusinessEntityType",
|
|
3795
|
-
"BusinessEvent",
|
|
3796
|
-
"BusinessFunction",
|
|
3797
|
-
"BuyAction",
|
|
3798
|
-
"CDCPMDRecord",
|
|
3799
|
-
"CableOrSatelliteService",
|
|
3800
|
-
"CafeOrCoffeeShop",
|
|
3801
|
-
"Campground",
|
|
3802
|
-
"CampingPitch",
|
|
3803
|
-
"Canal",
|
|
3804
|
-
"CancelAction",
|
|
3805
|
-
"Car",
|
|
3806
|
-
"CarUsageType",
|
|
3807
|
-
"Casino",
|
|
3808
|
-
"CategoryCode",
|
|
3809
|
-
"CategoryCodeSet",
|
|
3810
|
-
"CatholicChurch",
|
|
3811
|
-
"Cemetery",
|
|
3812
|
-
"Certification",
|
|
3813
|
-
"CertificationStatusEnumeration",
|
|
3814
|
-
"Chapter",
|
|
3815
|
-
"CheckAction",
|
|
3816
|
-
"CheckInAction",
|
|
3817
|
-
"CheckOutAction",
|
|
3818
|
-
"CheckoutPage",
|
|
3819
|
-
"ChemicalSubstance",
|
|
3820
|
-
"ChildCare",
|
|
3821
|
-
"ChildrensEvent",
|
|
3822
|
-
"ChooseAction",
|
|
3823
|
-
"Church",
|
|
3824
|
-
"City",
|
|
3825
|
-
"CityHall",
|
|
3826
|
-
"CivicStructure",
|
|
3827
|
-
"Claim",
|
|
3828
|
-
"ClaimReview",
|
|
3829
|
-
"Class",
|
|
3830
|
-
"Clip",
|
|
3831
|
-
"ClothingStore",
|
|
3832
|
-
"Code",
|
|
3833
|
-
"Collection",
|
|
3834
|
-
"CollectionPage",
|
|
3835
|
-
"CollegeOrUniversity",
|
|
3836
|
-
"ComedyClub",
|
|
3837
|
-
"ComedyEvent",
|
|
3838
|
-
"ComicCoverArt",
|
|
3839
|
-
"ComicIssue",
|
|
3840
|
-
"ComicSeries",
|
|
3841
|
-
"ComicStory",
|
|
3842
|
-
"Comment",
|
|
3843
|
-
"CommentAction",
|
|
3844
|
-
"CommunicateAction",
|
|
3845
|
-
"CommunityHealth",
|
|
3846
|
-
"CompleteDataFeed",
|
|
3847
|
-
"CompoundPriceSpecification",
|
|
3848
|
-
"ComputerLanguage",
|
|
3849
|
-
"ComputerStore",
|
|
3850
|
-
"ConferenceEvent",
|
|
3851
|
-
"ConfirmAction",
|
|
3852
|
-
"Consortium",
|
|
3853
|
-
"ConstraintNode",
|
|
3854
|
-
"ConsumeAction",
|
|
3855
|
-
"ContactPage",
|
|
3856
|
-
"ContactPoint",
|
|
3857
|
-
"ContactPointOption",
|
|
3858
|
-
"Continent",
|
|
3859
|
-
"ControlAction",
|
|
3860
|
-
"ConvenienceStore",
|
|
3861
|
-
"Conversation",
|
|
3862
|
-
"CookAction",
|
|
3863
|
-
"Cooperative",
|
|
3864
|
-
"Corporation",
|
|
3865
|
-
"CorrectionComment",
|
|
3866
|
-
"Country",
|
|
3867
|
-
"Course",
|
|
3868
|
-
"CourseInstance",
|
|
3869
|
-
"Courthouse",
|
|
3870
|
-
"CoverArt",
|
|
3871
|
-
"CovidTestingFacility",
|
|
3872
|
-
"CreateAction",
|
|
3873
|
-
"CreativeWork",
|
|
3874
|
-
"CreativeWorkSeason",
|
|
3875
|
-
"CreativeWorkSeries",
|
|
3876
|
-
"Credential",
|
|
3877
|
-
"CreditCard",
|
|
3878
|
-
"Crematorium",
|
|
3879
|
-
"CriticReview",
|
|
3880
|
-
"CssSelectorType",
|
|
3881
|
-
"CurrencyConversionService",
|
|
3882
|
-
"DDxElement",
|
|
3883
|
-
"DENonprofitType",
|
|
3884
|
-
"DanceEvent",
|
|
3885
|
-
"DanceGroup",
|
|
3886
|
-
"DataCatalog",
|
|
3887
|
-
"DataDownload",
|
|
3888
|
-
"DataFeed",
|
|
3889
|
-
"DataFeedItem",
|
|
3890
|
-
"DataType",
|
|
3891
|
-
"Dataset",
|
|
3892
|
-
"Date",
|
|
3893
|
-
"DateTime",
|
|
3894
|
-
"DatedMoneySpecification",
|
|
3895
|
-
"DayOfWeek",
|
|
3896
|
-
"DaySpa",
|
|
3897
|
-
"DeactivateAction",
|
|
3898
|
-
"DefenceEstablishment",
|
|
3899
|
-
"DefinedRegion",
|
|
3900
|
-
"DefinedTerm",
|
|
3901
|
-
"DefinedTermSet",
|
|
3902
|
-
"DeleteAction",
|
|
3903
|
-
"DeliveryChargeSpecification",
|
|
3904
|
-
"DeliveryEvent",
|
|
3905
|
-
"DeliveryMethod",
|
|
3906
|
-
"DeliveryTimeSettings",
|
|
3907
|
-
"Demand",
|
|
3908
|
-
"Dentist",
|
|
3909
|
-
"DepartAction",
|
|
3910
|
-
"DepartmentStore",
|
|
3911
|
-
"DepositAccount",
|
|
3912
|
-
"Dermatology",
|
|
3913
|
-
"DiagnosticLab",
|
|
3914
|
-
"DiagnosticProcedure",
|
|
3915
|
-
"Diet",
|
|
3916
|
-
"DietNutrition",
|
|
3917
|
-
"DietarySupplement",
|
|
3918
|
-
"DigitalDocument",
|
|
3919
|
-
"DigitalDocumentPermission",
|
|
3920
|
-
"DigitalDocumentPermissionType",
|
|
3921
|
-
"DigitalPlatformEnumeration",
|
|
3922
|
-
"DisagreeAction",
|
|
3923
|
-
"DiscoverAction",
|
|
3924
|
-
"DiscussionForumPosting",
|
|
3925
|
-
"DislikeAction",
|
|
3926
|
-
"Distance",
|
|
3927
|
-
"Distillery",
|
|
3928
|
-
"DonateAction",
|
|
3929
|
-
"DoseSchedule",
|
|
3930
|
-
"DownloadAction",
|
|
3931
|
-
"DrawAction",
|
|
3932
|
-
"Drawing",
|
|
3933
|
-
"DrinkAction",
|
|
3934
|
-
"DriveWheelConfigurationValue",
|
|
3935
|
-
"Drug",
|
|
3936
|
-
"DrugClass",
|
|
3937
|
-
"DrugCost",
|
|
3938
|
-
"DrugCostCategory",
|
|
3939
|
-
"DrugLegalStatus",
|
|
3940
|
-
"DrugPregnancyCategory",
|
|
3941
|
-
"DrugPrescriptionStatus",
|
|
3942
|
-
"DrugStrength",
|
|
3943
|
-
"DryCleaningOrLaundry",
|
|
3944
|
-
"Duration",
|
|
3945
|
-
"EUEnergyEfficiencyEnumeration",
|
|
3946
|
-
"EatAction",
|
|
3947
|
-
"EducationEvent",
|
|
3948
|
-
"EducationalAudience",
|
|
3949
|
-
"EducationalOccupationalCredential",
|
|
3950
|
-
"EducationalOccupationalProgram",
|
|
3951
|
-
"EducationalOrganization",
|
|
3952
|
-
"Electrician",
|
|
3953
|
-
"ElectronicsStore",
|
|
3954
|
-
"ElementarySchool",
|
|
3955
|
-
"EmailMessage",
|
|
3956
|
-
"Embassy",
|
|
3957
|
-
"Emergency",
|
|
3958
|
-
"EmergencyService",
|
|
3959
|
-
"EmployeeRole",
|
|
3960
|
-
"EmployerAggregateRating",
|
|
3961
|
-
"EmployerReview",
|
|
3962
|
-
"EmploymentAgency",
|
|
3963
|
-
"EndorseAction",
|
|
3964
|
-
"EndorsementRating",
|
|
3965
|
-
"Energy",
|
|
3966
|
-
"EnergyConsumptionDetails",
|
|
3967
|
-
"EnergyEfficiencyEnumeration",
|
|
3968
|
-
"EnergyStarEnergyEfficiencyEnumeration",
|
|
3969
|
-
"EngineSpecification",
|
|
3970
|
-
"EntertainmentBusiness",
|
|
3971
|
-
"EntryPoint",
|
|
3972
|
-
"Enumeration",
|
|
3973
|
-
"Episode",
|
|
3974
|
-
"Error",
|
|
3975
|
-
"Event",
|
|
3976
|
-
"EventAttendanceModeEnumeration",
|
|
3977
|
-
"EventReservation",
|
|
3978
|
-
"EventSeries",
|
|
3979
|
-
"EventStatusType",
|
|
3980
|
-
"EventVenue",
|
|
3981
|
-
"ExchangeRateSpecification",
|
|
3982
|
-
"ExerciseAction",
|
|
3983
|
-
"ExerciseGym",
|
|
3984
|
-
"ExercisePlan",
|
|
3985
|
-
"ExhibitionEvent",
|
|
3986
|
-
"FAQPage",
|
|
3987
|
-
"FMRadioChannel",
|
|
3988
|
-
"FastFoodRestaurant",
|
|
3989
|
-
"Festival",
|
|
3990
|
-
"FilmAction",
|
|
3991
|
-
"FinancialIncentive",
|
|
3992
|
-
"FinancialProduct",
|
|
3993
|
-
"FinancialService",
|
|
3994
|
-
"FindAction",
|
|
3995
|
-
"FireStation",
|
|
3996
|
-
"Flight",
|
|
3997
|
-
"FlightReservation",
|
|
3998
|
-
"Float",
|
|
3999
|
-
"FloorPlan",
|
|
4000
|
-
"Florist",
|
|
4001
|
-
"FollowAction",
|
|
4002
|
-
"FoodEstablishment",
|
|
4003
|
-
"FoodEstablishmentReservation",
|
|
4004
|
-
"FoodEvent",
|
|
4005
|
-
"FoodService",
|
|
4006
|
-
"FulfillmentTypeEnumeration",
|
|
4007
|
-
"FundingAgency",
|
|
4008
|
-
"FundingScheme",
|
|
4009
|
-
"FurnitureStore",
|
|
4010
|
-
"Game",
|
|
4011
|
-
"GameAvailabilityEnumeration",
|
|
4012
|
-
"GamePlayMode",
|
|
4013
|
-
"GameServer",
|
|
4014
|
-
"GameServerStatus",
|
|
4015
|
-
"GardenStore",
|
|
4016
|
-
"GasStation",
|
|
4017
|
-
"GatedResidenceCommunity",
|
|
4018
|
-
"GenderType",
|
|
4019
|
-
"Gene",
|
|
4020
|
-
"GeneralContractor",
|
|
4021
|
-
"GeoCircle",
|
|
4022
|
-
"GeoCoordinates",
|
|
4023
|
-
"GeoShape",
|
|
4024
|
-
"GeospatialGeometry",
|
|
4025
|
-
"Geriatric",
|
|
4026
|
-
"GiveAction",
|
|
4027
|
-
"GolfCourse",
|
|
4028
|
-
"GovernmentBenefitsType",
|
|
4029
|
-
"GovernmentBuilding",
|
|
4030
|
-
"GovernmentOffice",
|
|
4031
|
-
"GovernmentOrganization",
|
|
4032
|
-
"GovernmentPermit",
|
|
4033
|
-
"GovernmentService",
|
|
4034
|
-
"Grant",
|
|
4035
|
-
"GroceryStore",
|
|
4036
|
-
"Guide",
|
|
4037
|
-
"Gynecologic",
|
|
4038
|
-
"HVACBusiness",
|
|
4039
|
-
"Hackathon",
|
|
4040
|
-
"HairSalon",
|
|
4041
|
-
"HardwareStore",
|
|
4042
|
-
"HealthAndBeautyBusiness",
|
|
4043
|
-
"HealthAspectEnumeration",
|
|
4044
|
-
"HealthClub",
|
|
4045
|
-
"HealthInsurancePlan",
|
|
4046
|
-
"HealthPlanCostSharingSpecification",
|
|
4047
|
-
"HealthPlanFormulary",
|
|
4048
|
-
"HealthPlanNetwork",
|
|
4049
|
-
"HealthTopicContent",
|
|
4050
|
-
"HighSchool",
|
|
4051
|
-
"HinduTemple",
|
|
4052
|
-
"HobbyShop",
|
|
4053
|
-
"HomeAndConstructionBusiness",
|
|
4054
|
-
"HomeGoodsStore",
|
|
4055
|
-
"Hospital",
|
|
4056
|
-
"Hostel",
|
|
4057
|
-
"Hotel",
|
|
4058
|
-
"HotelRoom",
|
|
4059
|
-
"House",
|
|
4060
|
-
"HousePainter",
|
|
4061
|
-
"HowTo",
|
|
4062
|
-
"HowToDirection",
|
|
4063
|
-
"HowToItem",
|
|
4064
|
-
"HowToSection",
|
|
4065
|
-
"HowToStep",
|
|
4066
|
-
"HowToSupply",
|
|
4067
|
-
"HowToTip",
|
|
4068
|
-
"HowToTool",
|
|
4069
|
-
"HyperToc",
|
|
4070
|
-
"HyperTocEntry",
|
|
4071
|
-
"IPTCDigitalSourceEnumeration",
|
|
4072
|
-
"ITNonprofitType",
|
|
4073
|
-
"IceCreamShop",
|
|
4074
|
-
"IgnoreAction",
|
|
4075
|
-
"ImageGallery",
|
|
4076
|
-
"ImageObject",
|
|
4077
|
-
"ImageObjectSnapshot",
|
|
4078
|
-
"ImagingTest",
|
|
4079
|
-
"IncentiveQualifiedExpenseType",
|
|
4080
|
-
"IncentiveStatus",
|
|
4081
|
-
"IncentiveType",
|
|
4082
|
-
"IndividualPhysician",
|
|
4083
|
-
"IndividualProduct",
|
|
4084
|
-
"InfectiousAgentClass",
|
|
4085
|
-
"InfectiousDisease",
|
|
4086
|
-
"InformAction",
|
|
4087
|
-
"InsertAction",
|
|
4088
|
-
"InstallAction",
|
|
4089
|
-
"InstantaneousEvent",
|
|
4090
|
-
"InsuranceAgency",
|
|
4091
|
-
"Intangible",
|
|
4092
|
-
"Integer",
|
|
4093
|
-
"InteractAction",
|
|
4094
|
-
"InteractionCounter",
|
|
4095
|
-
"InternetCafe",
|
|
4096
|
-
"InvestmentFund",
|
|
4097
|
-
"InvestmentOrDeposit",
|
|
4098
|
-
"InviteAction",
|
|
4099
|
-
"Invoice",
|
|
4100
|
-
"ItemAvailability",
|
|
4101
|
-
"ItemList",
|
|
4102
|
-
"ItemListOrderType",
|
|
4103
|
-
"ItemPage",
|
|
4104
|
-
"JewelryStore",
|
|
4105
|
-
"JobPosting",
|
|
4106
|
-
"JoinAction",
|
|
4107
|
-
"Joint",
|
|
4108
|
-
"LakeBodyOfWater",
|
|
4109
|
-
"Landform",
|
|
4110
|
-
"LandmarksOrHistoricalBuildings",
|
|
4111
|
-
"Language",
|
|
4112
|
-
"LearningResource",
|
|
4113
|
-
"LeaveAction",
|
|
4114
|
-
"LegalForceStatus",
|
|
4115
|
-
"LegalService",
|
|
4116
|
-
"LegalValueLevel",
|
|
4117
|
-
"Legislation",
|
|
4118
|
-
"LegislationObject",
|
|
4119
|
-
"LegislativeBuilding",
|
|
4120
|
-
"LendAction",
|
|
4121
|
-
"Library",
|
|
4122
|
-
"LibrarySystem",
|
|
4123
|
-
"LifestyleModification",
|
|
4124
|
-
"Ligament",
|
|
4125
|
-
"LikeAction",
|
|
4126
|
-
"LinkRole",
|
|
4127
|
-
"LiquorStore",
|
|
4128
|
-
"ListItem",
|
|
4129
|
-
"ListenAction",
|
|
4130
|
-
"LiteraryEvent",
|
|
4131
|
-
"LiveBlogPosting",
|
|
4132
|
-
"LoanOrCredit",
|
|
4133
|
-
"LocalBusiness",
|
|
4134
|
-
"LocationFeatureSpecification",
|
|
4135
|
-
"Locksmith",
|
|
4136
|
-
"LodgingBusiness",
|
|
4137
|
-
"LodgingReservation",
|
|
4138
|
-
"LoginAction",
|
|
4139
|
-
"LoseAction",
|
|
4140
|
-
"LymphaticVessel",
|
|
4141
|
-
"Manuscript",
|
|
4142
|
-
"Map",
|
|
4143
|
-
"MapCategoryType",
|
|
4144
|
-
"MarryAction",
|
|
4145
|
-
"Mass",
|
|
4146
|
-
"MathSolver",
|
|
4147
|
-
"MaximumDoseSchedule",
|
|
4148
|
-
"MeasurementMethodEnum",
|
|
4149
|
-
"MeasurementTypeEnumeration",
|
|
4150
|
-
"MediaEnumeration",
|
|
4151
|
-
"MediaGallery",
|
|
4152
|
-
"MediaManipulationRatingEnumeration",
|
|
4153
|
-
"MediaObject",
|
|
4154
|
-
"MediaReview",
|
|
4155
|
-
"MediaReviewItem",
|
|
4156
|
-
"MediaSubscription",
|
|
4157
|
-
"MedicalAudience",
|
|
4158
|
-
"MedicalAudienceType",
|
|
4159
|
-
"MedicalBusiness",
|
|
4160
|
-
"MedicalCause",
|
|
4161
|
-
"MedicalClinic",
|
|
4162
|
-
"MedicalCode",
|
|
4163
|
-
"MedicalCondition",
|
|
4164
|
-
"MedicalConditionStage",
|
|
4165
|
-
"MedicalContraindication",
|
|
4166
|
-
"MedicalDevice",
|
|
4167
|
-
"MedicalDevicePurpose",
|
|
4168
|
-
"MedicalEntity",
|
|
4169
|
-
"MedicalEnumeration",
|
|
4170
|
-
"MedicalEvidenceLevel",
|
|
4171
|
-
"MedicalGuideline",
|
|
4172
|
-
"MedicalGuidelineContraindication",
|
|
4173
|
-
"MedicalGuidelineRecommendation",
|
|
4174
|
-
"MedicalImagingTechnique",
|
|
4175
|
-
"MedicalIndication",
|
|
4176
|
-
"MedicalIntangible",
|
|
4177
|
-
"MedicalObservationalStudy",
|
|
4178
|
-
"MedicalObservationalStudyDesign",
|
|
4179
|
-
"MedicalOrganization",
|
|
4180
|
-
"MedicalProcedure",
|
|
4181
|
-
"MedicalProcedureType",
|
|
4182
|
-
"MedicalRiskCalculator",
|
|
4183
|
-
"MedicalRiskEstimator",
|
|
4184
|
-
"MedicalRiskFactor",
|
|
4185
|
-
"MedicalRiskScore",
|
|
4186
|
-
"MedicalScholarlyArticle",
|
|
4187
|
-
"MedicalSign",
|
|
4188
|
-
"MedicalSignOrSymptom",
|
|
4189
|
-
"MedicalSpecialty",
|
|
4190
|
-
"MedicalStudy",
|
|
4191
|
-
"MedicalStudyStatus",
|
|
4192
|
-
"MedicalSymptom",
|
|
4193
|
-
"MedicalTest",
|
|
4194
|
-
"MedicalTestPanel",
|
|
4195
|
-
"MedicalTherapy",
|
|
4196
|
-
"MedicalTrial",
|
|
4197
|
-
"MedicalTrialDesign",
|
|
4198
|
-
"MedicalWebPage",
|
|
4199
|
-
"MedicineSystem",
|
|
4200
|
-
"MeetingRoom",
|
|
4201
|
-
"MemberProgram",
|
|
4202
|
-
"MemberProgramTier",
|
|
4203
|
-
"MensClothingStore",
|
|
4204
|
-
"Menu",
|
|
4205
|
-
"MenuItem",
|
|
4206
|
-
"MenuSection",
|
|
4207
|
-
"MerchantReturnEnumeration",
|
|
4208
|
-
"MerchantReturnPolicy",
|
|
4209
|
-
"MerchantReturnPolicySeasonalOverride",
|
|
4210
|
-
"Message",
|
|
4211
|
-
"MiddleSchool",
|
|
4212
|
-
"Midwifery",
|
|
4213
|
-
"MobileApplication",
|
|
4214
|
-
"MobilePhoneStore",
|
|
4215
|
-
"MolecularEntity",
|
|
4216
|
-
"MonetaryAmount",
|
|
4217
|
-
"MonetaryAmountDistribution",
|
|
4218
|
-
"MonetaryGrant",
|
|
4219
|
-
"MoneyTransfer",
|
|
4220
|
-
"MortgageLoan",
|
|
4221
|
-
"Mosque",
|
|
4222
|
-
"Motel",
|
|
4223
|
-
"Motorcycle",
|
|
4224
|
-
"MotorcycleDealer",
|
|
4225
|
-
"MotorcycleRepair",
|
|
4226
|
-
"MotorizedBicycle",
|
|
4227
|
-
"Mountain",
|
|
4228
|
-
"MoveAction",
|
|
4229
|
-
"Movie",
|
|
4230
|
-
"MovieClip",
|
|
4231
|
-
"MovieRentalStore",
|
|
4232
|
-
"MovieSeries",
|
|
4233
|
-
"MovieTheater",
|
|
4234
|
-
"MovingCompany",
|
|
4235
|
-
"Muscle",
|
|
4236
|
-
"Museum",
|
|
4237
|
-
"MusicAlbum",
|
|
4238
|
-
"MusicAlbumProductionType",
|
|
4239
|
-
"MusicAlbumReleaseType",
|
|
4240
|
-
"MusicComposition",
|
|
4241
|
-
"MusicEvent",
|
|
4242
|
-
"MusicGroup",
|
|
4243
|
-
"MusicPlaylist",
|
|
4244
|
-
"MusicRecording",
|
|
4245
|
-
"MusicRelease",
|
|
4246
|
-
"MusicReleaseFormatType",
|
|
4247
|
-
"MusicStore",
|
|
4248
|
-
"MusicVenue",
|
|
4249
|
-
"MusicVideoObject",
|
|
4250
|
-
"NGO",
|
|
4251
|
-
"NLNonprofitType",
|
|
4252
|
-
"NailSalon",
|
|
4253
|
-
"Nerve",
|
|
4254
|
-
"NewsArticle",
|
|
4255
|
-
"NewsMediaOrganization",
|
|
4256
|
-
"Newspaper",
|
|
4257
|
-
"NightClub",
|
|
4258
|
-
"NonprofitType",
|
|
4259
|
-
"Notary",
|
|
4260
|
-
"NoteDigitalDocument",
|
|
4261
|
-
"Number",
|
|
4262
|
-
"Nursing",
|
|
4263
|
-
"NutritionInformation",
|
|
4264
|
-
"Observation",
|
|
4265
|
-
"Obstetric",
|
|
4266
|
-
"Occupation",
|
|
4267
|
-
"OccupationalExperienceRequirements",
|
|
4268
|
-
"OccupationalTherapy",
|
|
4269
|
-
"OceanBodyOfWater",
|
|
4270
|
-
"Offer",
|
|
4271
|
-
"OfferCatalog",
|
|
4272
|
-
"OfferForLease",
|
|
4273
|
-
"OfferForPurchase",
|
|
4274
|
-
"OfferItemCondition",
|
|
4275
|
-
"OfferShippingDetails",
|
|
4276
|
-
"OfficeEquipmentStore",
|
|
4277
|
-
"OnDemandEvent",
|
|
4278
|
-
"Oncologic",
|
|
4279
|
-
"OnlineBusiness",
|
|
4280
|
-
"OnlineMarketplace",
|
|
4281
|
-
"OnlineStore",
|
|
4282
|
-
"OpeningHoursSpecification",
|
|
4283
|
-
"OperatingSystem",
|
|
4284
|
-
"OpinionNewsArticle",
|
|
4285
|
-
"Optician",
|
|
4286
|
-
"Optometric",
|
|
4287
|
-
"Order",
|
|
4288
|
-
"OrderAction",
|
|
4289
|
-
"OrderItem",
|
|
4290
|
-
"OrderStatus",
|
|
4291
|
-
"Organization",
|
|
4292
|
-
"OrganizationRole",
|
|
4293
|
-
"OrganizeAction",
|
|
4294
|
-
"Otolaryngologic",
|
|
4295
|
-
"OutletStore",
|
|
4296
|
-
"OwnershipInfo",
|
|
4297
|
-
"PaintAction",
|
|
4298
|
-
"Painting",
|
|
4299
|
-
"PalliativeProcedure",
|
|
4300
|
-
"ParcelDelivery",
|
|
4301
|
-
"ParentAudience",
|
|
4302
|
-
"Park",
|
|
4303
|
-
"ParkingFacility",
|
|
4304
|
-
"PathologyTest",
|
|
4305
|
-
"Patient",
|
|
4306
|
-
"PawnShop",
|
|
4307
|
-
"PayAction",
|
|
4308
|
-
"PaymentCard",
|
|
4309
|
-
"PaymentChargeSpecification",
|
|
4310
|
-
"PaymentMethod",
|
|
4311
|
-
"PaymentMethodType",
|
|
4312
|
-
"PaymentService",
|
|
4313
|
-
"PaymentStatusType",
|
|
4314
|
-
"Pediatric",
|
|
4315
|
-
"PeopleAudience",
|
|
4316
|
-
"PerformAction",
|
|
4317
|
-
"PerformanceRole",
|
|
4318
|
-
"PerformingArtsEvent",
|
|
4319
|
-
"PerformingArtsTheater",
|
|
4320
|
-
"PerformingGroup",
|
|
4321
|
-
"Periodical",
|
|
4322
|
-
"Permit",
|
|
4323
|
-
"Person",
|
|
4324
|
-
"PetStore",
|
|
4325
|
-
"Pharmacy",
|
|
4326
|
-
"Photograph",
|
|
4327
|
-
"PhotographAction",
|
|
4328
|
-
"PhysicalActivity",
|
|
4329
|
-
"PhysicalActivityCategory",
|
|
4330
|
-
"PhysicalExam",
|
|
4331
|
-
"PhysicalTherapy",
|
|
4332
|
-
"Physician",
|
|
4333
|
-
"PhysiciansOffice",
|
|
4334
|
-
"Physiotherapy",
|
|
4335
|
-
"Place",
|
|
4336
|
-
"PlaceOfWorship",
|
|
4337
|
-
"PlanAction",
|
|
4338
|
-
"PlasticSurgery",
|
|
4339
|
-
"Play",
|
|
4340
|
-
"PlayAction",
|
|
4341
|
-
"PlayGameAction",
|
|
4342
|
-
"Playground",
|
|
4343
|
-
"Plumber",
|
|
4344
|
-
"PodcastEpisode",
|
|
4345
|
-
"PodcastSeason",
|
|
4346
|
-
"PodcastSeries",
|
|
4347
|
-
"Podiatric",
|
|
4348
|
-
"PoliceStation",
|
|
4349
|
-
"PoliticalParty",
|
|
4350
|
-
"Pond",
|
|
4351
|
-
"PostOffice",
|
|
4352
|
-
"PostalAddress",
|
|
4353
|
-
"PostalCodeRangeSpecification",
|
|
4354
|
-
"Poster",
|
|
4355
|
-
"PreOrderAction",
|
|
4356
|
-
"PrependAction",
|
|
4357
|
-
"Preschool",
|
|
4358
|
-
"PresentationDigitalDocument",
|
|
4359
|
-
"PreventionIndication",
|
|
4360
|
-
"PriceComponentTypeEnumeration",
|
|
4361
|
-
"PriceSpecification",
|
|
4362
|
-
"PriceTypeEnumeration",
|
|
4363
|
-
"PrimaryCare",
|
|
4364
|
-
"Product",
|
|
4365
|
-
"ProductCollection",
|
|
4366
|
-
"ProductGroup",
|
|
4367
|
-
"ProductModel",
|
|
4368
|
-
"ProductReturnEnumeration",
|
|
4369
|
-
"ProductReturnPolicy",
|
|
4370
|
-
"ProfessionalService",
|
|
4371
|
-
"ProfilePage",
|
|
4372
|
-
"ProgramMembership",
|
|
4373
|
-
"Project",
|
|
4374
|
-
"PronounceableText",
|
|
4375
|
-
"Property",
|
|
4376
|
-
"PropertyValue",
|
|
4377
|
-
"PropertyValueSpecification",
|
|
4378
|
-
"Protein",
|
|
4379
|
-
"Psychiatric",
|
|
4380
|
-
"PsychologicalTreatment",
|
|
4381
|
-
"PublicHealth",
|
|
4382
|
-
"PublicSwimmingPool",
|
|
4383
|
-
"PublicToilet",
|
|
4384
|
-
"PublicationEvent",
|
|
4385
|
-
"PublicationIssue",
|
|
4386
|
-
"PublicationVolume",
|
|
4387
|
-
"PurchaseType",
|
|
4388
|
-
"QAPage",
|
|
4389
|
-
"QualitativeValue",
|
|
4390
|
-
"QuantitativeValue",
|
|
4391
|
-
"QuantitativeValueDistribution",
|
|
4392
|
-
"Quantity",
|
|
4393
|
-
"Question",
|
|
4394
|
-
"Quiz",
|
|
4395
|
-
"Quotation",
|
|
4396
|
-
"QuoteAction",
|
|
4397
|
-
"RVPark",
|
|
4398
|
-
"RadiationTherapy",
|
|
4399
|
-
"RadioBroadcastService",
|
|
4400
|
-
"RadioChannel",
|
|
4401
|
-
"RadioClip",
|
|
4402
|
-
"RadioEpisode",
|
|
4403
|
-
"RadioSeason",
|
|
4404
|
-
"RadioSeries",
|
|
4405
|
-
"RadioStation",
|
|
4406
|
-
"Rating",
|
|
4407
|
-
"ReactAction",
|
|
4408
|
-
"ReadAction",
|
|
4409
|
-
"RealEstateAgent",
|
|
4410
|
-
"RealEstateListing",
|
|
4411
|
-
"ReceiveAction",
|
|
4412
|
-
"Recipe",
|
|
4413
|
-
"Recommendation",
|
|
4414
|
-
"RecommendedDoseSchedule",
|
|
4415
|
-
"RecyclingCenter",
|
|
4416
|
-
"RefundTypeEnumeration",
|
|
4417
|
-
"RegisterAction",
|
|
4418
|
-
"RejectAction",
|
|
4419
|
-
"RentAction",
|
|
4420
|
-
"RentalCarReservation",
|
|
4421
|
-
"RepaymentSpecification",
|
|
4422
|
-
"ReplaceAction",
|
|
4423
|
-
"ReplyAction",
|
|
4424
|
-
"Report",
|
|
4425
|
-
"ReportageNewsArticle",
|
|
4426
|
-
"ReportedDoseSchedule",
|
|
4427
|
-
"ResearchOrganization",
|
|
4428
|
-
"ResearchProject",
|
|
4429
|
-
"Researcher",
|
|
4430
|
-
"Reservation",
|
|
4431
|
-
"ReservationPackage",
|
|
4432
|
-
"ReservationStatusType",
|
|
4433
|
-
"ReserveAction",
|
|
4434
|
-
"Reservoir",
|
|
4435
|
-
"ResetPasswordAction",
|
|
4436
|
-
"Residence",
|
|
4437
|
-
"Resort",
|
|
4438
|
-
"RespiratoryTherapy",
|
|
4439
|
-
"Restaurant",
|
|
4440
|
-
"RestrictedDiet",
|
|
4441
|
-
"ResumeAction",
|
|
4442
|
-
"ReturnAction",
|
|
4443
|
-
"ReturnFeesEnumeration",
|
|
4444
|
-
"ReturnLabelSourceEnumeration",
|
|
4445
|
-
"ReturnMethodEnumeration",
|
|
4446
|
-
"Review",
|
|
4447
|
-
"ReviewAction",
|
|
4448
|
-
"ReviewNewsArticle",
|
|
4449
|
-
"RiverBodyOfWater",
|
|
4450
|
-
"Role",
|
|
4451
|
-
"RoofingContractor",
|
|
4452
|
-
"Room",
|
|
4453
|
-
"RsvpAction",
|
|
4454
|
-
"RsvpResponseType",
|
|
4455
|
-
"RuntimePlatform",
|
|
4456
|
-
"SaleEvent",
|
|
4457
|
-
"SatiricalArticle",
|
|
4458
|
-
"Schedule",
|
|
4459
|
-
"ScheduleAction",
|
|
4460
|
-
"ScholarlyArticle",
|
|
4461
|
-
"School",
|
|
4462
|
-
"SchoolDistrict",
|
|
4463
|
-
"ScreeningEvent",
|
|
4464
|
-
"Sculpture",
|
|
4465
|
-
"SeaBodyOfWater",
|
|
4466
|
-
"SearchAction",
|
|
4467
|
-
"SearchRescueOrganization",
|
|
4468
|
-
"SearchResultsPage",
|
|
4469
|
-
"Season",
|
|
4470
|
-
"Seat",
|
|
4471
|
-
"SeekToAction",
|
|
4472
|
-
"SelfStorage",
|
|
4473
|
-
"SellAction",
|
|
4474
|
-
"SendAction",
|
|
4475
|
-
"SequentialArt",
|
|
4476
|
-
"Series",
|
|
4477
|
-
"Service",
|
|
4478
|
-
"ServiceChannel",
|
|
4479
|
-
"ServicePeriod",
|
|
4480
|
-
"ShareAction",
|
|
4481
|
-
"SheetMusic",
|
|
4482
|
-
"ShippingConditions",
|
|
4483
|
-
"ShippingDeliveryTime",
|
|
4484
|
-
"ShippingRateSettings",
|
|
4485
|
-
"ShippingService",
|
|
4486
|
-
"ShoeStore",
|
|
4487
|
-
"ShoppingCenter",
|
|
4488
|
-
"ShortStory",
|
|
4489
|
-
"SingleFamilyResidence",
|
|
4490
|
-
"SiteNavigationElement",
|
|
4491
|
-
"SizeGroupEnumeration",
|
|
4492
|
-
"SizeSpecification",
|
|
4493
|
-
"SizeSystemEnumeration",
|
|
4494
|
-
"SkiResort",
|
|
4495
|
-
"SocialEvent",
|
|
4496
|
-
"SocialMediaPosting",
|
|
4497
|
-
"SoftwareApplication",
|
|
4498
|
-
"SoftwareSourceCode",
|
|
4499
|
-
"SolveMathAction",
|
|
4500
|
-
"SomeProducts",
|
|
4501
|
-
"SpeakableSpecification",
|
|
4502
|
-
"SpecialAnnouncement",
|
|
4503
|
-
"Specialty",
|
|
4504
|
-
"SportingGoodsStore",
|
|
4505
|
-
"SportsActivityLocation",
|
|
4506
|
-
"SportsClub",
|
|
4507
|
-
"SportsEvent",
|
|
4508
|
-
"SportsOrganization",
|
|
4509
|
-
"SportsTeam",
|
|
4510
|
-
"SpreadsheetDigitalDocument",
|
|
4511
|
-
"StadiumOrArena",
|
|
4512
|
-
"State",
|
|
4513
|
-
"Statement",
|
|
4514
|
-
"StatisticalPopulation",
|
|
4515
|
-
"StatisticalVariable",
|
|
4516
|
-
"StatusEnumeration",
|
|
4517
|
-
"SteeringPositionValue",
|
|
4518
|
-
"Store",
|
|
4519
|
-
"StructuredValue",
|
|
4520
|
-
"StupidType",
|
|
4521
|
-
"SubscribeAction",
|
|
4522
|
-
"Substance",
|
|
4523
|
-
"SubwayStation",
|
|
4524
|
-
"Suite",
|
|
4525
|
-
"SuperficialAnatomy",
|
|
4526
|
-
"SurgicalProcedure",
|
|
4527
|
-
"SuspendAction",
|
|
4528
|
-
"Syllabus",
|
|
4529
|
-
"Synagogue",
|
|
4530
|
-
"TVClip",
|
|
4531
|
-
"TVEpisode",
|
|
4532
|
-
"TVSeason",
|
|
4533
|
-
"TVSeries",
|
|
4534
|
-
"Table",
|
|
4535
|
-
"TakeAction",
|
|
4536
|
-
"TattooParlor",
|
|
4537
|
-
"Taxi",
|
|
4538
|
-
"TaxiReservation",
|
|
4539
|
-
"TaxiService",
|
|
4540
|
-
"TaxiStand",
|
|
4541
|
-
"Taxon",
|
|
4542
|
-
"TechArticle",
|
|
4543
|
-
"TelevisionChannel",
|
|
4544
|
-
"TelevisionStation",
|
|
4545
|
-
"TennisComplex",
|
|
4546
|
-
"Text",
|
|
4547
|
-
"TextDigitalDocument",
|
|
4548
|
-
"TextObject",
|
|
4549
|
-
"TheaterEvent",
|
|
4550
|
-
"TheaterGroup",
|
|
4551
|
-
"TherapeuticProcedure",
|
|
4552
|
-
"Thesis",
|
|
4553
|
-
"Thing",
|
|
4554
|
-
"Ticket",
|
|
4555
|
-
"TieAction",
|
|
4556
|
-
"TierBenefitEnumeration",
|
|
4557
|
-
"Time",
|
|
4558
|
-
"TipAction",
|
|
4559
|
-
"TireShop",
|
|
4560
|
-
"TouristAttraction",
|
|
4561
|
-
"TouristDestination",
|
|
4562
|
-
"TouristInformationCenter",
|
|
4563
|
-
"TouristTrip",
|
|
4564
|
-
"ToyStore",
|
|
4565
|
-
"TrackAction",
|
|
4566
|
-
"TradeAction",
|
|
4567
|
-
"TrainReservation",
|
|
4568
|
-
"TrainStation",
|
|
4569
|
-
"TrainTrip",
|
|
4570
|
-
"TransferAction",
|
|
4571
|
-
"TravelAction",
|
|
4572
|
-
"TravelAgency",
|
|
4573
|
-
"TreatmentIndication",
|
|
4574
|
-
"Trip",
|
|
4575
|
-
"TypeAndQuantityNode",
|
|
4576
|
-
"UKNonprofitType",
|
|
4577
|
-
"URL",
|
|
4578
|
-
"USNonprofitType",
|
|
4579
|
-
"UnRegisterAction",
|
|
4580
|
-
"UnitPriceSpecification",
|
|
4581
|
-
"UpdateAction",
|
|
4582
|
-
"UseAction",
|
|
4583
|
-
"UserBlocks",
|
|
4584
|
-
"UserCheckins",
|
|
4585
|
-
"UserComments",
|
|
4586
|
-
"UserDownloads",
|
|
4587
|
-
"UserInteraction",
|
|
4588
|
-
"UserLikes",
|
|
4589
|
-
"UserPageVisits",
|
|
4590
|
-
"UserPlays",
|
|
4591
|
-
"UserPlusOnes",
|
|
4592
|
-
"UserReview",
|
|
4593
|
-
"UserTweets",
|
|
4594
|
-
"VacationRental",
|
|
4595
|
-
"Vehicle",
|
|
4596
|
-
"Vein",
|
|
4597
|
-
"Vessel",
|
|
4598
|
-
"VeterinaryCare",
|
|
4599
|
-
"VideoGallery",
|
|
4600
|
-
"VideoGame",
|
|
4601
|
-
"VideoGameClip",
|
|
4602
|
-
"VideoGameSeries",
|
|
4603
|
-
"VideoObject",
|
|
4604
|
-
"VideoObjectSnapshot",
|
|
4605
|
-
"ViewAction",
|
|
4606
|
-
"VirtualLocation",
|
|
4607
|
-
"VisualArtsEvent",
|
|
4608
|
-
"VisualArtwork",
|
|
4609
|
-
"VitalSign",
|
|
4610
|
-
"Volcano",
|
|
4611
|
-
"VoteAction",
|
|
4612
|
-
"WPAdBlock",
|
|
4613
|
-
"WPFooter",
|
|
4614
|
-
"WPHeader",
|
|
4615
|
-
"WPSideBar",
|
|
4616
|
-
"WantAction",
|
|
4617
|
-
"WarrantyPromise",
|
|
4618
|
-
"WarrantyScope",
|
|
4619
|
-
"WatchAction",
|
|
4620
|
-
"Waterfall",
|
|
4621
|
-
"WearAction",
|
|
4622
|
-
"WearableMeasurementTypeEnumeration",
|
|
4623
|
-
"WearableSizeGroupEnumeration",
|
|
4624
|
-
"WearableSizeSystemEnumeration",
|
|
4625
|
-
"WebAPI",
|
|
4626
|
-
"WebApplication",
|
|
4627
|
-
"WebContent",
|
|
4628
|
-
"WebPage",
|
|
4629
|
-
"WebPageElement",
|
|
4630
|
-
"WebSite",
|
|
4631
|
-
"WholesaleStore",
|
|
4632
|
-
"WinAction",
|
|
4633
|
-
"Winery",
|
|
4634
|
-
"WorkBasedProgram",
|
|
4635
|
-
"WorkersUnion",
|
|
4636
|
-
"WriteAction",
|
|
4637
|
-
"XPathType",
|
|
4638
|
-
"Zoo",
|
|
4639
|
-
"iflastandards_info_ns_lrm_lrmoo_F31_Performance",
|
|
4640
|
-
"purl_bioontology_org_ontology_SNOMEDCT_105590001",
|
|
4641
|
-
"purl_bioontology_org_ontology_SNOMEDCT_116154003",
|
|
4642
|
-
"purl_bioontology_org_ontology_SNOMEDCT_277132007",
|
|
4643
|
-
"purl_bioontology_org_ontology_SNOMEDCT_387713003",
|
|
4644
|
-
"purl_bioontology_org_ontology_SNOMEDCT_410942007",
|
|
4645
|
-
"purl_bioontology_org_ontology_SNOMEDCT_50731006",
|
|
4646
|
-
"purl_bioontology_org_ontology_SNOMEDCT_51114001",
|
|
4647
|
-
"purl_bioontology_org_ontology_SNOMEDCT_63653004",
|
|
4648
|
-
"purl_org_dc_dcmitype_Dataset",
|
|
4649
|
-
"purl_org_dc_dcmitype_Event",
|
|
4650
|
-
"purl_org_dc_dcmitype_Image",
|
|
4651
|
-
"purl_org_dc_dcmitype_Text",
|
|
4652
|
-
"purl_org_ontology_bibo_Issue",
|
|
4653
|
-
"purl_org_ontology_bibo_Periodical",
|
|
4654
|
-
"rdfs_org_ns_void_Dataset",
|
|
4655
|
-
"ref_gs1_org_voc_CertificationDetails",
|
|
4656
|
-
"ref_gs1_org_voc_ContactPoint",
|
|
4657
|
-
"ref_gs1_org_voc_Country",
|
|
4658
|
-
"ref_gs1_org_voc_Organization",
|
|
4659
|
-
"ref_gs1_org_voc_PostalAddress",
|
|
4660
|
-
"sarif_info_Result",
|
|
4661
|
-
"spec_edmcouncil_org_fibo_ontology_BE_Corporations_Corporations_Corporation",
|
|
4662
|
-
"spec_edmcouncil_org_fibo_ontology_BE_LegalEntities_CorporateBodies_CooperativeSociety",
|
|
4663
|
-
"spec_edmcouncil_org_fibo_ontology_BE_NotForProfitOrganizations_NotForProfitOrganizations_NonGovernmentalOrganization",
|
|
4664
|
-
"spec_edmcouncil_org_fibo_ontology_FBC_ProductsAndServices_FinancialProductsAndServices_BankAccount",
|
|
4665
|
-
"spec_edmcouncil_org_fibo_ontology_FBC_ProductsAndServices_FinancialProductsAndServices_PaymentMechanism",
|
|
4666
|
-
"spec_edmcouncil_org_fibo_ontology_FND_Agreements_Contracts_MutualContractualAgreement",
|
|
4667
|
-
"spec_edmcouncil_org_fibo_ontology_FND_Arrangements_Documents_Certificate",
|
|
4668
|
-
"spec_edmcouncil_org_fibo_ontology_FND_Arrangements_Documents_Document",
|
|
4669
|
-
"spec_edmcouncil_org_fibo_ontology_FND_Arrangements_Documents_LegalDocument",
|
|
4670
|
-
"spec_edmcouncil_org_fibo_ontology_FND_DatesAndTimes_Occurrences_Occurrence",
|
|
4671
|
-
"spec_edmcouncil_org_fibo_ontology_FND_Organizations_Organizations_ContactPoint",
|
|
4672
|
-
"spec_edmcouncil_org_fibo_ontology_FND_Organizations_Organizations_Organization",
|
|
4673
|
-
"spec_edmcouncil_org_fibo_ontology_FND_Places_Addresses_PostalAddress",
|
|
4674
|
-
"spec_edmcouncil_org_fibo_ontology_FND_Places_Locations_Municipality",
|
|
4675
|
-
"spec_edmcouncil_org_fibo_ontology_FND_ProductsAndServices_ProductsAndServices_Offer",
|
|
4676
|
-
"spec_edmcouncil_org_fibo_ontology_FND_ProductsAndServices_ProductsAndServices_Price",
|
|
4677
|
-
"spec_edmcouncil_org_fibo_ontology_FND_ProductsAndServices_ProductsAndServices_Product",
|
|
4678
|
-
"spec_edmcouncil_org_fibo_ontology_PAY_PaymentServices_PaymentServices_PaymentService",
|
|
4679
|
-
"unece_org_vocab_AmountType",
|
|
4680
|
-
"unece_org_vocab_BrandName",
|
|
4681
|
-
"unece_org_vocab_Country",
|
|
4682
|
-
"unece_org_vocab_ElectronicDocument",
|
|
4683
|
-
"unece_org_vocab_FinancialCard",
|
|
4684
|
-
"unece_org_vocab_GeographicalCoordinate",
|
|
4685
|
-
"unece_org_vocab_Invoice",
|
|
4686
|
-
"unece_org_vocab_LineTradeAgreement",
|
|
4687
|
-
"unece_org_vocab_Offer",
|
|
4688
|
-
"unece_org_vocab_Order",
|
|
4689
|
-
"unece_org_vocab_PaymentMeans",
|
|
4690
|
-
"unece_org_vocab_RequestForQuotation",
|
|
4691
|
-
"unece_org_vocab_SpecifiedCertificate",
|
|
4692
|
-
"unece_org_vocab_SpecifiedTradeProduct",
|
|
4693
|
-
"unece_org_vocab_TradeAddress",
|
|
4694
|
-
"unece_org_vocab_TradeProduct",
|
|
4695
|
-
"unece_org_vocab_TransportMethod",
|
|
4696
|
-
"www_omg_org_spec_Commons_Classifiers_Classifier",
|
|
4697
|
-
"www_omg_org_spec_Commons_Collections_Collection",
|
|
4698
|
-
"www_omg_org_spec_Commons_DatesAndTimes_Date",
|
|
4699
|
-
"www_omg_org_spec_Commons_DatesAndTimes_DateTime",
|
|
4700
|
-
"www_omg_org_spec_Commons_DatesAndTimes_Duration",
|
|
4701
|
-
"www_omg_org_spec_Commons_GeopoliticalEntities_GeopoliticalEntity",
|
|
4702
|
-
"www_omg_org_spec_Commons_GeopoliticalEntities_Subdivision",
|
|
4703
|
-
"www_omg_org_spec_Commons_Locations_Address",
|
|
4704
|
-
"www_omg_org_spec_Commons_Locations_GeographicCoordinate",
|
|
4705
|
-
"www_omg_org_spec_Commons_Locations_Location",
|
|
4706
|
-
"www_omg_org_spec_LCC_Countries_CountryRepresentation_Continent",
|
|
4707
|
-
"www_omg_org_spec_LCC_Countries_CountryRepresentation_Country",
|
|
4708
|
-
"www_w3_org_2006_vcard_ns_VCard",
|
|
4709
|
-
"www_w3_org_ns_dcat_Catalog",
|
|
4710
|
-
"www_w3_org_ns_dcat_Dataset",
|
|
4711
|
-
"www_w3_org_ns_dcat_Distribution",
|
|
4712
|
-
"www_w3_org_ns_hydra_core_Error",
|
|
4713
|
-
"www_w3_org_ns_prov_InstantaneousEvent",
|
|
4714
|
-
"www_w3_org_ns_prov_atTime",
|
|
4715
|
-
"xmlns_com_foaf_0_1_Person"
|
|
4716
|
-
]);
|
|
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
|
+
);
|
|
4717
3667
|
|
|
4718
3668
|
// src/rules/seo/json-ld-validity.ts
|
|
4719
3669
|
var SCHEMA_ORG_CONTEXT_RE = /^https?:\/\/schema\.org\/?$/;
|
|
4720
3670
|
var LOWERCASE_TO_CANONICAL = new Map(
|
|
4721
3671
|
[...SCHEMA_ORG_TYPES].map((name) => [name.toLowerCase(), name])
|
|
4722
3672
|
);
|
|
3673
|
+
var SORTED_TYPES = [...SCHEMA_ORG_TYPES].sort();
|
|
3674
|
+
var MAX_SUGGEST_DISTANCE = 2;
|
|
3675
|
+
function levenshteinWithin(a, b, maxDistance) {
|
|
3676
|
+
if (Math.abs(a.length - b.length) > maxDistance) return maxDistance + 1;
|
|
3677
|
+
let prev = Array.from({ length: b.length + 1 }, (_, j) => j);
|
|
3678
|
+
for (let i = 1; i <= a.length; i++) {
|
|
3679
|
+
const curr = [i];
|
|
3680
|
+
let rowMin = i;
|
|
3681
|
+
for (let j = 1; j <= b.length; j++) {
|
|
3682
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
3683
|
+
const v = Math.min(prev[j] + 1, curr[j - 1] + 1, prev[j - 1] + cost);
|
|
3684
|
+
curr.push(v);
|
|
3685
|
+
if (v < rowMin) rowMin = v;
|
|
3686
|
+
}
|
|
3687
|
+
if (rowMin > maxDistance) return maxDistance + 1;
|
|
3688
|
+
prev = curr;
|
|
3689
|
+
}
|
|
3690
|
+
return prev[b.length];
|
|
3691
|
+
}
|
|
3692
|
+
function closestType(name, catalog) {
|
|
3693
|
+
const lower = name.toLowerCase();
|
|
3694
|
+
let best;
|
|
3695
|
+
let bestDistance = MAX_SUGGEST_DISTANCE + 1;
|
|
3696
|
+
for (const candidate of catalog) {
|
|
3697
|
+
if (Math.abs(candidate.length - name.length) > MAX_SUGGEST_DISTANCE) continue;
|
|
3698
|
+
const d = levenshteinWithin(lower, candidate.toLowerCase(), MAX_SUGGEST_DISTANCE);
|
|
3699
|
+
if (d < bestDistance) {
|
|
3700
|
+
bestDistance = d;
|
|
3701
|
+
best = candidate;
|
|
3702
|
+
}
|
|
3703
|
+
}
|
|
3704
|
+
return bestDistance <= MAX_SUGGEST_DISTANCE ? best : void 0;
|
|
3705
|
+
}
|
|
4723
3706
|
function isSchemaOrgContextValue(v) {
|
|
4724
3707
|
if (typeof v === "string") return SCHEMA_ORG_CONTEXT_RE.test(v);
|
|
4725
3708
|
if (Array.isArray(v)) return v.every((m) => typeof m === "string" && SCHEMA_ORG_CONTEXT_RE.test(m));
|
|
@@ -4740,7 +3723,7 @@ function unknownTypeNames(nodes) {
|
|
|
4740
3723
|
return [...seen];
|
|
4741
3724
|
}
|
|
4742
3725
|
function unknownTypeMessage(name) {
|
|
4743
|
-
const canonical = LOWERCASE_TO_CANONICAL.get(name.toLowerCase());
|
|
3726
|
+
const canonical = LOWERCASE_TO_CANONICAL.get(name.toLowerCase()) ?? closestType(name, SORTED_TYPES);
|
|
4744
3727
|
return canonical ? `Unknown @type '${name}' \u2014 not a schema.org type. Did you mean '${canonical}'?` : `Unknown @type '${name}' \u2014 not a schema.org type.`;
|
|
4745
3728
|
}
|
|
4746
3729
|
var seoJsonLdValidity = {
|
|
@@ -5300,57 +4283,56 @@ var seoHeadingLevelSkip = {
|
|
|
5300
4283
|
}
|
|
5301
4284
|
};
|
|
5302
4285
|
|
|
5303
|
-
// src/rules/
|
|
5304
|
-
|
|
5305
|
-
|
|
5306
|
-
function isSuppressed(m, ruleId, line) {
|
|
5307
|
-
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)));
|
|
5308
4289
|
}
|
|
5309
|
-
function
|
|
5310
|
-
const docsUrl12 = docsUrlFor(
|
|
5311
|
-
const severity = opts.severity ?? "warning";
|
|
4290
|
+
function fileRule(spec) {
|
|
4291
|
+
const docsUrl12 = docsUrlFor(spec.id);
|
|
5312
4292
|
return {
|
|
5313
|
-
id:
|
|
5314
|
-
title:
|
|
5315
|
-
category:
|
|
5316
|
-
severity,
|
|
4293
|
+
id: spec.id,
|
|
4294
|
+
title: spec.title,
|
|
4295
|
+
category: spec.category,
|
|
4296
|
+
severity: spec.severity,
|
|
5317
4297
|
scope: "component",
|
|
5318
|
-
rationale:
|
|
5319
|
-
...
|
|
4298
|
+
rationale: spec.rationale,
|
|
4299
|
+
...spec.fix ? { fix: spec.fix } : {},
|
|
4300
|
+
...spec.options ? { options: spec.options } : {},
|
|
5320
4301
|
async check(ctx) {
|
|
5321
4302
|
const out = [];
|
|
5322
|
-
|
|
5323
|
-
|
|
5324
|
-
const
|
|
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)));
|
|
5325
4309
|
if (bad.length === 0) {
|
|
5326
4310
|
out.push({
|
|
5327
|
-
id:
|
|
5328
|
-
category:
|
|
5329
|
-
severity,
|
|
5330
|
-
detection:
|
|
5331
|
-
route:
|
|
5332
|
-
|
|
5333
|
-
|
|
5334
|
-
|
|
5335
|
-
message: opts.label,
|
|
5336
|
-
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,
|
|
5337
4319
|
docsUrl: docsUrl12
|
|
5338
4320
|
});
|
|
5339
4321
|
continue;
|
|
5340
4322
|
}
|
|
5341
4323
|
for (const b of bad) {
|
|
5342
4324
|
out.push({
|
|
5343
|
-
id:
|
|
5344
|
-
category:
|
|
5345
|
-
severity,
|
|
5346
|
-
detection:
|
|
5347
|
-
route:
|
|
5348
|
-
location:
|
|
4325
|
+
id: spec.id,
|
|
4326
|
+
category: spec.category,
|
|
4327
|
+
severity: spec.severity,
|
|
4328
|
+
detection: PENALIZED,
|
|
4329
|
+
route: f.file,
|
|
4330
|
+
location: f.file,
|
|
5349
4331
|
...b.line > 0 ? { line: b.line } : {},
|
|
5350
4332
|
message: b.message,
|
|
5351
|
-
recommendation:
|
|
4333
|
+
recommendation: recommendation10,
|
|
5352
4334
|
docsUrl: docsUrl12,
|
|
5353
|
-
...
|
|
4335
|
+
...spec.fix ? { fix: { ...spec.fix } } : {}
|
|
5354
4336
|
});
|
|
5355
4337
|
}
|
|
5356
4338
|
}
|
|
@@ -5358,6 +4340,24 @@ function kitModuleRule(opts) {
|
|
|
5358
4340
|
}
|
|
5359
4341
|
};
|
|
5360
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
|
+
}
|
|
5361
4361
|
|
|
5362
4362
|
// src/rules/seo/ssr-disabled.ts
|
|
5363
4363
|
var ROOT_LAYOUT_RE = /^src\/routes\/\+layout(\.server)?\.(ts|js)$/;
|
|
@@ -5378,69 +4378,6 @@ var seoSsrDisabled = kitModuleRule({
|
|
|
5378
4378
|
]
|
|
5379
4379
|
});
|
|
5380
4380
|
|
|
5381
|
-
// src/rules/component-rule.ts
|
|
5382
|
-
var PENALIZED3 = { presence: "none", value: "absent" };
|
|
5383
|
-
var PASS3 = { presence: "own", value: "static" };
|
|
5384
|
-
function isSuppressed2(c, ruleId, line) {
|
|
5385
|
-
return (c.suppressions ?? []).some((s) => s.line === line && (!s.ruleIds || s.ruleIds.includes(ruleId)));
|
|
5386
|
-
}
|
|
5387
|
-
function componentRule(opts) {
|
|
5388
|
-
const docsUrl12 = docsUrlFor(opts.id);
|
|
5389
|
-
const severity = opts.severity ?? "warning";
|
|
5390
|
-
return {
|
|
5391
|
-
id: opts.id,
|
|
5392
|
-
title: opts.title,
|
|
5393
|
-
category: opts.category,
|
|
5394
|
-
severity,
|
|
5395
|
-
scope: "component",
|
|
5396
|
-
rationale: opts.rationale,
|
|
5397
|
-
...opts.fix ? { fix: opts.fix } : {},
|
|
5398
|
-
...opts.options ? { options: opts.options } : {},
|
|
5399
|
-
async check(ctx) {
|
|
5400
|
-
const out = [];
|
|
5401
|
-
const compiled = compileOverrides(ctx.config);
|
|
5402
|
-
for (const c of ctx.components ?? []) {
|
|
5403
|
-
const o = resolveRuleOptions(opts.id, opts.options, ctx.config, { route: c.file, file: c.file }, compiled);
|
|
5404
|
-
const recommendation10 = typeof opts.recommendation === "function" ? opts.recommendation(o) : opts.recommendation;
|
|
5405
|
-
if (!opts.applies(c, o, ctx)) continue;
|
|
5406
|
-
const bad = opts.bad(c, o, ctx).filter((b) => !(b.line > 0 && isSuppressed2(c, opts.id, b.line)));
|
|
5407
|
-
if (bad.length === 0) {
|
|
5408
|
-
out.push({
|
|
5409
|
-
id: opts.id,
|
|
5410
|
-
category: opts.category,
|
|
5411
|
-
severity,
|
|
5412
|
-
detection: PASS3,
|
|
5413
|
-
route: c.file,
|
|
5414
|
-
// Uniform PASS-result attribution (design 2026-08-08-pass-result-location-design.md):
|
|
5415
|
-
// same location a penalized result for this file would carry.
|
|
5416
|
-
location: c.file,
|
|
5417
|
-
message: opts.label,
|
|
5418
|
-
recommendation: recommendation10,
|
|
5419
|
-
docsUrl: docsUrl12
|
|
5420
|
-
});
|
|
5421
|
-
continue;
|
|
5422
|
-
}
|
|
5423
|
-
for (const b of bad) {
|
|
5424
|
-
out.push({
|
|
5425
|
-
id: opts.id,
|
|
5426
|
-
category: opts.category,
|
|
5427
|
-
severity,
|
|
5428
|
-
detection: PENALIZED3,
|
|
5429
|
-
route: c.file,
|
|
5430
|
-
location: c.file,
|
|
5431
|
-
...b.line > 0 ? { line: b.line } : {},
|
|
5432
|
-
message: b.message,
|
|
5433
|
-
recommendation: recommendation10,
|
|
5434
|
-
docsUrl: docsUrl12,
|
|
5435
|
-
...opts.fix ? { fix: { ...opts.fix } } : {}
|
|
5436
|
-
});
|
|
5437
|
-
}
|
|
5438
|
-
}
|
|
5439
|
-
return out;
|
|
5440
|
-
}
|
|
5441
|
-
};
|
|
5442
|
-
}
|
|
5443
|
-
|
|
5444
4381
|
// src/rules/correctness/each-key.ts
|
|
5445
4382
|
var correctnessEachKey = componentRule({
|
|
5446
4383
|
id: "correctness/each-key",
|
|
@@ -5594,7 +4531,8 @@ var correctnessOrphanEffect = componentRule({
|
|
|
5594
4531
|
rationale: "An $effect created outside component initialisation throws effect_orphan at runtime. The compiler does not catch it \u2014 the server compiler deletes $effect calls entirely, so SSR renders without error \u2014 and the crash happens client-side, when the module evaluates in the browser, breaking hydration rather than producing a server error.",
|
|
5595
4532
|
// `orphanEffects` is typed required, but a facts object built by an older/external
|
|
5596
4533
|
// constructor may omit it — default to empty rather than let `applies` throw and
|
|
5597
|
-
//
|
|
4534
|
+
// surface this rule as failed (the engine isolates a throwing rule, but this one
|
|
4535
|
+
// can just work instead of getting flagged).
|
|
5598
4536
|
applies: (c) => (c.orphanEffects ?? []).length > 0,
|
|
5599
4537
|
bad: (c) => (c.orphanEffects ?? []).map((o) => ({
|
|
5600
4538
|
line: o.line,
|
|
@@ -5603,8 +4541,6 @@ var correctnessOrphanEffect = componentRule({
|
|
|
5603
4541
|
});
|
|
5604
4542
|
|
|
5605
4543
|
// src/rules/correctness/orphan-lifecycle.ts
|
|
5606
|
-
var PENALIZED4 = { presence: "none", value: "absent" };
|
|
5607
|
-
var PASS4 = { presence: "own", value: "static" };
|
|
5608
4544
|
var ID = "correctness/orphan-lifecycle";
|
|
5609
4545
|
var DOCS_URL = docsUrlFor(ID);
|
|
5610
4546
|
var LABEL = "Lifecycle-call context";
|
|
@@ -5618,17 +4554,14 @@ function kitLifecycleMessage(name, kind, inHandler) {
|
|
|
5618
4554
|
}
|
|
5619
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`;
|
|
5620
4556
|
}
|
|
5621
|
-
function isSuppressed3(suppressions, line) {
|
|
5622
|
-
return (suppressions ?? []).some((s) => s.line === line && (!s.ruleIds || s.ruleIds.includes(ID)));
|
|
5623
|
-
}
|
|
5624
4557
|
function emitFile(out, file, issues, suppressions) {
|
|
5625
|
-
const bad = issues.filter((b) => !(b.line > 0 &&
|
|
4558
|
+
const bad = issues.filter((b) => !(b.line > 0 && isSuppressed(suppressions, ID, b.line)));
|
|
5626
4559
|
if (bad.length === 0) {
|
|
5627
4560
|
out.push({
|
|
5628
4561
|
id: ID,
|
|
5629
4562
|
category: "correctness",
|
|
5630
4563
|
severity: "critical",
|
|
5631
|
-
detection:
|
|
4564
|
+
detection: PASS,
|
|
5632
4565
|
route: file,
|
|
5633
4566
|
// Uniform PASS-result attribution (design 2026-08-08-pass-result-location-design.md):
|
|
5634
4567
|
// same location a penalized result for this file would carry.
|
|
@@ -5644,7 +4577,7 @@ function emitFile(out, file, issues, suppressions) {
|
|
|
5644
4577
|
id: ID,
|
|
5645
4578
|
category: "correctness",
|
|
5646
4579
|
severity: "critical",
|
|
5647
|
-
detection:
|
|
4580
|
+
detection: PENALIZED,
|
|
5648
4581
|
route: file,
|
|
5649
4582
|
location: file,
|
|
5650
4583
|
...b.line > 0 ? { line: b.line } : {},
|
|
@@ -5694,8 +4627,6 @@ var correctnessOrphanLifecycle = {
|
|
|
5694
4627
|
};
|
|
5695
4628
|
|
|
5696
4629
|
// src/rules/correctness/base-path-navigation.ts
|
|
5697
|
-
var PENALIZED5 = { presence: "none", value: "absent" };
|
|
5698
|
-
var PASS5 = { presence: "own", value: "static" };
|
|
5699
4630
|
var ID2 = "correctness/base-path-navigation";
|
|
5700
4631
|
var DOCS_URL2 = docsUrlFor(ID2);
|
|
5701
4632
|
var LABEL2 = "Base-path-aware navigation";
|
|
@@ -5712,17 +4643,14 @@ function messageFor2(link) {
|
|
|
5712
4643
|
}
|
|
5713
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'.`;
|
|
5714
4645
|
}
|
|
5715
|
-
function isSuppressed4(suppressions, line) {
|
|
5716
|
-
return (suppressions ?? []).some((s) => s.line === line && (!s.ruleIds || s.ruleIds.includes(ID2)));
|
|
5717
|
-
}
|
|
5718
4646
|
function emitFile2(out, file, links, suppressions) {
|
|
5719
|
-
const bad = links.filter((l) => !(l.line > 0 &&
|
|
4647
|
+
const bad = links.filter((l) => !(l.line > 0 && isSuppressed(suppressions, ID2, l.line)));
|
|
5720
4648
|
if (bad.length === 0) {
|
|
5721
4649
|
out.push({
|
|
5722
4650
|
id: ID2,
|
|
5723
4651
|
category: "correctness",
|
|
5724
4652
|
severity: "warning",
|
|
5725
|
-
detection:
|
|
4653
|
+
detection: PASS,
|
|
5726
4654
|
route: file,
|
|
5727
4655
|
// Uniform PASS-result attribution (design 2026-08-08-pass-result-location-design.md):
|
|
5728
4656
|
// same location a penalized result for this file would carry.
|
|
@@ -5738,7 +4666,7 @@ function emitFile2(out, file, links, suppressions) {
|
|
|
5738
4666
|
id: ID2,
|
|
5739
4667
|
category: "correctness",
|
|
5740
4668
|
severity: "warning",
|
|
5741
|
-
detection:
|
|
4669
|
+
detection: PENALIZED,
|
|
5742
4670
|
route: file,
|
|
5743
4671
|
location: file,
|
|
5744
4672
|
...l.line > 0 ? { line: l.line } : {},
|
|
@@ -5775,24 +4703,19 @@ var correctnessBasePathNavigation = {
|
|
|
5775
4703
|
};
|
|
5776
4704
|
|
|
5777
4705
|
// src/rules/correctness/server-browser-global.ts
|
|
5778
|
-
var PENALIZED6 = { presence: "none", value: "absent" };
|
|
5779
|
-
var PASS6 = { presence: "own", value: "static" };
|
|
5780
4706
|
var ID3 = "correctness/server-browser-global";
|
|
5781
4707
|
var DOCS_URL3 = docsUrlFor(ID3);
|
|
5782
4708
|
var LABEL3 = "Server-safe module code";
|
|
5783
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).";
|
|
5784
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"`;
|
|
5785
|
-
function isSuppressed5(suppressions, line) {
|
|
5786
|
-
return (suppressions ?? []).some((s) => s.line === line && (!s.ruleIds || s.ruleIds.includes(ID3)));
|
|
5787
|
-
}
|
|
5788
4711
|
function emitFile3(out, file, issues, suppressions) {
|
|
5789
|
-
const bad = issues.filter((b) => !(b.line > 0 &&
|
|
4712
|
+
const bad = issues.filter((b) => !(b.line > 0 && isSuppressed(suppressions, ID3, b.line)));
|
|
5790
4713
|
if (bad.length === 0) {
|
|
5791
4714
|
out.push({
|
|
5792
4715
|
id: ID3,
|
|
5793
4716
|
category: "correctness",
|
|
5794
4717
|
severity: "critical",
|
|
5795
|
-
detection:
|
|
4718
|
+
detection: PASS,
|
|
5796
4719
|
route: file,
|
|
5797
4720
|
// Uniform PASS-result attribution (design 2026-08-08-pass-result-location-design.md):
|
|
5798
4721
|
// same location a penalized result for this file would carry.
|
|
@@ -5808,7 +4731,7 @@ function emitFile3(out, file, issues, suppressions) {
|
|
|
5808
4731
|
id: ID3,
|
|
5809
4732
|
category: "correctness",
|
|
5810
4733
|
severity: "critical",
|
|
5811
|
-
detection:
|
|
4734
|
+
detection: PENALIZED,
|
|
5812
4735
|
route: file,
|
|
5813
4736
|
location: file,
|
|
5814
4737
|
...b.line > 0 ? { line: b.line } : {},
|
|
@@ -6066,7 +4989,7 @@ var architecturePrivateScopeImport = {
|
|
|
6066
4989
|
}
|
|
6067
4990
|
if (!sawScopedImport) continue;
|
|
6068
4991
|
const visible = violations.filter(
|
|
6069
|
-
(v) => !(v.line > 0 &&
|
|
4992
|
+
(v) => !(v.line > 0 && isSuppressed(c.suppressions, "architecture/private-scope-import", v.line))
|
|
6070
4993
|
);
|
|
6071
4994
|
if (visible.length === 0) {
|
|
6072
4995
|
out.push({
|
|
@@ -7036,7 +5959,7 @@ var performanceNamespaceImport = componentRule({
|
|
|
7036
5959
|
});
|
|
7037
5960
|
|
|
7038
5961
|
// src/rules/perf/minify-disabled.ts
|
|
7039
|
-
var
|
|
5962
|
+
var PENALIZED2 = { presence: "none", value: "absent" };
|
|
7040
5963
|
var MINIFY_DISABLED_FIX = {
|
|
7041
5964
|
description: "Remove the minify: false override from vite.config (Vite minifies by default), or scope it to non-production builds.",
|
|
7042
5965
|
snippet: "export default defineConfig({\n build: {\n // minify: false \u2014 removed; Vite minifies production builds by default\n }\n});",
|
|
@@ -7060,7 +5983,7 @@ var performanceMinifyDisabled = {
|
|
|
7060
5983
|
id: "performance/minify-disabled",
|
|
7061
5984
|
category: "performance",
|
|
7062
5985
|
severity: "warning",
|
|
7063
|
-
detection:
|
|
5986
|
+
detection: PENALIZED2,
|
|
7064
5987
|
...hit.file !== void 0 ? { location: hit.file } : {},
|
|
7065
5988
|
...hit.line !== void 0 ? { line: hit.line } : {},
|
|
7066
5989
|
message: "JS/CSS minification is disabled (build.minify: false) \u2014 production bundles ship unminified and several times larger." + provenance,
|
|
@@ -7397,6 +6320,20 @@ function scoreColor(p, score) {
|
|
|
7397
6320
|
return p.red;
|
|
7398
6321
|
}
|
|
7399
6322
|
|
|
6323
|
+
// src/reporter/sanitize.ts
|
|
6324
|
+
function inlineCode(text) {
|
|
6325
|
+
const longestRun = Math.max(0, ...(text.match(/`+/g) ?? []).map((run) => run.length));
|
|
6326
|
+
const fence = "`".repeat(longestRun + 1);
|
|
6327
|
+
const pad = text.startsWith("`") || text.endsWith("`") ? " " : "";
|
|
6328
|
+
return `${fence}${pad}${text}${pad}${fence}`;
|
|
6329
|
+
}
|
|
6330
|
+
function mdEscape(text) {
|
|
6331
|
+
return text.replace(/\r\n|\r|\n/g, " ").replace(/<[^>]+>/g, (tag) => inlineCode(tag)).replace(/\[([^\]]*)\]\(([^)]*)\)/g, "[$1]\\($2\\)");
|
|
6332
|
+
}
|
|
6333
|
+
function terminalSafe(text) {
|
|
6334
|
+
return text.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)?/g, "").replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "").replace(/[\x00-\x08\x0b-\x1f\x7f]/g, "");
|
|
6335
|
+
}
|
|
6336
|
+
|
|
7400
6337
|
// src/reporter/console.ts
|
|
7401
6338
|
var RULE = "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500";
|
|
7402
6339
|
var SEVERITY_TITLE = {
|
|
@@ -7404,14 +6341,7 @@ var SEVERITY_TITLE = {
|
|
|
7404
6341
|
warning: "Warnings",
|
|
7405
6342
|
info: "Info"
|
|
7406
6343
|
};
|
|
7407
|
-
var
|
|
7408
|
-
seo: "SEO",
|
|
7409
|
-
performance: "Performance",
|
|
7410
|
-
correctness: "Correctness",
|
|
7411
|
-
security: "Security",
|
|
7412
|
-
architecture: "Architecture"
|
|
7413
|
-
};
|
|
7414
|
-
var CATEGORY_ORDER = ["seo", "performance", "correctness", "security", "architecture"];
|
|
6344
|
+
var categoryLabel = (c) => c === "seo" ? "SEO" : c.charAt(0).toUpperCase() + c.slice(1);
|
|
7415
6345
|
var MAX_RULE_GROUPS_PER_BUCKET = 5;
|
|
7416
6346
|
function groupByRule(results) {
|
|
7417
6347
|
const groups = /* @__PURE__ */ new Map();
|
|
@@ -7445,9 +6375,9 @@ function byRouteTree(p, results, config, verbose) {
|
|
|
7445
6375
|
const shown = verbose ? scored : scored.slice(0, MAX_ROUTES_BY_ROUTE);
|
|
7446
6376
|
const lines = [p.bold("By route"), p.dim(RULE)];
|
|
7447
6377
|
for (const { route, rs, score } of shown) {
|
|
7448
|
-
lines.push(`${route.padEnd(28)} ${scoreColor(p, score)(`${score}`)}`);
|
|
6378
|
+
lines.push(`${terminalSafe(route).padEnd(28)} ${scoreColor(p, score)(`${score}`)}`);
|
|
7449
6379
|
for (const r of rs.filter((x) => classify(x, config) === "fail")) {
|
|
7450
|
-
lines.push(` ${p.red("\u2717")} ${r.id} ${r.message}`);
|
|
6380
|
+
lines.push(` ${p.red("\u2717")} ${r.id} ${terminalSafe(r.message)}`);
|
|
7451
6381
|
}
|
|
7452
6382
|
}
|
|
7453
6383
|
if (!verbose && scored.length > MAX_ROUTES_BY_ROUTE) {
|
|
@@ -7466,7 +6396,7 @@ function formatConsoleReport(results, config, options = {}) {
|
|
|
7466
6396
|
const p = options.palette ?? noColorPalette;
|
|
7467
6397
|
const summary = summarize(results, config);
|
|
7468
6398
|
const { health, categories: byCat } = computeHealth(results, config);
|
|
7469
|
-
const present3 =
|
|
6399
|
+
const present3 = CATEGORIES.filter((c) => byCat[c] !== void 0);
|
|
7470
6400
|
const lines = [];
|
|
7471
6401
|
if (!options.omitHeader) {
|
|
7472
6402
|
lines.push(
|
|
@@ -7476,7 +6406,7 @@ function formatConsoleReport(results, config, options = {}) {
|
|
|
7476
6406
|
);
|
|
7477
6407
|
}
|
|
7478
6408
|
for (const c of present3) {
|
|
7479
|
-
lines.push(scoreLine(p,
|
|
6409
|
+
lines.push(scoreLine(p, categoryLabel(c), byCat[c]));
|
|
7480
6410
|
}
|
|
7481
6411
|
lines.push("");
|
|
7482
6412
|
const SEVERITY_COLOR = {
|
|
@@ -7491,18 +6421,18 @@ function formatConsoleReport(results, config, options = {}) {
|
|
|
7491
6421
|
lines.push(SEVERITY_COLOR[severity](`${SEVERITY_TITLE[severity]} (${bucket.length})`), p.dim(RULE));
|
|
7492
6422
|
if (options.verbose) {
|
|
7493
6423
|
for (const r of bucket) {
|
|
7494
|
-
lines.push(`${p.red("\u2717")} ${r.id} ${r.message}`);
|
|
7495
|
-
if (r.route) lines.push(p.dim(` ${r.route}`));
|
|
7496
|
-
if (r.location) lines.push(p.dim(` ${r.location}${r.line ? `:${r.line}` : ""}`));
|
|
6424
|
+
lines.push(`${p.red("\u2717")} ${r.id} ${terminalSafe(r.message)}`);
|
|
6425
|
+
if (r.route) lines.push(p.dim(` ${terminalSafe(r.route)}`));
|
|
6426
|
+
if (r.location) lines.push(p.dim(` ${terminalSafe(r.location)}${r.line ? `:${r.line}` : ""}`));
|
|
7497
6427
|
}
|
|
7498
6428
|
} else {
|
|
7499
6429
|
const groups = groupByRule(bucket);
|
|
7500
6430
|
const shownGroups = groups.slice(0, MAX_RULE_GROUPS_PER_BUCKET);
|
|
7501
6431
|
for (const group of shownGroups) {
|
|
7502
6432
|
const r = group.results[0];
|
|
7503
|
-
lines.push(`${p.red("\u2717")} ${r.id} ${r.message}`);
|
|
7504
|
-
if (r.route) lines.push(p.dim(` ${r.route}`));
|
|
7505
|
-
if (r.location) lines.push(p.dim(` ${r.location}${r.line ? `:${r.line}` : ""}`));
|
|
6433
|
+
lines.push(`${p.red("\u2717")} ${r.id} ${terminalSafe(r.message)}`);
|
|
6434
|
+
if (r.route) lines.push(p.dim(` ${terminalSafe(r.route)}`));
|
|
6435
|
+
if (r.location) lines.push(p.dim(` ${terminalSafe(r.location)}${r.line ? `:${r.line}` : ""}`));
|
|
7506
6436
|
if (group.results.length > 1) {
|
|
7507
6437
|
lines.push(p.dim(` \u2026and ${group.results.length - 1} more`));
|
|
7508
6438
|
}
|
|
@@ -7523,8 +6453,8 @@ function formatConsoleReport(results, config, options = {}) {
|
|
|
7523
6453
|
for (const r of passed) {
|
|
7524
6454
|
const marker = classify(r, config) === "dynamic" ? p.cyan(" \u21AF dynamic") : "";
|
|
7525
6455
|
const where = r.location ?? r.route;
|
|
7526
|
-
const suffix = where ? ` ${where}` : "";
|
|
7527
|
-
lines.push(`${p.green("\u2713")} ${r.id} ${r.message}${marker}${suffix}`);
|
|
6456
|
+
const suffix = where ? ` ${terminalSafe(where)}` : "";
|
|
6457
|
+
lines.push(`${p.green("\u2713")} ${r.id} ${terminalSafe(r.message)}${marker}${suffix}`);
|
|
7528
6458
|
}
|
|
7529
6459
|
}
|
|
7530
6460
|
lines.push("");
|
|
@@ -7605,11 +6535,25 @@ function formatJsonReport(results, config, meta, ruleIds, examined) {
|
|
|
7605
6535
|
return JSON.stringify(buildJsonReport(results, config, meta, ruleIds, examined), null, 2);
|
|
7606
6536
|
}
|
|
7607
6537
|
|
|
7608
|
-
// src/reporter/
|
|
6538
|
+
// src/reporter/shared.ts
|
|
7609
6539
|
var SEVERITY_RANK = { critical: 0, warning: 1, info: 2 };
|
|
7610
|
-
function
|
|
7611
|
-
return
|
|
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);
|
|
7612
6554
|
}
|
|
6555
|
+
|
|
6556
|
+
// src/reporter/agent.ts
|
|
7613
6557
|
function formatAgentReport(results, config) {
|
|
7614
6558
|
const failing = results.filter((r) => classify(r, config) === "fail");
|
|
7615
6559
|
const { health } = computeHealth(results, config);
|
|
@@ -7636,39 +6580,22 @@ function formatAgentReport(results, config) {
|
|
|
7636
6580
|
rs.sort(
|
|
7637
6581
|
(x, y) => SEVERITY_RANK[effectiveSeverity(x, config)] - SEVERITY_RANK[effectiveSeverity(y, config)] || x.id.localeCompare(y.id)
|
|
7638
6582
|
);
|
|
7639
|
-
lines.push(`## ${loc}`, "");
|
|
6583
|
+
lines.push(`## ${mdEscape(loc)}`, "");
|
|
7640
6584
|
for (const r of rs) {
|
|
7641
|
-
lines.push(`### ${r.id} \xB7 ${
|
|
6585
|
+
lines.push(`### ${r.id} \xB7 ${mdEscape(r.message)} (${effectiveSeverity(r, config)})`);
|
|
7642
6586
|
if (r.fix) {
|
|
7643
|
-
lines.push(`- Fix: ${
|
|
6587
|
+
lines.push(`- Fix: ${mdEscape(r.fix.description)}`);
|
|
7644
6588
|
if (r.fix.snippet) lines.push("", "```" + (r.fix.lang ?? "svelte"), r.fix.snippet, "```");
|
|
7645
6589
|
} else if (r.recommendation) {
|
|
7646
|
-
lines.push(`- Fix: ${
|
|
6590
|
+
lines.push(`- Fix: ${mdEscape(r.recommendation)}`);
|
|
7647
6591
|
}
|
|
7648
6592
|
if (r.docsUrl) lines.push(`- Docs: ${r.docsUrl}`);
|
|
7649
|
-
lines.push(`- Accept: re-run svelte-vitals; ${r.id} passes${r.route ? ` for ${r.route}` : ""}.`, "");
|
|
6593
|
+
lines.push(`- Accept: re-run svelte-vitals; ${r.id} passes${r.route ? ` for ${mdEscape(r.route)}` : ""}.`, "");
|
|
7650
6594
|
}
|
|
7651
6595
|
}
|
|
7652
6596
|
return lines.join("\n").replace(/\n+$/, "\n");
|
|
7653
6597
|
}
|
|
7654
6598
|
|
|
7655
|
-
// src/reporter/shared.ts
|
|
7656
|
-
function severityToSarifLevel(sev) {
|
|
7657
|
-
return sev === "critical" ? "error" : sev === "warning" ? "warning" : "note";
|
|
7658
|
-
}
|
|
7659
|
-
function severityToGithubLevel(sev) {
|
|
7660
|
-
return sev === "critical" ? "error" : sev === "warning" ? "warning" : "notice";
|
|
7661
|
-
}
|
|
7662
|
-
function messageText(result) {
|
|
7663
|
-
return result.recommendation ? `${result.message} ${result.recommendation}` : result.message;
|
|
7664
|
-
}
|
|
7665
|
-
var RULE_META = new Map(
|
|
7666
|
-
allRules.map((r) => [r.id, { title: r.title, severity: r.severity, docsUrl: docsUrlFor(r.id) }])
|
|
7667
|
-
);
|
|
7668
|
-
function ruleMetaById(id) {
|
|
7669
|
-
return RULE_META.get(id);
|
|
7670
|
-
}
|
|
7671
|
-
|
|
7672
6599
|
// src/reporter/sarif.ts
|
|
7673
6600
|
function formatSarifReport(results, config, meta) {
|
|
7674
6601
|
const penalized = results.filter((r) => isPenalized(r.detection, config.treatDynamicAs));
|
|
@@ -7755,9 +6682,8 @@ function formatGithubReport(results, config) {
|
|
|
7755
6682
|
// src/reporter/markdown.ts
|
|
7756
6683
|
var MAX_FINDINGS = 50;
|
|
7757
6684
|
var SEVERITY_EMOJI = { critical: "\u{1F534}", warning: "\u{1F7E1}", info: "\u{1F535}" };
|
|
7758
|
-
var SEVERITY_RANK2 = { critical: 0, warning: 1, info: 2 };
|
|
7759
6685
|
function escapeCell(s) {
|
|
7760
|
-
return s.replace(
|
|
6686
|
+
return mdEscape(s).replace(/(\\*)\|/g, (_, bs) => bs + bs + "\\|");
|
|
7761
6687
|
}
|
|
7762
6688
|
function locationOf(issue, route) {
|
|
7763
6689
|
if (issue.location) return issue.line !== void 0 ? `${issue.location}:${issue.line}` : issue.location;
|
|
@@ -7786,7 +6712,7 @@ function flattenFindings(report) {
|
|
|
7786
6712
|
message: messageWithRecommendation(issue)
|
|
7787
6713
|
});
|
|
7788
6714
|
}
|
|
7789
|
-
return findings.map((f, index) => ({ f, index })).sort((a, b) =>
|
|
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);
|
|
7790
6716
|
}
|
|
7791
6717
|
function categoryRows(categories) {
|
|
7792
6718
|
const names = Object.keys(categories).sort();
|
|
@@ -7836,6 +6762,24 @@ function formatMarkdownReport(results, config, meta) {
|
|
|
7836
6762
|
}
|
|
7837
6763
|
|
|
7838
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 === "&" ? "&" : c === "<" ? "<" : c === ">" ? ">" : c === '"' ? """ : "'"
|
|
6777
|
+
);
|
|
6778
|
+
}
|
|
6779
|
+
function safeHref(url) {
|
|
6780
|
+
const normalized = url.replace(/\s/g, "").toLowerCase();
|
|
6781
|
+
return /^https?:\/\//.test(normalized) ? url : null;
|
|
6782
|
+
}
|
|
7839
6783
|
function embedJson(value) {
|
|
7840
6784
|
return JSON.stringify(value).replace(/</g, "\\u003c").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
7841
6785
|
}
|
|
@@ -8508,26 +7452,6 @@ function buildHtmlDocument(report, meta) {
|
|
|
8508
7452
|
function formatHtmlReport(results, config, meta) {
|
|
8509
7453
|
return buildHtmlDocument(buildJsonReport(results, config, meta), meta);
|
|
8510
7454
|
}
|
|
8511
|
-
|
|
8512
|
-
// src/reporter/html.ts
|
|
8513
|
-
var BAND_COLOR = {
|
|
8514
|
-
good: "#2FA968",
|
|
8515
|
-
warn: "#E8A317",
|
|
8516
|
-
poor: "#E5484D"
|
|
8517
|
-
};
|
|
8518
|
-
function scoreBand(score) {
|
|
8519
|
-
return score >= 90 ? "good" : score >= 50 ? "warn" : "poor";
|
|
8520
|
-
}
|
|
8521
|
-
function escapeHtml(s) {
|
|
8522
|
-
return s.replace(
|
|
8523
|
-
/[&<>"']/g,
|
|
8524
|
-
(c) => c === "&" ? "&" : c === "<" ? "<" : c === ">" ? ">" : c === '"' ? """ : "'"
|
|
8525
|
-
);
|
|
8526
|
-
}
|
|
8527
|
-
function safeHref(url) {
|
|
8528
|
-
const normalized = url.replace(/\s/g, "").toLowerCase();
|
|
8529
|
-
return /^https?:\/\//.test(normalized) ? url : null;
|
|
8530
|
-
}
|
|
8531
7455
|
export {
|
|
8532
7456
|
APP_SCRIPT,
|
|
8533
7457
|
APP_STYLE,
|
|
@@ -8593,6 +7517,7 @@ export {
|
|
|
8593
7517
|
findMinifyDisabled,
|
|
8594
7518
|
formatAgentReport,
|
|
8595
7519
|
formatConsoleReport,
|
|
7520
|
+
formatFailedRuleWarning,
|
|
8596
7521
|
formatGithubReport,
|
|
8597
7522
|
formatHtmlReport,
|
|
8598
7523
|
formatJsonReport,
|
|
@@ -8629,6 +7554,7 @@ export {
|
|
|
8629
7554
|
renderAppShell,
|
|
8630
7555
|
resolveKitAliases,
|
|
8631
7556
|
resolveKitPathsBase,
|
|
7557
|
+
resolveRepoLocalPath,
|
|
8632
7558
|
resolveRuleOptions,
|
|
8633
7559
|
resolveRunesModuleSpecifier,
|
|
8634
7560
|
runRules,
|
|
@@ -8677,8 +7603,10 @@ export {
|
|
|
8677
7603
|
settingSeverity,
|
|
8678
7604
|
shouldSkipRangeCheck,
|
|
8679
7605
|
summarize,
|
|
7606
|
+
terminalSafe,
|
|
8680
7607
|
textFromNodes,
|
|
8681
7608
|
validateRuleOptions,
|
|
8682
7609
|
validateRuleSetting,
|
|
8683
|
-
valueFromNodes
|
|
7610
|
+
valueFromNodes,
|
|
7611
|
+
withFailedRulesOff
|
|
8684
7612
|
};
|