bf9395e022
CI / results (push) Blocked by required conditions
CI / license-header (push) Has been skipped
CI / e2e-dry-run (push) Has been skipped
CI / e2e-live (push) Waiting to run
CI / fast-gate (push) Failing after 0s
Test PR Label Logic / test-pr-labels (push) Failing after 1s
Skill Format Check / check-format (push) Failing after 2s
CI / security (push) Failing after 5s
CI / unit-test (push) Has been skipped
CI / lint (push) Has been skipped
CI / script-test (push) Has been skipped
CI / deterministic-gate (push) Has been skipped
CI / coverage (push) Has been skipped
CI / deadcode (push) Waiting to run
55 lines
1.8 KiB
JavaScript
55 lines
1.8 KiB
JavaScript
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
const fs = require("node:fs");
|
|
const path = require("node:path");
|
|
|
|
const DOMAIN_MAP_PATH = path.join(__dirname, "domain-map.json");
|
|
const domainMap = JSON.parse(fs.readFileSync(DOMAIN_MAP_PATH, "utf8"));
|
|
|
|
function normalizeRepoPath(input) {
|
|
return String(input || "").trim().replace(/\\/g, "/").replace(/^\.\//, "").toLowerCase();
|
|
}
|
|
|
|
const pathMappingsBySpecificity = (domainMap.pathMappings || [])
|
|
.map((entry) => ({ ...entry, prefix: normalizeRepoPath(entry.prefix) }))
|
|
.sort((a, b) => b.prefix.length - a.prefix.length);
|
|
|
|
function findPathMapping(filePath) {
|
|
const normalized = normalizeRepoPath(filePath);
|
|
return pathMappingsBySpecificity.find((entry) => normalized.startsWith(entry.prefix));
|
|
}
|
|
|
|
function labelDomainsForPath(filePath) {
|
|
const mapping = findPathMapping(filePath);
|
|
return mapping ? [...(mapping.labelDomains || [])] : [];
|
|
}
|
|
|
|
function e2eDomainsForPath(filePath) {
|
|
const mapping = findPathMapping(filePath);
|
|
return mapping ? [...(mapping.e2eDomains || [])] : [];
|
|
}
|
|
|
|
function matchesFullFallback(filePath) {
|
|
const normalized = normalizeRepoPath(filePath);
|
|
return (domainMap.fullFallbackPrefixes || []).some((prefix) => normalized.startsWith(prefix));
|
|
}
|
|
|
|
function isSkippablePath(filePath) {
|
|
const normalized = normalizeRepoPath(filePath);
|
|
const basename = path.posix.basename(normalized);
|
|
return (domainMap.skipPrefixes || []).some((prefix) => normalized.startsWith(prefix))
|
|
|| (domainMap.skipSuffixes || []).some((suffix) => normalized.endsWith(suffix))
|
|
|| (domainMap.skipFilenames || []).includes(basename);
|
|
}
|
|
|
|
module.exports = {
|
|
domainMap,
|
|
e2eDomainsForPath,
|
|
findPathMapping,
|
|
isSkippablePath,
|
|
labelDomainsForPath,
|
|
matchesFullFallback,
|
|
normalizeRepoPath,
|
|
};
|