forked from microsoft/pxt
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmemoryworkspace.ts
More file actions
59 lines (50 loc) · 1.34 KB
/
memoryworkspace.ts
File metadata and controls
59 lines (50 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
type Header = pxt.workspace.Header;
type Project = pxt.workspace.Project;
type ScriptText = pxt.workspace.ScriptText;
type WorkspaceProvider = pxt.workspace.WorkspaceProvider;
import U = pxt.Util;
export let projects: pxt.Map<Project> = {};
export function merge(prj: Project) {
let h: Header = prj.header;
if (!h) {
prj.header = h = pxt.workspace.freshHeader(lf("Untitled"), U.nowSeconds())
if (prj.text && prj.text["main.blocks"]) {
prj.header.editor = pxt.BLOCKS_PROJECT_NAME;
}
}
projects[prj.header.id] = prj;
}
function listAsync() {
return Promise.resolve(U.values(projects).map(p => p.header))
}
function getAsync(h: Header): Promise<pxt.workspace.File> {
let p = projects[h.id];
return Promise.resolve({
header: h,
text: p ? p.text : {},
version: null,
})
}
function setAsync(h: Header, prevVer: any, text?: ScriptText) {
if (text)
projects[h.id] = {
header: h,
text: text
}
return Promise.resolve()
}
function deleteAsync(h: Header, prevVer: any) {
delete projects[h.id]
return Promise.resolve()
}
function resetAsync(): Promise<void> {
projects = {}
return Promise.resolve();
}
export const provider: WorkspaceProvider = {
getAsync,
setAsync,
deleteAsync,
listAsync,
resetAsync,
}