@vxil/cli 0.9.0 → 0.11.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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @vxil/cli
2
2
 
3
- The [Vxil](https://vxil.com) CLI — config-as-code for backend building blocks you enable in one line. The package is `@vxil/cli` and it installs the `vxil` command — the bare `vxil` name on npm is blocked, so always install the scoped package.
3
+ The [Vxil](https://vxil.com) CLI — config-as-code for backend building blocks you enable in one line. The package is `@vxil/cli` and it installs the `vxil` command — the bare `vxil` name on npm is blocked, so always install the scoped package. It needs Node.js 24 or newer.
4
4
 
5
5
  ```bash
6
6
  npx @vxil/cli quickstart # create a tenant + scaffold vxil.config.ts
@@ -656,6 +656,7 @@ export declare const PaymentsConfigSchema: import("@sinclair/typebox").TObject<{
656
656
  secretApiKeyRef: import("@sinclair/typebox").TString;
657
657
  webhookSecretRef: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
658
658
  acceptSandbox: import("@sinclair/typebox").TBoolean;
659
+ sandboxUsers: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
659
660
  }>>;
660
661
  paypal: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
661
662
  clientIdRef: import("@sinclair/typebox").TString;
@@ -685,6 +686,7 @@ export declare const PaymentsConfigSchema: import("@sinclair/typebox").TObject<{
685
686
  creditType: import("@sinclair/typebox").TString;
686
687
  amount: import("@sinclair/typebox").TInteger;
687
688
  period: import("@sinclair/typebox").TString;
689
+ mode: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"add">, import("@sinclair/typebox").TLiteral<"reset">]>>;
688
690
  }>>>;
689
691
  }>>;
690
692
  priceMap: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TString>>;
@@ -718,11 +720,17 @@ export declare const FunctionsConfigSchema: import("@sinclair/typebox").TObject<
718
720
  retry: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
719
721
  maxAttempts: import("@sinclair/typebox").TInteger;
720
722
  }>>;
723
+ overlap: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"allow">, import("@sinclair/typebox").TLiteral<"skip">]>>;
721
724
  }>>>;
722
725
  scriptRef: import("@sinclair/typebox").TString;
723
726
  scopes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
724
727
  secrets: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
725
728
  egressAllow: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
729
+ runtime: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
730
+ compatibilityDate: import("@sinclair/typebox").TString;
731
+ compatibilityFlags: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
732
+ cpuMs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
733
+ }>>;
726
734
  limits: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
727
735
  cpuMs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
728
736
  timeoutMs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
@@ -790,6 +798,19 @@ export declare const CONFIG_FLAG_CAP = 15;
790
798
  * reconciler maps each to its `auth.<event>` audit-event prefix. */
791
799
  export declare const AUTH_HOOK_EVENTS: readonly ["user.created", "session.created", "session.revoked", "signin.failure"];
792
800
  export type AuthHookEvent = (typeof AUTH_HOOK_EVENTS)[number];
801
+ /** The events a `cmsHook` function binding may name — the closed union
802
+ * `packages/config` types on the `cmsHook` trigger, and the keys of the
803
+ * functions-v1 receiver's CMS_HOOK_EVENTS_FOR (beforeCreate → created,
804
+ * beforeUpdate → updated, beforeWrite → both). Omitted = beforeWrite. Anything
805
+ * else is refused at config write (E-CMSHOOK, 2026-10-01): an unknown name used
806
+ * to fall back to beforeWrite at delivery, so a typo like 'afterCreate' or
807
+ * 'beforeDelete' silently subscribed the function to creates AND updates.
808
+ * tests/ci/src/fn-binding-contracts.test.ts pins every copy to this list. */
809
+ export declare const CMS_HOOK_EVENTS: readonly ["beforeCreate", "beforeUpdate", "beforeWrite"];
810
+ export type CmsHookEvent = (typeof CMS_HOOK_EVENTS)[number];
811
+ /** The ONE refusal text for an unknown cmsHook binding event (the config
812
+ * validator and the deploy route's early 422 both use it). */
813
+ export declare function cmsHookEventError(event: unknown): string | null;
793
814
  /** F4-29 test-recipient entry grammar (shared by the validator and auth-v1's
794
815
  * matcher): an exact email, a `*@domain` glob, or a +E.164 phone number. */
795
816
  export declare const TEST_RECIPIENT_EMAIL_RE: RegExp;
package/dist/config.d.ts CHANGED
@@ -132,9 +132,15 @@ export interface FunctionTriggerRetry {
132
132
  export type FunctionTrigger = {
133
133
  kind: 'http';
134
134
  path?: string;
135
- } | {
135
+ }
136
+ /** `overlap: 'skip'` (2026-10-01): a due tick fires nothing while the
137
+ * previous tick's run is still open (queued / running / retrying / waiting /
138
+ * delayed) — the slot is counted, never caught up. Default `'allow'`. Every
139
+ * cron envelope carries `scheduled_for`, the slot it was due for. */
140
+ | {
136
141
  kind: 'cron';
137
142
  schedule: string;
143
+ overlap?: 'allow' | 'skip';
138
144
  } | {
139
145
  kind: 'queue';
140
146
  source: string;