Skip to content

Instantly share code, notes, and snippets.

@SuperOleg39
Created July 31, 2020 12:35
Show Gist options
  • Select an option

  • Save SuperOleg39/f1de9c1b028e5f78a4868d3b7297e712 to your computer and use it in GitHub Desktop.

Select an option

Save SuperOleg39/f1de9c1b028e5f78a4868d3b7297e712 to your computer and use it in GitHub Desktop.
import { commandLineListTokens } from '@tramvai/core'
import { createToken } from 'dippy'
import {
ENV_MANAGER_TOKEN,
LOGGER_TOKEN,
ENV_USED_TOKEN,
} from '@tramvai/tokens-common'
import jsonServer from 'json-server'
import httpProxy from 'http-proxy'
import { WEB_APP_INIT_TOKEN } from '@tramvai/module-server'
const MOCK_SERVER_ENDPOINT_TOKEN = createToken<string>('mockServerEndpoint')
const MOCK_SERVER_SOURCE_TOKEN = createToken<string | Record<string, any>>(
'mockServerSource'
)
export default [
{
provide: ENV_USED_TOKEN,
multi: true,
useValue: [
{
key: 'MOCK_SERVER_PROXY_API',
optional: true,
dehydrate: false,
},
],
},
{
provide: MOCK_SERVER_ENDPOINT_TOKEN,
useValue: '/mock-api',
},
{
provide: MOCK_SERVER_SOURCE_TOKEN,
useValue: {
'resources?name=modules': {
result: {
type: 'json',
value: {
defaultPath: 'static2-qa.tcsbank.ru/platform/modules/',
board: {
latest: '1.13.1-prerelease-4',
beta: '1.16.0-prerelease-13',
},
header: { latest: '1.22.0', beta: '1.21.0' },
footer: { latest: '1.8.0', beta: '1.8.0-prerelease-1' },
'popup-offer': { latest: '1.8.3', beta: '1.8.3' },
feedback: { latest: '1.9.0-prerelease-2' },
mFooter: { latest: '3.0.0' },
mobileHeader: { latest: '1.2.2' },
sso: { latest: '1.2.0' },
'smart-app-banner': { latest: '3.2.0' },
test: { latest: '0.0.0', beta: '0.0.0' },
confirmation: { latest: '0.0.1' },
'entertainments-second-header': { latest: '1.2.0', beta: '1.1.0' },
},
},
},
},
},
{
provide: WEB_APP_INIT_TOKEN,
multi: true,
useFactory: ({
logger,
envManager,
mockServerEndpoint,
mockServerSource,
}: {
logger: typeof LOGGER_TOKEN
envManager: typeof ENV_MANAGER_TOKEN
mockServerEndpoint: typeof MOCK_SERVER_ENDPOINT_TOKEN
mockServerSource: typeof MOCK_SERVER_SOURCE_TOKEN
}) => {
const log = logger('mock-server')
const proxyApi = envManager.get('MOCK_SERVER_PROXY_API')
const router = jsonServer.router(mockServerSource)
const proxy = httpProxy.createProxyServer({
changeOrigin: true,
target: proxyApi,
})
;(router as any).render = (req, res) => {
if (res.statusCode === 404) {
res.status(200)
proxy.web(req, res)
} else {
res.jsonp(res.locals.data)
}
}
return (app) => {
app.use(mockServerEndpoint, router)
}
},
deps: {
logger: LOGGER_TOKEN,
envManager: ENV_MANAGER_TOKEN,
mockServerEndpoint: MOCK_SERVER_ENDPOINT_TOKEN,
mockServerSource: MOCK_SERVER_SOURCE_TOKEN,
},
},
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment