Skip to main content
Glama
deleonio
by deleonio
end-to-end-migration.spec.ts3.05 kB
import fs from 'fs'; import assert from 'node:assert'; import os from 'os'; import path from 'path'; import { TaskRunner } from '../src/migrate/runner/task-runner'; import { RemovePropertyNameTask } from '../src/migrate/runner/tasks/common/RemovePropertyNameTask'; import { RenamePropertyNameTask } from '../src/migrate/runner/tasks/common/RenamePropertyNameTask'; import { RenameTagNameTask } from '../src/migrate/runner/tasks/common/RenameTagNameTask'; import { setRemoveMode } from '../src/migrate/shares/reuse'; function createStubModules(baseDir: string) { const reactTypes = path.join(baseDir, 'node_modules', '@types', 'react'); fs.mkdirSync(reactTypes, { recursive: true }); fs.writeFileSync(path.join(reactTypes, 'index.d.ts'), 'export {};'); const reactRuntime = path.join(baseDir, 'node_modules', 'react'); fs.mkdirSync(reactRuntime, { recursive: true }); fs.writeFileSync(path.join(reactRuntime, 'jsx-runtime.d.ts'), 'export {};'); const publicUiReact = path.join(baseDir, 'node_modules', '@public-ui', 'react'); fs.mkdirSync(publicUiReact, { recursive: true }); fs.writeFileSync(path.join(publicUiReact, 'index.d.ts'), 'export class KolTable {}; export class KolTableStateful {};'); } describe('end-to-end migration', () => { beforeEach(() => { (RenameTagNameTask as any).instances?.clear(); (RenamePropertyNameTask as any).instances?.clear(); (RemovePropertyNameTask as any).instances?.clear(); }); it('runs multiple tasks and compiles the project', () => { const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kolibri-e2e-')); const srcDir = path.join(tmpDir, 'src'); fs.mkdirSync(srcDir); fs.writeFileSync( path.join(srcDir, 'index.tsx'), 'import { KolTable } from \'@public-ui/react\';\nexport const App = () => <KolTable _old="foo" _remove="bar" />;\n', ); fs.writeFileSync(path.join(tmpDir, 'index.html'), '<kol-table _old="foo" _remove="bar"></kol-table>'); createStubModules(tmpDir); const tsconfigPath = path.join(tmpDir, 'tsconfig.json'); fs.writeFileSync(tsconfigPath, '{}'); const runner = new TaskRunner(tmpDir, '3.0.0', '1.0.0', { migrate: { tasks: {} } }); setRemoveMode('delete'); const tasks = [ RenameTagNameTask.getInstance('kol-table', 'kol-table-stateful', '^1'), RenamePropertyNameTask.getInstance('kol-table-stateful', '_old', '_new', '^1'), RemovePropertyNameTask.getInstance('kol-table-stateful', '_remove', '^1'), ]; runner.registerTasks(tasks); runner.run(); const tsxContent = fs.readFileSync(path.join(srcDir, 'index.tsx'), 'utf8'); const htmlContent = fs.readFileSync(path.join(tmpDir, 'index.html'), 'utf8'); console.log('debug-tsx', tsxContent); console.log('debug-html', htmlContent); assert.ok(tsxContent.includes('KolTableStateful')); assert.ok(tsxContent.includes('_new="foo"')); assert.ok(!tsxContent.includes('_remove')); assert.ok(htmlContent.includes('<kol-table-stateful')); assert.ok(htmlContent.includes('_new="foo"')); assert.ok(!htmlContent.includes('_remove')); setRemoveMode('prefix'); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/deleonio/public-ui-kolibri'

If you have feedback or need assistance with the MCP directory API, please join our Discord server