Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 22 additions & 3 deletions mu-trees/addon/resolvers/glimmer-wrapper/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ function slasherize(dotted) {

const TEMPLATE_TO_PARTIAL = /^template:(.*\/)?_([\w-]+)/;

const LOOKUP_REGEX = /^([^:]+):(components\/)?([^:]+::)?([^:]+)$/;

/*
* Wrap the @glimmer/resolver in Ember's resolver API. Although
* this code extends from the DefaultResolver, it should never
Expand All @@ -31,18 +33,33 @@ const Resolver = DefaultResolver.extend({
normalize: null,

resolve(lookupString, referrer) {
let type, name, rootName, fullMatch, componentPrefix;

let lookupMatch = LOOKUP_REGEX.exec(lookupString);
if (lookupMatch) {
[ fullMatch, type, componentPrefix, rootName, name ] = lookupMatch;
rootName = (rootName && rootName.replace(/::/, '')) || this._configRootName;

if (componentPrefix) {
name = `${componentPrefix}${name}`;
}
}

/*
* Ember components require their lookupString to be massaged. Make this
* as "pay-go" as possible.
*/
if (referrer) {
// make absolute
let parts = referrer.split(':src/ui/');
referrer = `${parts[0]}:/${this._configRootName}/${parts[1]}`;
referrer = `${parts[0]}:/${rootName}/${parts[1]}`;
referrer = referrer.split('/template.hbs')[0];
} else if (rootName !== this._configRootName) {
// This is only required because:
// https://github.com/glimmerjs/glimmer-di/issues/45
referrer = `${type}:/${rootName}/`;
}

let [type, name] = lookupString.split(':');
if (name) {
if (type === 'service') {
/* Services may be camelCased */
Expand Down Expand Up @@ -77,9 +94,11 @@ const Resolver = DefaultResolver.extend({
* have dots.in.paths
*/
lookupString = `template`;
referrer = `route:/${this._configRootName}/routes/${slasherize(name)}`;
referrer = `route:/${rootName}/routes/${slasherize(name)}`;
}
}
} else {
lookupString = `${type}:${name}`;
}
}

Expand Down
79 changes: 79 additions & 0 deletions mu-trees/tests/unit/resolvers/glimmer-wrapper/basic-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -723,3 +723,82 @@ test('Can resolve a local helper for another component', function(assert) {
'helper not resolved at global levelt'
);
});

// Namespaces

test('Can resolve a namespaced service lookup', function(assert) {
let service = {};
let resolver = this.resolverForEntries({
app: {
name: 'example-app'
},
types: {
service: { definitiveCollection: 'services' }
},
collections: {
services: {
types: [ 'service' ]
}
}
}, {
'service:/other-namespace/services/i18n': service
});

assert.equal(
resolver.resolve('service:other-namespace::i18n'),
service,
'namespaced resolution resolved'
);
});

test('Can resolve a namespaced component template', function(assert) {
let template = {};
let resolver = this.resolverForEntries({
app: {
name: 'example-app'
},
types: {
template: { definitiveCollection: 'components' }
},
collections: {
components: {
group: 'ui',
types: [ 'template' ]
}
}
}, {
'template:/other-namespace/components/my-component': template
});

assert.equal(
resolver.resolve('template:components/other-namespace::my-component'),
template,
'namespaced resolution resolved'
);
});

