synthesisui 0.16.203 → 0.16.204

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/claude-md.js CHANGED
@@ -350,9 +350,10 @@ Only write something new when nothing in the manifest covers the purpose - and w
350
350
  say which entry you considered and why it did not fit, then FILE it while the reasoning is
351
351
  still yours: the \`request_component\` MCP tool, or \`npx synthesisui@latest request component
352
352
  --name "<name>" --for "<the use case>" --considered "<entries and why not>"\`. That queue is
353
- what the system's author works from - a refusal said only in chat evaporates. To review a
354
- component, create an isolated sample page (e.g. \`app/synthesisui-samples/<component>/\`) - do not
355
- apply it to real production pages unless asked.${selfCheck}`;
353
+ what the system's author works from - a refusal said only in chat evaporates. If you want to eyeball a
354
+ component on its own, an isolated scratch page is optional and never required - and if you make
355
+ one, put it somewhere that does not become a route in this app, and delete it when you are done.
356
+ Do not apply a component to real production pages unless asked.${selfCheck}`;
356
357
  const locale = await readInterfaceLanguage(projectRoot);
357
358
  const language = locale === null
358
359
  ? ""
@@ -1,4 +1,4 @@
1
- import { readFile, rm, stat, writeFile } from "node:fs/promises";
1
+ import { readdir, readFile, rm, stat, writeFile } from "node:fs/promises";
2
2
  import { join, relative } from "node:path";
3
3
  import { body, section } from "../output.js";
4
4
  // The five SVGs create-next-app drops into public/. Filenames are specific
@@ -100,6 +100,35 @@ export async function clean(opts) {
100
100
  run: () => rm(readmePath),
101
101
  });
102
102
  }
103
+ /**
104
+ * O RASCUNHO QUE A NOSSA PRÓPRIA INSTRUÇÃO PEDIU - e que ninguém sabia remover.
105
+ *
106
+ * O `CLAUDE.md` que este CLI escreve sugere uma página isolada para olhar um componente sozinho,
107
+ * e o agente da pessoa a cria. Nada aqui a escreve, e nada aqui a apagava: ela ficava numa rota
108
+ * de VERDADE do app dela (`src/app/synthesisui-samples/<x>` é URL acessível), sem dono e sem
109
+ * saída, até alguém commitar sem querer. Encontrada no repo do dono em 11/08.
110
+ *
111
+ * É a mesma assimetria do bloco de shell: fácil de entrar, sem porta de saída. Aqui a saída é
112
+ * este comando, e ele mantém o contrato que já tem - seco por padrão, cada caminho nomeado antes
113
+ * de qualquer escrita, `--force` para aplicar.
114
+ *
115
+ * UMA AÇÃO POR PÁGINA, e não uma pela pasta: um destrutivo que anuncia um e remove seis faz mais
116
+ * do que diz, e essa lei já foi paga uma vez na poda de órfãos.
117
+ */
118
+ const samplesDir = join(appDir, "synthesisui-samples");
119
+ for (const entry of await readdir(samplesDir, {
120
+ withFileTypes: true,
121
+ }).catch(() => [])) {
122
+ if (!entry.isDirectory())
123
+ continue;
124
+ const p = join(samplesDir, entry.name);
125
+ actions.push({
126
+ verb: "remove",
127
+ path: rel(p),
128
+ why: "scratch page for eyeballing a component - nothing depends on it",
129
+ run: () => rm(p, { recursive: true }),
130
+ });
131
+ }
103
132
  if (actions.length === 0) {
104
133
  console.log(section("Clean up scaffold"));
105
134
  console.log(body("Nothing to clean - this project is already tidy."));
package/dist/last-sync.js CHANGED
@@ -24,7 +24,14 @@ export const LAST_SYNC_FILE = ".last-sync.json";
24
24
  *
25
25
  * `name` sai do valor porque já É a chave - hasheá-lo junto só gastaria bytes.
26
26
  */
27
- export function fingerprintReadings(components) {
27
+ export function fingerprintReadings(
28
+ /**
29
+ * A LINHA INTEIRA, e o tipo tem que dizer isso: `{ name?: unknown }` prometia menos do que esta
30
+ * função aceita, e o próprio spec precisou de um `as never` para passar uma linha real. Um tipo
31
+ * que obriga a burlá-lo está errado - e o `as never` que ele forçava é exatamente o que faria a
32
+ * impressão parar de ver um campo novo sem ninguém notar.
33
+ */
34
+ components) {
28
35
  const out = {};
29
36
  for (const c of components ?? []) {
30
37
  const name = typeof c?.name === "string" ? c.name : null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synthesisui",
3
- "version": "0.16.203",
3
+ "version": "0.16.204",
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": {
@@ -32,7 +32,8 @@
32
32
  "build": "tsc -p tsconfig.json && chmod +x dist/index.js",
33
33
  "dev": "tsx src/index.ts",
34
34
  "prepublishOnly": "npm run build",
35
- "test": "vitest run"
35
+ "test": "vitest run",
36
+ "check": "tsc -p tsconfig.check.json"
36
37
  },
37
38
  "license": "MIT"
38
39
  }