functional initial version

This commit is contained in:
2025-10-30 16:19:38 +00:00
parent 0bcba44b1d
commit 7893dce549
10 changed files with 155 additions and 12 deletions

41
dist/index.cjs.js vendored
View File

@@ -1,5 +1,7 @@
'use strict'; 'use strict';
var parseXml = require('@rgrove/parse-xml');
class Updater { class Updater {
archiveURL; archiveURL;
feedType; feedType;
@@ -7,11 +9,46 @@ class Updater {
this.archiveURL = archiveURL; this.archiveURL = archiveURL;
this.feedType = feedType; this.feedType = feedType;
} }
async getArchive() { async getRawArchive() {
const res = await fetch(`${this.archiveURL}.${this.feedType}`, { const res = await fetch(`${this.archiveURL}.${this.feedType}`, {
"mode": "cors" "mode": "cors"
}); });
return res; const text = await res.text();
return text;
}
getVersionDetails(entry) {
let outEntry = { title: "", date: new Date, link: "", html: "" };
entry.children.forEach((elm) => {
let element = elm;
if (element.name == "title") {
outEntry.title = element.children[0].text;
}
else if (element.name == "date") {
outEntry.date = new Date(element.children[0].text);
}
else if (element.name == "link") {
outEntry.link = element.attributes["href"];
}
else if (element.name == "content") {
outEntry.html = element.children[0].text;
}
});
return outEntry;
}
async getArchive() {
const rawArchive = await this.getRawArchive();
const releaseNotes = parseXml.parseXml(rawArchive);
const output = [];
// console.dir(releaseNotes)
releaseNotes.children[0].children.forEach((elm) => {
if (elm.type == "element") {
const element = elm;
if (element.name == "entry") {
output.push(this.getVersionDetails(element));
}
}
});
return output;
} }
} }

5
dist/index.d.ts vendored
View File

@@ -1,6 +1,9 @@
import * as types from "@/types";
export default class Updater { export default class Updater {
archiveURL: string; archiveURL: string;
feedType: string; feedType: string;
constructor(archiveURL?: string, feedType?: string); constructor(archiveURL?: string, feedType?: string);
getArchive(): Promise<Response>; private getRawArchive;
private getVersionDetails;
getArchive(): Promise<types.versionNotes[]>;
} }

41
dist/index.es.js vendored
View File

@@ -1,3 +1,5 @@
import { parseXml } from '@rgrove/parse-xml';
class Updater { class Updater {
archiveURL; archiveURL;
feedType; feedType;
@@ -5,11 +7,46 @@ class Updater {
this.archiveURL = archiveURL; this.archiveURL = archiveURL;
this.feedType = feedType; this.feedType = feedType;
} }
async getArchive() { async getRawArchive() {
const res = await fetch(`${this.archiveURL}.${this.feedType}`, { const res = await fetch(`${this.archiveURL}.${this.feedType}`, {
"mode": "cors" "mode": "cors"
}); });
return res; const text = await res.text();
return text;
}
getVersionDetails(entry) {
let outEntry = { title: "", date: new Date, link: "", html: "" };
entry.children.forEach((elm) => {
let element = elm;
if (element.name == "title") {
outEntry.title = element.children[0].text;
}
else if (element.name == "date") {
outEntry.date = new Date(element.children[0].text);
}
else if (element.name == "link") {
outEntry.link = element.attributes["href"];
}
else if (element.name == "content") {
outEntry.html = element.children[0].text;
}
});
return outEntry;
}
async getArchive() {
const rawArchive = await this.getRawArchive();
const releaseNotes = parseXml(rawArchive);
const output = [];
// console.dir(releaseNotes)
releaseNotes.children[0].children.forEach((elm) => {
if (elm.type == "element") {
const element = elm;
if (element.name == "entry") {
output.push(this.getVersionDetails(element));
}
}
});
return output;
} }
} }

6
dist/types.d.ts vendored Normal file
View File

@@ -0,0 +1,6 @@
export type versionNotes = {
title: string;
date: Date;
link: string;
html: string;
};

View File

