-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
122 lines (108 loc) · 3.93 KB
/
Copy pathindex.js
File metadata and controls
122 lines (108 loc) · 3.93 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
const { makePackage, Operations } = require("./src/lib/developerApi");
const path = require("node:path");
const fs = require("node:fs");
require("module-alias/register");
console.log("INFO / STAGE 1 >> Building / validating all plugins");
const defaultRepositoryName = "main";
const repositories = {[defaultRepositoryName]:{}}
const favorites = {};
/** Developer Repository */
newPackage("fdinternals").isFavorite().setRepository("dev").build();
newPackage("testpluginv2").setRepository("dev").build();
newPackage("fdps_test").setRepository("dev").build();
newPackage("MyExampleTheme").setRepository("dev").build();
newPackage("dynamic-icons").setRepository("dev").build();
newPackage("ExamplePlugin").setRepository("dev").build();
newPackage("DemoShowcase").setRepository("dev").build();
newPackage("Widget").setRepository("dev").build();
/** Main Repository */
newPackage("Spotify").isFavorite().build();
newPackage("OBSControl").isFavorite().addExtra(Operations.INSTALL_DEPS_PRE_PACKAGE).build();
newPackage("WaveLink3").isFavorite().addExtra(Operations.INSTALL_DEPS_PRE_PACKAGE).build();
newPackage("myinstants").isFavorite().addExtra(Operations.INSTALL_DEPS_PRE_PACKAGE).build();
newPackage("Clock").isFavorite().build();
newPackage("YTMD").isFavorite().build();
newPackage("TextBG").isFavorite().build();
newPackage("HAFreedeck").build();
newPackage("WaveLink").addExtra(Operations.INSTALL_DEPS_PRE_PACKAGE).build();
newPackage("Twitch").build();
newPackage("Kick").build();
newPackage("EasyMidi").addExtra(Operations.INSTALL_DEPS_PRE_PACKAGE).build();
newPackage("StreamChatMonitor").addExtra(Operations.INSTALL_DEPS_PRE_PACKAGE).build();
console.log("INFO / STAGE 2 >> Setting up favorites...");
Object.keys(repositories).forEach((repo) => {
console.log("INFO / STAGE 2 >> Working on " + repo + " favorites..")
favorites[repo].forEach((packageId) => {
if (repositories[repo][packageId]) {
if(!repositories[repo+'sorted']) repositories[repo+'sorted'] = {};
repositories[repo+'sorted'][packageId] = repositories[repo][packageId];
delete repositories[repo][packageId];
}
});
Object.assign(repositories[repo+'sorted'], repositories[repo]);
repositories[repo] = repositories[repo+'sorted'];
fs.writeFileSync(
path.resolve(__dirname, repo+".repo.json"),
JSON.stringify(repositories[repo], null, 2),
);
})
console.log("DONE. Built repository index and packages.");
function newPackage(source) {
const pkg = {
source,
extras: [],
repository: defaultRepositoryName,
favorite: false,
setSource: (t) => {
pkg.source = t;
return pkg;
},
addExtra: (t) => {
pkg.extras.push(t);
return pkg;
},
setRepository: (f) => {
pkg.repository = f;
if(!repositories[pkg.repository]) repositories[pkg.repository] = {};
return pkg;
},
isFavorite: () => {
pkg.favorite = true;
return pkg;
},
build: () => {
if(pkg.favorite) {
if(!favorites[pkg.repository]) favorites[pkg.repository] = [];
favorites[pkg.repository].push(pkg.source);
}
build(pkg.source, pkg.extras, pkg.repository);
},
};
return pkg;
}
function build(packageId, extra = [], repository = defaultRepositoryName) {
makePackage({
id: packageId,
src: path.resolve(`${packageId}.src`),
out: path.resolve("./plugins"),
extra: extra,
});
const folderPath = path.resolve(__dirname, packageId + ".src");
if (!fs.existsSync(folderPath)) {
console.error(`ERROR >> Source directory ${folderPath} does not exist.`);
process.exit(1);
}
const { freedeck, name, author, description, version } = require(
path.resolve(folderPath, "package.json"),
);
const usedRepo = repositories[repository];
usedRepo[name] = {
message: freedeck.message,
source: `github:freedeck/${name}`,
author,
title: freedeck.title,
description,
version,
download: `https://freedeck.github.io/plugins/plugins/${name}.fdpackage`,
};
}