@xanots/sdk 0.0.11 → 0.0.12

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.
Files changed (97) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +11 -6
  3. package/dist/.build-fingerprint +1 -1
  4. package/dist/{agent-file-refresh-QNKN5RYD.js → agent-file-refresh-GQWAAOBV.js} +4 -4
  5. package/dist/bin.js +11 -11
  6. package/dist/{branch-commands-2BLOC2GR.js → branch-commands-5KMPAAZV.js} +7 -7
  7. package/dist/bundle.d.ts +2 -2
  8. package/dist/bundle.js +2 -2
  9. package/dist/{capture-4WVJY4DQ.js → capture-YLUVAITI.js} +2 -2
  10. package/dist/chunk-2VTJSI6X.js +192 -0
  11. package/dist/{chunk-5XZ744TS.js → chunk-2ZCUO2UG.js} +1 -1
  12. package/dist/{chunk-XEOX6AM7.js → chunk-3LQGF2WS.js} +2 -2
  13. package/dist/{chunk-WP4OZZV4.js → chunk-3VFCKHOB.js} +2 -2
  14. package/dist/{chunk-XHEXOES3.js → chunk-5YDINUAP.js} +1 -1
  15. package/dist/{chunk-LU7TRWMC.js → chunk-6VNRMKFJ.js} +2 -2
  16. package/dist/{chunk-CTD5ZCV6.js → chunk-7WRJPKGK.js} +2 -2
  17. package/dist/{chunk-3INK4Y4E.js → chunk-AE3PDSDS.js} +1 -1
  18. package/dist/{chunk-22TKBSDV.js → chunk-AG5GCZDD.js} +2 -2
  19. package/dist/{chunk-DBFU47BJ.js → chunk-AOFFKSJC.js} +2 -2
  20. package/dist/{chunk-TCFIPDB3.js → chunk-AVGDL6RB.js} +1 -1
  21. package/dist/{chunk-BC2C5GVI.js → chunk-DCMANKMX.js} +1 -1
  22. package/dist/{chunk-WHOJWOSV.js → chunk-EETVJZAZ.js} +1 -1
  23. package/dist/{chunk-4Q7ZOHH7.js → chunk-ELK7UALJ.js} +3 -3
  24. package/dist/{chunk-VNQM3V2C.js → chunk-EXENFOWE.js} +2 -2
  25. package/dist/{chunk-UOZMSF4C.js → chunk-GSP2BY4F.js} +5 -5
  26. package/dist/{chunk-AIZKXUNP.js → chunk-IMLYGQK6.js} +2 -2
  27. package/dist/{chunk-QK7ZQJLP.js → chunk-N74KDCBD.js} +39 -25
  28. package/dist/{chunk-3IGNIP6R.js → chunk-NDP7OUPS.js} +1 -1
  29. package/dist/{chunk-EQW3YT5U.js → chunk-P6PVBQL6.js} +2 -2
  30. package/dist/{chunk-HYBN4H3F.js → chunk-PLE5QQOZ.js} +27 -20
  31. package/dist/{chunk-BSK7ELHU.js → chunk-PR7OXHGZ.js} +1 -1
  32. package/dist/{chunk-OWGCOGKK.js → chunk-QYSQ3UDO.js} +8 -8
  33. package/dist/{chunk-ZQ2PKR6R.js → chunk-RQ3FXV4K.js} +2 -2
  34. package/dist/{chunk-Q77KNEUL.js → chunk-RQNMTDXD.js} +1703 -2
  35. package/dist/{chunk-QKM4U5UK.js → chunk-TJS2AF5Y.js} +2 -2
  36. package/dist/{chunk-DIA7CT7J.js → chunk-V5Y7D4LH.js} +11 -2
  37. package/dist/{chunk-KA6G2L7U.js → chunk-VK26K7AY.js} +3 -3
  38. package/dist/{chunk-4IF54NU5.js → chunk-VPAWRBK5.js} +12 -16
  39. package/dist/{chunk-QYMAZRAU.js → chunk-VRNZ2NVV.js} +5 -5
  40. package/dist/{chunk-RCT7UX7B.js → chunk-XT3XQ4PF.js} +32 -27
  41. package/dist/{chunk-VAF6A3YD.js → chunk-XWFRNJMQ.js} +1 -1
  42. package/dist/{chunk-7ZYW652H.js → chunk-YHS6VVLJ.js} +2 -2
  43. package/dist/{chunk-G4EJMQLD.js → chunk-YX22LKQE.js} +2 -2
  44. package/dist/{chunk-F6CYJ7TN.js → chunk-Z2ZIE5CO.js} +2 -2
  45. package/dist/cli.d.ts +13 -6
  46. package/dist/cli.js +10 -10
  47. package/dist/codegen-command-Y2SPMAUW.js +47 -0
  48. package/dist/codegen.d.ts +5 -5
  49. package/dist/codegen.js +2 -2
  50. package/dist/{completion-WF46272M.js → completion-HJU5QEFB.js} +2 -2
  51. package/dist/{deploy-command-IP7V7GT4.js → deploy-command-XHS5PKPV.js} +19 -19
  52. package/dist/{ephemeral-command-U4AQ3TXX.js → ephemeral-command-2NKPEXUU.js} +8 -8
  53. package/dist/index.d.ts +88 -104
  54. package/dist/index.js +9 -9
  55. package/dist/init-command-23FFNUFT.js +32 -0
  56. package/dist/internal.d.ts +10 -16
  57. package/dist/internal.js +26 -26
  58. package/dist/{io-P2H75UV2.js → io-UBDMMDH6.js} +3 -3
  59. package/dist/{live-diff-IXKBVG4K.js → live-diff-HCOTN5WC.js} +3 -3
  60. package/dist/{lock-46FWYE4D.js → lock-HQ4KARU2.js} +2 -2
  61. package/dist/{lock-commands-ZZKZ4LZJ.js → lock-commands-WCRC56ME.js} +11 -11
  62. package/dist/{login-command-Z6CHTA57.js → login-command-P7LXD5TE.js} +6 -6
  63. package/dist/{loop-D5NPL4VH.js → loop-IC5ISSYB.js} +3 -3
  64. package/dist/{marketplace-command-P4IPLJ6J.js → marketplace-command-T6JCHW7J.js} +4 -4
  65. package/dist/{meta-client-K2J4XH64.js → meta-client-LKRKR3L2.js} +4 -4
  66. package/dist/node.d.ts +6 -6
  67. package/dist/node.js +14 -14
  68. package/dist/{preflight-command-K346GPTY.js → preflight-command-TZWPHBXY.js} +16 -16
  69. package/dist/{profile-command-LJSBDV2L.js → profile-command-WBNSMQSI.js} +3 -3
  70. package/dist/{release-command-IMNTIVWK.js → release-command-WEFYRTCI.js} +26 -26
  71. package/dist/{response-BQVQ24l1.d.ts → response-D6xGLEIn.d.ts} +18 -23
  72. package/dist/{routes-manifest-PWZHDOI5.js → routes-manifest-5ZFKUQWA.js} +2 -2
  73. package/dist/{runtime-V4C3AC3A.js → runtime-LSLIDALK.js} +1 -1
  74. package/dist/scaffold.d.ts +16 -8
  75. package/dist/scaffold.js +7 -11
  76. package/dist/{static-host-3WMV7IZO.js → static-host-4JDQCHUW.js} +1 -1
  77. package/dist/{status-command-AL47VG7H.js → status-command-VARULAR5.js} +4 -4
  78. package/dist/{store-BLyNeQ8S.d.ts → store-DAnUIi1T.d.ts} +81 -86
  79. package/dist/{test-command-YAZLKLGQ.js → test-command-YCAR4O35.js} +7 -7
  80. package/dist/{upgrade-command-BN3EHAOI.js → upgrade-command-GYEIMJBG.js} +15 -16
  81. package/dist/{workspace-2COHDBM3.js → workspace-33KHFLX3.js} +2 -2
  82. package/dist/{workspace-command-MNK7Y7MQ.js → workspace-command-2ZTGT26W.js} +26 -28
  83. package/dist/{workspace-export-DURY5WYL.js → workspace-export-MLYTYZS5.js} +3 -3
  84. package/dist/{xdo-BjJj5W_E.d.ts → xdo-ODuJklk6.d.ts} +27 -23
  85. package/guides/authoring.md +11 -2
  86. package/guides/typed-frontend.md +4 -4
  87. package/llms/statements-data.md +3 -2
  88. package/llms/values.md +1 -1
  89. package/llms-full.txt +18 -18
  90. package/llms.txt +14 -15
  91. package/manifest.json +6 -2
  92. package/package.json +1 -1
  93. package/dist/chunk-ANUDXFEX.js +0 -881
  94. package/dist/chunk-JGCWTCA7.js +0 -95
  95. package/dist/chunk-YBC3IKMF.js +0 -845
  96. package/dist/codegen-command-FUT2KJB6.js +0 -49
  97. package/dist/init-command-NPVL32L6.js +0 -34
