· 6 years ago · Feb 21, 2019, 08:00 AM
1const { argOverProp } = require("@stamp/arg-over-prop");
2const { privatizeMethods } = require("@stamp/privatize");
3
4let instance;
5
6const Base = argOverProp({ account: "XABC-1" });
7
8const WithSecretKey = Base.compose(argOverProp({ secretKey: "my secret key" }));
9
10const WithLogin = WithSecretKey.compose({
11 methods: {
12 login(key) {
13 return this.secretKey === key;
14 },
15 showKey() {
16 console.log(this.secretKey);
17 }
18 }
19});
20instance = WithLogin();
21console.log(instance.account); // XABC-1
22console.log(instance.secretKey); // my secret key
23console.log(instance.login("my secret key")); // true
24console.log(instance.showKey()); // my secret key
25
26const Privaterized = WithLogin.compose(privatizeMethods("showKey"));
27instance = Privaterized();
28console.log(instance.account); // undefined
29console.log(instance.secretKey); // undefined
30console.log(instance.login("my secret key")); // true
31try {
32 console.log(instance.showKey());
33} catch (e) {
34 // TypeError: instance.showKey is not a function
35 console.error(e);
36}