@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 +1 -1
- package/dist/_vxil-feature-configs.d.ts +21 -0
- package/dist/config.d.ts +7 -1
- package/dist/vxil.js +1517 -289
- package/package.json +6 -6
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;
|