Skip to content

Commit

Permalink
Merge pull request #531 from buschtoens/scoped-namespaces
Browse files Browse the repository at this point in the history
fix: resolving `@scope/name` namespaces
  • Loading branch information
rwjblue committed Apr 11, 2020
2 parents fb50521 + 490289f commit f142698
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 1 deletion.
20 changes: 19 additions & 1 deletion addon/resolvers/classic/index.js
Expand Up @@ -44,7 +44,25 @@ function parseName(fullName) {
let prefix, type, name;
let fullNameParts = fullName.split('@');

if (fullNameParts.length === 2) {
if (fullNameParts.length === 3) {
if (fullNameParts[0].length === 0) {
// leading scoped namespace: `@scope/pkg@type:name`
prefix = `@${fullNameParts[1]}`;
let prefixParts = fullNameParts[2].split(':');
type = prefixParts[0];
name = prefixParts[1];
} else {
// interweaved scoped namespace: `type:@scope/pkg@name`
prefix = `@${fullNameParts[1]}`;
type = fullNameParts[0].slice(0, -1);
name = fullNameParts[2];
}

if (type === 'template:components') {
name = `components/${name}`;
type = 'template';
}
} else if (fullNameParts.length === 2) {
let prefixParts = fullNameParts[0].split(':');

if (prefixParts.length === 2) {
Expand Down
82 changes: 82 additions & 0 deletions tests/unit/resolvers/classic/basic-test.js
Expand Up @@ -79,6 +79,25 @@ test("can lookup something in another namespace", function(assert){
assert.equal(adapter, expected, 'default export was returned');
});

test("can lookup something in another namespace with an @ scope", function(assert){
assert.expect(3);

let expected = {};

define('@scope/other/adapters/post', [], function(){
assert.ok(true, "adapter was invoked properly");

return {
default: expected
};
});

var adapter = resolver.resolve('@scope/other@adapter:post');

assert.ok(adapter, 'adapter was returned');
assert.equal(adapter, expected, 'default export was returned');
});

test("can lookup something with an @ sign", function(assert){
assert.expect(3);

Expand Down Expand Up @@ -111,6 +130,22 @@ test("can lookup something in another namespace with different syntax", function
assert.equal(adapter, expected, 'default export was returned');
});

test("can lookup something in another namespace with an @ scope with different syntax", function(assert){
assert.expect(3);

let expected = {};
define('@scope/other/adapters/post', [], function(){
assert.ok(true, "adapter was invoked properly");

return { default: expected };
});

var adapter = resolver.resolve('adapter:@scope/other@post');

assert.ok(adapter, 'adapter was returned');
assert.equal(adapter, expected, 'default export was returned');
});

test("can lookup a view in another namespace", function(assert) {
assert.expect(3);

Expand All @@ -127,6 +162,22 @@ test("can lookup a view in another namespace", function(assert) {
assert.equal(view, expected, 'default export was returned');
});

test("can lookup a view in another namespace with an @ scope", function(assert) {
assert.expect(3);

let expected = { isViewFactory: true };
define('@scope/other/views/post', [], function(){
assert.ok(true, "view was invoked properly");

return { default: expected };
});

var view = resolver.resolve('@scope/other@view:post');

assert.ok(view, 'view was returned');
assert.equal(view, expected, 'default export was returned');
});

test("can lookup a view in another namespace with different syntax", function(assert) {
assert.expect(3);

Expand All @@ -143,6 +194,22 @@ test("can lookup a view in another namespace with different syntax", function(as
assert.equal(view, expected, 'default export was returned');
});

test("can lookup a view in another namespace with an @ scope with different syntax", function(assert) {
assert.expect(3);

let expected = { isViewFactory: true };
define('@scope/other/views/post', [], function(){
assert.ok(true, "view was invoked properly");

return { default: expected };
});

var view = resolver.resolve('view:@scope/other@post');

assert.ok(view, 'view was returned');
assert.equal(view, expected, 'default export was returned');
});

test("can lookup a component template in another namespace with different syntax", function(assert) {
assert.expect(2);

Expand All @@ -158,6 +225,21 @@ test("can lookup a component template in another namespace with different syntax
assert.equal(template, expected, 'default export was returned');
});

test("can lookup a component template in another namespace with an @ scope with different syntax", function(assert) {
assert.expect(2);

let expected = { isTemplate: true };
define('@scope/other/templates/components/foo-bar', [], function(){
assert.ok(true, "template was looked up properly");

return { default: expected };
});

var template = resolver.resolve('template:components/@scope/other@foo-bar');

assert.equal(template, expected, 'default export was returned');
});

test("can lookup a view", function(assert) {
assert.expect(3);

Expand Down

0 comments on commit f142698

Please sign in to comment.