/** * What a Svelte component's instance `
{items.length}
`, 'src/lib/examples/item-demo.svelte': ` {label} `, 'src/components/TabItem.vue': ` `, 'src/extensions/code-block.ts': `import { isActive } from "@/tiptap/core"; export function active(state: unknown) { return isActive(state); } `, 'src/components/CrudTable.vue': ` `, 'src/pages/GroupDataPage.vue': ` `, }; for (const [rel, content] of Object.entries(files)) { fs.mkdirSync(path.dirname(path.join(root, rel)), { recursive: true }); fs.writeFileSync(path.join(root, rel), content); } cg = await CodeGraph.init(root, { index: true }); }); afterAll(() => { cg?.close(); if (root) fs.rmSync(root, { recursive: true, force: true }); }); const targetsFrom = (file: string) => { const ids = cg.getNodesInFile(file).map((n) => n.id); return cg.getOutgoingEdgesFrom(ids).filter((e) => e.kind !== 'contains').map((e) => cg.getNode(e.target)!).map((t) => `${t.filePath}:${t.name}`); }; describe('single-file component declarations', () => { it('are private to the component', () => { expect(targetsFrom('src/lib/examples/item-demo.svelte')).not.toContain('src/lib/examples/attachment-group.svelte:Item'); expect(targetsFrom('src/extensions/code-block.ts')).not.toContain('src/components/TabItem.vue:isActive'); }); it('except a type a Vue