@@ -2,7 +2,7 @@ import {
2
2
  assertPathParamInputs,
3
3
  fillPathParams,
4
4
  parsePathParams
5
- } from "./chunk-WHOJWOSV.js";
5
+ } from "./chunk-EETVJZAZ.js";
6
6
  import {
7
7
  appNamesByGuid,
8
8
  deriveGuid,
@@ -12,7 +12,7 @@ import {
12
12
  lockNameForObject,
13
13
  queryGroupComponent,
14
14
  resolveRef
15
- } from "./chunk-VAF6A3YD.js";
15
+ } from "./chunk-XWFRNJMQ.js";
16
16
  import {
17
17
  COLUMN_CONTEXT,
18
18
  INPUT_CONTEXT,
@@ -22,7 +22,7 @@ import {
22
22
  encodeStatement,
23
23
  rawResponseItems,
24
24
  registerStatement
25
- } from "./chunk-5XZ744TS.js";
25
+ } from "./chunk-2ZCUO2UG.js";
26
26
  import {
27
27
  sha1Bytes
28
28
  } from "./chunk-OHX6MIUZ.js";
@@ -139,7 +139,7 @@ var DiagnosticBag = class {
139
139
  * a guard. But the audience for this SDK is largely an agent that never reads
140
140
  * stderr, and CI has no way to notice a message nobody fails on. `strict`
141
141
  * gives a pipeline one switch that turns "printed something" into "did not
142
- * ship" (issue #15).
142
+ * ship".
143
143
  *
144
144
  * Scope: the diagnostics an EXPORT collects. A guard that runs while a
145
145
  * statement is being built ({@link emitDiagnostic}) has already had its say by
@@ -374,7 +374,7 @@ var c = {
374
374
  * A `number` that is not an integer, or is past `Number.MAX_SAFE_INTEGER`,
375
375
  * **throws**: by the time such a literal reaches here its precision is already
376
376
  * gone, so encoding it would write a value the caller did not type. The throw
377
- * names the string form. (issue #153)
377
+ * names the string form.
378
378
  */
379
379
  int(n) {
380
380
  return val(intLiteral(n), "const:int");
@@ -422,7 +422,7 @@ var c = {
422
422
  * null** the engine writes into a `db.*` statement's `@meta` slot —
423
423
  * `c.null("const:obj")` → `{tag:"const:obj", value:"null"}`, 16 of them across
424
424
  * eight ordinary queries in the survey corpus, which had no spelling and came
425
- * back as `rawValue` (issue #151).
425
+ * back as `rawValue`.
426
426
  *
427
427
  * ⚠ Not the same bytes as `c.obj(null)`, which is the BLANK object
428
428
  * (`value: ""`). Both evaluate to null — the engine JSON-decodes the stored
@@ -438,7 +438,7 @@ var c = {
438
438
  * (`fl.regex_test`/`regex_match`/`regex_replace`/…). Xano runs PHP `preg_*`, so
439
439
  * the pattern MUST be delimiter-wrapped — a bare `c.text("^…$")` is an invalid
440
440
  * PCRE and the filter then matches *nothing* for every input, so a precondition
441
- * built on it silently rejects all values (issue #128). This wraps the raw
441
+ * built on it silently rejects all values. This wraps the raw
442
442
  * pattern in `/…/`, escapes any interior `/`, and appends `flags`, so the result
443
443
  * is always valid; `withFilters` rejects a bare `c.text` pattern and points here.
444
444
  *
@@ -466,8 +466,13 @@ var c = {
466
466
  * `text("now") |to_epoch_ms` chain; both evaluate to the same epoch-ms number
467
467
  * on a live engine, and both persist verbatim, but the native tag is what the
468
468
  * editor writes and needs no filter to get there. Chain math onto it as usual:
469
- * `withFilters(c.now(), fl.epochms_add_ms(c.int(-maxAgeMs)))`. (issues #120,
470
- * #145)
469
+ * `withFilters(c.now(), fl.epochms_add_ms(c.int(-maxAgeMs)))`.
470
+ *
471
+ * Inside an `obj()` the tag is flattened into an expression string, where the
472
+ * identifier `now` alone is the STRING "now" — so `obj()` writes the
473
+ * `now|to_epochms` coercion that restores this tag's meaning. A `c.now()` used
474
+ * as a FILTER ARGUMENT there is refused: the coercion cannot be written in
475
+ * that position. Hoist it with `s.set_var` and `ref()` it.
471
476
  */
472
477
  now() {
473
478
  return val("now", "const:epochms");
@@ -478,7 +483,6 @@ var c = {
478
483
  * compile error and throws at runtime — it would serialize as internal
479
484
  * representation the engine can't decode. For a computed/multi-key object
480
485
  * response use a record of values (`response: { key: value }`), not `c.obj`.
481
- * See issue #42.
482
486
  *
483
487
  * Called with no argument it is the **empty object**, `{}` — the same default
484
488
  * the editor gives a new object variable, and the only empty form current
@@ -495,7 +499,7 @@ var c = {
495
499
  * same bytes instead of being quietly re-pointed at `{}`.
496
500
  *
497
501
  * A **populated** object is stored the way the editor stores one: an empty
498
- * `{}` base carrying one `set` filter per key (issue #248). It is NOT a
502
+ * `{}` base carrying one `set` filter per key. It is NOT a
499
503
  * populated JSON string — that form fails the request at runtime, see
500
504
  * {@link objSetFilters}.
501
505
  *
@@ -516,7 +520,7 @@ var c = {
516
520
  /**
517
521
  * Array constant → JSON-string value with `tag:"const:array"`. Takes **plain
518
522
  * JSON literals only** — like {@link obj}, a nested tagged value is a compile
519
- * error and throws at runtime. See issue #42.
523
+ * error and throws at runtime.
520
524
  */
521
525
  array(a) {
522
526
  assertPlainJson(a);
@@ -1350,7 +1354,7 @@ var f = {
1350
1354
  * bytes, and a map does not preserve it.
1351
1355
  *
1352
1356
  * Without this there is no way to author a structured JSON column at all
1353
- * (issue #135).
1357
+ *.
1354
1358
  */
1355
1359
  json(options = {}) {
1356
1360
  return descriptor("json", { ...options });
@@ -1420,9 +1424,8 @@ var f = {
1420
1424
  * instead: `f.tableRef("tweets", { type: "int" })`. Identity guids derive
1421
1425
  * from `(type, name)`, so the name form resolves to the same guid.
1422
1426
  *
1423
- * Byte-verified whole-object against a persisted table readback
1424
- * (`test/fixtures/tables/ex_field_table_ref.json`, asserted in
1425
- * `test/conformance/kinds-corpus.test.ts`): the `@` method carries
1427
+ * Byte-verified whole-object against a persisted table readback: the `@`
1428
+ * method carries
1426
1429
  * `disabled:false`, sits last in `methods`, and its `dbo=` arg is the target
1427
1430
  * table's payload guid.
1428
1431
  *
@@ -1469,7 +1472,7 @@ var input = {
1469
1472
  * password on **both** signup and login, let the `f.password` *column* hash on write,
1470
1473
  * and pass the plaintext straight to `check_password`. See the auth recipe in the
1471
1474
  * README. Reach for `input.password` only when you specifically want bind-time hashing
1472
- * and are not also comparing it with `check_password` (issue #109).
1475
+ * and are not also comparing it with `check_password`.
1473
1476
  */
1474
1477
  password: makeInput("password"),
1475
1478
  /**
@@ -1599,8 +1602,15 @@ var IDENT = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
1599
1602
  function serializeValue(v2, path) {
1600
1603
  const record = objSetRecord(v2, path);
1601
1604
  if (record) return record;
1605
+ const nowExpr = serializeEpochMs(v2);
1606
+ if (nowExpr !== null) return nowExpr + serializeFilters(v2, path);
1602
1607
  return serializeAtom(v2, path) + serializeFilters(v2, path);
1603
1608
  }
1609
+ function serializeEpochMs(v2) {
1610
+ if (v2.tag !== "const:epochms") return null;
1611
+ if (v2.value !== "now") return null;
1612
+ return "now|to_epochms";
1613
+ }
1604
1614
  function objSetRecord(v2, path) {
1605
1615
  if (v2.tag !== "const:obj") return null;
1606
1616
  if (v2.value === "") {
@@ -1717,12 +1727,16 @@ function serializeAtom(v2, path) {
1717
1727
  // renders `$env.STRIPE_KEY`.
1718
1728
  case "setting":
1719
1729
  return `$env.${v2.value}`;
1720
- // The engine's native current-time constant. Only ever holds `"now"` the
1721
- // same narrowing the decoder makes so anything else falls through to the
1722
- // rejection rather than being rendered as a `now` it is not.
1730
+ // The engine's native current-time constant reaches this function ONLY as a
1731
+ // filter argumenta member position is answered by `serializeEpochMs`
1732
+ // above. There it is unwritable: the value needs a leading `|to_epochms` to
1733
+ // evaluate as a time at all (see `serializeEpochMs`), and inside an argument
1734
+ // a trailing `|` binds to the whole value rather than to the argument, which
1735
+ // is the same wall a pre-filtered argument hits.
1723
1736
  case "const:epochms":
1724
- if (v2.value === "now") return "now";
1725
- break;
1737
+ throw new Error(
1738
+ `obj(): \`${path}\` is \`c.now()\` used as a FILTER ARGUMENT. In an expression the current-time constant has to carry a \`|to_epochms\` coercion, and a \`|\` inside an argument binds to the whole value instead \u2014 so this cannot be written without changing what it means. Compute it in a prior step (\`s.set_var("now", c.now())\`) and reference it with \`ref("now")\`.`
1739
+ );
1726
1740
  // `c.array([…])` stores plain JSON, and the literal grammar spells the same
1727
1741
  // list — so it renders to the identical bytes a bare `[…]` member does. The
1728
1742
  // bare form always worked and this one used to throw, which made the empty
@@ -1801,7 +1815,7 @@ var slotted = (name, argNames, required, capped = true) => (...args) => {
1801
1815
  const hole = argNames.slice(0, last).findIndex((n) => named[n] === void 0);
1802
1816
  if (hole !== -1) {
1803
1817
  throw new Error(
1804
- `fl.${name}: \`${argNames[hole]}\` is omitted but \`${argNames[last]}\` is supplied. Filter arguments are positional even in this form \u2014 the engine reads them by slot, so one in the middle cannot be skipped. Supply \`${argNames[hole]}\` too. (issue #221)`
1818
+ `fl.${name}: \`${argNames[hole]}\` is omitted but \`${argNames[last]}\` is supplied. Filter arguments are positional even in this form \u2014 the engine reads them by slot, so one in the middle cannot be skipped. Supply \`${argNames[hole]}\` too.`
1805
1819
  );
1806
1820
  }
1807
1821
  assertArity(name, argNames, required, last + 1);
@@ -1810,7 +1824,7 @@ var slotted = (name, argNames, required, capped = true) => (...args) => {
1810
1824
  var assertArity = (name, argNames, required, got) => {
1811
1825
  if (got >= required) return;
1812
1826
  throw new Error(
1813
- `fl.${name} needs ${required} argument(s) \u2014 ${argNames.slice(0, required).join(", ")} \u2014 but got ${got}. Filter arguments are positional and the engine refuses a short call, so a missing one cannot be inferred \u2014 not even where the filter's own documentation calls it optional. Some filters accept omission from the END and some require every argument regardless; which is which is probed, not declared. (issues #221, #246)`
1827
+ `fl.${name} needs ${required} argument(s) \u2014 ${argNames.slice(0, required).join(", ")} \u2014 but got ${got}. Filter arguments are positional and the engine refuses a short call, so a missing one cannot be inferred \u2014 not even where the filter's own documentation calls it optional. Some filters accept omission from the END and some require every argument regardless; which is which is probed, not declared.`
1814
1828
  );
1815
1829
  };
1816
1830
  var assertMaxArity = (name, argNames, got) => {
@@ -4237,4 +4251,4 @@ export {
4237
4251
  serializeBundle,
4238
4252
  emitBundle
4239
4253
  };
4240
- //# sourceMappingURL=chunk-QK7ZQJLP.js.map
4254
+ //# sourceMappingURL=chunk-N74KDCBD.js.map
@@ -86,4 +86,4 @@ export {
86
86
  fetchReadOrExplain,
87
87
  retryingFetch
88
88
  };
89
- //# sourceMappingURL=chunk-3IGNIP6R.js.map
89
+ //# sourceMappingURL=chunk-NDP7OUPS.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  describeTransportFailure,
3
3
  httpFailure
4
- } from "./chunk-3IGNIP6R.js";
4
+ } from "./chunk-NDP7OUPS.js";
5
5
 
6
6
  // src/deploy/branch.ts
7
7
  var BRANCH_TIMEOUT_MS = 3e4;
@@ -156,4 +156,4 @@ export {
156
156
  assertBranchAbsent,
157
157
  requireBranch
158
158
  };
159
- //# sourceMappingURL=chunk-EQW3YT5U.js.map
159
+ //# sourceMappingURL=chunk-P6PVBQL6.js.map
@@ -1,40 +1,40 @@
1
1
  import {
2
2
  resolveEphemeralName
3
- } from "./chunk-ZQ2PKR6R.js";
3
+ } from "./chunk-RQ3FXV4K.js";
4
4
  import {
5
5
  getAccessToken
6
- } from "./chunk-QKM4U5UK.js";
6
+ } from "./chunk-TJS2AF5Y.js";
7
7
  import {
8
8
  exportWorkspaceBundle
9
- } from "./chunk-7ZYW652H.js";
9
+ } from "./chunk-YHS6VVLJ.js";
10
10
  import {
11
11
  projectShellFiles,
12
12
  resolveFrontendPreset,
13
13
  resolveThemeChoice,
14
14
  sanitizeAppName
15
- } from "./chunk-4IF54NU5.js";
15
+ } from "./chunk-VPAWRBK5.js";
16
16
  import {
17
17
  XANO_DIR,
18
18
  resolveAiPresets,
19
19
  scaffoldProject
20
- } from "./chunk-KA6G2L7U.js";
20
+ } from "./chunk-VK26K7AY.js";
21
21
  import {
22
22
  TEST_EXPECT_TYPES
23
- } from "./chunk-G4EJMQLD.js";
23
+ } from "./chunk-YX22LKQE.js";
24
24
  import {
25
25
  raw
26
- } from "./chunk-LU7TRWMC.js";
26
+ } from "./chunk-6VNRMKFJ.js";
27
27
  import {
28
28
  codegenLanding,
29
29
  describeOrigin,
30
30
  renderCodegenMarker,
31
31
  renderCodegenReadme
32
- } from "./chunk-ANUDXFEX.js";
32
+ } from "./chunk-RQNMTDXD.js";
33
33
  import {
34
34
  FIELD_METHODS,
35
35
  SUPERSEDED_STATEMENTS,
36
36
  supersededBy
37
- } from "./chunk-BSK7ELHU.js";
37
+ } from "./chunk-PR7OXHGZ.js";
38
38
  import {
39
39
  DEFAULT_PREFERENCES,
40
40
  DEFAULT_SETTINGS,
@@ -50,7 +50,7 @@ import {
50
50
  searchConstrainsRows,
51
51
  tableTrigger,
52
52
  workspaceTrigger
53
- } from "./chunk-UOZMSF4C.js";
53
+ } from "./chunk-GSP2BY4F.js";
54
54
  import {
55
55
  linkedTableOf,
56
56
  tableRefOf
@@ -72,18 +72,18 @@ import {
72
72
  normalize,
73
73
  retiredInputSuccessor,
74
74
  retiredInputs
75
- } from "./chunk-3INK4Y4E.js";
75
+ } from "./chunk-AE3PDSDS.js";
76
76
  import {
77
77
  STATEMENT_SURFACES,
78
78
  sPathOf
79
- } from "./chunk-BC2C5GVI.js";
79
+ } from "./chunk-DCMANKMX.js";
80
80
  import {
81
81
  loadDefault,
82
82
  readVersion
83
- } from "./chunk-RCT7UX7B.js";
83
+ } from "./chunk-XT3XQ4PF.js";
84
84
  import {
85
85
  UsageError
86
- } from "./chunk-F6CYJ7TN.js";
86
+ } from "./chunk-Z2ZIE5CO.js";
87
87
  import {
88
88
  blank,
89
89
  detail,
@@ -124,14 +124,14 @@ import {
124
124
  sys,
125
125
  toolset,
126
126
  withFilters
127
- } from "./chunk-QK7ZQJLP.js";
127
+ } from "./chunk-N74KDCBD.js";
128
128
  import {
129
129
  parsePathParams,
130
130
  unboundPathParams
131
- } from "./chunk-WHOJWOSV.js";
131
+ } from "./chunk-EETVJZAZ.js";
132
132
  import {
133
133
  REFERENCEABLE_KIND_PAYLOAD_KEYS
134
- } from "./chunk-VAF6A3YD.js";
134
+ } from "./chunk-XWFRNJMQ.js";
135
135
  import {
136
136
  COLUMN_CONTEXT,
137
137
  INPUT_CONTEXT,
@@ -139,7 +139,7 @@ import {
139
139
  encodeField,
140
140
  encodeMockMap,
141
141
  encodeStatement
142
- } from "./chunk-5XZ744TS.js";
142
+ } from "./chunk-2ZCUO2UG.js";
143
143
 
144
144
  // src/emit/codegen-command.ts
145
145
  import { existsSync, readFileSync, writeFileSync } from "fs";
@@ -1036,6 +1036,7 @@ function parseMember(cur) {
1036
1036
  let built = lifted.built;
1037
1037
  const symbols = [...lifted.symbols];
1038
1038
  const filterExprs = [];
1039
+ let absorbNowCoercion = built.tag === "const:epochms" && built.value === "now";
1039
1040
  while (cur.eat("|")) {
1040
1041
  const name = cur.take(/[A-Za-z0-9_]/);
1041
1042
  if (name === "" || !FILTER_NAMES.includes(name)) return null;
@@ -1059,9 +1060,15 @@ function parseMember(cur) {
1059
1060
  } catch {
1060
1061
  return null;
1061
1062
  }
1063
+ if (absorbNowCoercion && name === "to_epochms" && argBuilt.length === 0) {
1064
+ absorbNowCoercion = false;
1065
+ continue;
1066
+ }
1067
+ absorbNowCoercion = false;
1062
1068
  built = withFilters(built, filterValue);
1063
1069
  filterExprs.push(call(`fl.${name}`, ...argExprs));
1064
1070
  }
1071
+ if (filterExprs.length === 0) return { expr, built, symbols };
1065
1072
  return {
1066
1073
  expr: call("withFilters", expr, ...filterExprs),
1067
1074
  built,
@@ -6746,7 +6753,7 @@ async function fetchBundle(args, source) {
6746
6753
  if (source.kind === "ephemeral") {
6747
6754
  const auth3 = await getAccessToken(args);
6748
6755
  const name = resolveEphemeralName(auth3, source.name);
6749
- const { resolveLive, fetchEphemeralBundle } = await import("./ephemeral-command-U4AQ3TXX.js");
6756
+ const { resolveLive, fetchEphemeralBundle } = await import("./ephemeral-command-2NKPEXUU.js");
6750
6757
  const summary = await resolveLive(auth3, auth3.workspaceId, name);
6751
6758
  step(`Reading ephemeral "${name}"`);
6752
6759
  return {
@@ -7008,4 +7015,4 @@ export {
7008
7015
  verifyCrashEntry,
7009
7016
  blameGeneratedFile
7010
7017
  };
7011
- //# sourceMappingURL=chunk-HYBN4H3F.js.map
7018
+ //# sourceMappingURL=chunk-PLE5QQOZ.js.map
@@ -67,4 +67,4 @@ export {
67
67
  SUPERSEDED_STATEMENTS,
68
68
  supersededBy
69
69
  };
70
- //# sourceMappingURL=chunk-BSK7ELHU.js.map
70
+ //# sourceMappingURL=chunk-PR7OXHGZ.js.map
@@ -13,7 +13,7 @@ import {
13
13
  reversedRegexOperands,
14
14
  stackReferencesAuth,
15
15
  tableColumns
16
- } from "./chunk-QK7ZQJLP.js";
16
+ } from "./chunk-N74KDCBD.js";
17
17
  import {
18
18
  CANONICAL_PAYLOAD_KEYS,
19
19
  REFERENCEABLE_KINDS,
@@ -26,7 +26,7 @@ import {
26
26
  mintCanonical,
27
27
  recordObserved,
28
28
  resolveRef
29
- } from "./chunk-VAF6A3YD.js";
29
+ } from "./chunk-XWFRNJMQ.js";
30
30
 
31
31
  // src/workspace/seed-coerce.ts
32
32
  function coerceScalarValue(label, column, type, value, values) {
@@ -1411,7 +1411,7 @@ var Xano = class {
1411
1411
  }
1412
1412
  /**
1413
1413
  * Every def object handed to {@link register}, by identity, so the SAME one
1414
- * registered twice is caught at the call that did it (issue #54).
1414
+ * registered twice is caught at the call that did it.
1415
1415
  *
1416
1416
  * Identity, not structure. Two separately constructed defs sharing a name are
1417
1417
  * a genuine collision, and the guid check at export already diagnoses that
@@ -1448,7 +1448,7 @@ var Xano = class {
1448
1448
  * what `workspace("my-app")` set — so the natural chain
1449
1449
  * `workspace("my-app").registerWorkspace(workspaceConfig({ history }))` no
1450
1450
  * longer makes an author restate a name this registry has held since its
1451
- * first call (#228). An explicit `name` still wins, and a rename this way is
1451
+ * first call. An explicit `name` still wins, and a rename this way is
1452
1452
  * a rename of the workspace.
1453
1453
  */
1454
1454
  registerWorkspace(def) {
@@ -1576,7 +1576,7 @@ var Xano = class {
1576
1576
  * With `options.strict`, every build WARNING fails the export instead of
1577
1577
  * printing — the shapes that deploy clean and then lose data or return the
1578
1578
  * wrong rows. Nothing about the emitted bundle changes; it either exports or
1579
- * it does not (issue #15).
1579
+ * it does not.
1580
1580
  */
1581
1581
  export(options = {}) {
1582
1582
  const lockCtx = options.lock;
@@ -1686,7 +1686,7 @@ var Xano = class {
1686
1686
  }
1687
1687
  /**
1688
1688
  * Warn about an `auth()`-keyed middleware **directly attached** to a host where
1689
- * `auth()` may resolve to `null` (issue #81).
1689
+ * `auth()` may resolve to `null`.
1690
1690
  *
1691
1691
  * The footgun: a rate limiter keyed by `auth("id")` is the canonical middleware,
1692
1692
  * but attach it to a host with no authenticated caller and `auth()` silently
@@ -1701,7 +1701,7 @@ var Xano = class {
1701
1701
  * false positives on legitimate use. The warning names the host and reason so
1702
1702
  * the author can confirm intent, vary the key, or move to an authenticated host.
1703
1703
  *
1704
- * Scope: the host's EFFECTIVE chain, across all three tiers (issue #43). The
1704
+ * Scope: the host's EFFECTIVE chain, across all three tiers. The
1705
1705
  * guard used to see only a host's own `middleware.pre`/`post`, so an author who
1706
1706
  * DRY'd a per-user limiter up to `apiGroup({ middleware })` or to the workspace
1707
1707
  * tier silently reintroduced the shared bucket — the same collapse, attached
@@ -1858,4 +1858,4 @@ export {
1858
1858
  Xano,
1859
1859
  workspace
1860
1860
  };
1861
- //# sourceMappingURL=chunk-OWGCOGKK.js.map
1861
+ //# sourceMappingURL=chunk-QYSQ3UDO.js.map
@@ -27,7 +27,7 @@ async function resolveMetaTarget(auth, selector, deps = {}) {
27
27
  case "workspace":
28
28
  return { base: auth.instance, workspaceId: auth.workspaceId, label: `workspace ${auth.workspaceId}` };
29
29
  case "ephemeral": {
30
- const resolveLive = deps.resolveLive ?? (await import("./ephemeral-command-U4AQ3TXX.js")).resolveLive;
30
+ const resolveLive = deps.resolveLive ?? (await import("./ephemeral-command-2NKPEXUU.js")).resolveLive;
31
31
  return resolveEphemeral(auth, selector.name, { ...deps, resolveLive });
32
32
  }
33
33
  }
@@ -37,4 +37,4 @@ export {
37
37
  resolveEphemeralName,
38
38
  resolveMetaTarget
39
39
  };
40
- //# sourceMappingURL=chunk-ZQ2PKR6R.js.map
40
+ //# sourceMappingURL=chunk-RQ3FXV4K.js.map