Created
June 30, 2017 19:52
-
-
Save mixonic/832f33325a7a3a849aa777e7a3d90ea0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Talked with @dgeb, and I think this psuedo code would be correct for us to ensure we get the higher precedence for local/private lookups over global when resolving a pair of things: | |
``` | |
` | |
b:/my-app/widgets/top-level | |
a:/my-app/widgets/x-mark | |
b:/my-app/widgets/top-level/x-mark | |
` | |
let source = 'b:/my-app/widgets/top-level'; | |
let sourcedA = di.lookup('a:x-mark', {source}); | |
let sourcedB = di.lookup('b:x-mark', {source}); | |
let globalA = di.lookup('a:x-mark'); | |
let globalB = di.lookup('b:x-mark'); | |
if (sourcedA && sourcedB !== globalB) { | |
return [sourcedA, sourcedB]; | |
} | |
let pairedB; | |
if (a) { | |
pairedB = di.lookup('component', {source: a.meta.moduleName}) // only local resolution | |
} | |
let b = di.lookup('component:x-mark', {source}); | |
if (b) { | |
if (b === pairedB) { | |
// gtg | |
} else { | |
let pairedA = di.lookup('a', {source: b}) | |
a = pairedA; | |
} | |
} | |
let paired = [a,b] | |
return paired; | |
``` |
bothLocal
return [sourceA, sourceB]
!localAndUniqueSourcA && localAndUniqueSourceB
return [null, sourceB]
localAndUniqueSourceA && !localAndUniqueSourceB
return [sourceA, null];
else
return [globalA, globalB]
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
b:/my-app/widgets/top-level
a:/my-app/widgets/x-mark
b:/my-app/widgets/top-level/x-mark
let source = 'b:/my-app/widgets/top-level';
let sourcedA = di.lookup('a:x-mark', {source});
let sourcedB = di.lookup('b:x-mark', {source});
let globalA = di.lookup('a:x-mark');
let globalB = di.lookup('b:x-mark');
let localAndUniqueSourceA = sourcedA && (sourcedA !== globalA);
let localAndUniqueSourceB = sourcedB && (sourcedB !== globalB);
let bothNullA = !sourcedA && !globalA;
let bothNullB = !sourcedB && !globalB;
if (
(localAndUniqueSourceA && localAndUniqueSourceB) ||
(bothNullA && localAndUniqueSourceB) ||
(localAndUniqueSourceA && bothNullB) {
return [ sourcedA, sourcedB ];
}
return [ globalA, globalB ];