vitral 0.1.0 → 0.3.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.
Files changed (63) hide show
  1. package/README.md +250 -217
  2. package/dist/angular.d.ts +16 -4
  3. package/dist/angular.js +26 -5
  4. package/dist/auto.d.ts +2 -0
  5. package/dist/auto.js +13 -0
  6. package/dist/capture-JYFERAPL.js +42 -0
  7. package/dist/chunk-3YXI3G34.js +181 -0
  8. package/dist/chunk-AH7KNMBW.js +20 -0
  9. package/dist/chunk-AKNNHQ2H.js +45 -0
  10. package/dist/chunk-DXORSF4X.js +42 -0
  11. package/dist/chunk-GNHCZRQP.js +79 -0
  12. package/dist/chunk-GNPFWISJ.js +80 -0
  13. package/dist/chunk-I3VSKSAZ.js +634 -0
  14. package/dist/chunk-IHTUM6LT.js +152 -0
  15. package/dist/chunk-SDB5AZEI.js +51 -0
  16. package/dist/chunk-TD4S3IHA.js +201 -0
  17. package/dist/chunk-ZAC6QQI6.js +64 -0
  18. package/dist/cli.d.ts +1 -0
  19. package/dist/cli.js +138 -0
  20. package/dist/contract-46EZFQPQ.js +17 -0
  21. package/dist/dedupe-S7BHQMOZ.js +82 -0
  22. package/dist/devtools.d.ts +12 -0
  23. package/dist/devtools.js +86 -0
  24. package/dist/element.d.ts +60 -2
  25. package/dist/element.js +10 -2
  26. package/dist/errors-kjBv6IH_.d.ts +17 -0
  27. package/dist/events-D5gs7rff.d.ts +6 -0
  28. package/dist/expose-JUOUN5N5.js +15 -0
  29. package/dist/host-slot-Cz6EiGsB.d.ts +6 -0
  30. package/dist/iframe.d.ts +28 -0
  31. package/dist/iframe.js +239 -0
  32. package/dist/index.d.ts +144 -147
  33. package/dist/index.js +40 -10
  34. package/dist/navigate-BRG1WJUM.d.ts +9 -0
  35. package/dist/otel.d.ts +44 -0
  36. package/dist/otel.js +27 -0
  37. package/dist/overrides-NZAIUGK5.js +15 -0
  38. package/dist/preact.d.ts +30 -7
  39. package/dist/preact.js +38 -9
  40. package/dist/react.d.ts +46 -7
  41. package/dist/react.js +97 -42
  42. package/dist/routes.d.ts +56 -0
  43. package/dist/routes.js +144 -0
  44. package/dist/sentry.d.ts +25 -0
  45. package/dist/sentry.js +11 -0
  46. package/dist/shadow-6HELCHCJ.js +98 -0
  47. package/dist/slot-DqXTwGbs.d.ts +36 -0
  48. package/dist/solid.d.ts +29 -6
  49. package/dist/solid.js +32 -8
  50. package/dist/sri-JMX6JLQP.js +116 -0
  51. package/dist/state-BDdCwc21.d.ts +4 -0
  52. package/dist/svelte.d.ts +19 -3
  53. package/dist/svelte.js +11 -4
  54. package/dist/testing.d.ts +3 -2
  55. package/dist/testing.js +9 -3
  56. package/dist/types-Czvm-siZ.d.ts +327 -0
  57. package/dist/vite.d.ts +66 -4
  58. package/dist/vite.js +1044 -25
  59. package/dist/vue.d.ts +86 -7
  60. package/dist/vue.js +74 -46
  61. package/package.json +181 -11
  62. package/dist/chunk-IZK6ITIJ.js +0 -96
  63. package/dist/chunk-TTL52BF2.js +0 -547
