UNPKG

1.8 kBJavaScriptView Raw
1import {cached, defineAssoc} from "./decorators.js";
2import {lib, Collection, RallyBase} from "./rally-tools.js";
3
4class Provider extends RallyBase{
5 constructor({data, remote}){
6 super();
7 this.data = data;
8 this.meta = {};
9 this.remote = remote;
10 }
11 //cached
12 async getEditorConfig(){
13 if(this.editorConfig) return this.editorConfig;
14
15 this.editorConfig = await lib.makeAPIRequest({
16 env: this.remote,
17 path_full: this.data.links.editorConfig
18 });
19 this.editorConfig.fileExt = await this.getFileExtension();
20 return this.editorConfig;
21 }
22 static async getAllPreCollect(providers){
23 return providers.sort((a, b) => {
24 return a.attributes.category.localeCompare(b.attributes.category) ||
25 a.attributes.name .localeCompare(b.attributes.name);
26 });
27 }
28
29 async getFileExtension(){
30 let config = await this.getEditorConfig();
31 let map = {
32 python: "py",
33 text: "txt",
34 getmap(key){
35 if(this.name === "Aurora") return "zip";
36 if(this[key]) return this[key];
37 return key;
38 }
39 }
40 return map.getmap(config.lang);
41 }
42
43 chalkPrint(pad=true){
44 let id = String(this.id)
45 if(pad) id = id.padStart(4);
46 return chalk`{green ${id}}: {blue ${this.category}} - {green ${this.name}}`;
47 }
48}
49
50defineAssoc(Provider, "id", "data.id");
51defineAssoc(Provider, "name", "data.attributes.name");
52defineAssoc(Provider, "category", "data.attributes.category");
53defineAssoc(Provider, "remote", "meta.remote");
54defineAssoc(Provider, "editorConfig", "meta.editorConfig");
55Provider.endpoint = "providerTypes";
56
57export default Provider;