@aurum-grid/enterprise 0.0.0-stage → 0.2.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/sync.js ADDED
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Persist a grid configuration to a REST collection:
3
+ * POST {endpoint} → 201 + Location: /grids/42 (or JSON { id })
4
+ * PUT {resource} ← debounced edits, strictly one at a time, latest wins
5
+ * Without an endpoint the client stays in "local-only" mode and says so.
6
+ */
7
+ export function validateCollectionUrl(raw) {
8
+ const value = raw.trim();
9
+ if (!value)
10
+ return { ok: false, error: 'Enter an endpoint URL.' };
11
+ let url;
12
+ try {
13
+ url = new URL(value, typeof location !== 'undefined' ? location.href : 'http://localhost/');
14
+ }
15
+ catch {
16
+ return { ok: false, error: 'That is not a valid URL.' };
17
+ }
18
+ const local = ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname);
19
+ if (url.username || url.password)
20
+ return { ok: false, error: 'Remove the user name and password from the URL.' };
21
+ if (url.protocol === 'http:' && !local)
22
+ return { ok: false, error: 'Use https:// — plain http is only allowed for localhost.' };
23
+ if (url.protocol !== 'https:' && url.protocol !== 'http:')
24
+ return { ok: false, error: 'The endpoint must be an https:// URL.' };
25
+ return { ok: true, url: url.toString() };
26
+ }
27
+ export class GridSync {
28
+ o;
29
+ state;
30
+ chain = Promise.resolve();
31
+ pending = null;
32
+ timer = null;
33
+ disposed = false;
34
+ endpoint;
35
+ fetcher;
36
+ constructor(o = {}) {
37
+ this.o = o;
38
+ this.fetcher = o.fetch ?? (typeof fetch === 'function' ? fetch.bind(globalThis) : null);
39
+ if (o.endpoint) {
40
+ const v = validateCollectionUrl(o.endpoint);
41
+ if (!v.ok)
42
+ throw new Error(v.error);
43
+ this.endpoint = v.url;
44
+ }
45
+ else
46
+ this.endpoint = null;
47
+ this.state = {
48
+ status: this.endpoint ? 'idle' : 'local-only',
49
+ message: this.endpoint ? 'Ready to save to the server.' : 'Remote saving is off. Edits stay in this browser tab and have not been sent anywhere.',
50
+ resourceUrl: null, revision: 0, savedRevision: 0, lastSavedAt: null, requests: 0,
51
+ };
52
+ }
53
+ getState() {
54
+ return { ...this.state };
55
+ }
56
+ set(patch) {
57
+ if (this.disposed)
58
+ return;
59
+ this.state = { ...this.state, ...patch };
60
+ this.o.onState?.(this.getState());
61
+ }
62
+ async request(method, url, body) {
63
+ if (!this.fetcher)
64
+ throw new Error('fetch is not available in this environment');
65
+ const ctrl = new AbortController();
66
+ const t = setTimeout(() => ctrl.abort(), this.o.timeoutMs ?? 20_000);
67
+ this.state.requests++;
68
+ try {
69
+ const res = await this.fetcher(url, {
70
+ method,
71
+ headers: { 'Content-Type': 'application/json', Accept: 'application/json', ...this.o.headers },
72
+ body: JSON.stringify(body),
73
+ signal: ctrl.signal,
74
+ });
75
+ const json = await res.json().catch(() => null);
76
+ if (!res.ok) {
77
+ const detail = json && typeof json === 'object' && 'error' in json ? `: ${String(json.error).slice(0, 200)}` : '';
78
+ throw new Error(`HTTP ${res.status}${detail}`);
79
+ }
80
+ return { status: res.status, location: res.headers.get('Location') ?? res.headers.get('location'), json };
81
+ }
82
+ catch (err) {
83
+ if (err.name === 'AbortError')
84
+ throw new Error('The server took too long to respond.');
85
+ throw err;
86
+ }
87
+ finally {
88
+ clearTimeout(t);
89
+ }
90
+ }
91
+ /** POST the full configuration. Resolves once the server has created the resource (or failed). */
92
+ create(payload) {
93
+ if (!this.endpoint) {
94
+ this.set({ status: 'local-only' });
95
+ return Promise.resolve();
96
+ }
97
+ const endpoint = this.endpoint;
98
+ this.chain = this.chain.then(async () => {
99
+ this.set({ status: 'creating', message: 'Creating the grid on the server…' });
100
+ try {
101
+ const res = await this.request('POST', endpoint, payload);
102
+ const id = res.json && typeof res.json === 'object' ? (res.json.id ?? res.json.gridId) : undefined;
103
+ let resourceUrl = null;
104
+ if (res.location)
105
+ resourceUrl = new URL(res.location, endpoint).toString();
106
+ else if (id != null && /^[\w.-]{1,128}$/.test(String(id)))
107
+ resourceUrl = `${endpoint.replace(/\/+$/, '')}/${encodeURIComponent(String(id))}`;
108
+ if (!resourceUrl) {
109
+ this.set({ status: 'error', message: "The server created the grid but returned no Location header or id, so edits can't be saved. They are kept locally." });
110
+ return;
111
+ }
112
+ this.set({ status: 'saved', resourceUrl, savedRevision: this.state.revision, lastSavedAt: new Date().toISOString(), message: `Created on the server (${res.status}).` });
113
+ }
114
+ catch (err) {
115
+ this.set({ status: 'error', message: `Couldn't create the grid on the server: ${err.message}. Your data is kept locally.` });
116
+ }
117
+ });
118
+ return this.chain;
119
+ }
120
+ /** Record an edit; the latest payload is PUT after the debounce interval. */
121
+ update(payload) {
122
+ if (this.disposed)
123
+ return;
124
+ this.state.revision++;
125
+ this.pending = payload;
126
+ if (!this.endpoint) {
127
+ this.set({ status: 'local-only', message: `Saved locally only (${this.state.revision} edit${this.state.revision === 1 ? '' : 's'}). Remote persistence has not occurred.` });
128
+ return;
129
+ }
130
+ if (!this.state.resourceUrl) {
131
+ this.set({ message: 'Edit kept. It will be sent once the grid exists on the server.' });
132
+ if (this.state.status === 'error')
133
+ return;
134
+ }
135
+ if (this.timer)
136
+ clearTimeout(this.timer);
137
+ this.set({ status: 'saving', message: 'Unsaved changes…' });
138
+ this.timer = setTimeout(() => {
139
+ this.timer = null;
140
+ void this.flush();
141
+ }, this.o.debounceMs ?? 800);
142
+ }
143
+ /** Send any pending edit now (still serialised behind in-flight requests). */
144
+ flush() {
145
+ if (this.timer) {
146
+ clearTimeout(this.timer);
147
+ this.timer = null;
148
+ }
149
+ this.chain = this.chain.then(async () => {
150
+ const body = this.pending;
151
+ const url = this.state.resourceUrl;
152
+ if (!body || !url || this.disposed)
153
+ return;
154
+ this.pending = null;
155
+ const revision = this.state.revision;
156
+ this.set({ status: 'saving', message: 'Saving…' });
157
+ try {
158
+ await this.request('PUT', url, body);
159
+ this.set({
160
+ status: this.pending ? 'saving' : 'saved',
161
+ savedRevision: revision,
162
+ lastSavedAt: new Date().toISOString(),
163
+ message: this.pending ? 'Saving newer changes…' : `All changes saved (revision ${revision}).`,
164
+ });
165
+ }
166
+ catch (err) {
167
+ // keep the payload so a retry sends it, unless something newer arrived
168
+ if (!this.pending)
169
+ this.pending = body;
170
+ this.set({ status: 'error', message: `Save failed: ${err.message}. Your edits are kept locally — retry or keep editing.` });
171
+ }
172
+ });
173
+ return this.chain;
174
+ }
175
+ retry() {
176
+ return this.state.resourceUrl ? this.flush() : Promise.resolve();
177
+ }
178
+ dispose() {
179
+ if (this.timer)
180
+ clearTimeout(this.timer);
181
+ this.disposed = true;
182
+ }
183
+ }
184
+ export function createGridSync(o = {}) {
185
+ return new GridSync(o);
186
+ }
187
+ export function createMockCollectionServer(o = {}) {
188
+ const base = (o.baseUrl ?? 'https://mock.aurum-grid.local/api/grids').replace(/\/+$/, '');
189
+ const store = new Map();
190
+ const log = [];
191
+ let seq = 0;
192
+ let failNext = o.failNext ?? 0;
193
+ const latency = () => (typeof o.latencyMs === 'function' ? o.latencyMs() : o.latencyMs ?? 250);
194
+ const respond = (status, body, headers = {}) => ({
195
+ ok: status >= 200 && status < 300,
196
+ status,
197
+ headers: { get: (n) => headers[n] ?? headers[n.toLowerCase()] ?? null },
198
+ json: async () => body,
199
+ });
200
+ const fetchImpl = async (url, init = {}) => {
201
+ await new Promise((r) => setTimeout(r, latency()));
202
+ if (init.signal?.aborted)
203
+ throw Object.assign(new Error('aborted'), { name: 'AbortError' });
204
+ const method = (init.method ?? 'GET').toUpperCase();
205
+ const bytes = init.body?.length ?? 0;
206
+ const done = (status, body, headers) => {
207
+ log.push({ at: new Date().toISOString(), method, url, status, bytes });
208
+ return respond(status, body, headers);
209
+ };
210
+ if (failNext > 0) {
211
+ failNext--;
212
+ return done(503, { error: 'Service temporarily unavailable' });
213
+ }
214
+ if (bytes > 20 * 1024 * 1024)
215
+ return done(413, { error: 'Payload too large' });
216
+ const path = url.replace(/[?#].*$/, '').replace(/\/+$/, '');
217
+ if (method === 'POST' && path === base) {
218
+ const id = `g${++seq}`;
219
+ store.set(id, JSON.parse(init.body ?? '{}'));
220
+ return done(201, { id }, { Location: `${base}/${id}` });
221
+ }
222
+ const m = path.startsWith(`${base}/`) ? path.slice(base.length + 1) : null;
223
+ if (m && store.has(m)) {
224
+ if (method === 'PUT') {
225
+ store.set(m, JSON.parse(init.body ?? '{}'));
226
+ return done(200, { id: m, saved: true });
227
+ }
228
+ if (method === 'GET')
229
+ return done(200, store.get(m));
230
+ }
231
+ return done(404, { error: 'Not found' });
232
+ };
233
+ return {
234
+ baseUrl: base,
235
+ fetch: fetchImpl,
236
+ log,
237
+ get: (id) => store.get(id),
238
+ failNextRequests: (n) => {
239
+ failNext = n;
240
+ },
241
+ };
242
+ }
243
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,43 @@
1
1
  {
2
2
  "name": "@aurum-grid/enterprise",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.2.0",
4
+ "description": "Aurum Grid Enterprise modules: pivot, range selection, Excel export, status bar, side bar, advanced filter.",
5
+ "license": "SEE LICENSE IN LICENSE.md",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./styles.css": "./dist/styles.css"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "LICENSE.md",
19
+ "README.md"
20
+ ],
21
+ "sideEffects": [
22
+ "*.css"
23
+ ],
24
+ "dependencies": {
25
+ "@aurum-grid/license": "0.2.0",
26
+ "@aurum-grid/core": "0.2.0"
27
+ },
28
+ "publishConfig": {
29
+ "access": "public"
30
+ },
31
+ "keywords": [
32
+ "data grid",
33
+ "datagrid",
34
+ "table",
35
+ "enterprise",
36
+ "pivot",
37
+ "ag-grid alternative"
38
+ ],
39
+ "scripts": {
40
+ "build": "tsc -p tsconfig.json && node ../../scripts/copy-css.mjs",
41
+ "typecheck": "tsc -p tsconfig.json --noEmit"
42
+ }
6
43
  }