@devvit/settings 0.12.6-next-2025-12-10-15-48-50-47f19f303.0 → 0.12.6-next-2025-12-10-22-48-08-763e72963.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/SettingsClient.d.ts +2 -0
- package/SettingsClient.d.ts.map +1 -1
- package/SettingsClient.js +19 -1
- package/mocks/SettingsMock.d.ts +56 -0
- package/mocks/SettingsMock.d.ts.map +1 -0
- package/mocks/SettingsMock.js +78 -0
- package/mocks/SettingsMock.test.d.ts.map +1 -0
- package/package.json +10 -9
- package/test.d.ts +2 -0
- package/test.d.ts.map +1 -0
- package/test.js +1 -0
package/SettingsClient.d.ts
CHANGED
|
@@ -12,4 +12,6 @@ export declare function getSettingsValues(results: {
|
|
|
12
12
|
readonly [key: string]: FormFieldValue;
|
|
13
13
|
}, settingsDefinitions: FormField[] | undefined): SettingsValues;
|
|
14
14
|
export declare function setDefaultsIfNecessary(settingsValues: SettingsValues, settingsDefinitions: FormField[]): void;
|
|
15
|
+
export declare function flattenFormFieldValue(value: FormFieldValue): undefined | string | string[] | number | boolean;
|
|
16
|
+
export declare function toFormFieldValue(value: unknown): FormFieldValue;
|
|
15
17
|
//# sourceMappingURL=SettingsClient.d.ts.map
|
package/SettingsClient.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsClient.d.ts","sourceRoot":"","sources":["../src/SettingsClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAIpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iEAAiE,CAAC;AAExG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,qBAAa,cAAc;;IACnB,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,EAC5D,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAKnB,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC;CA0B9D;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAsCjE;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;CAAE,EACnD,mBAAmB,EAAE,SAAS,EAAE,GAAG,SAAS,GAC3C,cAAc,CAWhB;AAED,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,cAAc,EAC9B,mBAAmB,EAAE,SAAS,EAAE,GAC/B,IAAI,CAeN"}
|
|
1
|
+
{"version":3,"file":"SettingsClient.d.ts","sourceRoot":"","sources":["../src/SettingsClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAIpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iEAAiE,CAAC;AAExG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,qBAAa,cAAc;;IACnB,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,EAC5D,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAKnB,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC;CA0B9D;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAsCjE;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;CAAE,EACnD,mBAAmB,EAAE,SAAS,EAAE,GAAG,SAAS,GAC3C,cAAc,CAWhB;AAED,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,cAAc,EAC9B,mBAAmB,EAAE,SAAS,EAAE,GAC/B,IAAI,CAeN;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,GACpB,SAAS,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,CAkBlD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAgB/D"}
|
package/SettingsClient.js
CHANGED
|
@@ -94,7 +94,7 @@ export function setDefaultsIfNecessary(settingsValues, settingsDefinitions) {
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
-
function flattenFormFieldValue(value) {
|
|
97
|
+
export function flattenFormFieldValue(value) {
|
|
98
98
|
switch (value.fieldType) {
|
|
99
99
|
case FormFieldType.STRING:
|
|
100
100
|
return value.stringValue;
|
|
@@ -113,3 +113,21 @@ function flattenFormFieldValue(value) {
|
|
|
113
113
|
return undefined;
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
|
+
export function toFormFieldValue(value) {
|
|
117
|
+
if (typeof value === 'string') {
|
|
118
|
+
return { fieldType: FormFieldType.STRING, stringValue: value };
|
|
119
|
+
}
|
|
120
|
+
else if (typeof value === 'boolean') {
|
|
121
|
+
return { fieldType: FormFieldType.BOOLEAN, boolValue: value };
|
|
122
|
+
}
|
|
123
|
+
else if (typeof value === 'number') {
|
|
124
|
+
return { fieldType: FormFieldType.NUMBER, numberValue: value };
|
|
125
|
+
}
|
|
126
|
+
else if (Array.isArray(value)) {
|
|
127
|
+
return {
|
|
128
|
+
fieldType: FormFieldType.SELECTION,
|
|
129
|
+
selectionValue: { values: value.map(String) },
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
throw new Error(`Unsupported value type: ${typeof value}. Expected string, boolean, number, or array.`);
|
|
133
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type Metadata, type Settings } from '@devvit/protos';
|
|
2
|
+
import type { SettingsRequest, SettingsResponse, SettingsValues } from '@devvit/protos/types/devvit/plugin/settings/v1alpha/settings.js';
|
|
3
|
+
import type { PluginMock } from '@devvit/shared-types/test/index.js';
|
|
4
|
+
export declare class SettingsPluginMock implements Settings {
|
|
5
|
+
private readonly _state;
|
|
6
|
+
constructor(state: {
|
|
7
|
+
current: SettingsValues;
|
|
8
|
+
});
|
|
9
|
+
GetSettings(_request: SettingsRequest, _metadata?: Metadata): Promise<SettingsResponse>;
|
|
10
|
+
}
|
|
11
|
+
export declare class SettingsMock implements PluginMock<Settings> {
|
|
12
|
+
readonly plugin: SettingsPluginMock;
|
|
13
|
+
private readonly _state;
|
|
14
|
+
constructor(initialSettings?: {
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* Overwrites the mocked settings with new values.
|
|
19
|
+
* Replaces existing settings completely.
|
|
20
|
+
*
|
|
21
|
+
* @param settings - The new settings to replace the current ones.
|
|
22
|
+
*/
|
|
23
|
+
set(settings: {
|
|
24
|
+
[key: string]: unknown;
|
|
25
|
+
}): void;
|
|
26
|
+
/**
|
|
27
|
+
* Updates the mocked settings with new values.
|
|
28
|
+
* Merges with existing settings.
|
|
29
|
+
*
|
|
30
|
+
* @param settings - The new settings to merge in.
|
|
31
|
+
*/
|
|
32
|
+
update(settings: {
|
|
33
|
+
[key: string]: unknown;
|
|
34
|
+
}): void;
|
|
35
|
+
/**
|
|
36
|
+
* Adds or updates a single setting value.
|
|
37
|
+
*
|
|
38
|
+
* @param key - The setting key.
|
|
39
|
+
* @param value - The value to set.
|
|
40
|
+
*/
|
|
41
|
+
put(key: string, value: unknown): void;
|
|
42
|
+
/**
|
|
43
|
+
* Removes a setting by key.
|
|
44
|
+
*
|
|
45
|
+
* @param key - The setting key to remove.
|
|
46
|
+
*/
|
|
47
|
+
remove(key: string): void;
|
|
48
|
+
/**
|
|
49
|
+
* Gets the current settings values.
|
|
50
|
+
*
|
|
51
|
+
* @returns The current SettingsValues object.
|
|
52
|
+
*/
|
|
53
|
+
get(): SettingsValues;
|
|
54
|
+
private _createSettingsValues;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=SettingsMock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsMock.d.ts","sourceRoot":"","sources":["../../src/mocks/SettingsMock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,EACf,MAAM,iEAAiE,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAIrE,qBAAa,kBAAmB,YAAW,QAAQ;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;gBACzC,KAAK,EAAE;QAAE,OAAO,EAAE,cAAc,CAAA;KAAE;IAIxC,WAAW,CAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAO9F;AAED,qBAAa,YAAa,YAAW,UAAU,CAAC,QAAQ,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;gBAEzC,eAAe,GAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAO;IAK5D;;;;;OAKG;IACH,GAAG,CAAC,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI;IAK/C;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI;IAQlD;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAItC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB;;;;OAIG;IACH,GAAG,IAAI,cAAc;IAIrB,OAAO,CAAC,qBAAqB;CAU9B"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import {} from '@devvit/protos';
|
|
2
|
+
import { toFormFieldValue } from '../SettingsClient.js';
|
|
3
|
+
export class SettingsPluginMock {
|
|
4
|
+
constructor(state) {
|
|
5
|
+
this._state = state;
|
|
6
|
+
}
|
|
7
|
+
async GetSettings(_request, _metadata) {
|
|
8
|
+
return {
|
|
9
|
+
appSettings: this._state.current,
|
|
10
|
+
installationSettings: { version: '0', settings: {} },
|
|
11
|
+
instanceSettings: { version: '0', settings: {} },
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class SettingsMock {
|
|
16
|
+
constructor(initialSettings = {}) {
|
|
17
|
+
this._state = { current: this._createSettingsValues(initialSettings) };
|
|
18
|
+
this.plugin = new SettingsPluginMock(this._state);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Overwrites the mocked settings with new values.
|
|
22
|
+
* Replaces existing settings completely.
|
|
23
|
+
*
|
|
24
|
+
* @param settings - The new settings to replace the current ones.
|
|
25
|
+
*/
|
|
26
|
+
set(settings) {
|
|
27
|
+
const newValues = this._createSettingsValues(settings);
|
|
28
|
+
this._state.current = newValues;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Updates the mocked settings with new values.
|
|
32
|
+
* Merges with existing settings.
|
|
33
|
+
*
|
|
34
|
+
* @param settings - The new settings to merge in.
|
|
35
|
+
*/
|
|
36
|
+
update(settings) {
|
|
37
|
+
const newValues = this._createSettingsValues(settings);
|
|
38
|
+
this._state.current = {
|
|
39
|
+
...this._state.current,
|
|
40
|
+
settings: { ...this._state.current.settings, ...newValues.settings },
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Adds or updates a single setting value.
|
|
45
|
+
*
|
|
46
|
+
* @param key - The setting key.
|
|
47
|
+
* @param value - The value to set.
|
|
48
|
+
*/
|
|
49
|
+
put(key, value) {
|
|
50
|
+
this.update({ [key]: value });
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Removes a setting by key.
|
|
54
|
+
*
|
|
55
|
+
* @param key - The setting key to remove.
|
|
56
|
+
*/
|
|
57
|
+
remove(key) {
|
|
58
|
+
delete this._state.current.settings[key];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Gets the current settings values.
|
|
62
|
+
*
|
|
63
|
+
* @returns The current SettingsValues object.
|
|
64
|
+
*/
|
|
65
|
+
get() {
|
|
66
|
+
return this._state.current;
|
|
67
|
+
}
|
|
68
|
+
_createSettingsValues(settings) {
|
|
69
|
+
const formFields = {};
|
|
70
|
+
for (const [key, value] of Object.entries(settings)) {
|
|
71
|
+
formFields[key] = toFormFieldValue(value);
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
version: '1',
|
|
75
|
+
settings: formFields,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsMock.test.d.ts","sourceRoot":"","sources":["../../src/mocks/SettingsMock.test.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devvit/settings",
|
|
3
|
-
"version": "0.12.6-next-2025-12-10-
|
|
3
|
+
"version": "0.12.6-next-2025-12-10-22-48-08-763e72963.0",
|
|
4
4
|
"license": "BSD-3-Clause",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
"browser": "./serverImportInClientCodePanic.js",
|
|
13
13
|
"default": "./index.js"
|
|
14
14
|
},
|
|
15
|
-
"./package.json": "./package.json"
|
|
15
|
+
"./package.json": "./package.json",
|
|
16
|
+
"./test": "./test.js"
|
|
16
17
|
},
|
|
17
18
|
"files": [
|
|
18
19
|
"**"
|
|
@@ -31,20 +32,20 @@
|
|
|
31
32
|
"test:unit-with-coverage": "vitest run --coverage"
|
|
32
33
|
},
|
|
33
34
|
"dependencies": {
|
|
34
|
-
"@devvit/protos": "0.12.6-next-2025-12-10-
|
|
35
|
-
"@devvit/shared": "0.12.6-next-2025-12-10-
|
|
36
|
-
"@devvit/shared-types": "0.12.6-next-2025-12-10-
|
|
35
|
+
"@devvit/protos": "0.12.6-next-2025-12-10-22-48-08-763e72963.0",
|
|
36
|
+
"@devvit/shared": "0.12.6-next-2025-12-10-22-48-08-763e72963.0",
|
|
37
|
+
"@devvit/shared-types": "0.12.6-next-2025-12-10-22-48-08-763e72963.0"
|
|
37
38
|
},
|
|
38
39
|
"peerDependencies": {
|
|
39
40
|
"@devvit/server": "*"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|
|
42
|
-
"@devvit/repo-tools": "0.12.6-next-2025-12-10-
|
|
43
|
-
"@devvit/server": "0.12.6-next-2025-12-10-
|
|
44
|
-
"@devvit/tsconfig": "0.12.6-next-2025-12-10-
|
|
43
|
+
"@devvit/repo-tools": "0.12.6-next-2025-12-10-22-48-08-763e72963.0",
|
|
44
|
+
"@devvit/server": "0.12.6-next-2025-12-10-22-48-08-763e72963.0",
|
|
45
|
+
"@devvit/tsconfig": "0.12.6-next-2025-12-10-22-48-08-763e72963.0",
|
|
45
46
|
"eslint": "9.11.1",
|
|
46
47
|
"typescript": "5.8.3",
|
|
47
48
|
"vitest": "1.6.1"
|
|
48
49
|
},
|
|
49
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "44e0988227c8b742f3ba2a22b65f8d69baec1e18"
|
|
50
51
|
}
|
package/test.d.ts
ADDED
package/test.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
package/test.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './mocks/SettingsMock.js';
|