-
Notifications
You must be signed in to change notification settings - Fork 1
Description
#6 solved the issue of relative or absolute POSIX paths being inadvertently converted to contain Windows path separators by path.resolve. However, inconsistency issues still remain in the current version.
I ran several relative and absolute paths through datapackage-indentifier on both OSX and Windows. The parsing code is:
const identifier = require('datapackage-identifier');
const id = input => identifier.parse(input).dataPackageJsonUrl;
The inputs and expected results are:
| input | POSIX Expected | Win32 Expected |
|---|---|---|
| datasets/gdp/ | file:///Users/test/datasets/gdp/datapackage.json | file:///C:/Users/test/datasets/gdp/datapackage.json |
| datasets\gdp\ | file:///Users/test/datasets/gdp/datapackage.json | file:///C:/Users/test/datasets/gdp/datapackage.json |
| /datasets/gdp/ | file:///datasets/gdp/datapackage.json | file:///datasets/gdp/datapackage.json |
| C:\datasets\gdp\ | file:///C:/datasets/gdp/datapackage.json | file:///C:/datasets/gdp/datapackage.json |
| /C:/datasets/gdp/ | file:///C:/datasets/gdp/datapackage.json | file:///C:/datasets/gdp/datapackage.json |
Note that I expect relative paths (rows 1 and 2) will vary between systems. I expect consistent results, regardless of system, for absolute paths (rows 3, 4, 5). Also, I always expect a valid browser-compatible file:/// URL (with forward slashes).
OSX result using datapackage-identifier v0.4.2:
| input | POSIX Expected | v0.4.2 OSX |
|---|---|---|
| datasets/gdp/ | file:///Users/test/datasets/gdp/datapackage.json | file:///Users/test/datasets/gdp/datapackage.json |
| datasets\gdp\ | file:///Users/test/datasets/gdp/datapackage.json | /datapackage.json * |
| /datasets/gdp/ | file:///datasets/gdp/datapackage.json | file:///datasets/gdp/datapackage.json |
| C:\datasets\gdp\ | file:///C:/datasets/gdp/datapackage.json | /datapackage.json * |
| /C:/datasets/gdp/ | file:///C:/datasets/gdp/datapackage.json | file:///C:/datasets/gdp/datapackage.json |
Relative and absolute paths with Windows path separator (rows 2 & 4) fail on OSX.
Windows results using datapackage-identifier v0.4.2 and v0.4.1:
| input | Expected Windows | v0.4.2 Windows | v0.4.1 Windows |
|---|---|---|---|
| datasets/gdp/ | file:///C:/Users/test/datasets/gdp/datapackage.json | file://C:\Users\test\datasets\gdp\datapackage.json * | file://C:\Users\test\datasets\gdp\datapackage.json * |
| datasets\gdp\ | file:///C:/Users/test/datasets/gdp/datapackage.json | /datapackage.json * | /datapackage.json * |
| /datasets/gdp/ | file:///datasets/gdp/datapackage.json | file:///datasets/gdp/datapackage.json | file://C:\datasets\gdp/datapackage.json * |
| C:\datasets\gdp\ | file:///C:/datasets/gdp/datapackage.json | /datapackage.json * | /datapackage.json * |
| /C:/datasets/gdp/ | file:///C:/datasets/gdp/datapackage.json | file:///C:/datasets/gdp/datapackage.json | file://C:\C:\datasets\gdp/datapackage.json * |
The POSIX style relative paths (row 1) return an invalid URL. As seen on OSX, relative and absolute paths with Windows path separators (rows 2 & 4) also fail on windows. The v0.4.2 release fixes the issue with absolute paths with POSIX path separators (rows 3 and 5).
Possible solution
sindresorhus/file-url uses path.resolve then converts all paths to use POSIX path separators using String.prototype.replace.