@lotics/app-sdk 0.123.1 → 0.123.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.
@@ -181,10 +181,75 @@ function telemetryErrorMessage(status, parsed) {
181
181
  return code ?? gatewayErrorMessage(status);
182
182
  }
183
183
 
184
- // ../shared/src/schemas/app_spec_rules.ts
185
- function tiersAscend(tiers) {
186
- return tiers.every((tier, index) => index === 0 || tier > (tiers[index - 1] ?? tier));
184
+ // ../shared/src/diacritics.ts
185
+ var COMBINING_MARKS = /[̀-ͯ]/g;
186
+ function foldDiacritics(value) {
187
+ return value.normalize("NFD").replace(COMBINING_MARKS, "").replace(/[đĐ]/g, (c) => c === "\u0111" ? "d" : "D");
188
+ }
189
+ function foldSearchText(value) {
190
+ return foldDiacritics(value).toLowerCase();
191
+ }
192
+ function searchWords(value) {
193
+ return (typeof value === "string" ? [value] : value).map((word) => word.trim()).filter((word) => foldSearchText(word).trim() !== "");
187
194
  }
195
+
196
+ // ../../node_modules/nanoid/index.browser.js
197
+ var random = (bytes) => crypto.getRandomValues(new Uint8Array(bytes));
198
+ var customRandom = (alphabet, defaultSize, getRandom) => {
199
+ let safeByteCutoff = 256 - 256 % alphabet.length;
200
+ if (safeByteCutoff === 256) {
201
+ let mask = alphabet.length - 1;
202
+ return (size = defaultSize) => {
203
+ if (!size) return "";
204
+ let id = "";
205
+ while (true) {
206
+ let bytes = getRandom(size);
207
+ let j = size;
208
+ while (j--) {
209
+ id += alphabet[bytes[j] & mask];
210
+ if (id.length >= size) return id;
211
+ }
212
+ }
213
+ };
214
+ }
215
+ let step = Math.ceil(1.6 * 256 * defaultSize / safeByteCutoff);
216
+ return (size = defaultSize) => {
217
+ if (!size) return "";
218
+ let id = "";
219
+ while (true) {
220
+ let bytes = getRandom(step);
221
+ let j = step;
222
+ while (j--) {
223
+ if (bytes[j] < safeByteCutoff) {
224
+ id += alphabet[bytes[j] % alphabet.length];
225
+ if (id.length >= size) return id;
226
+ }
227
+ }
228
+ }
229
+ };
230
+ };
231
+ var customAlphabet = (alphabet, size = 21) => customRandom(alphabet, size | 0, random);
232
+
233
+ // ../shared/src/id.ts
234
+ var ID_ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
235
+ var ID_LENGTH = 12;
236
+ var nanoid = customAlphabet(ID_ALPHABET, ID_LENGTH);
237
+ var RECORD_ID_PATTERN = new RegExp(`^rec_[${ID_ALPHABET}]{${ID_LENGTH}}$`);
238
+ var FILE_ID_PATTERN = new RegExp(`^fil_[${ID_ALPHABET}]{${ID_LENGTH}}$`);
239
+ var TABLE_ID_PATTERN = new RegExp(
240
+ `^tbl_[${ID_ALPHABET}]+$|^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`,
241
+ "i"
242
+ );
243
+ var PREFIXED_ID_PATTERN = new RegExp(`^[a-z]{3}_[${ID_ALPHABET}]{${ID_LENGTH}}$`);
244
+
245
+ // ../shared/src/table_field_keys.ts
246
+ var nanoid2 = customAlphabet(ID_ALPHABET, 6);
247
+ var FIELD_KEY_PREFIX = "fld_";
248
+ function isFieldKey(value) {
249
+ return value.startsWith(FIELD_KEY_PREFIX);
250
+ }
251
+
252
+ // ../shared/src/schemas/app_spec_rules.ts
188
253
  var bandKey = (band) => `${band.min ?? ""}..${band.max ?? ""}`;
189
254
  function bandOf(tiers, figure) {
190
255
  const above = tiers.findIndex((tier) => figure < tier);
@@ -1333,6 +1398,7 @@ function ensureListener() {
1333
1398
  pending.delete(msg.id);
1334
1399
  if (msg.type === "result") handler.resolve(msg.data);
1335
1400
  else handler.reject(new Error(msg.message ?? "RPC failed"));
1401
+ if (pending.size === 0) scheduleDrawn(event.origin);
1336
1402
  return;
1337
1403
  }
1338
1404
  const stream = streaming.get(msg.id);
@@ -1350,15 +1416,40 @@ function ensureListener() {
1350
1416
  }
1351
1417
  });
1352
1418
  }
1353
- var loadTimingSent = false;
1419
+ var firstRequestSent = false;
1420
+ var requestsSent = 0;
1421
+ var drawnPosted = false;
1422
+ var drawnScheduled = false;
1423
+ function scheduleDrawn(host) {
1424
+ if (drawnPosted || drawnScheduled) return;
1425
+ drawnScheduled = true;
1426
+ const sentAtStart = requestsSent;
1427
+ requestAnimationFrame(
1428
+ () => requestAnimationFrame(() => {
1429
+ drawnScheduled = false;
1430
+ if (pending.size === 0 && requestsSent === sentAtStart) {
1431
+ drawnPosted = true;
1432
+ window.parent.postMessage({ type: "drawn" }, host);
1433
+ } else if (pending.size === 0) {
1434
+ scheduleDrawn(host);
1435
+ }
1436
+ })
1437
+ );
1438
+ }
1354
1439
  function rpcBridged(op, payload, host) {
1355
1440
  ensureListener();
1356
1441
  return new Promise((resolve, reject) => {
1357
1442
  const id = nextRpcId++;
1358
1443
  pending.set(id, { resolve, reject });
1359
- const load = loadTimingSent ? {} : measureLoadTiming(performance.now());
1360
- loadTimingSent = true;
1361
- window.parent.postMessage(Object.keys(load).length === 0 ? { id, op, payload } : { id, op, payload, load }, host);
1444
+ requestsSent += 1;
1445
+ if (firstRequestSent) {
1446
+ window.parent.postMessage({ id, op, payload }, host);
1447
+ return;
1448
+ }
1449
+ firstRequestSent = true;
1450
+ const load = measureLoadTiming(performance.now());
1451
+ const first2 = { id, op, payload, reportsDrawn: true };
1452
+ window.parent.postMessage(Object.keys(load).length === 0 ? first2 : { ...first2, load }, host);
1362
1453
  });
1363
1454
  }
1364
1455
  function rpcAgentRun(payload, onText, onRunId) {
@@ -1904,7 +1995,11 @@ async function standaloneUpload(file, fidelity, place) {
1904
1995
 
1905
1996
  export {
1906
1997
  __export,
1907
- tiersAscend,
1998
+ foldDiacritics,
1999
+ foldSearchText,
2000
+ searchWords,
2001
+ customAlphabet,
2002
+ isFieldKey,
1908
2003
  bandKey,
1909
2004
  bandOf,
1910
2005
  addDecimal,