1 | import {cached, defineAssoc} from "./decorators.js";
|
2 | import {lib, Collection, RallyBase} from "./rally-tools.js";
|
3 |
|
4 | class Provider extends RallyBase{
|
5 | constructor({data, remote}){
|
6 | super();
|
7 | this.data = data;
|
8 | this.meta = {};
|
9 | this.remote = remote;
|
10 | }
|
11 |
|
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 |
|
50 | defineAssoc(Provider, "id", "data.id");
|
51 | defineAssoc(Provider, "name", "data.attributes.name");
|
52 | defineAssoc(Provider, "category", "data.attributes.category");
|
53 | defineAssoc(Provider, "remote", "meta.remote");
|
54 | defineAssoc(Provider, "editorConfig", "meta.editorConfig");
|
55 | Provider.endpoint = "providerTypes";
|
56 |
|
57 | export default Provider;
|