@@ -0,0 +1,327 @@
1
+ import { R as RemoteError } from './errors-kjBv6IH_.js';
2
+
3
+ /**
4
+ * Tipos das chaves compartilhadas. Declare uma vez no projeto:
5
+ *
6
+ * declare module 'vitral' {
7
+ * interface Shared { usuario: { id: number; nome: string } | null; tema: 'claro' | 'escuro' }
8
+ * }
9
+ */
10
+ interface Shared {
11
+ }
12
+ /** Tipo do valor de `K`: o declarado em `Shared`, ou `unknown`. */
13
+ type SharedType<K extends string> = K extends keyof Shared ? Shared[K] : unknown;
14
+ /**
15
+ * Acesso a uma chave. Segue o contrato de store do Svelte (`$tema` funciona).
16
+ * O valor é tratado como imutável: para mudar, passe um valor novo.
17
+ */
18
+ interface SharedValue<T> {
19
+ /** A chave. */
20
+ readonly key: string;
21
+ /** Valor atual, ou `undefined` se ninguém deu valor ainda. */
22
+ get(): T | undefined;
23
+ /** Troca o valor. Numa chave com `writable: false`, só o dono pode. */
24
+ set(value: T): void;
25
+ /** `set(fn(get()))`. */
26
+ update(fn: (value: T | undefined) => T): void;
27
+ /** Chama `fn` agora, com o valor atual, e a cada mudança. Devolve a função que cancela. */
28
+ subscribe(fn: (value: T | undefined) => void): () => void;
29
+ }
30
+ /** O que `provide` devolve. Quando é o dono, `set` sempre passa. */
31
+ interface ProvidedValue<T> extends SharedValue<T> {
32
+ get(): T;
33
+ update(fn: (value: T) => T): void;
34
+ subscribe(fn: (value: T) => void): () => void;
35
+ }
36
+ interface ProvideOptions {
37
+ /** `false`: só quem chamou `provide` altera. Padrão `true`. */
38
+ writable?: boolean;
39
+ }
40
+ /** `shared`, com `provide` e `batch`. É também o tipo de `ctx.shared`. */
41
+ interface SharedApi {
42
+ <K extends keyof Shared>(key: K): SharedValue<Shared[K]>;
43
+ <T = unknown>(key: string): SharedValue<T>;
44
+ /**
45
+ * Cria a chave e vira dono dela. Quem chama primeiro é o dono; depois disso,
46
+ * `provide` só devolve um acesso comum e não grava o valor.
47
+ */
48
+ provide<K extends keyof Shared>(key: K, value: Shared[K], options?: ProvideOptions): ProvidedValue<Shared[K]>;
49
+ provide<T>(key: string, value: T, options?: ProvideOptions): ProvidedValue<T>;
50
+ /** Várias mudanças, uma notificação por chave no fim. */
51
+ batch<R>(fn: () => R): R;
52
+ }
53
+ /** Acesso a uma chave compartilhada: `get()`, `set()`, `update()` e `subscribe()`. */
54
+ declare function shared<K extends keyof Shared>(key: K): SharedValue<Shared[K]>;
55
+ declare function shared<T = unknown>(key: string): SharedValue<T>;
56
+ /**
57
+ * Cria uma chave compartilhada e vira dono dela. Quem chama primeiro é o
58
+ * dono; depois disso, `provide` só devolve um acesso comum e não grava o valor.
59
+ */
60
+ declare function provide<K extends keyof Shared>(key: K, value: Shared[K], options?: ProvideOptions): ProvidedValue<Shared[K]>;
61
+ declare function provide<T>(key: string, value: T, options?: ProvideOptions): ProvidedValue<T>;
62
+ /** Várias mudanças, uma notificação por chave no fim. */
63
+ declare function batch<R>(fn: () => R): R;
64
+
65
+ type Props = Record<string, unknown>;
66
+ /**
67
+ * Props de cada remote, por nome. `npx vitral types` gera um
68
+ * `vitral-env.d.ts` que preenche esta interface:
69
+ *
70
+ * declare module 'vitral' { interface Remotes { carrinho: { userId: number } } }
71
+ */
72
+ interface Remotes {
73
+ }
74
+ /** Props do remote `N`: as declaradas em `Remotes`, ou qualquer objeto. */
75
+ type PropsOf<N extends string> = N extends keyof Remotes ? Remotes[N] : Props;
76
+ /** Restrição extra nas props de um componente de host quando o nome está em `Remotes`. */
77
+ type CheckedProps<N extends string> = N extends keyof Remotes ? {
78
+ name?: N;
79
+ props?: Remotes[N];
80
+ } : {
81
+ name?: N;
82
+ };
83
+ interface RemoteContext {
84
+ /** Nome com que o host registrou este remote. */
85
+ name: string;
86
+ /** URL base de onde o remote foi carregado (útil para assets). */
87
+ baseUrl: string;
88
+ /**
89
+ * Barramento de eventos compartilhado entre host e todos os remotes. As
90
+ * assinaturas feitas por aqui são canceladas sozinhas no unmount.
91
+ */
92
+ events: EventBus;
93
+ /** Shadow root quando o host pediu isolamento, senão `null`. */
94
+ shadowRoot: ShadowRoot | null;
95
+ /**
96
+ * Onde popovers, menus e dialogs devem ser renderizados (`container` do
97
+ * Radix e do MUI, `Teleport` do Vue). No Shadow DOM é um elemento dentro do
98
+ * shadow root, com os estilos e o tema do remote; senão, `document.body`.
99
+ * Hosts antigos não mandam este campo.
100
+ */
101
+ portalContainer?: HTMLElement;
102
+ /** Avisa o host de um erro em tempo de execução (os adaptadores já chamam). */
103
+ reportError(error: unknown): void;
104
+ /** Navega a página inteira (host e todos os roteadores) para `url`. */
105
+ navigate(url: string, options?: {
106
+ replace?: boolean;
107
+ }): void;
108
+ /**
109
+ * Versão do protocolo entre cópias da lib que o host fala (hoje 1). Use
110
+ * para detectar recursos; hosts antigos não mandam este campo.
111
+ */
112
+ protocol?: number;
113
+ /**
114
+ * Com keep-alive: `fn` roda quando o remote volta para a página. Devolve a
115
+ * função que cancela. Hosts antigos não mandam este campo.
116
+ */
117
+ onActivate?(fn: () => void): () => void;
118
+ /** Com keep-alive: `fn` roda quando o remote sai da página sem desmontar (pause timers e assinaturas). */
119
+ onDeactivate?(fn: () => void): () => void;
120
+ /**
121
+ * O mesmo `shared` de `import { shared } from 'vitral'`, mas as assinaturas
122
+ * feitas por aqui são canceladas no unmount, e as chaves criadas com
123
+ * `ctx.shared.provide` perdem o dono. Vem quando o host usa o store
124
+ * (`provide`, `shared` ou um hook); senão, importe `shared` de 'vitral'.
125
+ */
126
+ shared?: SharedApi;
127
+ }
128
+ interface MountedRemote<P extends Props = Props> {
129
+ update?(props: P): void;
130
+ unmount(): void;
131
+ }
132
+ interface RemoteModule<P extends Props = Props> {
133
+ mount(el: HTMLElement, props: P, ctx: RemoteContext): MountedRemote<P> | Promise<MountedRemote<P>>;
134
+ }
135
+ interface RemoteEntry {
136
+ /** URL do módulo JS do remote, ou do `vitral.json` gerado pelo plugin. */
137
+ url?: string;
138
+ /**
139
+ * Remote local, sem rede: o próprio módulo ou uma função que o importa
140
+ * (ex.: `() => import('./carrinho')`). Útil em monorepos e testes.
141
+ */
142
+ module?: RemoteModule<any> | (() => Promise<RemoteModule<any> | {
143
+ default: RemoteModule<any>;
144
+ }>);
145
+ /** Hash SRI (`sha256-…`, `sha384-…`, `sha512-…`) do JS. Verificado antes de executar. */
146
+ integrity?: string;
147
+ /** CSS extra para carregar junto. */
148
+ css?: string[];
149
+ /** Isolamento padrão para este remote. */
150
+ isolate?: Isolation;
151
+ /**
152
+ * O `vitral.json` já baixado (ex.: por `vitral registry`), para não buscá-lo
153
+ * na hora. Os caminhos dele são relativos a `url`, e os hashes ficam fixos
154
+ * no host.
155
+ */
156
+ manifest?: RemoteManifest;
157
+ /**
158
+ * Faixa de versão do contrato do remote que o host aceita (ex.: `'^2'`).
159
+ * Vence a de `configure`. Veja `VitralConfig.contract`.
160
+ */
161
+ contract?: string;
162
+ }
163
+ /**
164
+ * `none`: CSS com escopo. `shadow`: Shadow DOM. `iframe`: iframe com
165
+ * `sandbox`, para código de terceiros (precisa de `enableIframe()`).
166
+ */
167
+ type Isolation = 'shadow' | 'none' | 'iframe';
168
+ /** Estilos do host dentro do Shadow DOM. Sem efeito no modo escopo. */
169
+ interface StyleOptions {
170
+ /**
171
+ * CSS do host adotado em cada shadow root antes do CSS do remote (ex.:
172
+ * `['/assets/base.css']`). Um `CSSStyleSheet` por arquivo, o mesmo em todos.
173
+ */
174
+ inherit?: string[];
175
+ /**
176
+ * Copia `class` e `data-theme` do `<html>` para a raiz do remote, para
177
+ * `dark:` e `[data-theme]` funcionarem no Shadow DOM. Padrão `true`.
178
+ */
179
+ mirrorTheme?: boolean;
180
+ }
181
+ interface VitralConfig {
182
+ /** Mapa nome → URL (ou entrada completa), ou a URL de um JSON com esse mapa. */
183
+ remotes?: Record<string, string | RemoteEntry> | string;
184
+ /**
185
+ * Origens de onde é permitido carregar código. Padrão: a própria origem da
186
+ * página mais as origens das URLs registradas. Use `['*']` para liberar tudo.
187
+ */
188
+ allowedOrigins?: string[];
189
+ /** Tempo máximo para baixar um remote, em ms. Padrão 15000. */
190
+ timeout?: number;
191
+ /** Tentativas extras se o download falhar. Padrão 1. */
192
+ retries?: number;
193
+ /** Isolamento padrão para todos os remotes. Padrão `'none'`. */
194
+ isolate?: Isolation;
195
+ /**
196
+ * Liga os overrides de desenvolvimento (`?vitral=nome@url` e
197
+ * `localStorage['vitral:overrides']`) fora de localhost. Em localhost já
198
+ * valem. Nunca ligue em produção: um link com `?vitral=` executaria código
199
+ * de qualquer origem.
200
+ */
201
+ devOverrides?: boolean;
202
+ /** Estilos do host no Shadow DOM: `{ inherit: ['/assets/base.css'] }`. */
203
+ styles?: StyleOptions;
204
+ /** Recebe o tempo de cada etapa do carregamento (para RUM). */
205
+ onMetric?: (metric: RemoteMetric) => void;
206
+ /**
207
+ * Recebe cada `RemoteError` de qualquer remote (falha de download, de
208
+ * `mount`, erro de render), uma vez só por erro, além do `onError` de cada
209
+ * montagem. Use para mandar os erros ao seu monitoramento.
210
+ */
211
+ onError?: (error: RemoteError) => void;
212
+ /**
213
+ * Atribui a um remote os erros sem tratamento (`error` e
214
+ * `unhandledrejection` da janela) cujo topo da pilha é um arquivo dele, e
215
+ * entrega como `RENDER_FAILED` ao `onError`. Padrão `false`.
216
+ */
217
+ captureGlobalErrors?: boolean;
218
+ /**
219
+ * Dependências que o host oferece aos remotes com `dedupe`, por grupo:
220
+ * `{ vue: { version: Vue.version, modules: { vue: Vue } } }`. O remote usa
221
+ * a do host se a versão estiver na faixa dele; senão, a própria cópia.
222
+ */
223
+ dedupe?: Record<string, {
224
+ version: string;
225
+ modules: SharedModules;
226
+ }>;
227
+ /**
228
+ * Faixa de versão do contrato que o host aceita dos remotes (ex.: `'^2'`).
229
+ * Antes de executar o remote, o host confere a versão do `contract` do
230
+ * manifesto e as dependências que ele espera do host; se não servir, o
231
+ * remote não monta (`CONTRACT_MISMATCH`). Sem contrato no manifesto, nada é
232
+ * conferido. `'*'` confere só as dependências.
233
+ */
234
+ contract?: string;
235
+ }
236
+ /** Módulos de um grupo de `dedupe`, por especificador (`'react-dom/client'`). */
237
+ type SharedModules = Record<string, unknown>;
238
+ /**
239
+ * Tempo de uma etapa do carregamento de um remote. Cada etapa também vira
240
+ * `performance.measure('vitral:<nome>:<etapa>')`, visível no painel
241
+ * Performance do DevTools.
242
+ */
243
+ interface RemoteMetric {
244
+ name: string;
245
+ stage: 'manifest' | 'js' | 'css' | 'mount';
246
+ /** Início, em ms desde `performance.timeOrigin`. */
247
+ start: number;
248
+ duration: number;
249
+ }
250
+ /** Formato do `vitral.json` emitido pelo plugin de build. */
251
+ interface RemoteManifest {
252
+ name: string;
253
+ version?: string;
254
+ entry: string;
255
+ css?: string[];
256
+ integrity?: string;
257
+ /** Escopo usado pelo plugin para prefixar o CSS (`[data-vitral-scope]`). */
258
+ scope?: string;
259
+ /**
260
+ * Componentes e módulos extras do remote (`./MiniCarrinho`, `./api`). Vêm
261
+ * do mesmo `entry`, no export `exposes`. O host usa `carrinho/MiniCarrinho`.
262
+ */
263
+ exposes?: string[];
264
+ /**
265
+ * Hash SRI de cada arquivo publicado (CSS e JS do build dividido), pelo
266
+ * caminho relativo ao manifesto.
267
+ */
268
+ files?: Record<string, string>;
269
+ /**
270
+ * Build dividido, para navegadores que conferem o hash de cada módulo:
271
+ * a entrada e os chunks que ela importa logo. `entry` e `integrity`
272
+ * continuam apontando para o arquivo único, usado por hosts antigos e
273
+ * quando o navegador não confere o hash por módulo.
274
+ */
275
+ split?: {
276
+ entry: string;
277
+ chunks?: string[];
278
+ };
279
+ /**
280
+ * Dependências de `dedupe` do build dividido: faixa aceita, versão da
281
+ * cópia própria e o arquivo dela, para o loader baixar junto com a entrada.
282
+ */
283
+ dedupe?: {
284
+ name: string;
285
+ range: string;
286
+ version: string;
287
+ file: string;
288
+ chunks?: string[];
289
+ }[];
290
+ /** O que o remote declara para o host conferir antes de montar. */
291
+ contract?: RemoteContract;
292
+ /**
293
+ * CSS já preparado no build para o Shadow DOM. Sem este campo (manifestos
294
+ * antigos), o runtime faz esse trabalho em cada página.
295
+ */
296
+ shadow?: ShadowCss;
297
+ }
298
+ /** Contrato do remote no `vitral.json`. */
299
+ interface RemoteContract {
300
+ /** Versão do contrato (opção `contract.version` do plugin). */
301
+ version?: string;
302
+ /** Faixa aceita de cada dependência de `dedupe`, por grupo (`{ react: '^19.0.0' }`). */
303
+ peers?: Record<string, string>;
304
+ }
305
+ /**
306
+ * CSS do remote preparado no build para `isolate: 'shadow'`. Os caminhos são
307
+ * relativos ao primeiro arquivo de `css` (o plugin grava tudo na mesma pasta).
308
+ */
309
+ interface ShadowCss {
310
+ /** Cada arquivo de `css`, na mesma ordem, sem `@import`, `@property` e `@font-face`. */
311
+ css: string[];
312
+ /** `@property` e `@font-face`, que só valem no documento (vão num `<link>`). */
313
+ global?: string[];
314
+ /** `@import` que o build não embutiu (outra origem), adotados antes de `css`. */
315
+ imports?: string[];
316
+ /** O CSS ainda tem `url()` relativa, que precisa apontar para o remote. */
317
+ rebase?: boolean;
318
+ }
319
+ type Handler<T = unknown> = (payload: T) => void;
320
+ interface EventBus {
321
+ emit<T = unknown>(type: string, payload?: T): void;
322
+ on<T = unknown>(type: string, handler: Handler<T>): () => void;
323
+ /** Último valor emitido em `type` (útil para estado como "usuário logado"). */
324
+ last<T = unknown>(type: string): T | undefined;
325
+ }
326
+
327
+ export { type CheckedProps as C, type EventBus as E, type Handler as H, type Isolation as I, type MountedRemote as M, type Props as P, type RemoteContext as R, type Shared as S, type VitralConfig as V, type RemoteModule as a, type StyleOptions as b, type RemoteEntry as c, type SharedValue as d, type PropsOf as e, type ProvideOptions as f, type ProvidedValue as g, type RemoteContract as h, type RemoteManifest as i, type RemoteMetric as j, type Remotes as k, type SharedApi as l, type SharedModules as m, type SharedType as n, batch as o, provide as p, shared as s };
package/dist/vite.d.ts CHANGED
@@ -1,8 +1,40 @@
1
1
  import { Plugin } from 'vite';
