@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.
@@ -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=
@@ -0,0 +1,3 @@
1
+ export * from './classes.appdata.js';
2
+ export * from './classes.keyvaluestore.js';
3
+ export * from './classes.smartconfig.js';
@@ -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
@@ -0,0 +1,8 @@
1
+ export declare let cwd: string;
2
+ export declare let packageDir: string;
3
+ export declare let home: string;
4
+ /**
5
+ * keyValue base path
6
+ */
7
+ export declare let kvUserHomeDirBase: string;
8
+ export declare let configFile: string;
@@ -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
+ }
File without changes