marwajs-dom 0.1.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/net.js ADDED
@@ -0,0 +1,188 @@
1
+ // @marwajs/dom/net
2
+ // Minimal fetch client with single-word verbs, JSON helpers, timeout, and interceptors.
3
+ //
4
+ // Usage:
5
+ // import { net } from "@marwajs/dom/net";
6
+ // const api = net("https://api.example.com", { headers: { Authorization: "Bearer X" } });
7
+ // const { data } = await api.get("/users", { q: "john" }).json();
8
+ // const r = await api.post("/items", { name: "A" }).json();
9
+ function qs(obj) {
10
+ if (!obj)
11
+ return "";
12
+ const p = Object.entries(obj)
13
+ .filter(([, v]) => v !== undefined && v !== null)
14
+ .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)
15
+ .join("&");
16
+ return p ? `?${p}` : "";
17
+ }
18
+ function isSafeUrl(url) {
19
+ try {
20
+ const u = new URL(url);
21
+ return u.protocol === "http:" || u.protocol === "https:";
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ const SAFE_EXTRA_KEYS = [
28
+ "body",
29
+ "cache",
30
+ "credentials",
31
+ "keepalive",
32
+ "referrer",
33
+ "referrerPolicy",
34
+ "signal",
35
+ "window",
36
+ ];
37
+ function safeExtra(extra) {
38
+ if (!extra)
39
+ return {};
40
+ const out = {};
41
+ for (const k of SAFE_EXTRA_KEYS) {
42
+ if (k in extra)
43
+ out[k] = extra[k];
44
+ }
45
+ return out;
46
+ }
47
+ function join(base, path) {
48
+ if (!base)
49
+ return path;
50
+ if (/^https?:\/\//i.test(path)) {
51
+ throw new Error("net: absolute path URLs are not allowed; use the base URL instead");
52
+ }
53
+ return base.replace(/\/+$/, "") + "/" + path.replace(/^\/+/, "");
54
+ }
55
+ class Reply {
56
+ constructor(res) {
57
+ this.res = res;
58
+ }
59
+ ok() {
60
+ if (!this.res.ok)
61
+ throw new Error(`${this.res.status} ${this.res.statusText}`);
62
+ return this;
63
+ }
64
+ async json() {
65
+ return { data: (await this.res.json()), res: this.res };
66
+ }
67
+ async text() {
68
+ return { data: await this.res.text(), res: this.res };
69
+ }
70
+ async blob() {
71
+ return { data: await this.res.blob(), res: this.res };
72
+ }
73
+ async bytes() {
74
+ return {
75
+ data: new Uint8Array(await this.res.arrayBuffer()),
76
+ res: this.res,
77
+ };
78
+ }
79
+ }
80
+ export function net(base, init = {}) {
81
+ if (base && !isSafeUrl(base))
82
+ throw new Error("net: base must be a safe http(s) URL");
83
+ let _base = base ?? init.base ?? "";
84
+ if (_base && !isSafeUrl(_base))
85
+ throw new Error("net: base must be a safe http(s) URL");
86
+ let _headers = new Headers(init.headers ?? {});
87
+ let _query = init.query;
88
+ let _timeout = init.timeout ?? 15000;
89
+ const _pending = new Set();
90
+ const _use = [];
91
+ const _after = [];
92
+ const _trap = [];
93
+ function compose(path, method, body, extra, query) {
94
+ const controller = new AbortController();
95
+ const mergedQuery = { ..._query, ...query };
96
+ const url = join(_base, path) + qs(mergedQuery);
97
+ const isJSON = body != null &&
98
+ typeof body !== "string" &&
99
+ !(body instanceof FormData) &&
100
+ !(body instanceof Blob);
101
+ const headers = new Headers(_headers);
102
+ if (isJSON)
103
+ headers.set("Content-Type", "application/json");
104
+ const init = {
105
+ method,
106
+ headers,
107
+ body: body == null
108
+ ? undefined
109
+ : isJSON
110
+ ? JSON.stringify(body)
111
+ : body,
112
+ signal: controller.signal,
113
+ ...safeExtra(extra),
114
+ };
115
+ return { url, init, controller };
116
+ }
117
+ async function run(req) {
118
+ for (const f of _use)
119
+ await f(req);
120
+ _pending.add(req.controller);
121
+ let timer;
122
+ if (_timeout > 0) {
123
+ timer = setTimeout(() => req.controller.abort(), _timeout);
124
+ }
125
+ try {
126
+ const res = await fetch(req.url, req.init);
127
+ for (const f of _after)
128
+ await f(res, req);
129
+ return new Reply(res);
130
+ }
131
+ catch (err) {
132
+ for (const f of _trap)
133
+ await f(err, req);
134
+ throw err;
135
+ }
136
+ finally {
137
+ clearTimeout(timer);
138
+ _pending.delete(req.controller);
139
+ }
140
+ }
141
+ const client = {
142
+ get: (path, query, extra) => run(compose(path, "GET", undefined, extra, query)),
143
+ head: (path, query, extra) => run(compose(path, "HEAD", undefined, extra, query)),
144
+ post: (path, body, extra) => run(compose(path, "POST", body, extra)),
145
+ put: (path, body, extra) => run(compose(path, "PUT", body, extra)),
146
+ patch: (path, body, extra) => run(compose(path, "PATCH", body, extra)),
147
+ del: (path, queryOrBody, extra) => {
148
+ if (queryOrBody &&
149
+ typeof queryOrBody === "object" &&
150
+ !(queryOrBody instanceof Blob) &&
151
+ !(queryOrBody instanceof FormData)) {
152
+ // prefer body for DELETE; but allow query via 'init'
153
+ return run(compose(path, "DELETE", queryOrBody, extra));
154
+ }
155
+ return run(compose(path, "DELETE", undefined, extra, queryOrBody));
156
+ },
157
+ use(fn) {
158
+ _use.push(fn);
159
+ return this;
160
+ },
161
+ after(fn) {
162
+ _after.push(fn);
163
+ return this;
164
+ },
165
+ trap(fn) {
166
+ _trap.push(fn);
167
+ return this;
168
+ },
169
+ abort() {
170
+ _pending.forEach((c) => c.abort());
171
+ _pending.clear();
172
+ },
173
+ header(name, value) {
174
+ _headers.set(name, value);
175
+ return this;
176
+ },
177
+ base(url) {
178
+ _base = url;
179
+ return this;
180
+ },
181
+ timeout(ms) {
182
+ _timeout = ms;
183
+ return this;
184
+ },
185
+ };
186
+ return client;
187
+ }
188
+ //# sourceMappingURL=net.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"net.js","sourceRoot":"","sources":["../src/net.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,wFAAwF;AACxF,EAAE;AACF,SAAS;AACT,4CAA4C;AAC5C,4FAA4F;AAC5F,oEAAoE;AACpE,8DAA8D;AAwB9D,SAAS,EAAE,CAAC,GAAW;IACrB,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;SAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC;SAChD,GAAG,CACF,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CACxE;SACA,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,eAAe,GAA0B;IAC7C,MAAM;IACN,OAAO;IACP,aAAa;IACb,WAAW;IACX,UAAU;IACV,gBAAgB;IAChB,QAAQ;IACR,QAAQ;CACT,CAAC;AAEF,SAAS,SAAS,CAAC,KAA8B;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,KAAK;YAAG,GAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,IAAI,CAAC,IAAwB,EAAE,IAAY;IAClD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,KAAK;IACT,YAAqB,GAAa;QAAb,QAAG,GAAH,GAAG,CAAU;IAAG,CAAC;IACtC,EAAE;QACA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,CAAC,IAAI;QACR,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/D,CAAC;IACD,KAAK,CAAC,IAAI;QACR,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACxD,CAAC;IACD,KAAK,CAAC,IAAI;QACR,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACxD,CAAC;IACD,KAAK,CAAC,KAAK;QACT,OAAO;YACL,IAAI,EAAE,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAClD,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC;IACJ,CAAC;CACF;AAyBD,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,OAAgB,EAAE;IACnD,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,IAAI,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IACpC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,IAAI,QAAQ,GAAY,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACxD,IAAI,MAAM,GAAsB,IAAI,CAAC,KAAK,CAAC;IAC3C,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC5C,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAkB,EAAE,CAAC;IAEhC,SAAS,OAAO,CACd,IAAY,EACZ,MAAc,EACd,IAAc,EACd,KAAmB,EACnB,KAAa;QAEb,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,MAAM,GACV,IAAI,IAAI,IAAI;YACZ,OAAO,IAAI,KAAK,QAAQ;YACxB,CAAC,CAAC,IAAI,YAAY,QAAQ,CAAC;YAC3B,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAgB;YACxB,MAAM;YACN,OAAO;YACP,IAAI,EACF,IAAI,IAAI,IAAI;gBACV,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,MAAM;oBACN,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBACtB,CAAC,CAAE,IAAY;YACrB,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,GAAG,SAAS,CAAC,KAAK,CAAC;SACpB,CAAC;QACF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,UAAU,GAAG,CAAC,GAAQ;QACzB,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE7B,IAAI,KAAU,CAAC;QACf,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3C,KAAK,MAAM,CAAC,IAAI,MAAM;gBAAE,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1C,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,KAAK;gBAAE,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzC,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAW;QACrB,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAC1B,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAC3B,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpE,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAClE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACtE,GAAG,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;YAChC,IACE,WAAW;gBACX,OAAO,WAAW,KAAK,QAAQ;gBAC/B,CAAC,CAAC,WAAW,YAAY,IAAI,CAAC;gBAC9B,CAAC,CAAC,WAAW,YAAY,QAAQ,CAAC,EAClC,CAAC;gBACD,qDAAqD;gBACrD,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,GAAG,CACR,OAAO,CACL,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,KAAK,EACL,WAAgC,CACjC,CACF,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,EAAe;YACjB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,EAAe;YACnB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,EAAe;YAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK;YACH,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACnC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QACD,MAAM,CAAC,IAAY,EAAE,KAAa;YAChC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,GAAW;YACd,KAAK,GAAG,GAAG,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,EAAU;YAChB,QAAQ,GAAG,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,13 @@
1
+ type Scope = "local" | "session";
2
+ export interface Store {
3
+ get<T = string>(key: string, fallback?: T): T | null;
4
+ set<T = unknown>(key: string, value: T): this;
5
+ rm(key: string): this;
6
+ has(key: string): boolean;
7
+ all<T = unknown>(): Record<string, T>;
8
+ clear(): this;
9
+ }
10
+ /** Create a namespaced storage */
11
+ export declare function store(scope?: Scope, ns?: string): Store;
12
+ export {};
13
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAMA,KAAK,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjC,MAAM,WAAW,KAAK;IACpB,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACrD,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAC9C,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,GAAG,CAAC,CAAC,GAAG,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtC,KAAK,IAAI,IAAI,CAAC;CACf;AAcD,kCAAkC;AAClC,wBAAgB,KAAK,CAAC,KAAK,GAAE,KAAe,EAAE,EAAE,SAAK,GAAG,KAAK,CA+E5D"}
package/dist/store.js ADDED
@@ -0,0 +1,94 @@
1
+ // @marwajs/dom/store
2
+ // Fluent, namespaced wrapper for local/session storage.
3
+ // Usage:
4
+ // import { store } from "@marwajs/dom/store";
5
+ // const s = store("local", "app:"); s.set("token", "abc"); s.get("token");
6
+ function raw(scope) {
7
+ return scope === "session" ? window.sessionStorage : window.localStorage;
8
+ }
9
+ function safe(fn, fallback) {
10
+ try {
11
+ return fn();
12
+ }
13
+ catch {
14
+ return fallback;
15
+ }
16
+ }
17
+ /** Create a namespaced storage */
18
+ export function store(scope = "local", ns = "") {
19
+ const R = raw(scope);
20
+ const keyOf = (k) => (ns ? ns + k : k);
21
+ return {
22
+ get(key, fallback) {
23
+ return safe(() => {
24
+ const v = R.getItem(keyOf(key));
25
+ if (v == null)
26
+ return fallback ?? null;
27
+ if (typeof v === "string" && !v.startsWith("{")) {
28
+ try {
29
+ return JSON.parse(v);
30
+ }
31
+ catch {
32
+ return v;
33
+ }
34
+ }
35
+ try {
36
+ return JSON.parse(v);
37
+ }
38
+ catch {
39
+ return v;
40
+ }
41
+ }, fallback ?? null);
42
+ },
43
+ set(key, value) {
44
+ safe(() => R.setItem(keyOf(key), typeof value === "string" ? value : JSON.stringify(value)), undefined);
45
+ return this;
46
+ },
47
+ rm(key) {
48
+ safe(() => R.removeItem(keyOf(key)), undefined);
49
+ return this;
50
+ },
51
+ has(key) {
52
+ return safe(() => R.getItem(keyOf(key)) != null, false);
53
+ },
54
+ all() {
55
+ return safe(() => {
56
+ const out = {};
57
+ for (let i = 0; i < R.length; i++) {
58
+ const k = R.key(i);
59
+ if (ns && !k.startsWith(ns))
60
+ continue;
61
+ const short = ns ? k.slice(ns.length) : k;
62
+ const v = R.getItem(k);
63
+ if (v == null) {
64
+ out[short] = null;
65
+ continue;
66
+ }
67
+ try {
68
+ out[short] = JSON.parse(v);
69
+ }
70
+ catch {
71
+ out[short] = v;
72
+ }
73
+ }
74
+ return out;
75
+ }, {});
76
+ },
77
+ clear() {
78
+ if (!ns) {
79
+ safe(() => R.clear(), undefined);
80
+ }
81
+ else {
82
+ const keys = [];
83
+ for (let i = 0; i < R.length; i++) {
84
+ const k = R.key(i);
85
+ if (k.startsWith(ns))
86
+ keys.push(k);
87
+ }
88
+ keys.forEach((k) => safe(() => R.removeItem(k), undefined));
89
+ }
90
+ return this;
91
+ },
92
+ };
93
+ }
94
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,wDAAwD;AACxD,SAAS;AACT,gDAAgD;AAChD,6EAA6E;AAa7E,SAAS,GAAG,CAAC,KAAY;IACvB,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;AAC3E,CAAC;AAED,SAAS,IAAI,CAAI,EAAW,EAAE,QAAW;IACvC,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,KAAK,CAAC,QAAe,OAAO,EAAE,EAAE,GAAG,EAAE;IACnD,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IACrB,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,OAAO;QACL,GAAG,CAAa,GAAW,EAAE,QAAY;YACvC,OAAO,IAAI,CAAC,GAAG,EAAE;gBACf,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChC,IAAI,CAAC,IAAI,IAAI;oBAAE,OAAO,QAAQ,IAAI,IAAI,CAAC;gBACvC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChD,IAAI,CAAC;wBACH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAM,CAAC;oBAC5B,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,CAAiB,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAM,CAAC;gBAC5B,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAiB,CAAC;gBAC3B,CAAC;YACH,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,GAAG,CAAc,GAAW,EAAE,KAAQ;YACpC,IAAI,CACF,GAAG,EAAE,CACH,CAAC,CAAC,OAAO,CACP,KAAK,CAAC,GAAG,CAAC,EACV,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAC1D,EACH,SAAS,CACV,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,EAAE,CAAC,GAAW;YACZ,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,GAAG,CAAC,GAAW;YACb,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;QACD,GAAG;YACD,OAAO,IAAI,CACT,GAAG,EAAE;gBACH,MAAM,GAAG,GAAsB,EAAE,CAAC;gBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;oBACpB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;wBAAE,SAAS;oBACtC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACvB,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;wBACb,GAAW,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;wBAC3B,SAAS;oBACX,CAAC;oBACD,IAAI,CAAC;wBACF,GAAW,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACtC,CAAC;oBAAC,MAAM,CAAC;wBACN,GAAW,CAAC,KAAK,CAAC,GAAG,CAAQ,CAAC;oBACjC,CAAC;gBACH,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC,EACD,EAAuB,CACxB,CAAC;QACJ,CAAC;QACD,KAAK;YACH,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAa,EAAE,CAAC;gBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;oBACpB,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;wBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrC,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "marwajs-dom",
3
+ "version": "0.1.0",
4
+ "description": "Fluent, single-word, chainable DOM utilities + fx/store/net add-ons.",
5
+ "keywords": [
6
+ "dom",
7
+ "fluent",
8
+ "utility",
9
+ "typescript",
10
+ "esm",
11
+ "micro"
12
+ ],
13
+ "license": "MIT",
14
+ "author": "Mohammad Emran <memran.dhk@gmail.com>",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/memran/marwajs-dom"
18
+ },
19
+ "type": "module",
20
+ "sideEffects": false,
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ },
26
+ "./fx": {
27
+ "types": "./dist/fx.d.ts",
28
+ "import": "./dist/fx.js"
29
+ },
30
+ "./store": {
31
+ "types": "./dist/store.d.ts",
32
+ "import": "./dist/store.js"
33
+ },
34
+ "./net": {
35
+ "types": "./dist/net.d.ts",
36
+ "import": "./dist/net.js"
37
+ },
38
+ "./package.json": "./package.json"
39
+ },
40
+ "main": "./dist/index.js",
41
+ "module": "./dist/index.js",
42
+ "types": "./dist/index.d.ts",
43
+ "files": [
44
+ "dist",
45
+ "README.md",
46
+ "LICENSE"
47
+ ],
48
+ "scripts": {
49
+ "build": "tsc -p tsconfig.json",
50
+ "clean": "rimraf dist",
51
+ "dev": "tsc -w -p tsconfig.json",
52
+ "prepare": "npm run build",
53
+ "lint": "eslint \"src/**/*.{ts,tsx}\"",
54
+ "format": "prettier -w \"src/**/*.{ts,tsx,md}\"",
55
+ "test": "vitest run",
56
+ "test:watch": "vitest"
57
+ },
58
+ "devDependencies": {
59
+ "@types/node": "^22.19.17",
60
+ "@typescript-eslint/eslint-plugin": "^8.58.1",
61
+ "@typescript-eslint/parser": "^8.58.1",
62
+ "eslint": "^9.10.0",
63
+ "happy-dom": "^20.8.9",
64
+ "prettier": "^3.3.3",
65
+ "rimraf": "^6.0.1",
66
+ "typescript": "^5.6.3",
67
+ "vitest": "^4.1.4"
68
+ },
69
+ "engines": {
70
+ "node": ">=18"
71
+ }
72
+ }