/**
* 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': `
{{ config }}
`,
};
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