@teambit/config-store 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/config-cmd.ts ADDED
@@ -0,0 +1,143 @@
1
+ /* eslint max-classes-per-file: 0 */
2
+ import chalk from 'chalk';
3
+ import rightpad from 'pad-right';
4
+ import { BASE_DOCS_DOMAIN } from '@teambit/legacy.constants';
5
+ import { Command, CommandOptions } from '@teambit/cli';
6
+ import { ConfigStoreMain, StoreOrigin } from './config-store.main.runtime';
7
+
8
+ class ConfigSet implements Command {
9
+ name = 'set <key> <val>';
10
+ description = 'set a configuration. default to save it globally';
11
+ extendedDescription = `to set temporary configuration by env variable, prefix with "BIT_CONFIG", replace "." with "_" and change to upper case.
12
+ for example, "user.token" becomes "BIT_CONFIG_USER_TOKEN"`;
13
+ baseUrl = 'reference/config/bit-config/';
14
+ alias = '';
15
+ skipWorkspace = true;
16
+ options = [
17
+ ['l', 'local', 'set the configuration in the current scope (saved in .bit/scope.json)'],
18
+ ['t', 'local-track', 'set the configuration in the current workspace (saved in workspace.jsonc)'],
19
+ ] as CommandOptions;
20
+
21
+ constructor(private configStore: ConfigStoreMain) {}
22
+
23
+ async report([key, value]: [string, string], { local, localTrack }: { local?: boolean, localTrack?: boolean }) {
24
+ const getOrigin = () => {
25
+ if (local) return 'scope';
26
+ if (localTrack) return 'workspace';
27
+ return 'global';
28
+ }
29
+ await this.configStore.setConfig(key, value, getOrigin());
30
+ return chalk.green('added configuration successfully');
31
+ }
32
+ }
33
+
34
+ class ConfigGet implements Command {
35
+ name = 'get <key>';
36
+ description = 'get a value from global configuration';
37
+ alias = '';
38
+ options = [] as CommandOptions;
39
+
40
+ constructor(private configStore: ConfigStoreMain) {}
41
+
42
+ async report([key]: [string]) {
43
+ const value = this.configStore.getConfig(key);
44
+ return value || '';
45
+ }
46
+ }
47
+
48
+ class ConfigList implements Command {
49
+ name = 'list';
50
+ description = 'list all configuration(s)';
51
+ alias = '';
52
+ options = [
53
+ ['o', 'origin <origin>', 'list configuration specifically from the following: [scope, workspace, global]'],
54
+ ['d', 'detailed', 'list all configuration(s) with the origin'],
55
+ ['j', 'json', 'output as JSON'],
56
+ ] as CommandOptions;
57
+
58
+ constructor(private configStore: ConfigStoreMain) {}
59
+
60
+ async report(_, { origin, detailed }: { origin?: StoreOrigin, detailed?: boolean }) {
61
+
62
+ const objToFormattedString = (conf: Record<string, string>) => {
63
+ return Object.entries(conf)
64
+ .map((tuple) => {
65
+ tuple[0] = rightpad(tuple[0], 45, ' ');
66
+ return tuple.join('');
67
+ })
68
+ .join('\n');
69
+ }
70
+
71
+ if (origin) {
72
+ const conf = this.configStore.stores[origin].list();
73
+ return objToFormattedString(conf);
74
+ }
75
+
76
+ if (detailed) {
77
+ const formatTitle = (str: string) => chalk.bold(str.toUpperCase());
78
+ const origins = Object.keys(this.configStore.stores).map((originName) => {
79
+ const conf = this.configStore.stores[originName].list();
80
+ return formatTitle(originName) + '\n' + objToFormattedString(conf);
81
+ }).join('\n\n');
82
+ const combined = this.configStore.listConfig();
83
+
84
+ const combinedFormatted = objToFormattedString(combined);
85
+ return `${origins}\n\n${formatTitle('All Combined')}\n${combinedFormatted}`;
86
+ }
87
+
88
+ const conf = this.configStore.listConfig();
89
+ return objToFormattedString(conf);
90
+ }
91
+
92
+ async json(_, { origin, detailed }: { origin?: StoreOrigin, detailed?: boolean }) {
93
+ if (origin) {
94
+ return this.configStore.stores[origin].list();
95
+ }
96
+ if (detailed) {
97
+ const allStores = Object.keys(this.configStore.stores).reduce((acc, current) => {
98
+ acc[current] = this.configStore.stores[current].list();
99
+ return acc;
100
+ }, {} as Record<string, Record<string, string>>);
101
+ allStores.combined = this.configStore.listConfig();
102
+ return allStores;
103
+ }
104
+ return this.configStore.listConfig();
105
+ }
106
+ }
107
+
108
+ class ConfigDel implements Command {
109
+ name = 'del <key>';
110
+ description = 'delete given key from global configuration';
111
+ alias = '';
112
+ options = [
113
+ ['o', 'origin <origin>', 'default to delete whenever it found first. specify to delete specifically from the following: [scope, workspace, global]'],
114
+ ] as CommandOptions;
115
+
116
+ constructor(private configStore: ConfigStoreMain) {}
117
+
118
+ async report([key]: [string], { origin }: { origin?: StoreOrigin }) {
119
+ await this.configStore.delConfig(key, origin);
120
+ return chalk.green('deleted successfully');
121
+ }
122
+ }
123
+
124
+ export class ConfigCmd implements Command {
125
+ name = 'config';
126
+ description = 'config management';
127
+ extendedDescription = `${BASE_DOCS_DOMAIN}reference/config/bit-config`;
128
+ group = 'general';
129
+ alias = '';
130
+ loadAspects = false;
131
+ commands: Command[] = [];
132
+ options = [] as CommandOptions;
133
+
134
+ constructor(private configStore: ConfigStoreMain) {
135
+ this.commands = [
136
+ new ConfigSet(configStore), new ConfigDel(configStore), new ConfigGet(configStore), new ConfigList(configStore)
137
+ ];
138
+ }
139
+
140
+ async report() {
141
+ return new ConfigList(this.configStore).report(undefined, { });
142
+ }
143
+ }
@@ -0,0 +1,122 @@
1
+ import gitconfig from '@teambit/gitconfig';
2
+ import { isNil } from 'lodash';
3
+ import { GlobalConfig } from '@teambit/legacy.global-config';
4
+
5
+ export const ENV_VARIABLE_CONFIG_PREFIX = 'BIT_CONFIG_';
6
+
7
+ export interface Store {
8
+ list(): Record<string, string>;
9
+ set(key: string, value: string): void;
10
+ del(key: string): void;
11
+ write(): Promise<void>;
12
+ invalidateCache(): Promise<void>;
13
+ }
14
+
15
+ /**
16
+ * Singleton cache for the config object. so it can be used everywhere even by non-aspects components.
17
+ */
18
+ export class ConfigGetter {
19
+ private _store: Record<string, string> | undefined;
20
+ private _globalConfig: GlobalConfig | undefined;
21
+ private gitStore: Record<string, string | undefined> = {};
22
+
23
+ get globalConfig() {
24
+ if (!this._globalConfig) {
25
+ this._globalConfig = GlobalConfig.loadSync();
26
+ }
27
+ return this._globalConfig;
28
+ }
29
+
30
+ get store() {
31
+ if (!this._store) {
32
+ this._store = this.globalConfig.toPlainObject();
33
+ }
34
+ return this._store;
35
+ }
36
+
37
+ /**
38
+ * in case a config-key exists in both, the new one (the given store) wins.
39
+ */
40
+ addStore(store: Store) {
41
+ const currentStore = this.store;
42
+ this._store = { ...currentStore, ...store.list() };
43
+ }
44
+
45
+ getConfig(key: string): string | undefined {
46
+ if (!key) {
47
+ return undefined;
48
+ }
49
+
50
+ const envVarName = toEnvVariableName(key);
51
+ if (process.env[envVarName]) {
52
+ return process.env[envVarName];
53
+ }
54
+
55
+ const store = this.store;
56
+ const val = store[key];
57
+ if (!isNil(val)) {
58
+ return val;
59
+ }
60
+
61
+ if (key in this.gitStore) {
62
+ return this.gitStore[key];
63
+ }
64
+ try {
65
+ const gitVal = gitconfig.get.sync(key);
66
+ this.gitStore[key] = gitVal;
67
+ } catch {
68
+ // Ignore error from git config get
69
+ this.gitStore[key] = undefined;
70
+ }
71
+ return this.gitStore[key];
72
+ }
73
+ getConfigNumeric(key: string): number | undefined {
74
+ const fromConfig = this.getConfig(key);
75
+ if (isNil(fromConfig)) return undefined;
76
+ const num = Number(fromConfig);
77
+ if (Number.isNaN(num)) {
78
+ throw new Error(`config of "${key}" is invalid. Expected number, got "${fromConfig}"`);
79
+ }
80
+ return num;
81
+ }
82
+ getConfigBoolean(key: string): boolean | undefined {
83
+ const result = this.getConfig(key);
84
+ if (isNil(result)) return undefined;
85
+ if (typeof result === 'boolean') return result;
86
+ if (result === 'true') return true;
87
+ if (result === 'false') return false;
88
+ throw new Error(`the configuration "${key}" has an invalid value "${result}". it should be boolean`);
89
+ }
90
+ listConfig() {
91
+ const store = this.store;
92
+ return store;
93
+ }
94
+ invalidateCache() {
95
+ this._store = undefined;
96
+ }
97
+ getGlobalStore(): Store {
98
+ return {
99
+ list: () => this.globalConfig.toPlainObject(),
100
+ set: (key: string, value: string) => this.globalConfig.set(key, value),
101
+ del: (key: string) => this.globalConfig.delete(key),
102
+ write: async () => this.globalConfig.write(),
103
+ invalidateCache: async () => this._globalConfig = undefined,
104
+ };
105
+ }
106
+ }
107
+
108
+ export const configGetter = new ConfigGetter();
109
+
110
+ export function getConfig(key: string): string | undefined {
111
+ return configGetter.getConfig(key);
112
+ }
113
+ export function getNumberFromConfig(key: string): number | undefined {
114
+ return configGetter.getConfigNumeric(key);
115
+ }
116
+ export function listConfig(): Record<string, string> {
117
+ return configGetter.listConfig();
118
+ }
119
+
120
+ function toEnvVariableName(configName: string): string {
121
+ return `${ENV_VARIABLE_CONFIG_PREFIX}${configName.replace(/\./g, '_').toUpperCase()}`;
122
+ }
@@ -0,0 +1,6 @@
1
+ import { Aspect } from '@teambit/harmony';
2
+
3
+ export const ConfigStoreAspect = Aspect.create({
4
+ id: 'teambit.harmony/config-store',
5
+ });
6
+
@@ -0,0 +1,75 @@
1
+ import CLIAspect, { CLIMain, MainRuntime } from '@teambit/cli';
2
+ import { ConfigStoreAspect } from './config-store.aspect';
3
+ import { configGetter, Store } from './config-getter';
4
+ import { ConfigCmd } from './config-cmd';
5
+
6
+ export type StoreOrigin = 'scope' | 'workspace' | 'global';
7
+
8
+ export class ConfigStoreMain {
9
+ private _stores: { [origin: string]: Store } | undefined;
10
+ get stores (): { [origin: string]: Store } {
11
+ if (!this._stores) {
12
+ this._stores = {
13
+ global: configGetter.getGlobalStore()
14
+ };
15
+ }
16
+ return this._stores;
17
+ }
18
+ addStore(origin: StoreOrigin, store: Store) {
19
+ this.stores[origin] = store;
20
+ configGetter.addStore(store);
21
+ }
22
+ async invalidateCache() {
23
+ configGetter.invalidateCache();
24
+ for await (const origin of Object.keys(this.stores)) {
25
+ const store = this.stores[origin];
26
+ await store.invalidateCache();
27
+ configGetter.addStore(store);
28
+ };
29
+ }
30
+ async setConfig(key: string, value: string, origin: StoreOrigin = 'global') {
31
+ const store = this.stores[origin];
32
+ if (!store) throw new Error(`unable to set config, "${origin}" origin is missing`);
33
+ store.set(key, value);
34
+ await store.write();
35
+ await this.invalidateCache();
36
+ }
37
+ getConfig(key: string): string | undefined {
38
+ return configGetter.getConfig(key);
39
+ }
40
+ getConfigBoolean(key: string): boolean | undefined {
41
+ return configGetter.getConfigBoolean(key);
42
+ }
43
+ getConfigNumeric(key: string): number | undefined {
44
+ return configGetter.getConfigNumeric(key);
45
+ }
46
+ async delConfig(key: string, origin?: StoreOrigin) {
47
+ const getOrigin = () => {
48
+ if (origin) return origin;
49
+ return Object.keys(this.stores).find(originName => key in this.stores[originName].list());
50
+ }
51
+ const foundOrigin = getOrigin();
52
+ if (!foundOrigin) return; // if the key is not found in any store (or given store), nothing to do.
53
+ const store = this.stores[foundOrigin];
54
+ store.del(key);
55
+ await store.write();
56
+ await this.invalidateCache();
57
+ }
58
+ listConfig() {
59
+ return configGetter.listConfig();
60
+ }
61
+
62
+ static slots = [];
63
+ static dependencies = [CLIAspect];
64
+ static runtime = MainRuntime;
65
+ static async provider([cli]: [CLIMain]) {
66
+ const configStore = new ConfigStoreMain();
67
+ cli.register(new ConfigCmd(configStore));
68
+ return configStore;
69
+
70
+ }
71
+ }
72
+
73
+ ConfigStoreAspect.addRuntime(ConfigStoreMain);
74
+
75
+ export default ConfigStoreMain;
@@ -0,0 +1,15 @@
1
+ import { Command, CommandOptions } from '@teambit/cli';
2
+ import { ConfigStoreMain } from './config-store.main.runtime';
3
+ export declare class ConfigCmd implements Command {
4
+ private configStore;
5
+ name: string;
6
+ description: string;
7
+ extendedDescription: string;
8
+ group: string;
9
+ alias: string;
10
+ loadAspects: boolean;
11
+ commands: Command[];
12
+ options: CommandOptions;
13
+ constructor(configStore: ConfigStoreMain);
14
+ report(): Promise<string>;
15
+ }
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ConfigCmd = void 0;
7
+ function _chalk() {
8
+ const data = _interopRequireDefault(require("chalk"));
9
+ _chalk = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _padRight() {
15
+ const data = _interopRequireDefault(require("pad-right"));
16
+ _padRight = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ function _legacy() {
22
+ const data = require("@teambit/legacy.constants");
23
+ _legacy = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
29
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
30
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
31
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint max-classes-per-file: 0 */
32
+ class ConfigSet {
33
+ constructor(configStore) {
34
+ this.configStore = configStore;
35
+ _defineProperty(this, "name", 'set <key> <val>');
36
+ _defineProperty(this, "description", 'set a configuration. default to save it globally');
37
+ _defineProperty(this, "extendedDescription", `to set temporary configuration by env variable, prefix with "BIT_CONFIG", replace "." with "_" and change to upper case.
38
+ for example, "user.token" becomes "BIT_CONFIG_USER_TOKEN"`);
39
+ _defineProperty(this, "baseUrl", 'reference/config/bit-config/');
40
+ _defineProperty(this, "alias", '');
41
+ _defineProperty(this, "skipWorkspace", true);
42
+ _defineProperty(this, "options", [['l', 'local', 'set the configuration in the current scope (saved in .bit/scope.json)'], ['t', 'local-track', 'set the configuration in the current workspace (saved in workspace.jsonc)']]);
43
+ }
44
+ async report([key, value], {
45
+ local,
46
+ localTrack
47
+ }) {
48
+ const getOrigin = () => {
49
+ if (local) return 'scope';
50
+ if (localTrack) return 'workspace';
51
+ return 'global';
52
+ };
53
+ await this.configStore.setConfig(key, value, getOrigin());
54
+ return _chalk().default.green('added configuration successfully');
55
+ }
56
+ }
57
+ class ConfigGet {
58
+ constructor(configStore) {
59
+ this.configStore = configStore;
60
+ _defineProperty(this, "name", 'get <key>');
61
+ _defineProperty(this, "description", 'get a value from global configuration');
62
+ _defineProperty(this, "alias", '');
63
+ _defineProperty(this, "options", []);
64
+ }
65
+ async report([key]) {
66
+ const value = this.configStore.getConfig(key);
67
+ return value || '';
68
+ }
69
+ }
70
+ class ConfigList {
71
+ constructor(configStore) {
72
+ this.configStore = configStore;
73
+ _defineProperty(this, "name", 'list');
74
+ _defineProperty(this, "description", 'list all configuration(s)');
75
+ _defineProperty(this, "alias", '');
76
+ _defineProperty(this, "options", [['o', 'origin <origin>', 'list configuration specifically from the following: [scope, workspace, global]'], ['d', 'detailed', 'list all configuration(s) with the origin'], ['j', 'json', 'output as JSON']]);
77
+ }
78
+ async report(_, {
79
+ origin,
80
+ detailed
81
+ }) {
82
+ const objToFormattedString = conf => {
83
+ return Object.entries(conf).map(tuple => {
84
+ tuple[0] = (0, _padRight().default)(tuple[0], 45, ' ');
85
+ return tuple.join('');
86
+ }).join('\n');
87
+ };
88
+ if (origin) {
89
+ const conf = this.configStore.stores[origin].list();
90
+ return objToFormattedString(conf);
91
+ }
92
+ if (detailed) {
93
+ const formatTitle = str => _chalk().default.bold(str.toUpperCase());
94
+ const origins = Object.keys(this.configStore.stores).map(originName => {
95
+ const conf = this.configStore.stores[originName].list();
96
+ return formatTitle(originName) + '\n' + objToFormattedString(conf);
97
+ }).join('\n\n');
98
+ const combined = this.configStore.listConfig();
99
+ const combinedFormatted = objToFormattedString(combined);
100
+ return `${origins}\n\n${formatTitle('All Combined')}\n${combinedFormatted}`;
101
+ }
102
+ const conf = this.configStore.listConfig();
103
+ return objToFormattedString(conf);
104
+ }
105
+ async json(_, {
106
+ origin,
107
+ detailed
108
+ }) {
109
+ if (origin) {
110
+ return this.configStore.stores[origin].list();
111
+ }
112
+ if (detailed) {
113
+ const allStores = Object.keys(this.configStore.stores).reduce((acc, current) => {
114
+ acc[current] = this.configStore.stores[current].list();
115
+ return acc;
116
+ }, {});
117
+ allStores.combined = this.configStore.listConfig();
118
+ return allStores;
119
+ }
120
+ return this.configStore.listConfig();
121
+ }
122
+ }
123
+ class ConfigDel {
124
+ constructor(configStore) {
125
+ this.configStore = configStore;
126
+ _defineProperty(this, "name", 'del <key>');
127
+ _defineProperty(this, "description", 'delete given key from global configuration');
128
+ _defineProperty(this, "alias", '');
129
+ _defineProperty(this, "options", [['o', 'origin <origin>', 'default to delete whenever it found first. specify to delete specifically from the following: [scope, workspace, global]']]);
130
+ }
131
+ async report([key], {
132
+ origin
133
+ }) {
134
+ await this.configStore.delConfig(key, origin);
135
+ return _chalk().default.green('deleted successfully');
136
+ }
137
+ }
138
+ class ConfigCmd {
139
+ constructor(configStore) {
140
+ this.configStore = configStore;
141
+ _defineProperty(this, "name", 'config');
142
+ _defineProperty(this, "description", 'config management');
143
+ _defineProperty(this, "extendedDescription", `${_legacy().BASE_DOCS_DOMAIN}reference/config/bit-config`);
144
+ _defineProperty(this, "group", 'general');
145
+ _defineProperty(this, "alias", '');
146
+ _defineProperty(this, "loadAspects", false);
147
+ _defineProperty(this, "commands", []);
148
+ _defineProperty(this, "options", []);
149
+ this.commands = [new ConfigSet(configStore), new ConfigDel(configStore), new ConfigGet(configStore), new ConfigList(configStore)];
150
+ }
151
+ async report() {
152
+ return new ConfigList(this.configStore).report(undefined, {});
153
+ }
154
+ }
155
+ exports.ConfigCmd = ConfigCmd;
156
+
157
+ //# sourceMappingURL=config-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_chalk","data","_interopRequireDefault","require","_padRight","_legacy","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ConfigSet","constructor","configStore","report","key","local","localTrack","getOrigin","setConfig","chalk","green","ConfigGet","getConfig","ConfigList","_","origin","detailed","objToFormattedString","conf","entries","map","tuple","rightpad","join","stores","list","formatTitle","str","bold","toUpperCase","origins","keys","originName","combined","listConfig","combinedFormatted","json","allStores","reduce","acc","current","ConfigDel","delConfig","ConfigCmd","BASE_DOCS_DOMAIN","commands","undefined","exports"],"sources":["config-cmd.ts"],"sourcesContent":["/* eslint max-classes-per-file: 0 */\nimport chalk from 'chalk';\nimport rightpad from 'pad-right';\nimport { BASE_DOCS_DOMAIN } from '@teambit/legacy.constants';\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { ConfigStoreMain, StoreOrigin } from './config-store.main.runtime';\n\nclass ConfigSet implements Command {\n name = 'set <key> <val>';\n description = 'set a configuration. default to save it globally';\n extendedDescription = `to set temporary configuration by env variable, prefix with \"BIT_CONFIG\", replace \".\" with \"_\" and change to upper case.\nfor example, \"user.token\" becomes \"BIT_CONFIG_USER_TOKEN\"`;\n baseUrl = 'reference/config/bit-config/';\n alias = '';\n skipWorkspace = true;\n options = [\n ['l', 'local', 'set the configuration in the current scope (saved in .bit/scope.json)'],\n ['t', 'local-track', 'set the configuration in the current workspace (saved in workspace.jsonc)'],\n ] as CommandOptions;\n\n constructor(private configStore: ConfigStoreMain) {}\n\n async report([key, value]: [string, string], { local, localTrack }: { local?: boolean, localTrack?: boolean }) {\n const getOrigin = () => {\n if (local) return 'scope';\n if (localTrack) return 'workspace';\n return 'global';\n }\n await this.configStore.setConfig(key, value, getOrigin());\n return chalk.green('added configuration successfully');\n }\n}\n\nclass ConfigGet implements Command {\n name = 'get <key>';\n description = 'get a value from global configuration';\n alias = '';\n options = [] as CommandOptions;\n\n constructor(private configStore: ConfigStoreMain) {}\n\n async report([key]: [string]) {\n const value = this.configStore.getConfig(key);\n return value || '';\n }\n}\n\nclass ConfigList implements Command {\n name = 'list';\n description = 'list all configuration(s)';\n alias = '';\n options = [\n ['o', 'origin <origin>', 'list configuration specifically from the following: [scope, workspace, global]'],\n ['d', 'detailed', 'list all configuration(s) with the origin'],\n ['j', 'json', 'output as JSON'],\n ] as CommandOptions;\n\n constructor(private configStore: ConfigStoreMain) {}\n\n async report(_, { origin, detailed }: { origin?: StoreOrigin, detailed?: boolean }) {\n\n const objToFormattedString = (conf: Record<string, string>) => {\n return Object.entries(conf)\n .map((tuple) => {\n tuple[0] = rightpad(tuple[0], 45, ' ');\n return tuple.join('');\n })\n .join('\\n');\n }\n\n if (origin) {\n const conf = this.configStore.stores[origin].list();\n return objToFormattedString(conf);\n }\n\n if (detailed) {\n const formatTitle = (str: string) => chalk.bold(str.toUpperCase());\n const origins = Object.keys(this.configStore.stores).map((originName) => {\n const conf = this.configStore.stores[originName].list();\n return formatTitle(originName) + '\\n' + objToFormattedString(conf);\n }).join('\\n\\n');\n const combined = this.configStore.listConfig();\n\n const combinedFormatted = objToFormattedString(combined);\n return `${origins}\\n\\n${formatTitle('All Combined')}\\n${combinedFormatted}`;\n }\n\n const conf = this.configStore.listConfig();\n return objToFormattedString(conf);\n }\n\n async json(_, { origin, detailed }: { origin?: StoreOrigin, detailed?: boolean }) {\n if (origin) {\n return this.configStore.stores[origin].list();\n }\n if (detailed) {\n const allStores = Object.keys(this.configStore.stores).reduce((acc, current) => {\n acc[current] = this.configStore.stores[current].list();\n return acc;\n }, {} as Record<string, Record<string, string>>);\n allStores.combined = this.configStore.listConfig();\n return allStores;\n }\n return this.configStore.listConfig();\n }\n}\n\nclass ConfigDel implements Command {\n name = 'del <key>';\n description = 'delete given key from global configuration';\n alias = '';\n options = [\n ['o', 'origin <origin>', 'default to delete whenever it found first. specify to delete specifically from the following: [scope, workspace, global]'],\n ] as CommandOptions;\n\n constructor(private configStore: ConfigStoreMain) {}\n\n async report([key]: [string], { origin }: { origin?: StoreOrigin }) {\n await this.configStore.delConfig(key, origin);\n return chalk.green('deleted successfully');\n }\n}\n\nexport class ConfigCmd implements Command {\n name = 'config';\n description = 'config management';\n extendedDescription = `${BASE_DOCS_DOMAIN}reference/config/bit-config`;\n group = 'general';\n alias = '';\n loadAspects = false;\n commands: Command[] = [];\n options = [] as CommandOptions;\n\n constructor(private configStore: ConfigStoreMain) {\n this.commands = [\n new ConfigSet(configStore), new ConfigDel(configStore), new ConfigGet(configStore), new ConfigList(configStore)\n ];\n }\n\n async report() {\n return new ConfigList(this.configStore).report(undefined, { });\n }\n}\n"],"mappings":";;;;;;AACA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,UAAA;EAAA,MAAAH,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAC,SAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,QAAA;EAAA,MAAAJ,IAAA,GAAAE,OAAA;EAAAE,OAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA6D,SAAAC,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,gBAAAH,CAAA,EAAAI,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAJ,CAAA,GAAAO,MAAA,CAAAC,cAAA,CAAAR,CAAA,EAAAI,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAZ,CAAA,CAAAI,CAAA,IAAAC,CAAA,EAAAL,CAAA;AAAA,SAAAM,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAL,CAAA,GAAAK,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAhB,CAAA,QAAAa,CAAA,GAAAb,CAAA,CAAAiB,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA,KAH7D;AAOA,MAAMgB,SAAS,CAAoB;EAajCC,WAAWA,CAASC,WAA4B,EAAE;IAAA,KAA9BA,WAA4B,GAA5BA,WAA4B;IAAApB,eAAA,eAZzC,iBAAiB;IAAAA,eAAA,sBACV,kDAAkD;IAAAA,eAAA,8BAC1C;AACxB,0DAA0D;IAAAA,eAAA,kBAC9C,8BAA8B;IAAAA,eAAA,gBAChC,EAAE;IAAAA,eAAA,wBACM,IAAI;IAAAA,eAAA,kBACV,CACR,CAAC,GAAG,EAAE,OAAO,EAAE,uEAAuE,CAAC,EACvF,CAAC,GAAG,EAAE,aAAa,EAAE,2EAA2E,CAAC,CAClG;EAEkD;EAEnD,MAAMqB,MAAMA,CAAC,CAACC,GAAG,EAAEhB,KAAK,CAAmB,EAAE;IAAEiB,KAAK;IAAEC;EAAsD,CAAC,EAAE;IAC7G,MAAMC,SAAS,GAAGA,CAAA,KAAM;MACtB,IAAIF,KAAK,EAAE,OAAO,OAAO;MACzB,IAAIC,UAAU,EAAE,OAAO,WAAW;MAClC,OAAO,QAAQ;IACjB,CAAC;IACD,MAAM,IAAI,CAACJ,WAAW,CAACM,SAAS,CAACJ,GAAG,EAAEhB,KAAK,EAAEmB,SAAS,CAAC,CAAC,CAAC;IACzD,OAAOE,gBAAK,CAACC,KAAK,CAAC,kCAAkC,CAAC;EACxD;AACF;AAEA,MAAMC,SAAS,CAAoB;EAMjCV,WAAWA,CAASC,WAA4B,EAAE;IAAA,KAA9BA,WAA4B,GAA5BA,WAA4B;IAAApB,eAAA,eALzC,WAAW;IAAAA,eAAA,sBACJ,uCAAuC;IAAAA,eAAA,gBAC7C,EAAE;IAAAA,eAAA,kBACA,EAAE;EAEuC;EAEnD,MAAMqB,MAAMA,CAAC,CAACC,GAAG,CAAW,EAAE;IAC5B,MAAMhB,KAAK,GAAG,IAAI,CAACc,WAAW,CAACU,SAAS,CAACR,GAAG,CAAC;IAC7C,OAAOhB,KAAK,IAAI,EAAE;EACpB;AACF;AAEA,MAAMyB,UAAU,CAAoB;EAUlCZ,WAAWA,CAASC,WAA4B,EAAE;IAAA,KAA9BA,WAA4B,GAA5BA,WAA4B;IAAApB,eAAA,eATzC,MAAM;IAAAA,eAAA,sBACC,2BAA2B;IAAAA,eAAA,gBACjC,EAAE;IAAAA,eAAA,kBACA,CACR,CAAC,GAAG,EAAE,iBAAiB,EAAE,gFAAgF,CAAC,EAC1G,CAAC,GAAG,EAAE,UAAU,EAAE,2CAA2C,CAAC,EAC9D,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAChC;EAEkD;EAEnD,MAAMqB,MAAMA,CAACW,CAAC,EAAE;IAAEC,MAAM;IAAEC;EAAuD,CAAC,EAAE;IAElF,MAAMC,oBAAoB,GAAIC,IAA4B,IAAK;MAC7D,OAAOhC,MAAM,CAACiC,OAAO,CAACD,IAAI,CAAC,CAC1BE,GAAG,CAAEC,KAAK,IAAK;QACdA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAAC,mBAAQ,EAACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;QACtC,OAAOA,KAAK,CAACE,IAAI,CAAC,EAAE,CAAC;MACvB,CAAC,CAAC,CACDA,IAAI,CAAC,IAAI,CAAC;IACb,CAAC;IAED,IAAIR,MAAM,EAAE;MACV,MAAMG,IAAI,GAAG,IAAI,CAAChB,WAAW,CAACsB,MAAM,CAACT,MAAM,CAAC,CAACU,IAAI,CAAC,CAAC;MACnD,OAAOR,oBAAoB,CAACC,IAAI,CAAC;IACnC;IAEA,IAAIF,QAAQ,EAAE;MACZ,MAAMU,WAAW,GAAIC,GAAW,IAAKlB,gBAAK,CAACmB,IAAI,CAACD,GAAG,CAACE,WAAW,CAAC,CAAC,CAAC;MAClE,MAAMC,OAAO,GAAG5C,MAAM,CAAC6C,IAAI,CAAC,IAAI,CAAC7B,WAAW,CAACsB,MAAM,CAAC,CAACJ,GAAG,CAAEY,UAAU,IAAK;QACvE,MAAMd,IAAI,GAAG,IAAI,CAAChB,WAAW,CAACsB,MAAM,CAACQ,UAAU,CAAC,CAACP,IAAI,CAAC,CAAC;QACvD,OAAOC,WAAW,CAACM,UAAU,CAAC,GAAG,IAAI,GAAGf,oBAAoB,CAACC,IAAI,CAAC;MACpE,CAAC,CAAC,CAACK,IAAI,CAAC,MAAM,CAAC;MACf,MAAMU,QAAQ,GAAG,IAAI,CAAC/B,WAAW,CAACgC,UAAU,CAAC,CAAC;MAE9C,MAAMC,iBAAiB,GAAGlB,oBAAoB,CAACgB,QAAQ,CAAC;MACxD,OAAO,GAAGH,OAAO,OAAOJ,WAAW,CAAC,cAAc,CAAC,KAAKS,iBAAiB,EAAE;IAC7E;IAEA,MAAMjB,IAAI,GAAG,IAAI,CAAChB,WAAW,CAACgC,UAAU,CAAC,CAAC;IAC1C,OAAOjB,oBAAoB,CAACC,IAAI,CAAC;EACnC;EAEA,MAAMkB,IAAIA,CAACtB,CAAC,EAAE;IAAEC,MAAM;IAAEC;EAAuD,CAAC,EAAE;IAChF,IAAID,MAAM,EAAE;MACV,OAAO,IAAI,CAACb,WAAW,CAACsB,MAAM,CAACT,MAAM,CAAC,CAACU,IAAI,CAAC,CAAC;IAC/C;IACA,IAAIT,QAAQ,EAAE;MACZ,MAAMqB,SAAS,GAAGnD,MAAM,CAAC6C,IAAI,CAAC,IAAI,CAAC7B,WAAW,CAACsB,MAAM,CAAC,CAACc,MAAM,CAAC,CAACC,GAAG,EAAEC,OAAO,KAAK;QAC9ED,GAAG,CAACC,OAAO,CAAC,GAAG,IAAI,CAACtC,WAAW,CAACsB,MAAM,CAACgB,OAAO,CAAC,CAACf,IAAI,CAAC,CAAC;QACtD,OAAOc,GAAG;MACZ,CAAC,EAAE,CAAC,CAA2C,CAAC;MAChDF,SAAS,CAACJ,QAAQ,GAAG,IAAI,CAAC/B,WAAW,CAACgC,UAAU,CAAC,CAAC;MAClD,OAAOG,SAAS;IAClB;IACA,OAAO,IAAI,CAACnC,WAAW,CAACgC,UAAU,CAAC,CAAC;EACtC;AACF;AAEA,MAAMO,SAAS,CAAoB;EAQjCxC,WAAWA,CAASC,WAA4B,EAAE;IAAA,KAA9BA,WAA4B,GAA5BA,WAA4B;IAAApB,eAAA,eAPzC,WAAW;IAAAA,eAAA,sBACJ,4CAA4C;IAAAA,eAAA,gBAClD,EAAE;IAAAA,eAAA,kBACA,CACR,CAAC,GAAG,EAAE,iBAAiB,EAAE,0HAA0H,CAAC,CACrJ;EAEkD;EAEnD,MAAMqB,MAAMA,CAAC,CAACC,GAAG,CAAW,EAAE;IAAEW;EAAiC,CAAC,EAAE;IAClE,MAAM,IAAI,CAACb,WAAW,CAACwC,SAAS,CAACtC,GAAG,EAAEW,MAAM,CAAC;IAC7C,OAAON,gBAAK,CAACC,KAAK,CAAC,sBAAsB,CAAC;EAC5C;AACF;AAEO,MAAMiC,SAAS,CAAoB;EAUxC1C,WAAWA,CAASC,WAA4B,EAAE;IAAA,KAA9BA,WAA4B,GAA5BA,WAA4B;IAAApB,eAAA,eATzC,QAAQ;IAAAA,eAAA,sBACD,mBAAmB;IAAAA,eAAA,8BACX,GAAG8D,0BAAgB,6BAA6B;IAAA9D,eAAA,gBAC9D,SAAS;IAAAA,eAAA,gBACT,EAAE;IAAAA,eAAA,sBACI,KAAK;IAAAA,eAAA,mBACG,EAAE;IAAAA,eAAA,kBACd,EAAE;IAGV,IAAI,CAAC+D,QAAQ,GAAG,CACd,IAAI7C,SAAS,CAACE,WAAW,CAAC,EAAE,IAAIuC,SAAS,CAACvC,WAAW,CAAC,EAAE,IAAIS,SAAS,CAACT,WAAW,CAAC,EAAE,IAAIW,UAAU,CAACX,WAAW,CAAC,CAChH;EACH;EAEA,MAAMC,MAAMA,CAAA,EAAG;IACb,OAAO,IAAIU,UAAU,CAAC,IAAI,CAACX,WAAW,CAAC,CAACC,MAAM,CAAC2C,SAAS,EAAE,CAAE,CAAC,CAAC;EAChE;AACF;AAACC,OAAA,CAAAJ,SAAA,GAAAA,SAAA","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ import { GlobalConfig } from '@teambit/legacy.global-config';
2
+ export declare const ENV_VARIABLE_CONFIG_PREFIX = "BIT_CONFIG_";
3
+ export interface Store {
4
+ list(): Record<string, string>;
5
+ set(key: string, value: string): void;
6
+ del(key: string): void;
7
+ write(): Promise<void>;
8
+ invalidateCache(): Promise<void>;
9
+ }
10
+ /**
11
+ * Singleton cache for the config object. so it can be used everywhere even by non-aspects components.
12
+ */
13
+ export declare class ConfigGetter {
14
+ private _store;
15
+ private _globalConfig;
16
+ private gitStore;
17
+ get globalConfig(): GlobalConfig;
18
+ get store(): Record<string, string>;
19
+ /**
20
+ * in case a config-key exists in both, the new one (the given store) wins.
21
+ */
22
+ addStore(store: Store): void;
23
+ getConfig(key: string): string | undefined;
24
+ getConfigNumeric(key: string): number | undefined;
25
+ getConfigBoolean(key: string): boolean | undefined;
26
+ listConfig(): Record<string, string>;
27
+ invalidateCache(): void;
28
+ getGlobalStore(): Store;
29
+ }
30
+ export declare const configGetter: ConfigGetter;
31
+ export declare function getConfig(key: string): string | undefined;
32
+ export declare function getNumberFromConfig(key: string): number | undefined;
33
+ export declare function listConfig(): Record<string, string>;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.configGetter = exports.ENV_VARIABLE_CONFIG_PREFIX = exports.ConfigGetter = void 0;
7
+ exports.getConfig = getConfig;
8
+ exports.getNumberFromConfig = getNumberFromConfig;
9
+ exports.listConfig = listConfig;
10
+ function _gitconfig() {
11
+ const data = _interopRequireDefault(require("@teambit/gitconfig"));
12
+ _gitconfig = function () {
13
+ return data;
14
+ };
15
+ return data;
16
+ }
17
+ function _lodash() {
18
+ const data = require("lodash");
19
+ _lodash = function () {
20
+ return data;
21
+ };
22
+ return data;
23
+ }
24
+ function _legacy() {
25
+ const data = require("@teambit/legacy.global-config");
26
+ _legacy = function () {
27
+ return data;
28
+ };
29
+ return data;
30
+ }
31
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
32
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
33
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
34
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
35
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
36
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
37
+ const ENV_VARIABLE_CONFIG_PREFIX = exports.ENV_VARIABLE_CONFIG_PREFIX = 'BIT_CONFIG_';
38
+ /**
39
+ * Singleton cache for the config object. so it can be used everywhere even by non-aspects components.
40
+ */
41
+ class ConfigGetter {
42
+ constructor() {
43
+ _defineProperty(this, "_store", void 0);
44
+ _defineProperty(this, "_globalConfig", void 0);
45
+ _defineProperty(this, "gitStore", {});
46
+ }
47
+ get globalConfig() {
48
+ if (!this._globalConfig) {
49
+ this._globalConfig = _legacy().GlobalConfig.loadSync();
50
+ }
51
+ return this._globalConfig;
52
+ }
53
+ get store() {
54
+ if (!this._store) {
55
+ this._store = this.globalConfig.toPlainObject();
56
+ }
57
+ return this._store;
58
+ }
59
+
60
+ /**
61
+ * in case a config-key exists in both, the new one (the given store) wins.
62
+ */
63
+ addStore(store) {
64
+ const currentStore = this.store;
65
+ this._store = _objectSpread(_objectSpread({}, currentStore), store.list());
66
+ }
67
+ getConfig(key) {
68
+ if (!key) {
69
+ return undefined;
70
+ }
71
+ const envVarName = toEnvVariableName(key);
72
+ if (process.env[envVarName]) {
73
+ return process.env[envVarName];
74
+ }
75
+ const store = this.store;
76
+ const val = store[key];
77
+ if (!(0, _lodash().isNil)(val)) {
78
+ return val;
79
+ }
80
+ if (key in this.gitStore) {
81
+ return this.gitStore[key];
82
+ }
83
+ try {
84
+ const gitVal = _gitconfig().default.get.sync(key);
85
+ this.gitStore[key] = gitVal;
86
+ } catch {
87
+ // Ignore error from git config get
88
+ this.gitStore[key] = undefined;
89
+ }
90
+ return this.gitStore[key];
91
+ }
92
+ getConfigNumeric(key) {
93
+ const fromConfig = this.getConfig(key);
94
+ if ((0, _lodash().isNil)(fromConfig)) return undefined;
95
+ const num = Number(fromConfig);
96
+ if (Number.isNaN(num)) {
97
+ throw new Error(`config of "${key}" is invalid. Expected number, got "${fromConfig}"`);
98
+ }
99
+ return num;
100
+ }
101
+ getConfigBoolean(key) {
102
+ const result = this.getConfig(key);
103
+ if ((0, _lodash().isNil)(result)) return undefined;
104
+ if (typeof result === 'boolean') return result;
105
+ if (result === 'true') return true;
106
+ if (result === 'false') return false;
107
+ throw new Error(`the configuration "${key}" has an invalid value "${result}". it should be boolean`);
108
+ }
109
+ listConfig() {
110
+ const store = this.store;
111
+ return store;
112
+ }
113
+ invalidateCache() {
114
+ this._store = undefined;
115
+ }
116
+ getGlobalStore() {
117
+ return {
118
+ list: () => this.globalConfig.toPlainObject(),
119
+ set: (key, value) => this.globalConfig.set(key, value),
120
+ del: key => this.globalConfig.delete(key),
121
+ write: async () => this.globalConfig.write(),
122
+ invalidateCache: async () => this._globalConfig = undefined
123
+ };
124
+ }
125
+ }
126
+ exports.ConfigGetter = ConfigGetter;
127
+ const configGetter = exports.configGetter = new ConfigGetter();
128
+ function getConfig(key) {
129
+ return configGetter.getConfig(key);
130
+ }
131
+ function getNumberFromConfig(key) {
132
+ return configGetter.getConfigNumeric(key);
133
+ }
134
+ function listConfig() {
135
+ return configGetter.listConfig();
136
+ }
137
+ function toEnvVariableName(configName) {
138
+ return `${ENV_VARIABLE_CONFIG_PREFIX}${configName.replace(/\./g, '_').toUpperCase()}`;
139
+ }
140
+
141
+ //# sourceMappingURL=config-getter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_gitconfig","data","_interopRequireDefault","require","_lodash","_legacy","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ENV_VARIABLE_CONFIG_PREFIX","exports","ConfigGetter","constructor","globalConfig","_globalConfig","GlobalConfig","loadSync","store","_store","toPlainObject","addStore","currentStore","list","getConfig","key","undefined","envVarName","toEnvVariableName","process","env","val","isNil","gitStore","gitVal","gitconfig","get","sync","getConfigNumeric","fromConfig","num","isNaN","Error","getConfigBoolean","result","listConfig","invalidateCache","getGlobalStore","set","del","delete","write","configGetter","getNumberFromConfig","configName","replace","toUpperCase"],"sources":["config-getter.ts"],"sourcesContent":["import gitconfig from '@teambit/gitconfig';\nimport { isNil } from 'lodash';\nimport { GlobalConfig } from '@teambit/legacy.global-config';\n\nexport const ENV_VARIABLE_CONFIG_PREFIX = 'BIT_CONFIG_';\n\nexport interface Store {\n list(): Record<string, string>;\n set(key: string, value: string): void;\n del(key: string): void;\n write(): Promise<void>;\n invalidateCache(): Promise<void>;\n}\n\n/**\n * Singleton cache for the config object. so it can be used everywhere even by non-aspects components.\n */\nexport class ConfigGetter {\n private _store: Record<string, string> | undefined;\n private _globalConfig: GlobalConfig | undefined;\n private gitStore: Record<string, string | undefined> = {};\n\n get globalConfig() {\n if (!this._globalConfig) {\n this._globalConfig = GlobalConfig.loadSync();\n }\n return this._globalConfig;\n }\n\n get store() {\n if (!this._store) {\n this._store = this.globalConfig.toPlainObject();\n }\n return this._store;\n }\n\n /**\n * in case a config-key exists in both, the new one (the given store) wins.\n */\n addStore(store: Store) {\n const currentStore = this.store;\n this._store = { ...currentStore, ...store.list() };\n }\n\n getConfig(key: string): string | undefined {\n if (!key) {\n return undefined;\n }\n\n const envVarName = toEnvVariableName(key);\n if (process.env[envVarName]) {\n return process.env[envVarName];\n }\n\n const store = this.store;\n const val = store[key];\n if (!isNil(val)) {\n return val;\n }\n\n if (key in this.gitStore) {\n return this.gitStore[key];\n }\n try {\n const gitVal = gitconfig.get.sync(key);\n this.gitStore[key] = gitVal;\n } catch {\n // Ignore error from git config get\n this.gitStore[key] = undefined;\n }\n return this.gitStore[key];\n }\n getConfigNumeric(key: string): number | undefined {\n const fromConfig = this.getConfig(key);\n if (isNil(fromConfig)) return undefined;\n const num = Number(fromConfig);\n if (Number.isNaN(num)) {\n throw new Error(`config of \"${key}\" is invalid. Expected number, got \"${fromConfig}\"`);\n }\n return num;\n }\n getConfigBoolean(key: string): boolean | undefined {\n const result = this.getConfig(key);\n if (isNil(result)) return undefined;\n if (typeof result === 'boolean') return result;\n if (result === 'true') return true;\n if (result === 'false') return false;\n throw new Error(`the configuration \"${key}\" has an invalid value \"${result}\". it should be boolean`);\n }\n listConfig() {\n const store = this.store;\n return store;\n }\n invalidateCache() {\n this._store = undefined;\n }\n getGlobalStore(): Store {\n return {\n list: () => this.globalConfig.toPlainObject(),\n set: (key: string, value: string) => this.globalConfig.set(key, value),\n del: (key: string) => this.globalConfig.delete(key),\n write: async () => this.globalConfig.write(),\n invalidateCache: async () => this._globalConfig = undefined,\n };\n }\n}\n\nexport const configGetter = new ConfigGetter();\n\nexport function getConfig(key: string): string | undefined {\n return configGetter.getConfig(key);\n}\nexport function getNumberFromConfig(key: string): number | undefined {\n return configGetter.getConfigNumeric(key);\n}\nexport function listConfig(): Record<string, string> {\n return configGetter.listConfig();\n}\n\nfunction toEnvVariableName(configName: string): string {\n return `${ENV_VARIABLE_CONFIG_PREFIX}${configName.replace(/\\./g, '_').toUpperCase()}`;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import { Aspect } from '@teambit/harmony';
2
+ export declare const ConfigStoreAspect: Aspect;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ConfigStoreAspect = void 0;
7
+ function _harmony() {
8
+ const data = require("@teambit/harmony");
9
+ _harmony = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ const ConfigStoreAspect = exports.ConfigStoreAspect = _harmony().Aspect.create({
15
+ id: 'teambit.harmony/config-store'
16
+ });
17
+
18
+ //# sourceMappingURL=config-store.aspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_harmony","data","require","ConfigStoreAspect","exports","Aspect","create","id"],"sources":["config-store.aspect.ts"],"sourcesContent":["import { Aspect } from '@teambit/harmony';\n\nexport const ConfigStoreAspect = Aspect.create({\n id: 'teambit.harmony/config-store',\n});\n "],"mappings":";;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAME,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAGE,iBAAM,CAACC,MAAM,CAAC;EAC7CC,EAAE,EAAE;AACN,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ import { CLIMain } from '@teambit/cli';
2
+ import { Store } from './config-getter';
3
+ export type StoreOrigin = 'scope' | 'workspace' | 'global';
4
+ export declare class ConfigStoreMain {
5
+ private _stores;
6
+ get stores(): {
7
+ [origin: string]: Store;
8
+ };
9
+ addStore(origin: StoreOrigin, store: Store): void;
10
+ invalidateCache(): Promise<void>;
11
+ setConfig(key: string, value: string, origin?: StoreOrigin): Promise<void>;
12
+ getConfig(key: string): string | undefined;
13
+ getConfigBoolean(key: string): boolean | undefined;
14
+ getConfigNumeric(key: string): number | undefined;
15
+ delConfig(key: string, origin?: StoreOrigin): Promise<void>;
16
+ listConfig(): Record<string, string>;
17
+ static slots: never[];
18
+ static dependencies: import("@teambit/harmony").Aspect[];
19
+ static runtime: import("@teambit/harmony").RuntimeDefinition;
20
+ static provider([cli]: [CLIMain]): Promise<ConfigStoreMain>;
21
+ }
22
+ export default ConfigStoreMain;
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.ConfigStoreMain = void 0;
7
+ function _cli() {
8
+ const data = _interopRequireWildcard(require("@teambit/cli"));
9
+ _cli = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _configStore() {
15
+ const data = require("./config-store.aspect");
16
+ _configStore = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ function _configGetter() {
22
+ const data = require("./config-getter");
23
+ _configGetter = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _configCmd() {
29
+ const data = require("./config-cmd");
30
+ _configCmd = function () {
31
+ return data;
32
+ };
33
+ return data;
34
+ }
35
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
36
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
37
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
38
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
39
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
40
+ class ConfigStoreMain {
41
+ constructor() {
42
+ _defineProperty(this, "_stores", void 0);
43
+ }
44
+ get stores() {
45
+ if (!this._stores) {
46
+ this._stores = {
47
+ global: _configGetter().configGetter.getGlobalStore()
48
+ };
49
+ }
50
+ return this._stores;
51
+ }
52
+ addStore(origin, store) {
53
+ this.stores[origin] = store;
54
+ _configGetter().configGetter.addStore(store);
55
+ }
56
+ async invalidateCache() {
57
+ _configGetter().configGetter.invalidateCache();
58
+ for await (const origin of Object.keys(this.stores)) {
59
+ const store = this.stores[origin];
60
+ await store.invalidateCache();
61
+ _configGetter().configGetter.addStore(store);
62
+ }
63
+ ;
64
+ }
65
+ async setConfig(key, value, origin = 'global') {
66
+ const store = this.stores[origin];
67
+ if (!store) throw new Error(`unable to set config, "${origin}" origin is missing`);
68
+ store.set(key, value);
69
+ await store.write();
70
+ await this.invalidateCache();
71
+ }
72
+ getConfig(key) {
73
+ return _configGetter().configGetter.getConfig(key);
74
+ }
75
+ getConfigBoolean(key) {
76
+ return _configGetter().configGetter.getConfigBoolean(key);
77
+ }
78
+ getConfigNumeric(key) {
79
+ return _configGetter().configGetter.getConfigNumeric(key);
80
+ }
81
+ async delConfig(key, origin) {
82
+ const getOrigin = () => {
83
+ if (origin) return origin;
84
+ return Object.keys(this.stores).find(originName => key in this.stores[originName].list());
85
+ };
86
+ const foundOrigin = getOrigin();
87
+ if (!foundOrigin) return; // if the key is not found in any store (or given store), nothing to do.
88
+ const store = this.stores[foundOrigin];
89
+ store.del(key);
90
+ await store.write();
91
+ await this.invalidateCache();
92
+ }
93
+ listConfig() {
94
+ return _configGetter().configGetter.listConfig();
95
+ }
96
+ static async provider([cli]) {
97
+ const configStore = new ConfigStoreMain();
98
+ cli.register(new (_configCmd().ConfigCmd)(configStore));
99
+ return configStore;
100
+ }
101
+ }
102
+ exports.ConfigStoreMain = ConfigStoreMain;
103
+ _defineProperty(ConfigStoreMain, "slots", []);
104
+ _defineProperty(ConfigStoreMain, "dependencies", [_cli().default]);
105
+ _defineProperty(ConfigStoreMain, "runtime", _cli().MainRuntime);
106
+ _configStore().ConfigStoreAspect.addRuntime(ConfigStoreMain);
107
+ var _default = exports.default = ConfigStoreMain;
108
+
109
+ //# sourceMappingURL=config-store.main.runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_cli","data","_interopRequireWildcard","require","_configStore","_configGetter","_configCmd","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","ConfigStoreMain","constructor","stores","_stores","global","configGetter","getGlobalStore","addStore","origin","store","invalidateCache","keys","setConfig","key","Error","write","getConfig","getConfigBoolean","getConfigNumeric","delConfig","getOrigin","find","originName","list","foundOrigin","del","listConfig","provider","cli","configStore","register","ConfigCmd","exports","CLIAspect","MainRuntime","ConfigStoreAspect","addRuntime","_default"],"sources":["config-store.main.runtime.ts"],"sourcesContent":["import CLIAspect, { CLIMain, MainRuntime } from '@teambit/cli';\nimport { ConfigStoreAspect } from './config-store.aspect';\nimport { configGetter, Store } from './config-getter';\nimport { ConfigCmd } from './config-cmd';\n\nexport type StoreOrigin = 'scope' | 'workspace' | 'global';\n\nexport class ConfigStoreMain {\n private _stores: { [origin: string]: Store } | undefined;\n get stores (): { [origin: string]: Store } {\n if (!this._stores) {\n this._stores = {\n global: configGetter.getGlobalStore()\n };\n }\n return this._stores;\n }\n addStore(origin: StoreOrigin, store: Store) {\n this.stores[origin] = store;\n configGetter.addStore(store);\n }\n async invalidateCache() {\n configGetter.invalidateCache();\n for await (const origin of Object.keys(this.stores)) {\n const store = this.stores[origin];\n await store.invalidateCache();\n configGetter.addStore(store);\n };\n }\n async setConfig(key: string, value: string, origin: StoreOrigin = 'global') {\n const store = this.stores[origin];\n if (!store) throw new Error(`unable to set config, \"${origin}\" origin is missing`);\n store.set(key, value);\n await store.write();\n await this.invalidateCache();\n }\n getConfig(key: string): string | undefined {\n return configGetter.getConfig(key);\n }\n getConfigBoolean(key: string): boolean | undefined {\n return configGetter.getConfigBoolean(key);\n }\n getConfigNumeric(key: string): number | undefined {\n return configGetter.getConfigNumeric(key);\n }\n async delConfig(key: string, origin?: StoreOrigin) {\n const getOrigin = () => {\n if (origin) return origin;\n return Object.keys(this.stores).find(originName => key in this.stores[originName].list());\n }\n const foundOrigin = getOrigin();\n if (!foundOrigin) return; // if the key is not found in any store (or given store), nothing to do.\n const store = this.stores[foundOrigin];\n store.del(key);\n await store.write();\n await this.invalidateCache();\n }\n listConfig() {\n return configGetter.listConfig();\n }\n\n static slots = [];\n static dependencies = [CLIAspect];\n static runtime = MainRuntime;\n static async provider([cli]: [CLIMain]) {\n const configStore = new ConfigStoreMain();\n cli.register(new ConfigCmd(configStore));\n return configStore;\n\n }\n}\n\nConfigStoreAspect.addRuntime(ConfigStoreMain);\n\nexport default ConfigStoreMain;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import { ConfigStoreAspect } from './config-store.aspect';
2
+ export type { ConfigStoreMain } from './config-store.main.runtime';
3
+ export default ConfigStoreAspect;
4
+ export { ConfigStoreAspect };
5
+ export { getConfig, getNumberFromConfig, listConfig, Store } from './config-getter';
package/dist/index.js ADDED
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ConfigStoreAspect", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _configStore().ConfigStoreAspect;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "Store", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _configGetter().Store;
16
+ }
17
+ });
18
+ exports.default = void 0;
19
+ Object.defineProperty(exports, "getConfig", {
20
+ enumerable: true,
21
+ get: function () {
22
+ return _configGetter().getConfig;
23
+ }
24
+ });
25
+ Object.defineProperty(exports, "getNumberFromConfig", {
26
+ enumerable: true,
27
+ get: function () {
28
+ return _configGetter().getNumberFromConfig;
29
+ }
30
+ });
31
+ Object.defineProperty(exports, "listConfig", {
32
+ enumerable: true,
33
+ get: function () {
34
+ return _configGetter().listConfig;
35
+ }
36
+ });
37
+ function _configStore() {
38
+ const data = require("./config-store.aspect");
39
+ _configStore = function () {
40
+ return data;
41
+ };
42
+ return data;
43
+ }
44
+ function _configGetter() {
45
+ const data = require("./config-getter");
46
+ _configGetter = function () {
47
+ return data;
48
+ };
49
+ return data;
50
+ }
51
+ var _default = exports.default = _configStore().ConfigStoreAspect;
52
+
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_configStore","data","require","_configGetter","_default","exports","default","ConfigStoreAspect"],"sources":["index.ts"],"sourcesContent":["import { ConfigStoreAspect } from './config-store.aspect';\n\nexport type { ConfigStoreMain } from './config-store.main.runtime';\nexport default ConfigStoreAspect;\nexport { ConfigStoreAspect };\nexport { getConfig, getNumberFromConfig, listConfig, Store } from './config-getter';"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAAA,aAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,YAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAKA,SAAAE,cAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,aAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAoF,IAAAG,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAFrEC,gCAAiB","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ ;
2
+ ;
3
+
4
+ export const compositions = [];
5
+ export const overview = [];
6
+
7
+ export const compositions_metadata = {"compositions":[]};
package/index.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { ConfigStoreAspect } from './config-store.aspect';
2
+
3
+ export type { ConfigStoreMain } from './config-store.main.runtime';
4
+ export default ConfigStoreAspect;
5
+ export { ConfigStoreAspect };
6
+ export { getConfig, getNumberFromConfig, listConfig, Store } from './config-getter';
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@teambit/config-store",
3
+ "version": "0.0.1",
4
+ "main": "dist/index.js",
5
+ "componentId": {
6
+ "name": "config-store",
7
+ "version": "0.0.1",
8
+ "scope": "teambit.harmony"
9
+ },
10
+ "dependencies": {
11
+ "chalk": "2.4.2",
12
+ "pad-right": "0.2.2",
13
+ "@teambit/gitconfig": "2.0.10",
14
+ "lodash": "4.17.21",
15
+ "core-js": "^3.0.0",
16
+ "@babel/runtime": "7.20.0",
17
+ "@teambit/harmony": "0.4.6",
18
+ "@teambit/cli": "0.0.1121",
19
+ "@teambit/legacy.constants": "0.0.11",
20
+ "@teambit/legacy.global-config": "0.0.11"
21
+ },
22
+ "devDependencies": {
23
+ "@types/lodash": "4.14.165",
24
+ "@types/node": "12.20.4",
25
+ "@types/react": "^17.0.8",
26
+ "@types/react-dom": "^17.0.5",
27
+ "@types/jest": "^26.0.0",
28
+ "@types/testing-library__jest-dom": "5.9.5"
29
+ },
30
+ "peerDependencies": {
31
+ "react": "^16.8.0 || ^17.0.0",
32
+ "react-dom": "^16.8.0 || ^17.0.0"
33
+ },
34
+ "license": "SEE LICENSE IN UNLICENSED",
35
+ "optionalDependencies": {},
36
+ "peerDependenciesMeta": {},
37
+ "exports": {
38
+ "node": {
39
+ "require": "./dist/index.js",
40
+ "import": "./dist/esm.mjs"
41
+ },
42
+ "default": "./dist/index.js"
43
+ }
44
+ }
@@ -0,0 +1,29 @@
1
+ declare module '*.png' {
2
+ const value: any;
3
+ export = value;
4
+ }
5
+ declare module '*.svg' {
6
+ import type { FunctionComponent, SVGProps } from 'react';
7
+
8
+ export const ReactComponent: FunctionComponent<SVGProps<SVGSVGElement> & { title?: string }>;
9
+ const src: string;
10
+ export default src;
11
+ }
12
+
13
+ // @TODO Gilad
14
+ declare module '*.jpg' {
15
+ const value: any;
16
+ export = value;
17
+ }
18
+ declare module '*.jpeg' {
19
+ const value: any;
20
+ export = value;
21
+ }
22
+ declare module '*.gif' {
23
+ const value: any;
24
+ export = value;
25
+ }
26
+ declare module '*.bmp' {
27
+ const value: any;
28
+ export = value;
29
+ }
@@ -0,0 +1,42 @@
1
+ declare module '*.module.css' {
2
+ const classes: { readonly [key: string]: string };
3
+ export default classes;
4
+ }
5
+ declare module '*.module.scss' {
6
+ const classes: { readonly [key: string]: string };
7
+ export default classes;
8
+ }
9
+ declare module '*.module.sass' {
10
+ const classes: { readonly [key: string]: string };
11
+ export default classes;
12
+ }
13
+
14
+ declare module '*.module.less' {
15
+ const classes: { readonly [key: string]: string };
16
+ export default classes;
17
+ }
18
+
19
+ declare module '*.less' {
20
+ const classes: { readonly [key: string]: string };
21
+ export default classes;
22
+ }
23
+
24
+ declare module '*.css' {
25
+ const classes: { readonly [key: string]: string };
26
+ export default classes;
27
+ }
28
+
29
+ declare module '*.sass' {
30
+ const classes: { readonly [key: string]: string };
31
+ export default classes;
32
+ }
33
+
34
+ declare module '*.scss' {
35
+ const classes: { readonly [key: string]: string };
36
+ export default classes;
37
+ }
38
+
39
+ declare module '*.mdx' {
40
+ const component: any;
41
+ export default component;
42
+ }