Skip to main content
Glama
nrwl

Nx MCP Server

Official
by nrwl
pdv-state-machine.ts7.83 kB
import type { PDVData } from '@nx-console/shared-types'; import { assign, enqueueActions, fromPromise, setup } from 'xstate'; // actions & actor definitions will be provided by the consumer of this machine, using placeholders here export const machine = setup({ types: { context: {} as Partial<PDVData> & { multiSelectedProject: string | undefined; }, }, actors: { loadPDVData: fromPromise(async () => { return {} as PDVData | undefined; }), }, actions: { renderLoading: () => { // }, renderPDV: () => { // }, reRenderPDV: (_: unknown, params: { pdvData: string | undefined }) => { // }, renderError: () => { // }, renderMultiPDV: () => { // }, renderNoGraphError: () => { // }, assignLoadPDVData: assign(({ context, event }) => { const multiProjects = Object.keys( event['output'].pdvDataSerializedMulti ?? {} ); const multiSelectedProject = context['multiSelectedProject'] ?? (multiProjects.length > 0 ? multiProjects[0] : undefined); return { ...event['output'], multiSelectedProject, }; }), transitionConditionally: enqueueActions(({ context, enqueue }) => { if ( !context.resultType || context.resultType === 'NO_GRAPH_ERROR' || !context.graphBasePath ) { enqueue.raise({ type: 'NO_GRAPH_ERROR' }); return; } if (context.resultType === 'SUCCESS') { enqueue.raise({ type: 'PDV_DATA_LOAD_SUCCESS' }); return; } if (context.resultType === 'SUCCESS_MULTI') { enqueue.raise({ type: 'PDV_DATA_LOAD_MULTI_SUCCESS' }); return; } if (context.resultType === 'ERROR') { enqueue.raise({ type: 'PDV_DATA_LOAD_ERROR' }); return; } }), }, }).createMachine({ /** @xstate-layout N4IgpgJg5mDOIC5QAcBOB7AVmAxgFwBEw8BDASwBtYBiABQIDUB9AgQQBVWmAZAeVYJMAygFUAwmICiQoQG0ADAF1EKdLDJ4y6AHYqQAD0QBWAGwA6ABxGAnNaPyT8gIwAmRxesAaEAE9EAdicnM2t5IwAWFyD-cKCLAGYAX0TvNCxcQmJyKjpGFg4uPgEmSQAlUt5ShWUkEGQ1DS1dWsMEeJczI3sg+VCjeOsLcP9vPwQneSGzfxdQl3mLBIcTZNSMbHwiUkoaemY2Th5+QQBZEW52AElhcSkZar169U0dPVaAWhMjMyd-f3twuEjC5whYnNYRr5EE5hhYzJFXNEEl8Vik6usMltsjQAHK8JgAcVKrFoAAkSuVKg9ak9Gq8WtCgfCor94v1-PE-otRoh2nCwiYLPIXPI2YKTP5Vuj0pssjszGRtI0SBRuOgSBBFVBqBAdGAFdoAG7oADW+rSG0y2yoBuVqvVmu0UAQiuNOBIL201WpqmeTTeiHeTiMcP6VnioqGQRcFh5CA8ZhcM2sJhc9lFEdMUotmLlNtgAAt0AB3LV7ailSQAMUrQlJPrqDU9AbaNh+i0WdhiLK8UIQM3kZhMKaT9hmHPm2YxsutsDMhZLZcYZlQYAAZqvC1qdXqDcazWYczPsfOi6WnXsV+vNwWtS6jeh3Z7vUpHk3-QyEOFbImYdZ4iYTjDhYgpGHGIZwoB4TDiKIbWGmU4ylaJ4LueUB7CcACuFCaNQZwXNctAVAAUpIYjsMIkjcGR7CSAQDa0s2n6AtYibAhCHGLPIfwmHGvxGMEAEQu0-hhPI8jDIhlpYvKqFLgwWE4WQFbVrW9avjS770qArRsqxTidgZUYIrxfbBsCZi9BMXT+AkLIuFJuazqei4XowimaFeG5wLeTo7to+quqa5rTshslnvJHlkF5N53kFT5NC+NS+nSzQ6Yg36sVE34OHMXwgeEfGRIO4nWNB8QWG4JhApKaJHmF+YRU6kioBgqAqTW0jqcljZ+tpBi8m2RmdkY3bRJCYxBJy8JWMMjgSWJSR1aFMmNa5UAtW1MU+duuoBXuwWHiteZznJzWtegqDbVuTr3m6HqJUoDFaWlA1fvBljxDCbL+BK8QVU4fHid84Siv+wJfBMDnLUhq2nU1UA4ugBKoCQyAFptl0dWpz19a9ulDR2tjtLYoLDHGX0dPYAGcr0v0mBK4SOce4XrUjKNoxjF1Xau3k3dqe2BQ+B71XDLloezqPo5jPPXjtt3xQ9OhJW+eMtt+HQJDCDjpq4CR8UKzIitVXxpjES1oto6AQHAjzHbOqupS27wuF9llfLEbhBBMEJxu8sSWf0BnhBVkyAlmMPSSdtqaCqaoalqjtMelCBBgk7sRK4gE9L7fZRP4Q7OBGbKjiBlXMw18PrXsScfinX3BMNHijQi4JxkC4TwqmIemLYlUSqiayw9HZ3ocuZAQBQYC1-1un+KxyZVQZgRsvEcYMx0xt-K7MLzzGFdi6Pl687FToz-jGWLCEMagjEHixAMcaBFTwrAbMzhAktQ9R85R-udhmhz4tgbu2DwRlYgmT4jGb4VgV7WF+ByeB0Nv5ORQgjDCADooTynkAz8nIF6zFmLZf8SZ4FFX-IXGEHhAKzASNYA+I90H-yUtdXyUBcEp1BHCeCQwQzzHmBJPiER4iWAhMMYGtkGYMN-gjGWHC3ogKbl2Vufw4wWECGxICxCHDiQqtItB60ZYKkntPTSas8Hz2mIQhmy8nAlyBrZEIdghgDH7s4fRrM0JGJPvLdhZinbMSvjw2+oIyp2NjGZVwWV4FhO-CYdoUQPFrQlsjKWXM2ryN0kEUBHgSGkyGBNDK5g3DCRjMQgRMIklVxSRzaW3NjE4P8cnBRljF7QQlKYVMcY0ydw-txXoSYQ52CqeLLUktObeLlvzTJl9uE3wqoEbiEZ-gUwkmYL64lRKLHwdBZIyQgA */ id: 'projectDetails', initial: 'initialLoading', context: { resultType: undefined, pdvDataSerialized: undefined, errorMessage: undefined, errorsSerialized: undefined, graphBasePath: undefined, pdvDataSerializedMulti: undefined, multiSelectedProject: undefined, }, states: { initialLoading: { entry: ['renderLoading'], invoke: { src: 'loadPDVData', onDone: { actions: ['assignLoadPDVData', 'transitionConditionally'], }, }, }, showingPDV: { entry: 'renderPDV', initial: 'idle', on: { REFRESH: { target: '.refreshing', }, }, states: { idle: {}, refreshing: { invoke: { src: 'loadPDVData', onDone: { actions: [ 'assignLoadPDVData', enqueueActions(({ context, enqueue }) => { if (context.resultType === 'SUCCESS') { enqueue({ type: 'reRenderPDV', params: { pdvData: context.pdvDataSerialized, }, }); } else { enqueue('transitionConditionally'); } }), ], }, }, }, }, }, showingPDVMulti: { entry: 'renderMultiPDV', on: { MULTI_PROJECT_SELECTED: { actions: [ assign(({ context, event }) => ({ ...context, multiSelectedProject: event['project'], })), 'renderMultiPDV', ], }, REFRESH: { target: '.refreshing', }, }, initial: 'idle', states: { idle: {}, refreshing: { invoke: { src: 'loadPDVData', onDone: { actions: [ 'assignLoadPDVData', enqueueActions(({ context, enqueue }) => { if (context.resultType === 'SUCCESS_MULTI') { enqueue({ type: 'reRenderPDV', params: { pdvData: context.multiSelectedProject && context.pdvDataSerializedMulti ? context.pdvDataSerializedMulti[ context.multiSelectedProject ] : undefined, }, }); } else { enqueue('transitionConditionally'); } }), ], }, }, }, }, }, showingError: { entry: 'renderError', on: { REFRESH: { target: '.refreshing', }, }, initial: 'idle', states: { idle: {}, refreshing: { invoke: { src: 'loadPDVData', onDone: { actions: ['assignLoadPDVData', 'transitionConditionally'], }, }, }, }, }, showingNoGraphError: { entry: 'renderNoGraphError', on: { REFRESH: { target: '.refreshing', }, }, initial: 'idle', states: { idle: {}, refreshing: { invoke: { src: 'loadPDVData', onDone: { actions: ['assignLoadPDVData', 'transitionConditionally'], }, }, }, }, }, }, on: { PDV_DATA_LOAD_SUCCESS: { target: '.showingPDV', }, PDV_DATA_LOAD_ERROR: { target: '.showingError', }, PDV_DATA_LOAD_MULTI_SUCCESS: { target: '.showingPDVMulti', }, NO_GRAPH_ERROR: { target: '.showingNoGraphError', }, }, });

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/nrwl/nx-console'

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