[ 
https://issues.apache.org/jira/browse/COUCHDB-1151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13030035#comment-13030035
 ] 

Alexander Shorin commented on COUCHDB-1151:
-------------------------------------------

Yes, this patch breaks current module system with complex relative paths 
because there was 1 step back per '.' in frame with no id change and 2 steps 
back per '..' plus id truncating for 1 slash. However, this is a little 
incorrect, because '.' means "current" level and no step back should be 
provided and '..' means "parent" level and only 1 step should be done. All same 
as you've done, Caolan, but there is also additional 1 step back in frame for 
relative paths at resolving start due to at the final step "current" and "id" 
points to module source, not module source level, so without this step function 
would generate a little invalid module id's. 
Current realization works well, but only if one '..' or '.' has occurred at the 
beginning of relative path.

> Require function doesnt fullfil specification
> ---------------------------------------------
>
>                 Key: COUCHDB-1151
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-1151
>             Project: CouchDB
>          Issue Type: Bug
>          Components: JavaScript View Server
>    Affects Versions: 0.11.2, 1.0.2, 1.1
>            Reporter: Alexander Shorin
>            Priority: Critical
>              Labels: commonjs, javascript, require
>         Attachments: design.require.txt, design_docs.js.patch, utils.js.patch
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> According CommonJS Modules specification [1]:
> > 4.  Module identifiers may be "relative" or "top-level". A module 
> > identifier is "relative" if the first term is "." or "..".
> > 5.  Top-level identifiers are resolved off the conceptual module name space 
> > root.
> This specification is broken in current realization at those terms. See 
> design test case.
> Actually problems:
> 1. Module id is broken if module imports from same level (as via '.') or from 
> parent level (as via '..'). AFAIK, module id should be valid to make 
> require(mod.id) call successful. See`_show/relative-id`, 
> `_show/require-relative-id` and `_show/relative-parent-id` function.
> 2. Absolute module import is broken from relative imported module. 
> See`_show/absolute-require` function.
> 3. Multiple relative imports from same level(as via '.') breaks require 
> function. See `_show/maze` function.
> Those problems makes require function works unexpectedly and obstructs 
> solving at least one more issue #1075 [2]
> I know that all relative imports are discouraged, but if they are supported, 
> why they shouldn't work properly?(:
> [1] http://wiki.commonjs.org/wiki/Modules/1.1.1
> [2] https://issues.apache.org/jira/browse/COUCHDB-1075

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to