synthesisui 0.16.297 → 0.16.299
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/dist/commands/import.js +58 -2
- package/dist/doctor/style-ledger.js +38 -3
- package/dist/install-marks.js +1 -1
- package/dist/wired-slugs.js +86 -0
- package/package.json +1 -1
package/dist/commands/import.js
CHANGED
|
@@ -49,6 +49,7 @@ import { phase, startProgress } from "../progress.js";
|
|
|
49
49
|
import { repoStateOf } from "../repo-state.js";
|
|
50
50
|
import { runtimeDeclaredVars, runtimeDeclaredVarsIn } from "../runtime-vars.js";
|
|
51
51
|
import { detectStack, resolveDeps, stackVersions } from "../stack.js";
|
|
52
|
+
import { wiredSlugs, wiringWarning } from "../wired-slugs.js";
|
|
52
53
|
import { placeInWorkspace } from "../workspace-place.js";
|
|
53
54
|
import { add } from "./add.js";
|
|
54
55
|
import { walk, walkAll } from "./doctor.js";
|
|
@@ -373,6 +374,13 @@ function screenOf(rel) {
|
|
|
373
374
|
}
|
|
374
375
|
/** Quantas classes da folha global viajam no censo. Ver o aviso em `takeCensus`. */
|
|
375
376
|
const MAX_GLOBAL_CLASSES = 300;
|
|
377
|
+
/**
|
|
378
|
+
* QUANTOS NOMES DE COMPONENTE RECUSADO VIAJAM - ver o ponto de uso.
|
|
379
|
+
*
|
|
380
|
+
* Medido e não estimado: 688 recusados no `frontend-hub` e 712 num monorepo maior. 4096 cabe os
|
|
381
|
+
* dois com folga e continua sendo um teto de verdade, alinhado com `DISTINCT_CAP` do ledger.
|
|
382
|
+
*/
|
|
383
|
+
const SKIPPED_CAP = 4096;
|
|
376
384
|
export async function takeCensus(root, opts) {
|
|
377
385
|
/**
|
|
378
386
|
* O RELATÓRIO SÓ SAI QUANDO ALGUÉM O PEDIU - `say` cala quando o chamador é uma RE-medição.
|
|
@@ -2113,6 +2121,17 @@ export async function takeCensus(root, opts) {
|
|
|
2113
2121
|
: {}),
|
|
2114
2122
|
...(animations.size > 0 ? { animations: [...animations].sort() } : {}),
|
|
2115
2123
|
...(brokenRefs.length > 0 ? { brokenRefs } : {}),
|
|
2124
|
+
/**
|
|
2125
|
+
* OS SISTEMAS QUE O CSS DELE JÁ CHAMA PELO NOME - ver `wiredSlugs`.
|
|
2126
|
+
*
|
|
2127
|
+
* Existe porque um import de 24/08 deixou o repositório do dono SEM COMPILAR: o CSS dele
|
|
2128
|
+
* carrega `_synthesisui/ds/codelevel/`, o sistema nasceu como `codelevel-ds`, e o `next build`
|
|
2129
|
+
* dele terminou em exit code 1 com `Can't resolve`. Não é cor errada - é o app parado.
|
|
2130
|
+
*
|
|
2131
|
+
* O campo é a metade medida da resposta; a outra é a pergunta do nome saber usá-lo. Aditivo e
|
|
2132
|
+
* omitido quando não há nada cabeado, que é o caso de todo primeiro import limpo.
|
|
2133
|
+
*/
|
|
2134
|
+
...(wiredSlugs(css).length > 0 ? { wiredSlugs: wiredSlugs(css) } : {}),
|
|
2116
2135
|
/**
|
|
2117
2136
|
* OS NOMES DISPUTADOS - ver `name-claim.ts`.
|
|
2118
2137
|
*
|
|
@@ -2232,9 +2251,26 @@ export async function takeCensus(root, opts) {
|
|
|
2232
2251
|
: {}),
|
|
2233
2252
|
...(skips.length > 0
|
|
2234
2253
|
? {
|
|
2254
|
+
/**
|
|
2255
|
+
* TODOS OS NOMES, E NÃO 400 - a decisão de 100% no portão, aplicada aqui.
|
|
2256
|
+
*
|
|
2257
|
+
* O DONO (24/08): *"o nosso objetivo sempre é conseguir pegar tudo lá no portão, cem por
|
|
2258
|
+
* cento"*. Um componente recusado cujo NOME não viaja é um componente sobre o qual ele não
|
|
2259
|
+
* pode discordar - e discordar da recusa é exatamente o que a tela oferece.
|
|
2260
|
+
*
|
|
2261
|
+
* O TETO SUBIU E O PESO CAIU, na mesma mudança, porque uma coisa pagou a outra: o
|
|
2262
|
+
* `because` saiu de cada entrada. Medido no `frontend-hub`: 400 entradas com a frase pesam
|
|
2263
|
+
* 79 KB e sem ela 18 KB - 77% menor. A frase é o MESMO template com o nome dentro
|
|
2264
|
+
* (`AddUserIcon renders but decides nothing…`), e o template já viaja uma vez por motivo em
|
|
2265
|
+
* `gate.groups[].label`. Transportá-la 400 vezes era pagar caro pela mesma frase.
|
|
2266
|
+
*
|
|
2267
|
+
* O que se perde: a frase com o nome do componente dentro. O que se ganha: todos os nomes,
|
|
2268
|
+
* em vez de 400 de 688. Para quem quer discordar de uma recusa, o nome é o que importa - a
|
|
2269
|
+
* frase ele já lê uma vez, no grupo.
|
|
2270
|
+
*/
|
|
2235
2271
|
skipped: skips
|
|
2236
|
-
.slice(0,
|
|
2237
|
-
.map(({ name, why
|
|
2272
|
+
.slice(0, SKIPPED_CAP)
|
|
2273
|
+
.map(({ name, why }) => ({ name, why })),
|
|
2238
2274
|
/**
|
|
2239
2275
|
* OS NÚMEROS VERDADEIROS DO PORTÃO, porque a lista acima é cortada em 400 e num
|
|
2240
2276
|
* monorepo real o corte estoura (712 recusados, 400 gravados). Contar a lista daria
|
|
@@ -3995,6 +4031,26 @@ export async function runImport(opts) {
|
|
|
3995
4031
|
* mais longa do produto ficar mais longa no lugar onde ela já é mais difícil de ler.
|
|
3996
4032
|
*/
|
|
3997
4033
|
if (payload?.slug) {
|
|
4034
|
+
/**
|
|
4035
|
+
* A FIAÇÃO DELE CONTRA O SLUG QUE NASCEU - e este aviso sai do CLI, não da skill.
|
|
4036
|
+
*
|
|
4037
|
+
* MEDIDO em 24/08: o `globals.css` dele importa `_synthesisui/ds/codelevel/`, o nome escolhido
|
|
4038
|
+
* derivou `codelevel-ds`, ninguém mencionou, e o `next build` dele terminou em exit code 1 com
|
|
4039
|
+
* `Can't resolve`. O aplicativo do cliente parou de compilar por causa de um comando que a
|
|
4040
|
+
* plataforma conduziu do começo ao fim.
|
|
4041
|
+
*
|
|
4042
|
+
* AQUI e não só no playbook porque o playbook é conselho e isto é fato: o slug chegou do
|
|
4043
|
+
* servidor, a pasta vai ser escrita com ele, e a divergência é aritmética. Um aviso que depende
|
|
4044
|
+
* de um agente ter lido o capítulo certo é um aviso que falta exatamente quando ele não leu -
|
|
4045
|
+
* foi assim que este defeito passou.
|
|
4046
|
+
*/
|
|
4047
|
+
const warning = wiringWarning(census.wiredSlugs ?? [], payload.slug);
|
|
4048
|
+
if (warning) {
|
|
4049
|
+
console.log("");
|
|
4050
|
+
console.log(section("Your CSS points somewhere else"));
|
|
4051
|
+
for (const line of warning.split("\n"))
|
|
4052
|
+
console.log(body(line));
|
|
4053
|
+
}
|
|
3998
4054
|
try {
|
|
3999
4055
|
await add(payload.slug, {
|
|
4000
4056
|
registry: opts.registry,
|
|
@@ -65,6 +65,13 @@ const SHAPE_LABEL = {
|
|
|
65
65
|
*
|
|
66
66
|
* Um motivo novo que um leitor alcance entra AQUI. Fora daqui ele vira contagem sem lugar.
|
|
67
67
|
*/
|
|
68
|
+
/**
|
|
69
|
+
* QUANTOS TEXTOS DISTINTOS POR GRUPO VIAJAM - ver a explicação no ponto de uso.
|
|
70
|
+
*
|
|
71
|
+
* Medido e não estimado: 4 426 declarações nos módulos do `frontend-hub` são 1 108 distintas, e a
|
|
72
|
+
* população inteira daquele repositório cabe abaixo deste teto.
|
|
73
|
+
*/
|
|
74
|
+
const DISTINCT_CAP = 4096;
|
|
68
75
|
const A_READER_REACHES = new Set([
|
|
69
76
|
"shape-not-read",
|
|
70
77
|
"binding-not-read",
|
|
@@ -85,6 +92,29 @@ const A_READER_REACHES = new Set([
|
|
|
85
92
|
* O teto de 512 e o texto DISTINTO continuam valendo, e são eles que pagam a conta do tamanho.
|
|
86
93
|
*/
|
|
87
94
|
"value-not-read",
|
|
95
|
+
/**
|
|
96
|
+
* `component-not-admitted` ENTROU EM 24/08, e é a maior de todas - 96% do volume não interpretado
|
|
97
|
+
* do repositório real.
|
|
98
|
+
*
|
|
99
|
+
* A frase que o excluía estava certa sobre o que ele É e errada sobre o que ele CUSTA:
|
|
100
|
+
* *"`component-not-admitted` é o portão, não a leitura"*. Verdade - o componente ficou fora do
|
|
101
|
+
* escopo, e nenhum leitor novo conserta isso. Mas a conclusão não seguia: o texto não é só
|
|
102
|
+
* matéria-prima de leitor, é matéria-prima de DECISÃO. São 10 206 declarações no `frontend-hub`
|
|
103
|
+
* que o cliente não tem como olhar sem abrir o repositório dele arquivo por arquivo.
|
|
104
|
+
*
|
|
105
|
+
* A DECISÃO DO DONO (24/08), e ela é de princípio: *"o nosso objetivo sempre é conseguir pegar
|
|
106
|
+
* tudo lá no portão, cem por cento"*. Um estilo que existe no código dele e não viaja é um estilo
|
|
107
|
+
* sobre o qual nenhuma tela, nenhuma proposta e nenhuma re-interpretação pode falar.
|
|
108
|
+
*
|
|
109
|
+
* O QUE PAGA A CONTA continua sendo o texto DISTINTO, e medido: nos 400 primeiros arquivos de
|
|
110
|
+
* module do `frontend-hub` são 4 426 declarações e 1 108 distintas - a dedup corta 4x. O volume
|
|
111
|
+
* bruto de 10 825 usos vira ~1 500 textos, não 10 825 linhas.
|
|
112
|
+
*
|
|
113
|
+
* E O CUSTO É DECRESCENTE, que é a observação do dono ao aprovar isto: cada forma que a
|
|
114
|
+
* interpretação aprender sai deste balde e entra em recipe. O censo encolhe à medida que a
|
|
115
|
+
* plataforma melhora - o pico é agora, não depois.
|
|
116
|
+
*/
|
|
117
|
+
"component-not-admitted",
|
|
88
118
|
]);
|
|
89
119
|
const BECAUSE = {
|
|
90
120
|
"shape-not-read": "no reader in this version understands this shape, so the styles it holds reach no recipe",
|
|
@@ -166,11 +196,16 @@ declared) {
|
|
|
166
196
|
* fragmento deu 723 215 bytes no dashboard dele, contra um teto de 65 536. Oito mil cópias da
|
|
167
197
|
* mesma string não ensinam mais que uma - o que um leitor precisa é da variedade de FORMAS.
|
|
168
198
|
*
|
|
169
|
-
* O
|
|
170
|
-
*
|
|
199
|
+
* O TETO SUBIU PARA 4096 EM 24/08, e o número saiu de uma medição e não de um palpite: a
|
|
200
|
+
* variedade real do `frontend-hub` é de ~1 500 textos distintos sobre 10 825 usos, então 4096
|
|
201
|
+
* cabe a população inteira daquele repositório com folga e continua sendo um teto de verdade
|
|
202
|
+
* para um caso patológico.
|
|
203
|
+
*
|
|
204
|
+
* `uses` continua contando tudo, então a diferença entre o contado e o que viajou permanece
|
|
205
|
+
* visível em vez de silenciosa - e é ela que a tela mostra quando o teto corta.
|
|
171
206
|
*/
|
|
172
207
|
if (A_READER_REACHES.has(reason) &&
|
|
173
|
-
group.unreadable.length <
|
|
208
|
+
group.unreadable.length < DISTINCT_CAP &&
|
|
174
209
|
!group.unreadable.some((u) => u.text === f.text))
|
|
175
210
|
group.unreadable.push({
|
|
176
211
|
file: f.file,
|
package/dist/install-marks.js
CHANGED
|
@@ -253,7 +253,7 @@ export const CHECKER_SINCE = "0.16.250";
|
|
|
253
253
|
* publicado antes deste código existir, e uma marca nele calaria o aviso para quem o instalou. Mesma
|
|
254
254
|
* lição de algumas horas antes, na mesma sessão.
|
|
255
255
|
*/
|
|
256
|
-
export const READER_SINCE = "0.16.
|
|
256
|
+
export const READER_SINCE = "0.16.299";
|
|
257
257
|
/**
|
|
258
258
|
* O QUE ESTÁ INSTALADO AQUI FICOU PARA TRÁS - e as DUAS condições que fazem isso ser verdade.
|
|
259
259
|
*
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OS SISTEMAS QUE O CSS DELE JÁ CHAMA PELO NOME - e o build que quebra quando o nome não bate.
|
|
3
|
+
*
|
|
4
|
+
* O QUE ACONTECEU, medido no repositório do dono em 24/08: o `globals.css` dele carrega
|
|
5
|
+
*
|
|
6
|
+
* @import "../../../../_synthesisui/ds/codelevel/tokens.css";
|
|
7
|
+
* @import "../../../../_synthesisui/ds/codelevel/theme.css";
|
|
8
|
+
*
|
|
9
|
+
* O import daquela corrida nasceu com o slug `codelevel-ds`, então o `add` escreveu
|
|
10
|
+
* `_synthesisui/ds/codelevel-ds/` e os dois `@import` passaram a apontar para uma pasta que não
|
|
11
|
+
* existe. O `next build` dele terminou em **exit code 1**:
|
|
12
|
+
*
|
|
13
|
+
* Can't resolve '../../../../_synthesisui/ds/codelevel/tokens.css'
|
|
14
|
+
*
|
|
15
|
+
* Não é uma cor errada nem um token faltando: o aplicativo dele **não compila**. É o pior desfecho
|
|
16
|
+
* possível de uma esteira que existe para devolver o código dele funcionando, e ele sai de um
|
|
17
|
+
* comando que a plataforma conduziu do começo ao fim.
|
|
18
|
+
*
|
|
19
|
+
* POR QUE O SLUG PODE DIVERGIR: o nome é decisão dele, feita numa pergunta, e o slug deriva do
|
|
20
|
+
* nome. "CodeLevel" dá `codelevel`; "CodeLevel DS" dá `codelevel-ds`. As duas respostas são
|
|
21
|
+
* legítimas - o que não é legítimo é ninguém dizer que a segunda quebra o CSS que já está lá.
|
|
22
|
+
*
|
|
23
|
+
* ENTÃO A MEDIÇÃO VEM ANTES DA PERGUNTA. Este leitor responde "quais slugs o CSS deste repositório
|
|
24
|
+
* já espera encontrar", e o censo carrega a resposta. Com ela na mão, a pergunta do nome deixa de
|
|
25
|
+
* ser um campo em branco: existe um slug que faz a fiação resolver, e ele é dito em voz alta.
|
|
26
|
+
*
|
|
27
|
+
* DIZER, E NÃO DECIDIR. A plataforma não escolhe o nome do sistema dele nem reescreve o CSS dele -
|
|
28
|
+
* é o mesmo padrão do `add`, que imprime o `@import` e não o cola. O que ela deve é nunca deixá-lo
|
|
29
|
+
* escolher às cegas uma resposta que apaga o build.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* O caminho que a nossa própria instalação usa. Qualquer profundidade de `../`, porque a folha dele
|
|
33
|
+
* pode estar em qualquer nível - a do dono está quatro acima.
|
|
34
|
+
*/
|
|
35
|
+
const WIRED = /_synthesisui\/ds\/([a-z0-9][a-z0-9-]*)\//gi;
|
|
36
|
+
/**
|
|
37
|
+
* Os slugs que o CSS dele já referencia, em ordem de aparição e sem repetir.
|
|
38
|
+
*
|
|
39
|
+
* Recebe o CSS já concatenado porque é isso que o censo tem em mão - uma segunda varredura de
|
|
40
|
+
* arquivos seria uma segunda medição, livre para discordar da primeira.
|
|
41
|
+
*/
|
|
42
|
+
export function wiredSlugs(css) {
|
|
43
|
+
const out = [];
|
|
44
|
+
for (const m of css.matchAll(WIRED))
|
|
45
|
+
if (!out.includes(m[1].toLowerCase()))
|
|
46
|
+
out.push(m[1].toLowerCase());
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* O QUE DIZER A ELE QUANDO O SISTEMA JÁ NASCEU COM OUTRO NOME.
|
|
51
|
+
*
|
|
52
|
+
* Roda DEPOIS do envio, com o slug que o servidor devolveu - então não é previsão, é fato: a pasta
|
|
53
|
+
* vai ser escrita com este nome e os `@import` dele apontam para outro.
|
|
54
|
+
*
|
|
55
|
+
* `null` quando o CSS não cabeia nada (todo primeiro import limpo) e quando o slug que nasceu já é
|
|
56
|
+
* um dos cabeados. Um aviso que aparece sempre é um aviso que ninguém lê.
|
|
57
|
+
*
|
|
58
|
+
* A frase carrega as três coisas que a decisão precisa: o que o CSS espera, o que existe agora, e o
|
|
59
|
+
* que acontece se ele não fizer nada. Sem a terceira isto é trivia - e foi a terceira que faltou na
|
|
60
|
+
* corrida que parou o build dele.
|
|
61
|
+
*
|
|
62
|
+
* DIZER, E NÃO CONSERTAR. O CSS é dele; reescrevê-lo por conta própria seria a plataforma editando
|
|
63
|
+
* o repositório de alguém sem pedir. É o mesmo padrão do `add`, que imprime o `@import` e não o
|
|
64
|
+
* cola.
|
|
65
|
+
*/
|
|
66
|
+
export function wiringWarning(
|
|
67
|
+
/**
|
|
68
|
+
* A LISTA, e não o CSS - porque o censo já a carrega (`census.wiredSlugs`) e o CSS bruto não
|
|
69
|
+
* viaja nele. Recontar aqui seria uma segunda medição, livre para discordar da primeira.
|
|
70
|
+
*/
|
|
71
|
+
wired, slugThatWasBorn) {
|
|
72
|
+
if (wired.length === 0)
|
|
73
|
+
return null;
|
|
74
|
+
if (wired.includes(slugThatWasBorn.toLowerCase()))
|
|
75
|
+
return null;
|
|
76
|
+
return [
|
|
77
|
+
`Your CSS imports _synthesisui/ds/${wired[0]}/, and this system is "${slugThatWasBorn}".`,
|
|
78
|
+
`Those @import lines point at a folder that does not exist, and the build fails on them -`,
|
|
79
|
+
`not a missing colour, a build that stops. Point them at ${slugThatWasBorn} to fix it:`,
|
|
80
|
+
"",
|
|
81
|
+
` @import ".../_synthesisui/ds/${slugThatWasBorn}/tokens.css";`,
|
|
82
|
+
` @import ".../_synthesisui/ds/${slugThatWasBorn}/theme.css";`,
|
|
83
|
+
"",
|
|
84
|
+
"Yours to change - we do not edit your CSS.",
|
|
85
|
+
].join("\n");
|
|
86
|
+
}
|
package/package.json
CHANGED