function foo(x) { return { p: x }; } var source = "source"; var sink = foo(source).p; var sink2 = foo("not a source").p; function setP(base, rhs) { base.p = rhs; } var o = {}; setP(o, source); var sink3 = o.p; // flow from `source` not yet detected var sink4 = o.q; var o2 = {}; setP(o2, "not a source"); var sink5 = o2.p; function getP(base) { return base.p; } function getQ(base) { return base.q; } var o3 = { p: source }; var sink6 = getP(o3); var sink7 = getQ(o3); var o4 = {}; setP(o4, source); var sink8 = getP(o4); var sink9 = getQ(o4); var o5 = {}; setP(o5, "not a source"); var sink10 = getP(o5); // semmle-extractor-options: --source-type module