-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(server): use regex instead of isAbsoluteUrl #2202
fix(server): use regex instead of isAbsoluteUrl #2202
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Need to uninstall is-absolute-url
. And I think it is better to create util for this change.
Codecov Report
@@ Coverage Diff @@
## master #2202 +/- ##
=======================================
Coverage 93.89% 93.89%
=======================================
Files 34 34
Lines 1278 1278
Branches 366 366
=======================================
Hits 1200 1200
Misses 71 71
Partials 7 7
Continue to review full report at Codecov.
|
I think we need ti wait answer sindresorhus/is-absolute-url#7 before doing something here |
@hiroppy done |
/cc @EslamHiko looks it is solved on dep side, but will be great keep test to avoid future regression, can you rebase? |
3a3fb3d
to
8a827e8
Compare
@evilebottnawi yes, I kept only the tests. |
lib/utils/runOpen.js
Outdated
@@ -14,7 +14,7 @@ function runOpen(uri, options, log) { | |||
} | |||
|
|||
const pageUrl = | |||
options.openPage && isAbsoluteUrl(options.openPage) | |||
options.openPage && isAbsoluteUrl(String(options.openPage)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No need this here, if you have problem place let's solve this in other PR
// eslint-disable-next-line no-unused-vars | ||
server = new Promise((resolve, reject) => { | ||
testServer.start(config, { | ||
contentBase: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's add two tests here c:\absolute\path\to\content-base
and C:\absolute\path\to\content-base
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Typos
// eslint-disable-next-line no-unused-vars | ||
server = new Promise((resolve, reject) => { | ||
testServer.start(config, { | ||
contentBase: 'c:absolutepath\tocontent-base', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Typo 😄
contentBasePublic.charAt(0).toLowerCase() + | ||
contentBasePublic.substring(1), | ||
watchContentBase: true, | ||
port: 2222, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't use the port number directly.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if I use port
it'll cause listen EADDRINUSE: address already in use 127.0.0.1:8107
error and cause the tests to hang, can I use port+1
,port+2
or add new values in ports-map
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't add the port number.
diff --git a/test/server/contentBase-option.test.js b/test/server/contentBase-option.test.js
index fe120e5..bcde1e6 100644
--- a/test/server/contentBase-option.test.js
+++ b/test/server/contentBase-option.test.js
@@ -269,10 +269,10 @@ describe('contentBase option', () => {
describe('testing single & multiple external paths', () => {
afterEach((done) => {
- testServer.close(() => {
- done();
- });
+ testServer.close(done);
});
+
it('Should throw exception (string)', (done) => {
try {
// eslint-disable-next-line no-unused-vars
@@ -302,71 +302,40 @@ describe('contentBase option', () => {
}
});
it('Should not throw exception (local path with lower case first character)', (done) => {
- try {
- // eslint-disable-next-line no-unused-vars
- server = new Promise((resolve, reject) => {
- testServer.start(config, {
- contentBase:
- contentBasePublic.charAt(0).toLowerCase() +
- contentBasePublic.substring(1),
- watchContentBase: true,
- port: 2222,
- });
- resolve(testServer);
- });
-
- server.then((testServer) => {
- testServer.close(() => {
- done();
- });
- });
- } catch (e) {
- expect(true).toBe(false);
- }
+ testServer.start(
+ config,
+ {
+ contentBase:
+ contentBasePublic.charAt(0).toLowerCase() +
+ contentBasePublic.substring(1),
+ watchContentBase: true,
+ port,
+ },
+ done
+ );
});
it("Should not throw exception (local path with lower case first character & has '-')", (done) => {
- try {
- // eslint-disable-next-line no-unused-vars
- server = new Promise((resolve, reject) => {
- testServer.start(config, {
- contentBase: 'c:\\absolute\\path\\to\\content-base',
- watchContentBase: true,
- port: 2223,
- });
- resolve(testServer);
- });
-
- server.then((testServer) => {
- testServer.close(() => {
- done();
- });
- });
- } catch (e) {
- expect(true).toBe(false);
- }
+ testServer.start(
+ config,
+ {
+ contentBase: 'c:\\absolute\\path\\to\\content-base',
+ watchContentBase: true,
+ port,
+ },
+ done
+ );
});
it("Should not throw exception (local path with upper case first character & has '-')", (done) => {
- try {
- // eslint-disable-next-line no-unused-vars
- server = new Promise((resolve, reject) => {
- testServer.start(config, {
- contentBase: 'C:\\absolute\\path\\to\\content-base',
- watchContentBase: true,
- port: 2224,
- });
- resolve(testServer);
- });
-
- server.then((testServer) => {
- testServer.close(() => {
- done();
- });
- });
- } catch (e) {
- expect(true).toBe(false);
- }
+ testServer.start(
+ config,
+ {
+ contentBase: 'C:\\absolute\\path\\to\\content-base',
+ watchContentBase: true,
+ port,
+ },
+ done
+ );
});
-
it('Should throw exception (array)', (done) => {
try {
// eslint-disable-next-line no-unused-vars
You can patch this code.
/cc @evilebottnawi @hiroppy |
@@ -405,7 +405,7 @@ class Server { | |||
throw new Error('Watching remote files is not supported.'); | |||
} else if (Array.isArray(contentBase)) { | |||
contentBase.forEach((item) => { | |||
if (isAbsoluteUrl(String(item))) { | |||
if (isAbsoluteUrl(String(item)) || typeof item === 'number') { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why we add typeof item === 'number'
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@evilebottnawi it's already blocking number values in options.js accepting only strings, in case in future refactors if we change the type of array items to accept any type we still need it to throw an exception if the array item is number type.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@evilebottnawi we can remove number type from options.json
"contentBase": {
"anyOf": [
{
"enum": [false]
},
{
"type": "number"
},
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
},
"minItems": 1
}
]
},
and remove || typeof item === 'number'
checks and update tests to check for the exception "should be {String|Array} (https://webpack.js.org/configuration/dev-server/#devservercontentbase)"
in number type cases
what do you think ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's do it next version
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good job, one question
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/cc @hiroppy
For Bugs and Features; did you add new tests?
Yes
Motivation / Use-Case
fixes: #2190
Breaking Changes
no
Additional Info
If we want to still
isAbsoluteUrl
use can add an extra check for the second character in the contentBase and replace allisAbsoluteUrl(String(contetBase))
withisAbsoluteUrl(String(contetBase)) && String(contetBase)[1] !== ':'
assuming that always local paths will have:
as a second character ex:c: , e: , ...
but I think reverting the changes to the original regex will be better, what do you think ?