@@ -1,11 +1,9 @@
import * as fs from "fs"
import toml from "toml"
import { schemeMeta } from "./colorSchemes"
-import { Meta, Verification } from "./themes/common/colorScheme"
-import https from "https"
-import crypto from "crypto"
+import { MetaAndLicense } from "./themes/common/colorScheme"
-const accepted_licenses_file = `${__dirname}/../../script/licenses/zed-licenses.toml`
+const ACCEPTED_LICENSES_FILE = `${__dirname}/../../script/licenses/zed-licenses.toml`
// Use the cargo-about configuration file as the source of truth for supported licenses.
function parseAcceptedToml(file: string): string[] {
@@ -20,8 +18,11 @@ function parseAcceptedToml(file: string): string[] {
return obj.accepted
}
-function checkLicenses(schemeMeta: Meta[], licenses: string[]) {
- for (let meta of schemeMeta) {
+function checkLicenses(
+ schemeMetaWithLicense: MetaAndLicense[],
+ licenses: string[]
+) {
+ for (const { meta } of schemeMetaWithLicense) {
// FIXME: Add support for conjuctions and conditions
if (licenses.indexOf(meta.license.SPDX) < 0) {
throw Error(
@@ -31,62 +32,23 @@ function checkLicenses(schemeMeta: Meta[], licenses: string[]) {
}
}
-function getLicenseText(
- schemeMeta: Meta[],
- callback: (meta: Meta, license_text: string) => void
-) {
- for (let meta of schemeMeta) {
- if (typeof meta.license.license_text == "string") {
- callback(meta, meta.license.license_text)
- } else {
- let license_text_obj: Verification = meta.license.license_text
- // The following copied from the example code on nodejs.org:
- // https://nodejs.org/api/http.html#httpgetoptions-callback
- https
- .get(license_text_obj.https_url, (res) => {
- const { statusCode } = res
-
- if (statusCode < 200 || statusCode >= 300) {
- throw new Error(
- `Failed to fetch license for: ${meta.name}, Status Code: ${statusCode}`
- )
- }
-
- res.setEncoding("utf8")
- let rawData = ""
- res.on("data", (chunk) => {
- rawData += chunk
- })
- res.on("end", () => {
- const hash = crypto
- .createHash("sha256")
- .update(rawData)
- .digest("hex")
- if (license_text_obj.license_checksum == hash) {
- callback(meta, rawData)
- } else {
- throw Error(
- `Checksum for ${meta.name} did not match file downloaded from ${license_text_obj.https_url}`
- )
- }
- })
- })
- .on("error", (e) => {
- throw e
- })
- }
+function generateLicenseFile(schemeMetaWithLicense: MetaAndLicense[]) {
+ for (const { meta, licenseFile } of schemeMetaWithLicense) {
+ const licenseText = fs.readFileSync(licenseFile).toString()
+ writeLicense(meta.name, meta.url, licenseText)
}
}
-function writeLicense(schemeMeta: Meta, text: String) {
+function writeLicense(
+ themeName: string,
+ themeUrl: string,
+ licenseText: String
+) {
process.stdout.write(
- `## [${schemeMeta.name}](${schemeMeta.url})\n\n${text}\n********************************************************************************\n\n`
+ `## [${themeName}](${themeUrl})\n\n${licenseText}\n********************************************************************************\n\n`
)
}
-const accepted_licenses = parseAcceptedToml(accepted_licenses_file)
-checkLicenses(schemeMeta, accepted_licenses)
-
-getLicenseText(schemeMeta, (meta, text) => {
- writeLicense(meta, text)
-})
+const acceptedLicenses = parseAcceptedToml(ACCEPTED_LICENSES_FILE)
+checkLicenses(schemeMeta, acceptedLicenses)
+generateLicenseFile(schemeMeta)