synthesisui 0.16.295 → 0.16.296

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.
@@ -47,6 +47,7 @@ import { body, paint, section } from "../output.js";
47
47
  import { outsideScope } from "../outside-scope.js";
48
48
  import { phase, startProgress } from "../progress.js";
49
49
  import { repoStateOf } from "../repo-state.js";
50
+ import { runtimeDeclaredVars } from "../runtime-vars.js";
50
51
  import { detectStack, resolveDeps, stackVersions } from "../stack.js";
51
52
  import { placeInWorkspace } from "../workspace-place.js";
52
53
  import { add } from "./add.js";
@@ -1934,6 +1935,16 @@ export async function takeCensus(root, opts) {
1934
1935
  for (const m of css.matchAll(/(--[a-zA-Z0-9_-]+)\s*:/g)) {
1935
1936
  declaredNames.add(m[1]);
1936
1937
  }
1938
+ /**
1939
+ * E O QUE ELE DECLARA FORA DO CSS - ver `runtimeDeclaredVars`.
1940
+ *
1941
+ * `next/font` gera a variável em tempo de execução, então uma varredura de folhas `.css` não a
1942
+ * enxerga e o relatório acusava as quatro fontes do repositório dele de "não resolvem para nada".
1943
+ * Medido em 24/08: 4 das 6 variáveis reportadas como mortas estavam vivas, e o agente teve que se
1944
+ * desdizer na frente do cliente.
1945
+ */
1946
+ for (const name of runtimeDeclaredVars(sources))
1947
+ declaredNames.add(name);
1937
1948
  /**
1938
1949
  * HOW SOMEBODY CALLS THE COMPONENT THEY ALREADY HAVE.
1939
1950
  *
@@ -0,0 +1,49 @@
1
+ /**
2
+ * AS VARIÁVEIS QUE O CÓDIGO DELE DECLARA FORA DO CSS - e sem elas a plataforma acusa o repositório
3
+ * dele de um defeito que não existe.
4
+ *
5
+ * O QUE O CLIENTE VIA, medido numa corrida real em 24/08 contra o `codelevel`:
6
+ *
7
+ * "6 var() que não resolvem para nada: --font-ds-display, --font-ds-body,
8
+ * --font-ds-mono, --font-ds-serif, --ring-circ, --ring-target"
9
+ *
10
+ * Quatro das seis resolvem. Elas são declaradas por `next/font`, que gera a variável em tempo de
11
+ * execução e a injeta pelo `className` - o inventário de declarações lia só folhas `.css`, então
12
+ * para ele aquilo não existia. O agente teve que se desdizer na frente do cliente no MESMO
13
+ * fechamento, e uma afirmação errada custa mais confiança que a lacuna que ela tentava reportar.
14
+ *
15
+ * O ALCANCE, medido no mesmo repositório: 27 arquivos usam `next/font`, declarando 8 variáveis.
16
+ * Não é caso de borda - é a forma recomendada de carregar fonte em Next, e o nosso próprio
17
+ * `fonts.ts` a ESCREVE para o cliente. Sabíamos escrever a forma e não sabíamos lê-la.
18
+ *
19
+ * POR QUE O IMPORT PRECISA DO ARQUIVO, e não só do padrão: `variable: "--x"` é texto comum o
20
+ * bastante para aparecer em CSS-in-JS e em objetos de configuração de qualquer biblioteca. Contar
21
+ * aquilo como declaração em todo lugar trocaria um falso positivo por um falso negativo - a
22
+ * plataforma deixaria de avisar sobre uma variável genuinamente morta. Então a regra é a origem, e
23
+ * não o nome: só vale num arquivo que importa de `next/font`, que é o pacote cujo contrato promete
24
+ * a declaração.
25
+ */
26
+ /** Um arquivo importa de `next/font`? É a origem que autoriza a leitura abaixo. */
27
+ const IMPORTS_NEXT_FONT = /from\s+["']next\/font(?:\/[a-z]+)?["']/;
28
+ /**
29
+ * O CAMPO DO CONTRATO. `next/font` aceita `variable` em `Inter({...})` e em `localFont({...})`, e nos
30
+ * dois casos a promessa é a mesma: a classe devolvida declara essa variável no elemento.
31
+ */
32
+ const VARIABLE_FIELD = /\bvariable\s*:\s*["'](--[a-zA-Z0-9_-]+)["']/g;
33
+ /**
34
+ * Os nomes que os arquivos dele declaram em tempo de execução, e que nenhuma folha `.css` carrega.
35
+ *
36
+ * Devolve um `Set` porque é assim que o inventário de declarações do import é consultado - a
37
+ * intenção é somar a ele, nunca substituí-lo: uma variável pode ser declarada nos dois lugares, e
38
+ * duas fontes que concordam não são um conflito.
39
+ */
40
+ export function runtimeDeclaredVars(sources) {
41
+ const out = new Set();
42
+ for (const { source } of sources) {
43
+ if (!IMPORTS_NEXT_FONT.test(source))
44
+ continue;
45
+ for (const m of source.matchAll(VARIABLE_FIELD))
46
+ out.add(m[1]);
47
+ }
48
+ return out;
49
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synthesisui",
3
- "version": "0.16.295",
3
+ "version": "0.16.296",
4
4
  "description": "Bring SynthesisUI design systems into any project - tokens, typed components, whole pages and an agent-ready CLAUDE.md manifest.",
5
5
  "type": "module",
6
6
  "bin": {