zephyr-agent
Version:
Zephyr plugin agent
141 lines (140 loc) • 6.55 kB
JavaScript
;
var __webpack_require__ = {};
(()=>{
__webpack_require__.d = (exports1, getters, values)=>{
var define = (defs, kind)=>{
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
enumerable: true,
[kind]: defs[key]
});
};
define(getters, "get");
define(values, "value");
};
})();
(()=>{
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
})();
(()=>{
__webpack_require__.r = (exports1)=>{
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
value: 'Module'
});
Object.defineProperty(exports1, '__esModule', {
value: true
});
};
})();
var __webpack_exports__ = {};
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, {
maybeShowOutdatedPluginWarning: ()=>maybeShowOutdatedPluginWarning,
resetOutdatedPluginWarningStateForTests: ()=>resetOutdatedPluginWarningStateForTests
});
const external_node_fs_namespaceObject = require("node:fs");
const external_node_module_namespaceObject = require("node:module");
const external_zephyr_edge_contract_namespaceObject = require("zephyr-edge-contract");
const fetch_with_retries_js_namespaceObject = require("../http/fetch-with-retries.js");
const debug_js_namespaceObject = require("../logging/debug.js");
const external_zephyr_agent_version_js_namespaceObject = require("./zephyr-agent-version.js");
const warnedVersionPairs = new Set();
const NPM_FETCH_TIMEOUT_MS = 1500;
const requireFromHere = (0, external_node_module_namespaceObject.createRequire)(__filename);
function parseVersion(version) {
const sanitized = version.trim().replace(/^v/i, '');
const match = /^(\d+)\.(\d+)\.(\d+)(?:-(canary|next)\.(\d+))?$/.exec(sanitized);
if (!match) return null;
return {
major: Number(match[1]),
minor: Number(match[2]),
patch: Number(match[3]),
channel: match[4] ?? 'stable',
prereleaseNumber: match[5] ? Number(match[5]) : null
};
}
function isOlderVersion(currentVersion, latestVersion) {
const current = parseVersion(currentVersion);
const latest = parseVersion(latestVersion);
if (!current || !latest) return false;
if (current.major !== latest.major) return current.major < latest.major;
if (current.minor !== latest.minor) return current.minor < latest.minor;
if (current.patch !== latest.patch) return current.patch < latest.patch;
if (current.channel !== latest.channel) return false;
if ('stable' === current.channel) return false;
if (null === current.prereleaseNumber || null === latest.prereleaseNumber) return false;
return current.prereleaseNumber < latest.prereleaseNumber;
}
function getComparisonTarget(currentVersion, distTags) {
const parsedCurrentVersion = parseVersion(currentVersion);
if (!parsedCurrentVersion) return null;
if ('canary' === parsedCurrentVersion.channel) return 'string' == typeof distTags.canary ? {
label: 'latest canary',
version: distTags.canary
} : null;
if ('next' === parsedCurrentVersion.channel) return 'string' == typeof distTags.next ? {
label: 'latest next',
version: distTags.next
} : null;
return 'string' == typeof distTags.latest ? {
label: 'latest',
version: distTags.latest
} : null;
}
async function fetchDistTags(packageName) {
const npmDistTagsUrl = new URL(`https://registry.npmjs.org/-/package/${encodeURIComponent(packageName)}/dist-tags`);
const abortController = new AbortController();
const timeoutId = setTimeout(()=>abortController.abort(), NPM_FETCH_TIMEOUT_MS);
try {
const response = await (0, fetch_with_retries_js_namespaceObject.fetchWithRetries)(npmDistTagsUrl, {
signal: abortController.signal
}, 2);
return await response.json();
} catch {
return null;
} finally{
clearTimeout(timeoutId);
}
}
function resolveInstalledPluginVersion(pluginPackageName) {
try {
const packageJsonPath = requireFromHere.resolve(`${pluginPackageName}/package.json`, {
paths: [
process.cwd()
]
});
const packageJsonContent = (0, external_node_fs_namespaceObject.readFileSync)(packageJsonPath, 'utf8');
const parsed = (0, external_zephyr_edge_contract_namespaceObject.safe_json_parse)(packageJsonContent);
if (parsed?.version && 'string' == typeof parsed.version) return parsed.version;
} catch {}
return (0, external_zephyr_agent_version_js_namespaceObject.getZephyrAgentVersion)();
}
async function maybeShowOutdatedPluginWarning(pluginPackageName) {
const currentVersion = resolveInstalledPluginVersion(pluginPackageName);
const distTags = await fetchDistTags(pluginPackageName);
if (!distTags) return;
const comparisonTarget = getComparisonTarget(currentVersion, distTags);
if (!comparisonTarget) return;
if (!isOlderVersion(currentVersion, comparisonTarget.version)) return;
const versionPair = `${pluginPackageName}:${currentVersion}->${comparisonTarget.version}`;
if (warnedVersionPairs.has(versionPair)) return;
warnedVersionPairs.add(versionPair);
const message = [
`${debug_js_namespaceObject.brightYellowBgName} Your Zephyr Plugin version is outdated (current: ${currentVersion}, ${comparisonTarget.label}: ${comparisonTarget.version}).`,
`${debug_js_namespaceObject.brightYellowBgName} Older versions can cause unexpected build and deployment issues.`,
`${debug_js_namespaceObject.brightYellowBgName} If you are facing any issue, upgrade ${pluginPackageName} first.`
].join('\n');
console.error(message);
}
function resetOutdatedPluginWarningStateForTests() {
warnedVersionPairs.clear();
}
exports.maybeShowOutdatedPluginWarning = __webpack_exports__.maybeShowOutdatedPluginWarning;
exports.resetOutdatedPluginWarningStateForTests = __webpack_exports__.resetOutdatedPluginWarningStateForTests;
for(var __rspack_i in __webpack_exports__)if (-1 === [
"maybeShowOutdatedPluginWarning",
"resetOutdatedPluginWarningStateForTests"
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
Object.defineProperty(exports, '__esModule', {
value: true
});
//# sourceMappingURL=outdated-plugin-warning.js.map