mirror of
https://codeberg.org/readeck/browser-extension.git
synced 2026-05-08 11:22:27 +00:00
145 lines
3.1 KiB
JavaScript
145 lines
3.1 KiB
JavaScript
// SPDX-FileCopyrightText: © 2023 Olivier Meunier <olivier@neokraft.net>
|
|
//
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
"use strict"
|
|
|
|
const fs = require("fs")
|
|
const path = require("path")
|
|
|
|
const gulp = require("gulp")
|
|
const gulpEsbuild = require("gulp-esbuild")
|
|
const gulpPostcss = require("gulp-postcss")
|
|
const gulpRename = require("gulp-rename")
|
|
|
|
const sveltePlugin = require("esbuild-svelte")
|
|
const DEST = path.resolve("./addon")
|
|
|
|
// REUSE-IgnoreStart
|
|
const LICENSE_HEADER = [
|
|
"SPDX-FileCopyrightText: © 2023 Olivier Meunier <olivier@neokraft.net>",
|
|
"",
|
|
"SPDX-License-Identifier: GPL-3.0-only",
|
|
]
|
|
// REUSE-IgnoreEnd
|
|
|
|
const distInfoPlugin = {
|
|
name: "dist-info",
|
|
setup(build) {
|
|
build.onResolve({filter: /^dist-info$/}, () => {
|
|
let filename
|
|
switch (process.env.TARGET_BROWSER) {
|
|
case "chrome":
|
|
filename = "chrome.json"
|
|
break
|
|
case "safari":
|
|
filename = "safari.json"
|
|
break
|
|
default:
|
|
filename = "firefox.json"
|
|
break
|
|
}
|
|
|
|
return {path: path.resolve(`src/resources/${filename}`)}
|
|
})
|
|
},
|
|
}
|
|
|
|
function js_bundle(done) {
|
|
const files = [
|
|
//
|
|
"src/main.js",
|
|
"src/settings.js",
|
|
"src/background.js",
|
|
"src/content-script/content-script.js",
|
|
"src/oauth-callback.js",
|
|
]
|
|
|
|
files.map((x) => {
|
|
return gulp
|
|
.src(x)
|
|
.pipe(
|
|
gulpEsbuild({
|
|
sourcemap: "linked",
|
|
outfile: path.basename(x),
|
|
bundle: true,
|
|
format: "iife",
|
|
platform: "browser",
|
|
logLevel: "warning",
|
|
metafile: false,
|
|
minify: true,
|
|
banner: {
|
|
js: "//" + LICENSE_HEADER.join("\n//"),
|
|
},
|
|
loader: {
|
|
".svg": "text",
|
|
},
|
|
plugins: [sveltePlugin(), distInfoPlugin],
|
|
}),
|
|
)
|
|
.pipe(gulp.dest(path.join(DEST, "dist")))
|
|
})
|
|
|
|
done()
|
|
}
|
|
|
|
function css_bundle() {
|
|
const processors = [
|
|
//
|
|
require("./src/ui/palettes.js"),
|
|
require("postcss-import"),
|
|
require("tailwindcss"),
|
|
]
|
|
if (process.env.NODE_ENV == "production") {
|
|
processors.push(require("cssnano"))
|
|
}
|
|
|
|
return gulp
|
|
.src(["src/ui/index.css"])
|
|
.pipe(gulpRename("bundle.css"))
|
|
.pipe(gulpPostcss(processors))
|
|
.pipe(gulp.dest(path.join(DEST, "dist")))
|
|
}
|
|
|
|
function write_manifest(done) {
|
|
delete require.cache[require.resolve("./webext-manifest.js")]
|
|
let manifest = require("./webext-manifest.js")(process.env.TARGET_BROWSER)
|
|
|
|
let dest = path.join(DEST, "manifest.json")
|
|
fs.writeFile(dest, JSON.stringify(manifest, null, " ") + "\n", done)
|
|
}
|
|
|
|
function watch_js() {
|
|
gulp.watch(
|
|
[
|
|
//
|
|
"addon/action/*",
|
|
"webext-manifest.js",
|
|
"src/**/*",
|
|
],
|
|
gulp.series(js_bundle, write_manifest),
|
|
)
|
|
}
|
|
|
|
function watch_css() {
|
|
gulp.watch(
|
|
[
|
|
//
|
|
"addon/action/*",
|
|
"src/**/*",
|
|
],
|
|
gulp.series(css_bundle),
|
|
)
|
|
}
|
|
|
|
const full_build = gulp.series(
|
|
gulp.parallel(js_bundle, css_bundle),
|
|
write_manifest,
|
|
)
|
|
|
|
exports.js = js_bundle
|
|
exports.css = css_bundle
|
|
exports.manifest = write_manifest
|
|
exports.watch = gulp.series(full_build, gulp.parallel(watch_js, watch_css))
|
|
|
|
exports.default = full_build
|