forked from microsoft/pxt
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathworkspace.ts
More file actions
64 lines (54 loc) · 1.92 KB
/
workspace.ts
File metadata and controls
64 lines (54 loc) · 1.92 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
60
61
62
63
64
/// <reference path="../built/pxtlib.d.ts"/>
namespace pxt.workspace {
export type ScriptText = pxt.Map<string>;
export interface Project {
header?: Header;
text?: ScriptText;
}
export interface Asset {
name: string;
size: number;
url: string;
}
export type Version = any;
export interface File {
header: Header;
text: ScriptText;
version: Version;
}
export interface WorkspaceProvider {
listAsync(): Promise<Header[]>; // called from workspace.syncAsync (including upon startup)
getAsync(h: Header): Promise<File>;
setAsync(h: Header, prevVersion: Version, text?: ScriptText): Promise<Version>;
deleteAsync?: (h: Header, prevVersion: Version) => Promise<void>;
resetAsync(): Promise<void>;
loadedAsync?: () => Promise<void>;
getSyncState?: () => pxt.editor.EditorSyncState;
// optional screenshot support
saveScreenshotAsync?: (h: Header, screenshot: string, icon: string) => Promise<void>;
// optional asset (large binary file) support
saveAssetAsync?: (id: string, filename: string, data: Uint8Array) => Promise<void>;
listAssetsAsync?: (id: string) => Promise<Asset[]>;
fireEvent?: (ev: pxt.editor.events.Event) => void;
}
export function freshHeader(name: string, modTime: number) {
let header: Header = {
target: pxt.appTarget.id,
targetVersion: pxt.appTarget.versions.target,
name: name,
meta: {},
editor: pxt.JAVASCRIPT_PROJECT_NAME,
pubId: "",
pubCurrent: false,
_rev: null,
id: U.guidGen(),
recentUse: modTime,
modificationTime: modTime,
blobId: null,
blobVersion: null,
blobCurrent: false,
isDeleted: false,
}
return header
}
}