silosdk 0.0.2 → 0.0.3

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,29 @@
1
+ //#region rolldown:runtime
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
+ key = keys[i];
12
+ if (!__hasOwnProp.call(to, key) && key !== except) {
13
+ __defProp(to, key, {
14
+ get: ((k) => from[k]).bind(null, key),
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ }
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
25
+ }) : target, mod));
26
+
27
+ //#endregion
28
+
29
+ exports.__toESM = __toESM;
@@ -0,0 +1,70 @@
1
+ const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
2
+ let __tanstack_react_query = require("@tanstack/react-query");
3
+ let expo_sqlite_kv_store = require("expo-sqlite/kv-store");
4
+ expo_sqlite_kv_store = require_rolldown_runtime.__toESM(expo_sqlite_kv_store);
5
+
6
+ //#region src/settings/index.ts
7
+ const settingNames = /* @__PURE__ */ new Set();
8
+ const settingNamePattern = /^[A-Za-z][A-Za-z0-9_.:-]*$/;
9
+ function setting(name, defaultValue) {
10
+ assertSettingName(name);
11
+ assertSettingValue(resolveDefault(defaultValue));
12
+ if (settingNames.has(name)) throw new Error(`Setting "${name}" is already registered. Define each setting once and import the existing setting instead.`);
13
+ settingNames.add(name);
14
+ const queryKey = [
15
+ "silo",
16
+ "setting",
17
+ name
18
+ ];
19
+ return {
20
+ name,
21
+ defaultValue,
22
+ queryKey,
23
+ queryOptions() {
24
+ return (0, __tanstack_react_query.queryOptions)({
25
+ queryKey,
26
+ queryFn: () => readSetting(name, defaultValue)
27
+ });
28
+ },
29
+ mutationOptions(options = {}) {
30
+ return (0, __tanstack_react_query.mutationOptions)({
31
+ mutationKey: queryKey,
32
+ mutationFn: async (valueOrUpdater) => {
33
+ const current = readSetting(name, defaultValue);
34
+ const next = typeof valueOrUpdater === "function" ? valueOrUpdater(current) : valueOrUpdater;
35
+ writeSetting(name, next);
36
+ return next;
37
+ },
38
+ onSuccess(value) {
39
+ options.queryClient?.setQueryData(queryKey, value);
40
+ }
41
+ });
42
+ }
43
+ };
44
+ }
45
+ function readSetting(name, defaultValue) {
46
+ const stored = expo_sqlite_kv_store.default.getItemSync(storageKey(name));
47
+ if (stored === null) return resolveDefault(defaultValue);
48
+ const value = JSON.parse(stored);
49
+ assertSettingValue(value);
50
+ return value;
51
+ }
52
+ function writeSetting(name, value) {
53
+ assertSettingValue(value);
54
+ expo_sqlite_kv_store.default.setItemSync(storageKey(name), JSON.stringify(value));
55
+ }
56
+ function storageKey(name) {
57
+ return `silo:setting:${name}`;
58
+ }
59
+ function resolveDefault(defaultValue) {
60
+ return typeof defaultValue === "function" ? defaultValue() : defaultValue;
61
+ }
62
+ function assertSettingName(name) {
63
+ if (!settingNamePattern.test(name)) throw new Error(`Setting names must start with a letter and contain only letters, numbers, underscores, dots, colons, or hyphens. Received "${name}".`);
64
+ }
65
+ function assertSettingValue(value) {
66
+ if (typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean" && value !== null) throw new Error("Settings must be strings, numbers, booleans, or null.");
67
+ }
68
+
69
+ //#endregion
70
+ exports.setting = setting;
@@ -0,0 +1,20 @@
1
+ import { QueryClient, UseMutationOptions, UseQueryOptions } from "@tanstack/react-query";
2
+
3
+ //#region src/settings/index.d.ts
4
+ type SettingValue = string | number | boolean | null;
5
+ type SettingDefault<T extends SettingValue> = T | (() => T);
6
+ type SettingMutation<T extends SettingValue> = T | ((current: T) => T);
7
+ type SettingQueryKey = readonly ['silo', 'setting', string];
8
+ type SettingMutationOptions = {
9
+ queryClient?: QueryClient;
10
+ };
11
+ type Setting<T extends SettingValue> = {
12
+ readonly name: string;
13
+ readonly defaultValue: SettingDefault<T>;
14
+ readonly queryKey: SettingQueryKey;
15
+ queryOptions(): UseQueryOptions<T, Error, T, SettingQueryKey>;
16
+ mutationOptions(options?: SettingMutationOptions): UseMutationOptions<T, Error, SettingMutation<T>>;
17
+ };
18
+ declare function setting<T extends SettingValue>(name: string, defaultValue: SettingDefault<T>): Setting<T>;
19
+ //#endregion
20
+ export { Setting, SettingDefault, SettingMutation, SettingMutationOptions, SettingQueryKey, SettingValue, setting };
@@ -0,0 +1,20 @@
1
+ import { QueryClient, UseMutationOptions, UseQueryOptions } from "@tanstack/react-query";
2
+
3
+ //#region src/settings/index.d.ts
4
+ type SettingValue = string | number | boolean | null;
5
+ type SettingDefault<T extends SettingValue> = T | (() => T);
6
+ type SettingMutation<T extends SettingValue> = T | ((current: T) => T);
7
+ type SettingQueryKey = readonly ['silo', 'setting', string];
8
+ type SettingMutationOptions = {
9
+ queryClient?: QueryClient;
10
+ };
11
+ type Setting<T extends SettingValue> = {
12
+ readonly name: string;
13
+ readonly defaultValue: SettingDefault<T>;
14
+ readonly queryKey: SettingQueryKey;
15
+ queryOptions(): UseQueryOptions<T, Error, T, SettingQueryKey>;
16
+ mutationOptions(options?: SettingMutationOptions): UseMutationOptions<T, Error, SettingMutation<T>>;
17
+ };
18
+ declare function setting<T extends SettingValue>(name: string, defaultValue: SettingDefault<T>): Setting<T>;
19
+ //#endregion
20
+ export { Setting, SettingDefault, SettingMutation, SettingMutationOptions, SettingQueryKey, SettingValue, setting };
@@ -0,0 +1,68 @@
1
+ import { mutationOptions, queryOptions } from "@tanstack/react-query";
2
+ import Storage from "expo-sqlite/kv-store";
3
+
4
+ //#region src/settings/index.ts
5
+ const settingNames = /* @__PURE__ */ new Set();
6
+ const settingNamePattern = /^[A-Za-z][A-Za-z0-9_.:-]*$/;
7
+ function setting(name, defaultValue) {
8
+ assertSettingName(name);
9
+ assertSettingValue(resolveDefault(defaultValue));
10
+ if (settingNames.has(name)) throw new Error(`Setting "${name}" is already registered. Define each setting once and import the existing setting instead.`);
11
+ settingNames.add(name);
12
+ const queryKey = [
13
+ "silo",
14
+ "setting",
15
+ name
16
+ ];
17
+ return {
18
+ name,
19
+ defaultValue,
20
+ queryKey,
21
+ queryOptions() {
22
+ return queryOptions({
23
+ queryKey,
24
+ queryFn: () => readSetting(name, defaultValue)
25
+ });
26
+ },
27
+ mutationOptions(options = {}) {
28
+ return mutationOptions({
29
+ mutationKey: queryKey,
30
+ mutationFn: async (valueOrUpdater) => {
31
+ const current = readSetting(name, defaultValue);
32
+ const next = typeof valueOrUpdater === "function" ? valueOrUpdater(current) : valueOrUpdater;
33
+ writeSetting(name, next);
34
+ return next;
35
+ },
36
+ onSuccess(value) {
37
+ options.queryClient?.setQueryData(queryKey, value);
38
+ }
39
+ });
40
+ }
41
+ };
42
+ }
43
+ function readSetting(name, defaultValue) {
44
+ const stored = Storage.getItemSync(storageKey(name));
45
+ if (stored === null) return resolveDefault(defaultValue);
46
+ const value = JSON.parse(stored);
47
+ assertSettingValue(value);
48
+ return value;
49
+ }
50
+ function writeSetting(name, value) {
51
+ assertSettingValue(value);
52
+ Storage.setItemSync(storageKey(name), JSON.stringify(value));
53
+ }
54
+ function storageKey(name) {
55
+ return `silo:setting:${name}`;
56
+ }
57
+ function resolveDefault(defaultValue) {
58
+ return typeof defaultValue === "function" ? defaultValue() : defaultValue;
59
+ }
60
+ function assertSettingName(name) {
61
+ if (!settingNamePattern.test(name)) throw new Error(`Setting names must start with a letter and contain only letters, numbers, underscores, dots, colons, or hyphens. Received "${name}".`);
62
+ }
63
+ function assertSettingValue(value) {
64
+ if (typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean" && value !== null) throw new Error("Settings must be strings, numbers, booleans, or null.");
65
+ }
66
+
67
+ //#endregion
68
+ export { setting };
package/dist/source.cjs CHANGED
@@ -1,3 +1,4 @@
1
+ const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
1
2
  let expo_sqlite = require("expo-sqlite");
2
3
 
3
4
  //#region src/source/index.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "silosdk",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "build": "tsdown",
@@ -51,6 +51,11 @@
51
51
  "import": "./dist/source.mjs",
52
52
  "require": "./dist/source.cjs"
53
53
  },
54
+ "./settings": {
55
+ "types": "./dist/settings.d.mts",
56
+ "import": "./dist/settings.mjs",
57
+ "require": "./dist/settings.cjs"
58
+ },
54
59
  "./package.json": "./package.json"
55
60
  }
56
61
  }