2
2
 
3
- interface VitralViteOptions {
4
- /** Arquivo que exporta o remote (default export de reactRemote/vueRemote/defineRemote). */
5
- entry: string;
3
+ interface CssBuildOptions {
4
+ /**
5
+ * `'host'`: as variáveis globais do remote (`:root`, `:host`) viram só
6
+ * fallback. O remote usa o valor do host quando ele existe e o próprio
7
+ * quando não existe. Para quem não tem um pacote de tokens compartilhado.
8
+ */
9
+ theme?: 'host';
10
+ /**
11
+ * `'flatten'`: tira os `@layer` do CSS do remote mantendo a ordem. Use quando
12
+ * o host tem CSS sem camada (Tailwind v3, CSS legado), que no modo escopo
13
+ * venceria todo o CSS em camada do remote.
14
+ */
15
+ layers?: 'flatten';
16
+ /**
17
+ * Renomeia as propriedades `--tw-*` registradas com `@property` para
18
+ * `--tw-<escopo>-*`. Use quando o host tem Tailwind v3 e o remote, v4:
19
+ * sem isso os gradientes do host quebram.
20
+ */
21
+ renameRegisteredProperties?: boolean;
22
+ }
23
+
24
+ type AdapterName = 'react' | 'vue' | 'svelte' | 'solid' | 'preact' | 'angular' | 'element';
25
+
26
+ interface VitralViteOptions extends CssBuildOptions {
27
+ /**
28
+ * Arquivo cujo `export default` é o remote: um componente do framework ou
29
+ * um objeto com `mount`. Padrão: `src/remote.*` ou `src/App.*`.
30
+ */
31
+ entry?: string;
32
+ /**
33
+ * Adaptador que embrulha o `export default`. Padrão: descoberto pelos
34
+ * plugins do Vite (React, Vue, Svelte, Solid, Preact, Angular; sem nenhum,
35
+ * Web Component ou função). `false` usa o export como está.
36
+ */
37
+ adapter?: AdapterName | false;
6
38
  /** Nome do remote no manifesto. Padrão: `name` do package.json. */
7
39
  name?: string;
8
40
  /** Versão no manifesto. Padrão: `version` do package.json. */
@@ -11,6 +43,7 @@ interface VitralViteOptions {
11
43
  * Dependências que NÃO entram no bundle e vêm do import map do host
12
44
  * (ex.: ['react', 'react-dom', 'react-dom/client']). Padrão: nenhuma, cada
13
45
  * remote leva suas dependências e nunca há conflito de versão.
46
+ * @deprecated Use `dedupe`, que cai na própria cópia se a versão não servir.
14
47
  */
15
48
  shared?: string[];
16
49
  /**
@@ -18,7 +51,36 @@ interface VitralViteOptions {
18
51
  * preflight/tema do Tailwind). Padrão: true.
19
52
  */
20
53
  scopeCss?: boolean;
54
+ /**
55
+ * Outros componentes e módulos do remote, por nome. O host usa
56
+ * `carrinho/MiniCarrinho` ou `loadModule('carrinho/api')`.
57
+ *
58
+ * exposes: { './MiniCarrinho': 'src/MiniCarrinho.tsx', './api': 'src/api.ts' }
59
+ *
60
+ * Um componente exporta `default` com `mount` (`reactRemote(Mini)` etc.).
61
+ */
62
+ exposes?: Record<string, string>;
63
+ /**
64
+ * Dependências que o remote usa da página, se a versão servir (padrão: `^`
65
+ * da versão instalada), ou da própria cópia. Ex.: `['react']` (o grupo do
66
+ * React inteiro) ou `['vue']`.
67
+ */
68
+ dedupe?: string[];
69
+ /**
70
+ * Publica `vitral.d.ts` com o tipo das props do `export default`, para o
71
+ * host checar as props (`npx vitral types`). Precisa de TypeScript no
72
+ * projeto e de entrada .ts/.tsx/.js/.jsx. Padrão: true.
73
+ */
74
+ types?: boolean;
75
+ /**
76
+ * Contrato publicado no `vitral.json`. O host que declara
77
+ * `contract: '^2'` só monta o remote se `version` estiver na faixa. As
78
+ * faixas de `dedupe` entram sozinhas, em `peers`. Padrão: sem versão.
79
+ */
80
+ contract?: {
81
+ version?: string;
82
+ };
21
83
  }
22
- declare function vitral(options: VitralViteOptions): Plugin;
84
+ declare function vitral(options?: VitralViteOptions): Plugin;
23
85
 
24
86
  export { type VitralViteOptions, vitral as default, vitral };