feat: initial version
This commit is contained in:
parent
19c82f33d6
commit
3a8855abe2
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"preset": [
|
||||||
|
"@lumeweb/node-library-preset"
|
||||||
|
]
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"name": "@lumeweb/presetter-relay-plugin-preset",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"type": "module",
|
||||||
|
"main": "lib/index.js",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "gitea@git.lumeweb.com:LumeWeb/presetter-relay-plugin-preset.git"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@lumeweb/node-library-preset": "^0.2.7",
|
||||||
|
"presetter": "^4.0.1"
|
||||||
|
},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"_id": "@lumeweb/presetter-relay-plugin-preset@0.1.0",
|
||||||
|
"scripts": {
|
||||||
|
"prepare": "presetter bootstrap",
|
||||||
|
"build": "run build",
|
||||||
|
"semantic-release": "semantic-release"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"read-pkg": "^8.0.0",
|
||||||
|
"semantic-release": "^21.0.7"
|
||||||
|
},
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"lib",
|
||||||
|
"templates"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
import { dirname, resolve } from "node:path";
|
||||||
|
import { fileURLToPath } from "node:url";
|
||||||
|
import {
|
||||||
|
loadFile,
|
||||||
|
template,
|
||||||
|
PresetAsset,
|
||||||
|
PresetContext,
|
||||||
|
resolveDirective,
|
||||||
|
} from "presetter";
|
||||||
|
import { readPackage } from "read-pkg";
|
||||||
|
|
||||||
|
const DIR = fileURLToPath(dirname(import.meta.url));
|
||||||
|
|
||||||
|
// paths to the template directory
|
||||||
|
const TEMPLATES = resolve(DIR, "..", "templates");
|
||||||
|
|
||||||
|
/** List of configurable variables */
|
||||||
|
export type Variable = {
|
||||||
|
/** the directory containing all source code (default: source) */
|
||||||
|
source: string;
|
||||||
|
/** the directory containing all the compiled files (default: lib) */
|
||||||
|
output: string;
|
||||||
|
buildSource: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const DEFAULT_VARIABLE: Variable = {
|
||||||
|
source: "build",
|
||||||
|
output: "lib",
|
||||||
|
buildSource: "src",
|
||||||
|
};
|
||||||
|
|
||||||
|
function buildOptions(context: PresetContext) {
|
||||||
|
const opts = context.custom.config?.esbuild as any;
|
||||||
|
if (!opts) {
|
||||||
|
throw new Error("esbuild options missing!");
|
||||||
|
}
|
||||||
|
|
||||||
|
return { esbuildOptions: resolveDirective(opts, context).stringifiedConfig };
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the list of templates provided by this preset
|
||||||
|
* @returns list of preset templates
|
||||||
|
*/
|
||||||
|
export default async function (context: PresetContext): Promise<PresetAsset> {
|
||||||
|
let name: string = context.custom.config?.pluginName as unknown as string;
|
||||||
|
|
||||||
|
if (!name) {
|
||||||
|
const pkg = await readPackage();
|
||||||
|
name = pkg.name.split("plugin-").pop() as string;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
extends: ["presetter-preset-strict"],
|
||||||
|
template: {
|
||||||
|
"build.js": (context) => {
|
||||||
|
const content = loadFile(resolve(TEMPLATES, "build.js"), "text");
|
||||||
|
const variable = buildOptions(context);
|
||||||
|
|
||||||
|
return template(content, variable);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
scripts: resolve(TEMPLATES, "scripts.yaml"),
|
||||||
|
noSymlinks: ["build.js"],
|
||||||
|
supplementaryConfig: {
|
||||||
|
"gitignore": ["build.js"],
|
||||||
|
"tsconfig": {
|
||||||
|
compilerOptions: {
|
||||||
|
moduleResolution: "nodenext",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"tsconfig.build": {
|
||||||
|
include: ["{buildSource}"],
|
||||||
|
compilerOptions: {
|
||||||
|
outDir: "{source}",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"esbuild": {
|
||||||
|
entryPoints: ["{source}/index.ts"],
|
||||||
|
outfile: `{output}/${name}.js`,
|
||||||
|
format: "cjs",
|
||||||
|
bundle: true,
|
||||||
|
platform: "node",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
import esbuild from "esbuild";
|
||||||
|
|
||||||
|
esbuild.buildSync({esbuildOptions});
|
|
@ -0,0 +1,6 @@
|
||||||
|
# replace the `prepare` template from presetter-preset
|
||||||
|
# so that the build procedure will not be triggered upon package installation
|
||||||
|
build: cross-env NODE_ENV=production run-s clean build:typescript:* build:esbuild
|
||||||
|
build:esbuild: node build.js
|
||||||
|
develop: cross-env NODE_ENV=development run-s "build:esbuild -- --watch {@}" --
|
||||||
|
clean:buildOutput: shx rm -rf {source}
|
Loading…
Reference in New Issue