UNPKG

@supernovaio/cli

Version:

Supernova.io Command Line Interface

155 lines (153 loc) 5.71 kB
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fda3d0c0-2968-5f78-9371-84666aec9096")}catch(e){}}(); import fs from "node:fs"; import path from "node:path"; import { globSync } from "glob"; import { sourceIndexEntryFileNames } from "./module-resolution.js"; function stripInlineYamlComment(line) { let quote = null; for (let index = 0; index < line.length; index += 1) { const char = line[index]; const previous = index > 0 ? line[index - 1] : ""; if ((char === "'" || char === '"') && previous !== "\\") { quote = quote === char ? null : (quote ?? char); continue; } if (char === "#" && !quote && (index === 0 || /\s/.test(previous))) { return line.slice(0, index); } } return line; } function unquoteYamlScalar(value) { const trimmed = value.trim(); const quote = trimmed[0]; if ((quote === "'" || quote === '"') && trimmed.endsWith(quote)) { return trimmed.slice(1, -1); } return trimmed; } function splitInlineYamlArray(value) { const trimmed = value.trim(); if (!trimmed.startsWith("[") || !trimmed.endsWith("]")) { return []; } const items = []; let current = ""; let quote = null; for (const char of trimmed.slice(1, -1)) { if (char === "'" || char === '"') { quote = quote === char ? null : (quote ?? char); current += char; continue; } if (char === "," && !quote) { items.push(current); current = ""; continue; } current += char; } items.push(current); return items.map(item => unquoteYamlScalar(item)).filter(Boolean); } function parsePnpmWorkspacePackagePatterns(contents) { const patterns = []; let packagesIndent = null; for (const rawLine of contents.split(/\r?\n/)) { const line = stripInlineYamlComment(rawLine); const trimmed = line.trim(); if (!trimmed) { continue; } const indent = line.length - line.trimStart().length; if (packagesIndent === null) { const match = trimmed.match(/^packages\s*:\s*(.*)$/); if (!match) { continue; } const inlineValue = match[1].trim(); if (inlineValue) { patterns.push(...splitInlineYamlArray(inlineValue)); continue; } packagesIndent = indent; continue; } if (indent <= packagesIndent && !trimmed.startsWith("-")) { packagesIndent = null; continue; } if (!trimmed.startsWith("-")) { continue; } const value = unquoteYamlScalar(trimmed.slice(1).trim()); if (value) { patterns.push(value); } } return patterns; } function getPackageJsonWorkspacePatterns(packageJson) { const raw = packageJson.workspaces; if (!raw) { return []; } return Array.isArray(raw) ? raw : (raw.packages ?? []); } export function readWorkspacePatterns(rootDir) { const patterns = []; const rootPackageJsonPath = path.join(rootDir, "package.json"); if (fs.existsSync(rootPackageJsonPath)) { try { const rootPackageJson = JSON.parse(fs.readFileSync(rootPackageJsonPath, "utf8")); patterns.push(...getPackageJsonWorkspacePatterns(rootPackageJson)); } catch { } } const pnpmWorkspacePath = path.join(rootDir, "pnpm-workspace.yaml"); if (fs.existsSync(pnpmWorkspacePath)) { patterns.push(...parsePnpmWorkspacePackagePatterns(fs.readFileSync(pnpmWorkspacePath, "utf8"))); } const lernaJsonPath = path.join(rootDir, "lerna.json"); if (fs.existsSync(lernaJsonPath)) { try { const lernaJson = JSON.parse(fs.readFileSync(lernaJsonPath, "utf8")); patterns.push(...(lernaJson.packages ?? ["packages/*"])); } catch { } } return [...new Set(patterns.map(pattern => pattern.trim()).filter(Boolean))]; } function normalizeWorkspacePattern(pattern) { return pattern.replaceAll("\\", "/").replace(/^!/, "").replace(/\/$/, ""); } function workspacePatternToPackageJsonGlob(pattern) { return `${normalizeWorkspacePattern(pattern)}/package.json`; } export function hasSourceEntry(packageDir) { return sourceIndexEntryFileNames.some(entryFileName => fs.existsSync(path.join(packageDir, "src", entryFileName))); } export function resolveWorkspacePackageDirs(rootDir) { const packageDirs = []; const workspacePatterns = readWorkspacePatterns(rootDir); const ignoredPackageJsonFiles = workspacePatterns .filter(pattern => pattern.startsWith("!")) .map(pattern => workspacePatternToPackageJsonGlob(pattern)); for (const pattern of workspacePatterns) { if (pattern.startsWith("!")) { continue; } const packageJsonFiles = globSync(workspacePatternToPackageJsonGlob(pattern), { absolute: true, cwd: rootDir, ignore: ["**/node_modules/**", ...ignoredPackageJsonFiles], nodir: true, }); packageDirs.push(...packageJsonFiles.map(packageJsonPath => path.dirname(packageJsonPath))); } return [...new Set(packageDirs)].sort((a, b) => a.localeCompare(b)); } //# sourceMappingURL=workspace-packages.js.map //# debugId=fda3d0c0-2968-5f78-9371-84666aec9096