Skip to content

Commit 3c078ab

Browse files
committed
Use validateNPMPackageName
1 parent a743fe4 commit 3c078ab

File tree

4 files changed

+170
-10
lines changed

4 files changed

+170
-10
lines changed

dist/index.js

+139-4
Original file line numberDiff line numberDiff line change
@@ -153166,6 +153166,119 @@ function version(uuid) {
153166153166
var _default = version;
153167153167
exports["default"] = _default;
153168153168

153169+
/***/ }),
153170+
153171+
/***/ 84006:
153172+
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
153173+
153174+
"use strict";
153175+
153176+
const { builtinModules: builtins } = __nccwpck_require__(98188)
153177+
153178+
var scopedPackagePattern = new RegExp('^(?:@([^/]+?)[/])?([^/]+?)$')
153179+
var blacklist = [
153180+
'node_modules',
153181+
'favicon.ico',
153182+
]
153183+
153184+
function validate (name) {
153185+
var warnings = []
153186+
var errors = []
153187+
153188+
if (name === null) {
153189+
errors.push('name cannot be null')
153190+
return done(warnings, errors)
153191+
}
153192+
153193+
if (name === undefined) {
153194+
errors.push('name cannot be undefined')
153195+
return done(warnings, errors)
153196+
}
153197+
153198+
if (typeof name !== 'string') {
153199+
errors.push('name must be a string')
153200+
return done(warnings, errors)
153201+
}
153202+
153203+
if (!name.length) {
153204+
errors.push('name length must be greater than zero')
153205+
}
153206+
153207+
if (name.match(/^\./)) {
153208+
errors.push('name cannot start with a period')
153209+
}
153210+
153211+
if (name.match(/^_/)) {
153212+
errors.push('name cannot start with an underscore')
153213+
}
153214+
153215+
if (name.trim() !== name) {
153216+
errors.push('name cannot contain leading or trailing spaces')
153217+
}
153218+
153219+
// No funny business
153220+
blacklist.forEach(function (blacklistedName) {
153221+
if (name.toLowerCase() === blacklistedName) {
153222+
errors.push(blacklistedName + ' is a blacklisted name')
153223+
}
153224+
})
153225+
153226+
// Generate warnings for stuff that used to be allowed
153227+
153228+
// core module names like http, events, util, etc
153229+
if (builtins.includes(name.toLowerCase())) {
153230+
warnings.push(name + ' is a core module name')
153231+
}
153232+
153233+
if (name.length > 214) {
153234+
warnings.push('name can no longer contain more than 214 characters')
153235+
}
153236+
153237+
// mIxeD CaSe nAMEs
153238+
if (name.toLowerCase() !== name) {
153239+
warnings.push('name can no longer contain capital letters')
153240+
}
153241+
153242+
if (/[~'!()*]/.test(name.split('/').slice(-1)[0])) {
153243+
warnings.push('name can no longer contain special characters ("~\'!()*")')
153244+
}
153245+
153246+
if (encodeURIComponent(name) !== name) {
153247+
// Maybe it's a scoped package name, like @user/package
153248+
var nameMatch = name.match(scopedPackagePattern)
153249+
if (nameMatch) {
153250+
var user = nameMatch[1]
153251+
var pkg = nameMatch[2]
153252+
if (encodeURIComponent(user) === user && encodeURIComponent(pkg) === pkg) {
153253+
return done(warnings, errors)
153254+
}
153255+
}
153256+
153257+
errors.push('name can only contain URL-friendly characters')
153258+
}
153259+
153260+
return done(warnings, errors)
153261+
}
153262+
153263+
var done = function (warnings, errors) {
153264+
var result = {
153265+
validForNewPackages: errors.length === 0 && warnings.length === 0,
153266+
validForOldPackages: errors.length === 0,
153267+
warnings: warnings,
153268+
errors: errors,
153269+
}
153270+
if (!result.warnings.length) {
153271+
delete result.warnings
153272+
}
153273+
if (!result.errors.length) {
153274+
delete result.errors
153275+
}
153276+
return result
153277+
}
153278+
153279+
module.exports = validate
153280+
153281+
153169153282
/***/ }),
153170153283

153171153284
/***/ 54886:
@@ -160498,6 +160611,14 @@ module.exports = require("https");
160498160611

160499160612
/***/ }),
160500160613

