Skip to content

Instantly share code, notes, and snippets.

@mixonic
Created June 30, 2017 19:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mixonic/832f33325a7a3a849aa777e7a3d90ea0 to your computer and use it in GitHub Desktop.
Save mixonic/832f33325a7a3a849aa777e7a3d90ea0 to your computer and use it in GitHub Desktop.
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;
```
@iezer
Copy link

iezer commented Jun 30, 2017

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 ];

@iezer
Copy link

iezer commented Jun 30, 2017

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