test('Can resolve a namespaced component', function(assert) {
let component = {};
let resolver = this.resolverForEntries({
app: {
name: 'example-app'
},
types: {
component: { definitiveCollection: 'components' }
},
collections: {
components: {
group: 'ui',
types: [ 'component' ]
}
}
}, {
'component:/other-namespace/components/my-component': component
});

assert.equal(
resolver.resolve('component:other-namespace::my-component'),
component,
'namespaced resolution resolved'
);
});
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"test": "ember try:each"
},
"dependencies": {
"@glimmer/resolver": "^0.4.1",
"@glimmer/resolver": "^0.4.2",
"babel-plugin-debug-macros": "^0.1.10",
"broccoli-funnel": "^1.1.0",
"broccoli-merge-trees": "^2.0.0",
Expand Down
71 changes: 8 additions & 63 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@
dependencies:
"@glimmer/util" "^0.22.3"

"@glimmer/resolver@^0.4.1":
version "0.4.1"
resolved "https://registry.yarnpkg.com/@glimmer/resolver/-/resolver-0.4.1.tgz#cd9644572c556e7e799de1cf8eff2b999cf5b878"
"@glimmer/resolver@^0.4.2":
version "0.4.2"
resolved "https://registry.yarnpkg.com/@glimmer/resolver/-/resolver-0.4.2.tgz#60c9b492e90bc3956ac82b3134649bd337e1651c"
dependencies:
"@glimmer/di" "^0.2.0"

Expand Down Expand Up @@ -248,10 +248,6 @@ ast-types@0.8.12:
version "0.8.12"
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.12.tgz#a0d90e4351bb887716c83fd637ebf818af4adfcc"

ast-types@0.8.15:
version "0.8.15"
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52"

ast-types@0.9.6:
version "0.9.6"
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9"
Expand Down Expand Up @@ -528,12 +524,6 @@ babel-plugin-debug-macros@^0.1.10, babel-plugin-debug-macros@^0.1.11:
dependencies:
semver "^5.3.0"

babel-plugin-ember-modules-api-polyfill@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-1.5.0.tgz#5ab880597d44118ee56c21d143f75f245efd4e95"
dependencies:
ember-rfc176-data "^0.2.0"

babel-plugin-ember-modules-api-polyfill@^1.5.1:
version "1.6.0"
resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-1.6.0.tgz#abd1afa4237b3121cb51222f9bf3283cad8990aa"
Expand Down Expand Up @@ -1836,24 +1826,7 @@ ember-cli-babel@^5.1.6:
ember-cli-version-checker "^1.0.2"
resolve "^1.1.2"

ember-cli-babel@^6.0.0-beta.7:
version "6.8.0"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.8.0.tgz#8f8d65e38439e4d343b701bcc0ac6ebd785a0e98"
dependencies:
amd-name-resolver "0.0.7"
babel-plugin-debug-macros "^0.1.11"
babel-plugin-ember-modules-api-polyfill "^1.5.0"
babel-plugin-transform-es2015-modules-amd "^6.24.0"
babel-polyfill "^6.16.0"
babel-preset-env "^1.5.1"
broccoli-babel-transpiler "^6.1.2"
broccoli-debug "^0.6.2"
broccoli-funnel "^1.0.0"
broccoli-source "^1.1.0"
clone "^2.0.0"
ember-cli-version-checker "^2.0.0"

ember-cli-babel@^6.8.1:
ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6.8.1:
version "6.8.1"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.8.1.tgz#695f94c57a9375c2a0e219306a41105d6b937991"
dependencies:
Expand Down Expand Up @@ -2725,7 +2698,7 @@ glob-parent@^2.0.0:
dependencies:
is-glob "^2.0.0"

glob@7.1.1:
glob@7.1.1, glob@^7.0.4, glob@^7.0.5:
version "7.1.1"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
dependencies:
Expand All @@ -2746,17 +2719,6 @@ glob@^5.0.10, glob@^5.0.15:
once "^1.3.0"
path-is-absolute "^1.0.0"

glob@^7.0.4, glob@^7.0.5:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"

global-modules@^0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d"
Expand Down Expand Up @@ -3768,18 +3730,14 @@ minimatch@^2.0.3:
dependencies:
brace-expansion "^1.0.0"

minimist@0.0.8:
minimist@0.0.8, minimist@~0.0.1:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"

minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"

minimist@~0.0.1:
version "0.0.10"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"

mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
Expand Down Expand Up @@ -4250,7 +4208,7 @@ readdirp@^2.0.0:
readable-stream "^2.0.2"
set-immediate-shim "^1.0.1"

recast@0.10.33:
recast@0.10.33, recast@^0.10.10:
version "0.10.33"
resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697"
dependencies:
Expand All @@ -4259,15 +4217,6 @@ recast@0.10.33:
private "~0.1.5"
source-map "~0.5.0"

recast@^0.10.10:
version "0.10.43"
resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f"
dependencies:
ast-types "0.8.15"
esprima-fb "~15001.1001.0-dev-harmony-fb"
private "~0.1.5"
source-map "~0.5.0"

recast@^0.11.17, recast@^0.11.3:
version "0.11.23"
resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3"
Expand Down Expand Up @@ -4697,11 +4646,7 @@ spawn-sync@^1.0.15:
concat-stream "^1.4.7"
os-shim "^0.1.2"

sprintf-js@^1.0.3:
version "1.1.1"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.1.tgz#36be78320afe5801f6cea3ee78b6e5aab940ea0c"

sprintf-js@~1.0.2:
sprintf-js@^1.0.3, sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"

Expand Down