160614+
/***/ 98188:
160615+
/***/ ((module) => {
160616+
160617+
"use strict";
160618+
module.exports = require("module");
160619+
160620+
/***/ }),
160621+
160501160622
/***/ 41808:
160502160623
/***/ ((module) => {
160503160624

@@ -180240,6 +180361,9 @@ const extract_ = (opt) => new Unpack(opt);
180240180361

180241180362

180242180363
//# sourceMappingURL=index.js.map
180364+
// EXTERNAL MODULE: ./node_modules/validate-npm-package-name/lib/index.js
180365+
var lib = __nccwpck_require__(84006);
180366+
var lib_default = /*#__PURE__*/__nccwpck_require__.n(lib);
180243180367
;// CONCATENATED MODULE: ./index.ts
180244180368
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
180245180369
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
@@ -180262,6 +180386,7 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume
180262180386

180263180387

180264180388

180389+
180265180390
const esyPrefix = core.getInput("esy-prefix");
180266180391
const cacheKey = core.getInput("cache-key");
180267180392
const sourceCacheKey = core.getInput("source-cache-key");
@@ -180284,10 +180409,20 @@ function run(name, command, args) {
180284180409
}
180285180410
let cachedEsyNPMInfo;
180286180411
function getLatestEsyNPMInfo(alternativeEsyNPMPackage) {
180287-
const esyPackage = (alternativeEsyNPMPackage !== "" &&
180288-
!!alternativeEsyNPMPackage &&
180289-
alternativeEsyNPMPackage) ||
180290-
"esy";
180412+
let esyPackage;
180413+
if (!alternativeEsyNPMPackage || alternativeEsyNPMPackage === "") {
180414+
// No alternative was provided. So, fallback to default
180415+
esyPackage = "esy";
180416+
}
180417+
else {
180418+
const { validForOldPackages, validForNewPackages, errors = [], } = lib_default()(alternativeEsyNPMPackage);
180419+
if (!validForNewPackages || !validForOldPackages) {
180420+
throw new Error(`Invalid alternative NPM package name provided: ${alternativeEsyNPMPackage}
180421+
Errors:
180422+
${errors.join("\n")}`);
180423+
}
180424+
esyPackage = alternativeEsyNPMPackage;
180425+
}
180291180426
try {
180292180427
if (!cachedEsyNPMInfo) {
180293180428
cachedEsyNPMInfo = JSON.parse(external_child_process_.execSync(`npm info ${esyPackage} --json`).toString().trim());

index.ts

+18-5
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import * as crypto from "crypto";
1111
import * as util from "util";
1212
import * as cp from "child_process";
1313
import * as tar from "tar";
14+
import validateNPMPackageName from "validate-npm-package-name";
1415

1516
const esyPrefix = core.getInput("esy-prefix");
1617
const cacheKey = core.getInput("cache-key");
@@ -37,11 +38,23 @@ let cachedEsyNPMInfo: NpmInfo | undefined;
3738
function getLatestEsyNPMInfo(
3839
alternativeEsyNPMPackage: string | undefined
3940
): NpmInfo {
40-
const esyPackage =
41-
(alternativeEsyNPMPackage !== "" &&
42-
!!alternativeEsyNPMPackage &&
43-
alternativeEsyNPMPackage) ||
44-
"esy";
41+
let esyPackage;
42+
if (!alternativeEsyNPMPackage || alternativeEsyNPMPackage === "") {
43+
// No alternative was provided. So, fallback to default
44+
esyPackage = "esy";
45+
} else {
46+
const {
47+
validForOldPackages,
48+
validForNewPackages,
49+
errors = [],
50+
} = validateNPMPackageName(alternativeEsyNPMPackage);
51+
if (!validForNewPackages || !validForOldPackages) {
52+
throw new Error(`Invalid alternative NPM package name provided: ${alternativeEsyNPMPackage}
53+
Errors:
54+
${errors.join("\n")}`);
55+
}
56+
esyPackage = alternativeEsyNPMPackage;
57+
}
4558
try {
4659
if (!cachedEsyNPMInfo) {
4760
cachedEsyNPMInfo = JSON.parse(

package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919
"@actions/github": "^6.0.0",
2020
"@actions/tool-cache": "^2.0.1",
2121
"tar": "^7.1.0",
22-
"typescript": "5.x"
22+
"typescript": "5.x",
23+
"validate-npm-package-name": "^5.0.1"
2324
},
2425
"devDependencies": {
2526
"@types/tar": "^6.1.13",
27+
"@types/validate-npm-package-name": "^4.0.2",
2628
"@vercel/ncc": "^0.33.0",
2729
"prettier": "2.5.1"
2830
}

yarn.lock

+10
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,11 @@
542542
dependencies:
543543
"@types/node" "*"
544544

545+
"@types/validate-npm-package-name@^4.0.2":
546+
version "4.0.2"
547+
resolved "https://registry.yarnpkg.com/@types/validate-npm-package-name/-/validate-npm-package-name-4.0.2.tgz#df0f7dac25df7761f7476605ddac54cb1abda26e"
548+
integrity sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==
549+
545550
"@vercel/ncc@^0.33.0":
546551
version "0.33.4"
547552
resolved "https://registry.yarnpkg.com/@vercel/ncc/-/ncc-0.33.4.tgz#e44a87511f583b7ba88e4b9ae90eeb7ba252b872"
@@ -1377,6 +1382,11 @@ uuid@^8.3.0, uuid@^8.3.2:
13771382
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
13781383
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
13791384

1385+
validate-npm-package-name@^5.0.1:
1386+
version "5.0.1"
1387+
resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8"
1388+
integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==
1389+
13801390
webidl-conversions@^3.0.0:
13811391
version "3.0.1"
13821392
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"

0 commit comments

Comments
 (0)