(subquery: string)
| 147 | } |
| 148 | |
| 149 | export function getMultichainManifestPath(subquery: string): string | undefined { |
| 150 | const stats = fs.statSync(subquery); |
| 151 | let multichainManifestPath: string | undefined; |
| 152 | let projectRoot: string | undefined; |
| 153 | |
| 154 | if (stats.isDirectory()) { |
| 155 | projectRoot = subquery; |
| 156 | const multichainManifestCandidate = path.resolve(subquery, DEFAULT_MULTICHAIN_MANIFEST); |
| 157 | if (fs.existsSync(multichainManifestCandidate)) { |
| 158 | multichainManifestPath = multichainManifestCandidate; |
| 159 | } |
| 160 | } else if (stats.isFile()) { |
| 161 | const {dir, ext} = path.parse(subquery); |
| 162 | projectRoot = dir; |
| 163 | if (extensionIsYamlOrJSON(ext)) { |
| 164 | const multichainManifestContent = yaml.load(fs.readFileSync(subquery, 'utf8')) as MultichainProjectManifest; |
| 165 | if (multichainManifestContent.projects && Array.isArray(multichainManifestContent.projects)) { |
| 166 | multichainManifestPath = path.resolve(dir, subquery); |
| 167 | } |
| 168 | } |
| 169 | } |
| 170 | |
| 171 | if (multichainManifestPath && projectRoot) { |
| 172 | return path.relative(projectRoot, multichainManifestPath); |
| 173 | } |
| 174 | |
| 175 | return undefined; |
| 176 | } |
| 177 | |
| 178 | export function validateSemver(current: string, required: string): boolean { |
| 179 | return satisfies(current, required, {includePrerelease: true}); |
no test coverage detected