synthesisui 0.16.296 → 0.16.297
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 +22 -1
- package/dist/runtime-vars.js +53 -0
- package/package.json +1 -1
package/dist/commands/import.js
CHANGED
|
@@ -47,7 +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
|
+
import { runtimeDeclaredVars, runtimeDeclaredVarsIn } from "../runtime-vars.js";
|
|
51
51
|
import { detectStack, resolveDeps, stackVersions } from "../stack.js";
|
|
52
52
|
import { placeInWorkspace } from "../workspace-place.js";
|
|
53
53
|
import { add } from "./add.js";
|
|
@@ -1945,6 +1945,27 @@ export async function takeCensus(root, opts) {
|
|
|
1945
1945
|
*/
|
|
1946
1946
|
for (const name of runtimeDeclaredVars(sources))
|
|
1947
1947
|
declaredNames.add(name);
|
|
1948
|
+
/**
|
|
1949
|
+
* E FORA DO ESCOPO TAMBÉM - senão o conserto acima não alcança um monorepo.
|
|
1950
|
+
*
|
|
1951
|
+
* Com um escopo estreitado este `root` É a pasta do escopo, então `sources` tem o escopo e mais
|
|
1952
|
+
* nada. As fontes deste repositório são declaradas nos apps e CONSUMIDAS dentro da biblioteca - a
|
|
1953
|
+
* divisão que o próprio Next recomenda, e não um acidente de organização.
|
|
1954
|
+
*
|
|
1955
|
+
* MEDIDO: com o leitor acima já publicado, a segunda corrida ainda reportou as quatro fontes como
|
|
1956
|
+
* mortas. A promessa escrita acima é *"a name is only broken if NOTHING declares it, anywhere"*, e
|
|
1957
|
+
* "anywhere" tem que incluir os roots que a pessoa nomeou em uso.
|
|
1958
|
+
*/
|
|
1959
|
+
const usageRoots = (opts?.usage ?? []).map((u) => u.path);
|
|
1960
|
+
if (usageRoots.length > 0) {
|
|
1961
|
+
const outside = await runtimeDeclaredVarsIn(usageRoots, {
|
|
1962
|
+
readdir: (p) => readdir(p, { withFileTypes: true, encoding: "utf8" }),
|
|
1963
|
+
readFile: (p) => readFile(p, "utf8"),
|
|
1964
|
+
join,
|
|
1965
|
+
});
|
|
1966
|
+
for (const name of outside)
|
|
1967
|
+
declaredNames.add(name);
|
|
1968
|
+
}
|
|
1948
1969
|
/**
|
|
1949
1970
|
* HOW SOMEBODY CALLS THE COMPONENT THEY ALREADY HAVE.
|
|
1950
1971
|
*
|
package/dist/runtime-vars.js
CHANGED
|
@@ -47,3 +47,56 @@ export function runtimeDeclaredVars(sources) {
|
|
|
47
47
|
}
|
|
48
48
|
return out;
|
|
49
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* E A DECLARAÇÃO PODE MORAR FORA DO ESCOPO - o caso que o conserto de 24/08 não alcançou.
|
|
52
|
+
*
|
|
53
|
+
* MEDIDO no `codelevel` na segunda corrida, já com o leitor acima publicado: as quatro fontes
|
|
54
|
+
* CONTINUARAM sendo reportadas como mortas. A causa não era o leitor - era o que chega nele.
|
|
55
|
+
*
|
|
56
|
+
* `--scope packages/ui` faz o `root` do censo ser a pasta do escopo, então a varredura vê
|
|
57
|
+
* `packages/ui` e mais nada. As fontes são declaradas em `apps/landing/app/fonts.ts` e
|
|
58
|
+
* `apps/web/app/fonts.ts`, e USADAS dentro de `packages/ui`. Essa divisão não é acidente de
|
|
59
|
+
* organização: num monorepo, o app carrega a fonte e a biblioteca a consome, e é a forma
|
|
60
|
+
* recomendada pelo próprio Next.
|
|
61
|
+
*
|
|
62
|
+
* O código já promete o contrário do que fazia - *"a name is only broken if NOTHING declares it,
|
|
63
|
+
* anywhere"* está escrito no ponto que monta a lista. "Anywhere" tem que incluir os roots de
|
|
64
|
+
* `--usage`, que a pessoa nomeou justamente para dizer onde o vocabulário é consumido.
|
|
65
|
+
*
|
|
66
|
+
* SÓ LEITURA, e só de arquivos de código: nada aqui escreve, e um root de uso já é lido para
|
|
67
|
+
* evidência - a diferença é que agora ele também pode DECLARAR.
|
|
68
|
+
*/
|
|
69
|
+
export async function runtimeDeclaredVarsIn(roots, read) {
|
|
70
|
+
const out = new Set();
|
|
71
|
+
const seen = new Set();
|
|
72
|
+
const walk = async (dir, depth) => {
|
|
73
|
+
/**
|
|
74
|
+
* O TETO DE PROFUNDIDADE é o que mantém isto barato num monorepo grande. Uma declaração de
|
|
75
|
+
* fonte mora no diretório de app (`app/fonts.ts`, `src/app/fonts.ts`, `styles/fonts.ts`) -
|
|
76
|
+
* quatro níveis cobrem as três formas com folga, e o custo não cresce com o tamanho do repo.
|
|
77
|
+
*/
|
|
78
|
+
if (depth < 0 || seen.has(dir))
|
|
79
|
+
return;
|
|
80
|
+
seen.add(dir);
|
|
81
|
+
const entries = await read.readdir(dir).catch(() => []);
|
|
82
|
+
for (const e of entries) {
|
|
83
|
+
if (e.name.startsWith(".") || e.name === "node_modules")
|
|
84
|
+
continue;
|
|
85
|
+
const full = read.join(dir, e.name);
|
|
86
|
+
if (e.isDirectory()) {
|
|
87
|
+
await walk(full, depth - 1);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (!/\.(ts|tsx|js|jsx|mjs)$/i.test(e.name))
|
|
91
|
+
continue;
|
|
92
|
+
const src = await read.readFile(full).catch(() => "");
|
|
93
|
+
if (!src)
|
|
94
|
+
continue;
|
|
95
|
+
for (const name of runtimeDeclaredVars([{ file: full, source: src }]))
|
|
96
|
+
out.add(name);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
for (const r of roots)
|
|
100
|
+
await walk(r, 4);
|
|
101
|
+
return out;
|
|
102
|
+
}
|
package/package.json
CHANGED