| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -22,6 +22,7 @@ const { | |||
| 22 | 22 | StringPrototypeStartsWith, | |
| 23 | 23 | encodeURIComponent, | |
| 24 | 24 | } = primordials; | |
| 25 | + const assert = require('internal/assert'); | ||
| 25 | 26 | const internalFS = require('internal/fs/utils'); | |
| 26 | 27 | const { BuiltinModule } = require('internal/bootstrap/realm'); | |
| 27 | 28 | const { realpathSync } = require('fs'); | |
@@ -117,18 +118,17 @@ function emitInvalidSegmentDeprecation(target, request, match, pjsonUrl, interna | |||
| 117 | 118 | * Emits a deprecation warning if the given URL is a module and | |
| 118 | 119 | * the package.json file does not define a "main" or "exports" field. | |
| 119 | 120 | * @param {URL} url - The URL of the module being resolved. | |
| 120 | - * @param {URL} packageJSONUrl - The URL of the package.json file for the module. | ||
| 121 | + * @param {string} path - The path of the module being resolved. | ||
| 122 | + * @param {string} pkgPath - The path of the parent dir of the package.json file for the module. | ||
| 121 | 123 | * @param {string | URL} [base] - The base URL for the module being resolved. | |
| 122 | 124 | * @param {string} [main] - The "main" field from the package.json file. | |
| 123 | 125 | */ | |
| 124 | - function emitLegacyIndexDeprecation(url, packageJSONUrl, base, main) { | ||
| 126 | + function emitLegacyIndexDeprecation(url, path, pkgPath, base, main) { | ||
| 125 | 127 | if (process.noDeprecation) { | |
| 126 | 128 | return; | |
| 127 | 129 | } | |
| 128 | 130 | const format = defaultGetFormatWithoutErrors(url); | |
| 129 | 131 | if (format !== 'module') { return; } | |
| 130 | - const path = fileURLToPath(url); | ||
| 131 | - const pkgPath = fileURLToPath(new URL('.', packageJSONUrl)); | ||
| 132 | 132 | const basePath = fileURLToPath(base); | |
| 133 | 133 | if (!main) { | |
| 134 | 134 | process.emitWarning( | |
@@ -196,20 +196,19 @@ const legacyMainResolveExtensionsIndexes = { | |||
| 196 | 196 | * @returns {URL} | |
| 197 | 197 | */ | |
| 198 | 198 | function legacyMainResolve(packageJSONUrl, packageConfig, base) { | |
| 199 | - const packageJsonUrlString = packageJSONUrl.href; | ||
| 200 | - | ||
| 201 | - if (typeof packageJsonUrlString !== 'string') { | ||
| 202 | - throw new ERR_INVALID_ARG_TYPE('packageJSONUrl', ['URL'], packageJSONUrl); | ||
| 203 | - } | ||
| 199 | + assert(isURL(packageJSONUrl)); | ||
| 200 | + const pkgPath = fileURLToPath(new URL('.', packageJSONUrl)); | ||
| 204 | 201 | ||
| 205 | 202 | const baseStringified = isURL(base) ? base.href : base; | |
| 206 | 203 | ||
| 207 | - const resolvedOption = FSLegacyMainResolve(packageJsonUrlString, packageConfig.main, baseStringified); | ||
| 204 | + const resolvedOption = FSLegacyMainResolve(pkgPath, packageConfig.main, baseStringified); | ||
| 208 | 205 | ||
| 209 | - const baseUrl = resolvedOption <= legacyMainResolveExtensionsIndexes.kResolvedByMainIndexNode ? `./${packageConfig.main}` : ''; | ||
| 210 | - const resolvedUrl = new URL(baseUrl + legacyMainResolveExtensions[resolvedOption], packageJSONUrl); | ||
| 206 | + const maybeMain = resolvedOption <= legacyMainResolveExtensionsIndexes.kResolvedByMainIndexNode ? | ||
| 207 | + packageConfig.main || './' : ''; | ||
| 208 | + const resolvedPath = resolve(pkgPath, maybeMain + legacyMainResolveExtensions[resolvedOption]); | ||
| 209 | + const resolvedUrl = pathToFileURL(resolvedPath); | ||
| 211 | 210 | ||
| 212 | - emitLegacyIndexDeprecation(resolvedUrl, packageJSONUrl, base, packageConfig.main); | ||
| 211 | + emitLegacyIndexDeprecation(resolvedUrl, resolvedPath, pkgPath, base, packageConfig.main); | ||
| 213 | 212 | ||
| 214 | 213 | return resolvedUrl; | |
| 215 | 214 | } | |
@@ -790,8 +789,8 @@ function packageResolve(specifier, base, conditions) { | |||
| 790 | 789 | // ResolveSelf | |
| 791 | 790 | const packageConfig = packageJsonReader.getPackageScopeConfig(base); | |
| 792 | 791 | if (packageConfig.exists) { | |
| 793 | - const packageJSONUrl = pathToFileURL(packageConfig.pjsonPath); | ||
| 794 | 792 | if (packageConfig.exports != null && packageConfig.name === packageName) { | |
| 793 | + const packageJSONUrl = pathToFileURL(packageConfig.pjsonPath); | ||
| 795 | 794 | return packageExportsResolve( | |
| 796 | 795 | packageJSONUrl, packageSubpath, packageConfig, base, conditions); | |
| 797 | 796 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -3236,37 +3236,18 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) { | |||
| 3236 | 3236 | Environment* env = Environment::GetCurrent(args); | |
| 3237 | 3237 | auto isolate = env->isolate(); | |
| 3238 | 3238 | ||
| 3239 | - Utf8Value utf8_package_json_url(isolate, args[0]); | ||
| 3240 | - auto package_json_url = | ||
| 3241 | - ada::parse<ada::url_aggregator>(utf8_package_json_url.ToStringView()); | ||
| 3242 | - | ||
| 3243 | - if (!package_json_url) { | ||
| 3244 | - THROW_ERR_INVALID_URL(isolate, "Invalid URL"); | ||
| 3245 | - return; | ||
| 3246 | - } | ||
| 3239 | + auto utf8_package_path = Utf8Value(isolate, args[0]).ToString(); | ||
| 3247 | 3240 | ||
| 3248 | 3241 | std::string package_initial_file = ""; | |
| 3249 | 3242 | ||
| 3250 | - ada::result<ada::url_aggregator> file_path_url; | ||
| 3251 | 3243 | std::optional<std::string> initial_file_path; | |
| 3252 | 3244 | std::string file_path; | |
| 3253 | 3245 | ||
| 3254 | 3246 | if (args.Length() >= 2 && args[1]->IsString()) { | |
| 3255 | 3247 | auto package_config_main = Utf8Value(isolate, args[1]).ToString(); | |
| 3256 | 3248 | ||
| 3257 | - file_path_url = ada::parse<ada::url_aggregator>( | ||
| 3258 | - std::string("./") + package_config_main, &package_json_url.value()); | ||
| 3259 | - | ||
| 3260 | - if (!file_path_url) { | ||
| 3261 | - THROW_ERR_INVALID_URL(isolate, "Invalid URL"); | ||
| 3262 | - return; | ||
| 3263 | - } | ||
| 3264 | - | ||
| 3265 | - initial_file_path = node::url::FileURLToPath(env, *file_path_url); | ||
| 3266 | - if (!initial_file_path.has_value()) { | ||
| 3267 | - return; | ||
| 3268 | - } | ||
| 3269 | - | ||
| 3249 | + initial_file_path = | ||
| 3250 | + PathResolve(env, {utf8_package_path, package_config_main}); | ||
| 3270 | 3251 | FromNamespacedPath(&initial_file_path.value()); | |
| 3271 | 3252 | ||
| 3272 | 3253 | package_initial_file = *initial_file_path; | |
@@ -3297,15 +3278,7 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) { | |||
| 3297 | 3278 | } | |
| 3298 | 3279 | } | |
| 3299 | 3280 | ||
| 3300 | - file_path_url = | ||
| 3301 | - ada::parse<ada::url_aggregator>("./index", &package_json_url.value()); | ||
| 3302 | - | ||
| 3303 | - if (!file_path_url) { | ||
| 3304 | - THROW_ERR_INVALID_URL(isolate, "Invalid URL"); | ||
| 3305 | - return; | ||
| 3306 | - } | ||
| 3307 | - | ||
| 3308 | - initial_file_path = node::url::FileURLToPath(env, *file_path_url); | ||
| 3281 | + initial_file_path = PathResolve(env, {utf8_package_path, "./index"}); | ||
| 3309 | 3282 | if (!initial_file_path.has_value()) { | |
| 3310 | 3283 | return; | |
| 3311 | 3284 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -82,7 +82,7 @@ describe('legacyMainResolve', () => { | |||
| 82 | 82 | {}, | |
| 83 | 83 | '' | |
| 84 | 84 | ), | |
| 85 | - { message: /instance of URL/, code: 'ERR_INVALID_ARG_TYPE' }, | ||
| 85 | + { code: 'ERR_INTERNAL_ASSERTION' }, | ||
| 86 | 86 | ); | |
| 87 | 87 | }); | |
| 88 | 88 | ||
@@ -166,4 +166,12 @@ describe('legacyMainResolve', () => { | |||
| 166 | 166 | { message: /"base" argument must be/, code: 'ERR_INVALID_ARG_TYPE' }, | |
| 167 | 167 | ); | |
| 168 | 168 | }); | |
| 169 | + | ||
| 170 | + it('should interpret main as a path, not a URL', () => { | ||
| 171 | + const packageJsonUrl = fixtures.fileURL('/es-modules/legacy-main-resolver/package.json'); | ||
| 172 | + assert.deepStrictEqual( | ||
| 173 | + legacyMainResolve(packageJsonUrl, { main: '../folder%25with percentage#/' }, packageJsonUrl), | ||
| 174 | + fixtures.fileURL('/es-modules/folder%25with percentage#/index.js'), | ||
| 175 | + ); | ||
| 176 | + }); | ||
| 169 | 177 | }); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments