@push.rocks/smartconfig 6.0.0
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/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/classes.appdata.d.ts +72 -0
- package/dist_ts/classes.appdata.js +454 -0
- package/dist_ts/classes.keyvaluestore.d.ts +63 -0
- package/dist_ts/classes.keyvaluestore.js +169 -0
- package/dist_ts/classes.smartconfig.d.ts +29 -0
- package/dist_ts/classes.smartconfig.js +67 -0
- package/dist_ts/index.d.ts +3 -0
- package/dist_ts/index.js +4 -0
- package/dist_ts/paths.d.ts +8 -0
- package/dist_ts/paths.js +15 -0
- package/dist_ts/plugins.d.ts +12 -0
- package/dist_ts/plugins.js +13 -0
- package/package.json +73 -0
- package/readme.hints.md +0 -0
- package/readme.md +517 -0
- package/readme.plan.md +225 -0
- package/smartconfig.json +42 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/classes.appdata.ts +548 -0
- package/ts/classes.keyvaluestore.ts +222 -0
- package/ts/classes.smartconfig.ts +79 -0
- package/ts/index.ts +3 -0
- package/ts/paths.ts +22 -0
- package/ts/plugins.ts +25 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import * as paths from './paths.js';
|
|
3
|
+
import { Task } from '@push.rocks/taskbuffer';
|
|
4
|
+
/**
|
|
5
|
+
* kvStore is a simple key value store to store data about projects between runs
|
|
6
|
+
*/
|
|
7
|
+
export class KeyValueStore {
|
|
8
|
+
/**
|
|
9
|
+
* the constructor of keyvalue store
|
|
10
|
+
* @param typeArg
|
|
11
|
+
* @param identityArg
|
|
12
|
+
* @param customPath Optional custom path for the keyValue store
|
|
13
|
+
*/
|
|
14
|
+
constructor(optionsArg) {
|
|
15
|
+
this.dataObject = {};
|
|
16
|
+
this.deletedObject = {};
|
|
17
|
+
this.mandatoryKeys = new Set();
|
|
18
|
+
this.changeSubject = new plugins.smartrx.rxjs.Subject();
|
|
19
|
+
this.storedStateString = '';
|
|
20
|
+
this.syncTask = new Task({
|
|
21
|
+
name: 'syncTask',
|
|
22
|
+
buffered: true,
|
|
23
|
+
bufferMax: 1,
|
|
24
|
+
execDelay: 0,
|
|
25
|
+
taskFunction: async () => {
|
|
26
|
+
if (this.type !== 'ephemeral') {
|
|
27
|
+
this.dataObject = {
|
|
28
|
+
...plugins.smartfile.fs.toObjectSync(this.filePath),
|
|
29
|
+
...this.dataObject,
|
|
30
|
+
};
|
|
31
|
+
for (const key of Object.keys(this.deletedObject)) {
|
|
32
|
+
delete this.dataObject[key];
|
|
33
|
+
}
|
|
34
|
+
this.deletedObject = {};
|
|
35
|
+
await plugins.smartfile.memory.toFs(plugins.smartjson.stringifyPretty(this.dataObject), this.filePath);
|
|
36
|
+
}
|
|
37
|
+
const newStateString = plugins.smartjson.stringify(this.dataObject);
|
|
38
|
+
// change detection
|
|
39
|
+
if (newStateString !== this.storedStateString) {
|
|
40
|
+
this.storedStateString = newStateString;
|
|
41
|
+
this.changeSubject.next(this.dataObject);
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
/**
|
|
46
|
+
* computes the identity and filePath
|
|
47
|
+
*/
|
|
48
|
+
this.initFilePath = () => {
|
|
49
|
+
if (this.type === 'ephemeral') {
|
|
50
|
+
// No file path is needed for ephemeral type
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (this.customPath) {
|
|
54
|
+
// Use custom path if provided
|
|
55
|
+
const absolutePath = plugins.smartpath.transform.makeAbsolute(this.customPath, paths.cwd);
|
|
56
|
+
this.filePath = absolutePath;
|
|
57
|
+
if (plugins.smartfile.fs.isDirectorySync(this.filePath)) {
|
|
58
|
+
this.filePath = plugins.path.join(this.filePath, this.identity + '.json');
|
|
59
|
+
}
|
|
60
|
+
plugins.smartfile.fs.ensureFileSync(this.filePath, '{}');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
let baseDir;
|
|
64
|
+
if (this.type === 'userHomeDir') {
|
|
65
|
+
baseDir = paths.kvUserHomeDirBase;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
throw new Error('kv type not supported');
|
|
69
|
+
}
|
|
70
|
+
this.filePath = plugins.path.join(baseDir, this.identity + '.json');
|
|
71
|
+
plugins.smartfile.fs.ensureDirSync(baseDir);
|
|
72
|
+
plugins.smartfile.fs.ensureFileSync(this.filePath, '{}');
|
|
73
|
+
};
|
|
74
|
+
if (optionsArg.customPath && optionsArg.typeArg !== 'custom') {
|
|
75
|
+
throw new Error('customPath can only be provided if typeArg is custom');
|
|
76
|
+
}
|
|
77
|
+
if (optionsArg.typeArg === 'custom' && !optionsArg.customPath) {
|
|
78
|
+
throw new Error('customPath must be provided if typeArg is custom');
|
|
79
|
+
}
|
|
80
|
+
this.type = optionsArg.typeArg;
|
|
81
|
+
this.identity = optionsArg.identityArg;
|
|
82
|
+
this.customPath = optionsArg.customPath; // Store custom path if provided
|
|
83
|
+
this.initFilePath();
|
|
84
|
+
if (optionsArg.mandatoryKeys) {
|
|
85
|
+
this.setMandatoryKeys(optionsArg.mandatoryKeys);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* reads all keyValue pairs at once and returns them
|
|
90
|
+
*/
|
|
91
|
+
async readAll() {
|
|
92
|
+
await this.syncTask.trigger();
|
|
93
|
+
return this.dataObject;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* reads a keyValueFile from disk
|
|
97
|
+
*/
|
|
98
|
+
async readKey(keyArg) {
|
|
99
|
+
await this.syncTask.trigger();
|
|
100
|
+
return this.dataObject[keyArg];
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* writes a specific key to the keyValueStore
|
|
104
|
+
*/
|
|
105
|
+
async writeKey(keyArg, valueArg) {
|
|
106
|
+
await this.writeAll({
|
|
107
|
+
[keyArg]: valueArg,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
async deleteKey(keyArg) {
|
|
111
|
+
this.deletedObject[keyArg] = this.dataObject[keyArg];
|
|
112
|
+
await this.syncTask.trigger();
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* writes all keyValue pairs in the object argument
|
|
116
|
+
*/
|
|
117
|
+
async writeAll(keyValueObject) {
|
|
118
|
+
this.dataObject = { ...this.dataObject, ...keyValueObject };
|
|
119
|
+
await this.syncTask.trigger();
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* wipes a key value store from disk
|
|
123
|
+
*/
|
|
124
|
+
async wipe() {
|
|
125
|
+
this.dataObject = {};
|
|
126
|
+
if (this.type !== 'ephemeral') {
|
|
127
|
+
await plugins.smartfile.fs.remove(this.filePath);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* resets the KeyValueStore to the initial state by syncing first, deleting all keys, and then triggering a sync again
|
|
132
|
+
*/
|
|
133
|
+
async reset() {
|
|
134
|
+
await this.syncTask.trigger(); // Sync to get the latest state
|
|
135
|
+
// Delete all keys from the dataObject and add them to deletedObject
|
|
136
|
+
for (const key of Object.keys(this.dataObject)) {
|
|
137
|
+
this.deletedObject[key] = this.dataObject[key];
|
|
138
|
+
delete this.dataObject[key];
|
|
139
|
+
}
|
|
140
|
+
await this.syncTask.trigger(); // Sync again to reflect the deletion
|
|
141
|
+
}
|
|
142
|
+
setMandatoryKeys(keys) {
|
|
143
|
+
keys.forEach((key) => this.mandatoryKeys.add(key));
|
|
144
|
+
}
|
|
145
|
+
async getMissingMandatoryKeys() {
|
|
146
|
+
await this.readAll();
|
|
147
|
+
return Array.from(this.mandatoryKeys).filter((key) => !(key in this.dataObject));
|
|
148
|
+
}
|
|
149
|
+
async waitForKeysPresent(keysArg) {
|
|
150
|
+
const missingKeys = keysArg.filter((keyArg) => !this.dataObject[keyArg]);
|
|
151
|
+
if (missingKeys.length === 0) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
return new Promise((resolve, reject) => {
|
|
155
|
+
const subscription = this.changeSubject.subscribe(() => {
|
|
156
|
+
const missingKeys = keysArg.filter((keyArg) => !this.dataObject[keyArg]);
|
|
157
|
+
if (missingKeys.length === 0) {
|
|
158
|
+
subscription.unsubscribe();
|
|
159
|
+
resolve();
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
async waitForAndGetKey(keyArg) {
|
|
165
|
+
await this.waitForKeysPresent([keyArg]);
|
|
166
|
+
return this.readKey(keyArg);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5rZXl2YWx1ZXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5rZXl2YWx1ZXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVc5Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBK0V4Qjs7Ozs7T0FLRztJQUNILFlBQVksVUFBeUM7UUFwRjdDLGVBQVUsR0FBZSxFQUFFLENBQUM7UUFDNUIsa0JBQWEsR0FBZSxFQUFFLENBQUM7UUFDL0Isa0JBQWEsR0FBaUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN6QyxrQkFBYSxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFjLENBQUM7UUFFOUQsc0JBQWlCLEdBQVcsRUFBRSxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQztZQUN6QixJQUFJLEVBQUUsVUFBVTtZQUNoQixRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxDQUFDO1lBQ1osU0FBUyxFQUFFLENBQUM7WUFDWixZQUFZLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3ZCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRzt3QkFDaEIsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzt3QkFDbkQsR0FBRyxJQUFJLENBQUMsVUFBVTtxQkFDbkIsQ0FBQztvQkFDRixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBbUIsRUFBRSxDQUFD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
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smartconfig class allows easy configuration of tools
|
|
3
|
+
*/
|
|
4
|
+
export declare class Smartconfig {
|
|
5
|
+
cwd: string;
|
|
6
|
+
lookupPath: string;
|
|
7
|
+
smartconfigJsonExists: boolean;
|
|
8
|
+
smartconfigJsonData: any;
|
|
9
|
+
/**
|
|
10
|
+
* creates instance of Smartconfig
|
|
11
|
+
*/
|
|
12
|
+
constructor(cwdArg?: string);
|
|
13
|
+
/**
|
|
14
|
+
* merges the supplied options with the ones from smartconfig.json
|
|
15
|
+
*/
|
|
16
|
+
dataFor<IToolConfig>(toolnameArg: string, defaultOptionsArg: any): IToolConfig;
|
|
17
|
+
/**
|
|
18
|
+
* checks if the JSON exists
|
|
19
|
+
*/
|
|
20
|
+
private checkSmartconfigJsonExists;
|
|
21
|
+
/**
|
|
22
|
+
* gets lookupPath
|
|
23
|
+
*/
|
|
24
|
+
private checkLookupPath;
|
|
25
|
+
/**
|
|
26
|
+
* get smartconfigJsonData
|
|
27
|
+
*/
|
|
28
|
+
private checkSmartconfigJsonData;
|
|
29
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import * as paths from './paths.js';
|
|
3
|
+
/**
|
|
4
|
+
* Smartconfig class allows easy configuration of tools
|
|
5
|
+
*/
|
|
6
|
+
export class Smartconfig {
|
|
7
|
+
/**
|
|
8
|
+
* creates instance of Smartconfig
|
|
9
|
+
*/
|
|
10
|
+
constructor(cwdArg) {
|
|
11
|
+
if (cwdArg) {
|
|
12
|
+
this.cwd = cwdArg;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
this.cwd = paths.cwd;
|
|
16
|
+
}
|
|
17
|
+
this.checkLookupPath();
|
|
18
|
+
this.checkSmartconfigJsonExists();
|
|
19
|
+
this.checkSmartconfigJsonData();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* merges the supplied options with the ones from smartconfig.json
|
|
23
|
+
*/
|
|
24
|
+
dataFor(toolnameArg, defaultOptionsArg) {
|
|
25
|
+
let smartconfigToolOptions;
|
|
26
|
+
if (this.smartconfigJsonData[toolnameArg]) {
|
|
27
|
+
smartconfigToolOptions = this.smartconfigJsonData[toolnameArg];
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
smartconfigToolOptions = {};
|
|
31
|
+
}
|
|
32
|
+
let mergedOptions = {
|
|
33
|
+
...defaultOptionsArg,
|
|
34
|
+
...smartconfigToolOptions,
|
|
35
|
+
};
|
|
36
|
+
return mergedOptions;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* checks if the JSON exists
|
|
40
|
+
*/
|
|
41
|
+
checkSmartconfigJsonExists() {
|
|
42
|
+
this.smartconfigJsonExists = plugins.smartfile.fs.fileExistsSync(this.lookupPath);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* gets lookupPath
|
|
46
|
+
*/
|
|
47
|
+
checkLookupPath() {
|
|
48
|
+
if (this.cwd) {
|
|
49
|
+
this.lookupPath = plugins.path.join(this.cwd, 'smartconfig.json');
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.lookupPath = paths.configFile;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* get smartconfigJsonData
|
|
57
|
+
*/
|
|
58
|
+
checkSmartconfigJsonData() {
|
|
59
|
+
if (this.smartconfigJsonExists) {
|
|
60
|
+
this.smartconfigJsonData = plugins.smartfile.fs.toObjectSync(this.lookupPath);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.smartconfigJsonData = {};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zbWFydGNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuc21hcnRjb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxLQUFLLEtBQUssTUFBTSxZQUFZLENBQUM7QUFFcEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQU10Qjs7T0FFRztJQUNILFlBQVksTUFBZTtRQUN6QixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFDcEIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQ0wsV0FBbUIsRUFDbkIsaUJBQXNCO1FBRXRCLElBQUksc0JBQXNCLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakUsQ0FBQzthQUFNLENBQUM7WUFDTixzQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUNELElBQUksYUFBYSxHQUFHO1lBQ2xCLEdBQUcsaUJBQWlCO1lBQ3BCLEdBQUcsc0JBQXNCO1NBQzFCLENBQUM7UUFDRixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSywwQkFBMEI7UUFDaEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FDOUQsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWU7UUFDckIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUNwRSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssd0JBQXdCO1FBQzlCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FDMUQsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
|
package/dist_ts/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './classes.appdata.js';
|
|
2
|
+
export * from './classes.keyvaluestore.js';
|
|
3
|
+
export * from './classes.smartconfig.js';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywwQkFBMEIsQ0FBQyJ9
|
package/dist_ts/paths.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
// directories
|
|
3
|
+
export let cwd = process.cwd();
|
|
4
|
+
export let packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '../');
|
|
5
|
+
// ----------------------
|
|
6
|
+
// keyValueStore specific
|
|
7
|
+
// ----------------------
|
|
8
|
+
export let home = plugins.smartpath.get.home();
|
|
9
|
+
/**
|
|
10
|
+
* keyValue base path
|
|
11
|
+
*/
|
|
12
|
+
export let kvUserHomeDirBase = plugins.path.join(home, '.smartconfig/kv');
|
|
13
|
+
// files
|
|
14
|
+
export let configFile = plugins.path.join(cwd, 'smartconfig.json');
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxjQUFjO0FBQ2QsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixNQUFNLENBQUMsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3ZDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQy9ELEtBQUssQ0FDTixDQUFDO0FBRUYseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qix5QkFBeUI7QUFFekIsTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBRS9DOztHQUVHO0FBQ0gsTUFBTSxDQUFDLElBQUksaUJBQWlCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFFMUUsUUFBUTtBQUNSLE1BQU0sQ0FBQyxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as tsclass from '@tsclass/tsclass';
|
|
2
|
+
export { tsclass };
|
|
3
|
+
import * as qenv from '@push.rocks/qenv';
|
|
4
|
+
import * as smartlog from '@push.rocks/smartlog';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import * as smartfile from '@push.rocks/smartfile';
|
|
7
|
+
import * as smartjson from '@push.rocks/smartjson';
|
|
8
|
+
import * as smartpath from '@push.rocks/smartpath';
|
|
9
|
+
import * as smartpromise from '@push.rocks/smartpromise';
|
|
10
|
+
import * as smartrx from '@push.rocks/smartrx';
|
|
11
|
+
import * as taskbuffer from '@push.rocks/taskbuffer';
|
|
12
|
+
export { qenv, smartlog, path, smartfile, smartjson, smartpath, smartpromise, smartrx, taskbuffer, };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as tsclass from '@tsclass/tsclass';
|
|
2
|
+
export { tsclass };
|
|
3
|
+
import * as qenv from '@push.rocks/qenv';
|
|
4
|
+
import * as smartlog from '@push.rocks/smartlog';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import * as smartfile from '@push.rocks/smartfile';
|
|
7
|
+
import * as smartjson from '@push.rocks/smartjson';
|
|
8
|
+
import * as smartpath from '@push.rocks/smartpath';
|
|
9
|
+
import * as smartpromise from '@push.rocks/smartpromise';
|
|
10
|
+
import * as smartrx from '@push.rocks/smartrx';
|
|
11
|
+
import * as taskbuffer from '@push.rocks/taskbuffer';
|
|
12
|
+
export { qenv, smartlog, path, smartfile, smartjson, smartpath, smartpromise, smartrx, taskbuffer, };
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFFbkIsT0FBTyxLQUFLLElBQUksTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssUUFBUSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEtBQUssVUFBVSxNQUFNLHdCQUF3QixDQUFDO0FBRXJELE9BQU8sRUFDTCxJQUFJLEVBQ0osUUFBUSxFQUNSLElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osT0FBTyxFQUNQLFVBQVUsR0FDWCxDQUFDIn0=
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@push.rocks/smartconfig",
|
|
3
|
+
"version": "6.0.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "A comprehensive configuration management library providing key-value storage, environment variable mapping, and tool configuration.",
|
|
6
|
+
"main": "dist_ts/index.js",
|
|
7
|
+
"typings": "dist_ts/index.d.ts",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://code.foss.global/push.rocks/smartconfig.git"
|
|
11
|
+
},
|
|
12
|
+
"author": "Lossless GmbH",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://code.foss.global/push.rocks/smartconfig/issues"
|
|
16
|
+
},
|
|
17
|
+
"homepage": "https://code.foss.global/push.rocks/smartconfig#readme",
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@push.rocks/qenv": "^6.1.3",
|
|
20
|
+
"@push.rocks/smartfile": "^11.2.5",
|
|
21
|
+
"@push.rocks/smartjson": "^5.0.20",
|
|
22
|
+
"@push.rocks/smartlog": "^3.1.8",
|
|
23
|
+
"@push.rocks/smartpath": "^6.0.0",
|
|
24
|
+
"@push.rocks/smartpromise": "^4.2.3",
|
|
25
|
+
"@push.rocks/smartrx": "^3.0.10",
|
|
26
|
+
"@push.rocks/taskbuffer": "^3.1.7",
|
|
27
|
+
"@tsclass/tsclass": "^9.2.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@git.zone/tsbuild": "^2.6.4",
|
|
31
|
+
"@git.zone/tsrun": "^1.3.3",
|
|
32
|
+
"@git.zone/tstest": "^2.3.2",
|
|
33
|
+
"@types/node": "^22"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"ts/**/*",
|
|
37
|
+
"ts_web/**/*",
|
|
38
|
+
"dist/**/*",
|
|
39
|
+
"dist_*/**/*",
|
|
40
|
+
"dist_ts/**/*",
|
|
41
|
+
"dist_ts_web/**/*",
|
|
42
|
+
"assets/**/*",
|
|
43
|
+
"cli.js",
|
|
44
|
+
"smartconfig.json",
|
|
45
|
+
"readme.md"
|
|
46
|
+
],
|
|
47
|
+
"browserslist": [
|
|
48
|
+
"last 1 chrome versions"
|
|
49
|
+
],
|
|
50
|
+
"type": "module",
|
|
51
|
+
"keywords": [
|
|
52
|
+
"npm",
|
|
53
|
+
"configuration management",
|
|
54
|
+
"tool management",
|
|
55
|
+
"key-value store",
|
|
56
|
+
"project setup",
|
|
57
|
+
"typescript",
|
|
58
|
+
"environment setup",
|
|
59
|
+
"dependencies management",
|
|
60
|
+
"npm package enhancement",
|
|
61
|
+
"automation",
|
|
62
|
+
"async operations",
|
|
63
|
+
"app configuration",
|
|
64
|
+
"smart file handling",
|
|
65
|
+
"workflow improvement",
|
|
66
|
+
"persistent storage"
|
|
67
|
+
],
|
|
68
|
+
"scripts": {
|
|
69
|
+
"test": "(tstest test/ --verbose --logfile --timeout 20)",
|
|
70
|
+
"build": "(tsbuild --web --allowimplicitany)",
|
|
71
|
+
"buildDocs": "tsdoc"
|
|
72
|
+
}
|
|
73
|
+
}
|
package/readme.hints.md
ADDED
|
File without changes
|