You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

389 lines
14 KiB

/*
* THIS IS A GENERATED/BUNDLED FILE.
* The source is available at https://github.com/dylanpizzo/obsidian-plugins-galore.
* Contributions are very welcome!
*/
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
var __export = (target, all) => {
__markAsModule(target);
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __reExport = (target, module2, desc) => {
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
for (let key of __getOwnPropNames(module2))
if (!__hasOwnProp.call(target, key) && key !== "default")
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
}
return target;
};
var __toModule = (module2) => {
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
};
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
// src/main.ts
__export(exports, {
default: () => Galore
});
var import_obsidian7 = __toModule(require("obsidian"));
// src/util/cacheRequest.ts
var import_obsidian = __toModule(require("obsidian"));
var cache = [];
var cacheRequest = (req) => __async(void 0, null, function* () {
const filteredCache = cache.filter((item) => item.req === JSON.stringify(req));
if (filteredCache.length) {
return filteredCache[0].res;
}
const res = yield (0, import_obsidian.request)(req);
cache.push({ req: JSON.stringify(req), res });
return res;
});
// src/util/gitServerInterface.ts
var countRegexInString = (str, re) => ((str || "").match(re) || []).length;
var getKeyWithMax = (obj) => Object.keys(obj).reduce((a, b) => obj[a] >= obj[b] ? a : b, null);
var parseRepoURL = (url) => __async(void 0, null, function* () {
let urlObj = null;
try {
urlObj = new URL(url);
} catch (e) {
urlObj = new URL("https://" + url);
}
const domain = urlObj.hostname;
let path = urlObj.pathname;
if (path[0] === "/") {
path = path.slice(1);
}
const pathParts = path.split("/");
const owner = pathParts[0];
const name = pathParts[1];
const originBody = yield cacheRequest({ url: urlObj.origin });
const typeScores = {
github: countRegexInString(originBody, /github/gi),
gitea: countRegexInString(originBody, /gitea/gi),
gitlab: countRegexInString(originBody, /gitlab/gi)
};
const type = getKeyWithMax(typeScores);
return {
domain,
owner,
name,
url,
type
};
});
var getRelease = (repo, options) => __async(void 0, null, function* () {
const { type, domain, owner, name } = repo;
const { allowPrerelease = false } = options || {};
let release = null;
if (type === "github") {
const rawReleases = JSON.parse(yield cacheRequest({
url: `https://api.${domain}/repos/${owner}/${name}/releases`
}));
const rawRelease = rawReleases.filter((x) => !x.draft && (allowPrerelease || !x.prerelease)).sort((x) => x.published_at)[0];
release = {
version: rawRelease.tag_name,
assets: rawRelease.assets.map((asset) => ({
name: asset.name,
url: asset.browser_download_url
}))
};
} else if (type === "gitea") {
const rawReleases = JSON.parse(yield cacheRequest({
url: `https://${domain}/api/v1/repos/${owner}/${name}/releases`
}));
const rawRelease = rawReleases.filter((x) => !x.draft && (allowPrerelease || !x.prerelease)).sort((x) => x.published_at)[0];
release = {
version: rawRelease.tag_name,
assets: rawRelease.assets.map((asset) => ({
name: asset.name,
url: asset.browser_download_url
}))
};
} else if (type === "gitlab") {
const rawReleases = JSON.parse(yield cacheRequest({
url: `https://${domain}/api/v4/projects/${owner}%2F${name}/releases`
}));
const rawRelease = rawReleases.filter((x) => allowPrerelease || !x.upcoming_release).sort((x) => x.published_at)[0];
release = {
version: rawRelease.tag_name,
assets: rawRelease.assets.links.map((asset) => ({
name: asset.name,
url: asset.direct_asset_url
}))
};
}
return release;
});
var getAsset = (release, name) => __async(void 0, null, function* () {
const asset = release.assets.filter((asset2) => asset2.name === name)[0];
if (!asset) {
return null;
}
return cacheRequest({
url: asset.url
});
});
var getAssets = (release, names) => __async(void 0, null, function* () {
const assets = names ? release.assets.filter((asset) => names.includes(asset.name)) : release.assets;
return Promise.all(assets.map((asset) => __async(void 0, null, function* () {
return { name: asset.name, content: yield cacheRequest({ url: asset.url }) };
})));
});
// src/ui/settingsPage.ts
var import_obsidian6 = __toModule(require("obsidian"));
// src/util/pluginActions.ts
var import_obsidian3 = __toModule(require("obsidian"));
// src/ui/errorModal.ts
var import_obsidian2 = __toModule(require("obsidian"));
var GaloreErrorModal = class extends import_obsidian2.Modal {
constructor(app2, error) {
super(app2);
this.error = null;
this.error = error;
}
onOpen() {
const { contentEl } = this;
contentEl.setText("Oops. Something went wrong!");
}
onClose() {
const { contentEl } = this;
contentEl.empty();
}
};
// src/util/pluginActions.ts
var getPluginsDir = (app2) => {
return (0, import_obsidian3.normalizePath)(app2.vault.configDir + "/plugins") + "/";
};
var getPluginPath = (app2, pluginID) => {
return getPluginsDir(app2) + pluginID + "/";
};
var getRemotePluginMeta = (repo) => __async(void 0, null, function* () {
try {
const release = yield getRelease(repo);
return { repo, version: release.version };
} catch (error) {
console.error(error);
new GaloreErrorModal(app, error).open();
}
});
var getRemotePlugin = (repo) => __async(void 0, null, function* () {
try {
const release = yield getRelease(repo);
const galore = { repo, version: release.version };
const rawManifest = yield getAsset(release, "manifest.json");
const manifest = JSON.parse(yield getAsset(release, "manifest.json"));
const assets = yield getAssets(release);
return {
galore,
manifest,
assets
};
} catch (error) {
console.error(error);
new GaloreErrorModal(app, error).open();
}
});
var getLocalPluginMeta = (pluginsGalore, pluginID) => {
return pluginsGalore.galoreData.plugins[pluginID];
};
var writePlugin = (pluginsGalore, plugin) => __async(void 0, null, function* () {
try {
const path = getPluginPath(app, plugin.manifest.id);
const adapter = app.vault.adapter;
if (!(yield adapter.exists(path))) {
yield adapter.mkdir(path);
}
pluginsGalore.galoreData.plugins[plugin.manifest.id] = plugin.galore;
yield pluginsGalore.saveGaloreData();
yield Promise.all(plugin.assets.map((asset) => __async(void 0, null, function* () {
return adapter.write(path + asset.name, asset.content);
})));
} catch (error) {
console.error(error);
new GaloreErrorModal(app, error).open();
}
});
var installPluginFromRepo = (pluginsGalore, repo) => __async(void 0, null, function* () {
const plugin = yield getRemotePlugin(repo);
yield writePlugin(pluginsGalore, plugin);
return plugin;
});
var getGalorePlugins = (pluginsGalore) => __async(void 0, null, function* () {
try {
const app2 = pluginsGalore.app;
const adapter = app2.vault.adapter;
const pluginsDir = getPluginsDir(app2);
const galorePluginPaths = Object.keys(pluginsGalore.galoreData.plugins).map((pluginID) => pluginsDir + "/" + pluginID + "/");
const galorePlugins = yield Promise.all(galorePluginPaths.map((path) => __async(void 0, null, function* () {
const localManifest = JSON.parse(yield adapter.read(path + "manifest.json"));
const localGalore = getLocalPluginMeta(pluginsGalore, localManifest.id);
const remoteGalore = yield getRemotePluginMeta(localGalore.repo);
return {
manifest: localManifest,
repo: localGalore.repo,
localVersion: localGalore.version,
remoteVersion: remoteGalore.version,
canUpdate: localGalore.version !== remoteGalore.version
};
})));
return galorePlugins;
} catch (error) {
console.error(error);
new GaloreErrorModal(app, error).open();
}
});
// src/ui/updateModal.ts
var import_obsidian4 = __toModule(require("obsidian"));
var GaloreUpdateModal = class extends import_obsidian4.Modal {
constructor(plugin, galorePlugins) {
super(app);
this.galorePlugins = null;
this.plugin = plugin;
this.app = plugin.app;
this.galorePlugins = galorePlugins;
}
onOpen() {
const { contentEl } = this;
contentEl.createEl("h2", { text: "Plugins Galore: Update Plugins" });
new import_obsidian4.Setting(contentEl).setName("Select the plugins below to update, and then click Update.").setDesc("").addButton((button) => button.setButtonText("Cancel").onClick((ev) => {
this.close();
})).addButton((button) => button.setButtonText("Update").setCta().onClick((ev) => __async(this, null, function* () {
const pluginsToUpdate = this.galorePlugins.filter((plugin) => plugin.toggle.getValue());
for (const plugin of pluginsToUpdate) {
yield installPluginFromRepo(this.plugin, plugin.repo);
}
new import_obsidian4.Notice(`Updated ${pluginsToUpdate.length} plugins`);
this.close();
})));
for (const plugin of this.galorePlugins) {
new import_obsidian4.Setting(contentEl).setName(plugin.manifest.name).setDesc(`Version: ${plugin.localVersion} -> ${plugin.remoteVersion}`).addToggle((toggle) => {
plugin.toggle = toggle;
toggle.setValue(true);
});
}
}
onClose() {
const { contentEl } = this;
contentEl.empty();
}
};
// src/ui/addModal.ts
var import_obsidian5 = __toModule(require("obsidian"));
var GaloreAddModal = class extends import_obsidian5.Modal {
constructor(plugin) {
super(app);
this.plugin = plugin;
this.app = plugin.app;
}
onOpen() {
const { contentEl } = this;
contentEl.empty();
contentEl.createEl("h2", { text: "Plugins Galore: Add a Plugin" });
let repoURL = "";
let siteType = "github";
new import_obsidian5.Setting(contentEl).setName("Repo URL").setDesc("").addText((text) => text.setPlaceholder("https://github.com/{owner}/{plugin-repo}").setValue(repoURL).onChange((value) => {
repoURL = value;
}));
new import_obsidian5.Setting(contentEl).setName("Install the plugin").setDesc("").addButton((button) => button.setButtonText("Install").setCta().onClick((ev) => __async(this, null, function* () {
const repo = yield parseRepoURL(repoURL);
const plugin = yield installPluginFromRepo(this.plugin, repo);
new import_obsidian5.Notice(`Installed ${plugin.manifest.name}.`);
this.close();
})));
}
onClose() {
const { contentEl } = this;
contentEl.empty();
}
};
// src/ui/settingsPage.ts
var GaloreSettingTab = class extends import_obsidian6.PluginSettingTab {
constructor(plugin) {
super(app, plugin);
this.plugin = plugin;
this.app = plugin.app;
}
display() {
const { containerEl } = this;
containerEl.empty();
containerEl.createEl("h2", { text: "Plugins Galore" });
let repoURL = "";
let repoInput = null;
new import_obsidian6.Setting(containerEl).setName("Add a plugin").setDesc("").addButton((button) => button.setButtonText("Add a plugin").setCta().onClick((ev) => __async(this, null, function* () {
new GaloreAddModal(this.plugin).open();
})));
new import_obsidian6.Setting(containerEl).setName("Installed Plugins").setDesc("This only checks for updates on plugins installed through Plugins Galore.").addButton((button) => button.setButtonText("Check for updates").setCta().onClick((ev) => __async(this, null, function* () {
const galorePlugins = yield getGalorePlugins(this.plugin);
const galorePluginsThatCanUpdate = galorePlugins.filter((x) => x.canUpdate);
if (galorePluginsThatCanUpdate.length) {
new GaloreUpdateModal(this.plugin, galorePluginsThatCanUpdate).open();
} else {
new import_obsidian6.Notice("No plugins updates found.");
}
})));
}
};
// src/main.ts
var Galore = class extends import_obsidian7.Plugin {
onload() {
return __async(this, null, function* () {
yield this.loadGaloreData();
this.addSettingTab(new GaloreSettingTab(this));
});
}
loadGaloreData() {
return __async(this, null, function* () {
this.galoreData = Object.assign({}, {
plugins: {
"plugins-galore": {
repo: yield parseRepoURL("https://github.com/dylanpizzo/obsidian-plugins-galore"),
version: this.manifest.version
}
}
}, yield this.loadData());
});
}
saveGaloreData() {
return __async(this, null, function* () {
yield this.saveData(this.galoreData);
});
}
};