Merge branch 'master' of github.com:budibase/budibase into execute-script-v2
This commit is contained in:
commit
94f4b8c43e
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
|
||||
"version": "3.2.41",
|
||||
"version": "3.2.44",
|
||||
"npmClient": "yarn",
|
||||
"concurrency": 20,
|
||||
"command": {
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
"scripts": {
|
||||
"prebuild": "rimraf dist/",
|
||||
"prepack": "cp package.json dist",
|
||||
"build": "node ./scripts/build.js && tsc -p tsconfig.build.json --emitDeclarationOnly --paths null",
|
||||
"build": "node ./scripts/build.js && tsc -p tsconfig.build.json --emitDeclarationOnly --paths null && tsc -p tsconfig.test.json --paths null",
|
||||
"build:dev": "yarn prebuild && tsc --build --watch --preserveWatchOutput",
|
||||
"build:oss": "node ./scripts/build.js",
|
||||
"check:types": "tsc -p tsconfig.json --noEmit --paths null",
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"extends": "../../tsconfig.build.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "dist",
|
||||
"sourceMap": true
|
||||
},
|
||||
"include": ["tests/**/*.js", "tests/**/*.ts"],
|
||||
"exclude": ["node_modules", "dist"]
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
import { writable } from "svelte/store"
|
||||
import { API } from "@/api"
|
||||
|
||||
export function createPermissionStore() {
|
||||
const { subscribe } = writable([])
|
||||
|
||||
return {
|
||||
subscribe,
|
||||
save: async ({ level, role, resource }) => {
|
||||
return await API.updatePermissionForResource(resource, role, level)
|
||||
},
|
||||
remove: async ({ level, role, resource }) => {
|
||||
return await API.removePermissionFromResource(resource, role, level)
|
||||
},
|
||||
forResource: async resourceId => {
|
||||
return (await API.getPermissionForResource(resourceId)).permissions
|
||||
},
|
||||
forResourceDetailed: async resourceId => {
|
||||
return await API.getPermissionForResource(resourceId)
|
||||
},
|
||||
getDependantsInfo: async resourceId => {
|
||||
return await API.getDependants(resourceId)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
export const permissions = createPermissionStore()
|
|
@ -0,0 +1,50 @@
|
|||
import { BudiStore } from "../BudiStore"
|
||||
import { API } from "@/api"
|
||||
import {
|
||||
PermissionLevel,
|
||||
GetResourcePermsResponse,
|
||||
GetDependantResourcesResponse,
|
||||
ResourcePermissionInfo,
|
||||
} from "@budibase/types"
|
||||
|
||||
interface Permission {
|
||||
level: PermissionLevel
|
||||
role: string
|
||||
resource: string
|
||||
}
|
||||
|
||||
export class PermissionStore extends BudiStore<Permission[]> {
|
||||
constructor() {
|
||||
super([])
|
||||
}
|
||||
|
||||
save = async (permission: Permission) => {
|
||||
const { level, role, resource } = permission
|
||||
return await API.updatePermissionForResource(resource, role, level)
|
||||
}
|
||||
|
||||
remove = async (permission: Permission) => {
|
||||
const { level, role, resource } = permission
|
||||
return await API.removePermissionFromResource(resource, role, level)
|
||||
}
|
||||
|
||||
forResource = async (
|
||||
resourceId: string
|
||||
): Promise<Record<string, ResourcePermissionInfo>> => {
|
||||
return (await API.getPermissionForResource(resourceId)).permissions
|
||||
}
|
||||
|
||||
forResourceDetailed = async (
|
||||
resourceId: string
|
||||
): Promise<GetResourcePermsResponse> => {
|
||||
return await API.getPermissionForResource(resourceId)
|
||||
}
|
||||
|
||||
getDependantsInfo = async (
|
||||
resourceId: string
|
||||
): Promise<GetDependantResourcesResponse> => {
|
||||
return await API.getDependants(resourceId)
|
||||
}
|
||||
}
|
||||
|
||||
export const permissions = new PermissionStore()
|
|
@ -1,67 +0,0 @@
|
|||
import { writable, derived } from "svelte/store"
|
||||
import { tables } from "./tables"
|
||||
import { API } from "@/api"
|
||||
|
||||
export function createViewsStore() {
|
||||
const store = writable({
|
||||
selectedViewName: null,
|
||||
})
|
||||
const derivedStore = derived([store, tables], ([$store, $tables]) => {
|
||||
let list = []
|
||||
$tables.list?.forEach(table => {
|
||||
const views = Object.values(table?.views || {}).filter(view => {
|
||||
return view.version !== 2
|
||||
})
|
||||
list = list.concat(views)
|
||||
})
|
||||
return {
|
||||
...$store,
|
||||
list,
|
||||
selected: list.find(view => view.name === $store.selectedViewName),
|
||||
}
|
||||
})
|
||||
|
||||
const select = name => {
|
||||
store.update(state => ({
|
||||
...state,
|
||||
selectedViewName: name,
|
||||
}))
|
||||
}
|
||||
|
||||
const deleteView = async view => {
|
||||
await API.deleteView(view.name)
|
||||
|
||||
// Update tables
|
||||
tables.update(state => {
|
||||
const table = state.list.find(table => table._id === view.tableId)
|
||||
delete table.views[view.name]
|
||||
return { ...state }
|
||||
})
|
||||
}
|
||||
|
||||
const save = async view => {
|
||||
const savedView = await API.saveView(view)
|
||||
select(view.name)
|
||||
|
||||
// Update tables
|
||||
tables.update(state => {
|
||||
const table = state.list.find(table => table._id === view.tableId)
|
||||
if (table) {
|
||||
if (view.originalName) {
|
||||
delete table.views[view.originalName]
|
||||
}
|
||||
table.views[view.name] = savedView
|
||||
}
|
||||
return { ...state }
|
||||
})
|
||||
}
|
||||
|
||||
return {
|
||||
subscribe: derivedStore.subscribe,
|
||||
select,
|
||||
delete: deleteView,
|
||||
save,
|
||||
}
|
||||
}
|
||||
|
||||
export const views = createViewsStore()
|
|
@ -0,0 +1,94 @@
|
|||
import { DerivedBudiStore } from "../BudiStore"
|
||||
import { tables } from "./tables"
|
||||
import { API } from "@/api"
|
||||
import { View } from "@budibase/types"
|
||||
import { helpers } from "@budibase/shared-core"
|
||||
import { derived, Writable } from "svelte/store"
|
||||
|
||||
interface BuilderViewStore {
|
||||
selectedViewName: string | null
|
||||
}
|
||||
|
||||
interface DerivedViewStore extends BuilderViewStore {
|
||||
list: View[]
|
||||
selected?: View
|
||||
}
|
||||
|
||||
export class ViewsStore extends DerivedBudiStore<
|
||||
BuilderViewStore,
|
||||
DerivedViewStore
|
||||
> {
|
||||
constructor() {
|
||||
const makeDerivedStore = (store: Writable<BuilderViewStore>) => {
|
||||
return derived([store, tables], ([$store, $tables]): DerivedViewStore => {
|
||||
let list: View[] = []
|
||||
$tables.list?.forEach(table => {
|
||||
const views = Object.values(table?.views || {}).filter(
|
||||
(view): view is View => !helpers.views.isV2(view)
|
||||
)
|
||||
list = list.concat(views)
|
||||
})
|
||||
return {
|
||||
selectedViewName: $store.selectedViewName,
|
||||
list,
|
||||
selected: list.find(view => view.name === $store.selectedViewName),
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
super(
|
||||
{
|
||||
selectedViewName: null,
|
||||
},
|
||||
makeDerivedStore
|
||||
)
|
||||
|
||||
this.select = this.select.bind(this)
|
||||
}
|
||||
|
||||
select = (name: string) => {
|
||||
this.store.update(state => ({
|
||||
...state,
|
||||
selectedViewName: name,
|
||||
}))
|
||||
}
|
||||
|
||||
delete = async (view: View) => {
|
||||
if (!view.name) {
|
||||
throw new Error("View name is required")
|
||||
}
|
||||
await API.deleteView(view.name)
|
||||
|
||||
// Update tables
|
||||
tables.update(state => {
|
||||
const table = state.list.find(table => table._id === view.tableId)
|
||||
if (table?.views && view.name) {
|
||||
delete table.views[view.name]
|
||||
}
|
||||
return { ...state }
|
||||
})
|
||||
}
|
||||
|
||||
save = async (view: View & { originalName?: string }) => {
|
||||
if (!view.name) {
|
||||
throw new Error("View name is required")
|
||||
}
|
||||
|
||||
const savedView = await API.saveView(view)
|
||||
this.select(view.name)
|
||||
|
||||
// Update tables
|
||||
tables.update(state => {
|
||||
const table = state.list.find(table => table._id === view.tableId)
|
||||
if (table?.views && view.name) {
|
||||
if (view.originalName) {
|
||||
delete table.views[view.originalName]
|
||||
}
|
||||
table.views[view.name] = savedView
|
||||
}
|
||||
return { ...state }
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export const views = new ViewsStore()
|
|
@ -1 +1 @@
|
|||
Subproject commit 193476cdfade6d3c613e6972f16ee0c527e01ff6
|
||||
Subproject commit 43a5785ccb4f83ce929b29f05ea0a62199fcdf23
|
|
@ -46,7 +46,10 @@ const svelteCompilePlugin = {
|
|||
let { argv } = require("yargs")
|
||||
|
||||
async function runBuild(entry, outfile) {
|
||||
const isDev = process.env.NODE_ENV !== "production"
|
||||
const isDev = !process.env.CI
|
||||
|
||||
console.log(`Building in mode dev mode: ${isDev}`)
|
||||
|
||||
const tsconfig = argv["p"] || `tsconfig.build.json`
|
||||
|
||||
const { data: tsconfigPathPluginContent } = loadTsConfig(
|
||||
|
@ -58,7 +61,7 @@ async function runBuild(entry, outfile) {
|
|||
entryPoints: [entry],
|
||||
bundle: true,
|
||||
minify: !isDev,
|
||||
sourcemap: isDev,
|
||||
sourcemap: tsconfigPathPluginContent.compilerOptions.sourceMap,
|
||||
tsconfig,
|
||||
plugins: [
|
||||
svelteCompilePlugin,
|
||||
|
@ -125,10 +128,12 @@ async function runBuild(entry, outfile) {
|
|||
|
||||
await Promise.all([hbsFiles, mainBuild, oldClientVersions])
|
||||
|
||||
fs.writeFileSync(
|
||||
`dist/${path.basename(outfile)}.meta.json`,
|
||||
JSON.stringify((await mainBuild).metafile)
|
||||
)
|
||||
if (isDev) {
|
||||
fs.writeFileSync(
|
||||
`dist/${path.basename(outfile)}.meta.json`,
|
||||
JSON.stringify((await mainBuild).metafile)
|
||||
)
|
||||
}
|
||||
|
||||
console.log(
|
||||
"\x1b[32m%s\x1b[0m",
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
"declaration": true,
|
||||
"isolatedModules": true,
|
||||
"baseUrl": ".",
|
||||
"sourceMap": true,
|
||||
"paths": {
|
||||
"@budibase/types": ["./packages/types/src"],
|
||||
"@budibase/backend-core": ["./packages/backend-core/src"],
|
||||
|
|
Loading…
Reference in New Issue