Add gulp for handling tasks
This commit is contained in:
parent
2d56c2e2e4
commit
40144c1dd6
13 changed files with 4624 additions and 21 deletions
|
@ -11,8 +11,9 @@ module.exports = {
|
||||||
},
|
},
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
project: [
|
project: [
|
||||||
join(__dirname, "jsconfig.json"),
|
join(__dirname, "app.jsconfig.json"),
|
||||||
join(__dirname, "eslint.jsconfig.json")
|
join(__dirname, "eslint.jsconfig.json"),
|
||||||
|
join(__dirname, "gulp.tsconfig.json")
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -157,6 +157,10 @@ tsconfig.*.json
|
||||||
.drone.yml
|
.drone.yml
|
||||||
.woodpecker.yml
|
.woodpecker.yml
|
||||||
|
|
||||||
|
# Build Environment
|
||||||
|
gulp/
|
||||||
|
gulpfile.ts
|
||||||
|
|
||||||
# Temporary release-assets
|
# Temporary release-assets
|
||||||
.tagName.txt
|
.tagName.txt
|
||||||
.tagHeading.txt
|
.tagHeading.txt
|
||||||
|
|
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
|
@ -1,5 +1,8 @@
|
||||||
{
|
{
|
||||||
"javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false,
|
"javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false,
|
||||||
"javascript.format.placeOpenBraceOnNewLineForControlBlocks": true,
|
"javascript.format.placeOpenBraceOnNewLineForControlBlocks": true,
|
||||||
"javascript.format.placeOpenBraceOnNewLineForFunctions": true
|
"javascript.format.placeOpenBraceOnNewLineForFunctions": true,
|
||||||
|
"typescript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false,
|
||||||
|
"typescript.format.placeOpenBraceOnNewLineForControlBlocks": true,
|
||||||
|
"typescript.format.placeOpenBraceOnNewLineForFunctions": true
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
{
|
{
|
||||||
"extends": "./base.jsconfig.json",
|
"extends": "./tsconfig.base.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"checkJs": true,
|
"checkJs": true,
|
||||||
|
"composite": true,
|
||||||
"lib": [
|
"lib": [
|
||||||
"DOM"
|
"DOM"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"./src/**/*"
|
"./src/js/**/*"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"extends": "./base.jsconfig.json",
|
"extends": "./tsconfig.base.json",
|
||||||
"include": [
|
"include": [
|
||||||
"./.eslintrc.cjs"
|
"./.eslintrc.cjs"
|
||||||
]
|
]
|
||||||
|
|
7
gulp.tsconfig.json
Normal file
7
gulp.tsconfig.json
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"extends": "./tsconfig.base.json",
|
||||||
|
"include": [
|
||||||
|
"./gulpfile.ts",
|
||||||
|
"./gulp/**/*"
|
||||||
|
]
|
||||||
|
}
|
143
gulp/Context.ts
Normal file
143
gulp/Context.ts
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
import { fileURLToPath } from "node:url";
|
||||||
|
import path from "upath";
|
||||||
|
|
||||||
|
const { join } = path;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the context of the build system.
|
||||||
|
*/
|
||||||
|
export class Context
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The directory containing the source files.
|
||||||
|
*/
|
||||||
|
private sourceRoot = "src";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The directory containing the built files.
|
||||||
|
*/
|
||||||
|
private outRoot = "lib";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the directory containing static assets.
|
||||||
|
*/
|
||||||
|
private staticRoot = "static";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the directory containing javascript files.
|
||||||
|
*/
|
||||||
|
private jsDir = "js";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the directory containing css files.
|
||||||
|
*/
|
||||||
|
private styleDir = "styles";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the directory containing assets.
|
||||||
|
*/
|
||||||
|
private assetDir = "assets";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes a new instance of the {@link Context `Context`} class.
|
||||||
|
*/
|
||||||
|
public constructor() { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the path to the root of the project.
|
||||||
|
*/
|
||||||
|
public get ProjectRoot(): string
|
||||||
|
{
|
||||||
|
return join(fileURLToPath(new URL(".", import.meta.url)), "..");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the directory containing the source files.
|
||||||
|
*/
|
||||||
|
public get SourceRoot(): string
|
||||||
|
{
|
||||||
|
return join(this.ProjectRoot, this.sourceRoot);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the directory containing the built files.
|
||||||
|
*/
|
||||||
|
public get OutRoot(): string
|
||||||
|
{
|
||||||
|
return join(this.ProjectRoot, this.outRoot);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the path of the directory containing static assets.
|
||||||
|
*/
|
||||||
|
public get StaticRoot(): string
|
||||||
|
{
|
||||||
|
return join(this.OutRoot, this.staticRoot);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the name of the directory containing javascript files.
|
||||||
|
*/
|
||||||
|
public get JSDirName(): string
|
||||||
|
{
|
||||||
|
return this.jsDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the name of the directory containing css files.
|
||||||
|
*/
|
||||||
|
public get StyleDirName(): string
|
||||||
|
{
|
||||||
|
return this.styleDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the name of the directory containing assets.
|
||||||
|
*/
|
||||||
|
public get AssetDirName(): string
|
||||||
|
{
|
||||||
|
return this.assetDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a path relative to the {@link SourceRoot `SourceRoot`}.
|
||||||
|
*
|
||||||
|
* @param path
|
||||||
|
* The path to join.
|
||||||
|
*
|
||||||
|
* @returns
|
||||||
|
* The resulting path.
|
||||||
|
*/
|
||||||
|
public SourcePath(...path: string[]): string
|
||||||
|
{
|
||||||
|
return join(this.SourceRoot, ...path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a path relative to the {@link OutRoot `OutRoot`}.
|
||||||
|
*
|
||||||
|
* @param path
|
||||||
|
* The path to join.
|
||||||
|
*
|
||||||
|
* @returns
|
||||||
|
* The resulting path.
|
||||||
|
*/
|
||||||
|
public OutPath(...path: string[]): string
|
||||||
|
{
|
||||||
|
return join(this.OutRoot, ...path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a path relative to the {@link StaticRoot `StaticRoot`}.
|
||||||
|
*
|
||||||
|
* @param path
|
||||||
|
* The path to join.
|
||||||
|
*
|
||||||
|
* @returns
|
||||||
|
* The resulting path.
|
||||||
|
*/
|
||||||
|
public StaticPath(...path: string[]): string
|
||||||
|
{
|
||||||
|
return join(this.StaticRoot, ...path);
|
||||||
|
}
|
||||||
|
}
|
82
gulpfile.ts
Normal file
82
gulpfile.ts
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
import GulpClient from "gulp";
|
||||||
|
import { Context } from "./gulp/Context.js";
|
||||||
|
|
||||||
|
const { dest, parallel, src } = GulpClient;
|
||||||
|
const context = new Context();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds javascript files.
|
||||||
|
*
|
||||||
|
* @returns
|
||||||
|
* The resulting stream.
|
||||||
|
*/
|
||||||
|
export function JavaScript(): NodeJS.ReadWriteStream
|
||||||
|
{
|
||||||
|
return src(context.SourcePath(context.JSDirName, "**", "*.js")).pipe(
|
||||||
|
dest(context.StaticPath(context.JSDirName)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds css files.
|
||||||
|
*
|
||||||
|
* @returns
|
||||||
|
* The resulting stream.
|
||||||
|
*/
|
||||||
|
export function Styles(): NodeJS.ReadWriteStream
|
||||||
|
{
|
||||||
|
return src(context.SourcePath(context.StyleDirName, "**", "*.css")).pipe(
|
||||||
|
dest(context.StaticPath(context.StyleDirName)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds asset files.
|
||||||
|
*
|
||||||
|
* @returns
|
||||||
|
* The resulting stream.
|
||||||
|
*/
|
||||||
|
export function Assets(): NodeJS.ReadWriteStream
|
||||||
|
{
|
||||||
|
return src(context.SourcePath(context.AssetDirName, "**", "*")).pipe(
|
||||||
|
dest(context.StaticPath(context.AssetDirName)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds the web pages.
|
||||||
|
*
|
||||||
|
* @returns
|
||||||
|
* The resulting stream.
|
||||||
|
*/
|
||||||
|
export function WebPages(): NodeJS.ReadWriteStream
|
||||||
|
{
|
||||||
|
return src(context.SourcePath("**", "*.html")).pipe(
|
||||||
|
dest(context.StaticPath()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds all files.
|
||||||
|
*/
|
||||||
|
export function Build(): Promise<void>
|
||||||
|
{
|
||||||
|
return new Promise<void>(
|
||||||
|
(resolve, reject) =>
|
||||||
|
{
|
||||||
|
parallel(
|
||||||
|
[
|
||||||
|
JavaScript,
|
||||||
|
Styles,
|
||||||
|
Assets,
|
||||||
|
WebPages
|
||||||
|
])(
|
||||||
|
(error) =>
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
4370
package-lock.json
generated
4370
package-lock.json
generated
File diff suppressed because it is too large
Load diff
10
package.json
10
package.json
|
@ -1,17 +1,23 @@
|
||||||
{
|
{
|
||||||
"name": "connect-force",
|
"name": "connect-force",
|
||||||
"private": true,
|
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "A selfmade Connect Four game.",
|
"description": "A selfmade Connect Four game.",
|
||||||
"author": "Manuel Thalmann <m@nuth.ch>",
|
"author": "Manuel Thalmann <m@nuth.ch>",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"gulp": "cross-env NODE_OPTIONS=\"--loader ts-node/esm\" gulp",
|
||||||
"lint": "eslint --max-warnings 0 ./src .eslintrc.cjs",
|
"lint": "eslint --max-warnings 0 ./src .eslintrc.cjs",
|
||||||
"lint-ide": "npm run lint || exit 0"
|
"lint-ide": "npm run lint || exit 0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@manuth/eslint-plugin-typescript": "^4.0.0",
|
"@manuth/eslint-plugin-typescript": "^4.0.0",
|
||||||
"@manuth/tsconfig": "^3.0.2",
|
"@manuth/tsconfig": "^3.0.2",
|
||||||
"eslint": "^8.23.1"
|
"@types/gulp": "^4.0.10",
|
||||||
|
"@types/node": "^18.11.10",
|
||||||
|
"cross-env": "^7.0.3",
|
||||||
|
"eslint": "^8.23.1",
|
||||||
|
"gulp": "^4.0.2",
|
||||||
|
"ts-node": "^10.9.1",
|
||||||
|
"upath": "^2.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
{
|
{
|
||||||
"extends": "@manuth/tsconfig/recommended",
|
"extends": "@manuth/tsconfig/recommended",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
|
"module": "Node16",
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"checkJs": true
|
"checkJs": true
|
||||||
}
|
}
|
||||||
}
|
}
|
9
tsconfig.json
Normal file
9
tsconfig.json
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"extends": "./tsconfig.base.json",
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./gulp.tsconfig.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"include": []
|
||||||
|
}
|
Loading…
Reference in a new issue