@xapp/arachne-web-service 1.31.0 → 1.33.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.
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ServiceTaxonomy = exports.SERVICE_TAXONOMY_V1 = void 0;
7
+ /*! Copyright (c) 2026, XAPP AI */
8
+ const v1_json_1 = __importDefault(require("./v1.json"));
9
+ /**
10
+ * Service Taxonomy v1, the vocabulary shared by website extraction and homeowner lead labeling.
11
+ */
12
+ exports.SERVICE_TAXONOMY_V1 = v1_json_1.default;
13
+ /**
14
+ * Lookups over a taxonomy: canonical slugs, aliases and the family a job is scored in.
15
+ */
16
+ class ServiceTaxonomy {
17
+ constructor(taxonomy = exports.SERVICE_TAXONOMY_V1) {
18
+ var _a, _b;
19
+ this.taxonomy = taxonomy;
20
+ this.version = taxonomy.version;
21
+ this.jobs = [];
22
+ this.families = new Set();
23
+ this.trades = new Set();
24
+ for (const trade of taxonomy.trades) {
25
+ this.trades.add(trade.slug);
26
+ for (const job of (_a = trade.jobs) !== null && _a !== void 0 ? _a : []) {
27
+ this.jobs.push(Object.assign(Object.assign({}, job), { trade: trade.slug }));
28
+ }
29
+ for (const family of (_b = trade.families) !== null && _b !== void 0 ? _b : []) {
30
+ this.families.add(family.slug);
31
+ for (const job of family.jobs) {
32
+ this.jobs.push(Object.assign(Object.assign({}, job), { trade: trade.slug, family: family.slug }));
33
+ }
34
+ }
35
+ }
36
+ this.bySlug = new Map(this.jobs.map((job) => [job.slug, job]));
37
+ }
38
+ job(slug) {
39
+ return this.bySlug.get(slug);
40
+ }
41
+ isFamily(slug) {
42
+ return this.families.has(slug);
43
+ }
44
+ isTrade(slug) {
45
+ return this.trades.has(slug);
46
+ }
47
+ /**
48
+ * Jobs a business website can be tagged with: not homeowner-only, not deprecated.
49
+ *
50
+ * @param trades Limit to these trades
51
+ */
52
+ extractableJobs(trades) {
53
+ return this.jobs.filter((job) => !job.homeowner_only && !job.deprecated_by && (!trades || trades.includes(job.trade)));
54
+ }
55
+ /**
56
+ * Maps a slug, alias or deprecated slug to the current canonical slug.
57
+ *
58
+ * @returns The canonical slug, or undefined when the slug is not in the taxonomy
59
+ */
60
+ resolve(slug) {
61
+ var _a;
62
+ let candidate = slug === null || slug === void 0 ? void 0 : slug.trim().toLowerCase();
63
+ if (!candidate) {
64
+ return undefined;
65
+ }
66
+ candidate = (_a = this.taxonomy.aliases[candidate]) !== null && _a !== void 0 ? _a : candidate;
67
+ if (!this.bySlug.has(candidate)) {
68
+ const prefix = Object.keys(this.taxonomy.alias_prefixes).find((p) => candidate.startsWith(p));
69
+ if (prefix) {
70
+ candidate = this.taxonomy.alias_prefixes[prefix] + candidate.slice(prefix.length);
71
+ }
72
+ }
73
+ // Follow deprecations, guarding against a cycle
74
+ const seen = new Set();
75
+ let job = this.bySlug.get(candidate);
76
+ while ((job === null || job === void 0 ? void 0 : job.deprecated_by) && !seen.has(job.slug)) {
77
+ seen.add(job.slug);
78
+ job = this.bySlug.get(job.deprecated_by);
79
+ }
80
+ return job === null || job === void 0 ? void 0 : job.slug;
81
+ }
82
+ /**
83
+ * The family a job is scored in, or its trade when the trade has no families.
84
+ *
85
+ * @returns The family or trade slug, or undefined when the slug is not in the taxonomy
86
+ */
87
+ familyOf(slug) {
88
+ var _a;
89
+ const canonical = this.resolve(slug);
90
+ const job = canonical ? this.bySlug.get(canonical) : undefined;
91
+ return job ? (_a = job.family) !== null && _a !== void 0 ? _a : job.trade : undefined;
92
+ }
93
+ }
94
+ exports.ServiceTaxonomy = ServiceTaxonomy;
95
+ //# sourceMappingURL=ServiceTaxonomy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceTaxonomy.js","sourceRoot":"","sources":["../../src/taxonomy/ServiceTaxonomy.ts"],"names":[],"mappings":"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"}