Deployed the page to Github Pages.
This commit is contained in:
		
							parent
							
								
									1d79754e93
								
							
						
					
					
						commit
						2c89899458
					
				
					 62797 changed files with 6551425 additions and 15279 deletions
				
			
		
							
								
								
									
										224
									
								
								node_modules/npm-pick-manifest/lib/index.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										224
									
								
								node_modules/npm-pick-manifest/lib/index.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,224 @@ | |||
| 'use strict' | ||||
| 
 | ||||
| const npa = require('npm-package-arg') | ||||
| const semver = require('semver') | ||||
| const { checkEngine } = require('npm-install-checks') | ||||
| const normalizeBin = require('npm-normalize-package-bin') | ||||
| 
 | ||||
| const engineOk = (manifest, npmVersion, nodeVersion) => { | ||||
|   try { | ||||
|     checkEngine(manifest, npmVersion, nodeVersion) | ||||
|     return true | ||||
|   } catch (_) { | ||||
|     return false | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| const isBefore = (verTimes, ver, time) => | ||||
|   !verTimes || !verTimes[ver] || Date.parse(verTimes[ver]) <= time | ||||
| 
 | ||||
| const avoidSemverOpt = { includePrerelease: true, loose: true } | ||||
| const shouldAvoid = (ver, avoid) => | ||||
|   avoid && semver.satisfies(ver, avoid, avoidSemverOpt) | ||||
| 
 | ||||
| const decorateAvoid = (result, avoid) => | ||||
|   result && shouldAvoid(result.version, avoid) | ||||
|     ? { ...result, _shouldAvoid: true } | ||||
|     : result | ||||
| 
 | ||||
| const pickManifest = (packument, wanted, opts) => { | ||||
|   const { | ||||
|     defaultTag = 'latest', | ||||
|     before = null, | ||||
|     nodeVersion = process.version, | ||||
|     npmVersion = null, | ||||
|     includeStaged = false, | ||||
|     avoid = null, | ||||
|     avoidStrict = false, | ||||
|   } = opts | ||||
| 
 | ||||
|   const { name, time: verTimes } = packument | ||||
|   const versions = packument.versions || {} | ||||
| 
 | ||||
|   if (avoidStrict) { | ||||
|     const looseOpts = { | ||||
|       ...opts, | ||||
|       avoidStrict: false, | ||||
|     } | ||||
| 
 | ||||
|     const result = pickManifest(packument, wanted, looseOpts) | ||||
|     if (!result || !result._shouldAvoid) { | ||||
|       return result | ||||
|     } | ||||
| 
 | ||||
|     const caret = pickManifest(packument, `^${result.version}`, looseOpts) | ||||
|     if (!caret || !caret._shouldAvoid) { | ||||
|       return { | ||||
|         ...caret, | ||||
|         _outsideDependencyRange: true, | ||||
|         _isSemVerMajor: false, | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     const star = pickManifest(packument, '*', looseOpts) | ||||
|     if (!star || !star._shouldAvoid) { | ||||
|       return { | ||||
|         ...star, | ||||
|         _outsideDependencyRange: true, | ||||
|         _isSemVerMajor: true, | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     throw Object.assign(new Error(`No avoidable versions for ${name}`), { | ||||
|       code: 'ETARGET', | ||||
|       name, | ||||
|       wanted, | ||||
|       avoid, | ||||
|       before, | ||||
|       versions: Object.keys(versions), | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   const staged = (includeStaged && packument.stagedVersions && | ||||
|     packument.stagedVersions.versions) || {} | ||||
|   const restricted = (packument.policyRestrictions && | ||||
|     packument.policyRestrictions.versions) || {} | ||||
| 
 | ||||
|   const time = before && verTimes ? +(new Date(before)) : Infinity | ||||
|   const spec = npa.resolve(name, wanted || defaultTag) | ||||
|   const type = spec.type | ||||
|   const distTags = packument['dist-tags'] || {} | ||||
| 
 | ||||
|   if (type !== 'tag' && type !== 'version' && type !== 'range') { | ||||
|     throw new Error('Only tag, version, and range are supported') | ||||
|   } | ||||
| 
 | ||||
|   // if the type is 'tag', and not just the implicit default, then it must
 | ||||
|   // be that exactly, or nothing else will do.
 | ||||
|   if (wanted && type === 'tag') { | ||||
|     const ver = distTags[wanted] | ||||
|     // if the version in the dist-tags is before the before date, then
 | ||||
|     // we use that.  Otherwise, we get the highest precedence version
 | ||||
|     // prior to the dist-tag.
 | ||||
|     if (isBefore(verTimes, ver, time)) { | ||||
|       return decorateAvoid(versions[ver] || staged[ver] || restricted[ver], avoid) | ||||
|     } else { | ||||
|       return pickManifest(packument, `<=${ver}`, opts) | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   // similarly, if a specific version, then only that version will do
 | ||||
|   if (wanted && type === 'version') { | ||||
|     const ver = semver.clean(wanted, { loose: true }) | ||||
|     const mani = versions[ver] || staged[ver] || restricted[ver] | ||||
|     return isBefore(verTimes, ver, time) ? decorateAvoid(mani, avoid) : null | ||||
|   } | ||||
| 
 | ||||
|   // ok, sort based on our heuristics, and pick the best fit
 | ||||
|   const range = type === 'range' ? wanted : '*' | ||||
| 
 | ||||
|   // if the range is *, then we prefer the 'latest' if available
 | ||||
|   // but skip this if it should be avoided, in that case we have
 | ||||
|   // to try a little harder.
 | ||||
|   const defaultVer = distTags[defaultTag] | ||||
|   if (defaultVer && | ||||
|       (range === '*' || semver.satisfies(defaultVer, range, { loose: true })) && | ||||
|       !restricted[defaultVer] && | ||||
|       !shouldAvoid(defaultVer, avoid)) { | ||||
|     const mani = versions[defaultVer] | ||||
|     const ok = mani && | ||||
|       isBefore(verTimes, defaultVer, time) && | ||||
|       engineOk(mani, npmVersion, nodeVersion) && | ||||
|       !mani.deprecated && | ||||
|       !staged[defaultVer] | ||||
|     if (ok) { | ||||
|       return mani | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   // ok, actually have to sort the list and take the winner
 | ||||
|   const allEntries = Object.entries(versions) | ||||
|     .concat(Object.entries(staged)) | ||||
|     .concat(Object.entries(restricted)) | ||||
|     .filter(([ver]) => isBefore(verTimes, ver, time)) | ||||
| 
 | ||||
|   if (!allEntries.length) { | ||||
|     throw Object.assign(new Error(`No versions available for ${name}`), { | ||||
|       code: 'ENOVERSIONS', | ||||
|       name, | ||||
|       type, | ||||
|       wanted, | ||||
|       before, | ||||
|       versions: Object.keys(versions), | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   const sortSemverOpt = { loose: true } | ||||
|   const entries = allEntries.filter(([ver]) => | ||||
|     semver.satisfies(ver, range, { loose: true })) | ||||
|     .sort((a, b) => { | ||||
|       const [vera, mania] = a | ||||
|       const [verb, manib] = b | ||||
|       const notavoida = !shouldAvoid(vera, avoid) | ||||
|       const notavoidb = !shouldAvoid(verb, avoid) | ||||
|       const notrestra = !restricted[vera] | ||||
|       const notrestrb = !restricted[verb] | ||||
|       const notstagea = !staged[vera] | ||||
|       const notstageb = !staged[verb] | ||||
|       const notdepra = !mania.deprecated | ||||
|       const notdeprb = !manib.deprecated | ||||
|       const enginea = engineOk(mania, npmVersion, nodeVersion) | ||||
|       const engineb = engineOk(manib, npmVersion, nodeVersion) | ||||
|       // sort by:
 | ||||
|       // - not an avoided version
 | ||||
|       // - not restricted
 | ||||
|       // - not staged
 | ||||
|       // - not deprecated and engine ok
 | ||||
|       // - engine ok
 | ||||
|       // - not deprecated
 | ||||
|       // - semver
 | ||||
|       return (notavoidb - notavoida) || | ||||
|         (notrestrb - notrestra) || | ||||
|         (notstageb - notstagea) || | ||||
|         ((notdeprb && engineb) - (notdepra && enginea)) || | ||||
|         (engineb - enginea) || | ||||
|         (notdeprb - notdepra) || | ||||
|         semver.rcompare(vera, verb, sortSemverOpt) | ||||
|     }) | ||||
| 
 | ||||
|   return decorateAvoid(entries[0] && entries[0][1], avoid) | ||||
| } | ||||
| 
 | ||||
| module.exports = (packument, wanted, opts = {}) => { | ||||
|   const mani = pickManifest(packument, wanted, opts) | ||||
|   const picked = mani && normalizeBin(mani) | ||||
|   const policyRestrictions = packument.policyRestrictions | ||||
|   const restricted = (policyRestrictions && policyRestrictions.versions) || {} | ||||
| 
 | ||||
|   if (picked && !restricted[picked.version]) { | ||||
|     return picked | ||||
|   } | ||||
| 
 | ||||
|   const { before = null, defaultTag = 'latest' } = opts | ||||
|   const bstr = before ? new Date(before).toLocaleString() : '' | ||||
|   const { name } = packument | ||||
|   const pckg = `${name}@${wanted}` + | ||||
|     (before ? ` with a date before ${bstr}` : '') | ||||
| 
 | ||||
|   const isForbidden = picked && !!restricted[picked.version] | ||||
|   const polMsg = isForbidden ? policyRestrictions.message : '' | ||||
| 
 | ||||
|   const msg = !isForbidden ? `No matching version found for ${pckg}.` | ||||
|     : `Could not download ${pckg} due to policy violations:\n${polMsg}` | ||||
| 
 | ||||
|   const code = isForbidden ? 'E403' : 'ETARGET' | ||||
|   throw Object.assign(new Error(msg), { | ||||
|     code, | ||||
|     type: npa.resolve(packument.name, wanted).type, | ||||
|     wanted, | ||||
|     versions: Object.keys(packument.versions ?? {}), | ||||
|     name, | ||||
|     distTags: packument['dist-tags'], | ||||
|     defaultTag, | ||||
|   }) | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue