Merge remote-tracking branch 'origin/master' into feat/automation-features

This commit is contained in:
Peter Clement 2024-01-04 16:45:26 +00:00
commit 724eacdc72
36 changed files with 976 additions and 169 deletions

View File

@ -38,10 +38,10 @@ jobs:
submodules: ${{ env.IS_OSS_CONTRIBUTOR == 'false' }} submodules: ${{ env.IS_OSS_CONTRIBUTOR == 'false' }}
token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }} token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }}
- name: Use Node.js 18.x - name: Use Node.js 20.x
uses: actions/setup-node@v3 uses: actions/setup-node@v3
with: with:
node-version: 18.x node-version: 20.x
cache: yarn cache: yarn
- run: yarn --frozen-lockfile - run: yarn --frozen-lockfile
- run: yarn lint - run: yarn lint
@ -56,10 +56,10 @@ jobs:
token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }} token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }}
fetch-depth: 0 fetch-depth: 0
- name: Use Node.js 18.x - name: Use Node.js 20.x
uses: actions/setup-node@v3 uses: actions/setup-node@v3
with: with:
node-version: 18.x node-version: 20.x
cache: yarn cache: yarn
- run: yarn --frozen-lockfile - run: yarn --frozen-lockfile
@ -84,7 +84,7 @@ jobs:
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Use Node.js 18.x - name: Use Node.js 20.x
uses: azure/setup-helm@v3 uses: azure/setup-helm@v3
- run: cd charts/budibase && helm lint . - run: cd charts/budibase && helm lint .
@ -98,10 +98,10 @@ jobs:
token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }} token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }}
fetch-depth: 0 fetch-depth: 0
- name: Use Node.js 18.x - name: Use Node.js 20.x
uses: actions/setup-node@v3 uses: actions/setup-node@v3
with: with:
node-version: 18.x node-version: 20.x
cache: yarn cache: yarn
- run: yarn --frozen-lockfile - run: yarn --frozen-lockfile
- name: Test - name: Test
@ -122,10 +122,10 @@ jobs:
token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }} token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }}
fetch-depth: 0 fetch-depth: 0
- name: Use Node.js 18.x - name: Use Node.js 20.x
uses: actions/setup-node@v3 uses: actions/setup-node@v3
with: with:
node-version: 18.x node-version: 20.x
cache: yarn cache: yarn
- run: yarn --frozen-lockfile - run: yarn --frozen-lockfile
- name: Test worker - name: Test worker
@ -146,10 +146,10 @@ jobs:
token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }} token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }}
fetch-depth: 0 fetch-depth: 0
- name: Use Node.js 18.x - name: Use Node.js 20.x
uses: actions/setup-node@v3 uses: actions/setup-node@v3
with: with:
node-version: 18.x node-version: 20.x
cache: yarn cache: yarn
- run: yarn --frozen-lockfile - run: yarn --frozen-lockfile
- name: Test server - name: Test server
@ -171,10 +171,10 @@ jobs:
token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }} token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }}
fetch-depth: 0 fetch-depth: 0
- name: Use Node.js 18.x - name: Use Node.js 20.x
uses: actions/setup-node@v3 uses: actions/setup-node@v3
with: with:
node-version: 18.x node-version: 20.x
cache: yarn cache: yarn
- run: yarn --frozen-lockfile - run: yarn --frozen-lockfile
- name: Test - name: Test
@ -194,10 +194,10 @@ jobs:
submodules: ${{ env.IS_OSS_CONTRIBUTOR == 'false' }} submodules: ${{ env.IS_OSS_CONTRIBUTOR == 'false' }}
token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }} token: ${{ secrets.PERSONAL_ACCESS_TOKEN || github.token }}
- name: Use Node.js 18.x - name: Use Node.js 20.x
uses: actions/setup-node@v3 uses: actions/setup-node@v3
with: with:
node-version: 18.x node-version: 20.x
cache: yarn cache: yarn
- run: yarn --frozen-lockfile - run: yarn --frozen-lockfile
- name: Build packages - name: Build packages

2
.nvmrc
View File

@ -1 +1 @@
v18.17.0 v20.10.0

View File

@ -1,3 +1,3 @@
nodejs 18.17.0 nodejs 20.10.0
python 3.10.0 python 3.10.0
yarn 1.22.19 yarn 1.22.19

View File

@ -252,4 +252,10 @@ spec:
{{ end }} {{ end }}
restartPolicy: Always restartPolicy: Always
serviceAccountName: "" serviceAccountName: ""
{{ if .Values.services.apps.ndots }}
dnsConfig:
options:
- name: ndots
value: {{ .Values.services.apps.ndots | quote }}
{{ end }}
status: {} status: {}

View File

@ -227,6 +227,7 @@ spec:
resources: resources:
{{- toYaml . | nindent 10 }} {{- toYaml . | nindent 10 }}
{{ end }} {{ end }}
{{ if .Values.services.automationWorkers.command }}
command: command:
{{- toYaml .Values.services.automationWorkers.command | nindent 10 }} {{- toYaml .Values.services.automationWorkers.command | nindent 10 }}
{{ end }} {{ end }}
@ -251,6 +252,11 @@ spec:
{{ end }} {{ end }}
restartPolicy: Always restartPolicy: Always
serviceAccountName: "" serviceAccountName: ""
{{ if .Values.services.automationWorkers.command }}} {{ if .Values.services.automationWorkers.ndots }}
dnsConfig:
options:
- name: ndots
value: {{ .Values.services.automationWorkers.ndots | quote }}
{{ end }}
status: {} status: {}
{{- end }} {{- end }}

View File

@ -109,4 +109,10 @@ spec:
{{- toYaml .Values.services.proxy.args | nindent 8 }} {{- toYaml .Values.services.proxy.args | nindent 8 }}
{{ end }} {{ end }}
volumes: volumes:
{{ if .Values.services.proxy.ndots }}
dnsConfig:
options:
- name: ndots
value: {{ .Values.services.proxy.ndots | quote }}
{{ end }}
status: {} status: {}

View File

@ -238,4 +238,10 @@ spec:
{{ end }} {{ end }}
restartPolicy: Always restartPolicy: Always
serviceAccountName: "" serviceAccountName: ""
{{ if .Values.services.worker.ndots }}
dnsConfig:
options:
- name: ndots
value: {{ .Values.services.worker.ndots | quote }}
{{ end }}
status: {} status: {}

View File

@ -90,7 +90,7 @@ Component libraries are collections of components as well as the definition of t
#### 1. Prerequisites #### 1. Prerequisites
- NodeJS version `18.x.x` - NodeJS version `20.x.x`
- Python version `3.x` - Python version `3.x`
### Using asdf (recommended) ### Using asdf (recommended)

View File

@ -1,4 +1,4 @@
FROM node:18-slim as build FROM node:20-slim as build
# install node-gyp dependencies # install node-gyp dependencies
RUN apt-get update && apt-get install -y --no-install-recommends g++ make python3 jq RUN apt-get update && apt-get install -y --no-install-recommends g++ make python3 jq
@ -42,7 +42,7 @@ COPY packages/string-templates packages/string-templates
FROM budibase/couchdb as runner FROM budibase/couchdb as runner
ARG TARGETARCH ARG TARGETARCH
ENV TARGETARCH $TARGETARCH ENV TARGETARCH $TARGETARCH
ENV NODE_MAJOR 18 ENV NODE_MAJOR 20
#TARGETBUILD can be set to single (for single docker image) or aas (for azure app service) #TARGETBUILD can be set to single (for single docker image) or aas (for azure app service)
# e.g. docker build --build-arg TARGETBUILD=aas .... # e.g. docker build --build-arg TARGETBUILD=aas ....
ARG TARGETBUILD=single ARG TARGETBUILD=single

View File

@ -1,5 +1,5 @@
{ {
"version": "2.13.52", "version": "2.14.2",
"npmClient": "yarn", "npmClient": "yarn",
"packages": [ "packages": [
"packages/*", "packages/*",

View File

@ -6,6 +6,7 @@
"@babel/eslint-parser": "^7.22.5", "@babel/eslint-parser": "^7.22.5",
"@babel/preset-env": "^7.22.5", "@babel/preset-env": "^7.22.5",
"@esbuild-plugins/tsconfig-paths": "^0.1.2", "@esbuild-plugins/tsconfig-paths": "^0.1.2",
"@types/node": "20.10.0",
"@typescript-eslint/parser": "6.9.0", "@typescript-eslint/parser": "6.9.0",
"esbuild": "^0.18.17", "esbuild": "^0.18.17",
"esbuild-node-externals": "^1.8.0", "esbuild-node-externals": "^1.8.0",
@ -99,7 +100,7 @@
"@budibase/types": "0.0.0" "@budibase/types": "0.0.0"
}, },
"engines": { "engines": {
"node": ">=18.0.0 <19.0.0" "node": ">=20.0.0 <21.0.0"
}, },
"dependencies": {} "dependencies": {}
} }

@ -1 +1 @@
Subproject commit aca3c9b6b5170d35a255ceb89e57a21719f5ed29 Subproject commit b11e6b47370d9b77c63648b45929c86bfed6360c

View File

@ -65,7 +65,6 @@
"@types/cookies": "0.7.8", "@types/cookies": "0.7.8",
"@types/jest": "29.5.5", "@types/jest": "29.5.5",
"@types/lodash": "4.14.200", "@types/lodash": "4.14.200",
"@types/node": "18.17.0",
"@types/node-fetch": "2.6.4", "@types/node-fetch": "2.6.4",
"@types/pouchdb": "6.4.0", "@types/pouchdb": "6.4.0",
"@types/redlock": "4.0.3", "@types/redlock": "4.0.3",

View File

@ -134,7 +134,7 @@ export async function doInContext(appId: string, task: any): Promise<any> {
} }
export async function doInTenant<T>( export async function doInTenant<T>(
tenantId: string | null, tenantId: string | undefined,
task: () => T task: () => T
): Promise<T> { ): Promise<T> {
// make sure default always selected in single tenancy // make sure default always selected in single tenancy

View File

@ -39,7 +39,7 @@ const ALL_STRATEGIES = Object.values(TenantResolutionStrategy)
export const getTenantIDFromCtx = ( export const getTenantIDFromCtx = (
ctx: BBContext, ctx: BBContext,
opts: GetTenantIdOptions opts: GetTenantIdOptions
): string | null => { ): string | undefined => {
// exit early if not multi-tenant // exit early if not multi-tenant
if (!isMultiTenant()) { if (!isMultiTenant()) {
return DEFAULT_TENANT_ID return DEFAULT_TENANT_ID
@ -144,5 +144,5 @@ export const getTenantIDFromCtx = (
ctx.throw(403, "Tenant id not set") ctx.throw(403, "Tenant id not set")
} }
return null return undefined
} }

View File

@ -157,12 +157,12 @@ describe("getTenantIDFromCtx", () => {
TenantResolutionStrategy.PATH, TenantResolutionStrategy.PATH,
], ],
} }
expect(getTenantIDFromCtx(ctx, mockOpts)).toBeNull() expect(getTenantIDFromCtx(ctx, mockOpts)).toBeUndefined()
expect(ctx.throw).toBeCalledTimes(1) expect(ctx.throw).toBeCalledTimes(1)
expect(ctx.throw).toBeCalledWith(403, "Tenant id not set") expect(ctx.throw).toBeCalledWith(403, "Tenant id not set")
}) })
it("returns null if allowNoTenant is true", () => { it("returns undefined if allowNoTenant is true", () => {
const ctx = createCtx({}) const ctx = createCtx({})
mockOpts = { mockOpts = {
allowNoTenant: true, allowNoTenant: true,
@ -172,7 +172,7 @@ describe("getTenantIDFromCtx", () => {
TenantResolutionStrategy.PATH, TenantResolutionStrategy.PATH,
], ],
} }
expect(getTenantIDFromCtx(ctx, mockOpts)).toBeNull() expect(getTenantIDFromCtx(ctx, mockOpts)).toBeUndefined()
}) })
}) })

View File

@ -50,7 +50,7 @@ export class ExecutionTimeTracker {
return this.totalTimeMs return this.totalTimeMs
} }
private checkLimit() { checkLimit() {
if (this.totalTimeMs > this.limitMs) { if (this.totalTimeMs > this.limitMs) {
throw new ExecutionTimeoutError( throw new ExecutionTimeoutError(
`Execution time limit of ${this.limitMs}ms exceeded: ${this.totalTimeMs}ms` `Execution time limit of ${this.limitMs}ms exceeded: ${this.totalTimeMs}ms`

View File

@ -31,8 +31,8 @@ export async function resolveAppUrl(ctx: Ctx) {
const appUrl = ctx.path.split("/")[2] const appUrl = ctx.path.split("/")[2]
let possibleAppUrl = `/${appUrl.toLowerCase()}` let possibleAppUrl = `/${appUrl.toLowerCase()}`
let tenantId: string | null = context.getTenantId() let tenantId: string | undefined = context.getTenantId()
if (env.MULTI_TENANCY) { if (!env.isDev() && env.MULTI_TENANCY) {
// always use the tenant id from the subdomain in multi tenancy // always use the tenant id from the subdomain in multi tenancy
// this ensures the logged-in user tenant id doesn't overwrite // this ensures the logged-in user tenant id doesn't overwrite
// e.g. in the case of viewing a public app while already logged-in to another tenant // e.g. in the case of viewing a public app while already logged-in to another tenant
@ -41,7 +41,7 @@ export async function resolveAppUrl(ctx: Ctx) {
}) })
} }
// search prod apps for a url that matches // search prod apps for an url that matches
const apps: App[] = await context.doInTenant( const apps: App[] = await context.doInTenant(
tenantId, tenantId,
() => getAllApps({ dev: false }) as Promise<App[]> () => getAllApps({ dev: false }) as Promise<App[]>

View File

@ -53,6 +53,7 @@
export let value = "" export let value = ""
export let placeholder = null export let placeholder = null
export let autocompleteEnabled = true export let autocompleteEnabled = true
export let autofocus = false
// Export a function to expose caret position // Export a function to expose caret position
export const getCaretPosition = () => { export const getCaretPosition = () => {
@ -241,6 +242,12 @@
}) })
} }
$: {
if (autofocus && isEditorInitialised) {
editor.focus()
}
}
$: editorHeight = typeof height === "number" ? `${height}px` : height $: editorHeight = typeof height === "number" ? `${height}px` : height
// Init when all elements are ready // Init when all elements are ready

View File

@ -45,6 +45,7 @@
export let valid export let valid
export let allowJS = false export let allowJS = false
export let allowHelpers = true export let allowHelpers = true
export let autofocusEditor = false
const drawerActions = getContext("drawer-actions") const drawerActions = getContext("drawer-actions")
const bindingDrawerActions = getContext("binding-drawer-actions") const bindingDrawerActions = getContext("binding-drawer-actions")
@ -199,6 +200,7 @@
]} ]}
placeholder="" placeholder=""
height="100%" height="100%"
autofocus={autofocusEditor}
/> />
</div> </div>
<div class="binding-footer"> <div class="binding-footer">
@ -301,6 +303,7 @@
bind:getCaretPosition bind:getCaretPosition
bind:insertAtPos bind:insertAtPos
height="100%" height="100%"
autofocus={autofocusEditor}
/> />
</div> </div>
<div class="binding-footer"> <div class="binding-footer">

View File

@ -6,6 +6,7 @@
export let value = "" export let value = ""
export let allowJS = false export let allowJS = false
export let allowHelpers = true export let allowHelpers = true
export let autofocusEditor = false
$: enrichedBindings = enrichBindings(bindings) $: enrichedBindings = enrichBindings(bindings)
@ -27,5 +28,6 @@
{value} {value}
{allowJS} {allowJS}
{allowHelpers} {allowHelpers}
{autofocusEditor}
on:change on:change
/> />

View File

@ -44,7 +44,11 @@
}) })
const onChange = value => { const onChange = value => {
if (type === "link" && value && hasValidLinks(value)) { if (
(type === "link" || type === "bb_reference") &&
value &&
hasValidLinks(value)
) {
currentVal = value.split(",") currentVal = value.split(",")
} else if (type === "array" && value && hasValidOptions(value)) { } else if (type === "array" && value && hasValidOptions(value)) {
currentVal = value.split(",") currentVal = value.split(",")
@ -95,6 +99,7 @@
date: isValidDate, date: isValidDate,
datetime: isValidDate, datetime: isValidDate,
link: hasValidLinks, link: hasValidLinks,
bb_reference: hasValidLinks,
array: hasValidOptions, array: hasValidOptions,
longform: value => !isJSBinding(value), longform: value => !isJSBinding(value),
json: value => !isJSBinding(value), json: value => !isJSBinding(value),

View File

@ -41,7 +41,7 @@
<div class="filter-editor"> <div class="filter-editor">
<ActionButton on:click={drawer.show}>{text}</ActionButton> <ActionButton on:click={drawer.show}>{text}</ActionButton>
</div> </div>
<Drawer bind:this={drawer} title="Filtering"> <Drawer bind:this={drawer} title="Filtering" on:drawerHide on:drawerShow>
<Button cta slot="buttons" on:click={saveFilter}>Save</Button> <Button cta slot="buttons" on:click={saveFilter}>Save</Button>
<FilterDrawer <FilterDrawer
slot="body" slot="body"

View File

@ -25,7 +25,6 @@
</script> </script>
<div class="options-wrap"> <div class="options-wrap">
<div />
<div><ActionButton on:click={drawer.show}>Define Options</ActionButton></div> <div><ActionButton on:click={drawer.show}>Define Options</ActionButton></div>
</div> </div>
<Drawer bind:this={drawer} title="Options" on:drawerHide on:drawerShow> <Drawer bind:this={drawer} title="Options" on:drawerHide on:drawerShow>

View File

@ -32,4 +32,4 @@
$: schema = linkedTable?.schema $: schema = linkedTable?.schema
</script> </script>
<FilterEditor on:change {...$$props} {schema} /> <FilterEditor on:change {...$$props} {schema} on:drawerHide on:drawerShow />

View File

@ -64,6 +64,7 @@
on:change={event => (tempValue = event.detail)} on:change={event => (tempValue = event.detail)}
allowJS allowJS
{bindings} {bindings}
autofocusEditor={true}
/> />
</Drawer> </Drawer>
{/key} {/key}

View File

@ -3295,6 +3295,7 @@
}, },
{ {
"type": "options", "type": "options",
"label": "Custom options",
"key": "customOptions", "key": "customOptions",
"dependsOn": { "dependsOn": {
"setting": "optionsSource", "setting": "optionsSource",
@ -3502,6 +3503,7 @@
}, },
{ {
"type": "options", "type": "options",
"label": "Custom options",
"key": "customOptions", "key": "customOptions",
"dependsOn": { "dependsOn": {
"setting": "optionsSource", "setting": "optionsSource",

View File

@ -1,4 +1,4 @@
FROM node:18-slim FROM node:20-slim
LABEL com.centurylinklabs.watchtower.lifecycle.pre-check="scripts/watchtower-hooks/pre-check.sh" LABEL com.centurylinklabs.watchtower.lifecycle.pre-check="scripts/watchtower-hooks/pre-check.sh"
LABEL com.centurylinklabs.watchtower.lifecycle.pre-update="scripts/watchtower-hooks/pre-update.sh" LABEL com.centurylinklabs.watchtower.lifecycle.pre-update="scripts/watchtower-hooks/pre-update.sh"

View File

@ -86,7 +86,7 @@
"lodash": "4.17.21", "lodash": "4.17.21",
"memorystream": "0.3.1", "memorystream": "0.3.1",
"mongodb": "5.7", "mongodb": "5.7",
"mssql": "9.1.1", "mssql": "10.0.1",
"mysql2": "3.5.2", "mysql2": "3.5.2",
"node-fetch": "2.6.7", "node-fetch": "2.6.7",
"object-sizeof": "2.6.1", "object-sizeof": "2.6.1",
@ -121,8 +121,7 @@
"@types/koa": "2.13.4", "@types/koa": "2.13.4",
"@types/koa__router": "8.0.8", "@types/koa__router": "8.0.8",
"@types/lodash": "4.14.200", "@types/lodash": "4.14.200",
"@types/mssql": "8.1.2", "@types/mssql": "9.1.4",
"@types/node": "18.17.0",
"@types/node-fetch": "2.6.4", "@types/node-fetch": "2.6.4",
"@types/oracledb": "5.2.2", "@types/oracledb": "5.2.2",
"@types/pg": "8.6.6", "@types/pg": "8.6.6",

View File

@ -305,8 +305,8 @@ export function shouldCopySpecialColumn(
} }
/** /**
* Looks for columns which need to be copied over into the new table definitions, like relationships * Looks for columns which need to be copied over into the new table definitions, like relationships,
* and options types. * options types and views.
* @param tableName The name of the table which is being checked. * @param tableName The name of the table which is being checked.
* @param table The specific table which is being checked. * @param table The specific table which is being checked.
* @param entities All the tables that existed before - the old table definitions. * @param entities All the tables that existed before - the old table definitions.
@ -325,6 +325,9 @@ function copyExistingPropsOver(
if (entities[tableName]?.created) { if (entities[tableName]?.created) {
table.created = entities[tableName]?.created table.created = entities[tableName]?.created
} }
table.views = entities[tableName].views
const existingTableSchema = entities[tableName].schema const existingTableSchema = entities[tableName].schema
for (let key in existingTableSchema) { for (let key in existingTableSchema) {
if (!existingTableSchema.hasOwnProperty(key)) { if (!existingTableSchema.hasOwnProperty(key)) {

View File

@ -18,13 +18,16 @@ export function init() {
bbCtx.jsExecutionTracker = bbCtx.jsExecutionTracker =
timers.ExecutionTimeTracker.withLimit(perRequestLimit) timers.ExecutionTimeTracker.withLimit(perRequestLimit)
} }
track = bbCtx.jsExecutionTracker.track.bind(bbCtx.jsExecutionTracker)
span?.addTags({ span?.addTags({
js: { js: {
limitMS: bbCtx.jsExecutionTracker.limitMs, limitMS: bbCtx.jsExecutionTracker.limitMs,
elapsedMS: bbCtx.jsExecutionTracker.elapsedMS, elapsedMS: bbCtx.jsExecutionTracker.elapsedMS,
}, },
}) })
// We call checkLimit() here to prevent paying the cost of creating
// a new VM context below when we don't need to.
bbCtx.jsExecutionTracker.checkLimit()
track = bbCtx.jsExecutionTracker.track.bind(bbCtx.jsExecutionTracker)
} }
} }

View File

@ -17,7 +17,6 @@
"devDependencies": { "devDependencies": {
"@budibase/nano": "10.1.4", "@budibase/nano": "10.1.4",
"@types/koa": "2.13.4", "@types/koa": "2.13.4",
"@types/node": "18.17.0",
"@types/pouchdb": "6.4.0", "@types/pouchdb": "6.4.0",
"@types/redlock": "4.0.3", "@types/redlock": "4.0.3",
"rimraf": "3.0.2", "rimraf": "3.0.2",

View File

@ -1,4 +1,4 @@
FROM node:18-alpine FROM node:20-alpine
LABEL com.centurylinklabs.watchtower.lifecycle.pre-check="scripts/watchtower-hooks/pre-check.sh" LABEL com.centurylinklabs.watchtower.lifecycle.pre-check="scripts/watchtower-hooks/pre-check.sh"
LABEL com.centurylinklabs.watchtower.lifecycle.pre-update="scripts/watchtower-hooks/pre-update.sh" LABEL com.centurylinklabs.watchtower.lifecycle.pre-update="scripts/watchtower-hooks/pre-update.sh"

View File

@ -79,7 +79,6 @@
"@types/koa": "2.13.4", "@types/koa": "2.13.4",
"@types/koa__router": "8.0.8", "@types/koa__router": "8.0.8",
"@types/lodash": "4.14.200", "@types/lodash": "4.14.200",
"@types/node": "18.17.0",
"@types/node-fetch": "2.6.4", "@types/node-fetch": "2.6.4",
"@types/server-destroy": "1.0.1", "@types/server-destroy": "1.0.1",
"@types/supertest": "2.0.14", "@types/supertest": "2.0.14",

View File

@ -4,6 +4,9 @@
"composite": true, "composite": true,
"baseUrl": "." "baseUrl": "."
}, },
"ts-node": {
"require": ["tsconfig-paths/register"]
},
"include": ["src/**/*", "__mocks__/**/*"], "include": ["src/**/*", "__mocks__/**/*"],
"exclude": ["node_modules", "dist"] "exclude": ["node_modules", "dist"]
} }

998
yarn.lock

File diff suppressed because it is too large Load Diff