@@ -27,6 +27,7 @@
"test": "vitest" "test": "vitest"
}, },
"devDependencies": { "devDependencies": {
"@rgrove/parse-xml": "^4.2.0",
"@rollup/plugin-typescript": "^12.1.4", "@rollup/plugin-typescript": "^12.1.4",
"rollup": "^4.52.5", "rollup": "^4.52.5",
"tslib": "^2.8.1", "tslib": "^2.8.1",

View File

@@ -1,3 +1,6 @@
import * as types from "@/types";
import { parseXml, XmlDocument, XmlElement, XmlText } from "@rgrove/parse-xml";
export default class Updater { export default class Updater {
public archiveURL: string; public archiveURL: string;
public feedType: string; public feedType: string;
@@ -6,11 +9,49 @@ export default class Updater {
this.feedType = feedType; this.feedType = feedType;
} }
async getArchive(): Promise<Response> { private async getRawArchive(): Promise<string> {
const res = await fetch(`${this.archiveURL}.${this.feedType}`, { const res = await fetch(`${this.archiveURL}.${this.feedType}`, {
"mode": "cors" "mode": "cors"
}); });
return res; const text = await res.text();
return text;
}
private getVersionDetails(entry: XmlElement): types.versionNotes {
let outEntry: types.versionNotes = {title: "", date: new Date, link: "", html: ""};
entry.children.forEach((elm) => {
let element = elm as XmlElement;
if (element.name == "title") {
outEntry.title = (element.children[0] as XmlText).text;
}
else if (element.name == "date") {
outEntry.date = new Date((element.children[0] as XmlText).text);
}
else if (element.name == "link") {
outEntry.link = element.attributes["href"];
} else if (element.name == "content") {
outEntry.html = (element.children[0] as XmlText).text;
}
})
return outEntry;
}
public async getArchive(): Promise<types.versionNotes[]> {
const rawArchive: string = await this.getRawArchive();
const releaseNotes: XmlDocument = parseXml(rawArchive);
const output: types.versionNotes[] = [];
// console.dir(releaseNotes)
(releaseNotes.children[0] as XmlElement).children.forEach((elm) => {
if (elm.type == "element") {
const element = elm as XmlElement;
if (element.name == "entry") {
output.push(this.getVersionDetails(element))
}
}
});
return output;
} }
} }

6
src/types.ts Normal file
View File

@@ -0,0 +1,6 @@
export type versionNotes = {
title: string;
date: Date;
link: string;
html: string;
}

View File

@@ -1,10 +1,11 @@
import { expect, test } from "vitest"; import { expect, expectTypeOf, test } from "vitest";
import Updater from "../src/index.ts"; import Updater from "../src/index.ts";
import * as types from "../src/types.ts";
test("get archive from gitea", async (): Promise<void> => { test("get archive from gitea", async (): Promise<void> => {
const updater = new Updater("https://git.emaker.limited/MicrocontrollerCD/SoftwareRelease/releases"); const updater = new Updater("https://git.emaker.limited/MicrocontrollerCD/SoftwareRelease/releases", "atom");
const res = await updater.getArchive(); const res = await updater.getArchive();
const text = res.text(); expectTypeOf(res).toBeArray();
console.log(text); expectTypeOf(res[0]).toMatchObjectType<types.versionNotes>();
expect(res).not.toBe(null); expect(res).not.toBe(null);
}); });

View File

@@ -9,7 +9,8 @@
"declaration": true, "declaration": true,
"declarationDir": "./dist", "declarationDir": "./dist",
"paths": { "paths": {
"rollup/parseAst": ["./node_modules/rollup/dist/parseAst"] "rollup/parseAst": ["./node_modules/rollup/dist/parseAst"],
"@/*": ["./src/*"]
} }
}, },
"include": ["src/**/*"], "include": ["src/**/*"],

10
vitest.config.ts Normal file
View File

@@ -0,0 +1,10 @@
import { defineConfig } from "vitest/config";
import path from "path";
export default defineConfig({
resolve: {
alias: {
"@": path.resolve(__dirname, "./src")
}
}
});