UNPKG

zephyr-agent

Version:
141 lines (140 loc) • 6.55 kB
"use strict"; 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